diff --git a/myenv/bin/Activate.ps1 b/myenv/bin/Activate.ps1 deleted file mode 100644 index b49d77b..0000000 --- a/myenv/bin/Activate.ps1 +++ /dev/null @@ -1,247 +0,0 @@ -<# -.Synopsis -Activate a Python virtual environment for the current PowerShell session. - -.Description -Pushes the python executable for a virtual environment to the front of the -$Env:PATH environment variable and sets the prompt to signify that you are -in a Python virtual environment. Makes use of the command line switches as -well as the `pyvenv.cfg` file values present in the virtual environment. - -.Parameter VenvDir -Path to the directory that contains the virtual environment to activate. The -default value for this is the parent of the directory that the Activate.ps1 -script is located within. - -.Parameter Prompt -The prompt prefix to display when this virtual environment is activated. By -default, this prompt is the name of the virtual environment folder (VenvDir) -surrounded by parentheses and followed by a single space (ie. '(.venv) '). - -.Example -Activate.ps1 -Activates the Python virtual environment that contains the Activate.ps1 script. - -.Example -Activate.ps1 -Verbose -Activates the Python virtual environment that contains the Activate.ps1 script, -and shows extra information about the activation as it executes. - -.Example -Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv -Activates the Python virtual environment located in the specified location. - -.Example -Activate.ps1 -Prompt "MyPython" -Activates the Python virtual environment that contains the Activate.ps1 script, -and prefixes the current prompt with the specified string (surrounded in -parentheses) while the virtual environment is active. - -.Notes -On Windows, it may be required to enable this Activate.ps1 script by setting the -execution policy for the user. You can do this by issuing the following PowerShell -command: - -PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - -For more information on Execution Policies: -https://go.microsoft.com/fwlink/?LinkID=135170 - -#> -Param( - [Parameter(Mandatory = $false)] - [String] - $VenvDir, - [Parameter(Mandatory = $false)] - [String] - $Prompt -) - -<# Function declarations --------------------------------------------------- #> - -<# -.Synopsis -Remove all shell session elements added by the Activate script, including the -addition of the virtual environment's Python executable from the beginning of -the PATH variable. - -.Parameter NonDestructive -If present, do not remove this function from the global namespace for the -session. - -#> -function global:deactivate ([switch]$NonDestructive) { - # Revert to original values - - # The prior prompt: - if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { - Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt - Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT - } - - # The prior PYTHONHOME: - if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { - Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME - Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME - } - - # The prior PATH: - if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { - Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH - Remove-Item -Path Env:_OLD_VIRTUAL_PATH - } - - # Just remove the VIRTUAL_ENV altogether: - if (Test-Path -Path Env:VIRTUAL_ENV) { - Remove-Item -Path env:VIRTUAL_ENV - } - - # Just remove VIRTUAL_ENV_PROMPT altogether. - if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { - Remove-Item -Path env:VIRTUAL_ENV_PROMPT - } - - # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: - if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { - Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force - } - - # Leave deactivate function in the global namespace if requested: - if (-not $NonDestructive) { - Remove-Item -Path function:deactivate - } -} - -<# -.Description -Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the -given folder, and returns them in a map. - -For each line in the pyvenv.cfg file, if that line can be parsed into exactly -two strings separated by `=` (with any amount of whitespace surrounding the =) -then it is considered a `key = value` line. The left hand string is the key, -the right hand is the value. - -If the value starts with a `'` or a `"` then the first and last character is -stripped from the value before being captured. - -.Parameter ConfigDir -Path to the directory that contains the `pyvenv.cfg` file. -#> -function Get-PyVenvConfig( - [String] - $ConfigDir -) { - Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" - - # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). - $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue - - # An empty map will be returned if no config file is found. - $pyvenvConfig = @{ } - - if ($pyvenvConfigPath) { - - Write-Verbose "File exists, parse `key = value` lines" - $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath - - $pyvenvConfigContent | ForEach-Object { - $keyval = $PSItem -split "\s*=\s*", 2 - if ($keyval[0] -and $keyval[1]) { - $val = $keyval[1] - - # Remove extraneous quotations around a string value. - if ("'""".Contains($val.Substring(0, 1))) { - $val = $val.Substring(1, $val.Length - 2) - } - - $pyvenvConfig[$keyval[0]] = $val - Write-Verbose "Adding Key: '$($keyval[0])'='$val'" - } - } - } - return $pyvenvConfig -} - - -<# Begin Activate script --------------------------------------------------- #> - -# Determine the containing directory of this script -$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition -$VenvExecDir = Get-Item -Path $VenvExecPath - -Write-Verbose "Activation script is located in path: '$VenvExecPath'" -Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" -Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" - -# Set values required in priority: CmdLine, ConfigFile, Default -# First, get the location of the virtual environment, it might not be -# VenvExecDir if specified on the command line. -if ($VenvDir) { - Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" -} -else { - Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." - $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") - Write-Verbose "VenvDir=$VenvDir" -} - -# Next, read the `pyvenv.cfg` file to determine any required value such -# as `prompt`. -$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir - -# Next, set the prompt from the command line, or the config file, or -# just use the name of the virtual environment folder. -if ($Prompt) { - Write-Verbose "Prompt specified as argument, using '$Prompt'" -} -else { - Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" - if ($pyvenvCfg -and $pyvenvCfg['prompt']) { - Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" - $Prompt = $pyvenvCfg['prompt']; - } - else { - Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" - Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" - $Prompt = Split-Path -Path $venvDir -Leaf - } -} - -Write-Verbose "Prompt = '$Prompt'" -Write-Verbose "VenvDir='$VenvDir'" - -# Deactivate any currently active virtual environment, but leave the -# deactivate function in place. -deactivate -nondestructive - -# Now set the environment variable VIRTUAL_ENV, used by many tools to determine -# that there is an activated venv. -$env:VIRTUAL_ENV = $VenvDir - -if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { - - Write-Verbose "Setting prompt to '$Prompt'" - - # Set the prompt to include the env name - # Make sure _OLD_VIRTUAL_PROMPT is global - function global:_OLD_VIRTUAL_PROMPT { "" } - Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT - New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt - - function global:prompt { - Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " - _OLD_VIRTUAL_PROMPT - } - $env:VIRTUAL_ENV_PROMPT = $Prompt -} - -# Clear PYTHONHOME -if (Test-Path -Path Env:PYTHONHOME) { - Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME - Remove-Item -Path Env:PYTHONHOME -} - -# Add the venv to the PATH -Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH -$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/myenv/bin/activate b/myenv/bin/activate deleted file mode 100644 index dc35cff..0000000 --- a/myenv/bin/activate +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# You cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # Call hash to forget past locations. Without forgetting - # past locations the $PATH changes we made may not be respected. - # See "man bash" for more details. hash is usually a builtin of your shell - hash -r 2> /dev/null - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - unset VIRTUAL_ENV_PROMPT - if [ ! "${1:-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -# on Windows, a path can contain colons and backslashes and has to be converted: -case "$(uname)" in - CYGWIN*|MSYS*|MINGW*) - # transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW - # and to /cygdrive/d/path/to/venv on Cygwin - VIRTUAL_ENV=$(cygpath /home/teg/Documents/sp-hydra-veil-gui/myenv) - export VIRTUAL_ENV - ;; - *) - # use the path as-is - export VIRTUAL_ENV=/home/teg/Documents/sp-hydra-veil-gui/myenv - ;; -esac - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/"bin":$PATH" -export PATH - -VIRTUAL_ENV_PROMPT='(myenv) ' -export VIRTUAL_ENV_PROMPT - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - PS1="("'(myenv) '") ${PS1:-}" - export PS1 -fi - -# Call hash to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -hash -r 2> /dev/null diff --git a/myenv/bin/activate.csh b/myenv/bin/activate.csh deleted file mode 100644 index 6853908..0000000 --- a/myenv/bin/activate.csh +++ /dev/null @@ -1,27 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. - -# Created by Davide Di Blasi . -# Ported to Python 3.3 venv by Andrew Svetlov - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV /home/teg/Documents/sp-hydra-veil-gui/myenv - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/"bin":$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = '(myenv) '"$prompt" - setenv VIRTUAL_ENV_PROMPT '(myenv) ' -endif - -alias pydoc python -m pydoc - -rehash diff --git a/myenv/bin/activate.fish b/myenv/bin/activate.fish deleted file mode 100644 index 3fcbbd6..0000000 --- a/myenv/bin/activate.fish +++ /dev/null @@ -1,69 +0,0 @@ -# This file must be used with "source /bin/activate.fish" *from fish* -# (https://fishshell.com/). You cannot run it directly. - -function deactivate -d "Exit virtual environment and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - set -e _OLD_FISH_PROMPT_OVERRIDE - # prevents error when using nested fish instances (Issue #93858) - if functions -q _old_fish_prompt - functions -e fish_prompt - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - end - - set -e VIRTUAL_ENV - set -e VIRTUAL_ENV_PROMPT - if test "$argv[1]" != "nondestructive" - # Self-destruct! - functions -e deactivate - end -end - -# Unset irrelevant variables. -deactivate nondestructive - -set -gx VIRTUAL_ENV /home/teg/Documents/sp-hydra-veil-gui/myenv - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/"bin $PATH - -# Unset PYTHONHOME if set. -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # Save the current fish_prompt function as the function _old_fish_prompt. - functions -c fish_prompt _old_fish_prompt - - # With the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command. - set -l old_status $status - - # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s%s%s" (set_color 4B8BBE) '(myenv) ' (set_color normal) - - # Restore the return status of the previous command. - echo "exit $old_status" | . - # Output the original/"old" prompt. - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" - set -gx VIRTUAL_ENV_PROMPT '(myenv) ' -end diff --git a/myenv/bin/normalizer b/myenv/bin/normalizer deleted file mode 100755 index 349c5ee..0000000 --- a/myenv/bin/normalizer +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from charset_normalizer.cli import cli_detect -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(cli_detect()) diff --git a/myenv/bin/pip b/myenv/bin/pip deleted file mode 100755 index 6f5d5fd..0000000 --- a/myenv/bin/pip +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/pip3 b/myenv/bin/pip3 deleted file mode 100755 index 6f5d5fd..0000000 --- a/myenv/bin/pip3 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/pip3.12 b/myenv/bin/pip3.12 deleted file mode 100755 index 6f5d5fd..0000000 --- a/myenv/bin/pip3.12 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/pylupdate6 b/myenv/bin/pylupdate6 deleted file mode 100755 index d0adc7d..0000000 --- a/myenv/bin/pylupdate6 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from PyQt6.lupdate.pylupdate import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/python b/myenv/bin/python deleted file mode 120000 index 11b9d88..0000000 --- a/myenv/bin/python +++ /dev/null @@ -1 +0,0 @@ -python3.12 \ No newline at end of file diff --git a/myenv/bin/python3 b/myenv/bin/python3 deleted file mode 120000 index 11b9d88..0000000 --- a/myenv/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -python3.12 \ No newline at end of file diff --git a/myenv/bin/python3.12 b/myenv/bin/python3.12 deleted file mode 120000 index dc92e12..0000000 --- a/myenv/bin/python3.12 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python3.12 \ No newline at end of file diff --git a/myenv/bin/pyuic6 b/myenv/bin/pyuic6 deleted file mode 100755 index 12512b6..0000000 --- a/myenv/bin/pyuic6 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from PyQt6.uic.pyuic import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/qr b/myenv/bin/qr deleted file mode 100755 index daf7f4b..0000000 --- a/myenv/bin/qr +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from qrcode.console_scripts import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/myenv/bin/tor-prompt b/myenv/bin/tor-prompt deleted file mode 100755 index 8389a03..0000000 --- a/myenv/bin/tor-prompt +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/teg/Documents/sp-hydra-veil-gui/myenv/bin/python3.12 -# Copyright 2014-2017, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import stem.interpreter - -if __name__ == '__main__': - stem.interpreter.main() diff --git a/myenv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 131c174..0000000 Binary files a/myenv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py deleted file mode 100644 index 366e0c8..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py +++ /dev/null @@ -1,291 +0,0 @@ -from __future__ import annotations - -import os -from io import BytesIO -from typing import IO - -from . import ExifTags, Image, ImageFile - -try: - from . import _avif - - SUPPORTED = True -except ImportError: - SUPPORTED = False - -# Decoder options as module globals, until there is a way to pass parameters -# to Image.open (see https://github.com/python-pillow/Pillow/issues/569) -DECODE_CODEC_CHOICE = "auto" -DEFAULT_MAX_THREADS = 0 - - -def get_codec_version(codec_name: str) -> str | None: - versions = _avif.codec_versions() - for version in versions.split(", "): - if version.split(" [")[0] == codec_name: - return version.split(":")[-1].split(" ")[0] - return None - - -def _accept(prefix: bytes) -> bool | str: - if prefix[4:8] != b"ftyp": - return False - major_brand = prefix[8:12] - if major_brand in ( - # coding brands - b"avif", - b"avis", - # We accept files with AVIF container brands; we can't yet know if - # the ftyp box has the correct compatible brands, but if it doesn't - # then the plugin will raise a SyntaxError which Pillow will catch - # before moving on to the next plugin that accepts the file. - # - # Also, because this file might not actually be an AVIF file, we - # don't raise an error if AVIF support isn't properly compiled. - b"mif1", - b"msf1", - ): - if not SUPPORTED: - return ( - "image file could not be identified because AVIF support not installed" - ) - return True - return False - - -def _get_default_max_threads() -> int: - if DEFAULT_MAX_THREADS: - return DEFAULT_MAX_THREADS - if hasattr(os, "sched_getaffinity"): - return len(os.sched_getaffinity(0)) - else: - return os.cpu_count() or 1 - - -class AvifImageFile(ImageFile.ImageFile): - format = "AVIF" - format_description = "AVIF image" - __frame = -1 - - def _open(self) -> None: - if not SUPPORTED: - msg = "image file could not be opened because AVIF support not installed" - raise SyntaxError(msg) - - if DECODE_CODEC_CHOICE != "auto" and not _avif.decoder_codec_available( - DECODE_CODEC_CHOICE - ): - msg = "Invalid opening codec" - raise ValueError(msg) - self._decoder = _avif.AvifDecoder( - self.fp.read(), - DECODE_CODEC_CHOICE, - _get_default_max_threads(), - ) - - # Get info from decoder - self._size, self.n_frames, self._mode, icc, exif, exif_orientation, xmp = ( - self._decoder.get_info() - ) - self.is_animated = self.n_frames > 1 - - if icc: - self.info["icc_profile"] = icc - if xmp: - self.info["xmp"] = xmp - - if exif_orientation != 1 or exif: - exif_data = Image.Exif() - if exif: - exif_data.load(exif) - original_orientation = exif_data.get(ExifTags.Base.Orientation, 1) - else: - original_orientation = 1 - if exif_orientation != original_orientation: - exif_data[ExifTags.Base.Orientation] = exif_orientation - exif = exif_data.tobytes() - if exif: - self.info["exif"] = exif - self.seek(0) - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - - # Set tile - self.__frame = frame - self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 0, self.mode)] - - def load(self) -> Image.core.PixelAccess | None: - if self.tile: - # We need to load the image data for this frame - data, timescale, pts_in_timescales, duration_in_timescales = ( - self._decoder.get_frame(self.__frame) - ) - self.info["timestamp"] = round(1000 * (pts_in_timescales / timescale)) - self.info["duration"] = round(1000 * (duration_in_timescales / timescale)) - - if self.fp and self._exclusive_fp: - self.fp.close() - self.fp = BytesIO(data) - - return super().load() - - def load_seek(self, pos: int) -> None: - pass - - def tell(self) -> int: - return self.__frame - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - _save(im, fp, filename, save_all=True) - - -def _save( - im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False -) -> None: - info = im.encoderinfo.copy() - if save_all: - append_images = list(info.get("append_images", [])) - else: - append_images = [] - - total = 0 - for ims in [im] + append_images: - total += getattr(ims, "n_frames", 1) - - quality = info.get("quality", 75) - if not isinstance(quality, int) or quality < 0 or quality > 100: - msg = "Invalid quality setting" - raise ValueError(msg) - - duration = info.get("duration", 0) - subsampling = info.get("subsampling", "4:2:0") - speed = info.get("speed", 6) - max_threads = info.get("max_threads", _get_default_max_threads()) - codec = info.get("codec", "auto") - if codec != "auto" and not _avif.encoder_codec_available(codec): - msg = "Invalid saving codec" - raise ValueError(msg) - range_ = info.get("range", "full") - tile_rows_log2 = info.get("tile_rows", 0) - tile_cols_log2 = info.get("tile_cols", 0) - alpha_premultiplied = bool(info.get("alpha_premultiplied", False)) - autotiling = bool(info.get("autotiling", tile_rows_log2 == tile_cols_log2 == 0)) - - icc_profile = info.get("icc_profile", im.info.get("icc_profile")) - exif_orientation = 1 - if exif := info.get("exif"): - if isinstance(exif, Image.Exif): - exif_data = exif - else: - exif_data = Image.Exif() - exif_data.load(exif) - if ExifTags.Base.Orientation in exif_data: - exif_orientation = exif_data.pop(ExifTags.Base.Orientation) - exif = exif_data.tobytes() if exif_data else b"" - elif isinstance(exif, Image.Exif): - exif = exif_data.tobytes() - - xmp = info.get("xmp") - - if isinstance(xmp, str): - xmp = xmp.encode("utf-8") - - advanced = info.get("advanced") - if advanced is not None: - if isinstance(advanced, dict): - advanced = advanced.items() - try: - advanced = tuple(advanced) - except TypeError: - invalid = True - else: - invalid = any(not isinstance(v, tuple) or len(v) != 2 for v in advanced) - if invalid: - msg = ( - "advanced codec options must be a dict of key-value string " - "pairs or a series of key-value two-tuples" - ) - raise ValueError(msg) - - # Setup the AVIF encoder - enc = _avif.AvifEncoder( - im.size, - subsampling, - quality, - speed, - max_threads, - codec, - range_, - tile_rows_log2, - tile_cols_log2, - alpha_premultiplied, - autotiling, - icc_profile or b"", - exif or b"", - exif_orientation, - xmp or b"", - advanced, - ) - - # Add each frame - frame_idx = 0 - frame_duration = 0 - cur_idx = im.tell() - is_single_frame = total == 1 - try: - for ims in [im] + append_images: - # Get number of frames in this image - nfr = getattr(ims, "n_frames", 1) - - for idx in range(nfr): - ims.seek(idx) - - # Make sure image mode is supported - frame = ims - rawmode = ims.mode - if ims.mode not in {"RGB", "RGBA"}: - rawmode = "RGBA" if ims.has_transparency_data else "RGB" - frame = ims.convert(rawmode) - - # Update frame duration - if isinstance(duration, (list, tuple)): - frame_duration = duration[frame_idx] - else: - frame_duration = duration - - # Append the frame to the animation encoder - enc.add( - frame.tobytes("raw", rawmode), - frame_duration, - frame.size, - rawmode, - is_single_frame, - ) - - # Update frame index - frame_idx += 1 - - if not save_all: - break - - finally: - im.seek(cur_idx) - - # Get the final output from the encoder - data = enc.finish() - if data is None: - msg = "cannot write file as AVIF (encoder returned None)" - raise OSError(msg) - - fp.write(data) - - -Image.register_open(AvifImageFile.format, AvifImageFile, _accept) -if SUPPORTED: - Image.register_save(AvifImageFile.format, _save) - Image.register_save_all(AvifImageFile.format, _save_all) - Image.register_extensions(AvifImageFile.format, [".avif", ".avifs"]) - Image.register_mime(AvifImageFile.format, "image/avif") diff --git a/myenv/lib/python3.12/site-packages/PIL/BdfFontFile.py b/myenv/lib/python3.12/site-packages/PIL/BdfFontFile.py deleted file mode 100644 index f175e2f..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/BdfFontFile.py +++ /dev/null @@ -1,122 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# bitmap distribution font (bdf) file parser -# -# history: -# 1996-05-16 fl created (as bdf2pil) -# 1997-08-25 fl converted to FontFile driver -# 2001-05-25 fl removed bogus __init__ call -# 2002-11-20 fl robustification (from Kevin Cazabon, Dmitry Vasiliev) -# 2003-04-22 fl more robustification (from Graham Dumpleton) -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1997-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -""" -Parse X Bitmap Distribution Format (BDF) -""" -from __future__ import annotations - -from typing import BinaryIO - -from . import FontFile, Image - - -def bdf_char( - f: BinaryIO, -) -> ( - tuple[ - str, - int, - tuple[tuple[int, int], tuple[int, int, int, int], tuple[int, int, int, int]], - Image.Image, - ] - | None -): - # skip to STARTCHAR - while True: - s = f.readline() - if not s: - return None - if s.startswith(b"STARTCHAR"): - break - id = s[9:].strip().decode("ascii") - - # load symbol properties - props = {} - while True: - s = f.readline() - if not s or s.startswith(b"BITMAP"): - break - i = s.find(b" ") - props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") - - # load bitmap - bitmap = bytearray() - while True: - s = f.readline() - if not s or s.startswith(b"ENDCHAR"): - break - bitmap += s[:-1] - - # The word BBX - # followed by the width in x (BBw), height in y (BBh), - # and x and y displacement (BBxoff0, BByoff0) - # of the lower left corner from the origin of the character. - width, height, x_disp, y_disp = (int(p) for p in props["BBX"].split()) - - # The word DWIDTH - # followed by the width in x and y of the character in device pixels. - dwx, dwy = (int(p) for p in props["DWIDTH"].split()) - - bbox = ( - (dwx, dwy), - (x_disp, -y_disp - height, width + x_disp, -y_disp), - (0, 0, width, height), - ) - - try: - im = Image.frombytes("1", (width, height), bitmap, "hex", "1") - except ValueError: - # deal with zero-width characters - im = Image.new("1", (width, height)) - - return id, int(props["ENCODING"]), bbox, im - - -class BdfFontFile(FontFile.FontFile): - """Font file plugin for the X11 BDF format.""" - - def __init__(self, fp: BinaryIO) -> None: - super().__init__() - - s = fp.readline() - if not s.startswith(b"STARTFONT 2.1"): - msg = "not a valid BDF file" - raise SyntaxError(msg) - - props = {} - comments = [] - - while True: - s = fp.readline() - if not s or s.startswith(b"ENDPROPERTIES"): - break - i = s.find(b" ") - props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") - if s[:i] in [b"COMMENT", b"COPYRIGHT"]: - if s.find(b"LogicalFontDescription") < 0: - comments.append(s[i + 1 : -1].decode("ascii")) - - while True: - c = bdf_char(fp) - if not c: - break - id, ch, (xy, dst, src), im = c - if 0 <= ch < len(self.glyph): - self.glyph[ch] = xy, dst, src, im diff --git a/myenv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py deleted file mode 100644 index f7be774..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py +++ /dev/null @@ -1,497 +0,0 @@ -""" -Blizzard Mipmap Format (.blp) -Jerome Leclanche - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: - https://creativecommons.org/publicdomain/zero/1.0/ - -BLP1 files, used mostly in Warcraft III, are not fully supported. -All types of BLP2 files used in World of Warcraft are supported. - -The BLP file structure consists of a header, up to 16 mipmaps of the -texture - -Texture sizes must be powers of two, though the two dimensions do -not have to be equal; 512x256 is valid, but 512x200 is not. -The first mipmap (mipmap #0) is the full size image; each subsequent -mipmap halves both dimensions. The final mipmap should be 1x1. - -BLP files come in many different flavours: -* JPEG-compressed (type == 0) - only supported for BLP1. -* RAW images (type == 1, encoding == 1). Each mipmap is stored as an - array of 8-bit values, one per pixel, left to right, top to bottom. - Each value is an index to the palette. -* DXT-compressed (type == 1, encoding == 2): -- DXT1 compression is used if alpha_encoding == 0. - - An additional alpha bit is used if alpha_depth == 1. - - DXT3 compression is used if alpha_encoding == 1. - - DXT5 compression is used if alpha_encoding == 7. -""" - -from __future__ import annotations - -import abc -import os -import struct -from enum import IntEnum -from io import BytesIO -from typing import IO - -from . import Image, ImageFile - - -class Format(IntEnum): - JPEG = 0 - - -class Encoding(IntEnum): - UNCOMPRESSED = 1 - DXT = 2 - UNCOMPRESSED_RAW_BGRA = 3 - - -class AlphaEncoding(IntEnum): - DXT1 = 0 - DXT3 = 1 - DXT5 = 7 - - -def unpack_565(i: int) -> tuple[int, int, int]: - return ((i >> 11) & 0x1F) << 3, ((i >> 5) & 0x3F) << 2, (i & 0x1F) << 3 - - -def decode_dxt1( - data: bytes, alpha: bool = False -) -> tuple[bytearray, bytearray, bytearray, bytearray]: - """ - input: one "row" of data (i.e. will produce 4*width pixels) - """ - - blocks = len(data) // 8 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block_index in range(blocks): - # Decode next 8-byte block. - idx = block_index * 8 - color0, color1, bits = struct.unpack_from("> 2 - - a = 0xFF - if control == 0: - r, g, b = r0, g0, b0 - elif control == 1: - r, g, b = r1, g1, b1 - elif control == 2: - if color0 > color1: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - else: - r = (r0 + r1) // 2 - g = (g0 + g1) // 2 - b = (b0 + b1) // 2 - elif control == 3: - if color0 > color1: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - else: - r, g, b, a = 0, 0, 0, 0 - - if alpha: - ret[j].extend([r, g, b, a]) - else: - ret[j].extend([r, g, b]) - - return ret - - -def decode_dxt3(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray]: - """ - input: one "row" of data (i.e. will produce 4*width pixels) - """ - - blocks = len(data) // 16 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block_index in range(blocks): - idx = block_index * 16 - block = data[idx : idx + 16] - # Decode next 16-byte block. - bits = struct.unpack_from("<8B", block) - color0, color1 = struct.unpack_from(">= 4 - else: - high = True - a &= 0xF - a *= 17 # We get a value between 0 and 15 - - color_code = (code >> 2 * (4 * j + i)) & 0x03 - - if color_code == 0: - r, g, b = r0, g0, b0 - elif color_code == 1: - r, g, b = r1, g1, b1 - elif color_code == 2: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - elif color_code == 3: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - - ret[j].extend([r, g, b, a]) - - return ret - - -def decode_dxt5(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray]: - """ - input: one "row" of data (i.e. will produce 4 * width pixels) - """ - - blocks = len(data) // 16 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block_index in range(blocks): - idx = block_index * 16 - block = data[idx : idx + 16] - # Decode next 16-byte block. - a0, a1 = struct.unpack_from("> alphacode_index) & 0x07 - elif alphacode_index == 15: - alphacode = (alphacode2 >> 15) | ((alphacode1 << 1) & 0x06) - else: # alphacode_index >= 18 and alphacode_index <= 45 - alphacode = (alphacode1 >> (alphacode_index - 16)) & 0x07 - - if alphacode == 0: - a = a0 - elif alphacode == 1: - a = a1 - elif a0 > a1: - a = ((8 - alphacode) * a0 + (alphacode - 1) * a1) // 7 - elif alphacode == 6: - a = 0 - elif alphacode == 7: - a = 255 - else: - a = ((6 - alphacode) * a0 + (alphacode - 1) * a1) // 5 - - color_code = (code >> 2 * (4 * j + i)) & 0x03 - - if color_code == 0: - r, g, b = r0, g0, b0 - elif color_code == 1: - r, g, b = r1, g1, b1 - elif color_code == 2: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - elif color_code == 3: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - - ret[j].extend([r, g, b, a]) - - return ret - - -class BLPFormatError(NotImplementedError): - pass - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith((b"BLP1", b"BLP2")) - - -class BlpImageFile(ImageFile.ImageFile): - """ - Blizzard Mipmap Format - """ - - format = "BLP" - format_description = "Blizzard Mipmap Format" - - def _open(self) -> None: - self.magic = self.fp.read(4) - if not _accept(self.magic): - msg = f"Bad BLP magic {repr(self.magic)}" - raise BLPFormatError(msg) - - compression = struct.unpack(" tuple[int, int]: - try: - self._read_header() - self._load() - except struct.error as e: - msg = "Truncated BLP file" - raise OSError(msg) from e - return -1, 0 - - @abc.abstractmethod - def _load(self) -> None: - pass - - def _read_header(self) -> None: - self._offsets = struct.unpack("<16I", self._safe_read(16 * 4)) - self._lengths = struct.unpack("<16I", self._safe_read(16 * 4)) - - def _safe_read(self, length: int) -> bytes: - assert self.fd is not None - return ImageFile._safe_read(self.fd, length) - - def _read_palette(self) -> list[tuple[int, int, int, int]]: - ret = [] - for i in range(256): - try: - b, g, r, a = struct.unpack("<4B", self._safe_read(4)) - except struct.error: - break - ret.append((b, g, r, a)) - return ret - - def _read_bgra( - self, palette: list[tuple[int, int, int, int]], alpha: bool - ) -> bytearray: - data = bytearray() - _data = BytesIO(self._safe_read(self._lengths[0])) - while True: - try: - (offset,) = struct.unpack(" None: - self._compression, self._encoding, alpha = self.args - - if self._compression == Format.JPEG: - self._decode_jpeg_stream() - - elif self._compression == 1: - if self._encoding in (4, 5): - palette = self._read_palette() - data = self._read_bgra(palette, alpha) - self.set_as_raw(data) - else: - msg = f"Unsupported BLP encoding {repr(self._encoding)}" - raise BLPFormatError(msg) - else: - msg = f"Unsupported BLP compression {repr(self._encoding)}" - raise BLPFormatError(msg) - - def _decode_jpeg_stream(self) -> None: - from .JpegImagePlugin import JpegImageFile - - (jpeg_header_size,) = struct.unpack(" None: - self._compression, self._encoding, alpha, self._alpha_encoding = self.args - - palette = self._read_palette() - - assert self.fd is not None - self.fd.seek(self._offsets[0]) - - if self._compression == 1: - # Uncompressed or DirectX compression - - if self._encoding == Encoding.UNCOMPRESSED: - data = self._read_bgra(palette, alpha) - - elif self._encoding == Encoding.DXT: - data = bytearray() - if self._alpha_encoding == AlphaEncoding.DXT1: - linesize = (self.state.xsize + 3) // 4 * 8 - for yb in range((self.state.ysize + 3) // 4): - for d in decode_dxt1(self._safe_read(linesize), alpha): - data += d - - elif self._alpha_encoding == AlphaEncoding.DXT3: - linesize = (self.state.xsize + 3) // 4 * 16 - for yb in range((self.state.ysize + 3) // 4): - for d in decode_dxt3(self._safe_read(linesize)): - data += d - - elif self._alpha_encoding == AlphaEncoding.DXT5: - linesize = (self.state.xsize + 3) // 4 * 16 - for yb in range((self.state.ysize + 3) // 4): - for d in decode_dxt5(self._safe_read(linesize)): - data += d - else: - msg = f"Unsupported alpha encoding {repr(self._alpha_encoding)}" - raise BLPFormatError(msg) - else: - msg = f"Unknown BLP encoding {repr(self._encoding)}" - raise BLPFormatError(msg) - - else: - msg = f"Unknown BLP compression {repr(self._compression)}" - raise BLPFormatError(msg) - - self.set_as_raw(data) - - -class BLPEncoder(ImageFile.PyEncoder): - _pushes_fd = True - - def _write_palette(self) -> bytes: - data = b"" - assert self.im is not None - palette = self.im.getpalette("RGBA", "RGBA") - for i in range(len(palette) // 4): - r, g, b, a = palette[i * 4 : (i + 1) * 4] - data += struct.pack("<4B", b, g, r, a) - while len(data) < 256 * 4: - data += b"\x00" * 4 - return data - - def encode(self, bufsize: int) -> tuple[int, int, bytes]: - palette_data = self._write_palette() - - offset = 20 + 16 * 4 * 2 + len(palette_data) - data = struct.pack("<16I", offset, *((0,) * 15)) - - assert self.im is not None - w, h = self.im.size - data += struct.pack("<16I", w * h, *((0,) * 15)) - - data += palette_data - - for y in range(h): - for x in range(w): - data += struct.pack(" None: - if im.mode != "P": - msg = "Unsupported BLP image mode" - raise ValueError(msg) - - magic = b"BLP1" if im.encoderinfo.get("blp_version") == "BLP1" else b"BLP2" - fp.write(magic) - - assert im.palette is not None - fp.write(struct.pack(" mode, rawmode - 1: ("P", "P;1"), - 4: ("P", "P;4"), - 8: ("P", "P"), - 16: ("RGB", "BGR;15"), - 24: ("RGB", "BGR"), - 32: ("RGB", "BGRX"), -} - -USE_RAW_ALPHA = False - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"BM") - - -def _dib_accept(prefix: bytes) -> bool: - return i32(prefix) in [12, 40, 52, 56, 64, 108, 124] - - -# ============================================================================= -# Image plugin for the Windows BMP format. -# ============================================================================= -class BmpImageFile(ImageFile.ImageFile): - """Image plugin for the Windows Bitmap format (BMP)""" - - # ------------------------------------------------------------- Description - format_description = "Windows Bitmap" - format = "BMP" - - # -------------------------------------------------- BMP Compression values - COMPRESSIONS = {"RAW": 0, "RLE8": 1, "RLE4": 2, "BITFIELDS": 3, "JPEG": 4, "PNG": 5} - for k, v in COMPRESSIONS.items(): - vars()[k] = v - - def _bitmap(self, header: int = 0, offset: int = 0) -> None: - """Read relevant info about the BMP""" - read, seek = self.fp.read, self.fp.seek - if header: - seek(header) - # read bmp header size @offset 14 (this is part of the header size) - file_info: dict[str, bool | int | tuple[int, ...]] = { - "header_size": i32(read(4)), - "direction": -1, - } - - # -------------------- If requested, read header at a specific position - # read the rest of the bmp header, without its size - assert isinstance(file_info["header_size"], int) - header_data = ImageFile._safe_read(self.fp, file_info["header_size"] - 4) - - # ------------------------------- Windows Bitmap v2, IBM OS/2 Bitmap v1 - # ----- This format has different offsets because of width/height types - # 12: BITMAPCOREHEADER/OS21XBITMAPHEADER - if file_info["header_size"] == 12: - file_info["width"] = i16(header_data, 0) - file_info["height"] = i16(header_data, 2) - file_info["planes"] = i16(header_data, 4) - file_info["bits"] = i16(header_data, 6) - file_info["compression"] = self.COMPRESSIONS["RAW"] - file_info["palette_padding"] = 3 - - # --------------------------------------------- Windows Bitmap v3 to v5 - # 40: BITMAPINFOHEADER - # 52: BITMAPV2HEADER - # 56: BITMAPV3HEADER - # 64: BITMAPCOREHEADER2/OS22XBITMAPHEADER - # 108: BITMAPV4HEADER - # 124: BITMAPV5HEADER - elif file_info["header_size"] in (40, 52, 56, 64, 108, 124): - file_info["y_flip"] = header_data[7] == 0xFF - file_info["direction"] = 1 if file_info["y_flip"] else -1 - file_info["width"] = i32(header_data, 0) - file_info["height"] = ( - i32(header_data, 4) - if not file_info["y_flip"] - else 2**32 - i32(header_data, 4) - ) - file_info["planes"] = i16(header_data, 8) - file_info["bits"] = i16(header_data, 10) - file_info["compression"] = i32(header_data, 12) - # byte size of pixel data - file_info["data_size"] = i32(header_data, 16) - file_info["pixels_per_meter"] = ( - i32(header_data, 20), - i32(header_data, 24), - ) - file_info["colors"] = i32(header_data, 28) - file_info["palette_padding"] = 4 - assert isinstance(file_info["pixels_per_meter"], tuple) - self.info["dpi"] = tuple(x / 39.3701 for x in file_info["pixels_per_meter"]) - if file_info["compression"] == self.COMPRESSIONS["BITFIELDS"]: - masks = ["r_mask", "g_mask", "b_mask"] - if len(header_data) >= 48: - if len(header_data) >= 52: - masks.append("a_mask") - else: - file_info["a_mask"] = 0x0 - for idx, mask in enumerate(masks): - file_info[mask] = i32(header_data, 36 + idx * 4) - else: - # 40 byte headers only have the three components in the - # bitfields masks, ref: - # https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx - # See also - # https://github.com/python-pillow/Pillow/issues/1293 - # There is a 4th component in the RGBQuad, in the alpha - # location, but it is listed as a reserved component, - # and it is not generally an alpha channel - file_info["a_mask"] = 0x0 - for mask in masks: - file_info[mask] = i32(read(4)) - assert isinstance(file_info["r_mask"], int) - assert isinstance(file_info["g_mask"], int) - assert isinstance(file_info["b_mask"], int) - assert isinstance(file_info["a_mask"], int) - file_info["rgb_mask"] = ( - file_info["r_mask"], - file_info["g_mask"], - file_info["b_mask"], - ) - file_info["rgba_mask"] = ( - file_info["r_mask"], - file_info["g_mask"], - file_info["b_mask"], - file_info["a_mask"], - ) - else: - msg = f"Unsupported BMP header type ({file_info['header_size']})" - raise OSError(msg) - - # ------------------ Special case : header is reported 40, which - # ---------------------- is shorter than real size for bpp >= 16 - assert isinstance(file_info["width"], int) - assert isinstance(file_info["height"], int) - self._size = file_info["width"], file_info["height"] - - # ------- If color count was not found in the header, compute from bits - assert isinstance(file_info["bits"], int) - file_info["colors"] = ( - file_info["colors"] - if file_info.get("colors", 0) - else (1 << file_info["bits"]) - ) - assert isinstance(file_info["colors"], int) - if offset == 14 + file_info["header_size"] and file_info["bits"] <= 8: - offset += 4 * file_info["colors"] - - # ---------------------- Check bit depth for unusual unsupported values - self._mode, raw_mode = BIT2MODE.get(file_info["bits"], ("", "")) - if not self.mode: - msg = f"Unsupported BMP pixel depth ({file_info['bits']})" - raise OSError(msg) - - # ---------------- Process BMP with Bitfields compression (not palette) - decoder_name = "raw" - if file_info["compression"] == self.COMPRESSIONS["BITFIELDS"]: - SUPPORTED: dict[int, list[tuple[int, ...]]] = { - 32: [ - (0xFF0000, 0xFF00, 0xFF, 0x0), - (0xFF000000, 0xFF0000, 0xFF00, 0x0), - (0xFF000000, 0xFF00, 0xFF, 0x0), - (0xFF000000, 0xFF0000, 0xFF00, 0xFF), - (0xFF, 0xFF00, 0xFF0000, 0xFF000000), - (0xFF0000, 0xFF00, 0xFF, 0xFF000000), - (0xFF000000, 0xFF00, 0xFF, 0xFF0000), - (0x0, 0x0, 0x0, 0x0), - ], - 24: [(0xFF0000, 0xFF00, 0xFF)], - 16: [(0xF800, 0x7E0, 0x1F), (0x7C00, 0x3E0, 0x1F)], - } - MASK_MODES = { - (32, (0xFF0000, 0xFF00, 0xFF, 0x0)): "BGRX", - (32, (0xFF000000, 0xFF0000, 0xFF00, 0x0)): "XBGR", - (32, (0xFF000000, 0xFF00, 0xFF, 0x0)): "BGXR", - (32, (0xFF000000, 0xFF0000, 0xFF00, 0xFF)): "ABGR", - (32, (0xFF, 0xFF00, 0xFF0000, 0xFF000000)): "RGBA", - (32, (0xFF0000, 0xFF00, 0xFF, 0xFF000000)): "BGRA", - (32, (0xFF000000, 0xFF00, 0xFF, 0xFF0000)): "BGAR", - (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", - (24, (0xFF0000, 0xFF00, 0xFF)): "BGR", - (16, (0xF800, 0x7E0, 0x1F)): "BGR;16", - (16, (0x7C00, 0x3E0, 0x1F)): "BGR;15", - } - if file_info["bits"] in SUPPORTED: - if ( - file_info["bits"] == 32 - and file_info["rgba_mask"] in SUPPORTED[file_info["bits"]] - ): - assert isinstance(file_info["rgba_mask"], tuple) - raw_mode = MASK_MODES[(file_info["bits"], file_info["rgba_mask"])] - self._mode = "RGBA" if "A" in raw_mode else self.mode - elif ( - file_info["bits"] in (24, 16) - and file_info["rgb_mask"] in SUPPORTED[file_info["bits"]] - ): - assert isinstance(file_info["rgb_mask"], tuple) - raw_mode = MASK_MODES[(file_info["bits"], file_info["rgb_mask"])] - else: - msg = "Unsupported BMP bitfields layout" - raise OSError(msg) - else: - msg = "Unsupported BMP bitfields layout" - raise OSError(msg) - elif file_info["compression"] == self.COMPRESSIONS["RAW"]: - if file_info["bits"] == 32 and ( - header == 22 or USE_RAW_ALPHA # 32-bit .cur offset - ): - raw_mode, self._mode = "BGRA", "RGBA" - elif file_info["compression"] in ( - self.COMPRESSIONS["RLE8"], - self.COMPRESSIONS["RLE4"], - ): - decoder_name = "bmp_rle" - else: - msg = f"Unsupported BMP compression ({file_info['compression']})" - raise OSError(msg) - - # --------------- Once the header is processed, process the palette/LUT - if self.mode == "P": # Paletted for 1, 4 and 8 bit images - # ---------------------------------------------------- 1-bit images - if not (0 < file_info["colors"] <= 65536): - msg = f"Unsupported BMP Palette size ({file_info['colors']})" - raise OSError(msg) - else: - assert isinstance(file_info["palette_padding"], int) - padding = file_info["palette_padding"] - palette = read(padding * file_info["colors"]) - grayscale = True - indices = ( - (0, 255) - if file_info["colors"] == 2 - else list(range(file_info["colors"])) - ) - - # ----------------- Check if grayscale and ignore palette if so - for ind, val in enumerate(indices): - rgb = palette[ind * padding : ind * padding + 3] - if rgb != o8(val) * 3: - grayscale = False - - # ------- If all colors are gray, white or black, ditch palette - if grayscale: - self._mode = "1" if file_info["colors"] == 2 else "L" - raw_mode = self.mode - else: - self._mode = "P" - self.palette = ImagePalette.raw( - "BGRX" if padding == 4 else "BGR", palette - ) - - # ---------------------------- Finally set the tile data for the plugin - self.info["compression"] = file_info["compression"] - args: list[Any] = [raw_mode] - if decoder_name == "bmp_rle": - args.append(file_info["compression"] == self.COMPRESSIONS["RLE4"]) - else: - assert isinstance(file_info["width"], int) - args.append(((file_info["width"] * file_info["bits"] + 31) >> 3) & (~3)) - args.append(file_info["direction"]) - self.tile = [ - ImageFile._Tile( - decoder_name, - (0, 0, file_info["width"], file_info["height"]), - offset or self.fp.tell(), - tuple(args), - ) - ] - - def _open(self) -> None: - """Open file, check magic number and read header""" - # read 14 bytes: magic number, filesize, reserved, header final offset - head_data = self.fp.read(14) - # choke if the file does not have the required magic bytes - if not _accept(head_data): - msg = "Not a BMP file" - raise SyntaxError(msg) - # read the start position of the BMP image data (u32) - offset = i32(head_data, 10) - # load bitmap information (offset=raster info) - self._bitmap(offset=offset) - - -class BmpRleDecoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - rle4 = self.args[1] - data = bytearray() - x = 0 - dest_length = self.state.xsize * self.state.ysize - while len(data) < dest_length: - pixels = self.fd.read(1) - byte = self.fd.read(1) - if not pixels or not byte: - break - num_pixels = pixels[0] - if num_pixels: - # encoded mode - if x + num_pixels > self.state.xsize: - # Too much data for row - num_pixels = max(0, self.state.xsize - x) - if rle4: - first_pixel = o8(byte[0] >> 4) - second_pixel = o8(byte[0] & 0x0F) - for index in range(num_pixels): - if index % 2 == 0: - data += first_pixel - else: - data += second_pixel - else: - data += byte * num_pixels - x += num_pixels - else: - if byte[0] == 0: - # end of line - while len(data) % self.state.xsize != 0: - data += b"\x00" - x = 0 - elif byte[0] == 1: - # end of bitmap - break - elif byte[0] == 2: - # delta - bytes_read = self.fd.read(2) - if len(bytes_read) < 2: - break - right, up = self.fd.read(2) - data += b"\x00" * (right + up * self.state.xsize) - x = len(data) % self.state.xsize - else: - # absolute mode - if rle4: - # 2 pixels per byte - byte_count = byte[0] // 2 - bytes_read = self.fd.read(byte_count) - for byte_read in bytes_read: - data += o8(byte_read >> 4) - data += o8(byte_read & 0x0F) - else: - byte_count = byte[0] - bytes_read = self.fd.read(byte_count) - data += bytes_read - if len(bytes_read) < byte_count: - break - x += byte[0] - - # align to 16-bit word boundary - if self.fd.tell() % 2 != 0: - self.fd.seek(1, os.SEEK_CUR) - rawmode = "L" if self.mode == "L" else "P" - self.set_as_raw(bytes(data), rawmode, (0, self.args[-1])) - return -1, 0 - - -# ============================================================================= -# Image plugin for the DIB format (BMP alias) -# ============================================================================= -class DibImageFile(BmpImageFile): - format = "DIB" - format_description = "Windows Bitmap" - - def _open(self) -> None: - self._bitmap() - - -# -# -------------------------------------------------------------------- -# Write BMP file - - -SAVE = { - "1": ("1", 1, 2), - "L": ("L", 8, 256), - "P": ("P", 8, 256), - "RGB": ("BGR", 24, 0), - "RGBA": ("BGRA", 32, 0), -} - - -def _dib_save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - _save(im, fp, filename, False) - - -def _save( - im: Image.Image, fp: IO[bytes], filename: str | bytes, bitmap_header: bool = True -) -> None: - try: - rawmode, bits, colors = SAVE[im.mode] - except KeyError as e: - msg = f"cannot write mode {im.mode} as BMP" - raise OSError(msg) from e - - info = im.encoderinfo - - dpi = info.get("dpi", (96, 96)) - - # 1 meter == 39.3701 inches - ppm = tuple(int(x * 39.3701 + 0.5) for x in dpi) - - stride = ((im.size[0] * bits + 7) // 8 + 3) & (~3) - header = 40 # or 64 for OS/2 version 2 - image = stride * im.size[1] - - if im.mode == "1": - palette = b"".join(o8(i) * 3 + b"\x00" for i in (0, 255)) - elif im.mode == "L": - palette = b"".join(o8(i) * 3 + b"\x00" for i in range(256)) - elif im.mode == "P": - palette = im.im.getpalette("RGB", "BGRX") - colors = len(palette) // 4 - else: - palette = None - - # bitmap header - if bitmap_header: - offset = 14 + header + colors * 4 - file_size = offset + image - if file_size > 2**32 - 1: - msg = "File size is too large for the BMP format" - raise ValueError(msg) - fp.write( - b"BM" # file type (magic) - + o32(file_size) # file size - + o32(0) # reserved - + o32(offset) # image data offset - ) - - # bitmap info header - fp.write( - o32(header) # info header size - + o32(im.size[0]) # width - + o32(im.size[1]) # height - + o16(1) # planes - + o16(bits) # depth - + o32(0) # compression (0=uncompressed) - + o32(image) # size of bitmap - + o32(ppm[0]) # resolution - + o32(ppm[1]) # resolution - + o32(colors) # colors used - + o32(colors) # colors important - ) - - fp.write(b"\0" * (header - 40)) # padding (for OS/2 format) - - if palette: - fp.write(palette) - - ImageFile._save( - im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))] - ) - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(BmpImageFile.format, BmpImageFile, _accept) -Image.register_save(BmpImageFile.format, _save) - -Image.register_extension(BmpImageFile.format, ".bmp") - -Image.register_mime(BmpImageFile.format, "image/bmp") - -Image.register_decoder("bmp_rle", BmpRleDecoder) - -Image.register_open(DibImageFile.format, DibImageFile, _dib_accept) -Image.register_save(DibImageFile.format, _dib_save) - -Image.register_extension(DibImageFile.format, ".dib") - -Image.register_mime(DibImageFile.format, "image/bmp") diff --git a/myenv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py deleted file mode 100644 index 8c5da14..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# BUFR stub adapter -# -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -from typing import IO - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler: ImageFile.StubHandler | None) -> None: - """ - Install application-specific BUFR image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith((b"BUFR", b"ZCZC")) - - -class BufrStubImageFile(ImageFile.StubImageFile): - format = "BUFR" - format_description = "BUFR" - - def _open(self) -> None: - if not _accept(self.fp.read(4)): - msg = "Not a BUFR file" - raise SyntaxError(msg) - - self.fp.seek(-4, os.SEEK_CUR) - - # make something up - self._mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self) -> ImageFile.StubHandler | None: - return _handler - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if _handler is None or not hasattr(_handler, "save"): - msg = "BUFR save handler not installed" - raise OSError(msg) - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(BufrStubImageFile.format, BufrStubImageFile, _accept) -Image.register_save(BufrStubImageFile.format, _save) - -Image.register_extension(BufrStubImageFile.format, ".bufr") diff --git a/myenv/lib/python3.12/site-packages/PIL/ContainerIO.py b/myenv/lib/python3.12/site-packages/PIL/ContainerIO.py deleted file mode 100644 index ec9e66c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ContainerIO.py +++ /dev/null @@ -1,173 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a class to read from a container file -# -# History: -# 1995-06-18 fl Created -# 1995-09-07 fl Added readline(), readlines() -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1995 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -from collections.abc import Iterable -from typing import IO, AnyStr, NoReturn - - -class ContainerIO(IO[AnyStr]): - """ - A file object that provides read access to a part of an existing - file (for example a TAR file). - """ - - def __init__(self, file: IO[AnyStr], offset: int, length: int) -> None: - """ - Create file object. - - :param file: Existing file. - :param offset: Start of region, in bytes. - :param length: Size of region, in bytes. - """ - self.fh: IO[AnyStr] = file - self.pos = 0 - self.offset = offset - self.length = length - self.fh.seek(offset) - - ## - # Always false. - - def isatty(self) -> bool: - return False - - def seekable(self) -> bool: - return True - - def seek(self, offset: int, mode: int = io.SEEK_SET) -> int: - """ - Move file pointer. - - :param offset: Offset in bytes. - :param mode: Starting position. Use 0 for beginning of region, 1 - for current offset, and 2 for end of region. You cannot move - the pointer outside the defined region. - :returns: Offset from start of region, in bytes. - """ - if mode == 1: - self.pos = self.pos + offset - elif mode == 2: - self.pos = self.length + offset - else: - self.pos = offset - # clamp - self.pos = max(0, min(self.pos, self.length)) - self.fh.seek(self.offset + self.pos) - return self.pos - - def tell(self) -> int: - """ - Get current file pointer. - - :returns: Offset from start of region, in bytes. - """ - return self.pos - - def readable(self) -> bool: - return True - - def read(self, n: int = -1) -> AnyStr: - """ - Read data. - - :param n: Number of bytes to read. If omitted, zero or negative, - read until end of region. - :returns: An 8-bit string. - """ - if n > 0: - n = min(n, self.length - self.pos) - else: - n = self.length - self.pos - if n <= 0: # EOF - return b"" if "b" in self.fh.mode else "" # type: ignore[return-value] - self.pos = self.pos + n - return self.fh.read(n) - - def readline(self, n: int = -1) -> AnyStr: - """ - Read a line of text. - - :param n: Number of bytes to read. If omitted, zero or negative, - read until end of line. - :returns: An 8-bit string. - """ - s: AnyStr = b"" if "b" in self.fh.mode else "" # type: ignore[assignment] - newline_character = b"\n" if "b" in self.fh.mode else "\n" - while True: - c = self.read(1) - if not c: - break - s = s + c - if c == newline_character or len(s) == n: - break - return s - - def readlines(self, n: int | None = -1) -> list[AnyStr]: - """ - Read multiple lines of text. - - :param n: Number of lines to read. If omitted, zero, negative or None, - read until end of region. - :returns: A list of 8-bit strings. - """ - lines = [] - while True: - s = self.readline() - if not s: - break - lines.append(s) - if len(lines) == n: - break - return lines - - def writable(self) -> bool: - return False - - def write(self, b: AnyStr) -> NoReturn: - raise NotImplementedError() - - def writelines(self, lines: Iterable[AnyStr]) -> NoReturn: - raise NotImplementedError() - - def truncate(self, size: int | None = None) -> int: - raise NotImplementedError() - - def __enter__(self) -> ContainerIO[AnyStr]: - return self - - def __exit__(self, *args: object) -> None: - self.close() - - def __iter__(self) -> ContainerIO[AnyStr]: - return self - - def __next__(self) -> AnyStr: - line = self.readline() - if not line: - msg = "end of region" - raise StopIteration(msg) - return line - - def fileno(self) -> int: - return self.fh.fileno() - - def flush(self) -> None: - self.fh.flush() - - def close(self) -> None: - self.fh.close() diff --git a/myenv/lib/python3.12/site-packages/PIL/CurImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/CurImagePlugin.py deleted file mode 100644 index b817dbc..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/CurImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Windows Cursor support for PIL -# -# notes: -# uses BmpImagePlugin.py to read the bitmap data. -# -# history: -# 96-05-27 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import BmpImagePlugin, Image, ImageFile -from ._binary import i16le as i16 -from ._binary import i32le as i32 - -# -# -------------------------------------------------------------------- - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"\0\0\2\0") - - -## -# Image plugin for Windows Cursor files. - - -class CurImageFile(BmpImagePlugin.BmpImageFile): - format = "CUR" - format_description = "Windows Cursor" - - def _open(self) -> None: - offset = self.fp.tell() - - # check magic - s = self.fp.read(6) - if not _accept(s): - msg = "not a CUR file" - raise SyntaxError(msg) - - # pick the largest cursor in the file - m = b"" - for i in range(i16(s, 4)): - s = self.fp.read(16) - if not m: - m = s - elif s[0] > m[0] and s[1] > m[1]: - m = s - if not m: - msg = "No cursors were found" - raise TypeError(msg) - - # load as bitmap - self._bitmap(i32(m, 12) + offset) - - # patch up the bitmap height - self._size = self.size[0], self.size[1] // 2 - d, e, o, a = self.tile[0] - self.tile[0] = ImageFile._Tile(d, (0, 0) + self.size, o, a) - - -# -# -------------------------------------------------------------------- - -Image.register_open(CurImageFile.format, CurImageFile, _accept) - -Image.register_extension(CurImageFile.format, ".cur") diff --git a/myenv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py deleted file mode 100644 index aea661b..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py +++ /dev/null @@ -1,83 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# DCX file handling -# -# DCX is a container file format defined by Intel, commonly used -# for fax applications. Each DCX file consists of a directory -# (a list of file offsets) followed by a set of (usually 1-bit) -# PCX files. -# -# History: -# 1995-09-09 fl Created -# 1996-03-20 fl Properly derived from PcxImageFile. -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 2002-07-30 fl Fixed file handling -# -# Copyright (c) 1997-98 by Secret Labs AB. -# Copyright (c) 1995-96 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image -from ._binary import i32le as i32 -from ._util import DeferredError -from .PcxImagePlugin import PcxImageFile - -MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? - - -def _accept(prefix: bytes) -> bool: - return len(prefix) >= 4 and i32(prefix) == MAGIC - - -## -# Image plugin for the Intel DCX format. - - -class DcxImageFile(PcxImageFile): - format = "DCX" - format_description = "Intel DCX" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - # Header - s = self.fp.read(4) - if not _accept(s): - msg = "not a DCX file" - raise SyntaxError(msg) - - # Component directory - self._offset = [] - for i in range(1024): - offset = i32(self.fp.read(4)) - if not offset: - break - self._offset.append(offset) - - self._fp = self.fp - self.frame = -1 - self.n_frames = len(self._offset) - self.is_animated = self.n_frames > 1 - self.seek(0) - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self.frame = frame - self.fp = self._fp - self.fp.seek(self._offset[frame]) - PcxImageFile._open(self) - - def tell(self) -> int: - return self.frame - - -Image.register_open(DcxImageFile.format, DcxImageFile, _accept) - -Image.register_extension(DcxImageFile.format, ".dcx") diff --git a/myenv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py deleted file mode 100644 index f9ade18..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py +++ /dev/null @@ -1,624 +0,0 @@ -""" -A Pillow plugin for .dds files (S3TC-compressed aka DXTC) -Jerome Leclanche - -Documentation: -https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: -https://creativecommons.org/publicdomain/zero/1.0/ -""" - -from __future__ import annotations - -import io -import struct -import sys -from enum import IntEnum, IntFlag -from typing import IO - -from . import Image, ImageFile, ImagePalette -from ._binary import i32le as i32 -from ._binary import o8 -from ._binary import o32le as o32 - -# Magic ("DDS ") -DDS_MAGIC = 0x20534444 - - -# DDS flags -class DDSD(IntFlag): - CAPS = 0x1 - HEIGHT = 0x2 - WIDTH = 0x4 - PITCH = 0x8 - PIXELFORMAT = 0x1000 - MIPMAPCOUNT = 0x20000 - LINEARSIZE = 0x80000 - DEPTH = 0x800000 - - -# DDS caps -class DDSCAPS(IntFlag): - COMPLEX = 0x8 - TEXTURE = 0x1000 - MIPMAP = 0x400000 - - -class DDSCAPS2(IntFlag): - CUBEMAP = 0x200 - CUBEMAP_POSITIVEX = 0x400 - CUBEMAP_NEGATIVEX = 0x800 - CUBEMAP_POSITIVEY = 0x1000 - CUBEMAP_NEGATIVEY = 0x2000 - CUBEMAP_POSITIVEZ = 0x4000 - CUBEMAP_NEGATIVEZ = 0x8000 - VOLUME = 0x200000 - - -# Pixel Format -class DDPF(IntFlag): - ALPHAPIXELS = 0x1 - ALPHA = 0x2 - FOURCC = 0x4 - PALETTEINDEXED8 = 0x20 - RGB = 0x40 - LUMINANCE = 0x20000 - - -# dxgiformat.h -class DXGI_FORMAT(IntEnum): - UNKNOWN = 0 - R32G32B32A32_TYPELESS = 1 - R32G32B32A32_FLOAT = 2 - R32G32B32A32_UINT = 3 - R32G32B32A32_SINT = 4 - R32G32B32_TYPELESS = 5 - R32G32B32_FLOAT = 6 - R32G32B32_UINT = 7 - R32G32B32_SINT = 8 - R16G16B16A16_TYPELESS = 9 - R16G16B16A16_FLOAT = 10 - R16G16B16A16_UNORM = 11 - R16G16B16A16_UINT = 12 - R16G16B16A16_SNORM = 13 - R16G16B16A16_SINT = 14 - R32G32_TYPELESS = 15 - R32G32_FLOAT = 16 - R32G32_UINT = 17 - R32G32_SINT = 18 - R32G8X24_TYPELESS = 19 - D32_FLOAT_S8X24_UINT = 20 - R32_FLOAT_X8X24_TYPELESS = 21 - X32_TYPELESS_G8X24_UINT = 22 - R10G10B10A2_TYPELESS = 23 - R10G10B10A2_UNORM = 24 - R10G10B10A2_UINT = 25 - R11G11B10_FLOAT = 26 - R8G8B8A8_TYPELESS = 27 - R8G8B8A8_UNORM = 28 - R8G8B8A8_UNORM_SRGB = 29 - R8G8B8A8_UINT = 30 - R8G8B8A8_SNORM = 31 - R8G8B8A8_SINT = 32 - R16G16_TYPELESS = 33 - R16G16_FLOAT = 34 - R16G16_UNORM = 35 - R16G16_UINT = 36 - R16G16_SNORM = 37 - R16G16_SINT = 38 - R32_TYPELESS = 39 - D32_FLOAT = 40 - R32_FLOAT = 41 - R32_UINT = 42 - R32_SINT = 43 - R24G8_TYPELESS = 44 - D24_UNORM_S8_UINT = 45 - R24_UNORM_X8_TYPELESS = 46 - X24_TYPELESS_G8_UINT = 47 - R8G8_TYPELESS = 48 - R8G8_UNORM = 49 - R8G8_UINT = 50 - R8G8_SNORM = 51 - R8G8_SINT = 52 - R16_TYPELESS = 53 - R16_FLOAT = 54 - D16_UNORM = 55 - R16_UNORM = 56 - R16_UINT = 57 - R16_SNORM = 58 - R16_SINT = 59 - R8_TYPELESS = 60 - R8_UNORM = 61 - R8_UINT = 62 - R8_SNORM = 63 - R8_SINT = 64 - A8_UNORM = 65 - R1_UNORM = 66 - R9G9B9E5_SHAREDEXP = 67 - R8G8_B8G8_UNORM = 68 - G8R8_G8B8_UNORM = 69 - BC1_TYPELESS = 70 - BC1_UNORM = 71 - BC1_UNORM_SRGB = 72 - BC2_TYPELESS = 73 - BC2_UNORM = 74 - BC2_UNORM_SRGB = 75 - BC3_TYPELESS = 76 - BC3_UNORM = 77 - BC3_UNORM_SRGB = 78 - BC4_TYPELESS = 79 - BC4_UNORM = 80 - BC4_SNORM = 81 - BC5_TYPELESS = 82 - BC5_UNORM = 83 - BC5_SNORM = 84 - B5G6R5_UNORM = 85 - B5G5R5A1_UNORM = 86 - B8G8R8A8_UNORM = 87 - B8G8R8X8_UNORM = 88 - R10G10B10_XR_BIAS_A2_UNORM = 89 - B8G8R8A8_TYPELESS = 90 - B8G8R8A8_UNORM_SRGB = 91 - B8G8R8X8_TYPELESS = 92 - B8G8R8X8_UNORM_SRGB = 93 - BC6H_TYPELESS = 94 - BC6H_UF16 = 95 - BC6H_SF16 = 96 - BC7_TYPELESS = 97 - BC7_UNORM = 98 - BC7_UNORM_SRGB = 99 - AYUV = 100 - Y410 = 101 - Y416 = 102 - NV12 = 103 - P010 = 104 - P016 = 105 - OPAQUE_420 = 106 - YUY2 = 107 - Y210 = 108 - Y216 = 109 - NV11 = 110 - AI44 = 111 - IA44 = 112 - P8 = 113 - A8P8 = 114 - B4G4R4A4_UNORM = 115 - P208 = 130 - V208 = 131 - V408 = 132 - SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189 - SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190 - - -class D3DFMT(IntEnum): - UNKNOWN = 0 - R8G8B8 = 20 - A8R8G8B8 = 21 - X8R8G8B8 = 22 - R5G6B5 = 23 - X1R5G5B5 = 24 - A1R5G5B5 = 25 - A4R4G4B4 = 26 - R3G3B2 = 27 - A8 = 28 - A8R3G3B2 = 29 - X4R4G4B4 = 30 - A2B10G10R10 = 31 - A8B8G8R8 = 32 - X8B8G8R8 = 33 - G16R16 = 34 - A2R10G10B10 = 35 - A16B16G16R16 = 36 - A8P8 = 40 - P8 = 41 - L8 = 50 - A8L8 = 51 - A4L4 = 52 - V8U8 = 60 - L6V5U5 = 61 - X8L8V8U8 = 62 - Q8W8V8U8 = 63 - V16U16 = 64 - A2W10V10U10 = 67 - D16_LOCKABLE = 70 - D32 = 71 - D15S1 = 73 - D24S8 = 75 - D24X8 = 77 - D24X4S4 = 79 - D16 = 80 - D32F_LOCKABLE = 82 - D24FS8 = 83 - D32_LOCKABLE = 84 - S8_LOCKABLE = 85 - L16 = 81 - VERTEXDATA = 100 - INDEX16 = 101 - INDEX32 = 102 - Q16W16V16U16 = 110 - R16F = 111 - G16R16F = 112 - A16B16G16R16F = 113 - R32F = 114 - G32R32F = 115 - A32B32G32R32F = 116 - CxV8U8 = 117 - A1 = 118 - A2B10G10R10_XR_BIAS = 119 - BINARYBUFFER = 199 - - UYVY = i32(b"UYVY") - R8G8_B8G8 = i32(b"RGBG") - YUY2 = i32(b"YUY2") - G8R8_G8B8 = i32(b"GRGB") - DXT1 = i32(b"DXT1") - DXT2 = i32(b"DXT2") - DXT3 = i32(b"DXT3") - DXT4 = i32(b"DXT4") - DXT5 = i32(b"DXT5") - DX10 = i32(b"DX10") - BC4S = i32(b"BC4S") - BC4U = i32(b"BC4U") - BC5S = i32(b"BC5S") - BC5U = i32(b"BC5U") - ATI1 = i32(b"ATI1") - ATI2 = i32(b"ATI2") - MULTI2_ARGB8 = i32(b"MET1") - - -# Backward compatibility layer -module = sys.modules[__name__] -for item in DDSD: - assert item.name is not None - setattr(module, f"DDSD_{item.name}", item.value) -for item1 in DDSCAPS: - assert item1.name is not None - setattr(module, f"DDSCAPS_{item1.name}", item1.value) -for item2 in DDSCAPS2: - assert item2.name is not None - setattr(module, f"DDSCAPS2_{item2.name}", item2.value) -for item3 in DDPF: - assert item3.name is not None - setattr(module, f"DDPF_{item3.name}", item3.value) - -DDS_FOURCC = DDPF.FOURCC -DDS_RGB = DDPF.RGB -DDS_RGBA = DDPF.RGB | DDPF.ALPHAPIXELS -DDS_LUMINANCE = DDPF.LUMINANCE -DDS_LUMINANCEA = DDPF.LUMINANCE | DDPF.ALPHAPIXELS -DDS_ALPHA = DDPF.ALPHA -DDS_PAL8 = DDPF.PALETTEINDEXED8 - -DDS_HEADER_FLAGS_TEXTURE = DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT -DDS_HEADER_FLAGS_MIPMAP = DDSD.MIPMAPCOUNT -DDS_HEADER_FLAGS_VOLUME = DDSD.DEPTH -DDS_HEADER_FLAGS_PITCH = DDSD.PITCH -DDS_HEADER_FLAGS_LINEARSIZE = DDSD.LINEARSIZE - -DDS_HEIGHT = DDSD.HEIGHT -DDS_WIDTH = DDSD.WIDTH - -DDS_SURFACE_FLAGS_TEXTURE = DDSCAPS.TEXTURE -DDS_SURFACE_FLAGS_MIPMAP = DDSCAPS.COMPLEX | DDSCAPS.MIPMAP -DDS_SURFACE_FLAGS_CUBEMAP = DDSCAPS.COMPLEX - -DDS_CUBEMAP_POSITIVEX = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEX -DDS_CUBEMAP_NEGATIVEX = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEX -DDS_CUBEMAP_POSITIVEY = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEY -DDS_CUBEMAP_NEGATIVEY = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEY -DDS_CUBEMAP_POSITIVEZ = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEZ -DDS_CUBEMAP_NEGATIVEZ = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEZ - -DXT1_FOURCC = D3DFMT.DXT1 -DXT3_FOURCC = D3DFMT.DXT3 -DXT5_FOURCC = D3DFMT.DXT5 - -DXGI_FORMAT_R8G8B8A8_TYPELESS = DXGI_FORMAT.R8G8B8A8_TYPELESS -DXGI_FORMAT_R8G8B8A8_UNORM = DXGI_FORMAT.R8G8B8A8_UNORM -DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = DXGI_FORMAT.R8G8B8A8_UNORM_SRGB -DXGI_FORMAT_BC5_TYPELESS = DXGI_FORMAT.BC5_TYPELESS -DXGI_FORMAT_BC5_UNORM = DXGI_FORMAT.BC5_UNORM -DXGI_FORMAT_BC5_SNORM = DXGI_FORMAT.BC5_SNORM -DXGI_FORMAT_BC6H_UF16 = DXGI_FORMAT.BC6H_UF16 -DXGI_FORMAT_BC6H_SF16 = DXGI_FORMAT.BC6H_SF16 -DXGI_FORMAT_BC7_TYPELESS = DXGI_FORMAT.BC7_TYPELESS -DXGI_FORMAT_BC7_UNORM = DXGI_FORMAT.BC7_UNORM -DXGI_FORMAT_BC7_UNORM_SRGB = DXGI_FORMAT.BC7_UNORM_SRGB - - -class DdsImageFile(ImageFile.ImageFile): - format = "DDS" - format_description = "DirectDraw Surface" - - def _open(self) -> None: - if not _accept(self.fp.read(4)): - msg = "not a DDS file" - raise SyntaxError(msg) - (header_size,) = struct.unpack(" None: - pass - - -class DdsRgbDecoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - bitcount, masks = self.args - - # Some masks will be padded with zeros, e.g. R 0b11 G 0b1100 - # Calculate how many zeros each mask is padded with - mask_offsets = [] - # And the maximum value of each channel without the padding - mask_totals = [] - for mask in masks: - offset = 0 - if mask != 0: - while mask >> (offset + 1) << (offset + 1) == mask: - offset += 1 - mask_offsets.append(offset) - mask_totals.append(mask >> offset) - - data = bytearray() - bytecount = bitcount // 8 - dest_length = self.state.xsize * self.state.ysize * len(masks) - while len(data) < dest_length: - value = int.from_bytes(self.fd.read(bytecount), "little") - for i, mask in enumerate(masks): - masked_value = value & mask - # Remove the zero padding, and scale it to 8 bits - data += o8( - int(((masked_value >> mask_offsets[i]) / mask_totals[i]) * 255) - ) - self.set_as_raw(data) - return -1, 0 - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode not in ("RGB", "RGBA", "L", "LA"): - msg = f"cannot write mode {im.mode} as DDS" - raise OSError(msg) - - flags = DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT - bitcount = len(im.getbands()) * 8 - pixel_format = im.encoderinfo.get("pixel_format") - args: tuple[int] | str - if pixel_format: - codec_name = "bcn" - flags |= DDSD.LINEARSIZE - pitch = (im.width + 3) * 4 - rgba_mask = [0, 0, 0, 0] - pixel_flags = DDPF.FOURCC - if pixel_format == "DXT1": - fourcc = D3DFMT.DXT1 - args = (1,) - elif pixel_format == "DXT3": - fourcc = D3DFMT.DXT3 - args = (2,) - elif pixel_format == "DXT5": - fourcc = D3DFMT.DXT5 - args = (3,) - else: - fourcc = D3DFMT.DX10 - if pixel_format == "BC2": - args = (2,) - dxgi_format = DXGI_FORMAT.BC2_TYPELESS - elif pixel_format == "BC3": - args = (3,) - dxgi_format = DXGI_FORMAT.BC3_TYPELESS - elif pixel_format == "BC5": - args = (5,) - dxgi_format = DXGI_FORMAT.BC5_TYPELESS - if im.mode != "RGB": - msg = "only RGB mode can be written as BC5" - raise OSError(msg) - else: - msg = f"cannot write pixel format {pixel_format}" - raise OSError(msg) - else: - codec_name = "raw" - flags |= DDSD.PITCH - pitch = (im.width * bitcount + 7) // 8 - - alpha = im.mode[-1] == "A" - if im.mode[0] == "L": - pixel_flags = DDPF.LUMINANCE - args = im.mode - if alpha: - rgba_mask = [0x000000FF, 0x000000FF, 0x000000FF] - else: - rgba_mask = [0xFF000000, 0xFF000000, 0xFF000000] - else: - pixel_flags = DDPF.RGB - args = im.mode[::-1] - rgba_mask = [0x00FF0000, 0x0000FF00, 0x000000FF] - - if alpha: - r, g, b, a = im.split() - im = Image.merge("RGBA", (a, r, g, b)) - if alpha: - pixel_flags |= DDPF.ALPHAPIXELS - rgba_mask.append(0xFF000000 if alpha else 0) - - fourcc = D3DFMT.UNKNOWN - fp.write( - o32(DDS_MAGIC) - + struct.pack( - "<7I", - 124, # header size - flags, # flags - im.height, - im.width, - pitch, - 0, # depth - 0, # mipmaps - ) - + struct.pack("11I", *((0,) * 11)) # reserved - # pfsize, pfflags, fourcc, bitcount - + struct.pack("<4I", 32, pixel_flags, fourcc, bitcount) - + struct.pack("<4I", *rgba_mask) # dwRGBABitMask - + struct.pack("<5I", DDSCAPS.TEXTURE, 0, 0, 0, 0) - ) - if fourcc == D3DFMT.DX10: - fp.write( - # dxgi_format, 2D resource, misc, array size, straight alpha - struct.pack("<5I", dxgi_format, 3, 0, 0, 1) - ) - ImageFile._save(im, fp, [ImageFile._Tile(codec_name, (0, 0) + im.size, 0, args)]) - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"DDS ") - - -Image.register_open(DdsImageFile.format, DdsImageFile, _accept) -Image.register_decoder("dds_rgb", DdsRgbDecoder) -Image.register_save(DdsImageFile.format, _save) -Image.register_extension(DdsImageFile.format, ".dds") diff --git a/myenv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py deleted file mode 100644 index 5e2ddad..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py +++ /dev/null @@ -1,476 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# EPS file handling -# -# History: -# 1995-09-01 fl Created (0.1) -# 1996-05-18 fl Don't choke on "atend" fields, Ghostscript interface (0.2) -# 1996-08-22 fl Don't choke on floating point BoundingBox values -# 1996-08-23 fl Handle files from Macintosh (0.3) -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) -# 2003-09-07 fl Check gs.close status (from Federico Di Gregorio) (0.5) -# 2014-05-07 e Handling of EPS with binary preview and fixed resolution -# resizing -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import os -import re -import subprocess -import sys -import tempfile -from typing import IO - -from . import Image, ImageFile -from ._binary import i32le as i32 - -# -------------------------------------------------------------------- - - -split = re.compile(r"^%%([^:]*):[ \t]*(.*)[ \t]*$") -field = re.compile(r"^%[%!\w]([^:]*)[ \t]*$") - -gs_binary: str | bool | None = None -gs_windows_binary = None - - -def has_ghostscript() -> bool: - global gs_binary, gs_windows_binary - if gs_binary is None: - if sys.platform.startswith("win"): - if gs_windows_binary is None: - import shutil - - for binary in ("gswin32c", "gswin64c", "gs"): - if shutil.which(binary) is not None: - gs_windows_binary = binary - break - else: - gs_windows_binary = False - gs_binary = gs_windows_binary - else: - try: - subprocess.check_call(["gs", "--version"], stdout=subprocess.DEVNULL) - gs_binary = "gs" - except OSError: - gs_binary = False - return gs_binary is not False - - -def Ghostscript( - tile: list[ImageFile._Tile], - size: tuple[int, int], - fp: IO[bytes], - scale: int = 1, - transparency: bool = False, -) -> Image.core.ImagingCore: - """Render an image using Ghostscript""" - global gs_binary - if not has_ghostscript(): - msg = "Unable to locate Ghostscript on paths" - raise OSError(msg) - assert isinstance(gs_binary, str) - - # Unpack decoder tile - args = tile[0].args - assert isinstance(args, tuple) - length, bbox = args - - # Hack to support hi-res rendering - scale = int(scale) or 1 - width = size[0] * scale - height = size[1] * scale - # resolution is dependent on bbox and size - res_x = 72.0 * width / (bbox[2] - bbox[0]) - res_y = 72.0 * height / (bbox[3] - bbox[1]) - - out_fd, outfile = tempfile.mkstemp() - os.close(out_fd) - - infile_temp = None - if hasattr(fp, "name") and os.path.exists(fp.name): - infile = fp.name - else: - in_fd, infile_temp = tempfile.mkstemp() - os.close(in_fd) - infile = infile_temp - - # Ignore length and offset! - # Ghostscript can read it - # Copy whole file to read in Ghostscript - with open(infile_temp, "wb") as f: - # fetch length of fp - fp.seek(0, io.SEEK_END) - fsize = fp.tell() - # ensure start position - # go back - fp.seek(0) - lengthfile = fsize - while lengthfile > 0: - s = fp.read(min(lengthfile, 100 * 1024)) - if not s: - break - lengthfile -= len(s) - f.write(s) - - if transparency: - # "RGBA" - device = "pngalpha" - else: - # "pnmraw" automatically chooses between - # PBM ("1"), PGM ("L"), and PPM ("RGB"). - device = "pnmraw" - - # Build Ghostscript command - command = [ - gs_binary, - "-q", # quiet mode - f"-g{width:d}x{height:d}", # set output geometry (pixels) - f"-r{res_x:f}x{res_y:f}", # set input DPI (dots per inch) - "-dBATCH", # exit after processing - "-dNOPAUSE", # don't pause between pages - "-dSAFER", # safe mode - f"-sDEVICE={device}", - f"-sOutputFile={outfile}", # output file - # adjust for image origin - "-c", - f"{-bbox[0]} {-bbox[1]} translate", - "-f", - infile, # input file - # showpage (see https://bugs.ghostscript.com/show_bug.cgi?id=698272) - "-c", - "showpage", - ] - - # push data through Ghostscript - try: - startupinfo = None - if sys.platform.startswith("win"): - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - subprocess.check_call(command, startupinfo=startupinfo) - with Image.open(outfile) as out_im: - out_im.load() - return out_im.im.copy() - finally: - try: - os.unlink(outfile) - if infile_temp: - os.unlink(infile_temp) - except OSError: - pass - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"%!PS") or ( - len(prefix) >= 4 and i32(prefix) == 0xC6D3D0C5 - ) - - -## -# Image plugin for Encapsulated PostScript. This plugin supports only -# a few variants of this format. - - -class EpsImageFile(ImageFile.ImageFile): - """EPS File Parser for the Python Imaging Library""" - - format = "EPS" - format_description = "Encapsulated Postscript" - - mode_map = {1: "L", 2: "LAB", 3: "RGB", 4: "CMYK"} - - def _open(self) -> None: - (length, offset) = self._find_offset(self.fp) - - # go to offset - start of "%!PS" - self.fp.seek(offset) - - self._mode = "RGB" - - # When reading header comments, the first comment is used. - # When reading trailer comments, the last comment is used. - bounding_box: list[int] | None = None - imagedata_size: tuple[int, int] | None = None - - byte_arr = bytearray(255) - bytes_mv = memoryview(byte_arr) - bytes_read = 0 - reading_header_comments = True - reading_trailer_comments = False - trailer_reached = False - - def check_required_header_comments() -> None: - """ - The EPS specification requires that some headers exist. - This should be checked when the header comments formally end, - when image data starts, or when the file ends, whichever comes first. - """ - if "PS-Adobe" not in self.info: - msg = 'EPS header missing "%!PS-Adobe" comment' - raise SyntaxError(msg) - if "BoundingBox" not in self.info: - msg = 'EPS header missing "%%BoundingBox" comment' - raise SyntaxError(msg) - - def read_comment(s: str) -> bool: - nonlocal bounding_box, reading_trailer_comments - try: - m = split.match(s) - except re.error as e: - msg = "not an EPS file" - raise SyntaxError(msg) from e - - if not m: - return False - - k, v = m.group(1, 2) - self.info[k] = v - if k == "BoundingBox": - if v == "(atend)": - reading_trailer_comments = True - elif not bounding_box or (trailer_reached and reading_trailer_comments): - try: - # Note: The DSC spec says that BoundingBox - # fields should be integers, but some drivers - # put floating point values there anyway. - bounding_box = [int(float(i)) for i in v.split()] - except Exception: - pass - return True - - while True: - byte = self.fp.read(1) - if byte == b"": - # if we didn't read a byte we must be at the end of the file - if bytes_read == 0: - if reading_header_comments: - check_required_header_comments() - break - elif byte in b"\r\n": - # if we read a line ending character, ignore it and parse what - # we have already read. if we haven't read any other characters, - # continue reading - if bytes_read == 0: - continue - else: - # ASCII/hexadecimal lines in an EPS file must not exceed - # 255 characters, not including line ending characters - if bytes_read >= 255: - # only enforce this for lines starting with a "%", - # otherwise assume it's binary data - if byte_arr[0] == ord("%"): - msg = "not an EPS file" - raise SyntaxError(msg) - else: - if reading_header_comments: - check_required_header_comments() - reading_header_comments = False - # reset bytes_read so we can keep reading - # data until the end of the line - bytes_read = 0 - byte_arr[bytes_read] = byte[0] - bytes_read += 1 - continue - - if reading_header_comments: - # Load EPS header - - # if this line doesn't start with a "%", - # or does start with "%%EndComments", - # then we've reached the end of the header/comments - if byte_arr[0] != ord("%") or bytes_mv[:13] == b"%%EndComments": - check_required_header_comments() - reading_header_comments = False - continue - - s = str(bytes_mv[:bytes_read], "latin-1") - if not read_comment(s): - m = field.match(s) - if m: - k = m.group(1) - if k.startswith("PS-Adobe"): - self.info["PS-Adobe"] = k[9:] - else: - self.info[k] = "" - elif s[0] == "%": - # handle non-DSC PostScript comments that some - # tools mistakenly put in the Comments section - pass - else: - msg = "bad EPS header" - raise OSError(msg) - elif bytes_mv[:11] == b"%ImageData:": - # Check for an "ImageData" descriptor - # https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577413_pgfId-1035096 - - # If we've already read an "ImageData" descriptor, - # don't read another one. - if imagedata_size: - bytes_read = 0 - continue - - # Values: - # columns - # rows - # bit depth (1 or 8) - # mode (1: L, 2: LAB, 3: RGB, 4: CMYK) - # number of padding channels - # block size (number of bytes per row per channel) - # binary/ascii (1: binary, 2: ascii) - # data start identifier (the image data follows after a single line - # consisting only of this quoted value) - image_data_values = byte_arr[11:bytes_read].split(None, 7) - columns, rows, bit_depth, mode_id = ( - int(value) for value in image_data_values[:4] - ) - - if bit_depth == 1: - self._mode = "1" - elif bit_depth == 8: - try: - self._mode = self.mode_map[mode_id] - except ValueError: - break - else: - break - - # Parse the columns and rows after checking the bit depth and mode - # in case the bit depth and/or mode are invalid. - imagedata_size = columns, rows - elif bytes_mv[:5] == b"%%EOF": - break - elif trailer_reached and reading_trailer_comments: - # Load EPS trailer - s = str(bytes_mv[:bytes_read], "latin-1") - read_comment(s) - elif bytes_mv[:9] == b"%%Trailer": - trailer_reached = True - bytes_read = 0 - - # A "BoundingBox" is always required, - # even if an "ImageData" descriptor size exists. - if not bounding_box: - msg = "cannot determine EPS bounding box" - raise OSError(msg) - - # An "ImageData" size takes precedence over the "BoundingBox". - self._size = imagedata_size or ( - bounding_box[2] - bounding_box[0], - bounding_box[3] - bounding_box[1], - ) - - self.tile = [ - ImageFile._Tile("eps", (0, 0) + self.size, offset, (length, bounding_box)) - ] - - def _find_offset(self, fp: IO[bytes]) -> tuple[int, int]: - s = fp.read(4) - - if s == b"%!PS": - # for HEAD without binary preview - fp.seek(0, io.SEEK_END) - length = fp.tell() - offset = 0 - elif i32(s) == 0xC6D3D0C5: - # FIX for: Some EPS file not handled correctly / issue #302 - # EPS can contain binary data - # or start directly with latin coding - # more info see: - # https://web.archive.org/web/20160528181353/http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf - s = fp.read(8) - offset = i32(s) - length = i32(s, 4) - else: - msg = "not an EPS file" - raise SyntaxError(msg) - - return length, offset - - def load( - self, scale: int = 1, transparency: bool = False - ) -> Image.core.PixelAccess | None: - # Load EPS via Ghostscript - if self.tile: - self.im = Ghostscript(self.tile, self.size, self.fp, scale, transparency) - self._mode = self.im.mode - self._size = self.im.size - self.tile = [] - return Image.Image.load(self) - - def load_seek(self, pos: int) -> None: - # we can't incrementally load, so force ImageFile.parser to - # use our custom load method by defining this method. - pass - - -# -------------------------------------------------------------------- - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes, eps: int = 1) -> None: - """EPS Writer for the Python Imaging Library.""" - - # make sure image data is available - im.load() - - # determine PostScript image mode - if im.mode == "L": - operator = (8, 1, b"image") - elif im.mode == "RGB": - operator = (8, 3, b"false 3 colorimage") - elif im.mode == "CMYK": - operator = (8, 4, b"false 4 colorimage") - else: - msg = "image mode is not supported" - raise ValueError(msg) - - if eps: - # write EPS header - fp.write(b"%!PS-Adobe-3.0 EPSF-3.0\n") - fp.write(b"%%Creator: PIL 0.1 EpsEncode\n") - # fp.write("%%CreationDate: %s"...) - fp.write(b"%%%%BoundingBox: 0 0 %d %d\n" % im.size) - fp.write(b"%%Pages: 1\n") - fp.write(b"%%EndComments\n") - fp.write(b"%%Page: 1 1\n") - fp.write(b"%%ImageData: %d %d " % im.size) - fp.write(b'%d %d 0 1 1 "%s"\n' % operator) - - # image header - fp.write(b"gsave\n") - fp.write(b"10 dict begin\n") - fp.write(b"/buf %d string def\n" % (im.size[0] * operator[1])) - fp.write(b"%d %d scale\n" % im.size) - fp.write(b"%d %d 8\n" % im.size) # <= bits - fp.write(b"[%d 0 0 -%d 0 %d]\n" % (im.size[0], im.size[1], im.size[1])) - fp.write(b"{ currentfile buf readhexstring pop } bind\n") - fp.write(operator[2] + b"\n") - if hasattr(fp, "flush"): - fp.flush() - - ImageFile._save(im, fp, [ImageFile._Tile("eps", (0, 0) + im.size)]) - - fp.write(b"\n%%%%EndBinary\n") - fp.write(b"grestore end\n") - if hasattr(fp, "flush"): - fp.flush() - - -# -------------------------------------------------------------------- - - -Image.register_open(EpsImageFile.format, EpsImageFile, _accept) - -Image.register_save(EpsImageFile.format, _save) - -Image.register_extensions(EpsImageFile.format, [".ps", ".eps"]) - -Image.register_mime(EpsImageFile.format, "application/postscript") diff --git a/myenv/lib/python3.12/site-packages/PIL/ExifTags.py b/myenv/lib/python3.12/site-packages/PIL/ExifTags.py deleted file mode 100644 index 2280d5c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ExifTags.py +++ /dev/null @@ -1,382 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# EXIF tags -# -# Copyright (c) 2003 by Secret Labs AB -# -# See the README file for information on usage and redistribution. -# - -""" -This module provides constants and clear-text names for various -well-known EXIF tags. -""" -from __future__ import annotations - -from enum import IntEnum - - -class Base(IntEnum): - # possibly incomplete - InteropIndex = 0x0001 - ProcessingSoftware = 0x000B - NewSubfileType = 0x00FE - SubfileType = 0x00FF - ImageWidth = 0x0100 - ImageLength = 0x0101 - BitsPerSample = 0x0102 - Compression = 0x0103 - PhotometricInterpretation = 0x0106 - Thresholding = 0x0107 - CellWidth = 0x0108 - CellLength = 0x0109 - FillOrder = 0x010A - DocumentName = 0x010D - ImageDescription = 0x010E - Make = 0x010F - Model = 0x0110 - StripOffsets = 0x0111 - Orientation = 0x0112 - SamplesPerPixel = 0x0115 - RowsPerStrip = 0x0116 - StripByteCounts = 0x0117 - MinSampleValue = 0x0118 - MaxSampleValue = 0x0119 - XResolution = 0x011A - YResolution = 0x011B - PlanarConfiguration = 0x011C - PageName = 0x011D - FreeOffsets = 0x0120 - FreeByteCounts = 0x0121 - GrayResponseUnit = 0x0122 - GrayResponseCurve = 0x0123 - T4Options = 0x0124 - T6Options = 0x0125 - ResolutionUnit = 0x0128 - PageNumber = 0x0129 - TransferFunction = 0x012D - Software = 0x0131 - DateTime = 0x0132 - Artist = 0x013B - HostComputer = 0x013C - Predictor = 0x013D - WhitePoint = 0x013E - PrimaryChromaticities = 0x013F - ColorMap = 0x0140 - HalftoneHints = 0x0141 - TileWidth = 0x0142 - TileLength = 0x0143 - TileOffsets = 0x0144 - TileByteCounts = 0x0145 - SubIFDs = 0x014A - InkSet = 0x014C - InkNames = 0x014D - NumberOfInks = 0x014E - DotRange = 0x0150 - TargetPrinter = 0x0151 - ExtraSamples = 0x0152 - SampleFormat = 0x0153 - SMinSampleValue = 0x0154 - SMaxSampleValue = 0x0155 - TransferRange = 0x0156 - ClipPath = 0x0157 - XClipPathUnits = 0x0158 - YClipPathUnits = 0x0159 - Indexed = 0x015A - JPEGTables = 0x015B - OPIProxy = 0x015F - JPEGProc = 0x0200 - JpegIFOffset = 0x0201 - JpegIFByteCount = 0x0202 - JpegRestartInterval = 0x0203 - JpegLosslessPredictors = 0x0205 - JpegPointTransforms = 0x0206 - JpegQTables = 0x0207 - JpegDCTables = 0x0208 - JpegACTables = 0x0209 - YCbCrCoefficients = 0x0211 - YCbCrSubSampling = 0x0212 - YCbCrPositioning = 0x0213 - ReferenceBlackWhite = 0x0214 - XMLPacket = 0x02BC - RelatedImageFileFormat = 0x1000 - RelatedImageWidth = 0x1001 - RelatedImageLength = 0x1002 - Rating = 0x4746 - RatingPercent = 0x4749 - ImageID = 0x800D - CFARepeatPatternDim = 0x828D - BatteryLevel = 0x828F - Copyright = 0x8298 - ExposureTime = 0x829A - FNumber = 0x829D - IPTCNAA = 0x83BB - ImageResources = 0x8649 - ExifOffset = 0x8769 - InterColorProfile = 0x8773 - ExposureProgram = 0x8822 - SpectralSensitivity = 0x8824 - GPSInfo = 0x8825 - ISOSpeedRatings = 0x8827 - OECF = 0x8828 - Interlace = 0x8829 - TimeZoneOffset = 0x882A - SelfTimerMode = 0x882B - SensitivityType = 0x8830 - StandardOutputSensitivity = 0x8831 - RecommendedExposureIndex = 0x8832 - ISOSpeed = 0x8833 - ISOSpeedLatitudeyyy = 0x8834 - ISOSpeedLatitudezzz = 0x8835 - ExifVersion = 0x9000 - DateTimeOriginal = 0x9003 - DateTimeDigitized = 0x9004 - OffsetTime = 0x9010 - OffsetTimeOriginal = 0x9011 - OffsetTimeDigitized = 0x9012 - ComponentsConfiguration = 0x9101 - CompressedBitsPerPixel = 0x9102 - ShutterSpeedValue = 0x9201 - ApertureValue = 0x9202 - BrightnessValue = 0x9203 - ExposureBiasValue = 0x9204 - MaxApertureValue = 0x9205 - SubjectDistance = 0x9206 - MeteringMode = 0x9207 - LightSource = 0x9208 - Flash = 0x9209 - FocalLength = 0x920A - Noise = 0x920D - ImageNumber = 0x9211 - SecurityClassification = 0x9212 - ImageHistory = 0x9213 - TIFFEPStandardID = 0x9216 - MakerNote = 0x927C - UserComment = 0x9286 - SubsecTime = 0x9290 - SubsecTimeOriginal = 0x9291 - SubsecTimeDigitized = 0x9292 - AmbientTemperature = 0x9400 - Humidity = 0x9401 - Pressure = 0x9402 - WaterDepth = 0x9403 - Acceleration = 0x9404 - CameraElevationAngle = 0x9405 - XPTitle = 0x9C9B - XPComment = 0x9C9C - XPAuthor = 0x9C9D - XPKeywords = 0x9C9E - XPSubject = 0x9C9F - FlashPixVersion = 0xA000 - ColorSpace = 0xA001 - ExifImageWidth = 0xA002 - ExifImageHeight = 0xA003 - RelatedSoundFile = 0xA004 - ExifInteroperabilityOffset = 0xA005 - FlashEnergy = 0xA20B - SpatialFrequencyResponse = 0xA20C - FocalPlaneXResolution = 0xA20E - FocalPlaneYResolution = 0xA20F - FocalPlaneResolutionUnit = 0xA210 - SubjectLocation = 0xA214 - ExposureIndex = 0xA215 - SensingMethod = 0xA217 - FileSource = 0xA300 - SceneType = 0xA301 - CFAPattern = 0xA302 - CustomRendered = 0xA401 - ExposureMode = 0xA402 - WhiteBalance = 0xA403 - DigitalZoomRatio = 0xA404 - FocalLengthIn35mmFilm = 0xA405 - SceneCaptureType = 0xA406 - GainControl = 0xA407 - Contrast = 0xA408 - Saturation = 0xA409 - Sharpness = 0xA40A - DeviceSettingDescription = 0xA40B - SubjectDistanceRange = 0xA40C - ImageUniqueID = 0xA420 - CameraOwnerName = 0xA430 - BodySerialNumber = 0xA431 - LensSpecification = 0xA432 - LensMake = 0xA433 - LensModel = 0xA434 - LensSerialNumber = 0xA435 - CompositeImage = 0xA460 - CompositeImageCount = 0xA461 - CompositeImageExposureTimes = 0xA462 - Gamma = 0xA500 - PrintImageMatching = 0xC4A5 - DNGVersion = 0xC612 - DNGBackwardVersion = 0xC613 - UniqueCameraModel = 0xC614 - LocalizedCameraModel = 0xC615 - CFAPlaneColor = 0xC616 - CFALayout = 0xC617 - LinearizationTable = 0xC618 - BlackLevelRepeatDim = 0xC619 - BlackLevel = 0xC61A - BlackLevelDeltaH = 0xC61B - BlackLevelDeltaV = 0xC61C - WhiteLevel = 0xC61D - DefaultScale = 0xC61E - DefaultCropOrigin = 0xC61F - DefaultCropSize = 0xC620 - ColorMatrix1 = 0xC621 - ColorMatrix2 = 0xC622 - CameraCalibration1 = 0xC623 - CameraCalibration2 = 0xC624 - ReductionMatrix1 = 0xC625 - ReductionMatrix2 = 0xC626 - AnalogBalance = 0xC627 - AsShotNeutral = 0xC628 - AsShotWhiteXY = 0xC629 - BaselineExposure = 0xC62A - BaselineNoise = 0xC62B - BaselineSharpness = 0xC62C - BayerGreenSplit = 0xC62D - LinearResponseLimit = 0xC62E - CameraSerialNumber = 0xC62F - LensInfo = 0xC630 - ChromaBlurRadius = 0xC631 - AntiAliasStrength = 0xC632 - ShadowScale = 0xC633 - DNGPrivateData = 0xC634 - MakerNoteSafety = 0xC635 - CalibrationIlluminant1 = 0xC65A - CalibrationIlluminant2 = 0xC65B - BestQualityScale = 0xC65C - RawDataUniqueID = 0xC65D - OriginalRawFileName = 0xC68B - OriginalRawFileData = 0xC68C - ActiveArea = 0xC68D - MaskedAreas = 0xC68E - AsShotICCProfile = 0xC68F - AsShotPreProfileMatrix = 0xC690 - CurrentICCProfile = 0xC691 - CurrentPreProfileMatrix = 0xC692 - ColorimetricReference = 0xC6BF - CameraCalibrationSignature = 0xC6F3 - ProfileCalibrationSignature = 0xC6F4 - AsShotProfileName = 0xC6F6 - NoiseReductionApplied = 0xC6F7 - ProfileName = 0xC6F8 - ProfileHueSatMapDims = 0xC6F9 - ProfileHueSatMapData1 = 0xC6FA - ProfileHueSatMapData2 = 0xC6FB - ProfileToneCurve = 0xC6FC - ProfileEmbedPolicy = 0xC6FD - ProfileCopyright = 0xC6FE - ForwardMatrix1 = 0xC714 - ForwardMatrix2 = 0xC715 - PreviewApplicationName = 0xC716 - PreviewApplicationVersion = 0xC717 - PreviewSettingsName = 0xC718 - PreviewSettingsDigest = 0xC719 - PreviewColorSpace = 0xC71A - PreviewDateTime = 0xC71B - RawImageDigest = 0xC71C - OriginalRawFileDigest = 0xC71D - SubTileBlockSize = 0xC71E - RowInterleaveFactor = 0xC71F - ProfileLookTableDims = 0xC725 - ProfileLookTableData = 0xC726 - OpcodeList1 = 0xC740 - OpcodeList2 = 0xC741 - OpcodeList3 = 0xC74E - NoiseProfile = 0xC761 - - -"""Maps EXIF tags to tag names.""" -TAGS = { - **{i.value: i.name for i in Base}, - 0x920C: "SpatialFrequencyResponse", - 0x9214: "SubjectLocation", - 0x9215: "ExposureIndex", - 0x828E: "CFAPattern", - 0x920B: "FlashEnergy", - 0x9216: "TIFF/EPStandardID", -} - - -class GPS(IntEnum): - GPSVersionID = 0x00 - GPSLatitudeRef = 0x01 - GPSLatitude = 0x02 - GPSLongitudeRef = 0x03 - GPSLongitude = 0x04 - GPSAltitudeRef = 0x05 - GPSAltitude = 0x06 - GPSTimeStamp = 0x07 - GPSSatellites = 0x08 - GPSStatus = 0x09 - GPSMeasureMode = 0x0A - GPSDOP = 0x0B - GPSSpeedRef = 0x0C - GPSSpeed = 0x0D - GPSTrackRef = 0x0E - GPSTrack = 0x0F - GPSImgDirectionRef = 0x10 - GPSImgDirection = 0x11 - GPSMapDatum = 0x12 - GPSDestLatitudeRef = 0x13 - GPSDestLatitude = 0x14 - GPSDestLongitudeRef = 0x15 - GPSDestLongitude = 0x16 - GPSDestBearingRef = 0x17 - GPSDestBearing = 0x18 - GPSDestDistanceRef = 0x19 - GPSDestDistance = 0x1A - GPSProcessingMethod = 0x1B - GPSAreaInformation = 0x1C - GPSDateStamp = 0x1D - GPSDifferential = 0x1E - GPSHPositioningError = 0x1F - - -"""Maps EXIF GPS tags to tag names.""" -GPSTAGS = {i.value: i.name for i in GPS} - - -class Interop(IntEnum): - InteropIndex = 0x0001 - InteropVersion = 0x0002 - RelatedImageFileFormat = 0x1000 - RelatedImageWidth = 0x1001 - RelatedImageHeight = 0x1002 - - -class IFD(IntEnum): - Exif = 0x8769 - GPSInfo = 0x8825 - MakerNote = 0x927C - Makernote = 0x927C # Deprecated - Interop = 0xA005 - IFD1 = -1 - - -class LightSource(IntEnum): - Unknown = 0x00 - Daylight = 0x01 - Fluorescent = 0x02 - Tungsten = 0x03 - Flash = 0x04 - Fine = 0x09 - Cloudy = 0x0A - Shade = 0x0B - DaylightFluorescent = 0x0C - DayWhiteFluorescent = 0x0D - CoolWhiteFluorescent = 0x0E - WhiteFluorescent = 0x0F - StandardLightA = 0x11 - StandardLightB = 0x12 - StandardLightC = 0x13 - D55 = 0x14 - D65 = 0x15 - D75 = 0x16 - D50 = 0x17 - ISO = 0x18 - Other = 0xFF diff --git a/myenv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py deleted file mode 100644 index a3fdc0e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py +++ /dev/null @@ -1,152 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# FITS file handling -# -# Copyright (c) 1998-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import gzip -import math - -from . import Image, ImageFile - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"SIMPLE") - - -class FitsImageFile(ImageFile.ImageFile): - format = "FITS" - format_description = "FITS" - - def _open(self) -> None: - assert self.fp is not None - - headers: dict[bytes, bytes] = {} - header_in_progress = False - decoder_name = "" - while True: - header = self.fp.read(80) - if not header: - msg = "Truncated FITS file" - raise OSError(msg) - keyword = header[:8].strip() - if keyword in (b"SIMPLE", b"XTENSION"): - header_in_progress = True - elif headers and not header_in_progress: - # This is now a data unit - break - elif keyword == b"END": - # Seek to the end of the header unit - self.fp.seek(math.ceil(self.fp.tell() / 2880) * 2880) - if not decoder_name: - decoder_name, offset, args = self._parse_headers(headers) - - header_in_progress = False - continue - - if decoder_name: - # Keep going to read past the headers - continue - - value = header[8:].split(b"/")[0].strip() - if value.startswith(b"="): - value = value[1:].strip() - if not headers and (not _accept(keyword) or value != b"T"): - msg = "Not a FITS file" - raise SyntaxError(msg) - headers[keyword] = value - - if not decoder_name: - msg = "No image data" - raise ValueError(msg) - - offset += self.fp.tell() - 80 - self.tile = [ImageFile._Tile(decoder_name, (0, 0) + self.size, offset, args)] - - def _get_size( - self, headers: dict[bytes, bytes], prefix: bytes - ) -> tuple[int, int] | None: - naxis = int(headers[prefix + b"NAXIS"]) - if naxis == 0: - return None - - if naxis == 1: - return 1, int(headers[prefix + b"NAXIS1"]) - else: - return int(headers[prefix + b"NAXIS1"]), int(headers[prefix + b"NAXIS2"]) - - def _parse_headers( - self, headers: dict[bytes, bytes] - ) -> tuple[str, int, tuple[str | int, ...]]: - prefix = b"" - decoder_name = "raw" - offset = 0 - if ( - headers.get(b"XTENSION") == b"'BINTABLE'" - and headers.get(b"ZIMAGE") == b"T" - and headers[b"ZCMPTYPE"] == b"'GZIP_1 '" - ): - no_prefix_size = self._get_size(headers, prefix) or (0, 0) - number_of_bits = int(headers[b"BITPIX"]) - offset = no_prefix_size[0] * no_prefix_size[1] * (number_of_bits // 8) - - prefix = b"Z" - decoder_name = "fits_gzip" - - size = self._get_size(headers, prefix) - if not size: - return "", 0, () - - self._size = size - - number_of_bits = int(headers[prefix + b"BITPIX"]) - if number_of_bits == 8: - self._mode = "L" - elif number_of_bits == 16: - self._mode = "I;16" - elif number_of_bits == 32: - self._mode = "I" - elif number_of_bits in (-32, -64): - self._mode = "F" - - args: tuple[str | int, ...] - if decoder_name == "raw": - args = (self.mode, 0, -1) - else: - args = (number_of_bits,) - return decoder_name, offset, args - - -class FitsGzipDecoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - value = gzip.decompress(self.fd.read()) - - rows = [] - offset = 0 - number_of_bits = min(self.args[0] // 8, 4) - for y in range(self.state.ysize): - row = bytearray() - for x in range(self.state.xsize): - row += value[offset + (4 - number_of_bits) : offset + 4] - offset += 4 - rows.append(row) - self.set_as_raw(bytes([pixel for row in rows[::-1] for pixel in row])) - return -1, 0 - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(FitsImageFile.format, FitsImageFile, _accept) -Image.register_decoder("fits_gzip", FitsGzipDecoder) - -Image.register_extensions(FitsImageFile.format, [".fit", ".fits"]) diff --git a/myenv/lib/python3.12/site-packages/PIL/FliImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/FliImagePlugin.py deleted file mode 100644 index 7c5bfee..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/FliImagePlugin.py +++ /dev/null @@ -1,178 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# FLI/FLC file handling. -# -# History: -# 95-09-01 fl Created -# 97-01-03 fl Fixed parser, setup decoder tile -# 98-07-15 fl Renamed offset attribute to avoid name clash -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1995-97. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import i32le as i32 -from ._binary import o8 -from ._util import DeferredError - -# -# decoder - - -def _accept(prefix: bytes) -> bool: - return ( - len(prefix) >= 6 - and i16(prefix, 4) in [0xAF11, 0xAF12] - and i16(prefix, 14) in [0, 3] # flags - ) - - -## -# Image plugin for the FLI/FLC animation format. Use the seek -# method to load individual frames. - - -class FliImageFile(ImageFile.ImageFile): - format = "FLI" - format_description = "Autodesk FLI/FLC Animation" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - # HEAD - s = self.fp.read(128) - if not (_accept(s) and s[20:22] == b"\x00\x00"): - msg = "not an FLI/FLC file" - raise SyntaxError(msg) - - # frames - self.n_frames = i16(s, 6) - self.is_animated = self.n_frames > 1 - - # image characteristics - self._mode = "P" - self._size = i16(s, 8), i16(s, 10) - - # animation speed - duration = i32(s, 16) - magic = i16(s, 4) - if magic == 0xAF11: - duration = (duration * 1000) // 70 - self.info["duration"] = duration - - # look for palette - palette = [(a, a, a) for a in range(256)] - - s = self.fp.read(16) - - self.__offset = 128 - - if i16(s, 4) == 0xF100: - # prefix chunk; ignore it - self.__offset = self.__offset + i32(s) - self.fp.seek(self.__offset) - s = self.fp.read(16) - - if i16(s, 4) == 0xF1FA: - # look for palette chunk - number_of_subchunks = i16(s, 6) - chunk_size: int | None = None - for _ in range(number_of_subchunks): - if chunk_size is not None: - self.fp.seek(chunk_size - 6, os.SEEK_CUR) - s = self.fp.read(6) - chunk_type = i16(s, 4) - if chunk_type in (4, 11): - self._palette(palette, 2 if chunk_type == 11 else 0) - break - chunk_size = i32(s) - if not chunk_size: - break - - self.palette = ImagePalette.raw( - "RGB", b"".join(o8(r) + o8(g) + o8(b) for (r, g, b) in palette) - ) - - # set things up to decode first frame - self.__frame = -1 - self._fp = self.fp - self.__rewind = self.fp.tell() - self.seek(0) - - def _palette(self, palette: list[tuple[int, int, int]], shift: int) -> None: - # load palette - - i = 0 - for e in range(i16(self.fp.read(2))): - s = self.fp.read(2) - i = i + s[0] - n = s[1] - if n == 0: - n = 256 - s = self.fp.read(n * 3) - for n in range(0, len(s), 3): - r = s[n] << shift - g = s[n + 1] << shift - b = s[n + 2] << shift - palette[i] = (r, g, b) - i += 1 - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if frame < self.__frame: - self._seek(0) - - for f in range(self.__frame + 1, frame + 1): - self._seek(f) - - def _seek(self, frame: int) -> None: - if isinstance(self._fp, DeferredError): - raise self._fp.ex - if frame == 0: - self.__frame = -1 - self._fp.seek(self.__rewind) - self.__offset = 128 - else: - # ensure that the previous frame was loaded - self.load() - - if frame != self.__frame + 1: - msg = f"cannot seek to frame {frame}" - raise ValueError(msg) - self.__frame = frame - - # move to next frame - self.fp = self._fp - self.fp.seek(self.__offset) - - s = self.fp.read(4) - if not s: - msg = "missing frame size" - raise EOFError(msg) - - framesize = i32(s) - - self.decodermaxblock = framesize - self.tile = [ImageFile._Tile("fli", (0, 0) + self.size, self.__offset)] - - self.__offset += framesize - - def tell(self) -> int: - return self.__frame - - -# -# registry - -Image.register_open(FliImageFile.format, FliImageFile, _accept) - -Image.register_extensions(FliImageFile.format, [".fli", ".flc"]) diff --git a/myenv/lib/python3.12/site-packages/PIL/FontFile.py b/myenv/lib/python3.12/site-packages/PIL/FontFile.py deleted file mode 100644 index 1e0c1c1..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/FontFile.py +++ /dev/null @@ -1,134 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# base class for raster font file parsers -# -# history: -# 1997-06-05 fl created -# 1997-08-19 fl restrict image width -# -# Copyright (c) 1997-1998 by Secret Labs AB -# Copyright (c) 1997-1998 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -from typing import BinaryIO - -from . import Image, _binary - -WIDTH = 800 - - -def puti16( - fp: BinaryIO, values: tuple[int, int, int, int, int, int, int, int, int, int] -) -> None: - """Write network order (big-endian) 16-bit sequence""" - for v in values: - if v < 0: - v += 65536 - fp.write(_binary.o16be(v)) - - -class FontFile: - """Base class for raster font file handlers.""" - - bitmap: Image.Image | None = None - - def __init__(self) -> None: - self.info: dict[bytes, bytes | int] = {} - self.glyph: list[ - tuple[ - tuple[int, int], - tuple[int, int, int, int], - tuple[int, int, int, int], - Image.Image, - ] - | None - ] = [None] * 256 - - def __getitem__(self, ix: int) -> ( - tuple[ - tuple[int, int], - tuple[int, int, int, int], - tuple[int, int, int, int], - Image.Image, - ] - | None - ): - return self.glyph[ix] - - def compile(self) -> None: - """Create metrics and bitmap""" - - if self.bitmap: - return - - # create bitmap large enough to hold all data - h = w = maxwidth = 0 - lines = 1 - for glyph in self.glyph: - if glyph: - d, dst, src, im = glyph - h = max(h, src[3] - src[1]) - w = w + (src[2] - src[0]) - if w > WIDTH: - lines += 1 - w = src[2] - src[0] - maxwidth = max(maxwidth, w) - - xsize = maxwidth - ysize = lines * h - - if xsize == 0 and ysize == 0: - return - - self.ysize = h - - # paste glyphs into bitmap - self.bitmap = Image.new("1", (xsize, ysize)) - self.metrics: list[ - tuple[tuple[int, int], tuple[int, int, int, int], tuple[int, int, int, int]] - | None - ] = [None] * 256 - x = y = 0 - for i in range(256): - glyph = self[i] - if glyph: - d, dst, src, im = glyph - xx = src[2] - src[0] - x0, y0 = x, y - x = x + xx - if x > WIDTH: - x, y = 0, y + h - x0, y0 = x, y - x = xx - s = src[0] + x0, src[1] + y0, src[2] + x0, src[3] + y0 - self.bitmap.paste(im.crop(src), s) - self.metrics[i] = d, dst, s - - def save(self, filename: str) -> None: - """Save font""" - - self.compile() - - # font data - if not self.bitmap: - msg = "No bitmap created" - raise ValueError(msg) - self.bitmap.save(os.path.splitext(filename)[0] + ".pbm", "PNG") - - # font metrics - with open(os.path.splitext(filename)[0] + ".pil", "wb") as fp: - fp.write(b"PILfont\n") - fp.write(f";;;;;;{self.ysize};\n".encode("ascii")) # HACK!!! - fp.write(b"DATA\n") - for id in range(256): - m = self.metrics[id] - if not m: - puti16(fp, (0,) * 10) - else: - puti16(fp, m[0] + m[1] + m[2]) diff --git a/myenv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py deleted file mode 100644 index fd992cd..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py +++ /dev/null @@ -1,257 +0,0 @@ -# -# THIS IS WORK IN PROGRESS -# -# The Python Imaging Library. -# $Id$ -# -# FlashPix support for PIL -# -# History: -# 97-01-25 fl Created (reads uncompressed RGB images only) -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import olefile - -from . import Image, ImageFile -from ._binary import i32le as i32 - -# we map from colour field tuples to (mode, rawmode) descriptors -MODES = { - # opacity - (0x00007FFE,): ("A", "L"), - # monochrome - (0x00010000,): ("L", "L"), - (0x00018000, 0x00017FFE): ("RGBA", "LA"), - # photo YCC - (0x00020000, 0x00020001, 0x00020002): ("RGB", "YCC;P"), - (0x00028000, 0x00028001, 0x00028002, 0x00027FFE): ("RGBA", "YCCA;P"), - # standard RGB (NIFRGB) - (0x00030000, 0x00030001, 0x00030002): ("RGB", "RGB"), - (0x00038000, 0x00038001, 0x00038002, 0x00037FFE): ("RGBA", "RGBA"), -} - - -# -# -------------------------------------------------------------------- - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(olefile.MAGIC) - - -## -# Image plugin for the FlashPix images. - - -class FpxImageFile(ImageFile.ImageFile): - format = "FPX" - format_description = "FlashPix" - - def _open(self) -> None: - # - # read the OLE directory and see if this is a likely - # to be a FlashPix file - - try: - self.ole = olefile.OleFileIO(self.fp) - except OSError as e: - msg = "not an FPX file; invalid OLE file" - raise SyntaxError(msg) from e - - root = self.ole.root - if not root or root.clsid != "56616700-C154-11CE-8553-00AA00A1F95B": - msg = "not an FPX file; bad root CLSID" - raise SyntaxError(msg) - - self._open_index(1) - - def _open_index(self, index: int = 1) -> None: - # - # get the Image Contents Property Set - - prop = self.ole.getproperties( - [f"Data Object Store {index:06d}", "\005Image Contents"] - ) - - # size (highest resolution) - - assert isinstance(prop[0x1000002], int) - assert isinstance(prop[0x1000003], int) - self._size = prop[0x1000002], prop[0x1000003] - - size = max(self.size) - i = 1 - while size > 64: - size = size // 2 - i += 1 - self.maxid = i - 1 - - # mode. instead of using a single field for this, flashpix - # requires you to specify the mode for each channel in each - # resolution subimage, and leaves it to the decoder to make - # sure that they all match. for now, we'll cheat and assume - # that this is always the case. - - id = self.maxid << 16 - - s = prop[0x2000002 | id] - - if not isinstance(s, bytes) or (bands := i32(s, 4)) > 4: - msg = "Invalid number of bands" - raise OSError(msg) - - # note: for now, we ignore the "uncalibrated" flag - colors = tuple(i32(s, 8 + i * 4) & 0x7FFFFFFF for i in range(bands)) - - self._mode, self.rawmode = MODES[colors] - - # load JPEG tables, if any - self.jpeg = {} - for i in range(256): - id = 0x3000001 | (i << 16) - if id in prop: - self.jpeg[i] = prop[id] - - self._open_subimage(1, self.maxid) - - def _open_subimage(self, index: int = 1, subimage: int = 0) -> None: - # - # setup tile descriptors for a given subimage - - stream = [ - f"Data Object Store {index:06d}", - f"Resolution {subimage:04d}", - "Subimage 0000 Header", - ] - - fp = self.ole.openstream(stream) - - # skip prefix - fp.read(28) - - # header stream - s = fp.read(36) - - size = i32(s, 4), i32(s, 8) - # tilecount = i32(s, 12) - tilesize = i32(s, 16), i32(s, 20) - # channels = i32(s, 24) - offset = i32(s, 28) - length = i32(s, 32) - - if size != self.size: - msg = "subimage mismatch" - raise OSError(msg) - - # get tile descriptors - fp.seek(28 + offset) - s = fp.read(i32(s, 12) * length) - - x = y = 0 - xsize, ysize = size - xtile, ytile = tilesize - self.tile = [] - - for i in range(0, len(s), length): - x1 = min(xsize, x + xtile) - y1 = min(ysize, y + ytile) - - compression = i32(s, i + 8) - - if compression == 0: - self.tile.append( - ImageFile._Tile( - "raw", - (x, y, x1, y1), - i32(s, i) + 28, - self.rawmode, - ) - ) - - elif compression == 1: - # FIXME: the fill decoder is not implemented - self.tile.append( - ImageFile._Tile( - "fill", - (x, y, x1, y1), - i32(s, i) + 28, - (self.rawmode, s[12:16]), - ) - ) - - elif compression == 2: - internal_color_conversion = s[14] - jpeg_tables = s[15] - rawmode = self.rawmode - - if internal_color_conversion: - # The image is stored as usual (usually YCbCr). - if rawmode == "RGBA": - # For "RGBA", data is stored as YCbCrA based on - # negative RGB. The following trick works around - # this problem : - jpegmode, rawmode = "YCbCrK", "CMYK" - else: - jpegmode = None # let the decoder decide - - else: - # The image is stored as defined by rawmode - jpegmode = rawmode - - self.tile.append( - ImageFile._Tile( - "jpeg", - (x, y, x1, y1), - i32(s, i) + 28, - (rawmode, jpegmode), - ) - ) - - # FIXME: jpeg tables are tile dependent; the prefix - # data must be placed in the tile descriptor itself! - - if jpeg_tables: - self.tile_prefix = self.jpeg[jpeg_tables] - - else: - msg = "unknown/invalid compression" - raise OSError(msg) - - x = x + xtile - if x >= xsize: - x, y = 0, y + ytile - if y >= ysize: - break # isn't really required - - self.stream = stream - self._fp = self.fp - self.fp = None - - def load(self) -> Image.core.PixelAccess | None: - if not self.fp: - self.fp = self.ole.openstream(self.stream[:2] + ["Subimage 0000 Data"]) - - return ImageFile.ImageFile.load(self) - - def close(self) -> None: - self.ole.close() - super().close() - - def __exit__(self, *args: object) -> None: - self.ole.close() - super().__exit__() - - -# -# -------------------------------------------------------------------- - - -Image.register_open(FpxImageFile.format, FpxImageFile, _accept) - -Image.register_extension(FpxImageFile.format, ".fpx") diff --git a/myenv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py deleted file mode 100644 index d60e75b..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -A Pillow loader for .ftc and .ftu files (FTEX) -Jerome Leclanche - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: - https://creativecommons.org/publicdomain/zero/1.0/ - -Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001 - -The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a -packed custom format called FTEX. This file format uses file extensions FTC -and FTU. -* FTC files are compressed textures (using standard texture compression). -* FTU files are not compressed. -Texture File Format -The FTC and FTU texture files both use the same format. This -has the following structure: -{header} -{format_directory} -{data} -Where: -{header} = { - u32:magic, - u32:version, - u32:width, - u32:height, - u32:mipmap_count, - u32:format_count -} - -* The "magic" number is "FTEX". -* "width" and "height" are the dimensions of the texture. -* "mipmap_count" is the number of mipmaps in the texture. -* "format_count" is the number of texture formats (different versions of the -same texture) in this file. - -{format_directory} = format_count * { u32:format, u32:where } - -The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB -uncompressed textures. -The texture data for a format starts at the position "where" in the file. - -Each set of texture data in the file has the following structure: -{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } } -* "mipmap_size" is the number of bytes in that mip level. For compressed -textures this is the size of the texture data compressed with DXT1. For 24 bit -uncompressed textures, this is 3 * width * height. Following this are the image -bytes for that mipmap level. - -Note: All data is stored in little-Endian (Intel) byte order. -""" - -from __future__ import annotations - -import struct -from enum import IntEnum -from io import BytesIO - -from . import Image, ImageFile - -MAGIC = b"FTEX" - - -class Format(IntEnum): - DXT1 = 0 - UNCOMPRESSED = 1 - - -class FtexImageFile(ImageFile.ImageFile): - format = "FTEX" - format_description = "Texture File Format (IW2:EOC)" - - def _open(self) -> None: - if not _accept(self.fp.read(4)): - msg = "not an FTEX file" - raise SyntaxError(msg) - struct.unpack(" None: - pass - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(MAGIC) - - -Image.register_open(FtexImageFile.format, FtexImageFile, _accept) -Image.register_extensions(FtexImageFile.format, [".ftc", ".ftu"]) diff --git a/myenv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py deleted file mode 100644 index f319d7e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# The Python Imaging Library -# -# load a GIMP brush file -# -# History: -# 96-03-14 fl Created -# 16-01-08 es Version 2 -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# Copyright (c) Eric Soroos 2016. -# -# See the README file for information on usage and redistribution. -# -# -# See https://github.com/GNOME/gimp/blob/mainline/devel-docs/gbr.txt for -# format documentation. -# -# This code Interprets version 1 and 2 .gbr files. -# Version 1 files are obsolete, and should not be used for new -# brushes. -# Version 2 files are saved by GIMP v2.8 (at least) -# Version 3 files have a format specifier of 18 for 16bit floats in -# the color depth field. This is currently unsupported by Pillow. -from __future__ import annotations - -from . import Image, ImageFile -from ._binary import i32be as i32 - - -def _accept(prefix: bytes) -> bool: - return len(prefix) >= 8 and i32(prefix, 0) >= 20 and i32(prefix, 4) in (1, 2) - - -## -# Image plugin for the GIMP brush format. - - -class GbrImageFile(ImageFile.ImageFile): - format = "GBR" - format_description = "GIMP brush file" - - def _open(self) -> None: - header_size = i32(self.fp.read(4)) - if header_size < 20: - msg = "not a GIMP brush" - raise SyntaxError(msg) - version = i32(self.fp.read(4)) - if version not in (1, 2): - msg = f"Unsupported GIMP brush version: {version}" - raise SyntaxError(msg) - - width = i32(self.fp.read(4)) - height = i32(self.fp.read(4)) - color_depth = i32(self.fp.read(4)) - if width <= 0 or height <= 0: - msg = "not a GIMP brush" - raise SyntaxError(msg) - if color_depth not in (1, 4): - msg = f"Unsupported GIMP brush color depth: {color_depth}" - raise SyntaxError(msg) - - if version == 1: - comment_length = header_size - 20 - else: - comment_length = header_size - 28 - magic_number = self.fp.read(4) - if magic_number != b"GIMP": - msg = "not a GIMP brush, bad magic number" - raise SyntaxError(msg) - self.info["spacing"] = i32(self.fp.read(4)) - - comment = self.fp.read(comment_length)[:-1] - - if color_depth == 1: - self._mode = "L" - else: - self._mode = "RGBA" - - self._size = width, height - - self.info["comment"] = comment - - # Image might not be small - Image._decompression_bomb_check(self.size) - - # Data is an uncompressed block of w * h * bytes/pixel - self._data_size = width * height * color_depth - - def load(self) -> Image.core.PixelAccess | None: - if self._im is None: - self.im = Image.core.new(self.mode, self.size) - self.frombytes(self.fp.read(self._data_size)) - return Image.Image.load(self) - - -# -# registry - - -Image.register_open(GbrImageFile.format, GbrImageFile, _accept) -Image.register_extension(GbrImageFile.format, ".gbr") diff --git a/myenv/lib/python3.12/site-packages/PIL/GdImageFile.py b/myenv/lib/python3.12/site-packages/PIL/GdImageFile.py deleted file mode 100644 index 891225c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GdImageFile.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# GD file handling -# -# History: -# 1996-04-12 fl Created -# -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - - -""" -.. note:: - This format cannot be automatically recognized, so the - class is not registered for use with :py:func:`PIL.Image.open()`. To open a - gd file, use the :py:func:`PIL.GdImageFile.open()` function instead. - -.. warning:: - THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE. This - implementation is provided for convenience and demonstrational - purposes only. -""" -from __future__ import annotations - -from typing import IO - -from . import ImageFile, ImagePalette, UnidentifiedImageError -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._typing import StrOrBytesPath - - -class GdImageFile(ImageFile.ImageFile): - """ - Image plugin for the GD uncompressed format. Note that this format - is not supported by the standard :py:func:`PIL.Image.open()` function. To use - this plugin, you have to import the :py:mod:`PIL.GdImageFile` module and - use the :py:func:`PIL.GdImageFile.open()` function. - """ - - format = "GD" - format_description = "GD uncompressed images" - - def _open(self) -> None: - # Header - assert self.fp is not None - - s = self.fp.read(1037) - - if i16(s) not in [65534, 65535]: - msg = "Not a valid GD 2.x .gd file" - raise SyntaxError(msg) - - self._mode = "P" - self._size = i16(s, 2), i16(s, 4) - - true_color = s[6] - true_color_offset = 2 if true_color else 0 - - # transparency index - tindex = i32(s, 7 + true_color_offset) - if tindex < 256: - self.info["transparency"] = tindex - - self.palette = ImagePalette.raw( - "RGBX", s[7 + true_color_offset + 6 : 7 + true_color_offset + 6 + 256 * 4] - ) - - self.tile = [ - ImageFile._Tile( - "raw", - (0, 0) + self.size, - 7 + true_color_offset + 6 + 256 * 4, - "L", - ) - ] - - -def open(fp: StrOrBytesPath | IO[bytes], mode: str = "r") -> GdImageFile: - """ - Load texture from a GD image file. - - :param fp: GD file name, or an opened file handle. - :param mode: Optional mode. In this version, if the mode argument - is given, it must be "r". - :returns: An image instance. - :raises OSError: If the image could not be read. - """ - if mode != "r": - msg = "bad mode" - raise ValueError(msg) - - try: - return GdImageFile(fp) - except SyntaxError as e: - msg = "cannot identify this image file" - raise UnidentifiedImageError(msg) from e diff --git a/myenv/lib/python3.12/site-packages/PIL/GifImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/GifImagePlugin.py deleted file mode 100644 index b03aa7f..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GifImagePlugin.py +++ /dev/null @@ -1,1213 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# GIF file handling -# -# History: -# 1995-09-01 fl Created -# 1996-12-14 fl Added interlace support -# 1996-12-30 fl Added animation support -# 1997-01-05 fl Added write support, fixed local colour map bug -# 1997-02-23 fl Make sure to load raster data in getdata() -# 1997-07-05 fl Support external decoder (0.4) -# 1998-07-09 fl Handle all modes when saving (0.5) -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 2001-04-16 fl Added rewind support (seek to frame 0) (0.6) -# 2001-04-17 fl Added palette optimization (0.7) -# 2002-06-06 fl Added transparency support for save (0.8) -# 2004-02-24 fl Disable interlacing for small images -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1995-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import itertools -import math -import os -import subprocess -from enum import IntEnum -from functools import cached_property -from typing import IO, Any, Literal, NamedTuple, Union, cast - -from . import ( - Image, - ImageChops, - ImageFile, - ImageMath, - ImageOps, - ImagePalette, - ImageSequence, -) -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 -from ._util import DeferredError - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import _imaging - from ._typing import Buffer - - -class LoadingStrategy(IntEnum): - """.. versionadded:: 9.1.0""" - - RGB_AFTER_FIRST = 0 - RGB_AFTER_DIFFERENT_PALETTE_ONLY = 1 - RGB_ALWAYS = 2 - - -#: .. versionadded:: 9.1.0 -LOADING_STRATEGY = LoadingStrategy.RGB_AFTER_FIRST - -# -------------------------------------------------------------------- -# Identify/read GIF files - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith((b"GIF87a", b"GIF89a")) - - -## -# Image plugin for GIF images. This plugin supports both GIF87 and -# GIF89 images. - - -class GifImageFile(ImageFile.ImageFile): - format = "GIF" - format_description = "Compuserve GIF" - _close_exclusive_fp_after_loading = False - - global_palette = None - - def data(self) -> bytes | None: - s = self.fp.read(1) - if s and s[0]: - return self.fp.read(s[0]) - return None - - def _is_palette_needed(self, p: bytes) -> bool: - for i in range(0, len(p), 3): - if not (i // 3 == p[i] == p[i + 1] == p[i + 2]): - return True - return False - - def _open(self) -> None: - # Screen - s = self.fp.read(13) - if not _accept(s): - msg = "not a GIF file" - raise SyntaxError(msg) - - self.info["version"] = s[:6] - self._size = i16(s, 6), i16(s, 8) - flags = s[10] - bits = (flags & 7) + 1 - - if flags & 128: - # get global palette - self.info["background"] = s[11] - # check if palette contains colour indices - p = self.fp.read(3 << bits) - if self._is_palette_needed(p): - p = ImagePalette.raw("RGB", p) - self.global_palette = self.palette = p - - self._fp = self.fp # FIXME: hack - self.__rewind = self.fp.tell() - self._n_frames: int | None = None - self._seek(0) # get ready to read first frame - - @property - def n_frames(self) -> int: - if self._n_frames is None: - current = self.tell() - try: - while True: - self._seek(self.tell() + 1, False) - except EOFError: - self._n_frames = self.tell() + 1 - self.seek(current) - return self._n_frames - - @cached_property - def is_animated(self) -> bool: - if self._n_frames is not None: - return self._n_frames != 1 - - current = self.tell() - if current: - return True - - try: - self._seek(1, False) - is_animated = True - except EOFError: - is_animated = False - - self.seek(current) - return is_animated - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if frame < self.__frame: - self._im = None - self._seek(0) - - last_frame = self.__frame - for f in range(self.__frame + 1, frame + 1): - try: - self._seek(f) - except EOFError as e: - self.seek(last_frame) - msg = "no more images in GIF file" - raise EOFError(msg) from e - - def _seek(self, frame: int, update_image: bool = True) -> None: - if isinstance(self._fp, DeferredError): - raise self._fp.ex - if frame == 0: - # rewind - self.__offset = 0 - self.dispose: _imaging.ImagingCore | None = None - self.__frame = -1 - self._fp.seek(self.__rewind) - self.disposal_method = 0 - if "comment" in self.info: - del self.info["comment"] - else: - # ensure that the previous frame was loaded - if self.tile and update_image: - self.load() - - if frame != self.__frame + 1: - msg = f"cannot seek to frame {frame}" - raise ValueError(msg) - - self.fp = self._fp - if self.__offset: - # backup to last frame - self.fp.seek(self.__offset) - while self.data(): - pass - self.__offset = 0 - - s = self.fp.read(1) - if not s or s == b";": - msg = "no more images in GIF file" - raise EOFError(msg) - - palette: ImagePalette.ImagePalette | Literal[False] | None = None - - info: dict[str, Any] = {} - frame_transparency = None - interlace = None - frame_dispose_extent = None - while True: - if not s: - s = self.fp.read(1) - if not s or s == b";": - break - - elif s == b"!": - # - # extensions - # - s = self.fp.read(1) - block = self.data() - if s[0] == 249 and block is not None: - # - # graphic control extension - # - flags = block[0] - if flags & 1: - frame_transparency = block[3] - info["duration"] = i16(block, 1) * 10 - - # disposal method - find the value of bits 4 - 6 - dispose_bits = 0b00011100 & flags - dispose_bits = dispose_bits >> 2 - if dispose_bits: - # only set the dispose if it is not - # unspecified. I'm not sure if this is - # correct, but it seems to prevent the last - # frame from looking odd for some animations - self.disposal_method = dispose_bits - elif s[0] == 254: - # - # comment extension - # - comment = b"" - - # Read this comment block - while block: - comment += block - block = self.data() - - if "comment" in info: - # If multiple comment blocks in frame, separate with \n - info["comment"] += b"\n" + comment - else: - info["comment"] = comment - s = None - continue - elif s[0] == 255 and frame == 0 and block is not None: - # - # application extension - # - info["extension"] = block, self.fp.tell() - if block.startswith(b"NETSCAPE2.0"): - block = self.data() - if block and len(block) >= 3 and block[0] == 1: - self.info["loop"] = i16(block, 1) - while self.data(): - pass - - elif s == b",": - # - # local image - # - s = self.fp.read(9) - - # extent - x0, y0 = i16(s, 0), i16(s, 2) - x1, y1 = x0 + i16(s, 4), y0 + i16(s, 6) - if (x1 > self.size[0] or y1 > self.size[1]) and update_image: - self._size = max(x1, self.size[0]), max(y1, self.size[1]) - Image._decompression_bomb_check(self._size) - frame_dispose_extent = x0, y0, x1, y1 - flags = s[8] - - interlace = (flags & 64) != 0 - - if flags & 128: - bits = (flags & 7) + 1 - p = self.fp.read(3 << bits) - if self._is_palette_needed(p): - palette = ImagePalette.raw("RGB", p) - else: - palette = False - - # image data - bits = self.fp.read(1)[0] - self.__offset = self.fp.tell() - break - s = None - - if interlace is None: - msg = "image not found in GIF frame" - raise EOFError(msg) - - self.__frame = frame - if not update_image: - return - - self.tile = [] - - if self.dispose: - self.im.paste(self.dispose, self.dispose_extent) - - self._frame_palette = palette if palette is not None else self.global_palette - self._frame_transparency = frame_transparency - if frame == 0: - if self._frame_palette: - if LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS: - self._mode = "RGBA" if frame_transparency is not None else "RGB" - else: - self._mode = "P" - else: - self._mode = "L" - - if palette: - self.palette = palette - elif self.global_palette: - from copy import copy - - self.palette = copy(self.global_palette) - else: - self.palette = None - else: - if self.mode == "P": - if ( - LOADING_STRATEGY != LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY - or palette - ): - if "transparency" in self.info: - self.im.putpalettealpha(self.info["transparency"], 0) - self.im = self.im.convert("RGBA", Image.Dither.FLOYDSTEINBERG) - self._mode = "RGBA" - del self.info["transparency"] - else: - self._mode = "RGB" - self.im = self.im.convert("RGB", Image.Dither.FLOYDSTEINBERG) - - def _rgb(color: int) -> tuple[int, int, int]: - if self._frame_palette: - if color * 3 + 3 > len(self._frame_palette.palette): - color = 0 - return cast( - tuple[int, int, int], - tuple(self._frame_palette.palette[color * 3 : color * 3 + 3]), - ) - else: - return (color, color, color) - - self.dispose = None - self.dispose_extent: tuple[int, int, int, int] | None = frame_dispose_extent - if self.dispose_extent and self.disposal_method >= 2: - try: - if self.disposal_method == 2: - # replace with background colour - - # only dispose the extent in this frame - x0, y0, x1, y1 = self.dispose_extent - dispose_size = (x1 - x0, y1 - y0) - - Image._decompression_bomb_check(dispose_size) - - # by convention, attempt to use transparency first - dispose_mode = "P" - color = self.info.get("transparency", frame_transparency) - if color is not None: - if self.mode in ("RGB", "RGBA"): - dispose_mode = "RGBA" - color = _rgb(color) + (0,) - else: - color = self.info.get("background", 0) - if self.mode in ("RGB", "RGBA"): - dispose_mode = "RGB" - color = _rgb(color) - self.dispose = Image.core.fill(dispose_mode, dispose_size, color) - else: - # replace with previous contents - if self._im is not None: - # only dispose the extent in this frame - self.dispose = self._crop(self.im, self.dispose_extent) - elif frame_transparency is not None: - x0, y0, x1, y1 = self.dispose_extent - dispose_size = (x1 - x0, y1 - y0) - - Image._decompression_bomb_check(dispose_size) - dispose_mode = "P" - color = frame_transparency - if self.mode in ("RGB", "RGBA"): - dispose_mode = "RGBA" - color = _rgb(frame_transparency) + (0,) - self.dispose = Image.core.fill( - dispose_mode, dispose_size, color - ) - except AttributeError: - pass - - if interlace is not None: - transparency = -1 - if frame_transparency is not None: - if frame == 0: - if LOADING_STRATEGY != LoadingStrategy.RGB_ALWAYS: - self.info["transparency"] = frame_transparency - elif self.mode not in ("RGB", "RGBA"): - transparency = frame_transparency - self.tile = [ - ImageFile._Tile( - "gif", - (x0, y0, x1, y1), - self.__offset, - (bits, interlace, transparency), - ) - ] - - if info.get("comment"): - self.info["comment"] = info["comment"] - for k in ["duration", "extension"]: - if k in info: - self.info[k] = info[k] - elif k in self.info: - del self.info[k] - - def load_prepare(self) -> None: - temp_mode = "P" if self._frame_palette else "L" - self._prev_im = None - if self.__frame == 0: - if self._frame_transparency is not None: - self.im = Image.core.fill( - temp_mode, self.size, self._frame_transparency - ) - elif self.mode in ("RGB", "RGBA"): - self._prev_im = self.im - if self._frame_palette: - self.im = Image.core.fill("P", self.size, self._frame_transparency or 0) - self.im.putpalette("RGB", *self._frame_palette.getdata()) - else: - self._im = None - if not self._prev_im and self._im is not None and self.size != self.im.size: - expanded_im = Image.core.fill(self.im.mode, self.size) - if self._frame_palette: - expanded_im.putpalette("RGB", *self._frame_palette.getdata()) - expanded_im.paste(self.im, (0, 0) + self.im.size) - - self.im = expanded_im - self._mode = temp_mode - self._frame_palette = None - - super().load_prepare() - - def load_end(self) -> None: - if self.__frame == 0: - if self.mode == "P" and LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS: - if self._frame_transparency is not None: - self.im.putpalettealpha(self._frame_transparency, 0) - self._mode = "RGBA" - else: - self._mode = "RGB" - self.im = self.im.convert(self.mode, Image.Dither.FLOYDSTEINBERG) - return - if not self._prev_im: - return - if self.size != self._prev_im.size: - if self._frame_transparency is not None: - expanded_im = Image.core.fill("RGBA", self.size) - else: - expanded_im = Image.core.fill("P", self.size) - expanded_im.putpalette("RGB", "RGB", self.im.getpalette()) - expanded_im = expanded_im.convert("RGB") - expanded_im.paste(self._prev_im, (0, 0) + self._prev_im.size) - - self._prev_im = expanded_im - assert self._prev_im is not None - if self._frame_transparency is not None: - if self.mode == "L": - frame_im = self.im.convert_transparent("LA", self._frame_transparency) - else: - self.im.putpalettealpha(self._frame_transparency, 0) - frame_im = self.im.convert("RGBA") - else: - frame_im = self.im.convert("RGB") - - assert self.dispose_extent is not None - frame_im = self._crop(frame_im, self.dispose_extent) - - self.im = self._prev_im - self._mode = self.im.mode - if frame_im.mode in ("LA", "RGBA"): - self.im.paste(frame_im, self.dispose_extent, frame_im) - else: - self.im.paste(frame_im, self.dispose_extent) - - def tell(self) -> int: - return self.__frame - - -# -------------------------------------------------------------------- -# Write GIF files - - -RAWMODE = {"1": "L", "L": "L", "P": "P"} - - -def _normalize_mode(im: Image.Image) -> Image.Image: - """ - Takes an image (or frame), returns an image in a mode that is appropriate - for saving in a Gif. - - It may return the original image, or it may return an image converted to - palette or 'L' mode. - - :param im: Image object - :returns: Image object - """ - if im.mode in RAWMODE: - im.load() - return im - if Image.getmodebase(im.mode) == "RGB": - im = im.convert("P", palette=Image.Palette.ADAPTIVE) - assert im.palette is not None - if im.palette.mode == "RGBA": - for rgba in im.palette.colors: - if rgba[3] == 0: - im.info["transparency"] = im.palette.colors[rgba] - break - return im - return im.convert("L") - - -_Palette = Union[bytes, bytearray, list[int], ImagePalette.ImagePalette] - - -def _normalize_palette( - im: Image.Image, palette: _Palette | None, info: dict[str, Any] -) -> Image.Image: - """ - Normalizes the palette for image. - - Sets the palette to the incoming palette, if provided. - - Ensures that there's a palette for L mode images - - Optimizes the palette if necessary/desired. - - :param im: Image object - :param palette: bytes object containing the source palette, or .... - :param info: encoderinfo - :returns: Image object - """ - source_palette = None - if palette: - # a bytes palette - if isinstance(palette, (bytes, bytearray, list)): - source_palette = bytearray(palette[:768]) - if isinstance(palette, ImagePalette.ImagePalette): - source_palette = bytearray(palette.palette) - - if im.mode == "P": - if not source_palette: - im_palette = im.getpalette(None) - assert im_palette is not None - source_palette = bytearray(im_palette) - else: # L-mode - if not source_palette: - source_palette = bytearray(i // 3 for i in range(768)) - im.palette = ImagePalette.ImagePalette("RGB", palette=source_palette) - assert source_palette is not None - - if palette: - used_palette_colors: list[int | None] = [] - assert im.palette is not None - for i in range(0, len(source_palette), 3): - source_color = tuple(source_palette[i : i + 3]) - index = im.palette.colors.get(source_color) - if index in used_palette_colors: - index = None - used_palette_colors.append(index) - for i, index in enumerate(used_palette_colors): - if index is None: - for j in range(len(used_palette_colors)): - if j not in used_palette_colors: - used_palette_colors[i] = j - break - dest_map: list[int] = [] - for index in used_palette_colors: - assert index is not None - dest_map.append(index) - im = im.remap_palette(dest_map) - else: - optimized_palette_colors = _get_optimize(im, info) - if optimized_palette_colors is not None: - im = im.remap_palette(optimized_palette_colors, source_palette) - if "transparency" in info: - try: - info["transparency"] = optimized_palette_colors.index( - info["transparency"] - ) - except ValueError: - del info["transparency"] - return im - - assert im.palette is not None - im.palette.palette = source_palette - return im - - -def _write_single_frame( - im: Image.Image, - fp: IO[bytes], - palette: _Palette | None, -) -> None: - im_out = _normalize_mode(im) - for k, v in im_out.info.items(): - if isinstance(k, str): - im.encoderinfo.setdefault(k, v) - im_out = _normalize_palette(im_out, palette, im.encoderinfo) - - for s in _get_global_header(im_out, im.encoderinfo): - fp.write(s) - - # local image header - flags = 0 - if get_interlace(im): - flags = flags | 64 - _write_local_header(fp, im, (0, 0), flags) - - im_out.encoderconfig = (8, get_interlace(im)) - ImageFile._save( - im_out, fp, [ImageFile._Tile("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])] - ) - - fp.write(b"\0") # end of image data - - -def _getbbox( - base_im: Image.Image, im_frame: Image.Image -) -> tuple[Image.Image, tuple[int, int, int, int] | None]: - palette_bytes = [ - bytes(im.palette.palette) if im.palette else b"" for im in (base_im, im_frame) - ] - if palette_bytes[0] != palette_bytes[1]: - im_frame = im_frame.convert("RGBA") - base_im = base_im.convert("RGBA") - delta = ImageChops.subtract_modulo(im_frame, base_im) - return delta, delta.getbbox(alpha_only=False) - - -class _Frame(NamedTuple): - im: Image.Image - bbox: tuple[int, int, int, int] | None - encoderinfo: dict[str, Any] - - -def _write_multiple_frames( - im: Image.Image, fp: IO[bytes], palette: _Palette | None -) -> bool: - duration = im.encoderinfo.get("duration") - disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) - - im_frames: list[_Frame] = [] - previous_im: Image.Image | None = None - frame_count = 0 - background_im = None - for imSequence in itertools.chain([im], im.encoderinfo.get("append_images", [])): - for im_frame in ImageSequence.Iterator(imSequence): - # a copy is required here since seek can still mutate the image - im_frame = _normalize_mode(im_frame.copy()) - if frame_count == 0: - for k, v in im_frame.info.items(): - if k == "transparency": - continue - if isinstance(k, str): - im.encoderinfo.setdefault(k, v) - - encoderinfo = im.encoderinfo.copy() - if "transparency" in im_frame.info: - encoderinfo.setdefault("transparency", im_frame.info["transparency"]) - im_frame = _normalize_palette(im_frame, palette, encoderinfo) - if isinstance(duration, (list, tuple)): - encoderinfo["duration"] = duration[frame_count] - elif duration is None and "duration" in im_frame.info: - encoderinfo["duration"] = im_frame.info["duration"] - if isinstance(disposal, (list, tuple)): - encoderinfo["disposal"] = disposal[frame_count] - frame_count += 1 - - diff_frame = None - if im_frames and previous_im: - # delta frame - delta, bbox = _getbbox(previous_im, im_frame) - if not bbox: - # This frame is identical to the previous frame - if encoderinfo.get("duration"): - im_frames[-1].encoderinfo["duration"] += encoderinfo["duration"] - continue - if im_frames[-1].encoderinfo.get("disposal") == 2: - # To appear correctly in viewers using a convention, - # only consider transparency, and not background color - color = im.encoderinfo.get( - "transparency", im.info.get("transparency") - ) - if color is not None: - if background_im is None: - background = _get_background(im_frame, color) - background_im = Image.new("P", im_frame.size, background) - first_palette = im_frames[0].im.palette - assert first_palette is not None - background_im.putpalette(first_palette, first_palette.mode) - bbox = _getbbox(background_im, im_frame)[1] - else: - bbox = (0, 0) + im_frame.size - elif encoderinfo.get("optimize") and im_frame.mode != "1": - if "transparency" not in encoderinfo: - assert im_frame.palette is not None - try: - encoderinfo["transparency"] = ( - im_frame.palette._new_color_index(im_frame) - ) - except ValueError: - pass - if "transparency" in encoderinfo: - # When the delta is zero, fill the image with transparency - diff_frame = im_frame.copy() - fill = Image.new("P", delta.size, encoderinfo["transparency"]) - if delta.mode == "RGBA": - r, g, b, a = delta.split() - mask = ImageMath.lambda_eval( - lambda args: args["convert"]( - args["max"]( - args["max"]( - args["max"](args["r"], args["g"]), args["b"] - ), - args["a"], - ) - * 255, - "1", - ), - r=r, - g=g, - b=b, - a=a, - ) - else: - if delta.mode == "P": - # Convert to L without considering palette - delta_l = Image.new("L", delta.size) - delta_l.putdata(delta.getdata()) - delta = delta_l - mask = ImageMath.lambda_eval( - lambda args: args["convert"](args["im"] * 255, "1"), - im=delta, - ) - diff_frame.paste(fill, mask=ImageOps.invert(mask)) - else: - bbox = None - previous_im = im_frame - im_frames.append(_Frame(diff_frame or im_frame, bbox, encoderinfo)) - - if len(im_frames) == 1: - if "duration" in im.encoderinfo: - # Since multiple frames will not be written, use the combined duration - im.encoderinfo["duration"] = im_frames[0].encoderinfo["duration"] - return False - - for frame_data in im_frames: - im_frame = frame_data.im - if not frame_data.bbox: - # global header - for s in _get_global_header(im_frame, frame_data.encoderinfo): - fp.write(s) - offset = (0, 0) - else: - # compress difference - if not palette: - frame_data.encoderinfo["include_color_table"] = True - - if frame_data.bbox != (0, 0) + im_frame.size: - im_frame = im_frame.crop(frame_data.bbox) - offset = frame_data.bbox[:2] - _write_frame_data(fp, im_frame, offset, frame_data.encoderinfo) - return True - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - _save(im, fp, filename, save_all=True) - - -def _save( - im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False -) -> None: - # header - if "palette" in im.encoderinfo or "palette" in im.info: - palette = im.encoderinfo.get("palette", im.info.get("palette")) - else: - palette = None - im.encoderinfo.setdefault("optimize", True) - - if not save_all or not _write_multiple_frames(im, fp, palette): - _write_single_frame(im, fp, palette) - - fp.write(b";") # end of file - - if hasattr(fp, "flush"): - fp.flush() - - -def get_interlace(im: Image.Image) -> int: - interlace = im.encoderinfo.get("interlace", 1) - - # workaround for @PIL153 - if min(im.size) < 16: - interlace = 0 - - return interlace - - -def _write_local_header( - fp: IO[bytes], im: Image.Image, offset: tuple[int, int], flags: int -) -> None: - try: - transparency = im.encoderinfo["transparency"] - except KeyError: - transparency = None - - if "duration" in im.encoderinfo: - duration = int(im.encoderinfo["duration"] / 10) - else: - duration = 0 - - disposal = int(im.encoderinfo.get("disposal", 0)) - - if transparency is not None or duration != 0 or disposal: - packed_flag = 1 if transparency is not None else 0 - packed_flag |= disposal << 2 - - fp.write( - b"!" - + o8(249) # extension intro - + o8(4) # length - + o8(packed_flag) # packed fields - + o16(duration) # duration - + o8(transparency or 0) # transparency index - + o8(0) - ) - - include_color_table = im.encoderinfo.get("include_color_table") - if include_color_table: - palette_bytes = _get_palette_bytes(im) - color_table_size = _get_color_table_size(palette_bytes) - if color_table_size: - flags = flags | 128 # local color table flag - flags = flags | color_table_size - - fp.write( - b"," - + o16(offset[0]) # offset - + o16(offset[1]) - + o16(im.size[0]) # size - + o16(im.size[1]) - + o8(flags) # flags - ) - if include_color_table and color_table_size: - fp.write(_get_header_palette(palette_bytes)) - fp.write(o8(8)) # bits - - -def _save_netpbm(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - # Unused by default. - # To use, uncomment the register_save call at the end of the file. - # - # If you need real GIF compression and/or RGB quantization, you - # can use the external NETPBM/PBMPLUS utilities. See comments - # below for information on how to enable this. - tempfile = im._dump() - - try: - with open(filename, "wb") as f: - if im.mode != "RGB": - subprocess.check_call( - ["ppmtogif", tempfile], stdout=f, stderr=subprocess.DEVNULL - ) - else: - # Pipe ppmquant output into ppmtogif - # "ppmquant 256 %s | ppmtogif > %s" % (tempfile, filename) - quant_cmd = ["ppmquant", "256", tempfile] - togif_cmd = ["ppmtogif"] - quant_proc = subprocess.Popen( - quant_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL - ) - togif_proc = subprocess.Popen( - togif_cmd, - stdin=quant_proc.stdout, - stdout=f, - stderr=subprocess.DEVNULL, - ) - - # Allow ppmquant to receive SIGPIPE if ppmtogif exits - assert quant_proc.stdout is not None - quant_proc.stdout.close() - - retcode = quant_proc.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, quant_cmd) - - retcode = togif_proc.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, togif_cmd) - finally: - try: - os.unlink(tempfile) - except OSError: - pass - - -# Force optimization so that we can test performance against -# cases where it took lots of memory and time previously. -_FORCE_OPTIMIZE = False - - -def _get_optimize(im: Image.Image, info: dict[str, Any]) -> list[int] | None: - """ - Palette optimization is a potentially expensive operation. - - This function determines if the palette should be optimized using - some heuristics, then returns the list of palette entries in use. - - :param im: Image object - :param info: encoderinfo - :returns: list of indexes of palette entries in use, or None - """ - if im.mode in ("P", "L") and info and info.get("optimize"): - # Potentially expensive operation. - - # The palette saves 3 bytes per color not used, but palette - # lengths are restricted to 3*(2**N) bytes. Max saving would - # be 768 -> 6 bytes if we went all the way down to 2 colors. - # * If we're over 128 colors, we can't save any space. - # * If there aren't any holes, it's not worth collapsing. - # * If we have a 'large' image, the palette is in the noise. - - # create the new palette if not every color is used - optimise = _FORCE_OPTIMIZE or im.mode == "L" - if optimise or im.width * im.height < 512 * 512: - # check which colors are used - used_palette_colors = [] - for i, count in enumerate(im.histogram()): - if count: - used_palette_colors.append(i) - - if optimise or max(used_palette_colors) >= len(used_palette_colors): - return used_palette_colors - - assert im.palette is not None - num_palette_colors = len(im.palette.palette) // Image.getmodebands( - im.palette.mode - ) - current_palette_size = 1 << (num_palette_colors - 1).bit_length() - if ( - # check that the palette would become smaller when saved - len(used_palette_colors) <= current_palette_size // 2 - # check that the palette is not already the smallest possible size - and current_palette_size > 2 - ): - return used_palette_colors - return None - - -def _get_color_table_size(palette_bytes: bytes) -> int: - # calculate the palette size for the header - if not palette_bytes: - return 0 - elif len(palette_bytes) < 9: - return 1 - else: - return math.ceil(math.log(len(palette_bytes) // 3, 2)) - 1 - - -def _get_header_palette(palette_bytes: bytes) -> bytes: - """ - Returns the palette, null padded to the next power of 2 (*3) bytes - suitable for direct inclusion in the GIF header - - :param palette_bytes: Unpadded palette bytes, in RGBRGB form - :returns: Null padded palette - """ - color_table_size = _get_color_table_size(palette_bytes) - - # add the missing amount of bytes - # the palette has to be 2< 0: - palette_bytes += o8(0) * 3 * actual_target_size_diff - return palette_bytes - - -def _get_palette_bytes(im: Image.Image) -> bytes: - """ - Gets the palette for inclusion in the gif header - - :param im: Image object - :returns: Bytes, len<=768 suitable for inclusion in gif header - """ - if not im.palette: - return b"" - - palette = bytes(im.palette.palette) - if im.palette.mode == "RGBA": - palette = b"".join(palette[i * 4 : i * 4 + 3] for i in range(len(palette) // 3)) - return palette - - -def _get_background( - im: Image.Image, - info_background: int | tuple[int, int, int] | tuple[int, int, int, int] | None, -) -> int: - background = 0 - if info_background: - if isinstance(info_background, tuple): - # WebPImagePlugin stores an RGBA value in info["background"] - # So it must be converted to the same format as GifImagePlugin's - # info["background"] - a global color table index - assert im.palette is not None - try: - background = im.palette.getcolor(info_background, im) - except ValueError as e: - if str(e) not in ( - # If all 256 colors are in use, - # then there is no need for the background color - "cannot allocate more than 256 colors", - # Ignore non-opaque WebP background - "cannot add non-opaque RGBA color to RGB palette", - ): - raise - else: - background = info_background - return background - - -def _get_global_header(im: Image.Image, info: dict[str, Any]) -> list[bytes]: - """Return a list of strings representing a GIF header""" - - # Header Block - # https://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp - - version = b"87a" - if im.info.get("version") == b"89a" or ( - info - and ( - "transparency" in info - or info.get("loop") is not None - or info.get("duration") - or info.get("comment") - ) - ): - version = b"89a" - - background = _get_background(im, info.get("background")) - - palette_bytes = _get_palette_bytes(im) - color_table_size = _get_color_table_size(palette_bytes) - - header = [ - b"GIF" # signature - + version # version - + o16(im.size[0]) # canvas width - + o16(im.size[1]), # canvas height - # Logical Screen Descriptor - # size of global color table + global color table flag - o8(color_table_size + 128), # packed fields - # background + reserved/aspect - o8(background) + o8(0), - # Global Color Table - _get_header_palette(palette_bytes), - ] - if info.get("loop") is not None: - header.append( - b"!" - + o8(255) # extension intro - + o8(11) - + b"NETSCAPE2.0" - + o8(3) - + o8(1) - + o16(info["loop"]) # number of loops - + o8(0) - ) - if info.get("comment"): - comment_block = b"!" + o8(254) # extension intro - - comment = info["comment"] - if isinstance(comment, str): - comment = comment.encode() - for i in range(0, len(comment), 255): - subblock = comment[i : i + 255] - comment_block += o8(len(subblock)) + subblock - - comment_block += o8(0) - header.append(comment_block) - return header - - -def _write_frame_data( - fp: IO[bytes], - im_frame: Image.Image, - offset: tuple[int, int], - params: dict[str, Any], -) -> None: - try: - im_frame.encoderinfo = params - - # local image header - _write_local_header(fp, im_frame, offset, 0) - - ImageFile._save( - im_frame, - fp, - [ImageFile._Tile("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])], - ) - - fp.write(b"\0") # end of image data - finally: - del im_frame.encoderinfo - - -# -------------------------------------------------------------------- -# Legacy GIF utilities - - -def getheader( - im: Image.Image, palette: _Palette | None = None, info: dict[str, Any] | None = None -) -> tuple[list[bytes], list[int] | None]: - """ - Legacy Method to get Gif data from image. - - Warning:: May modify image data. - - :param im: Image object - :param palette: bytes object containing the source palette, or .... - :param info: encoderinfo - :returns: tuple of(list of header items, optimized palette) - - """ - if info is None: - info = {} - - used_palette_colors = _get_optimize(im, info) - - if "background" not in info and "background" in im.info: - info["background"] = im.info["background"] - - im_mod = _normalize_palette(im, palette, info) - im.palette = im_mod.palette - im.im = im_mod.im - header = _get_global_header(im, info) - - return header, used_palette_colors - - -def getdata( - im: Image.Image, offset: tuple[int, int] = (0, 0), **params: Any -) -> list[bytes]: - """ - Legacy Method - - Return a list of strings representing this image. - The first string is a local image header, the rest contains - encoded image data. - - To specify duration, add the time in milliseconds, - e.g. ``getdata(im_frame, duration=1000)`` - - :param im: Image object - :param offset: Tuple of (x, y) pixels. Defaults to (0, 0) - :param \\**params: e.g. duration or other encoder info parameters - :returns: List of bytes containing GIF encoded frame data - - """ - from io import BytesIO - - class Collector(BytesIO): - data = [] - - def write(self, data: Buffer) -> int: - self.data.append(data) - return len(data) - - im.load() # make sure raster data is available - - fp = Collector() - - _write_frame_data(fp, im, offset, params) - - return fp.data - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(GifImageFile.format, GifImageFile, _accept) -Image.register_save(GifImageFile.format, _save) -Image.register_save_all(GifImageFile.format, _save_all) -Image.register_extension(GifImageFile.format, ".gif") -Image.register_mime(GifImageFile.format, "image/gif") - -# -# Uncomment the following line if you wish to use NETPBM/PBMPLUS -# instead of the built-in "uncompressed" GIF encoder - -# Image.register_save(GifImageFile.format, _save_netpbm) diff --git a/myenv/lib/python3.12/site-packages/PIL/GimpGradientFile.py b/myenv/lib/python3.12/site-packages/PIL/GimpGradientFile.py deleted file mode 100644 index ec62f8e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GimpGradientFile.py +++ /dev/null @@ -1,149 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read (and render) GIMP gradient files -# -# History: -# 97-08-23 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - -""" -Stuff to translate curve segments to palette values (derived from -the corresponding code in GIMP, written by Federico Mena Quintero. -See the GIMP distribution for more information.) -""" -from __future__ import annotations - -from math import log, pi, sin, sqrt -from typing import IO, Callable - -from ._binary import o8 - -EPSILON = 1e-10 -"""""" # Enable auto-doc for data member - - -def linear(middle: float, pos: float) -> float: - if pos <= middle: - if middle < EPSILON: - return 0.0 - else: - return 0.5 * pos / middle - else: - pos = pos - middle - middle = 1.0 - middle - if middle < EPSILON: - return 1.0 - else: - return 0.5 + 0.5 * pos / middle - - -def curved(middle: float, pos: float) -> float: - return pos ** (log(0.5) / log(max(middle, EPSILON))) - - -def sine(middle: float, pos: float) -> float: - return (sin((-pi / 2.0) + pi * linear(middle, pos)) + 1.0) / 2.0 - - -def sphere_increasing(middle: float, pos: float) -> float: - return sqrt(1.0 - (linear(middle, pos) - 1.0) ** 2) - - -def sphere_decreasing(middle: float, pos: float) -> float: - return 1.0 - sqrt(1.0 - linear(middle, pos) ** 2) - - -SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] -"""""" # Enable auto-doc for data member - - -class GradientFile: - gradient: ( - list[ - tuple[ - float, - float, - float, - list[float], - list[float], - Callable[[float, float], float], - ] - ] - | None - ) = None - - def getpalette(self, entries: int = 256) -> tuple[bytes, str]: - assert self.gradient is not None - palette = [] - - ix = 0 - x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] - - for i in range(entries): - x = i / (entries - 1) - - while x1 < x: - ix += 1 - x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] - - w = x1 - x0 - - if w < EPSILON: - scale = segment(0.5, 0.5) - else: - scale = segment((xm - x0) / w, (x - x0) / w) - - # expand to RGBA - r = o8(int(255 * ((rgb1[0] - rgb0[0]) * scale + rgb0[0]) + 0.5)) - g = o8(int(255 * ((rgb1[1] - rgb0[1]) * scale + rgb0[1]) + 0.5)) - b = o8(int(255 * ((rgb1[2] - rgb0[2]) * scale + rgb0[2]) + 0.5)) - a = o8(int(255 * ((rgb1[3] - rgb0[3]) * scale + rgb0[3]) + 0.5)) - - # add to palette - palette.append(r + g + b + a) - - return b"".join(palette), "RGBA" - - -class GimpGradientFile(GradientFile): - """File handler for GIMP's gradient format.""" - - def __init__(self, fp: IO[bytes]) -> None: - if not fp.readline().startswith(b"GIMP Gradient"): - msg = "not a GIMP gradient file" - raise SyntaxError(msg) - - line = fp.readline() - - # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do - if line.startswith(b"Name: "): - line = fp.readline().strip() - - count = int(line) - - self.gradient = [] - - for i in range(count): - s = fp.readline().split() - w = [float(x) for x in s[:11]] - - x0, x1 = w[0], w[2] - xm = w[1] - rgb0 = w[3:7] - rgb1 = w[7:11] - - segment = SEGMENTS[int(s[11])] - cspace = int(s[12]) - - if cspace != 0: - msg = "cannot handle HSV colour space" - raise OSError(msg) - - self.gradient.append((x0, x1, xm, rgb0, rgb1, segment)) diff --git a/myenv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py b/myenv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py deleted file mode 100644 index 379ffd7..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read GIMP palette files -# -# History: -# 1997-08-23 fl Created -# 2004-09-07 fl Support GIMP 2.0 palette files. -# -# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. -# Copyright (c) Fredrik Lundh 1997-2004. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import re -from io import BytesIO -from typing import IO - - -class GimpPaletteFile: - """File handler for GIMP's palette format.""" - - rawmode = "RGB" - - def _read(self, fp: IO[bytes], limit: bool = True) -> None: - if not fp.readline().startswith(b"GIMP Palette"): - msg = "not a GIMP palette file" - raise SyntaxError(msg) - - palette: list[int] = [] - i = 0 - while True: - if limit and i == 256 + 3: - break - - i += 1 - s = fp.readline() - if not s: - break - - # skip fields and comment lines - if re.match(rb"\w+:|#", s): - continue - if limit and len(s) > 100: - msg = "bad palette file" - raise SyntaxError(msg) - - v = s.split(maxsplit=3) - if len(v) < 3: - msg = "bad palette entry" - raise ValueError(msg) - - palette += (int(v[i]) for i in range(3)) - if limit and len(palette) == 768: - break - - self.palette = bytes(palette) - - def __init__(self, fp: IO[bytes]) -> None: - self._read(fp) - - @classmethod - def frombytes(cls, data: bytes) -> GimpPaletteFile: - self = cls.__new__(cls) - self._read(BytesIO(data), False) - return self - - def getpalette(self) -> tuple[bytes, str]: - return self.palette, self.rawmode diff --git a/myenv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py deleted file mode 100644 index 439fc5a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# GRIB stub adapter -# -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -from typing import IO - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler: ImageFile.StubHandler | None) -> None: - """ - Install application-specific GRIB image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"GRIB") and prefix[7] == 1 - - -class GribStubImageFile(ImageFile.StubImageFile): - format = "GRIB" - format_description = "GRIB" - - def _open(self) -> None: - if not _accept(self.fp.read(8)): - msg = "Not a GRIB file" - raise SyntaxError(msg) - - self.fp.seek(-8, os.SEEK_CUR) - - # make something up - self._mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self) -> ImageFile.StubHandler | None: - return _handler - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if _handler is None or not hasattr(_handler, "save"): - msg = "GRIB save handler not installed" - raise OSError(msg) - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept) -Image.register_save(GribStubImageFile.format, _save) - -Image.register_extension(GribStubImageFile.format, ".grib") diff --git a/myenv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py deleted file mode 100644 index 76e640f..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# HDF5 stub adapter -# -# Copyright (c) 2000-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -from typing import IO - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler: ImageFile.StubHandler | None) -> None: - """ - Install application-specific HDF5 image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"\x89HDF\r\n\x1a\n") - - -class HDF5StubImageFile(ImageFile.StubImageFile): - format = "HDF5" - format_description = "HDF5" - - def _open(self) -> None: - if not _accept(self.fp.read(8)): - msg = "Not an HDF file" - raise SyntaxError(msg) - - self.fp.seek(-8, os.SEEK_CUR) - - # make something up - self._mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self) -> ImageFile.StubHandler | None: - return _handler - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if _handler is None or not hasattr(_handler, "save"): - msg = "HDF5 save handler not installed" - raise OSError(msg) - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(HDF5StubImageFile.format, HDF5StubImageFile, _accept) -Image.register_save(HDF5StubImageFile.format, _save) - -Image.register_extensions(HDF5StubImageFile.format, [".h5", ".hdf"]) diff --git a/myenv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py deleted file mode 100644 index 5a88429..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py +++ /dev/null @@ -1,411 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# macOS icns file decoder, based on icns.py by Bob Ippolito. -# -# history: -# 2004-10-09 fl Turned into a PIL plugin; removed 2.3 dependencies. -# 2020-04-04 Allow saving on all operating systems. -# -# Copyright (c) 2004 by Bob Ippolito. -# Copyright (c) 2004 by Secret Labs. -# Copyright (c) 2004 by Fredrik Lundh. -# Copyright (c) 2014 by Alastair Houghton. -# Copyright (c) 2020 by Pan Jing. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import os -import struct -import sys -from typing import IO - -from . import Image, ImageFile, PngImagePlugin, features -from ._deprecate import deprecate - -enable_jpeg2k = features.check_codec("jpg_2000") -if enable_jpeg2k: - from . import Jpeg2KImagePlugin - -MAGIC = b"icns" -HEADERSIZE = 8 - - -def nextheader(fobj: IO[bytes]) -> tuple[bytes, int]: - return struct.unpack(">4sI", fobj.read(HEADERSIZE)) - - -def read_32t( - fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] -) -> dict[str, Image.Image]: - # The 128x128 icon seems to have an extra header for some reason. - (start, length) = start_length - fobj.seek(start) - sig = fobj.read(4) - if sig != b"\x00\x00\x00\x00": - msg = "Unknown signature, expecting 0x00000000" - raise SyntaxError(msg) - return read_32(fobj, (start + 4, length - 4), size) - - -def read_32( - fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] -) -> dict[str, Image.Image]: - """ - Read a 32bit RGB icon resource. Seems to be either uncompressed or - an RLE packbits-like scheme. - """ - (start, length) = start_length - fobj.seek(start) - pixel_size = (size[0] * size[2], size[1] * size[2]) - sizesq = pixel_size[0] * pixel_size[1] - if length == sizesq * 3: - # uncompressed ("RGBRGBGB") - indata = fobj.read(length) - im = Image.frombuffer("RGB", pixel_size, indata, "raw", "RGB", 0, 1) - else: - # decode image - im = Image.new("RGB", pixel_size, None) - for band_ix in range(3): - data = [] - bytesleft = sizesq - while bytesleft > 0: - byte = fobj.read(1) - if not byte: - break - byte_int = byte[0] - if byte_int & 0x80: - blocksize = byte_int - 125 - byte = fobj.read(1) - for i in range(blocksize): - data.append(byte) - else: - blocksize = byte_int + 1 - data.append(fobj.read(blocksize)) - bytesleft -= blocksize - if bytesleft <= 0: - break - if bytesleft != 0: - msg = f"Error reading channel [{repr(bytesleft)} left]" - raise SyntaxError(msg) - band = Image.frombuffer("L", pixel_size, b"".join(data), "raw", "L", 0, 1) - im.im.putband(band.im, band_ix) - return {"RGB": im} - - -def read_mk( - fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] -) -> dict[str, Image.Image]: - # Alpha masks seem to be uncompressed - start = start_length[0] - fobj.seek(start) - pixel_size = (size[0] * size[2], size[1] * size[2]) - sizesq = pixel_size[0] * pixel_size[1] - band = Image.frombuffer("L", pixel_size, fobj.read(sizesq), "raw", "L", 0, 1) - return {"A": band} - - -def read_png_or_jpeg2000( - fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] -) -> dict[str, Image.Image]: - (start, length) = start_length - fobj.seek(start) - sig = fobj.read(12) - - im: Image.Image - if sig.startswith(b"\x89PNG\x0d\x0a\x1a\x0a"): - fobj.seek(start) - im = PngImagePlugin.PngImageFile(fobj) - Image._decompression_bomb_check(im.size) - return {"RGBA": im} - elif ( - sig.startswith((b"\xff\x4f\xff\x51", b"\x0d\x0a\x87\x0a")) - or sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" - ): - if not enable_jpeg2k: - msg = ( - "Unsupported icon subimage format (rebuild PIL " - "with JPEG 2000 support to fix this)" - ) - raise ValueError(msg) - # j2k, jpc or j2c - fobj.seek(start) - jp2kstream = fobj.read(length) - f = io.BytesIO(jp2kstream) - im = Jpeg2KImagePlugin.Jpeg2KImageFile(f) - Image._decompression_bomb_check(im.size) - if im.mode != "RGBA": - im = im.convert("RGBA") - return {"RGBA": im} - else: - msg = "Unsupported icon subimage format" - raise ValueError(msg) - - -class IcnsFile: - SIZES = { - (512, 512, 2): [(b"ic10", read_png_or_jpeg2000)], - (512, 512, 1): [(b"ic09", read_png_or_jpeg2000)], - (256, 256, 2): [(b"ic14", read_png_or_jpeg2000)], - (256, 256, 1): [(b"ic08", read_png_or_jpeg2000)], - (128, 128, 2): [(b"ic13", read_png_or_jpeg2000)], - (128, 128, 1): [ - (b"ic07", read_png_or_jpeg2000), - (b"it32", read_32t), - (b"t8mk", read_mk), - ], - (64, 64, 1): [(b"icp6", read_png_or_jpeg2000)], - (32, 32, 2): [(b"ic12", read_png_or_jpeg2000)], - (48, 48, 1): [(b"ih32", read_32), (b"h8mk", read_mk)], - (32, 32, 1): [ - (b"icp5", read_png_or_jpeg2000), - (b"il32", read_32), - (b"l8mk", read_mk), - ], - (16, 16, 2): [(b"ic11", read_png_or_jpeg2000)], - (16, 16, 1): [ - (b"icp4", read_png_or_jpeg2000), - (b"is32", read_32), - (b"s8mk", read_mk), - ], - } - - def __init__(self, fobj: IO[bytes]) -> None: - """ - fobj is a file-like object as an icns resource - """ - # signature : (start, length) - self.dct = {} - self.fobj = fobj - sig, filesize = nextheader(fobj) - if not _accept(sig): - msg = "not an icns file" - raise SyntaxError(msg) - i = HEADERSIZE - while i < filesize: - sig, blocksize = nextheader(fobj) - if blocksize <= 0: - msg = "invalid block header" - raise SyntaxError(msg) - i += HEADERSIZE - blocksize -= HEADERSIZE - self.dct[sig] = (i, blocksize) - fobj.seek(blocksize, io.SEEK_CUR) - i += blocksize - - def itersizes(self) -> list[tuple[int, int, int]]: - sizes = [] - for size, fmts in self.SIZES.items(): - for fmt, reader in fmts: - if fmt in self.dct: - sizes.append(size) - break - return sizes - - def bestsize(self) -> tuple[int, int, int]: - sizes = self.itersizes() - if not sizes: - msg = "No 32bit icon resources found" - raise SyntaxError(msg) - return max(sizes) - - def dataforsize(self, size: tuple[int, int, int]) -> dict[str, Image.Image]: - """ - Get an icon resource as {channel: array}. Note that - the arrays are bottom-up like windows bitmaps and will likely - need to be flipped or transposed in some way. - """ - dct = {} - for code, reader in self.SIZES[size]: - desc = self.dct.get(code) - if desc is not None: - dct.update(reader(self.fobj, desc, size)) - return dct - - def getimage( - self, size: tuple[int, int] | tuple[int, int, int] | None = None - ) -> Image.Image: - if size is None: - size = self.bestsize() - elif len(size) == 2: - size = (size[0], size[1], 1) - channels = self.dataforsize(size) - - im = channels.get("RGBA") - if im: - return im - - im = channels["RGB"].copy() - try: - im.putalpha(channels["A"]) - except KeyError: - pass - return im - - -## -# Image plugin for Mac OS icons. - - -class IcnsImageFile(ImageFile.ImageFile): - """ - PIL image support for Mac OS .icns files. - Chooses the best resolution, but will possibly load - a different size image if you mutate the size attribute - before calling 'load'. - - The info dictionary has a key 'sizes' that is a list - of sizes that the icns file has. - """ - - format = "ICNS" - format_description = "Mac OS icns resource" - - def _open(self) -> None: - self.icns = IcnsFile(self.fp) - self._mode = "RGBA" - self.info["sizes"] = self.icns.itersizes() - self.best_size = self.icns.bestsize() - self.size = ( - self.best_size[0] * self.best_size[2], - self.best_size[1] * self.best_size[2], - ) - - @property # type: ignore[override] - def size(self) -> tuple[int, int] | tuple[int, int, int]: - return self._size - - @size.setter - def size(self, value: tuple[int, int] | tuple[int, int, int]) -> None: - if len(value) == 3: - deprecate("Setting size to (width, height, scale)", 12, "load(scale)") - if value in self.info["sizes"]: - self._size = value # type: ignore[assignment] - return - else: - # Check that a matching size exists, - # or that there is a scale that would create a size that matches - for size in self.info["sizes"]: - simple_size = size[0] * size[2], size[1] * size[2] - scale = simple_size[0] // value[0] - if simple_size[1] / value[1] == scale: - self._size = value - return - msg = "This is not one of the allowed sizes of this image" - raise ValueError(msg) - - def load(self, scale: int | None = None) -> Image.core.PixelAccess | None: - if scale is not None or len(self.size) == 3: - if scale is None and len(self.size) == 3: - scale = self.size[2] - assert scale is not None - width, height = self.size[:2] - self.size = width * scale, height * scale - self.best_size = width, height, scale - - px = Image.Image.load(self) - if self._im is not None and self.im.size == self.size: - # Already loaded - return px - self.load_prepare() - # This is likely NOT the best way to do it, but whatever. - im = self.icns.getimage(self.best_size) - - # If this is a PNG or JPEG 2000, it won't be loaded yet - px = im.load() - - self.im = im.im - self._mode = im.mode - self.size = im.size - - return px - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - """ - Saves the image as a series of PNG files, - that are then combined into a .icns file. - """ - if hasattr(fp, "flush"): - fp.flush() - - sizes = { - b"ic07": 128, - b"ic08": 256, - b"ic09": 512, - b"ic10": 1024, - b"ic11": 32, - b"ic12": 64, - b"ic13": 256, - b"ic14": 512, - } - provided_images = {im.width: im for im in im.encoderinfo.get("append_images", [])} - size_streams = {} - for size in set(sizes.values()): - image = ( - provided_images[size] - if size in provided_images - else im.resize((size, size)) - ) - - temp = io.BytesIO() - image.save(temp, "png") - size_streams[size] = temp.getvalue() - - entries = [] - for type, size in sizes.items(): - stream = size_streams[size] - entries.append((type, HEADERSIZE + len(stream), stream)) - - # Header - fp.write(MAGIC) - file_length = HEADERSIZE # Header - file_length += HEADERSIZE + 8 * len(entries) # TOC - file_length += sum(entry[1] for entry in entries) - fp.write(struct.pack(">i", file_length)) - - # TOC - fp.write(b"TOC ") - fp.write(struct.pack(">i", HEADERSIZE + len(entries) * HEADERSIZE)) - for entry in entries: - fp.write(entry[0]) - fp.write(struct.pack(">i", entry[1])) - - # Data - for entry in entries: - fp.write(entry[0]) - fp.write(struct.pack(">i", entry[1])) - fp.write(entry[2]) - - if hasattr(fp, "flush"): - fp.flush() - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(MAGIC) - - -Image.register_open(IcnsImageFile.format, IcnsImageFile, _accept) -Image.register_extension(IcnsImageFile.format, ".icns") - -Image.register_save(IcnsImageFile.format, _save) -Image.register_mime(IcnsImageFile.format, "image/icns") - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("Syntax: python3 IcnsImagePlugin.py [file]") - sys.exit() - - with open(sys.argv[1], "rb") as fp: - imf = IcnsImageFile(fp) - for size in imf.info["sizes"]: - width, height, scale = imf.size = size - imf.save(f"out-{width}-{height}-{scale}.png") - with Image.open(sys.argv[1]) as im: - im.save("out.png") - if sys.platform == "windows": - os.startfile("out.png") diff --git a/myenv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py deleted file mode 100644 index bd35ac8..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py +++ /dev/null @@ -1,381 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Windows Icon support for PIL -# -# History: -# 96-05-27 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# - -# This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis -# . -# https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki -# -# Icon format references: -# * https://en.wikipedia.org/wiki/ICO_(file_format) -# * https://msdn.microsoft.com/en-us/library/ms997538.aspx -from __future__ import annotations - -import warnings -from io import BytesIO -from math import ceil, log -from typing import IO, NamedTuple - -from . import BmpImagePlugin, Image, ImageFile, PngImagePlugin -from ._binary import i16le as i16 -from ._binary import i32le as i32 -from ._binary import o8 -from ._binary import o16le as o16 -from ._binary import o32le as o32 - -# -# -------------------------------------------------------------------- - -_MAGIC = b"\0\0\1\0" - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - fp.write(_MAGIC) # (2+2) - bmp = im.encoderinfo.get("bitmap_format") == "bmp" - sizes = im.encoderinfo.get( - "sizes", - [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)], - ) - frames = [] - provided_ims = [im] + im.encoderinfo.get("append_images", []) - width, height = im.size - for size in sorted(set(sizes)): - if size[0] > width or size[1] > height or size[0] > 256 or size[1] > 256: - continue - - for provided_im in provided_ims: - if provided_im.size != size: - continue - frames.append(provided_im) - if bmp: - bits = BmpImagePlugin.SAVE[provided_im.mode][1] - bits_used = [bits] - for other_im in provided_ims: - if other_im.size != size: - continue - bits = BmpImagePlugin.SAVE[other_im.mode][1] - if bits not in bits_used: - # Another image has been supplied for this size - # with a different bit depth - frames.append(other_im) - bits_used.append(bits) - break - else: - # TODO: invent a more convenient method for proportional scalings - frame = provided_im.copy() - frame.thumbnail(size, Image.Resampling.LANCZOS, reducing_gap=None) - frames.append(frame) - fp.write(o16(len(frames))) # idCount(2) - offset = fp.tell() + len(frames) * 16 - for frame in frames: - width, height = frame.size - # 0 means 256 - fp.write(o8(width if width < 256 else 0)) # bWidth(1) - fp.write(o8(height if height < 256 else 0)) # bHeight(1) - - bits, colors = BmpImagePlugin.SAVE[frame.mode][1:] if bmp else (32, 0) - fp.write(o8(colors)) # bColorCount(1) - fp.write(b"\0") # bReserved(1) - fp.write(b"\0\0") # wPlanes(2) - fp.write(o16(bits)) # wBitCount(2) - - image_io = BytesIO() - if bmp: - frame.save(image_io, "dib") - - if bits != 32: - and_mask = Image.new("1", size) - ImageFile._save( - and_mask, - image_io, - [ImageFile._Tile("raw", (0, 0) + size, 0, ("1", 0, -1))], - ) - else: - frame.save(image_io, "png") - image_io.seek(0) - image_bytes = image_io.read() - if bmp: - image_bytes = image_bytes[:8] + o32(height * 2) + image_bytes[12:] - bytes_len = len(image_bytes) - fp.write(o32(bytes_len)) # dwBytesInRes(4) - fp.write(o32(offset)) # dwImageOffset(4) - current = fp.tell() - fp.seek(offset) - fp.write(image_bytes) - offset = offset + bytes_len - fp.seek(current) - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(_MAGIC) - - -class IconHeader(NamedTuple): - width: int - height: int - nb_color: int - reserved: int - planes: int - bpp: int - size: int - offset: int - dim: tuple[int, int] - square: int - color_depth: int - - -class IcoFile: - def __init__(self, buf: IO[bytes]) -> None: - """ - Parse image from file-like object containing ico file data - """ - - # check magic - s = buf.read(6) - if not _accept(s): - msg = "not an ICO file" - raise SyntaxError(msg) - - self.buf = buf - self.entry = [] - - # Number of items in file - self.nb_items = i16(s, 4) - - # Get headers for each item - for i in range(self.nb_items): - s = buf.read(16) - - # See Wikipedia - width = s[0] or 256 - height = s[1] or 256 - - # No. of colors in image (0 if >=8bpp) - nb_color = s[2] - bpp = i16(s, 6) - icon_header = IconHeader( - width=width, - height=height, - nb_color=nb_color, - reserved=s[3], - planes=i16(s, 4), - bpp=i16(s, 6), - size=i32(s, 8), - offset=i32(s, 12), - dim=(width, height), - square=width * height, - # See Wikipedia notes about color depth. - # We need this just to differ images with equal sizes - color_depth=bpp or (nb_color != 0 and ceil(log(nb_color, 2))) or 256, - ) - - self.entry.append(icon_header) - - self.entry = sorted(self.entry, key=lambda x: x.color_depth) - # ICO images are usually squares - self.entry = sorted(self.entry, key=lambda x: x.square, reverse=True) - - def sizes(self) -> set[tuple[int, int]]: - """ - Get a set of all available icon sizes and color depths. - """ - return {(h.width, h.height) for h in self.entry} - - def getentryindex(self, size: tuple[int, int], bpp: int | bool = False) -> int: - for i, h in enumerate(self.entry): - if size == h.dim and (bpp is False or bpp == h.color_depth): - return i - return 0 - - def getimage(self, size: tuple[int, int], bpp: int | bool = False) -> Image.Image: - """ - Get an image from the icon - """ - return self.frame(self.getentryindex(size, bpp)) - - def frame(self, idx: int) -> Image.Image: - """ - Get an image from frame idx - """ - - header = self.entry[idx] - - self.buf.seek(header.offset) - data = self.buf.read(8) - self.buf.seek(header.offset) - - im: Image.Image - if data[:8] == PngImagePlugin._MAGIC: - # png frame - im = PngImagePlugin.PngImageFile(self.buf) - Image._decompression_bomb_check(im.size) - else: - # XOR + AND mask bmp frame - im = BmpImagePlugin.DibImageFile(self.buf) - Image._decompression_bomb_check(im.size) - - # change tile dimension to only encompass XOR image - im._size = (im.size[0], int(im.size[1] / 2)) - d, e, o, a = im.tile[0] - im.tile[0] = ImageFile._Tile(d, (0, 0) + im.size, o, a) - - # figure out where AND mask image starts - if header.bpp == 32: - # 32-bit color depth icon image allows semitransparent areas - # PIL's DIB format ignores transparency bits, recover them. - # The DIB is packed in BGRX byte order where X is the alpha - # channel. - - # Back up to start of bmp data - self.buf.seek(o) - # extract every 4th byte (eg. 3,7,11,15,...) - alpha_bytes = self.buf.read(im.size[0] * im.size[1] * 4)[3::4] - - # convert to an 8bpp grayscale image - try: - mask = Image.frombuffer( - "L", # 8bpp - im.size, # (w, h) - alpha_bytes, # source chars - "raw", # raw decoder - ("L", 0, -1), # 8bpp inverted, unpadded, reversed - ) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - mask = None - else: - raise - else: - # get AND image from end of bitmap - w = im.size[0] - if (w % 32) > 0: - # bitmap row data is aligned to word boundaries - w += 32 - (im.size[0] % 32) - - # the total mask data is - # padded row size * height / bits per char - - total_bytes = int((w * im.size[1]) / 8) - and_mask_offset = header.offset + header.size - total_bytes - - self.buf.seek(and_mask_offset) - mask_data = self.buf.read(total_bytes) - - # convert raw data to image - try: - mask = Image.frombuffer( - "1", # 1 bpp - im.size, # (w, h) - mask_data, # source chars - "raw", # raw decoder - ("1;I", int(w / 8), -1), # 1bpp inverted, padded, reversed - ) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - mask = None - else: - raise - - # now we have two images, im is XOR image and mask is AND image - - # apply mask image as alpha channel - if mask: - im = im.convert("RGBA") - im.putalpha(mask) - - return im - - -## -# Image plugin for Windows Icon files. - - -class IcoImageFile(ImageFile.ImageFile): - """ - PIL read-only image support for Microsoft Windows .ico files. - - By default the largest resolution image in the file will be loaded. This - can be changed by altering the 'size' attribute before calling 'load'. - - The info dictionary has a key 'sizes' that is a list of the sizes available - in the icon file. - - Handles classic, XP and Vista icon formats. - - When saving, PNG compression is used. Support for this was only added in - Windows Vista. If you are unable to view the icon in Windows, convert the - image to "RGBA" mode before saving. - - This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis - . - https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki - """ - - format = "ICO" - format_description = "Windows Icon" - - def _open(self) -> None: - self.ico = IcoFile(self.fp) - self.info["sizes"] = self.ico.sizes() - self.size = self.ico.entry[0].dim - self.load() - - @property - def size(self) -> tuple[int, int]: - return self._size - - @size.setter - def size(self, value: tuple[int, int]) -> None: - if value not in self.info["sizes"]: - msg = "This is not one of the allowed sizes of this image" - raise ValueError(msg) - self._size = value - - def load(self) -> Image.core.PixelAccess | None: - if self._im is not None and self.im.size == self.size: - # Already loaded - return Image.Image.load(self) - im = self.ico.getimage(self.size) - # if tile is PNG, it won't really be loaded yet - im.load() - self.im = im.im - self._mode = im.mode - if im.palette: - self.palette = im.palette - if im.size != self.size: - warnings.warn("Image was not the expected size") - - index = self.ico.getentryindex(self.size) - sizes = list(self.info["sizes"]) - sizes[index] = im.size - self.info["sizes"] = set(sizes) - - self.size = im.size - return Image.Image.load(self) - - def load_seek(self, pos: int) -> None: - # Flag the ImageFile.Parser so that it - # just does all the decode at the end. - pass - - -# -# -------------------------------------------------------------------- - - -Image.register_open(IcoImageFile.format, IcoImageFile, _accept) -Image.register_save(IcoImageFile.format, _save) -Image.register_extension(IcoImageFile.format, ".ico") - -Image.register_mime(IcoImageFile.format, "image/x-icon") diff --git a/myenv/lib/python3.12/site-packages/PIL/ImImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/ImImagePlugin.py deleted file mode 100644 index 71b9996..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImImagePlugin.py +++ /dev/null @@ -1,389 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IFUNC IM file handling for PIL -# -# history: -# 1995-09-01 fl Created. -# 1997-01-03 fl Save palette images -# 1997-01-08 fl Added sequence support -# 1997-01-23 fl Added P and RGB save support -# 1997-05-31 fl Read floating point images -# 1997-06-22 fl Save floating point images -# 1997-08-27 fl Read and save 1-bit images -# 1998-06-25 fl Added support for RGB+LUT images -# 1998-07-02 fl Added support for YCC images -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 1998-12-29 fl Added I;16 support -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) -# 2003-09-26 fl Added LA/PA support -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2001 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -import re -from typing import IO, Any - -from . import Image, ImageFile, ImagePalette -from ._util import DeferredError - -# -------------------------------------------------------------------- -# Standard tags - -COMMENT = "Comment" -DATE = "Date" -EQUIPMENT = "Digitalization equipment" -FRAMES = "File size (no of images)" -LUT = "Lut" -NAME = "Name" -SCALE = "Scale (x,y)" -SIZE = "Image size (x*y)" -MODE = "Image type" - -TAGS = { - COMMENT: 0, - DATE: 0, - EQUIPMENT: 0, - FRAMES: 0, - LUT: 0, - NAME: 0, - SCALE: 0, - SIZE: 0, - MODE: 0, -} - -OPEN = { - # ifunc93/p3cfunc formats - "0 1 image": ("1", "1"), - "L 1 image": ("1", "1"), - "Greyscale image": ("L", "L"), - "Grayscale image": ("L", "L"), - "RGB image": ("RGB", "RGB;L"), - "RLB image": ("RGB", "RLB"), - "RYB image": ("RGB", "RLB"), - "B1 image": ("1", "1"), - "B2 image": ("P", "P;2"), - "B4 image": ("P", "P;4"), - "X 24 image": ("RGB", "RGB"), - "L 32 S image": ("I", "I;32"), - "L 32 F image": ("F", "F;32"), - # old p3cfunc formats - "RGB3 image": ("RGB", "RGB;T"), - "RYB3 image": ("RGB", "RYB;T"), - # extensions - "LA image": ("LA", "LA;L"), - "PA image": ("LA", "PA;L"), - "RGBA image": ("RGBA", "RGBA;L"), - "RGBX image": ("RGB", "RGBX;L"), - "CMYK image": ("CMYK", "CMYK;L"), - "YCC image": ("YCbCr", "YCbCr;L"), -} - -# ifunc95 extensions -for i in ["8", "8S", "16", "16S", "32", "32F"]: - OPEN[f"L {i} image"] = ("F", f"F;{i}") - OPEN[f"L*{i} image"] = ("F", f"F;{i}") -for i in ["16", "16L", "16B"]: - OPEN[f"L {i} image"] = (f"I;{i}", f"I;{i}") - OPEN[f"L*{i} image"] = (f"I;{i}", f"I;{i}") -for i in ["32S"]: - OPEN[f"L {i} image"] = ("I", f"I;{i}") - OPEN[f"L*{i} image"] = ("I", f"I;{i}") -for j in range(2, 33): - OPEN[f"L*{j} image"] = ("F", f"F;{j}") - - -# -------------------------------------------------------------------- -# Read IM directory - -split = re.compile(rb"^([A-Za-z][^:]*):[ \t]*(.*)[ \t]*$") - - -def number(s: Any) -> float: - try: - return int(s) - except ValueError: - return float(s) - - -## -# Image plugin for the IFUNC IM file format. - - -class ImImageFile(ImageFile.ImageFile): - format = "IM" - format_description = "IFUNC Image Memory" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - # Quick rejection: if there's not an LF among the first - # 100 bytes, this is (probably) not a text header. - - if b"\n" not in self.fp.read(100): - msg = "not an IM file" - raise SyntaxError(msg) - self.fp.seek(0) - - n = 0 - - # Default values - self.info[MODE] = "L" - self.info[SIZE] = (512, 512) - self.info[FRAMES] = 1 - - self.rawmode = "L" - - while True: - s = self.fp.read(1) - - # Some versions of IFUNC uses \n\r instead of \r\n... - if s == b"\r": - continue - - if not s or s == b"\0" or s == b"\x1a": - break - - # FIXME: this may read whole file if not a text file - s = s + self.fp.readline() - - if len(s) > 100: - msg = "not an IM file" - raise SyntaxError(msg) - - if s.endswith(b"\r\n"): - s = s[:-2] - elif s.endswith(b"\n"): - s = s[:-1] - - try: - m = split.match(s) - except re.error as e: - msg = "not an IM file" - raise SyntaxError(msg) from e - - if m: - k, v = m.group(1, 2) - - # Don't know if this is the correct encoding, - # but a decent guess (I guess) - k = k.decode("latin-1", "replace") - v = v.decode("latin-1", "replace") - - # Convert value as appropriate - if k in [FRAMES, SCALE, SIZE]: - v = v.replace("*", ",") - v = tuple(map(number, v.split(","))) - if len(v) == 1: - v = v[0] - elif k == MODE and v in OPEN: - v, self.rawmode = OPEN[v] - - # Add to dictionary. Note that COMMENT tags are - # combined into a list of strings. - if k == COMMENT: - if k in self.info: - self.info[k].append(v) - else: - self.info[k] = [v] - else: - self.info[k] = v - - if k in TAGS: - n += 1 - - else: - msg = f"Syntax error in IM header: {s.decode('ascii', 'replace')}" - raise SyntaxError(msg) - - if not n: - msg = "Not an IM file" - raise SyntaxError(msg) - - # Basic attributes - self._size = self.info[SIZE] - self._mode = self.info[MODE] - - # Skip forward to start of image data - while s and not s.startswith(b"\x1a"): - s = self.fp.read(1) - if not s: - msg = "File truncated" - raise SyntaxError(msg) - - if LUT in self.info: - # convert lookup table to palette or lut attribute - palette = self.fp.read(768) - greyscale = 1 # greyscale palette - linear = 1 # linear greyscale palette - for i in range(256): - if palette[i] == palette[i + 256] == palette[i + 512]: - if palette[i] != i: - linear = 0 - else: - greyscale = 0 - if self.mode in ["L", "LA", "P", "PA"]: - if greyscale: - if not linear: - self.lut = list(palette[:256]) - else: - if self.mode in ["L", "P"]: - self._mode = self.rawmode = "P" - elif self.mode in ["LA", "PA"]: - self._mode = "PA" - self.rawmode = "PA;L" - self.palette = ImagePalette.raw("RGB;L", palette) - elif self.mode == "RGB": - if not greyscale or not linear: - self.lut = list(palette) - - self.frame = 0 - - self.__offset = offs = self.fp.tell() - - self._fp = self.fp # FIXME: hack - - if self.rawmode.startswith("F;"): - # ifunc95 formats - try: - # use bit decoder (if necessary) - bits = int(self.rawmode[2:]) - if bits not in [8, 16, 32]: - self.tile = [ - ImageFile._Tile( - "bit", (0, 0) + self.size, offs, (bits, 8, 3, 0, -1) - ) - ] - return - except ValueError: - pass - - if self.rawmode in ["RGB;T", "RYB;T"]: - # Old LabEye/3PC files. Would be very surprised if anyone - # ever stumbled upon such a file ;-) - size = self.size[0] * self.size[1] - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, offs, ("G", 0, -1)), - ImageFile._Tile("raw", (0, 0) + self.size, offs + size, ("R", 0, -1)), - ImageFile._Tile( - "raw", (0, 0) + self.size, offs + 2 * size, ("B", 0, -1) - ), - ] - else: - # LabEye/IFUNC files - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1)) - ] - - @property - def n_frames(self) -> int: - return self.info[FRAMES] - - @property - def is_animated(self) -> bool: - return self.info[FRAMES] > 1 - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if isinstance(self._fp, DeferredError): - raise self._fp.ex - - self.frame = frame - - if self.mode == "1": - bits = 1 - else: - bits = 8 * len(self.mode) - - size = ((self.size[0] * bits + 7) // 8) * self.size[1] - offs = self.__offset + frame * size - - self.fp = self._fp - - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1)) - ] - - def tell(self) -> int: - return self.frame - - -# -# -------------------------------------------------------------------- -# Save IM files - - -SAVE = { - # mode: (im type, raw mode) - "1": ("0 1", "1"), - "L": ("Greyscale", "L"), - "LA": ("LA", "LA;L"), - "P": ("Greyscale", "P"), - "PA": ("LA", "PA;L"), - "I": ("L 32S", "I;32S"), - "I;16": ("L 16", "I;16"), - "I;16L": ("L 16L", "I;16L"), - "I;16B": ("L 16B", "I;16B"), - "F": ("L 32F", "F;32F"), - "RGB": ("RGB", "RGB;L"), - "RGBA": ("RGBA", "RGBA;L"), - "RGBX": ("RGBX", "RGBX;L"), - "CMYK": ("CMYK", "CMYK;L"), - "YCbCr": ("YCC", "YCbCr;L"), -} - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - try: - image_type, rawmode = SAVE[im.mode] - except KeyError as e: - msg = f"Cannot save {im.mode} images as IM" - raise ValueError(msg) from e - - frames = im.encoderinfo.get("frames", 1) - - fp.write(f"Image type: {image_type} image\r\n".encode("ascii")) - if filename: - # Each line must be 100 characters or less, - # or: SyntaxError("not an IM file") - # 8 characters are used for "Name: " and "\r\n" - # Keep just the filename, ditch the potentially overlong path - if isinstance(filename, bytes): - filename = filename.decode("ascii") - name, ext = os.path.splitext(os.path.basename(filename)) - name = "".join([name[: 92 - len(ext)], ext]) - - fp.write(f"Name: {name}\r\n".encode("ascii")) - fp.write(f"Image size (x*y): {im.size[0]}*{im.size[1]}\r\n".encode("ascii")) - fp.write(f"File size (no of images): {frames}\r\n".encode("ascii")) - if im.mode in ["P", "PA"]: - fp.write(b"Lut: 1\r\n") - fp.write(b"\000" * (511 - fp.tell()) + b"\032") - if im.mode in ["P", "PA"]: - im_palette = im.im.getpalette("RGB", "RGB;L") - colors = len(im_palette) // 3 - palette = b"" - for i in range(3): - palette += im_palette[colors * i : colors * (i + 1)] - palette += b"\x00" * (256 - colors) - fp.write(palette) # 768 bytes - ImageFile._save( - im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))] - ) - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(ImImageFile.format, ImImageFile) -Image.register_save(ImImageFile.format, _save) - -Image.register_extension(ImImageFile.format, ".im") diff --git a/myenv/lib/python3.12/site-packages/PIL/Image.py b/myenv/lib/python3.12/site-packages/PIL/Image.py deleted file mode 100644 index d209405..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/Image.py +++ /dev/null @@ -1,4245 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# the Image class wrapper -# -# partial release history: -# 1995-09-09 fl Created -# 1996-03-11 fl PIL release 0.0 (proof of concept) -# 1996-04-30 fl PIL release 0.1b1 -# 1999-07-28 fl PIL release 1.0 final -# 2000-06-07 fl PIL release 1.1 -# 2000-10-20 fl PIL release 1.1.1 -# 2001-05-07 fl PIL release 1.1.2 -# 2002-03-15 fl PIL release 1.1.3 -# 2003-05-10 fl PIL release 1.1.4 -# 2005-03-28 fl PIL release 1.1.5 -# 2006-12-02 fl PIL release 1.1.6 -# 2009-11-15 fl PIL release 1.1.7 -# -# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. -# Copyright (c) 1995-2009 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -from __future__ import annotations - -import abc -import atexit -import builtins -import io -import logging -import math -import os -import re -import struct -import sys -import tempfile -import warnings -from collections.abc import Callable, Iterator, MutableMapping, Sequence -from enum import IntEnum -from types import ModuleType -from typing import IO, Any, Literal, Protocol, cast - -# VERSION was removed in Pillow 6.0.0. -# PILLOW_VERSION was removed in Pillow 9.0.0. -# Use __version__ instead. -from . import ( - ExifTags, - ImageMode, - TiffTags, - UnidentifiedImageError, - __version__, - _plugins, -) -from ._binary import i32le, o32be, o32le -from ._deprecate import deprecate -from ._util import DeferredError, is_path - -ElementTree: ModuleType | None -try: - from defusedxml import ElementTree -except ImportError: - ElementTree = None - -logger = logging.getLogger(__name__) - - -class DecompressionBombWarning(RuntimeWarning): - pass - - -class DecompressionBombError(Exception): - pass - - -WARN_POSSIBLE_FORMATS: bool = False - -# Limit to around a quarter gigabyte for a 24-bit (3 bpp) image -MAX_IMAGE_PIXELS: int | None = int(1024 * 1024 * 1024 // 4 // 3) - - -try: - # If the _imaging C module is not present, Pillow will not load. - # Note that other modules should not refer to _imaging directly; - # import Image and use the Image.core variable instead. - # Also note that Image.core is not a publicly documented interface, - # and should be considered private and subject to change. - from . import _imaging as core - - if __version__ != getattr(core, "PILLOW_VERSION", None): - msg = ( - "The _imaging extension was built for another version of Pillow or PIL:\n" - f"Core version: {getattr(core, 'PILLOW_VERSION', None)}\n" - f"Pillow version: {__version__}" - ) - raise ImportError(msg) - -except ImportError as v: - core = DeferredError.new(ImportError("The _imaging C module is not installed.")) - # Explanations for ways that we know we might have an import error - if str(v).startswith("Module use of python"): - # The _imaging C module is present, but not compiled for - # the right version (windows only). Print a warning, if - # possible. - warnings.warn( - "The _imaging extension was built for another version of Python.", - RuntimeWarning, - ) - elif str(v).startswith("The _imaging extension"): - warnings.warn(str(v), RuntimeWarning) - # Fail here anyway. Don't let people run with a mostly broken Pillow. - # see docs/porting.rst - raise - - -def isImageType(t: Any) -> TypeGuard[Image]: - """ - Checks if an object is an image object. - - .. warning:: - - This function is for internal use only. - - :param t: object to check if it's an image - :returns: True if the object is an image - """ - deprecate("Image.isImageType(im)", 12, "isinstance(im, Image.Image)") - return hasattr(t, "im") - - -# -# Constants - - -# transpose -class Transpose(IntEnum): - FLIP_LEFT_RIGHT = 0 - FLIP_TOP_BOTTOM = 1 - ROTATE_90 = 2 - ROTATE_180 = 3 - ROTATE_270 = 4 - TRANSPOSE = 5 - TRANSVERSE = 6 - - -# transforms (also defined in Imaging.h) -class Transform(IntEnum): - AFFINE = 0 - EXTENT = 1 - PERSPECTIVE = 2 - QUAD = 3 - MESH = 4 - - -# resampling filters (also defined in Imaging.h) -class Resampling(IntEnum): - NEAREST = 0 - BOX = 4 - BILINEAR = 2 - HAMMING = 5 - BICUBIC = 3 - LANCZOS = 1 - - -_filters_support = { - Resampling.BOX: 0.5, - Resampling.BILINEAR: 1.0, - Resampling.HAMMING: 1.0, - Resampling.BICUBIC: 2.0, - Resampling.LANCZOS: 3.0, -} - - -# dithers -class Dither(IntEnum): - NONE = 0 - ORDERED = 1 # Not yet implemented - RASTERIZE = 2 # Not yet implemented - FLOYDSTEINBERG = 3 # default - - -# palettes/quantizers -class Palette(IntEnum): - WEB = 0 - ADAPTIVE = 1 - - -class Quantize(IntEnum): - MEDIANCUT = 0 - MAXCOVERAGE = 1 - FASTOCTREE = 2 - LIBIMAGEQUANT = 3 - - -module = sys.modules[__name__] -for enum in (Transpose, Transform, Resampling, Dither, Palette, Quantize): - for item in enum: - setattr(module, item.name, item.value) - - -if hasattr(core, "DEFAULT_STRATEGY"): - DEFAULT_STRATEGY = core.DEFAULT_STRATEGY - FILTERED = core.FILTERED - HUFFMAN_ONLY = core.HUFFMAN_ONLY - RLE = core.RLE - FIXED = core.FIXED - - -# -------------------------------------------------------------------- -# Registries - -TYPE_CHECKING = False -if TYPE_CHECKING: - import mmap - from xml.etree.ElementTree import Element - - from IPython.lib.pretty import PrettyPrinter - - from . import ImageFile, ImageFilter, ImagePalette, ImageQt, TiffImagePlugin - from ._typing import CapsuleType, NumpyArray, StrOrBytesPath, TypeGuard -ID: list[str] = [] -OPEN: dict[ - str, - tuple[ - Callable[[IO[bytes], str | bytes], ImageFile.ImageFile], - Callable[[bytes], bool | str] | None, - ], -] = {} -MIME: dict[str, str] = {} -SAVE: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] = {} -SAVE_ALL: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] = {} -EXTENSION: dict[str, str] = {} -DECODERS: dict[str, type[ImageFile.PyDecoder]] = {} -ENCODERS: dict[str, type[ImageFile.PyEncoder]] = {} - -# -------------------------------------------------------------------- -# Modes - -_ENDIAN = "<" if sys.byteorder == "little" else ">" - - -def _conv_type_shape(im: Image) -> tuple[tuple[int, ...], str]: - m = ImageMode.getmode(im.mode) - shape: tuple[int, ...] = (im.height, im.width) - extra = len(m.bands) - if extra != 1: - shape += (extra,) - return shape, m.typestr - - -MODES = [ - "1", - "CMYK", - "F", - "HSV", - "I", - "I;16", - "I;16B", - "I;16L", - "I;16N", - "L", - "LA", - "La", - "LAB", - "P", - "PA", - "RGB", - "RGBA", - "RGBa", - "RGBX", - "YCbCr", -] - -# raw modes that may be memory mapped. NOTE: if you change this, you -# may have to modify the stride calculation in map.c too! -_MAPMODES = ("L", "P", "RGBX", "RGBA", "CMYK", "I;16", "I;16L", "I;16B") - - -def getmodebase(mode: str) -> str: - """ - Gets the "base" mode for given mode. This function returns "L" for - images that contain grayscale data, and "RGB" for images that - contain color data. - - :param mode: Input mode. - :returns: "L" or "RGB". - :exception KeyError: If the input mode was not a standard mode. - """ - return ImageMode.getmode(mode).basemode - - -def getmodetype(mode: str) -> str: - """ - Gets the storage type mode. Given a mode, this function returns a - single-layer mode suitable for storing individual bands. - - :param mode: Input mode. - :returns: "L", "I", or "F". - :exception KeyError: If the input mode was not a standard mode. - """ - return ImageMode.getmode(mode).basetype - - -def getmodebandnames(mode: str) -> tuple[str, ...]: - """ - Gets a list of individual band names. Given a mode, this function returns - a tuple containing the names of individual bands (use - :py:method:`~PIL.Image.getmodetype` to get the mode used to store each - individual band. - - :param mode: Input mode. - :returns: A tuple containing band names. The length of the tuple - gives the number of bands in an image of the given mode. - :exception KeyError: If the input mode was not a standard mode. - """ - return ImageMode.getmode(mode).bands - - -def getmodebands(mode: str) -> int: - """ - Gets the number of individual bands for this mode. - - :param mode: Input mode. - :returns: The number of bands in this mode. - :exception KeyError: If the input mode was not a standard mode. - """ - return len(ImageMode.getmode(mode).bands) - - -# -------------------------------------------------------------------- -# Helpers - -_initialized = 0 - - -def preinit() -> None: - """ - Explicitly loads BMP, GIF, JPEG, PPM and PPM file format drivers. - - It is called when opening or saving images. - """ - - global _initialized - if _initialized >= 1: - return - - try: - from . import BmpImagePlugin - - assert BmpImagePlugin - except ImportError: - pass - try: - from . import GifImagePlugin - - assert GifImagePlugin - except ImportError: - pass - try: - from . import JpegImagePlugin - - assert JpegImagePlugin - except ImportError: - pass - try: - from . import PpmImagePlugin - - assert PpmImagePlugin - except ImportError: - pass - try: - from . import PngImagePlugin - - assert PngImagePlugin - except ImportError: - pass - - _initialized = 1 - - -def init() -> bool: - """ - Explicitly initializes the Python Imaging Library. This function - loads all available file format drivers. - - It is called when opening or saving images if :py:meth:`~preinit()` is - insufficient, and by :py:meth:`~PIL.features.pilinfo`. - """ - - global _initialized - if _initialized >= 2: - return False - - parent_name = __name__.rpartition(".")[0] - for plugin in _plugins: - try: - logger.debug("Importing %s", plugin) - __import__(f"{parent_name}.{plugin}", globals(), locals(), []) - except ImportError as e: - logger.debug("Image: failed to import %s: %s", plugin, e) - - if OPEN or SAVE: - _initialized = 2 - return True - return False - - -# -------------------------------------------------------------------- -# Codec factories (used by tobytes/frombytes and ImageFile.load) - - -def _getdecoder( - mode: str, decoder_name: str, args: Any, extra: tuple[Any, ...] = () -) -> core.ImagingDecoder | ImageFile.PyDecoder: - # tweak arguments - if args is None: - args = () - elif not isinstance(args, tuple): - args = (args,) - - try: - decoder = DECODERS[decoder_name] - except KeyError: - pass - else: - return decoder(mode, *args + extra) - - try: - # get decoder - decoder = getattr(core, f"{decoder_name}_decoder") - except AttributeError as e: - msg = f"decoder {decoder_name} not available" - raise OSError(msg) from e - return decoder(mode, *args + extra) - - -def _getencoder( - mode: str, encoder_name: str, args: Any, extra: tuple[Any, ...] = () -) -> core.ImagingEncoder | ImageFile.PyEncoder: - # tweak arguments - if args is None: - args = () - elif not isinstance(args, tuple): - args = (args,) - - try: - encoder = ENCODERS[encoder_name] - except KeyError: - pass - else: - return encoder(mode, *args + extra) - - try: - # get encoder - encoder = getattr(core, f"{encoder_name}_encoder") - except AttributeError as e: - msg = f"encoder {encoder_name} not available" - raise OSError(msg) from e - return encoder(mode, *args + extra) - - -# -------------------------------------------------------------------- -# Simple expression analyzer - - -class ImagePointTransform: - """ - Used with :py:meth:`~PIL.Image.Image.point` for single band images with more than - 8 bits, this represents an affine transformation, where the value is multiplied by - ``scale`` and ``offset`` is added. - """ - - def __init__(self, scale: float, offset: float) -> None: - self.scale = scale - self.offset = offset - - def __neg__(self) -> ImagePointTransform: - return ImagePointTransform(-self.scale, -self.offset) - - def __add__(self, other: ImagePointTransform | float) -> ImagePointTransform: - if isinstance(other, ImagePointTransform): - return ImagePointTransform( - self.scale + other.scale, self.offset + other.offset - ) - return ImagePointTransform(self.scale, self.offset + other) - - __radd__ = __add__ - - def __sub__(self, other: ImagePointTransform | float) -> ImagePointTransform: - return self + -other - - def __rsub__(self, other: ImagePointTransform | float) -> ImagePointTransform: - return other + -self - - def __mul__(self, other: ImagePointTransform | float) -> ImagePointTransform: - if isinstance(other, ImagePointTransform): - return NotImplemented - return ImagePointTransform(self.scale * other, self.offset * other) - - __rmul__ = __mul__ - - def __truediv__(self, other: ImagePointTransform | float) -> ImagePointTransform: - if isinstance(other, ImagePointTransform): - return NotImplemented - return ImagePointTransform(self.scale / other, self.offset / other) - - -def _getscaleoffset( - expr: Callable[[ImagePointTransform], ImagePointTransform | float], -) -> tuple[float, float]: - a = expr(ImagePointTransform(1, 0)) - return (a.scale, a.offset) if isinstance(a, ImagePointTransform) else (0, a) - - -# -------------------------------------------------------------------- -# Implementation wrapper - - -class SupportsGetData(Protocol): - def getdata( - self, - ) -> tuple[Transform, Sequence[int]]: ... - - -class Image: - """ - This class represents an image object. To create - :py:class:`~PIL.Image.Image` objects, use the appropriate factory - functions. There's hardly ever any reason to call the Image constructor - directly. - - * :py:func:`~PIL.Image.open` - * :py:func:`~PIL.Image.new` - * :py:func:`~PIL.Image.frombytes` - """ - - format: str | None = None - format_description: str | None = None - _close_exclusive_fp_after_loading = True - - def __init__(self) -> None: - # FIXME: take "new" parameters / other image? - self._im: core.ImagingCore | DeferredError | None = None - self._mode = "" - self._size = (0, 0) - self.palette: ImagePalette.ImagePalette | None = None - self.info: dict[str | tuple[int, int], Any] = {} - self.readonly = 0 - self._exif: Exif | None = None - - @property - def im(self) -> core.ImagingCore: - if isinstance(self._im, DeferredError): - raise self._im.ex - assert self._im is not None - return self._im - - @im.setter - def im(self, im: core.ImagingCore) -> None: - self._im = im - - @property - def width(self) -> int: - return self.size[0] - - @property - def height(self) -> int: - return self.size[1] - - @property - def size(self) -> tuple[int, int]: - return self._size - - @property - def mode(self) -> str: - return self._mode - - @property - def readonly(self) -> int: - return (self._im and self._im.readonly) or self._readonly - - @readonly.setter - def readonly(self, readonly: int) -> None: - self._readonly = readonly - - def _new(self, im: core.ImagingCore) -> Image: - new = Image() - new.im = im - new._mode = im.mode - new._size = im.size - if im.mode in ("P", "PA"): - if self.palette: - new.palette = self.palette.copy() - else: - from . import ImagePalette - - new.palette = ImagePalette.ImagePalette() - new.info = self.info.copy() - return new - - # Context manager support - def __enter__(self): - return self - - def __exit__(self, *args): - from . import ImageFile - - if isinstance(self, ImageFile.ImageFile): - if getattr(self, "_exclusive_fp", False): - self._close_fp() - self.fp = None - - def close(self) -> None: - """ - This operation will destroy the image core and release its memory. - The image data will be unusable afterward. - - This function is required to close images that have multiple frames or - have not had their file read and closed by the - :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for - more information. - """ - if getattr(self, "map", None): - if sys.platform == "win32" and hasattr(sys, "pypy_version_info"): - self.map.close() - self.map: mmap.mmap | None = None - - # Instead of simply setting to None, we're setting up a - # deferred error that will better explain that the core image - # object is gone. - self._im = DeferredError(ValueError("Operation on closed image")) - - def _copy(self) -> None: - self.load() - self.im = self.im.copy() - self.readonly = 0 - - def _ensure_mutable(self) -> None: - if self.readonly: - self._copy() - else: - self.load() - - def _dump( - self, file: str | None = None, format: str | None = None, **options: Any - ) -> str: - suffix = "" - if format: - suffix = f".{format}" - - if not file: - f, filename = tempfile.mkstemp(suffix) - os.close(f) - else: - filename = file - if not filename.endswith(suffix): - filename = filename + suffix - - self.load() - - if not format or format == "PPM": - self.im.save_ppm(filename) - else: - self.save(filename, format, **options) - - return filename - - def __eq__(self, other: object) -> bool: - if self.__class__ is not other.__class__: - return False - assert isinstance(other, Image) - return ( - self.mode == other.mode - and self.size == other.size - and self.info == other.info - and self.getpalette() == other.getpalette() - and self.tobytes() == other.tobytes() - ) - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__module__}.{self.__class__.__name__} " - f"image mode={self.mode} size={self.size[0]}x{self.size[1]} " - f"at 0x{id(self):X}>" - ) - - def _repr_pretty_(self, p: PrettyPrinter, cycle: bool) -> None: - """IPython plain text display support""" - - # Same as __repr__ but without unpredictable id(self), - # to keep Jupyter notebook `text/plain` output stable. - p.text( - f"<{self.__class__.__module__}.{self.__class__.__name__} " - f"image mode={self.mode} size={self.size[0]}x{self.size[1]}>" - ) - - def _repr_image(self, image_format: str, **kwargs: Any) -> bytes | None: - """Helper function for iPython display hook. - - :param image_format: Image format. - :returns: image as bytes, saved into the given format. - """ - b = io.BytesIO() - try: - self.save(b, image_format, **kwargs) - except Exception: - return None - return b.getvalue() - - def _repr_png_(self) -> bytes | None: - """iPython display hook support for PNG format. - - :returns: PNG version of the image as bytes - """ - return self._repr_image("PNG", compress_level=1) - - def _repr_jpeg_(self) -> bytes | None: - """iPython display hook support for JPEG format. - - :returns: JPEG version of the image as bytes - """ - return self._repr_image("JPEG") - - @property - def __array_interface__(self) -> dict[str, str | bytes | int | tuple[int, ...]]: - # numpy array interface support - new: dict[str, str | bytes | int | tuple[int, ...]] = {"version": 3} - if self.mode == "1": - # Binary images need to be extended from bits to bytes - # See: https://github.com/python-pillow/Pillow/issues/350 - new["data"] = self.tobytes("raw", "L") - else: - new["data"] = self.tobytes() - new["shape"], new["typestr"] = _conv_type_shape(self) - return new - - def __arrow_c_schema__(self) -> object: - self.load() - return self.im.__arrow_c_schema__() - - def __arrow_c_array__( - self, requested_schema: object | None = None - ) -> tuple[object, object]: - self.load() - return (self.im.__arrow_c_schema__(), self.im.__arrow_c_array__()) - - def __getstate__(self) -> list[Any]: - im_data = self.tobytes() # load image first - return [self.info, self.mode, self.size, self.getpalette(), im_data] - - def __setstate__(self, state: list[Any]) -> None: - Image.__init__(self) - info, mode, size, palette, data = state[:5] - self.info = info - self._mode = mode - self._size = size - self.im = core.new(mode, size) - if mode in ("L", "LA", "P", "PA") and palette: - self.putpalette(palette) - self.frombytes(data) - - def tobytes(self, encoder_name: str = "raw", *args: Any) -> bytes: - """ - Return image as a bytes object. - - .. warning:: - - This method returns raw image data derived from Pillow's internal - storage. For compressed image data (e.g. PNG, JPEG) use - :meth:`~.save`, with a BytesIO parameter for in-memory data. - - :param encoder_name: What encoder to use. - - The default is to use the standard "raw" encoder. - To see how this packs pixel data into the returned - bytes, see :file:`libImaging/Pack.c`. - - A list of C encoders can be seen under codecs - section of the function array in - :file:`_imaging.c`. Python encoders are registered - within the relevant plugins. - :param args: Extra arguments to the encoder. - :returns: A :py:class:`bytes` object. - """ - - encoder_args: Any = args - if len(encoder_args) == 1 and isinstance(encoder_args[0], tuple): - # may pass tuple instead of argument list - encoder_args = encoder_args[0] - - if encoder_name == "raw" and encoder_args == (): - encoder_args = self.mode - - self.load() - - if self.width == 0 or self.height == 0: - return b"" - - # unpack data - e = _getencoder(self.mode, encoder_name, encoder_args) - e.setimage(self.im) - - from . import ImageFile - - bufsize = max(ImageFile.MAXBLOCK, self.size[0] * 4) # see RawEncode.c - - output = [] - while True: - bytes_consumed, errcode, data = e.encode(bufsize) - output.append(data) - if errcode: - break - if errcode < 0: - msg = f"encoder error {errcode} in tobytes" - raise RuntimeError(msg) - - return b"".join(output) - - def tobitmap(self, name: str = "image") -> bytes: - """ - Returns the image converted to an X11 bitmap. - - .. note:: This method only works for mode "1" images. - - :param name: The name prefix to use for the bitmap variables. - :returns: A string containing an X11 bitmap. - :raises ValueError: If the mode is not "1" - """ - - self.load() - if self.mode != "1": - msg = "not a bitmap" - raise ValueError(msg) - data = self.tobytes("xbm") - return b"".join( - [ - f"#define {name}_width {self.size[0]}\n".encode("ascii"), - f"#define {name}_height {self.size[1]}\n".encode("ascii"), - f"static char {name}_bits[] = {{\n".encode("ascii"), - data, - b"};", - ] - ) - - def frombytes( - self, - data: bytes | bytearray | SupportsArrayInterface, - decoder_name: str = "raw", - *args: Any, - ) -> None: - """ - Loads this image with pixel data from a bytes object. - - This method is similar to the :py:func:`~PIL.Image.frombytes` function, - but loads data into this image instead of creating a new image object. - """ - - if self.width == 0 or self.height == 0: - return - - decoder_args: Any = args - if len(decoder_args) == 1 and isinstance(decoder_args[0], tuple): - # may pass tuple instead of argument list - decoder_args = decoder_args[0] - - # default format - if decoder_name == "raw" and decoder_args == (): - decoder_args = self.mode - - # unpack data - d = _getdecoder(self.mode, decoder_name, decoder_args) - d.setimage(self.im) - s = d.decode(data) - - if s[0] >= 0: - msg = "not enough image data" - raise ValueError(msg) - if s[1] != 0: - msg = "cannot decode image data" - raise ValueError(msg) - - def load(self) -> core.PixelAccess | None: - """ - Allocates storage for the image and loads the pixel data. In - normal cases, you don't need to call this method, since the - Image class automatically loads an opened image when it is - accessed for the first time. - - If the file associated with the image was opened by Pillow, then this - method will close it. The exception to this is if the image has - multiple frames, in which case the file will be left open for seek - operations. See :ref:`file-handling` for more information. - - :returns: An image access object. - :rtype: :py:class:`.PixelAccess` - """ - if self._im is not None and self.palette and self.palette.dirty: - # realize palette - mode, arr = self.palette.getdata() - self.im.putpalette(self.palette.mode, mode, arr) - self.palette.dirty = 0 - self.palette.rawmode = None - if "transparency" in self.info and mode in ("LA", "PA"): - if isinstance(self.info["transparency"], int): - self.im.putpalettealpha(self.info["transparency"], 0) - else: - self.im.putpalettealphas(self.info["transparency"]) - self.palette.mode = "RGBA" - else: - self.palette.palette = self.im.getpalette( - self.palette.mode, self.palette.mode - ) - - if self._im is not None: - return self.im.pixel_access(self.readonly) - return None - - def verify(self) -> None: - """ - Verifies the contents of a file. For data read from a file, this - method attempts to determine if the file is broken, without - actually decoding the image data. If this method finds any - problems, it raises suitable exceptions. If you need to load - the image after using this method, you must reopen the image - file. - """ - pass - - def convert( - self, - mode: str | None = None, - matrix: tuple[float, ...] | None = None, - dither: Dither | None = None, - palette: Palette = Palette.WEB, - colors: int = 256, - ) -> Image: - """ - Returns a converted copy of this image. For the "P" mode, this - method translates pixels through the palette. If mode is - omitted, a mode is chosen so that all information in the image - and the palette can be represented without a palette. - - This supports all possible conversions between "L", "RGB" and "CMYK". The - ``matrix`` argument only supports "L" and "RGB". - - When translating a color image to grayscale (mode "L"), - the library uses the ITU-R 601-2 luma transform:: - - L = R * 299/1000 + G * 587/1000 + B * 114/1000 - - The default method of converting a grayscale ("L") or "RGB" - image into a bilevel (mode "1") image uses Floyd-Steinberg - dither to approximate the original image luminosity levels. If - dither is ``None``, all values larger than 127 are set to 255 (white), - all other values to 0 (black). To use other thresholds, use the - :py:meth:`~PIL.Image.Image.point` method. - - When converting from "RGBA" to "P" without a ``matrix`` argument, - this passes the operation to :py:meth:`~PIL.Image.Image.quantize`, - and ``dither`` and ``palette`` are ignored. - - When converting from "PA", if an "RGBA" palette is present, the alpha - channel from the image will be used instead of the values from the palette. - - :param mode: The requested mode. See: :ref:`concept-modes`. - :param matrix: An optional conversion matrix. If given, this - should be 4- or 12-tuple containing floating point values. - :param dither: Dithering method, used when converting from - mode "RGB" to "P" or from "RGB" or "L" to "1". - Available methods are :data:`Dither.NONE` or :data:`Dither.FLOYDSTEINBERG` - (default). Note that this is not used when ``matrix`` is supplied. - :param palette: Palette to use when converting from mode "RGB" - to "P". Available palettes are :data:`Palette.WEB` or - :data:`Palette.ADAPTIVE`. - :param colors: Number of colors to use for the :data:`Palette.ADAPTIVE` - palette. Defaults to 256. - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if mode in ("BGR;15", "BGR;16", "BGR;24"): - deprecate(mode, 12) - - self.load() - - has_transparency = "transparency" in self.info - if not mode and self.mode == "P": - # determine default mode - if self.palette: - mode = self.palette.mode - else: - mode = "RGB" - if mode == "RGB" and has_transparency: - mode = "RGBA" - if not mode or (mode == self.mode and not matrix): - return self.copy() - - if matrix: - # matrix conversion - if mode not in ("L", "RGB"): - msg = "illegal conversion" - raise ValueError(msg) - im = self.im.convert_matrix(mode, matrix) - new_im = self._new(im) - if has_transparency and self.im.bands == 3: - transparency = new_im.info["transparency"] - - def convert_transparency( - m: tuple[float, ...], v: tuple[int, int, int] - ) -> int: - value = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * 0.5 - return max(0, min(255, int(value))) - - if mode == "L": - transparency = convert_transparency(matrix, transparency) - elif len(mode) == 3: - transparency = tuple( - convert_transparency(matrix[i * 4 : i * 4 + 4], transparency) - for i in range(len(transparency)) - ) - new_im.info["transparency"] = transparency - return new_im - - if mode == "P" and self.mode == "RGBA": - return self.quantize(colors) - - trns = None - delete_trns = False - # transparency handling - if has_transparency: - if (self.mode in ("1", "L", "I", "I;16") and mode in ("LA", "RGBA")) or ( - self.mode == "RGB" and mode in ("La", "LA", "RGBa", "RGBA") - ): - # Use transparent conversion to promote from transparent - # color to an alpha channel. - new_im = self._new( - self.im.convert_transparent(mode, self.info["transparency"]) - ) - del new_im.info["transparency"] - return new_im - elif self.mode in ("L", "RGB", "P") and mode in ("L", "RGB", "P"): - t = self.info["transparency"] - if isinstance(t, bytes): - # Dragons. This can't be represented by a single color - warnings.warn( - "Palette images with Transparency expressed in bytes should be " - "converted to RGBA images" - ) - delete_trns = True - else: - # get the new transparency color. - # use existing conversions - trns_im = new(self.mode, (1, 1)) - if self.mode == "P": - assert self.palette is not None - trns_im.putpalette(self.palette, self.palette.mode) - if isinstance(t, tuple): - err = "Couldn't allocate a palette color for transparency" - assert trns_im.palette is not None - try: - t = trns_im.palette.getcolor(t, self) - except ValueError as e: - if str(e) == "cannot allocate more than 256 colors": - # If all 256 colors are in use, - # then there is no need for transparency - t = None - else: - raise ValueError(err) from e - if t is None: - trns = None - else: - trns_im.putpixel((0, 0), t) - - if mode in ("L", "RGB"): - trns_im = trns_im.convert(mode) - else: - # can't just retrieve the palette number, got to do it - # after quantization. - trns_im = trns_im.convert("RGB") - trns = trns_im.getpixel((0, 0)) - - elif self.mode == "P" and mode in ("LA", "PA", "RGBA"): - t = self.info["transparency"] - delete_trns = True - - if isinstance(t, bytes): - self.im.putpalettealphas(t) - elif isinstance(t, int): - self.im.putpalettealpha(t, 0) - else: - msg = "Transparency for P mode should be bytes or int" - raise ValueError(msg) - - if mode == "P" and palette == Palette.ADAPTIVE: - im = self.im.quantize(colors) - new_im = self._new(im) - from . import ImagePalette - - new_im.palette = ImagePalette.ImagePalette( - "RGB", new_im.im.getpalette("RGB") - ) - if delete_trns: - # This could possibly happen if we requantize to fewer colors. - # The transparency would be totally off in that case. - del new_im.info["transparency"] - if trns is not None: - try: - new_im.info["transparency"] = new_im.palette.getcolor( - cast(tuple[int, ...], trns), # trns was converted to RGB - new_im, - ) - except Exception: - # if we can't make a transparent color, don't leave the old - # transparency hanging around to mess us up. - del new_im.info["transparency"] - warnings.warn("Couldn't allocate palette entry for transparency") - return new_im - - if "LAB" in (self.mode, mode): - im = self - if mode == "LAB": - if im.mode not in ("RGB", "RGBA", "RGBX"): - im = im.convert("RGBA") - other_mode = im.mode - else: - other_mode = mode - if other_mode in ("RGB", "RGBA", "RGBX"): - from . import ImageCms - - srgb = ImageCms.createProfile("sRGB") - lab = ImageCms.createProfile("LAB") - profiles = [lab, srgb] if im.mode == "LAB" else [srgb, lab] - transform = ImageCms.buildTransform( - profiles[0], profiles[1], im.mode, mode - ) - return transform.apply(im) - - # colorspace conversion - if dither is None: - dither = Dither.FLOYDSTEINBERG - - try: - im = self.im.convert(mode, dither) - except ValueError: - try: - # normalize source image and try again - modebase = getmodebase(self.mode) - if modebase == self.mode: - raise - im = self.im.convert(modebase) - im = im.convert(mode, dither) - except KeyError as e: - msg = "illegal conversion" - raise ValueError(msg) from e - - new_im = self._new(im) - if mode == "P" and palette != Palette.ADAPTIVE: - from . import ImagePalette - - new_im.palette = ImagePalette.ImagePalette("RGB", im.getpalette("RGB")) - if delete_trns: - # crash fail if we leave a bytes transparency in an rgb/l mode. - del new_im.info["transparency"] - if trns is not None: - if new_im.mode == "P" and new_im.palette: - try: - new_im.info["transparency"] = new_im.palette.getcolor( - cast(tuple[int, ...], trns), new_im # trns was converted to RGB - ) - except ValueError as e: - del new_im.info["transparency"] - if str(e) != "cannot allocate more than 256 colors": - # If all 256 colors are in use, - # then there is no need for transparency - warnings.warn( - "Couldn't allocate palette entry for transparency" - ) - else: - new_im.info["transparency"] = trns - return new_im - - def quantize( - self, - colors: int = 256, - method: int | None = None, - kmeans: int = 0, - palette: Image | None = None, - dither: Dither = Dither.FLOYDSTEINBERG, - ) -> Image: - """ - Convert the image to 'P' mode with the specified number - of colors. - - :param colors: The desired number of colors, <= 256 - :param method: :data:`Quantize.MEDIANCUT` (median cut), - :data:`Quantize.MAXCOVERAGE` (maximum coverage), - :data:`Quantize.FASTOCTREE` (fast octree), - :data:`Quantize.LIBIMAGEQUANT` (libimagequant; check support - using :py:func:`PIL.features.check_feature` with - ``feature="libimagequant"``). - - By default, :data:`Quantize.MEDIANCUT` will be used. - - The exception to this is RGBA images. :data:`Quantize.MEDIANCUT` - and :data:`Quantize.MAXCOVERAGE` do not support RGBA images, so - :data:`Quantize.FASTOCTREE` is used by default instead. - :param kmeans: Integer greater than or equal to zero. - :param palette: Quantize to the palette of given - :py:class:`PIL.Image.Image`. - :param dither: Dithering method, used when converting from - mode "RGB" to "P" or from "RGB" or "L" to "1". - Available methods are :data:`Dither.NONE` or :data:`Dither.FLOYDSTEINBERG` - (default). - :returns: A new image - """ - - self.load() - - if method is None: - # defaults: - method = Quantize.MEDIANCUT - if self.mode == "RGBA": - method = Quantize.FASTOCTREE - - if self.mode == "RGBA" and method not in ( - Quantize.FASTOCTREE, - Quantize.LIBIMAGEQUANT, - ): - # Caller specified an invalid mode. - msg = ( - "Fast Octree (method == 2) and libimagequant (method == 3) " - "are the only valid methods for quantizing RGBA images" - ) - raise ValueError(msg) - - if palette: - # use palette from reference image - palette.load() - if palette.mode != "P": - msg = "bad mode for palette image" - raise ValueError(msg) - if self.mode not in {"RGB", "L"}: - msg = "only RGB or L mode images can be quantized to a palette" - raise ValueError(msg) - im = self.im.convert("P", dither, palette.im) - new_im = self._new(im) - assert palette.palette is not None - new_im.palette = palette.palette.copy() - return new_im - - if kmeans < 0: - msg = "kmeans must not be negative" - raise ValueError(msg) - - im = self._new(self.im.quantize(colors, method, kmeans)) - - from . import ImagePalette - - mode = im.im.getpalettemode() - palette_data = im.im.getpalette(mode, mode)[: colors * len(mode)] - im.palette = ImagePalette.ImagePalette(mode, palette_data) - - return im - - def copy(self) -> Image: - """ - Copies this image. Use this method if you wish to paste things - into an image, but still retain the original. - - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - self.load() - return self._new(self.im.copy()) - - __copy__ = copy - - def crop(self, box: tuple[float, float, float, float] | None = None) -> Image: - """ - Returns a rectangular region from this image. The box is a - 4-tuple defining the left, upper, right, and lower pixel - coordinate. See :ref:`coordinate-system`. - - Note: Prior to Pillow 3.4.0, this was a lazy operation. - - :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if box is None: - return self.copy() - - if box[2] < box[0]: - msg = "Coordinate 'right' is less than 'left'" - raise ValueError(msg) - elif box[3] < box[1]: - msg = "Coordinate 'lower' is less than 'upper'" - raise ValueError(msg) - - self.load() - return self._new(self._crop(self.im, box)) - - def _crop( - self, im: core.ImagingCore, box: tuple[float, float, float, float] - ) -> core.ImagingCore: - """ - Returns a rectangular region from the core image object im. - - This is equivalent to calling im.crop((x0, y0, x1, y1)), but - includes additional sanity checks. - - :param im: a core image object - :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. - :returns: A core image object. - """ - - x0, y0, x1, y1 = map(int, map(round, box)) - - absolute_values = (abs(x1 - x0), abs(y1 - y0)) - - _decompression_bomb_check(absolute_values) - - return im.crop((x0, y0, x1, y1)) - - def draft( - self, mode: str | None, size: tuple[int, int] | None - ) -> tuple[str, tuple[int, int, float, float]] | None: - """ - Configures the image file loader so it returns a version of the - image that as closely as possible matches the given mode and - size. For example, you can use this method to convert a color - JPEG to grayscale while loading it. - - If any changes are made, returns a tuple with the chosen ``mode`` and - ``box`` with coordinates of the original image within the altered one. - - Note that this method modifies the :py:class:`~PIL.Image.Image` object - in place. If the image has already been loaded, this method has no - effect. - - Note: This method is not implemented for most images. It is - currently implemented only for JPEG and MPO images. - - :param mode: The requested mode. - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - """ - pass - - def _expand(self, xmargin: int, ymargin: int | None = None) -> Image: - if ymargin is None: - ymargin = xmargin - self.load() - return self._new(self.im.expand(xmargin, ymargin)) - - def filter(self, filter: ImageFilter.Filter | type[ImageFilter.Filter]) -> Image: - """ - Filters this image using the given filter. For a list of - available filters, see the :py:mod:`~PIL.ImageFilter` module. - - :param filter: Filter kernel. - :returns: An :py:class:`~PIL.Image.Image` object.""" - - from . import ImageFilter - - self.load() - - if callable(filter): - filter = filter() - if not hasattr(filter, "filter"): - msg = "filter argument should be ImageFilter.Filter instance or class" - raise TypeError(msg) - - multiband = isinstance(filter, ImageFilter.MultibandFilter) - if self.im.bands == 1 or multiband: - return self._new(filter.filter(self.im)) - - ims = [ - self._new(filter.filter(self.im.getband(c))) for c in range(self.im.bands) - ] - return merge(self.mode, ims) - - def getbands(self) -> tuple[str, ...]: - """ - Returns a tuple containing the name of each band in this image. - For example, ``getbands`` on an RGB image returns ("R", "G", "B"). - - :returns: A tuple containing band names. - :rtype: tuple - """ - return ImageMode.getmode(self.mode).bands - - def getbbox(self, *, alpha_only: bool = True) -> tuple[int, int, int, int] | None: - """ - Calculates the bounding box of the non-zero regions in the - image. - - :param alpha_only: Optional flag, defaulting to ``True``. - If ``True`` and the image has an alpha channel, trim transparent pixels. - Otherwise, trim pixels when all channels are zero. - Keyword-only argument. - :returns: The bounding box is returned as a 4-tuple defining the - left, upper, right, and lower pixel coordinate. See - :ref:`coordinate-system`. If the image is completely empty, this - method returns None. - - """ - - self.load() - return self.im.getbbox(alpha_only) - - def getcolors( - self, maxcolors: int = 256 - ) -> list[tuple[int, tuple[int, ...]]] | list[tuple[int, float]] | None: - """ - Returns a list of colors used in this image. - - The colors will be in the image's mode. For example, an RGB image will - return a tuple of (red, green, blue) color values, and a P image will - return the index of the color in the palette. - - :param maxcolors: Maximum number of colors. If this number is - exceeded, this method returns None. The default limit is - 256 colors. - :returns: An unsorted list of (count, pixel) values. - """ - - self.load() - if self.mode in ("1", "L", "P"): - h = self.im.histogram() - out: list[tuple[int, float]] = [(h[i], i) for i in range(256) if h[i]] - if len(out) > maxcolors: - return None - return out - return self.im.getcolors(maxcolors) - - def getdata(self, band: int | None = None) -> core.ImagingCore: - """ - Returns the contents of this image as a sequence object - containing pixel values. The sequence object is flattened, so - that values for line one follow directly after the values of - line zero, and so on. - - Note that the sequence object returned by this method is an - internal PIL data type, which only supports certain sequence - operations. To convert it to an ordinary sequence (e.g. for - printing), use ``list(im.getdata())``. - - :param band: What band to return. The default is to return - all bands. To return a single band, pass in the index - value (e.g. 0 to get the "R" band from an "RGB" image). - :returns: A sequence-like object. - """ - - self.load() - if band is not None: - return self.im.getband(band) - return self.im # could be abused - - def getextrema(self) -> tuple[float, float] | tuple[tuple[int, int], ...]: - """ - Gets the minimum and maximum pixel values for each band in - the image. - - :returns: For a single-band image, a 2-tuple containing the - minimum and maximum pixel value. For a multi-band image, - a tuple containing one 2-tuple for each band. - """ - - self.load() - if self.im.bands > 1: - return tuple(self.im.getband(i).getextrema() for i in range(self.im.bands)) - return self.im.getextrema() - - def getxmp(self) -> dict[str, Any]: - """ - Returns a dictionary containing the XMP tags. - Requires defusedxml to be installed. - - :returns: XMP tags in a dictionary. - """ - - def get_name(tag: str) -> str: - return re.sub("^{[^}]+}", "", tag) - - def get_value(element: Element) -> str | dict[str, Any] | None: - value: dict[str, Any] = {get_name(k): v for k, v in element.attrib.items()} - children = list(element) - if children: - for child in children: - name = get_name(child.tag) - child_value = get_value(child) - if name in value: - if not isinstance(value[name], list): - value[name] = [value[name]] - value[name].append(child_value) - else: - value[name] = child_value - elif value: - if element.text: - value["text"] = element.text - else: - return element.text - return value - - if ElementTree is None: - warnings.warn("XMP data cannot be read without defusedxml dependency") - return {} - if "xmp" not in self.info: - return {} - root = ElementTree.fromstring(self.info["xmp"].rstrip(b"\x00 ")) - return {get_name(root.tag): get_value(root)} - - def getexif(self) -> Exif: - """ - Gets EXIF data from the image. - - :returns: an :py:class:`~PIL.Image.Exif` object. - """ - if self._exif is None: - self._exif = Exif() - elif self._exif._loaded: - return self._exif - self._exif._loaded = True - - exif_info = self.info.get("exif") - if exif_info is None: - if "Raw profile type exif" in self.info: - exif_info = bytes.fromhex( - "".join(self.info["Raw profile type exif"].split("\n")[3:]) - ) - elif hasattr(self, "tag_v2"): - self._exif.bigtiff = self.tag_v2._bigtiff - self._exif.endian = self.tag_v2._endian - self._exif.load_from_fp(self.fp, self.tag_v2._offset) - if exif_info is not None: - self._exif.load(exif_info) - - # XMP tags - if ExifTags.Base.Orientation not in self._exif: - xmp_tags = self.info.get("XML:com.adobe.xmp") - pattern: str | bytes = r'tiff:Orientation(="|>)([0-9])' - if not xmp_tags and (xmp_tags := self.info.get("xmp")): - pattern = rb'tiff:Orientation(="|>)([0-9])' - if xmp_tags: - match = re.search(pattern, xmp_tags) - if match: - self._exif[ExifTags.Base.Orientation] = int(match[2]) - - return self._exif - - def _reload_exif(self) -> None: - if self._exif is None or not self._exif._loaded: - return - self._exif._loaded = False - self.getexif() - - def get_child_images(self) -> list[ImageFile.ImageFile]: - from . import ImageFile - - deprecate("Image.Image.get_child_images", 13) - return ImageFile.ImageFile.get_child_images(self) # type: ignore[arg-type] - - def getim(self) -> CapsuleType: - """ - Returns a capsule that points to the internal image memory. - - :returns: A capsule object. - """ - - self.load() - return self.im.ptr - - def getpalette(self, rawmode: str | None = "RGB") -> list[int] | None: - """ - Returns the image palette as a list. - - :param rawmode: The mode in which to return the palette. ``None`` will - return the palette in its current mode. - - .. versionadded:: 9.1.0 - - :returns: A list of color values [r, g, b, ...], or None if the - image has no palette. - """ - - self.load() - try: - mode = self.im.getpalettemode() - except ValueError: - return None # no palette - if rawmode is None: - rawmode = mode - return list(self.im.getpalette(mode, rawmode)) - - @property - def has_transparency_data(self) -> bool: - """ - Determine if an image has transparency data, whether in the form of an - alpha channel, a palette with an alpha channel, or a "transparency" key - in the info dictionary. - - Note the image might still appear solid, if all of the values shown - within are opaque. - - :returns: A boolean. - """ - if ( - self.mode in ("LA", "La", "PA", "RGBA", "RGBa") - or "transparency" in self.info - ): - return True - if self.mode == "P": - assert self.palette is not None - return self.palette.mode.endswith("A") - return False - - def apply_transparency(self) -> None: - """ - If a P mode image has a "transparency" key in the info dictionary, - remove the key and instead apply the transparency to the palette. - Otherwise, the image is unchanged. - """ - if self.mode != "P" or "transparency" not in self.info: - return - - from . import ImagePalette - - palette = self.getpalette("RGBA") - assert palette is not None - transparency = self.info["transparency"] - if isinstance(transparency, bytes): - for i, alpha in enumerate(transparency): - palette[i * 4 + 3] = alpha - else: - palette[transparency * 4 + 3] = 0 - self.palette = ImagePalette.ImagePalette("RGBA", bytes(palette)) - self.palette.dirty = 1 - - del self.info["transparency"] - - def getpixel( - self, xy: tuple[int, int] | list[int] - ) -> float | tuple[int, ...] | None: - """ - Returns the pixel value at a given position. - - :param xy: The coordinate, given as (x, y). See - :ref:`coordinate-system`. - :returns: The pixel value. If the image is a multi-layer image, - this method returns a tuple. - """ - - self.load() - return self.im.getpixel(tuple(xy)) - - def getprojection(self) -> tuple[list[int], list[int]]: - """ - Get projection to x and y axes - - :returns: Two sequences, indicating where there are non-zero - pixels along the X-axis and the Y-axis, respectively. - """ - - self.load() - x, y = self.im.getprojection() - return list(x), list(y) - - def histogram( - self, mask: Image | None = None, extrema: tuple[float, float] | None = None - ) -> list[int]: - """ - Returns a histogram for the image. The histogram is returned as a - list of pixel counts, one for each pixel value in the source - image. Counts are grouped into 256 bins for each band, even if - the image has more than 8 bits per band. If the image has more - than one band, the histograms for all bands are concatenated (for - example, the histogram for an "RGB" image contains 768 values). - - A bilevel image (mode "1") is treated as a grayscale ("L") image - by this method. - - If a mask is provided, the method returns a histogram for those - parts of the image where the mask image is non-zero. The mask - image must have the same size as the image, and be either a - bi-level image (mode "1") or a grayscale image ("L"). - - :param mask: An optional mask. - :param extrema: An optional tuple of manually-specified extrema. - :returns: A list containing pixel counts. - """ - self.load() - if mask: - mask.load() - return self.im.histogram((0, 0), mask.im) - if self.mode in ("I", "F"): - return self.im.histogram( - extrema if extrema is not None else self.getextrema() - ) - return self.im.histogram() - - def entropy( - self, mask: Image | None = None, extrema: tuple[float, float] | None = None - ) -> float: - """ - Calculates and returns the entropy for the image. - - A bilevel image (mode "1") is treated as a grayscale ("L") - image by this method. - - If a mask is provided, the method employs the histogram for - those parts of the image where the mask image is non-zero. - The mask image must have the same size as the image, and be - either a bi-level image (mode "1") or a grayscale image ("L"). - - :param mask: An optional mask. - :param extrema: An optional tuple of manually-specified extrema. - :returns: A float value representing the image entropy - """ - self.load() - if mask: - mask.load() - return self.im.entropy((0, 0), mask.im) - if self.mode in ("I", "F"): - return self.im.entropy( - extrema if extrema is not None else self.getextrema() - ) - return self.im.entropy() - - def paste( - self, - im: Image | str | float | tuple[float, ...], - box: Image | tuple[int, int, int, int] | tuple[int, int] | None = None, - mask: Image | None = None, - ) -> None: - """ - Pastes another image into this image. The box argument is either - a 2-tuple giving the upper left corner, a 4-tuple defining the - left, upper, right, and lower pixel coordinate, or None (same as - (0, 0)). See :ref:`coordinate-system`. If a 4-tuple is given, the size - of the pasted image must match the size of the region. - - If the modes don't match, the pasted image is converted to the mode of - this image (see the :py:meth:`~PIL.Image.Image.convert` method for - details). - - Instead of an image, the source can be a integer or tuple - containing pixel values. The method then fills the region - with the given color. When creating RGB images, you can - also use color strings as supported by the ImageColor module. - - If a mask is given, this method updates only the regions - indicated by the mask. You can use either "1", "L", "LA", "RGBA" - or "RGBa" images (if present, the alpha band is used as mask). - Where the mask is 255, the given image is copied as is. Where - the mask is 0, the current value is preserved. Intermediate - values will mix the two images together, including their alpha - channels if they have them. - - See :py:meth:`~PIL.Image.Image.alpha_composite` if you want to - combine images with respect to their alpha channels. - - :param im: Source image or pixel value (integer, float or tuple). - :param box: An optional 4-tuple giving the region to paste into. - If a 2-tuple is used instead, it's treated as the upper left - corner. If omitted or None, the source is pasted into the - upper left corner. - - If an image is given as the second argument and there is no - third, the box defaults to (0, 0), and the second argument - is interpreted as a mask image. - :param mask: An optional mask image. - """ - - if isinstance(box, Image): - if mask is not None: - msg = "If using second argument as mask, third argument must be None" - raise ValueError(msg) - # abbreviated paste(im, mask) syntax - mask = box - box = None - - if box is None: - box = (0, 0) - - if len(box) == 2: - # upper left corner given; get size from image or mask - if isinstance(im, Image): - size = im.size - elif isinstance(mask, Image): - size = mask.size - else: - # FIXME: use self.size here? - msg = "cannot determine region size; use 4-item box" - raise ValueError(msg) - box += (box[0] + size[0], box[1] + size[1]) - - source: core.ImagingCore | str | float | tuple[float, ...] - if isinstance(im, str): - from . import ImageColor - - source = ImageColor.getcolor(im, self.mode) - elif isinstance(im, Image): - im.load() - if self.mode != im.mode: - if self.mode != "RGB" or im.mode not in ("LA", "RGBA", "RGBa"): - # should use an adapter for this! - im = im.convert(self.mode) - source = im.im - else: - source = im - - self._ensure_mutable() - - if mask: - mask.load() - self.im.paste(source, box, mask.im) - else: - self.im.paste(source, box) - - def alpha_composite( - self, im: Image, dest: Sequence[int] = (0, 0), source: Sequence[int] = (0, 0) - ) -> None: - """'In-place' analog of Image.alpha_composite. Composites an image - onto this image. - - :param im: image to composite over this one - :param dest: Optional 2 tuple (left, top) specifying the upper - left corner in this (destination) image. - :param source: Optional 2 (left, top) tuple for the upper left - corner in the overlay source image, or 4 tuple (left, top, right, - bottom) for the bounds of the source rectangle - - Performance Note: Not currently implemented in-place in the core layer. - """ - - if not isinstance(source, (list, tuple)): - msg = "Source must be a list or tuple" - raise ValueError(msg) - if not isinstance(dest, (list, tuple)): - msg = "Destination must be a list or tuple" - raise ValueError(msg) - - if len(source) == 4: - overlay_crop_box = tuple(source) - elif len(source) == 2: - overlay_crop_box = tuple(source) + im.size - else: - msg = "Source must be a sequence of length 2 or 4" - raise ValueError(msg) - - if not len(dest) == 2: - msg = "Destination must be a sequence of length 2" - raise ValueError(msg) - if min(source) < 0: - msg = "Source must be non-negative" - raise ValueError(msg) - - # over image, crop if it's not the whole image. - if overlay_crop_box == (0, 0) + im.size: - overlay = im - else: - overlay = im.crop(overlay_crop_box) - - # target for the paste - box = tuple(dest) + (dest[0] + overlay.width, dest[1] + overlay.height) - - # destination image. don't copy if we're using the whole image. - if box == (0, 0) + self.size: - background = self - else: - background = self.crop(box) - - result = alpha_composite(background, overlay) - self.paste(result, box) - - def point( - self, - lut: ( - Sequence[float] - | NumpyArray - | Callable[[int], float] - | Callable[[ImagePointTransform], ImagePointTransform | float] - | ImagePointHandler - ), - mode: str | None = None, - ) -> Image: - """ - Maps this image through a lookup table or function. - - :param lut: A lookup table, containing 256 (or 65536 if - self.mode=="I" and mode == "L") values per band in the - image. A function can be used instead, it should take a - single argument. The function is called once for each - possible pixel value, and the resulting table is applied to - all bands of the image. - - It may also be an :py:class:`~PIL.Image.ImagePointHandler` - object:: - - class Example(Image.ImagePointHandler): - def point(self, im: Image) -> Image: - # Return result - :param mode: Output mode (default is same as input). This can only be used if - the source image has mode "L" or "P", and the output has mode "1" or the - source image mode is "I" and the output mode is "L". - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - self.load() - - if isinstance(lut, ImagePointHandler): - return lut.point(self) - - if callable(lut): - # if it isn't a list, it should be a function - if self.mode in ("I", "I;16", "F"): - # check if the function can be used with point_transform - # UNDONE wiredfool -- I think this prevents us from ever doing - # a gamma function point transform on > 8bit images. - scale, offset = _getscaleoffset(lut) # type: ignore[arg-type] - return self._new(self.im.point_transform(scale, offset)) - # for other modes, convert the function to a table - flatLut = [lut(i) for i in range(256)] * self.im.bands # type: ignore[arg-type] - else: - flatLut = lut - - if self.mode == "F": - # FIXME: _imaging returns a confusing error message for this case - msg = "point operation not supported for this mode" - raise ValueError(msg) - - if mode != "F": - flatLut = [round(i) for i in flatLut] - return self._new(self.im.point(flatLut, mode)) - - def putalpha(self, alpha: Image | int) -> None: - """ - Adds or replaces the alpha layer in this image. If the image - does not have an alpha layer, it's converted to "LA" or "RGBA". - The new layer must be either "L" or "1". - - :param alpha: The new alpha layer. This can either be an "L" or "1" - image having the same size as this image, or an integer. - """ - - self._ensure_mutable() - - if self.mode not in ("LA", "PA", "RGBA"): - # attempt to promote self to a matching alpha mode - try: - mode = getmodebase(self.mode) + "A" - try: - self.im.setmode(mode) - except (AttributeError, ValueError) as e: - # do things the hard way - im = self.im.convert(mode) - if im.mode not in ("LA", "PA", "RGBA"): - msg = "alpha channel could not be added" - raise ValueError(msg) from e # sanity check - self.im = im - self._mode = self.im.mode - except KeyError as e: - msg = "illegal image mode" - raise ValueError(msg) from e - - if self.mode in ("LA", "PA"): - band = 1 - else: - band = 3 - - if isinstance(alpha, Image): - # alpha layer - if alpha.mode not in ("1", "L"): - msg = "illegal image mode" - raise ValueError(msg) - alpha.load() - if alpha.mode == "1": - alpha = alpha.convert("L") - else: - # constant alpha - try: - self.im.fillband(band, alpha) - except (AttributeError, ValueError): - # do things the hard way - alpha = new("L", self.size, alpha) - else: - return - - self.im.putband(alpha.im, band) - - def putdata( - self, - data: Sequence[float] | Sequence[Sequence[int]] | core.ImagingCore | NumpyArray, - scale: float = 1.0, - offset: float = 0.0, - ) -> None: - """ - Copies pixel data from a flattened sequence object into the image. The - values should start at the upper left corner (0, 0), continue to the - end of the line, followed directly by the first value of the second - line, and so on. Data will be read until either the image or the - sequence ends. The scale and offset values are used to adjust the - sequence values: **pixel = value*scale + offset**. - - :param data: A flattened sequence object. - :param scale: An optional scale value. The default is 1.0. - :param offset: An optional offset value. The default is 0.0. - """ - - self._ensure_mutable() - - self.im.putdata(data, scale, offset) - - def putpalette( - self, - data: ImagePalette.ImagePalette | bytes | Sequence[int], - rawmode: str = "RGB", - ) -> None: - """ - Attaches a palette to this image. The image must be a "P", "PA", "L" - or "LA" image. - - The palette sequence must contain at most 256 colors, made up of one - integer value for each channel in the raw mode. - For example, if the raw mode is "RGB", then it can contain at most 768 - values, made up of red, green and blue values for the corresponding pixel - index in the 256 colors. - If the raw mode is "RGBA", then it can contain at most 1024 values, - containing red, green, blue and alpha values. - - Alternatively, an 8-bit string may be used instead of an integer sequence. - - :param data: A palette sequence (either a list or a string). - :param rawmode: The raw mode of the palette. Either "RGB", "RGBA", or a mode - that can be transformed to "RGB" or "RGBA" (e.g. "R", "BGR;15", "RGBA;L"). - """ - from . import ImagePalette - - if self.mode not in ("L", "LA", "P", "PA"): - msg = "illegal image mode" - raise ValueError(msg) - if isinstance(data, ImagePalette.ImagePalette): - if data.rawmode is not None: - palette = ImagePalette.raw(data.rawmode, data.palette) - else: - palette = ImagePalette.ImagePalette(palette=data.palette) - palette.dirty = 1 - else: - if not isinstance(data, bytes): - data = bytes(data) - palette = ImagePalette.raw(rawmode, data) - self._mode = "PA" if "A" in self.mode else "P" - self.palette = palette - self.palette.mode = "RGBA" if "A" in rawmode else "RGB" - self.load() # install new palette - - def putpixel( - self, xy: tuple[int, int], value: float | tuple[int, ...] | list[int] - ) -> None: - """ - Modifies the pixel at the given position. The color is given as - a single numerical value for single-band images, and a tuple for - multi-band images. In addition to this, RGB and RGBA tuples are - accepted for P and PA images. - - Note that this method is relatively slow. For more extensive changes, - use :py:meth:`~PIL.Image.Image.paste` or the :py:mod:`~PIL.ImageDraw` - module instead. - - See: - - * :py:meth:`~PIL.Image.Image.paste` - * :py:meth:`~PIL.Image.Image.putdata` - * :py:mod:`~PIL.ImageDraw` - - :param xy: The pixel coordinate, given as (x, y). See - :ref:`coordinate-system`. - :param value: The pixel value. - """ - - if self.readonly: - self._copy() - self.load() - - if ( - self.mode in ("P", "PA") - and isinstance(value, (list, tuple)) - and len(value) in [3, 4] - ): - # RGB or RGBA value for a P or PA image - if self.mode == "PA": - alpha = value[3] if len(value) == 4 else 255 - value = value[:3] - assert self.palette is not None - palette_index = self.palette.getcolor(tuple(value), self) - value = (palette_index, alpha) if self.mode == "PA" else palette_index - return self.im.putpixel(xy, value) - - def remap_palette( - self, dest_map: list[int], source_palette: bytes | bytearray | None = None - ) -> Image: - """ - Rewrites the image to reorder the palette. - - :param dest_map: A list of indexes into the original palette. - e.g. ``[1,0]`` would swap a two item palette, and ``list(range(256))`` - is the identity transform. - :param source_palette: Bytes or None. - :returns: An :py:class:`~PIL.Image.Image` object. - - """ - from . import ImagePalette - - if self.mode not in ("L", "P"): - msg = "illegal image mode" - raise ValueError(msg) - - bands = 3 - palette_mode = "RGB" - if source_palette is None: - if self.mode == "P": - self.load() - palette_mode = self.im.getpalettemode() - if palette_mode == "RGBA": - bands = 4 - source_palette = self.im.getpalette(palette_mode, palette_mode) - else: # L-mode - source_palette = bytearray(i // 3 for i in range(768)) - elif len(source_palette) > 768: - bands = 4 - palette_mode = "RGBA" - - palette_bytes = b"" - new_positions = [0] * 256 - - # pick only the used colors from the palette - for i, oldPosition in enumerate(dest_map): - palette_bytes += source_palette[ - oldPosition * bands : oldPosition * bands + bands - ] - new_positions[oldPosition] = i - - # replace the palette color id of all pixel with the new id - - # Palette images are [0..255], mapped through a 1 or 3 - # byte/color map. We need to remap the whole image - # from palette 1 to palette 2. New_positions is - # an array of indexes into palette 1. Palette 2 is - # palette 1 with any holes removed. - - # We're going to leverage the convert mechanism to use the - # C code to remap the image from palette 1 to palette 2, - # by forcing the source image into 'L' mode and adding a - # mapping 'L' mode palette, then converting back to 'L' - # sans palette thus converting the image bytes, then - # assigning the optimized RGB palette. - - # perf reference, 9500x4000 gif, w/~135 colors - # 14 sec prepatch, 1 sec postpatch with optimization forced. - - mapping_palette = bytearray(new_positions) - - m_im = self.copy() - m_im._mode = "P" - - m_im.palette = ImagePalette.ImagePalette( - palette_mode, palette=mapping_palette * bands - ) - # possibly set palette dirty, then - # m_im.putpalette(mapping_palette, 'L') # converts to 'P' - # or just force it. - # UNDONE -- this is part of the general issue with palettes - m_im.im.putpalette(palette_mode, palette_mode + ";L", m_im.palette.tobytes()) - - m_im = m_im.convert("L") - - m_im.putpalette(palette_bytes, palette_mode) - m_im.palette = ImagePalette.ImagePalette(palette_mode, palette=palette_bytes) - - if "transparency" in self.info: - try: - m_im.info["transparency"] = dest_map.index(self.info["transparency"]) - except ValueError: - if "transparency" in m_im.info: - del m_im.info["transparency"] - - return m_im - - def _get_safe_box( - self, - size: tuple[int, int], - resample: Resampling, - box: tuple[float, float, float, float], - ) -> tuple[int, int, int, int]: - """Expands the box so it includes adjacent pixels - that may be used by resampling with the given resampling filter. - """ - filter_support = _filters_support[resample] - 0.5 - scale_x = (box[2] - box[0]) / size[0] - scale_y = (box[3] - box[1]) / size[1] - support_x = filter_support * scale_x - support_y = filter_support * scale_y - - return ( - max(0, int(box[0] - support_x)), - max(0, int(box[1] - support_y)), - min(self.size[0], math.ceil(box[2] + support_x)), - min(self.size[1], math.ceil(box[3] + support_y)), - ) - - def resize( - self, - size: tuple[int, int] | list[int] | NumpyArray, - resample: int | None = None, - box: tuple[float, float, float, float] | None = None, - reducing_gap: float | None = None, - ) -> Image: - """ - Returns a resized copy of this image. - - :param size: The requested size in pixels, as a tuple or array: - (width, height). - :param resample: An optional resampling filter. This can be - one of :py:data:`Resampling.NEAREST`, :py:data:`Resampling.BOX`, - :py:data:`Resampling.BILINEAR`, :py:data:`Resampling.HAMMING`, - :py:data:`Resampling.BICUBIC` or :py:data:`Resampling.LANCZOS`. - If the image has mode "1" or "P", it is always set to - :py:data:`Resampling.NEAREST`. If the image mode is "BGR;15", - "BGR;16" or "BGR;24", then the default filter is - :py:data:`Resampling.NEAREST`. Otherwise, the default filter is - :py:data:`Resampling.BICUBIC`. See: :ref:`concept-filters`. - :param box: An optional 4-tuple of floats providing - the source image region to be scaled. - The values must be within (0, 0, width, height) rectangle. - If omitted or None, the entire source is used. - :param reducing_gap: Apply optimization by resizing the image - in two steps. First, reducing the image by integer times - using :py:meth:`~PIL.Image.Image.reduce`. - Second, resizing using regular resampling. The last step - changes size no less than by ``reducing_gap`` times. - ``reducing_gap`` may be None (no first step is performed) - or should be greater than 1.0. The bigger ``reducing_gap``, - the closer the result to the fair resampling. - The smaller ``reducing_gap``, the faster resizing. - With ``reducing_gap`` greater or equal to 3.0, the result is - indistinguishable from fair resampling in most cases. - The default value is None (no optimization). - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if resample is None: - bgr = self.mode.startswith("BGR;") - resample = Resampling.NEAREST if bgr else Resampling.BICUBIC - elif resample not in ( - Resampling.NEAREST, - Resampling.BILINEAR, - Resampling.BICUBIC, - Resampling.LANCZOS, - Resampling.BOX, - Resampling.HAMMING, - ): - msg = f"Unknown resampling filter ({resample})." - - filters = [ - f"{filter[1]} ({filter[0]})" - for filter in ( - (Resampling.NEAREST, "Image.Resampling.NEAREST"), - (Resampling.LANCZOS, "Image.Resampling.LANCZOS"), - (Resampling.BILINEAR, "Image.Resampling.BILINEAR"), - (Resampling.BICUBIC, "Image.Resampling.BICUBIC"), - (Resampling.BOX, "Image.Resampling.BOX"), - (Resampling.HAMMING, "Image.Resampling.HAMMING"), - ) - ] - msg += f" Use {', '.join(filters[:-1])} or {filters[-1]}" - raise ValueError(msg) - - if reducing_gap is not None and reducing_gap < 1.0: - msg = "reducing_gap must be 1.0 or greater" - raise ValueError(msg) - - if box is None: - box = (0, 0) + self.size - - size = tuple(size) - if self.size == size and box == (0, 0) + self.size: - return self.copy() - - if self.mode in ("1", "P"): - resample = Resampling.NEAREST - - if self.mode in ["LA", "RGBA"] and resample != Resampling.NEAREST: - im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) - im = im.resize(size, resample, box) - return im.convert(self.mode) - - self.load() - - if reducing_gap is not None and resample != Resampling.NEAREST: - factor_x = int((box[2] - box[0]) / size[0] / reducing_gap) or 1 - factor_y = int((box[3] - box[1]) / size[1] / reducing_gap) or 1 - if factor_x > 1 or factor_y > 1: - reduce_box = self._get_safe_box(size, cast(Resampling, resample), box) - factor = (factor_x, factor_y) - self = ( - self.reduce(factor, box=reduce_box) - if callable(self.reduce) - else Image.reduce(self, factor, box=reduce_box) - ) - box = ( - (box[0] - reduce_box[0]) / factor_x, - (box[1] - reduce_box[1]) / factor_y, - (box[2] - reduce_box[0]) / factor_x, - (box[3] - reduce_box[1]) / factor_y, - ) - - return self._new(self.im.resize(size, resample, box)) - - def reduce( - self, - factor: int | tuple[int, int], - box: tuple[int, int, int, int] | None = None, - ) -> Image: - """ - Returns a copy of the image reduced ``factor`` times. - If the size of the image is not dividable by ``factor``, - the resulting size will be rounded up. - - :param factor: A greater than 0 integer or tuple of two integers - for width and height separately. - :param box: An optional 4-tuple of ints providing - the source image region to be reduced. - The values must be within ``(0, 0, width, height)`` rectangle. - If omitted or ``None``, the entire source is used. - """ - if not isinstance(factor, (list, tuple)): - factor = (factor, factor) - - if box is None: - box = (0, 0) + self.size - - if factor == (1, 1) and box == (0, 0) + self.size: - return self.copy() - - if self.mode in ["LA", "RGBA"]: - im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) - im = im.reduce(factor, box) - return im.convert(self.mode) - - self.load() - - return self._new(self.im.reduce(factor, box)) - - def rotate( - self, - angle: float, - resample: Resampling = Resampling.NEAREST, - expand: int | bool = False, - center: tuple[float, float] | None = None, - translate: tuple[int, int] | None = None, - fillcolor: float | tuple[float, ...] | str | None = None, - ) -> Image: - """ - Returns a rotated copy of this image. This method returns a - copy of this image, rotated the given number of degrees counter - clockwise around its centre. - - :param angle: In degrees counter clockwise. - :param resample: An optional resampling filter. This can be - one of :py:data:`Resampling.NEAREST` (use nearest neighbour), - :py:data:`Resampling.BILINEAR` (linear interpolation in a 2x2 - environment), or :py:data:`Resampling.BICUBIC` (cubic spline - interpolation in a 4x4 environment). If omitted, or if the image has - mode "1" or "P", it is set to :py:data:`Resampling.NEAREST`. - See :ref:`concept-filters`. - :param expand: Optional expansion flag. If true, expands the output - image to make it large enough to hold the entire rotated image. - If false or omitted, make the output image the same size as the - input image. Note that the expand flag assumes rotation around - the center and no translation. - :param center: Optional center of rotation (a 2-tuple). Origin is - the upper left corner. Default is the center of the image. - :param translate: An optional post-rotate translation (a 2-tuple). - :param fillcolor: An optional color for area outside the rotated image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - angle = angle % 360.0 - - # Fast paths regardless of filter, as long as we're not - # translating or changing the center. - if not (center or translate): - if angle == 0: - return self.copy() - if angle == 180: - return self.transpose(Transpose.ROTATE_180) - if angle in (90, 270) and (expand or self.width == self.height): - return self.transpose( - Transpose.ROTATE_90 if angle == 90 else Transpose.ROTATE_270 - ) - - # Calculate the affine matrix. Note that this is the reverse - # transformation (from destination image to source) because we - # want to interpolate the (discrete) destination pixel from - # the local area around the (floating) source pixel. - - # The matrix we actually want (note that it operates from the right): - # (1, 0, tx) (1, 0, cx) ( cos a, sin a, 0) (1, 0, -cx) - # (0, 1, ty) * (0, 1, cy) * (-sin a, cos a, 0) * (0, 1, -cy) - # (0, 0, 1) (0, 0, 1) ( 0, 0, 1) (0, 0, 1) - - # The reverse matrix is thus: - # (1, 0, cx) ( cos -a, sin -a, 0) (1, 0, -cx) (1, 0, -tx) - # (0, 1, cy) * (-sin -a, cos -a, 0) * (0, 1, -cy) * (0, 1, -ty) - # (0, 0, 1) ( 0, 0, 1) (0, 0, 1) (0, 0, 1) - - # In any case, the final translation may be updated at the end to - # compensate for the expand flag. - - w, h = self.size - - if translate is None: - post_trans = (0, 0) - else: - post_trans = translate - if center is None: - center = (w / 2, h / 2) - - angle = -math.radians(angle) - matrix = [ - round(math.cos(angle), 15), - round(math.sin(angle), 15), - 0.0, - round(-math.sin(angle), 15), - round(math.cos(angle), 15), - 0.0, - ] - - def transform(x: float, y: float, matrix: list[float]) -> tuple[float, float]: - (a, b, c, d, e, f) = matrix - return a * x + b * y + c, d * x + e * y + f - - matrix[2], matrix[5] = transform( - -center[0] - post_trans[0], -center[1] - post_trans[1], matrix - ) - matrix[2] += center[0] - matrix[5] += center[1] - - if expand: - # calculate output size - xx = [] - yy = [] - for x, y in ((0, 0), (w, 0), (w, h), (0, h)): - transformed_x, transformed_y = transform(x, y, matrix) - xx.append(transformed_x) - yy.append(transformed_y) - nw = math.ceil(max(xx)) - math.floor(min(xx)) - nh = math.ceil(max(yy)) - math.floor(min(yy)) - - # We multiply a translation matrix from the right. Because of its - # special form, this is the same as taking the image of the - # translation vector as new translation vector. - matrix[2], matrix[5] = transform(-(nw - w) / 2.0, -(nh - h) / 2.0, matrix) - w, h = nw, nh - - return self.transform( - (w, h), Transform.AFFINE, matrix, resample, fillcolor=fillcolor - ) - - def save( - self, fp: StrOrBytesPath | IO[bytes], format: str | None = None, **params: Any - ) -> None: - """ - Saves this image under the given filename. If no format is - specified, the format to use is determined from the filename - extension, if possible. - - Keyword options can be used to provide additional instructions - to the writer. If a writer doesn't recognise an option, it is - silently ignored. The available options are described in the - :doc:`image format documentation - <../handbook/image-file-formats>` for each writer. - - You can use a file object instead of a filename. In this case, - you must always specify the format. The file object must - implement the ``seek``, ``tell``, and ``write`` - methods, and be opened in binary mode. - - :param fp: A filename (string), os.PathLike object or file object. - :param format: Optional format override. If omitted, the - format to use is determined from the filename extension. - If a file object was used instead of a filename, this - parameter should always be used. - :param params: Extra parameters to the image writer. These can also be - set on the image itself through ``encoderinfo``. This is useful when - saving multiple images:: - - # Saving XMP data to a single image - from PIL import Image - red = Image.new("RGB", (1, 1), "#f00") - red.save("out.mpo", xmp=b"test") - - # Saving XMP data to the second frame of an image - from PIL import Image - black = Image.new("RGB", (1, 1)) - red = Image.new("RGB", (1, 1), "#f00") - red.encoderinfo = {"xmp": b"test"} - black.save("out.mpo", save_all=True, append_images=[red]) - :returns: None - :exception ValueError: If the output format could not be determined - from the file name. Use the format option to solve this. - :exception OSError: If the file could not be written. The file - may have been created, and may contain partial data. - """ - - filename: str | bytes = "" - open_fp = False - if is_path(fp): - filename = os.fspath(fp) - open_fp = True - elif fp == sys.stdout: - try: - fp = sys.stdout.buffer - except AttributeError: - pass - if not filename and hasattr(fp, "name") and is_path(fp.name): - # only set the name for metadata purposes - filename = os.fspath(fp.name) - - preinit() - - filename_ext = os.path.splitext(filename)[1].lower() - ext = filename_ext.decode() if isinstance(filename_ext, bytes) else filename_ext - - if not format: - if ext not in EXTENSION: - init() - try: - format = EXTENSION[ext] - except KeyError as e: - msg = f"unknown file extension: {ext}" - raise ValueError(msg) from e - - from . import ImageFile - - # may mutate self! - if isinstance(self, ImageFile.ImageFile) and os.path.abspath( - filename - ) == os.path.abspath(self.filename): - self._ensure_mutable() - else: - self.load() - - save_all = params.pop("save_all", None) - self._default_encoderinfo = params - encoderinfo = getattr(self, "encoderinfo", {}) - self._attach_default_encoderinfo(self) - self.encoderconfig: tuple[Any, ...] = () - - if format.upper() not in SAVE: - init() - if save_all or ( - save_all is None - and params.get("append_images") - and format.upper() in SAVE_ALL - ): - save_handler = SAVE_ALL[format.upper()] - else: - save_handler = SAVE[format.upper()] - - created = False - if open_fp: - created = not os.path.exists(filename) - if params.get("append", False): - # Open also for reading ("+"), because TIFF save_all - # writer needs to go back and edit the written data. - fp = builtins.open(filename, "r+b") - else: - fp = builtins.open(filename, "w+b") - else: - fp = cast(IO[bytes], fp) - - try: - save_handler(self, fp, filename) - except Exception: - if open_fp: - fp.close() - if created: - try: - os.remove(filename) - except PermissionError: - pass - raise - finally: - self.encoderinfo = encoderinfo - if open_fp: - fp.close() - - def _attach_default_encoderinfo(self, im: Image) -> dict[str, Any]: - encoderinfo = getattr(self, "encoderinfo", {}) - self.encoderinfo = {**im._default_encoderinfo, **encoderinfo} - return encoderinfo - - def seek(self, frame: int) -> None: - """ - Seeks to the given frame in this sequence file. If you seek - beyond the end of the sequence, the method raises an - ``EOFError`` exception. When a sequence file is opened, the - library automatically seeks to frame 0. - - See :py:meth:`~PIL.Image.Image.tell`. - - If defined, :attr:`~PIL.Image.Image.n_frames` refers to the - number of available frames. - - :param frame: Frame number, starting at 0. - :exception EOFError: If the call attempts to seek beyond the end - of the sequence. - """ - - # overridden by file handlers - if frame != 0: - msg = "no more images in file" - raise EOFError(msg) - - def show(self, title: str | None = None) -> None: - """ - Displays this image. This method is mainly intended for debugging purposes. - - This method calls :py:func:`PIL.ImageShow.show` internally. You can use - :py:func:`PIL.ImageShow.register` to override its default behaviour. - - The image is first saved to a temporary file. By default, it will be in - PNG format. - - On Unix, the image is then opened using the **xdg-open**, **display**, - **gm**, **eog** or **xv** utility, depending on which one can be found. - - On macOS, the image is opened with the native Preview application. - - On Windows, the image is opened with the standard PNG display utility. - - :param title: Optional title to use for the image window, where possible. - """ - - _show(self, title=title) - - def split(self) -> tuple[Image, ...]: - """ - Split this image into individual bands. This method returns a - tuple of individual image bands from an image. For example, - splitting an "RGB" image creates three new images each - containing a copy of one of the original bands (red, green, - blue). - - If you need only one band, :py:meth:`~PIL.Image.Image.getchannel` - method can be more convenient and faster. - - :returns: A tuple containing bands. - """ - - self.load() - if self.im.bands == 1: - return (self.copy(),) - return tuple(map(self._new, self.im.split())) - - def getchannel(self, channel: int | str) -> Image: - """ - Returns an image containing a single channel of the source image. - - :param channel: What channel to return. Could be index - (0 for "R" channel of "RGB") or channel name - ("A" for alpha channel of "RGBA"). - :returns: An image in "L" mode. - - .. versionadded:: 4.3.0 - """ - self.load() - - if isinstance(channel, str): - try: - channel = self.getbands().index(channel) - except ValueError as e: - msg = f'The image has no channel "{channel}"' - raise ValueError(msg) from e - - return self._new(self.im.getband(channel)) - - def tell(self) -> int: - """ - Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`. - - If defined, :attr:`~PIL.Image.Image.n_frames` refers to the - number of available frames. - - :returns: Frame number, starting with 0. - """ - return 0 - - def thumbnail( - self, - size: tuple[float, float], - resample: Resampling = Resampling.BICUBIC, - reducing_gap: float | None = 2.0, - ) -> None: - """ - Make this image into a thumbnail. This method modifies the - image to contain a thumbnail version of itself, no larger than - the given size. This method calculates an appropriate thumbnail - size to preserve the aspect of the image, calls the - :py:meth:`~PIL.Image.Image.draft` method to configure the file reader - (where applicable), and finally resizes the image. - - Note that this function modifies the :py:class:`~PIL.Image.Image` - object in place. If you need to use the full resolution image as well, - apply this method to a :py:meth:`~PIL.Image.Image.copy` of the original - image. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param resample: Optional resampling filter. This can be one - of :py:data:`Resampling.NEAREST`, :py:data:`Resampling.BOX`, - :py:data:`Resampling.BILINEAR`, :py:data:`Resampling.HAMMING`, - :py:data:`Resampling.BICUBIC` or :py:data:`Resampling.LANCZOS`. - If omitted, it defaults to :py:data:`Resampling.BICUBIC`. - (was :py:data:`Resampling.NEAREST` prior to version 2.5.0). - See: :ref:`concept-filters`. - :param reducing_gap: Apply optimization by resizing the image - in two steps. First, reducing the image by integer times - using :py:meth:`~PIL.Image.Image.reduce` or - :py:meth:`~PIL.Image.Image.draft` for JPEG images. - Second, resizing using regular resampling. The last step - changes size no less than by ``reducing_gap`` times. - ``reducing_gap`` may be None (no first step is performed) - or should be greater than 1.0. The bigger ``reducing_gap``, - the closer the result to the fair resampling. - The smaller ``reducing_gap``, the faster resizing. - With ``reducing_gap`` greater or equal to 3.0, the result is - indistinguishable from fair resampling in most cases. - The default value is 2.0 (very close to fair resampling - while still being faster in many cases). - :returns: None - """ - - provided_size = tuple(map(math.floor, size)) - - def preserve_aspect_ratio() -> tuple[int, int] | None: - def round_aspect(number: float, key: Callable[[int], float]) -> int: - return max(min(math.floor(number), math.ceil(number), key=key), 1) - - x, y = provided_size - if x >= self.width and y >= self.height: - return None - - aspect = self.width / self.height - if x / y >= aspect: - x = round_aspect(y * aspect, key=lambda n: abs(aspect - n / y)) - else: - y = round_aspect( - x / aspect, key=lambda n: 0 if n == 0 else abs(aspect - x / n) - ) - return x, y - - preserved_size = preserve_aspect_ratio() - if preserved_size is None: - return - final_size = preserved_size - - box = None - if reducing_gap is not None: - res = self.draft( - None, (int(size[0] * reducing_gap), int(size[1] * reducing_gap)) - ) - if res is not None: - box = res[1] - - if self.size != final_size: - im = self.resize(final_size, resample, box=box, reducing_gap=reducing_gap) - - self.im = im.im - self._size = final_size - self._mode = self.im.mode - - self.readonly = 0 - - # FIXME: the different transform methods need further explanation - # instead of bloating the method docs, add a separate chapter. - def transform( - self, - size: tuple[int, int], - method: Transform | ImageTransformHandler | SupportsGetData, - data: Sequence[Any] | None = None, - resample: int = Resampling.NEAREST, - fill: int = 1, - fillcolor: float | tuple[float, ...] | str | None = None, - ) -> Image: - """ - Transforms this image. This method creates a new image with the - given size, and the same mode as the original, and copies data - to the new image using the given transform. - - :param size: The output size in pixels, as a 2-tuple: - (width, height). - :param method: The transformation method. This is one of - :py:data:`Transform.EXTENT` (cut out a rectangular subregion), - :py:data:`Transform.AFFINE` (affine transform), - :py:data:`Transform.PERSPECTIVE` (perspective transform), - :py:data:`Transform.QUAD` (map a quadrilateral to a rectangle), or - :py:data:`Transform.MESH` (map a number of source quadrilaterals - in one operation). - - It may also be an :py:class:`~PIL.Image.ImageTransformHandler` - object:: - - class Example(Image.ImageTransformHandler): - def transform(self, size, data, resample, fill=1): - # Return result - - Implementations of :py:class:`~PIL.Image.ImageTransformHandler` - for some of the :py:class:`Transform` methods are provided - in :py:mod:`~PIL.ImageTransform`. - - It may also be an object with a ``method.getdata`` method - that returns a tuple supplying new ``method`` and ``data`` values:: - - class Example: - def getdata(self): - method = Image.Transform.EXTENT - data = (0, 0, 100, 100) - return method, data - :param data: Extra data to the transformation method. - :param resample: Optional resampling filter. It can be one of - :py:data:`Resampling.NEAREST` (use nearest neighbour), - :py:data:`Resampling.BILINEAR` (linear interpolation in a 2x2 - environment), or :py:data:`Resampling.BICUBIC` (cubic spline - interpolation in a 4x4 environment). If omitted, or if the image - has mode "1" or "P", it is set to :py:data:`Resampling.NEAREST`. - See: :ref:`concept-filters`. - :param fill: If ``method`` is an - :py:class:`~PIL.Image.ImageTransformHandler` object, this is one of - the arguments passed to it. Otherwise, it is unused. - :param fillcolor: Optional fill color for the area outside the - transform in the output image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if self.mode in ("LA", "RGBA") and resample != Resampling.NEAREST: - return ( - self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) - .transform(size, method, data, resample, fill, fillcolor) - .convert(self.mode) - ) - - if isinstance(method, ImageTransformHandler): - return method.transform(size, self, resample=resample, fill=fill) - - if hasattr(method, "getdata"): - # compatibility w. old-style transform objects - method, data = method.getdata() - - if data is None: - msg = "missing method data" - raise ValueError(msg) - - im = new(self.mode, size, fillcolor) - if self.mode == "P" and self.palette: - im.palette = self.palette.copy() - im.info = self.info.copy() - if method == Transform.MESH: - # list of quads - for box, quad in data: - im.__transformer( - box, self, Transform.QUAD, quad, resample, fillcolor is None - ) - else: - im.__transformer( - (0, 0) + size, self, method, data, resample, fillcolor is None - ) - - return im - - def __transformer( - self, - box: tuple[int, int, int, int], - image: Image, - method: Transform, - data: Sequence[float], - resample: int = Resampling.NEAREST, - fill: bool = True, - ) -> None: - w = box[2] - box[0] - h = box[3] - box[1] - - if method == Transform.AFFINE: - data = data[:6] - - elif method == Transform.EXTENT: - # convert extent to an affine transform - x0, y0, x1, y1 = data - xs = (x1 - x0) / w - ys = (y1 - y0) / h - method = Transform.AFFINE - data = (xs, 0, x0, 0, ys, y0) - - elif method == Transform.PERSPECTIVE: - data = data[:8] - - elif method == Transform.QUAD: - # quadrilateral warp. data specifies the four corners - # given as NW, SW, SE, and NE. - nw = data[:2] - sw = data[2:4] - se = data[4:6] - ne = data[6:8] - x0, y0 = nw - As = 1.0 / w - At = 1.0 / h - data = ( - x0, - (ne[0] - x0) * As, - (sw[0] - x0) * At, - (se[0] - sw[0] - ne[0] + x0) * As * At, - y0, - (ne[1] - y0) * As, - (sw[1] - y0) * At, - (se[1] - sw[1] - ne[1] + y0) * As * At, - ) - - else: - msg = "unknown transformation method" - raise ValueError(msg) - - if resample not in ( - Resampling.NEAREST, - Resampling.BILINEAR, - Resampling.BICUBIC, - ): - if resample in (Resampling.BOX, Resampling.HAMMING, Resampling.LANCZOS): - unusable: dict[int, str] = { - Resampling.BOX: "Image.Resampling.BOX", - Resampling.HAMMING: "Image.Resampling.HAMMING", - Resampling.LANCZOS: "Image.Resampling.LANCZOS", - } - msg = unusable[resample] + f" ({resample}) cannot be used." - else: - msg = f"Unknown resampling filter ({resample})." - - filters = [ - f"{filter[1]} ({filter[0]})" - for filter in ( - (Resampling.NEAREST, "Image.Resampling.NEAREST"), - (Resampling.BILINEAR, "Image.Resampling.BILINEAR"), - (Resampling.BICUBIC, "Image.Resampling.BICUBIC"), - ) - ] - msg += f" Use {', '.join(filters[:-1])} or {filters[-1]}" - raise ValueError(msg) - - image.load() - - self.load() - - if image.mode in ("1", "P"): - resample = Resampling.NEAREST - - self.im.transform(box, image.im, method, data, resample, fill) - - def transpose(self, method: Transpose) -> Image: - """ - Transpose image (flip or rotate in 90 degree steps) - - :param method: One of :py:data:`Transpose.FLIP_LEFT_RIGHT`, - :py:data:`Transpose.FLIP_TOP_BOTTOM`, :py:data:`Transpose.ROTATE_90`, - :py:data:`Transpose.ROTATE_180`, :py:data:`Transpose.ROTATE_270`, - :py:data:`Transpose.TRANSPOSE` or :py:data:`Transpose.TRANSVERSE`. - :returns: Returns a flipped or rotated copy of this image. - """ - - self.load() - return self._new(self.im.transpose(method)) - - def effect_spread(self, distance: int) -> Image: - """ - Randomly spread pixels in an image. - - :param distance: Distance to spread pixels. - """ - self.load() - return self._new(self.im.effect_spread(distance)) - - def toqimage(self) -> ImageQt.ImageQt: - """Returns a QImage copy of this image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - msg = "Qt bindings are not installed" - raise ImportError(msg) - return ImageQt.toqimage(self) - - def toqpixmap(self) -> ImageQt.QPixmap: - """Returns a QPixmap copy of this image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - msg = "Qt bindings are not installed" - raise ImportError(msg) - return ImageQt.toqpixmap(self) - - -# -------------------------------------------------------------------- -# Abstract handlers. - - -class ImagePointHandler(abc.ABC): - """ - Used as a mixin by point transforms - (for use with :py:meth:`~PIL.Image.Image.point`) - """ - - @abc.abstractmethod - def point(self, im: Image) -> Image: - pass - - -class ImageTransformHandler(abc.ABC): - """ - Used as a mixin by geometry transforms - (for use with :py:meth:`~PIL.Image.Image.transform`) - """ - - @abc.abstractmethod - def transform( - self, - size: tuple[int, int], - image: Image, - **options: Any, - ) -> Image: - pass - - -# -------------------------------------------------------------------- -# Factories - - -def _check_size(size: Any) -> None: - """ - Common check to enforce type and sanity check on size tuples - - :param size: Should be a 2 tuple of (width, height) - :returns: None, or raises a ValueError - """ - - if not isinstance(size, (list, tuple)): - msg = "Size must be a list or tuple" - raise ValueError(msg) - if len(size) != 2: - msg = "Size must be a sequence of length 2" - raise ValueError(msg) - if size[0] < 0 or size[1] < 0: - msg = "Width and height must be >= 0" - raise ValueError(msg) - - -def new( - mode: str, - size: tuple[int, int] | list[int], - color: float | tuple[float, ...] | str | None = 0, -) -> Image: - """ - Creates a new image with the given mode and size. - - :param mode: The mode to use for the new image. See: - :ref:`concept-modes`. - :param size: A 2-tuple, containing (width, height) in pixels. - :param color: What color to use for the image. Default is black. - If given, this should be a single integer or floating point value - for single-band modes, and a tuple for multi-band modes (one value - per band). When creating RGB or HSV images, you can also use color - strings as supported by the ImageColor module. If the color is - None, the image is not initialised. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if mode in ("BGR;15", "BGR;16", "BGR;24"): - deprecate(mode, 12) - - _check_size(size) - - if color is None: - # don't initialize - return Image()._new(core.new(mode, size)) - - if isinstance(color, str): - # css3-style specifier - - from . import ImageColor - - color = ImageColor.getcolor(color, mode) - - im = Image() - if ( - mode == "P" - and isinstance(color, (list, tuple)) - and all(isinstance(i, int) for i in color) - ): - color_ints: tuple[int, ...] = cast(tuple[int, ...], tuple(color)) - if len(color_ints) == 3 or len(color_ints) == 4: - # RGB or RGBA value for a P image - from . import ImagePalette - - im.palette = ImagePalette.ImagePalette() - color = im.palette.getcolor(color_ints) - return im._new(core.fill(mode, size, color)) - - -def frombytes( - mode: str, - size: tuple[int, int], - data: bytes | bytearray | SupportsArrayInterface, - decoder_name: str = "raw", - *args: Any, -) -> Image: - """ - Creates a copy of an image memory from pixel data in a buffer. - - In its simplest form, this function takes three arguments - (mode, size, and unpacked pixel data). - - You can also use any pixel decoder supported by PIL. For more - information on available decoders, see the section - :ref:`Writing Your Own File Codec `. - - Note that this function decodes pixel data only, not entire images. - If you have an entire image in a string, wrap it in a - :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load - it. - - :param mode: The image mode. See: :ref:`concept-modes`. - :param size: The image size. - :param data: A byte buffer containing raw data for the given mode. - :param decoder_name: What decoder to use. - :param args: Additional parameters for the given decoder. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - _check_size(size) - - im = new(mode, size) - if im.width != 0 and im.height != 0: - decoder_args: Any = args - if len(decoder_args) == 1 and isinstance(decoder_args[0], tuple): - # may pass tuple instead of argument list - decoder_args = decoder_args[0] - - if decoder_name == "raw" and decoder_args == (): - decoder_args = mode - - im.frombytes(data, decoder_name, decoder_args) - return im - - -def frombuffer( - mode: str, - size: tuple[int, int], - data: bytes | SupportsArrayInterface, - decoder_name: str = "raw", - *args: Any, -) -> Image: - """ - Creates an image memory referencing pixel data in a byte buffer. - - This function is similar to :py:func:`~PIL.Image.frombytes`, but uses data - in the byte buffer, where possible. This means that changes to the - original buffer object are reflected in this image). Not all modes can - share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK". - - Note that this function decodes pixel data only, not entire images. - If you have an entire image file in a string, wrap it in a - :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load it. - - The default parameters used for the "raw" decoder differs from that used for - :py:func:`~PIL.Image.frombytes`. This is a bug, and will probably be fixed in a - future release. The current release issues a warning if you do this; to disable - the warning, you should provide the full set of parameters. See below for details. - - :param mode: The image mode. See: :ref:`concept-modes`. - :param size: The image size. - :param data: A bytes or other buffer object containing raw - data for the given mode. - :param decoder_name: What decoder to use. - :param args: Additional parameters for the given decoder. For the - default encoder ("raw"), it's recommended that you provide the - full set of parameters:: - - frombuffer(mode, size, data, "raw", mode, 0, 1) - - :returns: An :py:class:`~PIL.Image.Image` object. - - .. versionadded:: 1.1.4 - """ - - _check_size(size) - - # may pass tuple instead of argument list - if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] - - if decoder_name == "raw": - if args == (): - args = mode, 0, 1 - if args[0] in _MAPMODES: - im = new(mode, (0, 0)) - im = im._new(core.map_buffer(data, size, decoder_name, 0, args)) - if mode == "P": - from . import ImagePalette - - im.palette = ImagePalette.ImagePalette("RGB", im.im.getpalette("RGB")) - im.readonly = 1 - return im - - return frombytes(mode, size, data, decoder_name, args) - - -class SupportsArrayInterface(Protocol): - """ - An object that has an ``__array_interface__`` dictionary. - """ - - @property - def __array_interface__(self) -> dict[str, Any]: - raise NotImplementedError() - - -class SupportsArrowArrayInterface(Protocol): - """ - An object that has an ``__arrow_c_array__`` method corresponding to the arrow c - data interface. - """ - - def __arrow_c_array__( - self, requested_schema: "PyCapsule" = None # type: ignore[name-defined] # noqa: F821, UP037 - ) -> tuple["PyCapsule", "PyCapsule"]: # type: ignore[name-defined] # noqa: F821, UP037 - raise NotImplementedError() - - -def fromarray(obj: SupportsArrayInterface, mode: str | None = None) -> Image: - """ - Creates an image memory from an object exporting the array interface - (using the buffer protocol):: - - from PIL import Image - import numpy as np - a = np.zeros((5, 5)) - im = Image.fromarray(a) - - If ``obj`` is not contiguous, then the ``tobytes`` method is called - and :py:func:`~PIL.Image.frombuffer` is used. - - In the case of NumPy, be aware that Pillow modes do not always correspond - to NumPy dtypes. Pillow modes only offer 1-bit pixels, 8-bit pixels, - 32-bit signed integer pixels, and 32-bit floating point pixels. - - Pillow images can also be converted to arrays:: - - from PIL import Image - import numpy as np - im = Image.open("hopper.jpg") - a = np.asarray(im) - - When converting Pillow images to arrays however, only pixel values are - transferred. This means that P and PA mode images will lose their palette. - - :param obj: Object with array interface - :param mode: Optional mode to use when reading ``obj``. Will be determined from - type if ``None``. Deprecated. - - This will not be used to convert the data after reading, but will be used to - change how the data is read:: - - from PIL import Image - import numpy as np - a = np.full((1, 1), 300) - im = Image.fromarray(a, mode="L") - im.getpixel((0, 0)) # 44 - im = Image.fromarray(a, mode="RGB") - im.getpixel((0, 0)) # (44, 1, 0) - - See: :ref:`concept-modes` for general information about modes. - :returns: An image object. - - .. versionadded:: 1.1.6 - """ - arr = obj.__array_interface__ - shape = arr["shape"] - ndim = len(shape) - strides = arr.get("strides", None) - if mode is None: - try: - typekey = (1, 1) + shape[2:], arr["typestr"] - except KeyError as e: - msg = "Cannot handle this data type" - raise TypeError(msg) from e - try: - mode, rawmode = _fromarray_typemap[typekey] - except KeyError as e: - typekey_shape, typestr = typekey - msg = f"Cannot handle this data type: {typekey_shape}, {typestr}" - raise TypeError(msg) from e - else: - deprecate("'mode' parameter", 13) - rawmode = mode - if mode in ["1", "L", "I", "P", "F"]: - ndmax = 2 - elif mode == "RGB": - ndmax = 3 - else: - ndmax = 4 - if ndim > ndmax: - msg = f"Too many dimensions: {ndim} > {ndmax}." - raise ValueError(msg) - - size = 1 if ndim == 1 else shape[1], shape[0] - if strides is not None: - if hasattr(obj, "tobytes"): - obj = obj.tobytes() - elif hasattr(obj, "tostring"): - obj = obj.tostring() - else: - msg = "'strides' requires either tobytes() or tostring()" - raise ValueError(msg) - - return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) - - -def fromarrow( - obj: SupportsArrowArrayInterface, mode: str, size: tuple[int, int] -) -> Image: - """Creates an image with zero-copy shared memory from an object exporting - the arrow_c_array interface protocol:: - - from PIL import Image - import pyarrow as pa - arr = pa.array([0]*(5*5*4), type=pa.uint8()) - im = Image.fromarrow(arr, 'RGBA', (5, 5)) - - If the data representation of the ``obj`` is not compatible with - Pillow internal storage, a ValueError is raised. - - Pillow images can also be converted to Arrow objects:: - - from PIL import Image - import pyarrow as pa - im = Image.open('hopper.jpg') - arr = pa.array(im) - - As with array support, when converting Pillow images to arrays, - only pixel values are transferred. This means that P and PA mode - images will lose their palette. - - :param obj: Object with an arrow_c_array interface - :param mode: Image mode. - :param size: Image size. This must match the storage of the arrow object. - :returns: An Image object - - Note that according to the Arrow spec, both the producer and the - consumer should consider the exported array to be immutable, as - unsynchronized updates will potentially cause inconsistent data. - - See: :ref:`arrow-support` for more detailed information - - .. versionadded:: 11.2.1 - - """ - if not hasattr(obj, "__arrow_c_array__"): - msg = "arrow_c_array interface not found" - raise ValueError(msg) - - (schema_capsule, array_capsule) = obj.__arrow_c_array__() - _im = core.new_arrow(mode, size, schema_capsule, array_capsule) - if _im: - return Image()._new(_im) - - msg = "new_arrow returned None without an exception" - raise ValueError(msg) - - -def fromqimage(im: ImageQt.QImage) -> ImageFile.ImageFile: - """Creates an image instance from a QImage image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - msg = "Qt bindings are not installed" - raise ImportError(msg) - return ImageQt.fromqimage(im) - - -def fromqpixmap(im: ImageQt.QPixmap) -> ImageFile.ImageFile: - """Creates an image instance from a QPixmap image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - msg = "Qt bindings are not installed" - raise ImportError(msg) - return ImageQt.fromqpixmap(im) - - -_fromarray_typemap = { - # (shape, typestr) => mode, rawmode - # first two members of shape are set to one - ((1, 1), "|b1"): ("1", "1;8"), - ((1, 1), "|u1"): ("L", "L"), - ((1, 1), "|i1"): ("I", "I;8"), - ((1, 1), "u2"): ("I", "I;16B"), - ((1, 1), "i2"): ("I", "I;16BS"), - ((1, 1), "u4"): ("I", "I;32B"), - ((1, 1), "i4"): ("I", "I;32BS"), - ((1, 1), "f4"): ("F", "F;32BF"), - ((1, 1), "f8"): ("F", "F;64BF"), - ((1, 1, 2), "|u1"): ("LA", "LA"), - ((1, 1, 3), "|u1"): ("RGB", "RGB"), - ((1, 1, 4), "|u1"): ("RGBA", "RGBA"), - # shortcuts: - ((1, 1), f"{_ENDIAN}i4"): ("I", "I"), - ((1, 1), f"{_ENDIAN}f4"): ("F", "F"), -} - - -def _decompression_bomb_check(size: tuple[int, int]) -> None: - if MAX_IMAGE_PIXELS is None: - return - - pixels = max(1, size[0]) * max(1, size[1]) - - if pixels > 2 * MAX_IMAGE_PIXELS: - msg = ( - f"Image size ({pixels} pixels) exceeds limit of {2 * MAX_IMAGE_PIXELS} " - "pixels, could be decompression bomb DOS attack." - ) - raise DecompressionBombError(msg) - - if pixels > MAX_IMAGE_PIXELS: - warnings.warn( - f"Image size ({pixels} pixels) exceeds limit of {MAX_IMAGE_PIXELS} pixels, " - "could be decompression bomb DOS attack.", - DecompressionBombWarning, - ) - - -def open( - fp: StrOrBytesPath | IO[bytes], - mode: Literal["r"] = "r", - formats: list[str] | tuple[str, ...] | None = None, -) -> ImageFile.ImageFile: - """ - Opens and identifies the given image file. - - This is a lazy operation; this function identifies the file, but - the file remains open and the actual image data is not read from - the file until you try to process the data (or call the - :py:meth:`~PIL.Image.Image.load` method). See - :py:func:`~PIL.Image.new`. See :ref:`file-handling`. - - :param fp: A filename (string), os.PathLike object or a file object. - The file object must implement ``file.read``, - ``file.seek``, and ``file.tell`` methods, - and be opened in binary mode. The file object will also seek to zero - before reading. - :param mode: The mode. If given, this argument must be "r". - :param formats: A list or tuple of formats to attempt to load the file in. - This can be used to restrict the set of formats checked. - Pass ``None`` to try all supported formats. You can print the set of - available formats by running ``python3 -m PIL`` or using - the :py:func:`PIL.features.pilinfo` function. - :returns: An :py:class:`~PIL.Image.Image` object. - :exception FileNotFoundError: If the file cannot be found. - :exception PIL.UnidentifiedImageError: If the image cannot be opened and - identified. - :exception ValueError: If the ``mode`` is not "r", or if a ``StringIO`` - instance is used for ``fp``. - :exception TypeError: If ``formats`` is not ``None``, a list or a tuple. - """ - - if mode != "r": - msg = f"bad mode {repr(mode)}" # type: ignore[unreachable] - raise ValueError(msg) - elif isinstance(fp, io.StringIO): - msg = ( # type: ignore[unreachable] - "StringIO cannot be used to open an image. " - "Binary data must be used instead." - ) - raise ValueError(msg) - - if formats is None: - formats = ID - elif not isinstance(formats, (list, tuple)): - msg = "formats must be a list or tuple" # type: ignore[unreachable] - raise TypeError(msg) - - exclusive_fp = False - filename: str | bytes = "" - if is_path(fp): - filename = os.fspath(fp) - fp = builtins.open(filename, "rb") - exclusive_fp = True - else: - fp = cast(IO[bytes], fp) - - try: - fp.seek(0) - except (AttributeError, io.UnsupportedOperation): - fp = io.BytesIO(fp.read()) - exclusive_fp = True - - prefix = fp.read(16) - - preinit() - - warning_messages: list[str] = [] - - def _open_core( - fp: IO[bytes], - filename: str | bytes, - prefix: bytes, - formats: list[str] | tuple[str, ...], - ) -> ImageFile.ImageFile | None: - for i in formats: - i = i.upper() - if i not in OPEN: - init() - try: - factory, accept = OPEN[i] - result = not accept or accept(prefix) - if isinstance(result, str): - warning_messages.append(result) - elif result: - fp.seek(0) - im = factory(fp, filename) - _decompression_bomb_check(im.size) - return im - except (SyntaxError, IndexError, TypeError, struct.error) as e: - if WARN_POSSIBLE_FORMATS: - warning_messages.append(i + " opening failed. " + str(e)) - except BaseException: - if exclusive_fp: - fp.close() - raise - return None - - im = _open_core(fp, filename, prefix, formats) - - if im is None and formats is ID: - checked_formats = ID.copy() - if init(): - im = _open_core( - fp, - filename, - prefix, - tuple(format for format in formats if format not in checked_formats), - ) - - if im: - im._exclusive_fp = exclusive_fp - return im - - if exclusive_fp: - fp.close() - for message in warning_messages: - warnings.warn(message) - msg = "cannot identify image file %r" % (filename if filename else fp) - raise UnidentifiedImageError(msg) - - -# -# Image processing. - - -def alpha_composite(im1: Image, im2: Image) -> Image: - """ - Alpha composite im2 over im1. - - :param im1: The first image. Must have mode RGBA. - :param im2: The second image. Must have mode RGBA, and the same size as - the first image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - im1.load() - im2.load() - return im1._new(core.alpha_composite(im1.im, im2.im)) - - -def blend(im1: Image, im2: Image, alpha: float) -> Image: - """ - Creates a new image by interpolating between two input images, using - a constant alpha:: - - out = image1 * (1.0 - alpha) + image2 * alpha - - :param im1: The first image. - :param im2: The second image. Must have the same mode and size as - the first image. - :param alpha: The interpolation alpha factor. If alpha is 0.0, a - copy of the first image is returned. If alpha is 1.0, a copy of - the second image is returned. There are no restrictions on the - alpha value. If necessary, the result is clipped to fit into - the allowed output range. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - im1.load() - im2.load() - return im1._new(core.blend(im1.im, im2.im, alpha)) - - -def composite(image1: Image, image2: Image, mask: Image) -> Image: - """ - Create composite image by blending images using a transparency mask. - - :param image1: The first image. - :param image2: The second image. Must have the same mode and - size as the first image. - :param mask: A mask image. This image can have mode - "1", "L", or "RGBA", and must have the same size as the - other two images. - """ - - image = image2.copy() - image.paste(image1, None, mask) - return image - - -def eval(image: Image, *args: Callable[[int], float]) -> Image: - """ - Applies the function (which should take one argument) to each pixel - in the given image. If the image has more than one band, the same - function is applied to each band. Note that the function is - evaluated once for each possible pixel value, so you cannot use - random components or other generators. - - :param image: The input image. - :param function: A function object, taking one integer argument. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - return image.point(args[0]) - - -def merge(mode: str, bands: Sequence[Image]) -> Image: - """ - Merge a set of single band images into a new multiband image. - - :param mode: The mode to use for the output image. See: - :ref:`concept-modes`. - :param bands: A sequence containing one single-band image for - each band in the output image. All bands must have the - same size. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if getmodebands(mode) != len(bands) or "*" in mode: - msg = "wrong number of bands" - raise ValueError(msg) - for band in bands[1:]: - if band.mode != getmodetype(mode): - msg = "mode mismatch" - raise ValueError(msg) - if band.size != bands[0].size: - msg = "size mismatch" - raise ValueError(msg) - for band in bands: - band.load() - return bands[0]._new(core.merge(mode, *[b.im for b in bands])) - - -# -------------------------------------------------------------------- -# Plugin registry - - -def register_open( - id: str, - factory: ( - Callable[[IO[bytes], str | bytes], ImageFile.ImageFile] - | type[ImageFile.ImageFile] - ), - accept: Callable[[bytes], bool | str] | None = None, -) -> None: - """ - Register an image file plugin. This function should not be used - in application code. - - :param id: An image format identifier. - :param factory: An image file factory method. - :param accept: An optional function that can be used to quickly - reject images having another format. - """ - id = id.upper() - if id not in ID: - ID.append(id) - OPEN[id] = factory, accept - - -def register_mime(id: str, mimetype: str) -> None: - """ - Registers an image MIME type by populating ``Image.MIME``. This function - should not be used in application code. - - ``Image.MIME`` provides a mapping from image format identifiers to mime - formats, but :py:meth:`~PIL.ImageFile.ImageFile.get_format_mimetype` can - provide a different result for specific images. - - :param id: An image format identifier. - :param mimetype: The image MIME type for this format. - """ - MIME[id.upper()] = mimetype - - -def register_save( - id: str, driver: Callable[[Image, IO[bytes], str | bytes], None] -) -> None: - """ - Registers an image save function. This function should not be - used in application code. - - :param id: An image format identifier. - :param driver: A function to save images in this format. - """ - SAVE[id.upper()] = driver - - -def register_save_all( - id: str, driver: Callable[[Image, IO[bytes], str | bytes], None] -) -> None: - """ - Registers an image function to save all the frames - of a multiframe format. This function should not be - used in application code. - - :param id: An image format identifier. - :param driver: A function to save images in this format. - """ - SAVE_ALL[id.upper()] = driver - - -def register_extension(id: str, extension: str) -> None: - """ - Registers an image extension. This function should not be - used in application code. - - :param id: An image format identifier. - :param extension: An extension used for this format. - """ - EXTENSION[extension.lower()] = id.upper() - - -def register_extensions(id: str, extensions: list[str]) -> None: - """ - Registers image extensions. This function should not be - used in application code. - - :param id: An image format identifier. - :param extensions: A list of extensions used for this format. - """ - for extension in extensions: - register_extension(id, extension) - - -def registered_extensions() -> dict[str, str]: - """ - Returns a dictionary containing all file extensions belonging - to registered plugins - """ - init() - return EXTENSION - - -def register_decoder(name: str, decoder: type[ImageFile.PyDecoder]) -> None: - """ - Registers an image decoder. This function should not be - used in application code. - - :param name: The name of the decoder - :param decoder: An ImageFile.PyDecoder object - - .. versionadded:: 4.1.0 - """ - DECODERS[name] = decoder - - -def register_encoder(name: str, encoder: type[ImageFile.PyEncoder]) -> None: - """ - Registers an image encoder. This function should not be - used in application code. - - :param name: The name of the encoder - :param encoder: An ImageFile.PyEncoder object - - .. versionadded:: 4.1.0 - """ - ENCODERS[name] = encoder - - -# -------------------------------------------------------------------- -# Simple display support. - - -def _show(image: Image, **options: Any) -> None: - from . import ImageShow - - ImageShow.show(image, **options) - - -# -------------------------------------------------------------------- -# Effects - - -def effect_mandelbrot( - size: tuple[int, int], extent: tuple[float, float, float, float], quality: int -) -> Image: - """ - Generate a Mandelbrot set covering the given extent. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param extent: The extent to cover, as a 4-tuple: - (x0, y0, x1, y1). - :param quality: Quality. - """ - return Image()._new(core.effect_mandelbrot(size, extent, quality)) - - -def effect_noise(size: tuple[int, int], sigma: float) -> Image: - """ - Generate Gaussian noise centered around 128. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param sigma: Standard deviation of noise. - """ - return Image()._new(core.effect_noise(size, sigma)) - - -def linear_gradient(mode: str) -> Image: - """ - Generate 256x256 linear gradient from black to white, top to bottom. - - :param mode: Input mode. - """ - return Image()._new(core.linear_gradient(mode)) - - -def radial_gradient(mode: str) -> Image: - """ - Generate 256x256 radial gradient from black to white, centre to edge. - - :param mode: Input mode. - """ - return Image()._new(core.radial_gradient(mode)) - - -# -------------------------------------------------------------------- -# Resources - - -def _apply_env_variables(env: dict[str, str] | None = None) -> None: - env_dict = env if env is not None else os.environ - - for var_name, setter in [ - ("PILLOW_ALIGNMENT", core.set_alignment), - ("PILLOW_BLOCK_SIZE", core.set_block_size), - ("PILLOW_BLOCKS_MAX", core.set_blocks_max), - ]: - if var_name not in env_dict: - continue - - var = env_dict[var_name].lower() - - units = 1 - for postfix, mul in [("k", 1024), ("m", 1024 * 1024)]: - if var.endswith(postfix): - units = mul - var = var[: -len(postfix)] - - try: - var_int = int(var) * units - except ValueError: - warnings.warn(f"{var_name} is not int") - continue - - try: - setter(var_int) - except ValueError as e: - warnings.warn(f"{var_name}: {e}") - - -_apply_env_variables() -atexit.register(core.clear_cache) - - -if TYPE_CHECKING: - _ExifBase = MutableMapping[int, Any] -else: - _ExifBase = MutableMapping - - -class Exif(_ExifBase): - """ - This class provides read and write access to EXIF image data:: - - from PIL import Image - im = Image.open("exif.png") - exif = im.getexif() # Returns an instance of this class - - Information can be read and written, iterated over or deleted:: - - print(exif[274]) # 1 - exif[274] = 2 - for k, v in exif.items(): - print("Tag", k, "Value", v) # Tag 274 Value 2 - del exif[274] - - To access information beyond IFD0, :py:meth:`~PIL.Image.Exif.get_ifd` - returns a dictionary:: - - from PIL import ExifTags - im = Image.open("exif_gps.jpg") - exif = im.getexif() - gps_ifd = exif.get_ifd(ExifTags.IFD.GPSInfo) - print(gps_ifd) - - Other IFDs include ``ExifTags.IFD.Exif``, ``ExifTags.IFD.MakerNote``, - ``ExifTags.IFD.Interop`` and ``ExifTags.IFD.IFD1``. - - :py:mod:`~PIL.ExifTags` also has enum classes to provide names for data:: - - print(exif[ExifTags.Base.Software]) # PIL - print(gps_ifd[ExifTags.GPS.GPSDateStamp]) # 1999:99:99 99:99:99 - """ - - endian: str | None = None - bigtiff = False - _loaded = False - - def __init__(self) -> None: - self._data: dict[int, Any] = {} - self._hidden_data: dict[int, Any] = {} - self._ifds: dict[int, dict[int, Any]] = {} - self._info: TiffImagePlugin.ImageFileDirectory_v2 | None = None - self._loaded_exif: bytes | None = None - - def _fixup(self, value: Any) -> Any: - try: - if len(value) == 1 and isinstance(value, tuple): - return value[0] - except Exception: - pass - return value - - def _fixup_dict(self, src_dict: dict[int, Any]) -> dict[int, Any]: - # Helper function - # returns a dict with any single item tuples/lists as individual values - return {k: self._fixup(v) for k, v in src_dict.items()} - - def _get_ifd_dict( - self, offset: int, group: int | None = None - ) -> dict[int, Any] | None: - try: - # an offset pointer to the location of the nested embedded IFD. - # It should be a long, but may be corrupted. - self.fp.seek(offset) - except (KeyError, TypeError): - return None - else: - from . import TiffImagePlugin - - info = TiffImagePlugin.ImageFileDirectory_v2(self.head, group=group) - info.load(self.fp) - return self._fixup_dict(dict(info)) - - def _get_head(self) -> bytes: - version = b"\x2b" if self.bigtiff else b"\x2a" - if self.endian == "<": - head = b"II" + version + b"\x00" + o32le(8) - else: - head = b"MM\x00" + version + o32be(8) - if self.bigtiff: - head += o32le(8) if self.endian == "<" else o32be(8) - head += b"\x00\x00\x00\x00" - return head - - def load(self, data: bytes) -> None: - # Extract EXIF information. This is highly experimental, - # and is likely to be replaced with something better in a future - # version. - - # The EXIF record consists of a TIFF file embedded in a JPEG - # application marker (!). - if data == self._loaded_exif: - return - self._loaded_exif = data - self._data.clear() - self._hidden_data.clear() - self._ifds.clear() - while data and data.startswith(b"Exif\x00\x00"): - data = data[6:] - if not data: - self._info = None - return - - self.fp: IO[bytes] = io.BytesIO(data) - self.head = self.fp.read(8) - # process dictionary - from . import TiffImagePlugin - - self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) - self.endian = self._info._endian - self.fp.seek(self._info.next) - self._info.load(self.fp) - - def load_from_fp(self, fp: IO[bytes], offset: int | None = None) -> None: - self._loaded_exif = None - self._data.clear() - self._hidden_data.clear() - self._ifds.clear() - - # process dictionary - from . import TiffImagePlugin - - self.fp = fp - if offset is not None: - self.head = self._get_head() - else: - self.head = self.fp.read(8) - self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) - if self.endian is None: - self.endian = self._info._endian - if offset is None: - offset = self._info.next - self.fp.tell() - self.fp.seek(offset) - self._info.load(self.fp) - - def _get_merged_dict(self) -> dict[int, Any]: - merged_dict = dict(self) - - # get EXIF extension - if ExifTags.IFD.Exif in self: - ifd = self._get_ifd_dict(self[ExifTags.IFD.Exif], ExifTags.IFD.Exif) - if ifd: - merged_dict.update(ifd) - - # GPS - if ExifTags.IFD.GPSInfo in self: - merged_dict[ExifTags.IFD.GPSInfo] = self._get_ifd_dict( - self[ExifTags.IFD.GPSInfo], ExifTags.IFD.GPSInfo - ) - - return merged_dict - - def tobytes(self, offset: int = 8) -> bytes: - from . import TiffImagePlugin - - head = self._get_head() - ifd = TiffImagePlugin.ImageFileDirectory_v2(ifh=head) - for tag, ifd_dict in self._ifds.items(): - if tag not in self: - ifd[tag] = ifd_dict - for tag, value in self.items(): - if tag in [ - ExifTags.IFD.Exif, - ExifTags.IFD.GPSInfo, - ] and not isinstance(value, dict): - value = self.get_ifd(tag) - if ( - tag == ExifTags.IFD.Exif - and ExifTags.IFD.Interop in value - and not isinstance(value[ExifTags.IFD.Interop], dict) - ): - value = value.copy() - value[ExifTags.IFD.Interop] = self.get_ifd(ExifTags.IFD.Interop) - ifd[tag] = value - return b"Exif\x00\x00" + head + ifd.tobytes(offset) - - def get_ifd(self, tag: int) -> dict[int, Any]: - if tag not in self._ifds: - if tag == ExifTags.IFD.IFD1: - if self._info is not None and self._info.next != 0: - ifd = self._get_ifd_dict(self._info.next) - if ifd is not None: - self._ifds[tag] = ifd - elif tag in [ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo]: - offset = self._hidden_data.get(tag, self.get(tag)) - if offset is not None: - ifd = self._get_ifd_dict(offset, tag) - if ifd is not None: - self._ifds[tag] = ifd - elif tag in [ExifTags.IFD.Interop, ExifTags.IFD.MakerNote]: - if ExifTags.IFD.Exif not in self._ifds: - self.get_ifd(ExifTags.IFD.Exif) - tag_data = self._ifds[ExifTags.IFD.Exif][tag] - if tag == ExifTags.IFD.MakerNote: - from .TiffImagePlugin import ImageFileDirectory_v2 - - if tag_data.startswith(b"FUJIFILM"): - ifd_offset = i32le(tag_data, 8) - ifd_data = tag_data[ifd_offset:] - - makernote = {} - for i in range(struct.unpack(" 4: - (offset,) = struct.unpack("H", tag_data[:2])[0]): - ifd_tag, typ, count, data = struct.unpack( - ">HHL4s", tag_data[i * 12 + 2 : (i + 1) * 12 + 2] - ) - if ifd_tag == 0x1101: - # CameraInfo - (offset,) = struct.unpack(">L", data) - self.fp.seek(offset) - - camerainfo: dict[str, int | bytes] = { - "ModelID": self.fp.read(4) - } - - self.fp.read(4) - # Seconds since 2000 - camerainfo["TimeStamp"] = i32le(self.fp.read(12)) - - self.fp.read(4) - camerainfo["InternalSerialNumber"] = self.fp.read(4) - - self.fp.read(12) - parallax = self.fp.read(4) - handler = ImageFileDirectory_v2._load_dispatch[ - TiffTags.FLOAT - ][1] - camerainfo["Parallax"] = handler( - ImageFileDirectory_v2(), parallax, False - )[0] - - self.fp.read(4) - camerainfo["Category"] = self.fp.read(2) - - makernote = {0x1101: camerainfo} - self._ifds[tag] = makernote - else: - # Interop - ifd = self._get_ifd_dict(tag_data, tag) - if ifd is not None: - self._ifds[tag] = ifd - ifd = self._ifds.setdefault(tag, {}) - if tag == ExifTags.IFD.Exif and self._hidden_data: - ifd = { - k: v - for (k, v) in ifd.items() - if k not in (ExifTags.IFD.Interop, ExifTags.IFD.MakerNote) - } - return ifd - - def hide_offsets(self) -> None: - for tag in (ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo): - if tag in self: - self._hidden_data[tag] = self[tag] - del self[tag] - - def __str__(self) -> str: - if self._info is not None: - # Load all keys into self._data - for tag in self._info: - self[tag] - - return str(self._data) - - def __len__(self) -> int: - keys = set(self._data) - if self._info is not None: - keys.update(self._info) - return len(keys) - - def __getitem__(self, tag: int) -> Any: - if self._info is not None and tag not in self._data and tag in self._info: - self._data[tag] = self._fixup(self._info[tag]) - del self._info[tag] - return self._data[tag] - - def __contains__(self, tag: object) -> bool: - return tag in self._data or (self._info is not None and tag in self._info) - - def __setitem__(self, tag: int, value: Any) -> None: - if self._info is not None and tag in self._info: - del self._info[tag] - self._data[tag] = value - - def __delitem__(self, tag: int) -> None: - if self._info is not None and tag in self._info: - del self._info[tag] - else: - del self._data[tag] - - def __iter__(self) -> Iterator[int]: - keys = set(self._data) - if self._info is not None: - keys.update(self._info) - return iter(keys) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageChops.py b/myenv/lib/python3.12/site-packages/PIL/ImageChops.py deleted file mode 100644 index 29a5c99..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageChops.py +++ /dev/null @@ -1,311 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard channel operations -# -# History: -# 1996-03-24 fl Created -# 1996-08-13 fl Added logical operations (for "1" images) -# 2000-10-12 fl Added offset method (from Image.py) -# -# Copyright (c) 1997-2000 by Secret Labs AB -# Copyright (c) 1996-2000 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from __future__ import annotations - -from . import Image - - -def constant(image: Image.Image, value: int) -> Image.Image: - """Fill a channel with a given gray level. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.new("L", image.size, value) - - -def duplicate(image: Image.Image) -> Image.Image: - """Copy a channel. Alias for :py:meth:`PIL.Image.Image.copy`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return image.copy() - - -def invert(image: Image.Image) -> Image.Image: - """ - Invert an image (channel). :: - - out = MAX - image - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image.load() - return image._new(image.im.chop_invert()) - - -def lighter(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Compares the two images, pixel by pixel, and returns a new image containing - the lighter values. :: - - out = max(image1, image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_lighter(image2.im)) - - -def darker(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Compares the two images, pixel by pixel, and returns a new image containing - the darker values. :: - - out = min(image1, image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_darker(image2.im)) - - -def difference(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Returns the absolute value of the pixel-by-pixel difference between the two - images. :: - - out = abs(image1 - image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_difference(image2.im)) - - -def multiply(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Superimposes two images on top of each other. - - If you multiply an image with a solid black image, the result is black. If - you multiply with a solid white image, the image is unaffected. :: - - out = image1 * image2 / MAX - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_multiply(image2.im)) - - -def screen(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Superimposes two inverted images on top of each other. :: - - out = MAX - ((MAX - image1) * (MAX - image2) / MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_screen(image2.im)) - - -def soft_light(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Superimposes two images on top of each other using the Soft Light algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_soft_light(image2.im)) - - -def hard_light(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Superimposes two images on top of each other using the Hard Light algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_hard_light(image2.im)) - - -def overlay(image1: Image.Image, image2: Image.Image) -> Image.Image: - """ - Superimposes two images on top of each other using the Overlay algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_overlay(image2.im)) - - -def add( - image1: Image.Image, image2: Image.Image, scale: float = 1.0, offset: float = 0 -) -> Image.Image: - """ - Adds two images, dividing the result by scale and adding the - offset. If omitted, scale defaults to 1.0, and offset to 0.0. :: - - out = ((image1 + image2) / scale + offset) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_add(image2.im, scale, offset)) - - -def subtract( - image1: Image.Image, image2: Image.Image, scale: float = 1.0, offset: float = 0 -) -> Image.Image: - """ - Subtracts two images, dividing the result by scale and adding the offset. - If omitted, scale defaults to 1.0, and offset to 0.0. :: - - out = ((image1 - image2) / scale + offset) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_subtract(image2.im, scale, offset)) - - -def add_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image: - """Add two images, without clipping the result. :: - - out = ((image1 + image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_add_modulo(image2.im)) - - -def subtract_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image: - """Subtract two images, without clipping the result. :: - - out = ((image1 - image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_subtract_modulo(image2.im)) - - -def logical_and(image1: Image.Image, image2: Image.Image) -> Image.Image: - """Logical AND between two images. - - Both of the images must have mode "1". If you would like to perform a - logical AND on an image with a mode other than "1", try - :py:meth:`~PIL.ImageChops.multiply` instead, using a black-and-white mask - as the second image. :: - - out = ((image1 and image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_and(image2.im)) - - -def logical_or(image1: Image.Image, image2: Image.Image) -> Image.Image: - """Logical OR between two images. - - Both of the images must have mode "1". :: - - out = ((image1 or image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_or(image2.im)) - - -def logical_xor(image1: Image.Image, image2: Image.Image) -> Image.Image: - """Logical XOR between two images. - - Both of the images must have mode "1". :: - - out = ((bool(image1) != bool(image2)) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_xor(image2.im)) - - -def blend(image1: Image.Image, image2: Image.Image, alpha: float) -> Image.Image: - """Blend images using constant transparency weight. Alias for - :py:func:`PIL.Image.blend`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.blend(image1, image2, alpha) - - -def composite( - image1: Image.Image, image2: Image.Image, mask: Image.Image -) -> Image.Image: - """Create composite using transparency mask. Alias for - :py:func:`PIL.Image.composite`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.composite(image1, image2, mask) - - -def offset(image: Image.Image, xoffset: int, yoffset: int | None = None) -> Image.Image: - """Returns a copy of the image where data has been offset by the given - distances. Data wraps around the edges. If ``yoffset`` is omitted, it - is assumed to be equal to ``xoffset``. - - :param image: Input image. - :param xoffset: The horizontal distance. - :param yoffset: The vertical distance. If omitted, both - distances are set to the same value. - :rtype: :py:class:`~PIL.Image.Image` - """ - - if yoffset is None: - yoffset = xoffset - image.load() - return image._new(image.im.offset(xoffset, yoffset)) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageCms.py b/myenv/lib/python3.12/site-packages/PIL/ImageCms.py deleted file mode 100644 index a1584f1..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageCms.py +++ /dev/null @@ -1,1123 +0,0 @@ -# The Python Imaging Library. -# $Id$ - -# Optional color management support, based on Kevin Cazabon's PyCMS -# library. - -# Originally released under LGPL. Graciously donated to PIL in -# March 2009, for distribution under the standard PIL license - -# History: - -# 2009-03-08 fl Added to PIL. - -# Copyright (C) 2002-2003 Kevin Cazabon -# Copyright (c) 2009 by Fredrik Lundh -# Copyright (c) 2013 by Eric Soroos - -# See the README file for information on usage and redistribution. See -# below for the original description. -from __future__ import annotations - -import operator -import sys -from enum import IntEnum, IntFlag -from functools import reduce -from typing import Any, Literal, SupportsFloat, SupportsInt, Union - -from . import Image, __version__ -from ._deprecate import deprecate -from ._typing import SupportsRead - -try: - from . import _imagingcms as core - - _CmsProfileCompatible = Union[ - str, SupportsRead[bytes], core.CmsProfile, "ImageCmsProfile" - ] -except ImportError as ex: - # Allow error import for doc purposes, but error out when accessing - # anything in core. - from ._util import DeferredError - - core = DeferredError.new(ex) - -_DESCRIPTION = """ -pyCMS - - a Python / PIL interface to the littleCMS ICC Color Management System - Copyright (C) 2002-2003 Kevin Cazabon - kevin@cazabon.com - https://www.cazabon.com - - pyCMS home page: https://www.cazabon.com/pyCMS - littleCMS home page: https://www.littlecms.com - (littleCMS is Copyright (C) 1998-2001 Marti Maria) - - Originally released under LGPL. Graciously donated to PIL in - March 2009, for distribution under the standard PIL license - - The pyCMS.py module provides a "clean" interface between Python/PIL and - pyCMSdll, taking care of some of the more complex handling of the direct - pyCMSdll functions, as well as error-checking and making sure that all - relevant data is kept together. - - While it is possible to call pyCMSdll functions directly, it's not highly - recommended. - - Version History: - - 1.0.0 pil Oct 2013 Port to LCMS 2. - - 0.1.0 pil mod March 10, 2009 - - Renamed display profile to proof profile. The proof - profile is the profile of the device that is being - simulated, not the profile of the device which is - actually used to display/print the final simulation - (that'd be the output profile) - also see LCMSAPI.txt - input colorspace -> using 'renderingIntent' -> proof - colorspace -> using 'proofRenderingIntent' -> output - colorspace - - Added LCMS FLAGS support. - Added FLAGS["SOFTPROOFING"] as default flag for - buildProofTransform (otherwise the proof profile/intent - would be ignored). - - 0.1.0 pil March 2009 - added to PIL, as PIL.ImageCms - - 0.0.2 alpha Jan 6, 2002 - - Added try/except statements around type() checks of - potential CObjects... Python won't let you use type() - on them, and raises a TypeError (stupid, if you ask - me!) - - Added buildProofTransformFromOpenProfiles() function. - Additional fixes in DLL, see DLL code for details. - - 0.0.1 alpha first public release, Dec. 26, 2002 - - Known to-do list with current version (of Python interface, not pyCMSdll): - - none - -""" - -_VERSION = "1.0.0 pil" - - -def __getattr__(name: str) -> Any: - if name == "DESCRIPTION": - deprecate("PIL.ImageCms.DESCRIPTION", 12) - return _DESCRIPTION - elif name == "VERSION": - deprecate("PIL.ImageCms.VERSION", 12) - return _VERSION - elif name == "FLAGS": - deprecate("PIL.ImageCms.FLAGS", 12, "PIL.ImageCms.Flags") - return _FLAGS - msg = f"module '{__name__}' has no attribute '{name}'" - raise AttributeError(msg) - - -# --------------------------------------------------------------------. - - -# -# intent/direction values - - -class Intent(IntEnum): - PERCEPTUAL = 0 - RELATIVE_COLORIMETRIC = 1 - SATURATION = 2 - ABSOLUTE_COLORIMETRIC = 3 - - -class Direction(IntEnum): - INPUT = 0 - OUTPUT = 1 - PROOF = 2 - - -# -# flags - - -class Flags(IntFlag): - """Flags and documentation are taken from ``lcms2.h``.""" - - NONE = 0 - NOCACHE = 0x0040 - """Inhibit 1-pixel cache""" - NOOPTIMIZE = 0x0100 - """Inhibit optimizations""" - NULLTRANSFORM = 0x0200 - """Don't transform anyway""" - GAMUTCHECK = 0x1000 - """Out of Gamut alarm""" - SOFTPROOFING = 0x4000 - """Do softproofing""" - BLACKPOINTCOMPENSATION = 0x2000 - NOWHITEONWHITEFIXUP = 0x0004 - """Don't fix scum dot""" - HIGHRESPRECALC = 0x0400 - """Use more memory to give better accuracy""" - LOWRESPRECALC = 0x0800 - """Use less memory to minimize resources""" - # this should be 8BITS_DEVICELINK, but that is not a valid name in Python: - USE_8BITS_DEVICELINK = 0x0008 - """Create 8 bits devicelinks""" - GUESSDEVICECLASS = 0x0020 - """Guess device class (for ``transform2devicelink``)""" - KEEP_SEQUENCE = 0x0080 - """Keep profile sequence for devicelink creation""" - FORCE_CLUT = 0x0002 - """Force CLUT optimization""" - CLUT_POST_LINEARIZATION = 0x0001 - """create postlinearization tables if possible""" - CLUT_PRE_LINEARIZATION = 0x0010 - """create prelinearization tables if possible""" - NONEGATIVES = 0x8000 - """Prevent negative numbers in floating point transforms""" - COPY_ALPHA = 0x04000000 - """Alpha channels are copied on ``cmsDoTransform()``""" - NODEFAULTRESOURCEDEF = 0x01000000 - - _GRIDPOINTS_1 = 1 << 16 - _GRIDPOINTS_2 = 2 << 16 - _GRIDPOINTS_4 = 4 << 16 - _GRIDPOINTS_8 = 8 << 16 - _GRIDPOINTS_16 = 16 << 16 - _GRIDPOINTS_32 = 32 << 16 - _GRIDPOINTS_64 = 64 << 16 - _GRIDPOINTS_128 = 128 << 16 - - @staticmethod - def GRIDPOINTS(n: int) -> Flags: - """ - Fine-tune control over number of gridpoints - - :param n: :py:class:`int` in range ``0 <= n <= 255`` - """ - return Flags.NONE | ((n & 0xFF) << 16) - - -_MAX_FLAG = reduce(operator.or_, Flags) - - -_FLAGS = { - "MATRIXINPUT": 1, - "MATRIXOUTPUT": 2, - "MATRIXONLY": (1 | 2), - "NOWHITEONWHITEFIXUP": 4, # Don't hot fix scum dot - # Don't create prelinearization tables on precalculated transforms - # (internal use): - "NOPRELINEARIZATION": 16, - "GUESSDEVICECLASS": 32, # Guess device class (for transform2devicelink) - "NOTCACHE": 64, # Inhibit 1-pixel cache - "NOTPRECALC": 256, - "NULLTRANSFORM": 512, # Don't transform anyway - "HIGHRESPRECALC": 1024, # Use more memory to give better accuracy - "LOWRESPRECALC": 2048, # Use less memory to minimize resources - "WHITEBLACKCOMPENSATION": 8192, - "BLACKPOINTCOMPENSATION": 8192, - "GAMUTCHECK": 4096, # Out of Gamut alarm - "SOFTPROOFING": 16384, # Do softproofing - "PRESERVEBLACK": 32768, # Black preservation - "NODEFAULTRESOURCEDEF": 16777216, # CRD special - "GRIDPOINTS": lambda n: (n & 0xFF) << 16, # Gridpoints -} - - -# --------------------------------------------------------------------. -# Experimental PIL-level API -# --------------------------------------------------------------------. - -## -# Profile. - - -class ImageCmsProfile: - def __init__(self, profile: str | SupportsRead[bytes] | core.CmsProfile) -> None: - """ - :param profile: Either a string representing a filename, - a file like object containing a profile or a - low-level profile object - - """ - self.filename = None - self.product_name = None # profile.product_name - self.product_info = None # profile.product_info - - if isinstance(profile, str): - if sys.platform == "win32": - profile_bytes_path = profile.encode() - try: - profile_bytes_path.decode("ascii") - except UnicodeDecodeError: - with open(profile, "rb") as f: - self.profile = core.profile_frombytes(f.read()) - return - self.filename = profile - self.profile = core.profile_open(profile) - elif hasattr(profile, "read"): - self.profile = core.profile_frombytes(profile.read()) - elif isinstance(profile, core.CmsProfile): - self.profile = profile - else: - msg = "Invalid type for Profile" # type: ignore[unreachable] - raise TypeError(msg) - - def tobytes(self) -> bytes: - """ - Returns the profile in a format suitable for embedding in - saved images. - - :returns: a bytes object containing the ICC profile. - """ - - return core.profile_tobytes(self.profile) - - -class ImageCmsTransform(Image.ImagePointHandler): - """ - Transform. This can be used with the procedural API, or with the standard - :py:func:`~PIL.Image.Image.point` method. - - Will return the output profile in the ``output.info['icc_profile']``. - """ - - def __init__( - self, - input: ImageCmsProfile, - output: ImageCmsProfile, - input_mode: str, - output_mode: str, - intent: Intent = Intent.PERCEPTUAL, - proof: ImageCmsProfile | None = None, - proof_intent: Intent = Intent.ABSOLUTE_COLORIMETRIC, - flags: Flags = Flags.NONE, - ): - supported_modes = ( - "RGB", - "RGBA", - "RGBX", - "CMYK", - "I;16", - "I;16L", - "I;16B", - "YCbCr", - "LAB", - "L", - "1", - ) - for mode in (input_mode, output_mode): - if mode not in supported_modes: - deprecate( - mode, - 12, - { - "L;16": "I;16 or I;16L", - "L:16B": "I;16B", - "YCCA": "YCbCr", - "YCC": "YCbCr", - }.get(mode), - ) - if proof is None: - self.transform = core.buildTransform( - input.profile, output.profile, input_mode, output_mode, intent, flags - ) - else: - self.transform = core.buildProofTransform( - input.profile, - output.profile, - proof.profile, - input_mode, - output_mode, - intent, - proof_intent, - flags, - ) - # Note: inputMode and outputMode are for pyCMS compatibility only - self.input_mode = self.inputMode = input_mode - self.output_mode = self.outputMode = output_mode - - self.output_profile = output - - def point(self, im: Image.Image) -> Image.Image: - return self.apply(im) - - def apply(self, im: Image.Image, imOut: Image.Image | None = None) -> Image.Image: - if imOut is None: - imOut = Image.new(self.output_mode, im.size, None) - self.transform.apply(im.getim(), imOut.getim()) - imOut.info["icc_profile"] = self.output_profile.tobytes() - return imOut - - def apply_in_place(self, im: Image.Image) -> Image.Image: - if im.mode != self.output_mode: - msg = "mode mismatch" - raise ValueError(msg) # wrong output mode - self.transform.apply(im.getim(), im.getim()) - im.info["icc_profile"] = self.output_profile.tobytes() - return im - - -def get_display_profile(handle: SupportsInt | None = None) -> ImageCmsProfile | None: - """ - (experimental) Fetches the profile for the current display device. - - :returns: ``None`` if the profile is not known. - """ - - if sys.platform != "win32": - return None - - from . import ImageWin # type: ignore[unused-ignore, unreachable] - - if isinstance(handle, ImageWin.HDC): - profile = core.get_display_profile_win32(int(handle), 1) - else: - profile = core.get_display_profile_win32(int(handle or 0)) - if profile is None: - return None - return ImageCmsProfile(profile) - - -# --------------------------------------------------------------------. -# pyCMS compatible layer -# --------------------------------------------------------------------. - - -class PyCMSError(Exception): - """(pyCMS) Exception class. - This is used for all errors in the pyCMS API.""" - - pass - - -def profileToProfile( - im: Image.Image, - inputProfile: _CmsProfileCompatible, - outputProfile: _CmsProfileCompatible, - renderingIntent: Intent = Intent.PERCEPTUAL, - outputMode: str | None = None, - inPlace: bool = False, - flags: Flags = Flags.NONE, -) -> Image.Image | None: - """ - (pyCMS) Applies an ICC transformation to a given image, mapping from - ``inputProfile`` to ``outputProfile``. - - If the input or output profiles specified are not valid filenames, a - :exc:`PyCMSError` will be raised. If ``inPlace`` is ``True`` and - ``outputMode != im.mode``, a :exc:`PyCMSError` will be raised. - If an error occurs during application of the profiles, - a :exc:`PyCMSError` will be raised. - If ``outputMode`` is not a mode supported by the ``outputProfile`` (or by pyCMS), - a :exc:`PyCMSError` will be raised. - - This function applies an ICC transformation to im from ``inputProfile``'s - color space to ``outputProfile``'s color space using the specified rendering - intent to decide how to handle out-of-gamut colors. - - ``outputMode`` can be used to specify that a color mode conversion is to - be done using these profiles, but the specified profiles must be able - to handle that mode. I.e., if converting im from RGB to CMYK using - profiles, the input profile must handle RGB data, and the output - profile must handle CMYK data. - - :param im: An open :py:class:`~PIL.Image.Image` object (i.e. Image.new(...) - or Image.open(...), etc.) - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this image, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - profile you wish to use for this image, or a profile object - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the transform - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param outputMode: A valid PIL mode for the output image (i.e. "RGB", - "CMYK", etc.). Note: if rendering the image "inPlace", outputMode - MUST be the same mode as the input, or omitted completely. If - omitted, the outputMode will be the same as the mode of the input - image (im.mode) - :param inPlace: Boolean. If ``True``, the original image is modified in-place, - and ``None`` is returned. If ``False`` (default), a new - :py:class:`~PIL.Image.Image` object is returned with the transform applied. - :param flags: Integer (0-...) specifying additional flags - :returns: Either None or a new :py:class:`~PIL.Image.Image` object, depending on - the value of ``inPlace`` - :exception PyCMSError: - """ - - if outputMode is None: - outputMode = im.mode - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - msg = "renderingIntent must be an integer between 0 and 3" - raise PyCMSError(msg) - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - msg = f"flags must be an integer between 0 and {_MAX_FLAG}" - raise PyCMSError(msg) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - transform = ImageCmsTransform( - inputProfile, - outputProfile, - im.mode, - outputMode, - renderingIntent, - flags=flags, - ) - if inPlace: - transform.apply_in_place(im) - imOut = None - else: - imOut = transform.apply(im) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - return imOut - - -def getOpenProfile( - profileFilename: str | SupportsRead[bytes] | core.CmsProfile, -) -> ImageCmsProfile: - """ - (pyCMS) Opens an ICC profile file. - - The PyCMSProfile object can be passed back into pyCMS for use in creating - transforms and such (as in ImageCms.buildTransformFromOpenProfiles()). - - If ``profileFilename`` is not a valid filename for an ICC profile, - a :exc:`PyCMSError` will be raised. - - :param profileFilename: String, as a valid filename path to the ICC profile - you wish to open, or a file-like object. - :returns: A CmsProfile class object. - :exception PyCMSError: - """ - - try: - return ImageCmsProfile(profileFilename) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def buildTransform( - inputProfile: _CmsProfileCompatible, - outputProfile: _CmsProfileCompatible, - inMode: str, - outMode: str, - renderingIntent: Intent = Intent.PERCEPTUAL, - flags: Flags = Flags.NONE, -) -> ImageCmsTransform: - """ - (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the - ``outputProfile``. Use applyTransform to apply the transform to a given - image. - - If the input or output profiles specified are not valid filenames, a - :exc:`PyCMSError` will be raised. If an error occurs during creation - of the transform, a :exc:`PyCMSError` will be raised. - - If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` - (or by pyCMS), a :exc:`PyCMSError` will be raised. - - This function builds and returns an ICC transform from the ``inputProfile`` - to the ``outputProfile`` using the ``renderingIntent`` to determine what to do - with out-of-gamut colors. It will ONLY work for converting images that - are in ``inMode`` to images that are in ``outMode`` color format (PIL mode, - i.e. "RGB", "RGBA", "CMYK", etc.). - - Building the transform is a fair part of the overhead in - ImageCms.profileToProfile(), so if you're planning on converting multiple - images using the same input/output settings, this can save you time. - Once you have a transform object, it can be used with - ImageCms.applyProfile() to convert images without the need to re-compute - the lookup table for the transform. - - The reason pyCMS returns a class object rather than a handle directly - to the transform is that it needs to keep track of the PIL input/output - modes that the transform is meant for. These attributes are stored in - the ``inMode`` and ``outMode`` attributes of the object (which can be - manually overridden if you really want to, but I don't know of any - time that would be of use, or would even work). - - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this transform, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - profile you wish to use for this transform, or a profile object - :param inMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param outMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the transform - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param flags: Integer (0-...) specifying additional flags - :returns: A CmsTransform class object. - :exception PyCMSError: - """ - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - msg = "renderingIntent must be an integer between 0 and 3" - raise PyCMSError(msg) - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - msg = f"flags must be an integer between 0 and {_MAX_FLAG}" - raise PyCMSError(msg) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - return ImageCmsTransform( - inputProfile, outputProfile, inMode, outMode, renderingIntent, flags=flags - ) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def buildProofTransform( - inputProfile: _CmsProfileCompatible, - outputProfile: _CmsProfileCompatible, - proofProfile: _CmsProfileCompatible, - inMode: str, - outMode: str, - renderingIntent: Intent = Intent.PERCEPTUAL, - proofRenderingIntent: Intent = Intent.ABSOLUTE_COLORIMETRIC, - flags: Flags = Flags.SOFTPROOFING, -) -> ImageCmsTransform: - """ - (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the - ``outputProfile``, but tries to simulate the result that would be - obtained on the ``proofProfile`` device. - - If the input, output, or proof profiles specified are not valid - filenames, a :exc:`PyCMSError` will be raised. - - If an error occurs during creation of the transform, - a :exc:`PyCMSError` will be raised. - - If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` - (or by pyCMS), a :exc:`PyCMSError` will be raised. - - This function builds and returns an ICC transform from the ``inputProfile`` - to the ``outputProfile``, but tries to simulate the result that would be - obtained on the ``proofProfile`` device using ``renderingIntent`` and - ``proofRenderingIntent`` to determine what to do with out-of-gamut - colors. This is known as "soft-proofing". It will ONLY work for - converting images that are in ``inMode`` to images that are in outMode - color format (PIL mode, i.e. "RGB", "RGBA", "CMYK", etc.). - - Usage of the resulting transform object is exactly the same as with - ImageCms.buildTransform(). - - Proof profiling is generally used when using an output device to get a - good idea of what the final printed/displayed image would look like on - the ``proofProfile`` device when it's quicker and easier to use the - output device for judging color. Generally, this means that the - output device is a monitor, or a dye-sub printer (etc.), and the simulated - device is something more expensive, complicated, or time consuming - (making it difficult to make a real print for color judgement purposes). - - Soft-proofing basically functions by adjusting the colors on the - output device to match the colors of the device being simulated. However, - when the simulated device has a much wider gamut than the output - device, you may obtain marginal results. - - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this transform, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - (monitor, usually) profile you wish to use for this transform, or a - profile object - :param proofProfile: String, as a valid filename path to the ICC proof - profile you wish to use for this transform, or a profile object - :param inMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param outMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the input->proof (simulated) transform - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param proofRenderingIntent: Integer (0-3) specifying the rendering intent - you wish to use for proof->output transform - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param flags: Integer (0-...) specifying additional flags - :returns: A CmsTransform class object. - :exception PyCMSError: - """ - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - msg = "renderingIntent must be an integer between 0 and 3" - raise PyCMSError(msg) - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - msg = f"flags must be an integer between 0 and {_MAX_FLAG}" - raise PyCMSError(msg) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - if not isinstance(proofProfile, ImageCmsProfile): - proofProfile = ImageCmsProfile(proofProfile) - return ImageCmsTransform( - inputProfile, - outputProfile, - inMode, - outMode, - renderingIntent, - proofProfile, - proofRenderingIntent, - flags, - ) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -buildTransformFromOpenProfiles = buildTransform -buildProofTransformFromOpenProfiles = buildProofTransform - - -def applyTransform( - im: Image.Image, transform: ImageCmsTransform, inPlace: bool = False -) -> Image.Image | None: - """ - (pyCMS) Applies a transform to a given image. - - If ``im.mode != transform.input_mode``, a :exc:`PyCMSError` is raised. - - If ``inPlace`` is ``True`` and ``transform.input_mode != transform.output_mode``, a - :exc:`PyCMSError` is raised. - - If ``im.mode``, ``transform.input_mode`` or ``transform.output_mode`` is not - supported by pyCMSdll or the profiles you used for the transform, a - :exc:`PyCMSError` is raised. - - If an error occurs while the transform is being applied, - a :exc:`PyCMSError` is raised. - - This function applies a pre-calculated transform (from - ImageCms.buildTransform() or ImageCms.buildTransformFromOpenProfiles()) - to an image. The transform can be used for multiple images, saving - considerable calculation time if doing the same conversion multiple times. - - If you want to modify im in-place instead of receiving a new image as - the return value, set ``inPlace`` to ``True``. This can only be done if - ``transform.input_mode`` and ``transform.output_mode`` are the same, because we - can't change the mode in-place (the buffer sizes for some modes are - different). The default behavior is to return a new :py:class:`~PIL.Image.Image` - object of the same dimensions in mode ``transform.output_mode``. - - :param im: An :py:class:`~PIL.Image.Image` object, and ``im.mode`` must be the same - as the ``input_mode`` supported by the transform. - :param transform: A valid CmsTransform class object - :param inPlace: Bool. If ``True``, ``im`` is modified in place and ``None`` is - returned, if ``False``, a new :py:class:`~PIL.Image.Image` object with the - transform applied is returned (and ``im`` is not changed). The default is - ``False``. - :returns: Either ``None``, or a new :py:class:`~PIL.Image.Image` object, - depending on the value of ``inPlace``. The profile will be returned in - the image's ``info['icc_profile']``. - :exception PyCMSError: - """ - - try: - if inPlace: - transform.apply_in_place(im) - imOut = None - else: - imOut = transform.apply(im) - except (TypeError, ValueError) as v: - raise PyCMSError(v) from v - - return imOut - - -def createProfile( - colorSpace: Literal["LAB", "XYZ", "sRGB"], colorTemp: SupportsFloat = 0 -) -> core.CmsProfile: - """ - (pyCMS) Creates a profile. - - If colorSpace not in ``["LAB", "XYZ", "sRGB"]``, - a :exc:`PyCMSError` is raised. - - If using LAB and ``colorTemp`` is not a positive integer, - a :exc:`PyCMSError` is raised. - - If an error occurs while creating the profile, - a :exc:`PyCMSError` is raised. - - Use this function to create common profiles on-the-fly instead of - having to supply a profile on disk and knowing the path to it. It - returns a normal CmsProfile object that can be passed to - ImageCms.buildTransformFromOpenProfiles() to create a transform to apply - to images. - - :param colorSpace: String, the color space of the profile you wish to - create. - Currently only "LAB", "XYZ", and "sRGB" are supported. - :param colorTemp: Positive number for the white point for the profile, in - degrees Kelvin (i.e. 5000, 6500, 9600, etc.). The default is for D50 - illuminant if omitted (5000k). colorTemp is ONLY applied to LAB - profiles, and is ignored for XYZ and sRGB. - :returns: A CmsProfile class object - :exception PyCMSError: - """ - - if colorSpace not in ["LAB", "XYZ", "sRGB"]: - msg = ( - f"Color space not supported for on-the-fly profile creation ({colorSpace})" - ) - raise PyCMSError(msg) - - if colorSpace == "LAB": - try: - colorTemp = float(colorTemp) - except (TypeError, ValueError) as e: - msg = f'Color temperature must be numeric, "{colorTemp}" not valid' - raise PyCMSError(msg) from e - - try: - return core.createProfile(colorSpace, colorTemp) - except (TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileName(profile: _CmsProfileCompatible) -> str: - """ - - (pyCMS) Gets the internal product name for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, - a :exc:`PyCMSError` is raised If an error occurs while trying - to obtain the name tag, a :exc:`PyCMSError` is raised. - - Use this function to obtain the INTERNAL name of the profile (stored - in an ICC tag in the profile itself), usually the one used when the - profile was originally created. Sometimes this tag also contains - additional information supplied by the creator. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal name of the profile as stored - in an ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # do it in python, not c. - # // name was "%s - %s" (model, manufacturer) || Description , - # // but if the Model and Manufacturer were the same or the model - # // was long, Just the model, in 1.x - model = profile.profile.model - manufacturer = profile.profile.manufacturer - - if not (model or manufacturer): - return (profile.profile.profile_description or "") + "\n" - if not manufacturer or (model and len(model) > 30): - return f"{model}\n" - return f"{model} - {manufacturer}\n" - - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileInfo(profile: _CmsProfileCompatible) -> str: - """ - (pyCMS) Gets the internal product information for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, - a :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the info tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - info tag. This often contains details about the profile, and how it - was created, as supplied by the creator. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # add an extra newline to preserve pyCMS compatibility - # Python, not C. the white point bits weren't working well, - # so skipping. - # info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint - description = profile.profile.profile_description - cpright = profile.profile.copyright - elements = [element for element in (description, cpright) if element] - return "\r\n\r\n".join(elements) + "\r\n\r\n" - - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileCopyright(profile: _CmsProfileCompatible) -> str: - """ - (pyCMS) Gets the copyright for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the copyright tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - copyright tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.copyright or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileManufacturer(profile: _CmsProfileCompatible) -> str: - """ - (pyCMS) Gets the manufacturer for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the manufacturer tag, a - :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - manufacturer tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.manufacturer or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileModel(profile: _CmsProfileCompatible) -> str: - """ - (pyCMS) Gets the model for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the model tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - model tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.model or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileDescription(profile: _CmsProfileCompatible) -> str: - """ - (pyCMS) Gets the description for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the description tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - description tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in an - ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.profile_description or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getDefaultIntent(profile: _CmsProfileCompatible) -> int: - """ - (pyCMS) Gets the default intent name for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the default intent, a - :exc:`PyCMSError` is raised. - - Use this function to determine the default (and usually best optimized) - rendering intent for this profile. Most profiles support multiple - rendering intents, but are intended mostly for one type of conversion. - If you wish to use a different intent than returned, use - ImageCms.isIntentSupported() to verify it will work first. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: Integer 0-3 specifying the default rendering intent for this - profile. - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return profile.profile.rendering_intent - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def isIntentSupported( - profile: _CmsProfileCompatible, intent: Intent, direction: Direction -) -> Literal[-1, 1]: - """ - (pyCMS) Checks if a given intent is supported. - - Use this function to verify that you can use your desired - ``intent`` with ``profile``, and that ``profile`` can be used for the - input/output/proof profile as you desire. - - Some profiles are created specifically for one "direction", can cannot - be used for others. Some profiles can only be used for certain - rendering intents, so it's best to either verify this before trying - to create a transform with them (using this function), or catch the - potential :exc:`PyCMSError` that will occur if they don't - support the modes you select. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :param intent: Integer (0-3) specifying the rendering intent you wish to - use with this profile - - ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) - ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 - ImageCms.Intent.SATURATION = 2 - ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param direction: Integer specifying if the profile is to be used for - input, output, or proof - - INPUT = 0 (or use ImageCms.Direction.INPUT) - OUTPUT = 1 (or use ImageCms.Direction.OUTPUT) - PROOF = 2 (or use ImageCms.Direction.PROOF) - - :returns: 1 if the intent/direction are supported, -1 if they are not. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # FIXME: I get different results for the same data w. different - # compilers. Bug in LittleCMS or in the binding? - if profile.profile.is_intent_supported(intent, direction): - return 1 - else: - return -1 - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def versions() -> tuple[str, str | None, str, str]: - """ - (pyCMS) Fetches versions. - """ - - deprecate( - "PIL.ImageCms.versions()", - 12, - '(PIL.features.version("littlecms2"), sys.version, PIL.__version__)', - ) - return _VERSION, core.littlecms_version, sys.version.split()[0], __version__ diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageColor.py b/myenv/lib/python3.12/site-packages/PIL/ImageColor.py deleted file mode 100644 index 9a15a8e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageColor.py +++ /dev/null @@ -1,320 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# map CSS3-style colour description strings to RGB -# -# History: -# 2002-10-24 fl Added support for CSS-style color strings -# 2002-12-15 fl Added RGBA support -# 2004-03-27 fl Fixed remaining int() problems for Python 1.5.2 -# 2004-07-19 fl Fixed gray/grey spelling issues -# 2009-03-05 fl Fixed rounding error in grayscale calculation -# -# Copyright (c) 2002-2004 by Secret Labs AB -# Copyright (c) 2002-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import re -from functools import lru_cache - -from . import Image - - -@lru_cache -def getrgb(color: str) -> tuple[int, int, int] | tuple[int, int, int, int]: - """ - Convert a color string to an RGB or RGBA tuple. If the string cannot be - parsed, this function raises a :py:exc:`ValueError` exception. - - .. versionadded:: 1.1.4 - - :param color: A color string - :return: ``(red, green, blue[, alpha])`` - """ - if len(color) > 100: - msg = "color specifier is too long" - raise ValueError(msg) - color = color.lower() - - rgb = colormap.get(color, None) - if rgb: - if isinstance(rgb, tuple): - return rgb - rgb_tuple = getrgb(rgb) - assert len(rgb_tuple) == 3 - colormap[color] = rgb_tuple - return rgb_tuple - - # check for known string formats - if re.match("#[a-f0-9]{3}$", color): - return int(color[1] * 2, 16), int(color[2] * 2, 16), int(color[3] * 2, 16) - - if re.match("#[a-f0-9]{4}$", color): - return ( - int(color[1] * 2, 16), - int(color[2] * 2, 16), - int(color[3] * 2, 16), - int(color[4] * 2, 16), - ) - - if re.match("#[a-f0-9]{6}$", color): - return int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16) - - if re.match("#[a-f0-9]{8}$", color): - return ( - int(color[1:3], 16), - int(color[3:5], 16), - int(color[5:7], 16), - int(color[7:9], 16), - ) - - m = re.match(r"rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) - if m: - return int(m.group(1)), int(m.group(2)), int(m.group(3)) - - m = re.match(r"rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) - if m: - return ( - int((int(m.group(1)) * 255) / 100.0 + 0.5), - int((int(m.group(2)) * 255) / 100.0 + 0.5), - int((int(m.group(3)) * 255) / 100.0 + 0.5), - ) - - m = re.match( - r"hsl\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color - ) - if m: - from colorsys import hls_to_rgb - - rgb_floats = hls_to_rgb( - float(m.group(1)) / 360.0, - float(m.group(3)) / 100.0, - float(m.group(2)) / 100.0, - ) - return ( - int(rgb_floats[0] * 255 + 0.5), - int(rgb_floats[1] * 255 + 0.5), - int(rgb_floats[2] * 255 + 0.5), - ) - - m = re.match( - r"hs[bv]\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color - ) - if m: - from colorsys import hsv_to_rgb - - rgb_floats = hsv_to_rgb( - float(m.group(1)) / 360.0, - float(m.group(2)) / 100.0, - float(m.group(3)) / 100.0, - ) - return ( - int(rgb_floats[0] * 255 + 0.5), - int(rgb_floats[1] * 255 + 0.5), - int(rgb_floats[2] * 255 + 0.5), - ) - - m = re.match(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) - if m: - return int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4)) - msg = f"unknown color specifier: {repr(color)}" - raise ValueError(msg) - - -@lru_cache -def getcolor(color: str, mode: str) -> int | tuple[int, ...]: - """ - Same as :py:func:`~PIL.ImageColor.getrgb` for most modes. However, if - ``mode`` is HSV, converts the RGB value to a HSV value, or if ``mode`` is - not color or a palette image, converts the RGB value to a grayscale value. - If the string cannot be parsed, this function raises a :py:exc:`ValueError` - exception. - - .. versionadded:: 1.1.4 - - :param color: A color string - :param mode: Convert result to this mode - :return: ``graylevel, (graylevel, alpha) or (red, green, blue[, alpha])`` - """ - # same as getrgb, but converts the result to the given mode - rgb, alpha = getrgb(color), 255 - if len(rgb) == 4: - alpha = rgb[3] - rgb = rgb[:3] - - if mode == "HSV": - from colorsys import rgb_to_hsv - - r, g, b = rgb - h, s, v = rgb_to_hsv(r / 255, g / 255, b / 255) - return int(h * 255), int(s * 255), int(v * 255) - elif Image.getmodebase(mode) == "L": - r, g, b = rgb - # ITU-R Recommendation 601-2 for nonlinear RGB - # scaled to 24 bits to match the convert's implementation. - graylevel = (r * 19595 + g * 38470 + b * 7471 + 0x8000) >> 16 - if mode[-1] == "A": - return graylevel, alpha - return graylevel - elif mode[-1] == "A": - return rgb + (alpha,) - return rgb - - -colormap: dict[str, str | tuple[int, int, int]] = { - # X11 colour table from https://drafts.csswg.org/css-color-4/, with - # gray/grey spelling issues fixed. This is a superset of HTML 4.0 - # colour names used in CSS 1. - "aliceblue": "#f0f8ff", - "antiquewhite": "#faebd7", - "aqua": "#00ffff", - "aquamarine": "#7fffd4", - "azure": "#f0ffff", - "beige": "#f5f5dc", - "bisque": "#ffe4c4", - "black": "#000000", - "blanchedalmond": "#ffebcd", - "blue": "#0000ff", - "blueviolet": "#8a2be2", - "brown": "#a52a2a", - "burlywood": "#deb887", - "cadetblue": "#5f9ea0", - "chartreuse": "#7fff00", - "chocolate": "#d2691e", - "coral": "#ff7f50", - "cornflowerblue": "#6495ed", - "cornsilk": "#fff8dc", - "crimson": "#dc143c", - "cyan": "#00ffff", - "darkblue": "#00008b", - "darkcyan": "#008b8b", - "darkgoldenrod": "#b8860b", - "darkgray": "#a9a9a9", - "darkgrey": "#a9a9a9", - "darkgreen": "#006400", - "darkkhaki": "#bdb76b", - "darkmagenta": "#8b008b", - "darkolivegreen": "#556b2f", - "darkorange": "#ff8c00", - "darkorchid": "#9932cc", - "darkred": "#8b0000", - "darksalmon": "#e9967a", - "darkseagreen": "#8fbc8f", - "darkslateblue": "#483d8b", - "darkslategray": "#2f4f4f", - "darkslategrey": "#2f4f4f", - "darkturquoise": "#00ced1", - "darkviolet": "#9400d3", - "deeppink": "#ff1493", - "deepskyblue": "#00bfff", - "dimgray": "#696969", - "dimgrey": "#696969", - "dodgerblue": "#1e90ff", - "firebrick": "#b22222", - "floralwhite": "#fffaf0", - "forestgreen": "#228b22", - "fuchsia": "#ff00ff", - "gainsboro": "#dcdcdc", - "ghostwhite": "#f8f8ff", - "gold": "#ffd700", - "goldenrod": "#daa520", - "gray": "#808080", - "grey": "#808080", - "green": "#008000", - "greenyellow": "#adff2f", - "honeydew": "#f0fff0", - "hotpink": "#ff69b4", - "indianred": "#cd5c5c", - "indigo": "#4b0082", - "ivory": "#fffff0", - "khaki": "#f0e68c", - "lavender": "#e6e6fa", - "lavenderblush": "#fff0f5", - "lawngreen": "#7cfc00", - "lemonchiffon": "#fffacd", - "lightblue": "#add8e6", - "lightcoral": "#f08080", - "lightcyan": "#e0ffff", - "lightgoldenrodyellow": "#fafad2", - "lightgreen": "#90ee90", - "lightgray": "#d3d3d3", - "lightgrey": "#d3d3d3", - "lightpink": "#ffb6c1", - "lightsalmon": "#ffa07a", - "lightseagreen": "#20b2aa", - "lightskyblue": "#87cefa", - "lightslategray": "#778899", - "lightslategrey": "#778899", - "lightsteelblue": "#b0c4de", - "lightyellow": "#ffffe0", - "lime": "#00ff00", - "limegreen": "#32cd32", - "linen": "#faf0e6", - "magenta": "#ff00ff", - "maroon": "#800000", - "mediumaquamarine": "#66cdaa", - "mediumblue": "#0000cd", - "mediumorchid": "#ba55d3", - "mediumpurple": "#9370db", - "mediumseagreen": "#3cb371", - "mediumslateblue": "#7b68ee", - "mediumspringgreen": "#00fa9a", - "mediumturquoise": "#48d1cc", - "mediumvioletred": "#c71585", - "midnightblue": "#191970", - "mintcream": "#f5fffa", - "mistyrose": "#ffe4e1", - "moccasin": "#ffe4b5", - "navajowhite": "#ffdead", - "navy": "#000080", - "oldlace": "#fdf5e6", - "olive": "#808000", - "olivedrab": "#6b8e23", - "orange": "#ffa500", - "orangered": "#ff4500", - "orchid": "#da70d6", - "palegoldenrod": "#eee8aa", - "palegreen": "#98fb98", - "paleturquoise": "#afeeee", - "palevioletred": "#db7093", - "papayawhip": "#ffefd5", - "peachpuff": "#ffdab9", - "peru": "#cd853f", - "pink": "#ffc0cb", - "plum": "#dda0dd", - "powderblue": "#b0e0e6", - "purple": "#800080", - "rebeccapurple": "#663399", - "red": "#ff0000", - "rosybrown": "#bc8f8f", - "royalblue": "#4169e1", - "saddlebrown": "#8b4513", - "salmon": "#fa8072", - "sandybrown": "#f4a460", - "seagreen": "#2e8b57", - "seashell": "#fff5ee", - "sienna": "#a0522d", - "silver": "#c0c0c0", - "skyblue": "#87ceeb", - "slateblue": "#6a5acd", - "slategray": "#708090", - "slategrey": "#708090", - "snow": "#fffafa", - "springgreen": "#00ff7f", - "steelblue": "#4682b4", - "tan": "#d2b48c", - "teal": "#008080", - "thistle": "#d8bfd8", - "tomato": "#ff6347", - "turquoise": "#40e0d0", - "violet": "#ee82ee", - "wheat": "#f5deb3", - "white": "#ffffff", - "whitesmoke": "#f5f5f5", - "yellow": "#ffff00", - "yellowgreen": "#9acd32", -} diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageDraw.py b/myenv/lib/python3.12/site-packages/PIL/ImageDraw.py deleted file mode 100644 index 6cf1ee6..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageDraw.py +++ /dev/null @@ -1,1232 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# drawing interface operations -# -# History: -# 1996-04-13 fl Created (experimental) -# 1996-08-07 fl Filled polygons, ellipses. -# 1996-08-13 fl Added text support -# 1998-06-28 fl Handle I and F images -# 1998-12-29 fl Added arc; use arc primitive to draw ellipses -# 1999-01-10 fl Added shape stuff (experimental) -# 1999-02-06 fl Added bitmap support -# 1999-02-11 fl Changed all primitives to take options -# 1999-02-20 fl Fixed backwards compatibility -# 2000-10-12 fl Copy on write, when necessary -# 2001-02-18 fl Use default ink for bitmap/text also in fill mode -# 2002-10-24 fl Added support for CSS-style color strings -# 2002-12-10 fl Added experimental support for RGBA-on-RGB drawing -# 2002-12-11 fl Refactored low-level drawing API (work in progress) -# 2004-08-26 fl Made Draw() a factory function, added getdraw() support -# 2004-09-04 fl Added width support to line primitive -# 2004-09-10 fl Added font mode handling -# 2006-06-19 fl Added font bearing support (getmask2) -# -# Copyright (c) 1997-2006 by Secret Labs AB -# Copyright (c) 1996-2006 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import math -import struct -from collections.abc import Sequence -from types import ModuleType -from typing import Any, AnyStr, Callable, Union, cast - -from . import Image, ImageColor -from ._deprecate import deprecate -from ._typing import Coords - -# experimental access to the outline API -Outline: Callable[[], Image.core._Outline] = Image.core.outline - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import ImageDraw2, ImageFont - -_Ink = Union[float, tuple[int, ...], str] - -""" -A simple 2D drawing interface for PIL images. -

-Application code should use the Draw factory, instead of -directly. -""" - - -class ImageDraw: - font: ( - ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None - ) = None - - def __init__(self, im: Image.Image, mode: str | None = None) -> None: - """ - Create a drawing instance. - - :param im: The image to draw in. - :param mode: Optional mode to use for color values. For RGB - images, this argument can be RGB or RGBA (to blend the - drawing into the image). For all other modes, this argument - must be the same as the image mode. If omitted, the mode - defaults to the mode of the image. - """ - im.load() - if im.readonly: - im._copy() # make it writeable - blend = 0 - if mode is None: - mode = im.mode - if mode != im.mode: - if mode == "RGBA" and im.mode == "RGB": - blend = 1 - else: - msg = "mode mismatch" - raise ValueError(msg) - if mode == "P": - self.palette = im.palette - else: - self.palette = None - self._image = im - self.im = im.im - self.draw = Image.core.draw(self.im, blend) - self.mode = mode - if mode in ("I", "F"): - self.ink = self.draw.draw_ink(1) - else: - self.ink = self.draw.draw_ink(-1) - if mode in ("1", "P", "I", "F"): - # FIXME: fix Fill2 to properly support matte for I+F images - self.fontmode = "1" - else: - self.fontmode = "L" # aliasing is okay for other modes - self.fill = False - - def getfont( - self, - ) -> ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont: - """ - Get the current default font. - - To set the default font for this ImageDraw instance:: - - from PIL import ImageDraw, ImageFont - draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf") - - To set the default font for all future ImageDraw instances:: - - from PIL import ImageDraw, ImageFont - ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf") - - If the current default font is ``None``, - it is initialized with ``ImageFont.load_default()``. - - :returns: An image font.""" - if not self.font: - # FIXME: should add a font repository - from . import ImageFont - - self.font = ImageFont.load_default() - return self.font - - def _getfont( - self, font_size: float | None - ) -> ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont: - if font_size is not None: - from . import ImageFont - - return ImageFont.load_default(font_size) - else: - return self.getfont() - - def _getink( - self, ink: _Ink | None, fill: _Ink | None = None - ) -> tuple[int | None, int | None]: - result_ink = None - result_fill = None - if ink is None and fill is None: - if self.fill: - result_fill = self.ink - else: - result_ink = self.ink - else: - if ink is not None: - if isinstance(ink, str): - ink = ImageColor.getcolor(ink, self.mode) - if self.palette and isinstance(ink, tuple): - ink = self.palette.getcolor(ink, self._image) - result_ink = self.draw.draw_ink(ink) - if fill is not None: - if isinstance(fill, str): - fill = ImageColor.getcolor(fill, self.mode) - if self.palette and isinstance(fill, tuple): - fill = self.palette.getcolor(fill, self._image) - result_fill = self.draw.draw_ink(fill) - return result_ink, result_fill - - def arc( - self, - xy: Coords, - start: float, - end: float, - fill: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw an arc.""" - ink, fill = self._getink(fill) - if ink is not None: - self.draw.draw_arc(xy, start, end, ink, width) - - def bitmap( - self, xy: Sequence[int], bitmap: Image.Image, fill: _Ink | None = None - ) -> None: - """Draw a bitmap.""" - bitmap.load() - ink, fill = self._getink(fill) - if ink is None: - ink = fill - if ink is not None: - self.draw.draw_bitmap(xy, bitmap.im, ink) - - def chord( - self, - xy: Coords, - start: float, - end: float, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a chord.""" - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_chord(xy, start, end, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - self.draw.draw_chord(xy, start, end, ink, 0, width) - - def ellipse( - self, - xy: Coords, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw an ellipse.""" - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_ellipse(xy, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - self.draw.draw_ellipse(xy, ink, 0, width) - - def circle( - self, - xy: Sequence[float], - radius: float, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a circle given center coordinates and a radius.""" - ellipse_xy = (xy[0] - radius, xy[1] - radius, xy[0] + radius, xy[1] + radius) - self.ellipse(ellipse_xy, fill, outline, width) - - def line( - self, - xy: Coords, - fill: _Ink | None = None, - width: int = 0, - joint: str | None = None, - ) -> None: - """Draw a line, or a connected sequence of line segments.""" - ink = self._getink(fill)[0] - if ink is not None: - self.draw.draw_lines(xy, ink, width) - if joint == "curve" and width > 4: - points: Sequence[Sequence[float]] - if isinstance(xy[0], (list, tuple)): - points = cast(Sequence[Sequence[float]], xy) - else: - points = [ - cast(Sequence[float], tuple(xy[i : i + 2])) - for i in range(0, len(xy), 2) - ] - for i in range(1, len(points) - 1): - point = points[i] - angles = [ - math.degrees(math.atan2(end[0] - start[0], start[1] - end[1])) - % 360 - for start, end in ( - (points[i - 1], point), - (point, points[i + 1]), - ) - ] - if angles[0] == angles[1]: - # This is a straight line, so no joint is required - continue - - def coord_at_angle( - coord: Sequence[float], angle: float - ) -> tuple[float, ...]: - x, y = coord - angle -= 90 - distance = width / 2 - 1 - return tuple( - p + (math.floor(p_d) if p_d > 0 else math.ceil(p_d)) - for p, p_d in ( - (x, distance * math.cos(math.radians(angle))), - (y, distance * math.sin(math.radians(angle))), - ) - ) - - flipped = ( - angles[1] > angles[0] and angles[1] - 180 > angles[0] - ) or (angles[1] < angles[0] and angles[1] + 180 > angles[0]) - coords = [ - (point[0] - width / 2 + 1, point[1] - width / 2 + 1), - (point[0] + width / 2 - 1, point[1] + width / 2 - 1), - ] - if flipped: - start, end = (angles[1] + 90, angles[0] + 90) - else: - start, end = (angles[0] - 90, angles[1] - 90) - self.pieslice(coords, start - 90, end - 90, fill) - - if width > 8: - # Cover potential gaps between the line and the joint - if flipped: - gap_coords = [ - coord_at_angle(point, angles[0] + 90), - point, - coord_at_angle(point, angles[1] + 90), - ] - else: - gap_coords = [ - coord_at_angle(point, angles[0] - 90), - point, - coord_at_angle(point, angles[1] - 90), - ] - self.line(gap_coords, fill, width=3) - - def shape( - self, - shape: Image.core._Outline, - fill: _Ink | None = None, - outline: _Ink | None = None, - ) -> None: - """(Experimental) Draw a shape.""" - shape.close() - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_outline(shape, fill_ink, 1) - if ink is not None and ink != fill_ink: - self.draw.draw_outline(shape, ink, 0) - - def pieslice( - self, - xy: Coords, - start: float, - end: float, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a pieslice.""" - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_pieslice(xy, start, end, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - self.draw.draw_pieslice(xy, start, end, ink, 0, width) - - def point(self, xy: Coords, fill: _Ink | None = None) -> None: - """Draw one or more individual pixels.""" - ink, fill = self._getink(fill) - if ink is not None: - self.draw.draw_points(xy, ink) - - def polygon( - self, - xy: Coords, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a polygon.""" - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_polygon(xy, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - if width == 1: - self.draw.draw_polygon(xy, ink, 0, width) - elif self.im is not None: - # To avoid expanding the polygon outwards, - # use the fill as a mask - mask = Image.new("1", self.im.size) - mask_ink = self._getink(1)[0] - draw = Draw(mask) - draw.draw.draw_polygon(xy, mask_ink, 1) - - self.draw.draw_polygon(xy, ink, 0, width * 2 - 1, mask.im) - - def regular_polygon( - self, - bounding_circle: Sequence[Sequence[float] | float], - n_sides: int, - rotation: float = 0, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a regular polygon.""" - xy = _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation) - self.polygon(xy, fill, outline, width) - - def rectangle( - self, - xy: Coords, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - ) -> None: - """Draw a rectangle.""" - ink, fill_ink = self._getink(outline, fill) - if fill_ink is not None: - self.draw.draw_rectangle(xy, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - self.draw.draw_rectangle(xy, ink, 0, width) - - def rounded_rectangle( - self, - xy: Coords, - radius: float = 0, - fill: _Ink | None = None, - outline: _Ink | None = None, - width: int = 1, - *, - corners: tuple[bool, bool, bool, bool] | None = None, - ) -> None: - """Draw a rounded rectangle.""" - if isinstance(xy[0], (list, tuple)): - (x0, y0), (x1, y1) = cast(Sequence[Sequence[float]], xy) - else: - x0, y0, x1, y1 = cast(Sequence[float], xy) - if x1 < x0: - msg = "x1 must be greater than or equal to x0" - raise ValueError(msg) - if y1 < y0: - msg = "y1 must be greater than or equal to y0" - raise ValueError(msg) - if corners is None: - corners = (True, True, True, True) - - d = radius * 2 - - x0 = round(x0) - y0 = round(y0) - x1 = round(x1) - y1 = round(y1) - full_x, full_y = False, False - if all(corners): - full_x = d >= x1 - x0 - 1 - if full_x: - # The two left and two right corners are joined - d = x1 - x0 - full_y = d >= y1 - y0 - 1 - if full_y: - # The two top and two bottom corners are joined - d = y1 - y0 - if full_x and full_y: - # If all corners are joined, that is a circle - return self.ellipse(xy, fill, outline, width) - - if d == 0 or not any(corners): - # If the corners have no curve, - # or there are no corners, - # that is a rectangle - return self.rectangle(xy, fill, outline, width) - - r = int(d // 2) - ink, fill_ink = self._getink(outline, fill) - - def draw_corners(pieslice: bool) -> None: - parts: tuple[tuple[tuple[float, float, float, float], int, int], ...] - if full_x: - # Draw top and bottom halves - parts = ( - ((x0, y0, x0 + d, y0 + d), 180, 360), - ((x0, y1 - d, x0 + d, y1), 0, 180), - ) - elif full_y: - # Draw left and right halves - parts = ( - ((x0, y0, x0 + d, y0 + d), 90, 270), - ((x1 - d, y0, x1, y0 + d), 270, 90), - ) - else: - # Draw four separate corners - parts = tuple( - part - for i, part in enumerate( - ( - ((x0, y0, x0 + d, y0 + d), 180, 270), - ((x1 - d, y0, x1, y0 + d), 270, 360), - ((x1 - d, y1 - d, x1, y1), 0, 90), - ((x0, y1 - d, x0 + d, y1), 90, 180), - ) - ) - if corners[i] - ) - for part in parts: - if pieslice: - self.draw.draw_pieslice(*(part + (fill_ink, 1))) - else: - self.draw.draw_arc(*(part + (ink, width))) - - if fill_ink is not None: - draw_corners(True) - - if full_x: - self.draw.draw_rectangle((x0, y0 + r + 1, x1, y1 - r - 1), fill_ink, 1) - elif x1 - r - 1 > x0 + r + 1: - self.draw.draw_rectangle((x0 + r + 1, y0, x1 - r - 1, y1), fill_ink, 1) - if not full_x and not full_y: - left = [x0, y0, x0 + r, y1] - if corners[0]: - left[1] += r + 1 - if corners[3]: - left[3] -= r + 1 - self.draw.draw_rectangle(left, fill_ink, 1) - - right = [x1 - r, y0, x1, y1] - if corners[1]: - right[1] += r + 1 - if corners[2]: - right[3] -= r + 1 - self.draw.draw_rectangle(right, fill_ink, 1) - if ink is not None and ink != fill_ink and width != 0: - draw_corners(False) - - if not full_x: - top = [x0, y0, x1, y0 + width - 1] - if corners[0]: - top[0] += r + 1 - if corners[1]: - top[2] -= r + 1 - self.draw.draw_rectangle(top, ink, 1) - - bottom = [x0, y1 - width + 1, x1, y1] - if corners[3]: - bottom[0] += r + 1 - if corners[2]: - bottom[2] -= r + 1 - self.draw.draw_rectangle(bottom, ink, 1) - if not full_y: - left = [x0, y0, x0 + width - 1, y1] - if corners[0]: - left[1] += r + 1 - if corners[3]: - left[3] -= r + 1 - self.draw.draw_rectangle(left, ink, 1) - - right = [x1 - width + 1, y0, x1, y1] - if corners[1]: - right[1] += r + 1 - if corners[2]: - right[3] -= r + 1 - self.draw.draw_rectangle(right, ink, 1) - - def _multiline_check(self, text: AnyStr) -> bool: - split_character = "\n" if isinstance(text, str) else b"\n" - - return split_character in text - - def text( - self, - xy: tuple[float, float], - text: AnyStr, - fill: _Ink | None = None, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ) = None, - anchor: str | None = None, - spacing: float = 4, - align: str = "left", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - stroke_fill: _Ink | None = None, - embedded_color: bool = False, - *args: Any, - **kwargs: Any, - ) -> None: - """Draw text.""" - if embedded_color and self.mode not in ("RGB", "RGBA"): - msg = "Embedded color supported only in RGB and RGBA modes" - raise ValueError(msg) - - if font is None: - font = self._getfont(kwargs.get("font_size")) - - if self._multiline_check(text): - return self.multiline_text( - xy, - text, - fill, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - stroke_fill, - embedded_color, - ) - - def getink(fill: _Ink | None) -> int: - ink, fill_ink = self._getink(fill) - if ink is None: - assert fill_ink is not None - return fill_ink - return ink - - def draw_text(ink: int, stroke_width: float = 0) -> None: - mode = self.fontmode - if stroke_width == 0 and embedded_color: - mode = "RGBA" - coord = [] - for i in range(2): - coord.append(int(xy[i])) - start = (math.modf(xy[0])[0], math.modf(xy[1])[0]) - try: - mask, offset = font.getmask2( # type: ignore[union-attr,misc] - text, - mode, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - stroke_filled=True, - anchor=anchor, - ink=ink, - start=start, - *args, - **kwargs, - ) - coord = [coord[0] + offset[0], coord[1] + offset[1]] - except AttributeError: - try: - mask = font.getmask( # type: ignore[misc] - text, - mode, - direction, - features, - language, - stroke_width, - anchor, - ink, - start=start, - *args, - **kwargs, - ) - except TypeError: - mask = font.getmask(text) - if mode == "RGBA": - # font.getmask2(mode="RGBA") returns color in RGB bands and mask in A - # extract mask and set text alpha - color, mask = mask, mask.getband(3) - ink_alpha = struct.pack("i", ink)[3] - color.fillband(3, ink_alpha) - x, y = coord - if self.im is not None: - self.im.paste( - color, (x, y, x + mask.size[0], y + mask.size[1]), mask - ) - else: - self.draw.draw_bitmap(coord, mask, ink) - - ink = getink(fill) - if ink is not None: - stroke_ink = None - if stroke_width: - stroke_ink = getink(stroke_fill) if stroke_fill is not None else ink - - if stroke_ink is not None: - # Draw stroked text - draw_text(stroke_ink, stroke_width) - - # Draw normal text - if ink != stroke_ink: - draw_text(ink) - else: - # Only draw normal text - draw_text(ink) - - def _prepare_multiline_text( - self, - xy: tuple[float, float], - text: AnyStr, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ), - anchor: str | None, - spacing: float, - align: str, - direction: str | None, - features: list[str] | None, - language: str | None, - stroke_width: float, - embedded_color: bool, - font_size: float | None, - ) -> tuple[ - ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont, - list[tuple[tuple[float, float], str, AnyStr]], - ]: - if anchor is None: - anchor = "lt" if direction == "ttb" else "la" - elif len(anchor) != 2: - msg = "anchor must be a 2 character string" - raise ValueError(msg) - elif anchor[1] in "tb" and direction != "ttb": - msg = "anchor not supported for multiline text" - raise ValueError(msg) - - if font is None: - font = self._getfont(font_size) - - lines = text.split("\n" if isinstance(text, str) else b"\n") - line_spacing = ( - self.textbbox((0, 0), "A", font, stroke_width=stroke_width)[3] - + stroke_width - + spacing - ) - - top = xy[1] - parts = [] - if direction == "ttb": - left = xy[0] - for line in lines: - parts.append(((left, top), anchor, line)) - left += line_spacing - else: - widths = [] - max_width: float = 0 - for line in lines: - line_width = self.textlength( - line, - font, - direction=direction, - features=features, - language=language, - embedded_color=embedded_color, - ) - widths.append(line_width) - max_width = max(max_width, line_width) - - if anchor[1] == "m": - top -= (len(lines) - 1) * line_spacing / 2.0 - elif anchor[1] == "d": - top -= (len(lines) - 1) * line_spacing - - for idx, line in enumerate(lines): - left = xy[0] - width_difference = max_width - widths[idx] - - # align by align parameter - if align in ("left", "justify"): - pass - elif align == "center": - left += width_difference / 2.0 - elif align == "right": - left += width_difference - else: - msg = 'align must be "left", "center", "right" or "justify"' - raise ValueError(msg) - - if ( - align == "justify" - and width_difference != 0 - and idx != len(lines) - 1 - ): - words = line.split(" " if isinstance(text, str) else b" ") - if len(words) > 1: - # align left by anchor - if anchor[0] == "m": - left -= max_width / 2.0 - elif anchor[0] == "r": - left -= max_width - - word_widths = [ - self.textlength( - word, - font, - direction=direction, - features=features, - language=language, - embedded_color=embedded_color, - ) - for word in words - ] - word_anchor = "l" + anchor[1] - width_difference = max_width - sum(word_widths) - for i, word in enumerate(words): - parts.append(((left, top), word_anchor, word)) - left += word_widths[i] + width_difference / (len(words) - 1) - top += line_spacing - continue - - # align left by anchor - if anchor[0] == "m": - left -= width_difference / 2.0 - elif anchor[0] == "r": - left -= width_difference - parts.append(((left, top), anchor, line)) - top += line_spacing - - return font, parts - - def multiline_text( - self, - xy: tuple[float, float], - text: AnyStr, - fill: _Ink | None = None, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ) = None, - anchor: str | None = None, - spacing: float = 4, - align: str = "left", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - stroke_fill: _Ink | None = None, - embedded_color: bool = False, - *, - font_size: float | None = None, - ) -> None: - font, lines = self._prepare_multiline_text( - xy, - text, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - embedded_color, - font_size, - ) - - for xy, anchor, line in lines: - self.text( - xy, - line, - fill, - font, - anchor, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - stroke_fill=stroke_fill, - embedded_color=embedded_color, - ) - - def textlength( - self, - text: AnyStr, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ) = None, - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - embedded_color: bool = False, - *, - font_size: float | None = None, - ) -> float: - """Get the length of a given string, in pixels with 1/64 precision.""" - if self._multiline_check(text): - msg = "can't measure length of multiline text" - raise ValueError(msg) - if embedded_color and self.mode not in ("RGB", "RGBA"): - msg = "Embedded color supported only in RGB and RGBA modes" - raise ValueError(msg) - - if font is None: - font = self._getfont(font_size) - mode = "RGBA" if embedded_color else self.fontmode - return font.getlength(text, mode, direction, features, language) - - def textbbox( - self, - xy: tuple[float, float], - text: AnyStr, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ) = None, - anchor: str | None = None, - spacing: float = 4, - align: str = "left", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - embedded_color: bool = False, - *, - font_size: float | None = None, - ) -> tuple[float, float, float, float]: - """Get the bounding box of a given string, in pixels.""" - if embedded_color and self.mode not in ("RGB", "RGBA"): - msg = "Embedded color supported only in RGB and RGBA modes" - raise ValueError(msg) - - if font is None: - font = self._getfont(font_size) - - if self._multiline_check(text): - return self.multiline_textbbox( - xy, - text, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - embedded_color, - ) - - mode = "RGBA" if embedded_color else self.fontmode - bbox = font.getbbox( - text, mode, direction, features, language, stroke_width, anchor - ) - return bbox[0] + xy[0], bbox[1] + xy[1], bbox[2] + xy[0], bbox[3] + xy[1] - - def multiline_textbbox( - self, - xy: tuple[float, float], - text: AnyStr, - font: ( - ImageFont.ImageFont - | ImageFont.FreeTypeFont - | ImageFont.TransposedFont - | None - ) = None, - anchor: str | None = None, - spacing: float = 4, - align: str = "left", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - embedded_color: bool = False, - *, - font_size: float | None = None, - ) -> tuple[float, float, float, float]: - font, lines = self._prepare_multiline_text( - xy, - text, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - embedded_color, - font_size, - ) - - bbox: tuple[float, float, float, float] | None = None - - for xy, anchor, line in lines: - bbox_line = self.textbbox( - xy, - line, - font, - anchor, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - embedded_color=embedded_color, - ) - if bbox is None: - bbox = bbox_line - else: - bbox = ( - min(bbox[0], bbox_line[0]), - min(bbox[1], bbox_line[1]), - max(bbox[2], bbox_line[2]), - max(bbox[3], bbox_line[3]), - ) - - if bbox is None: - return xy[0], xy[1], xy[0], xy[1] - return bbox - - -def Draw(im: Image.Image, mode: str | None = None) -> ImageDraw: - """ - A simple 2D drawing interface for PIL images. - - :param im: The image to draw in. - :param mode: Optional mode to use for color values. For RGB - images, this argument can be RGB or RGBA (to blend the - drawing into the image). For all other modes, this argument - must be the same as the image mode. If omitted, the mode - defaults to the mode of the image. - """ - try: - return getattr(im, "getdraw")(mode) - except AttributeError: - return ImageDraw(im, mode) - - -def getdraw( - im: Image.Image | None = None, hints: list[str] | None = None -) -> tuple[ImageDraw2.Draw | None, ModuleType]: - """ - :param im: The image to draw in. - :param hints: An optional list of hints. Deprecated. - :returns: A (drawing context, drawing resource factory) tuple. - """ - if hints is not None: - deprecate("'hints' parameter", 12) - from . import ImageDraw2 - - draw = ImageDraw2.Draw(im) if im is not None else None - return draw, ImageDraw2 - - -def floodfill( - image: Image.Image, - xy: tuple[int, int], - value: float | tuple[int, ...], - border: float | tuple[int, ...] | None = None, - thresh: float = 0, -) -> None: - """ - .. warning:: This method is experimental. - - Fills a bounded region with a given color. - - :param image: Target image. - :param xy: Seed position (a 2-item coordinate tuple). See - :ref:`coordinate-system`. - :param value: Fill color. - :param border: Optional border value. If given, the region consists of - pixels with a color different from the border color. If not given, - the region consists of pixels having the same color as the seed - pixel. - :param thresh: Optional threshold value which specifies a maximum - tolerable difference of a pixel value from the 'background' in - order for it to be replaced. Useful for filling regions of - non-homogeneous, but similar, colors. - """ - # based on an implementation by Eric S. Raymond - # amended by yo1995 @20180806 - pixel = image.load() - assert pixel is not None - x, y = xy - try: - background = pixel[x, y] - if _color_diff(value, background) <= thresh: - return # seed point already has fill color - pixel[x, y] = value - except (ValueError, IndexError): - return # seed point outside image - edge = {(x, y)} - # use a set to keep record of current and previous edge pixels - # to reduce memory consumption - full_edge = set() - while edge: - new_edge = set() - for x, y in edge: # 4 adjacent method - for s, t in ((x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)): - # If already processed, or if a coordinate is negative, skip - if (s, t) in full_edge or s < 0 or t < 0: - continue - try: - p = pixel[s, t] - except (ValueError, IndexError): - pass - else: - full_edge.add((s, t)) - if border is None: - fill = _color_diff(p, background) <= thresh - else: - fill = p not in (value, border) - if fill: - pixel[s, t] = value - new_edge.add((s, t)) - full_edge = edge # discard pixels processed - edge = new_edge - - -def _compute_regular_polygon_vertices( - bounding_circle: Sequence[Sequence[float] | float], n_sides: int, rotation: float -) -> list[tuple[float, float]]: - """ - Generate a list of vertices for a 2D regular polygon. - - :param bounding_circle: The bounding circle is a sequence defined - by a point and radius. The polygon is inscribed in this circle. - (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``) - :param n_sides: Number of sides - (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon) - :param rotation: Apply an arbitrary rotation to the polygon - (e.g. ``rotation=90``, applies a 90 degree rotation) - :return: List of regular polygon vertices - (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``) - - How are the vertices computed? - 1. Compute the following variables - - theta: Angle between the apothem & the nearest polygon vertex - - side_length: Length of each polygon edge - - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle) - - polygon_radius: Polygon radius (last element of bounding_circle) - - angles: Location of each polygon vertex in polar grid - (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0]) - - 2. For each angle in angles, get the polygon vertex at that angle - The vertex is computed using the equation below. - X= xcos(φ) + ysin(φ) - Y= −xsin(φ) + ycos(φ) - - Note: - φ = angle in degrees - x = 0 - y = polygon_radius - - The formula above assumes rotation around the origin. - In our case, we are rotating around the centroid. - To account for this, we use the formula below - X = xcos(φ) + ysin(φ) + centroid_x - Y = −xsin(φ) + ycos(φ) + centroid_y - """ - # 1. Error Handling - # 1.1 Check `n_sides` has an appropriate value - if not isinstance(n_sides, int): - msg = "n_sides should be an int" # type: ignore[unreachable] - raise TypeError(msg) - if n_sides < 3: - msg = "n_sides should be an int > 2" - raise ValueError(msg) - - # 1.2 Check `bounding_circle` has an appropriate value - if not isinstance(bounding_circle, (list, tuple)): - msg = "bounding_circle should be a sequence" - raise TypeError(msg) - - if len(bounding_circle) == 3: - if not all(isinstance(i, (int, float)) for i in bounding_circle): - msg = "bounding_circle should only contain numeric data" - raise ValueError(msg) - - *centroid, polygon_radius = cast(list[float], list(bounding_circle)) - elif len(bounding_circle) == 2 and isinstance(bounding_circle[0], (list, tuple)): - if not all( - isinstance(i, (int, float)) for i in bounding_circle[0] - ) or not isinstance(bounding_circle[1], (int, float)): - msg = "bounding_circle should only contain numeric data" - raise ValueError(msg) - - if len(bounding_circle[0]) != 2: - msg = "bounding_circle centre should contain 2D coordinates (e.g. (x, y))" - raise ValueError(msg) - - centroid = cast(list[float], list(bounding_circle[0])) - polygon_radius = cast(float, bounding_circle[1]) - else: - msg = ( - "bounding_circle should contain 2D coordinates " - "and a radius (e.g. (x, y, r) or ((x, y), r) )" - ) - raise ValueError(msg) - - if polygon_radius <= 0: - msg = "bounding_circle radius should be > 0" - raise ValueError(msg) - - # 1.3 Check `rotation` has an appropriate value - if not isinstance(rotation, (int, float)): - msg = "rotation should be an int or float" # type: ignore[unreachable] - raise ValueError(msg) - - # 2. Define Helper Functions - def _apply_rotation(point: list[float], degrees: float) -> tuple[float, float]: - return ( - round( - point[0] * math.cos(math.radians(360 - degrees)) - - point[1] * math.sin(math.radians(360 - degrees)) - + centroid[0], - 2, - ), - round( - point[1] * math.cos(math.radians(360 - degrees)) - + point[0] * math.sin(math.radians(360 - degrees)) - + centroid[1], - 2, - ), - ) - - def _compute_polygon_vertex(angle: float) -> tuple[float, float]: - start_point = [polygon_radius, 0] - return _apply_rotation(start_point, angle) - - def _get_angles(n_sides: int, rotation: float) -> list[float]: - angles = [] - degrees = 360 / n_sides - # Start with the bottom left polygon vertex - current_angle = (270 - 0.5 * degrees) + rotation - for _ in range(n_sides): - angles.append(current_angle) - current_angle += degrees - if current_angle > 360: - current_angle -= 360 - return angles - - # 3. Variable Declarations - angles = _get_angles(n_sides, rotation) - - # 4. Compute Vertices - return [_compute_polygon_vertex(angle) for angle in angles] - - -def _color_diff( - color1: float | tuple[int, ...], color2: float | tuple[int, ...] -) -> float: - """ - Uses 1-norm distance to calculate difference between two values. - """ - first = color1 if isinstance(color1, tuple) else (color1,) - second = color2 if isinstance(color2, tuple) else (color2,) - - return sum(abs(first[i] - second[i]) for i in range(len(second))) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageDraw2.py b/myenv/lib/python3.12/site-packages/PIL/ImageDraw2.py deleted file mode 100644 index 3d68658..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageDraw2.py +++ /dev/null @@ -1,243 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# WCK-style drawing interface operations -# -# History: -# 2003-12-07 fl created -# 2005-05-15 fl updated; added to PIL as ImageDraw2 -# 2005-05-15 fl added text support -# 2005-05-20 fl added arc/chord/pieslice support -# -# Copyright (c) 2003-2005 by Secret Labs AB -# Copyright (c) 2003-2005 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - - -""" -(Experimental) WCK-style drawing interface operations - -.. seealso:: :py:mod:`PIL.ImageDraw` -""" -from __future__ import annotations - -from typing import Any, AnyStr, BinaryIO - -from . import Image, ImageColor, ImageDraw, ImageFont, ImagePath -from ._typing import Coords, StrOrBytesPath - - -class Pen: - """Stores an outline color and width.""" - - def __init__(self, color: str, width: int = 1, opacity: int = 255) -> None: - self.color = ImageColor.getrgb(color) - self.width = width - - -class Brush: - """Stores a fill color""" - - def __init__(self, color: str, opacity: int = 255) -> None: - self.color = ImageColor.getrgb(color) - - -class Font: - """Stores a TrueType font and color""" - - def __init__( - self, color: str, file: StrOrBytesPath | BinaryIO, size: float = 12 - ) -> None: - # FIXME: add support for bitmap fonts - self.color = ImageColor.getrgb(color) - self.font = ImageFont.truetype(file, size) - - -class Draw: - """ - (Experimental) WCK-style drawing interface - """ - - def __init__( - self, - image: Image.Image | str, - size: tuple[int, int] | list[int] | None = None, - color: float | tuple[float, ...] | str | None = None, - ) -> None: - if isinstance(image, str): - if size is None: - msg = "If image argument is mode string, size must be a list or tuple" - raise ValueError(msg) - image = Image.new(image, size, color) - self.draw = ImageDraw.Draw(image) - self.image = image - self.transform: tuple[float, float, float, float, float, float] | None = None - - def flush(self) -> Image.Image: - return self.image - - def render( - self, - op: str, - xy: Coords, - pen: Pen | Brush | None, - brush: Brush | Pen | None = None, - **kwargs: Any, - ) -> None: - # handle color arguments - outline = fill = None - width = 1 - if isinstance(pen, Pen): - outline = pen.color - width = pen.width - elif isinstance(brush, Pen): - outline = brush.color - width = brush.width - if isinstance(brush, Brush): - fill = brush.color - elif isinstance(pen, Brush): - fill = pen.color - # handle transformation - if self.transform: - path = ImagePath.Path(xy) - path.transform(self.transform) - xy = path - # render the item - if op in ("arc", "line"): - kwargs.setdefault("fill", outline) - else: - kwargs.setdefault("fill", fill) - kwargs.setdefault("outline", outline) - if op == "line": - kwargs.setdefault("width", width) - getattr(self.draw, op)(xy, **kwargs) - - def settransform(self, offset: tuple[float, float]) -> None: - """Sets a transformation offset.""" - (xoffset, yoffset) = offset - self.transform = (1, 0, xoffset, 0, 1, yoffset) - - def arc( - self, - xy: Coords, - pen: Pen | Brush | None, - start: float, - end: float, - *options: Any, - ) -> None: - """ - Draws an arc (a portion of a circle outline) between the start and end - angles, inside the given bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.arc` - """ - self.render("arc", xy, pen, *options, start=start, end=end) - - def chord( - self, - xy: Coords, - pen: Pen | Brush | None, - start: float, - end: float, - *options: Any, - ) -> None: - """ - Same as :py:meth:`~PIL.ImageDraw2.Draw.arc`, but connects the end points - with a straight line. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.chord` - """ - self.render("chord", xy, pen, *options, start=start, end=end) - - def ellipse(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: - """ - Draws an ellipse inside the given bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse` - """ - self.render("ellipse", xy, pen, *options) - - def line(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: - """ - Draws a line between the coordinates in the ``xy`` list. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line` - """ - self.render("line", xy, pen, *options) - - def pieslice( - self, - xy: Coords, - pen: Pen | Brush | None, - start: float, - end: float, - *options: Any, - ) -> None: - """ - Same as arc, but also draws straight lines between the end points and the - center of the bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.pieslice` - """ - self.render("pieslice", xy, pen, *options, start=start, end=end) - - def polygon(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: - """ - Draws a polygon. - - The polygon outline consists of straight lines between the given - coordinates, plus a straight line between the last and the first - coordinate. - - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.polygon` - """ - self.render("polygon", xy, pen, *options) - - def rectangle(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: - """ - Draws a rectangle. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle` - """ - self.render("rectangle", xy, pen, *options) - - def text(self, xy: tuple[float, float], text: AnyStr, font: Font) -> None: - """ - Draws the string at the given position. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text` - """ - if self.transform: - path = ImagePath.Path(xy) - path.transform(self.transform) - xy = path - self.draw.text(xy, text, font=font.font, fill=font.color) - - def textbbox( - self, xy: tuple[float, float], text: AnyStr, font: Font - ) -> tuple[float, float, float, float]: - """ - Returns bounding box (in pixels) of given text. - - :return: ``(left, top, right, bottom)`` bounding box - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textbbox` - """ - if self.transform: - path = ImagePath.Path(xy) - path.transform(self.transform) - xy = path - return self.draw.textbbox(xy, text, font=font.font) - - def textlength(self, text: AnyStr, font: Font) -> float: - """ - Returns length (in pixels) of given text. - This is the amount by which following text should be offset. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textlength` - """ - return self.draw.textlength(text, font=font.font) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageEnhance.py b/myenv/lib/python3.12/site-packages/PIL/ImageEnhance.py deleted file mode 100644 index 0e7e6dd..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageEnhance.py +++ /dev/null @@ -1,113 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# image enhancement classes -# -# For a background, see "Image Processing By Interpolation and -# Extrapolation", Paul Haeberli and Douglas Voorhies. Available -# at http://www.graficaobscura.com/interp/index.html -# -# History: -# 1996-03-23 fl Created -# 2009-06-16 fl Fixed mean calculation -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image, ImageFilter, ImageStat - - -class _Enhance: - image: Image.Image - degenerate: Image.Image - - def enhance(self, factor: float) -> Image.Image: - """ - Returns an enhanced image. - - :param factor: A floating point value controlling the enhancement. - Factor 1.0 always returns a copy of the original image, - lower factors mean less color (brightness, contrast, - etc), and higher values more. There are no restrictions - on this value. - :rtype: :py:class:`~PIL.Image.Image` - """ - return Image.blend(self.degenerate, self.image, factor) - - -class Color(_Enhance): - """Adjust image color balance. - - This class can be used to adjust the colour balance of an image, in - a manner similar to the controls on a colour TV set. An enhancement - factor of 0.0 gives a black and white image. A factor of 1.0 gives - the original image. - """ - - def __init__(self, image: Image.Image) -> None: - self.image = image - self.intermediate_mode = "L" - if "A" in image.getbands(): - self.intermediate_mode = "LA" - - if self.intermediate_mode != image.mode: - image = image.convert(self.intermediate_mode).convert(image.mode) - self.degenerate = image - - -class Contrast(_Enhance): - """Adjust image contrast. - - This class can be used to control the contrast of an image, similar - to the contrast control on a TV set. An enhancement factor of 0.0 - gives a solid gray image. A factor of 1.0 gives the original image. - """ - - def __init__(self, image: Image.Image) -> None: - self.image = image - if image.mode != "L": - image = image.convert("L") - mean = int(ImageStat.Stat(image).mean[0] + 0.5) - self.degenerate = Image.new("L", image.size, mean) - if self.degenerate.mode != self.image.mode: - self.degenerate = self.degenerate.convert(self.image.mode) - - if "A" in self.image.getbands(): - self.degenerate.putalpha(self.image.getchannel("A")) - - -class Brightness(_Enhance): - """Adjust image brightness. - - This class can be used to control the brightness of an image. An - enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the - original image. - """ - - def __init__(self, image: Image.Image) -> None: - self.image = image - self.degenerate = Image.new(image.mode, image.size, 0) - - if "A" in image.getbands(): - self.degenerate.putalpha(image.getchannel("A")) - - -class Sharpness(_Enhance): - """Adjust image sharpness. - - This class can be used to adjust the sharpness of an image. An - enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the - original image, and a factor of 2.0 gives a sharpened image. - """ - - def __init__(self, image: Image.Image) -> None: - self.image = image - self.degenerate = image.filter(ImageFilter.SMOOTH) - - if "A" in image.getbands(): - self.degenerate.putalpha(image.getchannel("A")) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageFile.py b/myenv/lib/python3.12/site-packages/PIL/ImageFile.py deleted file mode 100644 index bf556a2..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageFile.py +++ /dev/null @@ -1,922 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# base class for image file handlers -# -# history: -# 1995-09-09 fl Created -# 1996-03-11 fl Fixed load mechanism. -# 1996-04-15 fl Added pcx/xbm decoders. -# 1996-04-30 fl Added encoders. -# 1996-12-14 fl Added load helpers -# 1997-01-11 fl Use encode_to_file where possible -# 1997-08-27 fl Flush output in _save -# 1998-03-05 fl Use memory mapping for some modes -# 1999-02-04 fl Use memory mapping also for "I;16" and "I;16B" -# 1999-05-31 fl Added image parser -# 2000-10-12 fl Set readonly flag on memory-mapped images -# 2002-03-20 fl Use better messages for common decoder errors -# 2003-04-21 fl Fall back on mmap/map_buffer if map is not available -# 2003-10-30 fl Added StubImageFile class -# 2004-02-25 fl Made incremental parser more robust -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1995-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import abc -import io -import itertools -import logging -import os -import struct -from typing import IO, Any, NamedTuple, cast - -from . import ExifTags, Image -from ._deprecate import deprecate -from ._util import DeferredError, is_path - -TYPE_CHECKING = False -if TYPE_CHECKING: - from ._typing import StrOrBytesPath - -logger = logging.getLogger(__name__) - -MAXBLOCK = 65536 - -SAFEBLOCK = 1024 * 1024 - -LOAD_TRUNCATED_IMAGES = False -"""Whether or not to load truncated image files. User code may change this.""" - -ERRORS = { - -1: "image buffer overrun error", - -2: "decoding error", - -3: "unknown error", - -8: "bad configuration", - -9: "out of memory error", -} -""" -Dict of known error codes returned from :meth:`.PyDecoder.decode`, -:meth:`.PyEncoder.encode` :meth:`.PyEncoder.encode_to_pyfd` and -:meth:`.PyEncoder.encode_to_file`. -""" - - -# -# -------------------------------------------------------------------- -# Helpers - - -def _get_oserror(error: int, *, encoder: bool) -> OSError: - try: - msg = Image.core.getcodecstatus(error) - except AttributeError: - msg = ERRORS.get(error) - if not msg: - msg = f"{'encoder' if encoder else 'decoder'} error {error}" - msg += f" when {'writing' if encoder else 'reading'} image file" - return OSError(msg) - - -def raise_oserror(error: int) -> OSError: - deprecate( - "raise_oserror", - 12, - action="It is only useful for translating error codes returned by a codec's " - "decode() method, which ImageFile already does automatically.", - ) - raise _get_oserror(error, encoder=False) - - -def _tilesort(t: _Tile) -> int: - # sort on offset - return t[2] - - -class _Tile(NamedTuple): - codec_name: str - extents: tuple[int, int, int, int] | None - offset: int = 0 - args: tuple[Any, ...] | str | None = None - - -# -# -------------------------------------------------------------------- -# ImageFile base class - - -class ImageFile(Image.Image): - """Base class for image file format handlers.""" - - def __init__( - self, fp: StrOrBytesPath | IO[bytes], filename: str | bytes | None = None - ) -> None: - super().__init__() - - self._min_frame = 0 - - self.custom_mimetype: str | None = None - - self.tile: list[_Tile] = [] - """ A list of tile descriptors """ - - self.readonly = 1 # until we know better - - self.decoderconfig: tuple[Any, ...] = () - self.decodermaxblock = MAXBLOCK - - if is_path(fp): - # filename - self.fp = open(fp, "rb") - self.filename = os.fspath(fp) - self._exclusive_fp = True - else: - # stream - self.fp = cast(IO[bytes], fp) - self.filename = filename if filename is not None else "" - # can be overridden - self._exclusive_fp = False - - try: - try: - self._open() - except ( - IndexError, # end of data - TypeError, # end of data (ord) - KeyError, # unsupported mode - EOFError, # got header but not the first frame - struct.error, - ) as v: - raise SyntaxError(v) from v - - if not self.mode or self.size[0] <= 0 or self.size[1] <= 0: - msg = "not identified by this driver" - raise SyntaxError(msg) - except BaseException: - # close the file only if we have opened it this constructor - if self._exclusive_fp: - self.fp.close() - raise - - def _open(self) -> None: - pass - - def _close_fp(self): - if getattr(self, "_fp", False) and not isinstance(self._fp, DeferredError): - if self._fp != self.fp: - self._fp.close() - self._fp = DeferredError(ValueError("Operation on closed image")) - if self.fp: - self.fp.close() - - def close(self) -> None: - """ - Closes the file pointer, if possible. - - This operation will destroy the image core and release its memory. - The image data will be unusable afterward. - - This function is required to close images that have multiple frames or - have not had their file read and closed by the - :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for - more information. - """ - try: - self._close_fp() - self.fp = None - except Exception as msg: - logger.debug("Error closing: %s", msg) - - super().close() - - def get_child_images(self) -> list[ImageFile]: - child_images = [] - exif = self.getexif() - ifds = [] - if ExifTags.Base.SubIFDs in exif: - subifd_offsets = exif[ExifTags.Base.SubIFDs] - if subifd_offsets: - if not isinstance(subifd_offsets, tuple): - subifd_offsets = (subifd_offsets,) - for subifd_offset in subifd_offsets: - ifds.append((exif._get_ifd_dict(subifd_offset), subifd_offset)) - ifd1 = exif.get_ifd(ExifTags.IFD.IFD1) - if ifd1 and ifd1.get(ExifTags.Base.JpegIFOffset): - assert exif._info is not None - ifds.append((ifd1, exif._info.next)) - - offset = None - for ifd, ifd_offset in ifds: - assert self.fp is not None - current_offset = self.fp.tell() - if offset is None: - offset = current_offset - - fp = self.fp - if ifd is not None: - thumbnail_offset = ifd.get(ExifTags.Base.JpegIFOffset) - if thumbnail_offset is not None: - thumbnail_offset += getattr(self, "_exif_offset", 0) - self.fp.seek(thumbnail_offset) - - length = ifd.get(ExifTags.Base.JpegIFByteCount) - assert isinstance(length, int) - data = self.fp.read(length) - fp = io.BytesIO(data) - - with Image.open(fp) as im: - from . import TiffImagePlugin - - if thumbnail_offset is None and isinstance( - im, TiffImagePlugin.TiffImageFile - ): - im._frame_pos = [ifd_offset] - im._seek(0) - im.load() - child_images.append(im) - - if offset is not None: - assert self.fp is not None - self.fp.seek(offset) - return child_images - - def get_format_mimetype(self) -> str | None: - if self.custom_mimetype: - return self.custom_mimetype - if self.format is not None: - return Image.MIME.get(self.format.upper()) - return None - - def __getstate__(self) -> list[Any]: - return super().__getstate__() + [self.filename] - - def __setstate__(self, state: list[Any]) -> None: - self.tile = [] - if len(state) > 5: - self.filename = state[5] - super().__setstate__(state) - - def verify(self) -> None: - """Check file integrity""" - - # raise exception if something's wrong. must be called - # directly after open, and closes file when finished. - if self._exclusive_fp: - self.fp.close() - self.fp = None - - def load(self) -> Image.core.PixelAccess | None: - """Load image data based on tile list""" - - if not self.tile and self._im is None: - msg = "cannot load this image" - raise OSError(msg) - - pixel = Image.Image.load(self) - if not self.tile: - return pixel - - self.map: mmap.mmap | None = None - use_mmap = self.filename and len(self.tile) == 1 - - readonly = 0 - - # look for read/seek overrides - if hasattr(self, "load_read"): - read = self.load_read - # don't use mmap if there are custom read/seek functions - use_mmap = False - else: - read = self.fp.read - - if hasattr(self, "load_seek"): - seek = self.load_seek - use_mmap = False - else: - seek = self.fp.seek - - if use_mmap: - # try memory mapping - decoder_name, extents, offset, args = self.tile[0] - if isinstance(args, str): - args = (args, 0, 1) - if ( - decoder_name == "raw" - and isinstance(args, tuple) - and len(args) >= 3 - and args[0] == self.mode - and args[0] in Image._MAPMODES - ): - try: - # use mmap, if possible - import mmap - - with open(self.filename) as fp: - self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ) - if offset + self.size[1] * args[1] > self.map.size(): - msg = "buffer is not large enough" - raise OSError(msg) - self.im = Image.core.map_buffer( - self.map, self.size, decoder_name, offset, args - ) - readonly = 1 - # After trashing self.im, - # we might need to reload the palette data. - if self.palette: - self.palette.dirty = 1 - except (AttributeError, OSError, ImportError): - self.map = None - - self.load_prepare() - err_code = -3 # initialize to unknown error - if not self.map: - # sort tiles in file order - self.tile.sort(key=_tilesort) - - # FIXME: This is a hack to handle TIFF's JpegTables tag. - prefix = getattr(self, "tile_prefix", b"") - - # Remove consecutive duplicates that only differ by their offset - self.tile = [ - list(tiles)[-1] - for _, tiles in itertools.groupby( - self.tile, lambda tile: (tile[0], tile[1], tile[3]) - ) - ] - for i, (decoder_name, extents, offset, args) in enumerate(self.tile): - seek(offset) - decoder = Image._getdecoder( - self.mode, decoder_name, args, self.decoderconfig - ) - try: - decoder.setimage(self.im, extents) - if decoder.pulls_fd: - decoder.setfd(self.fp) - err_code = decoder.decode(b"")[1] - else: - b = prefix - while True: - read_bytes = self.decodermaxblock - if i + 1 < len(self.tile): - next_offset = self.tile[i + 1].offset - if next_offset > offset: - read_bytes = next_offset - offset - try: - s = read(read_bytes) - except (IndexError, struct.error) as e: - # truncated png/gif - if LOAD_TRUNCATED_IMAGES: - break - else: - msg = "image file is truncated" - raise OSError(msg) from e - - if not s: # truncated jpeg - if LOAD_TRUNCATED_IMAGES: - break - else: - msg = ( - "image file is truncated " - f"({len(b)} bytes not processed)" - ) - raise OSError(msg) - - b = b + s - n, err_code = decoder.decode(b) - if n < 0: - break - b = b[n:] - finally: - # Need to cleanup here to prevent leaks - decoder.cleanup() - - self.tile = [] - self.readonly = readonly - - self.load_end() - - if self._exclusive_fp and self._close_exclusive_fp_after_loading: - self.fp.close() - self.fp = None - - if not self.map and not LOAD_TRUNCATED_IMAGES and err_code < 0: - # still raised if decoder fails to return anything - raise _get_oserror(err_code, encoder=False) - - return Image.Image.load(self) - - def load_prepare(self) -> None: - # create image memory if necessary - if self._im is None: - self.im = Image.core.new(self.mode, self.size) - # create palette (optional) - if self.mode == "P": - Image.Image.load(self) - - def load_end(self) -> None: - # may be overridden - pass - - # may be defined for contained formats - # def load_seek(self, pos: int) -> None: - # pass - - # may be defined for blocked formats (e.g. PNG) - # def load_read(self, read_bytes: int) -> bytes: - # pass - - def _seek_check(self, frame: int) -> bool: - if ( - frame < self._min_frame - # Only check upper limit on frames if additional seek operations - # are not required to do so - or ( - not (hasattr(self, "_n_frames") and self._n_frames is None) - and frame >= getattr(self, "n_frames") + self._min_frame - ) - ): - msg = "attempt to seek outside sequence" - raise EOFError(msg) - - return self.tell() != frame - - -class StubHandler(abc.ABC): - def open(self, im: StubImageFile) -> None: - pass - - @abc.abstractmethod - def load(self, im: StubImageFile) -> Image.Image: - pass - - -class StubImageFile(ImageFile, metaclass=abc.ABCMeta): - """ - Base class for stub image loaders. - - A stub loader is an image loader that can identify files of a - certain format, but relies on external code to load the file. - """ - - @abc.abstractmethod - def _open(self) -> None: - pass - - def load(self) -> Image.core.PixelAccess | None: - loader = self._load() - if loader is None: - msg = f"cannot find loader for this {self.format} file" - raise OSError(msg) - image = loader.load(self) - assert image is not None - # become the other object (!) - self.__class__ = image.__class__ # type: ignore[assignment] - self.__dict__ = image.__dict__ - return image.load() - - @abc.abstractmethod - def _load(self) -> StubHandler | None: - """(Hook) Find actual image loader.""" - pass - - -class Parser: - """ - Incremental image parser. This class implements the standard - feed/close consumer interface. - """ - - incremental = None - image: Image.Image | None = None - data: bytes | None = None - decoder: Image.core.ImagingDecoder | PyDecoder | None = None - offset = 0 - finished = 0 - - def reset(self) -> None: - """ - (Consumer) Reset the parser. Note that you can only call this - method immediately after you've created a parser; parser - instances cannot be reused. - """ - assert self.data is None, "cannot reuse parsers" - - def feed(self, data: bytes) -> None: - """ - (Consumer) Feed data to the parser. - - :param data: A string buffer. - :exception OSError: If the parser failed to parse the image file. - """ - # collect data - - if self.finished: - return - - if self.data is None: - self.data = data - else: - self.data = self.data + data - - # parse what we have - if self.decoder: - if self.offset > 0: - # skip header - skip = min(len(self.data), self.offset) - self.data = self.data[skip:] - self.offset = self.offset - skip - if self.offset > 0 or not self.data: - return - - n, e = self.decoder.decode(self.data) - - if n < 0: - # end of stream - self.data = None - self.finished = 1 - if e < 0: - # decoding error - self.image = None - raise _get_oserror(e, encoder=False) - else: - # end of image - return - self.data = self.data[n:] - - elif self.image: - # if we end up here with no decoder, this file cannot - # be incrementally parsed. wait until we've gotten all - # available data - pass - - else: - # attempt to open this file - try: - with io.BytesIO(self.data) as fp: - im = Image.open(fp) - except OSError: - pass # not enough data - else: - flag = hasattr(im, "load_seek") or hasattr(im, "load_read") - if flag or len(im.tile) != 1: - # custom load code, or multiple tiles - self.decode = None - else: - # initialize decoder - im.load_prepare() - d, e, o, a = im.tile[0] - im.tile = [] - self.decoder = Image._getdecoder(im.mode, d, a, im.decoderconfig) - self.decoder.setimage(im.im, e) - - # calculate decoder offset - self.offset = o - if self.offset <= len(self.data): - self.data = self.data[self.offset :] - self.offset = 0 - - self.image = im - - def __enter__(self) -> Parser: - return self - - def __exit__(self, *args: object) -> None: - self.close() - - def close(self) -> Image.Image: - """ - (Consumer) Close the stream. - - :returns: An image object. - :exception OSError: If the parser failed to parse the image file either - because it cannot be identified or cannot be - decoded. - """ - # finish decoding - if self.decoder: - # get rid of what's left in the buffers - self.feed(b"") - self.data = self.decoder = None - if not self.finished: - msg = "image was incomplete" - raise OSError(msg) - if not self.image: - msg = "cannot parse this image" - raise OSError(msg) - if self.data: - # incremental parsing not possible; reopen the file - # not that we have all data - with io.BytesIO(self.data) as fp: - try: - self.image = Image.open(fp) - finally: - self.image.load() - return self.image - - -# -------------------------------------------------------------------- - - -def _save(im: Image.Image, fp: IO[bytes], tile: list[_Tile], bufsize: int = 0) -> None: - """Helper to save image based on tile list - - :param im: Image object. - :param fp: File object. - :param tile: Tile list. - :param bufsize: Optional buffer size - """ - - im.load() - if not hasattr(im, "encoderconfig"): - im.encoderconfig = () - tile.sort(key=_tilesort) - # FIXME: make MAXBLOCK a configuration parameter - # It would be great if we could have the encoder specify what it needs - # But, it would need at least the image size in most cases. RawEncode is - # a tricky case. - bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c - try: - fh = fp.fileno() - fp.flush() - _encode_tile(im, fp, tile, bufsize, fh) - except (AttributeError, io.UnsupportedOperation) as exc: - _encode_tile(im, fp, tile, bufsize, None, exc) - if hasattr(fp, "flush"): - fp.flush() - - -def _encode_tile( - im: Image.Image, - fp: IO[bytes], - tile: list[_Tile], - bufsize: int, - fh: int | None, - exc: BaseException | None = None, -) -> None: - for encoder_name, extents, offset, args in tile: - if offset > 0: - fp.seek(offset) - encoder = Image._getencoder(im.mode, encoder_name, args, im.encoderconfig) - try: - encoder.setimage(im.im, extents) - if encoder.pushes_fd: - encoder.setfd(fp) - errcode = encoder.encode_to_pyfd()[1] - else: - if exc: - # compress to Python file-compatible object - while True: - errcode, data = encoder.encode(bufsize)[1:] - fp.write(data) - if errcode: - break - else: - # slight speedup: compress to real file object - assert fh is not None - errcode = encoder.encode_to_file(fh, bufsize) - if errcode < 0: - raise _get_oserror(errcode, encoder=True) from exc - finally: - encoder.cleanup() - - -def _safe_read(fp: IO[bytes], size: int) -> bytes: - """ - Reads large blocks in a safe way. Unlike fp.read(n), this function - doesn't trust the user. If the requested size is larger than - SAFEBLOCK, the file is read block by block. - - :param fp: File handle. Must implement a read method. - :param size: Number of bytes to read. - :returns: A string containing size bytes of data. - - Raises an OSError if the file is truncated and the read cannot be completed - - """ - if size <= 0: - return b"" - if size <= SAFEBLOCK: - data = fp.read(size) - if len(data) < size: - msg = "Truncated File Read" - raise OSError(msg) - return data - blocks: list[bytes] = [] - remaining_size = size - while remaining_size > 0: - block = fp.read(min(remaining_size, SAFEBLOCK)) - if not block: - break - blocks.append(block) - remaining_size -= len(block) - if sum(len(block) for block in blocks) < size: - msg = "Truncated File Read" - raise OSError(msg) - return b"".join(blocks) - - -class PyCodecState: - def __init__(self) -> None: - self.xsize = 0 - self.ysize = 0 - self.xoff = 0 - self.yoff = 0 - - def extents(self) -> tuple[int, int, int, int]: - return self.xoff, self.yoff, self.xoff + self.xsize, self.yoff + self.ysize - - -class PyCodec: - fd: IO[bytes] | None - - def __init__(self, mode: str, *args: Any) -> None: - self.im: Image.core.ImagingCore | None = None - self.state = PyCodecState() - self.fd = None - self.mode = mode - self.init(args) - - def init(self, args: tuple[Any, ...]) -> None: - """ - Override to perform codec specific initialization - - :param args: Tuple of arg items from the tile entry - :returns: None - """ - self.args = args - - def cleanup(self) -> None: - """ - Override to perform codec specific cleanup - - :returns: None - """ - pass - - def setfd(self, fd: IO[bytes]) -> None: - """ - Called from ImageFile to set the Python file-like object - - :param fd: A Python file-like object - :returns: None - """ - self.fd = fd - - def setimage( - self, - im: Image.core.ImagingCore, - extents: tuple[int, int, int, int] | None = None, - ) -> None: - """ - Called from ImageFile to set the core output image for the codec - - :param im: A core image object - :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle - for this tile - :returns: None - """ - - # following c code - self.im = im - - if extents: - (x0, y0, x1, y1) = extents - else: - (x0, y0, x1, y1) = (0, 0, 0, 0) - - if x0 == 0 and x1 == 0: - self.state.xsize, self.state.ysize = self.im.size - else: - self.state.xoff = x0 - self.state.yoff = y0 - self.state.xsize = x1 - x0 - self.state.ysize = y1 - y0 - - if self.state.xsize <= 0 or self.state.ysize <= 0: - msg = "Size cannot be negative" - raise ValueError(msg) - - if ( - self.state.xsize + self.state.xoff > self.im.size[0] - or self.state.ysize + self.state.yoff > self.im.size[1] - ): - msg = "Tile cannot extend outside image" - raise ValueError(msg) - - -class PyDecoder(PyCodec): - """ - Python implementation of a format decoder. Override this class and - add the decoding logic in the :meth:`decode` method. - - See :ref:`Writing Your Own File Codec in Python` - """ - - _pulls_fd = False - - @property - def pulls_fd(self) -> bool: - return self._pulls_fd - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - """ - Override to perform the decoding process. - - :param buffer: A bytes object with the data to be decoded. - :returns: A tuple of ``(bytes consumed, errcode)``. - If finished with decoding return -1 for the bytes consumed. - Err codes are from :data:`.ImageFile.ERRORS`. - """ - msg = "unavailable in base decoder" - raise NotImplementedError(msg) - - def set_as_raw( - self, data: bytes, rawmode: str | None = None, extra: tuple[Any, ...] = () - ) -> None: - """ - Convenience method to set the internal image from a stream of raw data - - :param data: Bytes to be set - :param rawmode: The rawmode to be used for the decoder. - If not specified, it will default to the mode of the image - :param extra: Extra arguments for the decoder. - :returns: None - """ - - if not rawmode: - rawmode = self.mode - d = Image._getdecoder(self.mode, "raw", rawmode, extra) - assert self.im is not None - d.setimage(self.im, self.state.extents()) - s = d.decode(data) - - if s[0] >= 0: - msg = "not enough image data" - raise ValueError(msg) - if s[1] != 0: - msg = "cannot decode image data" - raise ValueError(msg) - - -class PyEncoder(PyCodec): - """ - Python implementation of a format encoder. Override this class and - add the decoding logic in the :meth:`encode` method. - - See :ref:`Writing Your Own File Codec in Python` - """ - - _pushes_fd = False - - @property - def pushes_fd(self) -> bool: - return self._pushes_fd - - def encode(self, bufsize: int) -> tuple[int, int, bytes]: - """ - Override to perform the encoding process. - - :param bufsize: Buffer size. - :returns: A tuple of ``(bytes encoded, errcode, bytes)``. - If finished with encoding return 1 for the error code. - Err codes are from :data:`.ImageFile.ERRORS`. - """ - msg = "unavailable in base encoder" - raise NotImplementedError(msg) - - def encode_to_pyfd(self) -> tuple[int, int]: - """ - If ``pushes_fd`` is ``True``, then this method will be used, - and ``encode()`` will only be called once. - - :returns: A tuple of ``(bytes consumed, errcode)``. - Err codes are from :data:`.ImageFile.ERRORS`. - """ - if not self.pushes_fd: - return 0, -8 # bad configuration - bytes_consumed, errcode, data = self.encode(0) - if data: - assert self.fd is not None - self.fd.write(data) - return bytes_consumed, errcode - - def encode_to_file(self, fh: int, bufsize: int) -> int: - """ - :param fh: File handle. - :param bufsize: Buffer size. - - :returns: If finished successfully, return 0. - Otherwise, return an error code. Err codes are from - :data:`.ImageFile.ERRORS`. - """ - errcode = 0 - while errcode == 0: - status, errcode, buf = self.encode(bufsize) - if status > 0: - os.write(fh, buf[status:]) - return errcode diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageFilter.py b/myenv/lib/python3.12/site-packages/PIL/ImageFilter.py deleted file mode 100644 index b9ed54a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageFilter.py +++ /dev/null @@ -1,604 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard filters -# -# History: -# 1995-11-27 fl Created -# 2002-06-08 fl Added rank and mode filters -# 2003-09-15 fl Fixed rank calculation in rank filter; added expand call -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2002 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import abc -import functools -from collections.abc import Sequence -from types import ModuleType -from typing import Any, Callable, cast - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import _imaging - from ._typing import NumpyArray - - -class Filter(abc.ABC): - @abc.abstractmethod - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - pass - - -class MultibandFilter(Filter): - pass - - -class BuiltinFilter(MultibandFilter): - filterargs: tuple[Any, ...] - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - if image.mode == "P": - msg = "cannot filter palette images" - raise ValueError(msg) - return image.filter(*self.filterargs) - - -class Kernel(BuiltinFilter): - """ - Create a convolution kernel. This only supports 3x3 and 5x5 integer and floating - point kernels. - - Kernels can only be applied to "L" and "RGB" images. - - :param size: Kernel size, given as (width, height). This must be (3,3) or (5,5). - :param kernel: A sequence containing kernel weights. The kernel will be flipped - vertically before being applied to the image. - :param scale: Scale factor. If given, the result for each pixel is divided by this - value. The default is the sum of the kernel weights. - :param offset: Offset. If given, this value is added to the result, after it has - been divided by the scale factor. - """ - - name = "Kernel" - - def __init__( - self, - size: tuple[int, int], - kernel: Sequence[float], - scale: float | None = None, - offset: float = 0, - ) -> None: - if scale is None: - # default scale is sum of kernel - scale = functools.reduce(lambda a, b: a + b, kernel) - if size[0] * size[1] != len(kernel): - msg = "not enough coefficients in kernel" - raise ValueError(msg) - self.filterargs = size, scale, offset, kernel - - -class RankFilter(Filter): - """ - Create a rank filter. The rank filter sorts all pixels in - a window of the given size, and returns the ``rank``'th value. - - :param size: The kernel size, in pixels. - :param rank: What pixel value to pick. Use 0 for a min filter, - ``size * size / 2`` for a median filter, ``size * size - 1`` - for a max filter, etc. - """ - - name = "Rank" - - def __init__(self, size: int, rank: int) -> None: - self.size = size - self.rank = rank - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - if image.mode == "P": - msg = "cannot filter palette images" - raise ValueError(msg) - image = image.expand(self.size // 2, self.size // 2) - return image.rankfilter(self.size, self.rank) - - -class MedianFilter(RankFilter): - """ - Create a median filter. Picks the median pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Median" - - def __init__(self, size: int = 3) -> None: - self.size = size - self.rank = size * size // 2 - - -class MinFilter(RankFilter): - """ - Create a min filter. Picks the lowest pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Min" - - def __init__(self, size: int = 3) -> None: - self.size = size - self.rank = 0 - - -class MaxFilter(RankFilter): - """ - Create a max filter. Picks the largest pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Max" - - def __init__(self, size: int = 3) -> None: - self.size = size - self.rank = size * size - 1 - - -class ModeFilter(Filter): - """ - Create a mode filter. Picks the most frequent pixel value in a box with the - given size. Pixel values that occur only once or twice are ignored; if no - pixel value occurs more than twice, the original pixel value is preserved. - - :param size: The kernel size, in pixels. - """ - - name = "Mode" - - def __init__(self, size: int = 3) -> None: - self.size = size - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - return image.modefilter(self.size) - - -class GaussianBlur(MultibandFilter): - """Blurs the image with a sequence of extended box filters, which - approximates a Gaussian kernel. For details on accuracy see - - - :param radius: Standard deviation of the Gaussian kernel. Either a sequence of two - numbers for x and y, or a single number for both. - """ - - name = "GaussianBlur" - - def __init__(self, radius: float | Sequence[float] = 2) -> None: - self.radius = radius - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - xy = self.radius - if isinstance(xy, (int, float)): - xy = (xy, xy) - if xy == (0, 0): - return image.copy() - return image.gaussian_blur(xy) - - -class BoxBlur(MultibandFilter): - """Blurs the image by setting each pixel to the average value of the pixels - in a square box extending radius pixels in each direction. - Supports float radius of arbitrary size. Uses an optimized implementation - which runs in linear time relative to the size of the image - for any radius value. - - :param radius: Size of the box in a direction. Either a sequence of two numbers for - x and y, or a single number for both. - - Radius 0 does not blur, returns an identical image. - Radius 1 takes 1 pixel in each direction, i.e. 9 pixels in total. - """ - - name = "BoxBlur" - - def __init__(self, radius: float | Sequence[float]) -> None: - xy = radius if isinstance(radius, (tuple, list)) else (radius, radius) - if xy[0] < 0 or xy[1] < 0: - msg = "radius must be >= 0" - raise ValueError(msg) - self.radius = radius - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - xy = self.radius - if isinstance(xy, (int, float)): - xy = (xy, xy) - if xy == (0, 0): - return image.copy() - return image.box_blur(xy) - - -class UnsharpMask(MultibandFilter): - """Unsharp mask filter. - - See Wikipedia's entry on `digital unsharp masking`_ for an explanation of - the parameters. - - :param radius: Blur Radius - :param percent: Unsharp strength, in percent - :param threshold: Threshold controls the minimum brightness change that - will be sharpened - - .. _digital unsharp masking: https://en.wikipedia.org/wiki/Unsharp_masking#Digital_unsharp_masking - - """ - - name = "UnsharpMask" - - def __init__( - self, radius: float = 2, percent: int = 150, threshold: int = 3 - ) -> None: - self.radius = radius - self.percent = percent - self.threshold = threshold - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - return image.unsharp_mask(self.radius, self.percent, self.threshold) - - -class BLUR(BuiltinFilter): - name = "Blur" - # fmt: off - filterargs = (5, 5), 16, 0, ( - 1, 1, 1, 1, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 1, 1, 1, 1, - ) - # fmt: on - - -class CONTOUR(BuiltinFilter): - name = "Contour" - # fmt: off - filterargs = (3, 3), 1, 255, ( - -1, -1, -1, - -1, 8, -1, - -1, -1, -1, - ) - # fmt: on - - -class DETAIL(BuiltinFilter): - name = "Detail" - # fmt: off - filterargs = (3, 3), 6, 0, ( - 0, -1, 0, - -1, 10, -1, - 0, -1, 0, - ) - # fmt: on - - -class EDGE_ENHANCE(BuiltinFilter): - name = "Edge-enhance" - # fmt: off - filterargs = (3, 3), 2, 0, ( - -1, -1, -1, - -1, 10, -1, - -1, -1, -1, - ) - # fmt: on - - -class EDGE_ENHANCE_MORE(BuiltinFilter): - name = "Edge-enhance More" - # fmt: off - filterargs = (3, 3), 1, 0, ( - -1, -1, -1, - -1, 9, -1, - -1, -1, -1, - ) - # fmt: on - - -class EMBOSS(BuiltinFilter): - name = "Emboss" - # fmt: off - filterargs = (3, 3), 1, 128, ( - -1, 0, 0, - 0, 1, 0, - 0, 0, 0, - ) - # fmt: on - - -class FIND_EDGES(BuiltinFilter): - name = "Find Edges" - # fmt: off - filterargs = (3, 3), 1, 0, ( - -1, -1, -1, - -1, 8, -1, - -1, -1, -1, - ) - # fmt: on - - -class SHARPEN(BuiltinFilter): - name = "Sharpen" - # fmt: off - filterargs = (3, 3), 16, 0, ( - -2, -2, -2, - -2, 32, -2, - -2, -2, -2, - ) - # fmt: on - - -class SMOOTH(BuiltinFilter): - name = "Smooth" - # fmt: off - filterargs = (3, 3), 13, 0, ( - 1, 1, 1, - 1, 5, 1, - 1, 1, 1, - ) - # fmt: on - - -class SMOOTH_MORE(BuiltinFilter): - name = "Smooth More" - # fmt: off - filterargs = (5, 5), 100, 0, ( - 1, 1, 1, 1, 1, - 1, 5, 5, 5, 1, - 1, 5, 44, 5, 1, - 1, 5, 5, 5, 1, - 1, 1, 1, 1, 1, - ) - # fmt: on - - -class Color3DLUT(MultibandFilter): - """Three-dimensional color lookup table. - - Transforms 3-channel pixels using the values of the channels as coordinates - in the 3D lookup table and interpolating the nearest elements. - - This method allows you to apply almost any color transformation - in constant time by using pre-calculated decimated tables. - - .. versionadded:: 5.2.0 - - :param size: Size of the table. One int or tuple of (int, int, int). - Minimal size in any dimension is 2, maximum is 65. - :param table: Flat lookup table. A list of ``channels * size**3`` - float elements or a list of ``size**3`` channels-sized - tuples with floats. Channels are changed first, - then first dimension, then second, then third. - Value 0.0 corresponds lowest value of output, 1.0 highest. - :param channels: Number of channels in the table. Could be 3 or 4. - Default is 3. - :param target_mode: A mode for the result image. Should have not less - than ``channels`` channels. Default is ``None``, - which means that mode wouldn't be changed. - """ - - name = "Color 3D LUT" - - def __init__( - self, - size: int | tuple[int, int, int], - table: Sequence[float] | Sequence[Sequence[int]] | NumpyArray, - channels: int = 3, - target_mode: str | None = None, - **kwargs: bool, - ) -> None: - if channels not in (3, 4): - msg = "Only 3 or 4 output channels are supported" - raise ValueError(msg) - self.size = size = self._check_size(size) - self.channels = channels - self.mode = target_mode - - # Hidden flag `_copy_table=False` could be used to avoid extra copying - # of the table if the table is specially made for the constructor. - copy_table = kwargs.get("_copy_table", True) - items = size[0] * size[1] * size[2] - wrong_size = False - - numpy: ModuleType | None = None - if hasattr(table, "shape"): - try: - import numpy - except ImportError: - pass - - if numpy and isinstance(table, numpy.ndarray): - numpy_table: NumpyArray = table - if copy_table: - numpy_table = numpy_table.copy() - - if numpy_table.shape in [ - (items * channels,), - (items, channels), - (size[2], size[1], size[0], channels), - ]: - table = numpy_table.reshape(items * channels) - else: - wrong_size = True - - else: - if copy_table: - table = list(table) - - # Convert to a flat list - if table and isinstance(table[0], (list, tuple)): - raw_table = cast(Sequence[Sequence[int]], table) - flat_table: list[int] = [] - for pixel in raw_table: - if len(pixel) != channels: - msg = ( - "The elements of the table should " - f"have a length of {channels}." - ) - raise ValueError(msg) - flat_table.extend(pixel) - table = flat_table - - if wrong_size or len(table) != items * channels: - msg = ( - "The table should have either channels * size**3 float items " - "or size**3 items of channels-sized tuples with floats. " - f"Table should be: {channels}x{size[0]}x{size[1]}x{size[2]}. " - f"Actual length: {len(table)}" - ) - raise ValueError(msg) - self.table = table - - @staticmethod - def _check_size(size: Any) -> tuple[int, int, int]: - try: - _, _, _ = size - except ValueError as e: - msg = "Size should be either an integer or a tuple of three integers." - raise ValueError(msg) from e - except TypeError: - size = (size, size, size) - size = tuple(int(x) for x in size) - for size_1d in size: - if not 2 <= size_1d <= 65: - msg = "Size should be in [2, 65] range." - raise ValueError(msg) - return size - - @classmethod - def generate( - cls, - size: int | tuple[int, int, int], - callback: Callable[[float, float, float], tuple[float, ...]], - channels: int = 3, - target_mode: str | None = None, - ) -> Color3DLUT: - """Generates new LUT using provided callback. - - :param size: Size of the table. Passed to the constructor. - :param callback: Function with three parameters which correspond - three color channels. Will be called ``size**3`` - times with values from 0.0 to 1.0 and should return - a tuple with ``channels`` elements. - :param channels: The number of channels which should return callback. - :param target_mode: Passed to the constructor of the resulting - lookup table. - """ - size_1d, size_2d, size_3d = cls._check_size(size) - if channels not in (3, 4): - msg = "Only 3 or 4 output channels are supported" - raise ValueError(msg) - - table: list[float] = [0] * (size_1d * size_2d * size_3d * channels) - idx_out = 0 - for b in range(size_3d): - for g in range(size_2d): - for r in range(size_1d): - table[idx_out : idx_out + channels] = callback( - r / (size_1d - 1), g / (size_2d - 1), b / (size_3d - 1) - ) - idx_out += channels - - return cls( - (size_1d, size_2d, size_3d), - table, - channels=channels, - target_mode=target_mode, - _copy_table=False, - ) - - def transform( - self, - callback: Callable[..., tuple[float, ...]], - with_normals: bool = False, - channels: int | None = None, - target_mode: str | None = None, - ) -> Color3DLUT: - """Transforms the table values using provided callback and returns - a new LUT with altered values. - - :param callback: A function which takes old lookup table values - and returns a new set of values. The number - of arguments which function should take is - ``self.channels`` or ``3 + self.channels`` - if ``with_normals`` flag is set. - Should return a tuple of ``self.channels`` or - ``channels`` elements if it is set. - :param with_normals: If true, ``callback`` will be called with - coordinates in the color cube as the first - three arguments. Otherwise, ``callback`` - will be called only with actual color values. - :param channels: The number of channels in the resulting lookup table. - :param target_mode: Passed to the constructor of the resulting - lookup table. - """ - if channels not in (None, 3, 4): - msg = "Only 3 or 4 output channels are supported" - raise ValueError(msg) - ch_in = self.channels - ch_out = channels or ch_in - size_1d, size_2d, size_3d = self.size - - table: list[float] = [0] * (size_1d * size_2d * size_3d * ch_out) - idx_in = 0 - idx_out = 0 - for b in range(size_3d): - for g in range(size_2d): - for r in range(size_1d): - values = self.table[idx_in : idx_in + ch_in] - if with_normals: - values = callback( - r / (size_1d - 1), - g / (size_2d - 1), - b / (size_3d - 1), - *values, - ) - else: - values = callback(*values) - table[idx_out : idx_out + ch_out] = values - idx_in += ch_in - idx_out += ch_out - - return type(self)( - self.size, - table, - channels=ch_out, - target_mode=target_mode or self.mode, - _copy_table=False, - ) - - def __repr__(self) -> str: - r = [ - f"{self.__class__.__name__} from {self.table.__class__.__name__}", - "size={:d}x{:d}x{:d}".format(*self.size), - f"channels={self.channels:d}", - ] - if self.mode: - r.append(f"target_mode={self.mode}") - return "<{}>".format(" ".join(r)) - - def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: - from . import Image - - return image.color_lut_3d( - self.mode or image.mode, - Image.Resampling.BILINEAR, - self.channels, - self.size, - self.table, - ) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageFont.py b/myenv/lib/python3.12/site-packages/PIL/ImageFont.py deleted file mode 100644 index 329c463..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageFont.py +++ /dev/null @@ -1,1339 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PIL raster font management -# -# History: -# 1996-08-07 fl created (experimental) -# 1997-08-25 fl minor adjustments to handle fonts from pilfont 0.3 -# 1999-02-06 fl rewrote most font management stuff in C -# 1999-03-17 fl take pth files into account in load_path (from Richard Jones) -# 2001-02-17 fl added freetype support -# 2001-05-09 fl added TransposedFont wrapper class -# 2002-03-04 fl make sure we have a "L" or "1" font -# 2002-12-04 fl skip non-directory entries in the system path -# 2003-04-29 fl add embedded default font -# 2003-09-27 fl added support for truetype charmap encodings -# -# Todo: -# Adapt to PILFONT2 format (16-bit fonts, compressed, single file) -# -# Copyright (c) 1997-2003 by Secret Labs AB -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from __future__ import annotations - -import base64 -import os -import sys -import warnings -from enum import IntEnum -from io import BytesIO -from types import ModuleType -from typing import IO, Any, BinaryIO, TypedDict, cast - -from . import Image, features -from ._typing import StrOrBytesPath -from ._util import DeferredError, is_path - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import ImageFile - from ._imaging import ImagingFont - from ._imagingft import Font - - -class Axis(TypedDict): - minimum: int | None - default: int | None - maximum: int | None - name: bytes | None - - -class Layout(IntEnum): - BASIC = 0 - RAQM = 1 - - -MAX_STRING_LENGTH = 1_000_000 - - -core: ModuleType | DeferredError -try: - from . import _imagingft as core -except ImportError as ex: - core = DeferredError.new(ex) - - -def _string_length_check(text: str | bytes | bytearray) -> None: - if MAX_STRING_LENGTH is not None and len(text) > MAX_STRING_LENGTH: - msg = "too many characters in string" - raise ValueError(msg) - - -# FIXME: add support for pilfont2 format (see FontFile.py) - -# -------------------------------------------------------------------- -# Font metrics format: -# "PILfont" LF -# fontdescriptor LF -# (optional) key=value... LF -# "DATA" LF -# binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox) -# -# To place a character, cut out srcbox and paste at dstbox, -# relative to the character position. Then move the character -# position according to dx, dy. -# -------------------------------------------------------------------- - - -class ImageFont: - """PIL font wrapper""" - - font: ImagingFont - - def _load_pilfont(self, filename: str) -> None: - with open(filename, "rb") as fp: - image: ImageFile.ImageFile | None = None - root = os.path.splitext(filename)[0] - - for ext in (".png", ".gif", ".pbm"): - if image: - image.close() - try: - fullname = root + ext - image = Image.open(fullname) - except Exception: - pass - else: - if image and image.mode in ("1", "L"): - break - else: - if image: - image.close() - - msg = f"cannot find glyph data file {root}.{{gif|pbm|png}}" - raise OSError(msg) - - self.file = fullname - - self._load_pilfont_data(fp, image) - image.close() - - def _load_pilfont_data(self, file: IO[bytes], image: Image.Image) -> None: - # read PILfont header - if file.readline() != b"PILfont\n": - msg = "Not a PILfont file" - raise SyntaxError(msg) - file.readline().split(b";") - self.info = [] # FIXME: should be a dictionary - while True: - s = file.readline() - if not s or s == b"DATA\n": - break - self.info.append(s) - - # read PILfont metrics - data = file.read(256 * 20) - - # check image - if image.mode not in ("1", "L"): - msg = "invalid font image mode" - raise TypeError(msg) - - image.load() - - self.font = Image.core.font(image.im, data) - - def getmask( - self, text: str | bytes, mode: str = "", *args: Any, **kwargs: Any - ) -> Image.core.ImagingCore: - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :return: An internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module. - """ - _string_length_check(text) - Image._decompression_bomb_check(self.font.getsize(text)) - return self.font.getmask(text, mode) - - def getbbox( - self, text: str | bytes | bytearray, *args: Any, **kwargs: Any - ) -> tuple[int, int, int, int]: - """ - Returns bounding box (in pixels) of given text. - - .. versionadded:: 9.2.0 - - :param text: Text to render. - - :return: ``(left, top, right, bottom)`` bounding box - """ - _string_length_check(text) - width, height = self.font.getsize(text) - return 0, 0, width, height - - def getlength( - self, text: str | bytes | bytearray, *args: Any, **kwargs: Any - ) -> int: - """ - Returns length (in pixels) of given text. - This is the amount by which following text should be offset. - - .. versionadded:: 9.2.0 - """ - _string_length_check(text) - width, height = self.font.getsize(text) - return width - - -## -# Wrapper for FreeType fonts. Application code should use the -# truetype factory function to create font objects. - - -class FreeTypeFont: - """FreeType font wrapper (requires _imagingft service)""" - - font: Font - font_bytes: bytes - - def __init__( - self, - font: StrOrBytesPath | BinaryIO, - size: float = 10, - index: int = 0, - encoding: str = "", - layout_engine: Layout | None = None, - ) -> None: - # FIXME: use service provider instead - - if isinstance(core, DeferredError): - raise core.ex - - if size <= 0: - msg = f"font size must be greater than 0, not {size}" - raise ValueError(msg) - - self.path = font - self.size = size - self.index = index - self.encoding = encoding - - try: - from packaging.version import parse as parse_version - except ImportError: - pass - else: - if freetype_version := features.version_module("freetype2"): - if parse_version(freetype_version) < parse_version("2.9.1"): - warnings.warn( - "Support for FreeType 2.9.0 is deprecated and will be removed " - "in Pillow 12 (2025-10-15). Please upgrade to FreeType 2.9.1 " - "or newer, preferably FreeType 2.10.4 which fixes " - "CVE-2020-15999.", - DeprecationWarning, - ) - - if layout_engine not in (Layout.BASIC, Layout.RAQM): - layout_engine = Layout.BASIC - if core.HAVE_RAQM: - layout_engine = Layout.RAQM - elif layout_engine == Layout.RAQM and not core.HAVE_RAQM: - warnings.warn( - "Raqm layout was requested, but Raqm is not available. " - "Falling back to basic layout." - ) - layout_engine = Layout.BASIC - - self.layout_engine = layout_engine - - def load_from_bytes(f: IO[bytes]) -> None: - self.font_bytes = f.read() - self.font = core.getfont( - "", size, index, encoding, self.font_bytes, layout_engine - ) - - if is_path(font): - font = os.fspath(font) - if sys.platform == "win32": - font_bytes_path = font if isinstance(font, bytes) else font.encode() - try: - font_bytes_path.decode("ascii") - except UnicodeDecodeError: - # FreeType cannot load fonts with non-ASCII characters on Windows - # So load it into memory first - with open(font, "rb") as f: - load_from_bytes(f) - return - self.font = core.getfont( - font, size, index, encoding, layout_engine=layout_engine - ) - else: - load_from_bytes(cast(IO[bytes], font)) - - def __getstate__(self) -> list[Any]: - return [self.path, self.size, self.index, self.encoding, self.layout_engine] - - def __setstate__(self, state: list[Any]) -> None: - path, size, index, encoding, layout_engine = state - FreeTypeFont.__init__(self, path, size, index, encoding, layout_engine) - - def getname(self) -> tuple[str | None, str | None]: - """ - :return: A tuple of the font family (e.g. Helvetica) and the font style - (e.g. Bold) - """ - return self.font.family, self.font.style - - def getmetrics(self) -> tuple[int, int]: - """ - :return: A tuple of the font ascent (the distance from the baseline to - the highest outline point) and descent (the distance from the - baseline to the lowest outline point, a negative value) - """ - return self.font.ascent, self.font.descent - - def getlength( - self, - text: str | bytes, - mode: str = "", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - ) -> float: - """ - Returns length (in pixels with 1/64 precision) of given text when rendered - in font with provided direction, features, and language. - - This is the amount by which following text should be offset. - Text bounding box may extend past the length in some fonts, - e.g. when using italics or accents. - - The result is returned as a float; it is a whole number if using basic layout. - - Note that the sum of two lengths may not equal the length of a concatenated - string due to kerning. If you need to adjust for kerning, include the following - character and subtract its length. - - For example, instead of :: - - hello = font.getlength("Hello") - world = font.getlength("World") - hello_world = hello + world # not adjusted for kerning - assert hello_world == font.getlength("HelloWorld") # may fail - - use :: - - hello = font.getlength("HelloW") - font.getlength("W") # adjusted for kerning - world = font.getlength("World") - hello_world = hello + world # adjusted for kerning - assert hello_world == font.getlength("HelloWorld") # True - - or disable kerning with (requires libraqm) :: - - hello = draw.textlength("Hello", font, features=["-kern"]) - world = draw.textlength("World", font, features=["-kern"]) - hello_world = hello + world # kerning is disabled, no need to adjust - assert hello_world == draw.textlength("HelloWorld", font, features=["-kern"]) - - .. versionadded:: 8.0.0 - - :param text: Text to measure. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - :return: Either width for horizontal text, or height for vertical text. - """ - _string_length_check(text) - return self.font.getlength(text, mode, direction, features, language) / 64 - - def getbbox( - self, - text: str | bytes, - mode: str = "", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - anchor: str | None = None, - ) -> tuple[float, float, float, float]: - """ - Returns bounding box (in pixels) of given text relative to given anchor - when rendered in font with provided direction, features, and language. - - Use :py:meth:`getlength()` to get the offset of following text with - 1/64 pixel precision. The bounding box includes extra margins for - some fonts, e.g. italics or accents. - - .. versionadded:: 8.0.0 - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - :param stroke_width: The width of the text stroke. - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left, - specifically ``la`` for horizontal text and ``lt`` for - vertical text. See :ref:`text-anchors` for details. - - :return: ``(left, top, right, bottom)`` bounding box - """ - _string_length_check(text) - size, offset = self.font.getsize( - text, mode, direction, features, language, anchor - ) - left, top = offset[0] - stroke_width, offset[1] - stroke_width - width, height = size[0] + 2 * stroke_width, size[1] + 2 * stroke_width - return left, top, left + width, top + height - - def getmask( - self, - text: str | bytes, - mode: str = "", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - anchor: str | None = None, - ink: int = 0, - start: tuple[float, float] | None = None, - ) -> Image.core.ImagingCore: - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. If the font has embedded color data, the bitmap - should have mode ``RGBA``. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left, - specifically ``la`` for horizontal text and ``lt`` for - vertical text. See :ref:`text-anchors` for details. - - .. versionadded:: 8.0.0 - - :param ink: Foreground ink for rendering in RGBA mode. - - .. versionadded:: 8.0.0 - - :param start: Tuple of horizontal and vertical offset, as text may render - differently when starting at fractional coordinates. - - .. versionadded:: 9.4.0 - - :return: An internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module. - """ - return self.getmask2( - text, - mode, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - anchor=anchor, - ink=ink, - start=start, - )[0] - - def getmask2( - self, - text: str | bytes, - mode: str = "", - direction: str | None = None, - features: list[str] | None = None, - language: str | None = None, - stroke_width: float = 0, - anchor: str | None = None, - ink: int = 0, - start: tuple[float, float] | None = None, - *args: Any, - **kwargs: Any, - ) -> tuple[Image.core.ImagingCore, tuple[int, int]]: - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. If the font has embedded color data, the bitmap - should have mode ``RGBA``. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left, - specifically ``la`` for horizontal text and ``lt`` for - vertical text. See :ref:`text-anchors` for details. - - .. versionadded:: 8.0.0 - - :param ink: Foreground ink for rendering in RGBA mode. - - .. versionadded:: 8.0.0 - - :param start: Tuple of horizontal and vertical offset, as text may render - differently when starting at fractional coordinates. - - .. versionadded:: 9.4.0 - - :return: A tuple of an internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module, and the text offset, the - gap between the starting coordinate and the first marking - """ - _string_length_check(text) - if start is None: - start = (0, 0) - - def fill(width: int, height: int) -> Image.core.ImagingCore: - size = (width, height) - Image._decompression_bomb_check(size) - return Image.core.fill("RGBA" if mode == "RGBA" else "L", size) - - return self.font.render( - text, - fill, - mode, - direction, - features, - language, - stroke_width, - kwargs.get("stroke_filled", False), - anchor, - ink, - start, - ) - - def font_variant( - self, - font: StrOrBytesPath | BinaryIO | None = None, - size: float | None = None, - index: int | None = None, - encoding: str | None = None, - layout_engine: Layout | None = None, - ) -> FreeTypeFont: - """ - Create a copy of this FreeTypeFont object, - using any specified arguments to override the settings. - - Parameters are identical to the parameters used to initialize this - object. - - :return: A FreeTypeFont object. - """ - if font is None: - try: - font = BytesIO(self.font_bytes) - except AttributeError: - font = self.path - return FreeTypeFont( - font=font, - size=self.size if size is None else size, - index=self.index if index is None else index, - encoding=self.encoding if encoding is None else encoding, - layout_engine=layout_engine or self.layout_engine, - ) - - def get_variation_names(self) -> list[bytes]: - """ - :returns: A list of the named styles in a variation font. - :exception OSError: If the font is not a variation font. - """ - try: - names = self.font.getvarnames() - except AttributeError as e: - msg = "FreeType 2.9.1 or greater is required" - raise NotImplementedError(msg) from e - return [name.replace(b"\x00", b"") for name in names] - - def set_variation_by_name(self, name: str | bytes) -> None: - """ - :param name: The name of the style. - :exception OSError: If the font is not a variation font. - """ - names = self.get_variation_names() - if not isinstance(name, bytes): - name = name.encode() - index = names.index(name) + 1 - - if index == getattr(self, "_last_variation_index", None): - # When the same name is set twice in a row, - # there is an 'unknown freetype error' - # https://savannah.nongnu.org/bugs/?56186 - return - self._last_variation_index = index - - self.font.setvarname(index) - - def get_variation_axes(self) -> list[Axis]: - """ - :returns: A list of the axes in a variation font. - :exception OSError: If the font is not a variation font. - """ - try: - axes = self.font.getvaraxes() - except AttributeError as e: - msg = "FreeType 2.9.1 or greater is required" - raise NotImplementedError(msg) from e - for axis in axes: - if axis["name"]: - axis["name"] = axis["name"].replace(b"\x00", b"") - return axes - - def set_variation_by_axes(self, axes: list[float]) -> None: - """ - :param axes: A list of values for each axis. - :exception OSError: If the font is not a variation font. - """ - try: - self.font.setvaraxes(axes) - except AttributeError as e: - msg = "FreeType 2.9.1 or greater is required" - raise NotImplementedError(msg) from e - - -class TransposedFont: - """Wrapper for writing rotated or mirrored text""" - - def __init__( - self, font: ImageFont | FreeTypeFont, orientation: Image.Transpose | None = None - ): - """ - Wrapper that creates a transposed font from any existing font - object. - - :param font: A font object. - :param orientation: An optional orientation. If given, this should - be one of Image.Transpose.FLIP_LEFT_RIGHT, Image.Transpose.FLIP_TOP_BOTTOM, - Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_180, or - Image.Transpose.ROTATE_270. - """ - self.font = font - self.orientation = orientation # any 'transpose' argument, or None - - def getmask( - self, text: str | bytes, mode: str = "", *args: Any, **kwargs: Any - ) -> Image.core.ImagingCore: - im = self.font.getmask(text, mode, *args, **kwargs) - if self.orientation is not None: - return im.transpose(self.orientation) - return im - - def getbbox( - self, text: str | bytes, *args: Any, **kwargs: Any - ) -> tuple[int, int, float, float]: - # TransposedFont doesn't support getmask2, move top-left point to (0, 0) - # this has no effect on ImageFont and simulates anchor="lt" for FreeTypeFont - left, top, right, bottom = self.font.getbbox(text, *args, **kwargs) - width = right - left - height = bottom - top - if self.orientation in (Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_270): - return 0, 0, height, width - return 0, 0, width, height - - def getlength(self, text: str | bytes, *args: Any, **kwargs: Any) -> float: - if self.orientation in (Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_270): - msg = "text length is undefined for text rotated by 90 or 270 degrees" - raise ValueError(msg) - return self.font.getlength(text, *args, **kwargs) - - -def load(filename: str) -> ImageFont: - """ - Load a font file. This function loads a font object from the given - bitmap font file, and returns the corresponding font object. For loading TrueType - or OpenType fonts instead, see :py:func:`~PIL.ImageFont.truetype`. - - :param filename: Name of font file. - :return: A font object. - :exception OSError: If the file could not be read. - """ - f = ImageFont() - f._load_pilfont(filename) - return f - - -def truetype( - font: StrOrBytesPath | BinaryIO, - size: float = 10, - index: int = 0, - encoding: str = "", - layout_engine: Layout | None = None, -) -> FreeTypeFont: - """ - Load a TrueType or OpenType font from a file or file-like object, - and create a font object. This function loads a font object from the given - file or file-like object, and creates a font object for a font of the given - size. For loading bitmap fonts instead, see :py:func:`~PIL.ImageFont.load` - and :py:func:`~PIL.ImageFont.load_path`. - - Pillow uses FreeType to open font files. On Windows, be aware that FreeType - will keep the file open as long as the FreeTypeFont object exists. Windows - limits the number of files that can be open in C at once to 512, so if many - fonts are opened simultaneously and that limit is approached, an - ``OSError`` may be thrown, reporting that FreeType "cannot open resource". - A workaround would be to copy the file(s) into memory, and open that instead. - - This function requires the _imagingft service. - - :param font: A filename or file-like object containing a TrueType font. - If the file is not found in this filename, the loader may also - search in other directories, such as: - - * The :file:`fonts/` directory on Windows, - * :file:`/Library/Fonts/`, :file:`/System/Library/Fonts/` - and :file:`~/Library/Fonts/` on macOS. - * :file:`~/.local/share/fonts`, :file:`/usr/local/share/fonts`, - and :file:`/usr/share/fonts` on Linux; or those specified by - the ``XDG_DATA_HOME`` and ``XDG_DATA_DIRS`` environment variables - for user-installed and system-wide fonts, respectively. - - :param size: The requested size, in pixels. - :param index: Which font face to load (default is first available face). - :param encoding: Which font encoding to use (default is Unicode). Possible - encodings include (see the FreeType documentation for more - information): - - * "unic" (Unicode) - * "symb" (Microsoft Symbol) - * "ADOB" (Adobe Standard) - * "ADBE" (Adobe Expert) - * "ADBC" (Adobe Custom) - * "armn" (Apple Roman) - * "sjis" (Shift JIS) - * "gb " (PRC) - * "big5" - * "wans" (Extended Wansung) - * "joha" (Johab) - * "lat1" (Latin-1) - - This specifies the character set to use. It does not alter the - encoding of any text provided in subsequent operations. - :param layout_engine: Which layout engine to use, if available: - :attr:`.ImageFont.Layout.BASIC` or :attr:`.ImageFont.Layout.RAQM`. - If it is available, Raqm layout will be used by default. - Otherwise, basic layout will be used. - - Raqm layout is recommended for all non-English text. If Raqm layout - is not required, basic layout will have better performance. - - You can check support for Raqm layout using - :py:func:`PIL.features.check_feature` with ``feature="raqm"``. - - .. versionadded:: 4.2.0 - :return: A font object. - :exception OSError: If the file could not be read. - :exception ValueError: If the font size is not greater than zero. - """ - - def freetype(font: StrOrBytesPath | BinaryIO) -> FreeTypeFont: - return FreeTypeFont(font, size, index, encoding, layout_engine) - - try: - return freetype(font) - except OSError: - if not is_path(font): - raise - ttf_filename = os.path.basename(font) - - dirs = [] - if sys.platform == "win32": - # check the windows font repository - # NOTE: must use uppercase WINDIR, to work around bugs in - # 1.5.2's os.environ.get() - windir = os.environ.get("WINDIR") - if windir: - dirs.append(os.path.join(windir, "fonts")) - elif sys.platform in ("linux", "linux2"): - data_home = os.environ.get("XDG_DATA_HOME") - if not data_home: - # The freedesktop spec defines the following default directory for - # when XDG_DATA_HOME is unset or empty. This user-level directory - # takes precedence over system-level directories. - data_home = os.path.expanduser("~/.local/share") - xdg_dirs = [data_home] - - data_dirs = os.environ.get("XDG_DATA_DIRS") - if not data_dirs: - # Similarly, defaults are defined for the system-level directories - data_dirs = "/usr/local/share:/usr/share" - xdg_dirs += data_dirs.split(":") - - dirs += [os.path.join(xdg_dir, "fonts") for xdg_dir in xdg_dirs] - elif sys.platform == "darwin": - dirs += [ - "/Library/Fonts", - "/System/Library/Fonts", - os.path.expanduser("~/Library/Fonts"), - ] - - ext = os.path.splitext(ttf_filename)[1] - first_font_with_a_different_extension = None - for directory in dirs: - for walkroot, walkdir, walkfilenames in os.walk(directory): - for walkfilename in walkfilenames: - if ext and walkfilename == ttf_filename: - return freetype(os.path.join(walkroot, walkfilename)) - elif not ext and os.path.splitext(walkfilename)[0] == ttf_filename: - fontpath = os.path.join(walkroot, walkfilename) - if os.path.splitext(fontpath)[1] == ".ttf": - return freetype(fontpath) - if not ext and first_font_with_a_different_extension is None: - first_font_with_a_different_extension = fontpath - if first_font_with_a_different_extension: - return freetype(first_font_with_a_different_extension) - raise - - -def load_path(filename: str | bytes) -> ImageFont: - """ - Load font file. Same as :py:func:`~PIL.ImageFont.load`, but searches for a - bitmap font along the Python path. - - :param filename: Name of font file. - :return: A font object. - :exception OSError: If the file could not be read. - """ - if not isinstance(filename, str): - filename = filename.decode("utf-8") - for directory in sys.path: - try: - return load(os.path.join(directory, filename)) - except OSError: - pass - msg = f'cannot find font file "{filename}" in sys.path' - if os.path.exists(filename): - msg += f', did you mean ImageFont.load("{filename}") instead?' - - raise OSError(msg) - - -def load_default_imagefont() -> ImageFont: - f = ImageFont() - f._load_pilfont_data( - # courB08 - BytesIO( - base64.b64decode( - b""" -UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA -BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL -AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA -AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB -ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A -BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB -//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA -AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH -AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA -ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv -AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ -/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 -AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA -AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG -AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA -BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA -AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA -2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF -AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// -+gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA -////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA -BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv -AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA -AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA -AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA -BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// -//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA -AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF -AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB -mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn -AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA -AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 -AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA -Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB -//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA -AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ -AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC -DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ -AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ -+wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 -AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ -///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG -AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA -BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA -Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC -eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG -AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// -+gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA -////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA -BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT -AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A -AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA -Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA -Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// -//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA -AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ -AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA -LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 -AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA -AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 -AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA -AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG -AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA -EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK -AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA -pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG -AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// -+QAGAAIAzgAKANUAEw== -""" - ) - ), - Image.open( - BytesIO( - base64.b64decode( - b""" -iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u -Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 -M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g -LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F -IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA -Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 -NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx -in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 -SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY -AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt -y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG -ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY -lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H -/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 -AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 -c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ -/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw -pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv -oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR -evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA -AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// -Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR -w7IkEbzhVQAAAABJRU5ErkJggg== -""" - ) - ) - ), - ) - return f - - -def load_default(size: float | None = None) -> FreeTypeFont | ImageFont: - """If FreeType support is available, load a version of Aileron Regular, - https://dotcolon.net/fonts/aileron, with a more limited character set. - - Otherwise, load a "better than nothing" font. - - .. versionadded:: 1.1.4 - - :param size: The font size of Aileron Regular. - - .. versionadded:: 10.1.0 - - :return: A font object. - """ - if isinstance(core, ModuleType) or size is not None: - return truetype( - BytesIO( - base64.b64decode( - b""" -AAEAAAAPAIAAAwBwRkZUTYwDlUAAADFoAAAAHEdERUYAqADnAAAo8AAAACRHUE9ThhmITwAAKfgAA -AduR1NVQnHxefoAACkUAAAA4k9TLzJovoHLAAABeAAAAGBjbWFw5lFQMQAAA6gAAAGqZ2FzcP//AA -MAACjoAAAACGdseWYmRXoPAAAGQAAAHfhoZWFkE18ayQAAAPwAAAA2aGhlYQboArEAAAE0AAAAJGh -tdHjjERZ8AAAB2AAAAdBsb2NhuOexrgAABVQAAADqbWF4cAC7AEYAAAFYAAAAIG5hbWUr+h5lAAAk -OAAAA6Jwb3N0D3oPTQAAJ9wAAAEKAAEAAAABGhxJDqIhXw889QALA+gAAAAA0Bqf2QAAAADhCh2h/ -2r/LgOxAyAAAAAIAAIAAAAAAAAAAQAAA8r/GgAAA7j/av9qA7EAAQAAAAAAAAAAAAAAAAAAAHQAAQ -AAAHQAQwAFAAAAAAACAAAAAQABAAAAQAAAAAAAAAADAfoBkAAFAAgCigJYAAAASwKKAlgAAAFeADI -BPgAAAAAFAAAAAAAAAAAAAAcAAAAAAAAAAAAAAABVS1dOAEAAIPsCAwL/GgDIA8oA5iAAAJMAAAAA -AhICsgAAACAAAwH0AAAAAAAAAU0AAADYAAAA8gA5AVMAVgJEAEYCRAA1AuQAKQKOAEAAsAArATsAZ -AE7AB4CMABVAkQAUADc/+EBEgAgANwAJQEv//sCRAApAkQAggJEADwCRAAtAkQAIQJEADkCRAArAk -QAMgJEACwCRAAxANwAJQDc/+ECRABnAkQAUAJEAEQB8wAjA1QANgJ/AB0CcwBkArsALwLFAGQCSwB -kAjcAZALGAC8C2gBkAQgAZAIgADcCYQBkAj8AZANiAGQCzgBkAuEALwJWAGQC3QAvAmsAZAJJADQC -ZAAiAqoAXgJuACADuAAaAnEAGQJFABMCTwAuATMAYgEv//sBJwAiAkQAUAH0ADIBLAApAhMAJAJjA -EoCEQAeAmcAHgIlAB4BIgAVAmcAHgJRAEoA7gA+AOn/8wIKAEoA9wBGA1cASgJRAEoCSgAeAmMASg -JnAB4BSgBKAcsAGAE5ABQCUABCAgIAAQMRAAEB4v/6AgEAAQHOABQBLwBAAPoAYAEvACECRABNA0Y -AJAItAHgBKgAcAkQAUAEsAHQAygAgAi0AOQD3ADYA9wAWAaEANgGhABYCbAAlAYMAeAGDADkA6/9q -AhsAFAIKABUB/QAVAAAAAwAAAAMAAAAcAAEAAAAAAKQAAwABAAAAHAAEAIgAAAAeABAAAwAOAH4Aq -QCrALEAtAC3ALsgGSAdICYgOiBEISL7Av//AAAAIACpAKsAsAC0ALcAuyAYIBwgJiA5IEQhIvsB// -//4/+5/7j/tP+y/7D/reBR4E/gR+A14CzfTwVxAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAMEBQYHCAkKCwwNDg8QERIT -FBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMT -U5PUFFSU1RVVldYWVpbXF1eX2BhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAA -AAAAAAYnFmAAAAAABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAY2htAAAAAAAAAABrbGlqAAAAAHAAbm9 -ycwBnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmACYAJgAmAD4AUgCCAMoBCgFO -AVwBcgGIAaYBvAHKAdYB6AH2AgwCIAJKAogCpgLWAw4DIgNkA5wDugPUA+gD/AQQBEYEogS8BPoFJ -gVSBWoFgAWwBcoF1gX6BhQGJAZMBmgGiga0BuIHGgdUB2YHkAeiB8AH3AfyCAoIHAgqCDoITghcCG -oIogjSCPoJKglYCXwJwgnqCgIKKApACl4Klgq8CtwLDAs8C1YLjAuyC9oL7gwMDCYMSAxgDKAMrAz -qDQoNTA1mDYQNoA2uDcAN2g3oDfYODA4iDkoOXA5sDnoOnA7EDvwAAAAFAAAAAAH0ArwAAwAGAAkA -DAAPAAAxESERAxMhExcRASELARETAfT6qv6syKr+jgFUqsiqArz9RAGLAP/+1P8B/v3VAP8BLP4CA -P8AAgA5//IAuQKyAAMACwAANyMDMwIyFhQGIiY0oE4MZk84JCQ4JLQB/v3AJDgkJDgAAgBWAeUBPA -LfAAMABwAAEyMnMxcjJzOmRgpagkYKWgHl+vr6AAAAAAIARgAAAf4CsgAbAB8AAAEHMxUjByM3Iwc -jNyM1MzcjNTM3MwczNzMHMxUrAQczAZgdZXEvOi9bLzovWmYdZXEvOi9bLzovWp9bHlsBn4w429vb -2ziMONvb29s4jAAAAAMANf+mAg4DDAAfACYALAAAJRQGBxUjNS4BJzMeARcRLgE0Njc1MxUeARcjJ -icVHgEBFBYXNQ4BExU+ATU0Ag5xWDpgcgRcBz41Xl9oVTpVYwpcC1ttXP6cLTQuM5szOrVRZwlOTQ -ZqVzZECAEAGlukZAlOTQdrUG8O7iNlAQgxNhDlCDj+8/YGOjReAAAAAAUAKf/yArsCvAAHAAsAFQA -dACcAABIyFhQGIiY0EyMBMwQiBhUUFjI2NTQSMhYUBiImNDYiBhUUFjI2NTR5iFBQiFCVVwHAV/5c -OiMjOiPmiFBQiFCxOiMjOiMCvFaSVlaS/ZoCsjIzMC80NC8w/uNWklZWkhozMC80NC8wAAAAAgBA/ -/ICbgLAACIALgAAARUjEQYjIiY1NDY3LgE1NDYzMhcVJiMiBhUUFhcWOwE1MxUFFBYzMjc1IyIHDg -ECbmBcYYOOVkg7R4hsQjY4Q0RNRD4SLDxW/pJUXzksPCkUUk0BgUb+zBVUZ0BkDw5RO1huCkULQzp -COAMBcHDHRz0J/AIHRQAAAAEAKwHlAIUC3wADAAATIycze0YKWgHl+gAAAAABAGT/sAEXAwwACQAA -EzMGEBcjLgE0Nt06dXU6OUBAAwzG/jDGVePs4wAAAAEAHv+wANEDDAAJAAATMx4BFAYHIzYQHjo5Q -EA5OnUDDFXj7ONVxgHQAAAAAQBVAFIB2wHbAA4AAAE3FwcXBycHJzcnNxcnMwEtmxOfcTJjYzJxnx -ObCj4BKD07KYolmZkliik7PbMAAQBQAFUB9AIlAAsAAAEjFSM1IzUzNTMVMwH0tTq1tTq1AR/Kyjj -OzgAAAAAB/+H/iACMAGQABAAANwcjNzOMWlFOXVrS3AAAAQAgAP8A8gE3AAMAABMjNTPy0tIA/zgA -AQAl//IApQByAAcAADYyFhQGIiY0STgkJDgkciQ4JCQ4AAAAAf/7/+IBNALQAAMAABcjEzM5Pvs+H -gLuAAAAAAIAKf/yAhsCwAADAAcAABIgECA2IBAgKQHy/g5gATL+zgLA/TJEAkYAAAAAAQCCAAABlg -KyAAgAAAERIxEHNTc2MwGWVr6SIygCsv1OAldxW1sWAAEAPAAAAg4CwAAZAAA3IRUhNRM+ATU0JiM -iDwEjNz4BMzIWFRQGB7kBUv4x+kI2QTt+EAFWAQp8aGVtSl5GRjEA/0RVLzlLmAoKa3FsUkNxXQAA -AAEALf/yAhYCwAAqAAABHgEVFAYjIi8BMxceATMyNjU0KwE1MzI2NTQmIyIGDwEjNz4BMzIWFRQGA -YxBSZJo2RUBVgEHV0JBUaQREUBUQzc5TQcBVgEKfGhfcEMBbxJbQl1x0AoKRkZHPn9GSD80QUVCCg -pfbGBPOlgAAAACACEAAAIkArIACgAPAAAlIxUjNSE1ATMRMyMRBg8BAiRXVv6qAVZWV60dHLCurq4 -rAdn+QgFLMibzAAABADn/8gIZArIAHQAAATIWFRQGIyIvATMXFjMyNjU0JiMiByMTIRUhBzc2ATNv -d5Fl1RQBVgIad0VSTkVhL1IwAYj+vh8rMAHHgGdtgcUKCoFXTU5bYgGRRvAuHQAAAAACACv/8gITA -sAAFwAjAAABMhYVFAYjIhE0NjMyFh8BIycmIyIDNzYTMjY1NCYjIgYVFBYBLmp7imr0l3RZdAgBXA -IYZ5wKJzU6QVNJSz5SUAHSgWltiQFGxcNlVQoKdv7sPiz+ZF1LTmJbU0lhAAAAAQAyAAACGgKyAAY -AAAEVASMBITUCGv6oXAFL/oECsij9dgJsRgAAAAMALP/xAhgCwAAWACAALAAAAR4BFRQGIyImNTQ2 -Ny4BNTQ2MhYVFAYmIgYVFBYyNjU0AzI2NTQmIyIGFRQWAZQ5S5BmbIpPOjA7ecp5P2F8Q0J8RIVJS -0pLTEtOAW0TXTxpZ2ZqPF0SE1A3VWVlVTdQ/UU0N0RENzT9/ko+Ok1NOj1LAAIAMf/yAhkCwAAXAC -MAAAEyERQGIyImLwEzFxYzMhMHBiMiJjU0NhMyNjU0JiMiBhUUFgEl9Jd0WXQIAVwCGGecCic1SWp -7imo+UlBAQVNJAsD+usXDZVUKCnYBFD4sgWltif5kW1NJYV1LTmIAAAACACX/8gClAiAABwAPAAAS -MhYUBiImNBIyFhQGIiY0STgkJDgkJDgkJDgkAiAkOCQkOP52JDgkJDgAAAAC/+H/iAClAiAABwAMA -AASMhYUBiImNBMHIzczSTgkJDgkaFpSTl4CICQ4JCQ4/mba5gAAAQBnAB4B+AH0AAYAAAENARUlNS -UB+P6qAVb+bwGRAbCmpkbJRMkAAAIAUAC7AfQBuwADAAcAAAEhNSERITUhAfT+XAGk/lwBpAGDOP8 -AOAABAEQAHgHVAfQABgAAARUFNS0BNQHV/m8BVv6qAStEyUSmpkYAAAAAAgAj//IB1ALAABgAIAAA -ATIWFRQHDgEHIz4BNz4BNTQmIyIGByM+ARIyFhQGIiY0AQRibmktIAJWBSEqNig+NTlHBFoDezQ4J -CQ4JALAZ1BjaS03JS1DMD5LLDQ/SUVgcv2yJDgkJDgAAAAAAgA2/5gDFgKYADYAQgAAAQMGFRQzMj -Y1NCYjIg4CFRQWMzI2NxcGIyImNTQ+AjMyFhUUBiMiJwcGIyImNTQ2MzIfATcHNzYmIyIGFRQzMjY -Cej8EJjJJlnBAfGQ+oHtAhjUYg5OPx0h2k06Os3xRWQsVLjY5VHtdPBwJETcJDyUoOkZEJz8B0f74 -EQ8kZl6EkTFZjVOLlyknMVm1pmCiaTq4lX6CSCknTVRmmR8wPdYnQzxuSWVGAAIAHQAAAncCsgAHA -AoAACUjByMTMxMjATMDAcj+UVz4dO5d/sjPZPT0ArL9TgE6ATQAAAADAGQAAAJMArIAEAAbACcAAA -EeARUUBgcGKwERMzIXFhUUJRUzMjc2NTQnJiMTPgE1NCcmKwEVMzIBvkdHZkwiNt7LOSGq/oeFHBt -hahIlSTM+cB8Yj5UWAW8QT0VYYgwFArIEF5Fv1eMED2NfDAL93AU+N24PBP0AAAAAAQAv//ICjwLA -ABsAAAEyFh8BIycmIyIGFRQWMzI/ATMHDgEjIiY1NDYBdX+PCwFWAiKiaHx5ZaIiAlYBCpWBk6a0A -sCAagoKpqN/gaOmCgplhcicn8sAAAIAZAAAAp8CsgAMABkAAAEeARUUBgcGKwERMzITPgE1NCYnJi -sBETMyAY59lJp8IzXN0jUVWmdjWRs5d3I4Aq4QqJWUug8EArL9mQ+PeHGHDgX92gAAAAABAGQAAAI -vArIACwAAJRUhESEVIRUhFSEVAi/+NQHB/pUBTf6zRkYCskbwRvAAAAABAGQAAAIlArIACQAAExUh -FSERIxEhFboBQ/69VgHBAmzwRv7KArJGAAAAAAEAL//yAo8CwAAfAAABMxEjNQcGIyImNTQ2MzIWH -wEjJyYjIgYVFBYzMjY1IwGP90wfPnWTprSSf48LAVYCIqJofHllVG+hAU3+s3hARsicn8uAagoKpq -N/gaN1XAAAAAEAZAAAAowCsgALAAABESMRIREjETMRIRECjFb+hFZWAXwCsv1OAS7+0gKy/sQBPAA -AAAABAGQAAAC6ArIAAwAAMyMRM7pWVgKyAAABADf/8gHoArIAEwAAAREUBw4BIyImLwEzFxYzMjc2 -NREB6AIFcGpgbQIBVgIHfXQKAQKy/lYxIltob2EpKYyEFD0BpwAAAAABAGQAAAJ0ArIACwAACQEjA -wcVIxEzEQEzATsBJ3ntQlZWAVVlAWH+nwEnR+ACsv6RAW8AAQBkAAACLwKyAAUAACUVIREzEQIv/j -VWRkYCsv2UAAABAGQAAAMUArIAFAAAAREjETQ3BgcDIwMmJxYVESMRMxsBAxRWAiMxemx8NxsCVo7 -MywKy/U4BY7ZLco7+nAFmoFxLtP6dArL9lwJpAAAAAAEAZAAAAoACsgANAAAhIwEWFREjETMBJjUR -MwKAhP67A1aEAUUDVAJeeov+pwKy/aJ5jAFZAAAAAgAv//ICuwLAAAkAEwAAEiAWFRQGICY1NBIyN -jU0JiIGFRTbATSsrP7MrNrYenrYegLAxaKhxsahov47nIeIm5uIhwACAGQAAAJHArIADgAYAAABHg -EVFAYHBisBESMRMzITNjQnJisBETMyAZRUX2VOHzuAVtY7GlxcGDWIiDUCrgtnVlVpCgT+5gKy/rU -V1BUF/vgAAAACAC//zAK9AsAAEgAcAAAlFhcHJiMiBwYjIiY1NDYgFhUUJRQWMjY1NCYiBgI9PUMx -UDcfKh8omqysATSs/dR62Hp62HpICTg7NgkHxqGixcWitbWHnJyHiJubAAIAZAAAAlgCsgAXACMAA -CUWFyMmJyYnJisBESMRMzIXHgEVFAYHFiUzMjc+ATU0JyYrAQIqDCJfGQwNWhAhglbiOx9QXEY1Tv -6bhDATMj1lGSyMtYgtOXR0BwH+1wKyBApbU0BSESRAAgVAOGoQBAABADT/8gIoAsAAJQAAATIWFyM -uASMiBhUUFhceARUUBiMiJiczHgEzMjY1NCYnLgE1NDYBOmd2ClwGS0E6SUNRdW+HZnKKC1wPWkQ9 -Uk1cZGuEAsBwXUJHNjQ3OhIbZVZZbm5kREo+NT5DFRdYUFdrAAAAAAEAIgAAAmQCsgAHAAABIxEjE -SM1IQJk9lb2AkICbP2UAmxGAAEAXv/yAmQCsgAXAAABERQHDgEiJicmNREzERQXHgEyNjc2NRECZA -IIgfCBCAJWAgZYmlgGAgKy/k0qFFxzc1wUKgGz/lUrEkRQUEQSKwGrAAAAAAEAIAAAAnoCsgAGAAA -hIwMzGwEzAYJ07l3N1FwCsv2PAnEAAAEAGgAAA7ECsgAMAAABAyMLASMDMxsBMxsBA7HAcZyicrZi -kaB0nJkCsv1OAlP9rQKy/ZsCW/2kAmYAAAEAGQAAAm8CsgALAAAhCwEjEwMzGwEzAxMCCsrEY/bkY -re+Y/D6AST+3AFcAVb+5gEa/q3+oQAAAQATAAACUQKyAAgAAAERIxEDMxsBMwFdVvRjwLphARD+8A -EQAaL+sQFPAAABAC4AAAI5ArIACQAAJRUhNQEhNSEVAQI5/fUBof57Aen+YUZGQgIqRkX92QAAAAA -BAGL/sAEFAwwABwAAARUjETMVIxEBBWlpowMMOP0UOANcAAAB//v/4gE0AtAAAwAABSMDMwE0Pvs+ -HgLuAAAAAQAi/7AAxQMMAAcAABcjNTMRIzUzxaNpaaNQOALsOAABAFAA1wH0AmgABgAAJQsBIxMzE -wGwjY1GsESw1wFZ/qcBkf5vAAAAAQAy/6oBwv/iAAMAAAUhNSEBwv5wAZBWOAAAAAEAKQJEALYCsg -ADAAATIycztjhVUAJEbgAAAAACACT/8gHQAiAAHQAlAAAhJwcGIyImNTQ2OwE1NCcmIyIHIz4BMzI -XFh0BFBcnMjY9ASYVFAF6CR0wVUtgkJoiAgdgaQlaBm1Zrg4DCuQ9R+5MOSFQR1tbDiwUUXBUXowf -J8c9SjRORzYSgVwAAAAAAgBK//ICRQLfABEAHgAAATIWFRQGIyImLwEVIxEzETc2EzI2NTQmIyIGH -QEUFgFUcYCVbiNJEyNWVigySElcU01JXmECIJd4i5QTEDRJAt/+3jkq/hRuZV55ZWsdX14AAQAe// -IB9wIgABgAAAEyFhcjJiMiBhUUFjMyNjczDgEjIiY1NDYBF152DFocbEJXU0A1Rw1aE3pbaoKQAiB -oWH5qZm1tPDlaXYuLgZcAAAACAB7/8gIZAt8AEQAeAAABESM1BwYjIiY1NDYzMhYfAREDMjY9ATQm -IyIGFRQWAhlWKDJacYCVbiNJEyOnSV5hQUlcUwLf/SFVOSqXeIuUExA0ARb9VWVrHV9ebmVeeQACA -B7/8gH9AiAAFQAbAAABFAchHgEzMjY3Mw4BIyImNTQ2MzIWJyIGByEmAf0C/oAGUkA1SwlaD4FXbI -WObmt45UBVBwEqDQEYFhNjWD84W16Oh3+akU9aU60AAAEAFQAAARoC8gAWAAATBh0BMxUjESMRIzU -zNTQ3PgEzMhcVJqcDbW1WOTkDB0k8Hx5oAngVITRC/jQBzEIsJRs5PwVHEwAAAAIAHv8uAhkCIAAi -AC8AAAERFAcOASMiLwEzFx4BMzI2NzY9AQcGIyImNTQ2MzIWHwE1AzI2PQE0JiMiBhUUFgIZAQSEd -NwRAVcBBU5DTlUDASgyWnGAlW4jSRMjp0leYUFJXFMCEv5wSh1zeq8KCTI8VU0ZIQk5Kpd4i5QTED -RJ/iJlax1fXm5lXnkAAQBKAAACCgLkABcAAAEWFREjETQnLgEHDgEdASMRMxE3NjMyFgIIAlYCBDs -6RVRWViE5UVViAYUbQP7WASQxGzI7AQJyf+kC5P7TPSxUAAACAD4AAACsAsAABwALAAASMhYUBiIm -NBMjETNeLiAgLiBiVlYCwCAuICAu/WACEgAC//P/LgCnAsAABwAVAAASMhYUBiImNBcRFAcGIyInN -RY3NjURWS4gIC4gYgMLcRwNSgYCAsAgLiAgLo79wCUbZAJGBzMOHgJEAAAAAQBKAAACCALfAAsAAC -EnBxUjETMREzMHEwGTwTJWVvdu9/rgN6kC3/4oAQv6/ugAAQBG//wA3gLfAA8AABMRFBceATcVBiM -iJicmNRGcAQIcIxkkKi4CAQLf/bkhERoSBD4EJC8SNAJKAAAAAQBKAAADEAIgACQAAAEWFREjETQn -JiMiFREjETQnJiMiFREjETMVNzYzMhYXNzYzMhYDCwVWBAxedFYEDF50VlYiJko7ThAvJkpEVAGfI -jn+vAEcQyRZ1v76ARxDJFnW/voCEk08HzYtRB9HAAAAAAEASgAAAgoCIAAWAAABFhURIxE0JyYjIg -YdASMRMxU3NjMyFgIIAlYCCXBEVVZWITlRVWIBhRtA/tYBJDEbbHR/6QISWz0sVAAAAAACAB7/8gI -sAiAABwARAAASIBYUBiAmNBIyNjU0JiIGFRSlAQCHh/8Ah7ieWlqeWgIgn/Cfn/D+s3ZfYHV1YF8A -AgBK/zwCRQIgABEAHgAAATIWFRQGIyImLwERIxEzFTc2EzI2NTQmIyIGHQEUFgFUcYCVbiNJEyNWV -igySElcU01JXmECIJd4i5QTEDT+8wLWVTkq/hRuZV55ZWsdX14AAgAe/zwCGQIgABEAHgAAAREjEQ -cGIyImNTQ2MzIWHwE1AzI2PQE0JiMiBhUUFgIZVigyWnGAlW4jSRMjp0leYUFJXFMCEv0qARk5Kpd -4i5QTEDRJ/iJlax1fXm5lXnkAAQBKAAABPgIeAA0AAAEyFxUmBhURIxEzFTc2ARoWDkdXVlYwIwIe -B0EFVlf+0gISU0cYAAEAGP/yAa0CIAAjAAATMhYXIyYjIgYVFBYXHgEVFAYjIiYnMxYzMjY1NCYnL -gE1NDbkV2MJWhNdKy04PF1XbVhWbgxaE2ktOjlEUllkAiBaS2MrJCUoEBlPQkhOVFZoKCUmLhIWSE -BIUwAAAAEAFP/4ARQCiQAXAAATERQXHgE3FQYjIiYnJjURIzUzNTMVMxWxAQMmMx8qMjMEAUdHVmM -BzP7PGw4mFgY/BSwxDjQBNUJ7e0IAAAABAEL/8gICAhIAFwAAAREjNQcGIyImJyY1ETMRFBceATMy -Nj0BAgJWITlRT2EKBVYEBkA1RFECEv3uWj4qTToiOQE+/tIlJC43c4DpAAAAAAEAAQAAAfwCEgAGA -AABAyMDMxsBAfzJaclfop8CEv3uAhL+LQHTAAABAAEAAAMLAhIADAAAAQMjCwEjAzMbATMbAQMLqW -Z2dmapY3t0a3Z7AhL97gG+/kICEv5AAcD+QwG9AAAB//oAAAHWAhIACwAAARMjJwcjEwMzFzczARq -8ZIuKY763ZoWFYwEO/vLV1QEMAQbNzQAAAQAB/y4B+wISABEAAAEDDgEjIic1FjMyNj8BAzMbAQH7 -2iFZQB8NDRIpNhQH02GenQIS/cFVUAJGASozEwIt/i4B0gABABQAAAGxAg4ACQAAJRUhNQEhNSEVA -QGx/mMBNP7iAYL+zkREQgGIREX+ewAAAAABAED/sAEOAwwALAAAASMiBhUUFxYVFAYHHgEVFAcGFR -QWOwEVIyImNTQ3NjU0JzU2NTQnJjU0NjsBAQ4MKiMLDS4pKS4NCyMqDAtERAwLUlILDERECwLUGBk -WTlsgKzUFBTcrIFtOFhkYOC87GFVMIkUIOAhFIkxVGDsvAAAAAAEAYP84AJoDIAADAAAXIxEzmjo6 -yAPoAAEAIf+wAO8DDAAsAAATFQYVFBcWFRQGKwE1MzI2NTQnJjU0NjcuATU0NzY1NCYrATUzMhYVF -AcGFRTvUgsMREQLDCojCw0uKSkuDQsjKgwLREQMCwF6OAhFIkxVGDsvOBgZFk5bICs1BQU3KyBbTh -YZGDgvOxhVTCJFAAABAE0A3wH2AWQAEwAAATMUIyImJyYjIhUjNDMyFhcWMzIBvjhuGywtQR0xOG4 -bLC1BHTEBZIURGCNMhREYIwAAAwAk/94DIgLoAAcAEQApAAAAIBYQBiAmECQgBhUUFiA2NTQlMhYX -IyYjIgYUFjMyNjczDgEjIiY1NDYBAQFE3d3+vN0CB/7wubkBELn+xVBnD1wSWDo+QTcqOQZcEmZWX -HN2Aujg/rbg4AFKpr+Mjb6+jYxbWEldV5ZZNShLVn5na34AAgB4AFIB9AGeAAUACwAAAQcXIyc3Mw -cXIyc3AUqJiUmJifOJiUmJiQGepqampqampqYAAAIAHAHSAQ4CwAAHAA8AABIyFhQGIiY0NiIGFBY -yNjRgakREakSTNCEhNCECwEJqQkJqCiM4IyM4AAAAAAIAUAAAAfQCCwALAA8AAAEzFSMVIzUjNTM1 -MxMhNSEBP7W1OrW1OrX+XAGkAVs4tLQ4sP31OAAAAQB0AkQBAQKyAAMAABMjNzOsOD1QAkRuAAAAA -AEAIADsAKoBdgAHAAASMhYUBiImNEg6KCg6KAF2KDooKDoAAAIAOQBSAbUBngAFAAsAACUHIzcnMw -UHIzcnMwELiUmJiUkBM4lJiYlJ+KampqampqYAAAABADYB5QDhAt8ABAAAEzczByM2Xk1OXQHv8Po -AAQAWAeUAwQLfAAQAABMHIzczwV5NTl0C1fD6AAIANgHlAYsC3wAEAAkAABM3MwcjPwEzByM2Xk1O -XapeTU5dAe/w+grw+gAAAgAWAeUBawLfAAQACQAAEwcjNzMXByM3M8FeTU5dql5NTl0C1fD6CvD6A -AADACX/8gI1AHIABwAPABcAADYyFhQGIiY0NjIWFAYiJjQ2MhYUBiImNEk4JCQ4JOw4JCQ4JOw4JC -Q4JHIkOCQkOCQkOCQkOCQkOCQkOAAAAAEAeABSAUoBngAFAAABBxcjJzcBSomJSYmJAZ6mpqamAAA -AAAEAOQBSAQsBngAFAAAlByM3JzMBC4lJiYlJ+KampgAAAf9qAAABgQKyAAMAACsBATM/VwHAVwKy -AAAAAAIAFAHIAdwClAAHABQAABMVIxUjNSM1BRUjNwcjJxcjNTMXN9pKMkoByDICKzQqATJLKysCl -CmjoykBy46KiY3Lm5sAAQAVAAABvALyABgAAAERIxEjESMRIzUzNTQ3NjMyFxUmBgcGHQEBvFbCVj -k5AxHHHx5iVgcDAg798gHM/jQBzEIOJRuWBUcIJDAVIRYAAAABABX//AHkAvIAJQAAJR4BNxUGIyI -mJyY1ESYjIgcGHQEzFSMRIxEjNTM1NDc2MzIXERQBowIcIxkkKi4CAR4nXgwDbW1WLy8DEbNdOmYa -EQQ/BCQvEjQCFQZWFSEWQv40AcxCDiUblhP9uSEAAAAAAAAWAQ4AAQAAAAAAAAATACgAAQAAAAAAA -QAHAEwAAQAAAAAAAgAHAGQAAQAAAAAAAwAaAKIAAQAAAAAABAAHAM0AAQAAAAAABQA8AU8AAQAAAA -AABgAPAawAAQAAAAAACAALAdQAAQAAAAAACQALAfgAAQAAAAAACwAXAjQAAQAAAAAADAAXAnwAAwA -BBAkAAAAmAAAAAwABBAkAAQAOADwAAwABBAkAAgAOAFQAAwABBAkAAwA0AGwAAwABBAkABAAOAL0A -AwABBAkABQB4ANUAAwABBAkABgAeAYwAAwABBAkACAAWAbwAAwABBAkACQAWAeAAAwABBAkACwAuA -gQAAwABBAkADAAuAkwATgBvACAAUgBpAGcAaAB0AHMAIABSAGUAcwBlAHIAdgBlAGQALgAATm8gUm -lnaHRzIFJlc2VydmVkLgAAQQBpAGwAZQByAG8AbgAAQWlsZXJvbgAAUgBlAGcAdQBsAGEAcgAAUmV -ndWxhcgAAMQAuADEAMAAyADsAVQBLAFcATgA7AEEAaQBsAGUAcgBvAG4ALQBSAGUAZwB1AGwAYQBy -AAAxLjEwMjtVS1dOO0FpbGVyb24tUmVndWxhcgAAQQBpAGwAZQByAG8AbgAAQWlsZXJvbgAAVgBlA -HIAcwBpAG8AbgAgADEALgAxADAAMgA7AFAAUwAgADAAMAAxAC4AMQAwADIAOwBoAG8AdABjAG8Abg -B2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADk -AAFZlcnNpb24gMS4xMDI7UFMgMDAxLjEwMjtob3Rjb252IDEuMC43MDttYWtlb3RmLmxpYjIuNS41 -ODMyOQAAQQBpAGwAZQByAG8AbgAtAFIAZQBnAHUAbABhAHIAAEFpbGVyb24tUmVndWxhcgAAUwBvA -HIAYQAgAFMAYQBnAGEAbgBvAABTb3JhIFNhZ2FubwAAUwBvAHIAYQAgAFMAYQBnAGEAbgBvAABTb3 -JhIFNhZ2FubwAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGQAbwB0AGMAbwBsAG8AbgAuAG4AZQB0AAB -odHRwOi8vd3d3LmRvdGNvbG9uLm5ldAAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGQAbwB0AGMAbwBs -AG8AbgAuAG4AZQB0AABodHRwOi8vd3d3LmRvdGNvbG9uLm5ldAAAAAACAAAAAAAA/4MAMgAAAAAAA -AAAAAAAAAAAAAAAAAAAAHQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATAB -QAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAA -xADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0A -TgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAIsAqQCDAJMAjQDDAKoAtgC3A -LQAtQCrAL4AvwC8AIwAwADBAAAAAAAB//8AAgABAAAADAAAABwAAAACAAIAAwBxAAEAcgBzAAIABA -AAAAIAAAABAAAACgBMAGYAAkRGTFQADmxhdG4AGgAEAAAAAP//AAEAAAAWAANDQVQgAB5NT0wgABZ -ST00gABYAAP//AAEAAAAA//8AAgAAAAEAAmxpZ2EADmxvY2wAFAAAAAEAAQAAAAEAAAACAAYAEAAG -AAAAAgASADQABAAAAAEATAADAAAAAgAQABYAAQAcAAAAAQABAE8AAQABAGcAAQABAE8AAwAAAAIAE -AAWAAEAHAAAAAEAAQAvAAEAAQBnAAEAAQAvAAEAGgABAAgAAgAGAAwAcwACAE8AcgACAEwAAQABAE -kAAAABAAAACgBGAGAAAkRGTFQADmxhdG4AHAAEAAAAAP//AAIAAAABABYAA0NBVCAAFk1PTCAAFlJ -PTSAAFgAA//8AAgAAAAEAAmNwc3AADmtlcm4AFAAAAAEAAAAAAAEAAQACAAYADgABAAAAAQASAAIA -AAACAB4ANgABAAoABQAFAAoAAgABACQAPQAAAAEAEgAEAAAAAQAMAAEAOP/nAAEAAQAkAAIGigAEA -AAFJAXKABoAGQAA//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAD/sv+4/+z/7v/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAD/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9T/6AAAAAD/8QAA -ABD/vQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7gAAAAAAAAAAAAAAAAAA//MAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAP/5AAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAAD/4AAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//L/9AAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAA/+gAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/mAAAAAAAAAAAAAAAAAAD -/4gAA//AAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAP/OAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zv/qAAAAAP/0AAAACAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/ZAAD/egAA/1kAAAAA/5D/rgAAAAAAAAAAAA -AAAAAAAAAAAAAAAAD/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAD/8AAA/7b/8P+wAAD/8P/E/98AAAAA/8P/+P/0//oAAAAAAAAAAAAA//gA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/w//C/9MAAP/SAAD/9wAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yAAA/+kAAAAA//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9wAAAAD//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAP/cAAAAAAAAAAAAAAAA/7YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6AAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAkAFAAEAAAAAQACwAAABcA -BgAAAAAAAAAIAA4AAAAAAAsAEgAAAAAAAAATABkAAwANAAAAAQAJAAAAAAAAAAAAAAAAAAAAGAAAA -AAABwAAAAAAAAAAAAAAFQAFAAAAAAAYABgAAAAUAAAACgAAAAwAAgAPABEAFgAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAEAEQBdAAYAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABwAAAAAACAAAAAAAAAAAAAcAAAAHAAAAEwAJ -ABUADgAPAAAACwAQAAAAAAAAAAAAAAAAAAUAGAACAAIAAgAAAAIAGAAXAAAAGAAAABYAFgACABYAA -gAWAAAAEQADAAoAFAAMAA0ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEgAGAAEAHgAkAC -YAJwApACoALQAuAC8AMgAzADcAOAA5ADoAPAA9AEUASABOAE8AUgBTAFUAVwBZAFoAWwBcAF0AcwA -AAAAAAQAAAADa3tfFAAAAANAan9kAAAAA4QodoQ== -""" - ) - ), - 10 if size is None else size, - layout_engine=Layout.BASIC, - ) - return load_default_imagefont() diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageGrab.py b/myenv/lib/python3.12/site-packages/PIL/ImageGrab.py deleted file mode 100644 index 1eb4507..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageGrab.py +++ /dev/null @@ -1,196 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# screen grabber -# -# History: -# 2001-04-26 fl created -# 2001-09-17 fl use builtin driver, if present -# 2002-11-19 fl added grabclipboard support -# -# Copyright (c) 2001-2002 by Secret Labs AB -# Copyright (c) 2001-2002 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import os -import shutil -import subprocess -import sys -import tempfile - -from . import Image - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import ImageWin - - -def grab( - bbox: tuple[int, int, int, int] | None = None, - include_layered_windows: bool = False, - all_screens: bool = False, - xdisplay: str | None = None, - window: int | ImageWin.HWND | None = None, -) -> Image.Image: - im: Image.Image - if xdisplay is None: - if sys.platform == "darwin": - fh, filepath = tempfile.mkstemp(".png") - os.close(fh) - args = ["screencapture"] - if bbox: - left, top, right, bottom = bbox - args += ["-R", f"{left},{top},{right-left},{bottom-top}"] - subprocess.call(args + ["-x", filepath]) - im = Image.open(filepath) - im.load() - os.unlink(filepath) - if bbox: - im_resized = im.resize((right - left, bottom - top)) - im.close() - return im_resized - return im - elif sys.platform == "win32": - if window is not None: - all_screens = -1 - offset, size, data = Image.core.grabscreen_win32( - include_layered_windows, - all_screens, - int(window) if window is not None else 0, - ) - im = Image.frombytes( - "RGB", - size, - data, - # RGB, 32-bit line padding, origin lower left corner - "raw", - "BGR", - (size[0] * 3 + 3) & -4, - -1, - ) - if bbox: - x0, y0 = offset - left, top, right, bottom = bbox - im = im.crop((left - x0, top - y0, right - x0, bottom - y0)) - return im - # Cast to Optional[str] needed for Windows and macOS. - display_name: str | None = xdisplay - try: - if not Image.core.HAVE_XCB: - msg = "Pillow was built without XCB support" - raise OSError(msg) - size, data = Image.core.grabscreen_x11(display_name) - except OSError: - if display_name is None and sys.platform not in ("darwin", "win32"): - if shutil.which("gnome-screenshot"): - args = ["gnome-screenshot", "-f"] - elif shutil.which("grim"): - args = ["grim"] - elif shutil.which("spectacle"): - args = ["spectacle", "-n", "-b", "-f", "-o"] - else: - raise - fh, filepath = tempfile.mkstemp(".png") - os.close(fh) - subprocess.call(args + [filepath]) - im = Image.open(filepath) - im.load() - os.unlink(filepath) - if bbox: - im_cropped = im.crop(bbox) - im.close() - return im_cropped - return im - else: - raise - else: - im = Image.frombytes("RGB", size, data, "raw", "BGRX", size[0] * 4, 1) - if bbox: - im = im.crop(bbox) - return im - - -def grabclipboard() -> Image.Image | list[str] | None: - if sys.platform == "darwin": - p = subprocess.run( - ["osascript", "-e", "get the clipboard as «class PNGf»"], - capture_output=True, - ) - if p.returncode != 0: - return None - - import binascii - - data = io.BytesIO(binascii.unhexlify(p.stdout[11:-3])) - return Image.open(data) - elif sys.platform == "win32": - fmt, data = Image.core.grabclipboard_win32() - if fmt == "file": # CF_HDROP - import struct - - o = struct.unpack_from("I", data)[0] - if data[16] == 0: - files = data[o:].decode("mbcs").split("\0") - else: - files = data[o:].decode("utf-16le").split("\0") - return files[: files.index("")] - if isinstance(data, bytes): - data = io.BytesIO(data) - if fmt == "png": - from . import PngImagePlugin - - return PngImagePlugin.PngImageFile(data) - elif fmt == "DIB": - from . import BmpImagePlugin - - return BmpImagePlugin.DibImageFile(data) - return None - else: - if os.getenv("WAYLAND_DISPLAY"): - session_type = "wayland" - elif os.getenv("DISPLAY"): - session_type = "x11" - else: # Session type check failed - session_type = None - - if shutil.which("wl-paste") and session_type in ("wayland", None): - args = ["wl-paste", "-t", "image"] - elif shutil.which("xclip") and session_type in ("x11", None): - args = ["xclip", "-selection", "clipboard", "-t", "image/png", "-o"] - else: - msg = "wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux" - raise NotImplementedError(msg) - - p = subprocess.run(args, capture_output=True) - if p.returncode != 0: - err = p.stderr - for silent_error in [ - # wl-paste, when the clipboard is empty - b"Nothing is copied", - # Ubuntu/Debian wl-paste, when the clipboard is empty - b"No selection", - # Ubuntu/Debian wl-paste, when an image isn't available - b"No suitable type of content copied", - # wl-paste or Ubuntu/Debian xclip, when an image isn't available - b" not available", - # xclip, when an image isn't available - b"cannot convert ", - # xclip, when the clipboard isn't initialized - b"xclip: Error: There is no owner for the ", - ]: - if silent_error in err: - return None - msg = f"{args[0]} error" - if err: - msg += f": {err.strip().decode()}" - raise ChildProcessError(msg) - - data = io.BytesIO(p.stdout) - im = Image.open(data) - im.load() - return im diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageMath.py b/myenv/lib/python3.12/site-packages/PIL/ImageMath.py deleted file mode 100644 index c33809c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageMath.py +++ /dev/null @@ -1,368 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# a simple math add-on for the Python Imaging Library -# -# History: -# 1999-02-15 fl Original PIL Plus release -# 2005-05-05 fl Simplified and cleaned up for PIL 1.1.6 -# 2005-09-12 fl Fixed int() and float() for Python 2.4.1 -# -# Copyright (c) 1999-2005 by Secret Labs AB -# Copyright (c) 2005 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import builtins -from types import CodeType -from typing import Any, Callable - -from . import Image, _imagingmath -from ._deprecate import deprecate - - -class _Operand: - """Wraps an image operand, providing standard operators""" - - def __init__(self, im: Image.Image): - self.im = im - - def __fixup(self, im1: _Operand | float) -> Image.Image: - # convert image to suitable mode - if isinstance(im1, _Operand): - # argument was an image. - if im1.im.mode in ("1", "L"): - return im1.im.convert("I") - elif im1.im.mode in ("I", "F"): - return im1.im - else: - msg = f"unsupported mode: {im1.im.mode}" - raise ValueError(msg) - else: - # argument was a constant - if isinstance(im1, (int, float)) and self.im.mode in ("1", "L", "I"): - return Image.new("I", self.im.size, im1) - else: - return Image.new("F", self.im.size, im1) - - def apply( - self, - op: str, - im1: _Operand | float, - im2: _Operand | float | None = None, - mode: str | None = None, - ) -> _Operand: - im_1 = self.__fixup(im1) - if im2 is None: - # unary operation - out = Image.new(mode or im_1.mode, im_1.size, None) - try: - op = getattr(_imagingmath, f"{op}_{im_1.mode}") - except AttributeError as e: - msg = f"bad operand type for '{op}'" - raise TypeError(msg) from e - _imagingmath.unop(op, out.getim(), im_1.getim()) - else: - # binary operation - im_2 = self.__fixup(im2) - if im_1.mode != im_2.mode: - # convert both arguments to floating point - if im_1.mode != "F": - im_1 = im_1.convert("F") - if im_2.mode != "F": - im_2 = im_2.convert("F") - if im_1.size != im_2.size: - # crop both arguments to a common size - size = ( - min(im_1.size[0], im_2.size[0]), - min(im_1.size[1], im_2.size[1]), - ) - if im_1.size != size: - im_1 = im_1.crop((0, 0) + size) - if im_2.size != size: - im_2 = im_2.crop((0, 0) + size) - out = Image.new(mode or im_1.mode, im_1.size, None) - try: - op = getattr(_imagingmath, f"{op}_{im_1.mode}") - except AttributeError as e: - msg = f"bad operand type for '{op}'" - raise TypeError(msg) from e - _imagingmath.binop(op, out.getim(), im_1.getim(), im_2.getim()) - return _Operand(out) - - # unary operators - def __bool__(self) -> bool: - # an image is "true" if it contains at least one non-zero pixel - return self.im.getbbox() is not None - - def __abs__(self) -> _Operand: - return self.apply("abs", self) - - def __pos__(self) -> _Operand: - return self - - def __neg__(self) -> _Operand: - return self.apply("neg", self) - - # binary operators - def __add__(self, other: _Operand | float) -> _Operand: - return self.apply("add", self, other) - - def __radd__(self, other: _Operand | float) -> _Operand: - return self.apply("add", other, self) - - def __sub__(self, other: _Operand | float) -> _Operand: - return self.apply("sub", self, other) - - def __rsub__(self, other: _Operand | float) -> _Operand: - return self.apply("sub", other, self) - - def __mul__(self, other: _Operand | float) -> _Operand: - return self.apply("mul", self, other) - - def __rmul__(self, other: _Operand | float) -> _Operand: - return self.apply("mul", other, self) - - def __truediv__(self, other: _Operand | float) -> _Operand: - return self.apply("div", self, other) - - def __rtruediv__(self, other: _Operand | float) -> _Operand: - return self.apply("div", other, self) - - def __mod__(self, other: _Operand | float) -> _Operand: - return self.apply("mod", self, other) - - def __rmod__(self, other: _Operand | float) -> _Operand: - return self.apply("mod", other, self) - - def __pow__(self, other: _Operand | float) -> _Operand: - return self.apply("pow", self, other) - - def __rpow__(self, other: _Operand | float) -> _Operand: - return self.apply("pow", other, self) - - # bitwise - def __invert__(self) -> _Operand: - return self.apply("invert", self) - - def __and__(self, other: _Operand | float) -> _Operand: - return self.apply("and", self, other) - - def __rand__(self, other: _Operand | float) -> _Operand: - return self.apply("and", other, self) - - def __or__(self, other: _Operand | float) -> _Operand: - return self.apply("or", self, other) - - def __ror__(self, other: _Operand | float) -> _Operand: - return self.apply("or", other, self) - - def __xor__(self, other: _Operand | float) -> _Operand: - return self.apply("xor", self, other) - - def __rxor__(self, other: _Operand | float) -> _Operand: - return self.apply("xor", other, self) - - def __lshift__(self, other: _Operand | float) -> _Operand: - return self.apply("lshift", self, other) - - def __rshift__(self, other: _Operand | float) -> _Operand: - return self.apply("rshift", self, other) - - # logical - def __eq__(self, other: _Operand | float) -> _Operand: # type: ignore[override] - return self.apply("eq", self, other) - - def __ne__(self, other: _Operand | float) -> _Operand: # type: ignore[override] - return self.apply("ne", self, other) - - def __lt__(self, other: _Operand | float) -> _Operand: - return self.apply("lt", self, other) - - def __le__(self, other: _Operand | float) -> _Operand: - return self.apply("le", self, other) - - def __gt__(self, other: _Operand | float) -> _Operand: - return self.apply("gt", self, other) - - def __ge__(self, other: _Operand | float) -> _Operand: - return self.apply("ge", self, other) - - -# conversions -def imagemath_int(self: _Operand) -> _Operand: - return _Operand(self.im.convert("I")) - - -def imagemath_float(self: _Operand) -> _Operand: - return _Operand(self.im.convert("F")) - - -# logical -def imagemath_equal(self: _Operand, other: _Operand | float | None) -> _Operand: - return self.apply("eq", self, other, mode="I") - - -def imagemath_notequal(self: _Operand, other: _Operand | float | None) -> _Operand: - return self.apply("ne", self, other, mode="I") - - -def imagemath_min(self: _Operand, other: _Operand | float | None) -> _Operand: - return self.apply("min", self, other) - - -def imagemath_max(self: _Operand, other: _Operand | float | None) -> _Operand: - return self.apply("max", self, other) - - -def imagemath_convert(self: _Operand, mode: str) -> _Operand: - return _Operand(self.im.convert(mode)) - - -ops = { - "int": imagemath_int, - "float": imagemath_float, - "equal": imagemath_equal, - "notequal": imagemath_notequal, - "min": imagemath_min, - "max": imagemath_max, - "convert": imagemath_convert, -} - - -def lambda_eval( - expression: Callable[[dict[str, Any]], Any], - options: dict[str, Any] = {}, - **kw: Any, -) -> Any: - """ - Returns the result of an image function. - - :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band - images, use the :py:meth:`~PIL.Image.Image.split` method or - :py:func:`~PIL.Image.merge` function. - - :param expression: A function that receives a dictionary. - :param options: Values to add to the function's dictionary. Deprecated. - You can instead use one or more keyword arguments. - :param **kw: Values to add to the function's dictionary. - :return: The expression result. This is usually an image object, but can - also be an integer, a floating point value, or a pixel tuple, - depending on the expression. - """ - - if options: - deprecate( - "ImageMath.lambda_eval options", - 12, - "ImageMath.lambda_eval keyword arguments", - ) - - args: dict[str, Any] = ops.copy() - args.update(options) - args.update(kw) - for k, v in args.items(): - if isinstance(v, Image.Image): - args[k] = _Operand(v) - - out = expression(args) - try: - return out.im - except AttributeError: - return out - - -def unsafe_eval( - expression: str, - options: dict[str, Any] = {}, - **kw: Any, -) -> Any: - """ - Evaluates an image expression. This uses Python's ``eval()`` function to process - the expression string, and carries the security risks of doing so. It is not - recommended to process expressions without considering this. - :py:meth:`~lambda_eval` is a more secure alternative. - - :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band - images, use the :py:meth:`~PIL.Image.Image.split` method or - :py:func:`~PIL.Image.merge` function. - - :param expression: A string containing a Python-style expression. - :param options: Values to add to the evaluation context. Deprecated. - You can instead use one or more keyword arguments. - :param **kw: Values to add to the evaluation context. - :return: The evaluated expression. This is usually an image object, but can - also be an integer, a floating point value, or a pixel tuple, - depending on the expression. - """ - - if options: - deprecate( - "ImageMath.unsafe_eval options", - 12, - "ImageMath.unsafe_eval keyword arguments", - ) - - # build execution namespace - args: dict[str, Any] = ops.copy() - for k in [*options, *kw]: - if "__" in k or hasattr(builtins, k): - msg = f"'{k}' not allowed" - raise ValueError(msg) - - args.update(options) - args.update(kw) - for k, v in args.items(): - if isinstance(v, Image.Image): - args[k] = _Operand(v) - - compiled_code = compile(expression, "", "eval") - - def scan(code: CodeType) -> None: - for const in code.co_consts: - if type(const) is type(compiled_code): - scan(const) - - for name in code.co_names: - if name not in args and name != "abs": - msg = f"'{name}' not allowed" - raise ValueError(msg) - - scan(compiled_code) - out = builtins.eval(expression, {"__builtins": {"abs": abs}}, args) - try: - return out.im - except AttributeError: - return out - - -def eval( - expression: str, - _dict: dict[str, Any] = {}, - **kw: Any, -) -> Any: - """ - Evaluates an image expression. - - Deprecated. Use lambda_eval() or unsafe_eval() instead. - - :param expression: A string containing a Python-style expression. - :param _dict: Values to add to the evaluation context. You - can either use a dictionary, or one or more keyword - arguments. - :return: The evaluated expression. This is usually an image object, but can - also be an integer, a floating point value, or a pixel tuple, - depending on the expression. - - .. deprecated:: 10.3.0 - """ - - deprecate( - "ImageMath.eval", - 12, - "ImageMath.lambda_eval or ImageMath.unsafe_eval", - ) - return unsafe_eval(expression, _dict, **kw) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageMode.py b/myenv/lib/python3.12/site-packages/PIL/ImageMode.py deleted file mode 100644 index 92a08d2..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageMode.py +++ /dev/null @@ -1,92 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard mode descriptors -# -# History: -# 2006-03-20 fl Added -# -# Copyright (c) 2006 by Secret Labs AB. -# Copyright (c) 2006 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import sys -from functools import lru_cache -from typing import NamedTuple - -from ._deprecate import deprecate - - -class ModeDescriptor(NamedTuple): - """Wrapper for mode strings.""" - - mode: str - bands: tuple[str, ...] - basemode: str - basetype: str - typestr: str - - def __str__(self) -> str: - return self.mode - - -@lru_cache -def getmode(mode: str) -> ModeDescriptor: - """Gets a mode descriptor for the given mode.""" - endian = "<" if sys.byteorder == "little" else ">" - - modes = { - # core modes - # Bits need to be extended to bytes - "1": ("L", "L", ("1",), "|b1"), - "L": ("L", "L", ("L",), "|u1"), - "I": ("L", "I", ("I",), f"{endian}i4"), - "F": ("L", "F", ("F",), f"{endian}f4"), - "P": ("P", "L", ("P",), "|u1"), - "RGB": ("RGB", "L", ("R", "G", "B"), "|u1"), - "RGBX": ("RGB", "L", ("R", "G", "B", "X"), "|u1"), - "RGBA": ("RGB", "L", ("R", "G", "B", "A"), "|u1"), - "CMYK": ("RGB", "L", ("C", "M", "Y", "K"), "|u1"), - "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr"), "|u1"), - # UNDONE - unsigned |u1i1i1 - "LAB": ("RGB", "L", ("L", "A", "B"), "|u1"), - "HSV": ("RGB", "L", ("H", "S", "V"), "|u1"), - # extra experimental modes - "RGBa": ("RGB", "L", ("R", "G", "B", "a"), "|u1"), - "BGR;15": ("RGB", "L", ("B", "G", "R"), "|u1"), - "BGR;16": ("RGB", "L", ("B", "G", "R"), "|u1"), - "BGR;24": ("RGB", "L", ("B", "G", "R"), "|u1"), - "LA": ("L", "L", ("L", "A"), "|u1"), - "La": ("L", "L", ("L", "a"), "|u1"), - "PA": ("RGB", "L", ("P", "A"), "|u1"), - } - if mode in modes: - if mode in ("BGR;15", "BGR;16", "BGR;24"): - deprecate(mode, 12) - base_mode, base_type, bands, type_str = modes[mode] - return ModeDescriptor(mode, bands, base_mode, base_type, type_str) - - mapping_modes = { - # I;16 == I;16L, and I;32 == I;32L - "I;16": "u2", - "I;16BS": ">i2", - "I;16N": f"{endian}u2", - "I;16NS": f"{endian}i2", - "I;32": "u4", - "I;32L": "i4", - "I;32LS": " -from __future__ import annotations - -import re - -from . import Image, _imagingmorph - -LUT_SIZE = 1 << 9 - -# fmt: off -ROTATION_MATRIX = [ - 6, 3, 0, - 7, 4, 1, - 8, 5, 2, -] -MIRROR_MATRIX = [ - 2, 1, 0, - 5, 4, 3, - 8, 7, 6, -] -# fmt: on - - -class LutBuilder: - """A class for building a MorphLut from a descriptive language - - The input patterns is a list of a strings sequences like these:: - - 4:(... - .1. - 111)->1 - - (whitespaces including linebreaks are ignored). The option 4 - describes a series of symmetry operations (in this case a - 4-rotation), the pattern is described by: - - - . or X - Ignore - - 1 - Pixel is on - - 0 - Pixel is off - - The result of the operation is described after "->" string. - - The default is to return the current pixel value, which is - returned if no other match is found. - - Operations: - - - 4 - 4 way rotation - - N - Negate - - 1 - Dummy op for no other operation (an op must always be given) - - M - Mirroring - - Example:: - - lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) - lut = lb.build_lut() - - """ - - def __init__( - self, patterns: list[str] | None = None, op_name: str | None = None - ) -> None: - if patterns is not None: - self.patterns = patterns - else: - self.patterns = [] - self.lut: bytearray | None = None - if op_name is not None: - known_patterns = { - "corner": ["1:(... ... ...)->0", "4:(00. 01. ...)->1"], - "dilation4": ["4:(... .0. .1.)->1"], - "dilation8": ["4:(... .0. .1.)->1", "4:(... .0. ..1)->1"], - "erosion4": ["4:(... .1. .0.)->0"], - "erosion8": ["4:(... .1. .0.)->0", "4:(... .1. ..0)->0"], - "edge": [ - "1:(... ... ...)->0", - "4:(.0. .1. ...)->1", - "4:(01. .1. ...)->1", - ], - } - if op_name not in known_patterns: - msg = f"Unknown pattern {op_name}!" - raise Exception(msg) - - self.patterns = known_patterns[op_name] - - def add_patterns(self, patterns: list[str]) -> None: - self.patterns += patterns - - def build_default_lut(self) -> None: - symbols = [0, 1] - m = 1 << 4 # pos of current pixel - self.lut = bytearray(symbols[(i & m) > 0] for i in range(LUT_SIZE)) - - def get_lut(self) -> bytearray | None: - return self.lut - - def _string_permute(self, pattern: str, permutation: list[int]) -> str: - """string_permute takes a pattern and a permutation and returns the - string permuted according to the permutation list. - """ - assert len(permutation) == 9 - return "".join(pattern[p] for p in permutation) - - def _pattern_permute( - self, basic_pattern: str, options: str, basic_result: int - ) -> list[tuple[str, int]]: - """pattern_permute takes a basic pattern and its result and clones - the pattern according to the modifications described in the $options - parameter. It returns a list of all cloned patterns.""" - patterns = [(basic_pattern, basic_result)] - - # rotations - if "4" in options: - res = patterns[-1][1] - for i in range(4): - patterns.append( - (self._string_permute(patterns[-1][0], ROTATION_MATRIX), res) - ) - # mirror - if "M" in options: - n = len(patterns) - for pattern, res in patterns[:n]: - patterns.append((self._string_permute(pattern, MIRROR_MATRIX), res)) - - # negate - if "N" in options: - n = len(patterns) - for pattern, res in patterns[:n]: - # Swap 0 and 1 - pattern = pattern.replace("0", "Z").replace("1", "0").replace("Z", "1") - res = 1 - int(res) - patterns.append((pattern, res)) - - return patterns - - def build_lut(self) -> bytearray: - """Compile all patterns into a morphology lut. - - TBD :Build based on (file) morphlut:modify_lut - """ - self.build_default_lut() - assert self.lut is not None - patterns = [] - - # Parse and create symmetries of the patterns strings - for p in self.patterns: - m = re.search(r"(\w*):?\s*\((.+?)\)\s*->\s*(\d)", p.replace("\n", "")) - if not m: - msg = 'Syntax error in pattern "' + p + '"' - raise Exception(msg) - options = m.group(1) - pattern = m.group(2) - result = int(m.group(3)) - - # Get rid of spaces - pattern = pattern.replace(" ", "").replace("\n", "") - - patterns += self._pattern_permute(pattern, options, result) - - # compile the patterns into regular expressions for speed - compiled_patterns = [] - for pattern in patterns: - p = pattern[0].replace(".", "X").replace("X", "[01]") - compiled_patterns.append((re.compile(p), pattern[1])) - - # Step through table and find patterns that match. - # Note that all the patterns are searched. The last one - # caught overrides - for i in range(LUT_SIZE): - # Build the bit pattern - bitpattern = bin(i)[2:] - bitpattern = ("0" * (9 - len(bitpattern)) + bitpattern)[::-1] - - for pattern, r in compiled_patterns: - if pattern.match(bitpattern): - self.lut[i] = [0, 1][r] - - return self.lut - - -class MorphOp: - """A class for binary morphological operators""" - - def __init__( - self, - lut: bytearray | None = None, - op_name: str | None = None, - patterns: list[str] | None = None, - ) -> None: - """Create a binary morphological operator""" - self.lut = lut - if op_name is not None: - self.lut = LutBuilder(op_name=op_name).build_lut() - elif patterns is not None: - self.lut = LutBuilder(patterns=patterns).build_lut() - - def apply(self, image: Image.Image) -> tuple[int, Image.Image]: - """Run a single morphological operation on an image - - Returns a tuple of the number of changed pixels and the - morphed image""" - if self.lut is None: - msg = "No operator loaded" - raise Exception(msg) - - if image.mode != "L": - msg = "Image mode must be L" - raise ValueError(msg) - outimage = Image.new(image.mode, image.size, None) - count = _imagingmorph.apply(bytes(self.lut), image.getim(), outimage.getim()) - return count, outimage - - def match(self, image: Image.Image) -> list[tuple[int, int]]: - """Get a list of coordinates matching the morphological operation on - an image. - - Returns a list of tuples of (x,y) coordinates - of all matching pixels. See :ref:`coordinate-system`.""" - if self.lut is None: - msg = "No operator loaded" - raise Exception(msg) - - if image.mode != "L": - msg = "Image mode must be L" - raise ValueError(msg) - return _imagingmorph.match(bytes(self.lut), image.getim()) - - def get_on_pixels(self, image: Image.Image) -> list[tuple[int, int]]: - """Get a list of all turned on pixels in a binary image - - Returns a list of tuples of (x,y) coordinates - of all matching pixels. See :ref:`coordinate-system`.""" - - if image.mode != "L": - msg = "Image mode must be L" - raise ValueError(msg) - return _imagingmorph.get_on_pixels(image.getim()) - - def load_lut(self, filename: str) -> None: - """Load an operator from an mrl file""" - with open(filename, "rb") as f: - self.lut = bytearray(f.read()) - - if len(self.lut) != LUT_SIZE: - self.lut = None - msg = "Wrong size operator file!" - raise Exception(msg) - - def save_lut(self, filename: str) -> None: - """Save an operator to an mrl file""" - if self.lut is None: - msg = "No operator loaded" - raise Exception(msg) - with open(filename, "wb") as f: - f.write(self.lut) - - def set_lut(self, lut: bytearray | None) -> None: - """Set the lut from an external source""" - self.lut = lut diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageOps.py b/myenv/lib/python3.12/site-packages/PIL/ImageOps.py deleted file mode 100644 index da28854..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageOps.py +++ /dev/null @@ -1,745 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard image operations -# -# History: -# 2001-10-20 fl Created -# 2001-10-23 fl Added autocontrast operator -# 2001-12-18 fl Added Kevin's fit operator -# 2004-03-14 fl Fixed potential division by zero in equalize -# 2005-05-05 fl Fixed equalize for low number of values -# -# Copyright (c) 2001-2004 by Secret Labs AB -# Copyright (c) 2001-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import functools -import operator -import re -from collections.abc import Sequence -from typing import Literal, Protocol, cast, overload - -from . import ExifTags, Image, ImagePalette - -# -# helpers - - -def _border(border: int | tuple[int, ...]) -> tuple[int, int, int, int]: - if isinstance(border, tuple): - if len(border) == 2: - left, top = right, bottom = border - elif len(border) == 4: - left, top, right, bottom = border - else: - left = top = right = bottom = border - return left, top, right, bottom - - -def _color(color: str | int | tuple[int, ...], mode: str) -> int | tuple[int, ...]: - if isinstance(color, str): - from . import ImageColor - - color = ImageColor.getcolor(color, mode) - return color - - -def _lut(image: Image.Image, lut: list[int]) -> Image.Image: - if image.mode == "P": - # FIXME: apply to lookup table, not image data - msg = "mode P support coming soon" - raise NotImplementedError(msg) - elif image.mode in ("L", "RGB"): - if image.mode == "RGB" and len(lut) == 256: - lut = lut + lut + lut - return image.point(lut) - else: - msg = f"not supported for mode {image.mode}" - raise OSError(msg) - - -# -# actions - - -def autocontrast( - image: Image.Image, - cutoff: float | tuple[float, float] = 0, - ignore: int | Sequence[int] | None = None, - mask: Image.Image | None = None, - preserve_tone: bool = False, -) -> Image.Image: - """ - Maximize (normalize) image contrast. This function calculates a - histogram of the input image (or mask region), removes ``cutoff`` percent of the - lightest and darkest pixels from the histogram, and remaps the image - so that the darkest pixel becomes black (0), and the lightest - becomes white (255). - - :param image: The image to process. - :param cutoff: The percent to cut off from the histogram on the low and - high ends. Either a tuple of (low, high), or a single - number for both. - :param ignore: The background pixel value (use None for no background). - :param mask: Histogram used in contrast operation is computed using pixels - within the mask. If no mask is given the entire image is used - for histogram computation. - :param preserve_tone: Preserve image tone in Photoshop-like style autocontrast. - - .. versionadded:: 8.2.0 - - :return: An image. - """ - if preserve_tone: - histogram = image.convert("L").histogram(mask) - else: - histogram = image.histogram(mask) - - lut = [] - for layer in range(0, len(histogram), 256): - h = histogram[layer : layer + 256] - if ignore is not None: - # get rid of outliers - if isinstance(ignore, int): - h[ignore] = 0 - else: - for ix in ignore: - h[ix] = 0 - if cutoff: - # cut off pixels from both ends of the histogram - if not isinstance(cutoff, tuple): - cutoff = (cutoff, cutoff) - # get number of pixels - n = 0 - for ix in range(256): - n = n + h[ix] - # remove cutoff% pixels from the low end - cut = int(n * cutoff[0] // 100) - for lo in range(256): - if cut > h[lo]: - cut = cut - h[lo] - h[lo] = 0 - else: - h[lo] -= cut - cut = 0 - if cut <= 0: - break - # remove cutoff% samples from the high end - cut = int(n * cutoff[1] // 100) - for hi in range(255, -1, -1): - if cut > h[hi]: - cut = cut - h[hi] - h[hi] = 0 - else: - h[hi] -= cut - cut = 0 - if cut <= 0: - break - # find lowest/highest samples after preprocessing - for lo in range(256): - if h[lo]: - break - for hi in range(255, -1, -1): - if h[hi]: - break - if hi <= lo: - # don't bother - lut.extend(list(range(256))) - else: - scale = 255.0 / (hi - lo) - offset = -lo * scale - for ix in range(256): - ix = int(ix * scale + offset) - if ix < 0: - ix = 0 - elif ix > 255: - ix = 255 - lut.append(ix) - return _lut(image, lut) - - -def colorize( - image: Image.Image, - black: str | tuple[int, ...], - white: str | tuple[int, ...], - mid: str | int | tuple[int, ...] | None = None, - blackpoint: int = 0, - whitepoint: int = 255, - midpoint: int = 127, -) -> Image.Image: - """ - Colorize grayscale image. - This function calculates a color wedge which maps all black pixels in - the source image to the first color and all white pixels to the - second color. If ``mid`` is specified, it uses three-color mapping. - The ``black`` and ``white`` arguments should be RGB tuples or color names; - optionally you can use three-color mapping by also specifying ``mid``. - Mapping positions for any of the colors can be specified - (e.g. ``blackpoint``), where these parameters are the integer - value corresponding to where the corresponding color should be mapped. - These parameters must have logical order, such that - ``blackpoint <= midpoint <= whitepoint`` (if ``mid`` is specified). - - :param image: The image to colorize. - :param black: The color to use for black input pixels. - :param white: The color to use for white input pixels. - :param mid: The color to use for midtone input pixels. - :param blackpoint: an int value [0, 255] for the black mapping. - :param whitepoint: an int value [0, 255] for the white mapping. - :param midpoint: an int value [0, 255] for the midtone mapping. - :return: An image. - """ - - # Initial asserts - assert image.mode == "L" - if mid is None: - assert 0 <= blackpoint <= whitepoint <= 255 - else: - assert 0 <= blackpoint <= midpoint <= whitepoint <= 255 - - # Define colors from arguments - rgb_black = cast(Sequence[int], _color(black, "RGB")) - rgb_white = cast(Sequence[int], _color(white, "RGB")) - rgb_mid = cast(Sequence[int], _color(mid, "RGB")) if mid is not None else None - - # Empty lists for the mapping - red = [] - green = [] - blue = [] - - # Create the low-end values - for i in range(blackpoint): - red.append(rgb_black[0]) - green.append(rgb_black[1]) - blue.append(rgb_black[2]) - - # Create the mapping (2-color) - if rgb_mid is None: - range_map = range(whitepoint - blackpoint) - - for i in range_map: - red.append( - rgb_black[0] + i * (rgb_white[0] - rgb_black[0]) // len(range_map) - ) - green.append( - rgb_black[1] + i * (rgb_white[1] - rgb_black[1]) // len(range_map) - ) - blue.append( - rgb_black[2] + i * (rgb_white[2] - rgb_black[2]) // len(range_map) - ) - - # Create the mapping (3-color) - else: - range_map1 = range(midpoint - blackpoint) - range_map2 = range(whitepoint - midpoint) - - for i in range_map1: - red.append( - rgb_black[0] + i * (rgb_mid[0] - rgb_black[0]) // len(range_map1) - ) - green.append( - rgb_black[1] + i * (rgb_mid[1] - rgb_black[1]) // len(range_map1) - ) - blue.append( - rgb_black[2] + i * (rgb_mid[2] - rgb_black[2]) // len(range_map1) - ) - for i in range_map2: - red.append(rgb_mid[0] + i * (rgb_white[0] - rgb_mid[0]) // len(range_map2)) - green.append( - rgb_mid[1] + i * (rgb_white[1] - rgb_mid[1]) // len(range_map2) - ) - blue.append(rgb_mid[2] + i * (rgb_white[2] - rgb_mid[2]) // len(range_map2)) - - # Create the high-end values - for i in range(256 - whitepoint): - red.append(rgb_white[0]) - green.append(rgb_white[1]) - blue.append(rgb_white[2]) - - # Return converted image - image = image.convert("RGB") - return _lut(image, red + green + blue) - - -def contain( - image: Image.Image, size: tuple[int, int], method: int = Image.Resampling.BICUBIC -) -> Image.Image: - """ - Returns a resized version of the image, set to the maximum width and height - within the requested size, while maintaining the original aspect ratio. - - :param image: The image to resize. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: Resampling method to use. Default is - :py:attr:`~PIL.Image.Resampling.BICUBIC`. - See :ref:`concept-filters`. - :return: An image. - """ - - im_ratio = image.width / image.height - dest_ratio = size[0] / size[1] - - if im_ratio != dest_ratio: - if im_ratio > dest_ratio: - new_height = round(image.height / image.width * size[0]) - if new_height != size[1]: - size = (size[0], new_height) - else: - new_width = round(image.width / image.height * size[1]) - if new_width != size[0]: - size = (new_width, size[1]) - return image.resize(size, resample=method) - - -def cover( - image: Image.Image, size: tuple[int, int], method: int = Image.Resampling.BICUBIC -) -> Image.Image: - """ - Returns a resized version of the image, so that the requested size is - covered, while maintaining the original aspect ratio. - - :param image: The image to resize. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: Resampling method to use. Default is - :py:attr:`~PIL.Image.Resampling.BICUBIC`. - See :ref:`concept-filters`. - :return: An image. - """ - - im_ratio = image.width / image.height - dest_ratio = size[0] / size[1] - - if im_ratio != dest_ratio: - if im_ratio < dest_ratio: - new_height = round(image.height / image.width * size[0]) - if new_height != size[1]: - size = (size[0], new_height) - else: - new_width = round(image.width / image.height * size[1]) - if new_width != size[0]: - size = (new_width, size[1]) - return image.resize(size, resample=method) - - -def pad( - image: Image.Image, - size: tuple[int, int], - method: int = Image.Resampling.BICUBIC, - color: str | int | tuple[int, ...] | None = None, - centering: tuple[float, float] = (0.5, 0.5), -) -> Image.Image: - """ - Returns a resized and padded version of the image, expanded to fill the - requested aspect ratio and size. - - :param image: The image to resize and crop. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: Resampling method to use. Default is - :py:attr:`~PIL.Image.Resampling.BICUBIC`. - See :ref:`concept-filters`. - :param color: The background color of the padded image. - :param centering: Control the position of the original image within the - padded version. - - (0.5, 0.5) will keep the image centered - (0, 0) will keep the image aligned to the top left - (1, 1) will keep the image aligned to the bottom - right - :return: An image. - """ - - resized = contain(image, size, method) - if resized.size == size: - out = resized - else: - out = Image.new(image.mode, size, color) - if resized.palette: - palette = resized.getpalette() - if palette is not None: - out.putpalette(palette) - if resized.width != size[0]: - x = round((size[0] - resized.width) * max(0, min(centering[0], 1))) - out.paste(resized, (x, 0)) - else: - y = round((size[1] - resized.height) * max(0, min(centering[1], 1))) - out.paste(resized, (0, y)) - return out - - -def crop(image: Image.Image, border: int = 0) -> Image.Image: - """ - Remove border from image. The same amount of pixels are removed - from all four sides. This function works on all image modes. - - .. seealso:: :py:meth:`~PIL.Image.Image.crop` - - :param image: The image to crop. - :param border: The number of pixels to remove. - :return: An image. - """ - left, top, right, bottom = _border(border) - return image.crop((left, top, image.size[0] - right, image.size[1] - bottom)) - - -def scale( - image: Image.Image, factor: float, resample: int = Image.Resampling.BICUBIC -) -> Image.Image: - """ - Returns a rescaled image by a specific factor given in parameter. - A factor greater than 1 expands the image, between 0 and 1 contracts the - image. - - :param image: The image to rescale. - :param factor: The expansion factor, as a float. - :param resample: Resampling method to use. Default is - :py:attr:`~PIL.Image.Resampling.BICUBIC`. - See :ref:`concept-filters`. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - if factor == 1: - return image.copy() - elif factor <= 0: - msg = "the factor must be greater than 0" - raise ValueError(msg) - else: - size = (round(factor * image.width), round(factor * image.height)) - return image.resize(size, resample) - - -class SupportsGetMesh(Protocol): - """ - An object that supports the ``getmesh`` method, taking an image as an - argument, and returning a list of tuples. Each tuple contains two tuples, - the source box as a tuple of 4 integers, and a tuple of 8 integers for the - final quadrilateral, in order of top left, bottom left, bottom right, top - right. - """ - - def getmesh( - self, image: Image.Image - ) -> list[ - tuple[tuple[int, int, int, int], tuple[int, int, int, int, int, int, int, int]] - ]: ... - - -def deform( - image: Image.Image, - deformer: SupportsGetMesh, - resample: int = Image.Resampling.BILINEAR, -) -> Image.Image: - """ - Deform the image. - - :param image: The image to deform. - :param deformer: A deformer object. Any object that implements a - ``getmesh`` method can be used. - :param resample: An optional resampling filter. Same values possible as - in the PIL.Image.transform function. - :return: An image. - """ - return image.transform( - image.size, Image.Transform.MESH, deformer.getmesh(image), resample - ) - - -def equalize(image: Image.Image, mask: Image.Image | None = None) -> Image.Image: - """ - Equalize the image histogram. This function applies a non-linear - mapping to the input image, in order to create a uniform - distribution of grayscale values in the output image. - - :param image: The image to equalize. - :param mask: An optional mask. If given, only the pixels selected by - the mask are included in the analysis. - :return: An image. - """ - if image.mode == "P": - image = image.convert("RGB") - h = image.histogram(mask) - lut = [] - for b in range(0, len(h), 256): - histo = [_f for _f in h[b : b + 256] if _f] - if len(histo) <= 1: - lut.extend(list(range(256))) - else: - step = (functools.reduce(operator.add, histo) - histo[-1]) // 255 - if not step: - lut.extend(list(range(256))) - else: - n = step // 2 - for i in range(256): - lut.append(n // step) - n = n + h[i + b] - return _lut(image, lut) - - -def expand( - image: Image.Image, - border: int | tuple[int, ...] = 0, - fill: str | int | tuple[int, ...] = 0, -) -> Image.Image: - """ - Add border to the image - - :param image: The image to expand. - :param border: Border width, in pixels. - :param fill: Pixel fill value (a color value). Default is 0 (black). - :return: An image. - """ - left, top, right, bottom = _border(border) - width = left + image.size[0] + right - height = top + image.size[1] + bottom - color = _color(fill, image.mode) - if image.palette: - palette = ImagePalette.ImagePalette(palette=image.getpalette()) - if isinstance(color, tuple) and (len(color) == 3 or len(color) == 4): - color = palette.getcolor(color) - else: - palette = None - out = Image.new(image.mode, (width, height), color) - if palette: - out.putpalette(palette.palette) - out.paste(image, (left, top)) - return out - - -def fit( - image: Image.Image, - size: tuple[int, int], - method: int = Image.Resampling.BICUBIC, - bleed: float = 0.0, - centering: tuple[float, float] = (0.5, 0.5), -) -> Image.Image: - """ - Returns a resized and cropped version of the image, cropped to the - requested aspect ratio and size. - - This function was contributed by Kevin Cazabon. - - :param image: The image to resize and crop. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: Resampling method to use. Default is - :py:attr:`~PIL.Image.Resampling.BICUBIC`. - See :ref:`concept-filters`. - :param bleed: Remove a border around the outside of the image from all - four edges. The value is a decimal percentage (use 0.01 for - one percent). The default value is 0 (no border). - Cannot be greater than or equal to 0.5. - :param centering: Control the cropping position. Use (0.5, 0.5) for - center cropping (e.g. if cropping the width, take 50% off - of the left side, and therefore 50% off the right side). - (0.0, 0.0) will crop from the top left corner (i.e. if - cropping the width, take all of the crop off of the right - side, and if cropping the height, take all of it off the - bottom). (1.0, 0.0) will crop from the bottom left - corner, etc. (i.e. if cropping the width, take all of the - crop off the left side, and if cropping the height take - none from the top, and therefore all off the bottom). - :return: An image. - """ - - # by Kevin Cazabon, Feb 17/2000 - # kevin@cazabon.com - # https://www.cazabon.com - - centering_x, centering_y = centering - - if not 0.0 <= centering_x <= 1.0: - centering_x = 0.5 - if not 0.0 <= centering_y <= 1.0: - centering_y = 0.5 - - if not 0.0 <= bleed < 0.5: - bleed = 0.0 - - # calculate the area to use for resizing and cropping, subtracting - # the 'bleed' around the edges - - # number of pixels to trim off on Top and Bottom, Left and Right - bleed_pixels = (bleed * image.size[0], bleed * image.size[1]) - - live_size = ( - image.size[0] - bleed_pixels[0] * 2, - image.size[1] - bleed_pixels[1] * 2, - ) - - # calculate the aspect ratio of the live_size - live_size_ratio = live_size[0] / live_size[1] - - # calculate the aspect ratio of the output image - output_ratio = size[0] / size[1] - - # figure out if the sides or top/bottom will be cropped off - if live_size_ratio == output_ratio: - # live_size is already the needed ratio - crop_width = live_size[0] - crop_height = live_size[1] - elif live_size_ratio >= output_ratio: - # live_size is wider than what's needed, crop the sides - crop_width = output_ratio * live_size[1] - crop_height = live_size[1] - else: - # live_size is taller than what's needed, crop the top and bottom - crop_width = live_size[0] - crop_height = live_size[0] / output_ratio - - # make the crop - crop_left = bleed_pixels[0] + (live_size[0] - crop_width) * centering_x - crop_top = bleed_pixels[1] + (live_size[1] - crop_height) * centering_y - - crop = (crop_left, crop_top, crop_left + crop_width, crop_top + crop_height) - - # resize the image and return it - return image.resize(size, method, box=crop) - - -def flip(image: Image.Image) -> Image.Image: - """ - Flip the image vertically (top to bottom). - - :param image: The image to flip. - :return: An image. - """ - return image.transpose(Image.Transpose.FLIP_TOP_BOTTOM) - - -def grayscale(image: Image.Image) -> Image.Image: - """ - Convert the image to grayscale. - - :param image: The image to convert. - :return: An image. - """ - return image.convert("L") - - -def invert(image: Image.Image) -> Image.Image: - """ - Invert (negate) the image. - - :param image: The image to invert. - :return: An image. - """ - lut = list(range(255, -1, -1)) - return image.point(lut) if image.mode == "1" else _lut(image, lut) - - -def mirror(image: Image.Image) -> Image.Image: - """ - Flip image horizontally (left to right). - - :param image: The image to mirror. - :return: An image. - """ - return image.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - - -def posterize(image: Image.Image, bits: int) -> Image.Image: - """ - Reduce the number of bits for each color channel. - - :param image: The image to posterize. - :param bits: The number of bits to keep for each channel (1-8). - :return: An image. - """ - mask = ~(2 ** (8 - bits) - 1) - lut = [i & mask for i in range(256)] - return _lut(image, lut) - - -def solarize(image: Image.Image, threshold: int = 128) -> Image.Image: - """ - Invert all pixel values above a threshold. - - :param image: The image to solarize. - :param threshold: All pixels above this grayscale level are inverted. - :return: An image. - """ - lut = [] - for i in range(256): - if i < threshold: - lut.append(i) - else: - lut.append(255 - i) - return _lut(image, lut) - - -@overload -def exif_transpose(image: Image.Image, *, in_place: Literal[True]) -> None: ... - - -@overload -def exif_transpose( - image: Image.Image, *, in_place: Literal[False] = False -) -> Image.Image: ... - - -def exif_transpose(image: Image.Image, *, in_place: bool = False) -> Image.Image | None: - """ - If an image has an EXIF Orientation tag, other than 1, transpose the image - accordingly, and remove the orientation data. - - :param image: The image to transpose. - :param in_place: Boolean. Keyword-only argument. - If ``True``, the original image is modified in-place, and ``None`` is returned. - If ``False`` (default), a new :py:class:`~PIL.Image.Image` object is returned - with the transposition applied. If there is no transposition, a copy of the - image will be returned. - """ - image.load() - image_exif = image.getexif() - orientation = image_exif.get(ExifTags.Base.Orientation, 1) - method = { - 2: Image.Transpose.FLIP_LEFT_RIGHT, - 3: Image.Transpose.ROTATE_180, - 4: Image.Transpose.FLIP_TOP_BOTTOM, - 5: Image.Transpose.TRANSPOSE, - 6: Image.Transpose.ROTATE_270, - 7: Image.Transpose.TRANSVERSE, - 8: Image.Transpose.ROTATE_90, - }.get(orientation) - if method is not None: - if in_place: - image.im = image.im.transpose(method) - image._size = image.im.size - else: - transposed_image = image.transpose(method) - exif_image = image if in_place else transposed_image - - exif = exif_image.getexif() - if ExifTags.Base.Orientation in exif: - del exif[ExifTags.Base.Orientation] - if "exif" in exif_image.info: - exif_image.info["exif"] = exif.tobytes() - elif "Raw profile type exif" in exif_image.info: - exif_image.info["Raw profile type exif"] = exif.tobytes().hex() - for key in ("XML:com.adobe.xmp", "xmp"): - if key in exif_image.info: - for pattern in ( - r'tiff:Orientation="([0-9])"', - r"([0-9])", - ): - value = exif_image.info[key] - if isinstance(value, str): - value = re.sub(pattern, "", value) - elif isinstance(value, tuple): - value = tuple( - re.sub(pattern.encode(), b"", v) for v in value - ) - else: - value = re.sub(pattern.encode(), b"", value) - exif_image.info[key] = value - if not in_place: - return transposed_image - elif not in_place: - return image.copy() - return None diff --git a/myenv/lib/python3.12/site-packages/PIL/ImagePalette.py b/myenv/lib/python3.12/site-packages/PIL/ImagePalette.py deleted file mode 100644 index 1036971..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImagePalette.py +++ /dev/null @@ -1,286 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# image palette object -# -# History: -# 1996-03-11 fl Rewritten. -# 1997-01-03 fl Up and running. -# 1997-08-23 fl Added load hack -# 2001-04-16 fl Fixed randint shadow bug in random() -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import array -from collections.abc import Sequence -from typing import IO - -from . import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import Image - - -class ImagePalette: - """ - Color palette for palette mapped images - - :param mode: The mode to use for the palette. See: - :ref:`concept-modes`. Defaults to "RGB" - :param palette: An optional palette. If given, it must be a bytearray, - an array or a list of ints between 0-255. The list must consist of - all channels for one color followed by the next color (e.g. RGBRGBRGB). - Defaults to an empty palette. - """ - - def __init__( - self, - mode: str = "RGB", - palette: Sequence[int] | bytes | bytearray | None = None, - ) -> None: - self.mode = mode - self.rawmode: str | None = None # if set, palette contains raw data - self.palette = palette or bytearray() - self.dirty: int | None = None - - @property - def palette(self) -> Sequence[int] | bytes | bytearray: - return self._palette - - @palette.setter - def palette(self, palette: Sequence[int] | bytes | bytearray) -> None: - self._colors: dict[tuple[int, ...], int] | None = None - self._palette = palette - - @property - def colors(self) -> dict[tuple[int, ...], int]: - if self._colors is None: - mode_len = len(self.mode) - self._colors = {} - for i in range(0, len(self.palette), mode_len): - color = tuple(self.palette[i : i + mode_len]) - if color in self._colors: - continue - self._colors[color] = i // mode_len - return self._colors - - @colors.setter - def colors(self, colors: dict[tuple[int, ...], int]) -> None: - self._colors = colors - - def copy(self) -> ImagePalette: - new = ImagePalette() - - new.mode = self.mode - new.rawmode = self.rawmode - if self.palette is not None: - new.palette = self.palette[:] - new.dirty = self.dirty - - return new - - def getdata(self) -> tuple[str, Sequence[int] | bytes | bytearray]: - """ - Get palette contents in format suitable for the low-level - ``im.putpalette`` primitive. - - .. warning:: This method is experimental. - """ - if self.rawmode: - return self.rawmode, self.palette - return self.mode, self.tobytes() - - def tobytes(self) -> bytes: - """Convert palette to bytes. - - .. warning:: This method is experimental. - """ - if self.rawmode: - msg = "palette contains raw palette data" - raise ValueError(msg) - if isinstance(self.palette, bytes): - return self.palette - arr = array.array("B", self.palette) - return arr.tobytes() - - # Declare tostring as an alias for tobytes - tostring = tobytes - - def _new_color_index( - self, image: Image.Image | None = None, e: Exception | None = None - ) -> int: - if not isinstance(self.palette, bytearray): - self._palette = bytearray(self.palette) - index = len(self.palette) // 3 - special_colors: tuple[int | tuple[int, ...] | None, ...] = () - if image: - special_colors = ( - image.info.get("background"), - image.info.get("transparency"), - ) - while index in special_colors: - index += 1 - if index >= 256: - if image: - # Search for an unused index - for i, count in reversed(list(enumerate(image.histogram()))): - if count == 0 and i not in special_colors: - index = i - break - if index >= 256: - msg = "cannot allocate more than 256 colors" - raise ValueError(msg) from e - return index - - def getcolor( - self, - color: tuple[int, ...], - image: Image.Image | None = None, - ) -> int: - """Given an rgb tuple, allocate palette entry. - - .. warning:: This method is experimental. - """ - if self.rawmode: - msg = "palette contains raw palette data" - raise ValueError(msg) - if isinstance(color, tuple): - if self.mode == "RGB": - if len(color) == 4: - if color[3] != 255: - msg = "cannot add non-opaque RGBA color to RGB palette" - raise ValueError(msg) - color = color[:3] - elif self.mode == "RGBA": - if len(color) == 3: - color += (255,) - try: - return self.colors[color] - except KeyError as e: - # allocate new color slot - index = self._new_color_index(image, e) - assert isinstance(self._palette, bytearray) - self.colors[color] = index - if index * 3 < len(self.palette): - self._palette = ( - self._palette[: index * 3] - + bytes(color) - + self._palette[index * 3 + 3 :] - ) - else: - self._palette += bytes(color) - self.dirty = 1 - return index - else: - msg = f"unknown color specifier: {repr(color)}" # type: ignore[unreachable] - raise ValueError(msg) - - def save(self, fp: str | IO[str]) -> None: - """Save palette to text file. - - .. warning:: This method is experimental. - """ - if self.rawmode: - msg = "palette contains raw palette data" - raise ValueError(msg) - if isinstance(fp, str): - fp = open(fp, "w") - fp.write("# Palette\n") - fp.write(f"# Mode: {self.mode}\n") - for i in range(256): - fp.write(f"{i}") - for j in range(i * len(self.mode), (i + 1) * len(self.mode)): - try: - fp.write(f" {self.palette[j]}") - except IndexError: - fp.write(" 0") - fp.write("\n") - fp.close() - - -# -------------------------------------------------------------------- -# Internal - - -def raw(rawmode: str, data: Sequence[int] | bytes | bytearray) -> ImagePalette: - palette = ImagePalette() - palette.rawmode = rawmode - palette.palette = data - palette.dirty = 1 - return palette - - -# -------------------------------------------------------------------- -# Factories - - -def make_linear_lut(black: int, white: float) -> list[int]: - if black == 0: - return [int(white * i // 255) for i in range(256)] - - msg = "unavailable when black is non-zero" - raise NotImplementedError(msg) # FIXME - - -def make_gamma_lut(exp: float) -> list[int]: - return [int(((i / 255.0) ** exp) * 255.0 + 0.5) for i in range(256)] - - -def negative(mode: str = "RGB") -> ImagePalette: - palette = list(range(256 * len(mode))) - palette.reverse() - return ImagePalette(mode, [i // len(mode) for i in palette]) - - -def random(mode: str = "RGB") -> ImagePalette: - from random import randint - - palette = [randint(0, 255) for _ in range(256 * len(mode))] - return ImagePalette(mode, palette) - - -def sepia(white: str = "#fff0c0") -> ImagePalette: - bands = [make_linear_lut(0, band) for band in ImageColor.getrgb(white)] - return ImagePalette("RGB", [bands[i % 3][i // 3] for i in range(256 * 3)]) - - -def wedge(mode: str = "RGB") -> ImagePalette: - palette = list(range(256 * len(mode))) - return ImagePalette(mode, [i // len(mode) for i in palette]) - - -def load(filename: str) -> tuple[bytes, str]: - # FIXME: supports GIMP gradients only - - with open(filename, "rb") as fp: - paletteHandlers: list[ - type[ - GimpPaletteFile.GimpPaletteFile - | GimpGradientFile.GimpGradientFile - | PaletteFile.PaletteFile - ] - ] = [ - GimpPaletteFile.GimpPaletteFile, - GimpGradientFile.GimpGradientFile, - PaletteFile.PaletteFile, - ] - for paletteHandler in paletteHandlers: - try: - fp.seek(0) - lut = paletteHandler(fp).getpalette() - if lut: - break - except (SyntaxError, ValueError): - pass - else: - msg = "cannot load palette" - raise OSError(msg) - - return lut # data, rawmode diff --git a/myenv/lib/python3.12/site-packages/PIL/ImagePath.py b/myenv/lib/python3.12/site-packages/PIL/ImagePath.py deleted file mode 100644 index 77e8a60..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImagePath.py +++ /dev/null @@ -1,20 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# path interface -# -# History: -# 1996-11-04 fl Created -# 2002-04-14 fl Added documentation stub class -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image - -Path = Image.core.path diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageQt.py b/myenv/lib/python3.12/site-packages/PIL/ImageQt.py deleted file mode 100644 index df7a57b..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageQt.py +++ /dev/null @@ -1,220 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a simple Qt image interface. -# -# history: -# 2006-06-03 fl: created -# 2006-06-04 fl: inherit from QImage instead of wrapping it -# 2006-06-05 fl: removed toimage helper; move string support to ImageQt -# 2013-11-13 fl: add support for Qt5 (aurelien.ballier@cyclonit.com) -# -# Copyright (c) 2006 by Secret Labs AB -# Copyright (c) 2006 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import sys -from io import BytesIO -from typing import Any, Callable, Union - -from . import Image -from ._util import is_path - -TYPE_CHECKING = False -if TYPE_CHECKING: - import PyQt6 - import PySide6 - - from . import ImageFile - - QBuffer: type - QByteArray = Union[PyQt6.QtCore.QByteArray, PySide6.QtCore.QByteArray] - QIODevice = Union[PyQt6.QtCore.QIODevice, PySide6.QtCore.QIODevice] - QImage = Union[PyQt6.QtGui.QImage, PySide6.QtGui.QImage] - QPixmap = Union[PyQt6.QtGui.QPixmap, PySide6.QtGui.QPixmap] - -qt_version: str | None -qt_versions = [ - ["6", "PyQt6"], - ["side6", "PySide6"], -] - -# If a version has already been imported, attempt it first -qt_versions.sort(key=lambda version: version[1] in sys.modules, reverse=True) -for version, qt_module in qt_versions: - try: - qRgba: Callable[[int, int, int, int], int] - if qt_module == "PyQt6": - from PyQt6.QtCore import QBuffer, QIODevice - from PyQt6.QtGui import QImage, QPixmap, qRgba - elif qt_module == "PySide6": - from PySide6.QtCore import QBuffer, QIODevice - from PySide6.QtGui import QImage, QPixmap, qRgba - except (ImportError, RuntimeError): - continue - qt_is_installed = True - qt_version = version - break -else: - qt_is_installed = False - qt_version = None - - -def rgb(r: int, g: int, b: int, a: int = 255) -> int: - """(Internal) Turns an RGB color into a Qt compatible color integer.""" - # use qRgb to pack the colors, and then turn the resulting long - # into a negative integer with the same bitpattern. - return qRgba(r, g, b, a) & 0xFFFFFFFF - - -def fromqimage(im: QImage | QPixmap) -> ImageFile.ImageFile: - """ - :param im: QImage or PIL ImageQt object - """ - buffer = QBuffer() - qt_openmode: object - if qt_version == "6": - try: - qt_openmode = getattr(QIODevice, "OpenModeFlag") - except AttributeError: - qt_openmode = getattr(QIODevice, "OpenMode") - else: - qt_openmode = QIODevice - buffer.open(getattr(qt_openmode, "ReadWrite")) - # preserve alpha channel with png - # otherwise ppm is more friendly with Image.open - if im.hasAlphaChannel(): - im.save(buffer, "png") - else: - im.save(buffer, "ppm") - - b = BytesIO() - b.write(buffer.data()) - buffer.close() - b.seek(0) - - return Image.open(b) - - -def fromqpixmap(im: QPixmap) -> ImageFile.ImageFile: - return fromqimage(im) - - -def align8to32(bytes: bytes, width: int, mode: str) -> bytes: - """ - converts each scanline of data from 8 bit to 32 bit aligned - """ - - bits_per_pixel = {"1": 1, "L": 8, "P": 8, "I;16": 16}[mode] - - # calculate bytes per line and the extra padding if needed - bits_per_line = bits_per_pixel * width - full_bytes_per_line, remaining_bits_per_line = divmod(bits_per_line, 8) - bytes_per_line = full_bytes_per_line + (1 if remaining_bits_per_line else 0) - - extra_padding = -bytes_per_line % 4 - - # already 32 bit aligned by luck - if not extra_padding: - return bytes - - new_data = [ - bytes[i * bytes_per_line : (i + 1) * bytes_per_line] + b"\x00" * extra_padding - for i in range(len(bytes) // bytes_per_line) - ] - - return b"".join(new_data) - - -def _toqclass_helper(im: Image.Image | str | QByteArray) -> dict[str, Any]: - data = None - colortable = None - exclusive_fp = False - - # handle filename, if given instead of image name - if hasattr(im, "toUtf8"): - # FIXME - is this really the best way to do this? - im = str(im.toUtf8(), "utf-8") - if is_path(im): - im = Image.open(im) - exclusive_fp = True - assert isinstance(im, Image.Image) - - qt_format = getattr(QImage, "Format") if qt_version == "6" else QImage - if im.mode == "1": - format = getattr(qt_format, "Format_Mono") - elif im.mode == "L": - format = getattr(qt_format, "Format_Indexed8") - colortable = [rgb(i, i, i) for i in range(256)] - elif im.mode == "P": - format = getattr(qt_format, "Format_Indexed8") - palette = im.getpalette() - assert palette is not None - colortable = [rgb(*palette[i : i + 3]) for i in range(0, len(palette), 3)] - elif im.mode == "RGB": - # Populate the 4th channel with 255 - im = im.convert("RGBA") - - data = im.tobytes("raw", "BGRA") - format = getattr(qt_format, "Format_RGB32") - elif im.mode == "RGBA": - data = im.tobytes("raw", "BGRA") - format = getattr(qt_format, "Format_ARGB32") - elif im.mode == "I;16": - im = im.point(lambda i: i * 256) - - format = getattr(qt_format, "Format_Grayscale16") - else: - if exclusive_fp: - im.close() - msg = f"unsupported image mode {repr(im.mode)}" - raise ValueError(msg) - - size = im.size - __data = data or align8to32(im.tobytes(), size[0], im.mode) - if exclusive_fp: - im.close() - return {"data": __data, "size": size, "format": format, "colortable": colortable} - - -if qt_is_installed: - - class ImageQt(QImage): # type: ignore[misc] - def __init__(self, im: Image.Image | str | QByteArray) -> None: - """ - An PIL image wrapper for Qt. This is a subclass of PyQt's QImage - class. - - :param im: A PIL Image object, or a file name (given either as - Python string or a PyQt string object). - """ - im_data = _toqclass_helper(im) - # must keep a reference, or Qt will crash! - # All QImage constructors that take data operate on an existing - # buffer, so this buffer has to hang on for the life of the image. - # Fixes https://github.com/python-pillow/Pillow/issues/1370 - self.__data = im_data["data"] - super().__init__( - self.__data, - im_data["size"][0], - im_data["size"][1], - im_data["format"], - ) - if im_data["colortable"]: - self.setColorTable(im_data["colortable"]) - - -def toqimage(im: Image.Image | str | QByteArray) -> ImageQt: - return ImageQt(im) - - -def toqpixmap(im: Image.Image | str | QByteArray) -> QPixmap: - qimage = toqimage(im) - pixmap = getattr(QPixmap, "fromImage")(qimage) - if qt_version == "6": - pixmap.detach() - return pixmap diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageSequence.py b/myenv/lib/python3.12/site-packages/PIL/ImageSequence.py deleted file mode 100644 index a6fc340..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageSequence.py +++ /dev/null @@ -1,86 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# sequence support classes -# -# history: -# 1997-02-20 fl Created -# -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1997 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -## -from __future__ import annotations - -from typing import Callable - -from . import Image - - -class Iterator: - """ - This class implements an iterator object that can be used to loop - over an image sequence. - - You can use the ``[]`` operator to access elements by index. This operator - will raise an :py:exc:`IndexError` if you try to access a nonexistent - frame. - - :param im: An image object. - """ - - def __init__(self, im: Image.Image) -> None: - if not hasattr(im, "seek"): - msg = "im must have seek method" - raise AttributeError(msg) - self.im = im - self.position = getattr(self.im, "_min_frame", 0) - - def __getitem__(self, ix: int) -> Image.Image: - try: - self.im.seek(ix) - return self.im - except EOFError as e: - msg = "end of sequence" - raise IndexError(msg) from e - - def __iter__(self) -> Iterator: - return self - - def __next__(self) -> Image.Image: - try: - self.im.seek(self.position) - self.position += 1 - return self.im - except EOFError as e: - msg = "end of sequence" - raise StopIteration(msg) from e - - -def all_frames( - im: Image.Image | list[Image.Image], - func: Callable[[Image.Image], Image.Image] | None = None, -) -> list[Image.Image]: - """ - Applies a given function to all frames in an image or a list of images. - The frames are returned as a list of separate images. - - :param im: An image, or a list of images. - :param func: The function to apply to all of the image frames. - :returns: A list of images. - """ - if not isinstance(im, list): - im = [im] - - ims = [] - for imSequence in im: - current = imSequence.tell() - - ims += [im_frame.copy() for im_frame in Iterator(imSequence)] - - imSequence.seek(current) - return [func(im) for im in ims] if func else ims diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageShow.py b/myenv/lib/python3.12/site-packages/PIL/ImageShow.py deleted file mode 100644 index 7705608..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageShow.py +++ /dev/null @@ -1,362 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# im.show() drivers -# -# History: -# 2008-04-06 fl Created -# -# Copyright (c) Secret Labs AB 2008. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import abc -import os -import shutil -import subprocess -import sys -from shlex import quote -from typing import Any - -from . import Image - -_viewers = [] - - -def register(viewer: type[Viewer] | Viewer, order: int = 1) -> None: - """ - The :py:func:`register` function is used to register additional viewers:: - - from PIL import ImageShow - ImageShow.register(MyViewer()) # MyViewer will be used as a last resort - ImageShow.register(MySecondViewer(), 0) # MySecondViewer will be prioritised - ImageShow.register(ImageShow.XVViewer(), 0) # XVViewer will be prioritised - - :param viewer: The viewer to be registered. - :param order: - Zero or a negative integer to prepend this viewer to the list, - a positive integer to append it. - """ - if isinstance(viewer, type) and issubclass(viewer, Viewer): - viewer = viewer() - if order > 0: - _viewers.append(viewer) - else: - _viewers.insert(0, viewer) - - -def show(image: Image.Image, title: str | None = None, **options: Any) -> bool: - r""" - Display a given image. - - :param image: An image object. - :param title: Optional title. Not all viewers can display the title. - :param \**options: Additional viewer options. - :returns: ``True`` if a suitable viewer was found, ``False`` otherwise. - """ - for viewer in _viewers: - if viewer.show(image, title=title, **options): - return True - return False - - -class Viewer: - """Base class for viewers.""" - - # main api - - def show(self, image: Image.Image, **options: Any) -> int: - """ - The main function for displaying an image. - Converts the given image to the target format and displays it. - """ - - if not ( - image.mode in ("1", "RGBA") - or (self.format == "PNG" and image.mode in ("I;16", "LA")) - ): - base = Image.getmodebase(image.mode) - if image.mode != base: - image = image.convert(base) - - return self.show_image(image, **options) - - # hook methods - - format: str | None = None - """The format to convert the image into.""" - options: dict[str, Any] = {} - """Additional options used to convert the image.""" - - def get_format(self, image: Image.Image) -> str | None: - """Return format name, or ``None`` to save as PGM/PPM.""" - return self.format - - def get_command(self, file: str, **options: Any) -> str: - """ - Returns the command used to display the file. - Not implemented in the base class. - """ - msg = "unavailable in base viewer" - raise NotImplementedError(msg) - - def save_image(self, image: Image.Image) -> str: - """Save to temporary file and return filename.""" - return image._dump(format=self.get_format(image), **self.options) - - def show_image(self, image: Image.Image, **options: Any) -> int: - """Display the given image.""" - return self.show_file(self.save_image(image), **options) - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - os.system(self.get_command(path, **options)) # nosec - return 1 - - -# -------------------------------------------------------------------- - - -class WindowsViewer(Viewer): - """The default viewer on Windows is the default system application for PNG files.""" - - format = "PNG" - options = {"compress_level": 1, "save_all": True} - - def get_command(self, file: str, **options: Any) -> str: - return ( - f'start "Pillow" /WAIT "{file}" ' - "&& ping -n 4 127.0.0.1 >NUL " - f'&& del /f "{file}"' - ) - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - subprocess.Popen( - self.get_command(path, **options), - shell=True, - creationflags=getattr(subprocess, "CREATE_NO_WINDOW"), - ) # nosec - return 1 - - -if sys.platform == "win32": - register(WindowsViewer) - - -class MacViewer(Viewer): - """The default viewer on macOS using ``Preview.app``.""" - - format = "PNG" - options = {"compress_level": 1, "save_all": True} - - def get_command(self, file: str, **options: Any) -> str: - # on darwin open returns immediately resulting in the temp - # file removal while app is opening - command = "open -a Preview.app" - command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&" - return command - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - subprocess.call(["open", "-a", "Preview.app", path]) - - pyinstaller = getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS") - executable = (not pyinstaller and sys.executable) or shutil.which("python3") - if executable: - subprocess.Popen( - [ - executable, - "-c", - "import os, sys, time; time.sleep(20); os.remove(sys.argv[1])", - path, - ] - ) - return 1 - - -if sys.platform == "darwin": - register(MacViewer) - - -class UnixViewer(abc.ABC, Viewer): - format = "PNG" - options = {"compress_level": 1, "save_all": True} - - @abc.abstractmethod - def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: - pass - - def get_command(self, file: str, **options: Any) -> str: - command = self.get_command_ex(file, **options)[0] - return f"{command} {quote(file)}" - - -class XDGViewer(UnixViewer): - """ - The freedesktop.org ``xdg-open`` command. - """ - - def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: - command = executable = "xdg-open" - return command, executable - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - subprocess.Popen(["xdg-open", path]) - return 1 - - -class DisplayViewer(UnixViewer): - """ - The ImageMagick ``display`` command. - This viewer supports the ``title`` parameter. - """ - - def get_command_ex( - self, file: str, title: str | None = None, **options: Any - ) -> tuple[str, str]: - command = executable = "display" - if title: - command += f" -title {quote(title)}" - return command, executable - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - args = ["display"] - title = options.get("title") - if title: - args += ["-title", title] - args.append(path) - - subprocess.Popen(args) - return 1 - - -class GmDisplayViewer(UnixViewer): - """The GraphicsMagick ``gm display`` command.""" - - def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: - executable = "gm" - command = "gm display" - return command, executable - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - subprocess.Popen(["gm", "display", path]) - return 1 - - -class EogViewer(UnixViewer): - """The GNOME Image Viewer ``eog`` command.""" - - def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: - executable = "eog" - command = "eog -n" - return command, executable - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - subprocess.Popen(["eog", "-n", path]) - return 1 - - -class XVViewer(UnixViewer): - """ - The X Viewer ``xv`` command. - This viewer supports the ``title`` parameter. - """ - - def get_command_ex( - self, file: str, title: str | None = None, **options: Any - ) -> tuple[str, str]: - # note: xv is pretty outdated. most modern systems have - # imagemagick's display command instead. - command = executable = "xv" - if title: - command += f" -name {quote(title)}" - return command, executable - - def show_file(self, path: str, **options: Any) -> int: - """ - Display given file. - """ - if not os.path.exists(path): - raise FileNotFoundError - args = ["xv"] - title = options.get("title") - if title: - args += ["-name", title] - args.append(path) - - subprocess.Popen(args) - return 1 - - -if sys.platform not in ("win32", "darwin"): # unixoids - if shutil.which("xdg-open"): - register(XDGViewer) - if shutil.which("display"): - register(DisplayViewer) - if shutil.which("gm"): - register(GmDisplayViewer) - if shutil.which("eog"): - register(EogViewer) - if shutil.which("xv"): - register(XVViewer) - - -class IPythonViewer(Viewer): - """The viewer for IPython frontends.""" - - def show_image(self, image: Image.Image, **options: Any) -> int: - ipython_display(image) - return 1 - - -try: - from IPython.display import display as ipython_display -except ImportError: - pass -else: - register(IPythonViewer) - - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("Syntax: python3 ImageShow.py imagefile [title]") - sys.exit() - - with Image.open(sys.argv[1]) as im: - print(show(im, *sys.argv[2:])) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageStat.py b/myenv/lib/python3.12/site-packages/PIL/ImageStat.py deleted file mode 100644 index 8bc5045..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageStat.py +++ /dev/null @@ -1,160 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# global image statistics -# -# History: -# 1996-04-05 fl Created -# 1997-05-21 fl Added mask; added rms, var, stddev attributes -# 1997-08-05 fl Added median -# 1998-07-05 hk Fixed integer overflow error -# -# Notes: -# This class shows how to implement delayed evaluation of attributes. -# To get a certain value, simply access the corresponding attribute. -# The __getattr__ dispatcher takes care of the rest. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996-97. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import math -from functools import cached_property - -from . import Image - - -class Stat: - def __init__( - self, image_or_list: Image.Image | list[int], mask: Image.Image | None = None - ) -> None: - """ - Calculate statistics for the given image. If a mask is included, - only the regions covered by that mask are included in the - statistics. You can also pass in a previously calculated histogram. - - :param image: A PIL image, or a precalculated histogram. - - .. note:: - - For a PIL image, calculations rely on the - :py:meth:`~PIL.Image.Image.histogram` method. The pixel counts are - grouped into 256 bins, even if the image has more than 8 bits per - channel. So ``I`` and ``F`` mode images have a maximum ``mean``, - ``median`` and ``rms`` of 255, and cannot have an ``extrema`` maximum - of more than 255. - - :param mask: An optional mask. - """ - if isinstance(image_or_list, Image.Image): - self.h = image_or_list.histogram(mask) - elif isinstance(image_or_list, list): - self.h = image_or_list - else: - msg = "first argument must be image or list" # type: ignore[unreachable] - raise TypeError(msg) - self.bands = list(range(len(self.h) // 256)) - - @cached_property - def extrema(self) -> list[tuple[int, int]]: - """ - Min/max values for each band in the image. - - .. note:: - This relies on the :py:meth:`~PIL.Image.Image.histogram` method, and - simply returns the low and high bins used. This is correct for - images with 8 bits per channel, but fails for other modes such as - ``I`` or ``F``. Instead, use :py:meth:`~PIL.Image.Image.getextrema` to - return per-band extrema for the image. This is more correct and - efficient because, for non-8-bit modes, the histogram method uses - :py:meth:`~PIL.Image.Image.getextrema` to determine the bins used. - """ - - def minmax(histogram: list[int]) -> tuple[int, int]: - res_min, res_max = 255, 0 - for i in range(256): - if histogram[i]: - res_min = i - break - for i in range(255, -1, -1): - if histogram[i]: - res_max = i - break - return res_min, res_max - - return [minmax(self.h[i:]) for i in range(0, len(self.h), 256)] - - @cached_property - def count(self) -> list[int]: - """Total number of pixels for each band in the image.""" - return [sum(self.h[i : i + 256]) for i in range(0, len(self.h), 256)] - - @cached_property - def sum(self) -> list[float]: - """Sum of all pixels for each band in the image.""" - - v = [] - for i in range(0, len(self.h), 256): - layer_sum = 0.0 - for j in range(256): - layer_sum += j * self.h[i + j] - v.append(layer_sum) - return v - - @cached_property - def sum2(self) -> list[float]: - """Squared sum of all pixels for each band in the image.""" - - v = [] - for i in range(0, len(self.h), 256): - sum2 = 0.0 - for j in range(256): - sum2 += (j**2) * float(self.h[i + j]) - v.append(sum2) - return v - - @cached_property - def mean(self) -> list[float]: - """Average (arithmetic mean) pixel level for each band in the image.""" - return [self.sum[i] / self.count[i] for i in self.bands] - - @cached_property - def median(self) -> list[int]: - """Median pixel level for each band in the image.""" - - v = [] - for i in self.bands: - s = 0 - half = self.count[i] // 2 - b = i * 256 - for j in range(256): - s = s + self.h[b + j] - if s > half: - break - v.append(j) - return v - - @cached_property - def rms(self) -> list[float]: - """RMS (root-mean-square) for each band in the image.""" - return [math.sqrt(self.sum2[i] / self.count[i]) for i in self.bands] - - @cached_property - def var(self) -> list[float]: - """Variance for each band in the image.""" - return [ - (self.sum2[i] - (self.sum[i] ** 2.0) / self.count[i]) / self.count[i] - for i in self.bands - ] - - @cached_property - def stddev(self) -> list[float]: - """Standard deviation for each band in the image.""" - return [math.sqrt(self.var[i]) for i in self.bands] - - -Global = Stat # compatibility diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageTk.py b/myenv/lib/python3.12/site-packages/PIL/ImageTk.py deleted file mode 100644 index 3a4cb81..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageTk.py +++ /dev/null @@ -1,266 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a Tk display interface -# -# History: -# 96-04-08 fl Created -# 96-09-06 fl Added getimage method -# 96-11-01 fl Rewritten, removed image attribute and crop method -# 97-05-09 fl Use PyImagingPaste method instead of image type -# 97-05-12 fl Minor tweaks to match the IFUNC95 interface -# 97-05-17 fl Support the "pilbitmap" booster patch -# 97-06-05 fl Added file= and data= argument to image constructors -# 98-03-09 fl Added width and height methods to Image classes -# 98-07-02 fl Use default mode for "P" images without palette attribute -# 98-07-02 fl Explicitly destroy Tkinter image objects -# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch) -# 99-07-26 fl Automatically hook into Tkinter (if possible) -# 99-08-15 fl Hook uses _imagingtk instead of _imaging -# -# Copyright (c) 1997-1999 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import tkinter -from io import BytesIO -from typing import Any - -from . import Image, ImageFile - -TYPE_CHECKING = False -if TYPE_CHECKING: - from ._typing import CapsuleType - -# -------------------------------------------------------------------- -# Check for Tkinter interface hooks - - -def _get_image_from_kw(kw: dict[str, Any]) -> ImageFile.ImageFile | None: - source = None - if "file" in kw: - source = kw.pop("file") - elif "data" in kw: - source = BytesIO(kw.pop("data")) - if not source: - return None - return Image.open(source) - - -def _pyimagingtkcall( - command: str, photo: PhotoImage | tkinter.PhotoImage, ptr: CapsuleType -) -> None: - tk = photo.tk - try: - tk.call(command, photo, repr(ptr)) - except tkinter.TclError: - # activate Tkinter hook - # may raise an error if it cannot attach to Tkinter - from . import _imagingtk - - _imagingtk.tkinit(tk.interpaddr()) - tk.call(command, photo, repr(ptr)) - - -# -------------------------------------------------------------------- -# PhotoImage - - -class PhotoImage: - """ - A Tkinter-compatible photo image. This can be used - everywhere Tkinter expects an image object. If the image is an RGBA - image, pixels having alpha 0 are treated as transparent. - - The constructor takes either a PIL image, or a mode and a size. - Alternatively, you can use the ``file`` or ``data`` options to initialize - the photo image object. - - :param image: Either a PIL image, or a mode string. If a mode string is - used, a size must also be given. - :param size: If the first argument is a mode string, this defines the size - of the image. - :keyword file: A filename to load the image from (using - ``Image.open(file)``). - :keyword data: An 8-bit string containing image data (as loaded from an - image file). - """ - - def __init__( - self, - image: Image.Image | str | None = None, - size: tuple[int, int] | None = None, - **kw: Any, - ) -> None: - # Tk compatibility: file or data - if image is None: - image = _get_image_from_kw(kw) - - if image is None: - msg = "Image is required" - raise ValueError(msg) - elif isinstance(image, str): - mode = image - image = None - - if size is None: - msg = "If first argument is mode, size is required" - raise ValueError(msg) - else: - # got an image instead of a mode - mode = image.mode - if mode == "P": - # palette mapped data - image.apply_transparency() - image.load() - mode = image.palette.mode if image.palette else "RGB" - size = image.size - kw["width"], kw["height"] = size - - if mode not in ["1", "L", "RGB", "RGBA"]: - mode = Image.getmodebase(mode) - - self.__mode = mode - self.__size = size - self.__photo = tkinter.PhotoImage(**kw) - self.tk = self.__photo.tk - if image: - self.paste(image) - - def __del__(self) -> None: - try: - name = self.__photo.name - except AttributeError: - return - self.__photo.name = None - try: - self.__photo.tk.call("image", "delete", name) - except Exception: - pass # ignore internal errors - - def __str__(self) -> str: - """ - Get the Tkinter photo image identifier. This method is automatically - called by Tkinter whenever a PhotoImage object is passed to a Tkinter - method. - - :return: A Tkinter photo image identifier (a string). - """ - return str(self.__photo) - - def width(self) -> int: - """ - Get the width of the image. - - :return: The width, in pixels. - """ - return self.__size[0] - - def height(self) -> int: - """ - Get the height of the image. - - :return: The height, in pixels. - """ - return self.__size[1] - - def paste(self, im: Image.Image) -> None: - """ - Paste a PIL image into the photo image. Note that this can - be very slow if the photo image is displayed. - - :param im: A PIL image. The size must match the target region. If the - mode does not match, the image is converted to the mode of - the bitmap image. - """ - # convert to blittable - ptr = im.getim() - image = im.im - if not image.isblock() or im.mode != self.__mode: - block = Image.core.new_block(self.__mode, im.size) - image.convert2(block, image) # convert directly between buffers - ptr = block.ptr - - _pyimagingtkcall("PyImagingPhoto", self.__photo, ptr) - - -# -------------------------------------------------------------------- -# BitmapImage - - -class BitmapImage: - """ - A Tkinter-compatible bitmap image. This can be used everywhere Tkinter - expects an image object. - - The given image must have mode "1". Pixels having value 0 are treated as - transparent. Options, if any, are passed on to Tkinter. The most commonly - used option is ``foreground``, which is used to specify the color for the - non-transparent parts. See the Tkinter documentation for information on - how to specify colours. - - :param image: A PIL image. - """ - - def __init__(self, image: Image.Image | None = None, **kw: Any) -> None: - # Tk compatibility: file or data - if image is None: - image = _get_image_from_kw(kw) - - if image is None: - msg = "Image is required" - raise ValueError(msg) - self.__mode = image.mode - self.__size = image.size - - self.__photo = tkinter.BitmapImage(data=image.tobitmap(), **kw) - - def __del__(self) -> None: - try: - name = self.__photo.name - except AttributeError: - return - self.__photo.name = None - try: - self.__photo.tk.call("image", "delete", name) - except Exception: - pass # ignore internal errors - - def width(self) -> int: - """ - Get the width of the image. - - :return: The width, in pixels. - """ - return self.__size[0] - - def height(self) -> int: - """ - Get the height of the image. - - :return: The height, in pixels. - """ - return self.__size[1] - - def __str__(self) -> str: - """ - Get the Tkinter bitmap image identifier. This method is automatically - called by Tkinter whenever a BitmapImage object is passed to a Tkinter - method. - - :return: A Tkinter bitmap image identifier (a string). - """ - return str(self.__photo) - - -def getimage(photo: PhotoImage) -> Image.Image: - """Copies the contents of a PhotoImage to a PIL image memory.""" - im = Image.new("RGBA", (photo.width(), photo.height())) - - _pyimagingtkcall("PyImagingPhotoGet", photo, im.getim()) - - return im diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageTransform.py b/myenv/lib/python3.12/site-packages/PIL/ImageTransform.py deleted file mode 100644 index fb144ff..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageTransform.py +++ /dev/null @@ -1,136 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# transform wrappers -# -# History: -# 2002-04-08 fl Created -# -# Copyright (c) 2002 by Secret Labs AB -# Copyright (c) 2002 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from collections.abc import Sequence -from typing import Any - -from . import Image - - -class Transform(Image.ImageTransformHandler): - """Base class for other transforms defined in :py:mod:`~PIL.ImageTransform`.""" - - method: Image.Transform - - def __init__(self, data: Sequence[Any]) -> None: - self.data = data - - def getdata(self) -> tuple[Image.Transform, Sequence[int]]: - return self.method, self.data - - def transform( - self, - size: tuple[int, int], - image: Image.Image, - **options: Any, - ) -> Image.Image: - """Perform the transform. Called from :py:meth:`.Image.transform`.""" - # can be overridden - method, data = self.getdata() - return image.transform(size, method, data, **options) - - -class AffineTransform(Transform): - """ - Define an affine image transform. - - This function takes a 6-tuple (a, b, c, d, e, f) which contain the first - two rows from the inverse of an affine transform matrix. For each pixel - (x, y) in the output image, the new value is taken from a position (a x + - b y + c, d x + e y + f) in the input image, rounded to nearest pixel. - - This function can be used to scale, translate, rotate, and shear the - original image. - - See :py:meth:`.Image.transform` - - :param matrix: A 6-tuple (a, b, c, d, e, f) containing the first two rows - from the inverse of an affine transform matrix. - """ - - method = Image.Transform.AFFINE - - -class PerspectiveTransform(Transform): - """ - Define a perspective image transform. - - This function takes an 8-tuple (a, b, c, d, e, f, g, h). For each pixel - (x, y) in the output image, the new value is taken from a position - ((a x + b y + c) / (g x + h y + 1), (d x + e y + f) / (g x + h y + 1)) in - the input image, rounded to nearest pixel. - - This function can be used to scale, translate, rotate, and shear the - original image. - - See :py:meth:`.Image.transform` - - :param matrix: An 8-tuple (a, b, c, d, e, f, g, h). - """ - - method = Image.Transform.PERSPECTIVE - - -class ExtentTransform(Transform): - """ - Define a transform to extract a subregion from an image. - - Maps a rectangle (defined by two corners) from the image to a rectangle of - the given size. The resulting image will contain data sampled from between - the corners, such that (x0, y0) in the input image will end up at (0,0) in - the output image, and (x1, y1) at size. - - This method can be used to crop, stretch, shrink, or mirror an arbitrary - rectangle in the current image. It is slightly slower than crop, but about - as fast as a corresponding resize operation. - - See :py:meth:`.Image.transform` - - :param bbox: A 4-tuple (x0, y0, x1, y1) which specifies two points in the - input image's coordinate system. See :ref:`coordinate-system`. - """ - - method = Image.Transform.EXTENT - - -class QuadTransform(Transform): - """ - Define a quad image transform. - - Maps a quadrilateral (a region defined by four corners) from the image to a - rectangle of the given size. - - See :py:meth:`.Image.transform` - - :param xy: An 8-tuple (x0, y0, x1, y1, x2, y2, x3, y3) which contain the - upper left, lower left, lower right, and upper right corner of the - source quadrilateral. - """ - - method = Image.Transform.QUAD - - -class MeshTransform(Transform): - """ - Define a mesh image transform. A mesh transform consists of one or more - individual quad transforms. - - See :py:meth:`.Image.transform` - - :param data: A list of (bbox, quad) tuples. - """ - - method = Image.Transform.MESH diff --git a/myenv/lib/python3.12/site-packages/PIL/ImageWin.py b/myenv/lib/python3.12/site-packages/PIL/ImageWin.py deleted file mode 100644 index 98c28f2..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImageWin.py +++ /dev/null @@ -1,247 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a Windows DIB display interface -# -# History: -# 1996-05-20 fl Created -# 1996-09-20 fl Fixed subregion exposure -# 1997-09-21 fl Added draw primitive (for tzPrint) -# 2003-05-21 fl Added experimental Window/ImageWindow classes -# 2003-09-05 fl Added fromstring/tostring methods -# -# Copyright (c) Secret Labs AB 1997-2003. -# Copyright (c) Fredrik Lundh 1996-2003. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image - - -class HDC: - """ - Wraps an HDC integer. The resulting object can be passed to the - :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` - methods. - """ - - def __init__(self, dc: int) -> None: - self.dc = dc - - def __int__(self) -> int: - return self.dc - - -class HWND: - """ - Wraps an HWND integer. The resulting object can be passed to the - :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` - methods, instead of a DC. - """ - - def __init__(self, wnd: int) -> None: - self.wnd = wnd - - def __int__(self) -> int: - return self.wnd - - -class Dib: - """ - A Windows bitmap with the given mode and size. The mode can be one of "1", - "L", "P", or "RGB". - - If the display requires a palette, this constructor creates a suitable - palette and associates it with the image. For an "L" image, 128 graylevels - are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together - with 20 graylevels. - - To make sure that palettes work properly under Windows, you must call the - ``palette`` method upon certain events from Windows. - - :param image: Either a PIL image, or a mode string. If a mode string is - used, a size must also be given. The mode can be one of "1", - "L", "P", or "RGB". - :param size: If the first argument is a mode string, this - defines the size of the image. - """ - - def __init__( - self, image: Image.Image | str, size: tuple[int, int] | None = None - ) -> None: - if isinstance(image, str): - mode = image - image = "" - if size is None: - msg = "If first argument is mode, size is required" - raise ValueError(msg) - else: - mode = image.mode - size = image.size - if mode not in ["1", "L", "P", "RGB"]: - mode = Image.getmodebase(mode) - self.image = Image.core.display(mode, size) - self.mode = mode - self.size = size - if image: - assert not isinstance(image, str) - self.paste(image) - - def expose(self, handle: int | HDC | HWND) -> None: - """ - Copy the bitmap contents to a device context. - - :param handle: Device context (HDC), cast to a Python integer, or an - HDC or HWND instance. In PythonWin, you can use - ``CDC.GetHandleAttrib()`` to get a suitable handle. - """ - handle_int = int(handle) - if isinstance(handle, HWND): - dc = self.image.getdc(handle_int) - try: - self.image.expose(dc) - finally: - self.image.releasedc(handle_int, dc) - else: - self.image.expose(handle_int) - - def draw( - self, - handle: int | HDC | HWND, - dst: tuple[int, int, int, int], - src: tuple[int, int, int, int] | None = None, - ) -> None: - """ - Same as expose, but allows you to specify where to draw the image, and - what part of it to draw. - - The destination and source areas are given as 4-tuple rectangles. If - the source is omitted, the entire image is copied. If the source and - the destination have different sizes, the image is resized as - necessary. - """ - if src is None: - src = (0, 0) + self.size - handle_int = int(handle) - if isinstance(handle, HWND): - dc = self.image.getdc(handle_int) - try: - self.image.draw(dc, dst, src) - finally: - self.image.releasedc(handle_int, dc) - else: - self.image.draw(handle_int, dst, src) - - def query_palette(self, handle: int | HDC | HWND) -> int: - """ - Installs the palette associated with the image in the given device - context. - - This method should be called upon **QUERYNEWPALETTE** and - **PALETTECHANGED** events from Windows. If this method returns a - non-zero value, one or more display palette entries were changed, and - the image should be redrawn. - - :param handle: Device context (HDC), cast to a Python integer, or an - HDC or HWND instance. - :return: The number of entries that were changed (if one or more entries, - this indicates that the image should be redrawn). - """ - handle_int = int(handle) - if isinstance(handle, HWND): - handle = self.image.getdc(handle_int) - try: - result = self.image.query_palette(handle) - finally: - self.image.releasedc(handle, handle) - else: - result = self.image.query_palette(handle_int) - return result - - def paste( - self, im: Image.Image, box: tuple[int, int, int, int] | None = None - ) -> None: - """ - Paste a PIL image into the bitmap image. - - :param im: A PIL image. The size must match the target region. - If the mode does not match, the image is converted to the - mode of the bitmap image. - :param box: A 4-tuple defining the left, upper, right, and - lower pixel coordinate. See :ref:`coordinate-system`. If - None is given instead of a tuple, all of the image is - assumed. - """ - im.load() - if self.mode != im.mode: - im = im.convert(self.mode) - if box: - self.image.paste(im.im, box) - else: - self.image.paste(im.im) - - def frombytes(self, buffer: bytes) -> None: - """ - Load display memory contents from byte data. - - :param buffer: A buffer containing display data (usually - data returned from :py:func:`~PIL.ImageWin.Dib.tobytes`) - """ - self.image.frombytes(buffer) - - def tobytes(self) -> bytes: - """ - Copy display memory contents to bytes object. - - :return: A bytes object containing display data. - """ - return self.image.tobytes() - - -class Window: - """Create a Window with the given title size.""" - - def __init__( - self, title: str = "PIL", width: int | None = None, height: int | None = None - ) -> None: - self.hwnd = Image.core.createwindow( - title, self.__dispatcher, width or 0, height or 0 - ) - - def __dispatcher(self, action: str, *args: int) -> None: - getattr(self, f"ui_handle_{action}")(*args) - - def ui_handle_clear(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: - pass - - def ui_handle_damage(self, x0: int, y0: int, x1: int, y1: int) -> None: - pass - - def ui_handle_destroy(self) -> None: - pass - - def ui_handle_repair(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: - pass - - def ui_handle_resize(self, width: int, height: int) -> None: - pass - - def mainloop(self) -> None: - Image.core.eventloop() - - -class ImageWindow(Window): - """Create an image window which displays the given image.""" - - def __init__(self, image: Image.Image | Dib, title: str = "PIL") -> None: - if not isinstance(image, Dib): - image = Dib(image) - self.image = image - width, height = image.size - super().__init__(title, width=width, height=height) - - def ui_handle_repair(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: - self.image.draw(dc, (x0, y0, x1, y1)) diff --git a/myenv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py deleted file mode 100644 index c4eccee..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IM Tools support for PIL -# -# history: -# 1996-05-27 fl Created (read 8-bit images only) -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.2) -# -# Copyright (c) Secret Labs AB 1997-2001. -# Copyright (c) Fredrik Lundh 1996-2001. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import re - -from . import Image, ImageFile - -# -# -------------------------------------------------------------------- - -field = re.compile(rb"([a-z]*) ([^ \r\n]*)") - - -## -# Image plugin for IM Tools images. - - -class ImtImageFile(ImageFile.ImageFile): - format = "IMT" - format_description = "IM Tools" - - def _open(self) -> None: - # Quick rejection: if there's not a LF among the first - # 100 bytes, this is (probably) not a text header. - - assert self.fp is not None - - buffer = self.fp.read(100) - if b"\n" not in buffer: - msg = "not an IM file" - raise SyntaxError(msg) - - xsize = ysize = 0 - - while True: - if buffer: - s = buffer[:1] - buffer = buffer[1:] - else: - s = self.fp.read(1) - if not s: - break - - if s == b"\x0c": - # image data begins - self.tile = [ - ImageFile._Tile( - "raw", - (0, 0) + self.size, - self.fp.tell() - len(buffer), - self.mode, - ) - ] - - break - - else: - # read key/value pair - if b"\n" not in buffer: - buffer += self.fp.read(100) - lines = buffer.split(b"\n") - s += lines.pop(0) - buffer = b"\n".join(lines) - if len(s) == 1 or len(s) > 100: - break - if s[0] == ord(b"*"): - continue # comment - - m = field.match(s) - if not m: - break - k, v = m.group(1, 2) - if k == b"width": - xsize = int(v) - self._size = xsize, ysize - elif k == b"height": - ysize = int(v) - self._size = xsize, ysize - elif k == b"pixel" and v == b"n8": - self._mode = "L" - - -# -# -------------------------------------------------------------------- - -Image.register_open(ImtImageFile.format, ImtImageFile) - -# -# no extension registered (".im" is simply too common) diff --git a/myenv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py deleted file mode 100644 index fc024d6..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py +++ /dev/null @@ -1,250 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IPTC/NAA file handling -# -# history: -# 1995-10-01 fl Created -# 1998-03-09 fl Cleaned up and added to PIL -# 2002-06-18 fl Added getiptcinfo helper -# -# Copyright (c) Secret Labs AB 1997-2002. -# Copyright (c) Fredrik Lundh 1995. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from collections.abc import Sequence -from io import BytesIO -from typing import cast - -from . import Image, ImageFile -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._deprecate import deprecate - -COMPRESSION = {1: "raw", 5: "jpeg"} - - -def __getattr__(name: str) -> bytes: - if name == "PAD": - deprecate("IptcImagePlugin.PAD", 12) - return b"\0\0\0\0" - msg = f"module '{__name__}' has no attribute '{name}'" - raise AttributeError(msg) - - -# -# Helpers - - -def _i(c: bytes) -> int: - return i32((b"\0\0\0\0" + c)[-4:]) - - -def _i8(c: int | bytes) -> int: - return c if isinstance(c, int) else c[0] - - -def i(c: bytes) -> int: - """.. deprecated:: 10.2.0""" - deprecate("IptcImagePlugin.i", 12) - return _i(c) - - -def dump(c: Sequence[int | bytes]) -> None: - """.. deprecated:: 10.2.0""" - deprecate("IptcImagePlugin.dump", 12) - for i in c: - print(f"{_i8(i):02x}", end=" ") - print() - - -## -# Image plugin for IPTC/NAA datastreams. To read IPTC/NAA fields -# from TIFF and JPEG files, use the getiptcinfo function. - - -class IptcImageFile(ImageFile.ImageFile): - format = "IPTC" - format_description = "IPTC/NAA" - - def getint(self, key: tuple[int, int]) -> int: - return _i(self.info[key]) - - def field(self) -> tuple[tuple[int, int] | None, int]: - # - # get a IPTC field header - s = self.fp.read(5) - if not s.strip(b"\x00"): - return None, 0 - - tag = s[1], s[2] - - # syntax - if s[0] != 0x1C or tag[0] not in [1, 2, 3, 4, 5, 6, 7, 8, 9, 240]: - msg = "invalid IPTC/NAA file" - raise SyntaxError(msg) - - # field size - size = s[3] - if size > 132: - msg = "illegal field length in IPTC/NAA file" - raise OSError(msg) - elif size == 128: - size = 0 - elif size > 128: - size = _i(self.fp.read(size - 128)) - else: - size = i16(s, 3) - - return tag, size - - def _open(self) -> None: - # load descriptive fields - while True: - offset = self.fp.tell() - tag, size = self.field() - if not tag or tag == (8, 10): - break - if size: - tagdata = self.fp.read(size) - else: - tagdata = None - if tag in self.info: - if isinstance(self.info[tag], list): - self.info[tag].append(tagdata) - else: - self.info[tag] = [self.info[tag], tagdata] - else: - self.info[tag] = tagdata - - # mode - layers = self.info[(3, 60)][0] - component = self.info[(3, 60)][1] - if (3, 65) in self.info: - id = self.info[(3, 65)][0] - 1 - else: - id = 0 - if layers == 1 and not component: - self._mode = "L" - elif layers == 3 and component: - self._mode = "RGB"[id] - elif layers == 4 and component: - self._mode = "CMYK"[id] - - # size - self._size = self.getint((3, 20)), self.getint((3, 30)) - - # compression - try: - compression = COMPRESSION[self.getint((3, 120))] - except KeyError as e: - msg = "Unknown IPTC image compression" - raise OSError(msg) from e - - # tile - if tag == (8, 10): - self.tile = [ - ImageFile._Tile("iptc", (0, 0) + self.size, offset, compression) - ] - - def load(self) -> Image.core.PixelAccess | None: - if len(self.tile) != 1 or self.tile[0][0] != "iptc": - return ImageFile.ImageFile.load(self) - - offset, compression = self.tile[0][2:] - - self.fp.seek(offset) - - # Copy image data to temporary file - o = BytesIO() - if compression == "raw": - # To simplify access to the extracted file, - # prepend a PPM header - o.write(b"P5\n%d %d\n255\n" % self.size) - while True: - type, size = self.field() - if type != (8, 10): - break - while size > 0: - s = self.fp.read(min(size, 8192)) - if not s: - break - o.write(s) - size -= len(s) - - with Image.open(o) as _im: - _im.load() - self.im = _im.im - self.tile = [] - return Image.Image.load(self) - - -Image.register_open(IptcImageFile.format, IptcImageFile) - -Image.register_extension(IptcImageFile.format, ".iim") - - -def getiptcinfo( - im: ImageFile.ImageFile, -) -> dict[tuple[int, int], bytes | list[bytes]] | None: - """ - Get IPTC information from TIFF, JPEG, or IPTC file. - - :param im: An image containing IPTC data. - :returns: A dictionary containing IPTC information, or None if - no IPTC information block was found. - """ - from . import JpegImagePlugin, TiffImagePlugin - - data = None - - info: dict[tuple[int, int], bytes | list[bytes]] = {} - if isinstance(im, IptcImageFile): - # return info dictionary right away - for k, v in im.info.items(): - if isinstance(k, tuple): - info[k] = v - return info - - elif isinstance(im, JpegImagePlugin.JpegImageFile): - # extract the IPTC/NAA resource - photoshop = im.info.get("photoshop") - if photoshop: - data = photoshop.get(0x0404) - - elif isinstance(im, TiffImagePlugin.TiffImageFile): - # get raw data from the IPTC/NAA tag (PhotoShop tags the data - # as 4-byte integers, so we cannot use the get method...) - try: - data = im.tag_v2._tagdata[TiffImagePlugin.IPTC_NAA_CHUNK] - except KeyError: - pass - - if data is None: - return None # no properties - - # create an IptcImagePlugin object without initializing it - class FakeImage: - pass - - fake_im = FakeImage() - fake_im.__class__ = IptcImageFile # type: ignore[assignment] - iptc_im = cast(IptcImageFile, fake_im) - - # parse the IPTC information chunk - iptc_im.info = {} - iptc_im.fp = BytesIO(data) - - try: - iptc_im._open() - except (IndexError, KeyError): - pass # expected failure - - for k, v in iptc_im.info.items(): - if isinstance(k, tuple): - info[k] = v - return info diff --git a/myenv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py deleted file mode 100644 index e0f4eca..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py +++ /dev/null @@ -1,442 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# JPEG2000 file handling -# -# History: -# 2014-03-12 ajh Created -# 2021-06-30 rogermb Extract dpi information from the 'resc' header box -# -# Copyright (c) 2014 Coriolis Systems Limited -# Copyright (c) 2014 Alastair Houghton -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import os -import struct -from collections.abc import Callable -from typing import IO, cast - -from . import Image, ImageFile, ImagePalette, _binary - - -class BoxReader: - """ - A small helper class to read fields stored in JPEG2000 header boxes - and to easily step into and read sub-boxes. - """ - - def __init__(self, fp: IO[bytes], length: int = -1) -> None: - self.fp = fp - self.has_length = length >= 0 - self.length = length - self.remaining_in_box = -1 - - def _can_read(self, num_bytes: int) -> bool: - if self.has_length and self.fp.tell() + num_bytes > self.length: - # Outside box: ensure we don't read past the known file length - return False - if self.remaining_in_box >= 0: - # Inside box contents: ensure read does not go past box boundaries - return num_bytes <= self.remaining_in_box - else: - return True # No length known, just read - - def _read_bytes(self, num_bytes: int) -> bytes: - if not self._can_read(num_bytes): - msg = "Not enough data in header" - raise SyntaxError(msg) - - data = self.fp.read(num_bytes) - if len(data) < num_bytes: - msg = f"Expected to read {num_bytes} bytes but only got {len(data)}." - raise OSError(msg) - - if self.remaining_in_box > 0: - self.remaining_in_box -= num_bytes - return data - - def read_fields(self, field_format: str) -> tuple[int | bytes, ...]: - size = struct.calcsize(field_format) - data = self._read_bytes(size) - return struct.unpack(field_format, data) - - def read_boxes(self) -> BoxReader: - size = self.remaining_in_box - data = self._read_bytes(size) - return BoxReader(io.BytesIO(data), size) - - def has_next_box(self) -> bool: - if self.has_length: - return self.fp.tell() + self.remaining_in_box < self.length - else: - return True - - def next_box_type(self) -> bytes: - # Skip the rest of the box if it has not been read - if self.remaining_in_box > 0: - self.fp.seek(self.remaining_in_box, os.SEEK_CUR) - self.remaining_in_box = -1 - - # Read the length and type of the next box - lbox, tbox = cast(tuple[int, bytes], self.read_fields(">I4s")) - if lbox == 1: - lbox = cast(int, self.read_fields(">Q")[0]) - hlen = 16 - else: - hlen = 8 - - if lbox < hlen or not self._can_read(lbox - hlen): - msg = "Invalid header length" - raise SyntaxError(msg) - - self.remaining_in_box = lbox - hlen - return tbox - - -def _parse_codestream(fp: IO[bytes]) -> tuple[tuple[int, int], str]: - """Parse the JPEG 2000 codestream to extract the size and component - count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" - - hdr = fp.read(2) - lsiz = _binary.i16be(hdr) - siz = hdr + fp.read(lsiz - 2) - lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from( - ">HHIIIIIIIIH", siz - ) - - size = (xsiz - xosiz, ysiz - yosiz) - if csiz == 1: - ssiz = struct.unpack_from(">B", siz, 38) - if (ssiz[0] & 0x7F) + 1 > 8: - mode = "I;16" - else: - mode = "L" - elif csiz == 2: - mode = "LA" - elif csiz == 3: - mode = "RGB" - elif csiz == 4: - mode = "RGBA" - else: - msg = "unable to determine J2K image mode" - raise SyntaxError(msg) - - return size, mode - - -def _res_to_dpi(num: int, denom: int, exp: int) -> float | None: - """Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution, - calculated as (num / denom) * 10^exp and stored in dots per meter, - to floating-point dots per inch.""" - if denom == 0: - return None - return (254 * num * (10**exp)) / (10000 * denom) - - -def _parse_jp2_header( - fp: IO[bytes], -) -> tuple[ - tuple[int, int], - str, - str | None, - tuple[float, float] | None, - ImagePalette.ImagePalette | None, -]: - """Parse the JP2 header box to extract size, component count, - color space information, and optionally DPI information, - returning a (size, mode, mimetype, dpi) tuple.""" - - # Find the JP2 header box - reader = BoxReader(fp) - header = None - mimetype = None - while reader.has_next_box(): - tbox = reader.next_box_type() - - if tbox == b"jp2h": - header = reader.read_boxes() - break - elif tbox == b"ftyp": - if reader.read_fields(">4s")[0] == b"jpx ": - mimetype = "image/jpx" - assert header is not None - - size = None - mode = None - bpc = None - nc = None - dpi = None # 2-tuple of DPI info, or None - palette = None - - while header.has_next_box(): - tbox = header.next_box_type() - - if tbox == b"ihdr": - height, width, nc, bpc = header.read_fields(">IIHB") - assert isinstance(height, int) - assert isinstance(width, int) - assert isinstance(bpc, int) - size = (width, height) - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 2: - mode = "LA" - elif nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - elif tbox == b"colr" and nc == 4: - meth, _, _, enumcs = header.read_fields(">BBBI") - if meth == 1 and enumcs == 12: - mode = "CMYK" - elif tbox == b"pclr" and mode in ("L", "LA"): - ne, npc = header.read_fields(">HB") - assert isinstance(ne, int) - assert isinstance(npc, int) - max_bitdepth = 0 - for bitdepth in header.read_fields(">" + ("B" * npc)): - assert isinstance(bitdepth, int) - if bitdepth > max_bitdepth: - max_bitdepth = bitdepth - if max_bitdepth <= 8: - palette = ImagePalette.ImagePalette("RGBA" if npc == 4 else "RGB") - for i in range(ne): - color: list[int] = [] - for value in header.read_fields(">" + ("B" * npc)): - assert isinstance(value, int) - color.append(value) - palette.getcolor(tuple(color)) - mode = "P" if mode == "L" else "PA" - elif tbox == b"res ": - res = header.read_boxes() - while res.has_next_box(): - tres = res.next_box_type() - if tres == b"resc": - vrcn, vrcd, hrcn, hrcd, vrce, hrce = res.read_fields(">HHHHBB") - assert isinstance(vrcn, int) - assert isinstance(vrcd, int) - assert isinstance(hrcn, int) - assert isinstance(hrcd, int) - assert isinstance(vrce, int) - assert isinstance(hrce, int) - hres = _res_to_dpi(hrcn, hrcd, hrce) - vres = _res_to_dpi(vrcn, vrcd, vrce) - if hres is not None and vres is not None: - dpi = (hres, vres) - break - - if size is None or mode is None: - msg = "Malformed JP2 header" - raise SyntaxError(msg) - - return size, mode, mimetype, dpi, palette - - -## -# Image plugin for JPEG2000 images. - - -class Jpeg2KImageFile(ImageFile.ImageFile): - format = "JPEG2000" - format_description = "JPEG 2000 (ISO 15444)" - - def _open(self) -> None: - sig = self.fp.read(4) - if sig == b"\xff\x4f\xff\x51": - self.codec = "j2k" - self._size, self._mode = _parse_codestream(self.fp) - self._parse_comment() - else: - sig = sig + self.fp.read(8) - - if sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a": - self.codec = "jp2" - header = _parse_jp2_header(self.fp) - self._size, self._mode, self.custom_mimetype, dpi, self.palette = header - if dpi is not None: - self.info["dpi"] = dpi - if self.fp.read(12).endswith(b"jp2c\xff\x4f\xff\x51"): - hdr = self.fp.read(2) - length = _binary.i16be(hdr) - self.fp.seek(length - 2, os.SEEK_CUR) - self._parse_comment() - else: - msg = "not a JPEG 2000 file" - raise SyntaxError(msg) - - self._reduce = 0 - self.layers = 0 - - fd = -1 - length = -1 - - try: - fd = self.fp.fileno() - length = os.fstat(fd).st_size - except Exception: - fd = -1 - try: - pos = self.fp.tell() - self.fp.seek(0, io.SEEK_END) - length = self.fp.tell() - self.fp.seek(pos) - except Exception: - length = -1 - - self.tile = [ - ImageFile._Tile( - "jpeg2k", - (0, 0) + self.size, - 0, - (self.codec, self._reduce, self.layers, fd, length), - ) - ] - - def _parse_comment(self) -> None: - while True: - marker = self.fp.read(2) - if not marker: - break - typ = marker[1] - if typ in (0x90, 0xD9): - # Start of tile or end of codestream - break - hdr = self.fp.read(2) - length = _binary.i16be(hdr) - if typ == 0x64: - # Comment - self.info["comment"] = self.fp.read(length - 2)[2:] - break - else: - self.fp.seek(length - 2, os.SEEK_CUR) - - @property # type: ignore[override] - def reduce( - self, - ) -> ( - Callable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] - | int - ): - # https://github.com/python-pillow/Pillow/issues/4343 found that the - # new Image 'reduce' method was shadowed by this plugin's 'reduce' - # property. This attempts to allow for both scenarios - return self._reduce or super().reduce - - @reduce.setter - def reduce(self, value: int) -> None: - self._reduce = value - - def load(self) -> Image.core.PixelAccess | None: - if self.tile and self._reduce: - power = 1 << self._reduce - adjust = power >> 1 - self._size = ( - int((self.size[0] + adjust) / power), - int((self.size[1] + adjust) / power), - ) - - # Update the reduce and layers settings - t = self.tile[0] - assert isinstance(t[3], tuple) - t3 = (t[3][0], self._reduce, self.layers, t[3][3], t[3][4]) - self.tile = [ImageFile._Tile(t[0], (0, 0) + self.size, t[2], t3)] - - return ImageFile.ImageFile.load(self) - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith( - (b"\xff\x4f\xff\x51", b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a") - ) - - -# ------------------------------------------------------------ -# Save support - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - # Get the keyword arguments - info = im.encoderinfo - - if isinstance(filename, str): - filename = filename.encode() - if filename.endswith(b".j2k") or info.get("no_jp2", False): - kind = "j2k" - else: - kind = "jp2" - - offset = info.get("offset", None) - tile_offset = info.get("tile_offset", None) - tile_size = info.get("tile_size", None) - quality_mode = info.get("quality_mode", "rates") - quality_layers = info.get("quality_layers", None) - if quality_layers is not None and not ( - isinstance(quality_layers, (list, tuple)) - and all( - isinstance(quality_layer, (int, float)) for quality_layer in quality_layers - ) - ): - msg = "quality_layers must be a sequence of numbers" - raise ValueError(msg) - - num_resolutions = info.get("num_resolutions", 0) - cblk_size = info.get("codeblock_size", None) - precinct_size = info.get("precinct_size", None) - irreversible = info.get("irreversible", False) - progression = info.get("progression", "LRCP") - cinema_mode = info.get("cinema_mode", "no") - mct = info.get("mct", 0) - signed = info.get("signed", False) - comment = info.get("comment") - if isinstance(comment, str): - comment = comment.encode() - plt = info.get("plt", False) - - fd = -1 - if hasattr(fp, "fileno"): - try: - fd = fp.fileno() - except Exception: - fd = -1 - - im.encoderconfig = ( - offset, - tile_offset, - tile_size, - quality_mode, - quality_layers, - num_resolutions, - cblk_size, - precinct_size, - irreversible, - progression, - cinema_mode, - mct, - signed, - fd, - comment, - plt, - ) - - ImageFile._save(im, fp, [ImageFile._Tile("jpeg2k", (0, 0) + im.size, 0, kind)]) - - -# ------------------------------------------------------------ -# Registry stuff - - -Image.register_open(Jpeg2KImageFile.format, Jpeg2KImageFile, _accept) -Image.register_save(Jpeg2KImageFile.format, _save) - -Image.register_extensions( - Jpeg2KImageFile.format, [".jp2", ".j2k", ".jpc", ".jpf", ".jpx", ".j2c"] -) - -Image.register_mime(Jpeg2KImageFile.format, "image/jp2") diff --git a/myenv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py deleted file mode 100644 index defe9f7..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py +++ /dev/null @@ -1,902 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# JPEG (JFIF) file handling -# -# See "Digital Compression and Coding of Continuous-Tone Still Images, -# Part 1, Requirements and Guidelines" (CCITT T.81 / ISO 10918-1) -# -# History: -# 1995-09-09 fl Created -# 1995-09-13 fl Added full parser -# 1996-03-25 fl Added hack to use the IJG command line utilities -# 1996-05-05 fl Workaround Photoshop 2.5 CMYK polarity bug -# 1996-05-28 fl Added draft support, JFIF version (0.1) -# 1996-12-30 fl Added encoder options, added progression property (0.2) -# 1997-08-27 fl Save mode 1 images as BW (0.3) -# 1998-07-12 fl Added YCbCr to draft and save methods (0.4) -# 1998-10-19 fl Don't hang on files using 16-bit DQT's (0.4.1) -# 2001-04-16 fl Extract DPI settings from JFIF files (0.4.2) -# 2002-07-01 fl Skip pad bytes before markers; identify Exif files (0.4.3) -# 2003-04-25 fl Added experimental EXIF decoder (0.5) -# 2003-06-06 fl Added experimental EXIF GPSinfo decoder -# 2003-09-13 fl Extract COM markers -# 2009-09-06 fl Added icc_profile support (from Florian Hoech) -# 2009-03-06 fl Changed CMYK handling; always use Adobe polarity (0.6) -# 2009-03-08 fl Added subsampling support (from Justin Huff). -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import array -import io -import math -import os -import struct -import subprocess -import sys -import tempfile -import warnings -from typing import IO, Any - -from . import Image, ImageFile -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 -from ._binary import o16be as o16 -from ._deprecate import deprecate -from .JpegPresets import presets - -TYPE_CHECKING = False -if TYPE_CHECKING: - from .MpoImagePlugin import MpoImageFile - -# -# Parser - - -def Skip(self: JpegImageFile, marker: int) -> None: - n = i16(self.fp.read(2)) - 2 - ImageFile._safe_read(self.fp, n) - - -def APP(self: JpegImageFile, marker: int) -> None: - # - # Application marker. Store these in the APP dictionary. - # Also look for well-known application markers. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - - app = f"APP{marker & 15}" - - self.app[app] = s # compatibility - self.applist.append((app, s)) - - if marker == 0xFFE0 and s.startswith(b"JFIF"): - # extract JFIF information - self.info["jfif"] = version = i16(s, 5) # version - self.info["jfif_version"] = divmod(version, 256) - # extract JFIF properties - try: - jfif_unit = s[7] - jfif_density = i16(s, 8), i16(s, 10) - except Exception: - pass - else: - if jfif_unit == 1: - self.info["dpi"] = jfif_density - elif jfif_unit == 2: # cm - # 1 dpcm = 2.54 dpi - self.info["dpi"] = tuple(d * 2.54 for d in jfif_density) - self.info["jfif_unit"] = jfif_unit - self.info["jfif_density"] = jfif_density - elif marker == 0xFFE1 and s.startswith(b"Exif\0\0"): - # extract EXIF information - if "exif" in self.info: - self.info["exif"] += s[6:] - else: - self.info["exif"] = s - self._exif_offset = self.fp.tell() - n + 6 - elif marker == 0xFFE1 and s.startswith(b"http://ns.adobe.com/xap/1.0/\x00"): - self.info["xmp"] = s.split(b"\x00", 1)[1] - elif marker == 0xFFE2 and s.startswith(b"FPXR\0"): - # extract FlashPix information (incomplete) - self.info["flashpix"] = s # FIXME: value will change - elif marker == 0xFFE2 and s.startswith(b"ICC_PROFILE\0"): - # Since an ICC profile can be larger than the maximum size of - # a JPEG marker (64K), we need provisions to split it into - # multiple markers. The format defined by the ICC specifies - # one or more APP2 markers containing the following data: - # Identifying string ASCII "ICC_PROFILE\0" (12 bytes) - # Marker sequence number 1, 2, etc (1 byte) - # Number of markers Total of APP2's used (1 byte) - # Profile data (remainder of APP2 data) - # Decoders should use the marker sequence numbers to - # reassemble the profile, rather than assuming that the APP2 - # markers appear in the correct sequence. - self.icclist.append(s) - elif marker == 0xFFED and s.startswith(b"Photoshop 3.0\x00"): - # parse the image resource block - offset = 14 - photoshop = self.info.setdefault("photoshop", {}) - while s[offset : offset + 4] == b"8BIM": - try: - offset += 4 - # resource code - code = i16(s, offset) - offset += 2 - # resource name (usually empty) - name_len = s[offset] - # name = s[offset+1:offset+1+name_len] - offset += 1 + name_len - offset += offset & 1 # align - # resource data block - size = i32(s, offset) - offset += 4 - data = s[offset : offset + size] - if code == 0x03ED: # ResolutionInfo - photoshop[code] = { - "XResolution": i32(data, 0) / 65536, - "DisplayedUnitsX": i16(data, 4), - "YResolution": i32(data, 8) / 65536, - "DisplayedUnitsY": i16(data, 12), - } - else: - photoshop[code] = data - offset += size - offset += offset & 1 # align - except struct.error: - break # insufficient data - - elif marker == 0xFFEE and s.startswith(b"Adobe"): - self.info["adobe"] = i16(s, 5) - # extract Adobe custom properties - try: - adobe_transform = s[11] - except IndexError: - pass - else: - self.info["adobe_transform"] = adobe_transform - elif marker == 0xFFE2 and s.startswith(b"MPF\0"): - # extract MPO information - self.info["mp"] = s[4:] - # offset is current location minus buffer size - # plus constant header size - self.info["mpoffset"] = self.fp.tell() - n + 4 - - -def COM(self: JpegImageFile, marker: int) -> None: - # - # Comment marker. Store these in the APP dictionary. - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - - self.info["comment"] = s - self.app["COM"] = s # compatibility - self.applist.append(("COM", s)) - - -def SOF(self: JpegImageFile, marker: int) -> None: - # - # Start of frame marker. Defines the size and mode of the - # image. JPEG is colour blind, so we use some simple - # heuristics to map the number of layers to an appropriate - # mode. Note that this could be made a bit brighter, by - # looking for JFIF and Adobe APP markers. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - self._size = i16(s, 3), i16(s, 1) - - self.bits = s[0] - if self.bits != 8: - msg = f"cannot handle {self.bits}-bit layers" - raise SyntaxError(msg) - - self.layers = s[5] - if self.layers == 1: - self._mode = "L" - elif self.layers == 3: - self._mode = "RGB" - elif self.layers == 4: - self._mode = "CMYK" - else: - msg = f"cannot handle {self.layers}-layer images" - raise SyntaxError(msg) - - if marker in [0xFFC2, 0xFFC6, 0xFFCA, 0xFFCE]: - self.info["progressive"] = self.info["progression"] = 1 - - if self.icclist: - # fixup icc profile - self.icclist.sort() # sort by sequence number - if self.icclist[0][13] == len(self.icclist): - profile = [p[14:] for p in self.icclist] - icc_profile = b"".join(profile) - else: - icc_profile = None # wrong number of fragments - self.info["icc_profile"] = icc_profile - self.icclist = [] - - for i in range(6, len(s), 3): - t = s[i : i + 3] - # 4-tuples: id, vsamp, hsamp, qtable - self.layer.append((t[0], t[1] // 16, t[1] & 15, t[2])) - - -def DQT(self: JpegImageFile, marker: int) -> None: - # - # Define quantization table. Note that there might be more - # than one table in each marker. - - # FIXME: The quantization tables can be used to estimate the - # compression quality. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - while len(s): - v = s[0] - precision = 1 if (v // 16 == 0) else 2 # in bytes - qt_length = 1 + precision * 64 - if len(s) < qt_length: - msg = "bad quantization table marker" - raise SyntaxError(msg) - data = array.array("B" if precision == 1 else "H", s[1:qt_length]) - if sys.byteorder == "little" and precision > 1: - data.byteswap() # the values are always big-endian - self.quantization[v & 15] = [data[i] for i in zigzag_index] - s = s[qt_length:] - - -# -# JPEG marker table - -MARKER = { - 0xFFC0: ("SOF0", "Baseline DCT", SOF), - 0xFFC1: ("SOF1", "Extended Sequential DCT", SOF), - 0xFFC2: ("SOF2", "Progressive DCT", SOF), - 0xFFC3: ("SOF3", "Spatial lossless", SOF), - 0xFFC4: ("DHT", "Define Huffman table", Skip), - 0xFFC5: ("SOF5", "Differential sequential DCT", SOF), - 0xFFC6: ("SOF6", "Differential progressive DCT", SOF), - 0xFFC7: ("SOF7", "Differential spatial", SOF), - 0xFFC8: ("JPG", "Extension", None), - 0xFFC9: ("SOF9", "Extended sequential DCT (AC)", SOF), - 0xFFCA: ("SOF10", "Progressive DCT (AC)", SOF), - 0xFFCB: ("SOF11", "Spatial lossless DCT (AC)", SOF), - 0xFFCC: ("DAC", "Define arithmetic coding conditioning", Skip), - 0xFFCD: ("SOF13", "Differential sequential DCT (AC)", SOF), - 0xFFCE: ("SOF14", "Differential progressive DCT (AC)", SOF), - 0xFFCF: ("SOF15", "Differential spatial (AC)", SOF), - 0xFFD0: ("RST0", "Restart 0", None), - 0xFFD1: ("RST1", "Restart 1", None), - 0xFFD2: ("RST2", "Restart 2", None), - 0xFFD3: ("RST3", "Restart 3", None), - 0xFFD4: ("RST4", "Restart 4", None), - 0xFFD5: ("RST5", "Restart 5", None), - 0xFFD6: ("RST6", "Restart 6", None), - 0xFFD7: ("RST7", "Restart 7", None), - 0xFFD8: ("SOI", "Start of image", None), - 0xFFD9: ("EOI", "End of image", None), - 0xFFDA: ("SOS", "Start of scan", Skip), - 0xFFDB: ("DQT", "Define quantization table", DQT), - 0xFFDC: ("DNL", "Define number of lines", Skip), - 0xFFDD: ("DRI", "Define restart interval", Skip), - 0xFFDE: ("DHP", "Define hierarchical progression", SOF), - 0xFFDF: ("EXP", "Expand reference component", Skip), - 0xFFE0: ("APP0", "Application segment 0", APP), - 0xFFE1: ("APP1", "Application segment 1", APP), - 0xFFE2: ("APP2", "Application segment 2", APP), - 0xFFE3: ("APP3", "Application segment 3", APP), - 0xFFE4: ("APP4", "Application segment 4", APP), - 0xFFE5: ("APP5", "Application segment 5", APP), - 0xFFE6: ("APP6", "Application segment 6", APP), - 0xFFE7: ("APP7", "Application segment 7", APP), - 0xFFE8: ("APP8", "Application segment 8", APP), - 0xFFE9: ("APP9", "Application segment 9", APP), - 0xFFEA: ("APP10", "Application segment 10", APP), - 0xFFEB: ("APP11", "Application segment 11", APP), - 0xFFEC: ("APP12", "Application segment 12", APP), - 0xFFED: ("APP13", "Application segment 13", APP), - 0xFFEE: ("APP14", "Application segment 14", APP), - 0xFFEF: ("APP15", "Application segment 15", APP), - 0xFFF0: ("JPG0", "Extension 0", None), - 0xFFF1: ("JPG1", "Extension 1", None), - 0xFFF2: ("JPG2", "Extension 2", None), - 0xFFF3: ("JPG3", "Extension 3", None), - 0xFFF4: ("JPG4", "Extension 4", None), - 0xFFF5: ("JPG5", "Extension 5", None), - 0xFFF6: ("JPG6", "Extension 6", None), - 0xFFF7: ("JPG7", "Extension 7", None), - 0xFFF8: ("JPG8", "Extension 8", None), - 0xFFF9: ("JPG9", "Extension 9", None), - 0xFFFA: ("JPG10", "Extension 10", None), - 0xFFFB: ("JPG11", "Extension 11", None), - 0xFFFC: ("JPG12", "Extension 12", None), - 0xFFFD: ("JPG13", "Extension 13", None), - 0xFFFE: ("COM", "Comment", COM), -} - - -def _accept(prefix: bytes) -> bool: - # Magic number was taken from https://en.wikipedia.org/wiki/JPEG - return prefix.startswith(b"\xff\xd8\xff") - - -## -# Image plugin for JPEG and JFIF images. - - -class JpegImageFile(ImageFile.ImageFile): - format = "JPEG" - format_description = "JPEG (ISO 10918)" - - def _open(self) -> None: - s = self.fp.read(3) - - if not _accept(s): - msg = "not a JPEG file" - raise SyntaxError(msg) - s = b"\xff" - - # Create attributes - self.bits = self.layers = 0 - self._exif_offset = 0 - - # JPEG specifics (internal) - self.layer: list[tuple[int, int, int, int]] = [] - self._huffman_dc: dict[Any, Any] = {} - self._huffman_ac: dict[Any, Any] = {} - self.quantization: dict[int, list[int]] = {} - self.app: dict[str, bytes] = {} # compatibility - self.applist: list[tuple[str, bytes]] = [] - self.icclist: list[bytes] = [] - - while True: - i = s[0] - if i == 0xFF: - s = s + self.fp.read(1) - i = i16(s) - else: - # Skip non-0xFF junk - s = self.fp.read(1) - continue - - if i in MARKER: - name, description, handler = MARKER[i] - if handler is not None: - handler(self, i) - if i == 0xFFDA: # start of scan - rawmode = self.mode - if self.mode == "CMYK": - rawmode = "CMYK;I" # assume adobe conventions - self.tile = [ - ImageFile._Tile("jpeg", (0, 0) + self.size, 0, (rawmode, "")) - ] - # self.__offset = self.fp.tell() - break - s = self.fp.read(1) - elif i in {0, 0xFFFF}: - # padded marker or junk; move on - s = b"\xff" - elif i == 0xFF00: # Skip extraneous data (escaped 0xFF) - s = self.fp.read(1) - else: - msg = "no marker found" - raise SyntaxError(msg) - - self._read_dpi_from_exif() - - def __getattr__(self, name: str) -> Any: - if name in ("huffman_ac", "huffman_dc"): - deprecate(name, 12) - return getattr(self, "_" + name) - raise AttributeError(name) - - def __getstate__(self) -> list[Any]: - return super().__getstate__() + [self.layers, self.layer] - - def __setstate__(self, state: list[Any]) -> None: - self.layers, self.layer = state[6:] - super().__setstate__(state) - - def load_read(self, read_bytes: int) -> bytes: - """ - internal: read more image data - For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker - so libjpeg can finish decoding - """ - s = self.fp.read(read_bytes) - - if not s and ImageFile.LOAD_TRUNCATED_IMAGES and not hasattr(self, "_ended"): - # Premature EOF. - # Pretend file is finished adding EOI marker - self._ended = True - return b"\xff\xd9" - - return s - - def draft( - self, mode: str | None, size: tuple[int, int] | None - ) -> tuple[str, tuple[int, int, float, float]] | None: - if len(self.tile) != 1: - return None - - # Protect from second call - if self.decoderconfig: - return None - - d, e, o, a = self.tile[0] - scale = 1 - original_size = self.size - - assert isinstance(a, tuple) - if a[0] == "RGB" and mode in ["L", "YCbCr"]: - self._mode = mode - a = mode, "" - - if size: - scale = min(self.size[0] // size[0], self.size[1] // size[1]) - for s in [8, 4, 2, 1]: - if scale >= s: - break - assert e is not None - e = ( - e[0], - e[1], - (e[2] - e[0] + s - 1) // s + e[0], - (e[3] - e[1] + s - 1) // s + e[1], - ) - self._size = ((self.size[0] + s - 1) // s, (self.size[1] + s - 1) // s) - scale = s - - self.tile = [ImageFile._Tile(d, e, o, a)] - self.decoderconfig = (scale, 0) - - box = (0, 0, original_size[0] / scale, original_size[1] / scale) - return self.mode, box - - def load_djpeg(self) -> None: - # ALTERNATIVE: handle JPEGs via the IJG command line utilities - - f, path = tempfile.mkstemp() - os.close(f) - if os.path.exists(self.filename): - subprocess.check_call(["djpeg", "-outfile", path, self.filename]) - else: - try: - os.unlink(path) - except OSError: - pass - - msg = "Invalid Filename" - raise ValueError(msg) - - try: - with Image.open(path) as _im: - _im.load() - self.im = _im.im - finally: - try: - os.unlink(path) - except OSError: - pass - - self._mode = self.im.mode - self._size = self.im.size - - self.tile = [] - - def _getexif(self) -> dict[int, Any] | None: - return _getexif(self) - - def _read_dpi_from_exif(self) -> None: - # If DPI isn't in JPEG header, fetch from EXIF - if "dpi" in self.info or "exif" not in self.info: - return - try: - exif = self.getexif() - resolution_unit = exif[0x0128] - x_resolution = exif[0x011A] - try: - dpi = float(x_resolution[0]) / x_resolution[1] - except TypeError: - dpi = x_resolution - if math.isnan(dpi): - msg = "DPI is not a number" - raise ValueError(msg) - if resolution_unit == 3: # cm - # 1 dpcm = 2.54 dpi - dpi *= 2.54 - self.info["dpi"] = dpi, dpi - except ( - struct.error, # truncated EXIF - KeyError, # dpi not included - SyntaxError, # invalid/unreadable EXIF - TypeError, # dpi is an invalid float - ValueError, # dpi is an invalid float - ZeroDivisionError, # invalid dpi rational value - ): - self.info["dpi"] = 72, 72 - - def _getmp(self) -> dict[int, Any] | None: - return _getmp(self) - - -def _getexif(self: JpegImageFile) -> dict[int, Any] | None: - if "exif" not in self.info: - return None - return self.getexif()._get_merged_dict() - - -def _getmp(self: JpegImageFile) -> dict[int, Any] | None: - # Extract MP information. This method was inspired by the "highly - # experimental" _getexif version that's been in use for years now, - # itself based on the ImageFileDirectory class in the TIFF plugin. - - # The MP record essentially consists of a TIFF file embedded in a JPEG - # application marker. - try: - data = self.info["mp"] - except KeyError: - return None - file_contents = io.BytesIO(data) - head = file_contents.read(8) - endianness = ">" if head.startswith(b"\x4d\x4d\x00\x2a") else "<" - # process dictionary - from . import TiffImagePlugin - - try: - info = TiffImagePlugin.ImageFileDirectory_v2(head) - file_contents.seek(info.next) - info.load(file_contents) - mp = dict(info) - except Exception as e: - msg = "malformed MP Index (unreadable directory)" - raise SyntaxError(msg) from e - # it's an error not to have a number of images - try: - quant = mp[0xB001] - except KeyError as e: - msg = "malformed MP Index (no number of images)" - raise SyntaxError(msg) from e - # get MP entries - mpentries = [] - try: - rawmpentries = mp[0xB002] - for entrynum in range(quant): - unpackedentry = struct.unpack_from( - f"{endianness}LLLHH", rawmpentries, entrynum * 16 - ) - labels = ("Attribute", "Size", "DataOffset", "EntryNo1", "EntryNo2") - mpentry = dict(zip(labels, unpackedentry)) - mpentryattr = { - "DependentParentImageFlag": bool(mpentry["Attribute"] & (1 << 31)), - "DependentChildImageFlag": bool(mpentry["Attribute"] & (1 << 30)), - "RepresentativeImageFlag": bool(mpentry["Attribute"] & (1 << 29)), - "Reserved": (mpentry["Attribute"] & (3 << 27)) >> 27, - "ImageDataFormat": (mpentry["Attribute"] & (7 << 24)) >> 24, - "MPType": mpentry["Attribute"] & 0x00FFFFFF, - } - if mpentryattr["ImageDataFormat"] == 0: - mpentryattr["ImageDataFormat"] = "JPEG" - else: - msg = "unsupported picture format in MPO" - raise SyntaxError(msg) - mptypemap = { - 0x000000: "Undefined", - 0x010001: "Large Thumbnail (VGA Equivalent)", - 0x010002: "Large Thumbnail (Full HD Equivalent)", - 0x020001: "Multi-Frame Image (Panorama)", - 0x020002: "Multi-Frame Image: (Disparity)", - 0x020003: "Multi-Frame Image: (Multi-Angle)", - 0x030000: "Baseline MP Primary Image", - } - mpentryattr["MPType"] = mptypemap.get(mpentryattr["MPType"], "Unknown") - mpentry["Attribute"] = mpentryattr - mpentries.append(mpentry) - mp[0xB002] = mpentries - except KeyError as e: - msg = "malformed MP Index (bad MP Entry)" - raise SyntaxError(msg) from e - # Next we should try and parse the individual image unique ID list; - # we don't because I've never seen this actually used in a real MPO - # file and so can't test it. - return mp - - -# -------------------------------------------------------------------- -# stuff to save JPEG files - -RAWMODE = { - "1": "L", - "L": "L", - "RGB": "RGB", - "RGBX": "RGB", - "CMYK": "CMYK;I", # assume adobe conventions - "YCbCr": "YCbCr", -} - -# fmt: off -zigzag_index = ( - 0, 1, 5, 6, 14, 15, 27, 28, - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63, -) - -samplings = { - (1, 1, 1, 1, 1, 1): 0, - (2, 1, 1, 1, 1, 1): 1, - (2, 2, 1, 1, 1, 1): 2, -} -# fmt: on - - -def get_sampling(im: Image.Image) -> int: - # There's no subsampling when images have only 1 layer - # (grayscale images) or when they are CMYK (4 layers), - # so set subsampling to the default value. - # - # NOTE: currently Pillow can't encode JPEG to YCCK format. - # If YCCK support is added in the future, subsampling code will have - # to be updated (here and in JpegEncode.c) to deal with 4 layers. - if not isinstance(im, JpegImageFile) or im.layers in (1, 4): - return -1 - sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] - return samplings.get(sampling, -1) - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.width == 0 or im.height == 0: - msg = "cannot write empty image as JPEG" - raise ValueError(msg) - - try: - rawmode = RAWMODE[im.mode] - except KeyError as e: - msg = f"cannot write mode {im.mode} as JPEG" - raise OSError(msg) from e - - info = im.encoderinfo - - dpi = [round(x) for x in info.get("dpi", (0, 0))] - - quality = info.get("quality", -1) - subsampling = info.get("subsampling", -1) - qtables = info.get("qtables") - - if quality == "keep": - quality = -1 - subsampling = "keep" - qtables = "keep" - elif quality in presets: - preset = presets[quality] - quality = -1 - subsampling = preset.get("subsampling", -1) - qtables = preset.get("quantization") - elif not isinstance(quality, int): - msg = "Invalid quality setting" - raise ValueError(msg) - else: - if subsampling in presets: - subsampling = presets[subsampling].get("subsampling", -1) - if isinstance(qtables, str) and qtables in presets: - qtables = presets[qtables].get("quantization") - - if subsampling == "4:4:4": - subsampling = 0 - elif subsampling == "4:2:2": - subsampling = 1 - elif subsampling == "4:2:0": - subsampling = 2 - elif subsampling == "4:1:1": - # For compatibility. Before Pillow 4.3, 4:1:1 actually meant 4:2:0. - # Set 4:2:0 if someone is still using that value. - subsampling = 2 - elif subsampling == "keep": - if im.format != "JPEG": - msg = "Cannot use 'keep' when original image is not a JPEG" - raise ValueError(msg) - subsampling = get_sampling(im) - - def validate_qtables( - qtables: ( - str | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | None - ), - ) -> list[list[int]] | None: - if qtables is None: - return qtables - if isinstance(qtables, str): - try: - lines = [ - int(num) - for line in qtables.splitlines() - for num in line.split("#", 1)[0].split() - ] - except ValueError as e: - msg = "Invalid quantization table" - raise ValueError(msg) from e - else: - qtables = [lines[s : s + 64] for s in range(0, len(lines), 64)] - if isinstance(qtables, (tuple, list, dict)): - if isinstance(qtables, dict): - qtables = [ - qtables[key] for key in range(len(qtables)) if key in qtables - ] - elif isinstance(qtables, tuple): - qtables = list(qtables) - if not (0 < len(qtables) < 5): - msg = "None or too many quantization tables" - raise ValueError(msg) - for idx, table in enumerate(qtables): - try: - if len(table) != 64: - msg = "Invalid quantization table" - raise TypeError(msg) - table_array = array.array("H", table) - except TypeError as e: - msg = "Invalid quantization table" - raise ValueError(msg) from e - else: - qtables[idx] = list(table_array) - return qtables - - if qtables == "keep": - if im.format != "JPEG": - msg = "Cannot use 'keep' when original image is not a JPEG" - raise ValueError(msg) - qtables = getattr(im, "quantization", None) - qtables = validate_qtables(qtables) - - extra = info.get("extra", b"") - - MAX_BYTES_IN_MARKER = 65533 - if xmp := info.get("xmp"): - overhead_len = 29 # b"http://ns.adobe.com/xap/1.0/\x00" - max_data_bytes_in_marker = MAX_BYTES_IN_MARKER - overhead_len - if len(xmp) > max_data_bytes_in_marker: - msg = "XMP data is too long" - raise ValueError(msg) - size = o16(2 + overhead_len + len(xmp)) - extra += b"\xff\xe1" + size + b"http://ns.adobe.com/xap/1.0/\x00" + xmp - - if icc_profile := info.get("icc_profile"): - overhead_len = 14 # b"ICC_PROFILE\0" + o8(i) + o8(len(markers)) - max_data_bytes_in_marker = MAX_BYTES_IN_MARKER - overhead_len - markers = [] - while icc_profile: - markers.append(icc_profile[:max_data_bytes_in_marker]) - icc_profile = icc_profile[max_data_bytes_in_marker:] - i = 1 - for marker in markers: - size = o16(2 + overhead_len + len(marker)) - extra += ( - b"\xff\xe2" - + size - + b"ICC_PROFILE\0" - + o8(i) - + o8(len(markers)) - + marker - ) - i += 1 - - comment = info.get("comment", im.info.get("comment")) - - # "progressive" is the official name, but older documentation - # says "progression" - # FIXME: issue a warning if the wrong form is used (post-1.1.7) - progressive = info.get("progressive", False) or info.get("progression", False) - - optimize = info.get("optimize", False) - - exif = info.get("exif", b"") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - if len(exif) > MAX_BYTES_IN_MARKER: - msg = "EXIF data is too long" - raise ValueError(msg) - - # get keyword arguments - im.encoderconfig = ( - quality, - progressive, - info.get("smooth", 0), - optimize, - info.get("keep_rgb", False), - info.get("streamtype", 0), - dpi, - subsampling, - info.get("restart_marker_blocks", 0), - info.get("restart_marker_rows", 0), - qtables, - comment, - extra, - exif, - ) - - # if we optimize, libjpeg needs a buffer big enough to hold the whole image - # in a shot. Guessing on the size, at im.size bytes. (raw pixel size is - # channels*size, this is a value that's been used in a django patch. - # https://github.com/matthewwithanm/django-imagekit/issues/50 - if optimize or progressive: - # CMYK can be bigger - if im.mode == "CMYK": - bufsize = 4 * im.size[0] * im.size[1] - # keep sets quality to -1, but the actual value may be high. - elif quality >= 95 or quality == -1: - bufsize = 2 * im.size[0] * im.size[1] - else: - bufsize = im.size[0] * im.size[1] - if exif: - bufsize += len(exif) + 5 - if extra: - bufsize += len(extra) + 1 - else: - # The EXIF info needs to be written as one block, + APP1, + one spare byte. - # Ensure that our buffer is big enough. Same with the icc_profile block. - bufsize = max(len(exif) + 5, len(extra) + 1) - - ImageFile._save( - im, fp, [ImageFile._Tile("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize - ) - - -def _save_cjpeg(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - # ALTERNATIVE: handle JPEGs via the IJG command line utilities. - tempfile = im._dump() - subprocess.check_call(["cjpeg", "-outfile", filename, tempfile]) - try: - os.unlink(tempfile) - except OSError: - pass - - -## -# Factory for making JPEG and MPO instances -def jpeg_factory( - fp: IO[bytes], filename: str | bytes | None = None -) -> JpegImageFile | MpoImageFile: - im = JpegImageFile(fp, filename) - try: - mpheader = im._getmp() - if mpheader is not None and mpheader[45057] > 1: - for segment, content in im.applist: - if segment == "APP1" and b' hdrgm:Version="' in content: - # Ultra HDR images are not yet supported - return im - # It's actually an MPO - from .MpoImagePlugin import MpoImageFile - - # Don't reload everything, just convert it. - im = MpoImageFile.adopt(im, mpheader) - except (TypeError, IndexError): - # It is really a JPEG - pass - except SyntaxError: - warnings.warn( - "Image appears to be a malformed MPO file, it will be " - "interpreted as a base JPEG file" - ) - return im - - -# --------------------------------------------------------------------- -# Registry stuff - -Image.register_open(JpegImageFile.format, jpeg_factory, _accept) -Image.register_save(JpegImageFile.format, _save) - -Image.register_extensions(JpegImageFile.format, [".jfif", ".jpe", ".jpg", ".jpeg"]) - -Image.register_mime(JpegImageFile.format, "image/jpeg") diff --git a/myenv/lib/python3.12/site-packages/PIL/JpegPresets.py b/myenv/lib/python3.12/site-packages/PIL/JpegPresets.py deleted file mode 100644 index d0e64a3..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/JpegPresets.py +++ /dev/null @@ -1,242 +0,0 @@ -""" -JPEG quality settings equivalent to the Photoshop settings. -Can be used when saving JPEG files. - -The following presets are available by default: -``web_low``, ``web_medium``, ``web_high``, ``web_very_high``, ``web_maximum``, -``low``, ``medium``, ``high``, ``maximum``. -More presets can be added to the :py:data:`presets` dict if needed. - -To apply the preset, specify:: - - quality="preset_name" - -To apply only the quantization table:: - - qtables="preset_name" - -To apply only the subsampling setting:: - - subsampling="preset_name" - -Example:: - - im.save("image_name.jpg", quality="web_high") - -Subsampling ------------ - -Subsampling is the practice of encoding images by implementing less resolution -for chroma information than for luma information. -(ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) - -Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and -4:2:0. - -You can get the subsampling of a JPEG with the -:func:`.JpegImagePlugin.get_sampling` function. - -In JPEG compressed data a JPEG marker is used instead of an EXIF tag. -(ref.: https://exiv2.org/tags.html) - - -Quantization tables -------------------- - -They are values use by the DCT (Discrete cosine transform) to remove -*unnecessary* information from the image (the lossy part of the compression). -(ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, -https://en.wikipedia.org/wiki/JPEG#Quantization) - -You can get the quantization tables of a JPEG with:: - - im.quantization - -This will return a dict with a number of lists. You can pass this dict -directly as the qtables argument when saving a JPEG. - -The quantization table format in presets is a list with sublists. These formats -are interchangeable. - -Libjpeg ref.: -https://web.archive.org/web/20120328125543/http://www.jpegcameras.com/libjpeg/libjpeg-3.html - -""" - -from __future__ import annotations - -# fmt: off -presets = { - 'web_low': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [20, 16, 25, 39, 50, 46, 62, 68, - 16, 18, 23, 38, 38, 53, 65, 68, - 25, 23, 31, 38, 53, 65, 68, 68, - 39, 38, 38, 53, 65, 68, 68, 68, - 50, 38, 53, 65, 68, 68, 68, 68, - 46, 53, 65, 68, 68, 68, 68, 68, - 62, 65, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68], - [21, 25, 32, 38, 54, 68, 68, 68, - 25, 28, 24, 38, 54, 68, 68, 68, - 32, 24, 32, 43, 66, 68, 68, 68, - 38, 38, 43, 53, 68, 68, 68, 68, - 54, 54, 66, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68] - ]}, - 'web_medium': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [16, 11, 11, 16, 23, 27, 31, 30, - 11, 12, 12, 15, 20, 23, 23, 30, - 11, 12, 13, 16, 23, 26, 35, 47, - 16, 15, 16, 23, 26, 37, 47, 64, - 23, 20, 23, 26, 39, 51, 64, 64, - 27, 23, 26, 37, 51, 64, 64, 64, - 31, 23, 35, 47, 64, 64, 64, 64, - 30, 30, 47, 64, 64, 64, 64, 64], - [17, 15, 17, 21, 20, 26, 38, 48, - 15, 19, 18, 17, 20, 26, 35, 43, - 17, 18, 20, 22, 26, 30, 46, 53, - 21, 17, 22, 28, 30, 39, 53, 64, - 20, 20, 26, 30, 39, 48, 64, 64, - 26, 26, 30, 39, 48, 63, 64, 64, - 38, 35, 46, 53, 64, 64, 64, 64, - 48, 43, 53, 64, 64, 64, 64, 64] - ]}, - 'web_high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [6, 4, 4, 6, 9, 11, 12, 16, - 4, 5, 5, 6, 8, 10, 12, 12, - 4, 5, 5, 6, 10, 12, 14, 19, - 6, 6, 6, 11, 12, 15, 19, 28, - 9, 8, 10, 12, 16, 20, 27, 31, - 11, 10, 12, 15, 20, 27, 31, 31, - 12, 12, 14, 19, 27, 31, 31, 31, - 16, 12, 19, 28, 31, 31, 31, 31], - [7, 7, 13, 24, 26, 31, 31, 31, - 7, 12, 16, 21, 31, 31, 31, 31, - 13, 16, 17, 31, 31, 31, 31, 31, - 24, 21, 31, 31, 31, 31, 31, 31, - 26, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31] - ]}, - 'web_very_high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 4, 5, 7, 9, - 2, 2, 2, 4, 5, 7, 9, 12, - 3, 3, 4, 5, 8, 10, 12, 12, - 4, 4, 5, 7, 10, 12, 12, 12, - 5, 5, 7, 9, 12, 12, 12, 12, - 6, 6, 9, 12, 12, 12, 12, 12], - [3, 3, 5, 9, 13, 15, 15, 15, - 3, 4, 6, 11, 14, 12, 12, 12, - 5, 6, 9, 14, 12, 12, 12, 12, - 9, 11, 14, 12, 12, 12, 12, 12, - 13, 14, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'web_maximum': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 2, 2, 3, - 1, 1, 1, 1, 2, 2, 3, 3, - 1, 1, 1, 2, 2, 3, 3, 3, - 1, 1, 2, 2, 3, 3, 3, 3], - [1, 1, 1, 2, 2, 3, 3, 3, - 1, 1, 1, 2, 3, 3, 3, 3, - 1, 1, 1, 3, 3, 3, 3, 3, - 2, 2, 3, 3, 3, 3, 3, 3, - 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3] - ]}, - 'low': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [18, 14, 14, 21, 30, 35, 34, 17, - 14, 16, 16, 19, 26, 23, 12, 12, - 14, 16, 17, 21, 23, 12, 12, 12, - 21, 19, 21, 23, 12, 12, 12, 12, - 30, 26, 23, 12, 12, 12, 12, 12, - 35, 23, 12, 12, 12, 12, 12, 12, - 34, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12], - [20, 19, 22, 27, 20, 20, 17, 17, - 19, 25, 23, 14, 14, 12, 12, 12, - 22, 23, 14, 14, 12, 12, 12, 12, - 27, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'medium': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [12, 8, 8, 12, 17, 21, 24, 17, - 8, 9, 9, 11, 15, 19, 12, 12, - 8, 9, 10, 12, 19, 12, 12, 12, - 12, 11, 12, 21, 12, 12, 12, 12, - 17, 15, 19, 12, 12, 12, 12, 12, - 21, 19, 12, 12, 12, 12, 12, 12, - 24, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12], - [13, 11, 13, 16, 20, 20, 17, 17, - 11, 14, 14, 14, 14, 12, 12, 12, - 13, 14, 14, 14, 12, 12, 12, 12, - 16, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [6, 4, 4, 6, 9, 11, 12, 16, - 4, 5, 5, 6, 8, 10, 12, 12, - 4, 5, 5, 6, 10, 12, 12, 12, - 6, 6, 6, 11, 12, 12, 12, 12, - 9, 8, 10, 12, 12, 12, 12, 12, - 11, 10, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 16, 12, 12, 12, 12, 12, 12, 12], - [7, 7, 13, 24, 20, 20, 17, 17, - 7, 12, 16, 14, 14, 12, 12, 12, - 13, 16, 14, 14, 12, 12, 12, 12, - 24, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'maximum': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 4, 5, 7, 9, - 2, 2, 2, 4, 5, 7, 9, 12, - 3, 3, 4, 5, 8, 10, 12, 12, - 4, 4, 5, 7, 10, 12, 12, 12, - 5, 5, 7, 9, 12, 12, 12, 12, - 6, 6, 9, 12, 12, 12, 12, 12], - [3, 3, 5, 9, 13, 15, 15, 15, - 3, 4, 6, 10, 14, 12, 12, 12, - 5, 6, 9, 14, 12, 12, 12, 12, - 9, 10, 14, 12, 12, 12, 12, 12, - 13, 14, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12] - ]}, -} -# fmt: on diff --git a/myenv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py deleted file mode 100644 index 9a47933..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py +++ /dev/null @@ -1,78 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Basic McIdas support for PIL -# -# History: -# 1997-05-05 fl Created (8-bit images only) -# 2009-03-08 fl Added 16/32-bit support. -# -# Thanks to Richard Jones and Craig Swank for specs and samples. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import struct - -from . import Image, ImageFile - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"\x00\x00\x00\x00\x00\x00\x00\x04") - - -## -# Image plugin for McIdas area images. - - -class McIdasImageFile(ImageFile.ImageFile): - format = "MCIDAS" - format_description = "McIdas area file" - - def _open(self) -> None: - # parse area file directory - assert self.fp is not None - - s = self.fp.read(256) - if not _accept(s) or len(s) != 256: - msg = "not an McIdas area file" - raise SyntaxError(msg) - - self.area_descriptor_raw = s - self.area_descriptor = w = [0, *struct.unpack("!64i", s)] - - # get mode - if w[11] == 1: - mode = rawmode = "L" - elif w[11] == 2: - mode = rawmode = "I;16B" - elif w[11] == 4: - # FIXME: add memory map support - mode = "I" - rawmode = "I;32B" - else: - msg = "unsupported McIdas format" - raise SyntaxError(msg) - - self._mode = mode - self._size = w[10], w[9] - - offset = w[34] + w[15] - stride = w[15] + w[10] * w[11] * w[14] - - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1)) - ] - - -# -------------------------------------------------------------------- -# registry - -Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) - -# no default extension diff --git a/myenv/lib/python3.12/site-packages/PIL/MicImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/MicImagePlugin.py deleted file mode 100644 index 9ce38c4..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/MicImagePlugin.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Microsoft Image Composer support for PIL -# -# Notes: -# uses TiffImagePlugin.py to read the actual image streams -# -# History: -# 97-01-20 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import olefile - -from . import Image, TiffImagePlugin - -# -# -------------------------------------------------------------------- - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(olefile.MAGIC) - - -## -# Image plugin for Microsoft's Image Composer file format. - - -class MicImageFile(TiffImagePlugin.TiffImageFile): - format = "MIC" - format_description = "Microsoft Image Composer" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - # read the OLE directory and see if this is a likely - # to be a Microsoft Image Composer file - - try: - self.ole = olefile.OleFileIO(self.fp) - except OSError as e: - msg = "not an MIC file; invalid OLE file" - raise SyntaxError(msg) from e - - # find ACI subfiles with Image members (maybe not the - # best way to identify MIC files, but what the... ;-) - - self.images = [ - path - for path in self.ole.listdir() - if path[1:] and path[0].endswith(".ACI") and path[1] == "Image" - ] - - # if we didn't find any images, this is probably not - # an MIC file. - if not self.images: - msg = "not an MIC file; no image entries" - raise SyntaxError(msg) - - self.frame = -1 - self._n_frames = len(self.images) - self.is_animated = self._n_frames > 1 - - self.__fp = self.fp - self.seek(0) - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - filename = self.images[frame] - self.fp = self.ole.openstream(filename) - - TiffImagePlugin.TiffImageFile._open(self) - - self.frame = frame - - def tell(self) -> int: - return self.frame - - def close(self) -> None: - self.__fp.close() - self.ole.close() - super().close() - - def __exit__(self, *args: object) -> None: - self.__fp.close() - self.ole.close() - super().__exit__() - - -# -# -------------------------------------------------------------------- - -Image.register_open(MicImageFile.format, MicImageFile, _accept) - -Image.register_extension(MicImageFile.format, ".mic") diff --git a/myenv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py deleted file mode 100644 index 47ebe9d..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py +++ /dev/null @@ -1,84 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# MPEG file handling -# -# History: -# 95-09-09 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image, ImageFile -from ._binary import i8 -from ._typing import SupportsRead - -# -# Bitstream parser - - -class BitStream: - def __init__(self, fp: SupportsRead[bytes]) -> None: - self.fp = fp - self.bits = 0 - self.bitbuffer = 0 - - def next(self) -> int: - return i8(self.fp.read(1)) - - def peek(self, bits: int) -> int: - while self.bits < bits: - self.bitbuffer = (self.bitbuffer << 8) + self.next() - self.bits += 8 - return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1 - - def skip(self, bits: int) -> None: - while self.bits < bits: - self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1)) - self.bits += 8 - self.bits = self.bits - bits - - def read(self, bits: int) -> int: - v = self.peek(bits) - self.bits = self.bits - bits - return v - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"\x00\x00\x01\xb3") - - -## -# Image plugin for MPEG streams. This plugin can identify a stream, -# but it cannot read it. - - -class MpegImageFile(ImageFile.ImageFile): - format = "MPEG" - format_description = "MPEG" - - def _open(self) -> None: - assert self.fp is not None - - s = BitStream(self.fp) - if s.read(32) != 0x1B3: - msg = "not an MPEG file" - raise SyntaxError(msg) - - self._mode = "RGB" - self._size = s.read(12), s.read(12) - - -# -------------------------------------------------------------------- -# Registry stuff - -Image.register_open(MpegImageFile.format, MpegImageFile, _accept) - -Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"]) - -Image.register_mime(MpegImageFile.format, "video/mpeg") diff --git a/myenv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py deleted file mode 100644 index b1ae078..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py +++ /dev/null @@ -1,202 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# MPO file handling -# -# See "Multi-Picture Format" (CIPA DC-007-Translation 2009, Standard of the -# Camera & Imaging Products Association) -# -# The multi-picture object combines multiple JPEG images (with a modified EXIF -# data format) into a single file. While it can theoretically be used much like -# a GIF animation, it is commonly used to represent 3D photographs and is (as -# of this writing) the most commonly used format by 3D cameras. -# -# History: -# 2014-03-13 Feneric Created -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -import struct -from typing import IO, Any, cast - -from . import ( - Image, - ImageFile, - ImageSequence, - JpegImagePlugin, - TiffImagePlugin, -) -from ._binary import o32le -from ._util import DeferredError - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - JpegImagePlugin._save(im, fp, filename) - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - append_images = im.encoderinfo.get("append_images", []) - if not append_images and not getattr(im, "is_animated", False): - _save(im, fp, filename) - return - - mpf_offset = 28 - offsets: list[int] = [] - im_sequences = [im, *append_images] - total = sum(getattr(seq, "n_frames", 1) for seq in im_sequences) - for im_sequence in im_sequences: - for im_frame in ImageSequence.Iterator(im_sequence): - if not offsets: - # APP2 marker - ifd_length = 66 + 16 * total - im_frame.encoderinfo["extra"] = ( - b"\xff\xe2" - + struct.pack(">H", 6 + ifd_length) - + b"MPF\0" - + b" " * ifd_length - ) - exif = im_frame.encoderinfo.get("exif") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - im_frame.encoderinfo["exif"] = exif - if exif: - mpf_offset += 4 + len(exif) - - JpegImagePlugin._save(im_frame, fp, filename) - offsets.append(fp.tell()) - else: - encoderinfo = im_frame._attach_default_encoderinfo(im) - im_frame.save(fp, "JPEG") - im_frame.encoderinfo = encoderinfo - offsets.append(fp.tell() - offsets[-1]) - - ifd = TiffImagePlugin.ImageFileDirectory_v2() - ifd[0xB000] = b"0100" - ifd[0xB001] = len(offsets) - - mpentries = b"" - data_offset = 0 - for i, size in enumerate(offsets): - if i == 0: - mptype = 0x030000 # Baseline MP Primary Image - else: - mptype = 0x000000 # Undefined - mpentries += struct.pack(" None: - self.fp.seek(0) # prep the fp in order to pass the JPEG test - JpegImagePlugin.JpegImageFile._open(self) - self._after_jpeg_open() - - def _after_jpeg_open(self, mpheader: dict[int, Any] | None = None) -> None: - self.mpinfo = mpheader if mpheader is not None else self._getmp() - if self.mpinfo is None: - msg = "Image appears to be a malformed MPO file" - raise ValueError(msg) - self.n_frames = self.mpinfo[0xB001] - self.__mpoffsets = [ - mpent["DataOffset"] + self.info["mpoffset"] for mpent in self.mpinfo[0xB002] - ] - self.__mpoffsets[0] = 0 - # Note that the following assertion will only be invalid if something - # gets broken within JpegImagePlugin. - assert self.n_frames == len(self.__mpoffsets) - del self.info["mpoffset"] # no longer needed - self.is_animated = self.n_frames > 1 - self._fp = self.fp # FIXME: hack - self._fp.seek(self.__mpoffsets[0]) # get ready to read first frame - self.__frame = 0 - self.offset = 0 - # for now we can only handle reading and individual frame extraction - self.readonly = 1 - - def load_seek(self, pos: int) -> None: - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self._fp.seek(pos) - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self.fp = self._fp - self.offset = self.__mpoffsets[frame] - - original_exif = self.info.get("exif") - if "exif" in self.info: - del self.info["exif"] - - self.fp.seek(self.offset + 2) # skip SOI marker - if not self.fp.read(2): - msg = "No data found for frame" - raise ValueError(msg) - self.fp.seek(self.offset) - JpegImagePlugin.JpegImageFile._open(self) - if self.info.get("exif") != original_exif: - self._reload_exif() - - self.tile = [ - ImageFile._Tile("jpeg", (0, 0) + self.size, self.offset, self.tile[0][-1]) - ] - self.__frame = frame - - def tell(self) -> int: - return self.__frame - - @staticmethod - def adopt( - jpeg_instance: JpegImagePlugin.JpegImageFile, - mpheader: dict[int, Any] | None = None, - ) -> MpoImageFile: - """ - Transform the instance of JpegImageFile into - an instance of MpoImageFile. - After the call, the JpegImageFile is extended - to be an MpoImageFile. - - This is essentially useful when opening a JPEG - file that reveals itself as an MPO, to avoid - double call to _open. - """ - jpeg_instance.__class__ = MpoImageFile - mpo_instance = cast(MpoImageFile, jpeg_instance) - mpo_instance._after_jpeg_open(mpheader) - return mpo_instance - - -# --------------------------------------------------------------------- -# Registry stuff - -# Note that since MPO shares a factory with JPEG, we do not need to do a -# separate registration for it here. -# Image.register_open(MpoImageFile.format, -# JpegImagePlugin.jpeg_factory, _accept) -Image.register_save(MpoImageFile.format, _save) -Image.register_save_all(MpoImageFile.format, _save_all) - -Image.register_extension(MpoImageFile.format, ".mpo") - -Image.register_mime(MpoImageFile.format, "image/mpo") diff --git a/myenv/lib/python3.12/site-packages/PIL/MspImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/MspImagePlugin.py deleted file mode 100644 index 277087a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/MspImagePlugin.py +++ /dev/null @@ -1,200 +0,0 @@ -# -# The Python Imaging Library. -# -# MSP file handling -# -# This is the format used by the Paint program in Windows 1 and 2. -# -# History: -# 95-09-05 fl Created -# 97-01-03 fl Read/write MSP images -# 17-02-21 es Fixed RLE interpretation -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995-97. -# Copyright (c) Eric Soroos 2017. -# -# See the README file for information on usage and redistribution. -# -# More info on this format: https://archive.org/details/gg243631 -# Page 313: -# Figure 205. Windows Paint Version 1: "DanM" Format -# Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03 -# -# See also: https://www.fileformat.info/format/mspaint/egff.htm -from __future__ import annotations - -import io -import struct -from typing import IO - -from . import Image, ImageFile -from ._binary import i16le as i16 -from ._binary import o16le as o16 - -# -# read MSP files - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith((b"DanM", b"LinS")) - - -## -# Image plugin for Windows MSP images. This plugin supports both -# uncompressed (Windows 1.0). - - -class MspImageFile(ImageFile.ImageFile): - format = "MSP" - format_description = "Windows Paint" - - def _open(self) -> None: - # Header - assert self.fp is not None - - s = self.fp.read(32) - if not _accept(s): - msg = "not an MSP file" - raise SyntaxError(msg) - - # Header checksum - checksum = 0 - for i in range(0, 32, 2): - checksum = checksum ^ i16(s, i) - if checksum != 0: - msg = "bad MSP checksum" - raise SyntaxError(msg) - - self._mode = "1" - self._size = i16(s, 4), i16(s, 6) - - if s.startswith(b"DanM"): - self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 32, "1")] - else: - self.tile = [ImageFile._Tile("MSP", (0, 0) + self.size, 32)] - - -class MspDecoder(ImageFile.PyDecoder): - # The algo for the MSP decoder is from - # https://www.fileformat.info/format/mspaint/egff.htm - # cc-by-attribution -- That page references is taken from the - # Encyclopedia of Graphics File Formats and is licensed by - # O'Reilly under the Creative Common/Attribution license - # - # For RLE encoded files, the 32byte header is followed by a scan - # line map, encoded as one 16bit word of encoded byte length per - # line. - # - # NOTE: the encoded length of the line can be 0. This was not - # handled in the previous version of this encoder, and there's no - # mention of how to handle it in the documentation. From the few - # examples I've seen, I've assumed that it is a fill of the - # background color, in this case, white. - # - # - # Pseudocode of the decoder: - # Read a BYTE value as the RunType - # If the RunType value is zero - # Read next byte as the RunCount - # Read the next byte as the RunValue - # Write the RunValue byte RunCount times - # If the RunType value is non-zero - # Use this value as the RunCount - # Read and write the next RunCount bytes literally - # - # e.g.: - # 0x00 03 ff 05 00 01 02 03 04 - # would yield the bytes: - # 0xff ff ff 00 01 02 03 04 - # - # which are then interpreted as a bit packed mode '1' image - - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - - img = io.BytesIO() - blank_line = bytearray((0xFF,) * ((self.state.xsize + 7) // 8)) - try: - self.fd.seek(32) - rowmap = struct.unpack_from( - f"<{self.state.ysize}H", self.fd.read(self.state.ysize * 2) - ) - except struct.error as e: - msg = "Truncated MSP file in row map" - raise OSError(msg) from e - - for x, rowlen in enumerate(rowmap): - try: - if rowlen == 0: - img.write(blank_line) - continue - row = self.fd.read(rowlen) - if len(row) != rowlen: - msg = f"Truncated MSP file, expected {rowlen} bytes on row {x}" - raise OSError(msg) - idx = 0 - while idx < rowlen: - runtype = row[idx] - idx += 1 - if runtype == 0: - (runcount, runval) = struct.unpack_from("Bc", row, idx) - img.write(runval * runcount) - idx += 2 - else: - runcount = runtype - img.write(row[idx : idx + runcount]) - idx += runcount - - except struct.error as e: - msg = f"Corrupted MSP file in row {x}" - raise OSError(msg) from e - - self.set_as_raw(img.getvalue(), "1") - - return -1, 0 - - -Image.register_decoder("MSP", MspDecoder) - - -# -# write MSP files (uncompressed only) - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode != "1": - msg = f"cannot write mode {im.mode} as MSP" - raise OSError(msg) - - # create MSP header - header = [0] * 16 - - header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1 - header[2], header[3] = im.size - header[4], header[5] = 1, 1 - header[6], header[7] = 1, 1 - header[8], header[9] = im.size - - checksum = 0 - for h in header: - checksum = checksum ^ h - header[12] = checksum # FIXME: is this the right field? - - # header - for h in header: - fp.write(o16(h)) - - # image body - ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 32, "1")]) - - -# -# registry - -Image.register_open(MspImageFile.format, MspImageFile, _accept) -Image.register_save(MspImageFile.format, _save) - -Image.register_extension(MspImageFile.format, ".msp") diff --git a/myenv/lib/python3.12/site-packages/PIL/PSDraw.py b/myenv/lib/python3.12/site-packages/PIL/PSDraw.py deleted file mode 100644 index 7fd4c5c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PSDraw.py +++ /dev/null @@ -1,237 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# Simple PostScript graphics interface -# -# History: -# 1996-04-20 fl Created -# 1999-01-10 fl Added gsave/grestore to image method -# 2005-05-04 fl Fixed floating point issue in image (from Eric Etheridge) -# -# Copyright (c) 1997-2005 by Secret Labs AB. All rights reserved. -# Copyright (c) 1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import sys -from typing import IO - -from . import EpsImagePlugin - -TYPE_CHECKING = False - - -## -# Simple PostScript graphics interface. - - -class PSDraw: - """ - Sets up printing to the given file. If ``fp`` is omitted, - ``sys.stdout.buffer`` is assumed. - """ - - def __init__(self, fp: IO[bytes] | None = None) -> None: - if not fp: - fp = sys.stdout.buffer - self.fp = fp - - def begin_document(self, id: str | None = None) -> None: - """Set up printing of a document. (Write PostScript DSC header.)""" - # FIXME: incomplete - self.fp.write( - b"%!PS-Adobe-3.0\n" - b"save\n" - b"/showpage { } def\n" - b"%%EndComments\n" - b"%%BeginDocument\n" - ) - # self.fp.write(ERROR_PS) # debugging! - self.fp.write(EDROFF_PS) - self.fp.write(VDI_PS) - self.fp.write(b"%%EndProlog\n") - self.isofont: dict[bytes, int] = {} - - def end_document(self) -> None: - """Ends printing. (Write PostScript DSC footer.)""" - self.fp.write(b"%%EndDocument\nrestore showpage\n%%End\n") - if hasattr(self.fp, "flush"): - self.fp.flush() - - def setfont(self, font: str, size: int) -> None: - """ - Selects which font to use. - - :param font: A PostScript font name - :param size: Size in points. - """ - font_bytes = bytes(font, "UTF-8") - if font_bytes not in self.isofont: - # reencode font - self.fp.write( - b"/PSDraw-%s ISOLatin1Encoding /%s E\n" % (font_bytes, font_bytes) - ) - self.isofont[font_bytes] = 1 - # rough - self.fp.write(b"/F0 %d /PSDraw-%s F\n" % (size, font_bytes)) - - def line(self, xy0: tuple[int, int], xy1: tuple[int, int]) -> None: - """ - Draws a line between the two points. Coordinates are given in - PostScript point coordinates (72 points per inch, (0, 0) is the lower - left corner of the page). - """ - self.fp.write(b"%d %d %d %d Vl\n" % (*xy0, *xy1)) - - def rectangle(self, box: tuple[int, int, int, int]) -> None: - """ - Draws a rectangle. - - :param box: A tuple of four integers, specifying left, bottom, width and - height. - """ - self.fp.write(b"%d %d M 0 %d %d Vr\n" % box) - - def text(self, xy: tuple[int, int], text: str) -> None: - """ - Draws text at the given position. You must use - :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method. - """ - text_bytes = bytes(text, "UTF-8") - text_bytes = b"\\(".join(text_bytes.split(b"(")) - text_bytes = b"\\)".join(text_bytes.split(b")")) - self.fp.write(b"%d %d M (%s) S\n" % (xy + (text_bytes,))) - - if TYPE_CHECKING: - from . import Image - - def image( - self, box: tuple[int, int, int, int], im: Image.Image, dpi: int | None = None - ) -> None: - """Draw a PIL image, centered in the given box.""" - # default resolution depends on mode - if not dpi: - if im.mode == "1": - dpi = 200 # fax - else: - dpi = 100 # grayscale - # image size (on paper) - x = im.size[0] * 72 / dpi - y = im.size[1] * 72 / dpi - # max allowed size - xmax = float(box[2] - box[0]) - ymax = float(box[3] - box[1]) - if x > xmax: - y = y * xmax / x - x = xmax - if y > ymax: - x = x * ymax / y - y = ymax - dx = (xmax - x) / 2 + box[0] - dy = (ymax - y) / 2 + box[1] - self.fp.write(b"gsave\n%f %f translate\n" % (dx, dy)) - if (x, y) != im.size: - # EpsImagePlugin._save prints the image at (0,0,xsize,ysize) - sx = x / im.size[0] - sy = y / im.size[1] - self.fp.write(b"%f %f scale\n" % (sx, sy)) - EpsImagePlugin._save(im, self.fp, "", 0) - self.fp.write(b"\ngrestore\n") - - -# -------------------------------------------------------------------- -# PostScript driver - -# -# EDROFF.PS -- PostScript driver for Edroff 2 -# -# History: -# 94-01-25 fl: created (edroff 2.04) -# -# Copyright (c) Fredrik Lundh 1994. -# - - -EDROFF_PS = b"""\ -/S { show } bind def -/P { moveto show } bind def -/M { moveto } bind def -/X { 0 rmoveto } bind def -/Y { 0 exch rmoveto } bind def -/E { findfont - dup maxlength dict begin - { - 1 index /FID ne { def } { pop pop } ifelse - } forall - /Encoding exch def - dup /FontName exch def - currentdict end definefont pop -} bind def -/F { findfont exch scalefont dup setfont - [ exch /setfont cvx ] cvx bind def -} bind def -""" - -# -# VDI.PS -- PostScript driver for VDI meta commands -# -# History: -# 94-01-25 fl: created (edroff 2.04) -# -# Copyright (c) Fredrik Lundh 1994. -# - -VDI_PS = b"""\ -/Vm { moveto } bind def -/Va { newpath arcn stroke } bind def -/Vl { moveto lineto stroke } bind def -/Vc { newpath 0 360 arc closepath } bind def -/Vr { exch dup 0 rlineto - exch dup 0 exch rlineto - exch neg 0 rlineto - 0 exch neg rlineto - setgray fill } bind def -/Tm matrix def -/Ve { Tm currentmatrix pop - translate scale newpath 0 0 .5 0 360 arc closepath - Tm setmatrix -} bind def -/Vf { currentgray exch setgray fill setgray } bind def -""" - -# -# ERROR.PS -- Error handler -# -# History: -# 89-11-21 fl: created (pslist 1.10) -# - -ERROR_PS = b"""\ -/landscape false def -/errorBUF 200 string def -/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def -errordict begin /handleerror { - initmatrix /Courier findfont 10 scalefont setfont - newpath 72 720 moveto $error begin /newerror false def - (PostScript Error) show errorNL errorNL - (Error: ) show - /errorname load errorBUF cvs show errorNL errorNL - (Command: ) show - /command load dup type /stringtype ne { errorBUF cvs } if show - errorNL errorNL - (VMstatus: ) show - vmstatus errorBUF cvs show ( bytes available, ) show - errorBUF cvs show ( bytes used at level ) show - errorBUF cvs show errorNL errorNL - (Operand stargck: ) show errorNL /ostargck load { - dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL - } forall errorNL - (Execution stargck: ) show errorNL /estargck load { - dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL - } forall - end showpage -} def end -""" diff --git a/myenv/lib/python3.12/site-packages/PIL/PaletteFile.py b/myenv/lib/python3.12/site-packages/PIL/PaletteFile.py deleted file mode 100644 index 2a26e5d..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PaletteFile.py +++ /dev/null @@ -1,54 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read simple, teragon-style palette files -# -# History: -# 97-08-23 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from typing import IO - -from ._binary import o8 - - -class PaletteFile: - """File handler for Teragon-style palette files.""" - - rawmode = "RGB" - - def __init__(self, fp: IO[bytes]) -> None: - palette = [o8(i) * 3 for i in range(256)] - - while True: - s = fp.readline() - - if not s: - break - if s.startswith(b"#"): - continue - if len(s) > 100: - msg = "bad palette file" - raise SyntaxError(msg) - - v = [int(x) for x in s.split()] - try: - [i, r, g, b] = v - except ValueError: - [i, r] = v - g = b = r - - if 0 <= i <= 255: - palette[i] = o8(r) + o8(g) + o8(b) - - self.palette = b"".join(palette) - - def getpalette(self) -> tuple[bytes, str]: - return self.palette, self.rawmode diff --git a/myenv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py deleted file mode 100644 index 15f7129..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py +++ /dev/null @@ -1,217 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# - -## -# Image plugin for Palm pixmap images (output only). -## -from __future__ import annotations - -from typing import IO - -from . import Image, ImageFile -from ._binary import o8 -from ._binary import o16be as o16b - -# fmt: off -_Palm8BitColormapValues = ( - (255, 255, 255), (255, 204, 255), (255, 153, 255), (255, 102, 255), - (255, 51, 255), (255, 0, 255), (255, 255, 204), (255, 204, 204), - (255, 153, 204), (255, 102, 204), (255, 51, 204), (255, 0, 204), - (255, 255, 153), (255, 204, 153), (255, 153, 153), (255, 102, 153), - (255, 51, 153), (255, 0, 153), (204, 255, 255), (204, 204, 255), - (204, 153, 255), (204, 102, 255), (204, 51, 255), (204, 0, 255), - (204, 255, 204), (204, 204, 204), (204, 153, 204), (204, 102, 204), - (204, 51, 204), (204, 0, 204), (204, 255, 153), (204, 204, 153), - (204, 153, 153), (204, 102, 153), (204, 51, 153), (204, 0, 153), - (153, 255, 255), (153, 204, 255), (153, 153, 255), (153, 102, 255), - (153, 51, 255), (153, 0, 255), (153, 255, 204), (153, 204, 204), - (153, 153, 204), (153, 102, 204), (153, 51, 204), (153, 0, 204), - (153, 255, 153), (153, 204, 153), (153, 153, 153), (153, 102, 153), - (153, 51, 153), (153, 0, 153), (102, 255, 255), (102, 204, 255), - (102, 153, 255), (102, 102, 255), (102, 51, 255), (102, 0, 255), - (102, 255, 204), (102, 204, 204), (102, 153, 204), (102, 102, 204), - (102, 51, 204), (102, 0, 204), (102, 255, 153), (102, 204, 153), - (102, 153, 153), (102, 102, 153), (102, 51, 153), (102, 0, 153), - (51, 255, 255), (51, 204, 255), (51, 153, 255), (51, 102, 255), - (51, 51, 255), (51, 0, 255), (51, 255, 204), (51, 204, 204), - (51, 153, 204), (51, 102, 204), (51, 51, 204), (51, 0, 204), - (51, 255, 153), (51, 204, 153), (51, 153, 153), (51, 102, 153), - (51, 51, 153), (51, 0, 153), (0, 255, 255), (0, 204, 255), - (0, 153, 255), (0, 102, 255), (0, 51, 255), (0, 0, 255), - (0, 255, 204), (0, 204, 204), (0, 153, 204), (0, 102, 204), - (0, 51, 204), (0, 0, 204), (0, 255, 153), (0, 204, 153), - (0, 153, 153), (0, 102, 153), (0, 51, 153), (0, 0, 153), - (255, 255, 102), (255, 204, 102), (255, 153, 102), (255, 102, 102), - (255, 51, 102), (255, 0, 102), (255, 255, 51), (255, 204, 51), - (255, 153, 51), (255, 102, 51), (255, 51, 51), (255, 0, 51), - (255, 255, 0), (255, 204, 0), (255, 153, 0), (255, 102, 0), - (255, 51, 0), (255, 0, 0), (204, 255, 102), (204, 204, 102), - (204, 153, 102), (204, 102, 102), (204, 51, 102), (204, 0, 102), - (204, 255, 51), (204, 204, 51), (204, 153, 51), (204, 102, 51), - (204, 51, 51), (204, 0, 51), (204, 255, 0), (204, 204, 0), - (204, 153, 0), (204, 102, 0), (204, 51, 0), (204, 0, 0), - (153, 255, 102), (153, 204, 102), (153, 153, 102), (153, 102, 102), - (153, 51, 102), (153, 0, 102), (153, 255, 51), (153, 204, 51), - (153, 153, 51), (153, 102, 51), (153, 51, 51), (153, 0, 51), - (153, 255, 0), (153, 204, 0), (153, 153, 0), (153, 102, 0), - (153, 51, 0), (153, 0, 0), (102, 255, 102), (102, 204, 102), - (102, 153, 102), (102, 102, 102), (102, 51, 102), (102, 0, 102), - (102, 255, 51), (102, 204, 51), (102, 153, 51), (102, 102, 51), - (102, 51, 51), (102, 0, 51), (102, 255, 0), (102, 204, 0), - (102, 153, 0), (102, 102, 0), (102, 51, 0), (102, 0, 0), - (51, 255, 102), (51, 204, 102), (51, 153, 102), (51, 102, 102), - (51, 51, 102), (51, 0, 102), (51, 255, 51), (51, 204, 51), - (51, 153, 51), (51, 102, 51), (51, 51, 51), (51, 0, 51), - (51, 255, 0), (51, 204, 0), (51, 153, 0), (51, 102, 0), - (51, 51, 0), (51, 0, 0), (0, 255, 102), (0, 204, 102), - (0, 153, 102), (0, 102, 102), (0, 51, 102), (0, 0, 102), - (0, 255, 51), (0, 204, 51), (0, 153, 51), (0, 102, 51), - (0, 51, 51), (0, 0, 51), (0, 255, 0), (0, 204, 0), - (0, 153, 0), (0, 102, 0), (0, 51, 0), (17, 17, 17), - (34, 34, 34), (68, 68, 68), (85, 85, 85), (119, 119, 119), - (136, 136, 136), (170, 170, 170), (187, 187, 187), (221, 221, 221), - (238, 238, 238), (192, 192, 192), (128, 0, 0), (128, 0, 128), - (0, 128, 0), (0, 128, 128), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)) -# fmt: on - - -# so build a prototype image to be used for palette resampling -def build_prototype_image() -> Image.Image: - image = Image.new("L", (1, len(_Palm8BitColormapValues))) - image.putdata(list(range(len(_Palm8BitColormapValues)))) - palettedata: tuple[int, ...] = () - for colormapValue in _Palm8BitColormapValues: - palettedata += colormapValue - palettedata += (0, 0, 0) * (256 - len(_Palm8BitColormapValues)) - image.putpalette(palettedata) - return image - - -Palm8BitColormapImage = build_prototype_image() - -# OK, we now have in Palm8BitColormapImage, -# a "P"-mode image with the right palette -# -# -------------------------------------------------------------------- - -_FLAGS = {"custom-colormap": 0x4000, "is-compressed": 0x8000, "has-transparent": 0x2000} - -_COMPRESSION_TYPES = {"none": 0xFF, "rle": 0x01, "scanline": 0x00} - - -# -# -------------------------------------------------------------------- - -## -# (Internal) Image save plugin for the Palm format. - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode == "P": - rawmode = "P" - bpp = 8 - version = 1 - - elif im.mode == "L": - if im.encoderinfo.get("bpp") in (1, 2, 4): - # this is 8-bit grayscale, so we shift it to get the high-order bits, - # and invert it because - # Palm does grayscale from white (0) to black (1) - bpp = im.encoderinfo["bpp"] - maxval = (1 << bpp) - 1 - shift = 8 - bpp - im = im.point(lambda x: maxval - (x >> shift)) - elif im.info.get("bpp") in (1, 2, 4): - # here we assume that even though the inherent mode is 8-bit grayscale, - # only the lower bpp bits are significant. - # We invert them to match the Palm. - bpp = im.info["bpp"] - maxval = (1 << bpp) - 1 - im = im.point(lambda x: maxval - (x & maxval)) - else: - msg = f"cannot write mode {im.mode} as Palm" - raise OSError(msg) - - # we ignore the palette here - im._mode = "P" - rawmode = f"P;{bpp}" - version = 1 - - elif im.mode == "1": - # monochrome -- write it inverted, as is the Palm standard - rawmode = "1;I" - bpp = 1 - version = 0 - - else: - msg = f"cannot write mode {im.mode} as Palm" - raise OSError(msg) - - # - # make sure image data is available - im.load() - - # write header - - cols = im.size[0] - rows = im.size[1] - - rowbytes = int((cols + (16 // bpp - 1)) / (16 // bpp)) * 2 - transparent_index = 0 - compression_type = _COMPRESSION_TYPES["none"] - - flags = 0 - if im.mode == "P": - flags |= _FLAGS["custom-colormap"] - colormap = im.im.getpalette() - colors = len(colormap) // 3 - colormapsize = 4 * colors + 2 - else: - colormapsize = 0 - - if "offset" in im.info: - offset = (rowbytes * rows + 16 + 3 + colormapsize) // 4 - else: - offset = 0 - - fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags)) - fp.write(o8(bpp)) - fp.write(o8(version)) - fp.write(o16b(offset)) - fp.write(o8(transparent_index)) - fp.write(o8(compression_type)) - fp.write(o16b(0)) # reserved by Palm - - # now write colormap if necessary - - if colormapsize: - fp.write(o16b(colors)) - for i in range(colors): - fp.write(o8(i)) - fp.write(colormap[3 * i : 3 * i + 3]) - - # now convert data to raw form - ImageFile._save( - im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))] - ) - - if hasattr(fp, "flush"): - fp.flush() - - -# -# -------------------------------------------------------------------- - -Image.register_save("Palm", _save) - -Image.register_extension("Palm", ".palm") - -Image.register_mime("Palm", "image/palm") diff --git a/myenv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py deleted file mode 100644 index 3aa2499..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py +++ /dev/null @@ -1,64 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PCD file handling -# -# History: -# 96-05-10 fl Created -# 96-05-27 fl Added draft mode (128x192, 256x384) -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image, ImageFile - -## -# Image plugin for PhotoCD images. This plugin only reads the 768x512 -# image from the file; higher resolutions are encoded in a proprietary -# encoding. - - -class PcdImageFile(ImageFile.ImageFile): - format = "PCD" - format_description = "Kodak PhotoCD" - - def _open(self) -> None: - # rough - assert self.fp is not None - - self.fp.seek(2048) - s = self.fp.read(2048) - - if not s.startswith(b"PCD_"): - msg = "not a PCD file" - raise SyntaxError(msg) - - orientation = s[1538] & 3 - self.tile_post_rotate = None - if orientation == 1: - self.tile_post_rotate = 90 - elif orientation == 3: - self.tile_post_rotate = -90 - - self._mode = "RGB" - self._size = 768, 512 # FIXME: not correct for rotated images! - self.tile = [ImageFile._Tile("pcd", (0, 0) + self.size, 96 * 2048)] - - def load_end(self) -> None: - if self.tile_post_rotate: - # Handle rotated PCDs - self.im = self.im.rotate(self.tile_post_rotate) - self._size = self.im.size - - -# -# registry - -Image.register_open(PcdImageFile.format, PcdImageFile) - -Image.register_extension(PcdImageFile.format, ".pcd") diff --git a/myenv/lib/python3.12/site-packages/PIL/PcfFontFile.py b/myenv/lib/python3.12/site-packages/PIL/PcfFontFile.py deleted file mode 100644 index 0d1968b..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PcfFontFile.py +++ /dev/null @@ -1,254 +0,0 @@ -# -# THIS IS WORK IN PROGRESS -# -# The Python Imaging Library -# $Id$ -# -# portable compiled font file parser -# -# history: -# 1997-08-19 fl created -# 2003-09-13 fl fixed loading of unicode fonts -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1997-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -from typing import BinaryIO, Callable - -from . import FontFile, Image -from ._binary import i8 -from ._binary import i16be as b16 -from ._binary import i16le as l16 -from ._binary import i32be as b32 -from ._binary import i32le as l32 - -# -------------------------------------------------------------------- -# declarations - -PCF_MAGIC = 0x70636601 # "\x01fcp" - -PCF_PROPERTIES = 1 << 0 -PCF_ACCELERATORS = 1 << 1 -PCF_METRICS = 1 << 2 -PCF_BITMAPS = 1 << 3 -PCF_INK_METRICS = 1 << 4 -PCF_BDF_ENCODINGS = 1 << 5 -PCF_SWIDTHS = 1 << 6 -PCF_GLYPH_NAMES = 1 << 7 -PCF_BDF_ACCELERATORS = 1 << 8 - -BYTES_PER_ROW: list[Callable[[int], int]] = [ - lambda bits: ((bits + 7) >> 3), - lambda bits: ((bits + 15) >> 3) & ~1, - lambda bits: ((bits + 31) >> 3) & ~3, - lambda bits: ((bits + 63) >> 3) & ~7, -] - - -def sz(s: bytes, o: int) -> bytes: - return s[o : s.index(b"\0", o)] - - -class PcfFontFile(FontFile.FontFile): - """Font file plugin for the X11 PCF format.""" - - name = "name" - - def __init__(self, fp: BinaryIO, charset_encoding: str = "iso8859-1"): - self.charset_encoding = charset_encoding - - magic = l32(fp.read(4)) - if magic != PCF_MAGIC: - msg = "not a PCF file" - raise SyntaxError(msg) - - super().__init__() - - count = l32(fp.read(4)) - self.toc = {} - for i in range(count): - type = l32(fp.read(4)) - self.toc[type] = l32(fp.read(4)), l32(fp.read(4)), l32(fp.read(4)) - - self.fp = fp - - self.info = self._load_properties() - - metrics = self._load_metrics() - bitmaps = self._load_bitmaps(metrics) - encoding = self._load_encoding() - - # - # create glyph structure - - for ch, ix in enumerate(encoding): - if ix is not None: - ( - xsize, - ysize, - left, - right, - width, - ascent, - descent, - attributes, - ) = metrics[ix] - self.glyph[ch] = ( - (width, 0), - (left, descent - ysize, xsize + left, descent), - (0, 0, xsize, ysize), - bitmaps[ix], - ) - - def _getformat( - self, tag: int - ) -> tuple[BinaryIO, int, Callable[[bytes], int], Callable[[bytes], int]]: - format, size, offset = self.toc[tag] - - fp = self.fp - fp.seek(offset) - - format = l32(fp.read(4)) - - if format & 4: - i16, i32 = b16, b32 - else: - i16, i32 = l16, l32 - - return fp, format, i16, i32 - - def _load_properties(self) -> dict[bytes, bytes | int]: - # - # font properties - - properties = {} - - fp, format, i16, i32 = self._getformat(PCF_PROPERTIES) - - nprops = i32(fp.read(4)) - - # read property description - p = [(i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4))) for _ in range(nprops)] - - if nprops & 3: - fp.seek(4 - (nprops & 3), io.SEEK_CUR) # pad - - data = fp.read(i32(fp.read(4))) - - for k, s, v in p: - property_value: bytes | int = sz(data, v) if s else v - properties[sz(data, k)] = property_value - - return properties - - def _load_metrics(self) -> list[tuple[int, int, int, int, int, int, int, int]]: - # - # font metrics - - metrics: list[tuple[int, int, int, int, int, int, int, int]] = [] - - fp, format, i16, i32 = self._getformat(PCF_METRICS) - - append = metrics.append - - if (format & 0xFF00) == 0x100: - # "compressed" metrics - for i in range(i16(fp.read(2))): - left = i8(fp.read(1)) - 128 - right = i8(fp.read(1)) - 128 - width = i8(fp.read(1)) - 128 - ascent = i8(fp.read(1)) - 128 - descent = i8(fp.read(1)) - 128 - xsize = right - left - ysize = ascent + descent - append((xsize, ysize, left, right, width, ascent, descent, 0)) - - else: - # "jumbo" metrics - for i in range(i32(fp.read(4))): - left = i16(fp.read(2)) - right = i16(fp.read(2)) - width = i16(fp.read(2)) - ascent = i16(fp.read(2)) - descent = i16(fp.read(2)) - attributes = i16(fp.read(2)) - xsize = right - left - ysize = ascent + descent - append((xsize, ysize, left, right, width, ascent, descent, attributes)) - - return metrics - - def _load_bitmaps( - self, metrics: list[tuple[int, int, int, int, int, int, int, int]] - ) -> list[Image.Image]: - # - # bitmap data - - fp, format, i16, i32 = self._getformat(PCF_BITMAPS) - - nbitmaps = i32(fp.read(4)) - - if nbitmaps != len(metrics): - msg = "Wrong number of bitmaps" - raise OSError(msg) - - offsets = [i32(fp.read(4)) for _ in range(nbitmaps)] - - bitmap_sizes = [i32(fp.read(4)) for _ in range(4)] - - # byteorder = format & 4 # non-zero => MSB - bitorder = format & 8 # non-zero => MSB - padindex = format & 3 - - bitmapsize = bitmap_sizes[padindex] - offsets.append(bitmapsize) - - data = fp.read(bitmapsize) - - pad = BYTES_PER_ROW[padindex] - mode = "1;R" - if bitorder: - mode = "1" - - bitmaps = [] - for i in range(nbitmaps): - xsize, ysize = metrics[i][:2] - b, e = offsets[i : i + 2] - bitmaps.append( - Image.frombytes("1", (xsize, ysize), data[b:e], "raw", mode, pad(xsize)) - ) - - return bitmaps - - def _load_encoding(self) -> list[int | None]: - fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) - - first_col, last_col = i16(fp.read(2)), i16(fp.read(2)) - first_row, last_row = i16(fp.read(2)), i16(fp.read(2)) - - i16(fp.read(2)) # default - - nencoding = (last_col - first_col + 1) * (last_row - first_row + 1) - - # map character code to bitmap index - encoding: list[int | None] = [None] * min(256, nencoding) - - encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)] - - for i in range(first_col, len(encoding)): - try: - encoding_offset = encoding_offsets[ - ord(bytearray([i]).decode(self.charset_encoding)) - ] - if encoding_offset != 0xFFFF: - encoding[i] = encoding_offset - except UnicodeDecodeError: - # character is not supported in selected encoding - pass - - return encoding diff --git a/myenv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py deleted file mode 100644 index 458d586..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py +++ /dev/null @@ -1,228 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PCX file handling -# -# This format was originally used by ZSoft's popular PaintBrush -# program for the IBM PC. It is also supported by many MS-DOS and -# Windows applications, including the Windows PaintBrush program in -# Windows 3. -# -# history: -# 1995-09-01 fl Created -# 1996-05-20 fl Fixed RGB support -# 1997-01-03 fl Fixed 2-bit and 4-bit support -# 1999-02-03 fl Fixed 8-bit support (broken in 1.0b1) -# 1999-02-07 fl Added write support -# 2002-06-09 fl Made 2-bit and 4-bit support a bit more robust -# 2002-07-30 fl Seek from to current position, not beginning of file -# 2003-06-03 fl Extract DPI settings (info["dpi"]) -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import logging -from typing import IO - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 - -logger = logging.getLogger(__name__) - - -def _accept(prefix: bytes) -> bool: - return prefix[0] == 10 and prefix[1] in [0, 2, 3, 5] - - -## -# Image plugin for Paintbrush images. - - -class PcxImageFile(ImageFile.ImageFile): - format = "PCX" - format_description = "Paintbrush" - - def _open(self) -> None: - # header - assert self.fp is not None - - s = self.fp.read(68) - if not _accept(s): - msg = "not a PCX file" - raise SyntaxError(msg) - - # image - bbox = i16(s, 4), i16(s, 6), i16(s, 8) + 1, i16(s, 10) + 1 - if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]: - msg = "bad PCX image size" - raise SyntaxError(msg) - logger.debug("BBox: %s %s %s %s", *bbox) - - offset = self.fp.tell() + 60 - - # format - version = s[1] - bits = s[3] - planes = s[65] - provided_stride = i16(s, 66) - logger.debug( - "PCX version %s, bits %s, planes %s, stride %s", - version, - bits, - planes, - provided_stride, - ) - - self.info["dpi"] = i16(s, 12), i16(s, 14) - - if bits == 1 and planes == 1: - mode = rawmode = "1" - - elif bits == 1 and planes in (2, 4): - mode = "P" - rawmode = f"P;{planes}L" - self.palette = ImagePalette.raw("RGB", s[16:64]) - - elif version == 5 and bits == 8 and planes == 1: - mode = rawmode = "L" - # FIXME: hey, this doesn't work with the incremental loader !!! - self.fp.seek(-769, io.SEEK_END) - s = self.fp.read(769) - if len(s) == 769 and s[0] == 12: - # check if the palette is linear grayscale - for i in range(256): - if s[i * 3 + 1 : i * 3 + 4] != o8(i) * 3: - mode = rawmode = "P" - break - if mode == "P": - self.palette = ImagePalette.raw("RGB", s[1:]) - - elif version == 5 and bits == 8 and planes == 3: - mode = "RGB" - rawmode = "RGB;L" - - else: - msg = "unknown PCX mode" - raise OSError(msg) - - self._mode = mode - self._size = bbox[2] - bbox[0], bbox[3] - bbox[1] - - # Don't trust the passed in stride. - # Calculate the approximate position for ourselves. - # CVE-2020-35653 - stride = (self._size[0] * bits + 7) // 8 - - # While the specification states that this must be even, - # not all images follow this - if provided_stride != stride: - stride += stride % 2 - - bbox = (0, 0) + self.size - logger.debug("size: %sx%s", *self.size) - - self.tile = [ImageFile._Tile("pcx", bbox, offset, (rawmode, planes * stride))] - - -# -------------------------------------------------------------------- -# save PCX files - - -SAVE = { - # mode: (version, bits, planes, raw mode) - "1": (2, 1, 1, "1"), - "L": (5, 8, 1, "L"), - "P": (5, 8, 1, "P"), - "RGB": (5, 8, 3, "RGB;L"), -} - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - try: - version, bits, planes, rawmode = SAVE[im.mode] - except KeyError as e: - msg = f"Cannot save {im.mode} images as PCX" - raise ValueError(msg) from e - - # bytes per plane - stride = (im.size[0] * bits + 7) // 8 - # stride should be even - stride += stride % 2 - # Stride needs to be kept in sync with the PcxEncode.c version. - # Ideally it should be passed in in the state, but the bytes value - # gets overwritten. - - logger.debug( - "PcxImagePlugin._save: xwidth: %d, bits: %d, stride: %d", - im.size[0], - bits, - stride, - ) - - # under windows, we could determine the current screen size with - # "Image.core.display_mode()[1]", but I think that's overkill... - - screen = im.size - - dpi = 100, 100 - - # PCX header - fp.write( - o8(10) - + o8(version) - + o8(1) - + o8(bits) - + o16(0) - + o16(0) - + o16(im.size[0] - 1) - + o16(im.size[1] - 1) - + o16(dpi[0]) - + o16(dpi[1]) - + b"\0" * 24 - + b"\xff" * 24 - + b"\0" - + o8(planes) - + o16(stride) - + o16(1) - + o16(screen[0]) - + o16(screen[1]) - + b"\0" * 54 - ) - - assert fp.tell() == 128 - - ImageFile._save( - im, fp, [ImageFile._Tile("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))] - ) - - if im.mode == "P": - # colour palette - fp.write(o8(12)) - palette = im.im.getpalette("RGB", "RGB") - palette += b"\x00" * (768 - len(palette)) - fp.write(palette) # 768 bytes - elif im.mode == "L": - # grayscale palette - fp.write(o8(12)) - for i in range(256): - fp.write(o8(i) * 3) - - -# -------------------------------------------------------------------- -# registry - - -Image.register_open(PcxImageFile.format, PcxImageFile, _accept) -Image.register_save(PcxImageFile.format, _save) - -Image.register_extension(PcxImageFile.format, ".pcx") - -Image.register_mime(PcxImageFile.format, "image/x-pcx") diff --git a/myenv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py deleted file mode 100644 index e9c20dd..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py +++ /dev/null @@ -1,311 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PDF (Acrobat) file handling -# -# History: -# 1996-07-16 fl Created -# 1997-01-18 fl Fixed header -# 2004-02-21 fl Fixes for 1/L/CMYK images, etc. -# 2004-02-24 fl Fixes for 1 and P images. -# -# Copyright (c) 1997-2004 by Secret Labs AB. All rights reserved. -# Copyright (c) 1996-1997 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -## -# Image plugin for PDF images (output only). -## -from __future__ import annotations - -import io -import math -import os -import time -from typing import IO, Any - -from . import Image, ImageFile, ImageSequence, PdfParser, __version__, features - -# -# -------------------------------------------------------------------- - -# object ids: -# 1. catalogue -# 2. pages -# 3. image -# 4. page -# 5. page contents - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - _save(im, fp, filename, save_all=True) - - -## -# (Internal) Image save plugin for the PDF format. - - -def _write_image( - im: Image.Image, - filename: str | bytes, - existing_pdf: PdfParser.PdfParser, - image_refs: list[PdfParser.IndirectReference], -) -> tuple[PdfParser.IndirectReference, str]: - # FIXME: Should replace ASCIIHexDecode with RunLengthDecode - # (packbits) or LZWDecode (tiff/lzw compression). Note that - # PDF 1.2 also supports Flatedecode (zip compression). - - params = None - decode = None - - # - # Get image characteristics - - width, height = im.size - - dict_obj: dict[str, Any] = {"BitsPerComponent": 8} - if im.mode == "1": - if features.check("libtiff"): - decode_filter = "CCITTFaxDecode" - dict_obj["BitsPerComponent"] = 1 - params = PdfParser.PdfArray( - [ - PdfParser.PdfDict( - { - "K": -1, - "BlackIs1": True, - "Columns": width, - "Rows": height, - } - ) - ] - ) - else: - decode_filter = "DCTDecode" - dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceGray") - procset = "ImageB" # grayscale - elif im.mode == "L": - decode_filter = "DCTDecode" - # params = f"<< /Predictor 15 /Columns {width-2} >>" - dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceGray") - procset = "ImageB" # grayscale - elif im.mode == "LA": - decode_filter = "JPXDecode" - # params = f"<< /Predictor 15 /Columns {width-2} >>" - procset = "ImageB" # grayscale - dict_obj["SMaskInData"] = 1 - elif im.mode == "P": - decode_filter = "ASCIIHexDecode" - palette = im.getpalette() - assert palette is not None - dict_obj["ColorSpace"] = [ - PdfParser.PdfName("Indexed"), - PdfParser.PdfName("DeviceRGB"), - len(palette) // 3 - 1, - PdfParser.PdfBinary(palette), - ] - procset = "ImageI" # indexed color - - if "transparency" in im.info: - smask = im.convert("LA").getchannel("A") - smask.encoderinfo = {} - - image_ref = _write_image(smask, filename, existing_pdf, image_refs)[0] - dict_obj["SMask"] = image_ref - elif im.mode == "RGB": - decode_filter = "DCTDecode" - dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceRGB") - procset = "ImageC" # color images - elif im.mode == "RGBA": - decode_filter = "JPXDecode" - procset = "ImageC" # color images - dict_obj["SMaskInData"] = 1 - elif im.mode == "CMYK": - decode_filter = "DCTDecode" - dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceCMYK") - procset = "ImageC" # color images - decode = [1, 0, 1, 0, 1, 0, 1, 0] - else: - msg = f"cannot save mode {im.mode}" - raise ValueError(msg) - - # - # image - - op = io.BytesIO() - - if decode_filter == "ASCIIHexDecode": - ImageFile._save(im, op, [ImageFile._Tile("hex", (0, 0) + im.size, 0, im.mode)]) - elif decode_filter == "CCITTFaxDecode": - im.save( - op, - "TIFF", - compression="group4", - # use a single strip - strip_size=math.ceil(width / 8) * height, - ) - elif decode_filter == "DCTDecode": - Image.SAVE["JPEG"](im, op, filename) - elif decode_filter == "JPXDecode": - del dict_obj["BitsPerComponent"] - Image.SAVE["JPEG2000"](im, op, filename) - else: - msg = f"unsupported PDF filter ({decode_filter})" - raise ValueError(msg) - - stream = op.getvalue() - filter: PdfParser.PdfArray | PdfParser.PdfName - if decode_filter == "CCITTFaxDecode": - stream = stream[8:] - filter = PdfParser.PdfArray([PdfParser.PdfName(decode_filter)]) - else: - filter = PdfParser.PdfName(decode_filter) - - image_ref = image_refs.pop(0) - existing_pdf.write_obj( - image_ref, - stream=stream, - Type=PdfParser.PdfName("XObject"), - Subtype=PdfParser.PdfName("Image"), - Width=width, # * 72.0 / x_resolution, - Height=height, # * 72.0 / y_resolution, - Filter=filter, - Decode=decode, - DecodeParms=params, - **dict_obj, - ) - - return image_ref, procset - - -def _save( - im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False -) -> None: - is_appending = im.encoderinfo.get("append", False) - filename_str = filename.decode() if isinstance(filename, bytes) else filename - if is_appending: - existing_pdf = PdfParser.PdfParser(f=fp, filename=filename_str, mode="r+b") - else: - existing_pdf = PdfParser.PdfParser(f=fp, filename=filename_str, mode="w+b") - - dpi = im.encoderinfo.get("dpi") - if dpi: - x_resolution = dpi[0] - y_resolution = dpi[1] - else: - x_resolution = y_resolution = im.encoderinfo.get("resolution", 72.0) - - info = { - "title": ( - None if is_appending else os.path.splitext(os.path.basename(filename))[0] - ), - "author": None, - "subject": None, - "keywords": None, - "creator": None, - "producer": None, - "creationDate": None if is_appending else time.gmtime(), - "modDate": None if is_appending else time.gmtime(), - } - for k, default in info.items(): - v = im.encoderinfo.get(k) if k in im.encoderinfo else default - if v: - existing_pdf.info[k[0].upper() + k[1:]] = v - - # - # make sure image data is available - im.load() - - existing_pdf.start_writing() - existing_pdf.write_header() - existing_pdf.write_comment(f"created by Pillow {__version__} PDF driver") - - # - # pages - ims = [im] - if save_all: - append_images = im.encoderinfo.get("append_images", []) - for append_im in append_images: - append_im.encoderinfo = im.encoderinfo.copy() - ims.append(append_im) - number_of_pages = 0 - image_refs = [] - page_refs = [] - contents_refs = [] - for im in ims: - im_number_of_pages = 1 - if save_all: - im_number_of_pages = getattr(im, "n_frames", 1) - number_of_pages += im_number_of_pages - for i in range(im_number_of_pages): - image_refs.append(existing_pdf.next_object_id(0)) - if im.mode == "P" and "transparency" in im.info: - image_refs.append(existing_pdf.next_object_id(0)) - - page_refs.append(existing_pdf.next_object_id(0)) - contents_refs.append(existing_pdf.next_object_id(0)) - existing_pdf.pages.append(page_refs[-1]) - - # - # catalog and list of pages - existing_pdf.write_catalog() - - page_number = 0 - for im_sequence in ims: - im_pages: ImageSequence.Iterator | list[Image.Image] = ( - ImageSequence.Iterator(im_sequence) if save_all else [im_sequence] - ) - for im in im_pages: - image_ref, procset = _write_image(im, filename, existing_pdf, image_refs) - - # - # page - - existing_pdf.write_page( - page_refs[page_number], - Resources=PdfParser.PdfDict( - ProcSet=[PdfParser.PdfName("PDF"), PdfParser.PdfName(procset)], - XObject=PdfParser.PdfDict(image=image_ref), - ), - MediaBox=[ - 0, - 0, - im.width * 72.0 / x_resolution, - im.height * 72.0 / y_resolution, - ], - Contents=contents_refs[page_number], - ) - - # - # page contents - - page_contents = b"q %f 0 0 %f 0 0 cm /image Do Q\n" % ( - im.width * 72.0 / x_resolution, - im.height * 72.0 / y_resolution, - ) - - existing_pdf.write_obj(contents_refs[page_number], stream=page_contents) - - page_number += 1 - - # - # trailer - existing_pdf.write_xref_and_trailer() - if hasattr(fp, "flush"): - fp.flush() - existing_pdf.close() - - -# -# -------------------------------------------------------------------- - - -Image.register_save("PDF", _save) -Image.register_save_all("PDF", _save_all) - -Image.register_extension("PDF", ".pdf") - -Image.register_mime("PDF", "application/pdf") diff --git a/myenv/lib/python3.12/site-packages/PIL/PdfParser.py b/myenv/lib/python3.12/site-packages/PIL/PdfParser.py deleted file mode 100644 index 73d8c21..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PdfParser.py +++ /dev/null @@ -1,1074 +0,0 @@ -from __future__ import annotations - -import calendar -import codecs -import collections -import mmap -import os -import re -import time -import zlib -from typing import IO, Any, NamedTuple, Union - - -# see 7.9.2.2 Text String Type on page 86 and D.3 PDFDocEncoding Character Set -# on page 656 -def encode_text(s: str) -> bytes: - return codecs.BOM_UTF16_BE + s.encode("utf_16_be") - - -PDFDocEncoding = { - 0x16: "\u0017", - 0x18: "\u02d8", - 0x19: "\u02c7", - 0x1A: "\u02c6", - 0x1B: "\u02d9", - 0x1C: "\u02dd", - 0x1D: "\u02db", - 0x1E: "\u02da", - 0x1F: "\u02dc", - 0x80: "\u2022", - 0x81: "\u2020", - 0x82: "\u2021", - 0x83: "\u2026", - 0x84: "\u2014", - 0x85: "\u2013", - 0x86: "\u0192", - 0x87: "\u2044", - 0x88: "\u2039", - 0x89: "\u203a", - 0x8A: "\u2212", - 0x8B: "\u2030", - 0x8C: "\u201e", - 0x8D: "\u201c", - 0x8E: "\u201d", - 0x8F: "\u2018", - 0x90: "\u2019", - 0x91: "\u201a", - 0x92: "\u2122", - 0x93: "\ufb01", - 0x94: "\ufb02", - 0x95: "\u0141", - 0x96: "\u0152", - 0x97: "\u0160", - 0x98: "\u0178", - 0x99: "\u017d", - 0x9A: "\u0131", - 0x9B: "\u0142", - 0x9C: "\u0153", - 0x9D: "\u0161", - 0x9E: "\u017e", - 0xA0: "\u20ac", -} - - -def decode_text(b: bytes) -> str: - if b[: len(codecs.BOM_UTF16_BE)] == codecs.BOM_UTF16_BE: - return b[len(codecs.BOM_UTF16_BE) :].decode("utf_16_be") - else: - return "".join(PDFDocEncoding.get(byte, chr(byte)) for byte in b) - - -class PdfFormatError(RuntimeError): - """An error that probably indicates a syntactic or semantic error in the - PDF file structure""" - - pass - - -def check_format_condition(condition: bool, error_message: str) -> None: - if not condition: - raise PdfFormatError(error_message) - - -class IndirectReferenceTuple(NamedTuple): - object_id: int - generation: int - - -class IndirectReference(IndirectReferenceTuple): - def __str__(self) -> str: - return f"{self.object_id} {self.generation} R" - - def __bytes__(self) -> bytes: - return self.__str__().encode("us-ascii") - - def __eq__(self, other: object) -> bool: - if self.__class__ is not other.__class__: - return False - assert isinstance(other, IndirectReference) - return other.object_id == self.object_id and other.generation == self.generation - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __hash__(self) -> int: - return hash((self.object_id, self.generation)) - - -class IndirectObjectDef(IndirectReference): - def __str__(self) -> str: - return f"{self.object_id} {self.generation} obj" - - -class XrefTable: - def __init__(self) -> None: - self.existing_entries: dict[int, tuple[int, int]] = ( - {} - ) # object ID => (offset, generation) - self.new_entries: dict[int, tuple[int, int]] = ( - {} - ) # object ID => (offset, generation) - self.deleted_entries = {0: 65536} # object ID => generation - self.reading_finished = False - - def __setitem__(self, key: int, value: tuple[int, int]) -> None: - if self.reading_finished: - self.new_entries[key] = value - else: - self.existing_entries[key] = value - if key in self.deleted_entries: - del self.deleted_entries[key] - - def __getitem__(self, key: int) -> tuple[int, int]: - try: - return self.new_entries[key] - except KeyError: - return self.existing_entries[key] - - def __delitem__(self, key: int) -> None: - if key in self.new_entries: - generation = self.new_entries[key][1] + 1 - del self.new_entries[key] - self.deleted_entries[key] = generation - elif key in self.existing_entries: - generation = self.existing_entries[key][1] + 1 - self.deleted_entries[key] = generation - elif key in self.deleted_entries: - generation = self.deleted_entries[key] - else: - msg = f"object ID {key} cannot be deleted because it doesn't exist" - raise IndexError(msg) - - def __contains__(self, key: int) -> bool: - return key in self.existing_entries or key in self.new_entries - - def __len__(self) -> int: - return len( - set(self.existing_entries.keys()) - | set(self.new_entries.keys()) - | set(self.deleted_entries.keys()) - ) - - def keys(self) -> set[int]: - return ( - set(self.existing_entries.keys()) - set(self.deleted_entries.keys()) - ) | set(self.new_entries.keys()) - - def write(self, f: IO[bytes]) -> int: - keys = sorted(set(self.new_entries.keys()) | set(self.deleted_entries.keys())) - deleted_keys = sorted(set(self.deleted_entries.keys())) - startxref = f.tell() - f.write(b"xref\n") - while keys: - # find a contiguous sequence of object IDs - prev: int | None = None - for index, key in enumerate(keys): - if prev is None or prev + 1 == key: - prev = key - else: - contiguous_keys = keys[:index] - keys = keys[index:] - break - else: - contiguous_keys = keys - keys = [] - f.write(b"%d %d\n" % (contiguous_keys[0], len(contiguous_keys))) - for object_id in contiguous_keys: - if object_id in self.new_entries: - f.write(b"%010d %05d n \n" % self.new_entries[object_id]) - else: - this_deleted_object_id = deleted_keys.pop(0) - check_format_condition( - object_id == this_deleted_object_id, - f"expected the next deleted object ID to be {object_id}, " - f"instead found {this_deleted_object_id}", - ) - try: - next_in_linked_list = deleted_keys[0] - except IndexError: - next_in_linked_list = 0 - f.write( - b"%010d %05d f \n" - % (next_in_linked_list, self.deleted_entries[object_id]) - ) - return startxref - - -class PdfName: - name: bytes - - def __init__(self, name: PdfName | bytes | str) -> None: - if isinstance(name, PdfName): - self.name = name.name - elif isinstance(name, bytes): - self.name = name - else: - self.name = name.encode("us-ascii") - - def name_as_str(self) -> str: - return self.name.decode("us-ascii") - - def __eq__(self, other: object) -> bool: - return ( - isinstance(other, PdfName) and other.name == self.name - ) or other == self.name - - def __hash__(self) -> int: - return hash(self.name) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({repr(self.name)})" - - @classmethod - def from_pdf_stream(cls, data: bytes) -> PdfName: - return cls(PdfParser.interpret_name(data)) - - allowed_chars = set(range(33, 127)) - {ord(c) for c in "#%/()<>[]{}"} - - def __bytes__(self) -> bytes: - result = bytearray(b"/") - for b in self.name: - if b in self.allowed_chars: - result.append(b) - else: - result.extend(b"#%02X" % b) - return bytes(result) - - -class PdfArray(list[Any]): - def __bytes__(self) -> bytes: - return b"[ " + b" ".join(pdf_repr(x) for x in self) + b" ]" - - -TYPE_CHECKING = False -if TYPE_CHECKING: - _DictBase = collections.UserDict[Union[str, bytes], Any] -else: - _DictBase = collections.UserDict - - -class PdfDict(_DictBase): - def __setattr__(self, key: str, value: Any) -> None: - if key == "data": - collections.UserDict.__setattr__(self, key, value) - else: - self[key.encode("us-ascii")] = value - - def __getattr__(self, key: str) -> str | time.struct_time: - try: - value = self[key.encode("us-ascii")] - except KeyError as e: - raise AttributeError(key) from e - if isinstance(value, bytes): - value = decode_text(value) - if key.endswith("Date"): - if value.startswith("D:"): - value = value[2:] - - relationship = "Z" - if len(value) > 17: - relationship = value[14] - offset = int(value[15:17]) * 60 - if len(value) > 20: - offset += int(value[18:20]) - - format = "%Y%m%d%H%M%S"[: len(value) - 2] - value = time.strptime(value[: len(format) + 2], format) - if relationship in ["+", "-"]: - offset *= 60 - if relationship == "+": - offset *= -1 - value = time.gmtime(calendar.timegm(value) + offset) - return value - - def __bytes__(self) -> bytes: - out = bytearray(b"<<") - for key, value in self.items(): - if value is None: - continue - value = pdf_repr(value) - out.extend(b"\n") - out.extend(bytes(PdfName(key))) - out.extend(b" ") - out.extend(value) - out.extend(b"\n>>") - return bytes(out) - - -class PdfBinary: - def __init__(self, data: list[int] | bytes) -> None: - self.data = data - - def __bytes__(self) -> bytes: - return b"<%s>" % b"".join(b"%02X" % b for b in self.data) - - -class PdfStream: - def __init__(self, dictionary: PdfDict, buf: bytes) -> None: - self.dictionary = dictionary - self.buf = buf - - def decode(self) -> bytes: - try: - filter = self.dictionary[b"Filter"] - except KeyError: - return self.buf - if filter == b"FlateDecode": - try: - expected_length = self.dictionary[b"DL"] - except KeyError: - expected_length = self.dictionary[b"Length"] - return zlib.decompress(self.buf, bufsize=int(expected_length)) - else: - msg = f"stream filter {repr(filter)} unknown/unsupported" - raise NotImplementedError(msg) - - -def pdf_repr(x: Any) -> bytes: - if x is True: - return b"true" - elif x is False: - return b"false" - elif x is None: - return b"null" - elif isinstance(x, (PdfName, PdfDict, PdfArray, PdfBinary)): - return bytes(x) - elif isinstance(x, (int, float)): - return str(x).encode("us-ascii") - elif isinstance(x, time.struct_time): - return b"(D:" + time.strftime("%Y%m%d%H%M%SZ", x).encode("us-ascii") + b")" - elif isinstance(x, dict): - return bytes(PdfDict(x)) - elif isinstance(x, list): - return bytes(PdfArray(x)) - elif isinstance(x, str): - return pdf_repr(encode_text(x)) - elif isinstance(x, bytes): - # XXX escape more chars? handle binary garbage - x = x.replace(b"\\", b"\\\\") - x = x.replace(b"(", b"\\(") - x = x.replace(b")", b"\\)") - return b"(" + x + b")" - else: - return bytes(x) - - -class PdfParser: - """Based on - https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf - Supports PDF up to 1.4 - """ - - def __init__( - self, - filename: str | None = None, - f: IO[bytes] | None = None, - buf: bytes | bytearray | None = None, - start_offset: int = 0, - mode: str = "rb", - ) -> None: - if buf and f: - msg = "specify buf or f or filename, but not both buf and f" - raise RuntimeError(msg) - self.filename = filename - self.buf: bytes | bytearray | mmap.mmap | None = buf - self.f = f - self.start_offset = start_offset - self.should_close_buf = False - self.should_close_file = False - if filename is not None and f is None: - self.f = f = open(filename, mode) - self.should_close_file = True - if f is not None: - self.buf = self.get_buf_from_file(f) - self.should_close_buf = True - if not filename and hasattr(f, "name"): - self.filename = f.name - self.cached_objects: dict[IndirectReference, Any] = {} - self.root_ref: IndirectReference | None - self.info_ref: IndirectReference | None - self.pages_ref: IndirectReference | None - self.last_xref_section_offset: int | None - if self.buf: - self.read_pdf_info() - else: - self.file_size_total = self.file_size_this = 0 - self.root = PdfDict() - self.root_ref = None - self.info = PdfDict() - self.info_ref = None - self.page_tree_root = PdfDict() - self.pages: list[IndirectReference] = [] - self.orig_pages: list[IndirectReference] = [] - self.pages_ref = None - self.last_xref_section_offset = None - self.trailer_dict: dict[bytes, Any] = {} - self.xref_table = XrefTable() - self.xref_table.reading_finished = True - if f: - self.seek_end() - - def __enter__(self) -> PdfParser: - return self - - def __exit__(self, *args: object) -> None: - self.close() - - def start_writing(self) -> None: - self.close_buf() - self.seek_end() - - def close_buf(self) -> None: - if isinstance(self.buf, mmap.mmap): - self.buf.close() - self.buf = None - - def close(self) -> None: - if self.should_close_buf: - self.close_buf() - if self.f is not None and self.should_close_file: - self.f.close() - self.f = None - - def seek_end(self) -> None: - assert self.f is not None - self.f.seek(0, os.SEEK_END) - - def write_header(self) -> None: - assert self.f is not None - self.f.write(b"%PDF-1.4\n") - - def write_comment(self, s: str) -> None: - assert self.f is not None - self.f.write(f"% {s}\n".encode()) - - def write_catalog(self) -> IndirectReference: - assert self.f is not None - self.del_root() - self.root_ref = self.next_object_id(self.f.tell()) - self.pages_ref = self.next_object_id(0) - self.rewrite_pages() - self.write_obj(self.root_ref, Type=PdfName(b"Catalog"), Pages=self.pages_ref) - self.write_obj( - self.pages_ref, - Type=PdfName(b"Pages"), - Count=len(self.pages), - Kids=self.pages, - ) - return self.root_ref - - def rewrite_pages(self) -> None: - pages_tree_nodes_to_delete = [] - for i, page_ref in enumerate(self.orig_pages): - page_info = self.cached_objects[page_ref] - del self.xref_table[page_ref.object_id] - pages_tree_nodes_to_delete.append(page_info[PdfName(b"Parent")]) - if page_ref not in self.pages: - # the page has been deleted - continue - # make dict keys into strings for passing to write_page - stringified_page_info = {} - for key, value in page_info.items(): - # key should be a PdfName - stringified_page_info[key.name_as_str()] = value - stringified_page_info["Parent"] = self.pages_ref - new_page_ref = self.write_page(None, **stringified_page_info) - for j, cur_page_ref in enumerate(self.pages): - if cur_page_ref == page_ref: - # replace the page reference with the new one - self.pages[j] = new_page_ref - # delete redundant Pages tree nodes from xref table - for pages_tree_node_ref in pages_tree_nodes_to_delete: - while pages_tree_node_ref: - pages_tree_node = self.cached_objects[pages_tree_node_ref] - if pages_tree_node_ref.object_id in self.xref_table: - del self.xref_table[pages_tree_node_ref.object_id] - pages_tree_node_ref = pages_tree_node.get(b"Parent", None) - self.orig_pages = [] - - def write_xref_and_trailer( - self, new_root_ref: IndirectReference | None = None - ) -> None: - assert self.f is not None - if new_root_ref: - self.del_root() - self.root_ref = new_root_ref - if self.info: - self.info_ref = self.write_obj(None, self.info) - start_xref = self.xref_table.write(self.f) - num_entries = len(self.xref_table) - trailer_dict: dict[str | bytes, Any] = { - b"Root": self.root_ref, - b"Size": num_entries, - } - if self.last_xref_section_offset is not None: - trailer_dict[b"Prev"] = self.last_xref_section_offset - if self.info: - trailer_dict[b"Info"] = self.info_ref - self.last_xref_section_offset = start_xref - self.f.write( - b"trailer\n" - + bytes(PdfDict(trailer_dict)) - + b"\nstartxref\n%d\n%%%%EOF" % start_xref - ) - - def write_page( - self, ref: int | IndirectReference | None, *objs: Any, **dict_obj: Any - ) -> IndirectReference: - obj_ref = self.pages[ref] if isinstance(ref, int) else ref - if "Type" not in dict_obj: - dict_obj["Type"] = PdfName(b"Page") - if "Parent" not in dict_obj: - dict_obj["Parent"] = self.pages_ref - return self.write_obj(obj_ref, *objs, **dict_obj) - - def write_obj( - self, ref: IndirectReference | None, *objs: Any, **dict_obj: Any - ) -> IndirectReference: - assert self.f is not None - f = self.f - if ref is None: - ref = self.next_object_id(f.tell()) - else: - self.xref_table[ref.object_id] = (f.tell(), ref.generation) - f.write(bytes(IndirectObjectDef(*ref))) - stream = dict_obj.pop("stream", None) - if stream is not None: - dict_obj["Length"] = len(stream) - if dict_obj: - f.write(pdf_repr(dict_obj)) - for obj in objs: - f.write(pdf_repr(obj)) - if stream is not None: - f.write(b"stream\n") - f.write(stream) - f.write(b"\nendstream\n") - f.write(b"endobj\n") - return ref - - def del_root(self) -> None: - if self.root_ref is None: - return - del self.xref_table[self.root_ref.object_id] - del self.xref_table[self.root[b"Pages"].object_id] - - @staticmethod - def get_buf_from_file(f: IO[bytes]) -> bytes | mmap.mmap: - if hasattr(f, "getbuffer"): - return f.getbuffer() - elif hasattr(f, "getvalue"): - return f.getvalue() - else: - try: - return mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) - except ValueError: # cannot mmap an empty file - return b"" - - def read_pdf_info(self) -> None: - assert self.buf is not None - self.file_size_total = len(self.buf) - self.file_size_this = self.file_size_total - self.start_offset - self.read_trailer() - check_format_condition( - self.trailer_dict.get(b"Root") is not None, "Root is missing" - ) - self.root_ref = self.trailer_dict[b"Root"] - assert self.root_ref is not None - self.info_ref = self.trailer_dict.get(b"Info", None) - self.root = PdfDict(self.read_indirect(self.root_ref)) - if self.info_ref is None: - self.info = PdfDict() - else: - self.info = PdfDict(self.read_indirect(self.info_ref)) - check_format_condition(b"Type" in self.root, "/Type missing in Root") - check_format_condition( - self.root[b"Type"] == b"Catalog", "/Type in Root is not /Catalog" - ) - check_format_condition( - self.root.get(b"Pages") is not None, "/Pages missing in Root" - ) - check_format_condition( - isinstance(self.root[b"Pages"], IndirectReference), - "/Pages in Root is not an indirect reference", - ) - self.pages_ref = self.root[b"Pages"] - assert self.pages_ref is not None - self.page_tree_root = self.read_indirect(self.pages_ref) - self.pages = self.linearize_page_tree(self.page_tree_root) - # save the original list of page references - # in case the user modifies, adds or deletes some pages - # and we need to rewrite the pages and their list - self.orig_pages = self.pages[:] - - def next_object_id(self, offset: int | None = None) -> IndirectReference: - try: - # TODO: support reuse of deleted objects - reference = IndirectReference(max(self.xref_table.keys()) + 1, 0) - except ValueError: - reference = IndirectReference(1, 0) - if offset is not None: - self.xref_table[reference.object_id] = (offset, 0) - return reference - - delimiter = rb"[][()<>{}/%]" - delimiter_or_ws = rb"[][()<>{}/%\000\011\012\014\015\040]" - whitespace = rb"[\000\011\012\014\015\040]" - whitespace_or_hex = rb"[\000\011\012\014\015\0400-9a-fA-F]" - whitespace_optional = whitespace + b"*" - whitespace_mandatory = whitespace + b"+" - # No "\012" aka "\n" or "\015" aka "\r": - whitespace_optional_no_nl = rb"[\000\011\014\040]*" - newline_only = rb"[\r\n]+" - newline = whitespace_optional_no_nl + newline_only + whitespace_optional_no_nl - re_trailer_end = re.compile( - whitespace_mandatory - + rb"trailer" - + whitespace_optional - + rb"<<(.*>>)" - + newline - + rb"startxref" - + newline - + rb"([0-9]+)" - + newline - + rb"%%EOF" - + whitespace_optional - + rb"$", - re.DOTALL, - ) - re_trailer_prev = re.compile( - whitespace_optional - + rb"trailer" - + whitespace_optional - + rb"<<(.*?>>)" - + newline - + rb"startxref" - + newline - + rb"([0-9]+)" - + newline - + rb"%%EOF" - + whitespace_optional, - re.DOTALL, - ) - - def read_trailer(self) -> None: - assert self.buf is not None - search_start_offset = len(self.buf) - 16384 - if search_start_offset < self.start_offset: - search_start_offset = self.start_offset - m = self.re_trailer_end.search(self.buf, search_start_offset) - check_format_condition(m is not None, "trailer end not found") - # make sure we found the LAST trailer - last_match = m - while m: - last_match = m - m = self.re_trailer_end.search(self.buf, m.start() + 16) - if not m: - m = last_match - assert m is not None - trailer_data = m.group(1) - self.last_xref_section_offset = int(m.group(2)) - self.trailer_dict = self.interpret_trailer(trailer_data) - self.xref_table = XrefTable() - self.read_xref_table(xref_section_offset=self.last_xref_section_offset) - if b"Prev" in self.trailer_dict: - self.read_prev_trailer(self.trailer_dict[b"Prev"]) - - def read_prev_trailer(self, xref_section_offset: int) -> None: - assert self.buf is not None - trailer_offset = self.read_xref_table(xref_section_offset=xref_section_offset) - m = self.re_trailer_prev.search( - self.buf[trailer_offset : trailer_offset + 16384] - ) - check_format_condition(m is not None, "previous trailer not found") - assert m is not None - trailer_data = m.group(1) - check_format_condition( - int(m.group(2)) == xref_section_offset, - "xref section offset in previous trailer doesn't match what was expected", - ) - trailer_dict = self.interpret_trailer(trailer_data) - if b"Prev" in trailer_dict: - self.read_prev_trailer(trailer_dict[b"Prev"]) - - re_whitespace_optional = re.compile(whitespace_optional) - re_name = re.compile( - whitespace_optional - + rb"/([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=" - + delimiter_or_ws - + rb")" - ) - re_dict_start = re.compile(whitespace_optional + rb"<<") - re_dict_end = re.compile(whitespace_optional + rb">>" + whitespace_optional) - - @classmethod - def interpret_trailer(cls, trailer_data: bytes) -> dict[bytes, Any]: - trailer = {} - offset = 0 - while True: - m = cls.re_name.match(trailer_data, offset) - if not m: - m = cls.re_dict_end.match(trailer_data, offset) - check_format_condition( - m is not None and m.end() == len(trailer_data), - "name not found in trailer, remaining data: " - + repr(trailer_data[offset:]), - ) - break - key = cls.interpret_name(m.group(1)) - assert isinstance(key, bytes) - value, value_offset = cls.get_value(trailer_data, m.end()) - trailer[key] = value - if value_offset is None: - break - offset = value_offset - check_format_condition( - b"Size" in trailer and isinstance(trailer[b"Size"], int), - "/Size not in trailer or not an integer", - ) - check_format_condition( - b"Root" in trailer and isinstance(trailer[b"Root"], IndirectReference), - "/Root not in trailer or not an indirect reference", - ) - return trailer - - re_hashes_in_name = re.compile(rb"([^#]*)(#([0-9a-fA-F]{2}))?") - - @classmethod - def interpret_name(cls, raw: bytes, as_text: bool = False) -> str | bytes: - name = b"" - for m in cls.re_hashes_in_name.finditer(raw): - if m.group(3): - name += m.group(1) + bytearray.fromhex(m.group(3).decode("us-ascii")) - else: - name += m.group(1) - if as_text: - return name.decode("utf-8") - else: - return bytes(name) - - re_null = re.compile(whitespace_optional + rb"null(?=" + delimiter_or_ws + rb")") - re_true = re.compile(whitespace_optional + rb"true(?=" + delimiter_or_ws + rb")") - re_false = re.compile(whitespace_optional + rb"false(?=" + delimiter_or_ws + rb")") - re_int = re.compile( - whitespace_optional + rb"([-+]?[0-9]+)(?=" + delimiter_or_ws + rb")" - ) - re_real = re.compile( - whitespace_optional - + rb"([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=" - + delimiter_or_ws - + rb")" - ) - re_array_start = re.compile(whitespace_optional + rb"\[") - re_array_end = re.compile(whitespace_optional + rb"]") - re_string_hex = re.compile( - whitespace_optional + rb"<(" + whitespace_or_hex + rb"*)>" - ) - re_string_lit = re.compile(whitespace_optional + rb"\(") - re_indirect_reference = re.compile( - whitespace_optional - + rb"([-+]?[0-9]+)" - + whitespace_mandatory - + rb"([-+]?[0-9]+)" - + whitespace_mandatory - + rb"R(?=" - + delimiter_or_ws - + rb")" - ) - re_indirect_def_start = re.compile( - whitespace_optional - + rb"([-+]?[0-9]+)" - + whitespace_mandatory - + rb"([-+]?[0-9]+)" - + whitespace_mandatory - + rb"obj(?=" - + delimiter_or_ws - + rb")" - ) - re_indirect_def_end = re.compile( - whitespace_optional + rb"endobj(?=" + delimiter_or_ws + rb")" - ) - re_comment = re.compile( - rb"(" + whitespace_optional + rb"%[^\r\n]*" + newline + rb")*" - ) - re_stream_start = re.compile(whitespace_optional + rb"stream\r?\n") - re_stream_end = re.compile( - whitespace_optional + rb"endstream(?=" + delimiter_or_ws + rb")" - ) - - @classmethod - def get_value( - cls, - data: bytes | bytearray | mmap.mmap, - offset: int, - expect_indirect: IndirectReference | None = None, - max_nesting: int = -1, - ) -> tuple[Any, int | None]: - if max_nesting == 0: - return None, None - m = cls.re_comment.match(data, offset) - if m: - offset = m.end() - m = cls.re_indirect_def_start.match(data, offset) - if m: - check_format_condition( - int(m.group(1)) > 0, - "indirect object definition: object ID must be greater than 0", - ) - check_format_condition( - int(m.group(2)) >= 0, - "indirect object definition: generation must be non-negative", - ) - check_format_condition( - expect_indirect is None - or expect_indirect - == IndirectReference(int(m.group(1)), int(m.group(2))), - "indirect object definition different than expected", - ) - object, object_offset = cls.get_value( - data, m.end(), max_nesting=max_nesting - 1 - ) - if object_offset is None: - return object, None - m = cls.re_indirect_def_end.match(data, object_offset) - check_format_condition( - m is not None, "indirect object definition end not found" - ) - assert m is not None - return object, m.end() - check_format_condition( - not expect_indirect, "indirect object definition not found" - ) - m = cls.re_indirect_reference.match(data, offset) - if m: - check_format_condition( - int(m.group(1)) > 0, - "indirect object reference: object ID must be greater than 0", - ) - check_format_condition( - int(m.group(2)) >= 0, - "indirect object reference: generation must be non-negative", - ) - return IndirectReference(int(m.group(1)), int(m.group(2))), m.end() - m = cls.re_dict_start.match(data, offset) - if m: - offset = m.end() - result: dict[Any, Any] = {} - m = cls.re_dict_end.match(data, offset) - current_offset: int | None = offset - while not m: - assert current_offset is not None - key, current_offset = cls.get_value( - data, current_offset, max_nesting=max_nesting - 1 - ) - if current_offset is None: - return result, None - value, current_offset = cls.get_value( - data, current_offset, max_nesting=max_nesting - 1 - ) - result[key] = value - if current_offset is None: - return result, None - m = cls.re_dict_end.match(data, current_offset) - current_offset = m.end() - m = cls.re_stream_start.match(data, current_offset) - if m: - stream_len = result.get(b"Length") - if stream_len is None or not isinstance(stream_len, int): - msg = f"bad or missing Length in stream dict ({stream_len})" - raise PdfFormatError(msg) - stream_data = data[m.end() : m.end() + stream_len] - m = cls.re_stream_end.match(data, m.end() + stream_len) - check_format_condition(m is not None, "stream end not found") - assert m is not None - current_offset = m.end() - return PdfStream(PdfDict(result), stream_data), current_offset - return PdfDict(result), current_offset - m = cls.re_array_start.match(data, offset) - if m: - offset = m.end() - results = [] - m = cls.re_array_end.match(data, offset) - current_offset = offset - while not m: - assert current_offset is not None - value, current_offset = cls.get_value( - data, current_offset, max_nesting=max_nesting - 1 - ) - results.append(value) - if current_offset is None: - return results, None - m = cls.re_array_end.match(data, current_offset) - return results, m.end() - m = cls.re_null.match(data, offset) - if m: - return None, m.end() - m = cls.re_true.match(data, offset) - if m: - return True, m.end() - m = cls.re_false.match(data, offset) - if m: - return False, m.end() - m = cls.re_name.match(data, offset) - if m: - return PdfName(cls.interpret_name(m.group(1))), m.end() - m = cls.re_int.match(data, offset) - if m: - return int(m.group(1)), m.end() - m = cls.re_real.match(data, offset) - if m: - # XXX Decimal instead of float??? - return float(m.group(1)), m.end() - m = cls.re_string_hex.match(data, offset) - if m: - # filter out whitespace - hex_string = bytearray( - b for b in m.group(1) if b in b"0123456789abcdefABCDEF" - ) - if len(hex_string) % 2 == 1: - # append a 0 if the length is not even - yes, at the end - hex_string.append(ord(b"0")) - return bytearray.fromhex(hex_string.decode("us-ascii")), m.end() - m = cls.re_string_lit.match(data, offset) - if m: - return cls.get_literal_string(data, m.end()) - # return None, offset # fallback (only for debugging) - msg = f"unrecognized object: {repr(data[offset : offset + 32])}" - raise PdfFormatError(msg) - - re_lit_str_token = re.compile( - rb"(\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))" - ) - escaped_chars = { - b"n": b"\n", - b"r": b"\r", - b"t": b"\t", - b"b": b"\b", - b"f": b"\f", - b"(": b"(", - b")": b")", - b"\\": b"\\", - ord(b"n"): b"\n", - ord(b"r"): b"\r", - ord(b"t"): b"\t", - ord(b"b"): b"\b", - ord(b"f"): b"\f", - ord(b"("): b"(", - ord(b")"): b")", - ord(b"\\"): b"\\", - } - - @classmethod - def get_literal_string( - cls, data: bytes | bytearray | mmap.mmap, offset: int - ) -> tuple[bytes, int]: - nesting_depth = 0 - result = bytearray() - for m in cls.re_lit_str_token.finditer(data, offset): - result.extend(data[offset : m.start()]) - if m.group(1): - result.extend(cls.escaped_chars[m.group(1)[1]]) - elif m.group(2): - result.append(int(m.group(2)[1:], 8)) - elif m.group(3): - pass - elif m.group(5): - result.extend(b"\n") - elif m.group(6): - result.extend(b"(") - nesting_depth += 1 - elif m.group(7): - if nesting_depth == 0: - return bytes(result), m.end() - result.extend(b")") - nesting_depth -= 1 - offset = m.end() - msg = "unfinished literal string" - raise PdfFormatError(msg) - - re_xref_section_start = re.compile(whitespace_optional + rb"xref" + newline) - re_xref_subsection_start = re.compile( - whitespace_optional - + rb"([0-9]+)" - + whitespace_mandatory - + rb"([0-9]+)" - + whitespace_optional - + newline_only - ) - re_xref_entry = re.compile(rb"([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)") - - def read_xref_table(self, xref_section_offset: int) -> int: - assert self.buf is not None - subsection_found = False - m = self.re_xref_section_start.match( - self.buf, xref_section_offset + self.start_offset - ) - check_format_condition(m is not None, "xref section start not found") - assert m is not None - offset = m.end() - while True: - m = self.re_xref_subsection_start.match(self.buf, offset) - if not m: - check_format_condition( - subsection_found, "xref subsection start not found" - ) - break - subsection_found = True - offset = m.end() - first_object = int(m.group(1)) - num_objects = int(m.group(2)) - for i in range(first_object, first_object + num_objects): - m = self.re_xref_entry.match(self.buf, offset) - check_format_condition(m is not None, "xref entry not found") - assert m is not None - offset = m.end() - is_free = m.group(3) == b"f" - if not is_free: - generation = int(m.group(2)) - new_entry = (int(m.group(1)), generation) - if i not in self.xref_table: - self.xref_table[i] = new_entry - return offset - - def read_indirect(self, ref: IndirectReference, max_nesting: int = -1) -> Any: - offset, generation = self.xref_table[ref[0]] - check_format_condition( - generation == ref[1], - f"expected to find generation {ref[1]} for object ID {ref[0]} in xref " - f"table, instead found generation {generation} at offset {offset}", - ) - assert self.buf is not None - value = self.get_value( - self.buf, - offset + self.start_offset, - expect_indirect=IndirectReference(*ref), - max_nesting=max_nesting, - )[0] - self.cached_objects[ref] = value - return value - - def linearize_page_tree( - self, node: PdfDict | None = None - ) -> list[IndirectReference]: - page_node = node if node is not None else self.page_tree_root - check_format_condition( - page_node[b"Type"] == b"Pages", "/Type of page tree node is not /Pages" - ) - pages = [] - for kid in page_node[b"Kids"]: - kid_object = self.read_indirect(kid) - if kid_object[b"Type"] == b"Page": - pages.append(kid) - else: - pages.extend(self.linearize_page_tree(node=kid_object)) - return pages diff --git a/myenv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py deleted file mode 100644 index d2b6d0a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PIXAR raster support for PIL -# -# history: -# 97-01-29 fl Created -# -# notes: -# This is incomplete; it is based on a few samples created with -# Photoshop 2.5 and 3.0, and a summary description provided by -# Greg Coats . Hopefully, "L" and -# "RGBA" support will be added in future versions. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image, ImageFile -from ._binary import i16le as i16 - -# -# helpers - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"\200\350\000\000") - - -## -# Image plugin for PIXAR raster images. - - -class PixarImageFile(ImageFile.ImageFile): - format = "PIXAR" - format_description = "PIXAR raster image" - - def _open(self) -> None: - # assuming a 4-byte magic label - assert self.fp is not None - - s = self.fp.read(4) - if not _accept(s): - msg = "not a PIXAR file" - raise SyntaxError(msg) - - # read rest of header - s = s + self.fp.read(508) - - self._size = i16(s, 418), i16(s, 416) - - # get channel/depth descriptions - mode = i16(s, 424), i16(s, 426) - - if mode == (14, 2): - self._mode = "RGB" - # FIXME: to be continued... - - # create tile descriptor (assuming "dumped") - self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 1024, self.mode)] - - -# -# -------------------------------------------------------------------- - -Image.register_open(PixarImageFile.format, PixarImageFile, _accept) - -Image.register_extension(PixarImageFile.format, ".pxr") diff --git a/myenv/lib/python3.12/site-packages/PIL/PngImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PngImagePlugin.py deleted file mode 100644 index 1b9a89a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PngImagePlugin.py +++ /dev/null @@ -1,1551 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PNG support code -# -# See "PNG (Portable Network Graphics) Specification, version 1.0; -# W3C Recommendation", 1996-10-01, Thomas Boutell (ed.). -# -# history: -# 1996-05-06 fl Created (couldn't resist it) -# 1996-12-14 fl Upgraded, added read and verify support (0.2) -# 1996-12-15 fl Separate PNG stream parser -# 1996-12-29 fl Added write support, added getchunks -# 1996-12-30 fl Eliminated circular references in decoder (0.3) -# 1998-07-12 fl Read/write 16-bit images as mode I (0.4) -# 2001-02-08 fl Added transparency support (from Zircon) (0.5) -# 2001-04-16 fl Don't close data source in "open" method (0.6) -# 2004-02-24 fl Don't even pretend to support interlaced files (0.7) -# 2004-08-31 fl Do basic sanity check on chunk identifiers (0.8) -# 2004-09-20 fl Added PngInfo chunk container -# 2004-12-18 fl Added DPI read support (based on code by Niki Spahiev) -# 2008-08-13 fl Added tRNS support for RGB images -# 2009-03-06 fl Support for preserving ICC profiles (by Florian Hoech) -# 2009-03-08 fl Added zTXT support (from Lowell Alleman) -# 2009-03-29 fl Read interlaced PNG files (from Conrado Porto Lopes Gouvua) -# -# Copyright (c) 1997-2009 by Secret Labs AB -# Copyright (c) 1996 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import itertools -import logging -import re -import struct -import warnings -import zlib -from collections.abc import Callable -from enum import IntEnum -from typing import IO, Any, NamedTuple, NoReturn, cast - -from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 -from ._binary import o16be as o16 -from ._binary import o32be as o32 -from ._deprecate import deprecate -from ._util import DeferredError - -TYPE_CHECKING = False -if TYPE_CHECKING: - from . import _imaging - -logger = logging.getLogger(__name__) - -is_cid = re.compile(rb"\w\w\w\w").match - - -_MAGIC = b"\211PNG\r\n\032\n" - - -_MODES = { - # supported bits/color combinations, and corresponding modes/rawmodes - # Grayscale - (1, 0): ("1", "1"), - (2, 0): ("L", "L;2"), - (4, 0): ("L", "L;4"), - (8, 0): ("L", "L"), - (16, 0): ("I;16", "I;16B"), - # Truecolour - (8, 2): ("RGB", "RGB"), - (16, 2): ("RGB", "RGB;16B"), - # Indexed-colour - (1, 3): ("P", "P;1"), - (2, 3): ("P", "P;2"), - (4, 3): ("P", "P;4"), - (8, 3): ("P", "P"), - # Grayscale with alpha - (8, 4): ("LA", "LA"), - (16, 4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available - # Truecolour with alpha - (8, 6): ("RGBA", "RGBA"), - (16, 6): ("RGBA", "RGBA;16B"), -} - - -_simple_palette = re.compile(b"^\xff*\x00\xff*$") - -MAX_TEXT_CHUNK = ImageFile.SAFEBLOCK -""" -Maximum decompressed size for a iTXt or zTXt chunk. -Eliminates decompression bombs where compressed chunks can expand 1000x. -See :ref:`Text in PNG File Format`. -""" -MAX_TEXT_MEMORY = 64 * MAX_TEXT_CHUNK -""" -Set the maximum total text chunk size. -See :ref:`Text in PNG File Format`. -""" - - -# APNG frame disposal modes -class Disposal(IntEnum): - OP_NONE = 0 - """ - No disposal is done on this frame before rendering the next frame. - See :ref:`Saving APNG sequences`. - """ - OP_BACKGROUND = 1 - """ - This frame’s modified region is cleared to fully transparent black before rendering - the next frame. - See :ref:`Saving APNG sequences`. - """ - OP_PREVIOUS = 2 - """ - This frame’s modified region is reverted to the previous frame’s contents before - rendering the next frame. - See :ref:`Saving APNG sequences`. - """ - - -# APNG frame blend modes -class Blend(IntEnum): - OP_SOURCE = 0 - """ - All color components of this frame, including alpha, overwrite the previous output - image contents. - See :ref:`Saving APNG sequences`. - """ - OP_OVER = 1 - """ - This frame should be alpha composited with the previous output image contents. - See :ref:`Saving APNG sequences`. - """ - - -def _safe_zlib_decompress(s: bytes) -> bytes: - dobj = zlib.decompressobj() - plaintext = dobj.decompress(s, MAX_TEXT_CHUNK) - if dobj.unconsumed_tail: - msg = "Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK" - raise ValueError(msg) - return plaintext - - -def _crc32(data: bytes, seed: int = 0) -> int: - return zlib.crc32(data, seed) & 0xFFFFFFFF - - -# -------------------------------------------------------------------- -# Support classes. Suitable for PNG and related formats like MNG etc. - - -class ChunkStream: - def __init__(self, fp: IO[bytes]) -> None: - self.fp: IO[bytes] | None = fp - self.queue: list[tuple[bytes, int, int]] | None = [] - - def read(self) -> tuple[bytes, int, int]: - """Fetch a new chunk. Returns header information.""" - cid = None - - assert self.fp is not None - if self.queue: - cid, pos, length = self.queue.pop() - self.fp.seek(pos) - else: - s = self.fp.read(8) - cid = s[4:] - pos = self.fp.tell() - length = i32(s) - - if not is_cid(cid): - if not ImageFile.LOAD_TRUNCATED_IMAGES: - msg = f"broken PNG file (chunk {repr(cid)})" - raise SyntaxError(msg) - - return cid, pos, length - - def __enter__(self) -> ChunkStream: - return self - - def __exit__(self, *args: object) -> None: - self.close() - - def close(self) -> None: - self.queue = self.fp = None - - def push(self, cid: bytes, pos: int, length: int) -> None: - assert self.queue is not None - self.queue.append((cid, pos, length)) - - def call(self, cid: bytes, pos: int, length: int) -> bytes: - """Call the appropriate chunk handler""" - - logger.debug("STREAM %r %s %s", cid, pos, length) - return getattr(self, f"chunk_{cid.decode('ascii')}")(pos, length) - - def crc(self, cid: bytes, data: bytes) -> None: - """Read and verify checksum""" - - # Skip CRC checks for ancillary chunks if allowed to load truncated - # images - # 5th byte of first char is 1 [specs, section 5.4] - if ImageFile.LOAD_TRUNCATED_IMAGES and (cid[0] >> 5 & 1): - self.crc_skip(cid, data) - return - - assert self.fp is not None - try: - crc1 = _crc32(data, _crc32(cid)) - crc2 = i32(self.fp.read(4)) - if crc1 != crc2: - msg = f"broken PNG file (bad header checksum in {repr(cid)})" - raise SyntaxError(msg) - except struct.error as e: - msg = f"broken PNG file (incomplete checksum in {repr(cid)})" - raise SyntaxError(msg) from e - - def crc_skip(self, cid: bytes, data: bytes) -> None: - """Read checksum""" - - assert self.fp is not None - self.fp.read(4) - - def verify(self, endchunk: bytes = b"IEND") -> list[bytes]: - # Simple approach; just calculate checksum for all remaining - # blocks. Must be called directly after open. - - cids = [] - - assert self.fp is not None - while True: - try: - cid, pos, length = self.read() - except struct.error as e: - msg = "truncated PNG file" - raise OSError(msg) from e - - if cid == endchunk: - break - self.crc(cid, ImageFile._safe_read(self.fp, length)) - cids.append(cid) - - return cids - - -class iTXt(str): - """ - Subclass of string to allow iTXt chunks to look like strings while - keeping their extra information - - """ - - lang: str | bytes | None - tkey: str | bytes | None - - @staticmethod - def __new__( - cls, text: str, lang: str | None = None, tkey: str | None = None - ) -> iTXt: - """ - :param cls: the class to use when creating the instance - :param text: value for this key - :param lang: language code - :param tkey: UTF-8 version of the key name - """ - - self = str.__new__(cls, text) - self.lang = lang - self.tkey = tkey - return self - - -class PngInfo: - """ - PNG chunk container (for use with save(pnginfo=)) - - """ - - def __init__(self) -> None: - self.chunks: list[tuple[bytes, bytes, bool]] = [] - - def add(self, cid: bytes, data: bytes, after_idat: bool = False) -> None: - """Appends an arbitrary chunk. Use with caution. - - :param cid: a byte string, 4 bytes long. - :param data: a byte string of the encoded data - :param after_idat: for use with private chunks. Whether the chunk - should be written after IDAT - - """ - - self.chunks.append((cid, data, after_idat)) - - def add_itxt( - self, - key: str | bytes, - value: str | bytes, - lang: str | bytes = "", - tkey: str | bytes = "", - zip: bool = False, - ) -> None: - """Appends an iTXt chunk. - - :param key: latin-1 encodable text key name - :param value: value for this key - :param lang: language code - :param tkey: UTF-8 version of the key name - :param zip: compression flag - - """ - - if not isinstance(key, bytes): - key = key.encode("latin-1", "strict") - if not isinstance(value, bytes): - value = value.encode("utf-8", "strict") - if not isinstance(lang, bytes): - lang = lang.encode("utf-8", "strict") - if not isinstance(tkey, bytes): - tkey = tkey.encode("utf-8", "strict") - - if zip: - self.add( - b"iTXt", - key + b"\0\x01\0" + lang + b"\0" + tkey + b"\0" + zlib.compress(value), - ) - else: - self.add(b"iTXt", key + b"\0\0\0" + lang + b"\0" + tkey + b"\0" + value) - - def add_text( - self, key: str | bytes, value: str | bytes | iTXt, zip: bool = False - ) -> None: - """Appends a text chunk. - - :param key: latin-1 encodable text key name - :param value: value for this key, text or an - :py:class:`PIL.PngImagePlugin.iTXt` instance - :param zip: compression flag - - """ - if isinstance(value, iTXt): - return self.add_itxt( - key, - value, - value.lang if value.lang is not None else b"", - value.tkey if value.tkey is not None else b"", - zip=zip, - ) - - # The tEXt chunk stores latin-1 text - if not isinstance(value, bytes): - try: - value = value.encode("latin-1", "strict") - except UnicodeError: - return self.add_itxt(key, value, zip=zip) - - if not isinstance(key, bytes): - key = key.encode("latin-1", "strict") - - if zip: - self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) - else: - self.add(b"tEXt", key + b"\0" + value) - - -# -------------------------------------------------------------------- -# PNG image stream (IHDR/IEND) - - -class _RewindState(NamedTuple): - info: dict[str | tuple[int, int], Any] - tile: list[ImageFile._Tile] - seq_num: int | None - - -class PngStream(ChunkStream): - def __init__(self, fp: IO[bytes]) -> None: - super().__init__(fp) - - # local copies of Image attributes - self.im_info: dict[str | tuple[int, int], Any] = {} - self.im_text: dict[str, str | iTXt] = {} - self.im_size = (0, 0) - self.im_mode = "" - self.im_tile: list[ImageFile._Tile] = [] - self.im_palette: tuple[str, bytes] | None = None - self.im_custom_mimetype: str | None = None - self.im_n_frames: int | None = None - self._seq_num: int | None = None - self.rewind_state = _RewindState({}, [], None) - - self.text_memory = 0 - - def check_text_memory(self, chunklen: int) -> None: - self.text_memory += chunklen - if self.text_memory > MAX_TEXT_MEMORY: - msg = ( - "Too much memory used in text chunks: " - f"{self.text_memory}>MAX_TEXT_MEMORY" - ) - raise ValueError(msg) - - def save_rewind(self) -> None: - self.rewind_state = _RewindState( - self.im_info.copy(), - self.im_tile, - self._seq_num, - ) - - def rewind(self) -> None: - self.im_info = self.rewind_state.info.copy() - self.im_tile = self.rewind_state.tile - self._seq_num = self.rewind_state.seq_num - - def chunk_iCCP(self, pos: int, length: int) -> bytes: - # ICC profile - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - # according to PNG spec, the iCCP chunk contains: - # Profile name 1-79 bytes (character string) - # Null separator 1 byte (null character) - # Compression method 1 byte (0) - # Compressed profile n bytes (zlib with deflate compression) - i = s.find(b"\0") - logger.debug("iCCP profile name %r", s[:i]) - comp_method = s[i + 1] - logger.debug("Compression method %s", comp_method) - if comp_method != 0: - msg = f"Unknown compression method {comp_method} in iCCP chunk" - raise SyntaxError(msg) - try: - icc_profile = _safe_zlib_decompress(s[i + 2 :]) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - icc_profile = None - else: - raise - except zlib.error: - icc_profile = None # FIXME - self.im_info["icc_profile"] = icc_profile - return s - - def chunk_IHDR(self, pos: int, length: int) -> bytes: - # image header - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if length < 13: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - msg = "Truncated IHDR chunk" - raise ValueError(msg) - self.im_size = i32(s, 0), i32(s, 4) - try: - self.im_mode, self.im_rawmode = _MODES[(s[8], s[9])] - except Exception: - pass - if s[12]: - self.im_info["interlace"] = 1 - if s[11]: - msg = "unknown filter category" - raise SyntaxError(msg) - return s - - def chunk_IDAT(self, pos: int, length: int) -> NoReturn: - # image data - if "bbox" in self.im_info: - tile = [ImageFile._Tile("zip", self.im_info["bbox"], pos, self.im_rawmode)] - else: - if self.im_n_frames is not None: - self.im_info["default_image"] = True - tile = [ImageFile._Tile("zip", (0, 0) + self.im_size, pos, self.im_rawmode)] - self.im_tile = tile - self.im_idat = length - msg = "image data found" - raise EOFError(msg) - - def chunk_IEND(self, pos: int, length: int) -> NoReturn: - msg = "end of PNG image" - raise EOFError(msg) - - def chunk_PLTE(self, pos: int, length: int) -> bytes: - # palette - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if self.im_mode == "P": - self.im_palette = "RGB", s - return s - - def chunk_tRNS(self, pos: int, length: int) -> bytes: - # transparency - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if self.im_mode == "P": - if _simple_palette.match(s): - # tRNS contains only one full-transparent entry, - # other entries are full opaque - i = s.find(b"\0") - if i >= 0: - self.im_info["transparency"] = i - else: - # otherwise, we have a byte string with one alpha value - # for each palette entry - self.im_info["transparency"] = s - elif self.im_mode in ("1", "L", "I;16"): - self.im_info["transparency"] = i16(s) - elif self.im_mode == "RGB": - self.im_info["transparency"] = i16(s), i16(s, 2), i16(s, 4) - return s - - def chunk_gAMA(self, pos: int, length: int) -> bytes: - # gamma setting - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - self.im_info["gamma"] = i32(s) / 100000.0 - return s - - def chunk_cHRM(self, pos: int, length: int) -> bytes: - # chromaticity, 8 unsigned ints, actual value is scaled by 100,000 - # WP x,y, Red x,y, Green x,y Blue x,y - - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - raw_vals = struct.unpack(f">{len(s) // 4}I", s) - self.im_info["chromaticity"] = tuple(elt / 100000.0 for elt in raw_vals) - return s - - def chunk_sRGB(self, pos: int, length: int) -> bytes: - # srgb rendering intent, 1 byte - # 0 perceptual - # 1 relative colorimetric - # 2 saturation - # 3 absolute colorimetric - - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if length < 1: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - msg = "Truncated sRGB chunk" - raise ValueError(msg) - self.im_info["srgb"] = s[0] - return s - - def chunk_pHYs(self, pos: int, length: int) -> bytes: - # pixels per unit - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if length < 9: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - msg = "Truncated pHYs chunk" - raise ValueError(msg) - px, py = i32(s, 0), i32(s, 4) - unit = s[8] - if unit == 1: # meter - dpi = px * 0.0254, py * 0.0254 - self.im_info["dpi"] = dpi - elif unit == 0: - self.im_info["aspect"] = px, py - return s - - def chunk_tEXt(self, pos: int, length: int) -> bytes: - # text - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - try: - k, v = s.split(b"\0", 1) - except ValueError: - # fallback for broken tEXt tags - k = s - v = b"" - if k: - k_str = k.decode("latin-1", "strict") - v_str = v.decode("latin-1", "replace") - - self.im_info[k_str] = v if k == b"exif" else v_str - self.im_text[k_str] = v_str - self.check_text_memory(len(v_str)) - - return s - - def chunk_zTXt(self, pos: int, length: int) -> bytes: - # compressed text - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - try: - k, v = s.split(b"\0", 1) - except ValueError: - k = s - v = b"" - if v: - comp_method = v[0] - else: - comp_method = 0 - if comp_method != 0: - msg = f"Unknown compression method {comp_method} in zTXt chunk" - raise SyntaxError(msg) - try: - v = _safe_zlib_decompress(v[1:]) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - v = b"" - else: - raise - except zlib.error: - v = b"" - - if k: - k_str = k.decode("latin-1", "strict") - v_str = v.decode("latin-1", "replace") - - self.im_info[k_str] = self.im_text[k_str] = v_str - self.check_text_memory(len(v_str)) - - return s - - def chunk_iTXt(self, pos: int, length: int) -> bytes: - # international text - assert self.fp is not None - r = s = ImageFile._safe_read(self.fp, length) - try: - k, r = r.split(b"\0", 1) - except ValueError: - return s - if len(r) < 2: - return s - cf, cm, r = r[0], r[1], r[2:] - try: - lang, tk, v = r.split(b"\0", 2) - except ValueError: - return s - if cf != 0: - if cm == 0: - try: - v = _safe_zlib_decompress(v) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - else: - raise - except zlib.error: - return s - else: - return s - if k == b"XML:com.adobe.xmp": - self.im_info["xmp"] = v - try: - k_str = k.decode("latin-1", "strict") - lang_str = lang.decode("utf-8", "strict") - tk_str = tk.decode("utf-8", "strict") - v_str = v.decode("utf-8", "strict") - except UnicodeError: - return s - - self.im_info[k_str] = self.im_text[k_str] = iTXt(v_str, lang_str, tk_str) - self.check_text_memory(len(v_str)) - - return s - - def chunk_eXIf(self, pos: int, length: int) -> bytes: - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - self.im_info["exif"] = b"Exif\x00\x00" + s - return s - - # APNG chunks - def chunk_acTL(self, pos: int, length: int) -> bytes: - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if length < 8: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - msg = "APNG contains truncated acTL chunk" - raise ValueError(msg) - if self.im_n_frames is not None: - self.im_n_frames = None - warnings.warn("Invalid APNG, will use default PNG image if possible") - return s - n_frames = i32(s) - if n_frames == 0 or n_frames > 0x80000000: - warnings.warn("Invalid APNG, will use default PNG image if possible") - return s - self.im_n_frames = n_frames - self.im_info["loop"] = i32(s, 4) - self.im_custom_mimetype = "image/apng" - return s - - def chunk_fcTL(self, pos: int, length: int) -> bytes: - assert self.fp is not None - s = ImageFile._safe_read(self.fp, length) - if length < 26: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - msg = "APNG contains truncated fcTL chunk" - raise ValueError(msg) - seq = i32(s) - if (self._seq_num is None and seq != 0) or ( - self._seq_num is not None and self._seq_num != seq - 1 - ): - msg = "APNG contains frame sequence errors" - raise SyntaxError(msg) - self._seq_num = seq - width, height = i32(s, 4), i32(s, 8) - px, py = i32(s, 12), i32(s, 16) - im_w, im_h = self.im_size - if px + width > im_w or py + height > im_h: - msg = "APNG contains invalid frames" - raise SyntaxError(msg) - self.im_info["bbox"] = (px, py, px + width, py + height) - delay_num, delay_den = i16(s, 20), i16(s, 22) - if delay_den == 0: - delay_den = 100 - self.im_info["duration"] = float(delay_num) / float(delay_den) * 1000 - self.im_info["disposal"] = s[24] - self.im_info["blend"] = s[25] - return s - - def chunk_fdAT(self, pos: int, length: int) -> bytes: - assert self.fp is not None - if length < 4: - if ImageFile.LOAD_TRUNCATED_IMAGES: - s = ImageFile._safe_read(self.fp, length) - return s - msg = "APNG contains truncated fDAT chunk" - raise ValueError(msg) - s = ImageFile._safe_read(self.fp, 4) - seq = i32(s) - if self._seq_num != seq - 1: - msg = "APNG contains frame sequence errors" - raise SyntaxError(msg) - self._seq_num = seq - return self.chunk_IDAT(pos + 4, length - 4) - - -# -------------------------------------------------------------------- -# PNG reader - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(_MAGIC) - - -## -# Image plugin for PNG images. - - -class PngImageFile(ImageFile.ImageFile): - format = "PNG" - format_description = "Portable network graphics" - - def _open(self) -> None: - if not _accept(self.fp.read(8)): - msg = "not a PNG file" - raise SyntaxError(msg) - self._fp = self.fp - self.__frame = 0 - - # - # Parse headers up to the first IDAT or fDAT chunk - - self.private_chunks: list[tuple[bytes, bytes] | tuple[bytes, bytes, bool]] = [] - self.png: PngStream | None = PngStream(self.fp) - - while True: - # - # get next chunk - - cid, pos, length = self.png.read() - - try: - s = self.png.call(cid, pos, length) - except EOFError: - break - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - s = ImageFile._safe_read(self.fp, length) - if cid[1:2].islower(): - self.private_chunks.append((cid, s)) - - self.png.crc(cid, s) - - # - # Copy relevant attributes from the PngStream. An alternative - # would be to let the PngStream class modify these attributes - # directly, but that introduces circular references which are - # difficult to break if things go wrong in the decoder... - # (believe me, I've tried ;-) - - self._mode = self.png.im_mode - self._size = self.png.im_size - self.info = self.png.im_info - self._text: dict[str, str | iTXt] | None = None - self.tile = self.png.im_tile - self.custom_mimetype = self.png.im_custom_mimetype - self.n_frames = self.png.im_n_frames or 1 - self.default_image = self.info.get("default_image", False) - - if self.png.im_palette: - rawmode, data = self.png.im_palette - self.palette = ImagePalette.raw(rawmode, data) - - if cid == b"fdAT": - self.__prepare_idat = length - 4 - else: - self.__prepare_idat = length # used by load_prepare() - - if self.png.im_n_frames is not None: - self._close_exclusive_fp_after_loading = False - self.png.save_rewind() - self.__rewind_idat = self.__prepare_idat - self.__rewind = self._fp.tell() - if self.default_image: - # IDAT chunk contains default image and not first animation frame - self.n_frames += 1 - self._seek(0) - self.is_animated = self.n_frames > 1 - - @property - def text(self) -> dict[str, str | iTXt]: - # experimental - if self._text is None: - # iTxt, tEXt and zTXt chunks may appear at the end of the file - # So load the file to ensure that they are read - if self.is_animated: - frame = self.__frame - # for APNG, seek to the final frame before loading - self.seek(self.n_frames - 1) - self.load() - if self.is_animated: - self.seek(frame) - assert self._text is not None - return self._text - - def verify(self) -> None: - """Verify PNG file""" - - if self.fp is None: - msg = "verify must be called directly after open" - raise RuntimeError(msg) - - # back up to beginning of IDAT block - self.fp.seek(self.tile[0][2] - 8) - - assert self.png is not None - self.png.verify() - self.png.close() - - if self._exclusive_fp: - self.fp.close() - self.fp = None - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - if frame < self.__frame: - self._seek(0, True) - - last_frame = self.__frame - for f in range(self.__frame + 1, frame + 1): - try: - self._seek(f) - except EOFError as e: - self.seek(last_frame) - msg = "no more images in APNG file" - raise EOFError(msg) from e - - def _seek(self, frame: int, rewind: bool = False) -> None: - assert self.png is not None - if isinstance(self._fp, DeferredError): - raise self._fp.ex - - self.dispose: _imaging.ImagingCore | None - dispose_extent = None - if frame == 0: - if rewind: - self._fp.seek(self.__rewind) - self.png.rewind() - self.__prepare_idat = self.__rewind_idat - self._im = None - self.info = self.png.im_info - self.tile = self.png.im_tile - self.fp = self._fp - self._prev_im = None - self.dispose = None - self.default_image = self.info.get("default_image", False) - self.dispose_op = self.info.get("disposal") - self.blend_op = self.info.get("blend") - dispose_extent = self.info.get("bbox") - self.__frame = 0 - else: - if frame != self.__frame + 1: - msg = f"cannot seek to frame {frame}" - raise ValueError(msg) - - # ensure previous frame was loaded - self.load() - - if self.dispose: - self.im.paste(self.dispose, self.dispose_extent) - self._prev_im = self.im.copy() - - self.fp = self._fp - - # advance to the next frame - if self.__prepare_idat: - ImageFile._safe_read(self.fp, self.__prepare_idat) - self.__prepare_idat = 0 - frame_start = False - while True: - self.fp.read(4) # CRC - - try: - cid, pos, length = self.png.read() - except (struct.error, SyntaxError): - break - - if cid == b"IEND": - msg = "No more images in APNG file" - raise EOFError(msg) - if cid == b"fcTL": - if frame_start: - # there must be at least one fdAT chunk between fcTL chunks - msg = "APNG missing frame data" - raise SyntaxError(msg) - frame_start = True - - try: - self.png.call(cid, pos, length) - except UnicodeDecodeError: - break - except EOFError: - if cid == b"fdAT": - length -= 4 - if frame_start: - self.__prepare_idat = length - break - ImageFile._safe_read(self.fp, length) - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - ImageFile._safe_read(self.fp, length) - - self.__frame = frame - self.tile = self.png.im_tile - self.dispose_op = self.info.get("disposal") - self.blend_op = self.info.get("blend") - dispose_extent = self.info.get("bbox") - - if not self.tile: - msg = "image not found in APNG frame" - raise EOFError(msg) - if dispose_extent: - self.dispose_extent: tuple[float, float, float, float] = dispose_extent - - # setup frame disposal (actual disposal done when needed in the next _seek()) - if self._prev_im is None and self.dispose_op == Disposal.OP_PREVIOUS: - self.dispose_op = Disposal.OP_BACKGROUND - - self.dispose = None - if self.dispose_op == Disposal.OP_PREVIOUS: - if self._prev_im: - self.dispose = self._prev_im.copy() - self.dispose = self._crop(self.dispose, self.dispose_extent) - elif self.dispose_op == Disposal.OP_BACKGROUND: - self.dispose = Image.core.fill(self.mode, self.size) - self.dispose = self._crop(self.dispose, self.dispose_extent) - - def tell(self) -> int: - return self.__frame - - def load_prepare(self) -> None: - """internal: prepare to read PNG file""" - - if self.info.get("interlace"): - self.decoderconfig = self.decoderconfig + (1,) - - self.__idat = self.__prepare_idat # used by load_read() - ImageFile.ImageFile.load_prepare(self) - - def load_read(self, read_bytes: int) -> bytes: - """internal: read more image data""" - - assert self.png is not None - while self.__idat == 0: - # end of chunk, skip forward to next one - - self.fp.read(4) # CRC - - cid, pos, length = self.png.read() - - if cid not in [b"IDAT", b"DDAT", b"fdAT"]: - self.png.push(cid, pos, length) - return b"" - - if cid == b"fdAT": - try: - self.png.call(cid, pos, length) - except EOFError: - pass - self.__idat = length - 4 # sequence_num has already been read - else: - self.__idat = length # empty chunks are allowed - - # read more data from this chunk - if read_bytes <= 0: - read_bytes = self.__idat - else: - read_bytes = min(read_bytes, self.__idat) - - self.__idat = self.__idat - read_bytes - - return self.fp.read(read_bytes) - - def load_end(self) -> None: - """internal: finished reading image data""" - assert self.png is not None - if self.__idat != 0: - self.fp.read(self.__idat) - while True: - self.fp.read(4) # CRC - - try: - cid, pos, length = self.png.read() - except (struct.error, SyntaxError): - break - - if cid == b"IEND": - break - elif cid == b"fcTL" and self.is_animated: - # start of the next frame, stop reading - self.__prepare_idat = 0 - self.png.push(cid, pos, length) - break - - try: - self.png.call(cid, pos, length) - except UnicodeDecodeError: - break - except EOFError: - if cid == b"fdAT": - length -= 4 - try: - ImageFile._safe_read(self.fp, length) - except OSError as e: - if ImageFile.LOAD_TRUNCATED_IMAGES: - break - else: - raise e - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - s = ImageFile._safe_read(self.fp, length) - if cid[1:2].islower(): - self.private_chunks.append((cid, s, True)) - self._text = self.png.im_text - if not self.is_animated: - self.png.close() - self.png = None - else: - if self._prev_im and self.blend_op == Blend.OP_OVER: - updated = self._crop(self.im, self.dispose_extent) - if self.im.mode == "RGB" and "transparency" in self.info: - mask = updated.convert_transparent( - "RGBA", self.info["transparency"] - ) - else: - if self.im.mode == "P" and "transparency" in self.info: - t = self.info["transparency"] - if isinstance(t, bytes): - updated.putpalettealphas(t) - elif isinstance(t, int): - updated.putpalettealpha(t) - mask = updated.convert("RGBA") - self._prev_im.paste(updated, self.dispose_extent, mask) - self.im = self._prev_im - - def _getexif(self) -> dict[int, Any] | None: - if "exif" not in self.info: - self.load() - if "exif" not in self.info and "Raw profile type exif" not in self.info: - return None - return self.getexif()._get_merged_dict() - - def getexif(self) -> Image.Exif: - if "exif" not in self.info: - self.load() - - return super().getexif() - - -# -------------------------------------------------------------------- -# PNG writer - -_OUTMODES = { - # supported PIL modes, and corresponding rawmode, bit depth and color type - "1": ("1", b"\x01", b"\x00"), - "L;1": ("L;1", b"\x01", b"\x00"), - "L;2": ("L;2", b"\x02", b"\x00"), - "L;4": ("L;4", b"\x04", b"\x00"), - "L": ("L", b"\x08", b"\x00"), - "LA": ("LA", b"\x08", b"\x04"), - "I": ("I;16B", b"\x10", b"\x00"), - "I;16": ("I;16B", b"\x10", b"\x00"), - "I;16B": ("I;16B", b"\x10", b"\x00"), - "P;1": ("P;1", b"\x01", b"\x03"), - "P;2": ("P;2", b"\x02", b"\x03"), - "P;4": ("P;4", b"\x04", b"\x03"), - "P": ("P", b"\x08", b"\x03"), - "RGB": ("RGB", b"\x08", b"\x02"), - "RGBA": ("RGBA", b"\x08", b"\x06"), -} - - -def putchunk(fp: IO[bytes], cid: bytes, *data: bytes) -> None: - """Write a PNG chunk (including CRC field)""" - - byte_data = b"".join(data) - - fp.write(o32(len(byte_data)) + cid) - fp.write(byte_data) - crc = _crc32(byte_data, _crc32(cid)) - fp.write(o32(crc)) - - -class _idat: - # wrap output from the encoder in IDAT chunks - - def __init__(self, fp: IO[bytes], chunk: Callable[..., None]) -> None: - self.fp = fp - self.chunk = chunk - - def write(self, data: bytes) -> None: - self.chunk(self.fp, b"IDAT", data) - - -class _fdat: - # wrap encoder output in fdAT chunks - - def __init__(self, fp: IO[bytes], chunk: Callable[..., None], seq_num: int) -> None: - self.fp = fp - self.chunk = chunk - self.seq_num = seq_num - - def write(self, data: bytes) -> None: - self.chunk(self.fp, b"fdAT", o32(self.seq_num), data) - self.seq_num += 1 - - -class _Frame(NamedTuple): - im: Image.Image - bbox: tuple[int, int, int, int] | None - encoderinfo: dict[str, Any] - - -def _write_multiple_frames( - im: Image.Image, - fp: IO[bytes], - chunk: Callable[..., None], - mode: str, - rawmode: str, - default_image: Image.Image | None, - append_images: list[Image.Image], -) -> Image.Image | None: - duration = im.encoderinfo.get("duration") - loop = im.encoderinfo.get("loop", im.info.get("loop", 0)) - disposal = im.encoderinfo.get("disposal", im.info.get("disposal", Disposal.OP_NONE)) - blend = im.encoderinfo.get("blend", im.info.get("blend", Blend.OP_SOURCE)) - - if default_image: - chain = itertools.chain(append_images) - else: - chain = itertools.chain([im], append_images) - - im_frames: list[_Frame] = [] - frame_count = 0 - for im_seq in chain: - for im_frame in ImageSequence.Iterator(im_seq): - if im_frame.mode == mode: - im_frame = im_frame.copy() - else: - im_frame = im_frame.convert(mode) - encoderinfo = im.encoderinfo.copy() - if isinstance(duration, (list, tuple)): - encoderinfo["duration"] = duration[frame_count] - elif duration is None and "duration" in im_frame.info: - encoderinfo["duration"] = im_frame.info["duration"] - if isinstance(disposal, (list, tuple)): - encoderinfo["disposal"] = disposal[frame_count] - if isinstance(blend, (list, tuple)): - encoderinfo["blend"] = blend[frame_count] - frame_count += 1 - - if im_frames: - previous = im_frames[-1] - prev_disposal = previous.encoderinfo.get("disposal") - prev_blend = previous.encoderinfo.get("blend") - if prev_disposal == Disposal.OP_PREVIOUS and len(im_frames) < 2: - prev_disposal = Disposal.OP_BACKGROUND - - if prev_disposal == Disposal.OP_BACKGROUND: - base_im = previous.im.copy() - dispose = Image.core.fill("RGBA", im.size, (0, 0, 0, 0)) - bbox = previous.bbox - if bbox: - dispose = dispose.crop(bbox) - else: - bbox = (0, 0) + im.size - base_im.paste(dispose, bbox) - elif prev_disposal == Disposal.OP_PREVIOUS: - base_im = im_frames[-2].im - else: - base_im = previous.im - delta = ImageChops.subtract_modulo( - im_frame.convert("RGBA"), base_im.convert("RGBA") - ) - bbox = delta.getbbox(alpha_only=False) - if ( - not bbox - and prev_disposal == encoderinfo.get("disposal") - and prev_blend == encoderinfo.get("blend") - and "duration" in encoderinfo - ): - previous.encoderinfo["duration"] += encoderinfo["duration"] - continue - else: - bbox = None - im_frames.append(_Frame(im_frame, bbox, encoderinfo)) - - if len(im_frames) == 1 and not default_image: - return im_frames[0].im - - # animation control - chunk( - fp, - b"acTL", - o32(len(im_frames)), # 0: num_frames - o32(loop), # 4: num_plays - ) - - # default image IDAT (if it exists) - if default_image: - if im.mode != mode: - im = im.convert(mode) - ImageFile._save( - im, - cast(IO[bytes], _idat(fp, chunk)), - [ImageFile._Tile("zip", (0, 0) + im.size, 0, rawmode)], - ) - - seq_num = 0 - for frame, frame_data in enumerate(im_frames): - im_frame = frame_data.im - if not frame_data.bbox: - bbox = (0, 0) + im_frame.size - else: - bbox = frame_data.bbox - im_frame = im_frame.crop(bbox) - size = im_frame.size - encoderinfo = frame_data.encoderinfo - frame_duration = int(round(encoderinfo.get("duration", 0))) - frame_disposal = encoderinfo.get("disposal", disposal) - frame_blend = encoderinfo.get("blend", blend) - # frame control - chunk( - fp, - b"fcTL", - o32(seq_num), # sequence_number - o32(size[0]), # width - o32(size[1]), # height - o32(bbox[0]), # x_offset - o32(bbox[1]), # y_offset - o16(frame_duration), # delay_numerator - o16(1000), # delay_denominator - o8(frame_disposal), # dispose_op - o8(frame_blend), # blend_op - ) - seq_num += 1 - # frame data - if frame == 0 and not default_image: - # first frame must be in IDAT chunks for backwards compatibility - ImageFile._save( - im_frame, - cast(IO[bytes], _idat(fp, chunk)), - [ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)], - ) - else: - fdat_chunks = _fdat(fp, chunk, seq_num) - ImageFile._save( - im_frame, - cast(IO[bytes], fdat_chunks), - [ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)], - ) - seq_num = fdat_chunks.seq_num - return None - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - _save(im, fp, filename, save_all=True) - - -def _save( - im: Image.Image, - fp: IO[bytes], - filename: str | bytes, - chunk: Callable[..., None] = putchunk, - save_all: bool = False, -) -> None: - # save an image to disk (called by the save method) - - if save_all: - default_image = im.encoderinfo.get( - "default_image", im.info.get("default_image") - ) - modes = set() - sizes = set() - append_images = im.encoderinfo.get("append_images", []) - for im_seq in itertools.chain([im], append_images): - for im_frame in ImageSequence.Iterator(im_seq): - modes.add(im_frame.mode) - sizes.add(im_frame.size) - for mode in ("RGBA", "RGB", "P"): - if mode in modes: - break - else: - mode = modes.pop() - size = tuple(max(frame_size[i] for frame_size in sizes) for i in range(2)) - else: - size = im.size - mode = im.mode - - outmode = mode - if mode == "P": - # - # attempt to minimize storage requirements for palette images - if "bits" in im.encoderinfo: - # number of bits specified by user - colors = min(1 << im.encoderinfo["bits"], 256) - else: - # check palette contents - if im.palette: - colors = max(min(len(im.palette.getdata()[1]) // 3, 256), 1) - else: - colors = 256 - - if colors <= 16: - if colors <= 2: - bits = 1 - elif colors <= 4: - bits = 2 - else: - bits = 4 - outmode += f";{bits}" - - # encoder options - im.encoderconfig = ( - im.encoderinfo.get("optimize", False), - im.encoderinfo.get("compress_level", -1), - im.encoderinfo.get("compress_type", -1), - im.encoderinfo.get("dictionary", b""), - ) - - # get the corresponding PNG mode - try: - rawmode, bit_depth, color_type = _OUTMODES[outmode] - except KeyError as e: - msg = f"cannot write mode {mode} as PNG" - raise OSError(msg) from e - if outmode == "I": - deprecate("Saving I mode images as PNG", 13, stacklevel=4) - - # - # write minimal PNG file - - fp.write(_MAGIC) - - chunk( - fp, - b"IHDR", - o32(size[0]), # 0: size - o32(size[1]), - bit_depth, - color_type, - b"\0", # 10: compression - b"\0", # 11: filter category - b"\0", # 12: interlace flag - ) - - chunks = [b"cHRM", b"cICP", b"gAMA", b"sBIT", b"sRGB", b"tIME"] - - icc = im.encoderinfo.get("icc_profile", im.info.get("icc_profile")) - if icc: - # ICC profile - # according to PNG spec, the iCCP chunk contains: - # Profile name 1-79 bytes (character string) - # Null separator 1 byte (null character) - # Compression method 1 byte (0) - # Compressed profile n bytes (zlib with deflate compression) - name = b"ICC Profile" - data = name + b"\0\0" + zlib.compress(icc) - chunk(fp, b"iCCP", data) - - # You must either have sRGB or iCCP. - # Disallow sRGB chunks when an iCCP-chunk has been emitted. - chunks.remove(b"sRGB") - - info = im.encoderinfo.get("pnginfo") - if info: - chunks_multiple_allowed = [b"sPLT", b"iTXt", b"tEXt", b"zTXt"] - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid in chunks: - chunks.remove(cid) - chunk(fp, cid, data) - elif cid in chunks_multiple_allowed: - chunk(fp, cid, data) - elif cid[1:2].islower(): - # Private chunk - after_idat = len(info_chunk) == 3 and info_chunk[2] - if not after_idat: - chunk(fp, cid, data) - - if im.mode == "P": - palette_byte_number = colors * 3 - palette_bytes = im.im.getpalette("RGB")[:palette_byte_number] - while len(palette_bytes) < palette_byte_number: - palette_bytes += b"\0" - chunk(fp, b"PLTE", palette_bytes) - - transparency = im.encoderinfo.get("transparency", im.info.get("transparency", None)) - - if transparency or transparency == 0: - if im.mode == "P": - # limit to actual palette size - alpha_bytes = colors - if isinstance(transparency, bytes): - chunk(fp, b"tRNS", transparency[:alpha_bytes]) - else: - transparency = max(0, min(255, transparency)) - alpha = b"\xff" * transparency + b"\0" - chunk(fp, b"tRNS", alpha[:alpha_bytes]) - elif im.mode in ("1", "L", "I", "I;16"): - transparency = max(0, min(65535, transparency)) - chunk(fp, b"tRNS", o16(transparency)) - elif im.mode == "RGB": - red, green, blue = transparency - chunk(fp, b"tRNS", o16(red) + o16(green) + o16(blue)) - else: - if "transparency" in im.encoderinfo: - # don't bother with transparency if it's an RGBA - # and it's in the info dict. It's probably just stale. - msg = "cannot use transparency for this mode" - raise OSError(msg) - else: - if im.mode == "P" and im.im.getpalettemode() == "RGBA": - alpha = im.im.getpalette("RGBA", "A") - alpha_bytes = colors - chunk(fp, b"tRNS", alpha[:alpha_bytes]) - - dpi = im.encoderinfo.get("dpi") - if dpi: - chunk( - fp, - b"pHYs", - o32(int(dpi[0] / 0.0254 + 0.5)), - o32(int(dpi[1] / 0.0254 + 0.5)), - b"\x01", - ) - - if info: - chunks = [b"bKGD", b"hIST"] - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid in chunks: - chunks.remove(cid) - chunk(fp, cid, data) - - exif = im.encoderinfo.get("exif") - if exif: - if isinstance(exif, Image.Exif): - exif = exif.tobytes(8) - if exif.startswith(b"Exif\x00\x00"): - exif = exif[6:] - chunk(fp, b"eXIf", exif) - - single_im: Image.Image | None = im - if save_all: - single_im = _write_multiple_frames( - im, fp, chunk, mode, rawmode, default_image, append_images - ) - if single_im: - ImageFile._save( - single_im, - cast(IO[bytes], _idat(fp, chunk)), - [ImageFile._Tile("zip", (0, 0) + single_im.size, 0, rawmode)], - ) - - if info: - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid[1:2].islower(): - # Private chunk - after_idat = len(info_chunk) == 3 and info_chunk[2] - if after_idat: - chunk(fp, cid, data) - - chunk(fp, b"IEND", b"") - - if hasattr(fp, "flush"): - fp.flush() - - -# -------------------------------------------------------------------- -# PNG chunk converter - - -def getchunks(im: Image.Image, **params: Any) -> list[tuple[bytes, bytes, bytes]]: - """Return a list of PNG chunks representing this image.""" - from io import BytesIO - - chunks = [] - - def append(fp: IO[bytes], cid: bytes, *data: bytes) -> None: - byte_data = b"".join(data) - crc = o32(_crc32(byte_data, _crc32(cid))) - chunks.append((cid, byte_data, crc)) - - fp = BytesIO() - - try: - im.encoderinfo = params - _save(im, fp, "", append) - finally: - del im.encoderinfo - - return chunks - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(PngImageFile.format, PngImageFile, _accept) -Image.register_save(PngImageFile.format, _save) -Image.register_save_all(PngImageFile.format, _save_all) - -Image.register_extensions(PngImageFile.format, [".png", ".apng"]) - -Image.register_mime(PngImageFile.format, "image/png") diff --git a/myenv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py deleted file mode 100644 index db34d10..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py +++ /dev/null @@ -1,375 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PPM support for PIL -# -# History: -# 96-03-24 fl Created -# 98-03-06 fl Write RGBA images (as RGB, that is) -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import math -from typing import IO - -from . import Image, ImageFile -from ._binary import i16be as i16 -from ._binary import o8 -from ._binary import o32le as o32 - -# -# -------------------------------------------------------------------- - -b_whitespace = b"\x20\x09\x0a\x0b\x0c\x0d" - -MODES = { - # standard - b"P1": "1", - b"P2": "L", - b"P3": "RGB", - b"P4": "1", - b"P5": "L", - b"P6": "RGB", - # extensions - b"P0CMYK": "CMYK", - b"Pf": "F", - # PIL extensions (for test purposes only) - b"PyP": "P", - b"PyRGBA": "RGBA", - b"PyCMYK": "CMYK", -} - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"P") and prefix[1] in b"0123456fy" - - -## -# Image plugin for PBM, PGM, and PPM images. - - -class PpmImageFile(ImageFile.ImageFile): - format = "PPM" - format_description = "Pbmplus image" - - def _read_magic(self) -> bytes: - assert self.fp is not None - - magic = b"" - # read until whitespace or longest available magic number - for _ in range(6): - c = self.fp.read(1) - if not c or c in b_whitespace: - break - magic += c - return magic - - def _read_token(self) -> bytes: - assert self.fp is not None - - token = b"" - while len(token) <= 10: # read until next whitespace or limit of 10 characters - c = self.fp.read(1) - if not c: - break - elif c in b_whitespace: # token ended - if not token: - # skip whitespace at start - continue - break - elif c == b"#": - # ignores rest of the line; stops at CR, LF or EOF - while self.fp.read(1) not in b"\r\n": - pass - continue - token += c - if not token: - # Token was not even 1 byte - msg = "Reached EOF while reading header" - raise ValueError(msg) - elif len(token) > 10: - msg_too_long = b"Token too long in file header: %s" % token - raise ValueError(msg_too_long) - return token - - def _open(self) -> None: - assert self.fp is not None - - magic_number = self._read_magic() - try: - mode = MODES[magic_number] - except KeyError: - msg = "not a PPM file" - raise SyntaxError(msg) - self._mode = mode - - if magic_number in (b"P1", b"P4"): - self.custom_mimetype = "image/x-portable-bitmap" - elif magic_number in (b"P2", b"P5"): - self.custom_mimetype = "image/x-portable-graymap" - elif magic_number in (b"P3", b"P6"): - self.custom_mimetype = "image/x-portable-pixmap" - - self._size = int(self._read_token()), int(self._read_token()) - - decoder_name = "raw" - if magic_number in (b"P1", b"P2", b"P3"): - decoder_name = "ppm_plain" - - args: str | tuple[str | int, ...] - if mode == "1": - args = "1;I" - elif mode == "F": - scale = float(self._read_token()) - if scale == 0.0 or not math.isfinite(scale): - msg = "scale must be finite and non-zero" - raise ValueError(msg) - self.info["scale"] = abs(scale) - - rawmode = "F;32F" if scale < 0 else "F;32BF" - args = (rawmode, 0, -1) - else: - maxval = int(self._read_token()) - if not 0 < maxval < 65536: - msg = "maxval must be greater than 0 and less than 65536" - raise ValueError(msg) - if maxval > 255 and mode == "L": - self._mode = "I" - - rawmode = mode - if decoder_name != "ppm_plain": - # If maxval matches a bit depth, use the raw decoder directly - if maxval == 65535 and mode == "L": - rawmode = "I;16B" - elif maxval != 255: - decoder_name = "ppm" - - args = rawmode if decoder_name == "raw" else (rawmode, maxval) - self.tile = [ - ImageFile._Tile(decoder_name, (0, 0) + self.size, self.fp.tell(), args) - ] - - -# -# -------------------------------------------------------------------- - - -class PpmPlainDecoder(ImageFile.PyDecoder): - _pulls_fd = True - _comment_spans: bool - - def _read_block(self) -> bytes: - assert self.fd is not None - - return self.fd.read(ImageFile.SAFEBLOCK) - - def _find_comment_end(self, block: bytes, start: int = 0) -> int: - a = block.find(b"\n", start) - b = block.find(b"\r", start) - return min(a, b) if a * b > 0 else max(a, b) # lowest nonnegative index (or -1) - - def _ignore_comments(self, block: bytes) -> bytes: - if self._comment_spans: - # Finish current comment - while block: - comment_end = self._find_comment_end(block) - if comment_end != -1: - # Comment ends in this block - # Delete tail of comment - block = block[comment_end + 1 :] - break - else: - # Comment spans whole block - # So read the next block, looking for the end - block = self._read_block() - - # Search for any further comments - self._comment_spans = False - while True: - comment_start = block.find(b"#") - if comment_start == -1: - # No comment found - break - comment_end = self._find_comment_end(block, comment_start) - if comment_end != -1: - # Comment ends in this block - # Delete comment - block = block[:comment_start] + block[comment_end + 1 :] - else: - # Comment continues to next block(s) - block = block[:comment_start] - self._comment_spans = True - break - return block - - def _decode_bitonal(self) -> bytearray: - """ - This is a separate method because in the plain PBM format, all data tokens are - exactly one byte, so the inter-token whitespace is optional. - """ - data = bytearray() - total_bytes = self.state.xsize * self.state.ysize - - while len(data) != total_bytes: - block = self._read_block() # read next block - if not block: - # eof - break - - block = self._ignore_comments(block) - - tokens = b"".join(block.split()) - for token in tokens: - if token not in (48, 49): - msg = b"Invalid token for this mode: %s" % bytes([token]) - raise ValueError(msg) - data = (data + tokens)[:total_bytes] - invert = bytes.maketrans(b"01", b"\xff\x00") - return data.translate(invert) - - def _decode_blocks(self, maxval: int) -> bytearray: - data = bytearray() - max_len = 10 - out_byte_count = 4 if self.mode == "I" else 1 - out_max = 65535 if self.mode == "I" else 255 - bands = Image.getmodebands(self.mode) - total_bytes = self.state.xsize * self.state.ysize * bands * out_byte_count - - half_token = b"" - while len(data) != total_bytes: - block = self._read_block() # read next block - if not block: - if half_token: - block = bytearray(b" ") # flush half_token - else: - # eof - break - - block = self._ignore_comments(block) - - if half_token: - block = half_token + block # stitch half_token to new block - half_token = b"" - - tokens = block.split() - - if block and not block[-1:].isspace(): # block might split token - half_token = tokens.pop() # save half token for later - if len(half_token) > max_len: # prevent buildup of half_token - msg = ( - b"Token too long found in data: %s" % half_token[: max_len + 1] - ) - raise ValueError(msg) - - for token in tokens: - if len(token) > max_len: - msg = b"Token too long found in data: %s" % token[: max_len + 1] - raise ValueError(msg) - value = int(token) - if value < 0: - msg_str = f"Channel value is negative: {value}" - raise ValueError(msg_str) - if value > maxval: - msg_str = f"Channel value too large for this mode: {value}" - raise ValueError(msg_str) - value = round(value / maxval * out_max) - data += o32(value) if self.mode == "I" else o8(value) - if len(data) == total_bytes: # finished! - break - return data - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - self._comment_spans = False - if self.mode == "1": - data = self._decode_bitonal() - rawmode = "1;8" - else: - maxval = self.args[-1] - data = self._decode_blocks(maxval) - rawmode = "I;32" if self.mode == "I" else self.mode - self.set_as_raw(bytes(data), rawmode) - return -1, 0 - - -class PpmDecoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - - data = bytearray() - maxval = self.args[-1] - in_byte_count = 1 if maxval < 256 else 2 - out_byte_count = 4 if self.mode == "I" else 1 - out_max = 65535 if self.mode == "I" else 255 - bands = Image.getmodebands(self.mode) - dest_length = self.state.xsize * self.state.ysize * bands * out_byte_count - while len(data) < dest_length: - pixels = self.fd.read(in_byte_count * bands) - if len(pixels) < in_byte_count * bands: - # eof - break - for b in range(bands): - value = ( - pixels[b] if in_byte_count == 1 else i16(pixels, b * in_byte_count) - ) - value = min(out_max, round(value / maxval * out_max)) - data += o32(value) if self.mode == "I" else o8(value) - rawmode = "I;32" if self.mode == "I" else self.mode - self.set_as_raw(bytes(data), rawmode) - return -1, 0 - - -# -# -------------------------------------------------------------------- - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode == "1": - rawmode, head = "1;I", b"P4" - elif im.mode == "L": - rawmode, head = "L", b"P5" - elif im.mode in ("I", "I;16"): - rawmode, head = "I;16B", b"P5" - elif im.mode in ("RGB", "RGBA"): - rawmode, head = "RGB", b"P6" - elif im.mode == "F": - rawmode, head = "F;32F", b"Pf" - else: - msg = f"cannot write mode {im.mode} as PPM" - raise OSError(msg) - fp.write(head + b"\n%d %d\n" % im.size) - if head == b"P6": - fp.write(b"255\n") - elif head == b"P5": - if rawmode == "L": - fp.write(b"255\n") - else: - fp.write(b"65535\n") - elif head == b"Pf": - fp.write(b"-1.0\n") - row_order = -1 if im.mode == "F" else 1 - ImageFile._save( - im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, row_order))] - ) - - -# -# -------------------------------------------------------------------- - - -Image.register_open(PpmImageFile.format, PpmImageFile, _accept) -Image.register_save(PpmImageFile.format, _save) - -Image.register_decoder("ppm", PpmDecoder) -Image.register_decoder("ppm_plain", PpmPlainDecoder) - -Image.register_extensions(PpmImageFile.format, [".pbm", ".pgm", ".ppm", ".pnm", ".pfm"]) - -Image.register_mime(PpmImageFile.format, "image/x-portable-anymap") diff --git a/myenv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py deleted file mode 100644 index f49aaee..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py +++ /dev/null @@ -1,333 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# Adobe PSD 2.5/3.0 file handling -# -# History: -# 1995-09-01 fl Created -# 1997-01-03 fl Read most PSD images -# 1997-01-18 fl Fixed P and CMYK support -# 2001-10-21 fl Added seek/tell support (for layers) -# -# Copyright (c) 1997-2001 by Secret Labs AB. -# Copyright (c) 1995-2001 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -from functools import cached_property -from typing import IO - -from . import Image, ImageFile, ImagePalette -from ._binary import i8 -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import si16be as si16 -from ._binary import si32be as si32 -from ._util import DeferredError - -MODES = { - # (photoshop mode, bits) -> (pil mode, required channels) - (0, 1): ("1", 1), - (0, 8): ("L", 1), - (1, 8): ("L", 1), - (2, 8): ("P", 1), - (3, 8): ("RGB", 3), - (4, 8): ("CMYK", 4), - (7, 8): ("L", 1), # FIXME: multilayer - (8, 8): ("L", 1), # duotone - (9, 8): ("LAB", 3), -} - - -# --------------------------------------------------------------------. -# read PSD images - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"8BPS") - - -## -# Image plugin for Photoshop images. - - -class PsdImageFile(ImageFile.ImageFile): - format = "PSD" - format_description = "Adobe Photoshop" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - read = self.fp.read - - # - # header - - s = read(26) - if not _accept(s) or i16(s, 4) != 1: - msg = "not a PSD file" - raise SyntaxError(msg) - - psd_bits = i16(s, 22) - psd_channels = i16(s, 12) - psd_mode = i16(s, 24) - - mode, channels = MODES[(psd_mode, psd_bits)] - - if channels > psd_channels: - msg = "not enough channels" - raise OSError(msg) - if mode == "RGB" and psd_channels == 4: - mode = "RGBA" - channels = 4 - - self._mode = mode - self._size = i32(s, 18), i32(s, 14) - - # - # color mode data - - size = i32(read(4)) - if size: - data = read(size) - if mode == "P" and size == 768: - self.palette = ImagePalette.raw("RGB;L", data) - - # - # image resources - - self.resources = [] - - size = i32(read(4)) - if size: - # load resources - end = self.fp.tell() + size - while self.fp.tell() < end: - read(4) # signature - id = i16(read(2)) - name = read(i8(read(1))) - if not (len(name) & 1): - read(1) # padding - data = read(i32(read(4))) - if len(data) & 1: - read(1) # padding - self.resources.append((id, name, data)) - if id == 1039: # ICC profile - self.info["icc_profile"] = data - - # - # layer and mask information - - self._layers_position = None - - size = i32(read(4)) - if size: - end = self.fp.tell() + size - size = i32(read(4)) - if size: - self._layers_position = self.fp.tell() - self._layers_size = size - self.fp.seek(end) - self._n_frames: int | None = None - - # - # image descriptor - - self.tile = _maketile(self.fp, mode, (0, 0) + self.size, channels) - - # keep the file open - self._fp = self.fp - self.frame = 1 - self._min_frame = 1 - - @cached_property - def layers( - self, - ) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: - layers = [] - if self._layers_position is not None: - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self._fp.seek(self._layers_position) - _layer_data = io.BytesIO(ImageFile._safe_read(self._fp, self._layers_size)) - layers = _layerinfo(_layer_data, self._layers_size) - self._n_frames = len(layers) - return layers - - @property - def n_frames(self) -> int: - if self._n_frames is None: - self._n_frames = len(self.layers) - return self._n_frames - - @property - def is_animated(self) -> bool: - return len(self.layers) > 1 - - def seek(self, layer: int) -> None: - if not self._seek_check(layer): - return - if isinstance(self._fp, DeferredError): - raise self._fp.ex - - # seek to given layer (1..max) - _, mode, _, tile = self.layers[layer - 1] - self._mode = mode - self.tile = tile - self.frame = layer - self.fp = self._fp - - def tell(self) -> int: - # return layer number (0=image, 1..max=layers) - return self.frame - - -def _layerinfo( - fp: IO[bytes], ct_bytes: int -) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: - # read layerinfo block - layers = [] - - def read(size: int) -> bytes: - return ImageFile._safe_read(fp, size) - - ct = si16(read(2)) - - # sanity check - if ct_bytes < (abs(ct) * 20): - msg = "Layer block too short for number of layers requested" - raise SyntaxError(msg) - - for _ in range(abs(ct)): - # bounding box - y0 = si32(read(4)) - x0 = si32(read(4)) - y1 = si32(read(4)) - x1 = si32(read(4)) - - # image info - bands = [] - ct_types = i16(read(2)) - if ct_types > 4: - fp.seek(ct_types * 6 + 12, io.SEEK_CUR) - size = i32(read(4)) - fp.seek(size, io.SEEK_CUR) - continue - - for _ in range(ct_types): - type = i16(read(2)) - - if type == 65535: - b = "A" - else: - b = "RGBA"[type] - - bands.append(b) - read(4) # size - - # figure out the image mode - bands.sort() - if bands == ["R"]: - mode = "L" - elif bands == ["B", "G", "R"]: - mode = "RGB" - elif bands == ["A", "B", "G", "R"]: - mode = "RGBA" - else: - mode = "" # unknown - - # skip over blend flags and extra information - read(12) # filler - name = "" - size = i32(read(4)) # length of the extra data field - if size: - data_end = fp.tell() + size - - length = i32(read(4)) - if length: - fp.seek(length - 16, io.SEEK_CUR) - - length = i32(read(4)) - if length: - fp.seek(length, io.SEEK_CUR) - - length = i8(read(1)) - if length: - # Don't know the proper encoding, - # Latin-1 should be a good guess - name = read(length).decode("latin-1", "replace") - - fp.seek(data_end) - layers.append((name, mode, (x0, y0, x1, y1))) - - # get tiles - layerinfo = [] - for i, (name, mode, bbox) in enumerate(layers): - tile = [] - for m in mode: - t = _maketile(fp, m, bbox, 1) - if t: - tile.extend(t) - layerinfo.append((name, mode, bbox, tile)) - - return layerinfo - - -def _maketile( - file: IO[bytes], mode: str, bbox: tuple[int, int, int, int], channels: int -) -> list[ImageFile._Tile]: - tiles = [] - read = file.read - - compression = i16(read(2)) - - xsize = bbox[2] - bbox[0] - ysize = bbox[3] - bbox[1] - - offset = file.tell() - - if compression == 0: - # - # raw compression - for channel in range(channels): - layer = mode[channel] - if mode == "CMYK": - layer += ";I" - tiles.append(ImageFile._Tile("raw", bbox, offset, layer)) - offset = offset + xsize * ysize - - elif compression == 1: - # - # packbits compression - i = 0 - bytecount = read(channels * ysize * 2) - offset = file.tell() - for channel in range(channels): - layer = mode[channel] - if mode == "CMYK": - layer += ";I" - tiles.append(ImageFile._Tile("packbits", bbox, offset, layer)) - for y in range(ysize): - offset = offset + i16(bytecount, i) - i += 2 - - file.seek(offset) - - if offset & 1: - read(1) # padding - - return tiles - - -# -------------------------------------------------------------------- -# registry - - -Image.register_open(PsdImageFile.format, PsdImageFile, _accept) - -Image.register_extension(PsdImageFile.format, ".psd") - -Image.register_mime(PsdImageFile.format, "image/vnd.adobe.photoshop") diff --git a/myenv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py deleted file mode 100644 index dba5d80..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py +++ /dev/null @@ -1,234 +0,0 @@ -# -# The Python Imaging Library. -# -# QOI support for PIL -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -from typing import IO - -from . import Image, ImageFile -from ._binary import i32be as i32 -from ._binary import o8 -from ._binary import o32be as o32 - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"qoif") - - -class QoiImageFile(ImageFile.ImageFile): - format = "QOI" - format_description = "Quite OK Image" - - def _open(self) -> None: - if not _accept(self.fp.read(4)): - msg = "not a QOI file" - raise SyntaxError(msg) - - self._size = i32(self.fp.read(4)), i32(self.fp.read(4)) - - channels = self.fp.read(1)[0] - self._mode = "RGB" if channels == 3 else "RGBA" - - self.fp.seek(1, os.SEEK_CUR) # colorspace - self.tile = [ImageFile._Tile("qoi", (0, 0) + self._size, self.fp.tell())] - - -class QoiDecoder(ImageFile.PyDecoder): - _pulls_fd = True - _previous_pixel: bytes | bytearray | None = None - _previously_seen_pixels: dict[int, bytes | bytearray] = {} - - def _add_to_previous_pixels(self, value: bytes | bytearray) -> None: - self._previous_pixel = value - - r, g, b, a = value - hash_value = (r * 3 + g * 5 + b * 7 + a * 11) % 64 - self._previously_seen_pixels[hash_value] = value - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - - self._previously_seen_pixels = {} - self._previous_pixel = bytearray((0, 0, 0, 255)) - - data = bytearray() - bands = Image.getmodebands(self.mode) - dest_length = self.state.xsize * self.state.ysize * bands - while len(data) < dest_length: - byte = self.fd.read(1)[0] - value: bytes | bytearray - if byte == 0b11111110 and self._previous_pixel: # QOI_OP_RGB - value = bytearray(self.fd.read(3)) + self._previous_pixel[3:] - elif byte == 0b11111111: # QOI_OP_RGBA - value = self.fd.read(4) - else: - op = byte >> 6 - if op == 0: # QOI_OP_INDEX - op_index = byte & 0b00111111 - value = self._previously_seen_pixels.get( - op_index, bytearray((0, 0, 0, 0)) - ) - elif op == 1 and self._previous_pixel: # QOI_OP_DIFF - value = bytearray( - ( - (self._previous_pixel[0] + ((byte & 0b00110000) >> 4) - 2) - % 256, - (self._previous_pixel[1] + ((byte & 0b00001100) >> 2) - 2) - % 256, - (self._previous_pixel[2] + (byte & 0b00000011) - 2) % 256, - self._previous_pixel[3], - ) - ) - elif op == 2 and self._previous_pixel: # QOI_OP_LUMA - second_byte = self.fd.read(1)[0] - diff_green = (byte & 0b00111111) - 32 - diff_red = ((second_byte & 0b11110000) >> 4) - 8 - diff_blue = (second_byte & 0b00001111) - 8 - - value = bytearray( - tuple( - (self._previous_pixel[i] + diff_green + diff) % 256 - for i, diff in enumerate((diff_red, 0, diff_blue)) - ) - ) - value += self._previous_pixel[3:] - elif op == 3 and self._previous_pixel: # QOI_OP_RUN - run_length = (byte & 0b00111111) + 1 - value = self._previous_pixel - if bands == 3: - value = value[:3] - data += value * run_length - continue - self._add_to_previous_pixels(value) - - if bands == 3: - value = value[:3] - data += value - self.set_as_raw(data) - return -1, 0 - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode == "RGB": - channels = 3 - elif im.mode == "RGBA": - channels = 4 - else: - msg = "Unsupported QOI image mode" - raise ValueError(msg) - - colorspace = 0 if im.encoderinfo.get("colorspace") == "sRGB" else 1 - - fp.write(b"qoif") - fp.write(o32(im.size[0])) - fp.write(o32(im.size[1])) - fp.write(o8(channels)) - fp.write(o8(colorspace)) - - ImageFile._save(im, fp, [ImageFile._Tile("qoi", (0, 0) + im.size)]) - - -class QoiEncoder(ImageFile.PyEncoder): - _pushes_fd = True - _previous_pixel: tuple[int, int, int, int] | None = None - _previously_seen_pixels: dict[int, tuple[int, int, int, int]] = {} - _run = 0 - - def _write_run(self) -> bytes: - data = o8(0b11000000 | (self._run - 1)) # QOI_OP_RUN - self._run = 0 - return data - - def _delta(self, left: int, right: int) -> int: - result = (left - right) & 255 - if result >= 128: - result -= 256 - return result - - def encode(self, bufsize: int) -> tuple[int, int, bytes]: - assert self.im is not None - - self._previously_seen_pixels = {0: (0, 0, 0, 0)} - self._previous_pixel = (0, 0, 0, 255) - - data = bytearray() - w, h = self.im.size - bands = Image.getmodebands(self.mode) - - for y in range(h): - for x in range(w): - pixel = self.im.getpixel((x, y)) - if bands == 3: - pixel = (*pixel, 255) - - if pixel == self._previous_pixel: - self._run += 1 - if self._run == 62: - data += self._write_run() - else: - if self._run: - data += self._write_run() - - r, g, b, a = pixel - hash_value = (r * 3 + g * 5 + b * 7 + a * 11) % 64 - if self._previously_seen_pixels.get(hash_value) == pixel: - data += o8(hash_value) # QOI_OP_INDEX - elif self._previous_pixel: - self._previously_seen_pixels[hash_value] = pixel - - prev_r, prev_g, prev_b, prev_a = self._previous_pixel - if prev_a == a: - delta_r = self._delta(r, prev_r) - delta_g = self._delta(g, prev_g) - delta_b = self._delta(b, prev_b) - - if ( - -2 <= delta_r < 2 - and -2 <= delta_g < 2 - and -2 <= delta_b < 2 - ): - data += o8( - 0b01000000 - | (delta_r + 2) << 4 - | (delta_g + 2) << 2 - | (delta_b + 2) - ) # QOI_OP_DIFF - else: - delta_gr = self._delta(delta_r, delta_g) - delta_gb = self._delta(delta_b, delta_g) - if ( - -8 <= delta_gr < 8 - and -32 <= delta_g < 32 - and -8 <= delta_gb < 8 - ): - data += o8( - 0b10000000 | (delta_g + 32) - ) # QOI_OP_LUMA - data += o8((delta_gr + 8) << 4 | (delta_gb + 8)) - else: - data += o8(0b11111110) # QOI_OP_RGB - data += bytes(pixel[:3]) - else: - data += o8(0b11111111) # QOI_OP_RGBA - data += bytes(pixel) - - self._previous_pixel = pixel - - if self._run: - data += self._write_run() - data += bytes((0, 0, 0, 0, 0, 0, 0, 1)) # padding - - return len(data), 0, data - - -Image.register_open(QoiImageFile.format, QoiImageFile, _accept) -Image.register_decoder("qoi", QoiDecoder) -Image.register_extension(QoiImageFile.format, ".qoi") - -Image.register_save(QoiImageFile.format, _save) -Image.register_encoder("qoi", QoiEncoder) diff --git a/myenv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py deleted file mode 100644 index 8530221..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py +++ /dev/null @@ -1,231 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# SGI image file handling -# -# See "The SGI Image File Format (Draft version 0.97)", Paul Haeberli. -# -# -# -# History: -# 2017-22-07 mb Add RLE decompression -# 2016-16-10 mb Add save method without compression -# 1995-09-10 fl Created -# -# Copyright (c) 2016 by Mickael Bonfill. -# Copyright (c) 2008 by Karsten Hiddemann. -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1995 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import os -import struct -from typing import IO - -from . import Image, ImageFile -from ._binary import i16be as i16 -from ._binary import o8 - - -def _accept(prefix: bytes) -> bool: - return len(prefix) >= 2 and i16(prefix) == 474 - - -MODES = { - (1, 1, 1): "L", - (1, 2, 1): "L", - (2, 1, 1): "L;16B", - (2, 2, 1): "L;16B", - (1, 3, 3): "RGB", - (2, 3, 3): "RGB;16B", - (1, 3, 4): "RGBA", - (2, 3, 4): "RGBA;16B", -} - - -## -# Image plugin for SGI images. -class SgiImageFile(ImageFile.ImageFile): - format = "SGI" - format_description = "SGI Image File Format" - - def _open(self) -> None: - # HEAD - assert self.fp is not None - - headlen = 512 - s = self.fp.read(headlen) - - if not _accept(s): - msg = "Not an SGI image file" - raise ValueError(msg) - - # compression : verbatim or RLE - compression = s[2] - - # bpc : 1 or 2 bytes (8bits or 16bits) - bpc = s[3] - - # dimension : 1, 2 or 3 (depending on xsize, ysize and zsize) - dimension = i16(s, 4) - - # xsize : width - xsize = i16(s, 6) - - # ysize : height - ysize = i16(s, 8) - - # zsize : channels count - zsize = i16(s, 10) - - # determine mode from bits/zsize - try: - rawmode = MODES[(bpc, dimension, zsize)] - except KeyError: - msg = "Unsupported SGI image mode" - raise ValueError(msg) - - self._size = xsize, ysize - self._mode = rawmode.split(";")[0] - if self.mode == "RGB": - self.custom_mimetype = "image/rgb" - - # orientation -1 : scanlines begins at the bottom-left corner - orientation = -1 - - # decoder info - if compression == 0: - pagesize = xsize * ysize * bpc - if bpc == 2: - self.tile = [ - ImageFile._Tile( - "SGI16", - (0, 0) + self.size, - headlen, - (self.mode, 0, orientation), - ) - ] - else: - self.tile = [] - offset = headlen - for layer in self.mode: - self.tile.append( - ImageFile._Tile( - "raw", (0, 0) + self.size, offset, (layer, 0, orientation) - ) - ) - offset += pagesize - elif compression == 1: - self.tile = [ - ImageFile._Tile( - "sgi_rle", (0, 0) + self.size, headlen, (rawmode, orientation, bpc) - ) - ] - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode not in {"RGB", "RGBA", "L"}: - msg = "Unsupported SGI image mode" - raise ValueError(msg) - - # Get the keyword arguments - info = im.encoderinfo - - # Byte-per-pixel precision, 1 = 8bits per pixel - bpc = info.get("bpc", 1) - - if bpc not in (1, 2): - msg = "Unsupported number of bytes per pixel" - raise ValueError(msg) - - # Flip the image, since the origin of SGI file is the bottom-left corner - orientation = -1 - # Define the file as SGI File Format - magic_number = 474 - # Run-Length Encoding Compression - Unsupported at this time - rle = 0 - - # X Dimension = width / Y Dimension = height - x, y = im.size - # Z Dimension: Number of channels - z = len(im.mode) - # Number of dimensions (x,y,z) - if im.mode == "L": - dimension = 1 if y == 1 else 2 - else: - dimension = 3 - - # Minimum Byte value - pinmin = 0 - # Maximum Byte value (255 = 8bits per pixel) - pinmax = 255 - # Image name (79 characters max, truncated below in write) - img_name = os.path.splitext(os.path.basename(filename))[0] - if isinstance(img_name, str): - img_name = img_name.encode("ascii", "ignore") - # Standard representation of pixel in the file - colormap = 0 - fp.write(struct.pack(">h", magic_number)) - fp.write(o8(rle)) - fp.write(o8(bpc)) - fp.write(struct.pack(">H", dimension)) - fp.write(struct.pack(">H", x)) - fp.write(struct.pack(">H", y)) - fp.write(struct.pack(">H", z)) - fp.write(struct.pack(">l", pinmin)) - fp.write(struct.pack(">l", pinmax)) - fp.write(struct.pack("4s", b"")) # dummy - fp.write(struct.pack("79s", img_name)) # truncates to 79 chars - fp.write(struct.pack("s", b"")) # force null byte after img_name - fp.write(struct.pack(">l", colormap)) - fp.write(struct.pack("404s", b"")) # dummy - - rawmode = "L" - if bpc == 2: - rawmode = "L;16B" - - for channel in im.split(): - fp.write(channel.tobytes("raw", rawmode, 0, orientation)) - - if hasattr(fp, "flush"): - fp.flush() - - -class SGI16Decoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - assert self.im is not None - - rawmode, stride, orientation = self.args - pagesize = self.state.xsize * self.state.ysize - zsize = len(self.mode) - self.fd.seek(512) - - for band in range(zsize): - channel = Image.new("L", (self.state.xsize, self.state.ysize)) - channel.frombytes( - self.fd.read(2 * pagesize), "raw", "L;16B", stride, orientation - ) - self.im.putband(channel.im, band) - - return -1, 0 - - -# -# registry - - -Image.register_decoder("SGI16", SGI16Decoder) -Image.register_open(SgiImageFile.format, SgiImageFile, _accept) -Image.register_save(SgiImageFile.format, _save) -Image.register_mime(SgiImageFile.format, "image/sgi") - -Image.register_extensions(SgiImageFile.format, [".bw", ".rgb", ".rgba", ".sgi"]) - -# End of file diff --git a/myenv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py deleted file mode 100644 index 868019e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py +++ /dev/null @@ -1,331 +0,0 @@ -# -# The Python Imaging Library. -# -# SPIDER image file handling -# -# History: -# 2004-08-02 Created BB -# 2006-03-02 added save method -# 2006-03-13 added support for stack images -# -# Copyright (c) 2004 by Health Research Inc. (HRI) RENSSELAER, NY 12144. -# Copyright (c) 2004 by William Baxter. -# Copyright (c) 2004 by Secret Labs AB. -# Copyright (c) 2004 by Fredrik Lundh. -# - -## -# Image plugin for the Spider image format. This format is used -# by the SPIDER software, in processing image data from electron -# microscopy and tomography. -## - -# -# SpiderImagePlugin.py -# -# The Spider image format is used by SPIDER software, in processing -# image data from electron microscopy and tomography. -# -# Spider home page: -# https://spider.wadsworth.org/spider_doc/spider/docs/spider.html -# -# Details about the Spider image format: -# https://spider.wadsworth.org/spider_doc/spider/docs/image_doc.html -# -from __future__ import annotations - -import os -import struct -import sys -from typing import IO, Any, cast - -from . import Image, ImageFile -from ._util import DeferredError - -TYPE_CHECKING = False - - -def isInt(f: Any) -> int: - try: - i = int(f) - if f - i == 0: - return 1 - else: - return 0 - except (ValueError, OverflowError): - return 0 - - -iforms = [1, 3, -11, -12, -21, -22] - - -# There is no magic number to identify Spider files, so just check a -# series of header locations to see if they have reasonable values. -# Returns no. of bytes in the header, if it is a valid Spider header, -# otherwise returns 0 - - -def isSpiderHeader(t: tuple[float, ...]) -> int: - h = (99,) + t # add 1 value so can use spider header index start=1 - # header values 1,2,5,12,13,22,23 should be integers - for i in [1, 2, 5, 12, 13, 22, 23]: - if not isInt(h[i]): - return 0 - # check iform - iform = int(h[5]) - if iform not in iforms: - return 0 - # check other header values - labrec = int(h[13]) # no. records in file header - labbyt = int(h[22]) # total no. of bytes in header - lenbyt = int(h[23]) # record length in bytes - if labbyt != (labrec * lenbyt): - return 0 - # looks like a valid header - return labbyt - - -def isSpiderImage(filename: str) -> int: - with open(filename, "rb") as fp: - f = fp.read(92) # read 23 * 4 bytes - t = struct.unpack(">23f", f) # try big-endian first - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - t = struct.unpack("<23f", f) # little-endian - hdrlen = isSpiderHeader(t) - return hdrlen - - -class SpiderImageFile(ImageFile.ImageFile): - format = "SPIDER" - format_description = "Spider 2D image" - _close_exclusive_fp_after_loading = False - - def _open(self) -> None: - # check header - n = 27 * 4 # read 27 float values - f = self.fp.read(n) - - try: - self.bigendian = 1 - t = struct.unpack(">27f", f) # try big-endian first - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - self.bigendian = 0 - t = struct.unpack("<27f", f) # little-endian - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - msg = "not a valid Spider file" - raise SyntaxError(msg) - except struct.error as e: - msg = "not a valid Spider file" - raise SyntaxError(msg) from e - - h = (99,) + t # add 1 value : spider header index starts at 1 - iform = int(h[5]) - if iform != 1: - msg = "not a Spider 2D image" - raise SyntaxError(msg) - - self._size = int(h[12]), int(h[2]) # size in pixels (width, height) - self.istack = int(h[24]) - self.imgnumber = int(h[27]) - - if self.istack == 0 and self.imgnumber == 0: - # stk=0, img=0: a regular 2D image - offset = hdrlen - self._nimages = 1 - elif self.istack > 0 and self.imgnumber == 0: - # stk>0, img=0: Opening the stack for the first time - self.imgbytes = int(h[12]) * int(h[2]) * 4 - self.hdrlen = hdrlen - self._nimages = int(h[26]) - # Point to the first image in the stack - offset = hdrlen * 2 - self.imgnumber = 1 - elif self.istack == 0 and self.imgnumber > 0: - # stk=0, img>0: an image within the stack - offset = hdrlen + self.stkoffset - self.istack = 2 # So Image knows it's still a stack - else: - msg = "inconsistent stack header values" - raise SyntaxError(msg) - - if self.bigendian: - self.rawmode = "F;32BF" - else: - self.rawmode = "F;32F" - self._mode = "F" - - self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, offset, self.rawmode)] - self._fp = self.fp # FIXME: hack - - @property - def n_frames(self) -> int: - return self._nimages - - @property - def is_animated(self) -> bool: - return self._nimages > 1 - - # 1st image index is zero (although SPIDER imgnumber starts at 1) - def tell(self) -> int: - if self.imgnumber < 1: - return 0 - else: - return self.imgnumber - 1 - - def seek(self, frame: int) -> None: - if self.istack == 0: - msg = "attempt to seek in a non-stack file" - raise EOFError(msg) - if not self._seek_check(frame): - return - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes) - self.fp = self._fp - self.fp.seek(self.stkoffset) - self._open() - - # returns a byte image after rescaling to 0..255 - def convert2byte(self, depth: int = 255) -> Image.Image: - extrema = self.getextrema() - assert isinstance(extrema[0], float) - minimum, maximum = cast(tuple[float, float], extrema) - m: float = 1 - if maximum != minimum: - m = depth / (maximum - minimum) - b = -m * minimum - return self.point(lambda i: i * m + b).convert("L") - - if TYPE_CHECKING: - from . import ImageTk - - # returns a ImageTk.PhotoImage object, after rescaling to 0..255 - def tkPhotoImage(self) -> ImageTk.PhotoImage: - from . import ImageTk - - return ImageTk.PhotoImage(self.convert2byte(), palette=256) - - -# -------------------------------------------------------------------- -# Image series - - -# given a list of filenames, return a list of images -def loadImageSeries(filelist: list[str] | None = None) -> list[Image.Image] | None: - """create a list of :py:class:`~PIL.Image.Image` objects for use in a montage""" - if filelist is None or len(filelist) < 1: - return None - - byte_imgs = [] - for img in filelist: - if not os.path.exists(img): - print(f"unable to find {img}") - continue - try: - with Image.open(img) as im: - assert isinstance(im, SpiderImageFile) - byte_im = im.convert2byte() - except Exception: - if not isSpiderImage(img): - print(f"{img} is not a Spider image file") - continue - byte_im.info["filename"] = img - byte_imgs.append(byte_im) - return byte_imgs - - -# -------------------------------------------------------------------- -# For saving images in Spider format - - -def makeSpiderHeader(im: Image.Image) -> list[bytes]: - nsam, nrow = im.size - lenbyt = nsam * 4 # There are labrec records in the header - labrec = int(1024 / lenbyt) - if 1024 % lenbyt != 0: - labrec += 1 - labbyt = labrec * lenbyt - nvalues = int(labbyt / 4) - if nvalues < 23: - return [] - - hdr = [0.0] * nvalues - - # NB these are Fortran indices - hdr[1] = 1.0 # nslice (=1 for an image) - hdr[2] = float(nrow) # number of rows per slice - hdr[3] = float(nrow) # number of records in the image - hdr[5] = 1.0 # iform for 2D image - hdr[12] = float(nsam) # number of pixels per line - hdr[13] = float(labrec) # number of records in file header - hdr[22] = float(labbyt) # total number of bytes in header - hdr[23] = float(lenbyt) # record length in bytes - - # adjust for Fortran indexing - hdr = hdr[1:] - hdr.append(0.0) - # pack binary data into a string - return [struct.pack("f", v) for v in hdr] - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode != "F": - im = im.convert("F") - - hdr = makeSpiderHeader(im) - if len(hdr) < 256: - msg = "Error creating Spider header" - raise OSError(msg) - - # write the SPIDER header - fp.writelines(hdr) - - rawmode = "F;32NF" # 32-bit native floating point - ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, rawmode)]) - - -def _save_spider(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - # get the filename extension and register it with Image - filename_ext = os.path.splitext(filename)[1] - ext = filename_ext.decode() if isinstance(filename_ext, bytes) else filename_ext - Image.register_extension(SpiderImageFile.format, ext) - _save(im, fp, filename) - - -# -------------------------------------------------------------------- - - -Image.register_open(SpiderImageFile.format, SpiderImageFile) -Image.register_save(SpiderImageFile.format, _save_spider) - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("Syntax: python3 SpiderImagePlugin.py [infile] [outfile]") - sys.exit() - - filename = sys.argv[1] - if not isSpiderImage(filename): - print("input image must be in Spider format") - sys.exit() - - with Image.open(filename) as im: - print(f"image: {im}") - print(f"format: {im.format}") - print(f"size: {im.size}") - print(f"mode: {im.mode}") - print("max, min: ", end=" ") - print(im.getextrema()) - - if len(sys.argv) > 2: - outfile = sys.argv[2] - - # perform some image operation - im = im.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - print( - f"saving a flipped version of {os.path.basename(filename)} " - f"as {outfile} " - ) - im.save(outfile, SpiderImageFile.format) diff --git a/myenv/lib/python3.12/site-packages/PIL/SunImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/SunImagePlugin.py deleted file mode 100644 index 8912379..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/SunImagePlugin.py +++ /dev/null @@ -1,145 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Sun image file handling -# -# History: -# 1995-09-10 fl Created -# 1996-05-28 fl Fixed 32-bit alignment -# 1998-12-29 fl Import ImagePalette module -# 2001-12-18 fl Fixed palette loading (from Jean-Claude Rimbault) -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1995-1996 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -from . import Image, ImageFile, ImagePalette -from ._binary import i32be as i32 - - -def _accept(prefix: bytes) -> bool: - return len(prefix) >= 4 and i32(prefix) == 0x59A66A95 - - -## -# Image plugin for Sun raster files. - - -class SunImageFile(ImageFile.ImageFile): - format = "SUN" - format_description = "Sun Raster File" - - def _open(self) -> None: - # The Sun Raster file header is 32 bytes in length - # and has the following format: - - # typedef struct _SunRaster - # { - # DWORD MagicNumber; /* Magic (identification) number */ - # DWORD Width; /* Width of image in pixels */ - # DWORD Height; /* Height of image in pixels */ - # DWORD Depth; /* Number of bits per pixel */ - # DWORD Length; /* Size of image data in bytes */ - # DWORD Type; /* Type of raster file */ - # DWORD ColorMapType; /* Type of color map */ - # DWORD ColorMapLength; /* Size of the color map in bytes */ - # } SUNRASTER; - - assert self.fp is not None - - # HEAD - s = self.fp.read(32) - if not _accept(s): - msg = "not an SUN raster file" - raise SyntaxError(msg) - - offset = 32 - - self._size = i32(s, 4), i32(s, 8) - - depth = i32(s, 12) - # data_length = i32(s, 16) # unreliable, ignore. - file_type = i32(s, 20) - palette_type = i32(s, 24) # 0: None, 1: RGB, 2: Raw/arbitrary - palette_length = i32(s, 28) - - if depth == 1: - self._mode, rawmode = "1", "1;I" - elif depth == 4: - self._mode, rawmode = "L", "L;4" - elif depth == 8: - self._mode = rawmode = "L" - elif depth == 24: - if file_type == 3: - self._mode, rawmode = "RGB", "RGB" - else: - self._mode, rawmode = "RGB", "BGR" - elif depth == 32: - if file_type == 3: - self._mode, rawmode = "RGB", "RGBX" - else: - self._mode, rawmode = "RGB", "BGRX" - else: - msg = "Unsupported Mode/Bit Depth" - raise SyntaxError(msg) - - if palette_length: - if palette_length > 1024: - msg = "Unsupported Color Palette Length" - raise SyntaxError(msg) - - if palette_type != 1: - msg = "Unsupported Palette Type" - raise SyntaxError(msg) - - offset = offset + palette_length - self.palette = ImagePalette.raw("RGB;L", self.fp.read(palette_length)) - if self.mode == "L": - self._mode = "P" - rawmode = rawmode.replace("L", "P") - - # 16 bit boundaries on stride - stride = ((self.size[0] * depth + 15) // 16) * 2 - - # file type: Type is the version (or flavor) of the bitmap - # file. The following values are typically found in the Type - # field: - # 0000h Old - # 0001h Standard - # 0002h Byte-encoded - # 0003h RGB format - # 0004h TIFF format - # 0005h IFF format - # FFFFh Experimental - - # Old and standard are the same, except for the length tag. - # byte-encoded is run-length-encoded - # RGB looks similar to standard, but RGB byte order - # TIFF and IFF mean that they were converted from T/IFF - # Experimental means that it's something else. - # (https://www.fileformat.info/format/sunraster/egff.htm) - - if file_type in (0, 1, 3, 4, 5): - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride)) - ] - elif file_type == 2: - self.tile = [ - ImageFile._Tile("sun_rle", (0, 0) + self.size, offset, rawmode) - ] - else: - msg = "Unsupported Sun Raster file type" - raise SyntaxError(msg) - - -# -# registry - - -Image.register_open(SunImageFile.format, SunImageFile, _accept) - -Image.register_extension(SunImageFile.format, ".ras") diff --git a/myenv/lib/python3.12/site-packages/PIL/TarIO.py b/myenv/lib/python3.12/site-packages/PIL/TarIO.py deleted file mode 100644 index 86490a4..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/TarIO.py +++ /dev/null @@ -1,61 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# read files from within a tar file -# -# History: -# 95-06-18 fl Created -# 96-05-28 fl Open files in binary mode -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995-96. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io - -from . import ContainerIO - - -class TarIO(ContainerIO.ContainerIO[bytes]): - """A file object that provides read access to a given member of a TAR file.""" - - def __init__(self, tarfile: str, file: str) -> None: - """ - Create file object. - - :param tarfile: Name of TAR file. - :param file: Name of member file. - """ - self.fh = open(tarfile, "rb") - - while True: - s = self.fh.read(512) - if len(s) != 512: - self.fh.close() - - msg = "unexpected end of tar file" - raise OSError(msg) - - name = s[:100].decode("utf-8") - i = name.find("\0") - if i == 0: - self.fh.close() - - msg = "cannot find subfile" - raise OSError(msg) - if i > 0: - name = name[:i] - - size = int(s[124:135], 8) - - if file == name: - break - - self.fh.seek((size + 511) & (~511), io.SEEK_CUR) - - # Open region - super().__init__(self.fh, self.fh.tell(), size) diff --git a/myenv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py deleted file mode 100644 index 90d5b5c..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py +++ /dev/null @@ -1,264 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TGA file handling -# -# History: -# 95-09-01 fl created (reads 24-bit files only) -# 97-01-04 fl support more TGA versions, including compressed images -# 98-07-04 fl fixed orientation and alpha layer bugs -# 98-09-11 fl fixed orientation for runlength decoder -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1995-97. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import warnings -from typing import IO - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 - -# -# -------------------------------------------------------------------- -# Read RGA file - - -MODES = { - # map imagetype/depth to rawmode - (1, 8): "P", - (3, 1): "1", - (3, 8): "L", - (3, 16): "LA", - (2, 16): "BGRA;15Z", - (2, 24): "BGR", - (2, 32): "BGRA", -} - - -## -# Image plugin for Targa files. - - -class TgaImageFile(ImageFile.ImageFile): - format = "TGA" - format_description = "Targa" - - def _open(self) -> None: - # process header - assert self.fp is not None - - s = self.fp.read(18) - - id_len = s[0] - - colormaptype = s[1] - imagetype = s[2] - - depth = s[16] - - flags = s[17] - - self._size = i16(s, 12), i16(s, 14) - - # validate header fields - if ( - colormaptype not in (0, 1) - or self.size[0] <= 0 - or self.size[1] <= 0 - or depth not in (1, 8, 16, 24, 32) - ): - msg = "not a TGA file" - raise SyntaxError(msg) - - # image mode - if imagetype in (3, 11): - self._mode = "L" - if depth == 1: - self._mode = "1" # ??? - elif depth == 16: - self._mode = "LA" - elif imagetype in (1, 9): - self._mode = "P" if colormaptype else "L" - elif imagetype in (2, 10): - self._mode = "RGB" if depth == 24 else "RGBA" - else: - msg = "unknown TGA mode" - raise SyntaxError(msg) - - # orientation - orientation = flags & 0x30 - self._flip_horizontally = orientation in [0x10, 0x30] - if orientation in [0x20, 0x30]: - orientation = 1 - elif orientation in [0, 0x10]: - orientation = -1 - else: - msg = "unknown TGA orientation" - raise SyntaxError(msg) - - self.info["orientation"] = orientation - - if imagetype & 8: - self.info["compression"] = "tga_rle" - - if id_len: - self.info["id_section"] = self.fp.read(id_len) - - if colormaptype: - # read palette - start, size, mapdepth = i16(s, 3), i16(s, 5), s[7] - if mapdepth == 16: - self.palette = ImagePalette.raw( - "BGRA;15Z", bytes(2 * start) + self.fp.read(2 * size) - ) - self.palette.mode = "RGBA" - elif mapdepth == 24: - self.palette = ImagePalette.raw( - "BGR", bytes(3 * start) + self.fp.read(3 * size) - ) - elif mapdepth == 32: - self.palette = ImagePalette.raw( - "BGRA", bytes(4 * start) + self.fp.read(4 * size) - ) - else: - msg = "unknown TGA map depth" - raise SyntaxError(msg) - - # setup tile descriptor - try: - rawmode = MODES[(imagetype & 7, depth)] - if imagetype & 8: - # compressed - self.tile = [ - ImageFile._Tile( - "tga_rle", - (0, 0) + self.size, - self.fp.tell(), - (rawmode, orientation, depth), - ) - ] - else: - self.tile = [ - ImageFile._Tile( - "raw", - (0, 0) + self.size, - self.fp.tell(), - (rawmode, 0, orientation), - ) - ] - except KeyError: - pass # cannot decode - - def load_end(self) -> None: - if self._flip_horizontally: - self.im = self.im.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - - -# -# -------------------------------------------------------------------- -# Write TGA file - - -SAVE = { - "1": ("1", 1, 0, 3), - "L": ("L", 8, 0, 3), - "LA": ("LA", 16, 0, 3), - "P": ("P", 8, 1, 1), - "RGB": ("BGR", 24, 0, 2), - "RGBA": ("BGRA", 32, 0, 2), -} - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - try: - rawmode, bits, colormaptype, imagetype = SAVE[im.mode] - except KeyError as e: - msg = f"cannot write mode {im.mode} as TGA" - raise OSError(msg) from e - - if "rle" in im.encoderinfo: - rle = im.encoderinfo["rle"] - else: - compression = im.encoderinfo.get("compression", im.info.get("compression")) - rle = compression == "tga_rle" - if rle: - imagetype += 8 - - id_section = im.encoderinfo.get("id_section", im.info.get("id_section", "")) - id_len = len(id_section) - if id_len > 255: - id_len = 255 - id_section = id_section[:255] - warnings.warn("id_section has been trimmed to 255 characters") - - if colormaptype: - palette = im.im.getpalette("RGB", "BGR") - colormaplength, colormapentry = len(palette) // 3, 24 - else: - colormaplength, colormapentry = 0, 0 - - if im.mode in ("LA", "RGBA"): - flags = 8 - else: - flags = 0 - - orientation = im.encoderinfo.get("orientation", im.info.get("orientation", -1)) - if orientation > 0: - flags = flags | 0x20 - - fp.write( - o8(id_len) - + o8(colormaptype) - + o8(imagetype) - + o16(0) # colormapfirst - + o16(colormaplength) - + o8(colormapentry) - + o16(0) - + o16(0) - + o16(im.size[0]) - + o16(im.size[1]) - + o8(bits) - + o8(flags) - ) - - if id_section: - fp.write(id_section) - - if colormaptype: - fp.write(palette) - - if rle: - ImageFile._save( - im, - fp, - [ImageFile._Tile("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))], - ) - else: - ImageFile._save( - im, - fp, - [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))], - ) - - # write targa version 2 footer - fp.write(b"\000" * 8 + b"TRUEVISION-XFILE." + b"\000") - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(TgaImageFile.format, TgaImageFile) -Image.register_save(TgaImageFile.format, _save) - -Image.register_extensions(TgaImageFile.format, [".tga", ".icb", ".vda", ".vst"]) - -Image.register_mime(TgaImageFile.format, "image/x-tga") diff --git a/myenv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py deleted file mode 100644 index daf20f2..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py +++ /dev/null @@ -1,2339 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TIFF file handling -# -# TIFF is a flexible, if somewhat aged, image file format originally -# defined by Aldus. Although TIFF supports a wide variety of pixel -# layouts and compression methods, the name doesn't really stand for -# "thousands of incompatible file formats," it just feels that way. -# -# To read TIFF data from a stream, the stream must be seekable. For -# progressive decoding, make sure to use TIFF files where the tag -# directory is placed first in the file. -# -# History: -# 1995-09-01 fl Created -# 1996-05-04 fl Handle JPEGTABLES tag -# 1996-05-18 fl Fixed COLORMAP support -# 1997-01-05 fl Fixed PREDICTOR support -# 1997-08-27 fl Added support for rational tags (from Perry Stoll) -# 1998-01-10 fl Fixed seek/tell (from Jan Blom) -# 1998-07-15 fl Use private names for internal variables -# 1999-06-13 fl Rewritten for PIL 1.0 (1.0) -# 2000-10-11 fl Additional fixes for Python 2.0 (1.1) -# 2001-04-17 fl Fixed rewind support (seek to frame 0) (1.2) -# 2001-05-12 fl Added write support for more tags (from Greg Couch) (1.3) -# 2001-12-18 fl Added workaround for broken Matrox library -# 2002-01-18 fl Don't mess up if photometric tag is missing (D. Alan Stewart) -# 2003-05-19 fl Check FILLORDER tag -# 2003-09-26 fl Added RGBa support -# 2004-02-24 fl Added DPI support; fixed rational write support -# 2005-02-07 fl Added workaround for broken Corel Draw 10 files -# 2006-01-09 fl Added support for float/double tags (from Russell Nelson) -# -# Copyright (c) 1997-2006 by Secret Labs AB. All rights reserved. -# Copyright (c) 1995-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import io -import itertools -import logging -import math -import os -import struct -import warnings -from collections.abc import Iterator, MutableMapping -from fractions import Fraction -from numbers import Number, Rational -from typing import IO, Any, Callable, NoReturn, cast - -from . import ExifTags, Image, ImageFile, ImageOps, ImagePalette, TiffTags -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 -from ._deprecate import deprecate -from ._typing import StrOrBytesPath -from ._util import DeferredError, is_path -from .TiffTags import TYPES - -TYPE_CHECKING = False -if TYPE_CHECKING: - from ._typing import Buffer, IntegralLike - -logger = logging.getLogger(__name__) - -# Set these to true to force use of libtiff for reading or writing. -READ_LIBTIFF = False -WRITE_LIBTIFF = False -STRIP_SIZE = 65536 - -II = b"II" # little-endian (Intel style) -MM = b"MM" # big-endian (Motorola style) - -# -# -------------------------------------------------------------------- -# Read TIFF files - -# a few tag names, just to make the code below a bit more readable -OSUBFILETYPE = 255 -IMAGEWIDTH = 256 -IMAGELENGTH = 257 -BITSPERSAMPLE = 258 -COMPRESSION = 259 -PHOTOMETRIC_INTERPRETATION = 262 -FILLORDER = 266 -IMAGEDESCRIPTION = 270 -STRIPOFFSETS = 273 -SAMPLESPERPIXEL = 277 -ROWSPERSTRIP = 278 -STRIPBYTECOUNTS = 279 -X_RESOLUTION = 282 -Y_RESOLUTION = 283 -PLANAR_CONFIGURATION = 284 -RESOLUTION_UNIT = 296 -TRANSFERFUNCTION = 301 -SOFTWARE = 305 -DATE_TIME = 306 -ARTIST = 315 -PREDICTOR = 317 -COLORMAP = 320 -TILEWIDTH = 322 -TILELENGTH = 323 -TILEOFFSETS = 324 -TILEBYTECOUNTS = 325 -SUBIFD = 330 -EXTRASAMPLES = 338 -SAMPLEFORMAT = 339 -JPEGTABLES = 347 -YCBCRSUBSAMPLING = 530 -REFERENCEBLACKWHITE = 532 -COPYRIGHT = 33432 -IPTC_NAA_CHUNK = 33723 # newsphoto properties -PHOTOSHOP_CHUNK = 34377 # photoshop properties -ICCPROFILE = 34675 -EXIFIFD = 34665 -XMP = 700 -JPEGQUALITY = 65537 # pseudo-tag by libtiff - -# https://github.com/imagej/ImageJA/blob/master/src/main/java/ij/io/TiffDecoder.java -IMAGEJ_META_DATA_BYTE_COUNTS = 50838 -IMAGEJ_META_DATA = 50839 - -COMPRESSION_INFO = { - # Compression => pil compression name - 1: "raw", - 2: "tiff_ccitt", - 3: "group3", - 4: "group4", - 5: "tiff_lzw", - 6: "tiff_jpeg", # obsolete - 7: "jpeg", - 8: "tiff_adobe_deflate", - 32771: "tiff_raw_16", # 16-bit padding - 32773: "packbits", - 32809: "tiff_thunderscan", - 32946: "tiff_deflate", - 34676: "tiff_sgilog", - 34677: "tiff_sgilog24", - 34925: "lzma", - 50000: "zstd", - 50001: "webp", -} - -COMPRESSION_INFO_REV = {v: k for k, v in COMPRESSION_INFO.items()} - -OPEN_INFO = { - # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, - # ExtraSamples) => mode, rawmode - (II, 0, (1,), 1, (1,), ()): ("1", "1;I"), - (MM, 0, (1,), 1, (1,), ()): ("1", "1;I"), - (II, 0, (1,), 2, (1,), ()): ("1", "1;IR"), - (MM, 0, (1,), 2, (1,), ()): ("1", "1;IR"), - (II, 1, (1,), 1, (1,), ()): ("1", "1"), - (MM, 1, (1,), 1, (1,), ()): ("1", "1"), - (II, 1, (1,), 2, (1,), ()): ("1", "1;R"), - (MM, 1, (1,), 2, (1,), ()): ("1", "1;R"), - (II, 0, (1,), 1, (2,), ()): ("L", "L;2I"), - (MM, 0, (1,), 1, (2,), ()): ("L", "L;2I"), - (II, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), - (MM, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), - (II, 1, (1,), 1, (2,), ()): ("L", "L;2"), - (MM, 1, (1,), 1, (2,), ()): ("L", "L;2"), - (II, 1, (1,), 2, (2,), ()): ("L", "L;2R"), - (MM, 1, (1,), 2, (2,), ()): ("L", "L;2R"), - (II, 0, (1,), 1, (4,), ()): ("L", "L;4I"), - (MM, 0, (1,), 1, (4,), ()): ("L", "L;4I"), - (II, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), - (MM, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), - (II, 1, (1,), 1, (4,), ()): ("L", "L;4"), - (MM, 1, (1,), 1, (4,), ()): ("L", "L;4"), - (II, 1, (1,), 2, (4,), ()): ("L", "L;4R"), - (MM, 1, (1,), 2, (4,), ()): ("L", "L;4R"), - (II, 0, (1,), 1, (8,), ()): ("L", "L;I"), - (MM, 0, (1,), 1, (8,), ()): ("L", "L;I"), - (II, 0, (1,), 2, (8,), ()): ("L", "L;IR"), - (MM, 0, (1,), 2, (8,), ()): ("L", "L;IR"), - (II, 1, (1,), 1, (8,), ()): ("L", "L"), - (MM, 1, (1,), 1, (8,), ()): ("L", "L"), - (II, 1, (2,), 1, (8,), ()): ("L", "L"), - (MM, 1, (2,), 1, (8,), ()): ("L", "L"), - (II, 1, (1,), 2, (8,), ()): ("L", "L;R"), - (MM, 1, (1,), 2, (8,), ()): ("L", "L;R"), - (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), - (II, 0, (1,), 1, (16,), ()): ("I;16", "I;16"), - (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), - (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), - (II, 1, (1,), 2, (16,), ()): ("I;16", "I;16R"), - (II, 1, (2,), 1, (16,), ()): ("I", "I;16S"), - (MM, 1, (2,), 1, (16,), ()): ("I", "I;16BS"), - (II, 0, (3,), 1, (32,), ()): ("F", "F;32F"), - (MM, 0, (3,), 1, (32,), ()): ("F", "F;32BF"), - (II, 1, (1,), 1, (32,), ()): ("I", "I;32N"), - (II, 1, (2,), 1, (32,), ()): ("I", "I;32S"), - (MM, 1, (2,), 1, (32,), ()): ("I", "I;32BS"), - (II, 1, (3,), 1, (32,), ()): ("F", "F;32F"), - (MM, 1, (3,), 1, (32,), ()): ("F", "F;32BF"), - (II, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), - (MM, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), - (II, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), - (MM, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), - (II, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), - (MM, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), - (II, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples - (MM, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples - (II, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGB", "RGBX"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGB", "RGBX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGB", "RGBXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGB", "RGBXX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGB", "RGBXXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGB", "RGBXXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 - (MM, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 - (II, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16L"), - (MM, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGB", "RGBX;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGB", "RGBX;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16B"), - (II, 3, (1,), 1, (1,), ()): ("P", "P;1"), - (MM, 3, (1,), 1, (1,), ()): ("P", "P;1"), - (II, 3, (1,), 2, (1,), ()): ("P", "P;1R"), - (MM, 3, (1,), 2, (1,), ()): ("P", "P;1R"), - (II, 3, (1,), 1, (2,), ()): ("P", "P;2"), - (MM, 3, (1,), 1, (2,), ()): ("P", "P;2"), - (II, 3, (1,), 2, (2,), ()): ("P", "P;2R"), - (MM, 3, (1,), 2, (2,), ()): ("P", "P;2R"), - (II, 3, (1,), 1, (4,), ()): ("P", "P;4"), - (MM, 3, (1,), 1, (4,), ()): ("P", "P;4"), - (II, 3, (1,), 2, (4,), ()): ("P", "P;4R"), - (MM, 3, (1,), 2, (4,), ()): ("P", "P;4R"), - (II, 3, (1,), 1, (8,), ()): ("P", "P"), - (MM, 3, (1,), 1, (8,), ()): ("P", "P"), - (II, 3, (1,), 1, (8, 8), (0,)): ("P", "PX"), - (II, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), - (MM, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), - (II, 3, (1,), 2, (8,), ()): ("P", "P;R"), - (MM, 3, (1,), 2, (8,), ()): ("P", "P;R"), - (II, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), - (MM, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), - (II, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), - (MM, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), - (II, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), - (MM, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), - (II, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16L"), - (MM, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16B"), - (II, 6, (1,), 1, (8,), ()): ("L", "L"), - (MM, 6, (1,), 1, (8,), ()): ("L", "L"), - # JPEG compressed images handled by LibTiff and auto-converted to RGBX - # Minimal Baseline TIFF requires YCbCr images to have 3 SamplesPerPixel - (II, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), - (MM, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), - (II, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), - (MM, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), -} - -MAX_SAMPLESPERPIXEL = max(len(key_tp[4]) for key_tp in OPEN_INFO) - -PREFIXES = [ - b"MM\x00\x2a", # Valid TIFF header with big-endian byte order - b"II\x2a\x00", # Valid TIFF header with little-endian byte order - b"MM\x2a\x00", # Invalid TIFF header, assume big-endian - b"II\x00\x2a", # Invalid TIFF header, assume little-endian - b"MM\x00\x2b", # BigTIFF with big-endian byte order - b"II\x2b\x00", # BigTIFF with little-endian byte order -] - -if not getattr(Image.core, "libtiff_support_custom_tags", True): - deprecate("Support for LibTIFF earlier than version 4", 12) - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(tuple(PREFIXES)) - - -def _limit_rational( - val: float | Fraction | IFDRational, max_val: int -) -> tuple[IntegralLike, IntegralLike]: - inv = abs(val) > 1 - n_d = IFDRational(1 / val if inv else val).limit_rational(max_val) - return n_d[::-1] if inv else n_d - - -def _limit_signed_rational( - val: IFDRational, max_val: int, min_val: int -) -> tuple[IntegralLike, IntegralLike]: - frac = Fraction(val) - n_d: tuple[IntegralLike, IntegralLike] = frac.numerator, frac.denominator - - if min(float(i) for i in n_d) < min_val: - n_d = _limit_rational(val, abs(min_val)) - - n_d_float = tuple(float(i) for i in n_d) - if max(n_d_float) > max_val: - n_d = _limit_rational(n_d_float[0] / n_d_float[1], max_val) - - return n_d - - -## -# Wrapper for TIFF IFDs. - -_load_dispatch = {} -_write_dispatch = {} - - -def _delegate(op: str) -> Any: - def delegate( - self: IFDRational, *args: tuple[float, ...] - ) -> bool | float | Fraction: - return getattr(self._val, op)(*args) - - return delegate - - -class IFDRational(Rational): - """Implements a rational class where 0/0 is a legal value to match - the in the wild use of exif rationals. - - e.g., DigitalZoomRatio - 0.00/0.00 indicates that no digital zoom was used - """ - - """ If the denominator is 0, store this as a float('nan'), otherwise store - as a fractions.Fraction(). Delegate as appropriate - - """ - - __slots__ = ("_numerator", "_denominator", "_val") - - def __init__( - self, value: float | Fraction | IFDRational, denominator: int = 1 - ) -> None: - """ - :param value: either an integer numerator, a - float/rational/other number, or an IFDRational - :param denominator: Optional integer denominator - """ - self._val: Fraction | float - if isinstance(value, IFDRational): - self._numerator = value.numerator - self._denominator = value.denominator - self._val = value._val - return - - if isinstance(value, Fraction): - self._numerator = value.numerator - self._denominator = value.denominator - else: - if TYPE_CHECKING: - self._numerator = cast(IntegralLike, value) - else: - self._numerator = value - self._denominator = denominator - - if denominator == 0: - self._val = float("nan") - elif denominator == 1: - self._val = Fraction(value) - elif int(value) == value: - self._val = Fraction(int(value), denominator) - else: - self._val = Fraction(value / denominator) - - @property - def numerator(self) -> IntegralLike: - return self._numerator - - @property - def denominator(self) -> int: - return self._denominator - - def limit_rational(self, max_denominator: int) -> tuple[IntegralLike, int]: - """ - - :param max_denominator: Integer, the maximum denominator value - :returns: Tuple of (numerator, denominator) - """ - - if self.denominator == 0: - return self.numerator, self.denominator - - assert isinstance(self._val, Fraction) - f = self._val.limit_denominator(max_denominator) - return f.numerator, f.denominator - - def __repr__(self) -> str: - return str(float(self._val)) - - def __hash__(self) -> int: # type: ignore[override] - return self._val.__hash__() - - def __eq__(self, other: object) -> bool: - val = self._val - if isinstance(other, IFDRational): - other = other._val - if isinstance(other, float): - val = float(val) - return val == other - - def __getstate__(self) -> list[float | Fraction | IntegralLike]: - return [self._val, self._numerator, self._denominator] - - def __setstate__(self, state: list[float | Fraction | IntegralLike]) -> None: - IFDRational.__init__(self, 0) - _val, _numerator, _denominator = state - assert isinstance(_val, (float, Fraction)) - self._val = _val - if TYPE_CHECKING: - self._numerator = cast(IntegralLike, _numerator) - else: - self._numerator = _numerator - assert isinstance(_denominator, int) - self._denominator = _denominator - - """ a = ['add','radd', 'sub', 'rsub', 'mul', 'rmul', - 'truediv', 'rtruediv', 'floordiv', 'rfloordiv', - 'mod','rmod', 'pow','rpow', 'pos', 'neg', - 'abs', 'trunc', 'lt', 'gt', 'le', 'ge', 'bool', - 'ceil', 'floor', 'round'] - print("\n".join("__%s__ = _delegate('__%s__')" % (s,s) for s in a)) - """ - - __add__ = _delegate("__add__") - __radd__ = _delegate("__radd__") - __sub__ = _delegate("__sub__") - __rsub__ = _delegate("__rsub__") - __mul__ = _delegate("__mul__") - __rmul__ = _delegate("__rmul__") - __truediv__ = _delegate("__truediv__") - __rtruediv__ = _delegate("__rtruediv__") - __floordiv__ = _delegate("__floordiv__") - __rfloordiv__ = _delegate("__rfloordiv__") - __mod__ = _delegate("__mod__") - __rmod__ = _delegate("__rmod__") - __pow__ = _delegate("__pow__") - __rpow__ = _delegate("__rpow__") - __pos__ = _delegate("__pos__") - __neg__ = _delegate("__neg__") - __abs__ = _delegate("__abs__") - __trunc__ = _delegate("__trunc__") - __lt__ = _delegate("__lt__") - __gt__ = _delegate("__gt__") - __le__ = _delegate("__le__") - __ge__ = _delegate("__ge__") - __bool__ = _delegate("__bool__") - __ceil__ = _delegate("__ceil__") - __floor__ = _delegate("__floor__") - __round__ = _delegate("__round__") - # Python >= 3.11 - if hasattr(Fraction, "__int__"): - __int__ = _delegate("__int__") - - -_LoaderFunc = Callable[["ImageFileDirectory_v2", bytes, bool], Any] - - -def _register_loader(idx: int, size: int) -> Callable[[_LoaderFunc], _LoaderFunc]: - def decorator(func: _LoaderFunc) -> _LoaderFunc: - from .TiffTags import TYPES - - if func.__name__.startswith("load_"): - TYPES[idx] = func.__name__[5:].replace("_", " ") - _load_dispatch[idx] = size, func # noqa: F821 - return func - - return decorator - - -def _register_writer(idx: int) -> Callable[[Callable[..., Any]], Callable[..., Any]]: - def decorator(func: Callable[..., Any]) -> Callable[..., Any]: - _write_dispatch[idx] = func # noqa: F821 - return func - - return decorator - - -def _register_basic(idx_fmt_name: tuple[int, str, str]) -> None: - from .TiffTags import TYPES - - idx, fmt, name = idx_fmt_name - TYPES[idx] = name - size = struct.calcsize(f"={fmt}") - - def basic_handler( - self: ImageFileDirectory_v2, data: bytes, legacy_api: bool = True - ) -> tuple[Any, ...]: - return self._unpack(f"{len(data) // size}{fmt}", data) - - _load_dispatch[idx] = size, basic_handler # noqa: F821 - _write_dispatch[idx] = lambda self, *values: ( # noqa: F821 - b"".join(self._pack(fmt, value) for value in values) - ) - - -if TYPE_CHECKING: - _IFDv2Base = MutableMapping[int, Any] -else: - _IFDv2Base = MutableMapping - - -class ImageFileDirectory_v2(_IFDv2Base): - """This class represents a TIFF tag directory. To speed things up, we - don't decode tags unless they're asked for. - - Exposes a dictionary interface of the tags in the directory:: - - ifd = ImageFileDirectory_v2() - ifd[key] = 'Some Data' - ifd.tagtype[key] = TiffTags.ASCII - print(ifd[key]) - 'Some Data' - - Individual values are returned as the strings or numbers, sequences are - returned as tuples of the values. - - The tiff metadata type of each item is stored in a dictionary of - tag types in - :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types - are read from a tiff file, guessed from the type added, or added - manually. - - Data Structures: - - * ``self.tagtype = {}`` - - * Key: numerical TIFF tag number - * Value: integer corresponding to the data type from - :py:data:`.TiffTags.TYPES` - - .. versionadded:: 3.0.0 - - 'Internal' data structures: - - * ``self._tags_v2 = {}`` - - * Key: numerical TIFF tag number - * Value: decoded data, as tuple for multiple values - - * ``self._tagdata = {}`` - - * Key: numerical TIFF tag number - * Value: undecoded byte string from file - - * ``self._tags_v1 = {}`` - - * Key: numerical TIFF tag number - * Value: decoded data in the v1 format - - Tags will be found in the private attributes ``self._tagdata``, and in - ``self._tags_v2`` once decoded. - - ``self.legacy_api`` is a value for internal use, and shouldn't be changed - from outside code. In cooperation with - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api`` - is true, then decoded tags will be populated into both ``_tags_v1`` and - ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF - save routine. Tags should be read from ``_tags_v1`` if - ``legacy_api == true``. - - """ - - _load_dispatch: dict[int, tuple[int, _LoaderFunc]] = {} - _write_dispatch: dict[int, Callable[..., Any]] = {} - - def __init__( - self, - ifh: bytes = b"II\x2a\x00\x00\x00\x00\x00", - prefix: bytes | None = None, - group: int | None = None, - ) -> None: - """Initialize an ImageFileDirectory. - - To construct an ImageFileDirectory from a real file, pass the 8-byte - magic header to the constructor. To only set the endianness, pass it - as the 'prefix' keyword argument. - - :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets - endianness. - :param prefix: Override the endianness of the file. - """ - if not _accept(ifh): - msg = f"not a TIFF file (header {repr(ifh)} not valid)" - raise SyntaxError(msg) - self._prefix = prefix if prefix is not None else ifh[:2] - if self._prefix == MM: - self._endian = ">" - elif self._prefix == II: - self._endian = "<" - else: - msg = "not a TIFF IFD" - raise SyntaxError(msg) - self._bigtiff = ifh[2] == 43 - self.group = group - self.tagtype: dict[int, int] = {} - """ Dictionary of tag types """ - self.reset() - self.next = ( - self._unpack("Q", ifh[8:])[0] - if self._bigtiff - else self._unpack("L", ifh[4:])[0] - ) - self._legacy_api = False - - prefix = property(lambda self: self._prefix) - offset = property(lambda self: self._offset) - - @property - def legacy_api(self) -> bool: - return self._legacy_api - - @legacy_api.setter - def legacy_api(self, value: bool) -> NoReturn: - msg = "Not allowing setting of legacy api" - raise Exception(msg) - - def reset(self) -> None: - self._tags_v1: dict[int, Any] = {} # will remain empty if legacy_api is false - self._tags_v2: dict[int, Any] = {} # main tag storage - self._tagdata: dict[int, bytes] = {} - self.tagtype = {} # added 2008-06-05 by Florian Hoech - self._next = None - self._offset: int | None = None - - def __str__(self) -> str: - return str(dict(self)) - - def named(self) -> dict[str, Any]: - """ - :returns: dict of name|key: value - - Returns the complete tag dictionary, with named tags where possible. - """ - return { - TiffTags.lookup(code, self.group).name: value - for code, value in self.items() - } - - def __len__(self) -> int: - return len(set(self._tagdata) | set(self._tags_v2)) - - def __getitem__(self, tag: int) -> Any: - if tag not in self._tags_v2: # unpack on the fly - data = self._tagdata[tag] - typ = self.tagtype[tag] - size, handler = self._load_dispatch[typ] - self[tag] = handler(self, data, self.legacy_api) # check type - val = self._tags_v2[tag] - if self.legacy_api and not isinstance(val, (tuple, bytes)): - val = (val,) - return val - - def __contains__(self, tag: object) -> bool: - return tag in self._tags_v2 or tag in self._tagdata - - def __setitem__(self, tag: int, value: Any) -> None: - self._setitem(tag, value, self.legacy_api) - - def _setitem(self, tag: int, value: Any, legacy_api: bool) -> None: - basetypes = (Number, bytes, str) - - info = TiffTags.lookup(tag, self.group) - values = [value] if isinstance(value, basetypes) else value - - if tag not in self.tagtype: - if info.type: - self.tagtype[tag] = info.type - else: - self.tagtype[tag] = TiffTags.UNDEFINED - if all(isinstance(v, IFDRational) for v in values): - for v in values: - assert isinstance(v, IFDRational) - if v < 0: - self.tagtype[tag] = TiffTags.SIGNED_RATIONAL - break - else: - self.tagtype[tag] = TiffTags.RATIONAL - elif all(isinstance(v, int) for v in values): - short = True - signed_short = True - long = True - for v in values: - assert isinstance(v, int) - if short and not (0 <= v < 2**16): - short = False - if signed_short and not (-(2**15) < v < 2**15): - signed_short = False - if long and v < 0: - long = False - if short: - self.tagtype[tag] = TiffTags.SHORT - elif signed_short: - self.tagtype[tag] = TiffTags.SIGNED_SHORT - elif long: - self.tagtype[tag] = TiffTags.LONG - else: - self.tagtype[tag] = TiffTags.SIGNED_LONG - elif all(isinstance(v, float) for v in values): - self.tagtype[tag] = TiffTags.DOUBLE - elif all(isinstance(v, str) for v in values): - self.tagtype[tag] = TiffTags.ASCII - elif all(isinstance(v, bytes) for v in values): - self.tagtype[tag] = TiffTags.BYTE - - if self.tagtype[tag] == TiffTags.UNDEFINED: - values = [ - v.encode("ascii", "replace") if isinstance(v, str) else v - for v in values - ] - elif self.tagtype[tag] == TiffTags.RATIONAL: - values = [float(v) if isinstance(v, int) else v for v in values] - - is_ifd = self.tagtype[tag] == TiffTags.LONG and isinstance(values, dict) - if not is_ifd: - values = tuple( - info.cvt_enum(value) if isinstance(value, str) else value - for value in values - ) - - dest = self._tags_v1 if legacy_api else self._tags_v2 - - # Three branches: - # Spec'd length == 1, Actual length 1, store as element - # Spec'd length == 1, Actual > 1, Warn and truncate. Formerly barfed. - # No Spec, Actual length 1, Formerly (<4.2) returned a 1 element tuple. - # Don't mess with the legacy api, since it's frozen. - if not is_ifd and ( - (info.length == 1) - or self.tagtype[tag] == TiffTags.BYTE - or (info.length is None and len(values) == 1 and not legacy_api) - ): - # Don't mess with the legacy api, since it's frozen. - if legacy_api and self.tagtype[tag] in [ - TiffTags.RATIONAL, - TiffTags.SIGNED_RATIONAL, - ]: # rationals - values = (values,) - try: - (dest[tag],) = values - except ValueError: - # We've got a builtin tag with 1 expected entry - warnings.warn( - f"Metadata Warning, tag {tag} had too many entries: " - f"{len(values)}, expected 1" - ) - dest[tag] = values[0] - - else: - # Spec'd length > 1 or undefined - # Unspec'd, and length > 1 - dest[tag] = values - - def __delitem__(self, tag: int) -> None: - self._tags_v2.pop(tag, None) - self._tags_v1.pop(tag, None) - self._tagdata.pop(tag, None) - - def __iter__(self) -> Iterator[int]: - return iter(set(self._tagdata) | set(self._tags_v2)) - - def _unpack(self, fmt: str, data: bytes) -> tuple[Any, ...]: - return struct.unpack(self._endian + fmt, data) - - def _pack(self, fmt: str, *values: Any) -> bytes: - return struct.pack(self._endian + fmt, *values) - - list( - map( - _register_basic, - [ - (TiffTags.SHORT, "H", "short"), - (TiffTags.LONG, "L", "long"), - (TiffTags.SIGNED_BYTE, "b", "signed byte"), - (TiffTags.SIGNED_SHORT, "h", "signed short"), - (TiffTags.SIGNED_LONG, "l", "signed long"), - (TiffTags.FLOAT, "f", "float"), - (TiffTags.DOUBLE, "d", "double"), - (TiffTags.IFD, "L", "long"), - (TiffTags.LONG8, "Q", "long8"), - ], - ) - ) - - @_register_loader(1, 1) # Basic type, except for the legacy API. - def load_byte(self, data: bytes, legacy_api: bool = True) -> bytes: - return data - - @_register_writer(1) # Basic type, except for the legacy API. - def write_byte(self, data: bytes | int | IFDRational) -> bytes: - if isinstance(data, IFDRational): - data = int(data) - if isinstance(data, int): - data = bytes((data,)) - return data - - @_register_loader(2, 1) - def load_string(self, data: bytes, legacy_api: bool = True) -> str: - if data.endswith(b"\0"): - data = data[:-1] - return data.decode("latin-1", "replace") - - @_register_writer(2) - def write_string(self, value: str | bytes | int) -> bytes: - # remerge of https://github.com/python-pillow/Pillow/pull/1416 - if isinstance(value, int): - value = str(value) - if not isinstance(value, bytes): - value = value.encode("ascii", "replace") - return value + b"\0" - - @_register_loader(5, 8) - def load_rational( - self, data: bytes, legacy_api: bool = True - ) -> tuple[tuple[int, int] | IFDRational, ...]: - vals = self._unpack(f"{len(data) // 4}L", data) - - def combine(a: int, b: int) -> tuple[int, int] | IFDRational: - return (a, b) if legacy_api else IFDRational(a, b) - - return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) - - @_register_writer(5) - def write_rational(self, *values: IFDRational) -> bytes: - return b"".join( - self._pack("2L", *_limit_rational(frac, 2**32 - 1)) for frac in values - ) - - @_register_loader(7, 1) - def load_undefined(self, data: bytes, legacy_api: bool = True) -> bytes: - return data - - @_register_writer(7) - def write_undefined(self, value: bytes | int | IFDRational) -> bytes: - if isinstance(value, IFDRational): - value = int(value) - if isinstance(value, int): - value = str(value).encode("ascii", "replace") - return value - - @_register_loader(10, 8) - def load_signed_rational( - self, data: bytes, legacy_api: bool = True - ) -> tuple[tuple[int, int] | IFDRational, ...]: - vals = self._unpack(f"{len(data) // 4}l", data) - - def combine(a: int, b: int) -> tuple[int, int] | IFDRational: - return (a, b) if legacy_api else IFDRational(a, b) - - return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) - - @_register_writer(10) - def write_signed_rational(self, *values: IFDRational) -> bytes: - return b"".join( - self._pack("2l", *_limit_signed_rational(frac, 2**31 - 1, -(2**31))) - for frac in values - ) - - def _ensure_read(self, fp: IO[bytes], size: int) -> bytes: - ret = fp.read(size) - if len(ret) != size: - msg = ( - "Corrupt EXIF data. " - f"Expecting to read {size} bytes but only got {len(ret)}. " - ) - raise OSError(msg) - return ret - - def load(self, fp: IO[bytes]) -> None: - self.reset() - self._offset = fp.tell() - - try: - tag_count = ( - self._unpack("Q", self._ensure_read(fp, 8)) - if self._bigtiff - else self._unpack("H", self._ensure_read(fp, 2)) - )[0] - for i in range(tag_count): - tag, typ, count, data = ( - self._unpack("HHQ8s", self._ensure_read(fp, 20)) - if self._bigtiff - else self._unpack("HHL4s", self._ensure_read(fp, 12)) - ) - - tagname = TiffTags.lookup(tag, self.group).name - typname = TYPES.get(typ, "unknown") - msg = f"tag: {tagname} ({tag}) - type: {typname} ({typ})" - - try: - unit_size, handler = self._load_dispatch[typ] - except KeyError: - logger.debug("%s - unsupported type %s", msg, typ) - continue # ignore unsupported type - size = count * unit_size - if size > (8 if self._bigtiff else 4): - here = fp.tell() - (offset,) = self._unpack("Q" if self._bigtiff else "L", data) - msg += f" Tag Location: {here} - Data Location: {offset}" - fp.seek(offset) - data = ImageFile._safe_read(fp, size) - fp.seek(here) - else: - data = data[:size] - - if len(data) != size: - warnings.warn( - "Possibly corrupt EXIF data. " - f"Expecting to read {size} bytes but only got {len(data)}." - f" Skipping tag {tag}" - ) - logger.debug(msg) - continue - - if not data: - logger.debug(msg) - continue - - self._tagdata[tag] = data - self.tagtype[tag] = typ - - msg += " - value: " - msg += f"" if size > 32 else repr(data) - - logger.debug(msg) - - (self.next,) = ( - self._unpack("Q", self._ensure_read(fp, 8)) - if self._bigtiff - else self._unpack("L", self._ensure_read(fp, 4)) - ) - except OSError as msg: - warnings.warn(str(msg)) - return - - def _get_ifh(self) -> bytes: - ifh = self._prefix + self._pack("H", 43 if self._bigtiff else 42) - if self._bigtiff: - ifh += self._pack("HH", 8, 0) - ifh += self._pack("Q", 16) if self._bigtiff else self._pack("L", 8) - - return ifh - - def tobytes(self, offset: int = 0) -> bytes: - # FIXME What about tagdata? - result = self._pack("Q" if self._bigtiff else "H", len(self._tags_v2)) - - entries: list[tuple[int, int, int, bytes, bytes]] = [] - - fmt = "Q" if self._bigtiff else "L" - fmt_size = 8 if self._bigtiff else 4 - offset += ( - len(result) + len(self._tags_v2) * (20 if self._bigtiff else 12) + fmt_size - ) - stripoffsets = None - - # pass 1: convert tags to binary format - # always write tags in ascending order - for tag, value in sorted(self._tags_v2.items()): - if tag == STRIPOFFSETS: - stripoffsets = len(entries) - typ = self.tagtype[tag] - logger.debug("Tag %s, Type: %s, Value: %s", tag, typ, repr(value)) - is_ifd = typ == TiffTags.LONG and isinstance(value, dict) - if is_ifd: - ifd = ImageFileDirectory_v2(self._get_ifh(), group=tag) - values = self._tags_v2[tag] - for ifd_tag, ifd_value in values.items(): - ifd[ifd_tag] = ifd_value - data = ifd.tobytes(offset) - else: - values = value if isinstance(value, tuple) else (value,) - data = self._write_dispatch[typ](self, *values) - - tagname = TiffTags.lookup(tag, self.group).name - typname = "ifd" if is_ifd else TYPES.get(typ, "unknown") - msg = f"save: {tagname} ({tag}) - type: {typname} ({typ}) - value: " - msg += f"" if len(data) >= 16 else str(values) - logger.debug(msg) - - # count is sum of lengths for string and arbitrary data - if is_ifd: - count = 1 - elif typ in [TiffTags.BYTE, TiffTags.ASCII, TiffTags.UNDEFINED]: - count = len(data) - else: - count = len(values) - # figure out if data fits into the entry - if len(data) <= fmt_size: - entries.append((tag, typ, count, data.ljust(fmt_size, b"\0"), b"")) - else: - entries.append((tag, typ, count, self._pack(fmt, offset), data)) - offset += (len(data) + 1) // 2 * 2 # pad to word - - # update strip offset data to point beyond auxiliary data - if stripoffsets is not None: - tag, typ, count, value, data = entries[stripoffsets] - if data: - size, handler = self._load_dispatch[typ] - values = [val + offset for val in handler(self, data, self.legacy_api)] - data = self._write_dispatch[typ](self, *values) - else: - value = self._pack(fmt, self._unpack(fmt, value)[0] + offset) - entries[stripoffsets] = tag, typ, count, value, data - - # pass 2: write entries to file - for tag, typ, count, value, data in entries: - logger.debug("%s %s %s %s %s", tag, typ, count, repr(value), repr(data)) - result += self._pack( - "HHQ8s" if self._bigtiff else "HHL4s", tag, typ, count, value - ) - - # -- overwrite here for multi-page -- - result += self._pack(fmt, 0) # end of entries - - # pass 3: write auxiliary data to file - for tag, typ, count, value, data in entries: - result += data - if len(data) & 1: - result += b"\0" - - return result - - def save(self, fp: IO[bytes]) -> int: - if fp.tell() == 0: # skip TIFF header on subsequent pages - fp.write(self._get_ifh()) - - offset = fp.tell() - result = self.tobytes(offset) - fp.write(result) - return offset + len(result) - - -ImageFileDirectory_v2._load_dispatch = _load_dispatch -ImageFileDirectory_v2._write_dispatch = _write_dispatch -for idx, name in TYPES.items(): - name = name.replace(" ", "_") - setattr(ImageFileDirectory_v2, f"load_{name}", _load_dispatch[idx][1]) - setattr(ImageFileDirectory_v2, f"write_{name}", _write_dispatch[idx]) -del _load_dispatch, _write_dispatch, idx, name - - -# Legacy ImageFileDirectory support. -class ImageFileDirectory_v1(ImageFileDirectory_v2): - """This class represents the **legacy** interface to a TIFF tag directory. - - Exposes a dictionary interface of the tags in the directory:: - - ifd = ImageFileDirectory_v1() - ifd[key] = 'Some Data' - ifd.tagtype[key] = TiffTags.ASCII - print(ifd[key]) - ('Some Data',) - - Also contains a dictionary of tag types as read from the tiff image file, - :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. - - Values are returned as a tuple. - - .. deprecated:: 3.0.0 - """ - - def __init__(self, *args: Any, **kwargs: Any) -> None: - super().__init__(*args, **kwargs) - self._legacy_api = True - - tags = property(lambda self: self._tags_v1) - tagdata = property(lambda self: self._tagdata) - - # defined in ImageFileDirectory_v2 - tagtype: dict[int, int] - """Dictionary of tag types""" - - @classmethod - def from_v2(cls, original: ImageFileDirectory_v2) -> ImageFileDirectory_v1: - """Returns an - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - instance with the same data as is contained in the original - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - instance. - - :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - - """ - - ifd = cls(prefix=original.prefix) - ifd._tagdata = original._tagdata - ifd.tagtype = original.tagtype - ifd.next = original.next # an indicator for multipage tiffs - return ifd - - def to_v2(self) -> ImageFileDirectory_v2: - """Returns an - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - instance with the same data as is contained in the original - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - instance. - - :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - - """ - - ifd = ImageFileDirectory_v2(prefix=self.prefix) - ifd._tagdata = dict(self._tagdata) - ifd.tagtype = dict(self.tagtype) - ifd._tags_v2 = dict(self._tags_v2) - return ifd - - def __contains__(self, tag: object) -> bool: - return tag in self._tags_v1 or tag in self._tagdata - - def __len__(self) -> int: - return len(set(self._tagdata) | set(self._tags_v1)) - - def __iter__(self) -> Iterator[int]: - return iter(set(self._tagdata) | set(self._tags_v1)) - - def __setitem__(self, tag: int, value: Any) -> None: - for legacy_api in (False, True): - self._setitem(tag, value, legacy_api) - - def __getitem__(self, tag: int) -> Any: - if tag not in self._tags_v1: # unpack on the fly - data = self._tagdata[tag] - typ = self.tagtype[tag] - size, handler = self._load_dispatch[typ] - for legacy in (False, True): - self._setitem(tag, handler(self, data, legacy), legacy) - val = self._tags_v1[tag] - if not isinstance(val, (tuple, bytes)): - val = (val,) - return val - - -# undone -- switch this pointer -ImageFileDirectory = ImageFileDirectory_v1 - - -## -# Image plugin for TIFF files. - - -class TiffImageFile(ImageFile.ImageFile): - format = "TIFF" - format_description = "Adobe TIFF" - _close_exclusive_fp_after_loading = False - - def __init__( - self, - fp: StrOrBytesPath | IO[bytes], - filename: str | bytes | None = None, - ) -> None: - self.tag_v2: ImageFileDirectory_v2 - """ Image file directory (tag dictionary) """ - - self.tag: ImageFileDirectory_v1 - """ Legacy tag entries """ - - super().__init__(fp, filename) - - def _open(self) -> None: - """Open the first image in a TIFF file""" - - # Header - ifh = self.fp.read(8) - if ifh[2] == 43: - ifh += self.fp.read(8) - - self.tag_v2 = ImageFileDirectory_v2(ifh) - - # setup frame pointers - self.__first = self.__next = self.tag_v2.next - self.__frame = -1 - self._fp = self.fp - self._frame_pos: list[int] = [] - self._n_frames: int | None = None - - logger.debug("*** TiffImageFile._open ***") - logger.debug("- __first: %s", self.__first) - logger.debug("- ifh: %s", repr(ifh)) # Use repr to avoid str(bytes) - - # and load the first frame - self._seek(0) - - @property - def n_frames(self) -> int: - current_n_frames = self._n_frames - if current_n_frames is None: - current = self.tell() - self._seek(len(self._frame_pos)) - while self._n_frames is None: - self._seek(self.tell() + 1) - self.seek(current) - assert self._n_frames is not None - return self._n_frames - - def seek(self, frame: int) -> None: - """Select a given frame as current image""" - if not self._seek_check(frame): - return - self._seek(frame) - if self._im is not None and ( - self.im.size != self._tile_size - or self.im.mode != self.mode - or self.readonly - ): - self._im = None - - def _seek(self, frame: int) -> None: - if isinstance(self._fp, DeferredError): - raise self._fp.ex - self.fp = self._fp - - while len(self._frame_pos) <= frame: - if not self.__next: - msg = "no more images in TIFF file" - raise EOFError(msg) - logger.debug( - "Seeking to frame %s, on frame %s, __next %s, location: %s", - frame, - self.__frame, - self.__next, - self.fp.tell(), - ) - if self.__next >= 2**63: - msg = "Unable to seek to frame" - raise ValueError(msg) - self.fp.seek(self.__next) - self._frame_pos.append(self.__next) - logger.debug("Loading tags, location: %s", self.fp.tell()) - self.tag_v2.load(self.fp) - if self.tag_v2.next in self._frame_pos: - # This IFD has already been processed - # Declare this to be the end of the image - self.__next = 0 - else: - self.__next = self.tag_v2.next - if self.__next == 0: - self._n_frames = frame + 1 - if len(self._frame_pos) == 1: - self.is_animated = self.__next != 0 - self.__frame += 1 - self.fp.seek(self._frame_pos[frame]) - self.tag_v2.load(self.fp) - if XMP in self.tag_v2: - xmp = self.tag_v2[XMP] - if isinstance(xmp, tuple) and len(xmp) == 1: - xmp = xmp[0] - self.info["xmp"] = xmp - elif "xmp" in self.info: - del self.info["xmp"] - self._reload_exif() - # fill the legacy tag/ifd entries - self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) - self.__frame = frame - self._setup() - - def tell(self) -> int: - """Return the current frame number""" - return self.__frame - - def get_photoshop_blocks(self) -> dict[int, dict[str, bytes]]: - """ - Returns a dictionary of Photoshop "Image Resource Blocks". - The keys are the image resource ID. For more information, see - https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727 - - :returns: Photoshop "Image Resource Blocks" in a dictionary. - """ - blocks = {} - val = self.tag_v2.get(ExifTags.Base.ImageResources) - if val: - while val.startswith(b"8BIM"): - id = i16(val[4:6]) - n = math.ceil((val[6] + 1) / 2) * 2 - size = i32(val[6 + n : 10 + n]) - data = val[10 + n : 10 + n + size] - blocks[id] = {"data": data} - - val = val[math.ceil((10 + n + size) / 2) * 2 :] - return blocks - - def load(self) -> Image.core.PixelAccess | None: - if self.tile and self.use_load_libtiff: - return self._load_libtiff() - return super().load() - - def load_prepare(self) -> None: - if self._im is None: - Image._decompression_bomb_check(self._tile_size) - self.im = Image.core.new(self.mode, self._tile_size) - ImageFile.ImageFile.load_prepare(self) - - def load_end(self) -> None: - # allow closing if we're on the first frame, there's no next - # This is the ImageFile.load path only, libtiff specific below. - if not self.is_animated: - self._close_exclusive_fp_after_loading = True - - # load IFD data from fp before it is closed - exif = self.getexif() - for key in TiffTags.TAGS_V2_GROUPS: - if key not in exif: - continue - exif.get_ifd(key) - - ImageOps.exif_transpose(self, in_place=True) - if ExifTags.Base.Orientation in self.tag_v2: - del self.tag_v2[ExifTags.Base.Orientation] - - def _load_libtiff(self) -> Image.core.PixelAccess | None: - """Overload method triggered when we detect a compressed tiff - Calls out to libtiff""" - - Image.Image.load(self) - - self.load_prepare() - - if not len(self.tile) == 1: - msg = "Not exactly one tile" - raise OSError(msg) - - # (self._compression, (extents tuple), - # 0, (rawmode, self._compression, fp)) - extents = self.tile[0][1] - args = self.tile[0][3] - - # To be nice on memory footprint, if there's a - # file descriptor, use that instead of reading - # into a string in python. - try: - fp = hasattr(self.fp, "fileno") and self.fp.fileno() - # flush the file descriptor, prevents error on pypy 2.4+ - # should also eliminate the need for fp.tell - # in _seek - if hasattr(self.fp, "flush"): - self.fp.flush() - except OSError: - # io.BytesIO have a fileno, but returns an OSError if - # it doesn't use a file descriptor. - fp = False - - if fp: - assert isinstance(args, tuple) - args_list = list(args) - args_list[2] = fp - args = tuple(args_list) - - decoder = Image._getdecoder(self.mode, "libtiff", args, self.decoderconfig) - try: - decoder.setimage(self.im, extents) - except ValueError as e: - msg = "Couldn't set the image" - raise OSError(msg) from e - - close_self_fp = self._exclusive_fp and not self.is_animated - if hasattr(self.fp, "getvalue"): - # We've got a stringio like thing passed in. Yay for all in memory. - # The decoder needs the entire file in one shot, so there's not - # a lot we can do here other than give it the entire file. - # unless we could do something like get the address of the - # underlying string for stringio. - # - # Rearranging for supporting byteio items, since they have a fileno - # that returns an OSError if there's no underlying fp. Easier to - # deal with here by reordering. - logger.debug("have getvalue. just sending in a string from getvalue") - n, err = decoder.decode(self.fp.getvalue()) - elif fp: - # we've got a actual file on disk, pass in the fp. - logger.debug("have fileno, calling fileno version of the decoder.") - if not close_self_fp: - self.fp.seek(0) - # Save and restore the file position, because libtiff will move it - # outside of the Python runtime, and that will confuse - # io.BufferedReader and possible others. - # NOTE: This must use os.lseek(), and not fp.tell()/fp.seek(), - # because the buffer read head already may not equal the actual - # file position, and fp.seek() may just adjust it's internal - # pointer and not actually seek the OS file handle. - pos = os.lseek(fp, 0, os.SEEK_CUR) - # 4 bytes, otherwise the trace might error out - n, err = decoder.decode(b"fpfp") - os.lseek(fp, pos, os.SEEK_SET) - else: - # we have something else. - logger.debug("don't have fileno or getvalue. just reading") - self.fp.seek(0) - # UNDONE -- so much for that buffer size thing. - n, err = decoder.decode(self.fp.read()) - - self.tile = [] - self.readonly = 0 - - self.load_end() - - if close_self_fp: - self.fp.close() - self.fp = None # might be shared - - if err < 0: - msg = f"decoder error {err}" - raise OSError(msg) - - return Image.Image.load(self) - - def _setup(self) -> None: - """Setup this image object based on current tags""" - - if 0xBC01 in self.tag_v2: - msg = "Windows Media Photo files not yet supported" - raise OSError(msg) - - # extract relevant tags - self._compression = COMPRESSION_INFO[self.tag_v2.get(COMPRESSION, 1)] - self._planar_configuration = self.tag_v2.get(PLANAR_CONFIGURATION, 1) - - # photometric is a required tag, but not everyone is reading - # the specification - photo = self.tag_v2.get(PHOTOMETRIC_INTERPRETATION, 0) - - # old style jpeg compression images most certainly are YCbCr - if self._compression == "tiff_jpeg": - photo = 6 - - fillorder = self.tag_v2.get(FILLORDER, 1) - - logger.debug("*** Summary ***") - logger.debug("- compression: %s", self._compression) - logger.debug("- photometric_interpretation: %s", photo) - logger.debug("- planar_configuration: %s", self._planar_configuration) - logger.debug("- fill_order: %s", fillorder) - logger.debug("- YCbCr subsampling: %s", self.tag_v2.get(YCBCRSUBSAMPLING)) - - # size - try: - xsize = self.tag_v2[IMAGEWIDTH] - ysize = self.tag_v2[IMAGELENGTH] - except KeyError as e: - msg = "Missing dimensions" - raise TypeError(msg) from e - if not isinstance(xsize, int) or not isinstance(ysize, int): - msg = "Invalid dimensions" - raise ValueError(msg) - self._tile_size = xsize, ysize - orientation = self.tag_v2.get(ExifTags.Base.Orientation) - if orientation in (5, 6, 7, 8): - self._size = ysize, xsize - else: - self._size = xsize, ysize - - logger.debug("- size: %s", self.size) - - sample_format = self.tag_v2.get(SAMPLEFORMAT, (1,)) - if len(sample_format) > 1 and max(sample_format) == min(sample_format) == 1: - # SAMPLEFORMAT is properly per band, so an RGB image will - # be (1,1,1). But, we don't support per band pixel types, - # and anything more than one band is a uint8. So, just - # take the first element. Revisit this if adding support - # for more exotic images. - sample_format = (1,) - - bps_tuple = self.tag_v2.get(BITSPERSAMPLE, (1,)) - extra_tuple = self.tag_v2.get(EXTRASAMPLES, ()) - if photo in (2, 6, 8): # RGB, YCbCr, LAB - bps_count = 3 - elif photo == 5: # CMYK - bps_count = 4 - else: - bps_count = 1 - bps_count += len(extra_tuple) - bps_actual_count = len(bps_tuple) - samples_per_pixel = self.tag_v2.get( - SAMPLESPERPIXEL, - 3 if self._compression == "tiff_jpeg" and photo in (2, 6) else 1, - ) - - if samples_per_pixel > MAX_SAMPLESPERPIXEL: - # DOS check, samples_per_pixel can be a Long, and we extend the tuple below - logger.error( - "More samples per pixel than can be decoded: %s", samples_per_pixel - ) - msg = "Invalid value for samples per pixel" - raise SyntaxError(msg) - - if samples_per_pixel < bps_actual_count: - # If a file has more values in bps_tuple than expected, - # remove the excess. - bps_tuple = bps_tuple[:samples_per_pixel] - elif samples_per_pixel > bps_actual_count and bps_actual_count == 1: - # If a file has only one value in bps_tuple, when it should have more, - # presume it is the same number of bits for all of the samples. - bps_tuple = bps_tuple * samples_per_pixel - - if len(bps_tuple) != samples_per_pixel: - msg = "unknown data organization" - raise SyntaxError(msg) - - # mode: check photometric interpretation and bits per pixel - key = ( - self.tag_v2.prefix, - photo, - sample_format, - fillorder, - bps_tuple, - extra_tuple, - ) - logger.debug("format key: %s", key) - try: - self._mode, rawmode = OPEN_INFO[key] - except KeyError as e: - logger.debug("- unsupported format") - msg = "unknown pixel mode" - raise SyntaxError(msg) from e - - logger.debug("- raw mode: %s", rawmode) - logger.debug("- pil mode: %s", self.mode) - - self.info["compression"] = self._compression - - xres = self.tag_v2.get(X_RESOLUTION, 1) - yres = self.tag_v2.get(Y_RESOLUTION, 1) - - if xres and yres: - resunit = self.tag_v2.get(RESOLUTION_UNIT) - if resunit == 2: # dots per inch - self.info["dpi"] = (xres, yres) - elif resunit == 3: # dots per centimeter. convert to dpi - self.info["dpi"] = (xres * 2.54, yres * 2.54) - elif resunit is None: # used to default to 1, but now 2) - self.info["dpi"] = (xres, yres) - # For backward compatibility, - # we also preserve the old behavior - self.info["resolution"] = xres, yres - else: # No absolute unit of measurement - self.info["resolution"] = xres, yres - - # build tile descriptors - x = y = layer = 0 - self.tile = [] - self.use_load_libtiff = READ_LIBTIFF or self._compression != "raw" - if self.use_load_libtiff: - # Decoder expects entire file as one tile. - # There's a buffer size limit in load (64k) - # so large g4 images will fail if we use that - # function. - # - # Setup the one tile for the whole image, then - # use the _load_libtiff function. - - # libtiff handles the fillmode for us, so 1;IR should - # actually be 1;I. Including the R double reverses the - # bits, so stripes of the image are reversed. See - # https://github.com/python-pillow/Pillow/issues/279 - if fillorder == 2: - # Replace fillorder with fillorder=1 - key = key[:3] + (1,) + key[4:] - logger.debug("format key: %s", key) - # this should always work, since all the - # fillorder==2 modes have a corresponding - # fillorder=1 mode - self._mode, rawmode = OPEN_INFO[key] - # YCbCr images with new jpeg compression with pixels in one plane - # unpacked straight into RGB values - if ( - photo == 6 - and self._compression == "jpeg" - and self._planar_configuration == 1 - ): - rawmode = "RGB" - # libtiff always returns the bytes in native order. - # we're expecting image byte order. So, if the rawmode - # contains I;16, we need to convert from native to image - # byte order. - elif rawmode == "I;16": - rawmode = "I;16N" - elif rawmode.endswith((";16B", ";16L")): - rawmode = rawmode[:-1] + "N" - - # Offset in the tile tuple is 0, we go from 0,0 to - # w,h, and we only do this once -- eds - a = (rawmode, self._compression, False, self.tag_v2.offset) - self.tile.append(ImageFile._Tile("libtiff", (0, 0, xsize, ysize), 0, a)) - - elif STRIPOFFSETS in self.tag_v2 or TILEOFFSETS in self.tag_v2: - # striped image - if STRIPOFFSETS in self.tag_v2: - offsets = self.tag_v2[STRIPOFFSETS] - h = self.tag_v2.get(ROWSPERSTRIP, ysize) - w = xsize - else: - # tiled image - offsets = self.tag_v2[TILEOFFSETS] - tilewidth = self.tag_v2.get(TILEWIDTH) - h = self.tag_v2.get(TILELENGTH) - if not isinstance(tilewidth, int) or not isinstance(h, int): - msg = "Invalid tile dimensions" - raise ValueError(msg) - w = tilewidth - - if w == xsize and h == ysize and self._planar_configuration != 2: - # Every tile covers the image. Only use the last offset - offsets = offsets[-1:] - - for offset in offsets: - if x + w > xsize: - stride = w * sum(bps_tuple) / 8 # bytes per line - else: - stride = 0 - - tile_rawmode = rawmode - if self._planar_configuration == 2: - # each band on it's own layer - tile_rawmode = rawmode[layer] - # adjust stride width accordingly - stride /= bps_count - - args = (tile_rawmode, int(stride), 1) - self.tile.append( - ImageFile._Tile( - self._compression, - (x, y, min(x + w, xsize), min(y + h, ysize)), - offset, - args, - ) - ) - x += w - if x >= xsize: - x, y = 0, y + h - if y >= ysize: - y = 0 - layer += 1 - else: - logger.debug("- unsupported data organization") - msg = "unknown data organization" - raise SyntaxError(msg) - - # Fix up info. - if ICCPROFILE in self.tag_v2: - self.info["icc_profile"] = self.tag_v2[ICCPROFILE] - - # fixup palette descriptor - - if self.mode in ["P", "PA"]: - palette = [o8(b // 256) for b in self.tag_v2[COLORMAP]] - self.palette = ImagePalette.raw("RGB;L", b"".join(palette)) - - -# -# -------------------------------------------------------------------- -# Write TIFF files - -# little endian is default except for image modes with -# explicit big endian byte-order - -SAVE_INFO = { - # mode => rawmode, byteorder, photometrics, - # sampleformat, bitspersample, extra - "1": ("1", II, 1, 1, (1,), None), - "L": ("L", II, 1, 1, (8,), None), - "LA": ("LA", II, 1, 1, (8, 8), 2), - "P": ("P", II, 3, 1, (8,), None), - "PA": ("PA", II, 3, 1, (8, 8), 2), - "I": ("I;32S", II, 1, 2, (32,), None), - "I;16": ("I;16", II, 1, 1, (16,), None), - "I;16L": ("I;16L", II, 1, 1, (16,), None), - "F": ("F;32F", II, 1, 3, (32,), None), - "RGB": ("RGB", II, 2, 1, (8, 8, 8), None), - "RGBX": ("RGBX", II, 2, 1, (8, 8, 8, 8), 0), - "RGBA": ("RGBA", II, 2, 1, (8, 8, 8, 8), 2), - "CMYK": ("CMYK", II, 5, 1, (8, 8, 8, 8), None), - "YCbCr": ("YCbCr", II, 6, 1, (8, 8, 8), None), - "LAB": ("LAB", II, 8, 1, (8, 8, 8), None), - "I;16B": ("I;16B", MM, 1, 1, (16,), None), -} - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - try: - rawmode, prefix, photo, format, bits, extra = SAVE_INFO[im.mode] - except KeyError as e: - msg = f"cannot write mode {im.mode} as TIFF" - raise OSError(msg) from e - - encoderinfo = im.encoderinfo - encoderconfig = im.encoderconfig - - ifd = ImageFileDirectory_v2(prefix=prefix) - if encoderinfo.get("big_tiff"): - ifd._bigtiff = True - - try: - compression = encoderinfo["compression"] - except KeyError: - compression = im.info.get("compression") - if isinstance(compression, int): - # compression value may be from BMP. Ignore it - compression = None - if compression is None: - compression = "raw" - elif compression == "tiff_jpeg": - # OJPEG is obsolete, so use new-style JPEG compression instead - compression = "jpeg" - elif compression == "tiff_deflate": - compression = "tiff_adobe_deflate" - - libtiff = WRITE_LIBTIFF or compression != "raw" - - # required for color libtiff images - ifd[PLANAR_CONFIGURATION] = 1 - - ifd[IMAGEWIDTH] = im.size[0] - ifd[IMAGELENGTH] = im.size[1] - - # write any arbitrary tags passed in as an ImageFileDirectory - if "tiffinfo" in encoderinfo: - info = encoderinfo["tiffinfo"] - elif "exif" in encoderinfo: - info = encoderinfo["exif"] - if isinstance(info, bytes): - exif = Image.Exif() - exif.load(info) - info = exif - else: - info = {} - logger.debug("Tiffinfo Keys: %s", list(info)) - if isinstance(info, ImageFileDirectory_v1): - info = info.to_v2() - for key in info: - if isinstance(info, Image.Exif) and key in TiffTags.TAGS_V2_GROUPS: - ifd[key] = info.get_ifd(key) - else: - ifd[key] = info.get(key) - try: - ifd.tagtype[key] = info.tagtype[key] - except Exception: - pass # might not be an IFD. Might not have populated type - - legacy_ifd = {} - if hasattr(im, "tag"): - legacy_ifd = im.tag.to_v2() - - supplied_tags = {**legacy_ifd, **getattr(im, "tag_v2", {})} - for tag in ( - # IFD offset that may not be correct in the saved image - EXIFIFD, - # Determined by the image format and should not be copied from legacy_ifd. - SAMPLEFORMAT, - ): - if tag in supplied_tags: - del supplied_tags[tag] - - # additions written by Greg Couch, gregc@cgl.ucsf.edu - # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com - if hasattr(im, "tag_v2"): - # preserve tags from original TIFF image file - for key in ( - RESOLUTION_UNIT, - X_RESOLUTION, - Y_RESOLUTION, - IPTC_NAA_CHUNK, - PHOTOSHOP_CHUNK, - XMP, - ): - if key in im.tag_v2: - if key == IPTC_NAA_CHUNK and im.tag_v2.tagtype[key] not in ( - TiffTags.BYTE, - TiffTags.UNDEFINED, - ): - del supplied_tags[key] - else: - ifd[key] = im.tag_v2[key] - ifd.tagtype[key] = im.tag_v2.tagtype[key] - - # preserve ICC profile (should also work when saving other formats - # which support profiles as TIFF) -- 2008-06-06 Florian Hoech - icc = encoderinfo.get("icc_profile", im.info.get("icc_profile")) - if icc: - ifd[ICCPROFILE] = icc - - for key, name in [ - (IMAGEDESCRIPTION, "description"), - (X_RESOLUTION, "resolution"), - (Y_RESOLUTION, "resolution"), - (X_RESOLUTION, "x_resolution"), - (Y_RESOLUTION, "y_resolution"), - (RESOLUTION_UNIT, "resolution_unit"), - (SOFTWARE, "software"), - (DATE_TIME, "date_time"), - (ARTIST, "artist"), - (COPYRIGHT, "copyright"), - ]: - if name in encoderinfo: - ifd[key] = encoderinfo[name] - - dpi = encoderinfo.get("dpi") - if dpi: - ifd[RESOLUTION_UNIT] = 2 - ifd[X_RESOLUTION] = dpi[0] - ifd[Y_RESOLUTION] = dpi[1] - - if bits != (1,): - ifd[BITSPERSAMPLE] = bits - if len(bits) != 1: - ifd[SAMPLESPERPIXEL] = len(bits) - if extra is not None: - ifd[EXTRASAMPLES] = extra - if format != 1: - ifd[SAMPLEFORMAT] = format - - if PHOTOMETRIC_INTERPRETATION not in ifd: - ifd[PHOTOMETRIC_INTERPRETATION] = photo - elif im.mode in ("1", "L") and ifd[PHOTOMETRIC_INTERPRETATION] == 0: - if im.mode == "1": - inverted_im = im.copy() - px = inverted_im.load() - if px is not None: - for y in range(inverted_im.height): - for x in range(inverted_im.width): - px[x, y] = 0 if px[x, y] == 255 else 255 - im = inverted_im - else: - im = ImageOps.invert(im) - - if im.mode in ["P", "PA"]: - lut = im.im.getpalette("RGB", "RGB;L") - colormap = [] - colors = len(lut) // 3 - for i in range(3): - colormap += [v * 256 for v in lut[colors * i : colors * (i + 1)]] - colormap += [0] * (256 - colors) - ifd[COLORMAP] = colormap - # data orientation - w, h = ifd[IMAGEWIDTH], ifd[IMAGELENGTH] - stride = len(bits) * ((w * bits[0] + 7) // 8) - if ROWSPERSTRIP not in ifd: - # aim for given strip size (64 KB by default) when using libtiff writer - if libtiff: - im_strip_size = encoderinfo.get("strip_size", STRIP_SIZE) - rows_per_strip = 1 if stride == 0 else min(im_strip_size // stride, h) - # JPEG encoder expects multiple of 8 rows - if compression == "jpeg": - rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, h) - else: - rows_per_strip = h - if rows_per_strip == 0: - rows_per_strip = 1 - ifd[ROWSPERSTRIP] = rows_per_strip - strip_byte_counts = 1 if stride == 0 else stride * ifd[ROWSPERSTRIP] - strips_per_image = (h + ifd[ROWSPERSTRIP] - 1) // ifd[ROWSPERSTRIP] - if strip_byte_counts >= 2**16: - ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG - ifd[STRIPBYTECOUNTS] = (strip_byte_counts,) * (strips_per_image - 1) + ( - stride * h - strip_byte_counts * (strips_per_image - 1), - ) - ifd[STRIPOFFSETS] = tuple( - range(0, strip_byte_counts * strips_per_image, strip_byte_counts) - ) # this is adjusted by IFD writer - # no compression by default: - ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) - - if im.mode == "YCbCr": - for tag, default_value in { - YCBCRSUBSAMPLING: (1, 1), - REFERENCEBLACKWHITE: (0, 255, 128, 255, 128, 255), - }.items(): - ifd.setdefault(tag, default_value) - - blocklist = [TILEWIDTH, TILELENGTH, TILEOFFSETS, TILEBYTECOUNTS] - if libtiff: - if "quality" in encoderinfo: - quality = encoderinfo["quality"] - if not isinstance(quality, int) or quality < 0 or quality > 100: - msg = "Invalid quality setting" - raise ValueError(msg) - if compression != "jpeg": - msg = "quality setting only supported for 'jpeg' compression" - raise ValueError(msg) - ifd[JPEGQUALITY] = quality - - logger.debug("Saving using libtiff encoder") - logger.debug("Items: %s", sorted(ifd.items())) - _fp = 0 - if hasattr(fp, "fileno"): - try: - fp.seek(0) - _fp = fp.fileno() - except io.UnsupportedOperation: - pass - - # optional types for non core tags - types = {} - # STRIPOFFSETS and STRIPBYTECOUNTS are added by the library - # based on the data in the strip. - # OSUBFILETYPE is deprecated. - # The other tags expect arrays with a certain length (fixed or depending on - # BITSPERSAMPLE, etc), passing arrays with a different length will result in - # segfaults. Block these tags until we add extra validation. - # SUBIFD may also cause a segfault. - blocklist += [ - OSUBFILETYPE, - REFERENCEBLACKWHITE, - STRIPBYTECOUNTS, - STRIPOFFSETS, - TRANSFERFUNCTION, - SUBIFD, - ] - - # bits per sample is a single short in the tiff directory, not a list. - atts: dict[int, Any] = {BITSPERSAMPLE: bits[0]} - # Merge the ones that we have with (optional) more bits from - # the original file, e.g x,y resolution so that we can - # save(load('')) == original file. - for tag, value in itertools.chain(ifd.items(), supplied_tags.items()): - # Libtiff can only process certain core items without adding - # them to the custom dictionary. - # Custom items are supported for int, float, unicode, string and byte - # values. Other types and tuples require a tagtype. - if tag not in TiffTags.LIBTIFF_CORE: - if not getattr(Image.core, "libtiff_support_custom_tags", False): - continue - - if tag in TiffTags.TAGS_V2_GROUPS: - types[tag] = TiffTags.LONG8 - elif tag in ifd.tagtype: - types[tag] = ifd.tagtype[tag] - elif not (isinstance(value, (int, float, str, bytes))): - continue - else: - type = TiffTags.lookup(tag).type - if type: - types[tag] = type - if tag not in atts and tag not in blocklist: - if isinstance(value, str): - atts[tag] = value.encode("ascii", "replace") + b"\0" - elif isinstance(value, IFDRational): - atts[tag] = float(value) - else: - atts[tag] = value - - if SAMPLEFORMAT in atts and len(atts[SAMPLEFORMAT]) == 1: - atts[SAMPLEFORMAT] = atts[SAMPLEFORMAT][0] - - logger.debug("Converted items: %s", sorted(atts.items())) - - # libtiff always expects the bytes in native order. - # we're storing image byte order. So, if the rawmode - # contains I;16, we need to convert from native to image - # byte order. - if im.mode in ("I;16", "I;16B", "I;16L"): - rawmode = "I;16N" - - # Pass tags as sorted list so that the tags are set in a fixed order. - # This is required by libtiff for some tags. For example, the JPEGQUALITY - # pseudo tag requires that the COMPRESS tag was already set. - tags = list(atts.items()) - tags.sort() - a = (rawmode, compression, _fp, filename, tags, types) - encoder = Image._getencoder(im.mode, "libtiff", a, encoderconfig) - encoder.setimage(im.im, (0, 0) + im.size) - while True: - errcode, data = encoder.encode(ImageFile.MAXBLOCK)[1:] - if not _fp: - fp.write(data) - if errcode: - break - if errcode < 0: - msg = f"encoder error {errcode} when writing image file" - raise OSError(msg) - - else: - for tag in blocklist: - del ifd[tag] - offset = ifd.save(fp) - - ImageFile._save( - im, - fp, - [ImageFile._Tile("raw", (0, 0) + im.size, offset, (rawmode, stride, 1))], - ) - - # -- helper for multi-page save -- - if "_debug_multipage" in encoderinfo: - # just to access o32 and o16 (using correct byte order) - setattr(im, "_debug_multipage", ifd) - - -class AppendingTiffWriter(io.BytesIO): - fieldSizes = [ - 0, # None - 1, # byte - 1, # ascii - 2, # short - 4, # long - 8, # rational - 1, # sbyte - 1, # undefined - 2, # sshort - 4, # slong - 8, # srational - 4, # float - 8, # double - 4, # ifd - 2, # unicode - 4, # complex - 8, # long8 - ] - - Tags = { - 273, # StripOffsets - 288, # FreeOffsets - 324, # TileOffsets - 519, # JPEGQTables - 520, # JPEGDCTables - 521, # JPEGACTables - } - - def __init__(self, fn: StrOrBytesPath | IO[bytes], new: bool = False) -> None: - self.f: IO[bytes] - if is_path(fn): - self.name = fn - self.close_fp = True - try: - self.f = open(fn, "w+b" if new else "r+b") - except OSError: - self.f = open(fn, "w+b") - else: - self.f = cast(IO[bytes], fn) - self.close_fp = False - self.beginning = self.f.tell() - self.setup() - - def setup(self) -> None: - # Reset everything. - self.f.seek(self.beginning, os.SEEK_SET) - - self.whereToWriteNewIFDOffset: int | None = None - self.offsetOfNewPage = 0 - - self.IIMM = iimm = self.f.read(4) - self._bigtiff = b"\x2b" in iimm - if not iimm: - # empty file - first page - self.isFirst = True - return - - self.isFirst = False - if iimm not in PREFIXES: - msg = "Invalid TIFF file header" - raise RuntimeError(msg) - - self.setEndian("<" if iimm.startswith(II) else ">") - - if self._bigtiff: - self.f.seek(4, os.SEEK_CUR) - self.skipIFDs() - self.goToEnd() - - def finalize(self) -> None: - if self.isFirst: - return - - # fix offsets - self.f.seek(self.offsetOfNewPage) - - iimm = self.f.read(4) - if not iimm: - # Make it easy to finish a frame without committing to a new one. - return - - if iimm != self.IIMM: - msg = "IIMM of new page doesn't match IIMM of first page" - raise RuntimeError(msg) - - if self._bigtiff: - self.f.seek(4, os.SEEK_CUR) - ifd_offset = self._read(8 if self._bigtiff else 4) - ifd_offset += self.offsetOfNewPage - assert self.whereToWriteNewIFDOffset is not None - self.f.seek(self.whereToWriteNewIFDOffset) - self._write(ifd_offset, 8 if self._bigtiff else 4) - self.f.seek(ifd_offset) - self.fixIFD() - - def newFrame(self) -> None: - # Call this to finish a frame. - self.finalize() - self.setup() - - def __enter__(self) -> AppendingTiffWriter: - return self - - def __exit__(self, *args: object) -> None: - if self.close_fp: - self.close() - - def tell(self) -> int: - return self.f.tell() - self.offsetOfNewPage - - def seek(self, offset: int, whence: int = io.SEEK_SET) -> int: - """ - :param offset: Distance to seek. - :param whence: Whether the distance is relative to the start, - end or current position. - :returns: The resulting position, relative to the start. - """ - if whence == os.SEEK_SET: - offset += self.offsetOfNewPage - - self.f.seek(offset, whence) - return self.tell() - - def goToEnd(self) -> None: - self.f.seek(0, os.SEEK_END) - pos = self.f.tell() - - # pad to 16 byte boundary - pad_bytes = 16 - pos % 16 - if 0 < pad_bytes < 16: - self.f.write(bytes(pad_bytes)) - self.offsetOfNewPage = self.f.tell() - - def setEndian(self, endian: str) -> None: - self.endian = endian - self.longFmt = f"{self.endian}L" - self.shortFmt = f"{self.endian}H" - self.tagFormat = f"{self.endian}HH" + ("Q" if self._bigtiff else "L") - - def skipIFDs(self) -> None: - while True: - ifd_offset = self._read(8 if self._bigtiff else 4) - if ifd_offset == 0: - self.whereToWriteNewIFDOffset = self.f.tell() - ( - 8 if self._bigtiff else 4 - ) - break - - self.f.seek(ifd_offset) - num_tags = self._read(8 if self._bigtiff else 2) - self.f.seek(num_tags * (20 if self._bigtiff else 12), os.SEEK_CUR) - - def write(self, data: Buffer, /) -> int: - return self.f.write(data) - - def _fmt(self, field_size: int) -> str: - try: - return {2: "H", 4: "L", 8: "Q"}[field_size] - except KeyError: - msg = "offset is not supported" - raise RuntimeError(msg) - - def _read(self, field_size: int) -> int: - (value,) = struct.unpack( - self.endian + self._fmt(field_size), self.f.read(field_size) - ) - return value - - def readShort(self) -> int: - return self._read(2) - - def readLong(self) -> int: - return self._read(4) - - @staticmethod - def _verify_bytes_written(bytes_written: int | None, expected: int) -> None: - if bytes_written is not None and bytes_written != expected: - msg = f"wrote only {bytes_written} bytes but wanted {expected}" - raise RuntimeError(msg) - - def _rewriteLast( - self, value: int, field_size: int, new_field_size: int = 0 - ) -> None: - self.f.seek(-field_size, os.SEEK_CUR) - if not new_field_size: - new_field_size = field_size - bytes_written = self.f.write( - struct.pack(self.endian + self._fmt(new_field_size), value) - ) - self._verify_bytes_written(bytes_written, new_field_size) - - def rewriteLastShortToLong(self, value: int) -> None: - self._rewriteLast(value, 2, 4) - - def rewriteLastShort(self, value: int) -> None: - return self._rewriteLast(value, 2) - - def rewriteLastLong(self, value: int) -> None: - return self._rewriteLast(value, 4) - - def _write(self, value: int, field_size: int) -> None: - bytes_written = self.f.write( - struct.pack(self.endian + self._fmt(field_size), value) - ) - self._verify_bytes_written(bytes_written, field_size) - - def writeShort(self, value: int) -> None: - self._write(value, 2) - - def writeLong(self, value: int) -> None: - self._write(value, 4) - - def close(self) -> None: - self.finalize() - if self.close_fp: - self.f.close() - - def fixIFD(self) -> None: - num_tags = self._read(8 if self._bigtiff else 2) - - for i in range(num_tags): - tag, field_type, count = struct.unpack( - self.tagFormat, self.f.read(12 if self._bigtiff else 8) - ) - - field_size = self.fieldSizes[field_type] - total_size = field_size * count - fmt_size = 8 if self._bigtiff else 4 - is_local = total_size <= fmt_size - if not is_local: - offset = self._read(fmt_size) + self.offsetOfNewPage - self._rewriteLast(offset, fmt_size) - - if tag in self.Tags: - cur_pos = self.f.tell() - - logger.debug( - "fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %d", - TiffTags.lookup(tag).name, - tag, - TYPES.get(field_type, "unknown"), - field_type, - field_size, - count, - ) - - if is_local: - self._fixOffsets(count, field_size) - self.f.seek(cur_pos + fmt_size) - else: - self.f.seek(offset) - self._fixOffsets(count, field_size) - self.f.seek(cur_pos) - - elif is_local: - # skip the locally stored value that is not an offset - self.f.seek(fmt_size, os.SEEK_CUR) - - def _fixOffsets(self, count: int, field_size: int) -> None: - for i in range(count): - offset = self._read(field_size) - offset += self.offsetOfNewPage - - new_field_size = 0 - if self._bigtiff and field_size in (2, 4) and offset >= 2**32: - # offset is now too large - we must convert long to long8 - new_field_size = 8 - elif field_size == 2 and offset >= 2**16: - # offset is now too large - we must convert short to long - new_field_size = 4 - if new_field_size: - if count != 1: - msg = "not implemented" - raise RuntimeError(msg) # XXX TODO - - # simple case - the offset is just one and therefore it is - # local (not referenced with another offset) - self._rewriteLast(offset, field_size, new_field_size) - # Move back past the new offset, past 'count', and before 'field_type' - rewind = -new_field_size - 4 - 2 - self.f.seek(rewind, os.SEEK_CUR) - self.writeShort(new_field_size) # rewrite the type - self.f.seek(2 - rewind, os.SEEK_CUR) - else: - self._rewriteLast(offset, field_size) - - def fixOffsets( - self, count: int, isShort: bool = False, isLong: bool = False - ) -> None: - if isShort: - field_size = 2 - elif isLong: - field_size = 4 - else: - field_size = 0 - return self._fixOffsets(count, field_size) - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - append_images = list(im.encoderinfo.get("append_images", [])) - if not hasattr(im, "n_frames") and not append_images: - return _save(im, fp, filename) - - cur_idx = im.tell() - try: - with AppendingTiffWriter(fp) as tf: - for ims in [im] + append_images: - encoderinfo = ims._attach_default_encoderinfo(im) - if not hasattr(ims, "encoderconfig"): - ims.encoderconfig = () - nfr = getattr(ims, "n_frames", 1) - - for idx in range(nfr): - ims.seek(idx) - ims.load() - _save(ims, tf, filename) - tf.newFrame() - ims.encoderinfo = encoderinfo - finally: - im.seek(cur_idx) - - -# -# -------------------------------------------------------------------- -# Register - -Image.register_open(TiffImageFile.format, TiffImageFile, _accept) -Image.register_save(TiffImageFile.format, _save) -Image.register_save_all(TiffImageFile.format, _save_all) - -Image.register_extensions(TiffImageFile.format, [".tif", ".tiff"]) - -Image.register_mime(TiffImageFile.format, "image/tiff") diff --git a/myenv/lib/python3.12/site-packages/PIL/TiffTags.py b/myenv/lib/python3.12/site-packages/PIL/TiffTags.py deleted file mode 100644 index 86adaa4..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/TiffTags.py +++ /dev/null @@ -1,562 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TIFF tags -# -# This module provides clear-text names for various well-known -# TIFF tags. the TIFF codec works just fine without it. -# -# Copyright (c) Secret Labs AB 1999. -# -# See the README file for information on usage and redistribution. -# - -## -# This module provides constants and clear-text names for various -# well-known TIFF tags. -## -from __future__ import annotations - -from typing import NamedTuple - - -class _TagInfo(NamedTuple): - value: int | None - name: str - type: int | None - length: int | None - enum: dict[str, int] - - -class TagInfo(_TagInfo): - __slots__: list[str] = [] - - def __new__( - cls, - value: int | None = None, - name: str = "unknown", - type: int | None = None, - length: int | None = None, - enum: dict[str, int] | None = None, - ) -> TagInfo: - return super().__new__(cls, value, name, type, length, enum or {}) - - def cvt_enum(self, value: str) -> int | str: - # Using get will call hash(value), which can be expensive - # for some types (e.g. Fraction). Since self.enum is rarely - # used, it's usually better to test it first. - return self.enum.get(value, value) if self.enum else value - - -def lookup(tag: int, group: int | None = None) -> TagInfo: - """ - :param tag: Integer tag number - :param group: Which :py:data:`~PIL.TiffTags.TAGS_V2_GROUPS` to look in - - .. versionadded:: 8.3.0 - - :returns: Taginfo namedtuple, From the ``TAGS_V2`` info if possible, - otherwise just populating the value and name from ``TAGS``. - If the tag is not recognized, "unknown" is returned for the name - - """ - - if group is not None: - info = TAGS_V2_GROUPS[group].get(tag) if group in TAGS_V2_GROUPS else None - else: - info = TAGS_V2.get(tag) - return info or TagInfo(tag, TAGS.get(tag, "unknown")) - - -## -# Map tag numbers to tag info. -# -# id: (Name, Type, Length[, enum_values]) -# -# The length here differs from the length in the tiff spec. For -# numbers, the tiff spec is for the number of fields returned. We -# agree here. For string-like types, the tiff spec uses the length of -# field in bytes. In Pillow, we are using the number of expected -# fields, in general 1 for string-like types. - - -BYTE = 1 -ASCII = 2 -SHORT = 3 -LONG = 4 -RATIONAL = 5 -SIGNED_BYTE = 6 -UNDEFINED = 7 -SIGNED_SHORT = 8 -SIGNED_LONG = 9 -SIGNED_RATIONAL = 10 -FLOAT = 11 -DOUBLE = 12 -IFD = 13 -LONG8 = 16 - -_tags_v2: dict[int, tuple[str, int, int] | tuple[str, int, int, dict[str, int]]] = { - 254: ("NewSubfileType", LONG, 1), - 255: ("SubfileType", SHORT, 1), - 256: ("ImageWidth", LONG, 1), - 257: ("ImageLength", LONG, 1), - 258: ("BitsPerSample", SHORT, 0), - 259: ( - "Compression", - SHORT, - 1, - { - "Uncompressed": 1, - "CCITT 1d": 2, - "Group 3 Fax": 3, - "Group 4 Fax": 4, - "LZW": 5, - "JPEG": 6, - "PackBits": 32773, - }, - ), - 262: ( - "PhotometricInterpretation", - SHORT, - 1, - { - "WhiteIsZero": 0, - "BlackIsZero": 1, - "RGB": 2, - "RGB Palette": 3, - "Transparency Mask": 4, - "CMYK": 5, - "YCbCr": 6, - "CieLAB": 8, - "CFA": 32803, # TIFF/EP, Adobe DNG - "LinearRaw": 32892, # Adobe DNG - }, - ), - 263: ("Threshholding", SHORT, 1), - 264: ("CellWidth", SHORT, 1), - 265: ("CellLength", SHORT, 1), - 266: ("FillOrder", SHORT, 1), - 269: ("DocumentName", ASCII, 1), - 270: ("ImageDescription", ASCII, 1), - 271: ("Make", ASCII, 1), - 272: ("Model", ASCII, 1), - 273: ("StripOffsets", LONG, 0), - 274: ("Orientation", SHORT, 1), - 277: ("SamplesPerPixel", SHORT, 1), - 278: ("RowsPerStrip", LONG, 1), - 279: ("StripByteCounts", LONG, 0), - 280: ("MinSampleValue", SHORT, 0), - 281: ("MaxSampleValue", SHORT, 0), - 282: ("XResolution", RATIONAL, 1), - 283: ("YResolution", RATIONAL, 1), - 284: ("PlanarConfiguration", SHORT, 1, {"Contiguous": 1, "Separate": 2}), - 285: ("PageName", ASCII, 1), - 286: ("XPosition", RATIONAL, 1), - 287: ("YPosition", RATIONAL, 1), - 288: ("FreeOffsets", LONG, 1), - 289: ("FreeByteCounts", LONG, 1), - 290: ("GrayResponseUnit", SHORT, 1), - 291: ("GrayResponseCurve", SHORT, 0), - 292: ("T4Options", LONG, 1), - 293: ("T6Options", LONG, 1), - 296: ("ResolutionUnit", SHORT, 1, {"none": 1, "inch": 2, "cm": 3}), - 297: ("PageNumber", SHORT, 2), - 301: ("TransferFunction", SHORT, 0), - 305: ("Software", ASCII, 1), - 306: ("DateTime", ASCII, 1), - 315: ("Artist", ASCII, 1), - 316: ("HostComputer", ASCII, 1), - 317: ("Predictor", SHORT, 1, {"none": 1, "Horizontal Differencing": 2}), - 318: ("WhitePoint", RATIONAL, 2), - 319: ("PrimaryChromaticities", RATIONAL, 6), - 320: ("ColorMap", SHORT, 0), - 321: ("HalftoneHints", SHORT, 2), - 322: ("TileWidth", LONG, 1), - 323: ("TileLength", LONG, 1), - 324: ("TileOffsets", LONG, 0), - 325: ("TileByteCounts", LONG, 0), - 330: ("SubIFDs", LONG, 0), - 332: ("InkSet", SHORT, 1), - 333: ("InkNames", ASCII, 1), - 334: ("NumberOfInks", SHORT, 1), - 336: ("DotRange", SHORT, 0), - 337: ("TargetPrinter", ASCII, 1), - 338: ("ExtraSamples", SHORT, 0), - 339: ("SampleFormat", SHORT, 0), - 340: ("SMinSampleValue", DOUBLE, 0), - 341: ("SMaxSampleValue", DOUBLE, 0), - 342: ("TransferRange", SHORT, 6), - 347: ("JPEGTables", UNDEFINED, 1), - # obsolete JPEG tags - 512: ("JPEGProc", SHORT, 1), - 513: ("JPEGInterchangeFormat", LONG, 1), - 514: ("JPEGInterchangeFormatLength", LONG, 1), - 515: ("JPEGRestartInterval", SHORT, 1), - 517: ("JPEGLosslessPredictors", SHORT, 0), - 518: ("JPEGPointTransforms", SHORT, 0), - 519: ("JPEGQTables", LONG, 0), - 520: ("JPEGDCTables", LONG, 0), - 521: ("JPEGACTables", LONG, 0), - 529: ("YCbCrCoefficients", RATIONAL, 3), - 530: ("YCbCrSubSampling", SHORT, 2), - 531: ("YCbCrPositioning", SHORT, 1), - 532: ("ReferenceBlackWhite", RATIONAL, 6), - 700: ("XMP", BYTE, 0), - 33432: ("Copyright", ASCII, 1), - 33723: ("IptcNaaInfo", UNDEFINED, 1), - 34377: ("PhotoshopInfo", BYTE, 0), - # FIXME add more tags here - 34665: ("ExifIFD", LONG, 1), - 34675: ("ICCProfile", UNDEFINED, 1), - 34853: ("GPSInfoIFD", LONG, 1), - 36864: ("ExifVersion", UNDEFINED, 1), - 37724: ("ImageSourceData", UNDEFINED, 1), - 40965: ("InteroperabilityIFD", LONG, 1), - 41730: ("CFAPattern", UNDEFINED, 1), - # MPInfo - 45056: ("MPFVersion", UNDEFINED, 1), - 45057: ("NumberOfImages", LONG, 1), - 45058: ("MPEntry", UNDEFINED, 1), - 45059: ("ImageUIDList", UNDEFINED, 0), # UNDONE, check - 45060: ("TotalFrames", LONG, 1), - 45313: ("MPIndividualNum", LONG, 1), - 45569: ("PanOrientation", LONG, 1), - 45570: ("PanOverlap_H", RATIONAL, 1), - 45571: ("PanOverlap_V", RATIONAL, 1), - 45572: ("BaseViewpointNum", LONG, 1), - 45573: ("ConvergenceAngle", SIGNED_RATIONAL, 1), - 45574: ("BaselineLength", RATIONAL, 1), - 45575: ("VerticalDivergence", SIGNED_RATIONAL, 1), - 45576: ("AxisDistance_X", SIGNED_RATIONAL, 1), - 45577: ("AxisDistance_Y", SIGNED_RATIONAL, 1), - 45578: ("AxisDistance_Z", SIGNED_RATIONAL, 1), - 45579: ("YawAngle", SIGNED_RATIONAL, 1), - 45580: ("PitchAngle", SIGNED_RATIONAL, 1), - 45581: ("RollAngle", SIGNED_RATIONAL, 1), - 40960: ("FlashPixVersion", UNDEFINED, 1), - 50741: ("MakerNoteSafety", SHORT, 1, {"Unsafe": 0, "Safe": 1}), - 50780: ("BestQualityScale", RATIONAL, 1), - 50838: ("ImageJMetaDataByteCounts", LONG, 0), # Can be more than one - 50839: ("ImageJMetaData", UNDEFINED, 1), # see Issue #2006 -} -_tags_v2_groups = { - # ExifIFD - 34665: { - 36864: ("ExifVersion", UNDEFINED, 1), - 40960: ("FlashPixVersion", UNDEFINED, 1), - 40965: ("InteroperabilityIFD", LONG, 1), - 41730: ("CFAPattern", UNDEFINED, 1), - }, - # GPSInfoIFD - 34853: { - 0: ("GPSVersionID", BYTE, 4), - 1: ("GPSLatitudeRef", ASCII, 2), - 2: ("GPSLatitude", RATIONAL, 3), - 3: ("GPSLongitudeRef", ASCII, 2), - 4: ("GPSLongitude", RATIONAL, 3), - 5: ("GPSAltitudeRef", BYTE, 1), - 6: ("GPSAltitude", RATIONAL, 1), - 7: ("GPSTimeStamp", RATIONAL, 3), - 8: ("GPSSatellites", ASCII, 0), - 9: ("GPSStatus", ASCII, 2), - 10: ("GPSMeasureMode", ASCII, 2), - 11: ("GPSDOP", RATIONAL, 1), - 12: ("GPSSpeedRef", ASCII, 2), - 13: ("GPSSpeed", RATIONAL, 1), - 14: ("GPSTrackRef", ASCII, 2), - 15: ("GPSTrack", RATIONAL, 1), - 16: ("GPSImgDirectionRef", ASCII, 2), - 17: ("GPSImgDirection", RATIONAL, 1), - 18: ("GPSMapDatum", ASCII, 0), - 19: ("GPSDestLatitudeRef", ASCII, 2), - 20: ("GPSDestLatitude", RATIONAL, 3), - 21: ("GPSDestLongitudeRef", ASCII, 2), - 22: ("GPSDestLongitude", RATIONAL, 3), - 23: ("GPSDestBearingRef", ASCII, 2), - 24: ("GPSDestBearing", RATIONAL, 1), - 25: ("GPSDestDistanceRef", ASCII, 2), - 26: ("GPSDestDistance", RATIONAL, 1), - 27: ("GPSProcessingMethod", UNDEFINED, 0), - 28: ("GPSAreaInformation", UNDEFINED, 0), - 29: ("GPSDateStamp", ASCII, 11), - 30: ("GPSDifferential", SHORT, 1), - }, - # InteroperabilityIFD - 40965: {1: ("InteropIndex", ASCII, 1), 2: ("InteropVersion", UNDEFINED, 1)}, -} - -# Legacy Tags structure -# these tags aren't included above, but were in the previous versions -TAGS: dict[int | tuple[int, int], str] = { - 347: "JPEGTables", - 700: "XMP", - # Additional Exif Info - 32932: "Wang Annotation", - 33434: "ExposureTime", - 33437: "FNumber", - 33445: "MD FileTag", - 33446: "MD ScalePixel", - 33447: "MD ColorTable", - 33448: "MD LabName", - 33449: "MD SampleInfo", - 33450: "MD PrepDate", - 33451: "MD PrepTime", - 33452: "MD FileUnits", - 33550: "ModelPixelScaleTag", - 33723: "IptcNaaInfo", - 33918: "INGR Packet Data Tag", - 33919: "INGR Flag Registers", - 33920: "IrasB Transformation Matrix", - 33922: "ModelTiepointTag", - 34264: "ModelTransformationTag", - 34377: "PhotoshopInfo", - 34735: "GeoKeyDirectoryTag", - 34736: "GeoDoubleParamsTag", - 34737: "GeoAsciiParamsTag", - 34850: "ExposureProgram", - 34852: "SpectralSensitivity", - 34855: "ISOSpeedRatings", - 34856: "OECF", - 34864: "SensitivityType", - 34865: "StandardOutputSensitivity", - 34866: "RecommendedExposureIndex", - 34867: "ISOSpeed", - 34868: "ISOSpeedLatitudeyyy", - 34869: "ISOSpeedLatitudezzz", - 34908: "HylaFAX FaxRecvParams", - 34909: "HylaFAX FaxSubAddress", - 34910: "HylaFAX FaxRecvTime", - 36864: "ExifVersion", - 36867: "DateTimeOriginal", - 36868: "DateTimeDigitized", - 37121: "ComponentsConfiguration", - 37122: "CompressedBitsPerPixel", - 37724: "ImageSourceData", - 37377: "ShutterSpeedValue", - 37378: "ApertureValue", - 37379: "BrightnessValue", - 37380: "ExposureBiasValue", - 37381: "MaxApertureValue", - 37382: "SubjectDistance", - 37383: "MeteringMode", - 37384: "LightSource", - 37385: "Flash", - 37386: "FocalLength", - 37396: "SubjectArea", - 37500: "MakerNote", - 37510: "UserComment", - 37520: "SubSec", - 37521: "SubSecTimeOriginal", - 37522: "SubsecTimeDigitized", - 40960: "FlashPixVersion", - 40961: "ColorSpace", - 40962: "PixelXDimension", - 40963: "PixelYDimension", - 40964: "RelatedSoundFile", - 40965: "InteroperabilityIFD", - 41483: "FlashEnergy", - 41484: "SpatialFrequencyResponse", - 41486: "FocalPlaneXResolution", - 41487: "FocalPlaneYResolution", - 41488: "FocalPlaneResolutionUnit", - 41492: "SubjectLocation", - 41493: "ExposureIndex", - 41495: "SensingMethod", - 41728: "FileSource", - 41729: "SceneType", - 41730: "CFAPattern", - 41985: "CustomRendered", - 41986: "ExposureMode", - 41987: "WhiteBalance", - 41988: "DigitalZoomRatio", - 41989: "FocalLengthIn35mmFilm", - 41990: "SceneCaptureType", - 41991: "GainControl", - 41992: "Contrast", - 41993: "Saturation", - 41994: "Sharpness", - 41995: "DeviceSettingDescription", - 41996: "SubjectDistanceRange", - 42016: "ImageUniqueID", - 42032: "CameraOwnerName", - 42033: "BodySerialNumber", - 42034: "LensSpecification", - 42035: "LensMake", - 42036: "LensModel", - 42037: "LensSerialNumber", - 42112: "GDAL_METADATA", - 42113: "GDAL_NODATA", - 42240: "Gamma", - 50215: "Oce Scanjob Description", - 50216: "Oce Application Selector", - 50217: "Oce Identification Number", - 50218: "Oce ImageLogic Characteristics", - # Adobe DNG - 50706: "DNGVersion", - 50707: "DNGBackwardVersion", - 50708: "UniqueCameraModel", - 50709: "LocalizedCameraModel", - 50710: "CFAPlaneColor", - 50711: "CFALayout", - 50712: "LinearizationTable", - 50713: "BlackLevelRepeatDim", - 50714: "BlackLevel", - 50715: "BlackLevelDeltaH", - 50716: "BlackLevelDeltaV", - 50717: "WhiteLevel", - 50718: "DefaultScale", - 50719: "DefaultCropOrigin", - 50720: "DefaultCropSize", - 50721: "ColorMatrix1", - 50722: "ColorMatrix2", - 50723: "CameraCalibration1", - 50724: "CameraCalibration2", - 50725: "ReductionMatrix1", - 50726: "ReductionMatrix2", - 50727: "AnalogBalance", - 50728: "AsShotNeutral", - 50729: "AsShotWhiteXY", - 50730: "BaselineExposure", - 50731: "BaselineNoise", - 50732: "BaselineSharpness", - 50733: "BayerGreenSplit", - 50734: "LinearResponseLimit", - 50735: "CameraSerialNumber", - 50736: "LensInfo", - 50737: "ChromaBlurRadius", - 50738: "AntiAliasStrength", - 50740: "DNGPrivateData", - 50778: "CalibrationIlluminant1", - 50779: "CalibrationIlluminant2", - 50784: "Alias Layer Metadata", -} - -TAGS_V2: dict[int, TagInfo] = {} -TAGS_V2_GROUPS: dict[int, dict[int, TagInfo]] = {} - - -def _populate() -> None: - for k, v in _tags_v2.items(): - # Populate legacy structure. - TAGS[k] = v[0] - if len(v) == 4: - for sk, sv in v[3].items(): - TAGS[(k, sv)] = sk - - TAGS_V2[k] = TagInfo(k, *v) - - for group, tags in _tags_v2_groups.items(): - TAGS_V2_GROUPS[group] = {k: TagInfo(k, *v) for k, v in tags.items()} - - -_populate() -## -# Map type numbers to type names -- defined in ImageFileDirectory. - -TYPES: dict[int, str] = {} - -# -# These tags are handled by default in libtiff, without -# adding to the custom dictionary. From tif_dir.c, searching for -# case TIFFTAG in the _TIFFVSetField function: -# Line: item. -# 148: case TIFFTAG_SUBFILETYPE: -# 151: case TIFFTAG_IMAGEWIDTH: -# 154: case TIFFTAG_IMAGELENGTH: -# 157: case TIFFTAG_BITSPERSAMPLE: -# 181: case TIFFTAG_COMPRESSION: -# 202: case TIFFTAG_PHOTOMETRIC: -# 205: case TIFFTAG_THRESHHOLDING: -# 208: case TIFFTAG_FILLORDER: -# 214: case TIFFTAG_ORIENTATION: -# 221: case TIFFTAG_SAMPLESPERPIXEL: -# 228: case TIFFTAG_ROWSPERSTRIP: -# 238: case TIFFTAG_MINSAMPLEVALUE: -# 241: case TIFFTAG_MAXSAMPLEVALUE: -# 244: case TIFFTAG_SMINSAMPLEVALUE: -# 247: case TIFFTAG_SMAXSAMPLEVALUE: -# 250: case TIFFTAG_XRESOLUTION: -# 256: case TIFFTAG_YRESOLUTION: -# 262: case TIFFTAG_PLANARCONFIG: -# 268: case TIFFTAG_XPOSITION: -# 271: case TIFFTAG_YPOSITION: -# 274: case TIFFTAG_RESOLUTIONUNIT: -# 280: case TIFFTAG_PAGENUMBER: -# 284: case TIFFTAG_HALFTONEHINTS: -# 288: case TIFFTAG_COLORMAP: -# 294: case TIFFTAG_EXTRASAMPLES: -# 298: case TIFFTAG_MATTEING: -# 305: case TIFFTAG_TILEWIDTH: -# 316: case TIFFTAG_TILELENGTH: -# 327: case TIFFTAG_TILEDEPTH: -# 333: case TIFFTAG_DATATYPE: -# 344: case TIFFTAG_SAMPLEFORMAT: -# 361: case TIFFTAG_IMAGEDEPTH: -# 364: case TIFFTAG_SUBIFD: -# 376: case TIFFTAG_YCBCRPOSITIONING: -# 379: case TIFFTAG_YCBCRSUBSAMPLING: -# 383: case TIFFTAG_TRANSFERFUNCTION: -# 389: case TIFFTAG_REFERENCEBLACKWHITE: -# 393: case TIFFTAG_INKNAMES: - -# Following pseudo-tags are also handled by default in libtiff: -# TIFFTAG_JPEGQUALITY 65537 - -# some of these are not in our TAGS_V2 dict and were included from tiff.h - -# This list also exists in encode.c -LIBTIFF_CORE = { - 255, - 256, - 257, - 258, - 259, - 262, - 263, - 266, - 274, - 277, - 278, - 280, - 281, - 340, - 341, - 282, - 283, - 284, - 286, - 287, - 296, - 297, - 321, - 320, - 338, - 32995, - 322, - 323, - 32998, - 32996, - 339, - 32997, - 330, - 531, - 530, - 301, - 532, - 333, - # as above - 269, # this has been in our tests forever, and works - 65537, -} - -LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes -LIBTIFF_CORE.remove(322) # We don't have support for writing tiled images with libtiff -LIBTIFF_CORE.remove(323) # Tiled images -LIBTIFF_CORE.remove(333) # Ink Names either - -# Note to advanced users: There may be combinations of these -# parameters and values that when added properly, will work and -# produce valid tiff images that may work in your application. -# It is safe to add and remove tags from this set from Pillow's point -# of view so long as you test against libtiff. diff --git a/myenv/lib/python3.12/site-packages/PIL/WalImageFile.py b/myenv/lib/python3.12/site-packages/PIL/WalImageFile.py deleted file mode 100644 index 87e3287..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/WalImageFile.py +++ /dev/null @@ -1,127 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# WAL file handling -# -# History: -# 2003-04-23 fl created -# -# Copyright (c) 2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -""" -This reader is based on the specification available from: -https://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml -and has been tested with a few sample files found using google. - -.. note:: - This format cannot be automatically recognized, so the reader - is not registered for use with :py:func:`PIL.Image.open()`. - To open a WAL file, use the :py:func:`PIL.WalImageFile.open()` function instead. -""" -from __future__ import annotations - -from typing import IO - -from . import Image, ImageFile -from ._binary import i32le as i32 -from ._typing import StrOrBytesPath - - -class WalImageFile(ImageFile.ImageFile): - format = "WAL" - format_description = "Quake2 Texture" - - def _open(self) -> None: - self._mode = "P" - - # read header fields - header = self.fp.read(32 + 24 + 32 + 12) - self._size = i32(header, 32), i32(header, 36) - Image._decompression_bomb_check(self.size) - - # load pixel data - offset = i32(header, 40) - self.fp.seek(offset) - - # strings are null-terminated - self.info["name"] = header[:32].split(b"\0", 1)[0] - next_name = header[56 : 56 + 32].split(b"\0", 1)[0] - if next_name: - self.info["next_name"] = next_name - - def load(self) -> Image.core.PixelAccess | None: - if self._im is None: - self.im = Image.core.new(self.mode, self.size) - self.frombytes(self.fp.read(self.size[0] * self.size[1])) - self.putpalette(quake2palette) - return Image.Image.load(self) - - -def open(filename: StrOrBytesPath | IO[bytes]) -> WalImageFile: - """ - Load texture from a Quake2 WAL texture file. - - By default, a Quake2 standard palette is attached to the texture. - To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. - - :param filename: WAL file name, or an opened file handle. - :returns: An image instance. - """ - return WalImageFile(filename) - - -quake2palette = ( - # default palette taken from piffo 0.93 by Hans Häggström - b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e" - b"\x1e\x1e\x22\x22\x22\x26\x26\x26\x29\x29\x29\x2c\x2c\x2c\x2f\x2f" - b"\x2f\x32\x32\x32\x35\x35\x35\x37\x37\x37\x3a\x3a\x3a\x3c\x3c\x3c" - b"\x24\x1e\x13\x22\x1c\x12\x20\x1b\x12\x1f\x1a\x10\x1d\x19\x10\x1b" - b"\x17\x0f\x1a\x16\x0f\x18\x14\x0d\x17\x13\x0d\x16\x12\x0d\x14\x10" - b"\x0b\x13\x0f\x0b\x10\x0d\x0a\x0f\x0b\x0a\x0d\x0b\x07\x0b\x0a\x07" - b"\x23\x23\x26\x22\x22\x25\x22\x20\x23\x21\x1f\x22\x20\x1e\x20\x1f" - b"\x1d\x1e\x1d\x1b\x1c\x1b\x1a\x1a\x1a\x19\x19\x18\x17\x17\x17\x16" - b"\x16\x14\x14\x14\x13\x13\x13\x10\x10\x10\x0f\x0f\x0f\x0d\x0d\x0d" - b"\x2d\x28\x20\x29\x24\x1c\x27\x22\x1a\x25\x1f\x17\x38\x2e\x1e\x31" - b"\x29\x1a\x2c\x25\x17\x26\x20\x14\x3c\x30\x14\x37\x2c\x13\x33\x28" - b"\x12\x2d\x24\x10\x28\x1f\x0f\x22\x1a\x0b\x1b\x14\x0a\x13\x0f\x07" - b"\x31\x1a\x16\x30\x17\x13\x2e\x16\x10\x2c\x14\x0d\x2a\x12\x0b\x27" - b"\x0f\x0a\x25\x0f\x07\x21\x0d\x01\x1e\x0b\x01\x1c\x0b\x01\x1a\x0b" - b"\x01\x18\x0a\x01\x16\x0a\x01\x13\x0a\x01\x10\x07\x01\x0d\x07\x01" - b"\x29\x23\x1e\x27\x21\x1c\x26\x20\x1b\x25\x1f\x1a\x23\x1d\x19\x21" - b"\x1c\x18\x20\x1b\x17\x1e\x19\x16\x1c\x18\x14\x1b\x17\x13\x19\x14" - b"\x10\x17\x13\x0f\x14\x10\x0d\x12\x0f\x0b\x0f\x0b\x0a\x0b\x0a\x07" - b"\x26\x1a\x0f\x23\x19\x0f\x20\x17\x0f\x1c\x16\x0f\x19\x13\x0d\x14" - b"\x10\x0b\x10\x0d\x0a\x0b\x0a\x07\x33\x22\x1f\x35\x29\x26\x37\x2f" - b"\x2d\x39\x35\x34\x37\x39\x3a\x33\x37\x39\x30\x34\x36\x2b\x31\x34" - b"\x27\x2e\x31\x22\x2b\x2f\x1d\x28\x2c\x17\x25\x2a\x0f\x20\x26\x0d" - b"\x1e\x25\x0b\x1c\x22\x0a\x1b\x20\x07\x19\x1e\x07\x17\x1b\x07\x14" - b"\x18\x01\x12\x16\x01\x0f\x12\x01\x0b\x0d\x01\x07\x0a\x01\x01\x01" - b"\x2c\x21\x21\x2a\x1f\x1f\x29\x1d\x1d\x27\x1c\x1c\x26\x1a\x1a\x24" - b"\x18\x18\x22\x17\x17\x21\x16\x16\x1e\x13\x13\x1b\x12\x12\x18\x10" - b"\x10\x16\x0d\x0d\x12\x0b\x0b\x0d\x0a\x0a\x0a\x07\x07\x01\x01\x01" - b"\x2e\x30\x29\x2d\x2e\x27\x2b\x2c\x26\x2a\x2a\x24\x28\x29\x23\x27" - b"\x27\x21\x26\x26\x1f\x24\x24\x1d\x22\x22\x1c\x1f\x1f\x1a\x1c\x1c" - b"\x18\x19\x19\x16\x17\x17\x13\x13\x13\x10\x0f\x0f\x0d\x0b\x0b\x0a" - b"\x30\x1e\x1b\x2d\x1c\x19\x2c\x1a\x17\x2a\x19\x14\x28\x17\x13\x26" - b"\x16\x10\x24\x13\x0f\x21\x12\x0d\x1f\x10\x0b\x1c\x0f\x0a\x19\x0d" - b"\x0a\x16\x0b\x07\x12\x0a\x07\x0f\x07\x01\x0a\x01\x01\x01\x01\x01" - b"\x28\x29\x38\x26\x27\x36\x25\x26\x34\x24\x24\x31\x22\x22\x2f\x20" - b"\x21\x2d\x1e\x1f\x2a\x1d\x1d\x27\x1b\x1b\x25\x19\x19\x21\x17\x17" - b"\x1e\x14\x14\x1b\x13\x12\x17\x10\x0f\x13\x0d\x0b\x0f\x0a\x07\x07" - b"\x2f\x32\x29\x2d\x30\x26\x2b\x2e\x24\x29\x2c\x21\x27\x2a\x1e\x25" - b"\x28\x1c\x23\x26\x1a\x21\x25\x18\x1e\x22\x14\x1b\x1f\x10\x19\x1c" - b"\x0d\x17\x1a\x0a\x13\x17\x07\x10\x13\x01\x0d\x0f\x01\x0a\x0b\x01" - b"\x01\x3f\x01\x13\x3c\x0b\x1b\x39\x10\x20\x35\x14\x23\x31\x17\x23" - b"\x2d\x18\x23\x29\x18\x3f\x3f\x3f\x3f\x3f\x39\x3f\x3f\x31\x3f\x3f" - b"\x2a\x3f\x3f\x20\x3f\x3f\x14\x3f\x3c\x12\x3f\x39\x0f\x3f\x35\x0b" - b"\x3f\x32\x07\x3f\x2d\x01\x3d\x2a\x01\x3b\x26\x01\x39\x21\x01\x37" - b"\x1d\x01\x34\x1a\x01\x32\x16\x01\x2f\x12\x01\x2d\x0f\x01\x2a\x0b" - b"\x01\x27\x07\x01\x23\x01\x01\x1d\x01\x01\x17\x01\x01\x10\x01\x01" - b"\x3d\x01\x01\x19\x19\x3f\x3f\x01\x01\x01\x01\x3f\x16\x16\x13\x10" - b"\x10\x0f\x0d\x0d\x0b\x3c\x2e\x2a\x36\x27\x20\x30\x21\x18\x29\x1b" - b"\x10\x3c\x39\x37\x37\x32\x2f\x31\x2c\x28\x2b\x26\x21\x30\x22\x20" -) diff --git a/myenv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py deleted file mode 100644 index 1716a18..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py +++ /dev/null @@ -1,320 +0,0 @@ -from __future__ import annotations - -from io import BytesIO -from typing import IO, Any - -from . import Image, ImageFile - -try: - from . import _webp - - SUPPORTED = True -except ImportError: - SUPPORTED = False - - -_VP8_MODES_BY_IDENTIFIER = { - b"VP8 ": "RGB", - b"VP8X": "RGBA", - b"VP8L": "RGBA", # lossless -} - - -def _accept(prefix: bytes) -> bool | str: - is_riff_file_format = prefix.startswith(b"RIFF") - is_webp_file = prefix[8:12] == b"WEBP" - is_valid_vp8_mode = prefix[12:16] in _VP8_MODES_BY_IDENTIFIER - - if is_riff_file_format and is_webp_file and is_valid_vp8_mode: - if not SUPPORTED: - return ( - "image file could not be identified because WEBP support not installed" - ) - return True - return False - - -class WebPImageFile(ImageFile.ImageFile): - format = "WEBP" - format_description = "WebP image" - __loaded = 0 - __logical_frame = 0 - - def _open(self) -> None: - # Use the newer AnimDecoder API to parse the (possibly) animated file, - # and access muxed chunks like ICC/EXIF/XMP. - self._decoder = _webp.WebPAnimDecoder(self.fp.read()) - - # Get info from decoder - self._size, loop_count, bgcolor, frame_count, mode = self._decoder.get_info() - self.info["loop"] = loop_count - bg_a, bg_r, bg_g, bg_b = ( - (bgcolor >> 24) & 0xFF, - (bgcolor >> 16) & 0xFF, - (bgcolor >> 8) & 0xFF, - bgcolor & 0xFF, - ) - self.info["background"] = (bg_r, bg_g, bg_b, bg_a) - self.n_frames = frame_count - self.is_animated = self.n_frames > 1 - self._mode = "RGB" if mode == "RGBX" else mode - self.rawmode = mode - - # Attempt to read ICC / EXIF / XMP chunks from file - icc_profile = self._decoder.get_chunk("ICCP") - exif = self._decoder.get_chunk("EXIF") - xmp = self._decoder.get_chunk("XMP ") - if icc_profile: - self.info["icc_profile"] = icc_profile - if exif: - self.info["exif"] = exif - if xmp: - self.info["xmp"] = xmp - - # Initialize seek state - self._reset(reset=False) - - def _getexif(self) -> dict[int, Any] | None: - if "exif" not in self.info: - return None - return self.getexif()._get_merged_dict() - - def seek(self, frame: int) -> None: - if not self._seek_check(frame): - return - - # Set logical frame to requested position - self.__logical_frame = frame - - def _reset(self, reset: bool = True) -> None: - if reset: - self._decoder.reset() - self.__physical_frame = 0 - self.__loaded = -1 - self.__timestamp = 0 - - def _get_next(self) -> tuple[bytes, int, int]: - # Get next frame - ret = self._decoder.get_next() - self.__physical_frame += 1 - - # Check if an error occurred - if ret is None: - self._reset() # Reset just to be safe - self.seek(0) - msg = "failed to decode next frame in WebP file" - raise EOFError(msg) - - # Compute duration - data, timestamp = ret - duration = timestamp - self.__timestamp - self.__timestamp = timestamp - - # libwebp gives frame end, adjust to start of frame - timestamp -= duration - return data, timestamp, duration - - def _seek(self, frame: int) -> None: - if self.__physical_frame == frame: - return # Nothing to do - if frame < self.__physical_frame: - self._reset() # Rewind to beginning - while self.__physical_frame < frame: - self._get_next() # Advance to the requested frame - - def load(self) -> Image.core.PixelAccess | None: - if self.__loaded != self.__logical_frame: - self._seek(self.__logical_frame) - - # We need to load the image data for this frame - data, timestamp, duration = self._get_next() - self.info["timestamp"] = timestamp - self.info["duration"] = duration - self.__loaded = self.__logical_frame - - # Set tile - if self.fp and self._exclusive_fp: - self.fp.close() - self.fp = BytesIO(data) - self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 0, self.rawmode)] - - return super().load() - - def load_seek(self, pos: int) -> None: - pass - - def tell(self) -> int: - return self.__logical_frame - - -def _convert_frame(im: Image.Image) -> Image.Image: - # Make sure image mode is supported - if im.mode not in ("RGBX", "RGBA", "RGB"): - im = im.convert("RGBA" if im.has_transparency_data else "RGB") - return im - - -def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - encoderinfo = im.encoderinfo.copy() - append_images = list(encoderinfo.get("append_images", [])) - - # If total frame count is 1, then save using the legacy API, which - # will preserve non-alpha modes - total = 0 - for ims in [im] + append_images: - total += getattr(ims, "n_frames", 1) - if total == 1: - _save(im, fp, filename) - return - - background: int | tuple[int, ...] = (0, 0, 0, 0) - if "background" in encoderinfo: - background = encoderinfo["background"] - elif "background" in im.info: - background = im.info["background"] - if isinstance(background, int): - # GifImagePlugin stores a global color table index in - # info["background"]. So it must be converted to an RGBA value - palette = im.getpalette() - if palette: - r, g, b = palette[background * 3 : (background + 1) * 3] - background = (r, g, b, 255) - else: - background = (background, background, background, 255) - - duration = im.encoderinfo.get("duration", im.info.get("duration", 0)) - loop = im.encoderinfo.get("loop", 0) - minimize_size = im.encoderinfo.get("minimize_size", False) - kmin = im.encoderinfo.get("kmin", None) - kmax = im.encoderinfo.get("kmax", None) - allow_mixed = im.encoderinfo.get("allow_mixed", False) - verbose = False - lossless = im.encoderinfo.get("lossless", False) - quality = im.encoderinfo.get("quality", 80) - alpha_quality = im.encoderinfo.get("alpha_quality", 100) - method = im.encoderinfo.get("method", 0) - icc_profile = im.encoderinfo.get("icc_profile") or "" - exif = im.encoderinfo.get("exif", "") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - xmp = im.encoderinfo.get("xmp", "") - if allow_mixed: - lossless = False - - # Sensible keyframe defaults are from gif2webp.c script - if kmin is None: - kmin = 9 if lossless else 3 - if kmax is None: - kmax = 17 if lossless else 5 - - # Validate background color - if ( - not isinstance(background, (list, tuple)) - or len(background) != 4 - or not all(0 <= v < 256 for v in background) - ): - msg = f"Background color is not an RGBA tuple clamped to (0-255): {background}" - raise OSError(msg) - - # Convert to packed uint - bg_r, bg_g, bg_b, bg_a = background - background = (bg_a << 24) | (bg_r << 16) | (bg_g << 8) | (bg_b << 0) - - # Setup the WebP animation encoder - enc = _webp.WebPAnimEncoder( - im.size, - background, - loop, - minimize_size, - kmin, - kmax, - allow_mixed, - verbose, - ) - - # Add each frame - frame_idx = 0 - timestamp = 0 - cur_idx = im.tell() - try: - for ims in [im] + append_images: - # Get number of frames in this image - nfr = getattr(ims, "n_frames", 1) - - for idx in range(nfr): - ims.seek(idx) - - frame = _convert_frame(ims) - - # Append the frame to the animation encoder - enc.add( - frame.getim(), - round(timestamp), - lossless, - quality, - alpha_quality, - method, - ) - - # Update timestamp and frame index - if isinstance(duration, (list, tuple)): - timestamp += duration[frame_idx] - else: - timestamp += duration - frame_idx += 1 - - finally: - im.seek(cur_idx) - - # Force encoder to flush frames - enc.add(None, round(timestamp), lossless, quality, alpha_quality, 0) - - # Get the final output from the encoder - data = enc.assemble(icc_profile, exif, xmp) - if data is None: - msg = "cannot write file as WebP (encoder returned None)" - raise OSError(msg) - - fp.write(data) - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - lossless = im.encoderinfo.get("lossless", False) - quality = im.encoderinfo.get("quality", 80) - alpha_quality = im.encoderinfo.get("alpha_quality", 100) - icc_profile = im.encoderinfo.get("icc_profile") or "" - exif = im.encoderinfo.get("exif", b"") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - if exif.startswith(b"Exif\x00\x00"): - exif = exif[6:] - xmp = im.encoderinfo.get("xmp", "") - method = im.encoderinfo.get("method", 4) - exact = 1 if im.encoderinfo.get("exact") else 0 - - im = _convert_frame(im) - - data = _webp.WebPEncode( - im.getim(), - lossless, - float(quality), - float(alpha_quality), - icc_profile, - method, - exact, - exif, - xmp, - ) - if data is None: - msg = "cannot write file as WebP (encoder returned None)" - raise OSError(msg) - - fp.write(data) - - -Image.register_open(WebPImageFile.format, WebPImageFile, _accept) -if SUPPORTED: - Image.register_save(WebPImageFile.format, _save) - Image.register_save_all(WebPImageFile.format, _save_all) - Image.register_extension(WebPImageFile.format, ".webp") - Image.register_mime(WebPImageFile.format, "image/webp") diff --git a/myenv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py deleted file mode 100644 index d569cb4..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py +++ /dev/null @@ -1,186 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# WMF stub codec -# -# history: -# 1996-12-14 fl Created -# 2004-02-22 fl Turned into a stub driver -# 2004-02-23 fl Added EMF support -# -# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -# WMF/EMF reference documentation: -# https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-WMF/[MS-WMF].pdf -# http://wvware.sourceforge.net/caolan/index.html -# http://wvware.sourceforge.net/caolan/ora-wmf.html -from __future__ import annotations - -from typing import IO - -from . import Image, ImageFile -from ._binary import i16le as word -from ._binary import si16le as short -from ._binary import si32le as _long - -_handler = None - - -def register_handler(handler: ImageFile.StubHandler | None) -> None: - """ - Install application-specific WMF image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -if hasattr(Image.core, "drawwmf"): - # install default handler (windows only) - - class WmfHandler(ImageFile.StubHandler): - def open(self, im: ImageFile.StubImageFile) -> None: - im._mode = "RGB" - self.bbox = im.info["wmf_bbox"] - - def load(self, im: ImageFile.StubImageFile) -> Image.Image: - im.fp.seek(0) # rewind - return Image.frombytes( - "RGB", - im.size, - Image.core.drawwmf(im.fp.read(), im.size, self.bbox), - "raw", - "BGR", - (im.size[0] * 3 + 3) & -4, - -1, - ) - - register_handler(WmfHandler()) - -# -# -------------------------------------------------------------------- -# Read WMF file - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith((b"\xd7\xcd\xc6\x9a\x00\x00", b"\x01\x00\x00\x00")) - - -## -# Image plugin for Windows metafiles. - - -class WmfStubImageFile(ImageFile.StubImageFile): - format = "WMF" - format_description = "Windows Metafile" - - def _open(self) -> None: - # check placable header - s = self.fp.read(44) - - if s.startswith(b"\xd7\xcd\xc6\x9a\x00\x00"): - # placeable windows metafile - - # get units per inch - inch = word(s, 14) - if inch == 0: - msg = "Invalid inch" - raise ValueError(msg) - self._inch: tuple[float, float] = inch, inch - - # get bounding box - x0 = short(s, 6) - y0 = short(s, 8) - x1 = short(s, 10) - y1 = short(s, 12) - - # normalize size to 72 dots per inch - self.info["dpi"] = 72 - size = ( - (x1 - x0) * self.info["dpi"] // inch, - (y1 - y0) * self.info["dpi"] // inch, - ) - - self.info["wmf_bbox"] = x0, y0, x1, y1 - - # sanity check (standard metafile header) - if s[22:26] != b"\x01\x00\t\x00": - msg = "Unsupported WMF file format" - raise SyntaxError(msg) - - elif s.startswith(b"\x01\x00\x00\x00") and s[40:44] == b" EMF": - # enhanced metafile - - # get bounding box - x0 = _long(s, 8) - y0 = _long(s, 12) - x1 = _long(s, 16) - y1 = _long(s, 20) - - # get frame (in 0.01 millimeter units) - frame = _long(s, 24), _long(s, 28), _long(s, 32), _long(s, 36) - - size = x1 - x0, y1 - y0 - - # calculate dots per inch from bbox and frame - xdpi = 2540.0 * (x1 - x0) / (frame[2] - frame[0]) - ydpi = 2540.0 * (y1 - y0) / (frame[3] - frame[1]) - - self.info["wmf_bbox"] = x0, y0, x1, y1 - - if xdpi == ydpi: - self.info["dpi"] = xdpi - else: - self.info["dpi"] = xdpi, ydpi - self._inch = xdpi, ydpi - - else: - msg = "Unsupported file format" - raise SyntaxError(msg) - - self._mode = "RGB" - self._size = size - - loader = self._load() - if loader: - loader.open(self) - - def _load(self) -> ImageFile.StubHandler | None: - return _handler - - def load( - self, dpi: float | tuple[float, float] | None = None - ) -> Image.core.PixelAccess | None: - if dpi is not None: - self.info["dpi"] = dpi - x0, y0, x1, y1 = self.info["wmf_bbox"] - if not isinstance(dpi, tuple): - dpi = dpi, dpi - self._size = ( - int((x1 - x0) * dpi[0] / self._inch[0]), - int((y1 - y0) * dpi[1] / self._inch[1]), - ) - return super().load() - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if _handler is None or not hasattr(_handler, "save"): - msg = "WMF save handler not installed" - raise OSError(msg) - _handler.save(im, fp, filename) - - -# -# -------------------------------------------------------------------- -# Registry stuff - - -Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept) -Image.register_save(WmfStubImageFile.format, _save) - -Image.register_extensions(WmfStubImageFile.format, [".wmf", ".emf"]) diff --git a/myenv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py deleted file mode 100644 index cde2838..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py +++ /dev/null @@ -1,83 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XV Thumbnail file handler by Charles E. "Gene" Cash -# (gcash@magicnet.net) -# -# see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, -# available from ftp://ftp.cis.upenn.edu/pub/xv/ -# -# history: -# 98-08-15 cec created (b/w only) -# 98-12-09 cec added color palette -# 98-12-28 fl added to PIL (with only a few very minor modifications) -# -# To do: -# FIXME: make save work (this requires quantization support) -# -from __future__ import annotations - -from . import Image, ImageFile, ImagePalette -from ._binary import o8 - -_MAGIC = b"P7 332" - -# standard color palette for thumbnails (RGB332) -PALETTE = b"" -for r in range(8): - for g in range(8): - for b in range(4): - PALETTE = PALETTE + ( - o8((r * 255) // 7) + o8((g * 255) // 7) + o8((b * 255) // 3) - ) - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(_MAGIC) - - -## -# Image plugin for XV thumbnail images. - - -class XVThumbImageFile(ImageFile.ImageFile): - format = "XVThumb" - format_description = "XV thumbnail image" - - def _open(self) -> None: - # check magic - assert self.fp is not None - - if not _accept(self.fp.read(6)): - msg = "not an XV thumbnail file" - raise SyntaxError(msg) - - # Skip to beginning of next line - self.fp.readline() - - # skip info comments - while True: - s = self.fp.readline() - if not s: - msg = "Unexpected EOF reading XV thumbnail file" - raise SyntaxError(msg) - if s[0] != 35: # ie. when not a comment: '#' - break - - # parse header line (already read) - s = s.strip().split() - - self._mode = "P" - self._size = int(s[0]), int(s[1]) - - self.palette = ImagePalette.raw("RGB", PALETTE) - - self.tile = [ - ImageFile._Tile("raw", (0, 0) + self.size, self.fp.tell(), self.mode) - ] - - -# -------------------------------------------------------------------- - -Image.register_open(XVThumbImageFile.format, XVThumbImageFile, _accept) diff --git a/myenv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py deleted file mode 100644 index 1e57aa1..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py +++ /dev/null @@ -1,98 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XBM File handling -# -# History: -# 1995-09-08 fl Created -# 1996-11-01 fl Added save support -# 1997-07-07 fl Made header parser more tolerant -# 1997-07-22 fl Fixed yet another parser bug -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) -# 2001-05-13 fl Added hotspot handling (based on code from Bernhard Herzog) -# 2004-02-24 fl Allow some whitespace before first #define -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import re -from typing import IO - -from . import Image, ImageFile - -# XBM header -xbm_head = re.compile( - rb"\s*#define[ \t]+.*_width[ \t]+(?P[0-9]+)[\r\n]+" - b"#define[ \t]+.*_height[ \t]+(?P[0-9]+)[\r\n]+" - b"(?P" - b"#define[ \t]+[^_]*_x_hot[ \t]+(?P[0-9]+)[\r\n]+" - b"#define[ \t]+[^_]*_y_hot[ \t]+(?P[0-9]+)[\r\n]+" - b")?" - rb"[\000-\377]*_bits\[]" -) - - -def _accept(prefix: bytes) -> bool: - return prefix.lstrip().startswith(b"#define") - - -## -# Image plugin for X11 bitmaps. - - -class XbmImageFile(ImageFile.ImageFile): - format = "XBM" - format_description = "X11 Bitmap" - - def _open(self) -> None: - assert self.fp is not None - - m = xbm_head.match(self.fp.read(512)) - - if not m: - msg = "not a XBM file" - raise SyntaxError(msg) - - xsize = int(m.group("width")) - ysize = int(m.group("height")) - - if m.group("hotspot"): - self.info["hotspot"] = (int(m.group("xhot")), int(m.group("yhot"))) - - self._mode = "1" - self._size = xsize, ysize - - self.tile = [ImageFile._Tile("xbm", (0, 0) + self.size, m.end())] - - -def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - if im.mode != "1": - msg = f"cannot write mode {im.mode} as XBM" - raise OSError(msg) - - fp.write(f"#define im_width {im.size[0]}\n".encode("ascii")) - fp.write(f"#define im_height {im.size[1]}\n".encode("ascii")) - - hotspot = im.encoderinfo.get("hotspot") - if hotspot: - fp.write(f"#define im_x_hot {hotspot[0]}\n".encode("ascii")) - fp.write(f"#define im_y_hot {hotspot[1]}\n".encode("ascii")) - - fp.write(b"static char im_bits[] = {\n") - - ImageFile._save(im, fp, [ImageFile._Tile("xbm", (0, 0) + im.size)]) - - fp.write(b"};\n") - - -Image.register_open(XbmImageFile.format, XbmImageFile, _accept) -Image.register_save(XbmImageFile.format, _save) - -Image.register_extension(XbmImageFile.format, ".xbm") - -Image.register_mime(XbmImageFile.format, "image/xbm") diff --git a/myenv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py b/myenv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py deleted file mode 100644 index 3be240f..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py +++ /dev/null @@ -1,157 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XPM File handling -# -# History: -# 1996-12-29 fl Created -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) -# -# Copyright (c) Secret Labs AB 1997-2001. -# Copyright (c) Fredrik Lundh 1996-2001. -# -# See the README file for information on usage and redistribution. -# -from __future__ import annotations - -import re - -from . import Image, ImageFile, ImagePalette -from ._binary import o8 - -# XPM header -xpm_head = re.compile(b'"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)') - - -def _accept(prefix: bytes) -> bool: - return prefix.startswith(b"/* XPM */") - - -## -# Image plugin for X11 pixel maps. - - -class XpmImageFile(ImageFile.ImageFile): - format = "XPM" - format_description = "X11 Pixel Map" - - def _open(self) -> None: - assert self.fp is not None - if not _accept(self.fp.read(9)): - msg = "not an XPM file" - raise SyntaxError(msg) - - # skip forward to next string - while True: - line = self.fp.readline() - if not line: - msg = "broken XPM file" - raise SyntaxError(msg) - m = xpm_head.match(line) - if m: - break - - self._size = int(m.group(1)), int(m.group(2)) - - palette_length = int(m.group(3)) - bpp = int(m.group(4)) - - # - # load palette description - - palette = {} - - for _ in range(palette_length): - line = self.fp.readline().rstrip() - - c = line[1 : bpp + 1] - s = line[bpp + 1 : -2].split() - - for i in range(0, len(s), 2): - if s[i] == b"c": - # process colour key - rgb = s[i + 1] - if rgb == b"None": - self.info["transparency"] = c - elif rgb.startswith(b"#"): - rgb_int = int(rgb[1:], 16) - palette[c] = ( - o8((rgb_int >> 16) & 255) - + o8((rgb_int >> 8) & 255) - + o8(rgb_int & 255) - ) - else: - # unknown colour - msg = "cannot read this XPM file" - raise ValueError(msg) - break - - else: - # missing colour key - msg = "cannot read this XPM file" - raise ValueError(msg) - - args: tuple[int, dict[bytes, bytes] | tuple[bytes, ...]] - if palette_length > 256: - self._mode = "RGB" - args = (bpp, palette) - else: - self._mode = "P" - self.palette = ImagePalette.raw("RGB", b"".join(palette.values())) - args = (bpp, tuple(palette.keys())) - - self.tile = [ImageFile._Tile("xpm", (0, 0) + self.size, self.fp.tell(), args)] - - def load_read(self, read_bytes: int) -> bytes: - # - # load all image data in one chunk - - xsize, ysize = self.size - - assert self.fp is not None - s = [self.fp.readline()[1 : xsize + 1].ljust(xsize) for i in range(ysize)] - - return b"".join(s) - - -class XpmDecoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: - assert self.fd is not None - - data = bytearray() - bpp, palette = self.args - dest_length = self.state.xsize * self.state.ysize - if self.mode == "RGB": - dest_length *= 3 - pixel_header = False - while len(data) < dest_length: - line = self.fd.readline() - if not line: - break - if line.rstrip() == b"/* pixels */" and not pixel_header: - pixel_header = True - continue - line = b'"'.join(line.split(b'"')[1:-1]) - for i in range(0, len(line), bpp): - key = line[i : i + bpp] - if self.mode == "RGB": - data += palette[key] - else: - data += o8(palette.index(key)) - self.set_as_raw(bytes(data)) - return -1, 0 - - -# -# Registry - - -Image.register_open(XpmImageFile.format, XpmImageFile, _accept) -Image.register_decoder("xpm", XpmDecoder) - -Image.register_extension(XpmImageFile.format, ".xpm") - -Image.register_mime(XpmImageFile.format, "image/xpm") diff --git a/myenv/lib/python3.12/site-packages/PIL/__init__.py b/myenv/lib/python3.12/site-packages/PIL/__init__.py deleted file mode 100644 index 6e4c23f..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/__init__.py +++ /dev/null @@ -1,87 +0,0 @@ -"""Pillow (Fork of the Python Imaging Library) - -Pillow is the friendly PIL fork by Jeffrey A. Clark and contributors. - https://github.com/python-pillow/Pillow/ - -Pillow is forked from PIL 1.1.7. - -PIL is the Python Imaging Library by Fredrik Lundh and contributors. -Copyright (c) 1999 by Secret Labs AB. - -Use PIL.__version__ for this Pillow version. - -;-) -""" - -from __future__ import annotations - -from . import _version - -# VERSION was removed in Pillow 6.0.0. -# PILLOW_VERSION was removed in Pillow 9.0.0. -# Use __version__ instead. -__version__ = _version.__version__ -del _version - - -_plugins = [ - "AvifImagePlugin", - "BlpImagePlugin", - "BmpImagePlugin", - "BufrStubImagePlugin", - "CurImagePlugin", - "DcxImagePlugin", - "DdsImagePlugin", - "EpsImagePlugin", - "FitsImagePlugin", - "FliImagePlugin", - "FpxImagePlugin", - "FtexImagePlugin", - "GbrImagePlugin", - "GifImagePlugin", - "GribStubImagePlugin", - "Hdf5StubImagePlugin", - "IcnsImagePlugin", - "IcoImagePlugin", - "ImImagePlugin", - "ImtImagePlugin", - "IptcImagePlugin", - "JpegImagePlugin", - "Jpeg2KImagePlugin", - "McIdasImagePlugin", - "MicImagePlugin", - "MpegImagePlugin", - "MpoImagePlugin", - "MspImagePlugin", - "PalmImagePlugin", - "PcdImagePlugin", - "PcxImagePlugin", - "PdfImagePlugin", - "PixarImagePlugin", - "PngImagePlugin", - "PpmImagePlugin", - "PsdImagePlugin", - "QoiImagePlugin", - "SgiImagePlugin", - "SpiderImagePlugin", - "SunImagePlugin", - "TgaImagePlugin", - "TiffImagePlugin", - "WebPImagePlugin", - "WmfImagePlugin", - "XbmImagePlugin", - "XpmImagePlugin", - "XVThumbImagePlugin", -] - - -class UnidentifiedImageError(OSError): - """ - Raised in :py:meth:`PIL.Image.open` if an image cannot be opened and identified. - - If a PNG image raises this error, setting :data:`.ImageFile.LOAD_TRUNCATED_IMAGES` - to true may allow the image to be opened after all. The setting will ignore missing - data and checksum failures. - """ - - pass diff --git a/myenv/lib/python3.12/site-packages/PIL/__main__.py b/myenv/lib/python3.12/site-packages/PIL/__main__.py deleted file mode 100644 index 043156e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -from __future__ import annotations - -import sys - -from .features import pilinfo - -pilinfo(supported_formats="--report" not in sys.argv) diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc deleted file mode 100644 index fb784b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc deleted file mode 100644 index ecaafad..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc deleted file mode 100644 index 65c7d46..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc deleted file mode 100644 index ddcc9f6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc deleted file mode 100644 index 8fbb342..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc deleted file mode 100644 index 4c9d6fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc deleted file mode 100644 index b400622..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc deleted file mode 100644 index 8836565..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc deleted file mode 100644 index 99683d0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc deleted file mode 100644 index 9f5a342..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc deleted file mode 100644 index eb7bbe0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc deleted file mode 100644 index 464d9ea..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc deleted file mode 100644 index e697cde..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc deleted file mode 100644 index 0887c2f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc deleted file mode 100644 index 0cc7750..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc deleted file mode 100644 index e22a931..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc deleted file mode 100644 index 1b0beed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc deleted file mode 100644 index a2279ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc deleted file mode 100644 index 7be1a8a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc deleted file mode 100644 index 8eaee86..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc deleted file mode 100644 index ccc354a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc deleted file mode 100644 index 86e09e0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc deleted file mode 100644 index 0280525..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc deleted file mode 100644 index 2185156..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc deleted file mode 100644 index 13e71e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc deleted file mode 100644 index df0dfd5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc deleted file mode 100644 index 24c60b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc deleted file mode 100644 index 11f74e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc deleted file mode 100644 index b1202e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc deleted file mode 100644 index 7296ce6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc deleted file mode 100644 index ad91dc1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc deleted file mode 100644 index 2b5955c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc deleted file mode 100644 index 25b039c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc deleted file mode 100644 index f0cd41e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc deleted file mode 100644 index e53223e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc deleted file mode 100644 index 1aba429..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc deleted file mode 100644 index 0d6d3c3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc deleted file mode 100644 index 9b75cc4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc deleted file mode 100644 index e15be0a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc deleted file mode 100644 index 70942be..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc deleted file mode 100644 index c3f9885..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc deleted file mode 100644 index 360279d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc deleted file mode 100644 index 5565db3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc deleted file mode 100644 index 9061169..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc deleted file mode 100644 index 4048204..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc deleted file mode 100644 index 1ef4922..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc deleted file mode 100644 index 4b31eef..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc deleted file mode 100644 index 8a9fc30..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc deleted file mode 100644 index 766a865..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc deleted file mode 100644 index e3dbf1d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc deleted file mode 100644 index bb11e57..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc deleted file mode 100644 index e984019..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc deleted file mode 100644 index 53ee17c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc deleted file mode 100644 index 2db67a5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc deleted file mode 100644 index 4e8fb99..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc deleted file mode 100644 index bd11c11..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc deleted file mode 100644 index d07f671..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc deleted file mode 100644 index d94e97d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc deleted file mode 100644 index 9c80c6c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc deleted file mode 100644 index 001d1b2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc deleted file mode 100644 index b05dfaa..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc deleted file mode 100644 index 8ebf42e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc deleted file mode 100644 index dbf967f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc deleted file mode 100644 index a2d7786..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc deleted file mode 100644 index b52415b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc deleted file mode 100644 index 6f1222e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc deleted file mode 100644 index ea4d284..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc deleted file mode 100644 index 4e1dfc3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc deleted file mode 100644 index 4d3f7d6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc deleted file mode 100644 index 0e7ed44..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc deleted file mode 100644 index 5298f56..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc deleted file mode 100644 index 5d5246e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc deleted file mode 100644 index 6faf81d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc deleted file mode 100644 index cbc4de5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc deleted file mode 100644 index b1ed22a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc deleted file mode 100644 index cd20363..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc deleted file mode 100644 index b0bc3dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc deleted file mode 100644 index 39c0d0d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc deleted file mode 100644 index ccdb6cf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc deleted file mode 100644 index c8d3091..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc deleted file mode 100644 index f21304c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc deleted file mode 100644 index c14ebbf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc deleted file mode 100644 index d800afa..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc deleted file mode 100644 index e3baea1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc deleted file mode 100644 index d7bb302..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc deleted file mode 100644 index a1e37e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c662ba8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index 159aa04..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc deleted file mode 100644 index caa236c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc deleted file mode 100644 index d328805..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc deleted file mode 100644 index e5e9157..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc deleted file mode 100644 index 8f949f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc deleted file mode 100644 index 0ba801c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc deleted file mode 100644 index 219bd92..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc deleted file mode 100644 index 2143255..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc deleted file mode 100644 index ca39131..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 733dcbe..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_avif.pyi b/myenv/lib/python3.12/site-packages/PIL/_avif.pyi deleted file mode 100644 index e27843e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_avif.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_binary.py b/myenv/lib/python3.12/site-packages/PIL/_binary.py deleted file mode 100644 index 4594ccc..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_binary.py +++ /dev/null @@ -1,112 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Binary input/output support routines. -# -# Copyright (c) 1997-2003 by Secret Labs AB -# Copyright (c) 1995-2003 by Fredrik Lundh -# Copyright (c) 2012 by Brian Crowell -# -# See the README file for information on usage and redistribution. -# - - -"""Binary input/output support routines.""" -from __future__ import annotations - -from struct import pack, unpack_from - - -def i8(c: bytes) -> int: - return c[0] - - -def o8(i: int) -> bytes: - return bytes((i & 255,)) - - -# Input, le = little endian, be = big endian -def i16le(c: bytes, o: int = 0) -> int: - """ - Converts a 2-bytes (16 bits) string to an unsigned integer. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(" int: - """ - Converts a 2-bytes (16 bits) string to a signed integer. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(" int: - """ - Converts a 2-bytes (16 bits) string to a signed integer, big endian. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(">h", c, o)[0] - - -def i32le(c: bytes, o: int = 0) -> int: - """ - Converts a 4-bytes (32 bits) string to an unsigned integer. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(" int: - """ - Converts a 4-bytes (32 bits) string to a signed integer. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(" int: - """ - Converts a 4-bytes (32 bits) string to a signed integer, big endian. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from(">i", c, o)[0] - - -def i16be(c: bytes, o: int = 0) -> int: - return unpack_from(">H", c, o)[0] - - -def i32be(c: bytes, o: int = 0) -> int: - return unpack_from(">I", c, o)[0] - - -# Output, le = little endian, be = big endian -def o16le(i: int) -> bytes: - return pack(" bytes: - return pack(" bytes: - return pack(">H", i) - - -def o32be(i: int) -> bytes: - return pack(">I", i) diff --git a/myenv/lib/python3.12/site-packages/PIL/_deprecate.py b/myenv/lib/python3.12/site-packages/PIL/_deprecate.py deleted file mode 100644 index 170d444..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_deprecate.py +++ /dev/null @@ -1,72 +0,0 @@ -from __future__ import annotations - -import warnings - -from . import __version__ - - -def deprecate( - deprecated: str, - when: int | None, - replacement: str | None = None, - *, - action: str | None = None, - plural: bool = False, - stacklevel: int = 3, -) -> None: - """ - Deprecations helper. - - :param deprecated: Name of thing to be deprecated. - :param when: Pillow major version to be removed in. - :param replacement: Name of replacement. - :param action: Instead of "replacement", give a custom call to action - e.g. "Upgrade to new thing". - :param plural: if the deprecated thing is plural, needing "are" instead of "is". - - Usually of the form: - - "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd). - Use [replacement] instead." - - You can leave out the replacement sentence: - - "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd)" - - Or with another call to action: - - "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd). - [action]." - """ - - is_ = "are" if plural else "is" - - if when is None: - removed = "a future version" - elif when <= int(__version__.split(".")[0]): - msg = f"{deprecated} {is_} deprecated and should be removed." - raise RuntimeError(msg) - elif when == 12: - removed = "Pillow 12 (2025-10-15)" - elif when == 13: - removed = "Pillow 13 (2026-10-15)" - else: - msg = f"Unknown removal version: {when}. Update {__name__}?" - raise ValueError(msg) - - if replacement and action: - msg = "Use only one of 'replacement' and 'action'" - raise ValueError(msg) - - if replacement: - action = f". Use {replacement} instead." - elif action: - action = f". {action.rstrip('.')}." - else: - action = "" - - warnings.warn( - f"{deprecated} {is_} deprecated and will be removed in {removed}{action}", - DeprecationWarning, - stacklevel=stacklevel, - ) diff --git a/myenv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 7d303ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imaging.pyi b/myenv/lib/python3.12/site-packages/PIL/_imaging.pyi deleted file mode 100644 index 998bc52..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imaging.pyi +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Any - -class ImagingCore: - def __getitem__(self, index: int) -> float: ... - def __getattr__(self, name: str) -> Any: ... - -class ImagingFont: - def __getattr__(self, name: str) -> Any: ... - -class ImagingDraw: - def __getattr__(self, name: str) -> Any: ... - -class PixelAccess: - def __getitem__(self, xy: tuple[int, int]) -> float | tuple[int, ...]: ... - def __setitem__( - self, xy: tuple[int, int], color: float | tuple[int, ...] - ) -> None: ... - -class ImagingDecoder: - def __getattr__(self, name: str) -> Any: ... - -class ImagingEncoder: - def __getattr__(self, name: str) -> Any: ... - -class _Outline: - def close(self) -> None: ... - def __getattr__(self, name: str) -> Any: ... - -def font(image: ImagingCore, glyphdata: bytes) -> ImagingFont: ... -def outline() -> _Outline: ... -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index a9815b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingcms.pyi b/myenv/lib/python3.12/site-packages/PIL/_imagingcms.pyi deleted file mode 100644 index ddcf93a..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imagingcms.pyi +++ /dev/null @@ -1,143 +0,0 @@ -import datetime -import sys -from typing import Literal, SupportsFloat, TypedDict - -from ._typing import CapsuleType - -littlecms_version: str | None - -_Tuple3f = tuple[float, float, float] -_Tuple2x3f = tuple[_Tuple3f, _Tuple3f] -_Tuple3x3f = tuple[_Tuple3f, _Tuple3f, _Tuple3f] - -class _IccMeasurementCondition(TypedDict): - observer: int - backing: _Tuple3f - geo: str - flare: float - illuminant_type: str - -class _IccViewingCondition(TypedDict): - illuminant: _Tuple3f - surround: _Tuple3f - illuminant_type: str - -class CmsProfile: - @property - def rendering_intent(self) -> int: ... - @property - def creation_date(self) -> datetime.datetime | None: ... - @property - def copyright(self) -> str | None: ... - @property - def target(self) -> str | None: ... - @property - def manufacturer(self) -> str | None: ... - @property - def model(self) -> str | None: ... - @property - def profile_description(self) -> str | None: ... - @property - def screening_description(self) -> str | None: ... - @property - def viewing_condition(self) -> str | None: ... - @property - def version(self) -> float: ... - @property - def icc_version(self) -> int: ... - @property - def attributes(self) -> int: ... - @property - def header_flags(self) -> int: ... - @property - def header_manufacturer(self) -> str: ... - @property - def header_model(self) -> str: ... - @property - def device_class(self) -> str: ... - @property - def connection_space(self) -> str: ... - @property - def xcolor_space(self) -> str: ... - @property - def profile_id(self) -> bytes: ... - @property - def is_matrix_shaper(self) -> bool: ... - @property - def technology(self) -> str | None: ... - @property - def colorimetric_intent(self) -> str | None: ... - @property - def perceptual_rendering_intent_gamut(self) -> str | None: ... - @property - def saturation_rendering_intent_gamut(self) -> str | None: ... - @property - def red_colorant(self) -> _Tuple2x3f | None: ... - @property - def green_colorant(self) -> _Tuple2x3f | None: ... - @property - def blue_colorant(self) -> _Tuple2x3f | None: ... - @property - def red_primary(self) -> _Tuple2x3f | None: ... - @property - def green_primary(self) -> _Tuple2x3f | None: ... - @property - def blue_primary(self) -> _Tuple2x3f | None: ... - @property - def media_white_point_temperature(self) -> float | None: ... - @property - def media_white_point(self) -> _Tuple2x3f | None: ... - @property - def media_black_point(self) -> _Tuple2x3f | None: ... - @property - def luminance(self) -> _Tuple2x3f | None: ... - @property - def chromatic_adaptation(self) -> tuple[_Tuple3x3f, _Tuple3x3f] | None: ... - @property - def chromaticity(self) -> _Tuple3x3f | None: ... - @property - def colorant_table(self) -> list[str] | None: ... - @property - def colorant_table_out(self) -> list[str] | None: ... - @property - def intent_supported(self) -> dict[int, tuple[bool, bool, bool]] | None: ... - @property - def clut(self) -> dict[int, tuple[bool, bool, bool]] | None: ... - @property - def icc_measurement_condition(self) -> _IccMeasurementCondition | None: ... - @property - def icc_viewing_condition(self) -> _IccViewingCondition | None: ... - def is_intent_supported(self, intent: int, direction: int, /) -> int: ... - -class CmsTransform: - def apply(self, id_in: CapsuleType, id_out: CapsuleType) -> int: ... - -def profile_open(profile: str, /) -> CmsProfile: ... -def profile_frombytes(profile: bytes, /) -> CmsProfile: ... -def profile_tobytes(profile: CmsProfile, /) -> bytes: ... -def buildTransform( - input_profile: CmsProfile, - output_profile: CmsProfile, - in_mode: str, - out_mode: str, - rendering_intent: int = 0, - cms_flags: int = 0, - /, -) -> CmsTransform: ... -def buildProofTransform( - input_profile: CmsProfile, - output_profile: CmsProfile, - proof_profile: CmsProfile, - in_mode: str, - out_mode: str, - rendering_intent: int = 0, - proof_intent: int = 0, - cms_flags: int = 0, - /, -) -> CmsTransform: ... -def createProfile( - color_space: Literal["LAB", "XYZ", "sRGB"], color_temp: SupportsFloat = 0.0, / -) -> CmsProfile: ... - -if sys.platform == "win32": - def get_display_profile_win32(handle: int = 0, is_dc: int = 0, /) -> str | None: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index f3b13f7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingft.pyi b/myenv/lib/python3.12/site-packages/PIL/_imagingft.pyi deleted file mode 100644 index 1cb1429..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imagingft.pyi +++ /dev/null @@ -1,69 +0,0 @@ -from typing import Any, Callable - -from . import ImageFont, _imaging - -class Font: - @property - def family(self) -> str | None: ... - @property - def style(self) -> str | None: ... - @property - def ascent(self) -> int: ... - @property - def descent(self) -> int: ... - @property - def height(self) -> int: ... - @property - def x_ppem(self) -> int: ... - @property - def y_ppem(self) -> int: ... - @property - def glyphs(self) -> int: ... - def render( - self, - string: str | bytes, - fill: Callable[[int, int], _imaging.ImagingCore], - mode: str, - dir: str | None, - features: list[str] | None, - lang: str | None, - stroke_width: float, - stroke_filled: bool, - anchor: str | None, - foreground_ink_long: int, - start: tuple[float, float], - /, - ) -> tuple[_imaging.ImagingCore, tuple[int, int]]: ... - def getsize( - self, - string: str | bytes | bytearray, - mode: str, - dir: str | None, - features: list[str] | None, - lang: str | None, - anchor: str | None, - /, - ) -> tuple[tuple[int, int], tuple[int, int]]: ... - def getlength( - self, - string: str | bytes, - mode: str, - dir: str | None, - features: list[str] | None, - lang: str | None, - /, - ) -> float: ... - def getvarnames(self) -> list[bytes]: ... - def getvaraxes(self) -> list[ImageFont.Axis]: ... - def setvarname(self, instance_index: int, /) -> None: ... - def setvaraxes(self, axes: list[float], /) -> None: ... - -def getfont( - filename: str | bytes, - size: float, - index: int, - encoding: str, - font_bytes: bytes, - layout_engine: int, -) -> Font: ... -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 6c5fa64..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingmath.pyi b/myenv/lib/python3.12/site-packages/PIL/_imagingmath.pyi deleted file mode 100644 index e27843e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imagingmath.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 7186462..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.pyi b/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.pyi deleted file mode 100644 index e27843e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imagingmorph.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 19429c8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_imagingtk.pyi b/myenv/lib/python3.12/site-packages/PIL/_imagingtk.pyi deleted file mode 100644 index e27843e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_imagingtk.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/_tkinter_finder.py b/myenv/lib/python3.12/site-packages/PIL/_tkinter_finder.py deleted file mode 100644 index 9c01430..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_tkinter_finder.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Find compiled module linking to Tcl / Tk libraries""" - -from __future__ import annotations - -import sys -import tkinter - -tk = getattr(tkinter, "_tkinter") - -try: - if hasattr(sys, "pypy_find_executable"): - TKINTER_LIB = tk.tklib_cffi.__file__ - else: - TKINTER_LIB = tk.__file__ -except AttributeError: - # _tkinter may be compiled directly into Python, in which case __file__ is - # not available. load_tkinter_funcs will check the binary first in any case. - TKINTER_LIB = None - -tk_version = str(tkinter.TkVersion) diff --git a/myenv/lib/python3.12/site-packages/PIL/_typing.py b/myenv/lib/python3.12/site-packages/PIL/_typing.py deleted file mode 100644 index 373938e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_typing.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import annotations - -import os -import sys -from collections.abc import Sequence -from typing import Any, Protocol, TypeVar, Union - -TYPE_CHECKING = False -if TYPE_CHECKING: - from numbers import _IntegralLike as IntegralLike - - try: - import numpy.typing as npt - - NumpyArray = npt.NDArray[Any] # requires numpy>=1.21 - except (ImportError, AttributeError): - pass - -if sys.version_info >= (3, 13): - from types import CapsuleType -else: - CapsuleType = object - -if sys.version_info >= (3, 12): - from collections.abc import Buffer -else: - Buffer = Any - -if sys.version_info >= (3, 10): - from typing import TypeGuard -else: - try: - from typing_extensions import TypeGuard - except ImportError: - - class TypeGuard: # type: ignore[no-redef] - def __class_getitem__(cls, item: Any) -> type[bool]: - return bool - - -Coords = Union[Sequence[float], Sequence[Sequence[float]]] - - -_T_co = TypeVar("_T_co", covariant=True) - - -class SupportsRead(Protocol[_T_co]): - def read(self, length: int = ..., /) -> _T_co: ... - - -StrOrBytesPath = Union[str, bytes, os.PathLike[str], os.PathLike[bytes]] - - -__all__ = ["Buffer", "IntegralLike", "StrOrBytesPath", "SupportsRead", "TypeGuard"] diff --git a/myenv/lib/python3.12/site-packages/PIL/_util.py b/myenv/lib/python3.12/site-packages/PIL/_util.py deleted file mode 100644 index 8ef0d36..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_util.py +++ /dev/null @@ -1,26 +0,0 @@ -from __future__ import annotations - -import os -from typing import Any, NoReturn - -from ._typing import StrOrBytesPath, TypeGuard - - -def is_path(f: Any) -> TypeGuard[StrOrBytesPath]: - return isinstance(f, (bytes, str, os.PathLike)) - - -class DeferredError: - def __init__(self, ex: BaseException): - self.ex = ex - - def __getattr__(self, elt: str) -> NoReturn: - raise self.ex - - @staticmethod - def new(ex: BaseException) -> Any: - """ - Creates an object that raises the wrapped exception ``ex`` when used, - and casts it to :py:obj:`~typing.Any` type. - """ - return DeferredError(ex) diff --git a/myenv/lib/python3.12/site-packages/PIL/_version.py b/myenv/lib/python3.12/site-packages/PIL/_version.py deleted file mode 100644 index 74e6335..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# Master version for Pillow -from __future__ import annotations - -__version__ = "11.3.0" diff --git a/myenv/lib/python3.12/site-packages/PIL/_webp.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PIL/_webp.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 2b39d49..0000000 Binary files a/myenv/lib/python3.12/site-packages/PIL/_webp.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PIL/_webp.pyi b/myenv/lib/python3.12/site-packages/PIL/_webp.pyi deleted file mode 100644 index e27843e..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/_webp.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -def __getattr__(name: str) -> Any: ... diff --git a/myenv/lib/python3.12/site-packages/PIL/features.py b/myenv/lib/python3.12/site-packages/PIL/features.py deleted file mode 100644 index 573f1d4..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/features.py +++ /dev/null @@ -1,361 +0,0 @@ -from __future__ import annotations - -import collections -import os -import sys -import warnings -from typing import IO - -import PIL - -from . import Image -from ._deprecate import deprecate - -modules = { - "pil": ("PIL._imaging", "PILLOW_VERSION"), - "tkinter": ("PIL._tkinter_finder", "tk_version"), - "freetype2": ("PIL._imagingft", "freetype2_version"), - "littlecms2": ("PIL._imagingcms", "littlecms_version"), - "webp": ("PIL._webp", "webpdecoder_version"), - "avif": ("PIL._avif", "libavif_version"), -} - - -def check_module(feature: str) -> bool: - """ - Checks if a module is available. - - :param feature: The module to check for. - :returns: ``True`` if available, ``False`` otherwise. - :raises ValueError: If the module is not defined in this version of Pillow. - """ - if feature not in modules: - msg = f"Unknown module {feature}" - raise ValueError(msg) - - module, ver = modules[feature] - - try: - __import__(module) - return True - except ModuleNotFoundError: - return False - except ImportError as ex: - warnings.warn(str(ex)) - return False - - -def version_module(feature: str) -> str | None: - """ - :param feature: The module to check for. - :returns: - The loaded version number as a string, or ``None`` if unknown or not available. - :raises ValueError: If the module is not defined in this version of Pillow. - """ - if not check_module(feature): - return None - - module, ver = modules[feature] - - return getattr(__import__(module, fromlist=[ver]), ver) - - -def get_supported_modules() -> list[str]: - """ - :returns: A list of all supported modules. - """ - return [f for f in modules if check_module(f)] - - -codecs = { - "jpg": ("jpeg", "jpeglib"), - "jpg_2000": ("jpeg2k", "jp2klib"), - "zlib": ("zip", "zlib"), - "libtiff": ("libtiff", "libtiff"), -} - - -def check_codec(feature: str) -> bool: - """ - Checks if a codec is available. - - :param feature: The codec to check for. - :returns: ``True`` if available, ``False`` otherwise. - :raises ValueError: If the codec is not defined in this version of Pillow. - """ - if feature not in codecs: - msg = f"Unknown codec {feature}" - raise ValueError(msg) - - codec, lib = codecs[feature] - - return f"{codec}_encoder" in dir(Image.core) - - -def version_codec(feature: str) -> str | None: - """ - :param feature: The codec to check for. - :returns: - The version number as a string, or ``None`` if not available. - Checked at compile time for ``jpg``, run-time otherwise. - :raises ValueError: If the codec is not defined in this version of Pillow. - """ - if not check_codec(feature): - return None - - codec, lib = codecs[feature] - - version = getattr(Image.core, f"{lib}_version") - - if feature == "libtiff": - return version.split("\n")[0].split("Version ")[1] - - return version - - -def get_supported_codecs() -> list[str]: - """ - :returns: A list of all supported codecs. - """ - return [f for f in codecs if check_codec(f)] - - -features: dict[str, tuple[str, str | bool, str | None]] = { - "webp_anim": ("PIL._webp", True, None), - "webp_mux": ("PIL._webp", True, None), - "transp_webp": ("PIL._webp", True, None), - "raqm": ("PIL._imagingft", "HAVE_RAQM", "raqm_version"), - "fribidi": ("PIL._imagingft", "HAVE_FRIBIDI", "fribidi_version"), - "harfbuzz": ("PIL._imagingft", "HAVE_HARFBUZZ", "harfbuzz_version"), - "libjpeg_turbo": ("PIL._imaging", "HAVE_LIBJPEGTURBO", "libjpeg_turbo_version"), - "mozjpeg": ("PIL._imaging", "HAVE_MOZJPEG", "libjpeg_turbo_version"), - "zlib_ng": ("PIL._imaging", "HAVE_ZLIBNG", "zlib_ng_version"), - "libimagequant": ("PIL._imaging", "HAVE_LIBIMAGEQUANT", "imagequant_version"), - "xcb": ("PIL._imaging", "HAVE_XCB", None), -} - - -def check_feature(feature: str) -> bool | None: - """ - Checks if a feature is available. - - :param feature: The feature to check for. - :returns: ``True`` if available, ``False`` if unavailable, ``None`` if unknown. - :raises ValueError: If the feature is not defined in this version of Pillow. - """ - if feature not in features: - msg = f"Unknown feature {feature}" - raise ValueError(msg) - - module, flag, ver = features[feature] - - if isinstance(flag, bool): - deprecate(f'check_feature("{feature}")', 12) - try: - imported_module = __import__(module, fromlist=["PIL"]) - if isinstance(flag, bool): - return flag - return getattr(imported_module, flag) - except ModuleNotFoundError: - return None - except ImportError as ex: - warnings.warn(str(ex)) - return None - - -def version_feature(feature: str) -> str | None: - """ - :param feature: The feature to check for. - :returns: The version number as a string, or ``None`` if not available. - :raises ValueError: If the feature is not defined in this version of Pillow. - """ - if not check_feature(feature): - return None - - module, flag, ver = features[feature] - - if ver is None: - return None - - return getattr(__import__(module, fromlist=[ver]), ver) - - -def get_supported_features() -> list[str]: - """ - :returns: A list of all supported features. - """ - supported_features = [] - for f, (module, flag, _) in features.items(): - if flag is True: - for feature, (feature_module, _) in modules.items(): - if feature_module == module: - if check_module(feature): - supported_features.append(f) - break - elif check_feature(f): - supported_features.append(f) - return supported_features - - -def check(feature: str) -> bool | None: - """ - :param feature: A module, codec, or feature name. - :returns: - ``True`` if the module, codec, or feature is available, - ``False`` or ``None`` otherwise. - """ - - if feature in modules: - return check_module(feature) - if feature in codecs: - return check_codec(feature) - if feature in features: - return check_feature(feature) - warnings.warn(f"Unknown feature '{feature}'.", stacklevel=2) - return False - - -def version(feature: str) -> str | None: - """ - :param feature: - The module, codec, or feature to check for. - :returns: - The version number as a string, or ``None`` if unknown or not available. - """ - if feature in modules: - return version_module(feature) - if feature in codecs: - return version_codec(feature) - if feature in features: - return version_feature(feature) - return None - - -def get_supported() -> list[str]: - """ - :returns: A list of all supported modules, features, and codecs. - """ - - ret = get_supported_modules() - ret.extend(get_supported_features()) - ret.extend(get_supported_codecs()) - return ret - - -def pilinfo(out: IO[str] | None = None, supported_formats: bool = True) -> None: - """ - Prints information about this installation of Pillow. - This function can be called with ``python3 -m PIL``. - It can also be called with ``python3 -m PIL.report`` or ``python3 -m PIL --report`` - to have "supported_formats" set to ``False``, omitting the list of all supported - image file formats. - - :param out: - The output stream to print to. Defaults to ``sys.stdout`` if ``None``. - :param supported_formats: - If ``True``, a list of all supported image file formats will be printed. - """ - - if out is None: - out = sys.stdout - - Image.init() - - print("-" * 68, file=out) - print(f"Pillow {PIL.__version__}", file=out) - py_version_lines = sys.version.splitlines() - print(f"Python {py_version_lines[0].strip()}", file=out) - for py_version in py_version_lines[1:]: - print(f" {py_version.strip()}", file=out) - print("-" * 68, file=out) - print(f"Python executable is {sys.executable or 'unknown'}", file=out) - if sys.prefix != sys.base_prefix: - print(f"Environment Python files loaded from {sys.prefix}", file=out) - print(f"System Python files loaded from {sys.base_prefix}", file=out) - print("-" * 68, file=out) - print( - f"Python Pillow modules loaded from {os.path.dirname(Image.__file__)}", - file=out, - ) - print( - f"Binary Pillow modules loaded from {os.path.dirname(Image.core.__file__)}", - file=out, - ) - print("-" * 68, file=out) - - for name, feature in [ - ("pil", "PIL CORE"), - ("tkinter", "TKINTER"), - ("freetype2", "FREETYPE2"), - ("littlecms2", "LITTLECMS2"), - ("webp", "WEBP"), - ("avif", "AVIF"), - ("jpg", "JPEG"), - ("jpg_2000", "OPENJPEG (JPEG2000)"), - ("zlib", "ZLIB (PNG/ZIP)"), - ("libtiff", "LIBTIFF"), - ("raqm", "RAQM (Bidirectional Text)"), - ("libimagequant", "LIBIMAGEQUANT (Quantization method)"), - ("xcb", "XCB (X protocol)"), - ]: - if check(name): - v: str | None = None - if name == "jpg": - libjpeg_turbo_version = version_feature("libjpeg_turbo") - if libjpeg_turbo_version is not None: - v = "mozjpeg" if check_feature("mozjpeg") else "libjpeg-turbo" - v += " " + libjpeg_turbo_version - if v is None: - v = version(name) - if v is not None: - version_static = name in ("pil", "jpg") - if name == "littlecms2": - # this check is also in src/_imagingcms.c:setup_module() - version_static = tuple(int(x) for x in v.split(".")) < (2, 7) - t = "compiled for" if version_static else "loaded" - if name == "zlib": - zlib_ng_version = version_feature("zlib_ng") - if zlib_ng_version is not None: - v += ", compiled for zlib-ng " + zlib_ng_version - elif name == "raqm": - for f in ("fribidi", "harfbuzz"): - v2 = version_feature(f) - if v2 is not None: - v += f", {f} {v2}" - print("---", feature, "support ok,", t, v, file=out) - else: - print("---", feature, "support ok", file=out) - else: - print("***", feature, "support not installed", file=out) - print("-" * 68, file=out) - - if supported_formats: - extensions = collections.defaultdict(list) - for ext, i in Image.EXTENSION.items(): - extensions[i].append(ext) - - for i in sorted(Image.ID): - line = f"{i}" - if i in Image.MIME: - line = f"{line} {Image.MIME[i]}" - print(line, file=out) - - if i in extensions: - print( - "Extensions: {}".format(", ".join(sorted(extensions[i]))), file=out - ) - - features = [] - if i in Image.OPEN: - features.append("open") - if i in Image.SAVE: - features.append("save") - if i in Image.SAVE_ALL: - features.append("save_all") - if i in Image.DECODERS: - features.append("decode") - if i in Image.ENCODERS: - features.append("encode") - - print("Features: {}".format(", ".join(features)), file=out) - print("-" * 68, file=out) diff --git a/myenv/lib/python3.12/site-packages/PIL/py.typed b/myenv/lib/python3.12/site-packages/PIL/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/PIL/report.py b/myenv/lib/python3.12/site-packages/PIL/report.py deleted file mode 100644 index d2815e8..0000000 --- a/myenv/lib/python3.12/site-packages/PIL/report.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import annotations - -from .features import pilinfo - -pilinfo(supported_formats=False) diff --git a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/METADATA b/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/METADATA deleted file mode 100644 index e42af28..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/METADATA +++ /dev/null @@ -1,60 +0,0 @@ -Metadata-Version: 2.1 -Name: PyQt6 -Version: 6.7.1 -Requires-Python: >=3.8 -Summary: Python bindings for the Qt cross platform application toolkit -Description-Content-Type: text/markdown -Project-Url: homepage, https://www.riverbankcomputing.com/software/pyqt/ -Requires-Dist: PyQt6-sip (>=13.8, <14) -Requires-Dist: PyQt6-Qt6 (>=6.7.0, <6.8.0) -License: GPL v3 -Author-Email: Riverbank Computing Limited - -# PyQt6 - Comprehensive Python Bindings for Qt v6 - -Qt is set of cross-platform C++ libraries that implement high-level APIs for -accessing many aspects of modern desktop and mobile systems. These include -location and positioning services, multimedia, NFC and Bluetooth connectivity, -a Chromium based web browser, as well as traditional UI development. - -PyQt6 is a comprehensive set of Python bindings for Qt v6. It is implemented -as more than 35 extension modules and enables Python to be used as an -alternative application development language to C++ on all supported platforms -including iOS and Android. - -PyQt6 may also be embedded in C++ based applications to allow users of those -applications to configure or enhance the functionality of those applications. - - -## Author - -PyQt6 is copyright (c) Riverbank Computing Limited. Its homepage is -https://www.riverbankcomputing.com/software/pyqt/. - -Support may be obtained from the PyQt mailing list at -https://www.riverbankcomputing.com/mailman/listinfo/pyqt/. - - -## License - -PyQt6 is released under the GPL v3 license and under a commercial license that -allows for the development of proprietary applications. - - -## Documentation - -The documentation for the latest release can be found -[here](https://www.riverbankcomputing.com/static/Docs/PyQt6/). - - -## Installation - -The GPL version of PyQt6 can be installed from PyPI: - - pip install PyQt6 - -`pip` will also build and install the bindings from the sdist package but Qt's -`qmake` tool must be on `PATH`. - -The `sip-install` tool will also install the bindings from the sdist package -but will allow you to configure many aspects of the installation. diff --git a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/RECORD b/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/RECORD deleted file mode 100644 index a56a938..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/RECORD +++ /dev/null @@ -1,898 +0,0 @@ -../../../bin/pylupdate6,sha256=u81cyRoSHPGwTzgV3bTJPL7RLZY0hMf1RIcEn0sn8lg,264 -../../../bin/pyuic6,sha256=oJ35z_cCjaxBwBY9Hu_PpMGLO05c711CRJVbSu0TVrU,256 -PyQt6-6.7.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -PyQt6-6.7.1.dist-info/METADATA,sha256=6htoY96VRtkJ3_hf0qDERJSLkcRLRKKo7BV5nWiDxSc,2074 -PyQt6-6.7.1.dist-info/RECORD,, -PyQt6-6.7.1.dist-info/WHEEL,sha256=0nF-zzJ-ksT1kjD9lfQeaWU-VFtdk29l8Bv6sbnObLg,107 -PyQt6-6.7.1.dist-info/entry_points.txt,sha256=rtFhgkXOM5h-CG9xdw1cI1a6jpaUBRUdv58apq3ECsI,86 -PyQt6/Qt6/qsci/api/python/PyQt6.api,sha256=baNO6Se973IVCtthRLOcgGatXbpJi1Iro6DugaUVeqU,1669771 -PyQt6/QtBluetooth.abi3.so,sha256=fzlfzrHlrDlWljlHIYcvGC8zJPsfKOnaCR2OnZAvjdw,637968 -PyQt6/QtBluetooth.pyi,sha256=S9MTZ9NKnwoqabte--1T19BjIRukJaAIT9hNvYa0NiY,69272 -PyQt6/QtCore.abi3.so,sha256=uscgvod0ylZSWVv1dhbiD1e9-iKhER2tXOz2jPLV4eo,4509800 -PyQt6/QtCore.pyi,sha256=9XXnr57_JHANQgsX4ZLUxF4MFirs4v-uVs4N94DtdOo,426303 -PyQt6/QtDBus.abi3.so,sha256=1mw73CbopQ3jpNsy378E6NySGK6C0pjIZDxYP6j-aYE,314464 -PyQt6/QtDBus.pyi,sha256=G_03aStyxZGndI1RWQfUJpsdqWcN7xfBf1RXe-a7CHk,23260 -PyQt6/QtDesigner.abi3.so,sha256=RcdKk7YJPKJP71TiHv_OMGdoUqc2RQq1WzuhTHzUNfs,505520 -PyQt6/QtDesigner.pyi,sha256=6jeE5ypH1uqtUOqO0sM_TqbZmZ25vPm_7QUNl3vJ6AM,22633 -PyQt6/QtGui.abi3.so,sha256=TCBUK4fdPATsPgU8m3nRcHZgj0Q1MeM3GNeOREqyBu8,4201856 -PyQt6/QtGui.pyi,sha256=OMNoDv4fSe_97B_qa90DWwuYNltcPAxTssGQKvGxZUA,397032 -PyQt6/QtHelp.abi3.so,sha256=QLBq2d565IdjqjLuFX1SVz4NiyOY3_0obs5oQKDidDk,297088 -PyQt6/QtHelp.pyi,sha256=hsI2NBDRNPh77sGApwIEs7MxAJVSBgEUTzONMv5MXwc,12311 -PyQt6/QtMultimedia.abi3.so,sha256=4j_h7vh7BI7nQvdjMwjc0HLU89KzTblw3QoboKNE70Y,767112 -PyQt6/QtMultimedia.pyi,sha256=WF7CtDeTULldNj5WJCXboG7Un8fcnlGtUUW1quXKDwo,60862 -PyQt6/QtMultimediaWidgets.abi3.so,sha256=KDFUAGD0MxwVJcHiqW8heurusKRlvw7PjTot9rVdNoM,129312 -PyQt6/QtMultimediaWidgets.pyi,sha256=Fbi4yGqQG8S5zfo-dsRYj0F8IgAzWi4HJYU4cp9ACLQ,3466 -PyQt6/QtNetwork.abi3.so,sha256=vj4go1VmWR2a1umNTWGJF7MPSiiroD7eaRfDlrYz9zA,1371672 -PyQt6/QtNetwork.pyi,sha256=QTYB8lByjm9CZt3_xqc3I1Uq-DwbjD3ZdtMMfT-3lD4,118441 -PyQt6/QtNfc.abi3.so,sha256=1lSe4Z42vGUtia9Q3iHXZrLqta0KtJG-EvTzabOcuX4,196744 -PyQt6/QtNfc.pyi,sha256=S_xl4vAucLT29Oq5qIrhqD_IF0F1pNKlT_C7OVfksrc,13504 -PyQt6/QtOpenGL.abi3.so,sha256=MtRVytzrTQJR2SI9W-Iua6r4wfi_si7ErNwwMYhtcJk,1815536 -PyQt6/QtOpenGL.pyi,sha256=gX_dNPb1gLQkbBcrMBcKtRWDRQRzcjAt6uS5NcyfxqY,168177 -PyQt6/QtOpenGLWidgets.abi3.so,sha256=Uo31mvYrx_dPVh3Aq_gAUuzXPbZNDxyl1KUmpavP3WU,102712 -PyQt6/QtOpenGLWidgets.pyi,sha256=mr4ZNL6Yx9bOjk1s60CyXU_KCntmWWn7-OVfxqOy0rI,3639 -PyQt6/QtPdf.abi3.so,sha256=BB8U226bPLHqIcP7zoZsKcfNNKDAbzSQyRdfiZwBXV0,254488 -PyQt6/QtPdf.pyi,sha256=jEk_nUBuF2Juy8Vv9OSzTql9d1UrIn3fhQvGrXLzfyA,12223 -PyQt6/QtPdfWidgets.abi3.so,sha256=pV5ah4ZbmhbQLhJa6nTJwRswNOQgQyI3GCHjJh6LQK4,127208 -PyQt6/QtPdfWidgets.pyi,sha256=Etic7HfqBXSriIZUHwwrsW6WWAxQ7FrDxGEpAX_k_mk,4375 -PyQt6/QtPositioning.abi3.so,sha256=NU21B0bJ5phTUREMR7OfsqbFtv-stIfn3UKcskhPu2c,394896 -PyQt6/QtPositioning.pyi,sha256=YR38Koome__-wkySo0psazC-mPPkKbee3xnwV4lzzN8,27384 -PyQt6/QtPrintSupport.abi3.so,sha256=ah3wphAKbN7id-_NbAYLoOJrmJ-v8rMYMp22Zz3pbKI,352408 -PyQt6/QtPrintSupport.pyi,sha256=ys-QXfnAODxq3j7KfdkORX6w0lsD25qZ57YmziXWORQ,17606 -PyQt6/QtQml.abi3.so,sha256=a7wTsmb4eQzkehSdW-pi58Zm650RfQAsoN7KdVZT9Aw,2052280 -PyQt6/QtQml.pyi,sha256=6hwN7gr9cNMy-IWpnuu1v4tP3UyzkVqE8Njxk6eLVyI,42584 -PyQt6/QtQuick.abi3.so,sha256=_t57EujjdnJfOIY5c5XEUEmJON2psOzgiJv8z2_yz7U,2397848 -PyQt6/QtQuick.pyi,sha256=2Nw5q8_pNhSsvcO934ypkhcv1uwlL1h16zPpjHdndUY,69412 -PyQt6/QtQuick3D.abi3.so,sha256=W79vQ4Bc8rRd8zakycPfiSayJh95-pw5Cggnk8rYGuo,114616 -PyQt6/QtQuick3D.pyi,sha256=DKPm38H7wcei-Q1o1hGSHdq970cwDYIh-yzR9M5Eel8,10538 -PyQt6/QtQuickWidgets.abi3.so,sha256=01mWYOyBrYnBDuKB7900Tc77DsGuwiznEopsEhLhi1I,108520 -PyQt6/QtQuickWidgets.pyi,sha256=9ldPW9SfiHG0aaheGiWqRjiK5JCDHEAq5lKdW_t3cmE,4845 -PyQt6/QtRemoteObjects.abi3.so,sha256=Goz-o01p-y2toHM7FQNI9ZuYxLZ-Pq2Jaa_pw_uboK4,188424 -PyQt6/QtRemoteObjects.pyi,sha256=sxAsOhFK2djIkUcyIJhYsqe67KAPKaa7Hb5Nm5YLUwU,9758 -PyQt6/QtSensors.abi3.so,sha256=spxFkjcQygGjX3JvIkq7kodxSGt2ELV0Px8D0m-TFaU,408608 -PyQt6/QtSensors.pyi,sha256=Ox7vhCW9zzMsgCnSYXwZvTZWtHV9rn3xwezWMWI0bIM,19764 -PyQt6/QtSerialPort.abi3.so,sha256=XXnr7e_GI7V5cQThkhxpunyXtPPfIwGfObNZGapb9zs,136440 -PyQt6/QtSerialPort.pyi,sha256=krXWQ4Z6bDkBalbgxdcERHv4pO0GtMRFrESEx34Qwcc,8199 -PyQt6/QtSpatialAudio.abi3.so,sha256=A80Hxwbe1hHbfPrSLixcU0keGEhMvVLQ-dsNSnIGQqg,153736 -PyQt6/QtSpatialAudio.pyi,sha256=CKc1JTQLs1W8X52laqNXzOynNrlgNlh319F6ZAB5n44,10462 -PyQt6/QtSql.abi3.so,sha256=NLh3UnFduB4SUZsBct0YCJt68ysFlkj8amqDUL6hZBI,533592 -PyQt6/QtSql.pyi,sha256=cEAvJkjSmQaXHiAh_NHiKELK8wrLROSEO2105Z1yxsU,30083 -PyQt6/QtSvg.abi3.so,sha256=odOgNVkDJkQPAINgUeCb1OFcw8xVXgfx8qMLfB5aa4A,86864 -PyQt6/QtSvg.pyi,sha256=R-9r6AZ72NlGOwkvpvnQLH7RfPFcr1R3DKvfXxJn9jk,5413 -PyQt6/QtSvgWidgets.abi3.so,sha256=IXqccUbFlz2ho5ZioDXZvK_w4Bg_Y7mBWEcXNr9KnJk,127480 -PyQt6/QtSvgWidgets.pyi,sha256=OBrGiNAybHaimKL68um5Wev4Kh60H9encES6nk0-UHQ,3045 -PyQt6/QtTest.abi3.so,sha256=Tpyr7bLxFLnZaOHO8-1PznJYXVzqdFhqdulfKr0wG64,127648 -PyQt6/QtTest.pyi,sha256=XzDzY3uR01RaEQomTs8IZ1xDa77HTNjMK907nvkvSZc,9857 -PyQt6/QtTextToSpeech.abi3.so,sha256=J53yr_-Fy0DMd9LBExl9iUNmao5EERIuqwlH6Au7pzg,100768 -PyQt6/QtTextToSpeech.pyi,sha256=nUtY8mE2ALrWJq0kdM0TQVoa3ERSW1Q84sZXwxgtuiE,5868 -PyQt6/QtWebChannel.abi3.so,sha256=RGkm-su1wTxnrcnoF2Rc17jH8jHhWmivO0rMPqNDUEw,65264 -PyQt6/QtWebChannel.pyi,sha256=x9n2FGokxF-CRQZNKrsWlEEuOD5bKrTMtro4PZpTAOY,2641 -PyQt6/QtWebSockets.abi3.so,sha256=goPzxocB--gejPGKzj02Tl3pFTuVW6CFe_-T0wsPdUU,156400 -PyQt6/QtWebSockets.pyi,sha256=YUAVrkbGkRKDc_MYnH9ScYJu5zfklfsT83OGaAw9muM,11311 -PyQt6/QtWidgets.abi3.so,sha256=BvVw5AabaIVwbqMFEuwW5XD3ySzsZQFtj_hBf5aI0Cs,7578528 -PyQt6/QtWidgets.pyi,sha256=sKshmrfzH184FUBIejToODgJN7Hc27uxoYMIlWp3hS8,493680 -PyQt6/QtXml.abi3.so,sha256=pEwcq4NUQb7d3ORyoihst7a1h0PhMV33EdKe8orE25M,232088 -PyQt6/QtXml.pyi,sha256=G5F6QxM0zLovVN20ZO5W1xIhH-4NSD4Yr3HtuwU2p6M,18558 -PyQt6/__init__.py,sha256=DB1Zkq6rJeRU9CwtxLoQ3z23HW433KNVxj2jyaXcwAU,960 -PyQt6/__pycache__/__init__.cpython-312.pyc,, -PyQt6/bindings/QtBluetooth/QtBluetooth.toml,sha256=ZWJdolmw6EbeT1orpKmg1NKzpqxkvHaFZLpxRJrAvjI,177 -PyQt6/bindings/QtBluetooth/QtBluetoothmod.sip,sha256=eDjP03fJiy8W1j8o3Z5h0ikQWcT29Vqy4RqbULVlcrY,2777 -PyQt6/bindings/QtBluetooth/qbluetooth.sip,sha256=XsQQiqIeSBhOVr4tQk3dposd_8uCm3daL9hhM_JOLS0,1559 -PyQt6/bindings/QtBluetooth/qbluetoothaddress.sip,sha256=peRKrtuWwap9RvtRfB0dfWLBNAmO6WkRb34MlB5bg1o,1778 -PyQt6/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip,sha256=Q-VGT47r5-Q9yrUE7cz6RKxzkrKl7UP9wyUi4wldIWg,2677 -PyQt6/bindings/QtBluetooth/qbluetoothdeviceinfo.sip,sha256=bp4FpQvMxto-_HAY7JVgl5YfZ6tZJAEoy-RiCNdSw_A,6598 -PyQt6/bindings/QtBluetooth/qbluetoothhostinfo.sip,sha256=gbpUqIii6ehMYD0MPVHIPCN5RtwdCVu2Fsg659I3DxM,1541 -PyQt6/bindings/QtBluetooth/qbluetoothlocaldevice.sip,sha256=bpHZgYFMbAIB3buiJE9R4f01cwlIYFyrIWFJKAF8VMM,2577 -PyQt6/bindings/QtBluetooth/qbluetoothserver.sip,sha256=uDlvJUG1kNS-AVdjWnR10RWVw5haaLgNc6HLC3u-lkk,3367 -PyQt6/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip,sha256=aYxM0bCwWdUtudD_vhHZzIYHnc3_MMxrqiMo6Xdpdow,2474 -PyQt6/bindings/QtBluetooth/qbluetoothserviceinfo.sip,sha256=VO8UIcTzXu1vhKYgSCVphVeLW03cXKx39E2HRyS1bOU,3324 -PyQt6/bindings/QtBluetooth/qbluetoothsocket.sip,sha256=K_z5b0cNaL6XmmWvqmiG2imgLZosZveef8-C0SKW0O0,5141 -PyQt6/bindings/QtBluetooth/qbluetoothuuid.sip,sha256=gQD2FST_jTBY7_D0LDBOEwJYC4UR0G_9vzWcyFnnJmU,9741 -PyQt6/bindings/QtBluetooth/qlowenergyadvertisingdata.sip,sha256=epWf-dxzMFsUCirZhWtECzz2HkCG0lFeyGMTCFhl-XU,2334 -PyQt6/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip,sha256=B4xRMdnn22SixC3K8WJa0NCk5qJvwt0k4CV0I6QNgDw,3006 -PyQt6/bindings/QtBluetooth/qlowenergycharacteristic.sip,sha256=SgrhPRJWBMkVgzJBsOEBjmnM-i20YXxm1sRbP7XzyTg,2262 -PyQt6/bindings/QtBluetooth/qlowenergycharacteristicdata.sip,sha256=SHyv3tM5wfKSfkAdR3cMfH1_aRHfqEAwMAy9HCl3Pb8,2472 -PyQt6/bindings/QtBluetooth/qlowenergyconnectionparameters.sip,sha256=TgDXbJtfQq2qhFOWHtm2kZRKxxgp5mH8NckO4q7i5A8,1843 -PyQt6/bindings/QtBluetooth/qlowenergycontroller.sip,sha256=EfhGjvBkK2V3lFpXSYN1T8LNhSJCkui9gtewMZsm2FI,4362 -PyQt6/bindings/QtBluetooth/qlowenergydescriptor.sip,sha256=oGJYUK7uh4OEEeYf0ju4rSUIatANMoGm21rj-zJpHFI,1568 -PyQt6/bindings/QtBluetooth/qlowenergydescriptordata.sip,sha256=FEgdz_kEX2-Bc50TMrd0qlLQt3dTthVI2P0N4uNON_0,2201 -PyQt6/bindings/QtBluetooth/qlowenergyservice.sip,sha256=q2GzYb-hVXBaGL6Mve0YpO8XixzoeyrbHfh0aakjkD4,3668 -PyQt6/bindings/QtBluetooth/qlowenergyservicedata.sip,sha256=nI-mduMgXnBZnkDnKvSLXXRFx9JDdLDwQAuOoKTy18E,2201 -PyQt6/bindings/QtBluetooth/qpybluetooth_qlist.sip,sha256=Dbc4_lloTiMnnLAceDk9u-IGp3eKq9LuArAMRBTP2Xc,3358 -PyQt6/bindings/QtBluetooth/qpybluetooth_qmultihash.sip,sha256=5ltscqZWXxd5Xu0kFfnA62-AnwPIMc9LEV9j-K6HeQA,4039 -PyQt6/bindings/QtBluetooth/qpybluetooth_quint128.sip,sha256=Dg1jQ2gdNzNH4SdKNI0rg_ppw9LfrlQmKlYEIiKzLZw,3232 -PyQt6/bindings/QtCore/QtCore.toml,sha256=oQsSGfuBAYAGewjo3YEt-FI3POr5oyEYhyWw-PrdFiw,172 -PyQt6/bindings/QtCore/QtCoremod.sip,sha256=LpN-FkEBHLgvavxev1WQEZA7jhPoC-Pf3isUtYWOdPM,6474 -PyQt6/bindings/QtCore/pyqt-gpl.sip5,sha256=kw6SOWz5U1xPTVlXnWwF_WwI5FYNXwbRfADm07LMDWU,21 -PyQt6/bindings/QtCore/qabstractanimation.sip,sha256=nAVUWbG0OoWntGJLHblcbDYhaRP-UV8PPXMJQGicSkw,2564 -PyQt6/bindings/QtCore/qabstracteventdispatcher.sip,sha256=Jpu_rtXgh6i-I7Ti3zGgnrO1RQBmh00OepUsaOkDL48,2456 -PyQt6/bindings/QtCore/qabstractitemmodel.sip,sha256=tGVwozgqFQp6tD57BFsgJu-lVZQHBewl3qTUflIYKlk,15163 -PyQt6/bindings/QtCore/qabstractnativeeventfilter.sip,sha256=aZSQvJBRMf8LHvbsuYrFKboROQUG-ySgQ6X0KwWb-NI,1335 -PyQt6/bindings/QtCore/qabstractproxymodel.sip,sha256=1rVJFI289zGAq71srLTzUIg_FO_N1Iy1cuCpE3AKvnM,3500 -PyQt6/bindings/QtCore/qanimationgroup.sip,sha256=RsgSQTS-gf2slYTO4ef6gP-FHsebqZbxnbzT7cMHHs0,1656 -PyQt6/bindings/QtCore/qanystringview.sip,sha256=ef3v5bz7HhMPBkJRfIq2iJzq_lB3Z9QV1IBaHK0iB6A,2718 -PyQt6/bindings/QtCore/qbasictimer.sip,sha256=Ih-hjMQ__KAvS86snH66zLjJICRNXc5nVpKXuk03laA,1338 -PyQt6/bindings/QtCore/qbitarray.sip,sha256=J5j1pDPie2ao8yEaqd-VEDw68t4oBu8Vu5y3JVLamCY,3028 -PyQt6/bindings/QtCore/qbuffer.sip,sha256=qFpcmb_CSiFzF2uk_rvUBn0XQvzTk9t_5psp2NswwcE,3750 -PyQt6/bindings/QtCore/qbytearray.sip,sha256=gz_1FEqWUqfAs9ofHTkQ0oVDIW0j-VIqp0YP27bnthM,14682 -PyQt6/bindings/QtCore/qbytearrayalgorithms.sip,sha256=H7jOEWy-pQjimA8c5043J6A7yQ7pv08ekQrht8SEH3Y,1144 -PyQt6/bindings/QtCore/qbytearraylist.sip,sha256=5qhMcmZ4bgT9bpK-9ooHc0OK9Qe8cgnGR_4gWqGrCk4,2976 -PyQt6/bindings/QtCore/qbytearraymatcher.sip,sha256=JiKhBTw1hZJp7ou76qlfTHgRnsO4HsQVixhyRjxBHeQ,1906 -PyQt6/bindings/QtCore/qbytearrayview.sip,sha256=hmpJ1XMvFf8UhpUeTm9_ABRzwFieJeMj0-nkqNONmRI,2399 -PyQt6/bindings/QtCore/qcalendar.sip,sha256=DVcM1ZB1xVGwrpOHq3sWZY3RIU9ws9Fm-WUOPtaDGyI,3444 -PyQt6/bindings/QtCore/qcborcommon.sip,sha256=dLXlSoGj7PnhzxMZmrza9GW4nhcPi5W7N-R2dTcDleQ,2452 -PyQt6/bindings/QtCore/qcborstreamreader.sip,sha256=TWv8PwLUrf_p8IJQlgjhlmgCxoeTlBI3lr4TbRDVHPk,4853 -PyQt6/bindings/QtCore/qcborstreamwriter.sip,sha256=5MuQeAepOnlDKOV9cy-o7QLpTuhg1RROCTKbGWeXs4U,2475 -PyQt6/bindings/QtCore/qchar.sip,sha256=-pyb-3qCXCkpvh2BaitnF3kVC_ec1I62Yhi2JWkeciY,1591 -PyQt6/bindings/QtCore/qcollator.sip,sha256=YDv8Ed1NarS3pOdch58GPepX1gD1GWPkwvWx7lVQ9MI,2161 -PyQt6/bindings/QtCore/qcommandlineoption.sip,sha256=0McM_xLRHrU4Aw7vYVuP2cPF4EdpcHpdtJAMlNwKyKk,2203 -PyQt6/bindings/QtCore/qcommandlineparser.sip,sha256=UlsqNVKvyC1Bympe7ZmvUo4E1QkSvHr-iPD5jgOlWTw,2825 -PyQt6/bindings/QtCore/qconcatenatetablesproxymodel.sip,sha256=DWUxCnRV2TsWpVDQ8UZr6kyO0Hsdj5SrHZVGGK5wcxU,4093 -PyQt6/bindings/QtCore/qcoreapplication.sip,sha256=XanDIQCa9JSH357yVJ1W2o0Ui-oF8gLmnpm4AvtqEds,12283 -PyQt6/bindings/QtCore/qcoreevent.sip,sha256=C3snXUYfbOsKjLKBrs2iYhI90cacRujyjgZat0gDN_8,7363 -PyQt6/bindings/QtCore/qcryptographichash.sip,sha256=KwFaY66yLpwLbOjf1UhAs-qEa0OLfZqS-3fFPRiQb00,2546 -PyQt6/bindings/QtCore/qdatastream.sip,sha256=w1ftpf3k31BEZnOygmHMub1dRLtZlLZeO9psl2C72lc,13589 -PyQt6/bindings/QtCore/qdatetime.sip,sha256=cqh3d0TPjURFT4KkAorH_MZMCs4srNoeEZ_bj4by55k,19106 -PyQt6/bindings/QtCore/qdeadlinetimer.sip,sha256=Ao9-Rk6nZT_AY8OLlj6g3CxyfVPW5xXF14-UbyNDNCM,2997 -PyQt6/bindings/QtCore/qdir.sip,sha256=zbQOmyYwlnkJ97oX230x0Mln_3VbylovP-ppGs0UgH8,6571 -PyQt6/bindings/QtCore/qdiriterator.sip,sha256=ax-UHU4YLjjJpuMShJrWF5awssSw_3_IUom2p55Buxo,2019 -PyQt6/bindings/QtCore/qeasingcurve.sip,sha256=FuPTJUAQs5BEMurkCrigvq6LhbQkKm92RdC0CqMgHvc,6671 -PyQt6/bindings/QtCore/qelapsedtimer.sip,sha256=f8xv3NberOrgO08WLlOSrFCBNX9px7Z8te4x3zxK0Ws,1833 -PyQt6/bindings/QtCore/qeventloop.sip,sha256=JkVxeC5GL49JXVJBCU3Ty76YtQiMlR2XqTRXgtTpYZA,2388 -PyQt6/bindings/QtCore/qfile.sip,sha256=8003T7uSuOVAGaVb9dfphAMO8styaPd1ZF2lgrdZaDY,3038 -PyQt6/bindings/QtCore/qfiledevice.sip,sha256=uXnRiTtnGCetaB-GxHEgdyCDlirwf7749uGEDIwjzEg,6323 -PyQt6/bindings/QtCore/qfileinfo.sip,sha256=KKKOiI1WDQL7iihK-qa4tk8QkaUspy-0vRjIKb1qu5w,3834 -PyQt6/bindings/QtCore/qfileselector.sip,sha256=OdpRtoGUHSFKxGrJi-k5F9rc_cxtPu-nCGcct5a7bS0,1372 -PyQt6/bindings/QtCore/qfilesystemwatcher.sip,sha256=2S7RqsM-tlhZQXhljdYXX7RcXO8eD1qGfjM32clziCc,1604 -PyQt6/bindings/QtCore/qflags.sip,sha256=tG_EgrzuqvUoploPYphXl0FA_szoLTSvFcfVfsri4wQ,1457 -PyQt6/bindings/QtCore/qglobal.sip,sha256=xLq252roAoleEimFeNgsDCM8f9FAgtSBYkhXbM0whUU,5036 -PyQt6/bindings/QtCore/qidentityproxymodel.sip,sha256=9ly_53eifkDuFz7kIU2ve6j5v9EoVgm-l6xaGd3Vf6g,3102 -PyQt6/bindings/QtCore/qiodevice.sip,sha256=8RSQw5CW9CLbZYMh-sq5W48dFoYiZS3rxUgqLDDtVe4,12524 -PyQt6/bindings/QtCore/qiodevicebase.sip,sha256=brQBXjkkhxC3qdqLKs4cTqzc_Ak76ZPNodn8Q6hQnu4,1380 -PyQt6/bindings/QtCore/qitemselectionmodel.sip,sha256=IG3eGWukCGZr7YlRDBG7ex0AIADrO6jZ3NeVp9-sGNE,8836 -PyQt6/bindings/QtCore/qjsonarray.sip,sha256=sju8tH_3mFQXOVX52akypMX4bcM3ZnwQBWrG04hhyhY,3263 -PyQt6/bindings/QtCore/qjsondocument.sip,sha256=0eD50oOlk7hu6an5hJIQLYd929BRT_DlI3e1bEJ-Odw,2862 -PyQt6/bindings/QtCore/qjsonobject.sip,sha256=RvUE3X-dFslxs6PpkLEJ1-bjDLDOFmIP7ZSb9b0jUzU,3500 -PyQt6/bindings/QtCore/qjsonvalue.sip,sha256=qs-hiZ5sQaXUkmvXbfHxJtz7g43vS6AqgeR7ZvOXcL4,2892 -PyQt6/bindings/QtCore/qlibrary.sip,sha256=ByieLU8zrTe9Yuq438SsrqYex2EJ60GkAEOC8krvQyU,2425 -PyQt6/bindings/QtCore/qlibraryinfo.sip,sha256=rp_rFQ7fV6W1uwW4N5cesyXEWxQ7x6QUyFFQnrPTXKk,1661 -PyQt6/bindings/QtCore/qline.sip,sha256=4zEHeWjZ8YNJOUeIP1FUIR_M7vCX_EsxidGKgmGF2-Y,5198 -PyQt6/bindings/QtCore/qlocale.sip,sha256=j3CnB-fSDQNr5Z_hEi6DbbeEYrFEzKGtDji5jzDEZDE,30506 -PyQt6/bindings/QtCore/qlockfile.sip,sha256=l0ymIBv62m056Q2PmBCJWHdqSf0CvBuRAVmc2h6QFbc,1671 -PyQt6/bindings/QtCore/qlogging.sip,sha256=rAqXA_Mtv58zDVrMIn2Ox72MCzeURApImD8QfR1O2b8,6581 -PyQt6/bindings/QtCore/qloggingcategory.sip,sha256=5-9TBWqgb8_IR1IOQsOdMtK3TT_NnijopepjsYYFB8A,1612 -PyQt6/bindings/QtCore/qmargins.sip,sha256=Qo-aP89blarNfZAum-NkZtn3cWrhCKMLUwAGFigJa0k,4347 -PyQt6/bindings/QtCore/qmessageauthenticationcode.sip,sha256=W16RZlXuackbZP6bNbcO7b2qMttdoIHXXCK1HlWpBi0,2405 -PyQt6/bindings/QtCore/qmetaobject.sip,sha256=SZJ6feeKmTv1YxbaEnPUNCtG3aJlbWQGQ_fbSQMEkKo,9375 -PyQt6/bindings/QtCore/qmetatype.sip,sha256=9O-UwoD-id-RXh8m_pSVWG5pYIx-b2-w1ZK_YgpF9V4,4333 -PyQt6/bindings/QtCore/qmimedata.sip,sha256=gihd7ljpG2eNdZe2PDZZya5EgKF3OFbM-58Qu_OZ_Ls,1961 -PyQt6/bindings/QtCore/qmimedatabase.sip,sha256=w3Iceba6Vh8NGPgRruS9baB51fCT1AqpSb0Ao1-WoZI,2082 -PyQt6/bindings/QtCore/qmimetype.sip,sha256=edEoVvg2fm11Vk7ufvpy4GyDTVfbcH6wUrQX1ezvmdY,1812 -PyQt6/bindings/QtCore/qmutex.sip,sha256=EV5Crl7krnoa0uH1GfWgyotXYFrsqZPS3UR0NvAOJGA,1708 -PyQt6/bindings/QtCore/qmutexlocker.sip,sha256=wfI2dzsOpGSIu417fGosPenkt5hVGtg3XBvEADnZqrA,1961 -PyQt6/bindings/QtCore/qnamespace.sip,sha256=WgfxIpWmyH3BiN6gTlPuKTufTIR9RRZ8WeUH7QrNyn0,34366 -PyQt6/bindings/QtCore/qnumeric.sip,sha256=_OCBewyX_hQIT86FBX2BjqKYd5JEwhn-Oti2BSHnQ00,1410 -PyQt6/bindings/QtCore/qobject.sip,sha256=cD11wzOMbe0Ul1utMZNp7tcJZoD7Ri13vQhkH1NhBsU,20307 -PyQt6/bindings/QtCore/qobjectcleanuphandler.sip,sha256=ClqP7biYjJ9EFZbHEsLLRRpgntbVwYrXCmiJWzvG3cU,1255 -PyQt6/bindings/QtCore/qobjectdefs.sip,sha256=vZ1GUrJTZIfWR7s-cMywucYnsEREzQOORku-QZe1MKo,8135 -PyQt6/bindings/QtCore/qoperatingsystemversion.sip,sha256=I0-o316EoCsQZQRwe2xBXGSXadmWS9I0hClg_5-nvPs,7754 -PyQt6/bindings/QtCore/qparallelanimationgroup.sip,sha256=qsChZ-9gp-sURCTwuod4g_K4Sg2BfV_jaeu0IJKREK4,1509 -PyQt6/bindings/QtCore/qpauseanimation.sip,sha256=PSFqAodpL2MHkKlaKm1FYylfjfrvCeKj-PQ-tZX-tOo,1380 -PyQt6/bindings/QtCore/qpermissions.sip,sha256=UEJR6qsxkuCaU_UIz8tkZi1gx0mOfOwKUoI5M6yNZ5A,7979 -PyQt6/bindings/QtCore/qpluginloader.sip,sha256=8eQPyhPWJoTsgKQtRDDJySfOelO2F7fP6rlvJXNH2I4,1562 -PyQt6/bindings/QtCore/qpoint.sip,sha256=753UwgTJ2fG06po0MsTA5_OXFVpDnG1c_dOnU3EH_c4,4684 -PyQt6/bindings/QtCore/qprocess.sip,sha256=9c0SDGrM9jb-BpuSKkg-YnGia7HgJZl6P84RgUoTetk,8938 -PyQt6/bindings/QtCore/qpropertyanimation.sip,sha256=a6m_F3rx9mNYkMojUZYVrq5DEVDWVxvCRUabLyZTuEY,1702 -PyQt6/bindings/QtCore/qpycore_qhash.sip,sha256=HEOSTUElFR0ZL-XHyGqdtD-0o12ri29otYrWFNtvER0,11135 -PyQt6/bindings/QtCore/qpycore_qlist.sip,sha256=Ed7EgxXu_OHtOKs2A4jeSFcMy8yeAMHkkz5Murm9kgQ,32860 -PyQt6/bindings/QtCore/qpycore_qmap.sip,sha256=KBxoyCXK2PUyCL8pMmX9PVpeZMLPRmQoZa4oCeoGVhg,10100 -PyQt6/bindings/QtCore/qpycore_qset.sip,sha256=-_Dc2OgxJMcoP7gXs4kNtjupcRGmmvVFrfORVfNpzgw,5229 -PyQt6/bindings/QtCore/qpycore_std_optional.sip,sha256=fAP-LjPz1cTQqmFM-8XspAz5E0evmIy-AfoEjdex7nk,1403 -PyQt6/bindings/QtCore/qpycore_std_pair.sip,sha256=NM9PeJVH0JgqySIY-fMqL6wECJnuNBdG0hiURM65vOk,11619 -PyQt6/bindings/QtCore/qpycore_virtual_error_handler.sip,sha256=KaQJiYzaR-Tjlj8HrR-St72LD-2_Y4_hsWCGYpY4Jhk,976 -PyQt6/bindings/QtCore/qrandom.sip,sha256=kbXeOMjQz5eB_FeySeguom9aHL60fQIzhm5d7H5ReM8,1863 -PyQt6/bindings/QtCore/qreadwritelock.sip,sha256=gqQj46P07mm0RuvKncZYmpUXqwdoyEo87FNKWAKmoR8,2929 -PyQt6/bindings/QtCore/qrect.sip,sha256=_9xPwFbibkMfRS0jSuNzQV47kRoa2HlWlKavlsHD3IA,9654 -PyQt6/bindings/QtCore/qregularexpression.sip,sha256=jQMI2ukKEdLoaMn1GVsBxV2YH49DeVQj7DAHlePcasg,7314 -PyQt6/bindings/QtCore/qresource.sip,sha256=hNSQ29xJyygEuB-s4pM6_7o6nkXHhTw-OfK6P8dqsEI,2661 -PyQt6/bindings/QtCore/qrunnable.sip,sha256=QSGggmwJQIuoHP9xfC0SOHlg7o_Mc-K9vGeiKPmfsE0,1718 -PyQt6/bindings/QtCore/qsavefile.sip,sha256=TNTdEsLwTuyqe37y36Fmrwuw7BprFdndzqvqscaibGs,2397 -PyQt6/bindings/QtCore/qsemaphore.sip,sha256=geaBQsUBYD69dU9TvGaEFYPXGyzHp2GXMsHRNu9K_EY,1707 -PyQt6/bindings/QtCore/qsequentialanimationgroup.sip,sha256=5aztIoDTjjTv-BIE712eJfPG_AiH9bdyo74o6m-6ySI,1728 -PyQt6/bindings/QtCore/qsettings.sip,sha256=VQDQFrYtei-Mf1i1xlRoshrGXMaiM5wpkGdsSxRX0Jk,5116 -PyQt6/bindings/QtCore/qsharedmemory.sip,sha256=BeQzuAxR9KJpHnzwoGgCWrUJue8G3jO3Qr2wPrpwJ3k,3110 -PyQt6/bindings/QtCore/qsignalmapper.sip,sha256=tt447HRZW-G_L7lM9XI5t3vOQbvlCmx7q-6UBTFuUuE,1648 -PyQt6/bindings/QtCore/qsize.sip,sha256=kxvDsQNMKG4DRktfJ940IkdM291PWNPnUlGnnf9-QuY,5173 -PyQt6/bindings/QtCore/qsocketnotifier.sip,sha256=N3yW7emn5bcsdxWO4PEahztxj4yoU4xshJJuyiUcKuc,1680 -PyQt6/bindings/QtCore/qsortfilterproxymodel.sip,sha256=EwBVCygHaAuqKl3y83mhoVx5agGuov-B7r5tJpWg1ko,5915 -PyQt6/bindings/QtCore/qstandardpaths.sip,sha256=lW-_XBHKv7zm-pp3Vj_ei5CAyAaMqANFju0mclHnBsA,2695 -PyQt6/bindings/QtCore/qstorageinfo.sip,sha256=_dglXhl-zob_r7mFP0FHdmHDlwN4TJpAP758yD7c9Hc,1966 -PyQt6/bindings/QtCore/qstring.sip,sha256=TV4OgfHOlSYjXprioecUYzkF9emGlK-bPlNfk6JaXWc,1518 -PyQt6/bindings/QtCore/qstringconverter.sip,sha256=_Cozr3WPVS0wMGxKcyAQUHxgQKPhpcuPNr5fMzwPxsE,3226 -PyQt6/bindings/QtCore/qstringconverter_base.sip,sha256=WW8yCNdyJYtGcIwwXqWICB2PpKeF1rbcMTXCD6n0pYg,2205 -PyQt6/bindings/QtCore/qstringlist.sip,sha256=fc70AlREMPLOGQyAFGArlY1Tpo2ez97sUMmymKu6TaE,2937 -PyQt6/bindings/QtCore/qstringlistmodel.sip,sha256=CxvmDqji-m1y0qG-lF-DTjdCEUxSd5P7JBH_jVZQc7k,2410 -PyQt6/bindings/QtCore/qstringview.sip,sha256=d8Z8yYEsMxBQX7DpHH36TmvOFJW65O2Oc5ib1CnNEPs,1537 -PyQt6/bindings/QtCore/qsysinfo.sip,sha256=iVbM2KMLefXEIYMAhuPg3kQVOlicKc9w7lynPw6Cjes,1572 -PyQt6/bindings/QtCore/qsystemsemaphore.sip,sha256=xpwaAWmCHrVQqp9e6MDdJOb5mAXpia6QCR2_QcZVnjM,2752 -PyQt6/bindings/QtCore/qtemporarydir.sip,sha256=O9GmY6kFajNlGFwqeL5YFuCxqMOTbxy0A3oU7uUyUk4,1463 -PyQt6/bindings/QtCore/qtemporaryfile.sip,sha256=OvNCoZzK-rJweDibSOgKtDuubQM8aqkFFHZF2z--_4E,1805 -PyQt6/bindings/QtCore/qtenvironmentvariables.sip,sha256=Y9k_mK3uYNtNVkziDKr706DWTrvi2jFg-NGSgm5saqk,1455 -PyQt6/bindings/QtCore/qtextboundaryfinder.sip,sha256=sYdGJGoCchtEzUxnybTxTxJ2tvTJyidy42njAJKbOy8,1998 -PyQt6/bindings/QtCore/qtextstream.sip,sha256=SLhqFTeaW6s7pNWdgzfFet3IP8LEXIcHMm0gP4cazSo,5610 -PyQt6/bindings/QtCore/qthread.sip,sha256=9ypdEbLlTQWKWtREvJUM3Eaa6bQ4Njn9-BsZO-MNqv4,2698 -PyQt6/bindings/QtCore/qthreadpool.sip,sha256=ttKlmc1gvMMi_-sDQwBerMY6jLRV1o4yCBNhh6e9XuU,5001 -PyQt6/bindings/QtCore/qtimeline.sip,sha256=AsW8I5PiSaoP1yBpn5st7PiH_E0PZ9uDGetHNDT_ujA,2438 -PyQt6/bindings/QtCore/qtimer.sip,sha256=33RgF6v09ldePlHtclglK35PnktEjHBb1pnbmsv9G3M,2592 -PyQt6/bindings/QtCore/qtimezone.sip,sha256=q-UN_kUXtunGaSjSdYMpK3e9dr6EtSe-of57HbXbBYA,5778 -PyQt6/bindings/QtCore/qtipccommon.sip,sha256=zuZqFRN5OhY8Vi-GeePq9bEgfEtvIptUwEhSxdanUgc,2114 -PyQt6/bindings/QtCore/qtranslator.sip,sha256=EAQzjOsPblQem19Nx3IQzJztRsQsLwlKtAOOSZtbhLQ,1844 -PyQt6/bindings/QtCore/qtransposeproxymodel.sip,sha256=awjKunXDq7-d9GJa32_c93txEQnbI3tQh0tFuBgu_Ms,2952 -PyQt6/bindings/QtCore/qtversion.sip,sha256=upZGEQiQ60FpvS5WKf52PtxG2MZOfSWUHrN_RF2KPFM,1057 -PyQt6/bindings/QtCore/qtyperevision.sip,sha256=AJngm91J-WPhj7koDmFpJ8jBSOqieST_DLV6fDm3OQ0,2220 -PyQt6/bindings/QtCore/qtypes.sip,sha256=ZAv5WHd5w8wW0OUtTA1ny4agkUvPgKI3_6lWeUIlmDI,1859 -PyQt6/bindings/QtCore/qurl.sip,sha256=qIu1Rdg5r1526O1_tWsyuwLTaw_Af3yB5fN7LMBxYRA,7484 -PyQt6/bindings/QtCore/qurlquery.sip,sha256=TZdJi0R7NNBUrTHuhYjWMPFJan54MHN05eCrJdOcSVE,2784 -PyQt6/bindings/QtCore/quuid.sip,sha256=xh1TPlbPv2Ugybfftpw5tJV4FF4MYl_HFnSwViIbltg,3682 -PyQt6/bindings/QtCore/qvariant.sip,sha256=LuldWoVNsaupnTXFcf9uX5mkljlcKwFtqytffa5jEQA,3169 -PyQt6/bindings/QtCore/qvariantanimation.sip,sha256=7aZhzYJ2iNNiRVdC81B2GLqWQwQvAqw9m1Ofs5YoXv0,2204 -PyQt6/bindings/QtCore/qversionnumber.sip,sha256=GQiVRKsg1aqcppHXhp7zoF9CxAqFNPsCY2yl9rK3_wA,4111 -PyQt6/bindings/QtCore/qwaitcondition.sip,sha256=aWNdFOSJ0AjJYmNerkin1Ku8TWMnnXvMmIUj299QsGk,1578 -PyQt6/bindings/QtCore/qwineventnotifier.sip,sha256=_Dw-oJmuqwoFBfXUPFwP3y-3xFS0YxXrG9msxbkhpEI,1577 -PyQt6/bindings/QtCore/qxmlstream.sip,sha256=Z-IVjspa_k-81op5y55MFwonWMGdNVWQDaTyM87c2oM,16087 -PyQt6/bindings/QtCore/qyieldcpu.sip,sha256=alRRhCbL4t-ITO8K-30N8dTBFux8os30FJyiIfHPP00,1051 -PyQt6/bindings/QtDBus/QtDBus.toml,sha256=v2vGeqYaru9i2FSHThfs7TkrbYt59_Pj7fVLYaUw3lM,172 -PyQt6/bindings/QtDBus/QtDBusmod.sip,sha256=WZI2Vgj-tsAoi01KB9BJwQs2mHNs2bzO5pA8k1F1haQ,2340 -PyQt6/bindings/QtDBus/qdbusabstractadaptor.sip,sha256=lOAtL7sLooxzjEpImfxLj7HHT3_QYzJYEL9EWjzRC-k,1278 -PyQt6/bindings/QtDBus/qdbusabstractinterface.sip,sha256=QBDZc5QQVwFbeWocFN8TjwNY0WUQ4JTl4nJRj9lqgzY,7557 -PyQt6/bindings/QtDBus/qdbusargument.sip,sha256=Oc96BcluS_wfG72P7Dq_iolJpVnwgi-5bNABIYM3oHQ,4871 -PyQt6/bindings/QtDBus/qdbusconnection.sip,sha256=wQxxMpnb_1ozWqBZ9_0x7DtBpAr8Q5Jt1b-_V_usggo,9428 -PyQt6/bindings/QtDBus/qdbusconnectioninterface.sip,sha256=Cn7oZTVncDF3-CFy2k0uUT8UGWfUiQOwBwJPZvesTcE,2983 -PyQt6/bindings/QtDBus/qdbuserror.sip,sha256=0cH-tKrUrhNhzQaAelCRgAaluC6cVvIhwKV4cyadw5M,1933 -PyQt6/bindings/QtDBus/qdbusextratypes.sip,sha256=ASOdulbE7q3CfI05q0gKlk0qIv58wAOS2M3lSbM6YCg,2507 -PyQt6/bindings/QtDBus/qdbusinterface.sip,sha256=IsooB6tbRZ0y8d4Q7lssrBsMTjUuxpDWuFoHdQwrOhw,1306 -PyQt6/bindings/QtDBus/qdbusmessage.sip,sha256=QO-Q0fD51RbyApm4rx0UStfw_GCE_RekTRsrDlfpwOQ,3015 -PyQt6/bindings/QtDBus/qdbuspendingcall.sip,sha256=eJNak9G4iGdc-qrsSOFCTDMstqXKYn5TH0TLGt2vDRU,1759 -PyQt6/bindings/QtDBus/qdbusservicewatcher.sip,sha256=AgPBf5zck0RNgBa-BIQjpb7MrhEjW5-m9fsdUudlHcA,2232 -PyQt6/bindings/QtDBus/qdbusunixfiledescriptor.sip,sha256=EamIqYeIvGDDKkFBU73qRvvXg27ZWbkPqYKAQpF-5vA,1450 -PyQt6/bindings/QtDBus/qpydbuspendingreply.sip,sha256=C6N6p29QzdM4J-3_yXqHQJ5UnrabPg4egq4p1jEDjA8,1739 -PyQt6/bindings/QtDBus/qpydbusreply.sip,sha256=as7bhVeJhne6snyEWVXCVCA5tGb043p7fDSIuIdUQVI,5291 -PyQt6/bindings/QtDesigner/QtDesigner.toml,sha256=HOlcCdEXay-5VQU2Ypsp2reFkafrYzP7OsfsUOsAlXo,193 -PyQt6/bindings/QtDesigner/QtDesignermod.sip,sha256=LxHKMW6wluUlDGBeYecjUHydS14zeRGrIlCHV6x4jU8,2809 -PyQt6/bindings/QtDesigner/abstractactioneditor.sip,sha256=MwYc_wRx0YVLW0W-08JwCdQoxBxecJA4Tc9NOAVik6c,1500 -PyQt6/bindings/QtDesigner/abstractformbuilder.sip,sha256=-nA9sSzZ0IYa1d7X04tslzG10QhzE3-YjZ8K9Z4yBWk,1457 -PyQt6/bindings/QtDesigner/abstractformeditor.sip,sha256=HfRZXlv7Zl2-JEGKPImi5ZEmdAHe1uopVA260dJd1uM,2028 -PyQt6/bindings/QtDesigner/abstractformwindow.sip,sha256=eQTKcwIBE0UGLihtNYxZ95epJGK-pnthWmHtVGzjuK0,4744 -PyQt6/bindings/QtDesigner/abstractformwindowcursor.sip,sha256=As8BAo2xMnheMMx_2RzRGj6L0Vg_lIrthmz5j2dY18w,2532 -PyQt6/bindings/QtDesigner/abstractformwindowmanager.sip,sha256=x67Qx60v7jhV_HeAVwtT8mZUbSvswDAKblx07gE28vo,3293 -PyQt6/bindings/QtDesigner/abstractobjectinspector.sip,sha256=F-cm2QdSJh5U34GZlB0xiyzm3Yp9UXF8p4w2uxHnUd4,1409 -PyQt6/bindings/QtDesigner/abstractpropertyeditor.sip,sha256=7UgydNYRn5WtHXNKXWFrOfaieolBLR7CUXe_tG61Ssg,1743 -PyQt6/bindings/QtDesigner/abstractwidgetbox.sip,sha256=TxFhS-McXxYTvLIYyQY6Wq36HUlGMQAIcRucXaVXyIY,1404 -PyQt6/bindings/QtDesigner/container.sip,sha256=Pugm56091Er5hEVYJCaTp1z1IgpFtLAZeP0VUMJGQyc,1633 -PyQt6/bindings/QtDesigner/customwidget.sip,sha256=ghJaEXzvNtFvSn90tu8Rq00yTxJNFC-f1n8nHdNIqLE,1884 -PyQt6/bindings/QtDesigner/default_extensionfactory.sip,sha256=sEa-A8WmT6qiFZafxSaQJmVMjx-xrUx97VmRLZhOZ9s,1452 -PyQt6/bindings/QtDesigner/extension.sip,sha256=gOH6p5cw8_4L_tQIkxMGCNJ-9swbnqcau1llhuyLkhU,1571 -PyQt6/bindings/QtDesigner/formbuilder.sip,sha256=FIGYuP5-exsK8intlovdNdC-ysGBs0HJ8sI3nKjC4_w,1352 -PyQt6/bindings/QtDesigner/membersheet.sip,sha256=gkId1ZMn0ud2ilnijlPIXTMKuArpkskK3ZN0rBOBEVA,1993 -PyQt6/bindings/QtDesigner/propertysheet.sip,sha256=2ssPOkbkWqYov2ZMbs8ZFCakFlQtndOryokY_B7he6Q,2084 -PyQt6/bindings/QtDesigner/qextensionmanager.sip,sha256=gVMfhUy1SV0EfnEp6e25H_eBMbKOjvvX1OIJGcdpu7M,3411 -PyQt6/bindings/QtDesigner/qpydesignercontainerextension.sip,sha256=-j_LR_D99iCaM6P9zx0Jz5WGyglu4jf1quYvfWBAGgI,1228 -PyQt6/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip,sha256=41grDwaAmv2NjyeSujeVD29OPEtLmwAQenTw73RsJaA,1308 -PyQt6/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip,sha256=8WB3iPtR05mMe7iztr9FcwYx68mkERaeV9iAutGaX0o,1235 -PyQt6/bindings/QtDesigner/qpydesignermembersheetextension.sip,sha256=NSSUIzBlmP8flLBG7z3C0vvK7qXu5qnvo4HlUQzF4Uk,1242 -PyQt6/bindings/QtDesigner/qpydesignerpropertysheetextension.sip,sha256=ua0Z7TLHYv7Y4H_7kSNZdl4FXjoV6IR2fVjRlHKOKRM,1259 -PyQt6/bindings/QtDesigner/qpydesignertaskmenuextension.sip,sha256=rQLdXUrIQH54ng5z1t3rbZ32ae73hVjPQkDUYiLzovo,1221 -PyQt6/bindings/QtDesigner/taskmenu.sip,sha256=Tyziu3CSTFu4xCz3jqEULD2DX5iAwjYIvUmSesT4nY4,1300 -PyQt6/bindings/QtGui/QtGui.toml,sha256=Gi-xGU7UWfLPBoVSNk2Dhmd54JU7khaYMtZvbdVAXZ0,188 -PyQt6/bindings/QtGui/QtGuimod.sip,sha256=9DYhkRBfRPPycOBCbm4ekwkYRXr_ID48u3-tVYCJBH8,4178 -PyQt6/bindings/QtGui/opengl_types.sip,sha256=w3XoAz-j-7PfzajeM7yrAiOz3oriSCDuxNgX1wCGxF8,1404 -PyQt6/bindings/QtGui/qabstractfileiconprovider.sip,sha256=fiHZOLf06cosa4TcxN85gvNpiiE8ggGY_jEkl9SyxBs,1809 -PyQt6/bindings/QtGui/qabstracttextdocumentlayout.sip,sha256=CMXAn649VV7M_VpuFwE_bvR8A-nTfLDe9zx-H5gUock,3733 -PyQt6/bindings/QtGui/qaction.sip,sha256=_q-dMUTPKukVIZzVy4dd1vRyQYEG7k1wx_4rFIBovhQ,4679 -PyQt6/bindings/QtGui/qactiongroup.sip,sha256=1LNBY1jwTK-SuNAOAg55ikGdjgMsdlv3pTb03IWbyHE,1953 -PyQt6/bindings/QtGui/qbackingstore.sip,sha256=BTxqIir13wbkmh9JDkuQbN7TWc-do9zBNFlJnfDHgRY,1568 -PyQt6/bindings/QtGui/qbitmap.sip,sha256=DYPZOqo3aFMSwXELwPxf3jL7MWQm1-a8U5raMiVkuGA,1855 -PyQt6/bindings/QtGui/qbrush.sip,sha256=TKDS91LSfIc7rOt-ArMZgY93xvZmqMLCpRZaudc6t_Y,10760 -PyQt6/bindings/QtGui/qclipboard.sip,sha256=nmrt6o7juRkGLrfu4CL94vZ_U4lkLismOuCRNYWYcXw,3499 -PyQt6/bindings/QtGui/qcolor.sip,sha256=xyfeRINe3PnsL9dM7ZWCHmHzLlM0ayZjSG6fknb6qfw,12351 -PyQt6/bindings/QtGui/qcolorspace.sip,sha256=7wxgvW6nXDeib6Z0Mazin8rAZucLaDTI5W4J7FOwI0A,4476 -PyQt6/bindings/QtGui/qcolortransform.sip,sha256=IdPR6ps0H0GVk6bvxHx2ijjQO6nbeDk8WHcIhtNqXjU,1554 -PyQt6/bindings/QtGui/qcursor.sip,sha256=YpCVwlZCsfDUcmNGp3f4UPQyxpKagGkXS2yREacM2Us,3042 -PyQt6/bindings/QtGui/qdesktopservices.sip,sha256=rPOHIVKBoxG9lVhrLlKdTG3EYAq-xSyALsfhrMMQoVY,2418 -PyQt6/bindings/QtGui/qdrag.sip,sha256=1eD4OgFuxC3cBugQfpRsB-O5TRwntbzBi3iHMlLe2yM,1978 -PyQt6/bindings/QtGui/qevent.sip,sha256=B79VAGePDLe4a5olod2XVmFfZA502KkWU06YF41elZ4,23884 -PyQt6/bindings/QtGui/qeventpoint.sip,sha256=fw_WER5_lv19QXkC0xh5S3R9boBpVQwGhQmIKq2pDEU,2495 -PyQt6/bindings/QtGui/qfilesystemmodel.sip,sha256=o16lpge3hvMeYqtgJIrtIAOGme-gttFayZ8hk5w0f1c,4950 -PyQt6/bindings/QtGui/qfont.sip,sha256=w_tanx087Yhpeio8xhVjCUmRxiQpHMQvmYamxgQts1c,8896 -PyQt6/bindings/QtGui/qfontdatabase.sip,sha256=-r1-FuxFJMoIKvQvC6hJVAIBoJfSd7sKIJ8tUIgIHhE,3645 -PyQt6/bindings/QtGui/qfontinfo.sip,sha256=oriM-A74O-_xCTWS6xRasyVTj5QscoI_xy1jkNvGVSE,1495 -PyQt6/bindings/QtGui/qfontmetrics.sip,sha256=Hf4YwSVxDC87xSBXMVPlh11yDQBhUBjVRtIs2p0iX4U,6681 -PyQt6/bindings/QtGui/qgenericmatrix.sip,sha256=WLi8XFw1yTa_wd9Q6vmxyP55AezYZDunOkXK1XtfOkU,25528 -PyQt6/bindings/QtGui/qglyphrun.sip,sha256=GDqvkV5GMSRodhqmVHne_a1t_iKMr0imuwyukGaNHSk,2611 -PyQt6/bindings/QtGui/qguiapplication.sip,sha256=7eb_Daz3ppKoLN6JFzVKkZkAA-tA4P4tLYgF92BkYPI,9610 -PyQt6/bindings/QtGui/qicon.sip,sha256=fIs7DikENIzcPrXzm9fQlohb57-P4MO2n1Os9F6bPP4,7978 -PyQt6/bindings/QtGui/qiconengine.sip,sha256=YZ6dz8hFq32RKU-kqfVdQA_i0DJszJbqB7HpZrJ_6XU,2384 -PyQt6/bindings/QtGui/qimage.sip,sha256=FXYYCPBvuVFKhWpN2Tc7c291dCPkzGJ-agF3RUz1Yx0,13961 -PyQt6/bindings/QtGui/qimageiohandler.sip,sha256=ST2CO3pOEIa9ooZNGTPbroKpHD4ciQZEIxrNKMqe4FU,2751 -PyQt6/bindings/QtGui/qimagereader.sip,sha256=YfqQ33Y1XJMKdjePsi3PvD0CgLtNhmQvVYGqunL9zyA,3480 -PyQt6/bindings/QtGui/qimagewriter.sip,sha256=oiO6ah1NPYiHR7Q2KHCl-sWagzsG0U9CBrMUP0rC_9k,2666 -PyQt6/bindings/QtGui/qinputdevice.sip,sha256=sa9f5q5lJ51Nu13GF1nRuc1uM7OmwrJDsiqfKjiEhEo,2598 -PyQt6/bindings/QtGui/qinputmethod.sip,sha256=BUu2MPrVF2Mzoqq835PemLLkSDkmw88Giwr9lYymzSM,2310 -PyQt6/bindings/QtGui/qkeysequence.sip,sha256=ZjET3_fbGvwZOypT4h8APZrlbuTdi87j17HraXGepWA,7031 -PyQt6/bindings/QtGui/qmatrix4x4.sip,sha256=cwNkp3wuwiHGXJuOTw79LQ-2RxhCAMsZYRfQIm_S9EA,9803 -PyQt6/bindings/QtGui/qmovie.sip,sha256=kaSD_Xj3ZJ9W8ScvJLhCUnDCHiuPP06hX5bjmRS-VEQ,2864 -PyQt6/bindings/QtGui/qoffscreensurface.sip,sha256=VSWph8IC-IFgfIRmGyGCQiIRXzb55_HH_REhhk-_jt4,1599 -PyQt6/bindings/QtGui/qopenglcontext.sip,sha256=MnZihjZP0ZLN9EjIxkTe2d7NXr_DJpJf_NGofpZQ2Gw,2594 -PyQt6/bindings/QtGui/qpagedpaintdevice.sip,sha256=ZQEeCUBnvDvXnUrVYCA0ngdI8AIZp9UWxlrcxCSfj0o,1693 -PyQt6/bindings/QtGui/qpagelayout.sip,sha256=CdKIQBipiwhPtQAvxrMA1VjyAIgPjOUc_1gCl1cNEgU,3104 -PyQt6/bindings/QtGui/qpageranges.sip,sha256=ljZc1vAzSaPSAlZpkvmfepkk3hXbzowTeY7i7KtAegs,2145 -PyQt6/bindings/QtGui/qpagesize.sip,sha256=3kM7BRqOjOw_YIgVNyxHYGp1-sHRI21DPVoBO2oCY30,5591 -PyQt6/bindings/QtGui/qpaintdevice.sip,sha256=FQD1W7nafIc-J7ZHzpBzUmiurr9pMahahmOlPYoBKG8,1994 -PyQt6/bindings/QtGui/qpaintdevicewindow.sip,sha256=ozqSsK_jND4O4YnV6Y1dkKQhVY8m8uZAV6AfCglHPkM,1429 -PyQt6/bindings/QtGui/qpaintengine.sip,sha256=q_xUdsKfYFqvddofmqwPI-KwK-bXERQulFt5f5oIx5E,5665 -PyQt6/bindings/QtGui/qpainter.sip,sha256=Wowb8cvrXL2FHH6wwaBdJoXaOAajAZQJAZwFXhvIRKk,21088 -PyQt6/bindings/QtGui/qpainterpath.sip,sha256=3cBiz7Q43fj1kDKS3nDDrp3NTOBEpLBj81u_8TaioRE,6554 -PyQt6/bindings/QtGui/qpalette.sip,sha256=unAI3mCU8CcsTBsJ74hGlBO9CrjdXhYIav6Hu_1Ujik,4605 -PyQt6/bindings/QtGui/qpdfwriter.sip,sha256=KrdlqXr33osOJM2ggSAsPabNzdKxJNeCGEZFuJpBNEQ,1899 -PyQt6/bindings/QtGui/qpen.sip,sha256=xKHGV-WaoFSdl8dSsyK8KhLvSw8OXmsk2RBRl7Qtnz0,3397 -PyQt6/bindings/QtGui/qpicture.sip,sha256=AvSThO4vJQh1Bg2Pj9uSEsXKpxj21wTZQFH7-OJN_Tc,2028 -PyQt6/bindings/QtGui/qpixelformat.sip,sha256=BrPeSWjCMxxGX1ZoVA6OkmtMjlku4697HW5kNMAbSJo,5520 -PyQt6/bindings/QtGui/qpixmap.sip,sha256=-AocOYN9LEO6-0FlGPUuBlAmGW9v7oolAQD6XbodePg,4924 -PyQt6/bindings/QtGui/qpixmapcache.sip,sha256=UNlIPqM2gmiQPZdwExxBC75m_BFZvTFim-oOL5y0mZ0,2353 -PyQt6/bindings/QtGui/qpointingdevice.sip,sha256=vX56Rb4xobwGdvT6LTnRVimwTWjaLbjvcw9OIkMRT90,2506 -PyQt6/bindings/QtGui/qpolygon.sip,sha256=HV_mnPZenWYto3FLHJ2Rex2MK5vsQsIfgtDA0ekZ0rc,11987 -PyQt6/bindings/QtGui/qpygui_qlist.sip,sha256=dNwLlOBUQGJlYQ3UiHOG-Z0SccN-trycRsz0pK9WLTc,2719 -PyQt6/bindings/QtGui/qquaternion.sip,sha256=nHKVicNMZZOJJ46fF7eH5_nMnnp_ssQFnS8cwQ0QyiY,5850 -PyQt6/bindings/QtGui/qrasterwindow.sip,sha256=0GWus_najO8-52QBpVFKCx0qvXG6P_isE8j3OwZEF2Y,1310 -PyQt6/bindings/QtGui/qrawfont.sip,sha256=gRU6XcojPihF5HmEE0f6JBfB_cf5W5wJAhmahkdwafA,3686 -PyQt6/bindings/QtGui/qregion.sip,sha256=dowxQyyTFqKEdPp5jiRbxNzAS5JcVvQ3OztKqChWWkI,3768 -PyQt6/bindings/QtGui/qrgb.sip,sha256=_T2pNwn7LKgHmupG6ffyS7pV3wCyaLgSYl9GTbXUs74,1271 -PyQt6/bindings/QtGui/qrgba64.sip,sha256=cMl28CMcy6kvoPfd9_0XqeGF6oH_qyI8Iauxknc8Jls,2141 -PyQt6/bindings/QtGui/qscreen.sip,sha256=truY6AEuGwPx_bWpL6CG7uhTX7YxvDjfPOZVK-1aMhw,3080 -PyQt6/bindings/QtGui/qsessionmanager.sip,sha256=UqhRsCs6O58nvOEoeyy3Bo-DD2v72lIkE0I_9ts67Gk,1997 -PyQt6/bindings/QtGui/qshortcut.sip,sha256=cXYL7ocHxaEZ8diuYVrlTdDtLnMkdRBwo7_p4DsLYq0,6087 -PyQt6/bindings/QtGui/qstandarditemmodel.sip,sha256=Ki0RcsuVcHA46JZ3ZvkoDE6FQ15oNGNtIkFmcjdqQhQ,9711 -PyQt6/bindings/QtGui/qstatictext.sip,sha256=vh-bWeWRwj_PqDjuQIMbzVtcOyfgdNNwpdYe2cx1DIk,1953 -PyQt6/bindings/QtGui/qstylehints.sip,sha256=24VnumzLa9oPD-g2ilSVzCF4WWlL0hKS92TxkWM8GXY,3067 -PyQt6/bindings/QtGui/qsurface.sip,sha256=EdFMpe7M17XAJDS8N-p3z6P4zNCYVGSNw8U2UzrwzfQ,1634 -PyQt6/bindings/QtGui/qsurfaceformat.sip,sha256=eiAZONbu8utI4UQUyE_5W8Q9PNs1nwMC3Jso4PhTL0w,3651 -PyQt6/bindings/QtGui/qsyntaxhighlighter.sip,sha256=deYYGqcmJTF17EeS2qFcAo9T97eg_Ag4rtyKaQURwqY,2972 -PyQt6/bindings/QtGui/qtextcursor.sip,sha256=yMU_5qw-0m2ldHV79BDQ72IF_zZIdSb29G2A7udGURU,5531 -PyQt6/bindings/QtGui/qtextdocument.sip,sha256=Kt8_OJIHt-s8FS59ELj3TKf-2n4i4GaNWOVAJYnQfoE,12211 -PyQt6/bindings/QtGui/qtextdocumentfragment.sip,sha256=fKBDN6h4Jy6UEoKQXd1VbzmcwnXmUq1RSvgzhavvfBQ,1935 -PyQt6/bindings/QtGui/qtextdocumentwriter.sip,sha256=LluL8154p7iSgPgaRtcKevDlt7YHTRF1LFtSDgEeats,1714 -PyQt6/bindings/QtGui/qtextformat.sip,sha256=og-RpVb9ngoyHhyrPg6g932a7SDfCSdG2yCaAUn_70k,19723 -PyQt6/bindings/QtGui/qtextlayout.sip,sha256=1tc4SILIsBg_LyEV42LYIMQP6DIYGXFpOE9VvXii8Zs,5890 -PyQt6/bindings/QtGui/qtextlist.sip,sha256=JM0u-0HoMJYVKZ1SAcfYpS2sdZ2tLpgJsU5GJOFOwks,1469 -PyQt6/bindings/QtGui/qtextobject.sip,sha256=j9wICLSh0hT0WUm_giH4wuJfjTgZbw6Uh-GLIFY_kVE,7712 -PyQt6/bindings/QtGui/qtextoption.sip,sha256=MlCYfB5A3claxkKjLOXO3HHkJ2LesrsCHS5-CZ0h9uk,2786 -PyQt6/bindings/QtGui/qtexttable.sip,sha256=2jAGLI_x70YVTTEa8XOHuVqghiZNeUPZ6S2hmfljLU8,2576 -PyQt6/bindings/QtGui/qtransform.sip,sha256=HZII-QV6R_yXkO4iNieKnD7Ef49-Hl3G3PleYakbP2w,5139 -PyQt6/bindings/QtGui/qundogroup.sip,sha256=-EUSBHJ5HwzEi9uNV5csoUcj8yVmZlrb5wjODVPnkZY,2049 -PyQt6/bindings/QtGui/qundostack.sip,sha256=cApF6iEqu0MO_jds2tjBUjgtBwENH3pVOo25AFxpcUA,3011 -PyQt6/bindings/QtGui/qutimimeconverter.sip,sha256=RhGYYjwuKciUjOZV6rcckQAI-LcwfGEl_YT463N_4Sw,1692 -PyQt6/bindings/QtGui/qvalidator.sip,sha256=ZLeptSbZIgLAgY0JrWYlXsATrQeXHSIRGiYHOv4FHi8,3389 -PyQt6/bindings/QtGui/qvectornd.sip,sha256=6igOz6Bbwgcb3bnCuBHPlx849ya49qKuFEikqxVjjWU,9152 -PyQt6/bindings/QtGui/qwindow.sip,sha256=Gs9Paty74AcnyXmMIiz1WDPwo3eMKLEimqJoCzQlWHM,7250 -PyQt6/bindings/QtGui/qwindowdefs.sip,sha256=mKwXaAG0_n1VU2uQERA2Vj6KY4uivGkNfmMhiUyUPto,1009 -PyQt6/bindings/QtHelp/QtHelp.toml,sha256=enAe1Hpd2POwP730EBUsuZQkeaIbXqzlzIDxoFSsffY,189 -PyQt6/bindings/QtHelp/QtHelpmod.sip,sha256=vDtcINphVzYxyFJpArcCQYcVLJkG8gMw1iyDQghVIYY,2347 -PyQt6/bindings/QtHelp/qcompressedhelpinfo.sip,sha256=wHD8E_IvaILQfh7LHAsdiFi6trpkMHePJEhatpMqPh8,1429 -PyQt6/bindings/QtHelp/qhelpcontentwidget.sip,sha256=fYfzr8QjcbnMgVTeXiKehP0WYJT0wuKIJysiy_c4sLU,2362 -PyQt6/bindings/QtHelp/qhelpengine.sip,sha256=p-U1FV7M67eSVEZzwaq7QE0Pe7nyd3aqrrNU8sPY0GI,1368 -PyQt6/bindings/QtHelp/qhelpenginecore.sip,sha256=b1au0AdRUFB1W0WLCKNpSniUFJ4c9eN6MxD1IS6ktZU,4191 -PyQt6/bindings/QtHelp/qhelpfilterdata.sip,sha256=8VHgnU5HGvMDlsNbvr3MFJU27L6x6InRH2B6Jv8bYAw,1430 -PyQt6/bindings/QtHelp/qhelpfilterengine.sip,sha256=UTZJjWAmHv1nEE3p4InrV9MfaRNy-hE0ZrmOHav26JE,1896 -PyQt6/bindings/QtHelp/qhelpfiltersettingswidget.sip,sha256=_KNhSAfZdrJjBHue5dF_xPYp92WAnoa2hyso9K0aKe0,1464 -PyQt6/bindings/QtHelp/qhelpindexwidget.sip,sha256=vDJPM6I0EkUnEurpZ3TqmaUxRyf1ojnuhfiYElJ_ENg,1850 -PyQt6/bindings/QtHelp/qhelplink.sip,sha256=OPCABl_dy0qFPL46bhI-jBhNLsQxBgscquthb_5wCtI,1048 -PyQt6/bindings/QtHelp/qhelpsearchengine.sip,sha256=y_SldWwL94Fa8UgWuNiEiWHNFvqrpGlqGIfDdy9q5Fw,2406 -PyQt6/bindings/QtHelp/qhelpsearchquerywidget.sip,sha256=BUNGIBIWHeo9QkThHL5IBm_SukN_SoRZB1hBzzS3nbc,1559 -PyQt6/bindings/QtHelp/qhelpsearchresultwidget.sip,sha256=COiPh89tiEp8fgE5zstBiPLJgn0MkWO8ldUqycI19to,1229 -PyQt6/bindings/QtMultimedia/QtMultimedia.toml,sha256=Z7xRRbsu391wFqyaXIZteDxgHda1JuYhuLgcs2Je-tw,195 -PyQt6/bindings/QtMultimedia/QtMultimediamod.sip,sha256=l8JunaF42bZtT-2nbVIxxYep50PMtVaLTM5x5t1wfPA,2736 -PyQt6/bindings/QtMultimedia/qaudio.sip,sha256=YibYcLpmQHSUc-ZbQfVnz0y0hcDDBJJY5G5DTN624LQ,1651 -PyQt6/bindings/QtMultimedia/qaudiobuffer.sip,sha256=8Grd_K_7r8nowovy8TkNsACufiQHOzdxaOMz3l0jOu8,1993 -PyQt6/bindings/QtMultimedia/qaudiodecoder.sip,sha256=jETP8DdfvZ-C6txi10IlMBcvcCwlsCzEfw1Q1lRHGyY,2213 -PyQt6/bindings/QtMultimedia/qaudiodevice.sip,sha256=XGJ4F5FR-EQAuKhA9NIAjPVxWxYoXE1hE9VTe1H06Zo,1930 -PyQt6/bindings/QtMultimedia/qaudioformat.sip,sha256=EDceqyzMdi3C99aU5y0LDzbIG36MWTni4fOxpXL9gss,3341 -PyQt6/bindings/QtMultimedia/qaudioinput.sip,sha256=SMaln0ti8hleT8kOkkMe60-cQZ7cpCt2T0_RUSsL_Pg,1572 -PyQt6/bindings/QtMultimedia/qaudiooutput.sip,sha256=Np0BaGlZj_ea2-wR2oumC0EeKdo797viZrbzzWS33SA,1574 -PyQt6/bindings/QtMultimedia/qaudiosink.sip,sha256=gyvUX7dvJ035OWFZ2TO7CtYdzvl0EI6rZyVKCUvuduw,1845 -PyQt6/bindings/QtMultimedia/qaudiosource.sip,sha256=48Iee8SZOTAoTV7joxm40Flxm4B_-Qyvh7QostS5254,1869 -PyQt6/bindings/QtMultimedia/qcamera.sip,sha256=ZK_Zl7hHfKdqbfg_pzko12rYbdLa0KjuJep5t7TGbos,7579 -PyQt6/bindings/QtMultimedia/qcameradevice.sip,sha256=1hPvKmUWMQZQ53xlG8HyuV8HKIminbd0zaVGN2T_12s,2162 -PyQt6/bindings/QtMultimedia/qcapturablewindow.sip,sha256=dPHrEEd1CrsGMtBJ2_IfVt_UY3qz81C_riQ-HFv6aMc,1494 -PyQt6/bindings/QtMultimedia/qimagecapture.sip,sha256=FgExZGyCEMj3Yj93jSDaD4_qex3rfcB_beswC9ffgD0,3037 -PyQt6/bindings/QtMultimedia/qmediacapturesession.sip,sha256=wPCy7dz1QnT2d2nTo8VQ2bjFjTwqKaMv7T0jnGp0TxE,2380 -PyQt6/bindings/QtMultimedia/qmediadevices.sip,sha256=XLfiw2QQgR_sdHnXSJIhwViFpEYBJK-8-wGrM8Kb1Rk,1547 -PyQt6/bindings/QtMultimedia/qmediaformat.sip,sha256=WvszQRoKw0nljFbKV9fI-GxO1tT9ybNuOsGhKUOyCbA,3349 -PyQt6/bindings/QtMultimedia/qmediametadata.sip,sha256=LG38f00DNj5lIB5YItExDKqY0Sqr9Yoa2TIq4oGp-iY,2186 -PyQt6/bindings/QtMultimedia/qmediaplayer.sip,sha256=xm9FLdrQ3JQ9pWK5iDpNYtc-WbEG9O5_CAC3mfhBh1Y,4128 -PyQt6/bindings/QtMultimedia/qmediarecorder.sip,sha256=d8iZarPEsYKmgsQRBVV9ryE9Qw6hVK3w7ebPU1zc-cI,3687 -PyQt6/bindings/QtMultimedia/qmediatimerange.sip,sha256=Vri-_iyLYpCr2JbMwVJWuoJe3dL0pJg_za6HAs3GtD0,3046 -PyQt6/bindings/QtMultimedia/qpymultimedia_qlist.sip,sha256=7GY1p8iwdsW55ehtM5mcUNmziI8QusEyBB0ttD4_zTk,10957 -PyQt6/bindings/QtMultimedia/qscreencapture.sip,sha256=G0tLuNbZz3CED4GQn647khdbMwDyPkVjSMlSsVM66-E,1802 -PyQt6/bindings/QtMultimedia/qsoundeffect.sip,sha256=8eS-VZKCH5FHay7IJ7QFM9o8UB7w14lFK0HYWkpN57U,2205 -PyQt6/bindings/QtMultimedia/qtvideo.sip,sha256=9PAogNap4FaPOwgqVqcVKUIxjOItuIWw0vmTTvFuXv4,1158 -PyQt6/bindings/QtMultimedia/qvideoframe.sip,sha256=r3xWol2MimOvfbUpsF4DRI9vEteK4thFGuiTNGLtfsc,3312 -PyQt6/bindings/QtMultimedia/qvideoframeformat.sip,sha256=QftSTnostXhRuDBGU3kRuGCHNRSTREBFoiQtYsjodxo,4710 -PyQt6/bindings/QtMultimedia/qvideosink.sip,sha256=E310f5qYdtSfpD7icnzQa936iuFXvwqRqkEWkXVhLKQ,1515 -PyQt6/bindings/QtMultimedia/qwindowcapture.sip,sha256=gwRnd_Uu1hecLC-0O66chZ6oKQX4hTlr4eXWnM18ITU,1842 -PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml,sha256=__gIcWlylW4ju_Jl4VUl6lXlBQQWr_8Tger_O5TTbAQ,202 -PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip,sha256=Rb25UqcJL5_3YrqppW4HnvpR7XpWiqVZgJHKYwOeIjY,2083 -PyQt6/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip,sha256=HRoAA137VgB8ek8ApPjFvliXDO7qQb0iiwDfE6GEjko,2014 -PyQt6/bindings/QtMultimediaWidgets/qvideowidget.sip,sha256=vwmyjcx6dCV7529GAeZ3eVdvlZL_0r5xDu3_isWVlb8,2406 -PyQt6/bindings/QtNetwork/QtNetwork.toml,sha256=VfKSggAMSyNBTNIwL2GqBl9YO8ZcZGrMsdtzXHWNRbQ,175 -PyQt6/bindings/QtNetwork/QtNetworkmod.sip,sha256=GBRl-jJ__bVKMJUCXUZgXVV6KLKun4bFMoftd2rkxcA,3149 -PyQt6/bindings/QtNetwork/qabstractnetworkcache.sip,sha256=_vw47_B2mctgL8x63tQ8ahtLJ03BBKiLg1zQZw1A2KU,3002 -PyQt6/bindings/QtNetwork/qabstractsocket.sip,sha256=Y6KHDncapLGOQL1DILoMLNT5RxJKzcza9cudGDxmpDs,10977 -PyQt6/bindings/QtNetwork/qauthenticator.sip,sha256=hfn1Y9YWZh9jsX3wBdZ2hfezRG4_nS-fK444YKxrkT8,1584 -PyQt6/bindings/QtNetwork/qdnslookup.sip,sha256=-BQTaoUoLNA_425KPI54_urDRKtiBysy_0cnD0wRdWk,5111 -PyQt6/bindings/QtNetwork/qhostaddress.sip,sha256=gUht39eRWmSX8Sw6p_uBtXSE3Y7h4Ps0G_xsLpGR7ZM,5697 -PyQt6/bindings/QtNetwork/qhostinfo.sip,sha256=XEN_oC9Tn13FLPka4oUKMHqRq1Hjf1ZWji63n_leLQY,2987 -PyQt6/bindings/QtNetwork/qhstspolicy.sip,sha256=cj6bDZDgBoE65D5gzSvLNl8dfKg2jfw-jYTaqGV_50o,1906 -PyQt6/bindings/QtNetwork/qhttp1configuration.sip,sha256=ktClHSWjG7pRUqLl9UV3V88ZGdHI9zEkiOePngYaP3M,1632 -PyQt6/bindings/QtNetwork/qhttp2configuration.sip,sha256=oR_ueD5OoN6vu23qHhwQqDpN1a2ymfI3uvvgejZrOaQ,1863 -PyQt6/bindings/QtNetwork/qhttpheaders.sip,sha256=AiYd5SV24PvFA5PrkGyHg3oMJSDLTRbqgfDUL4S8lRs,6777 -PyQt6/bindings/QtNetwork/qhttpmultipart.sip,sha256=EJnQa1maacE38ZdXQE1Z3osQnTdVa9CORq8TJfbLZrM,2118 -PyQt6/bindings/QtNetwork/qlocalserver.sip,sha256=dRgo40QjsNdxVr0KR-1yBVqcVqzyokcsYoq-4cMiM5o,2424 -PyQt6/bindings/QtNetwork/qlocalsocket.sip,sha256=I5WofloO7hIbIPO9s6-EpwhFnDs0gSTAqh0_lHkoJdg,6746 -PyQt6/bindings/QtNetwork/qnetworkaccessmanager.sip,sha256=ljYGL6dfJPrsyqv7y5HShWPfpa0IwIhbLrTJ1z3NN_w,5135 -PyQt6/bindings/QtNetwork/qnetworkcookie.sip,sha256=ZfJXwjio8fJ1DJPXFc4K55uoGWRQY4QaBqnkZzexzoo,2660 -PyQt6/bindings/QtNetwork/qnetworkcookiejar.sip,sha256=Z6BK3jAaiNv3WK1-18IALcPjMPg2i4hf5QB7wekblX8,1726 -PyQt6/bindings/QtNetwork/qnetworkdatagram.sip,sha256=FLTc_EOlyivxn4HzVVd3FqP7MGkHJHH9vPZn0xnda_8,1941 -PyQt6/bindings/QtNetwork/qnetworkdiskcache.sip,sha256=2GePgPepoTW8Km5q1e_7cq5eAO0hs4xfOSfPtJXq7HA,1888 -PyQt6/bindings/QtNetwork/qnetworkinformation.sip,sha256=GeDHyRkl8Ab-gzZcLH3hzpvMF9bvwyC--EuUnIp0UjA,2957 -PyQt6/bindings/QtNetwork/qnetworkinterface.sip,sha256=Kt3x6-FH4gXEN42Ysqeu6h_M3395WQc8U05CmbpbdZo,3720 -PyQt6/bindings/QtNetwork/qnetworkproxy.sip,sha256=oxAB5TsEVRWkSIZRpiTgF9guyeFjmK3zD8KOvdFdIs8,5091 -PyQt6/bindings/QtNetwork/qnetworkreply.sip,sha256=HOoE8TlCOihKPC0Lxe1dT_C99B2U4BcTHoBUbOkRTF0,5938 -PyQt6/bindings/QtNetwork/qnetworkrequest.sip,sha256=qjVSaDe4ioLLsVDvhfRP1LlnwHm9laD8kENCcGCisrk,5416 -PyQt6/bindings/QtNetwork/qocspresponse.sip,sha256=TW5wZhG-ufYICuU1fLM_f_bgbGtZyRWacDZ_uJTbg9U,2020 -PyQt6/bindings/QtNetwork/qpassworddigestor.sip,sha256=uNd_JBrxWGA4AquY-VmFTHjK83NWfCXS4HGZf1skxxQ,1379 -PyQt6/bindings/QtNetwork/qpynetwork_qhash.sip,sha256=WySI8Y96YyrWz35DmtVL8ExYgRMLcQPrT92Ya3uOEP8,3458 -PyQt6/bindings/QtNetwork/qpynetwork_qlist.sip,sha256=n2vFfAy4bnKGvHTvUpEldHX960uysOs7qMO0L8iICaU,7009 -PyQt6/bindings/QtNetwork/qpynetwork_qmap.sip,sha256=2zZrKRCaRK4rjfqCGTeEWFYs46-gZ1J1iLRCzg1QoHM,4985 -PyQt6/bindings/QtNetwork/qssl.sip,sha256=1JgKPktywp9g4b8Lq1iJg1mneYhLSoaLcfXdtSwPUpY,3643 -PyQt6/bindings/QtNetwork/qsslcertificate.sip,sha256=Xseq-pKWMkmBZs49MSMDvF2HXws7An9T5DCfCkwqXz8,3763 -PyQt6/bindings/QtNetwork/qsslcertificateextension.sip,sha256=X5qPc17o6kIYKYe0Ge6m_zRXZLMYFy05F508SU3x-Pg,1426 -PyQt6/bindings/QtNetwork/qsslcipher.sip,sha256=6aUt68Q_LS6XLHdEf7p7y2RwytR68YUO73WRrRFdf1I,1694 -PyQt6/bindings/QtNetwork/qsslconfiguration.sip,sha256=xve7aMmQTJp9t7YbLz_8z43HCUEru-OPIVUumyW_cmw,5201 -PyQt6/bindings/QtNetwork/qssldiffiehellmanparameters.sip,sha256=yuOO06I2a7M3gtAIpZ57y0U65yh9Iz7X0pfvSAt5zb0,2171 -PyQt6/bindings/QtNetwork/qsslellipticcurve.sip,sha256=qCz8qt9U_zjvBfwH8HDz1wmt4THNKoRQznapbhzYJJU,1594 -PyQt6/bindings/QtNetwork/qsslerror.sip,sha256=YA_Kyq95OOuySwwo2fvT3PN35uQfpPvtBRi1butRqHI,2803 -PyQt6/bindings/QtNetwork/qsslkey.sip,sha256=LBGlJV5f0-d-euwr3H36VkII80z0AqTdGXaAbBAlLA0,2021 -PyQt6/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip,sha256=iQAurd7P_3vpxj61UK9DlsFzEV43j32anY_bi_xlQbI,1883 -PyQt6/bindings/QtNetwork/qsslserver.sip,sha256=4CwBaH1v3_FYkuGikPuM6Q7VRAtD1OMyxCsh3Pk9wBs,2157 -PyQt6/bindings/QtNetwork/qsslsocket.sip,sha256=cow3_ui110qeCKhUse_XqPsah8F5XrjeoMVx2cnHAlI,8628 -PyQt6/bindings/QtNetwork/qtcpserver.sip,sha256=ks7iS04sIA1dANV7gacgERTMZ2IjjbVLzPV5_l62Jqs,2346 -PyQt6/bindings/QtNetwork/qtcpsocket.sip,sha256=KM4_PYNO4EhUKHQX8RR0jkLOpZSKnENlISqAuae3MCs,1141 -PyQt6/bindings/QtNetwork/qudpsocket.sip,sha256=AXVIhsCVK2iCfWaobyTVm3I2nbya9e4kjqZHWt8kASc,3242 -PyQt6/bindings/QtNfc/QtNfc.toml,sha256=_gs588-MK8bIl0clEW4ycFPw9euA3AJcOz2vWsBjCGQ,171 -PyQt6/bindings/QtNfc/QtNfcmod.sip,sha256=uV-_F12ps5XrrXZSGxol5V75pEAFse8sgvTlvlyrDoU,2146 -PyQt6/bindings/QtNfc/qndeffilter.sip,sha256=M20dZYb7by9PKB_uuBa5qGeFzKvbMKPUbc9r8uMegG4,1772 -PyQt6/bindings/QtNfc/qndefmessage.sip,sha256=v6aT6wMeUMQYb20fHfVWbkZh_0uEaF1o3vtCncpnUAw,2185 -PyQt6/bindings/QtNfc/qndefnfcsmartposterrecord.sip,sha256=16wefLWAQpn8UVK7ObFJMiDgb0gNHlc_v75HNsiJ_Ck,3365 -PyQt6/bindings/QtNfc/qndefnfctextrecord.sip,sha256=ztbwMDNOByfwomb-OmA7bSMGjydGwZtMLaXhq0iKVEk,1478 -PyQt6/bindings/QtNfc/qndefnfcurirecord.sip,sha256=p59h1wZJoU2BzFQGFRUArfxww97jT0wf2pW7BlqFLaY,1220 -PyQt6/bindings/QtNfc/qndefrecord.sip,sha256=QWH9kNPG6rOqvHSkX6dcbi-0aYBW78CxsYuNwToM2yQ,2536 -PyQt6/bindings/QtNfc/qnearfieldmanager.sip,sha256=46OLK1oMzth1-sQPooDOgLTdkkpG3CZByYOiri8fbcI,3021 -PyQt6/bindings/QtNfc/qnearfieldtarget.sip,sha256=Fld98yDc-dIFMrH_X1YsUbrVSSJ78T9QG5nqfdr9CiE,3257 -PyQt6/bindings/QtOpenGL/QtOpenGL.toml,sha256=hy20VnWE7t8v194WCpuFUmErQMC3D_YkhsXthbUYIzA,191 -PyQt6/bindings/QtOpenGL/QtOpenGLmod.sip,sha256=NOHtlZDaYsDJ-wZaM5A2g0IWGtfVNFtHNjkcTl7PEYY,2618 -PyQt6/bindings/QtOpenGL/qopenglbuffer.sip,sha256=y68muhmq_fF8SJdfvA4pXZQUo_l1ZiQ4cPfWa8q58OY,2645 -PyQt6/bindings/QtOpenGL/qopengldebug.sip,sha256=mGqhqmqvGDXcUxP2c6aviyNa9xGNS8WpcrH2AplHf2E,5920 -PyQt6/bindings/QtOpenGL/qopenglframebufferobject.sip,sha256=puMwbEYp3csR9uSBo6ko_irKFPcM8IGUd_ZM4zsR-Ok,5082 -PyQt6/bindings/QtOpenGL/qopenglfunctions_2_0.sip,sha256=VAsRKsWkRNSHy8V3YTufdewcjnxVg5lJBgJqvjDU3Ng,111272 -PyQt6/bindings/QtOpenGL/qopenglfunctions_2_1.sip,sha256=2Jq3h8wZZiHgOptkcmrUVrMAUV9Q6lALZvcTiAbfHyo,111317 -PyQt6/bindings/QtOpenGL/qopenglfunctions_4_1_core.sip,sha256=HQ-9XgsABrKwPLYH5oOnSwbhw0cE7hq_dZZg0Xapx4U,42574 -PyQt6/bindings/QtOpenGL/qopenglfunctions_es2.sip,sha256=yV1B1wx7PODdfyURykfJ3D-M2274DAqPLaCDcIDBdDY,28963 -PyQt6/bindings/QtOpenGL/qopenglpaintdevice.sip,sha256=TTY4rPx_f5EKTGI2ZqG4Hy6DjfnQKUcfd-_WLHX-moE,1758 -PyQt6/bindings/QtOpenGL/qopenglpixeltransferoptions.sip,sha256=EyWd1eVYoJ3TX_ZHQfzDgzOgVaG3nCAPjOoEc3H5Za4,1865 -PyQt6/bindings/QtOpenGL/qopenglshaderprogram.sip,sha256=rQhT9QcMpzGfGuEyyB7ZTFM8CaHTYJp2mn6kp3quu84,15913 -PyQt6/bindings/QtOpenGL/qopengltexture.sip,sha256=MdzsFzU1TIjs2FxOo2x-6VtOr-OCUxfVBcyy1C_od6A,14995 -PyQt6/bindings/QtOpenGL/qopengltextureblitter.sip,sha256=BmPu9yl6wiuAiQukmdwDScgOP__m6t-GHIOvjSXYHp4,2010 -PyQt6/bindings/QtOpenGL/qopengltimerquery.sip,sha256=A7mTnq7qn69Q17m7slZwMn5Hxvozu1Uvg2dFsjydPog,2109 -PyQt6/bindings/QtOpenGL/qopenglversionfunctions.sip,sha256=B919y4ABOGAJIxlJPhYol3EjwOm8sVVhmtFUFQXsZv0,1168 -PyQt6/bindings/QtOpenGL/qopenglversionfunctionsfactory.sip,sha256=-bTPocPqJF2NfcibUHhdkHPUKSQs0H-PKL1pvSbTR7o,1350 -PyQt6/bindings/QtOpenGL/qopenglversionprofile.sip,sha256=xBgT2P7bPitAx0YlRmmtFoogr01RgGYk8T9RlzqfpSU,1814 -PyQt6/bindings/QtOpenGL/qopenglvertexarrayobject.sip,sha256=9KzoL1gLYTQl3UvEJ8xE4g05z5Y_zJbzB15qXnFtInA,1916 -PyQt6/bindings/QtOpenGL/qopenglwindow.sip,sha256=DtHRi9ClrOSUoddNoaQ7vT6zXegwIo32U7H2GMnO1AY,2180 -PyQt6/bindings/QtOpenGL/qpyopengl_qlist.sip,sha256=2uUODtMqXkjhUObIobbBlKLdETh0Z807PElZrpFRpek,2926 -PyQt6/bindings/QtOpenGL/qpyopengl_std_pair.sip,sha256=fBeZ3RjooNt99WGtIX-j4L8IFTolXTZ5JEnSJHG3ep8,3170 -PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgets.toml,sha256=Q1PUWar7xG65OjrWBv-ZYSTfgY_a9tLN_abs-60VHhI,198 -PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgetsmod.sip,sha256=bXXNkT0RPo22Z1onHsOvTzfZasfFUC4FIzjw1TE_IF8,2059 -PyQt6/bindings/QtOpenGLWidgets/qopenglwidget.sip,sha256=XEv-0TVo3IAz_qjKflWGrYHcOa23JAtky46H3bkEPtw,3237 -PyQt6/bindings/QtPdf/QtPdf.toml,sha256=jp-WqMiKGsKnyXhsA_o8eGWphQik52MwGvMNFnSqwcg,188 -PyQt6/bindings/QtPdf/QtPdfmod.sip,sha256=GV3qlcNFiRvHVZaLzhetGAwESHh9twdU_8RNaOrLFVY,2196 -PyQt6/bindings/QtPdf/qpdfbookmarkmodel.sip,sha256=qe3b9iEiD2eIBYj2g5ljIh3S778Ekgrj0ljtDmXLu5Y,1883 -PyQt6/bindings/QtPdf/qpdfdocument.sip,sha256=_kTg-rktBKSWVZWmVLUOm8mbAlDZWAz5yZgsE8Zy5gs,3729 -PyQt6/bindings/QtPdf/qpdfdocumentrenderoptions.sip,sha256=1RFBiMH6EudLiLs4GFYepAcSfP9H5fj_qClwStB7rxU,2081 -PyQt6/bindings/QtPdf/qpdflink.sip,sha256=gq65R7FyvZgHr6P5S5_LO4Oand-er30f2efBxQPXX8M,1460 -PyQt6/bindings/QtPdf/qpdflinkmodel.sip,sha256=AJoo3bhuPomb1iub7zOJyAdAy0v555pwnVMam7iv6UI,1746 -PyQt6/bindings/QtPdf/qpdfpagenavigator.sip,sha256=araaM8pvhpinLyr8HEfcIrcSJxuISVePY9YBQ3xBI1s,1834 -PyQt6/bindings/QtPdf/qpdfpagerenderer.sip,sha256=71SWvr0yEFT3SgkhcrC0FgjJxkbnutknUHqmfmvyoZM,1688 -PyQt6/bindings/QtPdf/qpdfsearchmodel.sip,sha256=2k8h72etrvJhRejJTgCp7PGgTVLBSobQaMovJFOrSNk,1907 -PyQt6/bindings/QtPdf/qpdfselection.sip,sha256=08kIMEV9qkudcuKtS9u36g7PZSXIe9jsfLaGVLTcMsc,1430 -PyQt6/bindings/QtPdfWidgets/QtPdfWidgets.toml,sha256=17tkiCi5y_DywurVHpIPhj3COAOo85ilEKCaw_lQExA,195 -PyQt6/bindings/QtPdfWidgets/QtPdfWidgetsmod.sip,sha256=Fv0dsMcMN5gxk1-dH7FvAXS76PB6kyab9RDwHMbesQ8,2042 -PyQt6/bindings/QtPdfWidgets/qpdfpageselector.sip,sha256=4mB1u9-nnBSyp-K2fjqbdp8jZwSwA_4IeMSdsG-fzRc,1542 -PyQt6/bindings/QtPdfWidgets/qpdfview.sip,sha256=CyTAOMqwyeActLe7M4tMR4yVlLeX-5Rx8nFUNx96yL4,3739 -PyQt6/bindings/QtPositioning/QtPositioning.toml,sha256=0ROVxFl8lWMzxxfdUn1eUBTLA5rO3sa5vaE_e3_3ycs,179 -PyQt6/bindings/QtPositioning/QtPositioningmod.sip,sha256=5kTEltImPDVMOR2Xh5F50LdqgbJmTSM_JDtAIQ1J3Lw,2365 -PyQt6/bindings/QtPositioning/qgeoaddress.sip,sha256=d1ipjF03QMi9HVh0BBHzkI3cSHr5fBJwgm0P4YSOvig,2273 -PyQt6/bindings/QtPositioning/qgeoareamonitorinfo.sip,sha256=4F7cURTuLO_so7S48hVz6ab5T0woYQnrFu1CziNNZhE,2226 -PyQt6/bindings/QtPositioning/qgeoareamonitorsource.sip,sha256=UPfduifLy8JkU8e48IVLCRcbfv59bKIDGJxYYoQNnI0,3009 -PyQt6/bindings/QtPositioning/qgeocircle.sip,sha256=krSUkhx3XVLUbeijYEo3ZSw5ucgzJtmbC8mO5i0WlE0,1864 -PyQt6/bindings/QtPositioning/qgeocoordinate.sip,sha256=WLp7bWOLtbY5690_qc-dQ4CJSbszdpZ6OK7i2VdJsjI,2775 -PyQt6/bindings/QtPositioning/qgeolocation.sip,sha256=rXg08Q-uHzQ3rhVLasK2AGAjWNmzMEiDCWPyx9lqjeU,1850 -PyQt6/bindings/QtPositioning/qgeopath.sip,sha256=UoL7yJNUYbRBMGjovgF6X3gURjGDwingr5jyR0tXOD8,2377 -PyQt6/bindings/QtPositioning/qgeopolygon.sip,sha256=2AuQFPua_ftToBo3C4IemoPAkVdaNZ5J7p8XgoWrHBI,2608 -PyQt6/bindings/QtPositioning/qgeopositioninfo.sip,sha256=y40fdLZ5arBVBwFFjB8VmtihoBoPMdYfkGeRlPyaCIA,2502 -PyQt6/bindings/QtPositioning/qgeopositioninfosource.sip,sha256=2SeNpLGnYaQ8mXWTK8747uNVzlIJDwkTKUH2bNL5RVI,4142 -PyQt6/bindings/QtPositioning/qgeorectangle.sip,sha256=mX5iX6GaTny6CuTphP4N_cU75mKYKD424DJpUF3TKwE,2839 -PyQt6/bindings/QtPositioning/qgeosatelliteinfo.sip,sha256=2ZaDxFDt_hjKXCqG5n5RVSFh-349ezvudMJ6hw6_ZDs,2343 -PyQt6/bindings/QtPositioning/qgeosatelliteinfosource.sip,sha256=pyDf4A3lNS7utbEScMG6O8RJipN2Q4B51CY7YY4RTz8,2647 -PyQt6/bindings/QtPositioning/qgeoshape.sip,sha256=6fC8T07siAiNsyjWJ-syy3tO6uJpFFg2FYTNMoQmxN0,2434 -PyQt6/bindings/QtPositioning/qnmeapositioninfosource.sip,sha256=6N8eoVV7B8dTVhDJtrXMi09W0OKXoA5kZ9umRqhm_A0,2212 -PyQt6/bindings/QtPositioning/qnmeasatelliteinfosource.sip,sha256=CjdvuYWDddaYMqqN82LmRztqpRO-jGrzAyWehFofr4E,2455 -PyQt6/bindings/QtPrintSupport/QtPrintSupport.toml,sha256=LLpJCX1s79YBssDMLfI1p6BXKvyRs0JXNt-XLbP13Po,197 -PyQt6/bindings/QtPrintSupport/QtPrintSupportmod.sip,sha256=hRFPjuQ33Hqa2TEwc5H6_QZoRKaFSpyMFHjcsTCdGQY,2261 -PyQt6/bindings/QtPrintSupport/qabstractprintdialog.sip,sha256=UisS5dmVxPfDfjyQexVIvRIl6T3JoEsBemTTXEhJgDw,3966 -PyQt6/bindings/QtPrintSupport/qpagesetupdialog.sip,sha256=F2kExAXnNNwNROZk3KNo4hZ750KO3qAE5gypWpaJUhY,2576 -PyQt6/bindings/QtPrintSupport/qprintdialog.sip,sha256=5pTzUKPvNu5j8CZZH-4H9axG8PGyiur6nOkAiBWMkro,2966 -PyQt6/bindings/QtPrintSupport/qprintengine.sip,sha256=b458jiHS-vwNxDy2SKfXYT6qa_CZ8q0MQpXDUlEtbLA,2327 -PyQt6/bindings/QtPrintSupport/qprinter.sip,sha256=zlNCfGzrC97idEzDAT1VMnrFA-obbbvPnycVNp5CpdA,4679 -PyQt6/bindings/QtPrintSupport/qprinterinfo.sip,sha256=VTuYWX5Hol5DaHdyYZ2l03nOPwA-UL5lAeH2RjUAcUk,2194 -PyQt6/bindings/QtPrintSupport/qprintpreviewdialog.sip,sha256=wt2CuxxHF2pAUt7Pj1ZdFqq4ZOcaQ0MOSDzbtAjNh7U,2041 -PyQt6/bindings/QtPrintSupport/qprintpreviewwidget.sip,sha256=gyZNPYag3oTkJxDTGnjs7El3nIed1ItdmbeNYwGDK70,2565 -PyQt6/bindings/QtPrintSupport/qpyprintsupport_qlist.sip,sha256=u9-z1sZOdx6k8F7ZoBpXHYoLJYGsl4ydphtojLezlgw,4887 -PyQt6/bindings/QtQml/QtQml.toml,sha256=cHBRR21nugUdPCkOloGDMzVMc0Kwbv8T4dX4V0GmDUE,171 -PyQt6/bindings/QtQml/QtQmlmod.sip,sha256=skGKCOYZ5iWaaCOZ-9_g5kkuFQ1U2gnLaH79JSmU4qg,2708 -PyQt6/bindings/QtQml/qjsengine.sip,sha256=MFsFAC-M_5YZA7nnwU708sXEkl5oHsPR5InMTIUgDYU,6140 -PyQt6/bindings/QtQml/qjsmanagedvalue.sip,sha256=j0BR7Ehl_yKgOB_x_sP34QH7KWp0gTk5WT4TG4s31Ec,3449 -PyQt6/bindings/QtQml/qjsprimitivevalue.sip,sha256=rmTzuqogfpjWVuurLw65odrauxgudvXL5Sb-2Kvgpe4,3354 -PyQt6/bindings/QtQml/qjsvalue.sip,sha256=F0tOx5U7WLK3KYPgaR65G0SYPdb5uwwwEZIl4h1s8io,3624 -PyQt6/bindings/QtQml/qjsvalueiterator.sip,sha256=ICbo7Xidei5J060YaK3wvfPbWg6iGbI788s_90CtRKE,1267 -PyQt6/bindings/QtQml/qmlattachedpropertiesobject.sip,sha256=QdWwOdxkKQpwuntRsuTI-CufA4Wemm42TLgu9-WW4E8,1412 -PyQt6/bindings/QtQml/qmlregistertype.sip,sha256=bHYIZy5tyTQYpv6MTRHk2-Nm8SrzEmSifstlEV_HAtM,2851 -PyQt6/bindings/QtQml/qpyqmllistproperty.sip,sha256=AN4diKENTYNkeO-thKYoTX0Aq4orjtbTCgKX-kx2gkg,1413 -PyQt6/bindings/QtQml/qqml.sip,sha256=ohEjhC0g7zDrdeXb9Idd63ErJ20A0NWG9YMSuG-fllg,1852 -PyQt6/bindings/QtQml/qqmlabstracturlinterceptor.sip,sha256=z4Y4i4g29seU-FUCK2-1FMzoLXXAkKAoq_1CheOwgIM,1354 -PyQt6/bindings/QtQml/qqmlapplicationengine.sip,sha256=CXRIoen6w8w80zuLBz07stRlWDjCNS2xMVN2apXXBkE,2109 -PyQt6/bindings/QtQml/qqmlcomponent.sip,sha256=jL4CjQppB1Y7bYvCVVtjsUrhb8pM0LOiBQFeW6hYYlA,3504 -PyQt6/bindings/QtQml/qqmlcontext.sip,sha256=NiqA2YBrFWxLCXzJ3hxlWLVOoe95idW3kCZt6FJVNHE,2013 -PyQt6/bindings/QtQml/qqmlengine.sip,sha256=8245VcZ4_ip6Bt3K8izT8POsGZX2J9tD97LjwuMtyyI,5873 -PyQt6/bindings/QtQml/qqmlerror.sip,sha256=Dn-IJEXzse61mpJvRoxJhFM1fSHkC_bb-ecKi2kJULQ,1624 -PyQt6/bindings/QtQml/qqmlexpression.sip,sha256=BIHPD6uOhCyFnw-KKfrQ_a3UHeFANJ7xZyQ6nnrYT70,1932 -PyQt6/bindings/QtQml/qqmlextensionplugin.sip,sha256=oQcnuU5LkflMC-5_fwVrDLJM_rmLXk0aZrsxBaBMJq8,1583 -PyQt6/bindings/QtQml/qqmlfileselector.sip,sha256=O81xibm9VBy--1vntVcSttywc9jkrQM-RZ8OGNxmYiE,1310 -PyQt6/bindings/QtQml/qqmlincubator.sip,sha256=r8G7R4PA38ym0hf_dkNuqfU4OPLqrU6g6q5n0DtUmzs,2332 -PyQt6/bindings/QtQml/qqmllist.sip,sha256=OxPtWmdgvV7hGldSjyxfgwlnkJwDk6q_Wz-vPpvY298,1898 -PyQt6/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip,sha256=wW6D-i1hB8F57Pq6gicWSEZTfgQ4FP01zVA6n7-7_5U,1199 -PyQt6/bindings/QtQml/qqmlparserstatus.sip,sha256=1GYgxjLPLUUCJmeFSJ6cNzt5nKqC2NvBmlnRX3stZ-w,1235 -PyQt6/bindings/QtQml/qqmlproperty.sip,sha256=hknnoj2SqXY8y406YRW5jLBoA-j0on-D3hy7GkfUvPA,4182 -PyQt6/bindings/QtQml/qqmlpropertymap.sip,sha256=JQm55Y71n_Yl0QUQEYGjQ3zZkqhE3cfS03NvmWmp7x4,1776 -PyQt6/bindings/QtQml/qqmlpropertyvaluesource.sip,sha256=xskBjAyQOeRuTyrjfvDYSiaUKzoH-KQ_EqnzEM1FB0E,1254 -PyQt6/bindings/QtQml/qqmlscriptstring.sip,sha256=01BYpFfekiapt8mo5-LmywkEq3StVNR9aU2qNb-A8jI,1457 -PyQt6/bindings/QtQuick/QtQuick.toml,sha256=Gg5Sy5rumAOPeU2FA7DYEXZIwmna70jrlpD54c-EQFY,190 -PyQt6/bindings/QtQuick/QtQuickmod.sip,sha256=Gky-OaS2QgwJTrEN75BvGp7JVMoZOFc9SPngtmrk_HY,2877 -PyQt6/bindings/QtQuick/qquickframebufferobject.sip,sha256=5FwBJphlJwfMQzAqgksH-_2nuvYvaykS8HTFft7bzRA,2555 -PyQt6/bindings/QtQuick/qquickgraphicsconfiguration.sip,sha256=dOg1dzbN8GSHKLu3KPhLPVJnglExkW4AyBG6IqceUm8,2425 -PyQt6/bindings/QtQuick/qquickgraphicsdevice.sip,sha256=SiwDvpIR3OgGaS7cF8q94DiP6WQzEEfEhIuEVuisdcE,1298 -PyQt6/bindings/QtQuick/qquickimageprovider.sip,sha256=B6QK_DGvAorudGnQog9-igxcsFe0D-iv6JZd3AgDYbM,2848 -PyQt6/bindings/QtQuick/qquickitem.sip,sha256=eT0c22Ke5zdPMgciEvX59bkC3nINnOmHGuv_ch82ty0,10390 -PyQt6/bindings/QtQuick/qquickitemgrabresult.sip,sha256=hGs8_dUQdBkkOb7LmXuG4Xb3ZAWU9Ffv5edK0k9SJ6U,1375 -PyQt6/bindings/QtQuick/qquickpainteditem.sip,sha256=MlQLIwSlakUlQGN6Nz1PF7Y2LVUwLAe1E2YdLSJ1kPM,2990 -PyQt6/bindings/QtQuick/qquickrendercontrol.sip,sha256=Z8jd7yWi45dBqacmolPmhA2yVM2CGf0NEuKqPfxxF7g,1669 -PyQt6/bindings/QtQuick/qquickrendertarget.sip,sha256=Q5N9JghhDpHwcOJkBMYkMEM87eV17fSY5wCa-7KO_K8,2100 -PyQt6/bindings/QtQuick/qquicktextdocument.sip,sha256=DBSRQW8_2kkB6k_d3jciChJyoM-JYiiAKR93un1BQbY,2167 -PyQt6/bindings/QtQuick/qquickview.sip,sha256=8XOP9I0vGMyIrwIc82nOi1HXyE8wkP396wQTWZjGNzM,2563 -PyQt6/bindings/QtQuick/qquickwindow.sip,sha256=wQl9Sx_GoWIWpc_MSr6EEiH8gdBcE017v7BZjs4XPyo,7058 -PyQt6/bindings/QtQuick/qsgflatcolormaterial.sip,sha256=SJz-b4vmy81BA1uNvTTyubW0QgwFTAYBMsQzmsjKN-U,1384 -PyQt6/bindings/QtQuick/qsggeometry.sip,sha256=j72l6zFr3tu5jiAI2K-1KPoubEx6aeFG6OgiykpPpIo,11740 -PyQt6/bindings/QtQuick/qsgimagenode.sip,sha256=oV42tH67zGOnU1AKXDCMoKv-ccWW_fp9UG0zyop2lXg,2769 -PyQt6/bindings/QtQuick/qsgmaterial.sip,sha256=3m28zp9oAvIjWAFJTL7PnVOy3x1JNY_Ramgj16dAFOY,1747 -PyQt6/bindings/QtQuick/qsgmaterialshader.sip,sha256=8_w5cI_Lncs7DpQqbzlnPsM9Lk7ZhznUVvIeOIILz8A,4807 -PyQt6/bindings/QtQuick/qsgmaterialtype.sip,sha256=UDzdtAl4vK7QmfAZqoQkqCjxLPUq15FUUvkUf54Md5Q,1033 -PyQt6/bindings/QtQuick/qsgnode.sip,sha256=qHqACaY8ZGEmJ-hMlUeLyKsdJVh84tmXvpbZIjG3Bf8,8687 -PyQt6/bindings/QtQuick/qsgrectanglenode.sip,sha256=WcubA91PXzBE4Ghtbq5vM_O64QM3i5nyyCJOyNQeQ38,1350 -PyQt6/bindings/QtQuick/qsgrendererinterface.sip,sha256=uNAX3BKY4pzqXrte8oxj7N1rbguk48Tdc2ncsNqzTBs,3241 -PyQt6/bindings/QtQuick/qsgrendernode.sip,sha256=aUyJiSLI8idBcVHaBLi8v2x3ZrMyApJz5i9KrC6hIQs,2533 -PyQt6/bindings/QtQuick/qsgsimplerectnode.sip,sha256=jz8q2jOrJF5ME9c5SV5PljJJxaB-zRHBOcOYP24ZyM8,1361 -PyQt6/bindings/QtQuick/qsgsimpletexturenode.sip,sha256=XRGdz-_NkcZrmjxqv7_mPhyouslLYC_NMIuXKNVCwVU,2104 -PyQt6/bindings/QtQuick/qsgtextnode.sip,sha256=NqfRaotFnnG7C7fAFIamB54KJkgrgCr0as1MOwTSfpk,2715 -PyQt6/bindings/QtQuick/qsgtexture.sip,sha256=mpSMk0Vyf_QYh3g7Mn0GpcMqnry0hbAYB42XzWlNLEU,2527 -PyQt6/bindings/QtQuick/qsgtexture_platform.sip,sha256=ohWUYr0C9RrEJsNjnuK8T4smM6aGDz1Jp22DCmPyiwM,1446 -PyQt6/bindings/QtQuick/qsgtexturematerial.sip,sha256=eXOegdwwe0zns39d9D9eYzG70g87J_ExDmpW5FDTBoE,2221 -PyQt6/bindings/QtQuick/qsgtextureprovider.sip,sha256=VOztQTUQxnBIzuGpaUxH2HuJTPYnA1eDiEBabHiNRIw,1159 -PyQt6/bindings/QtQuick/qsgvertexcolormaterial.sip,sha256=BW8HT4wk_hYEaJBmfOQjhpHM2w0GR68sqlXV68RcZ3E,1331 -PyQt6/bindings/QtQuick3D/QtQuick3D.toml,sha256=f4JID85eE9Z9OFeaqGO1Q7Dq6SDeG3m7VuZ0QAPRAC0,192 -PyQt6/bindings/QtQuick3D/QtQuick3Dmod.sip,sha256=Ml-mONBh3cpfubIrflSxhZgvsyo_sBKXeLGX7vl0DSw,2086 -PyQt6/bindings/QtQuick3D/qquick3d.sip,sha256=AyOC8VFBog02y_DmbcypfCg0x4f1uzB-kTLKBmAKP5E,1086 -PyQt6/bindings/QtQuick3D/qquick3dgeometry.sip,sha256=BZyp9jq9vxtCiWScfcTL7INSdS_RSS3D83MSFb0Hwc8,4574 -PyQt6/bindings/QtQuick3D/qquick3dobject.sip,sha256=deVszjknPF6TmUgnzPuiViySK-JXiynWMtTclPLMd7U,2173 -PyQt6/bindings/QtQuick3D/qquick3dtexturedata.sip,sha256=CSBhyNPXrif3rDIo1ljF_SXmZ_lcEOfT-jKxZ6MA1rs,2285 -PyQt6/bindings/QtQuickWidgets/QtQuickWidgets.toml,sha256=rB85GBviHM42MwtP5f8uIAXeieuUM1dTFka51dGMmfs,197 -PyQt6/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip,sha256=s_nBAJkv59yDjAH_bwm9JnrXdoeTUz-2s8kZPIQGFBY,2080 -PyQt6/bindings/QtQuickWidgets/qquickwidget.sip,sha256=saHX1MP6zL0hKiANOqqY2qDXT7Z_UQuwY7DGxe_3UhI,3352 -PyQt6/bindings/QtRemoteObjects/QtRemoteObjects.toml,sha256=Y6ogeslshLnY06X-9GKxuOenP_qEzmIsmaD6qJ61OjI,181 -PyQt6/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip,sha256=xOHAtY6KAfPUsGQQkZ_DXAuWV05LJdziRBTtlOXgGPE,2198 -PyQt6/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip,sha256=_2L1ZkeIDxP1GFlbc-ldqWRV301gAkRu4njRZoSiqH4,2305 -PyQt6/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip,sha256=IARTEBQSlWotW9-t4uPjpeyCO-2unSfb8KTKzKdSVjo,1228 -PyQt6/bindings/QtRemoteObjects/qremoteobjectnode.sip,sha256=CLSZapRwVCcwnUQTRUxDAj_b1UxpSHBloALv6ElJlVA,6660 -PyQt6/bindings/QtRemoteObjects/qremoteobjectregistry.sip,sha256=0VvDALwh0oYQpsDERz-SJu_5jcfxhacYez0xNpZCJyY,1436 -PyQt6/bindings/QtRemoteObjects/qremoteobjectreplica.sip,sha256=rl95_ZOeiEyJNobEvk1SEGcV4M5M-laoWG-i1CcUA-4,1696 -PyQt6/bindings/QtRemoteObjects/qtremoteobjectglobal.sip,sha256=gMAjizBc0RjrC4JrCm--VZvTzfqqbiw--sv2R1oMYOA,2093 -PyQt6/bindings/QtSensors/QtSensors.toml,sha256=uGsEYhYFxV-n01G_faFMuqJOpfKkm8Uy_8YNCUItgWI,175 -PyQt6/bindings/QtSensors/QtSensorsmod.sip,sha256=DI8OkZGoH8ZuJDKha8wb1LMplsrKCfTUiMNFMkg2vD0,2393 -PyQt6/bindings/QtSensors/qaccelerometer.sip,sha256=2B2XAWMrihPdgz7kFmLbAgVk3VrSGsAZmwcx0Uf7IU8,2058 -PyQt6/bindings/QtSensors/qambientlightsensor.sip,sha256=xHBfsM7cfdQ0iJ_qoAYqwbdoxnomEbiDvRYO7GrkeM4,1863 -PyQt6/bindings/QtSensors/qambienttemperaturesensor.sip,sha256=W4Y23EoKJtSnEbfSS4l84W7xE8LH0SCnCnU6v54IGxE,1747 -PyQt6/bindings/QtSensors/qcompass.sip,sha256=GRyx6WB705z6YB1TAAPK2TNVf6EwiLTh7US1UHVrC78,1662 -PyQt6/bindings/QtSensors/qgyroscope.sip,sha256=6BLJV1s-8v1hFRAcxAUcAE9g7USoAKhTypv6GlN3W0Y,1666 -PyQt6/bindings/QtSensors/qhumiditysensor.sip,sha256=-MF_xS7JezFo7Zb-AW85akQAs8_xRc9h7z8_wmgPiuk,1722 -PyQt6/bindings/QtSensors/qirproximitysensor.sip,sha256=4xvtp1bNUAx3si8IUWRoSpRgUT4k-UHz1PENTkM99V8,1670 -PyQt6/bindings/QtSensors/qlidsensor.sip,sha256=6h7zcKdOKtW5m7Owkznywn-yENaYRmo5jOfM9jbmz-E,1740 -PyQt6/bindings/QtSensors/qlightsensor.sip,sha256=-cF0SyGn1JRirvIZ2-N0Ujy6ovKNDMEN9DIonNNVkVc,1713 -PyQt6/bindings/QtSensors/qmagnetometer.sip,sha256=ZHqK3Z5u47IQNtmHUgqz0A6V6Wm5uL6m7cOmkWgf-NI,1939 -PyQt6/bindings/QtSensors/qorientationsensor.sip,sha256=AOykA3-Gwfr0A9-y8gYTPoAcwl2gaVqgF5HCriOFHdo,1877 -PyQt6/bindings/QtSensors/qpressuresensor.sip,sha256=jvaMX5r7EwjW3r6ZQVLjf7mR_maP6LFG6OqmeQzMjLQ,1703 -PyQt6/bindings/QtSensors/qproximitysensor.sip,sha256=85APu13Tth6BS8lgNtoBDAqyXYj99vhXjhnOj9FeijM,1628 -PyQt6/bindings/QtSensors/qrotationsensor.sip,sha256=sTHX5GehMU1HgabO_bRKAnSd2jwqt2nvuDQUzxZnTRY,1770 -PyQt6/bindings/QtSensors/qsensor.sip,sha256=CjyCNMKQxco0W1cXbHeOX57ud9TVgKvRoYLepo-kWv4,7570 -PyQt6/bindings/QtSensors/qtapsensor.sip,sha256=BsER9m2UPufQzhAggHESGpNCJ5eh0Oi2oaoP2hfjkdI,2100 -PyQt6/bindings/QtSensors/qtiltsensor.sip,sha256=7SCG3eYl0xVWhKS18yAI-9oam2bkvc1UAzvpzzOvR2w,1662 -PyQt6/bindings/QtSerialPort/QtSerialPort.toml,sha256=RnrEveJg0nZINB1Lr0eKDaNkfCtZ-uuif5jaAVbcyk4,178 -PyQt6/bindings/QtSerialPort/QtSerialPortmod.sip,sha256=ddVPOuOD3yRKIm22GZj53a1xt0DNLtyy50E0RTacElA,1982 -PyQt6/bindings/QtSerialPort/qserialport.sip,sha256=PL7hfOpNwv2XXDtMYyfE0uOBw7Ftiml03f-16H-AYOg,7933 -PyQt6/bindings/QtSerialPort/qserialportinfo.sip,sha256=NLLqeYJO8z_TAtxw4fq0f8JJslFjfUg6rvc9bBqj-HE,1768 -PyQt6/bindings/QtSpatialAudio/QtSpatialAudio.toml,sha256=sC52b4jJN-Yl6ffA2lSqoQMm99DP6OzFF8GM9sLziog,197 -PyQt6/bindings/QtSpatialAudio/QtSpatialAudiomod.sip,sha256=iJH8k6xY9inlxpnfVCSMVSZ1DUdE9ajZd7L54CUd57A,2107 -PyQt6/bindings/QtSpatialAudio/qambientsound.sip,sha256=cV25FMfYTPa0leC5N7Z4xglhUXk0VDhdkN--Sg7e4MM,1679 -PyQt6/bindings/QtSpatialAudio/qaudioengine.sip,sha256=9abwWG8TJoM6343nzadWyCHWLXWkduxfe7d8SN06X4g,2985 -PyQt6/bindings/QtSpatialAudio/qaudiolistener.sip,sha256=tgOGy6u6NTXhf25Ev7pR-O9QwV_fn3HdaooN7KNBn_0,1349 -PyQt6/bindings/QtSpatialAudio/qaudioroom.sip,sha256=zr0yOEHJiao0Hlz0LCtcizwdMgliA6LtFICKCsAKkWg,2778 -PyQt6/bindings/QtSpatialAudio/qspatialsound.sip,sha256=NYW8fxaVByt143YzTXqIeTwV_JAluStoeAQzww-mNcw,2898 -PyQt6/bindings/QtSql/QtSql.toml,sha256=2TnqfLU33ncyACTr7lSTaIzbgXC7x-IVF2RznNOb2LM,188 -PyQt6/bindings/QtSql/QtSqlmod.sip,sha256=P-DkUZfj_i_FY_mjAY6W83gYgKvqet714wPJSOZ5gFc,2287 -PyQt6/bindings/QtSql/qsqldatabase.sip,sha256=jXBbVOTIHijGLXfRNN7kwJu0Ldcj42asgmjmAxlDXKQ,3746 -PyQt6/bindings/QtSql/qsqldriver.sip,sha256=G0EDv4eMYDTCq-3kCL9-4Fm14APibESx7eYP9_GXGhE,5047 -PyQt6/bindings/QtSql/qsqlerror.sip,sha256=Qg4w7LfC6pecmqshl_TmZdQpbWnOXeTwfAvQGy8DtsU,1749 -PyQt6/bindings/QtSql/qsqlfield.sip,sha256=WDR1fnJs7J86SMrY2Xs0aGstX9XH1E0ex70JEIJ2OQI,2429 -PyQt6/bindings/QtSql/qsqlindex.sip,sha256=r6PHZ4b_Rx6oSX087DHGx1kQQm-j5pEnsDR_sYEe_98,1573 -PyQt6/bindings/QtSql/qsqlquery.sip,sha256=5Es2Yd-EeBj2BsgBhcRmycROl-0P9kF_MCGcBsQq3yk,3348 -PyQt6/bindings/QtSql/qsqlquerymodel.sip,sha256=cdrdcz6tV6TGucTjSupybO1XjcuPXUOgNmXhFpEO-34,3124 -PyQt6/bindings/QtSql/qsqlrecord.sip,sha256=__6K-HZe9JkkTpyi3X1MrymzOPYKiM54uVBh9mHFitY,2330 -PyQt6/bindings/QtSql/qsqlrelationaldelegate.sip,sha256=aofHZsDZGDaG8t-SW8ojbHNBKlJ2MzLI0sHm5Ibi4Ak,1549 -PyQt6/bindings/QtSql/qsqlrelationaltablemodel.sip,sha256=TsQPItV9QOU8ufKA7pPCuJE4mLOiBfS_N_8TZmqQINI,2605 -PyQt6/bindings/QtSql/qsqlresult.sip,sha256=Mg5762urAVF1hkcWkhmdDRUkxFB_npY3lykC67L3u0M,3765 -PyQt6/bindings/QtSql/qsqltablemodel.sip,sha256=egNxWLJNudH3rYZ7ylBT51Jrzg29xVQv4uqIAoEe7Z8,3792 -PyQt6/bindings/QtSql/qtsqlglobal.sip,sha256=QlGcPmTLp5YwW6F4A2mgTWJONo6UNuFmQsa7zRWJgJY,1512 -PyQt6/bindings/QtSvg/QtSvg.toml,sha256=miXc5-LBJYJ3gCg9Av0Vku9md9vSMUkIdE07WxhZfQg,188 -PyQt6/bindings/QtSvg/QtSvgmod.sip,sha256=CiZudzKczuPsuf7B2W2rC2k4cG9VVOsqTK3zVGrWGpU,2012 -PyQt6/bindings/QtSvg/qsvggenerator.sip,sha256=hI-nwFYTajevS71KJfEqs5wXwOe1-olglo1rPSnC3s8,2089 -PyQt6/bindings/QtSvg/qsvgrenderer.sip,sha256=ej4AWznQZ8KFbWC2iQ6p1PBVeUITIe0vy-a-6p4yncY,3297 -PyQt6/bindings/QtSvg/qtsvgglobal.sip,sha256=pM0gNxWgsJyzt0-dfyJ3bzpZBPlppnMBDYJvCEo-ZSw,1160 -PyQt6/bindings/QtSvgWidgets/QtSvgWidgets.toml,sha256=_gr27pJks4p6lDu25g4GORPl_9lrHEG1KNMqSmf0S8s,195 -PyQt6/bindings/QtSvgWidgets/QtSvgWidgetsmod.sip,sha256=-ngmLTx_NkNkZPE91W9Lj6l6OIoHVwXbwfyMOC89alM,2071 -PyQt6/bindings/QtSvgWidgets/qgraphicssvgitem.sip,sha256=dI5ZvsfueGQ3Q9Sgdh_sTuoyX0OAahTCV_Uj4Fx1vng,1918 -PyQt6/bindings/QtSvgWidgets/qsvgwidget.sip,sha256=CyW5yfqohirSTbYLdi3pYzDK20CohR2Iz85GxUaLlcU,2176 -PyQt6/bindings/QtTest/QtTest.toml,sha256=YHz-MxSfRnbeIjPXRU-xJ8VqR6VUFBjy87b6alMXzIs,189 -PyQt6/bindings/QtTest/QtTestmod.sip,sha256=ErXAsT47_5lYGvwAxAdJP7Do1fDAEcYsQeFvruaWE1I,2110 -PyQt6/bindings/QtTest/qabstractitemmodeltester.sip,sha256=MCwdKECxNFiGoq_Cr_MGLXFdjnL--hRIkQ0recyetPo,1696 -PyQt6/bindings/QtTest/qsignalspy.sip,sha256=yOnZMQhmbbJ2loxEa8RgeHcdhopyiJKs-HNBRMYqhZQ,3285 -PyQt6/bindings/QtTest/qtestkeyboard.sip,sha256=tB4s-WZJ4c2nWVNDR5uKZ7pqh1H3tWvmSYgNswZSj78,3740 -PyQt6/bindings/QtTest/qtestmouse.sip,sha256=ZrpF9QfTxJexR7nTRhIJnJvrpYhlFnDnQVzqgIpIOuk,2446 -PyQt6/bindings/QtTest/qtestsystem.sip,sha256=822S2dYUs_lc2scFYwyS8gJCTS2R8hHokLl3GUn7-x4,1381 -PyQt6/bindings/QtTextToSpeech/QtTextToSpeech.toml,sha256=RRgnpBKTCQEZszM6E-mryg-bh8lRuoHsl0zMs7r1Bik,180 -PyQt6/bindings/QtTextToSpeech/QtTextToSpeechmod.sip,sha256=bh6Gis8UA8u8gLEoW7dq8LkqVLLft3EPLJMKDrAA8RM,1981 -PyQt6/bindings/QtTextToSpeech/qtexttospeech.sip,sha256=8jzxeQOQVENsLREYU8dtMdC__4D4MvILDndZj_yDAKo,4244 -PyQt6/bindings/QtTextToSpeech/qvoice.sip,sha256=jwiuyGsLxjwvXNUrJxCr17uTXLauU70fZlCDMdSWN38,1822 -PyQt6/bindings/QtWebChannel/QtWebChannel.toml,sha256=v1nlYQv6bAJVk1FuTVmD622wgIGn-Zar5d55w0ILq5A,178 -PyQt6/bindings/QtWebChannel/QtWebChannelmod.sip,sha256=3HT6y7PaltZuE2SRHcSNJyutYLALE4UxHsSTIYoVtA4,1995 -PyQt6/bindings/QtWebChannel/qwebchannel.sip,sha256=ILjBo_mTxm0eDa_n2GXFJ0AvEAC-v6kYjxcUSI7llgM,2370 -PyQt6/bindings/QtWebChannel/qwebchannelabstracttransport.sip,sha256=-v048Xh8LKAL8NJ48RURc36dHL9H_Lk-bDZ9Jru8kzk,1432 -PyQt6/bindings/QtWebSockets/QtWebSockets.toml,sha256=6gz9OfCDkKVhRf7cjgwZR1bIpajCl1DMDhRbJsER2OY,178 -PyQt6/bindings/QtWebSockets/QtWebSocketsmod.sip,sha256=SsAvVClQfGBi_Wf4UW31CwgFNCUWlTAcm7G7VWKviC0,2158 -PyQt6/bindings/QtWebSockets/qmaskgenerator.sip,sha256=UrbIALYr0J2ufgYAve1LKA_oaL8yaBTXEnBHfXOeVbM,1245 -PyQt6/bindings/QtWebSockets/qwebsocket.sip,sha256=2Ox6AlWr2WPVHFoTPjdSg-792SWUEKU0v471BI3xY9c,6132 -PyQt6/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip,sha256=w9wq8sVzHXeD4kdML0nNECsShYI-p3CH-eCxNzaxAIs,1445 -PyQt6/bindings/QtWebSockets/qwebsockethandshakeoptions.sip,sha256=UBxNf8AofEB_5nN7QxdI6j0dj7FzrJVJCA7TC1TB4-k,1623 -PyQt6/bindings/QtWebSockets/qwebsocketprotocol.sip,sha256=SNctNrhFVDaua_jmdT4HfCh3marAVIOonreH7N3xVAs,1741 -PyQt6/bindings/QtWebSockets/qwebsocketserver.sip,sha256=5UrSRvrZREmyLaOshXGzjznIa1Y5DS_zxEBTCEWnIrI,3256 -PyQt6/bindings/QtWidgets/QtWidgets.toml,sha256=CcjwIDev5IxNuaym_7L7Pybrht8t30h2AGbr_BXumlM,192 -PyQt6/bindings/QtWidgets/QtWidgetsmod.sip,sha256=Fyr1S0liCNqBgpoVX3dcyYlkulh0ObBQyxCJP6K9H7g,4913 -PyQt6/bindings/QtWidgets/qabstractbutton.sip,sha256=UmdMNzwFvVRiM4ZsRtjZPxsY-O58RVHEraJMt6uibkc,2739 -PyQt6/bindings/QtWidgets/qabstractitemdelegate.sip,sha256=rYQOHo-2CHUFXRxoA4L7FGDAVu7QxL6iv35ArS8jUzg,2628 -PyQt6/bindings/QtWidgets/qabstractitemview.sip,sha256=Vdi3kjx2XIEN5VCdzMznTH7k7EIx7tTfYj6evIja8c0,10379 -PyQt6/bindings/QtWidgets/qabstractscrollarea.sip,sha256=Ce8uQRfwAxeTYmCNN_ePIe8aNvYXqdUYhoFewgjzQic,3466 -PyQt6/bindings/QtWidgets/qabstractslider.sip,sha256=JZunFMHEtI_i7Iaa7oClYnNpR64A2UBz3J10UXtBl2A,3016 -PyQt6/bindings/QtWidgets/qabstractspinbox.sip,sha256=th-v-y7TNR-MDArkv9u-q9lPZ9Heea9MhA_Lb71mekE,4028 -PyQt6/bindings/QtWidgets/qapplication.sip,sha256=ILCJP7pOsAqlS9adkGR2rLZOH2vwA3sMXL3_5v5mqlM,14143 -PyQt6/bindings/QtWidgets/qboxlayout.sip,sha256=gs1aF6-otTThOPaRAe3BkXbYKIwtULI4G9sokRoCMuA,4816 -PyQt6/bindings/QtWidgets/qbuttongroup.sip,sha256=EW_VDDiEDYU7fL8KtPzxBtEQ86J535NRmIXPXRto8UI,1842 -PyQt6/bindings/QtWidgets/qcalendarwidget.sip,sha256=1qxt3hOPZDu43nnFyUh9P6_b1fUlINkppO4Snj0ylL4,4152 -PyQt6/bindings/QtWidgets/qcheckbox.sip,sha256=eDlb7AfGlP_GctdZgKBH-KlfVNYODRyoKUtg3MK_cEM,1872 -PyQt6/bindings/QtWidgets/qcolordialog.sip,sha256=duGcvuivleIKvgvtNwRci_zcDFEVpUupqOS2oxHmzzU,3052 -PyQt6/bindings/QtWidgets/qcolumnview.sip,sha256=FuNOumiKPotMsHBjUOg2i8BKoy7veWxfR3S3A-4wpjg,2879 -PyQt6/bindings/QtWidgets/qcombobox.sip,sha256=cYA5-8lQJy3zInPla52sNbWSs7782ZSaIEucfKcjjX0,5942 -PyQt6/bindings/QtWidgets/qcommandlinkbutton.sip,sha256=c6TyX4Va1HQWy2FgD9Rb0QVHJ8Fs1a9kuDrl3H9UhNw,1756 -PyQt6/bindings/QtWidgets/qcommonstyle.sip,sha256=9VNi6wTkbNDEp8uKeSgFOt2eGkB8I8Gc3grD6rN8agA,3148 -PyQt6/bindings/QtWidgets/qcompleter.sip,sha256=1t66xBfpQzIHct7Z66DF-LRJ3nspvnYE7XLYZJhJ6lQ,3322 -PyQt6/bindings/QtWidgets/qdatawidgetmapper.sip,sha256=heQBNxV_cTo0FYOd6u5T-aWOxX6BSp3lNbRlAL7Tw7I,2444 -PyQt6/bindings/QtWidgets/qdatetimeedit.sip,sha256=YwrLKz6R49Q34XH4nMcsa04iHChyUPoxK4jJ-pzOfhA,5181 -PyQt6/bindings/QtWidgets/qdial.sip,sha256=CCsu-qXUU56cR5ycMkowZdBpj_6pMez5p0m73eCOlT0,1873 -PyQt6/bindings/QtWidgets/qdialog.sip,sha256=MpdHet1Z5cvREPp5mjZ_W4dPkU9SwL-V-Dav2I28nr0,2699 -PyQt6/bindings/QtWidgets/qdialogbuttonbox.sip,sha256=vb6N6M5AytyMMy9Ji0z3BU3LaIlz9R0DPd-x7Cap0BM,3403 -PyQt6/bindings/QtWidgets/qdockwidget.sip,sha256=l39rG6ehJwAhYpzWNaONstufLoNfquQeLOD25oXHLqQ,2673 -PyQt6/bindings/QtWidgets/qdrawutil.sip,sha256=uRreRr0zzpGBJ9TIkdphSgSH3CMn1LKnEErkilcGvyM,3076 -PyQt6/bindings/QtWidgets/qerrormessage.sip,sha256=ujBIU7oqApbOmtVbOaQ4fBEjn4P93K1dRnDfdvCWMMQ,1396 -PyQt6/bindings/QtWidgets/qfiledialog.sip,sha256=XYsP_6l-lMWkmkNzUoQ2cw7_hnd15SExijvnfVvEDJk,12326 -PyQt6/bindings/QtWidgets/qfileiconprovider.sip,sha256=wUc9LFEL8kTl4u1jrJ5ntVjw5hPyIh8fUEW0iGJKn3E,1268 -PyQt6/bindings/QtWidgets/qfilesystemmodel.sip,sha256=Gtkljjl0KqtiR9N5mwrJhTro1SY99Xy5ne5bw5gUScQ,957 -PyQt6/bindings/QtWidgets/qfocusframe.sip,sha256=kCakNa6qZ5OIY0Kk2vasFg1tCJeZR_UXw7f_gCs_fXc,1399 -PyQt6/bindings/QtWidgets/qfontcombobox.sip,sha256=OkyOVC2Db-aBB6eXBsYVcDAo7tO86zfiPk52hG8WvqU,2771 -PyQt6/bindings/QtWidgets/qfontdialog.sip,sha256=wectoLd5RVIFB0FvsuJz_GcwiYDQpqGi-w_DnK_ykDQ,2923 -PyQt6/bindings/QtWidgets/qformlayout.sip,sha256=FHYjmcL4XGv-T8MSuugwir4Vj7W7IfJNb8o7c64VyFQ,4988 -PyQt6/bindings/QtWidgets/qframe.sip,sha256=A-PYQPWVFiVdjQHHgjw_UaZlpP1A-C4c0OaKZvDMv3I,2171 -PyQt6/bindings/QtWidgets/qgesture.sip,sha256=V5fKkKTqxaOUU3ffDCGubQHyt2AOu83qwtRaTzuff9o,5388 -PyQt6/bindings/QtWidgets/qgesturerecognizer.sip,sha256=ta6Pr3GTSMtmnAZC73l0UuyQqwF462q6kfeCTAbjrh0,1738 -PyQt6/bindings/QtWidgets/qgraphicsanchorlayout.sip,sha256=57mXocDxlXYqFeM_upQ0HHdYSUnAS6O4p7mzfvQ-fws,2754 -PyQt6/bindings/QtWidgets/qgraphicseffect.sip,sha256=AvQikSPf18MkctDecr2X_rvMyzoVinhXVZgjoBGvACc,5050 -PyQt6/bindings/QtWidgets/qgraphicsgridlayout.sip,sha256=0RFNVeUuQGfPepQc61AwjnI7DojqTzNjNaOQ-vT2gio,4214 -PyQt6/bindings/QtWidgets/qgraphicsitem.sip,sha256=TLSGy2ZlDC79R67XiEDrjCN8oB4-CFzbyEAQWIndlz0,26889 -PyQt6/bindings/QtWidgets/qgraphicslayout.sip,sha256=-Q1wyBu-iGHO5onzINVfiG7kMsBNcgEKkwPBfImHVRQ,1737 -PyQt6/bindings/QtWidgets/qgraphicslayoutitem.sip,sha256=MpJ-ZN3AYiyUQ5kpiAy6AI9mV4oHk-Na4-OhId5BVK0,3128 -PyQt6/bindings/QtWidgets/qgraphicslinearlayout.sip,sha256=di74cxwbnHGh2zOX9EbxxY_HMrfY_I5ax9TB329ftL4,3157 -PyQt6/bindings/QtWidgets/qgraphicsproxywidget.sip,sha256=0Eq3kB4ss-kHqLhTmF3c_AW8cozE7lESCUiYDGparMA,3927 -PyQt6/bindings/QtWidgets/qgraphicsscene.sip,sha256=qmu0xxOBzq8_aepIzDbJW_IDMRBnoSYurP7wHfg3g8s,8775 -PyQt6/bindings/QtWidgets/qgraphicssceneevent.sip,sha256=kEd10chlhAm4TS4cRTuP69eeErHjlCWfh6exN_E21TE,6229 -PyQt6/bindings/QtWidgets/qgraphicstransform.sip,sha256=dnYb95tO4oqH12_z14BXgeA4Twq04iV1qD2PBxjaFr4,2462 -PyQt6/bindings/QtWidgets/qgraphicsview.sip,sha256=nKQBsPOeFExC2zMVotrK37BL0IpzVK1eLAGG9mvRzvY,8132 -PyQt6/bindings/QtWidgets/qgraphicswidget.sip,sha256=Rl8_2wzsIgOH6vG7jNskEcIwpXc_jQ0XeuMqmn9kCEg,5473 -PyQt6/bindings/QtWidgets/qgridlayout.sip,sha256=LYNwEGx102CftJCpmKJ9O513TcUbW_hgWLQzyU3SfT0,5544 -PyQt6/bindings/QtWidgets/qgroupbox.sip,sha256=9R3nwywVdNFZ7TTWQQV64uAouA-yTcxLqlogl9WMz24,2129 -PyQt6/bindings/QtWidgets/qheaderview.sip,sha256=Xx3DiHlgq0utEfIGpNqE239Bg9NHuQnlCWRDKjAjDu4,7177 -PyQt6/bindings/QtWidgets/qinputdialog.sip,sha256=isjJ8jqDxG2U9LT1Dtv9AvW_SPV_Pfq3ibuk7vNYFO4,5367 -PyQt6/bindings/QtWidgets/qitemdelegate.sip,sha256=En7dBG90r7voOgRE86Yjt11eHXfZrHr3GLJ5As8FznY,2938 -PyQt6/bindings/QtWidgets/qitemeditorfactory.sip,sha256=d4QN9vag6M6DJyMmwShQfz4RByGTdu3G3PfKTmw2biY,1812 -PyQt6/bindings/QtWidgets/qkeysequenceedit.sip,sha256=FNX9BebmZjWf8Odc7H1eaomfqPK5jIExaD7MwmKz-r4,2226 -PyQt6/bindings/QtWidgets/qlabel.sip,sha256=cvNJCVol2GdHZFX0z0O1e1ESHyyBnu3czHAZFFGjAus,6070 -PyQt6/bindings/QtWidgets/qlayout.sip,sha256=rKlXcsJY-7IvqvqUm5VTPC-WBQtBLSmzUs5mK7ln0I8,5908 -PyQt6/bindings/QtWidgets/qlayoutitem.sip,sha256=q_tfLa9XBJI0Xd3nKlRO7vaZeP0wdQZmj0upDcfHxHg,3746 -PyQt6/bindings/QtWidgets/qlcdnumber.sip,sha256=i3h6btOB0VJHJiNCFKp7Jklz6PrASRn3CrOXIVYlqig,2385 -PyQt6/bindings/QtWidgets/qlineedit.sip,sha256=ArrH1m8HhEwzk4oP8W7XDV-OliF3d8NaKldGJWO_gyA,5217 -PyQt6/bindings/QtWidgets/qlistview.sip,sha256=wjzeRRRfWqFN8_kzFwLumWQGqXjSTINRBsseSqHsa9w,4968 -PyQt6/bindings/QtWidgets/qlistwidget.sip,sha256=mn8ksJcEiD-4Vb3vqcHLj4VhMiw1oJCnC8gXOMuRiVw,7365 -PyQt6/bindings/QtWidgets/qmainwindow.sip,sha256=_1CjnDbwJTtliVRd07Ivz40bIER8IUou2eIda1bss0c,4698 -PyQt6/bindings/QtWidgets/qmdiarea.sip,sha256=f7XUcLR3v9je2vybKi43lmSpQYajLHf8NU1y-g8IA4Q,4181 -PyQt6/bindings/QtWidgets/qmdisubwindow.sip,sha256=w598sEPGjglVRnd3sXqR6JasXHDHIx-dEyfkYeIIepU,4061 -PyQt6/bindings/QtWidgets/qmenu.sip,sha256=7-GQ1pAjLFfIQmdYytTFepEed4eF4Ag1vYyqIrFQ8Mo,5659 -PyQt6/bindings/QtWidgets/qmenubar.sip,sha256=rnr7TGfnvZK0rdZG4eb5V0vYEVniDQPThgutdk9MAFo,3608 -PyQt6/bindings/QtWidgets/qmessagebox.sip,sha256=6cvrsavIoK4vE1gYNvTd6bKL0wbTJ-AQV_pbJB64jTk,6773 -PyQt6/bindings/QtWidgets/qplaintextedit.sip,sha256=eeI6WiBKdmwoRvydWidcuN78JY9zuV_W13fU_P4gCVI,7263 -PyQt6/bindings/QtWidgets/qprogressbar.sip,sha256=JLnc9F75Yp9XY0MthLBfo_5vwqkXoxDMqo4tZRygun8,2233 -PyQt6/bindings/QtWidgets/qprogressdialog.sip,sha256=uAi89j8XwLvS_K790wEpFcWfxs2dV5xpF8ZP2dcbxuA,2910 -PyQt6/bindings/QtWidgets/qproxystyle.sip,sha256=f7q08lWAcHha4tBzFBnnYo5t9d1rCaETjslDX1f5m9g,3954 -PyQt6/bindings/QtWidgets/qpushbutton.sip,sha256=QH5Me7HK-W_EtTLnYg_2MhJ26mxAzV_MkZgxuqfOBFA,2076 -PyQt6/bindings/QtWidgets/qpywidgets_qlist.sip,sha256=RkphQv2lkCxI2kmGr67N-AUUW6GDfbAzwnczDMuiAZI,2905 -PyQt6/bindings/QtWidgets/qradiobutton.sip,sha256=N5w6s_UmM7_VPcqYkUrC6TTiVdnaTYxhaZLvQovr66g,1562 -PyQt6/bindings/QtWidgets/qrubberband.sip,sha256=_mQSxGKc6v1poOoQrZmdZ9Bp_6DrMA9J7eDhrFZOuL0,1801 -PyQt6/bindings/QtWidgets/qscrollarea.sip,sha256=yUH3Q8AUkWdp0gBLmuK6j_3QOTDcDrQ3JFk0krCMdK8,1902 -PyQt6/bindings/QtWidgets/qscrollbar.sip,sha256=mu-WpuaQFWGBtSpZ5pUmafdubVZpZ-O6sFHKKgTkQh4,1780 -PyQt6/bindings/QtWidgets/qscroller.sip,sha256=nU5eEH5WdEQG7SFfsEVhTzP3yBZ07k4drhHIc8Wyi-E,2903 -PyQt6/bindings/QtWidgets/qscrollerproperties.sip,sha256=eHOWWO2QaVVZnb46CDikZZw8uc5BBZWjqFvBx92mOuU,2485 -PyQt6/bindings/QtWidgets/qsizegrip.sip,sha256=P9hUZoZn1G5OKHJSCJrQzk-8PBXkRrmQ453YOs9bzDk,1647 -PyQt6/bindings/QtWidgets/qsizepolicy.sip,sha256=tgdhqQ_2cbsRQBouS_JPxhkzvzQd6H-mrwWmJzUJY2w,3272 -PyQt6/bindings/QtWidgets/qslider.sip,sha256=4NqF3OLZyPTczRXXnCD95RXrZeNBzF9I3ZNNJoJX7Dg,1928 -PyQt6/bindings/QtWidgets/qspinbox.sip,sha256=7GUqg_j-hBFwbCkxVmjdoPEafdPM7kk6yQc53m8a0OM,3315 -PyQt6/bindings/QtWidgets/qsplashscreen.sip,sha256=cjDAAWyKkMoCmIQJor9gqEpIg6Hqkgi53aBw3zaAKtc,1805 -PyQt6/bindings/QtWidgets/qsplitter.sip,sha256=OD5w4uJ_bEKoIbs5Acj4-0SXJ_xKvPMdIkT_M6zZGe0,3443 -PyQt6/bindings/QtWidgets/qstackedlayout.sip,sha256=CFoyV6JTqWU25R0ugaSV11tXXONmgqXGrlaAm9nJC1c,3658 -PyQt6/bindings/QtWidgets/qstackedwidget.sip,sha256=vCY1GEwPXKAYBBka_DZ3nWouiHVt85nqoSt61QKApsw,1669 -PyQt6/bindings/QtWidgets/qstatusbar.sip,sha256=tGZqLNj0gOru2CA6uUK4y9QrehF_Pbs-0J2C_Jhjbsc,1963 -PyQt6/bindings/QtWidgets/qstyle.sip,sha256=umoLtgMJtYCL_ouFmejHnl8jVwWnaYqZ1zOIO3cZs7g,22582 -PyQt6/bindings/QtWidgets/qstyleditemdelegate.sip,sha256=hIgZqtNxAbbBL8RW9tXwilif_paUO-i11obunMQvkPU,2433 -PyQt6/bindings/QtWidgets/qstylefactory.sip,sha256=kNITzlYP-SkVqagfmzw3qWuT85otzkU2kIA8aEE30W4,1122 -PyQt6/bindings/QtWidgets/qstyleoption.sip,sha256=V_NU0PgZtkzqiNquIuwH2IENtNNvLkZ-qLNaRiZVOj8,20307 -PyQt6/bindings/QtWidgets/qstylepainter.sip,sha256=NAY6q_DFH8Npv0-yUudJoRe1DbZNtoXc0i9bECzW3_U,1739 -PyQt6/bindings/QtWidgets/qsystemtrayicon.sip,sha256=oGqAgdLn_vPWJTfSA00-wDtWLuqL3X26e2_WECBy5yU,2324 -PyQt6/bindings/QtWidgets/qtabbar.sip,sha256=24Q2pdByBsKntYXivv6kT0sHtDr_37WzRp1LXED1Tno,5258 -PyQt6/bindings/QtWidgets/qtableview.sip,sha256=AQxklrLlnKbB-FH3YgPElQXSOtkbOVteD6p0cyiSX8w,4844 -PyQt6/bindings/QtWidgets/qtablewidget.sip,sha256=QlacnxdE_Iim4SkXXL45kvdHDB_-yHdNLu9ANm4NTKQ,9253 -PyQt6/bindings/QtWidgets/qtabwidget.sip,sha256=bIX-RHi7DiYHqQVhWB3lUt2oDs0pqHwd0bLGHq3-zik,4247 -PyQt6/bindings/QtWidgets/qtextbrowser.sip,sha256=iacBzy4RAq2MVr3ezZ2dYPk8AHgdeQXEZj4Oe8AjvDw,2747 -PyQt6/bindings/QtWidgets/qtextedit.sip,sha256=ZB8Ku-3RpU7LyfPK1fo8wJ8BVOjAtEOovEmXV2-K47I,7395 -PyQt6/bindings/QtWidgets/qtoolbar.sip,sha256=7yQioM9C4iPJ5nxqVnuAhq93SddT1_uwmMK6L7XF5V0,4350 -PyQt6/bindings/QtWidgets/qtoolbox.sip,sha256=6mQaivgv1b7qcCBaS6xS36yaL6kEL75NVCLLPM6pQX8,2428 -PyQt6/bindings/QtWidgets/qtoolbutton.sip,sha256=138XFj-sFEFIPDXPGntUyO8Agg2Ct4fTZFsZ921QSTQ,2563 -PyQt6/bindings/QtWidgets/qtooltip.sip,sha256=prS2XRVdja9WCujw1hhZ2eUcKcwdbeaGPBXgWWy97C0,1399 -PyQt6/bindings/QtWidgets/qtreeview.sip,sha256=KCZK1tw76lrQi5vJiMhvDgZoxB7tZjt2u9PB60Rs_b0,6481 -PyQt6/bindings/QtWidgets/qtreewidget.sip,sha256=uiAQHA1VruGsA7quMSQvs4npn-NLrMv7aGHYC6kFR5A,10335 -PyQt6/bindings/QtWidgets/qtreewidgetitemiterator.sip,sha256=TQDoZNSrhD9wIS8qT9R8QOkeMocbLWb6tVj0FBv1Ohs,2195 -PyQt6/bindings/QtWidgets/qundoview.sip,sha256=x4LOckw5cUpRfCMgX8ppnKpyj2_9YIf2DNaMwdc8XOg,1604 -PyQt6/bindings/QtWidgets/qwhatsthis.sip,sha256=ffgMHgGqvZsFQmzkScoSWZpWV4rx32cyqkPz3Jk58S4,1353 -PyQt6/bindings/QtWidgets/qwidget.sip,sha256=QUu9kaYM2Wi6xPgaCW9NCxHy17S-mp5KXcW2Gj7521g,18376 -PyQt6/bindings/QtWidgets/qwidgetaction.sip,sha256=OkqxH_PtGHkCT4kCmYgOc3n3mOPW28Jr7ADqM2IEVPw,1558 -PyQt6/bindings/QtWidgets/qwizard.sip,sha256=6khSIIpKxDq4XGp1UFlnH9K-KHR95z5ttMdwzpKBTXU,7647 -PyQt6/bindings/QtXml/QtXml.toml,sha256=75PNIAAnvkMig6FuOISFGLQP-837IQd5ZCfSiFnel6I,171 -PyQt6/bindings/QtXml/QtXmlmod.sip,sha256=f4I5wHLWcr8ScZ-VZyucvWjTRMaGg8ZG9DsuXMLpybA,1925 -PyQt6/bindings/QtXml/qdom.sip,sha256=qZhzEWMzehmklf0Ak3ARYIhXYFPzokm9V7feiYNwutY,16898 -PyQt6/lupdate/__init__.py,sha256=8X_WbOQJoYQ8dX1JIGQ6NBHmK5kWK338SM4DEnmm84M,875 -PyQt6/lupdate/__pycache__/__init__.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/designer_source.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/lupdate.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/pylupdate.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/python_source.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/source_file.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/translation_file.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/translations.cpython-312.pyc,, -PyQt6/lupdate/__pycache__/user.cpython-312.pyc,, -PyQt6/lupdate/designer_source.py,sha256=wZUqA3BgmAg6GEviPkxXA2aYWFoN_SnwZqLX1LQhhz8,2479 -PyQt6/lupdate/lupdate.py,sha256=dI6EWkYHSMmQrKFu-JaEq_gzsXt8WR2tM5NSjcWxlNk,3416 -PyQt6/lupdate/pylupdate.py,sha256=_bXfCtEblYcDxg99ZMDbq_hFSs3-2FzTYkWMJHUpXWg,3062 -PyQt6/lupdate/python_source.py,sha256=qWejDaXiXmdlP0gyQ0rZ4PZ5Qx5OXze16cMBJhFU1kI,11253 -PyQt6/lupdate/source_file.py,sha256=dmoNC59aTFZrpgYi8PU1nnnLgV06KELvz1ruQTD3sV0,1114 -PyQt6/lupdate/translation_file.py,sha256=5M-LuCNmv1QnBdIBp6n4qqPWZnCR4Jkp5K4a0jSYK7k,14976 -PyQt6/lupdate/translations.py,sha256=1WkdPBvfZC7w2NaVuxGHR-lvuEdLJBsNnPIqyGTGHj4,1633 -PyQt6/lupdate/user.py,sha256=3KpvNYxP4D5SXctvaLILF7Qq8q0wgRdUrIbxAGOSgek,1504 -PyQt6/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -PyQt6/sip.pyi,sha256=5AY7s8jPMxHrt1xPhvVA4_mYSJDXacAhF2rkf6_zgNU,2773 -PyQt6/uic/Compiler/__init__.py,sha256=mvquFr4Y3DsriRGePCkNmIRs7g1pb6oRSHoqJdGmYPE,1004 -PyQt6/uic/Compiler/__pycache__/__init__.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/as_string.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/compiler.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/indenter.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/misc.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc,, -PyQt6/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc,, -PyQt6/uic/Compiler/as_string.py,sha256=FoCKhdYz2BZ1BHSt0mays8LxUoZLBYm3eTQ3Vyz06pI,1412 -PyQt6/uic/Compiler/compiler.py,sha256=SnBfhw4QCi4I8MOpeCvFMQmxLqeewZSXQJT1F4hCHyk,3934 -PyQt6/uic/Compiler/indenter.py,sha256=Aw-tyaElLlvT5O8Vg6cN7LvihFG3Vwf8gN4sKfR5Yg4,2742 -PyQt6/uic/Compiler/misc.py,sha256=xW2GBcyDPtI8HqvXgJAsU0pJB6Txk5yP6GeQ-VVDsjw,2374 -PyQt6/uic/Compiler/proxy_metaclass.py,sha256=3StGzZQK9xegMZZb5EWslNkrTpj3rebhyYqW_PT4EKE,4324 -PyQt6/uic/Compiler/qobjectcreator.py,sha256=5DRlxUaBjz7GxeTXMAZG3rBPLe-fuibq6iHywp-Y-D4,5839 -PyQt6/uic/Compiler/qtproxies.py,sha256=JZZQCa9ZkSGrRYrusYLVdscu1-DeO1xKzE8fqcqhQWA,16147 -PyQt6/uic/Loader/__init__.py,sha256=mvquFr4Y3DsriRGePCkNmIRs7g1pb6oRSHoqJdGmYPE,1004 -PyQt6/uic/Loader/__pycache__/__init__.cpython-312.pyc,, -PyQt6/uic/Loader/__pycache__/loader.cpython-312.pyc,, -PyQt6/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc,, -PyQt6/uic/Loader/loader.py,sha256=NabGTULqkIDc7vO1hQJHiN-vhwLrQ8bK2PLYVvQVVtk,2625 -PyQt6/uic/Loader/qobjectcreator.py,sha256=62flJqvk39wXDEwbUxjKmaeP6-A5DwUG12m1vOX_gLI,5187 -PyQt6/uic/__init__.py,sha256=tmNJqW3w0BNhm0fNz5IGCqgLYfP9mrlRte758KswuRg,1003 -PyQt6/uic/__pycache__/__init__.cpython-312.pyc,, -PyQt6/uic/__pycache__/compile_ui.cpython-312.pyc,, -PyQt6/uic/__pycache__/enum_map.cpython-312.pyc,, -PyQt6/uic/__pycache__/exceptions.cpython-312.pyc,, -PyQt6/uic/__pycache__/icon_cache.cpython-312.pyc,, -PyQt6/uic/__pycache__/load_ui.cpython-312.pyc,, -PyQt6/uic/__pycache__/objcreator.cpython-312.pyc,, -PyQt6/uic/__pycache__/properties.cpython-312.pyc,, -PyQt6/uic/__pycache__/pyuic.cpython-312.pyc,, -PyQt6/uic/__pycache__/ui_file.cpython-312.pyc,, -PyQt6/uic/__pycache__/uiparser.cpython-312.pyc,, -PyQt6/uic/compile_ui.py,sha256=RJy0Yh5cg0nOClOgUNPuzGTm_19wpIDYUzMwq9XnFv8,6103 -PyQt6/uic/enum_map.py,sha256=QuFf7z1CgLoFXd3-RLfgzIV0c65l8RE3MY6GPlVTzDc,31899 -PyQt6/uic/exceptions.py,sha256=A_pitM_OizgPvOiDSBSN5oIot_REAJwFwATHQO5xJP8,2609 -PyQt6/uic/icon_cache.py,sha256=bjawTp_l4HFp7wEQum0xx5qtI2vdW69BOCYcZS2lwFE,5047 -PyQt6/uic/load_ui.py,sha256=k3ZQ74vfGh-uSiIRj5bIStkc4bDo7fLZRP5ewrXOGf4,3327 -PyQt6/uic/objcreator.py,sha256=ydBk2n8qpiSwUqOymm8sGWs7xqPgMLKJ1AxiKH_Pcks,6097 -PyQt6/uic/properties.py,sha256=IBKfMFjxvQN_2smYdrs889gtVoYO2Vf1zksYbh3GBFA,18503 -PyQt6/uic/pyuic.py,sha256=QccFvZDBpigZCw_GTzi5IutDMkNUO6Sh7JODCV-I1vM,5850 -PyQt6/uic/ui_file.py,sha256=4DhZ-RtYpoVVf_6w9-IlhAfxdfDiqOCO2MFHJNmY90A,3213 -PyQt6/uic/uiparser.py,sha256=2dhe5icqw95hMZ_v-nnDuhVeHp3rO6L_Wc3Oknju38Y,37502 -PyQt6/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qtopenglwidgets.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc,, -PyQt6/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc,, -PyQt6/uic/widget-plugins/qaxcontainer.py,sha256=fJOfmTV1Lea5k7m2Al_liIrVN9Um-1XUmjapa2KiNmI,1557 -PyQt6/uic/widget-plugins/qscintilla.py,sha256=PaG9ZfrCx5e-N8KUZQgu4niysSm7UYK2-cY7JJNL_xg,1553 -PyQt6/uic/widget-plugins/qtcharts.py,sha256=6CQ7IV9AClk-l_E53sXvrf4sa_8HjYBA-ztoPJbdU3s,1562 -PyQt6/uic/widget-plugins/qtopenglwidgets.py,sha256=8D5yQduW9OnSR3pVhLYHwPSXnBCArsQc_wGMtrM3wvg,1564 -PyQt6/uic/widget-plugins/qtprintsupport.py,sha256=-q9ic3xzq9GigWUUnukOsU6ZvTu62Kx2ydx6abPEPGw,1588 -PyQt6/uic/widget-plugins/qtquickwidgets.py,sha256=QaxqdRAPfCX5DKcB4KjLBykE58-mCO_XDmfl1ocmIhs,1562 -PyQt6/uic/widget-plugins/qtwebenginewidgets.py,sha256=UFH6rypZHBhmDRBOI2FSB7NkSydYXCpJaect4Yk0e0s,1568 diff --git a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/WHEEL deleted file mode 100644 index c7b6bd8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: pyqtbuild 1.16.4 -Root-Is-Purelib: false -Tag: cp38-abi3-manylinux_2_28_x86_64 diff --git a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/entry_points.txt b/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/entry_points.txt deleted file mode 100644 index 0164da5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6-6.7.1.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -pylupdate6=PyQt6.lupdate.pylupdate:main -pyuic6=PyQt6.uic.pyuic:main diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Bluetooth.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Bluetooth.so.6 deleted file mode 100755 index a1bb90b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Bluetooth.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Concurrent.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Concurrent.so.6 deleted file mode 100755 index 8b6a217..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Concurrent.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6 deleted file mode 100755 index 473a866..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6DBus.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6DBus.so.6 deleted file mode 100755 index 7de0e6d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6DBus.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Designer.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Designer.so.6 deleted file mode 100755 index 69d6791..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Designer.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Gui.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Gui.so.6 deleted file mode 100755 index 4aab01c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Gui.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Help.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Help.so.6 deleted file mode 100755 index a75e5fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Help.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsAnimation.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsAnimation.so.6 deleted file mode 100755 index 88887be..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsAnimation.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsFolderListModel.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsFolderListModel.so.6 deleted file mode 100755 index 548ea2d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsFolderListModel.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsQmlModels.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsQmlModels.so.6 deleted file mode 100755 index 2792e15..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsQmlModels.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSettings.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSettings.so.6 deleted file mode 100755 index 4c93106..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSettings.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSharedImage.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSharedImage.so.6 deleted file mode 100755 index 53534d9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsSharedImage.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsWavefrontMesh.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsWavefrontMesh.so.6 deleted file mode 100755 index 0597c2e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6LabsWavefrontMesh.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Multimedia.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Multimedia.so.6 deleted file mode 100755 index 35f4081..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Multimedia.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaQuick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaQuick.so.6 deleted file mode 100755 index 2e3794e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaQuick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaWidgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaWidgets.so.6 deleted file mode 100755 index fff0e81..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6MultimediaWidgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Network.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Network.so.6 deleted file mode 100755 index cd87b07..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Network.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Nfc.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Nfc.so.6 deleted file mode 100755 index 81246ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Nfc.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGL.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGL.so.6 deleted file mode 100755 index 3595769..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGL.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGLWidgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGLWidgets.so.6 deleted file mode 100755 index 441b0ab..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6OpenGLWidgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Pdf.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Pdf.so.6 deleted file mode 100755 index b379217..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Pdf.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfQuick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfQuick.so.6 deleted file mode 100755 index e121114..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfQuick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfWidgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfWidgets.so.6 deleted file mode 100755 index 05c665f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PdfWidgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Positioning.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Positioning.so.6 deleted file mode 100755 index f28fa89..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Positioning.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PositioningQuick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PositioningQuick.so.6 deleted file mode 100755 index 5975c72..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PositioningQuick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PrintSupport.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PrintSupport.so.6 deleted file mode 100755 index a705532..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6PrintSupport.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Qml.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Qml.so.6 deleted file mode 100755 index 4727df1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Qml.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlModels.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlModels.so.6 deleted file mode 100755 index a2e8902..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlModels.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlWorkerScript.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlWorkerScript.so.6 deleted file mode 100755 index 6066475..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QmlWorkerScript.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick.so.6 deleted file mode 100755 index 120eab6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3D.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3D.so.6 deleted file mode 100755 index fde385e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3D.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetImport.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetImport.so.6 deleted file mode 100755 index 1ed2443..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetImport.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetUtils.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetUtils.so.6 deleted file mode 100755 index b5ae12b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DAssetUtils.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DEffects.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DEffects.so.6 deleted file mode 100755 index 364be09..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DEffects.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpers.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpers.so.6 deleted file mode 100755 index 1827670..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpers.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpersImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpersImpl.so.6 deleted file mode 100755 index f17026e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DHelpersImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DIblBaker.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DIblBaker.so.6 deleted file mode 100755 index 31d2eaa..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DIblBaker.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DParticles.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DParticles.so.6 deleted file mode 100755 index 47d598d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DParticles.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysics.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysics.so.6 deleted file mode 100755 index 8a704e5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysics.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysicsHelpers.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysicsHelpers.so.6 deleted file mode 100755 index 40b1dff..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DPhysicsHelpers.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DRuntimeRender.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DRuntimeRender.so.6 deleted file mode 100755 index 70092cb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DRuntimeRender.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DSpatialAudio.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DSpatialAudio.so.6 deleted file mode 100755 index 0658909..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DSpatialAudio.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DUtils.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DUtils.so.6 deleted file mode 100755 index 246ef61..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Quick3DUtils.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2.so.6 deleted file mode 100755 index 1d6d36c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Basic.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Basic.so.6 deleted file mode 100755 index ec5c0e0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Basic.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2BasicStyleImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2BasicStyleImpl.so.6 deleted file mode 100755 index cc88b1e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2BasicStyleImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Fusion.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Fusion.so.6 deleted file mode 100755 index 1c1117a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Fusion.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2FusionStyleImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2FusionStyleImpl.so.6 deleted file mode 100755 index 50d7976..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2FusionStyleImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Imagine.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Imagine.so.6 deleted file mode 100755 index a870783..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Imagine.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2ImagineStyleImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2ImagineStyleImpl.so.6 deleted file mode 100755 index 9709764..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2ImagineStyleImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Impl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Impl.so.6 deleted file mode 100755 index 54c8817..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Impl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Material.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Material.so.6 deleted file mode 100755 index dc04d03..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Material.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2MaterialStyleImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2MaterialStyleImpl.so.6 deleted file mode 100755 index 7f909a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2MaterialStyleImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Universal.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Universal.so.6 deleted file mode 100755 index ee46f3a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2Universal.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2UniversalStyleImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2UniversalStyleImpl.so.6 deleted file mode 100755 index 309452d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickControls2UniversalStyleImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2.so.6 deleted file mode 100755 index ff5a402..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2QuickImpl.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2QuickImpl.so.6 deleted file mode 100755 index 5f77919..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2QuickImpl.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2Utils.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2Utils.so.6 deleted file mode 100755 index 297430e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickDialogs2Utils.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickLayouts.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickLayouts.so.6 deleted file mode 100755 index 1d43151..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickLayouts.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickParticles.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickParticles.so.6 deleted file mode 100755 index 3fef912..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickParticles.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickShapes.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickShapes.so.6 deleted file mode 100755 index 71449cd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickShapes.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTemplates2.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTemplates2.so.6 deleted file mode 100755 index 3a00c14..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTemplates2.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTest.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTest.so.6 deleted file mode 100755 index e74bd74..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTest.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimeline.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimeline.so.6 deleted file mode 100755 index 6fbc285..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimeline.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimelineBlendTrees.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimelineBlendTrees.so.6 deleted file mode 100755 index 5451094..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickTimelineBlendTrees.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickWidgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickWidgets.so.6 deleted file mode 100755 index a539a0b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6QuickWidgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjects.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjects.so.6 deleted file mode 100755 index 5f396cc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjects.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjectsQml.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjectsQml.so.6 deleted file mode 100755 index 5ef96bd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6RemoteObjectsQml.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sensors.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sensors.so.6 deleted file mode 100755 index b4b1614..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sensors.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SensorsQuick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SensorsQuick.so.6 deleted file mode 100755 index dccddf2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SensorsQuick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SerialPort.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SerialPort.so.6 deleted file mode 100755 index c2be28d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SerialPort.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6ShaderTools.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6ShaderTools.so.6 deleted file mode 100755 index 35b10dc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6ShaderTools.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SpatialAudio.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SpatialAudio.so.6 deleted file mode 100755 index d093e7d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SpatialAudio.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sql.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sql.so.6 deleted file mode 100755 index b0eeec5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Sql.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Svg.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Svg.so.6 deleted file mode 100755 index 80cc125..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Svg.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SvgWidgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SvgWidgets.so.6 deleted file mode 100755 index 6902422..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6SvgWidgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Test.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Test.so.6 deleted file mode 100755 index c61b18a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Test.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6TextToSpeech.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6TextToSpeech.so.6 deleted file mode 100755 index 8645e8b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6TextToSpeech.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandClient.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandClient.so.6 deleted file mode 100755 index cc37a2c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandClient.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandEglClientHwIntegration.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandEglClientHwIntegration.so.6 deleted file mode 100755 index 14ef9e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WaylandEglClientHwIntegration.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannel.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannel.so.6 deleted file mode 100755 index e7081a3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannel.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannelQuick.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannelQuick.so.6 deleted file mode 100755 index 622648f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebChannelQuick.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebSockets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebSockets.so.6 deleted file mode 100755 index b56966c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebSockets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Widgets.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Widgets.so.6 deleted file mode 100755 index ec84cca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Widgets.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WlShellIntegration.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WlShellIntegration.so.6 deleted file mode 100755 index 223697e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WlShellIntegration.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6XcbQpa.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6XcbQpa.so.6 deleted file mode 100755 index 9a03bd2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6XcbQpa.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Xml.so.6 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Xml.so.6 deleted file mode 100755 index 9201d23..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Xml.so.6 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicudata.so.73 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicudata.so.73 deleted file mode 100755 index 5ac75f7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicudata.so.73 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicui18n.so.73 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicui18n.so.73 deleted file mode 100755 index 50a1b1c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicui18n.so.73 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicuuc.so.73 b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicuuc.so.73 deleted file mode 100755 index d617664..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libicuuc.so.73 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/assetimporters/libassimp.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/assetimporters/libassimp.so deleted file mode 100755 index e008772..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/assetimporters/libassimp.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.so deleted file mode 100755 index f3b6180..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-egldevice-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-egldevice-integration.so deleted file mode 100755 index 4ce3596..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-egldevice-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-integration.so deleted file mode 100755 index cbd7b6a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.so deleted file mode 100755 index 4b21350..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevkeyboardplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevkeyboardplugin.so deleted file mode 100755 index 58ea0da..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevkeyboardplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevmouseplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevmouseplugin.so deleted file mode 100755 index 7e58b8f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevmouseplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtabletplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtabletplugin.so deleted file mode 100755 index fc93b54..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtabletplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtouchplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtouchplugin.so deleted file mode 100755 index 8311127..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqevdevtouchplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqtuiotouchplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqtuiotouchplugin.so deleted file mode 100755 index 8265f14..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/generic/libqtuiotouchplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libdefaultgeometryloader.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libdefaultgeometryloader.so deleted file mode 100755 index 9d923f7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libdefaultgeometryloader.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libgltfgeometryloader.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libgltfgeometryloader.so deleted file mode 100755 index 0a833ce..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/geometryloaders/libgltfgeometryloader.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/iconengines/libqsvgicon.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/iconengines/libqsvgicon.so deleted file mode 100755 index c473085..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/iconengines/libqsvgicon.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqgif.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqgif.so deleted file mode 100755 index 40b6bbc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqgif.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqicns.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqicns.so deleted file mode 100755 index 1e9e660..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqicns.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqico.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqico.so deleted file mode 100755 index e19d6df..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqico.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqjpeg.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqjpeg.so deleted file mode 100755 index ada79f3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqjpeg.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqpdf.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqpdf.so deleted file mode 100755 index a416bbe..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqpdf.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqsvg.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqsvg.so deleted file mode 100755 index c77dfa6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqsvg.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtga.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtga.so deleted file mode 100755 index 80a5e0e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtga.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtiff.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtiff.so deleted file mode 100755 index 514d1d6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqtiff.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwbmp.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwbmp.so deleted file mode 100755 index e11cf69..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwbmp.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwebp.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwebp.so deleted file mode 100755 index e64a843..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/imageformats/libqwebp.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libffmpegmediaplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libffmpegmediaplugin.so deleted file mode 100755 index bb64163..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libffmpegmediaplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libgstreamermediaplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libgstreamermediaplugin.so deleted file mode 100755 index d34076a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/multimedia/libgstreamermediaplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqglib.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqglib.so deleted file mode 100755 index 97dca5b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqglib.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqnetworkmanager.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqnetworkmanager.so deleted file mode 100755 index c84225c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/networkinformation/libqnetworkmanager.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so deleted file mode 100755 index 344e4fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so deleted file mode 100755 index 4a2f967..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqeglfs.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqeglfs.so deleted file mode 100755 index 46ab47a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqeglfs.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqlinuxfb.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqlinuxfb.so deleted file mode 100755 index e263c61..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqlinuxfb.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimal.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimal.so deleted file mode 100755 index ef37c5c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimal.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimalegl.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimalegl.so deleted file mode 100755 index b64b2b0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqminimalegl.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqoffscreen.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqoffscreen.so deleted file mode 100755 index 258ac19..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqoffscreen.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvkkhrdisplay.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvkkhrdisplay.so deleted file mode 100755 index 265d6f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvkkhrdisplay.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvnc.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvnc.so deleted file mode 100755 index a18aaa1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqvnc.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-egl.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-egl.so deleted file mode 100755 index b3bb41b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-egl.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-generic.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-generic.so deleted file mode 100755 index 5b8d9b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqwayland-generic.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqxcb.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqxcb.so deleted file mode 100755 index 5af5594..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platforms/libqxcb.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqgtk3.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqgtk3.so deleted file mode 100755 index 3257d96..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqgtk3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqxdgdesktopportal.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqxdgdesktopportal.so deleted file mode 100755 index 15ea936..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/platformthemes/libqxdgdesktopportal.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_geoclue2.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_geoclue2.so deleted file mode 100755 index 54a27db..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_geoclue2.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_nmea.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_nmea.so deleted file mode 100755 index 4157705..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_nmea.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_positionpoll.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_positionpoll.so deleted file mode 100755 index d3ebc2e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/position/libqtposition_positionpoll.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/printsupport/libcupsprintersupport.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/printsupport/libcupsprintersupport.so deleted file mode 100755 index 71a47b2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/printsupport/libcupsprintersupport.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/qmllint/libquicklintplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/qmllint/libquicklintplugin.so deleted file mode 100755 index df6f1bc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/qmllint/libquicklintplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/libopenglrenderer.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/libopenglrenderer.so deleted file mode 100755 index 0f36504..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/libopenglrenderer.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/librhirenderer.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/librhirenderer.so deleted file mode 100755 index cb0de03..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderers/librhirenderer.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderplugins/libscene2d.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderplugins/libscene2d.so deleted file mode 100755 index a6e9472..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/renderplugins/libscene2d.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libassimpsceneimport.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libassimpsceneimport.so deleted file mode 100755 index f64ef4f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libassimpsceneimport.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneexport.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneexport.so deleted file mode 100755 index b896493..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneexport.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneimport.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneimport.so deleted file mode 100755 index b66e6c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sceneparsers/libgltfsceneimport.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_generic.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_generic.so deleted file mode 100755 index b8f0f6a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_generic.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_iio-sensor-proxy.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_iio-sensor-proxy.so deleted file mode 100755 index 6ef4bdd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sensors/libqtsensors_iio-sensor-proxy.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlite.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlite.so deleted file mode 100755 index 3b2c84e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlite.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmimer.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmimer.so deleted file mode 100755 index d8d8e32..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmimer.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmysql.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmysql.so deleted file mode 100755 index 5df895a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlmysql.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlodbc.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlodbc.so deleted file mode 100755 index a37c965..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlodbc.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlpsql.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlpsql.so deleted file mode 100755 index cc4d190..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/sqldrivers/libqsqlpsql.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_mock.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_mock.so deleted file mode 100755 index cfa54b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_mock.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_speechd.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_speechd.so deleted file mode 100755 index 1c652df..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_speechd.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqcertonlybackend.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqcertonlybackend.so deleted file mode 100755 index c39c3c6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqcertonlybackend.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqopensslbackend.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqopensslbackend.so deleted file mode 100755 index 809dd6e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/tls/libqopensslbackend.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-decoration-client/libbradient.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-decoration-client/libbradient.so deleted file mode 100755 index d7a5e7c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-decoration-client/libbradient.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdmabuf-server.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdmabuf-server.so deleted file mode 100755 index 434faef..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdmabuf-server.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdrm-egl-server.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdrm-egl-server.so deleted file mode 100755 index 747912d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdrm-egl-server.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so deleted file mode 100755 index 2df82c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libshm-emulation-server.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libshm-emulation-server.so deleted file mode 100755 index 3dc6335..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libshm-emulation-server.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libvulkan-server.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libvulkan-server.so deleted file mode 100755 index 23e2893..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-graphics-integration-client/libvulkan-server.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libfullscreen-shell-v1.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libfullscreen-shell-v1.so deleted file mode 100755 index 69349de..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libfullscreen-shell-v1.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libivi-shell.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libivi-shell.so deleted file mode 100755 index eba78f6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libivi-shell.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libqt-shell.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libqt-shell.so deleted file mode 100755 index b3863cf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libqt-shell.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libwl-shell-plugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libwl-shell-plugin.so deleted file mode 100755 index 506318f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libwl-shell-plugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libxdg-shell.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libxdg-shell.so deleted file mode 100755 index ff62eb7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/wayland-shell-integration/libxdg-shell.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/webview/libqtwebview_webengine.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/webview/libqtwebview_webengine.so deleted file mode 100755 index a528587..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/webview/libqtwebview_webengine.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.so deleted file mode 100755 index f6a8a04..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.so deleted file mode 100755 index 29de6f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/Video.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/Video.qml deleted file mode 100644 index 80d28c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/Video.qml +++ /dev/null @@ -1,371 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtMultimedia - -/*! - \qmltype Video - \inherits Item - \ingroup multimedia_qml - \ingroup multimedia_video_qml - \inqmlmodule QtMultimedia - \brief A convenience type for showing a specified video. - - \c Video is a convenience type combining the functionality - of a \l MediaPlayer and a \l VideoOutput into one. It provides - simple video playback functionality without having to declare multiple - types. - - The following is sample code to implement video playback in a scene. - - \qml - Video { - id: video - width : 800 - height : 600 - source: "video.avi" - - MouseArea { - anchors.fill: parent - onClicked: { - video.play() - } - } - - focus: true - Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() - Keys.onLeftPressed: video.position = video.position - 5000 - Keys.onRightPressed: video.position = video.position + 5000 - } - \endqml - - The source file, \c video.avi, plays when you click the parent - of MouseArea. The video plays in an area of 800 by 600 pixels, and its \c id - property has the value \b{video}. - - Notice that because signals for the \l Keys have been defined pressing the: - \list - \li \uicontrol Spacebar toggles the pause button. - \li \uicontrol{Left Arrow} moves the current position in the video to 5 seconds - previously. - \li \uicontrol{Right Arrow} advances the current position in the video by 5 seconds. - \endlist - - Video supports un-transformed, stretched, and uniformly scaled - video presentation. For a description of stretched uniformly scaled - presentation, see the \l fillMode property description. - - \sa MediaPlayer, VideoOutput - -\omit - \section1 Screen Saver - - If it is likely that an application will be playing video for an extended - period of time without user interaction, it may be necessary to disable - the platform's screen saver. The \l ScreenSaver (from \l QtSystemInfo) - may be used to disable the screensaver in this fashion: - - \qml - import QtSystemInfo 5.0 - - ScreenSaver { screenSaverEnabled: false } - \endqml -\endomit -*/ - -// TODO: Restore Qt System Info docs when the module is released - -Item { - id: video - implicitWidth: videoOut.implicitWidth - implicitHeight: videoOut.implicitHeight - - /*** Properties of VideoOutput ***/ - /*! - \qmlproperty enumeration Video::fillMode - - Set this property to define how the video is scaled to fit the target - area. - - \list - \li VideoOutput.Stretch - the video is scaled to fit - \li VideoOutput.PreserveAspectFit - the video is scaled uniformly to fit without - cropping - \li VideoOutput.PreserveAspectCrop - the video is scaled uniformly to fill, cropping - if necessary - \endlist - - Because this type is for convenience in QML, it does not - support enumerations directly, so enumerations from \c VideoOutput are - used to access the available fill modes. - - The default fill mode is preserveAspectFit. - */ - property alias fillMode: videoOut.fillMode - - /*! - \qmlproperty int Video::orientation - - The orientation of the \c Video in degrees. Only multiples of 90 - degrees is supported, that is 0, 90, 180, 270, 360, etc. - */ - property alias orientation: videoOut.orientation - - - /*** Properties of MediaPlayer ***/ - - /*! - \qmlproperty enumeration Video::playbackState - - This read only property indicates the playback state of the media. - - \list - \li MediaPlayer.PlayingState - the media is playing - \li MediaPlayer.PausedState - the media is paused - \li MediaPlayer.StoppedState - the media is stopped - \endlist - - The default state is MediaPlayer.StoppedState. - */ - property alias playbackState: player.playbackState - - /*! - \qmlproperty real Video::bufferProgress - - This property holds how much of the data buffer is currently filled, - from 0.0 (empty) to 1.0 - (full). - */ - property alias bufferProgress: player.bufferProgress - - /*! - \qmlproperty int Video::duration - - This property holds the duration of the media in milliseconds. - - If the media doesn't have a fixed duration (a live stream for example) - this will be 0. - */ - property alias duration: player.duration - - /*! - \qmlproperty int Video::loops - - Determines how often the media is played before stopping. - Set to MediaPlayer.Infinite to loop the current media file forever. - - The default value is \c 1. Setting this property to \c 0 has no effect. - */ - property alias loops: player.loops - - /*! - \qmlproperty enumeration Video::error - - This property holds the error state of the video. It can be one of: - - \list - \li MediaPlayer.NoError - there is no current error. - \li MediaPlayer.ResourceError - the video cannot be played due to a problem - allocating resources. - \li MediaPlayer.FormatError - the video format is not supported. - \li MediaPlayer.NetworkError - the video cannot be played due to network issues. - \li MediaPlayer.AccessDenied - the video cannot be played due to insufficient - permissions. - \li MediaPlayer.ServiceMissing - the video cannot be played because the media - service could not be - instantiated. - \endlist - */ - property alias error: player.error - - /*! - \qmlproperty string Video::errorString - - This property holds a string describing the current error condition in more detail. - */ - property alias errorString: player.errorString - - /*! - \qmlproperty bool Video::hasAudio - - This property holds whether the current media has audio content. - */ - property alias hasAudio: player.hasAudio - - /*! - \qmlproperty bool Video::hasVideo - - This property holds whether the current media has video content. - */ - property alias hasVideo: player.hasVideo - - /*! - \qmlproperty mediaMetaData Video::metaData - - This property holds the meta data for the current media. - - See \l{MediaPlayer::metaData}{MediaPlayer.metaData} for details about each meta data key. - - \sa {mediaMetaData} - */ - property alias metaData: player.metaData - - /*! - \qmlproperty bool Video::muted - - This property holds whether the audio output is muted. - */ - property alias muted: audioOutput.muted - - /*! - \qmlproperty real Video::playbackRate - - This property holds the rate at which video is played at as a multiple - of the normal rate. - */ - property alias playbackRate: player.playbackRate - - /*! - \qmlproperty int Video::position - - This property holds the current playback position in milliseconds. - */ - property alias position: player.position - - /*! - \qmlproperty bool Video::seekable - - This property holds whether the playback position of the video can be - changed. - - If true, calling the \l seek() method or changing the \l position property - will cause playback to seek to the new position. - */ - property alias seekable: player.seekable - - /*! - \qmlproperty url Video::source - - This property holds the source URL of the media. - */ - property alias source: player.source - - /*! - \since 6.7 - \qmlproperty bool Video::autoPlay - - This property controls whether the media begins to play automatically after it gets loaded. - Defaults to \c false. - */ - property alias autoPlay: player.autoPlay - - /*! - \qmlproperty real Video::volume - - This property holds the audio volume. - - The volume is scaled linearly from \c 0.0 (silence) to \c 1.0 - (full volume). Values outside this range will be clamped. - - The default volume is \c 1.0. - - UI volume controls should usually be scaled nonlinearly. For example, - using a logarithmic scale will produce linear changes in perceived - loudness, which is what a user would normally expect from a volume - control. See \l {QtAudio::convertVolume()} for more details. - */ - property alias volume: audioOutput.volume - - /*! - \qmlsignal Video::paused() - - This signal is emitted when playback is paused. - */ - signal paused - - /*! - \qmlsignal Video::stopped() - - This signal is emitted when playback is stopped. - */ - signal stopped - - /*! - \qmlsignal Video::playing() - - This signal is emitted when playback is started or continued. - */ - signal playing - - /*! - \qmlsignal Video::errorOccurred(error, errorString) - - This signal is emitted when an \a error has occurred. The \a errorString - parameter may contain more detailed information about the error. - */ - signal errorOccurred(int error, string errorString) - - VideoOutput { - id: videoOut - anchors.fill: video - } - - MediaPlayer { - id: player - onPlaybackStateChanged: function(newState) { - if (newState === MediaPlayer.PausedState) - video.paused(); - else if (newState === MediaPlayer.StoppedState) - video.stopped(); - else - video.playing(); - } - onErrorOccurred: function(error, errorString) { - video.errorOccurred(error, errorString); - } - videoOutput: videoOut - audioOutput: AudioOutput { - id: audioOutput - } - } - - /*! - \qmlmethod Video::play() - - Starts playback of the media. - */ - function play() { - player.play(); - } - - /*! - \qmlmethod Video::pause() - - Pauses playback of the media. - */ - function pause() { - player.pause(); - } - - /*! - \qmlmethod Video::stop() - - Stops playback of the media. - */ - function stop() { - player.stop(); - } - - /*! - \qmlmethod Video::seek(offset) - - If the \l seekable property is true, seeks the current - playback position to \a offset. - - \sa seekable, position - */ - function seek(offset) { - player.position = offset; - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/libquickmultimediaplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/libquickmultimediaplugin.so deleted file mode 100755 index cf5b818..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/libquickmultimediaplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/plugins.qmltypes deleted file mode 100644 index 3ba7d36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/plugins.qmltypes +++ /dev/null @@ -1,2399 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QAudioDevice" - accessSemantics: "value" - exports: ["QtMultimedia/audioDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "Mode" - values: ["Null", "Input", "Output"] - } - Property { name: "id"; type: "QByteArray"; read: "id"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "description" - type: "QString" - read: "description" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "isDefault" - type: "bool" - read: "isDefault" - index: 2 - isReadonly: true - isConstant: true - } - Property { name: "mode"; type: "Mode"; read: "mode"; index: 3; isReadonly: true; isConstant: true } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QAudioDeviceDerived" - accessSemantics: "none" - prototype: "QAudioDevice" - exports: ["QtMultimedia/AudioDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QAudioInput" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/AudioInput 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "device" - type: "QAudioDevice" - read: "device" - write: "setDevice" - notify: "deviceChanged" - index: 0 - } - Property { - name: "volume" - type: "float" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 1 - } - Property { - name: "muted" - type: "bool" - read: "isMuted" - write: "setMuted" - notify: "mutedChanged" - index: 2 - } - Signal { name: "deviceChanged" } - Signal { - name: "volumeChanged" - Parameter { name: "volume"; type: "float" } - } - Signal { - name: "mutedChanged" - Parameter { name: "muted"; type: "bool" } - } - Method { - name: "setDevice" - Parameter { name: "device"; type: "QAudioDevice" } - } - Method { - name: "setVolume" - Parameter { name: "volume"; type: "float" } - } - Method { - name: "setMuted" - Parameter { name: "muted"; type: "bool" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QAudioOutput" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/AudioOutput 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "device" - type: "QAudioDevice" - read: "device" - write: "setDevice" - notify: "deviceChanged" - index: 0 - } - Property { - name: "volume" - type: "float" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 1 - } - Property { - name: "muted" - type: "bool" - read: "isMuted" - write: "setMuted" - notify: "mutedChanged" - index: 2 - } - Signal { name: "deviceChanged" } - Signal { - name: "volumeChanged" - Parameter { name: "volume"; type: "float" } - } - Signal { - name: "mutedChanged" - Parameter { name: "muted"; type: "bool" } - } - Method { - name: "setDevice" - Parameter { name: "device"; type: "QAudioDevice" } - } - Method { - name: "setVolume" - Parameter { name: "volume"; type: "float" } - } - Method { - name: "setMuted" - Parameter { name: "muted"; type: "bool" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QCameraDevice" - accessSemantics: "value" - exports: ["QtMultimedia/cameraDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "Position" - values: ["UnspecifiedPosition", "BackFace", "FrontFace"] - } - Property { name: "id"; type: "QByteArray"; read: "id"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "description" - type: "QString" - read: "description" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "isDefault" - type: "bool" - read: "isDefault" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "position" - type: "Position" - read: "position" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "videoFormats" - type: "QCameraFormat" - isList: true - read: "videoFormats" - index: 4 - isReadonly: true - isConstant: true - } - Property { - name: "correctionAngle" - type: "QtVideo::Rotation" - read: "correctionAngle" - index: 5 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QCameraDeviceDerived" - accessSemantics: "none" - prototype: "QCameraDevice" - exports: ["QtMultimedia/CameraDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QCamera" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/Camera 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Error" - values: ["NoError", "CameraError"] - } - Enum { - name: "FocusMode" - values: [ - "FocusModeAuto", - "FocusModeAutoNear", - "FocusModeAutoFar", - "FocusModeHyperfocal", - "FocusModeInfinity", - "FocusModeManual" - ] - } - Enum { - name: "FlashMode" - values: ["FlashOff", "FlashOn", "FlashAuto"] - } - Enum { - name: "TorchMode" - values: ["TorchOff", "TorchOn", "TorchAuto"] - } - Enum { - name: "ExposureMode" - values: [ - "ExposureAuto", - "ExposureManual", - "ExposurePortrait", - "ExposureNight", - "ExposureSports", - "ExposureSnow", - "ExposureBeach", - "ExposureAction", - "ExposureLandscape", - "ExposureNightPortrait", - "ExposureTheatre", - "ExposureSunset", - "ExposureSteadyPhoto", - "ExposureFireworks", - "ExposureParty", - "ExposureCandlelight", - "ExposureBarcode" - ] - } - Enum { - name: "WhiteBalanceMode" - values: [ - "WhiteBalanceAuto", - "WhiteBalanceManual", - "WhiteBalanceSunlight", - "WhiteBalanceCloudy", - "WhiteBalanceShade", - "WhiteBalanceTungsten", - "WhiteBalanceFluorescent", - "WhiteBalanceFlash", - "WhiteBalanceSunset" - ] - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "cameraDevice" - type: "QCameraDevice" - read: "cameraDevice" - write: "setCameraDevice" - notify: "cameraDeviceChanged" - index: 1 - } - Property { - name: "error" - type: "Error" - read: "error" - notify: "errorChanged" - index: 2 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 3 - isReadonly: true - } - Property { - name: "cameraFormat" - type: "QCameraFormat" - read: "cameraFormat" - write: "setCameraFormat" - notify: "cameraFormatChanged" - index: 4 - } - Property { - name: "focusMode" - type: "FocusMode" - read: "focusMode" - write: "setFocusMode" - notify: "focusModeChanged" - index: 5 - } - Property { - name: "focusPoint" - type: "QPointF" - read: "focusPoint" - notify: "focusPointChanged" - index: 6 - isReadonly: true - } - Property { - name: "customFocusPoint" - type: "QPointF" - read: "customFocusPoint" - write: "setCustomFocusPoint" - notify: "customFocusPointChanged" - index: 7 - } - Property { - name: "focusDistance" - type: "float" - read: "focusDistance" - write: "setFocusDistance" - notify: "focusDistanceChanged" - index: 8 - } - Property { - name: "minimumZoomFactor" - type: "float" - read: "minimumZoomFactor" - notify: "minimumZoomFactorChanged" - index: 9 - isReadonly: true - } - Property { - name: "maximumZoomFactor" - type: "float" - read: "maximumZoomFactor" - notify: "maximumZoomFactorChanged" - index: 10 - isReadonly: true - } - Property { - name: "zoomFactor" - type: "float" - read: "zoomFactor" - write: "setZoomFactor" - notify: "zoomFactorChanged" - index: 11 - } - Property { - name: "exposureTime" - type: "float" - read: "exposureTime" - notify: "exposureTimeChanged" - index: 12 - isReadonly: true - } - Property { - name: "manualExposureTime" - type: "int" - read: "manualExposureTime" - write: "setManualExposureTime" - notify: "manualExposureTimeChanged" - index: 13 - } - Property { - name: "isoSensitivity" - type: "int" - read: "isoSensitivity" - notify: "isoSensitivityChanged" - index: 14 - isReadonly: true - } - Property { - name: "manualIsoSensitivity" - type: "int" - read: "manualIsoSensitivity" - write: "setManualIsoSensitivity" - notify: "manualIsoSensitivityChanged" - index: 15 - } - Property { - name: "exposureCompensation" - type: "float" - read: "exposureCompensation" - write: "setExposureCompensation" - notify: "exposureCompensationChanged" - index: 16 - } - Property { - name: "exposureMode" - type: "QCamera::ExposureMode" - read: "exposureMode" - write: "setExposureMode" - notify: "exposureModeChanged" - index: 17 - } - Property { - name: "flashReady" - type: "bool" - read: "isFlashReady" - notify: "flashReady" - index: 18 - isReadonly: true - } - Property { - name: "flashMode" - type: "QCamera::FlashMode" - read: "flashMode" - write: "setFlashMode" - notify: "flashModeChanged" - index: 19 - } - Property { - name: "torchMode" - type: "QCamera::TorchMode" - read: "torchMode" - write: "setTorchMode" - notify: "torchModeChanged" - index: 20 - } - Property { - name: "whiteBalanceMode" - type: "WhiteBalanceMode" - read: "whiteBalanceMode" - write: "setWhiteBalanceMode" - notify: "whiteBalanceModeChanged" - index: 21 - } - Property { - name: "colorTemperature" - type: "int" - read: "colorTemperature" - write: "setColorTemperature" - notify: "colorTemperatureChanged" - index: 22 - } - Property { - name: "supportedFeatures" - type: "Features" - read: "supportedFeatures" - notify: "supportedFeaturesChanged" - index: 23 - isReadonly: true - } - Signal { - name: "activeChanged" - Parameter { type: "bool" } - } - Signal { name: "errorChanged" } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "QCamera::Error" } - Parameter { name: "errorString"; type: "QString" } - } - Signal { name: "cameraDeviceChanged" } - Signal { name: "cameraFormatChanged" } - Signal { name: "supportedFeaturesChanged" } - Signal { name: "focusModeChanged" } - Signal { - name: "zoomFactorChanged" - Parameter { type: "float" } - } - Signal { - name: "minimumZoomFactorChanged" - Parameter { type: "float" } - } - Signal { - name: "maximumZoomFactorChanged" - Parameter { type: "float" } - } - Signal { - name: "focusDistanceChanged" - Parameter { type: "float" } - } - Signal { name: "focusPointChanged" } - Signal { name: "customFocusPointChanged" } - Signal { - name: "flashReady" - Parameter { type: "bool" } - } - Signal { name: "flashModeChanged" } - Signal { name: "torchModeChanged" } - Signal { - name: "exposureTimeChanged" - Parameter { name: "speed"; type: "float" } - } - Signal { - name: "manualExposureTimeChanged" - Parameter { name: "speed"; type: "float" } - } - Signal { - name: "isoSensitivityChanged" - Parameter { type: "int" } - } - Signal { - name: "manualIsoSensitivityChanged" - Parameter { type: "int" } - } - Signal { - name: "exposureCompensationChanged" - Parameter { type: "float" } - } - Signal { name: "exposureModeChanged" } - Signal { name: "whiteBalanceModeChanged" } - Signal { name: "colorTemperatureChanged" } - Signal { name: "brightnessChanged" } - Signal { name: "contrastChanged" } - Signal { name: "saturationChanged" } - Signal { name: "hueChanged" } - Method { - name: "setActive" - Parameter { name: "active"; type: "bool" } - } - Method { name: "start" } - Method { name: "stop" } - Method { - name: "zoomTo" - Parameter { name: "zoom"; type: "float" } - Parameter { name: "rate"; type: "float" } - } - Method { - name: "setFlashMode" - Parameter { name: "mode"; type: "FlashMode" } - } - Method { - name: "setTorchMode" - Parameter { name: "mode"; type: "TorchMode" } - } - Method { - name: "setExposureMode" - Parameter { name: "mode"; type: "ExposureMode" } - } - Method { - name: "setExposureCompensation" - Parameter { name: "ev"; type: "float" } - } - Method { - name: "setManualIsoSensitivity" - Parameter { name: "iso"; type: "int" } - } - Method { name: "setAutoIsoSensitivity" } - Method { - name: "setManualExposureTime" - Parameter { name: "seconds"; type: "float" } - } - Method { name: "setAutoExposureTime" } - Method { - name: "setWhiteBalanceMode" - Parameter { name: "mode"; type: "WhiteBalanceMode" } - } - Method { - name: "setColorTemperature" - Parameter { name: "colorTemperature"; type: "int" } - } - Method { - name: "isFocusModeSupported" - type: "bool" - Parameter { name: "mode"; type: "FocusMode" } - } - Method { - name: "isFlashModeSupported" - type: "bool" - Parameter { name: "mode"; type: "FlashMode" } - } - Method { name: "isFlashReady"; type: "bool" } - Method { - name: "isTorchModeSupported" - type: "bool" - Parameter { name: "mode"; type: "TorchMode" } - } - Method { - name: "isExposureModeSupported" - type: "bool" - Parameter { name: "mode"; type: "ExposureMode" } - } - Method { - name: "isWhiteBalanceModeSupported" - type: "bool" - Parameter { name: "mode"; type: "WhiteBalanceMode" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QCameraFormat" - accessSemantics: "value" - exports: ["QtMultimedia/cameraFormat 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "resolution" - type: "QSize" - read: "resolution" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "pixelFormat" - type: "QVideoFrameFormat::PixelFormat" - read: "pixelFormat" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "minFrameRate" - type: "float" - read: "minFrameRate" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "maxFrameRate" - type: "float" - read: "maxFrameRate" - index: 3 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QCapturableWindow" - accessSemantics: "value" - exports: ["QtMultimedia/capturableWindow 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "description" - type: "QString" - read: "description" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "isValid" - type: "bool" - read: "isValid" - index: 1 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QImageCapture" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Error" - values: [ - "NoError", - "NotReadyError", - "ResourceError", - "OutOfSpaceError", - "NotSupportedFeatureError", - "FormatError" - ] - } - Enum { - name: "Quality" - values: [ - "VeryLowQuality", - "LowQuality", - "NormalQuality", - "HighQuality", - "VeryHighQuality" - ] - } - Enum { - name: "FileFormat" - values: [ - "UnspecifiedFormat", - "JPEG", - "PNG", - "WebP", - "Tiff", - "LastFileFormat" - ] - } - Property { - name: "readyForCapture" - type: "bool" - read: "isReadyForCapture" - notify: "readyForCaptureChanged" - index: 0 - isReadonly: true - } - Property { - name: "metaData" - type: "QMediaMetaData" - read: "metaData" - write: "setMetaData" - notify: "metaDataChanged" - index: 1 - } - Property { - name: "error" - type: "Error" - read: "error" - notify: "errorChanged" - index: 2 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 3 - isReadonly: true - } - Property { - name: "fileFormat" - type: "FileFormat" - read: "fileFormat" - notify: "fileFormatChanged" - index: 4 - isReadonly: true - } - Property { - name: "quality" - type: "Quality" - read: "quality" - notify: "qualityChanged" - index: 5 - isReadonly: true - } - Signal { name: "errorChanged" } - Signal { - name: "errorOccurred" - Parameter { name: "id"; type: "int" } - Parameter { name: "error"; type: "QImageCapture::Error" } - Parameter { name: "errorString"; type: "QString" } - } - Signal { - name: "readyForCaptureChanged" - Parameter { name: "ready"; type: "bool" } - } - Signal { name: "metaDataChanged" } - Signal { name: "fileFormatChanged" } - Signal { name: "qualityChanged" } - Signal { name: "resolutionChanged" } - Signal { - name: "imageExposed" - Parameter { name: "id"; type: "int" } - } - Signal { - name: "imageCaptured" - Parameter { name: "id"; type: "int" } - Parameter { name: "preview"; type: "QImage" } - } - Signal { - name: "imageMetadataAvailable" - Parameter { name: "id"; type: "int" } - Parameter { name: "metaData"; type: "QMediaMetaData" } - } - Signal { - name: "imageAvailable" - Parameter { name: "id"; type: "int" } - Parameter { name: "frame"; type: "QVideoFrame" } - } - Signal { - name: "imageSaved" - Parameter { name: "id"; type: "int" } - Parameter { name: "fileName"; type: "QString" } - } - Method { - name: "captureToFile" - type: "int" - Parameter { name: "location"; type: "QString" } - } - Method { name: "captureToFile"; type: "int"; isCloned: true } - Method { name: "capture"; type: "int" } - Method { - name: "_q_error" - Parameter { type: "int" } - Parameter { type: "int" } - Parameter { type: "QString" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaCaptureSession" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/CaptureSession 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "audioInput" - type: "QAudioInput" - isPointer: true - read: "audioInput" - write: "setAudioInput" - notify: "audioInputChanged" - index: 0 - } - Property { - name: "audioOutput" - type: "QAudioOutput" - isPointer: true - read: "audioOutput" - write: "setAudioOutput" - notify: "audioOutputChanged" - index: 1 - } - Property { - name: "camera" - type: "QCamera" - isPointer: true - read: "camera" - write: "setCamera" - notify: "cameraChanged" - index: 2 - } - Property { - name: "screenCapture" - type: "QScreenCapture" - isPointer: true - read: "screenCapture" - write: "setScreenCapture" - notify: "screenCaptureChanged" - index: 3 - } - Property { - name: "windowCapture" - type: "QWindowCapture" - isPointer: true - read: "windowCapture" - write: "setWindowCapture" - notify: "windowCaptureChanged" - index: 4 - } - Property { - name: "imageCapture" - type: "QImageCapture" - isPointer: true - read: "imageCapture" - write: "setImageCapture" - notify: "imageCaptureChanged" - index: 5 - } - Property { - name: "recorder" - type: "QMediaRecorder" - isPointer: true - read: "recorder" - write: "setRecorder" - notify: "recorderChanged" - index: 6 - } - Property { - name: "videoOutput" - type: "QObject" - isPointer: true - read: "videoOutput" - write: "setVideoOutput" - notify: "videoOutputChanged" - index: 7 - } - Signal { name: "audioInputChanged" } - Signal { name: "cameraChanged" } - Signal { name: "screenCaptureChanged" } - Signal { name: "windowCaptureChanged" } - Signal { name: "imageCaptureChanged" } - Signal { name: "recorderChanged" } - Signal { name: "videoOutputChanged" } - Signal { name: "audioOutputChanged" } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaDevices" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/MediaDevices 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "audioInputs" - type: "QAudioDevice" - isList: true - read: "audioInputs" - notify: "audioInputsChanged" - index: 0 - isReadonly: true - } - Property { - name: "audioOutputs" - type: "QAudioDevice" - isList: true - read: "audioOutputs" - notify: "audioOutputsChanged" - index: 1 - isReadonly: true - } - Property { - name: "videoInputs" - type: "QCameraDevice" - isList: true - read: "videoInputs" - notify: "videoInputsChanged" - index: 2 - isReadonly: true - } - Property { - name: "defaultAudioInput" - type: "QAudioDevice" - read: "defaultAudioInput" - notify: "audioInputsChanged" - index: 3 - isReadonly: true - } - Property { - name: "defaultAudioOutput" - type: "QAudioDevice" - read: "defaultAudioOutput" - notify: "audioOutputsChanged" - index: 4 - isReadonly: true - } - Property { - name: "defaultVideoInput" - type: "QCameraDevice" - read: "defaultVideoInput" - notify: "videoInputsChanged" - index: 5 - isReadonly: true - } - Signal { name: "audioInputsChanged" } - Signal { name: "audioOutputsChanged" } - Signal { name: "videoInputsChanged" } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaFormat" - accessSemantics: "value" - exports: ["QtMultimedia/mediaFormat 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "FileFormat" - values: [ - "UnspecifiedFormat", - "WMV", - "AVI", - "Matroska", - "MPEG4", - "Ogg", - "QuickTime", - "WebM", - "Mpeg4Audio", - "AAC", - "WMA", - "MP3", - "FLAC", - "Wave", - "LastFileFormat" - ] - } - Enum { - name: "AudioCodec" - isScoped: true - values: [ - "Unspecified", - "MP3", - "AAC", - "AC3", - "EAC3", - "FLAC", - "DolbyTrueHD", - "Opus", - "Vorbis", - "Wave", - "WMA", - "ALAC", - "LastAudioCodec" - ] - } - Enum { - name: "VideoCodec" - isScoped: true - values: [ - "Unspecified", - "MPEG1", - "MPEG2", - "MPEG4", - "H264", - "H265", - "VP8", - "VP9", - "AV1", - "Theora", - "WMV", - "MotionJPEG", - "LastVideoCodec" - ] - } - Enum { - name: "ConversionMode" - values: ["Encode", "Decode"] - } - Property { - name: "fileFormat" - type: "FileFormat" - read: "fileFormat" - write: "setFileFormat" - index: 0 - } - Property { - name: "audioCodec" - type: "AudioCodec" - read: "audioCodec" - write: "setAudioCodec" - index: 1 - } - Property { - name: "videoCodec" - type: "VideoCodec" - read: "videoCodec" - write: "setVideoCodec" - index: 2 - } - Method { - name: "isSupported" - type: "bool" - Parameter { name: "mode"; type: "ConversionMode" } - } - Method { - name: "supportedFileFormats" - type: "FileFormat" - isList: true - Parameter { name: "m"; type: "ConversionMode" } - } - Method { - name: "supportedVideoCodecs" - type: "VideoCodec" - isList: true - Parameter { name: "m"; type: "ConversionMode" } - } - Method { - name: "supportedAudioCodecs" - type: "AudioCodec" - isList: true - Parameter { name: "m"; type: "ConversionMode" } - } - Method { - name: "fileFormatName" - type: "QString" - Parameter { name: "fileFormat"; type: "FileFormat" } - } - Method { - name: "audioCodecName" - type: "QString" - Parameter { name: "codec"; type: "AudioCodec" } - } - Method { - name: "videoCodecName" - type: "QString" - Parameter { name: "codec"; type: "VideoCodec" } - } - Method { - name: "fileFormatDescription" - type: "QString" - Parameter { name: "fileFormat"; type: "QMediaFormat::FileFormat" } - } - Method { - name: "audioCodecDescription" - type: "QString" - Parameter { name: "codec"; type: "QMediaFormat::AudioCodec" } - } - Method { - name: "videoCodecDescription" - type: "QString" - Parameter { name: "codec"; type: "QMediaFormat::VideoCodec" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaFormatDerived" - accessSemantics: "none" - prototype: "QMediaFormat" - exports: ["QtMultimedia/MediaFormat 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaMetaData" - accessSemantics: "value" - exports: ["QtMultimedia/mediaMetaData 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "Key" - values: [ - "Title", - "Author", - "Comment", - "Description", - "Genre", - "Date", - "Language", - "Publisher", - "Copyright", - "Url", - "Duration", - "MediaType", - "FileFormat", - "AudioBitRate", - "AudioCodec", - "VideoBitRate", - "VideoCodec", - "VideoFrameRate", - "AlbumTitle", - "AlbumArtist", - "ContributingArtist", - "TrackNumber", - "Composer", - "LeadPerformer", - "ThumbnailImage", - "CoverArtImage", - "Orientation", - "Resolution" - ] - } - Method { - name: "value" - type: "QVariant" - Parameter { name: "k"; type: "Key" } - } - Method { - name: "insert" - Parameter { name: "k"; type: "Key" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "remove" - Parameter { name: "k"; type: "Key" } - } - Method { name: "keys"; type: "Key"; isList: true } - Method { name: "clear" } - Method { name: "isEmpty"; type: "bool" } - Method { - name: "stringValue" - type: "QString" - Parameter { name: "k"; type: "Key" } - } - Method { - name: "metaDataKeyToString" - type: "QString" - Parameter { name: "k"; type: "Key" } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaMetaDataDerived" - accessSemantics: "none" - prototype: "QMediaMetaData" - exports: ["QtMultimedia/MediaMetaData 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - } - Component { - file: "qmediaplayer.h" - name: "QMediaPlayer" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "PlaybackState" - values: ["StoppedState", "PlayingState", "PausedState"] - } - Enum { - name: "MediaStatus" - values: [ - "NoMedia", - "LoadingMedia", - "LoadedMedia", - "StalledMedia", - "BufferingMedia", - "BufferedMedia", - "EndOfMedia", - "InvalidMedia" - ] - } - Enum { - name: "Error" - values: [ - "NoError", - "ResourceError", - "FormatError", - "NetworkError", - "AccessDeniedError" - ] - } - Enum { - name: "Loops" - values: ["Infinite", "Once"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "duration" - type: "qlonglong" - read: "duration" - notify: "durationChanged" - index: 1 - isReadonly: true - } - Property { - name: "position" - type: "qlonglong" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 2 - } - Property { - name: "bufferProgress" - type: "float" - read: "bufferProgress" - notify: "bufferProgressChanged" - index: 3 - isReadonly: true - } - Property { - name: "hasAudio" - type: "bool" - read: "hasAudio" - notify: "hasAudioChanged" - index: 4 - isReadonly: true - } - Property { - name: "hasVideo" - type: "bool" - read: "hasVideo" - notify: "hasVideoChanged" - index: 5 - isReadonly: true - } - Property { - name: "seekable" - type: "bool" - read: "isSeekable" - notify: "seekableChanged" - index: 6 - isReadonly: true - } - Property { - name: "playing" - type: "bool" - read: "isPlaying" - notify: "playingChanged" - index: 7 - isReadonly: true - } - Property { - name: "playbackRate" - type: "double" - read: "playbackRate" - write: "setPlaybackRate" - notify: "playbackRateChanged" - index: 8 - } - Property { - name: "loops" - type: "int" - read: "loops" - write: "setLoops" - notify: "loopsChanged" - index: 9 - } - Property { - name: "playbackState" - type: "PlaybackState" - read: "playbackState" - notify: "playbackStateChanged" - index: 10 - isReadonly: true - } - Property { - name: "mediaStatus" - type: "MediaStatus" - read: "mediaStatus" - notify: "mediaStatusChanged" - index: 11 - isReadonly: true - } - Property { - name: "metaData" - type: "QMediaMetaData" - read: "metaData" - notify: "metaDataChanged" - index: 12 - isReadonly: true - } - Property { - name: "error" - type: "Error" - read: "error" - notify: "errorChanged" - index: 13 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 14 - isReadonly: true - } - Property { - name: "videoOutput" - type: "QObject" - isPointer: true - read: "videoOutput" - write: "setVideoOutput" - notify: "videoOutputChanged" - index: 15 - } - Property { - name: "audioOutput" - type: "QAudioOutput" - isPointer: true - read: "audioOutput" - write: "setAudioOutput" - notify: "audioOutputChanged" - index: 16 - } - Property { - name: "audioTracks" - type: "QMediaMetaData" - isList: true - read: "audioTracks" - notify: "tracksChanged" - index: 17 - isReadonly: true - } - Property { - name: "videoTracks" - type: "QMediaMetaData" - isList: true - read: "videoTracks" - notify: "tracksChanged" - index: 18 - isReadonly: true - } - Property { - name: "subtitleTracks" - type: "QMediaMetaData" - isList: true - read: "subtitleTracks" - notify: "tracksChanged" - index: 19 - isReadonly: true - } - Property { - name: "activeAudioTrack" - type: "int" - read: "activeAudioTrack" - write: "setActiveAudioTrack" - notify: "activeTracksChanged" - index: 20 - } - Property { - name: "activeVideoTrack" - type: "int" - read: "activeVideoTrack" - write: "setActiveVideoTrack" - notify: "activeTracksChanged" - index: 21 - } - Property { - name: "activeSubtitleTrack" - type: "int" - read: "activeSubtitleTrack" - write: "setActiveSubtitleTrack" - notify: "activeTracksChanged" - index: 22 - } - Signal { - name: "sourceChanged" - Parameter { name: "media"; type: "QUrl" } - } - Signal { - name: "playbackStateChanged" - Parameter { name: "newState"; type: "QMediaPlayer::PlaybackState" } - } - Signal { - name: "mediaStatusChanged" - Parameter { name: "status"; type: "QMediaPlayer::MediaStatus" } - } - Signal { - name: "durationChanged" - Parameter { name: "duration"; type: "qlonglong" } - } - Signal { - name: "positionChanged" - Parameter { name: "position"; type: "qlonglong" } - } - Signal { - name: "hasAudioChanged" - Parameter { name: "available"; type: "bool" } - } - Signal { - name: "hasVideoChanged" - Parameter { name: "videoAvailable"; type: "bool" } - } - Signal { - name: "bufferProgressChanged" - Parameter { name: "progress"; type: "float" } - } - Signal { - name: "seekableChanged" - Parameter { name: "seekable"; type: "bool" } - } - Signal { - name: "playingChanged" - Parameter { name: "playing"; type: "bool" } - } - Signal { - name: "playbackRateChanged" - Parameter { name: "rate"; type: "double" } - } - Signal { name: "loopsChanged" } - Signal { name: "metaDataChanged" } - Signal { name: "videoOutputChanged" } - Signal { name: "audioOutputChanged" } - Signal { name: "tracksChanged" } - Signal { name: "activeTracksChanged" } - Signal { name: "errorChanged" } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "QMediaPlayer::Error" } - Parameter { name: "errorString"; type: "QString" } - } - Method { name: "play" } - Method { name: "pause" } - Method { name: "stop" } - Method { - name: "setPosition" - Parameter { name: "position"; type: "qlonglong" } - } - Method { - name: "setPlaybackRate" - Parameter { name: "rate"; type: "double" } - } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - } - Method { - name: "setSourceDevice" - Parameter { name: "device"; type: "QIODevice"; isPointer: true } - Parameter { name: "sourceUrl"; type: "QUrl" } - } - Method { - name: "setSourceDevice" - isCloned: true - Parameter { name: "device"; type: "QIODevice"; isPointer: true } - } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QMediaRecorder" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/MediaRecorder 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Quality" - values: [ - "VeryLowQuality", - "LowQuality", - "NormalQuality", - "HighQuality", - "VeryHighQuality" - ] - } - Enum { - name: "EncodingMode" - values: [ - "ConstantQualityEncoding", - "ConstantBitRateEncoding", - "AverageBitRateEncoding", - "TwoPassEncoding" - ] - } - Enum { - name: "RecorderState" - values: ["StoppedState", "RecordingState", "PausedState"] - } - Enum { - name: "Error" - values: [ - "NoError", - "ResourceError", - "FormatError", - "OutOfSpaceError", - "LocationNotWritable" - ] - } - Property { - name: "recorderState" - type: "QMediaRecorder::RecorderState" - read: "recorderState" - notify: "recorderStateChanged" - index: 0 - isReadonly: true - } - Property { - name: "duration" - type: "qlonglong" - read: "duration" - notify: "durationChanged" - index: 1 - isReadonly: true - } - Property { - name: "outputLocation" - type: "QUrl" - read: "outputLocation" - write: "setOutputLocation" - index: 2 - } - Property { - name: "actualLocation" - type: "QUrl" - read: "actualLocation" - notify: "actualLocationChanged" - index: 3 - isReadonly: true - } - Property { - name: "metaData" - type: "QMediaMetaData" - read: "metaData" - write: "setMetaData" - notify: "metaDataChanged" - index: 4 - } - Property { - name: "error" - type: "QMediaRecorder::Error" - read: "error" - notify: "errorChanged" - index: 5 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 6 - isReadonly: true - } - Property { - name: "mediaFormat" - type: "QMediaFormat" - read: "mediaFormat" - write: "setMediaFormat" - notify: "mediaFormatChanged" - index: 7 - } - Property { - name: "quality" - type: "Quality" - read: "quality" - write: "setQuality" - notify: "qualityChanged" - index: 8 - } - Property { - name: "encodingMode" - type: "QMediaRecorder::EncodingMode" - read: "encodingMode" - write: "setEncodingMode" - notify: "encodingModeChanged" - index: 9 - } - Property { - name: "videoResolution" - type: "QSize" - read: "videoResolution" - write: "setVideoResolution" - notify: "videoResolutionChanged" - index: 10 - } - Property { - name: "videoFrameRate" - type: "double" - read: "videoFrameRate" - write: "setVideoFrameRate" - notify: "videoFrameRateChanged" - index: 11 - } - Property { - name: "videoBitRate" - type: "int" - read: "videoBitRate" - write: "setVideoBitRate" - notify: "videoBitRateChanged" - index: 12 - } - Property { - name: "audioBitRate" - type: "int" - read: "audioBitRate" - write: "setAudioBitRate" - notify: "audioBitRateChanged" - index: 13 - } - Property { - name: "audioChannelCount" - type: "int" - read: "audioChannelCount" - write: "setAudioChannelCount" - notify: "audioChannelCountChanged" - index: 14 - } - Property { - name: "audioSampleRate" - type: "int" - read: "audioSampleRate" - write: "setAudioSampleRate" - notify: "audioSampleRateChanged" - index: 15 - } - Signal { - name: "recorderStateChanged" - Parameter { name: "state"; type: "RecorderState" } - } - Signal { - name: "durationChanged" - Parameter { name: "duration"; type: "qlonglong" } - } - Signal { - name: "actualLocationChanged" - Parameter { name: "location"; type: "QUrl" } - } - Signal { name: "encoderSettingsChanged" } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "Error" } - Parameter { name: "errorString"; type: "QString" } - } - Signal { name: "errorChanged" } - Signal { name: "metaDataChanged" } - Signal { name: "mediaFormatChanged" } - Signal { name: "encodingModeChanged" } - Signal { name: "qualityChanged" } - Signal { name: "videoResolutionChanged" } - Signal { name: "videoFrameRateChanged" } - Signal { name: "videoBitRateChanged" } - Signal { name: "audioBitRateChanged" } - Signal { name: "audioChannelCountChanged" } - Signal { name: "audioSampleRateChanged" } - Method { name: "record" } - Method { name: "pause" } - Method { name: "stop" } - } - Component { - file: "private/qquickimagecapture_p.h" - name: "QQuickImageCapture" - accessSemantics: "reference" - prototype: "QImageCapture" - exports: ["QtMultimedia/ImageCapture 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "preview" - type: "QString" - read: "preview" - notify: "previewChanged" - index: 0 - isReadonly: true - } - Signal { name: "previewChanged" } - Method { - name: "saveToFile" - Parameter { name: "location"; type: "QUrl" } - } - Method { - name: "_q_imageCaptured" - Parameter { type: "int" } - Parameter { type: "QImage" } - } - } - Component { - file: "private/qquickmediaplayer_p.h" - name: "QQuickMediaPlayer" - accessSemantics: "reference" - prototype: "QMediaPlayer" - exports: ["QtMultimedia/MediaPlayer 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "source" - type: "QUrl" - read: "qmlSource" - write: "qmlSetSource" - notify: "qmlSourceChanged" - index: 0 - isFinal: true - } - Property { - name: "duration" - type: "int" - read: "qmlDuration" - notify: "qmlDurationChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "position" - type: "int" - read: "qmlPosition" - write: "setQmlPosition" - notify: "qmlPositionChanged" - index: 2 - isFinal: true - } - Property { - name: "autoPlay" - type: "bool" - read: "autoPlay" - write: "setAutoPlay" - notify: "autoPlayChanged" - index: 3 - isFinal: true - } - Signal { - name: "qmlSourceChanged" - Parameter { name: "source"; type: "QUrl" } - } - Signal { - name: "qmlPositionChanged" - Parameter { name: "position"; type: "int" } - } - Signal { - name: "qmlDurationChanged" - Parameter { name: "duration"; type: "int" } - } - Signal { - name: "autoPlayChanged" - Parameter { name: "autoPlay"; type: "bool" } - } - } - Component { - file: "private/qquickscreencapture_p.h" - name: "QQuickScreenCatpure" - accessSemantics: "reference" - prototype: "QScreenCapture" - exports: ["QtMultimedia/ScreenCapture 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "screen" - type: "QQuickScreenInfo" - isPointer: true - read: "qmlScreen" - write: "qmlSetScreen" - notify: "screenChanged" - index: 0 - } - Signal { - name: "screenChanged" - Parameter { type: "QQuickScreenInfo"; isPointer: true } - } - } - Component { - file: "private/qquicksoundeffect_p.h" - name: "QQuickSoundEffect" - accessSemantics: "reference" - prototype: "QSoundEffect" - exports: ["QtMultimedia/SoundEffect 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "source" - type: "QUrl" - read: "qmlSource" - write: "qmlSetSource" - notify: "sourceChanged" - index: 0 - } - Signal { - name: "sourceChanged" - Parameter { name: "source"; type: "QUrl" } - } - } - Component { - file: "private/qquickvideooutput_p.h" - name: "QQuickVideoOutput" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtMultimedia/VideoOutput 6.0", - "QtMultimedia/VideoOutput 6.3", - "QtMultimedia/VideoOutput 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Enum { - name: "FillMode" - values: ["Stretch", "PreserveAspectFit", "PreserveAspectCrop"] - } - Property { - name: "fillMode" - type: "FillMode" - read: "fillMode" - write: "setFillMode" - notify: "fillModeChanged" - index: 0 - } - Property { - name: "orientation" - type: "int" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 1 - } - Property { - name: "sourceRect" - type: "QRectF" - read: "sourceRect" - notify: "sourceRectChanged" - index: 2 - isReadonly: true - } - Property { - name: "contentRect" - type: "QRectF" - read: "contentRect" - notify: "contentRectChanged" - index: 3 - isReadonly: true - } - Property { - name: "videoSink" - type: "QVideoSink" - isPointer: true - read: "videoSink" - index: 4 - isReadonly: true - isConstant: true - } - Signal { name: "sourceChanged" } - Signal { - name: "fillModeChanged" - Parameter { type: "QQuickVideoOutput::FillMode" } - } - Signal { name: "orientationChanged" } - Signal { name: "sourceRectChanged" } - Signal { name: "contentRectChanged" } - Method { - name: "_q_newFrame" - Parameter { type: "QSize" } - } - Method { name: "_q_updateGeometry" } - Method { name: "_q_invalidateSceneGraph" } - Method { name: "_q_sceneGraphInitialized" } - Method { name: "videoSink"; type: "QVideoSink"; isPointer: true } - } - Component { - file: "private/qquickvideooutput_p.h" - name: "QQuickVideoSink" - accessSemantics: "reference" - prototype: "QVideoSink" - exports: ["QtMultimedia/VideoSink 6.0"] - exportMetaObjectRevisions: [1536] - Signal { name: "videoFrameChanged" } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QScreenCapture" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Error" - values: [ - "NoError", - "InternalError", - "CapturingNotSupported", - "CaptureFailed", - "NotFound" - ] - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "screen" - type: "QScreen" - isPointer: true - read: "screen" - write: "setScreen" - notify: "screenChanged" - index: 1 - } - Property { - name: "error" - type: "Error" - read: "error" - notify: "errorChanged" - index: 2 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 3 - isReadonly: true - } - Signal { - name: "activeChanged" - Parameter { type: "bool" } - } - Signal { name: "errorChanged" } - Signal { - name: "screenChanged" - Parameter { type: "QScreen"; isPointer: true } - } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "QScreenCapture::Error" } - Parameter { name: "errorString"; type: "QString" } - } - Method { - name: "setActive" - Parameter { name: "active"; type: "bool" } - } - Method { name: "start" } - Method { name: "stop" } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QScreen" - accessSemantics: "reference" - prototype: "QObject" - Property { name: "name"; type: "QString"; read: "name"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "manufacturer" - type: "QString" - read: "manufacturer" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "model" - type: "QString" - read: "model" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "serialNumber" - type: "QString" - read: "serialNumber" - index: 3 - isReadonly: true - isConstant: true - } - Property { name: "depth"; type: "int"; read: "depth"; index: 4; isReadonly: true; isConstant: true } - Property { - name: "size" - type: "QSize" - read: "size" - notify: "geometryChanged" - index: 5 - isReadonly: true - } - Property { - name: "availableSize" - type: "QSize" - read: "availableSize" - notify: "availableGeometryChanged" - index: 6 - isReadonly: true - } - Property { - name: "virtualSize" - type: "QSize" - read: "virtualSize" - notify: "virtualGeometryChanged" - index: 7 - isReadonly: true - } - Property { - name: "availableVirtualSize" - type: "QSize" - read: "availableVirtualSize" - notify: "virtualGeometryChanged" - index: 8 - isReadonly: true - } - Property { - name: "geometry" - type: "QRect" - read: "geometry" - notify: "geometryChanged" - index: 9 - isReadonly: true - } - Property { - name: "availableGeometry" - type: "QRect" - read: "availableGeometry" - notify: "availableGeometryChanged" - index: 10 - isReadonly: true - } - Property { - name: "virtualGeometry" - type: "QRect" - read: "virtualGeometry" - notify: "virtualGeometryChanged" - index: 11 - isReadonly: true - } - Property { - name: "availableVirtualGeometry" - type: "QRect" - read: "availableVirtualGeometry" - notify: "virtualGeometryChanged" - index: 12 - isReadonly: true - } - Property { - name: "physicalSize" - type: "QSizeF" - read: "physicalSize" - notify: "physicalSizeChanged" - index: 13 - isReadonly: true - } - Property { - name: "physicalDotsPerInchX" - type: "double" - read: "physicalDotsPerInchX" - notify: "physicalDotsPerInchChanged" - index: 14 - isReadonly: true - } - Property { - name: "physicalDotsPerInchY" - type: "double" - read: "physicalDotsPerInchY" - notify: "physicalDotsPerInchChanged" - index: 15 - isReadonly: true - } - Property { - name: "physicalDotsPerInch" - type: "double" - read: "physicalDotsPerInch" - notify: "physicalDotsPerInchChanged" - index: 16 - isReadonly: true - } - Property { - name: "logicalDotsPerInchX" - type: "double" - read: "logicalDotsPerInchX" - notify: "logicalDotsPerInchChanged" - index: 17 - isReadonly: true - } - Property { - name: "logicalDotsPerInchY" - type: "double" - read: "logicalDotsPerInchY" - notify: "logicalDotsPerInchChanged" - index: 18 - isReadonly: true - } - Property { - name: "logicalDotsPerInch" - type: "double" - read: "logicalDotsPerInch" - notify: "logicalDotsPerInchChanged" - index: 19 - isReadonly: true - } - Property { - name: "devicePixelRatio" - type: "double" - read: "devicePixelRatio" - notify: "physicalDotsPerInchChanged" - index: 20 - isReadonly: true - } - Property { - name: "primaryOrientation" - type: "Qt::ScreenOrientation" - read: "primaryOrientation" - notify: "primaryOrientationChanged" - index: 21 - isReadonly: true - } - Property { - name: "orientation" - type: "Qt::ScreenOrientation" - read: "orientation" - notify: "orientationChanged" - index: 22 - isReadonly: true - } - Property { - name: "nativeOrientation" - type: "Qt::ScreenOrientation" - read: "nativeOrientation" - index: 23 - isReadonly: true - } - Property { - name: "refreshRate" - type: "double" - read: "refreshRate" - notify: "refreshRateChanged" - index: 24 - isReadonly: true - } - Signal { - name: "geometryChanged" - Parameter { name: "geometry"; type: "QRect" } - } - Signal { - name: "availableGeometryChanged" - Parameter { name: "geometry"; type: "QRect" } - } - Signal { - name: "physicalSizeChanged" - Parameter { name: "size"; type: "QSizeF" } - } - Signal { - name: "physicalDotsPerInchChanged" - Parameter { name: "dpi"; type: "double" } - } - Signal { - name: "logicalDotsPerInchChanged" - Parameter { name: "dpi"; type: "double" } - } - Signal { - name: "virtualGeometryChanged" - Parameter { name: "rect"; type: "QRect" } - } - Signal { - name: "primaryOrientationChanged" - Parameter { name: "orientation"; type: "Qt::ScreenOrientation" } - } - Signal { - name: "orientationChanged" - Parameter { name: "orientation"; type: "Qt::ScreenOrientation" } - } - Signal { - name: "refreshRateChanged" - Parameter { name: "refreshRate"; type: "double" } - } - } - Component { - file: "qsoundeffect.h" - name: "QSoundEffect" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Loop" - values: ["Infinite"] - } - Enum { - name: "Status" - values: ["Null", "Loading", "Ready", "Error"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "loops" - type: "int" - read: "loopCount" - write: "setLoopCount" - notify: "loopCountChanged" - index: 1 - } - Property { - name: "loopsRemaining" - type: "int" - read: "loopsRemaining" - notify: "loopsRemainingChanged" - index: 2 - isReadonly: true - } - Property { - name: "volume" - type: "float" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 3 - } - Property { - name: "muted" - type: "bool" - read: "isMuted" - write: "setMuted" - notify: "mutedChanged" - index: 4 - } - Property { - name: "playing" - type: "bool" - read: "isPlaying" - notify: "playingChanged" - index: 5 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 6 - isReadonly: true - } - Property { - name: "audioDevice" - type: "QAudioDevice" - read: "audioDevice" - write: "setAudioDevice" - notify: "audioDeviceChanged" - index: 7 - } - Signal { name: "sourceChanged" } - Signal { name: "loopCountChanged" } - Signal { name: "loopsRemainingChanged" } - Signal { name: "volumeChanged" } - Signal { name: "mutedChanged" } - Signal { name: "loadedChanged" } - Signal { name: "playingChanged" } - Signal { name: "statusChanged" } - Signal { name: "audioDeviceChanged" } - Method { name: "play" } - Method { name: "stop" } - } - Component { - file: "qvideosink.h" - name: "QVideoSink" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "subtitleText" - type: "QString" - read: "subtitleText" - write: "setSubtitleText" - notify: "subtitleTextChanged" - index: 0 - } - Property { - name: "videoSize" - type: "QSize" - read: "videoSize" - notify: "videoSizeChanged" - index: 1 - isReadonly: true - } - Signal { - name: "videoFrameChanged" - Parameter { name: "frame"; type: "QVideoFrame" } - } - Signal { - name: "subtitleTextChanged" - Parameter { name: "subtitleText"; type: "QString" } - } - Signal { name: "videoSizeChanged" } - } - Component { - file: "private/qtmultimediaquicktypes_p.h" - name: "QWindowCapture" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtMultimedia/WindowCapture 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Error" - values: [ - "NoError", - "InternalError", - "CapturingNotSupported", - "CaptureFailed", - "NotFound" - ] - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "window" - type: "QCapturableWindow" - read: "window" - write: "setWindow" - notify: "windowChanged" - index: 1 - } - Property { - name: "error" - type: "Error" - read: "error" - notify: "errorChanged" - index: 2 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorChanged" - index: 3 - isReadonly: true - } - Signal { - name: "activeChanged" - Parameter { type: "bool" } - } - Signal { - name: "windowChanged" - Parameter { name: "window"; type: "QCapturableWindow" } - } - Signal { name: "errorChanged" } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "QWindowCapture::Error" } - Parameter { name: "errorString"; type: "QString" } - } - Method { - name: "setActive" - Parameter { name: "active"; type: "bool" } - } - Method { name: "start" } - Method { name: "stop" } - Method { name: "capturableWindows"; type: "QCapturableWindow"; isList: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/qmldir deleted file mode 100644 index 82f6417..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtMultimedia/qmldir +++ /dev/null @@ -1,10 +0,0 @@ -module QtMultimedia -linktarget Qt6::quickmultimedia -plugin quickmultimediaplugin -classname QMultimediaQuickModule -typeinfo plugins.qmltypes -depends QtQuick -prefer :/qt-project.org/imports/QtMultimedia/ -Video 6.0 Video.qml -Video 5.0 Video.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/libpositioningquickplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/libpositioningquickplugin.so deleted file mode 100755 index 1d27aab..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/libpositioningquickplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/plugins.qmltypes deleted file mode 100644 index 770f6d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/plugins.qmltypes +++ /dev/null @@ -1,1287 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/locationsingleton_p.h" - name: "LocationSingleton" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtPositioning/QtPositioning 5.0", - "QtPositioning/QtPositioning 5.12", - "QtPositioning/QtPositioning 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1280, 1292, 1536] - Method { name: "coordinate"; type: "QGeoCoordinate" } - Method { - name: "coordinate" - type: "QGeoCoordinate" - Parameter { name: "latitude"; type: "double" } - Parameter { name: "longitude"; type: "double" } - Parameter { name: "altitude"; type: "double" } - } - Method { - name: "coordinate" - type: "QGeoCoordinate" - isCloned: true - Parameter { name: "latitude"; type: "double" } - Parameter { name: "longitude"; type: "double" } - } - Method { name: "shape"; type: "QGeoShape" } - Method { name: "rectangle"; type: "QGeoRectangle" } - Method { - name: "rectangle" - type: "QGeoRectangle" - Parameter { name: "center"; type: "QGeoCoordinate" } - Parameter { name: "width"; type: "double" } - Parameter { name: "height"; type: "double" } - } - Method { - name: "rectangle" - type: "QGeoRectangle" - Parameter { name: "topLeft"; type: "QGeoCoordinate" } - Parameter { name: "bottomRight"; type: "QGeoCoordinate" } - } - Method { - name: "rectangle" - type: "QGeoRectangle" - Parameter { name: "coordinates"; type: "QVariantList" } - } - Method { name: "circle"; type: "QGeoCircle" } - Method { - name: "circle" - type: "QGeoCircle" - Parameter { name: "center"; type: "QGeoCoordinate" } - Parameter { name: "radius"; type: "double" } - } - Method { - name: "circle" - type: "QGeoCircle" - isCloned: true - Parameter { name: "center"; type: "QGeoCoordinate" } - } - Method { name: "path"; type: "QGeoPath" } - Method { - name: "path" - type: "QGeoPath" - Parameter { name: "value"; type: "QJSValue" } - Parameter { name: "width"; type: "double" } - } - Method { - name: "path" - type: "QGeoPath" - isCloned: true - Parameter { name: "value"; type: "QJSValue" } - } - Method { name: "polygon"; type: "QGeoPolygon" } - Method { - name: "polygon" - type: "QGeoPolygon" - Parameter { name: "value"; type: "QVariantList" } - } - Method { - name: "polygon" - type: "QGeoPolygon" - Parameter { name: "perimeter"; type: "QVariantList" } - Parameter { name: "holes"; type: "QVariantList" } - } - Method { - name: "shapeToCircle" - type: "QGeoCircle" - Parameter { name: "shape"; type: "QGeoShape" } - } - Method { - name: "shapeToRectangle" - type: "QGeoRectangle" - Parameter { name: "shape"; type: "QGeoShape" } - } - Method { - name: "shapeToPath" - type: "QGeoPath" - Parameter { name: "shape"; type: "QGeoShape" } - } - Method { - name: "shapeToPolygon" - type: "QGeoPolygon" - Parameter { name: "shape"; type: "QGeoShape" } - } - Method { - name: "mercatorToCoord" - revision: 1292 - type: "QGeoCoordinate" - Parameter { name: "mercator"; type: "QPointF" } - } - Method { - name: "coordToMercator" - revision: 1292 - type: "QPointF" - Parameter { name: "coord"; type: "QGeoCoordinate" } - } - } - Component { - file: "private/qdeclarativegeoaddress_p.h" - name: "QDeclarativeGeoAddress" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtPositioning/Address 5.0", - "QtPositioning/Address 6.0", - "QtPositioning/Address 6.2" - ] - exportMetaObjectRevisions: [1280, 1536, 1538] - Property { name: "address"; type: "QGeoAddress"; read: "address"; write: "setAddress"; index: 0 } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 1 - } - Property { - name: "country" - type: "QString" - read: "country" - write: "setCountry" - notify: "countryChanged" - index: 2 - } - Property { - name: "countryCode" - type: "QString" - read: "countryCode" - write: "setCountryCode" - notify: "countryCodeChanged" - index: 3 - } - Property { - name: "state" - type: "QString" - read: "state" - write: "setState" - notify: "stateChanged" - index: 4 - } - Property { - name: "county" - type: "QString" - read: "county" - write: "setCounty" - notify: "countyChanged" - index: 5 - } - Property { - name: "city" - type: "QString" - read: "city" - write: "setCity" - notify: "cityChanged" - index: 6 - } - Property { - name: "district" - type: "QString" - read: "district" - write: "setDistrict" - notify: "districtChanged" - index: 7 - } - Property { - name: "street" - type: "QString" - read: "street" - write: "setStreet" - notify: "streetChanged" - index: 8 - } - Property { - name: "streetNumber" - revision: 1538 - type: "QString" - read: "streetNumber" - write: "setStreetNumber" - notify: "streetNumberChanged" - index: 9 - } - Property { - name: "postalCode" - type: "QString" - read: "postalCode" - write: "setPostalCode" - notify: "postalCodeChanged" - index: 10 - } - Property { - name: "isTextGenerated" - type: "bool" - read: "isTextGenerated" - notify: "isTextGeneratedChanged" - index: 11 - isReadonly: true - } - Signal { name: "textChanged" } - Signal { name: "countryChanged" } - Signal { name: "countryCodeChanged" } - Signal { name: "stateChanged" } - Signal { name: "countyChanged" } - Signal { name: "cityChanged" } - Signal { name: "districtChanged" } - Signal { name: "streetChanged" } - Signal { name: "streetNumberChanged" } - Signal { name: "postalCodeChanged" } - Signal { name: "isTextGeneratedChanged" } - } - Component { - file: "private/qdeclarativegeolocation_p.h" - name: "QDeclarativeGeoLocation" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtPositioning/Location 5.0", - "QtPositioning/Location 5.13", - "QtPositioning/Location 6.0", - "QtPositioning/Location 6.2" - ] - exportMetaObjectRevisions: [1280, 1293, 1536, 1538] - Property { - name: "location" - type: "QGeoLocation" - read: "location" - write: "setLocation" - index: 0 - } - Property { - name: "address" - type: "QDeclarativeGeoAddress" - isPointer: true - bindable: "bindableAddress" - read: "address" - write: "setAddress" - index: 1 - } - Property { - name: "coordinate" - type: "QGeoCoordinate" - bindable: "bindableCoordinate" - read: "coordinate" - write: "setCoordinate" - index: 2 - } - Property { - name: "boundingShape" - revision: 1538 - type: "QGeoShape" - bindable: "bindableBoundingShape" - read: "boundingShape" - write: "setBoundingShape" - index: 3 - } - Property { - name: "extendedAttributes" - revision: 1293 - type: "QVariantMap" - bindable: "bindableExtendedAttributes" - read: "extendedAttributes" - write: "setExtendedAttributes" - index: 4 - } - } - Component { - file: "private/qdeclarativepluginparameter_p.h" - name: "QDeclarativePluginParameter" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtPositioning/PluginParameter 5.14", - "QtPositioning/PluginParameter 6.0" - ] - exportMetaObjectRevisions: [1294, 1536] - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 0 - } - Property { - name: "value" - type: "QVariant" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 1 - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "QString" } - } - Signal { - name: "valueChanged" - Parameter { name: "value"; type: "QVariant" } - } - Signal { name: "initialized" } - } - Component { - file: "private/qdeclarativeposition_p.h" - name: "QDeclarativePosition" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtPositioning/Position 5.0", - "QtPositioning/Position 5.1", - "QtPositioning/Position 5.2", - "QtPositioning/Position 6.0", - "QtPositioning/Position 6.3" - ] - exportMetaObjectRevisions: [1280, 1281, 1282, 1536, 1539] - Property { - name: "latitudeValid" - type: "bool" - bindable: "bindableLatitudeValid" - read: "isLatitudeValid" - index: 0 - isReadonly: true - } - Property { - name: "longitudeValid" - type: "bool" - bindable: "bindableLongitudeValid" - read: "isLongitudeValid" - index: 1 - isReadonly: true - } - Property { - name: "altitudeValid" - type: "bool" - bindable: "bindableAltitudeValid" - read: "isAltitudeValid" - index: 2 - isReadonly: true - } - Property { - name: "coordinate" - type: "QGeoCoordinate" - bindable: "bindableCoordinate" - read: "coordinate" - index: 3 - isReadonly: true - } - Property { - name: "timestamp" - type: "QDateTime" - bindable: "bindableTimestamp" - read: "timestamp" - index: 4 - isReadonly: true - } - Property { - name: "speed" - type: "double" - bindable: "bindableSpeed" - read: "speed" - index: 5 - isReadonly: true - } - Property { - name: "speedValid" - type: "bool" - bindable: "bindableSpeedValid" - read: "isSpeedValid" - index: 6 - isReadonly: true - } - Property { - name: "horizontalAccuracy" - type: "double" - bindable: "bindableHorizontalAccuracy" - read: "horizontalAccuracy" - index: 7 - isReadonly: true - } - Property { - name: "verticalAccuracy" - type: "double" - bindable: "binableVerticalAccuracy" - read: "verticalAccuracy" - index: 8 - isReadonly: true - } - Property { - name: "horizontalAccuracyValid" - type: "bool" - bindable: "bindableHorizontalAccuracyValid" - read: "isHorizontalAccuracyValid" - index: 9 - isReadonly: true - } - Property { - name: "verticalAccuracyValid" - type: "bool" - bindable: "bindableVerticalAccuracyValid" - read: "isVerticalAccuracyValid" - index: 10 - isReadonly: true - } - Property { - name: "directionValid" - revision: 1281 - type: "bool" - bindable: "bindableDirectionValid" - read: "isDirectionValid" - index: 11 - isReadonly: true - } - Property { - name: "direction" - revision: 1281 - type: "double" - bindable: "bindableDirection" - read: "direction" - index: 12 - isReadonly: true - } - Property { - name: "verticalSpeedValid" - revision: 1281 - type: "bool" - bindable: "bindableVerticalSpeedValid" - read: "isVerticalSpeedValid" - index: 13 - isReadonly: true - } - Property { - name: "verticalSpeed" - revision: 1281 - type: "double" - bindable: "bindableVerticalSpeed" - read: "verticalSpeed" - index: 14 - isReadonly: true - } - Property { - name: "magneticVariation" - revision: 1282 - type: "double" - bindable: "bindableMagneticVariation" - read: "magneticVariation" - index: 15 - isReadonly: true - } - Property { - name: "magneticVariationValid" - revision: 1282 - type: "bool" - bindable: "bindableMagneticVariationValid" - read: "isMagneticVariationValid" - index: 16 - isReadonly: true - } - Property { - name: "directionAccuracy" - revision: 1539 - type: "double" - bindable: "bindableDirectionAccuracy" - read: "directionAccuracy" - index: 17 - isReadonly: true - } - Property { - name: "directionAccuracyValid" - revision: 1539 - type: "bool" - bindable: "bindableDirectionAccuracyValid" - read: "isDirectionAccuracyValid" - index: 18 - isReadonly: true - } - } - Component { - file: "private/qdeclarativepositionsource_p.h" - name: "QDeclarativePositionSource" - accessSemantics: "reference" - defaultProperty: "parameters" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtPositioning/PositionSource 5.0", - "QtPositioning/PositionSource 5.14", - "QtPositioning/PositionSource 6.0" - ] - exportMetaObjectRevisions: [1280, 1294, 1536] - Enum { - name: "PositioningMethod" - values: [ - "NoPositioningMethods", - "SatellitePositioningMethods", - "NonSatellitePositioningMethods", - "AllPositioningMethods" - ] - } - Enum { - name: "PositioningMethods" - alias: "PositioningMethod" - isFlag: true - values: [ - "NoPositioningMethods", - "SatellitePositioningMethods", - "NonSatellitePositioningMethods", - "AllPositioningMethods" - ] - } - Enum { - name: "SourceError" - values: [ - "AccessError", - "ClosedError", - "UnknownSourceError", - "NoError", - "UpdateTimeoutError" - ] - } - Property { - name: "position" - type: "QDeclarativePosition" - isPointer: true - bindable: "bindablePosition" - read: "position" - notify: "positionChanged" - index: 0 - isReadonly: true - } - Property { - name: "active" - type: "bool" - bindable: "bindableActive" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 1 - } - Property { - name: "valid" - type: "bool" - bindable: "bindableIsValid" - read: "isValid" - notify: "validityChanged" - index: 2 - isReadonly: true - } - Property { - name: "updateInterval" - type: "int" - read: "updateInterval" - write: "setUpdateInterval" - notify: "updateIntervalChanged" - index: 3 - } - Property { - name: "supportedPositioningMethods" - type: "PositioningMethods" - bindable: "bindableSupportedPositioningMethods" - read: "supportedPositioningMethods" - notify: "supportedPositioningMethodsChanged" - index: 4 - isReadonly: true - } - Property { - name: "preferredPositioningMethods" - type: "PositioningMethods" - read: "preferredPositioningMethods" - write: "setPreferredPositioningMethods" - notify: "preferredPositioningMethodsChanged" - index: 5 - } - Property { - name: "sourceError" - type: "SourceError" - bindable: "bindableSourceError" - read: "sourceError" - notify: "sourceErrorChanged" - index: 6 - isReadonly: true - } - Property { - name: "name" - type: "QString" - bindable: "bindableName" - read: "name" - write: "setName" - notify: "nameChanged" - index: 7 - } - Property { - name: "parameters" - revision: 1294 - type: "QDeclarativePluginParameter" - isList: true - read: "parameters" - index: 8 - isReadonly: true - } - Signal { name: "positionChanged" } - Signal { name: "activeChanged" } - Signal { name: "updateIntervalChanged" } - Signal { name: "supportedPositioningMethodsChanged" } - Signal { name: "preferredPositioningMethodsChanged" } - Signal { name: "sourceErrorChanged" } - Signal { name: "nameChanged" } - Signal { name: "validityChanged" } - Method { - name: "update" - Parameter { name: "timeout"; type: "int" } - } - Method { name: "update"; isCloned: true } - Method { name: "start" } - Method { name: "stop" } - Method { - name: "positionUpdateReceived" - Parameter { name: "update"; type: "QGeoPositionInfo" } - } - Method { - name: "sourceErrorReceived" - Parameter { name: "error"; type: "QGeoPositionInfoSource::Error" } - } - Method { name: "onParameterInitialized" } - Method { name: "notifySupportedPositioningMethodsChanged" } - Method { - name: "setBackendProperty" - revision: 1294 - type: "bool" - Parameter { name: "name"; type: "QString" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "backendProperty" - revision: 1294 - type: "QVariant" - Parameter { name: "name"; type: "QString" } - } - } - Component { - file: "private/qdeclarativesatellitesource_p.h" - name: "QDeclarativeSatelliteSource" - accessSemantics: "reference" - defaultProperty: "parameters" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtPositioning/SatelliteSource 6.5"] - exportMetaObjectRevisions: [1541] - Enum { - name: "SourceError" - values: [ - "AccessError", - "ClosedError", - "NoError", - "UnknownSourceError", - "UpdateTimeoutError" - ] - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "valid" - type: "bool" - read: "isValid" - notify: "validityChanged" - index: 1 - isReadonly: true - } - Property { - name: "updateInterval" - type: "int" - read: "updateInterval" - write: "setUpdateInterval" - notify: "updateIntervalChanged" - index: 2 - } - Property { - name: "sourceError" - type: "SourceError" - read: "sourceError" - notify: "sourceErrorChanged" - index: 3 - isReadonly: true - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 4 - } - Property { - name: "parameters" - type: "QDeclarativePluginParameter" - isList: true - read: "parameters" - index: 5 - isReadonly: true - } - Property { - name: "satellitesInUse" - type: "QGeoSatelliteInfo" - isList: true - read: "satellitesInUse" - notify: "satellitesInUseChanged" - index: 6 - isReadonly: true - } - Property { - name: "satellitesInView" - type: "QGeoSatelliteInfo" - isList: true - read: "satellitesInView" - notify: "satellitesInViewChanged" - index: 7 - isReadonly: true - } - Signal { name: "activeChanged" } - Signal { name: "validityChanged" } - Signal { name: "updateIntervalChanged" } - Signal { name: "sourceErrorChanged" } - Signal { name: "nameChanged" } - Signal { name: "satellitesInUseChanged" } - Signal { name: "satellitesInViewChanged" } - Method { - name: "update" - Parameter { name: "timeout"; type: "int" } - } - Method { name: "update"; isCloned: true } - Method { name: "start" } - Method { name: "stop" } - Method { - name: "sourceErrorReceived" - Parameter { name: "error"; type: "QGeoSatelliteInfoSource::Error" } - } - Method { name: "onParameterInitialized" } - Method { - name: "satellitesInViewUpdateReceived" - Parameter { name: "satellites"; type: "QGeoSatelliteInfo"; isList: true } - } - Method { - name: "satellitesInUseUpdateReceived" - Parameter { name: "satellites"; type: "QGeoSatelliteInfo"; isList: true } - } - Method { - name: "setBackendProperty" - type: "bool" - Parameter { name: "name"; type: "QString" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "backendProperty" - type: "QVariant" - Parameter { name: "name"; type: "QString" } - } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoAddress" - accessSemantics: "value" - exports: [ - "QtPositioning/geoAddress 5.0", - "QtPositioning/geoAddress 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoCircle" - accessSemantics: "value" - prototype: "QGeoShape" - exports: [ - "QtPositioning/geoCircle 5.0", - "QtPositioning/geoCircle 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - Property { name: "center"; type: "QGeoCoordinate"; read: "center"; write: "setCenter"; index: 0 } - Property { name: "radius"; type: "double"; read: "radius"; write: "setRadius"; index: 1 } - Method { - name: "translate" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "translated" - type: "QGeoCircle" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "extendCircle" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { name: "toString"; type: "QString" } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoCoordinate" - accessSemantics: "value" - exports: [ - "QtPositioning/geoCoordinate 5.0", - "QtPositioning/geoCoordinate 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - Enum { - name: "CoordinateFormat" - values: [ - "Degrees", - "DegreesWithHemisphere", - "DegreesMinutes", - "DegreesMinutesWithHemisphere", - "DegreesMinutesSeconds", - "DegreesMinutesSecondsWithHemisphere" - ] - } - Property { name: "latitude"; type: "double"; read: "latitude"; write: "setLatitude"; index: 0 } - Property { name: "longitude"; type: "double"; read: "longitude"; write: "setLongitude"; index: 1 } - Property { name: "altitude"; type: "double"; read: "altitude"; write: "setAltitude"; index: 2 } - Property { name: "isValid"; type: "bool"; read: "isValid"; index: 3; isReadonly: true } - Method { - name: "distanceTo" - type: "double" - Parameter { name: "other"; type: "QGeoCoordinate" } - } - Method { - name: "azimuthTo" - type: "double" - Parameter { name: "other"; type: "QGeoCoordinate" } - } - Method { - name: "atDistanceAndAzimuth" - type: "QGeoCoordinate" - Parameter { name: "distance"; type: "double" } - Parameter { name: "azimuth"; type: "double" } - Parameter { name: "distanceUp"; type: "double" } - } - Method { - name: "atDistanceAndAzimuth" - type: "QGeoCoordinate" - isCloned: true - Parameter { name: "distance"; type: "double" } - Parameter { name: "azimuth"; type: "double" } - } - Method { - name: "toString" - type: "QString" - Parameter { name: "format"; type: "CoordinateFormat" } - } - Method { name: "toString"; type: "QString"; isCloned: true } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoCoordinateObject" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "coordinate" - type: "QGeoCoordinate" - bindable: "bindableCoordinate" - read: "coordinate" - write: "setCoordinate" - notify: "coordinateChanged" - index: 0 - } - Signal { name: "coordinateChanged" } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoLocation" - accessSemantics: "value" - exports: [ - "QtPositioning/geoLocation 5.0", - "QtPositioning/geoLocation 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoPath" - accessSemantics: "value" - prototype: "QGeoShape" - exports: ["QtPositioning/geoPath 5.0", "QtPositioning/geoPath 6.0"] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "path" - type: "QVariantList" - read: "variantPath" - write: "setVariantPath" - index: 0 - } - Property { name: "width"; type: "double"; read: "width"; write: "setWidth"; index: 1 } - Method { - name: "translate" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "translated" - type: "QGeoPath" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "length" - type: "double" - Parameter { name: "indexFrom"; type: "qsizetype" } - Parameter { name: "indexTo"; type: "qsizetype" } - } - Method { - name: "length" - type: "double" - isCloned: true - Parameter { name: "indexFrom"; type: "qsizetype" } - } - Method { name: "length"; type: "double"; isCloned: true } - Method { name: "size"; type: "qsizetype" } - Method { - name: "addCoordinate" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "insertCoordinate" - Parameter { name: "index"; type: "qsizetype" } - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "replaceCoordinate" - Parameter { name: "index"; type: "qsizetype" } - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "coordinateAt" - type: "QGeoCoordinate" - Parameter { name: "index"; type: "qsizetype" } - } - Method { - name: "containsCoordinate" - type: "bool" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "removeCoordinate" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "removeCoordinate" - Parameter { name: "index"; type: "qsizetype" } - } - Method { name: "toString"; type: "QString" } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoPolygon" - accessSemantics: "value" - prototype: "QGeoShape" - exports: [ - "QtPositioning/geoPolygon 5.0", - "QtPositioning/geoPolygon 5.12", - "QtPositioning/geoPolygon 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1292, 1536] - Property { - name: "perimeter" - revision: 1292 - type: "QGeoCoordinate" - isList: true - read: "perimeter" - write: "setPerimeter" - index: 0 - } - Method { - name: "addHole" - Parameter { name: "holePath"; type: "QVariant" } - } - Method { - name: "hole" - type: "QVariantList" - Parameter { name: "index"; type: "qsizetype" } - } - Method { - name: "removeHole" - Parameter { name: "index"; type: "qsizetype" } - } - Method { name: "holesCount"; type: "qsizetype" } - Method { - name: "translate" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "translated" - type: "QGeoPolygon" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "length" - type: "double" - Parameter { name: "indexFrom"; type: "qsizetype" } - Parameter { name: "indexTo"; type: "qsizetype" } - } - Method { - name: "length" - type: "double" - isCloned: true - Parameter { name: "indexFrom"; type: "qsizetype" } - } - Method { name: "length"; type: "double"; isCloned: true } - Method { name: "size"; type: "qsizetype" } - Method { - name: "addCoordinate" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "insertCoordinate" - Parameter { name: "index"; type: "qsizetype" } - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "replaceCoordinate" - Parameter { name: "index"; type: "qsizetype" } - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "coordinateAt" - type: "QGeoCoordinate" - Parameter { name: "index"; type: "qsizetype" } - } - Method { - name: "containsCoordinate" - type: "bool" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "removeCoordinate" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "removeCoordinate" - Parameter { name: "index"; type: "qsizetype" } - } - Method { name: "toString"; type: "QString" } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoPositionInfo" - accessSemantics: "value" - exports: [ - "QtPositioning/geoPositionInfo 5.0", - "QtPositioning/geoPositionInfo 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoRectangle" - accessSemantics: "value" - prototype: "QGeoShape" - exports: [ - "QtPositioning/geoRectangle 5.0", - "QtPositioning/geoRectangle 6.0" - ] - isStructured: true - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "bottomLeft" - type: "QGeoCoordinate" - read: "bottomLeft" - write: "setBottomLeft" - index: 0 - } - Property { - name: "bottomRight" - type: "QGeoCoordinate" - read: "bottomRight" - write: "setBottomRight" - index: 1 - } - Property { name: "topLeft"; type: "QGeoCoordinate"; read: "topLeft"; write: "setTopLeft"; index: 2 } - Property { - name: "topRight" - type: "QGeoCoordinate" - read: "topRight" - write: "setTopRight" - index: 3 - } - Property { name: "center"; type: "QGeoCoordinate"; read: "center"; write: "setCenter"; index: 4 } - Property { name: "height"; type: "double"; read: "height"; write: "setHeight"; index: 5 } - Property { name: "width"; type: "double"; read: "width"; write: "setWidth"; index: 6 } - Method { - name: "intersects" - type: "bool" - Parameter { name: "rectangle"; type: "QGeoRectangle" } - } - Method { - name: "translate" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "translated" - type: "QGeoRectangle" - Parameter { name: "degreesLatitude"; type: "double" } - Parameter { name: "degreesLongitude"; type: "double" } - } - Method { - name: "extendRectangle" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { - name: "united" - type: "QGeoRectangle" - Parameter { name: "rectangle"; type: "QGeoRectangle" } - } - Method { name: "toString"; type: "QString" } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoSatelliteInfo" - accessSemantics: "value" - exports: ["QtPositioning/geoSatelliteInfo 6.5"] - isCreatable: false - exportMetaObjectRevisions: [1541] - Enum { - name: "Attribute" - values: ["Elevation", "Azimuth"] - } - Enum { - name: "SatelliteSystem" - values: [ - "Undefined", - "GPS", - "GLONASS", - "GALILEO", - "BEIDOU", - "QZSS", - "Multiple", - "CustomType" - ] - } - Property { - name: "satelliteSystem" - type: "SatelliteSystem" - read: "satelliteSystem" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "satelliteIdentifier" - type: "int" - read: "satelliteIdentifier" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "signalStrength" - type: "double" - read: "signalStrength" - index: 2 - isReadonly: true - isFinal: true - } - Method { - name: "attribute" - type: "double" - Parameter { name: "attribute"; type: "Attribute" } - } - Method { - name: "hasAttribute" - type: "bool" - Parameter { name: "attribute"; type: "Attribute" } - } - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoSatelliteInfoDerived" - accessSemantics: "none" - prototype: "QGeoSatelliteInfo" - exports: ["QtPositioning/GeoSatelliteInfo 6.5"] - isCreatable: false - exportMetaObjectRevisions: [1541] - } - Component { - file: "private/qpositioningquickmodule_p.h" - name: "QGeoShape" - accessSemantics: "value" - exports: ["QtPositioning/geoShape 5.0", "QtPositioning/geoShape 6.0"] - exportMetaObjectRevisions: [1280, 1536] - Enum { - name: "ShapeType" - values: [ - "UnknownType", - "RectangleType", - "CircleType", - "PathType", - "PolygonType" - ] - } - Property { name: "type"; type: "ShapeType"; read: "type"; index: 0; isReadonly: true } - Property { name: "isValid"; type: "bool"; read: "isValid"; index: 1; isReadonly: true } - Property { name: "isEmpty"; type: "bool"; read: "isEmpty"; index: 2; isReadonly: true } - Property { name: "center"; type: "QGeoCoordinate"; read: "center"; index: 3; isReadonly: true } - Method { - name: "contains" - type: "bool" - Parameter { name: "coordinate"; type: "QGeoCoordinate" } - } - Method { name: "boundingGeoRectangle"; type: "QGeoRectangle" } - Method { name: "toString"; type: "QString" } - Method { - name: "QGeoShape" - isConstructor: true - Parameter { name: "other"; type: "QGeoShape" } - } - } - Component { - file: "private/qquickgeocoordinateanimation_p.h" - name: "QQuickGeoCoordinateAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: [ - "QtPositioning/CoordinateAnimation 5.3", - "QtPositioning/CoordinateAnimation 6.0" - ] - exportMetaObjectRevisions: [1283, 1536] - Enum { - name: "Direction" - values: ["Shortest", "West", "East"] - } - Property { name: "from"; type: "QGeoCoordinate"; read: "from"; write: "setFrom"; index: 0 } - Property { name: "to"; type: "QGeoCoordinate"; read: "to"; write: "setTo"; index: 1 } - Property { - name: "direction" - type: "Direction" - bindable: "bindableDirection" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 2 - } - Signal { name: "directionChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/qmldir deleted file mode 100644 index 9ae0891..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtPositioning/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtPositioning -linktarget Qt6::positioningquickplugin -plugin positioningquickplugin -classname QtPositioningDeclarativeModule -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtPositioning/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/libqmlplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/libqmlplugin.so deleted file mode 100755 index 23cd2ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/libqmlplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/plugins.qmltypes deleted file mode 100644 index cd8bba5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/plugins.qmltypes +++ /dev/null @@ -1,4180 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qqmllocale_p.h" - name: "QList" - accessSemantics: "sequence" - valueType: "QQmlLocale::DayOfWeek" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "bool" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "double" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "float" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "int" - } - Component { - file: "private/qqmlglobal_p.h" - name: "QQmlApplication" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "arguments" - type: "QStringList" - read: "args" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 1 - } - Property { - name: "version" - type: "QString" - read: "version" - write: "setVersion" - notify: "versionChanged" - index: 2 - } - Property { - name: "organization" - type: "QString" - read: "organization" - write: "setOrganization" - notify: "organizationChanged" - index: 3 - } - Property { - name: "domain" - type: "QString" - read: "domain" - write: "setDomain" - notify: "domainChanged" - index: 4 - } - Signal { name: "aboutToQuit" } - Signal { name: "nameChanged" } - Signal { name: "versionChanged" } - Signal { name: "organizationChanged" } - Signal { name: "domainChanged" } - Method { - name: "setName" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setVersion" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setOrganization" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setDomain" - Parameter { name: "arg"; type: "QString" } - } - } - Component { - file: "private/qqmlbind_p.h" - name: "QQmlBind" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus", "QQmlPropertyValueSource"] - immediateNames: [ - "objectName", - "target", - "property", - "value", - "when", - "delayed", - "restoreMode" - ] - exports: [ - "QtQml.Base/Binding 2.0", - "QtQml.Base/Binding 2.8", - "QtQml.Base/Binding 2.14", - "QtQml.Base/Binding 6.0" - ] - exportMetaObjectRevisions: [512, 520, 526, 1536] - Enum { - name: "RestorationMode" - values: [ - "RestoreNone", - "RestoreBinding", - "RestoreValue", - "RestoreBindingOrValue" - ] - } - Property { - name: "target" - type: "QObject" - isPointer: true - read: "object" - write: "setObject" - index: 0 - } - Property { name: "property"; type: "QString"; read: "property"; write: "setProperty"; index: 1 } - Property { name: "value"; type: "QVariant"; read: "value"; write: "setValue"; index: 2 } - Property { name: "when"; type: "bool"; read: "when"; write: "setWhen"; index: 3 } - Property { - name: "delayed" - revision: 520 - type: "bool" - read: "delayed" - write: "setDelayed" - index: 4 - } - Property { - name: "restoreMode" - revision: 526 - type: "RestorationMode" - read: "restoreMode" - write: "setRestoreMode" - notify: "restoreModeChanged" - index: 5 - } - Signal { name: "restoreModeChanged" } - Method { name: "targetValueChanged" } - } - Component { - file: "private/qqmlconnections_p.h" - name: "QQmlConnections" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.Base/Connections 2.0", - "QtQml.Base/Connections 2.3", - "QtQml.Base/Connections 6.0" - ] - hasCustomParser: true - exportMetaObjectRevisions: [512, 515, 1536] - Property { - name: "target" - type: "QObject" - isPointer: true - read: "target" - write: "setTarget" - notify: "targetChanged" - index: 0 - } - Property { - name: "enabled" - revision: 515 - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 1 - } - Property { - name: "ignoreUnknownSignals" - type: "bool" - read: "ignoreUnknownSignals" - write: "setIgnoreUnknownSignals" - index: 2 - } - Signal { name: "targetChanged" } - Signal { name: "enabledChanged"; revision: 515 } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlEasingEnums" - accessSemantics: "none" - exports: ["QtQml.Base/Easing 2.0", "QtQml.Base/Easing 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "Type" - values: [ - "Linear", - "InQuad", - "OutQuad", - "InOutQuad", - "OutInQuad", - "InCubic", - "OutCubic", - "InOutCubic", - "OutInCubic", - "InQuart", - "OutQuart", - "InOutQuart", - "OutInQuart", - "InQuint", - "OutQuint", - "InOutQuint", - "OutInQuint", - "InSine", - "OutSine", - "InOutSine", - "OutInSine", - "InExpo", - "OutExpo", - "InOutExpo", - "OutInExpo", - "InCirc", - "OutCirc", - "InOutCirc", - "OutInCirc", - "InElastic", - "OutElastic", - "InOutElastic", - "OutInElastic", - "InBack", - "OutBack", - "InOutBack", - "OutInBack", - "InBounce", - "OutBounce", - "InOutBounce", - "OutInBounce", - "InCurve", - "OutCurve", - "SineCurve", - "CosineCurve", - "BezierSpline", - "Bezier" - ] - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QEasingCurve" - accessSemantics: "value" - extension: "QQmlEasingValueType" - Enum { - name: "Type" - values: [ - "Linear", - "InQuad", - "OutQuad", - "InOutQuad", - "OutInQuad", - "InCubic", - "OutCubic", - "InOutCubic", - "OutInCubic", - "InQuart", - "OutQuart", - "InOutQuart", - "OutInQuart", - "InQuint", - "OutQuint", - "InOutQuint", - "OutInQuint", - "InSine", - "OutSine", - "InOutSine", - "OutInSine", - "InExpo", - "OutExpo", - "InOutExpo", - "OutInExpo", - "InCirc", - "OutCirc", - "InOutCirc", - "OutInCirc", - "InElastic", - "OutElastic", - "InOutElastic", - "OutInElastic", - "InBack", - "OutBack", - "InOutBack", - "OutInBack", - "InBounce", - "OutBounce", - "InOutBounce", - "OutInBounce", - "InCurve", - "OutCurve", - "SineCurve", - "CosineCurve", - "BezierSpline", - "TCBSpline", - "Custom", - "NCurveTypes" - ] - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlEasingValueType" - accessSemantics: "value" - Property { - name: "type" - type: "QQmlEasingEnums::Type" - read: "type" - write: "setType" - index: 0 - isFinal: true - } - Property { - name: "amplitude" - type: "double" - read: "amplitude" - write: "setAmplitude" - index: 1 - isFinal: true - } - Property { - name: "overshoot" - type: "double" - read: "overshoot" - write: "setOvershoot" - index: 2 - isFinal: true - } - Property { - name: "period" - type: "double" - read: "period" - write: "setPeriod" - index: 3 - isFinal: true - } - Property { - name: "bezierCurve" - type: "QVariantList" - read: "bezierCurve" - write: "setBezierCurve" - index: 4 - isFinal: true - } - } - Component { - file: "private/qqmllocale_p.h" - name: "QQmlLocale" - accessSemantics: "none" - extension: "QLocale" - exports: ["QtQml.Base/Locale 2.2", "QtQml.Base/Locale 6.0"] - isCreatable: false - exportMetaObjectRevisions: [514, 1536] - Enum { - name: "DayOfWeek" - values: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ] - } - } - Component { - file: "private/qqmllocale_p.h" - name: "QLocale" - accessSemantics: "value" - extension: "QQmlLocaleValueType" - Enum { - name: "Language" - type: "ushort" - values: [ - "AnyLanguage", - "C", - "Abkhazian", - "Afar", - "Afrikaans", - "Aghem", - "Akan", - "Akkadian", - "Akoose", - "Albanian", - "AmericanSignLanguage", - "Amharic", - "AncientEgyptian", - "AncientGreek", - "Arabic", - "Aragonese", - "Aramaic", - "Armenian", - "Assamese", - "Asturian", - "Asu", - "Atsam", - "Avaric", - "Avestan", - "Aymara", - "Azerbaijani", - "Bafia", - "Balinese", - "Bambara", - "Bamun", - "Bangla", - "Basaa", - "Bashkir", - "Basque", - "BatakToba", - "Belarusian", - "Bemba", - "Bena", - "Bhojpuri", - "Bislama", - "Blin", - "Bodo", - "Bosnian", - "Breton", - "Buginese", - "Bulgarian", - "Burmese", - "Cantonese", - "Catalan", - "Cebuano", - "CentralAtlasTamazight", - "CentralKurdish", - "Chakma", - "Chamorro", - "Chechen", - "Cherokee", - "Chickasaw", - "Chiga", - "Chinese", - "Church", - "Chuvash", - "Colognian", - "Coptic", - "Cornish", - "Corsican", - "Cree", - "Croatian", - "Czech", - "Danish", - "Divehi", - "Dogri", - "Duala", - "Dutch", - "Dzongkha", - "Embu", - "English", - "Erzya", - "Esperanto", - "Estonian", - "Ewe", - "Ewondo", - "Faroese", - "Fijian", - "Filipino", - "Finnish", - "French", - "Friulian", - "Fulah", - "Gaelic", - "Ga", - "Galician", - "Ganda", - "Geez", - "Georgian", - "German", - "Gothic", - "Greek", - "Guarani", - "Gujarati", - "Gusii", - "Haitian", - "Hausa", - "Hawaiian", - "Hebrew", - "Herero", - "Hindi", - "HiriMotu", - "Hungarian", - "Icelandic", - "Ido", - "Igbo", - "InariSami", - "Indonesian", - "Ingush", - "Interlingua", - "Interlingue", - "Inuktitut", - "Inupiaq", - "Irish", - "Italian", - "Japanese", - "Javanese", - "Jju", - "JolaFonyi", - "Kabuverdianu", - "Kabyle", - "Kako", - "Kalaallisut", - "Kalenjin", - "Kamba", - "Kannada", - "Kanuri", - "Kashmiri", - "Kazakh", - "Kenyang", - "Khmer", - "Kiche", - "Kikuyu", - "Kinyarwanda", - "Komi", - "Kongo", - "Konkani", - "Korean", - "Koro", - "KoyraboroSenni", - "KoyraChiini", - "Kpelle", - "Kuanyama", - "Kurdish", - "Kwasio", - "Kyrgyz", - "Lakota", - "Langi", - "Lao", - "Latin", - "Latvian", - "Lezghian", - "Limburgish", - "Lingala", - "LiteraryChinese", - "Lithuanian", - "Lojban", - "LowerSorbian", - "LowGerman", - "LubaKatanga", - "LuleSami", - "Luo", - "Luxembourgish", - "Luyia", - "Macedonian", - "Machame", - "Maithili", - "MakhuwaMeetto", - "Makonde", - "Malagasy", - "Malayalam", - "Malay", - "Maltese", - "Mandingo", - "Manipuri", - "Manx", - "Maori", - "Mapuche", - "Marathi", - "Marshallese", - "Masai", - "Mazanderani", - "Mende", - "Meru", - "Meta", - "Mohawk", - "Mongolian", - "Morisyen", - "Mundang", - "Muscogee", - "Nama", - "NauruLanguage", - "Navajo", - "Ndonga", - "Nepali", - "Newari", - "Ngiemboon", - "Ngomba", - "NigerianPidgin", - "Nko", - "NorthernLuri", - "NorthernSami", - "NorthernSotho", - "NorthNdebele", - "NorwegianBokmal", - "NorwegianNynorsk", - "Nuer", - "Nyanja", - "Nyankole", - "Occitan", - "Odia", - "Ojibwa", - "OldIrish", - "OldNorse", - "OldPersian", - "Oromo", - "Osage", - "Ossetic", - "Pahlavi", - "Palauan", - "Pali", - "Papiamento", - "Pashto", - "Persian", - "Phoenician", - "Polish", - "Portuguese", - "Prussian", - "Punjabi", - "Quechua", - "Romanian", - "Romansh", - "Rombo", - "Rundi", - "Russian", - "Rwa", - "Saho", - "Sakha", - "Samburu", - "Samoan", - "Sango", - "Sangu", - "Sanskrit", - "Santali", - "Sardinian", - "Saurashtra", - "Sena", - "Serbian", - "Shambala", - "Shona", - "SichuanYi", - "Sicilian", - "Sidamo", - "Silesian", - "Sindhi", - "Sinhala", - "SkoltSami", - "Slovak", - "Slovenian", - "Soga", - "Somali", - "SouthernKurdish", - "SouthernSami", - "SouthernSotho", - "SouthNdebele", - "Spanish", - "StandardMoroccanTamazight", - "Sundanese", - "Swahili", - "Swati", - "Swedish", - "SwissGerman", - "Syriac", - "Tachelhit", - "Tahitian", - "TaiDam", - "Taita", - "Tajik", - "Tamil", - "Taroko", - "Tasawaq", - "Tatar", - "Telugu", - "Teso", - "Thai", - "Tibetan", - "Tigre", - "Tigrinya", - "TokelauLanguage", - "TokPisin", - "Tongan", - "Tsonga", - "Tswana", - "Turkish", - "Turkmen", - "TuvaluLanguage", - "Tyap", - "Ugaritic", - "Ukrainian", - "UpperSorbian", - "Urdu", - "Uyghur", - "Uzbek", - "Vai", - "Venda", - "Vietnamese", - "Volapuk", - "Vunjo", - "Walloon", - "Walser", - "Warlpiri", - "Welsh", - "WesternBalochi", - "WesternFrisian", - "Wolaytta", - "Wolof", - "Xhosa", - "Yangben", - "Yiddish", - "Yoruba", - "Zarma", - "Zhuang", - "Zulu", - "Kaingang", - "Nheengatu", - "Haryanvi", - "NorthernFrisian", - "Rajasthani", - "Moksha", - "TokiPona", - "Pijin", - "Obolo", - "Baluchi", - "Ligurian", - "Rohingya", - "Torwali", - "Anii", - "Kangri", - "Venetian", - "Kuvi", - "Afan", - "Bengali", - "Bhutani", - "Byelorussian", - "Cambodian", - "CentralMoroccoTamazight", - "Chewa", - "Frisian", - "Greenlandic", - "Inupiak", - "Kirghiz", - "Kurundi", - "Kwanyama", - "Navaho", - "Oriya", - "RhaetoRomance", - "Uighur", - "Uigur", - "Walamo", - "LastLanguage" - ] - } - Enum { - name: "Script" - type: "ushort" - values: [ - "AnyScript", - "AdlamScript", - "AhomScript", - "AnatolianHieroglyphsScript", - "ArabicScript", - "ArmenianScript", - "AvestanScript", - "BalineseScript", - "BamumScript", - "BanglaScript", - "BassaVahScript", - "BatakScript", - "BhaiksukiScript", - "BopomofoScript", - "BrahmiScript", - "BrailleScript", - "BugineseScript", - "BuhidScript", - "CanadianAboriginalScript", - "CarianScript", - "CaucasianAlbanianScript", - "ChakmaScript", - "ChamScript", - "CherokeeScript", - "CopticScript", - "CuneiformScript", - "CypriotScript", - "CyrillicScript", - "DeseretScript", - "DevanagariScript", - "DuployanScript", - "EgyptianHieroglyphsScript", - "ElbasanScript", - "EthiopicScript", - "FraserScript", - "GeorgianScript", - "GlagoliticScript", - "GothicScript", - "GranthaScript", - "GreekScript", - "GujaratiScript", - "GurmukhiScript", - "HangulScript", - "HanScript", - "HanunooScript", - "HanWithBopomofoScript", - "HatranScript", - "HebrewScript", - "HiraganaScript", - "ImperialAramaicScript", - "InscriptionalPahlaviScript", - "InscriptionalParthianScript", - "JamoScript", - "JapaneseScript", - "JavaneseScript", - "KaithiScript", - "KannadaScript", - "KatakanaScript", - "KayahLiScript", - "KharoshthiScript", - "KhmerScript", - "KhojkiScript", - "KhudawadiScript", - "KoreanScript", - "LannaScript", - "LaoScript", - "LatinScript", - "LepchaScript", - "LimbuScript", - "LinearAScript", - "LinearBScript", - "LycianScript", - "LydianScript", - "MahajaniScript", - "MalayalamScript", - "MandaeanScript", - "ManichaeanScript", - "MarchenScript", - "MeiteiMayekScript", - "MendeScript", - "MeroiticCursiveScript", - "MeroiticScript", - "ModiScript", - "MongolianScript", - "MroScript", - "MultaniScript", - "MyanmarScript", - "NabataeanScript", - "NewaScript", - "NewTaiLueScript", - "NkoScript", - "OdiaScript", - "OghamScript", - "OlChikiScript", - "OldHungarianScript", - "OldItalicScript", - "OldNorthArabianScript", - "OldPermicScript", - "OldPersianScript", - "OldSouthArabianScript", - "OrkhonScript", - "OsageScript", - "OsmanyaScript", - "PahawhHmongScript", - "PalmyreneScript", - "PauCinHauScript", - "PhagsPaScript", - "PhoenicianScript", - "PollardPhoneticScript", - "PsalterPahlaviScript", - "RejangScript", - "RunicScript", - "SamaritanScript", - "SaurashtraScript", - "SharadaScript", - "ShavianScript", - "SiddhamScript", - "SignWritingScript", - "SimplifiedHanScript", - "SinhalaScript", - "SoraSompengScript", - "SundaneseScript", - "SylotiNagriScript", - "SyriacScript", - "TagalogScript", - "TagbanwaScript", - "TaiLeScript", - "TaiVietScript", - "TakriScript", - "TamilScript", - "TangutScript", - "TeluguScript", - "ThaanaScript", - "ThaiScript", - "TibetanScript", - "TifinaghScript", - "TirhutaScript", - "TraditionalHanScript", - "UgariticScript", - "VaiScript", - "VarangKshitiScript", - "YiScript", - "HanifiScript", - "BengaliScript", - "MendeKikakuiScript", - "OriyaScript", - "SimplifiedChineseScript", - "TraditionalChineseScript", - "LastScript" - ] - } - Enum { - name: "Country" - type: "ushort" - values: [ - "AnyTerritory", - "Afghanistan", - "AlandIslands", - "Albania", - "Algeria", - "AmericanSamoa", - "Andorra", - "Angola", - "Anguilla", - "Antarctica", - "AntiguaAndBarbuda", - "Argentina", - "Armenia", - "Aruba", - "AscensionIsland", - "Australia", - "Austria", - "Azerbaijan", - "Bahamas", - "Bahrain", - "Bangladesh", - "Barbados", - "Belarus", - "Belgium", - "Belize", - "Benin", - "Bermuda", - "Bhutan", - "Bolivia", - "BosniaAndHerzegovina", - "Botswana", - "BouvetIsland", - "Brazil", - "BritishIndianOceanTerritory", - "BritishVirginIslands", - "Brunei", - "Bulgaria", - "BurkinaFaso", - "Burundi", - "Cambodia", - "Cameroon", - "Canada", - "CanaryIslands", - "CapeVerde", - "CaribbeanNetherlands", - "CaymanIslands", - "CentralAfricanRepublic", - "CeutaAndMelilla", - "Chad", - "Chile", - "China", - "ChristmasIsland", - "ClippertonIsland", - "CocosIslands", - "Colombia", - "Comoros", - "CongoBrazzaville", - "CongoKinshasa", - "CookIslands", - "CostaRica", - "Croatia", - "Cuba", - "Curacao", - "Cyprus", - "Czechia", - "Denmark", - "DiegoGarcia", - "Djibouti", - "Dominica", - "DominicanRepublic", - "Ecuador", - "Egypt", - "ElSalvador", - "EquatorialGuinea", - "Eritrea", - "Estonia", - "Eswatini", - "Ethiopia", - "Europe", - "EuropeanUnion", - "FalklandIslands", - "FaroeIslands", - "Fiji", - "Finland", - "France", - "FrenchGuiana", - "FrenchPolynesia", - "FrenchSouthernTerritories", - "Gabon", - "Gambia", - "Georgia", - "Germany", - "Ghana", - "Gibraltar", - "Greece", - "Greenland", - "Grenada", - "Guadeloupe", - "Guam", - "Guatemala", - "Guernsey", - "GuineaBissau", - "Guinea", - "Guyana", - "Haiti", - "HeardAndMcDonaldIslands", - "Honduras", - "HongKong", - "Hungary", - "Iceland", - "India", - "Indonesia", - "Iran", - "Iraq", - "Ireland", - "IsleOfMan", - "Israel", - "Italy", - "IvoryCoast", - "Jamaica", - "Japan", - "Jersey", - "Jordan", - "Kazakhstan", - "Kenya", - "Kiribati", - "Kosovo", - "Kuwait", - "Kyrgyzstan", - "Laos", - "LatinAmerica", - "Latvia", - "Lebanon", - "Lesotho", - "Liberia", - "Libya", - "Liechtenstein", - "Lithuania", - "Luxembourg", - "Macao", - "Macedonia", - "Madagascar", - "Malawi", - "Malaysia", - "Maldives", - "Mali", - "Malta", - "MarshallIslands", - "Martinique", - "Mauritania", - "Mauritius", - "Mayotte", - "Mexico", - "Micronesia", - "Moldova", - "Monaco", - "Mongolia", - "Montenegro", - "Montserrat", - "Morocco", - "Mozambique", - "Myanmar", - "Namibia", - "NauruTerritory", - "Nepal", - "Netherlands", - "NewCaledonia", - "NewZealand", - "Nicaragua", - "Nigeria", - "Niger", - "Niue", - "NorfolkIsland", - "NorthernMarianaIslands", - "NorthKorea", - "Norway", - "Oman", - "OutlyingOceania", - "Pakistan", - "Palau", - "PalestinianTerritories", - "Panama", - "PapuaNewGuinea", - "Paraguay", - "Peru", - "Philippines", - "Pitcairn", - "Poland", - "Portugal", - "PuertoRico", - "Qatar", - "Reunion", - "Romania", - "Russia", - "Rwanda", - "SaintBarthelemy", - "SaintHelena", - "SaintKittsAndNevis", - "SaintLucia", - "SaintMartin", - "SaintPierreAndMiquelon", - "SaintVincentAndGrenadines", - "Samoa", - "SanMarino", - "SaoTomeAndPrincipe", - "SaudiArabia", - "Senegal", - "Serbia", - "Seychelles", - "SierraLeone", - "Singapore", - "SintMaarten", - "Slovakia", - "Slovenia", - "SolomonIslands", - "Somalia", - "SouthAfrica", - "SouthGeorgiaAndSouthSandwichIslands", - "SouthKorea", - "SouthSudan", - "Spain", - "SriLanka", - "Sudan", - "Suriname", - "SvalbardAndJanMayen", - "Sweden", - "Switzerland", - "Syria", - "Taiwan", - "Tajikistan", - "Tanzania", - "Thailand", - "TimorLeste", - "Togo", - "TokelauTerritory", - "Tonga", - "TrinidadAndTobago", - "TristanDaCunha", - "Tunisia", - "Turkey", - "Turkmenistan", - "TurksAndCaicosIslands", - "TuvaluTerritory", - "Uganda", - "Ukraine", - "UnitedArabEmirates", - "UnitedKingdom", - "UnitedStatesOutlyingIslands", - "UnitedStates", - "UnitedStatesVirginIslands", - "Uruguay", - "Uzbekistan", - "Vanuatu", - "VaticanCity", - "Venezuela", - "Vietnam", - "WallisAndFutuna", - "WesternSahara", - "World", - "Yemen", - "Zambia", - "Zimbabwe", - "AnyCountry", - "Bonaire", - "BosniaAndHerzegowina", - "CuraSao", - "CzechRepublic", - "DemocraticRepublicOfCongo", - "DemocraticRepublicOfKorea", - "EastTimor", - "LatinAmericaAndTheCaribbean", - "Macau", - "NauruCountry", - "PeoplesRepublicOfCongo", - "RepublicOfKorea", - "RussianFederation", - "SaintVincentAndTheGrenadines", - "SouthGeorgiaAndTheSouthSandwichIslands", - "SvalbardAndJanMayenIslands", - "Swaziland", - "SyrianArabRepublic", - "TokelauCountry", - "TuvaluCountry", - "UnitedStatesMinorOutlyingIslands", - "VaticanCityState", - "WallisAndFutunaIslands", - "LastTerritory", - "LastCountry" - ] - } - Enum { - name: "MeasurementSystem" - values: [ - "MetricSystem", - "ImperialUSSystem", - "ImperialUKSystem", - "ImperialSystem" - ] - } - Enum { - name: "FormatType" - values: ["LongFormat", "ShortFormat", "NarrowFormat"] - } - Enum { - name: "NumberOptions" - alias: "NumberOption" - isFlag: true - values: [ - "DefaultNumberOptions", - "OmitGroupSeparator", - "RejectGroupSeparator", - "OmitLeadingZeroInExponent", - "RejectLeadingZeroInExponent", - "IncludeTrailingZeroesAfterDot", - "RejectTrailingZeroesAfterDot" - ] - } - Enum { - name: "TagSeparator" - type: "char" - values: ["Dash", "Underscore"] - } - Enum { - name: "CurrencySymbolFormat" - values: [ - "CurrencyIsoCode", - "CurrencySymbol", - "CurrencyDisplayName" - ] - } - Enum { - name: "DataSizeFormats" - alias: "DataSizeFormat" - isFlag: true - values: [ - "DataSizeBase1000", - "DataSizeSIQuantifiers", - "DataSizeIecFormat", - "DataSizeTraditionalFormat", - "DataSizeSIFormat" - ] - } - Enum { - name: "LanguageCodeTypes" - alias: "LanguageCodeType" - isFlag: true - values: [ - "ISO639Part1", - "ISO639Part2B", - "ISO639Part2T", - "ISO639Part3", - "LegacyLanguageCode", - "ISO639Part2", - "ISO639Alpha2", - "ISO639Alpha3", - "ISO639", - "AnyLanguageCode" - ] - } - Enum { - name: "QuotationStyle" - values: ["StandardQuotation", "AlternateQuotation"] - } - } - Component { - file: "private/qqmllocale_p.h" - name: "QQmlLocaleValueType" - accessSemantics: "value" - Property { - name: "firstDayOfWeek" - type: "QQmlLocale::DayOfWeek" - read: "firstDayOfWeek" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "measurementSystem" - type: "QLocale::MeasurementSystem" - read: "measurementSystem" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "textDirection" - type: "Qt::LayoutDirection" - read: "textDirection" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "weekDays" - type: "QQmlLocale::DayOfWeek" - isList: true - read: "weekDays" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "uiLanguages" - type: "QStringList" - read: "uiLanguages" - index: 4 - isReadonly: true - isConstant: true - } - Property { name: "name"; type: "QString"; read: "name"; index: 5; isReadonly: true; isConstant: true } - Property { - name: "nativeLanguageName" - type: "QString" - read: "nativeLanguageName" - index: 6 - isReadonly: true - isConstant: true - } - Property { - name: "nativeCountryName" - type: "QString" - read: "nativeCountryName" - index: 7 - isReadonly: true - isConstant: true - } - Property { - name: "nativeTerritoryName" - type: "QString" - read: "nativeTerritoryName" - index: 8 - isReadonly: true - isConstant: true - } - Property { - name: "decimalPoint" - type: "QString" - read: "decimalPoint" - index: 9 - isReadonly: true - isConstant: true - } - Property { - name: "groupSeparator" - type: "QString" - read: "groupSeparator" - index: 10 - isReadonly: true - isConstant: true - } - Property { - name: "percent" - type: "QString" - read: "percent" - index: 11 - isReadonly: true - isConstant: true - } - Property { - name: "zeroDigit" - type: "QString" - read: "zeroDigit" - index: 12 - isReadonly: true - isConstant: true - } - Property { - name: "negativeSign" - type: "QString" - read: "negativeSign" - index: 13 - isReadonly: true - isConstant: true - } - Property { - name: "positiveSign" - type: "QString" - read: "positiveSign" - index: 14 - isReadonly: true - isConstant: true - } - Property { - name: "exponential" - type: "QString" - read: "exponential" - index: 15 - isReadonly: true - isConstant: true - } - Property { - name: "amText" - type: "QString" - read: "amText" - index: 16 - isReadonly: true - isConstant: true - } - Property { - name: "pmText" - type: "QString" - read: "pmText" - index: 17 - isReadonly: true - isConstant: true - } - Property { - name: "numberOptions" - type: "QLocale::NumberOptions" - read: "numberOptions" - write: "setNumberOptions" - index: 18 - } - Method { - name: "currencySymbol" - type: "QString" - Parameter { name: "format"; type: "QLocale::CurrencySymbolFormat" } - } - Method { name: "currencySymbol"; type: "QString"; isCloned: true } - Method { - name: "dateTimeFormat" - type: "QString" - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { name: "dateTimeFormat"; type: "QString"; isCloned: true } - Method { - name: "timeFormat" - type: "QString" - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { name: "timeFormat"; type: "QString"; isCloned: true } - Method { - name: "dateFormat" - type: "QString" - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { name: "dateFormat"; type: "QString"; isCloned: true } - Method { - name: "monthName" - type: "QString" - Parameter { name: "index"; type: "int" } - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { - name: "monthName" - type: "QString" - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "standaloneMonthName" - type: "QString" - Parameter { name: "index"; type: "int" } - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { - name: "standaloneMonthName" - type: "QString" - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "dayName" - type: "QString" - Parameter { name: "index"; type: "int" } - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { - name: "dayName" - type: "QString" - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "standaloneDayName" - type: "QString" - Parameter { name: "index"; type: "int" } - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { - name: "standaloneDayName" - type: "QString" - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { name: "formattedDataSize"; isJavaScriptFunction: true } - Method { - name: "formattedDataSize" - type: "QString" - Parameter { name: "bytes"; type: "double" } - Parameter { name: "precision"; type: "int" } - Parameter { name: "format"; type: "QLocale::DataSizeFormats" } - } - Method { - name: "formattedDataSize" - type: "QString" - isCloned: true - Parameter { name: "bytes"; type: "double" } - Parameter { name: "precision"; type: "int" } - } - Method { - name: "formattedDataSize" - type: "QString" - isCloned: true - Parameter { name: "bytes"; type: "double" } - } - Method { name: "toString"; isJavaScriptFunction: true } - Method { name: "toString"; type: "QString" } - Method { - name: "toString" - type: "QString" - Parameter { name: "i"; type: "int" } - } - Method { - name: "toString" - type: "QString" - Parameter { name: "f"; type: "double" } - } - Method { - name: "toString" - type: "QString" - Parameter { name: "f"; type: "double" } - Parameter { name: "format"; type: "QString" } - Parameter { name: "precision"; type: "int" } - } - Method { - name: "toString" - type: "QString" - isCloned: true - Parameter { name: "f"; type: "double" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "toString" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "toString" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "QLocale::FormatType" } - } - Method { - name: "toString" - type: "QString" - isCloned: true - Parameter { name: "dateTime"; type: "QDateTime" } - } - Method { - name: "QQmlLocaleValueType" - isConstructor: true - Parameter { name: "name"; type: "QString" } - } - } - Component { - file: "private/qqmlloggingcategory_p.h" - name: "QQmlLoggingCategory" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.Base/LoggingCategory 2.8", - "QtQml.Base/LoggingCategory 2.12", - "QtQml.Base/LoggingCategory 6.0" - ] - exportMetaObjectRevisions: [520, 524, 1536] - Enum { - name: "DefaultLogLevel" - values: ["Debug", "Info", "Warning", "Critical", "Fatal"] - } - Property { name: "name"; type: "QString"; read: "name"; write: "setName"; index: 0 } - Property { - name: "defaultLogLevel" - revision: 524 - type: "DefaultLogLevel" - read: "defaultLogLevel" - write: "setDefaultLogLevel" - index: 1 - } - } - Component { - file: "private/qqmlplatform_p.h" - name: "QQmlPlatform" - accessSemantics: "reference" - prototype: "QObject" - Property { name: "os"; type: "QString"; read: "os"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "pluginName" - type: "QString" - read: "pluginName" - index: 1 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QPointF" - accessSemantics: "value" - extension: "QQmlPointFValueType" - exports: ["QtQml.Base/point 2.0", "QtQml.Base/point 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlPointFValueType" - accessSemantics: "value" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 1; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlPointFValueType" - isConstructor: true - Parameter { name: "point"; type: "QPoint" } - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QPoint" - accessSemantics: "value" - extension: "QQmlPointValueType" - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlPointValueType" - accessSemantics: "value" - Property { name: "x"; type: "int"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "int"; read: "y"; write: "setY"; index: 1; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlPointValueType" - isConstructor: true - Parameter { name: "point"; type: "QPointF" } - } - } - Component { - file: "qqmlproperty.h" - name: "QQmlProperty" - accessSemantics: "value" - Property { - name: "object" - type: "QObject" - isPointer: true - read: "object" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "name" - type: "QString" - read: "name" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QRectF" - accessSemantics: "value" - extension: "QQmlRectFValueType" - exports: ["QtQml.Base/rect 2.0", "QtQml.Base/rect 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlRectFValueType" - accessSemantics: "value" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 1; isFinal: true } - Property { name: "width"; type: "double"; read: "width"; write: "setWidth"; index: 2; isFinal: true } - Property { - name: "height" - type: "double" - read: "height" - write: "setHeight" - index: 3 - isFinal: true - } - Property { name: "left"; type: "double"; read: "left"; index: 4; isReadonly: true; isFinal: true } - Property { name: "right"; type: "double"; read: "right"; index: 5; isReadonly: true; isFinal: true } - Property { name: "top"; type: "double"; read: "top"; index: 6; isReadonly: true; isFinal: true } - Property { name: "bottom"; type: "double"; read: "bottom"; index: 7; isReadonly: true; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlRectFValueType" - isConstructor: true - Parameter { name: "rect"; type: "QRect" } - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QRect" - accessSemantics: "value" - extension: "QQmlRectValueType" - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlRectValueType" - accessSemantics: "value" - Property { name: "x"; type: "int"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "int"; read: "y"; write: "setY"; index: 1; isFinal: true } - Property { name: "width"; type: "int"; read: "width"; write: "setWidth"; index: 2; isFinal: true } - Property { name: "height"; type: "int"; read: "height"; write: "setHeight"; index: 3; isFinal: true } - Property { name: "left"; type: "int"; read: "left"; index: 4; isReadonly: true; isFinal: true } - Property { name: "right"; type: "int"; read: "right"; index: 5; isReadonly: true; isFinal: true } - Property { name: "top"; type: "int"; read: "top"; index: 6; isReadonly: true; isFinal: true } - Property { name: "bottom"; type: "int"; read: "bottom"; index: 7; isReadonly: true; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlRectValueType" - isConstructor: true - Parameter { name: "rect"; type: "QRectF" } - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QSizeF" - accessSemantics: "value" - extension: "QQmlSizeFValueType" - exports: ["QtQml.Base/size 2.0", "QtQml.Base/size 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlSizeFValueType" - accessSemantics: "value" - Property { name: "width"; type: "double"; read: "width"; write: "setWidth"; index: 0; isFinal: true } - Property { - name: "height" - type: "double" - read: "height" - write: "setHeight" - index: 1 - isFinal: true - } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlSizeFValueType" - isConstructor: true - Parameter { name: "size"; type: "QSize" } - } - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QSize" - accessSemantics: "value" - extension: "QQmlSizeValueType" - } - Component { - file: "private/qqmlvaluetype_p.h" - name: "QQmlSizeValueType" - accessSemantics: "value" - Property { name: "width"; type: "int"; read: "width"; write: "setWidth"; index: 0; isFinal: true } - Property { name: "height"; type: "int"; read: "height"; write: "setHeight"; index: 1; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "QQmlSizeValueType" - isConstructor: true - Parameter { name: "size"; type: "QSizeF" } - } - } - Component { - file: "private/qqmltimer_p.h" - name: "QQmlTimer" - accessSemantics: "reference" - parentProperty: "parent" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQml.Base/Timer 2.0", "QtQml.Base/Timer 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "interval" - type: "int" - read: "interval" - write: "setInterval" - notify: "intervalChanged" - index: 0 - } - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 1 - } - Property { - name: "repeat" - type: "bool" - read: "isRepeating" - write: "setRepeating" - notify: "repeatChanged" - index: 2 - } - Property { - name: "triggeredOnStart" - type: "bool" - read: "triggeredOnStart" - write: "setTriggeredOnStart" - notify: "triggeredOnStartChanged" - index: 3 - } - Property { - name: "parent" - type: "QObject" - isPointer: true - read: "parent" - index: 4 - isReadonly: true - isConstant: true - } - Signal { name: "triggered" } - Signal { name: "runningChanged" } - Signal { name: "intervalChanged" } - Signal { name: "repeatChanged" } - Signal { name: "triggeredOnStartChanged" } - Method { name: "start" } - Method { name: "stop" } - Method { name: "restart" } - Method { name: "ticked" } - } - Component { - file: "qqml.h" - name: "QQmlTypeNotAvailable" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQml.Base/TypeNotAvailable 2.15", - "QtQml.Base/TypeNotAvailable 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [527, 1536] - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "QList" - accessSemantics: "sequence" - valueType: "double" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "double" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "QString" - } - Component { - file: "private/qv4sequenceobject_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "QUrl" - } - Component { - file: "qnamespace.h" - name: "Qt" - accessSemantics: "none" - Enum { - name: "GlobalColor" - values: [ - "color0", - "color1", - "black", - "white", - "darkGray", - "gray", - "lightGray", - "red", - "green", - "blue", - "cyan", - "magenta", - "yellow", - "darkRed", - "darkGreen", - "darkBlue", - "darkCyan", - "darkMagenta", - "darkYellow", - "transparent" - ] - } - Enum { - name: "ColorScheme" - values: ["Unknown", "Light", "Dark"] - } - Enum { - name: "MouseButtons" - alias: "MouseButton" - isFlag: true - values: [ - "NoButton", - "LeftButton", - "RightButton", - "MiddleButton", - "BackButton", - "XButton1", - "ExtraButton1", - "ForwardButton", - "XButton2", - "ExtraButton2", - "TaskButton", - "ExtraButton3", - "ExtraButton4", - "ExtraButton5", - "ExtraButton6", - "ExtraButton7", - "ExtraButton8", - "ExtraButton9", - "ExtraButton10", - "ExtraButton11", - "ExtraButton12", - "ExtraButton13", - "ExtraButton14", - "ExtraButton15", - "ExtraButton16", - "ExtraButton17", - "ExtraButton18", - "ExtraButton19", - "ExtraButton20", - "ExtraButton21", - "ExtraButton22", - "ExtraButton23", - "ExtraButton24", - "AllButtons", - "MaxMouseButton", - "MouseButtonMask" - ] - } - Enum { - name: "Orientation" - values: ["Horizontal", "Vertical"] - } - Enum { - name: "Orientations" - alias: "Orientation" - isFlag: true - values: ["Horizontal", "Vertical"] - } - Enum { - name: "FocusPolicy" - values: [ - "NoFocus", - "TabFocus", - "ClickFocus", - "StrongFocus", - "WheelFocus" - ] - } - Enum { - name: "TabFocusBehavior" - values: [ - "NoTabFocus", - "TabFocusTextControls", - "TabFocusListControls", - "TabFocusAllControls" - ] - } - Enum { - name: "SortOrder" - values: ["AscendingOrder", "DescendingOrder"] - } - Enum { - name: "SplitBehavior" - alias: "SplitBehaviorFlags" - isFlag: true - values: ["KeepEmptyParts", "SkipEmptyParts"] - } - Enum { - name: "Alignment" - alias: "AlignmentFlag" - isFlag: true - values: [ - "AlignLeft", - "AlignLeading", - "AlignRight", - "AlignTrailing", - "AlignHCenter", - "AlignJustify", - "AlignAbsolute", - "AlignHorizontal_Mask", - "AlignTop", - "AlignBottom", - "AlignVCenter", - "AlignBaseline", - "AlignVertical_Mask", - "AlignCenter" - ] - } - Enum { - name: "TextFlag" - values: [ - "TextSingleLine", - "TextDontClip", - "TextExpandTabs", - "TextShowMnemonic", - "TextWordWrap", - "TextWrapAnywhere", - "TextDontPrint", - "TextIncludeTrailingSpaces", - "TextHideMnemonic", - "TextJustificationForced", - "TextForceLeftToRight", - "TextForceRightToLeft", - "TextLongestVariant" - ] - } - Enum { - name: "TextElideMode" - values: ["ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"] - } - Enum { - name: "WindowType" - values: [ - "Widget", - "Window", - "Dialog", - "Sheet", - "Drawer", - "Popup", - "Tool", - "ToolTip", - "SplashScreen", - "Desktop", - "SubWindow", - "ForeignWindow", - "CoverWindow", - "WindowType_Mask", - "MSWindowsFixedSizeDialogHint", - "MSWindowsOwnDC", - "BypassWindowManagerHint", - "X11BypassWindowManagerHint", - "FramelessWindowHint", - "WindowTitleHint", - "WindowSystemMenuHint", - "WindowMinimizeButtonHint", - "WindowMaximizeButtonHint", - "WindowMinMaxButtonsHint", - "WindowContextHelpButtonHint", - "WindowShadeButtonHint", - "WindowStaysOnTopHint", - "WindowTransparentForInput", - "WindowOverridesSystemGestures", - "WindowDoesNotAcceptFocus", - "MaximizeUsingFullscreenGeometryHint", - "CustomizeWindowHint", - "WindowStaysOnBottomHint", - "WindowCloseButtonHint", - "MacWindowToolBarButtonHint", - "BypassGraphicsProxyWidget", - "NoDropShadowWindowHint", - "WindowFullscreenButtonHint" - ] - } - Enum { - name: "WindowFlags" - alias: "WindowType" - isFlag: true - values: [ - "Widget", - "Window", - "Dialog", - "Sheet", - "Drawer", - "Popup", - "Tool", - "ToolTip", - "SplashScreen", - "Desktop", - "SubWindow", - "ForeignWindow", - "CoverWindow", - "WindowType_Mask", - "MSWindowsFixedSizeDialogHint", - "MSWindowsOwnDC", - "BypassWindowManagerHint", - "X11BypassWindowManagerHint", - "FramelessWindowHint", - "WindowTitleHint", - "WindowSystemMenuHint", - "WindowMinimizeButtonHint", - "WindowMaximizeButtonHint", - "WindowMinMaxButtonsHint", - "WindowContextHelpButtonHint", - "WindowShadeButtonHint", - "WindowStaysOnTopHint", - "WindowTransparentForInput", - "WindowOverridesSystemGestures", - "WindowDoesNotAcceptFocus", - "MaximizeUsingFullscreenGeometryHint", - "CustomizeWindowHint", - "WindowStaysOnBottomHint", - "WindowCloseButtonHint", - "MacWindowToolBarButtonHint", - "BypassGraphicsProxyWidget", - "NoDropShadowWindowHint", - "WindowFullscreenButtonHint" - ] - } - Enum { - name: "WindowState" - values: [ - "WindowNoState", - "WindowMinimized", - "WindowMaximized", - "WindowFullScreen", - "WindowActive" - ] - } - Enum { - name: "WindowStates" - alias: "WindowState" - isFlag: true - values: [ - "WindowNoState", - "WindowMinimized", - "WindowMaximized", - "WindowFullScreen", - "WindowActive" - ] - } - Enum { - name: "ApplicationState" - values: [ - "ApplicationSuspended", - "ApplicationHidden", - "ApplicationInactive", - "ApplicationActive" - ] - } - Enum { - name: "ScreenOrientation" - values: [ - "PrimaryOrientation", - "PortraitOrientation", - "LandscapeOrientation", - "InvertedPortraitOrientation", - "InvertedLandscapeOrientation" - ] - } - Enum { - name: "ScreenOrientations" - alias: "ScreenOrientation" - isFlag: true - values: [ - "PrimaryOrientation", - "PortraitOrientation", - "LandscapeOrientation", - "InvertedPortraitOrientation", - "InvertedLandscapeOrientation" - ] - } - Enum { - name: "WidgetAttribute" - values: [ - "WA_Disabled", - "WA_UnderMouse", - "WA_MouseTracking", - "WA_OpaquePaintEvent", - "WA_StaticContents", - "WA_LaidOut", - "WA_PaintOnScreen", - "WA_NoSystemBackground", - "WA_UpdatesDisabled", - "WA_Mapped", - "WA_InputMethodEnabled", - "WA_WState_Visible", - "WA_WState_Hidden", - "WA_ForceDisabled", - "WA_KeyCompression", - "WA_PendingMoveEvent", - "WA_PendingResizeEvent", - "WA_SetPalette", - "WA_SetFont", - "WA_SetCursor", - "WA_NoChildEventsFromChildren", - "WA_WindowModified", - "WA_Resized", - "WA_Moved", - "WA_PendingUpdate", - "WA_InvalidSize", - "WA_CustomWhatsThis", - "WA_LayoutOnEntireRect", - "WA_OutsideWSRange", - "WA_GrabbedShortcut", - "WA_TransparentForMouseEvents", - "WA_PaintUnclipped", - "WA_SetWindowIcon", - "WA_NoMouseReplay", - "WA_DeleteOnClose", - "WA_RightToLeft", - "WA_SetLayoutDirection", - "WA_NoChildEventsForParent", - "WA_ForceUpdatesDisabled", - "WA_WState_Created", - "WA_WState_CompressKeys", - "WA_WState_InPaintEvent", - "WA_WState_Reparented", - "WA_WState_ConfigPending", - "WA_WState_Polished", - "WA_WState_OwnSizePolicy", - "WA_WState_ExplicitShowHide", - "WA_ShowModal", - "WA_MouseNoMask", - "WA_NoMousePropagation", - "WA_Hover", - "WA_InputMethodTransparent", - "WA_QuitOnClose", - "WA_KeyboardFocusChange", - "WA_AcceptDrops", - "WA_DropSiteRegistered", - "WA_WindowPropagation", - "WA_NoX11EventCompression", - "WA_TintedBackground", - "WA_X11OpenGLOverlay", - "WA_AlwaysShowToolTips", - "WA_MacOpaqueSizeGrip", - "WA_SetStyle", - "WA_SetLocale", - "WA_MacShowFocusRect", - "WA_MacNormalSize", - "WA_MacSmallSize", - "WA_MacMiniSize", - "WA_LayoutUsesWidgetRect", - "WA_StyledBackground", - "WA_CanHostQMdiSubWindowTitleBar", - "WA_MacAlwaysShowToolWindow", - "WA_StyleSheet", - "WA_ShowWithoutActivating", - "WA_X11BypassTransientForHint", - "WA_NativeWindow", - "WA_DontCreateNativeAncestors", - "WA_DontShowOnScreen", - "WA_X11NetWmWindowTypeDesktop", - "WA_X11NetWmWindowTypeDock", - "WA_X11NetWmWindowTypeToolBar", - "WA_X11NetWmWindowTypeMenu", - "WA_X11NetWmWindowTypeUtility", - "WA_X11NetWmWindowTypeSplash", - "WA_X11NetWmWindowTypeDialog", - "WA_X11NetWmWindowTypeDropDownMenu", - "WA_X11NetWmWindowTypePopupMenu", - "WA_X11NetWmWindowTypeToolTip", - "WA_X11NetWmWindowTypeNotification", - "WA_X11NetWmWindowTypeCombo", - "WA_X11NetWmWindowTypeDND", - "WA_SetWindowModality", - "WA_WState_WindowOpacitySet", - "WA_TranslucentBackground", - "WA_AcceptTouchEvents", - "WA_WState_AcceptedTouchBeginEvent", - "WA_TouchPadAcceptSingleTouchEvents", - "WA_X11DoNotAcceptFocus", - "WA_AlwaysStackOnTop", - "WA_TabletTracking", - "WA_ContentsMarginsRespectsSafeArea", - "WA_StyleSheetTarget", - "WA_AttributeCount" - ] - } - Enum { - name: "ApplicationAttribute" - values: [ - "AA_QtQuickUseDefaultSizePolicy", - "AA_DontShowIconsInMenus", - "AA_NativeWindows", - "AA_DontCreateNativeWidgetSiblings", - "AA_PluginApplication", - "AA_DontUseNativeMenuBar", - "AA_MacDontSwapCtrlAndMeta", - "AA_Use96Dpi", - "AA_DisableNativeVirtualKeyboard", - "AA_SynthesizeTouchForUnhandledMouseEvents", - "AA_SynthesizeMouseForUnhandledTouchEvents", - "AA_UseHighDpiPixmaps", - "AA_ForceRasterWidgets", - "AA_UseDesktopOpenGL", - "AA_UseOpenGLES", - "AA_UseSoftwareOpenGL", - "AA_ShareOpenGLContexts", - "AA_SetPalette", - "AA_EnableHighDpiScaling", - "AA_DisableHighDpiScaling", - "AA_UseStyleSheetPropagationInWidgetStyles", - "AA_DontUseNativeDialogs", - "AA_SynthesizeMouseForUnhandledTabletEvents", - "AA_CompressHighFrequencyEvents", - "AA_DontCheckOpenGLContextThreadAffinity", - "AA_DisableShaderDiskCache", - "AA_DontShowShortcutsInContextMenus", - "AA_CompressTabletEvents", - "AA_DisableSessionManager", - "AA_AttributeCount" - ] - } - Enum { - name: "ImageConversionFlags" - alias: "ImageConversionFlag" - isFlag: true - values: [ - "ColorMode_Mask", - "AutoColor", - "ColorOnly", - "MonoOnly", - "AlphaDither_Mask", - "ThresholdAlphaDither", - "OrderedAlphaDither", - "DiffuseAlphaDither", - "NoAlpha", - "Dither_Mask", - "DiffuseDither", - "OrderedDither", - "ThresholdDither", - "DitherMode_Mask", - "AutoDither", - "PreferDither", - "AvoidDither", - "NoOpaqueDetection", - "NoFormatConversion" - ] - } - Enum { - name: "BGMode" - values: ["TransparentMode", "OpaqueMode"] - } - Enum { - name: "Key" - values: [ - "Key_Space", - "Key_Any", - "Key_Exclam", - "Key_QuoteDbl", - "Key_NumberSign", - "Key_Dollar", - "Key_Percent", - "Key_Ampersand", - "Key_Apostrophe", - "Key_ParenLeft", - "Key_ParenRight", - "Key_Asterisk", - "Key_Plus", - "Key_Comma", - "Key_Minus", - "Key_Period", - "Key_Slash", - "Key_0", - "Key_1", - "Key_2", - "Key_3", - "Key_4", - "Key_5", - "Key_6", - "Key_7", - "Key_8", - "Key_9", - "Key_Colon", - "Key_Semicolon", - "Key_Less", - "Key_Equal", - "Key_Greater", - "Key_Question", - "Key_At", - "Key_A", - "Key_B", - "Key_C", - "Key_D", - "Key_E", - "Key_F", - "Key_G", - "Key_H", - "Key_I", - "Key_J", - "Key_K", - "Key_L", - "Key_M", - "Key_N", - "Key_O", - "Key_P", - "Key_Q", - "Key_R", - "Key_S", - "Key_T", - "Key_U", - "Key_V", - "Key_W", - "Key_X", - "Key_Y", - "Key_Z", - "Key_BracketLeft", - "Key_Backslash", - "Key_BracketRight", - "Key_AsciiCircum", - "Key_Underscore", - "Key_QuoteLeft", - "Key_BraceLeft", - "Key_Bar", - "Key_BraceRight", - "Key_AsciiTilde", - "Key_nobreakspace", - "Key_exclamdown", - "Key_cent", - "Key_sterling", - "Key_currency", - "Key_yen", - "Key_brokenbar", - "Key_section", - "Key_diaeresis", - "Key_copyright", - "Key_ordfeminine", - "Key_guillemotleft", - "Key_notsign", - "Key_hyphen", - "Key_registered", - "Key_macron", - "Key_degree", - "Key_plusminus", - "Key_twosuperior", - "Key_threesuperior", - "Key_acute", - "Key_micro", - "Key_mu", - "Key_paragraph", - "Key_periodcentered", - "Key_cedilla", - "Key_onesuperior", - "Key_masculine", - "Key_guillemotright", - "Key_onequarter", - "Key_onehalf", - "Key_threequarters", - "Key_questiondown", - "Key_Agrave", - "Key_Aacute", - "Key_Acircumflex", - "Key_Atilde", - "Key_Adiaeresis", - "Key_Aring", - "Key_AE", - "Key_Ccedilla", - "Key_Egrave", - "Key_Eacute", - "Key_Ecircumflex", - "Key_Ediaeresis", - "Key_Igrave", - "Key_Iacute", - "Key_Icircumflex", - "Key_Idiaeresis", - "Key_ETH", - "Key_Ntilde", - "Key_Ograve", - "Key_Oacute", - "Key_Ocircumflex", - "Key_Otilde", - "Key_Odiaeresis", - "Key_multiply", - "Key_Ooblique", - "Key_Ugrave", - "Key_Uacute", - "Key_Ucircumflex", - "Key_Udiaeresis", - "Key_Yacute", - "Key_THORN", - "Key_ssharp", - "Key_division", - "Key_ydiaeresis", - "Key_Escape", - "Key_Tab", - "Key_Backtab", - "Key_Backspace", - "Key_Return", - "Key_Enter", - "Key_Insert", - "Key_Delete", - "Key_Pause", - "Key_Print", - "Key_SysReq", - "Key_Clear", - "Key_Home", - "Key_End", - "Key_Left", - "Key_Up", - "Key_Right", - "Key_Down", - "Key_PageUp", - "Key_PageDown", - "Key_Shift", - "Key_Control", - "Key_Meta", - "Key_Alt", - "Key_CapsLock", - "Key_NumLock", - "Key_ScrollLock", - "Key_F1", - "Key_F2", - "Key_F3", - "Key_F4", - "Key_F5", - "Key_F6", - "Key_F7", - "Key_F8", - "Key_F9", - "Key_F10", - "Key_F11", - "Key_F12", - "Key_F13", - "Key_F14", - "Key_F15", - "Key_F16", - "Key_F17", - "Key_F18", - "Key_F19", - "Key_F20", - "Key_F21", - "Key_F22", - "Key_F23", - "Key_F24", - "Key_F25", - "Key_F26", - "Key_F27", - "Key_F28", - "Key_F29", - "Key_F30", - "Key_F31", - "Key_F32", - "Key_F33", - "Key_F34", - "Key_F35", - "Key_Super_L", - "Key_Super_R", - "Key_Menu", - "Key_Hyper_L", - "Key_Hyper_R", - "Key_Help", - "Key_Direction_L", - "Key_Direction_R", - "Key_AltGr", - "Key_Multi_key", - "Key_Codeinput", - "Key_SingleCandidate", - "Key_MultipleCandidate", - "Key_PreviousCandidate", - "Key_Mode_switch", - "Key_Kanji", - "Key_Muhenkan", - "Key_Henkan", - "Key_Romaji", - "Key_Hiragana", - "Key_Katakana", - "Key_Hiragana_Katakana", - "Key_Zenkaku", - "Key_Hankaku", - "Key_Zenkaku_Hankaku", - "Key_Touroku", - "Key_Massyo", - "Key_Kana_Lock", - "Key_Kana_Shift", - "Key_Eisu_Shift", - "Key_Eisu_toggle", - "Key_Hangul", - "Key_Hangul_Start", - "Key_Hangul_End", - "Key_Hangul_Hanja", - "Key_Hangul_Jamo", - "Key_Hangul_Romaja", - "Key_Hangul_Jeonja", - "Key_Hangul_Banja", - "Key_Hangul_PreHanja", - "Key_Hangul_PostHanja", - "Key_Hangul_Special", - "Key_Dead_Grave", - "Key_Dead_Acute", - "Key_Dead_Circumflex", - "Key_Dead_Tilde", - "Key_Dead_Macron", - "Key_Dead_Breve", - "Key_Dead_Abovedot", - "Key_Dead_Diaeresis", - "Key_Dead_Abovering", - "Key_Dead_Doubleacute", - "Key_Dead_Caron", - "Key_Dead_Cedilla", - "Key_Dead_Ogonek", - "Key_Dead_Iota", - "Key_Dead_Voiced_Sound", - "Key_Dead_Semivoiced_Sound", - "Key_Dead_Belowdot", - "Key_Dead_Hook", - "Key_Dead_Horn", - "Key_Dead_Stroke", - "Key_Dead_Abovecomma", - "Key_Dead_Abovereversedcomma", - "Key_Dead_Doublegrave", - "Key_Dead_Belowring", - "Key_Dead_Belowmacron", - "Key_Dead_Belowcircumflex", - "Key_Dead_Belowtilde", - "Key_Dead_Belowbreve", - "Key_Dead_Belowdiaeresis", - "Key_Dead_Invertedbreve", - "Key_Dead_Belowcomma", - "Key_Dead_Currency", - "Key_Dead_a", - "Key_Dead_A", - "Key_Dead_e", - "Key_Dead_E", - "Key_Dead_i", - "Key_Dead_I", - "Key_Dead_o", - "Key_Dead_O", - "Key_Dead_u", - "Key_Dead_U", - "Key_Dead_Small_Schwa", - "Key_Dead_Capital_Schwa", - "Key_Dead_Greek", - "Key_Dead_Lowline", - "Key_Dead_Aboveverticalline", - "Key_Dead_Belowverticalline", - "Key_Dead_Longsolidusoverlay", - "Key_Back", - "Key_Forward", - "Key_Stop", - "Key_Refresh", - "Key_VolumeDown", - "Key_VolumeMute", - "Key_VolumeUp", - "Key_BassBoost", - "Key_BassUp", - "Key_BassDown", - "Key_TrebleUp", - "Key_TrebleDown", - "Key_MediaPlay", - "Key_MediaStop", - "Key_MediaPrevious", - "Key_MediaNext", - "Key_MediaRecord", - "Key_MediaPause", - "Key_MediaTogglePlayPause", - "Key_HomePage", - "Key_Favorites", - "Key_Search", - "Key_Standby", - "Key_OpenUrl", - "Key_LaunchMail", - "Key_LaunchMedia", - "Key_Launch0", - "Key_Launch1", - "Key_Launch2", - "Key_Launch3", - "Key_Launch4", - "Key_Launch5", - "Key_Launch6", - "Key_Launch7", - "Key_Launch8", - "Key_Launch9", - "Key_LaunchA", - "Key_LaunchB", - "Key_LaunchC", - "Key_LaunchD", - "Key_LaunchE", - "Key_LaunchF", - "Key_MonBrightnessUp", - "Key_MonBrightnessDown", - "Key_KeyboardLightOnOff", - "Key_KeyboardBrightnessUp", - "Key_KeyboardBrightnessDown", - "Key_PowerOff", - "Key_WakeUp", - "Key_Eject", - "Key_ScreenSaver", - "Key_WWW", - "Key_Memo", - "Key_LightBulb", - "Key_Shop", - "Key_History", - "Key_AddFavorite", - "Key_HotLinks", - "Key_BrightnessAdjust", - "Key_Finance", - "Key_Community", - "Key_AudioRewind", - "Key_BackForward", - "Key_ApplicationLeft", - "Key_ApplicationRight", - "Key_Book", - "Key_CD", - "Key_Calculator", - "Key_ToDoList", - "Key_ClearGrab", - "Key_Close", - "Key_Copy", - "Key_Cut", - "Key_Display", - "Key_DOS", - "Key_Documents", - "Key_Excel", - "Key_Explorer", - "Key_Game", - "Key_Go", - "Key_iTouch", - "Key_LogOff", - "Key_Market", - "Key_Meeting", - "Key_MenuKB", - "Key_MenuPB", - "Key_MySites", - "Key_News", - "Key_OfficeHome", - "Key_Option", - "Key_Paste", - "Key_Phone", - "Key_Calendar", - "Key_Reply", - "Key_Reload", - "Key_RotateWindows", - "Key_RotationPB", - "Key_RotationKB", - "Key_Save", - "Key_Send", - "Key_Spell", - "Key_SplitScreen", - "Key_Support", - "Key_TaskPane", - "Key_Terminal", - "Key_Tools", - "Key_Travel", - "Key_Video", - "Key_Word", - "Key_Xfer", - "Key_ZoomIn", - "Key_ZoomOut", - "Key_Away", - "Key_Messenger", - "Key_WebCam", - "Key_MailForward", - "Key_Pictures", - "Key_Music", - "Key_Battery", - "Key_Bluetooth", - "Key_WLAN", - "Key_UWB", - "Key_AudioForward", - "Key_AudioRepeat", - "Key_AudioRandomPlay", - "Key_Subtitle", - "Key_AudioCycleTrack", - "Key_Time", - "Key_Hibernate", - "Key_View", - "Key_TopMenu", - "Key_PowerDown", - "Key_Suspend", - "Key_ContrastAdjust", - "Key_LaunchG", - "Key_LaunchH", - "Key_TouchpadToggle", - "Key_TouchpadOn", - "Key_TouchpadOff", - "Key_MicMute", - "Key_Red", - "Key_Green", - "Key_Yellow", - "Key_Blue", - "Key_ChannelUp", - "Key_ChannelDown", - "Key_Guide", - "Key_Info", - "Key_Settings", - "Key_MicVolumeUp", - "Key_MicVolumeDown", - "Key_New", - "Key_Open", - "Key_Find", - "Key_Undo", - "Key_Redo", - "Key_MediaLast", - "Key_Select", - "Key_Yes", - "Key_No", - "Key_Cancel", - "Key_Printer", - "Key_Execute", - "Key_Sleep", - "Key_Play", - "Key_Zoom", - "Key_Exit", - "Key_Context1", - "Key_Context2", - "Key_Context3", - "Key_Context4", - "Key_Call", - "Key_Hangup", - "Key_Flip", - "Key_ToggleCallHangup", - "Key_VoiceDial", - "Key_LastNumberRedial", - "Key_Camera", - "Key_CameraFocus", - "Key_unknown" - ] - } - Enum { - name: "KeyboardModifier" - values: [ - "NoModifier", - "ShiftModifier", - "ControlModifier", - "AltModifier", - "MetaModifier", - "KeypadModifier", - "GroupSwitchModifier", - "KeyboardModifierMask" - ] - } - Enum { - name: "KeyboardModifiers" - alias: "KeyboardModifier" - isFlag: true - values: [ - "NoModifier", - "ShiftModifier", - "ControlModifier", - "AltModifier", - "MetaModifier", - "KeypadModifier", - "GroupSwitchModifier", - "KeyboardModifierMask" - ] - } - Enum { - name: "Modifier" - values: ["META", "SHIFT", "CTRL", "ALT", "MODIFIER_MASK"] - } - Enum { - name: "Modifiers" - alias: "Modifier" - isFlag: true - values: ["META", "SHIFT", "CTRL", "ALT", "MODIFIER_MASK"] - } - Enum { - name: "ArrowType" - values: [ - "NoArrow", - "UpArrow", - "DownArrow", - "LeftArrow", - "RightArrow" - ] - } - Enum { - name: "PenStyle" - values: [ - "NoPen", - "SolidLine", - "DashLine", - "DotLine", - "DashDotLine", - "DashDotDotLine", - "CustomDashLine" - ] - } - Enum { - name: "PenCapStyle" - values: ["FlatCap", "SquareCap", "RoundCap", "MPenCapStyle"] - } - Enum { - name: "PenJoinStyle" - values: [ - "MiterJoin", - "BevelJoin", - "RoundJoin", - "SvgMiterJoin", - "MPenJoinStyle" - ] - } - Enum { - name: "BrushStyle" - values: [ - "NoBrush", - "SolidPattern", - "Dense1Pattern", - "Dense2Pattern", - "Dense3Pattern", - "Dense4Pattern", - "Dense5Pattern", - "Dense6Pattern", - "Dense7Pattern", - "HorPattern", - "VerPattern", - "CrossPattern", - "BDiagPattern", - "FDiagPattern", - "DiagCrossPattern", - "LinearGradientPattern", - "RadialGradientPattern", - "ConicalGradientPattern", - "TexturePattern" - ] - } - Enum { - name: "SizeMode" - values: ["AbsoluteSize", "RelativeSize"] - } - Enum { - name: "CursorShape" - values: [ - "ArrowCursor", - "UpArrowCursor", - "CrossCursor", - "WaitCursor", - "IBeamCursor", - "SizeVerCursor", - "SizeHorCursor", - "SizeBDiagCursor", - "SizeFDiagCursor", - "SizeAllCursor", - "BlankCursor", - "SplitVCursor", - "SplitHCursor", - "PointingHandCursor", - "ForbiddenCursor", - "WhatsThisCursor", - "BusyCursor", - "OpenHandCursor", - "ClosedHandCursor", - "DragCopyCursor", - "DragMoveCursor", - "DragLinkCursor", - "LastCursor", - "BitmapCursor", - "CustomCursor" - ] - } - Enum { - name: "TextFormat" - values: ["PlainText", "RichText", "AutoText", "MarkdownText"] - } - Enum { - name: "AspectRatioMode" - values: [ - "IgnoreAspectRatio", - "KeepAspectRatio", - "KeepAspectRatioByExpanding" - ] - } - Enum { - name: "DockWidgetArea" - values: [ - "LeftDockWidgetArea", - "RightDockWidgetArea", - "TopDockWidgetArea", - "BottomDockWidgetArea", - "DockWidgetArea_Mask", - "AllDockWidgetAreas", - "NoDockWidgetArea" - ] - } - Enum { - name: "DockWidgetAreas" - alias: "DockWidgetArea" - isFlag: true - values: [ - "LeftDockWidgetArea", - "RightDockWidgetArea", - "TopDockWidgetArea", - "BottomDockWidgetArea", - "DockWidgetArea_Mask", - "AllDockWidgetAreas", - "NoDockWidgetArea" - ] - } - Enum { - name: "ToolBarArea" - values: [ - "LeftToolBarArea", - "RightToolBarArea", - "TopToolBarArea", - "BottomToolBarArea", - "ToolBarArea_Mask", - "AllToolBarAreas", - "NoToolBarArea" - ] - } - Enum { - name: "ToolBarAreas" - alias: "ToolBarArea" - isFlag: true - values: [ - "LeftToolBarArea", - "RightToolBarArea", - "TopToolBarArea", - "BottomToolBarArea", - "ToolBarArea_Mask", - "AllToolBarAreas", - "NoToolBarArea" - ] - } - Enum { - name: "DateFormat" - values: ["TextDate", "ISODate", "RFC2822Date", "ISODateWithMs"] - } - Enum { - name: "TimeSpec" - values: ["LocalTime", "UTC", "OffsetFromUTC", "TimeZone"] - } - Enum { - name: "DayOfWeek" - values: [ - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday" - ] - } - Enum { - name: "ScrollBarPolicy" - values: [ - "ScrollBarAsNeeded", - "ScrollBarAlwaysOff", - "ScrollBarAlwaysOn" - ] - } - Enum { - name: "CaseSensitivity" - values: ["CaseInsensitive", "CaseSensitive"] - } - Enum { - name: "Corner" - values: [ - "TopLeftCorner", - "TopRightCorner", - "BottomLeftCorner", - "BottomRightCorner" - ] - } - Enum { - name: "Edge" - values: ["TopEdge", "LeftEdge", "RightEdge", "BottomEdge"] - } - Enum { - name: "Edges" - alias: "Edge" - isFlag: true - values: ["TopEdge", "LeftEdge", "RightEdge", "BottomEdge"] - } - Enum { - name: "ConnectionType" - values: [ - "AutoConnection", - "DirectConnection", - "QueuedConnection", - "BlockingQueuedConnection", - "UniqueConnection", - "SingleShotConnection" - ] - } - Enum { - name: "ShortcutContext" - values: [ - "WidgetShortcut", - "WindowShortcut", - "ApplicationShortcut", - "WidgetWithChildrenShortcut" - ] - } - Enum { - name: "FillRule" - values: ["OddEvenFill", "WindingFill"] - } - Enum { - name: "MaskMode" - values: ["MaskInColor", "MaskOutColor"] - } - Enum { - name: "ClipOperation" - values: ["NoClip", "ReplaceClip", "IntersectClip"] - } - Enum { - name: "ItemSelectionMode" - values: [ - "ContainsItemShape", - "IntersectsItemShape", - "ContainsItemBoundingRect", - "IntersectsItemBoundingRect" - ] - } - Enum { - name: "ItemSelectionOperation" - values: ["ReplaceSelection", "AddToSelection"] - } - Enum { - name: "TransformationMode" - values: ["FastTransformation", "SmoothTransformation"] - } - Enum { - name: "Axis" - values: ["XAxis", "YAxis", "ZAxis"] - } - Enum { - name: "FocusReason" - values: [ - "MouseFocusReason", - "TabFocusReason", - "BacktabFocusReason", - "ActiveWindowFocusReason", - "PopupFocusReason", - "ShortcutFocusReason", - "MenuBarFocusReason", - "OtherFocusReason", - "NoFocusReason" - ] - } - Enum { - name: "ContextMenuPolicy" - values: [ - "NoContextMenu", - "DefaultContextMenu", - "ActionsContextMenu", - "CustomContextMenu", - "PreventContextMenu" - ] - } - Enum { - name: "InputMethodQuery" - values: [ - "ImEnabled", - "ImCursorRectangle", - "ImFont", - "ImCursorPosition", - "ImSurroundingText", - "ImCurrentSelection", - "ImMaximumTextLength", - "ImAnchorPosition", - "ImHints", - "ImPreferredLanguage", - "ImAbsolutePosition", - "ImTextBeforeCursor", - "ImTextAfterCursor", - "ImEnterKeyType", - "ImAnchorRectangle", - "ImInputItemClipRectangle", - "ImReadOnly", - "ImPlatformData", - "ImQueryInput", - "ImQueryAll" - ] - } - Enum { - name: "InputMethodQueries" - alias: "InputMethodQuery" - isFlag: true - values: [ - "ImEnabled", - "ImCursorRectangle", - "ImFont", - "ImCursorPosition", - "ImSurroundingText", - "ImCurrentSelection", - "ImMaximumTextLength", - "ImAnchorPosition", - "ImHints", - "ImPreferredLanguage", - "ImAbsolutePosition", - "ImTextBeforeCursor", - "ImTextAfterCursor", - "ImEnterKeyType", - "ImAnchorRectangle", - "ImInputItemClipRectangle", - "ImReadOnly", - "ImPlatformData", - "ImQueryInput", - "ImQueryAll" - ] - } - Enum { - name: "InputMethodHint" - values: [ - "ImhNone", - "ImhHiddenText", - "ImhSensitiveData", - "ImhNoAutoUppercase", - "ImhPreferNumbers", - "ImhPreferUppercase", - "ImhPreferLowercase", - "ImhNoPredictiveText", - "ImhDate", - "ImhTime", - "ImhPreferLatin", - "ImhMultiLine", - "ImhNoEditMenu", - "ImhNoTextHandles", - "ImhDigitsOnly", - "ImhFormattedNumbersOnly", - "ImhUppercaseOnly", - "ImhLowercaseOnly", - "ImhDialableCharactersOnly", - "ImhEmailCharactersOnly", - "ImhUrlCharactersOnly", - "ImhLatinOnly", - "ImhExclusiveInputMask" - ] - } - Enum { - name: "InputMethodHints" - alias: "InputMethodHint" - isFlag: true - values: [ - "ImhNone", - "ImhHiddenText", - "ImhSensitiveData", - "ImhNoAutoUppercase", - "ImhPreferNumbers", - "ImhPreferUppercase", - "ImhPreferLowercase", - "ImhNoPredictiveText", - "ImhDate", - "ImhTime", - "ImhPreferLatin", - "ImhMultiLine", - "ImhNoEditMenu", - "ImhNoTextHandles", - "ImhDigitsOnly", - "ImhFormattedNumbersOnly", - "ImhUppercaseOnly", - "ImhLowercaseOnly", - "ImhDialableCharactersOnly", - "ImhEmailCharactersOnly", - "ImhUrlCharactersOnly", - "ImhLatinOnly", - "ImhExclusiveInputMask" - ] - } - Enum { - name: "EnterKeyType" - values: [ - "EnterKeyDefault", - "EnterKeyReturn", - "EnterKeyDone", - "EnterKeyGo", - "EnterKeySend", - "EnterKeySearch", - "EnterKeyNext", - "EnterKeyPrevious" - ] - } - Enum { - name: "ToolButtonStyle" - values: [ - "ToolButtonIconOnly", - "ToolButtonTextOnly", - "ToolButtonTextBesideIcon", - "ToolButtonTextUnderIcon", - "ToolButtonFollowStyle" - ] - } - Enum { - name: "LayoutDirection" - values: ["LeftToRight", "RightToLeft", "LayoutDirectionAuto"] - } - Enum { - name: "DropAction" - values: [ - "CopyAction", - "MoveAction", - "LinkAction", - "ActionMask", - "TargetMoveAction", - "IgnoreAction" - ] - } - Enum { - name: "DropActions" - alias: "DropAction" - isFlag: true - values: [ - "CopyAction", - "MoveAction", - "LinkAction", - "ActionMask", - "TargetMoveAction", - "IgnoreAction" - ] - } - Enum { - name: "CheckState" - values: ["Unchecked", "PartiallyChecked", "Checked"] - } - Enum { - name: "ItemDataRole" - values: [ - "DisplayRole", - "DecorationRole", - "EditRole", - "ToolTipRole", - "StatusTipRole", - "WhatsThisRole", - "FontRole", - "TextAlignmentRole", - "BackgroundRole", - "ForegroundRole", - "CheckStateRole", - "AccessibleTextRole", - "AccessibleDescriptionRole", - "SizeHintRole", - "InitialSortOrderRole", - "DisplayPropertyRole", - "DecorationPropertyRole", - "ToolTipPropertyRole", - "StatusTipPropertyRole", - "WhatsThisPropertyRole", - "UserRole" - ] - } - Enum { - name: "ItemFlags" - alias: "ItemFlag" - isFlag: true - values: [ - "NoItemFlags", - "ItemIsSelectable", - "ItemIsEditable", - "ItemIsDragEnabled", - "ItemIsDropEnabled", - "ItemIsUserCheckable", - "ItemIsEnabled", - "ItemIsAutoTristate", - "ItemNeverHasChildren", - "ItemIsUserTristate" - ] - } - Enum { - name: "MatchFlags" - alias: "MatchFlag" - isFlag: true - values: [ - "MatchExactly", - "MatchContains", - "MatchStartsWith", - "MatchEndsWith", - "MatchRegularExpression", - "MatchWildcard", - "MatchFixedString", - "MatchTypeMask", - "MatchCaseSensitive", - "MatchWrap", - "MatchRecursive" - ] - } - Enum { - name: "WindowModality" - values: ["NonModal", "WindowModal", "ApplicationModal"] - } - Enum { - name: "TextInteractionFlag" - values: [ - "NoTextInteraction", - "TextSelectableByMouse", - "TextSelectableByKeyboard", - "LinksAccessibleByMouse", - "LinksAccessibleByKeyboard", - "TextEditable", - "TextEditorInteraction", - "TextBrowserInteraction" - ] - } - Enum { - name: "TextInteractionFlags" - alias: "TextInteractionFlag" - isFlag: true - values: [ - "NoTextInteraction", - "TextSelectableByMouse", - "TextSelectableByKeyboard", - "LinksAccessibleByMouse", - "LinksAccessibleByKeyboard", - "TextEditable", - "TextEditorInteraction", - "TextBrowserInteraction" - ] - } - Enum { - name: "SizeHint" - values: [ - "MinimumSize", - "PreferredSize", - "MaximumSize", - "MinimumDescent", - "NSizeHints" - ] - } - Enum { - name: "TouchPointStates" - alias: "TouchPointState" - isFlag: true - values: [ - "TouchPointUnknownState", - "TouchPointPressed", - "TouchPointMoved", - "TouchPointStationary", - "TouchPointReleased" - ] - } - Enum { - name: "GestureState" - values: [ - "NoGesture", - "GestureStarted", - "GestureUpdated", - "GestureFinished", - "GestureCanceled" - ] - } - Enum { - name: "GestureType" - values: [ - "TapGesture", - "TapAndHoldGesture", - "PanGesture", - "PinchGesture", - "SwipeGesture", - "CustomGesture", - "LastGestureType" - ] - } - Enum { - name: "NativeGestureType" - values: [ - "BeginNativeGesture", - "EndNativeGesture", - "PanNativeGesture", - "ZoomNativeGesture", - "SmartZoomNativeGesture", - "RotateNativeGesture", - "SwipeNativeGesture" - ] - } - Enum { - name: "CursorMoveStyle" - values: ["LogicalMoveStyle", "VisualMoveStyle"] - } - Enum { - name: "TimerType" - values: ["PreciseTimer", "CoarseTimer", "VeryCoarseTimer"] - } - Enum { - name: "ScrollPhase" - values: [ - "NoScrollPhase", - "ScrollBegin", - "ScrollUpdate", - "ScrollEnd", - "ScrollMomentum" - ] - } - Enum { - name: "MouseEventSource" - values: [ - "MouseEventNotSynthesized", - "MouseEventSynthesizedBySystem", - "MouseEventSynthesizedByQt", - "MouseEventSynthesizedByApplication" - ] - } - Enum { - name: "MouseEventFlags" - alias: "MouseEventFlag" - isFlag: true - values: [ - "NoMouseEventFlag", - "MouseEventCreatedDoubleClick", - "MouseEventFlagMask" - ] - } - Enum { - name: "ChecksumType" - values: ["ChecksumIso3309", "ChecksumItuV41"] - } - Enum { - name: "HighDpiScaleFactorRoundingPolicy" - values: [ - "Unset", - "Round", - "Ceil", - "Floor", - "RoundPreferFloor", - "PassThrough" - ] - } - Enum { - name: "PermissionStatus" - values: ["Undetermined", "Granted", "Denied"] - } - } - Component { - file: "private/qqmlbuiltinfunctions_p.h" - name: "QtObject" - accessSemantics: "reference" - prototype: "QObject" - extension: "Qt" - extensionIsNamespace: true - exports: ["QtQml.Base/Qt 2.0", "QtQml.Base/Qt 6.0"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "LoadingMode" - values: ["Asynchronous", "Synchronous"] - } - Property { - name: "application" - type: "QQmlApplication" - isPointer: true - read: "application" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "platform" - type: "QQmlPlatform" - isPointer: true - read: "platform" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "inputMethod" - type: "QObject" - isPointer: true - read: "inputMethod" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "styleHints" - type: "QObject" - isPointer: true - read: "styleHints" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "uiLanguage" - type: "QString" - bindable: "uiLanguageBindable" - read: "uiLanguage" - write: "setUiLanguage" - index: 4 - } - Method { - name: "include" - type: "QJSValue" - Parameter { name: "url"; type: "QString" } - Parameter { name: "callback"; type: "QJSValue" } - } - Method { - name: "include" - type: "QJSValue" - isCloned: true - Parameter { name: "url"; type: "QString" } - } - Method { - name: "isQtObject" - type: "bool" - Parameter { name: "value"; type: "QJSValue" } - } - Method { - name: "color" - type: "QVariant" - Parameter { name: "name"; type: "QString" } - } - Method { - name: "rgba" - type: "QVariant" - Parameter { name: "r"; type: "double" } - Parameter { name: "g"; type: "double" } - Parameter { name: "b"; type: "double" } - Parameter { name: "a"; type: "double" } - } - Method { - name: "rgba" - type: "QVariant" - isCloned: true - Parameter { name: "r"; type: "double" } - Parameter { name: "g"; type: "double" } - Parameter { name: "b"; type: "double" } - } - Method { - name: "hsla" - type: "QVariant" - Parameter { name: "h"; type: "double" } - Parameter { name: "s"; type: "double" } - Parameter { name: "l"; type: "double" } - Parameter { name: "a"; type: "double" } - } - Method { - name: "hsla" - type: "QVariant" - isCloned: true - Parameter { name: "h"; type: "double" } - Parameter { name: "s"; type: "double" } - Parameter { name: "l"; type: "double" } - } - Method { - name: "hsva" - type: "QVariant" - Parameter { name: "h"; type: "double" } - Parameter { name: "s"; type: "double" } - Parameter { name: "v"; type: "double" } - Parameter { name: "a"; type: "double" } - } - Method { - name: "hsva" - type: "QVariant" - isCloned: true - Parameter { name: "h"; type: "double" } - Parameter { name: "s"; type: "double" } - Parameter { name: "v"; type: "double" } - } - Method { - name: "colorEqual" - type: "bool" - Parameter { name: "lhs"; type: "QVariant" } - Parameter { name: "rhs"; type: "QVariant" } - } - Method { - name: "rect" - type: "QRectF" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "width"; type: "double" } - Parameter { name: "height"; type: "double" } - } - Method { - name: "point" - type: "QPointF" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "size" - type: "QSizeF" - Parameter { name: "width"; type: "double" } - Parameter { name: "height"; type: "double" } - } - Method { - name: "vector2d" - type: "QVariant" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "vector3d" - type: "QVariant" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "z"; type: "double" } - } - Method { - name: "vector4d" - type: "QVariant" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "z"; type: "double" } - Parameter { name: "w"; type: "double" } - } - Method { - name: "quaternion" - type: "QVariant" - Parameter { name: "scalar"; type: "double" } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "z"; type: "double" } - } - Method { name: "matrix4x4"; type: "QVariant" } - Method { - name: "matrix4x4" - type: "QVariant" - Parameter { name: "m11"; type: "double" } - Parameter { name: "m12"; type: "double" } - Parameter { name: "m13"; type: "double" } - Parameter { name: "m14"; type: "double" } - Parameter { name: "m21"; type: "double" } - Parameter { name: "m22"; type: "double" } - Parameter { name: "m23"; type: "double" } - Parameter { name: "m24"; type: "double" } - Parameter { name: "m31"; type: "double" } - Parameter { name: "m32"; type: "double" } - Parameter { name: "m33"; type: "double" } - Parameter { name: "m34"; type: "double" } - Parameter { name: "m41"; type: "double" } - Parameter { name: "m42"; type: "double" } - Parameter { name: "m43"; type: "double" } - Parameter { name: "m44"; type: "double" } - } - Method { - name: "matrix4x4" - type: "QVariant" - Parameter { name: "value"; type: "QJSValue" } - } - Method { - name: "lighter" - type: "QVariant" - Parameter { name: "color"; type: "QJSValue" } - Parameter { name: "factor"; type: "double" } - } - Method { - name: "lighter" - type: "QVariant" - isCloned: true - Parameter { name: "color"; type: "QJSValue" } - } - Method { - name: "darker" - type: "QVariant" - Parameter { name: "color"; type: "QJSValue" } - Parameter { name: "factor"; type: "double" } - } - Method { - name: "darker" - type: "QVariant" - isCloned: true - Parameter { name: "color"; type: "QJSValue" } - } - Method { - name: "alpha" - type: "QVariant" - Parameter { name: "baseColor"; type: "QJSValue" } - Parameter { name: "value"; type: "double" } - } - Method { - name: "tint" - type: "QVariant" - Parameter { name: "baseColor"; type: "QJSValue" } - Parameter { name: "tintColor"; type: "QJSValue" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "date"; type: "QDate" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "date"; type: "QDate" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QTime" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QString" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QTime" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QString" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "date"; type: "QDateTime" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "format"; type: "QString" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "date"; type: "QDateTime" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "format"; type: "Qt::DateFormat" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "date"; type: "QDate" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "date"; type: "QDate" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "date"; type: "QDate" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "dateTime"; type: "QDateTime" } - } - Method { - name: "formatDate" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "string"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatDate" - type: "QString" - isCloned: true - Parameter { name: "string"; type: "QString" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QTime" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "time"; type: "QTime" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "time"; type: "QTime" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "dateTime"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "dateTime"; type: "QDateTime" } - } - Method { - name: "formatTime" - type: "QString" - Parameter { name: "time"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "time"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatTime" - type: "QString" - isCloned: true - Parameter { name: "time"; type: "QString" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "date"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatDateTime" - type: "QString" - isCloned: true - Parameter { name: "date"; type: "QDateTime" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatDateTime" - type: "QString" - isCloned: true - Parameter { name: "date"; type: "QDateTime" } - } - Method { - name: "formatDateTime" - type: "QString" - Parameter { name: "string"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - Parameter { name: "formatType"; type: "QLocale::FormatType" } - } - Method { - name: "formatDateTime" - type: "QString" - isCloned: true - Parameter { name: "string"; type: "QString" } - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "formatDateTime" - type: "QString" - isCloned: true - Parameter { name: "string"; type: "QString" } - } - Method { name: "locale"; type: "QLocale" } - Method { - name: "locale" - type: "QLocale" - Parameter { name: "name"; type: "QString" } - } - Method { - name: "url" - type: "QUrl" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "resolvedUrl" - type: "QUrl" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "resolvedUrl" - type: "QUrl" - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "context"; type: "QObject"; isPointer: true } - } - Method { - name: "openUrlExternally" - type: "bool" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "font" - type: "QVariant" - Parameter { name: "fontSpecifier"; type: "QJSValue" } - } - Method { name: "fontFamilies"; type: "QStringList" } - Method { - name: "md5" - type: "QString" - Parameter { name: "data"; type: "QString" } - } - Method { - name: "btoa" - type: "QString" - Parameter { name: "data"; type: "QString" } - } - Method { - name: "atob" - type: "QString" - Parameter { name: "data"; type: "QString" } - } - Method { name: "quit" } - Method { - name: "exit" - Parameter { name: "retCode"; type: "int" } - } - Method { - name: "createQmlObject" - type: "QObject" - isPointer: true - Parameter { name: "qml"; type: "QString" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "createQmlObject" - type: "QObject" - isPointer: true - isCloned: true - Parameter { name: "qml"; type: "QString" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "mode"; type: "QQmlComponent::CompilationMode" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "mode"; type: "QQmlComponent::CompilationMode" } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - Parameter { name: "moduleUri"; type: "QString" } - Parameter { name: "typeName"; type: "QString" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - Parameter { name: "moduleUri"; type: "QString" } - Parameter { name: "typeName"; type: "QString" } - Parameter { name: "mode"; type: "QQmlComponent::CompilationMode" } - Parameter { name: "parent"; type: "QObject"; isPointer: true } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - isCloned: true - Parameter { name: "moduleUri"; type: "QString" } - Parameter { name: "typeName"; type: "QString" } - Parameter { name: "mode"; type: "QQmlComponent::CompilationMode" } - } - Method { - name: "createComponent" - type: "QQmlComponent" - isPointer: true - isCloned: true - Parameter { name: "moduleUri"; type: "QString" } - Parameter { name: "typeName"; type: "QString" } - } - Method { - name: "binding" - type: "QJSValue" - Parameter { name: "function"; type: "QJSValue" } - } - Method { name: "callLater"; isJavaScriptFunction: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/qmldir deleted file mode 100644 index aca2ca9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Base/qmldir +++ /dev/null @@ -1,10 +0,0 @@ -module QtQml.Base -linktarget Qt6::qmlplugin -optional plugin qmlplugin -classname QtQmlPlugin -designersupported -system -typeinfo plugins.qmltypes -import QML 1.0 -prefer :/qt-project.org/imports/QtQml/Base/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/libmodelsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/libmodelsplugin.so deleted file mode 100755 index fd1afff..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/libmodelsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/plugins.qmltypes deleted file mode 100644 index b20658f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/plugins.qmltypes +++ /dev/null @@ -1,1551 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qqmlmodelsmodule_p.h" - name: "QAbstractItemModel" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQml.Models/AbstractItemModel 6.5"] - isCreatable: false - exportMetaObjectRevisions: [1541] - Enum { - name: "LayoutChangeHint" - values: [ - "NoLayoutChangeHint", - "VerticalSortHint", - "HorizontalSortHint" - ] - } - Enum { - name: "CheckIndexOption" - values: [ - "NoOption", - "IndexIsValid", - "DoNotUseParent", - "ParentIsInvalid" - ] - } - Signal { - name: "dataChanged" - Parameter { name: "topLeft"; type: "QModelIndex" } - Parameter { name: "bottomRight"; type: "QModelIndex" } - Parameter { name: "roles"; type: "int"; isList: true } - } - Signal { - name: "dataChanged" - isCloned: true - Parameter { name: "topLeft"; type: "QModelIndex" } - Parameter { name: "bottomRight"; type: "QModelIndex" } - } - Signal { - name: "headerDataChanged" - Parameter { name: "orientation"; type: "Qt::Orientation" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "layoutChanged" - Parameter { name: "parents"; type: "QPersistentModelIndex"; isList: true } - Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } - } - Signal { - name: "layoutChanged" - isCloned: true - Parameter { name: "parents"; type: "QPersistentModelIndex"; isList: true } - } - Signal { name: "layoutChanged"; isCloned: true } - Signal { - name: "layoutAboutToBeChanged" - Parameter { name: "parents"; type: "QPersistentModelIndex"; isList: true } - Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } - } - Signal { - name: "layoutAboutToBeChanged" - isCloned: true - Parameter { name: "parents"; type: "QPersistentModelIndex"; isList: true } - } - Signal { name: "layoutAboutToBeChanged"; isCloned: true } - Signal { - name: "rowsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { name: "modelAboutToBeReset" } - Signal { name: "modelReset" } - Signal { - name: "rowsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationRow"; type: "int" } - } - Signal { - name: "rowsMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationRow"; type: "int" } - } - Signal { - name: "columnsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationColumn"; type: "int" } - } - Signal { - name: "columnsMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationColumn"; type: "int" } - } - Method { name: "submit"; type: "bool" } - Method { name: "revert" } - Method { name: "resetInternalData" } - Method { - name: "hasIndex" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "hasIndex" - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "index" - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "index" - type: "QModelIndex" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "parent" - type: "QModelIndex" - Parameter { name: "child"; type: "QModelIndex" } - } - Method { - name: "sibling" - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "idx"; type: "QModelIndex" } - } - Method { - name: "rowCount" - type: "int" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "rowCount"; type: "int"; isCloned: true } - Method { - name: "columnCount" - type: "int" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "columnCount"; type: "int"; isCloned: true } - Method { - name: "hasChildren" - type: "bool" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "hasChildren"; type: "bool"; isCloned: true } - Method { - name: "data" - type: "QVariant" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "data" - type: "QVariant" - isCloned: true - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "setData" - type: "bool" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "setData" - type: "bool" - isCloned: true - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "headerData" - type: "QVariant" - Parameter { name: "section"; type: "int" } - Parameter { name: "orientation"; type: "Qt::Orientation" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "headerData" - type: "QVariant" - isCloned: true - Parameter { name: "section"; type: "int" } - Parameter { name: "orientation"; type: "Qt::Orientation" } - } - Method { - name: "insertRows" - revision: 1540 - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "insertRows" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "insertColumns" - revision: 1540 - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "insertColumns" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "removeRows" - revision: 1540 - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "removeRows" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "removeColumns" - revision: 1540 - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "removeColumns" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "moveRows" - revision: 1540 - type: "bool" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceRow"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationChild"; type: "int" } - } - Method { - name: "moveColumns" - revision: 1540 - type: "bool" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceColumn"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationChild"; type: "int" } - } - Method { - name: "insertRow" - revision: 1540 - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "insertRow" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - } - Method { - name: "insertColumn" - revision: 1540 - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "insertColumn" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - } - Method { - name: "removeRow" - revision: 1540 - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "removeRow" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - } - Method { - name: "removeColumn" - revision: 1540 - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "removeColumn" - revision: 1540 - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - } - Method { - name: "moveRow" - revision: 1540 - type: "bool" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceRow"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationChild"; type: "int" } - } - Method { - name: "moveColumn" - revision: 1540 - type: "bool" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceColumn"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationChild"; type: "int" } - } - Method { - name: "fetchMore" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "canFetchMore" - type: "bool" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "flags" - type: "Qt::ItemFlags" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "sort" - revision: 1540 - Parameter { name: "column"; type: "int" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - revision: 1540 - isCloned: true - Parameter { name: "column"; type: "int" } - } - Method { - name: "match" - type: "QModelIndexList" - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "hits"; type: "int" } - Parameter { name: "flags"; type: "Qt::MatchFlags" } - } - Method { - name: "match" - type: "QModelIndexList" - isCloned: true - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "hits"; type: "int" } - } - Method { - name: "match" - type: "QModelIndexList" - isCloned: true - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - } - } - Component { - file: "private/qqmlmodelsmodule_p.h" - name: "QAbstractListModel" - accessSemantics: "reference" - prototype: "QAbstractItemModel" - exports: ["QtQml.Models/AbstractListModel 6.5"] - isCreatable: false - exportMetaObjectRevisions: [1541] - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QItemSelection" - accessSemantics: "sequence" - valueType: "QItemSelectionRange" - } - Component { - file: "private/qqmlmodelsmodule_p.h" - name: "QItemSelectionModel" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQml.Models/ItemSelectionModel 2.2", - "QtQml.Models/ItemSelectionModel 6.0" - ] - exportMetaObjectRevisions: [514, 1536] - Enum { - name: "SelectionFlags" - alias: "SelectionFlag" - isFlag: true - values: [ - "NoUpdate", - "Clear", - "Select", - "Deselect", - "Toggle", - "Current", - "Rows", - "Columns", - "SelectCurrent", - "ToggleCurrent", - "ClearAndSelect" - ] - } - Property { - name: "model" - type: "QAbstractItemModel" - isPointer: true - bindable: "bindableModel" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "hasSelection" - type: "bool" - read: "hasSelection" - notify: "selectionChanged" - index: 1 - isReadonly: true - } - Property { - name: "currentIndex" - type: "QModelIndex" - read: "currentIndex" - notify: "currentChanged" - index: 2 - isReadonly: true - } - Property { - name: "selection" - type: "QItemSelection" - read: "selection" - notify: "selectionChanged" - index: 3 - isReadonly: true - } - Property { - name: "selectedIndexes" - type: "QModelIndexList" - read: "selectedIndexes" - notify: "selectionChanged" - index: 4 - isReadonly: true - } - Signal { - name: "selectionChanged" - Parameter { name: "selected"; type: "QItemSelection" } - Parameter { name: "deselected"; type: "QItemSelection" } - } - Signal { - name: "currentChanged" - Parameter { name: "current"; type: "QModelIndex" } - Parameter { name: "previous"; type: "QModelIndex" } - } - Signal { - name: "currentRowChanged" - Parameter { name: "current"; type: "QModelIndex" } - Parameter { name: "previous"; type: "QModelIndex" } - } - Signal { - name: "currentColumnChanged" - Parameter { name: "current"; type: "QModelIndex" } - Parameter { name: "previous"; type: "QModelIndex" } - } - Signal { - name: "modelChanged" - Parameter { name: "model"; type: "QAbstractItemModel"; isPointer: true } - } - Method { - name: "setCurrentIndex" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "command"; type: "QItemSelectionModel::SelectionFlags" } - } - Method { - name: "select" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "command"; type: "QItemSelectionModel::SelectionFlags" } - } - Method { - name: "select" - Parameter { name: "selection"; type: "QItemSelection" } - Parameter { name: "command"; type: "QItemSelectionModel::SelectionFlags" } - } - Method { name: "clear" } - Method { name: "reset" } - Method { name: "clearSelection" } - Method { name: "clearCurrentIndex" } - Method { - name: "isSelected" - type: "bool" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "isRowSelected" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "isRowSelected" - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - } - Method { - name: "isColumnSelected" - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "isColumnSelected" - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - } - Method { - name: "rowIntersectsSelection" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "rowIntersectsSelection" - type: "bool" - isCloned: true - Parameter { name: "row"; type: "int" } - } - Method { - name: "columnIntersectsSelection" - type: "bool" - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "columnIntersectsSelection" - type: "bool" - isCloned: true - Parameter { name: "column"; type: "int" } - } - Method { - name: "selectedRows" - type: "QModelIndexList" - Parameter { name: "column"; type: "int" } - } - Method { name: "selectedRows"; type: "QModelIndexList"; isCloned: true } - Method { - name: "selectedColumns" - type: "QModelIndexList" - Parameter { name: "row"; type: "int" } - } - Method { name: "selectedColumns"; type: "QModelIndexList"; isCloned: true } - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QModelIndexList" - accessSemantics: "sequence" - valueType: "QModelIndex" - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "std::vector" - accessSemantics: "sequence" - valueType: "QModelIndex" - } - Component { - file: "private/qqmlabstractdelegatecomponent_p.h" - name: "QQmlAbstractDelegateComponent" - accessSemantics: "reference" - prototype: "QQmlComponent" - exports: [ - "QtQml.Models/AbstractDelegateComponent 2.0", - "QtQml.Models/AbstractDelegateComponent 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Signal { name: "delegateChanged" } - } - Component { - file: "private/qqmldelegatemodel_p.h" - name: "QQmlDelegateModel" - accessSemantics: "reference" - defaultProperty: "delegate" - prototype: "QQmlInstanceModel" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.Models/DelegateModel 2.1", - "QtQml.Models/DelegateModel 2.15", - "QtQml.Models/DelegateModel 6.0" - ] - exportMetaObjectRevisions: [513, 527, 1536] - attachedType: "QQmlDelegateModelAttached" - Property { name: "model"; type: "QVariant"; read: "model"; write: "setModel"; index: 0 } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Property { - name: "filterOnGroup" - type: "QString" - read: "filterGroup" - write: "setFilterGroup" - reset: "resetFilterGroup" - notify: "filterGroupChanged" - index: 2 - } - Property { - name: "items" - type: "QQmlDelegateModelGroup" - isPointer: true - read: "items" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "persistedItems" - type: "QQmlDelegateModelGroup" - isPointer: true - read: "persistedItems" - index: 4 - isReadonly: true - isConstant: true - } - Property { - name: "groups" - type: "QQmlDelegateModelGroup" - isList: true - read: "groups" - index: 5 - isReadonly: true - isConstant: true - } - Property { - name: "parts" - type: "QObject" - isPointer: true - read: "parts" - index: 6 - isReadonly: true - isConstant: true - } - Property { - name: "rootIndex" - type: "QVariant" - read: "rootIndex" - write: "setRootIndex" - notify: "rootIndexChanged" - index: 7 - } - Signal { name: "filterGroupChanged" } - Signal { name: "defaultGroupsChanged" } - Signal { name: "rootIndexChanged" } - Signal { name: "delegateChanged" } - Method { - name: "_q_itemsChanged" - Parameter { name: "index"; type: "int" } - Parameter { name: "count"; type: "int" } - Parameter { name: "roles"; type: "int"; isList: true } - } - Method { - name: "_q_itemsInserted" - Parameter { name: "index"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "_q_itemsRemoved" - Parameter { name: "index"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "_q_itemsMoved" - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { name: "_q_modelAboutToBeReset" } - Method { - name: "_q_rowsInserted" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - } - Method { - name: "_q_columnsInserted" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - } - Method { - name: "_q_columnsRemoved" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - } - Method { - name: "_q_columnsMoved" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - } - Method { - name: "_q_rowsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "begin"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { - name: "_q_rowsRemoved" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - } - Method { - name: "_q_rowsMoved" - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - Parameter { type: "int" } - Parameter { type: "QModelIndex" } - Parameter { type: "int" } - } - Method { - name: "_q_dataChanged" - Parameter { type: "QModelIndex" } - Parameter { type: "QModelIndex" } - Parameter { type: "int"; isList: true } - } - Method { - name: "_q_layoutChanged" - Parameter { type: "QPersistentModelIndex"; isList: true } - Parameter { type: "QAbstractItemModel::LayoutChangeHint" } - } - Method { - name: "modelIndex" - type: "QVariant" - Parameter { name: "idx"; type: "int" } - } - Method { name: "parentModelIndex"; type: "QVariant" } - } - Component { - file: "private/qqmldelegatemodel_p.h" - name: "QQmlDelegateModelAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "model" - type: "QQmlDelegateModel" - isPointer: true - read: "model" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "groups" - type: "QStringList" - read: "groups" - write: "setGroups" - notify: "groupsChanged" - index: 1 - isFinal: true - } - Property { - name: "isUnresolved" - type: "bool" - read: "isUnresolved" - notify: "unresolvedChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "inPersistedItems" - type: "bool" - read: "inPersistedItems" - write: "setInPersistedItems" - notify: "groupsChanged" - index: 3 - isFinal: true - } - Property { - name: "inItems" - type: "bool" - read: "inItems" - write: "setInItems" - notify: "groupsChanged" - index: 4 - isFinal: true - } - Property { - name: "persistedItemsIndex" - type: "int" - read: "persistedItemsIndex" - notify: "groupsChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "itemsIndex" - type: "int" - read: "itemsIndex" - notify: "groupsChanged" - index: 6 - isReadonly: true - isFinal: true - } - Signal { name: "groupsChanged" } - Signal { name: "unresolvedChanged" } - } - Component { - file: "private/qqmldelegatemodel_p.h" - name: "QQmlDelegateModelGroup" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQml.Models/DelegateModelGroup 2.1", - "QtQml.Models/DelegateModelGroup 6.0" - ] - exportMetaObjectRevisions: [513, 1536] - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 1 - } - Property { - name: "includeByDefault" - type: "bool" - read: "defaultInclude" - write: "setDefaultInclude" - notify: "defaultIncludeChanged" - index: 2 - } - Signal { name: "countChanged" } - Signal { name: "nameChanged" } - Signal { name: "defaultIncludeChanged" } - Signal { - name: "changed" - Parameter { name: "removed"; type: "QJSValue" } - Parameter { name: "inserted"; type: "QJSValue" } - } - Method { name: "insert"; isJavaScriptFunction: true } - Method { name: "create"; isJavaScriptFunction: true } - Method { name: "resolve"; isJavaScriptFunction: true } - Method { name: "remove"; isJavaScriptFunction: true } - Method { name: "addGroups"; isJavaScriptFunction: true } - Method { name: "removeGroups"; isJavaScriptFunction: true } - Method { name: "setGroups"; isJavaScriptFunction: true } - Method { name: "move"; isJavaScriptFunction: true } - Method { - name: "get" - type: "QJSValue" - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qqmlobjectmodel_p.h" - name: "QQmlInstanceModel" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - } - Signal { name: "countChanged" } - Signal { - name: "modelUpdated" - Parameter { name: "changeSet"; type: "QQmlChangeSet" } - Parameter { name: "reset"; type: "bool" } - } - Signal { - name: "createdItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "initItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "destroyingItem" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "itemPooled" - revision: 527 - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "itemReused" - revision: 527 - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qqmlinstantiator_p.h" - name: "QQmlInstantiator" - accessSemantics: "reference" - defaultProperty: "delegate" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.Models/Instantiator 2.1", - "QtQml.Models/Instantiator 6.0" - ] - exportMetaObjectRevisions: [513, 1536] - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "asynchronous" - type: "bool" - read: "isAsync" - write: "setAsync" - notify: "asynchronousChanged" - index: 1 - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 2 - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 3 - isReadonly: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 4 - } - Property { - name: "object" - type: "QObject" - isPointer: true - read: "object" - notify: "objectChanged" - index: 5 - isReadonly: true - } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "countChanged" } - Signal { name: "objectChanged" } - Signal { name: "activeChanged" } - Signal { name: "asynchronousChanged" } - Signal { - name: "objectAdded" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "objectRemoved" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "_q_createdItem" - Parameter { type: "int" } - Parameter { type: "QObject"; isPointer: true } - } - Method { - name: "_q_modelUpdated" - Parameter { type: "QQmlChangeSet" } - Parameter { type: "bool" } - } - Method { - name: "objectAt" - type: "QObject" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QItemSelectionRange" - accessSemantics: "value" - extension: "QQmlItemSelectionRangeValueType" - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QQmlItemSelectionRangeValueType" - accessSemantics: "value" - Property { name: "top"; type: "int"; read: "top"; index: 0; isReadonly: true; isFinal: true } - Property { name: "left"; type: "int"; read: "left"; index: 1; isReadonly: true; isFinal: true } - Property { name: "bottom"; type: "int"; read: "bottom"; index: 2; isReadonly: true; isFinal: true } - Property { name: "right"; type: "int"; read: "right"; index: 3; isReadonly: true; isFinal: true } - Property { name: "width"; type: "int"; read: "width"; index: 4; isReadonly: true; isFinal: true } - Property { name: "height"; type: "int"; read: "height"; index: 5; isReadonly: true; isFinal: true } - Property { - name: "topLeft" - type: "QPersistentModelIndex" - read: "topLeft" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "bottomRight" - type: "QPersistentModelIndex" - read: "bottomRight" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "parent" - type: "QModelIndex" - read: "parent" - index: 8 - isReadonly: true - isFinal: true - } - Property { name: "valid"; type: "bool"; read: "isValid"; index: 9; isReadonly: true; isFinal: true } - Property { name: "empty"; type: "bool"; read: "isEmpty"; index: 10; isReadonly: true; isFinal: true } - Property { - name: "model" - type: "QAbstractItemModel" - isPointer: true - read: "model" - index: 11 - isReadonly: true - isFinal: true - } - Method { name: "toString"; type: "QString" } - Method { - name: "contains" - type: "bool" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "parentIndex"; type: "QModelIndex" } - } - Method { - name: "intersects" - type: "bool" - Parameter { name: "other"; type: "QItemSelectionRange" } - } - Method { - name: "intersected" - type: "QItemSelectionRange" - Parameter { name: "other"; type: "QItemSelectionRange" } - } - } - Component { - file: "private/qqmllistmodel_p.h" - name: "QQmlListElement" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQml.Models/ListElement 2.0", - "QtQml.Models/ListElement 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qqmllistmodel_p.h" - name: "QQmlListModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - exports: [ - "QtQml.Models/ListModel 2.0", - "QtQml.Models/ListModel 2.14", - "QtQml.Models/ListModel 6.0", - "QtQml.Models/ListModel 6.4" - ] - hasCustomParser: true - exportMetaObjectRevisions: [512, 526, 1536, 1540] - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - } - Property { - name: "dynamicRoles" - type: "bool" - read: "dynamicRoles" - write: "setDynamicRoles" - index: 1 - } - Property { - name: "agent" - revision: 526 - type: "QObject" - isPointer: true - read: "agent" - index: 2 - isReadonly: true - isConstant: true - } - Signal { name: "countChanged" } - Method { name: "clear" } - Method { name: "remove"; isJavaScriptFunction: true } - Method { name: "append"; isJavaScriptFunction: true } - Method { name: "insert"; isJavaScriptFunction: true } - Method { - name: "get" - type: "QJSValue" - Parameter { name: "index"; type: "int" } - } - Method { - name: "set" - Parameter { name: "index"; type: "int" } - Parameter { name: "value"; type: "QJSValue" } - } - Method { - name: "setProperty" - Parameter { name: "index"; type: "int" } - Parameter { name: "property"; type: "QString" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "move" - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { name: "sync" } - } - Component { - file: "private/qqmllistmodelworkeragent_p.h" - name: "QQmlListModelWorkerAgent" - accessSemantics: "reference" - prototype: "QObject" - Property { name: "count"; type: "int"; read: "count"; index: 0; isReadonly: true; isFinal: true } - Property { - name: "engine" - type: "QV4::ExecutionEngine" - isPointer: true - read: "engine" - write: "setEngine" - notify: "engineChanged" - index: 1 - isFinal: true - } - Signal { - name: "engineChanged" - Parameter { name: "engine"; type: "QV4::ExecutionEngine"; isPointer: true } - } - Method { name: "addref" } - Method { name: "release" } - Method { name: "clear" } - Method { name: "remove"; isJavaScriptFunction: true } - Method { name: "append"; isJavaScriptFunction: true } - Method { name: "insert"; isJavaScriptFunction: true } - Method { - name: "get" - type: "QJSValue" - Parameter { name: "index"; type: "int" } - } - Method { - name: "set" - Parameter { name: "index"; type: "int" } - Parameter { name: "value"; type: "QJSValue" } - } - Method { - name: "setProperty" - Parameter { name: "index"; type: "int" } - Parameter { name: "property"; type: "QString" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "move" - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - Parameter { name: "count"; type: "int" } - } - Method { name: "sync" } - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QModelIndex" - accessSemantics: "value" - extension: "QQmlModelIndexValueType" - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QQmlModelIndexValueType" - accessSemantics: "value" - Property { - name: "row" - type: "int" - read: "row" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "column" - type: "int" - read: "column" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "parent" - type: "QModelIndex" - read: "parent" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "valid" - type: "bool" - read: "isValid" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "model" - type: "QAbstractItemModel" - isPointer: true - read: "model" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "internalId" - type: "qulonglong" - read: "internalId" - index: 5 - isReadonly: true - isFinal: true - isConstant: true - } - Method { name: "toString"; type: "QString" } - Method { - name: "data" - revision: 1543 - type: "QVariant" - Parameter { name: "role"; type: "int" } - } - Method { name: "data"; revision: 1543; type: "QVariant"; isCloned: true } - } - Component { - file: "private/qqmlobjectmodel_p.h" - name: "QQmlObjectModel" - accessSemantics: "reference" - defaultProperty: "children" - prototype: "QQmlInstanceModel" - exports: [ - "QtQml.Models/ObjectModel 2.1", - "QtQml.Models/ObjectModel 2.3", - "QtQml.Models/ObjectModel 2.15", - "QtQml.Models/ObjectModel 6.0" - ] - exportMetaObjectRevisions: [513, 515, 527, 1536] - attachedType: "QQmlObjectModelAttached" - Property { - name: "children" - type: "QObject" - isList: true - read: "children" - notify: "childrenChanged" - index: 0 - isReadonly: true - } - Signal { name: "childrenChanged" } - Method { name: "clear"; revision: 515 } - Method { - name: "get" - revision: 515 - type: "QObject" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "append" - revision: 515 - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "insert" - revision: 515 - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "move" - revision: 515 - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - Parameter { name: "n"; type: "int" } - } - Method { - name: "move" - revision: 515 - isCloned: true - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - } - Method { - name: "remove" - revision: 515 - Parameter { name: "index"; type: "int" } - Parameter { name: "n"; type: "int" } - } - Method { - name: "remove" - revision: 515 - isCloned: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qqmlobjectmodel_p.h" - name: "QQmlObjectModelAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QPersistentModelIndex" - accessSemantics: "value" - extension: "QQmlPersistentModelIndexValueType" - } - Component { - file: "private/qqmlmodelindexvaluetype_p.h" - name: "QQmlPersistentModelIndexValueType" - accessSemantics: "value" - Property { name: "row"; type: "int"; read: "row"; index: 0; isReadonly: true; isFinal: true } - Property { name: "column"; type: "int"; read: "column"; index: 1; isReadonly: true; isFinal: true } - Property { - name: "parent" - type: "QModelIndex" - read: "parent" - index: 2 - isReadonly: true - isFinal: true - } - Property { name: "valid"; type: "bool"; read: "isValid"; index: 3; isReadonly: true; isFinal: true } - Property { - name: "model" - type: "QAbstractItemModel" - isPointer: true - read: "model" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "internalId" - type: "qulonglong" - read: "internalId" - index: 5 - isReadonly: true - isFinal: true - } - Method { name: "toString"; type: "QString" } - Method { - name: "data" - revision: 1543 - type: "QVariant" - Parameter { name: "role"; type: "int" } - } - Method { name: "data"; revision: 1543; type: "QVariant"; isCloned: true } - } - Component { - file: "private/qquickpackage_p.h" - name: "QQuickPackage" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QObject" - exports: ["QtQml.Models/Package 2.0", "QtQml.Models/Package 6.0"] - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickPackageAttached" - Property { name: "data"; type: "QObject"; isList: true; read: "data"; index: 0; isReadonly: true } - } - Component { - file: "private/qquickpackage_p.h" - name: "QQuickPackageAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { name: "name"; type: "QString"; read: "name"; write: "setName"; index: 0; isFinal: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/qmldir deleted file mode 100644 index 60eac9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/Models/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQml.Models -linktarget Qt6::modelsplugin -optional plugin modelsplugin -classname QtQmlModelsPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQml.Base auto -prefer :/qt-project.org/imports/QtQml/Models/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/libworkerscriptplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/libworkerscriptplugin.so deleted file mode 100755 index dcf7720..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/libworkerscriptplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/plugins.qmltypes deleted file mode 100644 index 1fd39ca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/plugins.qmltypes +++ /dev/null @@ -1,46 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickworkerscript_p.h" - name: "QQuickWorkerScript" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.WorkerScript/WorkerScript 2.0", - "QtQml.WorkerScript/WorkerScript 2.15", - "QtQml.WorkerScript/WorkerScript 6.0" - ] - exportMetaObjectRevisions: [512, 527, 1536] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "ready" - revision: 527 - type: "bool" - read: "ready" - notify: "readyChanged" - index: 1 - isReadonly: true - } - Signal { name: "sourceChanged" } - Signal { name: "readyChanged"; revision: 527 } - Signal { - name: "message" - Parameter { name: "messageObject"; type: "QJSValue" } - } - Method { name: "sendMessage"; isJavaScriptFunction: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/qmldir deleted file mode 100644 index a4de5f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/WorkerScript/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQml.WorkerScript -linktarget Qt6::workerscriptplugin -optional plugin workerscriptplugin -classname QtQmlWorkerScriptPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQml.Base auto -prefer :/qt-project.org/imports/QtQml/WorkerScript/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/libqmlxmllistmodelplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/libqmlxmllistmodelplugin.so deleted file mode 100755 index 194c85d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/libqmlxmllistmodelplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/plugins.qmltypes deleted file mode 100644 index 1e07fd3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/plugins.qmltypes +++ /dev/null @@ -1,138 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qqmlxmllistmodel_p.h" - name: "QQmlXmlListModel" - accessSemantics: "reference" - defaultProperty: "roles" - prototype: "QAbstractListModel" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQml.XmlListModel/XmlListModel 6.0", - "QtQml.XmlListModel/XmlListModel 6.4" - ] - exportMetaObjectRevisions: [1536, 1540] - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 0 - isReadonly: true - } - Property { - name: "progress" - type: "double" - read: "progress" - notify: "progressChanged" - index: 1 - isReadonly: true - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 2 - } - Property { - name: "query" - type: "QString" - read: "query" - write: "setQuery" - notify: "queryChanged" - index: 3 - } - Property { - name: "roles" - type: "QQmlXmlListModelRole" - isList: true - read: "roleObjects" - index: 4 - isReadonly: true - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 5 - isReadonly: true - } - Signal { - name: "statusChanged" - Parameter { type: "QQmlXmlListModel::Status" } - } - Signal { - name: "progressChanged" - Parameter { name: "progress"; type: "double" } - } - Signal { name: "countChanged" } - Signal { name: "sourceChanged" } - Signal { name: "queryChanged" } - Method { name: "reload" } - Method { name: "requestFinished" } - Method { - name: "requestProgress" - Parameter { type: "qlonglong" } - Parameter { type: "qlonglong" } - } - Method { name: "dataCleared" } - Method { - name: "queryCompleted" - Parameter { type: "QQmlXmlListModelQueryResult" } - } - Method { - name: "queryError" - Parameter { name: "object"; type: "void"; isPointer: true } - Parameter { name: "error"; type: "QString" } - } - Method { name: "errorString"; type: "QString" } - } - Component { - file: "private/qqmlxmllistmodel_p.h" - name: "QQmlXmlListModelRole" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQml.XmlListModel/XmlListModelRole 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 0 - } - Property { - name: "elementName" - type: "QString" - read: "elementName" - write: "setElementName" - notify: "elementNameChanged" - index: 1 - } - Property { - name: "attributeName" - type: "QString" - read: "attributeName" - write: "setAttributeName" - notify: "attributeNameChanged" - index: 2 - } - Signal { name: "nameChanged" } - Signal { name: "elementNameChanged" } - Signal { name: "attributeNameChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/qmldir deleted file mode 100644 index f04f990..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/XmlListModel/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQml.XmlListModel -linktarget Qt6::qmlxmllistmodelplugin -optional plugin qmlxmllistmodelplugin -classname QtQmlXmlListModelPlugin -typeinfo plugins.qmltypes -depends QtQml auto -prefer :/qt-project.org/imports/QtQml/XmlListModel/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/libqmlmetaplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/libqmlmetaplugin.so deleted file mode 100755 index 5109a67..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/libqmlmetaplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/qmldir deleted file mode 100644 index ae6977b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQml/qmldir +++ /dev/null @@ -1,10 +0,0 @@ -module QtQml -linktarget Qt6::QmlMeta -optional plugin qmlmetaplugin -classname QtQmlMetaPlugin -designersupported -import QtQml.Base auto -import QtQml.Models auto -import QtQml.WorkerScript auto -prefer :/qt-project.org/imports/QtQml/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/AbstractButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/AbstractButton.qml deleted file mode 100644 index 82105f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/AbstractButton.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.AbstractButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Action.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Action.qml deleted file mode 100644 index aa360f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Action.qml +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.Action { } diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ActionGroup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ActionGroup.qml deleted file mode 100644 index 8ab1495..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ActionGroup.qml +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.ActionGroup { } diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ApplicationWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ApplicationWindow.qml deleted file mode 100644 index d64a87c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ApplicationWindow.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ApplicationWindow { - id: window - - color: window.palette.window -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/BusyIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/BusyIndicator.qml deleted file mode 100644 index 2276f5a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/BusyIndicator.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Basic.impl -import QtQuick.Templates as T - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: 48 - implicitHeight: 48 - - pen: control.palette.dark - fill: control.palette.dark - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Button.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Button.qml deleted file mode 100644 index cc02c2d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Button.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - horizontalPadding: padding + 2 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: !control.flat || control.down || control.checked || control.highlighted - color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, - control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ButtonGroup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ButtonGroup.qml deleted file mode 100644 index 9c615a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ButtonGroup.qml +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.ButtonGroup { } diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Calendar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Calendar.qml deleted file mode 100644 index 66d03af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Calendar.qml +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma Singleton - -import QtQuick.Templates as T - -T.Calendar {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CalendarModel.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CalendarModel.qml deleted file mode 100644 index 0f18f62..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CalendarModel.qml +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick.Templates as T - -T.CalendarModel {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckBox.qml deleted file mode 100644 index 3d71008..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckBox.qml +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - // keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - defaultColor: "#353637" - color: control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - visible: control.checkState === Qt.Checked - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 16 - height: 3 - color: control.palette.text - visible: control.checkState === Qt.PartiallyChecked - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckDelegate.qml deleted file mode 100644 index 59e1543..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckDelegate.qml +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - // keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - defaultColor: "#353637" - color: control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - visible: control.checkState === Qt.Checked - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 16 - height: 3 - color: control.palette.text - visible: control.checkState === Qt.PartiallyChecked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ComboBox.qml deleted file mode 100644 index 91774af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ComboBox.qml +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - delegate: ItemDelegate { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - palette.text: control.palette.text - palette.highlightedText: control.palette.highlightedText - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.palette.dark - defaultColor: "#353637" - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/double-arrow.png" - opacity: enabled ? 1 : 0.3 - } - - contentItem: T.TextField { - leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 - rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 - topPadding: 6 - control.padding - bottomPadding: 6 - control.padding - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - background: Rectangle { - visible: control.enabled && control.editable && !control.flat - border.width: parent && parent.activeFocus ? 2 : 1 - border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button - color: control.palette.base - } - } - - background: Rectangle { - implicitWidth: 140 - implicitHeight: 40 - - color: control.down ? control.palette.mid : control.palette.button - border.color: control.palette.highlight - border.width: !control.editable && control.visualFocus ? 2 : 0 - visible: !control.flat || control.down - } - - popup: T.Popup { - y: control.height - width: control.width - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - palette: control.palette - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - Rectangle { - z: 10 - width: parent.width - height: parent.height - color: "transparent" - border.color: control.palette.mid - } - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.palette.window - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Container.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Container.qml deleted file mode 100644 index 28e5027..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Container.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.Container { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Control.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Control.qml deleted file mode 100644 index 20b2713..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Control.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.Control { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DayOfWeekRow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DayOfWeekRow.qml deleted file mode 100644 index 0de6426..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DayOfWeekRow.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.AbstractDayOfWeekRow { - id: control - - implicitWidth: Math.max(background ? background.implicitWidth : 0, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(background ? background.implicitHeight : 0, - contentItem.implicitHeight + topPadding + bottomPadding) - - spacing: 6 - topPadding: 6 - bottomPadding: 6 - font.bold: true - - //! [delegate] - delegate: Text { - text: shortName - font: control.font - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property string shortName - } - //! [delegate] - - //! [contentItem] - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.source - delegate: control.delegate - } - } - //! [contentItem] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DelayButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DelayButton.qml deleted file mode 100644 index 1be4450..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DelayButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - horizontalPadding: padding + 2 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: ItemGroup { - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding + control.progress * control.width - clipWidth: (1.0 - control.progress) * control.width - visible: control.progress < 1 - - text: control.text - font: control.font - opacity: enabled ? 1 : 0.3 - color: control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding - clipWidth: control.progress * control.width - visible: control.progress > 0 - - text: control.text - font: control.font - opacity: enabled ? 1 : 0.3 - color: control.palette.brightText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - - PaddedRectangle { - padding: control.visualFocus ? 2 : 0 - width: control.progress * parent.width - height: parent.height - color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dial.qml deleted file mode 100644 index 6076f7b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dial.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Basic.impl -import QtQuick.Templates as T - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: DialImpl { - implicitWidth: 184 - implicitHeight: 184 - color: control.visualFocus ? control.palette.highlight : control.palette.dark - progress: control.position - opacity: control.enabled ? 1 : 0.3 - startAngle: control.startAngle - endAngle: control.endAngle - } - - handle: ColorImage { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - width: 14 - height: 10 - defaultColor: "#353637" - color: control.visualFocus ? control.palette.highlight : control.palette.dark - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/dial-indicator.png" - antialiasing: true - opacity: control.enabled ? 1 : 0.3 - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.4 - + (control.handle ? control.handle.height / 2 : 0) - }, - Rotation { - angle: control.angle - origin.x: control.handle ? control.handle.width / 2 : 0 - origin.y: control.handle ? control.handle.height / 2 : 0 - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dialog.qml deleted file mode 100644 index c4c59b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dialog.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 12 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.dark - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 12 - background: Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 1 - color: control.palette.window - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DialogButtonBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DialogButtonBox.qml deleted file mode 100644 index dddbf14..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/DialogButtonBox.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - contentWidth: (contentItem as ListView)?.contentWidth - - spacing: 1 - padding: 12 - alignment: count === 1 ? Qt.AlignRight : undefined - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - } - - contentItem: ListView { - implicitWidth: contentWidth - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 40 - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Drawer.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Drawer.qml deleted file mode 100644 index c69d319..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Drawer.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.palette.window - Rectangle { - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - width: horizontal ? 1 : parent.width - height: horizontal ? parent.height : 1 - color: control.palette.dark - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Frame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Frame.qml deleted file mode 100644 index d1ecc4b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Frame.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: "transparent" - border.color: control.palette.mid - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/GroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/GroupBox.qml deleted file mode 100644 index 510acf1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/GroupBox.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 12 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - color: "transparent" - border.color: control.palette.mid - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/HorizontalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/HorizontalHeaderView.qml deleted file mode 100644 index 9f571a8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/HorizontalHeaderView.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - // The contentHeight of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit height of - // HorizontalHeaderView should be the same as the content height in the end, we - // need to ensure that it has at least a height of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitHeight: Math.max(1, contentHeight) - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ItemDelegate.qml deleted file mode 100644 index 7bef49d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ItemDelegate.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 8 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? control.palette.highlightedText : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted || control.visualFocus - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.visualFocus ? 0.15 : 0.0) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Label.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Label.qml deleted file mode 100644 index e327414..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Label.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Label { - id: control - - color: control.palette.windowText - linkColor: control.palette.link -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Menu.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Menu.qml deleted file mode 100644 index 8e08000..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Menu.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - overlap: 1 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > control.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: control.palette.window - border.color: control.palette.dark - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBar.qml deleted file mode 100644 index c0d4bda..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBar.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.palette.button - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBarItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBarItem.qml deleted file mode 100644 index 9362d26..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBarItem.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 6 - leftPadding: 12 - rightPadding: 16 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: control.down || control.highlighted ? control.palette.mid : "transparent" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuItem.qml deleted file mode 100644 index ad50eac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuItem.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.windowText - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.windowText - } - - indicator: ColorImage { - x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checked - source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" : "" - color: control.palette.windowText - defaultColor: "#353637" - } - - arrow: ColorImage { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" : "" - color: control.palette.windowText - defaultColor: "#353637" - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - x: 1 - y: 1 - width: control.width - 2 - height: control.height - 2 - color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuSeparator.qml deleted file mode 100644 index ff7e79e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuSeparator.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - verticalPadding: padding + 4 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: control.palette.mid - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MonthGrid.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MonthGrid.qml deleted file mode 100644 index b8d2379..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/MonthGrid.qml +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.AbstractMonthGrid { - id: control - - implicitWidth: Math.max(background ? background.implicitWidth : 0, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(background ? background.implicitHeight : 0, - contentItem.implicitHeight + topPadding + bottomPadding) - - spacing: 6 - - //! [delegate] - delegate: Text { - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - opacity: model.month === control.month ? 1 : 0 - text: model.day - font: control.font - - required property var model - } - //! [delegate] - - //! [contentItem] - contentItem: Grid { - rows: 6 - columns: 7 - rowSpacing: control.spacing - columnSpacing: control.spacing - - Repeater { - model: control.source - delegate: control.delegate - } - } - //! [contentItem] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Page.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Page.qml deleted file mode 100644 index b6d503e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Page.qml +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/PageIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/PageIndicator.qml deleted file mode 100644 index e858695..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/PageIndicator.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - delegate: Rectangle { - implicitWidth: 8 - implicitHeight: 8 - - radius: width / 2 - color: control.palette.dark - - opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45 - - required property int index - - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Pane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Pane.qml deleted file mode 100644 index 46e15e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Pane.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Popup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Popup.qml deleted file mode 100644 index f4b787c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Popup.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.dark - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ProgressBar.qml deleted file mode 100644 index 09ab1fb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ProgressBar.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Basic.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 6 - implicitWidth: 116 - scale: control.mirrored ? -1 : 1 - progress: control.position - indeterminate: control.visible && control.indeterminate - color: control.palette.dark - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 6 - y: (control.height - height) / 2 - height: 6 - - color: control.palette.midlight - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioButton.qml deleted file mode 100644 index 7b3f406..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioButton.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - // keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: width / 2 - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 20 - height: 20 - radius: width / 2 - color: control.palette.text - visible: control.checked - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioDelegate.qml deleted file mode 100644 index 87e6e66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioDelegate.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - // keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: width / 2 - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 20 - height: 20 - radius: width / 2 - color: control.palette.text - visible: control.checked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RangeSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RangeSlider.qml deleted file mode 100644 index 155807d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RangeSlider.qml +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - first.handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - border.width: activeFocus ? 2 : 1 - border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - color: control.first.pressed ? control.palette.light : control.palette.window - } - - second.handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - border.width: activeFocus ? 2 : 1 - border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - color: control.second.pressed ? control.palette.light : control.palette.window - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 6 - implicitHeight: control.horizontal ? 6 : 200 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - radius: 3 - color: control.palette.midlight - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? control.first.position * parent.width + 3 : 0 - y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3 - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6 - height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6 - - color: control.palette.dark - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RoundButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RoundButton.qml deleted file mode 100644 index 7e7bd03..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/RoundButton.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - radius: control.radius - opacity: enabled ? 1 : 0.3 - visible: !control.flat || control.down || control.checked || control.highlighted - color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, - control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollBar.qml deleted file mode 100644 index 8927a4f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollBar.qml +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation === Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 6 : 2 - implicitHeight: control.interactive ? 6 : 2 - - radius: width / 2 - color: control.pressed ? control.palette.dark : control.palette.mid - opacity: 0.0 - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - PropertyChanges { control.contentItem.opacity: 0.75 } - } - - transitions: Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 450 } - NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollIndicator.qml deleted file mode 100644 index 8b1ca93..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollIndicator.qml +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 2 - implicitHeight: 2 - - color: control.palette.mid - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { control.contentItem.opacity: 0.75 } - } - - transitions: [ - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 450 } - NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } - } - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollView.qml deleted file mode 100644 index aab91a3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollView.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SelectionRectangle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SelectionRectangle.qml deleted file mode 100644 index 8e16d10..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SelectionRectangle.qml +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Shapes -import QtQuick.Templates as T - -T.SelectionRectangle { - id: control - - topLeftHandle: Handle {} - bottomRightHandle: Handle {} - - component Handle : Rectangle { - id: handle - width: 28 - height: width - radius: width / 2 - color: SelectionRectangle.dragging ? control.palette.light : control.palette.window - border.width: 1 - border.color: control.enabled ? control.palette.mid : control.palette.midlight - visible: SelectionRectangle.control.active - - property Item control: SelectionRectangle.control - } - -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Slider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Slider.qml deleted file mode 100644 index 7ca8e02..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Slider.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - color: control.pressed ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 6 - implicitHeight: control.horizontal ? 6 : 200 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - radius: 3 - color: control.palette.midlight - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - y: control.horizontal ? 0 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 6 - height: control.horizontal ? 6 : control.position * parent.height - - radius: 3 - color: control.palette.dark - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SpinBox.qml deleted file mode 100644 index cf4315e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SpinBox.qml +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.SpinBox { - id: control - - // Note: the width of the indicators are calculated into the padding - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - up.implicitIndicatorHeight, down.implicitIndicatorHeight) - - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - clip: width < implicitWidth - padding: 6 - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - - Rectangle { - width: parent.width - height: parent.height - visible: control.activeFocus - color: "transparent" - border.color: control.palette.highlight - border.width: 2 - } - } - - up.indicator: Rectangle { - x: control.mirrored ? 0 : control.width - width - height: control.height - implicitWidth: 40 - implicitHeight: 40 - color: control.up.pressed ? control.palette.mid : control.palette.button - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.palette.buttonText : control.palette.mid - } - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 2 - height: parent.width / 3 - color: enabled ? control.palette.buttonText : control.palette.mid - } - } - - down.indicator: Rectangle { - x: control.mirrored ? parent.width - width : 0 - height: control.height - implicitWidth: 40 - implicitHeight: 40 - color: control.down.pressed ? control.palette.mid : control.palette.button - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.palette.buttonText : control.palette.mid - } - } - - background: Rectangle { - implicitWidth: 140 - color: enabled ? control.palette.base : control.palette.button - border.color: control.palette.button - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SplitView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SplitView.qml deleted file mode 100644 index 6d673b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SplitView.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.palette.mid - : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/StackView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/StackView.qml deleted file mode 100644 index 689d7ff..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/StackView.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.StackView { - id: control - - popEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - popExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } - } - - pushEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - pushExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - replaceEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - replaceExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeDelegate.qml deleted file mode 100644 index 552f34d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeDelegate.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.visualFocus ? 0.15 : 0.0) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeView.qml deleted file mode 100644 index b0068fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeView.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Switch.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Switch.qml deleted file mode 100644 index d299ea3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Switch.qml +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: PaddedRectangle { - implicitWidth: 56 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: 8 - leftPadding: 0 - rightPadding: 0 - padding: (height - 16) / 2 - color: control.checked ? control.palette.dark : control.palette.midlight - - Rectangle { - x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 28 - height: 28 - radius: 16 - color: control.down ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwitchDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwitchDelegate.qml deleted file mode 100644 index 9839255..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwitchDelegate.qml +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: PaddedRectangle { - implicitWidth: 56 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: 8 - leftPadding: 0 - rightPadding: 0 - padding: (height - 16) / 2 - color: control.checked ? control.palette.dark : control.palette.midlight - - Rectangle { - x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 28 - height: 28 - radius: 16 - color: control.down ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabBar.qml deleted file mode 100644 index f8bdb91..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabBar.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 40 - preferredHighlightEnd: width - 40 - } - - background: Rectangle { - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabButton.qml deleted file mode 100644 index 071048d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabButton.qml +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: checked ? control.palette.windowText : control.palette.brightText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked ? control.palette.windowText : control.palette.brightText - } - - background: Rectangle { - implicitHeight: 40 - color: Color.blend(control.checked ? control.palette.window : control.palette.dark, - control.palette.mid, control.down ? 0.5 : 0.0) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextArea.qml deleted file mode 100644 index 0dc7c45..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextArea.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - placeholderTextColor: control.palette.placeholderText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextField.qml deleted file mode 100644 index cf542a6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextField.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - border.width: control.activeFocus ? 2 : 1 - color: control.palette.base - border.color: control.activeFocus ? control.palette.highlight : control.palette.mid - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolBar.qml deleted file mode 100644 index 6ef70bc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolBar.qml +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitHeight: 40 - color: control.palette.button - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolButton.qml deleted file mode 100644 index e4bc90d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.visualFocus ? control.palette.highlight : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - - opacity: control.down ? 1.0 : 0.5 - color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolSeparator.qml deleted file mode 100644 index 2d2cefc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolSeparator.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: vertical ? 6 : 2 - verticalPadding: vertical ? 2 : 6 - - contentItem: Rectangle { - implicitWidth: control.vertical ? 1 : 30 - implicitHeight: control.vertical ? 30 : 1 - color: control.palette.mid - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolTip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolTip.qml deleted file mode 100644 index 6d71f55..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolTip.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 3 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 6 - padding: 6 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: Rectangle { - border.color: control.palette.dark - color: control.palette.toolTipBase - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TreeViewDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TreeViewDelegate.qml deleted file mode 100644 index f1cf265..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/TreeViewDelegate.qml +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TreeViewDelegate { - id: control - - implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin - implicitHeight: Math.max(indicator ? indicator.height : 0, implicitContentHeight) * 1.25 - - indentation: indicator ? indicator.width : 12 - leftMargin: 4 - rightMargin: 4 - spacing: 4 - - topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0 - leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth - - highlighted: control.selected || control.current - || ((control.treeView.selectionBehavior === TableView.SelectRows - || control.treeView.selectionBehavior === TableView.SelectionDisabled) - && control.row === control.treeView.currentRow) - - required property int row - required property var model - readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0) - - indicator: Item { - // Create an area that is big enough for the user to - // click on, since the image is a bit small. - readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation) - x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width - y: (control.height - height) / 2 - implicitWidth: 20 - implicitHeight: 40 // same as Button.qml - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0) - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" - color: control.palette.windowText - defaultColor: "#353637" - } - } - - background: Rectangle { - implicitHeight: 40 // same as Button.qml - color: control.highlighted - ? control.palette.highlight - : (control.treeView.alternatingRows && control.row % 2 !== 0 - ? control.palette.alternateBase : control.palette.base) - } - - contentItem: Label { - clip: false - text: control.model.display - elide: Text.ElideRight - color: control.highlighted ? control.palette.highlightedText : control.palette.buttonText - visible: !control.editing - } - - // The edit delegate is a separate component, and doesn't need - // to follow the same strict rules that are applied to a control. - // qmllint disable attached-property-reuse - // qmllint disable controls-attached-property-reuse - // qmllint disable controls-sanity - TableView.editDelegate: FocusScope { - width: parent.width - height: parent.height - - readonly property int __role: { - let model = control.treeView.model - let index = control.treeView.index(row, column) - let editText = model.data(index, Qt.EditRole) - return editText !== undefined ? Qt.EditRole : Qt.DisplayRole - } - - TextField { - id: textField - x: control.contentItem.x - y: (parent.height - height) / 2 - width: control.contentItem.width - text: control.treeView.model.data(control.treeView.index(row, column), __role) - focus: true - } - - TableView.onCommit: { - let index = TableView.view.index(row, column) - TableView.view.model.setData(index, textField.text, __role) - } - - Component.onCompleted: textField.selectAll() - } - // qmllint enable attached-property-reuse - // qmllint enable controls-attached-property-reuse - // qmllint enable controls-sanity -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Tumbler.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Tumbler.qml deleted file mode 100644 index 4bd5c5f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/Tumbler.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - readonly property real __delegateHeight: availableHeight / visibleItemCount - - delegate: Text { - text: modelData - color: control.visualFocus ? control.palette.highlight : control.palette.text - font: control.font - opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - // We use required property here to satisfy qmllint, but that means - // we also need to declare the index for the attached properties - // (see QQuickTumblerAttachedPrivate::init). - required property var modelData - required property int index - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.__delegateHeight / 2 - - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/VerticalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/VerticalHeaderView.qml deleted file mode 100644 index 52a9bcb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/VerticalHeaderView.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T - -T.VerticalHeaderView { - id: control - - // The contentWidth of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit width of - // VerticalHeaderView should be the same as the content width in the end, we - // need to ensure that it has at least a width of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitWidth: Math.max(1, contentWidth) - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/WeekNumberColumn.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/WeekNumberColumn.qml deleted file mode 100644 index e5ce90b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/WeekNumberColumn.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -T.AbstractWeekNumberColumn { - id: control - - implicitWidth: Math.max(background ? background.implicitWidth : 0, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(background ? background.implicitHeight : 0, - contentItem.implicitHeight + topPadding + bottomPadding) - - spacing: 6 - leftPadding: 6 - rightPadding: 6 - font.bold: true - - //! [delegate] - delegate: Text { - text: weekNumber - font: control.font - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property int weekNumber - } - //! [delegate] - - //! [contentItem] - contentItem: Column { - spacing: control.spacing - Repeater { - model: control.source - delegate: control.delegate - } - } - //! [contentItem] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/libqtquickcontrols2basicstyleimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/libqtquickcontrols2basicstyleimplplugin.so deleted file mode 100755 index 24ae39c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/libqtquickcontrols2basicstyleimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/plugins.qmltypes deleted file mode 100644 index f43c37b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/plugins.qmltypes +++ /dev/null @@ -1,109 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickbasicbusyindicator_p.h" - name: "QQuickBasicBusyIndicator" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.0", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.1", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.4", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.7", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.11", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.0", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.3", - "QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { name: "pen"; type: "QColor"; read: "pen"; write: "setPen"; index: 0; isFinal: true } - Property { name: "fill"; type: "QColor"; read: "fill"; write: "setFill"; index: 1; isFinal: true } - Property { name: "running"; type: "bool"; read: "isRunning"; write: "setRunning"; index: 2 } - } - Component { - file: "private/qquickbasicdial_p.h" - name: "QQuickBasicDial" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Basic.impl/DialImpl 2.0", - "QtQuick.Controls.Basic.impl/DialImpl 2.1", - "QtQuick.Controls.Basic.impl/DialImpl 2.4", - "QtQuick.Controls.Basic.impl/DialImpl 2.7", - "QtQuick.Controls.Basic.impl/DialImpl 2.11", - "QtQuick.Controls.Basic.impl/DialImpl 6.0", - "QtQuick.Controls.Basic.impl/DialImpl 6.3", - "QtQuick.Controls.Basic.impl/DialImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - index: 0 - isFinal: true - } - Property { - name: "startAngle" - type: "double" - read: "startAngle" - write: "setStartAngle" - index: 1 - isFinal: true - } - Property { - name: "endAngle" - type: "double" - read: "endAngle" - write: "setEndAngle" - index: 2 - isFinal: true - } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 3; isFinal: true } - } - Component { - file: "private/qquickbasicprogressbar_p.h" - name: "QQuickBasicProgressBar" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Basic.impl/ProgressBarImpl 2.0", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 2.1", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 2.4", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 2.7", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 2.11", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 6.0", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 6.3", - "QtQuick.Controls.Basic.impl/ProgressBarImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "indeterminate" - type: "bool" - read: "isIndeterminate" - write: "setIndeterminate" - index: 0 - isFinal: true - } - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - index: 1 - isFinal: true - } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 2; isFinal: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/qmldir deleted file mode 100644 index 97b3db6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Controls.Basic.impl -linktarget Qt6::qtquickcontrols2basicstyleimplplugin -optional plugin qtquickcontrols2basicstyleimplplugin -classname QtQuickControls2BasicStyleImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Basic/impl/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.so deleted file mode 100755 index 84f9ee2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/plugins.qmltypes deleted file mode 100644 index 9eca16a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/plugins.qmltypes +++ /dev/null @@ -1,382 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickbasicstyle_p.h" - name: "QQuickBasicStyle" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Controls.Basic/Basic 2.1", - "QtQuick.Controls.Basic/Basic 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [513, 1536] - Property { - name: "backgroundColor" - type: "QColor" - read: "backgroundColor" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "overlayModalColor" - type: "QColor" - read: "overlayModalColor" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "overlayDimColor" - type: "QColor" - read: "overlayDimColor" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textColor" - type: "QColor" - read: "textColor" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textDarkColor" - type: "QColor" - read: "textDarkColor" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textLightColor" - type: "QColor" - read: "textLightColor" - index: 5 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textLinkColor" - type: "QColor" - read: "textLinkColor" - index: 6 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textSelectionColor" - type: "QColor" - read: "textSelectionColor" - index: 7 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textDisabledColor" - type: "QColor" - read: "textDisabledColor" - index: 8 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textDisabledLightColor" - type: "QColor" - read: "textDisabledLightColor" - index: 9 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textPlaceholderColor" - type: "QColor" - read: "textPlaceholderColor" - index: 10 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "focusColor" - type: "QColor" - read: "focusColor" - index: 11 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "focusLightColor" - type: "QColor" - read: "focusLightColor" - index: 12 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "focusPressedColor" - type: "QColor" - read: "focusPressedColor" - index: 13 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonColor" - type: "QColor" - read: "buttonColor" - index: 14 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonPressedColor" - type: "QColor" - read: "buttonPressedColor" - index: 15 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonCheckedColor" - type: "QColor" - read: "buttonCheckedColor" - index: 16 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonCheckedPressedColor" - type: "QColor" - read: "buttonCheckedPressedColor" - index: 17 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonCheckedFocusColor" - type: "QColor" - read: "buttonCheckedFocusColor" - index: 18 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "toolButtonColor" - type: "QColor" - read: "toolButtonColor" - index: 19 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "tabButtonColor" - type: "QColor" - read: "tabButtonColor" - index: 20 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "tabButtonPressedColor" - type: "QColor" - read: "tabButtonPressedColor" - index: 21 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "tabButtonCheckedPressedColor" - type: "QColor" - read: "tabButtonCheckedPressedColor" - index: 22 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "delegateColor" - type: "QColor" - read: "delegateColor" - index: 23 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "delegatePressedColor" - type: "QColor" - read: "delegatePressedColor" - index: 24 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "delegateFocusColor" - type: "QColor" - read: "delegateFocusColor" - index: 25 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "indicatorPressedColor" - type: "QColor" - read: "indicatorPressedColor" - index: 26 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "indicatorDisabledColor" - type: "QColor" - read: "indicatorDisabledColor" - index: 27 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "indicatorFrameColor" - type: "QColor" - read: "indicatorFrameColor" - index: 28 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "indicatorFramePressedColor" - type: "QColor" - read: "indicatorFramePressedColor" - index: 29 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "indicatorFrameDisabledColor" - type: "QColor" - read: "indicatorFrameDisabledColor" - index: 30 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "frameDarkColor" - type: "QColor" - read: "frameDarkColor" - index: 31 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "frameLightColor" - type: "QColor" - read: "frameLightColor" - index: 32 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "scrollBarColor" - type: "QColor" - read: "scrollBarColor" - index: 33 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "scrollBarPressedColor" - type: "QColor" - read: "scrollBarPressedColor" - index: 34 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "progressBarColor" - type: "QColor" - read: "progressBarColor" - index: 35 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "pageIndicatorColor" - type: "QColor" - read: "pageIndicatorColor" - index: 36 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "separatorColor" - type: "QColor" - read: "separatorColor" - index: 37 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "disabledDarkColor" - type: "QColor" - read: "disabledDarkColor" - index: 38 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "disabledLightColor" - type: "QColor" - read: "disabledLightColor" - index: 39 - isReadonly: true - isFinal: true - isConstant: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/qmldir deleted file mode 100644 index 8460bd3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Basic/qmldir +++ /dev/null @@ -1,131 +0,0 @@ -module QtQuick.Controls.Basic -linktarget Qt6::qtquickcontrols2basicstyleplugin -plugin qtquickcontrols2basicstyleplugin -classname QtQuickControls2BasicStylePlugin -typeinfo plugins.qmltypes -import QtQuick.Controls.impl auto -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Basic/ -AbstractButton 6.0 AbstractButton.qml -AbstractButton 2.0 AbstractButton.qml -Action 2.3 Action.qml -Action 6.0 Action.qml -ActionGroup 2.3 ActionGroup.qml -ActionGroup 6.0 ActionGroup.qml -ApplicationWindow 6.0 ApplicationWindow.qml -ApplicationWindow 2.0 ApplicationWindow.qml -BusyIndicator 6.0 BusyIndicator.qml -BusyIndicator 2.0 BusyIndicator.qml -Button 6.0 Button.qml -Button 2.0 Button.qml -ButtonGroup 6.0 ButtonGroup.qml -ButtonGroup 2.0 ButtonGroup.qml -CheckBox 6.0 CheckBox.qml -CheckBox 2.0 CheckBox.qml -CheckDelegate 6.0 CheckDelegate.qml -CheckDelegate 2.0 CheckDelegate.qml -ComboBox 6.0 ComboBox.qml -ComboBox 2.0 ComboBox.qml -Container 6.0 Container.qml -Container 2.0 Container.qml -Control 6.0 Control.qml -Control 2.0 Control.qml -DelayButton 2.2 DelayButton.qml -DelayButton 6.0 DelayButton.qml -Dial 6.0 Dial.qml -Dial 2.0 Dial.qml -Dialog 2.1 Dialog.qml -Dialog 6.0 Dialog.qml -DialogButtonBox 2.1 DialogButtonBox.qml -DialogButtonBox 6.0 DialogButtonBox.qml -Drawer 6.0 Drawer.qml -Drawer 2.0 Drawer.qml -Frame 6.0 Frame.qml -Frame 2.0 Frame.qml -GroupBox 6.0 GroupBox.qml -GroupBox 2.0 GroupBox.qml -HorizontalHeaderView 2.15 HorizontalHeaderView.qml -HorizontalHeaderView 6.0 HorizontalHeaderView.qml -ItemDelegate 6.0 ItemDelegate.qml -ItemDelegate 2.0 ItemDelegate.qml -Label 6.0 Label.qml -Label 2.0 Label.qml -Menu 6.0 Menu.qml -Menu 2.0 Menu.qml -MenuBar 2.3 MenuBar.qml -MenuBar 6.0 MenuBar.qml -MenuBarItem 2.3 MenuBarItem.qml -MenuBarItem 6.0 MenuBarItem.qml -MenuItem 6.0 MenuItem.qml -MenuItem 2.0 MenuItem.qml -MenuSeparator 2.1 MenuSeparator.qml -MenuSeparator 6.0 MenuSeparator.qml -Page 6.0 Page.qml -Page 2.0 Page.qml -PageIndicator 6.0 PageIndicator.qml -PageIndicator 2.0 PageIndicator.qml -Pane 6.0 Pane.qml -Pane 2.0 Pane.qml -Popup 6.0 Popup.qml -Popup 2.0 Popup.qml -ProgressBar 6.0 ProgressBar.qml -ProgressBar 2.0 ProgressBar.qml -RadioButton 6.0 RadioButton.qml -RadioButton 2.0 RadioButton.qml -RadioDelegate 6.0 RadioDelegate.qml -RadioDelegate 2.0 RadioDelegate.qml -RangeSlider 6.0 RangeSlider.qml -RangeSlider 2.0 RangeSlider.qml -RoundButton 2.1 RoundButton.qml -RoundButton 6.0 RoundButton.qml -ScrollBar 6.0 ScrollBar.qml -ScrollBar 2.0 ScrollBar.qml -ScrollIndicator 6.0 ScrollIndicator.qml -ScrollIndicator 2.0 ScrollIndicator.qml -ScrollView 2.2 ScrollView.qml -ScrollView 6.0 ScrollView.qml -SelectionRectangle 6.2 SelectionRectangle.qml -Slider 6.0 Slider.qml -Slider 2.0 Slider.qml -SpinBox 6.0 SpinBox.qml -SpinBox 2.0 SpinBox.qml -SplitView 2.13 SplitView.qml -SplitView 6.0 SplitView.qml -StackView 6.0 StackView.qml -StackView 2.0 StackView.qml -SwipeDelegate 6.0 SwipeDelegate.qml -SwipeDelegate 2.0 SwipeDelegate.qml -Switch 6.0 Switch.qml -Switch 2.0 Switch.qml -SwitchDelegate 6.0 SwitchDelegate.qml -SwitchDelegate 2.0 SwitchDelegate.qml -SwipeView 6.0 SwipeView.qml -SwipeView 2.0 SwipeView.qml -TabBar 6.0 TabBar.qml -TabBar 2.0 TabBar.qml -TabButton 6.0 TabButton.qml -TabButton 2.0 TabButton.qml -TextArea 6.0 TextArea.qml -TextArea 2.0 TextArea.qml -TextField 6.0 TextField.qml -TextField 2.0 TextField.qml -ToolBar 6.0 ToolBar.qml -ToolBar 2.0 ToolBar.qml -ToolButton 6.0 ToolButton.qml -ToolButton 2.0 ToolButton.qml -ToolSeparator 2.1 ToolSeparator.qml -ToolSeparator 6.0 ToolSeparator.qml -ToolTip 6.0 ToolTip.qml -ToolTip 2.0 ToolTip.qml -Tumbler 6.0 Tumbler.qml -Tumbler 2.0 Tumbler.qml -VerticalHeaderView 2.15 VerticalHeaderView.qml -VerticalHeaderView 6.0 VerticalHeaderView.qml -singleton Calendar 6.3 Calendar.qml -CalendarModel 6.3 CalendarModel.qml -DayOfWeekRow 6.3 DayOfWeekRow.qml -MonthGrid 6.3 MonthGrid.qml -WeekNumberColumn 6.3 WeekNumberColumn.qml -TreeViewDelegate 6.0 TreeViewDelegate.qml -TreeViewDelegate 2.0 TreeViewDelegate.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ApplicationWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ApplicationWindow.qml deleted file mode 100644 index fbd1cc2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ApplicationWindow.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ApplicationWindow { - id: window - - color: window.palette.window -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/BusyIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/BusyIndicator.qml deleted file mode 100644 index 8de02b6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/BusyIndicator.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: 28 - implicitHeight: 28 - color: control.palette.text - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - - RotationAnimator on rotation { - running: control.running && control.contentItem.visible - from: 0 - to: 360 - duration: 1000 - loops: Animation.Infinite - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Button.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Button.qml deleted file mode 100644 index 2ee8e12..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Button.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 4 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: ButtonPanel { - implicitWidth: 80 - implicitHeight: 24 - - control: control - visible: !control.flat || control.down || control.checked || control.highlighted || control.visualFocus - || (enabled && control.hovered) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckBox.qml deleted file mode 100644 index a996b67..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckBox.qml +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - baseLightness: control.enabled ? 1.25 : 1.0 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckDelegate.qml deleted file mode 100644 index f14deaa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckDelegate.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - indicator: CheckIndicator { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ComboBox.qml deleted file mode 100644 index decc43f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ComboBox.qml +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - delegate: MenuItem { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.editable ? control.palette.text : control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - width: 20 - fillMode: Image.Pad - } - - contentItem: T.TextField { - topPadding: 4 - leftPadding: 4 - control.padding - rightPadding: 4 - control.padding - bottomPadding: 4 - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - background: PaddedRectangle { - clip: true - radius: 2 - padding: 1 - leftPadding: control.mirrored ? -2 : padding - rightPadding: !control.mirrored ? -2 : padding - color: control.palette.base - visible: control.editable && !control.flat - - Rectangle { - x: parent.width - width - y: 1 - width: 1 - height: parent.height - 2 - color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled) - } - - Rectangle { - x: 1 - y: 1 - width: parent.width - 3 - height: 1 - color: Fusion.topShadow - } - } - - Rectangle { - x: 1 - control.leftPadding - y: 1 - width: control.width - 2 - height: control.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - } - - background: ButtonPanel { - implicitWidth: 120 - implicitHeight: 24 - - control: control - visible: !control.flat || control.down - // ### TODO: fix control.contentItem.activeFocus - highlighted: control.visualFocus || control.contentItem.activeFocus - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - padding: 1 - palette: control.palette - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightRangeMode: ListView.ApplyRange - highlightMoveDuration: 0 - - T.ScrollBar.vertical: ScrollBar { } - } - - background: Rectangle { - color: control.popup.palette.window - border.color: Fusion.outline(control.palette) - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DelayButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DelayButton.qml deleted file mode 100644 index 8dde74f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DelayButton.qml +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: ItemGroup { - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding + (control.mirrored ? 0 : control.progress * control.width) - clipWidth: control.width - visible: control.mirrored ? control.progress > 0 : control.progress < 1 - - text: control.text - font: control.font - color: control.mirrored ? control.palette.brightText : control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding - clipWidth: (control.mirrored ? 1.0 - control.progress : control.progress) * control.width - visible: control.mirrored ? control.progress < 1 : control.progress > 0 - - text: control.text - font: control.font - color: control.mirrored ? control.palette.buttonText : control.palette.brightText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - } - - background: ButtonPanel { - implicitWidth: 80 - implicitHeight: 24 - - control: control - highlighted: false - scale: control.mirrored ? -1 : 1 - - Rectangle { - width: control.progress * parent.width - height: parent.height - - radius: 2 - border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(Fusion.highlight(control.palette), 1.2) - } - GradientStop { - position: 1 - color: Fusion.highlight(control.palette) - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dial.qml deleted file mode 100644 index 6efd258..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dial.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: DialImpl { - implicitWidth: 100 - implicitHeight: 100 - highlight: control.visualFocus - } - - handle: KnobImpl { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - width: control.width / 7 - height: control.height / 7 - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.35 - + (control.handle ? control.handle.height / 2 : 0) - }, - Rotation { - angle: control.angle - origin.x: control.handle ? control.handle.width / 2 : 0 - origin.y: control.handle ? control.handle.height / 2 : 0 - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dialog.qml deleted file mode 100644 index f17321b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dialog.qml +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 6 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 6 - background: Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 1 - color: control.palette.window - radius: 2 - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DialogButtonBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DialogButtonBox.qml deleted file mode 100644 index 566058f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DialogButtonBox.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 6 - alignment: Qt.AlignRight - - delegate: Button { } - - contentItem: ListView { - implicitWidth: contentWidth - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 32 - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: control.palette.window - radius: 2 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Drawer.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Drawer.qml deleted file mode 100644 index 713ac0c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Drawer.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.palette.window - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - Rectangle { - width: parent.horizontal ? 1 : parent.width - height: parent.horizontal ? parent.height : 1 - color: control.palette.mid - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - Rectangle { - width: parent.horizontal ? 1 : parent.width - height: parent.horizontal ? parent.height : 1 - color: control.palette.shadow - opacity: 0.2 - x: control.edge === Qt.LeftEdge ? parent.width : 0 - y: control.edge === Qt.TopEdge ? parent.height : 0 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Frame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Frame.qml deleted file mode 100644 index 0512639..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Frame.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 9 - - background: Rectangle { - color: "transparent" - border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/GroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/GroupBox.qml deleted file mode 100644 index 5e949dc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/GroupBox.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 9 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - radius: 2 - color: Color.transparent("black", 3 / 255) - border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/HorizontalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/HorizontalHeaderView.qml deleted file mode 100644 index dbea743..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/HorizontalHeaderView.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Fusion.impl - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - // The contentHeight of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit height of - // HorizontalHeaderView should be the same as the content height in the end, we - // need to ensure that it has at least a height of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitHeight: Math.max(1, contentHeight) - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - - gradient: Gradient { - id: buttonGradient - GradientStop { - position: 0 - color: Fusion.gradientStart(control.palette.button) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(control.palette.button) - } - } - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ItemDelegate.qml deleted file mode 100644 index 5a3e9c4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ItemDelegate.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Label.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Label.qml deleted file mode 100644 index 9a715d9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Label.qml +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Label { - id: control - - color: control.palette.windowText - linkColor: control.palette.link -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Menu.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Menu.qml deleted file mode 100644 index bfd1fed..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Menu.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - padding: 1 - overlap: 2 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > control.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 20 - - color: control.palette.base - border.color: Fusion.outline(control.palette) - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBar.qml deleted file mode 100644 index 6e039d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBar.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 20 - - color: control.palette.window - - Rectangle { - y: parent.height - height - width: parent.width - height: 1 - color: Fusion.mergedColors(Qt.darker(control.palette.window, 1.2), - Qt.lighter(Fusion.outline(control.palette), 1.4), 60) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBarItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBarItem.qml deleted file mode 100644 index 299c344..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBarItem.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 20 - implicitHeight: 20 - - color: Fusion.highlight(control.palette) - visible: control.down || control.highlighted - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuItem.qml deleted file mode 100644 index ce701b7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuItem.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - arrow: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - width: 20 - - visible: control.subMenu - rotation: control.mirrored ? 90 : -90 - color: control.down || control.hovered || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - - indicator: CheckIndicator { - x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - visible: control.checkable - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 20 - - color: Fusion.highlight(control.palette) - visible: control.down || control.highlighted - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuSeparator.qml deleted file mode 100644 index b27dcf4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuSeparator.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 5 - verticalPadding: 1 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: Qt.lighter(Fusion.darkShade, 1.06) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Page.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Page.qml deleted file mode 100644 index 65a7523..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Page.qml +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/PageIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/PageIndicator.qml deleted file mode 100644 index c6f235a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/PageIndicator.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 4 - spacing: 4 - - delegate: Rectangle { - implicitWidth: 6 - implicitHeight: 6 - - radius: width / 2 - color: control.palette.shadow - - opacity: index === currentIndex ? 0.95 : pressed ? 0.75 : 0.45 - - required property int index - - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Pane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Pane.qml deleted file mode 100644 index 366c2ff..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Pane.qml +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 9 - - background: Rectangle { - color: control.palette.window - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Popup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Popup.qml deleted file mode 100644 index d669b5e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Popup.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 6 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.mid - radius: 2 - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ProgressBar.qml deleted file mode 100644 index c05f189..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ProgressBar.qml +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: Item { - implicitWidth: 120 - implicitHeight: 24 - scale: control.mirrored ? -1 : 1 - - Rectangle { - height: parent.height - width: (control.indeterminate ? 1.0 : control.position) * parent.width - - radius: 2 - border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(Fusion.highlight(control.palette), 1.2) - } - GradientStop { - position: 1 - color: Fusion.highlight(control.palette) - } - } - } - - Item { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - visible: control.indeterminate - clip: true - - ColorImage { - width: Math.ceil(parent.width / implicitWidth + 1) * implicitWidth - height: parent.height - - mirror: control.mirrored - fillMode: Image.TileHorizontally - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/progressmask.png" - color: Color.transparent(Qt.lighter(Fusion.highlight(control.palette), 1.2), 160 / 255) - - visible: control.indeterminate - NumberAnimation on x { - running: control.indeterminate && control.visible - from: -31 // progressmask.png width - to: 0 - loops: Animation.Infinite - duration: 750 - } - } - } - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: Fusion.outline(control.palette) - - Rectangle { - x: 1; y: 1; height: 1 - width: parent.width - 2 - color: Fusion.topShadow - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioButton.qml deleted file mode 100644 index 2553679..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioButton.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioDelegate.qml deleted file mode 100644 index f99cf81..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioDelegate.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - indicator: RadioIndicator { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RangeSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RangeSlider.qml deleted file mode 100644 index b9052c0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RangeSlider.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - Math.max(first.implicitHandleWidth, - second.implicitHandleWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - Math.max(first.implicitHandleHeight, - second.implicitHandleHeight) + topPadding + bottomPadding) - - first.handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.first.pressed - hovered: control.first.hovered - vertical: control.vertical - visualFocus: activeFocus - } - - second.handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.second.pressed - hovered: control.second.hovered - vertical: control.vertical - visualFocus: activeFocus - } - - background: SliderGroove { - control: control - offset: control.first.position - progress: control.second.position - visualProgress: control.second.visualPosition - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RoundButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RoundButton.qml deleted file mode 100644 index 1952e2c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RoundButton.qml +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - visible: !control.flat || control.down || control.checked - - gradient: Gradient { - GradientStop { - position: 0 - color: control.down || control.checked - ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.enabled && control.hovered) - : Fusion.gradientStart(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.enabled && control.hovered)) - } - GradientStop { - position: 1 - color: control.down || control.checked - ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.enabled && control.hovered) - : Fusion.gradientStop(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.enabled && control.hovered)) - } - } - - radius: control.radius - border.color: Fusion.buttonOutline(control.palette, control.highlighted || control.visualFocus, control.enabled) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: control.radius - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollBar.qml deleted file mode 100644 index 616050d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollBar.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation === Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 6 : 2 - implicitHeight: control.interactive ? 6 : 2 - - radius: width / 2 - color: control.pressed ? control.palette.dark : control.palette.mid - opacity: 0.0 - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - PropertyChanges { control.contentItem.opacity: 0.75 } - } - - transitions: Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 450 } - NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollIndicator.qml deleted file mode 100644 index a324c04..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollIndicator.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 2 - implicitHeight: 2 - - color: control.palette.mid - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { control.contentItem.opacity: 0.75 } - } - - transitions: [ - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 450 } - NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } - } - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollView.qml deleted file mode 100644 index 6078931..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollView.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SelectionRectangle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SelectionRectangle.qml deleted file mode 100644 index 762fec3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SelectionRectangle.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SelectionRectangle { - id: control - - topLeftHandle: Item { - width: 20 - height: 20 - visible: SelectionRectangle.control.active - // This item is deliberately empty. Selection handles don't feel at home - // for this style. But we provide an invisible handle that the user can - // drag on. - } - - bottomRightHandle: Item { - width: 20 - height: 20 - visible: SelectionRectangle.control.active - // This item is deliberately empty. Selection handles don't feel at home - // for this style. But we provide an invisible handle that the user can - // drag on. - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Slider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Slider.qml deleted file mode 100644 index c78dbed..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Slider.qml +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.pressed - hovered: control.hovered - vertical: control.vertical - visualFocus: control.visualFocus - } - - background: SliderGroove { - control: control - progress: control.position - visualProgress: control.visualPosition - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SpinBox.qml deleted file mode 100644 index 1e7d05d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SpinBox.qml +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SpinBox { - id: control - - // Note: the width of the indicators are calculated into the padding - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - up.implicitIndicatorHeight + down.implicitIndicatorHeight) - - padding: 4 - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : 0) - rightPadding: padding + (!control.mirrored ? (up.indicator ? up.indicator.width : 0) : 0) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - clip: width < implicitWidth - } - - up.indicator: PaddedRectangle { - x: control.mirrored ? 1 : control.width - width - 1 - y: 1 - height: control.height / 2 - 1 - implicitWidth: 16 - implicitHeight: 10 - - radius: 1.7 - clip: true - topPadding: -2 - leftPadding: -2 - color: control.up.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" - - ColorImage { - scale: -1 - width: parent.width - height: parent.height - opacity: enabled ? 1.0 : 0.5 - color: control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - } - - down.indicator: PaddedRectangle { - x: control.mirrored ? 1 : control.width - width - 1 - y: control.height - height - 1 - height: control.height / 2 - 1 - implicitWidth: 16 - implicitHeight: 10 - - radius: 1.7 - clip: true - topPadding: -2 - leftPadding: -2 - color: control.down.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" - - ColorImage { - width: parent.width - height: parent.height - opacity: enabled ? 1.0 : 0.5 - color: control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) - - Rectangle { - x: 2 - y: 1 - width: parent.width - 4 - height: 1 - color: Fusion.topShadow - } - - Rectangle { - x: control.mirrored ? 1 : parent.width - width - 1 - y: 1 - width: Math.max(control.up.indicator ? control.up.indicator.width : 0, - control.down.indicator ? control.down.indicator.width : 0) + 1 - height: parent.height - 2 - - radius: 2 - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) - } - } - - Rectangle { - x: control.mirrored ? parent.width - 1 : 0 - height: parent.height - width: 1 - color: Fusion.outline(control.palette) - } - } - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SplitView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SplitView.qml deleted file mode 100644 index 1046d80..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SplitView.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 2 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 2 - color: T.SplitHandle.pressed ? control.palette.dark - : (enabled && T.SplitHandle.hovered ? control.palette.midlight : control.palette.mid) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwipeDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwipeDelegate.qml deleted file mode 100644 index 1c47433..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwipeDelegate.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Switch.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Switch.qml deleted file mode 100644 index 3965b29..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Switch.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.text - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwitchDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwitchDelegate.qml deleted file mode 100644 index b7c4278..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwitchDelegate.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabBar.qml deleted file mode 100644 index 275bcf5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabBar.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: -1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 40 - preferredHighlightEnd: width - 40 - } - - background: Item { - implicitHeight: 21 - - Rectangle { - width: parent.width - height: 1 - y: control.position === T.TabBar.Header ? parent.height - 1 : 0 - color: Fusion.outline(control.palette) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabButton.qml deleted file mode 100644 index 48ee303..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabButton.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - horizontalPadding: 4 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - z: checked - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - - background: Rectangle { - y: control.checked || control.TabBar.position !== T.TabBar.Header ? 0 : 2 - implicitHeight: 21 - height: control.height - (control.checked ? 0 : 2) - - border.color: Qt.lighter(Fusion.outline(control.palette), 1.1) - - gradient: Gradient { - GradientStop { - position: 0 - color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) - } - GradientStop { - position: control.checked ? 0 : 0.85 - color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) - } - GradientStop { - position: 1 - color: control.checked ? Fusion.tabFrameColor(control.palette) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.16) - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextArea.qml deleted file mode 100644 index 5e1ecfa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextArea.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextField.qml deleted file mode 100644 index b358c66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextField.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - - Rectangle { - x: 2 - y: 1 - width: parent.width - 4 - height: 1 - color: Fusion.topShadow - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolBar.qml deleted file mode 100644 index 13b269e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolBar.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - horizontalPadding: 6 - topPadding: control.position === T.ToolBar.Footer ? 1 : 0 - bottomPadding: control.position === T.ToolBar.Header ? 1 : 0 - - background: Rectangle { - implicitHeight: 26 - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(control.palette.window, 1.04) - } - GradientStop { - position: 1 - color: control.palette.window - } - } - - Rectangle { - width: parent.width - height: 1 - color: control.position === T.ToolBar.Header ? Fusion.lightShade : Fusion.darkShade - } - - Rectangle { - y: parent.height - height - width: parent.width - height: 1 - color: control.position === T.ToolBar.Header ? Fusion.darkShade : Fusion.lightShade - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolButton.qml deleted file mode 100644 index dd9b628..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolButton.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: ButtonPanel { - implicitWidth: 20 - implicitHeight: 20 - - control: control - visible: control.down || control.checked || control.highlighted || control.visualFocus - || (enabled && control.hovered) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolSeparator.qml deleted file mode 100644 index 569ee66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolSeparator.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: vertical ? 6 : 2 - verticalPadding: vertical ? 2 : 6 - - contentItem: Rectangle { - implicitWidth: control.vertical ? 2 : 8 - implicitHeight: control.vertical ? 8 : 2 - color: Qt.darker(control.palette.window, 1.1) - - Rectangle { - x: 1 - width: 1 - height: parent.height - color: Qt.lighter(control.palette.window, 1.1) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolTip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolTip.qml deleted file mode 100644 index 5166d2b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolTip.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 3 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 6 - padding: 6 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: Rectangle { - color: control.palette.toolTipBase - border.color: control.palette.toolTipText - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.5 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TreeViewDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TreeViewDelegate.qml deleted file mode 100644 index 1956936..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TreeViewDelegate.qml +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion - -T.TreeViewDelegate { - id: control - - implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin - implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight) - - indentation: indicator ? indicator.width : 12 - leftMargin: 5 - rightMargin: 5 - spacing: 5 - - topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0 - leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth - - highlighted: control.selected || control.current - || ((control.treeView.selectionBehavior === TableView.SelectRows - || control.treeView.selectionBehavior === TableView.SelectionDisabled) - && control.row === control.treeView.currentRow) - - required property int row - required property var model - readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0) - - indicator: Item { - readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation) - x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width - y: (control.height - height) / 2 - implicitWidth: Math.max(arrow.implicitWidth, 20) - implicitHeight: 24 // same as Button.qml - - property ColorImage arrow : ColorImage { - parent: control.indicator - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - rotation: control.expanded ? 0 : (control.mirrored ? 90 : -90) - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - color: control.palette.windowText - defaultColor: "#353637" - } - } - - background: Rectangle { - implicitHeight: 24 // same as Button.qml - color: control.highlighted - ? control.palette.highlight - : (control.treeView.alternatingRows && control.row % 2 !== 0 - ? control.palette.alternateBase : control.palette.base) - } - - contentItem: Label { - text: control.model.display - elide: Text.ElideRight - visible: !control.editing - } - - // The edit delegate is a separate component, and doesn't need - // to follow the same strict rules that are applied to a control. - // qmllint disable attached-property-reuse - // qmllint disable controls-attached-property-reuse - // qmllint disable controls-sanity - TableView.editDelegate: FocusScope { - width: parent.width - height: parent.height - - readonly property int __role: { - let model = control.treeView.model - let index = control.treeView.index(row, column) - let editText = model.data(index, Qt.EditRole) - return editText !== undefined ? Qt.EditRole : Qt.DisplayRole - } - - TextField { - id: textField - x: control.contentItem.x - y: (parent.height - height) / 2 - width: control.contentItem.width - text: control.treeView.model.data(control.treeView.index(row, column), __role) - focus: true - } - - TableView.onCommit: { - let index = TableView.view.index(row, column) - TableView.view.model.setData(index, textField.text, __role) - } - - Component.onCompleted: textField.selectAll() - } - // qmllint enable attached-property-reuse - // qmllint enable controls-attached-property-reuse - // qmllint enable controls-sanity -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Tumbler.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Tumbler.qml deleted file mode 100644 index 4a5ccd8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Tumbler.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - readonly property real __delegateHeight: availableHeight / visibleItemCount - - delegate: Text { - text: modelData - color: control.palette.windowText - font: control.font - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property var modelData - required property int index - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.__delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/VerticalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/VerticalHeaderView.qml deleted file mode 100644 index c2cb281..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/VerticalHeaderView.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Fusion.impl - -T.VerticalHeaderView { - id: control - - // The contentWidth of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit width of - // VerticalHeaderView should be the same as the content width in the end, we - // need to ensure that it has at least a width of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitWidth: Math.max(1, contentWidth) - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(control.palette.button) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(control.palette.button) - } - } - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/ButtonPanel.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/ButtonPanel.qml deleted file mode 100644 index b7fa6a7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/ButtonPanel.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: panel - - property Item control - property bool highlighted: control.highlighted - - visible: !control.flat || control.down || control.checked - - color: Fusion.buttonColor(control.palette, panel.highlighted, control.down || control.checked, - enabled && control.hovered) - gradient: control.down || control.checked ? null : buttonGradient - - Gradient { - id: buttonGradient - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(panel.control.palette, panel.highlighted, - panel.control.down, panel.enabled && panel.control.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(panel.control.palette, panel.highlighted, - panel.control.down, panel.enabled && panel.control.hovered)) - } - } - - radius: 2 - border.color: Fusion.buttonOutline(control.palette, panel.highlighted || control.visualFocus, control.enabled) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/CheckIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/CheckIndicator.qml deleted file mode 100644 index 40e3471..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/CheckIndicator.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property Item control - property real baseLightness: 1.6 - - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 14 - implicitHeight: 14 - - color: control.down ? indicator.pressedColor : Qt.lighter(control.palette.base, baseLightness) - border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) - : Qt.lighter(Fusion.outline(control.palette), 1.1) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: 1 - color: Fusion.topShadow - visible: indicator.control.enabled && !indicator.control.down - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: Color.transparent(indicator.checkMarkColor, 210 / 255) - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/checkmark.png" - visible: indicator.control.checkState === Qt.Checked || (indicator.control.checked && indicator.control.checkState === undefined) - } - - Rectangle { - x: 3; y: 3 - width: parent.width - 6 - height: parent.width - 6 - - visible: indicator.control.checkState === Qt.PartiallyChecked - - gradient: Gradient { - GradientStop { - position: 0 - color: Color.transparent(indicator.checkMarkColor, 80 / 255) - } - GradientStop { - position: 1 - color: Color.transparent(indicator.checkMarkColor, 140 / 255) - } - } - border.color: Color.transparent(indicator.checkMarkColor, 180 / 255) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/RadioIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/RadioIndicator.qml deleted file mode 100644 index 818b246..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/RadioIndicator.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property Item control - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 14 - implicitHeight: 14 - - radius: width / 2 - color: control.down ? indicator.pressedColor : Qt.lighter(control.palette.base, 1.75) - border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) - : Qt.darker(control.palette.window, 1.5) - - Rectangle { - y: 1 - width: parent.width - height: parent.height - 1 - radius: width / 2 - color: "transparent" - border.color: Fusion.topShadow - visible: indicator.control.enabled && !indicator.control.down - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 2.32 - height: parent.height / 2.32 - radius: width / 2 - color: Color.transparent(indicator.checkMarkColor, 180 / 255) - border.color: Color.transparent(indicator.checkMarkColor, 200 / 255) - visible: indicator.control.checked - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderGroove.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderGroove.qml deleted file mode 100644 index 8cfdd83..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderGroove.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: groove - - property Item control - property real offset - property real progress - property real visualProgress - - x: control.horizontal ? 0 : (control.availableWidth - width) / 2 - y: control.horizontal ? (control.availableHeight - height) / 2 : 0 - - implicitWidth: control.horizontal ? 160 : 5 - implicitHeight: control.horizontal ? 5 : 160 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - radius: 2 - border.color: Fusion.outline(control.palette) - scale: control.horizontal && control.mirrored ? -1 : 1 - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.darker(Fusion.grooveColor(groove.control.palette), 1.1) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.grooveColor(groove.control.palette), 1.1) - } - } - - Rectangle { - x: groove.control.horizontal ? groove.offset * parent.width : 0 - y: groove.control.horizontal ? 0 : groove.visualProgress * parent.height - width: groove.control.horizontal ? groove.progress * parent.width - groove.offset * parent.width : 5 - height: groove.control.horizontal ? 5 : groove.progress * parent.height - groove.offset * parent.height - - radius: 2 - border.color: Qt.darker(Fusion.highlightedOutline(groove.control.palette), 1.1) - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.highlight(groove.control.palette) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.highlight(groove.control.palette), 1.2) - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderHandle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderHandle.qml deleted file mode 100644 index e12d4c0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderHandle.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: handle - - property var palette - property bool pressed - property bool hovered - property bool vertical - property bool visualFocus - - implicitWidth: 13 - implicitHeight: 13 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(handle.palette, handle.visualFocus, - handle.pressed, handle.enabled && handle.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(handle.palette, handle.visualFocus, - handle.pressed, handle.enabled && handle.hovered)) - } - } - rotation: handle.vertical ? -90 : 0 - border.width: 1 - border.color: "transparent" - radius: 2 - - Rectangle { - width: parent.width - height: parent.height - border.color: handle.visualFocus ? Fusion.highlightedOutline(handle.palette) : Fusion.outline(handle.palette) - color: "transparent" - radius: 2 - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SwitchIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SwitchIndicator.qml deleted file mode 100644 index 8bc9238..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SwitchIndicator.qml +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property T.AbstractButton control - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 40 - implicitHeight: 16 - - radius: 2 - border.color: Fusion.outline(control.palette) - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.darker(Fusion.grooveColor(indicator.control.palette), 1.1) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.grooveColor(indicator.control.palette), 1.1) - } - } - - Rectangle { - x: indicator.control.mirrored ? handle.x : 0 - width: indicator.control.mirrored ? parent.width - handle.x : handle.x + handle.width - height: parent.height - - opacity: indicator.control.checked ? 1 : 0 - Behavior on opacity { - enabled: !indicator.control.down - NumberAnimation { duration: 80 } - } - - radius: 2 - border.color: Qt.darker(Fusion.highlightedOutline(indicator.control.palette), 1.1) - border.width: indicator.control.enabled ? 1 : 0 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.highlight(indicator.control.palette) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.highlight(indicator.control.palette), 1.2) - } - } - } - - Rectangle { - id: handle - x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 20 - height: 16 - radius: 2 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(indicator.control.palette, - indicator.control.visualFocus, indicator.control.pressed, indicator.enabled && indicator.control.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(indicator.control.palette, - indicator.control.visualFocus, indicator.control.pressed, indicator.enabled && indicator.control.hovered)) - } - } - border.width: 1 - border.color: "transparent" - - Rectangle { - width: parent.width - height: parent.height - border.color: indicator.control.visualFocus ? Fusion.highlightedOutline(indicator.control.palette) : Fusion.outline(indicator.control.palette) - color: "transparent" - radius: 2 - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } - } - - Behavior on x { - enabled: !indicator.control.down - SmoothedAnimation { velocity: 200 } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/libqtquickcontrols2fusionstyleimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/libqtquickcontrols2fusionstyleimplplugin.so deleted file mode 100755 index 126182d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/libqtquickcontrols2fusionstyleimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/plugins.qmltypes deleted file mode 100644 index 31bf0f8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/plugins.qmltypes +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickfusionbusyindicator_p.h" - name: "QQuickFusionBusyIndicator" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 2.3", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 2.4", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 2.7", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 2.11", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 6.0", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 6.3", - "QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 6.7" - ] - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 0; isFinal: true } - Property { name: "running"; type: "bool"; read: "isRunning"; write: "setRunning"; index: 1 } - } - Component { - file: "private/qquickfusiondial_p.h" - name: "QQuickFusionDial" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Fusion.impl/DialImpl 2.3", - "QtQuick.Controls.Fusion.impl/DialImpl 2.4", - "QtQuick.Controls.Fusion.impl/DialImpl 2.7", - "QtQuick.Controls.Fusion.impl/DialImpl 2.11", - "QtQuick.Controls.Fusion.impl/DialImpl 6.0", - "QtQuick.Controls.Fusion.impl/DialImpl 6.3", - "QtQuick.Controls.Fusion.impl/DialImpl 6.7" - ] - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "highlight" - type: "bool" - read: "highlight" - write: "setHighlight" - index: 0 - isFinal: true - } - } - Component { - file: "private/qquickfusionknob_p.h" - name: "QQuickFusionKnob" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Fusion.impl/KnobImpl 2.3", - "QtQuick.Controls.Fusion.impl/KnobImpl 2.4", - "QtQuick.Controls.Fusion.impl/KnobImpl 2.7", - "QtQuick.Controls.Fusion.impl/KnobImpl 2.11", - "QtQuick.Controls.Fusion.impl/KnobImpl 6.0", - "QtQuick.Controls.Fusion.impl/KnobImpl 6.3", - "QtQuick.Controls.Fusion.impl/KnobImpl 6.7" - ] - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/qmldir deleted file mode 100644 index b67517e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/qmldir +++ /dev/null @@ -1,20 +0,0 @@ -module QtQuick.Controls.Fusion.impl -linktarget Qt6::qtquickcontrols2fusionstyleimplplugin -optional plugin qtquickcontrols2fusionstyleimplplugin -classname QtQuickControls2FusionStyleImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Fusion/impl/ -ButtonPanel 6.0 ButtonPanel.qml -ButtonPanel 2.0 ButtonPanel.qml -CheckIndicator 6.0 CheckIndicator.qml -CheckIndicator 2.0 CheckIndicator.qml -RadioIndicator 6.0 RadioIndicator.qml -RadioIndicator 2.0 RadioIndicator.qml -SliderGroove 6.0 SliderGroove.qml -SliderGroove 2.0 SliderGroove.qml -SliderHandle 6.0 SliderHandle.qml -SliderHandle 2.0 SliderHandle.qml -SwitchIndicator 6.0 SwitchIndicator.qml -SwitchIndicator 2.0 SwitchIndicator.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.so deleted file mode 100755 index 5891818..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/plugins.qmltypes deleted file mode 100644 index 8eaf6fb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/plugins.qmltypes +++ /dev/null @@ -1,161 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickfusionstyle_p.h" - name: "QQuickFusionStyle" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Controls.Fusion/Fusion 2.3", - "QtQuick.Controls.Fusion/Fusion 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [515, 1536] - Property { - name: "lightShade" - type: "QColor" - read: "lightShade" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "darkShade" - type: "QColor" - read: "darkShade" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "topShadow" - type: "QColor" - read: "topShadow" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "innerContrastLine" - type: "QColor" - read: "innerContrastLine" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Method { - name: "highlight" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "highlightedText" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "outline" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "highlightedOutline" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "tabFrameColor" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "buttonColor" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - Parameter { name: "highlighted"; type: "bool" } - Parameter { name: "down"; type: "bool" } - Parameter { name: "hovered"; type: "bool" } - } - Method { - name: "buttonColor" - type: "QColor" - isCloned: true - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - Parameter { name: "highlighted"; type: "bool" } - Parameter { name: "down"; type: "bool" } - } - Method { - name: "buttonColor" - type: "QColor" - isCloned: true - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - Parameter { name: "highlighted"; type: "bool" } - } - Method { - name: "buttonColor" - type: "QColor" - isCloned: true - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "buttonOutline" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - Parameter { name: "highlighted"; type: "bool" } - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "buttonOutline" - type: "QColor" - isCloned: true - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - Parameter { name: "highlighted"; type: "bool" } - } - Method { - name: "buttonOutline" - type: "QColor" - isCloned: true - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - Method { - name: "gradientStart" - type: "QColor" - Parameter { name: "baseColor"; type: "QColor" } - } - Method { - name: "gradientStop" - type: "QColor" - Parameter { name: "baseColor"; type: "QColor" } - } - Method { - name: "mergedColors" - type: "QColor" - Parameter { name: "colorA"; type: "QColor" } - Parameter { name: "colorB"; type: "QColor" } - Parameter { name: "factor"; type: "int" } - } - Method { - name: "mergedColors" - type: "QColor" - isCloned: true - Parameter { name: "colorA"; type: "QColor" } - Parameter { name: "colorB"; type: "QColor" } - } - Method { - name: "grooveColor" - type: "QColor" - Parameter { name: "palette"; type: "QQuickPalette"; isPointer: true } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/qmldir deleted file mode 100644 index 37e8a14..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Fusion/qmldir +++ /dev/null @@ -1,111 +0,0 @@ -module QtQuick.Controls.Fusion -linktarget Qt6::qtquickcontrols2fusionstyleplugin -plugin qtquickcontrols2fusionstyleplugin -classname QtQuickControls2FusionStylePlugin -typeinfo plugins.qmltypes -import QtQuick.Controls.Basic auto -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Fusion/ -ApplicationWindow 6.0 ApplicationWindow.qml -ApplicationWindow 2.0 ApplicationWindow.qml -BusyIndicator 6.0 BusyIndicator.qml -BusyIndicator 2.0 BusyIndicator.qml -Button 6.0 Button.qml -Button 2.0 Button.qml -CheckBox 6.0 CheckBox.qml -CheckBox 2.0 CheckBox.qml -CheckDelegate 6.0 CheckDelegate.qml -CheckDelegate 2.0 CheckDelegate.qml -ComboBox 6.0 ComboBox.qml -ComboBox 2.0 ComboBox.qml -DelayButton 2.2 DelayButton.qml -DelayButton 6.0 DelayButton.qml -Dial 6.0 Dial.qml -Dial 2.0 Dial.qml -Dialog 2.1 Dialog.qml -Dialog 6.0 Dialog.qml -DialogButtonBox 2.1 DialogButtonBox.qml -DialogButtonBox 6.0 DialogButtonBox.qml -Drawer 6.0 Drawer.qml -Drawer 2.0 Drawer.qml -Frame 6.0 Frame.qml -Frame 2.0 Frame.qml -GroupBox 6.0 GroupBox.qml -GroupBox 2.0 GroupBox.qml -HorizontalHeaderView 2.15 HorizontalHeaderView.qml -HorizontalHeaderView 6.0 HorizontalHeaderView.qml -ItemDelegate 6.0 ItemDelegate.qml -ItemDelegate 2.0 ItemDelegate.qml -Label 6.0 Label.qml -Label 2.0 Label.qml -Menu 6.0 Menu.qml -Menu 2.0 Menu.qml -MenuBar 2.3 MenuBar.qml -MenuBar 6.0 MenuBar.qml -MenuBarItem 2.3 MenuBarItem.qml -MenuBarItem 6.0 MenuBarItem.qml -MenuItem 6.0 MenuItem.qml -MenuItem 2.0 MenuItem.qml -MenuSeparator 2.1 MenuSeparator.qml -MenuSeparator 6.0 MenuSeparator.qml -Page 6.0 Page.qml -Page 2.0 Page.qml -PageIndicator 6.0 PageIndicator.qml -PageIndicator 2.0 PageIndicator.qml -Pane 6.0 Pane.qml -Pane 2.0 Pane.qml -Popup 6.0 Popup.qml -Popup 2.0 Popup.qml -ProgressBar 6.0 ProgressBar.qml -ProgressBar 2.0 ProgressBar.qml -RadioButton 6.0 RadioButton.qml -RadioButton 2.0 RadioButton.qml -RadioDelegate 6.0 RadioDelegate.qml -RadioDelegate 2.0 RadioDelegate.qml -RangeSlider 6.0 RangeSlider.qml -RangeSlider 2.0 RangeSlider.qml -RoundButton 2.1 RoundButton.qml -RoundButton 6.0 RoundButton.qml -ScrollBar 6.0 ScrollBar.qml -ScrollBar 2.0 ScrollBar.qml -ScrollView 6.0 ScrollView.qml -ScrollView 2.0 ScrollView.qml -ScrollIndicator 6.0 ScrollIndicator.qml -ScrollIndicator 2.0 ScrollIndicator.qml -SelectionRectangle 6.0 SelectionRectangle.qml -SelectionRectangle 2.0 SelectionRectangle.qml -Slider 6.0 Slider.qml -Slider 2.0 Slider.qml -SpinBox 6.0 SpinBox.qml -SpinBox 2.0 SpinBox.qml -SplitView 2.13 SplitView.qml -SplitView 6.0 SplitView.qml -SwipeDelegate 6.0 SwipeDelegate.qml -SwipeDelegate 2.0 SwipeDelegate.qml -SwitchDelegate 6.0 SwitchDelegate.qml -SwitchDelegate 2.0 SwitchDelegate.qml -Switch 6.0 Switch.qml -Switch 2.0 Switch.qml -TabBar 6.0 TabBar.qml -TabBar 2.0 TabBar.qml -TabButton 6.0 TabButton.qml -TabButton 2.0 TabButton.qml -TextArea 6.0 TextArea.qml -TextArea 2.0 TextArea.qml -TextField 6.0 TextField.qml -TextField 2.0 TextField.qml -ToolBar 6.0 ToolBar.qml -ToolBar 2.0 ToolBar.qml -ToolButton 6.0 ToolButton.qml -ToolButton 2.0 ToolButton.qml -ToolSeparator 2.1 ToolSeparator.qml -ToolSeparator 6.0 ToolSeparator.qml -ToolTip 6.0 ToolTip.qml -ToolTip 2.0 ToolTip.qml -TreeViewDelegate 6.0 TreeViewDelegate.qml -TreeViewDelegate 2.0 TreeViewDelegate.qml -Tumbler 6.0 Tumbler.qml -Tumbler 2.0 Tumbler.qml -VerticalHeaderView 2.15 VerticalHeaderView.qml -VerticalHeaderView 6.0 VerticalHeaderView.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ApplicationWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ApplicationWindow.qml deleted file mode 100644 index c0ea103..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ApplicationWindow.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ApplicationWindow { - id: window - - background: NinePatchImage { - width: window.width - height: window.height - - source: Imagine.url + "applicationwindow-background" - NinePatchImageSelector on source { - states: [ - {"active": window.active} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/BusyIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/BusyIndicator.qml deleted file mode 100644 index 6dc40dc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/BusyIndicator.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: AnimatedImage { - opacity: control.running ? 1 : 0 - playing: control.running || opacity > 0 - visible: control.running || opacity > 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - - source: Imagine.url + "busyindicator-animation" - AnimatedImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"running": control.running}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "busyindicator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"running": control.running}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Button.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Button.qml deleted file mode 100644 index 6526909..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Button.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "button-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"flat": control.flat}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckBox.qml deleted file mode 100644 index 11a2048..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckBox.qml +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: Image { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "checkbox-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "checkbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckDelegate.qml deleted file mode 100644 index ccae3c1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckDelegate.qml +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "checkdelegate-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "checkdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ComboBox.qml deleted file mode 100644 index 582b820..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ComboBox.qml +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (background ? background.leftPadding + background.rightPadding : 0)) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - Math.max(implicitContentHeight, - implicitIndicatorHeight) + (background ? background.topPadding + background.bottomPadding : 0)) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: ItemDelegate { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: Image { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "combobox-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"open": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered}, - {"flat": control.flat} - ] - } - } - - contentItem: T.TextField { - topPadding: control.background ? control.background.topPadding : 0 - leftPadding: control.background ? control.background.leftPadding : 0 - rightPadding: control.background ? control.background.rightPadding : 0 - bottomPadding: control.background ? control.background.bottomPadding : 0 - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - color: control.flat ? control.palette.windowText : control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "combobox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"open": control.down}, - {"focused": control.visualFocus || (control.editable && control.activeFocus)}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered}, - {"flat": control.flat} - ] - } - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin) - - topMargin: background.topInset - bottomMargin: background.bottomInset - - topPadding: background.topPadding - leftPadding: background.leftPadding - rightPadding: background.rightPadding - bottomPadding: background.bottomPadding - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - palette.text: control.palette.text - palette.highlight: control.palette.highlight - palette.highlightedText: control.palette.highlightedText - palette.windowText: control.palette.windowText - palette.buttonText: control.palette.buttonText - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: NinePatchImage { - source: Imagine.url + "combobox-popup" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"focused": control.visualFocus || (control.editable && control.activeFocus)}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered}, - {"flat": control.flat} - ] - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DelayButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DelayButton.qml deleted file mode 100644 index 73854cd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DelayButton.qml +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - color: control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: NinePatchImage { - source: control.Imagine.url + "delaybutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - readonly property NinePatchImage progress: NinePatchImage { - parent: control.background - width: control.progress * parent.width - height: parent.height - visible: false - - source: control.Imagine.url + "delaybutton-progress" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - readonly property NinePatchImage mask: NinePatchImage { - width: control.background.width - height: control.background.height - visible: false - - source: control.Imagine.url + "delaybutton-mask" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - readonly property OpacityMask effect: OpacityMask { - parent: control.background - width: source.width - height: source.height - source: control.background.progress - - maskSource: ShaderEffectSource { - sourceItem: control.background.mask - sourceRect: Qt.rect(0, 0, control.background.effect.width, control.background.effect.height) - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dial.qml deleted file mode 100644 index d534fad..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dial.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - handle: Image { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - - source: Imagine.url + "dial-handle" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.4 - + (control.handle ? control.handle.height / 2 : 0) - }, - Rotation { - angle: control.angle - origin.x: control.handle ? control.handle.width / 2 : 0 - origin.y: control.handle ? control.handle.height / 2 : 0 - } - ] - } - - background: NinePatchImage { - fillMode: Image.PreserveAspectFit - source: Imagine.url + "dial-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dialog.qml deleted file mode 100644 index 4d3c296..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dialog.qml +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 12 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DialogButtonBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DialogButtonBox.qml deleted file mode 100644 index 81d87b6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DialogButtonBox.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - spacing: 6 - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - flat: true - } - - contentItem: ListView { - implicitWidth: contentWidth - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: NinePatchImage { - source: Imagine.url + "dialogbuttonbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Drawer.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Drawer.qml deleted file mode 100644 index b6ecbb2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Drawer.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: NinePatchImage { - source: Imagine.url + "drawer-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim}, - {"top": control.edge === Qt.TopEdge}, - {"left": control.edge === Qt.LeftEdge}, - {"right": control.edge === Qt.RightEdge}, - {"bottom": control.edge === Qt.BottomEdge} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "drawer-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "drawer-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Frame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Frame.qml deleted file mode 100644 index a307617..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Frame.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "frame-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/GroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/GroupBox.qml deleted file mode 100644 index e833a92..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/GroupBox.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: ((background as NinePatchImage)?.topPadding ?? 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - leftPadding: ((background as NinePatchImage)?.leftPadding ?? 0) - rightPadding: ((background as NinePatchImage)?.rightPadding ?? 0) - bottomPadding: ((background as NinePatchImage)?.bottomPadding ?? 0) - - label: Label { - width: control.width - - topPadding: background.topPadding - leftPadding: background.leftPadding - rightPadding: background.rightPadding - bottomPadding: background.bottomPadding - - text: control.title - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - color: control.palette.windowText - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "groupbox-title" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - } - - background: NinePatchImage { - x: -leftInset - y: control.topPadding - control.bottomPadding - topInset - width: control.width + leftInset + rightInset - height: control.height + topInset + bottomInset - control.topPadding + control.bottomPadding - - source: Imagine.url + "groupbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/HorizontalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/HorizontalHeaderView.qml deleted file mode 100644 index 9f571a8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/HorizontalHeaderView.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - // The contentHeight of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit height of - // HorizontalHeaderView should be the same as the content height in the end, we - // need to ensure that it has at least a height of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitHeight: Math.max(1, contentHeight) - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ItemDelegate.qml deleted file mode 100644 index 2a2b0bd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ItemDelegate.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "itemdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Label.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Label.qml deleted file mode 100644 index 9a612bc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Label.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Label { - id: control - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.windowText - linkColor: control.palette.link - - background: NinePatchImage { - source: Imagine.url + "label-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Menu.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Menu.qml deleted file mode 100644 index 3596ee9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Menu.qml +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topMargin: background ? background.topInset : 0 - leftMargin: background ? background.leftInset : 0 - rightMargin: background ? background.rightInset : 0 - bottomMargin: background ? background.bottomInset : 0 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > control.height - : false - clip: true - currentIndex: control.currentIndex - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: NinePatchImage { - source: Imagine.url + "menu-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "menu-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "menu-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuItem.qml deleted file mode 100644 index 5d8809d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuItem.qml +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.windowText - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.windowText - } - - arrow: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - source: Imagine.url + "menuitem-arrow" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - indicator: Image { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checkable - source: Imagine.url + "menuitem-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "menuitem-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuSeparator.qml deleted file mode 100644 index 0ed3504..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuSeparator.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - source: Imagine.url + "menuseparator-separator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "menuseparator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Page.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Page.qml deleted file mode 100644 index 9e32db2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Page.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "page-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/PageIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/PageIndicator.qml deleted file mode 100644 index 42afbda..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/PageIndicator.qml +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: Image { - source: Imagine.url + "pageindicator-delegate" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": pressed}, - {"current": index === control.currentIndex}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} // ### TODO: context property - ] - } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } - - background: NinePatchImage { - source: Imagine.url + "pageindicator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Pane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Pane.qml deleted file mode 100644 index f74ea96..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Pane.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "pane-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Popup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Popup.qml deleted file mode 100644 index 185f2fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Popup.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : undefined - leftPadding: background ? background.leftPadding : undefined - rightPadding: background ? background.rightPadding : undefined - bottomPadding: background ? background.bottomPadding : undefined - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "popup-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "popup-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "popup-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ProgressBar.qml deleted file mode 100644 index 641320f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ProgressBar.qml +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: Item { - implicitWidth: control.indeterminate ? animation.implicitWidth || progress.implicitWidth : progress.implicitWidth - implicitHeight: control.indeterminate ? animation.implicitHeight || progress.implicitHeight : progress.implicitHeight - scale: control.mirrored ? -1 : 1 - - readonly property bool hasMask: mask.status !== Image.Null - - readonly property NinePatchImage progress: NinePatchImage { - parent: control.contentItem - width: control.position * parent.width - height: parent.height - visible: !control.indeterminate && !control.contentItem.hasMask - - source: Imagine.url + "progressbar-progress" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - readonly property AnimatedImage animation: AnimatedImage { - parent: control.contentItem - width: parent.width - height: parent.height - playing: control.indeterminate - visible: control.indeterminate && !control.contentItem.hasMask - - source: Imagine.url + "progressbar-animation" - AnimatedImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - readonly property NinePatchImage mask: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - visible: false - - source: Imagine.url + "progressbar-mask" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - readonly property OpacityMask effect: OpacityMask { - parent: control.contentItem - width: source.width - height: source.height - source: control.indeterminate ? control.contentItem.animation : control.contentItem.progress - - maskSource: ShaderEffectSource { - sourceItem: control.contentItem.mask - sourceRect: Qt.rect(0, 0, control.contentItem.effect.width, control.contentItem.effect.height) - } - } - } - - background: NinePatchImage { - source: Imagine.url + "progressbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioButton.qml deleted file mode 100644 index 2f9335e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: Image { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "radiobutton-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "radiobutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioDelegate.qml deleted file mode 100644 index f872798..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioDelegate.qml +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "radiodelegate-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "radiodelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RangeSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RangeSlider.qml deleted file mode 100644 index bb5c8a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RangeSlider.qml +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - first.handle: Image { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - source: control.Imagine.url + "rangeslider-handle" - ImageSelector on source { - states: [ - {"first": true}, - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.first.pressed}, - {"focused": control.first.handle?.activeFocus ?? false}, - {"mirrored": control.mirrored}, - {"hovered": control.first.hovered} - ] - } - } - - second.handle: Image { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - source: control.Imagine.url + "rangeslider-handle" - ImageSelector on source { - states: [ - {"second": true}, - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.second.pressed}, - {"focused": control.second.handle?.activeFocus ?? false}, - {"mirrored": control.mirrored}, - {"hovered": control.second.hovered} - ] - } - } - - background: NinePatchImage { - scale: control.horizontal && control.mirrored ? -1 : 1 - - source: control.Imagine.url + "rangeslider-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - NinePatchImage { - readonly property real handleWidth: control.first.handle ? control.first.handle.width : 0 - readonly property real handleHeight: control.first.handle ? control.first.handle.height : 0 - - x: control.horizontal ? handleWidth / 2 + control.first.position * (parent.width - handleWidth) : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : handleHeight / 2 + control.second.visualPosition * (parent.height - handleHeight) - width: control.horizontal ? control.second.position * (parent.width - handleWidth) - control.first.position * (parent.width - handleWidth) : parent.width - height: control.vertical ? control.second.position * (parent.height - handleHeight) - control.first.position * (parent.height - handleHeight): parent.height - - source: control.Imagine.url + "rangeslider-progress" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RoundButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RoundButton.qml deleted file mode 100644 index 2000d92..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RoundButton.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - } - - background: NinePatchImage { - // ### TODO: radius? - source: Imagine.url + "roundbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"flat": control.flat}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollBar.qml deleted file mode 100644 index 09db8ee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollBar.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation === Qt.Horizontal ? height / width : width / height - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - - source: Imagine.url + "scrollbar-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"pressed": control.pressed}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - opacity: 0.0 - } - - background: NinePatchImage { - source: Imagine.url + "scrollbar-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"pressed": control.pressed}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 3000 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollIndicator.qml deleted file mode 100644 index 285379a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollIndicator.qml +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - - source: Imagine.url + "scrollindicator-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - opacity: 0.0 - } - - background: NinePatchImage { - source: Imagine.url + "scrollindicator-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 5000 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollView.qml deleted file mode 100644 index 4e7d1a8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollView.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - T.ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.T.ScrollBar.horizontal.active - } - - T.ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.T.ScrollBar.vertical.active - } - - background: NinePatchImage { - source: Imagine.path + "scrollview-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SelectionRectangle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SelectionRectangle.qml deleted file mode 100644 index 79940b6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SelectionRectangle.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SelectionRectangle { - id: control - - topLeftHandle: handle - bottomRightHandle: handle - - Component { - id: handle - Image { - id: image - source: Imagine.url + "slider-handle" - visible: SelectionRectangle.control.active - ImageSelector on source { - states: [ - {"vertical": false}, - {"horizontal": true}, - {"disabled": false}, - {"pressed": tapHandler.pressed || image.SelectionRectangle.dragging}, - {"focused": true}, - {"mirrored": false}, - {"hovered": hoverHandler.hovered} - ] - } - - HoverHandler { - id: hoverHandler - } - - TapHandler { - id: tapHandler - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Slider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Slider.qml deleted file mode 100644 index 8176abc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Slider.qml +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - handle: Image { - x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) - y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))) - - source: control.Imagine.url + "slider-handle" - ImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - - background: NinePatchImage { - scale: control.horizontal && control.mirrored ? -1 : 1 - - source: control.Imagine.url + "slider-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - NinePatchImage { - readonly property real handleWidth: control.handle ? control.handle.width : 0 - readonly property real handleHeight: control.handle ? control.handle.height : 0 - - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal - ? (parent.height - height) / 2 - : handleHeight / 2 + control.visualPosition * (parent.height - handleHeight) - width: control.horizontal - ? handleWidth / 2 + control.position * (parent.width - handleWidth) - : parent.width - height: control.vertical - ? handleHeight / 2 + control.position * (parent.height - handleHeight) - : parent.height - - source: control.Imagine.url + "slider-progress" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SpinBox.qml deleted file mode 100644 index 834f474..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SpinBox.qml +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SpinBox { - id: control - - // Note: the width of the indicators are calculated into the padding - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - up.implicitIndicatorHeight, down.implicitIndicatorHeight) - - topPadding: background ? background.topPadding : 0 - leftPadding: (background ? background.leftPadding : 0) + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: (background ? background.rightPadding : 0) + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - opacity: control.enabled ? 1 : 0.3 - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - clip: width < implicitWidth - - NinePatchImage { - z: -1 - width: control.width - height: control.height - visible: control.editable - - source: Imagine.url + "spinbox-editor" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } - } - - up.indicator: NinePatchImage { - x: control.mirrored ? 0 : control.width - width - height: control.height - - source: Imagine.url + "spinbox-indicator" - NinePatchImageSelector on source { - states: [ - {"up": true}, - {"disabled": !control.up.indicator.enabled}, - {"editable": control.editable}, - {"pressed": control.up.pressed}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.up.hovered} - ] - } - } - - down.indicator: NinePatchImage { - x: control.mirrored ? control.width - width : 0 - height: control.height - - source: Imagine.url + "spinbox-indicator" - NinePatchImageSelector on source { - states: [ - {"down": true}, - {"disabled": !control.down.indicator.enabled}, - {"editable": control.editable}, - {"pressed": control.down.pressed}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.down.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "spinbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"editable": control.editable}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SplitView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SplitView.qml deleted file mode 100644 index 8c4c6f4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SplitView.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SplitView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: NinePatchImage { - source: Imagine.url + "splitview-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.orientation === Qt.Vertical}, - {"horizontal":control.orientation === Qt.Horizontal}, - {"disabled": !control.enabled}, - {"pressed": T.SplitHandle.pressed}, - {"mirrored": control.mirrored}, - {"hovered": T.SplitHandle.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/StackView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/StackView.qml deleted file mode 100644 index 27b9d77..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/StackView.qml +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.StackView { - id: control - - implicitWidth: implicitBackgroundWidth - implicitHeight: implicitBackgroundHeight - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - popEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - popExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } - } - - pushEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - pushExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - replaceEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - replaceExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - background: NinePatchImage { - source: Imagine.url + "stackview-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeDelegate.qml deleted file mode 100644 index 24f550c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeDelegate.qml +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "swipedelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeView.qml deleted file mode 100644 index c0bafd1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeView.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - } - - background: NinePatchImage { - source: Imagine.url + "swipeview-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"focused": control.contentItem.activeFocus}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Switch.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Switch.qml deleted file mode 100644 index c2d3f70..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Switch.qml +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: NinePatchImage { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) - height: Math.max(implicitHeight, handle.implicitHeight) - - source: control.Imagine.url + "switch-indicator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - property NinePatchImage handle: NinePatchImage { - readonly property real minPos: parent.leftPadding - leftPadding - readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding - readonly property real dragPos: control.visualPosition * parent.width - (width / 2) - - parent: control.indicator - - x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - source: control.Imagine.url + "switch-handle" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: control.Imagine.url + "switch-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwitchDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwitchDelegate.qml deleted file mode 100644 index ed8b93c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwitchDelegate.qml +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: NinePatchImage { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) - height: Math.max(implicitHeight, handle.implicitHeight) - - source: control.Imagine.url + "switchdelegate-indicator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - property NinePatchImage handle: NinePatchImage { - readonly property real minPos: parent.leftPadding - leftPadding - readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding - readonly property real dragPos: control.visualPosition * parent.width - (width / 2) - - parent: control.indicator - - x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - source: control.Imagine.url + "switchdelegate-handle" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: control.Imagine.url + "switchdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabBar.qml deleted file mode 100644 index a0086cb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabBar.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - } - - background: NinePatchImage { - source: Imagine.url + "tabbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"header": control.position === T.TabBar.Header }, - {"footer": control.position === T.TabBar.Footer }, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabButton.qml deleted file mode 100644 index 7b7a88c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabButton.qml +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "tabbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextArea.qml deleted file mode 100644 index d47ffff..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextArea.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Qt.AlignVCenter - placeholderTextColor: control.palette.placeholderText - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: NinePatchImage { - source: Imagine.url + "textarea-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextField.qml deleted file mode 100644 index 9c0ddd1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextField.qml +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - verticalAlignment: Qt.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: NinePatchImage { - source: Imagine.url + "textfield-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolBar.qml deleted file mode 100644 index 9e1467e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolBar.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "toolbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"header": control.position === T.ToolBar.Header }, - {"footer": control.position === T.ToolBar.Footer }, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolButton.qml deleted file mode 100644 index 13b4c9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolButton.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "toolbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"flat": control.flat}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolSeparator.qml deleted file mode 100644 index 4861e26..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolSeparator.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - source: Imagine.url + "toolseparator-separator" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "toolseparator-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolTip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolTip.qml deleted file mode 100644 index 841e5a3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolTip.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0) - y: -implicitHeight - (background ? background.topInset : 0) - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topMargin: background ? background.topInset : 0 - leftMargin: background ? background.leftInset : 0 - rightMargin: background ? background.rightInset : 0 - bottomMargin: background ? background.bottomInset : 0 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: NinePatchImage { - source: Imagine.url + "tooltip-background" - NinePatchImageSelector on source { - states: [ - // ### - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Tumbler.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Tumbler.qml deleted file mode 100644 index f349168..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Tumbler.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - readonly property real __delegateHeight: availableHeight / visibleItemCount - - delegate: Text { - text: modelData - font: control.font - color: control.palette.text - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property var modelData - required property int index - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.__delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } - - background: NinePatchImage { - source: Imagine.url + "tumbler-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.enabled && control.hovered} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/VerticalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/VerticalHeaderView.qml deleted file mode 100644 index 52a9bcb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/VerticalHeaderView.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T - -T.VerticalHeaderView { - id: control - - // The contentWidth of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit width of - // VerticalHeaderView should be the same as the content width in the end, we - // need to ensure that it has at least a width of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitWidth: Math.max(1, contentWidth) - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/OpacityMask.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/OpacityMask.qml deleted file mode 100644 index 3e78c15..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/OpacityMask.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick - -/* - A cross-graphics API implementation of QtGraphicalEffects' OpacityMask. - */ -Item { - id: rootItem - - property variant source - property variant maskSource - property bool cached: false - - ShaderEffectSource { - id: cacheItem - anchors.fill: parent - visible: rootItem.cached - smooth: true - sourceItem: shaderItem - live: true - hideSource: visible - } - - ShaderEffect { - id: shaderItem - property variant source: rootItem.source - property variant maskSource: rootItem.maskSource - - anchors.fill: parent - - fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/impl/shaders/OpacityMask.frag.qsb" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/QuickControls2ImagineStyleImpl.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/QuickControls2ImagineStyleImpl.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/QuickControls2ImagineStyleImpl.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/libqtquickcontrols2imaginestyleimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/libqtquickcontrols2imaginestyleimplplugin.so deleted file mode 100755 index 819e033..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/libqtquickcontrols2imaginestyleimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/qmldir deleted file mode 100644 index 5b36348..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Controls.Imagine.impl -linktarget Qt6::qtquickcontrols2imaginestyleimplplugin -optional plugin qtquickcontrols2imaginestyleimplplugin -classname QtQuickControls2ImagineStyleImplPlugin -typeinfo QuickControls2ImagineStyleImpl.qmltypes -import QtQuick.Controls.impl auto -prefer :/qt-project.org/imports/QtQuick/Controls/Imagine/impl/ -OpacityMask 6.0 OpacityMask.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/libqtquickcontrols2imaginestyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/libqtquickcontrols2imaginestyleplugin.so deleted file mode 100755 index 6ee5b5a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/libqtquickcontrols2imaginestyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/plugins.qmltypes deleted file mode 100644 index 177618d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/plugins.qmltypes +++ /dev/null @@ -1,48 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qquickattachedpropertypropagator.h" - name: "QQuickAttachedPropertyPropagator" - accessSemantics: "reference" - prototype: "QObject" - } - Component { - file: "private/qquickimaginestyle_p.h" - name: "QQuickImagineStyle" - accessSemantics: "reference" - prototype: "QQuickAttachedPropertyPropagator" - exports: [ - "QtQuick.Controls.Imagine/Imagine 2.3", - "QtQuick.Controls.Imagine/Imagine 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [515, 1536] - attachedType: "QQuickImagineStyle" - Property { - name: "path" - type: "QString" - read: "path" - write: "setPath" - reset: "resetPath" - notify: "pathChanged" - index: 0 - isFinal: true - } - Property { - name: "url" - type: "QUrl" - read: "url" - notify: "pathChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "pathChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/qmldir deleted file mode 100644 index adce0e5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Imagine/qmldir +++ /dev/null @@ -1,108 +0,0 @@ -module QtQuick.Controls.Imagine -linktarget Qt6::qtquickcontrols2imaginestyleplugin -plugin qtquickcontrols2imaginestyleplugin -classname QtQuickControls2ImagineStylePlugin -typeinfo plugins.qmltypes -import QtQuick.Controls.Basic auto -prefer :/qt-project.org/imports/QtQuick/Controls/Imagine/ -ApplicationWindow 6.0 ApplicationWindow.qml -ApplicationWindow 2.0 ApplicationWindow.qml -BusyIndicator 6.0 BusyIndicator.qml -BusyIndicator 2.0 BusyIndicator.qml -Button 6.0 Button.qml -Button 2.0 Button.qml -CheckBox 6.0 CheckBox.qml -CheckBox 2.0 CheckBox.qml -CheckDelegate 6.0 CheckDelegate.qml -CheckDelegate 2.0 CheckDelegate.qml -ComboBox 6.0 ComboBox.qml -ComboBox 2.0 ComboBox.qml -DelayButton 2.2 DelayButton.qml -DelayButton 6.0 DelayButton.qml -Dial 6.0 Dial.qml -Dial 2.0 Dial.qml -Dialog 2.1 Dialog.qml -Dialog 6.0 Dialog.qml -DialogButtonBox 2.1 DialogButtonBox.qml -DialogButtonBox 6.0 DialogButtonBox.qml -Drawer 6.0 Drawer.qml -Drawer 2.0 Drawer.qml -Frame 6.0 Frame.qml -Frame 2.0 Frame.qml -GroupBox 6.0 GroupBox.qml -GroupBox 2.0 GroupBox.qml -HorizontalHeaderView 2.15 HorizontalHeaderView.qml -HorizontalHeaderView 6.0 HorizontalHeaderView.qml -ItemDelegate 6.0 ItemDelegate.qml -ItemDelegate 2.0 ItemDelegate.qml -Label 6.0 Label.qml -Label 2.0 Label.qml -Menu 6.0 Menu.qml -Menu 2.0 Menu.qml -MenuItem 6.0 MenuItem.qml -MenuItem 2.0 MenuItem.qml -MenuSeparator 2.1 MenuSeparator.qml -MenuSeparator 6.0 MenuSeparator.qml -PageIndicator 6.0 PageIndicator.qml -PageIndicator 2.0 PageIndicator.qml -Page 6.0 Page.qml -Page 2.0 Page.qml -Pane 6.0 Pane.qml -Pane 2.0 Pane.qml -Popup 6.0 Popup.qml -Popup 2.0 Popup.qml -ProgressBar 6.0 ProgressBar.qml -ProgressBar 2.0 ProgressBar.qml -RadioButton 6.0 RadioButton.qml -RadioButton 2.0 RadioButton.qml -RadioDelegate 6.0 RadioDelegate.qml -RadioDelegate 2.0 RadioDelegate.qml -RangeSlider 6.0 RangeSlider.qml -RangeSlider 2.0 RangeSlider.qml -RoundButton 2.1 RoundButton.qml -RoundButton 6.0 RoundButton.qml -ScrollView 6.0 ScrollView.qml -ScrollView 2.0 ScrollView.qml -ScrollBar 6.0 ScrollBar.qml -ScrollBar 2.0 ScrollBar.qml -ScrollIndicator 6.0 ScrollIndicator.qml -ScrollIndicator 2.0 ScrollIndicator.qml -SelectionRectangle 6.0 SelectionRectangle.qml -SelectionRectangle 2.0 SelectionRectangle.qml -Slider 6.0 Slider.qml -Slider 2.0 Slider.qml -SpinBox 6.0 SpinBox.qml -SpinBox 2.0 SpinBox.qml -SplitView 2.13 SplitView.qml -SplitView 6.0 SplitView.qml -StackView 6.0 StackView.qml -StackView 2.0 StackView.qml -SwipeDelegate 6.0 SwipeDelegate.qml -SwipeDelegate 2.0 SwipeDelegate.qml -SwipeView 6.0 SwipeView.qml -SwipeView 2.0 SwipeView.qml -Switch 6.0 Switch.qml -Switch 2.0 Switch.qml -SwitchDelegate 6.0 SwitchDelegate.qml -SwitchDelegate 2.0 SwitchDelegate.qml -TextField 6.0 TextField.qml -TextField 2.0 TextField.qml -TextArea 6.0 TextArea.qml -TextArea 2.0 TextArea.qml -TabBar 6.0 TabBar.qml -TabBar 2.0 TabBar.qml -TabButton 6.0 TabButton.qml -TabButton 2.0 TabButton.qml -ToolBar 6.0 ToolBar.qml -ToolBar 2.0 ToolBar.qml -ToolButton 6.0 ToolButton.qml -ToolButton 2.0 ToolButton.qml -ToolSeparator 2.1 ToolSeparator.qml -ToolSeparator 6.0 ToolSeparator.qml -ToolTip 6.0 ToolTip.qml -ToolTip 2.0 ToolTip.qml -Tumbler 6.0 Tumbler.qml -Tumbler 2.0 Tumbler.qml -VerticalHeaderView 2.15 VerticalHeaderView.qml -VerticalHeaderView 6.0 VerticalHeaderView.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ApplicationWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ApplicationWindow.qml deleted file mode 100644 index 9ba9519..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ApplicationWindow.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ApplicationWindow { - id: window - - color: Material.backgroundColor -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/BusyIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/BusyIndicator.qml deleted file mode 100644 index 9de6535..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/BusyIndicator.qml +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - color: control.Material.accentColor - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Button.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Button.qml deleted file mode 100644 index 8ffe07b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Button.qml +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - bottomInset: 6 - verticalPadding: Material.buttonVerticalPadding - leftPadding: Material.buttonLeftPadding(flat, hasIcon && (display !== AbstractButton.TextOnly)) - rightPadding: Material.buttonRightPadding(flat, hasIcon && (display !== AbstractButton.TextOnly), - (text !== "") && (display !== AbstractButton.IconOnly)) - spacing: 8 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : - (control.flat && control.highlighted) || (control.checked && !control.highlighted) ? Material.accentColor : - highlighted ? Material.primaryHighlightedTextColor : Material.foreground - - readonly property bool hasIcon: icon.name.length > 0 || icon.source.toString().length > 0 - - Material.elevation: control.down ? 8 : 2 - Material.roundedScale: Material.FullScale - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - (control.flat && control.highlighted) || (control.checked && !control.highlighted) ? control.Material.accentColor : - control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground - } - - background: Rectangle { - implicitWidth: 64 - implicitHeight: control.Material.buttonHeight - - radius: control.Material.roundedScale === Material.FullScale ? height / 2 : control.Material.roundedScale - color: control.Material.buttonColor(control.Material.theme, control.Material.background, - control.Material.accent, control.enabled, control.flat, control.highlighted, control.checked) - - // The layer is disabled when the button color is transparent so you can do - // Material.background: "transparent" and get a proper flat button without needing - // to set Material.elevation as well - layer.enabled: control.enabled && color.a > 0 && !control.flat - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - - Ripple { - clip: true - clipRadius: parent.radius - width: parent.width - height: parent.height - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckBox.qml deleted file mode 100644 index b74fb00..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckBox.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: padding + 7 - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 28; height: 28 - - z: -1 - anchor: control - pressed: control.pressed - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckDelegate.qml deleted file mode 100644 index 0dead04..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckDelegate.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ComboBox.qml deleted file mode 100644 index 5694aa0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ComboBox.qml +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - Material.background: flat ? "transparent" : undefined - Material.foreground: flat ? undefined : Material.primaryTextColor - - delegate: MenuItem { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - Material.foreground: control.currentIndex === index ? ListView.view.contentItem.Material.accent : ListView.view.contentItem.Material.foreground - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/drop-indicator.png" - } - - contentItem: T.TextField { - leftPadding: Material.textFieldHorizontalPadding - topPadding: Material.textFieldVerticalPadding - bottomPadding: Material.textFieldVerticalPadding - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - selectionColor: control.Material.accentColor - selectedTextColor: control.Material.primaryHighlightedTextColor - verticalAlignment: Text.AlignVCenter - - cursorDelegate: CursorDelegate { } - } - - background: MaterialTextContainer { - implicitWidth: 120 - implicitHeight: control.Material.textFieldHeight - - outlineColor: (enabled && control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor - focusedOutlineColor: control.Material.accentColor - controlHasActiveFocus: control.activeFocus - controlHasText: true - horizontalPadding: control.Material.textFieldHorizontalPadding - } - - popup: T.Popup { - y: control.editable ? control.height - 5 : 0 - width: control.width - height: Math.min(contentItem.implicitHeight + verticalPadding * 2, control.Window.height - topMargin - bottomMargin) - transformOrigin: Item.Top - topMargin: 12 - bottomMargin: 12 - verticalPadding: 8 - - Material.theme: control.Material.theme - Material.accent: control.Material.accent - Material.primary: control.Material.primary - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - radius: 4 - color: parent.Material.dialogColor - - layer.enabled: control.enabled - layer.effect: RoundedElevationEffect { - elevation: 4 - roundedScale: Material.ExtraSmallScale - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DelayButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DelayButton.qml deleted file mode 100644 index b185505..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DelayButton.qml +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - bottomInset: 6 - padding: 12 - horizontalPadding: padding - 4 - - Material.elevation: control.down ? 8 : 2 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : control.Material.foreground - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state - background: Rectangle { - implicitWidth: 64 - implicitHeight: control.Material.buttonHeight - - radius: 2 - color: control.Material.buttonColor(control.Material.theme, control.Material.background, - control.Material.accent, control.enabled, false /*flat*/, false /*highlighted*/, false /*checked*/) - - PaddedRectangle { - y: parent.height - 4 - width: parent.width - height: 4 - radius: 2 - topPadding: -2 - clip: true - color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor - - PaddedRectangle { - width: parent.width * control.progress - height: 4 - radius: 2 - topPadding: -2 - rightPadding: Math.max(-2, width - parent.width) - clip: true - color: control.Material.accentColor - } - } - - layer.enabled: control.enabled && color.a > 0 && !control.flat - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - - Ripple { - clipRadius: 2 - width: parent.width - height: parent.height - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dial.qml deleted file mode 100644 index 465c1f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dial.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 100 - - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - color: "transparent" - radius: width / 2 - - border.color: control.enabled ? control.Material.accentColor : control.Material.hintTextColor - } - - handle: SliderHandle { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - transform: [ - Translate { - y: -control.background.height * 0.4 - + (control.handle ? control.handle.height / 2 : 0) - }, - Rotation { - angle: control.angle - origin.x: control.handle ? control.handle.width / 2 : 0 - origin.y: control.handle ? control.handle.height / 2 : 0 - } - ] - implicitWidth: 10 - implicitHeight: 10 - - value: control.value - handleHasFocus: control.visualFocus - handlePressed: control.pressed - handleHovered: control.hovered - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dialog.qml deleted file mode 100644 index 014fcc6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Dialog.qml +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - // https://m3.material.io/components/dialogs/specs#7dbad5e0-f001-4eae-a536-694aeca90ba6 - padding: 24 - topPadding: 16 - // https://m3.material.io/components/dialogs/guidelines#812cedf1-5c45-453f-97fc-7fd9bba7522b - modal: true - - // https://m3.material.io/components/dialogs/specs#401a48c3-f50c-4fa9-b798-701f5adcf155 - // Specs say level 3 (6 dp) is the default, yet the screenshots there show 0. Native Android defaults to non-zero. - Material.elevation: 6 - Material.roundedScale: Material.dialogRoundedScale - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - background: Rectangle { - // FullScale doesn't make sense for Dialog. - radius: control.Material.roundedScale - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - padding: 24 - bottomPadding: 0 - // TODO: QPlatformTheme::TitleBarFont - // https://m3.material.io/components/dialogs/specs#401a48c3-f50c-4fa9-b798-701f5adcf155 - font.pixelSize: Material.dialogTitleFontPixelSize - background: PaddedRectangle { - radius: control.background.radius - color: control.Material.dialogColor - bottomPadding: -radius - clip: true - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DialogButtonBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DialogButtonBox.qml deleted file mode 100644 index 55b2011..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/DialogButtonBox.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: 2 - alignment: Qt.AlignRight - buttonLayout: T.DialogButtonBox.AndroidLayout - - Material.foreground: Material.accent - Material.roundedScale: Material.ExtraLargeScale - - delegate: Button { flat: true } - - contentItem: ListView { - implicitWidth: contentWidth - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: PaddedRectangle { - implicitHeight: control.Material.dialogButtonBoxHeight - radius: control.Material.roundedScale - color: control.Material.dialogColor - // Rounded corners should be only at the top or at the bottom - topPadding: control.position === T.DialogButtonBox.Footer ? -radius : 0 - bottomPadding: control.position === T.DialogButtonBox.Header ? -radius : 0 - clip: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Drawer.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Drawer.qml deleted file mode 100644 index 915c98b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Drawer.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: edge !== Qt.TopEdge ? Material.roundedScale : 0 - bottomPadding: edge !== Qt.BottomEdge ? Material.roundedScale : 0 - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - // https://m3.material.io/components/navigation-drawer/specs#e616dc8f-d61a-4d56-a311-50c68ecda744 - Material.elevation: !interactive && !dim ? 0 : 1 - Material.roundedScale: Material.LargeScale - - background: PaddedRectangle { - // https://m3.material.io/components/navigation-drawer/specs#ce8bfbcf-3dec-45d2-9d8b-5e10af1cf87d - implicitWidth: 360 - color: control.Material.dialogColor - // FullScale doesn't make sense for Drawer. - radius: control.Material.roundedScale - leftPadding: edge === Qt.LeftEdge ? -radius : 0 - rightPadding: edge === Qt.RightEdge ? -radius : 0 - topPadding: edge === Qt.TopEdge ? -radius : 0 - bottomPadding: edge === Qt.BottomEdge ? -radius : 0 - clip: true - - layer.enabled: control.position > 0 && control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Frame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Frame.qml deleted file mode 100644 index da9cd65..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Frame.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - verticalPadding: Material.frameVerticalPadding - - Material.roundedScale: Material.ExtraSmallScale - - background: Rectangle { - radius: control.Material.roundedScale - color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" - border.color: control.Material.frameColor - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/GroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/GroupBox.qml deleted file mode 100644 index f0cee7c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/GroupBox.qml +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 12 - topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - bottomPadding: Material.frameVerticalPadding - - Material.roundedScale: Material.ExtraSmallScale - - label: Text { - x: Math.max(control.leftPadding, control.Material.roundedScale) - width: control.availableWidth - - text: control.title - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - radius: control.Material.roundedScale - color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" - border.color: control.Material.frameColor - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/HorizontalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/HorizontalHeaderView.qml deleted file mode 100644 index 76060d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/HorizontalHeaderView.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - // The contentHeight of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit height of - // HorizontalHeaderView should be the same as the content height in the end, we - // need to ensure that it has at least a height of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitHeight: Math.max(1, contentHeight) - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: control.Material.backgroundColor - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: enabled ? control.Material.foreground : control.Material.hintTextColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ItemDelegate.qml deleted file mode 100644 index f394106..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ItemDelegate.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Label.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Label.qml deleted file mode 100644 index ce4e01a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Label.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.Label { - id: control - - color: enabled ? Material.foreground : Material.hintTextColor - linkColor: Material.accentColor -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Menu.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Menu.qml deleted file mode 100644 index 641bb7c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Menu.qml +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - verticalPadding: 8 - - transformOrigin: !cascade ? Item.Top : (mirrored ? Item.TopRight : Item.TopLeft) - - Material.elevation: 4 - Material.roundedScale: Material.ExtraSmallScale - - delegate: MenuItem { } - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - contentItem: ListView { - implicitHeight: contentHeight - - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > control.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: control.Material.menuItemHeight - // FullScale doesn't make sense for Menu. - radius: control.Material.roundedScale - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBar.qml deleted file mode 100644 index c31b5b3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBar.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.Material.dialogColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBarItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBarItem.qml deleted file mode 100644 index 1ef4765..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBarItem.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 12 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.highlighted - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuItem.qml deleted file mode 100644 index 34e88a1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuItem.qml +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: Material.menuItemVerticalPadding - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - visible: control.checkable - control: control - checkState: control.checked ? Qt.Checked : Qt.Unchecked - } - - arrow: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png" - } - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: control.Material.menuItemHeight - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.highlighted - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuSeparator.qml deleted file mode 100644 index c0c9fb3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuSeparator.qml +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - verticalPadding: 8 - - contentItem: Rectangle { - implicitWidth: 200 - implicitHeight: 1 - color: control.Material.dividerColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Page.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Page.qml deleted file mode 100644 index f8a1804..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Page.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.Material.backgroundColor - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/PageIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/PageIndicator.qml deleted file mode 100644 index a64ab67..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/PageIndicator.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - delegate: Rectangle { - implicitWidth: 8 - implicitHeight: 8 - - radius: width / 2 - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - - // qmllint disable unqualified - // We can't make "pressed" a required property, as QQuickPageIndicator doesn't create - // the delegates, and so it can't set it as an initial property. - opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45 - - required property int index - - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Pane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Pane.qml deleted file mode 100644 index 80385a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Pane.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - Material.roundedScale: control.Material.elevation > 0 ? Material.ExtraSmallScale : Material.NotRounded - - background: Rectangle { - color: control.Material.backgroundColor - radius: control.Material.roundedScale - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Popup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Popup.qml deleted file mode 100644 index c161f23..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Popup.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - Material.elevation: 4 - Material.roundedScale: Material.ExtraSmallScale - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - background: Rectangle { - // FullScale doesn't make sense for Popup. - radius: control.Material.roundedScale - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: RoundedElevationEffect { - elevation: control.Material.elevation - roundedScale: control.background.radius - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ProgressBar.qml deleted file mode 100644 index 073088b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ProgressBar.qml +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 4 - - scale: control.mirrored ? -1 : 1 - color: control.Material.accentColor - progress: control.position - indeterminate: control.visible && control.indeterminate - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 4 - y: (control.height - height) / 2 - height: 4 - - color: Qt.rgba(control.Material.accentColor.r, control.Material.accentColor.g, control.Material.accentColor.b, 0.25) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioButton.qml deleted file mode 100644 index 00c9390..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioButton.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: padding + 6 - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 28; height: 28 - - z: -1 - anchor: control - pressed: control.pressed - active: control.down || control.visualFocus || control.hovered - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioDelegate.qml deleted file mode 100644 index ad9f954..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioDelegate.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RangeSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RangeSlider.qml deleted file mode 100644 index 7547d3d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RangeSlider.qml +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - // The RangeSlider is discrete if all of the following requirements are met: - // * stepSize is positive - // * snapMode is set to SnapAlways - // * the difference between to and from is cleanly divisible by the stepSize - // * the number of tick marks intended to be rendered is less than the width to height ratio, or vice versa for vertical sliders. - readonly property real __steps: Math.abs(to - from) / stepSize - readonly property bool __isDiscrete: stepSize >= Number.EPSILON - && snapMode === Slider.SnapAlways - && Math.abs(Math.round(__steps) - __steps) < Number.EPSILON - && Math.floor(__steps) < (horizontal ? background.width / background.height : background.height / background.width) - - first.handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - value: control.first.value - handleHasFocus: activeFocus - handlePressed: control.first.pressed - handleHovered: control.first.hovered - } - - second.handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - value: control.second.value - handleHasFocus: activeFocus - handlePressed: control.second.pressed - handleHovered: control.second.hovered - } - - background: Item { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 48 - implicitHeight: control.horizontal ? 48 : 200 - width: control.horizontal ? control.availableWidth : 4 - height: control.horizontal ? 4 : control.availableHeight - - Rectangle { - x: (control.horizontal ? (control.first.implicitHandleWidth / 2) - (control.__isDiscrete ? 2 : 0) : 0) - y: (control.horizontal ? 0 : (control.first.implicitHandleHeight / 2) - (control.__isDiscrete ? 2 : 0)) - width: parent.width - (control.horizontal ? (control.first.implicitHandleWidth - (control.__isDiscrete ? 4 : 0)) : 0) - height: parent.height - (control.horizontal ? 0 : (control.first.implicitHandleHeight - (control.__isDiscrete ? 4 : 0))) - scale: control.horizontal && control.mirrored ? -1 : 1 - radius: Math.min(width, height) / 2 - color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor - - Rectangle { - x: control.horizontal ? control.first.position * parent.width : 0 - y: control.horizontal ? 0 : control.second.visualPosition * parent.height - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 4 - height: control.horizontal ? 4 : control.second.position * parent.height - control.first.position * parent.height - radius: Math.min(width, height) / 2 - color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor - } - - // Declaring this as a property (in combination with the parent binding below) avoids ids, - // which prevent deferred execution. - property Repeater repeater: Repeater { - parent: control.background.children[0] - model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0 - delegate: Rectangle { - width: 2 - height: 2 - radius: 2 - x: control.horizontal ? (parent.width - width * 2) * currentPosition + (width / 2) : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : (parent.height - height * 2) * currentPosition + (height / 2) - color: (control.horizontal && control.first.visualPosition < currentPosition && control.second.visualPosition > currentPosition) - || (!control.horizontal && control.first.visualPosition > currentPosition && control.second.visualPosition < currentPosition) - ? control.Material.primaryHighlightedTextColor : control.Material.accentColor - - required property int index - readonly property real currentPosition: index / (parent.repeater.count - 1) - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RoundButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RoundButton.qml deleted file mode 100644 index 4e3db36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/RoundButton.qml +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - leftInset: 6 - rightInset: 6 - bottomInset: 6 - padding: 12 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : - flat && highlighted ? Material.accentColor : - highlighted ? Material.primaryHighlightedTextColor : Material.foreground - - Material.elevation: control.down ? 8 : 2 - Material.background: flat ? "transparent" : undefined - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - control.flat && control.highlighted ? control.Material.accentColor : - control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground - } - - // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state - background: Rectangle { - implicitWidth: control.Material.buttonHeight - implicitHeight: control.Material.buttonHeight - - radius: control.radius - color: control.Material.buttonColor(control.Material.theme, control.Material.background, - control.Material.accent, control.enabled, control.flat, control.highlighted, false /*checked*/) - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - visible: enabled && (control.hovered || control.visualFocus) - color: control.Material.rippleColor - } - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - visible: control.down - color: control.Material.rippleColor - } - - // The layer is disabled when the button color is transparent so that you can do - // Material.background: "transparent" and get a proper flat button without needing - // to set Material.elevation as well - layer.enabled: control.enabled && color.a > 0 && !control.flat - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollBar.qml deleted file mode 100644 index b377f40..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollBar.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: control.interactive ? 1 : 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation === Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 13 : 4 - implicitHeight: control.interactive ? 13 : 4 - - color: control.pressed ? control.Material.scrollBarPressedColor : - control.interactive && control.hovered ? control.Material.scrollBarHoveredColor : control.Material.scrollBarColor - opacity: 0.0 - } - - background: Rectangle { - implicitWidth: control.interactive ? 16 : 4 - implicitHeight: control.interactive ? 16 : 4 - color: "#0e000000" - opacity: 0.0 - visible: control.interactive - } - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 2450 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollIndicator.qml deleted file mode 100644 index 71f7eea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollIndicator.qml +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 4 - implicitHeight: 4 - - color: control.Material.scrollBarColor - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { control.contentItem.opacity: 0.75 } - } - - transitions: [ - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 450 } - NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } - } - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollView.qml deleted file mode 100644 index 6078931..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollView.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SelectionRectangle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SelectionRectangle.qml deleted file mode 100644 index 4e1b425..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SelectionRectangle.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SelectionRectangle { - id: control - - topLeftHandle: handle - bottomRightHandle: handle - - Component { - id: handle - SliderHandle { - palette: SelectionRectangle.control.palette - handlePressed: tapHandler.pressed || SelectionRectangle.dragging - handleHovered: hoverHandler.hovered - visible: SelectionRectangle.control.active - - HoverHandler { - id: hoverHandler - } - - TapHandler { - id: tapHandler - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Slider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Slider.qml deleted file mode 100644 index 817b302..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Slider.qml +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - // The Slider is discrete if all of the following requirements are met: - // * stepSize is positive - // * snapMode is set to SnapAlways - // * the difference between to and from is cleanly divisible by the stepSize - // * the number of tick marks intended to be rendered is less than the width to height ratio, or vice versa for vertical sliders. - readonly property real __steps: Math.abs(to - from) / stepSize - readonly property bool __isDiscrete: stepSize >= Number.EPSILON - && snapMode === Slider.SnapAlways - && Math.abs(Math.round(__steps) - __steps) < Number.EPSILON - && Math.floor(__steps) < (horizontal ? background.width / background.height : background.height / background.width) - - handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - value: control.value - handleHasFocus: control.visualFocus - handlePressed: control.pressed - handleHovered: control.hovered - } - - background: Item { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 48 - implicitHeight: control.horizontal ? 48 : 200 - width: control.horizontal ? control.availableWidth : 4 - height: control.horizontal ? 4 : control.availableHeight - - Rectangle { - x: (control.horizontal ? (control.implicitHandleWidth / 2) - (control.__isDiscrete ? 2 : 0) : 0) - y: (control.horizontal ? 0 : (control.implicitHandleHeight / 2) - (control.__isDiscrete ? 2 : 0)) - width: parent.width - (control.horizontal ? (control.implicitHandleWidth - (control.__isDiscrete ? 4 : 0)) : 0) - height: parent.height - (control.horizontal ? 0 : (control.implicitHandleHeight - (control.__isDiscrete ? 4 : 0))) - scale: control.horizontal && control.mirrored ? -1 : 1 - radius: Math.min(width, height) / 2 - color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 4 - height: control.horizontal ? 4 : control.position * parent.height - radius: Math.min(width, height) / 2 - color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor - } - - // Declaring this as a property (in combination with the parent binding below) avoids ids, - // which prevent deferred execution. - property Repeater repeater: Repeater { - parent: control.background.children[0] - model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0 - delegate: Rectangle { - width: 2 - height: 2 - radius: 2 - x: control.horizontal ? (parent.width - width * 2) * currentPosition + (width / 2) : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : (parent.height - height * 2) * currentPosition + (height / 2) - color: (control.horizontal && control.visualPosition > currentPosition) - || (!control.horizontal && control.visualPosition <= currentPosition) - ? control.Material.primaryHighlightedTextColor : control.Material.accentColor - - required property int index - readonly property real currentPosition: index / (parent.repeater.count - 1) - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SpinBox.qml deleted file mode 100644 index 44fd59f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SpinBox.qml +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SpinBox { - id: control - - // Note: the width of the indicators are calculated into the padding - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - up.implicitIndicatorHeight, down.implicitIndicatorHeight) - - spacing: 6 - topPadding: Material.textFieldVerticalPadding - bottomPadding: Material.textFieldVerticalPadding - leftPadding: control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0) - rightPadding: control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - - font: control.font - color: enabled ? control.Material.foreground : control.Material.hintTextColor - selectionColor: control.Material.textSelectionColor - selectedTextColor: control.Material.foreground - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - cursorDelegate: CursorDelegate { } - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - clip: width < implicitWidth - } - - up.indicator: Item { - x: control.mirrored ? 0 : control.width - width - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - height: control.height - width: height - - Ripple { - clipRadius: 2 - x: control.spacing - y: control.spacing - width: parent.width - 2 * control.spacing - height: parent.height - 2 * control.spacing - pressed: control.up.pressed - active: control.up.pressed || control.up.hovered || control.visualFocus - color: control.Material.rippleColor - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: Math.min(parent.width / 3, parent.height / 3) - height: 2 - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 2 - height: Math.min(parent.width / 3, parent.height / 3) - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - } - - down.indicator: Item { - x: control.mirrored ? control.width - width : 0 - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - height: control.height - width: height - - Ripple { - clipRadius: 2 - x: control.spacing - y: control.spacing - width: parent.width - 2 * control.spacing - height: parent.height - 2 * control.spacing - pressed: control.down.pressed - active: control.down.pressed || control.down.hovered || control.visualFocus - color: control.Material.rippleColor - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - } - - background: MaterialTextContainer { - implicitWidth: 140 - implicitHeight: control.Material.textFieldHeight - - outlineColor: (enabled && control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor - focusedOutlineColor: control.Material.accentColor - controlHasActiveFocus: control.activeFocus - controlHasText: true - horizontalPadding: control.Material.textFieldHorizontalPadding - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SplitView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SplitView.qml deleted file mode 100644 index 0c53a0f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SplitView.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.Material.background - : Qt.lighter(control.Material.background, T.SplitHandle.hovered ? 1.2 : 1.1) - - Rectangle { - color: control.Material.secondaryTextColor - width: control.orientation === Qt.Horizontal ? thickness : length - height: control.orientation === Qt.Horizontal ? length : thickness - radius: thickness - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - - property int length: parent.T.SplitHandle.pressed ? 3 : 8 - readonly property int thickness: parent.T.SplitHandle.pressed ? 3 : 1 - - Behavior on length { - NumberAnimation { - duration: 100 - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/StackView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/StackView.qml deleted file mode 100644 index c318244..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/StackView.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.StackView { - id: control - - component LineAnimation: NumberAnimation { - duration: 200 - easing.type: Easing.OutCubic - } - - component FadeIn: LineAnimation { - property: "opacity" - from: 0.0 - to: 1.0 - } - - component FadeOut: LineAnimation { - property: "opacity" - from: 1.0 - to: 0.0 - } - - popEnter: Transition { - // slide_in_left - LineAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0 } - FadeIn {} - } - - popExit: Transition { - // slide_out_right - LineAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width } - FadeOut {} - } - - pushEnter: Transition { - // slide_in_right - LineAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0 } - FadeIn {} - } - - pushExit: Transition { - // slide_out_left - LineAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width } - FadeOut {} - } - - replaceEnter: Transition { - // slide_in_right - LineAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0 } - FadeIn {} - } - - replaceExit: Transition { - // slide_out_left - LineAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width } - FadeOut {} - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeDelegate.qml deleted file mode 100644 index d445daf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeDelegate.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.Material.backgroundColor - - Rectangle { - width: parent.width - height: parent.height - visible: control.highlighted - color: control.Material.listHighlightColor - } - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - enabled: control.swipe.position === 0 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeView.qml deleted file mode 100644 index 72e63dd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeView.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Switch.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Switch.qml deleted file mode 100644 index 29a1297..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Switch.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Templates as T - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 8 - spacing: 8 - - icon.width: 16 - icon.height: 16 - icon.color: checked - ? (Material.theme === Material.Light - ? enabled ? Qt.darker(Material.switchCheckedTrackColor, 1.8) : Material.switchDisabledCheckedIconColor - : enabled ? Material.primaryTextColor : Material.switchDisabledCheckedIconColor) - : enabled ? Material.switchUncheckedTrackColor : Material.switchDisabledUncheckedIconColor - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: parent.handle.x + parent.handle.width / 2 - width / 2 - y: parent.handle.y + parent.handle.height / 2 - height / 2 - width: 28 - height: 28 - pressed: control.pressed - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwitchDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwitchDelegate.qml deleted file mode 100644 index 3942388..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/SwitchDelegate.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: Material.switchDelegateVerticalPadding - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabBar.qml deleted file mode 100644 index 5daffc9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabBar.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 250 - highlightResizeDuration: 0 - highlightFollowsCurrentItem: true - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - - highlight: Item { - z: 2 - Rectangle { - height: 2 - width: parent.width - y: control.position === T.TabBar.Footer ? 0 : parent.height - height - color: control.Material.accentColor - } - } - } - - background: Rectangle { - color: control.Material.backgroundColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - fullWidth: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabButton.qml deleted file mode 100644 index a57f652..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TabButton.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : down || checked ? Material.accentColor : Material.foreground - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.foreground - } - - background: Ripple { - implicitHeight: control.Material.touchTarget - - clip: true - pressed: control.pressed - anchor: control - active: enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextArea.qml deleted file mode 100644 index 99efa22..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextArea.qml +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset) - - // If we're clipped, or we're in a Flickable that's clipped, set our topInset - // to half the height of the placeholder text to avoid it being clipped. - topInset: clip || (parent?.parent as Flickable && parent?.parent.clip) ? placeholder.largestHeight / 2 : 0 - - leftPadding: Material.textFieldHorizontalPadding - rightPadding: Material.textFieldHorizontalPadding - // Need to account for the placeholder text when it's sitting on top. - topPadding: Material.containerStyle === Material.Filled && placeholderText.length > 0 && (activeFocus || length > 0) - ? Material.textFieldVerticalPadding + placeholder.largestHeight - // When the condition above is not met, the text should always sit in the middle - // of a default-height TextArea, which is just near the top for a higher-than-default one. - // Account for any topInset as well, otherwise the text will be too close to the background. - : ((implicitBackgroundHeight - placeholder.largestHeight) / 2) + topInset - bottomPadding: Material.textFieldVerticalPadding - - color: enabled ? Material.foreground : Material.hintTextColor - selectionColor: Material.accentColor - selectedTextColor: Material.primaryHighlightedTextColor - placeholderTextColor: enabled && activeFocus ? Material.accentColor : Material.hintTextColor - - Material.containerStyle: Material.Outlined - - cursorDelegate: CursorDelegate { } - - FloatingPlaceholderText { - id: placeholder - // Don't set this to control.leftPadding, because we don't want it to change if the user changes leftPadding. - x: control.Material.textFieldHorizontalPadding - width: control.width - (control.leftPadding + control.rightPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - elide: Text.ElideRight - renderType: control.renderType - // When the TextArea is in a Flickable, the background is reparented to it - // so that decorations don't move with the content. We need to do the same. - // Also allow the background to be set to null; in that case we're just not visible. - parent: control.background?.parent ?? null - - filled: control.Material.containerStyle === Material.Filled - verticalPadding: control.Material.textFieldVerticalPadding - controlHasActiveFocus: control.activeFocus - controlHasText: control.length > 0 - controlImplicitBackgroundHeight: control.implicitBackgroundHeight - controlHeight: control.height - } - - background: MaterialTextContainer { - implicitWidth: 120 - implicitHeight: control.Material.textFieldHeight - - filled: control.Material.containerStyle === Material.Filled - fillColor: control.Material.textFieldFilledContainerColor - outlineColor: (enabled && control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor - focusedOutlineColor: control.Material.accentColor - // When the control's size is set larger than its implicit size, use whatever size is smaller - // so that the gap isn't too big. - placeholderTextWidth: Math.min(placeholder.width, placeholder.implicitWidth) * placeholder.scale - placeholderTextHAlign: control.effectiveHorizontalAlignment - controlHasActiveFocus: control.activeFocus - controlHasText: control.length > 0 - placeholderHasText: placeholder.text.length > 0 - horizontalPadding: control.Material.textFieldHorizontalPadding - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextField.qml deleted file mode 100644 index 9294146..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TextField.qml +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - // If we're clipped, set topInset to half the height of the placeholder text to avoid it being clipped. - topInset: clip ? placeholder.largestHeight / 2 : 0 - - leftPadding: Material.textFieldHorizontalPadding - rightPadding: Material.textFieldHorizontalPadding - // Need to account for the placeholder text when it's sitting on top. - topPadding: Material.containerStyle === Material.Filled - ? placeholderText.length > 0 && (activeFocus || length > 0) - ? Material.textFieldVerticalPadding + placeholder.largestHeight - : Material.textFieldVerticalPadding - // Account for any topInset (used to avoid floating placeholder text being clipped), - // otherwise the text will be too close to the background. - : Material.textFieldVerticalPadding + topInset - bottomPadding: Material.textFieldVerticalPadding - - color: enabled ? Material.foreground : Material.hintTextColor - selectionColor: Material.accentColor - selectedTextColor: Material.primaryHighlightedTextColor - placeholderTextColor: enabled && activeFocus ? Material.accentColor : Material.hintTextColor - verticalAlignment: TextInput.AlignVCenter - - Material.containerStyle: Material.Outlined - - cursorDelegate: CursorDelegate { } - - FloatingPlaceholderText { - id: placeholder - // Don't set this to control.leftPadding, because we don't want it to change if the user changes leftPadding. - x: control.Material.textFieldHorizontalPadding - width: control.width - (control.leftPadding + control.rightPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - elide: Text.ElideRight - renderType: control.renderType - - filled: control.Material.containerStyle === Material.Filled - verticalPadding: control.Material.textFieldVerticalPadding - controlHasActiveFocus: control.activeFocus - controlHasText: control.length > 0 - controlImplicitBackgroundHeight: control.implicitBackgroundHeight - controlHeight: control.height - } - - background: MaterialTextContainer { - implicitWidth: 120 - implicitHeight: control.Material.textFieldHeight - - filled: control.Material.containerStyle === Material.Filled - fillColor: control.Material.textFieldFilledContainerColor - outlineColor: (enabled && control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor - focusedOutlineColor: control.Material.accentColor - // When the control's size is set larger than its implicit size, use whatever size is smaller - // so that the gap isn't too big. - placeholderTextWidth: Math.min(placeholder.width, placeholder.implicitWidth) * placeholder.scale - placeholderTextHAlign: control.effectiveHorizontalAlignment - controlHasActiveFocus: control.activeFocus - controlHasText: control.length > 0 - placeholderHasText: placeholder.text.length > 0 - horizontalPadding: control.Material.textFieldHorizontalPadding - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolBar.qml deleted file mode 100644 index 71eb568..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolBar.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ToolBar { - id: control - - Material.elevation: 0 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - Material.foreground: Material.toolTextColor - - spacing: 16 - - background: Rectangle { - implicitHeight: 48 - color: control.Material.toolBarColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - fullWidth: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolButton.qml deleted file mode 100644 index ac397ed..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolButton.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : checked || highlighted ? Material.accent : Material.foreground - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - control.checked || control.highlighted ? control.Material.accent : control.Material.foreground - } - - background: Ripple { - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - - readonly property bool square: control.contentItem.width <= control.contentItem.height - - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - clip: !square - width: square ? parent.height / 2 : parent.width - height: square ? parent.height / 2 : parent.height - pressed: control.pressed - anchor: control - active: control.enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolSeparator.qml deleted file mode 100644 index 456067a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolSeparator.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - horizontalPadding: vertical ? 12 : 5 - verticalPadding: vertical ? 5 : 12 - - contentItem: Rectangle { - implicitWidth: control.vertical ? 1 : 38 - implicitHeight: control.vertical ? 38 : 1 - color: control.Material.hintTextColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolTip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolTip.qml deleted file mode 100644 index b944c23..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolTip.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 24 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 12 - padding: 8 - horizontalPadding: padding + 8 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - Material.theme: Material.Dark - - enter: Transition { - // toast_enter - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad; duration: 500 } - } - - exit: Transition { - // toast_exit - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.InQuad; duration: 500 } - } - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.Material.foreground - } - - background: Rectangle { - implicitHeight: control.Material.tooltipHeight - color: control.Material.tooltipColor - opacity: 0.9 - radius: 2 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TreeViewDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TreeViewDelegate.qml deleted file mode 100644 index 7a9976b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/TreeViewDelegate.qml +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material - -T.TreeViewDelegate { - id: control - - implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin - implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight) - - indentation: indicator ? indicator.width : 12 - leftMargin: 16 - rightMargin: 16 - spacing: 14 - - topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0 - leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth - - highlighted: control.selected || control.current - || ((control.treeView.selectionBehavior === TableView.SelectRows - || control.treeView.selectionBehavior === TableView.SelectionDisabled) - && control.row === control.treeView.currentRow) - - required property int row - required property var model - readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0) - - indicator: Item { - readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation) - x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width - y: (control.height - height) / 2 - implicitWidth: Math.max(arrow.implicitWidth, 20) - implicitHeight: control.Material.buttonHeight - - property ColorImage arrow : ColorImage { - parent: control.indicator - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0) - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png" - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - defaultColor: "#353637" - } - } - - background: Rectangle { - implicitHeight: control.Material.buttonHeight - color: control.highlighted - ? control.Material.accentColor - : (control.treeView.alternatingRows && control.row % 2 !== 0 - ? control.Material.background - // The Material.shade() is used as the alternate background color for rows - // based on the Material.theme value. - : control.Material.shade(control.Material.background, - control.Material.theme === Material.Dark - ? Material.Shade100 // the lighter background color - : Material.Shade700 // the darker background color - )) - } - - contentItem: Label { - text: control.model.display - elide: Text.ElideRight - visible: !control.editing - } - - // The edit delegate is a separate component, and doesn't need - // to follow the same strict rules that are applied to a control. - // qmllint disable attached-property-reuse - // qmllint disable controls-attached-property-reuse - // qmllint disable controls-sanity - TableView.editDelegate: FocusScope { - width: parent.width - height: parent.height - - readonly property int __role: { - let model = control.treeView.model - let index = control.treeView.index(row, column) - let editText = model.data(index, Qt.EditRole) - return editText !== undefined ? Qt.EditRole : Qt.DisplayRole - } - - TextField { - id: textField - x: control.contentItem.x - y: (parent.height - height) / 2 - width: control.contentItem.width - text: control.treeView.model.data(control.treeView.index(row, column), __role) - focus: true - } - - TableView.onCommit: { - let index = TableView.view.index(row, column) - TableView.view.model.setData(index, textField.text, __role) - } - - Component.onCompleted: textField.selectAll() - } - // qmllint enable attached-property-reuse - // qmllint enable controls-attached-property-reuse - // qmllint enable controls-sanity -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Tumbler.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Tumbler.qml deleted file mode 100644 index 48d0c2e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/Tumbler.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - readonly property real __delegateHeight: availableHeight / visibleItemCount - - delegate: Text { - text: modelData - color: control.Material.foreground - font: control.font - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property var modelData - required property int index - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.__delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/VerticalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/VerticalHeaderView.qml deleted file mode 100644 index 0646f61..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/VerticalHeaderView.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.VerticalHeaderView { - id: control - - // The contentWidth of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit width of - // VerticalHeaderView should be the same as the content width in the end, we - // need to ensure that it has at least a width of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitWidth: Math.max(1, contentWidth) - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: control.Material.backgroundColor - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: enabled ? control.Material.foreground : control.Material.hintTextColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/BoxShadow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/BoxShadow.qml deleted file mode 100644 index d702389..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/BoxShadow.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -/* - A implementation of CSS's box-shadow, used by ElevationEffect for a Material Design - elevation shadow effect. - */ -RectangularGlow { - // The 4 properties from CSS box-shadow, plus the inherited color property - property int offsetX - property int offsetY - property int blurRadius - property int spreadRadius - - // The strength of the shadow. We have this because RectangularGlow spreads - // out the shadow thinly, whereas lower elevation levels in Material 3 - // are less spread out and stronger. This is only used for items with fully-rounded - // corners, like buttons. - property real strength - - // The source item the shadow is being applied to, used for correctly - // calculating the corner radious - property Item source - - property bool fullWidth - property bool fullHeight - - // qmllint disable unqualified - // Intentionally duck-typed (QTBUG-94807) - readonly property real sourceRadius: source && source.radius || 0 - - x: (parent.width - width)/2 + offsetX - y: (parent.height - height)/2 + offsetY - - implicitWidth: source ? source.width : parent.width - implicitHeight: source ? source.height : parent.height - - width: implicitWidth + 2 * spreadRadius + (fullWidth ? 2 * cornerRadius : 0) - height: implicitHeight + 2 * spreadRadius + (fullHeight ? 2 * cornerRadius : 0) - glowRadius: blurRadius/2 - spread: strength - - cornerRadius: blurRadius + sourceRadius -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CheckIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CheckIndicator.qml deleted file mode 100644 index b09567c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CheckIndicator.qml +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Rectangle { - id: indicatorItem - implicitWidth: 18 - implicitHeight: 18 - color: "transparent" - border.color: !control.enabled ? control.Material.hintTextColor - : checkState !== Qt.Unchecked ? control.Material.accentColor : control.Material.secondaryTextColor - border.width: checkState !== Qt.Unchecked ? width / 2 : 2 - radius: 2 - - property Item control - property int checkState: control.checkState - - Behavior on border.width { - NumberAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - Behavior on border.color { - ColorAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - // TODO: This needs to be transparent - Image { - id: checkImage - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 14 - height: 14 - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/check.png" - fillMode: Image.PreserveAspectFit - - scale: indicatorItem.checkState === Qt.Checked ? 1 : 0 - Behavior on scale { NumberAnimation { duration: 100 } } - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 12 - height: 3 - - scale: indicatorItem.checkState === Qt.PartiallyChecked ? 1 : 0 - Behavior on scale { NumberAnimation { duration: 100 } } - } - - states: [ - State { - name: "checked" - when: indicatorItem.checkState === Qt.Checked - }, - State { - name: "partiallychecked" - when: indicatorItem.checkState === Qt.PartiallyChecked - } - ] - - transitions: Transition { - SequentialAnimation { - NumberAnimation { - target: indicatorItem - property: "scale" - // Go down 2 pixels in size. - to: 1 - 2 / indicatorItem.width - duration: 120 - } - NumberAnimation { - target: indicatorItem - property: "scale" - to: 1 - duration: 120 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CursorDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CursorDelegate.qml deleted file mode 100644 index d1ef157..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CursorDelegate.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material - -Rectangle { - id: cursor - - color: parent.Material.accentColor - width: 2 - visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd - - Connections { - target: cursor.parent - function onCursorPositionChanged() { - // keep a moving cursor visible - cursor.opacity = 1 - timer.restart() - } - } - - Timer { - id: timer - running: cursor.parent.activeFocus && !cursor.parent.readOnly && interval != 0 - repeat: true - interval: Application.styleHints.cursorFlashTime / 2 - onTriggered: cursor.opacity = !cursor.opacity ? 1 : 0 - // force the cursor visible when gaining focus - onRunningChanged: cursor.opacity = 1 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/ElevationEffect.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/ElevationEffect.qml deleted file mode 100644 index 29ec742..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/ElevationEffect.qml +++ /dev/null @@ -1,256 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -/* - An effect for standard Material Design elevation shadows. Useful for using as \c layer.effect. - */ -Item { - id: effect - - /* - The source the effect is applied to. - */ - property var source - - /* - The elevation of the \l source Item. - */ - property int elevation: 0 - - /* - Set to \c true if the \l source Item is the same width as its parent and the shadow - should be full width instead of rounding around the corner of the Item. - - \sa fullHeight - */ - property bool fullWidth: false - - /* - Set to \c true if the \l source Item is the same height as its parent and the shadow - should be full height instead of rounding around the corner of the Item. - - \sa fullWidth - */ - property bool fullHeight: false - - /* - \internal - - The actual source Item the effect is applied to. - */ - readonly property Item sourceItem: source.sourceItem - - /* - * The following shadow values are taken from Angular Material - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Google, Inc. http://angularjs.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /* - \internal - - The shadows to use for each possible elevation. There are three shadows that when combined - make up the elevation. - */ - property var _shadows: _defaultShadows - - readonly property var _defaultShadows: [ - { // 0 - angularValues: [ - {offset: 0, blur: 0, spread: 0}, - {offset: 0, blur: 0, spread: 0}, - {offset: 0, blur: 0, spread: 0} - ], - strength: 0.05 - }, - { // 1 - angularValues: [ - {offset: 1, blur: 3, spread: 0}, - {offset: 1, blur: 1, spread: 0}, - {offset: 2, blur: 1, spread: -1} - ], - strength: 0.05 - }, - { // 2 - angularValues: [ - {offset: 1, blur: 5, spread: 0}, - {offset: 2, blur: 2, spread: 0}, - {offset: 3, blur: 1, spread: -2} - ], - strength: 0.05 - }, - { // 3 - angularValues: [ - {offset: 1, blur: 8, spread: 0}, - {offset: 3, blur: 4, spread: 0}, - {offset: 3, blur: 3, spread: -2} - ], - strength: 0.05 - }, - { // 4 - angularValues: [ - {offset: 2, blur: 4, spread: -1}, - {offset: 4, blur: 5, spread: 0}, - {offset: 1, blur: 10, spread: 0} - ], - strength: 0.05 - }, - { // 5 - angularValues: [ - {offset: 3, blur: 5, spread: -1}, - {offset: 5, blur: 8, spread: 0}, - {offset: 1, blur: 14, spread: 0} - ], - strength: 0.05 - }, - { // 6 - angularValues: [ - {offset: 3, blur: 5, spread: -1}, - {offset: 6, blur: 10, spread: 0}, - {offset: 1, blur: 18, spread: 0} - ], - strength: 0.05 - }, - { // 7 - angularValues: [ - {offset: 4, blur: 5, spread: -2}, - {offset: 7, blur: 10, spread: 1}, - {offset: 2, blur: 16, spread: 1} - ], - strength: 0.05 - }, - { // 8 - angularValues: [ - {offset: 5, blur: 5, spread: -3}, - {offset: 8, blur: 10, spread: 1}, - {offset: 3, blur: 14, spread: 2} - ], - strength: 0.05 - }, - { // 9 - angularValues: [ - {offset: 5, blur: 6, spread: -3}, - {offset: 9, blur: 12, spread: 1}, - {offset: 3, blur: 16, spread: 2} - ], - strength: 0.05 - }, - { // 10 - angularValues: [ - {offset: 6, blur: 6, spread: -3}, - {offset: 10, blur: 14, spread: 1}, - {offset: 4, blur: 18, spread: 3} - ], - strength: 0.05 - }, - { // 11 - angularValues: [ - {offset: 6, blur: 7, spread: -4}, - {offset: 11, blur: 15, spread: 1}, - {offset: 4, blur: 20, spread: 3} - ], - strength: 0.05 - }, - { // 12 - angularValues: [ - {offset: 7, blur: 8, spread: -4}, - {offset: 12, blur: 17, spread: 2}, - {offset: 5, blur: 22, spread: 4} - ], - strength: 0.05 - } - ] - - /* - \internal - - The current shadow based on the elevation. - */ - readonly property var _shadow: _shadows[Math.max(0, Math.min(elevation, _shadows.length - 1))] - - // Nest the shadows and source view in two items rendered as a layer - // so the shadow is not clipped by the bounds of the source view - Item { - property int margin: -100 - - x: margin - y: margin - width: parent.width - 2 * margin - height: parent.height - 2 * margin - - // By rendering as a layer, the shadow will never show through the source item, - // even when the source item's opacity is less than 1 - layer.enabled: true - - // The box shadows automatically pick up the size of the source Item and not - // the size of the parent, so we don't need to worry about the extra padding - // in the parent Item - BoxShadow { - offsetY: effect._shadow.angularValues[0].offset - blurRadius: effect._shadow.angularValues[0].blur - spreadRadius: effect._shadow.angularValues[0].spread - strength: effect._shadow.strength - color: Qt.rgba(0,0,0, 0.2) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - BoxShadow { - offsetY: effect._shadow.angularValues[1].offset - blurRadius: effect._shadow.angularValues[1].blur - spreadRadius: effect._shadow.angularValues[1].spread - strength: effect._shadow.strength - color: Qt.rgba(0,0,0, 0.14) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - BoxShadow { - offsetY: effect._shadow.angularValues[2].offset - blurRadius: effect._shadow.angularValues[2].blur - spreadRadius: effect._shadow.angularValues[2].spread - strength: effect._shadow.strength - color: Qt.rgba(0,0,0, 0.12) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - ShaderEffect { - property alias source: effect.source - - x: (parent.width - width)/2 - y: (parent.height - height)/2 - width: effect.sourceItem.width - height: effect.sourceItem.height - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RadioIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RadioIndicator.qml deleted file mode 100644 index 2cf46a6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RadioIndicator.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - radius: width / 2 - border.width: 2 - border.color: targetColor - color: "transparent" - - // Store the target color in a separate property, because there are two animations that depend on it. - readonly property color targetColor: !control.enabled ? control.Material.hintTextColor - : control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor - - property T.AbstractButton control - - Behavior on border.color { - ColorAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 10 - height: 10 - radius: width / 2 - color: indicator.targetColor - scale: indicator.control.checked || indicator.control.down ? 1 : 0 - - Behavior on color { - ColorAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - Behavior on scale { - NumberAnimation { - duration: 100 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RectangularGlow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RectangularGlow.qml deleted file mode 100644 index 5fc649c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RectangularGlow.qml +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick - -/* - A cross-graphics API implementation of QtGraphicalEffects' RectangularGlow. - */ -Item { - id: rootItem - - /* - This property defines how many pixels outside the item area are reached - by the glow. - - The value ranges from 0.0 (no glow) to inf (infinite glow). By default, - the property is set to \c 0.0. - - \table - \header - \li Output examples with different glowRadius values - \li - \li - \row - \li \image RectangularGlow_glowRadius1.png - \li \image RectangularGlow_glowRadius2.png - \li \image RectangularGlow_glowRadius3.png - \row - \li \b { glowRadius: 10 } - \li \b { glowRadius: 20 } - \li \b { glowRadius: 40 } - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - - */ - property real glowRadius: 0.0 - - /* - This property defines how large part of the glow color is strenghtened - near the source edges. - - The value ranges from 0.0 (no strenght increase) to 1.0 (maximum - strenght increase). By default, the property is set to \c 0.0. - - \table - \header - \li Output examples with different spread values - \li - \li - \row - \li \image RectangularGlow_spread1.png - \li \image RectangularGlow_spread2.png - \li \image RectangularGlow_spread3.png - \row - \li \b { spread: 0.0 } - \li \b { spread: 0.5 } - \li \b { spread: 1.0 } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - */ - property real spread: 0.0 - - /* - This property defines the RGBA color value which is used for the glow. - - By default, the property is set to \c "white". - - \table - \header - \li Output examples with different color values - \li - \li - \row - \li \image RectangularGlow_color1.png - \li \image RectangularGlow_color2.png - \li \image RectangularGlow_color3.png - \row - \li \b { color: #ffffff } - \li \b { color: #55ff55 } - \li \b { color: #5555ff } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - */ - property color color: "white" - - /* - This property defines the corner radius that is used to draw a glow with - rounded corners. - - The value ranges from 0.0 to half of the effective width or height of - the glow, whichever is smaller. This can be calculated with: \c{ - min(width, height) / 2.0 + glowRadius} - - By default, the property is bound to glowRadius property. The glow - behaves as if the rectangle was blurred when adjusting the glowRadius - property. - - \table - \header - \li Output examples with different cornerRadius values - \li - \li - \row - \li \image RectangularGlow_cornerRadius1.png - \li \image RectangularGlow_cornerRadius2.png - \li \image RectangularGlow_cornerRadius3.png - \row - \li \b { cornerRadius: 0 } - \li \b { cornerRadius: 25 } - \li \b { cornerRadius: 50 } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \endtable - */ - property real cornerRadius: glowRadius - - /* - This property allows the effect output pixels to be cached in order to - improve the rendering performance. - - Every time the source or effect properties are changed, the pixels in - the cache must be updated. Memory consumption is increased, because an - extra buffer of memory is required for storing the effect output. - - It is recommended to disable the cache when the source or the effect - properties are animated. - - By default, the property is set to \c false. - */ - property bool cached: false - - ShaderEffectSource { - id: cacheItem - anchors.fill: shaderItem - visible: rootItem.cached - smooth: true - sourceItem: shaderItem - live: true - hideSource: visible - } - - ShaderEffect { - id: shaderItem - - x: (parent.width - width) / 2.0 - y: (parent.height - height) / 2.0 - width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2 - height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2 - - function clampedCornerRadius() { - var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + rootItem.glowRadius; - return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius)) - } - - property color color: rootItem.color - property real inverseSpread: 1.0 - rootItem.spread - property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width - property real relativeSizeY: relativeSizeX * (width / height) - property real spread: rootItem.spread / 2.0 - property real cornerRadius: clampedCornerRadius() - - fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/shaders/RectangularGlow.frag.qsb" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RoundedElevationEffect.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RoundedElevationEffect.qml deleted file mode 100644 index c197823..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RoundedElevationEffect.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -ElevationEffect { - required property int roundedScale - - _shadows: roundedScale === Material.NotRounded ? _defaultShadows : roundedShadows() - - function roundedShadows() { - // Make a deep copy. - let shadows = [..._defaultShadows] - for (let i = 0, strength = 0.95; i < shadows.length; ++i) { - // See comment on BoxShadow's strength property for why we do this. - shadows[i].strength = strength - // We don't want the strength to be too high for the controls with very slightly rounded - // corners, as they are quite close to the non-rounded ones in terms of not needing adjustments. - // This is still not great for the higher elevations for ExtraSmallScale, but it's as good - // as I can get it. - strength = Math.max(0.05, strength - (roundedScale > Material.ExtraSmallScale ? 0.1 : 0.3)) - - // The values at index 0 are already 0, and we don't want our Math.max(1, ...) code to affect them. - if (i > 0) { - // The blur values for e.g. buttons with rounded corners are too large, so we reduce them. - for (let angularShadowIndex = 0; angularShadowIndex < shadows[i].angularValues.length; ++angularShadowIndex) { - shadows[i].angularValues[angularShadowIndex].blur = - Math.max(1, Math.floor(shadows[i].angularValues[angularShadowIndex].blur / 4)) - } - } - } - return shadows - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SliderHandle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SliderHandle.qml deleted file mode 100644 index 4681992..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SliderHandle.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Item { - id: root - implicitWidth: initialSize - implicitHeight: initialSize - - property real value: 0 - property bool handleHasFocus: false - property bool handlePressed: false - property bool handleHovered: false - readonly property int initialSize: 13 - readonly property var control: parent - - Rectangle { - id: handleRect - width: parent.width - height: parent.height - radius: width / 2 - color: root.control - ? root.control.enabled ? root.control.Material.accentColor : root.control.Material.sliderDisabledColor - : "transparent" - } - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 22; height: 22 - pressed: root.handlePressed - active: root.handlePressed || root.handleHasFocus || (enabled && root.handleHovered) - color: root.control ? root.control.Material.highlightedRippleColor : "transparent" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SwitchIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SwitchIndicator.qml deleted file mode 100644 index d864f38..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SwitchIndicator.qml +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Rectangle { - id: indicator - width: control.Material.switchIndicatorWidth - height: control.Material.switchIndicatorHeight - radius: height / 2 - y: parent.height / 2 - height / 2 - color: control.enabled - ? (control.checked - ? control.Material.switchCheckedTrackColor : control.Material.switchUncheckedTrackColor) - : (control.checked - ? control.Material.switchDisabledCheckedTrackColor - : control.Material.switchDisabledUncheckedTrackColor) - border.width: 2 - border.color: control.enabled - ? (control.checked ? control.Material.switchCheckedTrackColor : control.Material.switchUncheckedHandleColor) - : (control.checked ? control.Material.switchDisabledCheckedTrackColor : control.Material.switchDisabledUncheckedTrackBorderColor) - - property T.AbstractButton control - property alias handle: handle - - Behavior on color { - ColorAnimation { - duration: 200 - } - } - Behavior on border.color { - ColorAnimation { - duration: 200 - } - } - - Rectangle { - id: handle - x: Math.max(offset, Math.min(parent.width - offset - width, - indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - // We use scale to allow us to enlarge the circle from the center, - // as using width/height will cause it to jump due to the position x/y bindings. - // However, a large enough scale on certain displays will show the triangles - // that make up the circle, so instead we make sure that the circle is always - // its largest size so that more triangles are used, and downscale instead. - width: normalSize * largestScale - height: normalSize * largestScale - radius: width / 2 - color: indicator.control.enabled - ? (indicator.control.checked - ? indicator.control.Material.switchCheckedHandleColor - : indicator.control.hovered - ? indicator.control.Material.switchUncheckedHoveredHandleColor : indicator.control.Material.switchUncheckedHandleColor) - : (indicator.control.checked - ? indicator.control.Material.switchDisabledCheckedHandleColor - : indicator.control.Material.switchDisabledUncheckedHandleColor) - scale: indicator.control.down ? 1 : (indicator.control.checked ? checkedSize / largestSize : normalSize / largestSize) - - readonly property int offset: 2 - readonly property real normalSize: !hasIcon ? indicator.control.Material.switchNormalHandleHeight : checkedSize - readonly property real checkedSize: indicator.control.Material.switchCheckedHandleHeight - readonly property real largestSize: indicator.control.Material.switchLargestHandleHeight - readonly property real largestScale: largestSize / normalSize - readonly property bool hasIcon: indicator.control.icon.name.length > 0 - || indicator.control.icon.source.toString().length > 0 - - Behavior on x { - enabled: !indicator.control.pressed - SmoothedAnimation { - duration: 300 - } - } - - Behavior on scale { - NumberAnimation { - duration: 100 - } - } - - Behavior on color { - ColorAnimation { - duration: 200 - } - } - - IconImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - name: indicator.control.icon.name - source: indicator.control.icon.source - sourceSize: Qt.size(indicator.control.icon.width, indicator.control.icon.height) - color: indicator.control.icon.color - visible: handle.hasIcon - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/libqtquickcontrols2materialstyleimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/libqtquickcontrols2materialstyleimplplugin.so deleted file mode 100755 index b476414..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/libqtquickcontrols2materialstyleimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/plugins.qmltypes deleted file mode 100644 index a5117d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/plugins.qmltypes +++ /dev/null @@ -1,335 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickmaterialbusyindicator_p.h" - name: "QQuickMaterialBusyIndicator" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.0", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.1", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.4", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.7", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.11", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 6.0", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 6.3", - "QtQuick.Controls.Material.impl/BusyIndicatorImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 0; isFinal: true } - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - index: 1 - isFinal: true - } - } - Component { - file: "private/qquickmaterialplaceholdertext_p.h" - name: "QQuickMaterialPlaceholderText" - accessSemantics: "reference" - prototype: "QQuickPlaceholderText" - exports: [ - "QtQuick.Controls.Material.impl/FloatingPlaceholderText 6.5", - "QtQuick.Controls.Material.impl/FloatingPlaceholderText 6.7" - ] - exportMetaObjectRevisions: [1541, 1543] - Property { - name: "filled" - type: "bool" - read: "isFilled" - write: "setFilled" - notify: "filledChanged" - index: 0 - isFinal: true - } - Property { - name: "controlHasActiveFocus" - type: "bool" - read: "controlHasActiveFocus" - write: "setControlHasActiveFocus" - notify: "controlHasActiveFocusChanged" - index: 1 - isFinal: true - } - Property { - name: "controlHasText" - type: "bool" - read: "controlHasText" - write: "setControlHasText" - notify: "controlHasTextChanged" - index: 2 - isFinal: true - } - Property { - name: "largestHeight" - type: "int" - read: "largestHeight" - notify: "largestHeightChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "verticalPadding" - type: "double" - read: "verticalPadding" - write: "setVerticalPadding" - notify: "verticalPaddingChanged" - index: 4 - isFinal: true - } - Property { - name: "controlImplicitBackgroundHeight" - type: "double" - read: "controlImplicitBackgroundHeight" - write: "setControlImplicitBackgroundHeight" - notify: "controlImplicitBackgroundHeightChanged" - index: 5 - isFinal: true - } - Property { - name: "controlHeight" - type: "double" - read: "controlHeight" - write: "setControlHeight" - index: 6 - isFinal: true - } - Signal { name: "filledChanged" } - Signal { name: "largestHeightChanged" } - Signal { name: "controlHasActiveFocusChanged" } - Signal { name: "controlHasTextChanged" } - Signal { name: "controlImplicitBackgroundHeightChanged" } - Signal { name: "verticalPaddingChanged" } - Method { name: "adjustTransformOrigin" } - } - Component { - file: "private/qquickmaterialprogressbar_p.h" - name: "QQuickMaterialProgressBar" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Material.impl/ProgressBarImpl 2.0", - "QtQuick.Controls.Material.impl/ProgressBarImpl 2.1", - "QtQuick.Controls.Material.impl/ProgressBarImpl 2.4", - "QtQuick.Controls.Material.impl/ProgressBarImpl 2.7", - "QtQuick.Controls.Material.impl/ProgressBarImpl 2.11", - "QtQuick.Controls.Material.impl/ProgressBarImpl 6.0", - "QtQuick.Controls.Material.impl/ProgressBarImpl 6.3", - "QtQuick.Controls.Material.impl/ProgressBarImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 0; isFinal: true } - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - index: 1 - isFinal: true - } - Property { - name: "indeterminate" - type: "bool" - read: "isIndeterminate" - write: "setIndeterminate" - index: 2 - isFinal: true - } - } - Component { - file: "private/qquickmaterialripple_p.h" - name: "QQuickMaterialRipple" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Material.impl/Ripple 2.0", - "QtQuick.Controls.Material.impl/Ripple 2.1", - "QtQuick.Controls.Material.impl/Ripple 2.4", - "QtQuick.Controls.Material.impl/Ripple 2.7", - "QtQuick.Controls.Material.impl/Ripple 2.11", - "QtQuick.Controls.Material.impl/Ripple 6.0", - "QtQuick.Controls.Material.impl/Ripple 6.3", - "QtQuick.Controls.Material.impl/Ripple 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Trigger" - values: ["Press", "Release"] - } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 0; isFinal: true } - Property { - name: "clipRadius" - type: "double" - read: "clipRadius" - write: "setClipRadius" - index: 1 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - index: 2 - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - index: 3 - isFinal: true - } - Property { - name: "anchor" - type: "QQuickItem" - isPointer: true - read: "anchor" - write: "setAnchor" - index: 4 - isFinal: true - } - Property { - name: "trigger" - type: "Trigger" - read: "trigger" - write: "setTrigger" - index: 5 - isFinal: true - } - } - Component { - file: "private/qquickmaterialtextcontainer_p.h" - name: "QQuickMaterialTextContainer" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Material.impl/MaterialTextContainer 6.5", - "QtQuick.Controls.Material.impl/MaterialTextContainer 6.7" - ] - exportMetaObjectRevisions: [1541, 1543] - Enum { - name: "PlaceHolderHAlignment" - values: [ - "AlignLeft", - "AlignRight", - "AlignHCenter", - "AlignJustify" - ] - } - Property { - name: "filled" - type: "bool" - read: "isFilled" - write: "setFilled" - index: 0 - isFinal: true - } - Property { - name: "controlHasActiveFocus" - type: "bool" - read: "controlHasActiveFocus" - write: "setControlHasActiveFocus" - notify: "controlHasActiveFocusChanged" - index: 1 - isFinal: true - } - Property { - name: "fillColor" - type: "QColor" - read: "fillColor" - write: "setFillColor" - index: 2 - isFinal: true - } - Property { - name: "outlineColor" - type: "QColor" - read: "outlineColor" - write: "setOutlineColor" - index: 3 - isFinal: true - } - Property { - name: "focusedOutlineColor" - type: "QColor" - read: "focusedOutlineColor" - write: "setFocusedOutlineColor" - index: 4 - isFinal: true - } - Property { - name: "focusAnimationProgress" - type: "double" - read: "focusAnimationProgress" - write: "setFocusAnimationProgress" - index: 5 - isFinal: true - } - Property { - name: "placeholderTextWidth" - type: "double" - read: "placeholderTextWidth" - write: "setPlaceholderTextWidth" - index: 6 - isFinal: true - } - Property { - name: "placeholderTextHAlign" - type: "PlaceHolderHAlignment" - read: "placeholderTextHAlign" - write: "setPlaceholderTextHAlign" - index: 7 - isFinal: true - } - Property { - name: "controlHasText" - type: "bool" - read: "controlHasText" - write: "setControlHasText" - notify: "controlHasTextChanged" - index: 8 - isFinal: true - } - Property { - name: "placeholderHasText" - type: "bool" - read: "placeholderHasText" - write: "setPlaceholderHasText" - notify: "placeholderHasTextChanged" - index: 9 - isFinal: true - } - Property { - name: "horizontalPadding" - type: "int" - read: "horizontalPadding" - write: "setHorizontalPadding" - notify: "horizontalPaddingChanged" - index: 10 - isFinal: true - } - Signal { name: "animateChanged" } - Signal { name: "controlHasActiveFocusChanged" } - Signal { name: "controlHasTextChanged" } - Signal { name: "placeholderHasTextChanged" } - Signal { name: "horizontalPaddingChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/qmldir deleted file mode 100644 index 605b58f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/qmldir +++ /dev/null @@ -1,27 +0,0 @@ -module QtQuick.Controls.Material.impl -linktarget Qt6::qtquickcontrols2materialstyleimplplugin -optional plugin qtquickcontrols2materialstyleimplplugin -classname QtQuickControls2MaterialStyleImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -depends QtQuick.Controls.impl auto -prefer :/qt-project.org/imports/QtQuick/Controls/Material/impl/ -BoxShadow 6.0 BoxShadow.qml -BoxShadow 2.0 BoxShadow.qml -CheckIndicator 6.0 CheckIndicator.qml -CheckIndicator 2.0 CheckIndicator.qml -CursorDelegate 6.0 CursorDelegate.qml -CursorDelegate 2.0 CursorDelegate.qml -ElevationEffect 6.0 ElevationEffect.qml -ElevationEffect 2.0 ElevationEffect.qml -RadioIndicator 6.0 RadioIndicator.qml -RadioIndicator 2.0 RadioIndicator.qml -RectangularGlow 6.0 RectangularGlow.qml -RectangularGlow 2.0 RectangularGlow.qml -RoundedElevationEffect 6.0 RoundedElevationEffect.qml -RoundedElevationEffect 2.0 RoundedElevationEffect.qml -SliderHandle 6.0 SliderHandle.qml -SliderHandle 2.0 SliderHandle.qml -SwitchIndicator 6.0 SwitchIndicator.qml -SwitchIndicator 2.0 SwitchIndicator.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/libqtquickcontrols2materialstyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/libqtquickcontrols2materialstyleplugin.so deleted file mode 100755 index e83b636..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/libqtquickcontrols2materialstyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/plugins.qmltypes deleted file mode 100644 index 66367cd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/plugins.qmltypes +++ /dev/null @@ -1,764 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qquickattachedpropertypropagator.h" - name: "QQuickAttachedPropertyPropagator" - accessSemantics: "reference" - prototype: "QObject" - } - Component { - file: "private/qquickmaterialstyle_p.h" - name: "QQuickMaterialStyle" - accessSemantics: "reference" - prototype: "QQuickAttachedPropertyPropagator" - exports: [ - "QtQuick.Controls.Material/Material 2.0", - "QtQuick.Controls.Material/Material 2.15", - "QtQuick.Controls.Material/Material 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 527, 1536] - attachedType: "QQuickMaterialStyle" - Enum { - name: "Theme" - values: ["Light", "Dark", "System"] - } - Enum { - name: "Variant" - values: ["Normal", "Dense"] - } - Enum { - name: "Color" - values: [ - "Red", - "Pink", - "Purple", - "DeepPurple", - "Indigo", - "Blue", - "LightBlue", - "Cyan", - "Teal", - "Green", - "LightGreen", - "Lime", - "Yellow", - "Amber", - "Orange", - "DeepOrange", - "Brown", - "Grey", - "BlueGrey" - ] - } - Enum { - name: "Shade" - values: [ - "Shade50", - "Shade100", - "Shade200", - "Shade300", - "Shade400", - "Shade500", - "Shade600", - "Shade700", - "Shade800", - "Shade900", - "ShadeA100", - "ShadeA200", - "ShadeA400", - "ShadeA700" - ] - } - Enum { - name: "RoundedScale" - values: [ - "NotRounded", - "ExtraSmallScale", - "SmallScale", - "MediumScale", - "LargeScale", - "ExtraLargeScale", - "FullScale" - ] - } - Enum { - name: "ContainerStyle" - values: ["Filled", "Outlined"] - } - Property { - name: "theme" - type: "Theme" - read: "theme" - write: "setTheme" - reset: "resetTheme" - notify: "themeChanged" - index: 0 - isFinal: true - } - Property { - name: "primary" - type: "QVariant" - read: "primary" - write: "setPrimary" - reset: "resetPrimary" - notify: "primaryChanged" - index: 1 - isFinal: true - } - Property { - name: "accent" - type: "QVariant" - read: "accent" - write: "setAccent" - reset: "resetAccent" - notify: "accentChanged" - index: 2 - isFinal: true - } - Property { - name: "foreground" - type: "QVariant" - read: "foreground" - write: "setForeground" - reset: "resetForeground" - notify: "foregroundChanged" - index: 3 - isFinal: true - } - Property { - name: "background" - type: "QVariant" - read: "background" - write: "setBackground" - reset: "resetBackground" - notify: "backgroundChanged" - index: 4 - isFinal: true - } - Property { - name: "elevation" - type: "int" - read: "elevation" - write: "setElevation" - reset: "resetElevation" - notify: "elevationChanged" - index: 5 - isFinal: true - } - Property { - name: "roundedScale" - type: "RoundedScale" - read: "roundedScale" - write: "setRoundedScale" - reset: "resetRoundedScale" - notify: "roundedScaleChanged" - index: 6 - isFinal: true - } - Property { - name: "containerStyle" - type: "ContainerStyle" - read: "containerStyle" - write: "setContainerStyle" - reset: "resetContainerStyle" - notify: "containerStyleChanged" - index: 7 - isFinal: true - } - Property { - name: "primaryColor" - type: "QColor" - read: "primaryColor" - notify: "primaryChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "accentColor" - type: "QColor" - read: "accentColor" - notify: "accentChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "backgroundColor" - type: "QColor" - read: "backgroundColor" - notify: "backgroundChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "primaryTextColor" - type: "QColor" - read: "primaryTextColor" - notify: "themeChanged" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "primaryHighlightedTextColor" - type: "QColor" - read: "primaryHighlightedTextColor" - notify: "primaryHighlightedTextColorChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "secondaryTextColor" - type: "QColor" - read: "secondaryTextColor" - notify: "themeChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "hintTextColor" - type: "QColor" - read: "hintTextColor" - notify: "themeChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "textSelectionColor" - type: "QColor" - read: "textSelectionColor" - notify: "themeOrAccentChanged" - index: 15 - isReadonly: true - isFinal: true - } - Property { - name: "dropShadowColor" - type: "QColor" - read: "dropShadowColor" - index: 16 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "dividerColor" - type: "QColor" - read: "dividerColor" - notify: "themeChanged" - index: 17 - isReadonly: true - isFinal: true - } - Property { - name: "iconColor" - type: "QColor" - read: "iconColor" - notify: "themeChanged" - index: 18 - isReadonly: true - isFinal: true - } - Property { - name: "iconDisabledColor" - type: "QColor" - read: "iconDisabledColor" - notify: "themeChanged" - index: 19 - isReadonly: true - isFinal: true - } - Property { - name: "frameColor" - type: "QColor" - read: "frameColor" - notify: "themeChanged" - index: 20 - isReadonly: true - isFinal: true - } - Property { - name: "rippleColor" - type: "QColor" - read: "rippleColor" - notify: "themeChanged" - index: 21 - isReadonly: true - isFinal: true - } - Property { - name: "highlightedRippleColor" - type: "QColor" - read: "highlightedRippleColor" - notify: "themeOrAccentChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "switchUncheckedTrackColor" - type: "QColor" - read: "switchUncheckedTrackColor" - notify: "themeChanged" - index: 23 - isReadonly: true - isFinal: true - } - Property { - name: "switchCheckedTrackColor" - type: "QColor" - read: "switchCheckedTrackColor" - notify: "themeOrAccentChanged" - index: 24 - isReadonly: true - isFinal: true - } - Property { - name: "switchUncheckedHandleColor" - type: "QColor" - read: "switchUncheckedHandleColor" - notify: "themeChanged" - index: 25 - isReadonly: true - isFinal: true - } - Property { - name: "switchUncheckedHoveredHandleColor" - type: "QColor" - read: "switchUncheckedHoveredHandleColor" - notify: "themeChanged" - index: 26 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledUncheckedTrackColor" - type: "QColor" - read: "switchDisabledUncheckedTrackColor" - notify: "themeChanged" - index: 27 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledCheckedTrackColor" - type: "QColor" - read: "switchDisabledCheckedTrackColor" - notify: "themeChanged" - index: 28 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledUncheckedTrackBorderColor" - type: "QColor" - read: "switchDisabledUncheckedTrackBorderColor" - notify: "themeChanged" - index: 29 - isReadonly: true - isFinal: true - } - Property { - name: "switchCheckedHandleColor" - type: "QColor" - read: "switchCheckedHandleColor" - notify: "themeOrAccentChanged" - index: 30 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledUncheckedHandleColor" - type: "QColor" - read: "switchDisabledUncheckedHandleColor" - notify: "themeChanged" - index: 31 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledCheckedHandleColor" - type: "QColor" - read: "switchDisabledCheckedHandleColor" - notify: "themeChanged" - index: 32 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledCheckedIconColor" - type: "QColor" - read: "switchDisabledCheckedIconColor" - notify: "themeChanged" - index: 33 - isReadonly: true - isFinal: true - } - Property { - name: "switchDisabledUncheckedIconColor" - type: "QColor" - read: "switchDisabledUncheckedIconColor" - notify: "themeChanged" - index: 34 - isReadonly: true - isFinal: true - } - Property { - name: "scrollBarColor" - type: "QColor" - read: "scrollBarColor" - notify: "themeChanged" - index: 35 - isReadonly: true - isFinal: true - } - Property { - name: "scrollBarHoveredColor" - type: "QColor" - read: "scrollBarHoveredColor" - notify: "themeChanged" - index: 36 - isReadonly: true - isFinal: true - } - Property { - name: "scrollBarPressedColor" - type: "QColor" - read: "scrollBarPressedColor" - notify: "themeChanged" - index: 37 - isReadonly: true - isFinal: true - } - Property { - name: "dialogColor" - type: "QColor" - read: "dialogColor" - notify: "dialogColorChanged" - index: 38 - isReadonly: true - isFinal: true - } - Property { - name: "backgroundDimColor" - type: "QColor" - read: "backgroundDimColor" - notify: "themeChanged" - index: 39 - isReadonly: true - isFinal: true - } - Property { - name: "listHighlightColor" - type: "QColor" - read: "listHighlightColor" - notify: "themeChanged" - index: 40 - isReadonly: true - isFinal: true - } - Property { - name: "tooltipColor" - type: "QColor" - read: "tooltipColor" - notify: "tooltipColorChanged" - index: 41 - isReadonly: true - isFinal: true - } - Property { - name: "toolBarColor" - type: "QColor" - read: "toolBarColor" - notify: "toolBarColorChanged" - index: 42 - isReadonly: true - isFinal: true - } - Property { - name: "toolTextColor" - type: "QColor" - read: "toolTextColor" - notify: "toolTextColorChanged" - index: 43 - isReadonly: true - isFinal: true - } - Property { - name: "spinBoxDisabledIconColor" - type: "QColor" - read: "spinBoxDisabledIconColor" - notify: "themeChanged" - index: 44 - isReadonly: true - isFinal: true - } - Property { - name: "sliderDisabledColor" - revision: 527 - type: "QColor" - read: "sliderDisabledColor" - notify: "themeChanged" - index: 45 - isReadonly: true - isFinal: true - } - Property { - name: "textFieldFilledContainerColor" - type: "QColor" - read: "textFieldFilledContainerColor" - notify: "themeChanged" - index: 46 - isReadonly: true - isFinal: true - } - Property { - name: "touchTarget" - type: "int" - read: "touchTarget" - index: 47 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonVerticalPadding" - type: "int" - read: "buttonVerticalPadding" - index: 48 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttonHeight" - type: "int" - read: "buttonHeight" - index: 49 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "delegateHeight" - type: "int" - read: "delegateHeight" - index: 50 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "dialogButtonBoxHeight" - type: "int" - read: "dialogButtonBoxHeight" - index: 51 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "dialogTitleFontPixelSize" - type: "int" - read: "dialogTitleFontPixelSize" - index: 52 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "dialogRoundedScale" - type: "RoundedScale" - read: "dialogRoundedScale" - index: 53 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "frameVerticalPadding" - type: "int" - read: "frameVerticalPadding" - index: 54 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "menuItemHeight" - type: "int" - read: "menuItemHeight" - index: 55 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "menuItemVerticalPadding" - type: "int" - read: "menuItemVerticalPadding" - index: 56 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchIndicatorWidth" - type: "int" - read: "switchIndicatorWidth" - index: 57 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchIndicatorHeight" - type: "int" - read: "switchIndicatorHeight" - index: 58 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchNormalHandleHeight" - type: "int" - read: "switchNormalHandleHeight" - index: 59 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchCheckedHandleHeight" - type: "int" - read: "switchCheckedHandleHeight" - index: 60 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchLargestHandleHeight" - type: "int" - read: "switchLargestHandleHeight" - index: 61 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "switchDelegateVerticalPadding" - type: "int" - read: "switchDelegateVerticalPadding" - index: 62 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textFieldHeight" - type: "int" - read: "textFieldHeight" - index: 63 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textFieldHorizontalPadding" - type: "int" - read: "textFieldHorizontalPadding" - index: 64 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "textFieldVerticalPadding" - type: "int" - read: "textFieldVerticalPadding" - index: 65 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "tooltipHeight" - type: "int" - read: "tooltipHeight" - index: 66 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "themeChanged" } - Signal { name: "primaryChanged" } - Signal { name: "accentChanged" } - Signal { name: "foregroundChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "elevationChanged" } - Signal { name: "themeOrAccentChanged" } - Signal { name: "primaryHighlightedTextColorChanged" } - Signal { name: "dialogColorChanged" } - Signal { name: "tooltipColorChanged" } - Signal { name: "toolBarColorChanged" } - Signal { name: "toolTextColorChanged" } - Signal { name: "roundedScaleChanged" } - Signal { name: "containerStyleChanged" } - Method { - name: "buttonColor" - type: "QColor" - Parameter { name: "theme"; type: "Theme" } - Parameter { name: "background"; type: "QVariant" } - Parameter { name: "accent"; type: "QVariant" } - Parameter { name: "enabled"; type: "bool" } - Parameter { name: "flat"; type: "bool" } - Parameter { name: "highlighted"; type: "bool" } - Parameter { name: "checked"; type: "bool" } - } - Method { - name: "color" - type: "QColor" - Parameter { name: "color"; type: "Color" } - Parameter { name: "shade"; type: "Shade" } - } - Method { - name: "color" - type: "QColor" - isCloned: true - Parameter { name: "color"; type: "Color" } - } - Method { - name: "shade" - type: "QColor" - Parameter { name: "color"; type: "QColor" } - Parameter { name: "shade"; type: "Shade" } - } - Method { - name: "buttonLeftPadding" - type: "int" - Parameter { name: "flat"; type: "bool" } - Parameter { name: "hasIcon"; type: "bool" } - } - Method { - name: "buttonRightPadding" - type: "int" - Parameter { name: "flat"; type: "bool" } - Parameter { name: "hasIcon"; type: "bool" } - Parameter { name: "hasText"; type: "bool" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/qmldir deleted file mode 100644 index 9965cfe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Material/qmldir +++ /dev/null @@ -1,115 +0,0 @@ -module QtQuick.Controls.Material -linktarget Qt6::qtquickcontrols2materialstyleplugin -plugin qtquickcontrols2materialstyleplugin -classname QtQuickControls2MaterialStylePlugin -typeinfo plugins.qmltypes -import QtQuick.Controls.Basic auto -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Material/ -ApplicationWindow 6.0 ApplicationWindow.qml -ApplicationWindow 2.0 ApplicationWindow.qml -BusyIndicator 6.0 BusyIndicator.qml -BusyIndicator 2.0 BusyIndicator.qml -Button 6.0 Button.qml -Button 2.0 Button.qml -CheckBox 6.0 CheckBox.qml -CheckBox 2.0 CheckBox.qml -CheckDelegate 6.0 CheckDelegate.qml -CheckDelegate 2.0 CheckDelegate.qml -ComboBox 6.0 ComboBox.qml -ComboBox 2.0 ComboBox.qml -DelayButton 2.2 DelayButton.qml -DelayButton 6.0 DelayButton.qml -Dial 6.0 Dial.qml -Dial 2.0 Dial.qml -Dialog 2.1 Dialog.qml -Dialog 6.0 Dialog.qml -DialogButtonBox 2.1 DialogButtonBox.qml -DialogButtonBox 6.0 DialogButtonBox.qml -Drawer 6.0 Drawer.qml -Drawer 2.0 Drawer.qml -Frame 6.0 Frame.qml -Frame 2.0 Frame.qml -GroupBox 6.0 GroupBox.qml -GroupBox 2.0 GroupBox.qml -HorizontalHeaderView 2.15 HorizontalHeaderView.qml -HorizontalHeaderView 6.0 HorizontalHeaderView.qml -ItemDelegate 6.0 ItemDelegate.qml -ItemDelegate 2.0 ItemDelegate.qml -Label 6.0 Label.qml -Label 2.0 Label.qml -Menu 6.0 Menu.qml -Menu 2.0 Menu.qml -MenuBar 2.3 MenuBar.qml -MenuBar 6.0 MenuBar.qml -MenuBarItem 2.3 MenuBarItem.qml -MenuBarItem 6.0 MenuBarItem.qml -MenuItem 6.0 MenuItem.qml -MenuItem 2.0 MenuItem.qml -MenuSeparator 2.1 MenuSeparator.qml -MenuSeparator 6.0 MenuSeparator.qml -Page 6.0 Page.qml -Page 2.0 Page.qml -PageIndicator 6.0 PageIndicator.qml -PageIndicator 2.0 PageIndicator.qml -Pane 6.0 Pane.qml -Pane 2.0 Pane.qml -Popup 6.0 Popup.qml -Popup 2.0 Popup.qml -ProgressBar 6.0 ProgressBar.qml -ProgressBar 2.0 ProgressBar.qml -RadioButton 6.0 RadioButton.qml -RadioButton 2.0 RadioButton.qml -RadioDelegate 6.0 RadioDelegate.qml -RadioDelegate 2.0 RadioDelegate.qml -RangeSlider 6.0 RangeSlider.qml -RangeSlider 2.0 RangeSlider.qml -RoundButton 2.1 RoundButton.qml -RoundButton 6.0 RoundButton.qml -ScrollView 6.0 ScrollView.qml -ScrollView 2.0 ScrollView.qml -ScrollBar 6.0 ScrollBar.qml -ScrollBar 2.0 ScrollBar.qml -ScrollIndicator 6.0 ScrollIndicator.qml -ScrollIndicator 2.0 ScrollIndicator.qml -SelectionRectangle 6.0 SelectionRectangle.qml -SelectionRectangle 2.0 SelectionRectangle.qml -Slider 6.0 Slider.qml -Slider 2.0 Slider.qml -SpinBox 6.0 SpinBox.qml -SpinBox 2.0 SpinBox.qml -SplitView 2.13 SplitView.qml -SplitView 6.0 SplitView.qml -StackView 6.0 StackView.qml -StackView 2.0 StackView.qml -SwipeDelegate 6.0 SwipeDelegate.qml -SwipeDelegate 2.0 SwipeDelegate.qml -SwipeView 6.0 SwipeView.qml -SwipeView 2.0 SwipeView.qml -Switch 6.0 Switch.qml -Switch 2.0 Switch.qml -SwitchDelegate 6.0 SwitchDelegate.qml -SwitchDelegate 2.0 SwitchDelegate.qml -TabBar 6.0 TabBar.qml -TabBar 2.0 TabBar.qml -TabButton 6.0 TabButton.qml -TabButton 2.0 TabButton.qml -TextArea 6.0 TextArea.qml -TextArea 2.0 TextArea.qml -TextField 6.0 TextField.qml -TextField 2.0 TextField.qml -ToolBar 6.0 ToolBar.qml -ToolBar 2.0 ToolBar.qml -ToolButton 6.0 ToolButton.qml -ToolButton 2.0 ToolButton.qml -ToolSeparator 2.1 ToolSeparator.qml -ToolSeparator 6.0 ToolSeparator.qml -ToolTip 6.0 ToolTip.qml -ToolTip 2.0 ToolTip.qml -TreeViewDelegate 6.0 TreeViewDelegate.qml -TreeViewDelegate 2.0 TreeViewDelegate.qml -Tumbler 6.0 Tumbler.qml -Tumbler 2.0 Tumbler.qml -VerticalHeaderView 2.15 VerticalHeaderView.qml -VerticalHeaderView 6.0 VerticalHeaderView.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ApplicationWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ApplicationWindow.qml deleted file mode 100644 index 7828d20..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ApplicationWindow.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.ApplicationWindow { - id: window - - color: Universal.background - - FocusRectangle { - parent: window.activeFocusControl - width: parent ? parent.width : 0 - height: parent ? parent.height : 0 - visible: parent && !!parent.useSystemFocusVisuals && !!parent.visualFocus - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/BusyIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/BusyIndicator.qml deleted file mode 100644 index 64dfdd2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/BusyIndicator.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: BusyIndicatorImpl { - implicitWidth: 20 - implicitHeight: 20 - - readonly property real size: Math.min(control.availableWidth, control.availableHeight) - - count: size < 60 ? 5 : 6 // "Small" vs. "Large" - color: control.Universal.accent - visible: control.running - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Button.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Button.qml deleted file mode 100644 index bdf10e3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Button.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - verticalPadding: padding - 4 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - visible: !control.flat || control.down || control.checked || control.highlighted - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : - control.Universal.baseLowColor - - Rectangle { - width: parent.width - height: parent.height - color: "transparent" - visible: enabled && control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckBox.qml deleted file mode 100644 index c7f99b3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckBox.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckDelegate.qml deleted file mode 100644 index f11f0ac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckDelegate.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered) - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ComboBox.qml deleted file mode 100644 index 0793416..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ComboBox.qml +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - Universal.theme: editable && activeFocus ? Universal.Light : undefined - - delegate: ItemDelegate { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/downarrow.png" - - Rectangle { - z: -1 - width: parent.width - height: parent.height - color: control.activeFocus ? control.Universal.accent : - control.pressed ? control.Universal.baseMediumLowColor : - control.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.editable && !control.contentItem.hovered && (control.pressed || control.hovered) - opacity: control.activeFocus && !control.pressed ? 0.4 : 1.0 - } - } - - contentItem: T.TextField { - leftPadding: control.mirrored ? 1 : 12 - rightPadding: control.mirrored ? 10 : 1 - topPadding: 5 - control.topPadding - bottomPadding: 7 - control.bottomPadding - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - color: !control.enabled ? control.Universal.chromeDisabledLowColor : - control.editable && control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground - selectionColor: control.Universal.accent - selectedTextColor: control.Universal.chromeWhiteColor - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 32 - - border.width: control.flat ? 0 : 2 // ComboBoxBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.editable && control.activeFocus ? control.Universal.accent : - control.down ? control.Universal.baseMediumLowColor : - control.hovered ? control.Universal.baseMediumColor : control.Universal.baseMediumLowColor - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.flat && control.hovered ? control.Universal.listLowColor : - control.editable && control.activeFocus ? control.Universal.background : control.Universal.altMediumLowColor - visible: !control.flat || control.pressed || control.hovered || control.visualFocus - - Rectangle { - x: 2 - y: 2 - width: parent.width - 4 - height: parent.height - 4 - - visible: control.visualFocus && !control.editable - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 8 - bottomMargin: 8 - - Universal.theme: control.Universal.theme - Universal.accent: control.Universal.accent - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DelayButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DelayButton.qml deleted file mode 100644 index 2b2cc83..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DelayButton.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - verticalPadding: padding - 4 - - property bool useSystemFocusVisuals: true - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - elide: Text.ElideRight - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && control.checked ? control.Universal.accent : control.Universal.baseLowColor - - Rectangle { - visible: !control.checked - width: parent.width * control.progress - height: parent.height - color: control.Universal.accent - } - - Rectangle { - width: parent.width - height: parent.height - color: "transparent" - visible: enabled && control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dial.qml deleted file mode 100644 index df52ea1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dial.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 100 - - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - radius: width / 2 - color: "transparent" - border.color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumColor - border.width: 2 - } - - handle: Rectangle { - implicitWidth: 14 - implicitHeight: 14 - - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - - radius: width / 2 - color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : - control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - - transform: [ - Translate { - y: -control.background.height * 0.4 - + (control.handle ? control.handle.height / 2 : 0) - }, - Rotation { - angle: control.angle - origin.x: control.handle ? control.handle.width / 2 : 0 - origin.y: control.handle ? control.handle.height / 2 : 0 - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dialog.qml deleted file mode 100644 index 0ed4e67..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dialog.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - topPadding: 18 - leftPadding: 24 - rightPadding: 24 - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DialogButtonBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DialogButtonBox.qml deleted file mode 100644 index 4a7e4f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/DialogButtonBox.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - contentWidth: (contentItem as ListView)?.contentWidth - - spacing: 4 - padding: 24 - topPadding: position === T.DialogButtonBox.Footer ? 6 : 24 - bottomPadding: position === T.DialogButtonBox.Header ? 6 : 24 - alignment: count === 1 ? Qt.AlignRight : undefined - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - } - - contentItem: ListView { - implicitWidth: contentWidth - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 32 - color: control.Universal.chromeMediumLowColor - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Drawer.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Drawer.qml deleted file mode 100644 index 4c4ff5d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Drawer.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - Rectangle { - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - width: horizontal ? 1 : parent.width - height: horizontal ? parent.height : 1 - color: control.Universal.chromeHighColor - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Frame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Frame.qml deleted file mode 100644 index 2e650d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Frame.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: "transparent" - border.color: control.Universal.chromeDisabledLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/GroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/GroupBox.qml deleted file mode 100644 index b0b211b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/GroupBox.qml +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 12 - padding: 12 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - color: "transparent" - border.color: control.Universal.chromeDisabledLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/HorizontalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/HorizontalHeaderView.qml deleted file mode 100644 index f792a1e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/HorizontalHeaderView.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - // The contentHeight of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit height of - // HorizontalHeaderView should be the same as the content height in the end, we - // need to ensure that it has at least a height of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitHeight: Math.max(1, contentHeight) - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: control.Universal.background - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ItemDelegate.qml deleted file mode 100644 index ab999d6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ItemDelegate.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered) - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Label.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Label.qml deleted file mode 100644 index e77f48d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Label.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Label { - id: control - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - linkColor: Universal.accent -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Menu.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Menu.qml deleted file mode 100644 index 03a5b23..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Menu.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - overlap: 1 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > control.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBar.qml deleted file mode 100644 index 1c0f4c6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBar.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.Universal.chromeMediumColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBarItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBarItem.qml deleted file mode 100644 index 84dfb22..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBarItem.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - spacing: 12 - - icon.width: 20 - icon.height: 20 - icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.highlighted ? control.Universal.listLowColor : "transparent" - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - - visible: control.visualFocus - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuItem.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuItem.qml deleted file mode 100644 index 00b9d16..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuItem.qml +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - spacing: 12 - - icon.width: 20 - icon.height: 20 - icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - } - - arrow: ColorImage { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - color: !enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/rightarrow.png" - } - - indicator: ColorImage { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checked - color: !control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - source: !control.checkable ? "" : "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.highlighted ? control.Universal.listLowColor : control.Universal.altMediumLowColor - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - - visible: control.visualFocus - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuSeparator.qml deleted file mode 100644 index dc814ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuSeparator.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: 9 - bottomPadding: 10 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: control.Universal.baseMediumLowColor - } - - background: Rectangle { - color: control.Universal.altMediumLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Page.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Page.qml deleted file mode 100644 index 7e2c69a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Page.qml +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.Universal.background - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/PageIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/PageIndicator.qml deleted file mode 100644 index 68147f6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/PageIndicator.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 7 - - delegate: Rectangle { - implicitWidth: 5 - implicitHeight: 5 - - radius: width / 2 - color: index === control.currentIndex ? control.Universal.baseMediumHighColor : - pressed ? control.Universal.baseMediumLowColor : control.Universal.baseLowColor - - required property int index - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Pane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Pane.qml deleted file mode 100644 index 2f27979..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Pane.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.Universal.background - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Popup.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Popup.qml deleted file mode 100644 index 5899919..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Popup.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ProgressBar.qml deleted file mode 100644 index 803941f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ProgressBar.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 10 - - scale: control.mirrored ? -1 : 1 - color: control.Universal.accent - progress: control.position - indeterminate: control.visible && control.indeterminate - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 10 - y: (control.height - height) / 2 - height: 10 - - visible: !control.indeterminate - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioButton.qml deleted file mode 100644 index b7e5943..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioDelegate.qml deleted file mode 100644 index 9e9899d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioDelegate.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered) - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RangeSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RangeSlider.qml deleted file mode 100644 index cd85d93..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RangeSlider.qml +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - first.handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.first.pressed ? control.Universal.chromeHighColor : - control.first.hovered ? control.Universal.chromeAltLowColor : - control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - second.handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.second.pressed ? control.Universal.chromeHighColor : - control.second.hovered ? control.Universal.chromeAltLowColor : - control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - background: Item { - implicitWidth: control.horizontal ? 200 : 18 - implicitHeight: control.horizontal ? 18 : 200 - - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : 0 - width: control.horizontal ? parent.width : 2 // SliderBackgroundThemeHeight - height: control.vertical ? parent.height : 2 // SliderBackgroundThemeHeight - - color: enabled && control.hovered && !control.pressed ? control.Universal.baseMediumColor : - control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor - } - - Rectangle { - x: control.horizontal ? control.first.position * parent.width : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.second.visualPosition * parent.height - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 2 // SliderBackgroundThemeHeight - height: control.vertical ? control.second.position * parent.height - control.first.position * parent.height : 2 // SliderBackgroundThemeHeight - - color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RoundButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RoundButton.qml deleted file mode 100644 index c2d0f9e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/RoundButton.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - radius: control.radius - visible: !control.flat || control.down || control.checked || control.highlighted - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : - control.Universal.baseLowColor - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - color: "transparent" - visible: enabled && control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollBar.qml deleted file mode 100644 index a5ab5fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollBar.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation === Qt.Horizontal ? height / width : width / height - - // TODO: arrows - - contentItem: Rectangle { - implicitWidth: control.interactive ? 12 : 6 - implicitHeight: control.interactive ? 12: 6 - - color: control.pressed ? control.Universal.baseMediumColor : - enabled && control.interactive && control.hovered ? control.Universal.baseMediumLowColor : - control.Universal.chromeHighColor - opacity: 0.0 - } - - background: Rectangle { - implicitWidth: control.interactive ? 12 : 6 - implicitHeight: control.interactive ? 12: 6 - - color: control.Universal.chromeLowColor - visible: control.size < 1.0 - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 3000 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollIndicator.qml deleted file mode 100644 index 1df2163..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollIndicator.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: Rectangle { - implicitWidth: 6 - implicitHeight: 6 - - color: control.Universal.baseMediumLowColor - visible: control.size < 1.0 - opacity: 0.0 - - states: [ - State { - name: "active" - when: control.active - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { target: control.contentItem; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 5000 } - NumberAnimation { target: control.contentItem; property: "opacity"; to: 0.0 } - } - } - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollView.qml deleted file mode 100644 index 6078931..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollView.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SelectionRectangle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SelectionRectangle.qml deleted file mode 100644 index e7b9985..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SelectionRectangle.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SelectionRectangle { - id: control - - topLeftHandle: handle - bottomRightHandle: handle - - Component { - id: handle - Rectangle { - implicitWidth: 8 - implicitHeight: 24 - radius: 4 - color: tapHandler.pressed || SelectionRectangle.dragging ? control.Universal.chromeHighColor : - hoverHandler.hovered ? control.Universal.chromeAltLowColor : - control.Universal.accent - visible: control.active - - property Item control: SelectionRectangle.control - - HoverHandler { - id: hoverHandler - } - - TapHandler { - id: tapHandler - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Slider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Slider.qml deleted file mode 100644 index 305c5c3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Slider.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - property bool useSystemFocusVisuals: true - - handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.pressed ? control.Universal.chromeHighColor : - control.enabled ? control.hovered ? control.Universal.chromeAltLowColor : - control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - background: Item { - implicitWidth: control.horizontal ? 200 : 18 - implicitHeight: control.horizontal ? 18 : 200 - - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : 0 - width: control.horizontal ? parent.width : 2 // SliderTrackThemeHeight - height: !control.horizontal ? parent.height : 2 // SliderTrackThemeHeight - - color: enabled && control.hovered && !control.pressed ? control.Universal.baseMediumColor : - control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor - } - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 2 // SliderTrackThemeHeight - height: !control.horizontal ? control.position * parent.height : 2 // SliderTrackThemeHeight - - color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SpinBox.qml deleted file mode 100644 index ed233e0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SpinBox.qml +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SpinBox { - id: control - - - // Note: the width of the indicators are calculated into the padding - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - up.implicitIndicatorHeight, down.implicitIndicatorHeight) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - - font: control.font - color: !enabled ? control.Universal.chromeDisabledLowColor : - activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground - selectionColor: control.Universal.accent - selectedTextColor: control.Universal.chromeWhiteColor - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: TextInput.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - clip: width < implicitWidth - } - - up.indicator: Item { - implicitWidth: 28 - height: control.height + 4 - y: -2 - x: control.mirrored ? 0 : control.width - width - - Rectangle { - x: 2; y: 4 - width: parent.width - 4 - height: parent.height - 8 - color: control.activeFocus ? control.Universal.accent : - control.up.pressed ? control.Universal.baseMediumLowColor : - control.up.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.up.pressed || control.up.hovered - opacity: control.activeFocus && !control.up.pressed ? 0.4 : 1.0 - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: !enabled ? control.Universal.chromeDisabledLowColor : - control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "left" : "right") + "arrow.png" - } - } - - down.indicator: Item { - implicitWidth: 28 - height: control.height + 4 - y: -2 - x: control.mirrored ? control.width - width : 0 - - Rectangle { - x: 2; y: 4 - width: parent.width - 4 - height: parent.height - 8 - color: control.activeFocus ? control.Universal.accent : - control.down.pressed ? control.Universal.baseMediumLowColor : - control.down.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.down.pressed || control.down.hovered - opacity: control.activeFocus && !control.down.pressed ? 0.4 : 1.0 - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: !enabled ? control.Universal.chromeDisabledLowColor : - control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "right" : "left") + "arrow.png" - } - } - - background: Rectangle { - implicitWidth: 60 + 28 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SplitView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SplitView.qml deleted file mode 100644 index e18169d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SplitView.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.Universal.baseMediumColor - : (enabled && T.SplitHandle.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/StackView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/StackView.qml deleted file mode 100644 index b5d568f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/StackView.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.StackView { - id: control - - popEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - popExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } - - pushEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - pushExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } - - replaceEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - replaceExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwipeDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwipeDelegate.qml deleted file mode 100644 index 0bb2367..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwipeDelegate.qml +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - color: control.Universal.background - - Rectangle { - width: parent.width - height: parent.height - color: control.down ? control.Universal.listMediumColor : - enabled && control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Switch.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Switch.qml deleted file mode 100644 index 70de360..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Switch.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 5 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwitchDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwitchDelegate.qml deleted file mode 100644 index 18a55e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwitchDelegate.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered) - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabBar.qml deleted file mode 100644 index c06aaaf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabBar.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 100 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 48 - color: control.Universal.background - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabButton.qml deleted file mode 100644 index 7c80803..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabButton.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 // PivotItemMargin - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, - control.checked || control.down || control.hovered ? 1.0 : 0.2) - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(enabled && control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, - control.checked || control.down || (enabled && control.hovered) ? 1.0 : 0.2) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextArea.qml deleted file mode 100644 index 8a3cdd1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextArea.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - rightPadding: padding - 4 - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground - selectionColor: Universal.accent - selectedTextColor: Universal.chromeWhiteColor - placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackMediumLowColor : - Universal.baseMediumColor - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextField.qml deleted file mode 100644 index fb20779..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextField.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - rightPadding: padding - 4 - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground - selectionColor: Universal.accent - selectedTextColor: Universal.chromeWhiteColor - placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackMediumLowColor : - Universal.baseMediumColor - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolBar.qml deleted file mode 100644 index 33aa490..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolBar.qml +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitHeight: 48 // AppBarThemeCompactHeight - color: control.Universal.chromeMediumColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolButton.qml deleted file mode 100644 index 08c346b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolButton.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 68 - implicitHeight: 48 // AppBarThemeCompactHeight - - color: control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent" - - Rectangle { - width: parent.width - height: parent.height - visible: enabled && (control.down || control.hovered) - color: control.down ? control.Universal.listMediumColor : control.Universal.listLowColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolSeparator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolSeparator.qml deleted file mode 100644 index 2d6cc9a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolSeparator.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - leftPadding: vertical ? 16 : 12 - rightPadding: vertical ? 15 : 12 - topPadding: vertical ? 12 : 16 - bottomPadding: vertical ? 12 : 15 - - contentItem: Rectangle { - implicitWidth: control.vertical ? 1 : 20 - implicitHeight: control.vertical ? 20 : 1 - color: control.Universal.baseMediumLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolTip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolTip.qml deleted file mode 100644 index af1d495..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolTip.qml +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 16 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 8 - padding: 8 - topPadding: padding - 3 - bottomPadding: padding - 1 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // ToolTipBorderThemeThickness - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Tumbler.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Tumbler.qml deleted file mode 100644 index e6d7da6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/Tumbler.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - readonly property real __delegateHeight: availableHeight / visibleItemCount - - delegate: Text { - text: modelData - font: control.font - color: control.Universal.foreground - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - required property var modelData - required property int index - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.__delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/VerticalHeaderView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/VerticalHeaderView.qml deleted file mode 100644 index 6e4540d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/VerticalHeaderView.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.VerticalHeaderView { - id: control - - // The contentWidth of TableView will be zero at start-up, until the delegate - // items have been loaded. This means that even if the implicit width of - // VerticalHeaderView should be the same as the content width in the end, we - // need to ensure that it has at least a width of 1 at start-up, otherwise - // TableView won't bother loading any delegates at all. - implicitWidth: Math.max(1, contentWidth) - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - id: delegate - - required property var model - - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: control.Universal.background - - Label { - id: text - text: delegate.model[control.textRole] - width: delegate.width - height: delegate.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/CheckIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/CheckIndicator.qml deleted file mode 100644 index b78e575..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/CheckIndicator.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - - color: !control.enabled ? "transparent" : - control.down && !partiallyChecked ? control.Universal.baseMediumColor : - control.checkState === Qt.Checked ? control.Universal.accent : "transparent" - border.color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.baseMediumColor : - control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor - border.width: 2 // CheckBoxBorderThemeThickness - - property Item control - readonly property bool partiallyChecked: control.checkState === Qt.PartiallyChecked - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - - visible: indicator.control.checkState === Qt.Checked - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : indicator.control.Universal.chromeWhiteColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: indicator.partiallyChecked ? parent.width / 2 : parent.width - height: indicator.partiallyChecked ? parent.height / 2 : parent.height - - visible: !indicator.control.pressed && enabled && indicator.control.hovered || indicator.partiallyChecked - color: !indicator.partiallyChecked ? "transparent" : - !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : - indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - border.width: indicator.partiallyChecked ? 0 : 2 // CheckBoxBorderThemeThickness - border.color: indicator.control.Universal.baseMediumLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/RadioIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/RadioIndicator.qml deleted file mode 100644 index 73fc2e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/RadioIndicator.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.Universal - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - radius: width / 2 - color: "transparent" - border.width: 2 // RadioButtonBorderThemeThickness - border.color: control.checked ? "transparent" : - !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.baseMediumColor : - control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - - property var control - - Rectangle { - id: checkOuterEllipse - width: parent.width - height: parent.height - - radius: width / 2 - opacity: indicator.control.checked ? 1 : 0 - color: "transparent" - border.width: 2 // RadioButtonBorderThemeThickness - border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : indicator.control.Universal.accent - } - - Rectangle { - id: checkGlyph - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 2 - height: parent.height / 2 - - radius: width / 2 - opacity: indicator.control.checked ? 1 : 0 - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : - indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/SwitchIndicator.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/SwitchIndicator.qml deleted file mode 100644 index f88094b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/SwitchIndicator.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -Item { - id: indicator - implicitWidth: 44 - implicitHeight: 20 - - property T.AbstractButton control - - Rectangle { - width: parent.width - height: parent.height - - radius: 10 - color: !indicator.control.enabled ? "transparent" : - indicator.control.pressed ? indicator.control.Universal.baseMediumColor : - indicator.control.checked ? indicator.control.Universal.accent : "transparent" - border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.accent : - indicator.control.hovered && !indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumColor - opacity: enabled && indicator.control.hovered && indicator.control.checked && !indicator.control.pressed ? (indicator.control.Universal.theme === Universal.Light ? 0.7 : 0.9) : 1.0 - border.width: 2 - } - - Rectangle { - width: 10 - height: 10 - radius: 5 - - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.pressed || indicator.control.checked ? indicator.control.Universal.chromeWhiteColor : - indicator.control.hovered && !indicator.control.checked ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - - x: Math.max(5, Math.min(parent.width - width - 5, - indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - Behavior on x { - enabled: !indicator.control.pressed - SmoothedAnimation { velocity: 200 } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/libqtquickcontrols2universalstyleimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/libqtquickcontrols2universalstyleimplplugin.so deleted file mode 100755 index 71d3ac3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/libqtquickcontrols2universalstyleimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/plugins.qmltypes deleted file mode 100644 index 1aeeaf4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/plugins.qmltypes +++ /dev/null @@ -1,83 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickuniversalbusyindicator_p.h" - name: "QQuickUniversalBusyIndicator" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.0", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.1", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.4", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.7", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.11", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 6.0", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 6.3", - "QtQuick.Controls.Universal.impl/BusyIndicatorImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { name: "count"; type: "int"; read: "count"; write: "setCount"; index: 0; isFinal: true } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 1; isFinal: true } - } - Component { - file: "private/qquickuniversalfocusrectangle_p.h" - name: "QQuickUniversalFocusRectangle" - accessSemantics: "reference" - prototype: "QQuickPaintedItem" - exports: [ - "QtQuick.Controls.Universal.impl/FocusRectangle 2.0", - "QtQuick.Controls.Universal.impl/FocusRectangle 2.1", - "QtQuick.Controls.Universal.impl/FocusRectangle 2.4", - "QtQuick.Controls.Universal.impl/FocusRectangle 2.7", - "QtQuick.Controls.Universal.impl/FocusRectangle 2.11", - "QtQuick.Controls.Universal.impl/FocusRectangle 6.0", - "QtQuick.Controls.Universal.impl/FocusRectangle 6.3", - "QtQuick.Controls.Universal.impl/FocusRectangle 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - } - Component { - file: "private/qquickuniversalprogressbar_p.h" - name: "QQuickUniversalProgressBar" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.Universal.impl/ProgressBarImpl 2.0", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 2.1", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 2.4", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 2.7", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 2.11", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 6.0", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 6.3", - "QtQuick.Controls.Universal.impl/ProgressBarImpl 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 0; isFinal: true } - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - index: 1 - isFinal: true - } - Property { - name: "indeterminate" - type: "bool" - read: "isIndeterminate" - write: "setIndeterminate" - index: 2 - isFinal: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/qmldir deleted file mode 100644 index c0f99c5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/qmldir +++ /dev/null @@ -1,14 +0,0 @@ -module QtQuick.Controls.Universal.impl -linktarget Qt6::qtquickcontrols2universalstyleimplplugin -optional plugin qtquickcontrols2universalstyleimplplugin -classname QtQuickControls2UniversalStyleImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Universal/impl/ -CheckIndicator 6.0 CheckIndicator.qml -CheckIndicator 2.0 CheckIndicator.qml -RadioIndicator 6.0 RadioIndicator.qml -RadioIndicator 2.0 RadioIndicator.qml -SwitchIndicator 6.0 SwitchIndicator.qml -SwitchIndicator 2.0 SwitchIndicator.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/libqtquickcontrols2universalstyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/libqtquickcontrols2universalstyleplugin.so deleted file mode 100755 index eb40a18..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/libqtquickcontrols2universalstyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/plugins.qmltypes deleted file mode 100644 index 27d55de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/plugins.qmltypes +++ /dev/null @@ -1,323 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qquickattachedpropertypropagator.h" - name: "QQuickAttachedPropertyPropagator" - accessSemantics: "reference" - prototype: "QObject" - } - Component { - file: "private/qquickuniversalstyle_p.h" - name: "QQuickUniversalStyle" - accessSemantics: "reference" - prototype: "QQuickAttachedPropertyPropagator" - exports: [ - "QtQuick.Controls.Universal/Universal 2.0", - "QtQuick.Controls.Universal/Universal 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickUniversalStyle" - Enum { - name: "Theme" - values: ["Light", "Dark", "System"] - } - Enum { - name: "Color" - values: [ - "Lime", - "Green", - "Emerald", - "Teal", - "Cyan", - "Cobalt", - "Indigo", - "Violet", - "Pink", - "Magenta", - "Crimson", - "Red", - "Orange", - "Amber", - "Yellow", - "Brown", - "Olive", - "Steel", - "Mauve", - "Taupe" - ] - } - Property { - name: "theme" - type: "Theme" - read: "theme" - write: "setTheme" - reset: "resetTheme" - notify: "themeChanged" - index: 0 - isFinal: true - } - Property { - name: "accent" - type: "QVariant" - read: "accent" - write: "setAccent" - reset: "resetAccent" - notify: "accentChanged" - index: 1 - isFinal: true - } - Property { - name: "foreground" - type: "QVariant" - read: "foreground" - write: "setForeground" - reset: "resetForeground" - notify: "foregroundChanged" - index: 2 - isFinal: true - } - Property { - name: "background" - type: "QVariant" - read: "background" - write: "setBackground" - reset: "resetBackground" - notify: "backgroundChanged" - index: 3 - isFinal: true - } - Property { - name: "altHighColor" - type: "QColor" - read: "altHighColor" - notify: "paletteChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "altLowColor" - type: "QColor" - read: "altLowColor" - notify: "paletteChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "altMediumColor" - type: "QColor" - read: "altMediumColor" - notify: "paletteChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "altMediumHighColor" - type: "QColor" - read: "altMediumHighColor" - notify: "paletteChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "altMediumLowColor" - type: "QColor" - read: "altMediumLowColor" - notify: "paletteChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "baseHighColor" - type: "QColor" - read: "baseHighColor" - notify: "paletteChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "baseLowColor" - type: "QColor" - read: "baseLowColor" - notify: "paletteChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "baseMediumColor" - type: "QColor" - read: "baseMediumColor" - notify: "paletteChanged" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "baseMediumHighColor" - type: "QColor" - read: "baseMediumHighColor" - notify: "paletteChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "baseMediumLowColor" - type: "QColor" - read: "baseMediumLowColor" - notify: "paletteChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "chromeAltLowColor" - type: "QColor" - read: "chromeAltLowColor" - notify: "paletteChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "chromeBlackHighColor" - type: "QColor" - read: "chromeBlackHighColor" - notify: "paletteChanged" - index: 15 - isReadonly: true - isFinal: true - } - Property { - name: "chromeBlackLowColor" - type: "QColor" - read: "chromeBlackLowColor" - notify: "paletteChanged" - index: 16 - isReadonly: true - isFinal: true - } - Property { - name: "chromeBlackMediumLowColor" - type: "QColor" - read: "chromeBlackMediumLowColor" - notify: "paletteChanged" - index: 17 - isReadonly: true - isFinal: true - } - Property { - name: "chromeBlackMediumColor" - type: "QColor" - read: "chromeBlackMediumColor" - notify: "paletteChanged" - index: 18 - isReadonly: true - isFinal: true - } - Property { - name: "chromeDisabledHighColor" - type: "QColor" - read: "chromeDisabledHighColor" - notify: "paletteChanged" - index: 19 - isReadonly: true - isFinal: true - } - Property { - name: "chromeDisabledLowColor" - type: "QColor" - read: "chromeDisabledLowColor" - notify: "paletteChanged" - index: 20 - isReadonly: true - isFinal: true - } - Property { - name: "chromeHighColor" - type: "QColor" - read: "chromeHighColor" - notify: "paletteChanged" - index: 21 - isReadonly: true - isFinal: true - } - Property { - name: "chromeLowColor" - type: "QColor" - read: "chromeLowColor" - notify: "paletteChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "chromeMediumColor" - type: "QColor" - read: "chromeMediumColor" - notify: "paletteChanged" - index: 23 - isReadonly: true - isFinal: true - } - Property { - name: "chromeMediumLowColor" - type: "QColor" - read: "chromeMediumLowColor" - notify: "paletteChanged" - index: 24 - isReadonly: true - isFinal: true - } - Property { - name: "chromeWhiteColor" - type: "QColor" - read: "chromeWhiteColor" - notify: "paletteChanged" - index: 25 - isReadonly: true - isFinal: true - } - Property { - name: "listLowColor" - type: "QColor" - read: "listLowColor" - notify: "paletteChanged" - index: 26 - isReadonly: true - isFinal: true - } - Property { - name: "listMediumColor" - type: "QColor" - read: "listMediumColor" - notify: "paletteChanged" - index: 27 - isReadonly: true - isFinal: true - } - Signal { name: "themeChanged" } - Signal { name: "accentChanged" } - Signal { name: "foregroundChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "paletteChanged" } - Method { - name: "color" - type: "QColor" - Parameter { name: "color"; type: "Color" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/qmldir deleted file mode 100644 index 05fc6f1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/Universal/qmldir +++ /dev/null @@ -1,111 +0,0 @@ -module QtQuick.Controls.Universal -linktarget Qt6::qtquickcontrols2universalstyleplugin -plugin qtquickcontrols2universalstyleplugin -classname QtQuickControls2UniversalStylePlugin -typeinfo plugins.qmltypes -import QtQuick.Controls.Basic auto -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Controls/Universal/ -ApplicationWindow 6.0 ApplicationWindow.qml -ApplicationWindow 2.0 ApplicationWindow.qml -BusyIndicator 6.0 BusyIndicator.qml -BusyIndicator 2.0 BusyIndicator.qml -Button 6.0 Button.qml -Button 2.0 Button.qml -CheckBox 6.0 CheckBox.qml -CheckBox 2.0 CheckBox.qml -CheckDelegate 6.0 CheckDelegate.qml -CheckDelegate 2.0 CheckDelegate.qml -ComboBox 6.0 ComboBox.qml -ComboBox 2.0 ComboBox.qml -DelayButton 2.2 DelayButton.qml -DelayButton 6.0 DelayButton.qml -Dial 6.0 Dial.qml -Dial 2.0 Dial.qml -Dialog 2.1 Dialog.qml -Dialog 6.0 Dialog.qml -DialogButtonBox 2.1 DialogButtonBox.qml -DialogButtonBox 6.0 DialogButtonBox.qml -Drawer 6.0 Drawer.qml -Drawer 2.0 Drawer.qml -Frame 6.0 Frame.qml -Frame 2.0 Frame.qml -GroupBox 6.0 GroupBox.qml -GroupBox 2.0 GroupBox.qml -HorizontalHeaderView 2.15 HorizontalHeaderView.qml -HorizontalHeaderView 6.0 HorizontalHeaderView.qml -ItemDelegate 6.0 ItemDelegate.qml -ItemDelegate 2.0 ItemDelegate.qml -Label 6.0 Label.qml -Label 2.0 Label.qml -Menu 6.0 Menu.qml -Menu 2.0 Menu.qml -MenuBar 2.3 MenuBar.qml -MenuBar 6.0 MenuBar.qml -MenuBarItem 2.3 MenuBarItem.qml -MenuBarItem 6.0 MenuBarItem.qml -MenuItem 6.0 MenuItem.qml -MenuItem 2.0 MenuItem.qml -MenuSeparator 2.1 MenuSeparator.qml -MenuSeparator 6.0 MenuSeparator.qml -Page 6.0 Page.qml -Page 2.0 Page.qml -PageIndicator 6.0 PageIndicator.qml -PageIndicator 2.0 PageIndicator.qml -Pane 6.0 Pane.qml -Pane 2.0 Pane.qml -Popup 6.0 Popup.qml -Popup 2.0 Popup.qml -ProgressBar 6.0 ProgressBar.qml -ProgressBar 2.0 ProgressBar.qml -RadioButton 6.0 RadioButton.qml -RadioButton 2.0 RadioButton.qml -RadioDelegate 6.0 RadioDelegate.qml -RadioDelegate 2.0 RadioDelegate.qml -RangeSlider 6.0 RangeSlider.qml -RangeSlider 2.0 RangeSlider.qml -RoundButton 2.1 RoundButton.qml -RoundButton 6.0 RoundButton.qml -ScrollView 6.0 ScrollView.qml -ScrollView 2.0 ScrollView.qml -ScrollBar 6.0 ScrollBar.qml -ScrollBar 2.0 ScrollBar.qml -ScrollIndicator 6.0 ScrollIndicator.qml -ScrollIndicator 2.0 ScrollIndicator.qml -SelectionRectangle 6.0 SelectionRectangle.qml -SelectionRectangle 2.0 SelectionRectangle.qml -Slider 6.0 Slider.qml -Slider 2.0 Slider.qml -SpinBox 6.0 SpinBox.qml -SpinBox 2.0 SpinBox.qml -SplitView 2.13 SplitView.qml -SplitView 6.0 SplitView.qml -StackView 6.0 StackView.qml -StackView 2.0 StackView.qml -SwipeDelegate 6.0 SwipeDelegate.qml -SwipeDelegate 2.0 SwipeDelegate.qml -SwitchDelegate 6.0 SwitchDelegate.qml -SwitchDelegate 2.0 SwitchDelegate.qml -Switch 6.0 Switch.qml -Switch 2.0 Switch.qml -TabBar 6.0 TabBar.qml -TabBar 2.0 TabBar.qml -TabButton 6.0 TabButton.qml -TabButton 2.0 TabButton.qml -TextArea 6.0 TextArea.qml -TextArea 2.0 TextArea.qml -TextField 6.0 TextField.qml -TextField 2.0 TextField.qml -ToolBar 6.0 ToolBar.qml -ToolBar 2.0 ToolBar.qml -ToolButton 6.0 ToolButton.qml -ToolButton 2.0 ToolButton.qml -ToolSeparator 2.1 ToolSeparator.qml -ToolSeparator 6.0 ToolSeparator.qml -ToolTip 6.0 ToolTip.qml -ToolTip 2.0 ToolTip.qml -Tumbler 6.0 Tumbler.qml -Tumbler 2.0 Tumbler.qml -VerticalHeaderView 2.15 VerticalHeaderView.qml -VerticalHeaderView 6.0 VerticalHeaderView.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/AbstractButtonSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/AbstractButtonSection.qml deleted file mode 100644 index c7684c2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/AbstractButtonSection.qml +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("AbstractButton") - - SectionLayout { - Label { - text: qsTr("Text") - tooltip: qsTr("The text displayed on the button.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.text - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Display") - tooltip: qsTr("Determines how the icon and text are displayed within the button.") - disabledState: !backendValues.display.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.display - model: [ "IconOnly", "TextOnly", "TextBesideIcon" ] - scope: "AbstractButton" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - visible: checkable - text: qsTr("Checkable") - tooltip: qsTr("Whether the button is checkable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.checkable.valueToString - backendValue: backendValues.checkable - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Checked") - tooltip: qsTr("Whether the button is checked.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.checked.valueToString - backendValue: backendValues.checked - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Exclusive") - tooltip: qsTr("Whether the button is exclusive.") - disabledState: !backendValues.autoExclusive.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.autoExclusive.valueToString - backendValue: backendValues.autoExclusive - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Auto-Repeat") - tooltip: qsTr("Whether the button repeats pressed(), released() and clicked() signals while the button is pressed and held down.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.autoRepeat.valueToString - backendValue: backendValues.autoRepeat - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/BusyIndicatorSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/BusyIndicatorSpecifics.qml deleted file mode 100644 index 8e0021f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/BusyIndicatorSpecifics.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("BusyIndicator") - - SectionLayout { - Label { - text: qsTr("Running") - tooltip: qsTr("Whether the busy indicator is currently indicating activity.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.running.valueToString - backendValue: backendValues.running - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSection.qml deleted file mode 100644 index d338bd2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSection.qml +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - id: section - caption: qsTr("Button") - - SectionLayout { - - Label { - text: qsTr("Flat") - tooltip: qsTr("Whether the button is flat.") - disabledState: !backendValues.flat.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.flat.valueToString - backendValue: backendValues.flat - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - Label { - text: qsTr("Highlighted") - tooltip: qsTr("Whether the button is highlighted.") - disabledState: !backendValues.highlighted.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.highlighted.valueToString - backendValue: backendValues.highlighted - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSpecifics.qml deleted file mode 100644 index 1de3c0a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSpecifics.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckBoxSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckBoxSpecifics.qml deleted file mode 100644 index 497a668..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckBoxSpecifics.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - CheckSection { - width: parent.width - caption: qsTr("CheckBox") - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckDelegateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckDelegateSpecifics.qml deleted file mode 100644 index 2f959b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckDelegateSpecifics.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - CheckSection { - width: parent.width - caption: qsTr("CheckDelegate") - } - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckSection.qml deleted file mode 100644 index b58d6a2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckSection.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - SectionLayout { - Label { - text: qsTr("Check State") - tooltip: qsTr("The current check state.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.checkState - model: [ "Unchecked", "PartiallyChecked", "Checked" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Tri-state") - tooltip: qsTr("Whether the checkbox has three states.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.tristate.valueToString - backendValue: backendValues.tristate - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ComboBoxSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ComboBoxSpecifics.qml deleted file mode 100644 index 9700bc5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ComboBoxSpecifics.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ComboBox") - - SectionLayout { - Label { - text: qsTr("Text Role") - tooltip: qsTr("The model role used for displaying text.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.textRole - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - Label { - text: qsTr("Editable") - tooltip: qsTr("Whether the combo box is editable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.editable.valueToString - backendValue: backendValues.editable - Layout.fillWidth: true - } - } - Label { - text: qsTr("Flat") - tooltip: qsTr("Whether the combo box button is flat.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.flat.valueToString - backendValue: backendValues.flat - Layout.fillWidth: true - } - } - Label { - text: qsTr("DisplayText") - tooltip: qsTr("Holds the text that is displayed on the combo box button.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.displayText - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ContainerSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ContainerSection.qml deleted file mode 100644 index 93618cb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ContainerSection.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Container") - - SectionLayout { - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSection.qml deleted file mode 100644 index c7f6283..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSection.qml +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Control") - - SectionLayout { - Label { - text: qsTr("Enabled") - tooltip: qsTr("Whether the control is enabled.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Focus Policy") - tooltip: qsTr("Focus policy of the control.") - disabledState: !backendValues.focusPolicy.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.focusPolicy - model: [ "TabFocus", "ClickFocus", "StrongFocus", "WheelFocus", "NoFocus" ] - scope: "Qt" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether control accepts hover events.") - disabledState: !backendValues.hoverEnabled.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Spacing") - tooltip: qsTr("Spacing between internal elements of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.spacing - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wheel") - tooltip: qsTr("Whether control accepts wheel events.") - disabledState: !backendValues.wheelEnabled.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.wheelEnabled.valueToString - backendValue: backendValues.wheelEnabled - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSpecifics.qml deleted file mode 100644 index c7c34a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DelayButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DelayButtonSpecifics.qml deleted file mode 100644 index 309075d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DelayButtonSpecifics.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("DelayButton") - - SectionLayout { - Label { - text: qsTr("Delay") - tooltip: qsTr("The delay in milliseconds.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 0 - stepSize: 1 - backendValue: backendValues.delay - Layout.fillWidth: true - } - } - } - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DialSpecifics.qml deleted file mode 100644 index c0fd3df..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/DialSpecifics.qml +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Dial") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the dial.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the dial range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the dial range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the dial.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the dial.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "Dial" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the dial provides live value updates.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Input Mode") - tooltip: qsTr("How the dial tracks movement.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.inputMode - model: [ "Circular", "Horizontal", "Vertical" ] - scope: "Dial" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the dial wraps when dragged.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/FrameSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/FrameSpecifics.qml deleted file mode 100644 index a7a0aca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/FrameSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/GroupBoxSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/GroupBoxSpecifics.qml deleted file mode 100644 index 29f826e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/GroupBoxSpecifics.qml +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("GroupBox") - - SectionLayout { - Label { - text: qsTr("Title") - tooltip: qsTr("The title of the group box.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.title - Layout.fillWidth: true - } - } - } - } - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/InsetSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/InsetSection.qml deleted file mode 100644 index 125cc01..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/InsetSection.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Inset") - - SectionLayout { - Label { - text: qsTr("Vertical") - } - SecondColumnLayout { - Label { - text: qsTr("Top") - tooltip: qsTr("Top inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.topInset - Layout.fillWidth: true - } - Item { - width: 4 - height: 4 - } - - Label { - text: qsTr("Bottom") - tooltip: qsTr("Bottom inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.bottomInset - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Horizontal") - } - SecondColumnLayout { - Label { - text: qsTr("Left") - tooltip: qsTr("Left inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.leftInset - Layout.fillWidth: true - } - Item { - width: 4 - height: 4 - } - - Label { - text: qsTr("Right") - tooltip: qsTr("Right inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.rightInset - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSection.qml deleted file mode 100644 index 1d6c456..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSection.qml +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - id: section - caption: qsTr("ItemDelegate") - - SectionLayout { - Label { - text: qsTr("Highlighted") - tooltip: qsTr("Whether the delegate is highlighted.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.highlighted.valueToString - backendValue: backendValues.highlighted - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSpecifics.qml deleted file mode 100644 index e80bc01..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSpecifics.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/LabelSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/LabelSpecifics.qml deleted file mode 100644 index 9329225..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/LabelSpecifics.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - StandardTextSection { - width: parent.width - showIsWrapping: true - showFormatProperty: true - showVerticalAlignment: true - } - - Section { - anchors.left: parent.left - anchors.right: parent.right - caption: qsTr("Text Color") - - ColorEditor { - caption: qsTr("Text Color") - backendValue: backendValues.color - supportGradient: false - } - } - - Section { - anchors.left: parent.left - anchors.right: parent.right - caption: qsTr("Style Color") - - ColorEditor { - caption: qsTr("Style Color") - backendValue: backendValues.styleColor - supportGradient: false - } - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaddingSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaddingSection.qml deleted file mode 100644 index d921d28..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaddingSection.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Padding") - - SectionLayout { - Label { - text: qsTr("Top") - tooltip: qsTr("Padding between the content and the top edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.topPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Left") - tooltip: qsTr("Padding between the content and the left edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.leftPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Right") - tooltip: qsTr("Padding between the content and the right edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.rightPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Bottom") - tooltip: qsTr("Padding between the content and the bottom edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.bottomPadding - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageIndicatorSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageIndicatorSpecifics.qml deleted file mode 100644 index 65d9031..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageIndicatorSpecifics.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("PageIndicator") - - SectionLayout { - Label { - text: qsTr("Count") - tooltip: qsTr("The number of pages.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.count - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current page.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Interactive") - tooltip: qsTr("Whether the control is interactive.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.interactive.valueToString - backendValue: backendValues.interactive - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageSpecifics.qml deleted file mode 100644 index c4b8027..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PageSpecifics.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Page") - - SectionLayout { - Label { - text: qsTr("Title") - tooltip: qsTr("Title of the page.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.title - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSection.qml deleted file mode 100644 index 7710198..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSection.qml +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Pane") - - SectionLayout { - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSpecifics.qml deleted file mode 100644 index a7a0aca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ProgressBarSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ProgressBarSpecifics.qml deleted file mode 100644 index 9a604d4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ProgressBarSpecifics.qml +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ProgressBar") - - SectionLayout { - Label { - text: qsTr("Indeterminate") - tooltip: qsTr("Whether the progress is indeterminate.") - disabledState: !backendValues.indeterminate.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.indeterminate.valueToString - backendValue: backendValues.indeterminate - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the progress.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value for the progress.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value for the progress.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioButtonSpecifics.qml deleted file mode 100644 index ecfd4cf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioButtonSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioDelegateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioDelegateSpecifics.qml deleted file mode 100644 index e80bc01..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioDelegateSpecifics.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RangeSliderSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RangeSliderSpecifics.qml deleted file mode 100644 index cb66eec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RangeSliderSpecifics.qml +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("RangeSlider") - - SectionLayout { - Label { - text: qsTr("First Value") - tooltip: qsTr("The value of the first range slider handle.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.first_value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Second Value") - tooltip: qsTr("The value of the second range slider handle.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.second_value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the range slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the range slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the range slider.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the range slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "RangeSlider" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the range slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the range slider provides live value updates.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Touch drag threshold") - tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.touchDragThreshold - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RoundButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RoundButtonSpecifics.qml deleted file mode 100644 index 45c617b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/RoundButtonSpecifics.qml +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("RoundButton") - - SectionLayout { - Label { - text: qsTr("Radius") - tooltip: qsTr("Radius of the button.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.radius - Layout.fillWidth: true - } - } - } - } - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ScrollViewSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ScrollViewSpecifics.qml deleted file mode 100644 index c2623a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ScrollViewSpecifics.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ScrollView") - - SectionLayout { - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SliderSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SliderSpecifics.qml deleted file mode 100644 index a2fada6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SliderSpecifics.qml +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Slider") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the slider.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the slider.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the slider.") - disabledState: !backendValues.snapMode.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "Slider" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the slider provides live value updates.") - disabledState: !backendValues.live.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Touch drag threshold") - tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") - disabledState: !backendValues.touchDragThreshold.isAvailable - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.touchDragThreshold - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SpinBoxSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SpinBoxSpecifics.qml deleted file mode 100644 index 6bd28bb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SpinBoxSpecifics.qml +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("SpinBox") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the spinbox.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the spinbox range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the spinbox range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the spinbox.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Editable") - tooltip: qsTr("Whether the spinbox is editable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.editable.valueToString - backendValue: backendValues.editable - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the spinbox wraps.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/StackViewSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/StackViewSpecifics.qml deleted file mode 100644 index c7c34a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/StackViewSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeDelegateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeDelegateSpecifics.qml deleted file mode 100644 index e80bc01..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeDelegateSpecifics.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeViewSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeViewSpecifics.qml deleted file mode 100644 index 70882e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeViewSpecifics.qml +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("SwipeView") - - SectionLayout { - Label { - text: qsTr("Interactive") - tooltip: qsTr("Whether the view is interactive.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.interactive.valueToString - backendValue: backendValues.interactive - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("Orientation of the view.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - } - } - - ContainerSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchDelegateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchDelegateSpecifics.qml deleted file mode 100644 index d3d600f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchDelegateSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchSpecifics.qml deleted file mode 100644 index ecfd4cf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabBarSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabBarSpecifics.qml deleted file mode 100644 index 1a5b08e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabBarSpecifics.qml +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TabBar") - - SectionLayout { - Label { - text: qsTr("Position") - tooltip: qsTr("Position of the tabbar.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.position - model: [ "Header", "Footer" ] - scope: "TabBar" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ContainerSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabButtonSpecifics.qml deleted file mode 100644 index ecfd4cf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TabButtonSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextAreaSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextAreaSpecifics.qml deleted file mode 100644 index faec481..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextAreaSpecifics.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TextArea") - - SectionLayout { - Label { - text: qsTr("Placeholder") - tooltip: qsTr("Placeholder text displayed when the editor is empty.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.placeholderText - Layout.fillWidth: true - } - - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether text area accepts hover events.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - } - } - } - } - - Section { - width: parent.width - caption: qsTr("Placeholder Text Color") - - ColorEditor { - caption: qsTr("Placeholder Text Color") - backendValue: backendValues.placeholderTextColor - supportGradient: false - } - } - - StandardTextSection { - width: parent.width - showIsWrapping: true - showFormatProperty: true - showVerticalAlignment: true - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextFieldSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextFieldSpecifics.qml deleted file mode 100644 index 54dcefb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TextFieldSpecifics.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TextField") - - SectionLayout { - Label { - text: qsTr("Placeholder") - tooltip: qsTr("Placeholder text displayed when the editor is empty.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.placeholderText - Layout.fillWidth: true - } - - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether text field accepts hover events.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - } - } - } - } - - Section { - width: parent.width - caption: qsTr("Placeholder Text Color") - - ColorEditor { - caption: qsTr("Placeholder Text Color") - backendValue: backendValues.placeholderTextColor - supportGradient: false - } - } - - StandardTextSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolBarSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolBarSpecifics.qml deleted file mode 100644 index 284443c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolBarSpecifics.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ToolBar") - - SectionLayout { - Label { - text: qsTr("Position") - tooltip: qsTr("Position of the toolbar.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.position - model: [ "Header", "Footer" ] - scope: "ToolBar" - Layout.fillWidth: true - } - } - } - } - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolButtonSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolButtonSpecifics.qml deleted file mode 100644 index 1de3c0a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolButtonSpecifics.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolSeparatorSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolSeparatorSpecifics.qml deleted file mode 100644 index a2dfe43..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolSeparatorSpecifics.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ToolSeparator") - - SectionLayout { - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the separator.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TumblerSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TumblerSpecifics.qml deleted file mode 100644 index 4026a63..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/TumblerSpecifics.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Tumbler") - - SectionLayout { - Label { - text: qsTr("Visible Count") - tooltip: qsTr("The count of visible items.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.visibleItemCount - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the tumbler wrap.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon.png deleted file mode 100644 index 666d1ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon16.png deleted file mode 100644 index 5aa57d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon@2x.png deleted file mode 100644 index bb2278f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon.png deleted file mode 100644 index c44909f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon16.png deleted file mode 100644 index 5c921de..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon@2x.png deleted file mode 100644 index f90a1ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon.png deleted file mode 100644 index ee669b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon16.png deleted file mode 100644 index 8d89eab..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon@2x.png deleted file mode 100644 index 51c5601..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon.png deleted file mode 100644 index 2d31b17..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon16.png deleted file mode 100644 index 15fc350..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon@2x.png deleted file mode 100644 index 5f82390..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon.png deleted file mode 100644 index fd9e4e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon16.png deleted file mode 100644 index 31c7654..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon@2x.png deleted file mode 100644 index 22604d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon.png deleted file mode 100644 index 5a55bd9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon16.png deleted file mode 100644 index cd21394..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon@2x.png deleted file mode 100644 index 7beee2f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon.png deleted file mode 100644 index b3b63e3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon16.png deleted file mode 100644 index 8d8c7c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon@2x.png deleted file mode 100644 index 22547a1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon.png deleted file mode 100644 index 32abc8b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon16.png deleted file mode 100644 index e5b65ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon@2x.png deleted file mode 100644 index 8b876f3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon.png deleted file mode 100644 index 5542ecf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon16.png deleted file mode 100644 index 9cf4324..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon@2x.png deleted file mode 100644 index 80dab3c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon.png deleted file mode 100644 index 822cf3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon16.png deleted file mode 100644 index b3ed007..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon@2x.png deleted file mode 100644 index cb81308..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon.png deleted file mode 100644 index 788bef0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon16.png deleted file mode 100644 index b68d384..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon@2x.png deleted file mode 100644 index 7001413..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon.png deleted file mode 100644 index b5ac87e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon16.png deleted file mode 100644 index bc6810b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon@2x.png deleted file mode 100644 index 23db032..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon.png deleted file mode 100644 index edb6b37..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon16.png deleted file mode 100644 index 0fb8967..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon@2x.png deleted file mode 100644 index 7be0ee8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon.png deleted file mode 100644 index 62ebe48..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon16.png deleted file mode 100644 index 2b80484..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon@2x.png deleted file mode 100644 index 55bb116..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon.png deleted file mode 100644 index a023f73..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon16.png deleted file mode 100644 index 6fede21..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon@2x.png deleted file mode 100644 index 0069400..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon.png deleted file mode 100644 index d38170e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon16.png deleted file mode 100644 index 07b46a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon@2x.png deleted file mode 100644 index 4bbddda..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon.png deleted file mode 100644 index 1c4c7b2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon16.png deleted file mode 100644 index 3be4624..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon@2x.png deleted file mode 100644 index aee69b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon.png deleted file mode 100644 index d4b470d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon16.png deleted file mode 100644 index f6f3666..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon@2x.png deleted file mode 100644 index 4553e16..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon.png deleted file mode 100644 index 5ef73ff..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon16.png deleted file mode 100644 index f8ca7a3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon@2x.png deleted file mode 100644 index 0eb7f96..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon.png deleted file mode 100644 index bd0a972..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon16.png deleted file mode 100644 index a08622d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon@2x.png deleted file mode 100644 index 93842e4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon.png deleted file mode 100644 index 37277c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon16.png deleted file mode 100644 index f88711d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon@2x.png deleted file mode 100644 index b62a3ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon.png deleted file mode 100644 index a6ced34..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon16.png deleted file mode 100644 index 0f19d0e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon@2x.png deleted file mode 100644 index 9b5ef95..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon.png deleted file mode 100644 index 031cb27..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon16.png deleted file mode 100644 index 446c469..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon@2x.png deleted file mode 100644 index 0ccb978..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon.png deleted file mode 100644 index e018159..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon16.png deleted file mode 100644 index 9abd275..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon@2x.png deleted file mode 100644 index 787f54c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon.png deleted file mode 100644 index f1b2dc0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon16.png deleted file mode 100644 index 4afc1fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon@2x.png deleted file mode 100644 index c32ecc7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon.png deleted file mode 100644 index ba5537a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon16.png deleted file mode 100644 index c4a62a6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon@2x.png deleted file mode 100644 index e05fd41..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon.png deleted file mode 100644 index 5cb5b2e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon16.png deleted file mode 100644 index 569373a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon@2x.png deleted file mode 100644 index fd9e6ce..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon.png deleted file mode 100644 index 3298f69..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon16.png deleted file mode 100644 index 9ab7861..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon@2x.png deleted file mode 100644 index e5958cd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon.png deleted file mode 100644 index 5e99f06..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon16.png deleted file mode 100644 index 68f22c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon@2x.png deleted file mode 100644 index 549c11c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon.png deleted file mode 100644 index 98eb823..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon16.png deleted file mode 100644 index ff5f95c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon@2x.png deleted file mode 100644 index 236abf0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo deleted file mode 100644 index 0cd3959..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo +++ /dev/null @@ -1,575 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick.Controls.BusyIndicator" - icon: "images/busyindicator-icon16.png" - - ItemLibraryEntry { - name: "Busy Indicator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/busyindicator-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Indicates activity while, for example, content is being loaded.") - } - } - - Type { - name: "QtQuick.Controls.Button" - icon: "images/button-icon16.png" - - ItemLibraryEntry { - name: "Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/button-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A button with text.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } - } - } - - Type { - name: "QtQuick.Controls.CheckBox" - icon: "images/checkbox-icon16.png" - - ItemLibraryEntry { - name: "Check Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/checkbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A checkbox with a text label.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" } - } - } - - Type { - name: "QtQuick.Controls.CheckDelegate" - icon: "images/checkbox-icon16.png" - - ItemLibraryEntry { - name: "Check Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/checkbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Presents items from a model as checkboxes.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.ComboBox" - icon: "images/combobox-icon16.png" - - ItemLibraryEntry { - name: "Combo Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/combobox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("An editable drop-down list.") - } - } - - Type { - name: "QtQuick.Controls.Control" - icon: "images/control-icon16.png" - - ItemLibraryEntry { - name: "Control" - category: "Qt Quick - Controls 2" - libraryIcon: "images/control-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("An abstract base type for UI controls.") - } - } - - Type { - name: "QtQuick.Controls.DelayButton" - icon: "images/button-icon16.png" - - ItemLibraryEntry { - name: "Delay Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/delaybutton-icon.png" - version: "2.2" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A button with a delay preventing accidental presses.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" } - } - } - - Type { - name: "QtQuick.Controls.Dial" - icon: "images/dial-icon16.png" - - ItemLibraryEntry { - name: "Dial" - category: "Qt Quick - Controls 2" - libraryIcon: "images/dial-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - toolTip: qsTr("A circular dial that is rotated to set a value.") - } - } - - Type { - name: "QtQuick.Controls.Frame" - icon: "images/frame-icon16.png" - - ItemLibraryEntry { - name: "Frame" - category: "Qt Quick - Controls 2" - libraryIcon: "images/frame-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("An untitled container for a group of controls.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.GroupBox" - icon: "images/groupbox-icon16.png" - - ItemLibraryEntry { - name: "Group Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/groupbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A titled container for a group of controls.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" } - } - } - - Type { - name: "QtQuick.Controls.ItemDelegate" - icon: "images/itemdelegate-icon16.png" - - ItemLibraryEntry { - name: "Item Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/itemdelegate-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Presents a standard view item. It can be used as a delegate in various views and controls, such as ListView and ComboBox.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.Label" - icon: "images/label-icon16.png" - - ItemLibraryEntry { - name: "Label" - category: "Qt Quick - Controls 2" - libraryIcon: "images/label-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A text label.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" } - } - } - - Type { - name: "QtQuick.Controls.Page" - icon: "images/page-icon16.png" - - ItemLibraryEntry { - name: "Page" - category: "Qt Quick - Controls 2" - libraryIcon: "images/page-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A page with header and footer.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.PageIndicator" - icon: "images/pageindicator-icon16.png" - - ItemLibraryEntry { - name: "Page Indicator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/pageindicator-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Indicates the currently active page.") - - Property { name: "count"; type: "int"; value: 3 } - } - } - - Type { - name: "QtQuick.Controls.Pane" - icon: "images/pane-icon16.png" - - ItemLibraryEntry { - name: "Pane" - category: "Qt Quick - Controls 2" - libraryIcon: "images/pane-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Provides a background matching the application style and theme.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.ProgressBar" - icon: "images/progressbar-icon16.png" - - ItemLibraryEntry { - name: "Progress Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/progressbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A bar indicating the progress of an operation.") - - Property { name: "value"; type: "real"; value: 0.5 } - } - } - - Type { - name: "QtQuick.Controls.RadioButton" - icon: "images/radiobutton-icon16.png" - - ItemLibraryEntry { - name: "Radio Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/radiobutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("An option button that you can toggle on or off.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" } - } - } - - Type { - name: "QtQuick.Controls.RadioDelegate" - icon: "images/radiobutton-icon16.png" - - ItemLibraryEntry { - name: "Radio Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/radiobutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Presents items from a model as radio buttons.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.RangeSlider" - icon: "images/rangeslider-icon16.png" - - ItemLibraryEntry { - name: "Range Slider" - category: "Qt Quick - Controls 2" - libraryIcon: "images/rangeslider-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A bar with adjustable start and end points.") - - Property { name: "first.value"; type: "real"; value: 0.25 } - Property { name: "second.value"; type: "real"; value: 0.75 } - } - } - - Type { - name: "QtQuick.Controls.RoundButton" - icon: "images/roundbutton-icon16.png" - - ItemLibraryEntry { - name: "Round Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/roundbutton-icon.png" - version: "2.1" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A round button with text.") - - Property { name: "text"; type: "string"; value: "+" } - } - } - - Type { - name: "QtQuick.Controls.Slider" - icon: "images/slider-icon16.png" - - ItemLibraryEntry { - name: "Slider" - category: "Qt Quick - Controls 2" - libraryIcon: "images/slider-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("An adjustable slider.") - - Property { name: "value"; type: "real"; value: 0.5 } - } - } - - Type { - name: "QtQuick.Controls.SpinBox" - icon: "images/spinbox-icon16.png" - - ItemLibraryEntry { - name: "Spin Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/spinbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A box with an adjustable number.") - } - } - - Type { - name: "QtQuick.Controls.ScrollView" - icon: "images/scrollview-icon16.png" - - ItemLibraryEntry { - name: "Scroll View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/scrollview-icon.png" - version: "2.2" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A scrollable area.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.StackView" - icon: "images/stackview-icon16.png" - - ItemLibraryEntry { - name: "Stack View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/stackview-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Provides a stack-based navigation for a set of pages.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.SwipeDelegate" - icon: "images/itemdelegate-icon16.png" - - ItemLibraryEntry { - name: "Swipe Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/itemdelegate-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Presents items from a model as items that you can swipe to expose more options.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.SwipeView" - icon: "images/swipeview-icon16.png" - - ItemLibraryEntry { - name: "Swipe View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/swipeview-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Provides a view where you can navigate pages by swiping.") - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.Switch" - icon: "images/switch-icon16.png" - - ItemLibraryEntry { - name: "Switch" - category: "Qt Quick - Controls 2" - libraryIcon: "images/switch-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A button that you can toggle on and off.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" } - } - } - - Type { - name: "QtQuick.Controls.SwitchDelegate" - icon: "images/switch-icon16.png" - - ItemLibraryEntry { - name: "Switch Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/switch-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("Presents items from a model as toggle switches.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.TabBar" - icon: "images/toolbar-icon16.png" - - ItemLibraryEntry { - name: "Tab Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A tab-based navigation model.") - - Property { name: "width"; type: "int"; value: 240 } - } - } - - Type { - name: "QtQuick.Controls.TabButton" - icon: "images/toolbutton-icon16.png" - - ItemLibraryEntry { - name: "Tab Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A button suitable for a tab bar.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" } - } - } - - Type { - name: "QtQuick.Controls.TextArea" - icon: "images/textarea-icon16.png" - - ItemLibraryEntry { - name: "Text Area" - category: "Qt Quick - Controls 2" - libraryIcon: "images/textarea-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A multi-line text box.") - - Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" } - } - } - - Type { - name: "QtQuick.Controls.TextField" - icon: "images/textfield-icon16.png" - - ItemLibraryEntry { - name: "Text Field" - category: "Qt Quick - Controls 2" - libraryIcon: "images/textfield-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A single-line text box.") - - Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" } - } - } - - Type { - name: "QtQuick.Controls.ToolBar" - icon: "images/toolbar-icon16.png" - - ItemLibraryEntry { - name: "Tool Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A row that can hold actions and buttons.") - - Property { name: "width"; type: "int"; value: 360 } - } - } - - Type { - name: "QtQuick.Controls.ToolButton" - icon: "images/toolbutton-icon16.png" - - ItemLibraryEntry { - name: "Tool Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A button suitable for a tool bar.") - - Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" } - } - } - - Type { - name: "QtQuick.Controls.ToolSeparator" - icon: "images/toolseparator-icon16.png" - - ItemLibraryEntry { - name: "Tool Separator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolseparator-icon.png" - version: "2.1" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A line to separate sections in a tool bar.") - } - } - - Type { - name: "QtQuick.Controls.Tumbler" - icon: "images/tumbler-icon16.png" - - ItemLibraryEntry { - name: "Tumbler" - category: "Qt Quick - Controls 2" - libraryIcon: "images/tumbler-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - toolTip: qsTr("A spinnable wheel of selectable items.") - - Property { name: "model"; type: "int"; value: "10" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/libqtquickcontrols2implplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/libqtquickcontrols2implplugin.so deleted file mode 100755 index 90d1cf5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/libqtquickcontrols2implplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/plugins.qmltypes deleted file mode 100644 index a737e22..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/plugins.qmltypes +++ /dev/null @@ -1,1556 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qplatformtheme.h" - name: "QPlatformTheme" - accessSemantics: "value" - Enum { - name: "ThemeHint" - values: [ - "CursorFlashTime", - "KeyboardInputInterval", - "MouseDoubleClickInterval", - "StartDragDistance", - "StartDragTime", - "KeyboardAutoRepeatRate", - "PasswordMaskDelay", - "StartDragVelocity", - "TextCursorWidth", - "DropShadow", - "MaximumScrollBarDragDistance", - "ToolButtonStyle", - "ToolBarIconSize", - "ItemViewActivateItemOnSingleClick", - "SystemIconThemeName", - "SystemIconFallbackThemeName", - "IconThemeSearchPaths", - "StyleNames", - "WindowAutoPlacement", - "DialogButtonBoxLayout", - "DialogButtonBoxButtonsHaveIcons", - "UseFullScreenForPopupMenu", - "KeyboardScheme", - "UiEffects", - "SpellCheckUnderlineStyle", - "TabFocusBehavior", - "IconPixmapSizes", - "PasswordMaskCharacter", - "DialogSnapToDefaultButton", - "ContextMenuOnMouseRelease", - "MousePressAndHoldInterval", - "MouseDoubleClickDistance", - "WheelScrollLines", - "TouchDoubleTapDistance", - "ShowShortcutsInContextMenus", - "IconFallbackSearchPaths", - "MouseQuickSelectionThreshold", - "InteractiveResizeAcrossScreens", - "ShowDirectoriesFirst", - "PreselectFirstFileInDirectory", - "ButtonPressKeys", - "SetFocusOnTouchRelease", - "FlickStartDistance", - "FlickMaximumVelocity", - "FlickDeceleration", - "MenuBarFocusOnAltPressRelease", - "MouseCursorTheme", - "MouseCursorSize", - "UnderlineShortcut", - "ShowIconsInMenus", - "PreferFileIconFromTheme" - ] - } - Enum { - name: "DialogType" - values: [ - "FileDialog", - "ColorDialog", - "FontDialog", - "MessageDialog" - ] - } - Enum { - name: "Palette" - values: [ - "SystemPalette", - "ToolTipPalette", - "ToolButtonPalette", - "ButtonPalette", - "CheckBoxPalette", - "RadioButtonPalette", - "HeaderPalette", - "ComboBoxPalette", - "ItemViewPalette", - "MessageBoxLabelPelette", - "MessageBoxLabelPalette", - "TabBarPalette", - "LabelPalette", - "GroupBoxPalette", - "MenuPalette", - "MenuBarPalette", - "TextEditPalette", - "TextLineEditPalette", - "NPalettes" - ] - } - Enum { - name: "Font" - values: [ - "SystemFont", - "MenuFont", - "MenuBarFont", - "MenuItemFont", - "MessageBoxFont", - "LabelFont", - "TipLabelFont", - "StatusBarFont", - "TitleBarFont", - "MdiSubWindowTitleFont", - "DockWidgetTitleFont", - "PushButtonFont", - "CheckBoxFont", - "RadioButtonFont", - "ToolButtonFont", - "ItemViewFont", - "ListViewFont", - "HeaderViewFont", - "ListBoxFont", - "ComboMenuItemFont", - "ComboLineEditFont", - "SmallFont", - "MiniFont", - "FixedFont", - "GroupBoxTitleFont", - "TabButtonFont", - "EditorFont", - "NFonts" - ] - } - Enum { - name: "StandardPixmap" - values: [ - "TitleBarMenuButton", - "TitleBarMinButton", - "TitleBarMaxButton", - "TitleBarCloseButton", - "TitleBarNormalButton", - "TitleBarShadeButton", - "TitleBarUnshadeButton", - "TitleBarContextHelpButton", - "DockWidgetCloseButton", - "MessageBoxInformation", - "MessageBoxWarning", - "MessageBoxCritical", - "MessageBoxQuestion", - "DesktopIcon", - "TrashIcon", - "ComputerIcon", - "DriveFDIcon", - "DriveHDIcon", - "DriveCDIcon", - "DriveDVDIcon", - "DriveNetIcon", - "DirOpenIcon", - "DirClosedIcon", - "DirLinkIcon", - "DirLinkOpenIcon", - "FileIcon", - "FileLinkIcon", - "ToolBarHorizontalExtensionButton", - "ToolBarVerticalExtensionButton", - "FileDialogStart", - "FileDialogEnd", - "FileDialogToParent", - "FileDialogNewFolder", - "FileDialogDetailedView", - "FileDialogInfoView", - "FileDialogContentsView", - "FileDialogListView", - "FileDialogBack", - "DirIcon", - "DialogOkButton", - "DialogCancelButton", - "DialogHelpButton", - "DialogOpenButton", - "DialogSaveButton", - "DialogCloseButton", - "DialogApplyButton", - "DialogResetButton", - "DialogDiscardButton", - "DialogYesButton", - "DialogNoButton", - "ArrowUp", - "ArrowDown", - "ArrowLeft", - "ArrowRight", - "ArrowBack", - "ArrowForward", - "DirHomeIcon", - "CommandLink", - "VistaShield", - "BrowserReload", - "BrowserStop", - "MediaPlay", - "MediaStop", - "MediaPause", - "MediaSkipForward", - "MediaSkipBackward", - "MediaSeekForward", - "MediaSeekBackward", - "MediaVolume", - "MediaVolumeMuted", - "LineEditClearButton", - "DialogYesToAllButton", - "DialogNoToAllButton", - "DialogSaveAllButton", - "DialogAbortButton", - "DialogRetryButton", - "DialogIgnoreButton", - "RestoreDefaultsButton", - "TabCloseButton", - "NStandardPixmap", - "CustomBase" - ] - } - Enum { - name: "KeyboardSchemes" - values: [ - "WindowsKeyboardScheme", - "MacKeyboardScheme", - "X11KeyboardScheme", - "KdeKeyboardScheme", - "GnomeKeyboardScheme", - "CdeKeyboardScheme" - ] - } - Enum { - name: "UiEffect" - values: [ - "GeneralUiEffect", - "AnimateMenuUiEffect", - "FadeMenuUiEffect", - "AnimateComboUiEffect", - "AnimateTooltipUiEffect", - "FadeTooltipUiEffect", - "AnimateToolBoxUiEffect", - "HoverEffect" - ] - } - } - Component { - file: "private/qquickimageselector_p.h" - name: "QQuickAnimatedImageSelector" - accessSemantics: "reference" - prototype: "QQuickImageSelector" - exports: [ - "QtQuick.Controls.impl/AnimatedImageSelector 2.3", - "QtQuick.Controls.impl/AnimatedImageSelector 6.0" - ] - exportMetaObjectRevisions: [515, 1536] - } - Component { - file: "private/qquickchecklabel_p.h" - name: "QQuickCheckLabel" - accessSemantics: "reference" - prototype: "QQuickText" - exports: [ - "QtQuick.Controls.impl/CheckLabel 2.3", - "QtQuick.Controls.impl/CheckLabel 2.4", - "QtQuick.Controls.impl/CheckLabel 2.6", - "QtQuick.Controls.impl/CheckLabel 2.7", - "QtQuick.Controls.impl/CheckLabel 2.9", - "QtQuick.Controls.impl/CheckLabel 2.10", - "QtQuick.Controls.impl/CheckLabel 2.11", - "QtQuick.Controls.impl/CheckLabel 6.0", - "QtQuick.Controls.impl/CheckLabel 6.2", - "QtQuick.Controls.impl/CheckLabel 6.3", - "QtQuick.Controls.impl/CheckLabel 6.7" - ] - exportMetaObjectRevisions: [ - 515, - 516, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - } - Component { - file: "private/qquickclippedtext_p.h" - name: "QQuickClippedText" - accessSemantics: "reference" - prototype: "QQuickText" - exports: [ - "QtQuick.Controls.impl/ClippedText 2.2", - "QtQuick.Controls.impl/ClippedText 2.3", - "QtQuick.Controls.impl/ClippedText 2.4", - "QtQuick.Controls.impl/ClippedText 2.6", - "QtQuick.Controls.impl/ClippedText 2.7", - "QtQuick.Controls.impl/ClippedText 2.9", - "QtQuick.Controls.impl/ClippedText 2.10", - "QtQuick.Controls.impl/ClippedText 2.11", - "QtQuick.Controls.impl/ClippedText 6.0", - "QtQuick.Controls.impl/ClippedText 6.2", - "QtQuick.Controls.impl/ClippedText 6.3", - "QtQuick.Controls.impl/ClippedText 6.7" - ] - exportMetaObjectRevisions: [ - 514, - 515, - 516, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Property { name: "clipX"; type: "double"; read: "clipX"; write: "setClipX"; index: 0; isFinal: true } - Property { name: "clipY"; type: "double"; read: "clipY"; write: "setClipY"; index: 1; isFinal: true } - Property { - name: "clipWidth" - type: "double" - read: "clipWidth" - write: "setClipWidth" - index: 2 - isFinal: true - } - Property { - name: "clipHeight" - type: "double" - read: "clipHeight" - write: "setClipHeight" - index: 3 - isFinal: true - } - } - Component { - file: "private/qquickcolor_p.h" - name: "QQuickColor" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Controls.impl/Color 2.3", - "QtQuick.Controls.impl/Color 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [515, 1536] - Method { - name: "transparent" - type: "QColor" - Parameter { name: "color"; type: "QColor" } - Parameter { name: "opacity"; type: "double" } - } - Method { - name: "blend" - type: "QColor" - Parameter { name: "a"; type: "QColor" } - Parameter { name: "b"; type: "QColor" } - Parameter { name: "factor"; type: "double" } - } - } - Component { - file: "private/qquickcolorimage_p.h" - name: "QQuickColorImage" - accessSemantics: "reference" - prototype: "QQuickImage" - exports: [ - "QtQuick.Controls.impl/ColorImage 2.3", - "QtQuick.Controls.impl/ColorImage 2.4", - "QtQuick.Controls.impl/ColorImage 2.5", - "QtQuick.Controls.impl/ColorImage 2.7", - "QtQuick.Controls.impl/ColorImage 2.11", - "QtQuick.Controls.impl/ColorImage 2.14", - "QtQuick.Controls.impl/ColorImage 2.15", - "QtQuick.Controls.impl/ColorImage 6.0", - "QtQuick.Controls.impl/ColorImage 6.2", - "QtQuick.Controls.impl/ColorImage 6.3", - "QtQuick.Controls.impl/ColorImage 6.7" - ] - exportMetaObjectRevisions: [ - 515, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - reset: "resetColor" - notify: "colorChanged" - index: 0 - isFinal: true - } - Property { - name: "defaultColor" - type: "QColor" - read: "defaultColor" - write: "setDefaultColor" - reset: "resetDefaultColor" - notify: "defaultColorChanged" - index: 1 - isFinal: true - } - Signal { name: "colorChanged" } - Signal { name: "defaultColorChanged" } - } - Component { - file: "private/qquickiconimage_p.h" - name: "QQuickIconImage" - accessSemantics: "reference" - prototype: "QQuickImage" - exports: [ - "QtQuick.Controls.impl/IconImage 2.3", - "QtQuick.Controls.impl/IconImage 2.4", - "QtQuick.Controls.impl/IconImage 2.5", - "QtQuick.Controls.impl/IconImage 2.7", - "QtQuick.Controls.impl/IconImage 2.11", - "QtQuick.Controls.impl/IconImage 2.14", - "QtQuick.Controls.impl/IconImage 2.15", - "QtQuick.Controls.impl/IconImage 6.0", - "QtQuick.Controls.impl/IconImage 6.2", - "QtQuick.Controls.impl/IconImage 6.3", - "QtQuick.Controls.impl/IconImage 6.7" - ] - exportMetaObjectRevisions: [ - 515, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 0 - isFinal: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 1 - isFinal: true - } - Signal { name: "nameChanged" } - Signal { name: "colorChanged" } - } - Component { - file: "private/qquickiconlabel_p.h" - name: "QQuickIconLabel" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.impl/IconLabel 2.3", - "QtQuick.Controls.impl/IconLabel 2.4", - "QtQuick.Controls.impl/IconLabel 2.7", - "QtQuick.Controls.impl/IconLabel 2.11", - "QtQuick.Controls.impl/IconLabel 6.0", - "QtQuick.Controls.impl/IconLabel 6.3", - "QtQuick.Controls.impl/IconLabel 6.7" - ] - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Display" - values: [ - "IconOnly", - "TextOnly", - "TextBesideIcon", - "TextUnderIcon" - ] - } - Property { name: "icon"; type: "QQuickIcon"; read: "icon"; write: "setIcon"; index: 0; isFinal: true } - Property { name: "text"; type: "QString"; read: "text"; write: "setText"; index: 1; isFinal: true } - Property { name: "font"; type: "QFont"; read: "font"; write: "setFont"; index: 2; isFinal: true } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 3; isFinal: true } - Property { - name: "display" - type: "Display" - read: "display" - write: "setDisplay" - index: 4 - isFinal: true - } - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - index: 5 - isFinal: true - } - Property { - name: "mirrored" - type: "bool" - read: "isMirrored" - write: "setMirrored" - index: 6 - isFinal: true - } - Property { - name: "alignment" - type: "Qt::Alignment" - read: "alignment" - write: "setAlignment" - index: 7 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - index: 8 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - index: 9 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - index: 10 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - index: 11 - isFinal: true - } - } - Component { - file: "private/qquickimageselector_p.h" - name: "QQuickImageSelector" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus", "QQmlPropertyValueInterceptor"] - exports: [ - "QtQuick.Controls.impl/ImageSelector 2.3", - "QtQuick.Controls.impl/ImageSelector 6.0" - ] - exportMetaObjectRevisions: [515, 1536] - Property { - name: "source" - type: "QUrl" - read: "source" - notify: "sourceChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { name: "name"; type: "QString"; read: "name"; write: "setName"; index: 1; isFinal: true } - Property { name: "path"; type: "QString"; read: "path"; write: "setPath"; index: 2; isFinal: true } - Property { - name: "states" - type: "QVariantList" - read: "states" - write: "setStates" - index: 3 - isFinal: true - } - Property { - name: "separator" - type: "QString" - read: "separator" - write: "setSeparator" - index: 4 - isFinal: true - } - Property { name: "cache"; type: "bool"; read: "cache"; write: "setCache"; index: 5; isFinal: true } - Signal { name: "sourceChanged" } - } - Component { - file: "private/qquickitemgroup_p.h" - name: "QQuickItemGroup" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - exports: [ - "QtQuick.Controls.impl/ItemGroup 2.2", - "QtQuick.Controls.impl/ItemGroup 2.4", - "QtQuick.Controls.impl/ItemGroup 2.7", - "QtQuick.Controls.impl/ItemGroup 2.11", - "QtQuick.Controls.impl/ItemGroup 6.0", - "QtQuick.Controls.impl/ItemGroup 6.2", - "QtQuick.Controls.impl/ItemGroup 6.3", - "QtQuick.Controls.impl/ItemGroup 6.7" - ] - exportMetaObjectRevisions: [ - 514, - 516, - 519, - 523, - 1536, - 1538, - 1539, - 1543 - ] - } - Component { - file: "private/qquickmnemoniclabel_p.h" - name: "QQuickMnemonicLabel" - accessSemantics: "reference" - prototype: "QQuickText" - exports: [ - "QtQuick.Controls.impl/MnemonicLabel 2.3", - "QtQuick.Controls.impl/MnemonicLabel 2.4", - "QtQuick.Controls.impl/MnemonicLabel 2.6", - "QtQuick.Controls.impl/MnemonicLabel 2.7", - "QtQuick.Controls.impl/MnemonicLabel 2.9", - "QtQuick.Controls.impl/MnemonicLabel 2.10", - "QtQuick.Controls.impl/MnemonicLabel 2.11", - "QtQuick.Controls.impl/MnemonicLabel 6.0", - "QtQuick.Controls.impl/MnemonicLabel 6.2", - "QtQuick.Controls.impl/MnemonicLabel 6.3", - "QtQuick.Controls.impl/MnemonicLabel 6.7" - ] - exportMetaObjectRevisions: [ - 515, - 516, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Property { name: "text"; type: "QString"; read: "text"; write: "setText"; index: 0; isFinal: true } - Property { - name: "mnemonicVisible" - type: "bool" - read: "isMnemonicVisible" - write: "setMnemonicVisible" - index: 1 - isFinal: true - } - } - Component { - file: "private/qquickninepatchimage_p.h" - name: "QQuickNinePatchImage" - accessSemantics: "reference" - prototype: "QQuickImage" - exports: [ - "QtQuick.Controls.impl/NinePatchImage 2.3", - "QtQuick.Controls.impl/NinePatchImage 2.4", - "QtQuick.Controls.impl/NinePatchImage 2.5", - "QtQuick.Controls.impl/NinePatchImage 2.7", - "QtQuick.Controls.impl/NinePatchImage 2.11", - "QtQuick.Controls.impl/NinePatchImage 2.14", - "QtQuick.Controls.impl/NinePatchImage 2.15", - "QtQuick.Controls.impl/NinePatchImage 6.0", - "QtQuick.Controls.impl/NinePatchImage 6.2", - "QtQuick.Controls.impl/NinePatchImage 6.3", - "QtQuick.Controls.impl/NinePatchImage 6.7" - ] - exportMetaObjectRevisions: [ - 515, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "topPadding" - type: "double" - read: "topPadding" - notify: "topPaddingChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - notify: "leftPaddingChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - notify: "rightPaddingChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - notify: "bottomPaddingChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - type: "double" - read: "topInset" - notify: "topInsetChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "leftInset" - type: "double" - read: "leftInset" - notify: "leftInsetChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "rightInset" - type: "double" - read: "rightInset" - notify: "rightInsetChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "bottomInset" - type: "double" - read: "bottomInset" - notify: "bottomInsetChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - Signal { name: "topInsetChanged" } - Signal { name: "leftInsetChanged" } - Signal { name: "rightInsetChanged" } - Signal { name: "bottomInsetChanged" } - } - Component { - file: "private/qquickimageselector_p.h" - name: "QQuickNinePatchImageSelector" - accessSemantics: "reference" - prototype: "QQuickImageSelector" - exports: [ - "QtQuick.Controls.impl/NinePatchImageSelector 2.3", - "QtQuick.Controls.impl/NinePatchImageSelector 6.0" - ] - exportMetaObjectRevisions: [515, 1536] - } - Component { - file: "private/qquickoverlay_p.h" - name: "QQuickOverlayAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "overlay" - type: "QQuickOverlay" - isPointer: true - read: "overlay" - notify: "overlayChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "modal" - type: "QQmlComponent" - isPointer: true - read: "modal" - write: "setModal" - notify: "modalChanged" - index: 1 - isFinal: true - } - Property { - name: "modeless" - type: "QQmlComponent" - isPointer: true - read: "modeless" - write: "setModeless" - notify: "modelessChanged" - index: 2 - isFinal: true - } - Signal { name: "overlayChanged" } - Signal { name: "modalChanged" } - Signal { name: "modelessChanged" } - Signal { name: "pressed" } - Signal { name: "released" } - } - Component { - file: "private/qtquickcontrols2foreign_p.h" - name: "QQuickOverlay" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.impl/Overlay 2.3", - "QtQuick.Controls.impl/Overlay 2.4", - "QtQuick.Controls.impl/Overlay 2.7", - "QtQuick.Controls.impl/Overlay 2.11", - "QtQuick.Controls.impl/Overlay 6.0", - "QtQuick.Controls.impl/Overlay 6.3", - "QtQuick.Controls.impl/Overlay 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - attachedType: "QQuickOverlayAttached" - Property { - name: "modal" - type: "QQmlComponent" - isPointer: true - read: "modal" - write: "setModal" - notify: "modalChanged" - index: 0 - isFinal: true - } - Property { - name: "modeless" - type: "QQmlComponent" - isPointer: true - read: "modeless" - write: "setModeless" - notify: "modelessChanged" - index: 1 - isFinal: true - } - Signal { name: "modalChanged" } - Signal { name: "modelessChanged" } - Signal { name: "pressed" } - Signal { name: "released" } - } - Component { - file: "private/qquickpaddedrectangle_p.h" - name: "QQuickPaddedRectangle" - accessSemantics: "reference" - prototype: "QQuickRectangle" - exports: [ - "QtQuick.Controls.impl/PaddedRectangle 2.0", - "QtQuick.Controls.impl/PaddedRectangle 2.1", - "QtQuick.Controls.impl/PaddedRectangle 2.4", - "QtQuick.Controls.impl/PaddedRectangle 2.7", - "QtQuick.Controls.impl/PaddedRectangle 2.11", - "QtQuick.Controls.impl/PaddedRectangle 6.0", - "QtQuick.Controls.impl/PaddedRectangle 6.3", - "QtQuick.Controls.impl/PaddedRectangle 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "padding" - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 0 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 1 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 2 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 3 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 4 - isFinal: true - } - Signal { name: "paddingChanged" } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - } - Component { - file: "private/qquickplaceholdertext_p.h" - name: "QQuickPlaceholderText" - accessSemantics: "reference" - prototype: "QQuickText" - exports: [ - "QtQuick.Controls.impl/PlaceholderText 2.2", - "QtQuick.Controls.impl/PlaceholderText 2.3", - "QtQuick.Controls.impl/PlaceholderText 2.4", - "QtQuick.Controls.impl/PlaceholderText 2.6", - "QtQuick.Controls.impl/PlaceholderText 2.7", - "QtQuick.Controls.impl/PlaceholderText 2.9", - "QtQuick.Controls.impl/PlaceholderText 2.10", - "QtQuick.Controls.impl/PlaceholderText 2.11", - "QtQuick.Controls.impl/PlaceholderText 6.0", - "QtQuick.Controls.impl/PlaceholderText 6.2", - "QtQuick.Controls.impl/PlaceholderText 6.3", - "QtQuick.Controls.impl/PlaceholderText 6.7" - ] - exportMetaObjectRevisions: [ - 514, - 515, - 516, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Method { name: "updateAlignment" } - } - Component { - file: "private/qquickplatformtheme_p.h" - name: "QQuickPlatformTheme" - accessSemantics: "reference" - prototype: "QObject" - extension: "QPlatformTheme" - extensionIsNamespace: true - exports: ["QtQuick.Controls.impl/PlatformTheme 6.3"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1539] - Method { - name: "themeHint" - type: "QVariant" - Parameter { name: "themeHint"; type: "QPlatformTheme::ThemeHint" } - } - } - Component { - file: "private/qtquickcontrols2foreign_p.h" - name: "QQuickSplitHandleAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Controls.impl/SplitHandle 2.13", - "QtQuick.Controls.impl/SplitHandle 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [525, 1536] - attachedType: "QQuickSplitHandleAttached" - Property { - name: "hovered" - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "hoveredChanged" } - Signal { name: "pressedChanged" } - } - Component { - file: "private/qquickchecklabel_p.h" - name: "QQuickText" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - interfaces: ["QQuickTextInterface"] - Enum { - name: "HAlignment" - values: [ - "AlignLeft", - "AlignRight", - "AlignHCenter", - "AlignJustify" - ] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Enum { - name: "TextStyle" - values: ["Normal", "Outline", "Raised", "Sunken"] - } - Enum { - name: "TextFormat" - values: [ - "PlainText", - "RichText", - "MarkdownText", - "AutoText", - "StyledText" - ] - } - Enum { - name: "TextElideMode" - values: ["ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"] - } - Enum { - name: "WrapMode" - values: [ - "NoWrap", - "WordWrap", - "WrapAnywhere", - "WrapAtWordBoundaryOrAnywhere", - "Wrap" - ] - } - Enum { - name: "RenderType" - values: ["QtRendering", "NativeRendering", "CurveRendering"] - } - Enum { - name: "RenderTypeQuality" - values: [ - "DefaultRenderTypeQuality", - "LowRenderTypeQuality", - "NormalRenderTypeQuality", - "HighRenderTypeQuality", - "VeryHighRenderTypeQuality" - ] - } - Enum { - name: "LineHeightMode" - values: ["ProportionalHeight", "FixedHeight"] - } - Enum { - name: "FontSizeMode" - values: ["FixedSize", "HorizontalFit", "VerticalFit", "Fit"] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 1 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 2 - } - Property { - name: "linkColor" - type: "QColor" - read: "linkColor" - write: "setLinkColor" - notify: "linkColorChanged" - index: 3 - } - Property { - name: "style" - type: "TextStyle" - read: "style" - write: "setStyle" - notify: "styleChanged" - index: 4 - } - Property { - name: "styleColor" - type: "QColor" - read: "styleColor" - write: "setStyleColor" - notify: "styleColorChanged" - index: 5 - } - Property { - name: "horizontalAlignment" - type: "HAlignment" - read: "hAlign" - write: "setHAlign" - reset: "resetHAlign" - notify: "horizontalAlignmentChanged" - index: 6 - } - Property { - name: "effectiveHorizontalAlignment" - type: "HAlignment" - read: "effectiveHAlign" - notify: "effectiveHorizontalAlignmentChanged" - index: 7 - isReadonly: true - } - Property { - name: "verticalAlignment" - type: "VAlignment" - read: "vAlign" - write: "setVAlign" - notify: "verticalAlignmentChanged" - index: 8 - } - Property { - name: "wrapMode" - type: "WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 9 - } - Property { - name: "lineCount" - type: "int" - read: "lineCount" - notify: "lineCountChanged" - index: 10 - isReadonly: true - } - Property { - name: "truncated" - type: "bool" - read: "truncated" - notify: "truncatedChanged" - index: 11 - isReadonly: true - } - Property { - name: "maximumLineCount" - type: "int" - read: "maximumLineCount" - write: "setMaximumLineCount" - reset: "resetMaximumLineCount" - notify: "maximumLineCountChanged" - index: 12 - } - Property { - name: "textFormat" - type: "TextFormat" - read: "textFormat" - write: "setTextFormat" - notify: "textFormatChanged" - index: 13 - } - Property { - name: "elide" - type: "TextElideMode" - read: "elideMode" - write: "setElideMode" - notify: "elideModeChanged" - index: 14 - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - notify: "contentWidthChanged" - index: 15 - isReadonly: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - notify: "contentHeightChanged" - index: 16 - isReadonly: true - } - Property { - name: "paintedWidth" - type: "double" - read: "contentWidth" - notify: "contentWidthChanged" - index: 17 - isReadonly: true - } - Property { - name: "paintedHeight" - type: "double" - read: "contentHeight" - notify: "contentHeightChanged" - index: 18 - isReadonly: true - } - Property { - name: "lineHeight" - type: "double" - read: "lineHeight" - write: "setLineHeight" - notify: "lineHeightChanged" - index: 19 - } - Property { - name: "lineHeightMode" - type: "LineHeightMode" - read: "lineHeightMode" - write: "setLineHeightMode" - notify: "lineHeightModeChanged" - index: 20 - } - Property { - name: "baseUrl" - type: "QUrl" - read: "baseUrl" - write: "setBaseUrl" - reset: "resetBaseUrl" - notify: "baseUrlChanged" - index: 21 - } - Property { - name: "minimumPixelSize" - type: "int" - read: "minimumPixelSize" - write: "setMinimumPixelSize" - notify: "minimumPixelSizeChanged" - index: 22 - } - Property { - name: "minimumPointSize" - type: "int" - read: "minimumPointSize" - write: "setMinimumPointSize" - notify: "minimumPointSizeChanged" - index: 23 - } - Property { - name: "fontSizeMode" - type: "FontSizeMode" - read: "fontSizeMode" - write: "setFontSizeMode" - notify: "fontSizeModeChanged" - index: 24 - } - Property { - name: "renderType" - type: "RenderType" - read: "renderType" - write: "setRenderType" - notify: "renderTypeChanged" - index: 25 - } - Property { - name: "hoveredLink" - revision: 514 - type: "QString" - read: "hoveredLink" - notify: "linkHovered" - index: 26 - isReadonly: true - } - Property { - name: "renderTypeQuality" - revision: 1536 - type: "int" - read: "renderTypeQuality" - write: "setRenderTypeQuality" - notify: "renderTypeQualityChanged" - index: 27 - } - Property { - name: "padding" - revision: 518 - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 28 - } - Property { - name: "topPadding" - revision: 518 - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 29 - } - Property { - name: "leftPadding" - revision: 518 - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 30 - } - Property { - name: "rightPadding" - revision: 518 - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 31 - } - Property { - name: "bottomPadding" - revision: 518 - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 32 - } - Property { - name: "fontInfo" - revision: 521 - type: "QJSValue" - read: "fontInfo" - notify: "fontInfoChanged" - index: 33 - isReadonly: true - } - Property { - name: "advance" - revision: 522 - type: "QSizeF" - read: "advance" - notify: "contentSizeChanged" - index: 34 - isReadonly: true - } - Signal { - name: "textChanged" - Parameter { name: "text"; type: "QString" } - } - Signal { - name: "linkActivated" - Parameter { name: "link"; type: "QString" } - } - Signal { - name: "linkHovered" - revision: 514 - Parameter { name: "link"; type: "QString" } - } - Signal { - name: "fontChanged" - Parameter { name: "font"; type: "QFont" } - } - Signal { name: "colorChanged" } - Signal { name: "linkColorChanged" } - Signal { - name: "styleChanged" - Parameter { name: "style"; type: "QQuickText::TextStyle" } - } - Signal { name: "styleColorChanged" } - Signal { - name: "horizontalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickText::HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickText::VAlignment" } - } - Signal { name: "wrapModeChanged" } - Signal { name: "lineCountChanged" } - Signal { name: "truncatedChanged" } - Signal { name: "maximumLineCountChanged" } - Signal { - name: "textFormatChanged" - Parameter { name: "textFormat"; type: "QQuickText::TextFormat" } - } - Signal { - name: "elideModeChanged" - Parameter { name: "mode"; type: "QQuickText::TextElideMode" } - } - Signal { name: "contentSizeChanged" } - Signal { - name: "contentWidthChanged" - Parameter { name: "contentWidth"; type: "double" } - } - Signal { - name: "contentHeightChanged" - Parameter { name: "contentHeight"; type: "double" } - } - Signal { - name: "lineHeightChanged" - Parameter { name: "lineHeight"; type: "double" } - } - Signal { - name: "lineHeightModeChanged" - Parameter { name: "mode"; type: "LineHeightMode" } - } - Signal { name: "fontSizeModeChanged" } - Signal { name: "minimumPixelSizeChanged" } - Signal { name: "minimumPointSizeChanged" } - Signal { name: "effectiveHorizontalAlignmentChanged" } - Signal { - name: "lineLaidOut" - Parameter { name: "line"; type: "QQuickTextLine"; isPointer: true } - } - Signal { name: "baseUrlChanged" } - Signal { name: "renderTypeChanged" } - Signal { name: "paddingChanged"; revision: 518 } - Signal { name: "topPaddingChanged"; revision: 518 } - Signal { name: "leftPaddingChanged"; revision: 518 } - Signal { name: "rightPaddingChanged"; revision: 518 } - Signal { name: "bottomPaddingChanged"; revision: 518 } - Signal { name: "fontInfoChanged"; revision: 521 } - Signal { name: "renderTypeQualityChanged"; revision: 1536 } - Method { name: "q_updateLayout" } - Method { name: "triggerPreprocess" } - Method { - name: "loadResource" - revision: 1543 - type: "QVariant" - Parameter { name: "type"; type: "int" } - Parameter { name: "source"; type: "QUrl" } - } - Method { name: "resourceRequestFinished" } - Method { name: "imageDownloadFinished" } - Method { name: "forceLayout"; revision: 521 } - Method { - name: "linkAt" - revision: 515 - type: "QString" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - } - Component { - file: "private/qquicktumblerview_p.h" - name: "QQuickTumblerView" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Controls.impl/TumblerView 2.1", - "QtQuick.Controls.impl/TumblerView 2.4", - "QtQuick.Controls.impl/TumblerView 2.7", - "QtQuick.Controls.impl/TumblerView 2.11", - "QtQuick.Controls.impl/TumblerView 6.0", - "QtQuick.Controls.impl/TumblerView 6.3", - "QtQuick.Controls.impl/TumblerView 6.7" - ] - exportMetaObjectRevisions: [513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Property { - name: "path" - type: "QQuickPath" - isPointer: true - read: "path" - write: "setPath" - notify: "pathChanged" - index: 2 - } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "pathChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/qmldir deleted file mode 100644 index 84355c3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/impl/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Controls.impl -linktarget Qt6::qtquickcontrols2implplugin -optional plugin qtquickcontrols2implplugin -classname QtQuickControls2ImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -depends QtQuick.Templates auto -prefer :/qt-project.org/imports/QtQuick/Controls/impl/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/libqtquickcontrols2plugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/libqtquickcontrols2plugin.so deleted file mode 100755 index cf3bc29..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/libqtquickcontrols2plugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/plugins.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/plugins.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/qmldir deleted file mode 100644 index 86f42c2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Controls/qmldir +++ /dev/null @@ -1,16 +0,0 @@ -module QtQuick.Controls -linktarget Qt6::qtquickcontrols2plugin -plugin qtquickcontrols2plugin -classname QtQuickControls2Plugin -designersupported -typeinfo plugins.qmltypes -optional import QtQuick.Controls.Fusion auto -optional import QtQuick.Controls.Material auto -optional import QtQuick.Controls.Imagine auto -optional import QtQuick.Controls.Universal auto -optional import QtQuick.Controls.Windows auto -optional import QtQuick.Controls.macOS auto -optional import QtQuick.Controls.iOS auto -default import QtQuick.Controls.Basic auto -prefer :/qt-project.org/imports/QtQuick/Controls/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/libqtquickdialogsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/libqtquickdialogsplugin.so deleted file mode 100755 index a815b8d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/libqtquickdialogsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/plugins.qmltypes deleted file mode 100644 index 098b227..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/plugins.qmltypes +++ /dev/null @@ -1,558 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qtquickdialogs2foreign_p.h" - name: "QPlatformDialogHelper" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "StandardButtons" - alias: "StandardButton" - isFlag: true - values: [ - "NoButton", - "Ok", - "Save", - "SaveAll", - "Open", - "Yes", - "YesToAll", - "No", - "NoToAll", - "Abort", - "Retry", - "Ignore", - "Close", - "Cancel", - "Discard", - "Help", - "Apply", - "Reset", - "RestoreDefaults", - "FirstButton", - "LastButton", - "LowestBit", - "HighestBit" - ] - } - Enum { - name: "ButtonRole" - values: [ - "InvalidRole", - "AcceptRole", - "RejectRole", - "DestructiveRole", - "ActionRole", - "HelpRole", - "YesRole", - "NoRole", - "ResetRole", - "ApplyRole", - "NRoles", - "RoleMask", - "AlternateRole", - "Stretch", - "Reverse", - "EOL" - ] - } - Enum { - name: "ButtonLayout" - values: [ - "UnknownLayout", - "WinLayout", - "MacLayout", - "KdeLayout", - "GnomeLayout", - "AndroidLayout" - ] - } - Signal { name: "accept" } - Signal { name: "reject" } - } - Component { - file: "private/qquickabstractdialog_p.h" - name: "QQuickAbstractDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - Enum { - name: "StandardCode" - values: ["Rejected", "Accepted"] - } - Property { - name: "data" - type: "QObject" - isList: true - read: "data" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "parentWindow" - type: "QWindow" - isPointer: true - read: "parentWindow" - write: "setParentWindow" - reset: "resetParentWindow" - notify: "parentWindowChanged" - index: 1 - isFinal: true - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 2 - isFinal: true - } - Property { - name: "flags" - type: "Qt::WindowFlags" - read: "flags" - write: "setFlags" - notify: "flagsChanged" - index: 3 - isFinal: true - } - Property { - name: "modality" - type: "Qt::WindowModality" - read: "modality" - write: "setModality" - notify: "modalityChanged" - index: 4 - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 5 - isFinal: true - } - Property { - name: "result" - type: "int" - read: "result" - write: "setResult" - notify: "resultChanged" - index: 6 - isFinal: true - } - Signal { name: "accepted" } - Signal { name: "rejected" } - Signal { name: "parentWindowChanged" } - Signal { name: "titleChanged" } - Signal { name: "flagsChanged" } - Signal { name: "modalityChanged" } - Signal { name: "visibleChanged" } - Signal { name: "resultChanged" } - Method { name: "open" } - Method { name: "close" } - Method { name: "accept" } - Method { name: "reject" } - Method { - name: "done" - Parameter { name: "result"; type: "int" } - } - } - Component { - file: "private/qquickcolordialog_p.h" - name: "QQuickColorDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickAbstractDialog" - exports: ["QtQuick.Dialogs/ColorDialog 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "selectedColor" - type: "QColor" - read: "selectedColor" - write: "setSelectedColor" - notify: "selectedColorChanged" - index: 0 - } - Property { - name: "options" - type: "QColorDialogOptions::ColorDialogOptions" - read: "options" - write: "setOptions" - reset: "resetOptions" - notify: "optionsChanged" - index: 1 - } - Signal { name: "selectedColorChanged" } - Signal { name: "optionsChanged" } - } - Component { - file: "private/qquickfiledialog_p.h" - name: "QQuickFileDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickAbstractDialog" - exports: ["QtQuick.Dialogs/FileDialog 6.2"] - exportMetaObjectRevisions: [1538] - Enum { - name: "FileMode" - values: ["OpenFile", "OpenFiles", "SaveFile"] - } - Property { - name: "fileMode" - type: "FileMode" - read: "fileMode" - write: "setFileMode" - notify: "fileModeChanged" - index: 0 - isFinal: true - } - Property { - name: "selectedFile" - type: "QUrl" - read: "selectedFile" - write: "setSelectedFile" - notify: "selectedFileChanged" - index: 1 - isFinal: true - } - Property { - name: "selectedFiles" - type: "QUrl" - isList: true - read: "selectedFiles" - notify: "selectedFilesChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "currentFile" - type: "QUrl" - read: "currentFile" - write: "setCurrentFile" - notify: "currentFileChanged" - index: 3 - isFinal: true - } - Property { - name: "currentFiles" - type: "QUrl" - isList: true - read: "currentFiles" - write: "setCurrentFiles" - notify: "currentFilesChanged" - index: 4 - isFinal: true - } - Property { - name: "currentFolder" - type: "QUrl" - read: "currentFolder" - write: "setCurrentFolder" - notify: "currentFolderChanged" - index: 5 - isFinal: true - } - Property { - name: "options" - type: "QFileDialogOptions::FileDialogOptions" - read: "options" - write: "setOptions" - reset: "resetOptions" - notify: "optionsChanged" - index: 6 - isFinal: true - } - Property { - name: "nameFilters" - type: "QStringList" - read: "nameFilters" - write: "setNameFilters" - reset: "resetNameFilters" - notify: "nameFiltersChanged" - index: 7 - isFinal: true - } - Property { - name: "selectedNameFilter" - type: "QQuickFileNameFilter" - isPointer: true - read: "selectedNameFilter" - index: 8 - isReadonly: true - isConstant: true - } - Property { - name: "defaultSuffix" - type: "QString" - read: "defaultSuffix" - write: "setDefaultSuffix" - reset: "resetDefaultSuffix" - notify: "defaultSuffixChanged" - index: 9 - isFinal: true - } - Property { - name: "acceptLabel" - type: "QString" - read: "acceptLabel" - write: "setAcceptLabel" - reset: "resetAcceptLabel" - notify: "acceptLabelChanged" - index: 10 - isFinal: true - } - Property { - name: "rejectLabel" - type: "QString" - read: "rejectLabel" - write: "setRejectLabel" - reset: "resetRejectLabel" - notify: "rejectLabelChanged" - index: 11 - isFinal: true - } - Signal { name: "fileModeChanged" } - Signal { name: "selectedFileChanged" } - Signal { name: "selectedFilesChanged" } - Signal { name: "currentFileChanged" } - Signal { name: "currentFilesChanged" } - Signal { name: "currentFolderChanged" } - Signal { name: "optionsChanged" } - Signal { name: "nameFiltersChanged" } - Signal { name: "defaultSuffixChanged" } - Signal { name: "acceptLabelChanged" } - Signal { name: "rejectLabelChanged" } - } - Component { - file: "private/qtquickdialogs2foreign_p.h" - name: "QQuickFileNameFilter" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - write: "setIndex" - notify: "indexChanged" - index: 0 - isFinal: true - } - Property { - name: "name" - type: "QString" - read: "name" - notify: "nameChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "extensions" - type: "QStringList" - read: "extensions" - notify: "extensionsChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "globs" - type: "QStringList" - read: "globs" - notify: "globsChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { - name: "indexChanged" - Parameter { name: "index"; type: "int" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "QString" } - } - Signal { - name: "extensionsChanged" - Parameter { name: "extensions"; type: "QStringList" } - } - Signal { - name: "globsChanged" - Parameter { name: "globs"; type: "QStringList" } - } - } - Component { - file: "private/qquickfolderdialog_p.h" - name: "QQuickFolderDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickAbstractDialog" - exports: ["QtQuick.Dialogs/FolderDialog 6.3"] - exportMetaObjectRevisions: [1539] - Property { - name: "currentFolder" - type: "QUrl" - read: "currentFolder" - write: "setCurrentFolder" - notify: "currentFolderChanged" - index: 0 - isFinal: true - } - Property { - name: "selectedFolder" - type: "QUrl" - read: "selectedFolder" - write: "setSelectedFolder" - notify: "selectedFolderChanged" - index: 1 - isFinal: true - } - Property { - name: "options" - type: "QFileDialogOptions::FileDialogOptions" - read: "options" - write: "setOptions" - reset: "resetOptions" - notify: "optionsChanged" - index: 2 - isFinal: true - } - Property { - name: "acceptLabel" - type: "QString" - read: "acceptLabel" - write: "setAcceptLabel" - reset: "resetAcceptLabel" - notify: "acceptLabelChanged" - index: 3 - isFinal: true - } - Property { - name: "rejectLabel" - type: "QString" - read: "rejectLabel" - write: "setRejectLabel" - reset: "resetRejectLabel" - notify: "rejectLabelChanged" - index: 4 - isFinal: true - } - Signal { name: "currentFolderChanged" } - Signal { name: "selectedFolderChanged" } - Signal { name: "optionsChanged" } - Signal { name: "acceptLabelChanged" } - Signal { name: "rejectLabelChanged" } - } - Component { - file: "private/qquickfontdialog_p.h" - name: "QQuickFontDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickAbstractDialog" - exports: ["QtQuick.Dialogs/FontDialog 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "selectedFont" - type: "QFont" - read: "selectedFont" - write: "setSelectedFont" - notify: "selectedFontChanged" - index: 0 - } - Property { - name: "currentFont" - type: "QFont" - read: "currentFont" - write: "setCurrentFont" - notify: "currentFontChanged" - index: 1 - isFinal: true - } - Property { - name: "options" - type: "QFontDialogOptions::FontDialogOptions" - read: "options" - write: "setOptions" - reset: "resetOptions" - notify: "optionsChanged" - index: 2 - } - Signal { name: "selectedFontChanged" } - Signal { name: "currentFontChanged" } - Signal { name: "optionsChanged" } - } - Component { - file: "private/qquickmessagedialog_p.h" - name: "QQuickMessageDialog" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickAbstractDialog" - extension: "QPlatformDialogHelper" - extensionIsNamespace: true - exports: ["QtQuick.Dialogs/MessageDialog 6.3"] - exportMetaObjectRevisions: [1539] - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "informativeText" - type: "QString" - read: "informativeText" - write: "setInformativeText" - notify: "informativeTextChanged" - index: 1 - isFinal: true - } - Property { - name: "detailedText" - type: "QString" - read: "detailedText" - write: "setDetailedText" - notify: "detailedTextChanged" - index: 2 - isFinal: true - } - Property { - name: "buttons" - type: "QPlatformDialogHelper::StandardButtons" - read: "buttons" - write: "setButtons" - notify: "buttonsChanged" - index: 3 - isFinal: true - } - Signal { name: "textChanged" } - Signal { name: "informativeTextChanged" } - Signal { name: "detailedTextChanged" } - Signal { name: "buttonsChanged" } - Signal { - name: "buttonClicked" - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - Parameter { name: "role"; type: "QPlatformDialogHelper::ButtonRole" } - } - Method { - name: "handleClick" - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - Parameter { name: "role"; type: "QPlatformDialogHelper::ButtonRole" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/qmldir deleted file mode 100644 index 8ada0cd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Dialogs -linktarget Qt6::qtquickdialogsplugin -optional plugin qtquickdialogsplugin -classname QtQuickDialogsPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -depends QtQuick.Dialogs.quickimpl auto -prefer :/qt-project.org/imports/QtQuick/Dialogs/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/libqtquickdialogs2quickimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/libqtquickdialogs2quickimplplugin.so deleted file mode 100755 index bfe76fa..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/libqtquickdialogs2quickimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/plugins.qmltypes deleted file mode 100644 index f148c45..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/plugins.qmltypes +++ /dev/null @@ -1,2590 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qplatformdialoghelper.h" - name: "QPlatformDialogHelper" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "StandardButtons" - alias: "StandardButton" - isFlag: true - values: [ - "NoButton", - "Ok", - "Save", - "SaveAll", - "Open", - "Yes", - "YesToAll", - "No", - "NoToAll", - "Abort", - "Retry", - "Ignore", - "Close", - "Cancel", - "Discard", - "Help", - "Apply", - "Reset", - "RestoreDefaults", - "FirstButton", - "LastButton", - "LowestBit", - "HighestBit" - ] - } - Enum { - name: "ButtonRole" - values: [ - "InvalidRole", - "AcceptRole", - "RejectRole", - "DestructiveRole", - "ActionRole", - "HelpRole", - "YesRole", - "NoRole", - "ResetRole", - "ApplyRole", - "NRoles", - "RoleMask", - "AlternateRole", - "Stretch", - "Reverse", - "EOL" - ] - } - Enum { - name: "ButtonLayout" - values: [ - "UnknownLayout", - "WinLayout", - "MacLayout", - "KdeLayout", - "GnomeLayout", - "AndroidLayout" - ] - } - Signal { name: "accept" } - Signal { name: "reject" } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickAbstractButton" - accessSemantics: "reference" - prototype: "QQuickControl" - Enum { - name: "Display" - values: [ - "IconOnly", - "TextOnly", - "TextBesideIcon", - "TextUnderIcon" - ] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - reset: "resetText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "down" - type: "bool" - read: "isDown" - write: "setDown" - reset: "resetDown" - notify: "downChanged" - index: 1 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "checked" - type: "bool" - read: "isChecked" - write: "setChecked" - notify: "checkedChanged" - index: 3 - isFinal: true - } - Property { - name: "checkable" - type: "bool" - read: "isCheckable" - write: "setCheckable" - notify: "checkableChanged" - index: 4 - isFinal: true - } - Property { - name: "autoExclusive" - type: "bool" - read: "autoExclusive" - write: "setAutoExclusive" - notify: "autoExclusiveChanged" - index: 5 - isFinal: true - } - Property { - name: "autoRepeat" - type: "bool" - read: "autoRepeat" - write: "setAutoRepeat" - notify: "autoRepeatChanged" - index: 6 - isFinal: true - } - Property { - name: "indicator" - type: "QQuickItem" - isPointer: true - read: "indicator" - write: "setIndicator" - notify: "indicatorChanged" - index: 7 - isFinal: true - } - Property { - name: "icon" - revision: 515 - type: "QQuickIcon" - read: "icon" - write: "setIcon" - notify: "iconChanged" - index: 8 - isFinal: true - } - Property { - name: "display" - revision: 515 - type: "Display" - read: "display" - write: "setDisplay" - notify: "displayChanged" - index: 9 - isFinal: true - } - Property { - name: "action" - revision: 515 - type: "QQuickAction" - isPointer: true - read: "action" - write: "setAction" - notify: "actionChanged" - index: 10 - isFinal: true - } - Property { - name: "autoRepeatDelay" - revision: 516 - type: "int" - read: "autoRepeatDelay" - write: "setAutoRepeatDelay" - notify: "autoRepeatDelayChanged" - index: 11 - isFinal: true - } - Property { - name: "autoRepeatInterval" - revision: 516 - type: "int" - read: "autoRepeatInterval" - write: "setAutoRepeatInterval" - notify: "autoRepeatIntervalChanged" - index: 12 - isFinal: true - } - Property { - name: "pressX" - revision: 516 - type: "double" - read: "pressX" - notify: "pressXChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "pressY" - revision: 516 - type: "double" - read: "pressY" - notify: "pressYChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorWidth" - revision: 517 - type: "double" - read: "implicitIndicatorWidth" - notify: "implicitIndicatorWidthChanged" - index: 15 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorHeight" - revision: 517 - type: "double" - read: "implicitIndicatorHeight" - notify: "implicitIndicatorHeightChanged" - index: 16 - isReadonly: true - isFinal: true - } - Signal { name: "pressed" } - Signal { name: "released" } - Signal { name: "canceled" } - Signal { name: "clicked" } - Signal { name: "pressAndHold" } - Signal { name: "doubleClicked" } - Signal { name: "textChanged" } - Signal { name: "downChanged" } - Signal { name: "pressedChanged" } - Signal { name: "checkedChanged" } - Signal { name: "checkableChanged" } - Signal { name: "autoExclusiveChanged" } - Signal { name: "autoRepeatChanged" } - Signal { name: "indicatorChanged" } - Signal { name: "toggled"; revision: 514 } - Signal { name: "iconChanged"; revision: 515 } - Signal { name: "displayChanged"; revision: 515 } - Signal { name: "actionChanged"; revision: 515 } - Signal { name: "autoRepeatDelayChanged"; revision: 516 } - Signal { name: "autoRepeatIntervalChanged"; revision: 516 } - Signal { name: "pressXChanged"; revision: 516 } - Signal { name: "pressYChanged"; revision: 516 } - Signal { name: "implicitIndicatorWidthChanged"; revision: 517 } - Signal { name: "implicitIndicatorHeightChanged"; revision: 517 } - Method { name: "toggle" } - Method { name: "accessiblePressAction" } - } - Component { - file: "private/qquickabstractcolorpicker_p.h" - name: "QQuickAbstractColorPicker" - accessSemantics: "reference" - prototype: "QQuickControl" - deferredNames: ["background", "contentItem", "handle"] - exports: [ - "QtQuick.Dialogs.quickimpl/AbstractColorPicker 6.4", - "QtQuick.Dialogs.quickimpl/AbstractColorPicker 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1540, 1543] - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 0 - } - Property { - name: "hue" - type: "double" - read: "hue" - write: "setHue" - notify: "colorChanged" - index: 1 - } - Property { - name: "saturation" - type: "double" - read: "saturation" - write: "setSaturation" - notify: "colorChanged" - index: 2 - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "colorChanged" - index: 3 - } - Property { - name: "lightness" - type: "double" - read: "lightness" - write: "setLightness" - notify: "colorChanged" - index: 4 - } - Property { - name: "alpha" - type: "double" - read: "alpha" - write: "setAlpha" - notify: "colorChanged" - index: 5 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - notify: "pressedChanged" - index: 6 - isFinal: true - } - Property { - name: "handle" - type: "QQuickItem" - isPointer: true - read: "handle" - write: "setHandle" - notify: "handleChanged" - index: 7 - isFinal: true - } - Property { - name: "implicitHandleWidth" - type: "double" - read: "implicitHandleWidth" - notify: "implicitHandleWidthChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHandleHeight" - type: "double" - read: "implicitHandleHeight" - notify: "implicitHandleHeightChanged" - index: 9 - isReadonly: true - isFinal: true - } - Signal { - name: "colorChanged" - Parameter { name: "color"; type: "QColor" } - } - Signal { name: "pressedChanged" } - Signal { name: "handleChanged" } - Signal { name: "implicitHandleWidthChanged" } - Signal { name: "implicitHandleHeightChanged" } - Signal { - name: "colorPicked" - Parameter { name: "color"; type: "QColor" } - } - } - Component { - file: "private/qquickcolordialogimpl_p.h" - name: "QQuickColorDialogImpl" - accessSemantics: "reference" - prototype: "QQuickDialog" - exports: ["QtQuick.Dialogs.quickimpl/ColorDialogImpl 6.4"] - exportMetaObjectRevisions: [1540] - attachedType: "QQuickColorDialogImplAttached" - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 0 - } - Property { - name: "hue" - type: "double" - read: "hue" - write: "setHue" - notify: "colorChanged" - index: 1 - } - Property { - name: "saturation" - type: "double" - read: "saturation" - write: "setSaturation" - notify: "colorChanged" - index: 2 - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "colorChanged" - index: 3 - } - Property { - name: "lightness" - type: "double" - read: "lightness" - write: "setLightness" - notify: "colorChanged" - index: 4 - } - Property { - name: "alpha" - type: "double" - read: "alpha" - write: "setAlpha" - notify: "colorChanged" - index: 5 - isFinal: true - } - Property { - name: "red" - type: "int" - read: "red" - write: "setRed" - notify: "colorChanged" - index: 6 - isFinal: true - } - Property { - name: "green" - type: "int" - read: "green" - write: "setGreen" - notify: "colorChanged" - index: 7 - isFinal: true - } - Property { - name: "blue" - type: "int" - read: "blue" - write: "setBlue" - notify: "colorChanged" - index: 8 - isFinal: true - } - Property { - name: "isHsl" - type: "bool" - read: "isHsl" - write: "setHsl" - notify: "specChanged" - index: 9 - isFinal: true - } - Signal { - name: "colorChanged" - Parameter { name: "color"; type: "QColor" } - } - Signal { name: "specChanged" } - Method { name: "invokeEyeDropper" } - } - Component { - file: "private/qquickcolordialogimpl_p.h" - name: "QQuickColorDialogImplAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "buttonBox" - type: "QQuickDialogButtonBox" - isPointer: true - read: "buttonBox" - write: "setButtonBox" - notify: "buttonBoxChanged" - index: 0 - isFinal: true - } - Property { - name: "eyeDropperButton" - type: "QQuickAbstractButton" - isPointer: true - read: "eyeDropperButton" - write: "setEyeDropperButton" - notify: "eyeDropperButtonChanged" - index: 1 - isFinal: true - } - Property { - name: "colorPicker" - type: "QQuickAbstractColorPicker" - isPointer: true - read: "colorPicker" - write: "setColorPicker" - notify: "colorPickerChanged" - index: 2 - isFinal: true - } - Property { - name: "colorInputs" - type: "QQuickColorInputs" - isPointer: true - read: "colorInputs" - write: "setColorInputs" - notify: "colorInputsChanged" - index: 3 - isFinal: true - } - Property { - name: "alphaSlider" - type: "QQuickSlider" - isPointer: true - read: "alphaSlider" - write: "setAlphaSlider" - notify: "alphaSliderChanged" - index: 4 - isFinal: true - } - Signal { name: "buttonBoxChanged" } - Signal { name: "eyeDropperButtonChanged" } - Signal { name: "colorPickerChanged" } - Signal { name: "colorInputsChanged" } - Signal { name: "alphaSliderChanged" } - } - Component { - file: "private/qquickcolorinputs_p.h" - name: "QQuickColorInputs" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Dialogs.quickimpl/ColorInputsImpl 6.0", - "QtQuick.Dialogs.quickimpl/ColorInputsImpl 6.3", - "QtQuick.Dialogs.quickimpl/ColorInputsImpl 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 0 - } - Property { name: "red"; type: "int"; read: "red"; notify: "colorChanged"; index: 1; isReadonly: true } - Property { - name: "green" - type: "int" - read: "green" - notify: "colorChanged" - index: 2 - isReadonly: true - } - Property { - name: "blue" - type: "int" - read: "blue" - notify: "colorChanged" - index: 3 - isReadonly: true - } - Property { - name: "hue" - type: "double" - read: "hue" - notify: "colorChanged" - index: 4 - isReadonly: true - } - Property { - name: "hslSaturation" - type: "double" - read: "hslSaturation" - notify: "colorChanged" - index: 5 - isReadonly: true - } - Property { - name: "hsvSaturation" - type: "double" - read: "hsvSaturation" - notify: "colorChanged" - index: 6 - isReadonly: true - } - Property { - name: "value" - type: "double" - read: "value" - notify: "colorChanged" - index: 7 - isReadonly: true - } - Property { - name: "lightness" - type: "double" - read: "lightness" - notify: "colorChanged" - index: 8 - isReadonly: true - } - Property { - name: "alpha" - type: "double" - read: "alpha" - notify: "colorChanged" - index: 9 - isReadonly: true - } - Property { - name: "showAlpha" - type: "bool" - read: "showAlpha" - write: "setShowAlpha" - notify: "showAlphaChanged" - index: 10 - } - Property { - name: "hexInput" - type: "QQuickTextInput" - isPointer: true - read: "hexInput" - write: "setHexInput" - notify: "hexInputChanged" - index: 11 - } - Property { - name: "redInput" - type: "QQuickTextInput" - isPointer: true - read: "redInput" - write: "setRedInput" - notify: "redInputChanged" - index: 12 - } - Property { - name: "greenInput" - type: "QQuickTextInput" - isPointer: true - read: "greenInput" - write: "setGreenInput" - notify: "greenInputChanged" - index: 13 - } - Property { - name: "blueInput" - type: "QQuickTextInput" - isPointer: true - read: "blueInput" - write: "setBlueInput" - notify: "blueInputChanged" - index: 14 - } - Property { - name: "hsvHueInput" - type: "QQuickTextInput" - isPointer: true - read: "hsvHueInput" - write: "setHsvHueInput" - notify: "hsvHueInputChanged" - index: 15 - } - Property { - name: "hslHueInput" - type: "QQuickTextInput" - isPointer: true - read: "hslHueInput" - write: "setHslHueInput" - notify: "hslHueInputChanged" - index: 16 - } - Property { - name: "hsvSaturationInput" - type: "QQuickTextInput" - isPointer: true - read: "hsvSaturationInput" - write: "setHsvSaturationInput" - notify: "hsvSaturationInputChanged" - index: 17 - } - Property { - name: "hslSaturationInput" - type: "QQuickTextInput" - isPointer: true - read: "hslSaturationInput" - write: "setHslSaturationInput" - notify: "hslSaturationInputChanged" - index: 18 - } - Property { - name: "valueInput" - type: "QQuickTextInput" - isPointer: true - read: "valueInput" - write: "setValueInput" - notify: "valueInputChanged" - index: 19 - } - Property { - name: "lightnessInput" - type: "QQuickTextInput" - isPointer: true - read: "lightnessInput" - write: "setLightnessInput" - notify: "lightnessInputChanged" - index: 20 - } - Property { - name: "rgbAlphaInput" - type: "QQuickTextInput" - isPointer: true - read: "rgbAlphaInput" - write: "setRgbAlphaInput" - notify: "rgbAlphaInputChanged" - index: 21 - } - Property { - name: "hsvAlphaInput" - type: "QQuickTextInput" - isPointer: true - read: "hsvAlphaInput" - write: "setHsvAlphaInput" - notify: "hsvAlphaInputChanged" - index: 22 - } - Property { - name: "hslAlphaInput" - type: "QQuickTextInput" - isPointer: true - read: "hslAlphaInput" - write: "setHslAlphaInput" - notify: "hslAlphaInputChanged" - index: 23 - } - Signal { - name: "colorChanged" - Parameter { name: "c"; type: "QColor" } - } - Signal { - name: "colorModified" - Parameter { name: "c"; type: "QColor" } - } - Signal { name: "hslChanged" } - Signal { - name: "showAlphaChanged" - Parameter { type: "bool" } - } - Signal { name: "hexInputChanged" } - Signal { name: "redInputChanged" } - Signal { name: "greenInputChanged" } - Signal { name: "blueInputChanged" } - Signal { name: "hsvHueInputChanged" } - Signal { name: "hslHueInputChanged" } - Signal { name: "hsvSaturationInputChanged" } - Signal { name: "hslSaturationInputChanged" } - Signal { name: "valueInputChanged" } - Signal { name: "lightnessInputChanged" } - Signal { name: "rgbAlphaInputChanged" } - Signal { name: "hsvAlphaInputChanged" } - Signal { name: "hslAlphaInputChanged" } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickControl" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - reset: "resetFont" - notify: "fontChanged" - index: 0 - isFinal: true - } - Property { - name: "availableWidth" - type: "double" - read: "availableWidth" - notify: "availableWidthChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "availableHeight" - type: "double" - read: "availableHeight" - notify: "availableHeightChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "padding" - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 3 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 4 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 5 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 6 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 7 - isFinal: true - } - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - reset: "resetSpacing" - notify: "spacingChanged" - index: 8 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - reset: "resetLocale" - notify: "localeChanged" - index: 9 - isFinal: true - } - Property { - name: "mirrored" - type: "bool" - read: "isMirrored" - notify: "mirroredChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "focusPolicy" - type: "Qt::FocusPolicy" - read: "focusPolicy" - write: "setFocusPolicy" - notify: "focusPolicyChanged" - index: 11 - isFinal: true - } - Property { - name: "focusReason" - type: "Qt::FocusReason" - read: "focusReason" - write: "setFocusReason" - notify: "focusReasonChanged" - index: 12 - isFinal: true - } - Property { - name: "visualFocus" - type: "bool" - read: "hasVisualFocus" - notify: "visualFocusChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "hovered" - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "hoverEnabled" - type: "bool" - read: "isHoverEnabled" - write: "setHoverEnabled" - reset: "resetHoverEnabled" - notify: "hoverEnabledChanged" - index: 15 - isFinal: true - } - Property { - name: "wheelEnabled" - type: "bool" - read: "isWheelEnabled" - write: "setWheelEnabled" - notify: "wheelEnabledChanged" - index: 16 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 17 - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - write: "setContentItem" - notify: "contentItemChanged" - index: 18 - isFinal: true - } - Property { - name: "baselineOffset" - type: "double" - read: "baselineOffset" - write: "setBaselineOffset" - reset: "resetBaselineOffset" - notify: "baselineOffsetChanged" - index: 19 - isFinal: true - } - Property { - name: "horizontalPadding" - revision: 517 - type: "double" - read: "horizontalPadding" - write: "setHorizontalPadding" - reset: "resetHorizontalPadding" - notify: "horizontalPaddingChanged" - index: 20 - isFinal: true - } - Property { - name: "verticalPadding" - revision: 517 - type: "double" - read: "verticalPadding" - write: "setVerticalPadding" - reset: "resetVerticalPadding" - notify: "verticalPaddingChanged" - index: 21 - isFinal: true - } - Property { - name: "implicitContentWidth" - revision: 517 - type: "double" - read: "implicitContentWidth" - notify: "implicitContentWidthChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "implicitContentHeight" - revision: 517 - type: "double" - read: "implicitContentHeight" - notify: "implicitContentHeightChanged" - index: 23 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 24 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 25 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 26 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 27 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 28 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 29 - isFinal: true - } - Signal { name: "fontChanged" } - Signal { name: "availableWidthChanged" } - Signal { name: "availableHeightChanged" } - Signal { name: "paddingChanged" } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - Signal { name: "spacingChanged" } - Signal { name: "localeChanged" } - Signal { name: "focusReasonChanged" } - Signal { name: "mirroredChanged" } - Signal { name: "visualFocusChanged" } - Signal { name: "hoveredChanged" } - Signal { name: "hoverEnabledChanged" } - Signal { name: "wheelEnabledChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "baselineOffsetChanged" } - Signal { name: "horizontalPaddingChanged"; revision: 517 } - Signal { name: "verticalPaddingChanged"; revision: 517 } - Signal { name: "implicitContentWidthChanged"; revision: 517 } - Signal { name: "implicitContentHeightChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickDialog" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPopup" - extension: "QPlatformDialogHelper" - extensionIsNamespace: true - Enum { - name: "StandardCode" - values: ["Rejected", "Accepted"] - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 0 - isFinal: true - } - Property { - name: "header" - type: "QQuickItem" - isPointer: true - read: "header" - write: "setHeader" - notify: "headerChanged" - index: 1 - isFinal: true - } - Property { - name: "footer" - type: "QQuickItem" - isPointer: true - read: "footer" - write: "setFooter" - notify: "footerChanged" - index: 2 - isFinal: true - } - Property { - name: "standardButtons" - type: "QPlatformDialogHelper::StandardButtons" - read: "standardButtons" - write: "setStandardButtons" - notify: "standardButtonsChanged" - index: 3 - isFinal: true - } - Property { - name: "result" - revision: 515 - type: "int" - read: "result" - write: "setResult" - notify: "resultChanged" - index: 4 - isFinal: true - } - Property { - name: "implicitHeaderWidth" - revision: 517 - type: "double" - read: "implicitHeaderWidth" - notify: "implicitHeaderWidthChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHeaderHeight" - revision: 517 - type: "double" - read: "implicitHeaderHeight" - notify: "implicitHeaderHeightChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterWidth" - revision: 517 - type: "double" - read: "implicitFooterWidth" - notify: "implicitFooterWidthChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterHeight" - revision: 517 - type: "double" - read: "implicitFooterHeight" - notify: "implicitFooterHeightChanged" - index: 8 - isReadonly: true - isFinal: true - } - Signal { name: "accepted" } - Signal { name: "rejected" } - Signal { name: "titleChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "standardButtonsChanged" } - Signal { name: "applied"; revision: 515 } - Signal { name: "reset"; revision: 515 } - Signal { name: "discarded"; revision: 515 } - Signal { name: "helpRequested"; revision: 515 } - Signal { name: "resultChanged"; revision: 515 } - Signal { name: "implicitHeaderWidthChanged" } - Signal { name: "implicitHeaderHeightChanged" } - Signal { name: "implicitFooterWidthChanged" } - Signal { name: "implicitFooterHeightChanged" } - Method { name: "accept" } - Method { name: "reject" } - Method { - name: "done" - Parameter { name: "result"; type: "int" } - } - Method { - name: "standardButton" - revision: 515 - type: "QQuickAbstractButton" - isPointer: true - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - } - } - Component { - file: "private/qquickfiledialogdelegate_p.h" - name: "QQuickFileDialogDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Dialogs.quickimpl/FileDialogDelegate 6.2", - "QtQuick.Dialogs.quickimpl/FileDialogDelegate 6.3", - "QtQuick.Dialogs.quickimpl/FileDialogDelegate 6.7" - ] - exportMetaObjectRevisions: [1538, 1539, 1543] - Property { - name: "dialog" - type: "QQuickDialog" - isPointer: true - read: "dialog" - write: "setDialog" - notify: "dialogChanged" - index: 0 - } - Property { - name: "file" - type: "QUrl" - read: "file" - write: "setFile" - notify: "fileChanged" - index: 1 - } - Signal { name: "dialogChanged" } - Signal { name: "fileChanged" } - } - Component { - file: "private/qquickfiledialogimpl_p.h" - name: "QQuickFileDialogImpl" - accessSemantics: "reference" - prototype: "QQuickDialog" - exports: ["QtQuick.Dialogs.quickimpl/FileDialogImpl 6.2"] - exportMetaObjectRevisions: [1538] - attachedType: "QQuickFileDialogImplAttached" - Property { - name: "currentFolder" - type: "QUrl" - read: "currentFolder" - write: "setCurrentFolder" - notify: "currentFolderChanged" - index: 0 - isFinal: true - } - Property { - name: "selectedFile" - type: "QUrl" - read: "selectedFile" - write: "setSelectedFile" - notify: "selectedFileChanged" - index: 1 - isFinal: true - } - Property { - name: "nameFilters" - type: "QStringList" - read: "nameFilters" - notify: "nameFiltersChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "selectedNameFilter" - type: "QQuickFileNameFilter" - isPointer: true - read: "selectedNameFilter" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "fileName" - type: "QString" - read: "fileName" - write: "setFileName" - notify: "selectedFileChanged" - index: 4 - isFinal: true - } - Property { - name: "currentFolderName" - type: "QString" - read: "currentFolderName" - notify: "selectedFileChanged" - index: 5 - isReadonly: true - isFinal: true - } - Signal { - name: "currentFolderChanged" - Parameter { name: "folderUrl"; type: "QUrl" } - } - Signal { - name: "selectedFileChanged" - Parameter { name: "selectedFileUrl"; type: "QUrl" } - } - Signal { name: "nameFiltersChanged" } - Signal { - name: "fileSelected" - Parameter { name: "fileUrl"; type: "QUrl" } - } - Signal { - name: "filterSelected" - Parameter { name: "filter"; type: "QString" } - } - Method { - name: "selectNameFilter" - Parameter { name: "filter"; type: "QString" } - } - } - Component { - file: "private/qquickfiledialogimpl_p.h" - name: "QQuickFileDialogImplAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "buttonBox" - type: "QQuickDialogButtonBox" - isPointer: true - read: "buttonBox" - write: "setButtonBox" - notify: "buttonBoxChanged" - index: 0 - isFinal: true - } - Property { - name: "nameFiltersComboBox" - type: "QQuickComboBox" - isPointer: true - read: "nameFiltersComboBox" - write: "setNameFiltersComboBox" - notify: "nameFiltersComboBoxChanged" - index: 1 - } - Property { - name: "fileDialogListView" - type: "QQuickListView" - isPointer: true - read: "fileDialogListView" - write: "setFileDialogListView" - notify: "fileDialogListViewChanged" - index: 2 - } - Property { - name: "breadcrumbBar" - type: "QQuickFolderBreadcrumbBar" - isPointer: true - read: "breadcrumbBar" - write: "setBreadcrumbBar" - notify: "breadcrumbBarChanged" - index: 3 - } - Property { - name: "fileNameLabel" - type: "QQuickLabel" - isPointer: true - read: "fileNameLabel" - write: "setFileNameLabel" - notify: "fileNameLabelChanged" - index: 4 - isFinal: true - } - Property { - name: "fileNameTextField" - type: "QQuickTextField" - isPointer: true - read: "fileNameTextField" - write: "setFileNameTextField" - notify: "fileNameTextFieldChanged" - index: 5 - isFinal: true - } - Property { - name: "overwriteConfirmationDialog" - type: "QQuickDialog" - isPointer: true - read: "overwriteConfirmationDialog" - write: "setOverwriteConfirmationDialog" - notify: "overwriteConfirmationDialogChanged" - index: 6 - isFinal: true - } - Signal { name: "buttonBoxChanged" } - Signal { name: "nameFiltersComboBoxChanged" } - Signal { name: "fileDialogListViewChanged" } - Signal { name: "breadcrumbBarChanged" } - Signal { name: "fileNameLabelChanged" } - Signal { name: "fileNameTextFieldChanged" } - Signal { name: "overwriteConfirmationDialogChanged" } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickFileNameFilter" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - write: "setIndex" - notify: "indexChanged" - index: 0 - isFinal: true - } - Property { - name: "name" - type: "QString" - read: "name" - notify: "nameChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "extensions" - type: "QStringList" - read: "extensions" - notify: "extensionsChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "globs" - type: "QStringList" - read: "globs" - notify: "globsChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { - name: "indexChanged" - Parameter { name: "index"; type: "int" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "QString" } - } - Signal { - name: "extensionsChanged" - Parameter { name: "extensions"; type: "QStringList" } - } - Signal { - name: "globsChanged" - Parameter { name: "globs"; type: "QStringList" } - } - } - Component { - file: "private/qquickfolderbreadcrumbbar_p.h" - name: "QQuickFolderBreadcrumbBar" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - exports: [ - "QtQuick.Dialogs.quickimpl/FolderBreadcrumbBar 6.2", - "QtQuick.Dialogs.quickimpl/FolderBreadcrumbBar 6.3", - "QtQuick.Dialogs.quickimpl/FolderBreadcrumbBar 6.7" - ] - exportMetaObjectRevisions: [1538, 1539, 1543] - Property { - name: "dialog" - type: "QQuickDialog" - isPointer: true - read: "dialog" - write: "setDialog" - notify: "dialogChanged" - index: 0 - } - Property { - name: "buttonDelegate" - type: "QQmlComponent" - isPointer: true - read: "buttonDelegate" - write: "setButtonDelegate" - notify: "buttonDelegateChanged" - index: 1 - } - Property { - name: "separatorDelegate" - type: "QQmlComponent" - isPointer: true - read: "separatorDelegate" - write: "setSeparatorDelegate" - notify: "separatorDelegateChanged" - index: 2 - } - Property { - name: "upButton" - type: "QQuickAbstractButton" - isPointer: true - read: "upButton" - write: "setUpButton" - notify: "upButtonChanged" - index: 3 - } - Property { - name: "textField" - type: "QQuickTextField" - isPointer: true - read: "textField" - write: "setTextField" - notify: "textFieldChanged" - index: 4 - } - Property { - name: "upButtonSpacing" - type: "int" - read: "upButtonSpacing" - write: "setUpButtonSpacing" - notify: "upButtonSpacingChanged" - index: 5 - } - Signal { name: "dialogChanged" } - Signal { name: "buttonDelegateChanged" } - Signal { name: "separatorDelegateChanged" } - Signal { name: "upButtonChanged" } - Signal { name: "upButtonSpacingChanged" } - Signal { name: "textFieldChanged" } - } - Component { - file: "private/qquickfolderdialogimpl_p.h" - name: "QQuickFolderDialogImpl" - accessSemantics: "reference" - prototype: "QQuickDialog" - exports: ["QtQuick.Dialogs.quickimpl/FolderDialogImpl 6.3"] - exportMetaObjectRevisions: [1539] - attachedType: "QQuickFolderDialogImplAttached" - Property { - name: "currentFolder" - type: "QUrl" - read: "currentFolder" - write: "setCurrentFolder" - notify: "currentFolderChanged" - index: 0 - isFinal: true - } - Property { - name: "selectedFolder" - type: "QUrl" - read: "selectedFolder" - write: "setSelectedFolder" - notify: "selectedFolderChanged" - index: 1 - isFinal: true - } - Signal { - name: "currentFolderChanged" - Parameter { name: "folderUrl"; type: "QUrl" } - } - Signal { - name: "selectedFolderChanged" - Parameter { name: "folderUrl"; type: "QUrl" } - } - Signal { name: "nameFiltersChanged" } - } - Component { - file: "private/qquickfolderdialogimpl_p.h" - name: "QQuickFolderDialogImplAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "folderDialogListView" - type: "QQuickListView" - isPointer: true - read: "folderDialogListView" - write: "setFolderDialogListView" - notify: "folderDialogListViewChanged" - index: 0 - } - Property { - name: "breadcrumbBar" - type: "QQuickFolderBreadcrumbBar" - isPointer: true - read: "breadcrumbBar" - write: "setBreadcrumbBar" - notify: "breadcrumbBarChanged" - index: 1 - } - Signal { name: "folderDialogListViewChanged" } - Signal { name: "breadcrumbBarChanged" } - } - Component { - file: "private/qquickfontdialogimpl_p.h" - name: "QQuickFontDialogImpl" - accessSemantics: "reference" - prototype: "QQuickDialog" - exports: ["QtQuick.Dialogs.quickimpl/FontDialogImpl 6.2"] - exportMetaObjectRevisions: [1538] - attachedType: "QQuickFontDialogImplAttached" - Property { - name: "currentFont" - type: "QFont" - read: "currentFont" - write: "setCurrentFont" - notify: "currentFontChanged" - index: 0 - isFinal: true - } - Signal { name: "optionsChanged" } - Signal { - name: "currentFontChanged" - Parameter { name: "font"; type: "QFont" } - } - } - Component { - file: "private/qquickfontdialogimpl_p.h" - name: "QQuickFontDialogImplAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "familyListView" - type: "QQuickListView" - isPointer: true - read: "familyListView" - write: "setFamilyListView" - notify: "familyListViewChanged" - index: 0 - } - Property { - name: "styleListView" - type: "QQuickListView" - isPointer: true - read: "styleListView" - write: "setStyleListView" - notify: "styleListViewChanged" - index: 1 - } - Property { - name: "sizeListView" - type: "QQuickListView" - isPointer: true - read: "sizeListView" - write: "setSizeListView" - notify: "sizeListViewChanged" - index: 2 - } - Property { - name: "sampleEdit" - type: "QQuickTextEdit" - isPointer: true - read: "sampleEdit" - write: "setSampleEdit" - notify: "sampleEditChanged" - index: 3 - } - Property { - name: "buttonBox" - type: "QQuickDialogButtonBox" - isPointer: true - read: "buttonBox" - write: "setButtonBox" - notify: "buttonBoxChanged" - index: 4 - } - Property { - name: "writingSystemComboBox" - type: "QQuickComboBox" - isPointer: true - read: "writingSystemComboBox" - write: "setWritingSystemComboBox" - notify: "writingSystemComboBoxChanged" - index: 5 - } - Property { - name: "underlineCheckBox" - type: "QQuickCheckBox" - isPointer: true - read: "underlineCheckBox" - write: "setUnderlineCheckBox" - notify: "underlineCheckBoxChanged" - index: 6 - } - Property { - name: "strikeoutCheckBox" - type: "QQuickCheckBox" - isPointer: true - read: "strikeoutCheckBox" - write: "setStrikeoutCheckBox" - notify: "strikeoutCheckBoxChanged" - index: 7 - } - Property { - name: "familyEdit" - type: "QQuickTextField" - isPointer: true - read: "familyEdit" - write: "setFamilyEdit" - notify: "familyEditChanged" - index: 8 - } - Property { - name: "styleEdit" - type: "QQuickTextField" - isPointer: true - read: "styleEdit" - write: "setStyleEdit" - notify: "styleEditChanged" - index: 9 - } - Property { - name: "sizeEdit" - type: "QQuickTextField" - isPointer: true - read: "sizeEdit" - write: "setSizeEdit" - notify: "sizeEditChanged" - index: 10 - } - Signal { name: "buttonBoxChanged" } - Signal { name: "familyListViewChanged" } - Signal { name: "styleListViewChanged" } - Signal { name: "sizeListViewChanged" } - Signal { name: "sampleEditChanged" } - Signal { name: "writingSystemComboBoxChanged" } - Signal { name: "underlineCheckBoxChanged" } - Signal { name: "strikeoutCheckBoxChanged" } - Signal { name: "familyEditChanged" } - Signal { name: "styleEditChanged" } - Signal { name: "sizeEditChanged" } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickIcon" - accessSemantics: "value" - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - reset: "resetName" - index: 0 - isFinal: true - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - reset: "resetSource" - index: 1 - isFinal: true - } - Property { - name: "width" - type: "int" - read: "width" - write: "setWidth" - reset: "resetWidth" - index: 2 - isFinal: true - } - Property { - name: "height" - type: "int" - read: "height" - write: "setHeight" - reset: "resetHeight" - index: 3 - isFinal: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - reset: "resetColor" - index: 4 - isFinal: true - } - Property { - name: "cache" - type: "bool" - read: "cache" - write: "setCache" - reset: "resetCache" - index: 5 - isFinal: true - } - } - Component { - file: "private/qquickmessagedialogimpl_p.h" - name: "QQuickMessageDialogImpl" - accessSemantics: "reference" - prototype: "QQuickDialog" - exports: ["QtQuick.Dialogs.quickimpl/MessageDialogImpl 6.3"] - exportMetaObjectRevisions: [1539] - attachedType: "QQuickMessageDialogImplAttached" - Property { - name: "text" - type: "QString" - read: "text" - notify: "optionsChanged" - index: 0 - isReadonly: true - } - Property { - name: "informativeText" - type: "QString" - read: "informativeText" - notify: "optionsChanged" - index: 1 - isReadonly: true - } - Property { - name: "detailedText" - type: "QString" - read: "detailedText" - notify: "optionsChanged" - index: 2 - isReadonly: true - } - Property { - name: "showDetailedText" - type: "bool" - read: "showDetailedText" - notify: "showDetailedTextChanged" - index: 3 - isReadonly: true - } - Signal { - name: "buttonClicked" - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - Parameter { name: "role"; type: "QPlatformDialogHelper::ButtonRole" } - } - Signal { name: "showDetailedTextChanged" } - Signal { name: "optionsChanged" } - Method { name: "toggleShowDetailedText" } - } - Component { - file: "private/qquickmessagedialogimpl_p.h" - name: "QQuickMessageDialogImplAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "buttonBox" - type: "QQuickDialogButtonBox" - isPointer: true - read: "buttonBox" - write: "setButtonBox" - notify: "buttonBoxChanged" - index: 0 - } - Property { - name: "detailedTextButton" - type: "QQuickButton" - isPointer: true - read: "detailedTextButton" - write: "setDetailedTextButton" - notify: "detailedTextButtonChanged" - index: 1 - } - Signal { name: "buttonBoxChanged" } - Signal { name: "detailedTextButtonChanged" } - } - Component { - file: "private/qtquickdialogs2quickimplforeign_p.h" - name: "QQuickPopup" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - Enum { - name: "ClosePolicy" - alias: "ClosePolicyFlag" - isFlag: true - values: [ - "NoAutoClose", - "CloseOnPressOutside", - "CloseOnPressOutsideParent", - "CloseOnReleaseOutside", - "CloseOnReleaseOutsideParent", - "CloseOnEscape" - ] - } - Enum { - name: "TransformOrigin" - values: [ - "TopLeft", - "Top", - "TopRight", - "Left", - "Center", - "Right", - "BottomLeft", - "Bottom", - "BottomRight" - ] - } - Property { - name: "x" - type: "double" - read: "x" - write: "setX" - notify: "xChanged" - index: 0 - isFinal: true - } - Property { - name: "y" - type: "double" - read: "y" - write: "setY" - notify: "yChanged" - index: 1 - isFinal: true - } - Property { - name: "z" - type: "double" - read: "z" - write: "setZ" - reset: "resetZ" - notify: "zChanged" - index: 2 - isFinal: true - } - Property { - name: "width" - type: "double" - read: "width" - write: "setWidth" - reset: "resetWidth" - notify: "widthChanged" - index: 3 - isFinal: true - } - Property { - name: "height" - type: "double" - read: "height" - write: "setHeight" - reset: "resetHeight" - notify: "heightChanged" - index: 4 - isFinal: true - } - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - write: "setImplicitWidth" - notify: "implicitWidthChanged" - index: 5 - isFinal: true - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - write: "setImplicitHeight" - notify: "implicitHeightChanged" - index: 6 - isFinal: true - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - notify: "contentWidthChanged" - index: 7 - isFinal: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - notify: "contentHeightChanged" - index: 8 - isFinal: true - } - Property { - name: "availableWidth" - type: "double" - read: "availableWidth" - notify: "availableWidthChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "availableHeight" - type: "double" - read: "availableHeight" - notify: "availableHeightChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "margins" - type: "double" - read: "margins" - write: "setMargins" - reset: "resetMargins" - notify: "marginsChanged" - index: 11 - isFinal: true - } - Property { - name: "topMargin" - type: "double" - read: "topMargin" - write: "setTopMargin" - reset: "resetTopMargin" - notify: "topMarginChanged" - index: 12 - isFinal: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - reset: "resetLeftMargin" - notify: "leftMarginChanged" - index: 13 - isFinal: true - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - reset: "resetRightMargin" - notify: "rightMarginChanged" - index: 14 - isFinal: true - } - Property { - name: "bottomMargin" - type: "double" - read: "bottomMargin" - write: "setBottomMargin" - reset: "resetBottomMargin" - notify: "bottomMarginChanged" - index: 15 - isFinal: true - } - Property { - name: "padding" - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 16 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 17 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 18 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 19 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 20 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - reset: "resetLocale" - notify: "localeChanged" - index: 21 - isFinal: true - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - reset: "resetFont" - notify: "fontChanged" - index: 22 - isFinal: true - } - Property { - name: "parent" - type: "QQuickItem" - isPointer: true - read: "parentItem" - write: "setParentItem" - reset: "resetParentItem" - notify: "parentChanged" - index: 23 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 24 - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - write: "setContentItem" - notify: "contentItemChanged" - index: 25 - isFinal: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 26 - privateClass: "QQuickPopupPrivate" - isReadonly: true - } - Property { - name: "contentChildren" - type: "QQuickItem" - isList: true - read: "contentChildren" - notify: "contentChildrenChanged" - index: 27 - privateClass: "QQuickPopupPrivate" - isReadonly: true - isFinal: true - } - Property { - name: "clip" - type: "bool" - read: "clip" - write: "setClip" - notify: "clipChanged" - index: 28 - isFinal: true - } - Property { - name: "focus" - type: "bool" - read: "hasFocus" - write: "setFocus" - notify: "focusChanged" - index: 29 - isFinal: true - } - Property { - name: "activeFocus" - type: "bool" - read: "hasActiveFocus" - notify: "activeFocusChanged" - index: 30 - isReadonly: true - isFinal: true - } - Property { - name: "modal" - type: "bool" - read: "isModal" - write: "setModal" - notify: "modalChanged" - index: 31 - isFinal: true - } - Property { - name: "dim" - type: "bool" - read: "dim" - write: "setDim" - reset: "resetDim" - notify: "dimChanged" - index: 32 - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 33 - isFinal: true - } - Property { - name: "opacity" - type: "double" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 34 - isFinal: true - } - Property { - name: "scale" - type: "double" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 35 - isFinal: true - } - Property { - name: "closePolicy" - type: "ClosePolicy" - read: "closePolicy" - write: "setClosePolicy" - reset: "resetClosePolicy" - notify: "closePolicyChanged" - index: 36 - isFinal: true - } - Property { - name: "transformOrigin" - type: "TransformOrigin" - read: "transformOrigin" - write: "setTransformOrigin" - index: 37 - isFinal: true - } - Property { - name: "enter" - type: "QQuickTransition" - isPointer: true - read: "enter" - write: "setEnter" - notify: "enterChanged" - index: 38 - isFinal: true - } - Property { - name: "exit" - type: "QQuickTransition" - isPointer: true - read: "exit" - write: "setExit" - notify: "exitChanged" - index: 39 - isFinal: true - } - Property { - name: "spacing" - revision: 513 - type: "double" - read: "spacing" - write: "setSpacing" - reset: "resetSpacing" - notify: "spacingChanged" - index: 40 - isFinal: true - } - Property { - name: "opened" - revision: 515 - type: "bool" - read: "isOpened" - notify: "openedChanged" - index: 41 - isReadonly: true - isFinal: true - } - Property { - name: "mirrored" - revision: 515 - type: "bool" - read: "isMirrored" - notify: "mirroredChanged" - index: 42 - isReadonly: true - isFinal: true - } - Property { - name: "enabled" - revision: 515 - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 43 - isFinal: true - } - Property { - name: "palette" - revision: 515 - type: "QQuickPalette" - isPointer: true - read: "palette" - write: "setPalette" - reset: "resetPalette" - notify: "paletteChanged" - index: 44 - privateClass: "QQuickPopupPrivate" - } - Property { - name: "horizontalPadding" - type: "double" - read: "horizontalPadding" - write: "setHorizontalPadding" - reset: "resetHorizontalPadding" - notify: "horizontalPaddingChanged" - index: 45 - isFinal: true - } - Property { - name: "verticalPadding" - type: "double" - read: "verticalPadding" - write: "setVerticalPadding" - reset: "resetVerticalPadding" - notify: "verticalPaddingChanged" - index: 46 - isFinal: true - } - Property { - name: "anchors" - revision: 517 - type: "QQuickPopupAnchors" - isPointer: true - read: "getAnchors" - index: 47 - privateClass: "QQuickPopupPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "implicitContentWidth" - revision: 517 - type: "double" - read: "implicitContentWidth" - notify: "implicitContentWidthChanged" - index: 48 - isReadonly: true - isFinal: true - } - Property { - name: "implicitContentHeight" - revision: 517 - type: "double" - read: "implicitContentHeight" - notify: "implicitContentHeightChanged" - index: 49 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 50 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 51 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 52 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 53 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 54 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 55 - isFinal: true - } - Signal { name: "opened" } - Signal { name: "closed" } - Signal { name: "aboutToShow" } - Signal { name: "aboutToHide" } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - Signal { name: "implicitWidthChanged" } - Signal { name: "implicitHeightChanged" } - Signal { name: "contentWidthChanged" } - Signal { name: "contentHeightChanged" } - Signal { name: "availableWidthChanged" } - Signal { name: "availableHeightChanged" } - Signal { name: "marginsChanged" } - Signal { name: "topMarginChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "bottomMarginChanged" } - Signal { name: "paddingChanged" } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - Signal { name: "fontChanged" } - Signal { name: "localeChanged" } - Signal { name: "parentChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "contentChildrenChanged" } - Signal { name: "clipChanged" } - Signal { name: "focusChanged" } - Signal { name: "activeFocusChanged" } - Signal { name: "modalChanged" } - Signal { name: "dimChanged" } - Signal { name: "visibleChanged" } - Signal { name: "opacityChanged" } - Signal { name: "scaleChanged" } - Signal { name: "closePolicyChanged" } - Signal { name: "enterChanged" } - Signal { name: "exitChanged" } - Signal { - name: "windowChanged" - Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } - } - Signal { name: "spacingChanged"; revision: 513 } - Signal { name: "openedChanged"; revision: 515 } - Signal { name: "mirroredChanged"; revision: 515 } - Signal { name: "enabledChanged"; revision: 515 } - Signal { name: "paletteChanged"; revision: 515 } - Signal { name: "paletteCreated"; revision: 515 } - Signal { name: "horizontalPaddingChanged"; revision: 517 } - Signal { name: "verticalPaddingChanged"; revision: 517 } - Signal { name: "implicitContentWidthChanged"; revision: 517 } - Signal { name: "implicitContentHeightChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - Method { name: "open" } - Method { name: "close" } - Method { - name: "forceActiveFocus" - Parameter { name: "reason"; type: "Qt::FocusReason" } - } - Method { name: "forceActiveFocus"; isCloned: true } - } - Component { - file: "private/qquicksaturationlightnesspicker_p.h" - name: "QQuickSaturationLightnessPicker" - accessSemantics: "reference" - prototype: "QQuickAbstractColorPicker" - exports: [ - "QtQuick.Dialogs.quickimpl/SaturationLightnessPickerImpl 6.0", - "QtQuick.Dialogs.quickimpl/SaturationLightnessPickerImpl 6.3", - "QtQuick.Dialogs.quickimpl/SaturationLightnessPickerImpl 6.4", - "QtQuick.Dialogs.quickimpl/SaturationLightnessPickerImpl 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1540, 1543] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/ColorDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/ColorDialog.qml deleted file mode 100644 index 142fecb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/ColorDialog.qml +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -ColorDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 6 - horizontalPadding: 12 - - isHsl: true - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - ColorDialogImpl.eyeDropperButton: eyeDropperButton - ColorDialogImpl.buttonBox: buttonBox - ColorDialogImpl.colorPicker: colorPicker - ColorDialogImpl.colorInputs: inputs - ColorDialogImpl.alphaSlider: alphaSlider - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1 - y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: RowLayout { - Label { - objectName: "titleLabel" - text: control.title - elide: Label.ElideRight - font.bold: true - padding: 6 - - Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15 - Layout.leftMargin: 12 - Layout.alignment: Qt.AlignLeft - } - Button { - id: eyeDropperButton - objectName: "eyeDropperButton" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png" - flat: true - visible: false - - Layout.preferredWidth: implicitHeight - Layout.alignment: Qt.AlignRight - Layout.rightMargin: 6 - } - } - - contentItem: ColumnLayout { - spacing: 12 - SaturationLightnessPicker { - id: colorPicker - objectName: "colorPicker" - color: control.color - - Layout.fillWidth: true - Layout.fillHeight: true - } - - Slider { - id: hueSlider - objectName: "hueSlider" - orientation: Qt.Horizontal - value: control.hue - implicitHeight: 20 - onMoved: function() { control.hue = value; } - handle: PickerHandle { - x: hueSlider.leftPadding + (hueSlider.horizontal - ? hueSlider.visualPosition * (hueSlider.availableWidth - width) - : (hueSlider.availableWidth - width) / 2) - y: hueSlider.topPadding + (hueSlider.horizontal - ? (hueSlider.availableHeight - height) / 2 - : hueSlider.visualPosition * (hueSlider.availableHeight - height)) - picker: hueSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: hueSlider.handle.width / 2 - anchors.rightMargin: hueSlider.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - Rectangle { - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: HueGradient { - orientation: Gradient.Horizontal - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - Slider { - id: alphaSlider - objectName: "alphaSlider" - orientation: Qt.Horizontal - value: control.alpha - implicitHeight: 20 - handle: PickerHandle { - x: alphaSlider.leftPadding + (alphaSlider.horizontal - ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width) - : (alphaSlider.availableWidth - width) / 2) - y: alphaSlider.topPadding + (alphaSlider.horizontal - ? (alphaSlider.availableHeight - height) / 2 - : alphaSlider.visualPosition * (alphaSlider.availableHeight - height)) - picker: alphaSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: parent.handle.width / 2 - anchors.rightMargin: parent.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - - Image { - anchors.fill: alphaSliderGradient - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - id: alphaSliderGradient - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: Gradient { - orientation: Gradient.Horizontal - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: Qt.rgba(control.color.r, control.color.g, control.color.b, 1) - } - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - ColorInputs { - id: inputs - - color: control.color - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - } - } - - footer: RowLayout { - spacing: 12 - - Label { - text: qsTr("Color") - - Layout.leftMargin: 12 - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - - Rectangle { - implicitWidth: (parent.height - 24) * 2 - implicitHeight: implicitWidth / 2 - color: "transparent" - - Image { - anchors.fill: parent - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - anchors.fill: parent - color: control.color - } - - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - - Item { - Layout.fillWidth: true - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 6 - horizontalPadding: 0 - verticalPadding: 0 - - Layout.rightMargin: 12 - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialog.qml deleted file mode 100644 index 3b71a41..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialog.qml +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FileDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 6 - horizontalPadding: 12 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Dialog { - id: overwriteConfirmationDialog - objectName: "confirmationDialog" - anchors.centerIn: parent - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - dim: true - modal: true - title: qsTr("Overwrite file?") - width: control.width - control.leftPadding - control.rightPadding - - contentItem: Label { - text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) - wrapMode: Text.WordWrap - } - - footer: DialogButtonBox { - alignment: Qt.AlignHCenter - standardButtons: DialogButtonBox.Yes | DialogButtonBox.No - } - - Overlay.modal: Rectangle { - color: Fusion.darkShade - } - } - - /* - We use attached properties because we want to handle logic in C++, and: - - We can't assume the footer only contains a DialogButtonBox (which would allow us - to connect up to it in QQuickFileDialogImpl); it also needs to hold a ComboBox - and therefore the root footer item will be e.g. a layout item instead. - - We don't want to create our own "FileDialogButtonBox" (in order to be able to handle the logic - in C++) because we'd need to copy (and hence duplicate code in) DialogButtonBox.qml. - */ - FileDialogImpl.buttonBox: buttonBox - FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox - FileDialogImpl.fileDialogListView: fileDialogListView - FileDialogImpl.breadcrumbBar: breadcrumbBar - FileDialogImpl.fileNameLabel: fileNameLabel - FileDialogImpl.fileNameTextField: fileNameTextField - FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1 - y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: ColumnLayout { - spacing: 0 - - Label { - objectName: "dialogTitleBarLabel" - text: control.title - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - padding: 6 - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.topMargin: control.title.length > 0 ? 0 : 12 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - - KeyNavigation.tab: fileDialogListView - } - } - - contentItem: Frame { - padding: 0 - verticalPadding: 1 - - ListView { - id: fileDialogListView - objectName: "fileDialogListView" - anchors.fill: parent - clip: true - focus: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - nameFilters: control.selectedNameFilter.globs - showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst) - sortCaseSensitive: false - } - delegate: DialogsImpl.FileDialogDelegate { - objectName: "fileDialogDelegate" + index - x: 1 - width: ListView.view.width - 2 - highlighted: ListView.isCurrentItem - dialog: control - fileDetailRowWidth: nameFiltersComboBox.width - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox - } - } - } - - footer: GridLayout { - columnSpacing: 12 - columns: 3 - - Label { - id: fileNameLabel - text: qsTr("File name") - Layout.leftMargin: 12 - visible: false - } - - TextField { - id: fileNameTextField - objectName: "fileNameTextField" - visible: false - - Layout.fillWidth: true - } - - Label { - text: qsTr("Filter") - Layout.column: 0 - Layout.row: 1 - Layout.leftMargin: 12 - Layout.bottomMargin: 12 - } - - - ComboBox { - // OK to use IDs here, since users shouldn't be overriding this stuff. - id: nameFiltersComboBox - model: control.nameFilters - - Layout.fillWidth: true - Layout.bottomMargin: 12 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 6 - horizontalPadding: 0 - verticalPadding: 0 - background: null - - // TODO: make the orientation vertical - Layout.row: 1 - Layout.column: 2 - Layout.columnSpan: 1 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialogDelegate.qml deleted file mode 100644 index 20e8421..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialogDelegate.qml +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl as ControlsImpl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/" - + (fileIsDir ? "folder" : "file") + "-icon-round.png" - - // We don't use index here, but in C++. Since we're using required - // properties, the index context property will not be injected, so we can't - // use its QQmlContext to access it. - required property int index - required property string fileName - required property url fileUrl - required property double fileSize - required property date fileModified - required property bool fileIsDir - - required property int fileDetailRowWidth - - contentItem: FileDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - fileDetailRowWidth: control.fileDetailRowWidth - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderBreadcrumbBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderBreadcrumbBar.qml deleted file mode 100644 index 75f1963..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderBreadcrumbBar.qml +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FolderBreadcrumbBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0) - + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - upButtonSpacing: 6 - - contentItem: ListView { - currentIndex: control.currentIndex - model: control.contentModel - orientation: ListView.Horizontal - snapMode: ListView.SnapToItem - highlightMoveDuration: 0 - interactive: false - clip: true - - Rectangle { - anchors.fill: parent - color: control.palette.light - border.color: control.palette.mid - radius: 2 - z: -1 - } - } - buttonDelegate: Button { - id: buttonDelegateRoot - text: folderName - flat: true - - // The default of 100 is a bit too wide for short directory names. - Binding { - target: buttonDelegateRoot.background - property: "implicitWidth" - value: 24 - } - - required property int index - required property string folderName - } - separatorDelegate: IconImage { - id: iconImage - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-round.png" - sourceSize: Qt.size(8, 8) - width: 8 + 6 - height: control.contentItem.height - color: control.palette.dark - y: (control.height - height) / 2 - } - upButton: Button { - x: control.leftPadding - y: control.topPadding - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-round.png" - icon.width: 16 - icon.height: 16 - width: height - height: Math.max(implicitHeight, control.contentItem.height) - focusPolicy: Qt.TabFocus - } - textField: TextField { - text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile - ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialog.qml deleted file mode 100644 index fbe0fa9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialog.qml +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FolderDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 6 - horizontalPadding: 12 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - FolderDialogImpl.folderDialogListView: folderDialogListView - FolderDialogImpl.breadcrumbBar: breadcrumbBar - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1 - y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: ColumnLayout { - spacing: 0 - - Label { - objectName: "dialogTitleBarLabel" - text: control.title - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - padding: 6 - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.topMargin: control.title.length > 0 ? 0 : 12 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - - KeyNavigation.tab: folderDialogListView - } - } - - contentItem: Frame { - padding: 0 - verticalPadding: 1 - - ListView { - id: folderDialogListView - objectName: "fileDialogListView" - anchors.fill: parent - clip: true - focus: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - showFiles: false - sortCaseSensitive: false - } - delegate: DialogsImpl.FolderDialogDelegate { - objectName: "folderDialogDelegate" + index - x: 1 - width: ListView.view.width - 2 - highlighted: ListView.isCurrentItem - dialog: control - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: control.footer - } - } - } - - footer: DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 6 - leftPadding: 0 - rightPadding: 12 - topPadding: 0 - bottomPadding: 12 - background: null - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialogDelegate.qml deleted file mode 100644 index e18f0de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialogDelegate.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl as ControlsImpl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-round.png" - - // We don't use index here, but in C++. Since we're using required - // properties, the index context property will not be injected, so we can't - // use its QQmlContext to access it. - required property int index - required property string fileName - required property url fileUrl - required property date fileModified - - contentItem: FolderDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.placeholderText - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FontDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FontDialog.qml deleted file mode 100644 index cca4e96..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FontDialog.qml +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -FontDialogImpl { - id: control - - implicitWidth: Math.max(control.implicitBackgroundWidth + control.leftInset + control.rightInset, - control.contentWidth + control.leftPadding + control.rightPadding, - control.implicitHeaderWidth, - control.implicitFooterWidth) - implicitHeight: Math.max(control.implicitBackgroundHeight + control.topInset + control.bottomInset, - control.contentHeight + control.topPadding + control.bottomPadding - + (control.implicitHeaderHeight > 0 ? control.implicitHeaderHeight + control.spacing : 0) - + (control.implicitFooterHeight > 0 ? control.implicitFooterHeight + control.spacing : 0)) - - leftPadding: 20 - rightPadding: 20 - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - FontDialogImpl.buttonBox: buttonBox - FontDialogImpl.familyListView: content.familyListView - FontDialogImpl.styleListView: content.styleListView - FontDialogImpl.sizeListView: content.sizeListView - FontDialogImpl.sampleEdit: content.sampleEdit - FontDialogImpl.writingSystemComboBox: writingSystemComboBox - FontDialogImpl.underlineCheckBox: content.underline - FontDialogImpl.strikeoutCheckBox: content.strikeout - FontDialogImpl.familyEdit: content.familyEdit - FontDialogImpl.styleEdit: content.styleEdit - FontDialogImpl.sizeEdit: content.sizeEdit - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1 - y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - Overlay.modeless: Rectangle { - color: Fusion.topShadow - } - - header: Label { - text: control.title - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - padding: 6 - } - - contentItem: FontDialogContent { - id: content - } - - footer: RowLayout { - id: rowLayout - spacing: 12 - - Label { - text: qsTr("Writing System") - - Layout.leftMargin: 12 - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - ComboBox{ - id: writingSystemComboBox - - Layout.fillWidth: true - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 6 - horizontalPadding: 0 - verticalPadding: 0 - background: null - - Layout.rightMargin: 12 - Layout.topMargin: 6 - Layout.bottomMargin: 6 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/MessageDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/MessageDialog.qml deleted file mode 100644 index cb3eb1c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/MessageDialog.qml +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Fusion -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -MessageDialogImpl { - id: control - - implicitWidth: Math.max(control.implicitBackgroundWidth + control.leftInset + control.rightInset, - control.implicitHeaderWidth, - rowLayout.implicitWidth) - implicitHeight: Math.max(control.implicitBackgroundHeight + control.topInset + control.bottomInset, - control.contentHeight + control.topPadding + control.bottomPadding - + (control.implicitHeaderHeight > 0 ? control.implicitHeaderHeight + control.spacing : 0) - + (control.implicitFooterHeight > 0 ? control.implicitFooterHeight + control.spacing : 0)) - - padding: 6 - horizontalPadding: 12 - - MessageDialogImpl.buttonBox: buttonBox - MessageDialogImpl.detailedTextButton: detailedTextButton - - background: Rectangle { - implicitWidth: 320 - implicitHeight: 120 - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1 - y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: Label { - text: control.title - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - padding: 6 - } - - contentItem: Column { - padding: 6 - spacing: 24 - - Label { - id: textLabel - objectName: "textLabel" - text: control.text - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - - Label { - id: informativeTextLabel - objectName: "informativeTextLabel" - text: control.informativeText - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - } - - footer: ColumnLayout { - id: columnLayout - - RowLayout { - id: rowLayout - - Button { - id: detailedTextButton - objectName: "detailedTextButton" - text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...") - - Layout.leftMargin: 12 - } - - DialogButtonBox { - id: buttonBox - objectName: "buttonBox" - spacing: 6 - horizontalPadding: 0 - verticalPadding: 12 - - Layout.fillWidth: true - Layout.leftMargin: detailedTextButton.visible ? 6 : 12 - Layout.rightMargin: 12 - } - } - - TextArea { - id: detailedTextArea - objectName: "detailedText" - text: control.detailedText - visible: control.showDetailedText - wrapMode: TextEdit.WordWrap - readOnly: true - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - - background: Rectangle { - color: Qt.rgba(1,1,1,1) - radius: 3 - border.color: Qt.darker(control.palette.light) - border.width: 1 - } - } - } - - Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/ColorDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/ColorDialog.qml deleted file mode 100644 index 655b55c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/ColorDialog.qml +++ /dev/null @@ -1,276 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -ColorDialogImpl { - id: control - - // Can't set implicitWidth of the NinePatchImage background, so we do it here. - implicitWidth: Math.max(200, - implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(600, - implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - isHsl: true - - ColorDialogImpl.eyeDropperButton: eyeDropperButton - ColorDialogImpl.buttonBox: buttonBox - ColorDialogImpl.colorPicker: colorPicker - ColorDialogImpl.alphaSlider: alphaSlider - ColorDialogImpl.colorInputs: inputs - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: RowLayout { - Label { - objectName: "titleLabel" - text: control.title - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - leftPadding: 16 - rightPadding: 16 - topPadding: 16 - bottomPadding: 16 - - Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15 - } - - Button { - id: eyeDropperButton - objectName: "eyeDropperButton" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png" - flat: true - topPadding: 16 - bottomPadding: 16 - visible: false - - Layout.alignment: Qt.AlignRight - Layout.rightMargin: 16 - } - } - - contentItem: ColumnLayout { - SaturationLightnessPicker { - id: colorPicker - objectName: "colorPicker" - color: control.color - - Layout.fillWidth: true - Layout.fillHeight: true - } - - Slider { - id: hueSlider - objectName: "hueSlider" - orientation: Qt.Horizontal - value: control.hue - onMoved: function() { control.hue = value; } - - Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 - - handle: PickerHandle { - x: hueSlider.leftPadding + (hueSlider.horizontal - ? hueSlider.visualPosition * (hueSlider.availableWidth - width) - : (hueSlider.availableWidth - width) / 2) - y: hueSlider.topPadding + (hueSlider.horizontal - ? (hueSlider.availableHeight - height) / 2 - : hueSlider.visualPosition * (hueSlider.availableHeight - height)) - picker: hueSlider - } - - implicitHeight: 20 - - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: hueSlider.handle.width / 2 - anchors.rightMargin: hueSlider.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - Rectangle { - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: HueGradient { - orientation: Gradient.Horizontal - } - } - } - } - - Slider { - id: alphaSlider - objectName: "alphaSlider" - orientation: Qt.Horizontal - value: control.alpha - implicitHeight: 20 - handle: PickerHandle { - x: alphaSlider.leftPadding + (alphaSlider.horizontal - ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width) - : (alphaSlider.availableWidth - width) / 2) - y: alphaSlider.topPadding + (alphaSlider.horizontal - ? (alphaSlider.availableHeight - height) / 2 - : alphaSlider.visualPosition * (alphaSlider.availableHeight - height)) - picker: alphaSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: parent.handle.width / 2 - anchors.rightMargin: parent.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - - Image { - anchors.fill: alphaSliderGradient - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - id: alphaSliderGradient - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: Gradient { - orientation: Gradient.Horizontal - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: Qt.rgba(control.color.r, - control.color.g, - control.color.b, - 1) - } - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 - } - - ColorInputs { - id: inputs - - color: control.color - - Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.bottomMargin: 16 - } - } - - footer: RowLayout { - spacing: 20 - - Label { - text: qsTr("Color") - - Layout.leftMargin: 16 - Layout.bottomMargin: 16 - } - - Rectangle { - implicitWidth: 32 - implicitHeight: 32 - border.width: 2 - border.color: control.palette.dark - color: "transparent" - - Image { - anchors.fill: parent - anchors.margins: 4 - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - anchors.fill: parent - anchors.margins: 4 - color: control.color - } - - Layout.bottomMargin: 16 - } - - Item { - // empty filler - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - - Layout.bottomMargin: 16 - Layout.rightMargin: 16 - Layout.alignment: Qt.AlignRight - } - } - - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialog.qml deleted file mode 100644 index 3da17f6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialog.qml +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -import "." as DialogsImpl - -FileDialogImpl { - id: control - - // Can't set implicitWidth of the NinePatchImage background, so we do it here. - implicitWidth: Math.max(600, - implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(400, - implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Dialog { - id: overwriteConfirmationDialog - objectName: "confirmationDialog" - anchors.centerIn: parent - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - dim: true - modal: true - spacing: 12 - title: qsTr("Overwrite file?") - width: control.width - control.leftPadding - control.rightPadding - - contentItem: Label { - text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) - wrapMode: Text.WordWrap - } - - footer: DialogButtonBox { - standardButtons: DialogButtonBox.Yes | DialogButtonBox.No - } - } - - FileDialogImpl.buttonBox: buttonBox - FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox - FileDialogImpl.fileDialogListView: fileDialogListView - FileDialogImpl.breadcrumbBar: breadcrumbBar - FileDialogImpl.fileNameLabel: fileNameLabel - FileDialogImpl.fileNameTextField: fileNameTextField - FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - elide: Label.ElideRight - font.bold: true - - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.topMargin: 12 - Layout.fillWidth: true - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.fillWidth: true - Layout.maximumWidth: parent.width - 28 - } - } - - contentItem: ListView { - id: fileDialogListView - objectName: "fileDialogListView" - clip: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - nameFilters: control.selectedNameFilter.globs - showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst) - sortCaseSensitive: false - } - delegate: DialogsImpl.FileDialogDelegate { - objectName: "fileDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - fileDetailRowWidth: nameFiltersComboBox.width - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox - } - } - - footer: GridLayout { - columnSpacing: 20 - columns: 3 - - Label { - id: fileNameLabel - text: qsTr("File name") - visible: false - - Layout.leftMargin: 16 - } - - TextField { - id: fileNameTextField - objectName: "fileNameTextField" - visible: false - - Layout.fillWidth: true - } - - Label { - text: qsTr("Filter") - - Layout.column: 0 - Layout.row: 1 - Layout.leftMargin: 16 - Layout.bottomMargin: 16 - } - - ComboBox { - id: nameFiltersComboBox - model: control.nameFilters - - Layout.fillWidth: true - Layout.bottomMargin: 16 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - - Layout.row: 1 - Layout.column: 2 - Layout.columnSpan: 1 - Layout.bottomMargin: 16 - Layout.rightMargin: 16 - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialogDelegate.qml deleted file mode 100644 index a4f627d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialogDelegate.qml +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick.Controls -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Controls.impl as ControlsImpl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/" - + (fileIsDir ? "folder" : "file") + "-icon-round.png" - - required property int index - required property string fileName - required property url fileUrl - required property double fileSize - required property date fileModified - required property bool fileIsDir - - required property int fileDetailRowWidth - - contentItem: FileDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.icon.color - fileDetailRowWidth: control.fileDetailRowWidth - } - - background: NinePatchImage { - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/imagine/filedialogdelegate-background" - NinePatchImageSelector on source { - states: [ - { "disabled": !control.enabled }, - { "pressed": control.down }, - { "focused": control.visualFocus }, - { "highlighted": control.highlighted }, - { "mirrored": control.mirrored }, - { "hovered": control.enabled && control.hovered } - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderBreadcrumbBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderBreadcrumbBar.qml deleted file mode 100644 index 8becba5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderBreadcrumbBar.qml +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FolderBreadcrumbBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0) - + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - upButtonSpacing: 20 - padding: 1 - - background: Rectangle {} - contentItem: ListView { - currentIndex: control.currentIndex - model: control.contentModel - orientation: ListView.Horizontal - snapMode: ListView.SnapToItem - highlightMoveDuration: 0 - interactive: false - clip: true - } - buttonDelegate: Button { - id: buttonDelegateRoot - text: folderName - flat: true - - required property int index - required property string folderName - } - separatorDelegate: IconImage { - id: iconImage - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-round.png" - sourceSize: Qt.size(8, 8) - width: 8 - height: control.contentItem.height - y: (control.height - height) / 2 - } - upButton: ToolButton { - x: control.leftPadding - y: control.topPadding - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-thick-square.png" - icon.width: 16 - icon.height: 16 - focusPolicy: Qt.TabFocus - } - textField: TextField { - text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile - ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialog.qml deleted file mode 100644 index d0af142..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialog.qml +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -import "." as DialogsImpl - -FolderDialogImpl { - id: control - - // Can't set implicitWidth of the NinePatchImage background, so we do it here. - implicitWidth: Math.max(600, - implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(400, - implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - FolderDialogImpl.folderDialogListView: folderDialogListView - FolderDialogImpl.breadcrumbBar: breadcrumbBar - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - elide: Label.ElideRight - font.bold: true - - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.topMargin: 12 - Layout.fillWidth: true - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.fillWidth: true - Layout.maximumWidth: parent.width - 28 - } - } - - contentItem: ListView { - id: folderDialogListView - objectName: "folderDialogListView" - clip: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - showFiles: false - sortCaseSensitive: false - } - delegate: DialogsImpl.FolderDialogDelegate { - objectName: "folderDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - } - } - - footer: DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - leftPadding: 16 - rightPadding: 16 - bottomPadding: 16 - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialogDelegate.qml deleted file mode 100644 index 64195c7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialogDelegate.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick.Controls -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Controls.impl as ControlsImpl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-round.png" - - required property int index - required property string fileName - required property url fileUrl - required property date fileModified - - contentItem: FolderDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: Qt.lighter(control.icon.color) - } - - background: NinePatchImage { - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/imagine/filedialogdelegate-background" - NinePatchImageSelector on source { - states: [ - { "disabled": !control.enabled }, - { "pressed": control.down }, - { "focused": control.visualFocus }, - { "highlighted": control.highlighted }, - { "mirrored": control.mirrored }, - { "hovered": control.enabled && control.hovered } - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FontDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FontDialog.qml deleted file mode 100644 index 87660b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FontDialog.qml +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -FontDialogImpl { - id: control - - // Can't set implicitWidth of the NinePatchImage background, so we do it here. - implicitWidth: Math.max(600, - implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(400, - implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - FontDialogImpl.buttonBox: buttonBox - FontDialogImpl.familyListView: content.familyListView - FontDialogImpl.styleListView: content.styleListView - FontDialogImpl.sizeListView: content.sizeListView - FontDialogImpl.sampleEdit: content.sampleEdit - FontDialogImpl.writingSystemComboBox: writingSystemComboBox - FontDialogImpl.underlineCheckBox: content.underline - FontDialogImpl.strikeoutCheckBox: content.strikeout - FontDialogImpl.familyEdit: content.familyEdit - FontDialogImpl.styleEdit: content.styleEdit - FontDialogImpl.sizeEdit: content.sizeEdit - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } - - header: Label { - text: control.title - elide: Label.ElideRight - font.bold: true - - leftPadding: 16 - rightPadding: 16 - topPadding: 12 - visible: control.title.length > 0 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - contentItem: FontDialogContent { - id: content - rowSpacing: 16 - } - - footer: RowLayout { - id: rowLayout - spacing: 20 - - Label { - text: qsTr("Writing System") - Layout.leftMargin: 16 - Layout.bottomMargin: 16 - } - ComboBox{ - id: writingSystemComboBox - - Layout.fillWidth: true - Layout.bottomMargin: 16 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - Layout.rightMargin: 16 - Layout.bottomMargin: 16 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/MessageDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/MessageDialog.qml deleted file mode 100644 index 9ec3a55..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/MessageDialog.qml +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -MessageDialogImpl { - id: control - - // Can't set implicitWidth of the NinePatchImage background, so we do it here. - implicitWidth: Math.max(320, - implicitBackgroundWidth + leftInset + rightInset, - implicitHeaderWidth, - rowLayout.implicitWidth) - implicitHeight: Math.max(160, - implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - MessageDialogImpl.buttonBox: buttonBox - MessageDialogImpl.detailedTextButton: detailedTextButton - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: Label { - text: control.title - elide: Label.ElideRight - font.bold: true - - leftPadding: 16 - rightPadding: 16 - topPadding: 12 - visible: control.title.length > 0 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - contentItem: Column { - padding: 8 - spacing: 16 - - Label { - id: textLabel - objectName: "textLabel" - text: control.text - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - Label { - id: informativeTextLabel - objectName: "informativeTextLabel" - text: control.informativeText - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - } - - footer: ColumnLayout { - id: columnLayout - - RowLayout { - id: rowLayout - spacing: 12 - - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.bottomMargin: 16 - - Button { - id: detailedTextButton - objectName: "detailedTextButton" - text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...") - } - - DialogButtonBox { - id: buttonBox - objectName: "buttonBox" - spacing: 12 - padding: 0 - - Layout.fillWidth: true - } - } - - TextArea { - id: detailedTextArea - objectName: "detailedText" - text: control.detailedText - visible: control.showDetailedText - wrapMode: TextEdit.WordWrap - readOnly: true - - padding: 12 - - Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 - Layout.bottomMargin: 16 - - background: Rectangle { - color: Qt.rgba(1,1,1,1) - radius: 3 - border.color: Qt.darker(control.palette.light) - border.width: 1 - } - } - } - - Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/ColorDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/ColorDialog.qml deleted file mode 100644 index dd1f887..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/ColorDialog.qml +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -ColorDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 0 - rightPadding: 0 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - isHsl: true - - ColorDialogImpl.eyeDropperButton: eyeDropperButton - ColorDialogImpl.buttonBox: buttonBox - ColorDialogImpl.colorPicker: colorPicker - ColorDialogImpl.alphaSlider: alphaSlider - ColorDialogImpl.colorInputs: inputs - - Material.elevation: 24 - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 560 - radius: 2 - color: control.Material.dialogColor - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - header: RowLayout { - Label { - objectName: "titleLabel" - text: control.title - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - leftPadding: 24 - rightPadding: 24 - topPadding: 24 - bottomPadding: 24 - - Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15 - } - - Button { - id: eyeDropperButton - objectName: "eyeDropperButton" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png" - flat: true - topPadding: 24 - bottomPadding: 24 - visible: false - - Layout.alignment: Qt.AlignRight - Layout.rightMargin: 24 - } - } - - contentItem: ColumnLayout { - spacing: 12 - SaturationLightnessPicker { - id: colorPicker - objectName: "colorPicker" - color: control.color - - Layout.fillWidth: true - Layout.fillHeight: true - } - - Slider { - id: hueSlider - objectName: "hueSlider" - orientation: Qt.Horizontal - value: control.hue - implicitHeight: 20 - onMoved: function() { control.hue = value; } - handle: PickerHandle { - x: hueSlider.leftPadding + (hueSlider.horizontal - ? hueSlider.visualPosition * (hueSlider.availableWidth - width) - : (hueSlider.availableWidth - width) / 2) - y: hueSlider.topPadding + (hueSlider.horizontal - ? (hueSlider.availableHeight - height) / 2 - : hueSlider.visualPosition * (hueSlider.availableHeight - height)) - picker: hueSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: hueSlider.handle.width / 2 - anchors.rightMargin: hueSlider.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - Rectangle { - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: HueGradient { - orientation: Gradient.Horizontal - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - Slider { - id: alphaSlider - objectName: "alphaSlider" - orientation: Qt.Horizontal - value: control.alpha - implicitHeight: 20 - handle: PickerHandle { - x: alphaSlider.leftPadding + (alphaSlider.horizontal - ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width) - : (alphaSlider.availableWidth - width) / 2) - y: alphaSlider.topPadding + (alphaSlider.horizontal - ? (alphaSlider.availableHeight - height) / 2 - : alphaSlider.visualPosition * (alphaSlider.availableHeight - height)) - picker: alphaSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: parent.handle.width / 2 - anchors.rightMargin: parent.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - - Image { - anchors.fill: alphaSliderGradient - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - id: alphaSliderGradient - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: Gradient { - orientation: Gradient.Horizontal - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: Qt.rgba(control.color.r, - control.color.g, - control.color.b, - 1) - } - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - ColorInputs { - id: inputs - - color: control.color - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - } - } - - footer: RowLayout { - spacing: 20 - - Label { - text: qsTr("Color") - - Layout.leftMargin: 20 - } - - Rectangle { - implicitWidth: 32 - implicitHeight: 32 - border.width: 2 - border.color: control.palette.dark - color: "transparent" - - Image { - anchors.fill: parent - anchors.margins: 4 - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - anchors.fill: parent - anchors.margins: 4 - color: control.color - } - } - - Item { - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - horizontalPadding: 0 - - Layout.rightMargin: 20 - Layout.alignment: Qt.AlignRight - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialog.qml deleted file mode 100644 index c467e5a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialog.qml +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FileDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 24 - rightPadding: 24 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Material.elevation: 24 - - Dialog { - id: overwriteConfirmationDialog - objectName: "confirmationDialog" - anchors.centerIn: parent - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - dim: true - modal: true - title: qsTr("Overwrite file?") - width: control.width - control.leftPadding - control.rightPadding - clip: true - - contentItem: Label { - text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) - wrapMode: Text.WordWrap - } - - footer: DialogButtonBox { - alignment: Qt.AlignHCenter - standardButtons: DialogButtonBox.Yes | DialogButtonBox.No - } - } - - FileDialogImpl.buttonBox: buttonBox - FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox - FileDialogImpl.fileDialogListView: fileDialogListView - FileDialogImpl.breadcrumbBar: breadcrumbBar - FileDialogImpl.fileNameLabel: fileNameLabel - FileDialogImpl.fileNameTextField: fileNameTextField - FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - visible: control.title.length > 0 - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.topMargin: 24 - Layout.fillWidth: true - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.fillWidth: true - Layout.maximumWidth: parent.width - 48 - } - } - - contentItem: ListView { - id: fileDialogListView - objectName: "fileDialogListView" - clip: true - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - nameFilters: control.selectedNameFilter.globs - showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst) - sortCaseSensitive: false - } - delegate: DialogsImpl.FileDialogDelegate { - objectName: "fileDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - fileDetailRowWidth: nameFiltersComboBox.width - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox - } - } - - footer: GridLayout { - columnSpacing: 20 - columns: 3 - - Label { - id: fileNameLabel - text: qsTr("File name") - visible: false - - Layout.topMargin: 12 - Layout.leftMargin: 20 - } - - TextField { - id: fileNameTextField - objectName: "fileNameTextField" - visible: false - - Layout.topMargin: 12 - Layout.fillWidth: true - } - - Label { - text: qsTr("Filter") - - Layout.row: 1 - Layout.topMargin: fileNameTextField.visible ? 0 : 12 - Layout.leftMargin: 20 - } - - ComboBox { - id: nameFiltersComboBox - model: control.nameFilters - flat: true - - verticalPadding: 0 - topInset: 0 - bottomInset: 0 - Layout.topMargin: fileNameTextField.visible ? 0 : 12 - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - padding: 0 - topInset: 0 - bottomInset: 0 - - Layout.row: 1 - Layout.column: 2 - Layout.topMargin: fileNameTextField.visible ? 0 : 12 - Layout.rightMargin: 20 - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialogDelegate.qml deleted file mode 100644 index 9ec992b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialogDelegate.qml +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 16 - icon.height: 16 - icon.color: enabled ? Material.foreground : Material.hintTextColor - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/" - + (fileIsDir ? "folder" : "file") + "-icon-square.png" - - file: fileUrl - - required property int index - required property string fileName - required property url fileUrl - required property double fileSize - required property date fileModified - required property bool fileIsDir - - required property int fileDetailRowWidth - - contentItem: FileDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.Material.hintTextColor - fileDetailRowWidth: control.fileDetailRowWidth - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? Color.transparent(control.Material.accentColor, 0.08) : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderBreadcrumbBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderBreadcrumbBar.qml deleted file mode 100644 index f049304..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderBreadcrumbBar.qml +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FolderBreadcrumbBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0) - + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - upButtonSpacing: 20 - padding: 1 - - background: Rectangle { - color: control.Material.backgroundColor - } - contentItem: ListView { - currentIndex: control.currentIndex - model: control.contentModel - orientation: ListView.Horizontal - snapMode: ListView.SnapToItem - highlightMoveDuration: 0 - interactive: false - clip: true - } - buttonDelegate: Button { - id: buttonDelegateRoot - text: folderName - flat: true - font.capitalization: Font.MixedCase - - // The default of 100 is a bit too wide for short directory names. - Binding { - target: buttonDelegateRoot.background - property: "implicitWidth" - value: control.Material.buttonHeight - } - - required property int index - required property string folderName - } - separatorDelegate: IconImage { - id: iconImage - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-square.png" - sourceSize: Qt.size(8, 8) - // The image is 8x8, and add 2 px padding on each side. - width: 8 + 4 - height: control.contentItem.height - color: control.Material.hintTextColor - y: (control.height - height) / 2 - } - upButton: ToolButton { - x: control.leftPadding - y: control.topPadding - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-thick-square.png" - icon.width: 16 - icon.height: 16 - width: height - focusPolicy: Qt.TabFocus - } - textField: TextField { - text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile - ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialog.qml deleted file mode 100644 index 4e33a06..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialog.qml +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FolderDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 24 - rightPadding: 24 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Material.elevation: 24 - - FolderDialogImpl.folderDialogListView: folderDialogListView - FolderDialogImpl.breadcrumbBar: breadcrumbBar - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - visible: control.title.length > 0 - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.topMargin: 24 - Layout.fillWidth: true - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.fillWidth: true - Layout.maximumWidth: parent.width - 48 - } - } - - contentItem: ListView { - id: folderDialogListView - objectName: "folderDialogListView" - clip: true - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - showFiles: false - sortCaseSensitive: false - } - delegate: DialogsImpl.FolderDialogDelegate { - objectName: "folderDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - } - } - - footer: DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - leftPadding: 20 - rightPadding: 20 - verticalPadding: 20 - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialogDelegate.qml deleted file mode 100644 index 8b3e6af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialogDelegate.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 16 - icon.height: 16 - icon.color: enabled ? Material.foreground : Material.hintTextColor - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-square.png" - - file: fileUrl - - required property int index - required property string fileName - required property url fileUrl - required property date fileModified - - contentItem: FolderDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? Color.transparent(control.Material.accentColor, 0.08) : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FontDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FontDialog.qml deleted file mode 100644 index 2322a65..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FontDialog.qml +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -FontDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 24 - rightPadding: 24 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - Material.elevation: 24 - - FontDialogImpl.buttonBox: buttonBox - FontDialogImpl.familyListView: content.familyListView - FontDialogImpl.styleListView: content.styleListView - FontDialogImpl.sizeListView: content.sizeListView - FontDialogImpl.sampleEdit: content.sampleEdit - FontDialogImpl.writingSystemComboBox: writingSystemComboBox - FontDialogImpl.underlineCheckBox: content.underline - FontDialogImpl.strikeoutCheckBox: content.strikeout - FontDialogImpl.familyEdit: content.familyEdit - FontDialogImpl.styleEdit: content.styleEdit - FontDialogImpl.sizeEdit: content.sizeEdit - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } - - header: Label { - text: control.title - visible: control.title.length > 0 - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - - leftPadding: 24 - rightPadding: 24 - topPadding: 24 - bottomPadding: 24 - } - - contentItem: FontDialogContent { - id: content - familyEdit.bottomPadding: 8 - styleEdit.bottomPadding: 8 - sizeEdit.bottomPadding: 8 - } - - footer: RowLayout { - id: rowLayout - spacing: 20 - - Label { - text: qsTr("Writing System") - - Layout.leftMargin: 20 - } - ComboBox{ - id: writingSystemComboBox - - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - horizontalPadding: 0 - verticalPadding: 20 - - Layout.rightMargin: 20 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/MessageDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/MessageDialog.qml deleted file mode 100644 index e336185..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/MessageDialog.qml +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -MessageDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - rowLayout.implicitWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 24 - rightPadding: 24 - - Material.elevation: 24 - - MessageDialogImpl.buttonBox: buttonBox - MessageDialogImpl.detailedTextButton: detailedTextButton - - background: Rectangle { - implicitWidth: 320 - implicitHeight: 160 - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - header: Label { - text: control.title - visible: control.title.length > 0 - elide: Label.ElideRight - font.bold: true - font.pixelSize: 16 - - leftPadding: 24 - rightPadding: 24 - topPadding: 24 - bottomPadding: 24 - } - - contentItem: Column { - spacing: 24 - - Label { - id: textLabel - objectName: "textLabel" - text: control.text - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - - Label { - id: informativeTextLabel - objectName: "informativeTextLabel" - text: control.informativeText - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - } - - footer: ColumnLayout { - id: columnLayout - - RowLayout { - id: rowLayout - - Button { - id: detailedTextButton - objectName: "detailedTextButton" - text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...") - - Layout.leftMargin: 20 - } - - DialogButtonBox { - id: buttonBox - objectName: "buttonBox" - spacing: 12 - horizontalPadding: 0 - verticalPadding: 20 - - Layout.fillWidth: true - Layout.leftMargin: detailedTextButton.visible ? 12 : 20 - Layout.rightMargin: 20 - } - } - - TextArea { - id: detailedTextArea - objectName: "detailedText" - text: control.detailedText - visible: control.showDetailedText - wrapMode: TextEdit.WordWrap - readOnly: true - padding: 12 - - Layout.fillWidth: true - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Layout.bottomMargin: 20 - - background: Rectangle { - implicitWidth: 120 - implicitHeight: control.Material.textFieldHeight - color: Qt.rgba(1,1,1,1) - radius: 3 - border.color: Qt.darker(control.palette.light) - border.width: 1 - } - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/ColorDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/ColorDialog.qml deleted file mode 100644 index 384fa41..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/ColorDialog.qml +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -ColorDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - isHsl: true - - ColorDialogImpl.eyeDropperButton: eyeDropperButton - ColorDialogImpl.buttonBox: buttonBox - ColorDialogImpl.colorPicker: colorPicker - ColorDialogImpl.alphaSlider: alphaSlider - ColorDialogImpl.colorInputs: inputs - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 600 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: RowLayout { - spacing: 12 - - Label { - objectName: "titleLabel" - text: control.title - elide: Label.ElideRight - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - - Layout.topMargin: 24 - Layout.bottomMargin: 24 - Layout.leftMargin: 18 - Layout.fillWidth: true - Layout.preferredWidth: control.title.length > 0 ? implicitHeight : 0 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15 - } - - Button { - id: eyeDropperButton - objectName: "eyeDropperButton" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png" - flat: true - topPadding: 24 - bottomPadding: 24 - visible: false - - Layout.alignment: Qt.AlignRight - Layout.rightMargin: 18 - } - } - - contentItem: ColumnLayout { - spacing: 12 - SaturationLightnessPicker { - id: colorPicker - objectName: "colorPicker" - color: control.color - - Layout.fillWidth: true - Layout.fillHeight: true - } - - Slider { - id: hueSlider - objectName: "hueSlider" - orientation: Qt.Horizontal - value: control.hue - implicitHeight: 20 - onMoved: function() { control.hue = value; } - handle: PickerHandle { - x: hueSlider.leftPadding + (hueSlider.horizontal - ? hueSlider.visualPosition * (hueSlider.availableWidth - width) - : (hueSlider.availableWidth - width) / 2) - y: hueSlider.topPadding + (hueSlider.horizontal - ? (hueSlider.availableHeight - height) / 2 - : hueSlider.visualPosition * (hueSlider.availableHeight - height)) - picker: hueSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: hueSlider.handle.width / 2 - anchors.rightMargin: hueSlider.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - Rectangle { - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: HueGradient { - orientation: Gradient.Horizontal - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - Slider { - id: alphaSlider - objectName: "alphaSlider" - orientation: Qt.Horizontal - value: control.alpha - implicitHeight: 20 - handle: PickerHandle { - x: alphaSlider.leftPadding + (alphaSlider.horizontal - ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width) - : (alphaSlider.availableWidth - width) / 2) - y: alphaSlider.topPadding + (alphaSlider.horizontal - ? (alphaSlider.availableHeight - height) / 2 - : alphaSlider.visualPosition * (alphaSlider.availableHeight - height)) - picker: alphaSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: parent.handle.width / 2 - anchors.rightMargin: parent.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - - Image { - anchors.fill: alphaSliderGradient - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - id: alphaSliderGradient - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: Gradient { - orientation: Gradient.Horizontal - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: Qt.rgba(control.color.r, - control.color.g, - control.color.b, - 1) - } - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - ColorInputs { - id: inputs - - color: control.color - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - } - } - - footer: RowLayout { - spacing: 24 - - Label { - text: qsTr("Color") - - Layout.topMargin: 6 - Layout.leftMargin: 24 - Layout.bottomMargin: 24 - } - - Rectangle { - implicitWidth: 56 - implicitHeight: 36 - border.width: 2 - border.color: control.palette.dark - color: "transparent" - - Image { - anchors.fill: parent - anchors.margins: 6 - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - anchors.fill: parent - anchors.margins: 6 - color: control.color - } - - Layout.topMargin: 6 - Layout.bottomMargin: 24 - } - - Item { - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - horizontalPadding: 0 - - Layout.rightMargin: 24 - Layout.alignment: Qt.AlignRight - } - } - - Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialog.qml deleted file mode 100644 index b0bc98e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialog.qml +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FileDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Dialog { - id: overwriteConfirmationDialog - objectName: "confirmationDialog" - anchors.centerIn: parent - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - dim: true - modal: true - title: qsTr("Overwrite file?") - width: control.width - control.leftPadding - control.rightPadding - - contentItem: Label { - text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) - wrapMode: Text.WordWrap - } - - footer: DialogButtonBox { - standardButtons: DialogButtonBox.Yes | DialogButtonBox.No - } - - Overlay.modal: Rectangle { - color: overwriteConfirmationDialog.Universal.baseMediumColor - } - } - - FileDialogImpl.buttonBox: buttonBox - FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox - FileDialogImpl.fileDialogListView: fileDialogListView - FileDialogImpl.breadcrumbBar: breadcrumbBar - FileDialogImpl.fileNameLabel: fileNameLabel - FileDialogImpl.fileNameTextField: fileNameTextField - FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - elide: Label.ElideRight - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.topMargin: 18 - Layout.fillWidth: true - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.fillWidth: true - Layout.maximumWidth: parent.width - 48 - } - } - - contentItem: ListView { - id: fileDialogListView - objectName: "fileDialogListView" - clip: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - nameFilters: control.selectedNameFilter.globs - showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst) - sortCaseSensitive: false - } - delegate: DialogsImpl.FileDialogDelegate { - objectName: "fileDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - fileDetailRowWidth: nameFiltersComboBox.width - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox - } - } - - footer: GridLayout { - columnSpacing: 24 - columns: 3 - - Label { - id: fileNameLabel - text: qsTr("File name") - visible: false - - Layout.leftMargin: 24 - } - - TextField { - id: fileNameTextField - objectName: "fileNameTextField" - visible: false - - Layout.fillWidth: true - } - - Label { - text: qsTr("Filter") - - Layout.row: 1 - Layout.column: 0 - Layout.leftMargin: 24 - Layout.bottomMargin: 24 - } - - ComboBox { - id: nameFiltersComboBox - model: control.nameFilters - - Layout.fillWidth: true - Layout.topMargin: 6 - Layout.bottomMargin: 24 - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - horizontalPadding: 0 - - Layout.rightMargin: 24 - } - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialogDelegate.qml deleted file mode 100644 index dd23f3d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialogDelegate.qml +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/" - + (fileIsDir ? "folder" : "file") + "-icon-square.png" - - file: fileUrl - - required property int index - required property string fileName - required property url fileUrl - required property double fileSize - required property date fileModified - required property bool fileIsDir - - required property int fileDetailRowWidth - - contentItem: FileDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.icon.color - fileDetailRowWidth: control.fileDetailRowWidth - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderBreadcrumbBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderBreadcrumbBar.qml deleted file mode 100644 index 4e730c7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderBreadcrumbBar.qml +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FolderBreadcrumbBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0) - + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - upButtonSpacing: 20 - padding: 1 - - background: Rectangle { - color: control.Universal.background - } - contentItem: ListView { - currentIndex: control.currentIndex - model: control.contentModel - orientation: ListView.Horizontal - snapMode: ListView.SnapToItem - highlightMoveDuration: 0 - interactive: false - clip: true - } - buttonDelegate: ToolButton { - id: buttonDelegateRoot - text: folderName - - // The default is a bit too wide for short directory names. - Binding { - target: buttonDelegateRoot.background - property: "implicitWidth" - value: 48 - } - - required property int index - required property string folderName - } - separatorDelegate: IconImage { - id: iconImage - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-square.png" - sourceSize: Qt.size(8, 8) - // The image is 8x8, and add 2 px padding on each side. - width: 8 + 4 - height: control.contentItem.height - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - y: (control.height - height) / 2 - } - upButton: ToolButton { - x: control.leftPadding - y: control.topPadding - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-square.png" - icon.width: 16 - icon.height: 16 - width: height - focusPolicy: Qt.TabFocus - } - textField: TextField { - text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile - ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialog.qml deleted file mode 100644 index 9ae0a50..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialog.qml +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FolderDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - FolderDialogImpl.folderDialogListView: folderDialogListView - FolderDialogImpl.breadcrumbBar: breadcrumbBar - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: ColumnLayout { - spacing: 12 - - Label { - text: control.title - elide: Label.ElideRight - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.topMargin: 18 - Layout.fillWidth: true - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0 - - background: Rectangle { - // FlyoutBorderThemeThickness - x: 1 - y: 1 - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - dialog: control - - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.preferredWidth: 400 - Layout.fillWidth: true - } - } - - contentItem: ListView { - id: folderDialogListView - objectName: "folderDialogListView" - clip: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - showFiles: false - sortCaseSensitive: false - } - delegate: DialogsImpl.FolderDialogDelegate { - objectName: "folderDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - } - } - - footer: DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - leftPadding: 24 - rightPadding: 24 - topPadding: 6 - bottomPadding: 24 - alignment: Qt.AlignRight - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialogDelegate.qml deleted file mode 100644 index 97da6d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialogDelegate.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-square.png" - - file: fileUrl - - required property int index - required property string fileName - required property url fileUrl - required property date fileModified - - contentItem: FolderDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.Universal.baseMediumColor - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FontDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FontDialog.qml deleted file mode 100644 index aa9f38c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FontDialog.qml +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -FontDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - FontDialogImpl.buttonBox: buttonBox - FontDialogImpl.familyListView: content.familyListView - FontDialogImpl.styleListView: content.styleListView - FontDialogImpl.sizeListView: content.sizeListView - FontDialogImpl.sampleEdit: content.sampleEdit - FontDialogImpl.writingSystemComboBox: writingSystemComboBox - FontDialogImpl.underlineCheckBox: content.underline - FontDialogImpl.strikeoutCheckBox: content.strikeout - FontDialogImpl.familyEdit: content.familyEdit - FontDialogImpl.styleEdit: content.styleEdit - FontDialogImpl.sizeEdit: content.sizeEdit - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: Label { - text: control.title - elide: Label.ElideRight - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - - leftPadding: 24 - rightPadding: 24 - topPadding: 18 - height: control.title.length > 0 ? implicitHeight : 0 - - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - contentItem: FontDialogContent { - id: content - rowSpacing: 12 - } - - footer: RowLayout { - id: rowLayout - spacing: 24 - - Label { - text: qsTr("Writing System") - - Layout.leftMargin: 24 - Layout.topMargin: 6 - Layout.bottomMargin: 24 - } - ComboBox{ - id: writingSystemComboBox - - Layout.fillWidth: true - Layout.topMargin: 6 - Layout.bottomMargin: 24 - - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - spacing: 12 - horizontalPadding: 0 - - Layout.rightMargin: 24 - } - } - - Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/MessageDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/MessageDialog.qml deleted file mode 100644 index 3728450..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/MessageDialog.qml +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Universal -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -MessageDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHeaderWidth, - rowLayout.implicitWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - MessageDialogImpl.buttonBox: buttonBox - MessageDialogImpl.detailedTextButton: detailedTextButton - - background: Rectangle { - implicitWidth: 320 - implicitHeight: 160 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: Label { - text: control.title - elide: Label.ElideRight - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - visible: control.title.length > 0 - - leftPadding: 24 - rightPadding: 24 - topPadding: 18 - - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - contentItem: Column { - spacing: 24 - - Label { - id: textLabel - objectName: "textLabel" - text: control.text - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - } - - Label { - id: informativeTextLabel - objectName: "informativeTextLabel" - text: control.informativeText - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - } - } - - footer: ColumnLayout { - id: columnLayout - - RowLayout { - id: rowLayout - spacing: 12 - - Layout.margins: 20 - - Button { - id: detailedTextButton - objectName: "detailedTextButton" - text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...") - } - - DialogButtonBox { - id: buttonBox - objectName: "buttonBox" - spacing: 12 - horizontalPadding: 0 - topPadding: 0 - bottomPadding: 0 - - Layout.fillWidth: true - } - } - - TextArea { - id: detailedTextArea - objectName: "detailedText" - text: control.detailedText - visible: control.showDetailedText - wrapMode: TextEdit.WordWrap - readOnly: true - - Layout.fillWidth: true - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Layout.bottomMargin: 20 - - background: Rectangle { - implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - color: Qt.rgba(1,1,1,1) - radius: 3 - border.color: Qt.darker(control.palette.light) - border.width: 1 - } - } - } - - Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorDialog.qml deleted file mode 100644 index a4cbe49..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorDialog.qml +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -ColorDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 6 - rightPadding: 6 - - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - isHsl: true - - ColorDialogImpl.eyeDropperButton: eyeDropperButton - ColorDialogImpl.buttonBox: buttonBox - ColorDialogImpl.colorPicker: colorPicker - ColorDialogImpl.colorInputs: inputs - ColorDialogImpl.alphaSlider: alphaSlider - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 600 - color: control.palette.window - border.color: control.palette.dark - } - - header: Pane { - palette.window: control.palette.light - padding: 20 - - contentItem: RowLayout { - Label { - objectName: "titleLabel" - text: control.title - elide: Label.ElideRight - font.bold: true - - Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0 - Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15 - Layout.leftMargin: 12 - Layout.alignment: Qt.AlignLeft - } - Button { - id: eyeDropperButton - objectName: "eyeDropperButton" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png" - flat: true - visible: false - - Layout.preferredWidth: implicitHeight - Layout.alignment: Qt.AlignRight - Layout.rightMargin: 6 - } - } - } - - contentItem: ColumnLayout { - spacing: 12 - SaturationLightnessPicker { - id: colorPicker - objectName: "colorPicker" - color: control.color - - Layout.fillWidth: true - Layout.fillHeight: true - } - - Slider { - id: hueSlider - objectName: "hueSlider" - orientation: Qt.Horizontal - value: control.hue - implicitHeight: 20 - onMoved: function() { control.hue = value; } - handle: PickerHandle { - x: hueSlider.leftPadding + (hueSlider.horizontal - ? hueSlider.visualPosition * (hueSlider.availableWidth - width) - : (hueSlider.availableWidth - width) / 2) - y: hueSlider.topPadding + (hueSlider.horizontal - ? (hueSlider.availableHeight - height) / 2 - : hueSlider.visualPosition * (hueSlider.availableHeight - height)) - picker: hueSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: hueSlider.handle.width / 2 - anchors.rightMargin: hueSlider.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - Rectangle { - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: HueGradient { - orientation: Gradient.Horizontal - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - Slider { - id: alphaSlider - objectName: "alphaSlider" - orientation: Qt.Horizontal - value: control.alpha - implicitHeight: 20 - handle: PickerHandle { - x: alphaSlider.leftPadding + (alphaSlider.horizontal - ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width) - : (alphaSlider.availableWidth - width) / 2) - y: alphaSlider.topPadding + (alphaSlider.horizontal - ? (alphaSlider.availableHeight - height) / 2 - : alphaSlider.visualPosition * (alphaSlider.availableHeight - height)) - picker: alphaSlider - } - background: Rectangle { - anchors.fill: parent - anchors.leftMargin: parent.handle.width / 2 - anchors.rightMargin: parent.handle.width / 2 - border.width: 2 - border.color: control.palette.dark - radius: 10 - color: "transparent" - - Image { - anchors.fill: alphaSliderGradient - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - id: alphaSliderGradient - anchors.fill: parent - anchors.margins: 4 - radius: 10 - gradient: Gradient { - orientation: Gradient.Horizontal - GradientStop { - position: 0 - color: "transparent" - } - GradientStop { - position: 1 - color: Qt.rgba(control.color.r, - control.color.g, - control.color.b, - 1) - } - } - } - } - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - } - - ColorInputs { - id: inputs - - color: control.color - - Layout.fillWidth: true - Layout.leftMargin: 12 - Layout.rightMargin: 12 - Layout.bottomMargin: 12 - } - } - - footer: Rectangle { - color: control.palette.light - implicitWidth: rowLayout.implicitWidth - implicitHeight: rowLayout.implicitHeight - - RowLayout { - id: rowLayout - width: parent.width - height: parent.height - spacing: 20 - - Label { - text: qsTr("Color") - - Layout.leftMargin: 20 - } - - Rectangle { - implicitWidth: 32 - implicitHeight: 32 - border.width: 2 - border.color: control.palette.dark - color: "transparent" - - Image { - anchors.fill: parent - anchors.margins: 4 - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png" - fillMode: Image.Tile - } - - Rectangle { - anchors.fill: parent - anchors.margins: 4 - color: control.color - } - } - - Item { - // empty space filler - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - palette.window: control.palette.light - spacing: 12 - horizontalPadding: 0 - verticalPadding: 20 - - Layout.rightMargin: 20 - } - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorInputs.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorInputs.qml deleted file mode 100644 index 8fc0e0d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorInputs.qml +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick.Dialogs.quickimpl - -ColorInputsImpl { - id: root - - hexInput: hex - redInput: rgbRed - greenInput: rgbGreen - blueInput: rgbBlue - rgbAlphaInput: rgbAlpha - hsvHueInput: hsvHue - hsvSaturationInput: hsvSaturation - valueInput: hsvValue - hsvAlphaInput: hsvAlpha - hslHueInput: hslHue - hslSaturationInput: hslSaturation - lightnessInput: hslLightness - hslAlphaInput: hslAlpha - - implicitWidth: content.implicitWidth - implicitHeight: content.implicitHeight - - TextMetrics { - id: fourM - text: "MMMM" - font: colorSystemComboBox.font - } - - RowLayout { - id: content - anchors.fill: parent - spacing: 12 - - ComboBox { - id: colorSystemComboBox - objectName: "colorSystemComboBox" - editable: false - flat: true - background.implicitWidth: 0 - implicitContentWidthPolicy: ComboBox.WidestTextWhenCompleted - implicitWidth: implicitContentWidth + leftPadding + rightPadding // Workaround QTBUG-106098 - model: ListModel { - ListElement { - name: qsTr("Hex") - } - ListElement { - name: qsTr("RGB") - } - ListElement { - name: qsTr("HSV") - } - ListElement { - name: qsTr("HSL") - } - } - } - - StackLayout { - objectName: "colorParameters" - currentIndex: colorSystemComboBox.currentIndex - - Layout.fillWidth: true - - TextField { - id: hex - horizontalAlignment: Qt.AlignLeft - text: root.color - maximumLength: 9 - validator: RegularExpressionValidator { - regularExpression: root.showAlpha ? /^#[0-9A-f]{6}(?:[0-9A-f]{2})?$/ : /^#[0-9A-f]{6}$/ - } - Layout.fillWidth: true - } - - // TODO: QTBUG-106246 - // Using RowLayout as the root type should work here, but doesn't: - // when ShowAlphaChannel is true, switching from hex to rgba causes a - // jump in the StackLayout's implicitWidth. - Item { - implicitWidth: rgbRed.implicitWidth + rgbGreen.implicitWidth + rgbBlue.implicitWidth + rgbAlpha.implicitWidth - implicitHeight: Math.max(rgbRed.implicitHeight, rgbGreen.implicitHeight, rgbBlue.implicitHeight, rgbAlpha.implicitHeight) - - RowLayout { - width: parent.implicitWidth - TextField { - id: rgbRed - objectName: "rgbRed" - horizontalAlignment: Qt.AlignHCenter - text: root.red - maximumLength: 3 - validator: IntValidator { - bottom: 0 - top: 999 - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: rgbGreen - objectName: "rgbGreen" - horizontalAlignment: Qt.AlignHCenter - text: root.green - maximumLength: 3 - validator: IntValidator { - bottom: 0 - top: 999 - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: rgbBlue - objectName: "rgbBlue" - horizontalAlignment: Qt.AlignHCenter - text: root.blue - maximumLength: 3 - validator: IntValidator { - bottom: 0 - top: 999 - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: rgbAlpha - objectName: "rgbAlpha" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.alpha * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - } - } - - Item { - implicitWidth: hsvHue.implicitWidth + hsvSaturation.implicitWidth + hsvValue.implicitWidth + hsvAlpha.implicitWidth - implicitHeight: Math.max(hsvHue.implicitHeight, hsvSaturation.implicitHeight, hsvValue.implicitHeight, hsvAlpha.implicitHeight) - - RowLayout { - width: parent.implicitWidth - TextField { - id: hsvHue - objectName: "hsvHue" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.hue * 360).toString() + "°" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}°?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hsvSaturation - objectName: "hsvSaturation" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.hsvSaturation * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hsvValue - objectName: "hsvValue" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.value * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hsvAlpha - objectName: "hsvAlpha" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.alpha * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - } - } - Item { - implicitWidth: hslHue.implicitWidth + hsvSaturation.implicitWidth + hslLightness.implicitWidth + hslAlpha.implicitWidth - implicitHeight: Math.max(hslHue.implicitHeight, hsvSaturation.implicitHeight, hslLightness.implicitHeight, hslAlpha.implicitHeight) - - RowLayout { - width: parent.implicitWidth - - TextField { - id: hslHue - objectName: "hslHue" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.hue * 360).toString() + "°" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}°?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hslSaturation - objectName: "hslSaturation" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.hslSaturation * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hslLightness - objectName: "hslLightness" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.lightness * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - TextField { - id: hslAlpha - objectName: "hslAlpha" - horizontalAlignment: Qt.AlignHCenter - text: Math.round(root.alpha * 100).toString() + "%" - maximumLength: 4 - validator: RegularExpressionValidator { - regularExpression: /^[0-9]{0,3}%?$/ - } - implicitWidth: fourM.width + leftPadding + rightPadding - Layout.fillWidth: true - } - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialog.qml deleted file mode 100644 index 536634e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialog.qml +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FileDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 20 - rightPadding: 20 - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - Dialog { - id: overwriteConfirmationDialog - objectName: "confirmationDialog" - anchors.centerIn: parent - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - dim: true - modal: true - title: qsTr("Overwrite file?") - width: control.width - control.leftPadding - control.rightPadding - - contentItem: Label { - text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) - wrapMode: Text.WordWrap - } - - footer: DialogButtonBox { - alignment: Qt.AlignHCenter - standardButtons: DialogButtonBox.Yes | DialogButtonBox.No - } - } - - /* - We use attached properties because we want to handle logic in C++, and: - - We can't assume the footer only contains a DialogButtonBox (which would allow us - to connect up to it in QQuickFileDialogImpl); it also needs to hold a ComboBox - and therefore the root footer item will be e.g. a layout item instead. - - We don't want to create our own "FileDialogButtonBox" (in order to be able to handle the logic - in C++) because we'd need to copy (and hence duplicate code in) DialogButtonBox.qml. - */ - FileDialogImpl.buttonBox: buttonBox - FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox - FileDialogImpl.fileDialogListView: fileDialogListView - FileDialogImpl.breadcrumbBar: breadcrumbBar - FileDialogImpl.fileNameLabel: fileNameLabel - FileDialogImpl.fileNameTextField: fileNameTextField - FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.dark - } - - header: Pane { - palette.window: control.palette.light - padding: 20 - - contentItem: Column { - spacing: 12 - - Label { - objectName: "dialogTitleBarLabel" - width: parent.width - text: control.title - visible: control.title.length > 0 - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - width: parent.width - dialog: control - - KeyNavigation.tab: fileDialogListView - } - } - } - - contentItem: ListView { - id: fileDialogListView - objectName: "fileDialogListView" - clip: true - focus: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - nameFilters: control.selectedNameFilter.globs - showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst) - sortCaseSensitive: false - } - delegate: DialogsImpl.FileDialogDelegate { - objectName: "fileDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - fileDetailRowWidth: nameFiltersComboBox.width - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox - } - } - - footer: Rectangle { - color: control.palette.light - implicitWidth: gridLayout.implicitWidth - implicitHeight: gridLayout.implicitHeight + 12 - - GridLayout { - // OK to use IDs here, since users shouldn't be overriding this stuff. - id: gridLayout - anchors.fill: parent - anchors.topMargin: 6 - anchors.bottomMargin: 6 - columnSpacing: 20 - columns: 3 - - Label { - id: fileNameLabel - text: qsTr("File name") - visible: false - - Layout.leftMargin: 20 - } - - TextField { - id: fileNameTextField - objectName: "fileNameTextField" - visible: false - - Layout.fillWidth: true - } - - Label { - text: qsTr("Filter") - - Layout.row: 1 - Layout.column: 0 - Layout.leftMargin: 20 - } - - ComboBox { - id: nameFiltersComboBox - model: control.nameFilters - verticalPadding: 0 - - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - palette.window: control.palette.light - spacing: 12 - padding: 0 - - Layout.row: 1 - Layout.column: 2 - Layout.rightMargin: 20 - } - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegate.qml deleted file mode 100644 index eea3ab9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegate.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 8 - topPadding: 0 - bottomPadding: 0 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/" - + (fileIsDir ? "folder" : "file") + "-icon-round.png" - - // We don't use index here, but in C++. Since we're using required - // properties, the index context property will not be injected, so we can't - // use its QQmlContext to access it. - required property int index - required property string fileName - required property url fileUrl - required property double fileSize - required property date fileModified - required property bool fileIsDir - - property int fileDetailRowWidth - - contentItem: FileDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: control.icon.color - fileDetailRowWidth: control.fileDetailRowWidth - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted || control.visualFocus - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.highlighted ? 0.15 : 0.0) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegateLabel.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegateLabel.qml deleted file mode 100644 index a28d9de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegateLabel.qml +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -/* - Most of the elements in here are the same between styles, so we - have a reusable component for it and provide some properties to enable style-specific tweaks. -*/ -Item { - id: root - implicitWidth: column.implicitWidth - implicitHeight: column.implicitHeight - - required property DialogsQuickImpl.FileDialogDelegate delegate - required property int fileDetailRowWidth - - property color fileDetailRowTextColor - - Column { - id: column - y: (parent.height - height) / 2 - - Row { - spacing: root.delegate.spacing - - IconImage { - id: iconImage - source: root.delegate.icon.source - sourceSize: Qt.size(root.delegate.icon.width, root.delegate.icon.height) - width: root.delegate.icon.width - height: root.delegate.icon.height - color: root.delegate.icon.color - y: (parent.height - height) / 2 - } - Label { - text: root.delegate.fileName - color: root.delegate.icon.color - y: (parent.height - height) / 2 - } - } - - Item { - id: fileDetailRow - x: iconImage.width + root.delegate.spacing - width: fileDetailRowWidth - x - root.delegate.leftPadding - implicitHeight: childrenRect.height - - Label { - text: { - const fileSize = root.delegate.fileSize; - return fileSize > Number.MAX_SAFE_INTEGER - ? ('>' + locale.formattedDataSize(Number.MAX_SAFE_INTEGER)) - : locale.formattedDataSize(fileSize); - } - font.pixelSize: root.delegate.font.pixelSize * 0.75 - color: root.fileDetailRowTextColor - } - Label { - text: Qt.formatDateTime(root.delegate.fileModified) - font.pixelSize: root.delegate.font.pixelSize * 0.75 - color: root.fileDetailRowTextColor - x: parent.width - width - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderBreadcrumbBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderBreadcrumbBar.qml deleted file mode 100644 index 1ee10da..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderBreadcrumbBar.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FolderBreadcrumbBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0) - + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - upButtonSpacing: 20 - padding: 1 - - background: Rectangle { - border.color: control.palette.button - } - contentItem: ListView { - currentIndex: control.currentIndex - model: control.contentModel - orientation: ListView.Horizontal - snapMode: ListView.SnapToItem - highlightMoveDuration: 0 - interactive: false - clip: true - } - buttonDelegate: Button { - id: buttonDelegateRoot - text: folderName - flat: true - - // The default of 100 is a bit too wide for short directory names. - Binding { - target: buttonDelegateRoot.background - property: "implicitWidth" - value: 40 - } - - required property int index - required property string folderName - } - separatorDelegate: IconImage { - id: iconImage - source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-round.png" - sourceSize: Qt.size(8, 8) - width: 8 - height: control.contentItem.height - color: control.palette.button - y: (control.height - height) / 2 - } - upButton: ToolButton { - x: control.leftPadding - y: control.topPadding - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-round.png" - icon.width: 16 - icon.height: 16 - width: height - focusPolicy: Qt.TabFocus - } - textField: TextField { - text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile - ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialog.qml deleted file mode 100644 index 7df6175..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialog.qml +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import Qt.labs.folderlistmodel -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -import "." as DialogsImpl - -FolderDialogImpl { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - leftPadding: 20 - rightPadding: 20 - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - standardButtons: T.Dialog.Open | T.Dialog.Cancel - - FolderDialogImpl.folderDialogListView: folderDialogListView - FolderDialogImpl.breadcrumbBar: breadcrumbBar - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.dark - } - - header: Pane { - palette.window: control.palette.light - padding: 20 - - contentItem: Column { - spacing: 12 - - Label { - objectName: "dialogTitleBarLabel" - width: parent.width - text: control.title - visible: control.title.length > 0 - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - } - - DialogsImpl.FolderBreadcrumbBar { - id: breadcrumbBar - width: parent.width - dialog: control - - KeyNavigation.tab: folderDialogListView - } - } - } - - contentItem: ListView { - id: folderDialogListView - objectName: "folderDialogListView" - clip: true - focus: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar {} - - model: FolderListModel { - folder: control.currentFolder - showFiles: false - sortCaseSensitive: false - } - delegate: DialogsImpl.FolderDialogDelegate { - objectName: "folderDialogDelegate" + index - width: ListView.view.width - highlighted: ListView.isCurrentItem - dialog: control - - KeyNavigation.backtab: breadcrumbBar - KeyNavigation.tab: control.footer - } - } - - footer: DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - palette.window: control.palette.light - spacing: 12 - alignment: Qt.AlignRight - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegate.qml deleted file mode 100644 index 87b8268..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegate.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -DialogsQuickImpl.FileDialogDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 8 - topPadding: 0 - bottomPadding: 0 - - file: fileUrl - - icon.width: 16 - icon.height: 16 - icon.color: highlighted ? palette.highlightedText : palette.text - icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-round.png" - - // We don't use index here, but in C++. Since we're using required - // properties, the index context property will not be injected, so we can't - // use its QQmlContext to access it. - required property int index - required property string fileName - required property url fileUrl - required property date fileModified - - contentItem: FolderDialogDelegateLabel { - delegate: control - fileDetailRowTextColor: Qt.lighter(control.icon.color) - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted || control.visualFocus - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.highlighted ? 0.15 : 0.0) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegateLabel.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegateLabel.qml deleted file mode 100644 index ada6fdd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegateLabel.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs.quickimpl as DialogsQuickImpl - -/* - Most of the elements in here are the same between styles, so we - have a reusable component for it and provide some properties to enable style-specific tweaks. -*/ -Item { - id: root - implicitWidth: column.implicitWidth - implicitHeight: column.implicitHeight - - required property DialogsQuickImpl.FileDialogDelegate delegate - - property color fileDetailRowTextColor - - Column { - id: column - y: (parent.height - height) / 2 - - Row { - spacing: root.delegate.spacing - - IconImage { - id: iconImage - source: root.delegate.icon.source - sourceSize: Qt.size(root.delegate.icon.width, root.delegate.icon.height) - width: root.delegate.icon.width - height: root.delegate.icon.height - color: root.delegate.icon.color - y: (parent.height - height) / 2 - } - Label { - text: root.delegate.fileName - color: root.delegate.icon.color - y: (parent.height - height) / 2 - } - } - - Label { - x: iconImage.width + root.delegate.spacing - text: Qt.formatDateTime(root.delegate.fileModified) - font.pixelSize: root.delegate.font.pixelSize * 0.75 - color: root.fileDetailRowTextColor - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialog.qml deleted file mode 100644 index 2643b88..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialog.qml +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts -import QtQuick.Templates as T - -FontDialogImpl { - id: control - - implicitWidth: Math.max(control.implicitBackgroundWidth + control.leftInset + control.rightInset, - control.contentWidth + control.leftPadding + control.rightPadding, - control.implicitHeaderWidth, - control.implicitFooterWidth) - implicitHeight: Math.max(control.implicitBackgroundHeight + control.topInset + control.bottomInset, - control.contentHeight + control.topPadding + control.bottomPadding - + (control.implicitHeaderHeight > 0 ? control.implicitHeaderHeight + control.spacing : 0) - + (control.implicitFooterHeight > 0 ? control.implicitFooterHeight + control.spacing : 0)) - - leftPadding: 20 - rightPadding: 20 - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - spacing: 12 - - standardButtons: T.Dialog.Ok | T.Dialog.Cancel - - FontDialogImpl.buttonBox: buttonBox - FontDialogImpl.familyListView: content.familyListView - FontDialogImpl.styleListView: content.styleListView - FontDialogImpl.sizeListView: content.sizeListView - FontDialogImpl.sampleEdit: content.sampleEdit - FontDialogImpl.writingSystemComboBox: writingSystemComboBox - FontDialogImpl.underlineCheckBox: content.underline - FontDialogImpl.strikeoutCheckBox: content.strikeout - FontDialogImpl.familyEdit: content.familyEdit - FontDialogImpl.styleEdit: content.styleEdit - FontDialogImpl.sizeEdit: content.sizeEdit - - background: Rectangle { - implicitWidth: 600 - implicitHeight: 400 - color: control.palette.window - border.color: control.palette.dark - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } - - header: Pane { - palette.window: control.palette.light - padding: 20 - - contentItem: Label { - width: parent.width - text: control.title - visible: control.title.length > 0 - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - } - } - - contentItem: FontDialogContent { - id: content - } - - footer: Rectangle { - color: control.palette.light - implicitWidth: rowLayout.implicitWidth - implicitHeight: rowLayout.implicitHeight - - RowLayout { - id: rowLayout - width: parent.width - height: parent.height - spacing: 20 - - Label { - text: qsTr("Writing System") - - Layout.leftMargin: 20 - } - ComboBox{ - id: writingSystemComboBox - - Layout.fillWidth: true - } - - DialogButtonBox { - id: buttonBox - standardButtons: control.standardButtons - palette.window: control.palette.light - spacing: 12 - horizontalPadding: 0 - verticalPadding: 20 - - Layout.rightMargin: 20 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialogContent.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialogContent.qml deleted file mode 100644 index a2b4ae0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialogContent.qml +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -GridLayout { - property alias familyListView: fontFamilyListView - property alias styleListView: fontStyleListView - property alias sizeListView: fontSizeListView - property alias sampleEdit: fontSample - property alias underline: fontUnderline - property alias strikeout: fontStrikeout - property alias familyEdit: fontFamilyEdit - property alias styleEdit: fontStyleEdit - property alias sizeEdit: fontSizeEdit - - columns: 3 - - ColumnLayout { - spacing: 0 - - Layout.preferredWidth: 50 - - Label { - text: qsTr("Family") - Layout.alignment: Qt.AlignLeft - } - TextField { - id: fontFamilyEdit - objectName: "familyEdit" - readOnly: true - Layout.fillWidth: true - focus: true - } - Frame { - Layout.fillWidth: true - Layout.fillHeight: true - background: Rectangle { - color: "white" - } - ListView { - id: fontFamilyListView - objectName: "familyListView" - implicitHeight: 200 - anchors.fill: parent - clip: true - - ScrollBar.vertical: ScrollBar { - policy: ScrollBar.AlwaysOn - } - - boundsBehavior: Flickable.StopAtBounds - - highlightMoveVelocity: -1 - highlightMoveDuration: 1 - highlightFollowsCurrentItem: true - keyNavigationEnabled: true - - delegate: ItemDelegate { - width: ListView.view.width - highlighted: ListView.isCurrentItem - onClicked: () => fontFamilyListView.currentIndex = index - text: modelData - } - } - } - } - - ColumnLayout { - spacing: 0 - - Layout.preferredWidth: 30 - - Label { - text: qsTr("Style") - Layout.alignment: Qt.AlignLeft - } - TextField { - id: fontStyleEdit - objectName: "styleEdit" - readOnly: true - Layout.fillWidth: true - } - Frame { - Layout.fillWidth: true - Layout.fillHeight: true - background: Rectangle { - color: "white" - } - ListView { - id: fontStyleListView - objectName: "styleListView" - implicitHeight: 200 - anchors.fill: parent - clip: true - - ScrollBar.vertical: ScrollBar {} - boundsBehavior: Flickable.StopAtBounds - - highlightMoveVelocity: -1 - highlightMoveDuration: 1 - highlightFollowsCurrentItem: true - keyNavigationEnabled: true - - delegate: ItemDelegate { - width: ListView.view.width - highlighted: ListView.isCurrentItem - onClicked: () => fontStyleListView.currentIndex = index - text: modelData - } - } - } - } - - ColumnLayout { - spacing: 0 - - Layout.preferredWidth: 20 - - Label { - text: qsTr("Size") - Layout.alignment: Qt.AlignLeft - } - TextField { - id: fontSizeEdit - objectName: "sizeEdit" - Layout.fillWidth: true - validator: IntValidator { - bottom: 1 - top: 512 - } - } - Frame { - Layout.fillWidth: true - Layout.fillHeight: true - - background: Rectangle { - color: "white" - } - ListView { - id: fontSizeListView - objectName: "sizeListView" - implicitHeight: 200 - anchors.fill: parent - clip: true - - ScrollBar.vertical: ScrollBar { - policy: ScrollBar.AlwaysOn - } - - boundsBehavior: Flickable.StopAtBounds - - highlightMoveVelocity: -1 - highlightMoveDuration: 1 - highlightFollowsCurrentItem: true - keyNavigationEnabled: true - - delegate: ItemDelegate { - width: ListView.view.width - highlighted: ListView.isCurrentItem - onClicked: () => fontSizeListView.currentIndex = index - text: modelData - } - } - } - } - - ColumnLayout { - Layout.preferredWidth: 80 - - GroupBox { - id: effectsGroupBox - title: qsTr("Effects") - - Layout.fillWidth: true - Layout.fillHeight: true - - label: Label { - anchors.left: effectsGroupBox.left - text: parent.title - } - - RowLayout { - anchors.fill: parent - CheckBox { - id: fontUnderline - objectName: "underlineEffect" - text: qsTr("Underline") - } - CheckBox{ - id: fontStrikeout - objectName: "strikeoutEffect" - text: qsTr("Strikeout") - } - } - } - } - - GroupBox { - id: sample - padding: label.implicitHeight - title: qsTr("Sample") - - Layout.fillWidth: true - Layout.preferredWidth: 80 - Layout.fillHeight: true - Layout.columnSpan: 2 - clip: true - - background: Rectangle { - y: sample.topPadding - sample.bottomPadding - width: sample.width - sample.leftPadding + sample.rightPadding - height: sample.height - sample.topPadding + sample.bottomPadding - radius: 3 - } - - label: Label { - anchors.left: sample.left - text: sample.title - } - - TextEdit { - id: fontSample - objectName: "sampleEdit" - anchors.centerIn: parent - readOnly: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/HueGradient.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/HueGradient.qml deleted file mode 100644 index a32a336..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/HueGradient.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick - -Gradient { - GradientStop { - position: 0 - color: "#ff0000" - } - GradientStop { - position: 0.166666 - color: "#ffff00" - } - GradientStop { - position: 0.333333 - color: "#00ff00" - } - GradientStop { - position: 0.5 - color: "#00ffff" - } - GradientStop { - position: 0.666666 - color: "#0000ff" - } - GradientStop { - position: 0.833333 - color: "#ff00ff" - } - GradientStop { - position: 1 - color: "#ff0000" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml deleted file mode 100644 index 562e931..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl -import QtQuick.Layouts - -MessageDialogImpl { - id: control - - implicitWidth: Math.max(control.implicitBackgroundWidth + control.leftInset + control.rightInset, - control.implicitHeaderWidth, - rowLayout.implicitWidth) - implicitHeight: Math.max(control.implicitBackgroundHeight + control.topInset + control.bottomInset, - control.contentHeight + control.topPadding + control.bottomPadding - + (control.implicitHeaderHeight > 0 ? control.implicitHeaderHeight + control.spacing : 0) - + (control.implicitFooterHeight > 0 ? control.implicitFooterHeight + control.spacing : 0)) - leftPadding: 20 - rightPadding: 20 - - // Ensure that the background's border is visible. - leftInset: -1 - rightInset: -1 - topInset: -1 - bottomInset: -1 - - spacing: 16 - - MessageDialogImpl.buttonBox: buttonBox - MessageDialogImpl.detailedTextButton: detailedTextButton - - background: Rectangle { - implicitWidth: 320 - implicitHeight: 160 - color: control.palette.window - border.color: control.palette.dark - } - - header: Pane { - palette.window: control.palette.light - padding: 20 - - contentItem: Label { - width: parent.width - text: control.title - visible: control.title.length > 0 - horizontalAlignment: Label.AlignHCenter - elide: Label.ElideRight - font.bold: true - } - } - - contentItem: Column { - padding: 10 - spacing: 16 - - Label { - id: textLabel - objectName: "textLabel" - text: control.text - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - - } - - Label { - id: informativeTextLabel - objectName: "informativeTextLabel" - text: control.informativeText - visible: text.length > 0 - wrapMode: Text.Wrap - width: parent.width - parent.leftPadding - parent.rightPadding - } - } - - footer: ColumnLayout { - id: columnLayout - - RowLayout { - id: rowLayout - spacing: 12 - - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Layout.bottomMargin: 20 - - Button { - id: detailedTextButton - objectName: "detailedTextButton" - text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...") - padding: 0 - } - - DialogButtonBox { - id: buttonBox - objectName: "buttonBox" - spacing: 12 - padding: 0 - - Layout.fillWidth: true - } - } - - TextArea { - id: detailedTextArea - objectName: "detailedText" - text: control.detailedText - visible: control.showDetailedText - wrapMode: TextEdit.WordWrap - readOnly: true - - Layout.fillWidth: true - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Layout.bottomMargin: 20 - - background: Rectangle { - color: Qt.rgba(1,1,1,1) - radius: 3 - border.color: Qt.darker(control.palette.light) - border.width: 1 - } - } - } - - Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/PickerHandle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/PickerHandle.qml deleted file mode 100644 index cdea430..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/PickerHandle.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T - -Rectangle { - id: root - implicitWidth: 16 - implicitHeight: 16 - radius: 8 - color: "transparent" - border.color: picker.visualFocus ? "#0066ff" : (picker.pressed ? "#36383a" : "#454647") - border.width: 1 - - required property T.Control picker - - property alias handleColor: circle.color - - Rectangle { - id: circle - x: 1 - y: 1 - width: 14 - height: 14 - radius: 7 - color: "transparent" - border.color: root.picker.visualFocus ? "#0066ff" : (root.picker.pressed ? "#86888a" : "#959697") - border.width: 1 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/SaturationLightnessPicker.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/SaturationLightnessPicker.qml deleted file mode 100644 index 6f4316a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/SaturationLightnessPicker.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Dialogs -import QtQuick.Dialogs.quickimpl - -SaturationLightnessPickerImpl { - id: control - - implicitWidth: Math.max(background ? background.implicitWidth : 0, contentItem.implicitWidth) - implicitHeight: Math.max(background ? background.implicitHeight : 0, contentItem.implicitHeight) - - background: Rectangle { - anchors.fill: parent - color: control.visualFocus ? (control.pressed ? "#cce0ff" : "#f0f6ff") : (control.pressed ? "#d6d6d6" : "#f6f6f6") - border.color: "#353637" - } - - contentItem: ShaderEffect { - scale: contentItem.width / width - layer.enabled: true - layer.smooth: true - anchors.fill: parent - - property alias hue: control.hue - - fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/shaders/SaturationLightness.frag.qsb" - } - - handle: PickerHandle { - x: control.leftPadding + control.lightness * control.availableWidth - width / 2 - y: control.topPadding + (1.0 - control.saturation) * control.availableHeight - height / 2 - picker: control - handleColor: control.color - z: 1 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qmldir deleted file mode 100644 index 85a331e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qmldir +++ /dev/null @@ -1,57 +0,0 @@ -module QtQuick.Dialogs.quickimpl -linktarget Qt6::qtquickdialogs2quickimplplugin -optional plugin qtquickdialogs2quickimplplugin -classname QtQuickDialogs2QuickImplPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -depends QtQuick.Templates auto -depends QtQuick.Layouts auto -prefer :/qt-project.org/imports/QtQuick/Dialogs/quickimpl/ -ColorDialog 6.0 qml/ColorDialog.qml -ColorInputs 6.0 qml/ColorInputs.qml -FileDialog 6.0 qml/FileDialog.qml -FileDialogDelegate 6.0 qml/FileDialogDelegate.qml -FileDialogDelegateLabel 6.0 qml/FileDialogDelegateLabel.qml -FolderBreadcrumbBar 6.0 qml/FolderBreadcrumbBar.qml -FolderDialog 6.0 qml/FolderDialog.qml -FolderDialogDelegate 6.0 qml/FolderDialogDelegate.qml -FolderDialogDelegateLabel 6.0 qml/FolderDialogDelegateLabel.qml -FontDialog 6.0 qml/FontDialog.qml -FontDialogContent 6.0 qml/FontDialogContent.qml -HueGradient 6.0 qml/HueGradient.qml -MessageDialog 6.0 qml/MessageDialog.qml -PickerHandle 6.0 qml/PickerHandle.qml -SaturationLightnessPicker 6.0 qml/SaturationLightnessPicker.qml -ColorDialog 6.0 qml/+Fusion/ColorDialog.qml -FileDialog 6.0 qml/+Fusion/FileDialog.qml -FileDialogDelegate 6.0 qml/+Fusion/FileDialogDelegate.qml -FolderBreadcrumbBar 6.0 qml/+Fusion/FolderBreadcrumbBar.qml -FolderDialog 6.0 qml/+Fusion/FolderDialog.qml -FolderDialogDelegate 6.0 qml/+Fusion/FolderDialogDelegate.qml -FontDialog 6.0 qml/+Fusion/FontDialog.qml -MessageDialog 6.0 qml/+Fusion/MessageDialog.qml -ColorDialog 6.0 qml/+Imagine/ColorDialog.qml -FileDialog 6.0 qml/+Imagine/FileDialog.qml -FileDialogDelegate 6.0 qml/+Imagine/FileDialogDelegate.qml -FolderBreadcrumbBar 6.0 qml/+Imagine/FolderBreadcrumbBar.qml -FolderDialog 6.0 qml/+Imagine/FolderDialog.qml -FolderDialogDelegate 6.0 qml/+Imagine/FolderDialogDelegate.qml -FontDialog 6.0 qml/+Imagine/FontDialog.qml -MessageDialog 6.0 qml/+Imagine/MessageDialog.qml -ColorDialog 6.0 qml/+Material/ColorDialog.qml -FileDialog 6.0 qml/+Material/FileDialog.qml -FileDialogDelegate 6.0 qml/+Material/FileDialogDelegate.qml -FolderBreadcrumbBar 6.0 qml/+Material/FolderBreadcrumbBar.qml -FolderDialog 6.0 qml/+Material/FolderDialog.qml -FolderDialogDelegate 6.0 qml/+Material/FolderDialogDelegate.qml -FontDialog 6.0 qml/+Material/FontDialog.qml -MessageDialog 6.0 qml/+Material/MessageDialog.qml -ColorDialog 6.0 qml/+Universal/ColorDialog.qml -FileDialog 6.0 qml/+Universal/FileDialog.qml -FileDialogDelegate 6.0 qml/+Universal/FileDialogDelegate.qml -FolderBreadcrumbBar 6.0 qml/+Universal/FolderBreadcrumbBar.qml -FolderDialog 6.0 qml/+Universal/FolderDialog.qml -FolderDialogDelegate 6.0 qml/+Universal/FolderDialogDelegate.qml -FontDialog 6.0 qml/+Universal/FontDialog.qml -MessageDialog 6.0 qml/+Universal/MessageDialog.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/libeffectsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/libeffectsplugin.so deleted file mode 100755 index 8568a9e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/libeffectsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/plugins.qmltypes deleted file mode 100644 index 86b5de7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/plugins.qmltypes +++ /dev/null @@ -1,296 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickmultieffect_p.h" - name: "QQuickMultiEffect" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Effects/MultiEffect 6.5", - "QtQuick.Effects/MultiEffect 6.7" - ] - exportMetaObjectRevisions: [1541, 1543] - Property { - name: "source" - type: "QQuickItem" - isPointer: true - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "autoPaddingEnabled" - type: "bool" - read: "autoPaddingEnabled" - write: "setAutoPaddingEnabled" - notify: "autoPaddingEnabledChanged" - index: 1 - } - Property { - name: "paddingRect" - type: "QRectF" - read: "paddingRect" - write: "setPaddingRect" - notify: "paddingRectChanged" - index: 2 - } - Property { - name: "brightness" - type: "double" - read: "brightness" - write: "setBrightness" - notify: "brightnessChanged" - index: 3 - } - Property { - name: "contrast" - type: "double" - read: "contrast" - write: "setContrast" - notify: "contrastChanged" - index: 4 - } - Property { - name: "saturation" - type: "double" - read: "saturation" - write: "setSaturation" - notify: "saturationChanged" - index: 5 - } - Property { - name: "colorization" - type: "double" - read: "colorization" - write: "setColorization" - notify: "colorizationChanged" - index: 6 - } - Property { - name: "colorizationColor" - type: "QColor" - read: "colorizationColor" - write: "setColorizationColor" - notify: "colorizationColorChanged" - index: 7 - } - Property { - name: "blurEnabled" - type: "bool" - read: "blurEnabled" - write: "setBlurEnabled" - notify: "blurEnabledChanged" - index: 8 - } - Property { - name: "blur" - type: "double" - read: "blur" - write: "setBlur" - notify: "blurChanged" - index: 9 - } - Property { - name: "blurMax" - type: "int" - read: "blurMax" - write: "setBlurMax" - notify: "blurMaxChanged" - index: 10 - } - Property { - name: "blurMultiplier" - type: "double" - read: "blurMultiplier" - write: "setBlurMultiplier" - notify: "blurMultiplierChanged" - index: 11 - } - Property { - name: "shadowEnabled" - type: "bool" - read: "shadowEnabled" - write: "setShadowEnabled" - notify: "shadowEnabledChanged" - index: 12 - } - Property { - name: "shadowOpacity" - type: "double" - read: "shadowOpacity" - write: "setShadowOpacity" - notify: "shadowOpacityChanged" - index: 13 - } - Property { - name: "shadowBlur" - type: "double" - read: "shadowBlur" - write: "setShadowBlur" - notify: "shadowBlurChanged" - index: 14 - } - Property { - name: "shadowHorizontalOffset" - type: "double" - read: "shadowHorizontalOffset" - write: "setShadowHorizontalOffset" - notify: "shadowHorizontalOffsetChanged" - index: 15 - } - Property { - name: "shadowVerticalOffset" - type: "double" - read: "shadowVerticalOffset" - write: "setShadowVerticalOffset" - notify: "shadowVerticalOffsetChanged" - index: 16 - } - Property { - name: "shadowColor" - type: "QColor" - read: "shadowColor" - write: "setShadowColor" - notify: "shadowColorChanged" - index: 17 - } - Property { - name: "shadowScale" - type: "double" - read: "shadowScale" - write: "setShadowScale" - notify: "shadowScaleChanged" - index: 18 - } - Property { - name: "maskEnabled" - type: "bool" - read: "maskEnabled" - write: "setMaskEnabled" - notify: "maskEnabledChanged" - index: 19 - } - Property { - name: "maskSource" - type: "QQuickItem" - isPointer: true - read: "maskSource" - write: "setMaskSource" - notify: "maskSourceChanged" - index: 20 - } - Property { - name: "maskThresholdMin" - type: "double" - read: "maskThresholdMin" - write: "setMaskThresholdMin" - notify: "maskThresholdMinChanged" - index: 21 - } - Property { - name: "maskSpreadAtMin" - type: "double" - read: "maskSpreadAtMin" - write: "setMaskSpreadAtMin" - notify: "maskSpreadAtMinChanged" - index: 22 - } - Property { - name: "maskThresholdMax" - type: "double" - read: "maskThresholdMax" - write: "setMaskThresholdMax" - notify: "maskThresholdMaxChanged" - index: 23 - } - Property { - name: "maskSpreadAtMax" - type: "double" - read: "maskSpreadAtMax" - write: "setMaskSpreadAtMax" - notify: "maskSpreadAtMaxChanged" - index: 24 - } - Property { - name: "maskInverted" - type: "bool" - read: "maskInverted" - write: "setMaskInverted" - notify: "maskInvertedChanged" - index: 25 - } - Property { - name: "itemRect" - type: "QRectF" - read: "itemRect" - notify: "itemRectChanged" - index: 26 - isReadonly: true - } - Property { - name: "fragmentShader" - type: "QString" - read: "fragmentShader" - notify: "fragmentShaderChanged" - index: 27 - isReadonly: true - } - Property { - name: "vertexShader" - type: "QString" - read: "vertexShader" - notify: "vertexShaderChanged" - index: 28 - isReadonly: true - } - Property { - name: "hasProxySource" - type: "bool" - read: "hasProxySource" - notify: "hasProxySourceChanged" - index: 29 - isReadonly: true - } - Signal { name: "shaderChanged" } - Signal { name: "itemSizeChanged" } - Signal { name: "sourceChanged" } - Signal { name: "autoPaddingEnabledChanged" } - Signal { name: "paddingRectChanged" } - Signal { name: "brightnessChanged" } - Signal { name: "contrastChanged" } - Signal { name: "saturationChanged" } - Signal { name: "colorizationChanged" } - Signal { name: "colorizationColorChanged" } - Signal { name: "blurEnabledChanged" } - Signal { name: "blurChanged" } - Signal { name: "blurMaxChanged" } - Signal { name: "blurMultiplierChanged" } - Signal { name: "shadowEnabledChanged" } - Signal { name: "shadowOpacityChanged" } - Signal { name: "shadowBlurChanged" } - Signal { name: "shadowHorizontalOffsetChanged" } - Signal { name: "shadowVerticalOffsetChanged" } - Signal { name: "shadowColorChanged" } - Signal { name: "shadowScaleChanged" } - Signal { name: "maskEnabledChanged" } - Signal { name: "maskSourceChanged" } - Signal { name: "maskThresholdMinChanged" } - Signal { name: "maskSpreadAtMinChanged" } - Signal { name: "maskThresholdMaxChanged" } - Signal { name: "maskSpreadAtMaxChanged" } - Signal { name: "maskInvertedChanged" } - Signal { name: "itemRectChanged" } - Signal { name: "fragmentShaderChanged" } - Signal { name: "vertexShaderChanged" } - Signal { name: "hasProxySourceChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/qmldir deleted file mode 100644 index 4fbc513..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Effects/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Effects -linktarget Qt6::effectsplugin -optional plugin effectsplugin -classname QtQuickEffectsPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Effects/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/libqquicklayoutsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/libqquicklayoutsplugin.so deleted file mode 100755 index 2650169..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/libqquicklayoutsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/plugins.qmltypes deleted file mode 100644 index fb098f6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/plugins.qmltypes +++ /dev/null @@ -1,644 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquicklinearlayout_p.h" - name: "QQuickColumnLayout" - accessSemantics: "reference" - prototype: "QQuickLinearLayout" - exports: [ - "QtQuick.Layouts/ColumnLayout 1.0", - "QtQuick.Layouts/ColumnLayout 1.1", - "QtQuick.Layouts/ColumnLayout 2.0", - "QtQuick.Layouts/ColumnLayout 2.1", - "QtQuick.Layouts/ColumnLayout 2.4", - "QtQuick.Layouts/ColumnLayout 2.7", - "QtQuick.Layouts/ColumnLayout 2.11", - "QtQuick.Layouts/ColumnLayout 6.0", - "QtQuick.Layouts/ColumnLayout 6.3", - "QtQuick.Layouts/ColumnLayout 6.6", - "QtQuick.Layouts/ColumnLayout 6.7" - ] - exportMetaObjectRevisions: [ - 256, - 257, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - } - Component { - file: "private/qquicklinearlayout_p.h" - name: "QQuickGridLayout" - accessSemantics: "reference" - prototype: "QQuickGridLayoutBase" - exports: [ - "QtQuick.Layouts/GridLayout 1.0", - "QtQuick.Layouts/GridLayout 1.1", - "QtQuick.Layouts/GridLayout 2.0", - "QtQuick.Layouts/GridLayout 2.1", - "QtQuick.Layouts/GridLayout 2.4", - "QtQuick.Layouts/GridLayout 2.7", - "QtQuick.Layouts/GridLayout 2.11", - "QtQuick.Layouts/GridLayout 6.0", - "QtQuick.Layouts/GridLayout 6.3", - "QtQuick.Layouts/GridLayout 6.6", - "QtQuick.Layouts/GridLayout 6.7" - ] - exportMetaObjectRevisions: [ - 256, - 257, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - Enum { - name: "Flow" - values: ["LeftToRight", "TopToBottom"] - } - Property { - name: "columnSpacing" - type: "double" - read: "columnSpacing" - write: "setColumnSpacing" - notify: "columnSpacingChanged" - index: 0 - } - Property { - name: "rowSpacing" - type: "double" - read: "rowSpacing" - write: "setRowSpacing" - notify: "rowSpacingChanged" - index: 1 - } - Property { - name: "columns" - type: "int" - read: "columns" - write: "setColumns" - notify: "columnsChanged" - index: 2 - } - Property { - name: "rows" - type: "int" - read: "rows" - write: "setRows" - notify: "rowsChanged" - index: 3 - } - Property { - name: "flow" - type: "Flow" - read: "flow" - write: "setFlow" - notify: "flowChanged" - index: 4 - } - Property { - name: "uniformCellWidths" - revision: 1542 - type: "bool" - read: "uniformCellWidths" - write: "setUniformCellWidths" - notify: "uniformCellWidthsChanged" - index: 5 - isFinal: true - } - Property { - name: "uniformCellHeights" - revision: 1542 - type: "bool" - read: "uniformCellHeights" - write: "setUniformCellHeights" - notify: "uniformCellHeightsChanged" - index: 6 - isFinal: true - } - Signal { name: "columnSpacingChanged" } - Signal { name: "rowSpacingChanged" } - Signal { name: "columnsChanged" } - Signal { name: "rowsChanged" } - Signal { name: "flowChanged" } - Signal { name: "uniformCellWidthsChanged"; revision: 1542 } - Signal { name: "uniformCellHeightsChanged"; revision: 1542 } - } - Component { - file: "private/qquicklinearlayout_p.h" - name: "QQuickGridLayoutBase" - accessSemantics: "reference" - prototype: "QQuickLayout" - Property { - name: "layoutDirection" - revision: 257 - type: "Qt::LayoutDirection" - read: "layoutDirection" - write: "setLayoutDirection" - notify: "layoutDirectionChanged" - index: 0 - } - Signal { name: "layoutDirectionChanged"; revision: 257 } - } - Component { - file: "private/qquicklayout_p.h" - name: "QQuickLayout" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Layouts/Layout 1.0", - "QtQuick.Layouts/Layout 2.0", - "QtQuick.Layouts/Layout 2.1", - "QtQuick.Layouts/Layout 2.4", - "QtQuick.Layouts/Layout 2.7", - "QtQuick.Layouts/Layout 2.11", - "QtQuick.Layouts/Layout 6.0", - "QtQuick.Layouts/Layout 6.3", - "QtQuick.Layouts/Layout 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [ - 256, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickLayoutAttached" - Method { name: "invalidateSenderItem" } - Method { name: "_q_dumpLayoutTree" } - } - Component { - file: "private/qquicklayout_p.h" - name: "QQuickLayoutAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "minimumWidth" - type: "double" - read: "minimumWidth" - write: "setMinimumWidth" - notify: "minimumWidthChanged" - index: 0 - isFinal: true - } - Property { - name: "minimumHeight" - type: "double" - read: "minimumHeight" - write: "setMinimumHeight" - notify: "minimumHeightChanged" - index: 1 - isFinal: true - } - Property { - name: "preferredWidth" - type: "double" - read: "preferredWidth" - write: "setPreferredWidth" - notify: "preferredWidthChanged" - index: 2 - isFinal: true - } - Property { - name: "preferredHeight" - type: "double" - read: "preferredHeight" - write: "setPreferredHeight" - notify: "preferredHeightChanged" - index: 3 - isFinal: true - } - Property { - name: "maximumWidth" - type: "double" - read: "maximumWidth" - write: "setMaximumWidth" - notify: "maximumWidthChanged" - index: 4 - isFinal: true - } - Property { - name: "maximumHeight" - type: "double" - read: "maximumHeight" - write: "setMaximumHeight" - notify: "maximumHeightChanged" - index: 5 - isFinal: true - } - Property { - name: "fillHeight" - type: "bool" - read: "fillHeight" - write: "setFillHeight" - notify: "fillHeightChanged" - index: 6 - isFinal: true - } - Property { - name: "fillWidth" - type: "bool" - read: "fillWidth" - write: "setFillWidth" - notify: "fillWidthChanged" - index: 7 - isFinal: true - } - Property { - name: "row" - type: "int" - read: "row" - write: "setRow" - notify: "rowChanged" - index: 8 - isFinal: true - } - Property { - name: "column" - type: "int" - read: "column" - write: "setColumn" - notify: "columnChanged" - index: 9 - isFinal: true - } - Property { - name: "rowSpan" - type: "int" - read: "rowSpan" - write: "setRowSpan" - notify: "rowSpanChanged" - index: 10 - isFinal: true - } - Property { - name: "columnSpan" - type: "int" - read: "columnSpan" - write: "setColumnSpan" - notify: "columnSpanChanged" - index: 11 - isFinal: true - } - Property { - name: "alignment" - type: "Qt::Alignment" - read: "alignment" - write: "setAlignment" - notify: "alignmentChanged" - index: 12 - isFinal: true - } - Property { - name: "horizontalStretchFactor" - type: "int" - read: "horizontalStretchFactor" - write: "setHorizontalStretchFactor" - notify: "horizontalStretchFactorChanged" - index: 13 - isFinal: true - } - Property { - name: "verticalStretchFactor" - type: "int" - read: "verticalStretchFactor" - write: "setVerticalStretchFactor" - notify: "verticalStretchFactorChanged" - index: 14 - isFinal: true - } - Property { - name: "margins" - type: "double" - read: "margins" - write: "setMargins" - notify: "marginsChanged" - index: 15 - isFinal: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - reset: "resetLeftMargin" - notify: "leftMarginChanged" - index: 16 - isFinal: true - } - Property { - name: "topMargin" - type: "double" - read: "topMargin" - write: "setTopMargin" - reset: "resetTopMargin" - notify: "topMarginChanged" - index: 17 - isFinal: true - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - reset: "resetRightMargin" - notify: "rightMarginChanged" - index: 18 - isFinal: true - } - Property { - name: "bottomMargin" - type: "double" - read: "bottomMargin" - write: "setBottomMargin" - reset: "resetBottomMargin" - notify: "bottomMarginChanged" - index: 19 - isFinal: true - } - Signal { name: "minimumWidthChanged" } - Signal { name: "minimumHeightChanged" } - Signal { name: "preferredWidthChanged" } - Signal { name: "preferredHeightChanged" } - Signal { name: "maximumWidthChanged" } - Signal { name: "maximumHeightChanged" } - Signal { name: "fillWidthChanged" } - Signal { name: "fillHeightChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "topMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "bottomMarginChanged" } - Signal { name: "marginsChanged" } - Signal { name: "rowChanged" } - Signal { name: "columnChanged" } - Signal { name: "rowSpanChanged" } - Signal { name: "columnSpanChanged" } - Signal { name: "alignmentChanged" } - Signal { name: "horizontalStretchFactorChanged" } - Signal { name: "verticalStretchFactorChanged" } - } - Component { - file: "private/qquicklayoutitemproxy_p.h" - name: "QQuickLayoutItemProxy" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Layouts/LayoutItemProxy 6.6", - "QtQuick.Layouts/LayoutItemProxy 6.7" - ] - exportMetaObjectRevisions: [1542, 1543] - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTarget" - notify: "targetChanged" - index: 0 - } - Signal { name: "targetChanged" } - Method { name: "updatePos" } - Method { name: "targetMinimumWidthChanged" } - Method { name: "proxyMinimumWidthChanged" } - Method { name: "targetMinimumHeightChanged" } - Method { name: "proxyMinimumHeightChanged" } - Method { name: "targetPreferredWidthChanged" } - Method { name: "proxyPreferredWidthChanged" } - Method { name: "targetPreferredHeightChanged" } - Method { name: "proxyPreferredHeightChanged" } - Method { name: "targetMaximumWidthChanged" } - Method { name: "proxyMaximumWidthChanged" } - Method { name: "targetMaximumHeightChanged" } - Method { name: "proxyMaximumHeightChanged" } - Method { name: "targetFillWidthChanged" } - Method { name: "proxyFillWidthChanged" } - Method { name: "targetFillHeightChanged" } - Method { name: "proxyFillHeightChanged" } - Method { name: "targetAlignmentChanged" } - Method { name: "proxyAlignmentChanged" } - Method { name: "targetHorizontalStretchFactorChanged" } - Method { name: "proxyHorizontalStretchFactorChanged" } - Method { name: "targetVerticalStretchFactorChanged" } - Method { name: "proxyVerticalStretchFactorChanged" } - Method { name: "targetMarginsChanged" } - Method { name: "proxyMarginsChanged" } - Method { name: "targetLeftMarginChanged" } - Method { name: "proxyLeftMarginChanged" } - Method { name: "targetTopMarginChanged" } - Method { name: "proxyTopMarginChanged" } - Method { name: "targetRightMarginChanged" } - Method { name: "proxyRightMarginChanged" } - Method { name: "targetBottomMarginChanged" } - Method { name: "proxyBottomMarginChanged" } - Method { name: "effectiveTarget"; type: "QQuickItem"; isPointer: true } - } - Component { - file: "private/qquicklayoutitemproxy_p.h" - name: "QQuickLayoutItemProxyAttachedData" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "proxyHasControl" - type: "bool" - read: "proxyHasControl" - notify: "controllingProxyChanged" - index: 0 - isReadonly: true - } - Property { - name: "controllingProxy" - type: "QQuickLayoutItemProxy" - isPointer: true - read: "getControllingProxy" - notify: "controllingProxyChanged" - index: 1 - isReadonly: true - } - Property { - name: "proxies" - type: "QList" - read: "getProxies" - notify: "proxiesChanged" - index: 2 - isReadonly: true - } - Signal { name: "controlTaken" } - Signal { name: "controlReleased" } - Signal { name: "controllingProxyChanged" } - Signal { name: "proxiesChanged" } - } - Component { - file: "private/qquicklinearlayout_p.h" - name: "QQuickLinearLayout" - accessSemantics: "reference" - prototype: "QQuickGridLayoutBase" - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - notify: "spacingChanged" - index: 0 - } - Property { - name: "uniformCellSizes" - revision: 1542 - type: "bool" - read: "uniformCellSizes" - write: "setUniformCellSizes" - notify: "uniformCellSizesChanged" - index: 1 - isFinal: true - } - Signal { name: "spacingChanged" } - Signal { name: "uniformCellSizesChanged"; revision: 1542 } - } - Component { - file: "private/qquicklinearlayout_p.h" - name: "QQuickRowLayout" - accessSemantics: "reference" - prototype: "QQuickLinearLayout" - exports: [ - "QtQuick.Layouts/RowLayout 1.0", - "QtQuick.Layouts/RowLayout 1.1", - "QtQuick.Layouts/RowLayout 2.0", - "QtQuick.Layouts/RowLayout 2.1", - "QtQuick.Layouts/RowLayout 2.4", - "QtQuick.Layouts/RowLayout 2.7", - "QtQuick.Layouts/RowLayout 2.11", - "QtQuick.Layouts/RowLayout 6.0", - "QtQuick.Layouts/RowLayout 6.3", - "QtQuick.Layouts/RowLayout 6.6", - "QtQuick.Layouts/RowLayout 6.7" - ] - exportMetaObjectRevisions: [ - 256, - 257, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - } - Component { - file: "private/qquickstacklayout_p.h" - name: "QQuickStackLayout" - accessSemantics: "reference" - prototype: "QQuickLayout" - exports: [ - "QtQuick.Layouts/StackLayout 1.3", - "QtQuick.Layouts/StackLayout 2.0", - "QtQuick.Layouts/StackLayout 2.1", - "QtQuick.Layouts/StackLayout 2.4", - "QtQuick.Layouts/StackLayout 2.7", - "QtQuick.Layouts/StackLayout 2.11", - "QtQuick.Layouts/StackLayout 6.0", - "QtQuick.Layouts/StackLayout 6.3", - "QtQuick.Layouts/StackLayout 6.7" - ] - exportMetaObjectRevisions: [ - 259, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickStackLayoutAttached" - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 1 - } - Signal { name: "currentIndexChanged" } - Signal { name: "countChanged" } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquickstacklayout_p.h" - name: "QQuickStackLayoutAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "isCurrentItem" - type: "bool" - read: "isCurrentItem" - notify: "isCurrentItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "layout" - type: "QQuickStackLayout" - isPointer: true - read: "layout" - notify: "layoutChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "isCurrentItemChanged" } - Signal { name: "layoutChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/qmldir deleted file mode 100644 index 9fa0f0d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Layouts/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Layouts -linktarget Qt6::qquicklayoutsplugin -optional plugin qquicklayoutsplugin -classname QtQuickLayoutsPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Layouts/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so deleted file mode 100755 index ce8bfcc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/plugins.qmltypes deleted file mode 100644 index 93ba6b4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/plugins.qmltypes +++ /dev/null @@ -1,23 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qqmllocalstorage_p.h" - name: "QQmlLocalStorage" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.LocalStorage/LocalStorage 2.0", - "QtQuick.LocalStorage/LocalStorage 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [512, 1536] - Method { name: "openDatabaseSync"; isJavaScriptFunction: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/qmldir deleted file mode 100644 index de9d480..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/LocalStorage/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtQuick.LocalStorage -linktarget Qt6::qmllocalstorageplugin -optional plugin qmllocalstorageplugin -classname QQmlLocalStoragePlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtQuick/LocalStorage/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultButton.qml deleted file mode 100644 index ee20acc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultButton.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Button { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - background: NativeStyle.Button { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - - readonly property bool __ignoreNotCustomizable: true - } - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultCheckBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultCheckBox.qml deleted file mode 100644 index 3a86ab4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultCheckBox.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.CheckBox { - id: control - - readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: nativeIndicator ? 0 : 6 - padding: nativeIndicator ? 0 : 6 - - indicator: NativeStyle.CheckBox { - control: control - y: control.topPadding + (control.availableHeight - height) >> 1 - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } - - contentItem: CheckLabel { - text: control.text - font: control.font - color: control.palette.windowText - - // For some reason, the other styles set padding here (in the delegate), instead of in - // the control above. And they also adjust the indicator position by setting x and y - // explicitly (instead of using insets). So we follow the same pattern to ensure that - // setting a custom contentItem delegate from the app will end up looking the same for - // all styles. But this should probably be fixed for all styles (to make them work the - // same way as e.g Buttons). - leftPadding: { - if (nativeIndicator) - indicator.contentPadding.left - else - indicator && !mirrored ? indicator.width + spacing : 0 - } - - topPadding: nativeIndicator ? indicator.contentPadding.top : 0 - rightPadding: { - if (nativeIndicator) - indicator.contentPadding.right - else - indicator && mirrored ? indicator.width + spacing : 0 - } - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultComboBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultComboBox.qml deleted file mode 100644 index 0876c52..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultComboBox.qml +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ComboBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - contentItem: T.TextField { - implicitWidth: contentWidth - implicitHeight: contentHeight - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - readonly property bool __ignoreNotCustomizable: true - } - - background: NativeStyle.ComboBox { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - - readonly property bool __ignoreNotCustomizable: true - } - - delegate: ItemDelegate { - required property var model - required property int index - - width: ListView.view.width - text: model[control.textRole] - palette.text: control.palette.text - palette.highlightedText: control.palette.highlightedText - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - popup: T.Popup { - readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null - x: layoutMargins ? layoutMargins.left : 0 - y: control.height - (layoutMargins ? layoutMargins.bottom : 0) - width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0) - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - Rectangle { - z: 10 - width: parent.width - height: parent.height - color: "transparent" - border.color: control.palette.mid - } - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.palette.window - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultDial.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultDial.qml deleted file mode 100644 index 205be44..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultDial.qml +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Dial { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 80 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - 80 /* minimum */ ) - - background: NativeStyle.Dial { - control: control - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultFrame.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultFrame.qml deleted file mode 100644 index 57c7d94..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultFrame.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Frame { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - leftPadding: __nativeBackground ? background.contentPadding.left : 12 - rightPadding: __nativeBackground ? background.contentPadding.right : 12 - topPadding: __nativeBackground ? background.contentPadding.top : 12 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 12 - - background: NativeStyle.Frame { - control: control - contentWidth: control.contentWidth - contentHeight: control.contentHeight - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultGroupBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultGroupBox.qml deleted file mode 100644 index 97f3d6f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultGroupBox.qml +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.GroupBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - label: Rectangle { - color: control.palette.window - property point labelPos : control.__nativeBackground - ? background.labelPos - : Qt.point(0,0) - readonly property bool __ignoreNotCustomizable: true - x: labelPos.x + background.x - y: labelPos.y + background.y - (__nativeBackground ? background.groupBoxPadding.top : 0) - width: children[0].implicitWidth - height: children[0].implicitHeight - Text { - width: parent.width - height: parent.height - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - } - - leftPadding: __nativeBackground ? background.contentPadding.left : 0 - rightPadding: __nativeBackground ? background.contentPadding.right : 0 - topPadding: __nativeBackground ? background.contentPadding.top : 0 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 0 - - leftInset: __nativeBackground ? background.groupBoxPadding.left : 0 - topInset: __nativeBackground ? background.groupBoxPadding.top : 0 - - background: NativeStyle.GroupBox { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegate.qml deleted file mode 100644 index 55c54db..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegate.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: NativeStyle.DefaultItemDelegateIconLabel {} - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: Qt.darker(control.highlighted - ? control.palette.highlight : control.palette.button, control.down ? 1.05 : 1) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegateIconLabel.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegateIconLabel.qml deleted file mode 100644 index 7ac31e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegateIconLabel.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick.Controls.impl -import QtQuick.Templates as T - -IconLabel { - text: control.text - font: control.font - icon: control.icon - color: control.palette.windowText - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon - ? Qt.AlignCenter : Qt.AlignLeft - leftPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - - readonly property T.ItemDelegate control: parent as T.ItemDelegate -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultProgressBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultProgressBar.qml deleted file mode 100644 index 0b318a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultProgressBar.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.NativeStyle as NativeStyle - -T.ProgressBar { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 90) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: NativeStyle.ProgressBar { - control: control - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioButton.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioButton.qml deleted file mode 100644 index 0c53416..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioButton.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.RadioButton { - id: control - - readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: nativeIndicator ? 0 : 6 - padding: nativeIndicator ? 0 : 6 - - indicator: NativeStyle.RadioButton { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } - - contentItem: CheckLabel { - text: control.text - font: control.font - color: control.palette.windowText - - // For some reason, the other styles set padding here (in the delegate), instead of in - // the control above. And they also adjust the indicator position by setting x and y - // explicitly (instead of using insets). So we follow the same pattern to ensure that - // setting a custom contentItem delegate from the app will end up looking the same for - // all styles. But this should probably be fixed for all styles (to make them work the - // same way as e.g Buttons). - leftPadding: { - if (nativeIndicator) - indicator.contentPadding.left - else - indicator && !mirrored ? indicator.width + spacing : 0 - } - - rightPadding: { - if (nativeIndicator) - indicator.contentPadding.right - else - indicator && mirrored ? indicator.width + spacing : 0 - } - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioDelegate.qml deleted file mode 100644 index 82bc0d2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioDelegate.qml +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.RadioDelegate { - id: control - - readonly property bool __nativeIndicator: indicator instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - readonly property Item __focusFrameTarget: indicator - readonly property Item __focusFrameStyleItem: indicator - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: NativeStyle.DefaultItemDelegateIconLabel { - readonly property bool __ignoreNotCustomizable: true - } - - indicator: NativeStyle.RadioDelegate { - x: control.text - ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) - : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + Math.round((control.availableHeight - height) / 2) - contentWidth: control.implicitContentWidth - contentHeight: control.implicitContentHeight - useNinePatchImage: false - control: control - - readonly property bool __ignoreNotCustomizable: true - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: Qt.darker(control.highlighted - ? control.palette.highlight : control.palette.button, control.down ? 1.05 : 1) - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultScrollBar.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultScrollBar.qml deleted file mode 100644 index 1fad8e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultScrollBar.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ScrollBar { - id: control - - readonly property bool __nativeContentItem: contentItem instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - visible: policy === T.ScrollBar.AlwaysOn || (policy === T.ScrollBar.AsNeeded && size < 1.0) - minimumSize: !__nativeContentItem ? 0.1 : orientation === Qt.Vertical ? - contentItem.minimumSize.height / height : contentItem.minimumSize.width / width - - background: NativeStyle.ScrollBar { - control: control - subControl: NativeStyle.ScrollBar.Groove - } - - contentItem: NativeStyle.ScrollBar { - control: control - subControl: NativeStyle.ScrollBar.Handle - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSlider.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSlider.qml deleted file mode 100644 index 52f123a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSlider.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding, - control.horizontal ? 90 : 0 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding, - control.vertical ? 90 : 0 /* minimum */ ) - - readonly property bool __notCustomizable: true - - background: NativeStyle.Slider { - control: control - subControl: NativeStyle.Slider.Groove - // We normally cannot use a nine patch image for the - // groove if we draw tickmarks (since then the scaling - // would scale the tickmarks too). The groove might - // also use a different background color before, and - // after, the handle. - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } - - handle: NativeStyle.Slider { - control: control - subControl: NativeStyle.Slider.Handle - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - useNinePatchImage: false - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSpinBox.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSpinBox.qml deleted file mode 100644 index beb49d9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSpinBox.qml +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.SpinBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: Math.max(implicitBackgroundWidth + spacing + up.implicitIndicatorWidth - + leftInset + rightInset, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight - + (spacing * 3)) + topInset + bottomInset - - spacing: 2 - - leftPadding: (__nativeBackground ? background.contentPadding.left: 0) - topPadding: (__nativeBackground ? background.contentPadding.top: 0) - rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + up.implicitIndicatorWidth + spacing - bottomPadding: (__nativeBackground ? background.contentPadding.bottom: 0) + spacing - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - font: font.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignLeft - verticalAlignment: Qt.AlignVCenter - - topPadding: 2 - bottomPadding: 2 - leftPadding: 10 - rightPadding: 10 - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - } - - up.indicator: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Up - x: parent.width - width - spacing - y: (parent.height / 2) - height - useNinePatchImage: false - } - - down.indicator: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Down - x: up.indicator.x - y: up.indicator.y + up.indicator.height - useNinePatchImage: false - } - - background: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Frame - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextArea.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextArea.qml deleted file mode 100644 index faab250..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextArea.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - leftPadding: 7 - rightPadding: 7 - topPadding: 3 - bottomPadding: 3 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - verticalAlignment: TextInput.AlignTop - - readonly property bool __notCustomizable: true - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - color: control.palette.light - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextField.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextField.qml deleted file mode 100644 index dadfa56..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextField.qml +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.TextField { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - readonly property bool __notCustomizable: true - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - leftPadding: __nativeBackground ? background.contentPadding.left: 7 - rightPadding: __nativeBackground ? background.contentPadding.right: 7 - topPadding: __nativeBackground ? background.contentPadding.top: 3 - bottomPadding: __nativeBackground ? background.contentPadding.bottom: 3 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: control.palette.placeholderText - verticalAlignment: TextInput.AlignTop - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: NativeStyle.TextField { - control: control - contentWidth: Math.max(control.contentWidth, placeholder.implicitWidth) - contentHeight: control.contentHeight - - readonly property bool __ignoreNotCustomizable: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTreeViewDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTreeViewDelegate.qml deleted file mode 100644 index 8913094..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTreeViewDelegate.qml +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle -import QtQuick.Controls - -T.TreeViewDelegate { - id: control - - implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin - implicitHeight: Math.max(indicator ? indicator.height : 0, implicitContentHeight) * 1.25 - - indentation: indicator ? indicator.width : 12 - leftMargin: 4 - rightMargin: 4 - spacing: 4 - - topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0 - leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth - - highlighted: control.selected || control.current - || ((control.treeView.selectionBehavior === TableView.SelectRows - || control.treeView.selectionBehavior === TableView.SelectionDisabled) - && control.row === control.treeView.currentRow) - - required property int row - required property var model - readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0) - readonly property bool __notCustomizable: true - - indicator: Item { - // Create an area that is big enough for the user to - // click on, since the image is a bit small. - readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation) - x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width - y: (control.height - height) / 2 - width: 16 - height: 16 - NativeStyle.TreeIndicator { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - control: control - useNinePatchImage: false - } - - readonly property bool __ignoreNotCustomizable: true - } - - background: Rectangle { - color: control.highlighted ? control.palette.highlight - : (control.treeView.alternatingRows && control.row % 2 !== 0 - ? control.palette.alternateBase : control.palette.base) - - readonly property bool __ignoreNotCustomizable: true - } - - contentItem: Label { - clip: false - text: control.model.display - elide: Text.ElideRight - color: control.highlighted ? control.palette.highlightedText : control.palette.buttonText - visible: !control.editing - - readonly property bool __ignoreNotCustomizable: true - } - - // The edit delegate is a separate component, and doesn't need - // to follow the same strict rules that are applied to a control. - // qmllint disable attached-property-reuse - // qmllint disable controls-attached-property-reuse - // qmllint disable controls-sanity - TableView.editDelegate: FocusScope { - width: parent.width - height: parent.height - - readonly property int __role: { - let model = control.treeView.model - let index = control.treeView.index(row, column) - let editText = model.data(index, Qt.EditRole) - return editText !== undefined ? Qt.EditRole : Qt.DisplayRole - } - - TextField { - id: textField - x: control.contentItem.x - y: (parent.height - height) / 2 - width: control.contentItem.width - text: control.treeView.model.data(control.treeView.index(row, column), __role) - focus: true - } - - TableView.onCommit: { - let index = TableView.view.index(row, column) - TableView.view.model.setData(index, textField.text, __role) - } - - Component.onCompleted: textField.selectAll() - } - // qmllint enable attached-property-reuse - // qmllint enable controls-attached-property-reuse - // qmllint enable controls-sanity -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/libqtquickcontrols2nativestyleplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/libqtquickcontrols2nativestyleplugin.so deleted file mode 100755 index 14dbb80..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/libqtquickcontrols2nativestyleplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/plugins.qmltypes deleted file mode 100644 index 7021a63..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/plugins.qmltypes +++ /dev/null @@ -1,323 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qquickstyleitem.h" - name: "QQuickStyleItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.NativeStyle/StyleItem 6.0", - "QtQuick.NativeStyle/StyleItem 6.3", - "QtQuick.NativeStyle/StyleItem 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1536, 1539, 1543] - Enum { - name: "OverrideState" - values: ["None", "AlwaysHovered", "NeverHovered", "AlwaysSunken"] - } - Property { - name: "control" - type: "QQuickItem" - isPointer: true - notify: "controlChanged" - index: 0 - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - index: 1 - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - index: 2 - } - Property { name: "useNinePatchImage"; type: "bool"; index: 3 } - Property { name: "overrideState"; type: "OverrideState"; index: 4 } - Property { - name: "contentPadding" - type: "QQuickStyleMargins" - read: "contentPadding" - notify: "contentPaddingChanged" - index: 5 - isReadonly: true - } - Property { - name: "layoutMargins" - type: "QQuickStyleMargins" - read: "layoutMargins" - notify: "layoutMarginsChanged" - index: 6 - isReadonly: true - } - Property { - name: "minimumSize" - type: "QSize" - read: "minimumSize" - notify: "minimumSizeChanged" - index: 7 - isReadonly: true - } - Property { name: "transitionDuration"; type: "int"; index: 8; isConstant: true } - Signal { name: "controlChanged" } - Signal { name: "contentPaddingChanged" } - Signal { name: "layoutMarginsChanged" } - Signal { name: "fontChanged" } - Signal { name: "minimumSizeChanged" } - Method { - name: "styleFont" - type: "QFont" - Parameter { name: "control"; type: "QQuickItem"; isPointer: true } - } - } - Component { - file: "qquickstyleitembutton.h" - name: "QQuickStyleItemButton" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/Button 6.0", - "QtQuick.NativeStyle/Button 6.3", - "QtQuick.NativeStyle/Button 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemcheckbox.h" - name: "QQuickStyleItemCheckBox" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/CheckBox 6.0", - "QtQuick.NativeStyle/CheckBox 6.3", - "QtQuick.NativeStyle/CheckBox 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemcheckdelegate.h" - name: "QQuickStyleItemCheckDelegate" - accessSemantics: "reference" - prototype: "QQuickStyleItemCheckBox" - exports: [ - "QtQuick.NativeStyle/CheckDelegate 6.0", - "QtQuick.NativeStyle/CheckDelegate 6.3", - "QtQuick.NativeStyle/CheckDelegate 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemcombobox.h" - name: "QQuickStyleItemComboBox" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/ComboBox 6.0", - "QtQuick.NativeStyle/ComboBox 6.3", - "QtQuick.NativeStyle/ComboBox 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemdelaybutton.h" - name: "QQuickStyleItemDelayButton" - accessSemantics: "reference" - prototype: "QQuickStyleItemButton" - exports: [ - "QtQuick.NativeStyle/DelayButton 6.0", - "QtQuick.NativeStyle/DelayButton 6.3", - "QtQuick.NativeStyle/DelayButton 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemdial.h" - name: "QQuickStyleItemDial" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/Dial 6.0", - "QtQuick.NativeStyle/Dial 6.3", - "QtQuick.NativeStyle/Dial 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemframe.h" - name: "QQuickStyleItemFrame" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/Frame 6.0", - "QtQuick.NativeStyle/Frame 6.3", - "QtQuick.NativeStyle/Frame 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemgroupbox.h" - name: "QQuickStyleItemGroupBox" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/GroupBox 6.0", - "QtQuick.NativeStyle/GroupBox 6.3", - "QtQuick.NativeStyle/GroupBox 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Property { - name: "groupBoxPadding" - type: "QQuickStyleMargins" - read: "groupBoxPadding" - notify: "groupBoxPaddingChanged" - index: 0 - isReadonly: true - } - Property { - name: "labelPos" - type: "QPointF" - read: "labelPos" - notify: "labelPosChanged" - index: 1 - isReadonly: true - } - Signal { name: "groupBoxPaddingChanged" } - Signal { name: "labelPosChanged" } - } - Component { - file: "qquickstyleitemprogressbar.h" - name: "QQuickStyleItemProgressBar" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/ProgressBar 6.0", - "QtQuick.NativeStyle/ProgressBar 6.3", - "QtQuick.NativeStyle/ProgressBar 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemradiobutton.h" - name: "QQuickStyleItemRadioButton" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/RadioButton 6.0", - "QtQuick.NativeStyle/RadioButton 6.3", - "QtQuick.NativeStyle/RadioButton 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemradiodelegate.h" - name: "QQuickStyleItemRadioDelegate" - accessSemantics: "reference" - prototype: "QQuickStyleItemRadioButton" - exports: [ - "QtQuick.NativeStyle/RadioDelegate 6.0", - "QtQuick.NativeStyle/RadioDelegate 6.3", - "QtQuick.NativeStyle/RadioDelegate 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemscrollbar.h" - name: "QQuickStyleItemScrollBar" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/ScrollBar 6.0", - "QtQuick.NativeStyle/ScrollBar 6.3", - "QtQuick.NativeStyle/ScrollBar 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Enum { - name: "SubControl" - values: ["Groove", "Handle", "AddLine", "SubLine"] - } - Property { name: "subControl"; type: "SubControl"; index: 0 } - } - Component { - file: "qquickstyleitemslider.h" - name: "QQuickStyleItemSlider" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/Slider 6.0", - "QtQuick.NativeStyle/Slider 6.3", - "QtQuick.NativeStyle/Slider 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Enum { - name: "SubControl" - values: ["Groove", "Handle"] - } - Property { name: "subControl"; type: "SubControl"; index: 0 } - } - Component { - file: "qquickstyleitemspinbox.h" - name: "QQuickStyleItemSpinBox" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/SpinBox 6.0", - "QtQuick.NativeStyle/SpinBox 6.3", - "QtQuick.NativeStyle/SpinBox 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - Enum { - name: "SubControl" - values: ["Frame", "Up", "Down"] - } - Property { name: "subControl"; type: "SubControl"; index: 0 } - } - Component { - file: "qquickstyleitemtextfield.h" - name: "QQuickStyleItemTextField" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/TextField 6.0", - "QtQuick.NativeStyle/TextField 6.3", - "QtQuick.NativeStyle/TextField 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitemtreeindicator.h" - name: "QQuickStyleItemTreeIndicator" - accessSemantics: "reference" - prototype: "QQuickStyleItem" - exports: [ - "QtQuick.NativeStyle/TreeIndicator 6.0", - "QtQuick.NativeStyle/TreeIndicator 6.3", - "QtQuick.NativeStyle/TreeIndicator 6.7" - ] - exportMetaObjectRevisions: [1536, 1539, 1543] - } - Component { - file: "qquickstyleitem.h" - name: "QQuickStyleMargins" - accessSemantics: "value" - exports: ["QtQuick.NativeStyle/stylemargins 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { name: "left"; type: "int"; read: "left"; index: 0; isReadonly: true } - Property { name: "top"; type: "int"; read: "top"; index: 1; isReadonly: true } - Property { name: "right"; type: "int"; read: "right"; index: 2; isReadonly: true } - Property { name: "bottom"; type: "int"; read: "bottom"; index: 3; isReadonly: true } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/qmldir deleted file mode 100644 index 76eaed7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/NativeStyle/qmldir +++ /dev/null @@ -1,44 +0,0 @@ -module QtQuick.NativeStyle -linktarget Qt6::qtquickcontrols2nativestyleplugin -plugin qtquickcontrols2nativestyleplugin -classname QtQuickControls2NativeStylePlugin -typeinfo plugins.qmltypes -depends QtQuick.Controls auto -depends QtQuick.Layouts auto -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/NativeStyle/ -DefaultButton 6.0 controls/DefaultButton.qml -DefaultButton 2.0 controls/DefaultButton.qml -DefaultCheckBox 6.0 controls/DefaultCheckBox.qml -DefaultCheckBox 2.0 controls/DefaultCheckBox.qml -DefaultComboBox 6.0 controls/DefaultComboBox.qml -DefaultComboBox 2.0 controls/DefaultComboBox.qml -DefaultDial 6.0 controls/DefaultDial.qml -DefaultDial 2.0 controls/DefaultDial.qml -DefaultFrame 6.0 controls/DefaultFrame.qml -DefaultFrame 2.0 controls/DefaultFrame.qml -DefaultGroupBox 6.0 controls/DefaultGroupBox.qml -DefaultGroupBox 2.0 controls/DefaultGroupBox.qml -DefaultItemDelegate 6.0 controls/DefaultItemDelegate.qml -DefaultItemDelegate 2.0 controls/DefaultItemDelegate.qml -DefaultItemDelegateIconLabel 6.0 controls/DefaultItemDelegateIconLabel.qml -DefaultItemDelegateIconLabel 2.0 controls/DefaultItemDelegateIconLabel.qml -DefaultProgressBar 6.0 controls/DefaultProgressBar.qml -DefaultProgressBar 2.0 controls/DefaultProgressBar.qml -DefaultRadioButton 6.0 controls/DefaultRadioButton.qml -DefaultRadioButton 2.0 controls/DefaultRadioButton.qml -DefaultRadioDelegate 6.0 controls/DefaultRadioDelegate.qml -DefaultRadioDelegate 2.0 controls/DefaultRadioDelegate.qml -DefaultScrollBar 6.0 controls/DefaultScrollBar.qml -DefaultScrollBar 2.0 controls/DefaultScrollBar.qml -DefaultSlider 6.0 controls/DefaultSlider.qml -DefaultSlider 2.0 controls/DefaultSlider.qml -DefaultSpinBox 6.0 controls/DefaultSpinBox.qml -DefaultSpinBox 2.0 controls/DefaultSpinBox.qml -DefaultTextArea 6.0 controls/DefaultTextArea.qml -DefaultTextArea 2.0 controls/DefaultTextArea.qml -DefaultTextField 6.0 controls/DefaultTextField.qml -DefaultTextField 2.0 controls/DefaultTextField.qml -DefaultTreeViewDelegate 6.0 controls/DefaultTreeViewDelegate.qml -DefaultTreeViewDelegate 2.0 controls/DefaultTreeViewDelegate.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/libparticlesplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/libparticlesplugin.so deleted file mode 100755 index 37f454e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/libparticlesplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/plugins.qmltypes deleted file mode 100644 index 8ccc073..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/plugins.qmltypes +++ /dev/null @@ -1,2464 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickage_p.h" - name: "QQuickAgeAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Age 2.0", - "QtQuick.Particles/Age 2.1", - "QtQuick.Particles/Age 2.4", - "QtQuick.Particles/Age 2.7", - "QtQuick.Particles/Age 2.11", - "QtQuick.Particles/Age 6.0", - "QtQuick.Particles/Age 6.3", - "QtQuick.Particles/Age 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "lifeLeft" - type: "int" - read: "lifeLeft" - write: "setLifeLeft" - notify: "lifeLeftChanged" - index: 0 - } - Property { - name: "advancePosition" - type: "bool" - read: "advancePosition" - write: "setAdvancePosition" - notify: "advancePositionChanged" - index: 1 - } - Signal { - name: "lifeLeftChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "advancePositionChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setLifeLeft" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setAdvancePosition" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickangledirection_p.h" - name: "QQuickAngleDirection" - accessSemantics: "reference" - prototype: "QQuickDirection" - exports: [ - "QtQuick.Particles/AngleDirection 2.0", - "QtQuick.Particles/AngleDirection 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "angle" - type: "double" - read: "angle" - write: "setAngle" - notify: "angleChanged" - index: 0 - } - Property { - name: "magnitude" - type: "double" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 1 - } - Property { - name: "angleVariation" - type: "double" - read: "angleVariation" - write: "setAngleVariation" - notify: "angleVariationChanged" - index: 2 - } - Property { - name: "magnitudeVariation" - type: "double" - read: "magnitudeVariation" - write: "setMagnitudeVariation" - notify: "magnitudeVariationChanged" - index: 3 - } - Signal { - name: "angleChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "magnitudeChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "angleVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "magnitudeVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAngle" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setMagnitude" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAngleVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setMagnitudeVariation" - Parameter { name: "arg"; type: "double" } - } - } - Component { - file: "private/qquickpointattractor_p.h" - name: "QQuickAttractorAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Attractor 2.0", - "QtQuick.Particles/Attractor 2.1", - "QtQuick.Particles/Attractor 2.4", - "QtQuick.Particles/Attractor 2.7", - "QtQuick.Particles/Attractor 2.11", - "QtQuick.Particles/Attractor 6.0", - "QtQuick.Particles/Attractor 6.3", - "QtQuick.Particles/Attractor 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Proportion" - values: [ - "Constant", - "Linear", - "Quadratic", - "InverseLinear", - "InverseQuadratic" - ] - } - Enum { - name: "AffectableParameters" - values: ["Position", "Velocity", "Acceleration"] - } - Property { - name: "strength" - type: "double" - read: "strength" - write: "setStrength" - notify: "strengthChanged" - index: 0 - } - Property { - name: "pointX" - type: "double" - read: "pointX" - write: "setPointX" - notify: "pointXChanged" - index: 1 - } - Property { - name: "pointY" - type: "double" - read: "pointY" - write: "setPointY" - notify: "pointYChanged" - index: 2 - } - Property { - name: "affectedParameter" - type: "AffectableParameters" - read: "affectedParameter" - write: "setAffectedParameter" - notify: "affectedParameterChanged" - index: 3 - } - Property { - name: "proportionalToDistance" - type: "Proportion" - read: "proportionalToDistance" - write: "setProportionalToDistance" - notify: "proportionalToDistanceChanged" - index: 4 - } - Signal { - name: "strengthChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "pointXChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "pointYChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "affectedParameterChanged" - Parameter { name: "arg"; type: "AffectableParameters" } - } - Signal { - name: "proportionalToDistanceChanged" - Parameter { name: "arg"; type: "Proportion" } - } - Method { - name: "setStrength" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setPointX" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setPointY" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAffectedParameter" - Parameter { name: "arg"; type: "AffectableParameters" } - } - Method { - name: "setProportionalToDistance" - Parameter { name: "arg"; type: "Proportion" } - } - } - Component { - file: "private/qquickcumulativedirection_p.h" - name: "QQuickCumulativeDirection" - accessSemantics: "reference" - defaultProperty: "directions" - prototype: "QQuickDirection" - exports: [ - "QtQuick.Particles/CumulativeDirection 2.0", - "QtQuick.Particles/CumulativeDirection 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "directions" - type: "QQuickDirection" - isList: true - read: "directions" - index: 0 - isReadonly: true - } - } - Component { - file: "private/qquickcustomaffector_p.h" - name: "QQuickCustomAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Affector 2.0", - "QtQuick.Particles/Affector 2.1", - "QtQuick.Particles/Affector 2.4", - "QtQuick.Particles/Affector 2.7", - "QtQuick.Particles/Affector 2.11", - "QtQuick.Particles/Affector 6.0", - "QtQuick.Particles/Affector 6.3", - "QtQuick.Particles/Affector 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "relative" - type: "bool" - read: "relative" - write: "setRelative" - notify: "relativeChanged" - index: 0 - } - Property { - name: "position" - type: "QQuickDirection" - isPointer: true - read: "position" - write: "setPosition" - reset: "positionReset" - notify: "positionChanged" - index: 1 - } - Property { - name: "velocity" - type: "QQuickDirection" - isPointer: true - read: "velocity" - write: "setVelocity" - reset: "velocityReset" - notify: "velocityChanged" - index: 2 - } - Property { - name: "acceleration" - type: "QQuickDirection" - isPointer: true - read: "acceleration" - write: "setAcceleration" - reset: "accelerationReset" - notify: "accelerationChanged" - index: 3 - } - Signal { - name: "affectParticles" - Parameter { name: "particles"; type: "QQuickV4ParticleData"; isList: true } - Parameter { name: "dt"; type: "double" } - } - Signal { - name: "positionChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "velocityChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "accelerationChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "relativeChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setPosition" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setVelocity" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setAcceleration" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setRelative" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickdirection_p.h" - name: "QQuickDirection" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Particles/NullVector 2.0", - "QtQuick.Particles/NullVector 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickellipseextruder_p.h" - name: "QQuickEllipseExtruder" - accessSemantics: "reference" - prototype: "QQuickParticleExtruder" - exports: [ - "QtQuick.Particles/EllipseShape 2.0", - "QtQuick.Particles/EllipseShape 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "fill" - type: "bool" - read: "fill" - write: "setFill" - notify: "fillChanged" - index: 0 - } - Signal { - name: "fillChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setFill" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickfriction_p.h" - name: "QQuickFrictionAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Friction 2.0", - "QtQuick.Particles/Friction 2.1", - "QtQuick.Particles/Friction 2.4", - "QtQuick.Particles/Friction 2.7", - "QtQuick.Particles/Friction 2.11", - "QtQuick.Particles/Friction 6.0", - "QtQuick.Particles/Friction 6.3", - "QtQuick.Particles/Friction 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "factor" - type: "double" - read: "factor" - write: "setFactor" - notify: "factorChanged" - index: 0 - } - Property { - name: "threshold" - type: "double" - read: "threshold" - write: "setThreshold" - notify: "thresholdChanged" - index: 1 - } - Signal { - name: "factorChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "thresholdChanged" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setFactor" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setThreshold" - Parameter { name: "arg"; type: "double" } - } - } - Component { - file: "private/qquickgravity_p.h" - name: "QQuickGravityAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Gravity 2.0", - "QtQuick.Particles/Gravity 2.1", - "QtQuick.Particles/Gravity 2.4", - "QtQuick.Particles/Gravity 2.7", - "QtQuick.Particles/Gravity 2.11", - "QtQuick.Particles/Gravity 6.0", - "QtQuick.Particles/Gravity 6.3", - "QtQuick.Particles/Gravity 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "magnitude" - type: "double" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 0 - } - Property { - name: "acceleration" - type: "double" - read: "magnitude" - write: "setAcceleration" - notify: "magnitudeChanged" - index: 1 - } - Property { - name: "angle" - type: "double" - read: "angle" - write: "setAngle" - notify: "angleChanged" - index: 2 - } - Signal { - name: "magnitudeChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "angleChanged" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setMagnitude" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAcceleration" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAngle" - Parameter { name: "arg"; type: "double" } - } - } - Component { - file: "private/qquickgroupgoal_p.h" - name: "QQuickGroupGoalAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/GroupGoal 2.0", - "QtQuick.Particles/GroupGoal 2.1", - "QtQuick.Particles/GroupGoal 2.4", - "QtQuick.Particles/GroupGoal 2.7", - "QtQuick.Particles/GroupGoal 2.11", - "QtQuick.Particles/GroupGoal 6.0", - "QtQuick.Particles/GroupGoal 6.3", - "QtQuick.Particles/GroupGoal 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "goalState" - type: "QString" - read: "goalState" - write: "setGoalState" - notify: "goalStateChanged" - index: 0 - } - Property { - name: "jump" - type: "bool" - read: "jump" - write: "setJump" - notify: "jumpChanged" - index: 1 - } - Signal { - name: "goalStateChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "jumpChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setGoalState" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setJump" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickimageparticle_p.h" - name: "QQuickImageParticle" - accessSemantics: "reference" - prototype: "QQuickParticlePainter" - exports: [ - "QtQuick.Particles/ImageParticle 2.0", - "QtQuick.Particles/ImageParticle 2.1", - "QtQuick.Particles/ImageParticle 2.4", - "QtQuick.Particles/ImageParticle 2.7", - "QtQuick.Particles/ImageParticle 2.11", - "QtQuick.Particles/ImageParticle 6.0", - "QtQuick.Particles/ImageParticle 6.3", - "QtQuick.Particles/ImageParticle 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Enum { - name: "EntryEffect" - values: ["None", "Fade", "Scale"] - } - Property { - name: "source" - type: "QUrl" - read: "image" - write: "setImage" - notify: "imageChanged" - index: 0 - } - Property { - name: "sprites" - type: "QQuickSprite" - isList: true - read: "sprites" - index: 1 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 2 - isReadonly: true - } - Property { - name: "colorTable" - type: "QUrl" - read: "colortable" - write: "setColortable" - notify: "colortableChanged" - index: 3 - } - Property { - name: "sizeTable" - type: "QUrl" - read: "sizetable" - write: "setSizetable" - notify: "sizetableChanged" - index: 4 - } - Property { - name: "opacityTable" - type: "QUrl" - read: "opacitytable" - write: "setOpacitytable" - notify: "opacitytableChanged" - index: 5 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - reset: "resetColor" - notify: "colorChanged" - index: 6 - } - Property { - name: "colorVariation" - type: "double" - read: "colorVariation" - write: "setColorVariation" - reset: "resetColor" - notify: "colorVariationChanged" - index: 7 - } - Property { - name: "redVariation" - type: "double" - read: "redVariation" - write: "setRedVariation" - reset: "resetColor" - notify: "redVariationChanged" - index: 8 - } - Property { - name: "greenVariation" - type: "double" - read: "greenVariation" - write: "setGreenVariation" - reset: "resetColor" - notify: "greenVariationChanged" - index: 9 - } - Property { - name: "blueVariation" - type: "double" - read: "blueVariation" - write: "setBlueVariation" - reset: "resetColor" - notify: "blueVariationChanged" - index: 10 - } - Property { - name: "alpha" - type: "double" - read: "alpha" - write: "setAlpha" - reset: "resetColor" - notify: "alphaChanged" - index: 11 - } - Property { - name: "alphaVariation" - type: "double" - read: "alphaVariation" - write: "setAlphaVariation" - reset: "resetColor" - notify: "alphaVariationChanged" - index: 12 - } - Property { - name: "rotation" - type: "double" - read: "rotation" - write: "setRotation" - reset: "resetRotation" - notify: "rotationChanged" - index: 13 - } - Property { - name: "rotationVariation" - type: "double" - read: "rotationVariation" - write: "setRotationVariation" - reset: "resetRotation" - notify: "rotationVariationChanged" - index: 14 - } - Property { - name: "rotationVelocity" - type: "double" - read: "rotationVelocity" - write: "setRotationVelocity" - reset: "resetRotation" - notify: "rotationVelocityChanged" - index: 15 - } - Property { - name: "rotationVelocityVariation" - type: "double" - read: "rotationVelocityVariation" - write: "setRotationVelocityVariation" - reset: "resetRotation" - notify: "rotationVelocityVariationChanged" - index: 16 - } - Property { - name: "autoRotation" - type: "bool" - read: "autoRotation" - write: "setAutoRotation" - reset: "resetRotation" - notify: "autoRotationChanged" - index: 17 - } - Property { - name: "xVector" - type: "QQuickDirection" - isPointer: true - read: "xVector" - write: "setXVector" - reset: "resetDeformation" - notify: "xVectorChanged" - index: 18 - } - Property { - name: "yVector" - type: "QQuickDirection" - isPointer: true - read: "yVector" - write: "setYVector" - reset: "resetDeformation" - notify: "yVectorChanged" - index: 19 - } - Property { - name: "spritesInterpolate" - type: "bool" - read: "spritesInterpolate" - write: "setSpritesInterpolate" - notify: "spritesInterpolateChanged" - index: 20 - } - Property { - name: "entryEffect" - type: "EntryEffect" - read: "entryEffect" - write: "setEntryEffect" - notify: "entryEffectChanged" - index: 21 - } - Signal { name: "imageChanged" } - Signal { name: "colortableChanged" } - Signal { name: "sizetableChanged" } - Signal { name: "opacitytableChanged" } - Signal { name: "colorChanged" } - Signal { name: "colorVariationChanged" } - Signal { - name: "alphaVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "alphaChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "redVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "greenVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "blueVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "rotationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "rotationVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "rotationVelocityChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "rotationVelocityVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "autoRotationChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "xVectorChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "yVectorChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "spritesInterpolateChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "bypassOptimizationsChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "entryEffectChanged" - Parameter { name: "arg"; type: "EntryEffect" } - } - Signal { - name: "statusChanged" - Parameter { name: "arg"; type: "Status" } - } - Method { - name: "setAlphaVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAlpha" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setRedVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setGreenVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setBlueVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setRotation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setRotationVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setRotationVelocity" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setRotationVelocityVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAutoRotation" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setXVector" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setYVector" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setSpritesInterpolate" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setBypassOptimizations" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setEntryEffect" - Parameter { name: "arg"; type: "EntryEffect" } - } - Method { name: "createEngine" } - Method { - name: "spriteAdvance" - Parameter { name: "spriteIndex"; type: "int" } - } - Method { - name: "spritesUpdate" - Parameter { name: "time"; type: "double" } - } - Method { name: "spritesUpdate"; isCloned: true } - Method { name: "mainThreadFetchImageData" } - Method { - name: "finishBuildParticleNodes" - Parameter { name: "n"; type: "QSGNode*"; isPointer: true } - } - Method { name: "invalidateSceneGraph" } - } - Component { - file: "private/qquickitemparticle_p.h" - name: "QQuickItemParticle" - accessSemantics: "reference" - prototype: "QQuickParticlePainter" - exports: [ - "QtQuick.Particles/ItemParticle 2.0", - "QtQuick.Particles/ItemParticle 2.1", - "QtQuick.Particles/ItemParticle 2.4", - "QtQuick.Particles/ItemParticle 2.7", - "QtQuick.Particles/ItemParticle 2.11", - "QtQuick.Particles/ItemParticle 6.0", - "QtQuick.Particles/ItemParticle 6.3", - "QtQuick.Particles/ItemParticle 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - attachedType: "QQuickItemParticleAttached" - Property { - name: "fade" - type: "bool" - read: "fade" - write: "setFade" - notify: "fadeChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Signal { name: "fadeChanged" } - Signal { - name: "delegateChanged" - Parameter { name: "arg"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "freeze" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "unfreeze" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "take" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "prioritize"; type: "bool" } - } - Method { - name: "take" - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "give" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "setFade" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setDelegate" - Parameter { name: "arg"; type: "QQmlComponent"; isPointer: true } - } - } - Component { - file: "private/qquickitemparticle_p.h" - name: "QQuickItemParticleAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "particle" - type: "QQuickItemParticle" - isPointer: true - read: "particle" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "detached" } - Signal { name: "attached" } - } - Component { - file: "private/qquicklineextruder_p.h" - name: "QQuickLineExtruder" - accessSemantics: "reference" - prototype: "QQuickParticleExtruder" - exports: [ - "QtQuick.Particles/LineShape 2.0", - "QtQuick.Particles/LineShape 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "mirrored" - type: "bool" - read: "mirrored" - write: "setMirrored" - notify: "mirroredChanged" - index: 0 - } - Signal { - name: "mirroredChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setMirrored" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickmaskextruder_p.h" - name: "QQuickMaskExtruder" - accessSemantics: "reference" - prototype: "QQuickParticleExtruder" - exports: [ - "QtQuick.Particles/MaskShape 2.0", - "QtQuick.Particles/MaskShape 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Signal { - name: "sourceChanged" - Parameter { name: "arg"; type: "QUrl" } - } - Method { - name: "setSource" - Parameter { name: "arg"; type: "QUrl" } - } - Method { name: "startMaskLoading" } - Method { name: "finishMaskLoading" } - } - Component { - file: "private/qquickparticleaffector_p.h" - name: "QQuickParticleAffector" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Particles/ParticleAffector 2.0", - "QtQuick.Particles/ParticleAffector 2.1", - "QtQuick.Particles/ParticleAffector 2.4", - "QtQuick.Particles/ParticleAffector 2.7", - "QtQuick.Particles/ParticleAffector 2.11", - "QtQuick.Particles/ParticleAffector 6.0", - "QtQuick.Particles/ParticleAffector 6.3", - "QtQuick.Particles/ParticleAffector 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "system" - type: "QQuickParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "groups" - type: "QStringList" - read: "groups" - write: "setGroups" - notify: "groupsChanged" - index: 1 - } - Property { - name: "whenCollidingWith" - type: "QStringList" - read: "whenCollidingWith" - write: "setWhenCollidingWith" - notify: "whenCollidingWithChanged" - index: 2 - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 3 - } - Property { - name: "once" - type: "bool" - read: "onceOff" - write: "setOnceOff" - notify: "onceChanged" - index: 4 - } - Property { - name: "shape" - type: "QQuickParticleExtruder" - isPointer: true - read: "shape" - write: "setShape" - notify: "shapeChanged" - index: 5 - } - Signal { - name: "systemChanged" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Signal { - name: "groupsChanged" - Parameter { name: "arg"; type: "QStringList" } - } - Signal { - name: "enabledChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "onceChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "shapeChanged" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Signal { - name: "affected" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Signal { - name: "whenCollidingWithChanged" - Parameter { name: "arg"; type: "QStringList" } - } - Method { - name: "setSystem" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Method { - name: "setGroups" - Parameter { name: "arg"; type: "QStringList" } - } - Method { - name: "setEnabled" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setOnceOff" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setShape" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Method { - name: "setWhenCollidingWith" - Parameter { name: "arg"; type: "QStringList" } - } - Method { name: "updateOffsets" } - } - Component { - file: "private/qquickparticleemitter_p.h" - name: "QQuickParticleEmitter" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Particles/Emitter 2.0", - "QtQuick.Particles/Emitter 2.1", - "QtQuick.Particles/Emitter 2.4", - "QtQuick.Particles/Emitter 2.7", - "QtQuick.Particles/Emitter 2.11", - "QtQuick.Particles/Emitter 6.0", - "QtQuick.Particles/Emitter 6.3", - "QtQuick.Particles/Emitter 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Lifetime" - values: ["InfiniteLife"] - } - Property { - name: "system" - type: "QQuickParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "group" - type: "QString" - read: "group" - write: "setGroup" - notify: "groupChanged" - index: 1 - } - Property { - name: "shape" - type: "QQuickParticleExtruder" - isPointer: true - read: "extruder" - write: "setExtruder" - notify: "extruderChanged" - index: 2 - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 3 - } - Property { - name: "startTime" - type: "int" - read: "startTime" - write: "setStartTime" - notify: "startTimeChanged" - index: 4 - } - Property { - name: "emitRate" - type: "double" - read: "particlesPerSecond" - write: "setParticlesPerSecond" - notify: "particlesPerSecondChanged" - index: 5 - } - Property { - name: "lifeSpan" - type: "int" - read: "particleDuration" - write: "setParticleDuration" - notify: "particleDurationChanged" - index: 6 - } - Property { - name: "lifeSpanVariation" - type: "int" - read: "particleDurationVariation" - write: "setParticleDurationVariation" - notify: "particleDurationVariationChanged" - index: 7 - } - Property { - name: "maximumEmitted" - type: "int" - read: "maxParticleCount" - write: "setMaxParticleCount" - notify: "maximumEmittedChanged" - index: 8 - } - Property { - name: "size" - type: "double" - read: "particleSize" - write: "setParticleSize" - notify: "particleSizeChanged" - index: 9 - } - Property { - name: "endSize" - type: "double" - read: "particleEndSize" - write: "setParticleEndSize" - notify: "particleEndSizeChanged" - index: 10 - } - Property { - name: "sizeVariation" - type: "double" - read: "particleSizeVariation" - write: "setParticleSizeVariation" - notify: "particleSizeVariationChanged" - index: 11 - } - Property { - name: "velocity" - type: "QQuickDirection" - isPointer: true - read: "velocity" - write: "setVelocity" - notify: "velocityChanged" - index: 12 - } - Property { - name: "acceleration" - type: "QQuickDirection" - isPointer: true - read: "acceleration" - write: "setAcceleration" - notify: "accelerationChanged" - index: 13 - } - Property { - name: "velocityFromMovement" - type: "double" - read: "velocityFromMovement" - write: "setVelocityFromMovement" - notify: "velocityFromMovementChanged" - index: 14 - } - Signal { - name: "emitParticles" - Parameter { name: "particles"; type: "QQuickV4ParticleData"; isList: true } - } - Signal { - name: "particlesPerSecondChanged" - Parameter { type: "double" } - } - Signal { - name: "particleDurationChanged" - Parameter { type: "int" } - } - Signal { - name: "enabledChanged" - Parameter { type: "bool" } - } - Signal { - name: "systemChanged" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Signal { - name: "groupChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "particleDurationVariationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "extruderChanged" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Signal { - name: "particleSizeChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "particleEndSizeChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "particleSizeVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "velocityChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "accelerationChanged" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Signal { - name: "maximumEmittedChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { name: "particleCountChanged" } - Signal { name: "velocityFromMovementChanged" } - Signal { - name: "startTimeChanged" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "pulse" - Parameter { name: "milliseconds"; type: "int" } - } - Method { - name: "burst" - Parameter { name: "num"; type: "int" } - } - Method { - name: "burst" - Parameter { name: "num"; type: "int" } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "setEnabled" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setParticlesPerSecond" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setParticleDuration" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setSystem" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Method { - name: "setGroup" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setParticleDurationVariation" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setExtruder" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Method { - name: "setParticleSize" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setParticleEndSize" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setParticleSizeVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setVelocity" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setAcceleration" - Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } - } - Method { - name: "setMaxParticleCount" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setStartTime" - Parameter { name: "arg"; type: "int" } - } - Method { name: "reset" } - } - Component { - file: "private/qquickparticleextruder_p.h" - name: "QQuickParticleExtruder" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Particles/ParticleExtruder 2.0", - "QtQuick.Particles/ParticleExtruder 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickparticlegroup_p.h" - name: "QQuickParticleGroup" - accessSemantics: "reference" - defaultProperty: "particleChildren" - prototype: "QQuickStochasticState" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Particles/ParticleGroup 2.0", - "QtQuick.Particles/ParticleGroup 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "system" - type: "QQuickParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "particleChildren" - type: "QObject" - isList: true - read: "particleChildren" - index: 1 - isReadonly: true - } - Signal { - name: "systemChanged" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Method { - name: "setSystem" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Method { - name: "delayRedirect" - Parameter { name: "obj"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qquickparticlepainter_p.h" - name: "QQuickParticlePainter" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Particles/ParticlePainter 2.0", - "QtQuick.Particles/ParticlePainter 2.1", - "QtQuick.Particles/ParticlePainter 2.4", - "QtQuick.Particles/ParticlePainter 2.7", - "QtQuick.Particles/ParticlePainter 2.11", - "QtQuick.Particles/ParticlePainter 6.0", - "QtQuick.Particles/ParticlePainter 6.3", - "QtQuick.Particles/ParticlePainter 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "system" - type: "QQuickParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "groups" - type: "QStringList" - read: "groups" - write: "setGroups" - notify: "groupsChanged" - index: 1 - } - Signal { name: "countChanged" } - Signal { - name: "systemChanged" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Signal { - name: "groupsChanged" - Parameter { name: "arg"; type: "QStringList" } - } - Method { - name: "setSystem" - Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } - } - Method { - name: "setGroups" - Parameter { name: "arg"; type: "QStringList" } - } - Method { - name: "calcSystemOffset" - Parameter { name: "resetPending"; type: "bool" } - } - Method { name: "calcSystemOffset"; isCloned: true } - Method { name: "sceneGraphInvalidated" } - } - Component { - file: "private/qquickparticlesystem_p.h" - name: "QQuickParticleSystem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Particles/ParticleSystem 2.0", - "QtQuick.Particles/ParticleSystem 2.1", - "QtQuick.Particles/ParticleSystem 2.4", - "QtQuick.Particles/ParticleSystem 2.7", - "QtQuick.Particles/ParticleSystem 2.11", - "QtQuick.Particles/ParticleSystem 6.0", - "QtQuick.Particles/ParticleSystem 6.3", - "QtQuick.Particles/ParticleSystem 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "paused" - type: "bool" - read: "isPaused" - write: "setPaused" - notify: "pausedChanged" - index: 1 - } - Property { - name: "empty" - type: "bool" - read: "isEmpty" - notify: "emptyChanged" - index: 2 - isReadonly: true - } - Signal { name: "systemInitialized" } - Signal { - name: "runningChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "pausedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "emptyChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { name: "start" } - Method { name: "stop" } - Method { name: "restart" } - Method { name: "pause" } - Method { name: "resume" } - Method { name: "reset" } - Method { - name: "setRunning" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setPaused" - Parameter { name: "arg"; type: "bool" } - } - Method { name: "duration"; type: "int" } - Method { name: "emittersChanged" } - Method { - name: "loadPainter" - Parameter { name: "p"; type: "QQuickParticlePainter"; isPointer: true } - } - Method { name: "createEngine" } - Method { - name: "particleStateChange" - Parameter { name: "idx"; type: "int" } - } - } - Component { - file: "private/qquickpointdirection_p.h" - name: "QQuickPointDirection" - accessSemantics: "reference" - prototype: "QQuickDirection" - exports: [ - "QtQuick.Particles/PointDirection 2.0", - "QtQuick.Particles/PointDirection 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { name: "x"; type: "double"; read: "x"; write: "setX"; notify: "xChanged"; index: 0 } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; notify: "yChanged"; index: 1 } - Property { - name: "xVariation" - type: "double" - read: "xVariation" - write: "setXVariation" - notify: "xVariationChanged" - index: 2 - } - Property { - name: "yVariation" - type: "double" - read: "yVariation" - write: "setYVariation" - notify: "yVariationChanged" - index: 3 - } - Signal { - name: "xChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "yChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "xVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "yVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setX" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setY" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setXVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setYVariation" - Parameter { name: "arg"; type: "double" } - } - } - Component { - file: "private/qquickrectangleextruder_p.h" - name: "QQuickRectangleExtruder" - accessSemantics: "reference" - prototype: "QQuickParticleExtruder" - exports: [ - "QtQuick.Particles/RectangleShape 2.0", - "QtQuick.Particles/RectangleShape 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "fill" - type: "bool" - read: "fill" - write: "setFill" - notify: "fillChanged" - index: 0 - } - Signal { - name: "fillChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setFill" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickspritegoal_p.h" - name: "QQuickSpriteGoalAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/SpriteGoal 2.0", - "QtQuick.Particles/SpriteGoal 2.1", - "QtQuick.Particles/SpriteGoal 2.4", - "QtQuick.Particles/SpriteGoal 2.7", - "QtQuick.Particles/SpriteGoal 2.11", - "QtQuick.Particles/SpriteGoal 6.0", - "QtQuick.Particles/SpriteGoal 6.3", - "QtQuick.Particles/SpriteGoal 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "goalState" - type: "QString" - read: "goalState" - write: "setGoalState" - notify: "goalStateChanged" - index: 0 - } - Property { - name: "jump" - type: "bool" - read: "jump" - write: "setJump" - notify: "jumpChanged" - index: 1 - } - Property { - name: "systemStates" - type: "bool" - read: "systemStates" - write: "setSystemStates" - notify: "systemStatesChanged" - index: 2 - } - Signal { - name: "goalStateChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "jumpChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "systemStatesChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setGoalState" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setJump" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setSystemStates" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquickspriteengine_p.h" - name: "QQuickStochasticState" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 0 - } - Property { - name: "durationVariation" - type: "int" - read: "durationVariation" - write: "setDurationVariation" - notify: "durationVariationChanged" - index: 1 - } - Property { - name: "randomStart" - type: "bool" - read: "randomStart" - write: "setRandomStart" - notify: "randomStartChanged" - index: 2 - } - Property { - name: "to" - type: "QVariantMap" - read: "to" - write: "setTo" - notify: "toChanged" - index: 3 - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 4 - } - Signal { - name: "durationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "nameChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "toChanged" - Parameter { name: "arg"; type: "QVariantMap" } - } - Signal { - name: "durationVariationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { name: "entered" } - Signal { - name: "randomStartChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setDuration" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setName" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setTo" - Parameter { name: "arg"; type: "QVariantMap" } - } - Method { - name: "setDurationVariation" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setRandomStart" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquicktargetdirection_p.h" - name: "QQuickTargetDirection" - accessSemantics: "reference" - prototype: "QQuickDirection" - exports: [ - "QtQuick.Particles/TargetDirection 2.0", - "QtQuick.Particles/TargetDirection 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "targetX" - type: "double" - read: "targetX" - write: "setTargetX" - notify: "targetXChanged" - index: 0 - } - Property { - name: "targetY" - type: "double" - read: "targetY" - write: "setTargetY" - notify: "targetYChanged" - index: 1 - } - Property { - name: "targetItem" - type: "QQuickItem" - isPointer: true - read: "targetItem" - write: "setTargetItem" - notify: "targetItemChanged" - index: 2 - } - Property { - name: "targetVariation" - type: "double" - read: "targetVariation" - write: "setTargetVariation" - notify: "targetVariationChanged" - index: 3 - } - Property { - name: "proportionalMagnitude" - type: "bool" - read: "proportionalMagnitude" - write: "setProportionalMagnitude" - notify: "proprotionalMagnitudeChanged" - index: 4 - } - Property { - name: "magnitude" - type: "double" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 5 - } - Property { - name: "magnitudeVariation" - type: "double" - read: "magnitudeVariation" - write: "setMagnitudeVariation" - notify: "magnitudeVariationChanged" - index: 6 - } - Signal { - name: "targetXChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "targetYChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "targetVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "magnitudeChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "proprotionalMagnitudeChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "magnitudeVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "targetItemChanged" - Parameter { name: "arg"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "setTargetX" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setTargetY" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setTargetVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setMagnitude" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setProportionalMagnitude" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setMagnitudeVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setTargetItem" - Parameter { name: "arg"; type: "QQuickItem"; isPointer: true } - } - } - Component { - file: "private/qquicktrailemitter_p.h" - name: "QQuickTrailEmitter" - accessSemantics: "reference" - prototype: "QQuickParticleEmitter" - exports: [ - "QtQuick.Particles/TrailEmitter 2.0", - "QtQuick.Particles/TrailEmitter 2.1", - "QtQuick.Particles/TrailEmitter 2.4", - "QtQuick.Particles/TrailEmitter 2.7", - "QtQuick.Particles/TrailEmitter 2.11", - "QtQuick.Particles/TrailEmitter 6.0", - "QtQuick.Particles/TrailEmitter 6.3", - "QtQuick.Particles/TrailEmitter 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "EmitSize" - values: ["ParticleSize"] - } - Property { - name: "follow" - type: "QString" - read: "follow" - write: "setFollow" - notify: "followChanged" - index: 0 - } - Property { - name: "emitRatePerParticle" - type: "int" - read: "particlesPerParticlePerSecond" - write: "setParticlesPerParticlePerSecond" - notify: "particlesPerParticlePerSecondChanged" - index: 1 - } - Property { - name: "emitShape" - type: "QQuickParticleExtruder" - isPointer: true - read: "emissonShape" - write: "setEmissionShape" - notify: "emissionShapeChanged" - index: 2 - } - Property { - name: "emitHeight" - type: "double" - read: "emitterYVariation" - write: "setEmitterYVariation" - notify: "emitterYVariationChanged" - index: 3 - } - Property { - name: "emitWidth" - type: "double" - read: "emitterXVariation" - write: "setEmitterXVariation" - notify: "emitterXVariationChanged" - index: 4 - } - Signal { - name: "emitFollowParticles" - Parameter { name: "particles"; type: "QQuickV4ParticleData"; isList: true } - Parameter { name: "followed"; type: "QQuickV4ParticleData" } - } - Signal { - name: "particlesPerParticlePerSecondChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "emitterXVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "emitterYVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "followChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "emissionShapeChanged" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Method { - name: "setParticlesPerParticlePerSecond" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setEmitterXVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setEmitterYVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setFollow" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setEmissionShape" - Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } - } - Method { name: "recalcParticlesPerSecond" } - } - Component { - file: "private/qquickturbulence_p.h" - name: "QQuickTurbulenceAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Turbulence 2.0", - "QtQuick.Particles/Turbulence 2.1", - "QtQuick.Particles/Turbulence 2.4", - "QtQuick.Particles/Turbulence 2.7", - "QtQuick.Particles/Turbulence 2.11", - "QtQuick.Particles/Turbulence 6.0", - "QtQuick.Particles/Turbulence 6.3", - "QtQuick.Particles/Turbulence 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "strength" - type: "double" - read: "strength" - write: "setStrength" - notify: "strengthChanged" - index: 0 - } - Property { - name: "noiseSource" - type: "QUrl" - read: "noiseSource" - write: "setNoiseSource" - notify: "noiseSourceChanged" - index: 1 - } - Signal { - name: "strengthChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "noiseSourceChanged" - Parameter { name: "arg"; type: "QUrl" } - } - Method { - name: "setStrength" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setNoiseSource" - Parameter { name: "arg"; type: "QUrl" } - } - } - Component { - file: "private/qquickv4particledata_p.h" - name: "QQuickV4ParticleData" - accessSemantics: "value" - exports: ["QtQuick.Particles/particle 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Property { - name: "initialX" - type: "float" - read: "initialX" - write: "set_initialX" - index: 0 - isFinal: true - } - Property { - name: "initialVX" - type: "float" - read: "initialVX" - write: "set_initialVX" - index: 1 - isFinal: true - } - Property { - name: "initialAX" - type: "float" - read: "initialAX" - write: "set_initialAX" - index: 2 - isFinal: true - } - Property { - name: "initialY" - type: "float" - read: "initialY" - write: "set_initialY" - index: 3 - isFinal: true - } - Property { - name: "initialVY" - type: "float" - read: "initialVY" - write: "set_initialVY" - index: 4 - isFinal: true - } - Property { - name: "initialAY" - type: "float" - read: "initialAY" - write: "set_initialAY" - index: 5 - isFinal: true - } - Property { name: "t"; type: "float"; read: "t"; write: "set_t"; index: 6; isFinal: true } - Property { - name: "startSize" - type: "float" - read: "startSize" - write: "set_startSize" - index: 7 - isFinal: true - } - Property { - name: "endSize" - type: "float" - read: "endSize" - write: "set_endSize" - index: 8 - isFinal: true - } - Property { - name: "lifeSpan" - type: "float" - read: "lifeSpan" - write: "set_lifeSpan" - index: 9 - isFinal: true - } - Property { - name: "rotation" - type: "float" - read: "rotation" - write: "set_rotation" - index: 10 - isFinal: true - } - Property { - name: "rotationVelocity" - type: "float" - read: "rotationVelocity" - write: "set_rotationVelocity" - index: 11 - isFinal: true - } - Property { - name: "autoRotate" - type: "bool" - read: "autoRotate" - write: "set_autoRotate" - index: 12 - isFinal: true - } - Property { - name: "update" - type: "bool" - read: "update" - write: "set_update" - index: 13 - isFinal: true - } - Property { - name: "xDeformationVectorX" - type: "float" - read: "xDeformationVectorX" - write: "set_xDeformationVectorX" - index: 14 - isFinal: true - } - Property { - name: "yDeformationVectorX" - type: "float" - read: "yDeformationVectorX" - write: "set_yDeformationVectorX" - index: 15 - isFinal: true - } - Property { - name: "xDeformationVectorY" - type: "float" - read: "xDeformationVectorY" - write: "set_xDeformationVectorY" - index: 16 - isFinal: true - } - Property { - name: "yDeformationVectorY" - type: "float" - read: "yDeformationVectorY" - write: "set_yDeformationVectorY" - index: 17 - isFinal: true - } - Property { - name: "animationIndex" - type: "float" - read: "animationIndex" - write: "set_animationIndex" - index: 18 - isFinal: true - } - Property { - name: "frameDuration" - type: "float" - read: "frameDuration" - write: "set_frameDuration" - index: 19 - isFinal: true - } - Property { - name: "frameAt" - type: "float" - read: "frameAt" - write: "set_frameAt" - index: 20 - isFinal: true - } - Property { - name: "frameCount" - type: "float" - read: "frameCount" - write: "set_frameCount" - index: 21 - isFinal: true - } - Property { - name: "animationT" - type: "float" - read: "animationT" - write: "set_animationT" - index: 22 - isFinal: true - } - Property { name: "x"; type: "float"; read: "x"; write: "set_x"; index: 23 } - Property { name: "vx"; type: "float"; read: "vx"; write: "set_vx"; index: 24 } - Property { name: "ax"; type: "float"; read: "ax"; write: "set_ax"; index: 25 } - Property { name: "y"; type: "float"; read: "y"; write: "set_y"; index: 26 } - Property { name: "vy"; type: "float"; read: "vy"; write: "set_vy"; index: 27 } - Property { name: "ay"; type: "float"; read: "ay"; write: "set_ay"; index: 28 } - Property { name: "red"; type: "float"; read: "red"; write: "set_red"; index: 29 } - Property { name: "green"; type: "float"; read: "green"; write: "set_green"; index: 30 } - Property { name: "blue"; type: "float"; read: "blue"; write: "set_blue"; index: 31 } - Property { name: "alpha"; type: "float"; read: "alpha"; write: "set_alpha"; index: 32 } - Property { name: "lifeLeft"; type: "float"; read: "lifeLeft"; index: 33; isReadonly: true } - Property { name: "currentSize"; type: "float"; read: "currentSize"; index: 34; isReadonly: true } - Method { name: "discard" } - } - Component { - file: "private/qquickwander_p.h" - name: "QQuickWanderAffector" - accessSemantics: "reference" - prototype: "QQuickParticleAffector" - exports: [ - "QtQuick.Particles/Wander 2.0", - "QtQuick.Particles/Wander 2.1", - "QtQuick.Particles/Wander 2.4", - "QtQuick.Particles/Wander 2.7", - "QtQuick.Particles/Wander 2.11", - "QtQuick.Particles/Wander 6.0", - "QtQuick.Particles/Wander 6.3", - "QtQuick.Particles/Wander 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "AffectableParameters" - values: ["Position", "Velocity", "Acceleration"] - } - Property { - name: "pace" - type: "double" - read: "pace" - write: "setPace" - notify: "paceChanged" - index: 0 - } - Property { - name: "xVariance" - type: "double" - read: "xVariance" - write: "setXVariance" - notify: "xVarianceChanged" - index: 1 - } - Property { - name: "yVariance" - type: "double" - read: "yVariance" - write: "setYVariance" - notify: "yVarianceChanged" - index: 2 - } - Property { - name: "affectedParameter" - type: "AffectableParameters" - read: "affectedParameter" - write: "setAffectedParameter" - notify: "affectedParameterChanged" - index: 3 - } - Signal { - name: "xVarianceChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "yVarianceChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "paceChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "affectedParameterChanged" - Parameter { name: "arg"; type: "AffectableParameters" } - } - Method { - name: "setXVariance" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setYVariance" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setPace" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setAffectedParameter" - Parameter { name: "arg"; type: "AffectableParameters" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/qmldir deleted file mode 100644 index 163fb28..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Particles/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Particles -linktarget Qt6::particlesplugin -optional plugin particlesplugin -classname QtQuick2ParticlesPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Particles/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Material/PdfStyle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Material/PdfStyle.qml deleted file mode 100644 index 0728616..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Material/PdfStyle.qml +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only -import QtQuick -import QtQuick.Controls.Material - -QtObject { - property SystemPalette palette: SystemPalette { } - function withAlpha(color, alpha) { - return Qt.hsla(color.hslHue, color.hslSaturation, color.hslLightness, alpha) - } - property color selectionColor: withAlpha(palette.highlight, 0.5) - property color pageSearchResultsColor: withAlpha(Qt.lighter(Material.accentColor, 1.5), 0.5) - property color currentSearchResultStrokeColor: Material.accentColor - property real currentSearchResultStrokeWidth: 2 -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Universal/PdfStyle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Universal/PdfStyle.qml deleted file mode 100644 index 4c559f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/+Universal/PdfStyle.qml +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only -import QtQuick -import QtQuick.Controls.Universal - -QtObject { - property SystemPalette palette: SystemPalette { } - function withAlpha(color, alpha) { - return Qt.hsla(color.hslHue, color.hslSaturation, color.hslLightness, alpha) - } - property color selectionColor: withAlpha(palette.highlight, 0.5) - property color pageSearchResultsColor: withAlpha(Qt.lighter(Universal.accent, 1.5), 0.5) - property color currentSearchResultStrokeColor: Universal.accent - property real currentSearchResultStrokeWidth: 2 -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfLinkDelegate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfLinkDelegate.qml deleted file mode 100644 index 4ac54d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfLinkDelegate.qml +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only -import QtQuick -import QtQuick.Controls - -/*! - \qmltype PdfLinkDelegate - \inqmlmodule QtQuick.Pdf - \brief A component to decorate hyperlinks on a PDF page. - - PdfLinkDelegate provides the component that QML-based PDF viewers - instantiate on top of each hyperlink that is found on each PDF page. - - This component does not provide any visual decoration, because often the - hyperlinks will already be formatted in a distinctive way; but when the - mouse cursor hovers, it changes to Qt::PointingHandCursor, and a tooltip - appears after a delay. Clicking emits the goToLocation() signal if the link - is internal, or calls Qt.openUrlExternally() if the link contains a URL. - - \sa PdfPageView, PdfScrollablePageView, PdfMultiPageView -*/ -Item { - id: root - required property var link - required property rect rectangle - required property url url - required property int page - required property point location - required property real zoom - - /*! - \qmlsignal PdfLinkDelegate::tapped(link) - - Emitted on mouse click or touch tap. The \a link argument is an - instance of QPdfLink with information about the hyperlink. - */ - signal tapped(var link) - - /*! - \qmlsignal PdfLinkDelegate::contextMenuRequested(link) - - Emitted on mouse right-click or touch long-press. The \a link argument - is an instance of QPdfLink with information about the hyperlink. - */ - signal contextMenuRequested(var link) - - HoverHandler { - id: linkHH - cursorShape: Qt.PointingHandCursor - } - TapHandler { - gesturePolicy: TapHandler.ReleaseWithinBounds - onTapped: root.tapped(root.link) - } - TapHandler { - acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad | PointerDevice.Stylus - acceptedButtons: Qt.RightButton - gesturePolicy: TapHandler.ReleaseWithinBounds - onTapped: root.contextMenuRequested(root.link) - } - TapHandler { - acceptedDevices: PointerDevice.TouchScreen - onLongPressed: root.contextMenuRequested(root.link) - } - ToolTip { - visible: linkHH.hovered - delay: 1000 - property string destFormat: qsTr("Page %1 location %2, %3 zoom %4") - text: root.page >= 0 ? - destFormat.arg(root.page + 1).arg(root.location.x.toFixed(1)) - .arg(root.location.y.toFixed(1)).arg(root.zoom) : - root.url - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfMultiPageView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfMultiPageView.qml deleted file mode 100644 index 194d786..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfMultiPageView.qml +++ /dev/null @@ -1,623 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls -import QtQuick.Pdf -import QtQuick.Shapes - -/*! - \qmltype PdfMultiPageView - \inqmlmodule QtQuick.Pdf - \brief A complete PDF viewer component for scrolling through multiple pages. - - PdfMultiPageView provides a PDF viewer component that offers a user - experience similar to many common PDF viewer applications. It supports - flicking through the pages in the entire document, with narrow gaps between - the page images. - - PdfMultiPageView also supports selecting text and copying it to the - clipboard, zooming in and out, clicking an internal link to jump to another - section in the document, rotating the view, and searching for text. The - \l {PDF Multipage Viewer Example} demonstrates how to use these features - in an application. - - The implementation is a QML assembly of smaller building blocks that are - available separately. In case you want to make changes in your own version - of this component, you can copy the QML, which is installed into the - \c QtQuick/Pdf/qml module directory, and modify it as needed. - - \sa PdfPageView, PdfScrollablePageView, PdfStyle -*/ -Item { - /*! - \qmlproperty PdfDocument PdfMultiPageView::document - - A PdfDocument object with a valid \c source URL is required: - - \snippet multipageview.qml 0 - */ - required property PdfDocument document - - /*! - \qmlproperty PdfDocument PdfMultiPageView::selectedText - - The selected text. - */ - property string selectedText - - /*! - \qmlmethod void PdfMultiPageView::selectAll() - - Selects all the text on the \l {currentPage}{current page}, and makes it - available as the system \l {QClipboard::Selection}{selection} on systems - that support that feature. - - \sa copySelectionToClipboard() - */ - function selectAll() { - const currentItem = tableView.itemAtCell(tableView.cellAtPos(root.width / 2, root.height / 2)) - const pdfSelection = currentItem?.selection as PdfSelection - pdfSelection?.selectAll() - } - - /*! - \qmlmethod void PdfMultiPageView::copySelectionToClipboard() - - Copies the selected text (if any) to the - \l {QClipboard::Clipboard}{system clipboard}. - - \sa selectAll() - */ - function copySelectionToClipboard() { - const currentItem = tableView.itemAtCell(tableView.cellAtPos(root.width / 2, root.height / 2)) - const pdfSelection = currentItem?.selection as PdfSelection - console.log(lcMPV, "currentItem", currentItem, "sel", pdfSelection?.text) - pdfSelection?.copyToClipboard() - } - - // -------------------------------- - // page navigation - - /*! - \qmlproperty int PdfMultiPageView::currentPage - \readonly - - This property holds the zero-based page number of the page visible in the - scrollable view. If there is no current page, it holds -1. - - This property is read-only, and is typically used in a binding (or - \c onCurrentPageChanged script) to update the part of the user interface - that shows the current page number, such as a \l SpinBox. - - \sa PdfPageNavigator::currentPage - */ - property alias currentPage: pageNavigator.currentPage - - /*! - \qmlproperty bool PdfMultiPageView::backEnabled - \readonly - - This property indicates if it is possible to go back in the navigation - history to a previous-viewed page. - - \sa PdfPageNavigator::backAvailable, back() - */ - property alias backEnabled: pageNavigator.backAvailable - - /*! - \qmlproperty bool PdfMultiPageView::forwardEnabled - \readonly - - This property indicates if it is possible to go to next location in the - navigation history. - - \sa PdfPageNavigator::forwardAvailable, forward() - */ - property alias forwardEnabled: pageNavigator.forwardAvailable - - /*! - \qmlmethod void PdfMultiPageView::back() - - Scrolls the view back to the previous page that the user visited most - recently; or does nothing if there is no previous location on the - navigation stack. - - \sa PdfPageNavigator::back(), currentPage, backEnabled - */ - function back() { pageNavigator.back() } - - /*! - \qmlmethod void PdfMultiPageView::forward() - - Scrolls the view to the page that the user was viewing when the back() - method was called; or does nothing if there is no "next" location on the - navigation stack. - - \sa PdfPageNavigator::forward(), currentPage - */ - function forward() { pageNavigator.forward() } - - /*! - \qmlmethod void PdfMultiPageView::goToPage(int page) - - Scrolls the view to the given \a page number, if possible. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToPage(page) { - if (page === pageNavigator.currentPage) - return - goToLocation(page, Qt.point(-1, -1), 0) - } - - /*! - \qmlmethod void PdfMultiPageView::goToLocation(int page, point location, real zoom) - - Scrolls the view to the \a location on the \a page, if possible, - and sets the \a zoom level. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToLocation(page, location, zoom) { - if (tableView.rows === 0) { - // save this request for later - tableView.pendingRow = page - tableView.pendingLocation = location - tableView.pendingZoom = zoom - return - } - if (zoom > 0) { - pageNavigator.jumping = true // don't call pageNavigator.update() because we will jump() instead - root.renderScale = zoom - pageNavigator.jumping = false - } - pageNavigator.jump(page, location, zoom) // actually jump - } - - /*! - \qmlproperty int PdfMultiPageView::currentPageRenderingStatus - - This property holds the \l {QtQuick::Image::status}{rendering status} of - the \l {currentPage}{current page}. - */ - property int currentPageRenderingStatus: Image.Null - - // -------------------------------- - // page scaling - - /*! - \qmlproperty real PdfMultiPageView::renderScale - - This property holds the ratio of pixels to points. The default is \c 1, - meaning one point (1/72 of an inch) equals 1 logical pixel. - */ - property real renderScale: 1 - - /*! - \qmlproperty real PdfMultiPageView::pageRotation - - This property holds the clockwise rotation of the pages. - - The default value is \c 0 degrees (that is, no rotation relative to the - orientation of the pages as stored in the PDF file). - */ - property real pageRotation: 0 - - /*! - \qmlmethod void PdfMultiPageView::resetScale() - - Sets \l renderScale back to its default value of \c 1. - */ - function resetScale() { root.renderScale = 1 } - - /*! - \qmlmethod void PdfMultiPageView::scaleToWidth(real width, real height) - - Sets \l renderScale such that the width of the first page will fit into a - viewport with the given \a width and \a height. If the page is not rotated, - it will be scaled so that its width fits \a width. If it is rotated +/- 90 - degrees, it will be scaled so that its width fits \a height. - */ - function scaleToWidth(width, height) { - root.renderScale = width / (tableView.rot90 ? tableView.firstPagePointSize.height : tableView.firstPagePointSize.width) - } - - /*! - \qmlmethod void PdfMultiPageView::scaleToPage(real width, real height) - - Sets \l renderScale such that the whole first page will fit into a viewport - with the given \a width and \a height. The resulting \l renderScale depends - on \l pageRotation: the page will fit into the viewport at a larger size if - it is first rotated to have a matching aspect ratio. - */ - function scaleToPage(width, height) { - const windowAspect = width / height - const pageAspect = tableView.firstPagePointSize.width / tableView.firstPagePointSize.height - if (tableView.rot90) { - if (windowAspect > pageAspect) { - root.renderScale = height / tableView.firstPagePointSize.width - } else { - root.renderScale = width / tableView.firstPagePointSize.height - } - } else { - if (windowAspect > pageAspect) { - root.renderScale = height / tableView.firstPagePointSize.height - } else { - root.renderScale = width / tableView.firstPagePointSize.width - } - } - } - - // -------------------------------- - // text search - - /*! - \qmlproperty PdfSearchModel PdfMultiPageView::searchModel - - This property holds a PdfSearchModel containing the list of search results - for a given \l searchString. - - \sa PdfSearchModel - */ - property alias searchModel: searchModel - - /*! - \qmlproperty string PdfMultiPageView::searchString - - This property holds the search string that the user may choose to search - for. It is typically used in a binding to the \c text property of a - TextField. - - \sa searchModel - */ - property alias searchString: searchModel.searchString - - /*! - \qmlmethod void PdfMultiPageView::searchBack() - - Decrements the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the previous search result. - */ - function searchBack() { --searchModel.currentResult } - - /*! - \qmlmethod void PdfMultiPageView::searchForward() - - Increments the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the next search result. - */ - function searchForward() { ++searchModel.currentResult } - - LoggingCategory { - id: lcMPV - name: "qt.pdf.multipageview" - } - - id: root - PdfStyle { id: style } - TableView { - id: tableView - property bool debug: false - property real minScale: 0.1 - property real maxScale: 10 - property point jumpLocationMargin: Qt.point(10, 10) // px away from viewport edges - anchors.fill: parent - anchors.leftMargin: 2 - model: root.document ? root.document.pageCount : 0 - rowSpacing: 6 - property real rotationNorm: Math.round((360 + (root.pageRotation % 360)) % 360) - property bool rot90: rotationNorm == 90 || rotationNorm == 270 - onRot90Changed: forceLayout() - onHeightChanged: forceLayout() - onWidthChanged: forceLayout() - property size firstPagePointSize: root.document?.status === PdfDocument.Ready ? root.document.pagePointSize(0) : Qt.size(1, 1) - property real pageHolderWidth: Math.max(root.width, ((rot90 ? root.document?.maxPageHeight : root.document?.maxPageWidth) ?? 0) * root.renderScale) - columnWidthProvider: function(col) { return root.document ? pageHolderWidth + vscroll.width + 2 : 0 } - rowHeightProvider: function(row) { return (rot90 ? root.document.pagePointSize(row).width : root.document.pagePointSize(row).height) * root.renderScale } - - // delayed-jump feature in case the user called goToPage() or goToLocation() too early - property int pendingRow: -1 - property point pendingLocation - property real pendingZoom: -1 - onRowsChanged: { - if (rows > 0 && tableView.pendingRow >= 0) { - console.log(lcMPV, "initiating delayed jump to page", tableView.pendingRow, "loc", tableView.pendingLocation, "zoom", tableView.pendingZoom) - root.goToLocation(tableView.pendingRow, tableView.pendingLocation, tableView.pendingZoom) - tableView.pendingRow = -1 - tableView.pendingLocation = Qt.point(-1, -1) - tableView.pendingZoom = -1 - } - } - - delegate: Rectangle { - id: pageHolder - required property int index - color: tableView.debug ? "beige" : "transparent" - Text { - visible: tableView.debug - anchors { right: parent.right; verticalCenter: parent.verticalCenter } - rotation: -90; text: pageHolder.width.toFixed(1) + "x" + pageHolder.height.toFixed(1) + "\n" + - image.width.toFixed(1) + "x" + image.height.toFixed(1) - } - property alias selection: selection - Rectangle { - id: paper - width: image.width - height: image.height - rotation: root.pageRotation - anchors.centerIn: pinch.active ? undefined : parent - property size pagePointSize: root.document.pagePointSize(pageHolder.index) - property real pageScale: image.paintedWidth / pagePointSize.width - PdfPageImage { - id: image - document: root.document - currentFrame: pageHolder.index - asynchronous: true - fillMode: Image.PreserveAspectFit - width: paper.pagePointSize.width * root.renderScale - height: paper.pagePointSize.height * root.renderScale - property real renderScale: root.renderScale - property real oldRenderScale: 1 - onRenderScaleChanged: { - image.sourceSize.width = paper.pagePointSize.width * renderScale * Screen.devicePixelRatio - image.sourceSize.height = 0 - paper.scale = 1 - searchHighlights.update() - } - onStatusChanged: { - if (pageHolder.index === pageNavigator.currentPage) - root.currentPageRenderingStatus = status - } - } - Shape { - anchors.fill: parent - visible: image.status === Image.Ready - onVisibleChanged: searchHighlights.update() - ShapePath { - strokeWidth: -1 - fillColor: style.pageSearchResultsColor - scale: Qt.size(paper.pageScale, paper.pageScale) - PathMultiline { - id: searchHighlights - function update() { - // paths could be a binding, but we need to be able to "kick" it sometimes - paths = searchModel.boundingPolygonsOnPage(pageHolder.index) - } - } - } - Connections { - target: searchModel - // whenever the highlights on the _current_ page change, they actually need to change on _all_ pages - // (usually because the search string has changed) - function onCurrentPageBoundingPolygonsChanged() { searchHighlights.update() } - } - ShapePath { - strokeWidth: -1 - fillColor: style.selectionColor - scale: Qt.size(paper.pageScale, paper.pageScale) - PathMultiline { - paths: selection.geometry - } - } - } - Shape { - anchors.fill: parent - visible: image.status === Image.Ready && searchModel.currentPage === pageHolder.index - ShapePath { - strokeWidth: style.currentSearchResultStrokeWidth - strokeColor: style.currentSearchResultStrokeColor - fillColor: "transparent" - scale: Qt.size(paper.pageScale, paper.pageScale) - PathMultiline { - paths: searchModel.currentResultBoundingPolygons - } - } - } - PinchHandler { - id: pinch - minimumScale: tableView.minScale / root.renderScale - maximumScale: Math.max(1, tableView.maxScale / root.renderScale) - minimumRotation: root.pageRotation - maximumRotation: root.pageRotation - onActiveChanged: - if (active) { - paper.z = 10 - } else { - paper.z = 0 - const centroidInPoints = Qt.point(pinch.centroid.position.x / root.renderScale, - pinch.centroid.position.y / root.renderScale) - const centroidInFlickable = tableView.mapFromItem(paper, pinch.centroid.position.x, pinch.centroid.position.y) - const newSourceWidth = image.sourceSize.width * paper.scale - const ratio = newSourceWidth / image.sourceSize.width - console.log(lcMPV, "pinch ended on page", pageHolder.index, - "with scale", paper.scale.toFixed(3), "ratio", ratio.toFixed(3), - "centroid", pinch.centroid.position, centroidInPoints, - "wrt flickable", centroidInFlickable, - "page at", pageHolder.x.toFixed(2), pageHolder.y.toFixed(2), - "contentX/Y were", tableView.contentX.toFixed(2), tableView.contentY.toFixed(2)) - if (ratio > 1.1 || ratio < 0.9) { - const centroidOnPage = Qt.point(centroidInPoints.x * root.renderScale * ratio, centroidInPoints.y * root.renderScale * ratio) - paper.scale = 1 - pinch.persistentScale = 1 - paper.x = 0 - paper.y = 0 - root.renderScale *= ratio - tableView.forceLayout() - if (tableView.rotationNorm == 0) { - tableView.contentX = pageHolder.x + tableView.originX + centroidOnPage.x - centroidInFlickable.x - tableView.contentY = pageHolder.y + tableView.originY + centroidOnPage.y - centroidInFlickable.y - } else if (tableView.rotationNorm == 90) { - tableView.contentX = pageHolder.x + tableView.originX + image.height - centroidOnPage.y - centroidInFlickable.x - tableView.contentY = pageHolder.y + tableView.originY + centroidOnPage.x - centroidInFlickable.y - } else if (tableView.rotationNorm == 180) { - tableView.contentX = pageHolder.x + tableView.originX + image.width - centroidOnPage.x - centroidInFlickable.x - tableView.contentY = pageHolder.y + tableView.originY + image.height - centroidOnPage.y - centroidInFlickable.y - } else if (tableView.rotationNorm == 270) { - tableView.contentX = pageHolder.x + tableView.originX + centroidOnPage.y - centroidInFlickable.x - tableView.contentY = pageHolder.y + tableView.originY + image.width - centroidOnPage.x - centroidInFlickable.y - } - console.log(lcMPV, "contentX/Y adjusted to", tableView.contentX.toFixed(2), tableView.contentY.toFixed(2), "y @top", pageHolder.y) - tableView.returnToBounds() - } - } - grabPermissions: PointerHandler.CanTakeOverFromAnything - } - DragHandler { - id: textSelectionDrag - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - target: null - } - TapHandler { - id: mouseClickHandler - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - } - TapHandler { - id: touchTapHandler - acceptedDevices: PointerDevice.TouchScreen - onTapped: { - selection.clear() - selection.forceActiveFocus() - } - } - Repeater { - model: PdfLinkModel { - id: linkModel - document: root.document - page: image.currentFrame - } - delegate: PdfLinkDelegate { - x: rectangle.x * paper.pageScale - y: rectangle.y * paper.pageScale - width: rectangle.width * paper.pageScale - height: rectangle.height * paper.pageScale - visible: image.status === Image.Ready - onTapped: - (link) => { - if (link.page >= 0) - root.goToLocation(link.page, link.location, link.zoom) - else - Qt.openUrlExternally(url) - } - } - } - PdfSelection { - id: selection - anchors.fill: parent - document: root.document - page: image.currentFrame - renderScale: image.renderScale - from: textSelectionDrag.centroid.pressPosition - to: textSelectionDrag.centroid.position - hold: !textSelectionDrag.active && !mouseClickHandler.pressed - onTextChanged: root.selectedText = text - focus: true - } - } - } - ScrollBar.vertical: ScrollBar { - id: vscroll - property bool moved: false - onPositionChanged: moved = true - onPressedChanged: if (pressed) { - // When the user starts scrolling, push the location where we came from so the user can go "back" there - const cell = tableView.cellAtPos(root.width / 2, root.height / 2) - const currentItem = tableView.itemAtCell(cell) - const currentLocation = currentItem - ? Qt.point((tableView.contentX - currentItem.x + tableView.jumpLocationMargin.x) / root.renderScale, - (tableView.contentY - currentItem.y + tableView.jumpLocationMargin.y) / root.renderScale) - : Qt.point(0, 0) // maybe the delegate wasn't loaded yet - pageNavigator.jump(cell.y, currentLocation, root.renderScale) - } - onActiveChanged: if (!active ) { - // When the scrollbar stops moving, tell navstack where we are, so as to update currentPage etc. - const cell = tableView.cellAtPos(root.width / 2, root.height / 2) - const currentItem = tableView.itemAtCell(cell) - const currentLocation = currentItem - ? Qt.point((tableView.contentX - currentItem.x + tableView.jumpLocationMargin.x) / root.renderScale, - (tableView.contentY - currentItem.y + tableView.jumpLocationMargin.y) / root.renderScale) - : Qt.point(0, 0) // maybe the delegate wasn't loaded yet - pageNavigator.update(cell.y, currentLocation, root.renderScale) - } - } - ScrollBar.horizontal: ScrollBar { } - } - onRenderScaleChanged: { - // if pageNavigator.jumped changes the scale, don't turn around and update the stack again; - // and don't force layout either, because positionViewAtCell() will do that - if (pageNavigator.jumping) - return - // page size changed: TableView needs to redo layout to avoid overlapping delegates or gaps between them - tableView.forceLayout() - const cell = tableView.cellAtPos(root.width / 2, root.height / 2) - const currentItem = tableView.itemAtCell(cell) - if (currentItem) { - const currentLocation = Qt.point((tableView.contentX - currentItem.x + tableView.jumpLocationMargin.x) / root.renderScale, - (tableView.contentY - currentItem.y + tableView.jumpLocationMargin.y) / root.renderScale) - pageNavigator.update(cell.y, currentLocation, renderScale) - } - } - PdfPageNavigator { - id: pageNavigator - property bool jumping: false - property int previousPage: 0 - onJumped: function(current) { - jumping = true - if (current.zoom > 0) - root.renderScale = current.zoom - const pageSize = root.document.pagePointSize(current.page) - if (current.location.y < 0) { - // invalid to indicate that a specific location was not needed, - // so attempt to position the new page just as the current page is - const previousPageDelegate = tableView.itemAtCell(0, previousPage) - const currentYOffset = previousPageDelegate - ? tableView.contentY - previousPageDelegate.y - : 0 - tableView.positionViewAtRow(current.page, Qt.AlignTop, currentYOffset) - console.log(lcMPV, "going from page", previousPage, "to", current.page, "offset", currentYOffset, - "ended up @", tableView.contentX.toFixed(1) + ", " + tableView.contentY.toFixed(1)) - } else if (current.rectangles.length > 0) { - // jump to a search result and position the covered area within the viewport - pageSize.width *= root.renderScale - pageSize.height *= root.renderScale - const rectPts = current.rectangles[0] - const rectPx = Qt.rect(rectPts.x * root.renderScale - tableView.jumpLocationMargin.x, - rectPts.y * root.renderScale - tableView.jumpLocationMargin.y, - rectPts.width * root.renderScale + tableView.jumpLocationMargin.x * 2, - rectPts.height * root.renderScale + tableView.jumpLocationMargin.y * 2) - tableView.positionViewAtCell(0, current.page, TableView.Contain, Qt.point(0, 0), rectPx) - console.log(lcMPV, "going to zoom", root.renderScale, "rect", rectPx, "on page", current.page, - "ended up @", tableView.contentX.toFixed(1) + ", " + tableView.contentY.toFixed(1)) - } else { - // jump to a page and position the given location relative to the top-left corner of the viewport - pageSize.width *= root.renderScale - pageSize.height *= root.renderScale - const rectPx = Qt.rect(current.location.x * root.renderScale - tableView.jumpLocationMargin.x, - current.location.y * root.renderScale - tableView.jumpLocationMargin.y, - tableView.jumpLocationMargin.x * 2, tableView.jumpLocationMargin.y * 2) - tableView.positionViewAtCell(0, current.page, TableView.AlignLeft | TableView.AlignTop, Qt.point(0, 0), rectPx) - console.log(lcMPV, "going to zoom", root.renderScale, "loc", current.location, "on page", current.page, - "ended up @", tableView.contentX.toFixed(1) + ", " + tableView.contentY.toFixed(1)) - } - jumping = false - previousPage = current.page - } - - property url documentSource: root.document.source - onDocumentSourceChanged: { - pageNavigator.clear() - root.resetScale() - tableView.contentX = 0 - tableView.contentY = 0 - } - } - PdfSearchModel { - id: searchModel - document: root.document === undefined ? null : root.document - onCurrentResultChanged: pageNavigator.jump(currentResultLink) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfPageView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfPageView.qml deleted file mode 100644 index e1d97f5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfPageView.qml +++ /dev/null @@ -1,439 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Pdf -import QtQuick.Shapes - -/*! - \qmltype PdfPageView - \inqmlmodule QtQuick.Pdf - \brief A PDF viewer component to show one page a time. - - PdfPageView provides a PDF viewer component that shows one whole page at a - time, without scrolling. It supports selecting text and copying it to the - clipboard, zooming in and out, clicking an internal link to jump to another - section in the document, rotating the view, and searching for text. - - The implementation is a QML assembly of smaller building blocks that are - available separately. In case you want to make changes in your own version - of this component, you can copy the QML, which is installed into the - \c QtQuick/Pdf/qml module directory, and modify it as needed. - - \sa PdfScrollablePageView, PdfMultiPageView, PdfStyle -*/ -Rectangle { - /*! - \qmlproperty PdfDocument PdfPageView::document - - A PdfDocument object with a valid \c source URL is required: - - \snippet pdfpageview.qml 0 - */ - required property PdfDocument document - - /*! - \qmlproperty int PdfPageView::status - - This property holds the \l {QtQuick::Image::status}{rendering status} of - the \l {currentPage}{current page}. - */ - property alias status: image.status - - /*! - \qmlproperty PdfDocument PdfPageView::selectedText - - The selected text. - */ - property alias selectedText: selection.text - - /*! - \qmlmethod void PdfPageView::selectAll() - - Selects all the text on the \l {currentPage}{current page}, and makes it - available as the system \l {QClipboard::Selection}{selection} on systems - that support that feature. - - \sa copySelectionToClipboard() - */ - function selectAll() { - selection.selectAll() - } - - /*! - \qmlmethod void PdfPageView::copySelectionToClipboard() - - Copies the selected text (if any) to the - \l {QClipboard::Clipboard}{system clipboard}. - - \sa selectAll() - */ - function copySelectionToClipboard() { - selection.copyToClipboard() - } - - // -------------------------------- - // page navigation - - /*! - \qmlproperty int PdfPageView::currentPage - \readonly - - This property holds the zero-based page number of the page visible in the - scrollable view. If there is no current page, it holds -1. - - This property is read-only, and is typically used in a binding (or - \c onCurrentPageChanged script) to update the part of the user interface - that shows the current page number, such as a \l SpinBox. - - \sa PdfPageNavigator::currentPage - */ - property alias currentPage: pageNavigator.currentPage - - /*! - \qmlproperty bool PdfPageView::backEnabled - \readonly - - This property indicates if it is possible to go back in the navigation - history to a previous-viewed page. - - \sa PdfPageNavigator::backAvailable, back() - */ - property alias backEnabled: pageNavigator.backAvailable - - /*! - \qmlproperty bool PdfPageView::forwardEnabled - \readonly - - This property indicates if it is possible to go to next location in the - navigation history. - - \sa PdfPageNavigator::forwardAvailable, forward() - */ - property alias forwardEnabled: pageNavigator.forwardAvailable - - /*! - \qmlmethod void PdfPageView::back() - - Scrolls the view back to the previous page that the user visited most - recently; or does nothing if there is no previous location on the - navigation stack. - - \sa PdfPageNavigator::back(), currentPage, backEnabled - */ - function back() { pageNavigator.back() } - - /*! - \qmlmethod void PdfPageView::forward() - - Scrolls the view to the page that the user was viewing when the back() - method was called; or does nothing if there is no "next" location on the - navigation stack. - - \sa PdfPageNavigator::forward(), currentPage - */ - function forward() { pageNavigator.forward() } - - /*! - \qmlmethod void PdfPageView::goToPage(int page) - - Changes the view to the \a page, if possible. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToPage(page) { goToLocation(page, Qt.point(0, 0), 0) } - - /*! - \qmlmethod void PdfPageView::goToLocation(int page, point location, real zoom) - - Scrolls the view to the \a location on the \a page, if possible, - and sets the \a zoom level. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToLocation(page, location, zoom) { - if (zoom > 0) - root.renderScale = zoom - pageNavigator.jump(page, location, zoom) - } - - // -------------------------------- - // page scaling - - /*! - \qmlproperty bool PdfPageView::zoomEnabled - - This property holds whether the user can use the pinch gesture or - Control + mouse wheel to zoom. The default is \c true. - - When the user zooms the page, the size of PdfPageView changes. - */ - property bool zoomEnabled: true - - /*! - \qmlproperty real PdfPageView::renderScale - - This property holds the ratio of pixels to points. The default is \c 1, - meaning one point (1/72 of an inch) equals 1 logical pixel. - */ - property real renderScale: 1 - - /*! - \qmlproperty size PdfPageView::sourceSize - - This property holds the scaled width and height of the full-frame image. - - \sa {QtQuick::Image::sourceSize}{Image.sourceSize} - */ - property alias sourceSize: image.sourceSize - - /*! - \qmlmethod void PdfPageView::resetScale() - - Sets \l renderScale back to its default value of \c 1. - */ - function resetScale() { - image.sourceSize.width = 0 - image.sourceSize.height = 0 - root.scale = 1 - } - - /*! - \qmlmethod void PdfPageView::scaleToWidth(real width, real height) - - Sets \l renderScale such that the width of the first page will fit into a - viewport with the given \a width and \a height. If the page is not rotated, - it will be scaled so that its width fits \a width. If it is rotated +/- 90 - degrees, it will be scaled so that its width fits \a height. - */ - function scaleToWidth(width, height) { - const halfRotation = Math.abs(root.rotation % 180) - image.sourceSize = Qt.size((halfRotation > 45 && halfRotation < 135) ? height : width, 0) - image.centerInSize = Qt.size(width, height) - image.centerOnLoad = true - image.vCenterOnLoad = (halfRotation > 45 && halfRotation < 135) - root.scale = 1 - } - - /*! - \qmlmethod void PdfPageView::scaleToPage(real width, real height) - - Sets \l renderScale such that the whole first page will fit into a viewport - with the given \a width and \a height. The resulting \l renderScale depends - on page rotation: the page will fit into the viewport at a larger size if it - is first rotated to have a matching aspect ratio. - */ - function scaleToPage(width, height) { - const windowAspect = width / height - const halfRotation = Math.abs(root.rotation % 180) - const pagePointSize = document.pagePointSize(pageNavigator.currentPage) - const pageAspect = pagePointSize.height / pagePointSize.width - if (halfRotation > 45 && halfRotation < 135) { - // rotated 90 or 270º - if (windowAspect > pageAspect) { - image.sourceSize = Qt.size(height, 0) - } else { - image.sourceSize = Qt.size(0, width) - } - } else { - if (windowAspect > pageAspect) { - image.sourceSize = Qt.size(0, height) - } else { - image.sourceSize = Qt.size(width, 0) - } - } - image.centerInSize = Qt.size(width, height) - image.centerOnLoad = true - image.vCenterOnLoad = true - root.scale = 1 - } - - // -------------------------------- - // text search - - /*! - \qmlproperty PdfSearchModel PdfPageView::searchModel - - This property holds a PdfSearchModel containing the list of search results - for a given \l searchString. - - \sa PdfSearchModel - */ - property alias searchModel: searchModel - - /*! - \qmlproperty string PdfPageView::searchString - - This property holds the search string that the user may choose to search - for. It is typically used in a binding to the \c text property of a - TextField. - - \sa searchModel - */ - property alias searchString: searchModel.searchString - - /*! - \qmlmethod void PdfPageView::searchBack() - - Decrements the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the previous search result. - */ - function searchBack() { --searchModel.currentResult } - - /*! - \qmlmethod void PdfPageView::searchForward() - - Increments the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the next search result. - */ - function searchForward() { ++searchModel.currentResult } - - // -------------------------------- - // implementation - id: root - width: image.width - height: image.height - - PdfSelection { - id: selection - document: root.document - page: pageNavigator.currentPage - from: Qt.point(textSelectionDrag.centroid.pressPosition.x / image.pageScale, textSelectionDrag.centroid.pressPosition.y / image.pageScale) - to: Qt.point(textSelectionDrag.centroid.position.x / image.pageScale, textSelectionDrag.centroid.position.y / image.pageScale) - hold: !textSelectionDrag.active && !tapHandler.pressed - } - - PdfSearchModel { - id: searchModel - document: root.document === undefined ? null : root.document - onCurrentPageChanged: root.goToPage(currentPage) - } - - PdfPageNavigator { - id: pageNavigator - onCurrentPageChanged: searchModel.currentPage = currentPage - onCurrentZoomChanged: root.renderScale = currentZoom - - property url documentSource: root.document.source - onDocumentSourceChanged: { - pageNavigator.clear() - root.goToPage(0) - } - } - - PdfPageImage { - id: image - document: root.document - currentFrame: pageNavigator.currentPage - asynchronous: true - fillMode: Image.PreserveAspectFit - property bool centerOnLoad: false - property bool vCenterOnLoad: false - property size centerInSize - property real pageScale: image.paintedWidth / document.pagePointSize(pageNavigator.currentPage).width - function reRenderIfNecessary() { - const newSourceWidth = image.sourceSize.width * root.scale * Screen.devicePixelRatio - const ratio = newSourceWidth / image.sourceSize.width - if (ratio > 1.1 || ratio < 0.9) { - image.sourceSize.width = newSourceWidth - image.sourceSize.height = 0 - root.scale = 1 - } - } - onStatusChanged: - if (status == Image.Ready && centerOnLoad) { - root.x = (centerInSize.width - image.implicitWidth) / 2 - root.y = vCenterOnLoad ? (centerInSize.height - image.implicitHeight) / 2 : 0 - centerOnLoad = false - vCenterOnLoad = false - } - } - onRenderScaleChanged: { - image.sourceSize.width = document.pagePointSize(pageNavigator.currentPage).width * renderScale - image.sourceSize.height = 0 - root.scale = 1 - } - - Shape { - anchors.fill: parent - opacity: 0.25 - visible: image.status === Image.Ready - ShapePath { - strokeWidth: 1 - strokeColor: "cyan" - fillColor: "steelblue" - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: searchModel.currentPageBoundingPolygons - } - } - ShapePath { - strokeWidth: 1 - strokeColor: "orange" - fillColor: "cyan" - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: searchModel.currentResultBoundingPolygons - } - } - ShapePath { - fillColor: "orange" - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: selection.geometry - } - } - } - - Repeater { - model: PdfLinkModel { - id: linkModel - document: root.document - page: pageNavigator.currentPage - } - delegate: PdfLinkDelegate { - x: rectangle.x * image.pageScale - y: rectangle.y * image.pageScale - width: rectangle.width * image.pageScale - height: rectangle.height * image.pageScale - visible: image.status === Image.Ready - onTapped: - (link) => { - if (link.page >= 0) - pageNavigator.jump(link) - else - Qt.openUrlExternally(url) - } - } - } - - PinchHandler { - id: pinch - enabled: root.zoomEnabled && root.scale * root.renderScale <= 10 && root.scale * root.renderScale >= 0.1 - minimumScale: 0.1 - maximumScale: 10 - minimumRotation: 0 - maximumRotation: 0 - onActiveChanged: if (!active) image.reRenderIfNecessary() - grabPermissions: PinchHandler.TakeOverForbidden // don't allow takeover if pinch has started - } - WheelHandler { - enabled: pinch.enabled - acceptedModifiers: Qt.ControlModifier - property: "scale" - onActiveChanged: if (!active) image.reRenderIfNecessary() - } - DragHandler { - id: textSelectionDrag - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - target: null - } - TapHandler { - id: tapHandler - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfScrollablePageView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfScrollablePageView.qml deleted file mode 100644 index 9fa0547..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfScrollablePageView.qml +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls -import QtQuick.Pdf -import QtQuick.Shapes - -/*! - \qmltype PdfScrollablePageView - \inqmlmodule QtQuick.Pdf - \brief A complete PDF viewer component to show one page a time, with scrolling. - - PdfScrollablePageView provides a PDF viewer component that shows one page - at a time, with scrollbars to move around the page. It also supports - selecting text and copying it to the clipboard, zooming in and out, - clicking an internal link to jump to another section in the document, - rotating the view, and searching for text. The pdfviewer example - demonstrates how to use these features in an application. - - The implementation is a QML assembly of smaller building blocks that are - available separately. In case you want to make changes in your own version - of this component, you can copy the QML, which is installed into the - \c QtQuick/Pdf/qml module directory, and modify it as needed. - - \sa PdfPageView, PdfMultiPageView, PdfStyle -*/ -Flickable { - /*! - \qmlproperty PdfDocument PdfScrollablePageView::document - - A PdfDocument object with a valid \c source URL is required: - - \snippet multipageview.qml 0 - */ - required property PdfDocument document - - /*! - \qmlproperty int PdfScrollablePageView::status - - This property holds the \l {QtQuick::Image::status}{rendering status} of - the \l {currentPage}{current page}. - */ - property alias status: image.status - - /*! - \qmlproperty PdfDocument PdfScrollablePageView::selectedText - - The selected text. - */ - property alias selectedText: selection.text - - /*! - \qmlmethod void PdfScrollablePageView::selectAll() - - Selects all the text on the \l {currentPage}{current page}, and makes it - available as the system \l {QClipboard::Selection}{selection} on systems - that support that feature. - - \sa copySelectionToClipboard() - */ - function selectAll() { - selection.selectAll() - } - - /*! - \qmlmethod void PdfScrollablePageView::copySelectionToClipboard() - - Copies the selected text (if any) to the - \l {QClipboard::Clipboard}{system clipboard}. - - \sa selectAll() - */ - function copySelectionToClipboard() { - selection.copyToClipboard() - } - - // -------------------------------- - // page navigation - - /*! - \qmlproperty int PdfScrollablePageView::currentPage - \readonly - - This property holds the zero-based page number of the page visible in the - scrollable view. If there is no current page, it holds -1. - - This property is read-only, and is typically used in a binding (or - \c onCurrentPageChanged script) to update the part of the user interface - that shows the current page number, such as a \l SpinBox. - - \sa PdfPageNavigator::currentPage - */ - property alias currentPage: pageNavigator.currentPage - - /*! - \qmlproperty bool PdfScrollablePageView::backEnabled - \readonly - - This property indicates if it is possible to go back in the navigation - history to a previous-viewed page. - - \sa PdfPageNavigator::backAvailable, back() - */ - property alias backEnabled: pageNavigator.backAvailable - - /*! - \qmlproperty bool PdfScrollablePageView::forwardEnabled - \readonly - - This property indicates if it is possible to go to next location in the - navigation history. - - \sa PdfPageNavigator::forwardAvailable, forward() - */ - property alias forwardEnabled: pageNavigator.forwardAvailable - - /*! - \qmlmethod void PdfScrollablePageView::back() - - Scrolls the view back to the previous page that the user visited most - recently; or does nothing if there is no previous location on the - navigation stack. - - \sa PdfPageNavigator::back(), currentPage, backEnabled - */ - function back() { pageNavigator.back() } - - /*! - \qmlmethod void PdfScrollablePageView::forward() - - Scrolls the view to the page that the user was viewing when the back() - method was called; or does nothing if there is no "next" location on the - navigation stack. - - \sa PdfPageNavigator::forward(), currentPage - */ - function forward() { pageNavigator.forward() } - - /*! - \qmlmethod void PdfScrollablePageView::goToPage(int page) - - Changes the view to the \a page, if possible. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToPage(page) { - if (page === pageNavigator.currentPage) - return - goToLocation(page, Qt.point(0, 0), 0) - } - - /*! - \qmlmethod void PdfScrollablePageView::goToLocation(int page, point location, real zoom) - - Scrolls the view to the \a location on the \a page, if possible, - and sets the \a zoom level. - - \sa PdfPageNavigator::jump(), currentPage - */ - function goToLocation(page, location, zoom) { - if (zoom > 0) - root.renderScale = zoom - pageNavigator.jump(page, location, zoom) - } - - // -------------------------------- - // page scaling - - /*! - \qmlproperty real PdfScrollablePageView::renderScale - - This property holds the ratio of pixels to points. The default is \c 1, - meaning one point (1/72 of an inch) equals 1 logical pixel. - */ - property real renderScale: 1 - - /*! - \qmlproperty real PdfScrollablePageView::pageRotation - - This property holds the clockwise rotation of the pages. - - The default value is \c 0 degrees (that is, no rotation relative to the - orientation of the pages as stored in the PDF file). - */ - property real pageRotation: 0 - - /*! - \qmlproperty size PdfScrollablePageView::sourceSize - - This property holds the scaled width and height of the full-frame image. - - \sa {QtQuick::Image::sourceSize}{Image.sourceSize} - */ - property alias sourceSize: image.sourceSize - - /*! - \qmlmethod void PdfScrollablePageView::resetScale() - - Sets \l renderScale back to its default value of \c 1. - */ - function resetScale() { - paper.scale = 1 - root.renderScale = 1 - } - - /*! - \qmlmethod void PdfScrollablePageView::scaleToWidth(real width, real height) - - Sets \l renderScale such that the width of the first page will fit into a - viewport with the given \a width and \a height. If the page is not rotated, - it will be scaled so that its width fits \a width. If it is rotated +/- 90 - degrees, it will be scaled so that its width fits \a height. - */ - function scaleToWidth(width, height) { - const pagePointSize = document.pagePointSize(pageNavigator.currentPage) - root.renderScale = root.width / (paper.rot90 ? pagePointSize.height : pagePointSize.width) - console.log(lcSPV, "scaling", pagePointSize, "to fit", root.width, "rotated?", paper.rot90, "scale", root.renderScale) - root.contentX = 0 - root.contentY = 0 - } - - /*! - \qmlmethod void PdfScrollablePageView::scaleToPage(real width, real height) - - Sets \l renderScale such that the whole first page will fit into a viewport - with the given \a width and \a height. The resulting \l renderScale depends - on \l pageRotation: the page will fit into the viewport at a larger size if - it is first rotated to have a matching aspect ratio. - */ - function scaleToPage(width, height) { - const pagePointSize = document.pagePointSize(pageNavigator.currentPage) - root.renderScale = Math.min( - root.width / (paper.rot90 ? pagePointSize.height : pagePointSize.width), - root.height / (paper.rot90 ? pagePointSize.width : pagePointSize.height) ) - root.contentX = 0 - root.contentY = 0 - } - - // -------------------------------- - // text search - - /*! - \qmlproperty PdfSearchModel PdfScrollablePageView::searchModel - - This property holds a PdfSearchModel containing the list of search results - for a given \l searchString. - - \sa PdfSearchModel - */ - property alias searchModel: searchModel - - /*! - \qmlproperty string PdfScrollablePageView::searchString - - This property holds the search string that the user may choose to search - for. It is typically used in a binding to the \c text property of a - TextField. - - \sa searchModel - */ - property alias searchString: searchModel.searchString - - /*! - \qmlmethod void PdfScrollablePageView::searchBack() - - Decrements the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the previous search result. - */ - function searchBack() { --searchModel.currentResult } - - /*! - \qmlmethod void PdfScrollablePageView::searchForward() - - Increments the - \l{PdfSearchModel::currentResult}{searchModel's current result} - so that the view will jump to the next search result. - */ - function searchForward() { ++searchModel.currentResult } - - // -------------------------------- - // implementation - id: root - PdfStyle { id: style } - contentWidth: paper.width - contentHeight: paper.height - ScrollBar.vertical: ScrollBar { - onActiveChanged: - if (!active ) { - const currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, - (root.contentY + root.height / 2) / root.renderScale) - pageNavigator.update(pageNavigator.currentPage, currentLocation, root.renderScale) - } - } - ScrollBar.horizontal: ScrollBar { - onActiveChanged: - if (!active ) { - const currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, - (root.contentY + root.height / 2) / root.renderScale) - pageNavigator.update(pageNavigator.currentPage, currentLocation, root.renderScale) - } - } - - onRenderScaleChanged: { - paper.scale = 1 - const currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, - (root.contentY + root.height / 2) / root.renderScale) - pageNavigator.update(pageNavigator.currentPage, currentLocation, root.renderScale) - } - - PdfSearchModel { - id: searchModel - document: root.document === undefined ? null : root.document - onCurrentResultChanged: pageNavigator.jump(currentResultLink) - } - - PdfPageNavigator { - id: pageNavigator - onJumped: function(current) { - root.renderScale = current.zoom - const dx = Math.max(0, current.location.x * root.renderScale - root.width / 2) - root.contentX - const dy = Math.max(0, current.location.y * root.renderScale - root.height / 2) - root.contentY - // don't jump if location is in the viewport already, i.e. if the "error" between desired and actual contentX/Y is small - if (Math.abs(dx) > root.width / 3) - root.contentX += dx - if (Math.abs(dy) > root.height / 3) - root.contentY += dy - console.log(lcSPV, "going to zoom", current.zoom, "loc", current.location, - "on page", current.page, "ended up @", root.contentX + ", " + root.contentY) - } - onCurrentPageChanged: searchModel.currentPage = currentPage - - property url documentSource: root.document.source - onDocumentSourceChanged: { - pageNavigator.clear() - root.resetScale() - root.contentX = 0 - root.contentY = 0 - } - } - - LoggingCategory { - id: lcSPV - name: "qt.pdf.singlepageview" - } - - Rectangle { - id: paper - width: rot90 ? image.height : image.width - height: rot90 ? image.width : image.height - property real rotationModulus: Math.abs(root.pageRotation % 180) - property bool rot90: rotationModulus > 45 && rotationModulus < 135 - property real minScale: 0.1 - property real maxScale: 10 - - PdfPageImage { - id: image - document: root.document - currentFrame: pageNavigator.currentPage - asynchronous: true - fillMode: Image.PreserveAspectFit - rotation: root.pageRotation - anchors.centerIn: parent - property real pageScale: image.paintedWidth / document.pagePointSize(pageNavigator.currentPage).width - width: document.pagePointSize(pageNavigator.currentPage).width * root.renderScale - height: document.pagePointSize(pageNavigator.currentPage).height * root.renderScale - sourceSize.width: width * Screen.devicePixelRatio - sourceSize.height: 0 - - Shape { - anchors.fill: parent - visible: image.status === Image.Ready - ShapePath { - strokeWidth: -1 - fillColor: style.pageSearchResultsColor - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: searchModel.currentPageBoundingPolygons - } - } - ShapePath { - strokeWidth: style.currentSearchResultStrokeWidth - strokeColor: style.currentSearchResultStrokeColor - fillColor: "transparent" - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: searchModel.currentResultBoundingPolygons - } - } - ShapePath { - fillColor: style.selectionColor - scale: Qt.size(image.pageScale, image.pageScale) - PathMultiline { - paths: selection.geometry - } - } - } - - Repeater { - model: PdfLinkModel { - id: linkModel - document: root.document - page: pageNavigator.currentPage - } - delegate: PdfLinkDelegate { - x: rectangle.x * image.pageScale - y: rectangle.y * image.pageScale - width: rectangle.width * image.pageScale - height: rectangle.height * image.pageScale - visible: image.status === Image.Ready - onTapped: - (link) => { - if (link.page >= 0) - pageNavigator.jump(link.page, link.location, link.zoom) - else - Qt.openUrlExternally(url) - } - } - } - DragHandler { - id: textSelectionDrag - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - target: null - } - TapHandler { - id: mouseClickHandler - acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus - } - TapHandler { - id: touchTapHandler - acceptedDevices: PointerDevice.TouchScreen - onTapped: { - selection.clear() - selection.focus = true - } - } - } - - PdfSelection { - id: selection - anchors.fill: parent - document: root.document - page: pageNavigator.currentPage - renderScale: image.pageScale == 0 ? 1.0 : image.pageScale - from: textSelectionDrag.centroid.pressPosition - to: textSelectionDrag.centroid.position - hold: !textSelectionDrag.active && !mouseClickHandler.pressed - focus: true - } - - PinchHandler { - id: pinch - minimumScale: paper.minScale / root.renderScale - maximumScale: Math.max(1, paper.maxScale / root.renderScale) - minimumRotation: 0 - maximumRotation: 0 - onActiveChanged: - if (!active) { - const centroidInPoints = Qt.point(pinch.centroid.position.x / root.renderScale, - pinch.centroid.position.y / root.renderScale) - const centroidInFlickable = root.mapFromItem(paper, pinch.centroid.position.x, pinch.centroid.position.y) - const newSourceWidth = image.sourceSize.width * paper.scale - const ratio = newSourceWidth / image.sourceSize.width - console.log(lcSPV, "pinch ended with centroid", pinch.centroid.position, centroidInPoints, "wrt flickable", centroidInFlickable, - "page at", paper.x.toFixed(2), paper.y.toFixed(2), - "contentX/Y were", root.contentX.toFixed(2), root.contentY.toFixed(2)) - if (ratio > 1.1 || ratio < 0.9) { - const centroidOnPage = Qt.point(centroidInPoints.x * root.renderScale * ratio, centroidInPoints.y * root.renderScale * ratio) - paper.scale = 1 - paper.x = 0 - paper.y = 0 - root.contentX = centroidOnPage.x - centroidInFlickable.x - root.contentY = centroidOnPage.y - centroidInFlickable.y - root.renderScale *= ratio // onRenderScaleChanged calls pageNavigator.update() so we don't need to here - console.log(lcSPV, "contentX/Y adjusted to", root.contentX.toFixed(2), root.contentY.toFixed(2)) - } else { - paper.x = 0 - paper.y = 0 - } - } - grabPermissions: PointerHandler.CanTakeOverFromAnything - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfStyle.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfStyle.qml deleted file mode 100644 index a222761..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/PdfStyle.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only -import QtQuick - -/*! - \qmltype PdfStyle - \inqmlmodule QtQuick.Pdf - \brief A styling interface for the PDF viewer components. - - PdfStyle provides properties to modify the appearance of PdfMultiPageView, - PdfScrollablePageView, and PdfPageView. - - Default styles are provided to match the - \l {Styling Qt Quick Controls}{styles in Qt Quick Controls}. - \l {Using File Selectors with Qt Quick Controls}{File selectors} - are used to load the PDF style corresponding to the Controls style in use. - Custom styles are possible, using different \l {QFileSelector}{file selectors}. -*/ -QtObject { - /*! \internal - \qmlproperty SystemPalette PdfStyle::palette - */ - property SystemPalette palette: SystemPalette { } - - /*! \internal - \qmlmethod color PdfStyle::withAlpha() - */ - function withAlpha(color, alpha) { - return Qt.hsla(color.hslHue, color.hslSaturation, color.hslLightness, alpha) - } - - /*! - \qmlproperty color PdfStyle::selectionColor - - The color of translucent rectangles that are overlaid on - \l {PdfMultiPageView::selectedText}{selected text}. - - \sa PdfSelection - */ - property color selectionColor: withAlpha(palette.highlight, 0.5) - - /*! - \qmlproperty color PdfStyle::pageSearchResultsColor - - The color of translucent rectangles that are overlaid on text that - matches the \l {PdfMultiPageView::searchString}{search string}. - - \sa PdfSearchModel - */ - property color pageSearchResultsColor: "#80B0C4DE" - - /*! - \qmlproperty color PdfStyle::currentSearchResultStrokeColor - - The color of the box outline around the - \l {PdfSearchModel::currentResult}{current search result}. - - \sa PdfMultiPageView::searchBack(), PdfMultiPageView::searchForward(), PdfSearchModel::currentResult - */ - property color currentSearchResultStrokeColor: "cyan" - - /*! - \qmlproperty real PdfStyle::currentSearchResultStrokeWidth - - The line width of the box outline around the - \l {PdfSearchModel::currentResult}{current search result}. - - \sa PdfMultiPageView::searchBack(), PdfMultiPageView::searchForward(), PdfSearchModel::currentResult - */ - property real currentSearchResultStrokeWidth: 2 -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/libpdfquickplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/libpdfquickplugin.so deleted file mode 100755 index 8c73260..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/libpdfquickplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/plugins.qmltypes deleted file mode 100644 index e9cea52..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/plugins.qmltypes +++ /dev/null @@ -1,755 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qpdfbookmarkmodel.h" - name: "QPdfBookmarkModel" - accessSemantics: "reference" - prototype: "QAbstractItemModel" - Enum { - name: "Role" - type: "int" - values: ["Title", "Level", "Page", "Location", "Zoom", "NRoles"] - } - Property { - name: "document" - type: "QPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Signal { - name: "documentChanged" - Parameter { name: "document"; type: "QPdfDocument"; isPointer: true } - } - Method { name: "_q_documentStatusChanged" } - } - Component { - file: "qpdfdocument.h" - name: "QPdfDocument" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Status" - values: ["Null", "Loading", "Ready", "Unloading", "Error"] - } - Enum { - name: "Error" - values: [ - "None", - "Unknown", - "DataNotYetAvailable", - "FileNotFound", - "InvalidFileFormat", - "IncorrectPassword", - "UnsupportedSecurityScheme" - ] - } - Enum { - name: "MetaDataField" - values: [ - "Title", - "Subject", - "Author", - "Keywords", - "Producer", - "Creator", - "CreationDate", - "ModificationDate" - ] - } - Enum { - name: "PageModelRole" - values: ["Label", "PointSize", "NRoles"] - } - Property { - name: "pageCount" - type: "int" - read: "pageCount" - notify: "pageCountChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "password" - type: "QString" - read: "password" - write: "setPassword" - notify: "passwordChanged" - index: 1 - isFinal: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "pageModel" - type: "QAbstractListModel" - isPointer: true - read: "pageModel" - notify: "pageModelChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { name: "passwordChanged" } - Signal { name: "passwordRequired" } - Signal { - name: "statusChanged" - Parameter { name: "status"; type: "QPdfDocument::Status" } - } - Signal { - name: "pageCountChanged" - Parameter { name: "pageCount"; type: "int" } - } - Signal { name: "pageModelChanged" } - Method { name: "_q_tryLoadingWithSizeFromContentHeader" } - Method { name: "_q_copyFromSequentialSourceDevice" } - Method { - name: "pagePointSize" - type: "QSizeF" - Parameter { name: "page"; type: "int" } - } - Method { - name: "pageLabel" - type: "QString" - Parameter { name: "page"; type: "int" } - } - Method { - name: "pageIndexForLabel" - type: "int" - Parameter { name: "label"; type: "QString" } - } - Method { - name: "getSelection" - type: "QPdfSelection" - Parameter { name: "page"; type: "int" } - Parameter { name: "start"; type: "QPointF" } - Parameter { name: "end"; type: "QPointF" } - } - Method { - name: "getSelectionAtIndex" - type: "QPdfSelection" - Parameter { name: "page"; type: "int" } - Parameter { name: "startIndex"; type: "int" } - Parameter { name: "maxLength"; type: "int" } - } - Method { - name: "getAllText" - type: "QPdfSelection" - Parameter { name: "page"; type: "int" } - } - } - Component { - file: "private/qquickpdfpagenavigator_p.h" - name: "QPdfLink" - accessSemantics: "value" - exports: ["QtQuick.Pdf/pdfLink 6.4"] - isCreatable: false - exportMetaObjectRevisions: [1540] - Property { name: "valid"; type: "bool"; read: "isValid"; index: 0; isReadonly: true } - Property { name: "page"; type: "int"; read: "page"; index: 1; isReadonly: true } - Property { name: "location"; type: "QPointF"; read: "location"; index: 2; isReadonly: true } - Property { name: "zoom"; type: "double"; read: "zoom"; index: 3; isReadonly: true } - Property { name: "url"; type: "QUrl"; read: "url"; index: 4; isReadonly: true } - Property { - name: "contextBefore" - type: "QString" - read: "contextBefore" - index: 5 - isReadonly: true - } - Property { name: "contextAfter"; type: "QString"; read: "contextAfter"; index: 6; isReadonly: true } - Property { - name: "rectangles" - type: "QRectF" - isList: true - read: "rectangles" - index: 7 - isReadonly: true - } - Method { name: "toString"; type: "QString" } - Method { - name: "copyToClipboard" - Parameter { name: "mode"; type: "QClipboard::Mode" } - } - Method { name: "copyToClipboard"; isCloned: true } - } - Component { - file: "qpdflinkmodel.h" - name: "QPdfLinkModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - Enum { - name: "Role" - values: [ - "Link", - "Rectangle", - "Url", - "Page", - "Location", - "Zoom", - "NRoles" - ] - } - Property { - name: "document" - type: "QPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Property { - name: "page" - type: "int" - read: "page" - write: "setPage" - notify: "pageChanged" - index: 1 - } - Signal { name: "documentChanged" } - Signal { - name: "pageChanged" - Parameter { name: "page"; type: "int" } - } - Method { - name: "setDocument" - Parameter { name: "document"; type: "QPdfDocument"; isPointer: true } - } - Method { - name: "setPage" - Parameter { name: "page"; type: "int" } - } - Method { - name: "onStatusChanged" - Parameter { name: "status"; type: "QPdfDocument::Status" } - } - } - Component { - file: "qpdfpagenavigator.h" - name: "QPdfPageNavigator" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "currentPage" - type: "int" - read: "currentPage" - notify: "currentPageChanged" - index: 0 - isReadonly: true - } - Property { - name: "currentLocation" - type: "QPointF" - read: "currentLocation" - notify: "currentLocationChanged" - index: 1 - isReadonly: true - } - Property { - name: "currentZoom" - type: "double" - read: "currentZoom" - notify: "currentZoomChanged" - index: 2 - isReadonly: true - } - Property { - name: "backAvailable" - type: "bool" - read: "backAvailable" - notify: "backAvailableChanged" - index: 3 - isReadonly: true - } - Property { - name: "forwardAvailable" - type: "bool" - read: "forwardAvailable" - notify: "forwardAvailableChanged" - index: 4 - isReadonly: true - } - Signal { - name: "currentPageChanged" - Parameter { name: "page"; type: "int" } - } - Signal { - name: "currentLocationChanged" - Parameter { name: "location"; type: "QPointF" } - } - Signal { - name: "currentZoomChanged" - Parameter { name: "zoom"; type: "double" } - } - Signal { - name: "backAvailableChanged" - Parameter { name: "available"; type: "bool" } - } - Signal { - name: "forwardAvailableChanged" - Parameter { name: "available"; type: "bool" } - } - Signal { - name: "jumped" - Parameter { name: "current"; type: "QPdfLink" } - } - Method { name: "clear" } - Method { - name: "jump" - Parameter { name: "destination"; type: "QPdfLink" } - } - Method { - name: "jump" - Parameter { name: "page"; type: "int" } - Parameter { name: "location"; type: "QPointF" } - Parameter { name: "zoom"; type: "double" } - } - Method { - name: "jump" - isCloned: true - Parameter { name: "page"; type: "int" } - Parameter { name: "location"; type: "QPointF" } - } - Method { - name: "update" - Parameter { name: "page"; type: "int" } - Parameter { name: "location"; type: "QPointF" } - Parameter { name: "zoom"; type: "double" } - } - Method { name: "forward" } - Method { name: "back" } - } - Component { - file: "qpdfsearchmodel.h" - name: "QPdfSearchModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - Enum { - name: "Role" - type: "int" - values: [ - "Page", - "IndexOnPage", - "Location", - "ContextBefore", - "ContextAfter", - "NRoles" - ] - } - Property { - name: "document" - type: "QPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Property { - name: "searchString" - type: "QString" - read: "searchString" - write: "setSearchString" - notify: "searchStringChanged" - index: 1 - } - Signal { name: "documentChanged" } - Signal { name: "searchStringChanged" } - Method { - name: "setSearchString" - Parameter { name: "searchString"; type: "QString" } - } - Method { - name: "setDocument" - Parameter { name: "document"; type: "QPdfDocument"; isPointer: true } - } - } - Component { - file: "private/qquickpdfbookmarkmodel_p.h" - name: "QQuickPdfBookmarkModel" - accessSemantics: "reference" - prototype: "QPdfBookmarkModel" - exports: ["QtQuick.Pdf/PdfBookmarkModel 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "document" - type: "QQuickPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Signal { name: "documentChanged" } - } - Component { - file: "private/qquickpdfdocument_p.h" - name: "QQuickPdfDocument" - accessSemantics: "reference" - prototype: "QObject" - extension: "QPdfDocument" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Pdf/PdfDocument 5.15", - "QtQuick.Pdf/PdfDocument 6.0" - ] - exportMetaObjectRevisions: [1295, 1536] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - isFinal: true - } - Property { - name: "maxPageWidth" - type: "double" - read: "maxPageWidth" - notify: "metaDataChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "maxPageHeight" - type: "double" - read: "maxPageHeight" - notify: "metaDataChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "error" - type: "QString" - read: "error" - notify: "errorChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "title" - type: "QString" - read: "title" - notify: "metaDataChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "subject" - type: "QString" - read: "subject" - notify: "metaDataChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "author" - type: "QString" - read: "author" - notify: "metaDataChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "keywords" - type: "QString" - read: "keywords" - notify: "metaDataChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "producer" - type: "QString" - read: "producer" - notify: "metaDataChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "creator" - type: "QString" - read: "creator" - notify: "metaDataChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "creationDate" - type: "QDateTime" - read: "creationDate" - notify: "metaDataChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "modificationDate" - type: "QDateTime" - read: "modificationDate" - notify: "metaDataChanged" - index: 11 - isReadonly: true - isFinal: true - } - Signal { name: "sourceChanged" } - Signal { name: "errorChanged" } - Signal { name: "metaDataChanged" } - } - Component { - file: "private/qquickpdflinkmodel_p.h" - name: "QQuickPdfLinkModel" - accessSemantics: "reference" - prototype: "QPdfLinkModel" - exports: [ - "QtQuick.Pdf/PdfLinkModel 5.15", - "QtQuick.Pdf/PdfLinkModel 6.0", - "QtQuick.Pdf/PdfLinkModel 6.4" - ] - exportMetaObjectRevisions: [1295, 1536, 1540] - Property { - name: "document" - type: "QQuickPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - } - Component { - file: "private/qquickpdfpageimage_p.h" - name: "QQuickPdfPageImage" - accessSemantics: "reference" - prototype: "QQuickImage" - exports: [ - "QtQuick.Pdf/PdfPageImage 6.4", - "QtQuick.Pdf/PdfPageImage 6.7" - ] - exportMetaObjectRevisions: [1540, 1543] - Property { - name: "document" - type: "QQuickPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - isFinal: true - } - Signal { name: "documentChanged" } - } - Component { - file: "private/qquickpdfpagenavigator_p.h" - name: "QQuickPdfPageNavigator" - accessSemantics: "reference" - prototype: "QObject" - extension: "QPdfPageNavigator" - exports: [ - "QtQuick.Pdf/PdfPageNavigator 5.15", - "QtQuick.Pdf/PdfPageNavigator 6.0" - ] - exportMetaObjectRevisions: [1295, 1536] - } - Component { - file: "private/qquickpdfsearchmodel_p.h" - name: "QQuickPdfSearchModel" - accessSemantics: "reference" - prototype: "QPdfSearchModel" - exports: [ - "QtQuick.Pdf/PdfSearchModel 5.15", - "QtQuick.Pdf/PdfSearchModel 6.0", - "QtQuick.Pdf/PdfSearchModel 6.4" - ] - exportMetaObjectRevisions: [1295, 1536, 1540] - Property { - name: "document" - type: "QQuickPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Property { - name: "currentPage" - type: "int" - read: "currentPage" - write: "setCurrentPage" - notify: "currentPageChanged" - index: 1 - } - Property { - name: "currentResult" - type: "int" - read: "currentResult" - write: "setCurrentResult" - notify: "currentResultChanged" - index: 2 - } - Property { - name: "currentResultLink" - type: "QPdfLink" - read: "currentResultLink" - notify: "currentResultLinkChanged" - index: 3 - isReadonly: true - } - Property { - name: "currentPageBoundingPolygons" - type: "QPolygonF" - isList: true - read: "currentPageBoundingPolygons" - notify: "currentPageBoundingPolygonsChanged" - index: 4 - isReadonly: true - } - Property { - name: "currentResultBoundingPolygons" - type: "QPolygonF" - isList: true - read: "currentResultBoundingPolygons" - notify: "currentResultBoundingPolygonsChanged" - index: 5 - isReadonly: true - } - Property { - name: "currentResultBoundingRect" - type: "QRectF" - read: "currentResultBoundingRect" - notify: "currentResultBoundingRectChanged" - index: 6 - isReadonly: true - } - Signal { name: "currentPageChanged" } - Signal { name: "currentResultChanged" } - Signal { name: "currentResultLinkChanged" } - Signal { name: "currentPageBoundingPolygonsChanged" } - Signal { name: "currentResultBoundingPolygonsChanged" } - Signal { name: "currentResultBoundingRectChanged" } - Method { - name: "boundingPolygonsOnPage" - type: "QPolygonF" - isList: true - Parameter { name: "page"; type: "int" } - } - } - Component { - file: "private/qquickpdfselection_p.h" - name: "QQuickPdfSelection" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Pdf/PdfSelection 5.15", - "QtQuick.Pdf/PdfSelection 6.0", - "QtQuick.Pdf/PdfSelection 6.3", - "QtQuick.Pdf/PdfSelection 6.7" - ] - exportMetaObjectRevisions: [1295, 1536, 1539, 1543] - Property { - name: "document" - type: "QQuickPdfDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Property { - name: "page" - type: "int" - read: "page" - write: "setPage" - notify: "pageChanged" - index: 1 - } - Property { - name: "renderScale" - type: "double" - read: "renderScale" - write: "setRenderScale" - notify: "renderScaleChanged" - index: 2 - } - Property { - name: "from" - type: "QPointF" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 3 - } - Property { name: "to"; type: "QPointF"; read: "to"; write: "setTo"; notify: "toChanged"; index: 4 } - Property { - name: "hold" - type: "bool" - read: "hold" - write: "setHold" - notify: "holdChanged" - index: 5 - } - Property { - name: "text" - type: "QString" - read: "text" - notify: "textChanged" - index: 6 - isReadonly: true - } - Property { - name: "geometry" - type: "QPolygonF" - isList: true - read: "geometry" - notify: "selectedAreaChanged" - index: 7 - isReadonly: true - } - Signal { name: "documentChanged" } - Signal { name: "pageChanged" } - Signal { name: "renderScaleChanged" } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "holdChanged" } - Signal { name: "textChanged" } - Signal { name: "selectedAreaChanged" } - Method { name: "clear" } - Method { name: "selectAll" } - Method { name: "copyToClipboard" } - Method { - name: "inputMethodQuery" - type: "QVariant" - Parameter { name: "query"; type: "Qt::InputMethodQuery" } - Parameter { name: "argument"; type: "QVariant" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/qmldir deleted file mode 100644 index 9004a9e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Pdf/qmldir +++ /dev/null @@ -1,22 +0,0 @@ -module QtQuick.Pdf -linktarget Qt6::PdfQuickplugin -optional plugin pdfquickplugin -classname QtQuick_PdfPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Pdf/ -PdfStyle 6.0 +Material/PdfStyle.qml -PdfStyle 5.0 +Material/PdfStyle.qml -PdfStyle 6.0 +Universal/PdfStyle.qml -PdfStyle 5.0 +Universal/PdfStyle.qml -PdfLinkDelegate 6.0 PdfLinkDelegate.qml -PdfLinkDelegate 5.0 PdfLinkDelegate.qml -PdfMultiPageView 6.0 PdfMultiPageView.qml -PdfMultiPageView 5.0 PdfMultiPageView.qml -PdfPageView 6.0 PdfPageView.qml -PdfPageView 5.0 PdfPageView.qml -PdfScrollablePageView 6.0 PdfScrollablePageView.qml -PdfScrollablePageView 5.0 PdfScrollablePageView.qml -PdfStyle 6.0 PdfStyle.qml -PdfStyle 5.0 PdfStyle.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so deleted file mode 100755 index b39ad26..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/plugins.qmltypes deleted file mode 100644 index 16b8927..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/plugins.qmltypes +++ /dev/null @@ -1,68 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by: -// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Scene2D 2.15' - -Module { - dependencies: ["Qt3D.Core 2.0", "Qt3D.Render 2.0"] - Component { - name: "Qt3DRender::Quick::QScene2D" - defaultProperty: "item" - prototype: "Qt3DCore::QNode" - exports: ["QtQuick.Scene2D/Scene2D 2.9"] - exportMetaObjectRevisions: [209] - Enum { - name: "RenderPolicy" - values: { - "Continuous": 0, - "SingleShot": 1 - } - } - Property { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } - Property { name: "renderPolicy"; type: "QScene2D::RenderPolicy" } - Property { name: "item"; type: "QQuickItem"; isPointer: true } - Property { name: "mouseEnabled"; type: "bool" } - Signal { - name: "outputChanged" - Parameter { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } - } - Signal { - name: "renderPolicyChanged" - Parameter { name: "policy"; type: "QScene2D::RenderPolicy" } - } - Signal { - name: "itemChanged" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Signal { - name: "mouseEnabledChanged" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setOutput" - Parameter { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } - } - Method { - name: "setRenderPolicy" - Parameter { name: "policy"; type: "QScene2D::RenderPolicy" } - } - Method { - name: "setItem" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "setMouseEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Property { - name: "entities" - revision: 209 - type: "Qt3DCore::QEntity" - isList: true - isReadonly: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/qmldir deleted file mode 100644 index 8a22233..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene2D/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtQuick.Scene2D -linktarget Qt6::qtquickscene2dplugin -plugin qtquickscene2dplugin -classname QtQuickScene2DPlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtQuick/Scene2D/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so deleted file mode 100755 index 0b81a28..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/plugins.qmltypes deleted file mode 100644 index f0ce9a3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/plugins.qmltypes +++ /dev/null @@ -1,87 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by: -// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Scene3D 2.15' - -Module { - dependencies: ["Qt3D.Core 2.0", "QtQuick 2.0"] - Component { - name: "Qt3DRender::Scene3DItem" - defaultProperty: "entity" - prototype: "QQuickItem" - exports: [ - "QtQuick.Scene3D/Scene3D 2.0", - "QtQuick.Scene3D/Scene3D 2.14" - ] - exportMetaObjectRevisions: [0, 14] - Enum { - name: "CameraAspectRatioMode" - values: { - "AutomaticAspectRatio": 0, - "UserAspectRatio": 1 - } - } - Enum { - name: "CompositingMode" - values: { - "FBO": 0, - "Underlay": 1 - } - } - Property { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } - Property { name: "aspects"; type: "QStringList" } - Property { name: "multisample"; type: "bool" } - Property { name: "cameraAspectRatioMode"; type: "CameraAspectRatioMode" } - Property { name: "hoverEnabled"; type: "bool" } - Property { name: "compositingMode"; revision: 14; type: "CompositingMode" } - Signal { - name: "cameraAspectRatioModeChanged" - Parameter { name: "mode"; type: "CameraAspectRatioMode" } - } - Method { - name: "setAspects" - Parameter { name: "aspects"; type: "QStringList" } - } - Method { - name: "setEntity" - Parameter { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } - } - Method { - name: "setCameraAspectRatioMode" - Parameter { name: "mode"; type: "CameraAspectRatioMode" } - } - Method { - name: "setHoverEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setCompositingMode" - Parameter { name: "mode"; type: "CompositingMode" } - } - Method { - name: "setItemAreaAndDevicePixelRatio" - Parameter { name: "area"; type: "QSize" } - Parameter { name: "devicePixelRatio"; type: "double" } - } - } - Component { - name: "Qt3DRender::Scene3DView" - defaultProperty: "entity" - prototype: "QQuickItem" - exports: ["QtQuick.Scene3D/Scene3DView 2.14"] - exportMetaObjectRevisions: [0] - Property { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } - Property { name: "scene3D"; type: "Qt3DRender::Scene3DItem"; isPointer: true } - Method { - name: "setEntity" - Parameter { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } - } - Method { - name: "setScene3D" - Parameter { name: "scene3D"; type: "Scene3DItem"; isPointer: true } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/qmldir deleted file mode 100644 index 6dcd613..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Scene3D/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtQuick.Scene3D -linktarget Qt6::qtquickscene3dplugin -plugin qtquickscene3dplugin -classname QtQuickScene3DPlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtQuick/Scene3D/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/libqmlshapesplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/libqmlshapesplugin.so deleted file mode 100755 index 2b08c54..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/libqmlshapesplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/plugins.qmltypes deleted file mode 100644 index d4db657..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/plugins.qmltypes +++ /dev/null @@ -1,509 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickshape_p.h" - name: "QQuickShape" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Shapes/Shape 1.0", - "QtQuick.Shapes/Shape 1.11", - "QtQuick.Shapes/Shape 2.0", - "QtQuick.Shapes/Shape 2.1", - "QtQuick.Shapes/Shape 2.4", - "QtQuick.Shapes/Shape 2.7", - "QtQuick.Shapes/Shape 2.11", - "QtQuick.Shapes/Shape 6.0", - "QtQuick.Shapes/Shape 6.3", - "QtQuick.Shapes/Shape 6.6", - "QtQuick.Shapes/Shape 6.7" - ] - exportMetaObjectRevisions: [ - 256, - 267, - 512, - 513, - 516, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - Enum { - name: "RendererType" - values: [ - "UnknownRenderer", - "GeometryRenderer", - "NvprRenderer", - "SoftwareRenderer", - "CurveRenderer" - ] - } - Enum { - name: "Status" - values: ["Null", "Ready", "Processing"] - } - Enum { - name: "ContainsMode" - values: ["BoundingRectContains", "FillContains"] - } - Enum { - name: "FillMode" - values: [ - "NoResize", - "PreserveAspectFit", - "PreserveAspectCrop", - "Stretch" - ] - } - Enum { - name: "HAlignment" - values: ["AlignLeft", "AlignRight", "AlignHCenter"] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Property { - name: "rendererType" - type: "RendererType" - read: "rendererType" - notify: "rendererChanged" - index: 0 - isReadonly: true - } - Property { - name: "asynchronous" - type: "bool" - read: "asynchronous" - write: "setAsynchronous" - notify: "asynchronousChanged" - index: 1 - } - Property { - name: "vendorExtensionsEnabled" - type: "bool" - read: "vendorExtensionsEnabled" - write: "setVendorExtensionsEnabled" - notify: "vendorExtensionsEnabledChanged" - index: 2 - } - Property { - name: "preferredRendererType" - revision: 1542 - type: "RendererType" - read: "preferredRendererType" - write: "setPreferredRendererType" - notify: "preferredRendererTypeChanged" - index: 3 - isFinal: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 4 - isReadonly: true - } - Property { - name: "containsMode" - revision: 267 - type: "ContainsMode" - read: "containsMode" - write: "setContainsMode" - notify: "containsModeChanged" - index: 5 - } - Property { - name: "boundingRect" - revision: 1542 - type: "QRectF" - read: "boundingRect" - notify: "boundingRectChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "fillMode" - revision: 1543 - type: "FillMode" - read: "fillMode" - write: "setFillMode" - notify: "fillModeChanged" - index: 7 - isFinal: true - } - Property { - name: "horizontalAlignment" - revision: 1543 - type: "HAlignment" - read: "horizontalAlignment" - write: "setHorizontalAlignment" - notify: "horizontalAlignmentChanged" - index: 8 - isFinal: true - } - Property { - name: "verticalAlignment" - revision: 1543 - type: "VAlignment" - read: "verticalAlignment" - write: "setVerticalAlignment" - notify: "verticalAlignmentChanged" - index: 9 - isFinal: true - } - Property { name: "data"; type: "QObject"; isList: true; read: "data"; index: 10; isReadonly: true } - Signal { name: "rendererChanged" } - Signal { name: "asynchronousChanged" } - Signal { name: "vendorExtensionsEnabledChanged" } - Signal { name: "statusChanged" } - Signal { name: "preferredRendererTypeChanged"; revision: 1542 } - Signal { name: "boundingRectChanged"; revision: 1542 } - Signal { name: "containsModeChanged"; revision: 267 } - Signal { name: "fillModeChanged"; revision: 1543 } - Signal { name: "horizontalAlignmentChanged"; revision: 1543 } - Signal { name: "verticalAlignmentChanged"; revision: 1543 } - Method { name: "_q_shapePathChanged" } - } - Component { - file: "private/qquickshape_p.h" - name: "QQuickShapeConicalGradient" - accessSemantics: "reference" - defaultProperty: "stops" - prototype: "QQuickShapeGradient" - exports: [ - "QtQuick.Shapes/ConicalGradient 1.0", - "QtQuick.Shapes/ConicalGradient 2.0", - "QtQuick.Shapes/ConicalGradient 2.12", - "QtQuick.Shapes/ConicalGradient 6.0" - ] - exportMetaObjectRevisions: [256, 512, 524, 1536] - Property { - name: "centerX" - type: "double" - read: "centerX" - write: "setCenterX" - notify: "centerXChanged" - index: 0 - } - Property { - name: "centerY" - type: "double" - read: "centerY" - write: "setCenterY" - notify: "centerYChanged" - index: 1 - } - Property { - name: "angle" - type: "double" - read: "angle" - write: "setAngle" - notify: "angleChanged" - index: 2 - } - Signal { name: "centerXChanged" } - Signal { name: "centerYChanged" } - Signal { name: "angleChanged" } - } - Component { - file: "private/qquickshape_p.h" - name: "QQuickShapeGradient" - accessSemantics: "reference" - defaultProperty: "stops" - prototype: "QQuickGradient" - exports: [ - "QtQuick.Shapes/ShapeGradient 1.0", - "QtQuick.Shapes/ShapeGradient 2.0", - "QtQuick.Shapes/ShapeGradient 2.12", - "QtQuick.Shapes/ShapeGradient 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [256, 512, 524, 1536] - Enum { - name: "SpreadMode" - values: ["PadSpread", "ReflectSpread", "RepeatSpread"] - } - Property { - name: "spread" - type: "SpreadMode" - read: "spread" - write: "setSpread" - notify: "spreadChanged" - index: 0 - } - Signal { name: "spreadChanged" } - } - Component { - file: "private/qquickshape_p.h" - name: "QQuickShapeLinearGradient" - accessSemantics: "reference" - defaultProperty: "stops" - prototype: "QQuickShapeGradient" - exports: [ - "QtQuick.Shapes/LinearGradient 1.0", - "QtQuick.Shapes/LinearGradient 2.0", - "QtQuick.Shapes/LinearGradient 2.12", - "QtQuick.Shapes/LinearGradient 6.0" - ] - exportMetaObjectRevisions: [256, 512, 524, 1536] - Property { name: "x1"; type: "double"; read: "x1"; write: "setX1"; notify: "x1Changed"; index: 0 } - Property { name: "y1"; type: "double"; read: "y1"; write: "setY1"; notify: "y1Changed"; index: 1 } - Property { name: "x2"; type: "double"; read: "x2"; write: "setX2"; notify: "x2Changed"; index: 2 } - Property { name: "y2"; type: "double"; read: "y2"; write: "setY2"; notify: "y2Changed"; index: 3 } - Signal { name: "x1Changed" } - Signal { name: "y1Changed" } - Signal { name: "x2Changed" } - Signal { name: "y2Changed" } - } - Component { - file: "private/qquickshape_p.h" - name: "QQuickShapePath" - accessSemantics: "reference" - defaultProperty: "pathElements" - prototype: "QQuickPath" - exports: [ - "QtQuick.Shapes/ShapePath 1.0", - "QtQuick.Shapes/ShapePath 1.14", - "QtQuick.Shapes/ShapePath 2.0", - "QtQuick.Shapes/ShapePath 2.14", - "QtQuick.Shapes/ShapePath 6.0", - "QtQuick.Shapes/ShapePath 6.6", - "QtQuick.Shapes/ShapePath 6.7" - ] - exportMetaObjectRevisions: [256, 270, 512, 526, 1536, 1542, 1543] - Enum { - name: "FillRule" - values: ["OddEvenFill", "WindingFill"] - } - Enum { - name: "JoinStyle" - values: ["MiterJoin", "BevelJoin", "RoundJoin"] - } - Enum { - name: "CapStyle" - values: ["FlatCap", "SquareCap", "RoundCap"] - } - Enum { - name: "StrokeStyle" - values: ["SolidLine", "DashLine"] - } - Enum { - name: "PathHints" - alias: "PathHint" - isFlag: true - values: [ - "PathLinear", - "PathQuadratic", - "PathConvex", - "PathFillOnRight", - "PathSolid", - "PathNonIntersecting", - "PathNonOverlappingControlPointTriangles" - ] - } - Property { - name: "strokeColor" - type: "QColor" - read: "strokeColor" - write: "setStrokeColor" - notify: "strokeColorChanged" - index: 0 - } - Property { - name: "strokeWidth" - type: "double" - read: "strokeWidth" - write: "setStrokeWidth" - notify: "strokeWidthChanged" - index: 1 - } - Property { - name: "fillColor" - type: "QColor" - read: "fillColor" - write: "setFillColor" - notify: "fillColorChanged" - index: 2 - } - Property { - name: "fillRule" - type: "FillRule" - read: "fillRule" - write: "setFillRule" - notify: "fillRuleChanged" - index: 3 - } - Property { - name: "joinStyle" - type: "JoinStyle" - read: "joinStyle" - write: "setJoinStyle" - notify: "joinStyleChanged" - index: 4 - } - Property { - name: "miterLimit" - type: "int" - read: "miterLimit" - write: "setMiterLimit" - notify: "miterLimitChanged" - index: 5 - } - Property { - name: "capStyle" - type: "CapStyle" - read: "capStyle" - write: "setCapStyle" - notify: "capStyleChanged" - index: 6 - } - Property { - name: "strokeStyle" - type: "StrokeStyle" - read: "strokeStyle" - write: "setStrokeStyle" - notify: "strokeStyleChanged" - index: 7 - } - Property { - name: "dashOffset" - type: "double" - read: "dashOffset" - write: "setDashOffset" - notify: "dashOffsetChanged" - index: 8 - } - Property { - name: "dashPattern" - type: "double" - isList: true - read: "dashPattern" - write: "setDashPattern" - notify: "dashPatternChanged" - index: 9 - } - Property { - name: "fillGradient" - type: "QQuickShapeGradient" - isPointer: true - read: "fillGradient" - write: "setFillGradient" - reset: "resetFillGradient" - index: 10 - } - Property { - name: "scale" - revision: 270 - type: "QSizeF" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 11 - } - Property { - name: "pathHints" - revision: 1543 - type: "PathHints" - read: "pathHints" - write: "setPathHints" - notify: "pathHintsChanged" - index: 12 - isFinal: true - } - Signal { name: "shapePathChanged" } - Signal { name: "strokeColorChanged" } - Signal { name: "strokeWidthChanged" } - Signal { name: "fillColorChanged" } - Signal { name: "fillRuleChanged" } - Signal { name: "joinStyleChanged" } - Signal { name: "miterLimitChanged" } - Signal { name: "capStyleChanged" } - Signal { name: "strokeStyleChanged" } - Signal { name: "dashOffsetChanged" } - Signal { name: "dashPatternChanged" } - Signal { name: "pathHintsChanged"; revision: 1543 } - Method { name: "_q_fillGradientChanged" } - } - Component { - file: "private/qquickshape_p.h" - name: "QQuickShapeRadialGradient" - accessSemantics: "reference" - defaultProperty: "stops" - prototype: "QQuickShapeGradient" - exports: [ - "QtQuick.Shapes/RadialGradient 1.0", - "QtQuick.Shapes/RadialGradient 2.0", - "QtQuick.Shapes/RadialGradient 2.12", - "QtQuick.Shapes/RadialGradient 6.0" - ] - exportMetaObjectRevisions: [256, 512, 524, 1536] - Property { - name: "centerX" - type: "double" - read: "centerX" - write: "setCenterX" - notify: "centerXChanged" - index: 0 - } - Property { - name: "centerY" - type: "double" - read: "centerY" - write: "setCenterY" - notify: "centerYChanged" - index: 1 - } - Property { - name: "centerRadius" - type: "double" - read: "centerRadius" - write: "setCenterRadius" - notify: "centerRadiusChanged" - index: 2 - } - Property { - name: "focalX" - type: "double" - read: "focalX" - write: "setFocalX" - notify: "focalXChanged" - index: 3 - } - Property { - name: "focalY" - type: "double" - read: "focalY" - write: "setFocalY" - notify: "focalYChanged" - index: 4 - } - Property { - name: "focalRadius" - type: "double" - read: "focalRadius" - write: "setFocalRadius" - notify: "focalRadiusChanged" - index: 5 - } - Signal { name: "centerXChanged" } - Signal { name: "centerYChanged" } - Signal { name: "focalXChanged" } - Signal { name: "focalYChanged" } - Signal { name: "centerRadiusChanged" } - Signal { name: "focalRadiusChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/qmldir deleted file mode 100644 index 428ff39..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Shapes/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Shapes -linktarget Qt6::qmlshapesplugin -plugin qmlshapesplugin -classname QmlShapesPlugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Shapes/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/libqtquicktemplates2plugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/libqtquicktemplates2plugin.so deleted file mode 100755 index 930f747..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/libqtquicktemplates2plugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/plugins.qmltypes deleted file mode 100644 index cbc921a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/plugins.qmltypes +++ /dev/null @@ -1,8314 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qplatformdialoghelper.h" - name: "QPlatformDialogHelper" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "StandardButtons" - alias: "StandardButton" - isFlag: true - values: [ - "NoButton", - "Ok", - "Save", - "SaveAll", - "Open", - "Yes", - "YesToAll", - "No", - "NoToAll", - "Abort", - "Retry", - "Ignore", - "Close", - "Cancel", - "Discard", - "Help", - "Apply", - "Reset", - "RestoreDefaults", - "FirstButton", - "LastButton", - "LowestBit", - "HighestBit" - ] - } - Enum { - name: "ButtonRole" - values: [ - "InvalidRole", - "AcceptRole", - "RejectRole", - "DestructiveRole", - "ActionRole", - "HelpRole", - "YesRole", - "NoRole", - "ResetRole", - "ApplyRole", - "NRoles", - "RoleMask", - "AlternateRole", - "Stretch", - "Reverse", - "EOL" - ] - } - Enum { - name: "ButtonLayout" - values: [ - "UnknownLayout", - "WinLayout", - "MacLayout", - "KdeLayout", - "GnomeLayout", - "AndroidLayout" - ] - } - Signal { name: "accept" } - Signal { name: "reject" } - } - Component { - file: "private/qquickabstractbutton_p.h" - name: "QQuickAbstractButton" - accessSemantics: "reference" - prototype: "QQuickControl" - deferredNames: ["background", "contentItem", "indicator"] - exports: [ - "QtQuick.Templates/AbstractButton 2.0", - "QtQuick.Templates/AbstractButton 2.1", - "QtQuick.Templates/AbstractButton 2.2", - "QtQuick.Templates/AbstractButton 2.3", - "QtQuick.Templates/AbstractButton 2.4", - "QtQuick.Templates/AbstractButton 2.5", - "QtQuick.Templates/AbstractButton 2.7", - "QtQuick.Templates/AbstractButton 2.11", - "QtQuick.Templates/AbstractButton 6.0", - "QtQuick.Templates/AbstractButton 6.3", - "QtQuick.Templates/AbstractButton 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Enum { - name: "Display" - values: [ - "IconOnly", - "TextOnly", - "TextBesideIcon", - "TextUnderIcon" - ] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - reset: "resetText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "down" - type: "bool" - read: "isDown" - write: "setDown" - reset: "resetDown" - notify: "downChanged" - index: 1 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "checked" - type: "bool" - read: "isChecked" - write: "setChecked" - notify: "checkedChanged" - index: 3 - isFinal: true - } - Property { - name: "checkable" - type: "bool" - read: "isCheckable" - write: "setCheckable" - notify: "checkableChanged" - index: 4 - isFinal: true - } - Property { - name: "autoExclusive" - type: "bool" - read: "autoExclusive" - write: "setAutoExclusive" - notify: "autoExclusiveChanged" - index: 5 - isFinal: true - } - Property { - name: "autoRepeat" - type: "bool" - read: "autoRepeat" - write: "setAutoRepeat" - notify: "autoRepeatChanged" - index: 6 - isFinal: true - } - Property { - name: "indicator" - type: "QQuickItem" - isPointer: true - read: "indicator" - write: "setIndicator" - notify: "indicatorChanged" - index: 7 - isFinal: true - } - Property { - name: "icon" - revision: 515 - type: "QQuickIcon" - read: "icon" - write: "setIcon" - notify: "iconChanged" - index: 8 - isFinal: true - } - Property { - name: "display" - revision: 515 - type: "Display" - read: "display" - write: "setDisplay" - notify: "displayChanged" - index: 9 - isFinal: true - } - Property { - name: "action" - revision: 515 - type: "QQuickAction" - isPointer: true - read: "action" - write: "setAction" - notify: "actionChanged" - index: 10 - isFinal: true - } - Property { - name: "autoRepeatDelay" - revision: 516 - type: "int" - read: "autoRepeatDelay" - write: "setAutoRepeatDelay" - notify: "autoRepeatDelayChanged" - index: 11 - isFinal: true - } - Property { - name: "autoRepeatInterval" - revision: 516 - type: "int" - read: "autoRepeatInterval" - write: "setAutoRepeatInterval" - notify: "autoRepeatIntervalChanged" - index: 12 - isFinal: true - } - Property { - name: "pressX" - revision: 516 - type: "double" - read: "pressX" - notify: "pressXChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "pressY" - revision: 516 - type: "double" - read: "pressY" - notify: "pressYChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorWidth" - revision: 517 - type: "double" - read: "implicitIndicatorWidth" - notify: "implicitIndicatorWidthChanged" - index: 15 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorHeight" - revision: 517 - type: "double" - read: "implicitIndicatorHeight" - notify: "implicitIndicatorHeightChanged" - index: 16 - isReadonly: true - isFinal: true - } - Signal { name: "pressed" } - Signal { name: "released" } - Signal { name: "canceled" } - Signal { name: "clicked" } - Signal { name: "pressAndHold" } - Signal { name: "doubleClicked" } - Signal { name: "textChanged" } - Signal { name: "downChanged" } - Signal { name: "pressedChanged" } - Signal { name: "checkedChanged" } - Signal { name: "checkableChanged" } - Signal { name: "autoExclusiveChanged" } - Signal { name: "autoRepeatChanged" } - Signal { name: "indicatorChanged" } - Signal { name: "toggled"; revision: 514 } - Signal { name: "iconChanged"; revision: 515 } - Signal { name: "displayChanged"; revision: 515 } - Signal { name: "actionChanged"; revision: 515 } - Signal { name: "autoRepeatDelayChanged"; revision: 516 } - Signal { name: "autoRepeatIntervalChanged"; revision: 516 } - Signal { name: "pressXChanged"; revision: 516 } - Signal { name: "pressYChanged"; revision: 516 } - Signal { name: "implicitIndicatorWidthChanged"; revision: 517 } - Signal { name: "implicitIndicatorHeightChanged"; revision: 517 } - Method { name: "toggle" } - Method { name: "accessiblePressAction" } - } - Component { - file: "private/qquickaction_p.h" - name: "QQuickAction" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Templates/Action 2.3", - "QtQuick.Templates/Action 6.0" - ] - exportMetaObjectRevisions: [515, 1536] - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "icon" - type: "QQuickIcon" - read: "icon" - write: "setIcon" - notify: "iconChanged" - index: 1 - isFinal: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - reset: "resetEnabled" - notify: "enabledChanged" - index: 2 - isFinal: true - } - Property { - name: "checked" - type: "bool" - read: "isChecked" - write: "setChecked" - notify: "checkedChanged" - index: 3 - isFinal: true - } - Property { - name: "checkable" - type: "bool" - read: "isCheckable" - write: "setCheckable" - notify: "checkableChanged" - index: 4 - isFinal: true - } - Property { - name: "shortcut" - type: "QVariant" - read: "shortcut" - write: "setShortcut" - notify: "shortcutChanged" - index: 5 - privateClass: "QQuickActionPrivate" - isFinal: true - } - Signal { - name: "textChanged" - Parameter { name: "text"; type: "QString" } - } - Signal { - name: "iconChanged" - Parameter { name: "icon"; type: "QQuickIcon" } - } - Signal { - name: "enabledChanged" - Parameter { name: "enabled"; type: "bool" } - } - Signal { - name: "checkedChanged" - Parameter { name: "checked"; type: "bool" } - } - Signal { - name: "checkableChanged" - Parameter { name: "checkable"; type: "bool" } - } - Signal { - name: "shortcutChanged" - Parameter { name: "shortcut"; type: "QKeySequence" } - } - Signal { - name: "toggled" - Parameter { name: "source"; type: "QObject"; isPointer: true } - } - Signal { name: "toggled"; isCloned: true } - Signal { - name: "triggered" - Parameter { name: "source"; type: "QObject"; isPointer: true } - } - Signal { name: "triggered"; isCloned: true } - Method { - name: "toggle" - Parameter { name: "source"; type: "QObject"; isPointer: true } - } - Method { name: "toggle"; isCloned: true } - Method { - name: "trigger" - Parameter { name: "source"; type: "QObject"; isPointer: true } - } - Method { name: "trigger"; isCloned: true } - } - Component { - file: "private/qquickactiongroup_p.h" - name: "QQuickActionGroup" - accessSemantics: "reference" - defaultProperty: "actions" - prototype: "QObject" - exports: [ - "QtQuick.Templates/ActionGroup 2.3", - "QtQuick.Templates/ActionGroup 6.0" - ] - exportMetaObjectRevisions: [515, 1536] - attachedType: "QQuickActionGroupAttached" - Property { - name: "checkedAction" - type: "QQuickAction" - isPointer: true - read: "checkedAction" - write: "setCheckedAction" - notify: "checkedActionChanged" - index: 0 - isFinal: true - } - Property { - name: "actions" - type: "QQuickAction" - isList: true - read: "actions" - notify: "actionsChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "exclusive" - type: "bool" - read: "isExclusive" - write: "setExclusive" - notify: "exclusiveChanged" - index: 2 - isFinal: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 3 - isFinal: true - } - Signal { name: "checkedActionChanged" } - Signal { name: "actionsChanged" } - Signal { name: "exclusiveChanged" } - Signal { name: "enabledChanged" } - Signal { - name: "triggered" - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { - name: "addAction" - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { - name: "removeAction" - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { name: "_q_updateCurrent" } - } - Component { - file: "private/qquickactiongroup_p.h" - name: "QQuickActionGroupAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "group" - type: "QQuickActionGroup" - isPointer: true - read: "group" - write: "setGroup" - notify: "groupChanged" - index: 0 - isFinal: true - } - Signal { name: "groupChanged" } - } - Component { - file: "private/qquickapplicationwindow_p.h" - name: "QQuickApplicationWindow" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickWindowQmlImpl" - deferredNames: ["background"] - exports: [ - "QtQuick.Templates/ApplicationWindow 2.0", - "QtQuick.Templates/ApplicationWindow 2.1", - "QtQuick.Templates/ApplicationWindow 2.2", - "QtQuick.Templates/ApplicationWindow 2.3", - "QtQuick.Templates/ApplicationWindow 2.13", - "QtQuick.Templates/ApplicationWindow 2.14", - "QtQuick.Templates/ApplicationWindow 6.0", - "QtQuick.Templates/ApplicationWindow 6.2", - "QtQuick.Templates/ApplicationWindow 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 525, - 526, - 1536, - 1538, - 1543 - ] - attachedType: "QQuickApplicationWindowAttached" - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 0 - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 2 - privateClass: "QQuickApplicationWindowPrivate" - isReadonly: true - isFinal: true - } - Property { - name: "activeFocusControl" - type: "QQuickItem" - isPointer: true - read: "activeFocusControl" - notify: "activeFocusControlChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "header" - type: "QQuickItem" - isPointer: true - read: "header" - write: "setHeader" - notify: "headerChanged" - index: 4 - isFinal: true - } - Property { - name: "footer" - type: "QQuickItem" - isPointer: true - read: "footer" - write: "setFooter" - notify: "footerChanged" - index: 5 - isFinal: true - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - reset: "resetFont" - notify: "fontChanged" - index: 6 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - reset: "resetLocale" - notify: "localeChanged" - index: 7 - isFinal: true - } - Property { - name: "menuBar" - revision: 515 - type: "QQuickItem" - isPointer: true - read: "menuBar" - write: "setMenuBar" - notify: "menuBarChanged" - index: 8 - isFinal: true - } - Property { - name: "palette" - revision: 515 - type: "QQuickPalette" - isPointer: true - read: "palette" - write: "setPalette" - reset: "resetPalette" - notify: "paletteChanged" - index: 9 - privateClass: "QQuickApplicationWindowPrivate" - } - Signal { name: "backgroundChanged" } - Signal { name: "activeFocusControlChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "fontChanged" } - Signal { name: "localeChanged" } - Signal { name: "menuBarChanged"; revision: 515 } - Method { name: "_q_updateActiveFocus" } - } - Component { - file: "private/qquickapplicationwindow_p.h" - name: "QQuickApplicationWindowAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "window" - type: "QQuickApplicationWindow" - isPointer: true - read: "window" - notify: "windowChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - notify: "contentItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "activeFocusControl" - type: "QQuickItem" - isPointer: true - read: "activeFocusControl" - notify: "activeFocusControlChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "header" - type: "QQuickItem" - isPointer: true - read: "header" - notify: "headerChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "footer" - type: "QQuickItem" - isPointer: true - read: "footer" - notify: "footerChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "menuBar" - type: "QQuickItem" - isPointer: true - read: "menuBar" - notify: "menuBarChanged" - index: 5 - isReadonly: true - isFinal: true - } - Signal { name: "windowChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "activeFocusControlChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "menuBarChanged" } - } - Component { - file: "private/qquickbusyindicator_p.h" - name: "QQuickBusyIndicator" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/BusyIndicator 2.0", - "QtQuick.Templates/BusyIndicator 2.1", - "QtQuick.Templates/BusyIndicator 2.4", - "QtQuick.Templates/BusyIndicator 2.5", - "QtQuick.Templates/BusyIndicator 2.7", - "QtQuick.Templates/BusyIndicator 2.11", - "QtQuick.Templates/BusyIndicator 6.0", - "QtQuick.Templates/BusyIndicator 6.3", - "QtQuick.Templates/BusyIndicator 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 0 - isFinal: true - } - Signal { name: "runningChanged" } - } - Component { - file: "private/qquickbutton_p.h" - name: "QQuickButton" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/Button 2.0", - "QtQuick.Templates/Button 2.1", - "QtQuick.Templates/Button 2.2", - "QtQuick.Templates/Button 2.3", - "QtQuick.Templates/Button 2.4", - "QtQuick.Templates/Button 2.5", - "QtQuick.Templates/Button 2.7", - "QtQuick.Templates/Button 2.11", - "QtQuick.Templates/Button 6.0", - "QtQuick.Templates/Button 6.3", - "QtQuick.Templates/Button 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "highlighted" - type: "bool" - read: "isHighlighted" - write: "setHighlighted" - notify: "highlightedChanged" - index: 0 - isFinal: true - } - Property { - name: "flat" - type: "bool" - read: "isFlat" - write: "setFlat" - notify: "flatChanged" - index: 1 - isFinal: true - } - Signal { name: "highlightedChanged" } - Signal { name: "flatChanged" } - } - Component { - file: "private/qquickbuttongroup_p.h" - name: "QQuickButtonGroup" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Templates/ButtonGroup 2.0", - "QtQuick.Templates/ButtonGroup 2.1", - "QtQuick.Templates/ButtonGroup 2.3", - "QtQuick.Templates/ButtonGroup 2.4", - "QtQuick.Templates/ButtonGroup 6.0" - ] - exportMetaObjectRevisions: [512, 513, 515, 516, 1536] - attachedType: "QQuickButtonGroupAttached" - Property { - name: "checkedButton" - type: "QQuickAbstractButton" - isPointer: true - read: "checkedButton" - write: "setCheckedButton" - notify: "checkedButtonChanged" - index: 0 - isFinal: true - } - Property { - name: "buttons" - type: "QQuickAbstractButton" - isList: true - read: "buttons" - notify: "buttonsChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "exclusive" - revision: 515 - type: "bool" - read: "isExclusive" - write: "setExclusive" - notify: "exclusiveChanged" - index: 2 - isFinal: true - } - Property { - name: "checkState" - revision: 516 - type: "Qt::CheckState" - read: "checkState" - write: "setCheckState" - notify: "checkStateChanged" - index: 3 - isFinal: true - } - Signal { name: "checkedButtonChanged" } - Signal { name: "buttonsChanged" } - Signal { - name: "clicked" - revision: 513 - Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } - } - Signal { name: "exclusiveChanged"; revision: 515 } - Signal { name: "checkStateChanged"; revision: 516 } - Method { - name: "addButton" - Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } - } - Method { - name: "removeButton" - Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } - } - Method { name: "_q_updateCurrent" } - } - Component { - file: "private/qquickbuttongroup_p.h" - name: "QQuickButtonGroupAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "group" - type: "QQuickButtonGroup" - isPointer: true - read: "group" - write: "setGroup" - notify: "groupChanged" - index: 0 - isFinal: true - } - Signal { name: "groupChanged" } - } - Component { - file: "private/qquickcalendar_p.h" - name: "QQuickCalendar" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick.Templates/Calendar 6.3"] - exportMetaObjectRevisions: [1539] - Enum { - name: "Month" - values: [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - } - } - Component { - file: "private/qquickcalendarmodel_p.h" - name: "QQuickCalendarModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Templates/CalendarModel 6.3", - "QtQuick.Templates/CalendarModel 6.4" - ] - exportMetaObjectRevisions: [1539, 1540] - Property { - name: "from" - type: "QDate" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "QDate" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "count" - type: "int" - read: "rowCount" - notify: "countChanged" - index: 2 - isReadonly: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "countChanged" } - Method { - name: "monthAt" - type: "int" - Parameter { name: "index"; type: "int" } - } - Method { - name: "yearAt" - type: "int" - Parameter { name: "index"; type: "int" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "date"; type: "QDate" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "year"; type: "int" } - Parameter { name: "month"; type: "int" } - } - } - Component { - file: "private/qquickcheckbox_p.h" - name: "QQuickCheckBox" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/CheckBox 2.0", - "QtQuick.Templates/CheckBox 2.1", - "QtQuick.Templates/CheckBox 2.2", - "QtQuick.Templates/CheckBox 2.3", - "QtQuick.Templates/CheckBox 2.4", - "QtQuick.Templates/CheckBox 2.5", - "QtQuick.Templates/CheckBox 2.7", - "QtQuick.Templates/CheckBox 2.11", - "QtQuick.Templates/CheckBox 6.0", - "QtQuick.Templates/CheckBox 6.3", - "QtQuick.Templates/CheckBox 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "tristate" - type: "bool" - read: "isTristate" - write: "setTristate" - notify: "tristateChanged" - index: 0 - isFinal: true - } - Property { - name: "checkState" - type: "Qt::CheckState" - read: "checkState" - write: "setCheckState" - notify: "checkStateChanged" - index: 1 - isFinal: true - } - Property { - name: "nextCheckState" - revision: 516 - type: "QJSValue" - read: "getNextCheckState" - write: "setNextCheckState" - notify: "nextCheckStateChanged" - index: 2 - isFinal: true - } - Signal { name: "tristateChanged" } - Signal { name: "checkStateChanged" } - Signal { name: "nextCheckStateChanged"; revision: 516 } - } - Component { - file: "private/qquickcheckdelegate_p.h" - name: "QQuickCheckDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Templates/CheckDelegate 2.0", - "QtQuick.Templates/CheckDelegate 2.1", - "QtQuick.Templates/CheckDelegate 2.2", - "QtQuick.Templates/CheckDelegate 2.3", - "QtQuick.Templates/CheckDelegate 2.4", - "QtQuick.Templates/CheckDelegate 2.5", - "QtQuick.Templates/CheckDelegate 2.7", - "QtQuick.Templates/CheckDelegate 2.11", - "QtQuick.Templates/CheckDelegate 6.0", - "QtQuick.Templates/CheckDelegate 6.3", - "QtQuick.Templates/CheckDelegate 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "tristate" - type: "bool" - read: "isTristate" - write: "setTristate" - notify: "tristateChanged" - index: 0 - isFinal: true - } - Property { - name: "checkState" - type: "Qt::CheckState" - read: "checkState" - write: "setCheckState" - notify: "checkStateChanged" - index: 1 - isFinal: true - } - Property { - name: "nextCheckState" - revision: 516 - type: "QJSValue" - write: "setNextCheckState" - notify: "nextCheckStateChanged" - index: 2 - privateClass: "QQuickCheckDelegatePrivate" - isFinal: true - } - Signal { name: "tristateChanged" } - Signal { name: "checkStateChanged" } - Signal { name: "nextCheckStateChanged"; revision: 516 } - } - Component { - file: "private/qquickcombobox_p.h" - name: "QQuickComboBox" - accessSemantics: "reference" - prototype: "QQuickControl" - deferredNames: ["background", "contentItem", "indicator", "popup"] - exports: [ - "QtQuick.Templates/ComboBox 2.0", - "QtQuick.Templates/ComboBox 2.1", - "QtQuick.Templates/ComboBox 2.2", - "QtQuick.Templates/ComboBox 2.4", - "QtQuick.Templates/ComboBox 2.5", - "QtQuick.Templates/ComboBox 2.7", - "QtQuick.Templates/ComboBox 2.11", - "QtQuick.Templates/ComboBox 2.14", - "QtQuick.Templates/ComboBox 2.15", - "QtQuick.Templates/ComboBox 6.0", - "QtQuick.Templates/ComboBox 6.3", - "QtQuick.Templates/ComboBox 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1539, - 1543 - ] - Enum { - name: "ImplicitContentWidthPolicy" - values: [ - "ContentItemImplicitWidth", - "WidestText", - "WidestTextWhenCompleted" - ] - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 1 - isFinal: true - } - Property { - name: "delegateModel" - type: "QQmlInstanceModel" - isPointer: true - read: "delegateModel" - notify: "delegateModelChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "highlightedIndex" - type: "int" - read: "highlightedIndex" - notify: "highlightedIndexChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 5 - isFinal: true - } - Property { - name: "currentText" - type: "QString" - read: "currentText" - notify: "currentTextChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "displayText" - type: "QString" - read: "displayText" - write: "setDisplayText" - reset: "resetDisplayText" - notify: "displayTextChanged" - index: 7 - isFinal: true - } - Property { - name: "textRole" - type: "QString" - read: "textRole" - write: "setTextRole" - notify: "textRoleChanged" - index: 8 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 9 - isFinal: true - } - Property { - name: "indicator" - type: "QQuickItem" - isPointer: true - read: "indicator" - write: "setIndicator" - notify: "indicatorChanged" - index: 10 - isFinal: true - } - Property { - name: "popup" - type: "QQuickPopup" - isPointer: true - read: "popup" - write: "setPopup" - notify: "popupChanged" - index: 11 - isFinal: true - } - Property { - name: "flat" - revision: 513 - type: "bool" - read: "isFlat" - write: "setFlat" - notify: "flatChanged" - index: 12 - isFinal: true - } - Property { - name: "down" - revision: 514 - type: "bool" - read: "isDown" - write: "setDown" - reset: "resetDown" - notify: "downChanged" - index: 13 - isFinal: true - } - Property { - name: "editable" - revision: 514 - type: "bool" - read: "isEditable" - write: "setEditable" - notify: "editableChanged" - index: 14 - isFinal: true - } - Property { - name: "editText" - revision: 514 - type: "QString" - read: "editText" - write: "setEditText" - reset: "resetEditText" - notify: "editTextChanged" - index: 15 - isFinal: true - } - Property { - name: "validator" - revision: 514 - type: "QValidator" - isPointer: true - read: "validator" - write: "setValidator" - notify: "validatorChanged" - index: 16 - isFinal: true - } - Property { - name: "inputMethodHints" - revision: 514 - type: "Qt::InputMethodHints" - read: "inputMethodHints" - write: "setInputMethodHints" - notify: "inputMethodHintsChanged" - index: 17 - isFinal: true - } - Property { - name: "inputMethodComposing" - revision: 514 - type: "bool" - read: "isInputMethodComposing" - notify: "inputMethodComposingChanged" - index: 18 - isReadonly: true - isFinal: true - } - Property { - name: "acceptableInput" - revision: 514 - type: "bool" - read: "hasAcceptableInput" - notify: "acceptableInputChanged" - index: 19 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorWidth" - revision: 517 - type: "double" - read: "implicitIndicatorWidth" - notify: "implicitIndicatorWidthChanged" - index: 20 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorHeight" - revision: 517 - type: "double" - read: "implicitIndicatorHeight" - notify: "implicitIndicatorHeightChanged" - index: 21 - isReadonly: true - isFinal: true - } - Property { - name: "currentValue" - revision: 526 - type: "QVariant" - read: "currentValue" - notify: "currentValueChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "valueRole" - revision: 526 - type: "QString" - read: "valueRole" - write: "setValueRole" - notify: "valueRoleChanged" - index: 23 - isFinal: true - } - Property { - name: "selectTextByMouse" - revision: 527 - type: "bool" - read: "selectTextByMouse" - write: "setSelectTextByMouse" - notify: "selectTextByMouseChanged" - index: 24 - isFinal: true - } - Property { - name: "implicitContentWidthPolicy" - revision: 1536 - type: "ImplicitContentWidthPolicy" - read: "implicitContentWidthPolicy" - write: "setImplicitContentWidthPolicy" - notify: "implicitContentWidthPolicyChanged" - index: 25 - isFinal: true - } - Signal { - name: "activated" - Parameter { name: "index"; type: "int" } - } - Signal { - name: "highlighted" - Parameter { name: "index"; type: "int" } - } - Signal { name: "countChanged" } - Signal { name: "modelChanged" } - Signal { name: "delegateModelChanged" } - Signal { name: "pressedChanged" } - Signal { name: "highlightedIndexChanged" } - Signal { name: "currentIndexChanged" } - Signal { name: "currentTextChanged" } - Signal { name: "displayTextChanged" } - Signal { name: "textRoleChanged" } - Signal { name: "delegateChanged" } - Signal { name: "indicatorChanged" } - Signal { name: "popupChanged" } - Signal { name: "flatChanged"; revision: 513 } - Signal { name: "accepted"; revision: 514 } - Signal { name: "downChanged"; revision: 514 } - Signal { name: "editableChanged"; revision: 514 } - Signal { name: "editTextChanged"; revision: 514 } - Signal { name: "validatorChanged"; revision: 514 } - Signal { name: "inputMethodHintsChanged"; revision: 514 } - Signal { name: "inputMethodComposingChanged"; revision: 514 } - Signal { name: "acceptableInputChanged"; revision: 514 } - Signal { name: "implicitIndicatorWidthChanged"; revision: 517 } - Signal { name: "implicitIndicatorHeightChanged"; revision: 517 } - Signal { name: "valueRoleChanged"; revision: 526 } - Signal { name: "currentValueChanged"; revision: 526 } - Signal { name: "selectTextByMouseChanged"; revision: 527 } - Signal { name: "implicitContentWidthPolicyChanged"; revision: 1536 } - Method { name: "incrementCurrentIndex" } - Method { name: "decrementCurrentIndex" } - Method { name: "selectAll"; revision: 514 } - Method { - name: "textAt" - type: "QString" - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "int" - Parameter { name: "text"; type: "QString" } - Parameter { name: "flags"; type: "Qt::MatchFlags" } - } - Method { - name: "find" - type: "int" - isCloned: true - Parameter { name: "text"; type: "QString" } - } - Method { - name: "valueAt" - revision: 526 - type: "QVariant" - Parameter { name: "index"; type: "int" } - } - Method { - name: "indexOfValue" - revision: 526 - type: "int" - Parameter { name: "value"; type: "QVariant" } - } - } - Component { - file: "private/qquickcontainer_p.h" - name: "QQuickContainer" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/Container 2.0", - "QtQuick.Templates/Container 2.1", - "QtQuick.Templates/Container 2.3", - "QtQuick.Templates/Container 2.4", - "QtQuick.Templates/Container 2.5", - "QtQuick.Templates/Container 2.7", - "QtQuick.Templates/Container 2.11", - "QtQuick.Templates/Container 6.0", - "QtQuick.Templates/Container 6.3", - "QtQuick.Templates/Container 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "contentModel" - type: "QVariant" - read: "contentModel" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 2 - isReadonly: true - } - Property { - name: "contentChildren" - type: "QQuickItem" - isList: true - read: "contentChildren" - notify: "contentChildrenChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 4 - isFinal: true - } - Property { - name: "currentItem" - type: "QQuickItem" - isPointer: true - read: "currentItem" - notify: "currentItemChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "contentWidth" - revision: 517 - type: "double" - read: "contentWidth" - write: "setContentWidth" - reset: "resetContentWidth" - notify: "contentWidthChanged" - index: 6 - isFinal: true - } - Property { - name: "contentHeight" - revision: 517 - type: "double" - read: "contentHeight" - write: "setContentHeight" - reset: "resetContentHeight" - notify: "contentHeightChanged" - index: 7 - isFinal: true - } - Signal { name: "countChanged" } - Signal { name: "contentChildrenChanged" } - Signal { name: "currentIndexChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "contentWidthChanged"; revision: 517 } - Signal { name: "contentHeightChanged"; revision: 517 } - Method { - name: "setCurrentIndex" - Parameter { name: "index"; type: "int" } - } - Method { name: "incrementCurrentIndex"; revision: 513 } - Method { name: "decrementCurrentIndex"; revision: 513 } - Method { name: "_q_currentIndexChanged" } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "addItem" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "insertItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "moveItem" - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - } - Method { - name: "removeItem" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "takeItem" - revision: 515 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquickcontrol_p.h" - name: "QQuickControl" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - deferredNames: ["background", "contentItem"] - exports: [ - "QtQuick.Templates/Control 2.0", - "QtQuick.Templates/Control 2.1", - "QtQuick.Templates/Control 2.4", - "QtQuick.Templates/Control 2.5", - "QtQuick.Templates/Control 2.7", - "QtQuick.Templates/Control 2.11", - "QtQuick.Templates/Control 6.0", - "QtQuick.Templates/Control 6.3", - "QtQuick.Templates/Control 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - reset: "resetFont" - notify: "fontChanged" - index: 0 - isFinal: true - } - Property { - name: "availableWidth" - type: "double" - read: "availableWidth" - notify: "availableWidthChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "availableHeight" - type: "double" - read: "availableHeight" - notify: "availableHeightChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "padding" - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 3 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 4 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 5 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 6 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 7 - isFinal: true - } - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - reset: "resetSpacing" - notify: "spacingChanged" - index: 8 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - reset: "resetLocale" - notify: "localeChanged" - index: 9 - isFinal: true - } - Property { - name: "mirrored" - type: "bool" - read: "isMirrored" - notify: "mirroredChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "focusPolicy" - type: "Qt::FocusPolicy" - read: "focusPolicy" - write: "setFocusPolicy" - notify: "focusPolicyChanged" - index: 11 - isFinal: true - } - Property { - name: "focusReason" - type: "Qt::FocusReason" - read: "focusReason" - write: "setFocusReason" - notify: "focusReasonChanged" - index: 12 - isFinal: true - } - Property { - name: "visualFocus" - type: "bool" - read: "hasVisualFocus" - notify: "visualFocusChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "hovered" - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "hoverEnabled" - type: "bool" - read: "isHoverEnabled" - write: "setHoverEnabled" - reset: "resetHoverEnabled" - notify: "hoverEnabledChanged" - index: 15 - isFinal: true - } - Property { - name: "wheelEnabled" - type: "bool" - read: "isWheelEnabled" - write: "setWheelEnabled" - notify: "wheelEnabledChanged" - index: 16 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 17 - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - write: "setContentItem" - notify: "contentItemChanged" - index: 18 - isFinal: true - } - Property { - name: "baselineOffset" - type: "double" - read: "baselineOffset" - write: "setBaselineOffset" - reset: "resetBaselineOffset" - notify: "baselineOffsetChanged" - index: 19 - isFinal: true - } - Property { - name: "horizontalPadding" - revision: 517 - type: "double" - read: "horizontalPadding" - write: "setHorizontalPadding" - reset: "resetHorizontalPadding" - notify: "horizontalPaddingChanged" - index: 20 - isFinal: true - } - Property { - name: "verticalPadding" - revision: 517 - type: "double" - read: "verticalPadding" - write: "setVerticalPadding" - reset: "resetVerticalPadding" - notify: "verticalPaddingChanged" - index: 21 - isFinal: true - } - Property { - name: "implicitContentWidth" - revision: 517 - type: "double" - read: "implicitContentWidth" - notify: "implicitContentWidthChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "implicitContentHeight" - revision: 517 - type: "double" - read: "implicitContentHeight" - notify: "implicitContentHeightChanged" - index: 23 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 24 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 25 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 26 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 27 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 28 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 29 - isFinal: true - } - Signal { name: "fontChanged" } - Signal { name: "availableWidthChanged" } - Signal { name: "availableHeightChanged" } - Signal { name: "paddingChanged" } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - Signal { name: "spacingChanged" } - Signal { name: "localeChanged" } - Signal { name: "focusReasonChanged" } - Signal { name: "mirroredChanged" } - Signal { name: "visualFocusChanged" } - Signal { name: "hoveredChanged" } - Signal { name: "hoverEnabledChanged" } - Signal { name: "wheelEnabledChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "baselineOffsetChanged" } - Signal { name: "horizontalPaddingChanged"; revision: 517 } - Signal { name: "verticalPaddingChanged"; revision: 517 } - Signal { name: "implicitContentWidthChanged"; revision: 517 } - Signal { name: "implicitContentHeightChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - } - Component { - file: "private/qquickdayofweekrow_p.h" - name: "QQuickDayOfWeekRow" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/AbstractDayOfWeekRow 6.3", - "QtQuick.Templates/AbstractDayOfWeekRow 6.7" - ] - exportMetaObjectRevisions: [1539, 1543] - Property { - name: "source" - type: "QVariant" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - isFinal: true - } - Signal { name: "sourceChanged" } - Signal { name: "delegateChanged" } - } - Component { - file: "private/qquickdelaybutton_p.h" - name: "QQuickDelayButton" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/DelayButton 2.2", - "QtQuick.Templates/DelayButton 2.3", - "QtQuick.Templates/DelayButton 2.4", - "QtQuick.Templates/DelayButton 2.5", - "QtQuick.Templates/DelayButton 2.7", - "QtQuick.Templates/DelayButton 2.11", - "QtQuick.Templates/DelayButton 6.0", - "QtQuick.Templates/DelayButton 6.3", - "QtQuick.Templates/DelayButton 6.7" - ] - exportMetaObjectRevisions: [ - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "delay" - type: "int" - read: "delay" - write: "setDelay" - notify: "delayChanged" - index: 0 - isFinal: true - } - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - notify: "progressChanged" - index: 1 - isFinal: true - } - Property { - name: "transition" - type: "QQuickTransition" - isPointer: true - read: "transition" - write: "setTransition" - notify: "transitionChanged" - index: 2 - isFinal: true - } - Signal { name: "activated" } - Signal { name: "delayChanged" } - Signal { name: "progressChanged" } - Signal { name: "transitionChanged" } - } - Component { - file: "private/qquickdial_p.h" - name: "QQuickDial" - accessSemantics: "reference" - prototype: "QQuickControl" - deferredNames: ["background", "handle"] - exports: [ - "QtQuick.Templates/Dial 2.0", - "QtQuick.Templates/Dial 2.1", - "QtQuick.Templates/Dial 2.2", - "QtQuick.Templates/Dial 2.4", - "QtQuick.Templates/Dial 2.5", - "QtQuick.Templates/Dial 2.7", - "QtQuick.Templates/Dial 2.11", - "QtQuick.Templates/Dial 6.0", - "QtQuick.Templates/Dial 6.3", - "QtQuick.Templates/Dial 6.6", - "QtQuick.Templates/Dial 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapAlways", "SnapOnRelease"] - } - Enum { - name: "InputMode" - values: ["Circular", "Horizontal", "Vertical"] - } - Enum { - name: "WrapDirection" - values: ["Clockwise", "CounterClockwise"] - } - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "double" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 2 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - notify: "positionChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "angle" - type: "double" - read: "angle" - notify: "angleChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "startAngle" - revision: 1542 - type: "double" - read: "startAngle" - write: "setStartAngle" - notify: "startAngleChanged" - index: 5 - isFinal: true - } - Property { - name: "endAngle" - revision: 1542 - type: "double" - read: "endAngle" - write: "setEndAngle" - notify: "endAngleChanged" - index: 6 - isFinal: true - } - Property { - name: "stepSize" - type: "double" - read: "stepSize" - write: "setStepSize" - notify: "stepSizeChanged" - index: 7 - isFinal: true - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 8 - isFinal: true - } - Property { - name: "wrap" - type: "bool" - read: "wrap" - write: "setWrap" - notify: "wrapChanged" - index: 9 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "handle" - type: "QQuickItem" - isPointer: true - read: "handle" - write: "setHandle" - notify: "handleChanged" - index: 11 - isFinal: true - } - Property { - name: "live" - revision: 514 - type: "bool" - read: "live" - write: "setLive" - notify: "liveChanged" - index: 12 - isFinal: true - } - Property { - name: "inputMode" - revision: 517 - type: "InputMode" - read: "inputMode" - write: "setInputMode" - notify: "inputModeChanged" - index: 13 - isFinal: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "valueChanged" } - Signal { name: "positionChanged" } - Signal { name: "angleChanged" } - Signal { name: "stepSizeChanged" } - Signal { name: "snapModeChanged" } - Signal { name: "wrapChanged" } - Signal { name: "pressedChanged" } - Signal { name: "handleChanged" } - Signal { name: "moved"; revision: 514 } - Signal { name: "liveChanged"; revision: 514 } - Signal { name: "inputModeChanged"; revision: 517 } - Signal { name: "startAngleChanged"; revision: 1542 } - Signal { name: "endAngleChanged"; revision: 1542 } - Signal { - name: "wrapped" - revision: 1542 - Parameter { type: "WrapDirection" } - } - Method { name: "increase" } - Method { name: "decrease" } - } - Component { - file: "private/qquickdialog_p.h" - name: "QQuickDialog" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPopup" - extension: "QPlatformDialogHelper" - extensionIsNamespace: true - exports: [ - "QtQuick.Templates/Dialog 2.1", - "QtQuick.Templates/Dialog 2.3", - "QtQuick.Templates/Dialog 2.5", - "QtQuick.Templates/Dialog 6.0" - ] - exportMetaObjectRevisions: [513, 515, 517, 1536] - Enum { - name: "StandardCode" - values: ["Rejected", "Accepted"] - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 0 - isFinal: true - } - Property { - name: "header" - type: "QQuickItem" - isPointer: true - read: "header" - write: "setHeader" - notify: "headerChanged" - index: 1 - isFinal: true - } - Property { - name: "footer" - type: "QQuickItem" - isPointer: true - read: "footer" - write: "setFooter" - notify: "footerChanged" - index: 2 - isFinal: true - } - Property { - name: "standardButtons" - type: "QPlatformDialogHelper::StandardButtons" - read: "standardButtons" - write: "setStandardButtons" - notify: "standardButtonsChanged" - index: 3 - isFinal: true - } - Property { - name: "result" - revision: 515 - type: "int" - read: "result" - write: "setResult" - notify: "resultChanged" - index: 4 - isFinal: true - } - Property { - name: "implicitHeaderWidth" - revision: 517 - type: "double" - read: "implicitHeaderWidth" - notify: "implicitHeaderWidthChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHeaderHeight" - revision: 517 - type: "double" - read: "implicitHeaderHeight" - notify: "implicitHeaderHeightChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterWidth" - revision: 517 - type: "double" - read: "implicitFooterWidth" - notify: "implicitFooterWidthChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterHeight" - revision: 517 - type: "double" - read: "implicitFooterHeight" - notify: "implicitFooterHeightChanged" - index: 8 - isReadonly: true - isFinal: true - } - Signal { name: "accepted" } - Signal { name: "rejected" } - Signal { name: "titleChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "standardButtonsChanged" } - Signal { name: "applied"; revision: 515 } - Signal { name: "reset"; revision: 515 } - Signal { name: "discarded"; revision: 515 } - Signal { name: "helpRequested"; revision: 515 } - Signal { name: "resultChanged"; revision: 515 } - Signal { name: "implicitHeaderWidthChanged" } - Signal { name: "implicitHeaderHeightChanged" } - Signal { name: "implicitFooterWidthChanged" } - Signal { name: "implicitFooterHeightChanged" } - Method { name: "accept" } - Method { name: "reject" } - Method { - name: "done" - Parameter { name: "result"; type: "int" } - } - Method { - name: "standardButton" - revision: 515 - type: "QQuickAbstractButton" - isPointer: true - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - } - } - Component { - file: "private/qquickdialogbuttonbox_p.h" - name: "QQuickDialogButtonBox" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - extension: "QPlatformDialogHelper" - extensionIsNamespace: true - exports: [ - "QtQuick.Templates/DialogButtonBox 2.1", - "QtQuick.Templates/DialogButtonBox 2.3", - "QtQuick.Templates/DialogButtonBox 2.4", - "QtQuick.Templates/DialogButtonBox 2.5", - "QtQuick.Templates/DialogButtonBox 2.7", - "QtQuick.Templates/DialogButtonBox 2.11", - "QtQuick.Templates/DialogButtonBox 6.0", - "QtQuick.Templates/DialogButtonBox 6.3", - "QtQuick.Templates/DialogButtonBox 6.7" - ] - exportMetaObjectRevisions: [ - 513, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickDialogButtonBoxAttached" - Enum { - name: "Position" - values: ["Header", "Footer"] - } - Property { - name: "position" - type: "Position" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Property { - name: "alignment" - type: "Qt::Alignment" - read: "alignment" - write: "setAlignment" - reset: "resetAlignment" - notify: "alignmentChanged" - index: 1 - isFinal: true - } - Property { - name: "standardButtons" - type: "QPlatformDialogHelper::StandardButtons" - read: "standardButtons" - write: "setStandardButtons" - notify: "standardButtonsChanged" - index: 2 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 3 - isFinal: true - } - Property { - name: "buttonLayout" - revision: 517 - type: "QPlatformDialogHelper::ButtonLayout" - read: "buttonLayout" - write: "setButtonLayout" - reset: "resetButtonLayout" - notify: "buttonLayoutChanged" - index: 4 - isFinal: true - } - Signal { name: "accepted" } - Signal { name: "rejected" } - Signal { name: "helpRequested" } - Signal { - name: "clicked" - Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } - } - Signal { name: "positionChanged" } - Signal { name: "alignmentChanged" } - Signal { name: "standardButtonsChanged" } - Signal { name: "delegateChanged" } - Signal { name: "applied"; revision: 515 } - Signal { name: "reset"; revision: 515 } - Signal { name: "discarded"; revision: 515 } - Signal { name: "buttonLayoutChanged"; revision: 517 } - Method { - name: "standardButton" - type: "QQuickAbstractButton" - isPointer: true - Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } - } - } - Component { - file: "private/qquickdialogbuttonbox_p.h" - name: "QQuickDialogButtonBoxAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "buttonBox" - type: "QQuickDialogButtonBox" - isPointer: true - read: "buttonBox" - notify: "buttonBoxChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "buttonRole" - type: "QPlatformDialogHelper::ButtonRole" - read: "buttonRole" - write: "setButtonRole" - notify: "buttonRoleChanged" - index: 1 - isFinal: true - } - Signal { name: "buttonBoxChanged" } - Signal { name: "buttonRoleChanged" } - } - Component { - file: "private/qquickdrawer_p.h" - name: "QQuickDrawer" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPopup" - exports: [ - "QtQuick.Templates/Drawer 2.0", - "QtQuick.Templates/Drawer 2.1", - "QtQuick.Templates/Drawer 2.2", - "QtQuick.Templates/Drawer 2.3", - "QtQuick.Templates/Drawer 2.5", - "QtQuick.Templates/Drawer 6.0" - ] - exportMetaObjectRevisions: [512, 513, 514, 515, 517, 1536] - Property { - name: "edge" - type: "Qt::Edge" - read: "edge" - write: "setEdge" - notify: "edgeChanged" - index: 0 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 1 - isFinal: true - } - Property { - name: "dragMargin" - type: "double" - read: "dragMargin" - write: "setDragMargin" - reset: "resetDragMargin" - notify: "dragMarginChanged" - index: 2 - isFinal: true - } - Property { - name: "interactive" - revision: 514 - type: "bool" - read: "isInteractive" - write: "setInteractive" - notify: "interactiveChanged" - index: 3 - isFinal: true - } - Signal { name: "edgeChanged" } - Signal { name: "positionChanged" } - Signal { name: "dragMarginChanged" } - Signal { name: "interactiveChanged"; revision: 514 } - } - Component { - file: "private/qquickframe_p.h" - name: "QQuickFrame" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPane" - exports: [ - "QtQuick.Templates/Frame 2.0", - "QtQuick.Templates/Frame 2.1", - "QtQuick.Templates/Frame 2.4", - "QtQuick.Templates/Frame 2.5", - "QtQuick.Templates/Frame 2.7", - "QtQuick.Templates/Frame 2.11", - "QtQuick.Templates/Frame 6.0", - "QtQuick.Templates/Frame 6.3", - "QtQuick.Templates/Frame 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - } - Component { - file: "private/qquickgroupbox_p.h" - name: "QQuickGroupBox" - accessSemantics: "reference" - prototype: "QQuickFrame" - deferredNames: ["background", "contentItem", "label"] - exports: [ - "QtQuick.Templates/GroupBox 2.0", - "QtQuick.Templates/GroupBox 2.1", - "QtQuick.Templates/GroupBox 2.4", - "QtQuick.Templates/GroupBox 2.5", - "QtQuick.Templates/GroupBox 2.7", - "QtQuick.Templates/GroupBox 2.11", - "QtQuick.Templates/GroupBox 6.0", - "QtQuick.Templates/GroupBox 6.3", - "QtQuick.Templates/GroupBox 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 0 - isFinal: true - } - Property { - name: "label" - type: "QQuickItem" - isPointer: true - read: "label" - write: "setLabel" - notify: "labelChanged" - index: 1 - isFinal: true - } - Property { - name: "implicitLabelWidth" - revision: 517 - type: "double" - read: "implicitLabelWidth" - notify: "implicitLabelWidthChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "implicitLabelHeight" - revision: 517 - type: "double" - read: "implicitLabelHeight" - notify: "implicitLabelHeightChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { name: "titleChanged" } - Signal { name: "labelChanged" } - Signal { name: "implicitLabelWidthChanged"; revision: 517 } - Signal { name: "implicitLabelHeightChanged"; revision: 517 } - } - Component { - file: "private/qquickheaderview_p.h" - name: "QQuickHeaderViewBase" - accessSemantics: "reference" - prototype: "QQuickTableView" - Property { - name: "textRole" - type: "QString" - read: "textRole" - write: "setTextRole" - notify: "textRoleChanged" - index: 0 - isFinal: true - } - Signal { name: "textRoleChanged" } - } - Component { - file: "private/qquickheaderview_p.h" - name: "QQuickHorizontalHeaderView" - accessSemantics: "reference" - prototype: "QQuickHeaderViewBase" - exports: [ - "QtQuick.Templates/HorizontalHeaderView 2.15", - "QtQuick.Templates/HorizontalHeaderView 6.0", - "QtQuick.Templates/HorizontalHeaderView 6.2", - "QtQuick.Templates/HorizontalHeaderView 6.3", - "QtQuick.Templates/HorizontalHeaderView 6.4", - "QtQuick.Templates/HorizontalHeaderView 6.5", - "QtQuick.Templates/HorizontalHeaderView 6.6", - "QtQuick.Templates/HorizontalHeaderView 6.7" - ] - exportMetaObjectRevisions: [ - 527, - 1536, - 1538, - 1539, - 1540, - 1541, - 1542, - 1543 - ] - } - Component { - file: "private/qquickicon_p.h" - name: "QQuickIcon" - accessSemantics: "value" - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - reset: "resetName" - index: 0 - isFinal: true - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - reset: "resetSource" - index: 1 - isFinal: true - } - Property { - name: "width" - type: "int" - read: "width" - write: "setWidth" - reset: "resetWidth" - index: 2 - isFinal: true - } - Property { - name: "height" - type: "int" - read: "height" - write: "setHeight" - reset: "resetHeight" - index: 3 - isFinal: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - reset: "resetColor" - index: 4 - isFinal: true - } - Property { - name: "cache" - type: "bool" - read: "cache" - write: "setCache" - reset: "resetCache" - index: 5 - isFinal: true - } - } - Component { - file: "private/qquickindicatorbutton_p.h" - name: "QQuickIndicatorButton" - accessSemantics: "reference" - prototype: "QObject" - deferredNames: ["indicator"] - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - notify: "pressedChanged" - index: 0 - isFinal: true - } - Property { - name: "indicator" - type: "QQuickItem" - isPointer: true - read: "indicator" - write: "setIndicator" - notify: "indicatorChanged" - index: 1 - isFinal: true - } - Property { - name: "hovered" - revision: 513 - type: "bool" - read: "isHovered" - write: "setHovered" - notify: "hoveredChanged" - index: 2 - isFinal: true - } - Property { - name: "implicitIndicatorWidth" - revision: 517 - type: "double" - read: "implicitIndicatorWidth" - notify: "implicitIndicatorWidthChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "implicitIndicatorHeight" - revision: 517 - type: "double" - read: "implicitIndicatorHeight" - notify: "implicitIndicatorHeightChanged" - index: 4 - isReadonly: true - isFinal: true - } - Signal { name: "pressedChanged" } - Signal { name: "indicatorChanged" } - Signal { name: "hoveredChanged"; revision: 513 } - Signal { name: "implicitIndicatorWidthChanged"; revision: 517 } - Signal { name: "implicitIndicatorHeightChanged"; revision: 517 } - } - Component { - file: "private/qquickitemdelegate_p.h" - name: "QQuickItemDelegate" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/ItemDelegate 2.0", - "QtQuick.Templates/ItemDelegate 2.1", - "QtQuick.Templates/ItemDelegate 2.2", - "QtQuick.Templates/ItemDelegate 2.3", - "QtQuick.Templates/ItemDelegate 2.4", - "QtQuick.Templates/ItemDelegate 2.5", - "QtQuick.Templates/ItemDelegate 2.7", - "QtQuick.Templates/ItemDelegate 2.11", - "QtQuick.Templates/ItemDelegate 6.0", - "QtQuick.Templates/ItemDelegate 6.3", - "QtQuick.Templates/ItemDelegate 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "highlighted" - type: "bool" - read: "isHighlighted" - write: "setHighlighted" - notify: "highlightedChanged" - index: 0 - isFinal: true - } - Signal { name: "highlightedChanged" } - } - Component { - file: "private/qquicklabel_p.h" - name: "QQuickLabel" - accessSemantics: "reference" - prototype: "QQuickText" - deferredNames: ["background"] - exports: [ - "QtQuick.Templates/Label 2.0", - "QtQuick.Templates/Label 2.1", - "QtQuick.Templates/Label 2.2", - "QtQuick.Templates/Label 2.3", - "QtQuick.Templates/Label 2.4", - "QtQuick.Templates/Label 2.5", - "QtQuick.Templates/Label 2.6", - "QtQuick.Templates/Label 2.7", - "QtQuick.Templates/Label 2.9", - "QtQuick.Templates/Label 2.10", - "QtQuick.Templates/Label 2.11", - "QtQuick.Templates/Label 6.0", - "QtQuick.Templates/Label 6.2", - "QtQuick.Templates/Label 6.3", - "QtQuick.Templates/Label 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 0 - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 1 - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 4 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 5 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 6 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 7 - isFinal: true - } - Signal { name: "fontChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - } - Component { - file: "private/qquickmenu_p.h" - name: "QQuickMenu" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPopup" - exports: [ - "QtQuick.Templates/Menu 2.0", - "QtQuick.Templates/Menu 2.1", - "QtQuick.Templates/Menu 2.3", - "QtQuick.Templates/Menu 2.5", - "QtQuick.Templates/Menu 6.0", - "QtQuick.Templates/Menu 6.5" - ] - exportMetaObjectRevisions: [512, 513, 515, 517, 1536, 1541] - Property { - name: "contentModel" - type: "QVariant" - read: "contentModel" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 2 - isFinal: true - } - Property { - name: "count" - revision: 515 - type: "int" - read: "count" - notify: "countChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "cascade" - revision: 515 - type: "bool" - read: "cascade" - write: "setCascade" - reset: "resetCascade" - notify: "cascadeChanged" - index: 4 - isFinal: true - } - Property { - name: "overlap" - revision: 515 - type: "double" - read: "overlap" - write: "setOverlap" - notify: "overlapChanged" - index: 5 - isFinal: true - } - Property { - name: "delegate" - revision: 515 - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 6 - isFinal: true - } - Property { - name: "currentIndex" - revision: 515 - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 7 - isFinal: true - } - Property { - name: "icon" - revision: 1541 - type: "QQuickIcon" - read: "icon" - write: "setIcon" - notify: "iconChanged" - index: 8 - isFinal: true - } - Signal { - name: "titleChanged" - Parameter { name: "title"; type: "QString" } - } - Signal { name: "countChanged"; revision: 515 } - Signal { - name: "cascadeChanged" - revision: 515 - Parameter { name: "cascade"; type: "bool" } - } - Signal { name: "overlapChanged"; revision: 515 } - Signal { name: "delegateChanged"; revision: 515 } - Signal { name: "currentIndexChanged"; revision: 515 } - Signal { - name: "iconChanged" - revision: 1541 - Parameter { name: "icon"; type: "QQuickIcon" } - } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "addItem" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "insertItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "moveItem" - Parameter { name: "from"; type: "int" } - Parameter { name: "to"; type: "int" } - } - Method { - name: "removeItem" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "takeItem" - revision: 515 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "menuAt" - revision: 515 - type: "QQuickMenu" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "addMenu" - revision: 515 - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "insertMenu" - revision: 515 - Parameter { name: "index"; type: "int" } - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "removeMenu" - revision: 515 - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "takeMenu" - revision: 515 - type: "QQuickMenu" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "actionAt" - revision: 515 - type: "QQuickAction" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "addAction" - revision: 515 - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { - name: "insertAction" - revision: 515 - Parameter { name: "index"; type: "int" } - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { - name: "removeAction" - revision: 515 - Parameter { name: "action"; type: "QQuickAction"; isPointer: true } - } - Method { - name: "takeAction" - revision: 515 - type: "QQuickAction" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { name: "popup"; revision: 515; isJavaScriptFunction: true } - Method { name: "dismiss"; revision: 515 } - } - Component { - file: "private/qquickmenubar_p.h" - name: "QQuickMenuBar" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - exports: [ - "QtQuick.Templates/MenuBar 2.3", - "QtQuick.Templates/MenuBar 2.4", - "QtQuick.Templates/MenuBar 2.5", - "QtQuick.Templates/MenuBar 2.7", - "QtQuick.Templates/MenuBar 2.11", - "QtQuick.Templates/MenuBar 6.0", - "QtQuick.Templates/MenuBar 6.3", - "QtQuick.Templates/MenuBar 6.7" - ] - exportMetaObjectRevisions: [515, 516, 517, 519, 523, 1536, 1539, 1543] - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 0 - isFinal: true - } - Property { - name: "menus" - type: "QQuickMenu" - isList: true - read: "menus" - notify: "menusChanged" - index: 1 - privateClass: "QQuickMenuBarPrivate" - isReadonly: true - isFinal: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 2 - privateClass: "QQuickMenuBarPrivate" - isReadonly: true - isFinal: true - } - Signal { name: "delegateChanged" } - Signal { name: "menusChanged" } - Method { - name: "menuAt" - type: "QQuickMenu" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "addMenu" - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "insertMenu" - Parameter { name: "index"; type: "int" } - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "removeMenu" - Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } - } - Method { - name: "takeMenu" - type: "QQuickMenu" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquickmenubaritem_p.h" - name: "QQuickMenuBarItem" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/MenuBarItem 2.3", - "QtQuick.Templates/MenuBarItem 2.4", - "QtQuick.Templates/MenuBarItem 2.5", - "QtQuick.Templates/MenuBarItem 2.7", - "QtQuick.Templates/MenuBarItem 2.11", - "QtQuick.Templates/MenuBarItem 6.0", - "QtQuick.Templates/MenuBarItem 6.3", - "QtQuick.Templates/MenuBarItem 6.7" - ] - exportMetaObjectRevisions: [515, 516, 517, 519, 523, 1536, 1539, 1543] - Property { - name: "menuBar" - type: "QQuickMenuBar" - isPointer: true - read: "menuBar" - notify: "menuBarChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "menu" - type: "QQuickMenu" - isPointer: true - read: "menu" - write: "setMenu" - notify: "menuChanged" - index: 1 - isFinal: true - } - Property { - name: "highlighted" - type: "bool" - read: "isHighlighted" - write: "setHighlighted" - notify: "highlightedChanged" - index: 2 - isFinal: true - } - Signal { name: "triggered" } - Signal { name: "menuBarChanged" } - Signal { name: "menuChanged" } - Signal { name: "highlightedChanged" } - } - Component { - file: "private/qquickmenuitem_p.h" - name: "QQuickMenuItem" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - deferredNames: ["arrow", "background", "contentItem", "indicator"] - exports: [ - "QtQuick.Templates/MenuItem 2.0", - "QtQuick.Templates/MenuItem 2.1", - "QtQuick.Templates/MenuItem 2.2", - "QtQuick.Templates/MenuItem 2.3", - "QtQuick.Templates/MenuItem 2.4", - "QtQuick.Templates/MenuItem 2.5", - "QtQuick.Templates/MenuItem 2.7", - "QtQuick.Templates/MenuItem 2.11", - "QtQuick.Templates/MenuItem 6.0", - "QtQuick.Templates/MenuItem 6.3", - "QtQuick.Templates/MenuItem 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "highlighted" - type: "bool" - read: "isHighlighted" - write: "setHighlighted" - notify: "highlightedChanged" - index: 0 - isFinal: true - } - Property { - name: "arrow" - revision: 515 - type: "QQuickItem" - isPointer: true - read: "arrow" - write: "setArrow" - notify: "arrowChanged" - index: 1 - isFinal: true - } - Property { - name: "menu" - revision: 515 - type: "QQuickMenu" - isPointer: true - read: "menu" - notify: "menuChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "subMenu" - revision: 515 - type: "QQuickMenu" - isPointer: true - read: "subMenu" - notify: "subMenuChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { name: "triggered" } - Signal { name: "highlightedChanged" } - Signal { name: "arrowChanged"; revision: 515 } - Signal { name: "menuChanged"; revision: 515 } - Signal { name: "subMenuChanged"; revision: 515 } - } - Component { - file: "private/qquickmenuseparator_p.h" - name: "QQuickMenuSeparator" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/MenuSeparator 2.1", - "QtQuick.Templates/MenuSeparator 2.4", - "QtQuick.Templates/MenuSeparator 2.5", - "QtQuick.Templates/MenuSeparator 2.7", - "QtQuick.Templates/MenuSeparator 2.11", - "QtQuick.Templates/MenuSeparator 6.0", - "QtQuick.Templates/MenuSeparator 6.3", - "QtQuick.Templates/MenuSeparator 6.7" - ] - exportMetaObjectRevisions: [513, 516, 517, 519, 523, 1536, 1539, 1543] - } - Component { - file: "private/qquickmonthgrid_p.h" - name: "QQuickMonthGrid" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/AbstractMonthGrid 6.3", - "QtQuick.Templates/AbstractMonthGrid 6.7" - ] - exportMetaObjectRevisions: [1539, 1543] - Property { - name: "month" - type: "int" - read: "month" - write: "setMonth" - notify: "monthChanged" - index: 0 - isFinal: true - } - Property { - name: "year" - type: "int" - read: "year" - write: "setYear" - notify: "yearChanged" - index: 1 - isFinal: true - } - Property { - name: "source" - type: "QVariant" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 2 - isFinal: true - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 3 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 4 - isFinal: true - } - Signal { name: "monthChanged" } - Signal { name: "yearChanged" } - Signal { name: "sourceChanged" } - Signal { name: "titleChanged" } - Signal { name: "delegateChanged" } - Signal { - name: "pressed" - Parameter { name: "date"; type: "QDate" } - } - Signal { - name: "released" - Parameter { name: "date"; type: "QDate" } - } - Signal { - name: "clicked" - Parameter { name: "date"; type: "QDate" } - } - Signal { - name: "pressAndHold" - Parameter { name: "date"; type: "QDate" } - } - } - Component { - file: "private/qquickoverlay_p.h" - name: "QQuickOverlay" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick.Templates/Overlay 2.3", - "QtQuick.Templates/Overlay 2.4", - "QtQuick.Templates/Overlay 2.7", - "QtQuick.Templates/Overlay 2.11", - "QtQuick.Templates/Overlay 6.0", - "QtQuick.Templates/Overlay 6.3", - "QtQuick.Templates/Overlay 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543] - attachedType: "QQuickOverlayAttached" - Property { - name: "modal" - type: "QQmlComponent" - isPointer: true - read: "modal" - write: "setModal" - notify: "modalChanged" - index: 0 - isFinal: true - } - Property { - name: "modeless" - type: "QQmlComponent" - isPointer: true - read: "modeless" - write: "setModeless" - notify: "modelessChanged" - index: 1 - isFinal: true - } - Signal { name: "modalChanged" } - Signal { name: "modelessChanged" } - Signal { name: "pressed" } - Signal { name: "released" } - } - Component { - file: "private/qquickoverlay_p.h" - name: "QQuickOverlayAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "overlay" - type: "QQuickOverlay" - isPointer: true - read: "overlay" - notify: "overlayChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "modal" - type: "QQmlComponent" - isPointer: true - read: "modal" - write: "setModal" - notify: "modalChanged" - index: 1 - isFinal: true - } - Property { - name: "modeless" - type: "QQmlComponent" - isPointer: true - read: "modeless" - write: "setModeless" - notify: "modelessChanged" - index: 2 - isFinal: true - } - Signal { name: "overlayChanged" } - Signal { name: "modalChanged" } - Signal { name: "modelessChanged" } - Signal { name: "pressed" } - Signal { name: "released" } - } - Component { - file: "private/qquickpage_p.h" - name: "QQuickPage" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPane" - exports: [ - "QtQuick.Templates/Page 2.0", - "QtQuick.Templates/Page 2.1", - "QtQuick.Templates/Page 2.4", - "QtQuick.Templates/Page 2.5", - "QtQuick.Templates/Page 2.7", - "QtQuick.Templates/Page 2.11", - "QtQuick.Templates/Page 6.0", - "QtQuick.Templates/Page 6.3", - "QtQuick.Templates/Page 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "titleChanged" - index: 0 - isFinal: true - } - Property { - name: "header" - type: "QQuickItem" - isPointer: true - read: "header" - write: "setHeader" - notify: "headerChanged" - index: 1 - isFinal: true - } - Property { - name: "footer" - type: "QQuickItem" - isPointer: true - read: "footer" - write: "setFooter" - notify: "footerChanged" - index: 2 - isFinal: true - } - Property { - name: "implicitHeaderWidth" - revision: 517 - type: "double" - read: "implicitHeaderWidth" - notify: "implicitHeaderWidthChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHeaderHeight" - revision: 517 - type: "double" - read: "implicitHeaderHeight" - notify: "implicitHeaderHeightChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterWidth" - revision: 517 - type: "double" - read: "implicitFooterWidth" - notify: "implicitFooterWidthChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "implicitFooterHeight" - revision: 517 - type: "double" - read: "implicitFooterHeight" - notify: "implicitFooterHeightChanged" - index: 6 - isReadonly: true - isFinal: true - } - Signal { name: "titleChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "implicitHeaderWidthChanged" } - Signal { name: "implicitHeaderHeightChanged" } - Signal { name: "implicitFooterWidthChanged" } - Signal { name: "implicitFooterHeightChanged" } - } - Component { - file: "private/qquickpageindicator_p.h" - name: "QQuickPageIndicator" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/PageIndicator 2.0", - "QtQuick.Templates/PageIndicator 2.1", - "QtQuick.Templates/PageIndicator 2.4", - "QtQuick.Templates/PageIndicator 2.5", - "QtQuick.Templates/PageIndicator 2.7", - "QtQuick.Templates/PageIndicator 2.11", - "QtQuick.Templates/PageIndicator 6.0", - "QtQuick.Templates/PageIndicator 6.3", - "QtQuick.Templates/PageIndicator 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "count" - type: "int" - read: "count" - write: "setCount" - notify: "countChanged" - index: 0 - isFinal: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 1 - isFinal: true - } - Property { - name: "interactive" - type: "bool" - read: "isInteractive" - write: "setInteractive" - notify: "interactiveChanged" - index: 2 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 3 - isFinal: true - } - Signal { name: "countChanged" } - Signal { name: "currentIndexChanged" } - Signal { name: "interactiveChanged" } - Signal { name: "delegateChanged" } - } - Component { - file: "private/qquickpane_p.h" - name: "QQuickPane" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/Pane 2.0", - "QtQuick.Templates/Pane 2.1", - "QtQuick.Templates/Pane 2.4", - "QtQuick.Templates/Pane 2.5", - "QtQuick.Templates/Pane 2.7", - "QtQuick.Templates/Pane 2.11", - "QtQuick.Templates/Pane 6.0", - "QtQuick.Templates/Pane 6.3", - "QtQuick.Templates/Pane 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - reset: "resetContentWidth" - notify: "contentWidthChanged" - index: 0 - isFinal: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - reset: "resetContentHeight" - notify: "contentHeightChanged" - index: 1 - isFinal: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 2 - privateClass: "QQuickPanePrivate" - isReadonly: true - isFinal: true - } - Property { - name: "contentChildren" - type: "QQuickItem" - isList: true - read: "contentChildren" - notify: "contentChildrenChanged" - index: 3 - privateClass: "QQuickPanePrivate" - isReadonly: true - isFinal: true - } - Signal { name: "contentWidthChanged" } - Signal { name: "contentHeightChanged" } - Signal { name: "contentChildrenChanged" } - } - Component { - file: "private/qquickpopup_p.h" - name: "QQuickPopup" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - deferredNames: ["background", "contentItem"] - exports: [ - "QtQuick.Templates/Popup 2.0", - "QtQuick.Templates/Popup 2.1", - "QtQuick.Templates/Popup 2.3", - "QtQuick.Templates/Popup 2.5", - "QtQuick.Templates/Popup 6.0" - ] - exportMetaObjectRevisions: [512, 513, 515, 517, 1536] - Enum { - name: "ClosePolicy" - alias: "ClosePolicyFlag" - isFlag: true - values: [ - "NoAutoClose", - "CloseOnPressOutside", - "CloseOnPressOutsideParent", - "CloseOnReleaseOutside", - "CloseOnReleaseOutsideParent", - "CloseOnEscape" - ] - } - Enum { - name: "TransformOrigin" - values: [ - "TopLeft", - "Top", - "TopRight", - "Left", - "Center", - "Right", - "BottomLeft", - "Bottom", - "BottomRight" - ] - } - Property { - name: "x" - type: "double" - read: "x" - write: "setX" - notify: "xChanged" - index: 0 - isFinal: true - } - Property { - name: "y" - type: "double" - read: "y" - write: "setY" - notify: "yChanged" - index: 1 - isFinal: true - } - Property { - name: "z" - type: "double" - read: "z" - write: "setZ" - reset: "resetZ" - notify: "zChanged" - index: 2 - isFinal: true - } - Property { - name: "width" - type: "double" - read: "width" - write: "setWidth" - reset: "resetWidth" - notify: "widthChanged" - index: 3 - isFinal: true - } - Property { - name: "height" - type: "double" - read: "height" - write: "setHeight" - reset: "resetHeight" - notify: "heightChanged" - index: 4 - isFinal: true - } - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - write: "setImplicitWidth" - notify: "implicitWidthChanged" - index: 5 - isFinal: true - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - write: "setImplicitHeight" - notify: "implicitHeightChanged" - index: 6 - isFinal: true - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - notify: "contentWidthChanged" - index: 7 - isFinal: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - notify: "contentHeightChanged" - index: 8 - isFinal: true - } - Property { - name: "availableWidth" - type: "double" - read: "availableWidth" - notify: "availableWidthChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "availableHeight" - type: "double" - read: "availableHeight" - notify: "availableHeightChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "margins" - type: "double" - read: "margins" - write: "setMargins" - reset: "resetMargins" - notify: "marginsChanged" - index: 11 - isFinal: true - } - Property { - name: "topMargin" - type: "double" - read: "topMargin" - write: "setTopMargin" - reset: "resetTopMargin" - notify: "topMarginChanged" - index: 12 - isFinal: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - reset: "resetLeftMargin" - notify: "leftMarginChanged" - index: 13 - isFinal: true - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - reset: "resetRightMargin" - notify: "rightMarginChanged" - index: 14 - isFinal: true - } - Property { - name: "bottomMargin" - type: "double" - read: "bottomMargin" - write: "setBottomMargin" - reset: "resetBottomMargin" - notify: "bottomMarginChanged" - index: 15 - isFinal: true - } - Property { - name: "padding" - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 16 - isFinal: true - } - Property { - name: "topPadding" - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 17 - isFinal: true - } - Property { - name: "leftPadding" - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 18 - isFinal: true - } - Property { - name: "rightPadding" - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 19 - isFinal: true - } - Property { - name: "bottomPadding" - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 20 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - reset: "resetLocale" - notify: "localeChanged" - index: 21 - isFinal: true - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - reset: "resetFont" - notify: "fontChanged" - index: 22 - isFinal: true - } - Property { - name: "parent" - type: "QQuickItem" - isPointer: true - read: "parentItem" - write: "setParentItem" - reset: "resetParentItem" - notify: "parentChanged" - index: 23 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 24 - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - write: "setContentItem" - notify: "contentItemChanged" - index: 25 - isFinal: true - } - Property { - name: "contentData" - type: "QObject" - isList: true - read: "contentData" - index: 26 - privateClass: "QQuickPopupPrivate" - isReadonly: true - } - Property { - name: "contentChildren" - type: "QQuickItem" - isList: true - read: "contentChildren" - notify: "contentChildrenChanged" - index: 27 - privateClass: "QQuickPopupPrivate" - isReadonly: true - isFinal: true - } - Property { - name: "clip" - type: "bool" - read: "clip" - write: "setClip" - notify: "clipChanged" - index: 28 - isFinal: true - } - Property { - name: "focus" - type: "bool" - read: "hasFocus" - write: "setFocus" - notify: "focusChanged" - index: 29 - isFinal: true - } - Property { - name: "activeFocus" - type: "bool" - read: "hasActiveFocus" - notify: "activeFocusChanged" - index: 30 - isReadonly: true - isFinal: true - } - Property { - name: "modal" - type: "bool" - read: "isModal" - write: "setModal" - notify: "modalChanged" - index: 31 - isFinal: true - } - Property { - name: "dim" - type: "bool" - read: "dim" - write: "setDim" - reset: "resetDim" - notify: "dimChanged" - index: 32 - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 33 - isFinal: true - } - Property { - name: "opacity" - type: "double" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 34 - isFinal: true - } - Property { - name: "scale" - type: "double" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 35 - isFinal: true - } - Property { - name: "closePolicy" - type: "ClosePolicy" - read: "closePolicy" - write: "setClosePolicy" - reset: "resetClosePolicy" - notify: "closePolicyChanged" - index: 36 - isFinal: true - } - Property { - name: "transformOrigin" - type: "TransformOrigin" - read: "transformOrigin" - write: "setTransformOrigin" - index: 37 - isFinal: true - } - Property { - name: "enter" - type: "QQuickTransition" - isPointer: true - read: "enter" - write: "setEnter" - notify: "enterChanged" - index: 38 - isFinal: true - } - Property { - name: "exit" - type: "QQuickTransition" - isPointer: true - read: "exit" - write: "setExit" - notify: "exitChanged" - index: 39 - isFinal: true - } - Property { - name: "spacing" - revision: 513 - type: "double" - read: "spacing" - write: "setSpacing" - reset: "resetSpacing" - notify: "spacingChanged" - index: 40 - isFinal: true - } - Property { - name: "opened" - revision: 515 - type: "bool" - read: "isOpened" - notify: "openedChanged" - index: 41 - isReadonly: true - isFinal: true - } - Property { - name: "mirrored" - revision: 515 - type: "bool" - read: "isMirrored" - notify: "mirroredChanged" - index: 42 - isReadonly: true - isFinal: true - } - Property { - name: "enabled" - revision: 515 - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 43 - isFinal: true - } - Property { - name: "palette" - revision: 515 - type: "QQuickPalette" - isPointer: true - read: "palette" - write: "setPalette" - reset: "resetPalette" - notify: "paletteChanged" - index: 44 - privateClass: "QQuickPopupPrivate" - } - Property { - name: "horizontalPadding" - type: "double" - read: "horizontalPadding" - write: "setHorizontalPadding" - reset: "resetHorizontalPadding" - notify: "horizontalPaddingChanged" - index: 45 - isFinal: true - } - Property { - name: "verticalPadding" - type: "double" - read: "verticalPadding" - write: "setVerticalPadding" - reset: "resetVerticalPadding" - notify: "verticalPaddingChanged" - index: 46 - isFinal: true - } - Property { - name: "anchors" - revision: 517 - type: "QQuickPopupAnchors" - isPointer: true - read: "getAnchors" - index: 47 - privateClass: "QQuickPopupPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "implicitContentWidth" - revision: 517 - type: "double" - read: "implicitContentWidth" - notify: "implicitContentWidthChanged" - index: 48 - isReadonly: true - isFinal: true - } - Property { - name: "implicitContentHeight" - revision: 517 - type: "double" - read: "implicitContentHeight" - notify: "implicitContentHeightChanged" - index: 49 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 50 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 51 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 52 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 53 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 54 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 55 - isFinal: true - } - Signal { name: "opened" } - Signal { name: "closed" } - Signal { name: "aboutToShow" } - Signal { name: "aboutToHide" } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - Signal { name: "implicitWidthChanged" } - Signal { name: "implicitHeightChanged" } - Signal { name: "contentWidthChanged" } - Signal { name: "contentHeightChanged" } - Signal { name: "availableWidthChanged" } - Signal { name: "availableHeightChanged" } - Signal { name: "marginsChanged" } - Signal { name: "topMarginChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "bottomMarginChanged" } - Signal { name: "paddingChanged" } - Signal { name: "topPaddingChanged" } - Signal { name: "leftPaddingChanged" } - Signal { name: "rightPaddingChanged" } - Signal { name: "bottomPaddingChanged" } - Signal { name: "fontChanged" } - Signal { name: "localeChanged" } - Signal { name: "parentChanged" } - Signal { name: "backgroundChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "contentChildrenChanged" } - Signal { name: "clipChanged" } - Signal { name: "focusChanged" } - Signal { name: "activeFocusChanged" } - Signal { name: "modalChanged" } - Signal { name: "dimChanged" } - Signal { name: "visibleChanged" } - Signal { name: "opacityChanged" } - Signal { name: "scaleChanged" } - Signal { name: "closePolicyChanged" } - Signal { name: "enterChanged" } - Signal { name: "exitChanged" } - Signal { - name: "windowChanged" - Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } - } - Signal { name: "spacingChanged"; revision: 513 } - Signal { name: "openedChanged"; revision: 515 } - Signal { name: "mirroredChanged"; revision: 515 } - Signal { name: "enabledChanged"; revision: 515 } - Signal { name: "paletteChanged"; revision: 515 } - Signal { name: "paletteCreated"; revision: 515 } - Signal { name: "horizontalPaddingChanged"; revision: 517 } - Signal { name: "verticalPaddingChanged"; revision: 517 } - Signal { name: "implicitContentWidthChanged"; revision: 517 } - Signal { name: "implicitContentHeightChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - Method { name: "open" } - Method { name: "close" } - Method { - name: "forceActiveFocus" - Parameter { name: "reason"; type: "Qt::FocusReason" } - } - Method { name: "forceActiveFocus"; isCloned: true } - } - Component { - file: "private/qquickpopupanchors_p.h" - name: "QQuickPopupAnchors" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "centerIn" - type: "QQuickItem" - isPointer: true - read: "centerIn" - write: "setCenterIn" - reset: "resetCenterIn" - notify: "centerInChanged" - index: 0 - isFinal: true - } - Signal { name: "centerInChanged" } - } - Component { - file: "private/qquickprogressbar_p.h" - name: "QQuickProgressBar" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/ProgressBar 2.0", - "QtQuick.Templates/ProgressBar 2.1", - "QtQuick.Templates/ProgressBar 2.4", - "QtQuick.Templates/ProgressBar 2.5", - "QtQuick.Templates/ProgressBar 2.7", - "QtQuick.Templates/ProgressBar 2.11", - "QtQuick.Templates/ProgressBar 6.0", - "QtQuick.Templates/ProgressBar 6.3", - "QtQuick.Templates/ProgressBar 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "double" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 2 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - notify: "positionChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "visualPosition" - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "indeterminate" - type: "bool" - read: "isIndeterminate" - write: "setIndeterminate" - notify: "indeterminateChanged" - index: 5 - isFinal: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "valueChanged" } - Signal { name: "positionChanged" } - Signal { name: "visualPositionChanged" } - Signal { name: "indeterminateChanged" } - } - Component { - file: "private/qquickradiobutton_p.h" - name: "QQuickRadioButton" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/RadioButton 2.0", - "QtQuick.Templates/RadioButton 2.1", - "QtQuick.Templates/RadioButton 2.2", - "QtQuick.Templates/RadioButton 2.3", - "QtQuick.Templates/RadioButton 2.4", - "QtQuick.Templates/RadioButton 2.5", - "QtQuick.Templates/RadioButton 2.7", - "QtQuick.Templates/RadioButton 2.11", - "QtQuick.Templates/RadioButton 6.0", - "QtQuick.Templates/RadioButton 6.3", - "QtQuick.Templates/RadioButton 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - } - Component { - file: "private/qquickradiodelegate_p.h" - name: "QQuickRadioDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Templates/RadioDelegate 2.0", - "QtQuick.Templates/RadioDelegate 2.1", - "QtQuick.Templates/RadioDelegate 2.2", - "QtQuick.Templates/RadioDelegate 2.3", - "QtQuick.Templates/RadioDelegate 2.4", - "QtQuick.Templates/RadioDelegate 2.5", - "QtQuick.Templates/RadioDelegate 2.7", - "QtQuick.Templates/RadioDelegate 2.11", - "QtQuick.Templates/RadioDelegate 6.0", - "QtQuick.Templates/RadioDelegate 6.3", - "QtQuick.Templates/RadioDelegate 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - } - Component { - file: "private/qquickrangeslider_p.h" - name: "QQuickRangeSlider" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/RangeSlider 2.0", - "QtQuick.Templates/RangeSlider 2.1", - "QtQuick.Templates/RangeSlider 2.2", - "QtQuick.Templates/RangeSlider 2.3", - "QtQuick.Templates/RangeSlider 2.4", - "QtQuick.Templates/RangeSlider 2.5", - "QtQuick.Templates/RangeSlider 2.7", - "QtQuick.Templates/RangeSlider 2.11", - "QtQuick.Templates/RangeSlider 6.0", - "QtQuick.Templates/RangeSlider 6.3", - "QtQuick.Templates/RangeSlider 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapAlways", "SnapOnRelease"] - } - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "double" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "first" - type: "QQuickRangeSliderNode" - isPointer: true - read: "first" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "second" - type: "QQuickRangeSliderNode" - isPointer: true - read: "second" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "stepSize" - type: "double" - read: "stepSize" - write: "setStepSize" - notify: "stepSizeChanged" - index: 4 - isFinal: true - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 5 - isFinal: true - } - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 6 - isFinal: true - } - Property { - name: "live" - revision: 514 - type: "bool" - read: "live" - write: "setLive" - notify: "liveChanged" - index: 7 - isFinal: true - } - Property { - name: "horizontal" - revision: 515 - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - revision: 515 - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "touchDragThreshold" - revision: 517 - type: "double" - read: "touchDragThreshold" - write: "setTouchDragThreshold" - reset: "resetTouchDragThreshold" - notify: "touchDragThresholdChanged" - index: 10 - isFinal: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "stepSizeChanged" } - Signal { name: "snapModeChanged" } - Signal { name: "orientationChanged" } - Signal { name: "liveChanged"; revision: 514 } - Signal { name: "touchDragThresholdChanged"; revision: 517 } - Method { - name: "setValues" - Parameter { name: "firstValue"; type: "double" } - Parameter { name: "secondValue"; type: "double" } - } - Method { - name: "valueAt" - revision: 517 - type: "double" - Parameter { name: "position"; type: "double" } - } - } - Component { - file: "private/qquickrangeslider_p.h" - name: "QQuickRangeSliderNode" - accessSemantics: "reference" - prototype: "QObject" - deferredNames: ["handle"] - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 0 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - notify: "positionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "visualPosition" - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "handle" - type: "QQuickItem" - isPointer: true - read: "handle" - write: "setHandle" - notify: "handleChanged" - index: 3 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - notify: "pressedChanged" - index: 4 - isFinal: true - } - Property { - name: "hovered" - revision: 513 - type: "bool" - read: "isHovered" - write: "setHovered" - notify: "hoveredChanged" - index: 5 - isFinal: true - } - Property { - name: "implicitHandleWidth" - revision: 517 - type: "double" - read: "implicitHandleWidth" - notify: "implicitHandleWidthChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHandleHeight" - revision: 517 - type: "double" - read: "implicitHandleHeight" - notify: "implicitHandleHeightChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { name: "valueChanged" } - Signal { name: "positionChanged" } - Signal { name: "visualPositionChanged" } - Signal { name: "handleChanged" } - Signal { name: "pressedChanged" } - Signal { name: "hoveredChanged"; revision: 513 } - Signal { name: "moved" } - Signal { name: "implicitHandleWidthChanged" } - Signal { name: "implicitHandleHeightChanged" } - Method { name: "increase" } - Method { name: "decrease" } - } - Component { - file: "private/qquickroundbutton_p.h" - name: "QQuickRoundButton" - accessSemantics: "reference" - prototype: "QQuickButton" - exports: [ - "QtQuick.Templates/RoundButton 2.1", - "QtQuick.Templates/RoundButton 2.2", - "QtQuick.Templates/RoundButton 2.3", - "QtQuick.Templates/RoundButton 2.4", - "QtQuick.Templates/RoundButton 2.5", - "QtQuick.Templates/RoundButton 2.7", - "QtQuick.Templates/RoundButton 2.11", - "QtQuick.Templates/RoundButton 6.0", - "QtQuick.Templates/RoundButton 6.3", - "QtQuick.Templates/RoundButton 6.7" - ] - exportMetaObjectRevisions: [ - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "radius" - type: "double" - read: "radius" - write: "setRadius" - reset: "resetRadius" - notify: "radiusChanged" - index: 0 - isFinal: true - } - Signal { name: "radiusChanged" } - } - Component { - file: "private/qquickscrollbar_p.h" - name: "QQuickScrollBar" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/ScrollBar 2.0", - "QtQuick.Templates/ScrollBar 2.1", - "QtQuick.Templates/ScrollBar 2.2", - "QtQuick.Templates/ScrollBar 2.3", - "QtQuick.Templates/ScrollBar 2.4", - "QtQuick.Templates/ScrollBar 2.5", - "QtQuick.Templates/ScrollBar 2.7", - "QtQuick.Templates/ScrollBar 2.11", - "QtQuick.Templates/ScrollBar 6.0", - "QtQuick.Templates/ScrollBar 6.3", - "QtQuick.Templates/ScrollBar 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickScrollBarAttached" - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapAlways", "SnapOnRelease"] - } - Enum { - name: "Policy" - values: ["AsNeeded", "AlwaysOff", "AlwaysOn"] - } - Property { - name: "size" - type: "double" - read: "size" - write: "setSize" - notify: "sizeChanged" - index: 0 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 1 - isFinal: true - } - Property { - name: "stepSize" - type: "double" - read: "stepSize" - write: "setStepSize" - notify: "stepSizeChanged" - index: 2 - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 3 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - notify: "pressedChanged" - index: 4 - isFinal: true - } - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 5 - isFinal: true - } - Property { - name: "snapMode" - revision: 514 - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 6 - isFinal: true - } - Property { - name: "interactive" - revision: 514 - type: "bool" - read: "isInteractive" - write: "setInteractive" - reset: "resetInteractive" - notify: "interactiveChanged" - index: 7 - isFinal: true - } - Property { - name: "policy" - revision: 514 - type: "Policy" - read: "policy" - write: "setPolicy" - notify: "policyChanged" - index: 8 - isFinal: true - } - Property { - name: "horizontal" - revision: 515 - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - revision: 515 - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "minimumSize" - revision: 516 - type: "double" - read: "minimumSize" - write: "setMinimumSize" - notify: "minimumSizeChanged" - index: 11 - isFinal: true - } - Property { - name: "visualSize" - revision: 516 - type: "double" - read: "visualSize" - notify: "visualSizeChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "visualPosition" - revision: 516 - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "__decreaseVisual" - type: "QQuickIndicatorButton" - isPointer: true - read: "decreaseVisual" - index: 14 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "__increaseVisual" - type: "QQuickIndicatorButton" - isPointer: true - read: "increaseVisual" - index: 15 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "sizeChanged" } - Signal { name: "positionChanged" } - Signal { name: "stepSizeChanged" } - Signal { name: "activeChanged" } - Signal { name: "pressedChanged" } - Signal { name: "orientationChanged" } - Signal { name: "snapModeChanged"; revision: 514 } - Signal { name: "interactiveChanged"; revision: 514 } - Signal { name: "policyChanged"; revision: 514 } - Signal { name: "minimumSizeChanged"; revision: 516 } - Signal { name: "visualSizeChanged"; revision: 516 } - Signal { name: "visualPositionChanged"; revision: 516 } - Method { name: "increase" } - Method { name: "decrease" } - Method { - name: "setSize" - Parameter { name: "size"; type: "double" } - } - Method { - name: "setPosition" - Parameter { name: "position"; type: "double" } - } - } - Component { - file: "private/qquickscrollbar_p.h" - name: "QQuickScrollBarAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "horizontal" - type: "QQuickScrollBar" - isPointer: true - read: "horizontal" - write: "setHorizontal" - notify: "horizontalChanged" - index: 0 - isFinal: true - } - Property { - name: "vertical" - type: "QQuickScrollBar" - isPointer: true - read: "vertical" - write: "setVertical" - notify: "verticalChanged" - index: 1 - isFinal: true - } - Signal { name: "horizontalChanged" } - Signal { name: "verticalChanged" } - } - Component { - file: "private/qquickscrollindicator_p.h" - name: "QQuickScrollIndicator" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/ScrollIndicator 2.0", - "QtQuick.Templates/ScrollIndicator 2.1", - "QtQuick.Templates/ScrollIndicator 2.3", - "QtQuick.Templates/ScrollIndicator 2.4", - "QtQuick.Templates/ScrollIndicator 2.5", - "QtQuick.Templates/ScrollIndicator 2.7", - "QtQuick.Templates/ScrollIndicator 2.11", - "QtQuick.Templates/ScrollIndicator 6.0", - "QtQuick.Templates/ScrollIndicator 6.3", - "QtQuick.Templates/ScrollIndicator 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickScrollIndicatorAttached" - Property { - name: "size" - type: "double" - read: "size" - write: "setSize" - notify: "sizeChanged" - index: 0 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 1 - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 2 - isFinal: true - } - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 3 - isFinal: true - } - Property { - name: "horizontal" - revision: 515 - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - revision: 515 - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "minimumSize" - revision: 516 - type: "double" - read: "minimumSize" - write: "setMinimumSize" - notify: "minimumSizeChanged" - index: 6 - isFinal: true - } - Property { - name: "visualSize" - revision: 516 - type: "double" - read: "visualSize" - notify: "visualSizeChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "visualPosition" - revision: 516 - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 8 - isReadonly: true - isFinal: true - } - Signal { name: "sizeChanged" } - Signal { name: "positionChanged" } - Signal { name: "activeChanged" } - Signal { name: "orientationChanged" } - Signal { name: "minimumSizeChanged"; revision: 516 } - Signal { name: "visualSizeChanged"; revision: 516 } - Signal { name: "visualPositionChanged"; revision: 516 } - Method { - name: "setSize" - Parameter { name: "size"; type: "double" } - } - Method { - name: "setPosition" - Parameter { name: "position"; type: "double" } - } - } - Component { - file: "private/qquickscrollindicator_p.h" - name: "QQuickScrollIndicatorAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "horizontal" - type: "QQuickScrollIndicator" - isPointer: true - read: "horizontal" - write: "setHorizontal" - notify: "horizontalChanged" - index: 0 - isFinal: true - } - Property { - name: "vertical" - type: "QQuickScrollIndicator" - isPointer: true - read: "vertical" - write: "setVertical" - notify: "verticalChanged" - index: 1 - isFinal: true - } - Signal { name: "horizontalChanged" } - Signal { name: "verticalChanged" } - } - Component { - file: "private/qquickscrollview_p.h" - name: "QQuickScrollView" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPane" - exports: [ - "QtQuick.Templates/ScrollView 2.2", - "QtQuick.Templates/ScrollView 2.4", - "QtQuick.Templates/ScrollView 2.5", - "QtQuick.Templates/ScrollView 2.7", - "QtQuick.Templates/ScrollView 2.11", - "QtQuick.Templates/ScrollView 6.0", - "QtQuick.Templates/ScrollView 6.3", - "QtQuick.Templates/ScrollView 6.6", - "QtQuick.Templates/ScrollView 6.7" - ] - exportMetaObjectRevisions: [ - 514, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - Property { - name: "effectiveScrollBarWidth" - revision: 1542 - type: "double" - read: "effectiveScrollBarWidth" - notify: "effectiveScrollBarWidthChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "effectiveScrollBarHeight" - revision: 1542 - type: "double" - read: "effectiveScrollBarHeight" - notify: "effectiveScrollBarHeightChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "effectiveScrollBarWidthChanged"; revision: 1542 } - Signal { name: "effectiveScrollBarHeightChanged"; revision: 1542 } - } - Component { - file: "private/qquickselectionrectangle_p.h" - name: "QQuickSelectionRectangle" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/SelectionRectangle 6.2", - "QtQuick.Templates/SelectionRectangle 6.3", - "QtQuick.Templates/SelectionRectangle 6.7" - ] - exportMetaObjectRevisions: [1538, 1539, 1543] - attachedType: "QQuickSelectionRectangleAttached" - Enum { - name: "SelectionMode" - values: ["Drag", "PressAndHold", "Auto"] - } - Property { - name: "selectionMode" - type: "SelectionMode" - read: "selectionMode" - write: "setSelectionMode" - notify: "selectionModeChanged" - index: 0 - isFinal: true - } - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTarget" - notify: "targetChanged" - index: 1 - isFinal: true - } - Property { - name: "topLeftHandle" - type: "QQmlComponent" - isPointer: true - read: "topLeftHandle" - write: "setTopLeftHandle" - notify: "topLeftHandleChanged" - index: 2 - isFinal: true - } - Property { - name: "bottomRightHandle" - type: "QQmlComponent" - isPointer: true - read: "bottomRightHandle" - write: "setBottomRightHandle" - notify: "bottomRightHandleChanged" - index: 3 - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "active" - notify: "activeChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "dragging" - type: "bool" - read: "dragging" - notify: "draggingChanged" - index: 5 - isReadonly: true - isFinal: true - } - Signal { name: "targetChanged" } - Signal { name: "activeChanged" } - Signal { name: "draggingChanged" } - Signal { name: "topLeftHandleChanged" } - Signal { name: "bottomRightHandleChanged" } - Signal { name: "selectionModeChanged" } - } - Component { - file: "private/qquickselectionrectangle_p.h" - name: "QQuickSelectionRectangleAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "control" - type: "QQuickSelectionRectangle" - isPointer: true - read: "control" - notify: "controlChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "dragging" - type: "bool" - read: "dragging" - notify: "draggingChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "controlChanged" } - Signal { name: "draggingChanged" } - } - Component { - file: "private/qquickslider_p.h" - name: "QQuickSlider" - accessSemantics: "reference" - prototype: "QQuickControl" - deferredNames: ["background", "handle"] - exports: [ - "QtQuick.Templates/Slider 2.0", - "QtQuick.Templates/Slider 2.1", - "QtQuick.Templates/Slider 2.2", - "QtQuick.Templates/Slider 2.3", - "QtQuick.Templates/Slider 2.4", - "QtQuick.Templates/Slider 2.5", - "QtQuick.Templates/Slider 2.7", - "QtQuick.Templates/Slider 2.11", - "QtQuick.Templates/Slider 6.0", - "QtQuick.Templates/Slider 6.3", - "QtQuick.Templates/Slider 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapAlways", "SnapOnRelease"] - } - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "double" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 2 - isFinal: true - } - Property { - name: "position" - type: "double" - read: "position" - notify: "positionChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "visualPosition" - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "stepSize" - type: "double" - read: "stepSize" - write: "setStepSize" - notify: "stepSizeChanged" - index: 5 - isFinal: true - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 6 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - write: "setPressed" - notify: "pressedChanged" - index: 7 - isFinal: true - } - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 8 - isFinal: true - } - Property { - name: "handle" - type: "QQuickItem" - isPointer: true - read: "handle" - write: "setHandle" - notify: "handleChanged" - index: 9 - isFinal: true - } - Property { - name: "live" - revision: 514 - type: "bool" - read: "live" - write: "setLive" - notify: "liveChanged" - index: 10 - isFinal: true - } - Property { - name: "horizontal" - revision: 515 - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - revision: 515 - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "touchDragThreshold" - revision: 517 - type: "double" - read: "touchDragThreshold" - write: "setTouchDragThreshold" - reset: "resetTouchDragThreshold" - notify: "touchDragThresholdChanged" - index: 13 - isFinal: true - } - Property { - name: "implicitHandleWidth" - revision: 517 - type: "double" - read: "implicitHandleWidth" - notify: "implicitHandleWidthChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "implicitHandleHeight" - revision: 517 - type: "double" - read: "implicitHandleHeight" - notify: "implicitHandleHeightChanged" - index: 15 - isReadonly: true - isFinal: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "valueChanged" } - Signal { name: "positionChanged" } - Signal { name: "visualPositionChanged" } - Signal { name: "stepSizeChanged" } - Signal { name: "snapModeChanged" } - Signal { name: "pressedChanged" } - Signal { name: "orientationChanged" } - Signal { name: "handleChanged" } - Signal { name: "moved"; revision: 514 } - Signal { name: "liveChanged"; revision: 514 } - Signal { name: "touchDragThresholdChanged"; revision: 517 } - Signal { name: "implicitHandleWidthChanged"; revision: 517 } - Signal { name: "implicitHandleHeightChanged"; revision: 517 } - Method { name: "increase" } - Method { name: "decrease" } - Method { - name: "valueAt" - revision: 513 - type: "double" - Parameter { name: "position"; type: "double" } - } - } - Component { - file: "private/qquickspinbox_p.h" - name: "QQuickSpinBox" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/SpinBox 2.0", - "QtQuick.Templates/SpinBox 2.1", - "QtQuick.Templates/SpinBox 2.2", - "QtQuick.Templates/SpinBox 2.3", - "QtQuick.Templates/SpinBox 2.4", - "QtQuick.Templates/SpinBox 2.5", - "QtQuick.Templates/SpinBox 2.7", - "QtQuick.Templates/SpinBox 2.11", - "QtQuick.Templates/SpinBox 6.0", - "QtQuick.Templates/SpinBox 6.3", - "QtQuick.Templates/SpinBox 6.6", - "QtQuick.Templates/SpinBox 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1542, - 1543 - ] - Property { - name: "from" - type: "int" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - isFinal: true - } - Property { - name: "to" - type: "int" - read: "to" - write: "setTo" - notify: "toChanged" - index: 1 - isFinal: true - } - Property { - name: "value" - type: "int" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 2 - isFinal: true - } - Property { - name: "stepSize" - type: "int" - read: "stepSize" - write: "setStepSize" - notify: "stepSizeChanged" - index: 3 - isFinal: true - } - Property { - name: "editable" - type: "bool" - read: "isEditable" - write: "setEditable" - notify: "editableChanged" - index: 4 - isFinal: true - } - Property { - name: "live" - revision: 1542 - type: "bool" - read: "isLive" - write: "setLive" - notify: "liveChanged" - index: 5 - isFinal: true - } - Property { - name: "validator" - type: "QValidator" - isPointer: true - read: "validator" - write: "setValidator" - notify: "validatorChanged" - index: 6 - isFinal: true - } - Property { - name: "textFromValue" - type: "QJSValue" - read: "textFromValue" - write: "setTextFromValue" - notify: "textFromValueChanged" - index: 7 - isFinal: true - } - Property { - name: "valueFromText" - type: "QJSValue" - read: "valueFromText" - write: "setValueFromText" - notify: "valueFromTextChanged" - index: 8 - isFinal: true - } - Property { - name: "up" - type: "QQuickIndicatorButton" - isPointer: true - read: "up" - index: 9 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "down" - type: "QQuickIndicatorButton" - isPointer: true - read: "down" - index: 10 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "inputMethodHints" - revision: 514 - type: "Qt::InputMethodHints" - read: "inputMethodHints" - write: "setInputMethodHints" - notify: "inputMethodHintsChanged" - index: 11 - isFinal: true - } - Property { - name: "inputMethodComposing" - revision: 514 - type: "bool" - read: "isInputMethodComposing" - notify: "inputMethodComposingChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "wrap" - revision: 515 - type: "bool" - read: "wrap" - write: "setWrap" - notify: "wrapChanged" - index: 13 - isFinal: true - } - Property { - name: "displayText" - revision: 516 - type: "QString" - read: "displayText" - notify: "displayTextChanged" - index: 14 - isReadonly: true - isFinal: true - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "valueChanged" } - Signal { name: "stepSizeChanged" } - Signal { name: "editableChanged" } - Signal { name: "liveChanged"; revision: 1542 } - Signal { name: "validatorChanged" } - Signal { name: "textFromValueChanged" } - Signal { name: "valueFromTextChanged" } - Signal { name: "valueModified"; revision: 514 } - Signal { name: "inputMethodHintsChanged"; revision: 514 } - Signal { name: "inputMethodComposingChanged"; revision: 514 } - Signal { name: "wrapChanged"; revision: 515 } - Signal { name: "displayTextChanged"; revision: 516 } - Method { name: "increase" } - Method { name: "decrease" } - } - Component { - file: "private/qquicksplitview_p.h" - name: "QQuickSplitHandleAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Templates/SplitHandle 2.13", - "QtQuick.Templates/SplitHandle 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [525, 1536] - attachedType: "QQuickSplitHandleAttached" - Property { - name: "hovered" - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "hoveredChanged" } - Signal { name: "pressedChanged" } - } - Component { - file: "private/qquicksplitview_p.h" - name: "QQuickSplitView" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - exports: [ - "QtQuick.Templates/SplitView 2.13", - "QtQuick.Templates/SplitView 6.0", - "QtQuick.Templates/SplitView 6.3", - "QtQuick.Templates/SplitView 6.7" - ] - exportMetaObjectRevisions: [525, 1536, 1539, 1543] - attachedType: "QQuickSplitViewAttached" - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 0 - isFinal: true - } - Property { - name: "resizing" - type: "bool" - read: "isResizing" - notify: "resizingChanged" - index: 1 - isReadonly: true - } - Property { - name: "handle" - type: "QQmlComponent" - isPointer: true - read: "handle" - write: "setHandle" - notify: "handleChanged" - index: 2 - isFinal: true - } - Signal { name: "orientationChanged" } - Signal { name: "resizingChanged" } - Signal { name: "handleChanged" } - Method { name: "saveState"; type: "QVariant" } - Method { - name: "restoreState" - type: "bool" - Parameter { name: "state"; type: "QVariant" } - } - } - Component { - file: "private/qquicksplitview_p.h" - name: "QQuickSplitViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "view" - type: "QQuickSplitView" - isPointer: true - read: "view" - notify: "viewChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "minimumWidth" - type: "double" - read: "minimumWidth" - write: "setMinimumWidth" - reset: "resetMinimumWidth" - notify: "minimumWidthChanged" - index: 1 - isFinal: true - } - Property { - name: "minimumHeight" - type: "double" - read: "minimumHeight" - write: "setMinimumHeight" - reset: "resetMinimumHeight" - notify: "minimumHeightChanged" - index: 2 - isFinal: true - } - Property { - name: "preferredWidth" - type: "double" - read: "preferredWidth" - write: "setPreferredWidth" - reset: "resetPreferredWidth" - notify: "preferredWidthChanged" - index: 3 - isFinal: true - } - Property { - name: "preferredHeight" - type: "double" - read: "preferredHeight" - write: "setPreferredHeight" - reset: "resetPreferredHeight" - notify: "preferredHeightChanged" - index: 4 - isFinal: true - } - Property { - name: "maximumWidth" - type: "double" - read: "maximumWidth" - write: "setMaximumWidth" - reset: "resetMaximumWidth" - notify: "maximumWidthChanged" - index: 5 - isFinal: true - } - Property { - name: "maximumHeight" - type: "double" - read: "maximumHeight" - write: "setMaximumHeight" - reset: "resetMaximumHeight" - notify: "maximumHeightChanged" - index: 6 - isFinal: true - } - Property { - name: "fillHeight" - type: "bool" - read: "fillHeight" - write: "setFillHeight" - notify: "fillHeightChanged" - index: 7 - isFinal: true - } - Property { - name: "fillWidth" - type: "bool" - read: "fillWidth" - write: "setFillWidth" - notify: "fillWidthChanged" - index: 8 - isFinal: true - } - Signal { name: "viewChanged" } - Signal { name: "minimumWidthChanged" } - Signal { name: "minimumHeightChanged" } - Signal { name: "preferredWidthChanged" } - Signal { name: "preferredHeightChanged" } - Signal { name: "maximumWidthChanged" } - Signal { name: "maximumHeightChanged" } - Signal { name: "fillWidthChanged" } - Signal { name: "fillHeightChanged" } - } - Component { - file: "private/qquickstackview_p.h" - name: "QQuickStackView" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/StackView 2.0", - "QtQuick.Templates/StackView 2.1", - "QtQuick.Templates/StackView 2.3", - "QtQuick.Templates/StackView 2.4", - "QtQuick.Templates/StackView 2.5", - "QtQuick.Templates/StackView 2.7", - "QtQuick.Templates/StackView 2.11", - "QtQuick.Templates/StackView 6.0", - "QtQuick.Templates/StackView 6.3", - "QtQuick.Templates/StackView 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickStackViewAttached" - Enum { - name: "Status" - values: ["Inactive", "Deactivating", "Activating", "Active"] - } - Enum { - name: "LoadBehavior" - values: ["DontLoad", "ForceLoad"] - } - Enum { - name: "Operation" - values: [ - "Transition", - "Immediate", - "PushTransition", - "ReplaceTransition", - "PopTransition" - ] - } - Property { - name: "busy" - type: "bool" - read: "isBusy" - notify: "busyChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "depth" - type: "int" - read: "depth" - notify: "depthChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "currentItem" - type: "QQuickItem" - isPointer: true - read: "currentItem" - notify: "currentItemChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "initialItem" - type: "QJSValue" - read: "initialItem" - write: "setInitialItem" - index: 3 - isFinal: true - } - Property { - name: "popEnter" - type: "QQuickTransition" - isPointer: true - read: "popEnter" - write: "setPopEnter" - notify: "popEnterChanged" - index: 4 - isFinal: true - } - Property { - name: "popExit" - type: "QQuickTransition" - isPointer: true - read: "popExit" - write: "setPopExit" - notify: "popExitChanged" - index: 5 - isFinal: true - } - Property { - name: "pushEnter" - type: "QQuickTransition" - isPointer: true - read: "pushEnter" - write: "setPushEnter" - notify: "pushEnterChanged" - index: 6 - isFinal: true - } - Property { - name: "pushExit" - type: "QQuickTransition" - isPointer: true - read: "pushExit" - write: "setPushExit" - notify: "pushExitChanged" - index: 7 - isFinal: true - } - Property { - name: "replaceEnter" - type: "QQuickTransition" - isPointer: true - read: "replaceEnter" - write: "setReplaceEnter" - notify: "replaceEnterChanged" - index: 8 - isFinal: true - } - Property { - name: "replaceExit" - type: "QQuickTransition" - isPointer: true - read: "replaceExit" - write: "setReplaceExit" - notify: "replaceExitChanged" - index: 9 - isFinal: true - } - Property { - name: "empty" - revision: 515 - type: "bool" - read: "isEmpty" - notify: "emptyChanged" - index: 10 - isReadonly: true - isFinal: true - } - Signal { name: "busyChanged" } - Signal { name: "depthChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "popEnterChanged" } - Signal { name: "popExitChanged" } - Signal { name: "pushEnterChanged" } - Signal { name: "pushExitChanged" } - Signal { name: "replaceEnterChanged" } - Signal { name: "replaceExitChanged" } - Signal { name: "emptyChanged"; revision: 515 } - Method { - name: "clear" - Parameter { name: "operation"; type: "Operation" } - } - Method { name: "clear"; isCloned: true } - Method { - name: "get" - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - Parameter { name: "behavior"; type: "QQuickStackView::LoadBehavior" } - } - Method { - name: "get" - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "QQuickItem" - isPointer: true - Parameter { name: "callback"; type: "QJSValue" } - Parameter { name: "behavior"; type: "QQuickStackView::LoadBehavior" } - } - Method { - name: "find" - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "callback"; type: "QJSValue" } - } - Method { name: "push"; isJavaScriptFunction: true } - Method { name: "pop"; isJavaScriptFunction: true } - Method { name: "replace"; isJavaScriptFunction: true } - Method { - name: "pushItems" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "args"; type: "QQuickStackViewArg"; isList: true } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "pushItems" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "args"; type: "QQuickStackViewArg"; isList: true } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "pushItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "popToItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "popToItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "popToIndex" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "popToIndex" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "index"; type: "int" } - } - Method { - name: "popCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "popCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "args"; type: "QQuickStackViewArg"; isList: true } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "args"; type: "QQuickStackViewArg"; isList: true } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "properties"; type: "QVariantMap" } - Parameter { name: "operation"; type: "Operation" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "properties"; type: "QVariantMap" } - } - Method { - name: "replaceCurrentItem" - revision: 1543 - type: "QQuickItem" - isPointer: true - isCloned: true - Parameter { name: "url"; type: "QUrl" } - } - } - Component { - file: "private/qquickstackview_p.h" - name: "QQuickStackViewArg" - accessSemantics: "value" - Method { - name: "QQuickStackViewArg" - isConstructor: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "QQuickStackViewArg" - isConstructor: true - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "QQuickStackViewArg" - isConstructor: true - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "QQuickStackViewArg" - isConstructor: true - Parameter { name: "properties"; type: "QVariantMap" } - } - } - Component { - file: "private/qquickstackview_p.h" - name: "QQuickStackViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "view" - type: "QQuickStackView" - isPointer: true - read: "view" - notify: "viewChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "status" - type: "QQuickStackView::Status" - read: "status" - notify: "statusChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - reset: "resetVisible" - notify: "visibleChanged" - index: 3 - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "viewChanged" } - Signal { name: "statusChanged" } - Signal { name: "activated" } - Signal { name: "activating" } - Signal { name: "deactivated" } - Signal { name: "deactivating" } - Signal { name: "removed" } - Signal { name: "visibleChanged" } - } - Component { - file: "private/qquickswipe_p.h" - name: "QQuickSwipe" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Property { - name: "complete" - type: "bool" - read: "isComplete" - notify: "completeChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "left" - type: "QQmlComponent" - isPointer: true - read: "left" - write: "setLeft" - notify: "leftChanged" - index: 2 - isFinal: true - } - Property { - name: "behind" - type: "QQmlComponent" - isPointer: true - read: "behind" - write: "setBehind" - notify: "behindChanged" - index: 3 - isFinal: true - } - Property { - name: "right" - type: "QQmlComponent" - isPointer: true - read: "right" - write: "setRight" - notify: "rightChanged" - index: 4 - isFinal: true - } - Property { - name: "leftItem" - type: "QQuickItem" - isPointer: true - read: "leftItem" - notify: "leftItemChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "behindItem" - type: "QQuickItem" - isPointer: true - read: "behindItem" - notify: "behindItemChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "rightItem" - type: "QQuickItem" - isPointer: true - read: "rightItem" - notify: "rightItemChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 8 - isFinal: true - } - Property { - name: "transition" - type: "QQuickTransition" - isPointer: true - read: "transition" - write: "setTransition" - notify: "transitionChanged" - index: 9 - isFinal: true - } - Signal { name: "positionChanged" } - Signal { name: "completeChanged" } - Signal { name: "leftChanged" } - Signal { name: "behindChanged" } - Signal { name: "rightChanged" } - Signal { name: "leftItemChanged" } - Signal { name: "behindItemChanged" } - Signal { name: "rightItemChanged" } - Signal { name: "completed" } - Signal { name: "opened" } - Signal { name: "closed" } - Signal { name: "enabledChanged" } - Signal { name: "transitionChanged" } - Method { name: "close"; revision: 513 } - Method { - name: "open" - revision: 514 - Parameter { name: "side"; type: "QQuickSwipeDelegate::Side" } - } - } - Component { - file: "private/qquickswipedelegate_p.h" - name: "QQuickSwipeDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Templates/SwipeDelegate 2.0", - "QtQuick.Templates/SwipeDelegate 2.1", - "QtQuick.Templates/SwipeDelegate 2.2", - "QtQuick.Templates/SwipeDelegate 2.3", - "QtQuick.Templates/SwipeDelegate 2.4", - "QtQuick.Templates/SwipeDelegate 2.5", - "QtQuick.Templates/SwipeDelegate 2.7", - "QtQuick.Templates/SwipeDelegate 2.11", - "QtQuick.Templates/SwipeDelegate 6.0", - "QtQuick.Templates/SwipeDelegate 6.3", - "QtQuick.Templates/SwipeDelegate 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickSwipeDelegateAttached" - Enum { - name: "Side" - values: ["Left", "Right"] - } - Property { - name: "swipe" - type: "QQuickSwipe" - isPointer: true - read: "swipe" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - } - Component { - file: "private/qquickswipedelegate_p.h" - name: "QQuickSwipeDelegateAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 0 - isReadonly: true - isFinal: true - } - Signal { name: "pressedChanged" } - Signal { name: "clicked" } - } - Component { - file: "private/qquickswipeview_p.h" - name: "QQuickSwipeView" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - exports: [ - "QtQuick.Templates/SwipeView 2.0", - "QtQuick.Templates/SwipeView 2.1", - "QtQuick.Templates/SwipeView 2.2", - "QtQuick.Templates/SwipeView 2.3", - "QtQuick.Templates/SwipeView 2.4", - "QtQuick.Templates/SwipeView 2.5", - "QtQuick.Templates/SwipeView 2.7", - "QtQuick.Templates/SwipeView 2.11", - "QtQuick.Templates/SwipeView 6.0", - "QtQuick.Templates/SwipeView 6.3", - "QtQuick.Templates/SwipeView 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickSwipeViewAttached" - Property { - name: "interactive" - revision: 513 - type: "bool" - read: "isInteractive" - write: "setInteractive" - notify: "interactiveChanged" - index: 0 - isFinal: true - } - Property { - name: "orientation" - revision: 514 - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 1 - isFinal: true - } - Property { - name: "horizontal" - revision: 515 - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - revision: 515 - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { name: "interactiveChanged"; revision: 513 } - Signal { name: "orientationChanged"; revision: 514 } - } - Component { - file: "private/qquickswipeview_p.h" - name: "QQuickSwipeViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "isCurrentItem" - type: "bool" - read: "isCurrentItem" - notify: "isCurrentItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "view" - type: "QQuickSwipeView" - isPointer: true - read: "view" - notify: "viewChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "isNextItem" - revision: 513 - type: "bool" - read: "isNextItem" - notify: "isNextItemChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "isPreviousItem" - revision: 513 - type: "bool" - read: "isPreviousItem" - notify: "isPreviousItemChanged" - index: 4 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "isCurrentItemChanged" } - Signal { name: "viewChanged" } - Signal { name: "isNextItemChanged" } - Signal { name: "isPreviousItemChanged" } - } - Component { - file: "private/qquickswitch_p.h" - name: "QQuickSwitch" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/Switch 2.0", - "QtQuick.Templates/Switch 2.1", - "QtQuick.Templates/Switch 2.2", - "QtQuick.Templates/Switch 2.3", - "QtQuick.Templates/Switch 2.4", - "QtQuick.Templates/Switch 2.5", - "QtQuick.Templates/Switch 2.7", - "QtQuick.Templates/Switch 2.11", - "QtQuick.Templates/Switch 6.0", - "QtQuick.Templates/Switch 6.3", - "QtQuick.Templates/Switch 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Property { - name: "visualPosition" - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "positionChanged" } - Signal { name: "visualPositionChanged" } - } - Component { - file: "private/qquickswitchdelegate_p.h" - name: "QQuickSwitchDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Templates/SwitchDelegate 2.0", - "QtQuick.Templates/SwitchDelegate 2.1", - "QtQuick.Templates/SwitchDelegate 2.2", - "QtQuick.Templates/SwitchDelegate 2.3", - "QtQuick.Templates/SwitchDelegate 2.4", - "QtQuick.Templates/SwitchDelegate 2.5", - "QtQuick.Templates/SwitchDelegate 2.7", - "QtQuick.Templates/SwitchDelegate 2.11", - "QtQuick.Templates/SwitchDelegate 6.0", - "QtQuick.Templates/SwitchDelegate 6.3", - "QtQuick.Templates/SwitchDelegate 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "position" - type: "double" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Property { - name: "visualPosition" - type: "double" - read: "visualPosition" - notify: "visualPositionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "positionChanged" } - Signal { name: "visualPositionChanged" } - } - Component { - file: "private/qquicktabbar_p.h" - name: "QQuickTabBar" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickContainer" - exports: [ - "QtQuick.Templates/TabBar 2.0", - "QtQuick.Templates/TabBar 2.1", - "QtQuick.Templates/TabBar 2.3", - "QtQuick.Templates/TabBar 2.4", - "QtQuick.Templates/TabBar 2.5", - "QtQuick.Templates/TabBar 2.7", - "QtQuick.Templates/TabBar 2.11", - "QtQuick.Templates/TabBar 6.0", - "QtQuick.Templates/TabBar 6.3", - "QtQuick.Templates/TabBar 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickTabBarAttached" - Enum { - name: "Position" - values: ["Header", "Footer"] - } - Property { - name: "position" - type: "Position" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Signal { name: "positionChanged" } - } - Component { - file: "private/qquicktabbar_p.h" - name: "QQuickTabBarAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "tabBar" - type: "QQuickTabBar" - isPointer: true - read: "tabBar" - notify: "tabBarChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "position" - type: "QQuickTabBar::Position" - read: "position" - notify: "positionChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "tabBarChanged" } - Signal { name: "positionChanged" } - } - Component { - file: "private/qquicktabbutton_p.h" - name: "QQuickTabButton" - accessSemantics: "reference" - prototype: "QQuickAbstractButton" - exports: [ - "QtQuick.Templates/TabButton 2.0", - "QtQuick.Templates/TabButton 2.1", - "QtQuick.Templates/TabButton 2.2", - "QtQuick.Templates/TabButton 2.3", - "QtQuick.Templates/TabButton 2.4", - "QtQuick.Templates/TabButton 2.5", - "QtQuick.Templates/TabButton 2.7", - "QtQuick.Templates/TabButton 2.11", - "QtQuick.Templates/TabButton 6.0", - "QtQuick.Templates/TabButton 6.3", - "QtQuick.Templates/TabButton 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - } - Component { - file: "private/qquicktextarea_p.h" - name: "QQuickTextArea" - accessSemantics: "reference" - prototype: "QQuickTextEdit" - deferredNames: ["background"] - exports: [ - "QtQuick.Templates/TextArea 2.0", - "QtQuick.Templates/TextArea 2.1", - "QtQuick.Templates/TextArea 2.2", - "QtQuick.Templates/TextArea 2.3", - "QtQuick.Templates/TextArea 2.4", - "QtQuick.Templates/TextArea 2.5", - "QtQuick.Templates/TextArea 2.6", - "QtQuick.Templates/TextArea 2.7", - "QtQuick.Templates/TextArea 2.10", - "QtQuick.Templates/TextArea 2.11", - "QtQuick.Templates/TextArea 6.0", - "QtQuick.Templates/TextArea 6.2", - "QtQuick.Templates/TextArea 6.3", - "QtQuick.Templates/TextArea 6.4", - "QtQuick.Templates/TextArea 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 522, - 523, - 1536, - 1538, - 1539, - 1540, - 1543 - ] - attachedType: "QQuickTextAreaAttached" - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 0 - } - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - write: "setImplicitWidth" - notify: "implicitWidthChanged3" - index: 1 - isFinal: true - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - write: "setImplicitHeight" - notify: "implicitHeightChanged3" - index: 2 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 3 - isFinal: true - } - Property { - name: "placeholderText" - type: "QString" - read: "placeholderText" - write: "setPlaceholderText" - notify: "placeholderTextChanged" - index: 4 - isFinal: true - } - Property { - name: "focusReason" - type: "Qt::FocusReason" - read: "focusReason" - write: "setFocusReason" - notify: "focusReasonChanged" - index: 5 - isFinal: true - } - Property { - name: "hovered" - revision: 513 - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "hoverEnabled" - revision: 513 - type: "bool" - read: "isHoverEnabled" - write: "setHoverEnabled" - reset: "resetHoverEnabled" - notify: "hoverEnabledChanged" - index: 7 - isFinal: true - } - Property { - name: "placeholderTextColor" - revision: 517 - type: "QColor" - read: "placeholderTextColor" - write: "setPlaceholderTextColor" - notify: "placeholderTextColorChanged" - index: 8 - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 11 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 12 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 13 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 14 - isFinal: true - } - Signal { name: "fontChanged" } - Signal { name: "implicitWidthChanged3" } - Signal { name: "implicitHeightChanged3" } - Signal { name: "backgroundChanged" } - Signal { name: "placeholderTextChanged" } - Signal { name: "focusReasonChanged" } - Signal { - name: "pressAndHold" - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "pressed" - revision: 513 - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "released" - revision: 513 - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { name: "hoveredChanged"; revision: 513 } - Signal { name: "hoverEnabledChanged"; revision: 513 } - Signal { name: "placeholderTextColorChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - } - Component { - file: "private/qquicktextarea_p.h" - name: "QQuickTextAreaAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "flickable" - type: "QQuickTextArea" - isPointer: true - read: "flickable" - write: "setFlickable" - notify: "flickableChanged" - index: 0 - isFinal: true - } - Signal { name: "flickableChanged" } - } - Component { - file: "private/qquicktextfield_p.h" - name: "QQuickTextField" - accessSemantics: "reference" - prototype: "QQuickTextInput" - deferredNames: ["background"] - exports: [ - "QtQuick.Templates/TextField 2.0", - "QtQuick.Templates/TextField 2.1", - "QtQuick.Templates/TextField 2.2", - "QtQuick.Templates/TextField 2.4", - "QtQuick.Templates/TextField 2.5", - "QtQuick.Templates/TextField 2.6", - "QtQuick.Templates/TextField 2.7", - "QtQuick.Templates/TextField 2.9", - "QtQuick.Templates/TextField 2.11", - "QtQuick.Templates/TextField 6.0", - "QtQuick.Templates/TextField 6.2", - "QtQuick.Templates/TextField 6.3", - "QtQuick.Templates/TextField 6.4", - "QtQuick.Templates/TextField 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 516, - 517, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1540, - 1543 - ] - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 0 - } - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - write: "setImplicitWidth" - notify: "implicitWidthChanged3" - index: 1 - isFinal: true - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - write: "setImplicitHeight" - notify: "implicitHeightChanged3" - index: 2 - isFinal: true - } - Property { - name: "background" - type: "QQuickItem" - isPointer: true - read: "background" - write: "setBackground" - notify: "backgroundChanged" - index: 3 - isFinal: true - } - Property { - name: "placeholderText" - type: "QString" - read: "placeholderText" - write: "setPlaceholderText" - notify: "placeholderTextChanged" - index: 4 - isFinal: true - } - Property { - name: "focusReason" - type: "Qt::FocusReason" - read: "focusReason" - write: "setFocusReason" - notify: "focusReasonChanged" - index: 5 - isFinal: true - } - Property { - name: "hovered" - revision: 513 - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "hoverEnabled" - revision: 513 - type: "bool" - read: "isHoverEnabled" - write: "setHoverEnabled" - reset: "resetHoverEnabled" - notify: "hoverEnabledChanged" - index: 7 - isFinal: true - } - Property { - name: "placeholderTextColor" - revision: 517 - type: "QColor" - read: "placeholderTextColor" - write: "setPlaceholderTextColor" - notify: "placeholderTextColorChanged" - index: 8 - isFinal: true - } - Property { - name: "implicitBackgroundWidth" - revision: 517 - type: "double" - read: "implicitBackgroundWidth" - notify: "implicitBackgroundWidthChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "implicitBackgroundHeight" - revision: 517 - type: "double" - read: "implicitBackgroundHeight" - notify: "implicitBackgroundHeightChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "topInset" - revision: 517 - type: "double" - read: "topInset" - write: "setTopInset" - reset: "resetTopInset" - notify: "topInsetChanged" - index: 11 - isFinal: true - } - Property { - name: "leftInset" - revision: 517 - type: "double" - read: "leftInset" - write: "setLeftInset" - reset: "resetLeftInset" - notify: "leftInsetChanged" - index: 12 - isFinal: true - } - Property { - name: "rightInset" - revision: 517 - type: "double" - read: "rightInset" - write: "setRightInset" - reset: "resetRightInset" - notify: "rightInsetChanged" - index: 13 - isFinal: true - } - Property { - name: "bottomInset" - revision: 517 - type: "double" - read: "bottomInset" - write: "setBottomInset" - reset: "resetBottomInset" - notify: "bottomInsetChanged" - index: 14 - isFinal: true - } - Signal { name: "fontChanged" } - Signal { name: "implicitWidthChanged3" } - Signal { name: "implicitHeightChanged3" } - Signal { name: "backgroundChanged" } - Signal { name: "placeholderTextChanged" } - Signal { name: "focusReasonChanged" } - Signal { - name: "pressAndHold" - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "pressed" - revision: 513 - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "released" - revision: 513 - Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { name: "hoveredChanged"; revision: 513 } - Signal { name: "hoverEnabledChanged"; revision: 513 } - Signal { name: "placeholderTextColorChanged"; revision: 517 } - Signal { name: "implicitBackgroundWidthChanged"; revision: 517 } - Signal { name: "implicitBackgroundHeightChanged"; revision: 517 } - Signal { name: "topInsetChanged"; revision: 517 } - Signal { name: "leftInsetChanged"; revision: 517 } - Signal { name: "rightInsetChanged"; revision: 517 } - Signal { name: "bottomInsetChanged"; revision: 517 } - } - Component { - file: "private/qquicktoolbar_p.h" - name: "QQuickToolBar" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPane" - exports: [ - "QtQuick.Templates/ToolBar 2.0", - "QtQuick.Templates/ToolBar 2.1", - "QtQuick.Templates/ToolBar 2.4", - "QtQuick.Templates/ToolBar 2.5", - "QtQuick.Templates/ToolBar 2.7", - "QtQuick.Templates/ToolBar 2.11", - "QtQuick.Templates/ToolBar 6.0", - "QtQuick.Templates/ToolBar 6.3", - "QtQuick.Templates/ToolBar 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Enum { - name: "Position" - values: ["Header", "Footer"] - } - Property { - name: "position" - type: "Position" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - isFinal: true - } - Signal { name: "positionChanged" } - } - Component { - file: "private/qquicktoolbutton_p.h" - name: "QQuickToolButton" - accessSemantics: "reference" - prototype: "QQuickButton" - exports: [ - "QtQuick.Templates/ToolButton 2.0", - "QtQuick.Templates/ToolButton 2.1", - "QtQuick.Templates/ToolButton 2.2", - "QtQuick.Templates/ToolButton 2.3", - "QtQuick.Templates/ToolButton 2.4", - "QtQuick.Templates/ToolButton 2.5", - "QtQuick.Templates/ToolButton 2.7", - "QtQuick.Templates/ToolButton 2.11", - "QtQuick.Templates/ToolButton 6.0", - "QtQuick.Templates/ToolButton 6.3", - "QtQuick.Templates/ToolButton 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - } - Component { - file: "private/qquicktoolseparator_p.h" - name: "QQuickToolSeparator" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/ToolSeparator 2.1", - "QtQuick.Templates/ToolSeparator 2.4", - "QtQuick.Templates/ToolSeparator 2.5", - "QtQuick.Templates/ToolSeparator 2.7", - "QtQuick.Templates/ToolSeparator 2.11", - "QtQuick.Templates/ToolSeparator 6.0", - "QtQuick.Templates/ToolSeparator 6.3", - "QtQuick.Templates/ToolSeparator 6.7" - ] - exportMetaObjectRevisions: [513, 516, 517, 519, 523, 1536, 1539, 1543] - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 0 - isFinal: true - } - Property { - name: "horizontal" - type: "bool" - read: "isHorizontal" - notify: "orientationChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "vertical" - type: "bool" - read: "isVertical" - notify: "orientationChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "orientationChanged" } - } - Component { - file: "private/qquicktooltip_p.h" - name: "QQuickToolTip" - accessSemantics: "reference" - defaultProperty: "contentData" - prototype: "QQuickPopup" - exports: [ - "QtQuick.Templates/ToolTip 2.0", - "QtQuick.Templates/ToolTip 2.1", - "QtQuick.Templates/ToolTip 2.3", - "QtQuick.Templates/ToolTip 2.5", - "QtQuick.Templates/ToolTip 6.0" - ] - exportMetaObjectRevisions: [512, 513, 515, 517, 1536] - attachedType: "QQuickToolTipAttached" - Property { - name: "delay" - type: "int" - read: "delay" - write: "setDelay" - notify: "delayChanged" - index: 0 - isFinal: true - } - Property { - name: "timeout" - type: "int" - read: "timeout" - write: "setTimeout" - notify: "timeoutChanged" - index: 1 - isFinal: true - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 2 - isFinal: true - } - Signal { name: "textChanged" } - Signal { name: "delayChanged" } - Signal { name: "timeoutChanged" } - Method { - name: "show" - revision: 517 - Parameter { name: "text"; type: "QString" } - Parameter { name: "ms"; type: "int" } - } - Method { - name: "show" - revision: 517 - isCloned: true - Parameter { name: "text"; type: "QString" } - } - Method { name: "hide"; revision: 517 } - } - Component { - file: "private/qquicktooltip_p.h" - name: "QQuickToolTipAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "delay" - type: "int" - read: "delay" - write: "setDelay" - notify: "delayChanged" - index: 1 - isFinal: true - } - Property { - name: "timeout" - type: "int" - read: "timeout" - write: "setTimeout" - notify: "timeoutChanged" - index: 2 - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 3 - isFinal: true - } - Property { - name: "toolTip" - type: "QQuickToolTip" - isPointer: true - read: "toolTip" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "textChanged" } - Signal { name: "delayChanged" } - Signal { name: "timeoutChanged" } - Signal { name: "visibleChanged" } - Method { - name: "show" - Parameter { name: "text"; type: "QString" } - Parameter { name: "ms"; type: "int" } - } - Method { - name: "show" - isCloned: true - Parameter { name: "text"; type: "QString" } - } - Method { name: "hide" } - } - Component { - file: "private/qquicktreeviewdelegate_p.h" - name: "QQuickTreeViewDelegate" - accessSemantics: "reference" - prototype: "QQuickItemDelegate" - exports: [ - "QtQuick.Templates/TreeViewDelegate 6.3", - "QtQuick.Templates/TreeViewDelegate 6.4", - "QtQuick.Templates/TreeViewDelegate 6.5", - "QtQuick.Templates/TreeViewDelegate 6.7" - ] - exportMetaObjectRevisions: [1539, 1540, 1541, 1543] - Property { - name: "indentation" - type: "double" - read: "indentation" - write: "setIndentation" - notify: "indentationChanged" - index: 0 - isFinal: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - notify: "leftMarginChanged" - index: 1 - isFinal: true - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - notify: "rightMarginChanged" - index: 2 - isFinal: true - } - Property { - name: "treeView" - type: "QQuickTreeView" - isPointer: true - read: "treeView" - write: "setTreeView" - notify: "treeviewChanged" - index: 3 - isFinal: true - isRequired: true - } - Property { - name: "isTreeNode" - type: "bool" - read: "isTreeNode" - write: "setIsTreeNode" - notify: "isTreeNodeChanged" - index: 4 - isFinal: true - isRequired: true - } - Property { - name: "hasChildren" - type: "bool" - read: "hasChildren" - write: "setHasChildren" - notify: "hasChildrenChanged" - index: 5 - isFinal: true - isRequired: true - } - Property { - name: "expanded" - type: "bool" - read: "expanded" - write: "setExpanded" - notify: "expandedChanged" - index: 6 - isFinal: true - isRequired: true - } - Property { - name: "depth" - type: "int" - read: "depth" - write: "setDepth" - notify: "depthChanged" - index: 7 - isFinal: true - isRequired: true - } - Property { - name: "current" - revision: 1540 - type: "bool" - read: "current" - write: "setCurrent" - notify: "currentChanged" - index: 8 - isFinal: true - isRequired: true - } - Property { - name: "selected" - revision: 1540 - type: "bool" - read: "selected" - write: "setSelected" - notify: "selectedChanged" - index: 9 - isFinal: true - isRequired: true - } - Property { - name: "editing" - revision: 1541 - type: "bool" - read: "editing" - write: "setEditing" - notify: "editingChanged" - index: 10 - isFinal: true - isRequired: true - } - Signal { name: "indicatorChanged" } - Signal { name: "indentationChanged" } - Signal { name: "isTreeNodeChanged" } - Signal { name: "hasChildrenChanged" } - Signal { name: "expandedChanged" } - Signal { name: "depthChanged" } - Signal { name: "treeviewChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "currentChanged"; revision: 1540 } - Signal { name: "selectedChanged"; revision: 1540 } - Signal { name: "editingChanged"; revision: 1541 } - } - Component { - file: "private/qquicktumbler_p.h" - name: "QQuickTumbler" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/Tumbler 2.0", - "QtQuick.Templates/Tumbler 2.1", - "QtQuick.Templates/Tumbler 2.2", - "QtQuick.Templates/Tumbler 2.4", - "QtQuick.Templates/Tumbler 2.5", - "QtQuick.Templates/Tumbler 2.7", - "QtQuick.Templates/Tumbler 2.11", - "QtQuick.Templates/Tumbler 6.0", - "QtQuick.Templates/Tumbler 6.3", - "QtQuick.Templates/Tumbler 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickTumblerAttached" - Enum { - name: "PositionMode" - values: [ - "Beginning", - "Center", - "End", - "Visible", - "Contain", - "SnapPosition" - ] - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - isFinal: true - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 2 - isFinal: true - } - Property { - name: "currentItem" - type: "QQuickItem" - isPointer: true - read: "currentItem" - notify: "currentItemChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 4 - isFinal: true - } - Property { - name: "visibleItemCount" - type: "int" - read: "visibleItemCount" - write: "setVisibleItemCount" - notify: "visibleItemCountChanged" - index: 5 - isFinal: true - } - Property { - name: "wrap" - revision: 513 - type: "bool" - read: "wrap" - write: "setWrap" - reset: "resetWrap" - notify: "wrapChanged" - index: 6 - isFinal: true - } - Property { - name: "moving" - revision: 514 - type: "bool" - read: "isMoving" - notify: "movingChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { name: "modelChanged" } - Signal { name: "countChanged" } - Signal { name: "currentIndexChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "delegateChanged" } - Signal { name: "visibleItemCountChanged" } - Signal { name: "wrapChanged"; revision: 513 } - Signal { name: "movingChanged"; revision: 514 } - Method { name: "_q_updateItemWidths" } - Method { name: "_q_updateItemHeights" } - Method { name: "_q_onViewCurrentIndexChanged" } - Method { name: "_q_onViewCountChanged" } - Method { name: "_q_onViewOffsetChanged" } - Method { name: "_q_onViewContentYChanged" } - Method { - name: "positionViewAtIndex" - revision: 517 - Parameter { name: "index"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - } - } - Component { - file: "private/qquicktumbler_p.h" - name: "QQuickTumblerAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "tumbler" - type: "QQuickTumbler" - isPointer: true - read: "tumbler" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "displacement" - type: "double" - read: "displacement" - notify: "displacementChanged" - index: 1 - isReadonly: true - isFinal: true - } - Signal { name: "displacementChanged" } - } - Component { - file: "private/qquickheaderview_p.h" - name: "QQuickVerticalHeaderView" - accessSemantics: "reference" - prototype: "QQuickHeaderViewBase" - exports: [ - "QtQuick.Templates/VerticalHeaderView 2.15", - "QtQuick.Templates/VerticalHeaderView 6.0", - "QtQuick.Templates/VerticalHeaderView 6.2", - "QtQuick.Templates/VerticalHeaderView 6.3", - "QtQuick.Templates/VerticalHeaderView 6.4", - "QtQuick.Templates/VerticalHeaderView 6.5", - "QtQuick.Templates/VerticalHeaderView 6.6", - "QtQuick.Templates/VerticalHeaderView 6.7" - ] - exportMetaObjectRevisions: [ - 527, - 1536, - 1538, - 1539, - 1540, - 1541, - 1542, - 1543 - ] - } - Component { - file: "private/qquickweeknumbercolumn_p.h" - name: "QQuickWeekNumberColumn" - accessSemantics: "reference" - prototype: "QQuickControl" - exports: [ - "QtQuick.Templates/AbstractWeekNumberColumn 6.3", - "QtQuick.Templates/AbstractWeekNumberColumn 6.7" - ] - exportMetaObjectRevisions: [1539, 1543] - Property { - name: "month" - type: "int" - read: "month" - write: "setMonth" - notify: "monthChanged" - index: 0 - isFinal: true - } - Property { - name: "year" - type: "int" - read: "year" - write: "setYear" - notify: "yearChanged" - index: 1 - isFinal: true - } - Property { - name: "source" - type: "QVariant" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 2 - isFinal: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 3 - isFinal: true - } - Signal { name: "monthChanged" } - Signal { name: "yearChanged" } - Signal { name: "sourceChanged" } - Signal { name: "delegateChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/qmldir deleted file mode 100644 index bd76866..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Templates/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Templates -linktarget Qt6::qtquicktemplates2plugin -plugin qtquicktemplates2plugin -classname QtQuickTemplates2Plugin -typeinfo plugins.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Templates/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/libqtquicktimelineblendtreesplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/libqtquicktimelineblendtreesplugin.so deleted file mode 100755 index 152f9a1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/libqtquicktimelineblendtreesplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/plugins.qmltypes deleted file mode 100644 index 42e60c6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/plugins.qmltypes +++ /dev/null @@ -1,111 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qblendanimationnode_p.h" - name: "QBlendAnimationNode" - accessSemantics: "reference" - prototype: "QBlendTreeNode" - exports: ["QtQuick.Timeline.BlendTrees/BlendAnimationNode 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "source1" - type: "QBlendTreeNode" - isPointer: true - read: "source1" - write: "setSource1" - notify: "source1Changed" - index: 0 - isFinal: true - } - Property { - name: "source2" - type: "QBlendTreeNode" - isPointer: true - read: "source2" - write: "setSource2" - notify: "source2Changed" - index: 1 - isFinal: true - } - Property { - name: "weight" - type: "double" - read: "weight" - write: "setWeight" - notify: "weightChanged" - index: 2 - isFinal: true - } - Signal { name: "source1Changed" } - Signal { name: "source2Changed" } - Signal { name: "weightChanged" } - Method { name: "handleInputFrameDataChanged" } - } - Component { - file: "private/qblendtreenode_p.h" - name: "QBlendTreeNode" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick.Timeline.BlendTrees/BlendTreeNode 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "outputEnabled" - type: "bool" - read: "outputEnabled" - write: "setOutputEnabled" - notify: "outputEnabledChanged" - index: 0 - isFinal: true - } - Signal { name: "frameDataChanged" } - Signal { name: "outputEnabledChanged" } - Method { name: "handleFrameDataChanged" } - } - Component { - file: "private/qtimelineanimationnode_p.h" - name: "QTimelineAnimationNode" - accessSemantics: "reference" - prototype: "QBlendTreeNode" - exports: ["QtQuick.Timeline.BlendTrees/TimelineAnimationNode 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "animation" - type: "QQuickTimelineAnimation" - isPointer: true - read: "animation" - write: "setAnimation" - notify: "animationChanged" - index: 0 - isFinal: true - } - Property { - name: "timeline" - type: "QQuickTimeline" - isPointer: true - read: "timeline" - write: "setTimeline" - notify: "timelineChanged" - index: 1 - isFinal: true - } - Property { - name: "currentFrame" - type: "double" - read: "currentFrame" - write: "setCurrentFrame" - notify: "currentFrameChanged" - index: 2 - isFinal: true - } - Signal { name: "animationChanged" } - Signal { name: "timelineChanged" } - Signal { name: "currentFrameChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/qmldir deleted file mode 100644 index ab33b54..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Timeline.BlendTrees -linktarget Qt6::qtquicktimelineblendtreesplugin -optional plugin qtquicktimelineblendtreesplugin -classname QtQuickTimelineBlendTreesPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuickTimeline -prefer :/qt-project.org/imports/QtQuick/Timeline/BlendTrees/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/libqtquicktimelineplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/libqtquicktimelineplugin.so deleted file mode 100755 index b85880e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/libqtquicktimelineplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/plugins.qmltypes deleted file mode 100644 index 5cac57a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/plugins.qmltypes +++ /dev/null @@ -1,186 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquickkeyframe_p.h" - name: "QQuickKeyframe" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick.Timeline/Keyframe 1.0", - "QtQuick.Timeline/Keyframe 6.0" - ] - exportMetaObjectRevisions: [256, 1536] - Property { - name: "frame" - type: "double" - read: "frame" - write: "setFrame" - notify: "frameChanged" - index: 0 - } - Property { - name: "easing" - type: "QEasingCurve" - read: "easing" - write: "setEasing" - notify: "easingCurveChanged" - index: 1 - } - Property { - name: "value" - type: "QVariant" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 2 - } - Signal { name: "frameChanged" } - Signal { name: "easingCurveChanged" } - Signal { name: "valueChanged" } - } - Component { - file: "private/qquickkeyframe_p.h" - name: "QQuickKeyframeGroup" - accessSemantics: "reference" - defaultProperty: "keyframes" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Timeline/KeyframeGroup 1.0", - "QtQuick.Timeline/KeyframeGroup 1.1", - "QtQuick.Timeline/KeyframeGroup 6.0" - ] - exportMetaObjectRevisions: [256, 257, 1536] - Property { - name: "target" - type: "QObject" - isPointer: true - read: "target" - write: "setTargetObject" - notify: "targetChanged" - index: 0 - } - Property { - name: "property" - type: "QString" - read: "property" - write: "setProperty" - notify: "propertyChanged" - index: 1 - } - Property { - name: "keyframes" - type: "QQuickKeyframe" - isList: true - read: "keyframes" - index: 2 - isReadonly: true - } - Property { - name: "keyframeSource" - revision: 257 - type: "QUrl" - read: "keyframeSource" - write: "setKeyframeSource" - notify: "keyframeSourceChanged" - index: 3 - } - Signal { name: "targetChanged" } - Signal { name: "propertyChanged" } - Signal { name: "keyframeSourceChanged"; revision: 257 } - } - Component { - file: "private/qquicktimeline_p.h" - name: "QQuickTimeline" - accessSemantics: "reference" - defaultProperty: "keyframeGroups" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick.Timeline/Timeline 1.0", - "QtQuick.Timeline/Timeline 6.0" - ] - exportMetaObjectRevisions: [256, 1536] - Property { - name: "startFrame" - type: "double" - read: "startFrame" - write: "setStartFrame" - notify: "startFrameChanged" - index: 0 - } - Property { - name: "endFrame" - type: "double" - read: "endFrame" - write: "setEndFrame" - notify: "endFrameChanged" - index: 1 - } - Property { - name: "currentFrame" - type: "double" - read: "currentFrame" - write: "setCurrentFrame" - notify: "currentFrameChanged" - index: 2 - } - Property { - name: "keyframeGroups" - type: "QQuickKeyframeGroup" - isList: true - read: "keyframeGroups" - index: 3 - isReadonly: true - } - Property { - name: "animations" - type: "QQuickTimelineAnimation" - isList: true - read: "animations" - index: 4 - isReadonly: true - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 5 - } - Signal { name: "enabledChanged" } - Signal { name: "startFrameChanged" } - Signal { name: "endFrameChanged" } - Signal { name: "currentFrameChanged" } - } - Component { - file: "private/qquicktimelineanimation_p.h" - name: "QQuickTimelineAnimation" - accessSemantics: "reference" - prototype: "QQuickNumberAnimation" - exports: [ - "QtQuick.Timeline/TimelineAnimation 1.0", - "QtQuick.Timeline/TimelineAnimation 2.0", - "QtQuick.Timeline/TimelineAnimation 2.12", - "QtQuick.Timeline/TimelineAnimation 6.0" - ] - exportMetaObjectRevisions: [256, 512, 524, 1536] - Property { - name: "pingPong" - type: "bool" - read: "pingPong" - write: "setPingPong" - notify: "pingPongChanged" - index: 0 - } - Signal { name: "pingPongChanged" } - Signal { name: "finished" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/qmldir deleted file mode 100644 index f4e953c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Timeline/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick.Timeline -linktarget Qt6::qtquicktimelineplugin -optional plugin qtquicktimelineplugin -classname QtQuickTimelinePlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick -prefer :/qt-project.org/imports/QtQuick/Timeline/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/libquickwindowplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/libquickwindowplugin.so deleted file mode 100755 index 1861656..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/libquickwindowplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/qmldir deleted file mode 100644 index 5ff5ce8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtQuick.Window -linktarget Qt6::quickwindow -plugin quickwindowplugin -classname QtQuick_WindowPlugin -typeinfo quickwindow.qmltypes -import QtQuick auto -prefer :/qt-project.org/imports/QtQuick/Window/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/quickwindow.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/quickwindow.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/Window/quickwindow.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/libqtquick2plugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/libqtquick2plugin.so deleted file mode 100755 index 709a9ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/libqtquick2plugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/plugins.qmltypes deleted file mode 100644 index 53c6541..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/plugins.qmltypes +++ /dev/null @@ -1,17806 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qaccessible_base.h" - name: "QAccessible" - accessSemantics: "value" - Enum { - name: "Event" - values: [ - "SoundPlayed", - "Alert", - "ForegroundChanged", - "MenuStart", - "MenuEnd", - "PopupMenuStart", - "PopupMenuEnd", - "ContextHelpStart", - "ContextHelpEnd", - "DragDropStart", - "DragDropEnd", - "DialogStart", - "DialogEnd", - "ScrollingStart", - "ScrollingEnd", - "MenuCommand", - "ActionChanged", - "ActiveDescendantChanged", - "AttributeChanged", - "DocumentContentChanged", - "DocumentLoadComplete", - "DocumentLoadStopped", - "DocumentReload", - "HyperlinkEndIndexChanged", - "HyperlinkNumberOfAnchorsChanged", - "HyperlinkSelectedLinkChanged", - "HypertextLinkActivated", - "HypertextLinkSelected", - "HyperlinkStartIndexChanged", - "HypertextChanged", - "HypertextNLinksChanged", - "ObjectAttributeChanged", - "PageChanged", - "SectionChanged", - "TableCaptionChanged", - "TableColumnDescriptionChanged", - "TableColumnHeaderChanged", - "TableModelChanged", - "TableRowDescriptionChanged", - "TableRowHeaderChanged", - "TableSummaryChanged", - "TextAttributeChanged", - "TextCaretMoved", - "TextColumnChanged", - "TextInserted", - "TextRemoved", - "TextUpdated", - "TextSelectionChanged", - "VisibleDataChanged", - "ObjectCreated", - "ObjectDestroyed", - "ObjectShow", - "ObjectHide", - "ObjectReorder", - "Focus", - "Selection", - "SelectionAdd", - "SelectionRemove", - "SelectionWithin", - "StateChanged", - "LocationChanged", - "NameChanged", - "DescriptionChanged", - "ValueChanged", - "ParentChanged", - "HelpChanged", - "DefaultActionChanged", - "AcceleratorChanged", - "InvalidEvent" - ] - } - Enum { - name: "Role" - values: [ - "NoRole", - "TitleBar", - "MenuBar", - "ScrollBar", - "Grip", - "Sound", - "Cursor", - "Caret", - "AlertMessage", - "Window", - "Client", - "PopupMenu", - "MenuItem", - "ToolTip", - "Application", - "Document", - "Pane", - "Chart", - "Dialog", - "Border", - "Grouping", - "Separator", - "ToolBar", - "StatusBar", - "Table", - "ColumnHeader", - "RowHeader", - "Column", - "Row", - "Cell", - "Link", - "HelpBalloon", - "Assistant", - "List", - "ListItem", - "Tree", - "TreeItem", - "PageTab", - "PropertyPage", - "Indicator", - "Graphic", - "StaticText", - "EditableText", - "Button", - "PushButton", - "CheckBox", - "RadioButton", - "ComboBox", - "ProgressBar", - "Dial", - "HotkeyField", - "Slider", - "SpinBox", - "Canvas", - "Animation", - "Equation", - "ButtonDropDown", - "ButtonMenu", - "ButtonDropGrid", - "Whitespace", - "PageTabList", - "Clock", - "Splitter", - "LayeredPane", - "Terminal", - "Desktop", - "Paragraph", - "WebDocument", - "Section", - "Notification", - "ColorChooser", - "Footer", - "Form", - "Heading", - "Note", - "ComplementaryContent", - "UserRole" - ] - } - } - Component { - file: "qvalidator.h" - name: "QDoubleValidator" - accessSemantics: "reference" - prototype: "QValidator" - Enum { - name: "Notation" - values: ["StandardNotation", "ScientificNotation"] - } - Property { - name: "bottom" - type: "double" - read: "bottom" - write: "setBottom" - notify: "bottomChanged" - index: 0 - } - Property { name: "top"; type: "double"; read: "top"; write: "setTop"; notify: "topChanged"; index: 1 } - Property { - name: "decimals" - type: "int" - read: "decimals" - write: "setDecimals" - notify: "decimalsChanged" - index: 2 - } - Property { - name: "notation" - type: "Notation" - read: "notation" - write: "setNotation" - notify: "notationChanged" - index: 3 - } - Signal { - name: "bottomChanged" - Parameter { name: "bottom"; type: "double" } - } - Signal { - name: "topChanged" - Parameter { name: "top"; type: "double" } - } - Signal { - name: "decimalsChanged" - Parameter { name: "decimals"; type: "int" } - } - Signal { - name: "notationChanged" - Parameter { name: "notation"; type: "QDoubleValidator::Notation" } - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QEventPoint" - accessSemantics: "value" - exports: ["QtQuick/eventPoint 6.5"] - isCreatable: false - exportMetaObjectRevisions: [1541] - Enum { - name: "States" - alias: "State" - isFlag: true - type: "quint8" - values: [ - "Unknown", - "Stationary", - "Pressed", - "Updated", - "Released" - ] - } - Property { name: "accepted"; type: "bool"; read: "isAccepted"; write: "setAccepted"; index: 0 } - Property { - name: "device" - type: "QPointingDevice" - isPointer: true - isConstant: true - read: "device" - index: 1 - isReadonly: true - isConstant: true - } - Property { name: "id"; type: "int"; read: "id"; index: 2; isReadonly: true; isConstant: true } - Property { - name: "uniqueId" - type: "QPointingDeviceUniqueId" - read: "uniqueId" - index: 3 - isReadonly: true - isConstant: true - } - Property { name: "state"; type: "State"; read: "state"; index: 4; isReadonly: true; isConstant: true } - Property { - name: "timestamp" - type: "ulong" - read: "timestamp" - index: 5 - isReadonly: true - isConstant: true - } - Property { - name: "pressTimestamp" - type: "ulong" - read: "pressTimestamp" - index: 6 - isReadonly: true - isConstant: true - } - Property { - name: "lastTimestamp" - type: "ulong" - read: "lastTimestamp" - index: 7 - isReadonly: true - isConstant: true - } - Property { - name: "timeHeld" - type: "double" - read: "timeHeld" - index: 8 - isReadonly: true - isConstant: true - } - Property { - name: "pressure" - type: "double" - read: "pressure" - index: 9 - isReadonly: true - isConstant: true - } - Property { - name: "rotation" - type: "double" - read: "rotation" - index: 10 - isReadonly: true - isConstant: true - } - Property { - name: "ellipseDiameters" - type: "QSizeF" - read: "ellipseDiameters" - index: 11 - isReadonly: true - isConstant: true - } - Property { - name: "velocity" - type: "QVector2D" - read: "velocity" - index: 12 - isReadonly: true - isConstant: true - } - Property { - name: "position" - type: "QPointF" - read: "position" - index: 13 - isReadonly: true - isConstant: true - } - Property { - name: "pressPosition" - type: "QPointF" - read: "pressPosition" - index: 14 - isReadonly: true - isConstant: true - } - Property { - name: "grabPosition" - type: "QPointF" - read: "grabPosition" - index: 15 - isReadonly: true - isConstant: true - } - Property { - name: "lastPosition" - type: "QPointF" - read: "lastPosition" - index: 16 - isReadonly: true - isConstant: true - } - Property { - name: "scenePosition" - type: "QPointF" - read: "scenePosition" - index: 17 - isReadonly: true - isConstant: true - } - Property { - name: "scenePressPosition" - type: "QPointF" - read: "scenePressPosition" - index: 18 - isReadonly: true - isConstant: true - } - Property { - name: "sceneGrabPosition" - type: "QPointF" - read: "sceneGrabPosition" - index: 19 - isReadonly: true - isConstant: true - } - Property { - name: "sceneLastPosition" - type: "QPointF" - read: "sceneLastPosition" - index: 20 - isReadonly: true - isConstant: true - } - Property { - name: "globalPosition" - type: "QPointF" - read: "globalPosition" - index: 21 - isReadonly: true - isConstant: true - } - Property { - name: "globalPressPosition" - type: "QPointF" - read: "globalPressPosition" - index: 22 - isReadonly: true - isConstant: true - } - Property { - name: "globalGrabPosition" - type: "QPointF" - read: "globalGrabPosition" - index: 23 - isReadonly: true - isConstant: true - } - Property { - name: "globalLastPosition" - type: "QPointF" - read: "globalLastPosition" - index: 24 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QEventPointDerived" - accessSemantics: "none" - prototype: "QEventPoint" - exports: ["QtQuick/EventPoint 6.6"] - isCreatable: false - exportMetaObjectRevisions: [1542] - } - Component { - file: "qbrush.h" - name: "QGradient" - accessSemantics: "value" - Enum { - name: "Type" - values: [ - "LinearGradient", - "RadialGradient", - "ConicalGradient", - "NoGradient" - ] - } - Enum { - name: "Spread" - values: ["PadSpread", "ReflectSpread", "RepeatSpread"] - } - Enum { - name: "CoordinateMode" - values: [ - "LogicalMode", - "StretchToDeviceMode", - "ObjectBoundingMode", - "ObjectMode" - ] - } - Enum { - name: "Preset" - values: [ - "WarmFlame", - "NightFade", - "SpringWarmth", - "JuicyPeach", - "YoungPassion", - "LadyLips", - "SunnyMorning", - "RainyAshville", - "FrozenDreams", - "WinterNeva", - "DustyGrass", - "TemptingAzure", - "HeavyRain", - "AmyCrisp", - "MeanFruit", - "DeepBlue", - "RipeMalinka", - "CloudyKnoxville", - "MalibuBeach", - "NewLife", - "TrueSunset", - "MorpheusDen", - "RareWind", - "NearMoon", - "WildApple", - "SaintPetersburg", - "PlumPlate", - "EverlastingSky", - "HappyFisher", - "Blessing", - "SharpeyeEagle", - "LadogaBottom", - "LemonGate", - "ItmeoBranding", - "ZeusMiracle", - "OldHat", - "StarWine", - "HappyAcid", - "AwesomePine", - "NewYork", - "ShyRainbow", - "MixedHopes", - "FlyHigh", - "StrongBliss", - "FreshMilk", - "SnowAgain", - "FebruaryInk", - "KindSteel", - "SoftGrass", - "GrownEarly", - "SharpBlues", - "ShadyWater", - "DirtyBeauty", - "GreatWhale", - "TeenNotebook", - "PoliteRumors", - "SweetPeriod", - "WideMatrix", - "SoftCherish", - "RedSalvation", - "BurningSpring", - "NightParty", - "SkyGlider", - "HeavenPeach", - "PurpleDivision", - "AquaSplash", - "SpikyNaga", - "LoveKiss", - "CleanMirror", - "PremiumDark", - "ColdEvening", - "CochitiLake", - "SummerGames", - "PassionateBed", - "MountainRock", - "DesertHump", - "JungleDay", - "PhoenixStart", - "OctoberSilence", - "FarawayRiver", - "AlchemistLab", - "OverSun", - "PremiumWhite", - "MarsParty", - "EternalConstance", - "JapanBlush", - "SmilingRain", - "CloudyApple", - "BigMango", - "HealthyWater", - "AmourAmour", - "RiskyConcrete", - "StrongStick", - "ViciousStance", - "PaloAlto", - "HappyMemories", - "MidnightBloom", - "Crystalline", - "PartyBliss", - "ConfidentCloud", - "LeCocktail", - "RiverCity", - "FrozenBerry", - "ChildCare", - "FlyingLemon", - "NewRetrowave", - "HiddenJaguar", - "AboveTheSky", - "Nega", - "DenseWater", - "Seashore", - "MarbleWall", - "CheerfulCaramel", - "NightSky", - "MagicLake", - "YoungGrass", - "ColorfulPeach", - "GentleCare", - "PlumBath", - "HappyUnicorn", - "AfricanField", - "SolidStone", - "OrangeJuice", - "GlassWater", - "NorthMiracle", - "FruitBlend", - "MillenniumPine", - "HighFlight", - "MoleHall", - "SpaceShift", - "ForestInei", - "RoyalGarden", - "RichMetal", - "JuicyCake", - "SmartIndigo", - "SandStrike", - "NorseBeauty", - "AquaGuidance", - "SunVeggie", - "SeaLord", - "BlackSea", - "GrassShampoo", - "LandingAircraft", - "WitchDance", - "SleeplessNight", - "AngelCare", - "CrystalRiver", - "SoftLipstick", - "SaltMountain", - "PerfectWhite", - "FreshOasis", - "StrictNovember", - "MorningSalad", - "DeepRelief", - "SeaStrike", - "NightCall", - "SupremeSky", - "LightBlue", - "MindCrawl", - "LilyMeadow", - "SugarLollipop", - "SweetDessert", - "MagicRay", - "TeenParty", - "FrozenHeat", - "GagarinView", - "FabledSunset", - "PerfectBlue", - "NumPresets" - ] - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QImage" - accessSemantics: "value" - Enum { - name: "Format" - values: [ - "Format_Invalid", - "Format_Mono", - "Format_MonoLSB", - "Format_Indexed8", - "Format_RGB32", - "Format_ARGB32", - "Format_ARGB32_Premultiplied", - "Format_RGB16", - "Format_ARGB8565_Premultiplied", - "Format_RGB666", - "Format_ARGB6666_Premultiplied", - "Format_RGB555", - "Format_ARGB8555_Premultiplied", - "Format_RGB888", - "Format_RGB444", - "Format_ARGB4444_Premultiplied", - "Format_RGBX8888", - "Format_RGBA8888", - "Format_RGBA8888_Premultiplied", - "Format_BGR30", - "Format_A2BGR30_Premultiplied", - "Format_RGB30", - "Format_A2RGB30_Premultiplied", - "Format_Alpha8", - "Format_Grayscale8", - "Format_RGBX64", - "Format_RGBA64", - "Format_RGBA64_Premultiplied", - "Format_Grayscale16", - "Format_BGR888", - "Format_RGBX16FPx4", - "Format_RGBA16FPx4", - "Format_RGBA16FPx4_Premultiplied", - "Format_RGBX32FPx4", - "Format_RGBA32FPx4", - "Format_RGBA32FPx4_Premultiplied", - "NImageFormats" - ] - } - } - Component { - file: "private/qquickitemsmodule_p.h" - name: "QInputDevice" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/InputDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "DeviceTypes" - alias: "DeviceType" - isFlag: true - values: [ - "Unknown", - "Mouse", - "TouchScreen", - "TouchPad", - "Puck", - "Stylus", - "Airbrush", - "Keyboard", - "AllDevices" - ] - } - Enum { - name: "Capabilities" - alias: "Capability" - isFlag: true - values: [ - "None", - "Position", - "Area", - "Pressure", - "Velocity", - "NormalizedPosition", - "MouseEmulation", - "PixelScroll", - "Scroll", - "Hover", - "Rotation", - "XTilt", - "YTilt", - "TangentialPressure", - "ZPosition", - "All" - ] - } - Property { name: "name"; type: "QString"; read: "name"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "type" - type: "DeviceType" - read: "type" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "capabilities" - type: "Capabilities" - read: "capabilities" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "systemId" - type: "qlonglong" - read: "systemId" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "seatName" - type: "QString" - read: "seatName" - index: 4 - isReadonly: true - isConstant: true - } - Property { - name: "availableVirtualGeometry" - type: "QRect" - read: "availableVirtualGeometry" - notify: "availableVirtualGeometryChanged" - index: 5 - isReadonly: true - } - Signal { - name: "availableVirtualGeometryChanged" - Parameter { name: "area"; type: "QRect" } - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QInputMethod" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/InputMethod 2.0", "QtQuick/InputMethod 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "Action" - values: ["Click", "ContextMenu"] - } - Property { - name: "cursorRectangle" - type: "QRectF" - read: "cursorRectangle" - notify: "cursorRectangleChanged" - index: 0 - isReadonly: true - } - Property { - name: "anchorRectangle" - type: "QRectF" - read: "anchorRectangle" - notify: "anchorRectangleChanged" - index: 1 - isReadonly: true - } - Property { - name: "keyboardRectangle" - type: "QRectF" - read: "keyboardRectangle" - notify: "keyboardRectangleChanged" - index: 2 - isReadonly: true - } - Property { - name: "inputItemClipRectangle" - type: "QRectF" - read: "inputItemClipRectangle" - notify: "inputItemClipRectangleChanged" - index: 3 - isReadonly: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - notify: "visibleChanged" - index: 4 - isReadonly: true - } - Property { - name: "animating" - type: "bool" - read: "isAnimating" - notify: "animatingChanged" - index: 5 - isReadonly: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - notify: "localeChanged" - index: 6 - isReadonly: true - } - Property { - name: "inputDirection" - type: "Qt::LayoutDirection" - read: "inputDirection" - notify: "inputDirectionChanged" - index: 7 - isReadonly: true - } - Signal { name: "cursorRectangleChanged" } - Signal { name: "anchorRectangleChanged" } - Signal { name: "keyboardRectangleChanged" } - Signal { name: "inputItemClipRectangleChanged" } - Signal { name: "visibleChanged" } - Signal { name: "animatingChanged" } - Signal { name: "localeChanged" } - Signal { - name: "inputDirectionChanged" - Parameter { name: "newDirection"; type: "Qt::LayoutDirection" } - } - Method { name: "show" } - Method { name: "hide" } - Method { - name: "update" - Parameter { name: "queries"; type: "Qt::InputMethodQueries" } - } - Method { name: "reset" } - Method { name: "commit" } - Method { - name: "invokeAction" - Parameter { name: "a"; type: "Action" } - Parameter { name: "cursorPosition"; type: "int" } - } - } - Component { - file: "qvalidator.h" - name: "QIntValidator" - accessSemantics: "reference" - prototype: "QValidator" - Property { - name: "bottom" - type: "int" - read: "bottom" - write: "setBottom" - notify: "bottomChanged" - index: 0 - } - Property { name: "top"; type: "int"; read: "top"; write: "setTop"; notify: "topChanged"; index: 1 } - Signal { - name: "bottomChanged" - Parameter { name: "bottom"; type: "int" } - } - Signal { - name: "topChanged" - Parameter { name: "top"; type: "int" } - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QKeySequence" - accessSemantics: "none" - exports: ["QtQuick/StandardKey 2.2", "QtQuick/StandardKey 6.0"] - isCreatable: false - exportMetaObjectRevisions: [514, 1536] - Enum { - name: "StandardKey" - values: [ - "UnknownKey", - "HelpContents", - "WhatsThis", - "Open", - "Close", - "Save", - "New", - "Delete", - "Cut", - "Copy", - "Paste", - "Undo", - "Redo", - "Back", - "Forward", - "Refresh", - "ZoomIn", - "ZoomOut", - "Print", - "AddTab", - "NextChild", - "PreviousChild", - "Find", - "FindNext", - "FindPrevious", - "Replace", - "SelectAll", - "Bold", - "Italic", - "Underline", - "MoveToNextChar", - "MoveToPreviousChar", - "MoveToNextWord", - "MoveToPreviousWord", - "MoveToNextLine", - "MoveToPreviousLine", - "MoveToNextPage", - "MoveToPreviousPage", - "MoveToStartOfLine", - "MoveToEndOfLine", - "MoveToStartOfBlock", - "MoveToEndOfBlock", - "MoveToStartOfDocument", - "MoveToEndOfDocument", - "SelectNextChar", - "SelectPreviousChar", - "SelectNextWord", - "SelectPreviousWord", - "SelectNextLine", - "SelectPreviousLine", - "SelectNextPage", - "SelectPreviousPage", - "SelectStartOfLine", - "SelectEndOfLine", - "SelectStartOfBlock", - "SelectEndOfBlock", - "SelectStartOfDocument", - "SelectEndOfDocument", - "DeleteStartOfWord", - "DeleteEndOfWord", - "DeleteEndOfLine", - "InsertParagraphSeparator", - "InsertLineSeparator", - "SaveAs", - "Preferences", - "Quit", - "FullScreen", - "Deselect", - "DeleteCompleteLine", - "Backspace", - "Cancel" - ] - } - Enum { - name: "SequenceFormat" - values: ["NativeText", "PortableText"] - } - Enum { - name: "SequenceMatch" - values: ["NoMatch", "PartialMatch", "ExactMatch"] - } - } - Component { - file: "private/qquickitemsmodule_p.h" - name: "QPointingDevice" - accessSemantics: "reference" - prototype: "QInputDevice" - exports: ["QtQuick/PointerDevice 2.12", "QtQuick/PointerDevice 6.0"] - isCreatable: false - exportMetaObjectRevisions: [524, 1536] - Enum { - name: "PointerTypes" - alias: "PointerType" - isFlag: true - values: [ - "Unknown", - "Generic", - "Finger", - "Pen", - "Eraser", - "Cursor", - "AllPointerTypes" - ] - } - Enum { - name: "GrabTransition" - values: [ - "GrabPassive", - "UngrabPassive", - "CancelGrabPassive", - "OverrideGrabPassive", - "GrabExclusive", - "UngrabExclusive", - "CancelGrabExclusive" - ] - } - Property { - name: "pointerType" - type: "PointerType" - read: "pointerType" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "maximumPoints" - type: "int" - read: "maximumPoints" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "buttonCount" - type: "int" - read: "buttonCount" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "uniqueId" - type: "QPointingDeviceUniqueId" - read: "uniqueId" - index: 3 - isReadonly: true - isConstant: true - } - Signal { - name: "grabChanged" - Parameter { name: "grabber"; type: "QObject"; isPointer: true } - Parameter { name: "transition"; type: "GrabTransition" } - Parameter { name: "event"; type: "QPointerEvent"; isPointer: true; isConstant: true } - Parameter { name: "point"; type: "QEventPoint" } - } - } - Component { - file: "private/qquickitemsmodule_p.h" - name: "QPointingDeviceUniqueId" - accessSemantics: "value" - exports: [ - "QtQuick/pointingDeviceUniqueId 2.9", - "QtQuick/pointingDeviceUniqueId 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [521, 1536] - Property { - name: "numericId" - type: "qlonglong" - read: "numericId" - index: 0 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickAbstractAnimation" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus", "QQmlPropertyValueSource"] - exports: [ - "QtQuick/Animation 2.0", - "QtQuick/Animation 2.12", - "QtQuick/Animation 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 524, 1536] - Enum { - name: "Loops" - values: ["Infinite"] - } - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "paused" - type: "bool" - read: "isPaused" - write: "setPaused" - notify: "pausedChanged" - index: 1 - } - Property { - name: "alwaysRunToEnd" - type: "bool" - read: "alwaysRunToEnd" - write: "setAlwaysRunToEnd" - notify: "alwaysRunToEndChanged" - index: 2 - } - Property { - name: "loops" - type: "int" - read: "loops" - write: "setLoops" - notify: "loopCountChanged" - index: 3 - } - Signal { name: "started" } - Signal { name: "stopped" } - Signal { - name: "runningChanged" - Parameter { type: "bool" } - } - Signal { - name: "pausedChanged" - Parameter { type: "bool" } - } - Signal { - name: "alwaysRunToEndChanged" - Parameter { type: "bool" } - } - Signal { - name: "loopCountChanged" - Parameter { type: "int" } - } - Signal { name: "finished"; revision: 524 } - Method { name: "restart" } - Method { name: "start" } - Method { name: "pause" } - Method { name: "resume" } - Method { name: "stop" } - Method { name: "complete" } - } - Component { - file: "private/qquickaccessibleattached_p.h" - name: "QQuickAccessibleAttached" - accessSemantics: "reference" - prototype: "QObject" - extension: "QAccessible" - extensionIsNamespace: true - exports: [ - "QtQuick/Accessible 2.0", - "QtQuick/Accessible 6.0", - "QtQuick/Accessible 6.2" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536, 1538] - attachedType: "QQuickAccessibleAttached" - Property { - name: "role" - type: "QAccessible::Role" - read: "role" - write: "setRole" - notify: "roleChanged" - index: 0 - isFinal: true - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 1 - isFinal: true - } - Property { - name: "description" - type: "QString" - read: "description" - write: "setDescription" - notify: "descriptionChanged" - index: 2 - isFinal: true - } - Property { - name: "ignored" - type: "bool" - read: "ignored" - write: "setIgnored" - notify: "ignoredChanged" - index: 3 - isFinal: true - } - Property { - name: "checkable" - type: "bool" - read: "checkable" - write: "set_checkable" - notify: "checkableChanged" - index: 4 - isFinal: true - } - Property { - name: "checked" - type: "bool" - read: "checked" - write: "set_checked" - notify: "checkedChanged" - index: 5 - isFinal: true - } - Property { - name: "editable" - type: "bool" - read: "editable" - write: "set_editable" - notify: "editableChanged" - index: 6 - isFinal: true - } - Property { - name: "focusable" - type: "bool" - read: "focusable" - write: "set_focusable" - notify: "focusableChanged" - index: 7 - isFinal: true - } - Property { - name: "focused" - type: "bool" - read: "focused" - write: "set_focused" - notify: "focusedChanged" - index: 8 - isFinal: true - } - Property { - name: "multiLine" - type: "bool" - read: "multiLine" - write: "set_multiLine" - notify: "multiLineChanged" - index: 9 - isFinal: true - } - Property { - name: "readOnly" - type: "bool" - read: "readOnly" - write: "set_readOnly" - notify: "readOnlyChanged" - index: 10 - isFinal: true - } - Property { - name: "selected" - type: "bool" - read: "selected" - write: "set_selected" - notify: "selectedChanged" - index: 11 - isFinal: true - } - Property { - name: "selectable" - type: "bool" - read: "selectable" - write: "set_selectable" - notify: "selectableChanged" - index: 12 - isFinal: true - } - Property { - name: "pressed" - type: "bool" - read: "pressed" - write: "set_pressed" - notify: "pressedChanged" - index: 13 - isFinal: true - } - Property { - name: "checkStateMixed" - type: "bool" - read: "checkStateMixed" - write: "set_checkStateMixed" - notify: "checkStateMixedChanged" - index: 14 - isFinal: true - } - Property { - name: "defaultButton" - type: "bool" - read: "defaultButton" - write: "set_defaultButton" - notify: "defaultButtonChanged" - index: 15 - isFinal: true - } - Property { - name: "passwordEdit" - type: "bool" - read: "passwordEdit" - write: "set_passwordEdit" - notify: "passwordEditChanged" - index: 16 - isFinal: true - } - Property { - name: "selectableText" - type: "bool" - read: "selectableText" - write: "set_selectableText" - notify: "selectableTextChanged" - index: 17 - isFinal: true - } - Property { - name: "searchEdit" - type: "bool" - read: "searchEdit" - write: "set_searchEdit" - notify: "searchEditChanged" - index: 18 - isFinal: true - } - Signal { - name: "checkableChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "checkedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "editableChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "focusableChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "focusedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "multiLineChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "readOnlyChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "selectedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "selectableChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "pressedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "checkStateMixedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "defaultButtonChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "passwordEditChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "selectableTextChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "searchEditChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { name: "roleChanged" } - Signal { name: "nameChanged" } - Signal { name: "descriptionChanged" } - Signal { name: "ignoredChanged" } - Signal { name: "pressAction" } - Signal { name: "toggleAction" } - Signal { name: "increaseAction" } - Signal { name: "decreaseAction" } - Signal { name: "scrollUpAction" } - Signal { name: "scrollDownAction" } - Signal { name: "scrollLeftAction" } - Signal { name: "scrollRightAction" } - Signal { name: "previousPageAction" } - Signal { name: "nextPageAction" } - Method { name: "valueChanged" } - Method { name: "cursorPositionChanged" } - Method { - name: "setIgnored" - Parameter { name: "ignored"; type: "bool" } - } - Method { - name: "stripHtml" - revision: 1538 - type: "QString" - Parameter { name: "html"; type: "QString" } - } - } - Component { - file: "private/qquickitemanimation_p.h" - name: "QQuickAnchorAnimation" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/AnchorAnimation 2.0", - "QtQuick/AnchorAnimation 2.12", - "QtQuick/AnchorAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "targets" - type: "QQuickItem" - isList: true - read: "targets" - index: 0 - isReadonly: true - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 1 - } - Property { - name: "easing" - type: "QEasingCurve" - read: "easing" - write: "setEasing" - notify: "easingChanged" - index: 2 - } - Signal { - name: "durationChanged" - Parameter { type: "int" } - } - Signal { - name: "easingChanged" - Parameter { type: "QEasingCurve" } - } - } - Component { - file: "private/qquickstateoperations_p.h" - name: "QQuickAnchorChanges" - accessSemantics: "reference" - prototype: "QQuickStateOperation" - exports: ["QtQuick/AnchorChanges 2.0", "QtQuick/AnchorChanges 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "object" - write: "setObject" - index: 0 - } - Property { - name: "anchors" - type: "QQuickAnchorSet" - isPointer: true - read: "anchors" - index: 1 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qquickanchors_p_p.h" - name: "QQuickAnchorLine" - accessSemantics: "value" - } - Component { - file: "private/qquickstateoperations_p.h" - name: "QQuickAnchorSet" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "left" - type: "QQmlScriptString" - read: "left" - write: "setLeft" - reset: "resetLeft" - index: 0 - isFinal: true - } - Property { - name: "right" - type: "QQmlScriptString" - read: "right" - write: "setRight" - reset: "resetRight" - index: 1 - isFinal: true - } - Property { - name: "horizontalCenter" - type: "QQmlScriptString" - read: "horizontalCenter" - write: "setHorizontalCenter" - reset: "resetHorizontalCenter" - index: 2 - isFinal: true - } - Property { - name: "top" - type: "QQmlScriptString" - read: "top" - write: "setTop" - reset: "resetTop" - index: 3 - isFinal: true - } - Property { - name: "bottom" - type: "QQmlScriptString" - read: "bottom" - write: "setBottom" - reset: "resetBottom" - index: 4 - isFinal: true - } - Property { - name: "verticalCenter" - type: "QQmlScriptString" - read: "verticalCenter" - write: "setVerticalCenter" - reset: "resetVerticalCenter" - index: 5 - isFinal: true - } - Property { - name: "baseline" - type: "QQmlScriptString" - read: "baseline" - write: "setBaseline" - reset: "resetBaseline" - index: 6 - isFinal: true - } - } - Component { - file: "private/qquickanchors_p.h" - name: "QQuickAnchors" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Anchors" - alias: "Anchor" - isFlag: true - values: [ - "InvalidAnchor", - "LeftAnchor", - "RightAnchor", - "TopAnchor", - "BottomAnchor", - "HCenterAnchor", - "VCenterAnchor", - "BaselineAnchor", - "Horizontal_Mask", - "Vertical_Mask" - ] - } - Property { - name: "left" - type: "QQuickAnchorLine" - read: "left" - write: "setLeft" - reset: "resetLeft" - notify: "leftChanged" - index: 0 - isFinal: true - } - Property { - name: "right" - type: "QQuickAnchorLine" - read: "right" - write: "setRight" - reset: "resetRight" - notify: "rightChanged" - index: 1 - isFinal: true - } - Property { - name: "horizontalCenter" - type: "QQuickAnchorLine" - read: "horizontalCenter" - write: "setHorizontalCenter" - reset: "resetHorizontalCenter" - notify: "horizontalCenterChanged" - index: 2 - isFinal: true - } - Property { - name: "top" - type: "QQuickAnchorLine" - read: "top" - write: "setTop" - reset: "resetTop" - notify: "topChanged" - index: 3 - isFinal: true - } - Property { - name: "bottom" - type: "QQuickAnchorLine" - read: "bottom" - write: "setBottom" - reset: "resetBottom" - notify: "bottomChanged" - index: 4 - isFinal: true - } - Property { - name: "verticalCenter" - type: "QQuickAnchorLine" - read: "verticalCenter" - write: "setVerticalCenter" - reset: "resetVerticalCenter" - notify: "verticalCenterChanged" - index: 5 - isFinal: true - } - Property { - name: "baseline" - type: "QQuickAnchorLine" - read: "baseline" - write: "setBaseline" - reset: "resetBaseline" - notify: "baselineChanged" - index: 6 - isFinal: true - } - Property { - name: "margins" - type: "double" - read: "margins" - write: "setMargins" - notify: "marginsChanged" - index: 7 - isFinal: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - reset: "resetLeftMargin" - notify: "leftMarginChanged" - index: 8 - isFinal: true - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - reset: "resetRightMargin" - notify: "rightMarginChanged" - index: 9 - isFinal: true - } - Property { - name: "horizontalCenterOffset" - type: "double" - read: "horizontalCenterOffset" - write: "setHorizontalCenterOffset" - notify: "horizontalCenterOffsetChanged" - index: 10 - isFinal: true - } - Property { - name: "topMargin" - type: "double" - read: "topMargin" - write: "setTopMargin" - reset: "resetTopMargin" - notify: "topMarginChanged" - index: 11 - isFinal: true - } - Property { - name: "bottomMargin" - type: "double" - read: "bottomMargin" - write: "setBottomMargin" - reset: "resetBottomMargin" - notify: "bottomMarginChanged" - index: 12 - isFinal: true - } - Property { - name: "verticalCenterOffset" - type: "double" - read: "verticalCenterOffset" - write: "setVerticalCenterOffset" - notify: "verticalCenterOffsetChanged" - index: 13 - isFinal: true - } - Property { - name: "baselineOffset" - type: "double" - read: "baselineOffset" - write: "setBaselineOffset" - notify: "baselineOffsetChanged" - index: 14 - isFinal: true - } - Property { - name: "fill" - type: "QQuickItem" - isPointer: true - read: "fill" - write: "setFill" - reset: "resetFill" - notify: "fillChanged" - index: 15 - isFinal: true - } - Property { - name: "centerIn" - type: "QQuickItem" - isPointer: true - read: "centerIn" - write: "setCenterIn" - reset: "resetCenterIn" - notify: "centerInChanged" - index: 16 - isFinal: true - } - Property { - name: "alignWhenCentered" - type: "bool" - read: "alignWhenCentered" - write: "setAlignWhenCentered" - notify: "centerAlignedChanged" - index: 17 - isFinal: true - } - Signal { name: "leftChanged" } - Signal { name: "rightChanged" } - Signal { name: "topChanged" } - Signal { name: "bottomChanged" } - Signal { name: "verticalCenterChanged" } - Signal { name: "horizontalCenterChanged" } - Signal { name: "baselineChanged" } - Signal { name: "fillChanged" } - Signal { name: "centerInChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "topMarginChanged" } - Signal { name: "bottomMarginChanged" } - Signal { name: "marginsChanged" } - Signal { name: "verticalCenterOffsetChanged" } - Signal { name: "horizontalCenterOffsetChanged" } - Signal { name: "baselineOffsetChanged" } - Signal { name: "centerAlignedChanged" } - } - Component { - file: "private/qquickanimatedimage_p.h" - name: "QQuickAnimatedImage" - accessSemantics: "reference" - prototype: "QQuickImage" - exports: [ - "QtQuick/AnimatedImage 2.0", - "QtQuick/AnimatedImage 2.1", - "QtQuick/AnimatedImage 2.3", - "QtQuick/AnimatedImage 2.4", - "QtQuick/AnimatedImage 2.5", - "QtQuick/AnimatedImage 2.7", - "QtQuick/AnimatedImage 2.11", - "QtQuick/AnimatedImage 2.14", - "QtQuick/AnimatedImage 2.15", - "QtQuick/AnimatedImage 6.0", - "QtQuick/AnimatedImage 6.2", - "QtQuick/AnimatedImage 6.3", - "QtQuick/AnimatedImage 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "playing" - type: "bool" - read: "isPlaying" - write: "setPlaying" - notify: "playingChanged" - index: 0 - } - Property { - name: "paused" - type: "bool" - read: "isPaused" - write: "setPaused" - notify: "pausedChanged" - index: 1 - } - Property { - name: "currentFrame" - type: "int" - read: "currentFrame" - write: "setCurrentFrame" - notify: "frameChanged" - index: 2 - } - Property { - name: "frameCount" - type: "int" - read: "frameCount" - notify: "frameCountChanged" - index: 3 - isReadonly: true - } - Property { - name: "speed" - revision: 523 - type: "double" - read: "speed" - write: "setSpeed" - notify: "speedChanged" - index: 4 - } - Signal { name: "playingChanged" } - Signal { name: "pausedChanged" } - Signal { name: "frameChanged" } - Signal { name: "currentFrameChanged" } - Signal { name: "frameCountChanged" } - Signal { name: "speedChanged"; revision: 523 } - Method { name: "movieUpdate" } - Method { name: "movieRequestFinished" } - Method { name: "playingStatusChanged" } - Method { name: "onCacheChanged" } - } - Component { - file: "private/qquickanimatedsprite_p.h" - name: "QQuickAnimatedSprite" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/AnimatedSprite 2.0", - "QtQuick/AnimatedSprite 2.1", - "QtQuick/AnimatedSprite 2.4", - "QtQuick/AnimatedSprite 2.7", - "QtQuick/AnimatedSprite 2.11", - "QtQuick/AnimatedSprite 2.12", - "QtQuick/AnimatedSprite 2.15", - "QtQuick/AnimatedSprite 6.0", - "QtQuick/AnimatedSprite 6.3", - "QtQuick/AnimatedSprite 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 519, - 523, - 524, - 527, - 1536, - 1539, - 1543 - ] - Enum { - name: "LoopParameters" - values: ["Infinite"] - } - Enum { - name: "FinishBehavior" - values: ["FinishAtInitialFrame", "FinishAtFinalFrame"] - } - Property { - name: "running" - type: "bool" - read: "running" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "interpolate" - type: "bool" - read: "interpolate" - write: "setInterpolate" - notify: "interpolateChanged" - index: 1 - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 2 - } - Property { - name: "reverse" - type: "bool" - read: "reverse" - write: "setReverse" - notify: "reverseChanged" - index: 3 - } - Property { - name: "frameSync" - type: "bool" - read: "frameSync" - write: "setFrameSync" - notify: "frameSyncChanged" - index: 4 - } - Property { - name: "frameCount" - type: "int" - read: "frameCount" - write: "setFrameCount" - notify: "frameCountChanged" - index: 5 - } - Property { - name: "frameHeight" - type: "int" - read: "frameHeight" - write: "setFrameHeight" - notify: "frameHeightChanged" - index: 6 - } - Property { - name: "frameWidth" - type: "int" - read: "frameWidth" - write: "setFrameWidth" - notify: "frameWidthChanged" - index: 7 - } - Property { - name: "frameX" - type: "int" - read: "frameX" - write: "setFrameX" - notify: "frameXChanged" - index: 8 - } - Property { - name: "frameY" - type: "int" - read: "frameY" - write: "setFrameY" - notify: "frameYChanged" - index: 9 - } - Property { - name: "frameRate" - type: "double" - read: "frameRate" - write: "setFrameRate" - reset: "resetFrameRate" - notify: "frameRateChanged" - index: 10 - } - Property { - name: "frameDuration" - type: "int" - read: "frameDuration" - write: "setFrameDuration" - reset: "resetFrameDuration" - notify: "frameDurationChanged" - index: 11 - } - Property { - name: "loops" - type: "int" - read: "loops" - write: "setLoops" - notify: "loopsChanged" - index: 12 - } - Property { - name: "paused" - type: "bool" - read: "paused" - write: "setPaused" - notify: "pausedChanged" - index: 13 - } - Property { - name: "currentFrame" - type: "int" - read: "currentFrame" - write: "setCurrentFrame" - notify: "currentFrameChanged" - index: 14 - } - Property { - name: "finishBehavior" - revision: 527 - type: "FinishBehavior" - read: "finishBehavior" - write: "setFinishBehavior" - notify: "finishBehaviorChanged" - index: 15 - } - Signal { - name: "pausedChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "runningChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "interpolateChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "sourceChanged" - Parameter { name: "arg"; type: "QUrl" } - } - Signal { - name: "reverseChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "frameSyncChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "frameCountChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameHeightChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameWidthChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameXChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameYChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameRateChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "frameDurationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "loopsChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "currentFrameChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "finishBehaviorChanged" - revision: 527 - Parameter { name: "arg"; type: "FinishBehavior" } - } - Signal { name: "finished"; revision: 524 } - Method { name: "start" } - Method { name: "stop" } - Method { name: "restart" } - Method { - name: "advance" - Parameter { name: "frames"; type: "int" } - } - Method { name: "advance"; isCloned: true } - Method { name: "pause" } - Method { name: "resume" } - Method { - name: "setRunning" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setPaused" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setInterpolate" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setSource" - Parameter { name: "arg"; type: "QUrl" } - } - Method { - name: "setReverse" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setFrameSync" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setFrameCount" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameHeight" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameWidth" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameX" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameY" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameRate" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setFrameDuration" - Parameter { name: "arg"; type: "int" } - } - Method { name: "resetFrameRate" } - Method { name: "resetFrameDuration" } - Method { - name: "setLoops" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setCurrentFrame" - Parameter { name: "arg"; type: "int" } - } - Method { name: "createEngine" } - Method { name: "reset" } - } - Component { - file: "private/qquickanimationcontroller_p.h" - name: "QQuickAnimationController" - accessSemantics: "reference" - defaultProperty: "animation" - prototype: "QObject" - interfaces: ["QQmlFinalizerHook"] - exports: [ - "QtQuick/AnimationController 2.0", - "QtQuick/AnimationController 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - notify: "progressChanged" - index: 0 - } - Property { - name: "animation" - type: "QQuickAbstractAnimation" - isPointer: true - read: "animation" - write: "setAnimation" - notify: "animationChanged" - index: 1 - } - Signal { name: "progressChanged" } - Signal { name: "animationChanged" } - Method { name: "reload" } - Method { name: "completeToBeginning" } - Method { name: "completeToEnd" } - Method { name: "updateProgress" } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickAnimationGroup" - accessSemantics: "reference" - defaultProperty: "animations" - prototype: "QQuickAbstractAnimation" - Property { - name: "animations" - type: "QQuickAbstractAnimation" - isList: true - read: "animations" - index: 0 - isReadonly: true - } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickAnimator" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/Animator 2.2", - "QtQuick/Animator 2.12", - "QtQuick/Animator 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [514, 524, 1536] - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "targetItem" - write: "setTargetItem" - notify: "targetItemChanged" - index: 0 - } - Property { - name: "easing" - type: "QEasingCurve" - read: "easing" - write: "setEasing" - notify: "easingChanged" - index: 1 - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 2 - } - Property { name: "to"; type: "double"; read: "to"; write: "setTo"; notify: "toChanged"; index: 3 } - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 4 - } - Signal { - name: "targetItemChanged" - Parameter { type: "QQuickItem"; isPointer: true } - } - Signal { - name: "durationChanged" - Parameter { name: "duration"; type: "int" } - } - Signal { - name: "easingChanged" - Parameter { name: "curve"; type: "QEasingCurve" } - } - Signal { - name: "toChanged" - Parameter { name: "to"; type: "double" } - } - Signal { - name: "fromChanged" - Parameter { name: "from"; type: "double" } - } - } - Component { - file: "private/qquickapplication_p.h" - name: "QQuickApplication" - accessSemantics: "reference" - prototype: "QQmlApplication" - exports: ["QtQuick/Application 2.0", "QtQuick/Application 6.0"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [512, 1536] - Property { - name: "active" - type: "bool" - read: "active" - notify: "activeChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "layoutDirection" - type: "Qt::LayoutDirection" - read: "layoutDirection" - notify: "layoutDirectionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "supportsMultipleWindows" - type: "bool" - read: "supportsMultipleWindows" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "state" - type: "Qt::ApplicationState" - read: "state" - notify: "stateChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "font" - type: "QFont" - read: "font" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "displayName" - type: "QString" - read: "displayName" - write: "setDisplayName" - notify: "displayNameChanged" - index: 5 - isFinal: true - } - Property { - name: "screens" - type: "QQuickScreenInfo" - isList: true - read: "screens" - notify: "screensChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "styleHints" - type: "QStyleHints" - isPointer: true - read: "styleHints" - index: 7 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "activeChanged" } - Signal { name: "displayNameChanged" } - Signal { name: "layoutDirectionChanged" } - Signal { - name: "stateChanged" - Parameter { name: "state"; type: "Qt::ApplicationState" } - } - Signal { name: "screensChanged" } - Method { name: "updateScreens" } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickBasePositioner" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - exports: [ - "QtQuick/Positioner 2.0", - "QtQuick/Positioner 2.1", - "QtQuick/Positioner 2.4", - "QtQuick/Positioner 2.6", - "QtQuick/Positioner 2.7", - "QtQuick/Positioner 2.9", - "QtQuick/Positioner 2.11", - "QtQuick/Positioner 6.0", - "QtQuick/Positioner 6.2", - "QtQuick/Positioner 6.3", - "QtQuick/Positioner 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1543 - ] - attachedType: "QQuickPositionerAttached" - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - notify: "spacingChanged" - index: 0 - } - Property { - name: "populate" - type: "QQuickTransition" - isPointer: true - read: "populate" - write: "setPopulate" - notify: "populateChanged" - index: 1 - } - Property { - name: "move" - type: "QQuickTransition" - isPointer: true - read: "move" - write: "setMove" - notify: "moveChanged" - index: 2 - } - Property { - name: "add" - type: "QQuickTransition" - isPointer: true - read: "add" - write: "setAdd" - notify: "addChanged" - index: 3 - } - Property { - name: "padding" - revision: 518 - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 4 - } - Property { - name: "topPadding" - revision: 518 - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 5 - } - Property { - name: "leftPadding" - revision: 518 - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 6 - } - Property { - name: "rightPadding" - revision: 518 - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 7 - } - Property { - name: "bottomPadding" - revision: 518 - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 8 - } - Signal { name: "spacingChanged" } - Signal { name: "populateChanged" } - Signal { name: "moveChanged" } - Signal { name: "addChanged" } - Signal { name: "paddingChanged"; revision: 518 } - Signal { name: "topPaddingChanged"; revision: 518 } - Signal { name: "leftPaddingChanged"; revision: 518 } - Signal { name: "rightPaddingChanged"; revision: 518 } - Signal { name: "bottomPaddingChanged"; revision: 518 } - Signal { name: "positioningComplete"; revision: 521 } - Method { name: "prePositioning" } - Method { name: "forceLayout"; revision: 521 } - } - Component { - file: "private/qquickbehavior_p.h" - name: "QQuickBehavior" - accessSemantics: "reference" - defaultProperty: "animation" - prototype: "QObject" - interfaces: ["QQmlFinalizerHook", "QQmlPropertyValueInterceptor"] - deferredNames: ["animation"] - exports: [ - "QtQuick/Behavior 2.0", - "QtQuick/Behavior 2.13", - "QtQuick/Behavior 2.15", - "QtQuick/Behavior 6.0" - ] - exportMetaObjectRevisions: [512, 525, 527, 1536] - Property { - name: "animation" - type: "QQuickAbstractAnimation" - isPointer: true - read: "animation" - write: "setAnimation" - index: 0 - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 1 - } - Property { - name: "targetValue" - revision: 525 - type: "QVariant" - read: "targetValue" - notify: "targetValueChanged" - index: 2 - isReadonly: true - } - Property { - name: "targetProperty" - revision: 527 - type: "QQmlProperty" - read: "targetProperty" - notify: "targetPropertyChanged" - index: 3 - isReadonly: true - } - Signal { name: "enabledChanged" } - Signal { name: "targetValueChanged" } - Signal { name: "targetPropertyChanged" } - } - Component { - file: "private/qquickborderimage_p.h" - name: "QQuickBorderImage" - accessSemantics: "reference" - prototype: "QQuickImageBase" - exports: [ - "QtQuick/BorderImage 2.0", - "QtQuick/BorderImage 2.1", - "QtQuick/BorderImage 2.4", - "QtQuick/BorderImage 2.7", - "QtQuick/BorderImage 2.11", - "QtQuick/BorderImage 2.14", - "QtQuick/BorderImage 2.15", - "QtQuick/BorderImage 6.0", - "QtQuick/BorderImage 6.2", - "QtQuick/BorderImage 6.3", - "QtQuick/BorderImage 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "TileMode" - values: ["Stretch", "Repeat", "Round"] - } - Property { - name: "border" - type: "QQuickScaleGrid" - isPointer: true - read: "border" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "horizontalTileMode" - type: "TileMode" - read: "horizontalTileMode" - write: "setHorizontalTileMode" - notify: "horizontalTileModeChanged" - index: 1 - } - Property { - name: "verticalTileMode" - type: "TileMode" - read: "verticalTileMode" - write: "setVerticalTileMode" - notify: "verticalTileModeChanged" - index: 2 - } - Property { - name: "sourceSize" - type: "QSize" - read: "sourceSize" - notify: "sourceSizeChanged" - index: 3 - isReadonly: true - } - Signal { name: "horizontalTileModeChanged" } - Signal { name: "verticalTileModeChanged" } - Signal { name: "sourceSizeChanged" } - Method { name: "doUpdate" } - Method { name: "requestFinished" } - Method { name: "sciRequestFinished" } - } - Component { - file: "private/qquickshadereffectmesh_p.h" - name: "QQuickBorderImageMesh" - accessSemantics: "reference" - prototype: "QQuickShaderEffectMesh" - exports: [ - "QtQuick/BorderImageMesh 2.8", - "QtQuick/BorderImageMesh 6.0" - ] - exportMetaObjectRevisions: [520, 1536] - Enum { - name: "TileMode" - values: ["Stretch", "Repeat", "Round"] - } - Property { - name: "border" - type: "QQuickScaleGrid" - isPointer: true - read: "border" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "size" - type: "QSize" - read: "size" - write: "setSize" - notify: "sizeChanged" - index: 1 - } - Property { - name: "horizontalTileMode" - type: "TileMode" - read: "horizontalTileMode" - write: "setHorizontalTileMode" - notify: "horizontalTileModeChanged" - index: 2 - } - Property { - name: "verticalTileMode" - type: "TileMode" - read: "verticalTileMode" - write: "setVerticalTileMode" - notify: "verticalTileModeChanged" - index: 3 - } - Signal { name: "sizeChanged" } - Signal { name: "horizontalTileModeChanged" } - Signal { name: "verticalTileModeChanged" } - } - Component { - file: "private/qquickcanvasitem_p.h" - name: "QQuickCanvasItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/Canvas 2.0", - "QtQuick/Canvas 2.1", - "QtQuick/Canvas 2.4", - "QtQuick/Canvas 2.7", - "QtQuick/Canvas 2.11", - "QtQuick/Canvas 6.0", - "QtQuick/Canvas 6.3", - "QtQuick/Canvas 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "RenderTarget" - values: ["Image", "FramebufferObject"] - } - Enum { - name: "RenderStrategy" - values: ["Immediate", "Threaded", "Cooperative"] - } - Property { - name: "available" - type: "bool" - read: "isAvailable" - notify: "availableChanged" - index: 0 - isReadonly: true - } - Property { - name: "contextType" - type: "QString" - read: "contextType" - write: "setContextType" - notify: "contextTypeChanged" - index: 1 - } - Property { - name: "context" - type: "QJSValue" - read: "context" - notify: "contextChanged" - index: 2 - isReadonly: true - } - Property { - name: "canvasSize" - type: "QSizeF" - read: "canvasSize" - write: "setCanvasSize" - notify: "canvasSizeChanged" - index: 3 - } - Property { - name: "tileSize" - type: "QSize" - read: "tileSize" - write: "setTileSize" - notify: "tileSizeChanged" - index: 4 - } - Property { - name: "canvasWindow" - type: "QRectF" - read: "canvasWindow" - write: "setCanvasWindow" - notify: "canvasWindowChanged" - index: 5 - } - Property { - name: "renderTarget" - type: "RenderTarget" - read: "renderTarget" - write: "setRenderTarget" - notify: "renderTargetChanged" - index: 6 - } - Property { - name: "renderStrategy" - type: "RenderStrategy" - read: "renderStrategy" - write: "setRenderStrategy" - notify: "renderStrategyChanged" - index: 7 - } - Signal { - name: "paint" - Parameter { name: "region"; type: "QRect" } - } - Signal { name: "painted" } - Signal { name: "availableChanged" } - Signal { name: "contextTypeChanged" } - Signal { name: "contextChanged" } - Signal { name: "canvasSizeChanged" } - Signal { name: "tileSizeChanged" } - Signal { name: "canvasWindowChanged" } - Signal { name: "renderTargetChanged" } - Signal { name: "renderStrategyChanged" } - Signal { name: "imageLoaded" } - Method { - name: "loadImage" - Parameter { name: "url"; type: "QUrl" } - Parameter { name: "sourceSize"; type: "QSizeF" } - } - Method { - name: "loadImage" - isCloned: true - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "unloadImage" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "isImageLoaded" - type: "bool" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "isImageLoading" - type: "bool" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "isImageError" - type: "bool" - Parameter { name: "url"; type: "QUrl" } - } - Method { name: "sceneGraphInitialized" } - Method { name: "checkAnimationCallbacks" } - Method { name: "invalidateSceneGraph" } - Method { name: "schedulePolish" } - Method { name: "getContext"; isJavaScriptFunction: true } - Method { name: "requestAnimationFrame"; isJavaScriptFunction: true } - Method { name: "cancelRequestAnimationFrame"; isJavaScriptFunction: true } - Method { name: "requestPaint" } - Method { - name: "markDirty" - Parameter { name: "dirtyRect"; type: "QRectF" } - } - Method { name: "markDirty"; isCloned: true } - Method { - name: "save" - type: "bool" - Parameter { name: "filename"; type: "QString" } - Parameter { name: "imageSize"; type: "QSizeF" } - } - Method { - name: "save" - type: "bool" - isCloned: true - Parameter { name: "filename"; type: "QString" } - } - Method { - name: "toDataURL" - type: "QString" - Parameter { name: "type"; type: "QString" } - } - Method { name: "toDataURL"; type: "QString"; isCloned: true } - Method { name: "delayedCreate" } - } - Component { - file: "private/qquickevents_p_p.h" - name: "QQuickCloseEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/CloseEvent 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Property { - name: "accepted" - type: "bool" - read: "isAccepted" - write: "setAccepted" - index: 0 - isFinal: true - } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickColorAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: [ - "QtQuick/ColorAnimation 2.0", - "QtQuick/ColorAnimation 2.12", - "QtQuick/ColorAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { name: "from"; type: "QColor"; read: "from"; write: "setFrom"; index: 0 } - Property { name: "to"; type: "QColor"; read: "to"; write: "setTo"; index: 1 } - } - Component { - file: "private/qquickcolorgroup_p.h" - name: "QQuickColorGroup" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/ColorGroup 6.0", - "QtQuick/ColorGroup 6.2", - "QtQuick/ColorGroup 6.6" - ] - exportMetaObjectRevisions: [1536, 1538, 1542] - Property { - name: "alternateBase" - type: "QColor" - read: "alternateBase" - write: "setAlternateBase" - reset: "resetAlternateBase" - notify: "alternateBaseChanged" - index: 0 - isFinal: true - } - Property { - name: "base" - type: "QColor" - read: "base" - write: "setBase" - reset: "resetBase" - notify: "baseChanged" - index: 1 - isFinal: true - } - Property { - name: "brightText" - type: "QColor" - read: "brightText" - write: "setBrightText" - reset: "resetBrightText" - notify: "brightTextChanged" - index: 2 - isFinal: true - } - Property { - name: "button" - type: "QColor" - read: "button" - write: "setButton" - reset: "resetButton" - notify: "buttonChanged" - index: 3 - isFinal: true - } - Property { - name: "buttonText" - type: "QColor" - read: "buttonText" - write: "setButtonText" - reset: "resetButtonText" - notify: "buttonTextChanged" - index: 4 - isFinal: true - } - Property { - name: "dark" - type: "QColor" - read: "dark" - write: "setDark" - reset: "resetDark" - notify: "darkChanged" - index: 5 - isFinal: true - } - Property { - name: "highlight" - type: "QColor" - read: "highlight" - write: "setHighlight" - reset: "resetHighlight" - notify: "highlightChanged" - index: 6 - isFinal: true - } - Property { - name: "highlightedText" - type: "QColor" - read: "highlightedText" - write: "setHighlightedText" - reset: "resetHighlightedText" - notify: "highlightedTextChanged" - index: 7 - isFinal: true - } - Property { - name: "light" - type: "QColor" - read: "light" - write: "setLight" - reset: "resetLight" - notify: "lightChanged" - index: 8 - isFinal: true - } - Property { - name: "link" - type: "QColor" - read: "link" - write: "setLink" - reset: "resetLink" - notify: "linkChanged" - index: 9 - isFinal: true - } - Property { - name: "linkVisited" - type: "QColor" - read: "linkVisited" - write: "setLinkVisited" - reset: "resetLinkVisited" - notify: "linkVisitedChanged" - index: 10 - isFinal: true - } - Property { - name: "mid" - type: "QColor" - read: "mid" - write: "setMid" - reset: "resetMid" - notify: "midChanged" - index: 11 - isFinal: true - } - Property { - name: "midlight" - type: "QColor" - read: "midlight" - write: "setMidlight" - reset: "resetMidlight" - notify: "midlightChanged" - index: 12 - isFinal: true - } - Property { - name: "shadow" - type: "QColor" - read: "shadow" - write: "setShadow" - reset: "resetShadow" - notify: "shadowChanged" - index: 13 - isFinal: true - } - Property { - name: "text" - type: "QColor" - read: "text" - write: "setText" - reset: "resetText" - notify: "textChanged" - index: 14 - isFinal: true - } - Property { - name: "toolTipBase" - type: "QColor" - read: "toolTipBase" - write: "setToolTipBase" - reset: "resetToolTipBase" - notify: "toolTipBaseChanged" - index: 15 - isFinal: true - } - Property { - name: "toolTipText" - type: "QColor" - read: "toolTipText" - write: "setToolTipText" - reset: "resetToolTipText" - notify: "toolTipTextChanged" - index: 16 - isFinal: true - } - Property { - name: "window" - type: "QColor" - read: "window" - write: "setWindow" - reset: "resetWindow" - notify: "windowChanged" - index: 17 - isFinal: true - } - Property { - name: "windowText" - type: "QColor" - read: "windowText" - write: "setWindowText" - reset: "resetWindowText" - notify: "windowTextChanged" - index: 18 - isFinal: true - } - Property { - name: "placeholderText" - revision: 1538 - type: "QColor" - read: "placeholderText" - write: "setPlaceholderText" - reset: "resetPlaceholderText" - notify: "placeholderTextChanged" - index: 19 - isFinal: true - } - Property { - name: "accent" - revision: 1542 - type: "QColor" - read: "accent" - write: "setAccent" - reset: "resetAccent" - notify: "accentChanged" - index: 20 - isFinal: true - } - Signal { name: "alternateBaseChanged" } - Signal { name: "baseChanged" } - Signal { name: "brightTextChanged" } - Signal { name: "buttonChanged" } - Signal { name: "buttonTextChanged" } - Signal { name: "darkChanged" } - Signal { name: "highlightChanged" } - Signal { name: "highlightedTextChanged" } - Signal { name: "lightChanged" } - Signal { name: "linkChanged" } - Signal { name: "linkVisitedChanged" } - Signal { name: "midChanged" } - Signal { name: "midlightChanged" } - Signal { name: "shadowChanged" } - Signal { name: "textChanged" } - Signal { name: "toolTipBaseChanged" } - Signal { name: "toolTipTextChanged" } - Signal { name: "windowChanged" } - Signal { name: "windowTextChanged" } - Signal { name: "placeholderTextChanged"; revision: 1538 } - Signal { name: "accentChanged"; revision: 1542 } - Signal { name: "changed" } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickColorSpaceEnums" - accessSemantics: "none" - exports: ["QtQuick/ColorSpace 2.15", "QtQuick/ColorSpace 6.0"] - isCreatable: false - exportMetaObjectRevisions: [527, 1536] - Enum { - name: "NamedColorSpace" - values: [ - "Unknown", - "SRgb", - "SRgbLinear", - "AdobeRgb", - "DisplayP3", - "ProPhotoRgb" - ] - } - Enum { - name: "Primaries" - isScoped: true - values: ["Custom", "SRgb", "AdobeRgb", "DciP3D65", "ProPhotoRgb"] - } - Enum { - name: "TransferFunction" - isScoped: true - values: ["Custom", "Linear", "Gamma", "SRgb", "ProPhotoRgb"] - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QColorSpace" - accessSemantics: "value" - extension: "QQuickColorSpaceValueType" - Enum { - name: "NamedColorSpace" - values: [ - "SRgb", - "SRgbLinear", - "AdobeRgb", - "DisplayP3", - "ProPhotoRgb" - ] - } - Enum { - name: "Primaries" - values: ["Custom", "SRgb", "AdobeRgb", "DciP3D65", "ProPhotoRgb"] - } - Enum { - name: "TransferFunction" - values: ["Custom", "Linear", "Gamma", "SRgb", "ProPhotoRgb"] - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickColorSpaceValueType" - accessSemantics: "value" - Property { - name: "namedColorSpace" - type: "QQuickColorSpaceEnums::NamedColorSpace" - read: "namedColorSpace" - write: "setNamedColorSpace" - index: 0 - isFinal: true - } - Property { - name: "primaries" - type: "QQuickColorSpaceEnums::Primaries" - read: "primaries" - write: "setPrimaries" - index: 1 - isFinal: true - } - Property { - name: "transferFunction" - type: "QQuickColorSpaceEnums::TransferFunction" - read: "transferFunction" - write: "setTransferFunction" - index: 2 - isFinal: true - } - Property { name: "gamma"; type: "float"; read: "gamma"; write: "setGamma"; index: 3; isFinal: true } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QColor" - accessSemantics: "value" - extension: "QQuickColorValueType" - exports: ["QtQuick/color 2.0", "QtQuick/color 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickColorValueType" - accessSemantics: "value" - Property { name: "r"; type: "double"; read: "r"; write: "setR"; index: 0; isFinal: true } - Property { name: "g"; type: "double"; read: "g"; write: "setG"; index: 1; isFinal: true } - Property { name: "b"; type: "double"; read: "b"; write: "setB"; index: 2; isFinal: true } - Property { name: "a"; type: "double"; read: "a"; write: "setA"; index: 3; isFinal: true } - Property { - name: "hsvHue" - type: "double" - read: "hsvHue" - write: "setHsvHue" - index: 4 - isFinal: true - } - Property { - name: "hsvSaturation" - type: "double" - read: "hsvSaturation" - write: "setHsvSaturation" - index: 5 - isFinal: true - } - Property { - name: "hsvValue" - type: "double" - read: "hsvValue" - write: "setHsvValue" - index: 6 - isFinal: true - } - Property { - name: "hslHue" - type: "double" - read: "hslHue" - write: "setHslHue" - index: 7 - isFinal: true - } - Property { - name: "hslSaturation" - type: "double" - read: "hslSaturation" - write: "setHslSaturation" - index: 8 - isFinal: true - } - Property { - name: "hslLightness" - type: "double" - read: "hslLightness" - write: "setHslLightness" - index: 9 - isFinal: true - } - Property { name: "valid"; type: "bool"; read: "isValid"; index: 10; isReadonly: true; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "alpha" - type: "QVariant" - Parameter { name: "value"; type: "double" } - } - Method { - name: "lighter" - type: "QVariant" - Parameter { name: "factor"; type: "double" } - } - Method { name: "lighter"; type: "QVariant"; isCloned: true } - Method { - name: "darker" - type: "QVariant" - Parameter { name: "factor"; type: "double" } - } - Method { name: "darker"; type: "QVariant"; isCloned: true } - Method { - name: "tint" - type: "QVariant" - Parameter { name: "factor"; type: "QVariant" } - } - Method { - name: "QQuickColorValueType" - isConstructor: true - Parameter { name: "string"; type: "QString" } - } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickColumn" - accessSemantics: "reference" - prototype: "QQuickBasePositioner" - exports: [ - "QtQuick/Column 2.0", - "QtQuick/Column 2.1", - "QtQuick/Column 2.4", - "QtQuick/Column 2.6", - "QtQuick/Column 2.7", - "QtQuick/Column 2.9", - "QtQuick/Column 2.11", - "QtQuick/Column 6.0", - "QtQuick/Column 6.2", - "QtQuick/Column 6.3", - "QtQuick/Column 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1543 - ] - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickCurve" - accessSemantics: "reference" - prototype: "QQuickPathElement" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; notify: "xChanged"; index: 0 } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; notify: "yChanged"; index: 1 } - Property { - name: "relativeX" - type: "double" - read: "relativeX" - write: "setRelativeX" - notify: "relativeXChanged" - index: 2 - } - Property { - name: "relativeY" - type: "double" - read: "relativeY" - write: "setRelativeY" - notify: "relativeYChanged" - index: 3 - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "relativeXChanged" } - Signal { name: "relativeYChanged" } - } - Component { - file: "private/qquickvalidator_p.h" - name: "QQuickDoubleValidator" - accessSemantics: "reference" - prototype: "QDoubleValidator" - exports: [ - "QtQuick/DoubleValidator 2.0", - "QtQuick/DoubleValidator 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "locale" - type: "QString" - read: "localeName" - write: "setLocaleName" - reset: "resetLocaleName" - notify: "localeNameChanged" - index: 0 - } - Signal { name: "localeNameChanged" } - } - Component { - file: "private/qquickdrag_p.h" - name: "QQuickDrag" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/Drag 2.0", "QtQuick/Drag 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickDragAttached" - Enum { - name: "DragType" - values: ["None", "Automatic", "Internal"] - } - Enum { - name: "Axis" - values: ["XAxis", "YAxis", "XAndYAxis", "XandYAxis"] - } - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTarget" - reset: "resetTarget" - notify: "targetChanged" - index: 0 - isFinal: true - } - Property { - name: "axis" - type: "Axis" - read: "axis" - write: "setAxis" - notify: "axisChanged" - index: 1 - isFinal: true - } - Property { - name: "minimumX" - type: "double" - read: "xmin" - write: "setXmin" - notify: "minimumXChanged" - index: 2 - isFinal: true - } - Property { - name: "maximumX" - type: "double" - read: "xmax" - write: "setXmax" - notify: "maximumXChanged" - index: 3 - isFinal: true - } - Property { - name: "minimumY" - type: "double" - read: "ymin" - write: "setYmin" - notify: "minimumYChanged" - index: 4 - isFinal: true - } - Property { - name: "maximumY" - type: "double" - read: "ymax" - write: "setYmax" - notify: "maximumYChanged" - index: 5 - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "active" - notify: "activeChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "filterChildren" - type: "bool" - read: "filterChildren" - write: "setFilterChildren" - notify: "filterChildrenChanged" - index: 7 - isFinal: true - } - Property { - name: "smoothed" - type: "bool" - read: "smoothed" - write: "setSmoothed" - notify: "smoothedChanged" - index: 8 - isFinal: true - } - Property { - name: "threshold" - type: "double" - read: "threshold" - write: "setThreshold" - reset: "resetThreshold" - notify: "thresholdChanged" - index: 9 - isFinal: true - } - Signal { name: "targetChanged" } - Signal { name: "axisChanged" } - Signal { name: "minimumXChanged" } - Signal { name: "maximumXChanged" } - Signal { name: "minimumYChanged" } - Signal { name: "maximumYChanged" } - Signal { name: "activeChanged" } - Signal { name: "filterChildrenChanged" } - Signal { name: "smoothedChanged" } - Signal { name: "thresholdChanged" } - } - Component { - file: "private/qquickdrag_p.h" - name: "QQuickDragAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 0 - isFinal: true - } - Property { - name: "source" - type: "QObject" - isPointer: true - read: "source" - write: "setSource" - reset: "resetSource" - notify: "sourceChanged" - index: 1 - isFinal: true - } - Property { - name: "target" - type: "QObject" - isPointer: true - read: "target" - notify: "targetChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "hotSpot" - type: "QPointF" - read: "hotSpot" - write: "setHotSpot" - notify: "hotSpotChanged" - index: 3 - isFinal: true - } - Property { - name: "imageSource" - type: "QUrl" - read: "imageSource" - write: "setImageSource" - notify: "imageSourceChanged" - index: 4 - isFinal: true - } - Property { - name: "keys" - type: "QStringList" - read: "keys" - write: "setKeys" - notify: "keysChanged" - index: 5 - isFinal: true - } - Property { - name: "mimeData" - type: "QVariantMap" - read: "mimeData" - write: "setMimeData" - notify: "mimeDataChanged" - index: 6 - isFinal: true - } - Property { - name: "supportedActions" - type: "Qt::DropActions" - read: "supportedActions" - write: "setSupportedActions" - notify: "supportedActionsChanged" - index: 7 - isFinal: true - } - Property { - name: "proposedAction" - type: "Qt::DropAction" - read: "proposedAction" - write: "setProposedAction" - notify: "proposedActionChanged" - index: 8 - isFinal: true - } - Property { - name: "dragType" - type: "QQuickDrag::DragType" - read: "dragType" - write: "setDragType" - notify: "dragTypeChanged" - index: 9 - isFinal: true - } - Signal { name: "dragStarted" } - Signal { - name: "dragFinished" - Parameter { name: "dropAction"; type: "Qt::DropAction" } - } - Signal { name: "activeChanged" } - Signal { name: "sourceChanged" } - Signal { name: "targetChanged" } - Signal { name: "hotSpotChanged" } - Signal { name: "imageSourceChanged" } - Signal { name: "keysChanged" } - Signal { name: "mimeDataChanged" } - Signal { name: "supportedActionsChanged" } - Signal { name: "proposedActionChanged" } - Signal { name: "dragTypeChanged" } - Method { name: "start"; isJavaScriptFunction: true } - Method { name: "startDrag"; isJavaScriptFunction: true } - Method { name: "cancel" } - Method { name: "drop"; type: "int" } - } - Component { - file: "private/qquickdragaxis_p.h" - name: "QQuickDragAxis" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/DragAxis 2.12", - "QtQuick/DragAxis 6.0", - "QtQuick/DragAxis 6.5" - ] - isCreatable: false - exportMetaObjectRevisions: [524, 1536, 1541] - Property { - name: "minimum" - type: "double" - read: "minimum" - write: "setMinimum" - notify: "minimumChanged" - index: 0 - } - Property { - name: "maximum" - type: "double" - read: "maximum" - write: "setMaximum" - notify: "maximumChanged" - index: 1 - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 2 - } - Property { - name: "activeValue" - revision: 1541 - type: "double" - read: "activeValue" - notify: "activeValueChanged" - index: 3 - isReadonly: true - } - Signal { name: "minimumChanged" } - Signal { name: "maximumChanged" } - Signal { name: "enabledChanged" } - Signal { - name: "activeValueChanged" - revision: 1541 - Parameter { name: "delta"; type: "double" } - } - } - Component { - file: "private/qquickdroparea_p.h" - name: "QQuickDragEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/DragEvent 2.0", "QtQuick/DragEvent 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Property { name: "x"; type: "double"; read: "x"; index: 0; isReadonly: true; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; index: 1; isReadonly: true; isFinal: true } - Property { - name: "source" - type: "QObject" - isPointer: true - read: "source" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "keys" - type: "QStringList" - read: "keys" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "supportedActions" - type: "Qt::DropActions" - read: "supportedActions" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "proposedAction" - type: "Qt::DropActions" - read: "proposedAction" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "action" - type: "Qt::DropAction" - read: "action" - write: "setAction" - reset: "resetAction" - index: 6 - isFinal: true - } - Property { - name: "accepted" - type: "bool" - read: "accepted" - write: "setAccepted" - index: 7 - isFinal: true - } - Property { - name: "hasColor" - type: "bool" - read: "hasColor" - index: 8 - isReadonly: true - isFinal: true - } - Property { name: "hasHtml"; type: "bool"; read: "hasHtml"; index: 9; isReadonly: true; isFinal: true } - Property { - name: "hasText" - type: "bool" - read: "hasText" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "hasUrls" - type: "bool" - read: "hasUrls" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "colorData" - type: "QVariant" - read: "colorData" - index: 12 - isReadonly: true - isFinal: true - } - Property { name: "html"; type: "QString"; read: "html"; index: 13; isReadonly: true; isFinal: true } - Property { name: "text"; type: "QString"; read: "text"; index: 14; isReadonly: true; isFinal: true } - Property { - name: "urls" - type: "QUrl" - isList: true - read: "urls" - index: 15 - isReadonly: true - isFinal: true - } - Property { - name: "formats" - type: "QStringList" - read: "formats" - index: 16 - isReadonly: true - isFinal: true - } - Method { - name: "getDataAsString" - type: "QString" - Parameter { name: "format"; type: "QString" } - } - Method { - name: "getDataAsArrayBuffer" - type: "QByteArray" - Parameter { name: "format"; type: "QString" } - } - Method { name: "acceptProposedAction" } - Method { name: "accept" } - Method { - name: "accept" - Parameter { name: "action"; type: "Qt::DropAction" } - } - } - Component { - file: "private/qquickdraghandler_p.h" - name: "QQuickDragHandler" - accessSemantics: "reference" - prototype: "QQuickMultiPointHandler" - exports: [ - "QtQuick/DragHandler 2.12", - "QtQuick/DragHandler 2.14", - "QtQuick/DragHandler 2.15", - "QtQuick/DragHandler 6.0", - "QtQuick/DragHandler 6.2", - "QtQuick/DragHandler 6.3" - ] - exportMetaObjectRevisions: [524, 526, 527, 1536, 1538, 1539] - Enum { - name: "SnapMode" - values: [ - "NoSnap", - "SnapAuto", - "SnapIfPressedOutsideTarget", - "SnapAlways" - ] - } - Property { - name: "xAxis" - type: "QQuickDragAxis" - isPointer: true - read: "xAxis" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "yAxis" - type: "QQuickDragAxis" - isPointer: true - read: "yAxis" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "translation" - type: "QVector2D" - read: "translation" - notify: "translationChanged" - index: 2 - isReadonly: true - } - Property { - name: "activeTranslation" - revision: 1538 - type: "QVector2D" - read: "activeTranslation" - notify: "translationChanged" - index: 3 - isReadonly: true - } - Property { - name: "persistentTranslation" - revision: 1538 - type: "QVector2D" - read: "persistentTranslation" - write: "setPersistentTranslation" - notify: "translationChanged" - index: 4 - } - Property { - name: "snapMode" - revision: 526 - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 5 - } - Signal { - name: "translationChanged" - Parameter { name: "delta"; type: "QVector2D" } - } - Signal { name: "snapModeChanged"; revision: 526 } - } - Component { - file: "private/qquickdroparea_p.h" - name: "QQuickDropArea" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/DropArea 2.0", - "QtQuick/DropArea 2.1", - "QtQuick/DropArea 2.4", - "QtQuick/DropArea 2.7", - "QtQuick/DropArea 2.11", - "QtQuick/DropArea 6.0", - "QtQuick/DropArea 6.3", - "QtQuick/DropArea 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "containsDrag" - type: "bool" - read: "containsDrag" - notify: "containsDragChanged" - index: 0 - isReadonly: true - } - Property { - name: "keys" - type: "QStringList" - read: "keys" - write: "setKeys" - notify: "keysChanged" - index: 1 - } - Property { - name: "drag" - type: "QQuickDropAreaDrag" - isPointer: true - read: "drag" - index: 2 - isReadonly: true - isConstant: true - } - Signal { name: "containsDragChanged" } - Signal { name: "keysChanged" } - Signal { name: "sourceChanged" } - Signal { - name: "entered" - Parameter { name: "drag"; type: "QQuickDragEvent"; isPointer: true } - } - Signal { name: "exited" } - Signal { - name: "positionChanged" - Parameter { name: "drag"; type: "QQuickDragEvent"; isPointer: true } - } - Signal { - name: "dropped" - Parameter { name: "drop"; type: "QQuickDragEvent"; isPointer: true } - } - } - Component { - file: "private/qquickdroparea_p.h" - name: "QQuickDropAreaDrag" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "x" - type: "double" - read: "x" - notify: "positionChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "y" - type: "double" - read: "y" - notify: "positionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "source" - type: "QObject" - isPointer: true - read: "source" - notify: "sourceChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "positionChanged" } - Signal { name: "sourceChanged" } - } - Component { - file: "private/qquickitem_p.h" - name: "QQuickEnterKeyAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/EnterKey 2.6", "QtQuick/EnterKey 6.0"] - isCreatable: false - exportMetaObjectRevisions: [518, 1536] - attachedType: "QQuickEnterKeyAttached" - Property { - name: "type" - type: "Qt::EnterKeyType" - read: "type" - write: "setType" - notify: "typeChanged" - index: 0 - isFinal: true - } - Signal { name: "typeChanged" } - } - Component { - file: "private/qquickflickable_p.h" - name: "QQuickFlickable" - accessSemantics: "reference" - defaultProperty: "flickableData" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/Flickable 2.0", - "QtQuick/Flickable 2.1", - "QtQuick/Flickable 2.4", - "QtQuick/Flickable 2.7", - "QtQuick/Flickable 2.9", - "QtQuick/Flickable 2.10", - "QtQuick/Flickable 2.11", - "QtQuick/Flickable 2.12", - "QtQuick/Flickable 6.0", - "QtQuick/Flickable 6.3", - "QtQuick/Flickable 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 519, - 521, - 522, - 523, - 524, - 1536, - 1539, - 1543 - ] - Enum { - name: "BoundsBehavior" - alias: "BoundsBehaviorFlag" - isFlag: true - values: [ - "StopAtBounds", - "DragOverBounds", - "OvershootBounds", - "DragAndOvershootBounds" - ] - } - Enum { - name: "BoundsMovement" - values: ["FollowBoundsBehavior"] - } - Enum { - name: "FlickableDirection" - values: [ - "AutoFlickDirection", - "HorizontalFlick", - "VerticalFlick", - "HorizontalAndVerticalFlick", - "AutoFlickIfNeeded" - ] - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - notify: "contentWidthChanged" - index: 0 - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - notify: "contentHeightChanged" - index: 1 - } - Property { - name: "contentX" - type: "double" - read: "contentX" - write: "setContentX" - notify: "contentXChanged" - index: 2 - } - Property { - name: "contentY" - type: "double" - read: "contentY" - write: "setContentY" - notify: "contentYChanged" - index: 3 - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - index: 4 - isReadonly: true - isConstant: true - } - Property { - name: "topMargin" - type: "double" - read: "topMargin" - write: "setTopMargin" - notify: "topMarginChanged" - index: 5 - } - Property { - name: "bottomMargin" - type: "double" - read: "bottomMargin" - write: "setBottomMargin" - notify: "bottomMarginChanged" - index: 6 - } - Property { - name: "originY" - type: "double" - read: "originY" - notify: "originYChanged" - index: 7 - isReadonly: true - } - Property { - name: "leftMargin" - type: "double" - read: "leftMargin" - write: "setLeftMargin" - notify: "leftMarginChanged" - index: 8 - } - Property { - name: "rightMargin" - type: "double" - read: "rightMargin" - write: "setRightMargin" - notify: "rightMarginChanged" - index: 9 - } - Property { - name: "originX" - type: "double" - read: "originX" - notify: "originXChanged" - index: 10 - isReadonly: true - } - Property { - name: "horizontalVelocity" - type: "double" - read: "horizontalVelocity" - notify: "horizontalVelocityChanged" - index: 11 - isReadonly: true - } - Property { - name: "verticalVelocity" - type: "double" - read: "verticalVelocity" - notify: "verticalVelocityChanged" - index: 12 - isReadonly: true - } - Property { - name: "boundsBehavior" - type: "BoundsBehavior" - read: "boundsBehavior" - write: "setBoundsBehavior" - notify: "boundsBehaviorChanged" - index: 13 - } - Property { - name: "boundsMovement" - revision: 522 - type: "BoundsMovement" - read: "boundsMovement" - write: "setBoundsMovement" - notify: "boundsMovementChanged" - index: 14 - } - Property { - name: "rebound" - type: "QQuickTransition" - isPointer: true - read: "rebound" - write: "setRebound" - notify: "reboundChanged" - index: 15 - } - Property { - name: "maximumFlickVelocity" - type: "double" - read: "maximumFlickVelocity" - write: "setMaximumFlickVelocity" - notify: "maximumFlickVelocityChanged" - index: 16 - } - Property { - name: "flickDeceleration" - type: "double" - read: "flickDeceleration" - write: "setFlickDeceleration" - notify: "flickDecelerationChanged" - index: 17 - } - Property { - name: "moving" - type: "bool" - read: "isMoving" - notify: "movingChanged" - index: 18 - isReadonly: true - } - Property { - name: "movingHorizontally" - type: "bool" - read: "isMovingHorizontally" - notify: "movingHorizontallyChanged" - index: 19 - isReadonly: true - } - Property { - name: "movingVertically" - type: "bool" - read: "isMovingVertically" - notify: "movingVerticallyChanged" - index: 20 - isReadonly: true - } - Property { - name: "flicking" - type: "bool" - read: "isFlicking" - notify: "flickingChanged" - index: 21 - isReadonly: true - } - Property { - name: "flickingHorizontally" - type: "bool" - read: "isFlickingHorizontally" - notify: "flickingHorizontallyChanged" - index: 22 - isReadonly: true - } - Property { - name: "flickingVertically" - type: "bool" - read: "isFlickingVertically" - notify: "flickingVerticallyChanged" - index: 23 - isReadonly: true - } - Property { - name: "dragging" - type: "bool" - read: "isDragging" - notify: "draggingChanged" - index: 24 - isReadonly: true - } - Property { - name: "draggingHorizontally" - type: "bool" - read: "isDraggingHorizontally" - notify: "draggingHorizontallyChanged" - index: 25 - isReadonly: true - } - Property { - name: "draggingVertically" - type: "bool" - read: "isDraggingVertically" - notify: "draggingVerticallyChanged" - index: 26 - isReadonly: true - } - Property { - name: "flickableDirection" - type: "FlickableDirection" - read: "flickableDirection" - write: "setFlickableDirection" - notify: "flickableDirectionChanged" - index: 27 - } - Property { - name: "interactive" - type: "bool" - read: "isInteractive" - write: "setInteractive" - notify: "interactiveChanged" - index: 28 - } - Property { - name: "pressDelay" - type: "int" - read: "pressDelay" - write: "setPressDelay" - notify: "pressDelayChanged" - index: 29 - } - Property { - name: "atXEnd" - type: "bool" - read: "isAtXEnd" - notify: "atXEndChanged" - index: 30 - isReadonly: true - } - Property { - name: "atYEnd" - type: "bool" - read: "isAtYEnd" - notify: "atYEndChanged" - index: 31 - isReadonly: true - } - Property { - name: "atXBeginning" - type: "bool" - read: "isAtXBeginning" - notify: "atXBeginningChanged" - index: 32 - isReadonly: true - } - Property { - name: "atYBeginning" - type: "bool" - read: "isAtYBeginning" - notify: "atYBeginningChanged" - index: 33 - isReadonly: true - } - Property { - name: "visibleArea" - type: "QQuickFlickableVisibleArea" - isPointer: true - read: "visibleArea" - index: 34 - isReadonly: true - isConstant: true - } - Property { - name: "pixelAligned" - type: "bool" - read: "pixelAligned" - write: "setPixelAligned" - notify: "pixelAlignedChanged" - index: 35 - } - Property { - name: "synchronousDrag" - revision: 524 - type: "bool" - read: "synchronousDrag" - write: "setSynchronousDrag" - notify: "synchronousDragChanged" - index: 36 - } - Property { - name: "horizontalOvershoot" - revision: 521 - type: "double" - read: "horizontalOvershoot" - notify: "horizontalOvershootChanged" - index: 37 - isReadonly: true - } - Property { - name: "verticalOvershoot" - revision: 521 - type: "double" - read: "verticalOvershoot" - notify: "verticalOvershootChanged" - index: 38 - isReadonly: true - } - Property { - name: "flickableData" - type: "QObject" - isList: true - read: "flickableData" - index: 39 - isReadonly: true - } - Property { - name: "flickableChildren" - type: "QQuickItem" - isList: true - read: "flickableChildren" - index: 40 - isReadonly: true - } - Signal { name: "contentWidthChanged" } - Signal { name: "contentHeightChanged" } - Signal { name: "contentXChanged" } - Signal { name: "contentYChanged" } - Signal { name: "topMarginChanged" } - Signal { name: "bottomMarginChanged" } - Signal { name: "leftMarginChanged" } - Signal { name: "rightMarginChanged" } - Signal { name: "originYChanged" } - Signal { name: "originXChanged" } - Signal { name: "movingChanged" } - Signal { name: "movingHorizontallyChanged" } - Signal { name: "movingVerticallyChanged" } - Signal { name: "flickingChanged" } - Signal { name: "flickingHorizontallyChanged" } - Signal { name: "flickingVerticallyChanged" } - Signal { name: "draggingChanged" } - Signal { name: "draggingHorizontallyChanged" } - Signal { name: "draggingVerticallyChanged" } - Signal { name: "horizontalVelocityChanged" } - Signal { name: "verticalVelocityChanged" } - Signal { name: "isAtBoundaryChanged" } - Signal { name: "flickableDirectionChanged" } - Signal { name: "interactiveChanged" } - Signal { name: "boundsBehaviorChanged" } - Signal { name: "boundsMovementChanged"; revision: 522 } - Signal { name: "reboundChanged" } - Signal { name: "maximumFlickVelocityChanged" } - Signal { name: "flickDecelerationChanged" } - Signal { name: "pressDelayChanged" } - Signal { name: "movementStarted" } - Signal { name: "movementEnded" } - Signal { name: "flickStarted" } - Signal { name: "flickEnded" } - Signal { name: "dragStarted" } - Signal { name: "dragEnded" } - Signal { name: "pixelAlignedChanged" } - Signal { name: "synchronousDragChanged"; revision: 524 } - Signal { name: "horizontalOvershootChanged"; revision: 521 } - Signal { name: "verticalOvershootChanged"; revision: 521 } - Signal { name: "atXEndChanged" } - Signal { name: "atYEndChanged" } - Signal { name: "atXBeginningChanged" } - Signal { name: "atYBeginningChanged" } - Method { name: "movementStarting" } - Method { name: "movementEnding" } - Method { - name: "movementEnding" - Parameter { name: "hMovementEnding"; type: "bool" } - Parameter { name: "vMovementEnding"; type: "bool" } - } - Method { name: "velocityTimelineCompleted" } - Method { name: "timelineCompleted" } - Method { - name: "resizeContent" - Parameter { name: "w"; type: "double" } - Parameter { name: "h"; type: "double" } - Parameter { name: "center"; type: "QPointF" } - } - Method { name: "returnToBounds" } - Method { - name: "flick" - Parameter { name: "xVelocity"; type: "double" } - Parameter { name: "yVelocity"; type: "double" } - } - Method { name: "cancelFlick" } - } - Component { - file: "private/qquickflickable_p_p.h" - name: "QQuickFlickableVisibleArea" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "xPosition" - type: "double" - read: "xPosition" - notify: "xPositionChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "yPosition" - type: "double" - read: "yPosition" - notify: "yPositionChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "widthRatio" - type: "double" - read: "widthRatio" - notify: "widthRatioChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "heightRatio" - type: "double" - read: "heightRatio" - notify: "heightRatioChanged" - index: 3 - isReadonly: true - isFinal: true - } - Signal { - name: "xPositionChanged" - Parameter { name: "xPosition"; type: "double" } - } - Signal { - name: "yPositionChanged" - Parameter { name: "yPosition"; type: "double" } - } - Signal { - name: "widthRatioChanged" - Parameter { name: "widthRatio"; type: "double" } - } - Signal { - name: "heightRatioChanged" - Parameter { name: "heightRatio"; type: "double" } - } - } - Component { - file: "private/qquickflipable_p.h" - name: "QQuickFlipable" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/Flipable 2.0", - "QtQuick/Flipable 2.1", - "QtQuick/Flipable 2.4", - "QtQuick/Flipable 2.7", - "QtQuick/Flipable 2.11", - "QtQuick/Flipable 6.0", - "QtQuick/Flipable 6.3", - "QtQuick/Flipable 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Side" - values: ["Front", "Back"] - } - Property { - name: "front" - type: "QQuickItem" - isPointer: true - read: "front" - write: "setFront" - notify: "frontChanged" - index: 0 - } - Property { - name: "back" - type: "QQuickItem" - isPointer: true - read: "back" - write: "setBack" - notify: "backChanged" - index: 1 - } - Property { - name: "side" - type: "Side" - read: "side" - notify: "sideChanged" - index: 2 - isReadonly: true - } - Signal { name: "frontChanged" } - Signal { name: "backChanged" } - Signal { name: "sideChanged" } - Method { name: "retransformBack" } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickFlow" - accessSemantics: "reference" - prototype: "QQuickBasePositioner" - exports: [ - "QtQuick/Flow 2.0", - "QtQuick/Flow 2.1", - "QtQuick/Flow 2.4", - "QtQuick/Flow 2.6", - "QtQuick/Flow 2.7", - "QtQuick/Flow 2.9", - "QtQuick/Flow 2.11", - "QtQuick/Flow 6.0", - "QtQuick/Flow 6.2", - "QtQuick/Flow 6.3", - "QtQuick/Flow 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "Flow" - values: ["LeftToRight", "TopToBottom"] - } - Property { - name: "flow" - type: "Flow" - read: "flow" - write: "setFlow" - notify: "flowChanged" - index: 0 - } - Property { - name: "layoutDirection" - type: "Qt::LayoutDirection" - read: "layoutDirection" - write: "setLayoutDirection" - notify: "layoutDirectionChanged" - index: 1 - } - Property { - name: "effectiveLayoutDirection" - type: "Qt::LayoutDirection" - read: "effectiveLayoutDirection" - notify: "effectiveLayoutDirectionChanged" - index: 2 - isReadonly: true - } - Signal { name: "flowChanged" } - Signal { name: "layoutDirectionChanged" } - Signal { name: "effectiveLayoutDirectionChanged" } - } - Component { - file: "private/qquickfocusscope_p.h" - name: "QQuickFocusScope" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/FocusScope 2.0", - "QtQuick/FocusScope 2.1", - "QtQuick/FocusScope 2.4", - "QtQuick/FocusScope 2.7", - "QtQuick/FocusScope 2.11", - "QtQuick/FocusScope 6.0", - "QtQuick/FocusScope 6.3", - "QtQuick/FocusScope 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickFontEnums" - accessSemantics: "none" - exports: ["QtQuick/Font 2.0", "QtQuick/Font 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "FontWeight" - values: [ - "Thin", - "ExtraLight", - "Light", - "Normal", - "Medium", - "DemiBold", - "Bold", - "ExtraBold", - "Black" - ] - } - Enum { - name: "Capitalization" - values: [ - "MixedCase", - "AllUppercase", - "AllLowercase", - "SmallCaps", - "Capitalize" - ] - } - Enum { - name: "HintingPreference" - values: [ - "PreferDefaultHinting", - "PreferNoHinting", - "PreferVerticalHinting", - "PreferFullHinting" - ] - } - } - Component { - file: "private/qquickfontloader_p.h" - name: "QQuickFontLoader" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/FontLoader 2.0", "QtQuick/FontLoader 6.0"] - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "name" - type: "QString" - read: "name" - notify: "nameChanged" - index: 1 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 2 - isReadonly: true - } - Property { - name: "font" - type: "QFont" - read: "font" - notify: "fontChanged" - index: 3 - isReadonly: true - } - Signal { name: "sourceChanged" } - Signal { name: "nameChanged" } - Signal { name: "fontChanged" } - Signal { name: "statusChanged" } - Method { - name: "updateFontInfo" - Parameter { type: "int" } - } - } - Component { - file: "private/qquickfontmetrics_p.h" - name: "QQuickFontMetrics" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/FontMetrics 2.4", "QtQuick/FontMetrics 6.0"] - exportMetaObjectRevisions: [516, 1536] - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 0 - } - Property { - name: "ascent" - type: "double" - read: "ascent" - notify: "fontChanged" - index: 1 - isReadonly: true - } - Property { - name: "descent" - type: "double" - read: "descent" - notify: "fontChanged" - index: 2 - isReadonly: true - } - Property { - name: "height" - type: "double" - read: "height" - notify: "fontChanged" - index: 3 - isReadonly: true - } - Property { - name: "leading" - type: "double" - read: "leading" - notify: "fontChanged" - index: 4 - isReadonly: true - } - Property { - name: "lineSpacing" - type: "double" - read: "lineSpacing" - notify: "fontChanged" - index: 5 - isReadonly: true - } - Property { - name: "minimumLeftBearing" - type: "double" - read: "minimumLeftBearing" - notify: "fontChanged" - index: 6 - isReadonly: true - } - Property { - name: "minimumRightBearing" - type: "double" - read: "minimumRightBearing" - notify: "fontChanged" - index: 7 - isReadonly: true - } - Property { - name: "maximumCharacterWidth" - type: "double" - read: "maximumCharacterWidth" - notify: "fontChanged" - index: 8 - isReadonly: true - } - Property { - name: "xHeight" - type: "double" - read: "xHeight" - notify: "fontChanged" - index: 9 - isReadonly: true - } - Property { - name: "averageCharacterWidth" - type: "double" - read: "averageCharacterWidth" - notify: "fontChanged" - index: 10 - isReadonly: true - } - Property { - name: "underlinePosition" - type: "double" - read: "underlinePosition" - notify: "fontChanged" - index: 11 - isReadonly: true - } - Property { - name: "overlinePosition" - type: "double" - read: "overlinePosition" - notify: "fontChanged" - index: 12 - isReadonly: true - } - Property { - name: "strikeOutPosition" - type: "double" - read: "strikeOutPosition" - notify: "fontChanged" - index: 13 - isReadonly: true - } - Property { - name: "lineWidth" - type: "double" - read: "lineWidth" - notify: "fontChanged" - index: 14 - isReadonly: true - } - Signal { - name: "fontChanged" - Parameter { name: "font"; type: "QFont" } - } - Method { - name: "advanceWidth" - type: "double" - Parameter { name: "text"; type: "QString" } - } - Method { - name: "boundingRect" - type: "QRectF" - Parameter { name: "text"; type: "QString" } - } - Method { - name: "tightBoundingRect" - type: "QRectF" - Parameter { name: "text"; type: "QString" } - } - Method { - name: "elidedText" - type: "QString" - Parameter { name: "text"; type: "QString" } - Parameter { name: "mode"; type: "Qt::TextElideMode" } - Parameter { name: "width"; type: "double" } - Parameter { name: "flags"; type: "int" } - } - Method { - name: "elidedText" - type: "QString" - isCloned: true - Parameter { name: "text"; type: "QString" } - Parameter { name: "mode"; type: "Qt::TextElideMode" } - Parameter { name: "width"; type: "double" } - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QFont" - accessSemantics: "value" - extension: "QQuickFontValueType" - exports: ["QtQuick/font 2.0", "QtQuick/font 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "StyleHint" - values: [ - "Helvetica", - "SansSerif", - "Times", - "Serif", - "Courier", - "TypeWriter", - "OldEnglish", - "Decorative", - "System", - "AnyStyle", - "Cursive", - "Monospace", - "Fantasy" - ] - } - Enum { - name: "StyleStrategy" - values: [ - "PreferDefault", - "PreferBitmap", - "PreferDevice", - "PreferOutline", - "ForceOutline", - "PreferMatch", - "PreferQuality", - "PreferAntialias", - "NoAntialias", - "NoSubpixelAntialias", - "PreferNoShaping", - "NoFontMerging" - ] - } - Enum { - name: "HintingPreference" - values: [ - "PreferDefaultHinting", - "PreferNoHinting", - "PreferVerticalHinting", - "PreferFullHinting" - ] - } - Enum { - name: "Weight" - values: [ - "Thin", - "ExtraLight", - "Light", - "Normal", - "Medium", - "DemiBold", - "Bold", - "ExtraBold", - "Black" - ] - } - Enum { - name: "Style" - values: ["StyleNormal", "StyleItalic", "StyleOblique"] - } - Enum { - name: "Stretch" - values: [ - "AnyStretch", - "UltraCondensed", - "ExtraCondensed", - "Condensed", - "SemiCondensed", - "Unstretched", - "SemiExpanded", - "Expanded", - "ExtraExpanded", - "UltraExpanded" - ] - } - Enum { - name: "Capitalization" - values: [ - "MixedCase", - "AllUppercase", - "AllLowercase", - "SmallCaps", - "Capitalize" - ] - } - Enum { - name: "SpacingType" - values: ["PercentageSpacing", "AbsoluteSpacing"] - } - Enum { - name: "ResolveProperties" - values: [ - "NoPropertiesResolved", - "FamilyResolved", - "SizeResolved", - "StyleHintResolved", - "StyleStrategyResolved", - "WeightResolved", - "StyleResolved", - "UnderlineResolved", - "OverlineResolved", - "StrikeOutResolved", - "FixedPitchResolved", - "StretchResolved", - "KerningResolved", - "CapitalizationResolved", - "LetterSpacingResolved", - "WordSpacingResolved", - "HintingPreferenceResolved", - "StyleNameResolved", - "FamiliesResolved", - "FeaturesResolved", - "VariableAxesResolved", - "AllPropertiesResolved" - ] - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickFontValueType" - accessSemantics: "value" - Property { - name: "family" - type: "QString" - read: "family" - write: "setFamily" - index: 0 - isFinal: true - } - Property { - name: "styleName" - type: "QString" - read: "styleName" - write: "setStyleName" - index: 1 - isFinal: true - } - Property { name: "bold"; type: "bool"; read: "bold"; write: "setBold"; index: 2; isFinal: true } - Property { name: "weight"; type: "int"; read: "weight"; write: "setWeight"; index: 3; isFinal: true } - Property { name: "italic"; type: "bool"; read: "italic"; write: "setItalic"; index: 4; isFinal: true } - Property { - name: "underline" - type: "bool" - read: "underline" - write: "setUnderline" - index: 5 - isFinal: true - } - Property { - name: "overline" - type: "bool" - read: "overline" - write: "setOverline" - index: 6 - isFinal: true - } - Property { - name: "strikeout" - type: "bool" - read: "strikeout" - write: "setStrikeout" - index: 7 - isFinal: true - } - Property { - name: "pointSize" - type: "double" - read: "pointSize" - write: "setPointSize" - index: 8 - isFinal: true - } - Property { - name: "pixelSize" - type: "int" - read: "pixelSize" - write: "setPixelSize" - index: 9 - isFinal: true - } - Property { - name: "capitalization" - type: "QQuickFontEnums::Capitalization" - read: "capitalization" - write: "setCapitalization" - index: 10 - isFinal: true - } - Property { - name: "letterSpacing" - type: "double" - read: "letterSpacing" - write: "setLetterSpacing" - index: 11 - isFinal: true - } - Property { - name: "wordSpacing" - type: "double" - read: "wordSpacing" - write: "setWordSpacing" - index: 12 - isFinal: true - } - Property { - name: "hintingPreference" - type: "QQuickFontEnums::HintingPreference" - read: "hintingPreference" - write: "setHintingPreference" - index: 13 - isFinal: true - } - Property { - name: "kerning" - type: "bool" - read: "kerning" - write: "setKerning" - index: 14 - isFinal: true - } - Property { - name: "preferShaping" - type: "bool" - read: "preferShaping" - write: "setPreferShaping" - index: 15 - isFinal: true - } - Property { - name: "features" - type: "QVariantMap" - read: "features" - write: "setFeatures" - index: 16 - isFinal: true - } - Property { - name: "variableAxes" - type: "QVariantMap" - read: "variableAxes" - write: "setVariableAxes" - index: 17 - isFinal: true - } - Method { name: "toString"; type: "QString" } - } - Component { - file: "private/qquickframeanimation_p.h" - name: "QQuickFrameAnimation" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick/FrameAnimation 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "paused" - type: "bool" - read: "isPaused" - write: "setPaused" - notify: "pausedChanged" - index: 1 - } - Property { - name: "currentFrame" - type: "int" - read: "currentFrame" - notify: "currentFrameChanged" - index: 2 - isReadonly: true - } - Property { - name: "frameTime" - type: "double" - read: "frameTime" - notify: "frameTimeChanged" - index: 3 - isReadonly: true - } - Property { - name: "smoothFrameTime" - type: "double" - read: "smoothFrameTime" - notify: "smoothFrameTimeChanged" - index: 4 - isReadonly: true - } - Property { - name: "elapsedTime" - type: "double" - read: "elapsedTime" - notify: "elapsedTimeChanged" - index: 5 - isReadonly: true - } - Signal { name: "triggered" } - Signal { name: "runningChanged" } - Signal { name: "pausedChanged" } - Signal { name: "currentFrameChanged" } - Signal { name: "frameTimeChanged" } - Signal { name: "smoothFrameTimeChanged" } - Signal { name: "elapsedTimeChanged" } - Method { name: "start" } - Method { name: "stop" } - Method { name: "restart" } - Method { name: "pause" } - Method { name: "resume" } - Method { name: "reset" } - } - Component { - file: "private/qquickmultipointtoucharea_p.h" - name: "QQuickGrabGestureEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/GestureEvent 2.0", "QtQuick/GestureEvent 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Property { - name: "touchPoints" - type: "QObject" - isList: true - read: "touchPoints" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "dragThreshold" - type: "double" - read: "dragThreshold" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Method { name: "grab" } - } - Component { - file: "private/qquickrectangle_p.h" - name: "QQuickGradient" - accessSemantics: "reference" - defaultProperty: "stops" - prototype: "QObject" - extension: "QGradient" - extensionIsNamespace: true - exports: [ - "QtQuick/Gradient 2.0", - "QtQuick/Gradient 2.12", - "QtQuick/Gradient 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Enum { - name: "Orientation" - values: ["Vertical", "Horizontal"] - } - Property { - name: "stops" - type: "QQuickGradientStop" - isList: true - read: "stops" - index: 0 - isReadonly: true - } - Property { - name: "orientation" - revision: 524 - type: "Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 1 - } - Signal { name: "updated" } - Signal { name: "orientationChanged" } - } - Component { - file: "private/qquickrectangle_p.h" - name: "QQuickGradientStop" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/GradientStop 2.0", "QtQuick/GradientStop 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { name: "position"; type: "double"; read: "position"; write: "setPosition"; index: 0 } - Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 1 } - } - Component { - file: "private/qquickgraphicsinfo_p.h" - name: "QQuickGraphicsInfo" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/GraphicsInfo 2.8", "QtQuick/GraphicsInfo 6.0"] - isCreatable: false - exportMetaObjectRevisions: [520, 1536] - attachedType: "QQuickGraphicsInfo" - Enum { - name: "GraphicsApi" - values: [ - "Unknown", - "Software", - "OpenVG", - "OpenGL", - "Direct3D11", - "Vulkan", - "Metal", - "Null", - "Direct3D12", - "OpenGLRhi", - "Direct3D11Rhi", - "VulkanRhi", - "MetalRhi", - "NullRhi" - ] - } - Enum { - name: "ShaderType" - values: ["UnknownShadingLanguage", "GLSL", "HLSL", "RhiShader"] - } - Enum { - name: "ShaderCompilationType" - values: ["RuntimeCompilation", "OfflineCompilation"] - } - Enum { - name: "ShaderSourceType" - values: [ - "ShaderSourceString", - "ShaderSourceFile", - "ShaderByteCode" - ] - } - Enum { - name: "OpenGLContextProfile" - values: [ - "OpenGLNoProfile", - "OpenGLCoreProfile", - "OpenGLCompatibilityProfile" - ] - } - Enum { - name: "RenderableType" - values: [ - "SurfaceFormatUnspecified", - "SurfaceFormatOpenGL", - "SurfaceFormatOpenGLES" - ] - } - Property { - name: "api" - type: "GraphicsApi" - read: "api" - notify: "apiChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "shaderType" - type: "ShaderType" - read: "shaderType" - notify: "shaderTypeChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "shaderCompilationType" - type: "ShaderCompilationType" - read: "shaderCompilationType" - notify: "shaderCompilationTypeChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "shaderSourceType" - type: "ShaderSourceType" - read: "shaderSourceType" - notify: "shaderSourceTypeChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "majorVersion" - type: "int" - read: "majorVersion" - notify: "majorVersionChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "minorVersion" - type: "int" - read: "minorVersion" - notify: "minorVersionChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "profile" - type: "OpenGLContextProfile" - read: "profile" - notify: "profileChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "renderableType" - type: "RenderableType" - read: "renderableType" - notify: "renderableTypeChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { name: "apiChanged" } - Signal { name: "shaderTypeChanged" } - Signal { name: "shaderCompilationTypeChanged" } - Signal { name: "shaderSourceTypeChanged" } - Signal { name: "majorVersionChanged" } - Signal { name: "minorVersionChanged" } - Signal { name: "profileChanged" } - Signal { name: "renderableTypeChanged" } - Method { name: "updateInfo" } - Method { - name: "setWindow" - Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } - } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickGrid" - accessSemantics: "reference" - prototype: "QQuickBasePositioner" - exports: [ - "QtQuick/Grid 2.0", - "QtQuick/Grid 2.1", - "QtQuick/Grid 2.4", - "QtQuick/Grid 2.6", - "QtQuick/Grid 2.7", - "QtQuick/Grid 2.9", - "QtQuick/Grid 2.11", - "QtQuick/Grid 6.0", - "QtQuick/Grid 6.2", - "QtQuick/Grid 6.3", - "QtQuick/Grid 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "Flow" - values: ["LeftToRight", "TopToBottom"] - } - Enum { - name: "HAlignment" - values: ["AlignLeft", "AlignRight", "AlignHCenter"] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Property { - name: "rows" - type: "int" - read: "rows" - write: "setRows" - notify: "rowsChanged" - index: 0 - } - Property { - name: "columns" - type: "int" - read: "columns" - write: "setColumns" - notify: "columnsChanged" - index: 1 - } - Property { - name: "rowSpacing" - type: "double" - read: "rowSpacing" - write: "setRowSpacing" - reset: "resetRowSpacing" - notify: "rowSpacingChanged" - index: 2 - } - Property { - name: "columnSpacing" - type: "double" - read: "columnSpacing" - write: "setColumnSpacing" - reset: "resetColumnSpacing" - notify: "columnSpacingChanged" - index: 3 - } - Property { - name: "flow" - type: "Flow" - read: "flow" - write: "setFlow" - notify: "flowChanged" - index: 4 - } - Property { - name: "layoutDirection" - type: "Qt::LayoutDirection" - read: "layoutDirection" - write: "setLayoutDirection" - notify: "layoutDirectionChanged" - index: 5 - } - Property { - name: "effectiveLayoutDirection" - type: "Qt::LayoutDirection" - read: "effectiveLayoutDirection" - notify: "effectiveLayoutDirectionChanged" - index: 6 - isReadonly: true - } - Property { - name: "horizontalItemAlignment" - revision: 513 - type: "HAlignment" - read: "hItemAlign" - write: "setHItemAlign" - notify: "horizontalAlignmentChanged" - index: 7 - } - Property { - name: "effectiveHorizontalItemAlignment" - revision: 513 - type: "HAlignment" - read: "effectiveHAlign" - notify: "effectiveHorizontalAlignmentChanged" - index: 8 - isReadonly: true - } - Property { - name: "verticalItemAlignment" - revision: 513 - type: "VAlignment" - read: "vItemAlign" - write: "setVItemAlign" - notify: "verticalAlignmentChanged" - index: 9 - } - Signal { name: "rowsChanged" } - Signal { name: "columnsChanged" } - Signal { name: "flowChanged" } - Signal { name: "layoutDirectionChanged" } - Signal { name: "effectiveLayoutDirectionChanged" } - Signal { name: "rowSpacingChanged" } - Signal { name: "columnSpacingChanged" } - Signal { - name: "horizontalAlignmentChanged" - revision: 513 - Parameter { name: "alignment"; type: "HAlignment" } - } - Signal { - name: "effectiveHorizontalAlignmentChanged" - revision: 513 - Parameter { name: "alignment"; type: "HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - revision: 513 - Parameter { name: "alignment"; type: "VAlignment" } - } - } - Component { - file: "private/qquickshadereffectmesh_p.h" - name: "QQuickGridMesh" - accessSemantics: "reference" - prototype: "QQuickShaderEffectMesh" - exports: ["QtQuick/GridMesh 2.0", "QtQuick/GridMesh 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "resolution" - type: "QSize" - read: "resolution" - write: "setResolution" - notify: "resolutionChanged" - index: 0 - } - Signal { name: "resolutionChanged" } - } - Component { - file: "private/qquickgridview_p.h" - name: "QQuickGridView" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickItemView" - exports: [ - "QtQuick/GridView 2.0", - "QtQuick/GridView 2.1", - "QtQuick/GridView 2.3", - "QtQuick/GridView 2.4", - "QtQuick/GridView 2.7", - "QtQuick/GridView 2.9", - "QtQuick/GridView 2.10", - "QtQuick/GridView 2.11", - "QtQuick/GridView 2.12", - "QtQuick/GridView 2.13", - "QtQuick/GridView 2.15", - "QtQuick/GridView 6.0", - "QtQuick/GridView 6.3", - "QtQuick/GridView 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 519, - 521, - 522, - 523, - 524, - 525, - 527, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickGridViewAttached" - Enum { - name: "Flow" - values: ["FlowLeftToRight", "FlowTopToBottom"] - } - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapToRow", "SnapOneRow"] - } - Property { - name: "flow" - type: "Flow" - read: "flow" - write: "setFlow" - notify: "flowChanged" - index: 0 - } - Property { - name: "cellWidth" - type: "double" - read: "cellWidth" - write: "setCellWidth" - notify: "cellWidthChanged" - index: 1 - } - Property { - name: "cellHeight" - type: "double" - read: "cellHeight" - write: "setCellHeight" - notify: "cellHeightChanged" - index: 2 - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 3 - } - Signal { name: "cellWidthChanged" } - Signal { name: "cellHeightChanged" } - Signal { name: "highlightMoveDurationChanged" } - Signal { name: "flowChanged" } - Signal { name: "snapModeChanged" } - Method { name: "moveCurrentIndexUp" } - Method { name: "moveCurrentIndexDown" } - Method { name: "moveCurrentIndexLeft" } - Method { name: "moveCurrentIndexRight" } - } - Component { - file: "private/qquickgridview_p.h" - name: "QQuickGridViewAttached" - accessSemantics: "reference" - prototype: "QQuickItemViewAttached" - } - Component { - file: "private/qquickhandlerpoint_p.h" - name: "QQuickHandlerPoint" - accessSemantics: "value" - Property { name: "id"; type: "int"; read: "id"; index: 0; isReadonly: true; isFinal: true } - Property { - name: "uniqueId" - type: "QPointingDeviceUniqueId" - read: "uniqueId" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "position" - type: "QPointF" - read: "position" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "scenePosition" - type: "QPointF" - read: "scenePosition" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "pressPosition" - type: "QPointF" - read: "pressPosition" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "scenePressPosition" - type: "QPointF" - read: "scenePressPosition" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "sceneGrabPosition" - type: "QPointF" - read: "sceneGrabPosition" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "pressedButtons" - type: "Qt::MouseButtons" - read: "pressedButtons" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "modifiers" - type: "Qt::KeyboardModifiers" - read: "modifiers" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "velocity" - type: "QVector2D" - read: "velocity" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "rotation" - type: "double" - read: "rotation" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "pressure" - type: "double" - read: "pressure" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "ellipseDiameters" - type: "QSizeF" - read: "ellipseDiameters" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "device" - type: "QPointingDevice" - isPointer: true - read: "device" - index: 13 - isReadonly: true - isFinal: true - } - } - Component { - file: "private/qquickhoverhandler_p.h" - name: "QQuickHoverHandler" - accessSemantics: "reference" - prototype: "QQuickSinglePointHandler" - exports: [ - "QtQuick/HoverHandler 2.12", - "QtQuick/HoverHandler 2.15", - "QtQuick/HoverHandler 6.0", - "QtQuick/HoverHandler 6.3" - ] - exportMetaObjectRevisions: [524, 527, 1536, 1539] - Property { - name: "hovered" - type: "bool" - read: "isHovered" - notify: "hoveredChanged" - index: 0 - isReadonly: true - } - Property { - name: "blocking" - revision: 1539 - type: "bool" - read: "isBlocking" - write: "setBlocking" - notify: "blockingChanged" - index: 1 - } - Signal { name: "hoveredChanged" } - Signal { name: "blockingChanged"; revision: 1539 } - } - Component { - file: "private/qquickimage_p.h" - name: "QQuickImage" - accessSemantics: "reference" - prototype: "QQuickImageBase" - exports: [ - "QtQuick/Image 2.0", - "QtQuick/Image 2.1", - "QtQuick/Image 2.3", - "QtQuick/Image 2.4", - "QtQuick/Image 2.5", - "QtQuick/Image 2.7", - "QtQuick/Image 2.11", - "QtQuick/Image 2.14", - "QtQuick/Image 2.15", - "QtQuick/Image 6.0", - "QtQuick/Image 6.2", - "QtQuick/Image 6.3", - "QtQuick/Image 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 517, - 519, - 523, - 526, - 527, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "HAlignment" - values: ["AlignLeft", "AlignRight", "AlignHCenter"] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Enum { - name: "FillMode" - values: [ - "Stretch", - "PreserveAspectFit", - "PreserveAspectCrop", - "Tile", - "TileVertically", - "TileHorizontally", - "Pad" - ] - } - Property { - name: "fillMode" - type: "FillMode" - read: "fillMode" - write: "setFillMode" - notify: "fillModeChanged" - index: 0 - } - Property { - name: "paintedWidth" - type: "double" - read: "paintedWidth" - notify: "paintedGeometryChanged" - index: 1 - isReadonly: true - } - Property { - name: "paintedHeight" - type: "double" - read: "paintedHeight" - notify: "paintedGeometryChanged" - index: 2 - isReadonly: true - } - Property { - name: "horizontalAlignment" - type: "HAlignment" - read: "horizontalAlignment" - write: "setHorizontalAlignment" - notify: "horizontalAlignmentChanged" - index: 3 - } - Property { - name: "verticalAlignment" - type: "VAlignment" - read: "verticalAlignment" - write: "setVerticalAlignment" - notify: "verticalAlignmentChanged" - index: 4 - } - Property { - name: "sourceSize" - type: "QSize" - read: "sourceSize" - write: "setSourceSize" - reset: "resetSourceSize" - notify: "sourceSizeChanged" - index: 5 - } - Property { - name: "mipmap" - revision: 515 - type: "bool" - read: "mipmap" - write: "setMipmap" - notify: "mipmapChanged" - index: 6 - } - Property { - name: "autoTransform" - revision: 517 - type: "bool" - read: "autoTransform" - write: "setAutoTransform" - notify: "autoTransformChanged" - index: 7 - } - Property { - name: "sourceClipRect" - revision: 527 - type: "QRectF" - read: "sourceClipRect" - write: "setSourceClipRect" - reset: "resetSourceClipRect" - notify: "sourceClipRectChanged" - index: 8 - } - Signal { name: "fillModeChanged" } - Signal { name: "paintedGeometryChanged" } - Signal { - name: "horizontalAlignmentChanged" - Parameter { name: "alignment"; type: "HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - Parameter { name: "alignment"; type: "VAlignment" } - } - Signal { - name: "mipmapChanged" - revision: 515 - Parameter { type: "bool" } - } - Signal { name: "autoTransformChanged"; revision: 517 } - Method { name: "invalidateSceneGraph" } - } - Component { - file: "private/qquickimagebase_p.h" - name: "QQuickImageBase" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - exports: [ - "QtQuick/ImageBase 2.14", - "QtQuick/ImageBase 2.15", - "QtQuick/ImageBase 6.0", - "QtQuick/ImageBase 6.2", - "QtQuick/ImageBase 6.3", - "QtQuick/ImageBase 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [526, 527, 1536, 1538, 1539, 1543] - Enum { - name: "LoadPixmapOptions" - alias: "LoadPixmapOption" - isFlag: true - values: ["NoOption", "HandleDPR", "UseProviderOptions"] - } - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 0 - isReadonly: true - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 1 - } - Property { - name: "progress" - type: "double" - read: "progress" - notify: "progressChanged" - index: 2 - isReadonly: true - } - Property { - name: "asynchronous" - type: "bool" - read: "asynchronous" - write: "setAsynchronous" - notify: "asynchronousChanged" - index: 3 - } - Property { - name: "cache" - type: "bool" - read: "cache" - write: "setCache" - notify: "cacheChanged" - index: 4 - } - Property { - name: "mirror" - type: "bool" - read: "mirror" - write: "setMirror" - notify: "mirrorChanged" - index: 5 - } - Property { - name: "mirrorVertically" - revision: 1538 - type: "bool" - read: "mirrorVertically" - write: "setMirrorVertically" - notify: "mirrorVerticallyChanged" - index: 6 - } - Property { - name: "currentFrame" - revision: 526 - type: "int" - read: "currentFrame" - write: "setCurrentFrame" - notify: "currentFrameChanged" - index: 7 - } - Property { - name: "frameCount" - revision: 526 - type: "int" - read: "frameCount" - notify: "frameCountChanged" - index: 8 - isReadonly: true - } - Property { - name: "colorSpace" - revision: 527 - type: "QColorSpace" - read: "colorSpace" - write: "setColorSpace" - notify: "colorSpaceChanged" - index: 9 - } - Signal { - name: "sourceChanged" - Parameter { type: "QUrl" } - } - Signal { name: "sourceSizeChanged" } - Signal { - name: "statusChanged" - Parameter { type: "QQuickImageBase::Status" } - } - Signal { - name: "progressChanged" - Parameter { name: "progress"; type: "double" } - } - Signal { name: "asynchronousChanged" } - Signal { name: "cacheChanged" } - Signal { name: "mirrorChanged" } - Signal { name: "currentFrameChanged"; revision: 526 } - Signal { name: "frameCountChanged"; revision: 526 } - Signal { name: "sourceClipRectChanged"; revision: 527 } - Signal { name: "colorSpaceChanged"; revision: 527 } - Signal { name: "mirrorVerticallyChanged"; revision: 1538 } - Method { name: "requestFinished" } - Method { - name: "requestProgress" - Parameter { type: "qlonglong" } - Parameter { type: "qlonglong" } - } - } - Component { - file: "private/qquickimplicitsizeitem_p.h" - name: "QQuickImplicitSizeItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - notify: "implicitWidthChanged" - index: 0 - isReadonly: true - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - notify: "implicitHeightChanged" - index: 1 - isReadonly: true - } - } - Component { - file: "private/qquickinputmethod_p.h" - name: "QQuickInputMethod" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/InputMethod 6.4"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1540] - Property { - name: "cursorRectangle" - type: "QRectF" - read: "cursorRectangle" - notify: "cursorRectangleChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "anchorRectangle" - type: "QRectF" - read: "anchorRectangle" - notify: "anchorRectangleChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "keyboardRectangle" - type: "QRectF" - read: "keyboardRectangle" - notify: "keyboardRectangleChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "inputItemClipRectangle" - type: "QRectF" - read: "inputItemClipRectangle" - notify: "inputItemClipRectangleChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - notify: "visibleChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "animating" - type: "bool" - read: "isAnimating" - notify: "animatingChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - notify: "localeChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "inputDirection" - type: "Qt::LayoutDirection" - read: "inputDirection" - notify: "inputDirectionChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { name: "anchorRectangleChanged" } - Signal { name: "animatingChanged" } - Signal { name: "cursorRectangleChanged" } - Signal { - name: "inputDirectionChanged" - Parameter { name: "newDirection"; type: "Qt::LayoutDirection" } - } - Signal { name: "inputItemClipRectangleChanged" } - Signal { name: "keyboardRectangleChanged" } - Signal { name: "localeChanged" } - Signal { name: "visibleChanged" } - Method { name: "commit" } - Method { name: "hide" } - Method { - name: "invokeAction" - Parameter { name: "a"; type: "QInputMethod::Action" } - Parameter { name: "cursorPosition"; type: "int" } - } - Method { name: "reset" } - Method { name: "show" } - Method { - name: "update" - Parameter { name: "queries"; type: "Qt::InputMethodQueries" } - } - } - Component { - file: "private/qquickvalidator_p.h" - name: "QQuickIntValidator" - accessSemantics: "reference" - prototype: "QIntValidator" - exports: ["QtQuick/IntValidator 2.0", "QtQuick/IntValidator 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "locale" - type: "QString" - read: "localeName" - write: "setLocaleName" - reset: "resetLocaleName" - notify: "localeNameChanged" - index: 0 - } - Signal { name: "localeNameChanged" } - } - Component { - file: "qquickitem.h" - name: "QQuickItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick/Item 2.0", - "QtQuick/Item 2.1", - "QtQuick/Item 2.4", - "QtQuick/Item 2.7", - "QtQuick/Item 2.11", - "QtQuick/Item 6.0", - "QtQuick/Item 6.3", - "QtQuick/Item 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "Flags" - alias: "Flag" - isFlag: true - values: [ - "ItemClipsChildrenToShape", - "ItemAcceptsInputMethod", - "ItemIsFocusScope", - "ItemHasContents", - "ItemAcceptsDrops", - "ItemIsViewport", - "ItemObservesViewport" - ] - } - Enum { - name: "ItemChange" - values: [ - "ItemChildAddedChange", - "ItemChildRemovedChange", - "ItemSceneChange", - "ItemVisibleHasChanged", - "ItemParentHasChanged", - "ItemOpacityHasChanged", - "ItemActiveFocusHasChanged", - "ItemRotationHasChanged", - "ItemAntialiasingHasChanged", - "ItemDevicePixelRatioHasChanged", - "ItemEnabledHasChanged" - ] - } - Enum { - name: "TransformOrigin" - values: [ - "TopLeft", - "Top", - "TopRight", - "Left", - "Center", - "Right", - "BottomLeft", - "Bottom", - "BottomRight" - ] - } - Property { - name: "parent" - type: "QQuickItem" - isPointer: true - read: "parentItem" - write: "setParentItem" - notify: "parentChanged" - index: 0 - isFinal: true - } - Property { - name: "data" - type: "QObject" - isList: true - read: "data" - index: 1 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "resources" - type: "QObject" - isList: true - read: "resources" - index: 2 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "children" - type: "QQuickItem" - isList: true - read: "children" - notify: "childrenChanged" - index: 3 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "x" - type: "double" - bindable: "bindableX" - read: "x" - write: "setX" - notify: "xChanged" - index: 4 - isFinal: true - } - Property { - name: "y" - type: "double" - bindable: "bindableY" - read: "y" - write: "setY" - notify: "yChanged" - index: 5 - isFinal: true - } - Property { - name: "z" - type: "double" - read: "z" - write: "setZ" - notify: "zChanged" - index: 6 - isFinal: true - } - Property { - name: "width" - type: "double" - bindable: "bindableWidth" - read: "width" - write: "setWidth" - reset: "resetWidth" - notify: "widthChanged" - index: 7 - isFinal: true - } - Property { - name: "height" - type: "double" - bindable: "bindableHeight" - read: "height" - write: "setHeight" - reset: "resetHeight" - notify: "heightChanged" - index: 8 - isFinal: true - } - Property { - name: "opacity" - type: "double" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 9 - isFinal: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 10 - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 11 - isFinal: true - } - Property { - name: "palette" - revision: 1536 - type: "QQuickPalette" - isPointer: true - read: "palette" - write: "setPalette" - reset: "resetPalette" - notify: "paletteChanged" - index: 12 - privateClass: "QQuickItemPrivate" - } - Property { - name: "visibleChildren" - type: "QQuickItem" - isList: true - read: "visibleChildren" - notify: "visibleChildrenChanged" - index: 13 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "states" - type: "QQuickState" - isList: true - read: "states" - index: 14 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "transitions" - type: "QQuickTransition" - isList: true - read: "transitions" - index: 15 - privateClass: "QQuickItemPrivate" - isReadonly: true - } - Property { - name: "state" - type: "QString" - read: "state" - write: "setState" - notify: "stateChanged" - index: 16 - } - Property { - name: "childrenRect" - type: "QRectF" - read: "childrenRect" - notify: "childrenRectChanged" - index: 17 - isReadonly: true - isFinal: true - } - Property { - name: "anchors" - type: "QQuickAnchors" - isPointer: true - read: "anchors" - index: 18 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "left" - type: "QQuickAnchorLine" - read: "left" - index: 19 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "right" - type: "QQuickAnchorLine" - read: "right" - index: 20 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "horizontalCenter" - type: "QQuickAnchorLine" - read: "horizontalCenter" - index: 21 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "top" - type: "QQuickAnchorLine" - read: "top" - index: 22 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "bottom" - type: "QQuickAnchorLine" - read: "bottom" - index: 23 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "verticalCenter" - type: "QQuickAnchorLine" - read: "verticalCenter" - index: 24 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "baseline" - type: "QQuickAnchorLine" - read: "baseline" - index: 25 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "baselineOffset" - type: "double" - read: "baselineOffset" - write: "setBaselineOffset" - notify: "baselineOffsetChanged" - index: 26 - } - Property { - name: "clip" - type: "bool" - read: "clip" - write: "setClip" - notify: "clipChanged" - index: 27 - } - Property { - name: "focus" - type: "bool" - read: "hasFocus" - write: "setFocus" - notify: "focusChanged" - index: 28 - isFinal: true - } - Property { - name: "activeFocus" - type: "bool" - read: "hasActiveFocus" - notify: "activeFocusChanged" - index: 29 - isReadonly: true - isFinal: true - } - Property { - name: "activeFocusOnTab" - revision: 513 - type: "bool" - read: "activeFocusOnTab" - write: "setActiveFocusOnTab" - notify: "activeFocusOnTabChanged" - index: 30 - isFinal: true - } - Property { - name: "focusPolicy" - revision: 1543 - type: "Qt::FocusPolicy" - read: "focusPolicy" - write: "setFocusPolicy" - notify: "focusPolicyChanged" - index: 31 - } - Property { - name: "rotation" - type: "double" - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 32 - } - Property { - name: "scale" - type: "double" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 33 - } - Property { - name: "transformOrigin" - type: "TransformOrigin" - read: "transformOrigin" - write: "setTransformOrigin" - notify: "transformOriginChanged" - index: 34 - } - Property { - name: "transformOriginPoint" - type: "QPointF" - read: "transformOriginPoint" - index: 35 - isReadonly: true - } - Property { - name: "transform" - type: "QQuickTransform" - isList: true - read: "transform" - index: 36 - isReadonly: true - isFinal: true - } - Property { - name: "smooth" - type: "bool" - read: "smooth" - write: "setSmooth" - notify: "smoothChanged" - index: 37 - } - Property { - name: "antialiasing" - type: "bool" - read: "antialiasing" - write: "setAntialiasing" - reset: "resetAntialiasing" - notify: "antialiasingChanged" - index: 38 - } - Property { - name: "implicitWidth" - type: "double" - read: "implicitWidth" - write: "setImplicitWidth" - notify: "implicitWidthChanged" - index: 39 - } - Property { - name: "implicitHeight" - type: "double" - read: "implicitHeight" - write: "setImplicitHeight" - notify: "implicitHeightChanged" - index: 40 - } - Property { - name: "containmentMask" - revision: 523 - type: "QObject" - isPointer: true - read: "containmentMask" - write: "setContainmentMask" - notify: "containmentMaskChanged" - index: 41 - } - Property { - name: "layer" - type: "QQuickItemLayer" - isPointer: true - read: "layer" - index: 42 - privateClass: "QQuickItemPrivate" - isReadonly: true - isFinal: true - isConstant: true - } - Signal { - name: "childrenRectChanged" - Parameter { type: "QRectF" } - } - Signal { - name: "baselineOffsetChanged" - Parameter { type: "double" } - } - Signal { - name: "stateChanged" - Parameter { type: "QString" } - } - Signal { - name: "focusChanged" - Parameter { type: "bool" } - } - Signal { - name: "activeFocusChanged" - Parameter { type: "bool" } - } - Signal { - name: "focusPolicyChanged" - revision: 1543 - Parameter { type: "Qt::FocusPolicy" } - } - Signal { - name: "activeFocusOnTabChanged" - revision: 513 - Parameter { type: "bool" } - } - Signal { - name: "parentChanged" - Parameter { type: "QQuickItem"; isPointer: true } - } - Signal { - name: "transformOriginChanged" - Parameter { type: "TransformOrigin" } - } - Signal { - name: "smoothChanged" - Parameter { type: "bool" } - } - Signal { - name: "antialiasingChanged" - Parameter { type: "bool" } - } - Signal { - name: "clipChanged" - Parameter { type: "bool" } - } - Signal { - name: "windowChanged" - revision: 513 - Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } - } - Signal { name: "childrenChanged" } - Signal { name: "opacityChanged" } - Signal { name: "enabledChanged" } - Signal { name: "visibleChanged" } - Signal { name: "visibleChildrenChanged" } - Signal { name: "rotationChanged" } - Signal { name: "scaleChanged" } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - Signal { name: "zChanged" } - Signal { name: "implicitWidthChanged" } - Signal { name: "implicitHeightChanged" } - Signal { name: "containmentMaskChanged"; revision: 523 } - Signal { name: "paletteChanged"; revision: 1536 } - Signal { name: "paletteCreated"; revision: 1536 } - Method { name: "update" } - Method { - name: "_q_resourceObjectDeleted" - Parameter { type: "QObject"; isPointer: true } - } - Method { - name: "_q_createJSWrapper" - type: "qulonglong" - Parameter { type: "QV4::ExecutionEngine"; isPointer: true } - } - Method { - name: "grabToImage" - revision: 516 - type: "bool" - Parameter { name: "callback"; type: "QJSValue" } - Parameter { name: "targetSize"; type: "QSize" } - } - Method { - name: "grabToImage" - revision: 516 - type: "bool" - isCloned: true - Parameter { name: "callback"; type: "QJSValue" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "point"; type: "QPointF" } - } - Method { - name: "mapFromItem" - type: "QPointF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "point"; type: "QPointF" } - } - Method { - name: "mapFromItem" - type: "QPointF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "mapFromItem" - type: "QRectF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "rect"; type: "QRectF" } - } - Method { - name: "mapFromItem" - type: "QRectF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "width"; type: "double" } - Parameter { name: "height"; type: "double" } - } - Method { - name: "mapToItem" - type: "QPointF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "point"; type: "QPointF" } - } - Method { - name: "mapToItem" - type: "QPointF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "mapToItem" - type: "QRectF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "rect"; type: "QRectF" } - } - Method { - name: "mapToItem" - type: "QRectF" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true; isConstant: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "width"; type: "double" } - Parameter { name: "height"; type: "double" } - } - Method { - name: "mapFromGlobal" - revision: 519 - type: "QPointF" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "mapFromGlobal" - revision: 519 - type: "QPointF" - Parameter { name: "point"; type: "QPointF" } - } - Method { - name: "mapToGlobal" - revision: 519 - type: "QPointF" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "mapToGlobal" - revision: 519 - type: "QPointF" - Parameter { name: "point"; type: "QPointF" } - } - Method { name: "forceActiveFocus" } - Method { - name: "forceActiveFocus" - Parameter { name: "reason"; type: "Qt::FocusReason" } - } - Method { - name: "nextItemInFocusChain" - revision: 513 - type: "QQuickItem" - isPointer: true - Parameter { name: "forward"; type: "bool" } - } - Method { - name: "nextItemInFocusChain" - revision: 513 - type: "QQuickItem" - isPointer: true - isCloned: true - } - Method { - name: "childAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { name: "ensurePolished"; revision: 1539 } - Method { name: "dumpItemTree"; revision: 1539 } - } - Component { - file: "qquickitemgrabresult.h" - name: "QQuickItemGrabResult" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "image" - type: "QImage" - read: "image" - index: 0 - isReadonly: true - isConstant: true - } - Property { name: "url"; type: "QUrl"; read: "url"; index: 1; isReadonly: true; isConstant: true } - Signal { name: "ready" } - Method { name: "setup" } - Method { name: "render" } - Method { - name: "saveToFile" - type: "bool" - Parameter { name: "fileName"; type: "QString" } - } - Method { - name: "saveToFile" - revision: 1538 - type: "bool" - Parameter { name: "fileName"; type: "QUrl" } - } - } - Component { - file: "private/qquickitem_p.h" - name: "QQuickItemLayer" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - isFinal: true - } - Property { - name: "textureSize" - type: "QSize" - read: "size" - write: "setSize" - notify: "sizeChanged" - index: 1 - isFinal: true - } - Property { - name: "sourceRect" - type: "QRectF" - read: "sourceRect" - write: "setSourceRect" - notify: "sourceRectChanged" - index: 2 - isFinal: true - } - Property { - name: "mipmap" - type: "bool" - read: "mipmap" - write: "setMipmap" - notify: "mipmapChanged" - index: 3 - isFinal: true - } - Property { - name: "smooth" - type: "bool" - read: "smooth" - write: "setSmooth" - notify: "smoothChanged" - index: 4 - isFinal: true - } - Property { - name: "live" - revision: 1541 - type: "bool" - read: "live" - write: "setLive" - notify: "liveChanged" - index: 5 - isFinal: true - } - Property { - name: "wrapMode" - type: "QQuickShaderEffectSource::WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 6 - isFinal: true - } - Property { - name: "format" - type: "QQuickShaderEffectSource::Format" - read: "format" - write: "setFormat" - notify: "formatChanged" - index: 7 - isFinal: true - } - Property { - name: "samplerName" - type: "QByteArray" - read: "name" - write: "setName" - notify: "nameChanged" - index: 8 - isFinal: true - } - Property { - name: "effect" - type: "QQmlComponent" - isPointer: true - read: "effect" - write: "setEffect" - notify: "effectChanged" - index: 9 - isFinal: true - } - Property { - name: "textureMirroring" - type: "QQuickShaderEffectSource::TextureMirroring" - read: "textureMirroring" - write: "setTextureMirroring" - notify: "textureMirroringChanged" - index: 10 - isFinal: true - } - Property { - name: "samples" - type: "int" - read: "samples" - write: "setSamples" - notify: "samplesChanged" - index: 11 - isFinal: true - } - Signal { - name: "enabledChanged" - Parameter { name: "enabled"; type: "bool" } - } - Signal { - name: "sizeChanged" - Parameter { name: "size"; type: "QSize" } - } - Signal { - name: "mipmapChanged" - Parameter { name: "mipmap"; type: "bool" } - } - Signal { - name: "wrapModeChanged" - Parameter { name: "mode"; type: "QQuickShaderEffectSource::WrapMode" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "QByteArray" } - } - Signal { - name: "effectChanged" - Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } - } - Signal { - name: "smoothChanged" - Parameter { name: "smooth"; type: "bool" } - } - Signal { - name: "liveChanged" - Parameter { name: "live"; type: "bool" } - } - Signal { - name: "formatChanged" - Parameter { name: "format"; type: "QQuickShaderEffectSource::Format" } - } - Signal { - name: "sourceRectChanged" - Parameter { name: "sourceRect"; type: "QRectF" } - } - Signal { - name: "textureMirroringChanged" - Parameter { name: "mirroring"; type: "QQuickShaderEffectSource::TextureMirroring" } - } - Signal { - name: "samplesChanged" - Parameter { name: "count"; type: "int" } - } - } - Component { - file: "private/qquickitemview_p.h" - name: "QQuickItemView" - accessSemantics: "reference" - defaultProperty: "flickableData" - prototype: "QQuickFlickable" - exports: [ - "QtQuick/ItemView 2.1", - "QtQuick/ItemView 2.3", - "QtQuick/ItemView 2.4", - "QtQuick/ItemView 2.7", - "QtQuick/ItemView 2.9", - "QtQuick/ItemView 2.10", - "QtQuick/ItemView 2.11", - "QtQuick/ItemView 2.12", - "QtQuick/ItemView 2.13", - "QtQuick/ItemView 2.15", - "QtQuick/ItemView 6.0", - "QtQuick/ItemView 6.3", - "QtQuick/ItemView 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [ - 513, - 515, - 516, - 519, - 521, - 522, - 523, - 524, - 525, - 527, - 1536, - 1539, - 1543 - ] - Enum { - name: "LayoutDirection" - values: [ - "LeftToRight", - "RightToLeft", - "VerticalTopToBottom", - "VerticalBottomToTop" - ] - } - Enum { - name: "VerticalLayoutDirection" - values: ["TopToBottom", "BottomToTop"] - } - Enum { - name: "HighlightRangeMode" - values: ["NoHighlightRange", "ApplyRange", "StrictlyEnforceRange"] - } - Enum { - name: "PositionMode" - values: [ - "Beginning", - "Center", - "End", - "Visible", - "Contain", - "SnapPosition" - ] - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 2 - isReadonly: true - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 3 - } - Property { - name: "currentItem" - type: "QQuickItem" - isPointer: true - read: "currentItem" - notify: "currentItemChanged" - index: 4 - isReadonly: true - } - Property { - name: "keyNavigationWraps" - type: "bool" - read: "isWrapEnabled" - write: "setWrapEnabled" - notify: "keyNavigationWrapsChanged" - index: 5 - } - Property { - name: "keyNavigationEnabled" - revision: 519 - type: "bool" - read: "isKeyNavigationEnabled" - write: "setKeyNavigationEnabled" - notify: "keyNavigationEnabledChanged" - index: 6 - } - Property { - name: "cacheBuffer" - type: "int" - read: "cacheBuffer" - write: "setCacheBuffer" - notify: "cacheBufferChanged" - index: 7 - } - Property { - name: "displayMarginBeginning" - revision: 515 - type: "int" - read: "displayMarginBeginning" - write: "setDisplayMarginBeginning" - notify: "displayMarginBeginningChanged" - index: 8 - } - Property { - name: "displayMarginEnd" - revision: 515 - type: "int" - read: "displayMarginEnd" - write: "setDisplayMarginEnd" - notify: "displayMarginEndChanged" - index: 9 - } - Property { - name: "layoutDirection" - type: "Qt::LayoutDirection" - read: "layoutDirection" - write: "setLayoutDirection" - notify: "layoutDirectionChanged" - index: 10 - } - Property { - name: "effectiveLayoutDirection" - type: "Qt::LayoutDirection" - read: "effectiveLayoutDirection" - notify: "effectiveLayoutDirectionChanged" - index: 11 - isReadonly: true - } - Property { - name: "verticalLayoutDirection" - type: "VerticalLayoutDirection" - read: "verticalLayoutDirection" - write: "setVerticalLayoutDirection" - notify: "verticalLayoutDirectionChanged" - index: 12 - } - Property { - name: "header" - type: "QQmlComponent" - isPointer: true - read: "header" - write: "setHeader" - notify: "headerChanged" - index: 13 - } - Property { - name: "headerItem" - type: "QQuickItem" - isPointer: true - read: "headerItem" - notify: "headerItemChanged" - index: 14 - isReadonly: true - } - Property { - name: "footer" - type: "QQmlComponent" - isPointer: true - read: "footer" - write: "setFooter" - notify: "footerChanged" - index: 15 - } - Property { - name: "footerItem" - type: "QQuickItem" - isPointer: true - read: "footerItem" - notify: "footerItemChanged" - index: 16 - isReadonly: true - } - Property { - name: "populate" - type: "QQuickTransition" - isPointer: true - read: "populateTransition" - write: "setPopulateTransition" - notify: "populateTransitionChanged" - index: 17 - } - Property { - name: "add" - type: "QQuickTransition" - isPointer: true - read: "addTransition" - write: "setAddTransition" - notify: "addTransitionChanged" - index: 18 - } - Property { - name: "addDisplaced" - type: "QQuickTransition" - isPointer: true - read: "addDisplacedTransition" - write: "setAddDisplacedTransition" - notify: "addDisplacedTransitionChanged" - index: 19 - } - Property { - name: "move" - type: "QQuickTransition" - isPointer: true - read: "moveTransition" - write: "setMoveTransition" - notify: "moveTransitionChanged" - index: 20 - } - Property { - name: "moveDisplaced" - type: "QQuickTransition" - isPointer: true - read: "moveDisplacedTransition" - write: "setMoveDisplacedTransition" - notify: "moveDisplacedTransitionChanged" - index: 21 - } - Property { - name: "remove" - type: "QQuickTransition" - isPointer: true - read: "removeTransition" - write: "setRemoveTransition" - notify: "removeTransitionChanged" - index: 22 - } - Property { - name: "removeDisplaced" - type: "QQuickTransition" - isPointer: true - read: "removeDisplacedTransition" - write: "setRemoveDisplacedTransition" - notify: "removeDisplacedTransitionChanged" - index: 23 - } - Property { - name: "displaced" - type: "QQuickTransition" - isPointer: true - read: "displacedTransition" - write: "setDisplacedTransition" - notify: "displacedTransitionChanged" - index: 24 - } - Property { - name: "highlight" - type: "QQmlComponent" - isPointer: true - read: "highlight" - write: "setHighlight" - notify: "highlightChanged" - index: 25 - } - Property { - name: "highlightItem" - type: "QQuickItem" - isPointer: true - read: "highlightItem" - notify: "highlightItemChanged" - index: 26 - isReadonly: true - } - Property { - name: "highlightFollowsCurrentItem" - type: "bool" - read: "highlightFollowsCurrentItem" - write: "setHighlightFollowsCurrentItem" - notify: "highlightFollowsCurrentItemChanged" - index: 27 - } - Property { - name: "highlightRangeMode" - type: "HighlightRangeMode" - read: "highlightRangeMode" - write: "setHighlightRangeMode" - notify: "highlightRangeModeChanged" - index: 28 - } - Property { - name: "preferredHighlightBegin" - type: "double" - read: "preferredHighlightBegin" - write: "setPreferredHighlightBegin" - reset: "resetPreferredHighlightBegin" - notify: "preferredHighlightBeginChanged" - index: 29 - } - Property { - name: "preferredHighlightEnd" - type: "double" - read: "preferredHighlightEnd" - write: "setPreferredHighlightEnd" - reset: "resetPreferredHighlightEnd" - notify: "preferredHighlightEndChanged" - index: 30 - } - Property { - name: "highlightMoveDuration" - type: "int" - read: "highlightMoveDuration" - write: "setHighlightMoveDuration" - notify: "highlightMoveDurationChanged" - index: 31 - } - Property { - name: "reuseItems" - revision: 527 - type: "bool" - read: "reuseItems" - write: "setReuseItems" - notify: "reuseItemsChanged" - index: 32 - } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "countChanged" } - Signal { name: "currentIndexChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "keyNavigationWrapsChanged" } - Signal { name: "keyNavigationEnabledChanged"; revision: 519 } - Signal { name: "cacheBufferChanged" } - Signal { name: "displayMarginBeginningChanged" } - Signal { name: "displayMarginEndChanged" } - Signal { name: "layoutDirectionChanged" } - Signal { name: "effectiveLayoutDirectionChanged" } - Signal { name: "verticalLayoutDirectionChanged" } - Signal { name: "headerChanged" } - Signal { name: "footerChanged" } - Signal { name: "headerItemChanged" } - Signal { name: "footerItemChanged" } - Signal { name: "populateTransitionChanged" } - Signal { name: "addTransitionChanged" } - Signal { name: "addDisplacedTransitionChanged" } - Signal { name: "moveTransitionChanged" } - Signal { name: "moveDisplacedTransitionChanged" } - Signal { name: "removeTransitionChanged" } - Signal { name: "removeDisplacedTransitionChanged" } - Signal { name: "displacedTransitionChanged" } - Signal { name: "highlightChanged" } - Signal { name: "highlightItemChanged" } - Signal { name: "highlightFollowsCurrentItemChanged" } - Signal { name: "highlightRangeModeChanged" } - Signal { name: "preferredHighlightBeginChanged" } - Signal { name: "preferredHighlightEndChanged" } - Signal { name: "highlightMoveDurationChanged" } - Signal { name: "reuseItemsChanged"; revision: 527 } - Method { name: "destroyRemoved" } - Method { - name: "createdItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "initItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "modelUpdated" - Parameter { name: "changeSet"; type: "QQmlChangeSet" } - Parameter { name: "reset"; type: "bool" } - } - Method { - name: "destroyingItem" - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "onItemPooled" - revision: 527 - Parameter { name: "modelIndex"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "onItemReused" - revision: 527 - Parameter { name: "modelIndex"; type: "int" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { name: "animStopped" } - Method { name: "trackedPositionChanged" } - Method { - name: "positionViewAtIndex" - Parameter { name: "index"; type: "int" } - Parameter { name: "mode"; type: "int" } - } - Method { - name: "indexAt" - type: "int" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "itemAtIndex" - revision: 525 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - Method { name: "positionViewAtBeginning" } - Method { name: "positionViewAtEnd" } - Method { name: "forceLayout"; revision: 513 } - } - Component { - file: "private/qquickitemview_p.h" - name: "QQuickItemViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "view" - type: "QQuickItemView" - isPointer: true - read: "view" - notify: "viewChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "isCurrentItem" - type: "bool" - read: "isCurrentItem" - notify: "currentItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "delayRemove" - type: "bool" - read: "delayRemove" - write: "setDelayRemove" - notify: "delayRemoveChanged" - index: 2 - isFinal: true - } - Property { - name: "section" - type: "QString" - read: "section" - notify: "sectionChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "previousSection" - type: "QString" - read: "prevSection" - notify: "prevSectionChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "nextSection" - type: "QString" - read: "nextSection" - notify: "nextSectionChanged" - index: 5 - isReadonly: true - isFinal: true - } - Signal { name: "viewChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "delayRemoveChanged" } - Signal { name: "add" } - Signal { name: "remove" } - Signal { name: "sectionChanged" } - Signal { name: "prevSectionChanged" } - Signal { name: "nextSectionChanged" } - Signal { name: "pooled" } - Signal { name: "reused" } - } - Component { - file: "private/qquickevents_p_p.h" - name: "QQuickKeyEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/KeyEvent 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Property { - name: "key" - type: "int" - read: "key" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "text" - type: "QString" - read: "text" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "modifiers" - type: "int" - read: "modifiers" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "isAutoRepeat" - type: "bool" - read: "isAutoRepeat" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "count" - type: "int" - read: "count" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "nativeScanCode" - type: "uint" - read: "nativeScanCode" - index: 5 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "accepted" - type: "bool" - read: "isAccepted" - write: "setAccepted" - index: 6 - isFinal: true - } - Method { - name: "matches" - revision: 514 - type: "bool" - Parameter { name: "key"; type: "QKeySequence::StandardKey" } - } - } - Component { - file: "private/qquickitem_p.h" - name: "QQuickKeyNavigationAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/KeyNavigation 2.0", "QtQuick/KeyNavigation 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickKeyNavigationAttached" - Enum { - name: "Priority" - values: ["BeforeItem", "AfterItem"] - } - Property { - name: "left" - type: "QQuickItem" - isPointer: true - read: "left" - write: "setLeft" - notify: "leftChanged" - index: 0 - isFinal: true - } - Property { - name: "right" - type: "QQuickItem" - isPointer: true - read: "right" - write: "setRight" - notify: "rightChanged" - index: 1 - isFinal: true - } - Property { - name: "up" - type: "QQuickItem" - isPointer: true - read: "up" - write: "setUp" - notify: "upChanged" - index: 2 - isFinal: true - } - Property { - name: "down" - type: "QQuickItem" - isPointer: true - read: "down" - write: "setDown" - notify: "downChanged" - index: 3 - isFinal: true - } - Property { - name: "tab" - type: "QQuickItem" - isPointer: true - read: "tab" - write: "setTab" - notify: "tabChanged" - index: 4 - isFinal: true - } - Property { - name: "backtab" - type: "QQuickItem" - isPointer: true - read: "backtab" - write: "setBacktab" - notify: "backtabChanged" - index: 5 - isFinal: true - } - Property { - name: "priority" - type: "Priority" - read: "priority" - write: "setPriority" - notify: "priorityChanged" - index: 6 - isFinal: true - } - Signal { name: "leftChanged" } - Signal { name: "rightChanged" } - Signal { name: "upChanged" } - Signal { name: "downChanged" } - Signal { name: "tabChanged" } - Signal { name: "backtabChanged" } - Signal { name: "priorityChanged" } - } - Component { - file: "private/qquickitem_p.h" - name: "QQuickKeysAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/Keys 2.0", "QtQuick/Keys 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickKeysAttached" - Enum { - name: "Priority" - values: ["BeforeItem", "AfterItem"] - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - isFinal: true - } - Property { - name: "forwardTo" - type: "QQuickItem" - isList: true - read: "forwardTo" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "priority" - type: "Priority" - read: "priority" - write: "setPriority" - notify: "priorityChanged" - index: 2 - isFinal: true - } - Signal { name: "enabledChanged" } - Signal { name: "priorityChanged" } - Signal { - name: "pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "released" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "shortcutOverride" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit0Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit1Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit2Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit3Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit4Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit5Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit6Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit7Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit8Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "digit9Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "leftPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "rightPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "upPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "downPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "tabPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "backtabPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "asteriskPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "numberSignPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "escapePressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "returnPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "enterPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "deletePressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "spacePressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "backPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "cancelPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "selectPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "yesPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "noPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "context1Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "context2Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "context3Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "context4Pressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "callPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "hangupPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "flipPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "menuPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "volumeUpPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - Signal { - name: "volumeDownPressed" - Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } - } - } - Component { - file: "private/qquickitem_p.h" - name: "QQuickLayoutMirroringAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/LayoutMirroring 2.0", - "QtQuick/LayoutMirroring 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickLayoutMirroringAttached" - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - reset: "resetEnabled" - notify: "enabledChanged" - index: 0 - isFinal: true - } - Property { - name: "childrenInherit" - type: "bool" - read: "childrenInherit" - write: "setChildrenInherit" - notify: "childrenInheritChanged" - index: 1 - isFinal: true - } - Signal { name: "enabledChanged" } - Signal { name: "childrenInheritChanged" } - } - Component { - file: "private/qquicklistview_p.h" - name: "QQuickListView" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickItemView" - exports: [ - "QtQuick/ListView 2.0", - "QtQuick/ListView 2.1", - "QtQuick/ListView 2.3", - "QtQuick/ListView 2.4", - "QtQuick/ListView 2.7", - "QtQuick/ListView 2.9", - "QtQuick/ListView 2.10", - "QtQuick/ListView 2.11", - "QtQuick/ListView 2.12", - "QtQuick/ListView 2.13", - "QtQuick/ListView 2.15", - "QtQuick/ListView 6.0", - "QtQuick/ListView 6.3", - "QtQuick/ListView 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 515, - 516, - 519, - 521, - 522, - 523, - 524, - 525, - 527, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickListViewAttached" - Enum { - name: "Orientation" - values: ["Horizontal", "Vertical"] - } - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapToItem", "SnapOneItem"] - } - Enum { - name: "HeaderPositioning" - values: ["InlineHeader", "OverlayHeader", "PullBackHeader"] - } - Enum { - name: "FooterPositioning" - values: ["InlineFooter", "OverlayFooter", "PullBackFooter"] - } - Property { - name: "highlightMoveVelocity" - type: "double" - read: "highlightMoveVelocity" - write: "setHighlightMoveVelocity" - notify: "highlightMoveVelocityChanged" - index: 0 - } - Property { - name: "highlightResizeVelocity" - type: "double" - read: "highlightResizeVelocity" - write: "setHighlightResizeVelocity" - notify: "highlightResizeVelocityChanged" - index: 1 - } - Property { - name: "highlightResizeDuration" - type: "int" - read: "highlightResizeDuration" - write: "setHighlightResizeDuration" - notify: "highlightResizeDurationChanged" - index: 2 - } - Property { - name: "spacing" - type: "double" - read: "spacing" - write: "setSpacing" - notify: "spacingChanged" - index: 3 - } - Property { - name: "orientation" - type: "Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 4 - } - Property { - name: "section" - type: "QQuickViewSection" - isPointer: true - read: "sectionCriteria" - index: 5 - isReadonly: true - isConstant: true - } - Property { - name: "currentSection" - type: "QString" - read: "currentSection" - notify: "currentSectionChanged" - index: 6 - isReadonly: true - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 7 - } - Property { - name: "headerPositioning" - revision: 516 - type: "HeaderPositioning" - read: "headerPositioning" - write: "setHeaderPositioning" - notify: "headerPositioningChanged" - index: 8 - } - Property { - name: "footerPositioning" - revision: 516 - type: "FooterPositioning" - read: "footerPositioning" - write: "setFooterPositioning" - notify: "footerPositioningChanged" - index: 9 - } - Signal { name: "spacingChanged" } - Signal { name: "orientationChanged" } - Signal { name: "currentSectionChanged" } - Signal { name: "highlightMoveVelocityChanged" } - Signal { name: "highlightResizeVelocityChanged" } - Signal { name: "highlightResizeDurationChanged" } - Signal { name: "snapModeChanged" } - Signal { name: "headerPositioningChanged"; revision: 516 } - Signal { name: "footerPositioningChanged"; revision: 516 } - Method { name: "incrementCurrentIndex" } - Method { name: "decrementCurrentIndex" } - } - Component { - file: "private/qquicklistview_p.h" - name: "QQuickListViewAttached" - accessSemantics: "reference" - prototype: "QQuickItemViewAttached" - } - Component { - file: "private/qquickloader_p.h" - name: "QQuickLoader" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - exports: [ - "QtQuick/Loader 2.0", - "QtQuick/Loader 2.1", - "QtQuick/Loader 2.4", - "QtQuick/Loader 2.7", - "QtQuick/Loader 2.11", - "QtQuick/Loader 6.0", - "QtQuick/Loader 6.2", - "QtQuick/Loader 6.3", - "QtQuick/Loader 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 519, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Property { - name: "active" - type: "bool" - read: "active" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSourceWithoutResolve" - notify: "sourceChanged" - index: 1 - } - Property { - name: "sourceComponent" - type: "QQmlComponent" - isPointer: true - read: "sourceComponent" - write: "setSourceComponent" - reset: "resetSourceComponent" - notify: "sourceComponentChanged" - index: 2 - } - Property { - name: "item" - type: "QObject" - isPointer: true - read: "item" - notify: "itemChanged" - index: 3 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 4 - isReadonly: true - } - Property { - name: "progress" - type: "double" - read: "progress" - notify: "progressChanged" - index: 5 - isReadonly: true - } - Property { - name: "asynchronous" - type: "bool" - read: "asynchronous" - write: "setAsynchronous" - notify: "asynchronousChanged" - index: 6 - } - Signal { name: "itemChanged" } - Signal { name: "activeChanged" } - Signal { name: "sourceChanged" } - Signal { name: "sourceComponentChanged" } - Signal { name: "statusChanged" } - Signal { name: "progressChanged" } - Signal { name: "loaded" } - Signal { name: "asynchronousChanged" } - Method { name: "_q_sourceLoaded" } - Method { name: "_q_updateSize" } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - Parameter { name: "initialProperties"; type: "QJSValue" } - } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - } - } - Component { - file: "private/qquicktranslate_p.h" - name: "QQuickMatrix4x4" - accessSemantics: "reference" - prototype: "QQuickTransform" - exports: ["QtQuick/Matrix4x4 2.3", "QtQuick/Matrix4x4 6.0"] - exportMetaObjectRevisions: [515, 1536] - Property { - name: "matrix" - type: "QMatrix4x4" - read: "matrix" - write: "setMatrix" - notify: "matrixChanged" - index: 0 - } - Signal { name: "matrixChanged" } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QMatrix4x4" - accessSemantics: "value" - extension: "QQuickMatrix4x4ValueType" - exports: ["QtQuick/matrix4x4 2.0", "QtQuick/matrix4x4 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickMatrix4x4ValueType" - accessSemantics: "value" - Property { name: "m11"; type: "double"; read: "m11"; write: "setM11"; index: 0; isFinal: true } - Property { name: "m12"; type: "double"; read: "m12"; write: "setM12"; index: 1; isFinal: true } - Property { name: "m13"; type: "double"; read: "m13"; write: "setM13"; index: 2; isFinal: true } - Property { name: "m14"; type: "double"; read: "m14"; write: "setM14"; index: 3; isFinal: true } - Property { name: "m21"; type: "double"; read: "m21"; write: "setM21"; index: 4; isFinal: true } - Property { name: "m22"; type: "double"; read: "m22"; write: "setM22"; index: 5; isFinal: true } - Property { name: "m23"; type: "double"; read: "m23"; write: "setM23"; index: 6; isFinal: true } - Property { name: "m24"; type: "double"; read: "m24"; write: "setM24"; index: 7; isFinal: true } - Property { name: "m31"; type: "double"; read: "m31"; write: "setM31"; index: 8; isFinal: true } - Property { name: "m32"; type: "double"; read: "m32"; write: "setM32"; index: 9; isFinal: true } - Property { name: "m33"; type: "double"; read: "m33"; write: "setM33"; index: 10; isFinal: true } - Property { name: "m34"; type: "double"; read: "m34"; write: "setM34"; index: 11; isFinal: true } - Property { name: "m41"; type: "double"; read: "m41"; write: "setM41"; index: 12; isFinal: true } - Property { name: "m42"; type: "double"; read: "m42"; write: "setM42"; index: 13; isFinal: true } - Property { name: "m43"; type: "double"; read: "m43"; write: "setM43"; index: 14; isFinal: true } - Property { name: "m44"; type: "double"; read: "m44"; write: "setM44"; index: 15; isFinal: true } - Method { - name: "translate" - Parameter { name: "t"; type: "QVector3D" } - } - Method { - name: "rotate" - Parameter { name: "angle"; type: "float" } - Parameter { name: "axis"; type: "QVector3D" } - } - Method { - name: "rotate" - Parameter { name: "q"; type: "QQuaternion" } - } - Method { - name: "scale" - Parameter { name: "s"; type: "float" } - } - Method { - name: "scale" - Parameter { name: "sx"; type: "float" } - Parameter { name: "sy"; type: "float" } - Parameter { name: "sz"; type: "float" } - } - Method { - name: "scale" - Parameter { name: "s"; type: "QVector3D" } - } - Method { - name: "lookAt" - Parameter { name: "eye"; type: "QVector3D" } - Parameter { name: "center"; type: "QVector3D" } - Parameter { name: "up"; type: "QVector3D" } - } - Method { - name: "times" - type: "QMatrix4x4" - Parameter { name: "m"; type: "QMatrix4x4" } - } - Method { - name: "times" - type: "QVector4D" - Parameter { name: "vec"; type: "QVector4D" } - } - Method { - name: "times" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "times" - type: "QMatrix4x4" - Parameter { name: "factor"; type: "double" } - } - Method { - name: "plus" - type: "QMatrix4x4" - Parameter { name: "m"; type: "QMatrix4x4" } - } - Method { - name: "minus" - type: "QMatrix4x4" - Parameter { name: "m"; type: "QMatrix4x4" } - } - Method { - name: "row" - type: "QVector4D" - Parameter { name: "n"; type: "int" } - } - Method { - name: "column" - type: "QVector4D" - Parameter { name: "m"; type: "int" } - } - Method { name: "determinant"; type: "double" } - Method { name: "inverted"; type: "QMatrix4x4" } - Method { name: "transposed"; type: "QMatrix4x4" } - Method { - name: "map" - type: "QPointF" - Parameter { name: "p"; type: "QPointF" } - } - Method { - name: "mapRect" - type: "QRectF" - Parameter { name: "r"; type: "QRectF" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "m"; type: "QMatrix4x4" } - Parameter { name: "epsilon"; type: "double" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "m"; type: "QMatrix4x4" } - } - } - Component { - file: "private/qquickmousearea_p.h" - name: "QQuickMouseArea" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/MouseArea 2.0", - "QtQuick/MouseArea 2.1", - "QtQuick/MouseArea 2.4", - "QtQuick/MouseArea 2.5", - "QtQuick/MouseArea 2.7", - "QtQuick/MouseArea 2.9", - "QtQuick/MouseArea 2.11", - "QtQuick/MouseArea 6.0", - "QtQuick/MouseArea 6.3", - "QtQuick/MouseArea 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 521, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "mouseX" - type: "double" - read: "mouseX" - notify: "mouseXChanged" - index: 0 - isReadonly: true - } - Property { - name: "mouseY" - type: "double" - read: "mouseY" - notify: "mouseYChanged" - index: 1 - isReadonly: true - } - Property { - name: "containsMouse" - type: "bool" - read: "hovered" - notify: "hoveredChanged" - index: 2 - isReadonly: true - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 3 - isReadonly: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 4 - } - Property { - name: "scrollGestureEnabled" - revision: 517 - type: "bool" - read: "isScrollGestureEnabled" - write: "setScrollGestureEnabled" - notify: "scrollGestureEnabledChanged" - index: 5 - } - Property { - name: "pressedButtons" - type: "Qt::MouseButtons" - read: "pressedButtons" - notify: "pressedButtonsChanged" - index: 6 - isReadonly: true - } - Property { - name: "acceptedButtons" - type: "Qt::MouseButtons" - read: "acceptedButtons" - write: "setAcceptedButtons" - notify: "acceptedButtonsChanged" - index: 7 - } - Property { - name: "hoverEnabled" - type: "bool" - read: "hoverEnabled" - write: "setHoverEnabled" - notify: "hoverEnabledChanged" - index: 8 - } - Property { - name: "drag" - type: "QQuickDrag" - isPointer: true - read: "drag" - index: 9 - isReadonly: true - isConstant: true - } - Property { - name: "preventStealing" - type: "bool" - read: "preventStealing" - write: "setPreventStealing" - notify: "preventStealingChanged" - index: 10 - } - Property { - name: "propagateComposedEvents" - type: "bool" - read: "propagateComposedEvents" - write: "setPropagateComposedEvents" - notify: "propagateComposedEventsChanged" - index: 11 - } - Property { - name: "cursorShape" - type: "Qt::CursorShape" - read: "cursorShape" - write: "setCursorShape" - reset: "unsetCursor" - notify: "cursorShapeChanged" - index: 12 - } - Property { - name: "containsPress" - revision: 516 - type: "bool" - read: "containsPress" - notify: "containsPressChanged" - index: 13 - isReadonly: true - } - Property { - name: "pressAndHoldInterval" - revision: 521 - type: "int" - read: "pressAndHoldInterval" - write: "setPressAndHoldInterval" - reset: "resetPressAndHoldInterval" - notify: "pressAndHoldIntervalChanged" - index: 14 - } - Signal { name: "hoveredChanged" } - Signal { name: "pressedChanged" } - Signal { name: "enabledChanged" } - Signal { name: "scrollGestureEnabledChanged"; revision: 517 } - Signal { name: "pressedButtonsChanged" } - Signal { name: "acceptedButtonsChanged" } - Signal { name: "hoverEnabledChanged" } - Signal { name: "cursorShapeChanged" } - Signal { - name: "positionChanged" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "mouseXChanged" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "mouseYChanged" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { name: "preventStealingChanged" } - Signal { name: "propagateComposedEventsChanged" } - Signal { - name: "pressed" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "pressAndHold" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "released" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "clicked" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "doubleClicked" - Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } - } - Signal { - name: "wheel" - Parameter { name: "wheel"; type: "QQuickWheelEvent"; isPointer: true } - } - Signal { name: "entered" } - Signal { name: "exited" } - Signal { name: "canceled" } - Signal { name: "containsPressChanged"; revision: 516 } - Signal { name: "pressAndHoldIntervalChanged"; revision: 521 } - } - Component { - file: "private/qquickevents_p_p.h" - name: "QQuickMouseEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/MouseEvent 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Property { - name: "x" - type: "double" - read: "x" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "y" - type: "double" - read: "y" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "button" - type: "int" - read: "button" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttons" - type: "int" - read: "buttons" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "modifiers" - type: "int" - read: "modifiers" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "source" - revision: 519 - type: "int" - read: "source" - index: 5 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "isClick" - type: "bool" - read: "isClick" - index: 6 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "wasHeld" - type: "bool" - read: "wasHeld" - index: 7 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "accepted" - type: "bool" - read: "isAccepted" - write: "setAccepted" - index: 8 - isFinal: true - } - Property { - name: "flags" - revision: 523 - type: "int" - read: "flags" - index: 9 - isReadonly: true - isFinal: true - isConstant: true - } - } - Component { - file: "private/qquickmultipointhandler_p.h" - name: "QQuickMultiPointHandler" - accessSemantics: "reference" - prototype: "QQuickPointerDeviceHandler" - Property { - name: "minimumPointCount" - type: "int" - read: "minimumPointCount" - write: "setMinimumPointCount" - notify: "minimumPointCountChanged" - index: 0 - } - Property { - name: "maximumPointCount" - type: "int" - read: "maximumPointCount" - write: "setMaximumPointCount" - notify: "maximumPointCountChanged" - index: 1 - } - Property { - name: "centroid" - type: "QQuickHandlerPoint" - read: "centroid" - notify: "centroidChanged" - index: 2 - isReadonly: true - } - Signal { name: "minimumPointCountChanged" } - Signal { name: "maximumPointCountChanged" } - Signal { name: "centroidChanged" } - } - Component { - file: "private/qquickmultipointtoucharea_p.h" - name: "QQuickMultiPointTouchArea" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/MultiPointTouchArea 2.0", - "QtQuick/MultiPointTouchArea 2.1", - "QtQuick/MultiPointTouchArea 2.4", - "QtQuick/MultiPointTouchArea 2.7", - "QtQuick/MultiPointTouchArea 2.11", - "QtQuick/MultiPointTouchArea 6.0", - "QtQuick/MultiPointTouchArea 6.3", - "QtQuick/MultiPointTouchArea 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "touchPoints" - type: "QQuickTouchPoint" - isList: true - read: "touchPoints" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "minimumTouchPoints" - type: "int" - read: "minimumTouchPoints" - write: "setMinimumTouchPoints" - notify: "minimumTouchPointsChanged" - index: 1 - } - Property { - name: "maximumTouchPoints" - type: "int" - read: "maximumTouchPoints" - write: "setMaximumTouchPoints" - notify: "maximumTouchPointsChanged" - index: 2 - } - Property { - name: "mouseEnabled" - type: "bool" - read: "mouseEnabled" - write: "setMouseEnabled" - notify: "mouseEnabledChanged" - index: 3 - } - Signal { - name: "pressed" - Parameter { name: "touchPoints"; type: "QObjectList" } - } - Signal { - name: "updated" - Parameter { name: "touchPoints"; type: "QObjectList" } - } - Signal { - name: "released" - Parameter { name: "touchPoints"; type: "QObjectList" } - } - Signal { - name: "canceled" - Parameter { name: "touchPoints"; type: "QObjectList" } - } - Signal { - name: "gestureStarted" - Parameter { name: "gesture"; type: "QQuickGrabGestureEvent"; isPointer: true } - } - Signal { - name: "touchUpdated" - Parameter { name: "touchPoints"; type: "QObjectList" } - } - Signal { name: "minimumTouchPointsChanged" } - Signal { name: "maximumTouchPointsChanged" } - Signal { name: "mouseEnabledChanged" } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickNumberAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: [ - "QtQuick/NumberAnimation 2.0", - "QtQuick/NumberAnimation 2.12", - "QtQuick/NumberAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - } - Property { name: "to"; type: "double"; read: "to"; write: "setTo"; notify: "toChanged"; index: 1 } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickOpacityAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/OpacityAnimator 2.2", - "QtQuick/OpacityAnimator 2.12", - "QtQuick/OpacityAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - } - Component { - file: "qquickpainteditem.h" - name: "QQuickPaintedItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/PaintedItem 2.0", - "QtQuick/PaintedItem 2.1", - "QtQuick/PaintedItem 2.4", - "QtQuick/PaintedItem 2.7", - "QtQuick/PaintedItem 2.11", - "QtQuick/PaintedItem 6.0", - "QtQuick/PaintedItem 6.3", - "QtQuick/PaintedItem 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "RenderTarget" - values: [ - "Image", - "FramebufferObject", - "InvertedYFramebufferObject" - ] - } - Enum { - name: "PerformanceHints" - alias: "PerformanceHint" - isFlag: true - values: ["FastFBOResizing"] - } - Property { - name: "contentsSize" - type: "QSize" - read: "contentsSize" - write: "setContentsSize" - notify: "contentsSizeChanged" - index: 0 - } - Property { - name: "fillColor" - type: "QColor" - read: "fillColor" - write: "setFillColor" - notify: "fillColorChanged" - index: 1 - } - Property { - name: "contentsScale" - type: "double" - read: "contentsScale" - write: "setContentsScale" - notify: "contentsScaleChanged" - index: 2 - } - Property { - name: "renderTarget" - type: "RenderTarget" - read: "renderTarget" - write: "setRenderTarget" - notify: "renderTargetChanged" - index: 3 - } - Property { - name: "textureSize" - type: "QSize" - read: "textureSize" - write: "setTextureSize" - notify: "textureSizeChanged" - index: 4 - } - Signal { name: "fillColorChanged" } - Signal { name: "contentsSizeChanged" } - Signal { name: "contentsScaleChanged" } - Signal { name: "renderTargetChanged" } - Signal { name: "textureSizeChanged" } - Method { name: "invalidateSceneGraph" } - } - Component { - file: "private/qquickpalette_p.h" - name: "QQuickPalette" - accessSemantics: "reference" - prototype: "QQuickColorGroup" - exports: [ - "QtQuick/Palette 6.0", - "QtQuick/Palette 6.2", - "QtQuick/Palette 6.6" - ] - exportMetaObjectRevisions: [1536, 1538, 1542] - Property { - name: "active" - type: "QQuickColorGroup" - isPointer: true - read: "active" - write: "setActive" - reset: "resetActive" - notify: "activeChanged" - index: 0 - isFinal: true - } - Property { - name: "inactive" - type: "QQuickColorGroup" - isPointer: true - read: "inactive" - write: "setInactive" - reset: "resetInactive" - notify: "inactiveChanged" - index: 1 - isFinal: true - } - Property { - name: "disabled" - type: "QQuickColorGroup" - isPointer: true - read: "disabled" - write: "setDisabled" - reset: "resetDisabled" - notify: "disabledChanged" - index: 2 - isFinal: true - } - Signal { name: "activeChanged" } - Signal { name: "inactiveChanged" } - Signal { name: "disabledChanged" } - Method { - name: "setActive" - Parameter { name: "active"; type: "QQuickColorGroup"; isPointer: true } - } - Method { - name: "setInactive" - Parameter { name: "inactive"; type: "QQuickColorGroup"; isPointer: true } - } - Method { - name: "setDisabled" - Parameter { name: "disabled"; type: "QQuickColorGroup"; isPointer: true } - } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickParallelAnimation" - accessSemantics: "reference" - defaultProperty: "animations" - prototype: "QQuickAnimationGroup" - exports: [ - "QtQuick/ParallelAnimation 2.0", - "QtQuick/ParallelAnimation 2.12", - "QtQuick/ParallelAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - } - Component { - file: "private/qquickitemanimation_p.h" - name: "QQuickParentAnimation" - accessSemantics: "reference" - defaultProperty: "animations" - prototype: "QQuickAnimationGroup" - exports: [ - "QtQuick/ParentAnimation 2.0", - "QtQuick/ParentAnimation 2.12", - "QtQuick/ParentAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTargetObject" - notify: "targetChanged" - index: 0 - } - Property { - name: "newParent" - type: "QQuickItem" - isPointer: true - read: "newParent" - write: "setNewParent" - notify: "newParentChanged" - index: 1 - } - Property { - name: "via" - type: "QQuickItem" - isPointer: true - read: "via" - write: "setVia" - notify: "viaChanged" - index: 2 - } - Signal { name: "targetChanged" } - Signal { name: "newParentChanged" } - Signal { name: "viaChanged" } - } - Component { - file: "private/qquickstateoperations_p.h" - name: "QQuickParentChange" - accessSemantics: "reference" - parentProperty: "parent" - prototype: "QQuickStateOperation" - exports: ["QtQuick/ParentChange 2.0", "QtQuick/ParentChange 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "object" - write: "setObject" - index: 0 - } - Property { - name: "parent" - type: "QQuickItem" - isPointer: true - read: "parent" - write: "setParent" - index: 1 - } - Property { name: "x"; type: "QQmlScriptString"; read: "x"; write: "setX"; index: 2 } - Property { name: "y"; type: "QQmlScriptString"; read: "y"; write: "setY"; index: 3 } - Property { name: "width"; type: "QQmlScriptString"; read: "width"; write: "setWidth"; index: 4 } - Property { name: "height"; type: "QQmlScriptString"; read: "height"; write: "setHeight"; index: 5 } - Property { name: "scale"; type: "QQmlScriptString"; read: "scale"; write: "setScale"; index: 6 } - Property { - name: "rotation" - type: "QQmlScriptString" - read: "rotation" - write: "setRotation" - index: 7 - } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPath" - accessSemantics: "reference" - defaultProperty: "pathElements" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick/Path 2.0", - "QtQuick/Path 2.14", - "QtQuick/Path 6.0", - "QtQuick/Path 6.6" - ] - exportMetaObjectRevisions: [512, 526, 1536, 1542] - Property { - name: "pathElements" - type: "QQuickPathElement" - isList: true - read: "pathElements" - index: 0 - isReadonly: true - } - Property { - name: "startX" - type: "double" - read: "startX" - write: "setStartX" - notify: "startXChanged" - index: 1 - } - Property { - name: "startY" - type: "double" - read: "startY" - write: "setStartY" - notify: "startYChanged" - index: 2 - } - Property { - name: "closed" - type: "bool" - read: "isClosed" - notify: "changed" - index: 3 - isReadonly: true - } - Property { - name: "simplify" - revision: 1542 - type: "bool" - read: "simplify" - write: "setSimplify" - notify: "simplifyChanged" - index: 4 - isFinal: true - } - Property { - name: "scale" - revision: 526 - type: "QSizeF" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 5 - } - Signal { name: "changed" } - Signal { name: "startXChanged" } - Signal { name: "startYChanged" } - Signal { name: "simplifyChanged"; revision: 1542 } - Signal { name: "scaleChanged"; revision: 526 } - Method { name: "processPath" } - Method { - name: "pointAtPercent" - revision: 526 - type: "QPointF" - Parameter { name: "t"; type: "double" } - } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathAngleArc" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathAngleArc 2.11", "QtQuick/PathAngleArc 6.0"] - exportMetaObjectRevisions: [523, 1536] - Property { - name: "centerX" - type: "double" - read: "centerX" - write: "setCenterX" - notify: "centerXChanged" - index: 0 - } - Property { - name: "centerY" - type: "double" - read: "centerY" - write: "setCenterY" - notify: "centerYChanged" - index: 1 - } - Property { - name: "radiusX" - type: "double" - read: "radiusX" - write: "setRadiusX" - notify: "radiusXChanged" - index: 2 - } - Property { - name: "radiusY" - type: "double" - read: "radiusY" - write: "setRadiusY" - notify: "radiusYChanged" - index: 3 - } - Property { - name: "startAngle" - type: "double" - read: "startAngle" - write: "setStartAngle" - notify: "startAngleChanged" - index: 4 - } - Property { - name: "sweepAngle" - type: "double" - read: "sweepAngle" - write: "setSweepAngle" - notify: "sweepAngleChanged" - index: 5 - } - Property { - name: "moveToStart" - type: "bool" - read: "moveToStart" - write: "setMoveToStart" - notify: "moveToStartChanged" - index: 6 - } - Signal { name: "centerXChanged" } - Signal { name: "centerYChanged" } - Signal { name: "radiusXChanged" } - Signal { name: "radiusYChanged" } - Signal { name: "startAngleChanged" } - Signal { name: "sweepAngleChanged" } - Signal { name: "moveToStartChanged" } - } - Component { - file: "private/qquickitemanimation_p.h" - name: "QQuickPathAnimation" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/PathAnimation 2.0", - "QtQuick/PathAnimation 2.12", - "QtQuick/PathAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Enum { - name: "Orientation" - values: [ - "Fixed", - "RightFirst", - "LeftFirst", - "BottomFirst", - "TopFirst" - ] - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 0 - } - Property { - name: "easing" - type: "QEasingCurve" - read: "easing" - write: "setEasing" - notify: "easingChanged" - index: 1 - } - Property { - name: "path" - type: "QQuickPath" - isPointer: true - read: "path" - write: "setPath" - notify: "pathChanged" - index: 2 - } - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTargetObject" - notify: "targetChanged" - index: 3 - } - Property { - name: "orientation" - type: "Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 4 - } - Property { - name: "anchorPoint" - type: "QPointF" - read: "anchorPoint" - write: "setAnchorPoint" - notify: "anchorPointChanged" - index: 5 - } - Property { - name: "orientationEntryDuration" - type: "int" - read: "orientationEntryDuration" - write: "setOrientationEntryDuration" - notify: "orientationEntryDurationChanged" - index: 6 - } - Property { - name: "orientationExitDuration" - type: "int" - read: "orientationExitDuration" - write: "setOrientationExitDuration" - notify: "orientationExitDurationChanged" - index: 7 - } - Property { - name: "endRotation" - type: "double" - read: "endRotation" - write: "setEndRotation" - notify: "endRotationChanged" - index: 8 - } - Signal { - name: "durationChanged" - Parameter { type: "int" } - } - Signal { - name: "easingChanged" - Parameter { type: "QEasingCurve" } - } - Signal { name: "pathChanged" } - Signal { name: "targetChanged" } - Signal { - name: "orientationChanged" - Parameter { type: "Orientation" } - } - Signal { - name: "anchorPointChanged" - Parameter { type: "QPointF" } - } - Signal { - name: "orientationEntryDurationChanged" - Parameter { type: "double" } - } - Signal { - name: "orientationExitDurationChanged" - Parameter { type: "double" } - } - Signal { - name: "endRotationChanged" - Parameter { type: "double" } - } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathArc" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: [ - "QtQuick/PathArc 2.0", - "QtQuick/PathArc 2.9", - "QtQuick/PathArc 6.0" - ] - exportMetaObjectRevisions: [512, 521, 1536] - Enum { - name: "ArcDirection" - values: ["Clockwise", "Counterclockwise"] - } - Property { - name: "radiusX" - type: "double" - read: "radiusX" - write: "setRadiusX" - notify: "radiusXChanged" - index: 0 - } - Property { - name: "radiusY" - type: "double" - read: "radiusY" - write: "setRadiusY" - notify: "radiusYChanged" - index: 1 - } - Property { - name: "useLargeArc" - type: "bool" - read: "useLargeArc" - write: "setUseLargeArc" - notify: "useLargeArcChanged" - index: 2 - } - Property { - name: "direction" - type: "ArcDirection" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 3 - } - Property { - name: "xAxisRotation" - revision: 521 - type: "double" - read: "xAxisRotation" - write: "setXAxisRotation" - notify: "xAxisRotationChanged" - index: 4 - } - Signal { name: "radiusXChanged" } - Signal { name: "radiusYChanged" } - Signal { name: "useLargeArcChanged" } - Signal { name: "directionChanged" } - Signal { name: "xAxisRotationChanged"; revision: 521 } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathAttribute" - accessSemantics: "reference" - prototype: "QQuickPathElement" - exports: ["QtQuick/PathAttribute 2.0", "QtQuick/PathAttribute 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 0 - } - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 1 - } - Signal { name: "nameChanged" } - Signal { name: "valueChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathCatmullRomCurve" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathCurve 2.0", "QtQuick/PathCurve 6.0"] - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathCubic" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathCubic 2.0", "QtQuick/PathCubic 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "control1X" - type: "double" - read: "control1X" - write: "setControl1X" - notify: "control1XChanged" - index: 0 - } - Property { - name: "control1Y" - type: "double" - read: "control1Y" - write: "setControl1Y" - notify: "control1YChanged" - index: 1 - } - Property { - name: "control2X" - type: "double" - read: "control2X" - write: "setControl2X" - notify: "control2XChanged" - index: 2 - } - Property { - name: "control2Y" - type: "double" - read: "control2Y" - write: "setControl2Y" - notify: "control2YChanged" - index: 3 - } - Property { - name: "relativeControl1X" - type: "double" - read: "relativeControl1X" - write: "setRelativeControl1X" - notify: "relativeControl1XChanged" - index: 4 - } - Property { - name: "relativeControl1Y" - type: "double" - read: "relativeControl1Y" - write: "setRelativeControl1Y" - notify: "relativeControl1YChanged" - index: 5 - } - Property { - name: "relativeControl2X" - type: "double" - read: "relativeControl2X" - write: "setRelativeControl2X" - notify: "relativeControl2XChanged" - index: 6 - } - Property { - name: "relativeControl2Y" - type: "double" - read: "relativeControl2Y" - write: "setRelativeControl2Y" - notify: "relativeControl2YChanged" - index: 7 - } - Signal { name: "control1XChanged" } - Signal { name: "control1YChanged" } - Signal { name: "control2XChanged" } - Signal { name: "control2YChanged" } - Signal { name: "relativeControl1XChanged" } - Signal { name: "relativeControl1YChanged" } - Signal { name: "relativeControl2XChanged" } - Signal { name: "relativeControl2YChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathElement" - accessSemantics: "reference" - prototype: "QObject" - Signal { name: "changed" } - } - Component { - file: "private/qquickpathinterpolator_p.h" - name: "QQuickPathInterpolator" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/PathInterpolator 2.0", - "QtQuick/PathInterpolator 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "path" - type: "QQuickPath" - isPointer: true - read: "path" - write: "setPath" - notify: "pathChanged" - index: 0 - } - Property { - name: "progress" - type: "double" - read: "progress" - write: "setProgress" - notify: "progressChanged" - index: 1 - } - Property { name: "x"; type: "double"; read: "x"; notify: "xChanged"; index: 2; isReadonly: true } - Property { name: "y"; type: "double"; read: "y"; notify: "yChanged"; index: 3; isReadonly: true } - Property { - name: "angle" - type: "double" - read: "angle" - notify: "angleChanged" - index: 4 - isReadonly: true - } - Signal { name: "pathChanged" } - Signal { name: "progressChanged" } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "angleChanged" } - Method { name: "_q_pathUpdated" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathLine" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathLine 2.0", "QtQuick/PathLine 6.0"] - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathMove" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathMove 2.9", "QtQuick/PathMove 6.0"] - exportMetaObjectRevisions: [521, 1536] - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathMultiline" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathMultiline 2.14", "QtQuick/PathMultiline 6.0"] - exportMetaObjectRevisions: [526, 1536] - Property { - name: "start" - type: "QPointF" - read: "start" - notify: "startChanged" - index: 0 - isReadonly: true - } - Property { - name: "paths" - type: "QVariant" - read: "paths" - write: "setPaths" - notify: "pathsChanged" - index: 1 - } - Signal { name: "pathsChanged" } - Signal { name: "startChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathPercent" - accessSemantics: "reference" - prototype: "QQuickPathElement" - exports: ["QtQuick/PathPercent 2.0", "QtQuick/PathPercent 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "value" - type: "double" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 0 - } - Signal { name: "valueChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathPolyline" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathPolyline 2.14", "QtQuick/PathPolyline 6.0"] - exportMetaObjectRevisions: [526, 1536] - Property { - name: "start" - type: "QPointF" - read: "start" - notify: "startChanged" - index: 0 - isReadonly: true - } - Property { - name: "path" - type: "QVariant" - read: "path" - write: "setPath" - notify: "pathChanged" - index: 1 - } - Signal { name: "pathChanged" } - Signal { name: "startChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathQuad" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathQuad 2.0", "QtQuick/PathQuad 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "controlX" - type: "double" - read: "controlX" - write: "setControlX" - notify: "controlXChanged" - index: 0 - } - Property { - name: "controlY" - type: "double" - read: "controlY" - write: "setControlY" - notify: "controlYChanged" - index: 1 - } - Property { - name: "relativeControlX" - type: "double" - read: "relativeControlX" - write: "setRelativeControlX" - notify: "relativeControlXChanged" - index: 2 - } - Property { - name: "relativeControlY" - type: "double" - read: "relativeControlY" - write: "setRelativeControlY" - notify: "relativeControlYChanged" - index: 3 - } - Signal { name: "controlXChanged" } - Signal { name: "controlYChanged" } - Signal { name: "relativeControlXChanged" } - Signal { name: "relativeControlYChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathSvg" - accessSemantics: "reference" - prototype: "QQuickCurve" - exports: ["QtQuick/PathSvg 2.0", "QtQuick/PathSvg 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "path" - type: "QString" - read: "path" - write: "setPath" - notify: "pathChanged" - index: 0 - } - Signal { name: "pathChanged" } - } - Component { - file: "private/qquickpath_p.h" - name: "QQuickPathText" - accessSemantics: "reference" - prototype: "QQuickPathElement" - exports: ["QtQuick/PathText 2.15", "QtQuick/PathText 6.0"] - exportMetaObjectRevisions: [527, 1536] - Property { name: "x"; type: "double"; read: "x"; write: "setX"; notify: "xChanged"; index: 0 } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; notify: "yChanged"; index: 1 } - Property { - name: "width" - type: "double" - read: "width" - notify: "changed" - index: 2 - isReadonly: true - } - Property { - name: "height" - type: "double" - read: "height" - notify: "changed" - index: 3 - isReadonly: true - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 4 - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 5 - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "textChanged" } - Signal { name: "fontChanged" } - Method { name: "invalidate" } - } - Component { - file: "private/qquickpathview_p.h" - name: "QQuickPathView" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/PathView 2.0", - "QtQuick/PathView 2.1", - "QtQuick/PathView 2.4", - "QtQuick/PathView 2.7", - "QtQuick/PathView 2.11", - "QtQuick/PathView 2.13", - "QtQuick/PathView 6.0", - "QtQuick/PathView 6.3", - "QtQuick/PathView 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 519, - 523, - 525, - 1536, - 1539, - 1543 - ] - attachedType: "QQuickPathViewAttached" - Enum { - name: "HighlightRangeMode" - values: ["NoHighlightRange", "ApplyRange", "StrictlyEnforceRange"] - } - Enum { - name: "SnapMode" - values: ["NoSnap", "SnapToItem", "SnapOneItem"] - } - Enum { - name: "MovementDirection" - values: ["Shortest", "Negative", "Positive"] - } - Enum { - name: "PositionMode" - values: ["Beginning", "Center", "End", "Contain", "SnapPosition"] - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "path" - type: "QQuickPath" - isPointer: true - read: "path" - write: "setPath" - notify: "pathChanged" - index: 1 - } - Property { - name: "currentIndex" - type: "int" - read: "currentIndex" - write: "setCurrentIndex" - notify: "currentIndexChanged" - index: 2 - } - Property { - name: "currentItem" - type: "QQuickItem" - isPointer: true - read: "currentItem" - notify: "currentItemChanged" - index: 3 - isReadonly: true - } - Property { - name: "offset" - type: "double" - read: "offset" - write: "setOffset" - notify: "offsetChanged" - index: 4 - } - Property { - name: "highlight" - type: "QQmlComponent" - isPointer: true - read: "highlight" - write: "setHighlight" - notify: "highlightChanged" - index: 5 - } - Property { - name: "highlightItem" - type: "QQuickItem" - isPointer: true - read: "highlightItem" - notify: "highlightItemChanged" - index: 6 - isReadonly: true - } - Property { - name: "preferredHighlightBegin" - type: "double" - read: "preferredHighlightBegin" - write: "setPreferredHighlightBegin" - notify: "preferredHighlightBeginChanged" - index: 7 - } - Property { - name: "preferredHighlightEnd" - type: "double" - read: "preferredHighlightEnd" - write: "setPreferredHighlightEnd" - notify: "preferredHighlightEndChanged" - index: 8 - } - Property { - name: "highlightRangeMode" - type: "HighlightRangeMode" - read: "highlightRangeMode" - write: "setHighlightRangeMode" - notify: "highlightRangeModeChanged" - index: 9 - } - Property { - name: "highlightMoveDuration" - type: "int" - read: "highlightMoveDuration" - write: "setHighlightMoveDuration" - notify: "highlightMoveDurationChanged" - index: 10 - } - Property { - name: "dragMargin" - type: "double" - read: "dragMargin" - write: "setDragMargin" - notify: "dragMarginChanged" - index: 11 - } - Property { - name: "maximumFlickVelocity" - type: "double" - read: "maximumFlickVelocity" - write: "setMaximumFlickVelocity" - notify: "maximumFlickVelocityChanged" - index: 12 - } - Property { - name: "flickDeceleration" - type: "double" - read: "flickDeceleration" - write: "setFlickDeceleration" - notify: "flickDecelerationChanged" - index: 13 - } - Property { - name: "interactive" - type: "bool" - read: "isInteractive" - write: "setInteractive" - notify: "interactiveChanged" - index: 14 - } - Property { - name: "moving" - type: "bool" - read: "isMoving" - notify: "movingChanged" - index: 15 - isReadonly: true - } - Property { - name: "flicking" - type: "bool" - read: "isFlicking" - notify: "flickingChanged" - index: 16 - isReadonly: true - } - Property { - name: "dragging" - type: "bool" - read: "isDragging" - notify: "draggingChanged" - index: 17 - isReadonly: true - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 18 - isReadonly: true - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 19 - } - Property { - name: "pathItemCount" - type: "int" - read: "pathItemCount" - write: "setPathItemCount" - reset: "resetPathItemCount" - notify: "pathItemCountChanged" - index: 20 - } - Property { - name: "snapMode" - type: "SnapMode" - read: "snapMode" - write: "setSnapMode" - notify: "snapModeChanged" - index: 21 - } - Property { - name: "movementDirection" - revision: 519 - type: "MovementDirection" - read: "movementDirection" - write: "setMovementDirection" - notify: "movementDirectionChanged" - index: 22 - } - Property { - name: "cacheItemCount" - type: "int" - read: "cacheItemCount" - write: "setCacheItemCount" - notify: "cacheItemCountChanged" - index: 23 - } - Signal { name: "currentIndexChanged" } - Signal { name: "currentItemChanged" } - Signal { name: "offsetChanged" } - Signal { name: "modelChanged" } - Signal { name: "countChanged" } - Signal { name: "pathChanged" } - Signal { name: "preferredHighlightBeginChanged" } - Signal { name: "preferredHighlightEndChanged" } - Signal { name: "highlightRangeModeChanged" } - Signal { name: "dragMarginChanged" } - Signal { name: "snapPositionChanged" } - Signal { name: "delegateChanged" } - Signal { name: "pathItemCountChanged" } - Signal { name: "maximumFlickVelocityChanged" } - Signal { name: "flickDecelerationChanged" } - Signal { name: "interactiveChanged" } - Signal { name: "movingChanged" } - Signal { name: "flickingChanged" } - Signal { name: "draggingChanged" } - Signal { name: "highlightChanged" } - Signal { name: "highlightItemChanged" } - Signal { name: "highlightMoveDurationChanged" } - Signal { name: "movementStarted" } - Signal { name: "movementEnded" } - Signal { name: "movementDirectionChanged"; revision: 519 } - Signal { name: "flickStarted" } - Signal { name: "flickEnded" } - Signal { name: "dragStarted" } - Signal { name: "dragEnded" } - Signal { name: "snapModeChanged" } - Signal { name: "cacheItemCountChanged" } - Method { name: "incrementCurrentIndex" } - Method { name: "decrementCurrentIndex" } - Method { name: "refill" } - Method { name: "ticked" } - Method { name: "movementEnding" } - Method { - name: "modelUpdated" - Parameter { name: "changeSet"; type: "QQmlChangeSet" } - Parameter { name: "reset"; type: "bool" } - } - Method { - name: "createdItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "initItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "destroyingItem" - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { name: "pathUpdated" } - Method { - name: "positionViewAtIndex" - Parameter { name: "index"; type: "int" } - Parameter { name: "mode"; type: "int" } - } - Method { - name: "indexAt" - type: "int" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "itemAtIndex" - revision: 525 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquickpathview_p.h" - name: "QQuickPathViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "view" - type: "QQuickPathView" - isPointer: true - read: "view" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "isCurrentItem" - type: "bool" - read: "isCurrentItem" - notify: "currentItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "onPath" - type: "bool" - read: "isOnPath" - notify: "pathChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "currentItemChanged" } - Signal { name: "pathChanged" } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickPauseAnimation" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/PauseAnimation 2.0", - "QtQuick/PauseAnimation 2.12", - "QtQuick/PauseAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 0 - } - Signal { - name: "durationChanged" - Parameter { type: "int" } - } - } - Component { - file: "private/qquickrectangle_p.h" - name: "QQuickPen" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "width" - type: "double" - read: "width" - write: "setWidth" - notify: "widthChanged" - index: 0 - isFinal: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 1 - isFinal: true - } - Property { - name: "pixelAligned" - type: "bool" - read: "pixelAligned" - write: "setPixelAligned" - notify: "pixelAlignedChanged" - index: 2 - isFinal: true - } - Signal { name: "widthChanged" } - Signal { name: "colorChanged" } - Signal { name: "pixelAlignedChanged" } - } - Component { - file: "private/qquickpincharea_p.h" - name: "QQuickPinch" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/Pinch 2.0", "QtQuick/Pinch 6.0"] - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "Axis" - values: ["NoDrag", "XAxis", "YAxis", "XAndYAxis", "XandYAxis"] - } - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTarget" - reset: "resetTarget" - notify: "targetChanged" - index: 0 - } - Property { - name: "minimumScale" - type: "double" - read: "minimumScale" - write: "setMinimumScale" - notify: "minimumScaleChanged" - index: 1 - } - Property { - name: "maximumScale" - type: "double" - read: "maximumScale" - write: "setMaximumScale" - notify: "maximumScaleChanged" - index: 2 - } - Property { - name: "minimumRotation" - type: "double" - read: "minimumRotation" - write: "setMinimumRotation" - notify: "minimumRotationChanged" - index: 3 - } - Property { - name: "maximumRotation" - type: "double" - read: "maximumRotation" - write: "setMaximumRotation" - notify: "maximumRotationChanged" - index: 4 - } - Property { - name: "dragAxis" - type: "Axis" - read: "axis" - write: "setAxis" - notify: "dragAxisChanged" - index: 5 - } - Property { - name: "minimumX" - type: "double" - read: "xmin" - write: "setXmin" - notify: "minimumXChanged" - index: 6 - } - Property { - name: "maximumX" - type: "double" - read: "xmax" - write: "setXmax" - notify: "maximumXChanged" - index: 7 - } - Property { - name: "minimumY" - type: "double" - read: "ymin" - write: "setYmin" - notify: "minimumYChanged" - index: 8 - } - Property { - name: "maximumY" - type: "double" - read: "ymax" - write: "setYmax" - notify: "maximumYChanged" - index: 9 - } - Property { - name: "active" - type: "bool" - read: "active" - notify: "activeChanged" - index: 10 - isReadonly: true - } - Signal { name: "targetChanged" } - Signal { name: "minimumScaleChanged" } - Signal { name: "maximumScaleChanged" } - Signal { name: "minimumRotationChanged" } - Signal { name: "maximumRotationChanged" } - Signal { name: "dragAxisChanged" } - Signal { name: "minimumXChanged" } - Signal { name: "maximumXChanged" } - Signal { name: "minimumYChanged" } - Signal { name: "maximumYChanged" } - Signal { name: "activeChanged" } - } - Component { - file: "private/qquickpincharea_p.h" - name: "QQuickPinchArea" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/PinchArea 2.0", - "QtQuick/PinchArea 2.1", - "QtQuick/PinchArea 2.4", - "QtQuick/PinchArea 2.5", - "QtQuick/PinchArea 2.7", - "QtQuick/PinchArea 2.11", - "QtQuick/PinchArea 6.0", - "QtQuick/PinchArea 6.3", - "QtQuick/PinchArea 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 517, - 519, - 523, - 1536, - 1539, - 1543 - ] - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Property { - name: "pinch" - type: "QQuickPinch" - isPointer: true - read: "pinch" - index: 1 - isReadonly: true - isConstant: true - } - Signal { name: "enabledChanged" } - Signal { - name: "pinchStarted" - Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } - } - Signal { - name: "pinchUpdated" - Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } - } - Signal { - name: "pinchFinished" - Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } - } - Signal { - name: "smartZoom" - revision: 517 - Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } - } - } - Component { - file: "private/qquickpincharea_p.h" - name: "QQuickPinchEvent" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "center" - type: "QPointF" - read: "center" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "startCenter" - type: "QPointF" - read: "startCenter" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "previousCenter" - type: "QPointF" - read: "previousCenter" - index: 2 - isReadonly: true - isFinal: true - } - Property { name: "scale"; type: "double"; read: "scale"; index: 3; isReadonly: true; isFinal: true } - Property { - name: "previousScale" - type: "double" - read: "previousScale" - index: 4 - isReadonly: true - isFinal: true - } - Property { name: "angle"; type: "double"; read: "angle"; index: 5; isReadonly: true; isFinal: true } - Property { - name: "previousAngle" - type: "double" - read: "previousAngle" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "rotation" - type: "double" - read: "rotation" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "point1" - type: "QPointF" - read: "point1" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "startPoint1" - type: "QPointF" - read: "startPoint1" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "point2" - type: "QPointF" - read: "point2" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "startPoint2" - type: "QPointF" - read: "startPoint2" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "pointCount" - type: "int" - read: "pointCount" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "accepted" - type: "bool" - read: "accepted" - write: "setAccepted" - index: 13 - isFinal: true - } - } - Component { - file: "private/qquickpinchhandler_p.h" - name: "QQuickPinchHandler" - accessSemantics: "reference" - prototype: "QQuickMultiPointHandler" - exports: [ - "QtQuick/PinchHandler 2.12", - "QtQuick/PinchHandler 2.15", - "QtQuick/PinchHandler 6.0", - "QtQuick/PinchHandler 6.3", - "QtQuick/PinchHandler 6.5" - ] - exportMetaObjectRevisions: [524, 527, 1536, 1539, 1541] - Property { - name: "scaleAxis" - type: "QQuickDragAxis" - isPointer: true - read: "scaleAxis" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "minimumScale" - type: "double" - read: "minimumScale" - write: "setMinimumScale" - notify: "minimumScaleChanged" - index: 1 - } - Property { - name: "maximumScale" - type: "double" - read: "maximumScale" - write: "setMaximumScale" - notify: "maximumScaleChanged" - index: 2 - } - Property { - name: "scale" - type: "double" - read: "scale" - notify: "updated" - index: 3 - isReadonly: true - } - Property { - name: "activeScale" - type: "double" - read: "activeScale" - notify: "scaleChanged" - index: 4 - isReadonly: true - } - Property { - name: "persistentScale" - type: "double" - read: "persistentScale" - write: "setPersistentScale" - notify: "scaleChanged" - index: 5 - } - Property { - name: "rotationAxis" - type: "QQuickDragAxis" - isPointer: true - read: "rotationAxis" - index: 6 - isReadonly: true - isConstant: true - } - Property { - name: "minimumRotation" - type: "double" - read: "minimumRotation" - write: "setMinimumRotation" - notify: "minimumRotationChanged" - index: 7 - } - Property { - name: "maximumRotation" - type: "double" - read: "maximumRotation" - write: "setMaximumRotation" - notify: "maximumRotationChanged" - index: 8 - } - Property { - name: "rotation" - type: "double" - read: "rotation" - notify: "updated" - index: 9 - isReadonly: true - } - Property { - name: "activeRotation" - type: "double" - read: "activeRotation" - notify: "rotationChanged" - index: 10 - isReadonly: true - } - Property { - name: "persistentRotation" - type: "double" - read: "persistentRotation" - write: "setPersistentRotation" - notify: "rotationChanged" - index: 11 - } - Property { - name: "xAxis" - type: "QQuickDragAxis" - isPointer: true - read: "xAxis" - index: 12 - isReadonly: true - isConstant: true - } - Property { - name: "yAxis" - type: "QQuickDragAxis" - isPointer: true - read: "yAxis" - index: 13 - isReadonly: true - isConstant: true - } - Property { - name: "translation" - type: "QVector2D" - read: "translation" - notify: "updated" - index: 14 - isReadonly: true - } - Property { - name: "activeTranslation" - revision: 1541 - type: "QPointF" - read: "activeTranslation" - notify: "translationChanged" - index: 15 - isReadonly: true - } - Property { - name: "persistentTranslation" - revision: 1541 - type: "QPointF" - read: "persistentTranslation" - write: "setPersistentTranslation" - notify: "translationChanged" - index: 16 - } - Signal { name: "minimumScaleChanged" } - Signal { name: "maximumScaleChanged" } - Signal { name: "minimumRotationChanged" } - Signal { name: "maximumRotationChanged" } - Signal { name: "updated" } - Signal { - name: "scaleChanged" - Parameter { name: "delta"; type: "double" } - } - Signal { - name: "rotationChanged" - Parameter { name: "delta"; type: "double" } - } - Signal { - name: "translationChanged" - Parameter { name: "delta"; type: "QVector2D" } - } - } - Component { - file: "private/qquickpointhandler_p.h" - name: "QQuickPointHandler" - accessSemantics: "reference" - prototype: "QQuickSinglePointHandler" - exports: [ - "QtQuick/PointHandler 2.12", - "QtQuick/PointHandler 2.15", - "QtQuick/PointHandler 6.0", - "QtQuick/PointHandler 6.3" - ] - exportMetaObjectRevisions: [524, 527, 1536, 1539] - Property { - name: "translation" - type: "QVector2D" - read: "translation" - notify: "translationChanged" - index: 0 - isReadonly: true - } - Signal { name: "translationChanged" } - } - Component { - file: "private/qquickpointerdevicehandler_p.h" - name: "QQuickPointerDeviceHandler" - accessSemantics: "reference" - parentProperty: "parent" - prototype: "QQuickPointerHandler" - Property { - name: "acceptedDevices" - type: "QInputDevice::DeviceTypes" - read: "acceptedDevices" - write: "setAcceptedDevices" - notify: "acceptedDevicesChanged" - index: 0 - } - Property { - name: "acceptedPointerTypes" - type: "QPointingDevice::PointerTypes" - read: "acceptedPointerTypes" - write: "setAcceptedPointerTypes" - notify: "acceptedPointerTypesChanged" - index: 1 - } - Property { - name: "acceptedButtons" - type: "Qt::MouseButtons" - read: "acceptedButtons" - write: "setAcceptedButtons" - notify: "acceptedButtonsChanged" - index: 2 - } - Property { - name: "acceptedModifiers" - type: "Qt::KeyboardModifiers" - read: "acceptedModifiers" - write: "setAcceptedModifiers" - notify: "acceptedModifiersChanged" - index: 3 - } - Signal { name: "acceptedDevicesChanged" } - Signal { name: "acceptedPointerTypesChanged" } - Signal { name: "acceptedButtonsChanged" } - Signal { name: "acceptedModifiersChanged" } - Method { - name: "setAcceptedDevices" - Parameter { name: "acceptedDevices"; type: "QInputDevice::DeviceTypes" } - } - Method { - name: "setAcceptedPointerTypes" - Parameter { name: "acceptedPointerTypes"; type: "QPointingDevice::PointerTypes" } - } - Method { - name: "setAcceptedButtons" - Parameter { name: "buttons"; type: "Qt::MouseButtons" } - } - Method { - name: "setAcceptedModifiers" - Parameter { name: "acceptedModifiers"; type: "Qt::KeyboardModifiers" } - } - } - Component { - file: "private/qquickpointerhandler_p.h" - name: "QQuickPointerHandler" - accessSemantics: "reference" - parentProperty: "parent" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick/PointerHandler 2.12", - "QtQuick/PointerHandler 2.15", - "QtQuick/PointerHandler 6.0", - "QtQuick/PointerHandler 6.3" - ] - isCreatable: false - exportMetaObjectRevisions: [524, 527, 1536, 1539] - Enum { - name: "GrabPermissions" - alias: "GrabPermission" - isFlag: true - values: [ - "TakeOverForbidden", - "CanTakeOverFromHandlersOfSameType", - "CanTakeOverFromHandlersOfDifferentType", - "CanTakeOverFromItems", - "CanTakeOverFromAnything", - "ApprovesTakeOverByHandlersOfSameType", - "ApprovesTakeOverByHandlersOfDifferentType", - "ApprovesTakeOverByItems", - "ApprovesCancellation", - "ApprovesTakeOverByAnything" - ] - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Property { - name: "active" - type: "bool" - read: "active" - notify: "activeChanged" - index: 1 - isReadonly: true - } - Property { - name: "target" - type: "QQuickItem" - isPointer: true - read: "target" - write: "setTarget" - notify: "targetChanged" - index: 2 - } - Property { - name: "parent" - type: "QQuickItem" - isPointer: true - read: "parentItem" - write: "setParentItem" - notify: "parentChanged" - index: 3 - } - Property { - name: "grabPermissions" - type: "GrabPermissions" - read: "grabPermissions" - write: "setGrabPermissions" - notify: "grabPermissionChanged" - index: 4 - } - Property { - name: "margin" - type: "double" - read: "margin" - write: "setMargin" - notify: "marginChanged" - index: 5 - } - Property { - name: "dragThreshold" - revision: 527 - type: "int" - read: "dragThreshold" - write: "setDragThreshold" - reset: "resetDragThreshold" - notify: "dragThresholdChanged" - index: 6 - } - Property { - name: "cursorShape" - revision: 527 - type: "Qt::CursorShape" - read: "cursorShape" - write: "setCursorShape" - reset: "resetCursorShape" - notify: "cursorShapeChanged" - index: 7 - } - Signal { name: "enabledChanged" } - Signal { name: "activeChanged" } - Signal { name: "targetChanged" } - Signal { name: "marginChanged" } - Signal { name: "dragThresholdChanged"; revision: 527 } - Signal { - name: "grabChanged" - Parameter { name: "transition"; type: "QPointingDevice::GrabTransition" } - Parameter { name: "point"; type: "QEventPoint" } - } - Signal { name: "grabPermissionChanged" } - Signal { - name: "canceled" - Parameter { name: "point"; type: "QEventPoint" } - } - Signal { name: "cursorShapeChanged"; revision: 527 } - Signal { name: "parentChanged"; revision: 1539 } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickPositionerAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "isFirstItem" - type: "bool" - read: "isFirstItem" - notify: "isFirstItemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "isLastItem" - type: "bool" - read: "isLastItem" - notify: "isLastItemChanged" - index: 2 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "isFirstItemChanged" } - Signal { name: "isLastItemChanged" } - } - Component { - file: "private/qquicktextedit_p.h" - name: "QQuickPre64TextEdit" - accessSemantics: "reference" - prototype: "QQuickTextEdit" - exports: [ - "QtQuick/TextEdit 2.0", - "QtQuick/TextEdit 2.1", - "QtQuick/TextEdit 2.2", - "QtQuick/TextEdit 2.3", - "QtQuick/TextEdit 2.4", - "QtQuick/TextEdit 2.6", - "QtQuick/TextEdit 2.7", - "QtQuick/TextEdit 2.10", - "QtQuick/TextEdit 2.11", - "QtQuick/TextEdit 6.0", - "QtQuick/TextEdit 6.2", - "QtQuick/TextEdit 6.3" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 518, - 519, - 522, - 523, - 1536, - 1538, - 1539 - ] - } - Component { - file: "private/qquicktextinput_p.h" - name: "QQuickPre64TextInput" - accessSemantics: "reference" - prototype: "QQuickTextInput" - exports: [ - "QtQuick/TextInput 2.0", - "QtQuick/TextInput 2.1", - "QtQuick/TextInput 2.2", - "QtQuick/TextInput 2.4", - "QtQuick/TextInput 2.6", - "QtQuick/TextInput 2.7", - "QtQuick/TextInput 2.9", - "QtQuick/TextInput 2.11", - "QtQuick/TextInput 6.0", - "QtQuick/TextInput 6.2", - "QtQuick/TextInput 6.3" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539 - ] - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickPropertyAction" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/PropertyAction 2.0", - "QtQuick/PropertyAction 2.12", - "QtQuick/PropertyAction 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "target" - type: "QObject" - isPointer: true - read: "target" - write: "setTargetObject" - notify: "targetChanged" - index: 0 - } - Property { - name: "property" - type: "QString" - read: "property" - write: "setProperty" - notify: "propertyChanged" - index: 1 - } - Property { - name: "properties" - type: "QString" - read: "properties" - write: "setProperties" - notify: "propertiesChanged" - index: 2 - } - Property { - name: "targets" - type: "QObject" - isList: true - read: "targets" - index: 3 - isReadonly: true - } - Property { - name: "exclude" - type: "QObject" - isList: true - read: "exclude" - index: 4 - isReadonly: true - } - Property { - name: "value" - type: "QVariant" - read: "value" - write: "setValue" - notify: "valueChanged" - index: 5 - } - Signal { - name: "valueChanged" - Parameter { type: "QVariant" } - } - Signal { - name: "propertiesChanged" - Parameter { type: "QString" } - } - Signal { name: "targetChanged" } - Signal { name: "propertyChanged" } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickPropertyAnimation" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/PropertyAnimation 2.0", - "QtQuick/PropertyAnimation 2.12", - "QtQuick/PropertyAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 0 - } - Property { - name: "from" - type: "QVariant" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 1 - } - Property { name: "to"; type: "QVariant"; read: "to"; write: "setTo"; notify: "toChanged"; index: 2 } - Property { - name: "easing" - type: "QEasingCurve" - read: "easing" - write: "setEasing" - notify: "easingChanged" - index: 3 - } - Property { - name: "target" - type: "QObject" - isPointer: true - read: "target" - write: "setTargetObject" - notify: "targetChanged" - index: 4 - } - Property { - name: "property" - type: "QString" - read: "property" - write: "setProperty" - notify: "propertyChanged" - index: 5 - } - Property { - name: "properties" - type: "QString" - read: "properties" - write: "setProperties" - notify: "propertiesChanged" - index: 6 - } - Property { - name: "targets" - type: "QObject" - isList: true - read: "targets" - index: 7 - isReadonly: true - } - Property { - name: "exclude" - type: "QObject" - isList: true - read: "exclude" - index: 8 - isReadonly: true - } - Signal { - name: "durationChanged" - Parameter { type: "int" } - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { - name: "easingChanged" - Parameter { type: "QEasingCurve" } - } - Signal { - name: "propertiesChanged" - Parameter { type: "QString" } - } - Signal { name: "targetChanged" } - Signal { name: "propertyChanged" } - } - Component { - file: "private/qquickpropertychanges_p.h" - name: "QQuickPropertyChanges" - accessSemantics: "reference" - prototype: "QQuickStateOperation" - immediateNames: [ - "target", - "restoreEntryValues", - "explicit", - "objectName" - ] - exports: [ - "QtQuick/PropertyChanges 2.0", - "QtQuick/PropertyChanges 6.0" - ] - hasCustomParser: true - exportMetaObjectRevisions: [512, 1536] - Property { - name: "target" - type: "QObject" - isPointer: true - read: "object" - write: "setObject" - notify: "objectChanged" - index: 0 - } - Property { - name: "restoreEntryValues" - type: "bool" - read: "restoreEntryValues" - write: "setRestoreEntryValues" - notify: "restoreEntryValuesChanged" - index: 1 - } - Property { - name: "explicit" - type: "bool" - read: "isExplicit" - write: "setIsExplicit" - notify: "isExplicitChanged" - index: 2 - } - Signal { name: "objectChanged" } - Signal { name: "restoreEntryValuesChanged" } - Signal { name: "isExplicitChanged" } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuaternion" - accessSemantics: "value" - extension: "QQuickQuaternionValueType" - exports: ["QtQuick/quaternion 2.0", "QtQuick/quaternion 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickQuaternionValueType" - accessSemantics: "value" - Property { - name: "scalar" - type: "double" - read: "scalar" - write: "setScalar" - index: 0 - isFinal: true - } - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 1; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 2; isFinal: true } - Property { name: "z"; type: "double"; read: "z"; write: "setZ"; index: 3; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "dotProduct" - type: "double" - Parameter { name: "q"; type: "QQuaternion" } - } - Method { - name: "times" - type: "QQuaternion" - Parameter { name: "q"; type: "QQuaternion" } - } - Method { - name: "times" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "times" - type: "QQuaternion" - Parameter { name: "factor"; type: "double" } - } - Method { - name: "plus" - type: "QQuaternion" - Parameter { name: "q"; type: "QQuaternion" } - } - Method { - name: "minus" - type: "QQuaternion" - Parameter { name: "q"; type: "QQuaternion" } - } - Method { name: "normalized"; type: "QQuaternion" } - Method { name: "inverted"; type: "QQuaternion" } - Method { name: "conjugated"; type: "QQuaternion" } - Method { name: "length"; type: "double" } - Method { name: "toEulerAngles"; type: "QVector3D" } - Method { name: "toVector4d"; type: "QVector4D" } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "q"; type: "QQuaternion" } - Parameter { name: "epsilon"; type: "double" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "q"; type: "QQuaternion" } - } - } - Component { - file: "private/qquickrectangle_p.h" - name: "QQuickRectangle" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/Rectangle 2.0", - "QtQuick/Rectangle 2.1", - "QtQuick/Rectangle 2.4", - "QtQuick/Rectangle 2.7", - "QtQuick/Rectangle 2.11", - "QtQuick/Rectangle 6.0", - "QtQuick/Rectangle 6.3", - "QtQuick/Rectangle 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 0 - } - Property { - name: "gradient" - type: "QJSValue" - read: "gradient" - write: "setGradient" - reset: "resetGradient" - index: 1 - } - Property { - name: "border" - type: "QQuickPen" - isPointer: true - read: "border" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "radius" - type: "double" - read: "radius" - write: "setRadius" - notify: "radiusChanged" - index: 3 - } - Property { - name: "topLeftRadius" - revision: 1543 - type: "double" - read: "topLeftRadius" - write: "setTopLeftRadius" - reset: "resetTopLeftRadius" - notify: "topLeftRadiusChanged" - index: 4 - isFinal: true - } - Property { - name: "topRightRadius" - revision: 1543 - type: "double" - read: "topRightRadius" - write: "setTopRightRadius" - reset: "resetTopRightRadius" - notify: "topRightRadiusChanged" - index: 5 - isFinal: true - } - Property { - name: "bottomLeftRadius" - revision: 1543 - type: "double" - read: "bottomLeftRadius" - write: "setBottomLeftRadius" - reset: "resetBottomLeftRadius" - notify: "bottomLeftRadiusChanged" - index: 6 - isFinal: true - } - Property { - name: "bottomRightRadius" - revision: 1543 - type: "double" - read: "bottomRightRadius" - write: "setBottomRightRadius" - reset: "resetBottomRightRadius" - notify: "bottomRightRadiusChanged" - index: 7 - isFinal: true - } - Signal { name: "colorChanged" } - Signal { name: "radiusChanged" } - Signal { name: "topLeftRadiusChanged"; revision: 1543 } - Signal { name: "topRightRadiusChanged"; revision: 1543 } - Signal { name: "bottomLeftRadiusChanged"; revision: 1543 } - Signal { name: "bottomRightRadiusChanged"; revision: 1543 } - Method { name: "doUpdate" } - } - Component { - file: "private/qquickrepeater_p.h" - name: "QQuickRepeater" - accessSemantics: "reference" - defaultProperty: "delegate" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/Repeater 2.0", - "QtQuick/Repeater 2.1", - "QtQuick/Repeater 2.4", - "QtQuick/Repeater 2.7", - "QtQuick/Repeater 2.11", - "QtQuick/Repeater 6.0", - "QtQuick/Repeater 6.3", - "QtQuick/Repeater 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 2 - isReadonly: true - } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "countChanged" } - Signal { - name: "itemAdded" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Signal { - name: "itemRemoved" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "createdItem" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "initItem" - Parameter { type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "modelUpdated" - Parameter { name: "changeSet"; type: "QQmlChangeSet" } - Parameter { name: "reset"; type: "bool" } - } - Method { - name: "itemAt" - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquickwindow_p.h" - name: "QQuickRootItem" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - Method { - name: "setWidth" - Parameter { name: "w"; type: "int" } - } - Method { - name: "setHeight" - Parameter { name: "h"; type: "int" } - } - } - Component { - file: "private/qquicktranslate_p.h" - name: "QQuickRotation" - accessSemantics: "reference" - prototype: "QQuickTransform" - exports: ["QtQuick/Rotation 2.0", "QtQuick/Rotation 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "origin" - type: "QVector3D" - read: "origin" - write: "setOrigin" - notify: "originChanged" - index: 0 - } - Property { - name: "angle" - type: "double" - read: "angle" - write: "setAngle" - notify: "angleChanged" - index: 1 - } - Property { - name: "axis" - type: "QVector3D" - read: "axis" - write: "setAxis" - notify: "axisChanged" - index: 2 - } - Signal { name: "originChanged" } - Signal { name: "angleChanged" } - Signal { name: "axisChanged" } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickRotationAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: [ - "QtQuick/RotationAnimation 2.0", - "QtQuick/RotationAnimation 2.12", - "QtQuick/RotationAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Enum { - name: "RotationDirection" - values: ["Numerical", "Shortest", "Clockwise", "Counterclockwise"] - } - Property { - name: "from" - type: "double" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - } - Property { name: "to"; type: "double"; read: "to"; write: "setTo"; notify: "toChanged"; index: 1 } - Property { - name: "direction" - type: "RotationDirection" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 2 - } - Signal { name: "directionChanged" } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickRotationAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/RotationAnimator 2.2", - "QtQuick/RotationAnimator 2.12", - "QtQuick/RotationAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - Enum { - name: "RotationDirection" - values: ["Numerical", "Shortest", "Clockwise", "Counterclockwise"] - } - Property { - name: "direction" - type: "RotationDirection" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 0 - } - Signal { - name: "directionChanged" - Parameter { name: "dir"; type: "RotationDirection" } - } - } - Component { - file: "private/qquickpositioners_p.h" - name: "QQuickRow" - accessSemantics: "reference" - prototype: "QQuickBasePositioner" - exports: [ - "QtQuick/Row 2.0", - "QtQuick/Row 2.1", - "QtQuick/Row 2.4", - "QtQuick/Row 2.6", - "QtQuick/Row 2.7", - "QtQuick/Row 2.9", - "QtQuick/Row 2.11", - "QtQuick/Row 6.0", - "QtQuick/Row 6.2", - "QtQuick/Row 6.3", - "QtQuick/Row 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Property { - name: "layoutDirection" - type: "Qt::LayoutDirection" - read: "layoutDirection" - write: "setLayoutDirection" - notify: "layoutDirectionChanged" - index: 0 - } - Property { - name: "effectiveLayoutDirection" - type: "Qt::LayoutDirection" - read: "effectiveLayoutDirection" - notify: "effectiveLayoutDirectionChanged" - index: 1 - isReadonly: true - } - Signal { name: "layoutDirectionChanged" } - Signal { name: "effectiveLayoutDirectionChanged" } - } - Component { - file: "private/qquicktranslate_p.h" - name: "QQuickScale" - accessSemantics: "reference" - prototype: "QQuickTransform" - exports: ["QtQuick/Scale 2.0", "QtQuick/Scale 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "origin" - type: "QVector3D" - read: "origin" - write: "setOrigin" - notify: "originChanged" - index: 0 - } - Property { - name: "xScale" - type: "double" - read: "xScale" - write: "setXScale" - notify: "xScaleChanged" - index: 1 - } - Property { - name: "yScale" - type: "double" - read: "yScale" - write: "setYScale" - notify: "yScaleChanged" - index: 2 - } - Property { - name: "zScale" - type: "double" - read: "zScale" - write: "setZScale" - notify: "zScaleChanged" - index: 3 - } - Signal { name: "originChanged" } - Signal { name: "xScaleChanged" } - Signal { name: "yScaleChanged" } - Signal { name: "zScaleChanged" } - Signal { name: "scaleChanged" } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickScaleAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/ScaleAnimator 2.2", - "QtQuick/ScaleAnimator 2.12", - "QtQuick/ScaleAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - } - Component { - file: "private/qquickscalegrid_p_p.h" - name: "QQuickScaleGrid" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "left" - type: "int" - read: "left" - write: "setLeft" - notify: "leftBorderChanged" - index: 0 - isFinal: true - } - Property { - name: "top" - type: "int" - read: "top" - write: "setTop" - notify: "topBorderChanged" - index: 1 - isFinal: true - } - Property { - name: "right" - type: "int" - read: "right" - write: "setRight" - notify: "rightBorderChanged" - index: 2 - isFinal: true - } - Property { - name: "bottom" - type: "int" - read: "bottom" - write: "setBottom" - notify: "bottomBorderChanged" - index: 3 - isFinal: true - } - Signal { name: "borderChanged" } - Signal { name: "leftBorderChanged" } - Signal { name: "topBorderChanged" } - Signal { name: "rightBorderChanged" } - Signal { name: "bottomBorderChanged" } - } - Component { - file: "private/qquickscreen_p.h" - name: "QQuickScreen" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/Screen 2.0", - "QtQuick/Screen 2.3", - "QtQuick/Screen 2.10", - "QtQuick/Screen 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 515, 522, 1536] - attachedType: "QQuickScreenAttached" - } - Component { - file: "private/qquickscreen_p.h" - name: "QQuickScreenAttached" - accessSemantics: "reference" - prototype: "QQuickScreenInfo" - Method { - name: "screenChanged" - Parameter { type: "QScreen"; isPointer: true } - } - Method { - name: "angleBetween" - type: "int" - Parameter { name: "a"; type: "int" } - Parameter { name: "b"; type: "int" } - } - } - Component { - file: "private/qquickscreen_p.h" - name: "QQuickScreenInfo" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/ScreenInfo 2.3", - "QtQuick/ScreenInfo 2.10", - "QtQuick/ScreenInfo 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [515, 522, 1536] - Property { - name: "name" - type: "QString" - read: "name" - notify: "nameChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "manufacturer" - revision: 522 - type: "QString" - read: "manufacturer" - notify: "manufacturerChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "model" - revision: 522 - type: "QString" - read: "model" - notify: "modelChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "serialNumber" - revision: 522 - type: "QString" - read: "serialNumber" - notify: "serialNumberChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "width" - type: "int" - read: "width" - notify: "widthChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "height" - type: "int" - read: "height" - notify: "heightChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "desktopAvailableWidth" - type: "int" - read: "desktopAvailableWidth" - notify: "desktopGeometryChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "desktopAvailableHeight" - type: "int" - read: "desktopAvailableHeight" - notify: "desktopGeometryChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "logicalPixelDensity" - type: "double" - read: "logicalPixelDensity" - notify: "logicalPixelDensityChanged" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "pixelDensity" - type: "double" - read: "pixelDensity" - notify: "pixelDensityChanged" - index: 9 - isReadonly: true - isFinal: true - } - Property { - name: "devicePixelRatio" - type: "double" - read: "devicePixelRatio" - notify: "devicePixelRatioChanged" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "primaryOrientation" - type: "Qt::ScreenOrientation" - read: "primaryOrientation" - notify: "primaryOrientationChanged" - index: 11 - isReadonly: true - isFinal: true - } - Property { - name: "orientation" - type: "Qt::ScreenOrientation" - read: "orientation" - notify: "orientationChanged" - index: 12 - isReadonly: true - isFinal: true - } - Property { - name: "virtualX" - revision: 515 - type: "int" - read: "virtualX" - notify: "virtualXChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "virtualY" - revision: 515 - type: "int" - read: "virtualY" - notify: "virtualYChanged" - index: 14 - isReadonly: true - isFinal: true - } - Signal { name: "nameChanged" } - Signal { name: "manufacturerChanged"; revision: 522 } - Signal { name: "modelChanged"; revision: 522 } - Signal { name: "serialNumberChanged"; revision: 522 } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - Signal { name: "desktopGeometryChanged" } - Signal { name: "logicalPixelDensityChanged" } - Signal { name: "pixelDensityChanged" } - Signal { name: "devicePixelRatioChanged" } - Signal { name: "primaryOrientationChanged" } - Signal { name: "orientationChanged" } - Signal { name: "virtualXChanged"; revision: 515 } - Signal { name: "virtualYChanged"; revision: 515 } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickScriptAction" - accessSemantics: "reference" - prototype: "QQuickAbstractAnimation" - exports: [ - "QtQuick/ScriptAction 2.0", - "QtQuick/ScriptAction 2.12", - "QtQuick/ScriptAction 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { name: "script"; type: "QQmlScriptString"; read: "script"; write: "setScript"; index: 0 } - Property { - name: "scriptName" - type: "QString" - read: "stateChangeScriptName" - write: "setStateChangeScriptName" - index: 1 - } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickSequentialAnimation" - accessSemantics: "reference" - defaultProperty: "animations" - prototype: "QQuickAnimationGroup" - exports: [ - "QtQuick/SequentialAnimation 2.0", - "QtQuick/SequentialAnimation 2.12", - "QtQuick/SequentialAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - } - Component { - file: "private/qquickshadereffect_p.h" - name: "QQuickShaderEffect" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/ShaderEffect 2.0", - "QtQuick/ShaderEffect 2.1", - "QtQuick/ShaderEffect 2.4", - "QtQuick/ShaderEffect 2.7", - "QtQuick/ShaderEffect 2.11", - "QtQuick/ShaderEffect 6.0", - "QtQuick/ShaderEffect 6.3", - "QtQuick/ShaderEffect 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Enum { - name: "CullMode" - values: ["NoCulling", "BackFaceCulling", "FrontFaceCulling"] - } - Enum { - name: "Status" - values: ["Compiled", "Uncompiled", "Error"] - } - Property { - name: "fragmentShader" - type: "QUrl" - read: "fragmentShader" - write: "setFragmentShader" - notify: "fragmentShaderChanged" - index: 0 - } - Property { - name: "vertexShader" - type: "QUrl" - read: "vertexShader" - write: "setVertexShader" - notify: "vertexShaderChanged" - index: 1 - } - Property { - name: "blending" - type: "bool" - read: "blending" - write: "setBlending" - notify: "blendingChanged" - index: 2 - } - Property { - name: "mesh" - type: "QVariant" - read: "mesh" - write: "setMesh" - notify: "meshChanged" - index: 3 - } - Property { - name: "cullMode" - type: "CullMode" - read: "cullMode" - write: "setCullMode" - notify: "cullModeChanged" - index: 4 - } - Property { - name: "log" - type: "QString" - read: "log" - notify: "logChanged" - index: 5 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 6 - isReadonly: true - } - Property { - name: "supportsAtlasTextures" - revision: 516 - type: "bool" - read: "supportsAtlasTextures" - write: "setSupportsAtlasTextures" - notify: "supportsAtlasTexturesChanged" - index: 7 - } - Signal { name: "fragmentShaderChanged" } - Signal { name: "vertexShaderChanged" } - Signal { name: "blendingChanged" } - Signal { name: "meshChanged" } - Signal { name: "cullModeChanged" } - Signal { name: "logChanged" } - Signal { name: "statusChanged" } - Signal { name: "supportsAtlasTexturesChanged" } - } - Component { - file: "private/qquickshadereffectmesh_p.h" - name: "QQuickShaderEffectMesh" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/ShaderEffectMesh 2.0", - "QtQuick/ShaderEffectMesh 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - Signal { name: "geometryChanged" } - } - Component { - file: "private/qquickshadereffectsource_p.h" - name: "QQuickShaderEffectSource" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/ShaderEffectSource 2.0", - "QtQuick/ShaderEffectSource 2.1", - "QtQuick/ShaderEffectSource 2.4", - "QtQuick/ShaderEffectSource 2.6", - "QtQuick/ShaderEffectSource 2.7", - "QtQuick/ShaderEffectSource 2.9", - "QtQuick/ShaderEffectSource 2.11", - "QtQuick/ShaderEffectSource 6.0", - "QtQuick/ShaderEffectSource 6.3", - "QtQuick/ShaderEffectSource 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 516, - 518, - 519, - 521, - 523, - 1536, - 1539, - 1543 - ] - Enum { - name: "WrapMode" - values: [ - "ClampToEdge", - "RepeatHorizontally", - "RepeatVertically", - "Repeat" - ] - } - Enum { - name: "Format" - values: ["RGBA8", "RGBA16F", "RGBA32F", "Alpha", "RGB", "RGBA"] - } - Enum { - name: "TextureMirroring" - values: ["NoMirroring", "MirrorHorizontally", "MirrorVertically"] - } - Property { - name: "wrapMode" - type: "WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 0 - } - Property { - name: "sourceItem" - type: "QQuickItem" - isPointer: true - read: "sourceItem" - write: "setSourceItem" - notify: "sourceItemChanged" - index: 1 - } - Property { - name: "sourceRect" - type: "QRectF" - read: "sourceRect" - write: "setSourceRect" - notify: "sourceRectChanged" - index: 2 - } - Property { - name: "textureSize" - type: "QSize" - read: "textureSize" - write: "setTextureSize" - notify: "textureSizeChanged" - index: 3 - } - Property { - name: "format" - type: "Format" - read: "format" - write: "setFormat" - notify: "formatChanged" - index: 4 - } - Property { - name: "live" - type: "bool" - read: "live" - write: "setLive" - notify: "liveChanged" - index: 5 - } - Property { - name: "hideSource" - type: "bool" - read: "hideSource" - write: "setHideSource" - notify: "hideSourceChanged" - index: 6 - } - Property { - name: "mipmap" - type: "bool" - read: "mipmap" - write: "setMipmap" - notify: "mipmapChanged" - index: 7 - } - Property { - name: "recursive" - type: "bool" - read: "recursive" - write: "setRecursive" - notify: "recursiveChanged" - index: 8 - } - Property { - name: "textureMirroring" - revision: 518 - type: "TextureMirroring" - read: "textureMirroring" - write: "setTextureMirroring" - notify: "textureMirroringChanged" - index: 9 - } - Property { - name: "samples" - revision: 521 - type: "int" - read: "samples" - write: "setSamples" - notify: "samplesChanged" - index: 10 - } - Signal { name: "wrapModeChanged" } - Signal { name: "sourceItemChanged" } - Signal { name: "sourceRectChanged" } - Signal { name: "textureSizeChanged" } - Signal { name: "formatChanged" } - Signal { name: "liveChanged" } - Signal { name: "hideSourceChanged" } - Signal { name: "mipmapChanged" } - Signal { name: "recursiveChanged" } - Signal { name: "textureMirroringChanged" } - Signal { name: "samplesChanged" } - Signal { name: "scheduledUpdateCompleted" } - Method { - name: "sourceItemDestroyed" - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { name: "invalidateSceneGraph" } - Method { name: "scheduleUpdate" } - } - Component { - file: "private/qquickshortcut_p.h" - name: "QQuickShortcut" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick/Shortcut 2.5", - "QtQuick/Shortcut 2.6", - "QtQuick/Shortcut 2.9", - "QtQuick/Shortcut 6.0" - ] - exportMetaObjectRevisions: [517, 518, 521, 1536] - Property { - name: "sequence" - type: "QVariant" - read: "sequence" - write: "setSequence" - notify: "sequenceChanged" - index: 0 - isFinal: true - } - Property { - name: "sequences" - revision: 521 - type: "QVariantList" - read: "sequences" - write: "setSequences" - notify: "sequencesChanged" - index: 1 - isFinal: true - } - Property { - name: "nativeText" - revision: 518 - type: "QString" - read: "nativeText" - notify: "sequenceChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "portableText" - revision: 518 - type: "QString" - read: "portableText" - notify: "sequenceChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 4 - isFinal: true - } - Property { - name: "autoRepeat" - type: "bool" - read: "autoRepeat" - write: "setAutoRepeat" - notify: "autoRepeatChanged" - index: 5 - isFinal: true - } - Property { - name: "context" - type: "Qt::ShortcutContext" - read: "context" - write: "setContext" - notify: "contextChanged" - index: 6 - isFinal: true - } - Signal { name: "sequenceChanged" } - Signal { name: "sequencesChanged"; revision: 521 } - Signal { name: "enabledChanged" } - Signal { name: "autoRepeatChanged" } - Signal { name: "contextChanged" } - Signal { name: "activated" } - Signal { name: "activatedAmbiguously" } - } - Component { - file: "private/qquicksinglepointhandler_p.h" - name: "QQuickSinglePointHandler" - accessSemantics: "reference" - prototype: "QQuickPointerDeviceHandler" - Property { - name: "point" - type: "QQuickHandlerPoint" - read: "point" - notify: "pointChanged" - index: 0 - isReadonly: true - } - Signal { name: "pointChanged" } - } - Component { - file: "private/qquicksmoothedanimation_p.h" - name: "QQuickSmoothedAnimation" - accessSemantics: "reference" - prototype: "QQuickNumberAnimation" - exports: [ - "QtQuick/SmoothedAnimation 2.0", - "QtQuick/SmoothedAnimation 2.12", - "QtQuick/SmoothedAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Enum { - name: "ReversingMode" - values: ["Eased", "Immediate", "Sync"] - } - Property { - name: "velocity" - type: "double" - read: "velocity" - write: "setVelocity" - notify: "velocityChanged" - index: 0 - } - Property { - name: "reversingMode" - type: "ReversingMode" - read: "reversingMode" - write: "setReversingMode" - notify: "reversingModeChanged" - index: 1 - } - Property { - name: "maximumEasingTime" - type: "double" - read: "maximumEasingTime" - write: "setMaximumEasingTime" - notify: "maximumEasingTimeChanged" - index: 2 - } - Signal { name: "velocityChanged" } - Signal { name: "reversingModeChanged" } - Signal { name: "maximumEasingTimeChanged" } - } - Component { - file: "private/qquickspringanimation_p.h" - name: "QQuickSpringAnimation" - accessSemantics: "reference" - prototype: "QQuickNumberAnimation" - interfaces: ["QQmlPropertyValueSource"] - exports: [ - "QtQuick/SpringAnimation 2.0", - "QtQuick/SpringAnimation 2.12", - "QtQuick/SpringAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { name: "velocity"; type: "double"; read: "velocity"; write: "setVelocity"; index: 0 } - Property { name: "spring"; type: "double"; read: "spring"; write: "setSpring"; index: 1 } - Property { name: "damping"; type: "double"; read: "damping"; write: "setDamping"; index: 2 } - Property { name: "epsilon"; type: "double"; read: "epsilon"; write: "setEpsilon"; index: 3 } - Property { - name: "modulus" - type: "double" - read: "modulus" - write: "setModulus" - notify: "modulusChanged" - index: 4 - } - Property { - name: "mass" - type: "double" - read: "mass" - write: "setMass" - notify: "massChanged" - index: 5 - } - Signal { name: "modulusChanged" } - Signal { name: "massChanged" } - Signal { name: "syncChanged" } - } - Component { - file: "private/qquicksprite_p.h" - name: "QQuickSprite" - accessSemantics: "reference" - prototype: "QQuickStochasticState" - exports: ["QtQuick/Sprite 2.0", "QtQuick/Sprite 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "reverse" - type: "bool" - read: "reverse" - write: "setReverse" - notify: "reverseChanged" - index: 1 - } - Property { - name: "frameSync" - type: "bool" - read: "frameSync" - write: "setFrameSync" - notify: "frameSyncChanged" - index: 2 - } - Property { - name: "frames" - type: "int" - read: "frames" - write: "setFrames" - notify: "frameCountChanged" - index: 3 - } - Property { - name: "frameCount" - type: "int" - read: "frameCount" - write: "setFrameCount" - notify: "frameCountChanged" - index: 4 - } - Property { - name: "frameHeight" - type: "int" - read: "frameHeight" - write: "setFrameHeight" - notify: "frameHeightChanged" - index: 5 - } - Property { - name: "frameWidth" - type: "int" - read: "frameWidth" - write: "setFrameWidth" - notify: "frameWidthChanged" - index: 6 - } - Property { - name: "frameX" - type: "int" - read: "frameX" - write: "setFrameX" - notify: "frameXChanged" - index: 7 - } - Property { - name: "frameY" - type: "int" - read: "frameY" - write: "setFrameY" - notify: "frameYChanged" - index: 8 - } - Property { - name: "frameRate" - type: "double" - read: "frameRate" - write: "setFrameRate" - reset: "resetFrameRate" - notify: "frameRateChanged" - index: 9 - } - Property { - name: "frameRateVariation" - type: "double" - read: "frameRateVariation" - write: "setFrameRateVariation" - notify: "frameRateVariationChanged" - index: 10 - } - Property { - name: "frameDuration" - type: "int" - read: "frameDuration" - write: "setFrameDuration" - reset: "resetFrameDuration" - notify: "frameDurationChanged" - index: 11 - } - Property { - name: "frameDurationVariation" - type: "int" - read: "frameDurationVariation" - write: "setFrameDurationVariation" - notify: "frameDurationVariationChanged" - index: 12 - } - Signal { - name: "sourceChanged" - Parameter { name: "arg"; type: "QUrl" } - } - Signal { - name: "frameHeightChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameWidthChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "reverseChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "frameCountChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameXChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameYChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameRateChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "frameRateVariationChanged" - Parameter { name: "arg"; type: "double" } - } - Signal { - name: "frameDurationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameDurationVariationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "frameSyncChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setSource" - Parameter { name: "arg"; type: "QUrl" } - } - Method { - name: "setFrameHeight" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameWidth" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setReverse" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setFrames" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameCount" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameX" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameY" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameRate" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setFrameRateVariation" - Parameter { name: "arg"; type: "double" } - } - Method { - name: "setFrameDuration" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameDurationVariation" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setFrameSync" - Parameter { name: "arg"; type: "bool" } - } - Method { name: "startImageLoading" } - } - Component { - file: "private/qquickspritesequence_p.h" - name: "QQuickSpriteSequence" - accessSemantics: "reference" - defaultProperty: "sprites" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick/SpriteSequence 2.0", - "QtQuick/SpriteSequence 2.1", - "QtQuick/SpriteSequence 2.4", - "QtQuick/SpriteSequence 2.7", - "QtQuick/SpriteSequence 2.11", - "QtQuick/SpriteSequence 6.0", - "QtQuick/SpriteSequence 6.3", - "QtQuick/SpriteSequence 6.7" - ] - exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543] - Property { - name: "running" - type: "bool" - read: "running" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "interpolate" - type: "bool" - read: "interpolate" - write: "setInterpolate" - notify: "interpolateChanged" - index: 1 - } - Property { - name: "goalSprite" - type: "QString" - read: "goalSprite" - write: "setGoalSprite" - notify: "goalSpriteChanged" - index: 2 - } - Property { - name: "currentSprite" - type: "QString" - read: "currentSprite" - notify: "currentSpriteChanged" - index: 3 - isReadonly: true - } - Property { - name: "sprites" - type: "QQuickSprite" - isList: true - read: "sprites" - index: 4 - isReadonly: true - } - Signal { - name: "runningChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "interpolateChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "goalSpriteChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "currentSpriteChanged" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "jumpTo" - Parameter { name: "sprite"; type: "QString" } - } - Method { - name: "setGoalSprite" - Parameter { name: "sprite"; type: "QString" } - } - Method { - name: "setRunning" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setInterpolate" - Parameter { name: "arg"; type: "bool" } - } - Method { name: "createEngine" } - } - Component { - file: "private/qquickstate_p.h" - name: "QQuickState" - accessSemantics: "reference" - defaultProperty: "changes" - prototype: "QObject" - deferredNames: ["changes"] - exports: ["QtQuick/State 2.0", "QtQuick/State 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { name: "name"; type: "QString"; read: "name"; write: "setName"; index: 0 } - Property { name: "when"; type: "bool"; read: "when"; write: "setWhen"; index: 1 } - Property { name: "extend"; type: "QString"; read: "extends"; write: "setExtends"; index: 2 } - Property { - name: "changes" - type: "QQuickStateOperation" - isList: true - read: "changes" - index: 3 - isReadonly: true - } - Signal { name: "completed" } - } - Component { - file: "private/qquickstatechangescript_p.h" - name: "QQuickStateChangeScript" - accessSemantics: "reference" - prototype: "QQuickStateOperation" - exports: [ - "QtQuick/StateChangeScript 2.0", - "QtQuick/StateChangeScript 6.0" - ] - exportMetaObjectRevisions: [512, 1536] - Property { name: "script"; type: "QQmlScriptString"; read: "script"; write: "setScript"; index: 0 } - Property { name: "name"; type: "QString"; read: "name"; write: "setName"; index: 1 } - } - Component { - file: "private/qquickstategroup_p.h" - name: "QQuickStateGroup" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick/StateGroup 2.0", "QtQuick/StateGroup 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "state" - type: "QString" - read: "state" - write: "setState" - notify: "stateChanged" - index: 0 - } - Property { - name: "states" - type: "QQuickState" - isList: true - read: "statesProperty" - index: 1 - isReadonly: true - } - Property { - name: "transitions" - type: "QQuickTransition" - isList: true - read: "transitionsProperty" - index: 2 - isReadonly: true - } - Signal { - name: "stateChanged" - Parameter { type: "QString" } - } - } - Component { - file: "private/qquickstate_p.h" - name: "QQuickStateOperation" - accessSemantics: "reference" - prototype: "QObject" - } - Component { - file: "private/qquickspriteengine_p.h" - name: "QQuickStochasticState" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 0 - } - Property { - name: "durationVariation" - type: "int" - read: "durationVariation" - write: "setDurationVariation" - notify: "durationVariationChanged" - index: 1 - } - Property { - name: "randomStart" - type: "bool" - read: "randomStart" - write: "setRandomStart" - notify: "randomStartChanged" - index: 2 - } - Property { - name: "to" - type: "QVariantMap" - read: "to" - write: "setTo" - notify: "toChanged" - index: 3 - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 4 - } - Signal { - name: "durationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "nameChanged" - Parameter { name: "arg"; type: "QString" } - } - Signal { - name: "toChanged" - Parameter { name: "arg"; type: "QVariantMap" } - } - Signal { - name: "durationVariationChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { name: "entered" } - Signal { - name: "randomStartChanged" - Parameter { name: "arg"; type: "bool" } - } - Method { - name: "setDuration" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setName" - Parameter { name: "arg"; type: "QString" } - } - Method { - name: "setTo" - Parameter { name: "arg"; type: "QVariantMap" } - } - Method { - name: "setDurationVariation" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setRandomStart" - Parameter { name: "arg"; type: "bool" } - } - } - Component { - file: "private/qquicksystempalette_p.h" - name: "QQuickSystemPalette" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/SystemPalette 2.0", - "QtQuick/SystemPalette 6.0", - "QtQuick/SystemPalette 6.2", - "QtQuick/SystemPalette 6.7" - ] - exportMetaObjectRevisions: [512, 1536, 1538, 1543] - Enum { - name: "ColorGroup" - values: ["Active", "Inactive", "Disabled"] - } - Property { - name: "colorGroup" - type: "QQuickSystemPalette::ColorGroup" - read: "colorGroup" - write: "setColorGroup" - notify: "paletteChanged" - index: 0 - } - Property { - name: "window" - type: "QColor" - read: "window" - notify: "paletteChanged" - index: 1 - isReadonly: true - } - Property { - name: "windowText" - type: "QColor" - read: "windowText" - notify: "paletteChanged" - index: 2 - isReadonly: true - } - Property { - name: "base" - type: "QColor" - read: "base" - notify: "paletteChanged" - index: 3 - isReadonly: true - } - Property { - name: "text" - type: "QColor" - read: "text" - notify: "paletteChanged" - index: 4 - isReadonly: true - } - Property { - name: "alternateBase" - type: "QColor" - read: "alternateBase" - notify: "paletteChanged" - index: 5 - isReadonly: true - } - Property { - name: "button" - type: "QColor" - read: "button" - notify: "paletteChanged" - index: 6 - isReadonly: true - } - Property { - name: "buttonText" - type: "QColor" - read: "buttonText" - notify: "paletteChanged" - index: 7 - isReadonly: true - } - Property { - name: "light" - type: "QColor" - read: "light" - notify: "paletteChanged" - index: 8 - isReadonly: true - } - Property { - name: "midlight" - type: "QColor" - read: "midlight" - notify: "paletteChanged" - index: 9 - isReadonly: true - } - Property { - name: "dark" - type: "QColor" - read: "dark" - notify: "paletteChanged" - index: 10 - isReadonly: true - } - Property { - name: "mid" - type: "QColor" - read: "mid" - notify: "paletteChanged" - index: 11 - isReadonly: true - } - Property { - name: "shadow" - type: "QColor" - read: "shadow" - notify: "paletteChanged" - index: 12 - isReadonly: true - } - Property { - name: "highlight" - type: "QColor" - read: "highlight" - notify: "paletteChanged" - index: 13 - isReadonly: true - } - Property { - name: "highlightedText" - type: "QColor" - read: "highlightedText" - notify: "paletteChanged" - index: 14 - isReadonly: true - } - Property { - name: "placeholderText" - revision: 1538 - type: "QColor" - read: "placeholderText" - notify: "paletteChanged" - index: 15 - isReadonly: true - } - Property { - name: "accent" - revision: 1543 - type: "QColor" - read: "accent" - notify: "paletteChanged" - index: 16 - isReadonly: true - isFinal: true - } - Signal { name: "paletteChanged" } - } - Component { - file: "private/qquicktableview_p.h" - name: "QQuickTableView" - accessSemantics: "reference" - defaultProperty: "flickableData" - prototype: "QQuickFlickable" - interfaces: ["QQmlFinalizerHook"] - exports: [ - "QtQuick/TableView 2.12", - "QtQuick/TableView 2.14", - "QtQuick/TableView 6.0", - "QtQuick/TableView 6.2", - "QtQuick/TableView 6.3", - "QtQuick/TableView 6.4", - "QtQuick/TableView 6.5", - "QtQuick/TableView 6.6", - "QtQuick/TableView 6.7" - ] - exportMetaObjectRevisions: [ - 524, - 526, - 1536, - 1538, - 1539, - 1540, - 1541, - 1542, - 1543 - ] - attachedType: "QQuickTableViewAttached" - Enum { - name: "PositionMode" - alias: "PositionModeFlag" - isFlag: true - values: [ - "AlignLeft", - "AlignRight", - "AlignHCenter", - "AlignTop", - "AlignBottom", - "AlignVCenter", - "AlignCenter", - "Visible", - "Contain" - ] - } - Enum { - name: "SelectionBehavior" - values: [ - "SelectionDisabled", - "SelectCells", - "SelectRows", - "SelectColumns" - ] - } - Enum { - name: "SelectionMode" - values: [ - "SingleSelection", - "ContiguousSelection", - "ExtendedSelection" - ] - } - Enum { - name: "EditTriggers" - alias: "EditTrigger" - isFlag: true - values: [ - "NoEditTriggers", - "SingleTapped", - "DoubleTapped", - "SelectedTapped", - "EditKeyPressed", - "AnyKeyPressed" - ] - } - Property { - name: "rows" - type: "int" - read: "rows" - notify: "rowsChanged" - index: 0 - isReadonly: true - } - Property { - name: "columns" - type: "int" - read: "columns" - notify: "columnsChanged" - index: 1 - isReadonly: true - } - Property { - name: "rowSpacing" - type: "double" - read: "rowSpacing" - write: "setRowSpacing" - notify: "rowSpacingChanged" - index: 2 - } - Property { - name: "columnSpacing" - type: "double" - read: "columnSpacing" - write: "setColumnSpacing" - notify: "columnSpacingChanged" - index: 3 - } - Property { - name: "rowHeightProvider" - type: "QJSValue" - read: "rowHeightProvider" - write: "setRowHeightProvider" - notify: "rowHeightProviderChanged" - index: 4 - } - Property { - name: "columnWidthProvider" - type: "QJSValue" - read: "columnWidthProvider" - write: "setColumnWidthProvider" - notify: "columnWidthProviderChanged" - index: 5 - } - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 6 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 7 - } - Property { - name: "reuseItems" - type: "bool" - read: "reuseItems" - write: "setReuseItems" - notify: "reuseItemsChanged" - index: 8 - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - write: "setContentWidth" - notify: "contentWidthChanged" - index: 9 - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - write: "setContentHeight" - notify: "contentHeightChanged" - index: 10 - } - Property { - name: "syncView" - revision: 526 - type: "QQuickTableView" - isPointer: true - read: "syncView" - write: "setSyncView" - notify: "syncViewChanged" - index: 11 - } - Property { - name: "syncDirection" - revision: 526 - type: "Qt::Orientations" - read: "syncDirection" - write: "setSyncDirection" - notify: "syncDirectionChanged" - index: 12 - } - Property { - name: "leftColumn" - revision: 1536 - type: "int" - read: "leftColumn" - notify: "leftColumnChanged" - index: 13 - isReadonly: true - } - Property { - name: "rightColumn" - revision: 1536 - type: "int" - read: "rightColumn" - notify: "rightColumnChanged" - index: 14 - isReadonly: true - } - Property { - name: "topRow" - revision: 1536 - type: "int" - read: "topRow" - notify: "topRowChanged" - index: 15 - isReadonly: true - } - Property { - name: "bottomRow" - revision: 1536 - type: "int" - read: "bottomRow" - notify: "bottomRowChanged" - index: 16 - isReadonly: true - } - Property { - name: "selectionModel" - revision: 1538 - type: "QItemSelectionModel" - isPointer: true - read: "selectionModel" - write: "setSelectionModel" - notify: "selectionModelChanged" - index: 17 - } - Property { - name: "animate" - revision: 1540 - type: "bool" - read: "animate" - write: "setAnimate" - notify: "animateChanged" - index: 18 - } - Property { - name: "keyNavigationEnabled" - revision: 1540 - type: "bool" - read: "keyNavigationEnabled" - write: "setKeyNavigationEnabled" - notify: "keyNavigationEnabledChanged" - index: 19 - } - Property { - name: "pointerNavigationEnabled" - revision: 1540 - type: "bool" - read: "pointerNavigationEnabled" - write: "setPointerNavigationEnabled" - notify: "pointerNavigationEnabledChanged" - index: 20 - } - Property { - name: "currentRow" - revision: 1540 - type: "int" - read: "currentRow" - notify: "currentRowChanged" - index: 21 - isReadonly: true - isFinal: true - } - Property { - name: "currentColumn" - revision: 1540 - type: "int" - read: "currentColumn" - notify: "currentColumnChanged" - index: 22 - isReadonly: true - isFinal: true - } - Property { - name: "alternatingRows" - revision: 1540 - type: "bool" - read: "alternatingRows" - write: "setAlternatingRows" - notify: "alternatingRowsChanged" - index: 23 - isFinal: true - } - Property { - name: "selectionBehavior" - revision: 1540 - type: "SelectionBehavior" - read: "selectionBehavior" - write: "setSelectionBehavior" - notify: "selectionBehaviorChanged" - index: 24 - isFinal: true - } - Property { - name: "resizableColumns" - revision: 1541 - type: "bool" - read: "resizableColumns" - write: "setResizableColumns" - notify: "resizableColumnsChanged" - index: 25 - isFinal: true - } - Property { - name: "resizableRows" - revision: 1541 - type: "bool" - read: "resizableRows" - write: "setResizableRows" - notify: "resizableRowsChanged" - index: 26 - isFinal: true - } - Property { - name: "editTriggers" - revision: 1541 - type: "EditTriggers" - read: "editTriggers" - write: "setEditTriggers" - notify: "editTriggersChanged" - index: 27 - isFinal: true - } - Property { - name: "selectionMode" - revision: 1542 - type: "SelectionMode" - read: "selectionMode" - write: "setSelectionMode" - notify: "selectionModeChanged" - index: 28 - isFinal: true - } - Signal { name: "rowsChanged" } - Signal { name: "columnsChanged" } - Signal { name: "rowSpacingChanged" } - Signal { name: "columnSpacingChanged" } - Signal { name: "rowHeightProviderChanged" } - Signal { name: "columnWidthProviderChanged" } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "reuseItemsChanged" } - Signal { name: "syncViewChanged"; revision: 526 } - Signal { name: "syncDirectionChanged"; revision: 526 } - Signal { name: "leftColumnChanged"; revision: 1536 } - Signal { name: "rightColumnChanged"; revision: 1536 } - Signal { name: "topRowChanged"; revision: 1536 } - Signal { name: "bottomRowChanged"; revision: 1536 } - Signal { name: "selectionModelChanged"; revision: 1538 } - Signal { name: "animateChanged"; revision: 1540 } - Signal { name: "keyNavigationEnabledChanged"; revision: 1540 } - Signal { name: "pointerNavigationEnabledChanged"; revision: 1540 } - Signal { name: "currentRowChanged"; revision: 1540 } - Signal { name: "currentColumnChanged"; revision: 1540 } - Signal { name: "alternatingRowsChanged"; revision: 1540 } - Signal { name: "selectionBehaviorChanged"; revision: 1540 } - Signal { name: "resizableColumnsChanged"; revision: 1541 } - Signal { name: "resizableRowsChanged"; revision: 1541 } - Signal { name: "editTriggersChanged"; revision: 1541 } - Signal { name: "layoutChanged"; revision: 1541 } - Signal { name: "selectionModeChanged"; revision: 1542 } - Method { name: "forceLayout" } - Method { - name: "positionViewAtCell" - Parameter { name: "cell"; type: "QPoint" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - Parameter { name: "subRect"; type: "QRectF" } - } - Method { - name: "positionViewAtCell" - isCloned: true - Parameter { name: "cell"; type: "QPoint" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - } - Method { - name: "positionViewAtCell" - isCloned: true - Parameter { name: "cell"; type: "QPoint" } - Parameter { name: "mode"; type: "PositionMode" } - } - Method { - name: "positionViewAtIndex" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - Parameter { name: "subRect"; type: "QRectF" } - } - Method { - name: "positionViewAtIndex" - isCloned: true - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - } - Method { - name: "positionViewAtIndex" - isCloned: true - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "mode"; type: "PositionMode" } - } - Method { - name: "positionViewAtRow" - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "double" } - Parameter { name: "subRect"; type: "QRectF" } - } - Method { - name: "positionViewAtRow" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "double" } - } - Method { - name: "positionViewAtRow" - isCloned: true - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - } - Method { - name: "positionViewAtColumn" - Parameter { name: "column"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "double" } - Parameter { name: "subRect"; type: "QRectF" } - } - Method { - name: "positionViewAtColumn" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "double" } - } - Method { - name: "positionViewAtColumn" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - } - Method { - name: "itemAtCell" - type: "QQuickItem" - isPointer: true - Parameter { name: "cell"; type: "QPoint" } - } - Method { - name: "cellAtPosition" - revision: 1540 - type: "QPoint" - Parameter { name: "position"; type: "QPointF" } - Parameter { name: "includeSpacing"; type: "bool" } - } - Method { - name: "cellAtPosition" - revision: 1540 - type: "QPoint" - isCloned: true - Parameter { name: "position"; type: "QPointF" } - } - Method { - name: "cellAtPosition" - revision: 1540 - type: "QPoint" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "includeSpacing"; type: "bool" } - } - Method { - name: "cellAtPosition" - revision: 1540 - type: "QPoint" - isCloned: true - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "modelIndex" - revision: 1540 - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "cellAtPos" - type: "QPoint" - Parameter { name: "position"; type: "QPointF" } - Parameter { name: "includeSpacing"; type: "bool" } - } - Method { - name: "cellAtPos" - type: "QPoint" - isCloned: true - Parameter { name: "position"; type: "QPointF" } - } - Method { - name: "cellAtPos" - type: "QPoint" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "includeSpacing"; type: "bool" } - } - Method { - name: "cellAtPos" - type: "QPoint" - isCloned: true - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "isColumnLoaded" - revision: 1538 - type: "bool" - Parameter { name: "column"; type: "int" } - } - Method { - name: "isRowLoaded" - revision: 1538 - type: "bool" - Parameter { name: "row"; type: "int" } - } - Method { - name: "columnWidth" - revision: 1538 - type: "double" - Parameter { name: "column"; type: "int" } - } - Method { - name: "rowHeight" - revision: 1538 - type: "double" - Parameter { name: "row"; type: "int" } - } - Method { - name: "implicitColumnWidth" - revision: 1538 - type: "double" - Parameter { name: "column"; type: "int" } - } - Method { - name: "implicitRowHeight" - revision: 1538 - type: "double" - Parameter { name: "row"; type: "int" } - } - Method { - name: "index" - revision: 1540 - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "modelIndex" - revision: 1540 - type: "QModelIndex" - Parameter { name: "cell"; type: "QPoint" } - } - Method { - name: "cellAtIndex" - revision: 1540 - type: "QPoint" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "rowAtIndex" - revision: 1540 - type: "int" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "columnAtIndex" - revision: 1540 - type: "int" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "setColumnWidth" - revision: 1541 - Parameter { name: "column"; type: "int" } - Parameter { name: "size"; type: "double" } - } - Method { name: "clearColumnWidths"; revision: 1541 } - Method { - name: "explicitColumnWidth" - revision: 1541 - type: "double" - Parameter { name: "column"; type: "int" } - } - Method { - name: "setRowHeight" - revision: 1541 - Parameter { name: "row"; type: "int" } - Parameter { name: "size"; type: "double" } - } - Method { name: "clearRowHeights"; revision: 1541 } - Method { - name: "explicitRowHeight" - revision: 1541 - type: "double" - Parameter { name: "row"; type: "int" } - } - Method { - name: "edit" - revision: 1541 - Parameter { name: "index"; type: "QModelIndex" } - } - Method { name: "closeEditor"; revision: 1541 } - Method { - name: "itemAtIndex" - revision: 1541 - type: "QQuickItem" - isPointer: true - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "itemAtCell" - type: "QQuickItem" - isPointer: true - Parameter { name: "column"; type: "int" } - Parameter { name: "row"; type: "int" } - } - Method { - name: "positionViewAtCell" - Parameter { name: "column"; type: "int" } - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - Parameter { name: "subRect"; type: "QRectF" } - } - Method { - name: "positionViewAtCell" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - Parameter { name: "offset"; type: "QPointF" } - } - Method { - name: "positionViewAtCell" - isCloned: true - Parameter { name: "column"; type: "int" } - Parameter { name: "row"; type: "int" } - Parameter { name: "mode"; type: "PositionMode" } - } - } - Component { - file: "private/qquicktableview_p.h" - name: "QQuickTableViewAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "view" - type: "QQuickTableView" - isPointer: true - read: "view" - notify: "viewChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "editDelegate" - type: "QQmlComponent" - isPointer: true - read: "editDelegate" - write: "setEditDelegate" - notify: "editDelegateChanged" - index: 1 - isFinal: true - } - Signal { name: "viewChanged" } - Signal { name: "pooled" } - Signal { name: "reused" } - Signal { name: "editDelegateChanged" } - Signal { name: "commit" } - } - Component { - file: "private/qquicktaphandler_p.h" - name: "QQuickTapHandler" - accessSemantics: "reference" - prototype: "QQuickSinglePointHandler" - exports: [ - "QtQuick/TapHandler 2.12", - "QtQuick/TapHandler 2.15", - "QtQuick/TapHandler 6.0", - "QtQuick/TapHandler 6.3", - "QtQuick/TapHandler 6.5" - ] - exportMetaObjectRevisions: [524, 527, 1536, 1539, 1541] - Enum { - name: "GesturePolicy" - values: [ - "DragThreshold", - "WithinBounds", - "ReleaseWithinBounds", - "DragWithinBounds" - ] - } - Enum { - name: "ExclusiveSignals" - alias: "ExclusiveSignal" - isFlag: true - values: ["NotExclusive", "SingleTap", "DoubleTap"] - } - Property { - name: "pressed" - type: "bool" - read: "isPressed" - notify: "pressedChanged" - index: 0 - isReadonly: true - } - Property { - name: "tapCount" - type: "int" - read: "tapCount" - notify: "tapCountChanged" - index: 1 - isReadonly: true - } - Property { - name: "timeHeld" - type: "double" - read: "timeHeld" - notify: "timeHeldChanged" - index: 2 - isReadonly: true - } - Property { - name: "longPressThreshold" - type: "double" - read: "longPressThreshold" - write: "setLongPressThreshold" - reset: "resetLongPressThreshold" - notify: "longPressThresholdChanged" - index: 3 - } - Property { - name: "gesturePolicy" - type: "GesturePolicy" - read: "gesturePolicy" - write: "setGesturePolicy" - notify: "gesturePolicyChanged" - index: 4 - } - Property { - name: "exclusiveSignals" - revision: 1541 - type: "QQuickTapHandler::ExclusiveSignals" - read: "exclusiveSignals" - write: "setExclusiveSignals" - notify: "exclusiveSignalsChanged" - index: 5 - } - Signal { name: "pressedChanged" } - Signal { name: "tapCountChanged" } - Signal { name: "timeHeldChanged" } - Signal { name: "longPressThresholdChanged" } - Signal { name: "gesturePolicyChanged" } - Signal { name: "exclusiveSignalsChanged"; revision: 1541 } - Signal { - name: "tapped" - Parameter { name: "eventPoint"; type: "QEventPoint" } - Parameter { type: "Qt::MouseButton" } - } - Signal { - name: "singleTapped" - Parameter { name: "eventPoint"; type: "QEventPoint" } - Parameter { type: "Qt::MouseButton" } - } - Signal { - name: "doubleTapped" - Parameter { name: "eventPoint"; type: "QEventPoint" } - Parameter { type: "Qt::MouseButton" } - } - Signal { name: "longPressed" } - } - Component { - file: "private/qquicktext_p.h" - name: "QQuickText" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - interfaces: ["QQuickTextInterface"] - exports: [ - "QtQuick/Text 2.0", - "QtQuick/Text 2.1", - "QtQuick/Text 2.2", - "QtQuick/Text 2.3", - "QtQuick/Text 2.4", - "QtQuick/Text 2.6", - "QtQuick/Text 2.7", - "QtQuick/Text 2.9", - "QtQuick/Text 2.10", - "QtQuick/Text 2.11", - "QtQuick/Text 6.0", - "QtQuick/Text 6.2", - "QtQuick/Text 6.3", - "QtQuick/Text 6.7" - ] - exportMetaObjectRevisions: [ - 512, - 513, - 514, - 515, - 516, - 518, - 519, - 521, - 522, - 523, - 1536, - 1538, - 1539, - 1543 - ] - Enum { - name: "HAlignment" - values: [ - "AlignLeft", - "AlignRight", - "AlignHCenter", - "AlignJustify" - ] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Enum { - name: "TextStyle" - values: ["Normal", "Outline", "Raised", "Sunken"] - } - Enum { - name: "TextFormat" - values: [ - "PlainText", - "RichText", - "MarkdownText", - "AutoText", - "StyledText" - ] - } - Enum { - name: "TextElideMode" - values: ["ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"] - } - Enum { - name: "WrapMode" - values: [ - "NoWrap", - "WordWrap", - "WrapAnywhere", - "WrapAtWordBoundaryOrAnywhere", - "Wrap" - ] - } - Enum { - name: "RenderType" - values: ["QtRendering", "NativeRendering", "CurveRendering"] - } - Enum { - name: "RenderTypeQuality" - values: [ - "DefaultRenderTypeQuality", - "LowRenderTypeQuality", - "NormalRenderTypeQuality", - "HighRenderTypeQuality", - "VeryHighRenderTypeQuality" - ] - } - Enum { - name: "LineHeightMode" - values: ["ProportionalHeight", "FixedHeight"] - } - Enum { - name: "FontSizeMode" - values: ["FixedSize", "HorizontalFit", "VerticalFit", "Fit"] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 1 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 2 - } - Property { - name: "linkColor" - type: "QColor" - read: "linkColor" - write: "setLinkColor" - notify: "linkColorChanged" - index: 3 - } - Property { - name: "style" - type: "TextStyle" - read: "style" - write: "setStyle" - notify: "styleChanged" - index: 4 - } - Property { - name: "styleColor" - type: "QColor" - read: "styleColor" - write: "setStyleColor" - notify: "styleColorChanged" - index: 5 - } - Property { - name: "horizontalAlignment" - type: "HAlignment" - read: "hAlign" - write: "setHAlign" - reset: "resetHAlign" - notify: "horizontalAlignmentChanged" - index: 6 - } - Property { - name: "effectiveHorizontalAlignment" - type: "HAlignment" - read: "effectiveHAlign" - notify: "effectiveHorizontalAlignmentChanged" - index: 7 - isReadonly: true - } - Property { - name: "verticalAlignment" - type: "VAlignment" - read: "vAlign" - write: "setVAlign" - notify: "verticalAlignmentChanged" - index: 8 - } - Property { - name: "wrapMode" - type: "WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 9 - } - Property { - name: "lineCount" - type: "int" - read: "lineCount" - notify: "lineCountChanged" - index: 10 - isReadonly: true - } - Property { - name: "truncated" - type: "bool" - read: "truncated" - notify: "truncatedChanged" - index: 11 - isReadonly: true - } - Property { - name: "maximumLineCount" - type: "int" - read: "maximumLineCount" - write: "setMaximumLineCount" - reset: "resetMaximumLineCount" - notify: "maximumLineCountChanged" - index: 12 - } - Property { - name: "textFormat" - type: "TextFormat" - read: "textFormat" - write: "setTextFormat" - notify: "textFormatChanged" - index: 13 - } - Property { - name: "elide" - type: "TextElideMode" - read: "elideMode" - write: "setElideMode" - notify: "elideModeChanged" - index: 14 - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - notify: "contentWidthChanged" - index: 15 - isReadonly: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - notify: "contentHeightChanged" - index: 16 - isReadonly: true - } - Property { - name: "paintedWidth" - type: "double" - read: "contentWidth" - notify: "contentWidthChanged" - index: 17 - isReadonly: true - } - Property { - name: "paintedHeight" - type: "double" - read: "contentHeight" - notify: "contentHeightChanged" - index: 18 - isReadonly: true - } - Property { - name: "lineHeight" - type: "double" - read: "lineHeight" - write: "setLineHeight" - notify: "lineHeightChanged" - index: 19 - } - Property { - name: "lineHeightMode" - type: "LineHeightMode" - read: "lineHeightMode" - write: "setLineHeightMode" - notify: "lineHeightModeChanged" - index: 20 - } - Property { - name: "baseUrl" - type: "QUrl" - read: "baseUrl" - write: "setBaseUrl" - reset: "resetBaseUrl" - notify: "baseUrlChanged" - index: 21 - } - Property { - name: "minimumPixelSize" - type: "int" - read: "minimumPixelSize" - write: "setMinimumPixelSize" - notify: "minimumPixelSizeChanged" - index: 22 - } - Property { - name: "minimumPointSize" - type: "int" - read: "minimumPointSize" - write: "setMinimumPointSize" - notify: "minimumPointSizeChanged" - index: 23 - } - Property { - name: "fontSizeMode" - type: "FontSizeMode" - read: "fontSizeMode" - write: "setFontSizeMode" - notify: "fontSizeModeChanged" - index: 24 - } - Property { - name: "renderType" - type: "RenderType" - read: "renderType" - write: "setRenderType" - notify: "renderTypeChanged" - index: 25 - } - Property { - name: "hoveredLink" - revision: 514 - type: "QString" - read: "hoveredLink" - notify: "linkHovered" - index: 26 - isReadonly: true - } - Property { - name: "renderTypeQuality" - revision: 1536 - type: "int" - read: "renderTypeQuality" - write: "setRenderTypeQuality" - notify: "renderTypeQualityChanged" - index: 27 - } - Property { - name: "padding" - revision: 518 - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 28 - } - Property { - name: "topPadding" - revision: 518 - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 29 - } - Property { - name: "leftPadding" - revision: 518 - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 30 - } - Property { - name: "rightPadding" - revision: 518 - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 31 - } - Property { - name: "bottomPadding" - revision: 518 - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 32 - } - Property { - name: "fontInfo" - revision: 521 - type: "QJSValue" - read: "fontInfo" - notify: "fontInfoChanged" - index: 33 - isReadonly: true - } - Property { - name: "advance" - revision: 522 - type: "QSizeF" - read: "advance" - notify: "contentSizeChanged" - index: 34 - isReadonly: true - } - Signal { - name: "textChanged" - Parameter { name: "text"; type: "QString" } - } - Signal { - name: "linkActivated" - Parameter { name: "link"; type: "QString" } - } - Signal { - name: "linkHovered" - revision: 514 - Parameter { name: "link"; type: "QString" } - } - Signal { - name: "fontChanged" - Parameter { name: "font"; type: "QFont" } - } - Signal { name: "colorChanged" } - Signal { name: "linkColorChanged" } - Signal { - name: "styleChanged" - Parameter { name: "style"; type: "QQuickText::TextStyle" } - } - Signal { name: "styleColorChanged" } - Signal { - name: "horizontalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickText::HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickText::VAlignment" } - } - Signal { name: "wrapModeChanged" } - Signal { name: "lineCountChanged" } - Signal { name: "truncatedChanged" } - Signal { name: "maximumLineCountChanged" } - Signal { - name: "textFormatChanged" - Parameter { name: "textFormat"; type: "QQuickText::TextFormat" } - } - Signal { - name: "elideModeChanged" - Parameter { name: "mode"; type: "QQuickText::TextElideMode" } - } - Signal { name: "contentSizeChanged" } - Signal { - name: "contentWidthChanged" - Parameter { name: "contentWidth"; type: "double" } - } - Signal { - name: "contentHeightChanged" - Parameter { name: "contentHeight"; type: "double" } - } - Signal { - name: "lineHeightChanged" - Parameter { name: "lineHeight"; type: "double" } - } - Signal { - name: "lineHeightModeChanged" - Parameter { name: "mode"; type: "LineHeightMode" } - } - Signal { name: "fontSizeModeChanged" } - Signal { name: "minimumPixelSizeChanged" } - Signal { name: "minimumPointSizeChanged" } - Signal { name: "effectiveHorizontalAlignmentChanged" } - Signal { - name: "lineLaidOut" - Parameter { name: "line"; type: "QQuickTextLine"; isPointer: true } - } - Signal { name: "baseUrlChanged" } - Signal { name: "renderTypeChanged" } - Signal { name: "paddingChanged"; revision: 518 } - Signal { name: "topPaddingChanged"; revision: 518 } - Signal { name: "leftPaddingChanged"; revision: 518 } - Signal { name: "rightPaddingChanged"; revision: 518 } - Signal { name: "bottomPaddingChanged"; revision: 518 } - Signal { name: "fontInfoChanged"; revision: 521 } - Signal { name: "renderTypeQualityChanged"; revision: 1536 } - Method { name: "q_updateLayout" } - Method { name: "triggerPreprocess" } - Method { - name: "loadResource" - revision: 1543 - type: "QVariant" - Parameter { name: "type"; type: "int" } - Parameter { name: "source"; type: "QUrl" } - } - Method { name: "resourceRequestFinished" } - Method { name: "imageDownloadFinished" } - Method { name: "forceLayout"; revision: 521 } - Method { - name: "linkAt" - revision: 515 - type: "QString" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - } - Component { - file: "qquicktextdocument.h" - name: "QQuickTextDocument" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/TextDocument 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Enum { - name: "Status" - type: "quint8" - values: [ - "Null", - "Loading", - "Loaded", - "Saving", - "Saved", - "ReadError", - "WriteError", - "NonLocalFileError" - ] - } - Property { - name: "source" - revision: 1543 - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "modified" - revision: 1543 - type: "bool" - read: "isModified" - write: "setModified" - notify: "modifiedChanged" - index: 1 - } - Property { - name: "status" - revision: 1543 - type: "Status" - read: "status" - notify: "statusChanged" - index: 2 - isReadonly: true - } - Property { - name: "errorString" - revision: 1543 - type: "QString" - read: "errorString" - notify: "errorStringChanged" - index: 3 - isReadonly: true - } - Signal { name: "textDocumentChanged"; revision: 1543 } - Signal { name: "sourceChanged"; revision: 1543 } - Signal { name: "modifiedChanged"; revision: 1543 } - Signal { name: "statusChanged"; revision: 1543 } - Signal { name: "errorStringChanged"; revision: 1543 } - Method { name: "save"; revision: 1543 } - Method { - name: "saveAs" - revision: 1543 - Parameter { name: "url"; type: "QUrl" } - } - } - Component { - file: "private/qquicktextedit_p.h" - name: "QQuickTextEdit" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - interfaces: ["QQuickTextInterface"] - exports: ["QtQuick/TextEdit 6.4", "QtQuick/TextEdit 6.7"] - exportMetaObjectRevisions: [1540, 1543] - Enum { - name: "HAlignment" - values: [ - "AlignLeft", - "AlignRight", - "AlignHCenter", - "AlignJustify" - ] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Enum { - name: "TextFormat" - values: ["PlainText", "RichText", "AutoText", "MarkdownText"] - } - Enum { - name: "WrapMode" - values: [ - "NoWrap", - "WordWrap", - "WrapAnywhere", - "WrapAtWordBoundaryOrAnywhere", - "Wrap" - ] - } - Enum { - name: "SelectionMode" - values: ["SelectCharacters", "SelectWords"] - } - Enum { - name: "RenderType" - values: ["QtRendering", "NativeRendering", "CurveRendering"] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 1 - } - Property { - name: "selectionColor" - type: "QColor" - read: "selectionColor" - write: "setSelectionColor" - notify: "selectionColorChanged" - index: 2 - } - Property { - name: "selectedTextColor" - type: "QColor" - read: "selectedTextColor" - write: "setSelectedTextColor" - notify: "selectedTextColorChanged" - index: 3 - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 4 - } - Property { - name: "horizontalAlignment" - type: "HAlignment" - read: "hAlign" - write: "setHAlign" - reset: "resetHAlign" - notify: "horizontalAlignmentChanged" - index: 5 - } - Property { - name: "effectiveHorizontalAlignment" - type: "HAlignment" - read: "effectiveHAlign" - notify: "effectiveHorizontalAlignmentChanged" - index: 6 - isReadonly: true - } - Property { - name: "verticalAlignment" - type: "VAlignment" - read: "vAlign" - write: "setVAlign" - notify: "verticalAlignmentChanged" - index: 7 - } - Property { - name: "wrapMode" - type: "WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 8 - } - Property { - name: "lineCount" - type: "int" - read: "lineCount" - notify: "lineCountChanged" - index: 9 - isReadonly: true - } - Property { - name: "length" - type: "int" - read: "length" - notify: "textChanged" - index: 10 - isReadonly: true - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - notify: "contentSizeChanged" - index: 11 - isReadonly: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - notify: "contentSizeChanged" - index: 12 - isReadonly: true - } - Property { - name: "paintedWidth" - type: "double" - read: "contentWidth" - notify: "contentSizeChanged" - index: 13 - isReadonly: true - } - Property { - name: "paintedHeight" - type: "double" - read: "contentHeight" - notify: "contentSizeChanged" - index: 14 - isReadonly: true - } - Property { - name: "textFormat" - type: "TextFormat" - read: "textFormat" - write: "setTextFormat" - notify: "textFormatChanged" - index: 15 - } - Property { - name: "readOnly" - type: "bool" - read: "isReadOnly" - write: "setReadOnly" - notify: "readOnlyChanged" - index: 16 - } - Property { - name: "cursorVisible" - type: "bool" - read: "isCursorVisible" - write: "setCursorVisible" - notify: "cursorVisibleChanged" - index: 17 - } - Property { - name: "cursorPosition" - type: "int" - read: "cursorPosition" - write: "setCursorPosition" - notify: "cursorPositionChanged" - index: 18 - } - Property { - name: "cursorRectangle" - type: "QRectF" - read: "cursorRectangle" - notify: "cursorRectangleChanged" - index: 19 - isReadonly: true - } - Property { - name: "cursorDelegate" - type: "QQmlComponent" - isPointer: true - read: "cursorDelegate" - write: "setCursorDelegate" - notify: "cursorDelegateChanged" - index: 20 - } - Property { - name: "overwriteMode" - type: "bool" - read: "overwriteMode" - write: "setOverwriteMode" - notify: "overwriteModeChanged" - index: 21 - } - Property { - name: "selectionStart" - type: "int" - read: "selectionStart" - notify: "selectionStartChanged" - index: 22 - isReadonly: true - } - Property { - name: "selectionEnd" - type: "int" - read: "selectionEnd" - notify: "selectionEndChanged" - index: 23 - isReadonly: true - } - Property { - name: "selectedText" - type: "QString" - read: "selectedText" - notify: "selectedTextChanged" - index: 24 - isReadonly: true - } - Property { - name: "activeFocusOnPress" - type: "bool" - read: "focusOnPress" - write: "setFocusOnPress" - notify: "activeFocusOnPressChanged" - index: 25 - } - Property { - name: "persistentSelection" - type: "bool" - read: "persistentSelection" - write: "setPersistentSelection" - notify: "persistentSelectionChanged" - index: 26 - } - Property { - name: "textMargin" - type: "double" - read: "textMargin" - write: "setTextMargin" - notify: "textMarginChanged" - index: 27 - } - Property { - name: "inputMethodHints" - type: "Qt::InputMethodHints" - read: "inputMethodHints" - write: "setInputMethodHints" - notify: "inputMethodHintsChanged" - index: 28 - } - Property { - name: "selectByKeyboard" - revision: 513 - type: "bool" - read: "selectByKeyboard" - write: "setSelectByKeyboard" - notify: "selectByKeyboardChanged" - index: 29 - } - Property { - name: "selectByMouse" - type: "bool" - read: "selectByMouse" - write: "setSelectByMouse" - notify: "selectByMouseChanged" - index: 30 - } - Property { - name: "mouseSelectionMode" - type: "SelectionMode" - read: "mouseSelectionMode" - write: "setMouseSelectionMode" - notify: "mouseSelectionModeChanged" - index: 31 - } - Property { - name: "canPaste" - type: "bool" - read: "canPaste" - notify: "canPasteChanged" - index: 32 - isReadonly: true - } - Property { - name: "canUndo" - type: "bool" - read: "canUndo" - notify: "canUndoChanged" - index: 33 - isReadonly: true - } - Property { - name: "canRedo" - type: "bool" - read: "canRedo" - notify: "canRedoChanged" - index: 34 - isReadonly: true - } - Property { - name: "inputMethodComposing" - type: "bool" - read: "isInputMethodComposing" - notify: "inputMethodComposingChanged" - index: 35 - isReadonly: true - } - Property { - name: "baseUrl" - type: "QUrl" - read: "baseUrl" - write: "setBaseUrl" - reset: "resetBaseUrl" - notify: "baseUrlChanged" - index: 36 - } - Property { - name: "renderType" - type: "RenderType" - read: "renderType" - write: "setRenderType" - notify: "renderTypeChanged" - index: 37 - } - Property { - name: "textDocument" - revision: 513 - type: "QQuickTextDocument" - isPointer: true - read: "textDocument" - index: 38 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "hoveredLink" - revision: 514 - type: "QString" - read: "hoveredLink" - notify: "linkHovered" - index: 39 - isReadonly: true - } - Property { - name: "padding" - revision: 518 - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 40 - } - Property { - name: "topPadding" - revision: 518 - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 41 - } - Property { - name: "leftPadding" - revision: 518 - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 42 - } - Property { - name: "rightPadding" - revision: 518 - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 43 - } - Property { - name: "bottomPadding" - revision: 518 - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 44 - } - Property { - name: "preeditText" - revision: 519 - type: "QString" - read: "preeditText" - notify: "preeditTextChanged" - index: 45 - isReadonly: true - } - Property { - name: "tabStopDistance" - revision: 522 - type: "double" - read: "tabStopDistance" - write: "setTabStopDistance" - notify: "tabStopDistanceChanged" - index: 46 - } - Property { - name: "cursorSelection" - revision: 1543 - type: "QQuickTextSelection" - isPointer: true - read: "cursorSelection" - index: 47 - isReadonly: true - isFinal: true - isConstant: true - } - Signal { name: "textChanged" } - Signal { name: "preeditTextChanged"; revision: 519 } - Signal { name: "contentSizeChanged" } - Signal { name: "cursorPositionChanged" } - Signal { name: "cursorRectangleChanged" } - Signal { name: "selectionStartChanged" } - Signal { name: "selectionEndChanged" } - Signal { name: "selectedTextChanged" } - Signal { - name: "colorChanged" - Parameter { name: "color"; type: "QColor" } - } - Signal { - name: "selectionColorChanged" - Parameter { name: "color"; type: "QColor" } - } - Signal { - name: "selectedTextColorChanged" - Parameter { name: "color"; type: "QColor" } - } - Signal { - name: "fontChanged" - Parameter { name: "font"; type: "QFont" } - } - Signal { - name: "horizontalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickTextEdit::HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickTextEdit::VAlignment" } - } - Signal { name: "wrapModeChanged" } - Signal { name: "lineCountChanged" } - Signal { - name: "textFormatChanged" - Parameter { name: "textFormat"; type: "QQuickTextEdit::TextFormat" } - } - Signal { - name: "readOnlyChanged" - Parameter { name: "isReadOnly"; type: "bool" } - } - Signal { - name: "cursorVisibleChanged" - Parameter { name: "isCursorVisible"; type: "bool" } - } - Signal { name: "cursorDelegateChanged" } - Signal { - name: "overwriteModeChanged" - Parameter { name: "overwriteMode"; type: "bool" } - } - Signal { - name: "activeFocusOnPressChanged" - Parameter { name: "activeFocusOnPressed"; type: "bool" } - } - Signal { - name: "persistentSelectionChanged" - Parameter { name: "isPersistentSelection"; type: "bool" } - } - Signal { - name: "textMarginChanged" - Parameter { name: "textMargin"; type: "double" } - } - Signal { - name: "selectByKeyboardChanged" - revision: 513 - Parameter { name: "selectByKeyboard"; type: "bool" } - } - Signal { - name: "selectByMouseChanged" - Parameter { name: "selectByMouse"; type: "bool" } - } - Signal { - name: "mouseSelectionModeChanged" - Parameter { name: "mode"; type: "QQuickTextEdit::SelectionMode" } - } - Signal { - name: "linkActivated" - Parameter { name: "link"; type: "QString" } - } - Signal { - name: "linkHovered" - revision: 514 - Parameter { name: "link"; type: "QString" } - } - Signal { name: "canPasteChanged" } - Signal { name: "canUndoChanged" } - Signal { name: "canRedoChanged" } - Signal { name: "inputMethodComposingChanged" } - Signal { name: "effectiveHorizontalAlignmentChanged" } - Signal { name: "baseUrlChanged" } - Signal { name: "inputMethodHintsChanged" } - Signal { name: "renderTypeChanged" } - Signal { name: "editingFinished"; revision: 518 } - Signal { name: "paddingChanged"; revision: 518 } - Signal { name: "topPaddingChanged"; revision: 518 } - Signal { name: "leftPaddingChanged"; revision: 518 } - Signal { name: "rightPaddingChanged"; revision: 518 } - Signal { name: "bottomPaddingChanged"; revision: 518 } - Signal { - name: "tabStopDistanceChanged" - revision: 522 - Parameter { name: "distance"; type: "double" } - } - Method { name: "selectAll" } - Method { name: "selectWord" } - Method { - name: "select" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { name: "deselect" } - Method { - name: "isRightToLeft" - type: "bool" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { name: "cut" } - Method { name: "copy" } - Method { name: "paste" } - Method { name: "undo" } - Method { name: "redo" } - Method { - name: "insert" - Parameter { name: "position"; type: "int" } - Parameter { name: "text"; type: "QString" } - } - Method { - name: "remove" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { - name: "append" - revision: 514 - Parameter { name: "text"; type: "QString" } - } - Method { name: "clear"; revision: 519 } - Method { name: "q_invalidate" } - Method { name: "q_textChanged" } - Method { - name: "q_contentsChange" - Parameter { type: "int" } - Parameter { type: "int" } - Parameter { type: "int" } - } - Method { name: "updateSelection" } - Method { name: "moveCursorDelegate" } - Method { name: "createCursor" } - Method { name: "q_canPasteChanged" } - Method { name: "updateWholeDocument" } - Method { - name: "invalidateBlock" - Parameter { name: "block"; type: "QTextBlock" } - } - Method { name: "updateCursor" } - Method { - name: "q_linkHovered" - Parameter { name: "link"; type: "QString" } - } - Method { - name: "q_markerHovered" - Parameter { name: "hovered"; type: "bool" } - } - Method { name: "q_updateAlignment" } - Method { name: "updateSize" } - Method { name: "triggerPreprocess" } - Method { - name: "loadResource" - revision: 1543 - type: "QVariant" - Parameter { name: "type"; type: "int" } - Parameter { name: "source"; type: "QUrl" } - } - Method { name: "resourceRequestFinished" } - Method { - name: "inputMethodQuery" - revision: 516 - type: "QVariant" - Parameter { name: "query"; type: "Qt::InputMethodQuery" } - Parameter { name: "argument"; type: "QVariant" } - } - Method { - name: "positionToRectangle" - type: "QRectF" - Parameter { type: "int" } - } - Method { - name: "positionAt" - type: "int" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "moveCursorSelection" - Parameter { name: "pos"; type: "int" } - } - Method { - name: "moveCursorSelection" - Parameter { name: "pos"; type: "int" } - Parameter { name: "mode"; type: "SelectionMode" } - } - Method { - name: "getText" - type: "QString" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { - name: "getFormattedText" - type: "QString" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { - name: "linkAt" - revision: 515 - type: "QString" - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - } - Component { - file: "private/qquicktextinput_p.h" - name: "QQuickTextInput" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - interfaces: ["QQuickTextInterface"] - exports: ["QtQuick/TextInput 6.4", "QtQuick/TextInput 6.7"] - exportMetaObjectRevisions: [1540, 1543] - Enum { - name: "EchoMode" - values: ["Normal", "NoEcho", "Password", "PasswordEchoOnEdit"] - } - Enum { - name: "HAlignment" - values: ["AlignLeft", "AlignRight", "AlignHCenter"] - } - Enum { - name: "VAlignment" - values: ["AlignTop", "AlignBottom", "AlignVCenter"] - } - Enum { - name: "WrapMode" - values: [ - "NoWrap", - "WordWrap", - "WrapAnywhere", - "WrapAtWordBoundaryOrAnywhere", - "Wrap" - ] - } - Enum { - name: "SelectionMode" - values: ["SelectCharacters", "SelectWords"] - } - Enum { - name: "CursorPosition" - values: ["CursorBetweenCharacters", "CursorOnCharacter"] - } - Enum { - name: "RenderType" - values: ["QtRendering", "NativeRendering", "CurveRendering"] - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - } - Property { - name: "length" - type: "int" - read: "length" - notify: "textChanged" - index: 1 - isReadonly: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 2 - } - Property { - name: "selectionColor" - type: "QColor" - read: "selectionColor" - write: "setSelectionColor" - notify: "selectionColorChanged" - index: 3 - } - Property { - name: "selectedTextColor" - type: "QColor" - read: "selectedTextColor" - write: "setSelectedTextColor" - notify: "selectedTextColorChanged" - index: 4 - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 5 - } - Property { - name: "horizontalAlignment" - type: "HAlignment" - read: "hAlign" - write: "setHAlign" - reset: "resetHAlign" - notify: "horizontalAlignmentChanged" - index: 6 - } - Property { - name: "effectiveHorizontalAlignment" - type: "HAlignment" - read: "effectiveHAlign" - notify: "effectiveHorizontalAlignmentChanged" - index: 7 - isReadonly: true - } - Property { - name: "verticalAlignment" - type: "VAlignment" - read: "vAlign" - write: "setVAlign" - notify: "verticalAlignmentChanged" - index: 8 - } - Property { - name: "wrapMode" - type: "WrapMode" - read: "wrapMode" - write: "setWrapMode" - notify: "wrapModeChanged" - index: 9 - } - Property { - name: "readOnly" - type: "bool" - read: "isReadOnly" - write: "setReadOnly" - notify: "readOnlyChanged" - index: 10 - } - Property { - name: "cursorVisible" - type: "bool" - read: "isCursorVisible" - write: "setCursorVisible" - notify: "cursorVisibleChanged" - index: 11 - } - Property { - name: "cursorPosition" - type: "int" - read: "cursorPosition" - write: "setCursorPosition" - notify: "cursorPositionChanged" - index: 12 - } - Property { - name: "cursorRectangle" - type: "QRectF" - read: "cursorRectangle" - notify: "cursorRectangleChanged" - index: 13 - isReadonly: true - } - Property { - name: "cursorDelegate" - type: "QQmlComponent" - isPointer: true - read: "cursorDelegate" - write: "setCursorDelegate" - notify: "cursorDelegateChanged" - index: 14 - } - Property { - name: "overwriteMode" - type: "bool" - read: "overwriteMode" - write: "setOverwriteMode" - notify: "overwriteModeChanged" - index: 15 - } - Property { - name: "selectionStart" - type: "int" - read: "selectionStart" - notify: "selectionStartChanged" - index: 16 - isReadonly: true - } - Property { - name: "selectionEnd" - type: "int" - read: "selectionEnd" - notify: "selectionEndChanged" - index: 17 - isReadonly: true - } - Property { - name: "selectedText" - type: "QString" - read: "selectedText" - notify: "selectedTextChanged" - index: 18 - isReadonly: true - } - Property { - name: "maximumLength" - type: "int" - read: "maxLength" - write: "setMaxLength" - notify: "maximumLengthChanged" - index: 19 - } - Property { - name: "validator" - type: "QValidator" - isPointer: true - read: "validator" - write: "setValidator" - notify: "validatorChanged" - index: 20 - } - Property { - name: "inputMask" - type: "QString" - read: "inputMask" - write: "setInputMask" - notify: "inputMaskChanged" - index: 21 - } - Property { - name: "inputMethodHints" - type: "Qt::InputMethodHints" - read: "inputMethodHints" - write: "setInputMethodHints" - notify: "inputMethodHintsChanged" - index: 22 - } - Property { - name: "acceptableInput" - type: "bool" - read: "hasAcceptableInput" - notify: "acceptableInputChanged" - index: 23 - isReadonly: true - } - Property { - name: "echoMode" - type: "EchoMode" - read: "echoMode" - write: "setEchoMode" - notify: "echoModeChanged" - index: 24 - } - Property { - name: "activeFocusOnPress" - type: "bool" - read: "focusOnPress" - write: "setFocusOnPress" - notify: "activeFocusOnPressChanged" - index: 25 - } - Property { - name: "passwordCharacter" - type: "QString" - read: "passwordCharacter" - write: "setPasswordCharacter" - notify: "passwordCharacterChanged" - index: 26 - } - Property { - name: "passwordMaskDelay" - revision: 516 - type: "int" - read: "passwordMaskDelay" - write: "setPasswordMaskDelay" - reset: "resetPasswordMaskDelay" - notify: "passwordMaskDelayChanged" - index: 27 - } - Property { - name: "displayText" - type: "QString" - read: "displayText" - notify: "displayTextChanged" - index: 28 - isReadonly: true - } - Property { - name: "preeditText" - revision: 519 - type: "QString" - read: "preeditText" - notify: "preeditTextChanged" - index: 29 - isReadonly: true - } - Property { - name: "autoScroll" - type: "bool" - read: "autoScroll" - write: "setAutoScroll" - notify: "autoScrollChanged" - index: 30 - } - Property { - name: "selectByMouse" - type: "bool" - read: "selectByMouse" - write: "setSelectByMouse" - notify: "selectByMouseChanged" - index: 31 - } - Property { - name: "mouseSelectionMode" - type: "SelectionMode" - read: "mouseSelectionMode" - write: "setMouseSelectionMode" - notify: "mouseSelectionModeChanged" - index: 32 - } - Property { - name: "persistentSelection" - type: "bool" - read: "persistentSelection" - write: "setPersistentSelection" - notify: "persistentSelectionChanged" - index: 33 - } - Property { - name: "canPaste" - type: "bool" - read: "canPaste" - notify: "canPasteChanged" - index: 34 - isReadonly: true - } - Property { - name: "canUndo" - type: "bool" - read: "canUndo" - notify: "canUndoChanged" - index: 35 - isReadonly: true - } - Property { - name: "canRedo" - type: "bool" - read: "canRedo" - notify: "canRedoChanged" - index: 36 - isReadonly: true - } - Property { - name: "inputMethodComposing" - type: "bool" - read: "isInputMethodComposing" - notify: "inputMethodComposingChanged" - index: 37 - isReadonly: true - } - Property { - name: "contentWidth" - type: "double" - read: "contentWidth" - notify: "contentSizeChanged" - index: 38 - isReadonly: true - } - Property { - name: "contentHeight" - type: "double" - read: "contentHeight" - notify: "contentSizeChanged" - index: 39 - isReadonly: true - } - Property { - name: "renderType" - type: "RenderType" - read: "renderType" - write: "setRenderType" - notify: "renderTypeChanged" - index: 40 - } - Property { - name: "padding" - revision: 518 - type: "double" - read: "padding" - write: "setPadding" - reset: "resetPadding" - notify: "paddingChanged" - index: 41 - } - Property { - name: "topPadding" - revision: 518 - type: "double" - read: "topPadding" - write: "setTopPadding" - reset: "resetTopPadding" - notify: "topPaddingChanged" - index: 42 - } - Property { - name: "leftPadding" - revision: 518 - type: "double" - read: "leftPadding" - write: "setLeftPadding" - reset: "resetLeftPadding" - notify: "leftPaddingChanged" - index: 43 - } - Property { - name: "rightPadding" - revision: 518 - type: "double" - read: "rightPadding" - write: "setRightPadding" - reset: "resetRightPadding" - notify: "rightPaddingChanged" - index: 44 - } - Property { - name: "bottomPadding" - revision: 518 - type: "double" - read: "bottomPadding" - write: "setBottomPadding" - reset: "resetBottomPadding" - notify: "bottomPaddingChanged" - index: 45 - } - Signal { name: "textChanged" } - Signal { name: "cursorPositionChanged" } - Signal { name: "cursorRectangleChanged" } - Signal { name: "selectionStartChanged" } - Signal { name: "selectionEndChanged" } - Signal { name: "selectedTextChanged" } - Signal { name: "accepted" } - Signal { name: "acceptableInputChanged" } - Signal { name: "editingFinished"; revision: 514 } - Signal { name: "textEdited"; revision: 521 } - Signal { name: "colorChanged" } - Signal { name: "selectionColorChanged" } - Signal { name: "selectedTextColorChanged" } - Signal { - name: "fontChanged" - Parameter { name: "font"; type: "QFont" } - } - Signal { - name: "horizontalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickTextInput::HAlignment" } - } - Signal { - name: "verticalAlignmentChanged" - Parameter { name: "alignment"; type: "QQuickTextInput::VAlignment" } - } - Signal { name: "wrapModeChanged" } - Signal { - name: "readOnlyChanged" - Parameter { name: "isReadOnly"; type: "bool" } - } - Signal { - name: "cursorVisibleChanged" - Parameter { name: "isCursorVisible"; type: "bool" } - } - Signal { name: "cursorDelegateChanged" } - Signal { - name: "overwriteModeChanged" - Parameter { name: "overwriteMode"; type: "bool" } - } - Signal { - name: "maximumLengthChanged" - Parameter { name: "maximumLength"; type: "int" } - } - Signal { name: "validatorChanged" } - Signal { - name: "inputMaskChanged" - Parameter { name: "inputMask"; type: "QString" } - } - Signal { - name: "echoModeChanged" - Parameter { name: "echoMode"; type: "QQuickTextInput::EchoMode" } - } - Signal { name: "passwordCharacterChanged" } - Signal { - name: "passwordMaskDelayChanged" - revision: 516 - Parameter { name: "delay"; type: "int" } - } - Signal { name: "displayTextChanged" } - Signal { name: "preeditTextChanged"; revision: 519 } - Signal { - name: "activeFocusOnPressChanged" - Parameter { name: "activeFocusOnPress"; type: "bool" } - } - Signal { - name: "autoScrollChanged" - Parameter { name: "autoScroll"; type: "bool" } - } - Signal { - name: "selectByMouseChanged" - Parameter { name: "selectByMouse"; type: "bool" } - } - Signal { - name: "mouseSelectionModeChanged" - Parameter { name: "mode"; type: "QQuickTextInput::SelectionMode" } - } - Signal { name: "persistentSelectionChanged" } - Signal { name: "canPasteChanged" } - Signal { name: "canUndoChanged" } - Signal { name: "canRedoChanged" } - Signal { name: "inputMethodComposingChanged" } - Signal { name: "effectiveHorizontalAlignmentChanged" } - Signal { name: "contentSizeChanged" } - Signal { name: "inputMethodHintsChanged" } - Signal { name: "renderTypeChanged" } - Signal { name: "paddingChanged"; revision: 518 } - Signal { name: "topPaddingChanged"; revision: 518 } - Signal { name: "leftPaddingChanged"; revision: 518 } - Signal { name: "rightPaddingChanged"; revision: 518 } - Signal { name: "bottomPaddingChanged"; revision: 518 } - Method { name: "selectAll" } - Method { name: "selectWord" } - Method { - name: "select" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { name: "deselect" } - Method { - name: "isRightToLeft" - type: "bool" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { name: "cut" } - Method { name: "copy" } - Method { name: "paste" } - Method { name: "undo" } - Method { name: "redo" } - Method { - name: "insert" - Parameter { name: "position"; type: "int" } - Parameter { name: "text"; type: "QString" } - } - Method { - name: "remove" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - Method { - name: "ensureVisible" - revision: 516 - Parameter { name: "position"; type: "int" } - } - Method { name: "clear"; revision: 519 } - Method { name: "selectionChanged" } - Method { name: "createCursor" } - Method { - name: "updateCursorRectangle" - Parameter { name: "scroll"; type: "bool" } - } - Method { name: "updateCursorRectangle"; isCloned: true } - Method { name: "q_canPasteChanged" } - Method { name: "q_updateAlignment" } - Method { name: "triggerPreprocess" } - Method { name: "q_validatorChanged" } - Method { name: "positionAt"; isJavaScriptFunction: true } - Method { - name: "positionToRectangle" - type: "QRectF" - Parameter { name: "pos"; type: "int" } - } - Method { - name: "moveCursorSelection" - Parameter { name: "pos"; type: "int" } - } - Method { - name: "moveCursorSelection" - Parameter { name: "pos"; type: "int" } - Parameter { name: "mode"; type: "SelectionMode" } - } - Method { - name: "inputMethodQuery" - revision: 516 - type: "QVariant" - Parameter { name: "query"; type: "Qt::InputMethodQuery" } - Parameter { name: "argument"; type: "QVariant" } - } - Method { - name: "getText" - type: "QString" - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - } - } - Component { - file: "private/qquicktext_p.h" - name: "QQuickTextLine" - accessSemantics: "reference" - prototype: "QObject" - Property { name: "number"; type: "int"; read: "number"; index: 0; isReadonly: true; isFinal: true } - Property { name: "width"; type: "double"; read: "width"; write: "setWidth"; index: 1; isFinal: true } - Property { - name: "height" - type: "double" - read: "height" - write: "setHeight" - index: 2 - isFinal: true - } - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 3; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 4; isFinal: true } - Property { - name: "implicitWidth" - revision: 527 - type: "double" - read: "implicitWidth" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "isLast" - revision: 527 - type: "bool" - read: "isLast" - index: 6 - isReadonly: true - isFinal: true - } - } - Component { - file: "private/qquicktextmetrics_p.h" - name: "QQuickTextMetrics" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/TextMetrics 2.4", "QtQuick/TextMetrics 6.0"] - exportMetaObjectRevisions: [516, 1536] - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 0 - isFinal: true - } - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 1 - isFinal: true - } - Property { - name: "advanceWidth" - type: "double" - read: "advanceWidth" - notify: "metricsChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "boundingRect" - type: "QRectF" - read: "boundingRect" - notify: "metricsChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "width" - type: "double" - read: "width" - notify: "metricsChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "height" - type: "double" - read: "height" - notify: "metricsChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "tightBoundingRect" - type: "QRectF" - read: "tightBoundingRect" - notify: "metricsChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "elidedText" - type: "QString" - read: "elidedText" - notify: "metricsChanged" - index: 7 - isReadonly: true - isFinal: true - } - Property { - name: "elide" - type: "Qt::TextElideMode" - read: "elide" - write: "setElide" - notify: "elideChanged" - index: 8 - isFinal: true - } - Property { - name: "elideWidth" - type: "double" - read: "elideWidth" - write: "setElideWidth" - notify: "elideWidthChanged" - index: 9 - isFinal: true - } - Property { - name: "renderType" - type: "QQuickText::RenderType" - read: "renderType" - write: "setRenderType" - notify: "renderTypeChanged" - index: 10 - } - Signal { name: "fontChanged" } - Signal { name: "textChanged" } - Signal { name: "elideChanged" } - Signal { name: "elideWidthChanged" } - Signal { name: "metricsChanged" } - Signal { name: "renderTypeChanged" } - } - Component { - file: "private/qquicktextselection_p.h" - name: "QQuickTextSelection" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "text" - type: "QString" - read: "text" - write: "setText" - notify: "textChanged" - index: 0 - isFinal: true - } - Property { - name: "font" - type: "QFont" - read: "font" - write: "setFont" - notify: "fontChanged" - index: 1 - isFinal: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 2 - isFinal: true - } - Property { - name: "alignment" - type: "Qt::Alignment" - read: "alignment" - write: "setAlignment" - notify: "alignmentChanged" - index: 3 - isFinal: true - } - Signal { name: "textChanged" } - Signal { name: "fontChanged" } - Signal { name: "colorChanged" } - Signal { name: "alignmentChanged" } - } - Component { - file: "private/qquickmultipointtoucharea_p.h" - name: "QQuickTouchPoint" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtQuick/TouchPoint 2.0", - "QtQuick/TouchPoint 2.9", - "QtQuick/TouchPoint 6.0" - ] - exportMetaObjectRevisions: [512, 521, 1536] - Property { - name: "pointId" - type: "int" - read: "pointId" - notify: "pointIdChanged" - index: 0 - isReadonly: true - } - Property { - name: "uniqueId" - revision: 521 - type: "QPointingDeviceUniqueId" - read: "uniqueId" - notify: "uniqueIdChanged" - index: 1 - isReadonly: true - } - Property { - name: "pressed" - type: "bool" - read: "pressed" - notify: "pressedChanged" - index: 2 - isReadonly: true - } - Property { name: "x"; type: "double"; read: "x"; notify: "xChanged"; index: 3; isReadonly: true } - Property { name: "y"; type: "double"; read: "y"; notify: "yChanged"; index: 4; isReadonly: true } - Property { - name: "ellipseDiameters" - revision: 521 - type: "QSizeF" - read: "ellipseDiameters" - notify: "ellipseDiametersChanged" - index: 5 - isReadonly: true - } - Property { - name: "pressure" - type: "double" - read: "pressure" - notify: "pressureChanged" - index: 6 - isReadonly: true - } - Property { - name: "rotation" - revision: 521 - type: "double" - read: "rotation" - notify: "rotationChanged" - index: 7 - isReadonly: true - } - Property { - name: "velocity" - type: "QVector2D" - read: "velocity" - notify: "velocityChanged" - index: 8 - isReadonly: true - } - Property { - name: "area" - type: "QRectF" - read: "area" - notify: "areaChanged" - index: 9 - isReadonly: true - } - Property { - name: "startX" - type: "double" - read: "startX" - notify: "startXChanged" - index: 10 - isReadonly: true - } - Property { - name: "startY" - type: "double" - read: "startY" - notify: "startYChanged" - index: 11 - isReadonly: true - } - Property { - name: "previousX" - type: "double" - read: "previousX" - notify: "previousXChanged" - index: 12 - isReadonly: true - } - Property { - name: "previousY" - type: "double" - read: "previousY" - notify: "previousYChanged" - index: 13 - isReadonly: true - } - Property { - name: "sceneX" - type: "double" - read: "sceneX" - notify: "sceneXChanged" - index: 14 - isReadonly: true - } - Property { - name: "sceneY" - type: "double" - read: "sceneY" - notify: "sceneYChanged" - index: 15 - isReadonly: true - } - Signal { name: "pressedChanged" } - Signal { name: "pointIdChanged" } - Signal { name: "uniqueIdChanged"; revision: 521 } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "ellipseDiametersChanged"; revision: 521 } - Signal { name: "pressureChanged" } - Signal { name: "rotationChanged"; revision: 521 } - Signal { name: "velocityChanged" } - Signal { name: "areaChanged" } - Signal { name: "startXChanged" } - Signal { name: "startYChanged" } - Signal { name: "previousXChanged" } - Signal { name: "previousYChanged" } - Signal { name: "sceneXChanged" } - Signal { name: "sceneYChanged" } - } - Component { - file: "qquickitem.h" - name: "QQuickTransform" - accessSemantics: "reference" - prototype: "QObject" - Method { name: "update" } - } - Component { - file: "private/qquicktransition_p.h" - name: "QQuickTransition" - accessSemantics: "reference" - defaultProperty: "animations" - prototype: "QObject" - deferredNames: ["animations"] - exports: ["QtQuick/Transition 2.0", "QtQuick/Transition 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { - name: "from" - type: "QString" - read: "fromState" - write: "setFromState" - notify: "fromChanged" - index: 0 - } - Property { - name: "to" - type: "QString" - read: "toState" - write: "setToState" - notify: "toChanged" - index: 1 - } - Property { - name: "reversible" - type: "bool" - read: "reversible" - write: "setReversible" - notify: "reversibleChanged" - index: 2 - } - Property { - name: "running" - type: "bool" - read: "running" - notify: "runningChanged" - index: 3 - isReadonly: true - } - Property { - name: "animations" - type: "QQuickAbstractAnimation" - isList: true - read: "animations" - index: 4 - isReadonly: true - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 5 - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "reversibleChanged" } - Signal { name: "enabledChanged" } - Signal { name: "runningChanged" } - } - Component { - file: "private/qquicktranslate_p.h" - name: "QQuickTranslate" - accessSemantics: "reference" - prototype: "QQuickTransform" - exports: ["QtQuick/Translate 2.0", "QtQuick/Translate 6.0"] - exportMetaObjectRevisions: [512, 1536] - Property { name: "x"; type: "double"; read: "x"; write: "setX"; notify: "xChanged"; index: 0 } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; notify: "yChanged"; index: 1 } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - } - Component { - file: "private/qquicktreeview_p.h" - name: "QQuickTreeView" - accessSemantics: "reference" - prototype: "QQuickTableView" - exports: [ - "QtQuick/TreeView 6.3", - "QtQuick/TreeView 6.4", - "QtQuick/TreeView 6.5", - "QtQuick/TreeView 6.6", - "QtQuick/TreeView 6.7" - ] - exportMetaObjectRevisions: [1539, 1540, 1541, 1542, 1543] - Property { - name: "rootIndex" - revision: 1542 - type: "QModelIndex" - read: "rootIndex" - write: "setRootIndex" - reset: "resetRootIndex" - notify: "rootIndexChanged" - index: 0 - isFinal: true - } - Signal { - name: "expanded" - Parameter { name: "row"; type: "int" } - Parameter { name: "depth"; type: "int" } - } - Signal { - name: "collapsed" - Parameter { name: "row"; type: "int" } - Parameter { name: "recursively"; type: "bool" } - } - Signal { name: "rootIndexChanged"; revision: 1542 } - Method { - name: "depth" - type: "int" - Parameter { name: "row"; type: "int" } - } - Method { - name: "isExpanded" - type: "bool" - Parameter { name: "row"; type: "int" } - } - Method { - name: "expand" - Parameter { name: "row"; type: "int" } - } - Method { - name: "collapse" - Parameter { name: "row"; type: "int" } - } - Method { - name: "toggleExpanded" - Parameter { name: "row"; type: "int" } - } - Method { - name: "expandRecursively" - revision: 1540 - Parameter { name: "row"; type: "int" } - Parameter { name: "depth"; type: "int" } - } - Method { - name: "expandRecursively" - revision: 1540 - isCloned: true - Parameter { name: "row"; type: "int" } - } - Method { name: "expandRecursively"; revision: 1540; isCloned: true } - Method { - name: "collapseRecursively" - revision: 1540 - Parameter { name: "row"; type: "int" } - } - Method { name: "collapseRecursively"; revision: 1540; isCloned: true } - Method { - name: "expandToIndex" - revision: 1540 - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "modelIndex" - type: "QModelIndex" - Parameter { name: "cell"; type: "QPoint" } - } - Method { - name: "cellAtIndex" - type: "QPoint" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "modelIndex" - revision: 1540 - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickUniformAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/UniformAnimator 2.2", - "QtQuick/UniformAnimator 2.12", - "QtQuick/UniformAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - Property { - name: "uniform" - type: "QString" - read: "uniform" - write: "setUniform" - notify: "uniformChanged" - index: 0 - } - Signal { - name: "uniformChanged" - Parameter { type: "QString" } - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QVector2D" - accessSemantics: "value" - extension: "QQuickVector2DValueType" - exports: ["QtQuick/vector2d 2.0", "QtQuick/vector2d 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickVector2DValueType" - accessSemantics: "value" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 1; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "dotProduct" - type: "double" - Parameter { name: "vec"; type: "QVector2D" } - } - Method { - name: "times" - type: "QVector2D" - Parameter { name: "vec"; type: "QVector2D" } - } - Method { - name: "times" - type: "QVector2D" - Parameter { name: "scalar"; type: "double" } - } - Method { - name: "plus" - type: "QVector2D" - Parameter { name: "vec"; type: "QVector2D" } - } - Method { - name: "minus" - type: "QVector2D" - Parameter { name: "vec"; type: "QVector2D" } - } - Method { name: "normalized"; type: "QVector2D" } - Method { name: "length"; type: "double" } - Method { name: "toVector3d"; type: "QVector3D" } - Method { name: "toVector4d"; type: "QVector4D" } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector2D" } - Parameter { name: "epsilon"; type: "double" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector2D" } - } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QVector3D" - accessSemantics: "value" - extension: "QQuickVector3DValueType" - exports: ["QtQuick/vector3d 2.0", "QtQuick/vector3d 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickVector3DValueType" - accessSemantics: "value" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 1; isFinal: true } - Property { name: "z"; type: "double"; read: "z"; write: "setZ"; index: 2; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "crossProduct" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "dotProduct" - type: "double" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "times" - type: "QVector3D" - Parameter { name: "m"; type: "QMatrix4x4" } - } - Method { - name: "times" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "times" - type: "QVector3D" - Parameter { name: "scalar"; type: "double" } - } - Method { - name: "plus" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { - name: "minus" - type: "QVector3D" - Parameter { name: "vec"; type: "QVector3D" } - } - Method { name: "normalized"; type: "QVector3D" } - Method { name: "length"; type: "double" } - Method { name: "toVector2d"; type: "QVector2D" } - Method { name: "toVector4d"; type: "QVector4D" } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector3D" } - Parameter { name: "epsilon"; type: "double" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector3D" } - } - } - Component { - file: "private/qquickanimation_p.h" - name: "QQuickVector3dAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: [ - "QtQuick/Vector3dAnimation 2.0", - "QtQuick/Vector3dAnimation 2.12", - "QtQuick/Vector3dAnimation 6.0" - ] - exportMetaObjectRevisions: [512, 524, 1536] - Property { - name: "from" - type: "QVector3D" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - } - Property { name: "to"; type: "QVector3D"; read: "to"; write: "setTo"; notify: "toChanged"; index: 1 } - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QVector4D" - accessSemantics: "value" - extension: "QQuickVector4DValueType" - exports: ["QtQuick/vector4d 2.0", "QtQuick/vector4d 6.0"] - isStructured: true - exportMetaObjectRevisions: [512, 1536] - } - Component { - file: "private/qquickvaluetypes_p.h" - name: "QQuickVector4DValueType" - accessSemantics: "value" - Property { name: "x"; type: "double"; read: "x"; write: "setX"; index: 0; isFinal: true } - Property { name: "y"; type: "double"; read: "y"; write: "setY"; index: 1; isFinal: true } - Property { name: "z"; type: "double"; read: "z"; write: "setZ"; index: 2; isFinal: true } - Property { name: "w"; type: "double"; read: "w"; write: "setW"; index: 3; isFinal: true } - Method { name: "toString"; type: "QString" } - Method { - name: "dotProduct" - type: "double" - Parameter { name: "vec"; type: "QVector4D" } - } - Method { - name: "times" - type: "QVector4D" - Parameter { name: "vec"; type: "QVector4D" } - } - Method { - name: "times" - type: "QVector4D" - Parameter { name: "m"; type: "QMatrix4x4" } - } - Method { - name: "times" - type: "QVector4D" - Parameter { name: "scalar"; type: "double" } - } - Method { - name: "plus" - type: "QVector4D" - Parameter { name: "vec"; type: "QVector4D" } - } - Method { - name: "minus" - type: "QVector4D" - Parameter { name: "vec"; type: "QVector4D" } - } - Method { name: "normalized"; type: "QVector4D" } - Method { name: "length"; type: "double" } - Method { name: "toVector2d"; type: "QVector2D" } - Method { name: "toVector3d"; type: "QVector3D" } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector4D" } - Parameter { name: "epsilon"; type: "double" } - } - Method { - name: "fuzzyEquals" - type: "bool" - Parameter { name: "vec"; type: "QVector4D" } - } - } - Component { - file: "private/qquicklistview_p.h" - name: "QQuickViewSection" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/ViewSection 2.0", "QtQuick/ViewSection 6.0"] - exportMetaObjectRevisions: [512, 1536] - Enum { - name: "SectionCriteria" - values: ["FullString", "FirstCharacter"] - } - Enum { - name: "LabelPositioning" - values: ["InlineLabels", "CurrentLabelAtStart", "NextLabelAtEnd"] - } - Property { - name: "property" - type: "QString" - read: "property" - write: "setProperty" - notify: "propertyChanged" - index: 0 - } - Property { - name: "criteria" - type: "SectionCriteria" - read: "criteria" - write: "setCriteria" - notify: "criteriaChanged" - index: 1 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 2 - } - Property { - name: "labelPositioning" - type: "int" - read: "labelPositioning" - write: "setLabelPositioning" - notify: "labelPositioningChanged" - index: 3 - } - Signal { name: "sectionsChanged" } - Signal { name: "propertyChanged" } - Signal { name: "criteriaChanged" } - Signal { name: "delegateChanged" } - Signal { name: "labelPositioningChanged" } - } - Component { - file: "private/qquickitemviewtransition_p.h" - name: "QQuickViewTransitionAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/ViewTransition 2.0", "QtQuick/ViewTransition 6.0"] - isCreatable: false - exportMetaObjectRevisions: [512, 1536] - attachedType: "QQuickViewTransitionAttached" - Property { - name: "index" - type: "int" - read: "index" - notify: "indexChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "item" - type: "QQuickItem" - isPointer: true - read: "item" - notify: "itemChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "destination" - type: "QPointF" - read: "destination" - notify: "destinationChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "targetIndexes" - type: "int" - isList: true - read: "targetIndexes" - notify: "targetIndexesChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "targetItems" - type: "QObject" - isList: true - read: "targetItems" - notify: "targetItemsChanged" - index: 4 - isReadonly: true - isFinal: true - } - Signal { name: "indexChanged" } - Signal { name: "itemChanged" } - Signal { name: "destinationChanged" } - Signal { name: "targetIndexesChanged" } - Signal { name: "targetItemsChanged" } - } - Component { - file: "private/qquickevents_p_p.h" - name: "QQuickWheelEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick/WheelEvent 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1543] - Property { - name: "device" - type: "QPointingDevice" - isPointer: true - isConstant: true - read: "pointingDevice" - index: 0 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "x" - type: "double" - read: "x" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "y" - type: "double" - read: "y" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "angleDelta" - type: "QPoint" - read: "angleDelta" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "pixelDelta" - type: "QPoint" - read: "pixelDelta" - index: 4 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "phase" - type: "Qt::ScrollPhase" - read: "phase" - index: 5 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "buttons" - type: "int" - read: "buttons" - index: 6 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "modifiers" - type: "int" - read: "modifiers" - index: 7 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "inverted" - type: "bool" - read: "inverted" - index: 8 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "accepted" - type: "bool" - read: "isAccepted" - write: "setAccepted" - index: 9 - isFinal: true - } - } - Component { - file: "private/qquickwheelhandler_p.h" - name: "QQuickWheelHandler" - accessSemantics: "reference" - prototype: "QQuickSinglePointHandler" - exports: [ - "QtQuick/WheelHandler 2.14", - "QtQuick/WheelHandler 2.15", - "QtQuick/WheelHandler 6.0", - "QtQuick/WheelHandler 6.3" - ] - exportMetaObjectRevisions: [526, 527, 1536, 1539] - Property { - name: "orientation" - type: "Qt::Orientation" - read: "orientation" - write: "setOrientation" - notify: "orientationChanged" - index: 0 - } - Property { - name: "invertible" - type: "bool" - read: "isInvertible" - write: "setInvertible" - notify: "invertibleChanged" - index: 1 - } - Property { - name: "activeTimeout" - type: "double" - read: "activeTimeout" - write: "setActiveTimeout" - notify: "activeTimeoutChanged" - index: 2 - } - Property { - name: "rotation" - type: "double" - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 3 - } - Property { - name: "rotationScale" - type: "double" - read: "rotationScale" - write: "setRotationScale" - notify: "rotationScaleChanged" - index: 4 - } - Property { - name: "property" - type: "QString" - read: "property" - write: "setProperty" - notify: "propertyChanged" - index: 5 - } - Property { - name: "targetScaleMultiplier" - type: "double" - read: "targetScaleMultiplier" - write: "setTargetScaleMultiplier" - notify: "targetScaleMultiplierChanged" - index: 6 - } - Property { - name: "targetTransformAroundCursor" - type: "bool" - read: "isTargetTransformAroundCursor" - write: "setTargetTransformAroundCursor" - notify: "targetTransformAroundCursorChanged" - index: 7 - } - Property { - name: "blocking" - revision: 1539 - type: "bool" - read: "isBlocking" - write: "setBlocking" - notify: "blockingChanged" - index: 8 - } - Signal { - name: "wheel" - Parameter { name: "event"; type: "QQuickWheelEvent"; isPointer: true } - } - Signal { name: "orientationChanged" } - Signal { name: "invertibleChanged" } - Signal { name: "activeTimeoutChanged" } - Signal { name: "rotationChanged" } - Signal { name: "rotationScaleChanged" } - Signal { name: "propertyChanged" } - Signal { name: "targetScaleMultiplierChanged" } - Signal { name: "targetTransformAroundCursorChanged" } - Signal { name: "blockingChanged"; revision: 1539 } - } - Component { - file: "qquickwindow.h" - name: "QQuickWindow" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QWindow" - exports: ["QtQuick/Window 2.0"] - exportMetaObjectRevisions: [512] - Enum { - name: "CreateTextureOptions" - alias: "CreateTextureOption" - isFlag: true - values: [ - "TextureHasAlphaChannel", - "TextureHasMipmaps", - "TextureOwnsGLTexture", - "TextureCanUseAtlas", - "TextureIsOpaque" - ] - } - Enum { - name: "SceneGraphError" - values: ["ContextNotAvailable"] - } - Enum { - name: "TextRenderType" - values: [ - "QtTextRendering", - "NativeTextRendering", - "CurveTextRendering" - ] - } - Property { - name: "data" - type: "QObject" - isList: true - read: "data" - index: 0 - privateClass: "QQuickWindowPrivate" - isReadonly: true - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 1 - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - index: 2 - isReadonly: true - isConstant: true - } - Property { - name: "activeFocusItem" - revision: 513 - type: "QQuickItem" - isPointer: true - read: "activeFocusItem" - notify: "activeFocusItemChanged" - index: 3 - isReadonly: true - } - Property { - name: "palette" - revision: 1538 - type: "QQuickPalette" - isPointer: true - read: "palette" - write: "setPalette" - reset: "resetPalette" - notify: "paletteChanged" - index: 4 - privateClass: "QQuickWindowPrivate" - } - Signal { name: "frameSwapped" } - Signal { name: "sceneGraphInitialized" } - Signal { name: "sceneGraphInvalidated" } - Signal { name: "beforeSynchronizing" } - Signal { name: "afterSynchronizing"; revision: 514 } - Signal { name: "beforeRendering" } - Signal { name: "afterRendering" } - Signal { name: "afterAnimating"; revision: 514 } - Signal { name: "sceneGraphAboutToStop"; revision: 514 } - Signal { - name: "closing" - revision: 513 - Parameter { name: "close"; type: "QQuickCloseEvent"; isPointer: true } - } - Signal { - name: "colorChanged" - Parameter { type: "QColor" } - } - Signal { name: "activeFocusItemChanged"; revision: 513 } - Signal { - name: "sceneGraphError" - revision: 514 - Parameter { name: "error"; type: "QQuickWindow::SceneGraphError" } - Parameter { name: "message"; type: "QString" } - } - Signal { name: "beforeRenderPassRecording"; revision: 526 } - Signal { name: "afterRenderPassRecording"; revision: 526 } - Signal { name: "paletteChanged"; revision: 1536 } - Signal { name: "paletteCreated"; revision: 1536 } - Signal { name: "beforeFrameBegin"; revision: 1536 } - Signal { name: "afterFrameEnd"; revision: 1536 } - Method { name: "update" } - Method { name: "releaseResources" } - Method { name: "maybeUpdate" } - Method { name: "cleanupSceneGraph" } - Method { name: "physicalDpiChanged" } - Method { - name: "handleScreenChanged" - Parameter { name: "screen"; type: "QScreen"; isPointer: true } - } - Method { name: "runJobsAfterSwap" } - Method { - name: "handleApplicationStateChanged" - Parameter { name: "state"; type: "Qt::ApplicationState" } - } - Method { name: "handleFontDatabaseChanged" } - } - Component { - file: "private/qquickwindowattached_p.h" - name: "QQuickWindowAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "visibility" - type: "QWindow::Visibility" - read: "visibility" - notify: "visibilityChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "active" - type: "bool" - read: "isActive" - notify: "activeChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "activeFocusItem" - type: "QQuickItem" - isPointer: true - read: "activeFocusItem" - notify: "activeFocusItemChanged" - index: 2 - isReadonly: true - isFinal: true - } - Property { - name: "contentItem" - type: "QQuickItem" - isPointer: true - read: "contentItem" - notify: "contentItemChanged" - index: 3 - isReadonly: true - isFinal: true - } - Property { - name: "width" - type: "int" - read: "width" - notify: "widthChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "height" - type: "int" - read: "height" - notify: "heightChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "window" - type: "QQuickWindow" - isPointer: true - read: "window" - notify: "windowChanged" - index: 6 - isReadonly: true - isFinal: true - } - Signal { name: "visibilityChanged" } - Signal { name: "activeChanged" } - Signal { name: "activeFocusItemChanged" } - Signal { name: "contentItemChanged" } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - Signal { name: "windowChanged" } - Method { - name: "windowChange" - Parameter { type: "QQuickWindow"; isPointer: true } - } - } - Component { - file: "private/qquickwindowcontainer_p.h" - name: "QQuickWindowContainer" - accessSemantics: "reference" - prototype: "QQuickImplicitSizeItem" - exports: ["QtQuick/WindowContainer 6.7"] - exportMetaObjectRevisions: [1543] - Property { - name: "window" - type: "QWindow" - isPointer: true - read: "containedWindow" - write: "setContainedWindow" - notify: "containedWindowChanged" - index: 0 - isFinal: true - } - Signal { - name: "containedWindowChanged" - Parameter { name: "window"; type: "QWindow"; isPointer: true } - } - } - Component { - file: "private/qquickwindowmodule_p.h" - name: "QQuickWindowQmlImpl" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuickWindow" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick/Window 2.1", - "QtQuick/Window 2.2", - "QtQuick/Window 2.3", - "QtQuick/Window 2.13", - "QtQuick/Window 2.14", - "QtQuick/Window 6.0", - "QtQuick/Window 6.2", - "QtQuick/Window 6.7" - ] - exportMetaObjectRevisions: [513, 514, 515, 525, 526, 1536, 1538, 1543] - attachedType: "QQuickWindowAttached" - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 0 - } - Property { - name: "visibility" - type: "QWindow::Visibility" - read: "visibility" - write: "setVisibility" - notify: "visibilityChanged" - index: 1 - } - Property { - name: "screen" - revision: 515 - type: "QObject" - isPointer: true - read: "screen" - write: "setScreen" - notify: "screenChanged" - index: 2 - } - Property { - name: "parent" - revision: 1543 - type: "QObject" - isPointer: true - read: "visualParent" - write: "setVisualParent" - notify: "visualParentChanged" - index: 3 - isFinal: true - } - Property { name: "x"; type: "int"; read: "x"; write: "setX"; notify: "xChanged"; index: 4 } - Property { name: "y"; type: "int"; read: "y"; write: "setY"; notify: "yChanged"; index: 5 } - Property { - name: "z" - revision: 1543 - type: "double" - read: "z" - write: "setZ" - notify: "zChanged" - index: 6 - isFinal: true - } - Signal { - name: "visibleChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "visibilityChanged" - Parameter { name: "visibility"; type: "QWindow::Visibility" } - } - Signal { - name: "visualParentChanged" - revision: 1543 - Parameter { type: "QObject"; isPointer: true } - } - Signal { name: "screenChanged"; revision: 515 } - Signal { - name: "xChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "yChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { name: "zChanged"; revision: 1543 } - Method { name: "applyWindowVisibility"; revision: 1543 } - Method { name: "updateTransientParent"; revision: 1543 } - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickXAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/XAnimator 2.2", - "QtQuick/XAnimator 2.12", - "QtQuick/XAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - } - Component { - file: "private/qquickanimator_p.h" - name: "QQuickYAnimator" - accessSemantics: "reference" - prototype: "QQuickAnimator" - exports: [ - "QtQuick/YAnimator 2.2", - "QtQuick/YAnimator 2.12", - "QtQuick/YAnimator 6.0" - ] - exportMetaObjectRevisions: [514, 524, 1536] - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QRegularExpressionValidator" - accessSemantics: "reference" - prototype: "QValidator" - exports: [ - "QtQuick/RegularExpressionValidator 2.14", - "QtQuick/RegularExpressionValidator 6.0" - ] - exportMetaObjectRevisions: [526, 1536] - Property { - name: "regularExpression" - type: "QRegularExpression" - read: "regularExpression" - write: "setRegularExpression" - notify: "regularExpressionChanged" - index: 0 - } - Signal { - name: "regularExpressionChanged" - Parameter { name: "re"; type: "QRegularExpression" } - } - Method { - name: "setRegularExpression" - Parameter { name: "re"; type: "QRegularExpression" } - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QStyleHints" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "cursorFlashTime" - type: "int" - read: "cursorFlashTime" - notify: "cursorFlashTimeChanged" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "fontSmoothingGamma" - type: "double" - read: "fontSmoothingGamma" - index: 1 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "keyboardAutoRepeatRate" - type: "int" - read: "keyboardAutoRepeatRate" - index: 2 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "keyboardAutoRepeatRateF" - type: "double" - read: "keyboardAutoRepeatRateF" - index: 3 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "keyboardInputInterval" - type: "int" - read: "keyboardInputInterval" - notify: "keyboardInputIntervalChanged" - index: 4 - isReadonly: true - isFinal: true - } - Property { - name: "mouseDoubleClickInterval" - type: "int" - read: "mouseDoubleClickInterval" - notify: "mouseDoubleClickIntervalChanged" - index: 5 - isReadonly: true - isFinal: true - } - Property { - name: "mousePressAndHoldInterval" - type: "int" - read: "mousePressAndHoldInterval" - notify: "mousePressAndHoldIntervalChanged" - index: 6 - isReadonly: true - isFinal: true - } - Property { - name: "passwordMaskCharacter" - type: "QChar" - read: "passwordMaskCharacter" - index: 7 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "passwordMaskDelay" - type: "int" - read: "passwordMaskDelay" - index: 8 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "setFocusOnTouchRelease" - type: "bool" - read: "setFocusOnTouchRelease" - index: 9 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "showIsFullScreen" - type: "bool" - read: "showIsFullScreen" - index: 10 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "showIsMaximized" - type: "bool" - read: "showIsMaximized" - index: 11 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "showShortcutsInContextMenus" - type: "bool" - read: "showShortcutsInContextMenus" - write: "setShowShortcutsInContextMenus" - notify: "showShortcutsInContextMenusChanged" - index: 12 - isFinal: true - } - Property { - name: "startDragDistance" - type: "int" - read: "startDragDistance" - notify: "startDragDistanceChanged" - index: 13 - isReadonly: true - isFinal: true - } - Property { - name: "startDragTime" - type: "int" - read: "startDragTime" - notify: "startDragTimeChanged" - index: 14 - isReadonly: true - isFinal: true - } - Property { - name: "startDragVelocity" - type: "int" - read: "startDragVelocity" - index: 15 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "useRtlExtensions" - type: "bool" - read: "useRtlExtensions" - index: 16 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "tabFocusBehavior" - type: "Qt::TabFocusBehavior" - read: "tabFocusBehavior" - notify: "tabFocusBehaviorChanged" - index: 17 - isReadonly: true - isFinal: true - } - Property { - name: "singleClickActivation" - type: "bool" - read: "singleClickActivation" - index: 18 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "useHoverEffects" - type: "bool" - read: "useHoverEffects" - write: "setUseHoverEffects" - notify: "useHoverEffectsChanged" - index: 19 - isFinal: true - } - Property { - name: "wheelScrollLines" - type: "int" - read: "wheelScrollLines" - notify: "wheelScrollLinesChanged" - index: 20 - isReadonly: true - isFinal: true - } - Property { - name: "mouseQuickSelectionThreshold" - type: "int" - read: "mouseQuickSelectionThreshold" - write: "setMouseQuickSelectionThreshold" - notify: "mouseQuickSelectionThresholdChanged" - index: 21 - isFinal: true - } - Property { - name: "mouseDoubleClickDistance" - type: "int" - read: "mouseDoubleClickDistance" - index: 22 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "touchDoubleTapDistance" - type: "int" - read: "touchDoubleTapDistance" - index: 23 - isReadonly: true - isFinal: true - isConstant: true - } - Property { - name: "colorScheme" - type: "Qt::ColorScheme" - read: "colorScheme" - notify: "colorSchemeChanged" - index: 24 - isReadonly: true - isFinal: true - } - Signal { - name: "cursorFlashTimeChanged" - Parameter { name: "cursorFlashTime"; type: "int" } - } - Signal { - name: "keyboardInputIntervalChanged" - Parameter { name: "keyboardInputInterval"; type: "int" } - } - Signal { - name: "mouseDoubleClickIntervalChanged" - Parameter { name: "mouseDoubleClickInterval"; type: "int" } - } - Signal { - name: "mousePressAndHoldIntervalChanged" - Parameter { name: "mousePressAndHoldInterval"; type: "int" } - } - Signal { - name: "startDragDistanceChanged" - Parameter { name: "startDragDistance"; type: "int" } - } - Signal { - name: "startDragTimeChanged" - Parameter { name: "startDragTime"; type: "int" } - } - Signal { - name: "tabFocusBehaviorChanged" - Parameter { name: "tabFocusBehavior"; type: "Qt::TabFocusBehavior" } - } - Signal { - name: "useHoverEffectsChanged" - Parameter { name: "useHoverEffects"; type: "bool" } - } - Signal { - name: "showShortcutsInContextMenusChanged" - Parameter { type: "bool" } - } - Signal { - name: "wheelScrollLinesChanged" - Parameter { name: "scrollLines"; type: "int" } - } - Signal { - name: "mouseQuickSelectionThresholdChanged" - Parameter { name: "threshold"; type: "int" } - } - Signal { - name: "colorSchemeChanged" - Parameter { name: "colorScheme"; type: "Qt::ColorScheme" } - } - } - Component { - file: "qsurface.h" - name: "QSurface" - accessSemantics: "value" - Enum { - name: "SurfaceClass" - values: ["Window", "Offscreen"] - } - Enum { - name: "SurfaceType" - values: [ - "RasterSurface", - "OpenGLSurface", - "RasterGLSurface", - "OpenVGSurface", - "VulkanSurface", - "MetalSurface", - "Direct3DSurface" - ] - } - } - Component { - file: "private/qquickforeignutils_p.h" - name: "QValidator" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "State" - values: ["Invalid", "Intermediate", "Acceptable"] - } - Signal { name: "changed" } - } - Component { - file: "private/qquickwindowmodule_p.h" - name: "QWindow" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "Visibility" - values: [ - "Hidden", - "AutomaticVisibility", - "Windowed", - "Minimized", - "Maximized", - "FullScreen" - ] - } - Enum { - name: "AncestorMode" - values: ["ExcludeTransients", "IncludeTransients"] - } - Property { - name: "title" - type: "QString" - read: "title" - write: "setTitle" - notify: "windowTitleChanged" - index: 0 - } - Property { - name: "modality" - type: "Qt::WindowModality" - read: "modality" - write: "setModality" - notify: "modalityChanged" - index: 1 - } - Property { name: "flags"; type: "Qt::WindowFlags"; read: "flags"; write: "setFlags"; index: 2 } - Property { name: "x"; type: "int"; read: "x"; write: "setX"; notify: "xChanged"; index: 3 } - Property { name: "y"; type: "int"; read: "y"; write: "setY"; notify: "yChanged"; index: 4 } - Property { - name: "width" - type: "int" - read: "width" - write: "setWidth" - notify: "widthChanged" - index: 5 - } - Property { - name: "height" - type: "int" - read: "height" - write: "setHeight" - notify: "heightChanged" - index: 6 - } - Property { - name: "minimumWidth" - type: "int" - read: "minimumWidth" - write: "setMinimumWidth" - notify: "minimumWidthChanged" - index: 7 - } - Property { - name: "minimumHeight" - type: "int" - read: "minimumHeight" - write: "setMinimumHeight" - notify: "minimumHeightChanged" - index: 8 - } - Property { - name: "maximumWidth" - type: "int" - read: "maximumWidth" - write: "setMaximumWidth" - notify: "maximumWidthChanged" - index: 9 - } - Property { - name: "maximumHeight" - type: "int" - read: "maximumHeight" - write: "setMaximumHeight" - notify: "maximumHeightChanged" - index: 10 - } - Property { - name: "visible" - type: "bool" - read: "isVisible" - write: "setVisible" - notify: "visibleChanged" - index: 11 - } - Property { - name: "active" - revision: 513 - type: "bool" - read: "isActive" - notify: "activeChanged" - index: 12 - isReadonly: true - } - Property { - name: "visibility" - revision: 513 - type: "Visibility" - read: "visibility" - write: "setVisibility" - notify: "visibilityChanged" - index: 13 - } - Property { - name: "contentOrientation" - type: "Qt::ScreenOrientation" - read: "contentOrientation" - write: "reportContentOrientationChange" - notify: "contentOrientationChanged" - index: 14 - } - Property { - name: "opacity" - revision: 513 - type: "double" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 15 - } - Property { - name: "transientParent" - revision: 525 - type: "QWindow" - isPointer: true - write: "setTransientParent" - notify: "transientParentChanged" - index: 16 - privateClass: "QWindowPrivate" - } - Signal { - name: "screenChanged" - Parameter { name: "screen"; type: "QScreen"; isPointer: true } - } - Signal { - name: "modalityChanged" - Parameter { name: "modality"; type: "Qt::WindowModality" } - } - Signal { - name: "windowStateChanged" - Parameter { name: "windowState"; type: "Qt::WindowState" } - } - Signal { - name: "windowTitleChanged" - revision: 514 - Parameter { name: "title"; type: "QString" } - } - Signal { - name: "xChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "yChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "widthChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "heightChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "minimumWidthChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "minimumHeightChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "maximumWidthChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "maximumHeightChanged" - Parameter { name: "arg"; type: "int" } - } - Signal { - name: "visibleChanged" - Parameter { name: "arg"; type: "bool" } - } - Signal { - name: "visibilityChanged" - revision: 513 - Parameter { name: "visibility"; type: "QWindow::Visibility" } - } - Signal { name: "activeChanged"; revision: 513 } - Signal { - name: "contentOrientationChanged" - Parameter { name: "orientation"; type: "Qt::ScreenOrientation" } - } - Signal { - name: "focusObjectChanged" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Signal { - name: "opacityChanged" - revision: 513 - Parameter { name: "opacity"; type: "double" } - } - Signal { - name: "transientParentChanged" - revision: 525 - Parameter { name: "transientParent"; type: "QWindow"; isPointer: true } - } - Method { name: "requestActivate"; revision: 513 } - Method { - name: "setVisible" - Parameter { name: "visible"; type: "bool" } - } - Method { name: "show" } - Method { name: "hide" } - Method { name: "showMinimized" } - Method { name: "showMaximized" } - Method { name: "showFullScreen" } - Method { name: "showNormal" } - Method { name: "close"; type: "bool" } - Method { name: "raise" } - Method { name: "lower" } - Method { - name: "startSystemResize" - type: "bool" - Parameter { name: "edges"; type: "Qt::Edges" } - } - Method { name: "startSystemMove"; type: "bool" } - Method { - name: "setTitle" - Parameter { type: "QString" } - } - Method { - name: "setX" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setY" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setWidth" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setHeight" - Parameter { name: "arg"; type: "int" } - } - Method { - name: "setGeometry" - Parameter { name: "posx"; type: "int" } - Parameter { name: "posy"; type: "int" } - Parameter { name: "w"; type: "int" } - Parameter { name: "h"; type: "int" } - } - Method { - name: "setGeometry" - Parameter { name: "rect"; type: "QRect" } - } - Method { - name: "setMinimumWidth" - Parameter { name: "w"; type: "int" } - } - Method { - name: "setMinimumHeight" - Parameter { name: "h"; type: "int" } - } - Method { - name: "setMaximumWidth" - Parameter { name: "w"; type: "int" } - } - Method { - name: "setMaximumHeight" - Parameter { name: "h"; type: "int" } - } - Method { - name: "alert" - revision: 513 - Parameter { name: "msec"; type: "int" } - } - Method { name: "requestUpdate"; revision: 515 } - Method { name: "_q_clearAlert" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/qmldir deleted file mode 100644 index 7d68a10..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick -linktarget Qt6::qtquick2plugin -optional plugin qtquick2plugin -classname QtQuick2Plugin -designersupported -typeinfo plugins.qmltypes -import QtQml auto -prefer :/qt-project.org/imports/QtQuick/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Component.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Component.qml deleted file mode 100644 index 30644e3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Component.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -QtObject { - default property list members - - property string file - required property string name - property string prototype - property var exports: [] - property var exportMetaObjectRevisions: [] - property var interfaces: [] - property var deferredNames: [] - property var immediateNames: [] - property string attachedType - property string valueType - property string extension - property bool isSingleton: false - property bool isCreatable: accessSemantics === "reference" && name.length > 0 - property bool isStructured: false - property bool isComposite: false - property bool hasCustomParser: false - property bool extensionIsJavaScript: false - property bool extensionIsNamespace: false - property string accessSemantics: "reference" - property string defaultProperty - property string parentProperty -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Enum.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Enum.qml deleted file mode 100644 index 04276fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Enum.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -Member { - property string alias - property string type - property bool isFlag: false - property bool isScoped: false - property var values: [] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Member.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Member.qml deleted file mode 100644 index 9df4fa7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Member.qml +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -QtObject { - required property string name -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Method.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Method.qml deleted file mode 100644 index cab07f6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Method.qml +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -Member { - default property list parameters - property string type - property int revision: 0 - property bool isConstructor: false - property bool isList: false - property bool isPointer: false - property bool isJavaScriptFunction: false - property bool isCloned: false - property bool isConstant: false -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Module.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Module.qml deleted file mode 100644 index 487e235..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Module.qml +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -QtObject { - default property list components - property var dependencies: [] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Parameter.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Parameter.qml deleted file mode 100644 index 0f44074..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Parameter.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -QtObject { - property string name - property string type - property bool isPointer: false - property bool isList: false - property bool isConstant: false -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Property.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Property.qml deleted file mode 100644 index ba21db5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Property.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -Member { - property string type - property bool isPointer: false - property bool isReadonly: false - property bool isRequired: false - property bool isList: false - property bool isFinal: false - property bool isConstant: false - property int revision: 0 - property string bindable - property string read - property string write - property string reset - property string notify - property string privateClass - property int index: -1 -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Signal.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Signal.qml deleted file mode 100644 index b9111a1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/Signal.qml +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QML - -Member { - default property list parameters - property int revision: 0 - property string type - property bool isCloned: false -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/libquicktoolingplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/libquicktoolingplugin.so deleted file mode 100755 index e581357..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/libquicktoolingplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/qmldir deleted file mode 100644 index 99798d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/qmldir +++ /dev/null @@ -1,23 +0,0 @@ -module QtQuick.tooling -linktarget Qt6::quicktooling -plugin quicktoolingplugin -classname QtQuick_toolingPlugin -typeinfo quicktooling.qmltypes -prefer :/qt-project.org/imports/QtQuick/tooling/ -Component 1.2 Component.qml -Component 6.0 Component.qml -Enum 1.2 Enum.qml -Enum 6.0 Enum.qml -Member 1.2 Member.qml -Member 6.0 Member.qml -Method 1.2 Method.qml -Method 6.0 Method.qml -Module 1.2 Module.qml -Module 6.0 Module.qml -Parameter 1.2 Parameter.qml -Parameter 6.0 Parameter.qml -Property 1.2 Property.qml -Property 6.0 Property.qml -Signal 1.2 Signal.qml -Signal 6.0 Signal.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/quicktooling.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/quicktooling.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick/tooling/quicktooling.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/NodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/NodeSection.qml deleted file mode 100644 index 982fa8c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/NodeSection.qml +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Visibility") - - SectionLayout { - PropertyLabel { - text: qsTr("Visibility") - tooltip: qsTr("Sets the local visibility of the node.") - } - - SecondColumnLayout { - // ### should be a slider - CheckBox { - text: qsTr("Visible") - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Opacity") - tooltip: qsTr("Sets the local opacity value of the node.") - } - - SecondColumnLayout { - // ### should be a slider - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: transformSection - width: parent.width - caption: qsTr("Transform") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Translation") - tooltip: qsTr("Sets the translation of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the node in degrees.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pivot") - tooltip: qsTr("Sets the pivot of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSection.qml deleted file mode 100644 index 94ef6bb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSection.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Runtime Loader") - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the URL of the 3D asset to import at runtime.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.source - filter: "*.*" - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Instancing") - tooltip: qsTr("If this property is set, the imported model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Instancing" - backendValue: backendValues.instancing - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSpecifics.qml deleted file mode 100644 index a4fb386..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - RuntimeLoaderSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo deleted file mode 100644 index 47abeea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo +++ /dev/null @@ -1,21 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.AssetUtils.RuntimeLoader" - icon: "images/runtimeloader16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Runtime Loader" - category: "AssetUtils" - libraryIcon: "images/runtimeloader.png" - version: "6.2" - requiredImport: "QtQuick3D.AssetUtils" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy.png deleted file mode 100644 index a3b6c7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy16.png deleted file mode 100644 index de8906a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy@2x.png deleted file mode 100644 index 7ca04a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader.png deleted file mode 100644 index 8a1ba7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader16.png deleted file mode 100644 index a4ea0ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader@2x.png deleted file mode 100644 index 0cc1749..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/libqtquick3dassetutilsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/libqtquick3dassetutilsplugin.so deleted file mode 100755 index 8fde92c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/libqtquick3dassetutilsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/plugins.qmltypes deleted file mode 100644 index 6a6d140..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/plugins.qmltypes +++ /dev/null @@ -1,89 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquick3druntimeloader_p.h" - name: "QQuick3DRuntimeLoader" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: [ - "QtQuick3D.AssetUtils/RuntimeLoader 6.2", - "QtQuick3D.AssetUtils/RuntimeLoader 6.7" - ] - exportMetaObjectRevisions: [1538, 1543] - Enum { - name: "Status" - values: ["Empty", "Success", "Error"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 1 - isReadonly: true - } - Property { - name: "errorString" - type: "QString" - read: "errorString" - notify: "errorStringChanged" - index: 2 - isReadonly: true - } - Property { - name: "bounds" - type: "QQuick3DBounds3" - read: "bounds" - notify: "boundsChanged" - index: 3 - isReadonly: true - } - Property { - name: "instancing" - type: "QQuick3DInstancing" - isPointer: true - read: "instancing" - write: "setInstancing" - notify: "instancingChanged" - index: 4 - } - Property { - name: "supportedExtensions" - revision: 1543 - type: "QStringList" - read: "supportedExtensions" - index: 5 - isReadonly: true - isConstant: true - } - Property { - name: "supportedMimeTypes" - revision: 1543 - type: "QMimeType" - isList: true - read: "supportedMimeTypes" - index: 6 - isReadonly: true - isConstant: true - } - Signal { name: "sourceChanged" } - Signal { name: "statusChanged" } - Signal { name: "errorStringChanged" } - Signal { name: "boundsChanged" } - Signal { name: "instancingChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/qmldir deleted file mode 100644 index 5c75903..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/AssetUtils/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick3D.AssetUtils -linktarget Qt6::qtquick3dassetutilsplugin -optional plugin qtquick3dassetutilsplugin -classname QtQuick3DAssetUtilsPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick3D auto -prefer :/qt-project.org/imports/QtQuick3D/AssetUtils/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/AdditiveColorGradient.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/AdditiveColorGradient.qml deleted file mode 100644 index ae97783..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/AdditiveColorGradient.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property vector3d bottomColor: Qt.vector3d(0.0, 0.0, 0.0) - property vector3d topColor: Qt.vector3d(1.0, 1.0, 1.0) - - Shader { - id: additivecolorgradient - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/additivecolorgradient.frag" - } - - passes: [ - Pass { - shaders: [ additivecolorgradient ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Blur.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Blur.qml deleted file mode 100644 index d823e65..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Blur.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real amount: 0.01 - - Shader { - id: blur - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/blur.frag" - } - - passes: [ - Pass { - shaders: [ blur ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/BrushStrokes.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/BrushStrokes.qml deleted file mode 100644 index cc28262..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/BrushStrokes.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property TextureInput noiseSample: TextureInput { - texture: Texture { - tilingModeHorizontal: Texture.Repeat - tilingModeVertical: Texture.Repeat - source: "qrc:/qtquick3deffects/maps/brushnoise.png" - } - } - property real brushLength: 1.0 // 0 - 3 - property real brushSize: 100.0 // 10 - 200 - property real brushAngle: 45.0 - readonly property real sinAlpha: Math.sin(degrees_to_radians(brushAngle)) - readonly property real cosAlpha: Math.cos(degrees_to_radians(brushAngle)) - - function degrees_to_radians(degrees) { - var pi = Math.PI; - return degrees * (pi/180); - } - - Shader { - id: brushstrokes - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/brushstrokes.frag" - } - - passes: [ - Pass { - shaders: [ brushstrokes ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ChromaticAberration.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ChromaticAberration.qml deleted file mode 100644 index 34b88c4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ChromaticAberration.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property TextureInput maskTexture: TextureInput { - texture: Texture { - source: "qrc:/qtquick3deffects/maps/white.png" - tilingModeHorizontal: Texture.Repeat - tilingModeVertical: Texture.Repeat - } - } - property real aberrationAmount: 50 - property real focusDepth: 600 - - Shader { - id: chromaticAberration - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/chromaticaberration.frag" - } - - passes: [ - Pass { - shaders: [ chromaticAberration ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ColorMaster.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ColorMaster.qml deleted file mode 100644 index 4626c10..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/ColorMaster.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real redStrength: 1.0 // 0 - 2 - property real greenStrength: 1.5 // 0 - 2 - property real blueStrength: 1.0 // 0 - 2 - property real saturation: 0.0 // -1 - 1 - - Shader { - id: colormaster - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/colormaster.frag" - } - - passes: [ - Pass { - shaders: [ colormaster ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml deleted file mode 100644 index 8f2e88b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - readonly property TextureInput sourceSampler: TextureInput { - texture: Texture {} - } - property real focusDistance: 600 - property real focusRange: 100 - property real blurAmount: 4 - - Shader { - id: downsampleVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/downsample.vert" - } - Shader { - id: downsampleFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/downsample.frag" - } - - Shader { - id: blurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/depthoffieldblur.vert" - } - Shader { - id: blurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/depthoffieldblur.frag" - } - - Buffer { - id: downsampleBuffer - name: "downsampleBuffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - sizeMultiplier: 0.5 - } - - passes: [ - Pass { - shaders: [ downsampleVert, downsampleFrag ] - output: downsampleBuffer - }, - Pass { - shaders: [ blurVert, blurFrag ] - commands: [ - // INPUT is the texture for downsampleBuffer - BufferInput { - buffer: downsampleBuffer - }, - // the actual input texture is exposed as sourceSampler - BufferInput { - sampler: "sourceSampler" - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Desaturate.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Desaturate.qml deleted file mode 100644 index 4b180e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Desaturate.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real amount: 0.5 - - Shader { - id: desaturate - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/desaturate.frag" - } - - passes: [ - Pass { - shaders: [ desaturate ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionRipple.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionRipple.qml deleted file mode 100644 index a288aa6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionRipple.qml +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real radius: 100.0 // 0 - 100 - property real distortionWidth: 10.0 // 2 - 100 - property real distortionHeight: 10.0 // 0 - 100 - property real distortionPhase: 0.0 // 0 - 360 - property vector2d center: Qt.vector2d(0.5, 0.5) - - Shader { - id: distortionVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/distortion.vert" - } - - Shader { - id: distortionFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/distortionripple.frag" - } - - passes: [ - Pass { - shaders: [ distortionVert, distortionFrag ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSphere.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSphere.qml deleted file mode 100644 index 436520a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSphere.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real radius: 0.25 // 0 - 1 - property real distortionHeight: 0.5 // -1 - 1 - property vector2d center: Qt.vector2d(0.5, 0.5) - - Shader { - id: distortionVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/distortion.vert" - } - - Shader { - id: distortionFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/distortionsphere.frag" - } - - passes: [ - Pass { - shaders: [ distortionVert, distortionFrag ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSpiral.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSpiral.qml deleted file mode 100644 index 25f20ee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSpiral.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real radius: 0.25 // 0 - 1 - property real distortionStrength: 1.0 // -10 - 10 - property vector2d center: Qt.vector2d(0.5, 0.5) - - Shader { - id: distortionVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/distortion.vert" - } - - Shader { - id: distortionFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/distortionspiral.frag" - } - - passes: [ - Pass { - shaders: [ distortionVert, distortionFrag ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/EdgeDetect.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/EdgeDetect.qml deleted file mode 100644 index 13bd252..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/EdgeDetect.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real edgeStrength: 0.5 // 0 - 1 - - Shader { - id: edgeVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/edgedetect.vert" - } - - Shader { - id: edgeFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/edgedetect.frag" - } - - passes: [ - Pass { - shaders: [ edgeVert, edgeFrag ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Emboss.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Emboss.qml deleted file mode 100644 index efbec50..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Emboss.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real amount: 0.003 // 0 - 0.01 - - Shader { - id: emboss - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/emboss.frag" - } - - passes: [ - Pass { - shaders: [ emboss ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Flip.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Flip.qml deleted file mode 100644 index 8f5b4c9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Flip.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property bool flipHorizontally: true - property bool flipVertically: true - - Shader { - id: flip - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/flip.frag" - } - - passes: [ - Pass { - shaders: [ flip ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Fxaa.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Fxaa.qml deleted file mode 100644 index 17aaccf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Fxaa.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - readonly property TextureInput sprite: TextureInput { - texture: Texture {} - } - - Shader { - id: rgbl - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/fxaaRgbl.frag" - } - Shader { - id: blur - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/fxaaBlur.frag" - } - Buffer { - id: rgblBuffer - name: "rgbl_buffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None // aka frame - } - - passes: [ - Pass { - shaders: [ rgbl ] - output: rgblBuffer - }, - Pass { - shaders: [ blur ] - commands: [ - // INPUT is the texture for rgblBuffer - BufferInput { - buffer: rgblBuffer - }, - // the actual input texture is exposed as sprite - BufferInput { - sampler: "sprite" - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/GaussianBlur.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/GaussianBlur.qml deleted file mode 100644 index d1b5139..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/GaussianBlur.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real amount: 2 // 0 - 10 - Shader { - id: vertical - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/blurvertical.vert" - } - Shader { - id: horizontal - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/blurhorizontal.vert" - } - Shader { - id: gaussianblur - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/gaussianblur.frag" - } - - Buffer { - id: tempBuffer - name: "tempBuffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None // aka frame - } - - passes: [ - Pass { - shaders: [ horizontal, gaussianblur ] - output: tempBuffer - }, - Pass { - shaders: [ vertical, gaussianblur ] - commands: [ - BufferInput { - buffer: tempBuffer - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/HDRBloomTonemap.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/HDRBloomTonemap.qml deleted file mode 100644 index 790427d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/HDRBloomTonemap.qml +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - readonly property TextureInput downsample2: TextureInput { - texture: Texture {} - } - readonly property TextureInput downsample4: TextureInput { - texture: Texture {} - } - property real gamma: 1 // 0.1 - 4 - property real exposure: 0 // -9 - 9 - readonly property real exposureExp2: Math.pow(2, exposure) - property real bloomThreshold: 1 - property real blurFalloff: 0 // 0 - 10 - readonly property real negativeBlurFalloffExp2: Math.pow(2, -blurFalloff) - property real tonemappingLerp: 1 // 0 - 1 - property real channelThreshold: 1 - readonly property real poissonRotation: 0 - readonly property real poissonDistance: 4 - - Shader { - id: luminosityVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/luminosity.vert" - } - Shader { - id: luminosityFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/luminosity.frag" - } - - Shader { - id: blurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/poissonblur.vert" - } - Shader { - id: blurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/poissonblur.frag" - } - - Shader { - id: combiner - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/combiner.frag" - } - - Buffer { - id: luminosity_buffer2 - name: "luminosity_buffer2" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - Buffer { - id: downsample_buffer2 - name: "downsample_buffer2" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - Buffer { - id: downsample_buffer4 - name: "downsample_buffer4" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.25 - } - - passes: [ - Pass { - shaders: [ luminosityVert, luminosityFrag ] - output: downsample_buffer2 - }, - Pass { - shaders: [ luminosityVert, luminosityFrag ] - commands: BufferInput { - buffer: downsample_buffer2 - } - output: luminosity_buffer2 - }, - Pass { - shaders: [ blurVert, blurFrag ] - commands: BufferInput { - buffer: luminosity_buffer2 - } - output: downsample_buffer2 - }, - Pass { - shaders: [ blurVert, blurFrag ] - commands: [ - SetUniformValue { - target: "poissonRotation" - value: 0.62831 - }, - BufferInput { - buffer: luminosity_buffer2 - } - ] - output: downsample_buffer4 - }, - Pass { - shaders: [ combiner ] - commands: [ - BufferInput { - sampler: "downsample2" - buffer: downsample_buffer2 - }, - BufferInput { - sampler: "downsample4" - buffer: downsample_buffer4 - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/MotionBlur.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/MotionBlur.qml deleted file mode 100644 index 58c6b3b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/MotionBlur.qml +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - id: effectRoot - // there are only here to get the sampler2Ds declared in the shader - readonly property TextureInput sprite: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowSampler: TextureInput { - texture: Texture {} - } - - property real fadeAmount: 0.25 // 0 - 1 - property real blurQuality: 0.25 // 0.1 - 1.0 - - Shader { - id: vblurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/motionblurvertical.vert" - } - Shader { - id: vblurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/motionblurvertical.frag" - } - - Shader { - id: hblurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/motionblurhorizontal.vert" - } - Shader { - id: hblurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/motionblurhorizontal.frag" - } - - Shader { - id: blend - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/blend.frag" - } - - Buffer { - id: glowBuffer - name: "glowBuffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Nearest - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.SceneLifetime - sizeMultiplier: effectRoot.blurQuality - } - - Buffer { - id: tempBuffer - name: "tempBuffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: effectRoot.blurQuality - } - - passes: [ - Pass { - shaders: [ hblurVert, hblurFrag ] - commands: [ - BufferInput { - // Expose the initially empty glowBuffer texture under the - // sampler2D glowSampler in the shader. Note the - // SceneLifetime and that the next pass writes to the same - // texture (accumulate). - sampler: "glowSampler" - buffer: glowBuffer - } - ] - output: tempBuffer - }, - Pass { - shaders: [ vblurVert, vblurFrag ] - commands: [ - // the texture for tempBuffer will be INPUT in this pass - BufferInput { - buffer: tempBuffer - } - ] - output: glowBuffer - }, - Pass { - shaders: [ blend ] - commands: [ - // the texture for glowBuffer will be INPUT in this pass - BufferInput { - buffer: glowBuffer - }, - // the input texture (that would normally be INPUT) for this pass is exposed to the shader as sprite - BufferInput { - sampler: "sprite" - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Quick3DEffects.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Quick3DEffects.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Quick3DEffects.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/SCurveTonemap.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/SCurveTonemap.qml deleted file mode 100644 index b6533a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/SCurveTonemap.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real shoulderSlope: 1.0 // 0.0 - 3.0 - property real shoulderEmphasis: 0 // -1.0 - 1.0 - property real toeSlope: 1.0 // 0.0 - 3.0 - property real toeEmphasis: 0 // -1.0 - 1.0 - property real contrastBoost: 0 // -1.0 - 2.0 - property real saturationLevel: 1 // 0.0 - 2.0 - property real gammaValue: 2.2 // 0.1 - 8.0 - property bool useExposure: false - property real whitePoint: 1.0 // 0.01 - 128.0 - property real exposureValue: 1.0 // 0.01 - 16.0 - - Shader { - id: tonemapShader - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/scurvetonemap.frag" - } - - Buffer { - // LDR output - id: defaultOutput - format: Buffer.RGBA8 - } - - passes: [ - Pass { - shaders: [ tonemapShader ] - output: defaultOutput - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Scatter.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Scatter.qml deleted file mode 100644 index 87b3b4b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Scatter.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property TextureInput noiseSample: TextureInput { - texture: Texture { - tilingModeHorizontal: Texture.Repeat - tilingModeVertical: Texture.Repeat - source: "qrc:/qtquick3deffects/maps/brushnoise.png" - } - } - property real amount: 10.0 // 0 - 127 - property int direction: 0 // 0 = both, 1 = horizontal, 2 = vertical - property bool randomize: true - - Shader { - id: scatter - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/scatter.frag" - } - - passes: [ - Pass { - shaders: [ scatter ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/TiltShift.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/TiltShift.qml deleted file mode 100644 index 53fd774..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/TiltShift.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - readonly property TextureInput sourceSampler: TextureInput { - texture: Texture {} - } - property real focusPosition: 0.5 // 0 - 1 - property real focusWidth: 0.2 // 0 - 1 - property real blurAmount: 4 // 0 - 10 - property bool isVertical: false - property bool isInverted: false - - Shader { - id: downsampleVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/downsample.vert" - } - Shader { - id: downsampleFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/downsampletiltshift.frag" - } - - Shader { - id: blurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3deffects/shaders/poissonblurtiltshift.vert" - } - Shader { - id: blurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/poissonblurtiltshift.frag" - } - - Buffer { - id: downsampleBuffer - name: "downsampleBuffer" - format: Buffer.RGBA8 - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - - passes: [ - Pass { - shaders: [ downsampleVert, downsampleFrag ] - output: downsampleBuffer - }, - Pass { - shaders: [ blurVert, blurFrag ] - commands: [ - // INPUT is the texture for downsampleBuffer - BufferInput { - buffer: downsampleBuffer - }, - // the pass' input texture is exposed as sourceSampler - BufferInput { - sampler: "sourceSampler" - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Vignette.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Vignette.qml deleted file mode 100644 index dfa2f70..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/Vignette.qml +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - property real vignetteStrength: 15 // 0 - 15 - property vector3d vignetteColor: Qt.vector3d(0.5, 0.5, 0.5) - property real vignetteRadius: 0.35 // 0 - 5 - - Shader { - id: vignette - stage: Shader.Fragment - shader: "qrc:/qtquick3deffects/shaders/vignette.frag" - } - - passes: [ - Pass { - shaders: [ vignette ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml deleted file mode 100644 index d449fbe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Section { - caption: qsTr("Additive Color Gradient") - width: parent.width - - SectionLayout { - PropertyLabel { text: qsTr("Top Color") } - - ColorEditor { - backendValue: backendValues.topColor - supportGradient: false - isVector3D: true - } - - PropertyLabel { text: qsTr("Bottom Color") } - - ColorEditor { - backendValue: backendValues.bottomColor - supportGradient: false - isVector3D: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml deleted file mode 100644 index c1b946a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - AdditiveColorGradientSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSection.qml deleted file mode 100644 index e51c3fe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSection.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Blur") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Strength of the blur.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 0.1 - decimals: 3 - stepSize: 0.01 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml deleted file mode 100644 index b656e70..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - BlurSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml deleted file mode 100644 index bac71d3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Noise") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Noise Sample Texture") - tooltip: qsTr("Defines a texture for noise samples.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.noiseSample_texture - defaultItem: qsTr("Default") - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Brush") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Length") - tooltip: qsTr("Length of the brush.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 3 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.brushLength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Size") - tooltip: qsTr("Size of the brush.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 10 - maximumValue: 200 - decimals: 0 - backendValue: backendValues.brushSize - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Angle") - tooltip: qsTr("Angle of the brush") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 360 - decimals: 0 - backendValue: backendValues.brushAngle - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml deleted file mode 100644 index b150ad0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - BrushStrokesSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml deleted file mode 100644 index 52f6ce7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Mask") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Mask Texture") - tooltip: qsTr("Defines a texture for mask.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.maskTexture_texture - defaultItem: qsTr("Default") - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Aberration") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Amount of aberration.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1000 - maximumValue: 1000 - decimals: 0 - backendValue: backendValues.aberrationAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Focus Depth") - tooltip: qsTr("Focus depth of the aberration.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.focusDepth - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml deleted file mode 100644 index e357ac3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ChromaticAberrationSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml deleted file mode 100644 index b8b0ed2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Colors") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Red Strength") - tooltip: qsTr("Red strength.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.redStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Green Strength") - tooltip: qsTr("Green strength.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.greenStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blue Strength") - tooltip: qsTr("Blue strength.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.blueStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Saturation") - tooltip: qsTr("Color saturation.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.saturation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml deleted file mode 100644 index b6036cd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ColorMasterSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml deleted file mode 100644 index 70cc915..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Blur") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Blur Amount") - tooltip: qsTr("Amount of blur.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 50 - decimals: 2 - backendValue: backendValues.blurAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Focus Distance") - tooltip: qsTr("Focus distance of the blur.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 5000 - decimals: 0 - backendValue: backendValues.focusDistance - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Focus Range") - tooltip: qsTr("Focus range of the blur.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 5000 - decimals: 0 - backendValue: backendValues.focusRange - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml deleted file mode 100644 index 86afead..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DepthOfFieldHQBlurSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSection.qml deleted file mode 100644 index 1476c1d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSection.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Desaturate") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Strength of the desaturate.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml deleted file mode 100644 index 1e51f31..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DesaturateSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml deleted file mode 100644 index 2a10284..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Distortion") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Radius") - tooltip: qsTr("Radius of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 100 - decimals: 2 - backendValue: backendValues.radius - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Width") - tooltip: qsTr("Width of the distortion.") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 100 - minimumValue: 2 - decimals: 2 - backendValue: backendValues.distortionWidth - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Height") - tooltip: qsTr("Height of the distortion.") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 100 - minimumValue: 0 - decimals: 2 - backendValue: backendValues.distortionHeight - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Phase") - tooltip: qsTr("Phase of the distortion.") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 360 - minimumValue: 0 - decimals: 0 - backendValue: backendValues.distortionPhase - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Center") - tooltip: qsTr("Center of the distortion.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_x - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "X" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_y - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "Y" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml deleted file mode 100644 index 9b775f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DistortionRippleSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml deleted file mode 100644 index 79a9235..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Distortion") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Radius") - tooltip: qsTr("Radius of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.radius - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Height") - tooltip: qsTr("Height of the distortion.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.distortionHeight - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Center") - tooltip: qsTr("Center of the distortion.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_x - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "X" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_y - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "Y" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml deleted file mode 100644 index 229b72d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DistortionSphereSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml deleted file mode 100644 index 85ba261..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Distortion") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Radius") - tooltip: qsTr("Radius of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.radius - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Strength of the distortion.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -10 - maximumValue: 10 - decimals: 2 - backendValue: backendValues.distortionStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Center") - tooltip: qsTr("Center of the distortion.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_x - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "X" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.center_y - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { text: "Y" } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml deleted file mode 100644 index 54e8e9f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DistortionSpiralSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml deleted file mode 100644 index ff78894..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Edge") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Strength of the edge.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.edgeStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml deleted file mode 100644 index c6d02fb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - EdgeDetectSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSection.qml deleted file mode 100644 index bb3d31f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSection.qml +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Emboss") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Strength of the emboss.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 0.01 - decimals: 4 - stepSize: 0.001 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml deleted file mode 100644 index 7a924fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - EmbossSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSection.qml deleted file mode 100644 index 4dd9a14..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSection.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Flip") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Horizontal") - tooltip: qsTr("Flip horizontally.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.flipHorizontally.valueToString - backendValue: backendValues.flipHorizontally - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertical") - tooltip: qsTr("Flip vertically.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.flipVertically.valueToString - backendValue: backendValues.flipVertically - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml deleted file mode 100644 index d5e8e0c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - FlipSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSection.qml deleted file mode 100644 index 388a2b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSection.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - // Fxaa effect has no modifiable properties -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml deleted file mode 100644 index 1b1d522..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - FxaaSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml deleted file mode 100644 index 56a52ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Blur") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Strength of the blur.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml deleted file mode 100644 index 00bfa74..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - GaussianBlurSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml deleted file mode 100644 index fff59d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Tonemap") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Gamma") - tooltip: qsTr("Amount of gamma.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.1 - maximumValue: 4 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.gamma - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Exposure") - tooltip: qsTr("Amount of exposure.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9 - maximumValue: 9 - decimals: 2 - backendValue: backendValues.exposure - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blur Falloff") - tooltip: qsTr("Amount of blur falloff.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - backendValue: backendValues.blurFalloff - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Tonemapping Lerp") - tooltip: qsTr("Tonemapping linear interpolation value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.tonemappingLerp - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Bloom Threshold") - tooltip: qsTr("Bloom color threshold value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 3 - stepSize: 0.1 - backendValue: backendValues.bloomThreshold - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel Threshold") - tooltip: qsTr("Channel color threshold value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 3 - stepSize: 0.1 - backendValue: backendValues.channelThreshold - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml deleted file mode 100644 index c1e4ec5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - HDRBloomTonemapSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml deleted file mode 100644 index b23be4e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Blur") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Fade Amount") - tooltip: qsTr("Specifies how much the blur fades away each frame.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.fadeAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Quality") - tooltip: qsTr("Blur quality.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.blurQuality - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml deleted file mode 100644 index 6ac0b1c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - MotionBlurSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml deleted file mode 100644 index 51fa6b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Curve") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Shoulder Slope") - tooltip: qsTr("Set the slope of the curve shoulder.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 3 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.shoulderSlope - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Shoulder Emphasis") - tooltip: qsTr("Set the emphasis of the curve shoulder.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.shoulderEmphasis - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Toe Slope") - tooltip: qsTr("Set the slope of the curve toe.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 3 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.toeSlope - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Toe Emphasis") - tooltip: qsTr("Set the emphasis of the curve toe.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.toeEmphasis - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Color") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Contrast Boost") - tooltip: qsTr("Set the contrast boost amount.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 2 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.contrastBoost - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Saturation Level") - tooltip: qsTr("Set the color saturation level.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.saturationLevel - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Gamma") - tooltip: qsTr("Set the gamma value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.1 - maximumValue: 8 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.gammaValue - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Use Exposure") - tooltip: qsTr("Specifies if the exposure or white point should be used.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.useExposure.valueToString - backendValue: backendValues.useExposure - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("White Point") - tooltip: qsTr("Set the white point value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.01 - maximumValue: 128 - decimals: 2 - backendValue: backendValues.whitePoint - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Exposure") - tooltip: qsTr("Set the exposure value.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.01 - maximumValue: 16 - decimals: 2 - backendValue: backendValues.exposureValue - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml deleted file mode 100644 index 363cd62..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SCurveTonemapSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSection.qml deleted file mode 100644 index 2ab79f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSection.qml +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Noise") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Noise Sample Texture") - tooltip: qsTr("Defines a texture for noise samples.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.noiseSample_texture - defaultItem: qsTr("Default") - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Scatter") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Amount of scatter.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 127 - decimals: 2 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Direction") - tooltip: qsTr("Direction of scatter. 0 = both, 1 = horizontal, 2 = vertical.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 0 - backendValue: backendValues.direction - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Randomize") - tooltip: qsTr("Specifies if the scatter is random.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.randomize.valueToString - backendValue: backendValues.randomize - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml deleted file mode 100644 index c6abd81..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ScatterSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml deleted file mode 100644 index 106a06f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Tilt Shift") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Focus Position") - tooltip: qsTr("Set the focus position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.focusPosition - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Focus Width") - tooltip: qsTr("Set the focus width.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.focusWidth - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blur Amount") - tooltip: qsTr("Set the blur amount.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - backendValue: backendValues.blurAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertical") - tooltip: qsTr("Specifies if the tilt shift is vertical.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.isVertical.valueToString - backendValue: backendValues.isVertical - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Inverted") - tooltip: qsTr("Specifies if the tilt shift is inverted.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.isInverted.valueToString - backendValue: backendValues.isInverted - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml deleted file mode 100644 index e86a222..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TiltShiftSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSection.qml deleted file mode 100644 index da7f5b1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSection.qml +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Vignette") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Set the vignette strength.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 15 - decimals: 2 - backendValue: backendValues.vignetteStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Radius") - tooltip: qsTr("Set the vignette radius.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 5 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.vignetteRadius - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { text: qsTr("Vignette Color") } - - ColorEditor { - backendValue: backendValues.vignetteColor - supportGradient: false - isVector3D: true - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml deleted file mode 100644 index a6566c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - VignetteSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/effectlib.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/effectlib.metainfo deleted file mode 100644 index 7ad3357..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/effectlib.metainfo +++ /dev/null @@ -1,401 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.Effects.AdditiveColorGradient" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Additive Color Gradient" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Blur" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Blur" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.BrushStrokes" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Brush Strokes" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.ChromaticAberration" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Chromatic Aberration" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.ColorMaster" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Color Master" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.DepthOfFieldHQBlur" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Depth of Field HQ Blur" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Desaturate" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Desaturate" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.DistortionRipple" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Distortion Ripple" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.DistortionSphere" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Distortion Sphere" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.DistortionSpiral" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Distortion Spiral" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.EdgeDetect" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Edge Detect" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Emboss" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Emboss" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Flip" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Flip" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Fxaa" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Fxaa" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.GaussianBlur" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Gaussian Blur" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.HDRBloomTonemap" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "HDR Bloom Tonemap" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.MotionBlur" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Motion Blur" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Scatter" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Scatter" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.SCurveTonemap" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "SCurve Tonemap" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.TiltShift" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Tilt Shift" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } - Type { - name: "QtQuick3D.Effects.Vignette" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Vignette" - category: "Qt Quick 3D Effects" - libraryIcon: "images/effect.png" - version: "1.0" - requiredImport: "QtQuick3D.Effects" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect.png deleted file mode 100644 index 8f9f288..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect16.png deleted file mode 100644 index 93fbc03..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect@2x.png deleted file mode 100644 index 204f50e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so deleted file mode 100755 index e4b7edc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/qmldir deleted file mode 100644 index cec26d9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Effects/qmldir +++ /dev/null @@ -1,31 +0,0 @@ -module QtQuick3D.Effects -linktarget Qt6::qtquick3deffectplugin -optional plugin qtquick3deffectplugin -classname QtQuick3DEffectPlugin -designersupported -typeinfo Quick3DEffects.qmltypes -depends QtQuick3D auto -depends QtQuick.Window auto -prefer :/qt-project.org/imports/QtQuick3D/Effects/ -Vignette 6.0 Vignette.qml -TiltShift 6.0 TiltShift.qml -SCurveTonemap 6.0 SCurveTonemap.qml -Scatter 6.0 Scatter.qml -MotionBlur 6.0 MotionBlur.qml -HDRBloomTonemap 6.0 HDRBloomTonemap.qml -GaussianBlur 6.0 GaussianBlur.qml -Fxaa 6.0 Fxaa.qml -Flip 6.0 Flip.qml -Emboss 6.0 Emboss.qml -EdgeDetect 6.0 EdgeDetect.qml -DistortionSpiral 6.0 DistortionSpiral.qml -DistortionSphere 6.0 DistortionSphere.qml -DistortionRipple 6.0 DistortionRipple.qml -Desaturate 6.0 Desaturate.qml -DepthOfFieldHQBlur 6.0 DepthOfFieldHQBlur.qml -ColorMaster 6.0 ColorMaster.qml -ChromaticAberration 6.0 ChromaticAberration.qml -BrushStrokes 6.0 BrushStrokes.qml -Blur 6.0 Blur.qml -AdditiveColorGradient 6.0 AdditiveColorGradient.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/AxisHelper.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/AxisHelper.qml deleted file mode 100644 index e92abff..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/AxisHelper.qml +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) 2019 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Node { - id: axisGrid_obj - - property alias gridColor: gridMaterial.diffuseColor - property alias gridOpacity: gridMaterial.opacity - property alias enableXZGrid: gridXZ.visible - property alias enableXYGrid: gridXY.visible - property alias enableYZGrid: gridYZ.visible - property bool enableAxisLines: true - - // Axis Lines - Model { - id: xAxis - source: "#Cube" - position: Qt.vector3d(5000, 0, 0) - scale: Qt.vector3d(100, .05, .05) - visible: axisGrid_obj.enableAxisLines - - materials: DefaultMaterial { - lighting: DefaultMaterial.NoLighting - diffuseColor: "red" - } - } - - Model { - id: yAxis - source: "#Cube" - position: Qt.vector3d(0, 5000, 0) - scale: Qt.vector3d(0.05, 100, 0.05) - visible: axisGrid_obj.enableAxisLines - materials: DefaultMaterial { - lighting: DefaultMaterial.NoLighting - diffuseColor: "green" - } - } - - Model { - id: zAxis - source: "#Cube" - position: Qt.vector3d(0, 0, 5000) - scale: Qt.vector3d(0.05, 0.05, 100) - visible: axisGrid_obj.enableAxisLines - materials: DefaultMaterial { - lighting: DefaultMaterial.NoLighting - diffuseColor: "blue" - } - } - - // Grid Lines - DefaultMaterial { - id: gridMaterial - lighting: DefaultMaterial.NoLighting - opacity: 0.5 - diffuseColor: Qt.rgba(0.8, 0.8, 0.8, 1) - } - - Model { - id: gridXZ - source: "meshes/axisGrid.mesh" - scale: Qt.vector3d(100, 100, 100) - materials: [ - gridMaterial - ] - } - - Model { - id: gridXY - visible: false - source: "meshes/axisGrid.mesh" - scale: Qt.vector3d(100, 100, 100) - eulerRotation: Qt.vector3d(90, 0, 0) - materials: [ - gridMaterial - ] - } - - Model { - id: gridYZ - visible: false - source: "meshes/axisGrid.mesh" - scale: Qt.vector3d(100, 100, 100) - eulerRotation: Qt.vector3d(0, 0, 90) - materials: [ - gridMaterial - ] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/DebugView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/DebugView.qml deleted file mode 100644 index 6eac7bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/DebugView.qml +++ /dev/null @@ -1,500 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick3D -import QtQuick3D.Helpers.impl - -Pane { - id: root - property var source: null - property bool resourceDetailsVisible: false - opacity: 0.9 - - ColumnLayout { - id: layout - RowLayout { - Label { - Layout.fillWidth: true - text: root.source.renderStats.fps + " FPS" - font.pointSize: 14 - } - - Label { - text: "Details" - } - - CheckBox { - checked: root.resourceDetailsVisible - onCheckedChanged: { - resourceDetailsVisible = checked; - } - } - } - - component TimeLabel : RowLayout { - id: timeLabel - property alias text: label.text - property real value: 0.0 - Label { - id: label - Layout.fillWidth: true - text: "Frame: " - - } - Label { - text: timeLabel.value.toFixed(3) + "ms" - } - } - - TimeLabel { - text: "Frame: " - value: root.source.renderStats.frameTime - } - - TimeLabel { - text: " Sync: " - value: root.source.renderStats.syncTime - } - - TimeLabel { - text: " Prep: " - value: root.source.renderStats.renderPrepareTime - } - - TimeLabel { - text: " Render: " - value: root.source.renderStats.renderTime - } - - TimeLabel { - text: "Max: " - value: root.source.renderStats.maxFrameTime - } - - TimeLabel { - text: "GPU: " - value: root.source.renderStats.lastCompletedGpuTime - visible: root.source.renderStats.lastCompletedGpuTime > 0 - } - - Page { - Layout.fillWidth: true - Layout.minimumWidth: 530 - visible: root.resourceDetailsVisible - header: TabBar { - id: tabBar - TabButton { - text: "Summary" - } - TabButton { - text: "Passes" - } - TabButton { - text: "Textures" - } - TabButton { - text: "Meshes" - } - TabButton { - text: "Tools" - } - } - - StackLayout { - anchors.fill: parent - anchors.margins: 10 - currentIndex: tabBar.currentIndex - - Pane { - id: summaryPane - ColumnLayout { - Label { - text: "Graphics API: " + root.source.renderStats.graphicsApiName - visible: root.resourceDetailsVisible - } - Label { - text: root.source.renderStats.renderPassCount + " render passes" - visible: root.resourceDetailsVisible - } - Label { - text: root.source.renderStats.drawCallCount + " draw calls" - visible: root.resourceDetailsVisible - } - Label { - text: root.source.renderStats.drawVertexCount + " vertices" - visible: root.resourceDetailsVisible - } - Label { - text: "Image assets: " + (root.source.renderStats.imageDataSize / 1024).toFixed(2) + " KB" - visible: root.resourceDetailsVisible - } - Label { - text: "Mesh assets: " + (root.source.renderStats.meshDataSize / 1024).toFixed(2) + " KB" - visible: root.resourceDetailsVisible - } - Label { - text: "Pipelines: " + root.source.renderStats.pipelineCount - visible: root.resourceDetailsVisible - } - Label { - text: "Material build time: " + root.source.renderStats.materialGenerationTime + " ms" - visible: root.resourceDetailsVisible - } - Label { - text: "Effect build time: " + root.source.renderStats.effectGenerationTime + " ms" - visible: root.resourceDetailsVisible - } - Label { - text: "Pipeline build time: " + root.source.renderStats.pipelineCreationTime + " ms" - visible: root.resourceDetailsVisible - } - Label { - text: root.source.renderStats.vmemAllocCount + " vmem allocs with " + root.source.renderStats.vmemUsedBytes + " bytes" - visible: root.resourceDetailsVisible && root.source.renderStats.vmemAllocCount > 0 - } - } - } - - Pane { - id: passesPane - RenderStatsPassesModel { - id: passesModel - passData: root.source.renderStats.renderPassDetails - } - ColumnLayout { - anchors.fill: parent - spacing: 0 - HorizontalHeaderView { - syncView: passesTableView - resizableColumns: false // otherwise QTBUG-111013 happens - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - } - ListModel { - id: passesHeaderModel - ListElement { - columnWidth: 300 // name - } - ListElement { - columnWidth: 80 // size - } - ListElement { - columnWidth: 60 // vertices - } - ListElement { - columnWidth: 60 // draw calls - } - } - Item { - Layout.fillHeight: true - Layout.fillWidth: true - TableView { - id: passesTableView - anchors.fill: parent - // name, size, vertices, draw calls - property var columnFactors: [58, 14, 12, 12]; // == 96, leave space for the scrollbar - columnWidthProvider: function (column) { - return passesPane.width * (columnFactors[column] / 100.0); - } - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - ScrollBar.vertical: ScrollBar { - parent: passesTableView.parent - anchors.top: passesTableView.top - anchors.bottom: passesTableView.bottom - anchors.left: passesTableView.right - } - clip: true - model: passesModel - columnSpacing: 1 - rowSpacing: 1 - implicitWidth: parent.width + columnSpacing - implicitHeight: parent.height + rowSpacing - delegate: CustomTableItemDelegate { - required property string display - text: display - color: TableView.view.palette.base - textColor: TableView.view.palette.text - } - } - } - } - } - - Pane { - id: texturesPane - RenderStatsTexturesModel { - id: texturesModel - textureData: root.source.renderStats.textureDetails - } - ColumnLayout { - anchors.fill: parent - spacing: 0 - HorizontalHeaderView { - syncView: texturesTableView - resizableColumns: false // otherwise QTBUG-111013 happens - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - } - Item { - Layout.fillHeight: true - Layout.fillWidth: true - TableView { - id: texturesTableView - anchors.fill: parent - // name, size, format, miplevels, flags - property var columnFactors: [48, 12, 12, 12, 12]; // == 96, leave space for the scrollbar - columnWidthProvider: function (column) { - return texturesPane.width * (columnFactors[column] / 100.0); - } - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - ScrollBar.vertical: ScrollBar { - parent: texturesTableView.parent - anchors.top: texturesTableView.top - anchors.bottom: texturesTableView.bottom - anchors.left: texturesTableView.right - } - ScrollBar.horizontal: ScrollBar { } - clip: true - model: texturesModel - columnSpacing: 1 - rowSpacing: 1 - implicitWidth: parent.width + columnSpacing - implicitHeight: parent.height + rowSpacing - delegate: CustomTableItemDelegate { - required property string display - text: display - color: TableView.view.palette.base - textColor: TableView.view.palette.text - } - } - } - } - } - - Pane { - id: meshesPane - RenderStatsMeshesModel { - id: meshesModel - meshData: root.source.renderStats.meshDetails - } - ColumnLayout { - anchors.fill: parent - spacing: 0 - HorizontalHeaderView { - syncView: meshesTableView - resizableColumns: false // otherwise QTBUG-111013 happens - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - } - Item { - Layout.fillHeight: true - Layout.fillWidth: true - TableView { - id: meshesTableView - anchors.fill: parent - // name, submeshes, vertices, vbufsize, ibufsize - property var columnFactors: [48, 12, 12, 12, 12]; // == 96, leave space for the scrollbar - columnWidthProvider: function (column) { - return meshesPane.width * (columnFactors[column] / 100.0); - } - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.VerticalFlick - ScrollBar.vertical: ScrollBar { - parent: meshesTableView.parent - anchors.top: meshesTableView.top - anchors.bottom: meshesTableView.bottom - anchors.left: meshesTableView.right - } - clip: true - model: meshesModel - columnSpacing: 1 - rowSpacing: 1 - implicitWidth: parent.width + columnSpacing - implicitHeight: parent.height + rowSpacing - delegate: CustomTableItemDelegate { - required property string display - text: display - color: TableView.view.palette.base - textColor: TableView.view.palette.text - } - } - } - } - } - - Pane { - id: visualizePane - ColumnLayout { - id: visCtrCol - width: parent.width - CheckBox { - text: "Wireframe mode" - onCheckedChanged: root.source.environment.debugSettings.wireframeEnabled = checked - } - RowLayout { - Label { - text: "Material override" - } - ComboBox { - id: materialOverrideComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.source.environment.debugSettings.materialOverride = currentValue - Component.onCompleted: materialOverrideComboBox.currentIndex = materialOverrideComboBox.indexOfValue(root.source.environment.debugSettings.materialOverride) - model: [ - { value: DebugSettings.None, text: "None"}, - { value: DebugSettings.BaseColor, text: "Base Color"}, - { value: DebugSettings.Roughness, text: "Roughness"}, - { value: DebugSettings.Metalness, text: "Metalness"}, - { value: DebugSettings.Diffuse, text: "Diffuse"}, - { value: DebugSettings.Specular, text: "Specular"}, - { value: DebugSettings.ShadowOcclusion, text: "Shadow Occlusion"}, - { value: DebugSettings.Emission, text: "Emission"}, - { value: DebugSettings.AmbientOcclusion, text: "Ambient Occlusion"}, - { value: DebugSettings.Normals, text: "Normals"}, - { value: DebugSettings.Tangents, text: "Tangents"}, - { value: DebugSettings.Binormals, text: "Binormals"}, - { value: DebugSettings.F0, text: "F0"} - ] - } - } - RowLayout { - spacing: 20 - Button { - text: "Release cached resources" - onClicked: root.source.renderStats.releaseCachedResources() - } - Button { - text: "Bake lightmap" - onClicked: root.source.bakeLightmap() - } - } - RowLayout { - Label { - text: "Render mode override" - } - ComboBox { - id: renderModeOverrideComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.source.renderMode = currentValue - Component.onCompleted: renderModeOverrideComboBox.currentIndex = renderModeOverrideComboBox.indexOfValue(root.source.renderMode) - model: [ - { value: View3D.Offscreen, text: "Offscreen" }, - { value: View3D.Underlay, text: "Underlay" }, - { value: View3D.Overlay, text: "Overlay" }, - { value: View3D.Inline, text: "Inline" } - ] - } - } - - Label { - text: "View3D logical size is " + root.source.width + "x" + root.source.height - } - Label { - text: "Backing texture pixel size is " + root.source.effectiveTextureSize.width + "x" + root.source.effectiveTextureSize.height - visible: root.source.renderMode === View3D.Offscreen - } - RowLayout { - CheckBox { - id: explicitTextureSizeCheckBox - visible: root.source.renderMode === View3D.Offscreen - text: "Explicit backing texture size" - property real aspectRatio: root.source.width / root.source.height - onCheckedChanged: updateSize() - function updateSize() { - if (!explicitTextureSizeCheckBox.checked) { - root.source.explicitTextureWidth = 0; - root.source.explicitTextureHeight = 0; - return; - } - var newWidth = explicitWidthSlider.value; - var newHeight = explicitHeightSlider.value; - if (keepAspectRatioCheckBox.checked) { - var aspectRatio = explicitTextureSizeCheckBox.aspectRatio; - if (newHeight * aspectRatio <= newWidth) - newWidth = newHeight * aspectRatio; - else - newHeight = newWidth * (1.0 / aspectRatio); - } - root.source.explicitTextureWidth = newWidth; - root.source.explicitTextureHeight = newHeight; - } - Connections { - target: root.source - function onWidthChanged() { explicitTextureSizeCheckBox.updateSize() } - function onHeightChanged() { explicitTextureSizeCheckBox.updateSize() } - } - } - CheckBox { - id: keepAspectRatioCheckBox - visible: root.source.renderMode === View3D.Offscreen && explicitTextureSizeCheckBox.checked - text: "Keep aspect ratio (" + explicitTextureSizeCheckBox.aspectRatio.toFixed(2) + ")" - checked: false - onCheckedChanged: explicitTextureSizeCheckBox.updateSize() - } - } - RowLayout { - visible: root.source.renderMode === View3D.Offscreen && explicitTextureSizeCheckBox.checked - Label { - text: "Width: " + explicitWidthSlider.value.toFixed(0) + " px" - } - Slider { - id: explicitWidthSlider - from: 16 - to: 4096 - value: 1280 - onValueChanged: explicitTextureSizeCheckBox.updateSize() - Layout.maximumWidth: 120 - } - Label { - text: "Height: " + explicitHeightSlider.value.toFixed(0) + " px" - } - Slider { - id: explicitHeightSlider - from: 16 - to: 4096 - value: 720 - onValueChanged: explicitTextureSizeCheckBox.updateSize() - Layout.maximumWidth: 120 - } - } - } - } - } - } - } - - component CustomTableItemDelegate : Rectangle { - property alias text: textLabel.text - property alias textColor: textLabel.color - implicitWidth: 100 - implicitHeight: textLabel.implicitHeight + 4 - color: palette.base - Label { - id: textLabel - anchors.centerIn: parent - color: palette.text - } - } - - function syncVisible() { - if (source) { - source.renderStats.extendedDataCollectionEnabled = visible && resourceDetailsVisible; - if (source.renderStats.extendedDataCollectionEnabled) - source.update(); - } - } - - Component.onCompleted: syncVisible() - onSourceChanged: syncVisible() - onVisibleChanged: syncVisible() - onResourceDetailsVisibleChanged: syncVisible() -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/ExtendedSceneEnvironment.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/ExtendedSceneEnvironment.qml deleted file mode 100644 index 4fd9d13..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/ExtendedSceneEnvironment.qml +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D.Helpers.impl - -SceneEffectEnvironment { - id: sceneEnvironment - - // Depth of Field Effect - property alias depthOfFieldEnabled: dofBlurEffect.enabled - property alias depthOfFieldFocusDistance: dofBlurEffect.focusDistance - property alias depthOfFieldFocusRange: dofBlurEffect.focusRange - property alias depthOfFieldBlurAmount: dofBlurEffect.blurAmount - - // Tonemapper - property alias exposure: sceneEffect.exposure - property alias whitePoint: sceneEffect.white - property alias ditheringEnabled: sceneEffect.ditheringEnabled - property alias sharpnessAmount: sceneEffect.sharpnessAmount - - // FXAA - property alias fxaaEnabled: sceneEffect.applyFXAA - - // Adjustments - property alias colorAdjustmentsEnabled: sceneEffect.colorAdjustmentsEnabled - property alias adjustmentBrightness: sceneEffect.bcsAdjustments.x - property alias adjustmentContrast: sceneEffect.bcsAdjustments.y - property alias adjustmentSaturation: sceneEffect.bcsAdjustments.z - - // Color Grading Effect - property alias lutEnabled: sceneEffect.enableLut - property alias lutSize: sceneEffect.lutSize - property alias lutFilterAlpha: sceneEffect.lutFilterAlpha - property alias lutTexture: sceneEffect.lutTextureAlias - - // Glow Effect - enum GlowBlendMode { - Additive, - Screen, - SoftLight, // Default - Replace - } - - enum GlowLevel { - One = 0x1, - Two = 0x2, - Three = 0x4, - Four = 0x8, - Five = 0x10, - Six = 0x20, - Seven = 0x40 - } - - property alias glowEnabled: sceneEffect.isGlowEnabled - property alias glowQualityHigh: sceneEffect.glowQualityHigh - property alias glowUseBicubicUpscale: sceneEffect.glowUseBicubicUpscale - property alias glowStrength: sceneEffect.glowStrength - property alias glowIntensity: sceneEffect.glowIntensity - property alias glowBloom: sceneEffect.glowBloom - property alias glowBlendMode: sceneEffect.glowBlendMode - property alias glowHDRMaximumValue: sceneEffect.glowHDRMaximumValue - property alias glowHDRScale: sceneEffect.glowHDRScale - property alias glowHDRMinimumValue: sceneEffect.glowHDRMinimumValue - property alias glowLevel: sceneEffect.glowLevel - - // Vignette - property alias vignetteEnabled: sceneEffect.vignetteEnabled - property alias vignetteStrength: sceneEffect.vignetteStrength - property alias vignetteColor: sceneEffect.vignetteColor - property alias vignetteRadius: sceneEffect.vignetteRadius - - // Lens Flare - property alias lensFlareEnabled: sceneEffect.lensFlareEnabled - property alias lensFlareBloomScale: sceneEffect.lensFlareBloomScale - property alias lensFlareBloomBias: sceneEffect.lensFlareBloomBias - property alias lensFlareGhostDispersal: sceneEffect.lensFlareGhostDispersal - property alias lensFlareGhostCount: sceneEffect.lensFlareGhostCount - property alias lensFlareHaloWidth: sceneEffect.lensFlareHaloWidth - property alias lensFlareStretchToAspect: sceneEffect.lensFlareStretchToAspect - property alias lensFlareDistortion: sceneEffect.lensFlareDistortion - property alias lensFlareBlurAmount: sceneEffect.lensFlareBlurAmount - property alias lensFlareApplyDirtTexture: sceneEffect.lensFlareApplyDirtTexture - property alias lensFlareApplyStarburstTexture: sceneEffect.lensFlareApplyStarburstTexture - property alias lensFlareCameraDirection: sceneEffect.lensFlareCameraDirection - property alias lensFlareLensColorTexture: sceneEffect.lensColorTextureAlias - property alias lensFlareLensDirtTexture: sceneEffect.lensDirtTextureAlias - property alias lensFlareLensStarburstTexture: sceneEffect.starburstTextureAlias - - DepthOfFieldBlur { - id: dofBlurEffect - environment: sceneEnvironment - } - - SceneEffect { - id: sceneEffect - environment: sceneEnvironment - tonemapMode: sceneEnvironment.tonemapMode - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/LodManager.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/LodManager.qml deleted file mode 100644 index 370a276..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/LodManager.qml +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Node { - id: root - required property Camera camera - required property var distances - property real fadeDistance: 0.0 - - onChildrenChanged: { - // Add distance threshold values to instanced children - var distIndex = 0; // Handle distance index separately to allow non-node children - for (var i = 0; i < children.length; i++) { - if (!(children[i] instanceof Model) || !children[i].instancing) - continue; - - if (distIndex - 1 >= 0) - children[i].instancingLodMin = distances[distIndex - 1]; - - if (distances.length > distIndex) - children[i].instancingLodMax = distances[distIndex]; - - distIndex++; - } - } - - function update() { - var distIndex = 0; // Handle distance index separately to allow non-node children - for (var i = 0; i < root.children.length; i++) { - var node = root.children[i]; - if (!(node instanceof Node)) - continue; - if (node instanceof Model && node.instancing) - continue; - if (distIndex > distances.length) - break; - - // Hide all nodes by default - node.visible = false; - - var minThreshold = 0; - var maxThreshold = -1; - - if (distIndex - 1 >= 0) - minThreshold = distances[distIndex - 1] - fadeDistance; - - if (distances.length > distIndex) - maxThreshold = distances[distIndex] + fadeDistance; - - // Show nodes that are inside the minimum and maximum distance thresholds - var distance = node.scenePosition.minus(camera.scenePosition).length(); - if (distance >= minThreshold && (maxThreshold < 0 || distance < maxThreshold)) - node.visible = true; - - // Fade models by adjusting opacity if fadeDistance is set - if (children[i] instanceof Model && fadeDistance > 0) { - var fadeAlpha = -(minThreshold - distance) / fadeDistance; - if (fadeAlpha > 1.0 && maxThreshold > 0) - fadeAlpha = (maxThreshold - distance) / fadeDistance; - - children[i].opacity = fadeAlpha; - } - - distIndex++; - } - } - Component.onCompleted: { - root.update() - } - - Connections { - target: root.camera - function onScenePositionChanged() { - root.update() - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/OrbitCameraController.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/OrbitCameraController.qml deleted file mode 100644 index 03ba8d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/OrbitCameraController.qml +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Item { - id: root - required property Node origin - required property Camera camera - - property real xSpeed: 0.1 - property real ySpeed: 0.1 - - property bool xInvert: false - property bool yInvert: true - - property bool mouseEnabled: true - property bool panEnabled: true - - readonly property bool inputsNeedProcessing: status.useMouse || status.isPanning - - implicitWidth: parent.width - implicitHeight: parent.height - - Connections { - target: root.camera - function onZChanged() { - // Adjust near/far values based on distance - let distance = root.camera.z - if (distance < 1) { - root.camera.clipNear = 0.01 - root.camera.clipFar = 100 - if (camera.z === 0) { - console.warn("camera z set to 0, setting it to near clip") - root.camera.z = camera.clipNear - } - } else if (distance < 100) { - root.camera.clipNear = 0.1 - root.camera.clipFar = 1000 - } else { - root.camera.clipNear = 1 - root.camera.clipFar = 10000 - } - } - } - - DragHandler { - id: dragHandler - target: null - enabled: root.mouseEnabled - acceptedModifiers: Qt.NoModifier - onCentroidChanged: { - root.mouseMoved(Qt.vector2d(centroid.position.x, centroid.position.y), false); - } - - onActiveChanged: { - if (active) - root.mousePressed(Qt.vector2d(centroid.position.x, centroid.position.y)); - else - root.mouseReleased(Qt.vector2d(centroid.position.x, centroid.position.y)); - } - } - - DragHandler { - id: ctrlDragHandler - target: null - enabled: root.mouseEnabled && root.panEnabled - acceptedModifiers: Qt.ControlModifier - onCentroidChanged: { - root.panEvent(Qt.vector2d(centroid.position.x, centroid.position.y)); - } - - onActiveChanged: { - if (active) - root.startPan(Qt.vector2d(centroid.position.x, centroid.position.y)); - else - root.endPan(); - } - } - - PinchHandler { - id: pinchHandler - target: null - enabled: root.mouseEnabled - - property real distance: 0.0 - onCentroidChanged: { - root.panEvent(Qt.vector2d(centroid.position.x, centroid.position.y)) - } - - onActiveChanged: { - if (active) { - root.startPan(Qt.vector2d(centroid.position.x, centroid.position.y)) - distance = root.camera.z - } else { - root.endPan() - distance = 0.0 - } - } - onScaleChanged: { - root.camera.z = distance * (1 / scale) - } - } - - TapHandler { - onTapped: root.forceActiveFocus() // qmllint disable signal-handler-parameters - } - - WheelHandler { - id: wheelHandler - orientation: Qt.Vertical - target: null - enabled: root.mouseEnabled - acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad - onWheel: event => { - let delta = -event.angleDelta.y * 0.01; - root.camera.z += root.camera.z * 0.1 * delta - } - } - - function mousePressed(newPos) { - root.forceActiveFocus() - status.currentPos = newPos - status.lastPos = newPos - status.useMouse = true; - } - - function mouseReleased(newPos) { - status.useMouse = false; - } - - function mouseMoved(newPos: vector2d) { - status.currentPos = newPos; - } - - function startPan(pos: vector2d) { - status.isPanning = true; - status.currentPanPos = pos; - status.lastPanPos = pos; - } - - function endPan() { - status.isPanning = false; - } - - function panEvent(newPos: vector2d) { - status.currentPanPos = newPos; - } - - FrameAnimation { - id: updateTimer - running: root.inputsNeedProcessing - onTriggered: status.processInput(frameTime * 100) - } - - QtObject { - id: status - - property bool useMouse: false - property bool isPanning: false - - property vector2d lastPos: Qt.vector2d(0, 0) - property vector2d lastPanPos: Qt.vector2d(0, 0) - property vector2d currentPos: Qt.vector2d(0, 0) - property vector2d currentPanPos: Qt.vector2d(0, 0) - - function negate(vector) { - return Qt.vector3d(-vector.x, -vector.y, -vector.z) - } - - function processInput(frameDelta) { - if (useMouse) { - // Get the delta - var rotationVector = root.origin.eulerRotation; - var delta = Qt.vector2d(lastPos.x - currentPos.x, - lastPos.y - currentPos.y); - // rotate x - var rotateX = delta.x * xSpeed * frameDelta - if (xInvert) - rotateX = -rotateX; - rotationVector.y += rotateX; - - // rotate y - var rotateY = delta.y * -ySpeed * frameDelta - if (yInvert) - rotateY = -rotateY; - rotationVector.x += rotateY; - origin.setEulerRotation(rotationVector); - lastPos = currentPos; - } - if (isPanning) { - let delta = currentPanPos.minus(lastPanPos); - delta.x = -delta.x - - delta.x = (delta.x / root.width) * camera.z * frameDelta - delta.y = (delta.y / root.height) * camera.z * frameDelta - - let velocity = Qt.vector3d(0, 0, 0) - // X Movement - let xDirection = origin.right - velocity = velocity.plus(Qt.vector3d(xDirection.x * delta.x, - xDirection.y * delta.x, - xDirection.z * delta.x)); - // Y Movement - let yDirection = origin.up - velocity = velocity.plus(Qt.vector3d(yDirection.x * delta.y, - yDirection.y * delta.y, - yDirection.z * delta.y)); - - origin.position = origin.position.plus(velocity) - - lastPanPos = currentPanPos - } - } - } - -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/WasdController.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/WasdController.qml deleted file mode 100644 index 8debfd8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/WasdController.qml +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (C) 2019 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Item { - id: root - property Node controlledObject: undefined - - property real speed: 1 - property real shiftSpeed: 3 - - property real forwardSpeed: 5 - property real backSpeed: 5 - property real rightSpeed: 5 - property real leftSpeed: 5 - property real upSpeed: 5 - property real downSpeed: 5 - property real xSpeed: 0.1 - property real ySpeed: 0.1 - - property bool xInvert: false - property bool yInvert: true - - property bool mouseEnabled: true - property bool keysEnabled: true - - readonly property bool inputsNeedProcessing: status.moveForward | status.moveBack - | status.moveLeft | status.moveRight - | status.moveUp | status.moveDown - | status.useMouse - - property alias acceptedButtons: dragHandler.acceptedButtons - - - - implicitWidth: parent.width - implicitHeight: parent.height - focus: keysEnabled - - DragHandler { - id: dragHandler - target: null - enabled: root.mouseEnabled - onCentroidChanged: { - root.mouseMoved(Qt.vector2d(centroid.position.x, centroid.position.y)); - } - - onActiveChanged: { - if (active) - root.mousePressed(Qt.vector2d(centroid.position.x, centroid.position.y)); - else - root.mouseReleased(Qt.vector2d(centroid.position.x, centroid.position.y)); - } - } - - TapHandler { - acceptedButtons: dragHandler.acceptedButtons - onTapped: root.forceActiveFocus() // qmllint disable signal-handler-parameters - } - - Keys.onPressed: (event)=> { if (keysEnabled && !event.isAutoRepeat) handleKeyPress(event) } - Keys.onReleased: (event)=> { if (keysEnabled && !event.isAutoRepeat) handleKeyRelease(event) } - - function mousePressed(newPos) { - root.forceActiveFocus() - status.currentPos = newPos - status.lastPos = newPos - status.useMouse = true; - } - - function mouseReleased(newPos) { - status.useMouse = false; - } - - function mouseMoved(newPos) { - status.currentPos = newPos; - } - - function forwardPressed() { - status.moveForward = true - status.moveBack = false - } - - function forwardReleased() { - status.moveForward = false - } - - function backPressed() { - status.moveBack = true - status.moveForward = false - } - - function backReleased() { - status.moveBack = false - } - - function rightPressed() { - status.moveRight = true - status.moveLeft = false - } - - function rightReleased() { - status.moveRight = false - } - - function leftPressed() { - status.moveLeft = true - status.moveRight = false - } - - function leftReleased() { - status.moveLeft = false - } - - function upPressed() { - status.moveUp = true - status.moveDown = false - } - - function upReleased() { - status.moveUp = false - } - - function downPressed() { - status.moveDown = true - status.moveUp = false - } - - function downReleased() { - status.moveDown = false - } - - function shiftPressed() { - status.shiftDown = true - } - - function shiftReleased() { - status.shiftDown = false - } - - function handleKeyPress(event) - { - switch (event.key) { - case Qt.Key_W: - case Qt.Key_Up: - forwardPressed(); - break; - case Qt.Key_S: - case Qt.Key_Down: - backPressed(); - break; - case Qt.Key_A: - case Qt.Key_Left: - leftPressed(); - break; - case Qt.Key_D: - case Qt.Key_Right: - rightPressed(); - break; - case Qt.Key_R: - case Qt.Key_PageUp: - upPressed(); - break; - case Qt.Key_F: - case Qt.Key_PageDown: - downPressed(); - break; - case Qt.Key_Shift: - shiftPressed(); - break; - } - } - - function handleKeyRelease(event) - { - switch (event.key) { - case Qt.Key_W: - case Qt.Key_Up: - forwardReleased(); - break; - case Qt.Key_S: - case Qt.Key_Down: - backReleased(); - break; - case Qt.Key_A: - case Qt.Key_Left: - leftReleased(); - break; - case Qt.Key_D: - case Qt.Key_Right: - rightReleased(); - break; - case Qt.Key_R: - case Qt.Key_PageUp: - upReleased(); - break; - case Qt.Key_F: - case Qt.Key_PageDown: - downReleased(); - break; - case Qt.Key_Shift: - shiftReleased(); - break; - } - } - - FrameAnimation { - id: updateTimer - running: root.inputsNeedProcessing - onTriggered: status.processInput(frameTime * 100) - } - - QtObject { - id: status - - property bool moveForward: false - property bool moveBack: false - property bool moveLeft: false - property bool moveRight: false - property bool moveUp: false - property bool moveDown: false - property bool shiftDown: false - property bool useMouse: false - - property vector2d lastPos: Qt.vector2d(0, 0) - property vector2d currentPos: Qt.vector2d(0, 0) - - function updatePosition(vector, speed, position) - { - if (shiftDown) - speed *= root.shiftSpeed; - else - speed *= root.speed - - var direction = vector; - var velocity = Qt.vector3d(direction.x * speed, - direction.y * speed, - direction.z * speed); - controlledObject.position = Qt.vector3d(position.x + velocity.x, - position.y + velocity.y, - position.z + velocity.z); - } - - function negate(vector) { - return Qt.vector3d(-vector.x, -vector.y, -vector.z) - } - - function processInput(frameDelta) { - if (root.controlledObject == undefined) - return; - - if (moveForward) - updatePosition(root.controlledObject.forward, root.forwardSpeed * frameDelta, root.controlledObject.position); - else if (moveBack) - updatePosition(negate(root.controlledObject.forward), root.backSpeed * frameDelta, root.controlledObject.position); - - if (moveRight) - updatePosition(root.controlledObject.right, root.rightSpeed * frameDelta, root.controlledObject.position); - else if (moveLeft) - updatePosition(negate(root.controlledObject.right), root.leftSpeed * frameDelta, root.controlledObject.position); - - if (moveDown) - updatePosition(negate(root.controlledObject.up), root.downSpeed * frameDelta, root.controlledObject.position); - else if (moveUp) - updatePosition(root.controlledObject.up, root.upSpeed * frameDelta, root.controlledObject.position); - - if (useMouse) { - // Get the delta - var rotationVector = root.controlledObject.eulerRotation; - var delta = Qt.vector2d(lastPos.x - currentPos.x, - lastPos.y - currentPos.y); - // rotate x - var rotateX = delta.x * xSpeed * frameDelta - if (xInvert) - rotateX = -rotateX; - rotationVector.y += rotateX; - - // rotate y - var rotateY = delta.y * -ySpeed * frameDelta - if (yInvert) - rotateY = -rotateY; - rotationVector.x += rotateY; - controlledObject.setEulerRotation(rotationVector); - lastPos = currentPos; - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSection.qml deleted file mode 100644 index 8dcd462..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSection.qml +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Axis Helper") - - SectionLayout { - PropertyLabel { - text: qsTr("Axis Lines") - tooltip: qsTr("Show colored axis indicator lines.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.enableAxisLines - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("XY Grid") - tooltip: qsTr("Show grid on XY plane.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.enableXYGrid - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("XZ Grid") - tooltip: qsTr("Show grid on XZ plane.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.enableXZGrid - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - - PropertyLabel { - text: qsTr("YZ Grid") - tooltip: qsTr("Show grid on YZ plane.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.enableYZGrid - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Grid Opacity") - tooltip: qsTr("Sets the opacity of the visible grids.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.gridOpacity - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Grid Color") - tooltip: qsTr("Sets the color of the visible grids.") - } - - ColorEditor { - backendValue: backendValues.gridColor - supportGradient: false - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSpecifics.qml deleted file mode 100644 index 8cda5dd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - AxisHelperSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSection.qml deleted file mode 100644 index 2d113cb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSection.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Debug View") - - SectionLayout { - PropertyLabel { - text: qsTr("Source View") - tooltip: qsTr("Sets the source View3D item to show render statistics for.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.View3D" - backendValue: backendValues.source - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Detailed Mode") - tooltip: qsTr("Enables detailed mode, which shows more detailed resource usage statistics.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.resourceDetailsVisible.valueToString - backendValue: backendValues.resourceDetailsVisible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSpecifics.qml deleted file mode 100644 index ed2173e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DebugViewSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSection.qml deleted file mode 100644 index 4f336e0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSection.qml +++ /dev/null @@ -1,1879 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Extended Scene Environment") - - SectionLayout { - id: baseSectionLayout - property bool isColorMode: backgroundModeComboBox.currentIndex === 2 - property bool isSkyBoxMode: backgroundModeComboBox.currentIndex === 3 - property bool isSkyBoxCubeMapMode: backgroundModeComboBox.currentIndex === 4 - - PropertyLabel { - text: qsTr("Background Mode") - tooltip: qsTr("Sets if and how the background of the scene should be cleared.") - } - - SecondColumnLayout { - ComboBox { - id: backgroundModeComboBox - scope: "SceneEnvironment" - model: ["Transparent", "Unspecified", "Color", "SkyBox", "SkyBoxCubeMap"] - backendValue: backendValues.backgroundMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isColorMode - text: qsTr("Clear Color") - tooltip: qsTr("Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property.") - } - - ColorEditor { - visible: baseSectionLayout.isColorMode - backendValue: backendValues.clearColor - supportGradient: false - } - - PropertyLabel { - visible: baseSectionLayout.isSkyBoxCubeMapMode - text: qsTr("Skybox Cube Map") - tooltip: qsTr("Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isSkyBoxCubeMapMode - ItemFilterComboBox { - typeFilter: "QtQuick3D.CubeMapTexture" - backendValue: backendValues.skyBoxCubeMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode - text: qsTr("Skybox Blur") - tooltip: qsTr("Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.skyboxBlurAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: antialiasingSection - width: parent.width - caption: qsTr("Antialiasing") - - property bool isAntialiasingEnabled: antialiasingModeComboBox.currentIndex !== 0 - - SectionLayout { - PropertyLabel { - text: qsTr("Antialiasing Mode") - tooltip: qsTr("Sets the antialiasing mode applied to the scene.") - } - - SecondColumnLayout { - ComboBox { - id: antialiasingModeComboBox - scope: "SceneEnvironment" - model: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"] - backendValue: backendValues.antialiasingMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: antialiasingSection.isAntialiasingEnabled - text: qsTr("Antialiasing Quality") - tooltip: qsTr("Sets the level of antialiasing applied to the scene.") - } - - SecondColumnLayout { - visible: antialiasingSection.isAntialiasingEnabled - ComboBox { - scope: "SceneEnvironment" - model: ["Medium", "High", "VeryHigh"] - backendValue: backendValues.antialiasingQuality - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("FXAA") - tooltip: qsTr("Enables fast approximate antialiasing.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.fxaaEnabled.valueToString - backendValue: backendValues.fxaaEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Specular AA") - tooltip: qsTr("Enables specular antialiasing.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.specularAAEnabled.valueToString - backendValue: backendValues.specularAAEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Temporal AA") - tooltip: qsTr("Enables temporal antialiasing using camera jittering and frame blending.") - } - - SecondColumnLayout { - CheckBox { - id: temporalAAEnabledCheckBox - text: backendValues.temporalAAEnabled.valueToString - backendValue: backendValues.temporalAAEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: temporalAAEnabledCheckBox.checked - text: qsTr("Temporal AA Strength") - tooltip: qsTr("Sets the amount of temporal antialiasing applied.") - } - - SecondColumnLayout { - visible: temporalAAEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 2.0 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.temporalAAStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Tone Mapping") - - SectionLayout { - PropertyLabel { - text: qsTr("Mode") - tooltip: qsTr("Sets how colors are tonemapped from HDR to LDR before being displayed.") - } - - SecondColumnLayout { - ComboBox { - scope: "SceneEnvironment" - model: ["TonemapModeNone", "TonemapModeLinear", "TonemapModeAces", "TonemapModeHejlDawson", "TonemapModeFilmic"] - backendValue: backendValues.tonemapMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Exposure") - tooltip: qsTr("Sets the exposure of the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.exposure - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("White Point") - tooltip: qsTr("Sets the white point of the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.whitePoint - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Sharpening") - tooltip: qsTr("Set the sharpening amount applied to the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.sharpnessAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Dithering") - tooltip: qsTr("Enables dithering to reduce banding artifacts.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.ditheringEnabled.valueToString - backendValue: backendValues.ditheringEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } - - Section { - width: parent.width - caption: qsTr("Color Adjustments") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables color adjustments") - } - - SecondColumnLayout { - CheckBox { - id: adjustmentsEnabledCheckBox - text: backendValues.colorAdjustmentsEnabled.valueToString - backendValue: backendValues.colorAdjustmentsEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: adjustmentsEnabledCheckBox.checked - text: qsTr("Brightness") - tooltip: qsTr("Adjusts the brightness of the scene.") - } - - SecondColumnLayout { - visible: adjustmentsEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 8.0 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.adjustmentBrightness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: adjustmentsEnabledCheckBox.checked - text: qsTr("Contrast") - tooltip: qsTr("Adjusts the contrast of the scene.") - } - - SecondColumnLayout { - visible: adjustmentsEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 8.0 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.adjustmentContrast - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: adjustmentsEnabledCheckBox.checked - text: qsTr("Saturation") - tooltip: qsTr("Adjusts the saturation of the scene.") - } - - SecondColumnLayout { - visible: adjustmentsEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 8.0 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.adjustmentSaturation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Color Grading") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables color grading via look up table (LUT) textures.") - } - - SecondColumnLayout { - CheckBox { - id: colorGradingEnabledCheckBox - text: backendValues.lutEnabled.valueToString - backendValue: backendValues.lutEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: colorGradingEnabledCheckBox.checked - text: qsTr("Size") - tooltip: qsTr("Sets the size of the LUT texture. The texture should have the dimensions: width=(size * size), height=(size).") - } - - SecondColumnLayout { - visible: colorGradingEnabledCheckBox.checked - SpinBox { - minimumValue: 1 - maximumValue: 64 - decimals: 0 - stepSize: 1 - sliderIndicatorVisible: true - backendValue: backendValues.skyboxBlurAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: colorGradingEnabledCheckBox.checked - text: qsTr("Texture") - tooltip: qsTr("Sets the source of the LUT texture.") - } - - SecondColumnLayout { - visible: colorGradingEnabledCheckBox.checked - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lutTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: colorGradingEnabledCheckBox.checked - text: qsTr("Alpha Mix") - tooltip: qsTr("Sets the amount of color grading to mix with the scene.") - } - - SecondColumnLayout { - visible: colorGradingEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 1 - sliderIndicatorVisible: true - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.lutFilterAlpha - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } - - Section { - width: parent.width - caption: qsTr("Ambient Occlusion (SSAO)") - - SectionLayout { - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables ambient occlusion.") - } - - SecondColumnLayout { - CheckBox { - id: ambientOcclusionEnabledCheckBox - text: backendValues.aoEnabled.valueToString - backendValue: backendValues.aoEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Strength") - tooltip: qsTr("Sets the amount of ambient occulusion applied.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 100 - sliderIndicatorVisible: true - decimals: 0 - backendValue: backendValues.aoStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Distance") - tooltip: qsTr("Sets roughly how far ambient occlusion shadows spread away from objects.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.aoDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Softness") - tooltip: qsTr("Sets how smooth the edges of the ambient occlusion shading are.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 50 - sliderIndicatorVisible: true - decimals: 2 - backendValue: backendValues.aoSoftness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Sample Rate") - tooltip: qsTr("Sets ambient occlusion quality (more shades of gray) at the expense of performance.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 2 - maximumValue: 4 - decimals: 0 - stepSize: 1 - sliderIndicatorVisible: true - backendValue: backendValues.aoSampleRate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Bias") - tooltip: qsTr("Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: -1.0 - maximumValue: 1.0 - decimals: 2 - backendValue: backendValues.aoBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Dither") - tooltip: qsTr("Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - CheckBox { - id: aoDitherCheckBox - text: backendValues.aoDither.valueToString - backendValue: backendValues.aoDither - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Depth of Field") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables Depth of Field effect.") - } - - SecondColumnLayout { - CheckBox { - id: depthOfFieldEnabledCheckBox - text: backendValues.depthOfFieldEnabled.valueToString - backendValue: backendValues.depthOfFieldEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: depthOfFieldEnabledCheckBox.checked - text: qsTr("Focus Distance") - tooltip: qsTr("Sets the distance from the camera at which objects are in focus.") - } - - SecondColumnLayout { - visible: depthOfFieldEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.depthOfFieldFocusDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: depthOfFieldEnabledCheckBox.checked - text: qsTr("Focus Range") - tooltip: qsTr("Sets the range of distances from the focus distance that are in focus.") - } - - SecondColumnLayout { - visible: depthOfFieldEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.depthOfFieldFocusRange - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: depthOfFieldEnabledCheckBox.checked - text: qsTr("Blur Amount") - tooltip: qsTr("Sets the amount of blur applied to objects outside the focus range.") - } - - SecondColumnLayout { - visible: depthOfFieldEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 25 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.depthOfFieldBlurAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Glow") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables the Glow/Bloom Effect") - } - - SecondColumnLayout { - CheckBox { - id: glowEnabledCheckBox - text: backendValues.glowEnabled.valueToString - backendValue: backendValues.glowEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("High Quality") - tooltip: qsTr("Enables high quality mode for the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - CheckBox { - text: backendValues.glowQualityHigh.valueToString - backendValue: backendValues.glowQualityHigh - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Bicubic Upsampling") - tooltip: qsTr("Reduces the aliasing artifacts and boxing in the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - CheckBox { - text: backendValues.glowUseBicubicUpscale.valueToString - backendValue: backendValues.glowUseBicubicUpscale - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Strength") - tooltip: qsTr("Sets the strength of the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Intensity") - tooltip: qsTr("Sets the Intensity of the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 2 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowIntensity - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Bloom") - tooltip: qsTr("Sets the amount of bloom applied to the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowBloom - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Lower Threshold") - tooltip: qsTr("Sets the minimum brightness of the HDR glow.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 4 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowHDRMinimumValue - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Upper Threshold") - tooltip: qsTr("Sets the maximum brightness of the HDR glow.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 256 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowHDRMaximumValue - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("HDR Scale") - tooltip: qsTr("Sets the bleed scale of the HDR glow.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 8 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.glowHDRScale - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Blend Mode") - tooltip: qsTr("Sets the blending mode for the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - ComboBox { - scope: "ExtendedSceneEnvironment.GlowBlendMode" - model: ["Additive", "Screen", "SoftLight", "Replace"] - backendValue: backendValues.glowBlendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: glowEnabledCheckBox.checked - text: qsTr("Blur Levels") - tooltip: qsTr("Sets which of the blur passes get applied to the glow effect.") - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - // ### This isn't perfect, but it's the best we can do for now - ActionIndicator { - id: glowLevelController - icon.color: extFuncLogic.color - icon.text: extFuncLogic.glyph - onClicked: extFuncLogic.show() - forceVisible: extFuncLogic.menuVisible - visible: true - - property var enableLevel1: { "value": false, "isInModel": false} - property var enableLevel2: { "value": false, "isInModel": false} - property var enableLevel3: { "value": false, "isInModel": false} - property var enableLevel4: { "value": false, "isInModel": false} - property var enableLevel5: { "value": false, "isInModel": false} - property var enableLevel6: { "value": false, "isInModel": false} - property var enableLevel7: { "value": false, "isInModel": false} - - property variant backendValue: backendValues.glowLevel - property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value - property bool blockLevels: false - - onBackendValueChanged: evaluateLevels() - onValueFromBackendChanged: evaluateLevels() - - Connections { - target: modelNodeBackend - function onSelectionChanged() { - evaluateLevels() - } - } - - Component.onCompleted: evaluateLevels() - - function evaluateLevels() { - blockLevels = true - enableLevel1 = { "value": valueFromBackend & 1, "isInModel": false} - enableLevel2 = { "value": valueFromBackend & 2, "isInModel": false} - enableLevel3 = { "value": valueFromBackend & 4, "isInModel": false} - enableLevel4 = { "value": valueFromBackend & 8, "isInModel": false} - enableLevel5 = { "value": valueFromBackend & 16, "isInModel": false} - enableLevel6 = { "value": valueFromBackend & 32, "isInModel": false} - enableLevel7 = { "value": valueFromBackend & 64, "isInModel": false} - blockLevels = false - } - - function composeExpressionString() { - if (blockLevels) - return - - let expressionStr = ""; - - if (enableLevel1.value || enableLevel2.value || enableLevel3.value || enableLevel4.value - || enableLevel5.value || enableLevel6.value || enableLevel7.value) { - if (enableLevel1.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.One"; - if (enableLevel2.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Two"; - if (enableLevel3.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Three"; - if (enableLevel4.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Four"; - if (enableLevel5.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Five"; - if (enableLevel6.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Six"; - if (enableLevel7.value) - expressionStr += " | ExtendedSceneEnvironment.GlowLevel.Seven"; - - expressionStr = expressionStr.substring(3); - - backendValue.expression = expressionStr - } else { - expressionStr = "0"; - backendValue.expression = expressionStr - } - } - ExtendedFunctionLogic { - id: extFuncLogic - backendValue: backendValues.glowLevel - onReseted: { - glowLevelController.enableLevel1 = { "value": true, "isInModel": false} - glowLevelController.enableLevel2 = { "value": false, "isInModel": false} - glowLevelController.enableLevel3 = { "value": false, "isInModel": false} - glowLevelController.enableLevel4 = { "value": false, "isInModel": false} - glowLevelController.enableLevel5 = { "value": false, "isInModel": false} - glowLevelController.enableLevel6 = { "value": false, "isInModel": false} - glowLevelController.enableLevel7 = { "value": false, "isInModel": false} - glowLevelController.evaluateLevels() - } - } - } - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 1") - backendValue: glowLevelController.enableLevel1 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 2") - backendValue: glowLevelController.enableLevel2 - actionIndicatorVisible: false - implicitWidth: StudioTheme.Values.twoControlColumnWidth - onCheckedChanged: glowLevelController.composeExpressionString() - } - - ExpandingSpacer {} - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 3") - backendValue: glowLevelController.enableLevel3 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 4") - backendValue: glowLevelController.enableLevel4 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 5") - backendValue: glowLevelController.enableLevel5 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 6") - backendValue: glowLevelController.enableLevel6 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - // spacer - visible: glowEnabledCheckBox.checked - } - SecondColumnLayout { - visible: glowEnabledCheckBox.checked - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Level 7") - backendValue: glowLevelController.enableLevel7 - actionIndicatorVisible: false - onCheckedChanged: glowLevelController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } - - Section { - width: parent.width - caption: qsTr("Vignette") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables the vignette effect.") - } - - SecondColumnLayout { - CheckBox { - id: vignetteEnabledCheckBox - text: backendValues.vignetteEnabled.valueToString - backendValue: backendValues.vignetteEnabled - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: vignetteEnabledCheckBox.checked - text: qsTr("Color") - tooltip: qsTr("Sets the color of the vignette effect.") - } - - ColorEditor { - visible: vignetteEnabledCheckBox.checked - backendValue: backendValues.vignetteColor - supportGradient: false - } - - PropertyLabel { - visible: vignetteEnabledCheckBox.checked - text: qsTr("Strength") - tooltip: qsTr("Sets the strength of the vignette effect.") - } - - SecondColumnLayout { - visible: vignetteEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 15 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.vignetteStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: vignetteEnabledCheckBox.checked - text: qsTr("Radius") - tooltip: qsTr("Sets the radius of the vignette effect.") - } - - SecondColumnLayout { - visible: vignetteEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 5 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.vignetteRadius - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Lens Flare") - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables the Lens Flare effect.") - } - - SecondColumnLayout { - CheckBox { - id: lensFlareEnabledCheckBox - text: backendValues.lensFlareEnabled.valueToString - backendValue: backendValues.lensFlareEnabled - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Bloom Scale") - tooltip: qsTr("Sets the scale of the lens flare bloom effect.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 20 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareBloomScale - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Bloom Bias") - tooltip: qsTr("Sets the level at which the lens flare bloom starts.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareBloomBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Ghost Dispersal") - tooltip: qsTr("Sets the distance between the lens flare ghosts.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0.001 - maximumValue: 1 - decimals: 3 - stepSize: 0.001 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareGhostDispersal - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Ghost Count") - tooltip: qsTr("Sets the amount of lens flare ghosts.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 20 - decimals: 0 - stepSize: 1 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareGhostCount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Halo Width") - tooltip: qsTr("Sets the size of the lens flare halo.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 3 - stepSize: 0.001 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareHaloWidth - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Stretch Aspect") - tooltip: qsTr("Set correction factor for roundness of the lens flare halo.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 3 - stepSize: 0.001 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareStretchToAspect - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Distortion") - tooltip: qsTr("Set amount of chromatic aberration in the lens flare.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 25 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareDistortion - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Blur") - tooltip: qsTr("Set amount of blur to apply to the lens flare.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 50 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.lensFlareBlurAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Lens Color Texture") - tooltip: qsTr("A gradient image used for the lens flare lens color.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lensFlareLensColorTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Apply Dirt") - tooltip: qsTr("Set whether to apply a dirt texture to the lens flare.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - CheckBox { - id: lensFlareDirtEnabledCheckBox - text: backendValues.lensFlareApplyDirtTexture.valueToString - backendValue: backendValues.lensFlareApplyDirtTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked && lensFlareDirtEnabledCheckBox.checked - text: qsTr("Dirt Texture") - tooltip: qsTr("An image that is used to simulate inperfections on the lens.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked && lensFlareDirtEnabledCheckBox.checked - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lensFlareLensDirtTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Apply Starburst") - tooltip: qsTr("Set whether to apply a starburst texture to the lens flare.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - CheckBox { - id: lensFlareStarburstEnabledCheckBox - text: backendValues.lensFlareApplyStarburstTexture.valueToString - backendValue: backendValues.lensFlareApplyStarburstTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked && lensFlareStarburstEnabledCheckBox.checked - text: qsTr("Starburst Texture") - tooltip: qsTr("A noise image to augment the starburst effect of the lens flare.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked && lensFlareStarburstEnabledCheckBox.checked - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lensFlareLensStarburstTexture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - text: qsTr("Direction") - tooltip: qsTr("Sets the direction of the camera in the scene.") - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.lensFlareCameraDirection_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.lensFlareCameraDirection_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: lensFlareEnabledCheckBox.checked - } - - SecondColumnLayout { - visible: lensFlareEnabledCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.lensFlareCameraDirection_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - } - } - - Section { - width: parent.width - caption: qsTr("Image Based Lighting") - - SectionLayout { - PropertyLabel { - text: qsTr("HDR Image") - tooltip: qsTr("Sets an image to use to light the scene, either instead of, or in addition to standard lights.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lightProbe - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Exposure") - tooltip: qsTr("Sets the amount of light emitted by the light probe.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeExposure - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Horizon") - tooltip: qsTr("Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.probeHorizon - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Orientation") - tooltip: qsTr("Sets the orientation of the light probe.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Other Effects") - - SectionLayout { - PropertyLabel { - text: qsTr("Effects") - tooltip: qsTr("Post Processing effects applied to this scene.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.effects - model: backendValues.effects.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Effect" - - onAdd: function(value) { backendValues.effects.idListAdd(value) } - onRemove: function(idx) { backendValues.effects.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.effects.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fog") - tooltip: qsTr("Settings for Fog applied to the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Fog" - backendValue: backendValues.fog - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Advanced") - - SectionLayout { - PropertyLabel { - text: qsTr("Enable Depth Test") - tooltip: qsTr("Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthTestEnabled.valueToString - backendValue: backendValues.depthTestEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enable Depth Prepass") - tooltip: qsTr("Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthPrePassEnabled.valueToString - backendValue: backendValues.depthPrePassEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Debug Settings") - tooltip: qsTr("Additional render settings for debugging scenes.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.DebugSettings" - backendValue: backendValues.debugSettings - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSpecifics.qml deleted file mode 100644 index 2211d95..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ExtendedSceneEnvironmentSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySection.qml deleted file mode 100644 index 92fe156..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySection.qml +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Grid Geometry") - - SectionLayout { - PropertyLabel { - text: qsTr("Horizontal Lines") - tooltip: qsTr("Sets the number of horizontal lines in the grid.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.horizontalLines - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertical Lines") - tooltip: qsTr("Sets the number of vertical lines in the grid.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.verticalLines - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Horizontal Step") - tooltip: qsTr("Sets the space between horizontal lines.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.horizontalStep - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertical Step") - tooltip: qsTr("Sets the space between vertical lines.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.verticalStep - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySpecifics.qml deleted file mode 100644 index a714d6e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - GridGeometrySection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySection.qml deleted file mode 100644 index 4fada46..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySection.qml +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Height Field Geometry") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Extents") - tooltip: qsTr("Sets the dimensions of a box contain the geometry.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of an image file containing the heightmap data.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.source - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Smooth Shading") - tooltip: qsTr("Sets whether the height map is shown with smooth shading or with hard angles between the squares of the map.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.smoothShading.valueToString - backendValue: backendValues.smoothShading - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySpecifics.qml deleted file mode 100644 index 5e3ca88..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - HeightFieldGeometrySection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSection.qml deleted file mode 100644 index cc07037..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSection.qml +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Infinite Grid") - - SectionLayout { - PropertyLabel { - text: qsTr("Visible") - tooltip: qsTr("Sets whether the infinite grid is visible.") - } - - CheckBox { - text: backendValues.visible.valueToString - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - PropertyLabel { - text: qsTr("Axis Lines") - tooltip: qsTr("Sets whether the axis lines are visible.") - } - - CheckBox { - text: backendValues.gridAxes ? qsTr("On") : qsTr("Off") - backendValue: backendValues.gridAxes - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - PropertyLabel { - text: qsTr("Grid Interval") - tooltip: qsTr("Sets the distance between grid lines.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.gridInterval - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSpecifics.qml deleted file mode 100644 index 8998dda..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - InfiniteGridSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSection.qml deleted file mode 100644 index ad85f42..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Instance Model") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Instancing Table") - tooltip: qsTr("Sets the underlying instance table of the model.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Instancing" - backendValue: backendValues.instancingTable - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSpecifics.qml deleted file mode 100644 index 5d6cc30..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - InstanceModelSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSection.qml deleted file mode 100644 index aefa387..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Instance Repeater") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Instancing Table") - tooltip: qsTr("Sets the instance table used by the repeater.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Instancing" - backendValue: backendValues.instancingTable - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSpecifics.qml deleted file mode 100644 index d5f59fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - InstanceRepeaterSection { - width: parent.width - } - - Repeater3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSection.qml deleted file mode 100644 index a9845ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSection.qml +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Lod Manager") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Camera") - tooltip: qsTr("Specifies the camera from which the distance to the child nodes is calculated.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Camera" - backendValue: backendValues.camera - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade Distance") - tooltip: qsTr("Specifies the distance at which the cross-fade between the detail levels starts.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.fadeDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Distances") - tooltip: qsTr("Specifies the thresholds when the detail level changes. The first number is the distance when the first node changes to the second one, etc.") - } - - SecondColumnLayout { - - ActionIndicator { - icon.color: extFuncLogic.color - icon.text: extFuncLogic.glyph - onClicked: extFuncLogic.show() - forceVisible: extFuncLogic.menuVisible - ExtendedFunctionLogic { - id: extFuncLogic - backendValue: backendValues.distances - } - } - - // Placeholder until we can do list of value types: QDS-9090 - Label { - text: qsTr("Currently only editable in QML.") - Layout.fillWidth: true - Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth - Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth - Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth - } - - ExpandingSpacer {} - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSpecifics.qml deleted file mode 100644 index 582fb4e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - LodManagerSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSection.qml deleted file mode 100644 index 92510d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSection.qml +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Look-at Node") - - SectionLayout { - PropertyLabel { - text: qsTr("Target Node") - tooltip: qsTr("Sets the target node to look at.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.target - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSpecifics.qml deleted file mode 100644 index 4d282a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - LookAtNodeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/NodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/NodeSection.qml deleted file mode 100644 index 982fa8c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/NodeSection.qml +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Visibility") - - SectionLayout { - PropertyLabel { - text: qsTr("Visibility") - tooltip: qsTr("Sets the local visibility of the node.") - } - - SecondColumnLayout { - // ### should be a slider - CheckBox { - text: qsTr("Visible") - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Opacity") - tooltip: qsTr("Sets the local opacity value of the node.") - } - - SecondColumnLayout { - // ### should be a slider - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: transformSection - width: parent.width - caption: qsTr("Transform") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Translation") - tooltip: qsTr("Sets the translation of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the node in degrees.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pivot") - tooltip: qsTr("Sets the pivot of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSection.qml deleted file mode 100644 index fb4dac8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSection.qml +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Orbit Camera Controller") - - SectionLayout { - PropertyLabel { - text: qsTr("Origin") - tooltip: qsTr("The node that the camera will orbit around.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.origin - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Camera") - tooltip: qsTr("The camera that will be controlled.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Camera" - backendValue: backendValues.camera - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Mouse/Touch") - tooltip: qsTr("Enables interaction via mouse and touch.") - } - - SecondColumnLayout { - CheckBox { - id: mouseEnabledCheckBox - text: backendValues.mouseEnabled.valueToString - backendValue: backendValues.mouseEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: mouseEnabledCheckBox.checked - text: qsTr("Pan Controls") - tooltip: qsTr("Enables panning gestures.") - } - - SecondColumnLayout { - visible: mouseEnabledCheckBox.checked - CheckBox { - text: backendValues.panEnabled.valueToString - backendValue: backendValues.panEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: mouseEnabledCheckBox.checked - text: qsTr("Invert X") - tooltip: qsTr("Enables inverting X-axis controls.") - } - - SecondColumnLayout { - visible: mouseEnabledCheckBox.checked - CheckBox { - text: backendValues.xInvert.valueToString - backendValue: backendValues.xInvert - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: mouseEnabledCheckBox.checked - text: qsTr("X Speed") - tooltip: qsTr("The speed of the X-axis controls.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.xSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: mouseEnabledCheckBox.checked - text: qsTr("Invert Y") - tooltip: qsTr("Enables inverting Y-axis controls.") - } - - SecondColumnLayout { - visible: mouseEnabledCheckBox.checked - CheckBox { - text: backendValues.yInvert.valueToString - backendValue: backendValues.yInvert - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: mouseEnabledCheckBox.checked - text: qsTr("Y Speed") - tooltip: qsTr("The speed of the Y-axis controls.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.ySpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSpecifics.qml deleted file mode 100644 index 5c57c36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - OrbitCameraControllerSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSection.qml deleted file mode 100644 index afa6a5d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSection.qml +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Procedural Sky Texture Data") - - SectionLayout { - - PropertyLabel { - text: qsTr("Quality") - tooltip: qsTr("This property sets the size of the texture. The higher the quality, the more memory is used.") - } - - SecondColumnLayout { - ComboBox { - scope: "ProceduralSkyTextureData" - model: ["SkyTextureQualityLow", "SkyTextureQualityMedium", "SkyTextureQualityHigh", "SkyTextureQualityVeryHigh"] - backendValue: backendValues.textureQuality - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Sky") - - SectionLayout { - PropertyLabel { - text: qsTr("Top Color") - tooltip: qsTr("Specifies the sky color at the top of the skybox.") - } - - ColorEditor { - backendValue: backendValues.skyTopColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Horizon Color") - tooltip: qsTr("Specifies the sky color at the horizon.") - } - - ColorEditor { - backendValue: backendValues.skyHorizonColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Energy") - tooltip: qsTr("Specifies the HDR color intensity of the top half of the skybox.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.skyEnergy - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Curve") - tooltip: qsTr("Modifies the curve (n^x) of the sky gradient from the horizon to the top.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.skyCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Ground") - - SectionLayout { - PropertyLabel { - text: qsTr("Bottom Color") - tooltip: qsTr("Specifies the ground color at the bottom of the skybox.") - } - - ColorEditor { - backendValue: backendValues.groundBottomColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Horizon Color") - tooltip: qsTr("Specifies the ground color at the horizon.") - } - - ColorEditor { - backendValue: backendValues.groundHorizonColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Energy") - tooltip: qsTr("Specifies the HDR color intensity of the bottom half of the skybox.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.groundEnergy - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Curve") - tooltip: qsTr("Modifies the curve (n^x) of the ground gradient from the horizon to the bottom.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.groundCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Sun") - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Specifies the color at the sun on the skybox.") - } - - ColorEditor { - backendValue: backendValues.sunColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Energy") - tooltip: qsTr("Specifies the HDR color intensity of sun on the skybox.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.sunEnergy - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade Start") - tooltip: qsTr("Specifies the angle from the center of the sun to where it starts to fade.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 360 - decimals: 1 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.sunAngleMin - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade End") - tooltip: qsTr("Specifies the angle from the center of the sun to where it fades out completely.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 360 - decimals: 1 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.sunAngleMax - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Curve") - tooltip: qsTr("Modifies the curve (n^x) of the gradient from the sky color and the sun.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 64 - decimals: 3 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.sunCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Latitude") - tooltip: qsTr("Specifies the angle between the horizon and the sun position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -180 - maximumValue: 180 - decimals: 1 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.sunLatitude - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Longitude") - tooltip: qsTr("Specifies the angle between the forward direction and the sun position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 360 - decimals: 1 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.sunLongitude - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSpecifics.qml deleted file mode 100644 index 0313441..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ProceduralSkyTextureDataSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/Repeater3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/Repeater3DSection.qml deleted file mode 100644 index a469bb6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/Repeater3DSection.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Repeater") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Model") - tooltip: qsTr("The model providing data for the repeater. This can simply specify the number of delegate instances to create or it can be bound to an actual model.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.model - showTranslateCheckBox: false - writeAsExpression: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Delegate") - tooltip: qsTr("The delegate provides a template defining each object instantiated by the repeater.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.delegate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSection.qml deleted file mode 100644 index c00ff72..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSection.qml +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("WASD Controller") - - SectionLayout { - PropertyLabel { - text: qsTr("Controlled Node") - tooltip: qsTr("Sets the 3D node controlled by this controller.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.controlledObject - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Invert X") - tooltip: qsTr("Enables inverting X-axis controls.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.xInvert - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Invert Y") - tooltip: qsTr("Enables inverting Y-axis controls.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.yInvert - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Mouse Control") - tooltip: qsTr("Enables using mouse to control the target node.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.mouseEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Keyboard Control") - tooltip: qsTr("Enables using keyboard to control the target node.") - } - - SecondColumnLayout { - CheckBox { - text: qsTr("Enabled") - backendValue: backendValues.keysEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // TODO: acceptedButtons has no control as there is currently no support for a flags - // type of property control in QDS. - } - } - - Section { - width: parent.width - caption: qsTr("Speeds") - - SectionLayout { - PropertyLabel { - text: qsTr("Speed") - tooltip: qsTr("Sets the general navigation speed multiplier.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.speed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Shift Speed") - tooltip: qsTr("Sets the navigation speed multiplier when the Shift key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.shiftSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Forward Speed") - tooltip: qsTr("Sets the navigation speed when forward key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.forwardSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Back Speed") - tooltip: qsTr("Sets the navigation speed when back key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.backSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Right Speed") - tooltip: qsTr("Sets the navigation speed when right key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.rightSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Left Speed") - tooltip: qsTr("Sets the navigation speed when left key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.leftSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Up Speed") - tooltip: qsTr("Sets the navigation speed when up key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.upSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Down Speed") - tooltip: qsTr("Sets the navigation speed when down key is pressed.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.downSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("X Speed") - tooltip: qsTr("Sets the navigation speed when mouse is moved along X-axis.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.xSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Y Speed") - tooltip: qsTr("Sets the navigation speed when mouse is moved along Y-axis.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.ySpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSpecifics.qml deleted file mode 100644 index cd68d33..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - WasdControllerSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/helpers.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/helpers.metainfo deleted file mode 100644 index 83492e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/helpers.metainfo +++ /dev/null @@ -1,261 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.Helpers.LookAtNode" - icon: "images/lookatnode16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Look-at Node" - category: "Helpers" - libraryIcon: "images/lookatnode.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.AxisHelper" - icon: "images/axishelper16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Axis Helper" - category: "Helpers" - libraryIcon: "images/axishelper.png" - version: "6.0" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.DebugView" - icon: "images/debugview16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: true - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Debug View" - category: "Helpers" - libraryIcon: "images/debugview.png" - version: "6.0" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.GridGeometry" - icon: "images/gridgeometry16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Grid Geometry" - category: "Helpers" - libraryIcon: "images/gridgeometry.png" - version: "6.0" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.HeightFieldGeometry" - icon: "images/heightfieldgeometry16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Height Field Geometry" - category: "Helpers" - libraryIcon: "images/heightfieldgeometry.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.InstanceModel" - icon: "images/instancemodel16.png" - - Hints { - visibleInNavigator: false - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Instance Model" - category: "Helpers" - libraryIcon: "images/instancemodel.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.InstanceRepeater" - icon: "images/instancerepeater16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Instance Repeater" - category: "Helpers" - libraryIcon: "images/instancerepeater.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.WasdController" - icon: "images/wasdcontroller16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: true - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Wasd Controller" - category: "Helpers" - libraryIcon: "images/wasdcontroller.png" - version: "6.0" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.InfiniteGrid" - icon: "images/infinitegrid16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Infinite Grid" - category: "Helpers" - libraryIcon: "images/infinitegrid.png" - version: "6.5" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.OrbitCameraController" - icon: "images/orbitcameracontroller16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: true - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Orbit Camera Controller" - category: "Helpers" - libraryIcon: "images/orbitcameracontroller.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.ProceduralSkyTextureData" - icon: "images/proceduralskytexturedata16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Procedural Sky Texture Data" - category: "Helpers" - libraryIcon: "images/proceduralskytexturedata.png" - version: "6.4" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.ExtendedSceneEnvironment" - icon: "images/extendedsceneenvironment16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Extended Scene Environment" - category: "Helpers" - libraryIcon: "images/extendedsceneenvironment.png" - version: "6.5" - requiredImport: "QtQuick3D.Helpers" - } - } - - Type { - name: "QtQuick3D.Helpers.LodManager" - icon: "images/lodmanager16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Lod Manager" - category: "Helpers" - libraryIcon: "images/lodmanager.png" - version: "6.5" - requiredImport: "QtQuick3D.Helpers" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper.png deleted file mode 100644 index e6ab46c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper16.png deleted file mode 100644 index 6e34357..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper@2x.png deleted file mode 100644 index 5508b1c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview.png deleted file mode 100644 index 6dcc03f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview16.png deleted file mode 100644 index 3a413d9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview@2x.png deleted file mode 100644 index 769e1cc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy.png deleted file mode 100644 index a3b6c7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy16.png deleted file mode 100644 index de8906a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy@2x.png deleted file mode 100644 index 7ca04a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment.png deleted file mode 100644 index 5d39b46..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment16.png deleted file mode 100644 index 4f6d9ce..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment@2x.png deleted file mode 100644 index 36ce759..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry.png deleted file mode 100644 index 082fd8e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry16.png deleted file mode 100644 index 8f57c41..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry@2x.png deleted file mode 100644 index 2863aa8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry.png deleted file mode 100644 index c3fda60..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry16.png deleted file mode 100644 index d5f2150..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry@2x.png deleted file mode 100644 index 4a86972..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid.png deleted file mode 100644 index e667caf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid16.png deleted file mode 100644 index 75618f2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid@2x.png deleted file mode 100644 index fad226f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel.png deleted file mode 100644 index 5995c4e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel16.png deleted file mode 100644 index 324830f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel@2x.png deleted file mode 100644 index f0e6b84..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater.png deleted file mode 100644 index 2337495..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater16.png deleted file mode 100644 index ab3e040..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater@2x.png deleted file mode 100644 index ecb60f7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager.png deleted file mode 100644 index 4b17707..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager16.png deleted file mode 100644 index 38ba26e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager@2x.png deleted file mode 100644 index 31544af..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode.png deleted file mode 100644 index 6984fa0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode16.png deleted file mode 100644 index 712be80..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode@2x.png deleted file mode 100644 index 87d9807..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller.png deleted file mode 100644 index 9c14551..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller16.png deleted file mode 100644 index 007c3a2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller@2x.png deleted file mode 100644 index 555e782..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata.png deleted file mode 100644 index 29a1e9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata16.png deleted file mode 100644 index 267ea82..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata@2x.png deleted file mode 100644 index 7a408e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller.png deleted file mode 100644 index e17f6a2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller16.png deleted file mode 100644 index 7cb1f51..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller@2x.png deleted file mode 100644 index 5ce6bc0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/DepthOfFieldBlur.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/DepthOfFieldBlur.qml deleted file mode 100644 index 2a65133..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/DepthOfFieldBlur.qml +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Helpers.impl - -DepthOfFieldEffect { - readonly property TextureInput sourceSampler: TextureInput { - texture: Texture {} - } - property real focusDistance: 600 - property real focusRange: 100 - property real blurAmount: 4 - - Shader { - id: downsampleVert - stage: Shader.Vertex - shader: "qrc:/qtquick3d_helpers/shaders/downsample.vert" - } - Shader { - id: downsampleFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/downsample.frag" - } - - Shader { - id: blurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3d_helpers/shaders/depthoffieldblur.vert" - } - Shader { - id: blurFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/depthoffieldblur.frag" - } - - Buffer { - id: downsampleBuffer - name: "downsampleBuffer" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - sizeMultiplier: 0.5 - } - - passes: [ - Pass { - shaders: [ downsampleVert, downsampleFrag ] - output: downsampleBuffer - }, - Pass { - shaders: [ blurVert, blurFrag ] - commands: [ - // INPUT is the texture for downsampleBuffer - BufferInput { - buffer: downsampleBuffer - }, - // the actual input texture is exposed as sourceSampler - BufferInput { - sampler: "sourceSampler" - } - ] - } - ] -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/LightmapperOutputWindow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/LightmapperOutputWindow.qml deleted file mode 100644 index de1f322..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/LightmapperOutputWindow.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts - -Item { - id: root - anchors.fill: parent - - function appendText(text: string) { - textArea.insert(textArea.length, text + "\n") - } - - ColumnLayout { - anchors.fill: parent - Button { - objectName: "cancelButton" - Layout.fillWidth: true - text: "Cancel" - } - - ScrollView { - Layout.fillWidth: true - Layout.fillHeight: true - TextArea { - id: textArea - readOnly: true - placeholderText: qsTr("Qt Lightmapper") - font.pixelSize: 12 - wrapMode: Text.WordWrap - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/SceneEffect.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/SceneEffect.qml deleted file mode 100644 index 57b02c5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/SceneEffect.qml +++ /dev/null @@ -1,701 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Helpers.impl - -MainSceneEffect { - id: sceneEffect - property int tonemapMode: SceneEnvironment.TonemapModeLinear - property real exposure: 1.0 - property real white: 1.0 - property bool applyFXAA: false - property bool ditheringEnabled: false - property real sharpnessAmount: 0.0 // 0.0 - 1.0 - property bool colorAdjustmentsEnabled: false - property vector3d bcsAdjustments: Qt.vector3d(1.0, 1.0, 1.0) - - // Lens Flare - property bool lensFlareEnabled: false - property real lensFlareBloomScale: 10 // 0 - 20 - property real lensFlareBloomBias: 0.95 // 0 - x (basically maximum color value) - property real lensFlareGhostDispersal: 0.5 // 0 - 1 - property int lensFlareGhostCount: 4 // 0 - 20 - property real lensFlareHaloWidth: 0.25 // 0 - 1 - property real lensFlareStretchToAspect: 0.5 // 0 - 1 - property real lensFlareDistortion: 5 // 0.0 - 20.0 - property real lensFlareBlurAmount: 3 // 0.0 - 5.0 - property bool lensFlareApplyDirtTexture: false - property bool lensFlareApplyStarburstTexture: false - property vector3d lensFlareCameraDirection: Qt.vector3d(0, 0, -1) - property bool lensFlareDebug: false - - property TextureInput lensColorTexture: TextureInput { - id: lensColorTextureInput - texture: defaultLensColorTexture - } - property alias lensColorTextureAlias: lensColorTextureInput.texture - Texture { - id: defaultLensColorTexture - source: "qrc:/qtquick3d_helpers/images/gradientTexture.png" - tilingModeHorizontal: Texture.ClampToEdge - tilingModeVertical: Texture.ClampToEdge - } - - property TextureInput lensDirtTexture: TextureInput { - id: lensDirtTextureInput - texture: defaultLensColorTexture - } - property alias lensDirtTextureAlias: lensDirtTextureInput.texture - Texture { - id: defaultLensDirtTexture - source: "qrc:/qtquick3d_helpers/images/lens_dirt_default.jpeg" - } - - property TextureInput starburstTexture: TextureInput { - id: lensStarburstTextureInput - texture: defaultLensStarburstTexture - } - property alias starburstTextureAlias: lensStarburstTextureInput.texture - Texture { - id: defaultLensStarburstTexture - source: "qrc:/qtquick3d_helpers/images/noiseTexture.png" - } - - // Glow data - readonly property bool isFirstPass: true - property bool isGlowEnabled: false - property bool glowQualityHigh: false - property bool glowUseBicubicUpscale: false - property real glowStrength : 1.0 // 0.0 - 2.0 - property real glowIntensity : 0.8 // 0.0 - 8.0 - property real glowBloom : 0.0 // 0.0 - 1.0 - property int glowBlendMode : 2 // Additive,Screen,Softlight,Replace - property real glowHDRMaximumValue: 12.0 // 0.0 - 256.0 - property real glowHDRScale: 2.0 // 0.0 - 4.0 - property real glowHDRMinimumValue: 1.0 // 0.0 - 4.0 - property int glowLevel: 1 // 1 - 7 - - // Color Grading (LUT) - property bool enableLut: false - property alias lutTextureAlias: lutTextureInput.texture - property TextureInput lut: TextureInput { - id: lutTextureInput - texture: defaultLutTexture - } - property real lutSize: 16.0 // size of texture, textures are 3d in 2d, so width = lutSize * lutSize, height = lutSize - property real lutFilterAlpha: 1.0 // 0.0 - 1.0 - Texture { - id: defaultLutTexture - source: "qrc:/qtquick3d_helpers/luts/identity.png" - } - - // Vignette - property bool vignetteEnabled: false - property real vignetteStrength: 15 // 0 - 15 - property color vignetteColor: "gray" - property real vignetteRadius: 0.35 // 0 - 5 - - readonly property TextureInput glowBuffer1: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer2: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer3: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer4: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer5: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer6: TextureInput { - texture: Texture {} - } - readonly property TextureInput glowBuffer7: TextureInput { - texture: Texture {} - } - - readonly property TextureInput lensFlareDownsampleBuffer: TextureInput { - texture: Texture {} - } - - readonly property TextureInput lensFlareFeaturesBuffer: TextureInput { - texture: Texture {} - } - - readonly property TextureInput lensFlareTexture: TextureInput { - texture: Texture {} - } - - Component.onCompleted: buildPasses() - - onIsGlowEnabledChanged: buildPasses() - onLensFlareEnabledChanged: buildPasses() - - function buildPasses() { - let passList = []; - if (lensFlareEnabled) { - passList.push(lensFlareDownsamplePass) - passList.push(lensFlareFeaturesPass) - passList.push(lensFlareBlurHorizontalPass) - passList.push(lensFlareBlurVerticalPass) - } - - if (isGlowEnabled) { - passList.push(horizontalBlurPass1) - passList.push(verticalBlurPass1) - passList.push(horizontalBlurPass2) - passList.push(verticalBlurPass2) - passList.push(horizontalBlurPass3) - passList.push(verticalBlurPass3) - passList.push(horizontalBlurPass4) - passList.push(verticalBlurPass4) - passList.push(horizontalBlurPass5) - passList.push(verticalBlurPass5) - passList.push(horizontalBlurPass6) - passList.push(verticalBlurPass6) - passList.push(horizontalBlurPass7) - passList.push(verticalBlurPass7) - } - - passList.push(tonemapPass) - tonemapPass.rebuildCommands(); - - sceneEffect.passes = passList // qmllint disable read-only-property - } - - Shader { - id: tonemapperFrag - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/tonemapper.frag" - } - - Shader { - id: glowHorizontalBlur - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/glowhorizontalblur.frag" - } - - Shader { - id: glowVerticalBlur - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/glowverticalblur.frag" - } - - Shader { - id: lensFlareDownsample - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/lensflaredownsample.frag" - } - - Shader { - id: lensFlareFeatures - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/lensflarefeatures.frag" - } - - Shader { - id: lensFlareVerticalBlurVert - stage: Shader.Vertex - shader: "qrc:/qtquick3d_helpers/shaders/lensflareblurvertical.vert" - } - Shader { - id: lensFlareHorizontalVert - stage: Shader.Vertex - shader: "qrc:/qtquick3d_helpers/shaders/lensflareblurhorizontal.vert" - } - Shader { - id: lensFlareGaussianBlur - stage: Shader.Fragment - shader: "qrc:/qtquick3d_helpers/shaders/lensflaregaussianblur.frag" - } - - Buffer { - id: tempBuffer1 - name: "tempBuffer1" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - Buffer { - id: tempBuffer2 - name: "tempBuffer2" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.25 - } - Buffer { - id: tempBuffer3 - name: "tempBuffer3" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.125 - } - Buffer { - id: tempBuffer4 - name: "tempBuffer4" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.0625 - } - Buffer { - id: tempBuffer5 - name: "tempBuffer5" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.03125 - } - Buffer { - id: tempBuffer6 - name: "tempBuffer6" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.015625 - } - Buffer { - id: tempBuffer7 - name: "tempBuffer7" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.0078125 - } - - Buffer { - id: glowBuffer1 - name: "glowBuffer1" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - Buffer { - id: glowBuffer2 - name: "glowBuffer2" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.25 - } - Buffer { - id: glowBuffer3 - name: "glowBuffer3" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.125 - } - Buffer { - id: glowBuffer4 - name: "glowBuffer4" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.0625 - } - Buffer { - id: glowBuffer5 - name: "glowBuffer5" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.03125 - } - Buffer { - id: glowBuffer6 - name: "glowBuffer6" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.015625 - } - Buffer { - id: glowBuffer7 - name: "glowBuffer7" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.0078125 - } - - Buffer { - id: lensFlareDownsampleBuffer - name: "lensFlareDownsampleBuffer" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - - Buffer { - id: lensFlareFeaturesBuffer - name: "lensFlareFeaturesBuffer" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - - Buffer { - id: lensFlareBlurTempBuffer - name: "lensFlareBlurTempBuffer" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - - Buffer { - id: lensFlareBlurBuffer - name: "lensFlareBlurBuffer" - format: Buffer.RGBA16F - textureFilterOperation: Buffer.Linear - textureCoordOperation: Buffer.ClampToEdge - bufferFlags: Buffer.None - sizeMultiplier: 0.5 - } - - Pass { - id: horizontalBlurPass1 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: true - } - ] - output: tempBuffer1 - } - - Pass { - id: verticalBlurPass1 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer1 - } - ] - output: glowBuffer1 - } - - Pass { - id: horizontalBlurPass2 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer1 - } - ] - output: tempBuffer2 - } - - Pass { - id: verticalBlurPass2 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer2 - } - ] - output: glowBuffer2 - } - - Pass { - id: horizontalBlurPass3 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer2 - } - ] - output: tempBuffer3 - } - - Pass { - id: verticalBlurPass3 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer3 - } - ] - output: glowBuffer3 - } - - Pass { - id: horizontalBlurPass4 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer3 - } - ] - output: tempBuffer4 - } - - Pass { - id: verticalBlurPass4 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer4 - } - ] - output: glowBuffer4 - } - - Pass { - id: horizontalBlurPass5 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer4 - } - ] - output: tempBuffer5 - } - - Pass { - id: verticalBlurPass5 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer5 - } - ] - output: glowBuffer5 - } - - Pass { - id: horizontalBlurPass6 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer5 - } - ] - output: tempBuffer6 - } - - Pass { - id: verticalBlurPass6 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer6 - } - ] - output: glowBuffer6 - } - Pass { - id: horizontalBlurPass7 - shaders: [glowHorizontalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: glowBuffer6 - } - ] - output: tempBuffer7 - } - - Pass { - id: verticalBlurPass7 - shaders: [glowVerticalBlur] - commands: [ - SetUniformValue { - target: "isFirstPass" - value: false - }, - BufferInput { - buffer: tempBuffer7 - } - ] - output: glowBuffer7 - } - - Pass { - id: lensFlareDownsamplePass - shaders: [lensFlareDownsample] - output: lensFlareDownsampleBuffer - } - - Pass { - id: lensFlareFeaturesPass - shaders: [lensFlareFeatures] - commands: [ - BufferInput { - buffer: lensFlareDownsampleBuffer - sampler: "lensFlareDownsampleBuffer" - } - ] - output: lensFlareFeaturesBuffer - } - - Pass { - id: lensFlareBlurHorizontalPass - shaders: [lensFlareHorizontalVert, lensFlareGaussianBlur] - commands: [ - BufferInput { - buffer: lensFlareFeaturesBuffer - sampler: "lensFlareTexture" - } - ] - output: lensFlareBlurTempBuffer - } - Pass { - id: lensFlareBlurVerticalPass - shaders: [lensFlareVerticalBlurVert, lensFlareGaussianBlur] - commands: [ - BufferInput { - buffer: lensFlareBlurTempBuffer - sampler: "lensFlareTexture" - } - - ] - output: lensFlareBlurBuffer - } - - Connections { - target: sceneEffect - function onIsGlowEnabledChanged() { tonemapPass.rebuildCommands() } - function onLensFlareEnabledChanged() { tonemapPass.rebuildCommands() } - } - - BufferInput { - id: glowBufferInput1 - buffer: glowBuffer1 - sampler: "glowBuffer1" - } - BufferInput { - id: glowBufferInput2 - buffer: glowBuffer2 - sampler: "glowBuffer2" - } - BufferInput { - id: glowBufferInput3 - buffer: glowBuffer3 - sampler: "glowBuffer3" - } - BufferInput { - id: glowBufferInput4 - buffer: glowBuffer4 - sampler: "glowBuffer4" - } - BufferInput { - id: glowBufferInput5 - buffer: glowBuffer5 - sampler: "glowBuffer5" - } - BufferInput { - id: glowBufferInput6 - buffer: glowBuffer6 - sampler: "glowBuffer6" - } - BufferInput { - id: glowBufferInput7 - buffer: glowBuffer7 - sampler: "glowBuffer7" - } - BufferInput { - id: lensFlareBufferInput - buffer: lensFlareBlurBuffer - sampler: "lensFlareTexture" - } - - Pass { - id: tonemapPass; - shaders: [tonemapperFrag] - - function rebuildCommands() { - let dynamicCommands = [] - if (sceneEffect.isGlowEnabled) { - dynamicCommands.push(glowBufferInput1) - dynamicCommands.push(glowBufferInput2) - dynamicCommands.push(glowBufferInput3) - dynamicCommands.push(glowBufferInput4) - dynamicCommands.push(glowBufferInput5) - dynamicCommands.push(glowBufferInput6) - dynamicCommands.push(glowBufferInput7) - } - if (sceneEffect.lensFlareEnabled) { - dynamicCommands.push(lensFlareBufferInput) - } - tonemapPass.commands = dynamicCommands; // qmllint disable read-only-property - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/libqtquick3dhelpersimplplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/libqtquick3dhelpersimplplugin.so deleted file mode 100755 index b37c00e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/libqtquick3dhelpersimplplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/plugins.qmltypes deleted file mode 100644 index c9f994a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/plugins.qmltypes +++ /dev/null @@ -1,143 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/sceneeffects_p.h" - name: "DepthOfFieldEffect" - accessSemantics: "reference" - prototype: "SceneEffectBase" - exports: ["QtQuick3D.Helpers.impl/DepthOfFieldEffect 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Signal { name: "enabledChanged" } - } - Component { - file: "private/sceneeffects_p.h" - name: "MainSceneEffect" - accessSemantics: "reference" - prototype: "SceneEffectBase" - exports: ["QtQuick3D.Helpers.impl/MainSceneEffect 6.0"] - exportMetaObjectRevisions: [1536] - } - Component { - file: "qabstractitemmodel.h" - name: "QAbstractTableModel" - accessSemantics: "reference" - prototype: "QAbstractItemModel" - } - Component { - file: "private/qquick3drenderstatsmeshesmodel_p.h" - name: "QQuick3DRenderStatsMeshesModel" - accessSemantics: "reference" - prototype: "QAbstractTableModel" - exports: [ - "QtQuick3D.Helpers.impl/RenderStatsMeshesModel 6.0", - "QtQuick3D.Helpers.impl/RenderStatsMeshesModel 6.4" - ] - exportMetaObjectRevisions: [1536, 1540] - Property { - name: "meshData" - type: "QString" - read: "meshData" - write: "setMeshData" - notify: "meshDataChanged" - index: 0 - } - Signal { name: "meshDataChanged" } - Method { - name: "setMeshData" - Parameter { name: "newMeshData"; type: "QString" } - } - } - Component { - file: "private/qquick3drenderstatspassesmodel_p.h" - name: "QQuick3DRenderStatsPassesModel" - accessSemantics: "reference" - prototype: "QAbstractTableModel" - exports: [ - "QtQuick3D.Helpers.impl/RenderStatsPassesModel 6.0", - "QtQuick3D.Helpers.impl/RenderStatsPassesModel 6.4" - ] - exportMetaObjectRevisions: [1536, 1540] - Property { - name: "passData" - type: "QString" - read: "passData" - write: "setPassData" - notify: "passDataChanged" - index: 0 - } - Signal { name: "passDataChanged" } - Method { - name: "setPassData" - Parameter { name: "newPassData"; type: "QString" } - } - } - Component { - file: "private/qquick3drenderstatstexturesmodel_p.h" - name: "QQuick3DRenderStatsTexturesModel" - accessSemantics: "reference" - prototype: "QAbstractTableModel" - exports: [ - "QtQuick3D.Helpers.impl/RenderStatsTexturesModel 6.0", - "QtQuick3D.Helpers.impl/RenderStatsTexturesModel 6.4" - ] - exportMetaObjectRevisions: [1536, 1540] - Property { - name: "textureData" - type: "QString" - read: "textureData" - write: "setTextureData" - notify: "textureDataChanged" - index: 0 - } - Signal { name: "textureDataChanged" } - Method { - name: "setTextureData" - Parameter { name: "newTextureData"; type: "QString" } - } - } - Component { - file: "private/sceneeffects_p.h" - name: "SceneEffectBase" - accessSemantics: "reference" - prototype: "QQuick3DEffect" - exports: ["QtQuick3D.Helpers.impl/SceneEffectBase 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "environment" - type: "QQuick3DSceneEnvironment" - isPointer: true - read: "environment" - write: "setEnvironment" - notify: "environmentChanged" - index: 0 - } - Signal { name: "environmentChanged" } - } - Component { - file: "private/sceneeffects_p.h" - name: "SceneEffectEnvironment" - accessSemantics: "reference" - prototype: "QQuick3DSceneEnvironment" - exports: [ - "QtQuick3D.Helpers.impl/SceneEffectEnvironment 6.0", - "QtQuick3D.Helpers.impl/SceneEffectEnvironment 6.4", - "QtQuick3D.Helpers.impl/SceneEffectEnvironment 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/qmldir deleted file mode 100644 index 0f37168..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/qmldir +++ /dev/null @@ -1,11 +0,0 @@ -module QtQuick3D.Helpers.impl -linktarget Qt6::qtquick3dhelpersimplplugin -plugin qtquick3dhelpersimplplugin -classname QtQuick3DHelpersImplPlugin -typeinfo plugins.qmltypes -depends QtQuick3D auto -prefer :/qt-project.org/imports/QtQuick3D/Helpers/impl/ -DepthOfFieldBlur 6.0 DepthOfFieldBlur.qml -SceneEffect 6.0 SceneEffect.qml -LightmapperOutputWindow 6.0 LightmapperOutputWindow.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so deleted file mode 100755 index 4c5f901..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh deleted file mode 100644 index c186888..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/plugins.qmltypes deleted file mode 100644 index a6bd4e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/plugins.qmltypes +++ /dev/null @@ -1,916 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/gridgeometry_p.h" - name: "GridGeometry" - accessSemantics: "reference" - prototype: "QQuick3DGeometry" - exports: [ - "QtQuick3D.Helpers/GridGeometry 6.0", - "QtQuick3D.Helpers/GridGeometry 6.7" - ] - exportMetaObjectRevisions: [1536, 1543] - Property { - name: "horizontalLines" - type: "int" - read: "horizontalLines" - write: "setHorizontalLines" - notify: "horizontalLinesChanged" - index: 0 - } - Property { - name: "verticalLines" - type: "int" - read: "verticalLines" - write: "setVerticalLines" - notify: "verticalLinesChanged" - index: 1 - } - Property { - name: "horizontalStep" - type: "float" - read: "horizontalStep" - write: "setHorizontalStep" - notify: "horizontalStepChanged" - index: 2 - } - Property { - name: "verticalStep" - type: "float" - read: "verticalStep" - write: "setVerticalStep" - notify: "verticalStepChanged" - index: 3 - } - Signal { name: "horizontalLinesChanged" } - Signal { name: "verticalLinesChanged" } - Signal { name: "horizontalStepChanged" } - Signal { name: "verticalStepChanged" } - Method { - name: "setHorizontalLines" - Parameter { name: "count"; type: "int" } - } - Method { - name: "setVerticalLines" - Parameter { name: "count"; type: "int" } - } - Method { - name: "setHorizontalStep" - Parameter { name: "step"; type: "float" } - } - Method { - name: "setVerticalStep" - Parameter { name: "step"; type: "float" } - } - } - Component { - file: "private/heightfieldgeometry_p.h" - name: "HeightFieldGeometry" - accessSemantics: "reference" - prototype: "QQuick3DGeometry" - exports: [ - "QtQuick3D.Helpers/HeightFieldGeometry 6.0", - "QtQuick3D.Helpers/HeightFieldGeometry 6.5", - "QtQuick3D.Helpers/HeightFieldGeometry 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "source" - revision: 1541 - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "smoothShading" - type: "bool" - read: "smoothShading" - write: "setSmoothShading" - notify: "smoothShadingChanged" - index: 1 - } - Property { - name: "extents" - type: "QVector3D" - read: "extents" - write: "setExtents" - notify: "extentsChanged" - index: 2 - } - Property { - name: "heightMap" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 3 - } - Signal { name: "sourceChanged" } - Signal { name: "smoothShadingChanged" } - Signal { name: "extentsChanged" } - } - Component { - file: "private/instancerepeater_p.h" - name: "InstanceModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - exports: ["QtQuick3D.Helpers/InstanceModel 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "instancingTable" - type: "QQuick3DInstancing" - isPointer: true - read: "instancing" - write: "setInstancing" - notify: "instancingChanged" - index: 0 - } - Signal { name: "instancingChanged" } - Method { name: "reset" } - } - Component { - file: "private/instancerepeater_p.h" - name: "InstanceRepeater" - accessSemantics: "reference" - defaultProperty: "delegate" - prototype: "QQuick3DRepeater" - exports: ["QtQuick3D.Helpers/InstanceRepeater 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "instancingTable" - type: "QQuick3DInstancing" - isPointer: true - read: "instancing" - write: "setInstancing" - notify: "instancingChanged" - index: 0 - } - Signal { name: "instancingChanged" } - } - Component { - file: "private/lookatnode_p.h" - name: "LookAtNode" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.Helpers/LookAtNode 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "target" - type: "QQuick3DNode" - isPointer: true - read: "target" - write: "setTarget" - notify: "targetChanged" - index: 0 - } - Signal { name: "targetChanged" } - Method { - name: "setTarget" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } - } - Method { name: "updateLookAt" } - } - Component { - file: "private/proceduralmesh_p.h" - name: "ProceduralMesh" - accessSemantics: "reference" - prototype: "QQuick3DGeometry" - exports: [ - "QtQuick3D.Helpers/ProceduralMesh 6.6", - "QtQuick3D.Helpers/ProceduralMesh 6.7" - ] - exportMetaObjectRevisions: [1542, 1543] - Enum { - name: "PrimitiveMode" - values: [ - "Points", - "LineStrip", - "Lines", - "TriangleStrip", - "TriangleFan", - "Triangles" - ] - } - Property { - name: "positions" - type: "QVector3D" - isList: true - read: "positions" - write: "setPositions" - notify: "positionsChanged" - index: 0 - isFinal: true - } - Property { - name: "normals" - type: "QVector3D" - isList: true - read: "normals" - write: "setNormals" - notify: "normalsChanged" - index: 1 - isFinal: true - } - Property { - name: "tangents" - type: "QVector3D" - isList: true - read: "tangents" - write: "setTangents" - notify: "tangentsChanged" - index: 2 - isFinal: true - } - Property { - name: "binormals" - type: "QVector3D" - isList: true - read: "binormals" - write: "setBinormals" - notify: "binormalsChanged" - index: 3 - isFinal: true - } - Property { - name: "uv0s" - type: "QVector2D" - isList: true - read: "uv0s" - write: "setUv0s" - notify: "uv0sChanged" - index: 4 - isFinal: true - } - Property { - name: "uv1s" - type: "QVector2D" - isList: true - read: "uv1s" - write: "setUv1s" - notify: "uv1sChanged" - index: 5 - isFinal: true - } - Property { - name: "colors" - type: "QVector4D" - isList: true - read: "colors" - write: "setColors" - notify: "colorsChanged" - index: 6 - isFinal: true - } - Property { - name: "joints" - type: "QVector4D" - isList: true - read: "joints" - write: "setJoints" - notify: "jointsChanged" - index: 7 - isFinal: true - } - Property { - name: "weights" - type: "QVector4D" - isList: true - read: "weights" - write: "setWeights" - notify: "weightsChanged" - index: 8 - isFinal: true - } - Property { - name: "indexes" - type: "uint" - isList: true - read: "indexes" - write: "setIndexes" - notify: "indexesChanged" - index: 9 - isFinal: true - } - Property { - name: "subsets" - type: "ProceduralMeshSubset" - isList: true - read: "subsets" - index: 10 - isReadonly: true - isFinal: true - } - Property { - name: "primitiveMode" - type: "PrimitiveMode" - read: "primitiveMode" - write: "setPrimitiveMode" - notify: "primitiveModeChanged" - index: 11 - isFinal: true - } - Signal { name: "positionsChanged" } - Signal { name: "primitiveModeChanged" } - Signal { name: "indexesChanged" } - Signal { name: "normalsChanged" } - Signal { name: "tangentsChanged" } - Signal { name: "binormalsChanged" } - Signal { name: "uv0sChanged" } - Signal { name: "uv1sChanged" } - Signal { name: "colorsChanged" } - Signal { name: "jointsChanged" } - Signal { name: "weightsChanged" } - Method { name: "requestUpdate" } - Method { name: "updateGeometry" } - Method { - name: "subsetDestroyed" - Parameter { name: "subset"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/proceduralmesh_p.h" - name: "ProceduralMeshSubset" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D.Helpers/ProceduralMeshSubset 6.6"] - exportMetaObjectRevisions: [1542] - Property { - name: "offset" - type: "uint" - read: "offset" - write: "setOffset" - notify: "offsetChanged" - index: 0 - isFinal: true - } - Property { - name: "count" - type: "uint" - read: "count" - write: "setCount" - notify: "countChanged" - index: 1 - isFinal: true - } - Property { - name: "name" - type: "QString" - read: "name" - write: "setName" - notify: "nameChanged" - index: 2 - isFinal: true - } - Signal { name: "offsetChanged" } - Signal { name: "countChanged" } - Signal { name: "nameChanged" } - Signal { name: "isDirty" } - } - Component { - file: "private/proceduralskytexturedata_p.h" - name: "ProceduralSkyTextureData" - accessSemantics: "reference" - prototype: "QQuick3DTextureData" - exports: ["QtQuick3D.Helpers/ProceduralSkyTextureData 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "SkyTextureQuality" - values: [ - "SkyTextureQualityLow", - "SkyTextureQualityMedium", - "SkyTextureQualityHigh", - "SkyTextureQualityVeryHigh" - ] - } - Property { - name: "skyTopColor" - type: "QColor" - read: "skyTopColor" - write: "setSkyTopColor" - notify: "skyTopColorChanged" - index: 0 - } - Property { - name: "skyHorizonColor" - type: "QColor" - read: "skyHorizonColor" - write: "setSkyHorizonColor" - notify: "skyHorizonColorChanged" - index: 1 - } - Property { - name: "skyCurve" - type: "float" - read: "skyCurve" - write: "setSkyCurve" - notify: "skyCurveChanged" - index: 2 - } - Property { - name: "skyEnergy" - type: "float" - read: "skyEnergy" - write: "setSkyEnergy" - notify: "skyEnergyChanged" - index: 3 - } - Property { - name: "groundBottomColor" - type: "QColor" - read: "groundBottomColor" - write: "setGroundBottomColor" - notify: "groundBottomColorChanged" - index: 4 - } - Property { - name: "groundHorizonColor" - type: "QColor" - read: "groundHorizonColor" - write: "setGroundHorizonColor" - notify: "groundHorizonColorChanged" - index: 5 - } - Property { - name: "groundCurve" - type: "float" - read: "groundCurve" - write: "setGroundCurve" - notify: "groundCurveChanged" - index: 6 - } - Property { - name: "groundEnergy" - type: "float" - read: "groundEnergy" - write: "setGroundEnergy" - notify: "groundEnergyChanged" - index: 7 - } - Property { - name: "sunColor" - type: "QColor" - read: "sunColor" - write: "setSunColor" - notify: "sunColorChanged" - index: 8 - } - Property { - name: "sunLatitude" - type: "float" - read: "sunLatitude" - write: "setSunLatitude" - notify: "sunLatitudeChanged" - index: 9 - } - Property { - name: "sunLongitude" - type: "float" - read: "sunLongitude" - write: "setSunLongitude" - notify: "sunLongitudeChanged" - index: 10 - } - Property { - name: "sunAngleMin" - type: "float" - read: "sunAngleMin" - write: "setSunAngleMin" - notify: "sunAngleMinChanged" - index: 11 - } - Property { - name: "sunAngleMax" - type: "float" - read: "sunAngleMax" - write: "setSunAngleMax" - notify: "sunAngleMaxChanged" - index: 12 - } - Property { - name: "sunCurve" - type: "float" - read: "sunCurve" - write: "setSunCurve" - notify: "sunCurveChanged" - index: 13 - } - Property { - name: "sunEnergy" - type: "float" - read: "sunEnergy" - write: "setSunEnergy" - notify: "sunEnergyChanged" - index: 14 - } - Property { - name: "textureQuality" - type: "SkyTextureQuality" - read: "textureQuality" - write: "setTextureQuality" - notify: "textureQualityChanged" - index: 15 - } - Signal { - name: "skyTopColorChanged" - Parameter { name: "skyTopColor"; type: "QColor" } - } - Signal { - name: "skyHorizonColorChanged" - Parameter { name: "skyHorizonColor"; type: "QColor" } - } - Signal { - name: "skyCurveChanged" - Parameter { name: "skyCurve"; type: "float" } - } - Signal { - name: "skyEnergyChanged" - Parameter { name: "skyEnergy"; type: "float" } - } - Signal { - name: "groundBottomColorChanged" - Parameter { name: "groundBottomColor"; type: "QColor" } - } - Signal { - name: "groundHorizonColorChanged" - Parameter { name: "groundHorizonColor"; type: "QColor" } - } - Signal { - name: "groundCurveChanged" - Parameter { name: "groundCurve"; type: "float" } - } - Signal { - name: "groundEnergyChanged" - Parameter { name: "groundEnergy"; type: "float" } - } - Signal { - name: "sunColorChanged" - Parameter { name: "sunColor"; type: "QColor" } - } - Signal { - name: "sunLatitudeChanged" - Parameter { name: "sunLatitude"; type: "float" } - } - Signal { - name: "sunLongitudeChanged" - Parameter { name: "sunLongitude"; type: "float" } - } - Signal { - name: "sunAngleMinChanged" - Parameter { name: "sunAngleMin"; type: "float" } - } - Signal { - name: "sunAngleMaxChanged" - Parameter { name: "sunAngleMax"; type: "float" } - } - Signal { - name: "sunCurveChanged" - Parameter { name: "sunCurve"; type: "float" } - } - Signal { - name: "sunEnergyChanged" - Parameter { name: "sunEnergy"; type: "float" } - } - Signal { - name: "textureQualityChanged" - Parameter { name: "textureQuality"; type: "SkyTextureQuality" } - } - Method { - name: "setSkyTopColor" - Parameter { name: "skyTopColor"; type: "QColor" } - } - Method { - name: "setSkyHorizonColor" - Parameter { name: "skyHorizonColor"; type: "QColor" } - } - Method { - name: "setSkyCurve" - Parameter { name: "skyCurve"; type: "float" } - } - Method { - name: "setSkyEnergy" - Parameter { name: "skyEnergy"; type: "float" } - } - Method { - name: "setGroundBottomColor" - Parameter { name: "groundBottomColor"; type: "QColor" } - } - Method { - name: "setGroundHorizonColor" - Parameter { name: "groundHorizonColor"; type: "QColor" } - } - Method { - name: "setGroundCurve" - Parameter { name: "groundCurve"; type: "float" } - } - Method { - name: "setGroundEnergy" - Parameter { name: "groundEnergy"; type: "float" } - } - Method { - name: "setSunColor" - Parameter { name: "sunColor"; type: "QColor" } - } - Method { - name: "setSunLatitude" - Parameter { name: "sunLatitude"; type: "float" } - } - Method { - name: "setSunLongitude" - Parameter { name: "sunLongitude"; type: "float" } - } - Method { - name: "setSunAngleMin" - Parameter { name: "sunAngleMin"; type: "float" } - } - Method { - name: "setSunAngleMax" - Parameter { name: "sunAngleMax"; type: "float" } - } - Method { - name: "setSunCurve" - Parameter { name: "sunCurve"; type: "float" } - } - Method { - name: "setSunEnergy" - Parameter { name: "sunEnergy"; type: "float" } - } - Method { - name: "setTextureQuality" - Parameter { name: "textureQuality"; type: "SkyTextureQuality" } - } - Method { name: "generateRGBA16FTexture" } - } - Component { - file: "private/infinitegrid_p.h" - name: "QQuick3DInfiniteGrid" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick3D.Helpers/InfiniteGrid 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "visible" - type: "bool" - read: "visible" - write: "setVisible" - notify: "visibleChanged" - index: 0 - } - Property { - name: "gridInterval" - type: "float" - read: "gridInterval" - write: "setGridInterval" - notify: "gridIntervalChanged" - index: 1 - } - Property { - name: "gridAxes" - type: "bool" - read: "gridAxes" - write: "setGridAxes" - notify: "gridAxesChanged" - index: 2 - } - Signal { name: "visibleChanged" } - Signal { name: "gridIntervalChanged" } - Signal { name: "gridAxesChanged" } - } - Component { - file: "private/randominstancing_p.h" - name: "QQuick3DInstanceRange" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D.Helpers/InstanceRange 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "from" - type: "QVariant" - read: "from" - write: "setFrom" - notify: "fromChanged" - index: 0 - } - Property { name: "to"; type: "QVariant"; read: "to"; write: "setTo"; notify: "toChanged"; index: 1 } - Property { - name: "proportional" - type: "bool" - read: "proportional" - write: "setProportional" - notify: "proportionalChanged" - index: 2 - } - Signal { name: "fromChanged" } - Signal { name: "toChanged" } - Signal { name: "proportionalChanged" } - Signal { name: "changed" } - Method { - name: "setFrom" - Parameter { name: "from"; type: "QVariant" } - } - Method { - name: "setTo" - Parameter { name: "to"; type: "QVariant" } - } - Method { - name: "setProportional" - Parameter { name: "proportional"; type: "bool" } - } - } - Component { - file: "private/randominstancing_p.h" - name: "QQuick3DRandomInstancing" - accessSemantics: "reference" - prototype: "QQuick3DInstancing" - exports: [ - "QtQuick3D.Helpers/RandomInstancing 6.2", - "QtQuick3D.Helpers/RandomInstancing 6.3" - ] - exportMetaObjectRevisions: [1538, 1539] - Enum { - name: "ColorModel" - values: ["RGB", "HSV", "HSL"] - } - Property { - name: "instanceCount" - type: "int" - read: "instanceCount" - write: "setInstanceCount" - notify: "instanceCountChanged" - index: 0 - } - Property { - name: "position" - type: "QQuick3DInstanceRange" - isPointer: true - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 1 - } - Property { - name: "scale" - type: "QQuick3DInstanceRange" - isPointer: true - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 2 - } - Property { - name: "rotation" - type: "QQuick3DInstanceRange" - isPointer: true - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 3 - } - Property { - name: "color" - type: "QQuick3DInstanceRange" - isPointer: true - read: "color" - write: "setColor" - notify: "colorChanged" - index: 4 - } - Property { - name: "colorModel" - type: "ColorModel" - read: "colorModel" - write: "setColorModel" - notify: "colorModelChanged" - index: 5 - } - Property { - name: "customData" - type: "QQuick3DInstanceRange" - isPointer: true - read: "customData" - write: "setCustomData" - notify: "customDataChanged" - index: 6 - } - Property { - name: "randomSeed" - type: "int" - read: "randomSeed" - write: "setRandomSeed" - notify: "randomSeedChanged" - index: 7 - } - Signal { name: "instanceCountChanged" } - Signal { name: "randomSeedChanged" } - Signal { name: "positionChanged" } - Signal { name: "scaleChanged" } - Signal { name: "rotationChanged" } - Signal { name: "colorChanged" } - Signal { name: "customDataChanged" } - Signal { name: "colorModelChanged" } - Method { - name: "setInstanceCount" - Parameter { name: "instanceCount"; type: "int" } - } - Method { - name: "setRandomSeed" - Parameter { name: "randomSeed"; type: "int" } - } - Method { - name: "setPosition" - Parameter { name: "position"; type: "QQuick3DInstanceRange"; isPointer: true } - } - Method { - name: "setScale" - Parameter { name: "scale"; type: "QQuick3DInstanceRange"; isPointer: true } - } - Method { - name: "setRotation" - Parameter { name: "rotation"; type: "QQuick3DInstanceRange"; isPointer: true } - } - Method { - name: "setColor" - Parameter { name: "color"; type: "QQuick3DInstanceRange"; isPointer: true } - } - Method { - name: "setCustomData" - Parameter { name: "customData"; type: "QQuick3DInstanceRange"; isPointer: true } - } - Method { - name: "setColorModel" - Parameter { name: "colorModel"; type: "ColorModel" } - } - Method { name: "handleChange" } - } - Component { - file: "private/qquick3dtexturedatafrontend_p.h" - name: "QQuick3DTextureDataFrontend" - accessSemantics: "reference" - prototype: "QQuick3DTextureData" - exports: ["QtQuick3D.Helpers/ProceduralTextureData 6.6"] - exportMetaObjectRevisions: [1542] - Property { - name: "format" - type: "QQuick3DTextureData::Format" - read: "format" - write: "setFormat" - notify: "formatChanged" - index: 0 - } - Property { - name: "width" - type: "int" - read: "width" - write: "setWidth" - notify: "widthChanged" - index: 1 - } - Property { - name: "height" - type: "int" - read: "height" - write: "setHeight" - notify: "heightChanged" - index: 2 - } - Property { - name: "depth" - type: "int" - read: "depth" - write: "setDepth" - notify: "depthChanged" - index: 3 - } - Property { - name: "hasTransparency" - type: "bool" - read: "hasTransparency" - write: "setHasTransparency" - notify: "hasTransparencyChanged" - index: 4 - } - Property { - name: "textureData" - type: "QByteArray" - read: "textureData" - write: "setTextureData" - notify: "textureDataChanged" - index: 5 - } - Signal { name: "formatChanged" } - Signal { name: "depthChanged" } - Signal { name: "hasTransparencyChanged" } - Signal { name: "textureDataChanged" } - Signal { name: "widthChanged" } - Signal { name: "heightChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/qmldir deleted file mode 100644 index 3aec4b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Helpers/qmldir +++ /dev/null @@ -1,22 +0,0 @@ -module QtQuick3D.Helpers -linktarget Qt6::qtquick3dhelpersplugin -optional plugin qtquick3dhelpersplugin -classname QtQuick3DHelpersPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick3D.Helpers.impl auto -depends QtQuick3D auto -prefer :/qt-project.org/imports/QtQuick3D/Helpers/ -AxisHelper 6.0 AxisHelper.qml -AxisHelper 1.0 AxisHelper.qml -DebugView 6.0 DebugView.qml -DebugView 1.0 DebugView.qml -WasdController 6.0 WasdController.qml -WasdController 1.0 WasdController.qml -OrbitCameraController 6.0 OrbitCameraController.qml -OrbitCameraController 1.0 OrbitCameraController.qml -LodManager 6.0 LodManager.qml -LodManager 1.0 LodManager.qml -ExtendedSceneEnvironment 6.0 ExtendedSceneEnvironment.qml -ExtendedSceneEnvironment 1.0 ExtendedSceneEnvironment.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/AboutDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/AboutDialog.qml deleted file mode 100644 index f5d5ba8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/AboutDialog.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls -import QtQuick.Window - -Dialog { - id: root - title: qsTr("About Material Editor") - modal: true - dim: false - focus: true - standardButtons: Dialog.Ok - width: Math.max(implicitWidth, 340) - - ColumnLayout { - spacing: 12 - - Label { - text: qsTr("Material Editor %1").arg(Qt.application.version) - font.bold: true - font.pixelSize: Application.font.pixelSize * 1.1 - Layout.fillWidth: true - } - - Label { - text: qsTr("Copyright (C) 2023 The Qt Company Ltd.") - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/EditorView.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/EditorView.qml deleted file mode 100644 index 2920de5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/EditorView.qml +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick3D.MaterialEditor - -SplitView { - id: editorView - orientation: Qt.Vertical - property alias vertexEditor: vertEdit - property alias fragmentEditor: fragEdit - property alias outputTextItem: outputTextItem - property alias outputView: outputView - property alias vertexTabText: vertexTabText.text - property alias fragmentTabText: fragTabtext.text - property alias infoStack: infoStack - property alias tabBarInfoView: tabBarInfoView - property alias tabButtonShaderOutput: tabButtonShaderOutput - property alias uniformModel: uniformManagerPane.uniformModel - required property MaterialAdapter materialAdapter - - ColumnLayout { - SplitView.preferredHeight: parent.height * .8 - TabBar { - id: tabBarEditors - Layout.fillWidth: true - readonly property string defVertText: qsTr("Vertex") - readonly property string defFragText: qsTr("Fragment") - TabButton { - id: vertexTabText - onTextChanged: { - if (text === "") - text = tabBarEditors.defVertText - } - } - TabButton { - id: fragTabtext - onTextChanged: { - if (text === "") - text = tabBarEditors.defFragText - } - } - TabButton { - id: propertiesTabText - text: qsTr("Material Properties") - } - } - - // Editors - StackLayout { - id: editorStack - currentIndex: tabBarEditors.currentIndex - Layout.fillWidth: true - - ShaderEditor { - id: vertEdit - Layout.fillHeight: true - Layout.fillWidth: true - } - ShaderEditor { - id: fragEdit - Layout.fillHeight: true - Layout.fillWidth: true - } - - MaterialPropertiesPane { - id: propertiesPane - targetMaterial: editorView.materialAdapter - Layout.fillHeight: true - Layout.fillWidth: true - } - } - } - - ColumnLayout { - spacing: 0 - TabBar { - id: tabBarInfoView - Layout.fillWidth: true - TabButton { - id: tabButtonUniforms - text: qsTr("Uniforms") - } - TabButton { - id: tabButtonShaderOutput - text: qsTr("Shader Output") - } - } - - // Uniform, compile output etc. - StackLayout { - id: infoStack - currentIndex: tabBarInfoView.currentIndex -// Layout.preferredHeight: parent.height * .2 - Layout.fillWidth: true - UniformManagerPane { - id: uniformManagerPane - materialAdapter: editorView.materialAdapter - Layout.fillHeight: true - Layout.fillWidth: true - } - Rectangle { - id: outputView - Layout.fillHeight: true - Layout.fillWidth: true - color: palette.base - ScrollView { - anchors.fill: parent - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - ScrollBar.vertical.policy: ScrollBar.AlwaysOn - TextArea { - id: outputTextItem - width: outputView.width - padding: 2 - color: palette.text - wrapMode: Text.WordWrap - readOnly: true - text: " " - } - } - Button { - anchors.right: parent.right - anchors.rightMargin: 25 - anchors.bottom: parent.bottom - anchors.bottomMargin: 5 - text: qsTr("Clear") - onClicked: { - outputTextItem.text = ""; - } - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/FrostedGlass.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/FrostedGlass.qml deleted file mode 100644 index 6452a41..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/FrostedGlass.qml +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick - -Item { - id: root - required property Item backgroundItem - property alias range: glassEffect.range - property alias blur: glassEffect.blur - property alias color: glassEffect.color - property alias backgroundRect: backgroundSourceImage.sourceRect - - ShaderEffectSource { - anchors.fill: parent - id: backgroundSourceImage - sourceRect: Qt.rect(0, 0, width, height) - sourceItem: root.backgroundItem - visible: false - } - - - ShaderEffectSource { - anchors.fill: parent - id: noiseImageSource - sourceRect: Qt.rect(0, 0, width, height) - sourceItem: noiseImage - visible: false - } - - Image { - anchors.fill: parent - id: noiseImage - fillMode: Image.Tile - horizontalAlignment: Image.AlignLeft - verticalAlignment: Image.AlignTop - visible: false - source: "assets/images/noise.png" - } - - ShaderEffect { - id: glassEffect - property variant sourceTex: backgroundSourceImage - property variant noiseTex: noiseImageSource - property real range: 0.25; - property real blur: 0.05; - property color color: "white" - anchors.fill: parent - fragmentShader: "assets/shaders/frostedGlass.frag.qsb" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/MaterialPropertiesPane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/MaterialPropertiesPane.qml deleted file mode 100644 index 11217de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/MaterialPropertiesPane.qml +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick3D -import QtQuick3D.MaterialEditor - -Pane { - id: root - required property MaterialAdapter targetMaterial - - ColumnLayout { - RowLayout { - Label { - text: qsTr("Source Blend") - Layout.fillWidth: true - } - ComboBox { - id: sourceBlendComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.targetMaterial.sourceBlend = currentValue - Component.onCompleted: currentIndex = indexOfValue(root.targetMaterial.sourceBlend) - model: [ - { value: CustomMaterial.NoBlend, text: qsTr("No Blend") }, - { value: CustomMaterial.Zero, text: qsTr("Zero") }, - { value: CustomMaterial.One, text: qsTr("One") }, - { value: CustomMaterial.SrcColor, text: qsTr("Source Color") }, - { value: CustomMaterial.OneMinusSrcColor, text: qsTr("1 - Source Color") }, - { value: CustomMaterial.DstColor, text: qsTr("Destination Color") }, - { value: CustomMaterial.OneMinusDstColor, text: qsTr("1 - Destination Color") }, - { value: CustomMaterial.SrcAlpha, text: qsTr("Source Alpha") }, - { value: CustomMaterial.OneMinusSrcAlpha, text: qsTr("1 - Source Alpha") }, - { value: CustomMaterial.DstAlpha, text: qsTr("Destination Alpha") }, - { value: CustomMaterial.OneMinusDstAlpha, text: qsTr("1 - Destination Alpha") }, - { value: CustomMaterial.ConstantColor, text: qsTr("Constant Color") }, - { value: CustomMaterial.OneMinusConstantColor, text: qsTr("1 - Constant Color") }, - { value: CustomMaterial.ConstantAlpha, text: qsTr("Constant Alpha") }, - { value: CustomMaterial.OneMinusConstantAlpha, text: qsTr("1 - Constant Alpha") }, - { value: CustomMaterial.SrcAlphaSaturate, text: qsTr("Source Alpha Saturate") } - ] - } - } - RowLayout { - Label { - text: qsTr("Destination Blend") - Layout.fillWidth: true - } - ComboBox { - id: destinationBlendComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.targetMaterial.destinationBlend = currentValue - Component.onCompleted: currentIndex = indexOfValue(root.targetMaterial.destinationBlend) - - model: [ - { value: CustomMaterial.NoBlend, text: qsTr("No Blend") }, - { value: CustomMaterial.Zero, text: qsTr("Zero") }, - { value: CustomMaterial.One, text: qsTr("One") }, - { value: CustomMaterial.SrcColor, text: qsTr("Source Color") }, - { value: CustomMaterial.OneMinusSrcColor, text: qsTr("1 - Source Color") }, - { value: CustomMaterial.DstColor, text: qsTr("Destination Color") }, - { value: CustomMaterial.OneMinusDstColor, text: qsTr("1 - Destination Color") }, - { value: CustomMaterial.SrcAlpha, text: qsTr("Source Alpha") }, - { value: CustomMaterial.OneMinusSrcAlpha, text: qsTr("1 - Source Alpha") }, - { value: CustomMaterial.DstAlpha, text: qsTr("Destination Alpha") }, - { value: CustomMaterial.OneMinusDstAlpha, text: qsTr("1 - Destination Alpha") }, - { value: CustomMaterial.ConstantColor, text: qsTr("Constant Color") }, - { value: CustomMaterial.OneMinusConstantColor, text: qsTr("1 - Constant Color") }, - { value: CustomMaterial.ConstantAlpha, text: qsTr("Constant Alpha") }, - { value: CustomMaterial.OneMinusConstantAlpha, text: qsTr("1 - Constant Alpha") }, - { value: CustomMaterial.SrcAlphaSaturate, text: qsTr("Source Alpha Saturate") } - ] - } - } - RowLayout { - Label { - text: qsTr("Cull Mode") - Layout.fillWidth: true - } - ComboBox { - id: cullModeComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.targetMaterial.cullMode = currentValue - Component.onCompleted: currentIndex = indexOfValue(root.targetMaterial.cullMode) - model: [ - { value: CustomMaterial.BackFaceCulling, text: qsTr("Back Face Culling") }, - { value: CustomMaterial.FrontFaceCulling, text: qsTr("Front Face Culling") }, - { value: CustomMaterial.NoCulling, text: qsTr("No Culling") } - ] - } - } - RowLayout { - Label { - text: qsTr("Depth Draw Mode") - Layout.fillWidth: true - } - ComboBox { - id: depthDrawModeComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.targetMaterial.depthDrawMode = currentValue - Component.onCompleted: currentIndex = indexOfValue(root.targetMaterial.depthDrawMode) - model: [ - { value: CustomMaterial.OpaqueOnlyDepthDraw, text: qsTr("Opaque Only") }, - { value: CustomMaterial.AlwaysDepthDraw, text: qsTr("Always") }, - { value: CustomMaterial.NeverDepthDraw, text: qsTr("Never") }, - { value: CustomMaterial.OpaquePrePassDepthDraw, text: qsTr("Opaque Pre-pass") } - ] - } - } - RowLayout { - Label { - text: qsTr("Shading Mode") - Layout.fillWidth: true - } - ComboBox { - id: shadingModeComboBox - textRole: "text" - valueRole: "value" - implicitContentWidthPolicy: ComboBox.WidestText - onActivated: root.targetMaterial.shadingMode = currentValue - Component.onCompleted: currentIndex = indexOfValue(root.targetMaterial.shadingMode) - model: [ - { value: CustomMaterial.Shaded, text: qsTr("Shaded") }, - { value: CustomMaterial.Unshaded, text: qsTr("Unshaded") } - ] - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/Preview.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/Preview.qml deleted file mode 100644 index 2b83377..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/Preview.qml +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Window -import QtCore -import QtQuick3D -import QtQuick3D.Helpers - -Item { - id: previewRoot - - property url skyBoxTexturePath: "assets/skybox/OpenfootageNET_lowerAustria01-1024.hdr" - property CustomMaterial currentMaterial: CustomMaterial { - - } - - property PrincipledMaterial fallbackMaterial: PrincipledMaterial { - baseColor: "magenta" - } - - property alias modelInstance: model - property alias rootNode: resourceRoot - - Settings { - property alias cameraOriginRotation: originNode.rotation - property alias cameraRotation: sceneCamera.rotation - property alias cameraPosition: sceneCamera.position - } - - View3D { - id: view - anchors.fill: parent - environment: SceneEnvironment { - id: sceneEnvironment - backgroundMode: previewControls.enableIBL ? SceneEnvironment.SkyBox : SceneEnvironment.Transparent - lightProbe: previewControls.enableIBL ? skyboxTexture : null - } - - Texture { - id: skyboxTexture - source: previewRoot.skyBoxTexturePath - } - - Node { - id: resourceRoot - } - - property alias cameraOrigin: originNode - - Node { - id: originNode - PerspectiveCamera { - id: sceneCamera - z: 300 - } - } - - camera: sceneCamera - - DirectionalLight { - id: light - z: 600 - eulerRotation: Qt.vector3d(30, 0, 0) - visible: previewControls.enableDirectionalLight - } - - Model { - id: model - source: previewControls.modelSource - materials: [ previewRoot.currentMaterial, previewRoot.fallbackMaterial ] - } - - OrbitCameraController { - id: cameraController - origin: originNode - camera: sceneCamera - panEnabled: false - } - } - - PreviewControls { - id: previewControls - width: parent.width - targetView: view - orbitCamera: cameraController - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/PreviewControls.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/PreviewControls.qml deleted file mode 100644 index f974c1c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/PreviewControls.qml +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Layouts -import QtCore -import QtQuick3D -import QtQuick3D.Helpers - -Item { - id: previewControls - required property View3D targetView - required property OrbitCameraController orbitCamera - property alias modelSource: modelComboBox.currentValue - property alias enableIBL: iblEnableButton.checked - property alias enableDirectionalLight: directionalLightEnabledButton.checked - - - Settings { - property alias enableIbl: previewControls.enableIBL - property alias enableDirectionalLight: previewControls.enableDirectionalLight - property alias environmentOrientationSliderValue: environmentOrientationSlider.value - } - - FrostedGlass { - width: parent.width - height: layout.implicitHeight - backgroundItem: previewControls.targetView - backgroundRect: Qt.rect(0, 0, width, height) -// range: 0.05 -// blur: 0.005 - range: 0.05 - blur: 0.05 - //color: "pink" - } - - RowLayout { - id: layout - anchors.left: parent.left - anchors.leftMargin: 10 - Label { - text: "Model" - } - ComboBox { - id: modelComboBox - textRole: "text" - valueRole: "value" - model: ListModel { - ListElement { - text: "Sphere" - value: "#Sphere" - } - ListElement { - text: "Cube" - value: "#Cube" - } - ListElement { - text: "Plane" - value: "#Rectangle" - } - ListElement { - text: "Suzanne" - value: "assets/meshes/suzanne.mesh" - } - } - } - Button { - text: "Reset View" - onClicked: { - previewControls.orbitCamera.origin.rotation = Qt.quaternion(1, 0, 0, 0) - previewControls.orbitCamera.camera.rotation = Qt.quaternion(1, 0, 0, 0) - previewControls.orbitCamera.camera.position = Qt.vector3d(0, 0, 300) - environmentOrientationSlider.value = 0 - } - } - ToolButton { - id: iblEnableButton - icon.source: "assets/icons/texture.png" - checkable: true - checked: true - hoverEnabled: true - ToolTip.delay: 1000 - ToolTip.timeout: 5000 - ToolTip.visible: hovered - ToolTip.text: qsTr("Toggle the use of IBL") - } - - Label { - visible: previewControls.enableIBL - text: "Environment Orientation" - } - Slider { - visible: previewControls.enableIBL - id: environmentOrientationSlider - Layout.fillWidth: true - from: -180 - to: 180 - value: 0 - onValueChanged: { - previewControls.targetView.environment.probeOrientation = Qt.vector3d(0, value, 0) - } - } - ToolButton { - id: directionalLightEnabledButton - icon.source: "assets/icons/lightdirectional.png" - checkable: true - checked: true - hoverEnabled: true - ToolTip.delay: 1000 - ToolTip.timeout: 5000 - ToolTip.visible: hovered - ToolTip.text: qsTr("Toggle a Directional Light") - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/SaveChangesDialog.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/SaveChangesDialog.qml deleted file mode 100644 index 6e4527a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/SaveChangesDialog.qml +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Controls -import QtQuick3D.MaterialEditor - -Dialog { - id: root - title: qsTr("Unsaved changes") - modal: true - - required property MaterialAdapter materialAdapter - required property var saveAsDialog - - function doIfChangesSavedOrDiscarded(actionFunction) { - if (!materialAdapter.unsavedChanges) { - actionFunction() - return - } - - // There are unsaved changes, so we need to prompt. - - function disconnectSaveChangesSignals() { - root.accepted.disconnect(saveChanges) - root.discarded.disconnect(discardChanges) - root.rejected.disconnect(cancel) - } - - function saveChanges() { - if (materialAdapter.materialSaveFile.toString().length > 0) { - // Existing project; can save without a dialog. - if (materialAdapter.save()) { - // Saved successfully, so now we can perform the action. - performAction() - } else { - // Failed to save; cancel. - cancel() - } - } else { - // New project; need to save as. - function disconnectSaveAsSignals() { - materialAdapter.errorOccurred.disconnect(saveAsFailed) - materialAdapter.postMaterialSaved.disconnect(saveAsSucceeded) - saveAsDialog.rejected.disconnect(saveAsDialogRejected) - } - - function saveAsSucceeded() { - disconnectSaveAsSignals() - performAction() - } - - function saveAsFailed() { - disconnectSaveAsSignals() - disconnectSaveChangesSignals() - } - - function saveAsDialogRejected() { - disconnectSaveAsSignals() - cancel() - } - - materialAdapter.errorOccurred.connect(saveAsFailed) - materialAdapter.postMaterialSaved.connect(saveAsSucceeded) - saveAsDialog.rejected.connect(saveAsDialogRejected) - - saveAsDialog.open() - } - } - - function discardChanges() { - performAction() - root.close() - } - - function performAction() { - disconnectSaveChangesSignals() - actionFunction() - } - - function cancel() { - disconnectSaveChangesSignals() - } - - root.accepted.connect(saveChanges) - root.discarded.connect(discardChanges) - root.rejected.connect(cancel) - root.open() - } - - Label { - text: qsTr("Save changes to the material before closing?") - } - - // Using a DialogButtonBox allows us to assign objectNames to the buttons, - // which makes it possible to test them. - footer: DialogButtonBox { - Button { - objectName: "cancelDialogButton" - text: qsTr("Cancel") - DialogButtonBox.buttonRole: DialogButtonBox.RejectRole - } - Button { - objectName: "saveChangesDialogButton" - text: qsTr("Save") - DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole - } - Button { - objectName: "discardChangesDialogButton" - text: qsTr("Don't save") - DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/ShaderEditor.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/ShaderEditor.qml deleted file mode 100644 index 9247b20..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/ShaderEditor.qml +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Controls -import QtQuick3D.MaterialEditor - -Flickable { - id: flickable - property alias font: textArea.font - property alias text: textArea.text - property alias textDocument: textArea.textDocument - property alias lineColumn: lineNumbers - property alias textArea: textArea - - property int rowHeight: Math.ceil(fontMetrics.lineSpacing) - property int marginsTop: 10 - property int marginsLeft: 4 - property int lineCountWidth: 40 - clip: true - boundsBehavior: Flickable.StopAtBounds - - ScrollBar.vertical: ScrollBar { - width: 15 - active: true - } - ScrollBar.horizontal: ScrollBar { - width: 15 - active: true - } - - FontMetrics { - id: fontMetrics - font: textArea.font - } - - - Column { - id: lineNumbers - anchors.left: parent.left - anchors.leftMargin: flickable.marginsLeft - anchors.topMargin: flickable.marginsTop - y: flickable.marginsTop - width: flickable.lineCountWidth - - function labelAt(lineNr) { - if (lineNr > 0) { - if (lineNr > repeater.count) - lineNr = repeater.count; // Best guess at this point... - return repeater.itemAt(lineNr - 1); - } - - return null; - } - - function range(start, end) { - var rangeArray = new Array(end-start); - for (var i = 0; i < rangeArray.length; i++) - rangeArray[i] = start+i; - return rangeArray; - } - - Repeater { - id: repeater - model: textArea.lineCount - delegate: Label { - required property int index - font: textArea.font - width: parent.width - horizontalAlignment: Text.AlignRight - verticalAlignment: Text.AlignVCenter - height: flickable.rowHeight - renderType: Text.NativeRendering - text: index+1 - } - } - } - Rectangle { - id: lineNumbersSeperator - y: 4 - height: parent.height - anchors.left: lineNumbers.right - anchors.leftMargin: flickable.marginsLeft - width: 1 - color: "#ddd" - } - - SyntaxHighlighter { - id: syntaxHighlighter - document: textArea.textDocument - } - - TextArea.flickable: TextArea { - id: textArea - textFormat: Qt.PlainText - focus: false - selectByMouse: true - leftPadding: flickable.marginsLeft - rightPadding: flickable.marginsLeft - topPadding: flickable.marginsTop - bottomPadding: flickable.marginsTop - tabStopDistance: fontMetrics.averageCharacterWidth * 4; - anchors.left: lineNumbersSeperator.right - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/UniformManagerPane.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/UniformManagerPane.qml deleted file mode 100644 index 9b9b83a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/UniformManagerPane.qml +++ /dev/null @@ -1,737 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick.Dialogs -import QtQuick3D.MaterialEditor - -Pane { - id: uniformManagerPane - property alias uniformModel: uniformModel - required property MaterialAdapter materialAdapter - SplitView { - anchors.fill: parent - ColumnLayout { - clip: true - RowLayout { - id: tableControls - - function insertUniform() { - let rowCount = uniformManagerPane.materialAdapter.uniformModel.rowCount; - if (uniformManagerPane.materialAdapter.uniformModel.insertRow(rowCount, typeComboBox.currentIndex, uniformNameTextInput.text)) - uniformNameTextInput.text = "" - } - - Label { - text: "Type:" - } - - ComboBox { - id: typeComboBox - textRole: "text" - valueRole: "value" - model: [ - { value: UniformModel.Bool, text: "bool" }, - { value: UniformModel.Int, text: "int" }, - { value: UniformModel.Float, text: "float" }, - { value: UniformModel.Vec2, text: "vec2" }, - { value: UniformModel.Vec3, text: "vec3" }, - { value: UniformModel.Vec4, text: "vec4" }, - { value: UniformModel.Mat44, text: "mat44" }, - { value: UniformModel.Sampler, text: "sampler" } - ] - } - - TextField { - id: uniformNameTextInput - validator: RegularExpressionValidator { - regularExpression: /[a-zA-Z_][a-zA-Z0-9_]+/ - } - Layout.fillWidth: true - placeholderText: "Uniform Name" - onAccepted: tableControls.insertUniform() - } - Button { - id: addButton - text: "Add" - enabled: uniformNameTextInput.text != "" - onClicked: tableControls.insertUniform() - } - } - - // Column Header - Row { - id: columnsHeader - Layout.fillWidth: true - Label { - width: uniformTable.columnWidth(0) - text: "Type" - verticalAlignment: Text.AlignVCenter - } - Label { - width: uniformTable.columnWidth(1) - text: "Name" - verticalAlignment: Text.AlignVCenter - } - Label { - width: uniformTable.columnWidth(2) - text: "Value" - verticalAlignment: Text.AlignVCenter - } - } - ListView { - id: uniformTable - Layout.fillHeight: true - Layout.fillWidth: true - flickableDirection: Flickable.VerticalFlick - model: UniformModel { - id: uniformModel - } - clip: true - ScrollBar.vertical: ScrollBar { } - highlight: Rectangle { - color: palette.highlight - } - - property var typeStrings: [ - "bool", - "int", - "float", - "vec2", - "vec3", - "vec4", - "mat44", - "sampler" - ] - - function convertValueToString(value, type) - { - if (type === 0) { - // bool - return String(value); - } if (type === 1) { - // int - return String(value); - } if (type === 2) { - // float - return String(value); - } if (type === 3) { - // vec2 - return "(" + value.x + ", " + value.y + ")" - } if (type === 4) { - // vec3 - return "(" + value.x + ", " + value.y + ", " + value.z + ")" - } if (type === 5) { - // vec4 - return "(" + value.x + ", " + value.y + ", " + value.z + ", " + value.w + ")" - } if (type === 6) { - // mat44 - return value.toString() - } if (type === 7) { - // sampler - return "[Texture]" - } - } - - function columnWidth(column) { - if (column === 0) - return 50; - if (column === 1) - return 100; - return 100; - } - - delegate: Item { - id: delegateRoot - required property int type - required property string name - required property var value - required property int index - - - width: ListView.view.width - height: typeLabel.implicitHeight - Row { - Label { - id: typeLabel - width: uniformTable.columnWidth(0) - text: uniformTable.typeStrings[delegateRoot.type] - } - Label { - width: uniformTable.columnWidth(1) - text: delegateRoot.name - } - Label { - width: uniformTable.columnWidth(2) - Layout.fillWidth: true - text: uniformTable.convertValueToString(delegateRoot.value, delegateRoot.type) - } - } - MouseArea { - anchors.fill: parent - onClicked: { - uniformTable.currentIndex = delegateRoot.index - } - } - } - } - } - - - Item { - id: uniformValueEditor - width: parent.width * 0.5 - clip: true - - Label { - id: emptyLabel - visible: uniformTable.currentIndex == -1 - anchors.centerIn: parent - text: "Select a uniform to edit" - } - - Repeater { - id: delegateRepeater - anchors.fill: parent - model: uniformModel - Item { - id: editorRoot - - required property int index - required property int type - required property string name - required property var model - - anchors.fill: parent - anchors.margins: 10 - visible: index === uniformTable.currentIndex - - Item { - id: header - width: parent.width - anchors.top: parent.top - height: removeButton.implicitHeight - RowLayout { - anchors.fill: parent - id: headerLayout - Label { - text: "Uniform: " + editorRoot.name - Layout.fillWidth: true - elide: Text.ElideRight - } - Button { - id: removeButton - text: "Remove" - Layout.alignment: Qt.AlignRight - onClicked: { - uniformManagerPane.materialAdapter.uniformModel.removeRow(uniformTable.currentIndex, 1) - } - } - } - } - - Loader { - id: editorLoader - anchors.top: header.bottom - anchors.right: parent.right - anchors.left: parent.left - anchors.bottom: parent.bottom - sourceComponent: editors[editorRoot.type] - - - readonly property list editors: [ - boolEditor, - intEditor, - floatEditor, - vec2Editor, - vec3Editor, - vec4Editor, - mat44Editor, - samplerEditor - ] - - Component { - id: boolEditor - CheckBox { - text: "value" - checked: editorRoot.model.value - onCheckedChanged: editorRoot.model.value = checked - } - } - - Component { - id: intEditor - TextField { - text: editorRoot.model.value - validator: IntValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = parseInt(text) - } - } - } - - Component { - id: floatEditor - ColumnLayout { - TextField { - Layout.fillWidth: true - text: editorRoot.model.value - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) { - var floatValue = parseFloat(text); - floatSlider.updateMinMax(floatValue); - editorRoot.value = floatValue; - } - } - } - Slider { - id: floatSlider - // Grow slider min & max based on given values - function updateMinMax(newValue) { - if (from > newValue) - from = newValue; - if (to < newValue) - to = newValue; - value = newValue; - } - from: 0.0 - to: 1.0 - onValueChanged: { - editorRoot.model.value = value; - } - Component.onCompleted: { - updateMinMax(editorRoot.model.value); - } - } - } - } - - Component { - id: vec2Editor - ColumnLayout { - RowLayout { - Label { - text: "X:" - } - TextField { - id: xField - text: editorRoot.model.value.x - validator: DoubleValidator { - locale: "C" - } - onEditingFinished: { - if (acceptableInput) - editorRoot.model.value = Qt.vector2d(parseFloat(text), editorRoot.model.value.y) - } - } - } - RowLayout { - Label { - text: "Y:" - } - TextField { - id: yField - text: editorRoot.model.value.y - validator: DoubleValidator { - locale: "C" - } - onEditingFinished: { - if (acceptableInput) - editorRoot.model.value = Qt.vector2d(editorRoot.model.value.x, parseFloat(text)) - } - } - } - } - } - - Component { - id: vec3Editor - ColumnLayout { - RowLayout { - Label { - text: "X:" - } - TextField { - id: xField - text: editorRoot.model.value.x - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector3d(parseFloat(text), editorRoot.model.value.y, editorRoot.model.value.z) - } - } - } - RowLayout { - Label { - text: "Y:" - } - TextField { - id: yField - text: editorRoot.model.value.y - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector3d(editorRoot.model.value.x, parseFloat(text), editorRoot.model.value.z) - } - } - } - RowLayout { - Label { - text: "Z:" - } - TextField { - id: zField - text: editorRoot.model.value.z - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector3d(editorRoot.model.value.x, editorRoot.model.value.y, parseFloat(text)) - } - } - } - } - } - - Component { - id: vec4Editor - ColumnLayout { - RowLayout { - Label { - text: "X:" - } - TextField { - id: xField - text: editorRoot.model.value.x - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector4d(parseFloat(text), editorRoot.model.value.y, editorRoot.model.value.z, editorRoot.model.value.w) - } - } - } - RowLayout { - Label { - text: "Y:" - } - TextField { - id: yField - text: editorRoot.model.value.y - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector4d(editorRoot.model.value.x, parseFloat(text), editorRoot.model.value.z, editorRoot.model.value.w) - } - } - } - RowLayout { - Label { - text: "Z:" - } - TextField { - id: zField - text: editorRoot.model.value.z - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector4d(editorRoot.model.value.x, editorRoot.model.value.y, parseFloat(text), editorRoot.model.value.w) - } - } - } - RowLayout { - Label { - text: "W:" - } - TextField { - id: wField - text: editorRoot.model.value.w - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.vector4d(editorRoot.model.value.x, editorRoot.model.value.y, editorRoot.model.value.z, parseFloat(text)) - } - } - } - } - } - - Component { - id: mat44Editor - ColumnLayout { - RowLayout { - TextField { - text: editorRoot.model.value.m11 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(parseFloat(text), editorRoot.model.value.m12, editorRoot.model.value.m13 , editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m12 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, parseFloat(text), editorRoot.model.value.m13 , editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m13 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, parseFloat(text), editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m14 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, parseFloat(text), - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - } - RowLayout { - TextField { - text: editorRoot.model.value.m21 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - parseFloat(text), editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m22 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, parseFloat(text), editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m23 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, parseFloat(text), editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m24 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, parseFloat(text), - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - } - RowLayout { - TextField { - text: editorRoot.model.value.m31 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - parseFloat(text), editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m32 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, parseFloat(text), editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m33 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, parseFloat(text), editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m34 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, parseFloat(text), - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - } - RowLayout { - TextField { - text: editorRoot.model.value.m41 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - parseFloat(text), editorRoot.model.value.m42, editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m42 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, parseFloat(text), editorRoot.model.value.m43, editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m43 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, parseFloat(text), editorRoot.model.value.m44) - } - } - TextField { - text: editorRoot.model.value.m44 - validator: DoubleValidator { - locale: "C" - } - onEditingFinished:{ - if (acceptableInput) - editorRoot.model.value = Qt.matrix4x4(editorRoot.model.value.m11, editorRoot.model.value.m12, editorRoot.model.value.m13, editorRoot.model.value.m14, - editorRoot.model.value.m21, editorRoot.model.value.m22, editorRoot.model.value.m23, editorRoot.model.value.m24, - editorRoot.model.value.m31, editorRoot.model.value.m32, editorRoot.model.value.m33, editorRoot.model.value.m34, - editorRoot.model.value.m41, editorRoot.model.value.m42, editorRoot.model.value.m43, parseFloat(text)) - } - } - } - } - } - - Component { - id: samplerEditor - ColumnLayout { - Image { - id: previewImage - sourceSize.width: 128 - sourceSize.height: 128 - fillMode: Image.PreserveAspectFit - } - Button { - text: "Choose Image" - onClicked: { - textureSourceDialog.open() - } - } - FileDialog { - id: textureSourceDialog - title: "Open an Image File" - nameFilters: [ uniformManagerPane.materialAdapter.getSupportedImageFormatsFilter()] - onAccepted: { - if (textureSourceDialog.selectedFile !== null) { - editorRoot.model.value = textureSourceDialog.selectedFile - previewImage.source = textureSourceDialog.selectedFile - } - } - } - } - } - } - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/main.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/main.qml deleted file mode 100644 index 6a23c11..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/main.qml +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Layouts -import QtQuick.Dialogs -import QtCore - -import QtQuick3D.MaterialEditor - -ApplicationWindow { - id: window - height: 720 - width: 1024 - visible: true - title: qsTr("Custom Material Editor") - - // Context property (see main.cpp) - property url projectFolder: _qtProjectDir // qmllint disable unqualified - - Settings { - id: settings - property alias windowX: window.x - property alias windowY: window.y - property alias windowWidth: window.width - property alias windowHeight: window.height - property alias windowVisibility: window.visibility - } - - Component.onCompleted: { - mainSplitView.restoreState(settings.value("ui/mainSplitView")) - editorView.restoreState(settings.value("ui/editorView")) - } - Component.onDestruction: { - settings.setValue("ui/mainSplitView", mainSplitView.saveState()) - settings.setValue("ui/editorView", editorView.saveState()) - } - - QtObject { - id: resourceStore - objectName: "QtQuick3DResourceStorePrivate" - } - - FileDialog { - id: openMaterialDialog - title: "Open a Material Project File" - nameFilters: [ "Material Editor Project (*.qmp)"] - currentFolder: window.projectFolder - onAccepted: { - if (openMaterialDialog.selectedFile !== null) - materialAdapter.loadMaterial(openMaterialDialog.selectedFile); - } - } - - FileDialog { - id: saveAsDialog - fileMode: FileDialog.SaveFile - currentFolder: window.projectFolder - nameFilters: [ "Material Editor Project (*.qmp)"] - onAccepted: materialAdapter.saveMaterial(selectedFile) - - } - - - FileDialog { - id: fragmentShaderImportDialog - title: "Fragment Shader to import" - nameFilters: [ "Fragment Shader (*.frag *.fs *.glsl)" ] - currentFolder: window.projectFolder - onAccepted: { - if (fragmentShaderImportDialog.selectedFile !== null) { - materialAdapter.importFragmentShader(fragmentShaderImportDialog.selectedFile) - } - } - } - - FileDialog { - id: vertexShaderImportDialog - title: "Vertex Shader to import" - nameFilters: [ "Vertex Shader (*.vert *.vs *.glsl)" ] - currentFolder: window.projectFolder - onAccepted: { - if (vertexShaderImportDialog.selectedFile !== null) { - materialAdapter.importVertexShader(vertexShaderImportDialog.selectedFile) - } - } - } - - FileDialog { - id: saveCompFileDialog - title: "Choose file" - nameFilters: [ "QML Componen (*.qml)" ] - fileMode: FileDialog.SaveFile - currentFolder: window.projectFolder - onAccepted: { - if (selectedFile !== null) - componentFilePath.text = selectedFile - } - } - - RegularExpressionValidator { - id: nameValidator - regularExpression: /[a-zA-Z0-9_-]*/ - } - - Dialog { - id: exportMaterialDialog - title: "Export material" - anchors.centerIn: parent - - ColumnLayout { - id: exportFiles - anchors.fill: parent - spacing: 1 - RowLayout { - Text { - text: qsTr("Component") - color: palette.text - } - TextField { - id: componentFilePath - readOnly: true - } - Button { - text: qsTr("Choose...") - onClicked: { - saveCompFileDialog.open() - exportMaterialDialog.aboutToHide() - } - } - } - RowLayout { - Text { - text: qsTr("Vertex:") - color: palette.text - } - TextField { - id: vertexFilename - enabled: (editorView.vertexEditor.text !== "") - validator: nameValidator - } - } - RowLayout { - Text { - text: qsTr("Fragment:") - color: palette.text - } - TextField { - id: fragmentFilename - enabled: (editorView.fragmentEditor.text !== "") - validator: nameValidator - } - } - - DialogButtonBox { - Button { - text: qsTr("Export") - enabled: (componentFilePath.text !== "" && (!vertexFilename.enabled || (vertexFilename.enabled && vertexFilename.text !== "")) && (!fragmentFilename.enabled || (fragmentFilename.enabled && fragmentFilename.text !== ""))) - DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole - onClicked: exportMaterialDialog.accept() - } - Button { - text: qsTr("Cancel") - DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole - onClicked: exportMaterialDialog.reject() - } - } - } - - onAccepted: { - materialAdapter.exportQmlComponent(componentFilePath.text, vertexFilename.text, fragmentFilename.text) - } - } - - SaveChangesDialog { - id: saveChangesDialog - materialAdapter: materialAdapter - saveAsDialog: saveAsDialog - anchors.centerIn: parent - } - - AboutDialog { - id: aboutDialog - parent: Overlay.overlay - anchors.centerIn: parent - } - - function saveAction() { - // 1. No file name(s) given (call saveAs) - let materialSaveFileUrl = new URL(materialAdapter.materialSaveFile) - if (materialSaveFileUrl.toString().length > 0) - materialAdapter.save() - else - saveAsAction() - } - function openAction() { - openMaterialDialog.open() - } - function newAction() { - saveChangesDialog.doIfChangesSavedOrDiscarded(() => { materialAdapter.reset() }); - materialAdapter.reset() - } - function saveAsAction() { - saveAsDialog.open() - } - function quitAction() { - Qt.quit() - } - function aboutAction() { - aboutDialog.open() - } - - function importFragmentShader() { - fragmentShaderImportDialog.open() - } - - function importVertexShader() { - vertexShaderImportDialog.open() - } - - function exportMaterial() { - exportMaterialDialog.open() - } - - menuBar: MenuBar { - Menu { - title: qsTr("&File") - Action { text: qsTr("&New..."); onTriggered: window.newAction(); } - Action { text: qsTr("&Open..."); onTriggered: window.openAction(); } - Action { text: qsTr("&Save"); onTriggered: window.saveAction(); } - Action { text: qsTr("Save &As..."); onTriggered: window.saveAsAction(); } - MenuSeparator { } - Menu { - title: qsTr("Import") - Action { text: qsTr("Fragment Shader"); onTriggered: window.importFragmentShader(); } - Action { text: qsTr("Vertex Shader"); onTriggered: window.importVertexShader(); } - } - Action { text: qsTr("Export"); onTriggered: window.exportMaterial(); } - - MenuSeparator { } - Action { text: qsTr("&Quit"); onTriggered: window.quitAction(); } - } - Menu { - title: qsTr("&Help") - Action { text: qsTr("&About"); onTriggered: window.aboutAction(); } - } - } - - SplitView { - id: mainSplitView - anchors.fill: parent - orientation: Qt.Horizontal - EditorView { - id: editorView - vertexTabText: "Vertex Shader" - fragmentTabText: "Fragment Shader" - SplitView.preferredWidth: window.width * 0.5 - SplitView.fillWidth: true - materialAdapter: materialAdapter - } - Preview { - id: preview - implicitWidth: parent.width * 0.5 - currentMaterial: materialAdapter.material - } - } - - function outputLine(lineText) { - // Prepend - editorView.outputTextItem.text = lineText + "\n" + editorView.outputTextItem.text; - } - - function printShaderStatusError(stage, msg) { - let outputString = "" - outputString += msg.filename + " => " + msg.message - if (msg.identifier !== null && msg.identifier !== "") - outputString += " '" + msg.identifier + "'"; - if (msg.line >= 0) - outputString += ", on line: " + msg.line - outputLine(outputString) - } - - MaterialAdapter { - id: materialAdapter - vertexShader: editorView.vertexEditor.text - fragmentShader: editorView.fragmentEditor.text - rootNode: preview.rootNode - uniformModel: editorView.uniformModel - onVertexStatusChanged: { - if (vertexStatus.status !== ShaderConstants.Success) { - editorView.tabBarInfoView.currentIndex = 1 - window.printShaderStatusError(ShaderConstants.Vertex, vertexStatus) - } else if (fragmentStatus.status === ShaderConstants.Success){ - // both work, clear - editorView.outputTextItem.text = ""; - } - } - onFragmentStatusChanged: { - if (fragmentStatus.status !== ShaderConstants.Success) { - editorView.tabBarInfoView.currentIndex = 1 - window.printShaderStatusError(ShaderConstants.Fragment, fragmentStatus) - } else if (vertexStatus.status === ShaderConstants.Success) { - // both work, clear - editorView.outputTextItem.text = ""; - } - } - - onVertexShaderChanged: { - editorView.vertexEditor.text = materialAdapter.vertexShader - } - onFragmentShaderChanged: { - editorView.fragmentEditor.text = materialAdapter.fragmentShader - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/plugins.qmltypes deleted file mode 100644 index 5c28dfd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/plugins.qmltypes +++ /dev/null @@ -1,281 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "materialadapter.h" - name: "MaterialAdapter" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D.MaterialEditor/MaterialAdapter 1.0"] - exportMetaObjectRevisions: [256] - Property { - name: "material" - type: "QQuick3DCustomMaterial" - isPointer: true - read: "material" - notify: "materialChanged" - index: 0 - isReadonly: true - } - Property { - name: "rootNode" - type: "QQuick3DNode" - isPointer: true - read: "rootNode" - write: "setRootNode" - notify: "rootNodeChanged" - index: 1 - } - Property { - name: "fragmentShader" - type: "QString" - read: "fragmentShader" - write: "setFragmentShader" - notify: "fragmentShaderChanged" - index: 2 - } - Property { - name: "vertexShader" - type: "QString" - read: "vertexShader" - write: "setVertexShader" - notify: "vertexShaderChanged" - index: 3 - } - Property { - name: "vertexStatus" - type: "ShaderBuildMessage" - read: "vertexStatus" - notify: "vertexStatusChanged" - index: 4 - isReadonly: true - } - Property { - name: "fragmentStatus" - type: "ShaderBuildMessage" - read: "fragmentStatus" - notify: "fragmentStatusChanged" - index: 5 - isReadonly: true - } - Property { - name: "uniformModel" - type: "UniformModel" - isPointer: true - read: "uniformModel" - write: "setUniformModel" - notify: "uniformModelChanged" - index: 6 - } - Property { - name: "unsavedChanges" - type: "bool" - read: "unsavedChanges" - write: "setUnsavedChanges" - notify: "unsavedChangesChanged" - index: 7 - } - Property { - name: "materialSaveFile" - type: "QUrl" - read: "materialSaveFile" - write: "setMaterialSaveFile" - notify: "materialSaveFileChanged" - index: 8 - } - Property { - name: "cullMode" - type: "QQuick3DMaterial::CullMode" - read: "cullMode" - write: "setCullMode" - notify: "cullModeChanged" - index: 9 - } - Property { - name: "depthDrawMode" - type: "QQuick3DMaterial::DepthDrawMode" - read: "depthDrawMode" - write: "setDepthDrawMode" - notify: "depthDrawModeChanged" - index: 10 - } - Property { - name: "shadingMode" - type: "QQuick3DCustomMaterial::ShadingMode" - read: "shadingMode" - write: "setShadingMode" - notify: "shadingModeChanged" - index: 11 - } - Property { - name: "sourceBlend" - type: "QQuick3DCustomMaterial::BlendMode" - read: "srcBlend" - write: "setSrcBlend" - notify: "srcBlendChanged" - index: 12 - } - Property { - name: "destinationBlend" - type: "QQuick3DCustomMaterial::BlendMode" - read: "dstBlend" - write: "setDstBlend" - notify: "dstBlendChanged" - index: 13 - } - Signal { name: "materialChanged" } - Signal { name: "fragmentShaderChanged" } - Signal { name: "vertexShaderChanged" } - Signal { name: "vertexStatusChanged" } - Signal { name: "uniformModelChanged" } - Signal { name: "fragmentStatusChanged" } - Signal { name: "unsavedChangesChanged" } - Signal { name: "materialSaveFileChanged" } - Signal { name: "errorOccurred" } - Signal { name: "postMaterialSaved" } - Signal { name: "rootNodeChanged" } - Signal { name: "cullModeChanged" } - Signal { name: "depthDrawModeChanged" } - Signal { name: "shadingModeChanged" } - Signal { name: "srcBlendChanged" } - Signal { name: "dstBlendChanged" } - Method { - name: "importFragmentShader" - Parameter { name: "shaderFile"; type: "QUrl" } - } - Method { - name: "importVertexShader" - Parameter { name: "shaderFile"; type: "QUrl" } - } - Method { name: "save"; type: "bool" } - Method { - name: "saveMaterial" - type: "bool" - Parameter { name: "materialFile"; type: "QUrl" } - } - Method { - name: "loadMaterial" - type: "bool" - Parameter { name: "materialFile"; type: "QUrl" } - } - Method { - name: "exportQmlComponent" - type: "bool" - Parameter { name: "componentFile"; type: "QUrl" } - Parameter { name: "vertName"; type: "QString" } - Parameter { name: "fragName"; type: "QString" } - } - Method { name: "reset" } - Method { name: "getSupportedImageFormatsFilter"; type: "QString" } - } - Component { - file: "qsyntaxhighlighter.h" - name: "QSyntaxHighlighter" - accessSemantics: "reference" - prototype: "QObject" - Method { name: "rehighlight" } - Method { - name: "rehighlightBlock" - Parameter { name: "block"; type: "QTextBlock" } - } - Method { - name: "_q_reformatBlocks" - Parameter { name: "from"; type: "int" } - Parameter { name: "charsRemoved"; type: "int" } - Parameter { name: "charsAdded"; type: "int" } - } - Method { name: "_q_delayedRehighlight" } - } - Component { - file: "buildmessage.h" - name: "ShaderBuildMessage" - accessSemantics: "value" - exports: ["QtQuick3D.MaterialEditor/shaderStatus 1.0"] - isCreatable: false - exportMetaObjectRevisions: [256] - Enum { - name: "Status" - values: ["Success", "Error"] - } - Enum { - name: "Stage" - values: ["Vertex", "Fragment"] - } - Property { name: "filename"; type: "QString"; read: "filename"; index: 0; isReadonly: true } - Property { name: "message"; type: "QString"; read: "message"; index: 1; isReadonly: true } - Property { name: "identifier"; type: "QString"; read: "identifier"; index: 2; isReadonly: true } - Property { name: "line"; type: "qlonglong"; read: "line"; index: 3; isReadonly: true } - Property { name: "status"; type: "Status"; read: "status"; index: 4; isReadonly: true } - Property { name: "stage"; type: "Stage"; read: "stage"; index: 5; isReadonly: true } - } - Component { - file: "buildmessage.h" - name: "ShaderBuildMessageDerived" - accessSemantics: "none" - prototype: "ShaderBuildMessage" - exports: ["QtQuick3D.MaterialEditor/ShaderConstants 1.0"] - isCreatable: false - exportMetaObjectRevisions: [256] - } - Component { - file: "syntaxhighlighter.h" - name: "SyntaxHighlighter" - accessSemantics: "reference" - prototype: "QSyntaxHighlighter" - exports: ["QtQuick3D.MaterialEditor/SyntaxHighlighter 1.0"] - exportMetaObjectRevisions: [256] - Property { - name: "document" - type: "QQuickTextDocument" - isPointer: true - read: "document" - write: "setDocument" - notify: "documentChanged" - index: 0 - } - Signal { name: "documentChanged" } - } - Component { - file: "uniformmodel.h" - name: "UniformModel" - accessSemantics: "reference" - prototype: "QAbstractListModel" - exports: ["QtQuick3D.MaterialEditor/UniformModel 1.0"] - exportMetaObjectRevisions: [256] - Enum { - name: "UniformType" - values: [ - "Bool", - "Int", - "Float", - "Vec2", - "Vec3", - "Vec4", - "Mat44", - "Sampler" - ] - } - Method { - name: "insertRow" - type: "bool" - Parameter { name: "rowIndex"; type: "int" } - Parameter { name: "type"; type: "int" } - Parameter { name: "id"; type: "QString" } - } - Method { - name: "removeRow" - Parameter { name: "rowIndex"; type: "int" } - Parameter { name: "rows"; type: "int" } - } - Method { - name: "removeRow" - isCloned: true - Parameter { name: "rowIndex"; type: "int" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/qmldir deleted file mode 100644 index c029e3c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/qmldir +++ /dev/null @@ -1,14 +0,0 @@ -module QtQuick3D.MaterialEditor -typeinfo plugins.qmltypes -import QtQuick3D -prefer :/qt-project.org/imports/QtQuick3D/MaterialEditor/ -ShaderEditor 1.0 ShaderEditor.qml -EditorView 1.0 EditorView.qml -Preview 1.0 Preview.qml -PreviewControls 1.0 PreviewControls.qml -FrostedGlass 1.0 FrostedGlass.qml -AboutDialog 1.0 AboutDialog.qml -MaterialPropertiesPane 1.0 MaterialPropertiesPane.qml -SaveChangesDialog 1.0 SaveChangesDialog.qml -UniformManagerPane 1.0 UniformManagerPane.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/Quick3DParticleEffects.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/Quick3DParticleEffects.qmltypes deleted file mode 100644 index 91181ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/Quick3DParticleEffects.qmltypes +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module {} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table.png deleted file mode 100644 index ecac519..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table2.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table2.png deleted file mode 100644 index 6b12c06..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/droplet.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/droplet.png deleted file mode 100644 index 414ad02..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/droplet.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy.png deleted file mode 100644 index a3b6c7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy16.png deleted file mode 100644 index de8906a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy@2x.png deleted file mode 100644 index 7ca04a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/rain.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/rain.png deleted file mode 100644 index e99b15d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/rain.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/ripple.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/ripple.png deleted file mode 100644 index 94e6ab8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/ripple.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke2.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke2.png deleted file mode 100644 index 126ab92..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite.png deleted file mode 100644 index 033f9ec..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite2.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite2.png deleted file mode 100644 index e6c0fe1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/snowflake.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/snowflake.png deleted file mode 100644 index ff3f798..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/snowflake.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/sphere.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/sphere.png deleted file mode 100644 index 3ed902d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/sphere.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/splash7.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/splash7.png deleted file mode 100644 index ded60be..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/splash7.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo deleted file mode 100644 index d9bc305..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo +++ /dev/null @@ -1,246 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Clouds" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_clouds.qml" } - ExtraFile { source: "images/smoke_sprite2.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Dust" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_dust.qml" } - ExtraFile { source: "images/sphere.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Exhaust" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_exhaust.qml" } - ExtraFile { source: "images/smoke2.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Fire" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_fire.qml" } - ExtraFile { source: "images/smoke_sprite.png" } - ExtraFile { source: "images/sphere.png" } - ExtraFile { source: "images/color_table.png" } - ExtraFile { source: "images/color_table2.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Heavy Rain" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_heavyrain.qml" } - ExtraFile { source: "images/rain.png" } - ExtraFile { source: "images/sphere.png" } - ExtraFile { source: "images/ripple.png" } - ExtraFile { source: "images/splash7.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Heavy Rain - Tire Spray" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_heavyrain_tirespray.qml" } - ExtraFile { source: "images/smoke2.png" } - } - } - - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Light Rain" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_lightrain.qml" } - ExtraFile { source: "images/rain.png" } - ExtraFile { source: "images/splash7.png" } - } - } - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Light Rain - Tire Spray" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_lightrain_tirespray.qml" } - ExtraFile { source: "images/smoke2.png" } - } - } - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Rain Mist" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_rainmist.qml" } - ExtraFile { source: "images/smoke2.png" } - } - } - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Snow" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_snow.qml" } - ExtraFile { source: "images/snowflake.png" } - } - } - Type { - name: "QtQuick3D.Particle3D.ParticleSystem3D" - icon: "images/dummy16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Steam" - category: "Qt Quick 3D Particle Effects" - libraryIcon: "images/dummy.png" - version: "6.2" - requiredImport: "QtQuick3D.ParticleEffects" - QmlSource { source: "./source/particleeffect_steam.qml" } - ExtraFile { source: "images/smoke2.png" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_clouds.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_clouds.qml deleted file mode 100644 index be8f3a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_clouds.qml +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: cloudSystem - ParticleEmitter3D { - id: baseCloudEmitter - emitRate: 0 - lifeSpan: 200000 - particle: cloudParticle - particleScale: 35 - particleScaleVariation: 10 - emitBursts: cloudBaseBurst - velocity: cloudDirection - shape: cloudShape - depthBias: -20 - SpriteParticle3D { - id: cloudParticle - color: "#bcffffff" - particleScale: 12 - fadeInEffect: Particle3D.FadeScale - fadeInDuration: 0 - fadeOutDuration: 0 - blendMode: SpriteParticle3D.SourceOver - sprite: cloudTexture - spriteSequence: cloudSequence - billboard: true - maxAmount: 50 - sortMode: Particle3D.SortNewest - Texture { - id: cloudTexture - source: "smoke_sprite2.png" - } - SpriteSequence3D { - id: cloudSequence - animationDirection: SpriteSequence3D.Alternate - durationVariation: 3000 - interpolate: true - randomStart: true - frameCount: 15 - duration: 50000 - } - } - - ParticleShape3D { - id: cloudShape - type: ParticleShape3D.Sphere - fill: false - extents.z: 250 - extents.y: 100 - extents.x: 250 - } - - DynamicBurst3D { - id: cloudBaseBurst - amount: 10 - } - } - - ParticleEmitter3D { - id: smallCloudEmitter - lifeSpan: 2000000 - emitRate: 0 - particle: cloudSmallParticle - particleScale: 18 - particleScaleVariation: 7 - velocity: cloudDirection - shape: cloudOuterShape - emitBursts: cloudSmallBurst - depthBias: -25 - SpriteParticle3D { - id: cloudSmallParticle - color: "#65ffffff" - maxAmount: 75 - particleScale: 12 - fadeOutDuration: 0 - fadeInDuration: 0 - fadeInEffect: Particle3D.FadeScale - blendMode: SpriteParticle3D.SourceOver - sortMode: Particle3D.SortNewest - spriteSequence: cloudSequence - sprite: cloudTexture - billboard: true - } - - ParticleShape3D { - id: cloudOuterShape - extents.x: 350 - extents.y: 150 - extents.z: 350 - fill: true - type: ParticleShape3D.Sphere - } - - DynamicBurst3D { - id: cloudSmallBurst - amount: 15 - } - } - VectorDirection3D { - id: cloudDirection - direction.y: 0 - direction.z: -20 - } - Wander3D { - id: cloudWander - uniqueAmountVariation: 0.3 - uniqueAmount.x: 15 - uniqueAmount.y: 15 - uniqueAmount.z: 15 - uniquePace.x: 0.01 - uniquePace.y: 0.01 - uniquePace.z: 0.01 - particles: [cloudParticle, cloudSmallParticle, smallCloudEmitter] - system: cloudSystem - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_dust.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_dust.qml deleted file mode 100644 index 25cbf80..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_dust.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: dust - y: 100 - ParticleEmitter3D { - id: dustEmitter - emitRate: 20 - particle: dustParticle - particleScaleVariation: 0.25 - particleScale: 0.75 - lifeSpan: 10000 - lifeSpanVariation: 100 - velocity: dustDirection - shape: dustShape - SpriteParticle3D { - id: dustParticle - color: "#6ed0d0d0" - sprite: dustTexture - billboard: true - maxAmount: 500 - fadeInDuration: 1500 - fadeOutDuration: 1500 - VectorDirection3D { - id: dustDirection - direction.y: 2 - direction.z: 0 - directionVariation.x: 2 - directionVariation.y: 2 - directionVariation.z: 2 - } - - Texture { - id: dustTexture - source: "sphere.png" - } - } - } - - ParticleShape3D { - id: dustShape - extents.x: 500 - extents.y: 200 - extents.z: 500 - } - - Wander3D { - id: dustWander - system: dust - particles: dustParticle - uniquePaceVariation: 0.5 - uniqueAmountVariation: 0.5 - uniquePace.x: 0.05 - uniquePace.z: 0.05 - uniquePace.y: 0.05 - uniqueAmount.x: 10 - uniqueAmount.z: 10 - uniqueAmount.y: 10 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_exhaust.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_exhaust.qml deleted file mode 100644 index 10ce699..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_exhaust.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: exhaust - ParticleEmitter3D { - id: exhaustEmitter - emitRate: 35 - lifeSpan: 300 - particle: exhaustParticle - particleScale: 8 - particleScaleVariation: 3 - lifeSpanVariation: 100 - velocity: exhaustDirection - depthBias: -20 - SpriteParticle3D { - id: exhaustParticle - color: "#fdfeff" - maxAmount: 100 - particleScale: 12 - fadeOutDuration: 150 - fadeInDuration: 150 - fadeInEffect: Particle3D.FadeScale - blendMode: SpriteParticle3D.SourceOver - sortMode: Particle3D.SortNewest - spriteSequence: exhaustSequence - sprite: exhaustTexture - billboard: true - Texture { - id: exhaustTexture - source: "smoke2.png" - } - - SpriteSequence3D { - id: exhaustSequence - frameCount: 15 - duration: 2000 - } - - Wander3D { - id: exhaustWander - fadeInDuration: 500 - particles: exhaustParticle - system: exhaust - globalPace.y: 0.3 - globalAmount.y: 50 - uniquePaceVariation: 0.3 - uniqueAmountVariation: 0.3 - uniquePace.x: 0.1 - uniquePace.y: 0.3 - uniquePace.z: 0.25 - uniqueAmount.x: 30 - uniqueAmount.y: 60 - uniqueAmount.z: 50 - } - - VectorDirection3D { - id: exhaustDirection - directionVariation.x: 5 - directionVariation.y: 10 - directionVariation.z: 20 - direction.x: 750 - direction.y: 0 - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_fire.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_fire.qml deleted file mode 100644 index 9086750..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_fire.qml +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - ParticleEmitter3D { - id: smokeEmitter - emitRate: 20 - lifeSpan: 1500 - lifeSpanVariation: 750 - particle: smokeParticle - particleScale: 1 - particleScaleVariation: 4 - particleEndScale: 25 - velocity: smokeDirection - - VectorDirection3D { - id: smokeDirection - directionVariation.x: 10 - directionVariation.y: 10 - directionVariation.z: 10 - direction.y: 75 - } - - SpriteParticle3D { - id: smokeParticle - color: "#ffffff" - maxAmount: 400 - particleScale: 5 - fadeInDuration: 3500 - fadeOutDuration: 1250 - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.SourceOver - billboard: true - sprite: smokeTexture - spriteSequence: spriteSequence - - Texture { - id: smokeTexture - source: "smoke_sprite.png" - } - - SpriteSequence3D { - id: spriteSequence - duration: 6000 - frameCount: 15 - } - } - } - - ParticleEmitter3D { - id: sparkEmitter - emitRate: 10 - lifeSpan: 800 - lifeSpanVariation: 600 - particle: sparkParticle - particleScaleVariation: 1 - velocity: sparkDirection - depthBias: -100 - - VectorDirection3D { - id: sparkDirection - directionVariation.x: 25 - directionVariation.y: 10 - directionVariation.z: 25 - direction.y: 60 - } - - SpriteParticle3D { - id: sparkParticle - color: "#ffffff" - maxAmount: 100 - particleScale: 1 - fadeOutEffect: Particle3D.FadeScale - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.Screen - billboard: true - sprite: sphereTexture - colorTable: colorTable - - Texture { - id: sphereTexture - source: "sphere.png" - } - - Texture { - id: colorTable - source: "colorTable.png" - } - } - } - - ParticleEmitter3D { - id: fireEmitter - emitRate: 90 - lifeSpan: 750 - lifeSpanVariation: 100 - particle: fireParticle - particleScale: 3 - particleScaleVariation: 2 - velocity: fireDirection - depthBias: -100 - - VectorDirection3D { - id: fireDirection - directionVariation.x: 10 - directionVariation.z: 10 - direction.y: 75 - } - - SpriteParticle3D { - id: fireParticle - maxAmount: 500 - color: "#ffffff" - colorTable: colorTable2 - sprite: sphereTexture - sortMode: Particle3D.SortNewest - fadeInEffect: Particle3D.FadeScale - fadeOutEffect: Particle3D.FadeOpacity - blendMode: SpriteParticle3D.Screen - billboard: true - - Texture { - id: colorTable2 - source: "color_table2.png" - } - - } - } - - Gravity3D { - id: sparkGravity - magnitude: 100 - particles: sparkParticle - enabled: true - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain.qml deleted file mode 100644 index 536cb96..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain.qml +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: heavyRain - y: 2000 - ParticleEmitter3D { - id: heavyRainEmitter - emitRate: 50 - lifeSpan: 500 - shape: heavyRainShape - particle: heavyRainParticle - particleScale: 0.75 - particleScaleVariation: 0.25 - velocity: heavyRainDirection - depthBias: -200 - - VectorDirection3D { - id: heavyRainDirection - direction.y: -(heavyRain.y * 2) - } - - SpriteParticle3D { - id: heavyRainParticle - color: "#73e6f4ff" - maxAmount: 100 - particleScale: 100 - fadeInDuration: 0 - fadeOutDuration: 10 - fadeOutEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortDistance - sprite: heavyRainTexture - spriteSequence: heavyRainSequence - offsetY: heavyRainParticle.particleScale / 2 - billboard: true - - Texture { - id: heavyRainTexture - source: "rain.png" - } - - SpriteSequence3D { - id: heavyRainSequence - duration: 15 - randomStart: true - animationDirection: SpriteSequence3D.Normal - frameCount: 3 - interpolate: true - } - } - } - - ParticleShape3D { - id: heavyRainShape - extents.x: 500 - extents.y: 0.01 - extents.z: 500 - type: ParticleShape3D.Cube - fill: true - } - - TrailEmitter3D { - id: heavyRainDropletEmitter - emitRate: 0 - lifeSpan: 500 - particle: heavyRainDropletParticle - particleScaleVariation: 0.2 - follow: heavyRainParticle - emitBursts: heavyRainDropletBurst - velocity: heavyRainDropletDirection - depthBias: -8 - - SpriteParticle3D { - id: heavyRainDropletParticle - color: "#5ea6e2ff" - maxAmount: 300 - sprite: heavyRainDropletTexture - particleScale: 3 - sortMode: Particle3D.SortDistance - fadeInEffect: Particle3D.FadeScale - fadeOutEffect: Particle3D.FadeScale - fadeOutDuration: 200 - fadeInDuration: 100 - billboard: true - - Texture { - id: heavyRainDropletTexture - source: "sphere.png" - } - } - - DynamicBurst3D { - id: heavyRainDropletBurst - triggerMode: DynamicBurst3D.TriggerEnd - amount: 1 - amountVariation: 1 - } - - VectorDirection3D { - id: heavyRainDropletDirection - direction.x: 0 - direction.y: 120 - direction.z: 0 - directionVariation.x: 150 - directionVariation.y: 100 - directionVariation.z: 150 - } - } - - Gravity3D { - id: heavyRainDropletGravity - particles: heavyRainDropletParticle - magnitude: 800 - } - - TrailEmitter3D { - id: heavyRainPoolEmitter - lifeSpan: 800 - emitRate: 0 - particle: heavyRainPoolParticle - particleScale: 25 - particleRotation.x: -90 - follow: heavyRainParticle - emitBursts: heavyRainPoolBurst - depthBias: -10 - - SpriteParticle3D { - id: heavyRainPoolParticle - color: "#11ecf9ff" - maxAmount: 300 - sprite: heavyRainPoolTexture - fadeOutEffect: Particle3D.FadeOpacity - fadeInEffect: Particle3D.FadeScale - fadeOutDuration: 800 - fadeInDuration: 150 - Texture { - id: heavyRainPoolTexture - source: "ripple.png" - } - } - - DynamicBurst3D { - id: heavyRainPoolBurst - triggerMode: DynamicBurst3D.TriggerEnd - amount: 1 - } - } - - TrailEmitter3D { - id: heavyRainSplashEmitter - emitRate: 0 - lifeSpan: 800 - particle: heavyRainSplashParticle - particleScale: 15 - particleScaleVariation: 15 - particleRotation.x: 0 - follow: heavyRainParticle - emitBursts: heavyRainSplashBurst - depthBias: -10 - - SpriteParticle3D { - id: heavyRainSplashParticle - color: "#94c0e7fb" - billboard: true - sprite: heavyRainSplashTexture - spriteSequence: heavyRainSplashSequence - sortMode: Particle3D.SortDistance - fadeOutEffect: Particle3D.FadeOpacity - fadeInEffect: Particle3D.FadeScale - fadeOutDuration: 800 - fadeInDuration: 450 - offsetY: particleScale / 2 - Texture { - id: heavyRainSplashTexture - source: "splash7.png" - } - - SpriteSequence3D { - id: heavyRainSplashSequence - duration: 800 - frameCount: 6 - } - maxAmount: 1500 - } - - DynamicBurst3D { - id: heavyRainSplashBurst - triggerMode: DynamicBurst3D.TriggerEnd - amount: 1 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain_tirespray.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain_tirespray.qml deleted file mode 100644 index f117506..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain_tirespray.qml +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: heavyRainTireSpray - ParticleEmitter3D { - id: heavyRainTireMistEmitter - emitRate: 45 - lifeSpan: 800 - lifeSpanVariation: 300 - particle: heavyRainTireMistParticle - particleScale: 5 - particleEndScale: 25 - particleScaleVariation: 5 - shape: heavyRainTireMistShape - velocity: heavyRainTireMistDirection - depthBias: -20 - - SpriteParticle3D { - id: heavyRainTireMistParticle - color: "#c5e3eaf2" - maxAmount: 100 - particleScale: 12 - fadeInDuration: 200 - fadeOutDuration: 350 - sprite: heavyRainTireSprayTexture - spriteSequence: heavyRainTireSpraySequence - sortMode: Particle3D.SortNewest - fadeInEffect: Particle3D.FadeOpacity - blendMode: SpriteParticle3D.SourceOver - billboard: true - - Wander3D { - id: heavyRainTireMistWander - enabled: true - fadeOutDuration: 500 - fadeInDuration: 300 - uniquePaceVariation: 1 - uniqueAmountVariation: 1 - uniquePace.y: 0.03 - uniqueAmount.y: 20 - particles: heavyRainTireMistParticle - system: heavyRainTireSpray - } - - VectorDirection3D { - id: heavyRainTireMistDirection - directionVariation.x: 100 - directionVariation.y: 10 - direction.y: 10 - directionVariation.z: 250 - } - } - - ParticleShape3D { - id: heavyRainTireMistShape - fill: true - extents.x: 1 - extents.z: 20 - extents.y: 15 - } - } - - ParticleEmitter3D { - id: heavyRainTireStreamLeft - emitRate: 20 - particle: heavyRainTireStreamLeftParticle - particleScale: 15 - particleEndScale: 75 - particleRotation.x: 90 - particleScaleVariation: 5 - velocity: heavyRainTireStreamLeftDirection - lifeSpanVariation: 100 - lifeSpan: 750 - depthBias: -15 - - SpriteParticle3D { - id: heavyRainTireStreamLeftParticle - color: "#cdacb1b8" - maxAmount: 1000 - fadeInDuration: 350 - fadeOutDuration: 200 - billboard: false - sprite: heavyRainTireSprayTexture - spriteSequence: heavyRainTireSpraySequence - blendMode: SpriteParticle3D.Screen - fadeInEffect: Particle3D.FadeScale - sortMode: Particle3D.SortNewest - } - - VectorDirection3D { - id: heavyRainTireStreamLeftDirection - direction.x: -200 - direction.y: 0 - direction.z: 175 - directionVariation.z: 25 - } - } - - ParticleEmitter3D { - id: heavyRainTireStreamRight - depthBias: -15 - enabled: true - particleRotation.x: 90 - particleScaleVariation: 5 - velocity: heavyRainTireStreamRightDirection - lifeSpanVariation: 100 - particleEndScale: 75 - lifeSpan: 750 - emitRate: 20 - particleScale: 15 - particle: heavyRainTireStreamRightParticle - - SpriteParticle3D { - id: heavyRainTireStreamRightParticle - color: "#cdacb1b8" - fadeOutDuration: 200 - fadeInEffect: Particle3D.FadeScale - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.Screen - spriteSequence: heavyRainTireSpraySequence - maxAmount: 1000 - billboard: false - fadeInDuration: 350 - sprite: heavyRainTireSprayTexture - } - - VectorDirection3D { - id: heavyRainTireStreamRightDirection - direction.y: 0 - directionVariation.z: 25 - direction.x: -200 - direction.z: -175 - } - } - - ParticleEmitter3D { - id: heavyRainTireStreamMiddle - x: 50.704 - emitRate: 20 - particleEndScale: 7 - particle: heavyRainTireStreamMiddleParticle - particleScale: 5 - particleScaleVariation: 1 - lifeSpan: 450 - lifeSpanVariation: 50 - velocity: heavyRainTireStreamMiddleDirection - depthBias: -20 - - SpriteParticle3D { - id: heavyRainTireStreamMiddleParticle - color: "#f6f9ff" - fadeOutEffect: Particle3D.FadeOpacity - fadeOutDuration: 300 - fadeInEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.Screen - spriteSequence: heavyRainTireSpraySequence - maxAmount: 1000 - billboard: false - particleScale: 12 - fadeInDuration: 300 - sprite: heavyRainTireSprayTexture - - SpriteSequence3D { - id: heavyRainTireSpraySequence - duration: 2000 - frameCount: 15 - } - - VectorDirection3D { - id: heavyRainTireStreamMiddleDirection - direction.y: 60 - directionVariation.z: 20 - directionVariation.y: 10 - } - } - } - Texture { - id: heavyRainTireSprayTexture - source: "smoke2.png" - } - - Gravity3D { - id: heavyRainTireSprayGravity - magnitude: 1500 - system: heavyRainTireSpray - direction.x: 1 - direction.y: 0 - direction.z: 0 - particles: [heavyRainTireMistParticle, heavyRainTireStreamLeftParticle, heavyRainTireStreamRightParticle, heavyRainTireStreamMiddleParticle] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain.qml deleted file mode 100644 index b977798..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain.qml +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: lightRain - y: 2000 - ParticleEmitter3D { - id: lightRainEmitter - emitRate: 50 - lifeSpan: 500 - particle: lightRainParticle - particleScale: 0.75 - particleScaleVariation: 0.25 - velocity: lightRainDirection - shape: lightRainShape - depthBias: -200 - - VectorDirection3D { - id: lightRainDirection - direction.y: -(lightRain.y * 2) - } - - SpriteParticle3D { - id: lightRainParticle - color: "#90e6f4ff" - maxAmount: 100 - particleScale: 85 - fadeInDuration: 0 - fadeOutDuration: 10 - fadeOutEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortDistance - sprite: lightRainTexture - offsetY: particleScale / 2 - billboard: true - - Texture { - id: lightRainTexture - source: "rain.png" - } - - SpriteSequence3D { - id: lightRainSequence - duration: 15 - randomStart: true - animationDirection: SpriteSequence3D.Normal - frameCount: 3 - interpolate: true - } - } - } - - ParticleShape3D { - id: lightRainShape - extents.x: 500 - extents.y: 0.01 - extents.z: 500 - type: ParticleShape3D.Cube - fill: true - } - - TrailEmitter3D { - id: lightRainSplashEmitter - emitRate: 0 - lifeSpan: 800 - particle: lightRainSplashParticle - particleScale: 15 - particleScaleVariation: 15 - follow: lightRainParticle - emitBursts: lightRainSplashBurst - depthBias: -10 - - SpriteParticle3D { - id: lightRainSplashParticle - color: "#8bc0e7fb" - maxAmount: 250 - sprite: lightRainSplashTexture - spriteSequence: lightRainSplashSequence - fadeInDuration: 450 - fadeOutDuration: 800 - fadeInEffect: Particle3D.FadeScale - fadeOutEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortDistance - billboard: true - offsetY: particleScale / 2 - - Texture { - id: lightRainSplashTexture - source: "splash7.png" - } - - SpriteSequence3D { - id: lightRainSplashSequence - duration: 800 - frameCount: 6 - } - } - - DynamicBurst3D { - id: lightRainSplashBurst - amount: 1 - triggerMode: DynamicBurst3D.TriggerEnd - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain_tirespray.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain_tirespray.qml deleted file mode 100644 index 93169c5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain_tirespray.qml +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: lightRainTireSpray - ParticleEmitter3D { - id: lightRainTireMistEmitter - emitRate: 15 - lifeSpan: 700 - enabled: true - particle: lightRainTireMistParticle - particleScale: 5 - particleEndScale: 20 - particleScaleVariation: 5 - shape: lightRainTireSprayMistShape - lifeSpanVariation: 300 - velocity: lightRainTireMistDirection - depthBias: -20 - - SpriteParticle3D { - id: lightRainTireMistParticle - color: "#c5e3eaf2" - particleScale: 12 - fadeInDuration: 200 - fadeOutDuration: 350 - fadeInEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.SourceOver - spriteSequence: lightRainTireSpraySequence - sprite: lightRainTireSprayTexture - billboard: true - maxAmount: 1000 - - Wander3D { - id: lightRainTireMistWander - enabled: true - fadeOutDuration: 500 - fadeInDuration: 300 - uniquePaceVariation: 1 - uniqueAmountVariation: 1 - uniquePace.y: 0.03 - uniqueAmount.y: 20 - particles: lightRainTireMistParticle - system: lightRainTireSpray - } - - VectorDirection3D { - id: lightRainTireMistDirection - directionVariation.x: 100 - directionVariation.y: 10 - directionVariation.z: 250 - direction.y: 10 - } - } - - ParticleShape3D { - id: lightRainTireSprayMistShape - fill: true - extents.x: 1 - extents.y: 15 - extents.z: 20 - } - } - - ParticleEmitter3D { - id: lightRainStream - emitRate: 10 - particleEndScale: 7 - particle: lightRainStreamParticle - particleScale: 5 - particleScaleVariation: 1 - lifeSpan: 450 - lifeSpanVariation: 50 - velocity: lightRainStreamDirection - depthBias: -20 - - SpriteParticle3D { - id: lightRainStreamParticle - color: "#f6f9ff" - fadeOutEffect: Particle3D.FadeOpacity - fadeOutDuration: 300 - fadeInEffect: Particle3D.FadeOpacity - sortMode: Particle3D.SortNewest - blendMode: SpriteParticle3D.Screen - spriteSequence: lightRainTireSpraySequence - maxAmount: 1000 - billboard: false - particleScale: 12 - fadeInDuration: 300 - sprite: lightRainTireSprayTexture - - SpriteSequence3D { - id: lightRainTireSpraySequence - duration: 2000 - frameCount: 15 - } - VectorDirection3D { - id: lightRainStreamDirection - direction.y: 60 - directionVariation.y: 10 - directionVariation.z: 20 - } - } - } - - Texture { - id: lightRainTireSprayTexture - source: "smoke2.png" - } - - Gravity3D { - id: lightRainTireSprayGravity - magnitude: 1500 - system: lightRainTireSpray - direction.x: 1 - direction.y: 0 - direction.z: 0 - particles: [lightRainTireMistParticle, lightRainStreamParticle] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_rainmist.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_rainmist.qml deleted file mode 100644 index bf49673..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_rainmist.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: rainMist - ParticleEmitter3D { - id: rainMistEmitter - depthBias: -20 - lifeSpan: 1200 - particleScale: 5 - particle: rainMistParticle - particleEndScale: 20 - lifeSpanVariation: 300 - velocity: rainMistDirection - particleScaleVariation: 5 - emitRate: 30 - - SpriteParticle3D { - id: rainMistParticle - color: "#c5e3eaf2" - maxAmount: 100 - particleScale: 12 - sprite: rainMistTexture - spriteSequence: rainMistSequence - fadeInDuration: 200 - fadeOutDuration: 350 - fadeInEffect: Particle3D.FadeOpacity - blendMode: SpriteParticle3D.SourceOver - sortMode: Particle3D.SortNewest - billboard: true - - Texture { - id: rainMistTexture - source: "smoke2.png" - } - - SpriteSequence3D { - id: rainMistSequence - duration: 2000 - frameCount: 15 - } - - VectorDirection3D { - id: rainMistDirection - direction.x: 500 - direction.y: 0 - directionVariation.x: 100 - directionVariation.y: 2 - directionVariation.z: 100 - } - - Wander3D { - id: rainMistWander - uniqueAmountVariation: 1 - uniquePaceVariation: 1 - fadeInDuration: 500 - uniqueAmount.y: 10 - uniquePace.y: 0.3 - fadeOutDuration: 200 - particles: rainMistParticle - system: rainMist - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_snow.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_snow.qml deleted file mode 100644 index 55a4648..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_snow.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D -ParticleSystem3D { - id: snow - x: 50 - y: 300 - ParticleEmitter3D { - id: snowEmitter - emitRate: 500 - lifeSpan: 4000 - particle: snowParticle - particleScale: 2 - particleScaleVariation: 1 - velocity: snowDirection - shape: snowShape - - VectorDirection3D { - id: snowDirection - direction.y: -100 - direction.z: 0 - } - - SpriteParticle3D { - id: snowParticle - color: "#dcdcdc" - maxAmount: 5000 - particleScale: 1 - sprite: snowTexture - billboard: true - - Texture { - id: snowTexture - source: "snowflake.png" - } - } - } - ParticleShape3D { - id: snowShape - fill: true - extents.x: 400 - extents.y: 1 - extents.z: 400 - type: ParticleShape3D.Cube - } - - Wander3D { - id: wander - globalPace.x: 0.01 - globalAmount.x: -500 - uniqueAmount.x: 50 - uniqueAmount.y: 20 - uniqueAmount.z: 50 - uniqueAmountVariation: 0.1 - uniquePaceVariation: 0.2 - uniquePace.x: 0.03 - uniquePace.z: 0.03 - uniquePace.y: 0.01 - particles: snowParticle - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_steam.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_steam.qml deleted file mode 100644 index ea96751..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_steam.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: steam - ParticleEmitter3D { - id: steamEmitter - emitRate: 10 - lifeSpan: 1500 - lifeSpanVariation: 300 - particle: steamParticle - particleScale: 7.5 - particleEndScale: 12.5 - particleScaleVariation: 2.5 - velocity: steamDirection - depthBias: -100 - - SpriteParticle3D { - id: steamParticle - color: "#c5e3eaf2" - maxAmount: 50 - particleScale: 12 - fadeInDuration: 200 - fadeOutDuration: 350 - sprite: steamTexture - spriteSequence: steamSequence - fadeInEffect: Particle3D.FadeOpacity - blendMode: SpriteParticle3D.SourceOver - sortMode: Particle3D.SortNewest - billboard: true - - Texture { - id: steamTexture - source: "smoke2.png" - } - - SpriteSequence3D { - id: steamSequence - duration: 2000 - frameCount: 15 - } - - VectorDirection3D { - id: steamDirection - direction.y: 150 - directionVariation.x: 50 - directionVariation.y: 10 - directionVariation.z: 50 - } - - Wander3D { - id: steamWander - uniquePace.y: 0.03 - uniqueAmount.y: 20 - uniquePaceVariation: 1 - uniqueAmountVariation: 1 - fadeInDuration: 300 - fadeOutDuration: 500 - particles: steamParticle - system: steam - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/libqtquick3dparticleeffectsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/libqtquick3dparticleeffectsplugin.so deleted file mode 100755 index 886d40b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/libqtquick3dparticleeffectsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/qmldir deleted file mode 100644 index ecfb5a7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/qmldir +++ /dev/null @@ -1,10 +0,0 @@ -module QtQuick3D.ParticleEffects -linktarget Qt6::qtquick3dparticleeffectsplugin -optional plugin qtquick3dparticleeffectsplugin -classname QtQuick3DParticleEffectsPlugin -designersupported -typeinfo Quick3DParticleEffects.qmltypes -depends QtQuick3D auto -depends QtQuick3D.Particles3D auto -prefer :/qt-project.org/imports/QtQuick3D/ParticleEffects/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSection.qml deleted file mode 100644 index ea94805..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSection.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Affector") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("System") - tooltip: qsTr("Sets the ParticleSystem3D for the affector. If system is direct parent of the affector, this property does not need to be defined.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Particles3D.ParticleSystem3D" - backendValue: backendValues.system - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Particles") - tooltip: qsTr("Sets which logical particles will be affected. When empty, all particles in the system are affected.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.particles - model: backendValues.particles.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Particles3D.Particle3D" - - onAdd: function(value) { backendValues.particles.idListAdd(value) } - onRemove: function(idx) { backendValues.particles.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.particles.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("If set to false, this affector will not alter any particles. Usually this is used to conditionally turn an affector on or off.") - } - - SecondColumnLayout { - CheckBox { - id: enabledCheckBox - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSpecifics.qml deleted file mode 100644 index 28cda30..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Affector3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSection.qml deleted file mode 100644 index 534ac95..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSection.qml +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Attractor") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Position Variation") - tooltip: qsTr("Sets the variation on attract position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Shape") - tooltip: qsTr("Sets a ParticleAbstractShape3D for particles attraction.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QQuick3DParticleAbstractShape" - backendValue: backendValues.shape - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration") - tooltip: qsTr("Sets the duration in milliseconds how long it takes for particles to reach the attaction position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.duration - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration Variation") - tooltip: qsTr("Sets the duration variation in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.durationVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Hide At End") - tooltip: qsTr("Sets if the particle should disappear when it reaches the attractor.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.hideAtEnd.valueToString - backendValue: backendValues.hideAtEnd - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Use Cached Positions") - tooltip: qsTr("Sets if the attractor caches possible positions within its shape. Cached positions give less random results but are better for performance.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.useCachedPositions.valueToString - backendValue: backendValues.useCachedPositions - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Positions Amount") - tooltip: qsTr("Sets the amount of possible positions stored within the attractor shape.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.positionsAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSpecifics.qml deleted file mode 100644 index bc7f6a1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Attractor3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSection.qml deleted file mode 100644 index 51f20d5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSection.qml +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Dynamic Burst") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Trigger Mode") - tooltip: qsTr("Sets the triggering mode used for emitting the particles.") - } - - SecondColumnLayout { - ComboBox { - scope: "DynamicBurst3D" - model: ["TriggerTime", "TriggerStart", "TriggerEnd"] - backendValue: backendValues.triggerMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Amount Variation") - tooltip: qsTr("Sets the random variation in particle emit amount.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.amountVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("If set to false, this burst will not emit any particles. Usually this is used to conditionally turn a burst on or off.") - } - - SecondColumnLayout { - CheckBox { - id: enabledCheckBox - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSpecifics.qml deleted file mode 100644 index 81c9042..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DynamicBurst3DSection { - width: parent.width - } - - EmitBurst3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSection.qml deleted file mode 100644 index a80dc6d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSection.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Emit Burst") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Time") - tooltip: qsTr("Sets the time in milliseconds when emitting the burst starts.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.time - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the amount of particles emitted during the burst.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.amount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration") - tooltip: qsTr("Sets the duration of the burst.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.duration - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSpecifics.qml deleted file mode 100644 index 1821302..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - EmitBurst3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSection.qml deleted file mode 100644 index db544f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSection.qml +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import HelperWidgets 2.0 -import QtQuick.Layouts 1.15 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Gravity") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Magnitude") - tooltip: qsTr("Sets the magnitude in position change per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.magnitude - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Direction") - tooltip: qsTr("Sets the direction the gravity will affect toward.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSpecifics.qml deleted file mode 100644 index d356fb6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Gravity3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSection.qml deleted file mode 100644 index 53aca15..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSection.qml +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Line Particle") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Segments") - tooltip: qsTr("Sets the segment count of the line.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.segmentCount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Alpha Fade") - tooltip: qsTr("Sets the line fade amount per segment.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 1.0 - stepSize: 0.01 - decimals: 2 - backendValue: backendValues.alphaFade - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Scale Multiplier") - tooltip: qsTr("Sets the scale multiplier per segment.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 2.0 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.scaleMultiplier - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Texcoord Multiplier") - tooltip: qsTr("Sets the texture coordinate multiplier of the line.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -99999.0 - maximumValue: 99999.0 - decimals: 2 - backendValue: backendValues.texcoordMultiplier - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Texcoord Mode") - tooltip: qsTr("Sets the texture coordinate mode of the line.") - } - - SecondColumnLayout { - ComboBox { - scope: "LineParticle3D" - model: ["Absolute", "Relative", "Fill"] - backendValue: backendValues.texcoordMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Line Length") - tooltip: qsTr("Sets the length of the line.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 99999.0 - decimals: 2 - backendValue: backendValues.length - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Line Length Variation") - tooltip: qsTr("Sets the length variation of the line.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 99999.0 - decimals: 2 - backendValue: backendValues.lengthVariation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Min Segment Length") - tooltip: qsTr("Sets the minimum length between line segments.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 99999.0 - decimals: 2 - backendValue: backendValues.lengthDeltaMin - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("EOL Fade Out") - tooltip: qsTr("Sets the fade out duration after the end of particle lifetime.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 99999.0 - decimals: 2 - backendValue: backendValues.eolFadeOutDuration - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSpecifics.qml deleted file mode 100644 index 5f29667..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - LineParticle3DSection { - width: parent.width - } - - SpriteParticle3DSection { - width: parent.width - } - - Particle3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSection.qml deleted file mode 100644 index 9d5b9af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSection.qml +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Model Blend Particle") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Delegate") - tooltip: qsTr("The delegate provides a template defining the model for the ModelBlendParticle3D.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.delegate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("End Node") - tooltip: qsTr("Sets the node that specifies the transformation for the model at the end of particle effect.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.endNode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Model Blend Mode") - tooltip: qsTr("Sets blending mode for the particle effect.") - } - - SecondColumnLayout { - ComboBox { - scope: "ModelBlendParticle3D" - model: ["Explode", "Construct", "Transfer"] - backendValue: backendValues.modelBlendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("End Time") - tooltip: qsTr("Sets the end time of the particle in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.endTime - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Activation Node") - tooltip: qsTr("Sets a node that activates particles.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.activationNode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Emit Mode") - tooltip: qsTr("Sets emit mode of the particles.") - } - - SecondColumnLayout { - ComboBox { - id: randomCheckBox - model: ["Sequential", "Random", "Activation"] - backendValue: backendValues.emitMode - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSpecifics.qml deleted file mode 100644 index 1728f4b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ModelBlendParticle3DSection { - width: parent.width - } - - Particle3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSection.qml deleted file mode 100644 index c182f8c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Model Particle") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Delegate") - tooltip: qsTr("The delegate provides a template defining each object instantiated by the particle.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.delegate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSpecifics.qml deleted file mode 100644 index 641b414..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ModelParticle3DSection { - width: parent.width - } - - Particle3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSection.qml deleted file mode 100644 index 2ac4502..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSection.qml +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Node") - - SectionLayout { - PropertyLabel { - text: qsTr("Opacity") - tooltip: qsTr("Sets the local opacity value of the node.") - } - - SecondColumnLayout { - // ### should be a slider - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Visibility") - tooltip: qsTr("Sets the local visibility of the node.") - } - - SecondColumnLayout { - // ### should be a slider - CheckBox { - text: qsTr("Is Visible") - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: transformSection - width: parent.width - caption: qsTr("Transform") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Translation") - tooltip: qsTr("Sets the translation of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the node in degrees.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pivot") - tooltip: qsTr("Sets the pivot of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSpecifics.qml deleted file mode 100644 index b3b0d66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSection.qml deleted file mode 100644 index 80a1280..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSection.qml +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Max Amount") - tooltip: qsTr("Sets the maximum amount of particles that can exist at the same time.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.maxAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the base color that is used for colorizing the particles.") - } - - ColorEditor { - backendValue: backendValues.color - supportGradient: false - } - - PropertyLabel { - text: qsTr("Color Variation") - tooltip: qsTr("Sets the color variation that is used for colorizing the particles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.colorVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.colorVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.colorVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.colorVariation_w - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "W" - color: StudioTheme.Values.themeTextColor // TODO theme3DAxisWColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Unified Color Variation") - tooltip: qsTr("Sets if the colorVariation should be applied uniformly for all the color channels.") - } - - SecondColumnLayout { - CheckBox { - id: unifiedColorVariationCheckBox - text: backendValues.unifiedColorVariation.valueToString - backendValue: backendValues.unifiedColorVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade In Effect") - tooltip: qsTr("Sets the fading effect used when the particles appear.") - } - - SecondColumnLayout { - ComboBox { - scope: "Particle3D" - model: ["FadeNone", "FadeOpacity", "FadeScale"] - backendValue: backendValues.fadeInEffect - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade Out Effect") - tooltip: qsTr("Sets the fading effect used when the particles reach their lifeSpan and disappear.") - } - - SecondColumnLayout { - ComboBox { - scope: "Particle3D" - model: ["FadeNone", "FadeOpacity", "FadeScale"] - backendValue: backendValues.fadeOutEffect - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade In Duration") - tooltip: qsTr("Sets the duration in milliseconds for the fading in effect.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.fadeInDuration - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade Out Duration") - tooltip: qsTr("Sets the duration in milliseconds for the fading out effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.fadeOutDuration - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Align Mode") - tooltip: qsTr("Sets the align mode used for the particles. Particle alignment means the direction that particles face.") - } - - SecondColumnLayout { - ComboBox { - scope: "Particle3D" - model: ["AlignNone", "AlignTowardsTarget", "AlignTowardsStartVelocity"] - backendValue: backendValues.alignMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Align Target Position") - tooltip: qsTr("Sets the position particles are aligned to. This property has effect only when the alignMode is set to Particle3D.AlignTowardsTarget.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.alignTargetPosition_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.alignTargetPosition_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.alignTargetPosition_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Has Transparency") - tooltip: qsTr("Sets if the particle has any transparency and should be blended with the background.") - } - - SecondColumnLayout { - CheckBox { - id: hasTransparencyCheckBox - text: backendValues.hasTransparency.valueToString - backendValue: backendValues.hasTransparency - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Sort Mode") - tooltip: qsTr("Sets the sort mode used for the particles.") - } - - SecondColumnLayout { - ComboBox { - scope: "Particle3D" - model: ["SortNone", "SortNewest", "SortOldest", "SortDistance"] - backendValue: backendValues.sortMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSpecifics.qml deleted file mode 100644 index e4656f7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Particle3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSection.qml deleted file mode 100644 index 97b63b1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSection.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Custom Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Randomize Data") - tooltip: qsTr("Sets whether the particles are used in random order instead of in the order they are specified in the source.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.castsShadows.valueToString - backendValue: backendValues.castsShadows - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of the shape file.") - } - - SecondColumnLayout { - UrlChooser { - id: sourceUrlChooser - backendValue: backendValues.source - filter: "*.cbor" - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSpecifics.qml deleted file mode 100644 index 45d0f45..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ParticleCustomShape3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSection.qml deleted file mode 100644 index c2c69d2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSection.qml +++ /dev/null @@ -1,557 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Particle Emitter") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("System") - tooltip: qsTr("Sets the ParticleSystem3D for the emitter. If system is direct parent of the emitter, this property does not need to be defined.") - } - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Particles3D.ParticleSystem3D" - backendValue: backendValues.system - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Emit Bursts") - tooltip: qsTr("Sets a list of EmitBurst3D elements to declaratively define bursts.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.emitBursts - model: backendValues.emitBursts.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Particles3D.EmitBurst3D" - - onAdd: function(value) { backendValues.emitBursts.idListAdd(value) } - onRemove: function(idx) { backendValues.emitBursts.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.emitBursts.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Velocity") - tooltip: qsTr("Sets a starting velocity for emitted particles.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QQuick3DParticleDirection" - backendValue: backendValues.velocity - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Particle") - tooltip: qsTr("Sets the logical particle which this emitter emits.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Particles3D.Particle3D" - backendValue: backendValues.particle - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("If enabled is set to false, this emitter will not emit any particles.") - } - - SecondColumnLayout { - CheckBox { - id: enabledCheckBox - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Shape") - tooltip: qsTr("Sets optional shape for the emitting area.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QQuick3DParticleAbstractShape" - backendValue: backendValues.shape - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Emit Rate") - tooltip: qsTr("Sets the constant emitting rate in particles per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.emitRate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Life Span") - tooltip: qsTr("Sets the lifespan of a single particle in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.lifeSpan - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Life Span Variation") - tooltip: qsTr("Sets the lifespan variation of a single particle in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.lifeSpanVariation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Particle Scale") - tooltip: qsTr("Sets the scale multiplier of the particles at the beginning") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.particleScale - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Particle End Scale") - tooltip: qsTr("Sets the scale multiplier of the particles at the end of particle lifeSpan.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.particleEndScale - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Scale Variation") - tooltip: qsTr("Sets the scale variation of the particles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.particleScaleVariation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("End Scale Variation") - tooltip: qsTr("Sets the scale variation of the particles in the end.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.particleEndScaleVariation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Depth Bias") - tooltip: qsTr("Sets the depth bias of the emitter. Depth bias is added to the object distance from camera when sorting objects.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.depthBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Particle Rotation") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the particles in the beginning. Rotation is defined as degrees in euler angles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Variation") - tooltip: qsTr("Sets the rotation variation of the particles in the beginning. Rotation variation is defined as degrees in euler angles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Velocity") - tooltip: qsTr("Sets the rotation velocity of the particles in the beginning. Rotation velocity is defined as degrees per second in euler angles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocity_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocity_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocity_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Velocity Variation") - tooltip: qsTr("Sets the rotation velocity variation of the particles. Rotation velocity variation is defined as degrees per second in euler angles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocityVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocityVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.particleRotationVelocityVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSpecifics.qml deleted file mode 100644 index 61a9955..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ParticleEmitter3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSection.qml deleted file mode 100644 index 79913e6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSection.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Model Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Fill") - tooltip: qsTr("Sets if the shape should be filled or just use the shape outlines.") - } - - SecondColumnLayout { - CheckBox { - id: fillCheckBox - text: backendValues.fill.valueToString - backendValue: backendValues.fill - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Delegate") - tooltip: qsTr("The delegate provides a template defining the model for the ParticleModelShape3D.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.delegate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSpecifics.qml deleted file mode 100644 index f136003..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ParticleModelShape3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSection.qml deleted file mode 100644 index c520907..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSection.qml +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Fill") - tooltip: qsTr("Sets if the shape should be filled or just use the shape outlines.") - } - - SecondColumnLayout { - CheckBox { - id: fillCheckBox - text: backendValues.fill.valueToString - backendValue: backendValues.fill - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Type") - tooltip: qsTr("Sets the type of the shape.") - } - - SecondColumnLayout { - ComboBox { - scope: "ParticleShape3D" - model: ["Cube", "Sphere", "Cylinder"] - backendValue: backendValues.type - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Extents") - tooltip: qsTr("Sets the extents of the shape.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.extents_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSpecifics.qml deleted file mode 100644 index 26f321b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ParticleShape3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSection.qml deleted file mode 100644 index 11ff7a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSection.qml +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle System") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Start Time") - tooltip: qsTr("Sets the time in milliseconds where the system starts.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2147483647 - decimals: 0 - backendValue: backendValues.startTime - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Time") - tooltip: qsTr("Sets the time in milliseconds for the system.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2147483647 - decimals: 0 - backendValue: backendValues.time - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Running") - tooltip: qsTr("Sets if system is currently running.") - } - - SecondColumnLayout { - CheckBox { - id: runningCheckBox - text: backendValues.running.valueToString - backendValue: backendValues.running - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Paused") - tooltip: qsTr("Sets if system is currently paused.") - } - - SecondColumnLayout { - CheckBox { - id: pausedCheckBox - text: backendValues.paused.valueToString - backendValue: backendValues.paused - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Logging") - tooltip: qsTr("Enables collection of loggingData.") - } - - SecondColumnLayout { - CheckBox { - id: loggingCheckBox - text: backendValues.logging.valueToString - backendValue: backendValues.logging - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Use Random Seed") - tooltip: qsTr("Sets if particle system seed should be random or user defined.") - } - - SecondColumnLayout { - CheckBox { - id: useRandomSeedCheckBox - text: backendValues.useRandomSeed.valueToString - backendValue: backendValues.useRandomSeed - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Seed") - tooltip: qsTr("Sets the seed value used for particles randomization.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2147483647 - decimals: 0 - backendValue: backendValues.seed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSpecifics.qml deleted file mode 100644 index c3261b3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ParticleSystem3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSection.qml deleted file mode 100644 index 00c9aac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSection.qml +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Point Rotator") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Magnitude") - tooltip: qsTr("Sets the magnitude in degrees per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.magnitude - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Direction") - tooltip: qsTr("Sets the direction for the rotation. Values will be automatically normalized to a unit vector.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Pivot Point") - tooltip: qsTr("Sets the pivot point for the rotation. Particles are rotated around this point.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivotPoint_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivotPoint_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivotPoint_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSpecifics.qml deleted file mode 100644 index 6d1f322..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PointRotator3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSection.qml deleted file mode 100644 index 8321d3d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSection.qml +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Repeller") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Radius") - tooltip: qsTr("Sets the radius of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.radius - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Outer Radius") - tooltip: qsTr("Sets the outer radius of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.outerRadius - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Sets the strength of the effect.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.strength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSpecifics.qml deleted file mode 100644 index bdb7b02..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Repeller3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSection.qml deleted file mode 100644 index 0d1dfe5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSection.qml +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Scale Affector") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Scaling Type") - tooltip: qsTr("Sets the scaling type of the affector.") - } - - SecondColumnLayout { - ComboBox { - scope: "ScaleAffector3D" - model: ["Linear", "SewSaw", "SineWave", "AbsSineWave", "Step", "SmoothStep"] - backendValue: backendValues.type - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Minimum Size") - tooltip: qsTr("Sets the minimum scale size.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.minSize - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Maximum Size") - tooltip: qsTr("Sets the maximum scale size.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.maxSize - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration") - tooltip: qsTr("Sets the duration of scaling period.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - stepSize: 10 - backendValue: backendValues.duration - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Easing curve") - tooltip: qsTr("Sets a custom scaling curve.") - } - - SecondColumnLayout { - BoolButtonRowButton { - buttonIcon: StudioTheme.Constants.curveDesigner - - EasingCurveEditor { - id: easingCurveEditor - modelNodeBackendProperty: modelNodeBackend - } - - onClicked: easingCurveEditor.runDialog() - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSpecifics.qml deleted file mode 100644 index ab2766c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ScaleAffector3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSection.qml deleted file mode 100644 index 636f36e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSection.qml +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Sprite Particle") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Blend Mode") - tooltip: qsTr("Sets the blending mode used for rendering the particles.") - } - - SecondColumnLayout { - ComboBox { - scope: "SpriteParticle3D" - model: ["SourceOver", "Screen", "Multiply"] - backendValue: backendValues.blendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Casts Reflections") - tooltip: qsTr("Enables reflection probes to reflect sprite particles.") - } - - SecondColumnLayout { - CheckBox { - id: castsReflectionsCheckBox - text: backendValues.castsReflections.valueToString - backendValue: backendValues.castsReflections - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Sprite") - tooltip: qsTr("Sets the Texture used for the particles.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.sprite - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Sprite Sequence") - tooltip: qsTr("Sets the sprite sequence properties for the particle.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Particles3D.SpriteSequence3D" - backendValue: backendValues.spriteSequence - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Billboard") - tooltip: qsTr("Sets if the particle texture should always be aligned face towards the screen.") - } - - SecondColumnLayout { - CheckBox { - id: billboardCheckBox - text: backendValues.billboard.valueToString - backendValue: backendValues.billboard - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Particle Scale") - tooltip: qsTr("Sets the scale multiplier of the particles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.particleScale - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Color Table") - tooltip: qsTr("Sets the Texture used for coloring the particles.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.colorTable - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Lights") - tooltip: qsTr("Sets the lights used for the particles.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.lights - model: backendValues.lights.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Light" - onAdd: function(value) { backendValues.lights.idListAdd(value) } - onRemove: function(idx) { backendValues.lights.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.lights.idListReplace(idx, value) } - } - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Offset") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.offsetX - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - tooltip: qsTr("Offsets the X coordinate.") - } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.offsetY - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - tooltip: qsTr("Offsets the Y coordinate.") - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSpecifics.qml deleted file mode 100644 index 4632a7d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SpriteParticle3DSection { - width: parent.width - } - - Particle3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSection.qml deleted file mode 100644 index e61bbe9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSection.qml +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Sprite Sequence") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Frame Count") - tooltip: qsTr("Sets the amount of image frames in sprite.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.frameCount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Frame Index") - tooltip: qsTr("Sets the initial index of the frame.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.frameIndex - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Interpolate") - tooltip: qsTr("Sets if the sprites are interpolated (blended) between frames to make the animation appear smoother.") - } - - SecondColumnLayout { - CheckBox { - id: interpolateCheckBox - text: backendValues.interpolate.valueToString - backendValue: backendValues.interpolate - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration") - tooltip: qsTr("Sets the duration in milliseconds how long it takes for the sprite sequence to animate.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.duration - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Duration Variation") - tooltip: qsTr("Sets the duration variation in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.durationVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Random Start") - tooltip: qsTr("Sets if the animation should start from a random frame between 0 and frameCount - 1.") - } - - SecondColumnLayout { - CheckBox { - id: randomStartCheckBox - text: backendValues.randomStart.valueToString - backendValue: backendValues.randomStart - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Animation Direction") - tooltip: qsTr("Sets the animation direction of the sequence.") - } - - SecondColumnLayout { - ComboBox { - scope: "SpriteSequence3D" - model: ["Normal", "Reverse", "Alternate", "AlternateReverse", "SingleFrame"] - backendValue: backendValues.animationDirection - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSpecifics.qml deleted file mode 100644 index 4af861a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SpriteSequence3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSection.qml deleted file mode 100644 index f6365a7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSection.qml +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Target Direction") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Position") - tooltip: qsTr("Sets the position for particles target.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Position Variation") - tooltip: qsTr("Sets the position variation for particles target.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.positionVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Normalized") - tooltip: qsTr("Sets if the distance to position should be considered as normalized or not.") - } - - SecondColumnLayout { - CheckBox { - id: normalizedCheckBox - text: backendValues.normalized.valueToString - backendValue: backendValues.normalized - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Magnitude") - tooltip: qsTr("This property defines the magnitude in position change per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.magnitude - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - - PropertyLabel { - text: qsTr("Magnitude Variation") - tooltip: qsTr("Sets the magnitude variation in position change per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.magnitudeVariation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSpecifics.qml deleted file mode 100644 index fccaacd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TargetDirection3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSection.qml deleted file mode 100644 index 27d4500..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Trail Emitter") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Follow") - tooltip: qsTr("Sets the logical particle which this emitter follows.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Particles3D.Particle3D" - backendValue: backendValues.follow - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSpecifics.qml deleted file mode 100644 index 9693554..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TrailEmitter3DSection { - width: parent.width - } - - ParticleEmitter3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSection.qml deleted file mode 100644 index 4fac24e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSection.qml +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Particle Vector Direction") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Direction") - tooltip: qsTr("Sets the direction for particles target.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.direction_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Direction Variation") - tooltip: qsTr("Sets the direction variation for particles target.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.directionVariation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.directionVariation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.directionVariation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Normalized") - tooltip: qsTr("Sets if the direction should be normalized after applying the variation.") - } - - SecondColumnLayout { - CheckBox { - id: normalizedCheckBox - text: backendValues.normalized.valueToString - backendValue: backendValues.normalized - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSpecifics.qml deleted file mode 100644 index d1a5bc7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - VectorDirection3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSection.qml deleted file mode 100644 index 631a3e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSection.qml +++ /dev/null @@ -1,474 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Particle Wander") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Fade In Duration") - tooltip: qsTr("Sets the duration in milliseconds for fading in the affector.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.fadeInDuration - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fade Out Duration") - tooltip: qsTr("Sets the duration in milliseconds for fading out the affector.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.fadeOutDuration - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Global") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets how long distance each particle moves at the ends of curves.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.globalAmount_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.globalAmount_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.globalAmount_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pace") - tooltip: qsTr("Sets the pace (frequency) each particle wanders in curves per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPace_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPace_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPace_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pace Start") - tooltip: qsTr("Sets the starting point for the pace (frequency).") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPaceStart_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPaceStart_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.globalPaceStart_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } - Section { - width: parent.width - caption: qsTr("Unique") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the unique distance each particle moves at the ends of curves.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.uniqueAmount_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.uniqueAmount_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.uniqueAmount_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Amount Variation") - tooltip: qsTr("Sets the variation for uniqueAmount between 0.0 and 1.0.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.uniqueAmountVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pace") - tooltip: qsTr("Sets the unique pace (frequency) each particle wanders in curves per second.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.uniquePace_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.uniquePace_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.uniquePace_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Pace Variation") - tooltip: qsTr("Sets the unique pace (frequency) variation for each particle between 0.0 and 1.0.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.uniquePaceVariation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - } - -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSpecifics.qml deleted file mode 100644 index 1bba288..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Wander3DSection { - width: parent.width - } - - Affector3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-16px.png deleted file mode 100644 index f2d49e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px.png deleted file mode 100644 index 2c81264..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px@2x.png deleted file mode 100644 index 180951b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy.png deleted file mode 100644 index a3b6c7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy16.png deleted file mode 100644 index de8906a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy@2x.png deleted file mode 100644 index 7ca04a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-16px.png deleted file mode 100644 index d425974..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px.png deleted file mode 100644 index 3698ed1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px@2x.png deleted file mode 100644 index d1f4a57..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-16px.png deleted file mode 100644 index 1fce677..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px.png deleted file mode 100644 index 8aa5a06..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px@2x.png deleted file mode 100644 index f9ee2f3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-16px.png deleted file mode 100644 index 4d18262..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px.png deleted file mode 100644 index 5cbe62a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px@2x.png deleted file mode 100644 index 5e91a61..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-16px.png deleted file mode 100644 index 2ade1e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px.png deleted file mode 100644 index ed742d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px@2x.png deleted file mode 100644 index 22e2969..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-16px.png deleted file mode 100644 index 0f77c30..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px.png deleted file mode 100644 index bb6640d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px@2x.png deleted file mode 100644 index 143ab61..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-16px.png deleted file mode 100644 index 39cf9ee..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px.png deleted file mode 100644 index 437fe22..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px@2x.png deleted file mode 100644 index bed5845..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-16px.png deleted file mode 100644 index 4113a50..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px.png deleted file mode 100644 index 3fb0186..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px@2x.png deleted file mode 100644 index adc41f7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-16px.png deleted file mode 100644 index 4d3e489..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px.png deleted file mode 100644 index 39b8e93..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px@2x.png deleted file mode 100644 index 52520d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-16px.png deleted file mode 100644 index e8242fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px.png deleted file mode 100644 index 7ce51b1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px@2x.png deleted file mode 100644 index 7878963..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-16px.png deleted file mode 100644 index 66a0396..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px.png deleted file mode 100644 index 672b052..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px@2x.png deleted file mode 100644 index 89b2cac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-16px.png deleted file mode 100644 index f44a7f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px.png deleted file mode 100644 index 9ea1411..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px@2x.png deleted file mode 100644 index f936039..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-16px.png deleted file mode 100644 index 13e759a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px.png deleted file mode 100644 index 27774c6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px@2x.png deleted file mode 100644 index c3fb6b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-16px.png deleted file mode 100644 index 30561ae..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px.png deleted file mode 100644 index 506eb33..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px@2x.png deleted file mode 100644 index b1633e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-16px.png deleted file mode 100644 index 14c6142..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px.png deleted file mode 100644 index 54a30b0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px@2x.png deleted file mode 100644 index 89b8764..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-16px.png deleted file mode 100644 index 0174962..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px.png deleted file mode 100644 index 566b839..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px@2x.png deleted file mode 100644 index 0238128..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-16px.png deleted file mode 100644 index 4295336..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px.png deleted file mode 100644 index 707d5da..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px@2x.png deleted file mode 100644 index 92b235c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-16px.png deleted file mode 100644 index 284bf9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px.png deleted file mode 100644 index ba06146..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px@2x.png deleted file mode 100644 index a994df6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-16px.png deleted file mode 100644 index ef8e871..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px.png deleted file mode 100644 index eafd377..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px@2x.png deleted file mode 100644 index f062219..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-16px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-16px.png deleted file mode 100644 index b2d43ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-16px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px.png deleted file mode 100644 index 16f043c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px@2x.png deleted file mode 100644 index 82136e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo deleted file mode 100644 index d2a2999..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo +++ /dev/null @@ -1,562 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.Particles3D.Attractor3D" - icon: "images/attractor-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Attractor" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/attractor-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.DynamicBurst3D" - icon: "images/emit-burst-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Dynamic Burst" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/emit-burst-24px.png" - version: "6.3" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.EmitBurst3D" - icon: "images/emit-burst-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Emit Burst" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/emit-burst-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleEmitter3D" - icon: "images/emitter-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Emitter" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/emitter-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.Gravity3D" - icon: "images/gravity-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Gravity" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/gravity-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ModelBlendParticle3D" - icon: "images/model-blend-particle-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Model Blend Particle" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/model-blend-particle-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ModelParticle3D" - icon: "images/model-particle-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Model Particle" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/model-particle-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleCustomShape3D" - icon: "images/particle-custom-shape-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Custom Shape" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/particle-custom-shape-24px.png" - version: "6.3" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleModelShape3D" - icon: "images/model-shape-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Model Shape" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/model-shape-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.PointRotator3D" - icon: "images/point-rotator-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Point Rotator" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/point-rotator-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleShape3D" - icon: "images/particle-shape-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Particle Shape" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/particle-shape-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.SpriteParticle3D" - icon: "images/sprite-particle-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Sprite Particle" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/sprite-particle-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.SpriteSequence3D" - icon: "images/sprite-sequence-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Sprite Sequence" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/sprite-sequence-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Particle System" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.TargetDirection3D" - icon: "images/target-direction-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Target Direction" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/target-direction-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.TrailEmitter3D" - icon: "images/trail-emitter-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Trail Emitter" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/trail-emitter-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.VectorDirection3D" - icon: "images/vector-direction-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Vector Direction" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/vector-direction-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.Wander3D" - icon: "images/wander-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Wander" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/wander-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Animated Sprite" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_animatedsprite_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Attractor System" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_attractor_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Burst" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_burst_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Model Blend" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_modelblend_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Model Shape" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_modelshape_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Particle Trail" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_particletrail_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Sprite" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_sprite_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.ParticleSystem3D" - icon: "images/particle-system-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Wander" - category: "Qt Quick 3D Particle System Templates" - libraryIcon: "images/particle-system-24px.png" - version: "6.2" - requiredImport: "QtQuick3D.Particles3D" - QmlSource { source: "./source/particlesystem_wander_template.qml" } - } - } - Type { - name: "QtQuick3D.Particles3D.LineParticle3D" - icon: "images/line-particle-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Line Particle" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/line-particle-24px.png" - version: "6.4" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.Repeller3D" - icon: "images/repeller-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Repeller" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/repeller-24px.png" - version: "6.4" - requiredImport: "QtQuick3D.Particles3D" - } - } - Type { - name: "QtQuick3D.Particles3D.ScaleAffector3D" - icon: "images/scale-affector-16px.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Scale Affector" - category: "Qt Quick 3D Particles 3D" - libraryIcon: "images/scale-affector-24px.png" - version: "6.4" - requiredImport: "QtQuick3D.Particles3D" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_animatedsprite_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_animatedsprite_template.qml deleted file mode 100644 index 3aedb9a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_animatedsprite_template.qml +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: animatedSpriteSystem - ParticleEmitter3D { - id: animatedSpriteEmitter - velocity: animatedSpriteDirection - particle: animatedSpriteParticle - lifeSpan: 1000 - emitRate: 1 - SpriteParticle3D { - id: animatedSpriteParticle - particleScale: 25 - billboard: true - sprite: animatedTexture - spriteSequence: animatedSequence - maxAmount: 10 - - SpriteSequence3D { - id: animatedSequence - duration: -1 - interpolate: false - } - - Texture { - id: animatedTexture - } - } - - VectorDirection3D { - id: animatedSpriteDirection - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_attractor_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_attractor_template.qml deleted file mode 100644 index 0a72379..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_attractor_template.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: attractorSystem - ParticleEmitter3D { - velocity: attractorDirection - particle: attractorParticle - emitRate: 200 - lifeSpan: 2000 - - SpriteParticle3D { - id: attractorParticle - maxAmount: 1000 - } - - VectorDirection3D { - id: attractorDirection - direction.y: 40 - directionVariation.y: 10 - directionVariation.z: 100 - directionVariation.x: 100 - } - } - - Attractor3D { - id: particleAttractor - y: 100 - duration: 1000 - particles: attractorParticle - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_burst_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_burst_template.qml deleted file mode 100644 index 3fca72a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_burst_template.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: burstSystem - ParticleEmitter3D { - id: burstEmitter - emitBursts: emitBurst - velocity: burstDirection - particle: burstParticle - lifeSpan: 4000 - SpriteParticle3D { - id: burstParticle - maxAmount: 200 - } - - VectorDirection3D { - id: burstDirection - directionVariation.z: 10 - directionVariation.y: 10 - directionVariation.x: 10 - } - - EmitBurst3D { - id: emitBurst - time: 500 - duration: 100 - amount: 20 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelblend_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelblend_template.qml deleted file mode 100644 index 307f8a7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelblend_template.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: modelBlendSystem - Component { - id: modelComponent - Model { - id: sphere - source: "#Sphere" - materials: defaultMaterial - DefaultMaterial { - id: defaultMaterial - diffuseColor: "#4aee45" - } - } - } - - Node { - id: translateNode - x: 150 - } - ModelBlendParticle3D { - id: modelBlendParticle - modelBlendMode: ModelBlendParticle3D.Construct - endNode: translateNode - random: true - delegate: modelComponent - endTime: 1500 - } - ParticleEmitter3D { - id: emitter - velocity: modelBlendDirection - particle: modelBlendParticle - lifeSpan: 4000 - emitRate: modelBlendParticle.maxAmount - - VectorDirection3D { - id: modelBlendDirection - directionVariation.z: 50 - directionVariation.x: 50 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelshape_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelshape_template.qml deleted file mode 100644 index 423e89e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelshape_template.qml +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: modelShapeSystem - ParticleEmitter3D { - id: modelShapeEmitter - shape: targetShape - velocity: modelShapeDirection - emitRate: 100 - lifeSpanVariation: 100 - lifeSpan: 4000 - particle: modelShapeParticle - particleRotationVelocityVariation.x: 200 - particleRotationVariation.z: 180 - particleRotationVelocityVariation.y: 200 - - SpriteParticle3D { - id: modelShapeParticle - color: "#ffffff" - fadeInDuration: 1500 - fadeOutDuration: 1500 - particleScale: 2 - maxAmount: 2000 - - VectorDirection3D { - id: modelShapeDirection - directionVariation.z: 2 - direction.y: 2 - directionVariation.x: 2 - direction.z: 0 - directionVariation.y: 2 - } - } - particleRotationVelocityVariation.z: 200 - particleEndScale: 1.5 - particleRotationVariation.y: 180 - particleRotationVariation.x: 180 - } - ParticleModelShape3D { - id: targetShape - fill: false - delegate: Model { - source: "#Cube" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_particletrail_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_particletrail_template.qml deleted file mode 100644 index c81c461..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_particletrail_template.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: particleTrailSystem - TrailEmitter3D { - id: trailEmitter - follow: spriteParticle - emitRate: 10 - particle: trailParticle - velocity: trailDirection - particleScale: 1 - VectorDirection3D { - id: trailDirection - direction.y: -1 - directionVariation.z: 10 - directionVariation.y: 10 - directionVariation.x: 10 - } - SpriteParticle3D { - id: trailParticle - } - } - - ParticleEmitter3D { - id: spriteEmitter - velocity: spriteDirection - particle: spriteParticle - lifeSpan: 2000 - particleScale: 2 - VectorDirection3D { - id: spriteDirection - directionVariation.z: 10 - directionVariation.y: 10 - directionVariation.x: 10 - } - SpriteParticle3D { - id: spriteParticle - maxAmount: 1000 - } - emitRate: 2 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_sprite_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_sprite_template.qml deleted file mode 100644 index d9ec4cc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_sprite_template.qml +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: spriteSystem - ParticleEmitter3D { - id: spriteEmitter - velocity: spriteDirection - particle: spriteParticle - lifeSpan: 2000 - emitRate: 200 - SpriteParticle3D { - id: spriteParticle - maxAmount: 1000 - } - - VectorDirection3D { - id: spriteDirection - directionVariation.z: 10 - directionVariation.y: 10 - directionVariation.x: 10 - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_template.qml deleted file mode 100644 index d64dc2a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_template.qml +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - SpriteParticle3D { - id: spriteParticle - color: "#ffffff" - particleScale: 5.0 - maxAmount: 100 - } - ParticleEmitter3D { - id: particleEmitter - particle: spriteParticle - particleScale: 1.0 - particleEndScale: 1.5 - particleRotationVariation.x: 180 - particleRotationVariation.y: 180 - particleRotationVariation.z: 180 - particleRotationVelocityVariation.x: 200 - particleRotationVelocityVariation.y: 200 - particleRotationVelocityVariation.z: 200 - VectorDirection3D { - id: dir3d - direction.z: -100 - directionVariation.x: 10 - directionVariation.y: 10 - } - velocity: dir3d - emitRate: 10 - lifeSpan: 1000 - lifeSpanVariation: 100 - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_wander_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_wander_template.qml deleted file mode 100644 index eeeaa22..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_wander_template.qml +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D -import QtQuick3D.Particles3D - -ParticleSystem3D { - id: wanderSystem - ParticleEmitter3D { - id: wanderSpriteEmitter - particle: wanderSpriteParticle - position: wanderTarget.position - emitRate: 100 - particleScale: 20 - particleScaleVariation: 5 - particleEndScale: 30 - particleEndScaleVariation: 10 - lifeSpanVariation: 1000 - - SpriteParticle3D { - id: wanderSpriteParticle - sprite: spriteTexture - particleScale: 0.2 - maxAmount: 600 - billboard: true - fadeInEffect: Particle3D.FadeScale - fadeInDuration: 100 - fadeOutEffect: Particle3D.FadeOpacity - fadeOutDuration: 1500 - Texture { - id: spriteTexture - } - } - } - - Wander3D { - uniquePace.z: 0.1 - uniquePace.y: 0.1 - uniquePace.x: 0.1 - uniqueAmount.z: 40 - uniqueAmount.y: 40 - uniqueAmount.x: 40 - uniqueAmountVariation: 1 - uniquePaceVariation: 1 - fadeInDuration: 3000 - } - - Node { - id: wanderTarget - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/libqtquick3dparticles3dplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/libqtquick3dparticles3dplugin.so deleted file mode 100755 index 38de25e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/libqtquick3dparticles3dplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/plugins.qmltypes deleted file mode 100644 index c36fe63..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/plugins.qmltypes +++ /dev/null @@ -1,2030 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquick3dparticle_p.h" - name: "QQuick3DParticle" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D.Particles3D/Particle3D 6.2"] - isCreatable: false - exportMetaObjectRevisions: [1538] - Enum { - name: "FadeType" - values: ["FadeNone", "FadeOpacity", "FadeScale"] - } - Enum { - name: "AlignMode" - values: [ - "AlignNone", - "AlignTowardsTarget", - "AlignTowardsStartVelocity" - ] - } - Enum { - name: "SortMode" - values: ["SortNone", "SortNewest", "SortOldest", "SortDistance"] - } - Property { - name: "maxAmount" - type: "int" - read: "maxAmount" - write: "setMaxAmount" - notify: "maxAmountChanged" - index: 0 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - reset: "resetColor" - notify: "colorChanged" - index: 1 - } - Property { - name: "colorVariation" - type: "QVector4D" - read: "colorVariation" - write: "setColorVariation" - notify: "colorVariationChanged" - index: 2 - } - Property { - name: "unifiedColorVariation" - type: "bool" - read: "unifiedColorVariation" - write: "setUnifiedColorVariation" - notify: "unifiedColorVariationChanged" - index: 3 - } - Property { - name: "fadeInEffect" - type: "FadeType" - read: "fadeInEffect" - write: "setFadeInEffect" - notify: "fadeInEffectChanged" - index: 4 - } - Property { - name: "fadeOutEffect" - type: "FadeType" - read: "fadeOutEffect" - write: "setFadeOutEffect" - notify: "fadeOutEffectChanged" - index: 5 - } - Property { - name: "fadeInDuration" - type: "int" - read: "fadeInDuration" - write: "setFadeInDuration" - notify: "fadeInDurationChanged" - index: 6 - } - Property { - name: "fadeOutDuration" - type: "int" - read: "fadeOutDuration" - write: "setFadeOutDuration" - notify: "fadeOutDurationChanged" - index: 7 - } - Property { - name: "alignMode" - type: "AlignMode" - read: "alignMode" - write: "setAlignMode" - notify: "alignModeChanged" - index: 8 - } - Property { - name: "alignTargetPosition" - type: "QVector3D" - read: "alignTargetPosition" - write: "setAlignTargetPosition" - notify: "alignTargetPositionChanged" - index: 9 - } - Property { - name: "hasTransparency" - type: "bool" - read: "hasTransparency" - write: "setHasTransparency" - notify: "hasTransparencyChanged" - index: 10 - } - Property { - name: "sortMode" - type: "SortMode" - read: "sortMode" - write: "setSortMode" - notify: "sortModeChanged" - index: 11 - } - Signal { name: "systemChanged" } - Signal { name: "maxAmountChanged" } - Signal { name: "colorChanged" } - Signal { name: "colorVariationChanged" } - Signal { name: "unifiedColorVariationChanged" } - Signal { name: "fadeInEffectChanged" } - Signal { name: "fadeOutEffectChanged" } - Signal { name: "fadeInDurationChanged" } - Signal { name: "fadeOutDurationChanged" } - Signal { name: "alignModeChanged" } - Signal { name: "alignTargetPositionChanged" } - Signal { name: "hasTransparencyChanged" } - Signal { name: "sortModeChanged" } - Method { - name: "setSystem" - Parameter { name: "system"; type: "QQuick3DParticleSystem"; isPointer: true } - } - Method { - name: "setMaxAmount" - Parameter { name: "maxAmount"; type: "int" } - } - Method { - name: "setColor" - Parameter { name: "color"; type: "QColor" } - } - Method { - name: "setColorVariation" - Parameter { name: "colorVariation"; type: "QVector4D" } - } - Method { - name: "setUnifiedColorVariation" - Parameter { name: "unified"; type: "bool" } - } - Method { - name: "setFadeInEffect" - Parameter { name: "fadeInEffect"; type: "QQuick3DParticle::FadeType" } - } - Method { - name: "setFadeOutEffect" - Parameter { name: "fadeOutEffect"; type: "QQuick3DParticle::FadeType" } - } - Method { - name: "setFadeInDuration" - Parameter { name: "fadeInDuration"; type: "int" } - } - Method { - name: "setFadeOutDuration" - Parameter { name: "fadeOutDuration"; type: "int" } - } - Method { - name: "setAlignMode" - Parameter { name: "alignMode"; type: "QQuick3DParticle::AlignMode" } - } - Method { - name: "setAlignTargetPosition" - Parameter { name: "alignPosition"; type: "QVector3D" } - } - Method { - name: "setHasTransparency" - Parameter { name: "transparency"; type: "bool" } - } - Method { - name: "setSortMode" - Parameter { name: "sortMode"; type: "QQuick3DParticle::SortMode" } - } - } - Component { - file: "private/qquick3dparticleabstractshape_p.h" - name: "QQuick3DParticleAbstractShape" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - } - Component { - file: "private/qquick3dparticleaffector_p.h" - name: "QQuick3DParticleAffector" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.Particles3D/Affector3D 6.2"] - isCreatable: false - exportMetaObjectRevisions: [1538] - Property { - name: "system" - type: "QQuick3DParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "particles" - type: "QQuick3DParticle" - isList: true - read: "particles" - index: 1 - isReadonly: true - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 2 - } - Signal { name: "update" } - Signal { name: "systemChanged" } - Signal { name: "enabledChanged" } - Method { - name: "setSystem" - Parameter { name: "system"; type: "QQuick3DParticleSystem"; isPointer: true } - } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - } - Component { - file: "private/qquick3dparticleattractor_p.h" - name: "QQuick3DParticleAttractor" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/Attractor3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "positionVariation" - type: "QVector3D" - read: "positionVariation" - write: "setPositionVariation" - notify: "positionVariationChanged" - index: 0 - } - Property { - name: "shape" - type: "QQuick3DParticleAbstractShape" - isPointer: true - read: "shape" - write: "setShape" - notify: "shapeChanged" - index: 1 - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 2 - } - Property { - name: "durationVariation" - type: "int" - read: "durationVariation" - write: "setDurationVariation" - notify: "durationVariationChanged" - index: 3 - } - Property { - name: "hideAtEnd" - type: "bool" - read: "hideAtEnd" - write: "setHideAtEnd" - notify: "hideAtEndChanged" - index: 4 - } - Property { - name: "useCachedPositions" - type: "bool" - read: "useCachedPositions" - write: "setUseCachedPositions" - notify: "useCachedPositionsChanged" - index: 5 - } - Property { - name: "positionsAmount" - type: "int" - read: "positionsAmount" - write: "setPositionsAmount" - notify: "positionsAmountChanged" - index: 6 - } - Signal { name: "positionVariationChanged" } - Signal { name: "shapeChanged" } - Signal { name: "durationChanged" } - Signal { name: "durationVariationChanged" } - Signal { name: "hideAtEndChanged" } - Signal { name: "useCachedPositionsChanged" } - Signal { name: "positionsAmountChanged" } - Method { - name: "setPositionVariation" - Parameter { name: "positionVariation"; type: "QVector3D" } - } - Method { - name: "setShape" - Parameter { name: "shape"; type: "QQuick3DParticleAbstractShape"; isPointer: true } - } - Method { - name: "setDuration" - Parameter { name: "duration"; type: "int" } - } - Method { - name: "setDurationVariation" - Parameter { name: "durationVariation"; type: "int" } - } - Method { - name: "setHideAtEnd" - Parameter { name: "hideAtEnd"; type: "bool" } - } - Method { - name: "setUseCachedPositions" - Parameter { name: "useCachedPositions"; type: "bool" } - } - Method { - name: "setPositionsAmount" - Parameter { name: "positionsAmount"; type: "int" } - } - } - Component { - file: "private/qquick3dparticlecustomshape_p.h" - name: "QQuick3DParticleCustomShape" - accessSemantics: "reference" - prototype: "QQuick3DParticleAbstractShape" - exports: ["QtQuick3D.Particles3D/ParticleCustomShape3D 6.3"] - exportMetaObjectRevisions: [1539] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "randomizeData" - type: "bool" - read: "randomizeData" - write: "setRandomizeData" - notify: "randomizeDataChanged" - index: 1 - } - Signal { name: "sourceChanged" } - Signal { name: "randomizeDataChanged" } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - } - Method { - name: "setRandomizeData" - Parameter { name: "random"; type: "bool" } - } - } - Component { - file: "private/qquick3dparticledirection_p.h" - name: "QQuick3DParticleDirection" - accessSemantics: "reference" - prototype: "QObject" - } - Component { - file: "private/qquick3dparticledynamicburst_p.h" - name: "QQuick3DParticleDynamicBurst" - accessSemantics: "reference" - prototype: "QQuick3DParticleEmitBurst" - exports: ["QtQuick3D.Particles3D/DynamicBurst3D 6.3"] - exportMetaObjectRevisions: [1539] - Enum { - name: "TriggerMode" - values: ["TriggerTime", "TriggerStart", "TriggerEnd"] - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Property { - name: "amountVariation" - type: "int" - read: "amountVariation" - write: "setAmountVariation" - notify: "amountVariationChanged" - index: 1 - } - Property { - name: "triggerMode" - type: "TriggerMode" - read: "triggerMode" - write: "setTriggerMode" - notify: "triggerModeChanged" - index: 2 - } - Signal { name: "enabledChanged" } - Signal { name: "amountVariationChanged" } - Signal { name: "triggerModeChanged" } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setAmountVariation" - Parameter { name: "value"; type: "int" } - } - Method { - name: "setTriggerMode" - Parameter { name: "mode"; type: "TriggerMode" } - } - } - Component { - file: "private/qquick3dparticleemitburst_p.h" - name: "QQuick3DParticleEmitBurst" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick3D.Particles3D/EmitBurst3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "time" - type: "int" - read: "time" - write: "setTime" - notify: "timeChanged" - index: 0 - } - Property { - name: "amount" - type: "int" - read: "amount" - write: "setAmount" - notify: "amountChanged" - index: 1 - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 2 - } - Signal { name: "timeChanged" } - Signal { name: "amountChanged" } - Signal { name: "durationChanged" } - Method { - name: "setTime" - Parameter { name: "time"; type: "int" } - } - Method { - name: "setAmount" - Parameter { name: "amount"; type: "int" } - } - Method { - name: "setDuration" - Parameter { name: "duration"; type: "int" } - } - } - Component { - file: "private/qquick3dparticleemitter_p.h" - name: "QQuick3DParticleEmitter" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.Particles3D/ParticleEmitter3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "system" - type: "QQuick3DParticleSystem" - isPointer: true - read: "system" - write: "setSystem" - notify: "systemChanged" - index: 0 - } - Property { - name: "emitBursts" - type: "QQuick3DParticleEmitBurst" - isList: true - read: "emitBursts" - index: 1 - isReadonly: true - } - Property { - name: "velocity" - type: "QQuick3DParticleDirection" - isPointer: true - read: "velocity" - write: "setVelocity" - notify: "velocityChanged" - index: 2 - } - Property { - name: "particle" - type: "QQuick3DParticle" - isPointer: true - read: "particle" - write: "setParticle" - notify: "particleChanged" - index: 3 - } - Property { - name: "enabled" - type: "bool" - read: "enabled" - write: "setEnabled" - notify: "enabledChanged" - index: 4 - } - Property { - name: "shape" - type: "QQuick3DParticleAbstractShape" - isPointer: true - read: "shape" - write: "setShape" - notify: "shapeChanged" - index: 5 - } - Property { - name: "emitRate" - type: "float" - read: "emitRate" - write: "setEmitRate" - notify: "emitRateChanged" - index: 6 - } - Property { - name: "lifeSpan" - type: "int" - read: "lifeSpan" - write: "setLifeSpan" - notify: "lifeSpanChanged" - index: 7 - } - Property { - name: "lifeSpanVariation" - type: "int" - read: "lifeSpanVariation" - write: "setLifeSpanVariation" - notify: "lifeSpanVariationChanged" - index: 8 - } - Property { - name: "particleScale" - type: "float" - read: "particleScale" - write: "setParticleScale" - notify: "particleScaleChanged" - index: 9 - } - Property { - name: "particleEndScale" - type: "float" - read: "particleEndScale" - write: "setParticleEndScale" - notify: "particleEndScaleChanged" - index: 10 - } - Property { - name: "particleScaleVariation" - type: "float" - read: "particleScaleVariation" - write: "setParticleScaleVariation" - notify: "particleScaleVariationChanged" - index: 11 - } - Property { - name: "particleEndScaleVariation" - type: "float" - read: "particleEndScaleVariation" - write: "setParticleEndScaleVariation" - notify: "particleEndScaleVariationChanged" - index: 12 - } - Property { - name: "particleRotation" - type: "QVector3D" - read: "particleRotation" - write: "setParticleRotation" - notify: "particleRotationChanged" - index: 13 - } - Property { - name: "particleRotationVariation" - type: "QVector3D" - read: "particleRotationVariation" - write: "setParticleRotationVariation" - notify: "particleRotationVariationChanged" - index: 14 - } - Property { - name: "particleRotationVelocity" - type: "QVector3D" - read: "particleRotationVelocity" - write: "setParticleRotationVelocity" - notify: "particleRotationVelocityChanged" - index: 15 - } - Property { - name: "particleRotationVelocityVariation" - type: "QVector3D" - read: "particleRotationVelocityVariation" - write: "setParticleRotationVelocityVariation" - notify: "particleRotationVariationVelocityChanged" - index: 16 - } - Property { - name: "depthBias" - type: "float" - read: "depthBias" - write: "setDepthBias" - notify: "depthBiasChanged" - index: 17 - } - Signal { name: "velocityChanged" } - Signal { name: "systemChanged" } - Signal { name: "emitRateChanged" } - Signal { name: "particleScaleChanged" } - Signal { name: "particleEndScaleChanged" } - Signal { name: "particleScaleVariationChanged" } - Signal { name: "particleEndScaleVariationChanged" } - Signal { name: "lifeSpanChanged" } - Signal { name: "lifeSpanVariationChanged" } - Signal { name: "particleChanged" } - Signal { name: "shapeChanged" } - Signal { name: "particleRotationChanged" } - Signal { name: "particleRotationVariationChanged" } - Signal { name: "particleRotationVelocityChanged" } - Signal { name: "particleRotationVariationVelocityChanged" } - Signal { name: "enabledChanged" } - Signal { name: "depthBiasChanged" } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setVelocity" - Parameter { name: "velocity"; type: "QQuick3DParticleDirection"; isPointer: true } - } - Method { - name: "setSystem" - Parameter { name: "system"; type: "QQuick3DParticleSystem"; isPointer: true } - } - Method { - name: "setEmitRate" - Parameter { name: "emitRate"; type: "float" } - } - Method { - name: "setParticleScale" - Parameter { name: "particleScale"; type: "float" } - } - Method { - name: "setParticleEndScale" - Parameter { name: "particleEndScale"; type: "float" } - } - Method { - name: "setParticleScaleVariation" - Parameter { name: "particleScaleVariation"; type: "float" } - } - Method { - name: "setParticleEndScaleVariation" - Parameter { name: "particleEndScaleVariation"; type: "float" } - } - Method { - name: "setLifeSpan" - Parameter { name: "lifeSpan"; type: "int" } - } - Method { - name: "setLifeSpanVariation" - Parameter { name: "lifeSpanVariation"; type: "int" } - } - Method { - name: "setParticle" - Parameter { name: "particle"; type: "QQuick3DParticle"; isPointer: true } - } - Method { - name: "setShape" - Parameter { name: "shape"; type: "QQuick3DParticleAbstractShape"; isPointer: true } - } - Method { - name: "setParticleRotation" - Parameter { name: "particleRotation"; type: "QVector3D" } - } - Method { - name: "setParticleRotationVariation" - Parameter { name: "particleRotationVariation"; type: "QVector3D" } - } - Method { - name: "setParticleRotationVelocity" - Parameter { name: "particleRotationVelocity"; type: "QVector3D" } - } - Method { - name: "setParticleRotationVelocityVariation" - Parameter { name: "particleRotationVelocityVariation"; type: "QVector3D" } - } - Method { - name: "setDepthBias" - Parameter { name: "bias"; type: "float" } - } - Method { - name: "burst" - Parameter { name: "count"; type: "int" } - } - Method { - name: "burst" - Parameter { name: "count"; type: "int" } - Parameter { name: "duration"; type: "int" } - } - Method { - name: "burst" - Parameter { name: "count"; type: "int" } - Parameter { name: "duration"; type: "int" } - Parameter { name: "position"; type: "QVector3D" } - } - } - Component { - file: "private/qquick3dparticlegravity_p.h" - name: "QQuick3DParticleGravity" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/Gravity3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "magnitude" - type: "float" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 0 - } - Property { - name: "direction" - type: "QVector3D" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 1 - } - Signal { name: "magnitudeChanged" } - Signal { name: "directionChanged" } - Method { - name: "setDirection" - Parameter { name: "direction"; type: "QVector3D" } - } - Method { - name: "setMagnitude" - Parameter { name: "magnitude"; type: "float" } - } - } - Component { - file: "private/qquick3dparticlelineparticle_p.h" - name: "QQuick3DParticleLineParticle" - accessSemantics: "reference" - prototype: "QQuick3DParticleSpriteParticle" - exports: ["QtQuick3D.Particles3D/LineParticle3D 6.4"] - exportMetaObjectRevisions: [1540] - Enum { - name: "TexcoordMode" - values: ["Absolute", "Relative", "Fill"] - } - Property { - name: "segmentCount" - type: "int" - read: "segmentCount" - write: "setSegmentCount" - notify: "segmentCountChanged" - index: 0 - } - Property { - name: "alphaFade" - type: "float" - read: "alphaFade" - write: "setAlphaFade" - notify: "alphaFadeChanged" - index: 1 - } - Property { - name: "scaleMultiplier" - type: "float" - read: "scaleMultiplier" - write: "setScaleMultiplier" - notify: "scaleMultiplierChanged" - index: 2 - } - Property { - name: "texcoordMultiplier" - type: "float" - read: "texcoordMultiplier" - write: "setTexcoordMultiplier" - notify: "texcoordMultiplierChanged" - index: 3 - } - Property { - name: "length" - type: "float" - read: "length" - write: "setLength" - notify: "lengthChanged" - index: 4 - } - Property { - name: "lengthVariation" - type: "float" - read: "lengthVariation" - write: "setLengthVariation" - notify: "lengthVariationChanged" - index: 5 - } - Property { - name: "lengthDeltaMin" - type: "float" - read: "lengthDeltaMin" - write: "setLengthDeltaMin" - notify: "lengthDeltaMinChanged" - index: 6 - } - Property { - name: "eolFadeOutDuration" - type: "int" - read: "eolFadeOutDuration" - write: "setEolFadeOutDuration" - notify: "eolFadeOutDurationChanged" - index: 7 - } - Property { - name: "texcoordMode" - type: "TexcoordMode" - read: "texcoordMode" - write: "setTexcoordMode" - notify: "texcoordModeChanged" - index: 8 - } - Signal { name: "segmentCountChanged" } - Signal { name: "alphaFadeChanged" } - Signal { name: "scaleMultiplierChanged" } - Signal { name: "texcoordMultiplierChanged" } - Signal { name: "lengthChanged" } - Signal { name: "lengthVariationChanged" } - Signal { name: "lengthDeltaMinChanged" } - Signal { name: "eolFadeOutDurationChanged" } - Signal { name: "texcoordModeChanged" } - Method { - name: "setSegmentCount" - Parameter { name: "count"; type: "int" } - } - Method { - name: "setAlphaFade" - Parameter { name: "fade"; type: "float" } - } - Method { - name: "setScaleMultiplier" - Parameter { name: "multiplier"; type: "float" } - } - Method { - name: "setTexcoordMultiplier" - Parameter { name: "multiplier"; type: "float" } - } - Method { - name: "setLength" - Parameter { name: "length"; type: "float" } - } - Method { - name: "setLengthVariation" - Parameter { name: "length"; type: "float" } - } - Method { - name: "setLengthDeltaMin" - Parameter { name: "min"; type: "float" } - } - Method { - name: "setEolFadeOutDuration" - Parameter { name: "duration"; type: "int" } - } - Method { - name: "setTexcoordMode" - Parameter { name: "mode"; type: "QQuick3DParticleLineParticle::TexcoordMode" } - } - } - Component { - file: "private/qquick3dparticlemodelblendparticle_p.h" - name: "QQuick3DParticleModelBlendParticle" - accessSemantics: "reference" - prototype: "QQuick3DParticle" - exports: ["QtQuick3D.Particles3D/ModelBlendParticle3D 6.2"] - exportMetaObjectRevisions: [1538] - Enum { - name: "ModelBlendMode" - values: ["Explode", "Construct", "Transfer"] - } - Enum { - name: "ModelBlendEmitMode" - values: ["Sequential", "Random", "Activation"] - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 0 - } - Property { - name: "endNode" - type: "QQuick3DNode" - isPointer: true - read: "endNode" - write: "setEndNode" - notify: "endNodeChanged" - index: 1 - } - Property { - name: "modelBlendMode" - type: "ModelBlendMode" - read: "modelBlendMode" - write: "setModelBlendMode" - notify: "modelBlendModeChanged" - index: 2 - } - Property { - name: "endTime" - type: "int" - read: "endTime" - write: "setEndTime" - notify: "endTimeChanged" - index: 3 - } - Property { - name: "activationNode" - type: "QQuick3DNode" - isPointer: true - read: "activationNode" - write: "setActivationNode" - notify: "activationNodeChanged" - index: 4 - } - Property { - name: "emitMode" - type: "ModelBlendEmitMode" - read: "emitMode" - write: "setEmitMode" - notify: "emitModeChanged" - index: 5 - } - Signal { name: "delegateChanged" } - Signal { name: "blendFactorChanged" } - Signal { name: "endNodeChanged" } - Signal { name: "modelBlendModeChanged" } - Signal { name: "endTimeChanged" } - Signal { name: "activationNodeChanged" } - Signal { name: "emitModeChanged" } - Method { - name: "setDelegate" - Parameter { name: "setDelegate"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "setEndNode" - Parameter { name: "endNode"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setEndTime" - Parameter { name: "endTime"; type: "int" } - } - Method { - name: "setModelBlendMode" - Parameter { name: "mode"; type: "ModelBlendMode" } - } - Method { - name: "setActivationNode" - Parameter { name: "activationNode"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setEmitMode" - Parameter { name: "emitMode"; type: "ModelBlendEmitMode" } - } - } - Component { - file: "private/qquick3dparticlemodelparticle_p.h" - name: "QQuick3DParticleModelParticle" - accessSemantics: "reference" - defaultProperty: "delegate" - prototype: "QQuick3DParticle" - exports: ["QtQuick3D.Particles3D/ModelParticle3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 0 - } - Property { - name: "instanceTable" - type: "QQuick3DInstancing" - isPointer: true - read: "instanceTable" - notify: "instanceTableChanged" - index: 1 - isReadonly: true - } - Signal { name: "delegateChanged" } - Signal { name: "instanceTableChanged" } - Method { - name: "setDelegate" - Parameter { name: "delegate"; type: "QQmlComponent"; isPointer: true } - } - } - Component { - file: "private/qquick3dparticlemodelshape_p.h" - name: "QQuick3DParticleModelShape" - accessSemantics: "reference" - prototype: "QQuick3DParticleAbstractShape" - exports: ["QtQuick3D.Particles3D/ParticleModelShape3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "fill" - type: "bool" - read: "fill" - write: "setFill" - notify: "fillChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Signal { name: "fillChanged" } - Signal { name: "delegateChanged" } - Method { - name: "setFill" - Parameter { name: "fill"; type: "bool" } - } - Method { - name: "setDelegate" - Parameter { name: "delegate"; type: "QQmlComponent"; isPointer: true } - } - Method { - name: "getPosition" - type: "QVector3D" - Parameter { name: "particleIndex"; type: "int" } - } - } - Component { - file: "private/qquick3dparticlepointrotator_p.h" - name: "QQuick3DParticlePointRotator" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/PointRotator3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "magnitude" - type: "float" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 0 - } - Property { - name: "direction" - type: "QVector3D" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 1 - } - Property { - name: "pivotPoint" - type: "QVector3D" - read: "pivotPoint" - write: "setPivotPoint" - notify: "pivotPointChanged" - index: 2 - } - Signal { name: "magnitudeChanged" } - Signal { name: "directionChanged" } - Signal { name: "pivotPointChanged" } - Method { - name: "setMagnitude" - Parameter { name: "magnitude"; type: "float" } - } - Method { - name: "setDirection" - Parameter { name: "direction"; type: "QVector3D" } - } - Method { - name: "setPivotPoint" - Parameter { name: "point"; type: "QVector3D" } - } - } - Component { - file: "private/qquick3dparticlerepeller_p.h" - name: "QQuick3DParticleRepeller" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/Repeller3D 6.4"] - exportMetaObjectRevisions: [1540] - Property { - name: "radius" - type: "float" - read: "radius" - write: "setRadius" - notify: "radiusChanged" - index: 0 - } - Property { - name: "outerRadius" - type: "float" - read: "outerRadius" - write: "setOuterRadius" - notify: "outerRadiusChanged" - index: 1 - } - Property { - name: "strength" - type: "float" - read: "strength" - write: "setStrength" - notify: "strengthChanged" - index: 2 - } - Signal { name: "radiusChanged" } - Signal { name: "outerRadiusChanged" } - Signal { name: "strengthChanged" } - Method { - name: "setRadius" - Parameter { name: "radius"; type: "float" } - } - Method { - name: "setOuterRadius" - Parameter { name: "radius"; type: "float" } - } - Method { - name: "setStrength" - Parameter { name: "strength"; type: "float" } - } - } - Component { - file: "private/qquick3dparticlescaleaffector_p.h" - name: "QQuick3DParticleScaleAffector" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/ScaleAffector3D 6.4"] - exportMetaObjectRevisions: [1540] - Enum { - name: "ScalingType" - values: [ - "Linear", - "SewSaw", - "SineWave", - "AbsSineWave", - "Step", - "SmoothStep" - ] - } - Property { - name: "minSize" - type: "float" - read: "minSize" - write: "setMinSize" - notify: "minSizeChanged" - index: 0 - } - Property { - name: "maxSize" - type: "float" - read: "maxSize" - write: "setMaxSize" - notify: "maxSizeChanged" - index: 1 - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 2 - } - Property { - name: "type" - type: "ScalingType" - read: "type" - write: "setType" - notify: "typeChanged" - index: 3 - } - Property { - name: "easingCurve" - type: "QEasingCurve" - read: "easingCurve" - write: "setEasingCurve" - notify: "easingCurveChanged" - index: 4 - } - Signal { name: "minSizeChanged" } - Signal { name: "maxSizeChanged" } - Signal { name: "durationChanged" } - Signal { name: "typeChanged" } - Signal { name: "easingCurveChanged" } - Method { - name: "setMinSize" - Parameter { name: "size"; type: "float" } - } - Method { - name: "setMaxSize" - Parameter { name: "size"; type: "float" } - } - Method { - name: "setDuration" - Parameter { name: "duration"; type: "int" } - } - Method { - name: "setType" - Parameter { name: "type"; type: "ScalingType" } - } - Method { - name: "setEasingCurve" - Parameter { name: "curve"; type: "QEasingCurve" } - } - } - Component { - file: "private/qquick3dparticleshape_p.h" - name: "QQuick3DParticleShape" - accessSemantics: "reference" - prototype: "QQuick3DParticleAbstractShape" - exports: ["QtQuick3D.Particles3D/ParticleShape3D 6.2"] - exportMetaObjectRevisions: [1538] - Enum { - name: "ShapeType" - values: ["Cube", "Sphere", "Cylinder"] - } - Property { - name: "fill" - type: "bool" - read: "fill" - write: "setFill" - notify: "fillChanged" - index: 0 - } - Property { - name: "type" - type: "ShapeType" - read: "type" - write: "setType" - notify: "typeChanged" - index: 1 - } - Property { - name: "extents" - type: "QVector3D" - read: "extents" - write: "setExtents" - notify: "extentsChanged" - index: 2 - } - Signal { name: "fillChanged" } - Signal { name: "typeChanged" } - Signal { name: "extentsChanged" } - Method { - name: "setFill" - Parameter { name: "fill"; type: "bool" } - } - Method { - name: "setType" - Parameter { name: "type"; type: "QQuick3DParticleShape::ShapeType" } - } - Method { - name: "setExtents" - Parameter { name: "extends"; type: "QVector3D" } - } - } - Component { - file: "private/qquick3dparticlespriteparticle_p.h" - name: "QQuick3DParticleSpriteParticle" - accessSemantics: "reference" - prototype: "QQuick3DParticle" - exports: [ - "QtQuick3D.Particles3D/SpriteParticle3D 6.2", - "QtQuick3D.Particles3D/SpriteParticle3D 6.3", - "QtQuick3D.Particles3D/SpriteParticle3D 6.4" - ] - exportMetaObjectRevisions: [1538, 1539, 1540] - Enum { - name: "BlendMode" - values: ["SourceOver", "Screen", "Multiply"] - } - Property { - name: "blendMode" - type: "BlendMode" - read: "blendMode" - write: "setBlendMode" - notify: "blendModeChanged" - index: 0 - } - Property { - name: "sprite" - type: "QQuick3DTexture" - isPointer: true - read: "sprite" - write: "setSprite" - notify: "spriteChanged" - index: 1 - } - Property { - name: "spriteSequence" - type: "QQuick3DParticleSpriteSequence" - isPointer: true - read: "spriteSequence" - write: "setSpriteSequence" - notify: "spriteSequenceChanged" - index: 2 - } - Property { - name: "billboard" - type: "bool" - read: "billboard" - write: "setBillboard" - notify: "billboardChanged" - index: 3 - } - Property { - name: "particleScale" - type: "float" - read: "particleScale" - write: "setParticleScale" - notify: "particleScaleChanged" - index: 4 - } - Property { - name: "colorTable" - type: "QQuick3DTexture" - isPointer: true - read: "colorTable" - write: "setColorTable" - notify: "colorTableChanged" - index: 5 - } - Property { - name: "lights" - revision: 1539 - type: "QQuick3DAbstractLight" - isList: true - read: "lights" - notify: "lightsChanged" - index: 6 - isReadonly: true - } - Property { - name: "offsetX" - revision: 1539 - type: "float" - read: "offsetX" - write: "setOffsetX" - notify: "offsetXChanged" - index: 7 - } - Property { - name: "offsetY" - revision: 1539 - type: "float" - read: "offsetY" - write: "setOffsetY" - notify: "offsetYChanged" - index: 8 - } - Property { - name: "castsReflections" - revision: 1540 - type: "bool" - read: "castsReflections" - write: "setCastsReflections" - notify: "castsReflectionsChanged" - index: 9 - } - Signal { name: "blendModeChanged" } - Signal { name: "spriteChanged" } - Signal { name: "spriteSequenceChanged" } - Signal { name: "billboardChanged" } - Signal { name: "particleScaleChanged" } - Signal { name: "colorTableChanged" } - Signal { name: "lightsChanged"; revision: 1539 } - Signal { name: "offsetXChanged"; revision: 1539 } - Signal { name: "offsetYChanged"; revision: 1539 } - Signal { name: "castsReflectionsChanged"; revision: 1540 } - Method { - name: "setBlendMode" - Parameter { name: "blendMode"; type: "QQuick3DParticleSpriteParticle::BlendMode" } - } - Method { - name: "setSprite" - Parameter { name: "sprite"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpriteSequence" - Parameter { name: "spriteSequence"; type: "QQuick3DParticleSpriteSequence"; isPointer: true } - } - Method { - name: "setBillboard" - Parameter { name: "billboard"; type: "bool" } - } - Method { - name: "setParticleScale" - Parameter { name: "scale"; type: "float" } - } - Method { - name: "setColorTable" - Parameter { name: "colorTable"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOffsetX" - Parameter { name: "value"; type: "float" } - } - Method { - name: "setOffsetY" - Parameter { name: "value"; type: "float" } - } - Method { - name: "setCastsReflections" - revision: 1540 - Parameter { name: "castsReflections"; type: "bool" } - } - Method { - name: "onLightDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qquick3dparticlespritesequence_p.h" - name: "QQuick3DParticleSpriteSequence" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick3D.Particles3D/SpriteSequence3D 6.2"] - exportMetaObjectRevisions: [1538] - Enum { - name: "AnimationDirection" - values: [ - "Normal", - "Reverse", - "Alternate", - "AlternateReverse", - "SingleFrame" - ] - } - Property { - name: "frameCount" - type: "int" - read: "frameCount" - write: "setFrameCount" - notify: "frameCountChanged" - index: 0 - } - Property { - name: "frameIndex" - type: "int" - read: "frameIndex" - write: "setFrameIndex" - notify: "frameIndexChanged" - index: 1 - } - Property { - name: "interpolate" - type: "bool" - read: "interpolate" - write: "setInterpolate" - notify: "interpolateChanged" - index: 2 - } - Property { - name: "duration" - type: "int" - read: "duration" - write: "setDuration" - notify: "durationChanged" - index: 3 - } - Property { - name: "durationVariation" - type: "int" - read: "durationVariation" - write: "setDurationVariation" - notify: "durationVariationChanged" - index: 4 - } - Property { - name: "randomStart" - type: "bool" - read: "randomStart" - write: "setRandomStart" - notify: "randomStartChanged" - index: 5 - } - Property { - name: "animationDirection" - type: "AnimationDirection" - read: "animationDirection" - write: "setAnimationDirection" - notify: "animationDirectionChanged" - index: 6 - } - Signal { name: "frameCountChanged" } - Signal { name: "frameIndexChanged" } - Signal { name: "interpolateChanged" } - Signal { name: "durationChanged" } - Signal { name: "durationVariationChanged" } - Signal { name: "randomStartChanged" } - Signal { name: "animationDirectionChanged" } - Method { - name: "setFrameCount" - Parameter { name: "frameCount"; type: "int" } - } - Method { - name: "setFrameIndex" - Parameter { name: "frameIndex"; type: "int" } - } - Method { - name: "setInterpolate" - Parameter { name: "interpolate"; type: "bool" } - } - Method { - name: "setDuration" - Parameter { name: "duration"; type: "int" } - } - Method { - name: "setDurationVariation" - Parameter { name: "durationVariation"; type: "int" } - } - Method { - name: "setRandomStart" - Parameter { name: "randomStart"; type: "bool" } - } - Method { - name: "setAnimationDirection" - Parameter { - name: "animationDirection" - type: "QQuick3DParticleSpriteSequence::AnimationDirection" - } - } - } - Component { - file: "private/qquick3dparticlesystem_p.h" - name: "QQuick3DParticleSystem" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.Particles3D/ParticleSystem3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "running" - type: "bool" - read: "isRunning" - write: "setRunning" - notify: "runningChanged" - index: 0 - } - Property { - name: "paused" - type: "bool" - read: "isPaused" - write: "setPaused" - notify: "pausedChanged" - index: 1 - } - Property { - name: "startTime" - type: "int" - read: "startTime" - write: "setStartTime" - notify: "startTimeChanged" - index: 2 - } - Property { - name: "time" - type: "int" - read: "time" - write: "setTime" - notify: "timeChanged" - index: 3 - } - Property { - name: "useRandomSeed" - type: "bool" - read: "useRandomSeed" - write: "setUseRandomSeed" - notify: "useRandomSeedChanged" - index: 4 - } - Property { - name: "seed" - type: "int" - read: "seed" - write: "setSeed" - notify: "seedChanged" - index: 5 - } - Property { - name: "logging" - type: "bool" - read: "logging" - write: "setLogging" - notify: "loggingChanged" - index: 6 - } - Property { - name: "loggingData" - type: "QQuick3DParticleSystemLogging" - isPointer: true - read: "loggingData" - notify: "loggingDataChanged" - index: 7 - isReadonly: true - } - Signal { name: "runningChanged" } - Signal { name: "pausedChanged" } - Signal { name: "timeChanged" } - Signal { name: "startTimeChanged" } - Signal { name: "useRandomSeedChanged" } - Signal { name: "seedChanged" } - Signal { name: "loggingChanged" } - Signal { name: "loggingDataChanged" } - Method { - name: "setRunning" - Parameter { name: "running"; type: "bool" } - } - Method { - name: "setPaused" - Parameter { name: "paused"; type: "bool" } - } - Method { - name: "setStartTime" - Parameter { name: "startTime"; type: "int" } - } - Method { - name: "setTime" - Parameter { name: "time"; type: "int" } - } - Method { - name: "setUseRandomSeed" - Parameter { name: "randomize"; type: "bool" } - } - Method { - name: "setSeed" - Parameter { name: "seed"; type: "int" } - } - Method { - name: "setLogging" - Parameter { name: "logging"; type: "bool" } - } - Method { - name: "setEditorTime" - Parameter { name: "time"; type: "int" } - } - Method { name: "reset" } - } - Component { - file: "private/qquick3dparticlesystemlogging_p.h" - name: "QQuick3DParticleSystemLogging" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "loggingInterval" - type: "int" - read: "loggingInterval" - write: "setLoggingInterval" - notify: "loggingIntervalChanged" - index: 0 - } - Property { - name: "updates" - type: "int" - read: "updates" - notify: "updatesChanged" - index: 1 - isReadonly: true - } - Property { - name: "particlesMax" - type: "int" - read: "particlesMax" - notify: "particlesMaxChanged" - index: 2 - isReadonly: true - } - Property { - name: "particlesUsed" - type: "int" - read: "particlesUsed" - notify: "particlesUsedChanged" - index: 3 - isReadonly: true - } - Property { - name: "time" - type: "float" - read: "time" - notify: "timeChanged" - index: 4 - isReadonly: true - } - Property { - name: "timeAverage" - type: "float" - read: "timeAverage" - notify: "timeAverageChanged" - index: 5 - isReadonly: true - } - Property { - name: "timeDeviation" - revision: 1539 - type: "float" - read: "timeDeviation" - notify: "timeDeviationChanged" - index: 6 - isReadonly: true - } - Signal { name: "loggingIntervalChanged" } - Signal { name: "updatesChanged" } - Signal { name: "particlesMaxChanged" } - Signal { name: "particlesUsedChanged" } - Signal { name: "timeChanged" } - Signal { name: "timeAverageChanged" } - Signal { name: "timeDeviationChanged"; revision: 1539 } - Method { - name: "setLoggingInterval" - Parameter { name: "interval"; type: "int" } - } - } - Component { - file: "private/qquick3dparticletargetdirection_p.h" - name: "QQuick3DParticleTargetDirection" - accessSemantics: "reference" - prototype: "QQuick3DParticleDirection" - exports: ["QtQuick3D.Particles3D/TargetDirection3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "position" - type: "QVector3D" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - } - Property { - name: "positionVariation" - type: "QVector3D" - read: "positionVariation" - write: "setPositionVariation" - notify: "positionVariationChanged" - index: 1 - } - Property { - name: "normalized" - type: "bool" - read: "normalized" - write: "setNormalized" - notify: "normalizedChanged" - index: 2 - } - Property { - name: "magnitude" - type: "float" - read: "magnitude" - write: "setMagnitude" - notify: "magnitudeChanged" - index: 3 - } - Property { - name: "magnitudeVariation" - type: "float" - read: "magnitudeVariation" - write: "setMagnitudeVariation" - notify: "magnitudeChangedVariation" - index: 4 - } - Signal { name: "positionChanged" } - Signal { name: "positionVariationChanged" } - Signal { name: "normalizedChanged" } - Signal { name: "magnitudeChanged" } - Signal { name: "magnitudeChangedVariation" } - Method { - name: "setPositionVariation" - Parameter { name: "positionVariation"; type: "QVector3D" } - } - Method { - name: "setNormalized" - Parameter { name: "normalized"; type: "bool" } - } - Method { - name: "setMagnitude" - Parameter { name: "magnitude"; type: "float" } - } - Method { - name: "setMagnitudeVariation" - Parameter { name: "magnitudeVariation"; type: "float" } - } - } - Component { - file: "private/qquick3dparticletrailemitter_p.h" - name: "QQuick3DParticleTrailEmitter" - accessSemantics: "reference" - prototype: "QQuick3DParticleEmitter" - exports: ["QtQuick3D.Particles3D/TrailEmitter3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "follow" - type: "QQuick3DParticle" - isPointer: true - read: "follow" - write: "setFollow" - notify: "followChanged" - index: 0 - } - Signal { name: "followChanged" } - Method { - name: "setFollow" - Parameter { name: "follow"; type: "QQuick3DParticle"; isPointer: true } - } - Method { - name: "burst" - Parameter { name: "count"; type: "int" } - } - } - Component { - file: "private/qquick3dparticlevectordirection_p.h" - name: "QQuick3DParticleVectorDirection" - accessSemantics: "reference" - prototype: "QQuick3DParticleDirection" - exports: ["QtQuick3D.Particles3D/VectorDirection3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "direction" - type: "QVector3D" - read: "direction" - write: "setDirection" - notify: "directionChanged" - index: 0 - } - Property { - name: "directionVariation" - type: "QVector3D" - read: "directionVariation" - write: "setDirectionVariation" - notify: "directionVariationChanged" - index: 1 - } - Property { - name: "normalized" - type: "bool" - read: "normalized" - write: "setNormalized" - notify: "normalizedChanged" - index: 2 - } - Signal { name: "directionChanged" } - Signal { name: "directionVariationChanged" } - Signal { name: "normalizedChanged" } - Method { - name: "setDirection" - Parameter { name: "direction"; type: "QVector3D" } - } - Method { - name: "setDirectionVariation" - Parameter { name: "directionVariation"; type: "QVector3D" } - } - Method { - name: "setNormalized" - Parameter { name: "normalized"; type: "bool" } - } - } - Component { - file: "private/qquick3dparticlewander_p.h" - name: "QQuick3DParticleWander" - accessSemantics: "reference" - prototype: "QQuick3DParticleAffector" - exports: ["QtQuick3D.Particles3D/Wander3D 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "globalAmount" - type: "QVector3D" - read: "globalAmount" - write: "setGlobalAmount" - notify: "globalAmountChanged" - index: 0 - } - Property { - name: "globalPace" - type: "QVector3D" - read: "globalPace" - write: "setGlobalPace" - notify: "globalPaceChanged" - index: 1 - } - Property { - name: "globalPaceStart" - type: "QVector3D" - read: "globalPaceStart" - write: "setGlobalPaceStart" - notify: "globalPaceStartChanged" - index: 2 - } - Property { - name: "uniqueAmount" - type: "QVector3D" - read: "uniqueAmount" - write: "setUniqueAmount" - notify: "uniqueAmountChanged" - index: 3 - } - Property { - name: "uniquePace" - type: "QVector3D" - read: "uniquePace" - write: "setUniquePace" - notify: "uniquePaceChanged" - index: 4 - } - Property { - name: "uniqueAmountVariation" - type: "float" - read: "uniqueAmountVariation" - write: "setUniqueAmountVariation" - notify: "uniqueAmountVariationChanged" - index: 5 - } - Property { - name: "uniquePaceVariation" - type: "float" - read: "uniquePaceVariation" - write: "setUniquePaceVariation" - notify: "uniquePaceVariationChanged" - index: 6 - } - Property { - name: "fadeInDuration" - type: "int" - read: "fadeInDuration" - write: "setFadeInDuration" - notify: "fadeInDurationChanged" - index: 7 - } - Property { - name: "fadeOutDuration" - type: "int" - read: "fadeOutDuration" - write: "setFadeOutDuration" - notify: "fadeOutDurationChanged" - index: 8 - } - Signal { name: "globalAmountChanged" } - Signal { name: "globalPaceChanged" } - Signal { name: "globalPaceStartChanged" } - Signal { name: "uniqueAmountChanged" } - Signal { name: "uniquePaceChanged" } - Signal { name: "uniqueAmountVariationChanged" } - Signal { name: "uniquePaceVariationChanged" } - Signal { name: "fadeInDurationChanged" } - Signal { name: "fadeOutDurationChanged" } - Method { - name: "setGlobalAmount" - Parameter { name: "globalAmount"; type: "QVector3D" } - } - Method { - name: "setGlobalPace" - Parameter { name: "globalPace"; type: "QVector3D" } - } - Method { - name: "setGlobalPaceStart" - Parameter { name: "globalPaceStart"; type: "QVector3D" } - } - Method { - name: "setUniqueAmount" - Parameter { name: "uniqueAmount"; type: "QVector3D" } - } - Method { - name: "setUniquePace" - Parameter { name: "uniquePace"; type: "QVector3D" } - } - Method { - name: "setUniqueAmountVariation" - Parameter { name: "uniqueAmountVariation"; type: "float" } - } - Method { - name: "setUniquePaceVariation" - Parameter { name: "uniquePaceVariation"; type: "float" } - } - Method { - name: "setFadeInDuration" - Parameter { name: "fadeInDuration"; type: "int" } - } - Method { - name: "setFadeOutDuration" - Parameter { name: "fadeOutDuration"; type: "int" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/qmldir deleted file mode 100644 index 840899a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Particles3D/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick3D.Particles3D -linktarget Qt6::qtquick3dparticles3dplugin -optional plugin qtquick3dparticles3dplugin -classname QtQuick3DParticles3DPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick3D auto -prefer :/qt-project.org/imports/QtQuick3D/Particles3D/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/libqtquick3dphysicshelpersplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/libqtquick3dphysicshelpersplugin.so deleted file mode 100755 index 189366d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/libqtquick3dphysicshelpersplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/plugins.qmltypes deleted file mode 100644 index 68ddeb5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/plugins.qmltypes +++ /dev/null @@ -1,83 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qcapsulegeometry_p.h" - name: "CapsuleGeometry" - accessSemantics: "reference" - prototype: "QQuick3DGeometry" - exports: [ - "QtQuick3D.Physics.Helpers/CapsuleGeometry 6.0", - "QtQuick3D.Physics.Helpers/CapsuleGeometry 6.7" - ] - exportMetaObjectRevisions: [1536, 1543] - Property { - name: "enableNormals" - type: "bool" - read: "enableNormals" - write: "setEnableNormals" - notify: "enableNormalsChanged" - index: 0 - } - Property { - name: "enableUV" - type: "bool" - read: "enableUV" - write: "setEnableUV" - notify: "enableUVChanged" - index: 1 - } - Property { - name: "longitudes" - type: "int" - read: "longitudes" - write: "setLongitudes" - notify: "longitudesChanged" - index: 2 - } - Property { - name: "latitudes" - type: "int" - read: "latitudes" - write: "setLatitudes" - notify: "latitudesChanged" - index: 3 - } - Property { - name: "rings" - type: "int" - read: "rings" - write: "setRings" - notify: "ringsChanged" - index: 4 - } - Property { - name: "height" - type: "float" - read: "height" - write: "setHeight" - notify: "heightChanged" - index: 5 - } - Property { - name: "diameter" - type: "float" - read: "diameter" - write: "setDiameter" - notify: "diameterChanged" - index: 6 - } - Signal { name: "enableNormalsChanged" } - Signal { name: "enableUVChanged" } - Signal { name: "longitudesChanged" } - Signal { name: "latitudesChanged" } - Signal { name: "ringsChanged" } - Signal { name: "heightChanged" } - Signal { name: "diameterChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/qmldir deleted file mode 100644 index 0a2013e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/qmldir +++ /dev/null @@ -1,11 +0,0 @@ -module QtQuick3D.Physics.Helpers -linktarget Qt6::qtquick3dphysicshelpersplugin -optional plugin qtquick3dphysicshelpersplugin -classname QtQuick3DPhysicsHelpersPlugin -typeinfo plugins.qmltypes -depends QtQuick3D.Physics auto -depends QtQuick3D auto -depends QtQuick auto -depends QtQuick3D -prefer :/qt-project.org/imports/QtQuick3D/Physics/Helpers/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSection.qml deleted file mode 100644 index a4e8562..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSection.qml +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Box Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Extents") - tooltip: qsTr("The extents of the box shape in the X, Y and Z directions.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSpecifics.qml deleted file mode 100644 index bf6f1b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - BoxShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSection.qml deleted file mode 100644 index c2a68ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSection.qml +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Capsule Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Diameter") - tooltip: qsTr("Sets the diameter of the capsule.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.diameter - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Height") - tooltip: qsTr("Sets the height of the capsule.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.height - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSpecifics.qml deleted file mode 100644 index e97215a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - CapsuleShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSection.qml deleted file mode 100644 index 91baa80..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSection.qml +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Character Controller") - width: parent.width - - SectionLayout { - PropertyLabel { - text: "Gravity" - tooltip: "The gravitational acceleration that applies to the character." - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Movement" - tooltip: "The controlled motion of the character." - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.movement_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.movement_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.movement_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Mid Air Control" - tooltip: "Enables movement property to have an effect when the character is in free fall." - } - - SecondColumnLayout { - CheckBox { - text: backendValues.midAirControl.valueToString - backendValue: backendValues.midAirControl - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Enable ShapeHit Callback" - tooltip: "Enables the shapeHit callback for this character controller." - } - - SecondColumnLayout { - CheckBox { - text: backendValues.midAirControl.valueToString - backendValue: backendValues.midAirControl - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSpecifics.qml deleted file mode 100644 index 148efcd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - CharacterControllerSection { - width: parent.width - } - - PhysicsBodySection { - width: parent.width - } - - PhysicsNodeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CollisionShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CollisionShapeSection.qml deleted file mode 100644 index 5dcd724..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CollisionShapeSection.qml +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Collision Shape") - - SectionLayout { - PropertyLabel { - text: qsTr("Debug Draw") - tooltip: qsTr("Draws the collision shape in the scene view.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.enableDebugDraw.valueToString - backendValue: backendValues.enableDebugDraw - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSection.qml deleted file mode 100644 index 7d79798..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - - -Section { - caption: qsTr("Convex Mesh Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Defines the location of the mesh file used to define the shape.") - } - - SecondColumnLayout { - UrlChooser { - id: sourceUrlChooser - backendValue: backendValues.source - filter: "*.mesh" - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSpecifics.qml deleted file mode 100644 index 3813f31..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ConvexMeshShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySection.qml deleted file mode 100644 index 4406716..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySection.qml +++ /dev/null @@ -1,658 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Dynamic Rigid Body") - - SectionLayout { - id: baseSectionLayout - - property bool isDefaultDensityMode: massModeComboBox.currentIndex === 0 - property bool isCustomDensityMode: massModeComboBox.currentIndex === 1 - property bool isMassMode: massModeComboBox.currentIndex === 2 - property bool isMassAndInertiaTensorMode: massModeComboBox.currentIndex === 3 - property bool isMassAndInertiaMatrixMode: massModeComboBox.currentIndex === 4 - - PropertyLabel { - text: "Mass Mode" - tooltip: "Describes how mass and inertia are calculated for this body." - } - - SecondColumnLayout { - ComboBox { - id: massModeComboBox - scope: "DynamicRigidBody" - model: ["DefaultDensity", "CustomDensity", "Mass", "MassAndInertiaTensor", "MassAndInertiaMatrix"] - backendValue: backendValues.massMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode - } - - SecondColumnLayout { - visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - Label { - text: qsTr("Tensor and Matrix modes require QML code.") - Layout.fillWidth: true - Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth - Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth - Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth - } - } - - PropertyLabel { - visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode - text: "Mass" - tooltip: "The mass of the body." - } - - SecondColumnLayout { - visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.mass - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isCustomDensityMode - text: "Density" - tooltip: "The density of the body." - } - - SecondColumnLayout { - visible: baseSectionLayout.isCustomDensityMode - SpinBox { - minimumValue: -1 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.density - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Enable Gravity" - tooltip: "Sets if the body affected by gravity." - } - - SecondColumnLayout { - CheckBox { - text: backendValues.gravityEnabled.valueToString - backendValue: backendValues.gravityEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Linear Axis Lock" - tooltip: "Lock the linear axis of the body." - } - - SecondColumnLayout { - ActionIndicator { - id: linearAxisLockController - icon.color: extFuncLogic.color - icon.text: extFuncLogic.glyph - onClicked: extFuncLogic.show() - forceVisible: extFuncLogic.menuVisible - visible: true - - property var enableLockX: { "value": false, "isInModel": false} - property var enableLockY: { "value": false, "isInModel": false} - property var enableLockZ: { "value": false, "isInModel": false} - - property variant backendValue: backendValues.linearAxisLock - property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value - property bool blockLocks: false - - onBackendValueChanged: evaluateLocks() - onValueFromBackendChanged: evaluateLocks() - - Connections { - target: modelNodeBackend - function onSelectionChanged() { - evaluateLevels() - } - } - - Component.onCompleted: evaluateLocks() - - function evaluateLocks() { - blockLocks = true - enableLockX = { "value": valueFromBackend & 1, "isInModel": false} - enableLockY = { "value": valueFromBackend & 2, "isInModel": false} - enableLockZ = { "value": valueFromBackend & 4, "isInModel": false} - blockLocks = false - } - - function composeExpressionString() { - if (blockLocks) - return - - let expressionStr = ""; - - if (enableLockX.value || enableLockY.value || enableLockY.value) { - if (enableLockX.value) - expressionStr += " | DynamicRigidBody.LockX"; - if (enableLockY.value) - expressionStr += " | DynamicRigidBody.LockY"; - if (enableLockZ.value) - expressionStr += " | DynamicRigidBody.LockZ"; - - expressionStr = expressionStr.substring(3); - - backendValue.expression = expressionStr - } else { - expressionStr = "DynamicRigidBody.None"; - backendValue.expression = expressionStr - } - } - ExtendedFunctionLogic { - id: extFuncLogic - backendValue: backendValues.linearAxisLock - onReseted: { - linearAxisLockController.enableLockX = { "value": false, "isInModel": false} - linearAxisLockController.enableLockY = { "value": false, "isInModel": false} - linearAxisLockController.enableLockZ = { "value": false, "isInModel": false} - linearAxisLockController.evaluateLocks() - } - } - } - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock X") - backendValue: linearAxisLockController.enableLockX - actionIndicatorVisible: false - onCheckedChanged: linearAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock Y") - backendValue: linearAxisLockController.enableLockY - actionIndicatorVisible: false - onCheckedChanged: linearAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock Z") - backendValue: linearAxisLockController.enableLockZ - actionIndicatorVisible: false - onCheckedChanged: linearAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Angular Axis Lock" - tooltip: "Lock the angular axis of the body." - } - - SecondColumnLayout { - ActionIndicator { - id: angularAxisLockController - icon.color: extFuncLogicAngular.color - icon.text: extFuncLogicAngular.glyph - onClicked: extFuncLogicAngular.show() - forceVisible: extFuncLogic.menuVisible - visible: true - - property var enableLockX: { "value": false, "isInModel": false} - property var enableLockY: { "value": false, "isInModel": false} - property var enableLockZ: { "value": false, "isInModel": false} - - property variant backendValue: backendValues.angularAxisLock - property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value - property bool blockLocks: false - - onBackendValueChanged: evaluateLocks() - onValueFromBackendChanged: evaluateLocks() - - Connections { - target: modelNodeBackend - function onSelectionChanged() { - evaluateLevels() - } - } - - Component.onCompleted: evaluateLocks() - - function evaluateLocks() { - blockLocks = true - enableLockX = { "value": valueFromBackend & 1, "isInModel": false} - enableLockY = { "value": valueFromBackend & 2, "isInModel": false} - enableLockZ = { "value": valueFromBackend & 4, "isInModel": false} - blockLocks = false - } - - function composeExpressionString() { - if (blockLocks) - return - - let expressionStr = ""; - - if (enableLockX.value || enableLockY.value || enableLockY.value) { - if (enableLockX.value) - expressionStr += " | DynamicRigidBody.LockX"; - if (enableLockY.value) - expressionStr += " | DynamicRigidBody.LockY"; - if (enableLockZ.value) - expressionStr += " | DynamicRigidBody.LockZ"; - - expressionStr = expressionStr.substring(3); - - backendValue.expression = expressionStr - } else { - expressionStr = "DynamicRigidBody.None"; - backendValue.expression = expressionStr - } - } - ExtendedFunctionLogic { - id: extFuncLogicAngular - backendValue: backendValues.angularAxisLock - onReseted: { - angularAxisLockController.enableLockX = { "value": false, "isInModel": false} - angularAxisLockController.enableLockY = { "value": false, "isInModel": false} - angularAxisLockController.enableLockZ = { "value": false, "isInModel": false} - angularAxisLockController.evaluateLocks() - } - } - } - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock X") - backendValue: angularAxisLockController.enableLockX - actionIndicatorVisible: false - onCheckedChanged: angularAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock Y") - backendValue: angularAxisLockController.enableLockY - actionIndicatorVisible: false - onCheckedChanged: angularAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - // spacer - } - - SecondColumnLayout { - - Item { - // spacer for the always hiden action indicator - width: StudioTheme.Values.actionIndicatorWidth - } - - CheckBox { - text: qsTr("Lock Z") - backendValue: angularAxisLockController.enableLockZ - actionIndicatorVisible: false - onCheckedChanged: angularAxisLockController.composeExpressionString() - implicitWidth: StudioTheme.Values.twoControlColumnWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: "Is Kinematic" - tooltip: "Kinematic objects are not influenced by external forces and can be seen as an object of infinite mass." - } - - SecondColumnLayout { - CheckBox { - id: isKinematicCheckBox - text: backendValues.isKinematic.valueToString - backendValue: backendValues.isKinematic - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - text: "Kinematic Position" - tooltip: "The position of the kinematic object." - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPosition_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPosition_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPosition_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - text: "Kinematic Rotation" - tooltip: "The rotation of the kinematic object." - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicEulerRotation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicEulerRotation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicEulerRotation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - text: "Kinematic Pivot" - tooltip: "The pivot point of the kinematic object." - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPivot_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPivot_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: isKinematicCheckBox.checked - } - - SecondColumnLayout { - visible: isKinematicCheckBox.checked - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.kinematicPivot_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } -} - - // Other Properties Not covered by the UI - // QVector3D inertiaTensor - // QVector3D centerOfMassPosition - // QQuaternion centerOfMassRotation - // List inertiaMatrix (9 floats for a Mat3x3) - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySpecifics.qml deleted file mode 100644 index c71ab81..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DynamicRigidBodySection { - width: parent.width - } - - PhysicsBodySection { - width: parent.width - } - - PhysicsNodeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSection.qml deleted file mode 100644 index f9419db..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSection.qml +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Height Field Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of an image file containing the heightmap data.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.source - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Extents") - tooltip: qsTr("The extents of the height field shape in the X, Y and Z directions.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.extents_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSpecifics.qml deleted file mode 100644 index 66f6e10..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - HeightFieldShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/NodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/NodeSection.qml deleted file mode 100644 index 9e760f4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/NodeSection.qml +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Node") - - SectionLayout { - PropertyLabel { - text: qsTr("Opacity") - tooltip: qsTr("Sets the local opacity value of the node.") - } - - SecondColumnLayout { - // ### should be a slider - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Visibility") - tooltip: qsTr("Sets the local visibility of the node.") - } - - SecondColumnLayout { - // ### should be a slider - CheckBox { - text: qsTr("Is Visible") - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: transformSection - width: parent.width - caption: qsTr("Transform") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Translation") - tooltip: qsTr("Sets the translation of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the node in degrees.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pivot") - tooltip: qsTr("Sets the pivot of the node.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsBodySection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsBodySection.qml deleted file mode 100644 index d9efa44..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsBodySection.qml +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Physics Body") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Physics Material") - tooltip: qsTr("The physics material of the body.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Physics.PhysicsMaterial" - backendValue: backendValues.physicsMaterial - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSection.qml deleted file mode 100644 index 4403995..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSection.qml +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Physics Material") - width: parent.width - - SectionLayout { - PropertyLabel { - text: "Static Friction" - tooltip: "The friction coefficient of the material when it is not moving." - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.staticFriction - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - ExpandingSpacer {} - } - - PropertyLabel { - text: "Dynamic Friction" - tooltip: "The friction coefficient of the material when it is moving." - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.dynamicFriction - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - ExpandingSpacer {} - } - - PropertyLabel { - text: "Restitution" - tooltip: "The coefficient of restitution of the material." - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.restitution - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSpecifics.qml deleted file mode 100644 index 49aa5f2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSpecifics.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - PhysicsMaterialSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsNodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsNodeSection.qml deleted file mode 100644 index 6d70b7f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsNodeSection.qml +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Physics Node") - - SectionLayout { - PropertyLabel { - text: qsTr("Collision Shapes") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.collisionShapes - model: backendValues.collisionShapes.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Physics.CollisionShape" - - onAdd: function(value) { backendValues.collisionShapes.idListAdd(value) } - onRemove: function(idx) { backendValues.collisionShapes.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.collisionShapes.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Receive Contact Reports") - tooltip: qsTr("Determines whether this body will receive contact reports when colliding with other bodies.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.receiveContactReports.valueToString - backendValue: backendValues.receiveContactReports - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Send Contact Reports") - tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.sendContactReports.valueToString - backendValue: backendValues.sendContactReports - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Receive Trigger Reports") - tooltip: qsTr("Determines whether this body will receive reports when entering or leaving a trigger body.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.receiveTriggerReports.valueToString - backendValue: backendValues.receiveTriggerReports - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Send Trigger Reports") - tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.sendTriggerReports.valueToString - backendValue: backendValues.sendTriggerReports - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSection.qml deleted file mode 100644 index aca9546..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSection.qml +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Physics World") - width: parent.width - - SectionLayout { - // Q_PROPERTY(QQuick3DNode *scene - PropertyLabel { - text: qsTr("Scene") - tooltip: qsTr("The scene node to which the physics world is attached.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.scene - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(QQuick3DNode *viewport - PropertyLabel { - text: qsTr("Viewport") - tooltip: qsTr("The node to which the debug geometry of the physics world is added.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.viewport - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(bool running) - PropertyLabel { - text: qsTr("Running") - tooltip: qsTr("Whether the physics world is running.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.running.valueToString - backendValue: backendValues.running - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(bool forceDebugDraw - PropertyLabel { - text: qsTr("Force Debug Draw") - tooltip: qsTr("Whether to force debug drawing of the physics world.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.forceDebugDraw.valueToString - backendValue: backendValues.forceDebugDraw - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(bool enableCCD - PropertyLabel { - text: qsTr("CCD") - tooltip: qsTr("Whether to enable continuous collision detection.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.enableCCD.valueToString - backendValue: backendValues.enableCCD - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(QVector3D gravity) - PropertyLabel { - text: qsTr("Gravity") - tooltip: qsTr("The gravity vector.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.gravity_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(float typicalLength) - PropertyLabel { - text: qsTr("Typical Length") - tooltip: qsTr("The typical length of objects in the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.00001 - maximumValue: 9999999 - decimals: 5 - backendValue: backendValues.typicalLength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(float typicalSpeed - PropertyLabel { - text: qsTr("Typical Speed") - tooltip: qsTr("The typical speed of objects in the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.00001 - maximumValue: 9999999 - decimals: 5 - backendValue: backendValues.typicalSpeed - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(float defaultDensity) - PropertyLabel { - text: qsTr("Default Density") - tooltip: qsTr("The default density of objects in the scene.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.00001 - maximumValue: 9999999 - decimals: 5 - backendValue: backendValues.defaultDensity - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(float minimumTimestep) - PropertyLabel { - text: qsTr("Min Timestep") - tooltip: qsTr("Defines the minimum simulation timestep in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.001 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.minimumTimestep - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // Q_PROPERTY(float maximumTimestep) - PropertyLabel { - text: qsTr("Max Timestep") - tooltip: qsTr("Defines the maximum simulation timestep in milliseconds.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.001 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.maximumTimestep - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSpecifics.qml deleted file mode 100644 index 74cdd13..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PhysicsWorldSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PlaneShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PlaneShapeSpecifics.qml deleted file mode 100644 index 71566d6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PlaneShapeSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSection.qml deleted file mode 100644 index daeaa69..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSection.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Sphere Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Diameter") - tooltip: qsTr("Sets the diameter of the capsule.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 3 - backendValue: backendValues.diameter - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSpecifics.qml deleted file mode 100644 index fb5fa86..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SphereShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/StaticRigidBodySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/StaticRigidBodySpecifics.qml deleted file mode 100644 index 2135129..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/StaticRigidBodySpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PhysicsBodySection { - width: parent.width - } - - PhysicsNodeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSection.qml deleted file mode 100644 index 709d593..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSection.qml +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - - -Section { - caption: qsTr("Triangle Mesh Shape") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Defines the location of the mesh file used to define the shape.") - } - - SecondColumnLayout { - UrlChooser { - id: sourceUrlChooser - backendValue: backendValues.source - filter: "*.mesh" - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSpecifics.qml deleted file mode 100644 index 7e5fd25..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TriangleMeshShapeSection { - width: parent.width - } - - CollisionShapeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriggerBodySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriggerBodySpecifics.qml deleted file mode 100644 index 25f1ab6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriggerBodySpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PhysicsNodeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape.png deleted file mode 100644 index a340d78..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape16.png deleted file mode 100644 index 385c6c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape@2x.png deleted file mode 100644 index b376ce1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape.png deleted file mode 100644 index 7f54cbc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape16.png deleted file mode 100644 index 26f6e65..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape@2x.png deleted file mode 100644 index 40bd4b0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller.png deleted file mode 100644 index 2b6c993..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller16.png deleted file mode 100644 index 72d6231..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller@2x.png deleted file mode 100644 index a8d0e8a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape.png deleted file mode 100644 index 8452088..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape16.png deleted file mode 100644 index 41570d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape@2x.png deleted file mode 100644 index f764a0f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody.png deleted file mode 100644 index c4b460e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody16.png deleted file mode 100644 index 2958870..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody@2x.png deleted file mode 100644 index dc42676..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape.png deleted file mode 100644 index 8ca7871..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape16.png deleted file mode 100644 index 290a93f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape@2x.png deleted file mode 100644 index 2830fe7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial.png deleted file mode 100644 index cecb1f0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial16.png deleted file mode 100644 index 5cbd1e5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial@2x.png deleted file mode 100644 index c8c3ed1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld.png deleted file mode 100644 index 3e26166..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld16.png deleted file mode 100644 index 9bb01fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld@2x.png deleted file mode 100644 index bb519a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape.png deleted file mode 100644 index 76cd5ef..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape16.png deleted file mode 100644 index d913f65..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape@2x.png deleted file mode 100644 index b4e86f2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape.png deleted file mode 100644 index db53bb3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape16.png deleted file mode 100644 index 47324b5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape@2x.png deleted file mode 100644 index 0fab80f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody.png deleted file mode 100644 index 2ca8cec..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody16.png deleted file mode 100644 index f18201b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody@2x.png deleted file mode 100644 index 34fab22..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape.png deleted file mode 100644 index 4fec46c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape16.png deleted file mode 100644 index 1f6f510..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape@2x.png deleted file mode 100644 index 5607d35..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody.png deleted file mode 100644 index f336d15..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody16.png deleted file mode 100644 index d4709c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody@2x.png deleted file mode 100644 index 9a86e2b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/physics.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/physics.metainfo deleted file mode 100644 index 874e209..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/designer/physics.metainfo +++ /dev/null @@ -1,261 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.Physics.PhysicsWorld" - icon: "images/physicsworld16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Physics World" - category: "Components" - libraryIcon: "images/physicsworld.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.TriggerBody" - icon: "images/triggerbody16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Trigger Body" - category: "Collision Bodies" - libraryIcon: "images/triggerbody.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.StaticRigidBody" - icon: "images/staticrigidbody16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Static Rigid Body" - category: "Collision Bodies" - libraryIcon: "images/staticrigidbody.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.DynamicRigidBody" - icon: "images/dynamicrigidbody16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Dynamic Rigid Body" - category: "Collision Bodies" - libraryIcon: "images/dynamicrigidbody.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.PhysicsMaterial" - icon: "images/physicsmaterial16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Physics Material" - category: "Components" - libraryIcon: "images/physicsmaterial.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.BoxShape" - icon: "images/boxshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Box Shape" - category: "Collision Shapes" - libraryIcon: "images/boxshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.CapsuleShape" - icon: "images/capsuleshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Capsule Shape" - category: "Collision Shapes" - libraryIcon: "images/capsuleshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.ConvexMeshShape" - icon: "images/convexmeshshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Convex Mesh Shape" - category: "Collision Shapes" - libraryIcon: "images/convexmeshshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.HeightFieldShape" - icon: "images/heightfieldshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Height Field Shape" - category: "Collision Shapes" - libraryIcon: "images/heightfieldshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.PlaneShape" - icon: "images/planeshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Plane Shape" - category: "Collision Shapes" - libraryIcon: "images/planeshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.SphereShape" - icon: "images/sphereshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Sphere Shape" - category: "Collision Shapes" - libraryIcon: "images/sphereshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.TriangleMeshShape" - icon: "images/trianglemeshshape16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Triangle Mesh Shape" - category: "Collision Shapes" - libraryIcon: "images/trianglemeshshape.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } - - Type { - name: "QtQuick3D.Physics.CharacterController" - icon: "images/charactercontroller16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Character Controller" - category: "Collision Bodies" - libraryIcon: "images/charactercontroller.png" - version: "6.5" - requiredImport: "QtQuick3D.Physics" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/libqquick3dphysicsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/libqquick3dphysicsplugin.so deleted file mode 100755 index 3d4182c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/libqquick3dphysicsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/plugins.qmltypes deleted file mode 100644 index cbb6cc0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/plugins.qmltypes +++ /dev/null @@ -1,1010 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qabstractcollisionshape_p.h" - name: "QAbstractCollisionShape" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.Physics/CollisionShape 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "enableDebugDraw" - type: "bool" - read: "enableDebugDraw" - write: "setEnableDebugDraw" - notify: "enableDebugDrawChanged" - index: 0 - } - Signal { - name: "enableDebugDrawChanged" - Parameter { name: "enableDebugDraw"; type: "bool" } - } - Signal { - name: "needsRebuild" - Parameter { type: "QObject"; isPointer: true } - } - Method { - name: "setEnableDebugDraw" - Parameter { name: "enableDebugDraw"; type: "bool" } - } - Method { name: "handleScaleChange" } - } - Component { - file: "private/qabstractphysicsbody_p.h" - name: "QAbstractPhysicsBody" - accessSemantics: "reference" - prototype: "QAbstractPhysicsNode" - exports: [ - "QtQuick3D.Physics/PhysicsBody 6.0", - "QtQuick3D.Physics/PhysicsBody 6.5", - "QtQuick3D.Physics/PhysicsBody 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "physicsMaterial" - type: "QPhysicsMaterial" - isPointer: true - read: "physicsMaterial" - write: "setPhysicsMaterial" - notify: "physicsMaterialChanged" - index: 0 - } - Property { - name: "simulationEnabled" - type: "bool" - read: "simulationEnabled" - write: "setSimulationEnabled" - notify: "simulationEnabledChanged" - index: 1 - } - Signal { name: "physicsMaterialChanged" } - Signal { name: "simulationEnabledChanged" } - } - Component { - file: "private/qabstractphysicsnode_p.h" - name: "QAbstractPhysicsNode" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: [ - "QtQuick3D.Physics/PhysicsNode 6.0", - "QtQuick3D.Physics/PhysicsNode 6.5", - "QtQuick3D.Physics/PhysicsNode 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "collisionShapes" - type: "QAbstractCollisionShape" - isList: true - read: "collisionShapes" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "sendContactReports" - type: "bool" - read: "sendContactReports" - write: "setSendContactReports" - notify: "sendContactReportsChanged" - index: 1 - } - Property { - name: "receiveContactReports" - type: "bool" - read: "receiveContactReports" - write: "setReceiveContactReports" - notify: "receiveContactReportsChanged" - index: 2 - } - Property { - name: "sendTriggerReports" - revision: 1541 - type: "bool" - read: "sendTriggerReports" - write: "setSendTriggerReports" - notify: "sendTriggerReportsChanged" - index: 3 - } - Property { - name: "receiveTriggerReports" - revision: 1541 - type: "bool" - read: "receiveTriggerReports" - write: "setReceiveTriggerReports" - notify: "receiveTriggerReportsChanged" - index: 4 - } - Property { - name: "filterGroup" - revision: 1543 - type: "int" - read: "filterGroup" - write: "setfilterGroup" - notify: "filterGroupChanged" - index: 5 - } - Property { - name: "filterIgnoreGroups" - revision: 1543 - type: "int" - read: "filterIgnoreGroups" - write: "setFilterIgnoreGroups" - notify: "filterIgnoreGroupsChanged" - index: 6 - } - Signal { - name: "bodyContact" - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - Parameter { name: "positions"; type: "QVector3D"; isList: true } - Parameter { name: "impulses"; type: "QVector3D"; isList: true } - Parameter { name: "normals"; type: "QVector3D"; isList: true } - } - Signal { - name: "sendContactReportsChanged" - Parameter { name: "sendContactReports"; type: "float" } - } - Signal { - name: "receiveContactReportsChanged" - Parameter { name: "receiveContactReports"; type: "float" } - } - Signal { - name: "sendTriggerReportsChanged" - revision: 1541 - Parameter { name: "sendTriggerReports"; type: "float" } - } - Signal { - name: "receiveTriggerReportsChanged" - revision: 1541 - Parameter { name: "receiveTriggerReports"; type: "float" } - } - Signal { - name: "enteredTriggerBody" - revision: 1541 - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - } - Signal { - name: "exitedTriggerBody" - revision: 1541 - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - } - Signal { name: "filterGroupChanged"; revision: 1543 } - Signal { name: "filterIgnoreGroupsChanged"; revision: 1543 } - Method { - name: "onShapeDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "onShapeNeedsRebuild" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qboxshape_p.h" - name: "QBoxShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: ["QtQuick3D.Physics/BoxShape 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "extents" - type: "QVector3D" - read: "extents" - write: "setExtents" - notify: "extentsChanged" - index: 0 - } - Signal { - name: "extentsChanged" - Parameter { name: "extents"; type: "QVector3D" } - } - Method { - name: "setExtents" - Parameter { name: "extents"; type: "QVector3D" } - } - } - Component { - file: "private/qcapsuleshape_p.h" - name: "QCapsuleShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: ["QtQuick3D.Physics/CapsuleShape 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "diameter" - type: "float" - read: "diameter" - write: "setDiameter" - notify: "diameterChanged" - index: 0 - } - Property { - name: "height" - type: "float" - read: "height" - write: "setHeight" - notify: "heightChanged" - index: 1 - } - Signal { name: "diameterChanged" } - Signal { name: "heightChanged" } - } - Component { - file: "private/qcharactercontroller_p.h" - name: "QCharacterController" - accessSemantics: "reference" - prototype: "QAbstractPhysicsBody" - exports: [ - "QtQuick3D.Physics/CharacterController 6.0", - "QtQuick3D.Physics/CharacterController 6.5", - "QtQuick3D.Physics/CharacterController 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Enum { - name: "Collisions" - alias: "Collision" - isFlag: true - values: ["None", "Side", "Up", "Down"] - } - Property { - name: "movement" - type: "QVector3D" - read: "movement" - write: "setMovement" - notify: "movementChanged" - index: 0 - } - Property { - name: "gravity" - type: "QVector3D" - read: "gravity" - write: "setGravity" - notify: "gravityChanged" - index: 1 - } - Property { - name: "midAirControl" - type: "bool" - read: "midAirControl" - write: "setMidAirControl" - notify: "midAirControlChanged" - index: 2 - } - Property { - name: "collisions" - type: "Collisions" - read: "collisions" - notify: "collisionsChanged" - index: 3 - isReadonly: true - } - Property { - name: "enableShapeHitCallback" - type: "bool" - read: "enableShapeHitCallback" - write: "setEnableShapeHitCallback" - notify: "enableShapeHitCallbackChanged" - index: 4 - } - Signal { name: "movementChanged" } - Signal { name: "gravityChanged" } - Signal { name: "midAirControlChanged" } - Signal { name: "collisionsChanged" } - Signal { name: "enableShapeHitCallbackChanged" } - Signal { - name: "shapeHit" - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - Parameter { name: "position"; type: "QVector3D" } - Parameter { name: "impulse"; type: "QVector3D" } - Parameter { name: "normal"; type: "QVector3D" } - } - Method { - name: "teleport" - Parameter { name: "position"; type: "QVector3D" } - } - } - Component { - file: "private/qconvexmeshshape_p.h" - name: "QConvexMeshShape" - accessSemantics: "reference" - prototype: "QMeshShape" - exports: [ - "QtQuick3D.Physics/ConvexMeshShape 6.0", - "QtQuick3D.Physics/ConvexMeshShape 6.5", - "QtQuick3D.Physics/ConvexMeshShape 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - } - Component { - file: "private/qdynamicrigidbody_p.h" - name: "QDynamicRigidBody" - accessSemantics: "reference" - prototype: "QAbstractPhysicsBody" - exports: [ - "QtQuick3D.Physics/DynamicRigidBody 6.0", - "QtQuick3D.Physics/DynamicRigidBody 6.5", - "QtQuick3D.Physics/DynamicRigidBody 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Enum { - name: "MassMode" - values: [ - "DefaultDensity", - "CustomDensity", - "Mass", - "MassAndInertiaTensor", - "MassAndInertiaMatrix" - ] - } - Enum { - name: "AxisLock" - values: ["LockNone", "LockX", "LockY", "LockZ"] - } - Property { - name: "mass" - type: "float" - read: "mass" - write: "setMass" - notify: "massChanged" - index: 0 - } - Property { - name: "density" - type: "float" - read: "density" - write: "setDensity" - notify: "densityChanged" - index: 1 - } - Property { - name: "linearAxisLock" - revision: 1541 - type: "AxisLock" - read: "linearAxisLock" - write: "setLinearAxisLock" - notify: "linearAxisLockChanged" - index: 2 - } - Property { - name: "angularAxisLock" - revision: 1541 - type: "AxisLock" - read: "angularAxisLock" - write: "setAngularAxisLock" - notify: "angularAxisLockChanged" - index: 3 - } - Property { - name: "isKinematic" - type: "bool" - read: "isKinematic" - write: "setIsKinematic" - notify: "isKinematicChanged" - index: 4 - } - Property { - name: "gravityEnabled" - type: "bool" - read: "gravityEnabled" - write: "setGravityEnabled" - notify: "gravityEnabledChanged" - index: 5 - } - Property { - name: "massMode" - type: "MassMode" - read: "massMode" - write: "setMassMode" - notify: "massModeChanged" - index: 6 - } - Property { - name: "inertiaTensor" - type: "QVector3D" - read: "inertiaTensor" - write: "setInertiaTensor" - notify: "inertiaTensorChanged" - index: 7 - } - Property { - name: "centerOfMassPosition" - type: "QVector3D" - read: "centerOfMassPosition" - write: "setCenterOfMassPosition" - notify: "centerOfMassPositionChanged" - index: 8 - } - Property { - name: "centerOfMassRotation" - type: "QQuaternion" - read: "centerOfMassRotation" - write: "setCenterOfMassRotation" - notify: "centerOfMassRotationChanged" - index: 9 - } - Property { - name: "inertiaMatrix" - type: "float" - isList: true - read: "readInertiaMatrix" - write: "setInertiaMatrix" - notify: "inertiaMatrixChanged" - index: 10 - } - Property { - name: "kinematicPosition" - revision: 1541 - type: "QVector3D" - read: "kinematicPosition" - write: "setKinematicPosition" - notify: "kinematicPositionChanged" - index: 11 - } - Property { - name: "kinematicEulerRotation" - revision: 1541 - type: "QVector3D" - read: "kinematicEulerRotation" - write: "setKinematicEulerRotation" - notify: "kinematicEulerRotationChanged" - index: 12 - } - Property { - name: "kinematicRotation" - revision: 1541 - type: "QQuaternion" - read: "kinematicRotation" - write: "setKinematicRotation" - notify: "kinematicRotationChanged" - index: 13 - } - Property { - name: "kinematicPivot" - revision: 1541 - type: "QVector3D" - read: "kinematicPivot" - write: "setKinematicPivot" - notify: "kinematicPivotChanged" - index: 14 - } - Signal { - name: "massChanged" - Parameter { name: "mass"; type: "float" } - } - Signal { - name: "densityChanged" - Parameter { name: "density"; type: "float" } - } - Signal { - name: "isKinematicChanged" - Parameter { name: "isKinematic"; type: "bool" } - } - Signal { name: "linearAxisLockChanged"; revision: 1541 } - Signal { name: "angularAxisLockChanged"; revision: 1541 } - Signal { name: "gravityEnabledChanged" } - Signal { name: "massModeChanged" } - Signal { name: "inertiaTensorChanged" } - Signal { name: "centerOfMassPositionChanged" } - Signal { name: "centerOfMassRotationChanged" } - Signal { name: "inertiaMatrixChanged" } - Signal { - name: "kinematicPositionChanged" - revision: 1541 - Parameter { name: "kinematicPosition"; type: "QVector3D" } - } - Signal { - name: "kinematicRotationChanged" - revision: 1541 - Parameter { name: "kinematicRotation"; type: "QQuaternion" } - } - Signal { - name: "kinematicEulerRotationChanged" - revision: 1541 - Parameter { name: "kinematicEulerRotation"; type: "QVector3D" } - } - Signal { - name: "kinematicPivotChanged" - revision: 1541 - Parameter { name: "kinematicPivot"; type: "QVector3D" } - } - Method { - name: "applyCentralForce" - Parameter { name: "force"; type: "QVector3D" } - } - Method { - name: "applyForce" - Parameter { name: "force"; type: "QVector3D" } - Parameter { name: "position"; type: "QVector3D" } - } - Method { - name: "applyTorque" - Parameter { name: "torque"; type: "QVector3D" } - } - Method { - name: "applyCentralImpulse" - Parameter { name: "impulse"; type: "QVector3D" } - } - Method { - name: "applyImpulse" - Parameter { name: "impulse"; type: "QVector3D" } - Parameter { name: "position"; type: "QVector3D" } - } - Method { - name: "applyTorqueImpulse" - Parameter { name: "impulse"; type: "QVector3D" } - } - Method { - name: "setAngularVelocity" - Parameter { name: "angularVelocity"; type: "QVector3D" } - } - Method { - name: "setLinearVelocity" - Parameter { name: "linearVelocity"; type: "QVector3D" } - } - Method { - name: "reset" - Parameter { name: "position"; type: "QVector3D" } - Parameter { name: "eulerRotation"; type: "QVector3D" } - } - } - Component { - file: "private/qheightfieldshape_p.h" - name: "QHeightFieldShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: [ - "QtQuick3D.Physics/HeightFieldShape 6.0", - "QtQuick3D.Physics/HeightFieldShape 6.5", - "QtQuick3D.Physics/HeightFieldShape 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "extents" - type: "QVector3D" - read: "extents" - write: "setExtents" - notify: "extentsChanged" - index: 0 - } - Property { - name: "source" - revision: 1541 - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 1 - } - Property { - name: "image" - revision: 1543 - type: "QQuickImage" - isPointer: true - read: "image" - write: "setImage" - notify: "imageChanged" - index: 2 - } - Signal { name: "sourceChanged"; revision: 1541 } - Signal { name: "extentsChanged" } - Signal { name: "imageChanged"; revision: 1543 } - Method { - name: "imageDestroyed" - Parameter { name: "image"; type: "QObject"; isPointer: true } - } - Method { name: "imageGeometryChanged" } - } - Component { - file: "private/qmeshshape_p.h" - name: "QMeshShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: [ - "QtQuick3D.Physics/MeshShape 6.0", - "QtQuick3D.Physics/MeshShape 6.5", - "QtQuick3D.Physics/MeshShape 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "source" - revision: 1541 - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "geometry" - revision: 1543 - type: "QQuick3DGeometry" - isPointer: true - read: "geometry" - write: "setGeometry" - notify: "geometryChanged" - index: 1 - } - Signal { name: "sourceChanged"; revision: 1541 } - Signal { name: "geometryChanged"; revision: 1543 } - Method { - name: "geometryDestroyed" - Parameter { name: "geometry"; type: "QObject"; isPointer: true } - } - Method { name: "geometryContentChanged" } - } - Component { - file: "private/qphysicsmaterial_p.h" - name: "QPhysicsMaterial" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D.Physics/PhysicsMaterial 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "staticFriction" - type: "float" - read: "staticFriction" - write: "setStaticFriction" - notify: "staticFrictionChanged" - index: 0 - } - Property { - name: "dynamicFriction" - type: "float" - read: "dynamicFriction" - write: "setDynamicFriction" - notify: "dynamicFrictionChanged" - index: 1 - } - Property { - name: "restitution" - type: "float" - read: "restitution" - write: "setRestitution" - notify: "restitutionChanged" - index: 2 - } - Signal { name: "staticFrictionChanged" } - Signal { name: "dynamicFrictionChanged" } - Signal { name: "restitutionChanged" } - } - Component { - file: "private/qphysicsworld_p.h" - name: "QPhysicsWorld" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtQuick3D.Physics/PhysicsWorld 6.0", - "QtQuick3D.Physics/PhysicsWorld 6.5", - "QtQuick3D.Physics/PhysicsWorld 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "gravity" - type: "QVector3D" - read: "gravity" - write: "setGravity" - notify: "gravityChanged" - index: 0 - } - Property { - name: "running" - type: "bool" - read: "running" - write: "setRunning" - notify: "runningChanged" - index: 1 - } - Property { - name: "forceDebugDraw" - type: "bool" - read: "forceDebugDraw" - write: "setForceDebugDraw" - notify: "forceDebugDrawChanged" - index: 2 - } - Property { - name: "enableCCD" - type: "bool" - read: "enableCCD" - write: "setEnableCCD" - notify: "enableCCDChanged" - index: 3 - } - Property { - name: "typicalLength" - type: "float" - read: "typicalLength" - write: "setTypicalLength" - notify: "typicalLengthChanged" - index: 4 - } - Property { - name: "typicalSpeed" - type: "float" - read: "typicalSpeed" - write: "setTypicalSpeed" - notify: "typicalSpeedChanged" - index: 5 - } - Property { - name: "defaultDensity" - type: "float" - read: "defaultDensity" - write: "setDefaultDensity" - notify: "defaultDensityChanged" - index: 6 - } - Property { - name: "viewport" - revision: 1541 - type: "QQuick3DNode" - isPointer: true - read: "viewport" - write: "setViewport" - notify: "viewportChanged" - index: 7 - } - Property { - name: "minimumTimestep" - revision: 1541 - type: "float" - read: "minimumTimestep" - write: "setMinimumTimestep" - notify: "minimumTimestepChanged" - index: 8 - } - Property { - name: "maximumTimestep" - revision: 1541 - type: "float" - read: "maximumTimestep" - write: "setMaximumTimestep" - notify: "maximumTimestepChanged" - index: 9 - } - Property { - name: "scene" - revision: 1541 - type: "QQuick3DNode" - isPointer: true - read: "scene" - write: "setScene" - notify: "sceneChanged" - index: 10 - } - Property { - name: "numThreads" - revision: 1543 - type: "int" - read: "numThreads" - write: "setNumThreads" - notify: "numThreadsChanged" - index: 11 - } - Property { - name: "reportKinematicKinematicCollisions" - revision: 1543 - type: "bool" - read: "reportKinematicKinematicCollisions" - write: "setReportKinematicKinematicCollisions" - notify: "reportKinematicKinematicCollisionsChanged" - index: 12 - isFinal: true - } - Property { - name: "reportStaticKinematicCollisions" - revision: 1543 - type: "bool" - read: "reportStaticKinematicCollisions" - write: "setReportStaticKinematicCollisions" - notify: "reportStaticKinematicCollisionsChanged" - index: 13 - isFinal: true - } - Signal { - name: "gravityChanged" - Parameter { name: "gravity"; type: "QVector3D" } - } - Signal { - name: "runningChanged" - Parameter { name: "running"; type: "bool" } - } - Signal { - name: "enableCCDChanged" - Parameter { name: "enableCCD"; type: "bool" } - } - Signal { - name: "forceDebugDrawChanged" - Parameter { name: "forceDebugDraw"; type: "bool" } - } - Signal { - name: "typicalLengthChanged" - Parameter { name: "typicalLength"; type: "float" } - } - Signal { - name: "typicalSpeedChanged" - Parameter { name: "typicalSpeed"; type: "float" } - } - Signal { - name: "defaultDensityChanged" - Parameter { name: "defaultDensity"; type: "float" } - } - Signal { - name: "viewportChanged" - revision: 1541 - Parameter { name: "viewport"; type: "QQuick3DNode"; isPointer: true } - } - Signal { - name: "minimumTimestepChanged" - revision: 1541 - Parameter { name: "minimumTimestep"; type: "float" } - } - Signal { - name: "maximumTimestepChanged" - revision: 1541 - Parameter { name: "maxTimestep"; type: "float" } - } - Signal { - name: "simulateFrame" - Parameter { name: "minTimestep"; type: "float" } - Parameter { name: "maxTimestep"; type: "float" } - } - Signal { - name: "frameDone" - revision: 1541 - Parameter { name: "timestep"; type: "float" } - } - Signal { name: "sceneChanged"; revision: 1541 } - Signal { name: "numThreadsChanged"; revision: 1543 } - Signal { name: "reportKinematicKinematicCollisionsChanged"; revision: 1543 } - Signal { name: "reportStaticKinematicCollisionsChanged"; revision: 1543 } - Method { - name: "setGravity" - Parameter { name: "gravity"; type: "QVector3D" } - } - Method { - name: "setRunning" - Parameter { name: "running"; type: "bool" } - } - Method { - name: "setForceDebugDraw" - Parameter { name: "forceDebugDraw"; type: "bool" } - } - Method { - name: "setEnableCCD" - Parameter { name: "enableCCD"; type: "bool" } - } - Method { - name: "setTypicalLength" - Parameter { name: "typicalLength"; type: "float" } - } - Method { - name: "setTypicalSpeed" - Parameter { name: "typicalSpeed"; type: "float" } - } - Method { - name: "setDefaultDensity" - Parameter { name: "defaultDensity"; type: "float" } - } - Method { - name: "setViewport" - revision: 1541 - Parameter { name: "viewport"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setMinimumTimestep" - revision: 1541 - Parameter { name: "minTimestep"; type: "float" } - } - Method { - name: "setMaximumTimestep" - revision: 1541 - Parameter { name: "maxTimestep"; type: "float" } - } - Method { - name: "setScene" - revision: 1541 - Parameter { name: "newScene"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setNumThreads" - revision: 1543 - Parameter { name: "newNumThreads"; type: "int" } - } - } - Component { - file: "private/qplaneshape_p.h" - name: "QPlaneShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: ["QtQuick3D.Physics/PlaneShape 6.0"] - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qsphereshape_p.h" - name: "QSphereShape" - accessSemantics: "reference" - prototype: "QAbstractCollisionShape" - exports: ["QtQuick3D.Physics/SphereShape 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "diameter" - type: "float" - read: "diameter" - write: "setDiameter" - notify: "diameterChanged" - index: 0 - } - Signal { - name: "diameterChanged" - Parameter { name: "diameter"; type: "float" } - } - Method { - name: "setDiameter" - Parameter { name: "diameter"; type: "float" } - } - } - Component { - file: "private/qstaticrigidbody_p.h" - name: "QStaticRigidBody" - accessSemantics: "reference" - prototype: "QAbstractPhysicsBody" - exports: [ - "QtQuick3D.Physics/StaticRigidBody 6.0", - "QtQuick3D.Physics/StaticRigidBody 6.5", - "QtQuick3D.Physics/StaticRigidBody 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - } - Component { - file: "private/qtrianglemeshshape_p.h" - name: "QTriangleMeshShape" - accessSemantics: "reference" - prototype: "QMeshShape" - exports: [ - "QtQuick3D.Physics/TriangleMeshShape 6.0", - "QtQuick3D.Physics/TriangleMeshShape 6.5", - "QtQuick3D.Physics/TriangleMeshShape 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - } - Component { - file: "private/qtriggerbody_p.h" - name: "QTriggerBody" - accessSemantics: "reference" - prototype: "QAbstractPhysicsNode" - exports: [ - "QtQuick3D.Physics/TriggerBody 6.0", - "QtQuick3D.Physics/TriggerBody 6.5", - "QtQuick3D.Physics/TriggerBody 6.7" - ] - exportMetaObjectRevisions: [1536, 1541, 1543] - Property { - name: "collisionCount" - type: "int" - read: "collisionCount" - notify: "collisionCountChanged" - index: 0 - isReadonly: true - } - Signal { - name: "bodyEntered" - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - } - Signal { - name: "bodyExited" - Parameter { name: "body"; type: "QAbstractPhysicsNode"; isPointer: true } - } - Signal { name: "collisionCountChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/qmldir deleted file mode 100644 index 0ad1015..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Physics/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick3D.Physics -linktarget Qt6::qquick3dphysicsplugin -plugin qquick3dphysicsplugin -classname QtQuick3DPhysicsPlugin -designersupported -typeinfo plugins.qmltypes -depends QtQuick3D -prefer :/qt-project.org/imports/QtQuick3D/Physics/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Quick3D.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Quick3D.qmltypes deleted file mode 100644 index 0ee326a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/Quick3D.qmltypes +++ /dev/null @@ -1,6044 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquick3dabstractlight_p.h" - name: "QQuick3DAbstractLight" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D/Light 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "QSSGShadowMapQuality" - values: [ - "ShadowMapQualityLow", - "ShadowMapQualityMedium", - "ShadowMapQualityHigh", - "ShadowMapQualityVeryHigh" - ] - } - Enum { - name: "QSSGBakeMode" - values: ["BakeModeDisabled", "BakeModeIndirect", "BakeModeAll"] - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 0 - } - Property { - name: "ambientColor" - type: "QColor" - read: "ambientColor" - write: "setAmbientColor" - notify: "ambientColorChanged" - index: 1 - } - Property { - name: "brightness" - type: "float" - read: "brightness" - write: "setBrightness" - notify: "brightnessChanged" - index: 2 - } - Property { - name: "scope" - type: "QQuick3DNode" - isPointer: true - read: "scope" - write: "setScope" - notify: "scopeChanged" - index: 3 - } - Property { - name: "castsShadow" - type: "bool" - read: "castsShadow" - write: "setCastsShadow" - notify: "castsShadowChanged" - index: 4 - } - Property { - name: "shadowBias" - type: "float" - read: "shadowBias" - write: "setShadowBias" - notify: "shadowBiasChanged" - index: 5 - } - Property { - name: "shadowFactor" - type: "float" - read: "shadowFactor" - write: "setShadowFactor" - notify: "shadowFactorChanged" - index: 6 - } - Property { - name: "shadowMapQuality" - type: "QSSGShadowMapQuality" - read: "shadowMapQuality" - write: "setShadowMapQuality" - notify: "shadowMapQualityChanged" - index: 7 - } - Property { - name: "shadowMapFar" - type: "float" - read: "shadowMapFar" - write: "setShadowMapFar" - notify: "shadowMapFarChanged" - index: 8 - } - Property { - name: "shadowFilter" - type: "float" - read: "shadowFilter" - write: "setShadowFilter" - notify: "shadowFilterChanged" - index: 9 - } - Property { - name: "bakeMode" - type: "QSSGBakeMode" - read: "bakeMode" - write: "setBakeMode" - notify: "bakeModeChanged" - index: 10 - } - Signal { name: "colorChanged" } - Signal { name: "ambientColorChanged" } - Signal { name: "brightnessChanged" } - Signal { name: "scopeChanged" } - Signal { name: "castsShadowChanged" } - Signal { name: "shadowBiasChanged" } - Signal { name: "shadowFactorChanged" } - Signal { name: "shadowMapQualityChanged" } - Signal { name: "shadowMapFarChanged" } - Signal { name: "shadowFilterChanged" } - Signal { name: "bakeModeChanged" } - Method { - name: "setColor" - Parameter { name: "color"; type: "QColor" } - } - Method { - name: "setAmbientColor" - Parameter { name: "ambientColor"; type: "QColor" } - } - Method { - name: "setBrightness" - Parameter { name: "brightness"; type: "float" } - } - Method { - name: "setScope" - Parameter { name: "scope"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setCastsShadow" - Parameter { name: "castsShadow"; type: "bool" } - } - Method { - name: "setShadowBias" - Parameter { name: "shadowBias"; type: "float" } - } - Method { - name: "setShadowFactor" - Parameter { name: "shadowFactor"; type: "float" } - } - Method { - name: "setShadowMapQuality" - Parameter { name: "shadowMapQuality"; type: "QQuick3DAbstractLight::QSSGShadowMapQuality" } - } - Method { - name: "setShadowMapFar" - Parameter { name: "shadowMapFar"; type: "float" } - } - Method { - name: "setShadowFilter" - Parameter { name: "shadowFilter"; type: "float" } - } - Method { - name: "setBakeMode" - Parameter { name: "bakeMode"; type: "QQuick3DAbstractLight::QSSGBakeMode" } - } - } - Component { - file: "private/qquick3dbakedlightmap_p.h" - name: "QQuick3DBakedLightmap" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/BakedLightmap 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Property { - name: "key" - type: "QString" - read: "key" - write: "setKey" - notify: "keyChanged" - index: 1 - } - Property { - name: "loadPrefix" - type: "QString" - read: "loadPrefix" - write: "setLoadPrefix" - notify: "loadPrefixChanged" - index: 2 - } - Signal { name: "changed" } - Signal { name: "enabledChanged" } - Signal { name: "keyChanged" } - Signal { name: "loadPrefixChanged" } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setKey" - Parameter { name: "key"; type: "QString" } - } - Method { - name: "setLoadPrefix" - Parameter { name: "loadPrefix"; type: "QString" } - } - } - Component { - file: "private/qquick3dmodel_p.h" - name: "QQuick3DBounds3" - accessSemantics: "value" - exports: ["QtQuick3D/bounds 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "minimum" - type: "QVector3D" - read: "minimum" - index: 0 - isReadonly: true - isConstant: true - } - Property { - name: "maximum" - type: "QVector3D" - read: "maximum" - index: 1 - isReadonly: true - isConstant: true - } - } - Component { - file: "private/qquick3dcamera_p.h" - name: "QQuick3DCamera" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: [ - "QtQuick3D/Camera 6.0", - "QtQuick3D/Camera 6.4", - "QtQuick3D/Camera 6.5" - ] - isCreatable: false - exportMetaObjectRevisions: [1536, 1540, 1541] - Property { - name: "frustumCullingEnabled" - type: "bool" - read: "frustumCullingEnabled" - write: "setFrustumCullingEnabled" - notify: "frustumCullingEnabledChanged" - index: 0 - } - Property { - name: "lookAtNode" - revision: 1540 - type: "QQuick3DNode" - isPointer: true - read: "lookAtNode" - write: "setLookAtNode" - notify: "lookAtNodeChanged" - index: 1 - } - Property { - name: "levelOfDetailBias" - revision: 1541 - type: "float" - read: "levelOfDetailBias" - write: "setLevelOfDetailBias" - notify: "levelOfDetailBiasChanged" - index: 2 - } - Signal { name: "frustumCullingEnabledChanged" } - Signal { name: "lookAtNodeChanged"; revision: 1540 } - Signal { name: "levelOfDetailBiasChanged"; revision: 1541 } - Method { - name: "setFrustumCullingEnabled" - Parameter { name: "frustumCullingEnabled"; type: "bool" } - } - Method { - name: "setLookAtNode" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setLevelOfDetailBias" - revision: 1541 - Parameter { name: "newLevelOFDetailBias"; type: "float" } - } - Method { name: "updateLookAt" } - Method { - name: "mapToViewport" - type: "QVector3D" - Parameter { name: "scenePos"; type: "QVector3D" } - } - Method { - name: "mapFromViewport" - type: "QVector3D" - Parameter { name: "viewportPos"; type: "QVector3D" } - } - Method { - name: "lookAt" - Parameter { name: "scenePos"; type: "QVector3D" } - } - Method { - name: "lookAt" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } - } - } - Component { - file: "private/qquick3dcubemaptexture_p.h" - name: "QQuick3DCubeMapTexture" - accessSemantics: "reference" - prototype: "QQuick3DTexture" - exports: [ - "QtQuick3D/CubeMapTexture 6.0", - "QtQuick3D/CubeMapTexture 6.2", - "QtQuick3D/CubeMapTexture 6.7" - ] - exportMetaObjectRevisions: [1536, 1538, 1543] - } - Component { - file: "private/qquick3dcustomcamera_p.h" - name: "QQuick3DCustomCamera" - accessSemantics: "reference" - prototype: "QQuick3DCamera" - exports: [ - "QtQuick3D/CustomCamera 6.0", - "QtQuick3D/CustomCamera 6.4", - "QtQuick3D/CustomCamera 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - Property { - name: "projection" - type: "QMatrix4x4" - read: "projection" - write: "setProjection" - notify: "projectionChanged" - index: 0 - } - Signal { name: "projectionChanged" } - Method { - name: "setProjection" - Parameter { name: "projection"; type: "QMatrix4x4" } - } - } - Component { - file: "private/qquick3dcustommaterial_p.h" - name: "QQuick3DCustomMaterial" - accessSemantics: "reference" - prototype: "QQuick3DMaterial" - exports: [ - "QtQuick3D/CustomMaterial 6.0", - "QtQuick3D/CustomMaterial 6.7" - ] - exportMetaObjectRevisions: [1536, 1543] - Enum { - name: "ShadingMode" - values: ["Unshaded", "Shaded"] - } - Enum { - name: "BlendMode" - values: [ - "NoBlend", - "Zero", - "One", - "SrcColor", - "OneMinusSrcColor", - "DstColor", - "OneMinusDstColor", - "SrcAlpha", - "OneMinusSrcAlpha", - "DstAlpha", - "OneMinusDstAlpha", - "ConstantColor", - "OneMinusConstantColor", - "ConstantAlpha", - "OneMinusConstantAlpha", - "SrcAlphaSaturate" - ] - } - Property { - name: "shadingMode" - type: "ShadingMode" - read: "shadingMode" - write: "setShadingMode" - notify: "shadingModeChanged" - index: 0 - } - Property { - name: "fragmentShader" - type: "QUrl" - read: "fragmentShader" - write: "setFragmentShader" - notify: "fragmentShaderChanged" - index: 1 - } - Property { - name: "vertexShader" - type: "QUrl" - read: "vertexShader" - write: "setVertexShader" - notify: "vertexShaderChanged" - index: 2 - } - Property { - name: "sourceBlend" - type: "BlendMode" - read: "srcBlend" - write: "setSrcBlend" - notify: "srcBlendChanged" - index: 3 - } - Property { - name: "destinationBlend" - type: "BlendMode" - read: "dstBlend" - write: "setDstBlend" - notify: "dstBlendChanged" - index: 4 - } - Property { - name: "sourceAlphaBlend" - revision: 1543 - type: "BlendMode" - read: "srcAlphaBlend" - write: "setSrcAlphaBlend" - notify: "srcAlphaBlendChanged" - index: 5 - } - Property { - name: "destinationAlphaBlend" - revision: 1543 - type: "BlendMode" - read: "dstAlphaBlend" - write: "setDstAlphaBlend" - notify: "dstAlphaBlendChanged" - index: 6 - } - Property { - name: "alwaysDirty" - type: "bool" - read: "alwaysDirty" - write: "setAlwaysDirty" - notify: "alwaysDirtyChanged" - index: 7 - } - Property { - name: "lineWidth" - type: "float" - read: "lineWidth" - write: "setLineWidth" - notify: "lineWidthChanged" - index: 8 - } - Signal { name: "shadingModeChanged" } - Signal { name: "vertexShaderChanged" } - Signal { name: "fragmentShaderChanged" } - Signal { name: "srcBlendChanged" } - Signal { name: "dstBlendChanged" } - Signal { name: "srcAlphaBlendChanged"; revision: 1543 } - Signal { name: "dstAlphaBlendChanged"; revision: 1543 } - Signal { name: "alwaysDirtyChanged" } - Signal { name: "lineWidthChanged" } - Method { - name: "setShadingMode" - Parameter { name: "mode"; type: "QQuick3DCustomMaterial::ShadingMode" } - } - Method { - name: "setVertexShader" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "setFragmentShader" - Parameter { name: "url"; type: "QUrl" } - } - Method { - name: "setSrcBlend" - Parameter { name: "mode"; type: "QQuick3DCustomMaterial::BlendMode" } - } - Method { - name: "setDstBlend" - Parameter { name: "mode"; type: "QQuick3DCustomMaterial::BlendMode" } - } - Method { - name: "setSrcAlphaBlend" - revision: 1543 - Parameter { name: "mode"; type: "QQuick3DCustomMaterial::BlendMode" } - } - Method { - name: "setDstAlphaBlend" - revision: 1543 - Parameter { name: "mode"; type: "QQuick3DCustomMaterial::BlendMode" } - } - Method { - name: "setAlwaysDirty" - Parameter { name: "alwaysDirty"; type: "bool" } - } - Method { - name: "setLineWidth" - Parameter { name: "width"; type: "float" } - } - Method { name: "onPropertyDirty" } - Method { name: "onTextureDirty" } - } - Component { - file: "private/qquick3ddebugsettings_p.h" - name: "QQuick3DDebugSettings" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/DebugSettings 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "QQuick3DMaterialOverrides" - values: [ - "None", - "BaseColor", - "Roughness", - "Metalness", - "Diffuse", - "Specular", - "ShadowOcclusion", - "Emission", - "AmbientOcclusion", - "Normals", - "Tangents", - "Binormals", - "F0" - ] - } - Property { - name: "materialOverride" - type: "QQuick3DMaterialOverrides" - read: "materialOverride" - write: "setMaterialOverride" - notify: "materialOverrideChanged" - index: 0 - } - Property { - name: "wireframeEnabled" - type: "bool" - read: "wireframeEnabled" - write: "setWireframeEnabled" - notify: "wireframeEnabledChanged" - index: 1 - } - Signal { name: "materialOverrideChanged" } - Signal { name: "wireframeEnabledChanged" } - Signal { name: "changed" } - } - Component { - file: "private/qquick3ddefaultmaterial_p.h" - name: "QQuick3DDefaultMaterial" - accessSemantics: "reference" - prototype: "QQuick3DMaterial" - exports: ["QtQuick3D/DefaultMaterial 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Lighting" - values: ["NoLighting", "FragmentLighting"] - } - Enum { - name: "BlendMode" - values: ["SourceOver", "Screen", "Multiply"] - } - Enum { - name: "SpecularModel" - values: ["Default", "KGGX"] - } - Property { - name: "lighting" - type: "Lighting" - read: "lighting" - write: "setLighting" - notify: "lightingChanged" - index: 0 - } - Property { - name: "blendMode" - type: "BlendMode" - read: "blendMode" - write: "setBlendMode" - notify: "blendModeChanged" - index: 1 - } - Property { - name: "diffuseColor" - type: "QColor" - read: "diffuseColor" - write: "setDiffuseColor" - notify: "diffuseColorChanged" - index: 2 - } - Property { - name: "diffuseMap" - type: "QQuick3DTexture" - isPointer: true - read: "diffuseMap" - write: "setDiffuseMap" - notify: "diffuseMapChanged" - index: 3 - } - Property { - name: "emissiveFactor" - type: "QVector3D" - read: "emissiveFactor" - write: "setEmissiveFactor" - notify: "emissiveFactorChanged" - index: 4 - } - Property { - name: "emissiveMap" - type: "QQuick3DTexture" - isPointer: true - read: "emissiveMap" - write: "setEmissiveMap" - notify: "emissiveMapChanged" - index: 5 - } - Property { - name: "specularReflectionMap" - type: "QQuick3DTexture" - isPointer: true - read: "specularReflectionMap" - write: "setSpecularReflectionMap" - notify: "specularReflectionMapChanged" - index: 6 - } - Property { - name: "specularMap" - type: "QQuick3DTexture" - isPointer: true - read: "specularMap" - write: "setSpecularMap" - notify: "specularMapChanged" - index: 7 - } - Property { - name: "specularModel" - type: "SpecularModel" - read: "specularModel" - write: "setSpecularModel" - notify: "specularModelChanged" - index: 8 - } - Property { - name: "specularTint" - type: "QColor" - read: "specularTint" - write: "setSpecularTint" - notify: "specularTintChanged" - index: 9 - } - Property { - name: "indexOfRefraction" - type: "float" - read: "indexOfRefraction" - write: "setIndexOfRefraction" - notify: "indexOfRefractionChanged" - index: 10 - } - Property { - name: "fresnelPower" - type: "float" - read: "fresnelPower" - write: "setFresnelPower" - notify: "fresnelPowerChanged" - index: 11 - } - Property { - name: "specularAmount" - type: "float" - read: "specularAmount" - write: "setSpecularAmount" - notify: "specularAmountChanged" - index: 12 - } - Property { - name: "specularRoughness" - type: "float" - read: "specularRoughness" - write: "setSpecularRoughness" - notify: "specularRoughnessChanged" - index: 13 - } - Property { - name: "roughnessMap" - type: "QQuick3DTexture" - isPointer: true - read: "roughnessMap" - write: "setRoughnessMap" - notify: "roughnessMapChanged" - index: 14 - } - Property { - name: "roughnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "roughnessChannel" - write: "setRoughnessChannel" - notify: "roughnessChannelChanged" - index: 15 - } - Property { - name: "opacity" - type: "float" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 16 - } - Property { - name: "opacityMap" - type: "QQuick3DTexture" - isPointer: true - read: "opacityMap" - write: "setOpacityMap" - notify: "opacityMapChanged" - index: 17 - } - Property { - name: "opacityChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "opacityChannel" - write: "setOpacityChannel" - notify: "opacityChannelChanged" - index: 18 - } - Property { - name: "bumpMap" - type: "QQuick3DTexture" - isPointer: true - read: "bumpMap" - write: "setBumpMap" - notify: "bumpMapChanged" - index: 19 - } - Property { - name: "bumpAmount" - type: "float" - read: "bumpAmount" - write: "setBumpAmount" - notify: "bumpAmountChanged" - index: 20 - } - Property { - name: "normalMap" - type: "QQuick3DTexture" - isPointer: true - read: "normalMap" - write: "setNormalMap" - notify: "normalMapChanged" - index: 21 - } - Property { - name: "translucencyMap" - type: "QQuick3DTexture" - isPointer: true - read: "translucencyMap" - write: "setTranslucencyMap" - notify: "translucencyMapChanged" - index: 22 - } - Property { - name: "translucencyChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "translucencyChannel" - write: "setTranslucencyChannel" - notify: "translucencyChannelChanged" - index: 23 - } - Property { - name: "translucentFalloff" - type: "float" - read: "translucentFalloff" - write: "setTranslucentFalloff" - notify: "translucentFalloffChanged" - index: 24 - } - Property { - name: "diffuseLightWrap" - type: "float" - read: "diffuseLightWrap" - write: "setDiffuseLightWrap" - notify: "diffuseLightWrapChanged" - index: 25 - } - Property { - name: "vertexColorsEnabled" - type: "bool" - read: "vertexColorsEnabled" - write: "setVertexColorsEnabled" - notify: "vertexColorsEnabledChanged" - index: 26 - } - Property { - name: "pointSize" - type: "float" - read: "pointSize" - write: "setPointSize" - notify: "pointSizeChanged" - index: 27 - } - Property { - name: "lineWidth" - type: "float" - read: "lineWidth" - write: "setLineWidth" - notify: "lineWidthChanged" - index: 28 - } - Signal { - name: "lightingChanged" - Parameter { name: "lighting"; type: "QQuick3DDefaultMaterial::Lighting" } - } - Signal { - name: "blendModeChanged" - Parameter { name: "blendMode"; type: "QQuick3DDefaultMaterial::BlendMode" } - } - Signal { - name: "diffuseColorChanged" - Parameter { name: "diffuseColor"; type: "QColor" } - } - Signal { - name: "diffuseMapChanged" - Parameter { name: "diffuseMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "emissiveFactorChanged" - Parameter { name: "emissiveFactor"; type: "QVector3D" } - } - Signal { - name: "emissiveMapChanged" - Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "specularReflectionMapChanged" - Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "specularMapChanged" - Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "specularModelChanged" - Parameter { name: "specularModel"; type: "QQuick3DDefaultMaterial::SpecularModel" } - } - Signal { - name: "specularTintChanged" - Parameter { name: "specularTint"; type: "QColor" } - } - Signal { - name: "indexOfRefractionChanged" - Parameter { name: "indexOfRefraction"; type: "float" } - } - Signal { - name: "fresnelPowerChanged" - Parameter { name: "fresnelPower"; type: "float" } - } - Signal { - name: "specularAmountChanged" - Parameter { name: "specularAmount"; type: "float" } - } - Signal { - name: "specularRoughnessChanged" - Parameter { name: "specularRoughness"; type: "float" } - } - Signal { - name: "roughnessMapChanged" - Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "opacityChanged" - Parameter { name: "opacity"; type: "float" } - } - Signal { - name: "opacityMapChanged" - Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "bumpMapChanged" - Parameter { name: "bumpMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "bumpAmountChanged" - Parameter { name: "bumpAmount"; type: "float" } - } - Signal { - name: "normalMapChanged" - Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "translucencyMapChanged" - Parameter { name: "translucencyMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "translucentFalloffChanged" - Parameter { name: "translucentFalloff"; type: "float" } - } - Signal { - name: "diffuseLightWrapChanged" - Parameter { name: "diffuseLightWrap"; type: "float" } - } - Signal { - name: "vertexColorsEnabledChanged" - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - Signal { - name: "roughnessChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "opacityChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "translucencyChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { name: "pointSizeChanged" } - Signal { name: "lineWidthChanged" } - Method { - name: "setLighting" - Parameter { name: "lighting"; type: "QQuick3DDefaultMaterial::Lighting" } - } - Method { - name: "setBlendMode" - Parameter { name: "blendMode"; type: "QQuick3DDefaultMaterial::BlendMode" } - } - Method { - name: "setDiffuseColor" - Parameter { name: "diffuseColor"; type: "QColor" } - } - Method { - name: "setDiffuseMap" - Parameter { name: "diffuseMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setEmissiveFactor" - Parameter { name: "emissiveFactor"; type: "QVector3D" } - } - Method { - name: "setEmissiveMap" - Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularReflectionMap" - Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularMap" - Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularModel" - Parameter { name: "specularModel"; type: "QQuick3DDefaultMaterial::SpecularModel" } - } - Method { - name: "setSpecularTint" - Parameter { name: "specularTint"; type: "QColor" } - } - Method { - name: "setIndexOfRefraction" - Parameter { name: "indexOfRefraction"; type: "float" } - } - Method { - name: "setFresnelPower" - Parameter { name: "fresnelPower"; type: "float" } - } - Method { - name: "setSpecularAmount" - Parameter { name: "specularAmount"; type: "float" } - } - Method { - name: "setSpecularRoughness" - Parameter { name: "specularRoughness"; type: "float" } - } - Method { - name: "setRoughnessMap" - Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOpacity" - Parameter { name: "opacity"; type: "float" } - } - Method { - name: "setOpacityMap" - Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setBumpMap" - Parameter { name: "bumpMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setBumpAmount" - Parameter { name: "bumpAmount"; type: "float" } - } - Method { - name: "setNormalMap" - Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTranslucencyMap" - Parameter { name: "translucencyMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTranslucentFalloff" - Parameter { name: "translucentFalloff"; type: "float" } - } - Method { - name: "setDiffuseLightWrap" - Parameter { name: "diffuseLightWrap"; type: "float" } - } - Method { - name: "setVertexColorsEnabled" - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - Method { - name: "setRoughnessChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setOpacityChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setTranslucencyChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setPointSize" - Parameter { name: "size"; type: "float" } - } - Method { - name: "setLineWidth" - Parameter { name: "width"; type: "float" } - } - } - Component { - file: "private/qquick3ddirectionallight_p.h" - name: "QQuick3DDirectionalLight" - accessSemantics: "reference" - prototype: "QQuick3DAbstractLight" - exports: ["QtQuick3D/DirectionalLight 6.0"] - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qquick3deffect_p.h" - name: "QQuick3DEffect" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Effect 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "passes" - type: "QQuick3DShaderUtilsRenderPass" - isList: true - read: "passes" - index: 0 - isReadonly: true - } - Method { name: "onPropertyDirty" } - Method { name: "onTextureDirty" } - Method { name: "onPassDirty" } - } - Component { - file: "private/qquick3dinstancing_p.h" - name: "QQuick3DFileInstancing" - accessSemantics: "reference" - prototype: "QQuick3DInstancing" - exports: [ - "QtQuick3D/FileInstancing 6.2", - "QtQuick3D/FileInstancing 6.3" - ] - exportMetaObjectRevisions: [1538, 1539] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "instanceCount" - type: "int" - read: "instanceCount" - notify: "instanceCountChanged" - index: 1 - isReadonly: true - } - Signal { name: "instanceCountChanged" } - Signal { name: "sourceChanged" } - } - Component { - file: "private/qquick3dfog_p.h" - name: "QQuick3DFog" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Fog 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "enabled" - type: "bool" - read: "isEnabled" - write: "setEnabled" - notify: "enabledChanged" - index: 0 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 1 - } - Property { - name: "density" - type: "float" - read: "density" - write: "setDensity" - notify: "densityChanged" - index: 2 - } - Property { - name: "depthEnabled" - type: "bool" - read: "isDepthEnabled" - write: "setDepthEnabled" - notify: "depthEnabledChanged" - index: 3 - } - Property { - name: "depthNear" - type: "float" - read: "depthNear" - write: "setDepthNear" - notify: "depthNearChanged" - index: 4 - } - Property { - name: "depthFar" - type: "float" - read: "depthFar" - write: "setDepthFar" - notify: "depthFarChanged" - index: 5 - } - Property { - name: "depthCurve" - type: "float" - read: "depthCurve" - write: "setDepthCurve" - notify: "depthCurveChanged" - index: 6 - } - Property { - name: "heightEnabled" - type: "bool" - read: "isHeightEnabled" - write: "setHeightEnabled" - notify: "heightEnabledChanged" - index: 7 - } - Property { - name: "leastIntenseY" - type: "float" - read: "leastIntenseY" - write: "setLeastIntenseY" - notify: "leastIntenseYChanged" - index: 8 - } - Property { - name: "mostIntenseY" - type: "float" - read: "mostIntenseY" - write: "setMostIntenseY" - notify: "mostIntenseYChanged" - index: 9 - } - Property { - name: "heightCurve" - type: "float" - read: "heightCurve" - write: "setHeightCurve" - notify: "heightCurveChanged" - index: 10 - } - Property { - name: "transmitEnabled" - type: "bool" - read: "isTransmitEnabled" - write: "setTransmitEnabled" - notify: "transmitEnabledChanged" - index: 11 - } - Property { - name: "transmitCurve" - type: "float" - read: "transmitCurve" - write: "setTransmitCurve" - notify: "transmitCurveChanged" - index: 12 - } - Signal { name: "changed" } - Signal { name: "enabledChanged" } - Signal { name: "colorChanged" } - Signal { name: "densityChanged" } - Signal { name: "depthEnabledChanged" } - Signal { name: "depthNearChanged" } - Signal { name: "depthFarChanged" } - Signal { name: "depthCurveChanged" } - Signal { name: "heightEnabledChanged" } - Signal { name: "leastIntenseYChanged" } - Signal { name: "mostIntenseYChanged" } - Signal { name: "heightCurveChanged" } - Signal { name: "transmitEnabledChanged" } - Signal { name: "transmitCurveChanged" } - Method { - name: "setEnabled" - Parameter { name: "newEnabled"; type: "bool" } - } - Method { - name: "setColor" - Parameter { name: "newColor"; type: "QColor" } - } - Method { - name: "setDensity" - Parameter { name: "newDensity"; type: "float" } - } - Method { - name: "setDepthEnabled" - Parameter { name: "newDepthEnabled"; type: "bool" } - } - Method { - name: "setDepthNear" - Parameter { name: "newDepthNear"; type: "float" } - } - Method { - name: "setDepthFar" - Parameter { name: "newDepthFar"; type: "float" } - } - Method { - name: "setDepthCurve" - Parameter { name: "newDepthCurve"; type: "float" } - } - Method { - name: "setHeightEnabled" - Parameter { name: "newHeightEnabled"; type: "bool" } - } - Method { - name: "setLeastIntenseY" - Parameter { name: "newleastIntenseY"; type: "float" } - } - Method { - name: "setMostIntenseY" - Parameter { name: "newmostIntenseY"; type: "float" } - } - Method { - name: "setHeightCurve" - Parameter { name: "newHeightCurve"; type: "float" } - } - Method { - name: "setTransmitEnabled" - Parameter { name: "newTransmitEnabled"; type: "bool" } - } - Method { - name: "setTransmitCurve" - Parameter { name: "newTransmitCurve"; type: "float" } - } - } - Component { - file: "private/qquick3dfrustumcamera_p.h" - name: "QQuick3DFrustumCamera" - accessSemantics: "reference" - prototype: "QQuick3DPerspectiveCamera" - exports: [ - "QtQuick3D/FrustumCamera 6.0", - "QtQuick3D/FrustumCamera 6.4", - "QtQuick3D/FrustumCamera 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - Property { name: "top"; type: "float"; read: "top"; write: "setTop"; notify: "topChanged"; index: 0 } - Property { - name: "bottom" - type: "float" - read: "bottom" - write: "setBottom" - notify: "bottomChanged" - index: 1 - } - Property { - name: "right" - type: "float" - read: "right" - write: "setRight" - notify: "rightChanged" - index: 2 - } - Property { - name: "left" - type: "float" - read: "left" - write: "setLeft" - notify: "leftChanged" - index: 3 - } - Signal { name: "topChanged" } - Signal { name: "bottomChanged" } - Signal { name: "rightChanged" } - Signal { name: "leftChanged" } - Method { - name: "setTop" - Parameter { name: "top"; type: "float" } - } - Method { - name: "setBottom" - Parameter { name: "bottom"; type: "float" } - } - Method { - name: "setRight" - Parameter { name: "right"; type: "float" } - } - Method { - name: "setLeft" - Parameter { name: "left"; type: "float" } - } - } - Component { - file: "qquick3dgeometry.h" - name: "QQuick3DGeometry" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Geometry 6.0", "QtQuick3D/Geometry 6.7"] - isCreatable: false - exportMetaObjectRevisions: [1536, 1543] - Signal { name: "geometryNodeDirty" } - Signal { name: "geometryChanged"; revision: 1543 } - } - Component { - file: "private/qquick3dinstancing_p.h" - name: "QQuick3DInstanceList" - accessSemantics: "reference" - prototype: "QQuick3DInstancing" - exports: ["QtQuick3D/InstanceList 6.2", "QtQuick3D/InstanceList 6.3"] - exportMetaObjectRevisions: [1538, 1539] - Property { - name: "instances" - type: "QQuick3DInstanceListEntry" - isList: true - read: "instances" - index: 0 - isReadonly: true - } - Property { - name: "instanceCount" - type: "int" - read: "instanceCount" - notify: "instanceCountChanged" - index: 1 - isReadonly: true - } - Signal { name: "instanceCountChanged" } - Method { name: "handleInstanceChange" } - Method { - name: "onInstanceDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qquick3dinstancing_p.h" - name: "QQuick3DInstanceListEntry" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/InstanceListEntry 6.2"] - exportMetaObjectRevisions: [1538] - Property { - name: "position" - type: "QVector3D" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - } - Property { - name: "scale" - type: "QVector3D" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 1 - } - Property { - name: "eulerRotation" - type: "QVector3D" - read: "eulerRotation" - write: "setEulerRotation" - notify: "eulerRotationChanged" - index: 2 - } - Property { - name: "rotation" - type: "QQuaternion" - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 3 - } - Property { - name: "color" - type: "QColor" - read: "color" - write: "setColor" - notify: "colorChanged" - index: 4 - } - Property { - name: "customData" - type: "QVector4D" - read: "customData" - write: "setCustomData" - notify: "customDataChanged" - index: 5 - } - Signal { name: "positionChanged" } - Signal { name: "scaleChanged" } - Signal { name: "eulerRotationChanged" } - Signal { name: "rotationChanged" } - Signal { name: "colorChanged" } - Signal { name: "customDataChanged" } - Signal { name: "changed" } - Method { - name: "setPosition" - Parameter { name: "position"; type: "QVector3D" } - } - Method { - name: "setScale" - Parameter { name: "scale"; type: "QVector3D" } - } - Method { - name: "setEulerRotation" - Parameter { name: "eulerRotation"; type: "QVector3D" } - } - Method { - name: "setRotation" - Parameter { name: "rotation"; type: "QQuaternion" } - } - Method { - name: "setColor" - Parameter { name: "color"; type: "QColor" } - } - Method { - name: "setCustomData" - Parameter { name: "customData"; type: "QVector4D" } - } - } - Component { - file: "qquick3dinstancing.h" - name: "QQuick3DInstancing" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Instancing 6.2", "QtQuick3D/Instancing 6.3"] - isCreatable: false - exportMetaObjectRevisions: [1538, 1539] - Property { - name: "instanceCountOverride" - type: "int" - read: "instanceCountOverride" - write: "setInstanceCountOverride" - notify: "instanceCountOverrideChanged" - index: 0 - } - Property { - name: "hasTransparency" - type: "bool" - read: "hasTransparency" - write: "setHasTransparency" - notify: "hasTransparencyChanged" - index: 1 - } - Property { - name: "depthSortingEnabled" - type: "bool" - read: "depthSortingEnabled" - write: "setDepthSortingEnabled" - notify: "depthSortingEnabledChanged" - index: 2 - } - Signal { name: "instanceTableChanged" } - Signal { name: "instanceNodeDirty" } - Signal { name: "instanceCountOverrideChanged" } - Signal { name: "hasTransparencyChanged" } - Signal { name: "depthSortingEnabledChanged" } - Method { - name: "setInstanceCountOverride" - Parameter { name: "instanceCountOverride"; type: "int" } - } - Method { - name: "setHasTransparency" - Parameter { name: "hasTransparency"; type: "bool" } - } - Method { - name: "setDepthSortingEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "instancePosition" - revision: 1539 - type: "QVector3D" - Parameter { name: "index"; type: "int" } - } - Method { - name: "instanceScale" - revision: 1539 - type: "QVector3D" - Parameter { name: "index"; type: "int" } - } - Method { - name: "instanceRotation" - revision: 1539 - type: "QQuaternion" - Parameter { name: "index"; type: "int" } - } - Method { - name: "instanceColor" - revision: 1539 - type: "QColor" - Parameter { name: "index"; type: "int" } - } - Method { - name: "instanceCustomData" - revision: 1539 - type: "QVector4D" - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquick3djoint_p.h" - name: "QQuick3DJoint" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D/Joint 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "index" - type: "int" - read: "index" - write: "setIndex" - notify: "indexChanged" - index: 0 - } - Property { - name: "skeletonRoot" - type: "QQuick3DSkeleton" - isPointer: true - read: "skeletonRoot" - write: "setSkeletonRoot" - notify: "skeletonRootChanged" - index: 1 - } - Signal { name: "indexChanged" } - Signal { name: "skeletonRootChanged" } - Method { - name: "setIndex" - Parameter { name: "index"; type: "int" } - } - Method { - name: "setSkeletonRoot" - Parameter { name: "skeleton"; type: "QQuick3DSkeleton"; isPointer: true } - } - } - Component { - file: "private/qquick3dlightmapper_p.h" - name: "QQuick3DLightmapper" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Lightmapper 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "opacityThreshold" - type: "float" - read: "opacityThreshold" - write: "setOpacityThreshold" - notify: "opacityThresholdChanged" - index: 0 - } - Property { - name: "bias" - type: "float" - read: "bias" - write: "setBias" - notify: "biasChanged" - index: 1 - } - Property { - name: "adaptiveBiasEnabled" - type: "bool" - read: "isAdaptiveBiasEnabled" - write: "setAdaptiveBiasEnabled" - notify: "adaptiveBiasEnabledChanged" - index: 2 - } - Property { - name: "indirectLightEnabled" - type: "bool" - read: "isIndirectLightEnabled" - write: "setIndirectLightEnabled" - notify: "indirectLightEnabledChanged" - index: 3 - } - Property { - name: "samples" - type: "int" - read: "samples" - write: "setSamples" - notify: "samplesChanged" - index: 4 - } - Property { - name: "indirectLightWorkgroupSize" - type: "int" - read: "indirectLightWorkgroupSize" - write: "setIndirectLightWorkgroupSize" - notify: "indirectLightWorkgroupSizeChanged" - index: 5 - } - Property { - name: "bounces" - type: "int" - read: "bounces" - write: "setBounces" - notify: "bouncesChanged" - index: 6 - } - Property { - name: "indirectLightFactor" - type: "float" - read: "indirectLightFactor" - write: "setIndirectLightFactor" - notify: "indirectLightFactorChanged" - index: 7 - } - Signal { name: "changed" } - Signal { name: "opacityThresholdChanged" } - Signal { name: "biasChanged" } - Signal { name: "adaptiveBiasEnabledChanged" } - Signal { name: "indirectLightEnabledChanged" } - Signal { name: "samplesChanged" } - Signal { name: "indirectLightWorkgroupSizeChanged" } - Signal { name: "bouncesChanged" } - Signal { name: "indirectLightFactorChanged" } - Method { - name: "setOpacityThreshold" - Parameter { name: "opacity"; type: "float" } - } - Method { - name: "setBias" - Parameter { name: "bias"; type: "float" } - } - Method { - name: "setAdaptiveBiasEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setIndirectLightEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setSamples" - Parameter { name: "count"; type: "int" } - } - Method { - name: "setIndirectLightWorkgroupSize" - Parameter { name: "size"; type: "int" } - } - Method { - name: "setBounces" - Parameter { name: "count"; type: "int" } - } - Method { - name: "setIndirectLightFactor" - Parameter { name: "factor"; type: "float" } - } - } - Component { - file: "private/qquick3dloader_p.h" - name: "QQuick3DLoader" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D/Loader3D 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Status" - values: ["Null", "Ready", "Loading", "Error"] - } - Property { - name: "active" - type: "bool" - read: "active" - write: "setActive" - notify: "activeChanged" - index: 0 - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 1 - } - Property { - name: "sourceComponent" - type: "QQmlComponent" - isPointer: true - read: "sourceComponent" - write: "setSourceComponent" - reset: "resetSourceComponent" - notify: "sourceComponentChanged" - index: 2 - } - Property { - name: "item" - type: "QObject" - isPointer: true - read: "item" - notify: "itemChanged" - index: 3 - isReadonly: true - } - Property { - name: "status" - type: "Status" - read: "status" - notify: "statusChanged" - index: 4 - isReadonly: true - } - Property { - name: "progress" - type: "double" - read: "progress" - notify: "progressChanged" - index: 5 - isReadonly: true - } - Property { - name: "asynchronous" - type: "bool" - read: "asynchronous" - write: "setAsynchronous" - notify: "asynchronousChanged" - index: 6 - } - Signal { name: "itemChanged" } - Signal { name: "activeChanged" } - Signal { name: "sourceChanged" } - Signal { name: "sourceComponentChanged" } - Signal { name: "statusChanged" } - Signal { name: "progressChanged" } - Signal { name: "loaded" } - Signal { name: "asynchronousChanged" } - Method { name: "sourceLoaded" } - Method { name: "setSource"; isJavaScriptFunction: true } - } - Component { - file: "private/qquick3dmaterial_p.h" - name: "QQuick3DMaterial" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Material 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "CullMode" - values: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"] - } - Enum { - name: "TextureChannelMapping" - values: ["R", "G", "B", "A"] - } - Enum { - name: "DepthDrawMode" - values: [ - "OpaqueOnlyDepthDraw", - "AlwaysDepthDraw", - "NeverDepthDraw", - "OpaquePrePassDepthDraw" - ] - } - Property { - name: "lightProbe" - type: "QQuick3DTexture" - isPointer: true - read: "lightProbe" - write: "setLightProbe" - notify: "lightProbeChanged" - index: 0 - } - Property { - name: "cullMode" - type: "CullMode" - read: "cullMode" - write: "setCullMode" - notify: "cullModeChanged" - index: 1 - } - Property { - name: "depthDrawMode" - type: "DepthDrawMode" - read: "depthDrawMode" - write: "setDepthDrawMode" - notify: "depthDrawModeChanged" - index: 2 - } - Signal { - name: "lightProbeChanged" - Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "cullModeChanged" - Parameter { name: "cullMode"; type: "QQuick3DMaterial::CullMode" } - } - Signal { - name: "depthDrawModeChanged" - Parameter { name: "depthDrawMode"; type: "QQuick3DMaterial::DepthDrawMode" } - } - Method { - name: "setLightProbe" - Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setCullMode" - Parameter { name: "cullMode"; type: "QQuick3DMaterial::CullMode" } - } - Method { - name: "setDepthDrawMode" - Parameter { name: "depthDrawMode"; type: "QQuick3DMaterial::DepthDrawMode" } - } - } - Component { - file: "private/qquick3dmodel_p.h" - name: "QQuick3DModel" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: [ - "QtQuick3D/Model 6.0", - "QtQuick3D/Model 6.3", - "QtQuick3D/Model 6.4", - "QtQuick3D/Model 6.5" - ] - exportMetaObjectRevisions: [1536, 1539, 1540, 1541] - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "castsShadows" - type: "bool" - read: "castsShadows" - write: "setCastsShadows" - notify: "castsShadowsChanged" - index: 1 - } - Property { - name: "receivesShadows" - type: "bool" - read: "receivesShadows" - write: "setReceivesShadows" - notify: "receivesShadowsChanged" - index: 2 - } - Property { - name: "materials" - type: "QQuick3DMaterial" - isList: true - read: "materials" - index: 3 - isReadonly: true - } - Property { - name: "morphTargets" - type: "QQuick3DMorphTarget" - isList: true - read: "morphTargets" - notify: "morphTargetsChanged" - index: 4 - isReadonly: true - } - Property { - name: "pickable" - type: "bool" - read: "pickable" - write: "setPickable" - notify: "pickableChanged" - index: 5 - } - Property { - name: "geometry" - type: "QQuick3DGeometry" - isPointer: true - read: "geometry" - write: "setGeometry" - notify: "geometryChanged" - index: 6 - } - Property { - name: "instancing" - type: "QQuick3DInstancing" - isPointer: true - read: "instancing" - write: "setInstancing" - notify: "instancingChanged" - index: 7 - } - Property { - name: "instanceRoot" - type: "QQuick3DNode" - isPointer: true - read: "instanceRoot" - write: "setInstanceRoot" - notify: "instanceRootChanged" - index: 8 - } - Property { - name: "skeleton" - type: "QQuick3DSkeleton" - isPointer: true - read: "skeleton" - write: "setSkeleton" - notify: "skeletonChanged" - index: 9 - } - Property { - name: "skin" - revision: 1540 - type: "QQuick3DSkin" - isPointer: true - read: "skin" - write: "setSkin" - notify: "skinChanged" - index: 10 - } - Property { - name: "inverseBindPoses" - type: "QMatrix4x4" - isList: true - read: "inverseBindPoses" - write: "setInverseBindPoses" - notify: "inverseBindPosesChanged" - index: 11 - } - Property { - name: "bounds" - type: "QQuick3DBounds3" - read: "bounds" - notify: "boundsChanged" - index: 12 - isReadonly: true - } - Property { - name: "depthBias" - type: "float" - read: "depthBias" - write: "setDepthBias" - notify: "depthBiasChanged" - index: 13 - } - Property { - name: "receivesReflections" - revision: 1539 - type: "bool" - read: "receivesReflections" - write: "setReceivesReflections" - notify: "receivesReflectionsChanged" - index: 14 - } - Property { - name: "castsReflections" - revision: 1540 - type: "bool" - read: "castsReflections" - write: "setCastsReflections" - notify: "castsReflectionsChanged" - index: 15 - } - Property { - name: "usedInBakedLighting" - revision: 1540 - type: "bool" - read: "isUsedInBakedLighting" - write: "setUsedInBakedLighting" - notify: "usedInBakedLightingChanged" - index: 16 - } - Property { - name: "lightmapBaseResolution" - revision: 1540 - type: "int" - read: "lightmapBaseResolution" - write: "setLightmapBaseResolution" - notify: "lightmapBaseResolutionChanged" - index: 17 - } - Property { - name: "bakedLightmap" - revision: 1540 - type: "QQuick3DBakedLightmap" - isPointer: true - read: "bakedLightmap" - write: "setBakedLightmap" - notify: "bakedLightmapChanged" - index: 18 - } - Property { - name: "instancingLodMin" - revision: 1541 - type: "float" - read: "instancingLodMin" - write: "setInstancingLodMin" - notify: "instancingLodMinChanged" - index: 19 - } - Property { - name: "instancingLodMax" - revision: 1541 - type: "float" - read: "instancingLodMax" - write: "setInstancingLodMax" - notify: "instancingLodMaxChanged" - index: 20 - } - Property { - name: "levelOfDetailBias" - revision: 1541 - type: "float" - read: "levelOfDetailBias" - write: "setLevelOfDetailBias" - notify: "levelOfDetailBiasChanged" - index: 21 - } - Signal { name: "sourceChanged" } - Signal { name: "castsShadowsChanged" } - Signal { name: "receivesShadowsChanged" } - Signal { name: "pickableChanged" } - Signal { name: "geometryChanged" } - Signal { name: "skeletonChanged" } - Signal { name: "inverseBindPosesChanged" } - Signal { name: "boundsChanged" } - Signal { name: "instancingChanged" } - Signal { name: "instanceRootChanged" } - Signal { name: "morphTargetsChanged" } - Signal { name: "depthBiasChanged" } - Signal { name: "receivesReflectionsChanged"; revision: 1539 } - Signal { name: "castsReflectionsChanged"; revision: 1540 } - Signal { name: "skinChanged"; revision: 1540 } - Signal { name: "usedInBakedLightingChanged"; revision: 1540 } - Signal { name: "lightmapBaseResolutionChanged"; revision: 1540 } - Signal { name: "bakedLightmapChanged"; revision: 1540 } - Signal { name: "instancingLodMinChanged"; revision: 1541 } - Signal { name: "instancingLodMaxChanged"; revision: 1541 } - Signal { name: "levelOfDetailBiasChanged"; revision: 1541 } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - } - Method { - name: "setCastsShadows" - Parameter { name: "castsShadows"; type: "bool" } - } - Method { - name: "setReceivesShadows" - Parameter { name: "receivesShadows"; type: "bool" } - } - Method { - name: "setPickable" - Parameter { name: "pickable"; type: "bool" } - } - Method { - name: "setGeometry" - Parameter { name: "geometry"; type: "QQuick3DGeometry"; isPointer: true } - } - Method { - name: "setSkeleton" - Parameter { name: "skeleton"; type: "QQuick3DSkeleton"; isPointer: true } - } - Method { - name: "setInverseBindPoses" - Parameter { name: "poses"; type: "QMatrix4x4"; isList: true } - } - Method { - name: "setBounds" - Parameter { name: "min"; type: "QVector3D" } - Parameter { name: "max"; type: "QVector3D" } - } - Method { - name: "setInstancing" - Parameter { name: "instancing"; type: "QQuick3DInstancing"; isPointer: true } - } - Method { - name: "setInstanceRoot" - Parameter { name: "instanceRoot"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setDepthBias" - Parameter { name: "bias"; type: "float" } - } - Method { - name: "setReceivesReflections" - revision: 1539 - Parameter { name: "receivesReflections"; type: "bool" } - } - Method { - name: "setCastsReflections" - revision: 1540 - Parameter { name: "castsReflections"; type: "bool" } - } - Method { - name: "setSkin" - revision: 1540 - Parameter { name: "skin"; type: "QQuick3DSkin"; isPointer: true } - } - Method { - name: "setUsedInBakedLighting" - revision: 1540 - Parameter { name: "enable"; type: "bool" } - } - Method { - name: "setLightmapBaseResolution" - revision: 1540 - Parameter { name: "resolution"; type: "int" } - } - Method { - name: "setBakedLightmap" - revision: 1540 - Parameter { name: "bakedLightmap"; type: "QQuick3DBakedLightmap"; isPointer: true } - } - Method { - name: "setInstancingLodMin" - revision: 1541 - Parameter { name: "minDistance"; type: "float" } - } - Method { - name: "setInstancingLodMax" - revision: 1541 - Parameter { name: "maxDistance"; type: "float" } - } - Method { - name: "setLevelOfDetailBias" - revision: 1541 - Parameter { name: "newLevelOfDetailBias"; type: "float" } - } - Method { - name: "onMaterialDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "onMorphTargetDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qquick3dmorphtarget_p.h" - name: "QQuick3DMorphTarget" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/MorphTarget 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "MorphTargetAttribute" - values: [ - "Position", - "Normal", - "Tangent", - "Binormal", - "TexCoord0", - "TexCoord1", - "Color" - ] - } - Enum { - name: "MorphTargetAttributes" - alias: "MorphTargetAttribute" - isFlag: true - values: [ - "Position", - "Normal", - "Tangent", - "Binormal", - "TexCoord0", - "TexCoord1", - "Color" - ] - } - Property { - name: "weight" - type: "float" - read: "weight" - write: "setWeight" - notify: "weightChanged" - index: 0 - } - Property { - name: "attributes" - type: "MorphTargetAttributes" - read: "attributes" - write: "setAttributes" - notify: "attributesChanged" - index: 1 - } - Signal { name: "weightChanged" } - Signal { name: "attributesChanged" } - Method { - name: "setWeight" - Parameter { name: "castsShadows"; type: "float" } - } - Method { - name: "setAttributes" - Parameter { name: "attributes"; type: "QQuick3DMorphTarget::MorphTargetAttributes" } - } - } - Component { - file: "private/qquick3dnode_p.h" - name: "QQuick3DNode" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Node 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "TransformSpace" - values: ["LocalSpace", "ParentSpace", "SceneSpace"] - } - Enum { - name: "StaticFlags" - values: ["None"] - } - Property { name: "x"; type: "float"; read: "x"; write: "setX"; notify: "xChanged"; index: 0 } - Property { name: "y"; type: "float"; read: "y"; write: "setY"; notify: "yChanged"; index: 1 } - Property { name: "z"; type: "float"; read: "z"; write: "setZ"; notify: "zChanged"; index: 2 } - Property { - name: "rotation" - type: "QQuaternion" - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 3 - } - Property { - name: "eulerRotation" - type: "QVector3D" - read: "eulerRotation" - write: "setEulerRotation" - notify: "eulerRotationChanged" - index: 4 - } - Property { - name: "position" - type: "QVector3D" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 5 - } - Property { - name: "scale" - type: "QVector3D" - read: "scale" - write: "setScale" - notify: "scaleChanged" - index: 6 - } - Property { - name: "pivot" - type: "QVector3D" - read: "pivot" - write: "setPivot" - notify: "pivotChanged" - index: 7 - } - Property { - name: "opacity" - type: "float" - read: "localOpacity" - write: "setLocalOpacity" - notify: "localOpacityChanged" - index: 8 - } - Property { - name: "visible" - type: "bool" - read: "visible" - write: "setVisible" - notify: "visibleChanged" - index: 9 - } - Property { - name: "forward" - type: "QVector3D" - read: "forward" - notify: "forwardChanged" - index: 10 - isReadonly: true - } - Property { - name: "up" - type: "QVector3D" - read: "up" - notify: "upChanged" - index: 11 - isReadonly: true - } - Property { - name: "right" - type: "QVector3D" - read: "right" - notify: "rightChanged" - index: 12 - isReadonly: true - } - Property { - name: "scenePosition" - type: "QVector3D" - read: "scenePosition" - notify: "scenePositionChanged" - index: 13 - isReadonly: true - } - Property { - name: "sceneRotation" - type: "QQuaternion" - read: "sceneRotation" - notify: "sceneRotationChanged" - index: 14 - isReadonly: true - } - Property { - name: "sceneScale" - type: "QVector3D" - read: "sceneScale" - notify: "sceneScaleChanged" - index: 15 - isReadonly: true - } - Property { - name: "sceneTransform" - type: "QMatrix4x4" - read: "sceneTransform" - notify: "sceneTransformChanged" - index: 16 - isReadonly: true - } - Property { - name: "staticFlags" - type: "int" - read: "staticFlags" - write: "setStaticFlags" - notify: "staticFlagsChanged" - index: 17 - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - Signal { name: "rotationChanged" } - Signal { name: "eulerRotationChanged" } - Signal { name: "positionChanged" } - Signal { name: "scaleChanged" } - Signal { name: "pivotChanged" } - Signal { name: "localOpacityChanged" } - Signal { name: "visibleChanged" } - Signal { name: "forwardChanged" } - Signal { name: "upChanged" } - Signal { name: "rightChanged" } - Signal { name: "sceneTransformChanged" } - Signal { name: "scenePositionChanged" } - Signal { name: "sceneRotationChanged" } - Signal { name: "sceneScaleChanged" } - Signal { name: "staticFlagsChanged" } - Method { - name: "setX" - Parameter { name: "x"; type: "float" } - } - Method { - name: "setY" - Parameter { name: "y"; type: "float" } - } - Method { - name: "setZ" - Parameter { name: "z"; type: "float" } - } - Method { - name: "setRotation" - Parameter { name: "rotation"; type: "QQuaternion" } - } - Method { - name: "setEulerRotation" - Parameter { name: "eulerRotation"; type: "QVector3D" } - } - Method { - name: "setPosition" - Parameter { name: "position"; type: "QVector3D" } - } - Method { - name: "setScale" - Parameter { name: "scale"; type: "QVector3D" } - } - Method { - name: "setPivot" - Parameter { name: "pivot"; type: "QVector3D" } - } - Method { - name: "setLocalOpacity" - Parameter { name: "opacity"; type: "float" } - } - Method { - name: "setVisible" - Parameter { name: "visible"; type: "bool" } - } - Method { - name: "setStaticFlags" - Parameter { name: "staticFlags"; type: "int" } - } - Method { - name: "rotate" - Parameter { name: "degrees"; type: "double" } - Parameter { name: "axis"; type: "QVector3D" } - Parameter { name: "space"; type: "QQuick3DNode::TransformSpace" } - } - Method { - name: "mapPositionToScene" - type: "QVector3D" - Parameter { name: "localPosition"; type: "QVector3D" } - } - Method { - name: "mapPositionFromScene" - type: "QVector3D" - Parameter { name: "scenePosition"; type: "QVector3D" } - } - Method { - name: "mapPositionToNode" - type: "QVector3D" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true; isConstant: true } - Parameter { name: "localPosition"; type: "QVector3D" } - } - Method { - name: "mapPositionFromNode" - type: "QVector3D" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true; isConstant: true } - Parameter { name: "localPosition"; type: "QVector3D" } - } - Method { - name: "mapDirectionToScene" - type: "QVector3D" - Parameter { name: "localDirection"; type: "QVector3D" } - } - Method { - name: "mapDirectionFromScene" - type: "QVector3D" - Parameter { name: "sceneDirection"; type: "QVector3D" } - } - Method { - name: "mapDirectionToNode" - type: "QVector3D" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true; isConstant: true } - Parameter { name: "localDirection"; type: "QVector3D" } - } - Method { - name: "mapDirectionFromNode" - type: "QVector3D" - Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true; isConstant: true } - Parameter { name: "localDirection"; type: "QVector3D" } - } - } - Component { - file: "qquick3dobject.h" - name: "QQuick3DObject" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: ["QtQuick3D/Object3D 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Property { - name: "parent" - type: "QQuick3DObject" - isPointer: true - read: "parentItem" - write: "setParentItem" - notify: "parentChanged" - index: 0 - isFinal: true - } - Property { - name: "data" - type: "QObject" - isList: true - read: "data" - index: 1 - privateClass: "QQuick3DObjectPrivate" - isReadonly: true - } - Property { - name: "resources" - type: "QObject" - isList: true - read: "resources" - index: 2 - privateClass: "QQuick3DObjectPrivate" - isReadonly: true - } - Property { - name: "children" - type: "QQuick3DObject" - isList: true - read: "children" - notify: "childrenChanged" - index: 3 - privateClass: "QQuick3DObjectPrivate" - isReadonly: true - } - Property { - name: "states" - type: "QQuickState" - isList: true - read: "states" - index: 4 - privateClass: "QQuick3DObjectPrivate" - isReadonly: true - } - Property { - name: "transitions" - type: "QQuickTransition" - isList: true - read: "transitions" - index: 5 - privateClass: "QQuick3DObjectPrivate" - isReadonly: true - } - Property { - name: "state" - type: "QString" - read: "state" - write: "setState" - notify: "stateChanged" - index: 6 - } - Signal { name: "parentChanged" } - Signal { name: "childrenChanged" } - Signal { name: "stateChanged" } - Method { name: "update" } - Method { - name: "setParentItem" - Parameter { name: "parentItem"; type: "QQuick3DObject"; isPointer: true } - } - Method { - name: "_q_resourceObjectDeleted" - Parameter { type: "QObject"; isPointer: true } - } - Method { - name: "_q_createJSWrapper" - type: "qulonglong" - Parameter { type: "QV4::ExecutionEngine"; isPointer: true } - } - Method { name: "_q_cleanupContentItem2D" } - } - Component { - file: "private/qquick3dorthographiccamera_p.h" - name: "QQuick3DOrthographicCamera" - accessSemantics: "reference" - prototype: "QQuick3DCamera" - exports: [ - "QtQuick3D/OrthographicCamera 6.0", - "QtQuick3D/OrthographicCamera 6.4", - "QtQuick3D/OrthographicCamera 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - Property { - name: "clipNear" - type: "float" - read: "clipNear" - write: "setClipNear" - notify: "clipNearChanged" - index: 0 - } - Property { - name: "clipFar" - type: "float" - read: "clipFar" - write: "setClipFar" - notify: "clipFarChanged" - index: 1 - } - Property { - name: "horizontalMagnification" - type: "float" - read: "horizontalMagnification" - write: "setHorizontalMagnification" - notify: "horizontalMagnificationChanged" - index: 2 - } - Property { - name: "verticalMagnification" - type: "float" - read: "verticalMagnification" - write: "setVerticalMagnification" - notify: "verticalMagnificationChanged" - index: 3 - } - Signal { name: "clipNearChanged" } - Signal { name: "clipFarChanged" } - Signal { name: "horizontalMagnificationChanged" } - Signal { name: "verticalMagnificationChanged" } - Method { - name: "setClipNear" - Parameter { name: "clipNear"; type: "float" } - } - Method { - name: "setClipFar" - Parameter { name: "clipFar"; type: "float" } - } - Method { - name: "setHorizontalMagnification" - Parameter { name: "horizontalMagnification"; type: "float" } - } - Method { - name: "setVerticalMagnification" - Parameter { name: "horizontalMagnification"; type: "float" } - } - } - Component { - file: "private/qquick3dperspectivecamera_p.h" - name: "QQuick3DPerspectiveCamera" - accessSemantics: "reference" - prototype: "QQuick3DCamera" - exports: [ - "QtQuick3D/PerspectiveCamera 6.0", - "QtQuick3D/PerspectiveCamera 6.4", - "QtQuick3D/PerspectiveCamera 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - Enum { - name: "FieldOfViewOrientation" - values: ["Vertical", "Horizontal"] - } - Property { - name: "clipNear" - type: "float" - read: "clipNear" - write: "setClipNear" - notify: "clipNearChanged" - index: 0 - } - Property { - name: "clipFar" - type: "float" - read: "clipFar" - write: "setClipFar" - notify: "clipFarChanged" - index: 1 - } - Property { - name: "fieldOfView" - type: "float" - read: "fieldOfView" - write: "setFieldOfView" - notify: "fieldOfViewChanged" - index: 2 - } - Property { - name: "fieldOfViewOrientation" - type: "FieldOfViewOrientation" - read: "fieldOfViewOrientation" - write: "setFieldOfViewOrientation" - notify: "fieldOfViewOrientationChanged" - index: 3 - } - Signal { name: "clipNearChanged" } - Signal { name: "clipFarChanged" } - Signal { name: "fieldOfViewChanged" } - Signal { name: "fieldOfViewOrientationChanged" } - Method { - name: "setClipNear" - Parameter { name: "clipNear"; type: "float" } - } - Method { - name: "setClipFar" - Parameter { name: "clipFar"; type: "float" } - } - Method { - name: "setFieldOfView" - Parameter { name: "fieldOfView"; type: "float" } - } - Method { - name: "setFieldOfViewOrientation" - Parameter { - name: "fieldOfViewOrientation" - type: "QQuick3DPerspectiveCamera::FieldOfViewOrientation" - } - } - } - Component { - file: "private/qquick3dpointlight_p.h" - name: "QQuick3DPointLight" - accessSemantics: "reference" - prototype: "QQuick3DAbstractLight" - exports: ["QtQuick3D/PointLight 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "constantFade" - type: "float" - read: "constantFade" - write: "setConstantFade" - notify: "constantFadeChanged" - index: 0 - } - Property { - name: "linearFade" - type: "float" - read: "linearFade" - write: "setLinearFade" - notify: "linearFadeChanged" - index: 1 - } - Property { - name: "quadraticFade" - type: "float" - read: "quadraticFade" - write: "setQuadraticFade" - notify: "quadraticFadeChanged" - index: 2 - } - Signal { name: "constantFadeChanged" } - Signal { name: "linearFadeChanged" } - Signal { name: "quadraticFadeChanged" } - Method { - name: "setConstantFade" - Parameter { name: "constantFade"; type: "float" } - } - Method { - name: "setLinearFade" - Parameter { name: "linearFade"; type: "float" } - } - Method { - name: "setQuadraticFade" - Parameter { name: "quadraticFade"; type: "float" } - } - } - Component { - file: "private/qquick3dprincipledmaterial_p.h" - name: "QQuick3DPrincipledMaterial" - accessSemantics: "reference" - prototype: "QQuick3DMaterial" - exports: [ - "QtQuick3D/PrincipledMaterial 6.0", - "QtQuick3D/PrincipledMaterial 6.2", - "QtQuick3D/PrincipledMaterial 6.3", - "QtQuick3D/PrincipledMaterial 6.5" - ] - exportMetaObjectRevisions: [1536, 1538, 1539, 1541] - Enum { - name: "Lighting" - values: ["NoLighting", "FragmentLighting"] - } - Enum { - name: "BlendMode" - values: ["SourceOver", "Screen", "Multiply"] - } - Enum { - name: "AlphaMode" - values: ["Default", "Mask", "Blend", "Opaque"] - } - Property { - name: "lighting" - type: "Lighting" - read: "lighting" - write: "setLighting" - notify: "lightingChanged" - index: 0 - } - Property { - name: "blendMode" - type: "BlendMode" - read: "blendMode" - write: "setBlendMode" - notify: "blendModeChanged" - index: 1 - } - Property { - name: "baseColor" - type: "QColor" - read: "baseColor" - write: "setBaseColor" - notify: "baseColorChanged" - index: 2 - } - Property { - name: "baseColorMap" - type: "QQuick3DTexture" - isPointer: true - read: "baseColorMap" - write: "setBaseColorMap" - notify: "baseColorMapChanged" - index: 3 - } - Property { - name: "metalness" - type: "float" - read: "metalness" - write: "setMetalness" - notify: "metalnessChanged" - index: 4 - } - Property { - name: "metalnessMap" - type: "QQuick3DTexture" - isPointer: true - read: "metalnessMap" - write: "setMetalnessMap" - notify: "metalnessMapChanged" - index: 5 - } - Property { - name: "metalnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "metalnessChannel" - write: "setMetalnessChannel" - notify: "metalnessChannelChanged" - index: 6 - } - Property { - name: "specularAmount" - type: "float" - read: "specularAmount" - write: "setSpecularAmount" - notify: "specularAmountChanged" - index: 7 - } - Property { - name: "specularMap" - type: "QQuick3DTexture" - isPointer: true - read: "specularMap" - write: "setSpecularMap" - notify: "specularMapChanged" - index: 8 - } - Property { - name: "specularTint" - type: "float" - read: "specularTint" - write: "setSpecularTint" - notify: "specularTintChanged" - index: 9 - } - Property { - name: "roughness" - type: "float" - read: "roughness" - write: "setRoughness" - notify: "roughnessChanged" - index: 10 - } - Property { - name: "roughnessMap" - type: "QQuick3DTexture" - isPointer: true - read: "roughnessMap" - write: "setRoughnessMap" - notify: "roughnessMapChanged" - index: 11 - } - Property { - name: "roughnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "roughnessChannel" - write: "setRoughnessChannel" - notify: "roughnessChannelChanged" - index: 12 - } - Property { - name: "emissiveFactor" - type: "QVector3D" - read: "emissiveFactor" - write: "setEmissiveFactor" - notify: "emissiveFactorChanged" - index: 13 - } - Property { - name: "emissiveMap" - type: "QQuick3DTexture" - isPointer: true - read: "emissiveMap" - write: "setEmissiveMap" - notify: "emissiveMapChanged" - index: 14 - } - Property { - name: "opacity" - type: "float" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 15 - } - Property { - name: "opacityMap" - type: "QQuick3DTexture" - isPointer: true - read: "opacityMap" - write: "setOpacityMap" - notify: "opacityMapChanged" - index: 16 - } - Property { - name: "opacityChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "opacityChannel" - write: "setOpacityChannel" - notify: "opacityChannelChanged" - index: 17 - } - Property { - name: "normalMap" - type: "QQuick3DTexture" - isPointer: true - read: "normalMap" - write: "setNormalMap" - notify: "normalMapChanged" - index: 18 - } - Property { - name: "normalStrength" - type: "float" - read: "normalStrength" - write: "setNormalStrength" - notify: "normalStrengthChanged" - index: 19 - } - Property { - name: "specularReflectionMap" - type: "QQuick3DTexture" - isPointer: true - read: "specularReflectionMap" - write: "setSpecularReflectionMap" - notify: "specularReflectionMapChanged" - index: 20 - } - Property { - name: "occlusionMap" - type: "QQuick3DTexture" - isPointer: true - read: "occlusionMap" - write: "setOcclusionMap" - notify: "occlusionMapChanged" - index: 21 - } - Property { - name: "occlusionChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "occlusionChannel" - write: "setOcclusionChannel" - notify: "occlusionChannelChanged" - index: 22 - } - Property { - name: "occlusionAmount" - type: "float" - read: "occlusionAmount" - write: "setOcclusionAmount" - notify: "occlusionAmountChanged" - index: 23 - } - Property { - name: "alphaMode" - type: "AlphaMode" - read: "alphaMode" - write: "setAlphaMode" - notify: "alphaModeChanged" - index: 24 - } - Property { - name: "alphaCutoff" - type: "float" - read: "alphaCutoff" - write: "setAlphaCutoff" - notify: "alphaCutoffChanged" - index: 25 - } - Property { - name: "pointSize" - type: "float" - read: "pointSize" - write: "setPointSize" - notify: "pointSizeChanged" - index: 26 - } - Property { - name: "lineWidth" - type: "float" - read: "lineWidth" - write: "setLineWidth" - notify: "lineWidthChanged" - index: 27 - } - Property { - name: "heightMap" - revision: 1538 - type: "QQuick3DTexture" - isPointer: true - read: "heightMap" - write: "setHeightMap" - notify: "heightMapChanged" - index: 28 - } - Property { - name: "heightChannel" - revision: 1538 - type: "QQuick3DMaterial::TextureChannelMapping" - read: "heightChannel" - write: "setHeightChannel" - notify: "heightChannelChanged" - index: 29 - } - Property { - name: "heightAmount" - revision: 1538 - type: "float" - read: "heightAmount" - write: "setHeightAmount" - notify: "heightAmountChanged" - index: 30 - } - Property { - name: "minHeightMapSamples" - revision: 1538 - type: "int" - read: "minHeightMapSamples" - write: "setMinHeightMapSamples" - notify: "minHeightMapSamplesChanged" - index: 31 - } - Property { - name: "maxHeightMapSamples" - revision: 1538 - type: "int" - read: "maxHeightMapSamples" - write: "setMaxHeightMapSamples" - notify: "maxHeightMapSamplesChanged" - index: 32 - } - Property { - name: "clearcoatAmount" - revision: 1539 - type: "float" - read: "clearcoatAmount" - write: "setClearcoatAmount" - notify: "clearcoatAmountChanged" - index: 33 - } - Property { - name: "clearcoatMap" - revision: 1539 - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatMap" - write: "setClearcoatMap" - notify: "clearcoatMapChanged" - index: 34 - } - Property { - name: "clearcoatChannel" - revision: 1539 - type: "QQuick3DMaterial::TextureChannelMapping" - read: "clearcoatChannel" - write: "setClearcoatChannel" - notify: "clearcoatChannelChanged" - index: 35 - } - Property { - name: "clearcoatRoughnessAmount" - revision: 1539 - type: "float" - read: "clearcoatRoughnessAmount" - write: "setClearcoatRoughnessAmount" - notify: "clearcoatRoughnessAmountChanged" - index: 36 - } - Property { - name: "clearcoatRoughnessChannel" - revision: 1539 - type: "QQuick3DMaterial::TextureChannelMapping" - read: "clearcoatRoughnessChannel" - write: "setClearcoatRoughnessChannel" - notify: "clearcoatRoughnessChannelChanged" - index: 37 - } - Property { - name: "clearcoatRoughnessMap" - revision: 1539 - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatRoughnessMap" - write: "setClearcoatRoughnessMap" - notify: "clearcoatRoughnessMapChanged" - index: 38 - } - Property { - name: "clearcoatNormalMap" - revision: 1539 - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatNormalMap" - write: "setClearcoatNormalMap" - notify: "clearcoatNormalMapChanged" - index: 39 - } - Property { - name: "transmissionFactor" - type: "float" - read: "transmissionFactor" - write: "setTransmissionFactor" - notify: "transmissionFactorChanged" - index: 40 - } - Property { - name: "transmissionMap" - type: "QQuick3DTexture" - isPointer: true - read: "transmissionMap" - write: "setTransmissionMap" - notify: "transmissionMapChanged" - index: 41 - } - Property { - name: "transmissionChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "transmissionChannel" - write: "setTransmissionChannel" - notify: "transmissionChannelChanged" - index: 42 - } - Property { - name: "thicknessFactor" - revision: 1539 - type: "float" - read: "thicknessFactor" - write: "setThicknessFactor" - notify: "thicknessFactorChanged" - index: 43 - } - Property { - name: "thicknessMap" - revision: 1539 - type: "QQuick3DTexture" - isPointer: true - read: "thicknessMap" - write: "setThicknessMap" - notify: "thicknessMapChanged" - index: 44 - } - Property { - name: "thicknessChannel" - revision: 1539 - type: "QQuick3DMaterial::TextureChannelMapping" - read: "thicknessChannel" - write: "setThicknessChannel" - notify: "thicknessChannelChanged" - index: 45 - } - Property { - name: "attenuationDistance" - revision: 1539 - type: "float" - read: "attenuationDistance" - write: "setAttenuationDistance" - notify: "attenuationDistanceChanged" - index: 46 - } - Property { - name: "attenuationColor" - revision: 1539 - type: "QColor" - read: "attenuationColor" - write: "setAttenuationColor" - notify: "attenuationColorChanged" - index: 47 - } - Property { - name: "indexOfRefraction" - revision: 1539 - type: "float" - read: "indexOfRefraction" - write: "setIndexOfRefraction" - notify: "indexOfRefractionChanged" - index: 48 - } - Property { - name: "vertexColorsEnabled" - revision: 1541 - type: "bool" - read: "vertexColorsEnabled" - write: "setVertexColorsEnabled" - notify: "vertexColorsEnabledChanged" - index: 49 - } - Signal { - name: "lightingChanged" - Parameter { name: "lighting"; type: "QQuick3DPrincipledMaterial::Lighting" } - } - Signal { - name: "blendModeChanged" - Parameter { name: "blendMode"; type: "QQuick3DPrincipledMaterial::BlendMode" } - } - Signal { - name: "baseColorChanged" - Parameter { name: "baseColor"; type: "QColor" } - } - Signal { - name: "baseColorMapChanged" - Parameter { name: "baseColorMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "emissiveMapChanged" - Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "emissiveFactorChanged" - Parameter { name: "emissiveFactor"; type: "QVector3D" } - } - Signal { - name: "specularReflectionMapChanged" - Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "specularMapChanged" - Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "specularTintChanged" - Parameter { name: "specularTint"; type: "float" } - } - Signal { - name: "specularAmountChanged" - Parameter { name: "specularAmount"; type: "float" } - } - Signal { - name: "roughnessChanged" - Parameter { name: "roughness"; type: "float" } - } - Signal { - name: "roughnessMapChanged" - Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "opacityChanged" - Parameter { name: "opacity"; type: "float" } - } - Signal { - name: "opacityMapChanged" - Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "normalMapChanged" - Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "metalnessChanged" - Parameter { name: "metalness"; type: "float" } - } - Signal { - name: "metalnessMapChanged" - Parameter { name: "metalnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "normalStrengthChanged" - Parameter { name: "normalStrength"; type: "float" } - } - Signal { - name: "occlusionMapChanged" - Parameter { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "occlusionAmountChanged" - Parameter { name: "occlusionAmount"; type: "float" } - } - Signal { - name: "alphaModeChanged" - Parameter { name: "alphaMode"; type: "QQuick3DPrincipledMaterial::AlphaMode" } - } - Signal { - name: "alphaCutoffChanged" - Parameter { name: "alphaCutoff"; type: "float" } - } - Signal { - name: "metalnessChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "roughnessChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "opacityChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "occlusionChannelChanged" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { name: "pointSizeChanged" } - Signal { name: "lineWidthChanged" } - Signal { - name: "heightMapChanged" - revision: 1538 - Parameter { name: "heightMap"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "heightChannelChanged" - revision: 1538 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "heightAmountChanged" - revision: 1538 - Parameter { name: "heightAmount"; type: "float" } - } - Signal { - name: "minHeightMapSamplesChanged" - revision: 1538 - Parameter { name: "samples"; type: "int" } - } - Signal { - name: "maxHeightMapSamplesChanged" - revision: 1538 - Parameter { name: "samples"; type: "int" } - } - Signal { - name: "clearcoatAmountChanged" - revision: 1539 - Parameter { name: "amount"; type: "float" } - } - Signal { - name: "clearcoatMapChanged" - revision: 1539 - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "clearcoatChannelChanged" - revision: 1539 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "clearcoatRoughnessAmountChanged" - revision: 1539 - Parameter { name: "amount"; type: "float" } - } - Signal { - name: "clearcoatRoughnessChannelChanged" - revision: 1539 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "clearcoatRoughnessMapChanged" - revision: 1539 - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "clearcoatNormalMapChanged" - revision: 1539 - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "transmissionFactorChanged" - revision: 1539 - Parameter { name: "amount"; type: "float" } - } - Signal { - name: "transmissionMapChanged" - revision: 1539 - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "transmissionChannelChanged" - revision: 1539 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "thicknessFactorChanged" - revision: 1539 - Parameter { name: "amount"; type: "float" } - } - Signal { - name: "thicknessMapChanged" - revision: 1539 - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - Signal { - name: "thicknessChannelChanged" - revision: 1539 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Signal { - name: "attenuationDistanceChanged" - revision: 1539 - Parameter { name: "distance"; type: "float" } - } - Signal { - name: "attenuationColorChanged" - revision: 1539 - Parameter { name: "color"; type: "QColor" } - } - Signal { - name: "indexOfRefractionChanged" - revision: 1539 - Parameter { name: "indexOfRefraction"; type: "float" } - } - Signal { - name: "vertexColorsEnabledChanged" - revision: 1541 - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - Method { - name: "setLighting" - Parameter { name: "lighting"; type: "QQuick3DPrincipledMaterial::Lighting" } - } - Method { - name: "setBlendMode" - Parameter { name: "blendMode"; type: "QQuick3DPrincipledMaterial::BlendMode" } - } - Method { - name: "setBaseColor" - Parameter { name: "baseColor"; type: "QColor" } - } - Method { - name: "setBaseColorMap" - Parameter { name: "baseColorMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setEmissiveMap" - Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setEmissiveFactor" - Parameter { name: "emissiveFactor"; type: "QVector3D" } - } - Method { - name: "setSpecularReflectionMap" - Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularMap" - Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularTint" - Parameter { name: "specularTint"; type: "float" } - } - Method { - name: "setSpecularAmount" - Parameter { name: "specularAmount"; type: "float" } - } - Method { - name: "setRoughness" - Parameter { name: "roughness"; type: "float" } - } - Method { - name: "setRoughnessMap" - Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOpacity" - Parameter { name: "opacity"; type: "float" } - } - Method { - name: "setOpacityMap" - Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setNormalMap" - Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setMetalness" - Parameter { name: "metalnessAmount"; type: "float" } - } - Method { - name: "setMetalnessMap" - Parameter { name: "metalnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setNormalStrength" - Parameter { name: "normalStrength"; type: "float" } - } - Method { - name: "setOcclusionMap" - Parameter { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOcclusionAmount" - Parameter { name: "occlusionAmount"; type: "float" } - } - Method { - name: "setAlphaMode" - Parameter { name: "alphaMode"; type: "QQuick3DPrincipledMaterial::AlphaMode" } - } - Method { - name: "setAlphaCutoff" - Parameter { name: "alphaCutoff"; type: "float" } - } - Method { - name: "setMetalnessChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setRoughnessChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setOpacityChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setOcclusionChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setPointSize" - Parameter { name: "size"; type: "float" } - } - Method { - name: "setLineWidth" - Parameter { name: "width"; type: "float" } - } - Method { - name: "setHeightMap" - revision: 1538 - Parameter { name: "heightMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setHeightChannel" - revision: 1538 - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setHeightAmount" - revision: 1538 - Parameter { name: "heightAmount"; type: "float" } - } - Method { - name: "setMinHeightMapSamples" - revision: 1538 - Parameter { name: "samples"; type: "int" } - } - Method { - name: "setMaxHeightMapSamples" - revision: 1538 - Parameter { name: "samples"; type: "int" } - } - Method { - name: "setClearcoatAmount" - revision: 1539 - Parameter { name: "newClearcoatAmount"; type: "float" } - } - Method { - name: "setClearcoatMap" - revision: 1539 - Parameter { name: "newClearcoatMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setClearcoatChannel" - revision: 1539 - Parameter { name: "newClearcoatChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setClearcoatRoughnessAmount" - revision: 1539 - Parameter { name: "newClearcoatRoughnessAmount"; type: "float" } - } - Method { - name: "setClearcoatRoughnessChannel" - revision: 1539 - Parameter { - name: "newClearcoatRoughnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - } - } - Method { - name: "setClearcoatRoughnessMap" - revision: 1539 - Parameter { name: "newClearcoatRoughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setClearcoatNormalMap" - revision: 1539 - Parameter { name: "newClearcoatNormalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTransmissionFactor" - revision: 1539 - Parameter { name: "newTransmissionFactor"; type: "float" } - } - Method { - name: "setTransmissionMap" - revision: 1539 - Parameter { name: "newTransmissionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTransmissionChannel" - revision: 1539 - Parameter { name: "newTransmissionChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setThicknessFactor" - revision: 1539 - Parameter { name: "newThicknessFactor"; type: "float" } - } - Method { - name: "setThicknessMap" - revision: 1539 - Parameter { name: "newThicknessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setThicknessChannel" - revision: 1539 - Parameter { name: "newThicknessChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setAttenuationDistance" - revision: 1539 - Parameter { name: "newAttenuationDistance"; type: "float" } - } - Method { - name: "setAttenuationColor" - revision: 1539 - Parameter { name: "newAttenuationColor"; type: "QColor" } - } - Method { - name: "setIndexOfRefraction" - revision: 1539 - Parameter { name: "indexOfRefraction"; type: "float" } - } - Method { - name: "setVertexColorsEnabled" - revision: 1541 - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - } - Component { - file: "private/qquick3dquaternionanimation_p.h" - name: "QQuick3DQuaternionAnimation" - accessSemantics: "reference" - prototype: "QQuickPropertyAnimation" - exports: ["QtQuick3D/QuaternionAnimation 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Type" - values: ["Slerp", "Nlerp"] - } - Property { name: "from"; type: "QQuaternion"; read: "from"; write: "setFrom"; index: 0 } - Property { name: "to"; type: "QQuaternion"; read: "to"; write: "setTo"; index: 1 } - Property { - name: "type" - type: "Type" - read: "type" - write: "setType" - notify: "typeChanged" - index: 2 - } - Property { - name: "fromXRotation" - type: "float" - read: "fromXRotation" - write: "setFromXRotation" - notify: "fromXRotationChanged" - index: 3 - } - Property { - name: "fromYRotation" - type: "float" - read: "fromYRotation" - write: "setFromYRotation" - notify: "fromYRotationChanged" - index: 4 - } - Property { - name: "fromZRotation" - type: "float" - read: "fromZRotation" - write: "setFromZRotation" - notify: "fromZRotationChanged" - index: 5 - } - Property { - name: "toXRotation" - type: "float" - read: "toXRotation" - write: "setToXRotation" - notify: "toXRotationChanged" - index: 6 - } - Property { - name: "toYRotation" - type: "float" - read: "toYRotation" - write: "setToYRotation" - notify: "toYRotationChanged" - index: 7 - } - Property { - name: "toZRotation" - type: "float" - read: "toZRotation" - write: "setToZRotation" - notify: "toZRotationChanged" - index: 8 - } - Signal { - name: "typeChanged" - Parameter { name: "type"; type: "QQuick3DQuaternionAnimation::Type" } - } - Signal { - name: "fromXRotationChanged" - Parameter { name: "value"; type: "float" } - } - Signal { - name: "fromYRotationChanged" - Parameter { name: "value"; type: "float" } - } - Signal { - name: "fromZRotationChanged" - Parameter { name: "value"; type: "float" } - } - Signal { - name: "toXRotationChanged" - Parameter { name: "value"; type: "float" } - } - Signal { - name: "toYRotationChanged" - Parameter { name: "value"; type: "float" } - } - Signal { - name: "toZRotationChanged" - Parameter { name: "value"; type: "float" } - } - } - Component { - file: "private/qquick3dquaternionutils_p.h" - name: "QQuick3DQuaternionUtils" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Quaternion 6.0"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1536] - Method { - name: "fromAxesAndAngles" - type: "QQuaternion" - Parameter { name: "axis1"; type: "QVector3D" } - Parameter { name: "angle1"; type: "float" } - Parameter { name: "axis2"; type: "QVector3D" } - Parameter { name: "angle2"; type: "float" } - Parameter { name: "axis3"; type: "QVector3D" } - Parameter { name: "angle3"; type: "float" } - } - Method { - name: "fromAxesAndAngles" - type: "QQuaternion" - Parameter { name: "axis1"; type: "QVector3D" } - Parameter { name: "angle1"; type: "float" } - Parameter { name: "axis2"; type: "QVector3D" } - Parameter { name: "angle2"; type: "float" } - } - Method { - name: "fromAxisAndAngle" - type: "QQuaternion" - Parameter { name: "x"; type: "float" } - Parameter { name: "y"; type: "float" } - Parameter { name: "z"; type: "float" } - Parameter { name: "angle"; type: "float" } - } - Method { - name: "fromAxisAndAngle" - type: "QQuaternion" - Parameter { name: "axis"; type: "QVector3D" } - Parameter { name: "angle"; type: "float" } - } - Method { - name: "fromEulerAngles" - type: "QQuaternion" - Parameter { name: "x"; type: "float" } - Parameter { name: "y"; type: "float" } - Parameter { name: "z"; type: "float" } - } - Method { - name: "fromEulerAngles" - type: "QQuaternion" - Parameter { name: "eulerAngles"; type: "QVector3D" } - } - Method { - name: "lookAt" - type: "QQuaternion" - Parameter { name: "sourcePosition"; type: "QVector3D" } - Parameter { name: "targetPosition"; type: "QVector3D" } - Parameter { name: "forwardDirection"; type: "QVector3D" } - Parameter { name: "upDirection"; type: "QVector3D" } - } - Method { - name: "lookAt" - type: "QQuaternion" - isCloned: true - Parameter { name: "sourcePosition"; type: "QVector3D" } - Parameter { name: "targetPosition"; type: "QVector3D" } - Parameter { name: "forwardDirection"; type: "QVector3D" } - } - Method { - name: "lookAt" - type: "QQuaternion" - isCloned: true - Parameter { name: "sourcePosition"; type: "QVector3D" } - Parameter { name: "targetPosition"; type: "QVector3D" } - } - } - Component { - file: "private/qquick3dreflectionprobe_p.h" - name: "QQuick3DReflectionProbe" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: [ - "QtQuick3D/ReflectionProbe 6.3", - "QtQuick3D/ReflectionProbe 6.4", - "QtQuick3D/ReflectionProbe 6.5" - ] - exportMetaObjectRevisions: [1539, 1540, 1541] - Enum { - name: "ReflectionQuality" - values: ["VeryLow", "Low", "Medium", "High", "VeryHigh"] - } - Enum { - name: "ReflectionRefreshMode" - values: ["FirstFrame", "EveryFrame"] - } - Enum { - name: "ReflectionTimeSlicing" - values: ["None", "AllFacesAtOnce", "IndividualFaces"] - } - Property { - name: "quality" - type: "ReflectionQuality" - read: "quality" - write: "setQuality" - notify: "qualityChanged" - index: 0 - } - Property { - name: "clearColor" - type: "QColor" - read: "clearColor" - write: "setClearColor" - notify: "clearColorChanged" - index: 1 - } - Property { - name: "refreshMode" - type: "ReflectionRefreshMode" - read: "refreshMode" - write: "setRefreshMode" - notify: "refreshModeChanged" - index: 2 - } - Property { - name: "timeSlicing" - type: "ReflectionTimeSlicing" - read: "timeSlicing" - write: "setTimeSlicing" - notify: "timeSlicingChanged" - index: 3 - } - Property { - name: "parallaxCorrection" - type: "bool" - read: "parallaxCorrection" - write: "setParallaxCorrection" - notify: "parallaxCorrectionChanged" - index: 4 - } - Property { - name: "boxSize" - type: "QVector3D" - read: "boxSize" - write: "setBoxSize" - notify: "boxSizeChanged" - index: 5 - } - Property { - name: "boxOffset" - revision: 1540 - type: "QVector3D" - read: "boxOffset" - write: "setBoxOffset" - notify: "boxOffsetChanged" - index: 6 - } - Property { - name: "debugView" - revision: 1540 - type: "bool" - read: "debugView" - write: "setDebugView" - notify: "debugViewChanged" - index: 7 - } - Property { - name: "texture" - revision: 1541 - type: "QQuick3DCubeMapTexture" - isPointer: true - read: "texture" - write: "setTexture" - notify: "textureChanged" - index: 8 - } - Signal { name: "qualityChanged" } - Signal { name: "clearColorChanged" } - Signal { name: "refreshModeChanged" } - Signal { name: "timeSlicingChanged" } - Signal { name: "parallaxCorrectionChanged" } - Signal { name: "boxSizeChanged" } - Signal { name: "debugViewChanged"; revision: 1540 } - Signal { name: "boxOffsetChanged"; revision: 1540 } - Signal { name: "textureChanged"; revision: 1541 } - Method { - name: "setQuality" - Parameter { name: "reflectionQuality"; type: "ReflectionQuality" } - } - Method { - name: "setClearColor" - Parameter { name: "clearColor"; type: "QColor" } - } - Method { - name: "setRefreshMode" - Parameter { name: "newRefreshMode"; type: "ReflectionRefreshMode" } - } - Method { - name: "setTimeSlicing" - Parameter { name: "newTimeSlicing"; type: "ReflectionTimeSlicing" } - } - Method { - name: "setParallaxCorrection" - Parameter { name: "parallaxCorrection"; type: "bool" } - } - Method { - name: "setBoxSize" - Parameter { name: "newBoxSize"; type: "QVector3D" } - } - Method { - name: "setDebugView" - revision: 1540 - Parameter { name: "debugView"; type: "bool" } - } - Method { - name: "setBoxOffset" - revision: 1540 - Parameter { name: "boxOffset"; type: "QVector3D" } - } - Method { - name: "setTexture" - revision: 1541 - Parameter { name: "newTexture"; type: "QQuick3DCubeMapTexture"; isPointer: true } - } - Method { name: "scheduleUpdate"; revision: 1540 } - } - Component { - file: "qquick3drenderextensions.h" - name: "QQuick3DRenderExtension" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/RenderExtension 6.6"] - isCreatable: false - exportMetaObjectRevisions: [1542] - } - Component { - file: "private/qquick3drepeater_p.h" - name: "QQuick3DRepeater" - accessSemantics: "reference" - defaultProperty: "delegate" - prototype: "QQuick3DNode" - exports: ["QtQuick3D/Repeater3D 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "model" - type: "QVariant" - read: "model" - write: "setModel" - notify: "modelChanged" - index: 0 - } - Property { - name: "delegate" - type: "QQmlComponent" - isPointer: true - read: "delegate" - write: "setDelegate" - notify: "delegateChanged" - index: 1 - } - Property { - name: "count" - type: "int" - read: "count" - notify: "countChanged" - index: 2 - isReadonly: true - } - Signal { name: "modelChanged" } - Signal { name: "delegateChanged" } - Signal { name: "countChanged" } - Signal { - name: "objectAdded" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QQuick3DObject"; isPointer: true } - } - Signal { - name: "objectRemoved" - Parameter { name: "index"; type: "int" } - Parameter { name: "object"; type: "QQuick3DObject"; isPointer: true } - } - Method { - name: "createdObject" - Parameter { name: "index"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "initObject" - Parameter { type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { - name: "modelUpdated" - Parameter { name: "changeSet"; type: "QQmlChangeSet" } - Parameter { name: "reset"; type: "bool" } - } - Method { - name: "objectAt" - type: "QQuick3DObject" - isPointer: true - Parameter { name: "index"; type: "int" } - } - } - Component { - file: "private/qquick3dresourceloader_p.h" - name: "QQuick3DResourceLoader" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/ResourceLoader 6.3"] - exportMetaObjectRevisions: [1539] - Property { - name: "meshSources" - type: "QUrl" - isList: true - read: "meshSources" - write: "setMeshSources" - notify: "meshSourcesChanged" - index: 0 - } - Property { - name: "textures" - type: "QQuick3DTexture" - isList: true - read: "textures" - index: 1 - isReadonly: true - } - Property { - name: "geometries" - type: "QQuick3DGeometry" - isList: true - read: "geometries" - index: 2 - isReadonly: true - } - Signal { name: "meshSourcesChanged" } - Method { - name: "onGeometryDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "onTextureDestroyed" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qquick3dsceneenvironment_p.h" - name: "QQuick3DSceneEnvironment" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: [ - "QtQuick3D/SceneEnvironment 6.0", - "QtQuick3D/SceneEnvironment 6.4", - "QtQuick3D/SceneEnvironment 6.5" - ] - exportMetaObjectRevisions: [1536, 1540, 1541] - Enum { - name: "QQuick3DEnvironmentAAModeValues" - values: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"] - } - Enum { - name: "QQuick3DEnvironmentAAQualityValues" - values: ["Medium", "High", "VeryHigh"] - } - Enum { - name: "QQuick3DEnvironmentBackgroundTypes" - values: [ - "Transparent", - "Unspecified", - "Color", - "SkyBox", - "SkyBoxCubeMap" - ] - } - Enum { - name: "QQuick3DEnvironmentTonemapModes" - values: [ - "TonemapModeNone", - "TonemapModeLinear", - "TonemapModeAces", - "TonemapModeHejlDawson", - "TonemapModeFilmic" - ] - } - Property { - name: "antialiasingMode" - type: "QQuick3DEnvironmentAAModeValues" - read: "antialiasingMode" - write: "setAntialiasingMode" - notify: "antialiasingModeChanged" - index: 0 - } - Property { - name: "antialiasingQuality" - type: "QQuick3DEnvironmentAAQualityValues" - read: "antialiasingQuality" - write: "setAntialiasingQuality" - notify: "antialiasingQualityChanged" - index: 1 - } - Property { - name: "temporalAAEnabled" - type: "bool" - read: "temporalAAEnabled" - write: "setTemporalAAEnabled" - notify: "temporalAAEnabledChanged" - index: 2 - } - Property { - name: "temporalAAStrength" - type: "float" - read: "temporalAAStrength" - write: "setTemporalAAStrength" - notify: "temporalAAStrengthChanged" - index: 3 - } - Property { - name: "backgroundMode" - type: "QQuick3DEnvironmentBackgroundTypes" - read: "backgroundMode" - write: "setBackgroundMode" - notify: "backgroundModeChanged" - index: 4 - } - Property { - name: "clearColor" - type: "QColor" - read: "clearColor" - write: "setClearColor" - notify: "clearColorChanged" - index: 5 - } - Property { - name: "depthTestEnabled" - type: "bool" - read: "depthTestEnabled" - write: "setDepthTestEnabled" - notify: "depthTestEnabledChanged" - index: 6 - } - Property { - name: "depthPrePassEnabled" - type: "bool" - read: "depthPrePassEnabled" - write: "setDepthPrePassEnabled" - notify: "depthPrePassEnabledChanged" - index: 7 - } - Property { - name: "aoStrength" - type: "float" - read: "aoStrength" - write: "setAoStrength" - notify: "aoStrengthChanged" - index: 8 - } - Property { - name: "aoDistance" - type: "float" - read: "aoDistance" - write: "setAoDistance" - notify: "aoDistanceChanged" - index: 9 - } - Property { - name: "aoSoftness" - type: "float" - read: "aoSoftness" - write: "setAoSoftness" - notify: "aoSoftnessChanged" - index: 10 - } - Property { - name: "aoDither" - type: "bool" - read: "aoDither" - write: "setAoDither" - notify: "aoDitherChanged" - index: 11 - } - Property { - name: "aoSampleRate" - type: "int" - read: "aoSampleRate" - write: "setAoSampleRate" - notify: "aoSampleRateChanged" - index: 12 - } - Property { - name: "aoBias" - type: "float" - read: "aoBias" - write: "setAoBias" - notify: "aoBiasChanged" - index: 13 - } - Property { - name: "aoEnabled" - revision: 1541 - type: "bool" - read: "aoEnabled" - write: "setAoEnabled" - notify: "aoEnabledChanged" - index: 14 - } - Property { - name: "lightProbe" - type: "QQuick3DTexture" - isPointer: true - read: "lightProbe" - write: "setLightProbe" - notify: "lightProbeChanged" - index: 15 - } - Property { - name: "probeExposure" - type: "float" - read: "probeExposure" - write: "setProbeExposure" - notify: "probeExposureChanged" - index: 16 - } - Property { - name: "probeHorizon" - type: "float" - read: "probeHorizon" - write: "setProbeHorizon" - notify: "probeHorizonChanged" - index: 17 - } - Property { - name: "probeOrientation" - type: "QVector3D" - read: "probeOrientation" - write: "setProbeOrientation" - notify: "probeOrientationChanged" - index: 18 - } - Property { - name: "skyBoxCubeMap" - revision: 1540 - type: "QQuick3DCubeMapTexture" - isPointer: true - read: "skyBoxCubeMap" - write: "setSkyBoxCubeMap" - notify: "skyBoxCubeMapChanged" - index: 19 - } - Property { - name: "tonemapMode" - type: "QQuick3DEnvironmentTonemapModes" - read: "tonemapMode" - write: "setTonemapMode" - notify: "tonemapModeChanged" - index: 20 - } - Property { - name: "effects" - type: "QQuick3DEffect" - isList: true - read: "effects" - index: 21 - isReadonly: true - } - Property { - name: "skyboxBlurAmount" - revision: 1540 - type: "float" - read: "skyboxBlurAmount" - write: "setSkyboxBlurAmount" - notify: "skyboxBlurAmountChanged" - index: 22 - } - Property { - name: "specularAAEnabled" - revision: 1540 - type: "bool" - read: "specularAAEnabled" - write: "setSpecularAAEnabled" - notify: "specularAAEnabledChanged" - index: 23 - } - Property { - name: "lightmapper" - revision: 1540 - type: "QQuick3DLightmapper" - isPointer: true - read: "lightmapper" - write: "setLightmapper" - notify: "lightmapperChanged" - index: 24 - } - Property { - name: "debugSettings" - revision: 1541 - type: "QQuick3DDebugSettings" - isPointer: true - read: "debugSettings" - write: "setDebugSettings" - notify: "debugSettingsChanged" - index: 25 - } - Property { - name: "scissorRect" - revision: 1541 - type: "QRect" - read: "scissorRect" - write: "setScissorRect" - notify: "scissorRectChanged" - index: 26 - } - Property { - name: "fog" - revision: 1541 - type: "QQuick3DFog" - isPointer: true - read: "fog" - write: "setFog" - notify: "fogChanged" - index: 27 - } - Signal { name: "antialiasingModeChanged" } - Signal { name: "antialiasingQualityChanged" } - Signal { name: "temporalAAEnabledChanged" } - Signal { name: "temporalAAStrengthChanged" } - Signal { name: "backgroundModeChanged" } - Signal { name: "clearColorChanged" } - Signal { name: "aoStrengthChanged" } - Signal { name: "aoDistanceChanged" } - Signal { name: "aoSoftnessChanged" } - Signal { name: "aoDitherChanged" } - Signal { name: "aoSampleRateChanged" } - Signal { name: "aoBiasChanged" } - Signal { name: "aoEnabledChanged"; revision: 1541 } - Signal { name: "lightProbeChanged" } - Signal { name: "probeExposureChanged" } - Signal { name: "probeHorizonChanged" } - Signal { name: "probeOrientationChanged" } - Signal { name: "depthTestEnabledChanged" } - Signal { name: "depthPrePassEnabledChanged" } - Signal { name: "tonemapModeChanged" } - Signal { name: "skyboxBlurAmountChanged"; revision: 1540 } - Signal { name: "specularAAEnabledChanged"; revision: 1540 } - Signal { name: "lightmapperChanged"; revision: 1540 } - Signal { name: "skyBoxCubeMapChanged"; revision: 1540 } - Signal { name: "debugSettingsChanged"; revision: 1541 } - Signal { name: "scissorRectChanged"; revision: 1541 } - Signal { name: "fogChanged"; revision: 1541 } - Method { - name: "setAntialiasingMode" - Parameter { - name: "antialiasingMode" - type: "QQuick3DSceneEnvironment::QQuick3DEnvironmentAAModeValues" - } - } - Method { - name: "setAntialiasingQuality" - Parameter { - name: "antialiasingQuality" - type: "QQuick3DSceneEnvironment::QQuick3DEnvironmentAAQualityValues" - } - } - Method { - name: "setTemporalAAEnabled" - Parameter { name: "temporalAAEnabled"; type: "bool" } - } - Method { - name: "setTemporalAAStrength" - Parameter { name: "strength"; type: "float" } - } - Method { - name: "setBackgroundMode" - Parameter { - name: "backgroundMode" - type: "QQuick3DSceneEnvironment::QQuick3DEnvironmentBackgroundTypes" - } - } - Method { - name: "setClearColor" - Parameter { name: "clearColor"; type: "QColor" } - } - Method { - name: "setAoStrength" - Parameter { name: "aoStrength"; type: "float" } - } - Method { - name: "setAoDistance" - Parameter { name: "aoDistance"; type: "float" } - } - Method { - name: "setAoSoftness" - Parameter { name: "aoSoftness"; type: "float" } - } - Method { - name: "setAoDither" - Parameter { name: "aoDither"; type: "bool" } - } - Method { - name: "setAoSampleRate" - Parameter { name: "aoSampleRate"; type: "int" } - } - Method { - name: "setAoBias" - Parameter { name: "aoBias"; type: "float" } - } - Method { - name: "setLightProbe" - Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setProbeExposure" - Parameter { name: "probeExposure"; type: "float" } - } - Method { - name: "setProbeHorizon" - Parameter { name: "probeHorizon"; type: "float" } - } - Method { - name: "setProbeOrientation" - Parameter { name: "orientation"; type: "QVector3D" } - } - Method { - name: "setDepthTestEnabled" - Parameter { name: "depthTestEnabled"; type: "bool" } - } - Method { - name: "setDepthPrePassEnabled" - Parameter { name: "depthPrePassEnabled"; type: "bool" } - } - Method { - name: "setTonemapMode" - Parameter { - name: "tonemapMode" - type: "QQuick3DSceneEnvironment::QQuick3DEnvironmentTonemapModes" - } - } - Method { - name: "setSkyboxBlurAmount" - revision: 1540 - Parameter { name: "newSkyboxBlurAmount"; type: "float" } - } - Method { - name: "setSpecularAAEnabled" - revision: 1540 - Parameter { name: "enabled"; type: "bool" } - } - Method { - name: "setSkyBoxCubeMap" - revision: 1540 - Parameter { name: "newSkyBoxCubeMap"; type: "QQuick3DCubeMapTexture"; isPointer: true } - } - Method { - name: "setLightmapper" - revision: 1540 - Parameter { name: "lightmapper"; type: "QQuick3DLightmapper"; isPointer: true } - } - Method { - name: "setDebugSettings" - revision: 1541 - Parameter { name: "newDebugSettings"; type: "QQuick3DDebugSettings"; isPointer: true } - } - Method { - name: "setScissorRect" - revision: 1541 - Parameter { name: "scissorRect"; type: "QRect" } - } - Method { - name: "setFog" - revision: 1541 - Parameter { name: "fog"; type: "QQuick3DFog"; isPointer: true } - } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsApplyValue" - accessSemantics: "reference" - prototype: "QQuick3DShaderUtilsRenderCommand" - exports: ["QtQuick3D/SetUniformValue 6.0"] - exportMetaObjectRevisions: [1536] - Property { name: "target"; type: "QByteArray"; index: 0 } - Property { name: "value"; type: "QVariant"; index: 1 } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsBuffer" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Buffer 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "TextureFilterOperation" - values: ["Unknown", "Nearest", "Linear"] - } - Enum { - name: "TextureCoordOperation" - values: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"] - } - Enum { - name: "AllocateBufferFlagValues" - values: ["None", "SceneLifetime"] - } - Enum { - name: "TextureFormat" - values: [ - "Unknown", - "RGBA8", - "RGBA16F", - "RGBA32F", - "R8", - "R16", - "R16F", - "R32F" - ] - } - Property { name: "format"; type: "TextureFormat"; read: "format"; write: "setFormat"; index: 0 } - Property { - name: "textureFilterOperation" - type: "TextureFilterOperation" - read: "textureFilterOperation" - write: "setTextureFilterOperation" - index: 1 - } - Property { - name: "textureCoordOperation" - type: "TextureCoordOperation" - read: "textureCoordOperation" - write: "setTextureCoordOperation" - index: 2 - } - Property { name: "sizeMultiplier"; type: "float"; index: 3 } - Property { - name: "bufferFlags" - type: "AllocateBufferFlagValues" - read: "bufferFlags" - write: "setBufferFlags" - index: 4 - } - Property { name: "name"; type: "QByteArray"; index: 5 } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsBufferInput" - accessSemantics: "reference" - prototype: "QQuick3DShaderUtilsRenderCommand" - exports: ["QtQuick3D/BufferInput 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "buffer" - type: "QQuick3DShaderUtilsBuffer" - isPointer: true - read: "buffer" - write: "setBuffer" - index: 0 - } - Property { name: "sampler"; type: "QByteArray"; index: 1 } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsRenderCommand" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Command 6.0"] - exportMetaObjectRevisions: [1536] - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsRenderPass" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Pass 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "commands" - type: "QQuick3DShaderUtilsRenderCommand" - isList: true - read: "commands" - index: 0 - isReadonly: true - } - Property { name: "output"; type: "QQuick3DShaderUtilsBuffer"; isPointer: true; index: 1 } - Property { - name: "shaders" - type: "QQuick3DShaderUtilsShader" - isList: true - read: "shaders" - index: 2 - isReadonly: true - } - Signal { name: "changed" } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsShader" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/Shader 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Stage" - type: "quint8" - values: ["Vertex", "Fragment"] - } - Property { name: "shader"; type: "QUrl"; notify: "shaderChanged"; index: 0 } - Property { name: "stage"; type: "Stage"; notify: "stageChanged"; index: 1 } - Signal { name: "shaderChanged" } - Signal { name: "stageChanged" } - } - Component { - file: "private/qquick3dshaderutils_p.h" - name: "QQuick3DShaderUtilsTextureInput" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D/TextureInput 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "texture" - type: "QQuick3DTexture" - isPointer: true - read: "texture" - write: "setTexture" - notify: "textureChanged" - index: 0 - } - Property { name: "enabled"; type: "bool"; notify: "enabledChanged"; index: 1 } - Signal { name: "textureChanged" } - Signal { name: "enabledChanged" } - Method { - name: "setTexture" - Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } - } - } - Component { - file: "private/qquick3dskeleton_p.h" - name: "QQuick3DSkeleton" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D/Skeleton 6.0"] - exportMetaObjectRevisions: [1536] - Signal { name: "skeletonNodeDirty" } - } - Component { - file: "private/qquick3dskin_p.h" - name: "QQuick3DSkin" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/Skin 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "joints" - type: "QQuick3DNode" - isList: true - read: "joints" - index: 0 - isReadonly: true - } - Property { - name: "inverseBindPoses" - type: "QMatrix4x4" - isList: true - read: "inverseBindPoses" - write: "setInverseBindPoses" - notify: "inverseBindPosesChanged" - index: 1 - } - Signal { name: "inverseBindPosesChanged" } - Method { - name: "setInverseBindPoses" - Parameter { name: "poses"; type: "QMatrix4x4"; isList: true } - } - } - Component { - file: "private/qquick3dspecularglossymaterial_p.h" - name: "QQuick3DSpecularGlossyMaterial" - accessSemantics: "reference" - prototype: "QQuick3DMaterial" - exports: [ - "QtQuick3D/SpecularGlossyMaterial 6.4", - "QtQuick3D/SpecularGlossyMaterial 6.5" - ] - exportMetaObjectRevisions: [1540, 1541] - Enum { - name: "Lighting" - values: ["NoLighting", "FragmentLighting"] - } - Enum { - name: "BlendMode" - values: ["SourceOver", "Screen", "Multiply"] - } - Enum { - name: "AlphaMode" - values: ["Default", "Mask", "Blend", "Opaque"] - } - Property { - name: "lighting" - type: "Lighting" - read: "lighting" - write: "setLighting" - notify: "lightingChanged" - index: 0 - } - Property { - name: "blendMode" - type: "BlendMode" - read: "blendMode" - write: "setBlendMode" - notify: "blendModeChanged" - index: 1 - } - Property { - name: "albedoColor" - type: "QColor" - read: "albedoColor" - write: "setAlbedoColor" - notify: "albedoColorChanged" - index: 2 - } - Property { - name: "albedoMap" - type: "QQuick3DTexture" - isPointer: true - read: "albedoMap" - write: "setAlbedoMap" - notify: "albedoMapChanged" - index: 3 - } - Property { - name: "specularColor" - type: "QColor" - read: "specularColor" - write: "setSpecularColor" - notify: "specularColorChanged" - index: 4 - } - Property { - name: "specularMap" - type: "QQuick3DTexture" - isPointer: true - read: "specularMap" - write: "setSpecularMap" - notify: "specularMapChanged" - index: 5 - } - Property { - name: "glossiness" - type: "float" - read: "glossiness" - write: "setGlossiness" - notify: "glossinessChanged" - index: 6 - } - Property { - name: "glossinessMap" - type: "QQuick3DTexture" - isPointer: true - read: "glossinessMap" - write: "setGlossinessMap" - notify: "glossinessMapChanged" - index: 7 - } - Property { - name: "glossinessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "glossinessChannel" - write: "setGlossinessChannel" - notify: "glossinessChannelChanged" - index: 8 - } - Property { - name: "emissiveFactor" - type: "QVector3D" - read: "emissiveFactor" - write: "setEmissiveFactor" - notify: "emissiveFactorChanged" - index: 9 - } - Property { - name: "emissiveMap" - type: "QQuick3DTexture" - isPointer: true - read: "emissiveMap" - write: "setEmissiveMap" - notify: "emissiveMapChanged" - index: 10 - } - Property { - name: "opacity" - type: "float" - read: "opacity" - write: "setOpacity" - notify: "opacityChanged" - index: 11 - } - Property { - name: "opacityMap" - type: "QQuick3DTexture" - isPointer: true - read: "opacityMap" - write: "setOpacityMap" - notify: "opacityMapChanged" - index: 12 - } - Property { - name: "opacityChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "opacityChannel" - write: "setOpacityChannel" - notify: "opacityChannelChanged" - index: 13 - } - Property { - name: "normalMap" - type: "QQuick3DTexture" - isPointer: true - read: "normalMap" - write: "setNormalMap" - notify: "normalMapChanged" - index: 14 - } - Property { - name: "normalStrength" - type: "float" - read: "normalStrength" - write: "setNormalStrength" - notify: "normalStrengthChanged" - index: 15 - } - Property { - name: "occlusionMap" - type: "QQuick3DTexture" - isPointer: true - read: "occlusionMap" - write: "setOcclusionMap" - notify: "occlusionMapChanged" - index: 16 - } - Property { - name: "occlusionChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "occlusionChannel" - write: "setOcclusionChannel" - notify: "occlusionChannelChanged" - index: 17 - } - Property { - name: "occlusionAmount" - type: "float" - read: "occlusionAmount" - write: "setOcclusionAmount" - notify: "occlusionAmountChanged" - index: 18 - } - Property { - name: "alphaMode" - type: "AlphaMode" - read: "alphaMode" - write: "setAlphaMode" - notify: "alphaModeChanged" - index: 19 - } - Property { - name: "alphaCutoff" - type: "float" - read: "alphaCutoff" - write: "setAlphaCutoff" - notify: "alphaCutoffChanged" - index: 20 - } - Property { - name: "pointSize" - type: "float" - read: "pointSize" - write: "setPointSize" - notify: "pointSizeChanged" - index: 21 - } - Property { - name: "lineWidth" - type: "float" - read: "lineWidth" - write: "setLineWidth" - notify: "lineWidthChanged" - index: 22 - } - Property { - name: "heightMap" - type: "QQuick3DTexture" - isPointer: true - read: "heightMap" - write: "setHeightMap" - notify: "heightMapChanged" - index: 23 - } - Property { - name: "heightChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "heightChannel" - write: "setHeightChannel" - notify: "heightChannelChanged" - index: 24 - } - Property { - name: "heightAmount" - type: "float" - read: "heightAmount" - write: "setHeightAmount" - notify: "heightAmountChanged" - index: 25 - } - Property { - name: "minHeightMapSamples" - type: "int" - read: "minHeightMapSamples" - write: "setMinHeightMapSamples" - notify: "minHeightMapSamplesChanged" - index: 26 - } - Property { - name: "maxHeightMapSamples" - type: "int" - read: "maxHeightMapSamples" - write: "setMaxHeightMapSamples" - notify: "maxHeightMapSamplesChanged" - index: 27 - } - Property { - name: "clearcoatAmount" - type: "float" - read: "clearcoatAmount" - write: "setClearcoatAmount" - notify: "clearcoatAmountChanged" - index: 28 - } - Property { - name: "clearcoatMap" - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatMap" - write: "setClearcoatMap" - notify: "clearcoatMapChanged" - index: 29 - } - Property { - name: "clearcoatChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "clearcoatChannel" - write: "setClearcoatChannel" - notify: "clearcoatChannelChanged" - index: 30 - } - Property { - name: "clearcoatRoughnessAmount" - type: "float" - read: "clearcoatRoughnessAmount" - write: "setClearcoatRoughnessAmount" - notify: "clearcoatRoughnessAmountChanged" - index: 31 - } - Property { - name: "clearcoatRoughnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "clearcoatRoughnessChannel" - write: "setClearcoatRoughnessChannel" - notify: "clearcoatRoughnessChannelChanged" - index: 32 - } - Property { - name: "clearcoatRoughnessMap" - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatRoughnessMap" - write: "setClearcoatRoughnessMap" - notify: "clearcoatRoughnessMapChanged" - index: 33 - } - Property { - name: "clearcoatNormalMap" - type: "QQuick3DTexture" - isPointer: true - read: "clearcoatNormalMap" - write: "setClearcoatNormalMap" - notify: "clearcoatNormalMapChanged" - index: 34 - } - Property { - name: "transmissionFactor" - type: "float" - read: "transmissionFactor" - write: "setTransmissionFactor" - notify: "transmissionFactorChanged" - index: 35 - } - Property { - name: "transmissionMap" - type: "QQuick3DTexture" - isPointer: true - read: "transmissionMap" - write: "setTransmissionMap" - notify: "transmissionMapChanged" - index: 36 - } - Property { - name: "transmissionChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "transmissionChannel" - write: "setTransmissionChannel" - notify: "transmissionChannelChanged" - index: 37 - } - Property { - name: "thicknessFactor" - type: "float" - read: "thicknessFactor" - write: "setThicknessFactor" - notify: "thicknessFactorChanged" - index: 38 - } - Property { - name: "thicknessMap" - type: "QQuick3DTexture" - isPointer: true - read: "thicknessMap" - write: "setThicknessMap" - notify: "thicknessMapChanged" - index: 39 - } - Property { - name: "thicknessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - read: "thicknessChannel" - write: "setThicknessChannel" - notify: "thicknessChannelChanged" - index: 40 - } - Property { - name: "attenuationDistance" - type: "float" - read: "attenuationDistance" - write: "setAttenuationDistance" - notify: "attenuationDistanceChanged" - index: 41 - } - Property { - name: "attenuationColor" - type: "QColor" - read: "attenuationColor" - write: "setAttenuationColor" - notify: "attenuationColorChanged" - index: 42 - } - Property { - name: "vertexColorsEnabled" - revision: 1541 - type: "bool" - read: "vertexColorsEnabled" - write: "setVertexColorsEnabled" - notify: "vertexColorsEnabledChanged" - index: 43 - } - Signal { name: "lightingChanged" } - Signal { name: "blendModeChanged" } - Signal { name: "albedoColorChanged" } - Signal { name: "albedoMapChanged" } - Signal { name: "emissiveMapChanged" } - Signal { name: "emissiveFactorChanged" } - Signal { name: "glossinessChanged" } - Signal { name: "glossinessMapChanged" } - Signal { name: "opacityChanged" } - Signal { name: "opacityMapChanged" } - Signal { name: "normalMapChanged" } - Signal { name: "specularColorChanged" } - Signal { name: "specularMapChanged" } - Signal { name: "normalStrengthChanged" } - Signal { name: "occlusionMapChanged" } - Signal { name: "occlusionAmountChanged" } - Signal { name: "alphaModeChanged" } - Signal { name: "alphaCutoffChanged" } - Signal { name: "glossinessChannelChanged" } - Signal { name: "opacityChannelChanged" } - Signal { name: "occlusionChannelChanged" } - Signal { name: "pointSizeChanged" } - Signal { name: "lineWidthChanged" } - Signal { name: "heightMapChanged" } - Signal { name: "heightChannelChanged" } - Signal { name: "heightAmountChanged" } - Signal { name: "minHeightMapSamplesChanged" } - Signal { name: "maxHeightMapSamplesChanged" } - Signal { name: "clearcoatAmountChanged" } - Signal { name: "clearcoatMapChanged" } - Signal { name: "clearcoatChannelChanged" } - Signal { name: "clearcoatRoughnessAmountChanged" } - Signal { name: "clearcoatRoughnessChannelChanged" } - Signal { name: "clearcoatRoughnessMapChanged" } - Signal { name: "clearcoatNormalMapChanged" } - Signal { name: "transmissionFactorChanged" } - Signal { name: "transmissionMapChanged" } - Signal { name: "transmissionChannelChanged" } - Signal { name: "thicknessFactorChanged" } - Signal { name: "thicknessMapChanged" } - Signal { name: "thicknessChannelChanged" } - Signal { name: "attenuationDistanceChanged" } - Signal { name: "attenuationColorChanged" } - Signal { - name: "vertexColorsEnabledChanged" - revision: 1541 - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - Method { - name: "setLighting" - Parameter { name: "lighting"; type: "QQuick3DSpecularGlossyMaterial::Lighting" } - } - Method { - name: "setBlendMode" - Parameter { name: "blendMode"; type: "QQuick3DSpecularGlossyMaterial::BlendMode" } - } - Method { - name: "setAlbedoColor" - Parameter { name: "albedo"; type: "QColor" } - } - Method { - name: "setAlbedoMap" - Parameter { name: "albedoMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setEmissiveMap" - Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setEmissiveFactor" - Parameter { name: "emissiveFactor"; type: "QVector3D" } - } - Method { - name: "setGlossiness" - Parameter { name: "glossiness"; type: "float" } - } - Method { - name: "setGlossinessMap" - Parameter { name: "glossinessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOpacity" - Parameter { name: "opacity"; type: "float" } - } - Method { - name: "setOpacityMap" - Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setNormalMap" - Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setSpecularColor" - Parameter { name: "specular"; type: "QColor" } - } - Method { - name: "setSpecularMap" - Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setNormalStrength" - Parameter { name: "normalStrength"; type: "float" } - } - Method { - name: "setOcclusionMap" - Parameter { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setOcclusionAmount" - Parameter { name: "occlusionAmount"; type: "float" } - } - Method { - name: "setAlphaMode" - Parameter { name: "alphaMode"; type: "QQuick3DSpecularGlossyMaterial::AlphaMode" } - } - Method { - name: "setAlphaCutoff" - Parameter { name: "alphaCutoff"; type: "float" } - } - Method { - name: "setGlossinessChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setOpacityChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setOcclusionChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setPointSize" - Parameter { name: "size"; type: "float" } - } - Method { - name: "setLineWidth" - Parameter { name: "width"; type: "float" } - } - Method { - name: "setHeightMap" - Parameter { name: "heightMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setHeightChannel" - Parameter { name: "channel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setHeightAmount" - Parameter { name: "heightAmount"; type: "float" } - } - Method { - name: "setMinHeightMapSamples" - Parameter { name: "samples"; type: "int" } - } - Method { - name: "setMaxHeightMapSamples" - Parameter { name: "samples"; type: "int" } - } - Method { - name: "setClearcoatAmount" - Parameter { name: "newClearcoatAmount"; type: "float" } - } - Method { - name: "setClearcoatMap" - Parameter { name: "newClearcoatMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setClearcoatChannel" - Parameter { name: "newClearcoatChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setClearcoatRoughnessAmount" - Parameter { name: "newClearcoatRoughnessAmount"; type: "float" } - } - Method { - name: "setClearcoatRoughnessChannel" - Parameter { - name: "newClearcoatRoughnessChannel" - type: "QQuick3DMaterial::TextureChannelMapping" - } - } - Method { - name: "setClearcoatRoughnessMap" - Parameter { name: "newClearcoatRoughnessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setClearcoatNormalMap" - Parameter { name: "newClearcoatNormalMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTransmissionFactor" - Parameter { name: "newTransmissionFactor"; type: "float" } - } - Method { - name: "setTransmissionMap" - Parameter { name: "newTransmissionMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setTransmissionChannel" - Parameter { name: "newTransmissionChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setThicknessFactor" - Parameter { name: "newThicknessFactor"; type: "float" } - } - Method { - name: "setThicknessMap" - Parameter { name: "newThicknessMap"; type: "QQuick3DTexture"; isPointer: true } - } - Method { - name: "setThicknessChannel" - Parameter { name: "newThicknessChannel"; type: "QQuick3DMaterial::TextureChannelMapping" } - } - Method { - name: "setAttenuationDistance" - Parameter { name: "newAttenuationDistance"; type: "float" } - } - Method { - name: "setAttenuationColor" - Parameter { name: "newAttenuationColor"; type: "QColor" } - } - Method { - name: "setVertexColorsEnabled" - revision: 1541 - Parameter { name: "vertexColorsEnabled"; type: "bool" } - } - } - Component { - file: "private/qquick3dspotlight_p.h" - name: "QQuick3DSpotLight" - accessSemantics: "reference" - prototype: "QQuick3DAbstractLight" - exports: ["QtQuick3D/SpotLight 6.0"] - exportMetaObjectRevisions: [1536] - Property { - name: "constantFade" - type: "float" - read: "constantFade" - write: "setConstantFade" - notify: "constantFadeChanged" - index: 0 - } - Property { - name: "linearFade" - type: "float" - read: "linearFade" - write: "setLinearFade" - notify: "linearFadeChanged" - index: 1 - } - Property { - name: "quadraticFade" - type: "float" - read: "quadraticFade" - write: "setQuadraticFade" - notify: "quadraticFadeChanged" - index: 2 - } - Property { - name: "coneAngle" - type: "float" - read: "coneAngle" - write: "setConeAngle" - notify: "coneAngleChanged" - index: 3 - } - Property { - name: "innerConeAngle" - type: "float" - read: "innerConeAngle" - write: "setInnerConeAngle" - notify: "innerConeAngleChanged" - index: 4 - } - Signal { name: "constantFadeChanged" } - Signal { name: "linearFadeChanged" } - Signal { name: "quadraticFadeChanged" } - Signal { name: "coneAngleChanged" } - Signal { name: "innerConeAngleChanged" } - Method { - name: "setConstantFade" - Parameter { name: "constantFade"; type: "float" } - } - Method { - name: "setLinearFade" - Parameter { name: "linearFade"; type: "float" } - } - Method { - name: "setQuadraticFade" - Parameter { name: "quadraticFade"; type: "float" } - } - Method { - name: "setConeAngle" - Parameter { name: "coneAngle"; type: "float" } - } - Method { - name: "setInnerConeAngle" - Parameter { name: "innerConeAngle"; type: "float" } - } - } - Component { - file: "private/qquick3dtexture_p.h" - name: "QQuick3DTexture" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: [ - "QtQuick3D/Texture 6.0", - "QtQuick3D/Texture 6.2", - "QtQuick3D/Texture 6.7" - ] - exportMetaObjectRevisions: [1536, 1538, 1543] - Enum { - name: "MappingMode" - values: ["UV", "Environment", "LightProbe"] - } - Enum { - name: "TilingMode" - values: ["ClampToEdge", "MirroredRepeat", "Repeat"] - } - Enum { - name: "Filter" - values: ["None", "Nearest", "Linear"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "sourceItem" - type: "QQuickItem" - isPointer: true - read: "sourceItem" - write: "setSourceItem" - notify: "sourceItemChanged" - index: 1 - } - Property { - name: "textureData" - type: "QQuick3DTextureData" - isPointer: true - read: "textureData" - write: "setTextureData" - notify: "textureDataChanged" - index: 2 - } - Property { - name: "textureProvider" - revision: 1543 - type: "QQuick3DRenderExtension" - isPointer: true - read: "textureProvider" - write: "setTextureProvider" - notify: "textureProviderChanged" - index: 3 - isFinal: true - } - Property { - name: "scaleU" - type: "float" - read: "scaleU" - write: "setScaleU" - notify: "scaleUChanged" - index: 4 - } - Property { - name: "scaleV" - type: "float" - read: "scaleV" - write: "setScaleV" - notify: "scaleVChanged" - index: 5 - } - Property { - name: "mappingMode" - type: "MappingMode" - read: "mappingMode" - write: "setMappingMode" - notify: "mappingModeChanged" - index: 6 - } - Property { - name: "tilingModeHorizontal" - type: "TilingMode" - read: "horizontalTiling" - write: "setHorizontalTiling" - notify: "horizontalTilingChanged" - index: 7 - } - Property { - name: "tilingModeVertical" - type: "TilingMode" - read: "verticalTiling" - write: "setVerticalTiling" - notify: "verticalTilingChanged" - index: 8 - } - Property { - name: "tilingModeDepth" - revision: 1543 - type: "TilingMode" - read: "depthTiling" - write: "setDepthTiling" - notify: "depthTilingChanged" - index: 9 - } - Property { - name: "rotationUV" - type: "float" - read: "rotationUV" - write: "setRotationUV" - notify: "rotationUVChanged" - index: 10 - } - Property { - name: "positionU" - type: "float" - read: "positionU" - write: "setPositionU" - notify: "positionUChanged" - index: 11 - } - Property { - name: "positionV" - type: "float" - read: "positionV" - write: "setPositionV" - notify: "positionVChanged" - index: 12 - } - Property { - name: "pivotU" - type: "float" - read: "pivotU" - write: "setPivotU" - notify: "pivotUChanged" - index: 13 - } - Property { - name: "pivotV" - type: "float" - read: "pivotV" - write: "setPivotV" - notify: "pivotVChanged" - index: 14 - } - Property { - name: "flipU" - type: "bool" - read: "flipU" - write: "setFlipU" - notify: "flipUChanged" - index: 15 - } - Property { - name: "flipV" - type: "bool" - read: "flipV" - write: "setFlipV" - notify: "flipVChanged" - index: 16 - } - Property { - name: "indexUV" - type: "int" - read: "indexUV" - write: "setIndexUV" - notify: "indexUVChanged" - index: 17 - } - Property { - name: "magFilter" - type: "Filter" - read: "magFilter" - write: "setMagFilter" - notify: "magFilterChanged" - index: 18 - } - Property { - name: "minFilter" - type: "Filter" - read: "minFilter" - write: "setMinFilter" - notify: "minFilterChanged" - index: 19 - } - Property { - name: "mipFilter" - type: "Filter" - read: "mipFilter" - write: "setMipFilter" - notify: "mipFilterChanged" - index: 20 - } - Property { - name: "generateMipmaps" - type: "bool" - read: "generateMipmaps" - write: "setGenerateMipmaps" - notify: "generateMipmapsChanged" - index: 21 - } - Property { - name: "autoOrientation" - revision: 1538 - type: "bool" - read: "autoOrientation" - write: "setAutoOrientation" - notify: "autoOrientationChanged" - index: 22 - } - Signal { name: "sourceChanged" } - Signal { name: "sourceItemChanged" } - Signal { name: "scaleUChanged" } - Signal { name: "scaleVChanged" } - Signal { name: "mappingModeChanged" } - Signal { name: "horizontalTilingChanged" } - Signal { name: "verticalTilingChanged" } - Signal { name: "depthTilingChanged"; revision: 1543 } - Signal { name: "rotationUVChanged" } - Signal { name: "positionUChanged" } - Signal { name: "positionVChanged" } - Signal { name: "pivotUChanged" } - Signal { name: "pivotVChanged" } - Signal { name: "flipUChanged" } - Signal { name: "flipVChanged" } - Signal { name: "indexUVChanged" } - Signal { name: "magFilterChanged" } - Signal { name: "minFilterChanged" } - Signal { name: "mipFilterChanged" } - Signal { name: "textureDataChanged" } - Signal { name: "generateMipmapsChanged" } - Signal { name: "autoOrientationChanged" } - Signal { name: "textureProviderChanged"; revision: 1543 } - Method { - name: "setSource" - Parameter { name: "source"; type: "QUrl" } - } - Method { - name: "setSourceItem" - Parameter { name: "sourceItem"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "setScaleU" - Parameter { name: "scaleU"; type: "float" } - } - Method { - name: "setScaleV" - Parameter { name: "scaleV"; type: "float" } - } - Method { - name: "setMappingMode" - Parameter { name: "mappingMode"; type: "QQuick3DTexture::MappingMode" } - } - Method { - name: "setHorizontalTiling" - Parameter { name: "tilingModeHorizontal"; type: "QQuick3DTexture::TilingMode" } - } - Method { - name: "setVerticalTiling" - Parameter { name: "tilingModeVertical"; type: "QQuick3DTexture::TilingMode" } - } - Method { - name: "setDepthTiling" - revision: 1543 - Parameter { name: "tilingModeDepth"; type: "QQuick3DTexture::TilingMode" } - } - Method { - name: "setRotationUV" - Parameter { name: "rotationUV"; type: "float" } - } - Method { - name: "setPositionU" - Parameter { name: "positionU"; type: "float" } - } - Method { - name: "setPositionV" - Parameter { name: "positionV"; type: "float" } - } - Method { - name: "setPivotU" - Parameter { name: "pivotU"; type: "float" } - } - Method { - name: "setPivotV" - Parameter { name: "pivotV"; type: "float" } - } - Method { - name: "setFlipU" - Parameter { name: "flipU"; type: "bool" } - } - Method { - name: "setFlipV" - Parameter { name: "flipV"; type: "bool" } - } - Method { - name: "setIndexUV" - Parameter { name: "indexUV"; type: "int" } - } - Method { - name: "setMagFilter" - Parameter { name: "magFilter"; type: "QQuick3DTexture::Filter" } - } - Method { - name: "setMinFilter" - Parameter { name: "minFilter"; type: "QQuick3DTexture::Filter" } - } - Method { - name: "setMipFilter" - Parameter { name: "mipFilter"; type: "QQuick3DTexture::Filter" } - } - Method { - name: "setTextureData" - Parameter { name: "textureData"; type: "QQuick3DTextureData"; isPointer: true } - } - Method { - name: "setGenerateMipmaps" - Parameter { name: "generateMipmaps"; type: "bool" } - } - Method { - name: "setAutoOrientation" - Parameter { name: "autoOrientation"; type: "bool" } - } - Method { - name: "sourceItemDestroyed" - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - } - Component { - file: "qquick3dtexturedata.h" - name: "QQuick3DTextureData" - accessSemantics: "reference" - defaultProperty: "data" - prototype: "QQuick3DObject" - exports: ["QtQuick3D/TextureData 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1536] - Enum { - name: "Format" - values: [ - "None", - "RGBA8", - "RGBA16F", - "RGBA32F", - "RGBE8", - "R8", - "R16", - "R16F", - "R32F", - "BC1", - "BC2", - "BC3", - "BC4", - "BC5", - "BC6H", - "BC7", - "DXT1_RGBA", - "DXT1_RGB", - "DXT3_RGBA", - "DXT5_RGBA", - "ETC2_RGB8", - "ETC2_RGB8A1", - "ETC2_RGBA8", - "ASTC_4x4", - "ASTC_5x4", - "ASTC_5x5", - "ASTC_6x5", - "ASTC_6x6", - "ASTC_8x5", - "ASTC_8x6", - "ASTC_8x8", - "ASTC_10x5", - "ASTC_10x6", - "ASTC_10x8", - "ASTC_10x10", - "ASTC_12x10", - "ASTC_12x12" - ] - } - Signal { name: "textureDataNodeDirty" } - } - Component { - file: "private/qquick3dviewport_p.h" - name: "QQuick3DViewport" - accessSemantics: "reference" - defaultProperty: "data" - parentProperty: "parent" - prototype: "QQuickItem" - exports: [ - "QtQuick3D/View3D 6.0", - "QtQuick3D/View3D 6.2", - "QtQuick3D/View3D 6.3", - "QtQuick3D/View3D 6.4", - "QtQuick3D/View3D 6.6", - "QtQuick3D/View3D 6.7" - ] - exportMetaObjectRevisions: [1536, 1538, 1539, 1540, 1542, 1543] - Enum { - name: "RenderMode" - values: ["Offscreen", "Underlay", "Overlay", "Inline"] - } - Property { - name: "data" - type: "QObject" - isList: true - read: "data" - index: 0 - isReadonly: true - isFinal: true - } - Property { - name: "camera" - type: "QQuick3DCamera" - isPointer: true - read: "camera" - write: "setCamera" - notify: "cameraChanged" - index: 1 - isFinal: true - } - Property { - name: "environment" - type: "QQuick3DSceneEnvironment" - isPointer: true - read: "environment" - write: "setEnvironment" - notify: "environmentChanged" - index: 2 - isFinal: true - } - Property { - name: "scene" - type: "QQuick3DNode" - isPointer: true - read: "scene" - notify: "sceneChanged" - index: 3 - isReadonly: true - } - Property { - name: "importScene" - type: "QQuick3DNode" - isPointer: true - read: "importScene" - write: "setImportScene" - notify: "importSceneChanged" - index: 4 - isFinal: true - } - Property { - name: "renderMode" - type: "RenderMode" - read: "renderMode" - write: "setRenderMode" - notify: "renderModeChanged" - index: 5 - isFinal: true - } - Property { - name: "renderFormat" - revision: 1540 - type: "QQuickShaderEffectSource::Format" - read: "renderFormat" - write: "setRenderFormat" - notify: "renderFormatChanged" - index: 6 - isFinal: true - } - Property { - name: "renderStats" - type: "QQuick3DRenderStats" - isPointer: true - read: "renderStats" - index: 7 - isReadonly: true - isConstant: true - } - Property { - name: "extensions" - revision: 1542 - type: "QQuick3DObject" - isList: true - read: "extensions" - index: 8 - isReadonly: true - isFinal: true - } - Property { - name: "explicitTextureWidth" - revision: 1543 - type: "int" - read: "explicitTextureWidth" - write: "setExplicitTextureWidth" - notify: "explicitTextureWidthChanged" - index: 9 - isFinal: true - } - Property { - name: "explicitTextureHeight" - revision: 1543 - type: "int" - read: "explicitTextureHeight" - write: "setExplicitTextureHeight" - notify: "explicitTextureHeightChanged" - index: 10 - isFinal: true - } - Property { - name: "effectiveTextureSize" - revision: 1543 - type: "QSize" - read: "effectiveTextureSize" - notify: "effectiveTextureSizeChanged" - index: 11 - isReadonly: true - isFinal: true - } - Signal { name: "cameraChanged" } - Signal { name: "environmentChanged" } - Signal { name: "sceneChanged" } - Signal { name: "importSceneChanged" } - Signal { name: "renderModeChanged" } - Signal { name: "renderFormatChanged"; revision: 1540 } - Signal { name: "explicitTextureWidthChanged"; revision: 1543 } - Signal { name: "explicitTextureHeightChanged"; revision: 1543 } - Signal { name: "effectiveTextureSizeChanged"; revision: 1543 } - Method { - name: "setCamera" - Parameter { name: "camera"; type: "QQuick3DCamera"; isPointer: true } - } - Method { - name: "setEnvironment" - Parameter { name: "environment"; type: "QQuick3DSceneEnvironment"; isPointer: true } - } - Method { - name: "setImportScene" - Parameter { name: "inScene"; type: "QQuick3DNode"; isPointer: true } - } - Method { - name: "setRenderMode" - Parameter { name: "renderMode"; type: "QQuick3DViewport::RenderMode" } - } - Method { - name: "setRenderFormat" - revision: 1540 - Parameter { name: "format"; type: "QQuickShaderEffectSource::Format" } - } - Method { - name: "setExplicitTextureWidth" - revision: 1543 - Parameter { name: "width"; type: "int" } - } - Method { - name: "setExplicitTextureHeight" - revision: 1543 - Parameter { name: "height"; type: "int" } - } - Method { name: "cleanupDirectRenderer" } - Method { - name: "setGlobalPickingEnabled" - Parameter { name: "isEnabled"; type: "bool" } - } - Method { name: "invalidateSceneGraph" } - Method { name: "updateInputProcessing" } - Method { name: "onReleaseCachedResources" } - Method { - name: "mapFrom3DScene" - type: "QVector3D" - Parameter { name: "scenePos"; type: "QVector3D" } - } - Method { - name: "mapTo3DScene" - type: "QVector3D" - Parameter { name: "viewPos"; type: "QVector3D" } - } - Method { - name: "pick" - type: "QQuick3DPickResult" - Parameter { name: "x"; type: "float" } - Parameter { name: "y"; type: "float" } - } - Method { - name: "pickAll" - revision: 1538 - type: "QQuick3DPickResult" - isList: true - Parameter { name: "x"; type: "float" } - Parameter { name: "y"; type: "float" } - } - Method { - name: "rayPick" - revision: 1538 - type: "QQuick3DPickResult" - Parameter { name: "origin"; type: "QVector3D" } - Parameter { name: "direction"; type: "QVector3D" } - } - Method { - name: "rayPickAll" - revision: 1538 - type: "QQuick3DPickResult" - isList: true - Parameter { name: "origin"; type: "QVector3D" } - Parameter { name: "direction"; type: "QVector3D" } - } - Method { name: "bakeLightmap" } - Method { name: "rebuildExtensionList"; revision: 1543 } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/libquick3dspatialaudioplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/libquick3dspatialaudioplugin.so deleted file mode 100755 index c1fe1ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/libquick3dspatialaudioplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/plugins.qmltypes deleted file mode 100644 index 5162e9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/plugins.qmltypes +++ /dev/null @@ -1,389 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qquick3dambientsound_p.h" - name: "QQuick3DAmbientSound" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D.SpatialAudio/AmbientSound 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Loops" - values: ["Infinite", "Once"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "volume" - type: "float" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 1 - } - Property { - name: "loops" - type: "int" - read: "loops" - write: "setLoops" - notify: "loopsChanged" - index: 2 - } - Property { - name: "autoPlay" - type: "bool" - read: "autoPlay" - write: "setAutoPlay" - notify: "autoPlayChanged" - index: 3 - } - Signal { name: "sourceChanged" } - Signal { name: "volumeChanged" } - Signal { name: "loopsChanged" } - Signal { name: "autoPlayChanged" } - Method { name: "play" } - Method { name: "pause" } - Method { name: "stop" } - } - Component { - file: "private/qquick3daudioengine_p.h" - name: "QQuick3DAudioEngine" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtQuick3D.SpatialAudio/AudioEngine 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "OutputMode" - values: ["Surround", "Stereo", "Headphone"] - } - Property { - name: "outputMode" - type: "OutputMode" - read: "outputMode" - write: "setOutputMode" - notify: "outputModeChanged" - index: 0 - } - Property { - name: "outputDevice" - type: "QAudioDevice" - read: "outputDevice" - write: "setOutputDevice" - notify: "outputDeviceChanged" - index: 1 - } - Property { - name: "masterVolume" - type: "float" - read: "masterVolume" - write: "setMasterVolume" - notify: "masterVolumeChanged" - index: 2 - } - Signal { name: "outputModeChanged" } - Signal { name: "outputDeviceChanged" } - Signal { name: "masterVolumeChanged" } - } - Component { - file: "private/qquick3daudiolistener_p.h" - name: "QQuick3DAudioListener" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.SpatialAudio/AudioListener 6.0"] - exportMetaObjectRevisions: [1536] - Method { name: "updatePosition" } - Method { name: "updateRotation" } - } - Component { - file: "private/qquick3daudioroom_p.h" - name: "QQuick3DAudioRoom" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.SpatialAudio/AudioRoom 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "Material" - values: [ - "Transparent", - "AcousticCeilingTiles", - "BrickBare", - "BrickPainted", - "ConcreteBlockCoarse", - "ConcreteBlockPainted", - "CurtainHeavy", - "FiberGlassInsulation", - "GlassThin", - "GlassThick", - "Grass", - "LinoleumOnConcrete", - "Marble", - "Metal", - "ParquetOnConcrete", - "PlasterRough", - "PlasterSmooth", - "PlywoodPanel", - "PolishedConcreteOrTile", - "Sheetrock", - "WaterOrIceSurface", - "WoodCeiling", - "WoodPanel", - "Uniform" - ] - } - Property { - name: "position" - type: "QVector3D" - read: "position" - write: "setPosition" - notify: "positionChanged" - index: 0 - } - Property { - name: "dimensions" - type: "QVector3D" - read: "dimensions" - write: "setDimensions" - notify: "dimensionsChanged" - index: 1 - } - Property { - name: "rotation" - type: "QQuaternion" - read: "rotation" - write: "setRotation" - notify: "rotationChanged" - index: 2 - } - Property { - name: "leftMaterial" - type: "Material" - read: "leftMaterial" - write: "setLeftMaterial" - notify: "wallsChanged" - index: 3 - } - Property { - name: "rightMaterial" - type: "Material" - read: "rightMaterial" - write: "setRightMaterial" - notify: "wallsChanged" - index: 4 - } - Property { - name: "frontMaterial" - type: "Material" - read: "frontMaterial" - write: "setFrontMaterial" - notify: "wallsChanged" - index: 5 - } - Property { - name: "backMaterial" - type: "Material" - read: "backMaterial" - write: "setBackMaterial" - notify: "wallsChanged" - index: 6 - } - Property { - name: "floorMaterial" - type: "Material" - read: "floorMaterial" - write: "setFloorMaterial" - notify: "wallsChanged" - index: 7 - } - Property { - name: "ceilingMaterial" - type: "Material" - read: "ceilingMaterial" - write: "setCeilingMaterial" - notify: "wallsChanged" - index: 8 - } - Property { - name: "reflectionGain" - type: "float" - read: "reflectionGain" - write: "setReflectionGain" - notify: "reflectionGainChanged" - index: 9 - } - Property { - name: "reverbGain" - type: "float" - read: "reverbGain" - write: "setReverbGain" - notify: "reverbGainChanged" - index: 10 - } - Property { - name: "reverbTime" - type: "float" - read: "reverbTime" - write: "setReverbTime" - notify: "reverbTimeChanged" - index: 11 - } - Property { - name: "reverbBrightness" - type: "float" - read: "reverbBrightness" - write: "setReverbBrightness" - notify: "reverbBrightnessChanged" - index: 12 - } - Signal { name: "positionChanged" } - Signal { name: "dimensionsChanged" } - Signal { name: "rotationChanged" } - Signal { name: "wallsChanged" } - Signal { name: "reflectionGainChanged" } - Signal { name: "reverbGainChanged" } - Signal { name: "reverbTimeChanged" } - Signal { name: "reverbBrightnessChanged" } - Method { name: "updatePosition" } - Method { name: "updateRotation" } - } - Component { - file: "private/qquick3dspatialsound_p.h" - name: "QQuick3DSpatialSound" - accessSemantics: "reference" - prototype: "QQuick3DNode" - exports: ["QtQuick3D.SpatialAudio/SpatialSound 6.0"] - exportMetaObjectRevisions: [1536] - Enum { - name: "DistanceModel" - values: ["Logarithmic", "Linear", "ManualAttenuation"] - } - Enum { - name: "Loops" - values: ["Infinite", "Once"] - } - Property { - name: "source" - type: "QUrl" - read: "source" - write: "setSource" - notify: "sourceChanged" - index: 0 - } - Property { - name: "volume" - type: "float" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 1 - } - Property { - name: "distanceModel" - type: "DistanceModel" - read: "distanceModel" - write: "setDistanceModel" - notify: "distanceModelChanged" - index: 2 - } - Property { - name: "size" - type: "float" - read: "size" - write: "setSize" - notify: "sizeChanged" - index: 3 - } - Property { - name: "distanceCutoff" - type: "float" - read: "distanceCutoff" - write: "setDistanceCutoff" - notify: "distanceCutoffChanged" - index: 4 - } - Property { - name: "manualAttenuation" - type: "float" - read: "manualAttenuation" - write: "setManualAttenuation" - notify: "manualAttenuationChanged" - index: 5 - } - Property { - name: "occlusionIntensity" - type: "float" - read: "occlusionIntensity" - write: "setOcclusionIntensity" - notify: "occlusionIntensityChanged" - index: 6 - } - Property { - name: "directivity" - type: "float" - read: "directivity" - write: "setDirectivity" - notify: "directivityChanged" - index: 7 - } - Property { - name: "directivityOrder" - type: "float" - read: "directivityOrder" - write: "setDirectivityOrder" - notify: "directivityOrderChanged" - index: 8 - } - Property { - name: "nearFieldGain" - type: "float" - read: "nearFieldGain" - write: "setNearFieldGain" - notify: "nearFieldGainChanged" - index: 9 - } - Property { - name: "loops" - type: "int" - read: "loops" - write: "setLoops" - notify: "loopsChanged" - index: 10 - } - Property { - name: "autoPlay" - type: "bool" - read: "autoPlay" - write: "setAutoPlay" - notify: "autoPlayChanged" - index: 11 - } - Signal { name: "sourceChanged" } - Signal { name: "volumeChanged" } - Signal { name: "distanceModelChanged" } - Signal { name: "sizeChanged" } - Signal { name: "distanceCutoffChanged" } - Signal { name: "manualAttenuationChanged" } - Signal { name: "occlusionIntensityChanged" } - Signal { name: "directivityChanged" } - Signal { name: "directivityOrderChanged" } - Signal { name: "nearFieldGainChanged" } - Signal { name: "loopsChanged" } - Signal { name: "autoPlayChanged" } - Method { name: "play" } - Method { name: "pause" } - Method { name: "stop" } - Method { name: "updatePosition" } - Method { name: "updateRotation" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/qmldir deleted file mode 100644 index e913a04..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/qmldir +++ /dev/null @@ -1,10 +0,0 @@ -module QtQuick3D.SpatialAudio -linktarget Qt6::quick3dspatialaudio -plugin quick3dspatialaudioplugin -classname QQuick3DAudioModule -typeinfo plugins.qmltypes -depends QtQuick -depends QtQuick3DPrivate -depends QtMultimedia -prefer :/qt-project.org/imports/QtQuick3D/SpatialAudio/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/AbstractLightSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/AbstractLightSection.qml deleted file mode 100644 index cc18361..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/AbstractLightSection.qml +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Light") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the color applied to models illuminated by this light.") - } - - ColorEditor { - backendValue: backendValues.color - supportGradient: false - } - - PropertyLabel { - text: qsTr("Ambient Color") - tooltip: qsTr("Sets the ambient color applied to materials before being lit by this light.") - } - - ColorEditor { - backendValue: backendValues.ambientColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Brightness") - tooltip: qsTr("Sets an overall multiplier for this light’s effects.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.brightness - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Scope") - tooltip: qsTr("Sets a Node in the scene to be the scope of this light. Only that node and it's children are affected by this light.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.scope - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Bake Mode") - tooltip: qsTr("Controls if the light is active in baked lighting, such as when generating lightmaps.") - } - - SecondColumnLayout { - ComboBox { - scope: "Light" - model: ["BakeModeDisabled", "BakeModeIndirect", "BakeModeAll"] - backendValue: backendValues.bakeMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } - - ShadowSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSection.qml deleted file mode 100644 index 104984d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSection.qml +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Buffer Input") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Buffer") - tooltip: qsTr("Sets input buffer for a pass.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Buffer" - backendValue: backendValues.buffer - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Parameter") - tooltip: qsTr("Sets buffer input buffer name in the shader.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.param - showTranslateCheckBox: false - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSpecifics.qml deleted file mode 100644 index f842c08..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - BufferInputSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSection.qml deleted file mode 100644 index 8c95de3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSection.qml +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Buffer") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Name") - tooltip: qsTr("Sets the buffer name.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.name - showTranslateCheckBox: false - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Format") - tooltip: qsTr("Sets the format of the buffer.") - } - - SecondColumnLayout { - ComboBox { - scope: "Buffer" - model: ["Unknown", "R8", "R16", "R16F", "R32I", "R32UI", "R32F", "RG8", "RGBA8", "RGB8", "SRGB8", "SRGB8A8", "RGB565", "RGBA16F", "RG16F", "RG32F", "RGB32F", "RGBA32F", "R11G11B10", "RGB9E5", "Depth16", "Depth24", "Depth32", "Depth24Stencil8"] - backendValue: backendValues.format - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Filter") - tooltip: qsTr("Sets the texture filter for the buffer.") - } - - SecondColumnLayout { - ComboBox { - scope: "Buffer" - model: ["Unknown", "Nearest", "Linear"] - backendValue: backendValues.textureFilterOperation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Coordinate Operation") - tooltip: qsTr("Sets the texture coordinate operation for the buffer.") - } - - SecondColumnLayout { - ComboBox { - scope: "Buffer" - model: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"] - backendValue: backendValues.textureCoordOperation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Allocation Flags") - tooltip: qsTr("Sets the allocation flags for the buffer.") - } - - SecondColumnLayout { - ComboBox { - scope: "Buffer" - model: ["None", "SceneLifetime"] - backendValue: backendValues.bufferFlags - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Size Multiplier") - tooltip: qsTr("Sets the size multiplier for the buffer.") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 10000 - minimumValue: 0 - decimals: 2 - realDragRange: 30 - backendValue: backendValues.sizeMultiplier - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSpecifics.qml deleted file mode 100644 index 302777a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/BufferSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - BufferSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CameraSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CameraSection.qml deleted file mode 100644 index 943b4ca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CameraSection.qml +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Camera") - - SectionLayout { - PropertyLabel { - text: qsTr("Frustum Culling") - tooltip: qsTr("When this property is true, objects outside the camera frustum will be culled, meaning they will not be passed to the renderer.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.frustumCullingEnabled.valueToString - backendValue: backendValues.frustumCullingEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("LOD Bias") - tooltip: qsTr("This property changes the threshold for when the automatic level of detail meshes get used.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.levelOfDetailBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Look-at Node") - tooltip: qsTr("Sets the look-at node for the camera.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.lookAtNode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CubeMapTextureSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CubeMapTextureSpecifics.qml deleted file mode 100644 index f6716f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CubeMapTextureSpecifics.qml +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - // CubeMapTexture inherits Texture but doesn't provide any extra properties itself - TextureSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomCameraSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomCameraSpecifics.qml deleted file mode 100644 index 1c8e1ea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomCameraSpecifics.qml +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - // Custom camera doesn't have any meaningful designable properties itself, so only add - // the generic camera section - - CameraSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSection.qml deleted file mode 100644 index 07c59ec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSection.qml +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Custom Material") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Shading Mode") - tooltip: qsTr("Sets the material type.\nUnshaded materials are not affected by the environment (for example, lights).") - } - - SecondColumnLayout { - ComboBox { - scope: "CustomMaterial" - model: ["Unshaded", "Shaded"] - backendValue: backendValues.shadingMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertex Shader") - tooltip: qsTr("Sets the path to the vertex shader source file.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.vertexShader - filter: "*.vert *.vsh *.glslv *.glsl" - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fragment Shader") - tooltip: qsTr("Sets the path to the fragment shader source file.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.fragmentShader - filter: "*.frag *.fsh *.glslf *.glsl" - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Source Blend") - tooltip: qsTr("Sets the source blend factor.") - } - - SecondColumnLayout { - ComboBox { - scope: "CustomMaterial" - model: ["NoBlend", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", "ConstantAlpha", "OneMinusConstantAlpha", "SrcAlphaSaturate"] - backendValue: backendValues.sourceBlend - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Destination Blend") - tooltip: qsTr("Sets the destination blend factor.") - } - - SecondColumnLayout { - ComboBox { - scope: "CustomMaterial" - model: ["NoBlend", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", "ConstantAlpha", "OneMinusConstantAlpha", "SrcAlphaSaturate"] - backendValue: backendValues.destinationBlend - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Always Dirty") - tooltip: qsTr("Sets the material to refresh every time it is used by QtQuick3D.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.alwaysDirty.valueToString - backendValue: backendValues.alwaysDirty - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Line Width") - tooltip: qsTr("Sets the width of the lines when the geometry is using a primitive type of lines or line strips.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.lineWidth - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSpecifics.qml deleted file mode 100644 index 6911a9e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - CustomMaterialSection { - width: parent.width - } - - MaterialSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSection.qml deleted file mode 100644 index 4805272..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSection.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Debug Settings") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Enable Wireframe") - tooltip: qsTr("Meshes will be rendered as wireframes.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.wireframeEnabled.valueToString - backendValue: backendValues.wireframeEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Override Mode") - tooltip: qsTr("Changes how all materials are rendered to only reflect a particular aspect of the overall rendering process") - } - - SecondColumnLayout { - ComboBox { - id: backgroundModeComboBox - scope: "DebugSettings" - model: ["None", "BaseColor", "Roughness", "Metalness", "Diffuse", "Specular", "ShadowOcclusion", "Emission", "AmbientOcclusion", "Normals", "Tangents", "Binormals", "FO"] - backendValue: backendValues.materialOverride - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSpecifics.qml deleted file mode 100644 index 38a8815..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSpecifics.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - DebugSettingsSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSection.qml deleted file mode 100644 index e106bee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSection.qml +++ /dev/null @@ -1,617 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Default Material") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Lighting") - tooltip: qsTr("Sets the lighting method. NoLighting is faster while FragmentLighting\ncalculates diffuse and specular lighting for each rendered pixel.") - } - - SecondColumnLayout { - ComboBox { - scope: "DefaultMaterial" - model: ["NoLighting", "FragmentLighting"] - backendValue: backendValues.lighting - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blend Mode") - tooltip: qsTr("Sets how the colors of the model blend with colors behind it.") - } - - SecondColumnLayout { - ComboBox { - scope: "DefaultMaterial" - model: ["SourceOver", "Screen", "Multiply"] - backendValue: backendValues.blendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enable Vertex Colors") - tooltip: qsTr("Sets the material to use vertex colors from the mesh.\nVertex colors are multiplied with any other color for the material.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.vertexColorsEnabled.valueToString - backendValue: backendValues.vertexColorsEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Point Size") - tooltip: qsTr("Sets the size of the points rendered when the geometry is using a primitive type of points.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pointSize - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - - PropertyLabel { - text: qsTr("Line Width") - tooltip: qsTr("Sets the width of the lines rendered when the geometry is using a primitive type of lines or line strips.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.lineWidth - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - } - } - - Section { - caption: qsTr("Diffuse") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the base color.") - } - - ColorEditor { - backendValue: backendValues.diffuseColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to apply to the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.diffuseMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Emissive") - width: parent.width - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Factor") - tooltip: qsTr("Sets the color of self-illumination.\nThe default value (0, 0, 0) means no self-illumination.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.emissiveFactor_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: qsTr("R") - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.emissiveFactor_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: qsTr("G") - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.emissiveFactor_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: qsTr("B") - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to define the intensity of the emissive color.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.emissiveMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - } - - Section { - caption: qsTr("Specular") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Tint") - tooltip: qsTr("Sets the color tint for the specular reflections.\nUse white for no color effect.") - } - - ColorEditor { - backendValue: backendValues.specularTint - supportGradient: false - } - - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the strength of specularity (highlights and reflections).\nThe default value (0) disables specularity.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.specularAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to define the amount and the color of specularity.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.specularMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Model") - tooltip: qsTr("Sets the functions to calculate specular highlights for lights in the scene.\nDefault is faster while KGGX is more physically accurate.") - } - - SecondColumnLayout { - ComboBox { - scope: "DefaultMaterial" - model: ["Default", "KGGX"] - backendValue: backendValues.specularModel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Reflection Map") - tooltip: qsTr("Sets a texture to define specular highlights.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.specularReflectionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Index of Refraction") - tooltip: qsTr("Sets the angles of reflections affected by the fresnel power.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 3 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.indexOfRefraction - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fresnel Power") - tooltip: qsTr("Sets the strength of the fresnel power. The default value (0) means no fresnel power while a higher value\ndecreases head-on reflections (looking directly at the surface) while maintaining reflections seen at grazing angles.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.fresnelPower - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Specular Roughness") - tooltip: qsTr("Sets the size of the specular highlight generated from lights and the clarity of reflections in general.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.001 - maximumValue: 1 - decimals: 3 - stepSize: 0.1 - backendValue: backendValues.specularRoughness - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Map") - tooltip: qsTr("Sets a texture to define the specular roughness.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.roughnessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Channel") - tooltip: qsTr("Sets the texture channel to read the roughness value from roughnessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.roughnessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Opacity") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the opacity of just this material, separate from the model.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to control the opacity differently for different parts.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.opacityMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel to read the opacity value from the opacity map.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.opacityChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Bump/Normal") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Bump Amount") - tooltip: qsTr("Sets the amount of simulated displacement for the bump map or normal map.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.bumpAmount - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Bump Map") - tooltip: qsTr("Sets a grayscale texture to simulate fine geometry displacement across the surface.") - } - - SecondColumnLayout { - ItemFilterComboBox { - id: bumpMapComboBox - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.bumpMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - - Connections { - target: normalMapComboBox.backendValue - function onExpressionChanged() { - if (normalMapComboBox.backendValue.expression !== "") - bumpMapComboBox.backendValue.resetValue() - } - } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Normal Map") - tooltip: qsTr("Sets a image to simulate fine geometry displacement across the surface.") - } - - SecondColumnLayout { - ItemFilterComboBox { - id: normalMapComboBox - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.normalMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - - Connections { - target: bumpMapComboBox.backendValue - function onExpressionChanged() { - if (bumpMapComboBox.backendValue.expression !== "") - normalMapComboBox.backendValue.resetValue() - } - } - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Translucency") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Falloff") - tooltip: qsTr("Sets the amount of falloff for the translucency based on the angle of the normals of the object to the light source.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -999999 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.translucentFalloff - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Diffuse Light Wrap") - tooltip: qsTr("Sets the amount of light wrap for the translucency map.\nA value of 0 will not wrap the light at all, while a value of 1 will wrap the light all around the object.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.diffuseLightWrap - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a grayscale texture to control how much light can pass through the material from behind.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.translucencyMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel to read the translucency value from translucencyMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.translucencyChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml deleted file mode 100644 index 0e0c3fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - DefaultMaterialSection { - width: parent.width - } - - MaterialSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSection.qml deleted file mode 100644 index 2d98f1d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSection.qml +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml deleted file mode 100644 index 0f12f82..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - AbstractLightSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSection.qml deleted file mode 100644 index 48c8775..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSection.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Effect") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Passes") - tooltip: qsTr("Sets the render passes of the effect.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.passes - model: backendValues.passes.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Pass" - - onAdd: function(value) { backendValues.passes.idListAdd(value) } - onRemove: function(idx) { backendValues.passes.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.passes.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSpecifics.qml deleted file mode 100644 index 0c0d9cf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/EffectSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - EffectSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSection.qml deleted file mode 100644 index 72a97da..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSection.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Section { - caption: qsTr("File Instancing") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of an XML or binary file containing the instance data.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.source - filter: "*.xml *.bin" - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSpecifics.qml deleted file mode 100644 index 7b531d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - FileInstancingSection { - width: parent.width - } - - InstancingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSection.qml deleted file mode 100644 index d84ed19..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSection.qml +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Fog") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Controls whether fog is applied to the scene") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isColorMode - text: qsTr("Color") - tooltip: qsTr("The color of the fog") - } - - ColorEditor { - backendValue: backendValues.color - supportGradient: false - } - - PropertyLabel { - text: qsTr("Density") - tooltip: qsTr("Controls the density of the fog") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.density - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Depth") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Controls if the fog appears in the distance") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthEnabled.valueToString - backendValue: backendValues.depthEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Start Distance") - tooltip: qsTr("Starting distance from the camera") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.depthNear - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("End Distance") - tooltip: qsTr("Ending distance from the camera") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.depthFar - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Intensity Curve") - tooltip: qsTr("Controls the intensity curve of depth fog") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.depthCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Height") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Controls if height fog is enabled") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.heightEnabled.valueToString - backendValue: backendValues.heightEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Least Intense Height") - tooltip: qsTr("Specifies the height where the fog is the least intense.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.leastIntenseY - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Most Intense Height") - tooltip: qsTr("Specifies the height where the fog is the most intense.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.mostIntenseY - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Intensity Curve") - tooltip: qsTr("Controls the intensity curve of height fog") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.heightCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Transmission") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Controls if the fog has a light transmission effect enabled") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.transmitEnabled.valueToString - backendValue: backendValues.transmitEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Intensity Curve") - tooltip: qsTr("Controls the intensity curve of the light transmission effect") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.transmitCurve - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSpecifics.qml deleted file mode 100644 index 6fb430e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FogSpecifics.qml +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - FogSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSection.qml deleted file mode 100644 index 4582193..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSection.qml +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Frustum Camera") - - SectionLayout { - PropertyLabel { - text: qsTr("Top") - tooltip: qsTr("Sets the top plane of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.top - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Bottom") - tooltip: qsTr("Sets the bottom plane of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.bottom - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Right") - tooltip: qsTr("Sets the right plane of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.right - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Left") - tooltip: qsTr("Sets the left plane of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.left - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml deleted file mode 100644 index cca4e38..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - FrustumCameraSection { - width: parent.width - } - - PerspectiveCameraSection { - width: parent.width - } - - CameraSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySection.qml deleted file mode 100644 index 4bcc9c9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySection.qml +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Instance List Entry") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the color for the instance.") - } - - ColorEditor { - backendValue: backendValues.color - supportGradient: false - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Position") - tooltip: qsTr("Sets the position for the instance.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.position_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale for the instance.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation for the instance.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySpecifics.qml deleted file mode 100644 index a0c3c72..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - InstanceListEntrySection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSection.qml deleted file mode 100644 index 40c372c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSection.qml +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Section { - caption: qsTr("Instance List") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Instances") - tooltip: qsTr("Sets the list of instance definitions. Modifying this list, or any of its elements, will cause the instance table to be updated.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.instances - model: backendValues.instances.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.InstanceListEntry" - - onAdd: function(value) { backendValues.instances.idListAdd(value) } - onRemove: function(idx) { backendValues.instances.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.instances.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSpecifics.qml deleted file mode 100644 index 301bb94..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - InstanceListSection { - width: parent.width - } - - InstancingSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstancingSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstancingSection.qml deleted file mode 100644 index 825df52..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/InstancingSection.qml +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Instancing") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Depth Sorting") - tooltip: qsTr("Enable depth sorting for instanced objects.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthSortingEnabled.valueToString - backendValue: backendValues.depthSortingEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Has Transparency") - tooltip: qsTr("Set this to true if the instancing table contains alpha values that should be used when rendering the model.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.hasTransparency.valueToString - backendValue: backendValues.hasTransparency - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Instance Count") - tooltip: qsTr("Sets a limit on the number of instances that can be rendered regardless of the number of instances in the instancing table.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -1 - maximumValue: 9999999 - decimals: 0 - stepSize: 1 - backendValue: backendValues.instanceCountOverride - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSection.qml deleted file mode 100644 index a077c88..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSection.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Joint") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Index") - tooltip: qsTr("Sets the index of this joint.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.index - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Skeleton Root") - tooltip: qsTr("Sets the skeleton that contains this joint.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Skeleton" - backendValue: backendValues.skeletonRoot - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSpecifics.qml deleted file mode 100644 index 9f5e172..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/JointSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - JointSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSection.qml deleted file mode 100644 index f17fda3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSection.qml +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Lightmapper") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Adaptive Bias") - tooltip: qsTr("Enables additional dynamic biasing based on the surface normal.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.adaptiveBiasEnabled.valueToString - backendValue: backendValues.adaptiveBiasEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Bias") - tooltip: qsTr("Raycasting bias to avoid self-intersection artifacts.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 5 - stepSize: 0.001 - backendValue: backendValues.bias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Opacity Threshold") - tooltip: qsTr("Bounces against materials with opacity values below this threshold are ignored when calculating lighting via raytracing.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.opacityThreshold - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Samples") - tooltip: qsTr("The number of samples per lightmap texel.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 2048 - decimals: 0 - stepSize: 16 - sliderIndicatorVisible: true - backendValue: backendValues.samples - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Indirect Lighting") - tooltip: qsTr("Enables the baking of indirect lighting.") - } - - SecondColumnLayout { - CheckBox { - id: indirectLightEnabledCheckBox - text: backendValues.indirectLightEnabled.valueToString - backendValue: backendValues.indirectLightEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: indirectLightEnabledCheckBox.checked - text: qsTr("Bounces") - tooltip: qsTr("The maximum number of indirect light bounces per sample.") - } - - SecondColumnLayout { - visible: indirectLightEnabledCheckBox.checked - SpinBox { - minimumValue: 1 - maximumValue: 16 - decimals: 0 - stepSize: 1 - backendValue: backendValues.bounces - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: indirectLightEnabledCheckBox.checked - text: qsTr("Indirect Light Factor") - tooltip: qsTr("Multiplier for the indirect light amount.") - } - - SecondColumnLayout { - visible: indirectLightEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.01 - backendValue: backendValues.indirectLightFactor - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: indirectLightEnabledCheckBox.checked - text: qsTr("Indirect Workgroup Size") - tooltip: qsTr("The size of the workgroup used for indirect light computation.") - } - - SecondColumnLayout { - visible: indirectLightEnabledCheckBox.checked - SpinBox { - minimumValue: 1 - maximumValue: 512 - decimals: 0 - stepSize: 1 - backendValue: backendValues.indirectLightWorkgroupSize - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSpecifics.qml deleted file mode 100644 index 7efbe0c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - LightmapperSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSection.qml deleted file mode 100644 index 902ce78..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSection.qml +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Loader3D") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Active") - tooltip: qsTr("Sets if the Loader3D is currently active.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.active.valueToString - backendValue: backendValues.active - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the URL of the QML component to instantiate.") - } - - SecondColumnLayout { - UrlChooser { - filter: "*.qml" - backendValue: backendValues.source - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Source Component") - tooltip: qsTr("Sets the component to instantiate.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.sourceComponent - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Asynchronous") - tooltip: qsTr("Sets whether the component will be instantiated asynchronously.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.asynchronous.valueToString - backendValue: backendValues.asynchronous - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSpecifics.qml deleted file mode 100644 index 65642b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Loader3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MaterialSection.qml deleted file mode 100644 index 78df6e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MaterialSection.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Material") - - SectionLayout { - - // Baked Lighting properties (may be internal eventually) - // ### lightmapIndirect - // ### lightmapRadiosity - // ### lightmapShadow - - // ### iblProbe override - - PropertyLabel { - text: qsTr("Light Probe") - tooltip: qsTr("Sets a texture to use as image based lighting.\nThis overrides the scene's light probe.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lightProbe - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Culling Mode") - tooltip: qsTr("Sets which primitives to discard, if any.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"] - backendValue: backendValues.cullMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Depth Draw Mode") - tooltip: qsTr("Sets if and when depth rendering takes place.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["OpaqueOnlyDepthDraw", "AlwaysDepthDraw", "NeverDepthDraw", "OpaquePrePassDepthDraw"] - backendValue: backendValues.depthDrawMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSection.qml deleted file mode 100644 index cffad37..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSection.qml +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Model") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of the mesh file containing the geometry of this model.") - } - - SecondColumnLayout { - UrlChooser { - id: sourceUrlChooser - backendValue: backendValues.source - filter: "*.mesh" - defaultItems: ["#Rectangle" ,"#Sphere" ,"#Cube" ,"#Cone" ,"#Cylinder"] - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Geometry") - tooltip: qsTr("Sets a custom geometry for the model") - } - - SecondColumnLayout { - ItemFilterComboBox { - id: geometryComboBox - typeFilter: "QtQuick3D.Geometry" - backendValue: backendValues.geometry - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - - Connections { - target: geometryComboBox.backendValue - function onExpressionChanged() { - if (geometryComboBox.backendValue.expression !== "" && - sourceUrlChooser.backendValue.expression !== "") - sourceUrlChooser.backendValue.resetValue() - } - } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Materials") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.materials - model: backendValues.materials.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Material" - textRole: "idAndName" - - onAdd: function(value) { backendValues.materials.idListAdd(value) } - onRemove: function(idx) { backendValues.materials.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.materials.idListReplace(idx, value) } - - extraButtonIcon: StudioTheme.Constants.material_medium - extraButtonToolTip: qsTr("Edit material") - onExtraButtonClicked: (idx) => { backendValues.materials.openMaterialEditor(idx) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Casts Shadows") - tooltip: qsTr("Enables the geometry of this model to be rendered to the shadow maps.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.castsShadows.valueToString - backendValue: backendValues.castsShadows - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Receives Shadows") - tooltip: qsTr("Enables the geometry of this model to receive shadows.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.receivesShadows.valueToString - backendValue: backendValues.receivesShadows - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Casts Reflections") - tooltip: qsTr("Enables reflection probes to reflect this model.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.castsReflections.valueToString - backendValue: backendValues.castsReflections - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Receives Reflections") - tooltip: qsTr("Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.receivesReflections.valueToString - backendValue: backendValues.receivesReflections - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Is Pickable") - tooltip: qsTr("Enables ray cast based picking for this model.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.pickable.valueToString - backendValue: backendValues.pickable - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Used in Baked Lighting") - tooltip: qsTr("This model is static and suitable to contribute to baked lighting.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.usedInBakedLighting.valueToString - backendValue: backendValues.usedInBakedLighting - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - - PropertyLabel { - text: qsTr("Depth Bias") - tooltip: qsTr("Sets the depth bias of the model.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.depthBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("LOD Bias") - tooltip: qsTr("Sets the size a model needs to be when rendered before the automatic level of detail meshes are used") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0.0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.levelOfDetailBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Instancing") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Data Source") - tooltip: qsTr("If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Instancing" - backendValue: backendValues.instancing - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Origin Node") - tooltip: qsTr("Sets the origin of the instance’s coordinate system.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.instanceRoot - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Animation") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Skeleton") - tooltip: qsTr("Sets the skeleton for the model.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Skeleton" - backendValue: backendValues.skeleton - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Morph Targets") - tooltip: qsTr("Sets a list of MorphTargets used to render the provided geometry.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.morphTargets - model: backendValues.morphTargets.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.MorphTarget" - - onAdd: function(value) { backendValues.morphTargets.idListAdd(value) } - onRemove: function(idx) { backendValues.morphTargets.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.morphTargets.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Skin") - tooltip: qsTr("Sets the skin for the model.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Skin" - backendValue: backendValues.skin - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Lightmapping") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Resolution") - tooltip: qsTr("Sets the target resolution of the baked lightmap texture for the model.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 128 - maximumValue: 4096 - decimals: 0 - stepSize: 128 - sliderIndicatorVisible: true - backendValue: backendValues.lightmapBaseResolution - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Lightmap") - tooltip: qsTr("Sets the baked lightmap data for the model.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.BakedLightmap" - backendValue: backendValues.bakedLightmap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSpecifics.qml deleted file mode 100644 index 34a9c03..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ModelSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ModelSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSection.qml deleted file mode 100644 index d4c7d7a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSection.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Morph Target") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Weight") - tooltip: qsTr("Sets the weight of the current morph target.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.weight - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Attributes") - tooltip: qsTr("Sets the set of attributes of the current morph target.") - } - - SecondColumnLayout { - ComboBox { - scope: "MorphTarget" - model: ["Position", "Normal", "Tangent", "Binormal"] - backendValue: backendValues.attributes - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSpecifics.qml deleted file mode 100644 index 6564ecb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - MorphTargetSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSection.qml deleted file mode 100644 index 57677a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSection.qml +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Visibility") - - SectionLayout { - PropertyLabel { - text: qsTr("Visibility") - tooltip: qsTr("Sets the local visibility of the node.") - } - - SecondColumnLayout { - // ### should be a slider - CheckBox { - text: qsTr("Visible") - backendValue: backendValues.visible - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Opacity") - tooltip: qsTr("Sets the local opacity value of the node.") - } - - SecondColumnLayout { - // ### should be a slider - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.opacity - sliderIndicatorVisible: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - id: transformSection - width: parent.width - caption: qsTr("Transform") - - ColumnLayout { - spacing: StudioTheme.Values.transform3DSectionSpacing - - SectionLayout { - PropertyLabel { - text: qsTr("Translation") - tooltip: qsTr("Sets the translation of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Rotation") - tooltip: qsTr("Sets the rotation of the node in degrees.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.eulerRotation_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Scale") - tooltip: qsTr("Sets the scale of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.scale_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - - SectionLayout { - PropertyLabel { - text: qsTr("Pivot") - tooltip: qsTr("Sets the pivot of the node.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.pivot_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSpecifics.qml deleted file mode 100644 index b3b0d66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/NodeSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Object3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Object3DSection.qml deleted file mode 100644 index 330671c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Object3DSection.qml +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Section { - caption: qsTr("Object") -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSection.qml deleted file mode 100644 index 82a2f88..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSection.qml +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - width: parent.width - caption: qsTr("Orthographic Camera") - - SectionLayout { - PropertyLabel { - text: qsTr("Clip Near") - tooltip: qsTr("Sets the near value of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.clipNear - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Clip Far") - tooltip: qsTr("Sets the far value of the camera view frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - stepSize: 100 - backendValue: backendValues.clipFar - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Horizontal Magnification") - tooltip: qsTr("Sets the horizontal magnification of the OrthographicCamera's frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.horizontalMagnification - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Vertical Magnification") - tooltip: qsTr("Sets the vertical magnification of the OrthographicCamera's frustum.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.verticalMagnification - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml deleted file mode 100644 index 7511296..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - OrthographicCameraSection { - width: parent.width - } - - CameraSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSection.qml deleted file mode 100644 index 9b6aebd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSection.qml +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Pass") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Commands") - tooltip: qsTr("Sets the render commands of the pass.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.commands - model: backendValues.commands.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Command" - - onAdd: function(value) { backendValues.commands.idListAdd(value) } - onRemove: function(idx) { backendValues.commands.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.commands.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Buffer") - tooltip: qsTr("Sets the output buffer for the pass.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Buffer" - backendValue: backendValues.output - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Shaders") - tooltip: qsTr("Sets the shaders for the pass.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.shaders - model: backendValues.shaders.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Shader" - - onAdd: function(value) { backendValues.shaders.idListAdd(value) } - onRemove: function(idx) { backendValues.shaders.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.shaders.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSpecifics.qml deleted file mode 100644 index 7248630..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PassSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PassSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSection.qml deleted file mode 100644 index 4217eaa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSection.qml +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Perspective Camera") - - SectionLayout { - PropertyLabel { - text: qsTr("Clip Near") - tooltip: qsTr("Sets the near value of the view frustum of the camera.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - backendValue: backendValues.clipNear - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Clip Far") - tooltip: qsTr("Sets the far value of the view frustum of the camera.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 0 - stepSize: 100 - backendValue: backendValues.clipFar - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Field of View") - tooltip: qsTr("Sets the field of view of the camera in degrees.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 180 - decimals: 2 - backendValue: backendValues.fieldOfView - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("FOV Orientation") - tooltip: qsTr("Sets if the field of view property reflects the vertical or the horizontal field of view.") - } - - SecondColumnLayout { - ComboBox { - scope: "PerspectiveCamera" - model: ["Vertical", "Horizontal"] - backendValue: backendValues.fieldOfViewOrientation - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml deleted file mode 100644 index a8c0870..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PerspectiveCameraSection { - width: parent.width - } - - CameraSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSection.qml deleted file mode 100644 index 082a5be..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSection.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Point Light") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Constant Fade") - tooltip: qsTr("Sets the constant attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.constantFade - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Linear Fade") - tooltip: qsTr("Sets the linear attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.linearFade - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Quadratic Fade") - tooltip: qsTr("Sets the quadratic attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.quadraticFade - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSpecifics.qml deleted file mode 100644 index 207990c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PointLightSection { - width: parent.width - } - - AbstractLightSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSection.qml deleted file mode 100644 index 8e70e92..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSection.qml +++ /dev/null @@ -1,1032 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Principled Material") - width: parent.width - - SectionLayout { - id: baseSectionLayout - property bool isAlphaMaskMode: alphaModeComboBox.currentIndex === 1 - PropertyLabel { - text: qsTr("Alpha Mode") - tooltip: qsTr("Sets the mode for how the alpha channel of base color is used.") - } - - SecondColumnLayout { - ComboBox { - id: alphaModeComboBox - scope: "PrincipledMaterial" - model: ["Default", "Mask", "Blend", "Opaque"] - backendValue: backendValues.alphaMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isAlphaMaskMode - text: qsTr("Alpha Cutoff") - tooltip: qsTr("Sets the cutoff value when using the Mask alphaMode.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isAlphaMaskMode - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.alphaCutoff - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blend Mode") - tooltip: qsTr("Sets how the colors of the model rendered blend with those behind it.") - } - - SecondColumnLayout { - ComboBox { - scope: "PrincipledMaterial" - model: ["SourceOver", "Screen", "Multiply"] - backendValue: backendValues.blendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Lighting") - tooltip: qsTr("Sets which lighting method is used when generating this material.") - } - - SecondColumnLayout { - ComboBox { - scope: "PrincipledMaterial" - model: ["NoLighting", "FragmentLighting"] - backendValue: backendValues.lighting - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Base Color") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - } - - ColorEditor { - backendValue: backendValues.baseColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to set the base color of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.baseColorMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Metalness") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the metalness of the the material.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.metalness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to be used to set the metalness amount for the different parts of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.metalnessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the metalness value from metalnessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.metalnessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Roughness") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Roughness") - tooltip: qsTr("Sets the size of the specular highlight generated from lights, and the clarity of reflections in general.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.roughness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to control the specular roughness of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.roughnessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the roughness value from roughnessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.roughnessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Normal") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets an RGB image used to simulate fine geometry displacement across the surface of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.normalMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Sets the amount of simulated displacement for the normalMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.normalStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Occlusion") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the factor used to modify the values from the occlusionMap texture.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.occlusionAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine how much indirect light the different areas of the material should receive.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.occlusionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the occlusion value from occlusionMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.occlusionChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Opacity") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the opacity of just this material, separate from the model.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.opacity - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to control the opacity differently for different parts of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.opacityMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the opacity value from opacityMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.opacityChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Emissive Color") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to be used to set the emissive factor for different parts of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.emissiveMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Factor") - tooltip: qsTr("Sets the color of self-illumination for this material.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "R" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "G" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "B" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Height") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the factor used to modify the values from the heightMap texture.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.heightAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.heightMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the height value from heightMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.heightChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Min Map Samples") - tooltip: qsTr("Sets the minimum number of samples used for performing Parallex Occlusion Mapping using the heightMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 128 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.minHeightMapSamples - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Max Map Samples") - tooltip: qsTr("Sets the maximum number of samples used for performing Parallex Occlusion Mapping using the heightMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 256 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.maxHeightMapSamples - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Clearcoat") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the intensity of the clearcoat layer.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.clearcoatAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine the intensity of the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the intensity from clearcoatMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.clearcoatChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Amount") - tooltip: qsTr("Sets the roughness of the clearcoat layer.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.clearcoatRoughnessAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Map") - tooltip: qsTr("Sets a texture used to determine the roughness of the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatRoughnessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Channel") - tooltip: qsTr("Sets the texture channel used to read the roughness from clearcoatRoughnessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.clearcoatRoughnessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Normal Map") - tooltip: qsTr("Sets a texture used as a normalMap for the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatNormalMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Refraction") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Transmission Factor") - tooltip: qsTr("Sets the base percentage of light that is transmitted through the surface.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.transmissionFactor - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Transmission Map") - tooltip: qsTr("Sets a texture that contains the transmission percentage of a the surface.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.transmissionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Transmission Channel") - tooltip: qsTr("Sets the texture channel used to read the transmission percentage from transmissionMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.transmissionChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Index of Refraction") - tooltip: qsTr("Sets the index of refraction of the material.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 3 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.indexOfRefraction - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Factor") - tooltip: qsTr("Sets the thickness of the volume beneath the surface in model coordinate space.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: Infinity - decimals: 2 - backendValue: backendValues.thicknessFactor - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Map") - tooltip: qsTr("Sets a texture that contains the thickness of a the material volume.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.thicknessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Channel") - tooltip: qsTr("Sets the texture channel used to read the thickness amount from thicknessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.thicknessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Attenuation Color") - tooltip: qsTr("Sets the color that white lights turn into due to absorption when reaching the attenuation distance.") - } - - ColorEditor { - backendValue: backendValues.attenuationColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Attenuation Distance") - tooltip: qsTr("Sets the average distance in world space that light travels in the medium before interacting with a particle.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: Infinity - decimals: 2 - backendValue: backendValues.attenuationDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Advanced") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Vertex Colors") - tooltip: qsTr("Sets whether vertex colors are used to modulate the base color.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.vertexColorsEnabled ? qsTr("Enabled") : qsTr("Disabled") - backendValue: backendValues.vertexColorsEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Point Size") - tooltip: qsTr("Sets the size of the points rendered, when the geometry is using a primitive type of points.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1024 - decimals: 0 - backendValue: backendValues.pointSize - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Line Width") - tooltip: qsTr("Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1024 - decimals: 0 - backendValue: backendValues.lineWidth - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Overrides") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Specular Amount") - tooltip: qsTr("Override the strength of specularity (highlights and reflections).") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.specularAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Specular Map") - tooltip: qsTr("An RGB Texture to override the amount and the color of specularity across the surface of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.specularMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Reflection Map") - tooltip: qsTr("Sets a texture used for specular highlights on the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.specularReflectionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Specular Tint") - tooltip: qsTr("Override how much of the base color contributes to the specular reflections.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.specularTint - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml deleted file mode 100644 index ff10311..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - PrincipledMaterialSection { - width: parent.width - } - - MaterialSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSection.qml deleted file mode 100644 index f4b2ae1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSection.qml +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Reflection Probe") - - SectionLayout { - PropertyLabel { - text: qsTr("Box Size") - tooltip: qsTr("Sets the reflection probe box size.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxSize_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box size x" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxSize_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box size y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxSize_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box size z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Box Offset") - tooltip: qsTr("Sets the reflection probe box position relative to the probe position.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxOffset_x - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box offset x" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxOffset_y - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box offset y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.boxOffset_z - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "box offset z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Parallax Correction") - tooltip: qsTr("Reflection maps are considered to be at infinite distance by default. This is unsuitable for indoor area as it produces parallax issues.\nSetting this property to true corrects the cubemap by taking the camera position and the box's dimension into account.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.parallaxCorrection.valueToString - backendValue: backendValues.parallaxCorrection - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Debug View") - tooltip: qsTr("Enables rendering a wireframe to visualize the reflection probe box.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.debugView.valueToString - backendValue: backendValues.debugView - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Clear Color") - tooltip: qsTr("Sets the color that will be used to clear the reflection map.") - } - - ColorEditor { - backendValue: backendValues.clearColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Reflection Map Quality") - tooltip: qsTr("Sets the quality of the reflection map.") - } - - SecondColumnLayout { - ComboBox { - scope: "ReflectionProbe" - model: ["VeryLow", "Low", "Medium", "High", "VeryHigh"] - backendValue: backendValues.quality - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Refresh Mode") - tooltip: qsTr("Sets how often the reflection map will be updated.") - } - - SecondColumnLayout { - ComboBox { - scope: "ReflectionProbe" - model: ["FirstFrame", "EveryFrame"] - backendValue: backendValues.refreshMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Time Slicing") - tooltip: qsTr("Sets how often the faces of the reflection cube map are updated.") - } - - SecondColumnLayout { - ComboBox { - scope: "ReflectionProbe" - model: ["None", "AllFacesAtOnce", "IndividualFaces"] - backendValue: backendValues.timeSlicing - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Override Texture") - tooltip: qsTr("Sets an override texture to use for the reflection map instead of rendering the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.CubeMapTexture" - backendValue: backendValues.texture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSpecifics.qml deleted file mode 100644 index abfcd12..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ReflectionProbeSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSection.qml deleted file mode 100644 index 03f96fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSection.qml +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Repeater") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Model") - tooltip: qsTr("The model providing data for the repeater. This can simply specify the number of delegate instances to create or it can be bound to an actual model.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.model - showTranslateCheckBox: false - writeAsExpression: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Delegate") - tooltip: qsTr("The delegate provides a template defining each object instantiated by the repeater.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "Component" - backendValue: backendValues.delegate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSpecifics.qml deleted file mode 100644 index b9ecacc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - Repeater3DSection { - width: parent.width - } - - NodeSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSection.qml deleted file mode 100644 index 4c0a765..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSection.qml +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Resource Loader") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Geometries") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - tooltip: qsTr("A list of custom geometries to be loaded and cached.") - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.geometries - model: backendValues.geometries.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Geometry" - - onAdd: function(value) { backendValues.geometries.idListAdd(value) } - onRemove: function(idx) { backendValues.geometries.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.geometries.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Mesh Sources") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - tooltip: qsTr("A list of mesh assets to be loaded and cached.") - } - - SecondColumnLayout { - - ActionIndicator { - icon.color: extFuncLogic.color - icon.text: extFuncLogic.glyph - onClicked: extFuncLogic.show() - forceVisible: extFuncLogic.menuVisible - ExtendedFunctionLogic { - id: extFuncLogic - backendValue: backendValues.meshSources - } - } - - // Placeholder until we can do list of value types: QDS-9090 - Label { - text: qsTr("Currently only editable in QML.") - Layout.fillWidth: true - Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth - Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth - Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Textures") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - tooltip: qsTr("A list of textures to be loaded and cached.") - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.textures - model: backendValues.textures.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Texture" - - onAdd: function(value) { backendValues.textures.idListAdd(value) } - onRemove: function(idx) { backendValues.textures.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.textures.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSpecifics.qml deleted file mode 100644 index bf6b9b1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ResourceLoaderSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSection.qml deleted file mode 100644 index 07db0aa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSection.qml +++ /dev/null @@ -1,688 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Scene Environment") - - SectionLayout { - id: baseSectionLayout - property bool isColorMode: backgroundModeComboBox.currentIndex === 2 - property bool isSkyBoxMode: backgroundModeComboBox.currentIndex === 3 - property bool isSkyBoxCubeMapMode: backgroundModeComboBox.currentIndex === 4 - - PropertyLabel { - text: qsTr("Background Mode") - tooltip: qsTr("Sets if and how the background of the scene should be cleared.") - } - - SecondColumnLayout { - ComboBox { - id: backgroundModeComboBox - scope: "SceneEnvironment" - model: ["Transparent", "Unspecified", "Color", "SkyBox", "SkyBoxCubeMap"] - backendValue: backendValues.backgroundMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isColorMode - text: qsTr("Clear Color") - tooltip: qsTr("Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property.") - } - - ColorEditor { - visible: baseSectionLayout.isColorMode - backendValue: backendValues.clearColor - supportGradient: false - } - - PropertyLabel { - visible: baseSectionLayout.isSkyBoxCubeMapMode - text: qsTr("Skybox Cube Map") - tooltip: qsTr("Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isSkyBoxCubeMapMode - ItemFilterComboBox { - typeFilter: "QtQuick3D.CubeMapTexture" - backendValue: backendValues.skyBoxCubeMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode - text: qsTr("Skybox Blur") - tooltip: qsTr("Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.skyboxBlurAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Effects") - tooltip: qsTr("Post Processing effects applied to this scene.") - Layout.alignment: Qt.AlignTop - Layout.topMargin: 5 - } - - SecondColumnLayout { - EditableListView { - backendValue: backendValues.effects - model: backendValues.effects.expressionAsList - Layout.fillWidth: true - typeFilter: "QtQuick3D.Effect" - - onAdd: function(value) { backendValues.effects.idListAdd(value) } - onRemove: function(idx) { backendValues.effects.idListRemove(idx) } - onReplace: function (idx, value) { backendValues.effects.idListReplace(idx, value) } - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Tonemap Mode") - tooltip: qsTr("Sets how colors are tonemapped before rendering.") - } - - SecondColumnLayout { - ComboBox { - scope: "SceneEnvironment" - model: ["TonemapModeNone", "TonemapModeLinear", "TonemapModeAces", "TonemapModeHejlDawson", "TonemapModeFilmic"] - backendValue: backendValues.tonemapMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Fog") - tooltip: qsTr("Settings for Fog applied to the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Fog" - backendValue: backendValues.fog - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - } - } - - Section { - id: antialiasingSection - width: parent.width - caption: qsTr("Antialiasing") - - property bool isAntialiasingEnabled: antialiasingModeComboBox.currentIndex !== 0 - - SectionLayout { - PropertyLabel { - text: qsTr("Antialiasing Mode") - tooltip: qsTr("Sets the antialiasing mode applied to the scene.") - } - - SecondColumnLayout { - ComboBox { - id: antialiasingModeComboBox - scope: "SceneEnvironment" - model: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"] - backendValue: backendValues.antialiasingMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: antialiasingSection.isAntialiasingEnabled - text: qsTr("Antialiasing Quality") - tooltip: qsTr("Sets the level of antialiasing applied to the scene.") - } - - SecondColumnLayout { - visible: antialiasingSection.isAntialiasingEnabled - ComboBox { - scope: "SceneEnvironment" - model: ["Medium", "High", "VeryHigh"] - backendValue: backendValues.antialiasingQuality - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Specular AA") - tooltip: qsTr("Enables specular antialiasing.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.specularAAEnabled.valueToString - backendValue: backendValues.specularAAEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Temporal AA") - tooltip: qsTr("Enables temporal antialiasing using camera jittering and frame blending.") - } - - SecondColumnLayout { - CheckBox { - id: temporalAAEnabledCheckBox - text: backendValues.temporalAAEnabled.valueToString - backendValue: backendValues.temporalAAEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: temporalAAEnabledCheckBox.checked - text: qsTr("Temporal AA Strength") - tooltip: qsTr("Sets the amount of temporal antialiasing applied.") - } - - SecondColumnLayout { - visible: temporalAAEnabledCheckBox.checked - SpinBox { - minimumValue: 0.01 - maximumValue: 2.0 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.temporalAAStrength - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Ambient Occlusion") - - SectionLayout { - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Enables ambient occlusion.") - } - - SecondColumnLayout { - CheckBox { - id: ambientOcclusionEnabledCheckBox - text: backendValues.aoEnabled.valueToString - backendValue: backendValues.aoEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Strength") - tooltip: qsTr("Sets the amount of ambient occulusion applied.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 100 - sliderIndicatorVisible: true - decimals: 0 - backendValue: backendValues.aoStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Distance") - tooltip: qsTr("Sets roughly how far ambient occlusion shadows spread away from objects.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.aoDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Softness") - tooltip: qsTr("Sets how smooth the edges of the ambient occlusion shading are.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 50 - sliderIndicatorVisible: true - decimals: 2 - backendValue: backendValues.aoSoftness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Sample Rate") - tooltip: qsTr("Sets ambient occlusion quality (more shades of gray) at the expense of performance.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 2 - maximumValue: 4 - decimals: 0 - stepSize: 1 - sliderIndicatorVisible: true - backendValue: backendValues.aoSampleRate - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Bias") - tooltip: qsTr("Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.aoBias - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: ambientOcclusionEnabledCheckBox.checked - text: qsTr("Dither") - tooltip: qsTr("Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness.") - } - - SecondColumnLayout { - visible: ambientOcclusionEnabledCheckBox.checked - CheckBox { - id: aoDitherCheckBox - text: backendValues.aoDither.valueToString - backendValue: backendValues.aoDither - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Image Based Lighting") - - SectionLayout { - PropertyLabel { - text: qsTr("HDR Image") - tooltip: qsTr("Sets an image to use to light the scene, either instead of, or in addition to standard lights.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.lightProbe - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Exposure") - tooltip: qsTr("Sets the amount of light emitted by the light probe.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeExposure - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Horizon") - tooltip: qsTr("Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.probeHorizon - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Orientation") - tooltip: qsTr("Sets the orientation of the light probe.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "X" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Y" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: -9999999 - maximumValue: 9999999 - decimals: 2 - backendValue: backendValues.probeOrientation_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "Z" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - - Section { - width: parent.width - caption: qsTr("Advanced") - - SectionLayout { - PropertyLabel { - text: qsTr("Enable Depth Test") - tooltip: qsTr("Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthTestEnabled.valueToString - backendValue: backendValues.depthTestEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enable Depth Prepass") - tooltip: qsTr("Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.depthPrePassEnabled.valueToString - backendValue: backendValues.depthPrePassEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Debug Settings") - tooltip: qsTr("Additional render settings for debugging scenes.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.DebugSettings" - backendValue: backendValues.debugSettings - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Light Mapper") - tooltip: qsTr("Sets the light mapper object for the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Lightmapper" - backendValue: backendValues.lightmapper - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // ### This is not yet implemented in the DS backend since rect does not have - // a way to access x, y, width, or height via the _ notation. - // PropertyLabel { - // text: qsTr("Scissor Rect") - // tooltip: qsTr("Defines a scissor rectangle in view coordinates.") - // } - - // SecondColumnLayout { - // SpinBox { - // maximumValue: 999999 - // minimumValue: -999999 - // decimals: 0 - // stepSize: 1 - // backendValue: backendValues.scissorRect_x - // implicitWidth: StudioTheme.Values.twoControlColumnWidth - // + StudioTheme.Values.actionIndicatorWidth - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - // ControlLabel { - // text: "X" - // tooltip: qsTr("Sets the scissor clip X offset from left to right.") - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlGap } - - // SpinBox { - // maximumValue: 999999 - // minimumValue: -999999 - // decimals: 0 - // stepSize: 1 - // backendValue: backendValues.scissorRect_y - // implicitWidth: StudioTheme.Values.twoControlColumnWidth - // + StudioTheme.Values.actionIndicatorWidth - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - // ControlLabel { - // text: "Y" - // tooltip: qsTr("Sets the scissor clip Y offset from bottom to top.") - // } - - // ExpandingSpacer {} - // } - - // PropertyLabel {} // spacer - - // SecondColumnLayout { - // SpinBox { - // maximumValue: 999999 - // minimumValue: -999999 - // decimals: 0 - // stepSize: 1 - // backendValue: backendValues.scissorRect_width - // implicitWidth: StudioTheme.Values.twoControlColumnWidth - // + StudioTheme.Values.actionIndicatorWidth - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - // ControlLabel { - // text: "W" - // tooltip: qsTr("Sets the scissor clip width") - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlGap } - - // SpinBox { - // maximumValue: 999999 - // minimumValue: -999999 - // decimals: 0 - // stepSize: 1 - // backendValue: backendValues.scissorRect_height - // implicitWidth: StudioTheme.Values.twoControlColumnWidth - // + StudioTheme.Values.actionIndicatorWidth - // } - - // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - // ControlLabel { - // text: "H" - // tooltip: qsTr("Sets the scissor clip height") - // } - - // ExpandingSpacer {} - // } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml deleted file mode 100644 index 1ee6b5b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SceneEnvironmentSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSection.qml deleted file mode 100644 index f9f3e23..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSection.qml +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Set Uniform Value") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Target") - tooltip: qsTr("Sets the name of the uniform to change value for a pass.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.target - showTranslateCheckBox: false - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Value") - tooltip: qsTr("Sets the value of the uniform.") - } - - SecondColumnLayout { - LineEdit { - backendValue: backendValues.value - showTranslateCheckBox: false - writeAsExpression: true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - width: implicitWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml deleted file mode 100644 index 509419e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SetUniformValueSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSection.qml deleted file mode 100644 index a4b34e5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSection.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Shader") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the shader source code.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.shader - filter: "*.vert *.frag *.glslv *.glslf *.glsl *.vsh *.fsh" - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Stage") - tooltip: qsTr("Sets the shader stage.") - } - - SecondColumnLayout { - ComboBox { - scope: "Shader" - model: ["Vertex", "Fragment"] - backendValue: backendValues.stage - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSpecifics.qml deleted file mode 100644 index afe4210..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - ShaderSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShadowSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShadowSection.qml deleted file mode 100644 index cabd90c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/ShadowSection.qml +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Shadows") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Casts Shadow") - tooltip: qsTr("Enables shadow casting for this light.") - } - - SecondColumnLayout { - CheckBox { - id: shadowCheckBox - text: backendValues.castsShadow.valueToString - backendValue: backendValues.castsShadow - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - // ### all the following should only be shown when shadows are enabled - PropertyLabel { - visible: shadowCheckBox.checked - text: qsTr("Amount") - tooltip: qsTr("Sets how dark the cast shadows should be.") - } - - SecondColumnLayout { - visible: shadowCheckBox.checked - SpinBox { - minimumValue: 0.0 - maximumValue: 100.0 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.shadowFactor - enabled: shadowCheckBox.backendValue.value === true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: shadowCheckBox.checked - text: qsTr("Filter") - tooltip: qsTr("Sets how much blur is applied to the shadows.") - } - - SecondColumnLayout { - visible: shadowCheckBox.checked - SpinBox { - minimumValue: 1.0 - maximumValue: 100.0 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.shadowFilter - enabled: shadowCheckBox.backendValue.value === true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: shadowCheckBox.checked - text: qsTr("Quality") - tooltip: qsTr("Sets the quality of the shadow map created for shadow rendering.") - } - - SecondColumnLayout { - visible: shadowCheckBox.checked - ComboBox { - scope: "Light" - model: ["ShadowMapQualityLow", "ShadowMapQualityMedium", "ShadowMapQualityHigh", "ShadowMapQualityVeryHigh"] - backendValue: backendValues.shadowMapQuality - enabled: shadowCheckBox.backendValue.value === true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: shadowCheckBox.checked - text: qsTr("Bias") - tooltip: qsTr("Sets a slight offset to avoid self-shadowing artifacts.") - } - - SecondColumnLayout { - visible: shadowCheckBox.checked - SpinBox { - minimumValue: -1.0 - maximumValue: 1.0 - decimals: 3 - stepSize: 0.001 - sliderIndicatorVisible: true - backendValue: backendValues.shadowBias - enabled: shadowCheckBox.backendValue.value === true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: shadowCheckBox.checked - text: qsTr("Far Distance") - tooltip: qsTr("Sets the maximum distance for the shadow map.") - } - - SecondColumnLayout { - visible: shadowCheckBox.checked - SpinBox { - minimumValue: 0 - maximumValue: Infinity - decimals: 0 - stepSize: 10 - backendValue: backendValues.shadowMapFar - enabled: shadowCheckBox.backendValue.value === true - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSection.qml deleted file mode 100644 index f5034a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSection.qml +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Skin") - width: parent.width - - SectionLayout { - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSpecifics.qml deleted file mode 100644 index 02b3e7d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SkinSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SkinSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSection.qml deleted file mode 100644 index 17ef2c2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSection.qml +++ /dev/null @@ -1,907 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Column { - width: parent.width - - Section { - caption: qsTr("Specular Glossy Material") - width: parent.width - - SectionLayout { - id: baseSectionLayout - property bool isAlphaMaskMode: alphaModeComboBox.currentIndex === 1 - PropertyLabel { - text: qsTr("Alpha Mode") - tooltip: qsTr("Sets the mode for how the alpha channel of material color is used.") - } - - SecondColumnLayout { - ComboBox { - id: alphaModeComboBox - scope: "SpecularGlossyMaterial" - model: ["Default", "Mask", "Blend", "Opaque"] - backendValue: backendValues.alphaMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - visible: baseSectionLayout.isAlphaMaskMode - text: qsTr("Alpha Cutoff") - tooltip: qsTr("Sets the cutoff value when using the Mask alphaMode.") - } - - SecondColumnLayout { - visible: baseSectionLayout.isAlphaMaskMode - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.alphaCutoff - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Blend Mode") - tooltip: qsTr("Sets how the colors of the model rendered blend with those behind it.") - } - - SecondColumnLayout { - ComboBox { - scope: "SpecularGlossyMaterial" - model: ["SourceOver", "Screen", "Multiply"] - backendValue: backendValues.blendMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Lighting") - tooltip: qsTr("Sets which lighting method is used when generating this material.") - } - - SecondColumnLayout { - ComboBox { - scope: "SpecularGlossyMaterial" - model: ["NoLighting", "FragmentLighting"] - backendValue: backendValues.lighting - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Albedo") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the albedo color of the material.") - } - - ColorEditor { - backendValue: backendValues.albedoColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to set the albedo color of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.albedoMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Specular") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Color") - tooltip: qsTr("Sets the specular color of the material.") - } - - ColorEditor { - backendValue: backendValues.specularColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to set the specular color of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.specularMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Glossiness") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the size of the specular highlight generated from lights, and the clarity of reflections in general.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.glossiness - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to control the glossiness of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.glossinessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the glossiness value from glossinessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.glossinessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Normal") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets an RGB image used to simulate fine geometry displacement across the surface of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.normalMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Strength") - tooltip: qsTr("Sets the amount of simulated displacement for the normalMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.normalStrength - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Occlusion") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the factor used to modify the values from the occlusionMap texture.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.occlusionAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine how much indirect light the different areas of the material should receive.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.occlusionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the occlusion value from occlusionMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.occlusionChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Opacity") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the opacity of just this material, separate from the model.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.opacity - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to control the opacity differently for different parts of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.opacityMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the opacity value from opacityMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.opacityChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Emissive Color") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture to be used to set the emissive factor for different parts of the material.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.emissiveMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Factor") - tooltip: qsTr("Sets the color of self-illumination for this material.") - } - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_x - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "R" - color: StudioTheme.Values.theme3DAxisXColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_y - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "G" - color: StudioTheme.Values.theme3DAxisYColor - } - - ExpandingSpacer {} - } - - PropertyLabel {} - - SecondColumnLayout { - SpinBox { - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - minimumValue: 0 - maximumValue: 16 - decimals: 2 - stepSize: 0.01 - sliderIndicatorVisible: true - backendValue: backendValues.emissiveFactor_z - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "B" - color: StudioTheme.Values.theme3DAxisZColor - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Height") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the factor used to modify the values from the heightMap texture.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.heightAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.heightMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the height value from heightMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.heightChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Min Map Samples") - tooltip: qsTr("Sets the minimum number of samples used for performing Parallax Occlusion Mapping using the heightMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 128 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.minHeightMapSamples - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Max Map Samples") - tooltip: qsTr("Sets the maximum number of samples used for performing Parallax Occlusion Mapping using the heightMap.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 1 - maximumValue: 256 - decimals: 0 - sliderIndicatorVisible: true - backendValue: backendValues.maxHeightMapSamples - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Clearcoat") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Amount") - tooltip: qsTr("Sets the intensity of the clearcoat layer.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.clearcoatAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Map") - tooltip: qsTr("Sets a texture used to determine the intensity of the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Channel") - tooltip: qsTr("Sets the texture channel used to read the intensity from clearcoatMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.clearcoatChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Amount") - tooltip: qsTr("Sets the roughness of the clearcoat layer.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.clearcoatRoughnessAmount - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Map") - tooltip: qsTr("Sets a texture used to determine the roughness of the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatRoughnessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Roughness Channel") - tooltip: qsTr("Sets the texture channel used to read the roughness from clearcoatRoughnessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.clearcoatRoughnessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Normal Map") - tooltip: qsTr("Sets a texture used as a normalMap for the clearcoat layer.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.clearcoatNormalMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Refraction") - width: parent.width - - SectionLayout { - - PropertyLabel { - text: qsTr("Transmission Factor") - tooltip: qsTr("Sets the base percentage of light that is transmitted through the surface.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1 - decimals: 2 - stepSize: 0.1 - sliderIndicatorVisible: true - backendValue: backendValues.transmissionFactor - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Transmission Map") - tooltip: qsTr("Sets a texture that contains the transmission percentage of a the surface.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.transmissionMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Transmission Channel") - tooltip: qsTr("Sets the texture channel used to read the transmission percentage from transmissionMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.transmissionChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Factor") - tooltip: qsTr("Sets the thickness of the volume beneath the surface in model coordinate space.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: Infinity - decimals: 2 - backendValue: backendValues.thicknessFactor - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Map") - tooltip: qsTr("Sets a texture that contains the thickness of a the material volume.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.thicknessMap - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Thickness Channel") - tooltip: qsTr("Sets the texture channel used to read the thickness amount from thicknessMap.") - } - - SecondColumnLayout { - ComboBox { - scope: "Material" - model: ["R", "G", "B", "A"] - backendValue: backendValues.thicknessChannel - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Attenuation Color") - tooltip: qsTr("Sets the color that white lights turn into due to absorption when reaching the attenuation distance.") - } - - ColorEditor { - backendValue: backendValues.attenuationColor - supportGradient: false - } - - PropertyLabel { - text: qsTr("Attenuation Distance") - tooltip: qsTr("Sets the average distance in world space that light travels in the medium before interacting with a particle.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: Infinity - decimals: 2 - backendValue: backendValues.attenuationDistance - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } - - Section { - caption: qsTr("Advanced") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Vertex Colors") - tooltip: qsTr("Sets whether vertex colors are used to modulate the base color.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.vertexColorsEnabled ? qsTr("Enabled") : qsTr("Disabled") - backendValue: backendValues.vertexColorsEnabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Point Size") - tooltip: qsTr("Sets the size of the points rendered, when the geometry is using a primitive type of points.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1024 - decimals: 0 - backendValue: backendValues.pointSize - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Line Width") - tooltip: qsTr("Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 1024 - decimals: 0 - backendValue: backendValues.lineWidth - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSpecifics.qml deleted file mode 100644 index b84e824..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SpecularGlossyMaterialSection { - width: parent.width - } - - MaterialSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSection.qml deleted file mode 100644 index e77cfb7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSection.qml +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Spot Light") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Constant Fade") - tooltip: qsTr("Sets the constant attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.constantFade - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Linear Fade") - tooltip: qsTr("Sets the linear attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.linearFade - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Quadratic Fade") - tooltip: qsTr("Sets the quadratic attenuation of the light.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.quadraticFade - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Cone Angle") - tooltip: qsTr("Sets the angle of the light cone.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 180 - decimals: 2 - backendValue: backendValues.coneAngle - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Inner Cone Angle") - tooltip: qsTr("Sets the angle of the inner light cone.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 180 - decimals: 2 - backendValue: backendValues.innerConeAngle - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSpecifics.qml deleted file mode 100644 index 3ed3767..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSpecifics.qml +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - SpotLightSection { - width: parent.width - } - - AbstractLightSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSection.qml deleted file mode 100644 index 0a77352..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSection.qml +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Texture Input") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Texture") - tooltip: qsTr("Sets the input texture.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Texture" - backendValue: backendValues.texture - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Enabled") - tooltip: qsTr("Sets the texture enabled state.") - } - - SecondColumnLayout { - CheckBox { - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSpecifics.qml deleted file mode 100644 index 7270560..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TextureInputSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSection.qml deleted file mode 100644 index fb653d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSection.qml +++ /dev/null @@ -1,392 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("Texture") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Source") - tooltip: qsTr("Sets the location of an image file containing the data used by the texture.") - } - - SecondColumnLayout { - UrlChooser { - backendValue: backendValues.source - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Source Item") - tooltip: qsTr("Sets an item to be used as the source of the texture.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick.Item" - backendValue: backendValues.sourceItem - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - PropertyLabel { - text: qsTr("Texture Data") - tooltip: qsTr("Sets a reference to a TextureData component which defines the contents and properties of raw texture data.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.TextureData" - backendValue: backendValues.textureData - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Scale") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.scaleU - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "U" - tooltip: qsTr("Sets how to scale the U texture coordinate when mapping to UV coordinates of a mesh.") - } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 2 - backendValue: backendValues.scaleV - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "V" - tooltip: qsTr("Sets how to scale the V texture coordinate when mapping to UV coordinates of a mesh.") - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Flip V") - tooltip: qsTr("Sets the use of the vertically flipped coordinates.") - } - - SecondColumnLayout { - CheckBox { - id: flipVcheckBox - text: backendValues.flipV.valueToString - backendValue: backendValues.flipV - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Flip U") - tooltip: qsTr("Sets the use of the horizontally flipped texture coordinates.") - } - - SecondColumnLayout { - CheckBox { - id: flipUCheckBox - text: backendValues.flipU.valueToString - backendValue: backendValues.flipU - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Auto Orientation") - tooltip: qsTr("Sets if a texture transformation, such as flipping the V texture coordinate, is applied automatically for textures where this is typically relevant.") - } - - SecondColumnLayout { - CheckBox { - id: autoOrientationCheckBox - text: backendValues.autoOrientation.valueToString - backendValue: backendValues.autoOrientation - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Texture Mapping") - tooltip: qsTr("Sets which method of mapping to use when sampling this texture.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["UV", "Environment", "LightProbe"] - backendValue: backendValues.mappingMode - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - } - - PropertyLabel { - text: qsTr("U Tiling") - tooltip: qsTr("Sets how the texture is mapped when the U scaling value is greater than 1.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["ClampToEdge", "MirroredRepeat", "Repeat"] - backendValue: backendValues.tilingModeHorizontal - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("V Tiling") - tooltip: qsTr("Sets how the texture is mapped when the V scaling value is greater than 1.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["ClampToEdge", "MirroredRepeat", "Repeat"] - backendValue: backendValues.tilingModeVertical - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("UV Index") - tooltip: qsTr("Sets the UV coordinate index used by this texture.") - } - - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 999999 - decimals: 0 - backendValue: backendValues.indexUV - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("UV Rotation") - tooltip: qsTr("Sets the rotation of the texture around the pivot point.") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 0 - backendValue: backendValues.rotationUV - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Position") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.positionU - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "U" - tooltip: qsTr("Sets the U coordinate mapping offset from left to right.") - } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.positionV - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "V" - tooltip: qsTr("Sets the V coordinate mapping offset from bottom to top.") - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Pivot") - } - - SecondColumnLayout { - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.pivotU - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "U" - tooltip: qsTr("Sets the pivot U position.") - } - - Spacer { implicitWidth: StudioTheme.Values.controlGap } - - SpinBox { - maximumValue: 999999 - minimumValue: -999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.pivotV - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } - - ControlLabel { - text: "V" - tooltip: qsTr("Sets the pivot V position.") - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Generate Mipmaps") - tooltip: qsTr("Sets if mipmaps are generated for textures that do not provide mipmap levels themselves.") - } - - SecondColumnLayout { - CheckBox { - id: generateMipmapscheckBox - text: backendValues.generateMipmaps.valueToString - backendValue: backendValues.generateMipmaps - implicitWidth: StudioTheme.Values.twoControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Mag Filter") - tooltip: qsTr("Sets how the texture is sampled when a texel covers more than one pixel.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["None", "Nearest", "Linear"] - backendValue: backendValues.magFilter - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Min Filter") - tooltip: qsTr("Sets how the texture is sampled when a texel covers more than one pixel.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["None", "Nearest", "Linear"] - backendValue: backendValues.minFilter - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Mip Filter") - tooltip: qsTr("Sets how the texture mipmaps are sampled when a texel covers less than one pixel.") - } - - SecondColumnLayout { - ComboBox { - scope: "Texture" - model: ["None", "Nearest", "Linear"] - backendValue: backendValues.mipFilter - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSpecifics.qml deleted file mode 100644 index a52924a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/TextureSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - TextureSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSection.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSection.qml deleted file mode 100644 index bdd9a01..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSection.qml +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 -import StudioTheme 1.0 as StudioTheme - -Section { - caption: qsTr("View3D") - width: parent.width - - SectionLayout { - PropertyLabel { - text: qsTr("Camera") - tooltip: qsTr("Sets which camera is used to render the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Camera" - backendValue: backendValues.camera - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Environment") - tooltip: qsTr("Sets the scene environment used to render the scene.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.SceneEnvironment" - backendValue: backendValues.environment - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Import Scene") - tooltip: qsTr("Sets the reference node of the scene to render to the viewport.") - } - - SecondColumnLayout { - ItemFilterComboBox { - typeFilter: "QtQuick3D.Node" - backendValue: backendValues.importScene - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - - PropertyLabel { - text: qsTr("Render Format") - tooltip: qsTr("Sets the format of the backing texture.") - } - - SecondColumnLayout { - ComboBox { - scope: "ShaderEffectSource" - model: ["RGBA8", "RGBA16F", "RGBA32F"] - backendValue: backendValues.renderFormat - implicitWidth: StudioTheme.Values.singleControlColumnWidth - + StudioTheme.Values.actionIndicatorWidth - } - - ExpandingSpacer {} - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSpecifics.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSpecifics.qml deleted file mode 100644 index 83d8e57..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/View3DSpecifics.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import HelperWidgets 2.0 - -Column { - width: parent.width - - View3DSection { - width: parent.width - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera.png deleted file mode 100644 index 4460421..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera16.png deleted file mode 100644 index 74d84d6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera@2x.png deleted file mode 100644 index 8931adb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/camera@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone.png deleted file mode 100644 index 29e0df7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone16.png deleted file mode 100644 index d30f924..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone@2x.png deleted file mode 100644 index 099e80c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cone@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube.png deleted file mode 100644 index 9581263..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube16.png deleted file mode 100644 index 759f073..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube@2x.png deleted file mode 100644 index 7ab1e27..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cube@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture.png deleted file mode 100644 index 596b760..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture16.png deleted file mode 100644 index c37d1fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture@2x.png deleted file mode 100644 index f257b8b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial.png deleted file mode 100644 index 1b540da..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial16.png deleted file mode 100644 index 7284792..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial@2x.png deleted file mode 100644 index 3dbcf73..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder.png deleted file mode 100644 index e391446..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder16.png deleted file mode 100644 index 37d683d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder@2x.png deleted file mode 100644 index 2b166ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings.png deleted file mode 100644 index adcdbe5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings16.png deleted file mode 100644 index 4fd2eac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings@2x.png deleted file mode 100644 index 9eddf9f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy.png deleted file mode 100644 index a3b6c7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy16.png deleted file mode 100644 index de8906a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy@2x.png deleted file mode 100644 index 7ca04a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect.png deleted file mode 100644 index 8f9f288..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect16.png deleted file mode 100644 index 93fbc03..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect@2x.png deleted file mode 100644 index 204f50e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/effect@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing.png deleted file mode 100644 index 21089c4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing16.png deleted file mode 100644 index d6582d0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing@2x.png deleted file mode 100644 index e9a564a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog.png deleted file mode 100644 index 5b00523..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog16.png deleted file mode 100644 index e38d561..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog@2x.png deleted file mode 100644 index f3a4439..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/fog@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group.png deleted file mode 100644 index fd9d439..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group16.png deleted file mode 100644 index 0e85848..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group@2x.png deleted file mode 100644 index d230647..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/group@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist.png deleted file mode 100644 index 6668f1d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist16.png deleted file mode 100644 index 95c9494..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist@2x.png deleted file mode 100644 index e24f731..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry.png deleted file mode 100644 index ad499e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry16.png deleted file mode 100644 index 1a0a286..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry@2x.png deleted file mode 100644 index df5c9f6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint.png deleted file mode 100644 index 1cf1338..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint16.png deleted file mode 100644 index 2166d6c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint@2x.png deleted file mode 100644 index a5fe919..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/joint@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional.png deleted file mode 100644 index 1e800ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional16.png deleted file mode 100644 index c326e8d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional@2x.png deleted file mode 100644 index 4ea4343..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper.png deleted file mode 100644 index deec5de..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper16.png deleted file mode 100644 index 446d055..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper@2x.png deleted file mode 100644 index 3903cd7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint.png deleted file mode 100644 index 06e81a7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint16.png deleted file mode 100644 index 0fe6eb5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint@2x.png deleted file mode 100644 index 0f627c2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot.png deleted file mode 100644 index c256ef1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot16.png deleted file mode 100644 index 4d5ef11..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot@2x.png deleted file mode 100644 index c15ae37..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d.png deleted file mode 100644 index 65e79f4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d16.png deleted file mode 100644 index 165ba4d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d@2x.png deleted file mode 100644 index 1131ad6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material.png deleted file mode 100644 index 7755645..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material16.png deleted file mode 100644 index 7f486b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material@2x.png deleted file mode 100644 index ea604a9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/material@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/model16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/model16.png deleted file mode 100644 index 759f073..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/model16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget.png deleted file mode 100644 index 454170b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget16.png deleted file mode 100644 index 5d1592a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget@2x.png deleted file mode 100644 index eba43f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane.png deleted file mode 100644 index 87d4979..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane16.png deleted file mode 100644 index 6f55b08..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane@2x.png deleted file mode 100644 index b8799e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/plane@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe.png deleted file mode 100644 index 5933d23..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe16.png deleted file mode 100644 index ae038ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe@2x.png deleted file mode 100644 index f13232e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d.png deleted file mode 100644 index 3f4367a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d16.png deleted file mode 100644 index 7594c9e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d@2x.png deleted file mode 100644 index b7fe929..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader.png deleted file mode 100644 index 6a7350e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader16.png deleted file mode 100644 index 5622892..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader@2x.png deleted file mode 100644 index a5dd49e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene.png deleted file mode 100644 index e13791e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene16.png deleted file mode 100644 index 202b2f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene@2x.png deleted file mode 100644 index cef25b1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/scene@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand.png deleted file mode 100644 index 86aa50b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand16.png deleted file mode 100644 index 62a9160..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand@2x.png deleted file mode 100644 index 6fc3793..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil.png deleted file mode 100644 index 948752c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil16.png deleted file mode 100644 index a33401e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil@2x.png deleted file mode 100644 index a54511e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton.png deleted file mode 100644 index 29608d8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton16.png deleted file mode 100644 index acf8d4d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton@2x.png deleted file mode 100644 index 1541e35..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin.png deleted file mode 100644 index 278e536..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin16.png deleted file mode 100644 index c00423b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin@2x.png deleted file mode 100644 index 1aa043f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/skin@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere.png deleted file mode 100644 index 28f0ab4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere16.png deleted file mode 100644 index 1db5129..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere@2x.png deleted file mode 100644 index 9243df7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture.png deleted file mode 100644 index 35abe7a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture16.png deleted file mode 100644 index ea87efb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture@2x.png deleted file mode 100644 index b13e4fa..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/texture@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D.png deleted file mode 100644 index 5ac7ae8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D16.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D16.png deleted file mode 100644 index ade7500..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D@2x.png b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D@2x.png deleted file mode 100644 index 94a5c10..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D@2x.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/propertyGroups.json b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/propertyGroups.json deleted file mode 100644 index 956b1fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/propertyGroups.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "Material": { - "Base": ["lightProbe", "cullMode", "depthDrawMode"] - }, - "DefaultMaterial": { - "Base": ["lighting", "blendMode", "vertexColorsEnabled", "pointSize", "lineWidth"], - "Diffuse": ["diffuseColor", "diffuseMap"], - "Emissive": ["emissiveFactor.x", "emissiveFactor.y", "emissiveFactor.z", "emissiveMap"], - "Specular": ["specularTint", "specularAmount", "specularMap", "specularModel", "specularReflectionMap", "indexOfRefraction", "fresnelPower", "specularRoughness", "roughnessMap", "roughnessChannel"], - "Opacity": ["opacity", "opacityMap", "opacityChannel"], - "Bump / Normal": ["bumpAmount", "bumpMap", "normalMap"], - "Translucency": ["translucentFalloff", "diffuseLightWrap", "translucencyMap", "translucencyChannel"] - }, - "PrincipledMaterial": { - "Base": ["alphaMode", "alphaCutoff", "blendMode", "lighting", "pointSize", "lineWidth", "indexOfRefraction"], - "Base Color": ["baseColor", "baseColorMap"], - "Metalness": ["metalness", "metalnessMap", "metalnessChannel"], - "Attenuation": ["attenuationColor", "attenuationDistance"], - "Normal": ["normalMap", "normalStrength"], - "Occlusion": ["occlusionAmount", "occlusionMap", "occlusionChannel"], - "Opacity": ["opacity", "opacityMap", "opacityChannel"], - "Roughness": ["roughness", "roughnessMap", "roughnessChannel"], - "Height": ["heightMap", "heightChannel", "heightAmount", "minHeightMapSamples", "maxHeightMapSamples"], - "Clearcoat": ["clearcoatAmount", "clearcoatMap", "clearcoatChannel", "clearcoatRoughnessAmount", "clearcoatRoughnessMap", "clearcoatRoughnessChannel", "clearcoatNormalMap"], - "Transmission": ["transmissionFactor", "transmissionMap", "transmissionChannel"], - "Specular": ["specularAmount", "specularMap", "specularReflectionMap", "specularTint"], - "Thickness": ["thicknessFactor", "thicknessMap", "thicknessChannel"], - "Emissive": ["emissiveMap", "emissiveFactor.x", "emissiveFactor.y", "emissiveFactor.z"] - }, - "SpecularGlossyMaterial": { - "Base": ["alphaMode", "alphaCutoff", "blendMode", "lighting", "pointSize", "lineWidth"], - "Albedo": ["albedoColor", "albedoMap"], - "Specular": ["specularColor", "specularMap"], - "Glossiness": ["glossiness", "glossinessMap", "glossinessChannel"], - "Attenuation": ["attenuationColor", "attenuationDistance"], - "Normal": ["normalMap", "normalStrength"], - "Occlusion": ["occlusionAmount", "occlusionMap", "occlusionChannel"], - "Opacity": ["opacity", "opacityMap", "opacityChannel"], - "Height": ["heightMap", "heightChannel", "heightAmount", "minHeightMapSamples", "maxHeightMapSamples"], - "Clearcoat": ["clearcoatAmount", "clearcoatMap", "clearcoatChannel", "clearcoatRoughnessAmount", "clearcoatRoughnessMap", "clearcoatRoughnessChannel", "clearcoatNormalMap"], - "Transmission": ["transmissionFactor", "transmissionMap", "transmissionChannel"], - "Thickness": ["thicknessFactor", "thicknessMap", "thicknessChannel"], - "Emissive": ["emissiveMap", "emissiveFactor.x", "emissiveFactor.y", "emissiveFactor.z"] - }, - "CustomMaterial": { - "Base": ["shadingMode", "vertexShader", "fragmentShader", "sourceBlend", "destinationBlend", "alwaysDirty", "lineWidth"] - }, - "Model": { - "Base": ["source", "geometry", "materials", "castsShadows", "receivesShadows", "castsReflections", "receivesReflections", "pickable", "depthBias", "levelOfDetailBias"], - "Instancing": ["instancing", "instanceRoot"], - "Animation": ["skeleton", "morphTargets"] - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/quick3d.metainfo b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/quick3d.metainfo deleted file mode 100644 index 3516352..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/quick3d.metainfo +++ /dev/null @@ -1,861 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick3D.PerspectiveCamera" - icon: "images/camera16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Perspective Camera" - category: "Cameras" - libraryIcon: "images/camera.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "z"; type: "int"; value: 500; } - toolTip: qsTr("A camera that uses perspective projection.") - } - } - Type { - name: "QtQuick3D.OrthographicCamera" - icon: "images/camera16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Orthographic Camera" - category: "Cameras" - libraryIcon: "images/camera.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "z"; type: "int"; value: 500; } - toolTip: qsTr("A parallel projection Camera, in which an object's perceived scale is unaffected by its distance from the Camera.") - } - } - Type { - name: "QtQuick3D.FrustumCamera" - icon: "images/camera16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Frustum Camera" - category: "Cameras" - libraryIcon: "images/camera.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "z"; type: "int"; value: 500; } - toolTip: qsTr("A perspective camera with a custom frustum.") - } - } - Type { - name: "QtQuick3D.CustomCamera" - icon: "images/camera16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Custom Camera" - category: "Cameras" - libraryIcon: "images/camera.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "z"; type: "int"; value: 500; } - toolTip: qsTr("A camera with a custom projection matrix.") - } - } - Type { - name: "QtQuick3D.CustomMaterial" - icon: "images/custommaterial16.png" - - Hints { - visibleInNavigator: false - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Custom Material" - category: "Materials" - libraryIcon: "images/custommaterial.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "fragmentShader"; type: "QUrl"; value: "custom_material_default_shader.frag"; } - ExtraFile { source: "source/custom_material_default_shader.frag" } - toolTip: qsTr("A material with customizable vertex and fragment shaders.") - } - } - Type { - name: "QtQuick3D.DefaultMaterial" - icon: "images/material16.png" - - Hints { - visibleInNavigator: false - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Default Material" - category: "Materials" - libraryIcon: "images/material.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "diffuseColor"; type: "color"; value: "#4aee45"; } - toolTip: qsTr("A material with a specular/glossiness properties.") - } - } - Type { - name: "QtQuick3D.PrincipledMaterial" - icon: "images/material16.png" - - Hints { - visibleInNavigator: false - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Principled Material" - category: "Materials" - libraryIcon: "images/material.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "baseColor"; type: "color"; value: "#4aee45"; } - toolTip: qsTr("A material with a PBR metal/roughness properties.") - } - } - Type { - name: "QtQuick3D.SpecularGlossyMaterial" - icon: "images/material16.png" - - Hints { - visibleInNavigator: false - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Specular Glossy" - category: "Materials" - libraryIcon: "images/material.png" - version: "6.4" - requiredImport: "QtQuick3D" - Property { name: "albedoColor"; type: "color"; value: "#4aee45"; } - Property { name: "specularColor"; type: "color"; value: "#000000"; } - toolTip: qsTr("A material with a PBR specular/glossiness properties.") - } - } - Type { - name: "QtQuick3D.Texture" - icon: "images/texture16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeContainer: false - } - - ItemLibraryEntry { - name: "Texture" - category: "Textures" - libraryIcon: "images/texture.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Defines a texture for 3D objects.") - } - } - Type { - name: "QtQuick3D.CubeMapTexture" - icon: "images/cubemaptexture16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeContainer: false - } - - ItemLibraryEntry { - name: "Cube Map Texture" - category: "Textures" - libraryIcon: "images/cubemaptexture.png" - version: "6.4" - requiredImport: "QtQuick3D" - toolTip: qsTr("Defines a cube map texture for 3D objects.") - } - } - Type { - name: "QtQuick3D.DirectionalLight" - icon: "images/lightdirectional16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Directional Light" - category: "Lights" - libraryIcon: "images/lightdirectional.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A light similar to sunlight. It emits light in one direction from an infinitely far away source.") - } - } - Type { - name: "QtQuick3D.PointLight" - icon: "images/lightpoint16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Point Light" - category: "Lights" - libraryIcon: "images/lightpoint.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A light similar to a light bulb. It emits light equally in all directions from a central source.") - } - } - Type { - name: "QtQuick3D.SpotLight" - icon: "images/lightspot16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Spotlight" - category: "Lights" - libraryIcon: "images/lightspot.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A spotlight emits light in one direction in a cone shape.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Model" - category: "Components" - libraryIcon: "images/group.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Allows you to load 3D mesh data.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Cube" - category: "Primitives" - libraryIcon: "images/cube.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "source"; type: "QUrl"; value: "#Cube"; } - toolTip: qsTr("A cube model.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Sphere" - category: "Primitives" - libraryIcon: "images/sphere.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "source"; type: "QUrl"; value: "#Sphere"; } - toolTip: qsTr("A sphere model.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Cylinder" - category: "Primitives" - libraryIcon: "images/cylinder.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "source"; type: "QUrl"; value: "#Cylinder"; } - toolTip: qsTr("A cylinder model.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Plane" - category: "Primitives" - libraryIcon: "images/plane.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "source"; type: "QUrl"; value: "#Rectangle"; } - toolTip: qsTr("A plane model.") - } - } - Type { - name: "QtQuick3D.Model" - icon: "images/model16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - visibleNonDefaultProperties: "materials" - } - - ItemLibraryEntry { - name: "Cone" - category: "Primitives" - libraryIcon: "images/cone.png" - version: "6.0" - requiredImport: "QtQuick3D" - Property { name: "source"; type: "QUrl"; value: "#Cone"; } - toolTip: qsTr("A cone model.") - } - } - Type { - name: "QtQuick3D.Node" - icon: "images/group16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Node" - category: "Components" - libraryIcon: "images/group.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A container to keep several QtQuick3D components or scenes together.") - } - } - Type { - name: "QtQuick3D.SceneEnvironment" - icon: "images/scene16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Scene Environment" - category: "Components" - libraryIcon: "images/scene.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Configures the render settings for a scene.") - } - } - Type { - name: "QtQuick3D.View3D" - icon: "images/view3D16.png" - - ItemLibraryEntry { - name: "View3D" - category: "Items" - libraryIcon: "images/view3D.png" - version: "6.0" - requiredImport: "QtQuick3D" - QmlSource { source: "./source/view3D_template.qml" } - toolTip: qsTr("A 2D surface where a 3D scene can be rendered.") - } - } - Type { - name: "QtQuick3D.Shader" - icon: "images/shaderutil16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Shader" - category: "Custom Shader Utils" - libraryIcon: "images/shaderutil.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A container for keeping the vertex or fragment shader codes to be used by post-processing effect.") - } - } - Type { - name: "QtQuick3D.TextureInput" - icon: "images/shaderutil16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Texture Input" - category: "Custom Shader Utils" - libraryIcon: "images/shaderutil.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Specifies a texture that gets exposed to the shader.") - } - } - Type { - name: "QtQuick3D.Pass" - icon: "images/shaderutil16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Pass" - category: "Custom Shader Utils" - libraryIcon: "images/shaderutil.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Holds a set of actions combining a list of executable render commands, an output buffer, and a list of shaders to use for rendering effects.") - } - } - Type { - name: "QtQuick3D.BufferInput" - icon: "images/shadercommand16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Buffer Input" - category: "Custom Shader Utils" - libraryIcon: "images/shadercommand.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A command that gets added to the list of commands in the Pass of an Effect when executed.") - } - } - Type { - name: "QtQuick3D.Buffer" - icon: "images/shaderutil16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Buffer" - category: "Custom Shader Utils" - libraryIcon: "images/shaderutil.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Creates or references a color buffer to be used for a pass of an Effect.") - } - } - Type { - name: "QtQuick3D.SetUniformValue" - icon: "images/shadercommand16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Set Uniform Value" - category: "Custom Shader Utils" - libraryIcon: "images/shadercommand.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A value that would be set when a single pass actions takes place.") - } - } - Type { - name: "QtQuick3D.Effect" - icon: "images/effect16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Effect" - category: "Components" - libraryIcon: "images/effect.png" - version: "6.0" - requiredImport: "QtQuick3D" - QmlSource { source: "./source/effect_template.qml" } - ExtraFile { source: "./source/effect_default_shader.frag" } - toolTip: qsTr("A method to allow the user to implement their post-processing effects on entire View3D.") - } - } - Type { - name: "QtQuick3D.Repeater3D" - icon: "images/repeater3d16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "3D Repeater" - category: "Components" - libraryIcon: "images/repeater3d.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Dynamically creates several copies of the same 3D object.") - } - } - Type { - name: "QtQuick3D.Loader3D" - icon: "images/loader3d16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Loader3D" - category: "Components" - libraryIcon: "images/loader3d.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Allows you to load 3D components dynamically.") - } - } - Type { - name: "QtQuick3D.Skeleton" - icon: "images/skeleton16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Skeleton" - category: "Components" - libraryIcon: "images/skeleton.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Defines a skeletal animation hierarchy.") - } - } - Type { - name: "QtQuick3D.MorphTarget" - icon: "images/morphtarget16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Morph Target" - category: "Components" - libraryIcon: "images/morphtarget.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("Defines the properties of a morph target.") - } - } - Type { - name: "QtQuick3D.InstanceListEntry" - icon: "images/instancelistentry16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Instance List Entry" - category: "Components" - libraryIcon: "images/instancelistentry.png" - version: "6.2" - requiredImport: "QtQuick3D" - toolTip: qsTr("One instance in an Instance List. The instance includes a set of property specifications.") - } - } - Type { - name: "QtQuick3D.InstanceList" - icon: "images/instancelist16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Instance List" - category: "Components" - libraryIcon: "images/instancelist.png" - version: "6.2" - requiredImport: "QtQuick3D" - toolTip: qsTr("Enables 3D model instancing, a lightweight 3D object replication method.") - } - } - Type { - name: "QtQuick3D.FileInstancing" - icon: "images/fileinstancing16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "File Instancing" - category: "Components" - libraryIcon: "images/fileinstancing.png" - version: "6.2" - requiredImport: "QtQuick3D" - toolTip: qsTr("A method that allows reading instance tables from XML or Qt-specific binary files.") - } - } - Type { - name: "QtQuick3D.Joint" - icon: "images/joint16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - } - - ItemLibraryEntry { - name: "Joint" - category: "Components" - libraryIcon: "images/joint.png" - version: "6.0" - requiredImport: "QtQuick3D" - toolTip: qsTr("A transformable node that connects different parts in a skeletal animation.") - } - } - Type { - name: "QtQuick3D.ReflectionProbe" - icon: "images/reflectionProbe16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: true - } - - ItemLibraryEntry { - name: "Reflection Probe" - category: "Components" - libraryIcon: "images/reflectionProbe.png" - version: "6.3" - requiredImport: "QtQuick3D" - toolTip: qsTr("Reflects the current scene to the objects.") - } - } - Type { - name: "QtQuick3D.Fog" - icon: "images/fog16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Fog" - category: "Components" - libraryIcon: "images/fog.png" - version: "6.5" - requiredImport: "QtQuick3D" - } - } - Type { - name: "QtQuick3D.DebugSettings" - icon: "images/debugsettings16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Debug Settings" - category: "Components" - libraryIcon: "images/debugsettings.png" - version: "6.5" - requiredImport: "QtQuick3D" - } - } - - Type { - name: "QtQuick3D.Lightmapper" - icon: "images/lightmapper16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - // Split the name to avoid ellipsis in UI - name: "Light Mapper" - category: "Components" - libraryIcon: "images/lightmapper.png" - version: "6.5" - requiredImport: "QtQuick3D" - } - } - - Type { - name: "QtQuick3D.Skin" - icon: "images/skin16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Skin" - category: "Components" - libraryIcon: "images/skin.png" - version: "6.5" - requiredImport: "QtQuick3D" - } - } - - Type { - name: "QtQuick3D.ResourceLoader" - icon: "images/resourceLoader16.png" - - Hints { - visibleInNavigator: true - canBeDroppedInNavigator: true - canBeDroppedInFormEditor: false - canBeDroppedInView3D: false - } - - ItemLibraryEntry { - name: "Resource Loader" - category: "Components" - libraryIcon: "images/resourceLoader.png" - version: "6.2" - requiredImport: "QtQuick3D" - toolTip: qsTr("Pre-load resources for 3D scene. It makes sure that large resources are available before rendering a frame.") - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/custom_material_default_shader.frag b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/custom_material_default_shader.frag deleted file mode 100644 index 96c69b4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/custom_material_default_shader.frag +++ /dev/null @@ -1,3 +0,0 @@ -void MAIN() { - BASE_COLOR = vec4(0.29, 0.93, 0.27, 1.0); -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_default_shader.frag b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_default_shader.frag deleted file mode 100644 index 67441ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_default_shader.frag +++ /dev/null @@ -1,4 +0,0 @@ -void MAIN() { - vec4 mainCol = texture(INPUT, INPUT_UV); - FRAGCOLOR = vec4(1.0 - mainCol.r, 1.0 - mainCol.g, 1.0 - mainCol.b, mainCol.a); -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_template.qml deleted file mode 100644 index de76705..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_template.qml +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -Effect { - passes: renderPass - - Pass { - id: renderPass - shaders: [fragShader] - } - - Shader { - id: fragShader - stage: Shader.Fragment - shader: "effect_default_shader.frag" - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/view3D_template.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/view3D_template.qml deleted file mode 100644 index 4d9797c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/designer/source/view3D_template.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2019 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -import QtQuick -import QtQuick3D - -View3D { - width: 400 - height: 400 - environment: sceneEnvironment - - SceneEnvironment { - id: sceneEnvironment - antialiasingMode: SceneEnvironment.MSAA - antialiasingQuality: SceneEnvironment.High - } - - Node { - id: scene - - DirectionalLight { - id: directionalLight - } - - PerspectiveCamera { - id: sceneCamera - z: 350 - } - - Model { - id: cubeModel - eulerRotation.x: 30 - eulerRotation.y: 45 - - source: "#Cube" - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/libqquick3dplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/libqquick3dplugin.so deleted file mode 100755 index a4f0cc7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/libqquick3dplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/qmldir deleted file mode 100644 index 95ed6a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtQuick3D/qmldir +++ /dev/null @@ -1,9 +0,0 @@ -module QtQuick3D -linktarget Qt6::qquick3dplugin -plugin qquick3dplugin -classname QQuick3DPlugin -designersupported -typeinfo Quick3D.qmltypes -depends QtQuick auto -prefer :/qt-project.org/imports/QtQuick3D/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/libdeclarative_remoteobjectsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/libdeclarative_remoteobjectsplugin.so deleted file mode 100755 index fb7dc75..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/libdeclarative_remoteobjectsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/plugins.qmltypes deleted file mode 100644 index 8b3660e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/plugins.qmltypes +++ /dev/null @@ -1,171 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qremoteobjectsqml_p.h" - name: "QRemoteObjectAbstractPersistedStore" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtRemoteObjects/PersistedStore 5.12", - "QtRemoteObjects/PersistedStore 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1292, 1536] - } - Component { - file: "qremoteobjectnode.h" - name: "QRemoteObjectHostBase" - accessSemantics: "reference" - prototype: "QRemoteObjectNode" - Enum { - name: "AllowedSchemas" - values: ["BuiltInSchemasOnly", "AllowExternalRegistration"] - } - Method { - name: "enableRemoting" - type: "bool" - Parameter { name: "object"; type: "QObject"; isPointer: true } - Parameter { name: "name"; type: "QString" } - } - Method { - name: "enableRemoting" - type: "bool" - isCloned: true - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "disableRemoting" - type: "bool" - Parameter { name: "remoteObject"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qremoteobjectsqml_p.h" - name: "QRemoteObjectHost" - accessSemantics: "reference" - prototype: "QRemoteObjectHostBase" - exports: ["QtRemoteObjects/Host 5.15", "QtRemoteObjects/Host 6.0"] - exportMetaObjectRevisions: [1295, 1536] - Property { - name: "hostUrl" - type: "QUrl" - read: "hostUrl" - write: "setHostUrl" - notify: "hostUrlChanged" - index: 0 - } - Signal { name: "hostUrlChanged" } - } - Component { - file: "private/qremoteobjectsqml_p.h" - name: "QRemoteObjectNode" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtRemoteObjects/Node 5.12", "QtRemoteObjects/Node 6.0"] - exportMetaObjectRevisions: [1292, 1536] - Enum { - name: "ErrorCode" - values: [ - "NoError", - "RegistryNotAcquired", - "RegistryAlreadyHosted", - "NodeIsNoServer", - "ServerAlreadyCreated", - "UnintendedRegistryHosting", - "OperationNotValidOnClientNode", - "SourceNotRegistered", - "MissingObjectName", - "HostUrlInvalid", - "ProtocolMismatch", - "ListenFailed", - "SocketAccessError" - ] - } - Property { - name: "registryUrl" - type: "QUrl" - read: "registryUrl" - write: "setRegistryUrl" - index: 0 - } - Property { - name: "persistedStore" - type: "QRemoteObjectAbstractPersistedStore" - isPointer: true - read: "persistedStore" - write: "setPersistedStore" - index: 1 - } - Property { - name: "heartbeatInterval" - type: "int" - read: "heartbeatInterval" - write: "setHeartbeatInterval" - notify: "heartbeatIntervalChanged" - index: 2 - } - Signal { - name: "remoteObjectAdded" - Parameter { type: "QRemoteObjectSourceLocation" } - } - Signal { - name: "remoteObjectRemoved" - Parameter { type: "QRemoteObjectSourceLocation" } - } - Signal { - name: "error" - Parameter { name: "errorCode"; type: "QRemoteObjectNode::ErrorCode" } - } - Signal { - name: "heartbeatIntervalChanged" - Parameter { name: "heartbeatInterval"; type: "int" } - } - Method { - name: "connectToNode" - type: "bool" - Parameter { name: "address"; type: "QUrl" } - } - } - Component { - file: "private/qremoteobjectsqml_p.h" - name: "QRemoteObjectSettingsStore" - accessSemantics: "reference" - prototype: "QRemoteObjectAbstractPersistedStore" - exports: [ - "QtRemoteObjects/SettingsStore 5.12", - "QtRemoteObjects/SettingsStore 6.0" - ] - exportMetaObjectRevisions: [1292, 1536] - } - Component { - file: "private/qremoteobjectsqml_p.h" - name: "QtQmlRemoteObjects" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtRemoteObjects/QtRemoteObjects 5.14", - "QtRemoteObjects/QtRemoteObjects 6.0" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1294, 1536] - Method { - name: "watch" - type: "QJSValue" - Parameter { name: "reply"; type: "QRemoteObjectPendingCall" } - Parameter { name: "timeout"; type: "int" } - } - Method { - name: "watch" - type: "QJSValue" - isCloned: true - Parameter { name: "reply"; type: "QRemoteObjectPendingCall" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/qmldir deleted file mode 100644 index 3f52d62..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtRemoteObjects/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtRemoteObjects -linktarget Qt6::declarative_remoteobjects -optional plugin declarative_remoteobjectsplugin -classname QtRemoteObjectsPlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtRemoteObjects/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/libsensorsquickplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/libsensorsquickplugin.so deleted file mode 100755 index 09f3553..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/libsensorsquickplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/plugins.qmltypes deleted file mode 100644 index f056e72..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/plugins.qmltypes +++ /dev/null @@ -1,1096 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/qmlaccelerometer_p.h" - name: "QmlAccelerometer" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/Accelerometer 5.0", - "QtSensors/Accelerometer 6.0", - "QtSensors/Accelerometer 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Enum { - name: "AccelerationMode" - values: ["Combined", "Gravity", "User"] - } - Property { - name: "accelerationMode" - revision: 65281 - type: "AccelerationMode" - read: "accelerationMode" - write: "setAccelerationMode" - notify: "accelerationModeChanged" - index: 0 - } - Signal { - name: "accelerationModeChanged" - revision: 65281 - Parameter { name: "accelerationMode"; type: "AccelerationMode" } - } - } - Component { - file: "private/qmlaccelerometer_p.h" - name: "QmlAccelerometerReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/AccelerometerReading 5.0", - "QtSensors/AccelerometerReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "x" - type: "double" - bindable: "bindableX" - read: "x" - notify: "xChanged" - index: 0 - isReadonly: true - } - Property { - name: "y" - type: "double" - bindable: "bindableY" - read: "y" - notify: "yChanged" - index: 1 - isReadonly: true - } - Property { - name: "z" - type: "double" - bindable: "bindableZ" - read: "z" - notify: "zChanged" - index: 2 - isReadonly: true - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - } - Component { - file: "private/qmlambientlightsensor_p.h" - name: "QmlAmbientLightSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/AmbientLightSensor 5.0", - "QtSensors/AmbientLightSensor 6.0", - "QtSensors/AmbientLightSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlambientlightsensor_p.h" - name: "QmlAmbientLightSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/AmbientLightReading 5.0", - "QtSensors/AmbientLightReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "lightLevel" - type: "QAmbientLightReading::LightLevel" - bindable: "bindableLightLevel" - read: "lightLevel" - notify: "lightLevelChanged" - index: 0 - isReadonly: true - } - Signal { name: "lightLevelChanged" } - } - Component { - file: "private/qmlambienttemperaturesensor_p.h" - name: "QmlAmbientTemperatureReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/AmbientTemperatureReading 5.1", - "QtSensors/AmbientTemperatureReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1281, 1536] - Property { - name: "temperature" - type: "double" - bindable: "bindableTemperature" - read: "temperature" - notify: "temperatureChanged" - index: 0 - isReadonly: true - } - Signal { name: "temperatureChanged" } - } - Component { - file: "private/qmlambienttemperaturesensor_p.h" - name: "QmlAmbientTemperatureSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/AmbientTemperatureSensor 5.1", - "QtSensors/AmbientTemperatureSensor 6.0", - "QtSensors/AmbientTemperatureSensor 6.7" - ] - exportMetaObjectRevisions: [1281, 1536, 1543] - } - Component { - file: "private/qmlcompass_p.h" - name: "QmlCompass" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/Compass 5.0", - "QtSensors/Compass 6.0", - "QtSensors/Compass 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlcompass_p.h" - name: "QmlCompassReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/CompassReading 5.0", - "QtSensors/CompassReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "azimuth" - type: "double" - bindable: "bindableAzimuth" - read: "azimuth" - notify: "azimuthChanged" - index: 0 - isReadonly: true - } - Property { - name: "calibrationLevel" - type: "double" - bindable: "bindableCalibrationLevel" - read: "calibrationLevel" - notify: "calibrationLevelChanged" - index: 1 - isReadonly: true - } - Signal { name: "azimuthChanged" } - Signal { name: "calibrationLevelChanged" } - } - Component { - file: "private/qmlgyroscope_p.h" - name: "QmlGyroscope" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/Gyroscope 5.0", - "QtSensors/Gyroscope 6.0", - "QtSensors/Gyroscope 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlgyroscope_p.h" - name: "QmlGyroscopeReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/GyroscopeReading 5.0", - "QtSensors/GyroscopeReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "x" - type: "double" - bindable: "bindableX" - read: "x" - notify: "xChanged" - index: 0 - isReadonly: true - } - Property { - name: "y" - type: "double" - bindable: "bindableY" - read: "y" - notify: "yChanged" - index: 1 - isReadonly: true - } - Property { - name: "z" - type: "double" - bindable: "bindableZ" - read: "z" - notify: "zChanged" - index: 2 - isReadonly: true - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - } - Component { - file: "private/qmlhumiditysensor_p.h" - name: "QmlHumidityReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/HumidityReading 5.9", - "QtSensors/HumidityReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1289, 1536] - Property { - name: "relativeHumidity" - type: "double" - bindable: "bindableRelativeHumidity" - read: "relativeHumidity" - notify: "relativeHumidityChanged" - index: 0 - isReadonly: true - } - Property { - name: "absoluteHumidity" - type: "double" - bindable: "bindableAbsoluteHumidity" - read: "absoluteHumidity" - notify: "absoluteHumidityChanged" - index: 1 - isReadonly: true - } - Signal { name: "relativeHumidityChanged" } - Signal { name: "absoluteHumidityChanged" } - } - Component { - file: "private/qmlhumiditysensor_p.h" - name: "QmlHumiditySensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/HumiditySensor 5.9", - "QtSensors/HumiditySensor 6.0", - "QtSensors/HumiditySensor 6.7" - ] - exportMetaObjectRevisions: [1289, 1536, 1543] - } - Component { - file: "private/qmlirproximitysensor_p.h" - name: "QmlIRProximitySensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/IRProximitySensor 5.0", - "QtSensors/IRProximitySensor 6.0", - "QtSensors/IRProximitySensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlirproximitysensor_p.h" - name: "QmlIRProximitySensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/IRProximityReading 5.0", - "QtSensors/IRProximityReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "reflectance" - type: "double" - bindable: "bindableReflectance" - read: "reflectance" - notify: "reflectanceChanged" - index: 0 - isReadonly: true - } - Signal { name: "reflectanceChanged" } - } - Component { - file: "private/qmllidsensor_p.h" - name: "QmlLidReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: ["QtSensors/LidReading 5.9", "QtSensors/LidReading 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1289, 1536] - Property { - name: "backLidClosed" - type: "bool" - bindable: "bindableBackLidClosed" - read: "backLidClosed" - notify: "backLidChanged" - index: 0 - isReadonly: true - } - Property { - name: "frontLidClosed" - type: "bool" - bindable: "bindableFrontLidClosed" - read: "frontLidClosed" - notify: "frontLidChanged" - index: 1 - isReadonly: true - } - Signal { - name: "backLidChanged" - Parameter { name: "closed"; type: "bool" } - } - Signal { - name: "frontLidChanged" - type: "bool" - Parameter { name: "closed"; type: "bool" } - } - } - Component { - file: "private/qmllidsensor_p.h" - name: "QmlLidSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/LidSensor 5.9", - "QtSensors/LidSensor 6.0", - "QtSensors/LidSensor 6.7" - ] - exportMetaObjectRevisions: [1289, 1536, 1543] - } - Component { - file: "private/qmllightsensor_p.h" - name: "QmlLightSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/LightSensor 5.0", - "QtSensors/LightSensor 6.0", - "QtSensors/LightSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Property { - name: "fieldOfView" - type: "double" - read: "fieldOfView" - notify: "fieldOfViewChanged" - index: 0 - isReadonly: true - } - Signal { - name: "fieldOfViewChanged" - Parameter { name: "fieldOfView"; type: "double" } - } - } - Component { - file: "private/qmllightsensor_p.h" - name: "QmlLightSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: ["QtSensors/LightReading 5.0", "QtSensors/LightReading 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "illuminance" - type: "double" - bindable: "bindableIlluminance" - read: "illuminance" - notify: "illuminanceChanged" - index: 0 - isReadonly: true - } - Signal { name: "illuminanceChanged" } - } - Component { - file: "private/qmlmagnetometer_p.h" - name: "QmlMagnetometer" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/Magnetometer 5.0", - "QtSensors/Magnetometer 6.0", - "QtSensors/Magnetometer 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Property { - name: "returnGeoValues" - type: "bool" - read: "returnGeoValues" - write: "setReturnGeoValues" - notify: "returnGeoValuesChanged" - index: 0 - } - Signal { - name: "returnGeoValuesChanged" - Parameter { name: "returnGeoValues"; type: "bool" } - } - } - Component { - file: "private/qmlmagnetometer_p.h" - name: "QmlMagnetometerReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/MagnetometerReading 5.0", - "QtSensors/MagnetometerReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "x" - type: "double" - bindable: "bindableX" - read: "x" - notify: "xChanged" - index: 0 - isReadonly: true - } - Property { - name: "y" - type: "double" - bindable: "bindableY" - read: "y" - notify: "yChanged" - index: 1 - isReadonly: true - } - Property { - name: "z" - type: "double" - bindable: "bindableZ" - read: "z" - notify: "zChanged" - index: 2 - isReadonly: true - } - Property { - name: "calibrationLevel" - type: "double" - bindable: "bindableCalibrationLevel" - read: "calibrationLevel" - notify: "calibrationLevelChanged" - index: 3 - isReadonly: true - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - Signal { name: "calibrationLevelChanged" } - } - Component { - file: "private/qmlorientationsensor_p.h" - name: "QmlOrientationSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/OrientationSensor 5.0", - "QtSensors/OrientationSensor 6.0", - "QtSensors/OrientationSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlorientationsensor_p.h" - name: "QmlOrientationSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/OrientationReading 5.0", - "QtSensors/OrientationReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "orientation" - type: "QOrientationReading::Orientation" - bindable: "bindableOrientation" - read: "orientation" - notify: "orientationChanged" - index: 0 - isReadonly: true - } - Signal { name: "orientationChanged" } - } - Component { - file: "private/qmlpressuresensor_p.h" - name: "QmlPressureReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/PressureReading 5.1", - "QtSensors/PressureReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1281, 1536] - Property { - name: "pressure" - type: "double" - bindable: "bindablePressure" - read: "pressure" - notify: "pressureChanged" - index: 0 - isReadonly: true - } - Property { - name: "temperature" - revision: 65281 - type: "double" - bindable: "bindableTemperature" - read: "temperature" - notify: "temperatureChanged" - index: 1 - isReadonly: true - } - Signal { name: "pressureChanged" } - Signal { name: "temperatureChanged"; revision: 65281 } - } - Component { - file: "private/qmlpressuresensor_p.h" - name: "QmlPressureSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/PressureSensor 5.1", - "QtSensors/PressureSensor 6.0", - "QtSensors/PressureSensor 6.7" - ] - exportMetaObjectRevisions: [1281, 1536, 1543] - } - Component { - file: "private/qmlproximitysensor_p.h" - name: "QmlProximitySensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/ProximitySensor 5.0", - "QtSensors/ProximitySensor 6.0", - "QtSensors/ProximitySensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - } - Component { - file: "private/qmlproximitysensor_p.h" - name: "QmlProximitySensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/ProximityReading 5.0", - "QtSensors/ProximityReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "near" - type: "bool" - bindable: "bindableNear" - read: "near" - notify: "nearChanged" - index: 0 - isReadonly: true - } - Signal { name: "nearChanged" } - } - Component { - file: "private/qmlrotationsensor_p.h" - name: "QmlRotationSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/RotationSensor 5.0", - "QtSensors/RotationSensor 6.0", - "QtSensors/RotationSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Property { - name: "hasZ" - type: "bool" - read: "hasZ" - notify: "hasZChanged" - index: 0 - isReadonly: true - } - Signal { - name: "hasZChanged" - Parameter { name: "hasZ"; type: "bool" } - } - } - Component { - file: "private/qmlrotationsensor_p.h" - name: "QmlRotationSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: [ - "QtSensors/RotationReading 5.0", - "QtSensors/RotationReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "x" - type: "double" - bindable: "bindableX" - read: "x" - notify: "xChanged" - index: 0 - isReadonly: true - } - Property { - name: "y" - type: "double" - bindable: "bindableY" - read: "y" - notify: "yChanged" - index: 1 - isReadonly: true - } - Property { - name: "z" - type: "double" - bindable: "bindableZ" - read: "z" - notify: "zChanged" - index: 2 - isReadonly: true - } - Signal { name: "xChanged" } - Signal { name: "yChanged" } - Signal { name: "zChanged" } - } - Component { - file: "private/qmlsensor_p.h" - name: "QmlSensor" - accessSemantics: "reference" - prototype: "QObject" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtSensors/Sensor 5.0", - "QtSensors/Sensor 6.0", - "QtSensors/Sensor 6.7" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536, 1543] - Enum { - name: "Feature" - type: "int" - values: [ - "Buffering", - "AlwaysOn", - "GeoValues", - "FieldOfView", - "AccelerationMode", - "SkipDuplicates", - "AxesOrientation", - "PressureSensorTemperature" - ] - } - Enum { - name: "AxesOrientationMode" - values: [ - "FixedOrientation", - "AutomaticOrientation", - "UserOrientation" - ] - } - Property { - name: "identifier" - type: "QByteArray" - read: "identifier" - write: "setIdentifier" - notify: "identifierChanged" - index: 0 - } - Property { - name: "type" - type: "QByteArray" - read: "type" - index: 1 - isReadonly: true - isConstant: true - } - Property { - name: "connectedToBackend" - type: "bool" - read: "isConnectedToBackend" - notify: "connectedToBackendChanged" - index: 2 - isReadonly: true - } - Property { - name: "availableDataRates" - type: "QmlSensorRange" - isList: true - read: "availableDataRates" - notify: "availableDataRatesChanged" - index: 3 - isReadonly: true - } - Property { - name: "dataRate" - type: "int" - read: "dataRate" - write: "setDataRate" - notify: "dataRateChanged" - index: 4 - } - Property { - name: "reading" - type: "QmlSensorReading" - isPointer: true - bindable: "bindableReading" - read: "reading" - notify: "readingChanged" - index: 5 - isReadonly: true - } - Property { - name: "busy" - type: "bool" - read: "isBusy" - notify: "busyChanged" - index: 6 - isReadonly: true - } - Property { - name: "active" - type: "bool" - read: "isActive" - write: "setActive" - notify: "activeChanged" - index: 7 - } - Property { - name: "outputRanges" - type: "QmlSensorOutputRange" - isList: true - read: "outputRanges" - notify: "outputRangesChanged" - index: 8 - isReadonly: true - } - Property { - name: "outputRange" - type: "int" - read: "outputRange" - write: "setOutputRange" - notify: "outputRangeChanged" - index: 9 - } - Property { - name: "description" - type: "QString" - read: "description" - notify: "descriptionChanged" - index: 10 - isReadonly: true - } - Property { - name: "error" - type: "int" - read: "error" - notify: "errorChanged" - index: 11 - isReadonly: true - } - Property { - name: "alwaysOn" - type: "bool" - read: "isAlwaysOn" - write: "setAlwaysOn" - notify: "alwaysOnChanged" - index: 12 - } - Property { - name: "skipDuplicates" - revision: 65281 - type: "bool" - read: "skipDuplicates" - write: "setSkipDuplicates" - notify: "skipDuplicatesChanged" - index: 13 - } - Property { - name: "axesOrientationMode" - revision: 65281 - type: "AxesOrientationMode" - read: "axesOrientationMode" - write: "setAxesOrientationMode" - notify: "axesOrientationModeChanged" - index: 14 - } - Property { - name: "currentOrientation" - revision: 65281 - type: "int" - read: "currentOrientation" - notify: "currentOrientationChanged" - index: 15 - isReadonly: true - } - Property { - name: "userOrientation" - revision: 65281 - type: "int" - read: "userOrientation" - write: "setUserOrientation" - notify: "userOrientationChanged" - index: 16 - } - Property { - name: "maxBufferSize" - revision: 65281 - type: "int" - read: "maxBufferSize" - notify: "maxBufferSizeChanged" - index: 17 - isReadonly: true - } - Property { - name: "efficientBufferSize" - revision: 65281 - type: "int" - read: "efficientBufferSize" - notify: "efficientBufferSizeChanged" - index: 18 - isReadonly: true - } - Property { - name: "bufferSize" - revision: 65281 - type: "int" - read: "bufferSize" - write: "setBufferSize" - notify: "bufferSizeChanged" - index: 19 - } - Signal { name: "identifierChanged" } - Signal { name: "connectedToBackendChanged" } - Signal { name: "availableDataRatesChanged" } - Signal { name: "dataRateChanged" } - Signal { name: "readingChanged" } - Signal { name: "activeChanged" } - Signal { name: "outputRangesChanged" } - Signal { name: "outputRangeChanged" } - Signal { name: "descriptionChanged" } - Signal { name: "errorChanged" } - Signal { name: "alwaysOnChanged" } - Signal { name: "busyChanged" } - Signal { - name: "skipDuplicatesChanged" - revision: 65281 - Parameter { name: "skipDuplicates"; type: "bool" } - } - Signal { - name: "axesOrientationModeChanged" - revision: 65281 - Parameter { name: "axesOrientationMode"; type: "AxesOrientationMode" } - } - Signal { - name: "currentOrientationChanged" - revision: 65281 - Parameter { name: "currentOrientation"; type: "int" } - } - Signal { - name: "userOrientationChanged" - revision: 65281 - Parameter { name: "userOrientation"; type: "int" } - } - Signal { - name: "maxBufferSizeChanged" - revision: 65281 - Parameter { name: "maxBufferSize"; type: "int" } - } - Signal { - name: "efficientBufferSizeChanged" - revision: 65281 - Parameter { name: "efficientBufferSize"; type: "int" } - } - Signal { - name: "bufferSizeChanged" - revision: 65281 - Parameter { name: "bufferSize"; type: "int" } - } - Method { name: "start"; type: "bool" } - Method { name: "stop" } - Method { name: "updateReading" } - Method { - name: "isFeatureSupported" - revision: 1543 - type: "bool" - Parameter { name: "feature"; type: "Feature" } - } - } - Component { - file: "private/qmlsensorglobal_p.h" - name: "QmlSensorGlobal" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtSensors/QmlSensors 5.0", "QtSensors/QmlSensors 6.0"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [1280, 1536] - Signal { name: "availableSensorsChanged" } - Method { name: "sensorTypes"; type: "QStringList" } - Method { - name: "sensorsForType" - type: "QStringList" - Parameter { name: "type"; type: "QString" } - } - Method { - name: "defaultSensorForType" - type: "QString" - Parameter { name: "type"; type: "QString" } - } - } - Component { - file: "private/qmlsensorrange_p.h" - name: "QmlSensorOutputRange" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtSensors/OutputRange 5.0", "QtSensors/OutputRange 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { name: "minimum"; type: "double"; read: "minimum"; index: 0; isReadonly: true } - Property { name: "maximum"; type: "double"; read: "maximum"; index: 1; isReadonly: true } - Property { name: "accuracy"; type: "double"; read: "accuracy"; index: 2; isReadonly: true } - } - Component { - file: "private/qmlsensorrange_p.h" - name: "QmlSensorRange" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtSensors/Range 5.0", "QtSensors/Range 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { name: "minimum"; type: "int"; read: "minimum"; index: 0; isReadonly: true } - Property { name: "maximum"; type: "int"; read: "maximum"; index: 1; isReadonly: true } - } - Component { - file: "private/qmlsensor_p.h" - name: "QmlSensorReading" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtSensors/SensorReading 5.0", - "QtSensors/SensorReading 6.0" - ] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "timestamp" - type: "qulonglong" - bindable: "bindableTimestamp" - read: "timestamp" - notify: "timestampChanged" - index: 0 - isReadonly: true - } - Signal { name: "timestampChanged" } - } - Component { - file: "private/qmltapsensor_p.h" - name: "QmlTapSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/TapSensor 5.0", - "QtSensors/TapSensor 6.0", - "QtSensors/TapSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Property { - name: "returnDoubleTapEvents" - type: "bool" - read: "returnDoubleTapEvents" - write: "setReturnDoubleTapEvents" - notify: "returnDoubleTapEventsChanged" - index: 0 - } - Signal { - name: "returnDoubleTapEventsChanged" - Parameter { name: "returnDoubleTapEvents"; type: "bool" } - } - } - Component { - file: "private/qmltapsensor_p.h" - name: "QmlTapSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: ["QtSensors/TapReading 5.0", "QtSensors/TapReading 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "tapDirection" - type: "QTapReading::TapDirection" - bindable: "bindableTapDirection" - read: "tapDirection" - notify: "tapDirectionChanged" - index: 0 - isReadonly: true - } - Property { - name: "doubleTap" - type: "bool" - bindable: "bindableDoubleTap" - read: "isDoubleTap" - notify: "isDoubleTapChanged" - index: 1 - isReadonly: true - } - Signal { name: "tapDirectionChanged" } - Signal { name: "isDoubleTapChanged" } - } - Component { - file: "private/qmltiltsensor_p.h" - name: "QmlTiltSensor" - accessSemantics: "reference" - prototype: "QmlSensor" - exports: [ - "QtSensors/TiltSensor 5.0", - "QtSensors/TiltSensor 6.0", - "QtSensors/TiltSensor 6.7" - ] - exportMetaObjectRevisions: [1280, 1536, 1543] - Method { name: "calibrate" } - } - Component { - file: "private/qmltiltsensor_p.h" - name: "QmlTiltSensorReading" - accessSemantics: "reference" - prototype: "QmlSensorReading" - exports: ["QtSensors/TiltReading 5.0", "QtSensors/TiltReading 6.0"] - isCreatable: false - exportMetaObjectRevisions: [1280, 1536] - Property { - name: "yRotation" - type: "double" - bindable: "bindableYRotation" - read: "yRotation" - notify: "yRotationChanged" - index: 0 - isReadonly: true - } - Property { - name: "xRotation" - type: "double" - bindable: "bindableXRotation" - read: "xRotation" - notify: "xRotationChanged" - index: 1 - isReadonly: true - } - Signal { name: "yRotationChanged" } - Signal { name: "xRotationChanged" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/qmldir deleted file mode 100644 index 2284715..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtSensors/qmldir +++ /dev/null @@ -1,8 +0,0 @@ -module QtSensors -linktarget Qt6::SensorsQuickplugin -optional plugin sensorsquickplugin -classname QtSensorsPlugin -typeinfo plugins.qmltypes -depends QtQml -prefer :/qt-project.org/imports/QtSensors/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/SignalSpy.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/SignalSpy.qml deleted file mode 100644 index ea77a17..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/SignalSpy.qml +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick 2.0 -import QtTest 1.1 - -/*! - \qmltype SignalSpy - \inqmlmodule QtTest - \brief Enables introspection of signal emission. - \since 4.8 - \ingroup qtquicktest - - In the following example, a SignalSpy is installed to watch the - "clicked" signal on a user-defined Button type. When the signal - is emitted, the \l count property on the spy will be increased. - - \code - Button { - id: button - SignalSpy { - id: spy - target: button - signalName: "clicked" - } - TestCase { - name: "ButtonClick" - function test_click() { - compare(spy.count, 0) - button.clicked(); - compare(spy.count, 1) - } - } - } - \endcode - - The above style of test is suitable for signals that are emitted - synchronously. For asynchronous signals, the wait() method can be - used to block the test until the signal occurs (or a timeout expires). - - \sa {QtTest::TestCase}{TestCase}, {Qt Quick Test} -*/ - -Item { - id: spy - visible: false - - Component.onDestruction: { - // We are potentially destroyed before the target object, - // and since only the sender (target) being destroyed destroys a connection - // in QML, and not the receiver (us/"spy"), we need to manually disconnect. - // When QTBUG-118166 is implemented, we can remove this. - let signalFunc = target ? qttest_signalFunc(target, signalName) : null - if (signalFunc) - signalFunc.disconnect(spy.qtest_activated) - } - - TestUtil { - id: util - } - // Public API. - /*! - \qmlproperty object SignalSpy::target - - This property defines the target object that will be used to - listen for emissions of the \l signalName signal. - - \sa signalName, count - */ - property var target: null - /*! - \qmlproperty string SignalSpy::signalName - - This property defines the name of the signal on \l target to - listen for. - - \sa target, count - */ - property string signalName: "" - /*! - \qmlproperty int SignalSpy::count - - This property defines the number of times that \l signalName has - been emitted from \l target since the last call to clear(). - - \sa target, signalName, clear() - \readonly - */ - readonly property alias count: spy.qtest_count - /*! - \qmlproperty bool SignalSpy::valid - - This property defines the current signal connection status. It will be true when the \l signalName of the \l target is connected successfully, otherwise it will be false. - - \sa count, target, signalName, clear() - \readonly - */ - readonly property alias valid:spy.qtest_valid - /*! - \qmlproperty list SignalSpy::signalArguments - - This property holds a list of emitted signal arguments. Each emission of the signal will append one item to the list, containing the arguments of the signal. - When connecting to a new \l target or new \l signalName or calling the \l clear() method, the \l signalArguments will be reset to empty. - - \sa signalName, clear() - \readonly - */ - readonly property alias signalArguments:spy.qtest_signalArguments - - /*! - \qmlmethod SignalSpy::clear() - - Clears \l count to 0, resets \l valid to false and clears the \l signalArguments to empty. - - \sa count, wait() - */ - function clear() { - qtest_count = 0 - qtest_expectedCount = 0 - qtest_signalArguments = [] - } - - /*! - \qmlmethod SignalSpy::wait(timeout = 5000) - - Waits for the signal \l signalName on \l target to be emitted, - for up to \a timeout milliseconds. The test case will fail if - the signal is not emitted. - - \code - SignalSpy { - id: spy - target: button - signalName: "clicked" - } - - function test_async_click() { - ... - // do something that will cause clicked() to be emitted - ... - spy.wait() - compare(spy.count, 1) - } - \endcode - - There are two possible scenarios: the signal has already been - emitted when wait() is called, or the signal has not yet been - emitted. The wait() function handles the first scenario by immediately - returning if the signal has already occurred. - - The clear() method can be used to discard information about signals - that have already occurred to synchronize wait() with future signal - emissions. - - \sa clear(), TestCase::tryCompare() - */ - function wait(timeout) { - if (timeout === undefined) - timeout = 5000 - var expected = ++qtest_expectedCount - var i = 0 - while (i < timeout && qtest_count < expected) { - qtest_results.wait(50) - i += 50 - } - var success = (qtest_count >= expected) - if (!qtest_results.verify(success, "wait for signal " + signalName, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::fail") - } - - // Internal implementation detail follows. - - TestResult { id: qtest_results } - - onTargetChanged: { - qtest_update() - } - onSignalNameChanged: { - qtest_update() - } - - /*! \internal */ - property var qtest_prevTarget: null - /*! \internal */ - property string qtest_prevSignalName: "" - /*! \internal */ - property int qtest_expectedCount: 0 - /*! \internal */ - property var qtest_signalArguments:[] - /*! \internal */ - property int qtest_count: 0 - /*! \internal */ - property bool qtest_valid:false - /*! \internal */ - property bool qtest_reentrancy_guard: false - - /*! \internal */ - function qtest_update() { - if (qtest_reentrancy_guard) - return; - qtest_reentrancy_guard = true; - - if (qtest_prevTarget != null) { - let prevFunc = qttest_signalFunc(qtest_prevTarget, qtest_prevSignalName) - if (prevFunc) - prevFunc.disconnect(spy.qtest_activated) - qtest_prevTarget = null - qtest_prevSignalName = "" - } - if (target != null && signalName != "") { - // Look for the signal name in the object - let func = qttest_signalFunc(target, signalName) - if (func) { - qtest_prevTarget = target - qtest_prevSignalName = signalName - func.connect(spy.qtest_activated) - spy.qtest_valid = true - spy.qtest_signalArguments = [] - } else { - spy.qtest_valid = false - console.log("Signal '" + signalName + "' not found") - } - } else { - spy.qtest_valid = false - } - - qtest_reentrancy_guard = false; - } - - /*! \internal */ - function qtest_activated() { - ++qtest_count - spy.qtest_signalArguments[spy.qtest_signalArguments.length] = arguments - } - - /*! \internal */ - function qtest_signalHandlerName(sn) { - return util.signalHandlerName(sn) - } - - /*! \internal */ - function qttest_signalFunc(_target, _signalName) { - let signalFunc = _target[_signalName] - if (typeof signalFunc !== "function") { - // If it is not a function, try looking for signal handler - // i.e. (onSignal) this is needed for cases where there is a property - // and a signal with the same name, e.g. Mousearea.pressed - signalFunc = _target[qtest_signalHandlerName(_signalName)] - } - return signalFunc - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestCase.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestCase.qml deleted file mode 100644 index f2da892..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestCase.qml +++ /dev/null @@ -1,2201 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -import QtQuick 2.0 -import QtQuick.Window 2.0 // used for qtest_verifyItem -import QtTest 1.2 -import "testlogger.js" as TestLogger - -/*! - \qmltype TestCase - \inqmlmodule QtTest - \brief Represents a unit test case. - \since 4.8 - \ingroup qtquicktest - - \section1 Introduction to QML Test Cases - - Test cases are written as JavaScript functions within a TestCase - type: - - \code - import QtQuick 2.0 - import QtTest 1.2 - - TestCase { - name: "MathTests" - - function test_math() { - compare(2 + 2, 4, "2 + 2 = 4") - } - - function test_fail() { - compare(2 + 2, 5, "2 + 2 = 5") - } - } - \endcode - - Functions whose names start with "test_" are treated as test cases - to be executed. The \l name property is used to prefix the functions - in the output: - - \code - ********* Start testing of MathTests ********* - Config: Using QTest library 4.7.2, Qt 4.7.2 - PASS : MathTests::initTestCase() - FAIL! : MathTests::test_fail() 2 + 2 = 5 - Actual (): 4 - Expected (): 5 - Loc: [/home/.../tst_math.qml(12)] - PASS : MathTests::test_math() - PASS : MathTests::cleanupTestCase() - Totals: 3 passed, 1 failed, 0 skipped - ********* Finished testing of MathTests ********* - \endcode - - Because of the way JavaScript properties work, the order in which the - test functions are found is unpredictable. To assist with predictability, - the test framework will sort the functions on ascending order of name. - This can help when there are two tests that must be run in order. - - Multiple TestCase types can be supplied. The test program will exit - once they have all completed. If a test case doesn't need to run - (because a precondition has failed), then \l optional can be set to true. - - \section1 Data-driven Tests - - Table data can be provided to a test using a function name that ends - with "_data". Alternatively, the \c init_data() function can be used - to provide default test data for all test functions in a TestCase type: - - - \code - import QtQuick 2.0 - import QtTest 1.2 - - TestCase { - name: "DataTests" - - function init_data() { - return [ - {tag:"init_data_1", a:1, b:2, answer: 3}, - {tag:"init_data_2", a:2, b:4, answer: 6} - ]; - } - - function test_table_data() { - return [ - {tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 }, - {tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 }, - ] - } - - function test_table(data) { - //data comes from test_table_data - compare(data.a + data.b, data.answer) - } - - function test__default_table(data) { - //data comes from init_data - compare(data.a + data.b, data.answer) - } - } - \endcode - - The test framework will iterate over all of the rows in the table - and pass each row to the test function. As shown, the columns can be - extracted for use in the test. The \c tag column is special - it is - printed by the test framework when a row fails, to help the reader - identify which case failed amongst a set of otherwise passing tests. - - \section1 Benchmarks - - Functions whose names start with "benchmark_" will be run multiple - times with the Qt benchmark framework, with an average timing value - reported for the runs. This is equivalent to using the \c{QBENCHMARK} - macro in the C++ version of QTestLib. - - \code - TestCase { - id: top - name: "CreateBenchmark" - - function benchmark_create_component() { - let component = Qt.createComponent("item.qml") - let obj = component.createObject(top) - obj.destroy() - component.destroy() - } - } - - RESULT : CreateBenchmark::benchmark_create_component: - 0.23 msecs per iteration (total: 60, iterations: 256) - PASS : CreateBenchmark::benchmark_create_component() - \endcode - - To get the effect of the \c{QBENCHMARK_ONCE} macro, prefix the test - function name with "benchmark_once_". - - \section1 Simulating Keyboard and Mouse Events - - The keyPress(), keyRelease(), and keyClick() methods can be used - to simulate keyboard events within unit tests. The events are - delivered to the currently focused QML item. You can pass either - a Qt.Key enum value or a latin1 char (string of length one) - - \code - Rectangle { - width: 50; height: 50 - focus: true - - TestCase { - name: "KeyClick" - when: windowShown - - function test_key_click() { - keyClick(Qt.Key_Left) - keyClick("a") - ... - } - } - } - \endcode - - The mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence() - and mouseMove() methods can be used to simulate mouse events in a - similar fashion. - - If your test creates other windows, it's possible that those windows - become active, stealing the focus from the TestCase's window. To ensure - that the TestCase's window is active, use the following code: - - \code - testCase.Window.window.requestActivate() - tryCompare(testCase.Window.window, "active", true) - \endcode - - \b{Note:} keyboard and mouse events can only be delivered once the - main window has been shown. Attempts to deliver events before then - will fail. Use the \l when and windowShown properties to track - when the main window has been shown. - - \section1 Managing Dynamically Created Test Objects - - A typical pattern with QML tests is to - \l {Dynamic QML Object Creation from JavaScript}{dynamically create} - an item and then destroy it at the end of the test function: - - \code - TestCase { - id: testCase - name: "MyTest" - when: windowShown - - function test_click() { - let item = Qt.createQmlObject("import QtQuick 2.0; Item {}", testCase); - verify(item); - - // Test item... - - item.destroy(); - } - } - \endcode - - The problem with this pattern is that any failures in the test function - will cause the call to \c item.destroy() to be skipped, leaving the item - hanging around in the scene until the test case has finished. This can - result in interference with future tests; for example, by blocking input - events or producing unrelated debug output that makes it difficult to - follow the code's execution. - - By calling \l createTemporaryQmlObject() instead, the object is guaranteed - to be destroyed at the end of the test function: - - \code - TestCase { - id: testCase - name: "MyTest" - when: windowShown - - function test_click() { - let item = createTemporaryQmlObject("import QtQuick 2.0; Item {}", testCase); - verify(item); - - // Test item... - - // Don't need to worry about destroying "item" here. - } - } - \endcode - - For objects that are created via the \l {Component::}{createObject()} function - of \l Component, the \l createTemporaryObject() function can be used. - - \sa {QtTest::SignalSpy}{SignalSpy}, {Qt Quick Test} - - \section1 Separating Tests from Application Logic - - In most cases, you would want to separate your tests from the application - logic by splitting them into different projects and linking them. - - For example, you could have the following project structure: - - \badcode - . - | — CMakeLists.txt - | - main.qml - | — src - | — main.cpp - | — MyModule - | — MyButton.qml - | — CMakeLists.txt - | — tests - | — tst_testqml.qml - | — main.cpp - | — setup.cpp - | — setup.h - \endcode - - Now, to test \c MyModule/MyButton.qml, create a library for - \c MyModule in \c MyModule/CMakeLists.txt and link it to your - test project, \c tests/UnitQMLTests/CMakeLists.txt: - - \if defined(onlinedocs) - \tab {build-qt-app}{tab-cmake-add-library}{MyModule/CMakeLists.txt}{checked} - \tab {build-qt-app}{tab-cmake-link-against-library}{tests/CMakeLists.txt}{} - \tab {build-qt-app}{tab-tests_main}{tests/main.cpp}{} - \tab {build-qt-app}{tab-tests-setup-cpp}{tests/setup.cpp}{} - \tab - {build-qt-app}{tab-tests-setup-h}{tests/setup.h}{} - \tab {build-qt-app}{tab-project-cmake}{CMakeLists.txt}{} - \tabcontent {tab-cmake-add-library} - \else - \section2 Add Library - \endif - \dots - \snippet testApp/MyModule/CMakeLists.txt add library - \dots - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-cmake-link-against-library} - \else - \section2 Link Against Library - \endif - \dots - \snippet testApp/tests/CMakeLists.txt link against library - \dots - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-tests_main} - \else - \section2 Test main.cpp - \endif - \snippet testApp/tests/main.cpp main - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-tests-setup-cpp} - \else - \section2 Test Setup C++ - \endif - \snippet testApp/tests/setup.cpp setup - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-tests-setup-h} - \else - \section2 Test Setup Header - \endif - \snippet testApp/tests/setup.h setup - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-project-cmake} - \else - \section2 Project CMakeLists - \endif - \dots - \snippet testApp/CMakeLists.txt project-cmake - \dots - \if defined(onlinedocs) - \endtabcontent - \endif - - - Then, in \c tests/tst_testqml.qml, you can import - \c MyModule/MyButton.qml: - - \if defined(onlinedocs) - \tab {test-qml}{tab-qml-import}{tests/tst_testqml.qml}{checked} - \tab {test-qml}{tab-qml-my-button}{MyModule/MyButton.qml}{} - \tabcontent {tab-qml-import} - \else - \section2 Import QML - \endif - \snippet testApp/tests/tst_testqml.qml import - \if defined(onlinedocs) - \endtabcontent - \tabcontent {tab-qml-my-button} - \else - \section2 Define QML Button - \endif - \snippet testApp/MyModule/MyButton.qml define - \if defined(onlinedocs) - \endtabcontent - \endif -*/ - - -Item { - id: testCase - visible: false - TestUtil { - id:util - } - - /*! - \qmlproperty string TestCase::name - - This property defines the name of the test case for result reporting. - The default value is an empty string. - - \code - TestCase { - name: "ButtonTests" - ... - } - \endcode - */ - property string name - - /*! - \qmlproperty bool TestCase::when - - This property should be set to true when the application wants - the test cases to run. The default value is true. In the following - example, a test is run when the user presses the mouse button: - - \code - Rectangle { - id: foo - width: 640; height: 480 - color: "cyan" - - MouseArea { - id: area - anchors.fill: parent - } - - property bool bar: true - - TestCase { - name: "ItemTests" - when: area.pressed - id: test1 - - function test_bar() { - verify(bar) - } - } - } - \endcode - - The test application will exit once all \l TestCase types - have been triggered and have run. The \l optional property can - be used to exclude a \l TestCase type. - - \sa optional, completed - */ - property bool when: true - - /*! - \qmlproperty bool TestCase::completed - - This property will be set to true once the test case has completed - execution. Test cases are only executed once. The initial value - is false. - - \sa running, when - */ - property bool completed: false - - /*! - \qmlproperty bool TestCase::running - - This property will be set to true while the test case is running. - The initial value is false, and the value will become false again - once the test case completes. - - \sa completed, when - */ - property bool running: false - - /*! - \qmlproperty bool TestCase::optional - - Multiple \l TestCase types can be supplied in a test application. - The application will exit once they have all completed. If a test case - does not need to run (because a precondition has failed), then this - property can be set to true. The default value is false. - - \code - TestCase { - when: false - optional: true - function test_not_run() { - verify(false) - } - } - \endcode - - \sa when, completed - */ - property bool optional: false - - /*! - \qmlproperty bool TestCase::windowShown - - This property will be set to true after the QML viewing window has - been displayed. Normally test cases run as soon as the test application - is loaded and before a window is displayed. If the test case involves - visual types and behaviors, then it may need to be delayed until - after the window is shown. - - \code - Button { - id: button - onClicked: text = "Clicked" - TestCase { - name: "ClickTest" - when: windowShown - function test_click() { - button.clicked(); - compare(button.text, "Clicked"); - } - } - } - \endcode - */ - property bool windowShown: QTestRootObject.windowShown - - // Internal private state. Identifiers prefixed with qtest are reserved. - /*! \internal */ - property bool qtest_prevWhen: true - /*! \internal */ - property int qtest_testId: -1 - /*! \internal */ - property bool qtest_componentCompleted : false - /*! \internal */ - property var qtest_testCaseResult - /*! \internal */ - property var qtest_results: qtest_results_normal - /*! \internal */ - TestResult { id: qtest_results_normal } - /*! \internal */ - property var qtest_events: qtest_events_normal - TestEvent { id: qtest_events_normal } - /*! \internal */ - property var qtest_temporaryObjects: [] - - /*! - \qmlmethod TestCase::fail(message = "") - - Fails the current test case, with the optional \a message. - Similar to \c{QFAIL(message)} in C++. - */ - function fail(msg) { - if (msg === undefined) - msg = ""; - qtest_results.fail(msg, util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - /*! \internal */ - function qtest_fail(msg, frame) { - if (msg === undefined) - msg = ""; - qtest_results.fail(msg, util.callerFile(frame), util.callerLine(frame)) - throw new Error("QtQuickTest::fail") - } - - /*! - \qmlmethod TestCase::verify(condition, message = "") - - Fails the current test case if \a condition is false, and - displays the optional \a message. Similar to \c{QVERIFY(condition)} - or \c{QVERIFY2(condition, message)} in C++. - */ - function verify(cond, msg, ...args) { - if (args.length > 0) - qtest_fail("More than two arguments given to verify(). Did you mean tryVerify() or tryCompare()?", 1) - - if (msg === undefined) - msg = ""; - if (!qtest_results.verify(cond, msg, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::fail") - } - - /*! - \since 5.8 - \qmlmethod TestCase::tryVerify(function, timeout = 5000, message = "") - - Fails the current test case if \a function does not evaluate to - \c true before the specified \a timeout (in milliseconds) has elapsed. - The function is evaluated multiple times until the timeout is - reached. An optional \a message is displayed upon failure. - - This function is intended for testing applications where a condition - changes based on asynchronous events. Use verify() for testing - synchronous condition changes, and tryCompare() for testing - asynchronous property changes. - - For example, in the code below, it's not possible to use tryCompare(), - because the \c currentItem property might be \c null for a short period - of time: - - \code - tryCompare(listView.currentItem, "text", "Hello"); - \endcode - - Instead, we can use tryVerify() to first check that \c currentItem - isn't \c null, and then use a regular compare afterwards: - - \code - tryVerify(function(){ return listView.currentItem }) - compare(listView.currentItem.text, "Hello") - \endcode - - \sa verify(), compare(), tryCompare(), SignalSpy::wait() - */ - function tryVerify(expressionFunction, timeout, msg) { - if (!expressionFunction || !(expressionFunction instanceof Function)) { - qtest_results.fail("First argument must be a function", util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - if (timeout && typeof(timeout) !== "number") { - qtest_results.fail("timeout argument must be a number", util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - if (msg && typeof(msg) !== "string") { - qtest_results.fail("message argument must be a string", util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - if (!timeout) - timeout = 5000 - - if (msg === undefined) - msg = "function returned false" - - if (!expressionFunction()) - wait(0) - - let i = 0 - while (i < timeout && !expressionFunction()) { - wait(50) - i += 50 - } - - if (!qtest_results.verify(expressionFunction(), msg, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::fail") - } - - /*! - \since 5.13 - \qmlmethod bool TestCase::isPolishScheduled(object itemOrWindow) - - If \a itemOrWindow is an \l Item, this function returns \c true if - \l {QQuickItem::}{updatePolish()} has not been called on it since the - last call to \l {QQuickItem::}{polish()}, otherwise returns \c false. - - Since Qt 6.5, if \a itemOrWindow is a \l Window, this function returns - \c true if \l {QQuickItem::}{updatePolish()} has not been called on any - item it manages since the last call to \l {QQuickItem::}{polish()} on - those items, otherwise returns \c false. - - When assigning values to properties in QML, any layouting the item - must do as a result of the assignment might not take effect immediately, - but can instead be postponed until the item is polished. For these cases, - you can use this function to ensure that items have been polished - before the execution of the test continues. For example: - - \code - verify(isPolishScheduled(item)) - verify(waitForItemPolished(item)) - \endcode - - Without the call to \c isPolishScheduled() above, the - call to \c waitForItemPolished() might see that no polish - was scheduled and therefore pass instantly, assuming that - the item had already been polished. This function - makes it obvious why an item wasn't polished and allows tests to - fail early under such circumstances. - - \sa waitForPolish(), QQuickItem::polish(), QQuickItem::updatePolish() - */ - function isPolishScheduled(itemOrWindow) { - if (!itemOrWindow || typeof itemOrWindow !== "object") { - qtest_results.fail("Argument must be a valid Item or Window; actual type is " + typeof itemOrWindow, - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - return qtest_results.isPolishScheduled(itemOrWindow) - } - - /*! - \since 5.13 - \deprecated [6.5] Use \l waitForPolish() instead. - \qmlmethod bool waitForItemPolished(object item, int timeout = 5000) - - Waits for \a timeout milliseconds or until - \l {QQuickItem::}{updatePolish()} has been called on \a item. - - Returns \c true if \c updatePolish() was called on \a item within - \a timeout milliseconds, otherwise returns \c false. - - \sa isPolishScheduled(), QQuickItem::polish(), QQuickItem::updatePolish() - */ - function waitForItemPolished(item, timeout) { - return waitForPolish(item, timeout) - } - - /*! - \since 6.5 - \qmlmethod bool waitForPolish(object windowOrItem, int timeout = 5000) - - If \a windowOrItem is an Item, this functions waits for \a timeout - milliseconds or until \c isPolishScheduled(windowOrItem) returns \c false. - Returns \c true if \c isPolishScheduled(windowOrItem) returns \c false within - \a timeout milliseconds, otherwise returns \c false. - - If \c windowOrItem is a Window, this functions waits for \c timeout - milliseconds or until \c isPolishScheduled() returns \c false for - all items managed by the window. Returns \c true if - \c isPolishScheduled() returns \c false for all items within - \a timeout milliseconds, otherwise returns \c false. - - \sa isPolishScheduled(), QQuickItem::polish(), QQuickItem::updatePolish() - */ - function waitForPolish(windowOrItem, timeout) { - if (!windowOrItem || typeof windowOrItem !== "object") { - qtest_results.fail("First argument must be a valid Item or Window; actual type is " + typeof windowOrItem, - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - if (timeout !== undefined && typeof(timeout) !== "number") { - qtest_results.fail("Second argument must be a number; actual type is " + typeof timeout, - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - - if (!timeout) - timeout = 5000 - - return qtest_results.waitForPolish(windowOrItem, timeout) - } - - /*! - \since 5.9 - \qmlmethod object TestCase::createTemporaryQmlObject(string qml, object parent, string filePath) - - This function dynamically creates a QML object from the given \a qml - string with the specified \a parent. The returned object will be - destroyed (if it was not already) after \l cleanup() has finished - executing, meaning that objects created with this function are - guaranteed to be destroyed after each test, regardless of whether or - not the tests fail. - - If there was an error while creating the object, \c null will be - returned. - - If \a filePath is specified, it will be used for error reporting for - the created object. - - This function calls - \l {QtQml::Qt::createQmlObject()}{Qt.createQmlObject()} internally. - - \sa {Managing Dynamically Created Test Objects} - */ - function createTemporaryQmlObject(qml, parent, filePath) { - if (typeof qml !== "string") { - qtest_results.fail("First argument must be a string of QML; actual type is " + typeof qml, - util.callerFile(), util.callerLine()); - throw new Error("QtQuickTest::fail"); - } - - if (!parent || typeof parent !== "object") { - qtest_results.fail("Second argument must be a valid parent object; actual type is " + typeof parent, - util.callerFile(), util.callerLine()); - throw new Error("QtQuickTest::fail"); - } - - if (filePath !== undefined && typeof filePath !== "string") { - qtest_results.fail("Third argument must be a file path string; actual type is " + typeof filePath, - util.callerFile(), util.callerLine()); - throw new Error("QtQuickTest::fail"); - } - - let object = Qt.createQmlObject(qml, parent, filePath); - qtest_temporaryObjects.push(object); - return object; - } - - /*! - \since 5.9 - \qmlmethod object TestCase::createTemporaryObject(Component component, object parent, object properties) - - This function dynamically creates a QML object from the given - \a component with the specified optional \a parent and \a properties. - The returned object will be destroyed (if it was not already) after - \l cleanup() has finished executing, meaning that objects created with - this function are guaranteed to be destroyed after each test, - regardless of whether or not the tests fail. - - If there was an error while creating the object, \c null will be - returned. - - This function calls - \l {QtQml::Component::createObject()}{component.createObject()} - internally. - - \sa {Managing Dynamically Created Test Objects} - */ - function createTemporaryObject(component, parent, properties) { - if (typeof component !== "object") { - qtest_results.fail("First argument must be a Component; actual type is " + typeof component, - util.callerFile(), util.callerLine()); - throw new Error("QtQuickTest::fail"); - } - - if (properties && typeof properties !== "object") { - qtest_results.fail("Third argument must be an object; actual type is " + typeof properties, - util.callerFile(), util.callerLine()); - throw new Error("QtQuickTest::fail"); - } - - if (parent === undefined) - parent = null - - let object = component.createObject(parent, properties ? properties : ({})); - qtest_temporaryObjects.push(object); - return object; - } - - /*! - \internal - - Destroys all temporary objects that still exist. - */ - function qtest_destroyTemporaryObjects() { - for (let i = 0; i < qtest_temporaryObjects.length; ++i) { - let temporaryObject = qtest_temporaryObjects[i]; - // ### the typeof check can be removed when QTBUG-57749 is fixed - if (temporaryObject && typeof temporaryObject.destroy === "function") - temporaryObject.destroy(); - } - qtest_temporaryObjects = []; - } - - /*! \internal */ - // Determine what is o. - // Discussions and reference: http://philrathe.com/articles/equiv - // Test suites: http://philrathe.com/tests/equiv - // Author: Philippe Rathé - function qtest_typeof(o) { - if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - } else if (o.constructor === String) { - return "string"; - - } else if (o.constructor === Boolean) { - return "boolean"; - - } else if (o.constructor === Number) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - if ("mapFromItem" in o && "mapToItem" in o) { - return "declarativeitem"; // @todo improve detection of declarative items - } else if ("x" in o && "y" in o && "z" in o) { - return "vector3d"; // Qt 3D vector - } - return "object"; - } else if (o instanceof Function) { - return "function"; - } else { - return undefined; - } - } - - /*! \internal */ - // Test for equality - // Large parts contain sources from QUnit or http://philrathe.com - // Discussions and reference: http://philrathe.com/articles/equiv - // Test suites: http://philrathe.com/tests/equiv - // Author: Philippe Rathé - function qtest_compareInternal(act, exp) { - let success = false; - if (act === exp) { - success = true; // catch the most you can - } else if (act === null || exp === null || typeof act === "undefined" || typeof exp === "undefined") { - success = false; // don't lose time with error prone cases - } else { - let typeExp = qtest_typeof(exp), typeAct = qtest_typeof(act) - if (typeExp !== typeAct) { - // allow object vs string comparison (e.g. for colors) - // else break on different types - if ((typeExp === "string" && (typeAct === "object") || typeAct === "declarativeitem") - || ((typeExp === "object" || typeExp === "declarativeitem") && typeAct === "string")) { - success = (act == exp) // @disable-check M126 - } - } else if (typeExp === "string" || typeExp === "boolean" || - typeExp === "null" || typeExp === "undefined") { - if (exp instanceof act.constructor || act instanceof exp.constructor) { - // to catch short annotaion VS 'new' annotation of act declaration - // e.g. let i = 1; - // let j = new Number(1); - success = (act == exp) // @disable-check M126 - } else { - success = (act === exp) - } - } else if (typeExp === "nan") { - success = isNaN(act); - } else if (typeExp === "number") { - // Use act fuzzy compare if the two values are floats - if (Math.abs(act - exp) <= 0.00001) { - success = true - } - } else if (typeExp === "array") { - success = qtest_compareInternalArrays(act, exp) - } else if (typeExp === "object") { - success = qtest_compareInternalObjects(act, exp) - } else if (typeExp === "declarativeitem") { - success = qtest_compareInternalObjects(act, exp) // @todo improve comparison of declarative items - } else if (typeExp === "vector3d") { - success = (Math.abs(act.x - exp.x) <= 0.00001 && - Math.abs(act.y - exp.y) <= 0.00001 && - Math.abs(act.z - exp.z) <= 0.00001) - } else if (typeExp === "date") { - success = (act.valueOf() === exp.valueOf()) - } else if (typeExp === "regexp") { - success = (act.source === exp.source && // the regex itself - act.global === exp.global && // and its modifers (gmi) ... - act.ignoreCase === exp.ignoreCase && - act.multiline === exp.multiline) - } - } - return success - } - - /*! \internal */ - function qtest_compareInternalObjects(act, exp) { - let i; - let eq = true; // unless we can proove it - let aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if (act.constructor !== exp.constructor) { - return false; - } - - for (i in act) { // be strict: don't ensures hasOwnProperty and go deep - aProperties.push(i); // collect act's properties - if (!qtest_compareInternal(act[i], exp[i])) { - eq = false; - break; - } - } - - for (i in exp) { - bProperties.push(i); // collect exp's properties - } - - if (aProperties.length === 0 && bProperties.length === 0) { // at least a special case for QUrl - return eq && (JSON.stringify(act) === JSON.stringify(exp)); - } - - // Ensures identical properties name - return eq && qtest_compareInternal(aProperties.sort(), bProperties.sort()); - - } - - /*! \internal */ - function qtest_compareInternalArrays(actual, expected) { - if (actual.length !== expected.length) { - return false - } - - for (let i = 0, len = actual.length; i < len; i++) { - if (!qtest_compareInternal(actual[i], expected[i])) { - return false - } - } - - return true - } - - /*! - \qmlmethod TestCase::compare(actual, expected, message = "") - - Fails the current test case if \a actual is not the same as - \a expected, and displays the optional \a message. Similar - to \c{QCOMPARE(actual, expected)} in C++. - - \sa tryCompare(), fuzzyCompare - */ - function compare(actual, expected, msg) { - let act = qtest_results.stringify(actual) - let exp = qtest_results.stringify(expected) - - let success = qtest_compareInternal(actual, expected) - if (msg === undefined) { - if (success) - msg = "COMPARE()" - else - msg = "Compared values are not the same" - } - if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine())) { - throw new Error("QtQuickTest::fail") - } - } - - /*! - \qmlmethod TestCase::fuzzyCompare(actual, expected, delta, message = "") - - Fails the current test case if the difference betwen \a actual and \a expected - is greater than \a delta, and displays the optional \a message. Similar - to \c{qFuzzyCompare(actual, expected)} in C++ but with a required \a delta value. - - This function can also be used for color comparisons if both the \a actual and - \a expected values can be converted into color values. If any of the differences - for RGBA channel values are greater than \a delta, the test fails. - - \sa tryCompare(), compare() - */ - function fuzzyCompare(actual, expected, delta, msg) { - if (delta === undefined) - qtest_fail("A delta value is required for fuzzyCompare", 2) - - let success = qtest_results.fuzzyCompare(actual, expected, delta) - if (msg === undefined) { - if (success) - msg = "FUZZYCOMPARE()" - else - msg = "Compared values are not the same with delta(" + delta + ")" - } - - if (!qtest_results.compare(success, msg, actual, expected, util.callerFile(), util.callerLine())) { - throw new Error("QtQuickTest::fail") - } - } - - /*! - \qmlmethod object TestCase::grabImage(item) - - Returns a snapshot image object of the given \a item. - - The returned image object has the following properties: - \list - \li width Returns the width of the underlying image (since 5.10) - \li height Returns the height of the underlying image (since 5.10) - \li size Returns the size of the underlying image (since 5.10) - \endlist - - Additionally, the returned image object has the following methods: - \list - \li \c {red(x, y)} Returns the red channel value of the pixel at \e x, \e y position - \li \c {green(x, y)} Returns the green channel value of the pixel at \e x, \e y position - \li \c {blue(x, y)} Returns the blue channel value of the pixel at \e x, \e y position - \li \c {alpha(x, y)} Returns the alpha channel value of the pixel at \e x, \e y position - \li \c {pixel(x, y)} Returns the color value of the pixel at \e x, \e y position - \li \c {equals(image)} Returns \c true if this image is identical to \e image - - see \l QImage::operator== (since 5.6) - - For example: - - \code - let image = grabImage(rect); - compare(image.red(10, 10), 255); - compare(image.pixel(20, 20), Qt.rgba(255, 0, 0, 255)); - - rect.width += 10; - let newImage = grabImage(rect); - verify(!newImage.equals(image)); - \endcode - - \li \c {save(path)} Saves the image to the given \e path. If the image cannot - be saved, an exception will be thrown. (since 5.10) - - This can be useful to perform postmortem analysis on failing tests, for - example: - - \code - let image = grabImage(rect); - try { - compare(image.width, 100); - } catch (ex) { - image.save("debug.png"); - throw ex; - } - \endcode - - \endlist - */ - function grabImage(item) { - return qtest_results.grabImage(item); - } - - /*! - \since 5.4 - \qmlmethod QtObject TestCase::findChild(parent, objectName) - - Returns the first child of \a parent with \a objectName, or \c null if - no such item exists. Both visual and non-visual children are searched - recursively, with visual children being searched first. - - \code - compare(findChild(item, "childObject"), expectedChildObject); - \endcode - */ - function findChild(parent, objectName) { - // First, search the visual item hierarchy. - let child = qtest_findVisualChild(parent, objectName); - if (child) - return child; - - // If it's not a visual child, it might be a QObject child. - return qtest_results.findChild(parent, objectName); - } - - /*! \internal */ - function qtest_findVisualChild(parent, objectName) { - if (!parent || parent.children === undefined) - return null; - - for (let i = 0; i < parent.children.length; ++i) { - // Is this direct child of ours the child we're after? - let child = parent.children[i]; - if (child.objectName === objectName) - return child; - } - - for (let i = 0; i < parent.children.length; ++i) { - // Try the direct child's children. - let child = qtest_findVisualChild(parent.children[i], objectName); - if (child) - return child; - } - return null; - } - - /*! - \qmlmethod TestCase::tryCompare(obj, property, expected, timeout = 5000, message = "") - - Fails the current test case if the specified \a property on \a obj - is not the same as \a expected, and displays the optional \a message. - The test will be retried multiple times until the - \a timeout (in milliseconds) is reached. - - This function is intended for testing applications where a property - changes value based on asynchronous events. Use compare() for testing - synchronous property changes. - - \code - tryCompare(img, "status", BorderImage.Ready) - compare(img.width, 120) - compare(img.height, 120) - compare(img.horizontalTileMode, BorderImage.Stretch) - compare(img.verticalTileMode, BorderImage.Stretch) - \endcode - - SignalSpy::wait() provides an alternative method to wait for a - signal to be emitted. - - \sa compare(), SignalSpy::wait() - */ - function tryCompare(obj, prop, ...args) { - if (typeof(prop) !== "string" && typeof(prop) !== "number") { - qtest_results.fail("A property name as string or index is required for tryCompare", - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - if (args.length === 0) { - qtest_results.fail("A value is required for tryCompare", - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - let [value, timeout, msg] = args - if (timeout !== undefined && typeof(timeout) !== "number") { - qtest_results.fail("timeout should be a number", - util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::fail") - } - if (!timeout) - timeout = 5000 - if (msg === undefined) - msg = "property " + prop - if (!qtest_compareInternal(obj[prop], value)) - wait(0) - let i = 0 - while (i < timeout && !qtest_compareInternal(obj[prop], value)) { - wait(50) - i += 50 - } - let actual = obj[prop] - let act = qtest_results.stringify(actual) - let exp = qtest_results.stringify(value) - let success = qtest_compareInternal(actual, value) - if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::fail") - } - - /*! - \qmlmethod TestCase::skip(message = "") - - Skips the current test case and prints the optional \a message. - If this is a data-driven test, then only the current row is skipped. - Similar to \c{QSKIP(message)} in C++. - */ - function skip(msg) { - if (msg === undefined) - msg = "" - qtest_results.skip(msg, util.callerFile(), util.callerLine()) - throw new Error("QtQuickTest::skip") - } - - /*! - \qmlmethod TestCase::expectFail(tag, message) - - In a data-driven test, marks the row associated with \a tag as - expected to fail. When the fail occurs, display the \a message, - abort the test, and mark the test as passing. Similar to - \c{QEXPECT_FAIL(tag, message, Abort)} in C++. - - If the test is not data-driven, then \a tag must be set to - an empty string. - - \sa expectFailContinue() - */ - function expectFail(tag, msg) { - if (tag === undefined) { - warn("tag argument missing from expectFail()") - tag = "" - } - if (msg === undefined) { - warn("message argument missing from expectFail()") - msg = "" - } - if (!qtest_results.expectFail(tag, msg, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::expectFail") - } - - /*! - \qmlmethod TestCase::expectFailContinue(tag, message) - - In a data-driven test, marks the row associated with \a tag as - expected to fail. When the fail occurs, display the \a message, - and then continue the test. Similar to - \c{QEXPECT_FAIL(tag, message, Continue)} in C++. - - If the test is not data-driven, then \a tag must be set to - an empty string. - - \sa expectFail() - */ - function expectFailContinue(tag, msg) { - if (tag === undefined) { - warn("tag argument missing from expectFailContinue()") - tag = "" - } - if (msg === undefined) { - warn("message argument missing from expectFailContinue()") - msg = "" - } - if (!qtest_results.expectFailContinue(tag, msg, util.callerFile(), util.callerLine())) - throw new Error("QtQuickTest::expectFail") - } - - /*! - \qmlmethod TestCase::warn(message) - - Prints \a message as a warning message. Similar to - \c{qWarning(message)} in C++. - - \sa ignoreWarning() - */ - function warn(msg) { - if (msg === undefined) - msg = "" - qtest_results.warn(msg, util.callerFile(), util.callerLine()); - } - - /*! - \qmlmethod TestCase::ignoreWarning(message) - - Marks \a message as an ignored warning message. When it occurs, - the warning will not be printed and the test passes. If the message - does not occur, then the test will fail. Similar to - \c{QTest::ignoreMessage(QtWarningMsg, message)} in C++. - - Since Qt 5.12, \a message can be either a string, or a regular - expression providing a pattern of messages to ignore. - - For example, the following snippet will ignore a string warning message: - \qml - ignoreWarning("Something sort of bad happened") - \endqml - - And the following snippet will ignore a regular expression matching a - number of possible warning messages: - \qml - ignoreWarning(new RegExp("[0-9]+ bad things happened")) - \endqml - - \note Despite being a JavaScript RegExp object, it will not be - interpreted as such; instead, the pattern will be passed to - \l QRegularExpression. - - \sa warn() - */ - function ignoreWarning(msg) { - if (msg === undefined) - msg = "" - qtest_results.ignoreWarning(msg) - } - - /*! - \qmlmethod TestCase::failOnWarning(message) - \since 6.3 - - Appends a test failure to the test log for each warning that matches - \a message. The test function will continue execution when a failure - is added. - - \a message can be either a string, or a regular expression providing a - pattern of messages. In the latter case, for each warning encountered, - the first pattern that matches will cause a failure, and the remaining - patterns will be ignored. - - All patterns are cleared at the end of each test function. - - For example, the following snippet will fail a test if a warning with - the text "Something bad happened" is produced: - \qml - failOnWarning("Something bad happened") - \endqml - - The following snippet will fail a test if any warning matching the - given pattern is encountered: - \qml - failOnWarning(/[0-9]+ bad things happened/) - \endqml - - To fail every test that triggers a given warning, pass a suitable regular - expression to this function in \l init(): - - \qml - function init() { - failOnWarning(/.?/) - } - \endqml - - \note Despite being a JavaScript RegExp object, it will not be - interpreted as such; instead, the pattern will be passed to \l - QRegularExpression. - - \note ignoreMessage() takes precedence over this function, so any - warnings that match a pattern given to both \c ignoreMessage() and \c - failOnWarning() will be ignored. - - \sa QTest::failOnWarning(), warn() - */ - function failOnWarning(msg) { - if (msg === undefined) - msg = "" - qtest_results.failOnWarning(msg) - } - - /*! - \qmlmethod TestCase::wait(ms) - - Waits for \a ms milliseconds while processing Qt events. - - \note This methods uses a precise timer to do the actual waiting. The - event you are waiting for may not. In particular, any animations as - well as the \l{Timer} QML type can use either precise or coarse - timers, depending on various factors. For a coarse timer you have - to expect a drift of around 5% in relation to the precise timer used - by TestCase::wait(). Qt cannot give hard guarantees on the drift, - though, because the operating system usually doesn't offer hard - guarantees on timers. - - \sa sleep(), waitForRendering(), Qt::TimerType - */ - function wait(ms) { - qtest_results.wait(ms) - } - - /*! - \qmlmethod TestCase::waitForRendering(item, timeout = 5000) - - Waits for \a timeout milliseconds or until the \a item is rendered by the renderer. - Returns true if \c item is rendered in \a timeout milliseconds, otherwise returns false. - The default \a timeout value is 5000. - - \sa sleep(), wait() - */ - function waitForRendering(item, timeout) { - if (timeout === undefined) - timeout = 5000 - if (!qtest_verifyItem(item, "waitForRendering")) - return - return qtest_results.waitForRendering(item, timeout) - } - - /*! - \qmlmethod TestCase::sleep(ms) - - Sleeps for \a ms milliseconds without processing Qt events. - - \sa wait(), waitForRendering() - */ - function sleep(ms) { - qtest_results.sleep(ms) - } - - /*! - \qmlmethod TestCase::keyPress(key, modifiers = Qt.NoModifier, delay = -1) - - Simulates pressing a \a key with optional \a modifiers on the currently - focused item. If \a delay is larger than 0, the test will wait for - \a delay milliseconds. - - The event will be sent to the TestCase window or, in case of multiple windows, - to the current active window. See \l QGuiApplication::focusWindow() for more details. - - \b{Note:} At some point you should release the key using keyRelease(). - - \sa keyRelease(), keyClick() - */ - function keyPress(key, modifiers, delay) { - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (typeof(key) === "string" && key.length === 1) { - if (!qtest_events.keyPressChar(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } else { - if (!qtest_events.keyPress(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } - } - - /*! - \qmlmethod TestCase::keyRelease(key, modifiers = Qt.NoModifier, delay = -1) - - Simulates releasing a \a key with optional \a modifiers on the currently - focused item. If \a delay is larger than 0, the test will wait for - \a delay milliseconds. - - The event will be sent to the TestCase window or, in case of multiple windows, - to the current active window. See \l QGuiApplication::focusWindow() for more details. - - \sa keyPress(), keyClick() - */ - function keyRelease(key, modifiers, delay) { - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (typeof(key) === "string" && key.length === 1) { - if (!qtest_events.keyReleaseChar(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } else { - if (!qtest_events.keyRelease(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } - } - - /*! - \qmlmethod TestCase::keyClick(key, modifiers = Qt.NoModifier, delay = -1) - - Simulates clicking of \a key with optional \a modifiers on the currently - focused item. If \a delay is larger than 0, the test will wait for - \a delay milliseconds. - - The event will be sent to the TestCase window or, in case of multiple windows, - to the current active window. See \l QGuiApplication::focusWindow() for more details. - - \sa keyPress(), keyRelease() - */ - function keyClick(key, modifiers, delay) { - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (typeof(key) === "string" && key.length === 1) { - if (!qtest_events.keyClickChar(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } else { - if (!qtest_events.keyClick(key, modifiers, delay)) - qtest_fail("window not shown", 2) - } - } - - /*! - \since 5.10 - \qmlmethod TestCase::keySequence(keySequence) - - Simulates typing of \a keySequence. The key sequence can be set - to one of the \l{QKeySequence::StandardKey}{standard keyboard shortcuts}, or - it can be described with a string containing a sequence of up to four key - presses. - - Each event shall be sent to the TestCase window or, in case of multiple windows, - to the current active window. See \l QGuiApplication::focusWindow() for more details. - - \sa keyPress(), keyRelease(), {GNU Emacs Style Key Sequences}, - {QtQuick::Shortcut::sequence}{Shortcut.sequence} - */ - function keySequence(keySequence) { - if (!qtest_events.keySequence(keySequence)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mousePress(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates pressing a mouse \a button with optional \a modifiers - on an \a item. The position is defined by \a x and \a y. - If \a x or \a y are not defined the position will be the center of \a item. - If \a delay is specified, the test will wait for the specified amount of - milliseconds before the press. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - \sa mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() - */ - function mousePress(item, x, y, button, modifiers, delay) { - if (!qtest_verifyItem(item, "mousePress")) - return - - if (button === undefined) - button = Qt.LeftButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (x === undefined) - x = item.width / 2 - if (y === undefined) - y = item.height / 2 - if (!qtest_events.mousePress(item, x, y, button, modifiers, delay)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mouseRelease(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates releasing a mouse \a button with optional \a modifiers - on an \a item. The position of the release is defined by \a x and \a y. - If \a x or \a y are not defined the position will be the center of \a item. - If \a delay is specified, the test will wait for the specified amount of - milliseconds before releasing the button. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() - */ - function mouseRelease(item, x, y, button, modifiers, delay) { - if (!qtest_verifyItem(item, "mouseRelease")) - return - - if (button === undefined) - button = Qt.LeftButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (x === undefined) - x = item.width / 2 - if (y === undefined) - y = item.height / 2 - if (!qtest_events.mouseRelease(item, x, y, button, modifiers, delay)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mouseDrag(item, x, y, dx, dy, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates dragging the mouse on an \a item with \a button pressed and optional \a modifiers - The initial drag position is defined by \a x and \a y, - and drag distance is defined by \a dx and \a dy. If \a delay is specified, - the test will wait for the specified amount of milliseconds before releasing the button. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseWheel() - */ - function mouseDrag(item, x, y, dx, dy, button, modifiers, delay) { - if (!qtest_verifyItem(item, "mouseDrag")) - return - - if (item.x === undefined || item.y === undefined) - return - if (button === undefined) - button = Qt.LeftButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - let moveDelay = Math.max(1, delay === -1 ? qtest_events.defaultMouseDelay : delay) - - // Divide dx and dy to have intermediate mouseMove while dragging - // Fractions of dx/dy need be superior to the dragThreshold - // to make the drag works though - let intermediateDx = Math.round(dx/3) - if (Math.abs(intermediateDx) < (util.dragThreshold + 1)) - intermediateDx = 0 - let intermediateDy = Math.round(dy/3) - if (Math.abs(intermediateDy) < (util.dragThreshold + 1)) - intermediateDy = 0 - - mousePress(item, x, y, button, modifiers, delay) - - // Trigger dragging by dragging past the drag threshold, but making sure to only drag - // along a certain axis if a distance greater than zero was given for that axis. - let dragTriggerXDistance = dx > 0 ? (util.dragThreshold + 1) : 0 - let dragTriggerYDistance = dy > 0 ? (util.dragThreshold + 1) : 0 - mouseMove(item, x + dragTriggerXDistance, y + dragTriggerYDistance, moveDelay, button, modifiers) - if (intermediateDx !== 0 || intermediateDy !== 0) { - mouseMove(item, x + intermediateDx, y + intermediateDy, moveDelay, button, modifiers) - mouseMove(item, x + 2*intermediateDx, y + 2*intermediateDy, moveDelay, button, modifiers) - } - mouseMove(item, x + dx, y + dy, moveDelay, button, modifiers) - mouseRelease(item, x + dx, y + dy, button, modifiers, delay) - } - - /*! - \qmlmethod TestCase::mouseClick(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates clicking a mouse \a button with optional \a modifiers - on an \a item. The position of the click is defined by \a x and \a y. - If \a x and \a y are not defined the position will be the center of \a item. - If \a delay is specified, the test will wait for the specified amount of - milliseconds before pressing and before releasing the button. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - \sa mousePress(), mouseRelease(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() - */ - function mouseClick(item, x, y, button, modifiers, delay) { - if (!qtest_verifyItem(item, "mouseClick")) - return - - if (button === undefined) - button = Qt.LeftButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (x === undefined) - x = item.width / 2 - if (y === undefined) - y = item.height / 2 - if (!qtest_events.mouseClick(item, x, y, button, modifiers, delay)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mouseDoubleClickSequence(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates the full sequence of events generated by double-clicking a mouse - \a button with optional \a modifiers on an \a item. - - This method reproduces the sequence of mouse events generated when a user makes - a double click: Press-Release-Press-DoubleClick-Release. - - The position of the click is defined by \a x and \a y. - If \a x and \a y are not defined the position will be the center of \a item. - If \a delay is specified, the test will wait for the specified amount of - milliseconds before pressing and before releasing the button. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - This QML method was introduced in Qt 5.5. - - \sa mousePress(), mouseRelease(), mouseClick(), mouseMove(), mouseDrag(), mouseWheel() - */ - function mouseDoubleClickSequence(item, x, y, button, modifiers, delay) { - if (!qtest_verifyItem(item, "mouseDoubleClickSequence")) - return - - if (button === undefined) - button = Qt.LeftButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (delay === undefined) - delay = -1 - if (x === undefined) - x = item.width / 2 - if (y === undefined) - y = item.height / 2 - if (!qtest_events.mouseDoubleClickSequence(item, x, y, button, modifiers, delay)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mouseMove(item, x = item.width / 2, y = item.height / 2, delay = -1, buttons = Qt.NoButton) - - Moves the mouse pointer to the position given by \a x and \a y within - \a item, while holding \a buttons if given. Since Qt 6.0, if \a x and - \a y are not defined, the position will be the center of \a item. - - If a \a delay (in milliseconds) is given, the test will wait before - moving the mouse pointer. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - \sa mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseDrag(), mouseWheel() - */ - function mouseMove(item, x, y, delay, buttons, modifiers) { - if (!qtest_verifyItem(item, "mouseMove")) - return - - if (delay === undefined) - delay = -1 - if (buttons === undefined) - buttons = Qt.NoButton - if (modifiers === undefined) - modifiers = Qt.NoModifiers - if (x === undefined) - x = item.width / 2 - if (y === undefined) - y = item.height / 2 - if (!qtest_events.mouseMove(item, x, y, delay, buttons, modifiers)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TestCase::mouseWheel(item, x, y, xDelta, yDelta, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) - - Simulates rotating the mouse wheel on an \a item with \a button pressed and optional \a modifiers. - The position of the wheel event is defined by \a x and \a y. - If \a delay is specified, the test will wait for the specified amount of milliseconds before releasing the button. - - The position given by \a x and \a y is transformed from the co-ordinate - system of \a item into window co-ordinates and then delivered. - If \a item is obscured by another item, or a child of \a item occupies - that position, then the event will be delivered to the other item instead. - - The \a xDelta and \a yDelta contain the wheel rotation distance in eighths of a degree. see \l QWheelEvent::angleDelta() for more details. - - \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseDrag(), QWheelEvent::angleDelta() - */ - function mouseWheel(item, x, y, xDelta, yDelta, buttons, modifiers, delay) { - if (!qtest_verifyItem(item, "mouseWheel")) - return - - if (delay === undefined) - delay = -1 - if (buttons === undefined) - buttons = Qt.NoButton - if (modifiers === undefined) - modifiers = Qt.NoModifier - if (xDelta === undefined) - xDelta = 0 - if (yDelta === undefined) - yDelta = 0 - if (!qtest_events.mouseWheel(item, x, y, buttons, modifiers, xDelta, yDelta, delay)) - qtest_fail("window not shown", 2) - } - - /*! - \qmlmethod TouchEventSequence TestCase::touchEvent(object item) - - \since 5.9 - - Begins a sequence of touch events through a simulated touchscreen (QPointingDevice). - Events are delivered to the window containing \a item. - - The returned object is used to enumerate events to be delivered through a single - QTouchEvent. Touches are delivered to the window containing the TestCase unless - otherwise specified. - - \code - Rectangle { - width: 640; height: 480 - - MultiPointTouchArea { - id: area - anchors.fill: parent - - property bool touched: false - - onPressed: touched = true - } - - TestCase { - name: "ItemTests" - when: windowShown - id: test1 - - function test_touch() { - let touch = touchEvent(area); - touch.press(0, area, 10, 10); - touch.commit(); - verify(area.touched); - } - } - } - \endcode - - \sa TouchEventSequence::press(), TouchEventSequence::move(), TouchEventSequence::release(), TouchEventSequence::stationary(), TouchEventSequence::commit(), QInputDevice::DeviceType - */ - - function touchEvent(item) { - if (!qtest_verifyItem(item, "touchEvent")) - return - - return { - _defaultItem: item, - _sequence: qtest_events.touchEvent(item), - - press: function (id, target, x, y) { - if (!target) - target = this._defaultItem; - if (id === undefined) - qtest_fail("No id given to TouchEventSequence::press", 1); - if (x === undefined) - x = target.width / 2; - if (y === undefined) - y = target.height / 2; - this._sequence.press(id, target, x, y); - return this; - }, - - move: function (id, target, x, y) { - if (!target) - target = this._defaultItem; - if (id === undefined) - qtest_fail("No id given to TouchEventSequence::move", 1); - if (x === undefined) - x = target.width / 2; - if (y === undefined) - y = target.height / 2; - this._sequence.move(id, target, x, y); - return this; - }, - - stationary: function (id) { - if (id === undefined) - qtest_fail("No id given to TouchEventSequence::stationary", 1); - this._sequence.stationary(id); - return this; - }, - - release: function (id, target, x, y) { - if (!target) - target = this._defaultItem; - if (id === undefined) - qtest_fail("No id given to TouchEventSequence::release", 1); - if (x === undefined) - x = target.width / 2; - if (y === undefined) - y = target.height / 2; - this._sequence.release(id, target, x, y); - return this; - }, - - commit: function () { - this._sequence.commit(); - return this; - } - }; - } - - // Functions that can be overridden in subclasses for init/cleanup duties. - /*! - \qmlmethod TestCase::initTestCase() - - This function is called before any other test functions in the - \l TestCase type. The default implementation does nothing. - The application can provide its own implementation to perform - test case initialization. - - \sa cleanupTestCase(), init() - */ - function initTestCase() {} - - /*! - \qmlmethod TestCase::cleanupTestCase() - - This function is called after all other test functions in the - \l TestCase type have completed. The default implementation - does nothing. The application can provide its own implementation - to perform test case cleanup. - - \sa initTestCase(), cleanup() - */ - function cleanupTestCase() {} - - /*! - \qmlmethod TestCase::init() - - This function is called before each test function that is - executed in the \l TestCase type. The default implementation - does nothing. The application can provide its own implementation - to perform initialization before each test function. - - \sa cleanup(), initTestCase() - */ - function init() {} - - /*! - \qmlmethod TestCase::cleanup() - - This function is called after each test function that is - executed in the \l TestCase type. The default implementation - does nothing. The application can provide its own implementation - to perform cleanup after each test function. - - \sa init(), cleanupTestCase() - */ - function cleanup() {} - - /*! \internal */ - function qtest_verifyItem(item, method) { - try { - if (!(item instanceof Item) && - !(item instanceof Window)) { - // it's a QObject, but not a type - qtest_fail("TypeError: %1 requires an Item or Window type".arg(method), 2); - return false; - } - } catch (e) { // it's not a QObject - qtest_fail("TypeError: %1 requires an Item or Window type".arg(method), 3); - return false; - } - - return true; - } - - /*! \internal */ - function qtest_runInternal(prop, arg) { - try { - qtest_testCaseResult = testCase[prop](arg) - } catch (e) { - qtest_testCaseResult = [] - if (e.message.indexOf("QtQuickTest::") !== 0) { - // Test threw an unrecognized exception - fail. - qtest_results.fail("Uncaught exception: " + e.message, - e.fileName, e.lineNumber) - } - } - return !qtest_results.failed - } - - /*! \internal */ - function qtest_runFunction(prop, arg) { - qtest_runInternal("init") - if (!qtest_results.skipped) { - qtest_runInternal(prop, arg) - qtest_results.finishTestData() - qtest_runInternal("cleanup") - qtest_destroyTemporaryObjects() - - // wait(0) will call processEvents() so objects marked for deletion - // in the test function will be deleted. - wait(0) - - qtest_results.finishTestDataCleanup() - } - } - - /*! \internal */ - function qtest_runBenchmarkFunction(prop, arg) { - qtest_results.startMeasurement() - do { - qtest_results.beginDataRun() - do { - // Run the initialization function. - qtest_runInternal("init") - if (qtest_results.skipped) - break - - // Execute the benchmark function. - if (prop.indexOf("benchmark_once_") !== 0) - qtest_results.startBenchmark(TestResult.RepeatUntilValidMeasurement, qtest_results.dataTag) - else - qtest_results.startBenchmark(TestResult.RunOnce, qtest_results.dataTag) - while (!qtest_results.isBenchmarkDone()) { - let success = qtest_runInternal(prop, arg) - qtest_results.finishTestData() - if (!success) - break - qtest_results.nextBenchmark() - } - qtest_results.stopBenchmark() - - // Run the cleanup function. - qtest_runInternal("cleanup") - qtest_results.finishTestDataCleanup() - // wait(0) will call processEvents() so objects marked for deletion - // in the test function will be deleted. - wait(0) - } while (!qtest_results.measurementAccepted()) - qtest_results.endDataRun() - } while (qtest_results.needsMoreMeasurements()) - } - - /*! \internal */ - function qtest_run() { - if (!when || completed || running || !qtest_componentCompleted) - return; - - if (!TestLogger.log_can_start_test(qtest_testId)) { - console.error("Interleaved test execution detected. This shouldn't happen") - return; - } - - if (TestLogger.log_start_test(qtest_testId)) { - qtest_results.reset() - qtest_results.testCaseName = name - qtest_results.startLogging() - } else { - qtest_results.testCaseName = name - } - running = true - - // Check the run list to see if this class is mentioned. - let checkNames = false - let testsToRun = {} // explicitly provided function names to run and their tags for data-driven tests - - if (qtest_results.functionsToRun.length > 0) { - checkNames = true - let found = false - - if (name.length > 0) { - for (let index in qtest_results.functionsToRun) { - let caseFuncName = qtest_results.functionsToRun[index] - if (caseFuncName.indexOf(name + "::") !== 0) - continue - - found = true - let funcName = caseFuncName.substring(name.length + 2) - - if (!(funcName in testsToRun)) - testsToRun[funcName] = [] - - let tagName = qtest_results.tagsToRun[index] - if (tagName.length > 0) // empty tags mean run all rows - testsToRun[funcName].push(tagName) - } - } - if (!found) { - completed = true - if (!TestLogger.log_complete_test(qtest_testId)) { - qtest_results.stopLogging() - Qt.quit() - } - qtest_results.testCaseName = "" - return - } - } - - // Run the initTestCase function. - qtest_results.functionName = "initTestCase" - let runTests = true - if (!qtest_runInternal("initTestCase")) - runTests = false - qtest_results.finishTestData() - qtest_results.finishTestDataCleanup() - qtest_results.finishTestFunction() - - // Run the test methods. - let testList = [] - if (runTests) { - for (let prop in testCase) { - if (prop.indexOf("test_") !== 0 && prop.indexOf("benchmark_") !== 0) - continue - let tail = prop.lastIndexOf("_data"); - if (tail !== -1 && tail === (prop.length - 5)) - continue - testList.push(prop) - } - testList.sort() - } - - for (let index in testList) { - let prop = testList[index] - - if (checkNames && !(prop in testsToRun)) - continue - - let datafunc = prop + "_data" - let isBenchmark = (prop.indexOf("benchmark_") === 0) - qtest_results.functionName = prop - - if (!(datafunc in testCase)) - datafunc = "init_data"; - - if (datafunc in testCase) { - if (qtest_runInternal(datafunc)) { - let table = qtest_testCaseResult - let haveData = false - - let checkTags = (checkNames && testsToRun[prop].length > 0) - - qtest_results.initTestTable() - for (let index in table) { - haveData = true - let row = table[index] - if (!row.tag) - row.tag = "row " + index // Must have something - if (checkTags) { - let tags = testsToRun[prop] - let tagIdx = tags.indexOf(row.tag) - if (tagIdx < 0) - continue - tags.splice(tagIdx, 1) - } - qtest_results.dataTag = row.tag - if (isBenchmark) - qtest_runBenchmarkFunction(prop, row) - else - qtest_runFunction(prop, row) - qtest_results.dataTag = "" - qtest_results.skipped = false - } - if (!haveData) { - if (datafunc === "init_data") - qtest_runFunction(prop, null, isBenchmark) - else - qtest_results.warn("no data supplied for " + prop + "() by " + datafunc + "()" - , util.callerFile(), util.callerLine()); - } - qtest_results.clearTestTable() - } - } else if (isBenchmark) { - qtest_runBenchmarkFunction(prop, null, isBenchmark) - } else { - qtest_runFunction(prop, null, isBenchmark) - } - qtest_results.finishTestFunction() - qtest_results.skipped = false - - if (checkNames && testsToRun[prop].length <= 0) - delete testsToRun[prop] - } - - // Run the cleanupTestCase function. - qtest_results.skipped = false - qtest_results.functionName = "cleanupTestCase" - qtest_runInternal("cleanupTestCase") - - // Complain about missing functions that we were supposed to run. - if (checkNames) { - let missingTests = [] - for (let func in testsToRun) { - let caseFuncName = name + '::' + func - let tags = testsToRun[func] - if (tags.length <= 0) - missingTests.push(caseFuncName) - else - for (let i in tags) - missingTests.push(caseFuncName + ':' + tags[i]) - } - missingTests.sort() - if (missingTests.length > 0) - qtest_results.fail("Could not find test functions: " + missingTests, "", 0) - } - - // Clean up and exit. - running = false - completed = true - qtest_results.finishTestData() - qtest_results.finishTestDataCleanup() - qtest_results.finishTestFunction() - qtest_results.functionName = "" - - // Stop if there are no more tests to be run. - if (!TestLogger.log_complete_test(qtest_testId)) { - qtest_results.stopLogging() - Qt.quit() - } - qtest_results.testCaseName = "" - } - - onWhenChanged: { - if (when !== qtest_prevWhen) { - qtest_prevWhen = when - if (when) - TestSchedule.testCases.push(testCase) - } - } - - onOptionalChanged: { - if (!completed) { - if (optional) - TestLogger.log_optional_test(qtest_testId) - else - TestLogger.log_mandatory_test(qtest_testId) - } - } - - Component.onCompleted: { - QTestRootObject.hasTestCase = true; - qtest_componentCompleted = true; - qtest_testId = TestLogger.log_register_test(name) - if (optional) - TestLogger.log_optional_test(qtest_testId) - qtest_prevWhen = when - if (when) - TestSchedule.testCases.push(testCase) - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestSchedule.qml b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestSchedule.qml deleted file mode 100644 index a2d291f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/TestSchedule.qml +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -pragma Singleton -import QtQml - -Timer { - property list testCases - property QtObject currentTest: null - - running: testCases.length > 0 && !currentTest - interval: 1 - repeat: true - - onTriggered: { - if (currentTest) { - console.error("Interleaved test execution detected. This shouldn't happen") - return; - } - - try { - currentTest = testCases.shift() - currentTest.qtest_run() - } finally { - currentTest = null - } - } - -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/libquicktestplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/libquicktestplugin.so deleted file mode 100755 index 1d92f68..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/libquicktestplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/plugins.qmltypes deleted file mode 100644 index fea2aa9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/plugins.qmltypes +++ /dev/null @@ -1,501 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "private/quicktestevent_p.h" - name: "QQuickTouchEventSequence" - accessSemantics: "reference" - prototype: "QObject" - Method { - name: "press" - type: "QObject" - isPointer: true - Parameter { name: "touchId"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "move" - type: "QObject" - isPointer: true - Parameter { name: "touchId"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "release" - type: "QObject" - isPointer: true - Parameter { name: "touchId"; type: "int" } - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - } - Method { - name: "stationary" - type: "QObject" - isPointer: true - Parameter { name: "touchId"; type: "int" } - } - Method { name: "commit"; type: "QObject"; isPointer: true } - } - Component { - file: "private/quicktest_p.h" - name: "QTestRootObject" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtTest/QTestRootObject 1.0", "QtTest/QTestRootObject 6.0"] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [256, 1536] - Property { - name: "windowShown" - type: "bool" - read: "windowShown" - notify: "windowShownChanged" - index: 0 - isReadonly: true - } - Property { - name: "hasTestCase" - type: "bool" - read: "hasTestCase" - write: "setHasTestCase" - notify: "hasTestCaseChanged" - index: 1 - } - Property { - name: "defined" - type: "QObject" - isPointer: true - read: "defined" - index: 2 - isReadonly: true - } - Signal { name: "windowShownChanged" } - Signal { name: "hasTestCaseChanged" } - Method { name: "quit" } - } - Component { - file: "private/quicktestevent_p.h" - name: "QuickTestEvent" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtTest/TestEvent 1.0", - "QtTest/TestEvent 1.2", - "QtTest/TestEvent 6.0" - ] - exportMetaObjectRevisions: [256, 258, 1536] - Property { - name: "defaultMouseDelay" - type: "int" - read: "defaultMouseDelay" - index: 0 - isReadonly: true - isFinal: true - } - Method { - name: "keyPress" - type: "bool" - Parameter { name: "key"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keyRelease" - type: "bool" - Parameter { name: "key"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keyClick" - type: "bool" - Parameter { name: "key"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keyPressChar" - type: "bool" - Parameter { name: "character"; type: "QString" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keyReleaseChar" - type: "bool" - Parameter { name: "character"; type: "QString" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keyClickChar" - type: "bool" - Parameter { name: "character"; type: "QString" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "keySequence" - revision: 258 - type: "bool" - Parameter { name: "keySequence"; type: "QVariant" } - } - Method { - name: "mousePress" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "button"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "mouseRelease" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "button"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "mouseClick" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "button"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "mouseDoubleClick" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "button"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "mouseDoubleClickSequence" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "button"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "mouseMove" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "delay"; type: "int" } - Parameter { name: "buttons"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - } - Method { - name: "mouseWheel" - type: "bool" - Parameter { name: "item"; type: "QObject"; isPointer: true } - Parameter { name: "x"; type: "double" } - Parameter { name: "y"; type: "double" } - Parameter { name: "buttons"; type: "int" } - Parameter { name: "modifiers"; type: "int" } - Parameter { name: "xDelta"; type: "int" } - Parameter { name: "yDelta"; type: "int" } - Parameter { name: "delay"; type: "int" } - } - Method { - name: "touchEvent" - type: "QQuickTouchEventSequence" - isPointer: true - Parameter { name: "item"; type: "QObject"; isPointer: true } - } - Method { name: "touchEvent"; type: "QQuickTouchEventSequence"; isPointer: true; isCloned: true } - } - Component { - file: "private/quicktestresult_p.h" - name: "QuickTestResult" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtTest/TestResult 1.0", - "QtTest/TestResult 1.1", - "QtTest/TestResult 1.13", - "QtTest/TestResult 6.0", - "QtTest/TestResult 6.3", - "QtTest/TestResult 6.5" - ] - exportMetaObjectRevisions: [256, 257, 269, 1536, 1539, 1541] - Enum { - name: "RunMode" - values: ["RepeatUntilValidMeasurement", "RunOnce"] - } - Property { - name: "testCaseName" - type: "QString" - read: "testCaseName" - write: "setTestCaseName" - notify: "testCaseNameChanged" - index: 0 - } - Property { - name: "functionName" - type: "QString" - read: "functionName" - write: "setFunctionName" - notify: "functionNameChanged" - index: 1 - } - Property { - name: "dataTag" - type: "QString" - read: "dataTag" - write: "setDataTag" - notify: "dataTagChanged" - index: 2 - } - Property { name: "failed"; type: "bool"; read: "isFailed"; index: 3; isReadonly: true } - Property { - name: "skipped" - type: "bool" - read: "isSkipped" - write: "setSkipped" - notify: "skippedChanged" - index: 4 - } - Property { name: "passCount"; type: "int"; read: "passCount"; index: 5; isReadonly: true } - Property { name: "failCount"; type: "int"; read: "failCount"; index: 6; isReadonly: true } - Property { name: "skipCount"; type: "int"; read: "skipCount"; index: 7; isReadonly: true } - Property { - name: "functionsToRun" - type: "QStringList" - read: "functionsToRun" - index: 8 - isReadonly: true - } - Property { name: "tagsToRun"; type: "QStringList"; read: "tagsToRun"; index: 9; isReadonly: true } - Signal { name: "programNameChanged" } - Signal { name: "testCaseNameChanged" } - Signal { name: "functionNameChanged" } - Signal { name: "dataTagChanged" } - Signal { name: "skippedChanged" } - Method { name: "reset" } - Method { name: "startLogging" } - Method { name: "stopLogging" } - Method { name: "initTestTable" } - Method { name: "clearTestTable" } - Method { name: "finishTestData" } - Method { name: "finishTestDataCleanup" } - Method { name: "finishTestFunction" } - Method { name: "stringify"; isJavaScriptFunction: true } - Method { - name: "fail" - Parameter { name: "message"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "verify" - type: "bool" - Parameter { name: "success"; type: "bool" } - Parameter { name: "message"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "compare" - type: "bool" - Parameter { name: "success"; type: "bool" } - Parameter { name: "message"; type: "QString" } - Parameter { name: "val1"; type: "QVariant" } - Parameter { name: "val2"; type: "QVariant" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "fuzzyCompare" - type: "bool" - Parameter { name: "actual"; type: "QVariant" } - Parameter { name: "expected"; type: "QVariant" } - Parameter { name: "delta"; type: "double" } - } - Method { - name: "skip" - Parameter { name: "message"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "expectFail" - type: "bool" - Parameter { name: "tag"; type: "QString" } - Parameter { name: "comment"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "expectFailContinue" - type: "bool" - Parameter { name: "tag"; type: "QString" } - Parameter { name: "comment"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "warn" - Parameter { name: "message"; type: "QString" } - Parameter { name: "location"; type: "QUrl" } - Parameter { name: "line"; type: "int" } - } - Method { - name: "ignoreWarning" - Parameter { name: "message"; type: "QJSValue" } - } - Method { - name: "failOnWarning" - revision: 1539 - Parameter { name: "message"; type: "QJSValue" } - } - Method { - name: "wait" - Parameter { name: "ms"; type: "int" } - } - Method { - name: "sleep" - Parameter { name: "ms"; type: "int" } - } - Method { - name: "waitForRendering" - type: "bool" - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - Parameter { name: "timeout"; type: "int" } - } - Method { - name: "waitForRendering" - type: "bool" - isCloned: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { name: "startMeasurement" } - Method { name: "beginDataRun" } - Method { name: "endDataRun" } - Method { name: "measurementAccepted"; type: "bool" } - Method { name: "needsMoreMeasurements"; type: "bool" } - Method { - name: "startBenchmark" - Parameter { name: "runMode"; type: "RunMode" } - Parameter { name: "tag"; type: "QString" } - } - Method { name: "isBenchmarkDone"; type: "bool" } - Method { name: "nextBenchmark" } - Method { name: "stopBenchmark" } - Method { - name: "grabImage" - type: "QObject" - isPointer: true - Parameter { name: "item"; type: "QQuickItem"; isPointer: true } - } - Method { - name: "findChild" - revision: 257 - type: "QObject" - isPointer: true - Parameter { name: "parent"; type: "QObject"; isPointer: true } - Parameter { name: "objectName"; type: "QString" } - } - Method { - name: "isPolishScheduled" - revision: 269 - type: "bool" - Parameter { name: "itemOrWindow"; type: "QObject"; isPointer: true } - } - Method { - name: "waitForPolish" - revision: 1541 - type: "bool" - Parameter { name: "itemOrWindow"; type: "QObject"; isPointer: true } - Parameter { name: "timeout"; type: "int" } - } - } - Component { - file: "private/quicktestutil_p.h" - name: "QuickTestUtil" - accessSemantics: "reference" - prototype: "QObject" - exports: [ - "QtTest/TestUtil 1.0", - "QtTest/TestUtil 6.0", - "QtTest/TestUtil 6.7" - ] - exportMetaObjectRevisions: [256, 1536, 1543] - Property { - name: "printAvailableFunctions" - type: "bool" - read: "printAvailableFunctions" - notify: "printAvailableFunctionsChanged" - index: 0 - isReadonly: true - } - Property { - name: "dragThreshold" - type: "int" - read: "dragThreshold" - notify: "dragThresholdChanged" - index: 1 - isReadonly: true - } - Signal { name: "printAvailableFunctionsChanged" } - Signal { name: "dragThresholdChanged" } - Method { - name: "typeName" - type: "QJSValue" - Parameter { name: "v"; type: "QVariant" } - } - Method { - name: "compare" - type: "bool" - Parameter { name: "act"; type: "QVariant" } - Parameter { name: "exp"; type: "QVariant" } - } - Method { - name: "callerFile" - type: "QJSValue" - Parameter { name: "frameIndex"; type: "int" } - } - Method { name: "callerFile"; type: "QJSValue"; isCloned: true } - Method { - name: "callerLine" - type: "int" - Parameter { name: "frameIndex"; type: "int" } - } - Method { name: "callerLine"; type: "int"; isCloned: true } - Method { - name: "signalHandlerName" - revision: 1543 - type: "QString" - Parameter { name: "signalName"; type: "QString" } - } - Method { - name: "populateClipboardText" - Parameter { name: "lineCount"; type: "int" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/qmldir deleted file mode 100644 index 9ce4da2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/qmldir +++ /dev/null @@ -1,14 +0,0 @@ -module QtTest -linktarget Qt6::QuickTestplugin -optional plugin quicktestplugin -classname QtTestPlugin -typeinfo plugins.qmltypes -depends QtQuick.Window auto -prefer :/qt-project.org/imports/QtTest/ -SignalSpy 6.0 SignalSpy.qml -SignalSpy 1.0 SignalSpy.qml -TestCase 6.0 TestCase.qml -TestCase 1.0 TestCase.qml -singleton TestSchedule 6.0 TestSchedule.qml -singleton TestSchedule 1.0 TestSchedule.qml - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/testlogger.js b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/testlogger.js deleted file mode 100644 index dc28bf6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTest/testlogger.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -.pragma library - -var testResults = null; - -function log_init_results() -{ - if (!testResults) { - testResults = { - runningTest: -1, - nextId: 0, - testCases: [] - } - } -} - -function log_register_test(name) -{ - log_init_results() - var testId = testResults.nextId++ - testResults.testCases.push(testId) - return testId -} - -function log_optional_test(testId) -{ - log_init_results() - var index = testResults.testCases.indexOf(testId) - if (index >= 0) - testResults.testCases.splice(index, 1) -} - -function log_mandatory_test(testId) -{ - log_init_results() - var index = testResults.testCases.indexOf(testId) - if (index === -1) - testResults.testCases.push(testId) -} - -function log_can_start_test(testId) -{ - return !testResults || testResults.runningTest === -1 || testResults.runningTest === testId; -} - -function log_start_test(testId) -{ - log_init_results() - if (testResults.runningTest === testId) - return false - testResults.runningTest = testId - return true -} - -function log_complete_test(testId) -{ - var index = testResults.testCases.indexOf(testId) - if (index >= 0) - testResults.testCases.splice(index, 1) - testResults.runningTest = -1 - return testResults.testCases.length > 0 -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/libtexttospeechqmlplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/libtexttospeechqmlplugin.so deleted file mode 100755 index 0bbcdd3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/libtexttospeechqmlplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/plugins.qmltypes deleted file mode 100644 index 38f2b9e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/plugins.qmltypes +++ /dev/null @@ -1,373 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qdeclarativetexttospeech_p.h" - name: "QDeclarativeTextToSpeech" - accessSemantics: "reference" - prototype: "QTextToSpeech" - interfaces: ["QQmlParserStatus"] - exports: [ - "QtTextToSpeech/TextToSpeech 6.0", - "QtTextToSpeech/TextToSpeech 6.6" - ] - exportMetaObjectRevisions: [1536, 1542] - Property { - name: "engine" - type: "QString" - read: "engine" - write: "setEngine" - notify: "engineChanged" - index: 0 - isFinal: true - } - Property { - name: "engineParameters" - revision: 1542 - type: "QVariantMap" - read: "engineParameters" - write: "setEngineParameters" - notify: "engineParametersChanged" - index: 1 - isFinal: true - } - Signal { - name: "engineChanged" - Parameter { type: "QString" } - } - Signal { name: "engineParametersChanged"; revision: 1542 } - Method { - name: "findVoices" - revision: 1542 - type: "QVoice" - isList: true - Parameter { name: "criteria"; type: "QVariantMap" } - } - } - Component { - file: "qtexttospeech.h" - name: "QTextToSpeech" - accessSemantics: "reference" - prototype: "QObject" - Enum { - name: "State" - values: ["Ready", "Speaking", "Paused", "Error", "Synthesizing"] - } - Enum { - name: "ErrorReason" - values: [ - "NoError", - "Initialization", - "Configuration", - "Input", - "Playback" - ] - } - Enum { - name: "BoundaryHint" - values: ["Default", "Immediate", "Word", "Sentence", "Utterance"] - } - Enum { - name: "Capabilities" - alias: "Capability" - isFlag: true - values: [ - "None", - "Speak", - "PauseResume", - "WordByWordProgress", - "Synthesize" - ] - } - Property { - name: "engine" - type: "QString" - read: "engine" - write: "setEngine" - notify: "engineChanged" - index: 0 - } - Property { - name: "state" - type: "State" - read: "state" - notify: "stateChanged" - index: 1 - isReadonly: true - isFinal: true - } - Property { - name: "volume" - type: "double" - read: "volume" - write: "setVolume" - notify: "volumeChanged" - index: 2 - isFinal: true - } - Property { - name: "rate" - type: "double" - read: "rate" - write: "setRate" - notify: "rateChanged" - index: 3 - isFinal: true - } - Property { - name: "pitch" - type: "double" - read: "pitch" - write: "setPitch" - notify: "pitchChanged" - index: 4 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - notify: "localeChanged" - index: 5 - isFinal: true - } - Property { - name: "voice" - type: "QVoice" - read: "voice" - write: "setVoice" - notify: "voiceChanged" - index: 6 - isFinal: true - } - Property { - name: "engineCapabilities" - revision: 1542 - type: "Capabilities" - read: "engineCapabilities" - notify: "engineChanged" - index: 7 - isReadonly: true - isFinal: true - } - Signal { - name: "engineChanged" - Parameter { name: "engine"; type: "QString" } - } - Signal { - name: "stateChanged" - Parameter { name: "state"; type: "QTextToSpeech::State" } - } - Signal { - name: "errorOccurred" - Parameter { name: "error"; type: "QTextToSpeech::ErrorReason" } - Parameter { name: "errorString"; type: "QString" } - } - Signal { - name: "localeChanged" - Parameter { name: "locale"; type: "QLocale" } - } - Signal { - name: "rateChanged" - Parameter { name: "rate"; type: "double" } - } - Signal { - name: "pitchChanged" - Parameter { name: "pitch"; type: "double" } - } - Signal { - name: "volumeChanged" - Parameter { name: "volume"; type: "double" } - } - Signal { - name: "voiceChanged" - Parameter { name: "voice"; type: "QVoice" } - } - Signal { - name: "sayingWord" - Parameter { name: "word"; type: "QString" } - Parameter { name: "id"; type: "qsizetype" } - Parameter { name: "start"; type: "qsizetype" } - Parameter { name: "length"; type: "qsizetype" } - } - Signal { - name: "aboutToSynthesize" - Parameter { name: "id"; type: "qsizetype" } - } - Method { - name: "say" - Parameter { name: "text"; type: "QString" } - } - Method { - name: "enqueue" - type: "qsizetype" - Parameter { name: "text"; type: "QString" } - } - Method { - name: "stop" - Parameter { name: "boundaryHint"; type: "QTextToSpeech::BoundaryHint" } - } - Method { name: "stop"; isCloned: true } - Method { - name: "pause" - Parameter { name: "boundaryHint"; type: "QTextToSpeech::BoundaryHint" } - } - Method { name: "pause"; isCloned: true } - Method { name: "resume" } - Method { - name: "setLocale" - Parameter { name: "locale"; type: "QLocale" } - } - Method { - name: "setRate" - Parameter { name: "rate"; type: "double" } - } - Method { - name: "setPitch" - Parameter { name: "pitch"; type: "double" } - } - Method { - name: "setVolume" - Parameter { name: "volume"; type: "double" } - } - Method { - name: "setVoice" - Parameter { name: "voice"; type: "QVoice" } - } - Method { - name: "setEngine" - type: "bool" - Parameter { name: "engine"; type: "QString" } - Parameter { name: "params"; type: "QVariantMap" } - } - Method { - name: "setEngine" - type: "bool" - isCloned: true - Parameter { name: "engine"; type: "QString" } - } - Method { name: "errorReason"; type: "QTextToSpeech::ErrorReason" } - Method { name: "errorString"; type: "QString" } - Method { name: "availableLocales"; type: "QLocale"; isList: true } - Method { name: "availableVoices"; type: "QVoice"; isList: true } - Method { name: "availableEngines"; type: "QStringList" } - } - Component { - file: "qtexttospeech_qmltypes_p.h" - name: "QVoice" - accessSemantics: "value" - exports: ["QtTextToSpeech/voice 6.0", "QtTextToSpeech/voice 6.6"] - isCreatable: false - exportMetaObjectRevisions: [1536, 1542] - Enum { - name: "Gender" - values: ["Male", "Female", "Unknown"] - } - Enum { - name: "Age" - values: ["Child", "Teenager", "Adult", "Senior", "Other"] - } - Property { name: "name"; type: "QString"; read: "name"; index: 0; isReadonly: true; isConstant: true } - Property { - name: "gender" - type: "Gender" - read: "gender" - index: 1 - isReadonly: true - isConstant: true - } - Property { name: "age"; type: "Age"; read: "age"; index: 2; isReadonly: true; isConstant: true } - Property { - name: "locale" - type: "QLocale" - read: "locale" - index: 3 - isReadonly: true - isConstant: true - } - Property { - name: "language" - revision: 1542 - type: "QLocale::Language" - read: "language" - index: 4 - isReadonly: true - } - } - Component { - file: "qtexttospeech_qmltypes_p.h" - name: "QVoiceDerived" - accessSemantics: "none" - prototype: "QVoice" - exports: ["QtTextToSpeech/Voice 6.0", "QtTextToSpeech/Voice 6.6"] - isCreatable: false - exportMetaObjectRevisions: [1536, 1542] - } - Component { - file: "qvoiceselectorattached_p.h" - name: "QVoiceSelectorAttached" - accessSemantics: "reference" - prototype: "QObject" - exports: ["QtTextToSpeech/VoiceSelector 6.6"] - isCreatable: false - exportMetaObjectRevisions: [1542] - attachedType: "QVoiceSelectorAttached" - Property { - name: "name" - type: "QVariant" - read: "name" - write: "setName" - notify: "nameChanged" - index: 0 - isFinal: true - } - Property { - name: "gender" - type: "QVoice::Gender" - read: "gender" - write: "setGender" - notify: "genderChanged" - index: 1 - isFinal: true - } - Property { - name: "age" - type: "QVoice::Age" - read: "age" - write: "setAge" - notify: "ageChanged" - index: 2 - isFinal: true - } - Property { - name: "locale" - type: "QLocale" - read: "locale" - write: "setLocale" - notify: "localeChanged" - index: 3 - isFinal: true - } - Property { - name: "language" - type: "QLocale" - read: "language" - write: "setLanguage" - notify: "languageChanged" - index: 4 - isFinal: true - } - Signal { name: "nameChanged" } - Signal { name: "genderChanged" } - Signal { name: "ageChanged" } - Signal { name: "localeChanged" } - Signal { name: "languageChanged" } - Method { name: "select" } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/qmldir deleted file mode 100644 index 3ffacdb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtTextToSpeech/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtTextToSpeech -linktarget Qt6::TextToSpeechQml -optional plugin texttospeechqmlplugin -classname QtTextToSpeechPlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtTextToSpeech/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/libwebchannelquickplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/libwebchannelquickplugin.so deleted file mode 100755 index adebf72..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/libwebchannelquickplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/plugins.qmltypes deleted file mode 100644 index 8bc816e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/plugins.qmltypes +++ /dev/null @@ -1,120 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by qmltyperegistrar. - -Module { - Component { - file: "qqmlwebchannel.h" - name: "QQmlWebChannel" - accessSemantics: "reference" - prototype: "QWebChannel" - exports: [ - "QtWebChannel/WebChannel 1.0", - "QtWebChannel/WebChannel 6.0" - ] - exportMetaObjectRevisions: [256, 1536] - attachedType: "QQmlWebChannelAttached" - Property { - name: "transports" - type: "QObject" - isList: true - read: "transports" - index: 0 - isReadonly: true - } - Property { - name: "registeredObjects" - type: "QObject" - isList: true - read: "registeredObjects" - index: 1 - isReadonly: true - } - Method { - name: "_q_objectIdChanged" - Parameter { name: "newId"; type: "QString" } - } - Method { - name: "registerObjects" - Parameter { name: "objects"; type: "QVariantMap" } - } - Method { - name: "connectTo" - Parameter { name: "transport"; type: "QObject"; isPointer: true } - } - Method { - name: "disconnectFrom" - Parameter { name: "transport"; type: "QObject"; isPointer: true } - } - } - Component { - file: "private/qqmlwebchannelattached_p.h" - name: "QQmlWebChannelAttached" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "id" - type: "QString" - read: "id" - write: "setId" - notify: "idChanged" - index: 0 - isFinal: true - } - Signal { - name: "idChanged" - Parameter { name: "id"; type: "QString" } - } - } - Component { - file: "qwebchannel.h" - name: "QWebChannel" - accessSemantics: "reference" - prototype: "QObject" - Property { - name: "blockUpdates" - type: "bool" - bindable: "bindableBlockUpdates" - read: "blockUpdates" - write: "setBlockUpdates" - notify: "blockUpdatesChanged" - index: 0 - } - Property { - name: "propertyUpdateInterval" - type: "int" - bindable: "bindablePropertyUpdateInterval" - read: "propertyUpdateInterval" - write: "setPropertyUpdateInterval" - index: 1 - } - Signal { - name: "blockUpdatesChanged" - Parameter { name: "block"; type: "bool" } - } - Method { - name: "connectTo" - Parameter { name: "transport"; type: "QWebChannelAbstractTransport"; isPointer: true } - } - Method { - name: "disconnectFrom" - Parameter { name: "transport"; type: "QWebChannelAbstractTransport"; isPointer: true } - } - Method { - name: "_q_transportDestroyed" - Parameter { type: "QObject"; isPointer: true } - } - Method { - name: "registerObject" - Parameter { name: "id"; type: "QString" } - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - Method { - name: "deregisterObject" - Parameter { name: "object"; type: "QObject"; isPointer: true } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/qmldir deleted file mode 100644 index a5def04..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebChannel/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtWebChannel -linktarget Qt6::WebChannelQuickplugin -optional plugin webchannelquickplugin -classname QtWebChannelPlugin -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtWebChannel/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/libqmlwebsocketsplugin.so b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/libqmlwebsocketsplugin.so deleted file mode 100755 index e2213dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/libqmlwebsocketsplugin.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/plugins.qmltypes b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/plugins.qmltypes deleted file mode 100644 index cabe5a2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/plugins.qmltypes +++ /dev/null @@ -1,108 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by: -// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtWebSockets 1.15' - -Module { - dependencies: [] - Component { - name: "QQmlWebSocket" - prototype: "QObject" - exports: ["QtWebSockets/WebSocket 1.0", "QtWebSockets/WebSocket 1.1"] - exportMetaObjectRevisions: [0, 1] - Enum { - name: "Status" - values: { - "Connecting": 0, - "Open": 1, - "Closing": 2, - "Closed": 3, - "Error": 4 - } - } - Property { name: "url"; type: "QUrl" } - Property { name: "status"; type: "Status"; isReadonly: true } - Property { name: "errorString"; type: "string"; isReadonly: true } - Property { name: "active"; type: "bool" } - Signal { - name: "textMessageReceived" - Parameter { name: "message"; type: "string" } - } - Signal { - name: "binaryMessageReceived" - revision: 1 - Parameter { name: "message"; type: "QByteArray" } - } - Signal { - name: "statusChanged" - Parameter { name: "status"; type: "QQmlWebSocket::Status" } - } - Signal { - name: "activeChanged" - Parameter { name: "isActive"; type: "bool" } - } - Signal { - name: "errorStringChanged" - Parameter { name: "errorString"; type: "string" } - } - Method { - name: "sendTextMessage" - type: "qlonglong" - Parameter { name: "message"; type: "string" } - } - Method { - name: "sendBinaryMessage" - revision: 1 - type: "qlonglong" - Parameter { name: "message"; type: "QByteArray" } - } - } - Component { - name: "QQmlWebSocketServer" - prototype: "QObject" - exports: ["QtWebSockets/WebSocketServer 1.0"] - exportMetaObjectRevisions: [0] - Property { name: "url"; type: "QUrl"; isReadonly: true } - Property { name: "host"; type: "string" } - Property { name: "port"; type: "int" } - Property { name: "name"; type: "string" } - Property { name: "errorString"; type: "string"; isReadonly: true } - Property { name: "listen"; type: "bool" } - Property { name: "accept"; type: "bool" } - Signal { - name: "clientConnected" - Parameter { name: "webSocket"; type: "QQmlWebSocket"; isPointer: true } - } - Signal { - name: "errorStringChanged" - Parameter { name: "errorString"; type: "string" } - } - Signal { - name: "urlChanged" - Parameter { name: "url"; type: "QUrl" } - } - Signal { - name: "portChanged" - Parameter { name: "port"; type: "int" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "hostChanged" - Parameter { name: "host"; type: "string" } - } - Signal { - name: "listenChanged" - Parameter { name: "listen"; type: "bool" } - } - Signal { - name: "acceptChanged" - Parameter { name: "accept"; type: "bool" } - } - } -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/qmldir b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/qmldir deleted file mode 100644 index 24224f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qml/QtWebSockets/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module QtWebSockets -linktarget Qt6::qmlwebsockets -plugin qmlwebsocketsplugin -classname QtWebSocketsDeclarativeModule -typeinfo plugins.qmltypes -prefer :/qt-project.org/imports/QtWebSockets/ - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qsci/api/python/PyQt6.api b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qsci/api/python/PyQt6.api deleted file mode 100644 index 80a432a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/qsci/api/python/PyQt6.api +++ /dev/null @@ -1,31467 +0,0 @@ -QtCore.QtMsgType?10 -QtCore.QtMsgType.QtDebugMsg?10 -QtCore.QtMsgType.QtWarningMsg?10 -QtCore.QtMsgType.QtCriticalMsg?10 -QtCore.QtMsgType.QtFatalMsg?10 -QtCore.QtMsgType.QtSystemMsg?10 -QtCore.QtMsgType.QtInfoMsg?10 -QtCore.QCborKnownTags?10 -QtCore.QCborKnownTags.DateTimeString?10 -QtCore.QCborKnownTags.UnixTime_t?10 -QtCore.QCborKnownTags.PositiveBignum?10 -QtCore.QCborKnownTags.NegativeBignum?10 -QtCore.QCborKnownTags.Decimal?10 -QtCore.QCborKnownTags.Bigfloat?10 -QtCore.QCborKnownTags.COSE_Encrypt0?10 -QtCore.QCborKnownTags.COSE_Mac0?10 -QtCore.QCborKnownTags.COSE_Sign1?10 -QtCore.QCborKnownTags.ExpectedBase64url?10 -QtCore.QCborKnownTags.ExpectedBase64?10 -QtCore.QCborKnownTags.ExpectedBase16?10 -QtCore.QCborKnownTags.EncodedCbor?10 -QtCore.QCborKnownTags.Url?10 -QtCore.QCborKnownTags.Base64url?10 -QtCore.QCborKnownTags.Base64?10 -QtCore.QCborKnownTags.RegularExpression?10 -QtCore.QCborKnownTags.MimeMessage?10 -QtCore.QCborKnownTags.Uuid?10 -QtCore.QCborKnownTags.COSE_Encrypt?10 -QtCore.QCborKnownTags.COSE_Mac?10 -QtCore.QCborKnownTags.COSE_Sign?10 -QtCore.QCborKnownTags.Signature?10 -QtCore.QCborSimpleType?10 -QtCore.QCborSimpleType.False_?10 -QtCore.QCborSimpleType.True_?10 -QtCore.QCborSimpleType.Null?10 -QtCore.QCborSimpleType.Undefined?10 -QtCore.PYQT_VERSION?7 -QtCore.PYQT_VERSION_STR?7 -QtCore.QT_VERSION?7 -QtCore.QT_VERSION_STR?7 -QtCore.qRegisterResourceData?4(int, bytes, bytes, bytes) -> bool -QtCore.qUnregisterResourceData?4(int, bytes, bytes, bytes) -> bool -QtCore.pyqtSetPickleProtocol?4(Any) -QtCore.pyqtPickleProtocol?4() -> Any -QtCore.qEnvironmentVariable?4(str, QString) -> QString -QtCore.qEnvironmentVariable?4(str) -> QString -QtCore.qEnvironmentVariableIsEmpty?4(str) -> bool -QtCore.qEnvironmentVariableIsSet?4(str) -> bool -QtCore.qEnvironmentVariableIntValue?4(str) -> (int, bool) -QtCore.qVersion?4() -> str -QtCore.qCompress?4(bytes, int compressionLevel=-1) -> QByteArray -QtCore.qCompress?4(QByteArray, int compressionLevel=-1) -> QByteArray -QtCore.qUncompress?4(bytes) -> QByteArray -QtCore.qUncompress?4(QByteArray) -> QByteArray -QtCore.qChecksum?4(QByteArrayView, Qt.ChecksumType standard=Qt.ChecksumIso3309) -> int -QtCore.qAddPostRoutine?4(Callable[..., None]) -QtCore.qRemovePostRoutine?4(Callable[..., None]) -QtCore.qAddPreRoutine?4(Callable[..., None]) -QtCore.pyqtRemoveInputHook?4() -QtCore.pyqtRestoreInputHook?4() -QtCore.qCritical?4(str) -QtCore.qDebug?4(str) -QtCore.qFatal?4(str) -QtCore.qInfo?4(str) -QtCore.qWarning?4(str) -QtCore.qInstallMessageHandler?4(Callable[..., None]) -> Callable[..., None] -QtCore.qSetMessagePattern?4(QString) -QtCore.qFormatLogMessage?4(QtMsgType, QMessageLogContext, QString) -> QString -QtCore.qIsInf?4(float) -> bool -QtCore.qIsFinite?4(float) -> bool -QtCore.qIsNaN?4(float) -> bool -QtCore.qInf?4() -> float -QtCore.qSNaN?4() -> float -QtCore.qQNaN?4() -> float -QtCore.qFloatDistance?4(float, float) -> int -QtCore.qAbs?4(float) -> float -QtCore.qRound?4(float) -> int -QtCore.qRound64?4(float) -> int -QtCore.qFuzzyCompare?4(float, float) -> bool -QtCore.qFuzzyIsNull?4(float) -> bool -QtCore.pyqtClassInfo?4(str, str) -> Any -QtCore.pyqtEnum?4(enum.Enum=None) -> Any -QtCore.pyqtSlot?4(Any, str name=None, str result=None) -> Any -QtCore.QT_TR_NOOP?4(Any) -> Any -QtCore.QT_TRANSLATE_NOOP?4(Any, Any) -> Any -QtCore.Q_ARG?4(Any, Any) -> Any -QtCore.Q_RETURN_ARG?4(Any) -> Any -QtCore.qSetFieldWidth?4(int) -> QTextStreamManipulator -QtCore.qSetPadChar?4(QChar) -> QTextStreamManipulator -QtCore.qSetRealNumberPrecision?4(int) -> QTextStreamManipulator -QtCore.qYieldCpu?4() -QtCore.Qt.PermissionStatus?10 -QtCore.Qt.PermissionStatus.Undetermined?10 -QtCore.Qt.PermissionStatus.Granted?10 -QtCore.Qt.PermissionStatus.Denied?10 -QtCore.Qt.ColorScheme?10 -QtCore.Qt.ColorScheme.Unknown?10 -QtCore.Qt.ColorScheme.Light?10 -QtCore.Qt.ColorScheme.Dark?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Round?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Ceil?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Floor?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy.RoundPreferFloor?10 -QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough?10 -QtCore.Qt.ChecksumType?10 -QtCore.Qt.ChecksumType.ChecksumIso3309?10 -QtCore.Qt.ChecksumType.ChecksumItuV41?10 -QtCore.Qt.EnterKeyType?10 -QtCore.Qt.EnterKeyType.EnterKeyDefault?10 -QtCore.Qt.EnterKeyType.EnterKeyReturn?10 -QtCore.Qt.EnterKeyType.EnterKeyDone?10 -QtCore.Qt.EnterKeyType.EnterKeyGo?10 -QtCore.Qt.EnterKeyType.EnterKeySend?10 -QtCore.Qt.EnterKeyType.EnterKeySearch?10 -QtCore.Qt.EnterKeyType.EnterKeyNext?10 -QtCore.Qt.EnterKeyType.EnterKeyPrevious?10 -QtCore.Qt.ItemSelectionOperation?10 -QtCore.Qt.ItemSelectionOperation.ReplaceSelection?10 -QtCore.Qt.ItemSelectionOperation.AddToSelection?10 -QtCore.Qt.TabFocusBehavior?10 -QtCore.Qt.TabFocusBehavior.NoTabFocus?10 -QtCore.Qt.TabFocusBehavior.TabFocusTextControls?10 -QtCore.Qt.TabFocusBehavior.TabFocusListControls?10 -QtCore.Qt.TabFocusBehavior.TabFocusAllControls?10 -QtCore.Qt.MouseEventFlag?10 -QtCore.Qt.MouseEventFlag.MouseEventCreatedDoubleClick?10 -QtCore.Qt.MouseEventSource?10 -QtCore.Qt.MouseEventSource.MouseEventNotSynthesized?10 -QtCore.Qt.MouseEventSource.MouseEventSynthesizedBySystem?10 -QtCore.Qt.MouseEventSource.MouseEventSynthesizedByQt?10 -QtCore.Qt.MouseEventSource.MouseEventSynthesizedByApplication?10 -QtCore.Qt.ScrollPhase?10 -QtCore.Qt.ScrollPhase.ScrollBegin?10 -QtCore.Qt.ScrollPhase.ScrollUpdate?10 -QtCore.Qt.ScrollPhase.ScrollEnd?10 -QtCore.Qt.ScrollPhase.NoScrollPhase?10 -QtCore.Qt.ScrollPhase.ScrollMomentum?10 -QtCore.Qt.NativeGestureType?10 -QtCore.Qt.NativeGestureType.BeginNativeGesture?10 -QtCore.Qt.NativeGestureType.EndNativeGesture?10 -QtCore.Qt.NativeGestureType.PanNativeGesture?10 -QtCore.Qt.NativeGestureType.ZoomNativeGesture?10 -QtCore.Qt.NativeGestureType.SmartZoomNativeGesture?10 -QtCore.Qt.NativeGestureType.RotateNativeGesture?10 -QtCore.Qt.NativeGestureType.SwipeNativeGesture?10 -QtCore.Qt.Edge?10 -QtCore.Qt.Edge.TopEdge?10 -QtCore.Qt.Edge.LeftEdge?10 -QtCore.Qt.Edge.RightEdge?10 -QtCore.Qt.Edge.BottomEdge?10 -QtCore.Qt.ApplicationState?10 -QtCore.Qt.ApplicationState.ApplicationSuspended?10 -QtCore.Qt.ApplicationState.ApplicationHidden?10 -QtCore.Qt.ApplicationState.ApplicationInactive?10 -QtCore.Qt.ApplicationState.ApplicationActive?10 -QtCore.Qt.HitTestAccuracy?10 -QtCore.Qt.HitTestAccuracy.ExactHit?10 -QtCore.Qt.HitTestAccuracy.FuzzyHit?10 -QtCore.Qt.WhiteSpaceMode?10 -QtCore.Qt.WhiteSpaceMode.WhiteSpaceNormal?10 -QtCore.Qt.WhiteSpaceMode.WhiteSpacePre?10 -QtCore.Qt.WhiteSpaceMode.WhiteSpaceNoWrap?10 -QtCore.Qt.WhiteSpaceMode.WhiteSpaceModeUndefined?10 -QtCore.Qt.FindChildOption?10 -QtCore.Qt.FindChildOption.FindDirectChildrenOnly?10 -QtCore.Qt.FindChildOption.FindChildrenRecursively?10 -QtCore.Qt.ScreenOrientation?10 -QtCore.Qt.ScreenOrientation.PrimaryOrientation?10 -QtCore.Qt.ScreenOrientation.PortraitOrientation?10 -QtCore.Qt.ScreenOrientation.LandscapeOrientation?10 -QtCore.Qt.ScreenOrientation.InvertedPortraitOrientation?10 -QtCore.Qt.ScreenOrientation.InvertedLandscapeOrientation?10 -QtCore.Qt.CursorMoveStyle?10 -QtCore.Qt.CursorMoveStyle.LogicalMoveStyle?10 -QtCore.Qt.CursorMoveStyle.VisualMoveStyle?10 -QtCore.Qt.NavigationMode?10 -QtCore.Qt.NavigationMode.NavigationModeNone?10 -QtCore.Qt.NavigationMode.NavigationModeKeypadTabOrder?10 -QtCore.Qt.NavigationMode.NavigationModeKeypadDirectional?10 -QtCore.Qt.NavigationMode.NavigationModeCursorAuto?10 -QtCore.Qt.NavigationMode.NavigationModeCursorForceVisible?10 -QtCore.Qt.GestureFlag?10 -QtCore.Qt.GestureFlag.DontStartGestureOnChildren?10 -QtCore.Qt.GestureFlag.ReceivePartialGestures?10 -QtCore.Qt.GestureFlag.IgnoredGesturesPropagateToParent?10 -QtCore.Qt.GestureType?10 -QtCore.Qt.GestureType.TapGesture?10 -QtCore.Qt.GestureType.TapAndHoldGesture?10 -QtCore.Qt.GestureType.PanGesture?10 -QtCore.Qt.GestureType.PinchGesture?10 -QtCore.Qt.GestureType.SwipeGesture?10 -QtCore.Qt.GestureType.CustomGesture?10 -QtCore.Qt.GestureState?10 -QtCore.Qt.GestureState.GestureStarted?10 -QtCore.Qt.GestureState.GestureUpdated?10 -QtCore.Qt.GestureState.GestureFinished?10 -QtCore.Qt.GestureState.GestureCanceled?10 -QtCore.Qt.TouchPointState?10 -QtCore.Qt.TouchPointState.TouchPointUnknownState?10 -QtCore.Qt.TouchPointState.TouchPointPressed?10 -QtCore.Qt.TouchPointState.TouchPointMoved?10 -QtCore.Qt.TouchPointState.TouchPointStationary?10 -QtCore.Qt.TouchPointState.TouchPointReleased?10 -QtCore.Qt.CoordinateSystem?10 -QtCore.Qt.CoordinateSystem.DeviceCoordinates?10 -QtCore.Qt.CoordinateSystem.LogicalCoordinates?10 -QtCore.Qt.AnchorPoint?10 -QtCore.Qt.AnchorPoint.AnchorLeft?10 -QtCore.Qt.AnchorPoint.AnchorHorizontalCenter?10 -QtCore.Qt.AnchorPoint.AnchorRight?10 -QtCore.Qt.AnchorPoint.AnchorTop?10 -QtCore.Qt.AnchorPoint.AnchorVerticalCenter?10 -QtCore.Qt.AnchorPoint.AnchorBottom?10 -QtCore.Qt.InputMethodHint?10 -QtCore.Qt.InputMethodHint.ImhNone?10 -QtCore.Qt.InputMethodHint.ImhHiddenText?10 -QtCore.Qt.InputMethodHint.ImhNoAutoUppercase?10 -QtCore.Qt.InputMethodHint.ImhPreferNumbers?10 -QtCore.Qt.InputMethodHint.ImhPreferUppercase?10 -QtCore.Qt.InputMethodHint.ImhPreferLowercase?10 -QtCore.Qt.InputMethodHint.ImhNoPredictiveText?10 -QtCore.Qt.InputMethodHint.ImhDigitsOnly?10 -QtCore.Qt.InputMethodHint.ImhFormattedNumbersOnly?10 -QtCore.Qt.InputMethodHint.ImhUppercaseOnly?10 -QtCore.Qt.InputMethodHint.ImhLowercaseOnly?10 -QtCore.Qt.InputMethodHint.ImhDialableCharactersOnly?10 -QtCore.Qt.InputMethodHint.ImhEmailCharactersOnly?10 -QtCore.Qt.InputMethodHint.ImhUrlCharactersOnly?10 -QtCore.Qt.InputMethodHint.ImhExclusiveInputMask?10 -QtCore.Qt.InputMethodHint.ImhSensitiveData?10 -QtCore.Qt.InputMethodHint.ImhDate?10 -QtCore.Qt.InputMethodHint.ImhTime?10 -QtCore.Qt.InputMethodHint.ImhPreferLatin?10 -QtCore.Qt.InputMethodHint.ImhLatinOnly?10 -QtCore.Qt.InputMethodHint.ImhMultiLine?10 -QtCore.Qt.InputMethodHint.ImhNoEditMenu?10 -QtCore.Qt.InputMethodHint.ImhNoTextHandles?10 -QtCore.Qt.TileRule?10 -QtCore.Qt.TileRule.StretchTile?10 -QtCore.Qt.TileRule.RepeatTile?10 -QtCore.Qt.TileRule.RoundTile?10 -QtCore.Qt.WindowFrameSection?10 -QtCore.Qt.WindowFrameSection.NoSection?10 -QtCore.Qt.WindowFrameSection.LeftSection?10 -QtCore.Qt.WindowFrameSection.TopLeftSection?10 -QtCore.Qt.WindowFrameSection.TopSection?10 -QtCore.Qt.WindowFrameSection.TopRightSection?10 -QtCore.Qt.WindowFrameSection.RightSection?10 -QtCore.Qt.WindowFrameSection.BottomRightSection?10 -QtCore.Qt.WindowFrameSection.BottomSection?10 -QtCore.Qt.WindowFrameSection.BottomLeftSection?10 -QtCore.Qt.WindowFrameSection.TitleBarArea?10 -QtCore.Qt.SizeHint?10 -QtCore.Qt.SizeHint.MinimumSize?10 -QtCore.Qt.SizeHint.PreferredSize?10 -QtCore.Qt.SizeHint.MaximumSize?10 -QtCore.Qt.SizeHint.MinimumDescent?10 -QtCore.Qt.SizeMode?10 -QtCore.Qt.SizeMode.AbsoluteSize?10 -QtCore.Qt.SizeMode.RelativeSize?10 -QtCore.Qt.EventPriority?10 -QtCore.Qt.EventPriority.HighEventPriority?10 -QtCore.Qt.EventPriority.NormalEventPriority?10 -QtCore.Qt.EventPriority.LowEventPriority?10 -QtCore.Qt.Axis?10 -QtCore.Qt.Axis.XAxis?10 -QtCore.Qt.Axis.YAxis?10 -QtCore.Qt.Axis.ZAxis?10 -QtCore.Qt.MaskMode?10 -QtCore.Qt.MaskMode.MaskInColor?10 -QtCore.Qt.MaskMode.MaskOutColor?10 -QtCore.Qt.TextInteractionFlag?10 -QtCore.Qt.TextInteractionFlag.NoTextInteraction?10 -QtCore.Qt.TextInteractionFlag.TextSelectableByMouse?10 -QtCore.Qt.TextInteractionFlag.TextSelectableByKeyboard?10 -QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse?10 -QtCore.Qt.TextInteractionFlag.LinksAccessibleByKeyboard?10 -QtCore.Qt.TextInteractionFlag.TextEditable?10 -QtCore.Qt.TextInteractionFlag.TextEditorInteraction?10 -QtCore.Qt.TextInteractionFlag.TextBrowserInteraction?10 -QtCore.Qt.ItemSelectionMode?10 -QtCore.Qt.ItemSelectionMode.ContainsItemShape?10 -QtCore.Qt.ItemSelectionMode.IntersectsItemShape?10 -QtCore.Qt.ItemSelectionMode.ContainsItemBoundingRect?10 -QtCore.Qt.ItemSelectionMode.IntersectsItemBoundingRect?10 -QtCore.Qt.ApplicationAttribute?10 -QtCore.Qt.ApplicationAttribute.AA_DontShowIconsInMenus?10 -QtCore.Qt.ApplicationAttribute.AA_NativeWindows?10 -QtCore.Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings?10 -QtCore.Qt.ApplicationAttribute.AA_DontUseNativeMenuBar?10 -QtCore.Qt.ApplicationAttribute.AA_MacDontSwapCtrlAndMeta?10 -QtCore.Qt.ApplicationAttribute.AA_Use96Dpi?10 -QtCore.Qt.ApplicationAttribute.AA_SynthesizeTouchForUnhandledMouseEvents?10 -QtCore.Qt.ApplicationAttribute.AA_SynthesizeMouseForUnhandledTouchEvents?10 -QtCore.Qt.ApplicationAttribute.AA_ForceRasterWidgets?10 -QtCore.Qt.ApplicationAttribute.AA_UseDesktopOpenGL?10 -QtCore.Qt.ApplicationAttribute.AA_UseOpenGLES?10 -QtCore.Qt.ApplicationAttribute.AA_UseSoftwareOpenGL?10 -QtCore.Qt.ApplicationAttribute.AA_ShareOpenGLContexts?10 -QtCore.Qt.ApplicationAttribute.AA_SetPalette?10 -QtCore.Qt.ApplicationAttribute.AA_PluginApplication?10 -QtCore.Qt.ApplicationAttribute.AA_UseStyleSheetPropagationInWidgetStyles?10 -QtCore.Qt.ApplicationAttribute.AA_DontUseNativeDialogs?10 -QtCore.Qt.ApplicationAttribute.AA_SynthesizeMouseForUnhandledTabletEvents?10 -QtCore.Qt.ApplicationAttribute.AA_CompressHighFrequencyEvents?10 -QtCore.Qt.ApplicationAttribute.AA_DontCheckOpenGLContextThreadAffinity?10 -QtCore.Qt.ApplicationAttribute.AA_DisableShaderDiskCache?10 -QtCore.Qt.ApplicationAttribute.AA_DontShowShortcutsInContextMenus?10 -QtCore.Qt.ApplicationAttribute.AA_CompressTabletEvents?10 -QtCore.Qt.ApplicationAttribute.AA_DisableSessionManager?10 -QtCore.Qt.ApplicationAttribute.AA_DisableNativeVirtualKeyboard?10 -QtCore.Qt.ApplicationAttribute.AA_QtQuickUseDefaultSizePolicy?10 -QtCore.Qt.WindowModality?10 -QtCore.Qt.WindowModality.NonModal?10 -QtCore.Qt.WindowModality.WindowModal?10 -QtCore.Qt.WindowModality.ApplicationModal?10 -QtCore.Qt.MatchFlag?10 -QtCore.Qt.MatchFlag.MatchExactly?10 -QtCore.Qt.MatchFlag.MatchFixedString?10 -QtCore.Qt.MatchFlag.MatchContains?10 -QtCore.Qt.MatchFlag.MatchStartsWith?10 -QtCore.Qt.MatchFlag.MatchEndsWith?10 -QtCore.Qt.MatchFlag.MatchWildcard?10 -QtCore.Qt.MatchFlag.MatchCaseSensitive?10 -QtCore.Qt.MatchFlag.MatchWrap?10 -QtCore.Qt.MatchFlag.MatchRecursive?10 -QtCore.Qt.MatchFlag.MatchRegularExpression?10 -QtCore.Qt.ItemFlag?10 -QtCore.Qt.ItemFlag.NoItemFlags?10 -QtCore.Qt.ItemFlag.ItemIsSelectable?10 -QtCore.Qt.ItemFlag.ItemIsEditable?10 -QtCore.Qt.ItemFlag.ItemIsDragEnabled?10 -QtCore.Qt.ItemFlag.ItemIsDropEnabled?10 -QtCore.Qt.ItemFlag.ItemIsUserCheckable?10 -QtCore.Qt.ItemFlag.ItemIsEnabled?10 -QtCore.Qt.ItemFlag.ItemNeverHasChildren?10 -QtCore.Qt.ItemFlag.ItemIsUserTristate?10 -QtCore.Qt.ItemFlag.ItemIsAutoTristate?10 -QtCore.Qt.ItemDataRole?10 -QtCore.Qt.ItemDataRole.DisplayRole?10 -QtCore.Qt.ItemDataRole.DecorationRole?10 -QtCore.Qt.ItemDataRole.EditRole?10 -QtCore.Qt.ItemDataRole.ToolTipRole?10 -QtCore.Qt.ItemDataRole.StatusTipRole?10 -QtCore.Qt.ItemDataRole.WhatsThisRole?10 -QtCore.Qt.ItemDataRole.FontRole?10 -QtCore.Qt.ItemDataRole.TextAlignmentRole?10 -QtCore.Qt.ItemDataRole.BackgroundRole?10 -QtCore.Qt.ItemDataRole.ForegroundRole?10 -QtCore.Qt.ItemDataRole.CheckStateRole?10 -QtCore.Qt.ItemDataRole.AccessibleTextRole?10 -QtCore.Qt.ItemDataRole.AccessibleDescriptionRole?10 -QtCore.Qt.ItemDataRole.SizeHintRole?10 -QtCore.Qt.ItemDataRole.InitialSortOrderRole?10 -QtCore.Qt.ItemDataRole.UserRole?10 -QtCore.Qt.CheckState?10 -QtCore.Qt.CheckState.Unchecked?10 -QtCore.Qt.CheckState.PartiallyChecked?10 -QtCore.Qt.CheckState.Checked?10 -QtCore.Qt.DropAction?10 -QtCore.Qt.DropAction.CopyAction?10 -QtCore.Qt.DropAction.MoveAction?10 -QtCore.Qt.DropAction.LinkAction?10 -QtCore.Qt.DropAction.ActionMask?10 -QtCore.Qt.DropAction.TargetMoveAction?10 -QtCore.Qt.DropAction.IgnoreAction?10 -QtCore.Qt.LayoutDirection?10 -QtCore.Qt.LayoutDirection.LeftToRight?10 -QtCore.Qt.LayoutDirection.RightToLeft?10 -QtCore.Qt.LayoutDirection.LayoutDirectionAuto?10 -QtCore.Qt.ToolButtonStyle?10 -QtCore.Qt.ToolButtonStyle.ToolButtonIconOnly?10 -QtCore.Qt.ToolButtonStyle.ToolButtonTextOnly?10 -QtCore.Qt.ToolButtonStyle.ToolButtonTextBesideIcon?10 -QtCore.Qt.ToolButtonStyle.ToolButtonTextUnderIcon?10 -QtCore.Qt.ToolButtonStyle.ToolButtonFollowStyle?10 -QtCore.Qt.InputMethodQuery?10 -QtCore.Qt.InputMethodQuery.ImFont?10 -QtCore.Qt.InputMethodQuery.ImCursorPosition?10 -QtCore.Qt.InputMethodQuery.ImSurroundingText?10 -QtCore.Qt.InputMethodQuery.ImCurrentSelection?10 -QtCore.Qt.InputMethodQuery.ImMaximumTextLength?10 -QtCore.Qt.InputMethodQuery.ImAnchorPosition?10 -QtCore.Qt.InputMethodQuery.ImEnabled?10 -QtCore.Qt.InputMethodQuery.ImCursorRectangle?10 -QtCore.Qt.InputMethodQuery.ImHints?10 -QtCore.Qt.InputMethodQuery.ImPreferredLanguage?10 -QtCore.Qt.InputMethodQuery.ImPlatformData?10 -QtCore.Qt.InputMethodQuery.ImQueryInput?10 -QtCore.Qt.InputMethodQuery.ImQueryAll?10 -QtCore.Qt.InputMethodQuery.ImAbsolutePosition?10 -QtCore.Qt.InputMethodQuery.ImTextBeforeCursor?10 -QtCore.Qt.InputMethodQuery.ImTextAfterCursor?10 -QtCore.Qt.InputMethodQuery.ImEnterKeyType?10 -QtCore.Qt.InputMethodQuery.ImAnchorRectangle?10 -QtCore.Qt.InputMethodQuery.ImInputItemClipRectangle?10 -QtCore.Qt.InputMethodQuery.ImReadOnly?10 -QtCore.Qt.ContextMenuPolicy?10 -QtCore.Qt.ContextMenuPolicy.NoContextMenu?10 -QtCore.Qt.ContextMenuPolicy.PreventContextMenu?10 -QtCore.Qt.ContextMenuPolicy.DefaultContextMenu?10 -QtCore.Qt.ContextMenuPolicy.ActionsContextMenu?10 -QtCore.Qt.ContextMenuPolicy.CustomContextMenu?10 -QtCore.Qt.FocusReason?10 -QtCore.Qt.FocusReason.MouseFocusReason?10 -QtCore.Qt.FocusReason.TabFocusReason?10 -QtCore.Qt.FocusReason.BacktabFocusReason?10 -QtCore.Qt.FocusReason.ActiveWindowFocusReason?10 -QtCore.Qt.FocusReason.PopupFocusReason?10 -QtCore.Qt.FocusReason.ShortcutFocusReason?10 -QtCore.Qt.FocusReason.MenuBarFocusReason?10 -QtCore.Qt.FocusReason.OtherFocusReason?10 -QtCore.Qt.FocusReason.NoFocusReason?10 -QtCore.Qt.TransformationMode?10 -QtCore.Qt.TransformationMode.FastTransformation?10 -QtCore.Qt.TransformationMode.SmoothTransformation?10 -QtCore.Qt.ClipOperation?10 -QtCore.Qt.ClipOperation.NoClip?10 -QtCore.Qt.ClipOperation.ReplaceClip?10 -QtCore.Qt.ClipOperation.IntersectClip?10 -QtCore.Qt.FillRule?10 -QtCore.Qt.FillRule.OddEvenFill?10 -QtCore.Qt.FillRule.WindingFill?10 -QtCore.Qt.ShortcutContext?10 -QtCore.Qt.ShortcutContext.WidgetShortcut?10 -QtCore.Qt.ShortcutContext.WindowShortcut?10 -QtCore.Qt.ShortcutContext.ApplicationShortcut?10 -QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut?10 -QtCore.Qt.ConnectionType?10 -QtCore.Qt.ConnectionType.AutoConnection?10 -QtCore.Qt.ConnectionType.DirectConnection?10 -QtCore.Qt.ConnectionType.QueuedConnection?10 -QtCore.Qt.ConnectionType.BlockingQueuedConnection?10 -QtCore.Qt.ConnectionType.UniqueConnection?10 -QtCore.Qt.ConnectionType.SingleShotConnection?10 -QtCore.Qt.Corner?10 -QtCore.Qt.Corner.TopLeftCorner?10 -QtCore.Qt.Corner.TopRightCorner?10 -QtCore.Qt.Corner.BottomLeftCorner?10 -QtCore.Qt.Corner.BottomRightCorner?10 -QtCore.Qt.CaseSensitivity?10 -QtCore.Qt.CaseSensitivity.CaseInsensitive?10 -QtCore.Qt.CaseSensitivity.CaseSensitive?10 -QtCore.Qt.ScrollBarPolicy?10 -QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded?10 -QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff?10 -QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn?10 -QtCore.Qt.DayOfWeek?10 -QtCore.Qt.DayOfWeek.Monday?10 -QtCore.Qt.DayOfWeek.Tuesday?10 -QtCore.Qt.DayOfWeek.Wednesday?10 -QtCore.Qt.DayOfWeek.Thursday?10 -QtCore.Qt.DayOfWeek.Friday?10 -QtCore.Qt.DayOfWeek.Saturday?10 -QtCore.Qt.DayOfWeek.Sunday?10 -QtCore.Qt.TimeSpec?10 -QtCore.Qt.TimeSpec.LocalTime?10 -QtCore.Qt.TimeSpec.UTC?10 -QtCore.Qt.TimeSpec.OffsetFromUTC?10 -QtCore.Qt.TimeSpec.TimeZone?10 -QtCore.Qt.DateFormat?10 -QtCore.Qt.DateFormat.TextDate?10 -QtCore.Qt.DateFormat.ISODate?10 -QtCore.Qt.DateFormat.ISODateWithMs?10 -QtCore.Qt.DateFormat.RFC2822Date?10 -QtCore.Qt.ToolBarArea?10 -QtCore.Qt.ToolBarArea.LeftToolBarArea?10 -QtCore.Qt.ToolBarArea.RightToolBarArea?10 -QtCore.Qt.ToolBarArea.TopToolBarArea?10 -QtCore.Qt.ToolBarArea.BottomToolBarArea?10 -QtCore.Qt.ToolBarArea.AllToolBarAreas?10 -QtCore.Qt.ToolBarArea.NoToolBarArea?10 -QtCore.Qt.TimerType?10 -QtCore.Qt.TimerType.PreciseTimer?10 -QtCore.Qt.TimerType.CoarseTimer?10 -QtCore.Qt.TimerType.VeryCoarseTimer?10 -QtCore.Qt.DockWidgetArea?10 -QtCore.Qt.DockWidgetArea.LeftDockWidgetArea?10 -QtCore.Qt.DockWidgetArea.RightDockWidgetArea?10 -QtCore.Qt.DockWidgetArea.TopDockWidgetArea?10 -QtCore.Qt.DockWidgetArea.BottomDockWidgetArea?10 -QtCore.Qt.DockWidgetArea.AllDockWidgetAreas?10 -QtCore.Qt.DockWidgetArea.NoDockWidgetArea?10 -QtCore.Qt.AspectRatioMode?10 -QtCore.Qt.AspectRatioMode.IgnoreAspectRatio?10 -QtCore.Qt.AspectRatioMode.KeepAspectRatio?10 -QtCore.Qt.AspectRatioMode.KeepAspectRatioByExpanding?10 -QtCore.Qt.TextFormat?10 -QtCore.Qt.TextFormat.PlainText?10 -QtCore.Qt.TextFormat.RichText?10 -QtCore.Qt.TextFormat.AutoText?10 -QtCore.Qt.TextFormat.MarkdownText?10 -QtCore.Qt.CursorShape?10 -QtCore.Qt.CursorShape.ArrowCursor?10 -QtCore.Qt.CursorShape.UpArrowCursor?10 -QtCore.Qt.CursorShape.CrossCursor?10 -QtCore.Qt.CursorShape.WaitCursor?10 -QtCore.Qt.CursorShape.IBeamCursor?10 -QtCore.Qt.CursorShape.SizeVerCursor?10 -QtCore.Qt.CursorShape.SizeHorCursor?10 -QtCore.Qt.CursorShape.SizeBDiagCursor?10 -QtCore.Qt.CursorShape.SizeFDiagCursor?10 -QtCore.Qt.CursorShape.SizeAllCursor?10 -QtCore.Qt.CursorShape.BlankCursor?10 -QtCore.Qt.CursorShape.SplitVCursor?10 -QtCore.Qt.CursorShape.SplitHCursor?10 -QtCore.Qt.CursorShape.PointingHandCursor?10 -QtCore.Qt.CursorShape.ForbiddenCursor?10 -QtCore.Qt.CursorShape.OpenHandCursor?10 -QtCore.Qt.CursorShape.ClosedHandCursor?10 -QtCore.Qt.CursorShape.WhatsThisCursor?10 -QtCore.Qt.CursorShape.BusyCursor?10 -QtCore.Qt.CursorShape.LastCursor?10 -QtCore.Qt.CursorShape.BitmapCursor?10 -QtCore.Qt.CursorShape.CustomCursor?10 -QtCore.Qt.CursorShape.DragCopyCursor?10 -QtCore.Qt.CursorShape.DragMoveCursor?10 -QtCore.Qt.CursorShape.DragLinkCursor?10 -QtCore.Qt.UIEffect?10 -QtCore.Qt.UIEffect.UI_General?10 -QtCore.Qt.UIEffect.UI_AnimateMenu?10 -QtCore.Qt.UIEffect.UI_FadeMenu?10 -QtCore.Qt.UIEffect.UI_AnimateCombo?10 -QtCore.Qt.UIEffect.UI_AnimateTooltip?10 -QtCore.Qt.UIEffect.UI_FadeTooltip?10 -QtCore.Qt.UIEffect.UI_AnimateToolBox?10 -QtCore.Qt.BrushStyle?10 -QtCore.Qt.BrushStyle.NoBrush?10 -QtCore.Qt.BrushStyle.SolidPattern?10 -QtCore.Qt.BrushStyle.Dense1Pattern?10 -QtCore.Qt.BrushStyle.Dense2Pattern?10 -QtCore.Qt.BrushStyle.Dense3Pattern?10 -QtCore.Qt.BrushStyle.Dense4Pattern?10 -QtCore.Qt.BrushStyle.Dense5Pattern?10 -QtCore.Qt.BrushStyle.Dense6Pattern?10 -QtCore.Qt.BrushStyle.Dense7Pattern?10 -QtCore.Qt.BrushStyle.HorPattern?10 -QtCore.Qt.BrushStyle.VerPattern?10 -QtCore.Qt.BrushStyle.CrossPattern?10 -QtCore.Qt.BrushStyle.BDiagPattern?10 -QtCore.Qt.BrushStyle.FDiagPattern?10 -QtCore.Qt.BrushStyle.DiagCrossPattern?10 -QtCore.Qt.BrushStyle.LinearGradientPattern?10 -QtCore.Qt.BrushStyle.RadialGradientPattern?10 -QtCore.Qt.BrushStyle.ConicalGradientPattern?10 -QtCore.Qt.BrushStyle.TexturePattern?10 -QtCore.Qt.PenJoinStyle?10 -QtCore.Qt.PenJoinStyle.MiterJoin?10 -QtCore.Qt.PenJoinStyle.BevelJoin?10 -QtCore.Qt.PenJoinStyle.RoundJoin?10 -QtCore.Qt.PenJoinStyle.MPenJoinStyle?10 -QtCore.Qt.PenJoinStyle.SvgMiterJoin?10 -QtCore.Qt.PenCapStyle?10 -QtCore.Qt.PenCapStyle.FlatCap?10 -QtCore.Qt.PenCapStyle.SquareCap?10 -QtCore.Qt.PenCapStyle.RoundCap?10 -QtCore.Qt.PenStyle?10 -QtCore.Qt.PenStyle.NoPen?10 -QtCore.Qt.PenStyle.SolidLine?10 -QtCore.Qt.PenStyle.DashLine?10 -QtCore.Qt.PenStyle.DotLine?10 -QtCore.Qt.PenStyle.DashDotLine?10 -QtCore.Qt.PenStyle.DashDotDotLine?10 -QtCore.Qt.PenStyle.CustomDashLine?10 -QtCore.Qt.ArrowType?10 -QtCore.Qt.ArrowType.NoArrow?10 -QtCore.Qt.ArrowType.UpArrow?10 -QtCore.Qt.ArrowType.DownArrow?10 -QtCore.Qt.ArrowType.LeftArrow?10 -QtCore.Qt.ArrowType.RightArrow?10 -QtCore.Qt.Key?10 -QtCore.Qt.Key.Key_Escape?10 -QtCore.Qt.Key.Key_Tab?10 -QtCore.Qt.Key.Key_Backtab?10 -QtCore.Qt.Key.Key_Backspace?10 -QtCore.Qt.Key.Key_Return?10 -QtCore.Qt.Key.Key_Enter?10 -QtCore.Qt.Key.Key_Insert?10 -QtCore.Qt.Key.Key_Delete?10 -QtCore.Qt.Key.Key_Pause?10 -QtCore.Qt.Key.Key_Print?10 -QtCore.Qt.Key.Key_SysReq?10 -QtCore.Qt.Key.Key_Clear?10 -QtCore.Qt.Key.Key_Home?10 -QtCore.Qt.Key.Key_End?10 -QtCore.Qt.Key.Key_Left?10 -QtCore.Qt.Key.Key_Up?10 -QtCore.Qt.Key.Key_Right?10 -QtCore.Qt.Key.Key_Down?10 -QtCore.Qt.Key.Key_PageUp?10 -QtCore.Qt.Key.Key_PageDown?10 -QtCore.Qt.Key.Key_Shift?10 -QtCore.Qt.Key.Key_Control?10 -QtCore.Qt.Key.Key_Meta?10 -QtCore.Qt.Key.Key_Alt?10 -QtCore.Qt.Key.Key_CapsLock?10 -QtCore.Qt.Key.Key_NumLock?10 -QtCore.Qt.Key.Key_ScrollLock?10 -QtCore.Qt.Key.Key_F1?10 -QtCore.Qt.Key.Key_F2?10 -QtCore.Qt.Key.Key_F3?10 -QtCore.Qt.Key.Key_F4?10 -QtCore.Qt.Key.Key_F5?10 -QtCore.Qt.Key.Key_F6?10 -QtCore.Qt.Key.Key_F7?10 -QtCore.Qt.Key.Key_F8?10 -QtCore.Qt.Key.Key_F9?10 -QtCore.Qt.Key.Key_F10?10 -QtCore.Qt.Key.Key_F11?10 -QtCore.Qt.Key.Key_F12?10 -QtCore.Qt.Key.Key_F13?10 -QtCore.Qt.Key.Key_F14?10 -QtCore.Qt.Key.Key_F15?10 -QtCore.Qt.Key.Key_F16?10 -QtCore.Qt.Key.Key_F17?10 -QtCore.Qt.Key.Key_F18?10 -QtCore.Qt.Key.Key_F19?10 -QtCore.Qt.Key.Key_F20?10 -QtCore.Qt.Key.Key_F21?10 -QtCore.Qt.Key.Key_F22?10 -QtCore.Qt.Key.Key_F23?10 -QtCore.Qt.Key.Key_F24?10 -QtCore.Qt.Key.Key_F25?10 -QtCore.Qt.Key.Key_F26?10 -QtCore.Qt.Key.Key_F27?10 -QtCore.Qt.Key.Key_F28?10 -QtCore.Qt.Key.Key_F29?10 -QtCore.Qt.Key.Key_F30?10 -QtCore.Qt.Key.Key_F31?10 -QtCore.Qt.Key.Key_F32?10 -QtCore.Qt.Key.Key_F33?10 -QtCore.Qt.Key.Key_F34?10 -QtCore.Qt.Key.Key_F35?10 -QtCore.Qt.Key.Key_Super_L?10 -QtCore.Qt.Key.Key_Super_R?10 -QtCore.Qt.Key.Key_Menu?10 -QtCore.Qt.Key.Key_Hyper_L?10 -QtCore.Qt.Key.Key_Hyper_R?10 -QtCore.Qt.Key.Key_Help?10 -QtCore.Qt.Key.Key_Direction_L?10 -QtCore.Qt.Key.Key_Direction_R?10 -QtCore.Qt.Key.Key_Space?10 -QtCore.Qt.Key.Key_Any?10 -QtCore.Qt.Key.Key_Exclam?10 -QtCore.Qt.Key.Key_QuoteDbl?10 -QtCore.Qt.Key.Key_NumberSign?10 -QtCore.Qt.Key.Key_Dollar?10 -QtCore.Qt.Key.Key_Percent?10 -QtCore.Qt.Key.Key_Ampersand?10 -QtCore.Qt.Key.Key_Apostrophe?10 -QtCore.Qt.Key.Key_ParenLeft?10 -QtCore.Qt.Key.Key_ParenRight?10 -QtCore.Qt.Key.Key_Asterisk?10 -QtCore.Qt.Key.Key_Plus?10 -QtCore.Qt.Key.Key_Comma?10 -QtCore.Qt.Key.Key_Minus?10 -QtCore.Qt.Key.Key_Period?10 -QtCore.Qt.Key.Key_Slash?10 -QtCore.Qt.Key.Key_0?10 -QtCore.Qt.Key.Key_1?10 -QtCore.Qt.Key.Key_2?10 -QtCore.Qt.Key.Key_3?10 -QtCore.Qt.Key.Key_4?10 -QtCore.Qt.Key.Key_5?10 -QtCore.Qt.Key.Key_6?10 -QtCore.Qt.Key.Key_7?10 -QtCore.Qt.Key.Key_8?10 -QtCore.Qt.Key.Key_9?10 -QtCore.Qt.Key.Key_Colon?10 -QtCore.Qt.Key.Key_Semicolon?10 -QtCore.Qt.Key.Key_Less?10 -QtCore.Qt.Key.Key_Equal?10 -QtCore.Qt.Key.Key_Greater?10 -QtCore.Qt.Key.Key_Question?10 -QtCore.Qt.Key.Key_At?10 -QtCore.Qt.Key.Key_A?10 -QtCore.Qt.Key.Key_B?10 -QtCore.Qt.Key.Key_C?10 -QtCore.Qt.Key.Key_D?10 -QtCore.Qt.Key.Key_E?10 -QtCore.Qt.Key.Key_F?10 -QtCore.Qt.Key.Key_G?10 -QtCore.Qt.Key.Key_H?10 -QtCore.Qt.Key.Key_I?10 -QtCore.Qt.Key.Key_J?10 -QtCore.Qt.Key.Key_K?10 -QtCore.Qt.Key.Key_L?10 -QtCore.Qt.Key.Key_M?10 -QtCore.Qt.Key.Key_N?10 -QtCore.Qt.Key.Key_O?10 -QtCore.Qt.Key.Key_P?10 -QtCore.Qt.Key.Key_Q?10 -QtCore.Qt.Key.Key_R?10 -QtCore.Qt.Key.Key_S?10 -QtCore.Qt.Key.Key_T?10 -QtCore.Qt.Key.Key_U?10 -QtCore.Qt.Key.Key_V?10 -QtCore.Qt.Key.Key_W?10 -QtCore.Qt.Key.Key_X?10 -QtCore.Qt.Key.Key_Y?10 -QtCore.Qt.Key.Key_Z?10 -QtCore.Qt.Key.Key_BracketLeft?10 -QtCore.Qt.Key.Key_Backslash?10 -QtCore.Qt.Key.Key_BracketRight?10 -QtCore.Qt.Key.Key_AsciiCircum?10 -QtCore.Qt.Key.Key_Underscore?10 -QtCore.Qt.Key.Key_QuoteLeft?10 -QtCore.Qt.Key.Key_BraceLeft?10 -QtCore.Qt.Key.Key_Bar?10 -QtCore.Qt.Key.Key_BraceRight?10 -QtCore.Qt.Key.Key_AsciiTilde?10 -QtCore.Qt.Key.Key_nobreakspace?10 -QtCore.Qt.Key.Key_exclamdown?10 -QtCore.Qt.Key.Key_cent?10 -QtCore.Qt.Key.Key_sterling?10 -QtCore.Qt.Key.Key_currency?10 -QtCore.Qt.Key.Key_yen?10 -QtCore.Qt.Key.Key_brokenbar?10 -QtCore.Qt.Key.Key_section?10 -QtCore.Qt.Key.Key_diaeresis?10 -QtCore.Qt.Key.Key_copyright?10 -QtCore.Qt.Key.Key_ordfeminine?10 -QtCore.Qt.Key.Key_guillemotleft?10 -QtCore.Qt.Key.Key_notsign?10 -QtCore.Qt.Key.Key_hyphen?10 -QtCore.Qt.Key.Key_registered?10 -QtCore.Qt.Key.Key_macron?10 -QtCore.Qt.Key.Key_degree?10 -QtCore.Qt.Key.Key_plusminus?10 -QtCore.Qt.Key.Key_twosuperior?10 -QtCore.Qt.Key.Key_threesuperior?10 -QtCore.Qt.Key.Key_acute?10 -QtCore.Qt.Key.Key_mu?10 -QtCore.Qt.Key.Key_paragraph?10 -QtCore.Qt.Key.Key_periodcentered?10 -QtCore.Qt.Key.Key_cedilla?10 -QtCore.Qt.Key.Key_onesuperior?10 -QtCore.Qt.Key.Key_masculine?10 -QtCore.Qt.Key.Key_guillemotright?10 -QtCore.Qt.Key.Key_onequarter?10 -QtCore.Qt.Key.Key_onehalf?10 -QtCore.Qt.Key.Key_threequarters?10 -QtCore.Qt.Key.Key_questiondown?10 -QtCore.Qt.Key.Key_Agrave?10 -QtCore.Qt.Key.Key_Aacute?10 -QtCore.Qt.Key.Key_Acircumflex?10 -QtCore.Qt.Key.Key_Atilde?10 -QtCore.Qt.Key.Key_Adiaeresis?10 -QtCore.Qt.Key.Key_Aring?10 -QtCore.Qt.Key.Key_AE?10 -QtCore.Qt.Key.Key_Ccedilla?10 -QtCore.Qt.Key.Key_Egrave?10 -QtCore.Qt.Key.Key_Eacute?10 -QtCore.Qt.Key.Key_Ecircumflex?10 -QtCore.Qt.Key.Key_Ediaeresis?10 -QtCore.Qt.Key.Key_Igrave?10 -QtCore.Qt.Key.Key_Iacute?10 -QtCore.Qt.Key.Key_Icircumflex?10 -QtCore.Qt.Key.Key_Idiaeresis?10 -QtCore.Qt.Key.Key_ETH?10 -QtCore.Qt.Key.Key_Ntilde?10 -QtCore.Qt.Key.Key_Ograve?10 -QtCore.Qt.Key.Key_Oacute?10 -QtCore.Qt.Key.Key_Ocircumflex?10 -QtCore.Qt.Key.Key_Otilde?10 -QtCore.Qt.Key.Key_Odiaeresis?10 -QtCore.Qt.Key.Key_multiply?10 -QtCore.Qt.Key.Key_Ooblique?10 -QtCore.Qt.Key.Key_Ugrave?10 -QtCore.Qt.Key.Key_Uacute?10 -QtCore.Qt.Key.Key_Ucircumflex?10 -QtCore.Qt.Key.Key_Udiaeresis?10 -QtCore.Qt.Key.Key_Yacute?10 -QtCore.Qt.Key.Key_THORN?10 -QtCore.Qt.Key.Key_ssharp?10 -QtCore.Qt.Key.Key_division?10 -QtCore.Qt.Key.Key_ydiaeresis?10 -QtCore.Qt.Key.Key_AltGr?10 -QtCore.Qt.Key.Key_Multi_key?10 -QtCore.Qt.Key.Key_Codeinput?10 -QtCore.Qt.Key.Key_SingleCandidate?10 -QtCore.Qt.Key.Key_MultipleCandidate?10 -QtCore.Qt.Key.Key_PreviousCandidate?10 -QtCore.Qt.Key.Key_Mode_switch?10 -QtCore.Qt.Key.Key_Kanji?10 -QtCore.Qt.Key.Key_Muhenkan?10 -QtCore.Qt.Key.Key_Henkan?10 -QtCore.Qt.Key.Key_Romaji?10 -QtCore.Qt.Key.Key_Hiragana?10 -QtCore.Qt.Key.Key_Katakana?10 -QtCore.Qt.Key.Key_Hiragana_Katakana?10 -QtCore.Qt.Key.Key_Zenkaku?10 -QtCore.Qt.Key.Key_Hankaku?10 -QtCore.Qt.Key.Key_Zenkaku_Hankaku?10 -QtCore.Qt.Key.Key_Touroku?10 -QtCore.Qt.Key.Key_Massyo?10 -QtCore.Qt.Key.Key_Kana_Lock?10 -QtCore.Qt.Key.Key_Kana_Shift?10 -QtCore.Qt.Key.Key_Eisu_Shift?10 -QtCore.Qt.Key.Key_Eisu_toggle?10 -QtCore.Qt.Key.Key_Hangul?10 -QtCore.Qt.Key.Key_Hangul_Start?10 -QtCore.Qt.Key.Key_Hangul_End?10 -QtCore.Qt.Key.Key_Hangul_Hanja?10 -QtCore.Qt.Key.Key_Hangul_Jamo?10 -QtCore.Qt.Key.Key_Hangul_Romaja?10 -QtCore.Qt.Key.Key_Hangul_Jeonja?10 -QtCore.Qt.Key.Key_Hangul_Banja?10 -QtCore.Qt.Key.Key_Hangul_PreHanja?10 -QtCore.Qt.Key.Key_Hangul_PostHanja?10 -QtCore.Qt.Key.Key_Hangul_Special?10 -QtCore.Qt.Key.Key_Dead_Grave?10 -QtCore.Qt.Key.Key_Dead_Acute?10 -QtCore.Qt.Key.Key_Dead_Circumflex?10 -QtCore.Qt.Key.Key_Dead_Tilde?10 -QtCore.Qt.Key.Key_Dead_Macron?10 -QtCore.Qt.Key.Key_Dead_Breve?10 -QtCore.Qt.Key.Key_Dead_Abovedot?10 -QtCore.Qt.Key.Key_Dead_Diaeresis?10 -QtCore.Qt.Key.Key_Dead_Abovering?10 -QtCore.Qt.Key.Key_Dead_Doubleacute?10 -QtCore.Qt.Key.Key_Dead_Caron?10 -QtCore.Qt.Key.Key_Dead_Cedilla?10 -QtCore.Qt.Key.Key_Dead_Ogonek?10 -QtCore.Qt.Key.Key_Dead_Iota?10 -QtCore.Qt.Key.Key_Dead_Voiced_Sound?10 -QtCore.Qt.Key.Key_Dead_Semivoiced_Sound?10 -QtCore.Qt.Key.Key_Dead_Belowdot?10 -QtCore.Qt.Key.Key_Dead_Hook?10 -QtCore.Qt.Key.Key_Dead_Horn?10 -QtCore.Qt.Key.Key_Back?10 -QtCore.Qt.Key.Key_Forward?10 -QtCore.Qt.Key.Key_Stop?10 -QtCore.Qt.Key.Key_Refresh?10 -QtCore.Qt.Key.Key_VolumeDown?10 -QtCore.Qt.Key.Key_VolumeMute?10 -QtCore.Qt.Key.Key_VolumeUp?10 -QtCore.Qt.Key.Key_BassBoost?10 -QtCore.Qt.Key.Key_BassUp?10 -QtCore.Qt.Key.Key_BassDown?10 -QtCore.Qt.Key.Key_TrebleUp?10 -QtCore.Qt.Key.Key_TrebleDown?10 -QtCore.Qt.Key.Key_MediaPlay?10 -QtCore.Qt.Key.Key_MediaStop?10 -QtCore.Qt.Key.Key_MediaPrevious?10 -QtCore.Qt.Key.Key_MediaNext?10 -QtCore.Qt.Key.Key_MediaRecord?10 -QtCore.Qt.Key.Key_HomePage?10 -QtCore.Qt.Key.Key_Favorites?10 -QtCore.Qt.Key.Key_Search?10 -QtCore.Qt.Key.Key_Standby?10 -QtCore.Qt.Key.Key_OpenUrl?10 -QtCore.Qt.Key.Key_LaunchMail?10 -QtCore.Qt.Key.Key_LaunchMedia?10 -QtCore.Qt.Key.Key_Launch0?10 -QtCore.Qt.Key.Key_Launch1?10 -QtCore.Qt.Key.Key_Launch2?10 -QtCore.Qt.Key.Key_Launch3?10 -QtCore.Qt.Key.Key_Launch4?10 -QtCore.Qt.Key.Key_Launch5?10 -QtCore.Qt.Key.Key_Launch6?10 -QtCore.Qt.Key.Key_Launch7?10 -QtCore.Qt.Key.Key_Launch8?10 -QtCore.Qt.Key.Key_Launch9?10 -QtCore.Qt.Key.Key_LaunchA?10 -QtCore.Qt.Key.Key_LaunchB?10 -QtCore.Qt.Key.Key_LaunchC?10 -QtCore.Qt.Key.Key_LaunchD?10 -QtCore.Qt.Key.Key_LaunchE?10 -QtCore.Qt.Key.Key_LaunchF?10 -QtCore.Qt.Key.Key_MediaLast?10 -QtCore.Qt.Key.Key_Select?10 -QtCore.Qt.Key.Key_Yes?10 -QtCore.Qt.Key.Key_No?10 -QtCore.Qt.Key.Key_Context1?10 -QtCore.Qt.Key.Key_Context2?10 -QtCore.Qt.Key.Key_Context3?10 -QtCore.Qt.Key.Key_Context4?10 -QtCore.Qt.Key.Key_Call?10 -QtCore.Qt.Key.Key_Hangup?10 -QtCore.Qt.Key.Key_Flip?10 -QtCore.Qt.Key.Key_unknown?10 -QtCore.Qt.Key.Key_Execute?10 -QtCore.Qt.Key.Key_Printer?10 -QtCore.Qt.Key.Key_Play?10 -QtCore.Qt.Key.Key_Sleep?10 -QtCore.Qt.Key.Key_Zoom?10 -QtCore.Qt.Key.Key_Cancel?10 -QtCore.Qt.Key.Key_MonBrightnessUp?10 -QtCore.Qt.Key.Key_MonBrightnessDown?10 -QtCore.Qt.Key.Key_KeyboardLightOnOff?10 -QtCore.Qt.Key.Key_KeyboardBrightnessUp?10 -QtCore.Qt.Key.Key_KeyboardBrightnessDown?10 -QtCore.Qt.Key.Key_PowerOff?10 -QtCore.Qt.Key.Key_WakeUp?10 -QtCore.Qt.Key.Key_Eject?10 -QtCore.Qt.Key.Key_ScreenSaver?10 -QtCore.Qt.Key.Key_WWW?10 -QtCore.Qt.Key.Key_Memo?10 -QtCore.Qt.Key.Key_LightBulb?10 -QtCore.Qt.Key.Key_Shop?10 -QtCore.Qt.Key.Key_History?10 -QtCore.Qt.Key.Key_AddFavorite?10 -QtCore.Qt.Key.Key_HotLinks?10 -QtCore.Qt.Key.Key_BrightnessAdjust?10 -QtCore.Qt.Key.Key_Finance?10 -QtCore.Qt.Key.Key_Community?10 -QtCore.Qt.Key.Key_AudioRewind?10 -QtCore.Qt.Key.Key_BackForward?10 -QtCore.Qt.Key.Key_ApplicationLeft?10 -QtCore.Qt.Key.Key_ApplicationRight?10 -QtCore.Qt.Key.Key_Book?10 -QtCore.Qt.Key.Key_CD?10 -QtCore.Qt.Key.Key_Calculator?10 -QtCore.Qt.Key.Key_ToDoList?10 -QtCore.Qt.Key.Key_ClearGrab?10 -QtCore.Qt.Key.Key_Close?10 -QtCore.Qt.Key.Key_Copy?10 -QtCore.Qt.Key.Key_Cut?10 -QtCore.Qt.Key.Key_Display?10 -QtCore.Qt.Key.Key_DOS?10 -QtCore.Qt.Key.Key_Documents?10 -QtCore.Qt.Key.Key_Excel?10 -QtCore.Qt.Key.Key_Explorer?10 -QtCore.Qt.Key.Key_Game?10 -QtCore.Qt.Key.Key_Go?10 -QtCore.Qt.Key.Key_iTouch?10 -QtCore.Qt.Key.Key_LogOff?10 -QtCore.Qt.Key.Key_Market?10 -QtCore.Qt.Key.Key_Meeting?10 -QtCore.Qt.Key.Key_MenuKB?10 -QtCore.Qt.Key.Key_MenuPB?10 -QtCore.Qt.Key.Key_MySites?10 -QtCore.Qt.Key.Key_News?10 -QtCore.Qt.Key.Key_OfficeHome?10 -QtCore.Qt.Key.Key_Option?10 -QtCore.Qt.Key.Key_Paste?10 -QtCore.Qt.Key.Key_Phone?10 -QtCore.Qt.Key.Key_Calendar?10 -QtCore.Qt.Key.Key_Reply?10 -QtCore.Qt.Key.Key_Reload?10 -QtCore.Qt.Key.Key_RotateWindows?10 -QtCore.Qt.Key.Key_RotationPB?10 -QtCore.Qt.Key.Key_RotationKB?10 -QtCore.Qt.Key.Key_Save?10 -QtCore.Qt.Key.Key_Send?10 -QtCore.Qt.Key.Key_Spell?10 -QtCore.Qt.Key.Key_SplitScreen?10 -QtCore.Qt.Key.Key_Support?10 -QtCore.Qt.Key.Key_TaskPane?10 -QtCore.Qt.Key.Key_Terminal?10 -QtCore.Qt.Key.Key_Tools?10 -QtCore.Qt.Key.Key_Travel?10 -QtCore.Qt.Key.Key_Video?10 -QtCore.Qt.Key.Key_Word?10 -QtCore.Qt.Key.Key_Xfer?10 -QtCore.Qt.Key.Key_ZoomIn?10 -QtCore.Qt.Key.Key_ZoomOut?10 -QtCore.Qt.Key.Key_Away?10 -QtCore.Qt.Key.Key_Messenger?10 -QtCore.Qt.Key.Key_WebCam?10 -QtCore.Qt.Key.Key_MailForward?10 -QtCore.Qt.Key.Key_Pictures?10 -QtCore.Qt.Key.Key_Music?10 -QtCore.Qt.Key.Key_Battery?10 -QtCore.Qt.Key.Key_Bluetooth?10 -QtCore.Qt.Key.Key_WLAN?10 -QtCore.Qt.Key.Key_UWB?10 -QtCore.Qt.Key.Key_AudioForward?10 -QtCore.Qt.Key.Key_AudioRepeat?10 -QtCore.Qt.Key.Key_AudioRandomPlay?10 -QtCore.Qt.Key.Key_Subtitle?10 -QtCore.Qt.Key.Key_AudioCycleTrack?10 -QtCore.Qt.Key.Key_Time?10 -QtCore.Qt.Key.Key_Hibernate?10 -QtCore.Qt.Key.Key_View?10 -QtCore.Qt.Key.Key_TopMenu?10 -QtCore.Qt.Key.Key_PowerDown?10 -QtCore.Qt.Key.Key_Suspend?10 -QtCore.Qt.Key.Key_ContrastAdjust?10 -QtCore.Qt.Key.Key_MediaPause?10 -QtCore.Qt.Key.Key_MediaTogglePlayPause?10 -QtCore.Qt.Key.Key_LaunchG?10 -QtCore.Qt.Key.Key_LaunchH?10 -QtCore.Qt.Key.Key_ToggleCallHangup?10 -QtCore.Qt.Key.Key_VoiceDial?10 -QtCore.Qt.Key.Key_LastNumberRedial?10 -QtCore.Qt.Key.Key_Camera?10 -QtCore.Qt.Key.Key_CameraFocus?10 -QtCore.Qt.Key.Key_TouchpadToggle?10 -QtCore.Qt.Key.Key_TouchpadOn?10 -QtCore.Qt.Key.Key_TouchpadOff?10 -QtCore.Qt.Key.Key_MicMute?10 -QtCore.Qt.Key.Key_Red?10 -QtCore.Qt.Key.Key_Green?10 -QtCore.Qt.Key.Key_Yellow?10 -QtCore.Qt.Key.Key_Blue?10 -QtCore.Qt.Key.Key_ChannelUp?10 -QtCore.Qt.Key.Key_ChannelDown?10 -QtCore.Qt.Key.Key_Guide?10 -QtCore.Qt.Key.Key_Info?10 -QtCore.Qt.Key.Key_Settings?10 -QtCore.Qt.Key.Key_Exit?10 -QtCore.Qt.Key.Key_MicVolumeUp?10 -QtCore.Qt.Key.Key_MicVolumeDown?10 -QtCore.Qt.Key.Key_New?10 -QtCore.Qt.Key.Key_Open?10 -QtCore.Qt.Key.Key_Find?10 -QtCore.Qt.Key.Key_Undo?10 -QtCore.Qt.Key.Key_Redo?10 -QtCore.Qt.Key.Key_Dead_Stroke?10 -QtCore.Qt.Key.Key_Dead_Abovecomma?10 -QtCore.Qt.Key.Key_Dead_Abovereversedcomma?10 -QtCore.Qt.Key.Key_Dead_Doublegrave?10 -QtCore.Qt.Key.Key_Dead_Belowring?10 -QtCore.Qt.Key.Key_Dead_Belowmacron?10 -QtCore.Qt.Key.Key_Dead_Belowcircumflex?10 -QtCore.Qt.Key.Key_Dead_Belowtilde?10 -QtCore.Qt.Key.Key_Dead_Belowbreve?10 -QtCore.Qt.Key.Key_Dead_Belowdiaeresis?10 -QtCore.Qt.Key.Key_Dead_Invertedbreve?10 -QtCore.Qt.Key.Key_Dead_Belowcomma?10 -QtCore.Qt.Key.Key_Dead_Currency?10 -QtCore.Qt.Key.Key_Dead_a?10 -QtCore.Qt.Key.Key_Dead_A?10 -QtCore.Qt.Key.Key_Dead_e?10 -QtCore.Qt.Key.Key_Dead_E?10 -QtCore.Qt.Key.Key_Dead_i?10 -QtCore.Qt.Key.Key_Dead_I?10 -QtCore.Qt.Key.Key_Dead_o?10 -QtCore.Qt.Key.Key_Dead_O?10 -QtCore.Qt.Key.Key_Dead_u?10 -QtCore.Qt.Key.Key_Dead_U?10 -QtCore.Qt.Key.Key_Dead_Small_Schwa?10 -QtCore.Qt.Key.Key_Dead_Capital_Schwa?10 -QtCore.Qt.Key.Key_Dead_Greek?10 -QtCore.Qt.Key.Key_Dead_Lowline?10 -QtCore.Qt.Key.Key_Dead_Aboveverticalline?10 -QtCore.Qt.Key.Key_Dead_Belowverticalline?10 -QtCore.Qt.Key.Key_Dead_Longsolidusoverlay?10 -QtCore.Qt.Key.Key_micro?10 -QtCore.Qt.BGMode?10 -QtCore.Qt.BGMode.TransparentMode?10 -QtCore.Qt.BGMode.OpaqueMode?10 -QtCore.Qt.ImageConversionFlag?10 -QtCore.Qt.ImageConversionFlag.AutoColor?10 -QtCore.Qt.ImageConversionFlag.ColorOnly?10 -QtCore.Qt.ImageConversionFlag.MonoOnly?10 -QtCore.Qt.ImageConversionFlag.ThresholdAlphaDither?10 -QtCore.Qt.ImageConversionFlag.OrderedAlphaDither?10 -QtCore.Qt.ImageConversionFlag.DiffuseAlphaDither?10 -QtCore.Qt.ImageConversionFlag.DiffuseDither?10 -QtCore.Qt.ImageConversionFlag.OrderedDither?10 -QtCore.Qt.ImageConversionFlag.ThresholdDither?10 -QtCore.Qt.ImageConversionFlag.AutoDither?10 -QtCore.Qt.ImageConversionFlag.PreferDither?10 -QtCore.Qt.ImageConversionFlag.AvoidDither?10 -QtCore.Qt.ImageConversionFlag.NoOpaqueDetection?10 -QtCore.Qt.ImageConversionFlag.NoFormatConversion?10 -QtCore.Qt.WidgetAttribute?10 -QtCore.Qt.WidgetAttribute.WA_Disabled?10 -QtCore.Qt.WidgetAttribute.WA_UnderMouse?10 -QtCore.Qt.WidgetAttribute.WA_MouseTracking?10 -QtCore.Qt.WidgetAttribute.WA_OpaquePaintEvent?10 -QtCore.Qt.WidgetAttribute.WA_StaticContents?10 -QtCore.Qt.WidgetAttribute.WA_LaidOut?10 -QtCore.Qt.WidgetAttribute.WA_PaintOnScreen?10 -QtCore.Qt.WidgetAttribute.WA_NoSystemBackground?10 -QtCore.Qt.WidgetAttribute.WA_UpdatesDisabled?10 -QtCore.Qt.WidgetAttribute.WA_Mapped?10 -QtCore.Qt.WidgetAttribute.WA_InputMethodEnabled?10 -QtCore.Qt.WidgetAttribute.WA_WState_Visible?10 -QtCore.Qt.WidgetAttribute.WA_WState_Hidden?10 -QtCore.Qt.WidgetAttribute.WA_ForceDisabled?10 -QtCore.Qt.WidgetAttribute.WA_KeyCompression?10 -QtCore.Qt.WidgetAttribute.WA_PendingMoveEvent?10 -QtCore.Qt.WidgetAttribute.WA_PendingResizeEvent?10 -QtCore.Qt.WidgetAttribute.WA_SetPalette?10 -QtCore.Qt.WidgetAttribute.WA_SetFont?10 -QtCore.Qt.WidgetAttribute.WA_SetCursor?10 -QtCore.Qt.WidgetAttribute.WA_NoChildEventsFromChildren?10 -QtCore.Qt.WidgetAttribute.WA_WindowModified?10 -QtCore.Qt.WidgetAttribute.WA_Resized?10 -QtCore.Qt.WidgetAttribute.WA_Moved?10 -QtCore.Qt.WidgetAttribute.WA_PendingUpdate?10 -QtCore.Qt.WidgetAttribute.WA_InvalidSize?10 -QtCore.Qt.WidgetAttribute.WA_CustomWhatsThis?10 -QtCore.Qt.WidgetAttribute.WA_LayoutOnEntireRect?10 -QtCore.Qt.WidgetAttribute.WA_OutsideWSRange?10 -QtCore.Qt.WidgetAttribute.WA_GrabbedShortcut?10 -QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents?10 -QtCore.Qt.WidgetAttribute.WA_PaintUnclipped?10 -QtCore.Qt.WidgetAttribute.WA_SetWindowIcon?10 -QtCore.Qt.WidgetAttribute.WA_NoMouseReplay?10 -QtCore.Qt.WidgetAttribute.WA_DeleteOnClose?10 -QtCore.Qt.WidgetAttribute.WA_RightToLeft?10 -QtCore.Qt.WidgetAttribute.WA_SetLayoutDirection?10 -QtCore.Qt.WidgetAttribute.WA_NoChildEventsForParent?10 -QtCore.Qt.WidgetAttribute.WA_ForceUpdatesDisabled?10 -QtCore.Qt.WidgetAttribute.WA_WState_Created?10 -QtCore.Qt.WidgetAttribute.WA_WState_CompressKeys?10 -QtCore.Qt.WidgetAttribute.WA_WState_InPaintEvent?10 -QtCore.Qt.WidgetAttribute.WA_WState_Reparented?10 -QtCore.Qt.WidgetAttribute.WA_WState_ConfigPending?10 -QtCore.Qt.WidgetAttribute.WA_WState_Polished?10 -QtCore.Qt.WidgetAttribute.WA_WState_OwnSizePolicy?10 -QtCore.Qt.WidgetAttribute.WA_WState_ExplicitShowHide?10 -QtCore.Qt.WidgetAttribute.WA_MouseNoMask?10 -QtCore.Qt.WidgetAttribute.WA_NoMousePropagation?10 -QtCore.Qt.WidgetAttribute.WA_Hover?10 -QtCore.Qt.WidgetAttribute.WA_InputMethodTransparent?10 -QtCore.Qt.WidgetAttribute.WA_QuitOnClose?10 -QtCore.Qt.WidgetAttribute.WA_KeyboardFocusChange?10 -QtCore.Qt.WidgetAttribute.WA_AcceptDrops?10 -QtCore.Qt.WidgetAttribute.WA_WindowPropagation?10 -QtCore.Qt.WidgetAttribute.WA_NoX11EventCompression?10 -QtCore.Qt.WidgetAttribute.WA_TintedBackground?10 -QtCore.Qt.WidgetAttribute.WA_X11OpenGLOverlay?10 -QtCore.Qt.WidgetAttribute.WA_AttributeCount?10 -QtCore.Qt.WidgetAttribute.WA_AlwaysShowToolTips?10 -QtCore.Qt.WidgetAttribute.WA_MacOpaqueSizeGrip?10 -QtCore.Qt.WidgetAttribute.WA_SetStyle?10 -QtCore.Qt.WidgetAttribute.WA_SetLocale?10 -QtCore.Qt.WidgetAttribute.WA_MacShowFocusRect?10 -QtCore.Qt.WidgetAttribute.WA_MacNormalSize?10 -QtCore.Qt.WidgetAttribute.WA_MacSmallSize?10 -QtCore.Qt.WidgetAttribute.WA_MacMiniSize?10 -QtCore.Qt.WidgetAttribute.WA_LayoutUsesWidgetRect?10 -QtCore.Qt.WidgetAttribute.WA_StyledBackground?10 -QtCore.Qt.WidgetAttribute.WA_MacAlwaysShowToolWindow?10 -QtCore.Qt.WidgetAttribute.WA_StyleSheet?10 -QtCore.Qt.WidgetAttribute.WA_ShowWithoutActivating?10 -QtCore.Qt.WidgetAttribute.WA_NativeWindow?10 -QtCore.Qt.WidgetAttribute.WA_DontCreateNativeAncestors?10 -QtCore.Qt.WidgetAttribute.WA_DontShowOnScreen?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDesktop?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDock?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeToolBar?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeMenu?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeUtility?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeSplash?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDialog?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDropDownMenu?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypePopupMenu?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeToolTip?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeNotification?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeCombo?10 -QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDND?10 -QtCore.Qt.WidgetAttribute.WA_TranslucentBackground?10 -QtCore.Qt.WidgetAttribute.WA_AcceptTouchEvents?10 -QtCore.Qt.WidgetAttribute.WA_TouchPadAcceptSingleTouchEvents?10 -QtCore.Qt.WidgetAttribute.WA_X11DoNotAcceptFocus?10 -QtCore.Qt.WidgetAttribute.WA_AlwaysStackOnTop?10 -QtCore.Qt.WidgetAttribute.WA_TabletTracking?10 -QtCore.Qt.WidgetAttribute.WA_ContentsMarginsRespectsSafeArea?10 -QtCore.Qt.WidgetAttribute.WA_StyleSheetTarget?10 -QtCore.Qt.WindowState?10 -QtCore.Qt.WindowState.WindowNoState?10 -QtCore.Qt.WindowState.WindowMinimized?10 -QtCore.Qt.WindowState.WindowMaximized?10 -QtCore.Qt.WindowState.WindowFullScreen?10 -QtCore.Qt.WindowState.WindowActive?10 -QtCore.Qt.WindowType?10 -QtCore.Qt.WindowType.Widget?10 -QtCore.Qt.WindowType.Window?10 -QtCore.Qt.WindowType.Dialog?10 -QtCore.Qt.WindowType.Sheet?10 -QtCore.Qt.WindowType.Drawer?10 -QtCore.Qt.WindowType.Popup?10 -QtCore.Qt.WindowType.Tool?10 -QtCore.Qt.WindowType.ToolTip?10 -QtCore.Qt.WindowType.SplashScreen?10 -QtCore.Qt.WindowType.Desktop?10 -QtCore.Qt.WindowType.SubWindow?10 -QtCore.Qt.WindowType.WindowType_Mask?10 -QtCore.Qt.WindowType.MSWindowsFixedSizeDialogHint?10 -QtCore.Qt.WindowType.MSWindowsOwnDC?10 -QtCore.Qt.WindowType.X11BypassWindowManagerHint?10 -QtCore.Qt.WindowType.FramelessWindowHint?10 -QtCore.Qt.WindowType.CustomizeWindowHint?10 -QtCore.Qt.WindowType.WindowTitleHint?10 -QtCore.Qt.WindowType.WindowSystemMenuHint?10 -QtCore.Qt.WindowType.WindowMinimizeButtonHint?10 -QtCore.Qt.WindowType.WindowMaximizeButtonHint?10 -QtCore.Qt.WindowType.WindowMinMaxButtonsHint?10 -QtCore.Qt.WindowType.WindowContextHelpButtonHint?10 -QtCore.Qt.WindowType.WindowShadeButtonHint?10 -QtCore.Qt.WindowType.WindowStaysOnTopHint?10 -QtCore.Qt.WindowType.WindowStaysOnBottomHint?10 -QtCore.Qt.WindowType.WindowCloseButtonHint?10 -QtCore.Qt.WindowType.MacWindowToolBarButtonHint?10 -QtCore.Qt.WindowType.BypassGraphicsProxyWidget?10 -QtCore.Qt.WindowType.WindowTransparentForInput?10 -QtCore.Qt.WindowType.WindowOverridesSystemGestures?10 -QtCore.Qt.WindowType.WindowDoesNotAcceptFocus?10 -QtCore.Qt.WindowType.NoDropShadowWindowHint?10 -QtCore.Qt.WindowType.WindowFullscreenButtonHint?10 -QtCore.Qt.WindowType.ForeignWindow?10 -QtCore.Qt.WindowType.BypassWindowManagerHint?10 -QtCore.Qt.WindowType.CoverWindow?10 -QtCore.Qt.WindowType.MaximizeUsingFullscreenGeometryHint?10 -QtCore.Qt.TextElideMode?10 -QtCore.Qt.TextElideMode.ElideLeft?10 -QtCore.Qt.TextElideMode.ElideRight?10 -QtCore.Qt.TextElideMode.ElideMiddle?10 -QtCore.Qt.TextElideMode.ElideNone?10 -QtCore.Qt.TextFlag?10 -QtCore.Qt.TextFlag.TextSingleLine?10 -QtCore.Qt.TextFlag.TextDontClip?10 -QtCore.Qt.TextFlag.TextExpandTabs?10 -QtCore.Qt.TextFlag.TextShowMnemonic?10 -QtCore.Qt.TextFlag.TextWordWrap?10 -QtCore.Qt.TextFlag.TextWrapAnywhere?10 -QtCore.Qt.TextFlag.TextDontPrint?10 -QtCore.Qt.TextFlag.TextIncludeTrailingSpaces?10 -QtCore.Qt.TextFlag.TextHideMnemonic?10 -QtCore.Qt.TextFlag.TextJustificationForced?10 -QtCore.Qt.AlignmentFlag?10 -QtCore.Qt.AlignmentFlag.AlignLeft?10 -QtCore.Qt.AlignmentFlag.AlignLeading?10 -QtCore.Qt.AlignmentFlag.AlignRight?10 -QtCore.Qt.AlignmentFlag.AlignTrailing?10 -QtCore.Qt.AlignmentFlag.AlignHCenter?10 -QtCore.Qt.AlignmentFlag.AlignJustify?10 -QtCore.Qt.AlignmentFlag.AlignAbsolute?10 -QtCore.Qt.AlignmentFlag.AlignHorizontal_Mask?10 -QtCore.Qt.AlignmentFlag.AlignTop?10 -QtCore.Qt.AlignmentFlag.AlignBottom?10 -QtCore.Qt.AlignmentFlag.AlignVCenter?10 -QtCore.Qt.AlignmentFlag.AlignVertical_Mask?10 -QtCore.Qt.AlignmentFlag.AlignCenter?10 -QtCore.Qt.AlignmentFlag.AlignBaseline?10 -QtCore.Qt.SortOrder?10 -QtCore.Qt.SortOrder.AscendingOrder?10 -QtCore.Qt.SortOrder.DescendingOrder?10 -QtCore.Qt.FocusPolicy?10 -QtCore.Qt.FocusPolicy.NoFocus?10 -QtCore.Qt.FocusPolicy.TabFocus?10 -QtCore.Qt.FocusPolicy.ClickFocus?10 -QtCore.Qt.FocusPolicy.StrongFocus?10 -QtCore.Qt.FocusPolicy.WheelFocus?10 -QtCore.Qt.Orientation?10 -QtCore.Qt.Orientation.Horizontal?10 -QtCore.Qt.Orientation.Vertical?10 -QtCore.Qt.MouseButton?10 -QtCore.Qt.MouseButton.NoButton?10 -QtCore.Qt.MouseButton.AllButtons?10 -QtCore.Qt.MouseButton.LeftButton?10 -QtCore.Qt.MouseButton.RightButton?10 -QtCore.Qt.MouseButton.MiddleButton?10 -QtCore.Qt.MouseButton.XButton1?10 -QtCore.Qt.MouseButton.XButton2?10 -QtCore.Qt.MouseButton.BackButton?10 -QtCore.Qt.MouseButton.ExtraButton1?10 -QtCore.Qt.MouseButton.ForwardButton?10 -QtCore.Qt.MouseButton.ExtraButton2?10 -QtCore.Qt.MouseButton.TaskButton?10 -QtCore.Qt.MouseButton.ExtraButton3?10 -QtCore.Qt.MouseButton.ExtraButton4?10 -QtCore.Qt.MouseButton.ExtraButton5?10 -QtCore.Qt.MouseButton.ExtraButton6?10 -QtCore.Qt.MouseButton.ExtraButton7?10 -QtCore.Qt.MouseButton.ExtraButton8?10 -QtCore.Qt.MouseButton.ExtraButton9?10 -QtCore.Qt.MouseButton.ExtraButton10?10 -QtCore.Qt.MouseButton.ExtraButton11?10 -QtCore.Qt.MouseButton.ExtraButton12?10 -QtCore.Qt.MouseButton.ExtraButton13?10 -QtCore.Qt.MouseButton.ExtraButton14?10 -QtCore.Qt.MouseButton.ExtraButton15?10 -QtCore.Qt.MouseButton.ExtraButton16?10 -QtCore.Qt.MouseButton.ExtraButton17?10 -QtCore.Qt.MouseButton.ExtraButton18?10 -QtCore.Qt.MouseButton.ExtraButton19?10 -QtCore.Qt.MouseButton.ExtraButton20?10 -QtCore.Qt.MouseButton.ExtraButton21?10 -QtCore.Qt.MouseButton.ExtraButton22?10 -QtCore.Qt.MouseButton.ExtraButton23?10 -QtCore.Qt.MouseButton.ExtraButton24?10 -QtCore.Qt.Modifier?10 -QtCore.Qt.Modifier.META?10 -QtCore.Qt.Modifier.SHIFT?10 -QtCore.Qt.Modifier.CTRL?10 -QtCore.Qt.Modifier.ALT?10 -QtCore.Qt.Modifier.MODIFIER_MASK?10 -QtCore.Qt.KeyboardModifier?10 -QtCore.Qt.KeyboardModifier.NoModifier?10 -QtCore.Qt.KeyboardModifier.ShiftModifier?10 -QtCore.Qt.KeyboardModifier.ControlModifier?10 -QtCore.Qt.KeyboardModifier.AltModifier?10 -QtCore.Qt.KeyboardModifier.MetaModifier?10 -QtCore.Qt.KeyboardModifier.KeypadModifier?10 -QtCore.Qt.KeyboardModifier.GroupSwitchModifier?10 -QtCore.Qt.KeyboardModifier.KeyboardModifierMask?10 -QtCore.Qt.GlobalColor?10 -QtCore.Qt.GlobalColor.color0?10 -QtCore.Qt.GlobalColor.color1?10 -QtCore.Qt.GlobalColor.black?10 -QtCore.Qt.GlobalColor.white?10 -QtCore.Qt.GlobalColor.darkGray?10 -QtCore.Qt.GlobalColor.gray?10 -QtCore.Qt.GlobalColor.lightGray?10 -QtCore.Qt.GlobalColor.red?10 -QtCore.Qt.GlobalColor.green?10 -QtCore.Qt.GlobalColor.blue?10 -QtCore.Qt.GlobalColor.cyan?10 -QtCore.Qt.GlobalColor.magenta?10 -QtCore.Qt.GlobalColor.yellow?10 -QtCore.Qt.GlobalColor.darkRed?10 -QtCore.Qt.GlobalColor.darkGreen?10 -QtCore.Qt.GlobalColor.darkBlue?10 -QtCore.Qt.GlobalColor.darkCyan?10 -QtCore.Qt.GlobalColor.darkMagenta?10 -QtCore.Qt.GlobalColor.darkYellow?10 -QtCore.Qt.GlobalColor.transparent?10 -QtCore.Qt.bin?4(QTextStream) -> QTextStream -QtCore.Qt.oct?4(QTextStream) -> QTextStream -QtCore.Qt.dec?4(QTextStream) -> QTextStream -QtCore.Qt.hex?4(QTextStream) -> QTextStream -QtCore.Qt.showbase?4(QTextStream) -> QTextStream -QtCore.Qt.forcesign?4(QTextStream) -> QTextStream -QtCore.Qt.forcepoint?4(QTextStream) -> QTextStream -QtCore.Qt.noshowbase?4(QTextStream) -> QTextStream -QtCore.Qt.noforcesign?4(QTextStream) -> QTextStream -QtCore.Qt.noforcepoint?4(QTextStream) -> QTextStream -QtCore.Qt.uppercasebase?4(QTextStream) -> QTextStream -QtCore.Qt.uppercasedigits?4(QTextStream) -> QTextStream -QtCore.Qt.lowercasebase?4(QTextStream) -> QTextStream -QtCore.Qt.lowercasedigits?4(QTextStream) -> QTextStream -QtCore.Qt.fixed?4(QTextStream) -> QTextStream -QtCore.Qt.scientific?4(QTextStream) -> QTextStream -QtCore.Qt.left?4(QTextStream) -> QTextStream -QtCore.Qt.right?4(QTextStream) -> QTextStream -QtCore.Qt.center?4(QTextStream) -> QTextStream -QtCore.Qt.endl?4(QTextStream) -> QTextStream -QtCore.Qt.flush?4(QTextStream) -> QTextStream -QtCore.Qt.reset?4(QTextStream) -> QTextStream -QtCore.Qt.bom?4(QTextStream) -> QTextStream -QtCore.Qt.ws?4(QTextStream) -> QTextStream -QtCore.QKeyCombination?1(Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination.__init__?1(self, Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination?1(unknown-type, Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination.__init__?1(self, unknown-type, Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination?1(unknown-type, Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination.__init__?1(self, unknown-type, Qt.Key key=Qt.Key_unknown) -QtCore.QKeyCombination?1(QKeyCombination) -QtCore.QKeyCombination.__init__?1(self, QKeyCombination) -QtCore.QKeyCombination.keyboardModifiers?4() -> unknown-type -QtCore.QKeyCombination.key?4() -> Qt.Key -QtCore.QKeyCombination.fromCombined?4(int) -> QKeyCombination -QtCore.QKeyCombination.toCombined?4() -> int -QtCore.QObject.staticMetaObject?7 -QtCore.QObject?1(QObject parent=None) -QtCore.QObject.__init__?1(self, QObject parent=None) -QtCore.QObject.metaObject?4() -> QMetaObject -QtCore.QObject.pyqtConfigure?4(Any) -QtCore.QObject.__getattr__?4(str) -> Any -QtCore.QObject.event?4(QEvent) -> bool -QtCore.QObject.eventFilter?4(QObject, QEvent) -> bool -QtCore.QObject.tr?4(str, str disambiguation=None, int n=-1) -> QString -QtCore.QObject.findChild?4(type, QString name='', unknown-type options=Qt.FindChildrenRecursively) -> Any -QtCore.QObject.findChild?4(Tuple, QString name='', unknown-type options=Qt.FindChildrenRecursively) -> Any -QtCore.QObject.findChildren?4(type, QString name='', unknown-type options=Qt.FindChildrenRecursively) -> List -QtCore.QObject.findChildren?4(Tuple, QString name='', unknown-type options=Qt.FindChildrenRecursively) -> List -QtCore.QObject.findChildren?4(type, QRegularExpression, unknown-type options=Qt.FindChildrenRecursively) -> List -QtCore.QObject.findChildren?4(Tuple, QRegularExpression, unknown-type options=Qt.FindChildrenRecursively) -> List -QtCore.QObject.objectName?4() -> QString -QtCore.QObject.setObjectName?4(QAnyStringView) -QtCore.QObject.isWidgetType?4() -> bool -QtCore.QObject.isWindowType?4() -> bool -QtCore.QObject.signalsBlocked?4() -> bool -QtCore.QObject.blockSignals?4(bool) -> bool -QtCore.QObject.thread?4() -> QThread -QtCore.QObject.moveToThread?4(QThread) -QtCore.QObject.startTimer?4(int, Qt.TimerType timerType=Qt.CoarseTimer) -> int -QtCore.QObject.killTimer?4(int) -QtCore.QObject.children?4() -> unknown-type -QtCore.QObject.setParent?4(QObject) -QtCore.QObject.installEventFilter?4(QObject) -QtCore.QObject.removeEventFilter?4(QObject) -QtCore.QObject.dumpObjectInfo?4() -QtCore.QObject.dumpObjectTree?4() -QtCore.QObject.dynamicPropertyNames?4() -> unknown-type -QtCore.QObject.setProperty?4(str, QVariant) -> bool -QtCore.QObject.property?4(str) -> QVariant -QtCore.QObject.destroyed?4(QObject object=None) -QtCore.QObject.objectNameChanged?4(QString) -QtCore.QObject.parent?4() -> QObject -QtCore.QObject.inherits?4(str) -> bool -QtCore.QObject.deleteLater?4() -QtCore.QObject.sender?4() -> QObject -QtCore.QObject.receivers?4(Any) -> int -QtCore.QObject.timerEvent?4(QTimerEvent) -QtCore.QObject.childEvent?4(QChildEvent) -QtCore.QObject.customEvent?4(QEvent) -QtCore.QObject.connectNotify?4(QMetaMethod) -QtCore.QObject.disconnectNotify?4(QMetaMethod) -QtCore.QObject.senderSignalIndex?4() -> int -QtCore.QObject.isSignalConnected?4(QMetaMethod) -> bool -QtCore.QObject.disconnect?4(QMetaObject.Connection) -> bool -QtCore.QObject.disconnect?4() -> Any -QtCore.QObject.isQuickItemType?4() -> bool -QtCore.QAbstractAnimation.DeletionPolicy?10 -QtCore.QAbstractAnimation.DeletionPolicy.KeepWhenStopped?10 -QtCore.QAbstractAnimation.DeletionPolicy.DeleteWhenStopped?10 -QtCore.QAbstractAnimation.State?10 -QtCore.QAbstractAnimation.State.Stopped?10 -QtCore.QAbstractAnimation.State.Paused?10 -QtCore.QAbstractAnimation.State.Running?10 -QtCore.QAbstractAnimation.Direction?10 -QtCore.QAbstractAnimation.Direction.Forward?10 -QtCore.QAbstractAnimation.Direction.Backward?10 -QtCore.QAbstractAnimation?1(QObject parent=None) -QtCore.QAbstractAnimation.__init__?1(self, QObject parent=None) -QtCore.QAbstractAnimation.state?4() -> QAbstractAnimation.State -QtCore.QAbstractAnimation.group?4() -> QAnimationGroup -QtCore.QAbstractAnimation.direction?4() -> QAbstractAnimation.Direction -QtCore.QAbstractAnimation.setDirection?4(QAbstractAnimation.Direction) -QtCore.QAbstractAnimation.currentTime?4() -> int -QtCore.QAbstractAnimation.currentLoopTime?4() -> int -QtCore.QAbstractAnimation.loopCount?4() -> int -QtCore.QAbstractAnimation.setLoopCount?4(int) -QtCore.QAbstractAnimation.currentLoop?4() -> int -QtCore.QAbstractAnimation.duration?4() -> int -QtCore.QAbstractAnimation.totalDuration?4() -> int -QtCore.QAbstractAnimation.finished?4() -QtCore.QAbstractAnimation.stateChanged?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QAbstractAnimation.currentLoopChanged?4(int) -QtCore.QAbstractAnimation.directionChanged?4(QAbstractAnimation.Direction) -QtCore.QAbstractAnimation.start?4(QAbstractAnimation.DeletionPolicy policy=QAbstractAnimation.KeepWhenStopped) -QtCore.QAbstractAnimation.pause?4() -QtCore.QAbstractAnimation.resume?4() -QtCore.QAbstractAnimation.setPaused?4(bool) -QtCore.QAbstractAnimation.stop?4() -QtCore.QAbstractAnimation.setCurrentTime?4(int) -QtCore.QAbstractAnimation.event?4(QEvent) -> bool -QtCore.QAbstractAnimation.updateCurrentTime?4(int) -QtCore.QAbstractAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QAbstractAnimation.updateDirection?4(QAbstractAnimation.Direction) -QtCore.QAbstractEventDispatcher?1(QObject parent=None) -QtCore.QAbstractEventDispatcher.__init__?1(self, QObject parent=None) -QtCore.QAbstractEventDispatcher.instance?4(QThread thread=None) -> QAbstractEventDispatcher -QtCore.QAbstractEventDispatcher.processEvents?4(unknown-type) -> bool -QtCore.QAbstractEventDispatcher.registerTimer?4(int, Qt.TimerType, QObject) -> int -QtCore.QAbstractEventDispatcher.registerTimer?4(int, int, Qt.TimerType, QObject) -QtCore.QAbstractEventDispatcher.unregisterTimer?4(int) -> bool -QtCore.QAbstractEventDispatcher.unregisterTimers?4(QObject) -> bool -QtCore.QAbstractEventDispatcher.registeredTimers?4(QObject) -> unknown-type -QtCore.QAbstractEventDispatcher.wakeUp?4() -QtCore.QAbstractEventDispatcher.interrupt?4() -QtCore.QAbstractEventDispatcher.startingUp?4() -QtCore.QAbstractEventDispatcher.closingDown?4() -QtCore.QAbstractEventDispatcher.remainingTime?4(int) -> int -QtCore.QAbstractEventDispatcher.installNativeEventFilter?4(QAbstractNativeEventFilter) -QtCore.QAbstractEventDispatcher.removeNativeEventFilter?4(QAbstractNativeEventFilter) -QtCore.QAbstractEventDispatcher.filterNativeEvent?4(QByteArray, PyQt6.sip.voidptr) -> (bool, qintptr) -QtCore.QAbstractEventDispatcher.aboutToBlock?4() -QtCore.QAbstractEventDispatcher.awake?4() -QtCore.QAbstractEventDispatcher.TimerInfo.interval?7 -QtCore.QAbstractEventDispatcher.TimerInfo.timerId?7 -QtCore.QAbstractEventDispatcher.TimerInfo.timerType?7 -QtCore.QAbstractEventDispatcher.TimerInfo?1(int, int, Qt.TimerType) -QtCore.QAbstractEventDispatcher.TimerInfo.__init__?1(self, int, int, Qt.TimerType) -QtCore.QAbstractEventDispatcher.TimerInfo?1(QAbstractEventDispatcher.TimerInfo) -QtCore.QAbstractEventDispatcher.TimerInfo.__init__?1(self, QAbstractEventDispatcher.TimerInfo) -QtCore.QModelIndex?1() -QtCore.QModelIndex.__init__?1(self) -QtCore.QModelIndex?1(QModelIndex) -QtCore.QModelIndex.__init__?1(self, QModelIndex) -QtCore.QModelIndex?1(QPersistentModelIndex) -QtCore.QModelIndex.__init__?1(self, QPersistentModelIndex) -QtCore.QModelIndex.row?4() -> int -QtCore.QModelIndex.column?4() -> int -QtCore.QModelIndex.data?4(int role=Qt.DisplayRole) -> QVariant -QtCore.QModelIndex.flags?4() -> unknown-type -QtCore.QModelIndex.internalPointer?4() -> Any -QtCore.QModelIndex.internalId?4() -> Any -QtCore.QModelIndex.model?4() -> QAbstractItemModel -QtCore.QModelIndex.isValid?4() -> bool -QtCore.QModelIndex.parent?4() -> QModelIndex -QtCore.QModelIndex.sibling?4(int, int) -> QModelIndex -QtCore.QModelIndex.siblingAtColumn?4(int) -> QModelIndex -QtCore.QModelIndex.siblingAtRow?4(int) -> QModelIndex -QtCore.QPersistentModelIndex?1() -QtCore.QPersistentModelIndex.__init__?1(self) -QtCore.QPersistentModelIndex?1(QModelIndex) -QtCore.QPersistentModelIndex.__init__?1(self, QModelIndex) -QtCore.QPersistentModelIndex?1(QPersistentModelIndex) -QtCore.QPersistentModelIndex.__init__?1(self, QPersistentModelIndex) -QtCore.QPersistentModelIndex.row?4() -> int -QtCore.QPersistentModelIndex.column?4() -> int -QtCore.QPersistentModelIndex.data?4(int role=Qt.DisplayRole) -> QVariant -QtCore.QPersistentModelIndex.flags?4() -> unknown-type -QtCore.QPersistentModelIndex.parent?4() -> QModelIndex -QtCore.QPersistentModelIndex.sibling?4(int, int) -> QModelIndex -QtCore.QPersistentModelIndex.model?4() -> QAbstractItemModel -QtCore.QPersistentModelIndex.isValid?4() -> bool -QtCore.QPersistentModelIndex.swap?4(QPersistentModelIndex) -QtCore.QAbstractItemModel.CheckIndexOption?10 -QtCore.QAbstractItemModel.CheckIndexOption.NoOption?10 -QtCore.QAbstractItemModel.CheckIndexOption.IndexIsValid?10 -QtCore.QAbstractItemModel.CheckIndexOption.DoNotUseParent?10 -QtCore.QAbstractItemModel.CheckIndexOption.ParentIsInvalid?10 -QtCore.QAbstractItemModel.LayoutChangeHint?10 -QtCore.QAbstractItemModel.LayoutChangeHint.NoLayoutChangeHint?10 -QtCore.QAbstractItemModel.LayoutChangeHint.VerticalSortHint?10 -QtCore.QAbstractItemModel.LayoutChangeHint.HorizontalSortHint?10 -QtCore.QAbstractItemModel?1(QObject parent=None) -QtCore.QAbstractItemModel.__init__?1(self, QObject parent=None) -QtCore.QAbstractItemModel.hasIndex?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QAbstractItemModel.parent?4(QModelIndex) -> QModelIndex -QtCore.QAbstractItemModel.parent?4() -> QObject -QtCore.QAbstractItemModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QAbstractItemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QAbstractItemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QAbstractItemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtCore.QAbstractItemModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtCore.QAbstractItemModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QAbstractItemModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtCore.QAbstractItemModel.itemData?4(QModelIndex) -> unknown-type -QtCore.QAbstractItemModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtCore.QAbstractItemModel.mimeTypes?4() -> QStringList -QtCore.QAbstractItemModel.mimeData?4(unknown-type) -> QMimeData -QtCore.QAbstractItemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractItemModel.supportedDropActions?4() -> unknown-type -QtCore.QAbstractItemModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.fetchMore?4(QModelIndex) -QtCore.QAbstractItemModel.canFetchMore?4(QModelIndex) -> bool -QtCore.QAbstractItemModel.flags?4(QModelIndex) -> unknown-type -QtCore.QAbstractItemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtCore.QAbstractItemModel.buddy?4(QModelIndex) -> QModelIndex -QtCore.QAbstractItemModel.match?4(QModelIndex, int, QVariant, int hits=1, unknown-type flags=Qt.MatchFlags(Qt.MatchStartsWith|Qt.MatchWrap)) -> unknown-type -QtCore.QAbstractItemModel.span?4(QModelIndex) -> QSize -QtCore.QAbstractItemModel.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) -QtCore.QAbstractItemModel.headerDataChanged?4(Qt.Orientation, int, int) -QtCore.QAbstractItemModel.layoutAboutToBeChanged?4(unknown-type parents=[], QAbstractItemModel.LayoutChangeHint hint=QAbstractItemModel.NoLayoutChangeHint) -QtCore.QAbstractItemModel.layoutChanged?4(unknown-type parents=[], QAbstractItemModel.LayoutChangeHint hint=QAbstractItemModel.NoLayoutChangeHint) -QtCore.QAbstractItemModel.rowsAboutToBeInserted?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.rowsInserted?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.rowsAboutToBeRemoved?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.rowsRemoved?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.columnsAboutToBeInserted?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.columnsInserted?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.columnsAboutToBeRemoved?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.columnsRemoved?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.modelAboutToBeReset?4() -QtCore.QAbstractItemModel.modelReset?4() -QtCore.QAbstractItemModel.submit?4() -> bool -QtCore.QAbstractItemModel.revert?4() -QtCore.QAbstractItemModel.encodeData?4(unknown-type, QDataStream) -QtCore.QAbstractItemModel.decodeData?4(int, int, QModelIndex, QDataStream) -> bool -QtCore.QAbstractItemModel.beginInsertRows?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.endInsertRows?4() -QtCore.QAbstractItemModel.beginRemoveRows?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.endRemoveRows?4() -QtCore.QAbstractItemModel.beginInsertColumns?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.endInsertColumns?4() -QtCore.QAbstractItemModel.beginRemoveColumns?4(QModelIndex, int, int) -QtCore.QAbstractItemModel.endRemoveColumns?4() -QtCore.QAbstractItemModel.persistentIndexList?4() -> unknown-type -QtCore.QAbstractItemModel.changePersistentIndex?4(QModelIndex, QModelIndex) -QtCore.QAbstractItemModel.changePersistentIndexList?4(unknown-type, unknown-type) -QtCore.QAbstractItemModel.insertRow?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.insertColumn?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.removeRow?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.removeColumn?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractItemModel.supportedDragActions?4() -> unknown-type -QtCore.QAbstractItemModel.roleNames?4() -> unknown-type -QtCore.QAbstractItemModel.createIndex?4(int, int, Any object=None) -> QModelIndex -QtCore.QAbstractItemModel.rowsAboutToBeMoved?4(QModelIndex, int, int, QModelIndex, int) -QtCore.QAbstractItemModel.rowsMoved?4(QModelIndex, int, int, QModelIndex, int) -QtCore.QAbstractItemModel.columnsAboutToBeMoved?4(QModelIndex, int, int, QModelIndex, int) -QtCore.QAbstractItemModel.columnsMoved?4(QModelIndex, int, int, QModelIndex, int) -QtCore.QAbstractItemModel.beginMoveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.endMoveRows?4() -QtCore.QAbstractItemModel.beginMoveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.endMoveColumns?4() -QtCore.QAbstractItemModel.beginResetModel?4() -QtCore.QAbstractItemModel.endResetModel?4() -QtCore.QAbstractItemModel.resetInternalData?4() -QtCore.QAbstractItemModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractItemModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.moveRow?4(QModelIndex, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.moveColumn?4(QModelIndex, int, QModelIndex, int) -> bool -QtCore.QAbstractItemModel.checkIndex?4(QModelIndex, unknown-type options=QAbstractItemModel.CheckIndexOption.NoOption) -> bool -QtCore.QAbstractItemModel.clearItemData?4(QModelIndex) -> bool -QtCore.QAbstractItemModel.multiData?4(QModelIndex, QModelRoleDataSpan) -QtCore.QAbstractTableModel?1(QObject parent=None) -QtCore.QAbstractTableModel.__init__?1(self, QObject parent=None) -QtCore.QAbstractTableModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QAbstractTableModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractTableModel.flags?4(QModelIndex) -> unknown-type -QtCore.QAbstractTableModel.parent?4() -> QObject -QtCore.QAbstractTableModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QAbstractListModel?1(QObject parent=None) -QtCore.QAbstractListModel.__init__?1(self, QObject parent=None) -QtCore.QAbstractListModel.index?4(int, int column=0, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QAbstractListModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractListModel.flags?4(QModelIndex) -> unknown-type -QtCore.QAbstractListModel.parent?4() -> QObject -QtCore.QAbstractListModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QModelRoleData?1(int) -QtCore.QModelRoleData.__init__?1(self, int) -QtCore.QModelRoleData?1(QModelRoleData) -QtCore.QModelRoleData.__init__?1(self, QModelRoleData) -QtCore.QModelRoleData.role?4() -> int -QtCore.QModelRoleData.data?4() -> QVariant -QtCore.QModelRoleData.setData?4(QVariant) -QtCore.QModelRoleData.clearData?4() -QtCore.QModelRoleDataSpan?1() -QtCore.QModelRoleDataSpan.__init__?1(self) -QtCore.QModelRoleDataSpan?1(QModelRoleData) -QtCore.QModelRoleDataSpan.__init__?1(self, QModelRoleData) -QtCore.QModelRoleDataSpan?1(unknown-type) -QtCore.QModelRoleDataSpan.__init__?1(self, unknown-type) -QtCore.QModelRoleDataSpan?1(QModelRoleDataSpan) -QtCore.QModelRoleDataSpan.__init__?1(self, QModelRoleDataSpan) -QtCore.QModelRoleDataSpan.size?4() -> int -QtCore.QModelRoleDataSpan.length?4() -> int -QtCore.QModelRoleDataSpan.data?4() -> QModelRoleData -QtCore.QModelRoleDataSpan.begin?4() -> QModelRoleData -QtCore.QModelRoleDataSpan.end?4() -> QModelRoleData -QtCore.QModelRoleDataSpan.dataForRole?4(int) -> QVariant -QtCore.QAbstractNativeEventFilter?1() -QtCore.QAbstractNativeEventFilter.__init__?1(self) -QtCore.QAbstractNativeEventFilter.nativeEventFilter?4(QByteArray, PyQt6.sip.voidptr) -> (bool, qintptr) -QtCore.QAbstractProxyModel?1(QObject parent=None) -QtCore.QAbstractProxyModel.__init__?1(self, QObject parent=None) -QtCore.QAbstractProxyModel.setSourceModel?4(QAbstractItemModel) -QtCore.QAbstractProxyModel.sourceModel?4() -> QAbstractItemModel -QtCore.QAbstractProxyModel.mapToSource?4(QModelIndex) -> QModelIndex -QtCore.QAbstractProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex -QtCore.QAbstractProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection -QtCore.QAbstractProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection -QtCore.QAbstractProxyModel.submit?4() -> bool -QtCore.QAbstractProxyModel.revert?4() -QtCore.QAbstractProxyModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtCore.QAbstractProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtCore.QAbstractProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QAbstractProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtCore.QAbstractProxyModel.itemData?4(QModelIndex) -> unknown-type -QtCore.QAbstractProxyModel.flags?4(QModelIndex) -> unknown-type -QtCore.QAbstractProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtCore.QAbstractProxyModel.buddy?4(QModelIndex) -> QModelIndex -QtCore.QAbstractProxyModel.canFetchMore?4(QModelIndex) -> bool -QtCore.QAbstractProxyModel.fetchMore?4(QModelIndex) -QtCore.QAbstractProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtCore.QAbstractProxyModel.span?4(QModelIndex) -> QSize -QtCore.QAbstractProxyModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtCore.QAbstractProxyModel.mimeData?4(unknown-type) -> QMimeData -QtCore.QAbstractProxyModel.mimeTypes?4() -> QStringList -QtCore.QAbstractProxyModel.supportedDropActions?4() -> unknown-type -QtCore.QAbstractProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QAbstractProxyModel.sourceModelChanged?4() -QtCore.QAbstractProxyModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QAbstractProxyModel.supportedDragActions?4() -> unknown-type -QtCore.QAbstractProxyModel.clearItemData?4(QModelIndex) -> bool -QtCore.QAbstractProxyModel.roleNames?4() -> unknown-type -QtCore.QAnimationGroup?1(QObject parent=None) -QtCore.QAnimationGroup.__init__?1(self, QObject parent=None) -QtCore.QAnimationGroup.animationAt?4(int) -> QAbstractAnimation -QtCore.QAnimationGroup.animationCount?4() -> int -QtCore.QAnimationGroup.indexOfAnimation?4(QAbstractAnimation) -> int -QtCore.QAnimationGroup.addAnimation?4(QAbstractAnimation) -QtCore.QAnimationGroup.insertAnimation?4(int, QAbstractAnimation) -QtCore.QAnimationGroup.removeAnimation?4(QAbstractAnimation) -QtCore.QAnimationGroup.takeAnimation?4(int) -> QAbstractAnimation -QtCore.QAnimationGroup.clear?4() -QtCore.QAnimationGroup.event?4(QEvent) -> bool -QtCore.QBasicTimer?1() -QtCore.QBasicTimer.__init__?1(self) -QtCore.QBasicTimer.isActive?4() -> bool -QtCore.QBasicTimer.timerId?4() -> int -QtCore.QBasicTimer.start?4(int, Qt.TimerType, QObject) -QtCore.QBasicTimer.start?4(int, QObject) -QtCore.QBasicTimer.stop?4() -QtCore.QBasicTimer.swap?4(QBasicTimer) -QtCore.QBitArray?1() -QtCore.QBitArray.__init__?1(self) -QtCore.QBitArray?1(int, bool value=False) -QtCore.QBitArray.__init__?1(self, int, bool value=False) -QtCore.QBitArray?1(QBitArray) -QtCore.QBitArray.__init__?1(self, QBitArray) -QtCore.QBitArray.size?4() -> int -QtCore.QBitArray.count?4() -> int -QtCore.QBitArray.count?4(bool) -> int -QtCore.QBitArray.isEmpty?4() -> bool -QtCore.QBitArray.isNull?4() -> bool -QtCore.QBitArray.resize?4(int) -QtCore.QBitArray.detach?4() -QtCore.QBitArray.isDetached?4() -> bool -QtCore.QBitArray.clear?4() -QtCore.QBitArray.fill?4(bool, int, int) -QtCore.QBitArray.fill?4(bool, int size=-1) -> bool -QtCore.QBitArray.truncate?4(int) -QtCore.QBitArray.testBit?4(int) -> bool -QtCore.QBitArray.setBit?4(int) -QtCore.QBitArray.setBit?4(int, bool) -QtCore.QBitArray.clearBit?4(int) -QtCore.QBitArray.toggleBit?4(int) -> bool -QtCore.QBitArray.at?4(int) -> bool -QtCore.QBitArray.swap?4(QBitArray) -QtCore.QBitArray.bits?4() -> Any -QtCore.QBitArray.fromBits?4(bytes, int) -> QBitArray -QtCore.QBitArray.toUInt32?4(QSysInfo.Endian) -> (int, bool) -QtCore.QIODeviceBase.OpenModeFlag?10 -QtCore.QIODeviceBase.OpenModeFlag.NotOpen?10 -QtCore.QIODeviceBase.OpenModeFlag.ReadOnly?10 -QtCore.QIODeviceBase.OpenModeFlag.WriteOnly?10 -QtCore.QIODeviceBase.OpenModeFlag.ReadWrite?10 -QtCore.QIODeviceBase.OpenModeFlag.Append?10 -QtCore.QIODeviceBase.OpenModeFlag.Truncate?10 -QtCore.QIODeviceBase.OpenModeFlag.Text?10 -QtCore.QIODeviceBase.OpenModeFlag.Unbuffered?10 -QtCore.QIODeviceBase.OpenModeFlag.NewOnly?10 -QtCore.QIODeviceBase.OpenModeFlag.ExistingOnly?10 -QtCore.QIODeviceBase?1() -QtCore.QIODeviceBase.__init__?1(self) -QtCore.QIODeviceBase?1(QIODeviceBase) -QtCore.QIODeviceBase.__init__?1(self, QIODeviceBase) -QtCore.QIODevice?1() -QtCore.QIODevice.__init__?1(self) -QtCore.QIODevice?1(QObject) -QtCore.QIODevice.__init__?1(self, QObject) -QtCore.QIODevice.openMode?4() -> unknown-type -QtCore.QIODevice.setTextModeEnabled?4(bool) -QtCore.QIODevice.isTextModeEnabled?4() -> bool -QtCore.QIODevice.isOpen?4() -> bool -QtCore.QIODevice.isReadable?4() -> bool -QtCore.QIODevice.isWritable?4() -> bool -QtCore.QIODevice.isSequential?4() -> bool -QtCore.QIODevice.readChannelCount?4() -> int -QtCore.QIODevice.writeChannelCount?4() -> int -QtCore.QIODevice.currentReadChannel?4() -> int -QtCore.QIODevice.setCurrentReadChannel?4(int) -QtCore.QIODevice.currentWriteChannel?4() -> int -QtCore.QIODevice.setCurrentWriteChannel?4(int) -QtCore.QIODevice.open?4(unknown-type) -> bool -QtCore.QIODevice.close?4() -QtCore.QIODevice.pos?4() -> int -QtCore.QIODevice.size?4() -> int -QtCore.QIODevice.seek?4(int) -> bool -QtCore.QIODevice.atEnd?4() -> bool -QtCore.QIODevice.reset?4() -> bool -QtCore.QIODevice.bytesAvailable?4() -> int -QtCore.QIODevice.bytesToWrite?4() -> int -QtCore.QIODevice.read?4(int) -> Any -QtCore.QIODevice.readLine?4(int) -> Any -QtCore.QIODevice.readLine?4() -> QByteArray -QtCore.QIODevice.readAll?4() -> QByteArray -QtCore.QIODevice.canReadLine?4() -> bool -QtCore.QIODevice.startTransaction?4() -QtCore.QIODevice.commitTransaction?4() -QtCore.QIODevice.rollbackTransaction?4() -QtCore.QIODevice.isTransactionStarted?4() -> bool -QtCore.QIODevice.write?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QIODevice.peek?4(int) -> Any -QtCore.QIODevice.skip?4(int) -> int -QtCore.QIODevice.waitForReadyRead?4(int) -> bool -QtCore.QIODevice.waitForBytesWritten?4(int) -> bool -QtCore.QIODevice.ungetChar?4(bytes) -QtCore.QIODevice.putChar?4(bytes) -> bool -QtCore.QIODevice.getChar?4() -> (bool, bytes) -QtCore.QIODevice.errorString?4() -> QString -QtCore.QIODevice.aboutToClose?4() -QtCore.QIODevice.bytesWritten?4(int) -QtCore.QIODevice.channelBytesWritten?4(int, int) -QtCore.QIODevice.channelReadyRead?4(int) -QtCore.QIODevice.readChannelFinished?4() -QtCore.QIODevice.readyRead?4() -QtCore.QIODevice.readData?4(int) -> Any -QtCore.QIODevice.readLineData?4(int) -> Any -QtCore.QIODevice.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QIODevice.skipData?4(int) -> int -QtCore.QIODevice.setOpenMode?4(unknown-type) -QtCore.QIODevice.setErrorString?4(QString) -QtCore.QBuffer?1(QObject parent=None) -QtCore.QBuffer.__init__?1(self, QObject parent=None) -QtCore.QBuffer?1(QByteArray, QObject parent=None) -QtCore.QBuffer.__init__?1(self, QByteArray, QObject parent=None) -QtCore.QBuffer.buffer?4() -> QByteArray -QtCore.QBuffer.data?4() -> QByteArray -QtCore.QBuffer.setBuffer?4(QByteArray) -QtCore.QBuffer.setData?4(QByteArray) -QtCore.QBuffer.setData?4(bytes) -QtCore.QBuffer.open?4(unknown-type) -> bool -QtCore.QBuffer.close?4() -QtCore.QBuffer.size?4() -> int -QtCore.QBuffer.pos?4() -> int -QtCore.QBuffer.seek?4(int) -> bool -QtCore.QBuffer.atEnd?4() -> bool -QtCore.QBuffer.canReadLine?4() -> bool -QtCore.QBuffer.readData?4(int) -> Any -QtCore.QBuffer.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QByteArray.Base64DecodingStatus?10 -QtCore.QByteArray.Base64DecodingStatus.Ok?10 -QtCore.QByteArray.Base64DecodingStatus.IllegalInputLength?10 -QtCore.QByteArray.Base64DecodingStatus.IllegalCharacter?10 -QtCore.QByteArray.Base64DecodingStatus.IllegalPadding?10 -QtCore.QByteArray.Base64Option?10 -QtCore.QByteArray.Base64Option.Base64Encoding?10 -QtCore.QByteArray.Base64Option.Base64UrlEncoding?10 -QtCore.QByteArray.Base64Option.KeepTrailingEquals?10 -QtCore.QByteArray.Base64Option.OmitTrailingEquals?10 -QtCore.QByteArray.Base64Option.IgnoreBase64DecodingErrors?10 -QtCore.QByteArray.Base64Option.AbortOnBase64DecodingErrors?10 -QtCore.QByteArray?1() -QtCore.QByteArray.__init__?1(self) -QtCore.QByteArray?1(int, bytes) -QtCore.QByteArray.__init__?1(self, int, bytes) -QtCore.QByteArray?1(QByteArray) -QtCore.QByteArray.__init__?1(self, QByteArray) -QtCore.QByteArray.resize?4(int) -QtCore.QByteArray.resize?4(int, str) -QtCore.QByteArray.fill?4(bytes, int size=-1) -> QByteArray -QtCore.QByteArray.clear?4() -QtCore.QByteArray.indexOf?4(QByteArrayView, int from=0) -> int -QtCore.QByteArray.lastIndexOf?4(QByteArrayView, int from=-1) -> int -QtCore.QByteArray.count?4(QByteArrayView) -> int -QtCore.QByteArray.left?4(int) -> QByteArray -QtCore.QByteArray.right?4(int) -> QByteArray -QtCore.QByteArray.mid?4(int, int length=-1) -> QByteArray -QtCore.QByteArray.first?4(int) -> QByteArray -QtCore.QByteArray.last?4(int) -> QByteArray -QtCore.QByteArray.startsWith?4(QByteArrayView) -> bool -QtCore.QByteArray.endsWith?4(QByteArrayView) -> bool -QtCore.QByteArray.truncate?4(int) -QtCore.QByteArray.chop?4(int) -QtCore.QByteArray.toLower?4() -> QByteArray -QtCore.QByteArray.toUpper?4() -> QByteArray -QtCore.QByteArray.trimmed?4() -> QByteArray -QtCore.QByteArray.simplified?4() -> QByteArray -QtCore.QByteArray.leftJustified?4(int, bytes fill=' ', bool truncate=False) -> QByteArray -QtCore.QByteArray.rightJustified?4(int, bytes fill=' ', bool truncate=False) -> QByteArray -QtCore.QByteArray.prepend?4(QByteArrayView) -> QByteArray -QtCore.QByteArray.prepend?4(int, bytes) -> QByteArray -QtCore.QByteArray.append?4(QByteArrayView) -> QByteArray -QtCore.QByteArray.append?4(int, bytes) -> QByteArray -QtCore.QByteArray.insert?4(int, QByteArrayView) -> QByteArray -QtCore.QByteArray.insert?4(int, int, bytes) -> QByteArray -QtCore.QByteArray.remove?4(int, int) -> QByteArray -QtCore.QByteArray.replace?4(QByteArrayView, QByteArrayView) -> QByteArray -QtCore.QByteArray.replace?4(int, int, QByteArrayView) -> QByteArray -QtCore.QByteArray.split?4(bytes) -> unknown-type -QtCore.QByteArray.toShort?4(int base=10) -> (int, bool) -QtCore.QByteArray.toUShort?4(int base=10) -> (int, bool) -QtCore.QByteArray.toInt?4(int base=10) -> (int, bool) -QtCore.QByteArray.toUInt?4(int base=10) -> (int, bool) -QtCore.QByteArray.toLong?4(int base=10) -> (int, bool) -QtCore.QByteArray.toULong?4(int base=10) -> (int, bool) -QtCore.QByteArray.toLongLong?4(int base=10) -> (int, bool) -QtCore.QByteArray.toULongLong?4(int base=10) -> (int, bool) -QtCore.QByteArray.toFloat?4() -> (float, bool) -QtCore.QByteArray.toDouble?4() -> (float, bool) -QtCore.QByteArray.toBase64?4(unknown-type options=QByteArray.Base64Encoding) -> QByteArray -QtCore.QByteArray.setNum?4(float, str format='g', int precision=6) -> QByteArray -QtCore.QByteArray.setNum?4(Any, int base=10) -> QByteArray -QtCore.QByteArray.number?4(float, str format='g', int precision=6) -> QByteArray -QtCore.QByteArray.number?4(Any, int base=10) -> QByteArray -QtCore.QByteArray.fromBase64?4(QByteArray, unknown-type options=QByteArray.Base64Encoding) -> QByteArray -QtCore.QByteArray.fromHex?4(QByteArray) -> QByteArray -QtCore.QByteArray.count?4() -> int -QtCore.QByteArray.length?4() -> int -QtCore.QByteArray.isNull?4() -> bool -QtCore.QByteArray.size?4() -> int -QtCore.QByteArray.at?4(int) -> bytes -QtCore.QByteArray.isEmpty?4() -> bool -QtCore.QByteArray.data?4() -> Any -QtCore.QByteArray.capacity?4() -> int -QtCore.QByteArray.reserve?4(int) -QtCore.QByteArray.squeeze?4() -QtCore.QByteArray.push_back?4(QByteArrayView) -QtCore.QByteArray.push_front?4(QByteArrayView) -QtCore.QByteArray.contains?4(QByteArrayView) -> bool -QtCore.QByteArray.toHex?4(bytes separator='\000') -> QByteArray -QtCore.QByteArray.toPercentEncoding?4(QByteArray exclude=QByteArray(), QByteArray include=QByteArray(), str percent='%') -> QByteArray -QtCore.QByteArray.fromPercentEncoding?4(QByteArray, str percent='%') -> QByteArray -QtCore.QByteArray.repeated?4(int) -> QByteArray -QtCore.QByteArray.swap?4(QByteArray) -QtCore.QByteArray.chopped?4(int) -> QByteArray -QtCore.QByteArray.compare?4(QByteArrayView, Qt.CaseSensitivity cs=Qt.CaseSensitive) -> int -QtCore.QByteArray.isUpper?4() -> bool -QtCore.QByteArray.isLower?4() -> bool -QtCore.QByteArray.fromBase64Encoding?4(QByteArray, unknown-type options=QByteArray.Base64Encoding) -> QByteArray.FromBase64Result -QtCore.QByteArray.sliced?4(int) -> QByteArray -QtCore.QByteArray.sliced?4(int, int) -> QByteArray -QtCore.QByteArray.isValidUtf8?4() -> bool -QtCore.QByteArray.percentDecoded?4(str percent='%') -> QByteArray -QtCore.QByteArray.removeAt?4(int) -> QByteArray -QtCore.QByteArray.removeFirst?4() -> QByteArray -QtCore.QByteArray.removeLast?4() -> QByteArray -QtCore.QByteArray.assign?4(QByteArrayView) -> QByteArray -QtCore.QByteArray.FromBase64Result.decoded?7 -QtCore.QByteArray.FromBase64Result.decodingStatus?7 -QtCore.QByteArray.FromBase64Result?1() -QtCore.QByteArray.FromBase64Result.__init__?1(self) -QtCore.QByteArray.FromBase64Result?1(QByteArray.FromBase64Result) -QtCore.QByteArray.FromBase64Result.__init__?1(self, QByteArray.FromBase64Result) -QtCore.QByteArray.FromBase64Result.swap?4(QByteArray.FromBase64Result) -QtCore.QByteArrayMatcher?1(bytes, int length=-1) -QtCore.QByteArrayMatcher.__init__?1(self, bytes, int length=-1) -QtCore.QByteArrayMatcher?1(QByteArrayView) -QtCore.QByteArrayMatcher.__init__?1(self, QByteArrayView) -QtCore.QByteArrayMatcher?1() -QtCore.QByteArrayMatcher.__init__?1(self) -QtCore.QByteArrayMatcher?1(QByteArrayMatcher) -QtCore.QByteArrayMatcher.__init__?1(self, QByteArrayMatcher) -QtCore.QByteArrayMatcher.setPattern?4(QByteArray) -QtCore.QByteArrayMatcher.indexIn?4(QByteArrayView, int from=0) -> int -QtCore.QByteArrayMatcher.indexIn?4(bytes, int, int from=0) -> int -QtCore.QByteArrayMatcher.pattern?4() -> QByteArray -QtCore.QCalendar.System?10 -QtCore.QCalendar.System.Gregorian?10 -QtCore.QCalendar.System.Julian?10 -QtCore.QCalendar.System.Milankovic?10 -QtCore.QCalendar.System.Jalali?10 -QtCore.QCalendar.System.IslamicCivil?10 -QtCore.Unspecified?10 -QtCore.QCalendar?1() -QtCore.QCalendar.__init__?1(self) -QtCore.QCalendar?1(QCalendar.System) -QtCore.QCalendar.__init__?1(self, QCalendar.System) -QtCore.QCalendar?1(QAnyStringView) -QtCore.QCalendar.__init__?1(self, QAnyStringView) -QtCore.QCalendar?1(QCalendar) -QtCore.QCalendar.__init__?1(self, QCalendar) -QtCore.QCalendar.daysInMonth?4(int, int year=QCalendar.Unspecified) -> int -QtCore.QCalendar.daysInYear?4(int) -> int -QtCore.QCalendar.monthsInYear?4(int) -> int -QtCore.QCalendar.isDateValid?4(int, int, int) -> bool -QtCore.QCalendar.isLeapYear?4(int) -> bool -QtCore.QCalendar.isGregorian?4() -> bool -QtCore.QCalendar.isLunar?4() -> bool -QtCore.QCalendar.isLuniSolar?4() -> bool -QtCore.QCalendar.isSolar?4() -> bool -QtCore.QCalendar.isProleptic?4() -> bool -QtCore.QCalendar.hasYearZero?4() -> bool -QtCore.QCalendar.maximumDaysInMonth?4() -> int -QtCore.QCalendar.minimumDaysInMonth?4() -> int -QtCore.QCalendar.maximumMonthsInYear?4() -> int -QtCore.QCalendar.name?4() -> QString -QtCore.QCalendar.dateFromParts?4(int, int, int) -> QDate -QtCore.QCalendar.dateFromParts?4(QCalendar.YearMonthDay) -> QDate -QtCore.QCalendar.partsFromDate?4(QDate) -> QCalendar.YearMonthDay -QtCore.QCalendar.dayOfWeek?4(QDate) -> int -QtCore.QCalendar.monthName?4(QLocale, int, int year=QCalendar.Unspecified, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QCalendar.standaloneMonthName?4(QLocale, int, int year=QCalendar.Unspecified, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QCalendar.weekDayName?4(QLocale, int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QCalendar.standaloneWeekDayName?4(QLocale, int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QCalendar.dateTimeToString?4(QStringView, QDateTime, QDate, QTime, QLocale) -> QString -QtCore.QCalendar.availableCalendars?4() -> QStringList -QtCore.QCalendar.matchCenturyToWeekday?4(QCalendar.YearMonthDay, int) -> QDate -QtCore.QCalendar.YearMonthDay.day?7 -QtCore.QCalendar.YearMonthDay.month?7 -QtCore.QCalendar.YearMonthDay.year?7 -QtCore.QCalendar.YearMonthDay?1() -QtCore.QCalendar.YearMonthDay.__init__?1(self) -QtCore.QCalendar.YearMonthDay?1(int, int month=1, int day=1) -QtCore.QCalendar.YearMonthDay.__init__?1(self, int, int month=1, int day=1) -QtCore.QCalendar.YearMonthDay?1(QCalendar.YearMonthDay) -QtCore.QCalendar.YearMonthDay.__init__?1(self, QCalendar.YearMonthDay) -QtCore.QCalendar.YearMonthDay.isValid?4() -> bool -QtCore.QCborError.Code?10 -QtCore.QCborError.Code.UnknownError?10 -QtCore.QCborError.Code.AdvancePastEnd?10 -QtCore.QCborError.Code.InputOutputError?10 -QtCore.QCborError.Code.GarbageAtEnd?10 -QtCore.QCborError.Code.EndOfFile?10 -QtCore.QCborError.Code.UnexpectedBreak?10 -QtCore.QCborError.Code.UnknownType?10 -QtCore.QCborError.Code.IllegalType?10 -QtCore.QCborError.Code.IllegalNumber?10 -QtCore.QCborError.Code.IllegalSimpleType?10 -QtCore.QCborError.Code.InvalidUtf8String?10 -QtCore.QCborError.Code.DataTooLarge?10 -QtCore.QCborError.Code.NestingTooDeep?10 -QtCore.QCborError.Code.UnsupportedType?10 -QtCore.QCborError.Code.NoError?10 -QtCore.QCborError?1() -QtCore.QCborError.__init__?1(self) -QtCore.QCborError?1(QCborError) -QtCore.QCborError.__init__?1(self, QCborError) -QtCore.QCborError.code?4() -> QCborError.Code -QtCore.QCborError.toString?4() -> QString -QtCore.QCborStreamReader.StringResultCode?10 -QtCore.QCborStreamReader.StringResultCode.EndOfString?10 -QtCore.QCborStreamReader.StringResultCode.Ok?10 -QtCore.QCborStreamReader.StringResultCode.Error?10 -QtCore.QCborStreamReader.Type?10 -QtCore.QCborStreamReader.Type.UnsignedInteger?10 -QtCore.QCborStreamReader.Type.NegativeInteger?10 -QtCore.QCborStreamReader.Type.ByteString?10 -QtCore.QCborStreamReader.Type.ByteArray?10 -QtCore.QCborStreamReader.Type.TextString?10 -QtCore.QCborStreamReader.Type.String?10 -QtCore.QCborStreamReader.Type.Array?10 -QtCore.QCborStreamReader.Type.Map?10 -QtCore.QCborStreamReader.Type.Tag?10 -QtCore.QCborStreamReader.Type.SimpleType?10 -QtCore.QCborStreamReader.Type.HalfFloat?10 -QtCore.QCborStreamReader.Type.Float16?10 -QtCore.QCborStreamReader.Type.Float?10 -QtCore.QCborStreamReader.Type.Double?10 -QtCore.QCborStreamReader.Type.Invalid?10 -QtCore.QCborStreamReader?1() -QtCore.QCborStreamReader.__init__?1(self) -QtCore.QCborStreamReader?1(QByteArray) -QtCore.QCborStreamReader.__init__?1(self, QByteArray) -QtCore.QCborStreamReader?1(QIODevice) -QtCore.QCborStreamReader.__init__?1(self, QIODevice) -QtCore.QCborStreamReader.setDevice?4(QIODevice) -QtCore.QCborStreamReader.device?4() -> QIODevice -QtCore.QCborStreamReader.addData?4(QByteArray) -QtCore.QCborStreamReader.reparse?4() -QtCore.QCborStreamReader.clear?4() -QtCore.QCborStreamReader.reset?4() -QtCore.QCborStreamReader.lastError?4() -> QCborError -QtCore.QCborStreamReader.currentOffset?4() -> int -QtCore.QCborStreamReader.isValid?4() -> bool -QtCore.QCborStreamReader.containerDepth?4() -> int -QtCore.QCborStreamReader.parentContainerType?4() -> QCborStreamReader.Type -QtCore.QCborStreamReader.hasNext?4() -> bool -QtCore.QCborStreamReader.next?4(int maxRecursion=10000) -> bool -QtCore.QCborStreamReader.type?4() -> QCborStreamReader.Type -QtCore.QCborStreamReader.isUnsignedInteger?4() -> bool -QtCore.QCborStreamReader.isNegativeInteger?4() -> bool -QtCore.QCborStreamReader.isInteger?4() -> bool -QtCore.QCborStreamReader.isByteArray?4() -> bool -QtCore.QCborStreamReader.isString?4() -> bool -QtCore.QCborStreamReader.isArray?4() -> bool -QtCore.QCborStreamReader.isMap?4() -> bool -QtCore.QCborStreamReader.isTag?4() -> bool -QtCore.QCborStreamReader.isSimpleType?4() -> bool -QtCore.QCborStreamReader.isFloat16?4() -> bool -QtCore.QCborStreamReader.isFloat?4() -> bool -QtCore.QCborStreamReader.isDouble?4() -> bool -QtCore.QCborStreamReader.isInvalid?4() -> bool -QtCore.QCborStreamReader.isSimpleType?4(QCborSimpleType) -> bool -QtCore.QCborStreamReader.isFalse?4() -> bool -QtCore.QCborStreamReader.isTrue?4() -> bool -QtCore.QCborStreamReader.isBool?4() -> bool -QtCore.QCborStreamReader.isNull?4() -> bool -QtCore.QCborStreamReader.isUndefined?4() -> bool -QtCore.QCborStreamReader.isLengthKnown?4() -> bool -QtCore.QCborStreamReader.length?4() -> int -QtCore.QCborStreamReader.isContainer?4() -> bool -QtCore.QCborStreamReader.enterContainer?4() -> bool -QtCore.QCborStreamReader.leaveContainer?4() -> bool -QtCore.QCborStreamReader.readString?4() -> Tuple -QtCore.QCborStreamReader.readByteArray?4() -> Tuple -QtCore.QCborStreamReader.readUtf8String?4() -> Tuple -QtCore.QCborStreamReader.toBool?4() -> bool -QtCore.QCborStreamReader.toUnsignedInteger?4() -> int -QtCore.QCborStreamReader.toSimpleType?4() -> QCborSimpleType -QtCore.QCborStreamReader.toDouble?4() -> float -QtCore.QCborStreamReader.toInteger?4() -> int -QtCore.QCborStreamReader.readAndAppendToString?4(QString) -> bool -QtCore.QCborStreamReader.readAndAppendToUtf8String?4(QByteArray) -> bool -QtCore.QCborStreamReader.readAndAppendToByteArray?4(QByteArray) -> bool -QtCore.QCborStreamReader.readAllString?4() -> QString -QtCore.QCborStreamReader.readAllUtf8String?4() -> QByteArray -QtCore.QCborStreamReader.readAllByteArray?4() -> QByteArray -QtCore.QCborStreamWriter?1(QIODevice) -QtCore.QCborStreamWriter.__init__?1(self, QIODevice) -QtCore.QCborStreamWriter?1(QByteArray) -QtCore.QCborStreamWriter.__init__?1(self, QByteArray) -QtCore.QCborStreamWriter.setDevice?4(QIODevice) -QtCore.QCborStreamWriter.device?4() -> QIODevice -QtCore.QCborStreamWriter.append?4(QByteArray) -QtCore.QCborStreamWriter.append?4(QStringView) -QtCore.QCborStreamWriter.append?4(QCborKnownTags) -QtCore.QCborStreamWriter.append?4(QCborSimpleType) -QtCore.QCborStreamWriter.append?4(bool) -QtCore.QCborStreamWriter.append?4(float) -QtCore.QCborStreamWriter.append?4(Any) -QtCore.QCborStreamWriter.appendNull?4() -QtCore.QCborStreamWriter.appendUndefined?4() -QtCore.QCborStreamWriter.startArray?4() -QtCore.QCborStreamWriter.startArray?4(int) -QtCore.QCborStreamWriter.endArray?4() -> bool -QtCore.QCborStreamWriter.startMap?4() -QtCore.QCborStreamWriter.startMap?4(int) -QtCore.QCborStreamWriter.endMap?4() -> bool -QtCore.QCollatorSortKey?1(QCollatorSortKey) -QtCore.QCollatorSortKey.__init__?1(self, QCollatorSortKey) -QtCore.QCollatorSortKey.swap?4(QCollatorSortKey) -QtCore.QCollatorSortKey.compare?4(QCollatorSortKey) -> int -QtCore.QCollator?1() -QtCore.QCollator.__init__?1(self) -QtCore.QCollator?1(QLocale) -QtCore.QCollator.__init__?1(self, QLocale) -QtCore.QCollator?1(QCollator) -QtCore.QCollator.__init__?1(self, QCollator) -QtCore.QCollator.swap?4(QCollator) -QtCore.QCollator.setLocale?4(QLocale) -QtCore.QCollator.locale?4() -> QLocale -QtCore.QCollator.caseSensitivity?4() -> Qt.CaseSensitivity -QtCore.QCollator.setCaseSensitivity?4(Qt.CaseSensitivity) -QtCore.QCollator.setNumericMode?4(bool) -QtCore.QCollator.numericMode?4() -> bool -QtCore.QCollator.setIgnorePunctuation?4(bool) -QtCore.QCollator.ignorePunctuation?4() -> bool -QtCore.QCollator.compare?4(QString, QString) -> int -QtCore.QCollator.sortKey?4(QString) -> QCollatorSortKey -QtCore.QCollator.defaultCompare?4(QStringView, QStringView) -> int -QtCore.QCollator.defaultSortKey?4(QStringView) -> QCollatorSortKey -QtCore.QCommandLineOption.Flag?10 -QtCore.QCommandLineOption.Flag.HiddenFromHelp?10 -QtCore.QCommandLineOption.Flag.ShortOptionStyle?10 -QtCore.QCommandLineOption?1(QString) -QtCore.QCommandLineOption.__init__?1(self, QString) -QtCore.QCommandLineOption?1(QStringList) -QtCore.QCommandLineOption.__init__?1(self, QStringList) -QtCore.QCommandLineOption?1(QString, QString, QString valueName='', QString defaultValue='') -QtCore.QCommandLineOption.__init__?1(self, QString, QString, QString valueName='', QString defaultValue='') -QtCore.QCommandLineOption?1(QStringList, QString, QString valueName='', QString defaultValue='') -QtCore.QCommandLineOption.__init__?1(self, QStringList, QString, QString valueName='', QString defaultValue='') -QtCore.QCommandLineOption?1(QCommandLineOption) -QtCore.QCommandLineOption.__init__?1(self, QCommandLineOption) -QtCore.QCommandLineOption.swap?4(QCommandLineOption) -QtCore.QCommandLineOption.names?4() -> QStringList -QtCore.QCommandLineOption.setValueName?4(QString) -QtCore.QCommandLineOption.valueName?4() -> QString -QtCore.QCommandLineOption.setDescription?4(QString) -QtCore.QCommandLineOption.description?4() -> QString -QtCore.QCommandLineOption.setDefaultValue?4(QString) -QtCore.QCommandLineOption.setDefaultValues?4(QStringList) -QtCore.QCommandLineOption.defaultValues?4() -> QStringList -QtCore.QCommandLineOption.flags?4() -> unknown-type -QtCore.QCommandLineOption.setFlags?4(unknown-type) -QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode?10 -QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode.ParseAsOptions?10 -QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode.ParseAsPositionalArguments?10 -QtCore.QCommandLineParser.SingleDashWordOptionMode?10 -QtCore.QCommandLineParser.SingleDashWordOptionMode.ParseAsCompactedShortOptions?10 -QtCore.QCommandLineParser.SingleDashWordOptionMode.ParseAsLongOptions?10 -QtCore.QCommandLineParser?1() -QtCore.QCommandLineParser.__init__?1(self) -QtCore.QCommandLineParser.setSingleDashWordOptionMode?4(QCommandLineParser.SingleDashWordOptionMode) -QtCore.QCommandLineParser.addOption?4(QCommandLineOption) -> bool -QtCore.QCommandLineParser.addVersionOption?4() -> QCommandLineOption -QtCore.QCommandLineParser.addHelpOption?4() -> QCommandLineOption -QtCore.QCommandLineParser.setApplicationDescription?4(QString) -QtCore.QCommandLineParser.applicationDescription?4() -> QString -QtCore.QCommandLineParser.addPositionalArgument?4(QString, QString, QString syntax='') -QtCore.QCommandLineParser.clearPositionalArguments?4() -QtCore.QCommandLineParser.process?4(QStringList) -QtCore.QCommandLineParser.process?4(QCoreApplication) -QtCore.QCommandLineParser.parse?4(QStringList) -> bool -QtCore.QCommandLineParser.errorText?4() -> QString -QtCore.QCommandLineParser.isSet?4(QString) -> bool -QtCore.QCommandLineParser.value?4(QString) -> QString -QtCore.QCommandLineParser.values?4(QString) -> QStringList -QtCore.QCommandLineParser.isSet?4(QCommandLineOption) -> bool -QtCore.QCommandLineParser.value?4(QCommandLineOption) -> QString -QtCore.QCommandLineParser.values?4(QCommandLineOption) -> QStringList -QtCore.QCommandLineParser.positionalArguments?4() -> QStringList -QtCore.QCommandLineParser.optionNames?4() -> QStringList -QtCore.QCommandLineParser.unknownOptionNames?4() -> QStringList -QtCore.QCommandLineParser.showHelp?4(int exitCode=0) -QtCore.QCommandLineParser.helpText?4() -> QString -QtCore.QCommandLineParser.addOptions?4(unknown-type) -> bool -QtCore.QCommandLineParser.showVersion?4() -QtCore.QCommandLineParser.setOptionsAfterPositionalArgumentsMode?4(QCommandLineParser.OptionsAfterPositionalArgumentsMode) -QtCore.QConcatenateTablesProxyModel?1(QObject parent=None) -QtCore.QConcatenateTablesProxyModel.__init__?1(self, QObject parent=None) -QtCore.QConcatenateTablesProxyModel.addSourceModel?4(QAbstractItemModel) -QtCore.QConcatenateTablesProxyModel.removeSourceModel?4(QAbstractItemModel) -QtCore.QConcatenateTablesProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex -QtCore.QConcatenateTablesProxyModel.mapToSource?4(QModelIndex) -> QModelIndex -QtCore.QConcatenateTablesProxyModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtCore.QConcatenateTablesProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtCore.QConcatenateTablesProxyModel.itemData?4(QModelIndex) -> unknown-type -QtCore.QConcatenateTablesProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtCore.QConcatenateTablesProxyModel.flags?4(QModelIndex) -> unknown-type -QtCore.QConcatenateTablesProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QConcatenateTablesProxyModel.parent?4(QModelIndex) -> QModelIndex -QtCore.QConcatenateTablesProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QConcatenateTablesProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QConcatenateTablesProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QConcatenateTablesProxyModel.mimeTypes?4() -> QStringList -QtCore.QConcatenateTablesProxyModel.mimeData?4(unknown-type) -> QMimeData -QtCore.QConcatenateTablesProxyModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QConcatenateTablesProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QConcatenateTablesProxyModel.span?4(QModelIndex) -> QSize -QtCore.QConcatenateTablesProxyModel.sourceModels?4() -> unknown-type -QtCore.QCoreApplication?1(List) -QtCore.QCoreApplication.__init__?1(self, List) -QtCore.QCoreApplication.setOrganizationDomain?4(QString) -QtCore.QCoreApplication.organizationDomain?4() -> QString -QtCore.QCoreApplication.setOrganizationName?4(QString) -QtCore.QCoreApplication.organizationName?4() -> QString -QtCore.QCoreApplication.setApplicationName?4(QString) -QtCore.QCoreApplication.applicationName?4() -> QString -QtCore.QCoreApplication.arguments?4() -> QStringList -QtCore.QCoreApplication.instance?4() -> QCoreApplication -QtCore.QCoreApplication.exec?4() -> int -QtCore.QCoreApplication.processEvents?4(unknown-type flags=QEventLoop.AllEvents) -QtCore.QCoreApplication.processEvents?4(unknown-type, int) -QtCore.QCoreApplication.processEvents?4(unknown-type, QDeadlineTimer) -QtCore.QCoreApplication.sendEvent?4(QObject, QEvent) -> bool -QtCore.QCoreApplication.postEvent?4(QObject, QEvent, int priority=Qt.NormalEventPriority) -QtCore.QCoreApplication.sendPostedEvents?4(QObject receiver=None, int eventType=0) -QtCore.QCoreApplication.removePostedEvents?4(QObject, int eventType=0) -QtCore.QCoreApplication.notify?4(QObject, QEvent) -> bool -QtCore.QCoreApplication.startingUp?4() -> bool -QtCore.QCoreApplication.closingDown?4() -> bool -QtCore.QCoreApplication.applicationDirPath?4() -> QString -QtCore.QCoreApplication.applicationFilePath?4() -> QString -QtCore.QCoreApplication.setLibraryPaths?4(QStringList) -QtCore.QCoreApplication.libraryPaths?4() -> QStringList -QtCore.QCoreApplication.addLibraryPath?4(QString) -QtCore.QCoreApplication.removeLibraryPath?4(QString) -QtCore.QCoreApplication.installTranslator?4(QTranslator) -> bool -QtCore.QCoreApplication.removeTranslator?4(QTranslator) -> bool -QtCore.QCoreApplication.translate?4(str, str, str disambiguation=None, int n=-1) -> QString -QtCore.QCoreApplication.setAttribute?4(Qt.ApplicationAttribute, bool on=True) -QtCore.QCoreApplication.testAttribute?4(Qt.ApplicationAttribute) -> bool -QtCore.QCoreApplication.quit?4() -QtCore.QCoreApplication.exit?4(int returnCode=0) -QtCore.QCoreApplication.aboutToQuit?4() -QtCore.QCoreApplication.event?4(QEvent) -> bool -QtCore.QCoreApplication.setApplicationVersion?4(QString) -QtCore.QCoreApplication.applicationVersion?4() -> QString -QtCore.QCoreApplication.applicationPid?4() -> int -QtCore.QCoreApplication.eventDispatcher?4() -> QAbstractEventDispatcher -QtCore.QCoreApplication.setEventDispatcher?4(QAbstractEventDispatcher) -QtCore.QCoreApplication.isQuitLockEnabled?4() -> bool -QtCore.QCoreApplication.setQuitLockEnabled?4(bool) -QtCore.QCoreApplication.installNativeEventFilter?4(QAbstractNativeEventFilter) -QtCore.QCoreApplication.removeNativeEventFilter?4(QAbstractNativeEventFilter) -QtCore.QCoreApplication.setSetuidAllowed?4(bool) -QtCore.QCoreApplication.isSetuidAllowed?4() -> bool -QtCore.QCoreApplication.__enter__?4() -> Any -QtCore.QCoreApplication.__exit__?4(Any, Any, Any) -QtCore.QCoreApplication.checkPermission?4(QPermission) -> Qt.PermissionStatus -QtCore.QCoreApplication.requestPermission?4(QPermission, Callable[..., None]) -QtCore.QEvent.Type?10 -QtCore.QEvent.Type.None_?10 -QtCore.QEvent.Type.Timer?10 -QtCore.QEvent.Type.MouseButtonPress?10 -QtCore.QEvent.Type.MouseButtonRelease?10 -QtCore.QEvent.Type.MouseButtonDblClick?10 -QtCore.QEvent.Type.MouseMove?10 -QtCore.QEvent.Type.KeyPress?10 -QtCore.QEvent.Type.KeyRelease?10 -QtCore.QEvent.Type.FocusIn?10 -QtCore.QEvent.Type.FocusOut?10 -QtCore.QEvent.Type.Enter?10 -QtCore.QEvent.Type.Leave?10 -QtCore.QEvent.Type.Paint?10 -QtCore.QEvent.Type.Move?10 -QtCore.QEvent.Type.Resize?10 -QtCore.QEvent.Type.Show?10 -QtCore.QEvent.Type.Hide?10 -QtCore.QEvent.Type.Close?10 -QtCore.QEvent.Type.Quit?10 -QtCore.QEvent.Type.ParentChange?10 -QtCore.QEvent.Type.ParentAboutToChange?10 -QtCore.QEvent.Type.ThreadChange?10 -QtCore.QEvent.Type.WindowActivate?10 -QtCore.QEvent.Type.WindowDeactivate?10 -QtCore.QEvent.Type.ShowToParent?10 -QtCore.QEvent.Type.HideToParent?10 -QtCore.QEvent.Type.Wheel?10 -QtCore.QEvent.Type.WindowTitleChange?10 -QtCore.QEvent.Type.WindowIconChange?10 -QtCore.QEvent.Type.ApplicationWindowIconChange?10 -QtCore.QEvent.Type.ApplicationFontChange?10 -QtCore.QEvent.Type.ApplicationLayoutDirectionChange?10 -QtCore.QEvent.Type.ApplicationPaletteChange?10 -QtCore.QEvent.Type.PaletteChange?10 -QtCore.QEvent.Type.Clipboard?10 -QtCore.QEvent.Type.MetaCall?10 -QtCore.QEvent.Type.SockAct?10 -QtCore.QEvent.Type.WinEventAct?10 -QtCore.QEvent.Type.DeferredDelete?10 -QtCore.QEvent.Type.DragEnter?10 -QtCore.QEvent.Type.DragMove?10 -QtCore.QEvent.Type.DragLeave?10 -QtCore.QEvent.Type.Drop?10 -QtCore.QEvent.Type.ChildAdded?10 -QtCore.QEvent.Type.ChildPolished?10 -QtCore.QEvent.Type.ChildRemoved?10 -QtCore.QEvent.Type.PolishRequest?10 -QtCore.QEvent.Type.Polish?10 -QtCore.QEvent.Type.LayoutRequest?10 -QtCore.QEvent.Type.UpdateRequest?10 -QtCore.QEvent.Type.UpdateLater?10 -QtCore.QEvent.Type.ContextMenu?10 -QtCore.QEvent.Type.InputMethod?10 -QtCore.QEvent.Type.TabletMove?10 -QtCore.QEvent.Type.LocaleChange?10 -QtCore.QEvent.Type.LanguageChange?10 -QtCore.QEvent.Type.LayoutDirectionChange?10 -QtCore.QEvent.Type.TabletPress?10 -QtCore.QEvent.Type.TabletRelease?10 -QtCore.QEvent.Type.OkRequest?10 -QtCore.QEvent.Type.IconDrag?10 -QtCore.QEvent.Type.FontChange?10 -QtCore.QEvent.Type.EnabledChange?10 -QtCore.QEvent.Type.ActivationChange?10 -QtCore.QEvent.Type.StyleChange?10 -QtCore.QEvent.Type.IconTextChange?10 -QtCore.QEvent.Type.ModifiedChange?10 -QtCore.QEvent.Type.MouseTrackingChange?10 -QtCore.QEvent.Type.WindowBlocked?10 -QtCore.QEvent.Type.WindowUnblocked?10 -QtCore.QEvent.Type.WindowStateChange?10 -QtCore.QEvent.Type.ToolTip?10 -QtCore.QEvent.Type.WhatsThis?10 -QtCore.QEvent.Type.StatusTip?10 -QtCore.QEvent.Type.ActionChanged?10 -QtCore.QEvent.Type.ActionAdded?10 -QtCore.QEvent.Type.ActionRemoved?10 -QtCore.QEvent.Type.FileOpen?10 -QtCore.QEvent.Type.Shortcut?10 -QtCore.QEvent.Type.ShortcutOverride?10 -QtCore.QEvent.Type.WhatsThisClicked?10 -QtCore.QEvent.Type.ToolBarChange?10 -QtCore.QEvent.Type.ApplicationActivate?10 -QtCore.QEvent.Type.ApplicationActivated?10 -QtCore.QEvent.Type.ApplicationDeactivate?10 -QtCore.QEvent.Type.ApplicationDeactivated?10 -QtCore.QEvent.Type.QueryWhatsThis?10 -QtCore.QEvent.Type.EnterWhatsThisMode?10 -QtCore.QEvent.Type.LeaveWhatsThisMode?10 -QtCore.QEvent.Type.ZOrderChange?10 -QtCore.QEvent.Type.HoverEnter?10 -QtCore.QEvent.Type.HoverLeave?10 -QtCore.QEvent.Type.HoverMove?10 -QtCore.QEvent.Type.GraphicsSceneMouseMove?10 -QtCore.QEvent.Type.GraphicsSceneMousePress?10 -QtCore.QEvent.Type.GraphicsSceneMouseRelease?10 -QtCore.QEvent.Type.GraphicsSceneMouseDoubleClick?10 -QtCore.QEvent.Type.GraphicsSceneContextMenu?10 -QtCore.QEvent.Type.GraphicsSceneHoverEnter?10 -QtCore.QEvent.Type.GraphicsSceneHoverMove?10 -QtCore.QEvent.Type.GraphicsSceneHoverLeave?10 -QtCore.QEvent.Type.GraphicsSceneHelp?10 -QtCore.QEvent.Type.GraphicsSceneDragEnter?10 -QtCore.QEvent.Type.GraphicsSceneDragMove?10 -QtCore.QEvent.Type.GraphicsSceneDragLeave?10 -QtCore.QEvent.Type.GraphicsSceneDrop?10 -QtCore.QEvent.Type.GraphicsSceneWheel?10 -QtCore.QEvent.Type.GraphicsSceneResize?10 -QtCore.QEvent.Type.GraphicsSceneMove?10 -QtCore.QEvent.Type.KeyboardLayoutChange?10 -QtCore.QEvent.Type.DynamicPropertyChange?10 -QtCore.QEvent.Type.TabletEnterProximity?10 -QtCore.QEvent.Type.TabletLeaveProximity?10 -QtCore.QEvent.Type.NonClientAreaMouseMove?10 -QtCore.QEvent.Type.NonClientAreaMouseButtonPress?10 -QtCore.QEvent.Type.NonClientAreaMouseButtonRelease?10 -QtCore.QEvent.Type.NonClientAreaMouseButtonDblClick?10 -QtCore.QEvent.Type.MacSizeChange?10 -QtCore.QEvent.Type.ContentsRectChange?10 -QtCore.QEvent.Type.CursorChange?10 -QtCore.QEvent.Type.ToolTipChange?10 -QtCore.QEvent.Type.GrabMouse?10 -QtCore.QEvent.Type.UngrabMouse?10 -QtCore.QEvent.Type.GrabKeyboard?10 -QtCore.QEvent.Type.UngrabKeyboard?10 -QtCore.QEvent.Type.StateMachineSignal?10 -QtCore.QEvent.Type.StateMachineWrapped?10 -QtCore.QEvent.Type.TouchBegin?10 -QtCore.QEvent.Type.TouchUpdate?10 -QtCore.QEvent.Type.TouchEnd?10 -QtCore.QEvent.Type.NativeGesture?10 -QtCore.QEvent.Type.RequestSoftwareInputPanel?10 -QtCore.QEvent.Type.CloseSoftwareInputPanel?10 -QtCore.QEvent.Type.WinIdChange?10 -QtCore.QEvent.Type.Gesture?10 -QtCore.QEvent.Type.GestureOverride?10 -QtCore.QEvent.Type.FocusAboutToChange?10 -QtCore.QEvent.Type.ScrollPrepare?10 -QtCore.QEvent.Type.Scroll?10 -QtCore.QEvent.Type.Expose?10 -QtCore.QEvent.Type.InputMethodQuery?10 -QtCore.QEvent.Type.OrientationChange?10 -QtCore.QEvent.Type.TouchCancel?10 -QtCore.QEvent.Type.PlatformPanel?10 -QtCore.QEvent.Type.ApplicationStateChange?10 -QtCore.QEvent.Type.ReadOnlyChange?10 -QtCore.QEvent.Type.PlatformSurface?10 -QtCore.QEvent.Type.TabletTrackingChange?10 -QtCore.QEvent.Type.GraphicsSceneLeave?10 -QtCore.QEvent.Type.EnterEditFocus?10 -QtCore.QEvent.Type.LeaveEditFocus?10 -QtCore.QEvent.Type.DevicePixelRatioChange?10 -QtCore.QEvent.Type.ChildWindowAdded?10 -QtCore.QEvent.Type.ChildWindowRemoved?10 -QtCore.QEvent.Type.ParentWindowAboutToChange?10 -QtCore.QEvent.Type.ParentWindowChange?10 -QtCore.QEvent.Type.User?10 -QtCore.QEvent.Type.MaxUser?10 -QtCore.QEvent?1(QEvent.Type) -QtCore.QEvent.__init__?1(self, QEvent.Type) -QtCore.QEvent?1(int) -QtCore.QEvent.__init__?1(self, int) -QtCore.QEvent.type?4() -> QEvent.Type -QtCore.QEvent.spontaneous?4() -> bool -QtCore.QEvent.setAccepted?4(bool) -QtCore.QEvent.isAccepted?4() -> bool -QtCore.QEvent.accept?4() -QtCore.QEvent.ignore?4() -QtCore.QEvent.registerEventType?4(int hint=-1) -> int -QtCore.QEvent.isInputEvent?4() -> bool -QtCore.QEvent.isPointerEvent?4() -> bool -QtCore.QEvent.isSinglePointEvent?4() -> bool -QtCore.QEvent.clone?4() -> QEvent -QtCore.QTimerEvent?1(int) -QtCore.QTimerEvent.__init__?1(self, int) -QtCore.QTimerEvent.timerId?4() -> int -QtCore.QTimerEvent.clone?4() -> QTimerEvent -QtCore.QChildEvent?1(QEvent.Type, QObject) -QtCore.QChildEvent.__init__?1(self, QEvent.Type, QObject) -QtCore.QChildEvent?1(int, QObject) -QtCore.QChildEvent.__init__?1(self, int, QObject) -QtCore.QChildEvent.child?4() -> QObject -QtCore.QChildEvent.added?4() -> bool -QtCore.QChildEvent.polished?4() -> bool -QtCore.QChildEvent.removed?4() -> bool -QtCore.QChildEvent.clone?4() -> QChildEvent -QtCore.QDynamicPropertyChangeEvent?1(QByteArray) -QtCore.QDynamicPropertyChangeEvent.__init__?1(self, QByteArray) -QtCore.QDynamicPropertyChangeEvent.propertyName?4() -> QByteArray -QtCore.QDynamicPropertyChangeEvent.clone?4() -> QDynamicPropertyChangeEvent -QtCore.QCryptographicHash.Algorithm?10 -QtCore.QCryptographicHash.Algorithm.Md4?10 -QtCore.QCryptographicHash.Algorithm.Md5?10 -QtCore.QCryptographicHash.Algorithm.Sha1?10 -QtCore.QCryptographicHash.Algorithm.Sha224?10 -QtCore.QCryptographicHash.Algorithm.Sha256?10 -QtCore.QCryptographicHash.Algorithm.Sha384?10 -QtCore.QCryptographicHash.Algorithm.Sha512?10 -QtCore.QCryptographicHash.Algorithm.Sha3_224?10 -QtCore.QCryptographicHash.Algorithm.Sha3_256?10 -QtCore.QCryptographicHash.Algorithm.Sha3_384?10 -QtCore.QCryptographicHash.Algorithm.Sha3_512?10 -QtCore.QCryptographicHash.Algorithm.Keccak_224?10 -QtCore.QCryptographicHash.Algorithm.Keccak_256?10 -QtCore.QCryptographicHash.Algorithm.Keccak_384?10 -QtCore.QCryptographicHash.Algorithm.Keccak_512?10 -QtCore.QCryptographicHash.Algorithm.Blake2b_160?10 -QtCore.QCryptographicHash.Algorithm.Blake2b_256?10 -QtCore.QCryptographicHash.Algorithm.Blake2b_384?10 -QtCore.QCryptographicHash.Algorithm.Blake2b_512?10 -QtCore.QCryptographicHash.Algorithm.Blake2s_128?10 -QtCore.QCryptographicHash.Algorithm.Blake2s_160?10 -QtCore.QCryptographicHash.Algorithm.Blake2s_224?10 -QtCore.QCryptographicHash.Algorithm.Blake2s_256?10 -QtCore.QCryptographicHash?1(QCryptographicHash.Algorithm) -QtCore.QCryptographicHash.__init__?1(self, QCryptographicHash.Algorithm) -QtCore.QCryptographicHash.reset?4() -QtCore.QCryptographicHash.addData?4(QByteArrayView) -QtCore.QCryptographicHash.addData?4(bytes) -QtCore.QCryptographicHash.addData?4(QIODevice) -> bool -QtCore.QCryptographicHash.result?4() -> QByteArray -QtCore.QCryptographicHash.resultView?4() -> QByteArrayView -QtCore.QCryptographicHash.hash?4(QByteArrayView, QCryptographicHash.Algorithm) -> QByteArray -QtCore.QCryptographicHash.hashLength?4(QCryptographicHash.Algorithm) -> int -QtCore.QCryptographicHash.swap?4(QCryptographicHash) -QtCore.QCryptographicHash.algorithm?4() -> QCryptographicHash.Algorithm -QtCore.QCryptographicHash.supportsAlgorithm?4(QCryptographicHash.Algorithm) -> bool -QtCore.QDataStream.FloatingPointPrecision?10 -QtCore.QDataStream.FloatingPointPrecision.SinglePrecision?10 -QtCore.QDataStream.FloatingPointPrecision.DoublePrecision?10 -QtCore.QDataStream.Status?10 -QtCore.QDataStream.Status.Ok?10 -QtCore.QDataStream.Status.ReadPastEnd?10 -QtCore.QDataStream.Status.ReadCorruptData?10 -QtCore.QDataStream.Status.WriteFailed?10 -QtCore.QDataStream.Status.SizeLimitExceeded?10 -QtCore.QDataStream.ByteOrder?10 -QtCore.QDataStream.ByteOrder.BigEndian?10 -QtCore.QDataStream.ByteOrder.LittleEndian?10 -QtCore.QDataStream.Version?10 -QtCore.QDataStream.Version.Qt_1_0?10 -QtCore.QDataStream.Version.Qt_2_0?10 -QtCore.QDataStream.Version.Qt_2_1?10 -QtCore.QDataStream.Version.Qt_3_0?10 -QtCore.QDataStream.Version.Qt_3_1?10 -QtCore.QDataStream.Version.Qt_3_3?10 -QtCore.QDataStream.Version.Qt_4_0?10 -QtCore.QDataStream.Version.Qt_4_1?10 -QtCore.QDataStream.Version.Qt_4_2?10 -QtCore.QDataStream.Version.Qt_4_3?10 -QtCore.QDataStream.Version.Qt_4_4?10 -QtCore.QDataStream.Version.Qt_4_5?10 -QtCore.QDataStream.Version.Qt_4_6?10 -QtCore.QDataStream.Version.Qt_4_7?10 -QtCore.QDataStream.Version.Qt_4_8?10 -QtCore.QDataStream.Version.Qt_4_9?10 -QtCore.QDataStream.Version.Qt_5_0?10 -QtCore.QDataStream.Version.Qt_5_1?10 -QtCore.QDataStream.Version.Qt_5_2?10 -QtCore.QDataStream.Version.Qt_5_3?10 -QtCore.QDataStream.Version.Qt_5_4?10 -QtCore.QDataStream.Version.Qt_5_5?10 -QtCore.QDataStream.Version.Qt_5_6?10 -QtCore.QDataStream.Version.Qt_5_7?10 -QtCore.QDataStream.Version.Qt_5_8?10 -QtCore.QDataStream.Version.Qt_5_9?10 -QtCore.QDataStream.Version.Qt_5_10?10 -QtCore.QDataStream.Version.Qt_5_11?10 -QtCore.QDataStream.Version.Qt_5_12?10 -QtCore.QDataStream.Version.Qt_5_13?10 -QtCore.QDataStream.Version.Qt_5_14?10 -QtCore.QDataStream.Version.Qt_5_15?10 -QtCore.QDataStream.Version.Qt_6_0?10 -QtCore.QDataStream.Version.Qt_6_1?10 -QtCore.QDataStream.Version.Qt_6_2?10 -QtCore.QDataStream.Version.Qt_6_3?10 -QtCore.QDataStream.Version.Qt_6_4?10 -QtCore.QDataStream.Version.Qt_6_5?10 -QtCore.QDataStream.Version.Qt_6_6?10 -QtCore.QDataStream.Version.Qt_6_7?10 -QtCore.QDataStream?1() -QtCore.QDataStream.__init__?1(self) -QtCore.QDataStream?1(QIODevice) -QtCore.QDataStream.__init__?1(self, QIODevice) -QtCore.QDataStream?1(QByteArray, unknown-type) -QtCore.QDataStream.__init__?1(self, QByteArray, unknown-type) -QtCore.QDataStream?1(QByteArray) -QtCore.QDataStream.__init__?1(self, QByteArray) -QtCore.QDataStream.device?4() -> QIODevice -QtCore.QDataStream.setDevice?4(QIODevice) -QtCore.QDataStream.atEnd?4() -> bool -QtCore.QDataStream.status?4() -> QDataStream.Status -QtCore.QDataStream.setStatus?4(QDataStream.Status) -QtCore.QDataStream.resetStatus?4() -QtCore.QDataStream.floatingPointPrecision?4() -> QDataStream.FloatingPointPrecision -QtCore.QDataStream.setFloatingPointPrecision?4(QDataStream.FloatingPointPrecision) -QtCore.QDataStream.byteOrder?4() -> QDataStream.ByteOrder -QtCore.QDataStream.setByteOrder?4(QDataStream.ByteOrder) -QtCore.QDataStream.version?4() -> int -QtCore.QDataStream.setVersion?4(int) -QtCore.QDataStream.readBytes?4() -> Any -QtCore.QDataStream.readRawData?4(int) -> Any -QtCore.QDataStream.writeBytes?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> QDataStream -QtCore.QDataStream.writeRawData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QDataStream.skipRawData?4(int) -> int -QtCore.QDataStream.startTransaction?4() -QtCore.QDataStream.commitTransaction?4() -> bool -QtCore.QDataStream.rollbackTransaction?4() -QtCore.QDataStream.abortTransaction?4() -QtCore.QDataStream.readInt?4() -> int -QtCore.QDataStream.readInt8?4() -> int -QtCore.QDataStream.readUInt8?4() -> int -QtCore.QDataStream.readInt16?4() -> int -QtCore.QDataStream.readUInt16?4() -> int -QtCore.QDataStream.readInt32?4() -> int -QtCore.QDataStream.readUInt32?4() -> int -QtCore.QDataStream.readInt64?4() -> int -QtCore.QDataStream.readUInt64?4() -> int -QtCore.QDataStream.readBool?4() -> bool -QtCore.QDataStream.readFloat?4() -> float -QtCore.QDataStream.readDouble?4() -> float -QtCore.QDataStream.readString?4() -> Any -QtCore.QDataStream.writeInt?4(int) -QtCore.QDataStream.writeInt8?4(int) -QtCore.QDataStream.writeUInt8?4(int) -QtCore.QDataStream.writeInt16?4(int) -QtCore.QDataStream.writeUInt16?4(int) -QtCore.QDataStream.writeInt32?4(int) -QtCore.QDataStream.writeUInt32?4(int) -QtCore.QDataStream.writeInt64?4(int) -QtCore.QDataStream.writeUInt64?4(int) -QtCore.QDataStream.writeBool?4(bool) -QtCore.QDataStream.writeFloat?4(float) -QtCore.QDataStream.writeDouble?4(float) -QtCore.QDataStream.writeString?4(bytes) -QtCore.QDataStream.readQString?4() -> QString -QtCore.QDataStream.writeQString?4(QString) -QtCore.QDataStream.readQStringList?4() -> QStringList -QtCore.QDataStream.writeQStringList?4(QStringList) -QtCore.QDataStream.readQVariant?4() -> QVariant -QtCore.QDataStream.writeQVariant?4(QVariant) -QtCore.QDataStream.readQVariantList?4() -> unknown-type -QtCore.QDataStream.writeQVariantList?4(unknown-type) -QtCore.QDataStream.readQVariantMap?4() -> unknown-type -QtCore.QDataStream.writeQVariantMap?4(unknown-type) -QtCore.QDataStream.readQVariantHash?4() -> unknown-type -QtCore.QDataStream.writeQVariantHash?4(unknown-type) -QtCore.QDate?1() -QtCore.QDate.__init__?1(self) -QtCore.QDate?1(int, int, int) -QtCore.QDate.__init__?1(self, int, int, int) -QtCore.QDate?1(int, int, int, QCalendar) -QtCore.QDate.__init__?1(self, int, int, int, QCalendar) -QtCore.QDate?1(QDate) -QtCore.QDate.__init__?1(self, QDate) -QtCore.QDate.toPyDate?4() -> Any -QtCore.QDate.isNull?4() -> bool -QtCore.QDate.isValid?4() -> bool -QtCore.QDate.year?4() -> int -QtCore.QDate.year?4(QCalendar) -> int -QtCore.QDate.month?4() -> int -QtCore.QDate.month?4(QCalendar) -> int -QtCore.QDate.day?4() -> int -QtCore.QDate.day?4(QCalendar) -> int -QtCore.QDate.dayOfWeek?4() -> int -QtCore.QDate.dayOfWeek?4(QCalendar) -> int -QtCore.QDate.dayOfYear?4() -> int -QtCore.QDate.dayOfYear?4(QCalendar) -> int -QtCore.QDate.daysInMonth?4() -> int -QtCore.QDate.daysInMonth?4(QCalendar) -> int -QtCore.QDate.daysInYear?4() -> int -QtCore.QDate.daysInYear?4(QCalendar) -> int -QtCore.QDate.weekNumber?4() -> (int, int) -QtCore.QDate.toString?4(QString, QCalendar cal=QCalendar()) -> QString -QtCore.QDate.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString -QtCore.QDate.addDays?4(int) -> QDate -QtCore.QDate.addMonths?4(int) -> QDate -QtCore.QDate.addMonths?4(int, QCalendar) -> QDate -QtCore.QDate.addYears?4(int) -> QDate -QtCore.QDate.addYears?4(int, QCalendar) -> QDate -QtCore.QDate.currentDate?4() -> QDate -QtCore.QDate.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QDate -QtCore.QDate.fromString?4(QString, QString, QCalendar cal=QCalendar()) -> QDate -QtCore.QDate.fromString?4(QString, QString, int, QCalendar cal=QCalendar()) -> QDate -QtCore.QDate.isValid?4(int, int, int) -> bool -QtCore.QDate.isLeapYear?4(int) -> bool -QtCore.QDate.fromJulianDay?4(int) -> QDate -QtCore.QDate.toJulianDay?4() -> int -QtCore.QDate.setDate?4(int, int, int) -> bool -QtCore.QDate.getDate?4() -> (int, int, int) -QtCore.QDate.startOfDay?4(Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime -QtCore.QDate.startOfDay?4(QTimeZone) -> QDateTime -QtCore.QDate.endOfDay?4(Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime -QtCore.QDate.endOfDay?4(QTimeZone) -> QDateTime -QtCore.QDate.setDate?4(int, int, int, QCalendar) -> bool -QtCore.QDate.daysTo?4(QDate) -> int -QtCore.QTime?1() -QtCore.QTime.__init__?1(self) -QtCore.QTime?1(int, int, int second=0, int msec=0) -QtCore.QTime.__init__?1(self, int, int, int second=0, int msec=0) -QtCore.QTime?1(QTime) -QtCore.QTime.__init__?1(self, QTime) -QtCore.QTime.toPyTime?4() -> Any -QtCore.QTime.isNull?4() -> bool -QtCore.QTime.isValid?4() -> bool -QtCore.QTime.hour?4() -> int -QtCore.QTime.minute?4() -> int -QtCore.QTime.second?4() -> int -QtCore.QTime.msec?4() -> int -QtCore.QTime.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString -QtCore.QTime.toString?4(QString) -> QString -QtCore.QTime.setHMS?4(int, int, int, int msec=0) -> bool -QtCore.QTime.addSecs?4(int) -> QTime -QtCore.QTime.addMSecs?4(int) -> QTime -QtCore.QTime.currentTime?4() -> QTime -QtCore.QTime.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QTime -QtCore.QTime.fromString?4(QString, QString) -> QTime -QtCore.QTime.isValid?4(int, int, int, int msec=0) -> bool -QtCore.QTime.fromMSecsSinceStartOfDay?4(int) -> QTime -QtCore.QTime.msecsSinceStartOfDay?4() -> int -QtCore.QTime.secsTo?4(QTime) -> int -QtCore.QTime.msecsTo?4(QTime) -> int -QtCore.QDateTime.YearRange?10 -QtCore.QDateTime.YearRange.First?10 -QtCore.QDateTime.YearRange.Last?10 -QtCore.QDateTime.TransitionResolution?10 -QtCore.QDateTime.TransitionResolution.Reject?10 -QtCore.QDateTime.TransitionResolution.RelativeToBefore?10 -QtCore.QDateTime.TransitionResolution.RelativeToAfter?10 -QtCore.QDateTime.TransitionResolution.PreferBefore?10 -QtCore.QDateTime.TransitionResolution.PreferAfter?10 -QtCore.QDateTime.TransitionResolution.PreferStandard?10 -QtCore.QDateTime.TransitionResolution.PreferDaylightSaving?10 -QtCore.QDateTime.TransitionResolution.LegacyBehavior?10 -QtCore.QDateTime?1() -QtCore.QDateTime.__init__?1(self) -QtCore.QDateTime?1(QDateTime) -QtCore.QDateTime.__init__?1(self, QDateTime) -QtCore.QDateTime?1(int, int, int, int, int, int second=0, int msec=0, int timeSpec=0) -QtCore.QDateTime.__init__?1(self, int, int, int, int, int, int second=0, int msec=0, int timeSpec=0) -QtCore.QDateTime?1(QDate, QTime, QDateTime.TransitionResolution) -QtCore.QDateTime.__init__?1(self, QDate, QTime, QDateTime.TransitionResolution) -QtCore.QDateTime?1(QDate, QTime, Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -QtCore.QDateTime.__init__?1(self, QDate, QTime, Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -QtCore.QDateTime?1(QDate, QTime, QTimeZone, QDateTime.TransitionResolution resolve=QDateTime.TransitionResolution.LegacyBehavior) -QtCore.QDateTime.__init__?1(self, QDate, QTime, QTimeZone, QDateTime.TransitionResolution resolve=QDateTime.TransitionResolution.LegacyBehavior) -QtCore.QDateTime.toPyDateTime?4() -> Any -QtCore.QDateTime.isNull?4() -> bool -QtCore.QDateTime.isValid?4() -> bool -QtCore.QDateTime.date?4() -> QDate -QtCore.QDateTime.time?4() -> QTime -QtCore.QDateTime.timeSpec?4() -> Qt.TimeSpec -QtCore.QDateTime.setTimeSpec?4(Qt.TimeSpec) -QtCore.QDateTime.toString?4(QString, QCalendar cal=QCalendar()) -> QString -QtCore.QDateTime.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString -QtCore.QDateTime.addDays?4(int) -> QDateTime -QtCore.QDateTime.addMonths?4(int) -> QDateTime -QtCore.QDateTime.addYears?4(int) -> QDateTime -QtCore.QDateTime.addSecs?4(int) -> QDateTime -QtCore.QDateTime.addMSecs?4(int) -> QDateTime -QtCore.QDateTime.toTimeSpec?4(Qt.TimeSpec) -> QDateTime -QtCore.QDateTime.toLocalTime?4() -> QDateTime -QtCore.QDateTime.toUTC?4() -> QDateTime -QtCore.QDateTime.daysTo?4(QDateTime) -> int -QtCore.QDateTime.secsTo?4(QDateTime) -> int -QtCore.QDateTime.currentDateTime?4() -> QDateTime -QtCore.QDateTime.currentDateTime?4(QTimeZone) -> QDateTime -QtCore.QDateTime.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QDateTime -QtCore.QDateTime.fromString?4(QString, QString, QCalendar cal=QCalendar()) -> QDateTime -QtCore.QDateTime.fromString?4(QString, QString, int, QCalendar cal=QCalendar()) -> QDateTime -QtCore.QDateTime.toMSecsSinceEpoch?4() -> int -QtCore.QDateTime.setMSecsSinceEpoch?4(int) -QtCore.QDateTime.msecsTo?4(QDateTime) -> int -QtCore.QDateTime.currentDateTimeUtc?4() -> QDateTime -QtCore.QDateTime.currentMSecsSinceEpoch?4() -> int -QtCore.QDateTime.swap?4(QDateTime) -QtCore.QDateTime.offsetFromUtc?4() -> int -QtCore.QDateTime.timeZone?4() -> QTimeZone -QtCore.QDateTime.timeZoneAbbreviation?4() -> QString -QtCore.QDateTime.isDaylightTime?4() -> bool -QtCore.QDateTime.setOffsetFromUtc?4(int) -QtCore.QDateTime.setTimeZone?4(QTimeZone, QDateTime.TransitionResolution resolve=QDateTime.TransitionResolution.LegacyBehavior) -QtCore.QDateTime.toOffsetFromUtc?4(int) -> QDateTime -QtCore.QDateTime.toTimeZone?4(QTimeZone) -> QDateTime -QtCore.QDateTime.fromMSecsSinceEpoch?4(int, Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime -QtCore.QDateTime.fromMSecsSinceEpoch?4(int, QTimeZone) -> QDateTime -QtCore.QDateTime.toSecsSinceEpoch?4() -> int -QtCore.QDateTime.setSecsSinceEpoch?4(int) -QtCore.QDateTime.fromSecsSinceEpoch?4(int, Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime -QtCore.QDateTime.fromSecsSinceEpoch?4(int, QTimeZone) -> QDateTime -QtCore.QDateTime.currentSecsSinceEpoch?4() -> int -QtCore.QDateTime.setDate?4(QDate, QDateTime.TransitionResolution resolve=QDateTime.TransitionResolution.LegacyBehavior) -QtCore.QDateTime.setTime?4(QTime, QDateTime.TransitionResolution resolve=QDateTime.TransitionResolution.LegacyBehavior) -QtCore.QDateTime.timeRepresentation?4() -> QTimeZone -QtCore.QDeadlineTimer.ForeverConstant?10 -QtCore.QDeadlineTimer.ForeverConstant.Forever?10 -QtCore.QDeadlineTimer?1(Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.__init__?1(self, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer?1(QDeadlineTimer.ForeverConstant, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.__init__?1(self, QDeadlineTimer.ForeverConstant, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer?1(int, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.__init__?1(self, int, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer?1(QDeadlineTimer) -QtCore.QDeadlineTimer.__init__?1(self, QDeadlineTimer) -QtCore.QDeadlineTimer.swap?4(QDeadlineTimer) -QtCore.QDeadlineTimer.isForever?4() -> bool -QtCore.QDeadlineTimer.hasExpired?4() -> bool -QtCore.QDeadlineTimer.timerType?4() -> Qt.TimerType -QtCore.QDeadlineTimer.setTimerType?4(Qt.TimerType) -QtCore.QDeadlineTimer.remainingTime?4() -> int -QtCore.QDeadlineTimer.remainingTimeNSecs?4() -> int -QtCore.QDeadlineTimer.setRemainingTime?4(int, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.setPreciseRemainingTime?4(int, int nsecs=0, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.deadline?4() -> int -QtCore.QDeadlineTimer.deadlineNSecs?4() -> int -QtCore.QDeadlineTimer.setDeadline?4(int, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.setPreciseDeadline?4(int, int nsecs=0, Qt.TimerType type=Qt.CoarseTimer) -QtCore.QDeadlineTimer.addNSecs?4(QDeadlineTimer, int) -> QDeadlineTimer -QtCore.QDeadlineTimer.current?4(Qt.TimerType type=Qt.CoarseTimer) -> QDeadlineTimer -QtCore.QDir.SortFlag?10 -QtCore.QDir.SortFlag.Name?10 -QtCore.QDir.SortFlag.Time?10 -QtCore.QDir.SortFlag.Size?10 -QtCore.QDir.SortFlag.Unsorted?10 -QtCore.QDir.SortFlag.SortByMask?10 -QtCore.QDir.SortFlag.DirsFirst?10 -QtCore.QDir.SortFlag.Reversed?10 -QtCore.QDir.SortFlag.IgnoreCase?10 -QtCore.QDir.SortFlag.DirsLast?10 -QtCore.QDir.SortFlag.LocaleAware?10 -QtCore.QDir.SortFlag.Type?10 -QtCore.QDir.SortFlag.NoSort?10 -QtCore.QDir.Filter?10 -QtCore.QDir.Filter.Dirs?10 -QtCore.QDir.Filter.Files?10 -QtCore.QDir.Filter.Drives?10 -QtCore.QDir.Filter.NoSymLinks?10 -QtCore.QDir.Filter.AllEntries?10 -QtCore.QDir.Filter.TypeMask?10 -QtCore.QDir.Filter.Readable?10 -QtCore.QDir.Filter.Writable?10 -QtCore.QDir.Filter.Executable?10 -QtCore.QDir.Filter.PermissionMask?10 -QtCore.QDir.Filter.Modified?10 -QtCore.QDir.Filter.Hidden?10 -QtCore.QDir.Filter.System?10 -QtCore.QDir.Filter.AccessMask?10 -QtCore.QDir.Filter.AllDirs?10 -QtCore.QDir.Filter.CaseSensitive?10 -QtCore.QDir.Filter.NoDotAndDotDot?10 -QtCore.QDir.Filter.NoFilter?10 -QtCore.QDir.Filter.NoDot?10 -QtCore.QDir.Filter.NoDotDot?10 -QtCore.QDir?1(QString, QString, unknown-type sort=QDir.SortFlags(QDir.Name|QDir.IgnoreCase), unknown-type filters=QDir.AllEntries) -QtCore.QDir.__init__?1(self, QString, QString, unknown-type sort=QDir.SortFlags(QDir.Name|QDir.IgnoreCase), unknown-type filters=QDir.AllEntries) -QtCore.QDir?1(QDir) -QtCore.QDir.__init__?1(self, QDir) -QtCore.QDir?1(QString path='') -QtCore.QDir.__init__?1(self, QString path='') -QtCore.QDir.setPath?4(QString) -QtCore.QDir.path?4() -> QString -QtCore.QDir.absolutePath?4() -> QString -QtCore.QDir.canonicalPath?4() -> QString -QtCore.QDir.dirName?4() -> QString -QtCore.QDir.filePath?4(QString) -> QString -QtCore.QDir.absoluteFilePath?4(QString) -> QString -QtCore.QDir.relativeFilePath?4(QString) -> QString -QtCore.QDir.cd?4(QString) -> bool -QtCore.QDir.cdUp?4() -> bool -QtCore.QDir.nameFilters?4() -> QStringList -QtCore.QDir.setNameFilters?4(QStringList) -QtCore.QDir.filter?4() -> unknown-type -QtCore.QDir.setFilter?4(unknown-type) -QtCore.QDir.sorting?4() -> unknown-type -QtCore.QDir.setSorting?4(unknown-type) -QtCore.QDir.count?4() -> int -QtCore.QDir.nameFiltersFromString?4(QString) -> QStringList -QtCore.QDir.entryList?4(unknown-type filters=QDir.NoFilter, unknown-type sort=QDir.NoSort) -> QStringList -QtCore.QDir.entryList?4(QStringList, unknown-type filters=QDir.NoFilter, unknown-type sort=QDir.NoSort) -> QStringList -QtCore.QDir.entryInfoList?4(unknown-type filters=QDir.NoFilter, unknown-type sort=QDir.NoSort) -> unknown-type -QtCore.QDir.entryInfoList?4(QStringList, unknown-type filters=QDir.NoFilter, unknown-type sort=QDir.NoSort) -> unknown-type -QtCore.QDir.mkdir?4(QString, unknown-type) -> bool -QtCore.QDir.mkdir?4(QString) -> bool -QtCore.QDir.rmdir?4(QString) -> bool -QtCore.QDir.mkpath?4(QString) -> bool -QtCore.QDir.rmpath?4(QString) -> bool -QtCore.QDir.isReadable?4() -> bool -QtCore.QDir.exists?4() -> bool -QtCore.QDir.isRoot?4() -> bool -QtCore.QDir.isRelativePath?4(QString) -> bool -QtCore.QDir.isAbsolutePath?4(QString) -> bool -QtCore.QDir.isRelative?4() -> bool -QtCore.QDir.isAbsolute?4() -> bool -QtCore.QDir.makeAbsolute?4() -> bool -QtCore.QDir.remove?4(QString) -> bool -QtCore.QDir.rename?4(QString, QString) -> bool -QtCore.QDir.exists?4(QString) -> bool -QtCore.QDir.refresh?4() -QtCore.QDir.drives?4() -> unknown-type -QtCore.QDir.separator?4() -> QChar -QtCore.QDir.setCurrent?4(QString) -> bool -QtCore.QDir.current?4() -> QDir -QtCore.QDir.currentPath?4() -> QString -QtCore.QDir.home?4() -> QDir -QtCore.QDir.homePath?4() -> QString -QtCore.QDir.root?4() -> QDir -QtCore.QDir.rootPath?4() -> QString -QtCore.QDir.temp?4() -> QDir -QtCore.QDir.tempPath?4() -> QString -QtCore.QDir.match?4(QStringList, QString) -> bool -QtCore.QDir.match?4(QString, QString) -> bool -QtCore.QDir.cleanPath?4(QString) -> QString -QtCore.QDir.toNativeSeparators?4(QString) -> QString -QtCore.QDir.fromNativeSeparators?4(QString) -> QString -QtCore.QDir.setSearchPaths?4(QString, QStringList) -QtCore.QDir.addSearchPath?4(QString, QString) -QtCore.QDir.searchPaths?4(QString) -> QStringList -QtCore.QDir.removeRecursively?4() -> bool -QtCore.QDir.swap?4(QDir) -QtCore.QDir.listSeparator?4() -> QChar -QtCore.QDir.isEmpty?4(unknown-type filters=QDir.Filters(QDir.AllEntries|QDir.NoDotAndDotDot)) -> bool -QtCore.QDirIterator.IteratorFlag?10 -QtCore.QDirIterator.IteratorFlag.NoIteratorFlags?10 -QtCore.QDirIterator.IteratorFlag.FollowSymlinks?10 -QtCore.QDirIterator.IteratorFlag.Subdirectories?10 -QtCore.QDirIterator?1(QDir, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator.__init__?1(self, QDir, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator?1(QString, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator.__init__?1(self, QString, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator?1(QString, unknown-type, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator.__init__?1(self, QString, unknown-type, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator?1(QString, QStringList, unknown-type filters=QDir.NoFilter, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator.__init__?1(self, QString, QStringList, unknown-type filters=QDir.NoFilter, unknown-type flags=QDirIterator.NoIteratorFlags) -QtCore.QDirIterator.next?4() -> QString -QtCore.QDirIterator.nextFileInfo?4() -> QFileInfo -QtCore.QDirIterator.hasNext?4() -> bool -QtCore.QDirIterator.fileName?4() -> QString -QtCore.QDirIterator.filePath?4() -> QString -QtCore.QDirIterator.fileInfo?4() -> QFileInfo -QtCore.QDirIterator.path?4() -> QString -QtCore.QEasingCurve.Type?10 -QtCore.QEasingCurve.Type.Linear?10 -QtCore.QEasingCurve.Type.InQuad?10 -QtCore.QEasingCurve.Type.OutQuad?10 -QtCore.QEasingCurve.Type.InOutQuad?10 -QtCore.QEasingCurve.Type.OutInQuad?10 -QtCore.QEasingCurve.Type.InCubic?10 -QtCore.QEasingCurve.Type.OutCubic?10 -QtCore.QEasingCurve.Type.InOutCubic?10 -QtCore.QEasingCurve.Type.OutInCubic?10 -QtCore.QEasingCurve.Type.InQuart?10 -QtCore.QEasingCurve.Type.OutQuart?10 -QtCore.QEasingCurve.Type.InOutQuart?10 -QtCore.QEasingCurve.Type.OutInQuart?10 -QtCore.QEasingCurve.Type.InQuint?10 -QtCore.QEasingCurve.Type.OutQuint?10 -QtCore.QEasingCurve.Type.InOutQuint?10 -QtCore.QEasingCurve.Type.OutInQuint?10 -QtCore.QEasingCurve.Type.InSine?10 -QtCore.QEasingCurve.Type.OutSine?10 -QtCore.QEasingCurve.Type.InOutSine?10 -QtCore.QEasingCurve.Type.OutInSine?10 -QtCore.QEasingCurve.Type.InExpo?10 -QtCore.QEasingCurve.Type.OutExpo?10 -QtCore.QEasingCurve.Type.InOutExpo?10 -QtCore.QEasingCurve.Type.OutInExpo?10 -QtCore.QEasingCurve.Type.InCirc?10 -QtCore.QEasingCurve.Type.OutCirc?10 -QtCore.QEasingCurve.Type.InOutCirc?10 -QtCore.QEasingCurve.Type.OutInCirc?10 -QtCore.QEasingCurve.Type.InElastic?10 -QtCore.QEasingCurve.Type.OutElastic?10 -QtCore.QEasingCurve.Type.InOutElastic?10 -QtCore.QEasingCurve.Type.OutInElastic?10 -QtCore.QEasingCurve.Type.InBack?10 -QtCore.QEasingCurve.Type.OutBack?10 -QtCore.QEasingCurve.Type.InOutBack?10 -QtCore.QEasingCurve.Type.OutInBack?10 -QtCore.QEasingCurve.Type.InBounce?10 -QtCore.QEasingCurve.Type.OutBounce?10 -QtCore.QEasingCurve.Type.InOutBounce?10 -QtCore.QEasingCurve.Type.OutInBounce?10 -QtCore.QEasingCurve.Type.InCurve?10 -QtCore.QEasingCurve.Type.OutCurve?10 -QtCore.QEasingCurve.Type.SineCurve?10 -QtCore.QEasingCurve.Type.CosineCurve?10 -QtCore.QEasingCurve.Type.BezierSpline?10 -QtCore.QEasingCurve.Type.TCBSpline?10 -QtCore.QEasingCurve.Type.Custom?10 -QtCore.QEasingCurve?1(QEasingCurve.Type type=QEasingCurve.Linear) -QtCore.QEasingCurve.__init__?1(self, QEasingCurve.Type type=QEasingCurve.Linear) -QtCore.QEasingCurve?1(QEasingCurve) -QtCore.QEasingCurve.__init__?1(self, QEasingCurve) -QtCore.QEasingCurve.amplitude?4() -> float -QtCore.QEasingCurve.setAmplitude?4(float) -QtCore.QEasingCurve.period?4() -> float -QtCore.QEasingCurve.setPeriod?4(float) -QtCore.QEasingCurve.overshoot?4() -> float -QtCore.QEasingCurve.setOvershoot?4(float) -QtCore.QEasingCurve.type?4() -> QEasingCurve.Type -QtCore.QEasingCurve.setType?4(QEasingCurve.Type) -QtCore.QEasingCurve.setCustomType?4(Callable[..., None]) -QtCore.QEasingCurve.customType?4() -> Callable[..., None] -QtCore.QEasingCurve.valueForProgress?4(float) -> float -QtCore.QEasingCurve.swap?4(QEasingCurve) -QtCore.QEasingCurve.addCubicBezierSegment?4(QPointF, QPointF, QPointF) -QtCore.QEasingCurve.addTCBSegment?4(QPointF, float, float, float) -QtCore.QEasingCurve.toCubicSpline?4() -> unknown-type -QtCore.QElapsedTimer.ClockType?10 -QtCore.QElapsedTimer.ClockType.SystemTime?10 -QtCore.QElapsedTimer.ClockType.MonotonicClock?10 -QtCore.QElapsedTimer.ClockType.TickCounter?10 -QtCore.QElapsedTimer.ClockType.MachAbsoluteTime?10 -QtCore.QElapsedTimer.ClockType.PerformanceCounter?10 -QtCore.QElapsedTimer?1() -QtCore.QElapsedTimer.__init__?1(self) -QtCore.QElapsedTimer?1(QElapsedTimer) -QtCore.QElapsedTimer.__init__?1(self, QElapsedTimer) -QtCore.QElapsedTimer.clockType?4() -> QElapsedTimer.ClockType -QtCore.QElapsedTimer.isMonotonic?4() -> bool -QtCore.QElapsedTimer.start?4() -QtCore.QElapsedTimer.restart?4() -> int -QtCore.QElapsedTimer.invalidate?4() -QtCore.QElapsedTimer.isValid?4() -> bool -QtCore.QElapsedTimer.elapsed?4() -> int -QtCore.QElapsedTimer.hasExpired?4(int) -> bool -QtCore.QElapsedTimer.msecsSinceReference?4() -> int -QtCore.QElapsedTimer.msecsTo?4(QElapsedTimer) -> int -QtCore.QElapsedTimer.secsTo?4(QElapsedTimer) -> int -QtCore.QElapsedTimer.nsecsElapsed?4() -> int -QtCore.QEventLoop.ProcessEventsFlag?10 -QtCore.QEventLoop.ProcessEventsFlag.AllEvents?10 -QtCore.QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents?10 -QtCore.QEventLoop.ProcessEventsFlag.ExcludeSocketNotifiers?10 -QtCore.QEventLoop.ProcessEventsFlag.WaitForMoreEvents?10 -QtCore.QEventLoop?1(QObject parent=None) -QtCore.QEventLoop.__init__?1(self, QObject parent=None) -QtCore.QEventLoop.processEvents?4(unknown-type flags=QEventLoop.AllEvents) -> bool -QtCore.QEventLoop.processEvents?4(unknown-type, int) -QtCore.QEventLoop.processEvents?4(unknown-type, QDeadlineTimer) -QtCore.QEventLoop.exec?4(unknown-type flags=QEventLoop.AllEvents) -> int -QtCore.QEventLoop.exit?4(int returnCode=0) -QtCore.QEventLoop.isRunning?4() -> bool -QtCore.QEventLoop.wakeUp?4() -QtCore.QEventLoop.quit?4() -QtCore.QEventLoop.event?4(QEvent) -> bool -QtCore.QEventLoopLocker?1() -QtCore.QEventLoopLocker.__init__?1(self) -QtCore.QEventLoopLocker?1(QEventLoop) -QtCore.QEventLoopLocker.__init__?1(self, QEventLoop) -QtCore.QEventLoopLocker?1(QThread) -QtCore.QEventLoopLocker.__init__?1(self, QThread) -QtCore.QEventLoopLocker.swap?4(QEventLoopLocker) -QtCore.QFileDevice.MemoryMapFlag?10 -QtCore.QFileDevice.MemoryMapFlag.NoOptions?10 -QtCore.QFileDevice.MemoryMapFlag.MapPrivateOption?10 -QtCore.QFileDevice.FileTime?10 -QtCore.QFileDevice.FileTime.FileAccessTime?10 -QtCore.QFileDevice.FileTime.FileBirthTime?10 -QtCore.QFileDevice.FileTime.FileMetadataChangeTime?10 -QtCore.QFileDevice.FileTime.FileModificationTime?10 -QtCore.QFileDevice.FileHandleFlag?10 -QtCore.QFileDevice.FileHandleFlag.AutoCloseHandle?10 -QtCore.QFileDevice.FileHandleFlag.DontCloseHandle?10 -QtCore.QFileDevice.Permission?10 -QtCore.QFileDevice.Permission.ReadOwner?10 -QtCore.QFileDevice.Permission.WriteOwner?10 -QtCore.QFileDevice.Permission.ExeOwner?10 -QtCore.QFileDevice.Permission.ReadUser?10 -QtCore.QFileDevice.Permission.WriteUser?10 -QtCore.QFileDevice.Permission.ExeUser?10 -QtCore.QFileDevice.Permission.ReadGroup?10 -QtCore.QFileDevice.Permission.WriteGroup?10 -QtCore.QFileDevice.Permission.ExeGroup?10 -QtCore.QFileDevice.Permission.ReadOther?10 -QtCore.QFileDevice.Permission.WriteOther?10 -QtCore.QFileDevice.Permission.ExeOther?10 -QtCore.QFileDevice.FileError?10 -QtCore.QFileDevice.FileError.NoError?10 -QtCore.QFileDevice.FileError.ReadError?10 -QtCore.QFileDevice.FileError.WriteError?10 -QtCore.QFileDevice.FileError.FatalError?10 -QtCore.QFileDevice.FileError.ResourceError?10 -QtCore.QFileDevice.FileError.OpenError?10 -QtCore.QFileDevice.FileError.AbortError?10 -QtCore.QFileDevice.FileError.TimeOutError?10 -QtCore.QFileDevice.FileError.UnspecifiedError?10 -QtCore.QFileDevice.FileError.RemoveError?10 -QtCore.QFileDevice.FileError.RenameError?10 -QtCore.QFileDevice.FileError.PositionError?10 -QtCore.QFileDevice.FileError.ResizeError?10 -QtCore.QFileDevice.FileError.PermissionsError?10 -QtCore.QFileDevice.FileError.CopyError?10 -QtCore.QFileDevice.error?4() -> QFileDevice.FileError -QtCore.QFileDevice.unsetError?4() -QtCore.QFileDevice.close?4() -QtCore.QFileDevice.isSequential?4() -> bool -QtCore.QFileDevice.handle?4() -> int -QtCore.QFileDevice.fileName?4() -> QString -QtCore.QFileDevice.pos?4() -> int -QtCore.QFileDevice.seek?4(int) -> bool -QtCore.QFileDevice.atEnd?4() -> bool -QtCore.QFileDevice.flush?4() -> bool -QtCore.QFileDevice.size?4() -> int -QtCore.QFileDevice.resize?4(int) -> bool -QtCore.QFileDevice.permissions?4() -> unknown-type -QtCore.QFileDevice.setPermissions?4(unknown-type) -> bool -QtCore.QFileDevice.map?4(int, int, unknown-type flags=QFileDevice.NoOptions) -> PyQt6.sip.voidptr -QtCore.QFileDevice.unmap?4(PyQt6.sip.voidptr) -> bool -QtCore.QFileDevice.readData?4(int) -> Any -QtCore.QFileDevice.readLineData?4(int) -> Any -QtCore.QFileDevice.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QFileDevice.fileTime?4(QFileDevice.FileTime) -> QDateTime -QtCore.QFileDevice.setFileTime?4(QDateTime, QFileDevice.FileTime) -> bool -QtCore.QFile?1() -QtCore.QFile.__init__?1(self) -QtCore.QFile?1(QString) -QtCore.QFile.__init__?1(self, QString) -QtCore.QFile?1(QObject) -QtCore.QFile.__init__?1(self, QObject) -QtCore.QFile?1(QString, QObject) -QtCore.QFile.__init__?1(self, QString, QObject) -QtCore.QFile.fileName?4() -> QString -QtCore.QFile.setFileName?4(QString) -QtCore.QFile.encodeName?4(QString) -> QByteArray -QtCore.QFile.decodeName?4(QByteArray) -> QString -QtCore.QFile.decodeName?4(str) -> QString -QtCore.QFile.exists?4() -> bool -QtCore.QFile.exists?4(QString) -> bool -QtCore.QFile.symLinkTarget?4() -> QString -QtCore.QFile.symLinkTarget?4(QString) -> QString -QtCore.QFile.remove?4() -> bool -QtCore.QFile.remove?4(QString) -> bool -QtCore.QFile.rename?4(QString) -> bool -QtCore.QFile.rename?4(QString, QString) -> bool -QtCore.QFile.link?4(QString) -> bool -QtCore.QFile.link?4(QString, QString) -> bool -QtCore.QFile.copy?4(QString) -> bool -QtCore.QFile.copy?4(QString, QString) -> bool -QtCore.QFile.open?4(unknown-type, unknown-type) -> bool -QtCore.QFile.open?4(unknown-type) -> bool -QtCore.QFile.open?4(int, unknown-type, unknown-type handleFlags=QFileDevice.DontCloseHandle) -> bool -QtCore.QFile.size?4() -> int -QtCore.QFile.resize?4(int) -> bool -QtCore.QFile.resize?4(QString, int) -> bool -QtCore.QFile.permissions?4() -> unknown-type -QtCore.QFile.permissions?4(QString) -> unknown-type -QtCore.QFile.setPermissions?4(unknown-type) -> bool -QtCore.QFile.setPermissions?4(QString, unknown-type) -> bool -QtCore.QFile.moveToTrash?4() -> bool -QtCore.QFile.moveToTrash?4(QString) -> (bool, QString) -QtCore.QFileInfo?1() -QtCore.QFileInfo.__init__?1(self) -QtCore.QFileInfo?1(QFileDevice) -QtCore.QFileInfo.__init__?1(self, QFileDevice) -QtCore.QFileInfo?1(QString) -QtCore.QFileInfo.__init__?1(self, QString) -QtCore.QFileInfo?1(QDir, QString) -QtCore.QFileInfo.__init__?1(self, QDir, QString) -QtCore.QFileInfo?1(QFileInfo) -QtCore.QFileInfo.__init__?1(self, QFileInfo) -QtCore.QFileInfo.setFile?4(QString) -QtCore.QFileInfo.setFile?4(QFileDevice) -QtCore.QFileInfo.setFile?4(QDir, QString) -QtCore.QFileInfo.exists?4() -> bool -QtCore.QFileInfo.refresh?4() -QtCore.QFileInfo.filePath?4() -> QString -QtCore.QFileInfo.__fspath__?4() -> Any -QtCore.QFileInfo.absoluteFilePath?4() -> QString -QtCore.QFileInfo.canonicalFilePath?4() -> QString -QtCore.QFileInfo.fileName?4() -> QString -QtCore.QFileInfo.baseName?4() -> QString -QtCore.QFileInfo.completeBaseName?4() -> QString -QtCore.QFileInfo.suffix?4() -> QString -QtCore.QFileInfo.completeSuffix?4() -> QString -QtCore.QFileInfo.path?4() -> QString -QtCore.QFileInfo.absolutePath?4() -> QString -QtCore.QFileInfo.canonicalPath?4() -> QString -QtCore.QFileInfo.dir?4() -> QDir -QtCore.QFileInfo.absoluteDir?4() -> QDir -QtCore.QFileInfo.isReadable?4() -> bool -QtCore.QFileInfo.isWritable?4() -> bool -QtCore.QFileInfo.isExecutable?4() -> bool -QtCore.QFileInfo.isHidden?4() -> bool -QtCore.QFileInfo.isRelative?4() -> bool -QtCore.QFileInfo.isAbsolute?4() -> bool -QtCore.QFileInfo.makeAbsolute?4() -> bool -QtCore.QFileInfo.isFile?4() -> bool -QtCore.QFileInfo.isDir?4() -> bool -QtCore.QFileInfo.isSymLink?4() -> bool -QtCore.QFileInfo.isRoot?4() -> bool -QtCore.QFileInfo.owner?4() -> QString -QtCore.QFileInfo.ownerId?4() -> int -QtCore.QFileInfo.group?4() -> QString -QtCore.QFileInfo.groupId?4() -> int -QtCore.QFileInfo.permission?4(unknown-type) -> bool -QtCore.QFileInfo.permissions?4() -> unknown-type -QtCore.QFileInfo.size?4() -> int -QtCore.QFileInfo.lastModified?4() -> QDateTime -QtCore.QFileInfo.lastModified?4(QTimeZone) -> QDateTime -QtCore.QFileInfo.lastRead?4() -> QDateTime -QtCore.QFileInfo.lastRead?4(QTimeZone) -> QDateTime -QtCore.QFileInfo.caching?4() -> bool -QtCore.QFileInfo.setCaching?4(bool) -QtCore.QFileInfo.symLinkTarget?4() -> QString -QtCore.QFileInfo.bundleName?4() -> QString -QtCore.QFileInfo.isBundle?4() -> bool -QtCore.QFileInfo.isNativePath?4() -> bool -QtCore.QFileInfo.swap?4(QFileInfo) -QtCore.QFileInfo.exists?4(QString) -> bool -QtCore.QFileInfo.birthTime?4() -> QDateTime -QtCore.QFileInfo.birthTime?4(QTimeZone) -> QDateTime -QtCore.QFileInfo.metadataChangeTime?4() -> QDateTime -QtCore.QFileInfo.metadataChangeTime?4(QTimeZone) -> QDateTime -QtCore.QFileInfo.fileTime?4(QFileDevice.FileTime) -> QDateTime -QtCore.QFileInfo.fileTime?4(QFileDevice.FileTime, QTimeZone) -> QDateTime -QtCore.QFileInfo.isSymbolicLink?4() -> bool -QtCore.QFileInfo.isShortcut?4() -> bool -QtCore.QFileInfo.isJunction?4() -> bool -QtCore.QFileInfo.stat?4() -QtCore.QFileInfo.junctionTarget?4() -> QString -QtCore.QFileInfo.isAlias?4() -> bool -QtCore.QFileInfo.readSymLink?4() -> QString -QtCore.QFileSelector?1(QObject parent=None) -QtCore.QFileSelector.__init__?1(self, QObject parent=None) -QtCore.QFileSelector.select?4(QString) -> QString -QtCore.QFileSelector.select?4(QUrl) -> QUrl -QtCore.QFileSelector.extraSelectors?4() -> QStringList -QtCore.QFileSelector.setExtraSelectors?4(QStringList) -QtCore.QFileSelector.allSelectors?4() -> QStringList -QtCore.QFileSystemWatcher?1(QObject parent=None) -QtCore.QFileSystemWatcher.__init__?1(self, QObject parent=None) -QtCore.QFileSystemWatcher?1(QStringList, QObject parent=None) -QtCore.QFileSystemWatcher.__init__?1(self, QStringList, QObject parent=None) -QtCore.QFileSystemWatcher.addPath?4(QString) -> bool -QtCore.QFileSystemWatcher.addPaths?4(QStringList) -> QStringList -QtCore.QFileSystemWatcher.directories?4() -> QStringList -QtCore.QFileSystemWatcher.files?4() -> QStringList -QtCore.QFileSystemWatcher.removePath?4(QString) -> bool -QtCore.QFileSystemWatcher.removePaths?4(QStringList) -> QStringList -QtCore.QFileSystemWatcher.directoryChanged?4(QString) -QtCore.QFileSystemWatcher.fileChanged?4(QString) -QtCore.QIdentityProxyModel?1(QObject parent=None) -QtCore.QIdentityProxyModel.__init__?1(self, QObject parent=None) -QtCore.QIdentityProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QIdentityProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QIdentityProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex -QtCore.QIdentityProxyModel.mapToSource?4(QModelIndex) -> QModelIndex -QtCore.QIdentityProxyModel.parent?4(QModelIndex) -> QModelIndex -QtCore.QIdentityProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QIdentityProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QIdentityProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection -QtCore.QIdentityProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection -QtCore.QIdentityProxyModel.match?4(QModelIndex, int, QVariant, int hits=1, unknown-type flags=Qt.MatchFlags(Qt.MatchStartsWith|Qt.MatchWrap)) -> unknown-type -QtCore.QIdentityProxyModel.setSourceModel?4(QAbstractItemModel) -QtCore.QIdentityProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QIdentityProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QIdentityProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QIdentityProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QIdentityProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QIdentityProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QIdentityProxyModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QIdentityProxyModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QItemSelectionRange?1() -QtCore.QItemSelectionRange.__init__?1(self) -QtCore.QItemSelectionRange?1(QModelIndex, QModelIndex) -QtCore.QItemSelectionRange.__init__?1(self, QModelIndex, QModelIndex) -QtCore.QItemSelectionRange?1(QModelIndex) -QtCore.QItemSelectionRange.__init__?1(self, QModelIndex) -QtCore.QItemSelectionRange?1(QItemSelectionRange) -QtCore.QItemSelectionRange.__init__?1(self, QItemSelectionRange) -QtCore.QItemSelectionRange.top?4() -> int -QtCore.QItemSelectionRange.left?4() -> int -QtCore.QItemSelectionRange.bottom?4() -> int -QtCore.QItemSelectionRange.right?4() -> int -QtCore.QItemSelectionRange.width?4() -> int -QtCore.QItemSelectionRange.height?4() -> int -QtCore.QItemSelectionRange.topLeft?4() -> QPersistentModelIndex -QtCore.QItemSelectionRange.bottomRight?4() -> QPersistentModelIndex -QtCore.QItemSelectionRange.parent?4() -> QModelIndex -QtCore.QItemSelectionRange.model?4() -> QAbstractItemModel -QtCore.QItemSelectionRange.contains?4(QModelIndex) -> bool -QtCore.QItemSelectionRange.contains?4(int, int, QModelIndex) -> bool -QtCore.QItemSelectionRange.intersects?4(QItemSelectionRange) -> bool -QtCore.QItemSelectionRange.isValid?4() -> bool -QtCore.QItemSelectionRange.indexes?4() -> unknown-type -QtCore.QItemSelectionRange.intersected?4(QItemSelectionRange) -> QItemSelectionRange -QtCore.QItemSelectionRange.isEmpty?4() -> bool -QtCore.QItemSelectionRange.swap?4(QItemSelectionRange) -QtCore.QItemSelectionModel.SelectionFlag?10 -QtCore.QItemSelectionModel.SelectionFlag.NoUpdate?10 -QtCore.QItemSelectionModel.SelectionFlag.Clear?10 -QtCore.QItemSelectionModel.SelectionFlag.Select?10 -QtCore.QItemSelectionModel.SelectionFlag.Deselect?10 -QtCore.QItemSelectionModel.SelectionFlag.Toggle?10 -QtCore.QItemSelectionModel.SelectionFlag.Current?10 -QtCore.QItemSelectionModel.SelectionFlag.Rows?10 -QtCore.QItemSelectionModel.SelectionFlag.Columns?10 -QtCore.QItemSelectionModel.SelectionFlag.SelectCurrent?10 -QtCore.QItemSelectionModel.SelectionFlag.ToggleCurrent?10 -QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect?10 -QtCore.QItemSelectionModel?1(QAbstractItemModel model=None) -QtCore.QItemSelectionModel.__init__?1(self, QAbstractItemModel model=None) -QtCore.QItemSelectionModel?1(QAbstractItemModel, QObject) -QtCore.QItemSelectionModel.__init__?1(self, QAbstractItemModel, QObject) -QtCore.QItemSelectionModel.currentIndex?4() -> QModelIndex -QtCore.QItemSelectionModel.isSelected?4(QModelIndex) -> bool -QtCore.QItemSelectionModel.isRowSelected?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QItemSelectionModel.isColumnSelected?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QItemSelectionModel.rowIntersectsSelection?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QItemSelectionModel.columnIntersectsSelection?4(int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QItemSelectionModel.selectedIndexes?4() -> unknown-type -QtCore.QItemSelectionModel.selection?4() -> QItemSelection -QtCore.QItemSelectionModel.model?4() -> QAbstractItemModel -QtCore.QItemSelectionModel.clear?4() -QtCore.QItemSelectionModel.clearSelection?4() -QtCore.QItemSelectionModel.reset?4() -QtCore.QItemSelectionModel.select?4(QModelIndex, unknown-type) -QtCore.QItemSelectionModel.select?4(QItemSelection, unknown-type) -QtCore.QItemSelectionModel.setCurrentIndex?4(QModelIndex, unknown-type) -QtCore.QItemSelectionModel.clearCurrentIndex?4() -QtCore.QItemSelectionModel.selectionChanged?4(QItemSelection, QItemSelection) -QtCore.QItemSelectionModel.currentChanged?4(QModelIndex, QModelIndex) -QtCore.QItemSelectionModel.currentRowChanged?4(QModelIndex, QModelIndex) -QtCore.QItemSelectionModel.currentColumnChanged?4(QModelIndex, QModelIndex) -QtCore.QItemSelectionModel.emitSelectionChanged?4(QItemSelection, QItemSelection) -QtCore.QItemSelectionModel.hasSelection?4() -> bool -QtCore.QItemSelectionModel.selectedRows?4(int column=0) -> unknown-type -QtCore.QItemSelectionModel.selectedColumns?4(int row=0) -> unknown-type -QtCore.QItemSelectionModel.setModel?4(QAbstractItemModel) -QtCore.QItemSelectionModel.modelChanged?4(QAbstractItemModel) -QtCore.QItemSelection?1() -QtCore.QItemSelection.__init__?1(self) -QtCore.QItemSelection?1(QModelIndex, QModelIndex) -QtCore.QItemSelection.__init__?1(self, QModelIndex, QModelIndex) -QtCore.QItemSelection?1(QItemSelection) -QtCore.QItemSelection.__init__?1(self, QItemSelection) -QtCore.QItemSelection.select?4(QModelIndex, QModelIndex) -QtCore.QItemSelection.contains?4(QModelIndex) -> bool -QtCore.QItemSelection.indexes?4() -> unknown-type -QtCore.QItemSelection.merge?4(QItemSelection, unknown-type) -QtCore.QItemSelection.split?4(QItemSelectionRange, QItemSelectionRange, QItemSelection) -QtCore.QItemSelection.clear?4() -QtCore.QItemSelection.isEmpty?4() -> bool -QtCore.QItemSelection.append?4(QItemSelectionRange) -QtCore.QItemSelection.prepend?4(QItemSelectionRange) -QtCore.QItemSelection.insert?4(int, QItemSelectionRange) -QtCore.QItemSelection.replace?4(int, QItemSelectionRange) -QtCore.QItemSelection.removeAt?4(int) -QtCore.QItemSelection.removeAll?4(QItemSelectionRange) -> int -QtCore.QItemSelection.takeAt?4(int) -> QItemSelectionRange -QtCore.QItemSelection.takeFirst?4() -> QItemSelectionRange -QtCore.QItemSelection.takeLast?4() -> QItemSelectionRange -QtCore.QItemSelection.move?4(int, int) -QtCore.QItemSelection.count?4(QItemSelectionRange) -> int -QtCore.QItemSelection.count?4() -> int -QtCore.QItemSelection.first?4() -> QItemSelectionRange -QtCore.QItemSelection.last?4() -> QItemSelectionRange -QtCore.QItemSelection.indexOf?4(QItemSelectionRange, int from=0) -> int -QtCore.QItemSelection.lastIndexOf?4(QItemSelectionRange, int from=-1) -> int -QtCore.QJsonParseError.ParseError?10 -QtCore.QJsonParseError.ParseError.NoError?10 -QtCore.QJsonParseError.ParseError.UnterminatedObject?10 -QtCore.QJsonParseError.ParseError.MissingNameSeparator?10 -QtCore.QJsonParseError.ParseError.UnterminatedArray?10 -QtCore.QJsonParseError.ParseError.MissingValueSeparator?10 -QtCore.QJsonParseError.ParseError.IllegalValue?10 -QtCore.QJsonParseError.ParseError.TerminationByNumber?10 -QtCore.QJsonParseError.ParseError.IllegalNumber?10 -QtCore.QJsonParseError.ParseError.IllegalEscapeSequence?10 -QtCore.QJsonParseError.ParseError.IllegalUTF8String?10 -QtCore.QJsonParseError.ParseError.UnterminatedString?10 -QtCore.QJsonParseError.ParseError.MissingObject?10 -QtCore.QJsonParseError.ParseError.DeepNesting?10 -QtCore.QJsonParseError.ParseError.DocumentTooLarge?10 -QtCore.QJsonParseError.ParseError.GarbageAtEnd?10 -QtCore.QJsonParseError.error?7 -QtCore.QJsonParseError.offset?7 -QtCore.QJsonParseError?1() -QtCore.QJsonParseError.__init__?1(self) -QtCore.QJsonParseError?1(QJsonParseError) -QtCore.QJsonParseError.__init__?1(self, QJsonParseError) -QtCore.QJsonParseError.errorString?4() -> QString -QtCore.QJsonDocument.JsonFormat?10 -QtCore.QJsonDocument.JsonFormat.Indented?10 -QtCore.QJsonDocument.JsonFormat.Compact?10 -QtCore.QJsonDocument?1() -QtCore.QJsonDocument.__init__?1(self) -QtCore.QJsonDocument?1(QJsonObject) -QtCore.QJsonDocument.__init__?1(self, QJsonObject) -QtCore.QJsonDocument?1(QJsonArray) -QtCore.QJsonDocument.__init__?1(self, QJsonArray) -QtCore.QJsonDocument?1(QJsonDocument) -QtCore.QJsonDocument.__init__?1(self, QJsonDocument) -QtCore.QJsonDocument.fromVariant?4(QVariant) -> QJsonDocument -QtCore.QJsonDocument.toVariant?4() -> QVariant -QtCore.QJsonDocument.fromJson?4(QByteArray, QJsonParseError error=None) -> QJsonDocument -QtCore.QJsonDocument.toJson?4(QJsonDocument.JsonFormat format=QJsonDocument.Indented) -> QByteArray -QtCore.QJsonDocument.isEmpty?4() -> bool -QtCore.QJsonDocument.isArray?4() -> bool -QtCore.QJsonDocument.isObject?4() -> bool -QtCore.QJsonDocument.object?4() -> QJsonObject -QtCore.QJsonDocument.array?4() -> QJsonArray -QtCore.QJsonDocument.setObject?4(QJsonObject) -QtCore.QJsonDocument.setArray?4(QJsonArray) -QtCore.QJsonDocument.isNull?4() -> bool -QtCore.QJsonDocument.swap?4(QJsonDocument) -QtCore.QJsonValue.Type?10 -QtCore.QJsonValue.Type.Null?10 -QtCore.QJsonValue.Type.Bool?10 -QtCore.QJsonValue.Type.Double?10 -QtCore.QJsonValue.Type.String?10 -QtCore.QJsonValue.Type.Array?10 -QtCore.QJsonValue.Type.Object?10 -QtCore.QJsonValue.Type.Undefined?10 -QtCore.QJsonValue?1(QJsonValue.Type type=QJsonValue.Null) -QtCore.QJsonValue.__init__?1(self, QJsonValue.Type type=QJsonValue.Null) -QtCore.QJsonValue?1(QJsonValue) -QtCore.QJsonValue.__init__?1(self, QJsonValue) -QtCore.QJsonValue.fromVariant?4(QVariant) -> QJsonValue -QtCore.QJsonValue.toVariant?4() -> QVariant -QtCore.QJsonValue.type?4() -> QJsonValue.Type -QtCore.QJsonValue.isNull?4() -> bool -QtCore.QJsonValue.isBool?4() -> bool -QtCore.QJsonValue.isDouble?4() -> bool -QtCore.QJsonValue.isString?4() -> bool -QtCore.QJsonValue.isArray?4() -> bool -QtCore.QJsonValue.isObject?4() -> bool -QtCore.QJsonValue.isUndefined?4() -> bool -QtCore.QJsonValue.toBool?4(bool defaultValue=False) -> bool -QtCore.QJsonValue.toInt?4(int defaultValue=0) -> int -QtCore.QJsonValue.toInteger?4(int defaultValue=0) -> int -QtCore.QJsonValue.toDouble?4(float defaultValue=0) -> float -QtCore.QJsonValue.toArray?4() -> QJsonArray -QtCore.QJsonValue.toArray?4(QJsonArray) -> QJsonArray -QtCore.QJsonValue.toObject?4() -> QJsonObject -QtCore.QJsonValue.toObject?4(QJsonObject) -> QJsonObject -QtCore.QJsonValue.toString?4() -> QString -QtCore.QJsonValue.toString?4(QString) -> QString -QtCore.QJsonValue.swap?4(QJsonValue) -QtCore.QLibrary.LoadHint?10 -QtCore.QLibrary.LoadHint.ResolveAllSymbolsHint?10 -QtCore.QLibrary.LoadHint.ExportExternalSymbolsHint?10 -QtCore.QLibrary.LoadHint.LoadArchiveMemberHint?10 -QtCore.QLibrary.LoadHint.PreventUnloadHint?10 -QtCore.QLibrary.LoadHint.DeepBindHint?10 -QtCore.QLibrary?1(QObject parent=None) -QtCore.QLibrary.__init__?1(self, QObject parent=None) -QtCore.QLibrary?1(QString, QObject parent=None) -QtCore.QLibrary.__init__?1(self, QString, QObject parent=None) -QtCore.QLibrary?1(QString, int, QObject parent=None) -QtCore.QLibrary.__init__?1(self, QString, int, QObject parent=None) -QtCore.QLibrary?1(QString, QString, QObject parent=None) -QtCore.QLibrary.__init__?1(self, QString, QString, QObject parent=None) -QtCore.QLibrary.errorString?4() -> QString -QtCore.QLibrary.fileName?4() -> QString -QtCore.QLibrary.isLoaded?4() -> bool -QtCore.QLibrary.load?4() -> bool -QtCore.QLibrary.loadHints?4() -> unknown-type -QtCore.QLibrary.resolve?4(str) -> PyQt6.sip.voidptr -QtCore.QLibrary.resolve?4(QString, str) -> PyQt6.sip.voidptr -QtCore.QLibrary.resolve?4(QString, int, str) -> PyQt6.sip.voidptr -QtCore.QLibrary.resolve?4(QString, QString, str) -> PyQt6.sip.voidptr -QtCore.QLibrary.unload?4() -> bool -QtCore.QLibrary.isLibrary?4(QString) -> bool -QtCore.QLibrary.setFileName?4(QString) -QtCore.QLibrary.setFileNameAndVersion?4(QString, int) -QtCore.QLibrary.setFileNameAndVersion?4(QString, QString) -QtCore.QLibrary.setLoadHints?4(unknown-type) -QtCore.QLibraryInfo.LibraryPath?10 -QtCore.QLibraryInfo.LibraryPath.PrefixPath?10 -QtCore.QLibraryInfo.LibraryPath.DocumentationPath?10 -QtCore.QLibraryInfo.LibraryPath.HeadersPath?10 -QtCore.QLibraryInfo.LibraryPath.LibrariesPath?10 -QtCore.QLibraryInfo.LibraryPath.LibraryExecutablesPath?10 -QtCore.QLibraryInfo.LibraryPath.BinariesPath?10 -QtCore.QLibraryInfo.LibraryPath.PluginsPath?10 -QtCore.QLibraryInfo.LibraryPath.Qml2ImportsPath?10 -QtCore.QLibraryInfo.LibraryPath.ArchDataPath?10 -QtCore.QLibraryInfo.LibraryPath.DataPath?10 -QtCore.QLibraryInfo.LibraryPath.TranslationsPath?10 -QtCore.QLibraryInfo.LibraryPath.ExamplesPath?10 -QtCore.QLibraryInfo.LibraryPath.TestsPath?10 -QtCore.QLibraryInfo.LibraryPath.SettingsPath?10 -QtCore.QLibraryInfo.LibraryPath.QmlImportsPath?10 -QtCore.QLibraryInfo?1(QLibraryInfo) -QtCore.QLibraryInfo.__init__?1(self, QLibraryInfo) -QtCore.QLibraryInfo.isDebugBuild?4() -> bool -QtCore.QLibraryInfo.isSharedBuild?4() -> bool -QtCore.QLibraryInfo.path?4(QLibraryInfo.LibraryPath) -> QString -QtCore.QLibraryInfo.version?4() -> QVersionNumber -QtCore.QLine?1() -QtCore.QLine.__init__?1(self) -QtCore.QLine?1(QPoint, QPoint) -QtCore.QLine.__init__?1(self, QPoint, QPoint) -QtCore.QLine?1(int, int, int, int) -QtCore.QLine.__init__?1(self, int, int, int, int) -QtCore.QLine?1(QLine) -QtCore.QLine.__init__?1(self, QLine) -QtCore.QLine.isNull?4() -> bool -QtCore.QLine.x1?4() -> int -QtCore.QLine.y1?4() -> int -QtCore.QLine.x2?4() -> int -QtCore.QLine.y2?4() -> int -QtCore.QLine.p1?4() -> QPoint -QtCore.QLine.p2?4() -> QPoint -QtCore.QLine.dx?4() -> int -QtCore.QLine.dy?4() -> int -QtCore.QLine.translate?4(QPoint) -QtCore.QLine.translate?4(int, int) -QtCore.QLine.translated?4(QPoint) -> QLine -QtCore.QLine.translated?4(int, int) -> QLine -QtCore.QLine.setP1?4(QPoint) -QtCore.QLine.setP2?4(QPoint) -QtCore.QLine.setPoints?4(QPoint, QPoint) -QtCore.QLine.setLine?4(int, int, int, int) -QtCore.QLine.center?4() -> QPoint -QtCore.QLine.toLineF?4() -> QLineF -QtCore.QLineF.IntersectionType?10 -QtCore.QLineF.IntersectionType.NoIntersection?10 -QtCore.QLineF.IntersectionType.BoundedIntersection?10 -QtCore.QLineF.IntersectionType.UnboundedIntersection?10 -QtCore.QLineF?1(QLine) -QtCore.QLineF.__init__?1(self, QLine) -QtCore.QLineF?1() -QtCore.QLineF.__init__?1(self) -QtCore.QLineF?1(QPointF, QPointF) -QtCore.QLineF.__init__?1(self, QPointF, QPointF) -QtCore.QLineF?1(float, float, float, float) -QtCore.QLineF.__init__?1(self, float, float, float, float) -QtCore.QLineF?1(QLineF) -QtCore.QLineF.__init__?1(self, QLineF) -QtCore.QLineF.isNull?4() -> bool -QtCore.QLineF.length?4() -> float -QtCore.QLineF.unitVector?4() -> QLineF -QtCore.QLineF.intersects?4(QLineF) -> (QLineF.IntersectionType, QPointF) -QtCore.QLineF.x1?4() -> float -QtCore.QLineF.y1?4() -> float -QtCore.QLineF.x2?4() -> float -QtCore.QLineF.y2?4() -> float -QtCore.QLineF.p1?4() -> QPointF -QtCore.QLineF.p2?4() -> QPointF -QtCore.QLineF.dx?4() -> float -QtCore.QLineF.dy?4() -> float -QtCore.QLineF.normalVector?4() -> QLineF -QtCore.QLineF.translate?4(QPointF) -QtCore.QLineF.translate?4(float, float) -QtCore.QLineF.setLength?4(float) -QtCore.QLineF.pointAt?4(float) -> QPointF -QtCore.QLineF.toLine?4() -> QLine -QtCore.QLineF.fromPolar?4(float, float) -> QLineF -QtCore.QLineF.angle?4() -> float -QtCore.QLineF.setAngle?4(float) -QtCore.QLineF.angleTo?4(QLineF) -> float -QtCore.QLineF.translated?4(QPointF) -> QLineF -QtCore.QLineF.translated?4(float, float) -> QLineF -QtCore.QLineF.setP1?4(QPointF) -QtCore.QLineF.setP2?4(QPointF) -QtCore.QLineF.setPoints?4(QPointF, QPointF) -QtCore.QLineF.setLine?4(float, float, float, float) -QtCore.QLineF.center?4() -> QPointF -QtCore.QLocale.LanguageCodeType?10 -QtCore.QLocale.LanguageCodeType.ISO639Part1?10 -QtCore.QLocale.LanguageCodeType.ISO639Part2B?10 -QtCore.QLocale.LanguageCodeType.ISO639Part2T?10 -QtCore.QLocale.LanguageCodeType.ISO639Part3?10 -QtCore.QLocale.LanguageCodeType.LegacyLanguageCode?10 -QtCore.QLocale.LanguageCodeType.ISO639Part2?10 -QtCore.QLocale.LanguageCodeType.ISO639Alpha2?10 -QtCore.QLocale.LanguageCodeType.ISO639Alpha3?10 -QtCore.QLocale.LanguageCodeType.ISO639?10 -QtCore.QLocale.LanguageCodeType.AnyLanguageCode?10 -QtCore.QLocale.DataSizeFormat?10 -QtCore.QLocale.DataSizeFormat.DataSizeIecFormat?10 -QtCore.QLocale.DataSizeFormat.DataSizeTraditionalFormat?10 -QtCore.QLocale.DataSizeFormat.DataSizeSIFormat?10 -QtCore.QLocale.FloatingPointPrecisionOption?10 -QtCore.QLocale.FloatingPointPrecisionOption.FloatingPointShortest?10 -QtCore.QLocale.QuotationStyle?10 -QtCore.QLocale.QuotationStyle.StandardQuotation?10 -QtCore.QLocale.QuotationStyle.AlternateQuotation?10 -QtCore.QLocale.CurrencySymbolFormat?10 -QtCore.QLocale.CurrencySymbolFormat.CurrencyIsoCode?10 -QtCore.QLocale.CurrencySymbolFormat.CurrencySymbol?10 -QtCore.QLocale.CurrencySymbolFormat.CurrencyDisplayName?10 -QtCore.QLocale.Script?10 -QtCore.QLocale.Script.AnyScript?10 -QtCore.QLocale.Script.ArabicScript?10 -QtCore.QLocale.Script.CyrillicScript?10 -QtCore.QLocale.Script.DeseretScript?10 -QtCore.QLocale.Script.GurmukhiScript?10 -QtCore.QLocale.Script.SimplifiedHanScript?10 -QtCore.QLocale.Script.TraditionalHanScript?10 -QtCore.QLocale.Script.LatinScript?10 -QtCore.QLocale.Script.MongolianScript?10 -QtCore.QLocale.Script.TifinaghScript?10 -QtCore.QLocale.Script.SimplifiedChineseScript?10 -QtCore.QLocale.Script.TraditionalChineseScript?10 -QtCore.QLocale.Script.ArmenianScript?10 -QtCore.QLocale.Script.BengaliScript?10 -QtCore.QLocale.Script.CherokeeScript?10 -QtCore.QLocale.Script.DevanagariScript?10 -QtCore.QLocale.Script.EthiopicScript?10 -QtCore.QLocale.Script.GeorgianScript?10 -QtCore.QLocale.Script.GreekScript?10 -QtCore.QLocale.Script.GujaratiScript?10 -QtCore.QLocale.Script.HebrewScript?10 -QtCore.QLocale.Script.JapaneseScript?10 -QtCore.QLocale.Script.KhmerScript?10 -QtCore.QLocale.Script.KannadaScript?10 -QtCore.QLocale.Script.KoreanScript?10 -QtCore.QLocale.Script.LaoScript?10 -QtCore.QLocale.Script.MalayalamScript?10 -QtCore.QLocale.Script.MyanmarScript?10 -QtCore.QLocale.Script.OriyaScript?10 -QtCore.QLocale.Script.TamilScript?10 -QtCore.QLocale.Script.TeluguScript?10 -QtCore.QLocale.Script.ThaanaScript?10 -QtCore.QLocale.Script.ThaiScript?10 -QtCore.QLocale.Script.TibetanScript?10 -QtCore.QLocale.Script.SinhalaScript?10 -QtCore.QLocale.Script.SyriacScript?10 -QtCore.QLocale.Script.YiScript?10 -QtCore.QLocale.Script.VaiScript?10 -QtCore.QLocale.Script.AvestanScript?10 -QtCore.QLocale.Script.BalineseScript?10 -QtCore.QLocale.Script.BamumScript?10 -QtCore.QLocale.Script.BatakScript?10 -QtCore.QLocale.Script.BopomofoScript?10 -QtCore.QLocale.Script.BrahmiScript?10 -QtCore.QLocale.Script.BugineseScript?10 -QtCore.QLocale.Script.BuhidScript?10 -QtCore.QLocale.Script.CanadianAboriginalScript?10 -QtCore.QLocale.Script.CarianScript?10 -QtCore.QLocale.Script.ChakmaScript?10 -QtCore.QLocale.Script.ChamScript?10 -QtCore.QLocale.Script.CopticScript?10 -QtCore.QLocale.Script.CypriotScript?10 -QtCore.QLocale.Script.EgyptianHieroglyphsScript?10 -QtCore.QLocale.Script.FraserScript?10 -QtCore.QLocale.Script.GlagoliticScript?10 -QtCore.QLocale.Script.GothicScript?10 -QtCore.QLocale.Script.HanScript?10 -QtCore.QLocale.Script.HangulScript?10 -QtCore.QLocale.Script.HanunooScript?10 -QtCore.QLocale.Script.ImperialAramaicScript?10 -QtCore.QLocale.Script.InscriptionalPahlaviScript?10 -QtCore.QLocale.Script.InscriptionalParthianScript?10 -QtCore.QLocale.Script.JavaneseScript?10 -QtCore.QLocale.Script.KaithiScript?10 -QtCore.QLocale.Script.KatakanaScript?10 -QtCore.QLocale.Script.KayahLiScript?10 -QtCore.QLocale.Script.KharoshthiScript?10 -QtCore.QLocale.Script.LannaScript?10 -QtCore.QLocale.Script.LepchaScript?10 -QtCore.QLocale.Script.LimbuScript?10 -QtCore.QLocale.Script.LinearBScript?10 -QtCore.QLocale.Script.LycianScript?10 -QtCore.QLocale.Script.LydianScript?10 -QtCore.QLocale.Script.MandaeanScript?10 -QtCore.QLocale.Script.MeiteiMayekScript?10 -QtCore.QLocale.Script.MeroiticScript?10 -QtCore.QLocale.Script.MeroiticCursiveScript?10 -QtCore.QLocale.Script.NkoScript?10 -QtCore.QLocale.Script.NewTaiLueScript?10 -QtCore.QLocale.Script.OghamScript?10 -QtCore.QLocale.Script.OlChikiScript?10 -QtCore.QLocale.Script.OldItalicScript?10 -QtCore.QLocale.Script.OldPersianScript?10 -QtCore.QLocale.Script.OldSouthArabianScript?10 -QtCore.QLocale.Script.OrkhonScript?10 -QtCore.QLocale.Script.OsmanyaScript?10 -QtCore.QLocale.Script.PhagsPaScript?10 -QtCore.QLocale.Script.PhoenicianScript?10 -QtCore.QLocale.Script.PollardPhoneticScript?10 -QtCore.QLocale.Script.RejangScript?10 -QtCore.QLocale.Script.RunicScript?10 -QtCore.QLocale.Script.SamaritanScript?10 -QtCore.QLocale.Script.SaurashtraScript?10 -QtCore.QLocale.Script.SharadaScript?10 -QtCore.QLocale.Script.ShavianScript?10 -QtCore.QLocale.Script.SoraSompengScript?10 -QtCore.QLocale.Script.CuneiformScript?10 -QtCore.QLocale.Script.SundaneseScript?10 -QtCore.QLocale.Script.SylotiNagriScript?10 -QtCore.QLocale.Script.TagalogScript?10 -QtCore.QLocale.Script.TagbanwaScript?10 -QtCore.QLocale.Script.TaiLeScript?10 -QtCore.QLocale.Script.TaiVietScript?10 -QtCore.QLocale.Script.TakriScript?10 -QtCore.QLocale.Script.UgariticScript?10 -QtCore.QLocale.Script.BrailleScript?10 -QtCore.QLocale.Script.HiraganaScript?10 -QtCore.QLocale.Script.CaucasianAlbanianScript?10 -QtCore.QLocale.Script.BassaVahScript?10 -QtCore.QLocale.Script.DuployanScript?10 -QtCore.QLocale.Script.ElbasanScript?10 -QtCore.QLocale.Script.GranthaScript?10 -QtCore.QLocale.Script.PahawhHmongScript?10 -QtCore.QLocale.Script.KhojkiScript?10 -QtCore.QLocale.Script.LinearAScript?10 -QtCore.QLocale.Script.MahajaniScript?10 -QtCore.QLocale.Script.ManichaeanScript?10 -QtCore.QLocale.Script.MendeKikakuiScript?10 -QtCore.QLocale.Script.ModiScript?10 -QtCore.QLocale.Script.MroScript?10 -QtCore.QLocale.Script.OldNorthArabianScript?10 -QtCore.QLocale.Script.NabataeanScript?10 -QtCore.QLocale.Script.PalmyreneScript?10 -QtCore.QLocale.Script.PauCinHauScript?10 -QtCore.QLocale.Script.OldPermicScript?10 -QtCore.QLocale.Script.PsalterPahlaviScript?10 -QtCore.QLocale.Script.SiddhamScript?10 -QtCore.QLocale.Script.KhudawadiScript?10 -QtCore.QLocale.Script.TirhutaScript?10 -QtCore.QLocale.Script.VarangKshitiScript?10 -QtCore.QLocale.Script.AhomScript?10 -QtCore.QLocale.Script.AnatolianHieroglyphsScript?10 -QtCore.QLocale.Script.HatranScript?10 -QtCore.QLocale.Script.MultaniScript?10 -QtCore.QLocale.Script.OldHungarianScript?10 -QtCore.QLocale.Script.SignWritingScript?10 -QtCore.QLocale.Script.AdlamScript?10 -QtCore.QLocale.Script.BhaiksukiScript?10 -QtCore.QLocale.Script.MarchenScript?10 -QtCore.QLocale.Script.NewaScript?10 -QtCore.QLocale.Script.OsageScript?10 -QtCore.QLocale.Script.TangutScript?10 -QtCore.QLocale.Script.HanWithBopomofoScript?10 -QtCore.QLocale.Script.JamoScript?10 -QtCore.QLocale.Script.BanglaScript?10 -QtCore.QLocale.Script.MendeScript?10 -QtCore.QLocale.Script.OdiaScript?10 -QtCore.QLocale.Script.HanifiScript?10 -QtCore.QLocale.MeasurementSystem?10 -QtCore.QLocale.MeasurementSystem.MetricSystem?10 -QtCore.QLocale.MeasurementSystem.ImperialSystem?10 -QtCore.QLocale.MeasurementSystem.ImperialUSSystem?10 -QtCore.QLocale.MeasurementSystem.ImperialUKSystem?10 -QtCore.QLocale.FormatType?10 -QtCore.QLocale.FormatType.LongFormat?10 -QtCore.QLocale.FormatType.ShortFormat?10 -QtCore.QLocale.FormatType.NarrowFormat?10 -QtCore.QLocale.TagSeparator?10 -QtCore.QLocale.TagSeparator.Dash?10 -QtCore.QLocale.TagSeparator.Underscore?10 -QtCore.QLocale.NumberOption?10 -QtCore.QLocale.NumberOption.OmitGroupSeparator?10 -QtCore.QLocale.NumberOption.RejectGroupSeparator?10 -QtCore.QLocale.NumberOption.DefaultNumberOptions?10 -QtCore.QLocale.NumberOption.OmitLeadingZeroInExponent?10 -QtCore.QLocale.NumberOption.RejectLeadingZeroInExponent?10 -QtCore.QLocale.NumberOption.IncludeTrailingZeroesAfterDot?10 -QtCore.QLocale.NumberOption.RejectTrailingZeroesAfterDot?10 -QtCore.QLocale.Country?10 -QtCore.QLocale.Country.AnyCountry?10 -QtCore.QLocale.Country.AnyTerritory?10 -QtCore.QLocale.Country.Afghanistan?10 -QtCore.QLocale.Country.Albania?10 -QtCore.QLocale.Country.Algeria?10 -QtCore.QLocale.Country.AmericanSamoa?10 -QtCore.QLocale.Country.Andorra?10 -QtCore.QLocale.Country.Angola?10 -QtCore.QLocale.Country.Anguilla?10 -QtCore.QLocale.Country.Antarctica?10 -QtCore.QLocale.Country.AntiguaAndBarbuda?10 -QtCore.QLocale.Country.Argentina?10 -QtCore.QLocale.Country.Armenia?10 -QtCore.QLocale.Country.Aruba?10 -QtCore.QLocale.Country.Australia?10 -QtCore.QLocale.Country.Austria?10 -QtCore.QLocale.Country.Azerbaijan?10 -QtCore.QLocale.Country.Bahamas?10 -QtCore.QLocale.Country.Bahrain?10 -QtCore.QLocale.Country.Bangladesh?10 -QtCore.QLocale.Country.Barbados?10 -QtCore.QLocale.Country.Belarus?10 -QtCore.QLocale.Country.Belgium?10 -QtCore.QLocale.Country.Belize?10 -QtCore.QLocale.Country.Benin?10 -QtCore.QLocale.Country.Bermuda?10 -QtCore.QLocale.Country.Bhutan?10 -QtCore.QLocale.Country.Bolivia?10 -QtCore.QLocale.Country.BosniaAndHerzegowina?10 -QtCore.QLocale.Country.Botswana?10 -QtCore.QLocale.Country.BouvetIsland?10 -QtCore.QLocale.Country.Brazil?10 -QtCore.QLocale.Country.BritishIndianOceanTerritory?10 -QtCore.QLocale.Country.Bulgaria?10 -QtCore.QLocale.Country.BurkinaFaso?10 -QtCore.QLocale.Country.Burundi?10 -QtCore.QLocale.Country.Cambodia?10 -QtCore.QLocale.Country.Cameroon?10 -QtCore.QLocale.Country.Canada?10 -QtCore.QLocale.Country.CapeVerde?10 -QtCore.QLocale.Country.CaymanIslands?10 -QtCore.QLocale.Country.CentralAfricanRepublic?10 -QtCore.QLocale.Country.Chad?10 -QtCore.QLocale.Country.Chile?10 -QtCore.QLocale.Country.China?10 -QtCore.QLocale.Country.ChristmasIsland?10 -QtCore.QLocale.Country.CocosIslands?10 -QtCore.QLocale.Country.Colombia?10 -QtCore.QLocale.Country.Comoros?10 -QtCore.QLocale.Country.DemocraticRepublicOfCongo?10 -QtCore.QLocale.Country.PeoplesRepublicOfCongo?10 -QtCore.QLocale.Country.CookIslands?10 -QtCore.QLocale.Country.CostaRica?10 -QtCore.QLocale.Country.IvoryCoast?10 -QtCore.QLocale.Country.Croatia?10 -QtCore.QLocale.Country.Cuba?10 -QtCore.QLocale.Country.Cyprus?10 -QtCore.QLocale.Country.CzechRepublic?10 -QtCore.QLocale.Country.Denmark?10 -QtCore.QLocale.Country.Djibouti?10 -QtCore.QLocale.Country.Dominica?10 -QtCore.QLocale.Country.DominicanRepublic?10 -QtCore.QLocale.Country.EastTimor?10 -QtCore.QLocale.Country.Ecuador?10 -QtCore.QLocale.Country.Egypt?10 -QtCore.QLocale.Country.ElSalvador?10 -QtCore.QLocale.Country.EquatorialGuinea?10 -QtCore.QLocale.Country.Eritrea?10 -QtCore.QLocale.Country.Estonia?10 -QtCore.QLocale.Country.Ethiopia?10 -QtCore.QLocale.Country.FalklandIslands?10 -QtCore.QLocale.Country.FaroeIslands?10 -QtCore.QLocale.Country.Finland?10 -QtCore.QLocale.Country.France?10 -QtCore.QLocale.Country.FrenchGuiana?10 -QtCore.QLocale.Country.FrenchPolynesia?10 -QtCore.QLocale.Country.FrenchSouthernTerritories?10 -QtCore.QLocale.Country.Gabon?10 -QtCore.QLocale.Country.Gambia?10 -QtCore.QLocale.Country.Georgia?10 -QtCore.QLocale.Country.Germany?10 -QtCore.QLocale.Country.Ghana?10 -QtCore.QLocale.Country.Gibraltar?10 -QtCore.QLocale.Country.Greece?10 -QtCore.QLocale.Country.Greenland?10 -QtCore.QLocale.Country.Grenada?10 -QtCore.QLocale.Country.Guadeloupe?10 -QtCore.QLocale.Country.Guam?10 -QtCore.QLocale.Country.Guatemala?10 -QtCore.QLocale.Country.Guinea?10 -QtCore.QLocale.Country.GuineaBissau?10 -QtCore.QLocale.Country.Guyana?10 -QtCore.QLocale.Country.Haiti?10 -QtCore.QLocale.Country.HeardAndMcDonaldIslands?10 -QtCore.QLocale.Country.Honduras?10 -QtCore.QLocale.Country.HongKong?10 -QtCore.QLocale.Country.Hungary?10 -QtCore.QLocale.Country.Iceland?10 -QtCore.QLocale.Country.India?10 -QtCore.QLocale.Country.Indonesia?10 -QtCore.QLocale.Country.Iran?10 -QtCore.QLocale.Country.Iraq?10 -QtCore.QLocale.Country.Ireland?10 -QtCore.QLocale.Country.Israel?10 -QtCore.QLocale.Country.Italy?10 -QtCore.QLocale.Country.Jamaica?10 -QtCore.QLocale.Country.Japan?10 -QtCore.QLocale.Country.Jordan?10 -QtCore.QLocale.Country.Kazakhstan?10 -QtCore.QLocale.Country.Kenya?10 -QtCore.QLocale.Country.Kiribati?10 -QtCore.QLocale.Country.DemocraticRepublicOfKorea?10 -QtCore.QLocale.Country.RepublicOfKorea?10 -QtCore.QLocale.Country.Kuwait?10 -QtCore.QLocale.Country.Kyrgyzstan?10 -QtCore.QLocale.Country.Latvia?10 -QtCore.QLocale.Country.Lebanon?10 -QtCore.QLocale.Country.Lesotho?10 -QtCore.QLocale.Country.Liberia?10 -QtCore.QLocale.Country.Liechtenstein?10 -QtCore.QLocale.Country.Lithuania?10 -QtCore.QLocale.Country.Luxembourg?10 -QtCore.QLocale.Country.Macau?10 -QtCore.QLocale.Country.Macedonia?10 -QtCore.QLocale.Country.Madagascar?10 -QtCore.QLocale.Country.Malawi?10 -QtCore.QLocale.Country.Malaysia?10 -QtCore.QLocale.Country.Maldives?10 -QtCore.QLocale.Country.Mali?10 -QtCore.QLocale.Country.Malta?10 -QtCore.QLocale.Country.MarshallIslands?10 -QtCore.QLocale.Country.Martinique?10 -QtCore.QLocale.Country.Mauritania?10 -QtCore.QLocale.Country.Mauritius?10 -QtCore.QLocale.Country.Mayotte?10 -QtCore.QLocale.Country.Mexico?10 -QtCore.QLocale.Country.Micronesia?10 -QtCore.QLocale.Country.Moldova?10 -QtCore.QLocale.Country.Monaco?10 -QtCore.QLocale.Country.Mongolia?10 -QtCore.QLocale.Country.Montserrat?10 -QtCore.QLocale.Country.Morocco?10 -QtCore.QLocale.Country.Mozambique?10 -QtCore.QLocale.Country.Myanmar?10 -QtCore.QLocale.Country.Namibia?10 -QtCore.QLocale.Country.NauruCountry?10 -QtCore.QLocale.Country.Nepal?10 -QtCore.QLocale.Country.Netherlands?10 -QtCore.QLocale.Country.NewCaledonia?10 -QtCore.QLocale.Country.NewZealand?10 -QtCore.QLocale.Country.Nicaragua?10 -QtCore.QLocale.Country.Niger?10 -QtCore.QLocale.Country.Nigeria?10 -QtCore.QLocale.Country.Niue?10 -QtCore.QLocale.Country.NorfolkIsland?10 -QtCore.QLocale.Country.NorthernMarianaIslands?10 -QtCore.QLocale.Country.Norway?10 -QtCore.QLocale.Country.Oman?10 -QtCore.QLocale.Country.Pakistan?10 -QtCore.QLocale.Country.Palau?10 -QtCore.QLocale.Country.Panama?10 -QtCore.QLocale.Country.PapuaNewGuinea?10 -QtCore.QLocale.Country.Paraguay?10 -QtCore.QLocale.Country.Peru?10 -QtCore.QLocale.Country.Philippines?10 -QtCore.QLocale.Country.Pitcairn?10 -QtCore.QLocale.Country.Poland?10 -QtCore.QLocale.Country.Portugal?10 -QtCore.QLocale.Country.PuertoRico?10 -QtCore.QLocale.Country.Qatar?10 -QtCore.QLocale.Country.Reunion?10 -QtCore.QLocale.Country.Romania?10 -QtCore.QLocale.Country.RussianFederation?10 -QtCore.QLocale.Country.Rwanda?10 -QtCore.QLocale.Country.SaintKittsAndNevis?10 -QtCore.QLocale.Country.Samoa?10 -QtCore.QLocale.Country.SanMarino?10 -QtCore.QLocale.Country.SaoTomeAndPrincipe?10 -QtCore.QLocale.Country.SaudiArabia?10 -QtCore.QLocale.Country.Senegal?10 -QtCore.QLocale.Country.Seychelles?10 -QtCore.QLocale.Country.SierraLeone?10 -QtCore.QLocale.Country.Singapore?10 -QtCore.QLocale.Country.Slovakia?10 -QtCore.QLocale.Country.Slovenia?10 -QtCore.QLocale.Country.SolomonIslands?10 -QtCore.QLocale.Country.Somalia?10 -QtCore.QLocale.Country.SouthAfrica?10 -QtCore.QLocale.Country.SouthGeorgiaAndTheSouthSandwichIslands?10 -QtCore.QLocale.Country.Spain?10 -QtCore.QLocale.Country.SriLanka?10 -QtCore.QLocale.Country.Sudan?10 -QtCore.QLocale.Country.Suriname?10 -QtCore.QLocale.Country.SvalbardAndJanMayenIslands?10 -QtCore.QLocale.Country.Swaziland?10 -QtCore.QLocale.Country.Sweden?10 -QtCore.QLocale.Country.Switzerland?10 -QtCore.QLocale.Country.SyrianArabRepublic?10 -QtCore.QLocale.Country.Taiwan?10 -QtCore.QLocale.Country.Tajikistan?10 -QtCore.QLocale.Country.Tanzania?10 -QtCore.QLocale.Country.Thailand?10 -QtCore.QLocale.Country.Togo?10 -QtCore.QLocale.Country.TrinidadAndTobago?10 -QtCore.QLocale.Country.Tunisia?10 -QtCore.QLocale.Country.Turkey?10 -QtCore.QLocale.Country.Turkmenistan?10 -QtCore.QLocale.Country.TurksAndCaicosIslands?10 -QtCore.QLocale.Country.Uganda?10 -QtCore.QLocale.Country.Ukraine?10 -QtCore.QLocale.Country.UnitedArabEmirates?10 -QtCore.QLocale.Country.UnitedKingdom?10 -QtCore.QLocale.Country.UnitedStates?10 -QtCore.QLocale.Country.UnitedStatesMinorOutlyingIslands?10 -QtCore.QLocale.Country.Uruguay?10 -QtCore.QLocale.Country.Uzbekistan?10 -QtCore.QLocale.Country.Vanuatu?10 -QtCore.QLocale.Country.VaticanCityState?10 -QtCore.QLocale.Country.Venezuela?10 -QtCore.QLocale.Country.BritishVirginIslands?10 -QtCore.QLocale.Country.WallisAndFutunaIslands?10 -QtCore.QLocale.Country.WesternSahara?10 -QtCore.QLocale.Country.Yemen?10 -QtCore.QLocale.Country.Zambia?10 -QtCore.QLocale.Country.Zimbabwe?10 -QtCore.QLocale.Country.Montenegro?10 -QtCore.QLocale.Country.Serbia?10 -QtCore.QLocale.Country.SaintBarthelemy?10 -QtCore.QLocale.Country.SaintMartin?10 -QtCore.QLocale.Country.LatinAmericaAndTheCaribbean?10 -QtCore.QLocale.Country.LastCountry?10 -QtCore.QLocale.Country.Brunei?10 -QtCore.QLocale.Country.CongoKinshasa?10 -QtCore.QLocale.Country.CongoBrazzaville?10 -QtCore.QLocale.Country.Fiji?10 -QtCore.QLocale.Country.Guernsey?10 -QtCore.QLocale.Country.NorthKorea?10 -QtCore.QLocale.Country.SouthKorea?10 -QtCore.QLocale.Country.Laos?10 -QtCore.QLocale.Country.Libya?10 -QtCore.QLocale.Country.CuraSao?10 -QtCore.QLocale.Country.PalestinianTerritories?10 -QtCore.QLocale.Country.Russia?10 -QtCore.QLocale.Country.SaintLucia?10 -QtCore.QLocale.Country.SaintVincentAndTheGrenadines?10 -QtCore.QLocale.Country.SaintHelena?10 -QtCore.QLocale.Country.SaintPierreAndMiquelon?10 -QtCore.QLocale.Country.Syria?10 -QtCore.QLocale.Country.Tonga?10 -QtCore.QLocale.Country.Vietnam?10 -QtCore.QLocale.Country.UnitedStatesVirginIslands?10 -QtCore.QLocale.Country.CanaryIslands?10 -QtCore.QLocale.Country.ClippertonIsland?10 -QtCore.QLocale.Country.AscensionIsland?10 -QtCore.QLocale.Country.AlandIslands?10 -QtCore.QLocale.Country.DiegoGarcia?10 -QtCore.QLocale.Country.CeutaAndMelilla?10 -QtCore.QLocale.Country.IsleOfMan?10 -QtCore.QLocale.Country.Jersey?10 -QtCore.QLocale.Country.TristanDaCunha?10 -QtCore.QLocale.Country.SouthSudan?10 -QtCore.QLocale.Country.Bonaire?10 -QtCore.QLocale.Country.SintMaarten?10 -QtCore.QLocale.Country.Kosovo?10 -QtCore.QLocale.Country.TokelauCountry?10 -QtCore.QLocale.Country.TuvaluCountry?10 -QtCore.QLocale.Country.EuropeanUnion?10 -QtCore.QLocale.Country.OutlyingOceania?10 -QtCore.QLocale.Country.LatinAmerica?10 -QtCore.QLocale.Country.World?10 -QtCore.QLocale.Country.Europe?10 -QtCore.QLocale.Country.BosniaAndHerzegovina?10 -QtCore.QLocale.Country.CaribbeanNetherlands?10 -QtCore.QLocale.Country.Curacao?10 -QtCore.QLocale.Country.Czechia?10 -QtCore.QLocale.Country.Eswatini?10 -QtCore.QLocale.Country.Macao?10 -QtCore.QLocale.Country.SaintVincentAndGrenadines?10 -QtCore.QLocale.Country.SouthGeorgiaAndSouthSandwichIslands?10 -QtCore.QLocale.Country.SvalbardAndJanMayen?10 -QtCore.QLocale.Country.TimorLeste?10 -QtCore.QLocale.Country.UnitedStatesOutlyingIslands?10 -QtCore.QLocale.Country.VaticanCity?10 -QtCore.QLocale.Country.WallisAndFutuna?10 -QtCore.QLocale.Country.NauruTerritory?10 -QtCore.QLocale.Country.TokelauTerritory?10 -QtCore.QLocale.Country.TuvaluTerritory?10 -QtCore.QLocale.Language?10 -QtCore.QLocale.Language.C?10 -QtCore.QLocale.Language.Abkhazian?10 -QtCore.QLocale.Language.Afan?10 -QtCore.QLocale.Language.Afar?10 -QtCore.QLocale.Language.Afrikaans?10 -QtCore.QLocale.Language.Albanian?10 -QtCore.QLocale.Language.Amharic?10 -QtCore.QLocale.Language.Arabic?10 -QtCore.QLocale.Language.Armenian?10 -QtCore.QLocale.Language.Assamese?10 -QtCore.QLocale.Language.Aymara?10 -QtCore.QLocale.Language.Azerbaijani?10 -QtCore.QLocale.Language.Bashkir?10 -QtCore.QLocale.Language.Basque?10 -QtCore.QLocale.Language.Bengali?10 -QtCore.QLocale.Language.Bhutani?10 -QtCore.QLocale.Language.Bislama?10 -QtCore.QLocale.Language.Breton?10 -QtCore.QLocale.Language.Bulgarian?10 -QtCore.QLocale.Language.Burmese?10 -QtCore.QLocale.Language.Byelorussian?10 -QtCore.QLocale.Language.Cambodian?10 -QtCore.QLocale.Language.Catalan?10 -QtCore.QLocale.Language.Chinese?10 -QtCore.QLocale.Language.Corsican?10 -QtCore.QLocale.Language.Croatian?10 -QtCore.QLocale.Language.Czech?10 -QtCore.QLocale.Language.Danish?10 -QtCore.QLocale.Language.Dutch?10 -QtCore.QLocale.Language.English?10 -QtCore.QLocale.Language.Esperanto?10 -QtCore.QLocale.Language.Estonian?10 -QtCore.QLocale.Language.Faroese?10 -QtCore.QLocale.Language.Finnish?10 -QtCore.QLocale.Language.French?10 -QtCore.QLocale.Language.Frisian?10 -QtCore.QLocale.Language.Gaelic?10 -QtCore.QLocale.Language.Galician?10 -QtCore.QLocale.Language.Georgian?10 -QtCore.QLocale.Language.German?10 -QtCore.QLocale.Language.Greek?10 -QtCore.QLocale.Language.Greenlandic?10 -QtCore.QLocale.Language.Guarani?10 -QtCore.QLocale.Language.Gujarati?10 -QtCore.QLocale.Language.Hausa?10 -QtCore.QLocale.Language.Hebrew?10 -QtCore.QLocale.Language.Hindi?10 -QtCore.QLocale.Language.Hungarian?10 -QtCore.QLocale.Language.Icelandic?10 -QtCore.QLocale.Language.Indonesian?10 -QtCore.QLocale.Language.Interlingua?10 -QtCore.QLocale.Language.Interlingue?10 -QtCore.QLocale.Language.Inuktitut?10 -QtCore.QLocale.Language.Inupiak?10 -QtCore.QLocale.Language.Irish?10 -QtCore.QLocale.Language.Italian?10 -QtCore.QLocale.Language.Japanese?10 -QtCore.QLocale.Language.Javanese?10 -QtCore.QLocale.Language.Kannada?10 -QtCore.QLocale.Language.Kashmiri?10 -QtCore.QLocale.Language.Kazakh?10 -QtCore.QLocale.Language.Kinyarwanda?10 -QtCore.QLocale.Language.Kirghiz?10 -QtCore.QLocale.Language.Korean?10 -QtCore.QLocale.Language.Kurdish?10 -QtCore.QLocale.Language.Kurundi?10 -QtCore.QLocale.Language.Latin?10 -QtCore.QLocale.Language.Latvian?10 -QtCore.QLocale.Language.Lingala?10 -QtCore.QLocale.Language.Lithuanian?10 -QtCore.QLocale.Language.Macedonian?10 -QtCore.QLocale.Language.Malagasy?10 -QtCore.QLocale.Language.Malay?10 -QtCore.QLocale.Language.Malayalam?10 -QtCore.QLocale.Language.Maltese?10 -QtCore.QLocale.Language.Maori?10 -QtCore.QLocale.Language.Marathi?10 -QtCore.QLocale.Language.Mongolian?10 -QtCore.QLocale.Language.NauruLanguage?10 -QtCore.QLocale.Language.Nepali?10 -QtCore.QLocale.Language.Occitan?10 -QtCore.QLocale.Language.Oriya?10 -QtCore.QLocale.Language.Pashto?10 -QtCore.QLocale.Language.Persian?10 -QtCore.QLocale.Language.Polish?10 -QtCore.QLocale.Language.Portuguese?10 -QtCore.QLocale.Language.Punjabi?10 -QtCore.QLocale.Language.Quechua?10 -QtCore.QLocale.Language.RhaetoRomance?10 -QtCore.QLocale.Language.Romanian?10 -QtCore.QLocale.Language.Russian?10 -QtCore.QLocale.Language.Samoan?10 -QtCore.QLocale.Language.Sanskrit?10 -QtCore.QLocale.Language.Serbian?10 -QtCore.QLocale.Language.Shona?10 -QtCore.QLocale.Language.Sindhi?10 -QtCore.QLocale.Language.Slovak?10 -QtCore.QLocale.Language.Slovenian?10 -QtCore.QLocale.Language.Somali?10 -QtCore.QLocale.Language.Spanish?10 -QtCore.QLocale.Language.Sundanese?10 -QtCore.QLocale.Language.Swahili?10 -QtCore.QLocale.Language.Swedish?10 -QtCore.QLocale.Language.Tajik?10 -QtCore.QLocale.Language.Tamil?10 -QtCore.QLocale.Language.Tatar?10 -QtCore.QLocale.Language.Telugu?10 -QtCore.QLocale.Language.Thai?10 -QtCore.QLocale.Language.Tibetan?10 -QtCore.QLocale.Language.Tigrinya?10 -QtCore.QLocale.Language.Tsonga?10 -QtCore.QLocale.Language.Turkish?10 -QtCore.QLocale.Language.Turkmen?10 -QtCore.QLocale.Language.Uigur?10 -QtCore.QLocale.Language.Ukrainian?10 -QtCore.QLocale.Language.Urdu?10 -QtCore.QLocale.Language.Uzbek?10 -QtCore.QLocale.Language.Vietnamese?10 -QtCore.QLocale.Language.Volapuk?10 -QtCore.QLocale.Language.Welsh?10 -QtCore.QLocale.Language.Wolof?10 -QtCore.QLocale.Language.Xhosa?10 -QtCore.QLocale.Language.Yiddish?10 -QtCore.QLocale.Language.Yoruba?10 -QtCore.QLocale.Language.Zhuang?10 -QtCore.QLocale.Language.Zulu?10 -QtCore.QLocale.Language.Bosnian?10 -QtCore.QLocale.Language.Divehi?10 -QtCore.QLocale.Language.Manx?10 -QtCore.QLocale.Language.Cornish?10 -QtCore.QLocale.Language.LastLanguage?10 -QtCore.QLocale.Language.NorwegianBokmal?10 -QtCore.QLocale.Language.NorwegianNynorsk?10 -QtCore.QLocale.Language.Akan?10 -QtCore.QLocale.Language.Konkani?10 -QtCore.QLocale.Language.Ga?10 -QtCore.QLocale.Language.Igbo?10 -QtCore.QLocale.Language.Kamba?10 -QtCore.QLocale.Language.Syriac?10 -QtCore.QLocale.Language.Blin?10 -QtCore.QLocale.Language.Geez?10 -QtCore.QLocale.Language.Koro?10 -QtCore.QLocale.Language.Sidamo?10 -QtCore.QLocale.Language.Atsam?10 -QtCore.QLocale.Language.Tigre?10 -QtCore.QLocale.Language.Jju?10 -QtCore.QLocale.Language.Friulian?10 -QtCore.QLocale.Language.Venda?10 -QtCore.QLocale.Language.Ewe?10 -QtCore.QLocale.Language.Walamo?10 -QtCore.QLocale.Language.Hawaiian?10 -QtCore.QLocale.Language.Tyap?10 -QtCore.QLocale.Language.Chewa?10 -QtCore.QLocale.Language.Filipino?10 -QtCore.QLocale.Language.SwissGerman?10 -QtCore.QLocale.Language.SichuanYi?10 -QtCore.QLocale.Language.Kpelle?10 -QtCore.QLocale.Language.LowGerman?10 -QtCore.QLocale.Language.SouthNdebele?10 -QtCore.QLocale.Language.NorthernSotho?10 -QtCore.QLocale.Language.NorthernSami?10 -QtCore.QLocale.Language.Taroko?10 -QtCore.QLocale.Language.Gusii?10 -QtCore.QLocale.Language.Taita?10 -QtCore.QLocale.Language.Fulah?10 -QtCore.QLocale.Language.Kikuyu?10 -QtCore.QLocale.Language.Samburu?10 -QtCore.QLocale.Language.Sena?10 -QtCore.QLocale.Language.NorthNdebele?10 -QtCore.QLocale.Language.Rombo?10 -QtCore.QLocale.Language.Tachelhit?10 -QtCore.QLocale.Language.Kabyle?10 -QtCore.QLocale.Language.Nyankole?10 -QtCore.QLocale.Language.Bena?10 -QtCore.QLocale.Language.Vunjo?10 -QtCore.QLocale.Language.Bambara?10 -QtCore.QLocale.Language.Embu?10 -QtCore.QLocale.Language.Cherokee?10 -QtCore.QLocale.Language.Morisyen?10 -QtCore.QLocale.Language.Makonde?10 -QtCore.QLocale.Language.Langi?10 -QtCore.QLocale.Language.Ganda?10 -QtCore.QLocale.Language.Bemba?10 -QtCore.QLocale.Language.Kabuverdianu?10 -QtCore.QLocale.Language.Meru?10 -QtCore.QLocale.Language.Kalenjin?10 -QtCore.QLocale.Language.Nama?10 -QtCore.QLocale.Language.Machame?10 -QtCore.QLocale.Language.Colognian?10 -QtCore.QLocale.Language.Masai?10 -QtCore.QLocale.Language.Soga?10 -QtCore.QLocale.Language.Luyia?10 -QtCore.QLocale.Language.Asu?10 -QtCore.QLocale.Language.Teso?10 -QtCore.QLocale.Language.Saho?10 -QtCore.QLocale.Language.KoyraChiini?10 -QtCore.QLocale.Language.Rwa?10 -QtCore.QLocale.Language.Luo?10 -QtCore.QLocale.Language.Chiga?10 -QtCore.QLocale.Language.CentralMoroccoTamazight?10 -QtCore.QLocale.Language.KoyraboroSenni?10 -QtCore.QLocale.Language.Shambala?10 -QtCore.QLocale.Language.AnyLanguage?10 -QtCore.QLocale.Language.Rundi?10 -QtCore.QLocale.Language.Bodo?10 -QtCore.QLocale.Language.Aghem?10 -QtCore.QLocale.Language.Basaa?10 -QtCore.QLocale.Language.Zarma?10 -QtCore.QLocale.Language.Duala?10 -QtCore.QLocale.Language.JolaFonyi?10 -QtCore.QLocale.Language.Ewondo?10 -QtCore.QLocale.Language.Bafia?10 -QtCore.QLocale.Language.LubaKatanga?10 -QtCore.QLocale.Language.MakhuwaMeetto?10 -QtCore.QLocale.Language.Mundang?10 -QtCore.QLocale.Language.Kwasio?10 -QtCore.QLocale.Language.Nuer?10 -QtCore.QLocale.Language.Sakha?10 -QtCore.QLocale.Language.Sangu?10 -QtCore.QLocale.Language.Tasawaq?10 -QtCore.QLocale.Language.Vai?10 -QtCore.QLocale.Language.Walser?10 -QtCore.QLocale.Language.Yangben?10 -QtCore.QLocale.Language.Oromo?10 -QtCore.QLocale.Language.Dzongkha?10 -QtCore.QLocale.Language.Belarusian?10 -QtCore.QLocale.Language.Khmer?10 -QtCore.QLocale.Language.Fijian?10 -QtCore.QLocale.Language.WesternFrisian?10 -QtCore.QLocale.Language.Lao?10 -QtCore.QLocale.Language.Marshallese?10 -QtCore.QLocale.Language.Romansh?10 -QtCore.QLocale.Language.Sango?10 -QtCore.QLocale.Language.Ossetic?10 -QtCore.QLocale.Language.SouthernSotho?10 -QtCore.QLocale.Language.Tswana?10 -QtCore.QLocale.Language.Sinhala?10 -QtCore.QLocale.Language.Swati?10 -QtCore.QLocale.Language.Sardinian?10 -QtCore.QLocale.Language.Tongan?10 -QtCore.QLocale.Language.Tahitian?10 -QtCore.QLocale.Language.Nyanja?10 -QtCore.QLocale.Language.Avaric?10 -QtCore.QLocale.Language.Chamorro?10 -QtCore.QLocale.Language.Chechen?10 -QtCore.QLocale.Language.Church?10 -QtCore.QLocale.Language.Chuvash?10 -QtCore.QLocale.Language.Cree?10 -QtCore.QLocale.Language.Haitian?10 -QtCore.QLocale.Language.Herero?10 -QtCore.QLocale.Language.HiriMotu?10 -QtCore.QLocale.Language.Kanuri?10 -QtCore.QLocale.Language.Komi?10 -QtCore.QLocale.Language.Kongo?10 -QtCore.QLocale.Language.Kwanyama?10 -QtCore.QLocale.Language.Limburgish?10 -QtCore.QLocale.Language.Luxembourgish?10 -QtCore.QLocale.Language.Navaho?10 -QtCore.QLocale.Language.Ndonga?10 -QtCore.QLocale.Language.Ojibwa?10 -QtCore.QLocale.Language.Pali?10 -QtCore.QLocale.Language.Walloon?10 -QtCore.QLocale.Language.Avestan?10 -QtCore.QLocale.Language.Asturian?10 -QtCore.QLocale.Language.Ngomba?10 -QtCore.QLocale.Language.Kako?10 -QtCore.QLocale.Language.Meta?10 -QtCore.QLocale.Language.Ngiemboon?10 -QtCore.QLocale.Language.Uighur?10 -QtCore.QLocale.Language.Aragonese?10 -QtCore.QLocale.Language.Akkadian?10 -QtCore.QLocale.Language.AncientEgyptian?10 -QtCore.QLocale.Language.AncientGreek?10 -QtCore.QLocale.Language.Aramaic?10 -QtCore.QLocale.Language.Balinese?10 -QtCore.QLocale.Language.Bamun?10 -QtCore.QLocale.Language.BatakToba?10 -QtCore.QLocale.Language.Buginese?10 -QtCore.QLocale.Language.Chakma?10 -QtCore.QLocale.Language.Coptic?10 -QtCore.QLocale.Language.Dogri?10 -QtCore.QLocale.Language.Gothic?10 -QtCore.QLocale.Language.Ingush?10 -QtCore.QLocale.Language.Mandingo?10 -QtCore.QLocale.Language.Manipuri?10 -QtCore.QLocale.Language.OldIrish?10 -QtCore.QLocale.Language.OldNorse?10 -QtCore.QLocale.Language.OldPersian?10 -QtCore.QLocale.Language.Pahlavi?10 -QtCore.QLocale.Language.Phoenician?10 -QtCore.QLocale.Language.Santali?10 -QtCore.QLocale.Language.Saurashtra?10 -QtCore.QLocale.Language.TaiDam?10 -QtCore.QLocale.Language.Ugaritic?10 -QtCore.QLocale.Language.Akoose?10 -QtCore.QLocale.Language.Lakota?10 -QtCore.QLocale.Language.StandardMoroccanTamazight?10 -QtCore.QLocale.Language.Mapuche?10 -QtCore.QLocale.Language.CentralKurdish?10 -QtCore.QLocale.Language.LowerSorbian?10 -QtCore.QLocale.Language.UpperSorbian?10 -QtCore.QLocale.Language.Kenyang?10 -QtCore.QLocale.Language.Mohawk?10 -QtCore.QLocale.Language.Nko?10 -QtCore.QLocale.Language.Prussian?10 -QtCore.QLocale.Language.Kiche?10 -QtCore.QLocale.Language.SouthernSami?10 -QtCore.QLocale.Language.LuleSami?10 -QtCore.QLocale.Language.InariSami?10 -QtCore.QLocale.Language.SkoltSami?10 -QtCore.QLocale.Language.Warlpiri?10 -QtCore.QLocale.Language.Mende?10 -QtCore.QLocale.Language.Lezghian?10 -QtCore.QLocale.Language.Maithili?10 -QtCore.QLocale.Language.AmericanSignLanguage?10 -QtCore.QLocale.Language.Bhojpuri?10 -QtCore.QLocale.Language.LiteraryChinese?10 -QtCore.QLocale.Language.Mazanderani?10 -QtCore.QLocale.Language.Newari?10 -QtCore.QLocale.Language.NorthernLuri?10 -QtCore.QLocale.Language.Palauan?10 -QtCore.QLocale.Language.Papiamento?10 -QtCore.QLocale.Language.TokelauLanguage?10 -QtCore.QLocale.Language.TokPisin?10 -QtCore.QLocale.Language.TuvaluLanguage?10 -QtCore.QLocale.Language.Cantonese?10 -QtCore.QLocale.Language.Osage?10 -QtCore.QLocale.Language.Ido?10 -QtCore.QLocale.Language.Lojban?10 -QtCore.QLocale.Language.Sicilian?10 -QtCore.QLocale.Language.SouthernKurdish?10 -QtCore.QLocale.Language.WesternBalochi?10 -QtCore.QLocale.Language.Cebuano?10 -QtCore.QLocale.Language.Erzya?10 -QtCore.QLocale.Language.Chickasaw?10 -QtCore.QLocale.Language.Muscogee?10 -QtCore.QLocale.Language.Silesian?10 -QtCore.QLocale.Language.NigerianPidgin?10 -QtCore.QLocale.Language.Bangla?10 -QtCore.QLocale.Language.CentralAtlasTamazight?10 -QtCore.QLocale.Language.Inupiaq?10 -QtCore.QLocale.Language.Kalaallisut?10 -QtCore.QLocale.Language.Kuanyama?10 -QtCore.QLocale.Language.Kyrgyz?10 -QtCore.QLocale.Language.Navajo?10 -QtCore.QLocale.Language.Odia?10 -QtCore.QLocale.Language.Uyghur?10 -QtCore.QLocale.Language.Wolaytta?10 -QtCore.QLocale.Language.Kaingang?10 -QtCore.QLocale.Language.Nheengatu?10 -QtCore.QLocale.Language.Haryanvi?10 -QtCore.QLocale.Language.NorthernFrisian?10 -QtCore.QLocale.Language.Rajasthani?10 -QtCore.QLocale.Language.Moksha?10 -QtCore.QLocale.Language.TokiPona?10 -QtCore.QLocale.Language.Pijin?10 -QtCore.QLocale.Language.Obolo?10 -QtCore.QLocale.Language.Baluchi?10 -QtCore.QLocale.Language.Ligurian?10 -QtCore.QLocale.Language.Rohingya?10 -QtCore.QLocale.Language.Torwali?10 -QtCore.QLocale.Language.Anii?10 -QtCore.QLocale.Language.Kangri?10 -QtCore.QLocale.Language.Venetian?10 -QtCore.QLocale.DefaultTwoDigitBaseYear?7 -QtCore.QLocale?1() -QtCore.QLocale.__init__?1(self) -QtCore.QLocale?1(QString) -QtCore.QLocale.__init__?1(self, QString) -QtCore.QLocale?1(QLocale.Language, QLocale.Country country=QLocale.AnyCountry) -QtCore.QLocale.__init__?1(self, QLocale.Language, QLocale.Country country=QLocale.AnyCountry) -QtCore.QLocale?1(QLocale.Language, QLocale.Script, QLocale.Country) -QtCore.QLocale.__init__?1(self, QLocale.Language, QLocale.Script, QLocale.Country) -QtCore.QLocale?1(QLocale) -QtCore.QLocale.__init__?1(self, QLocale) -QtCore.QLocale.language?4() -> QLocale.Language -QtCore.QLocale.country?4() -> QLocale.Country -QtCore.QLocale.name?4(QLocale.TagSeparator separator=QLocale.TagSeparator.Underscore) -> QString -QtCore.QLocale.toShort?4(QString) -> (int, bool) -QtCore.QLocale.toUShort?4(QString) -> (int, bool) -QtCore.QLocale.toInt?4(QString) -> (int, bool) -QtCore.QLocale.toUInt?4(QString) -> (int, bool) -QtCore.QLocale.toLongLong?4(QString) -> (int, bool) -QtCore.QLocale.toULongLong?4(QString) -> (int, bool) -QtCore.QLocale.toFloat?4(QString) -> (float, bool) -QtCore.QLocale.toDouble?4(QString) -> (float, bool) -QtCore.QLocale.toString?4(QDate, QLocale.FormatType, QCalendar) -> QString -QtCore.QLocale.toString?4(QDate, QStringView, QCalendar) -> QString -QtCore.QLocale.toString?4(QDate, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.toString?4(QDate, QStringView) -> QString -QtCore.QLocale.toString?4(QTime, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.toString?4(QTime, QStringView) -> QString -QtCore.QLocale.toString?4(float, str format='g', int precision=6) -> QString -QtCore.QLocale.languageToString?4(QLocale.Language) -> QString -QtCore.QLocale.countryToString?4(QLocale.Country) -> QString -QtCore.QLocale.setDefault?4(QLocale) -QtCore.QLocale.c?4() -> QLocale -QtCore.QLocale.system?4() -> QLocale -QtCore.QLocale.toString?4(QDateTime, QLocale.FormatType, QCalendar) -> QString -QtCore.QLocale.toString?4(QDateTime, QString) -> QString -QtCore.QLocale.toString?4(QDateTime, QString, QCalendar) -> QString -QtCore.QLocale.toString?4(QDateTime, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.dateFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.timeFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.dateTimeFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.toDate?4(QString, QString, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDate -QtCore.QLocale.toDate?4(QString, QString, QCalendar, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDate -QtCore.QLocale.toDate?4(QString, QLocale.FormatType, QCalendar, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDate -QtCore.QLocale.toDate?4(QString, QLocale.FormatType=QLocale.LongFormat, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDate -QtCore.QLocale.toTime?4(QString, QLocale.FormatType format=QLocale.LongFormat) -> QTime -QtCore.QLocale.toTime?4(QString, QString) -> QTime -QtCore.QLocale.toDateTime?4(QString, QString, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDateTime -QtCore.QLocale.toDateTime?4(QString, QString, QCalendar, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDateTime -QtCore.QLocale.toDateTime?4(QString, QLocale.FormatType, QCalendar, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDateTime -QtCore.QLocale.toDateTime?4(QString, QLocale.FormatType format=QLocale.LongFormat, int baseYear=QLocale.DefaultTwoDigitBaseYear) -> QDateTime -QtCore.QLocale.decimalPoint?4() -> QString -QtCore.QLocale.groupSeparator?4() -> QString -QtCore.QLocale.percent?4() -> QString -QtCore.QLocale.zeroDigit?4() -> QString -QtCore.QLocale.negativeSign?4() -> QString -QtCore.QLocale.exponential?4() -> QString -QtCore.QLocale.monthName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.dayName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.setNumberOptions?4(unknown-type) -QtCore.QLocale.numberOptions?4() -> unknown-type -QtCore.QLocale.measurementSystem?4() -> QLocale.MeasurementSystem -QtCore.QLocale.positiveSign?4() -> QString -QtCore.QLocale.standaloneMonthName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.standaloneDayName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString -QtCore.QLocale.amText?4() -> QString -QtCore.QLocale.pmText?4() -> QString -QtCore.QLocale.textDirection?4() -> Qt.LayoutDirection -QtCore.QLocale.script?4() -> QLocale.Script -QtCore.QLocale.bcp47Name?4(QLocale.TagSeparator separator=QLocale.TagSeparator.Dash) -> QString -QtCore.QLocale.nativeLanguageName?4() -> QString -QtCore.QLocale.nativeCountryName?4() -> QString -QtCore.QLocale.firstDayOfWeek?4() -> Qt.DayOfWeek -QtCore.QLocale.weekdays?4() -> unknown-type -QtCore.QLocale.toUpper?4(QString) -> QString -QtCore.QLocale.toLower?4(QString) -> QString -QtCore.QLocale.currencySymbol?4(QLocale.CurrencySymbolFormat format=QLocale.CurrencySymbol) -> QString -QtCore.QLocale.toCurrencyString?4(float, QString symbol='', int precision=-1) -> QString -QtCore.QLocale.uiLanguages?4(QLocale.TagSeparator separator=QLocale.TagSeparator.Dash) -> QStringList -QtCore.QLocale.scriptToString?4(QLocale.Script) -> QString -QtCore.QLocale.matchingLocales?4(QLocale.Language, QLocale.Script, QLocale.Country) -> unknown-type -QtCore.QLocale.quoteString?4(QStringView, QLocale.QuotationStyle style=QLocale.StandardQuotation) -> QString -QtCore.QLocale.createSeparatedList?4(QStringList) -> QString -QtCore.QLocale.swap?4(QLocale) -QtCore.QLocale.toString?4(Any) -> QString -QtCore.QLocale.toCurrencyString?4(Any, QString symbol='') -> QString -QtCore.QLocale.formattedDataSize?4(int, int precision=2, unknown-type format=QLocale.DataSizeIecFormat) -> QString -QtCore.QLocale.toLong?4(QString) -> (int, bool) -QtCore.QLocale.toULong?4(QString) -> (int, bool) -QtCore.QLocale.collation?4() -> QLocale -QtCore.QLocale.languageToCode?4(QLocale.Language, unknown-type codeTypes=QLocale.AnyLanguageCode) -> QString -QtCore.QLocale.codeToLanguage?4(QStringView, unknown-type codeTypes=QLocale.AnyLanguageCode) -> QLocale.Language -QtCore.QLocale.countryToCode?4(QLocale.Country) -> QString -QtCore.QLocale.codeToCountry?4(QStringView) -> QLocale.Country -QtCore.QLocale.scriptToCode?4(QLocale.Script) -> QString -QtCore.QLocale.codeToScript?4(QStringView) -> QLocale.Script -QtCore.QLocale.territory?4() -> QLocale.Country -QtCore.QLocale.nativeTerritoryName?4() -> QString -QtCore.QLocale.territoryToCode?4(QLocale.Country) -> QString -QtCore.QLocale.codeToTerritory?4(QStringView) -> QLocale.Country -QtCore.QLocale.territoryToString?4(QLocale.Country) -> QString -QtCore.QLockFile.LockError?10 -QtCore.QLockFile.LockError.NoError?10 -QtCore.QLockFile.LockError.LockFailedError?10 -QtCore.QLockFile.LockError.PermissionError?10 -QtCore.QLockFile.LockError.UnknownError?10 -QtCore.QLockFile?1(QString) -QtCore.QLockFile.__init__?1(self, QString) -QtCore.QLockFile.lock?4() -> bool -QtCore.QLockFile.tryLock?4(int timeout=0) -> bool -QtCore.QLockFile.unlock?4() -QtCore.QLockFile.setStaleLockTime?4(int) -QtCore.QLockFile.staleLockTime?4() -> int -QtCore.QLockFile.isLocked?4() -> bool -QtCore.QLockFile.getLockInfo?4() -> (bool, int, QString, QString) -QtCore.QLockFile.removeStaleLockFile?4() -> bool -QtCore.QLockFile.error?4() -> QLockFile.LockError -QtCore.QLockFile.fileName?4() -> QString -QtCore.QMessageLogContext.category?7 -QtCore.QMessageLogContext.file?7 -QtCore.QMessageLogContext.function?7 -QtCore.QMessageLogContext.line?7 -QtCore.QMessageLogger?1() -QtCore.QMessageLogger.__init__?1(self) -QtCore.QMessageLogger?1(str, int, str) -QtCore.QMessageLogger.__init__?1(self, str, int, str) -QtCore.QMessageLogger?1(str, int, str, str) -QtCore.QMessageLogger.__init__?1(self, str, int, str, str) -QtCore.QMessageLogger.debug?4(str) -QtCore.QMessageLogger.debug?4(QLoggingCategory, str) -QtCore.QMessageLogger.info?4(str) -QtCore.QMessageLogger.info?4(QLoggingCategory, str) -QtCore.QMessageLogger.warning?4(str) -QtCore.QMessageLogger.warning?4(QLoggingCategory, str) -QtCore.QMessageLogger.critical?4(str) -QtCore.QMessageLogger.critical?4(QLoggingCategory, str) -QtCore.QMessageLogger.fatal?4(str) -QtCore.QMessageLogger.fatal?4(QLoggingCategory, str) -QtCore.QLoggingCategory?1(str, QtMsgType severityLevel=QtDebugMsg) -QtCore.QLoggingCategory.__init__?1(self, str, QtMsgType severityLevel=QtDebugMsg) -QtCore.QLoggingCategory.isEnabled?4(QtMsgType) -> bool -QtCore.QLoggingCategory.setEnabled?4(QtMsgType, bool) -QtCore.QLoggingCategory.isDebugEnabled?4() -> bool -QtCore.QLoggingCategory.isInfoEnabled?4() -> bool -QtCore.QLoggingCategory.isWarningEnabled?4() -> bool -QtCore.QLoggingCategory.isCriticalEnabled?4() -> bool -QtCore.QLoggingCategory.categoryName?4() -> str -QtCore.QLoggingCategory.defaultCategory?4() -> QLoggingCategory -QtCore.QLoggingCategory.setFilterRules?4(QString) -QtCore.QMargins?1() -QtCore.QMargins.__init__?1(self) -QtCore.QMargins?1(int, int, int, int) -QtCore.QMargins.__init__?1(self, int, int, int, int) -QtCore.QMargins?1(QMargins) -QtCore.QMargins.__init__?1(self, QMargins) -QtCore.QMargins.isNull?4() -> bool -QtCore.QMargins.left?4() -> int -QtCore.QMargins.top?4() -> int -QtCore.QMargins.right?4() -> int -QtCore.QMargins.bottom?4() -> int -QtCore.QMargins.setLeft?4(int) -QtCore.QMargins.setTop?4(int) -QtCore.QMargins.setRight?4(int) -QtCore.QMargins.setBottom?4(int) -QtCore.QMargins.toMarginsF?4() -> QMarginsF -QtCore.QMarginsF?1() -QtCore.QMarginsF.__init__?1(self) -QtCore.QMarginsF?1(float, float, float, float) -QtCore.QMarginsF.__init__?1(self, float, float, float, float) -QtCore.QMarginsF?1(QMargins) -QtCore.QMarginsF.__init__?1(self, QMargins) -QtCore.QMarginsF?1(QMarginsF) -QtCore.QMarginsF.__init__?1(self, QMarginsF) -QtCore.QMarginsF.isNull?4() -> bool -QtCore.QMarginsF.left?4() -> float -QtCore.QMarginsF.top?4() -> float -QtCore.QMarginsF.right?4() -> float -QtCore.QMarginsF.bottom?4() -> float -QtCore.QMarginsF.setLeft?4(float) -QtCore.QMarginsF.setTop?4(float) -QtCore.QMarginsF.setRight?4(float) -QtCore.QMarginsF.setBottom?4(float) -QtCore.QMarginsF.toMargins?4() -> QMargins -QtCore.QMessageAuthenticationCode?1(QCryptographicHash.Algorithm, QByteArrayView key={}) -QtCore.QMessageAuthenticationCode.__init__?1(self, QCryptographicHash.Algorithm, QByteArrayView key={}) -QtCore.QMessageAuthenticationCode.reset?4() -QtCore.QMessageAuthenticationCode.setKey?4(QByteArrayView) -QtCore.QMessageAuthenticationCode.addData?4(QByteArrayView) -QtCore.QMessageAuthenticationCode.addData?4(QIODevice) -> bool -QtCore.QMessageAuthenticationCode.result?4() -> QByteArray -QtCore.QMessageAuthenticationCode.hash?4(QByteArrayView, QByteArrayView, QCryptographicHash.Algorithm) -> QByteArray -QtCore.QMessageAuthenticationCode.swap?4(QMessageAuthenticationCode) -QtCore.QMetaMethod.MethodType?10 -QtCore.QMetaMethod.MethodType.Method?10 -QtCore.QMetaMethod.MethodType.Signal?10 -QtCore.QMetaMethod.MethodType.Slot?10 -QtCore.QMetaMethod.MethodType.Constructor?10 -QtCore.QMetaMethod.Access?10 -QtCore.QMetaMethod.Access.Private?10 -QtCore.QMetaMethod.Access.Protected?10 -QtCore.QMetaMethod.Access.Public?10 -QtCore.QMetaMethod?1() -QtCore.QMetaMethod.__init__?1(self) -QtCore.QMetaMethod?1(QMetaMethod) -QtCore.QMetaMethod.__init__?1(self, QMetaMethod) -QtCore.QMetaMethod.typeName?4() -> str -QtCore.QMetaMethod.parameterTypes?4() -> unknown-type -QtCore.QMetaMethod.parameterNames?4() -> unknown-type -QtCore.QMetaMethod.tag?4() -> str -QtCore.QMetaMethod.access?4() -> QMetaMethod.Access -QtCore.QMetaMethod.methodType?4() -> QMetaMethod.MethodType -QtCore.QMetaMethod.invoke?4(QObject, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaMethod.invoke?4(QObject, Qt.ConnectionType, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaMethod.invoke?4(QObject, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaMethod.invoke?4(QObject, Qt.ConnectionType, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaMethod.methodIndex?4() -> int -QtCore.QMetaMethod.revision?4() -> int -QtCore.QMetaMethod.isValid?4() -> bool -QtCore.QMetaMethod.methodSignature?4() -> QByteArray -QtCore.QMetaMethod.name?4() -> QByteArray -QtCore.QMetaMethod.returnType?4() -> int -QtCore.QMetaMethod.parameterCount?4() -> int -QtCore.QMetaMethod.parameterType?4(int) -> int -QtCore.QMetaMethod.returnMetaType?4() -> QMetaType -QtCore.QMetaMethod.parameterMetaType?4(int) -> QMetaType -QtCore.QMetaMethod.parameterTypeName?4(int) -> QByteArray -QtCore.QMetaMethod.relativeMethodIndex?4() -> int -QtCore.QMetaMethod.isConst?4() -> bool -QtCore.QMetaEnum?1() -QtCore.QMetaEnum.__init__?1(self) -QtCore.QMetaEnum?1(QMetaEnum) -QtCore.QMetaEnum.__init__?1(self, QMetaEnum) -QtCore.QMetaEnum.name?4() -> str -QtCore.QMetaEnum.isFlag?4() -> bool -QtCore.QMetaEnum.keyCount?4() -> int -QtCore.QMetaEnum.key?4(int) -> str -QtCore.QMetaEnum.value?4(int) -> int -QtCore.QMetaEnum.scope?4() -> str -QtCore.QMetaEnum.keyToValue?4(str) -> (int, bool) -QtCore.QMetaEnum.valueToKey?4(int) -> str -QtCore.QMetaEnum.keysToValue?4(str) -> (int, bool) -QtCore.QMetaEnum.valueToKeys?4(int) -> QByteArray -QtCore.QMetaEnum.isValid?4() -> bool -QtCore.QMetaEnum.isScoped?4() -> bool -QtCore.QMetaEnum.enumName?4() -> str -QtCore.QMetaEnum.metaType?4() -> QMetaType -QtCore.QMetaProperty?1() -QtCore.QMetaProperty.__init__?1(self) -QtCore.QMetaProperty?1(QMetaProperty) -QtCore.QMetaProperty.__init__?1(self, QMetaProperty) -QtCore.QMetaProperty.name?4() -> str -QtCore.QMetaProperty.typeName?4() -> str -QtCore.QMetaProperty.isReadable?4() -> bool -QtCore.QMetaProperty.isWritable?4() -> bool -QtCore.QMetaProperty.isDesignable?4() -> bool -QtCore.QMetaProperty.isScriptable?4() -> bool -QtCore.QMetaProperty.isStored?4() -> bool -QtCore.QMetaProperty.isFlagType?4() -> bool -QtCore.QMetaProperty.isEnumType?4() -> bool -QtCore.QMetaProperty.enumerator?4() -> QMetaEnum -QtCore.QMetaProperty.read?4(QObject) -> Any -QtCore.QMetaProperty.write?4(QObject, QVariant) -> bool -QtCore.QMetaProperty.reset?4(QObject) -> bool -QtCore.QMetaProperty.hasStdCppSet?4() -> bool -QtCore.QMetaProperty.isValid?4() -> bool -QtCore.QMetaProperty.isResettable?4() -> bool -QtCore.QMetaProperty.isUser?4() -> bool -QtCore.QMetaProperty.userType?4() -> int -QtCore.QMetaProperty.hasNotifySignal?4() -> bool -QtCore.QMetaProperty.notifySignal?4() -> QMetaMethod -QtCore.QMetaProperty.notifySignalIndex?4() -> int -QtCore.QMetaProperty.propertyIndex?4() -> int -QtCore.QMetaProperty.isConstant?4() -> bool -QtCore.QMetaProperty.isFinal?4() -> bool -QtCore.QMetaProperty.revision?4() -> int -QtCore.QMetaProperty.relativePropertyIndex?4() -> int -QtCore.QMetaProperty.isRequired?4() -> bool -QtCore.QMetaProperty.metaType?4() -> QMetaType -QtCore.QMetaProperty.isBindable?4() -> bool -QtCore.QMetaProperty.typeId?4() -> int -QtCore.QMetaClassInfo?1() -QtCore.QMetaClassInfo.__init__?1(self) -QtCore.QMetaClassInfo?1(QMetaClassInfo) -QtCore.QMetaClassInfo.__init__?1(self, QMetaClassInfo) -QtCore.QMetaClassInfo.name?4() -> str -QtCore.QMetaClassInfo.value?4() -> str -QtCore.QMetaType.TypeFlag?10 -QtCore.QMetaType.TypeFlag.NeedsConstruction?10 -QtCore.QMetaType.TypeFlag.NeedsDestruction?10 -QtCore.QMetaType.TypeFlag.PointerToQObject?10 -QtCore.QMetaType.TypeFlag.IsEnumeration?10 -QtCore.QMetaType.TypeFlag.IsUnsignedEnumeration?10 -QtCore.QMetaType.TypeFlag.IsPointer?10 -QtCore.QMetaType.TypeFlag.RelocatableType?10 -QtCore.QMetaType.TypeFlag.IsQmlList?10 -QtCore.QMetaType.TypeFlag.IsConst?10 -QtCore.QMetaType.TypeFlag.NeedsCopyConstruction?10 -QtCore.QMetaType.TypeFlag.NeedsMoveConstruction?10 -QtCore.QMetaType.Type?10 -QtCore.QMetaType.Type.UnknownType?10 -QtCore.QMetaType.Type.Void?10 -QtCore.QMetaType.Type.Bool?10 -QtCore.QMetaType.Type.Int?10 -QtCore.QMetaType.Type.UInt?10 -QtCore.QMetaType.Type.LongLong?10 -QtCore.QMetaType.Type.ULongLong?10 -QtCore.QMetaType.Type.Double?10 -QtCore.QMetaType.Type.QChar?10 -QtCore.QMetaType.Type.QVariantMap?10 -QtCore.QMetaType.Type.QVariantList?10 -QtCore.QMetaType.Type.QVariantHash?10 -QtCore.QMetaType.Type.QString?10 -QtCore.QMetaType.Type.QStringList?10 -QtCore.QMetaType.Type.QByteArray?10 -QtCore.QMetaType.Type.QBitArray?10 -QtCore.QMetaType.Type.QDate?10 -QtCore.QMetaType.Type.QTime?10 -QtCore.QMetaType.Type.QDateTime?10 -QtCore.QMetaType.Type.QUrl?10 -QtCore.QMetaType.Type.QLocale?10 -QtCore.QMetaType.Type.QRect?10 -QtCore.QMetaType.Type.QRectF?10 -QtCore.QMetaType.Type.QSize?10 -QtCore.QMetaType.Type.QSizeF?10 -QtCore.QMetaType.Type.QLine?10 -QtCore.QMetaType.Type.QLineF?10 -QtCore.QMetaType.Type.QPoint?10 -QtCore.QMetaType.Type.QPointF?10 -QtCore.QMetaType.Type.LastCoreType?10 -QtCore.QMetaType.Type.FirstGuiType?10 -QtCore.QMetaType.Type.QFont?10 -QtCore.QMetaType.Type.QPixmap?10 -QtCore.QMetaType.Type.QBrush?10 -QtCore.QMetaType.Type.QColor?10 -QtCore.QMetaType.Type.QPalette?10 -QtCore.QMetaType.Type.QIcon?10 -QtCore.QMetaType.Type.QImage?10 -QtCore.QMetaType.Type.QPolygon?10 -QtCore.QMetaType.Type.QRegion?10 -QtCore.QMetaType.Type.QBitmap?10 -QtCore.QMetaType.Type.QCursor?10 -QtCore.QMetaType.Type.QSizePolicy?10 -QtCore.QMetaType.Type.QKeySequence?10 -QtCore.QMetaType.Type.QPen?10 -QtCore.QMetaType.Type.QTextLength?10 -QtCore.QMetaType.Type.QTextFormat?10 -QtCore.QMetaType.Type.QTransform?10 -QtCore.QMetaType.Type.VoidStar?10 -QtCore.QMetaType.Type.Long?10 -QtCore.QMetaType.Type.Short?10 -QtCore.QMetaType.Type.Char?10 -QtCore.QMetaType.Type.Char16?10 -QtCore.QMetaType.Type.Char32?10 -QtCore.QMetaType.Type.ULong?10 -QtCore.QMetaType.Type.UShort?10 -QtCore.QMetaType.Type.UChar?10 -QtCore.QMetaType.Type.Float?10 -QtCore.QMetaType.Type.Float16?10 -QtCore.QMetaType.Type.QObjectStar?10 -QtCore.QMetaType.Type.QMatrix4x4?10 -QtCore.QMetaType.Type.QVector2D?10 -QtCore.QMetaType.Type.QVector3D?10 -QtCore.QMetaType.Type.QVector4D?10 -QtCore.QMetaType.Type.QQuaternion?10 -QtCore.QMetaType.Type.QEasingCurve?10 -QtCore.QMetaType.Type.QVariant?10 -QtCore.QMetaType.Type.QUuid?10 -QtCore.QMetaType.Type.QModelIndex?10 -QtCore.QMetaType.Type.QPolygonF?10 -QtCore.QMetaType.Type.SChar?10 -QtCore.QMetaType.Type.QRegularExpression?10 -QtCore.QMetaType.Type.QJsonValue?10 -QtCore.QMetaType.Type.QJsonObject?10 -QtCore.QMetaType.Type.QJsonArray?10 -QtCore.QMetaType.Type.QJsonDocument?10 -QtCore.QMetaType.Type.QByteArrayList?10 -QtCore.QMetaType.Type.QPersistentModelIndex?10 -QtCore.QMetaType.Type.QCborSimpleType?10 -QtCore.QMetaType.Type.QCborValue?10 -QtCore.QMetaType.Type.QCborArray?10 -QtCore.QMetaType.Type.QCborMap?10 -QtCore.QMetaType.Type.QColorSpace?10 -QtCore.QMetaType.Type.QVariantPair?10 -QtCore.QMetaType.Type.User?10 -QtCore.QMetaType?1() -QtCore.QMetaType.__init__?1(self) -QtCore.QMetaType?1(int) -QtCore.QMetaType.__init__?1(self, int) -QtCore.QMetaType.isRegistered?4(int) -> bool -QtCore.QMetaType.sizeOf?4() -> int -QtCore.QMetaType.flags?4() -> unknown-type -QtCore.QMetaType.isValid?4() -> bool -QtCore.QMetaType.isRegistered?4() -> bool -QtCore.QMetaType.id?4() -> int -QtCore.QMetaType.hasRegisteredDataStreamOperators?4() -> bool -QtCore.QMetaType.hasRegisteredDebugStreamOperator?4() -> bool -QtCore.QMetaType.name?4() -> bytes -QtCore.QMetaType.alignOf?4() -> int -QtCore.QMetaType.isEqualityComparable?4() -> bool -QtCore.QMetaType.isOrdered?4() -> bool -QtCore.QMetaType.fromName?4(QByteArrayView) -> QMetaType -QtCore.QMetaType.canConvert?4(QMetaType, QMetaType) -> bool -QtCore.QMetaType.canView?4(QMetaType, QMetaType) -> bool -QtCore.QMetaType.registerType?4() -QtCore.QMetaType.isDefaultConstructible?4() -> bool -QtCore.QMetaType.isCopyConstructible?4() -> bool -QtCore.QMetaType.isMoveConstructible?4() -> bool -QtCore.QMetaType.isDestructible?4() -> bool -QtCore.QMetaType.underlyingType?4() -> QMetaType -QtCore.QMimeData?1() -QtCore.QMimeData.__init__?1(self) -QtCore.QMimeData.urls?4() -> unknown-type -QtCore.QMimeData.setUrls?4(unknown-type) -QtCore.QMimeData.hasUrls?4() -> bool -QtCore.QMimeData.text?4() -> QString -QtCore.QMimeData.setText?4(QString) -QtCore.QMimeData.hasText?4() -> bool -QtCore.QMimeData.html?4() -> QString -QtCore.QMimeData.setHtml?4(QString) -QtCore.QMimeData.hasHtml?4() -> bool -QtCore.QMimeData.imageData?4() -> QVariant -QtCore.QMimeData.setImageData?4(QVariant) -QtCore.QMimeData.hasImage?4() -> bool -QtCore.QMimeData.colorData?4() -> QVariant -QtCore.QMimeData.setColorData?4(QVariant) -QtCore.QMimeData.hasColor?4() -> bool -QtCore.QMimeData.data?4(QString) -> QByteArray -QtCore.QMimeData.setData?4(QString, QByteArray) -QtCore.QMimeData.hasFormat?4(QString) -> bool -QtCore.QMimeData.formats?4() -> QStringList -QtCore.QMimeData.clear?4() -QtCore.QMimeData.removeFormat?4(QString) -QtCore.QMimeData.retrieveData?4(QString, QMetaType) -> QVariant -QtCore.QMimeDatabase.MatchMode?10 -QtCore.QMimeDatabase.MatchMode.MatchDefault?10 -QtCore.QMimeDatabase.MatchMode.MatchExtension?10 -QtCore.QMimeDatabase.MatchMode.MatchContent?10 -QtCore.QMimeDatabase?1() -QtCore.QMimeDatabase.__init__?1(self) -QtCore.QMimeDatabase.mimeTypeForName?4(QString) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForFile?4(QString, QMimeDatabase.MatchMode mode=QMimeDatabase.MatchDefault) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForFile?4(QFileInfo, QMimeDatabase.MatchMode mode=QMimeDatabase.MatchDefault) -> QMimeType -QtCore.QMimeDatabase.mimeTypesForFileName?4(QString) -> unknown-type -QtCore.QMimeDatabase.mimeTypeForData?4(QByteArray) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForData?4(QIODevice) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForUrl?4(QUrl) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForFileNameAndData?4(QString, QIODevice) -> QMimeType -QtCore.QMimeDatabase.mimeTypeForFileNameAndData?4(QString, QByteArray) -> QMimeType -QtCore.QMimeDatabase.suffixForFileName?4(QString) -> QString -QtCore.QMimeDatabase.allMimeTypes?4() -> unknown-type -QtCore.QMimeType?1() -QtCore.QMimeType.__init__?1(self) -QtCore.QMimeType?1(QMimeType) -QtCore.QMimeType.__init__?1(self, QMimeType) -QtCore.QMimeType.swap?4(QMimeType) -QtCore.QMimeType.isValid?4() -> bool -QtCore.QMimeType.isDefault?4() -> bool -QtCore.QMimeType.name?4() -> QString -QtCore.QMimeType.comment?4() -> QString -QtCore.QMimeType.genericIconName?4() -> QString -QtCore.QMimeType.iconName?4() -> QString -QtCore.QMimeType.globPatterns?4() -> QStringList -QtCore.QMimeType.parentMimeTypes?4() -> QStringList -QtCore.QMimeType.allAncestors?4() -> QStringList -QtCore.QMimeType.aliases?4() -> QStringList -QtCore.QMimeType.suffixes?4() -> QStringList -QtCore.QMimeType.preferredSuffix?4() -> QString -QtCore.QMimeType.inherits?4(QString) -> bool -QtCore.QMimeType.filterString?4() -> QString -QtCore.QMutex?1() -QtCore.QMutex.__init__?1(self) -QtCore.QMutex.lock?4() -QtCore.QMutex.tryLock?4() -> bool -QtCore.QMutex.unlock?4() -QtCore.QMutex.tryLock?4(QDeadlineTimer) -> bool -QtCore.QMutex.tryLock?4(int) -> bool -QtCore.QRecursiveMutex?1() -QtCore.QRecursiveMutex.__init__?1(self) -QtCore.QRecursiveMutex.lock?4() -QtCore.QRecursiveMutex.tryLock?4(QDeadlineTimer) -> bool -QtCore.QRecursiveMutex.tryLock?4(int timeout=0) -> bool -QtCore.QRecursiveMutex.unlock?4() -QtCore.QSignalBlocker?1(QObject) -QtCore.QSignalBlocker.__init__?1(self, QObject) -QtCore.QSignalBlocker.dismiss?4() -QtCore.QSignalBlocker.reblock?4() -QtCore.QSignalBlocker.unblock?4() -QtCore.QSignalBlocker.__enter__?4() -> Any -QtCore.QSignalBlocker.__exit__?4(Any, Any, Any) -QtCore.QObjectCleanupHandler?1() -QtCore.QObjectCleanupHandler.__init__?1(self) -QtCore.QObjectCleanupHandler.add?4(QObject) -> QObject -QtCore.QObjectCleanupHandler.remove?4(QObject) -QtCore.QObjectCleanupHandler.isEmpty?4() -> bool -QtCore.QObjectCleanupHandler.clear?4() -QtCore.QMetaObject?1() -QtCore.QMetaObject.__init__?1(self) -QtCore.QMetaObject?1(QMetaObject) -QtCore.QMetaObject.__init__?1(self, QMetaObject) -QtCore.QMetaObject.metaType?4() -> QMetaType -QtCore.QMetaObject.className?4() -> str -QtCore.QMetaObject.superClass?4() -> QMetaObject -QtCore.QMetaObject.userProperty?4() -> QMetaProperty -QtCore.QMetaObject.methodOffset?4() -> int -QtCore.QMetaObject.enumeratorOffset?4() -> int -QtCore.QMetaObject.propertyOffset?4() -> int -QtCore.QMetaObject.classInfoOffset?4() -> int -QtCore.QMetaObject.methodCount?4() -> int -QtCore.QMetaObject.enumeratorCount?4() -> int -QtCore.QMetaObject.propertyCount?4() -> int -QtCore.QMetaObject.classInfoCount?4() -> int -QtCore.QMetaObject.indexOfMethod?4(str) -> int -QtCore.QMetaObject.indexOfSignal?4(str) -> int -QtCore.QMetaObject.indexOfSlot?4(str) -> int -QtCore.QMetaObject.indexOfEnumerator?4(str) -> int -QtCore.QMetaObject.indexOfProperty?4(str) -> int -QtCore.QMetaObject.indexOfClassInfo?4(str) -> int -QtCore.QMetaObject.method?4(int) -> QMetaMethod -QtCore.QMetaObject.enumerator?4(int) -> QMetaEnum -QtCore.QMetaObject.property?4(int) -> QMetaProperty -QtCore.QMetaObject.classInfo?4(int) -> QMetaClassInfo -QtCore.QMetaObject.checkConnectArgs?4(str, str) -> bool -QtCore.QMetaObject.connectSlotsByName?4(QObject) -QtCore.QMetaObject.normalizedSignature?4(str) -> QByteArray -QtCore.QMetaObject.normalizedType?4(str) -> QByteArray -QtCore.QMetaObject.invokeMethod?4(QObject, str, Qt.ConnectionType, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaObject.invokeMethod?4(QObject, str, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaObject.invokeMethod?4(QObject, str, Qt.ConnectionType, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaObject.invokeMethod?4(QObject, str, QGenericArgument value0=QGenericArgument(nullptr), QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> Any -QtCore.QMetaObject.newInstance?4(QGenericArgument, QGenericArgument value1=QGenericArgument(), QGenericArgument value2=QGenericArgument(), QGenericArgument value3=QGenericArgument(), QGenericArgument value4=QGenericArgument(), QGenericArgument value5=QGenericArgument(), QGenericArgument value6=QGenericArgument(), QGenericArgument value7=QGenericArgument(), QGenericArgument value8=QGenericArgument(), QGenericArgument value9=QGenericArgument()) -> QObject -QtCore.QMetaObject.constructorCount?4() -> int -QtCore.QMetaObject.indexOfConstructor?4(str) -> int -QtCore.QMetaObject.constructor?4(int) -> QMetaMethod -QtCore.QMetaObject.checkConnectArgs?4(QMetaMethod, QMetaMethod) -> bool -QtCore.QMetaObject.inherits?4(QMetaObject) -> bool -QtCore.QMetaObject.Connection?1() -QtCore.QMetaObject.Connection.__init__?1(self) -QtCore.QMetaObject.Connection?1(QMetaObject.Connection) -QtCore.QMetaObject.Connection.__init__?1(self, QMetaObject.Connection) -QtCore.QMetaObject.Connection.swap?4(QMetaObject.Connection) -QtCore.QOperatingSystemVersionBase?1() -QtCore.QOperatingSystemVersionBase.__init__?1(self) -QtCore.QOperatingSystemVersionBase?1(QOperatingSystemVersionBase) -QtCore.QOperatingSystemVersionBase.__init__?1(self, QOperatingSystemVersionBase) -QtCore.QOperatingSystemVersionBase.version?4() -> QVersionNumber -QtCore.QOperatingSystemVersionBase.majorVersion?4() -> int -QtCore.QOperatingSystemVersionBase.minorVersion?4() -> int -QtCore.QOperatingSystemVersionBase.microVersion?4() -> int -QtCore.QOperatingSystemVersionBase.segmentCount?4() -> int -QtCore.QOperatingSystemVersionBase.name?4() -> QString -QtCore.QOperatingSystemVersion.OSType?10 -QtCore.QOperatingSystemVersion.OSType.Unknown?10 -QtCore.QOperatingSystemVersion.OSType.Windows?10 -QtCore.QOperatingSystemVersion.OSType.MacOS?10 -QtCore.QOperatingSystemVersion.OSType.IOS?10 -QtCore.QOperatingSystemVersion.OSType.TvOS?10 -QtCore.QOperatingSystemVersion.OSType.WatchOS?10 -QtCore.QOperatingSystemVersion.OSType.Android?10 -QtCore.QOperatingSystemVersion.Android10?7 -QtCore.QOperatingSystemVersion.Android11?7 -QtCore.QOperatingSystemVersion.Android12?7 -QtCore.QOperatingSystemVersion.Android12L?7 -QtCore.QOperatingSystemVersion.Android13?7 -QtCore.QOperatingSystemVersion.AndroidJellyBean?7 -QtCore.QOperatingSystemVersion.AndroidJellyBean_MR1?7 -QtCore.QOperatingSystemVersion.AndroidJellyBean_MR2?7 -QtCore.QOperatingSystemVersion.AndroidKitKat?7 -QtCore.QOperatingSystemVersion.AndroidLollipop?7 -QtCore.QOperatingSystemVersion.AndroidLollipop_MR1?7 -QtCore.QOperatingSystemVersion.AndroidMarshmallow?7 -QtCore.QOperatingSystemVersion.AndroidNougat?7 -QtCore.QOperatingSystemVersion.AndroidNougat_MR1?7 -QtCore.QOperatingSystemVersion.AndroidOreo?7 -QtCore.QOperatingSystemVersion.AndroidOreo_MR1?7 -QtCore.QOperatingSystemVersion.AndroidPie?7 -QtCore.QOperatingSystemVersion.MacOSBigSur?7 -QtCore.QOperatingSystemVersion.MacOSCatalina?7 -QtCore.QOperatingSystemVersion.MacOSHighSierra?7 -QtCore.QOperatingSystemVersion.MacOSMojave?7 -QtCore.QOperatingSystemVersion.MacOSMonterey?7 -QtCore.QOperatingSystemVersion.MacOSSierra?7 -QtCore.QOperatingSystemVersion.MacOSSonoma?7 -QtCore.QOperatingSystemVersion.MacOSVentura?7 -QtCore.QOperatingSystemVersion.OSXElCapitan?7 -QtCore.QOperatingSystemVersion.OSXMavericks?7 -QtCore.QOperatingSystemVersion.OSXYosemite?7 -QtCore.QOperatingSystemVersion.Windows10?7 -QtCore.QOperatingSystemVersion.Windows10_1809?7 -QtCore.QOperatingSystemVersion.Windows10_1903?7 -QtCore.QOperatingSystemVersion.Windows10_1909?7 -QtCore.QOperatingSystemVersion.Windows10_2004?7 -QtCore.QOperatingSystemVersion.Windows10_20H2?7 -QtCore.QOperatingSystemVersion.Windows10_21H1?7 -QtCore.QOperatingSystemVersion.Windows10_21H2?7 -QtCore.QOperatingSystemVersion.Windows10_22H2?7 -QtCore.QOperatingSystemVersion.Windows11?7 -QtCore.QOperatingSystemVersion.Windows11_21H2?7 -QtCore.QOperatingSystemVersion.Windows11_22H2?7 -QtCore.QOperatingSystemVersion.Windows7?7 -QtCore.QOperatingSystemVersion.Windows8?7 -QtCore.QOperatingSystemVersion.Windows8_1?7 -QtCore.QOperatingSystemVersion?1(QOperatingSystemVersion.OSType, int, int vminor=-1, int vmicro=-1) -QtCore.QOperatingSystemVersion.__init__?1(self, QOperatingSystemVersion.OSType, int, int vminor=-1, int vmicro=-1) -QtCore.QOperatingSystemVersion?1(QOperatingSystemVersion) -QtCore.QOperatingSystemVersion.__init__?1(self, QOperatingSystemVersion) -QtCore.QOperatingSystemVersion.current?4() -> QOperatingSystemVersion -QtCore.QOperatingSystemVersion.currentType?4() -> QOperatingSystemVersion.OSType -QtCore.QOperatingSystemVersion.type?4() -> QOperatingSystemVersion.OSType -QtCore.QParallelAnimationGroup?1(QObject parent=None) -QtCore.QParallelAnimationGroup.__init__?1(self, QObject parent=None) -QtCore.QParallelAnimationGroup.duration?4() -> int -QtCore.QParallelAnimationGroup.event?4(QEvent) -> bool -QtCore.QParallelAnimationGroup.updateCurrentTime?4(int) -QtCore.QParallelAnimationGroup.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QParallelAnimationGroup.updateDirection?4(QAbstractAnimation.Direction) -QtCore.QPauseAnimation?1(QObject parent=None) -QtCore.QPauseAnimation.__init__?1(self, QObject parent=None) -QtCore.QPauseAnimation?1(int, QObject parent=None) -QtCore.QPauseAnimation.__init__?1(self, int, QObject parent=None) -QtCore.QPauseAnimation.duration?4() -> int -QtCore.QPauseAnimation.setDuration?4(int) -QtCore.QPauseAnimation.event?4(QEvent) -> bool -QtCore.QPauseAnimation.updateCurrentTime?4(int) -QtCore.QPermission?1() -QtCore.QPermission.__init__?1(self) -QtCore.QPermission?1(QPermission) -QtCore.QPermission.__init__?1(self, QPermission) -QtCore.QPermission.status?4() -> Qt.PermissionStatus -QtCore.QPermission.type?4() -> QMetaType -QtCore.QPermission.value?4() -> Any -QtCore.QLocationPermission.Availability?10 -QtCore.QLocationPermission.Availability.WhenInUse?10 -QtCore.QLocationPermission.Availability.Always?10 -QtCore.QLocationPermission.Accuracy?10 -QtCore.QLocationPermission.Accuracy.Approximate?10 -QtCore.QLocationPermission.Accuracy.Precise?10 -QtCore.QLocationPermission?1() -QtCore.QLocationPermission.__init__?1(self) -QtCore.QLocationPermission?1(QLocationPermission) -QtCore.QLocationPermission.__init__?1(self, QLocationPermission) -QtCore.QLocationPermission.setAccuracy?4(QLocationPermission.Accuracy) -QtCore.QLocationPermission.accuracy?4() -> QLocationPermission.Accuracy -QtCore.QLocationPermission.setAvailability?4(QLocationPermission.Availability) -QtCore.QLocationPermission.availability?4() -> QLocationPermission.Availability -QtCore.QCalendarPermission.AccessMode?10 -QtCore.QCalendarPermission.AccessMode.ReadOnly?10 -QtCore.QCalendarPermission.AccessMode.ReadWrite?10 -QtCore.QCalendarPermission?1() -QtCore.QCalendarPermission.__init__?1(self) -QtCore.QCalendarPermission?1(QCalendarPermission) -QtCore.QCalendarPermission.__init__?1(self, QCalendarPermission) -QtCore.QCalendarPermission.setAccessMode?4(QCalendarPermission.AccessMode) -QtCore.QCalendarPermission.accessMode?4() -> QCalendarPermission.AccessMode -QtCore.QContactsPermission.AccessMode?10 -QtCore.QContactsPermission.AccessMode.ReadOnly?10 -QtCore.QContactsPermission.AccessMode.ReadWrite?10 -QtCore.QContactsPermission?1() -QtCore.QContactsPermission.__init__?1(self) -QtCore.QContactsPermission?1(QContactsPermission) -QtCore.QContactsPermission.__init__?1(self, QContactsPermission) -QtCore.QContactsPermission.setAccessMode?4(QContactsPermission.AccessMode) -QtCore.QContactsPermission.accessMode?4() -> QContactsPermission.AccessMode -QtCore.QCameraPermission?1() -QtCore.QCameraPermission.__init__?1(self) -QtCore.QCameraPermission?1(QCameraPermission) -QtCore.QCameraPermission.__init__?1(self, QCameraPermission) -QtCore.QMicrophonePermission?1() -QtCore.QMicrophonePermission.__init__?1(self) -QtCore.QMicrophonePermission?1(QMicrophonePermission) -QtCore.QMicrophonePermission.__init__?1(self, QMicrophonePermission) -QtCore.QBluetoothPermission.CommunicationMode?10 -QtCore.QBluetoothPermission.CommunicationMode.Access?10 -QtCore.QBluetoothPermission.CommunicationMode.Advertise?10 -QtCore.QBluetoothPermission.CommunicationMode.Default?10 -QtCore.QBluetoothPermission?1() -QtCore.QBluetoothPermission.__init__?1(self) -QtCore.QBluetoothPermission?1(QBluetoothPermission) -QtCore.QBluetoothPermission.__init__?1(self, QBluetoothPermission) -QtCore.QBluetoothPermission.setCommunicationModes?4(unknown-type) -QtCore.QBluetoothPermission.communicationModes?4() -> unknown-type -QtCore.QVariantAnimation?1(QObject parent=None) -QtCore.QVariantAnimation.__init__?1(self, QObject parent=None) -QtCore.QVariantAnimation.startValue?4() -> QVariant -QtCore.QVariantAnimation.setStartValue?4(QVariant) -QtCore.QVariantAnimation.endValue?4() -> QVariant -QtCore.QVariantAnimation.setEndValue?4(QVariant) -QtCore.QVariantAnimation.keyValueAt?4(float) -> QVariant -QtCore.QVariantAnimation.setKeyValueAt?4(float, QVariant) -QtCore.QVariantAnimation.keyValues?4() -> unknown-type -QtCore.QVariantAnimation.setKeyValues?4(unknown-type) -QtCore.QVariantAnimation.currentValue?4() -> QVariant -QtCore.QVariantAnimation.duration?4() -> int -QtCore.QVariantAnimation.setDuration?4(int) -QtCore.QVariantAnimation.easingCurve?4() -> QEasingCurve -QtCore.QVariantAnimation.setEasingCurve?4(QEasingCurve) -QtCore.QVariantAnimation.valueChanged?4(QVariant) -QtCore.QVariantAnimation.event?4(QEvent) -> bool -QtCore.QVariantAnimation.updateCurrentTime?4(int) -QtCore.QVariantAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QVariantAnimation.updateCurrentValue?4(QVariant) -QtCore.QVariantAnimation.interpolated?4(QVariant, QVariant, float) -> QVariant -QtCore.QPropertyAnimation?1(QObject parent=None) -QtCore.QPropertyAnimation.__init__?1(self, QObject parent=None) -QtCore.QPropertyAnimation?1(QObject, QByteArray, QObject parent=None) -QtCore.QPropertyAnimation.__init__?1(self, QObject, QByteArray, QObject parent=None) -QtCore.QPropertyAnimation.targetObject?4() -> QObject -QtCore.QPropertyAnimation.setTargetObject?4(QObject) -QtCore.QPropertyAnimation.propertyName?4() -> QByteArray -QtCore.QPropertyAnimation.setPropertyName?4(QByteArray) -QtCore.QPropertyAnimation.event?4(QEvent) -> bool -QtCore.QPropertyAnimation.updateCurrentValue?4(QVariant) -QtCore.QPropertyAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QPluginLoader?1(QObject parent=None) -QtCore.QPluginLoader.__init__?1(self, QObject parent=None) -QtCore.QPluginLoader?1(QString, QObject parent=None) -QtCore.QPluginLoader.__init__?1(self, QString, QObject parent=None) -QtCore.QPluginLoader.instance?4() -> QObject -QtCore.QPluginLoader.staticInstances?4() -> unknown-type -QtCore.QPluginLoader.load?4() -> bool -QtCore.QPluginLoader.unload?4() -> bool -QtCore.QPluginLoader.isLoaded?4() -> bool -QtCore.QPluginLoader.setFileName?4(QString) -QtCore.QPluginLoader.fileName?4() -> QString -QtCore.QPluginLoader.errorString?4() -> QString -QtCore.QPluginLoader.setLoadHints?4(unknown-type) -QtCore.QPluginLoader.loadHints?4() -> unknown-type -QtCore.QPoint?1() -QtCore.QPoint.__init__?1(self) -QtCore.QPoint?1(int, int) -QtCore.QPoint.__init__?1(self, int, int) -QtCore.QPoint?1(QPoint) -QtCore.QPoint.__init__?1(self, QPoint) -QtCore.QPoint.manhattanLength?4() -> int -QtCore.QPoint.isNull?4() -> bool -QtCore.QPoint.x?4() -> int -QtCore.QPoint.y?4() -> int -QtCore.QPoint.setX?4(int) -QtCore.QPoint.setY?4(int) -QtCore.QPoint.dotProduct?4(QPoint, QPoint) -> int -QtCore.QPoint.transposed?4() -> QPoint -QtCore.QPoint.toPointF?4() -> QPointF -QtCore.QPointF?1() -QtCore.QPointF.__init__?1(self) -QtCore.QPointF?1(float, float) -QtCore.QPointF.__init__?1(self, float, float) -QtCore.QPointF?1(QPoint) -QtCore.QPointF.__init__?1(self, QPoint) -QtCore.QPointF?1(QPointF) -QtCore.QPointF.__init__?1(self, QPointF) -QtCore.QPointF.isNull?4() -> bool -QtCore.QPointF.x?4() -> float -QtCore.QPointF.y?4() -> float -QtCore.QPointF.setX?4(float) -QtCore.QPointF.setY?4(float) -QtCore.QPointF.toPoint?4() -> QPoint -QtCore.QPointF.manhattanLength?4() -> float -QtCore.QPointF.dotProduct?4(QPointF, QPointF) -> float -QtCore.QPointF.transposed?4() -> QPointF -QtCore.QProcess.UnixProcessFlag?10 -QtCore.QProcess.UnixProcessFlag.ResetSignalHandlers?10 -QtCore.QProcess.UnixProcessFlag.IgnoreSigPipe?10 -QtCore.QProcess.UnixProcessFlag.CloseFileDescriptors?10 -QtCore.QProcess.UnixProcessFlag.UseVFork?10 -QtCore.QProcess.UnixProcessFlag.CreateNewSession?10 -QtCore.QProcess.UnixProcessFlag.DisconnectControllingTerminal?10 -QtCore.QProcess.UnixProcessFlag.ResetIds?10 -QtCore.QProcess.InputChannelMode?10 -QtCore.QProcess.InputChannelMode.ManagedInputChannel?10 -QtCore.QProcess.InputChannelMode.ForwardedInputChannel?10 -QtCore.QProcess.ProcessChannelMode?10 -QtCore.QProcess.ProcessChannelMode.SeparateChannels?10 -QtCore.QProcess.ProcessChannelMode.MergedChannels?10 -QtCore.QProcess.ProcessChannelMode.ForwardedChannels?10 -QtCore.QProcess.ProcessChannelMode.ForwardedOutputChannel?10 -QtCore.QProcess.ProcessChannelMode.ForwardedErrorChannel?10 -QtCore.QProcess.ProcessChannel?10 -QtCore.QProcess.ProcessChannel.StandardOutput?10 -QtCore.QProcess.ProcessChannel.StandardError?10 -QtCore.QProcess.ProcessState?10 -QtCore.QProcess.ProcessState.NotRunning?10 -QtCore.QProcess.ProcessState.Starting?10 -QtCore.QProcess.ProcessState.Running?10 -QtCore.QProcess.ProcessError?10 -QtCore.QProcess.ProcessError.FailedToStart?10 -QtCore.QProcess.ProcessError.Crashed?10 -QtCore.QProcess.ProcessError.Timedout?10 -QtCore.QProcess.ProcessError.ReadError?10 -QtCore.QProcess.ProcessError.WriteError?10 -QtCore.QProcess.ProcessError.UnknownError?10 -QtCore.QProcess.ExitStatus?10 -QtCore.QProcess.ExitStatus.NormalExit?10 -QtCore.QProcess.ExitStatus.CrashExit?10 -QtCore.QProcess?1(QObject parent=None) -QtCore.QProcess.__init__?1(self, QObject parent=None) -QtCore.QProcess.start?4(QString, QStringList arguments=[], unknown-type mode=QIODeviceBase.ReadWrite) -QtCore.QProcess.start?4(unknown-type mode=QIODeviceBase.ReadWrite) -QtCore.QProcess.startCommand?4(QString, unknown-type mode=QIODeviceBase.ReadWrite) -QtCore.QProcess.readChannel?4() -> QProcess.ProcessChannel -QtCore.QProcess.setReadChannel?4(QProcess.ProcessChannel) -QtCore.QProcess.closeReadChannel?4(QProcess.ProcessChannel) -QtCore.QProcess.closeWriteChannel?4() -QtCore.QProcess.workingDirectory?4() -> QString -QtCore.QProcess.setWorkingDirectory?4(QString) -QtCore.QProcess.error?4() -> QProcess.ProcessError -QtCore.QProcess.state?4() -> QProcess.ProcessState -QtCore.QProcess.waitForStarted?4(int msecs=30000) -> bool -QtCore.QProcess.waitForReadyRead?4(int msecs=30000) -> bool -QtCore.QProcess.waitForBytesWritten?4(int msecs=30000) -> bool -QtCore.QProcess.waitForFinished?4(int msecs=30000) -> bool -QtCore.QProcess.readAllStandardOutput?4() -> QByteArray -QtCore.QProcess.readAllStandardError?4() -> QByteArray -QtCore.QProcess.exitCode?4() -> int -QtCore.QProcess.exitStatus?4() -> QProcess.ExitStatus -QtCore.QProcess.bytesToWrite?4() -> int -QtCore.QProcess.isSequential?4() -> bool -QtCore.QProcess.close?4() -QtCore.QProcess.execute?4(QString, QStringList arguments=[]) -> int -QtCore.QProcess.startDetached?4(QString, QStringList arguments=[], QString workingDirectory='') -> (bool, int) -QtCore.QProcess.startDetached?4() -> (bool, int) -QtCore.QProcess.systemEnvironment?4() -> QStringList -QtCore.QProcess.processChannelMode?4() -> QProcess.ProcessChannelMode -QtCore.QProcess.setProcessChannelMode?4(QProcess.ProcessChannelMode) -QtCore.QProcess.setStandardInputFile?4(QString) -QtCore.QProcess.setStandardOutputFile?4(QString, unknown-type mode=QIODeviceBase.Truncate) -QtCore.QProcess.setStandardErrorFile?4(QString, unknown-type mode=QIODeviceBase.Truncate) -QtCore.QProcess.setStandardOutputProcess?4(QProcess) -QtCore.QProcess.terminate?4() -QtCore.QProcess.kill?4() -QtCore.QProcess.started?4() -QtCore.QProcess.finished?4(int, QProcess.ExitStatus exitStatus=QProcess.NormalExit) -QtCore.QProcess.stateChanged?4(QProcess.ProcessState) -QtCore.QProcess.readyReadStandardOutput?4() -QtCore.QProcess.readyReadStandardError?4() -QtCore.QProcess.errorOccurred?4(QProcess.ProcessError) -QtCore.QProcess.setProcessState?4(QProcess.ProcessState) -QtCore.QProcess.readData?4(int) -> Any -QtCore.QProcess.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QProcess.setProcessEnvironment?4(QProcessEnvironment) -QtCore.QProcess.processEnvironment?4() -> QProcessEnvironment -QtCore.QProcess.program?4() -> QString -QtCore.QProcess.setProgram?4(QString) -QtCore.QProcess.arguments?4() -> QStringList -QtCore.QProcess.setArguments?4(QStringList) -QtCore.QProcess.open?4(unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtCore.QProcess.inputChannelMode?4() -> QProcess.InputChannelMode -QtCore.QProcess.setInputChannelMode?4(QProcess.InputChannelMode) -QtCore.QProcess.nullDevice?4() -> QString -QtCore.QProcess.processId?4() -> int -QtCore.QProcess.unixProcessParameters?4() -> QProcess.UnixProcessParameters -QtCore.QProcess.setUnixProcessParameters?4(unknown-type) -QtCore.QProcess.setUnixProcessParameters?4(QProcess.UnixProcessParameters) -QtCore.QProcess.UnixProcessParameters.flags?7 -QtCore.QProcess.UnixProcessParameters.lowestFileDescriptorToClose?7 -QtCore.QProcess.UnixProcessParameters?1() -QtCore.QProcess.UnixProcessParameters.__init__?1(self) -QtCore.QProcess.UnixProcessParameters?1(QProcess.UnixProcessParameters) -QtCore.QProcess.UnixProcessParameters.__init__?1(self, QProcess.UnixProcessParameters) -QtCore.QProcessEnvironment.Initialization?10 -QtCore.QProcessEnvironment.Initialization.InheritFromParent?10 -QtCore.QProcessEnvironment?1(QProcessEnvironment.Initialization) -QtCore.QProcessEnvironment.__init__?1(self, QProcessEnvironment.Initialization) -QtCore.QProcessEnvironment?1() -QtCore.QProcessEnvironment.__init__?1(self) -QtCore.QProcessEnvironment?1(QProcessEnvironment) -QtCore.QProcessEnvironment.__init__?1(self, QProcessEnvironment) -QtCore.QProcessEnvironment.isEmpty?4() -> bool -QtCore.QProcessEnvironment.clear?4() -QtCore.QProcessEnvironment.contains?4(QString) -> bool -QtCore.QProcessEnvironment.insert?4(QString, QString) -QtCore.QProcessEnvironment.insert?4(QProcessEnvironment) -QtCore.QProcessEnvironment.remove?4(QString) -QtCore.QProcessEnvironment.value?4(QString, QString defaultValue='') -> QString -QtCore.QProcessEnvironment.toStringList?4() -> QStringList -QtCore.QProcessEnvironment.systemEnvironment?4() -> QProcessEnvironment -QtCore.QProcessEnvironment.keys?4() -> QStringList -QtCore.QProcessEnvironment.swap?4(QProcessEnvironment) -QtCore.QProcessEnvironment.inheritsFromParent?4() -> bool -QtCore.QRandomGenerator?1(int seed=1) -QtCore.QRandomGenerator.__init__?1(self, int seed=1) -QtCore.QRandomGenerator?1(QRandomGenerator) -QtCore.QRandomGenerator.__init__?1(self, QRandomGenerator) -QtCore.QRandomGenerator.generate?4() -> int -QtCore.QRandomGenerator.generate64?4() -> int -QtCore.QRandomGenerator.generateDouble?4() -> float -QtCore.QRandomGenerator.bounded?4(float) -> float -QtCore.QRandomGenerator.bounded?4(int, int) -> int -QtCore.QRandomGenerator.bounded?4(int) -> int -QtCore.QRandomGenerator.seed?4(int seed=1) -QtCore.QRandomGenerator.discard?4(int) -QtCore.QRandomGenerator.min?4() -> int -QtCore.QRandomGenerator.max?4() -> int -QtCore.QRandomGenerator.system?4() -> QRandomGenerator -QtCore.QRandomGenerator.global_?4() -> QRandomGenerator -QtCore.QRandomGenerator.securelySeeded?4() -> QRandomGenerator -QtCore.QReadWriteLock.RecursionMode?10 -QtCore.QReadWriteLock.RecursionMode.NonRecursive?10 -QtCore.QReadWriteLock.RecursionMode.Recursive?10 -QtCore.QReadWriteLock?1(QReadWriteLock.RecursionMode recursionMode=QReadWriteLock.NonRecursive) -QtCore.QReadWriteLock.__init__?1(self, QReadWriteLock.RecursionMode recursionMode=QReadWriteLock.NonRecursive) -QtCore.QReadWriteLock.lockForRead?4() -QtCore.QReadWriteLock.tryLockForRead?4(QDeadlineTimer timeout={}) -> bool -QtCore.QReadWriteLock.tryLockForRead?4(int) -> bool -QtCore.QReadWriteLock.lockForWrite?4() -QtCore.QReadWriteLock.tryLockForWrite?4(QDeadlineTimer timeout={}) -> bool -QtCore.QReadWriteLock.tryLockForWrite?4(int) -> bool -QtCore.QReadWriteLock.unlock?4() -QtCore.QReadLocker?1(QReadWriteLock) -QtCore.QReadLocker.__init__?1(self, QReadWriteLock) -QtCore.QReadLocker.unlock?4() -QtCore.QReadLocker.relock?4() -QtCore.QReadLocker.readWriteLock?4() -> QReadWriteLock -QtCore.QReadLocker.__enter__?4() -> Any -QtCore.QReadLocker.__exit__?4(Any, Any, Any) -QtCore.QWriteLocker?1(QReadWriteLock) -QtCore.QWriteLocker.__init__?1(self, QReadWriteLock) -QtCore.QWriteLocker.unlock?4() -QtCore.QWriteLocker.relock?4() -QtCore.QWriteLocker.readWriteLock?4() -> QReadWriteLock -QtCore.QWriteLocker.__enter__?4() -> Any -QtCore.QWriteLocker.__exit__?4(Any, Any, Any) -QtCore.QRect?1() -QtCore.QRect.__init__?1(self) -QtCore.QRect?1(int, int, int, int) -QtCore.QRect.__init__?1(self, int, int, int, int) -QtCore.QRect?1(QPoint, QPoint) -QtCore.QRect.__init__?1(self, QPoint, QPoint) -QtCore.QRect?1(QPoint, QSize) -QtCore.QRect.__init__?1(self, QPoint, QSize) -QtCore.QRect?1(QRect) -QtCore.QRect.__init__?1(self, QRect) -QtCore.QRect.normalized?4() -> QRect -QtCore.QRect.moveCenter?4(QPoint) -QtCore.QRect.contains?4(QPoint, bool proper=False) -> bool -QtCore.QRect.contains?4(QRect, bool proper=False) -> bool -QtCore.QRect.intersects?4(QRect) -> bool -QtCore.QRect.isNull?4() -> bool -QtCore.QRect.isEmpty?4() -> bool -QtCore.QRect.isValid?4() -> bool -QtCore.QRect.left?4() -> int -QtCore.QRect.top?4() -> int -QtCore.QRect.right?4() -> int -QtCore.QRect.bottom?4() -> int -QtCore.QRect.x?4() -> int -QtCore.QRect.y?4() -> int -QtCore.QRect.setLeft?4(int) -QtCore.QRect.setTop?4(int) -QtCore.QRect.setRight?4(int) -QtCore.QRect.setBottom?4(int) -QtCore.QRect.setTopLeft?4(QPoint) -QtCore.QRect.setBottomRight?4(QPoint) -QtCore.QRect.setTopRight?4(QPoint) -QtCore.QRect.setBottomLeft?4(QPoint) -QtCore.QRect.setX?4(int) -QtCore.QRect.setY?4(int) -QtCore.QRect.topLeft?4() -> QPoint -QtCore.QRect.bottomRight?4() -> QPoint -QtCore.QRect.topRight?4() -> QPoint -QtCore.QRect.bottomLeft?4() -> QPoint -QtCore.QRect.center?4() -> QPoint -QtCore.QRect.width?4() -> int -QtCore.QRect.height?4() -> int -QtCore.QRect.size?4() -> QSize -QtCore.QRect.translate?4(int, int) -QtCore.QRect.translate?4(QPoint) -QtCore.QRect.translated?4(int, int) -> QRect -QtCore.QRect.translated?4(QPoint) -> QRect -QtCore.QRect.moveTo?4(int, int) -QtCore.QRect.moveTo?4(QPoint) -QtCore.QRect.moveLeft?4(int) -QtCore.QRect.moveTop?4(int) -QtCore.QRect.moveRight?4(int) -QtCore.QRect.moveBottom?4(int) -QtCore.QRect.moveTopLeft?4(QPoint) -QtCore.QRect.moveBottomRight?4(QPoint) -QtCore.QRect.moveTopRight?4(QPoint) -QtCore.QRect.moveBottomLeft?4(QPoint) -QtCore.QRect.getRect?4() -> (int, int, int, int) -QtCore.QRect.setRect?4(int, int, int, int) -QtCore.QRect.getCoords?4() -> (int, int, int, int) -QtCore.QRect.setCoords?4(int, int, int, int) -QtCore.QRect.adjusted?4(int, int, int, int) -> QRect -QtCore.QRect.adjust?4(int, int, int, int) -QtCore.QRect.setWidth?4(int) -QtCore.QRect.setHeight?4(int) -QtCore.QRect.setSize?4(QSize) -QtCore.QRect.contains?4(int, int, bool) -> bool -QtCore.QRect.contains?4(int, int) -> bool -QtCore.QRect.intersected?4(QRect) -> QRect -QtCore.QRect.united?4(QRect) -> QRect -QtCore.QRect.marginsAdded?4(QMargins) -> QRect -QtCore.QRect.marginsRemoved?4(QMargins) -> QRect -QtCore.QRect.transposed?4() -> QRect -QtCore.QRect.span?4(QPoint, QPoint) -> QRect -QtCore.QRect.toRectF?4() -> QRectF -QtCore.QRectF?1() -QtCore.QRectF.__init__?1(self) -QtCore.QRectF?1(QPointF, QSizeF) -QtCore.QRectF.__init__?1(self, QPointF, QSizeF) -QtCore.QRectF?1(QPointF, QPointF) -QtCore.QRectF.__init__?1(self, QPointF, QPointF) -QtCore.QRectF?1(float, float, float, float) -QtCore.QRectF.__init__?1(self, float, float, float, float) -QtCore.QRectF?1(QRect) -QtCore.QRectF.__init__?1(self, QRect) -QtCore.QRectF?1(QRectF) -QtCore.QRectF.__init__?1(self, QRectF) -QtCore.QRectF.normalized?4() -> QRectF -QtCore.QRectF.left?4() -> float -QtCore.QRectF.top?4() -> float -QtCore.QRectF.right?4() -> float -QtCore.QRectF.bottom?4() -> float -QtCore.QRectF.setX?4(float) -QtCore.QRectF.setY?4(float) -QtCore.QRectF.topLeft?4() -> QPointF -QtCore.QRectF.bottomRight?4() -> QPointF -QtCore.QRectF.topRight?4() -> QPointF -QtCore.QRectF.bottomLeft?4() -> QPointF -QtCore.QRectF.contains?4(QPointF) -> bool -QtCore.QRectF.contains?4(QRectF) -> bool -QtCore.QRectF.intersects?4(QRectF) -> bool -QtCore.QRectF.isNull?4() -> bool -QtCore.QRectF.isEmpty?4() -> bool -QtCore.QRectF.isValid?4() -> bool -QtCore.QRectF.x?4() -> float -QtCore.QRectF.y?4() -> float -QtCore.QRectF.setLeft?4(float) -QtCore.QRectF.setRight?4(float) -QtCore.QRectF.setTop?4(float) -QtCore.QRectF.setBottom?4(float) -QtCore.QRectF.setTopLeft?4(QPointF) -QtCore.QRectF.setTopRight?4(QPointF) -QtCore.QRectF.setBottomLeft?4(QPointF) -QtCore.QRectF.setBottomRight?4(QPointF) -QtCore.QRectF.center?4() -> QPointF -QtCore.QRectF.moveLeft?4(float) -QtCore.QRectF.moveTop?4(float) -QtCore.QRectF.moveRight?4(float) -QtCore.QRectF.moveBottom?4(float) -QtCore.QRectF.moveTopLeft?4(QPointF) -QtCore.QRectF.moveTopRight?4(QPointF) -QtCore.QRectF.moveBottomLeft?4(QPointF) -QtCore.QRectF.moveBottomRight?4(QPointF) -QtCore.QRectF.moveCenter?4(QPointF) -QtCore.QRectF.width?4() -> float -QtCore.QRectF.height?4() -> float -QtCore.QRectF.size?4() -> QSizeF -QtCore.QRectF.translate?4(float, float) -QtCore.QRectF.translate?4(QPointF) -QtCore.QRectF.moveTo?4(float, float) -QtCore.QRectF.moveTo?4(QPointF) -QtCore.QRectF.translated?4(float, float) -> QRectF -QtCore.QRectF.translated?4(QPointF) -> QRectF -QtCore.QRectF.getRect?4() -> (float, float, float, float) -QtCore.QRectF.setRect?4(float, float, float, float) -QtCore.QRectF.getCoords?4() -> (float, float, float, float) -QtCore.QRectF.setCoords?4(float, float, float, float) -QtCore.QRectF.adjust?4(float, float, float, float) -QtCore.QRectF.adjusted?4(float, float, float, float) -> QRectF -QtCore.QRectF.setWidth?4(float) -QtCore.QRectF.setHeight?4(float) -QtCore.QRectF.setSize?4(QSizeF) -QtCore.QRectF.contains?4(float, float) -> bool -QtCore.QRectF.intersected?4(QRectF) -> QRectF -QtCore.QRectF.united?4(QRectF) -> QRectF -QtCore.QRectF.toAlignedRect?4() -> QRect -QtCore.QRectF.toRect?4() -> QRect -QtCore.QRectF.marginsAdded?4(QMarginsF) -> QRectF -QtCore.QRectF.marginsRemoved?4(QMarginsF) -> QRectF -QtCore.QRectF.transposed?4() -> QRectF -QtCore.QRegularExpression.WildcardConversionOption?10 -QtCore.QRegularExpression.WildcardConversionOption.DefaultWildcardConversion?10 -QtCore.QRegularExpression.WildcardConversionOption.UnanchoredWildcardConversion?10 -QtCore.QRegularExpression.WildcardConversionOption.NonPathWildcardConversion?10 -QtCore.QRegularExpression.MatchOption?10 -QtCore.QRegularExpression.MatchOption.NoMatchOption?10 -QtCore.QRegularExpression.MatchOption.AnchorAtOffsetMatchOption?10 -QtCore.QRegularExpression.MatchOption.DontCheckSubjectStringMatchOption?10 -QtCore.QRegularExpression.MatchType?10 -QtCore.QRegularExpression.MatchType.NormalMatch?10 -QtCore.QRegularExpression.MatchType.PartialPreferCompleteMatch?10 -QtCore.QRegularExpression.MatchType.PartialPreferFirstMatch?10 -QtCore.QRegularExpression.MatchType.NoMatch?10 -QtCore.QRegularExpression.PatternOption?10 -QtCore.QRegularExpression.PatternOption.NoPatternOption?10 -QtCore.QRegularExpression.PatternOption.CaseInsensitiveOption?10 -QtCore.QRegularExpression.PatternOption.DotMatchesEverythingOption?10 -QtCore.QRegularExpression.PatternOption.MultilineOption?10 -QtCore.QRegularExpression.PatternOption.ExtendedPatternSyntaxOption?10 -QtCore.QRegularExpression.PatternOption.InvertedGreedinessOption?10 -QtCore.QRegularExpression.PatternOption.DontCaptureOption?10 -QtCore.QRegularExpression.PatternOption.UseUnicodePropertiesOption?10 -QtCore.QRegularExpression?1() -QtCore.QRegularExpression.__init__?1(self) -QtCore.QRegularExpression?1(QString, unknown-type options=QRegularExpression.NoPatternOption) -QtCore.QRegularExpression.__init__?1(self, QString, unknown-type options=QRegularExpression.NoPatternOption) -QtCore.QRegularExpression?1(QRegularExpression) -QtCore.QRegularExpression.__init__?1(self, QRegularExpression) -QtCore.QRegularExpression.patternOptions?4() -> unknown-type -QtCore.QRegularExpression.setPatternOptions?4(unknown-type) -QtCore.QRegularExpression.swap?4(QRegularExpression) -QtCore.QRegularExpression.pattern?4() -> QString -QtCore.QRegularExpression.setPattern?4(QString) -QtCore.QRegularExpression.isValid?4() -> bool -QtCore.QRegularExpression.patternErrorOffset?4() -> int -QtCore.QRegularExpression.errorString?4() -> QString -QtCore.QRegularExpression.captureCount?4() -> int -QtCore.QRegularExpression.match?4(QString, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, unknown-type matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatch -QtCore.QRegularExpression.matchView?4(QStringView, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, unknown-type matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatch -QtCore.QRegularExpression.globalMatch?4(QString, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, unknown-type matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatchIterator -QtCore.QRegularExpression.globalMatchView?4(QStringView, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, unknown-type matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatchIterator -QtCore.QRegularExpression.escape?4(QString) -> QString -QtCore.QRegularExpression.namedCaptureGroups?4() -> QStringList -QtCore.QRegularExpression.optimize?4() -QtCore.QRegularExpression.wildcardToRegularExpression?4(QStringView, unknown-type options=QRegularExpression.DefaultWildcardConversion) -> QString -QtCore.QRegularExpression.anchoredPattern?4(QString) -> QString -QtCore.QRegularExpression.fromWildcard?4(QStringView, Qt.CaseSensitivity cs=Qt.CaseInsensitive, unknown-type options=QRegularExpression.DefaultWildcardConversion) -> QRegularExpression -QtCore.QRegularExpressionMatch?1() -QtCore.QRegularExpressionMatch.__init__?1(self) -QtCore.QRegularExpressionMatch?1(QRegularExpressionMatch) -QtCore.QRegularExpressionMatch.__init__?1(self, QRegularExpressionMatch) -QtCore.QRegularExpressionMatch.swap?4(QRegularExpressionMatch) -QtCore.QRegularExpressionMatch.regularExpression?4() -> QRegularExpression -QtCore.QRegularExpressionMatch.matchType?4() -> QRegularExpression.MatchType -QtCore.QRegularExpressionMatch.matchOptions?4() -> unknown-type -QtCore.QRegularExpressionMatch.hasMatch?4() -> bool -QtCore.QRegularExpressionMatch.hasPartialMatch?4() -> bool -QtCore.QRegularExpressionMatch.isValid?4() -> bool -QtCore.QRegularExpressionMatch.lastCapturedIndex?4() -> int -QtCore.QRegularExpressionMatch.captured?4(int nth=0) -> QString -QtCore.QRegularExpressionMatch.captured?4(QString) -> QString -QtCore.QRegularExpressionMatch.capturedTexts?4() -> QStringList -QtCore.QRegularExpressionMatch.capturedStart?4(QStringView) -> int -QtCore.QRegularExpressionMatch.capturedStart?4(int nth=0) -> int -QtCore.QRegularExpressionMatch.capturedLength?4(QStringView) -> int -QtCore.QRegularExpressionMatch.capturedLength?4(int nth=0) -> int -QtCore.QRegularExpressionMatch.capturedEnd?4(QStringView) -> int -QtCore.QRegularExpressionMatch.capturedEnd?4(int nth=0) -> int -QtCore.QRegularExpressionMatch.hasCaptured?4(int) -> bool -QtCore.QRegularExpressionMatch.hasCaptured?4(QString) -> bool -QtCore.QRegularExpressionMatchIterator?1() -QtCore.QRegularExpressionMatchIterator.__init__?1(self) -QtCore.QRegularExpressionMatchIterator?1(QRegularExpressionMatchIterator) -QtCore.QRegularExpressionMatchIterator.__init__?1(self, QRegularExpressionMatchIterator) -QtCore.QRegularExpressionMatchIterator.swap?4(QRegularExpressionMatchIterator) -QtCore.QRegularExpressionMatchIterator.isValid?4() -> bool -QtCore.QRegularExpressionMatchIterator.hasNext?4() -> bool -QtCore.QRegularExpressionMatchIterator.next?4() -> QRegularExpressionMatch -QtCore.QRegularExpressionMatchIterator.peekNext?4() -> QRegularExpressionMatch -QtCore.QRegularExpressionMatchIterator.regularExpression?4() -> QRegularExpression -QtCore.QRegularExpressionMatchIterator.matchType?4() -> QRegularExpression.MatchType -QtCore.QRegularExpressionMatchIterator.matchOptions?4() -> unknown-type -QtCore.QResource.Compression?10 -QtCore.QResource.Compression.NoCompression?10 -QtCore.QResource.Compression.ZlibCompression?10 -QtCore.QResource.Compression.ZstdCompression?10 -QtCore.QResource?1(QString fileName='', QLocale locale=QLocale()) -QtCore.QResource.__init__?1(self, QString fileName='', QLocale locale=QLocale()) -QtCore.QResource.absoluteFilePath?4() -> QString -QtCore.QResource.data?4() -> Any -QtCore.QResource.fileName?4() -> QString -QtCore.QResource.isValid?4() -> bool -QtCore.QResource.locale?4() -> QLocale -QtCore.QResource.setFileName?4(QString) -QtCore.QResource.setLocale?4(QLocale) -QtCore.QResource.size?4() -> int -QtCore.QResource.registerResource?4(QString, QString mapRoot='') -> bool -QtCore.QResource.registerResourceData?4(bytes, QString mapRoot='') -> bool -QtCore.QResource.unregisterResource?4(QString, QString mapRoot='') -> bool -QtCore.QResource.unregisterResourceData?4(bytes, QString mapRoot='') -> bool -QtCore.QResource.children?4() -> QStringList -QtCore.QResource.isDir?4() -> bool -QtCore.QResource.isFile?4() -> bool -QtCore.QResource.lastModified?4() -> QDateTime -QtCore.QResource.compressionAlgorithm?4() -> QResource.Compression -QtCore.QResource.uncompressedSize?4() -> int -QtCore.QResource.uncompressedData?4() -> QByteArray -QtCore.QRunnable?1() -QtCore.QRunnable.__init__?1(self) -QtCore.QRunnable.run?4() -QtCore.QRunnable.autoDelete?4() -> bool -QtCore.QRunnable.setAutoDelete?4(bool) -QtCore.QRunnable.create?4(Callable[..., None]) -> QRunnable -QtCore.QSaveFile?1(QString) -QtCore.QSaveFile.__init__?1(self, QString) -QtCore.QSaveFile?1(QObject parent=None) -QtCore.QSaveFile.__init__?1(self, QObject parent=None) -QtCore.QSaveFile?1(QString, QObject) -QtCore.QSaveFile.__init__?1(self, QString, QObject) -QtCore.QSaveFile.fileName?4() -> QString -QtCore.QSaveFile.setFileName?4(QString) -QtCore.QSaveFile.open?4(unknown-type) -> bool -QtCore.QSaveFile.commit?4() -> bool -QtCore.QSaveFile.cancelWriting?4() -QtCore.QSaveFile.setDirectWriteFallback?4(bool) -QtCore.QSaveFile.directWriteFallback?4() -> bool -QtCore.QSaveFile.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtCore.QSemaphore?1(int n=0) -QtCore.QSemaphore.__init__?1(self, int n=0) -QtCore.QSemaphore.acquire?4(int n=1) -QtCore.QSemaphore.tryAcquire?4(int n=1) -> bool -QtCore.QSemaphore.tryAcquire?4(int, QDeadlineTimer) -> bool -QtCore.QSemaphore.tryAcquire?4(int, int) -> bool -QtCore.QSemaphore.release?4(int n=1) -QtCore.QSemaphore.available?4() -> int -QtCore.QSemaphoreReleaser?1() -QtCore.QSemaphoreReleaser.__init__?1(self) -QtCore.QSemaphoreReleaser?1(QSemaphore, int n=1) -QtCore.QSemaphoreReleaser.__init__?1(self, QSemaphore, int n=1) -QtCore.QSemaphoreReleaser.swap?4(QSemaphoreReleaser) -QtCore.QSemaphoreReleaser.semaphore?4() -> QSemaphore -QtCore.QSemaphoreReleaser.cancel?4() -> QSemaphore -QtCore.QSequentialAnimationGroup?1(QObject parent=None) -QtCore.QSequentialAnimationGroup.__init__?1(self, QObject parent=None) -QtCore.QSequentialAnimationGroup.addPause?4(int) -> QPauseAnimation -QtCore.QSequentialAnimationGroup.insertPause?4(int, int) -> QPauseAnimation -QtCore.QSequentialAnimationGroup.currentAnimation?4() -> QAbstractAnimation -QtCore.QSequentialAnimationGroup.duration?4() -> int -QtCore.QSequentialAnimationGroup.currentAnimationChanged?4(QAbstractAnimation) -QtCore.QSequentialAnimationGroup.event?4(QEvent) -> bool -QtCore.QSequentialAnimationGroup.updateCurrentTime?4(int) -QtCore.QSequentialAnimationGroup.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) -QtCore.QSequentialAnimationGroup.updateDirection?4(QAbstractAnimation.Direction) -QtCore.QSettings.Scope?10 -QtCore.QSettings.Scope.UserScope?10 -QtCore.QSettings.Scope.SystemScope?10 -QtCore.QSettings.Format?10 -QtCore.QSettings.Format.NativeFormat?10 -QtCore.QSettings.Format.IniFormat?10 -QtCore.QSettings.Format.InvalidFormat?10 -QtCore.QSettings.Status?10 -QtCore.QSettings.Status.NoError?10 -QtCore.QSettings.Status.AccessError?10 -QtCore.QSettings.Status.FormatError?10 -QtCore.QSettings?1(QString, QString application='', QObject parent=None) -QtCore.QSettings.__init__?1(self, QString, QString application='', QObject parent=None) -QtCore.QSettings?1(QSettings.Scope, QString, QString application='', QObject parent=None) -QtCore.QSettings.__init__?1(self, QSettings.Scope, QString, QString application='', QObject parent=None) -QtCore.QSettings?1(QSettings.Format, QSettings.Scope, QString, QString application='', QObject parent=None) -QtCore.QSettings.__init__?1(self, QSettings.Format, QSettings.Scope, QString, QString application='', QObject parent=None) -QtCore.QSettings?1(QString, QSettings.Format, QObject parent=None) -QtCore.QSettings.__init__?1(self, QString, QSettings.Format, QObject parent=None) -QtCore.QSettings?1(QSettings.Scope, QObject parent=None) -QtCore.QSettings.__init__?1(self, QSettings.Scope, QObject parent=None) -QtCore.QSettings?1(QObject parent=None) -QtCore.QSettings.__init__?1(self, QObject parent=None) -QtCore.QSettings.clear?4() -QtCore.QSettings.sync?4() -QtCore.QSettings.status?4() -> QSettings.Status -QtCore.QSettings.beginGroup?4(QAnyStringView) -QtCore.QSettings.endGroup?4() -QtCore.QSettings.group?4() -> QString -QtCore.QSettings.beginReadArray?4(QAnyStringView) -> int -QtCore.QSettings.beginWriteArray?4(QAnyStringView, int size=-1) -QtCore.QSettings.endArray?4() -QtCore.QSettings.setArrayIndex?4(int) -QtCore.QSettings.allKeys?4() -> QStringList -QtCore.QSettings.childKeys?4() -> QStringList -QtCore.QSettings.childGroups?4() -> QStringList -QtCore.QSettings.isWritable?4() -> bool -QtCore.QSettings.setValue?4(QAnyStringView, QVariant) -QtCore.QSettings.value?4(QAnyStringView, QVariant defaultValue=None, Any type=None) -> Any -QtCore.QSettings.remove?4(QAnyStringView) -QtCore.QSettings.contains?4(QAnyStringView) -> bool -QtCore.QSettings.setFallbacksEnabled?4(bool) -QtCore.QSettings.fallbacksEnabled?4() -> bool -QtCore.QSettings.fileName?4() -> QString -QtCore.QSettings.setPath?4(QSettings.Format, QSettings.Scope, QString) -QtCore.QSettings.format?4() -> QSettings.Format -QtCore.QSettings.scope?4() -> QSettings.Scope -QtCore.QSettings.organizationName?4() -> QString -QtCore.QSettings.applicationName?4() -> QString -QtCore.QSettings.setDefaultFormat?4(QSettings.Format) -QtCore.QSettings.defaultFormat?4() -> QSettings.Format -QtCore.QSettings.isAtomicSyncRequired?4() -> bool -QtCore.QSettings.setAtomicSyncRequired?4(bool) -QtCore.QSettings.event?4(QEvent) -> bool -QtCore.QSharedMemory.SharedMemoryError?10 -QtCore.QSharedMemory.SharedMemoryError.NoError?10 -QtCore.QSharedMemory.SharedMemoryError.PermissionDenied?10 -QtCore.QSharedMemory.SharedMemoryError.InvalidSize?10 -QtCore.QSharedMemory.SharedMemoryError.KeyError?10 -QtCore.QSharedMemory.SharedMemoryError.AlreadyExists?10 -QtCore.QSharedMemory.SharedMemoryError.NotFound?10 -QtCore.QSharedMemory.SharedMemoryError.LockError?10 -QtCore.QSharedMemory.SharedMemoryError.OutOfResources?10 -QtCore.QSharedMemory.SharedMemoryError.UnknownError?10 -QtCore.QSharedMemory.AccessMode?10 -QtCore.QSharedMemory.AccessMode.ReadOnly?10 -QtCore.QSharedMemory.AccessMode.ReadWrite?10 -QtCore.QSharedMemory?1(QObject parent=None) -QtCore.QSharedMemory.__init__?1(self, QObject parent=None) -QtCore.QSharedMemory?1(QNativeIpcKey, QObject parent=None) -QtCore.QSharedMemory.__init__?1(self, QNativeIpcKey, QObject parent=None) -QtCore.QSharedMemory?1(QString, QObject parent=None) -QtCore.QSharedMemory.__init__?1(self, QString, QObject parent=None) -QtCore.QSharedMemory.setKey?4(QString) -QtCore.QSharedMemory.key?4() -> QString -QtCore.QSharedMemory.create?4(int, QSharedMemory.AccessMode mode=QSharedMemory.ReadWrite) -> bool -QtCore.QSharedMemory.size?4() -> int -QtCore.QSharedMemory.attach?4(QSharedMemory.AccessMode mode=QSharedMemory.ReadWrite) -> bool -QtCore.QSharedMemory.isAttached?4() -> bool -QtCore.QSharedMemory.detach?4() -> bool -QtCore.QSharedMemory.data?4() -> Any -QtCore.QSharedMemory.constData?4() -> Any -QtCore.QSharedMemory.lock?4() -> bool -QtCore.QSharedMemory.unlock?4() -> bool -QtCore.QSharedMemory.error?4() -> QSharedMemory.SharedMemoryError -QtCore.QSharedMemory.errorString?4() -> QString -QtCore.QSharedMemory.setNativeKey?4(QNativeIpcKey) -QtCore.QSharedMemory.setNativeKey?4(QString, QNativeIpcKey.Type type=QNativeIpcKey.legacyDefaultTypeForOs()) -QtCore.QSharedMemory.nativeKey?4() -> QString -QtCore.QSharedMemory.nativeIpcKey?4() -> QNativeIpcKey -QtCore.QSharedMemory.isKeyTypeSupported?4(QNativeIpcKey.Type) -> bool -QtCore.QSharedMemory.platformSafeKey?4(QString, QNativeIpcKey.Type type=QNativeIpcKey.DefaultTypeForOs) -> QNativeIpcKey -QtCore.QSharedMemory.legacyNativeKey?4(QString, QNativeIpcKey.Type type=QNativeIpcKey.legacyDefaultTypeForOs()) -> QNativeIpcKey -QtCore.QSignalMapper?1(QObject parent=None) -QtCore.QSignalMapper.__init__?1(self, QObject parent=None) -QtCore.QSignalMapper.setMapping?4(QObject, int) -QtCore.QSignalMapper.setMapping?4(QObject, QString) -QtCore.QSignalMapper.setMapping?4(QObject, QObject) -QtCore.QSignalMapper.removeMappings?4(QObject) -QtCore.QSignalMapper.mapping?4(int) -> QObject -QtCore.QSignalMapper.mapping?4(QString) -> QObject -QtCore.QSignalMapper.mapping?4(QObject) -> QObject -QtCore.QSignalMapper.mappedInt?4(int) -QtCore.QSignalMapper.mappedString?4(QString) -QtCore.QSignalMapper.mappedObject?4(QObject) -QtCore.QSignalMapper.map?4() -QtCore.QSignalMapper.map?4(QObject) -QtCore.QSize?1() -QtCore.QSize.__init__?1(self) -QtCore.QSize?1(int, int) -QtCore.QSize.__init__?1(self, int, int) -QtCore.QSize?1(QSize) -QtCore.QSize.__init__?1(self, QSize) -QtCore.QSize.transpose?4() -QtCore.QSize.scale?4(QSize, Qt.AspectRatioMode) -QtCore.QSize.isNull?4() -> bool -QtCore.QSize.isEmpty?4() -> bool -QtCore.QSize.isValid?4() -> bool -QtCore.QSize.width?4() -> int -QtCore.QSize.height?4() -> int -QtCore.QSize.setWidth?4(int) -QtCore.QSize.setHeight?4(int) -QtCore.QSize.scale?4(int, int, Qt.AspectRatioMode) -QtCore.QSize.expandedTo?4(QSize) -> QSize -QtCore.QSize.boundedTo?4(QSize) -> QSize -QtCore.QSize.scaled?4(QSize, Qt.AspectRatioMode) -> QSize -QtCore.QSize.scaled?4(int, int, Qt.AspectRatioMode) -> QSize -QtCore.QSize.transposed?4() -> QSize -QtCore.QSize.grownBy?4(QMargins) -> QSize -QtCore.QSize.shrunkBy?4(QMargins) -> QSize -QtCore.QSize.toSizeF?4() -> QSizeF -QtCore.QSizeF?1() -QtCore.QSizeF.__init__?1(self) -QtCore.QSizeF?1(QSize) -QtCore.QSizeF.__init__?1(self, QSize) -QtCore.QSizeF?1(float, float) -QtCore.QSizeF.__init__?1(self, float, float) -QtCore.QSizeF?1(QSizeF) -QtCore.QSizeF.__init__?1(self, QSizeF) -QtCore.QSizeF.transpose?4() -QtCore.QSizeF.scale?4(QSizeF, Qt.AspectRatioMode) -QtCore.QSizeF.isNull?4() -> bool -QtCore.QSizeF.isEmpty?4() -> bool -QtCore.QSizeF.isValid?4() -> bool -QtCore.QSizeF.width?4() -> float -QtCore.QSizeF.height?4() -> float -QtCore.QSizeF.setWidth?4(float) -QtCore.QSizeF.setHeight?4(float) -QtCore.QSizeF.scale?4(float, float, Qt.AspectRatioMode) -QtCore.QSizeF.expandedTo?4(QSizeF) -> QSizeF -QtCore.QSizeF.boundedTo?4(QSizeF) -> QSizeF -QtCore.QSizeF.toSize?4() -> QSize -QtCore.QSizeF.scaled?4(QSizeF, Qt.AspectRatioMode) -> QSizeF -QtCore.QSizeF.scaled?4(float, float, Qt.AspectRatioMode) -> QSizeF -QtCore.QSizeF.transposed?4() -> QSizeF -QtCore.QSizeF.grownBy?4(QMarginsF) -> QSizeF -QtCore.QSizeF.shrunkBy?4(QMarginsF) -> QSizeF -QtCore.QSocketNotifier.Type?10 -QtCore.QSocketNotifier.Type.Read?10 -QtCore.QSocketNotifier.Type.Write?10 -QtCore.QSocketNotifier.Type.Exception?10 -QtCore.QSocketNotifier?1(QSocketNotifier.Type, QObject parent=None) -QtCore.QSocketNotifier.__init__?1(self, QSocketNotifier.Type, QObject parent=None) -QtCore.QSocketNotifier?1(qintptr, QSocketNotifier.Type, QObject parent=None) -QtCore.QSocketNotifier.__init__?1(self, qintptr, QSocketNotifier.Type, QObject parent=None) -QtCore.QSocketNotifier.socket?4() -> qintptr -QtCore.QSocketNotifier.type?4() -> QSocketNotifier.Type -QtCore.QSocketNotifier.isEnabled?4() -> bool -QtCore.QSocketNotifier.setEnabled?4(bool) -QtCore.QSocketNotifier.setSocket?4(qintptr) -QtCore.QSocketNotifier.isValid?4() -> bool -QtCore.QSocketNotifier.activated?4(int) -QtCore.QSocketNotifier.event?4(QEvent) -> bool -QtCore.QSortFilterProxyModel?1(QObject parent=None) -QtCore.QSortFilterProxyModel.__init__?1(self, QObject parent=None) -QtCore.QSortFilterProxyModel.setSourceModel?4(QAbstractItemModel) -QtCore.QSortFilterProxyModel.mapToSource?4(QModelIndex) -> QModelIndex -QtCore.QSortFilterProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex -QtCore.QSortFilterProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection -QtCore.QSortFilterProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection -QtCore.QSortFilterProxyModel.filterRegularExpression?4() -> QRegularExpression -QtCore.QSortFilterProxyModel.filterKeyColumn?4() -> int -QtCore.QSortFilterProxyModel.setFilterKeyColumn?4(int) -QtCore.QSortFilterProxyModel.filterCaseSensitivity?4() -> Qt.CaseSensitivity -QtCore.QSortFilterProxyModel.setFilterCaseSensitivity?4(Qt.CaseSensitivity) -QtCore.QSortFilterProxyModel.invalidate?4() -QtCore.QSortFilterProxyModel.setFilterFixedString?4(QString) -QtCore.QSortFilterProxyModel.setFilterRegularExpression?4(QRegularExpression) -QtCore.QSortFilterProxyModel.setFilterRegularExpression?4(QString) -QtCore.QSortFilterProxyModel.setFilterWildcard?4(QString) -QtCore.QSortFilterProxyModel.filterAcceptsRow?4(int, QModelIndex) -> bool -QtCore.QSortFilterProxyModel.filterAcceptsColumn?4(int, QModelIndex) -> bool -QtCore.QSortFilterProxyModel.lessThan?4(QModelIndex, QModelIndex) -> bool -QtCore.QSortFilterProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QSortFilterProxyModel.parent?4(QModelIndex) -> QModelIndex -QtCore.QSortFilterProxyModel.parent?4() -> QObject -QtCore.QSortFilterProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QSortFilterProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QSortFilterProxyModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtCore.QSortFilterProxyModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtCore.QSortFilterProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtCore.QSortFilterProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QSortFilterProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtCore.QSortFilterProxyModel.mimeData?4(unknown-type) -> QMimeData -QtCore.QSortFilterProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtCore.QSortFilterProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QSortFilterProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QSortFilterProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QSortFilterProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QSortFilterProxyModel.fetchMore?4(QModelIndex) -QtCore.QSortFilterProxyModel.canFetchMore?4(QModelIndex) -> bool -QtCore.QSortFilterProxyModel.flags?4(QModelIndex) -> unknown-type -QtCore.QSortFilterProxyModel.buddy?4(QModelIndex) -> QModelIndex -QtCore.QSortFilterProxyModel.span?4(QModelIndex) -> QSize -QtCore.QSortFilterProxyModel.match?4(QModelIndex, int, QVariant, int hits=1, unknown-type flags=Qt.MatchFlags(Qt.MatchStartsWith|Qt.MatchWrap)) -> unknown-type -QtCore.QSortFilterProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtCore.QSortFilterProxyModel.sortCaseSensitivity?4() -> Qt.CaseSensitivity -QtCore.QSortFilterProxyModel.setSortCaseSensitivity?4(Qt.CaseSensitivity) -QtCore.QSortFilterProxyModel.dynamicSortFilter?4() -> bool -QtCore.QSortFilterProxyModel.setDynamicSortFilter?4(bool) -QtCore.QSortFilterProxyModel.sortRole?4() -> int -QtCore.QSortFilterProxyModel.setSortRole?4(int) -QtCore.QSortFilterProxyModel.sortColumn?4() -> int -QtCore.QSortFilterProxyModel.sortOrder?4() -> Qt.SortOrder -QtCore.QSortFilterProxyModel.filterRole?4() -> int -QtCore.QSortFilterProxyModel.setFilterRole?4(int) -QtCore.QSortFilterProxyModel.mimeTypes?4() -> QStringList -QtCore.QSortFilterProxyModel.supportedDropActions?4() -> unknown-type -QtCore.QSortFilterProxyModel.isSortLocaleAware?4() -> bool -QtCore.QSortFilterProxyModel.setSortLocaleAware?4(bool) -QtCore.QSortFilterProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QSortFilterProxyModel.isRecursiveFilteringEnabled?4() -> bool -QtCore.QSortFilterProxyModel.setRecursiveFilteringEnabled?4(bool) -QtCore.QSortFilterProxyModel.invalidateFilter?4() -QtCore.QSortFilterProxyModel.dynamicSortFilterChanged?4(bool) -QtCore.QSortFilterProxyModel.filterCaseSensitivityChanged?4(Qt.CaseSensitivity) -QtCore.QSortFilterProxyModel.sortCaseSensitivityChanged?4(Qt.CaseSensitivity) -QtCore.QSortFilterProxyModel.sortLocaleAwareChanged?4(bool) -QtCore.QSortFilterProxyModel.sortRoleChanged?4(int) -QtCore.QSortFilterProxyModel.filterRoleChanged?4(int) -QtCore.QSortFilterProxyModel.recursiveFilteringEnabledChanged?4(bool) -QtCore.QSortFilterProxyModel.autoAcceptChildRows?4() -> bool -QtCore.QSortFilterProxyModel.setAutoAcceptChildRows?4(bool) -QtCore.QSortFilterProxyModel.invalidateRowsFilter?4() -QtCore.QSortFilterProxyModel.invalidateColumnsFilter?4() -QtCore.QSortFilterProxyModel.autoAcceptChildRowsChanged?4(bool) -QtCore.QStandardPaths.LocateOption?10 -QtCore.QStandardPaths.LocateOption.LocateFile?10 -QtCore.QStandardPaths.LocateOption.LocateDirectory?10 -QtCore.QStandardPaths.StandardLocation?10 -QtCore.QStandardPaths.StandardLocation.DesktopLocation?10 -QtCore.QStandardPaths.StandardLocation.DocumentsLocation?10 -QtCore.QStandardPaths.StandardLocation.FontsLocation?10 -QtCore.QStandardPaths.StandardLocation.ApplicationsLocation?10 -QtCore.QStandardPaths.StandardLocation.MusicLocation?10 -QtCore.QStandardPaths.StandardLocation.MoviesLocation?10 -QtCore.QStandardPaths.StandardLocation.PicturesLocation?10 -QtCore.QStandardPaths.StandardLocation.TempLocation?10 -QtCore.QStandardPaths.StandardLocation.HomeLocation?10 -QtCore.QStandardPaths.StandardLocation.CacheLocation?10 -QtCore.QStandardPaths.StandardLocation.GenericDataLocation?10 -QtCore.QStandardPaths.StandardLocation.RuntimeLocation?10 -QtCore.QStandardPaths.StandardLocation.ConfigLocation?10 -QtCore.QStandardPaths.StandardLocation.DownloadLocation?10 -QtCore.QStandardPaths.StandardLocation.GenericCacheLocation?10 -QtCore.QStandardPaths.StandardLocation.GenericConfigLocation?10 -QtCore.QStandardPaths.StandardLocation.AppDataLocation?10 -QtCore.QStandardPaths.StandardLocation.AppLocalDataLocation?10 -QtCore.QStandardPaths.StandardLocation.AppConfigLocation?10 -QtCore.QStandardPaths.StandardLocation.PublicShareLocation?10 -QtCore.QStandardPaths.StandardLocation.TemplatesLocation?10 -QtCore.QStandardPaths.StandardLocation.StateLocation?10 -QtCore.QStandardPaths.StandardLocation.GenericStateLocation?10 -QtCore.QStandardPaths?1(QStandardPaths) -QtCore.QStandardPaths.__init__?1(self, QStandardPaths) -QtCore.QStandardPaths.writableLocation?4(QStandardPaths.StandardLocation) -> QString -QtCore.QStandardPaths.standardLocations?4(QStandardPaths.StandardLocation) -> QStringList -QtCore.QStandardPaths.locate?4(QStandardPaths.StandardLocation, QString, unknown-type options=QStandardPaths.LocateFile) -> QString -QtCore.QStandardPaths.locateAll?4(QStandardPaths.StandardLocation, QString, unknown-type options=QStandardPaths.LocateFile) -> QStringList -QtCore.QStandardPaths.displayName?4(QStandardPaths.StandardLocation) -> QString -QtCore.QStandardPaths.findExecutable?4(QString, QStringList paths=[]) -> QString -QtCore.QStandardPaths.setTestModeEnabled?4(bool) -QtCore.QStorageInfo?1() -QtCore.QStorageInfo.__init__?1(self) -QtCore.QStorageInfo?1(QString) -QtCore.QStorageInfo.__init__?1(self, QString) -QtCore.QStorageInfo?1(QDir) -QtCore.QStorageInfo.__init__?1(self, QDir) -QtCore.QStorageInfo?1(QStorageInfo) -QtCore.QStorageInfo.__init__?1(self, QStorageInfo) -QtCore.QStorageInfo.swap?4(QStorageInfo) -QtCore.QStorageInfo.setPath?4(QString) -QtCore.QStorageInfo.rootPath?4() -> QString -QtCore.QStorageInfo.device?4() -> QByteArray -QtCore.QStorageInfo.fileSystemType?4() -> QByteArray -QtCore.QStorageInfo.name?4() -> QString -QtCore.QStorageInfo.displayName?4() -> QString -QtCore.QStorageInfo.bytesTotal?4() -> int -QtCore.QStorageInfo.bytesFree?4() -> int -QtCore.QStorageInfo.bytesAvailable?4() -> int -QtCore.QStorageInfo.isReadOnly?4() -> bool -QtCore.QStorageInfo.isReady?4() -> bool -QtCore.QStorageInfo.isValid?4() -> bool -QtCore.QStorageInfo.refresh?4() -QtCore.QStorageInfo.mountedVolumes?4() -> unknown-type -QtCore.QStorageInfo.root?4() -> QStorageInfo -QtCore.QStorageInfo.isRoot?4() -> bool -QtCore.QStorageInfo.blockSize?4() -> int -QtCore.QStorageInfo.subvolume?4() -> QByteArray -QtCore.QStringConverterBase.Flag?10 -QtCore.QStringConverterBase.Flag.Default?10 -QtCore.QStringConverterBase.Flag.Stateless?10 -QtCore.QStringConverterBase.Flag.ConvertInvalidToNull?10 -QtCore.QStringConverterBase.Flag.WriteBom?10 -QtCore.QStringConverterBase.Flag.ConvertInitialBom?10 -QtCore.QStringConverterBase.Flag.UsesIcu?10 -QtCore.QStringConverterBase?1() -QtCore.QStringConverterBase.__init__?1(self) -QtCore.QStringConverterBase?1(QStringConverterBase) -QtCore.QStringConverterBase.__init__?1(self, QStringConverterBase) -QtCore.QStringConverter.Encoding?10 -QtCore.QStringConverter.Encoding.Utf8?10 -QtCore.QStringConverter.Encoding.Utf16?10 -QtCore.QStringConverter.Encoding.Utf16LE?10 -QtCore.QStringConverter.Encoding.Utf16BE?10 -QtCore.QStringConverter.Encoding.Utf32?10 -QtCore.QStringConverter.Encoding.Utf32LE?10 -QtCore.QStringConverter.Encoding.Utf32BE?10 -QtCore.QStringConverter.Encoding.Latin1?10 -QtCore.QStringConverter.Encoding.System?10 -QtCore.QStringConverter?1() -QtCore.QStringConverter.__init__?1(self) -QtCore.QStringConverter?1(QStringConverter.Encoding, unknown-type) -QtCore.QStringConverter.__init__?1(self, QStringConverter.Encoding, unknown-type) -QtCore.QStringConverter?1(str, unknown-type) -QtCore.QStringConverter.__init__?1(self, str, unknown-type) -QtCore.QStringConverter.isValid?4() -> bool -QtCore.QStringConverter.resetState?4() -QtCore.QStringConverter.hasError?4() -> bool -QtCore.QStringConverter.name?4() -> str -QtCore.QStringConverter.nameForEncoding?4(QStringConverter.Encoding) -> str -QtCore.QStringConverter.availableCodecs?4() -> QStringList -QtCore.QStringEncoder?1() -QtCore.QStringEncoder.__init__?1(self) -QtCore.QStringEncoder?1(QStringConverter.Encoding, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringEncoder.__init__?1(self, QStringConverter.Encoding, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringEncoder?1(str, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringEncoder.__init__?1(self, str, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringEncoder.encode?4(QStringView) -> QByteArray -QtCore.QStringDecoder?1(QStringConverter.Encoding, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringDecoder.__init__?1(self, QStringConverter.Encoding, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringDecoder?1() -QtCore.QStringDecoder.__init__?1(self) -QtCore.QStringDecoder?1(str, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringDecoder.__init__?1(self, str, unknown-type flags=QStringConverterBase.Flag.Default) -QtCore.QStringDecoder.decode?4(QByteArrayView) -> QString -QtCore.QStringDecoder.decoderForHtml?4(QByteArrayView) -> QStringDecoder -QtCore.QStringListModel?1(QObject parent=None) -QtCore.QStringListModel.__init__?1(self, QObject parent=None) -QtCore.QStringListModel?1(QStringList, QObject parent=None) -QtCore.QStringListModel.__init__?1(self, QStringList, QObject parent=None) -QtCore.QStringListModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QStringListModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtCore.QStringListModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtCore.QStringListModel.flags?4(QModelIndex) -> unknown-type -QtCore.QStringListModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QStringListModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QStringListModel.stringList?4() -> QStringList -QtCore.QStringListModel.setStringList?4(QStringList) -QtCore.QStringListModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtCore.QStringListModel.supportedDropActions?4() -> unknown-type -QtCore.QStringListModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtCore.QStringListModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QStringListModel.itemData?4(QModelIndex) -> unknown-type -QtCore.QStringListModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtCore.QStringListModel.clearItemData?4(QModelIndex) -> bool -QtCore.QSysInfo.Endian?10 -QtCore.QSysInfo.Endian.BigEndian?10 -QtCore.QSysInfo.Endian.LittleEndian?10 -QtCore.QSysInfo.Endian.ByteOrder?10 -QtCore.QSysInfo.Sizes?10 -QtCore.QSysInfo.Sizes.WordSize?10 -QtCore.QSysInfo?1() -QtCore.QSysInfo.__init__?1(self) -QtCore.QSysInfo?1(QSysInfo) -QtCore.QSysInfo.__init__?1(self, QSysInfo) -QtCore.QSysInfo.buildCpuArchitecture?4() -> QString -QtCore.QSysInfo.currentCpuArchitecture?4() -> QString -QtCore.QSysInfo.buildAbi?4() -> QString -QtCore.QSysInfo.kernelType?4() -> QString -QtCore.QSysInfo.kernelVersion?4() -> QString -QtCore.QSysInfo.productType?4() -> QString -QtCore.QSysInfo.productVersion?4() -> QString -QtCore.QSysInfo.prettyProductName?4() -> QString -QtCore.QSysInfo.machineHostName?4() -> QString -QtCore.QSysInfo.machineUniqueId?4() -> QByteArray -QtCore.QSysInfo.bootUniqueId?4() -> QByteArray -QtCore.QSystemSemaphore.SystemSemaphoreError?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.NoError?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.PermissionDenied?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.KeyError?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.AlreadyExists?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.NotFound?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.OutOfResources?10 -QtCore.QSystemSemaphore.SystemSemaphoreError.UnknownError?10 -QtCore.QSystemSemaphore.AccessMode?10 -QtCore.QSystemSemaphore.AccessMode.Open?10 -QtCore.QSystemSemaphore.AccessMode.Create?10 -QtCore.QSystemSemaphore?1(QNativeIpcKey, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore.__init__?1(self, QNativeIpcKey, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore?1(QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore.__init__?1(self, QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore.setKey?4(QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore.key?4() -> QString -QtCore.QSystemSemaphore.acquire?4() -> bool -QtCore.QSystemSemaphore.release?4(int n=1) -> bool -QtCore.QSystemSemaphore.error?4() -> QSystemSemaphore.SystemSemaphoreError -QtCore.QSystemSemaphore.errorString?4() -> QString -QtCore.QSystemSemaphore.setNativeKey?4(QNativeIpcKey, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) -QtCore.QSystemSemaphore.setNativeKey?4(QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open, QNativeIpcKey.Type type=QNativeIpcKey.legacyDefaultTypeForOs()) -QtCore.QSystemSemaphore.nativeIpcKey?4() -> QNativeIpcKey -QtCore.QSystemSemaphore.isKeyTypeSupported?4(QNativeIpcKey.Type) -> bool -QtCore.QSystemSemaphore.platformSafeKey?4(QString, QNativeIpcKey.Type type=QNativeIpcKey.DefaultTypeForOs) -> QNativeIpcKey -QtCore.QSystemSemaphore.legacyNativeKey?4(QString, QNativeIpcKey.Type type=QNativeIpcKey.legacyDefaultTypeForOs()) -> QNativeIpcKey -QtCore.QTemporaryDir?1() -QtCore.QTemporaryDir.__init__?1(self) -QtCore.QTemporaryDir?1(QString) -QtCore.QTemporaryDir.__init__?1(self, QString) -QtCore.QTemporaryDir.isValid?4() -> bool -QtCore.QTemporaryDir.autoRemove?4() -> bool -QtCore.QTemporaryDir.setAutoRemove?4(bool) -QtCore.QTemporaryDir.remove?4() -> bool -QtCore.QTemporaryDir.path?4() -> QString -QtCore.QTemporaryDir.errorString?4() -> QString -QtCore.QTemporaryDir.filePath?4(QString) -> QString -QtCore.QTemporaryDir.swap?4(QTemporaryDir) -QtCore.QTemporaryFile?1() -QtCore.QTemporaryFile.__init__?1(self) -QtCore.QTemporaryFile?1(QString) -QtCore.QTemporaryFile.__init__?1(self, QString) -QtCore.QTemporaryFile?1(QObject) -QtCore.QTemporaryFile.__init__?1(self, QObject) -QtCore.QTemporaryFile?1(QString, QObject) -QtCore.QTemporaryFile.__init__?1(self, QString, QObject) -QtCore.QTemporaryFile.autoRemove?4() -> bool -QtCore.QTemporaryFile.setAutoRemove?4(bool) -QtCore.QTemporaryFile.open?4() -> bool -QtCore.QTemporaryFile.fileName?4() -> QString -QtCore.QTemporaryFile.fileTemplate?4() -> QString -QtCore.QTemporaryFile.setFileTemplate?4(QString) -QtCore.QTemporaryFile.createNativeFile?4(QString) -> QTemporaryFile -QtCore.QTemporaryFile.createNativeFile?4(QFile) -> QTemporaryFile -QtCore.QTemporaryFile.rename?4(QString) -> bool -QtCore.QTemporaryFile.open?4(unknown-type) -> bool -QtCore.QTextBoundaryFinder.BoundaryType?10 -QtCore.QTextBoundaryFinder.BoundaryType.Grapheme?10 -QtCore.QTextBoundaryFinder.BoundaryType.Word?10 -QtCore.QTextBoundaryFinder.BoundaryType.Line?10 -QtCore.QTextBoundaryFinder.BoundaryType.Sentence?10 -QtCore.QTextBoundaryFinder.BoundaryReason?10 -QtCore.QTextBoundaryFinder.BoundaryReason.NotAtBoundary?10 -QtCore.QTextBoundaryFinder.BoundaryReason.SoftHyphen?10 -QtCore.QTextBoundaryFinder.BoundaryReason.BreakOpportunity?10 -QtCore.QTextBoundaryFinder.BoundaryReason.StartOfItem?10 -QtCore.QTextBoundaryFinder.BoundaryReason.EndOfItem?10 -QtCore.QTextBoundaryFinder.BoundaryReason.MandatoryBreak?10 -QtCore.QTextBoundaryFinder?1() -QtCore.QTextBoundaryFinder.__init__?1(self) -QtCore.QTextBoundaryFinder?1(QTextBoundaryFinder) -QtCore.QTextBoundaryFinder.__init__?1(self, QTextBoundaryFinder) -QtCore.QTextBoundaryFinder?1(QTextBoundaryFinder.BoundaryType, QString) -QtCore.QTextBoundaryFinder.__init__?1(self, QTextBoundaryFinder.BoundaryType, QString) -QtCore.QTextBoundaryFinder.isValid?4() -> bool -QtCore.QTextBoundaryFinder.type?4() -> QTextBoundaryFinder.BoundaryType -QtCore.QTextBoundaryFinder.string?4() -> QString -QtCore.QTextBoundaryFinder.toStart?4() -QtCore.QTextBoundaryFinder.toEnd?4() -QtCore.QTextBoundaryFinder.position?4() -> int -QtCore.QTextBoundaryFinder.setPosition?4(int) -QtCore.QTextBoundaryFinder.toNextBoundary?4() -> int -QtCore.QTextBoundaryFinder.toPreviousBoundary?4() -> int -QtCore.QTextBoundaryFinder.isAtBoundary?4() -> bool -QtCore.QTextBoundaryFinder.boundaryReasons?4() -> unknown-type -QtCore.QTextStream.NumberFlag?10 -QtCore.QTextStream.NumberFlag.ShowBase?10 -QtCore.QTextStream.NumberFlag.ForcePoint?10 -QtCore.QTextStream.NumberFlag.ForceSign?10 -QtCore.QTextStream.NumberFlag.UppercaseBase?10 -QtCore.QTextStream.NumberFlag.UppercaseDigits?10 -QtCore.QTextStream.Status?10 -QtCore.QTextStream.Status.Ok?10 -QtCore.QTextStream.Status.ReadPastEnd?10 -QtCore.QTextStream.Status.ReadCorruptData?10 -QtCore.QTextStream.Status.WriteFailed?10 -QtCore.QTextStream.FieldAlignment?10 -QtCore.QTextStream.FieldAlignment.AlignLeft?10 -QtCore.QTextStream.FieldAlignment.AlignRight?10 -QtCore.QTextStream.FieldAlignment.AlignCenter?10 -QtCore.QTextStream.FieldAlignment.AlignAccountingStyle?10 -QtCore.QTextStream.RealNumberNotation?10 -QtCore.QTextStream.RealNumberNotation.SmartNotation?10 -QtCore.QTextStream.RealNumberNotation.FixedNotation?10 -QtCore.QTextStream.RealNumberNotation.ScientificNotation?10 -QtCore.QTextStream?1() -QtCore.QTextStream.__init__?1(self) -QtCore.QTextStream?1(QIODevice) -QtCore.QTextStream.__init__?1(self, QIODevice) -QtCore.QTextStream?1(QByteArray, unknown-type mode=QIODeviceBase.ReadWrite) -QtCore.QTextStream.__init__?1(self, QByteArray, unknown-type mode=QIODeviceBase.ReadWrite) -QtCore.QTextStream.setEncoding?4(QStringConverter.Encoding) -QtCore.QTextStream.encoding?4() -> QStringConverter.Encoding -QtCore.QTextStream.setAutoDetectUnicode?4(bool) -QtCore.QTextStream.autoDetectUnicode?4() -> bool -QtCore.QTextStream.setGenerateByteOrderMark?4(bool) -QtCore.QTextStream.generateByteOrderMark?4() -> bool -QtCore.QTextStream.setLocale?4(QLocale) -QtCore.QTextStream.locale?4() -> QLocale -QtCore.QTextStream.setDevice?4(QIODevice) -QtCore.QTextStream.device?4() -> QIODevice -QtCore.QTextStream.status?4() -> QTextStream.Status -QtCore.QTextStream.setStatus?4(QTextStream.Status) -QtCore.QTextStream.resetStatus?4() -QtCore.QTextStream.atEnd?4() -> bool -QtCore.QTextStream.reset?4() -QtCore.QTextStream.flush?4() -QtCore.QTextStream.seek?4(int) -> bool -QtCore.QTextStream.pos?4() -> int -QtCore.QTextStream.skipWhiteSpace?4() -QtCore.QTextStream.readLine?4(int maxLength=0) -> QString -QtCore.QTextStream.readAll?4() -> QString -QtCore.QTextStream.read?4(int) -> QString -QtCore.QTextStream.setFieldAlignment?4(QTextStream.FieldAlignment) -QtCore.QTextStream.fieldAlignment?4() -> QTextStream.FieldAlignment -QtCore.QTextStream.setPadChar?4(QChar) -QtCore.QTextStream.padChar?4() -> QChar -QtCore.QTextStream.setFieldWidth?4(int) -QtCore.QTextStream.fieldWidth?4() -> int -QtCore.QTextStream.setNumberFlags?4(unknown-type) -QtCore.QTextStream.numberFlags?4() -> unknown-type -QtCore.QTextStream.setIntegerBase?4(int) -QtCore.QTextStream.integerBase?4() -> int -QtCore.QTextStream.setRealNumberNotation?4(QTextStream.RealNumberNotation) -QtCore.QTextStream.realNumberNotation?4() -> QTextStream.RealNumberNotation -QtCore.QTextStream.setRealNumberPrecision?4(int) -QtCore.QTextStream.realNumberPrecision?4() -> int -QtCore.QThread.Priority?10 -QtCore.QThread.Priority.IdlePriority?10 -QtCore.QThread.Priority.LowestPriority?10 -QtCore.QThread.Priority.LowPriority?10 -QtCore.QThread.Priority.NormalPriority?10 -QtCore.QThread.Priority.HighPriority?10 -QtCore.QThread.Priority.HighestPriority?10 -QtCore.QThread.Priority.TimeCriticalPriority?10 -QtCore.QThread.Priority.InheritPriority?10 -QtCore.QThread?1(QObject parent=None) -QtCore.QThread.__init__?1(self, QObject parent=None) -QtCore.QThread.currentThread?4() -> QThread -QtCore.QThread.currentThreadId?4() -> PyQt6.sip.voidptr -QtCore.QThread.idealThreadCount?4() -> int -QtCore.QThread.yieldCurrentThread?4() -QtCore.QThread.isFinished?4() -> bool -QtCore.QThread.isRunning?4() -> bool -QtCore.QThread.setPriority?4(QThread.Priority) -QtCore.QThread.priority?4() -> QThread.Priority -QtCore.QThread.setStackSize?4(int) -QtCore.QThread.stackSize?4() -> int -QtCore.QThread.exit?4(int returnCode=0) -QtCore.QThread.start?4(QThread.Priority priority=QThread.InheritPriority) -QtCore.QThread.terminate?4() -QtCore.QThread.quit?4() -QtCore.QThread.wait?4(QDeadlineTimer deadline=QDeadlineTimer(QDeadlineTimer.Forever)) -> bool -QtCore.QThread.wait?4(int) -> bool -QtCore.QThread.started?4() -QtCore.QThread.finished?4() -QtCore.QThread.run?4() -QtCore.QThread.exec?4() -> int -QtCore.QThread.setTerminationEnabled?4(bool enabled=True) -QtCore.QThread.event?4(QEvent) -> bool -QtCore.QThread.sleep?4(int) -QtCore.QThread.msleep?4(int) -QtCore.QThread.usleep?4(int) -QtCore.QThread.eventDispatcher?4() -> QAbstractEventDispatcher -QtCore.QThread.setEventDispatcher?4(QAbstractEventDispatcher) -QtCore.QThread.requestInterruption?4() -QtCore.QThread.isInterruptionRequested?4() -> bool -QtCore.QThread.loopLevel?4() -> int -QtCore.QThreadPool?1(QObject parent=None) -QtCore.QThreadPool.__init__?1(self, QObject parent=None) -QtCore.QThreadPool.globalInstance?4() -> QThreadPool -QtCore.QThreadPool.start?4(QRunnable, int priority=0) -QtCore.QThreadPool.start?4(Callable[..., None], int priority=0) -QtCore.QThreadPool.tryStart?4(QRunnable) -> bool -QtCore.QThreadPool.tryStart?4(Callable[..., None]) -> bool -QtCore.QThreadPool.tryTake?4(QRunnable) -> bool -QtCore.QThreadPool.expiryTimeout?4() -> int -QtCore.QThreadPool.setExpiryTimeout?4(int) -QtCore.QThreadPool.maxThreadCount?4() -> int -QtCore.QThreadPool.setMaxThreadCount?4(int) -QtCore.QThreadPool.activeThreadCount?4() -> int -QtCore.QThreadPool.reserveThread?4() -QtCore.QThreadPool.releaseThread?4() -QtCore.QThreadPool.waitForDone?4(int msecs=-1) -> bool -QtCore.QThreadPool.clear?4() -QtCore.QThreadPool.setStackSize?4(int) -QtCore.QThreadPool.stackSize?4() -> int -QtCore.QThreadPool.contains?4(QThread) -> bool -QtCore.QThreadPool.setThreadPriority?4(QThread.Priority) -QtCore.QThreadPool.threadPriority?4() -> QThread.Priority -QtCore.QThreadPool.startOnReservedThread?4(QRunnable) -QtCore.QThreadPool.startOnReservedThread?4(Callable[..., None]) -QtCore.QTimeLine.State?10 -QtCore.QTimeLine.State.NotRunning?10 -QtCore.QTimeLine.State.Paused?10 -QtCore.QTimeLine.State.Running?10 -QtCore.QTimeLine.Direction?10 -QtCore.QTimeLine.Direction.Forward?10 -QtCore.QTimeLine.Direction.Backward?10 -QtCore.QTimeLine?1(int duration=1000, QObject parent=None) -QtCore.QTimeLine.__init__?1(self, int duration=1000, QObject parent=None) -QtCore.QTimeLine.state?4() -> QTimeLine.State -QtCore.QTimeLine.loopCount?4() -> int -QtCore.QTimeLine.setLoopCount?4(int) -QtCore.QTimeLine.direction?4() -> QTimeLine.Direction -QtCore.QTimeLine.setDirection?4(QTimeLine.Direction) -QtCore.QTimeLine.duration?4() -> int -QtCore.QTimeLine.setDuration?4(int) -QtCore.QTimeLine.startFrame?4() -> int -QtCore.QTimeLine.setStartFrame?4(int) -QtCore.QTimeLine.endFrame?4() -> int -QtCore.QTimeLine.setEndFrame?4(int) -QtCore.QTimeLine.setFrameRange?4(int, int) -QtCore.QTimeLine.updateInterval?4() -> int -QtCore.QTimeLine.setUpdateInterval?4(int) -QtCore.QTimeLine.currentTime?4() -> int -QtCore.QTimeLine.currentFrame?4() -> int -QtCore.QTimeLine.currentValue?4() -> float -QtCore.QTimeLine.frameForTime?4(int) -> int -QtCore.QTimeLine.valueForTime?4(int) -> float -QtCore.QTimeLine.resume?4() -QtCore.QTimeLine.setCurrentTime?4(int) -QtCore.QTimeLine.setPaused?4(bool) -QtCore.QTimeLine.start?4() -QtCore.QTimeLine.stop?4() -QtCore.QTimeLine.toggleDirection?4() -QtCore.QTimeLine.finished?4() -QtCore.QTimeLine.frameChanged?4(int) -QtCore.QTimeLine.stateChanged?4(QTimeLine.State) -QtCore.QTimeLine.valueChanged?4(float) -QtCore.QTimeLine.timerEvent?4(QTimerEvent) -QtCore.QTimeLine.easingCurve?4() -> QEasingCurve -QtCore.QTimeLine.setEasingCurve?4(QEasingCurve) -QtCore.QTimer?1(QObject parent=None) -QtCore.QTimer.__init__?1(self, QObject parent=None) -QtCore.QTimer.isActive?4() -> bool -QtCore.QTimer.timerId?4() -> int -QtCore.QTimer.setInterval?4(int) -QtCore.QTimer.interval?4() -> int -QtCore.QTimer.isSingleShot?4() -> bool -QtCore.QTimer.setSingleShot?4(bool) -QtCore.QTimer.singleShot?4(int, Any) -QtCore.QTimer.singleShot?4(int, Qt.TimerType, Any) -QtCore.QTimer.start?4(int) -QtCore.QTimer.start?4() -QtCore.QTimer.stop?4() -QtCore.QTimer.timeout?4() -QtCore.QTimer.timerEvent?4(QTimerEvent) -QtCore.QTimer.setTimerType?4(Qt.TimerType) -QtCore.QTimer.timerType?4() -> Qt.TimerType -QtCore.QTimer.remainingTime?4() -> int -QtCore.QTimeZone.Initialization?10 -QtCore.QTimeZone.Initialization.LocalTime?10 -QtCore.QTimeZone.Initialization.UTC?10 -QtCore.QTimeZone.NameType?10 -QtCore.QTimeZone.NameType.DefaultName?10 -QtCore.QTimeZone.NameType.LongName?10 -QtCore.QTimeZone.NameType.ShortName?10 -QtCore.QTimeZone.NameType.OffsetName?10 -QtCore.QTimeZone.TimeType?10 -QtCore.QTimeZone.TimeType.StandardTime?10 -QtCore.QTimeZone.TimeType.DaylightTime?10 -QtCore.QTimeZone.TimeType.GenericTime?10 -QtCore.QTimeZone.MaxUtcOffsetSecs?7 -QtCore.QTimeZone.MinUtcOffsetSecs?7 -QtCore.QTimeZone?1(QTimeZone.Initialization) -QtCore.QTimeZone.__init__?1(self, QTimeZone.Initialization) -QtCore.QTimeZone?1(QByteArray, int, QString, QString, QLocale.Country territory=QLocale.AnyTerritory, QString comment='') -QtCore.QTimeZone.__init__?1(self, QByteArray, int, QString, QString, QLocale.Country territory=QLocale.AnyTerritory, QString comment='') -QtCore.QTimeZone?1(QByteArray) -QtCore.QTimeZone.__init__?1(self, QByteArray) -QtCore.QTimeZone?1(int) -QtCore.QTimeZone.__init__?1(self, int) -QtCore.QTimeZone?1(QTimeZone) -QtCore.QTimeZone.__init__?1(self, QTimeZone) -QtCore.QTimeZone?1() -QtCore.QTimeZone.__init__?1(self) -QtCore.QTimeZone.swap?4(QTimeZone) -QtCore.QTimeZone.isValid?4() -> bool -QtCore.QTimeZone.id?4() -> QByteArray -QtCore.QTimeZone.country?4() -> QLocale.Country -QtCore.QTimeZone.territory?4() -> QLocale.Country -QtCore.QTimeZone.comment?4() -> QString -QtCore.QTimeZone.displayName?4(QDateTime, QTimeZone.NameType nameType=QTimeZone.DefaultName, QLocale locale=QLocale()) -> QString -QtCore.QTimeZone.displayName?4(QTimeZone.TimeType, QTimeZone.NameType nameType=QTimeZone.DefaultName, QLocale locale=QLocale()) -> QString -QtCore.QTimeZone.abbreviation?4(QDateTime) -> QString -QtCore.QTimeZone.offsetFromUtc?4(QDateTime) -> int -QtCore.QTimeZone.standardTimeOffset?4(QDateTime) -> int -QtCore.QTimeZone.daylightTimeOffset?4(QDateTime) -> int -QtCore.QTimeZone.hasDaylightTime?4() -> bool -QtCore.QTimeZone.isDaylightTime?4(QDateTime) -> bool -QtCore.QTimeZone.offsetData?4(QDateTime) -> QTimeZone.OffsetData -QtCore.QTimeZone.hasTransitions?4() -> bool -QtCore.QTimeZone.nextTransition?4(QDateTime) -> QTimeZone.OffsetData -QtCore.QTimeZone.previousTransition?4(QDateTime) -> QTimeZone.OffsetData -QtCore.QTimeZone.transitions?4(QDateTime, QDateTime) -> unknown-type -QtCore.QTimeZone.systemTimeZoneId?4() -> QByteArray -QtCore.QTimeZone.isTimeZoneIdAvailable?4(QByteArray) -> bool -QtCore.QTimeZone.availableTimeZoneIds?4(QLocale.Country) -> unknown-type -QtCore.QTimeZone.availableTimeZoneIds?4(int) -> unknown-type -QtCore.QTimeZone.availableTimeZoneIds?4() -> unknown-type -QtCore.QTimeZone.ianaIdToWindowsId?4(QByteArray) -> QByteArray -QtCore.QTimeZone.windowsIdToDefaultIanaId?4(QByteArray) -> QByteArray -QtCore.QTimeZone.windowsIdToDefaultIanaId?4(QByteArray, QLocale.Country) -> QByteArray -QtCore.QTimeZone.windowsIdToIanaIds?4(QByteArray) -> unknown-type -QtCore.QTimeZone.windowsIdToIanaIds?4(QByteArray, QLocale.Country) -> unknown-type -QtCore.QTimeZone.systemTimeZone?4() -> QTimeZone -QtCore.QTimeZone.utc?4() -> QTimeZone -QtCore.QTimeZone.fromSecondsAheadOfUtc?4(int) -> QTimeZone -QtCore.QTimeZone.timeSpec?4() -> Qt.TimeSpec -QtCore.QTimeZone.fixedSecondsAheadOfUtc?4() -> int -QtCore.QTimeZone.isUtcOrFixedOffset?4() -> bool -QtCore.QTimeZone.isUtcOrFixedOffset?4(Qt.TimeSpec) -> bool -QtCore.QTimeZone.asBackendZone?4() -> QTimeZone -QtCore.QTimeZone.OffsetData.abbreviation?7 -QtCore.QTimeZone.OffsetData.atUtc?7 -QtCore.QTimeZone.OffsetData.daylightTimeOffset?7 -QtCore.QTimeZone.OffsetData.offsetFromUtc?7 -QtCore.QTimeZone.OffsetData.standardTimeOffset?7 -QtCore.QTimeZone.OffsetData?1() -QtCore.QTimeZone.OffsetData.__init__?1(self) -QtCore.QTimeZone.OffsetData?1(QTimeZone.OffsetData) -QtCore.QTimeZone.OffsetData.__init__?1(self, QTimeZone.OffsetData) -QtCore.QNativeIpcKey.Type?10 -QtCore.QNativeIpcKey.Type.SystemV?10 -QtCore.QNativeIpcKey.Type.PosixRealtime?10 -QtCore.QNativeIpcKey.Type.Windows?10 -QtCore.QNativeIpcKey.DefaultTypeForOs?7 -QtCore.QNativeIpcKey?1() -QtCore.QNativeIpcKey.__init__?1(self) -QtCore.QNativeIpcKey?1(QNativeIpcKey.Type) -QtCore.QNativeIpcKey.__init__?1(self, QNativeIpcKey.Type) -QtCore.QNativeIpcKey?1(QString, QNativeIpcKey.Type type=QNativeIpcKey.DefaultTypeForOs) -QtCore.QNativeIpcKey.__init__?1(self, QString, QNativeIpcKey.Type type=QNativeIpcKey.DefaultTypeForOs) -QtCore.QNativeIpcKey?1(QNativeIpcKey) -QtCore.QNativeIpcKey.__init__?1(self, QNativeIpcKey) -QtCore.QNativeIpcKey.legacyDefaultTypeForOs?4() -> QNativeIpcKey.Type -QtCore.QNativeIpcKey.swap?4(QNativeIpcKey) -QtCore.QNativeIpcKey.isEmpty?4() -> bool -QtCore.QNativeIpcKey.isValid?4() -> bool -QtCore.QNativeIpcKey.type?4() -> QNativeIpcKey.Type -QtCore.QNativeIpcKey.setType?4(QNativeIpcKey.Type) -QtCore.QNativeIpcKey.nativeKey?4() -> QString -QtCore.QNativeIpcKey.setNativeKey?4(QString) -QtCore.QNativeIpcKey.toString?4() -> QString -QtCore.QNativeIpcKey.fromString?4(QString) -> QNativeIpcKey -QtCore.QTranslator?1(QObject parent=None) -QtCore.QTranslator.__init__?1(self, QObject parent=None) -QtCore.QTranslator.translate?4(str, str, str disambiguation=None, int n=-1) -> QString -QtCore.QTranslator.isEmpty?4() -> bool -QtCore.QTranslator.load?4(QString, QString directory='', QString searchDelimiters='', QString suffix='') -> bool -QtCore.QTranslator.load?4(QLocale, QString, QString prefix='', QString directory='', QString suffix='') -> bool -QtCore.QTranslator.loadFromData?4(bytes, QString directory='') -> bool -QtCore.QTranslator.language?4() -> QString -QtCore.QTranslator.filePath?4() -> QString -QtCore.QTransposeProxyModel?1(QObject parent=None) -QtCore.QTransposeProxyModel.__init__?1(self, QObject parent=None) -QtCore.QTransposeProxyModel.setSourceModel?4(QAbstractItemModel) -QtCore.QTransposeProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QTransposeProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtCore.QTransposeProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtCore.QTransposeProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtCore.QTransposeProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtCore.QTransposeProxyModel.span?4(QModelIndex) -> QSize -QtCore.QTransposeProxyModel.itemData?4(QModelIndex) -> unknown-type -QtCore.QTransposeProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex -QtCore.QTransposeProxyModel.mapToSource?4(QModelIndex) -> QModelIndex -QtCore.QTransposeProxyModel.parent?4(QModelIndex) -> QModelIndex -QtCore.QTransposeProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtCore.QTransposeProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QTransposeProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QTransposeProxyModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QTransposeProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QTransposeProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtCore.QTransposeProxyModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool -QtCore.QTransposeProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtCore.QTypeRevision?1() -QtCore.QTypeRevision.__init__?1(self) -QtCore.QTypeRevision?1(QTypeRevision) -QtCore.QTypeRevision.__init__?1(self, QTypeRevision) -QtCore.QTypeRevision.hasMajorVersion?4() -> bool -QtCore.QTypeRevision.majorVersion?4() -> int -QtCore.QTypeRevision.hasMinorVersion?4() -> bool -QtCore.QTypeRevision.minorVersion?4() -> int -QtCore.QTypeRevision.isValid?4() -> bool -QtCore.QTypeRevision.toEncodedVersion?4() -> int -QtCore.QTypeRevision.fromEncodedVersion?4(int) -> QTypeRevision -QtCore.QTypeRevision.zero?4() -> QTypeRevision -QtCore.QUrl.AceProcessingOption?10 -QtCore.QUrl.AceProcessingOption.IgnoreIDNWhitelist?10 -QtCore.QUrl.AceProcessingOption.AceTransitionalProcessing?10 -QtCore.QUrl.UserInputResolutionOption?10 -QtCore.QUrl.UserInputResolutionOption.DefaultResolution?10 -QtCore.QUrl.UserInputResolutionOption.AssumeLocalFile?10 -QtCore.QUrl.ComponentFormattingOption?10 -QtCore.QUrl.ComponentFormattingOption.PrettyDecoded?10 -QtCore.QUrl.ComponentFormattingOption.EncodeSpaces?10 -QtCore.QUrl.ComponentFormattingOption.EncodeUnicode?10 -QtCore.QUrl.ComponentFormattingOption.EncodeDelimiters?10 -QtCore.QUrl.ComponentFormattingOption.EncodeReserved?10 -QtCore.QUrl.ComponentFormattingOption.DecodeReserved?10 -QtCore.QUrl.ComponentFormattingOption.FullyEncoded?10 -QtCore.QUrl.ComponentFormattingOption.FullyDecoded?10 -QtCore.QUrl.UrlFormattingOption?10 -QtCore.QUrl.UrlFormattingOption.None_?10 -QtCore.QUrl.UrlFormattingOption.RemoveScheme?10 -QtCore.QUrl.UrlFormattingOption.RemovePassword?10 -QtCore.QUrl.UrlFormattingOption.RemoveUserInfo?10 -QtCore.QUrl.UrlFormattingOption.RemovePort?10 -QtCore.QUrl.UrlFormattingOption.RemoveAuthority?10 -QtCore.QUrl.UrlFormattingOption.RemovePath?10 -QtCore.QUrl.UrlFormattingOption.RemoveQuery?10 -QtCore.QUrl.UrlFormattingOption.RemoveFragment?10 -QtCore.QUrl.UrlFormattingOption.PreferLocalFile?10 -QtCore.QUrl.UrlFormattingOption.StripTrailingSlash?10 -QtCore.QUrl.UrlFormattingOption.RemoveFilename?10 -QtCore.QUrl.UrlFormattingOption.NormalizePathSegments?10 -QtCore.QUrl.ParsingMode?10 -QtCore.QUrl.ParsingMode.TolerantMode?10 -QtCore.QUrl.ParsingMode.StrictMode?10 -QtCore.QUrl.ParsingMode.DecodedMode?10 -QtCore.QUrl?1() -QtCore.QUrl.__init__?1(self) -QtCore.QUrl?1(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.__init__?1(self, QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl?1(QUrl) -QtCore.QUrl.__init__?1(self, QUrl) -QtCore.QUrl.url?4(unknown-type options=QUrl.FormattingOptions(QUrl.PrettyDecoded)) -> QString -QtCore.QUrl.setUrl?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.isValid?4() -> bool -QtCore.QUrl.isEmpty?4() -> bool -QtCore.QUrl.clear?4() -QtCore.QUrl.setScheme?4(QString) -QtCore.QUrl.scheme?4() -> QString -QtCore.QUrl.setAuthority?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.authority?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrl.setUserInfo?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.userInfo?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrl.setUserName?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtCore.QUrl.userName?4(unknown-type options=QUrl.FullyDecoded) -> QString -QtCore.QUrl.setPassword?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtCore.QUrl.password?4(unknown-type options=QUrl.FullyDecoded) -> QString -QtCore.QUrl.setHost?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtCore.QUrl.host?4(unknown-type=QUrl.FullyDecoded) -> QString -QtCore.QUrl.setPort?4(int) -QtCore.QUrl.port?4(int defaultPort=-1) -> int -QtCore.QUrl.setPath?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtCore.QUrl.path?4(unknown-type options=QUrl.FullyDecoded) -> QString -QtCore.QUrl.setFragment?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.fragment?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrl.resolved?4(QUrl) -> QUrl -QtCore.QUrl.isRelative?4() -> bool -QtCore.QUrl.isParentOf?4(QUrl) -> bool -QtCore.QUrl.fromLocalFile?4(QString) -> QUrl -QtCore.QUrl.toLocalFile?4() -> QString -QtCore.QUrl.toString?4(unknown-type options=QUrl.FormattingOptions(QUrl.PrettyDecoded)) -> QString -QtCore.QUrl.toString?4(unknown-type) -> QString -QtCore.QUrl.toEncoded?4(unknown-type options=QUrl.FullyEncoded) -> QByteArray -QtCore.QUrl.toEncoded?4(unknown-type) -> QByteArray -QtCore.QUrl.fromEncoded?4(QByteArrayView, QUrl.ParsingMode mode=QUrl.TolerantMode) -> QUrl -QtCore.QUrl.detach?4() -QtCore.QUrl.isDetached?4() -> bool -QtCore.QUrl.fromPercentEncoding?4(QByteArray) -> QString -QtCore.QUrl.toPercentEncoding?4(QString, QByteArray exclude=QByteArray(), QByteArray include=QByteArray()) -> QByteArray -QtCore.QUrl.hasQuery?4() -> bool -QtCore.QUrl.hasFragment?4() -> bool -QtCore.QUrl.errorString?4() -> QString -QtCore.QUrl.fromAce?4(QByteArray, unknown-type options={}) -> QString -QtCore.QUrl.toAce?4(QString, unknown-type options={}) -> QByteArray -QtCore.QUrl.idnWhitelist?4() -> QStringList -QtCore.QUrl.setIdnWhitelist?4(QStringList) -QtCore.QUrl.fromUserInput?4(QString, QString workingDirectory='', unknown-type options=QUrl.DefaultResolution) -> QUrl -QtCore.QUrl.swap?4(QUrl) -QtCore.QUrl.isLocalFile?4() -> bool -QtCore.QUrl.toDisplayString?4(unknown-type options=QUrl.FormattingOptions(QUrl.PrettyDecoded)) -> QString -QtCore.QUrl.toDisplayString?4(unknown-type) -> QString -QtCore.QUrl.setQuery?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) -QtCore.QUrl.setQuery?4(QUrlQuery) -QtCore.QUrl.query?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrl.toStringList?4(unknown-type, unknown-type options=QUrl.FormattingOptions(QUrl.PrettyDecoded)) -> QStringList -QtCore.QUrl.fromStringList?4(QStringList, QUrl.ParsingMode mode=QUrl.TolerantMode) -> unknown-type -QtCore.QUrl.adjusted?4(unknown-type) -> QUrl -QtCore.QUrl.fileName?4(unknown-type options=QUrl.FullyDecoded) -> QString -QtCore.QUrl.matches?4(QUrl, unknown-type) -> bool -QtCore.QUrlQuery?1() -QtCore.QUrlQuery.__init__?1(self) -QtCore.QUrlQuery?1(QUrl) -QtCore.QUrlQuery.__init__?1(self, QUrl) -QtCore.QUrlQuery?1(QString) -QtCore.QUrlQuery.__init__?1(self, QString) -QtCore.QUrlQuery?1(QUrlQuery) -QtCore.QUrlQuery.__init__?1(self, QUrlQuery) -QtCore.QUrlQuery.swap?4(QUrlQuery) -QtCore.QUrlQuery.isEmpty?4() -> bool -QtCore.QUrlQuery.isDetached?4() -> bool -QtCore.QUrlQuery.clear?4() -QtCore.QUrlQuery.query?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrlQuery.setQuery?4(QString) -QtCore.QUrlQuery.toString?4(unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrlQuery.setQueryDelimiters?4(QChar, QChar) -QtCore.QUrlQuery.queryValueDelimiter?4() -> QChar -QtCore.QUrlQuery.queryPairDelimiter?4() -> QChar -QtCore.QUrlQuery.setQueryItems?4(unknown-type) -QtCore.QUrlQuery.queryItems?4(unknown-type options=QUrl.PrettyDecoded) -> unknown-type -QtCore.QUrlQuery.hasQueryItem?4(QString) -> bool -QtCore.QUrlQuery.addQueryItem?4(QString, QString) -QtCore.QUrlQuery.removeQueryItem?4(QString) -QtCore.QUrlQuery.queryItemValue?4(QString, unknown-type options=QUrl.PrettyDecoded) -> QString -QtCore.QUrlQuery.allQueryItemValues?4(QString, unknown-type options=QUrl.PrettyDecoded) -> QStringList -QtCore.QUrlQuery.removeAllQueryItems?4(QString) -QtCore.QUrlQuery.defaultQueryValueDelimiter?4() -> QChar -QtCore.QUrlQuery.defaultQueryPairDelimiter?4() -> QChar -QtCore.QUuid.StringFormat?10 -QtCore.QUuid.StringFormat.WithBraces?10 -QtCore.QUuid.StringFormat.WithoutBraces?10 -QtCore.QUuid.StringFormat.Id128?10 -QtCore.QUuid.Version?10 -QtCore.QUuid.Version.VerUnknown?10 -QtCore.QUuid.Version.Time?10 -QtCore.QUuid.Version.EmbeddedPOSIX?10 -QtCore.QUuid.Version.Md5?10 -QtCore.QUuid.Version.Name?10 -QtCore.QUuid.Version.Random?10 -QtCore.QUuid.Version.Sha1?10 -QtCore.QUuid.Variant?10 -QtCore.QUuid.Variant.VarUnknown?10 -QtCore.QUuid.Variant.NCS?10 -QtCore.QUuid.Variant.DCE?10 -QtCore.QUuid.Variant.Microsoft?10 -QtCore.QUuid.Variant.Reserved?10 -QtCore.QUuid?1() -QtCore.QUuid.__init__?1(self) -QtCore.QUuid?1(QUuid.Id128Bytes, QSysInfo.Endian order=QSysInfo.BigEndian) -QtCore.QUuid.__init__?1(self, QUuid.Id128Bytes, QSysInfo.Endian order=QSysInfo.BigEndian) -QtCore.QUuid?1(int, int, int, int, int, int, int, int, int, int, int) -QtCore.QUuid.__init__?1(self, int, int, int, int, int, int, int, int, int, int, int) -QtCore.QUuid?1(QAnyStringView) -QtCore.QUuid.__init__?1(self, QAnyStringView) -QtCore.QUuid?1(QUuid) -QtCore.QUuid.__init__?1(self, QUuid) -QtCore.QUuid.toString?4(QUuid.StringFormat mode=QUuid.WithBraces) -> QString -QtCore.QUuid.isNull?4() -> bool -QtCore.QUuid.createUuid?4() -> QUuid -QtCore.QUuid.createUuidV3?4(QUuid, QByteArray) -> QUuid -QtCore.QUuid.createUuidV5?4(QUuid, QByteArray) -> QUuid -QtCore.QUuid.createUuidV3?4(QUuid, QString) -> QUuid -QtCore.QUuid.createUuidV5?4(QUuid, QString) -> QUuid -QtCore.QUuid.variant?4() -> QUuid.Variant -QtCore.QUuid.version?4() -> QUuid.Version -QtCore.QUuid.toByteArray?4(QUuid.StringFormat mode=QUuid.WithBraces) -> QByteArray -QtCore.QUuid.toRfc4122?4() -> QByteArray -QtCore.QUuid.fromRfc4122?4(QByteArrayView) -> QUuid -QtCore.QUuid.fromString?4(QAnyStringView) -> QUuid -QtCore.QUuid.Id128Bytes?1() -QtCore.QUuid.Id128Bytes.__init__?1(self) -QtCore.QUuid.Id128Bytes?1(QUuid.Id128Bytes) -QtCore.QUuid.Id128Bytes.__init__?1(self, QUuid.Id128Bytes) -QtCore.QVariant?1() -QtCore.QVariant.__init__?1(self) -QtCore.QVariant?1(Any) -QtCore.QVariant.__init__?1(self, Any) -QtCore.QVariant?1(QVariant) -QtCore.QVariant.__init__?1(self, QVariant) -QtCore.QVariant.value?4() -> Any -QtCore.QVariant.userType?4() -> int -QtCore.QVariant.typeName?4() -> str -QtCore.QVariant.canConvert?4(QMetaType) -> bool -QtCore.QVariant.convert?4(QMetaType) -> bool -QtCore.QVariant.isValid?4() -> bool -QtCore.QVariant.isNull?4() -> bool -QtCore.QVariant.clear?4() -QtCore.QVariant.load?4(QDataStream) -QtCore.QVariant.save?4(QDataStream) -QtCore.QVariant.swap?4(QVariant) -QtCore.QVariant.metaType?4() -> QMetaType -QtCore.QVariant.canView?4(QMetaType) -> bool -QtCore.QVariant.typeId?4() -> int -QtCore.QVersionNumber?1() -QtCore.QVersionNumber.__init__?1(self) -QtCore.QVersionNumber?1(unknown-type) -QtCore.QVersionNumber.__init__?1(self, unknown-type) -QtCore.QVersionNumber?1(int) -QtCore.QVersionNumber.__init__?1(self, int) -QtCore.QVersionNumber?1(int, int) -QtCore.QVersionNumber.__init__?1(self, int, int) -QtCore.QVersionNumber?1(int, int, int) -QtCore.QVersionNumber.__init__?1(self, int, int, int) -QtCore.QVersionNumber?1(QVersionNumber) -QtCore.QVersionNumber.__init__?1(self, QVersionNumber) -QtCore.QVersionNumber.isNull?4() -> bool -QtCore.QVersionNumber.isNormalized?4() -> bool -QtCore.QVersionNumber.majorVersion?4() -> int -QtCore.QVersionNumber.minorVersion?4() -> int -QtCore.QVersionNumber.microVersion?4() -> int -QtCore.QVersionNumber.normalized?4() -> QVersionNumber -QtCore.QVersionNumber.segments?4() -> unknown-type -QtCore.QVersionNumber.segmentAt?4(int) -> int -QtCore.QVersionNumber.segmentCount?4() -> int -QtCore.QVersionNumber.isPrefixOf?4(QVersionNumber) -> bool -QtCore.QVersionNumber.compare?4(QVersionNumber, QVersionNumber) -> int -QtCore.QVersionNumber.commonPrefix?4(QVersionNumber, QVersionNumber) -> QVersionNumber -QtCore.QVersionNumber.toString?4() -> QString -QtCore.QVersionNumber.fromString?4(QAnyStringView) -> (QVersionNumber, int) -QtCore.QWaitCondition?1() -QtCore.QWaitCondition.__init__?1(self) -QtCore.QWaitCondition.wait?4(QMutex, QDeadlineTimer deadline=QDeadlineTimer(QDeadlineTimer.Forever)) -> bool -QtCore.QWaitCondition.wait?4(QMutex, int) -> bool -QtCore.QWaitCondition.wait?4(QReadWriteLock, QDeadlineTimer deadline=QDeadlineTimer(QDeadlineTimer.Forever)) -> bool -QtCore.QWaitCondition.wait?4(QReadWriteLock, int) -> bool -QtCore.QWaitCondition.wakeOne?4() -QtCore.QWaitCondition.wakeAll?4() -QtCore.QXmlStreamAttribute?1() -QtCore.QXmlStreamAttribute.__init__?1(self) -QtCore.QXmlStreamAttribute?1(QString, QString) -QtCore.QXmlStreamAttribute.__init__?1(self, QString, QString) -QtCore.QXmlStreamAttribute?1(QString, QString, QString) -QtCore.QXmlStreamAttribute.__init__?1(self, QString, QString, QString) -QtCore.QXmlStreamAttribute?1(QXmlStreamAttribute) -QtCore.QXmlStreamAttribute.__init__?1(self, QXmlStreamAttribute) -QtCore.QXmlStreamAttribute.namespaceUri?4() -> QStringView -QtCore.QXmlStreamAttribute.name?4() -> QStringView -QtCore.QXmlStreamAttribute.qualifiedName?4() -> QStringView -QtCore.QXmlStreamAttribute.prefix?4() -> QStringView -QtCore.QXmlStreamAttribute.value?4() -> QStringView -QtCore.QXmlStreamAttribute.isDefault?4() -> bool -QtCore.QXmlStreamNamespaceDeclaration?1() -QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self) -QtCore.QXmlStreamNamespaceDeclaration?1(QString, QString) -QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self, QString, QString) -QtCore.QXmlStreamNamespaceDeclaration?1(QXmlStreamNamespaceDeclaration) -QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self, QXmlStreamNamespaceDeclaration) -QtCore.QXmlStreamNamespaceDeclaration.prefix?4() -> QStringView -QtCore.QXmlStreamNamespaceDeclaration.namespaceUri?4() -> QStringView -QtCore.QXmlStreamNotationDeclaration?1() -QtCore.QXmlStreamNotationDeclaration.__init__?1(self) -QtCore.QXmlStreamNotationDeclaration?1(QXmlStreamNotationDeclaration) -QtCore.QXmlStreamNotationDeclaration.__init__?1(self, QXmlStreamNotationDeclaration) -QtCore.QXmlStreamNotationDeclaration.name?4() -> QStringView -QtCore.QXmlStreamNotationDeclaration.systemId?4() -> QStringView -QtCore.QXmlStreamNotationDeclaration.publicId?4() -> QStringView -QtCore.QXmlStreamEntityDeclaration?1() -QtCore.QXmlStreamEntityDeclaration.__init__?1(self) -QtCore.QXmlStreamEntityDeclaration?1(QXmlStreamEntityDeclaration) -QtCore.QXmlStreamEntityDeclaration.__init__?1(self, QXmlStreamEntityDeclaration) -QtCore.QXmlStreamEntityDeclaration.name?4() -> QStringView -QtCore.QXmlStreamEntityDeclaration.notationName?4() -> QStringView -QtCore.QXmlStreamEntityDeclaration.systemId?4() -> QStringView -QtCore.QXmlStreamEntityDeclaration.publicId?4() -> QStringView -QtCore.QXmlStreamEntityDeclaration.value?4() -> QStringView -QtCore.QXmlStreamEntityResolver?1() -QtCore.QXmlStreamEntityResolver.__init__?1(self) -QtCore.QXmlStreamEntityResolver?1(QXmlStreamEntityResolver) -QtCore.QXmlStreamEntityResolver.__init__?1(self, QXmlStreamEntityResolver) -QtCore.QXmlStreamEntityResolver.resolveUndeclaredEntity?4(QString) -> QString -QtCore.QXmlStreamReader.Error?10 -QtCore.QXmlStreamReader.Error.NoError?10 -QtCore.QXmlStreamReader.Error.UnexpectedElementError?10 -QtCore.QXmlStreamReader.Error.CustomError?10 -QtCore.QXmlStreamReader.Error.NotWellFormedError?10 -QtCore.QXmlStreamReader.Error.PrematureEndOfDocumentError?10 -QtCore.QXmlStreamReader.ReadElementTextBehaviour?10 -QtCore.QXmlStreamReader.ReadElementTextBehaviour.ErrorOnUnexpectedElement?10 -QtCore.QXmlStreamReader.ReadElementTextBehaviour.IncludeChildElements?10 -QtCore.QXmlStreamReader.ReadElementTextBehaviour.SkipChildElements?10 -QtCore.QXmlStreamReader.TokenType?10 -QtCore.QXmlStreamReader.TokenType.NoToken?10 -QtCore.QXmlStreamReader.TokenType.Invalid?10 -QtCore.QXmlStreamReader.TokenType.StartDocument?10 -QtCore.QXmlStreamReader.TokenType.EndDocument?10 -QtCore.QXmlStreamReader.TokenType.StartElement?10 -QtCore.QXmlStreamReader.TokenType.EndElement?10 -QtCore.QXmlStreamReader.TokenType.Characters?10 -QtCore.QXmlStreamReader.TokenType.Comment?10 -QtCore.QXmlStreamReader.TokenType.DTD?10 -QtCore.QXmlStreamReader.TokenType.EntityReference?10 -QtCore.QXmlStreamReader.TokenType.ProcessingInstruction?10 -QtCore.QXmlStreamReader?1() -QtCore.QXmlStreamReader.__init__?1(self) -QtCore.QXmlStreamReader?1(QIODevice) -QtCore.QXmlStreamReader.__init__?1(self, QIODevice) -QtCore.QXmlStreamReader?1(QAnyStringView) -QtCore.QXmlStreamReader.__init__?1(self, QAnyStringView) -QtCore.QXmlStreamReader.setDevice?4(QIODevice) -QtCore.QXmlStreamReader.device?4() -> QIODevice -QtCore.QXmlStreamReader.addData?4(QAnyStringView) -QtCore.QXmlStreamReader.clear?4() -QtCore.QXmlStreamReader.atEnd?4() -> bool -QtCore.QXmlStreamReader.readNext?4() -> QXmlStreamReader.TokenType -QtCore.QXmlStreamReader.tokenType?4() -> QXmlStreamReader.TokenType -QtCore.QXmlStreamReader.tokenString?4() -> QString -QtCore.QXmlStreamReader.setNamespaceProcessing?4(bool) -QtCore.QXmlStreamReader.namespaceProcessing?4() -> bool -QtCore.QXmlStreamReader.isStartDocument?4() -> bool -QtCore.QXmlStreamReader.isEndDocument?4() -> bool -QtCore.QXmlStreamReader.isStartElement?4() -> bool -QtCore.QXmlStreamReader.isEndElement?4() -> bool -QtCore.QXmlStreamReader.isCharacters?4() -> bool -QtCore.QXmlStreamReader.isWhitespace?4() -> bool -QtCore.QXmlStreamReader.isCDATA?4() -> bool -QtCore.QXmlStreamReader.isComment?4() -> bool -QtCore.QXmlStreamReader.isDTD?4() -> bool -QtCore.QXmlStreamReader.isEntityReference?4() -> bool -QtCore.QXmlStreamReader.isProcessingInstruction?4() -> bool -QtCore.QXmlStreamReader.isStandaloneDocument?4() -> bool -QtCore.QXmlStreamReader.documentVersion?4() -> QStringView -QtCore.QXmlStreamReader.documentEncoding?4() -> QStringView -QtCore.QXmlStreamReader.lineNumber?4() -> int -QtCore.QXmlStreamReader.columnNumber?4() -> int -QtCore.QXmlStreamReader.characterOffset?4() -> int -QtCore.QXmlStreamReader.attributes?4() -> QXmlStreamAttributes -QtCore.QXmlStreamReader.readElementText?4(QXmlStreamReader.ReadElementTextBehaviour behaviour=QXmlStreamReader.ErrorOnUnexpectedElement) -> QString -QtCore.QXmlStreamReader.name?4() -> QStringView -QtCore.QXmlStreamReader.namespaceUri?4() -> QStringView -QtCore.QXmlStreamReader.qualifiedName?4() -> QStringView -QtCore.QXmlStreamReader.prefix?4() -> QStringView -QtCore.QXmlStreamReader.processingInstructionTarget?4() -> QStringView -QtCore.QXmlStreamReader.processingInstructionData?4() -> QStringView -QtCore.QXmlStreamReader.text?4() -> QStringView -QtCore.QXmlStreamReader.namespaceDeclarations?4() -> unknown-type -QtCore.QXmlStreamReader.addExtraNamespaceDeclaration?4(QXmlStreamNamespaceDeclaration) -QtCore.QXmlStreamReader.addExtraNamespaceDeclarations?4(unknown-type) -QtCore.QXmlStreamReader.notationDeclarations?4() -> unknown-type -QtCore.QXmlStreamReader.entityDeclarations?4() -> unknown-type -QtCore.QXmlStreamReader.dtdName?4() -> QStringView -QtCore.QXmlStreamReader.dtdPublicId?4() -> QStringView -QtCore.QXmlStreamReader.dtdSystemId?4() -> QStringView -QtCore.QXmlStreamReader.raiseError?4(QString message='') -QtCore.QXmlStreamReader.errorString?4() -> QString -QtCore.QXmlStreamReader.error?4() -> QXmlStreamReader.Error -QtCore.QXmlStreamReader.hasError?4() -> bool -QtCore.QXmlStreamReader.setEntityResolver?4(QXmlStreamEntityResolver) -QtCore.QXmlStreamReader.entityResolver?4() -> QXmlStreamEntityResolver -QtCore.QXmlStreamReader.readNextStartElement?4() -> bool -QtCore.QXmlStreamReader.skipCurrentElement?4() -QtCore.QXmlStreamReader.entityExpansionLimit?4() -> int -QtCore.QXmlStreamReader.setEntityExpansionLimit?4(int) -QtCore.QXmlStreamReader.hasStandaloneDeclaration?4() -> bool -QtCore.QXmlStreamWriter?1() -QtCore.QXmlStreamWriter.__init__?1(self) -QtCore.QXmlStreamWriter?1(QIODevice) -QtCore.QXmlStreamWriter.__init__?1(self, QIODevice) -QtCore.QXmlStreamWriter?1(QByteArray) -QtCore.QXmlStreamWriter.__init__?1(self, QByteArray) -QtCore.QXmlStreamWriter.setDevice?4(QIODevice) -QtCore.QXmlStreamWriter.device?4() -> QIODevice -QtCore.QXmlStreamWriter.setAutoFormatting?4(bool) -QtCore.QXmlStreamWriter.autoFormatting?4() -> bool -QtCore.QXmlStreamWriter.setAutoFormattingIndent?4(int) -QtCore.QXmlStreamWriter.autoFormattingIndent?4() -> int -QtCore.QXmlStreamWriter.writeAttribute?4(QAnyStringView, QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeAttribute?4(QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeAttribute?4(QXmlStreamAttribute) -QtCore.QXmlStreamWriter.writeAttributes?4(QXmlStreamAttributes) -QtCore.QXmlStreamWriter.writeCDATA?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeCharacters?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeComment?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeDTD?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeEmptyElement?4(QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeEmptyElement?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeTextElement?4(QAnyStringView, QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeTextElement?4(QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeEndDocument?4() -QtCore.QXmlStreamWriter.writeEndElement?4() -QtCore.QXmlStreamWriter.writeEntityReference?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeNamespace?4(QAnyStringView, QAnyStringView prefix='') -QtCore.QXmlStreamWriter.writeDefaultNamespace?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeProcessingInstruction?4(QAnyStringView, QAnyStringView data='') -QtCore.QXmlStreamWriter.writeStartDocument?4(QAnyStringView, bool) -QtCore.QXmlStreamWriter.writeStartDocument?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeStartDocument?4() -QtCore.QXmlStreamWriter.writeStartElement?4(QAnyStringView, QAnyStringView) -QtCore.QXmlStreamWriter.writeStartElement?4(QAnyStringView) -QtCore.QXmlStreamWriter.writeCurrentToken?4(QXmlStreamReader) -QtCore.QXmlStreamWriter.hasError?4() -> bool -QtCore.QXmlStreamAttributes?1() -QtCore.QXmlStreamAttributes.__init__?1(self) -QtCore.QXmlStreamAttributes?1(QXmlStreamAttributes) -QtCore.QXmlStreamAttributes.__init__?1(self, QXmlStreamAttributes) -QtCore.QXmlStreamAttributes.value?4(QAnyStringView, QAnyStringView) -> QStringView -QtCore.QXmlStreamAttributes.value?4(QAnyStringView) -> QStringView -QtCore.QXmlStreamAttributes.append?4(QString, QString, QString) -QtCore.QXmlStreamAttributes.append?4(QString, QString) -QtCore.QXmlStreamAttributes.hasAttribute?4(QAnyStringView, QAnyStringView) -> bool -QtCore.QXmlStreamAttributes.hasAttribute?4(QAnyStringView) -> bool -QtCore.QXmlStreamAttributes.append?4(QXmlStreamAttribute) -QtCore.QXmlStreamAttributes.at?4(int) -> QXmlStreamAttribute -QtCore.QXmlStreamAttributes.clear?4() -QtCore.QXmlStreamAttributes.contains?4(QXmlStreamAttribute) -> bool -QtCore.QXmlStreamAttributes.count?4(QXmlStreamAttribute) -> int -QtCore.QXmlStreamAttributes.count?4() -> int -QtCore.QXmlStreamAttributes.data?4() -> PyQt6.sip.voidptr -QtCore.QXmlStreamAttributes.fill?4(QXmlStreamAttribute, int size=-1) -QtCore.QXmlStreamAttributes.first?4() -> QXmlStreamAttribute -QtCore.QXmlStreamAttributes.indexOf?4(QXmlStreamAttribute, int from=0) -> int -QtCore.QXmlStreamAttributes.insert?4(int, QXmlStreamAttribute) -QtCore.QXmlStreamAttributes.isEmpty?4() -> bool -QtCore.QXmlStreamAttributes.last?4() -> QXmlStreamAttribute -QtCore.QXmlStreamAttributes.lastIndexOf?4(QXmlStreamAttribute, int from=-1) -> int -QtCore.QXmlStreamAttributes.prepend?4(QXmlStreamAttribute) -QtCore.QXmlStreamAttributes.remove?4(int) -QtCore.QXmlStreamAttributes.remove?4(int, int) -QtCore.QXmlStreamAttributes.resize?4(int) -QtCore.QXmlStreamAttributes.replace?4(int, QXmlStreamAttribute) -QtCore.QXmlStreamAttributes.size?4() -> int -QtCore.QMutexLocker?1(QMutex) -QtCore.QMutexLocker.__init__?1(self, QMutex) -QtCore.QMutexLocker?1(QRecursiveMutex) -QtCore.QMutexLocker.__init__?1(self, QRecursiveMutex) -QtCore.QMutexLocker.mutex?4() -> Any -QtCore.QMutexLocker.unlock?4() -QtCore.QMutexLocker.relock?4() -QtCore.QMutexLocker.__enter__?4() -> Any -QtCore.QMutexLocker.__exit__?4(Any, Any, Any) -QtNetwork.QOcspRevocationReason?10 -QtNetwork.QOcspRevocationReason.None_?10 -QtNetwork.QOcspRevocationReason.Unspecified?10 -QtNetwork.QOcspRevocationReason.KeyCompromise?10 -QtNetwork.QOcspRevocationReason.CACompromise?10 -QtNetwork.QOcspRevocationReason.AffiliationChanged?10 -QtNetwork.QOcspRevocationReason.Superseded?10 -QtNetwork.QOcspRevocationReason.CessationOfOperation?10 -QtNetwork.QOcspRevocationReason.CertificateHold?10 -QtNetwork.QOcspRevocationReason.RemoveFromCRL?10 -QtNetwork.QOcspCertificateStatus?10 -QtNetwork.QOcspCertificateStatus.Good?10 -QtNetwork.QOcspCertificateStatus.Revoked?10 -QtNetwork.QOcspCertificateStatus.Unknown?10 -QtNetwork.QNetworkCacheMetaData?1() -QtNetwork.QNetworkCacheMetaData.__init__?1(self) -QtNetwork.QNetworkCacheMetaData?1(QNetworkCacheMetaData) -QtNetwork.QNetworkCacheMetaData.__init__?1(self, QNetworkCacheMetaData) -QtNetwork.QNetworkCacheMetaData.isValid?4() -> bool -QtNetwork.QNetworkCacheMetaData.url?4() -> QUrl -QtNetwork.QNetworkCacheMetaData.setUrl?4(QUrl) -QtNetwork.QNetworkCacheMetaData.rawHeaders?4() -> unknown-type -QtNetwork.QNetworkCacheMetaData.setRawHeaders?4(unknown-type) -QtNetwork.QNetworkCacheMetaData.lastModified?4() -> QDateTime -QtNetwork.QNetworkCacheMetaData.setLastModified?4(QDateTime) -QtNetwork.QNetworkCacheMetaData.expirationDate?4() -> QDateTime -QtNetwork.QNetworkCacheMetaData.setExpirationDate?4(QDateTime) -QtNetwork.QNetworkCacheMetaData.saveToDisk?4() -> bool -QtNetwork.QNetworkCacheMetaData.setSaveToDisk?4(bool) -QtNetwork.QNetworkCacheMetaData.attributes?4() -> unknown-type -QtNetwork.QNetworkCacheMetaData.setAttributes?4(unknown-type) -QtNetwork.QNetworkCacheMetaData.swap?4(QNetworkCacheMetaData) -QtNetwork.QAbstractNetworkCache?1(QObject parent=None) -QtNetwork.QAbstractNetworkCache.__init__?1(self, QObject parent=None) -QtNetwork.QAbstractNetworkCache.metaData?4(QUrl) -> QNetworkCacheMetaData -QtNetwork.QAbstractNetworkCache.updateMetaData?4(QNetworkCacheMetaData) -QtNetwork.QAbstractNetworkCache.data?4(QUrl) -> QIODevice -QtNetwork.QAbstractNetworkCache.remove?4(QUrl) -> bool -QtNetwork.QAbstractNetworkCache.cacheSize?4() -> int -QtNetwork.QAbstractNetworkCache.prepare?4(QNetworkCacheMetaData) -> QIODevice -QtNetwork.QAbstractNetworkCache.insert?4(QIODevice) -QtNetwork.QAbstractNetworkCache.clear?4() -QtNetwork.QAbstractSocket.PauseMode?10 -QtNetwork.QAbstractSocket.PauseMode.PauseNever?10 -QtNetwork.QAbstractSocket.PauseMode.PauseOnSslErrors?10 -QtNetwork.QAbstractSocket.BindFlag?10 -QtNetwork.QAbstractSocket.BindFlag.DefaultForPlatform?10 -QtNetwork.QAbstractSocket.BindFlag.ShareAddress?10 -QtNetwork.QAbstractSocket.BindFlag.DontShareAddress?10 -QtNetwork.QAbstractSocket.BindFlag.ReuseAddressHint?10 -QtNetwork.QAbstractSocket.SocketOption?10 -QtNetwork.QAbstractSocket.SocketOption.LowDelayOption?10 -QtNetwork.QAbstractSocket.SocketOption.KeepAliveOption?10 -QtNetwork.QAbstractSocket.SocketOption.MulticastTtlOption?10 -QtNetwork.QAbstractSocket.SocketOption.MulticastLoopbackOption?10 -QtNetwork.QAbstractSocket.SocketOption.TypeOfServiceOption?10 -QtNetwork.QAbstractSocket.SocketOption.SendBufferSizeSocketOption?10 -QtNetwork.QAbstractSocket.SocketOption.ReceiveBufferSizeSocketOption?10 -QtNetwork.QAbstractSocket.SocketOption.PathMtuSocketOption?10 -QtNetwork.QAbstractSocket.SocketState?10 -QtNetwork.QAbstractSocket.SocketState.UnconnectedState?10 -QtNetwork.QAbstractSocket.SocketState.HostLookupState?10 -QtNetwork.QAbstractSocket.SocketState.ConnectingState?10 -QtNetwork.QAbstractSocket.SocketState.ConnectedState?10 -QtNetwork.QAbstractSocket.SocketState.BoundState?10 -QtNetwork.QAbstractSocket.SocketState.ListeningState?10 -QtNetwork.QAbstractSocket.SocketState.ClosingState?10 -QtNetwork.QAbstractSocket.SocketError?10 -QtNetwork.QAbstractSocket.SocketError.ConnectionRefusedError?10 -QtNetwork.QAbstractSocket.SocketError.RemoteHostClosedError?10 -QtNetwork.QAbstractSocket.SocketError.HostNotFoundError?10 -QtNetwork.QAbstractSocket.SocketError.SocketAccessError?10 -QtNetwork.QAbstractSocket.SocketError.SocketResourceError?10 -QtNetwork.QAbstractSocket.SocketError.SocketTimeoutError?10 -QtNetwork.QAbstractSocket.SocketError.DatagramTooLargeError?10 -QtNetwork.QAbstractSocket.SocketError.NetworkError?10 -QtNetwork.QAbstractSocket.SocketError.AddressInUseError?10 -QtNetwork.QAbstractSocket.SocketError.SocketAddressNotAvailableError?10 -QtNetwork.QAbstractSocket.SocketError.UnsupportedSocketOperationError?10 -QtNetwork.QAbstractSocket.SocketError.UnfinishedSocketOperationError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyAuthenticationRequiredError?10 -QtNetwork.QAbstractSocket.SocketError.SslHandshakeFailedError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyConnectionRefusedError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyConnectionClosedError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyConnectionTimeoutError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyNotFoundError?10 -QtNetwork.QAbstractSocket.SocketError.ProxyProtocolError?10 -QtNetwork.QAbstractSocket.SocketError.OperationError?10 -QtNetwork.QAbstractSocket.SocketError.SslInternalError?10 -QtNetwork.QAbstractSocket.SocketError.SslInvalidUserDataError?10 -QtNetwork.QAbstractSocket.SocketError.TemporaryError?10 -QtNetwork.QAbstractSocket.SocketError.UnknownSocketError?10 -QtNetwork.QAbstractSocket.NetworkLayerProtocol?10 -QtNetwork.QAbstractSocket.NetworkLayerProtocol.IPv4Protocol?10 -QtNetwork.QAbstractSocket.NetworkLayerProtocol.IPv6Protocol?10 -QtNetwork.QAbstractSocket.NetworkLayerProtocol.AnyIPProtocol?10 -QtNetwork.QAbstractSocket.NetworkLayerProtocol.UnknownNetworkLayerProtocol?10 -QtNetwork.QAbstractSocket.SocketType?10 -QtNetwork.QAbstractSocket.SocketType.TcpSocket?10 -QtNetwork.QAbstractSocket.SocketType.UdpSocket?10 -QtNetwork.QAbstractSocket.SocketType.SctpSocket?10 -QtNetwork.QAbstractSocket.SocketType.UnknownSocketType?10 -QtNetwork.QAbstractSocket?1(QAbstractSocket.SocketType, QObject) -QtNetwork.QAbstractSocket.__init__?1(self, QAbstractSocket.SocketType, QObject) -QtNetwork.QAbstractSocket.connectToHost?4(QString, int, unknown-type mode=QIODeviceBase.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) -QtNetwork.QAbstractSocket.connectToHost?4(QHostAddress, int, unknown-type mode=QIODeviceBase.ReadWrite) -QtNetwork.QAbstractSocket.disconnectFromHost?4() -QtNetwork.QAbstractSocket.isValid?4() -> bool -QtNetwork.QAbstractSocket.bytesAvailable?4() -> int -QtNetwork.QAbstractSocket.bytesToWrite?4() -> int -QtNetwork.QAbstractSocket.localPort?4() -> int -QtNetwork.QAbstractSocket.localAddress?4() -> QHostAddress -QtNetwork.QAbstractSocket.peerPort?4() -> int -QtNetwork.QAbstractSocket.peerAddress?4() -> QHostAddress -QtNetwork.QAbstractSocket.peerName?4() -> QString -QtNetwork.QAbstractSocket.readBufferSize?4() -> int -QtNetwork.QAbstractSocket.setReadBufferSize?4(int) -QtNetwork.QAbstractSocket.abort?4() -QtNetwork.QAbstractSocket.setSocketDescriptor?4(qintptr, QAbstractSocket.SocketState state=QAbstractSocket.ConnectedState, unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtNetwork.QAbstractSocket.socketDescriptor?4() -> qintptr -QtNetwork.QAbstractSocket.socketType?4() -> QAbstractSocket.SocketType -QtNetwork.QAbstractSocket.state?4() -> QAbstractSocket.SocketState -QtNetwork.QAbstractSocket.error?4() -> QAbstractSocket.SocketError -QtNetwork.QAbstractSocket.close?4() -QtNetwork.QAbstractSocket.isSequential?4() -> bool -QtNetwork.QAbstractSocket.flush?4() -> bool -QtNetwork.QAbstractSocket.waitForConnected?4(int msecs=30000) -> bool -QtNetwork.QAbstractSocket.waitForReadyRead?4(int msecs=30000) -> bool -QtNetwork.QAbstractSocket.waitForBytesWritten?4(int msecs=30000) -> bool -QtNetwork.QAbstractSocket.waitForDisconnected?4(int msecs=30000) -> bool -QtNetwork.QAbstractSocket.setProxy?4(QNetworkProxy) -QtNetwork.QAbstractSocket.proxy?4() -> QNetworkProxy -QtNetwork.QAbstractSocket.hostFound?4() -QtNetwork.QAbstractSocket.connected?4() -QtNetwork.QAbstractSocket.disconnected?4() -QtNetwork.QAbstractSocket.stateChanged?4(QAbstractSocket.SocketState) -QtNetwork.QAbstractSocket.errorOccurred?4(QAbstractSocket.SocketError) -QtNetwork.QAbstractSocket.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) -QtNetwork.QAbstractSocket.readData?4(int) -> Any -QtNetwork.QAbstractSocket.readLineData?4(int) -> Any -QtNetwork.QAbstractSocket.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtNetwork.QAbstractSocket.skipData?4(int) -> int -QtNetwork.QAbstractSocket.setSocketState?4(QAbstractSocket.SocketState) -QtNetwork.QAbstractSocket.setSocketError?4(QAbstractSocket.SocketError) -QtNetwork.QAbstractSocket.setLocalPort?4(int) -QtNetwork.QAbstractSocket.setLocalAddress?4(QHostAddress) -QtNetwork.QAbstractSocket.setPeerPort?4(int) -QtNetwork.QAbstractSocket.setPeerAddress?4(QHostAddress) -QtNetwork.QAbstractSocket.setPeerName?4(QString) -QtNetwork.QAbstractSocket.setSocketOption?4(QAbstractSocket.SocketOption, QVariant) -QtNetwork.QAbstractSocket.socketOption?4(QAbstractSocket.SocketOption) -> QVariant -QtNetwork.QAbstractSocket.resume?4() -QtNetwork.QAbstractSocket.pauseMode?4() -> unknown-type -QtNetwork.QAbstractSocket.setPauseMode?4(unknown-type) -QtNetwork.QAbstractSocket.bind?4(QHostAddress, int port=0, unknown-type mode=QAbstractSocket.DefaultForPlatform) -> bool -QtNetwork.QAbstractSocket.bind?4(int port=0, unknown-type mode=QAbstractSocket.DefaultForPlatform) -> bool -QtNetwork.QAbstractSocket.protocolTag?4() -> QString -QtNetwork.QAbstractSocket.setProtocolTag?4(QString) -QtNetwork.QAuthenticator?1() -QtNetwork.QAuthenticator.__init__?1(self) -QtNetwork.QAuthenticator?1(QAuthenticator) -QtNetwork.QAuthenticator.__init__?1(self, QAuthenticator) -QtNetwork.QAuthenticator.user?4() -> QString -QtNetwork.QAuthenticator.setUser?4(QString) -QtNetwork.QAuthenticator.password?4() -> QString -QtNetwork.QAuthenticator.setPassword?4(QString) -QtNetwork.QAuthenticator.realm?4() -> QString -QtNetwork.QAuthenticator.isNull?4() -> bool -QtNetwork.QAuthenticator.option?4(QString) -> QVariant -QtNetwork.QAuthenticator.options?4() -> unknown-type -QtNetwork.QAuthenticator.setOption?4(QString, QVariant) -QtNetwork.QDnsDomainNameRecord?1() -QtNetwork.QDnsDomainNameRecord.__init__?1(self) -QtNetwork.QDnsDomainNameRecord?1(QDnsDomainNameRecord) -QtNetwork.QDnsDomainNameRecord.__init__?1(self, QDnsDomainNameRecord) -QtNetwork.QDnsDomainNameRecord.swap?4(QDnsDomainNameRecord) -QtNetwork.QDnsDomainNameRecord.name?4() -> QString -QtNetwork.QDnsDomainNameRecord.timeToLive?4() -> int -QtNetwork.QDnsDomainNameRecord.value?4() -> QString -QtNetwork.QDnsHostAddressRecord?1() -QtNetwork.QDnsHostAddressRecord.__init__?1(self) -QtNetwork.QDnsHostAddressRecord?1(QDnsHostAddressRecord) -QtNetwork.QDnsHostAddressRecord.__init__?1(self, QDnsHostAddressRecord) -QtNetwork.QDnsHostAddressRecord.swap?4(QDnsHostAddressRecord) -QtNetwork.QDnsHostAddressRecord.name?4() -> QString -QtNetwork.QDnsHostAddressRecord.timeToLive?4() -> int -QtNetwork.QDnsHostAddressRecord.value?4() -> QHostAddress -QtNetwork.QDnsMailExchangeRecord?1() -QtNetwork.QDnsMailExchangeRecord.__init__?1(self) -QtNetwork.QDnsMailExchangeRecord?1(QDnsMailExchangeRecord) -QtNetwork.QDnsMailExchangeRecord.__init__?1(self, QDnsMailExchangeRecord) -QtNetwork.QDnsMailExchangeRecord.swap?4(QDnsMailExchangeRecord) -QtNetwork.QDnsMailExchangeRecord.exchange?4() -> QString -QtNetwork.QDnsMailExchangeRecord.name?4() -> QString -QtNetwork.QDnsMailExchangeRecord.preference?4() -> int -QtNetwork.QDnsMailExchangeRecord.timeToLive?4() -> int -QtNetwork.QDnsServiceRecord?1() -QtNetwork.QDnsServiceRecord.__init__?1(self) -QtNetwork.QDnsServiceRecord?1(QDnsServiceRecord) -QtNetwork.QDnsServiceRecord.__init__?1(self, QDnsServiceRecord) -QtNetwork.QDnsServiceRecord.swap?4(QDnsServiceRecord) -QtNetwork.QDnsServiceRecord.name?4() -> QString -QtNetwork.QDnsServiceRecord.port?4() -> int -QtNetwork.QDnsServiceRecord.priority?4() -> int -QtNetwork.QDnsServiceRecord.target?4() -> QString -QtNetwork.QDnsServiceRecord.timeToLive?4() -> int -QtNetwork.QDnsServiceRecord.weight?4() -> int -QtNetwork.QDnsTextRecord?1() -QtNetwork.QDnsTextRecord.__init__?1(self) -QtNetwork.QDnsTextRecord?1(QDnsTextRecord) -QtNetwork.QDnsTextRecord.__init__?1(self, QDnsTextRecord) -QtNetwork.QDnsTextRecord.swap?4(QDnsTextRecord) -QtNetwork.QDnsTextRecord.name?4() -> QString -QtNetwork.QDnsTextRecord.timeToLive?4() -> int -QtNetwork.QDnsTextRecord.values?4() -> unknown-type -QtNetwork.QDnsLookup.Type?10 -QtNetwork.QDnsLookup.Type.A?10 -QtNetwork.QDnsLookup.Type.AAAA?10 -QtNetwork.QDnsLookup.Type.ANY?10 -QtNetwork.QDnsLookup.Type.CNAME?10 -QtNetwork.QDnsLookup.Type.MX?10 -QtNetwork.QDnsLookup.Type.NS?10 -QtNetwork.QDnsLookup.Type.PTR?10 -QtNetwork.QDnsLookup.Type.SRV?10 -QtNetwork.QDnsLookup.Type.TXT?10 -QtNetwork.QDnsLookup.Error?10 -QtNetwork.QDnsLookup.Error.NoError?10 -QtNetwork.QDnsLookup.Error.ResolverError?10 -QtNetwork.QDnsLookup.Error.OperationCancelledError?10 -QtNetwork.QDnsLookup.Error.InvalidRequestError?10 -QtNetwork.QDnsLookup.Error.InvalidReplyError?10 -QtNetwork.QDnsLookup.Error.ServerFailureError?10 -QtNetwork.QDnsLookup.Error.ServerRefusedError?10 -QtNetwork.QDnsLookup.Error.NotFoundError?10 -QtNetwork.QDnsLookup.Error.TimeoutError?10 -QtNetwork.QDnsLookup?1(QObject parent=None) -QtNetwork.QDnsLookup.__init__?1(self, QObject parent=None) -QtNetwork.QDnsLookup?1(QDnsLookup.Type, QString, QObject parent=None) -QtNetwork.QDnsLookup.__init__?1(self, QDnsLookup.Type, QString, QObject parent=None) -QtNetwork.QDnsLookup?1(QDnsLookup.Type, QString, QHostAddress, QObject parent=None) -QtNetwork.QDnsLookup.__init__?1(self, QDnsLookup.Type, QString, QHostAddress, QObject parent=None) -QtNetwork.QDnsLookup?1(QDnsLookup.Type, QString, QHostAddress, int, QObject parent=None) -QtNetwork.QDnsLookup.__init__?1(self, QDnsLookup.Type, QString, QHostAddress, int, QObject parent=None) -QtNetwork.QDnsLookup.error?4() -> QDnsLookup.Error -QtNetwork.QDnsLookup.errorString?4() -> QString -QtNetwork.QDnsLookup.isFinished?4() -> bool -QtNetwork.QDnsLookup.name?4() -> QString -QtNetwork.QDnsLookup.setName?4(QString) -QtNetwork.QDnsLookup.type?4() -> QDnsLookup.Type -QtNetwork.QDnsLookup.setType?4(QDnsLookup.Type) -QtNetwork.QDnsLookup.canonicalNameRecords?4() -> unknown-type -QtNetwork.QDnsLookup.hostAddressRecords?4() -> unknown-type -QtNetwork.QDnsLookup.mailExchangeRecords?4() -> unknown-type -QtNetwork.QDnsLookup.nameServerRecords?4() -> unknown-type -QtNetwork.QDnsLookup.pointerRecords?4() -> unknown-type -QtNetwork.QDnsLookup.serviceRecords?4() -> unknown-type -QtNetwork.QDnsLookup.textRecords?4() -> unknown-type -QtNetwork.QDnsLookup.abort?4() -QtNetwork.QDnsLookup.lookup?4() -QtNetwork.QDnsLookup.finished?4() -QtNetwork.QDnsLookup.nameChanged?4(QString) -QtNetwork.QDnsLookup.typeChanged?4(QDnsLookup.Type) -QtNetwork.QDnsLookup.nameserver?4() -> QHostAddress -QtNetwork.QDnsLookup.setNameserver?4(QHostAddress) -QtNetwork.QDnsLookup.setNameserver?4(QHostAddress, int) -QtNetwork.QDnsLookup.nameserverChanged?4(QHostAddress) -QtNetwork.QDnsLookup.nameserverPort?4() -> int -QtNetwork.QDnsLookup.setNameserverPort?4(int) -QtNetwork.QDnsLookup.nameserverPortChanged?4(int) -QtNetwork.QHostAddress.ConversionModeFlag?10 -QtNetwork.QHostAddress.ConversionModeFlag.ConvertV4MappedToIPv4?10 -QtNetwork.QHostAddress.ConversionModeFlag.ConvertV4CompatToIPv4?10 -QtNetwork.QHostAddress.ConversionModeFlag.ConvertUnspecifiedAddress?10 -QtNetwork.QHostAddress.ConversionModeFlag.ConvertLocalHost?10 -QtNetwork.QHostAddress.ConversionModeFlag.TolerantConversion?10 -QtNetwork.QHostAddress.ConversionModeFlag.StrictConversion?10 -QtNetwork.QHostAddress.SpecialAddress?10 -QtNetwork.QHostAddress.SpecialAddress.Null?10 -QtNetwork.QHostAddress.SpecialAddress.Broadcast?10 -QtNetwork.QHostAddress.SpecialAddress.LocalHost?10 -QtNetwork.QHostAddress.SpecialAddress.LocalHostIPv6?10 -QtNetwork.QHostAddress.SpecialAddress.AnyIPv4?10 -QtNetwork.QHostAddress.SpecialAddress.AnyIPv6?10 -QtNetwork.QHostAddress.SpecialAddress.Any?10 -QtNetwork.QHostAddress?1() -QtNetwork.QHostAddress.__init__?1(self) -QtNetwork.QHostAddress?1(QHostAddress.SpecialAddress) -QtNetwork.QHostAddress.__init__?1(self, QHostAddress.SpecialAddress) -QtNetwork.QHostAddress?1(int) -QtNetwork.QHostAddress.__init__?1(self, int) -QtNetwork.QHostAddress?1(QString) -QtNetwork.QHostAddress.__init__?1(self, QString) -QtNetwork.QHostAddress?1(Q_IPV6ADDR) -QtNetwork.QHostAddress.__init__?1(self, Q_IPV6ADDR) -QtNetwork.QHostAddress?1(QHostAddress) -QtNetwork.QHostAddress.__init__?1(self, QHostAddress) -QtNetwork.QHostAddress.setAddress?4(QHostAddress.SpecialAddress) -QtNetwork.QHostAddress.setAddress?4(int) -QtNetwork.QHostAddress.setAddress?4(QString) -> bool -QtNetwork.QHostAddress.setAddress?4(Q_IPV6ADDR) -QtNetwork.QHostAddress.protocol?4() -> QAbstractSocket.NetworkLayerProtocol -QtNetwork.QHostAddress.toIPv4Address?4() -> (int, bool) -QtNetwork.QHostAddress.toIPv6Address?4() -> Q_IPV6ADDR -QtNetwork.QHostAddress.toString?4() -> QString -QtNetwork.QHostAddress.scopeId?4() -> QString -QtNetwork.QHostAddress.setScopeId?4(QString) -QtNetwork.QHostAddress.isNull?4() -> bool -QtNetwork.QHostAddress.clear?4() -QtNetwork.QHostAddress.isInSubnet?4(QHostAddress, int) -> bool -QtNetwork.QHostAddress.isInSubnet?4(unknown-type) -> bool -QtNetwork.QHostAddress.isLoopback?4() -> bool -QtNetwork.QHostAddress.parseSubnet?4(QString) -> unknown-type -QtNetwork.QHostAddress.swap?4(QHostAddress) -QtNetwork.QHostAddress.isMulticast?4() -> bool -QtNetwork.QHostAddress.isEqual?4(QHostAddress, unknown-type mode=QHostAddress.TolerantConversion) -> bool -QtNetwork.QHostAddress.isGlobal?4() -> bool -QtNetwork.QHostAddress.isLinkLocal?4() -> bool -QtNetwork.QHostAddress.isSiteLocal?4() -> bool -QtNetwork.QHostAddress.isUniqueLocalUnicast?4() -> bool -QtNetwork.QHostAddress.isBroadcast?4() -> bool -QtNetwork.QHostAddress.isPrivateUse?4() -> bool -QtNetwork.QHostInfo.HostInfoError?10 -QtNetwork.QHostInfo.HostInfoError.NoError?10 -QtNetwork.QHostInfo.HostInfoError.HostNotFound?10 -QtNetwork.QHostInfo.HostInfoError.UnknownError?10 -QtNetwork.QHostInfo?1(int id=-1) -QtNetwork.QHostInfo.__init__?1(self, int id=-1) -QtNetwork.QHostInfo?1(QHostInfo) -QtNetwork.QHostInfo.__init__?1(self, QHostInfo) -QtNetwork.QHostInfo.hostName?4() -> QString -QtNetwork.QHostInfo.setHostName?4(QString) -QtNetwork.QHostInfo.addresses?4() -> unknown-type -QtNetwork.QHostInfo.setAddresses?4(unknown-type) -QtNetwork.QHostInfo.error?4() -> QHostInfo.HostInfoError -QtNetwork.QHostInfo.setError?4(QHostInfo.HostInfoError) -QtNetwork.QHostInfo.errorString?4() -> QString -QtNetwork.QHostInfo.setErrorString?4(QString) -QtNetwork.QHostInfo.setLookupId?4(int) -QtNetwork.QHostInfo.lookupId?4() -> int -QtNetwork.QHostInfo.lookupHost?4(QString, Any) -> int -QtNetwork.QHostInfo.abortHostLookup?4(int) -QtNetwork.QHostInfo.fromName?4(QString) -> QHostInfo -QtNetwork.QHostInfo.localHostName?4() -> QString -QtNetwork.QHostInfo.localDomainName?4() -> QString -QtNetwork.QHostInfo.swap?4(QHostInfo) -QtNetwork.QHstsPolicy.PolicyFlag?10 -QtNetwork.QHstsPolicy.PolicyFlag.IncludeSubDomains?10 -QtNetwork.QHstsPolicy?1() -QtNetwork.QHstsPolicy.__init__?1(self) -QtNetwork.QHstsPolicy?1(QDateTime, unknown-type, QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtNetwork.QHstsPolicy.__init__?1(self, QDateTime, unknown-type, QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtNetwork.QHstsPolicy?1(QHstsPolicy) -QtNetwork.QHstsPolicy.__init__?1(self, QHstsPolicy) -QtNetwork.QHstsPolicy.swap?4(QHstsPolicy) -QtNetwork.QHstsPolicy.setHost?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) -QtNetwork.QHstsPolicy.host?4(unknown-type options=QUrl.FullyDecoded) -> QString -QtNetwork.QHstsPolicy.setExpiry?4(QDateTime) -QtNetwork.QHstsPolicy.expiry?4() -> QDateTime -QtNetwork.QHstsPolicy.setIncludesSubDomains?4(bool) -QtNetwork.QHstsPolicy.includesSubDomains?4() -> bool -QtNetwork.QHstsPolicy.isExpired?4() -> bool -QtNetwork.QHttp1Configuration?1() -QtNetwork.QHttp1Configuration.__init__?1(self) -QtNetwork.QHttp1Configuration?1(QHttp1Configuration) -QtNetwork.QHttp1Configuration.__init__?1(self, QHttp1Configuration) -QtNetwork.QHttp1Configuration.setNumberOfConnectionsPerHost?4(int) -QtNetwork.QHttp1Configuration.numberOfConnectionsPerHost?4() -> int -QtNetwork.QHttp1Configuration.swap?4(QHttp1Configuration) -QtNetwork.QHttp2Configuration?1() -QtNetwork.QHttp2Configuration.__init__?1(self) -QtNetwork.QHttp2Configuration?1(QHttp2Configuration) -QtNetwork.QHttp2Configuration.__init__?1(self, QHttp2Configuration) -QtNetwork.QHttp2Configuration.setServerPushEnabled?4(bool) -QtNetwork.QHttp2Configuration.serverPushEnabled?4() -> bool -QtNetwork.QHttp2Configuration.setHuffmanCompressionEnabled?4(bool) -QtNetwork.QHttp2Configuration.huffmanCompressionEnabled?4() -> bool -QtNetwork.QHttp2Configuration.setSessionReceiveWindowSize?4(int) -> bool -QtNetwork.QHttp2Configuration.sessionReceiveWindowSize?4() -> int -QtNetwork.QHttp2Configuration.setStreamReceiveWindowSize?4(int) -> bool -QtNetwork.QHttp2Configuration.streamReceiveWindowSize?4() -> int -QtNetwork.QHttp2Configuration.setMaxFrameSize?4(int) -> bool -QtNetwork.QHttp2Configuration.maxFrameSize?4() -> int -QtNetwork.QHttp2Configuration.swap?4(QHttp2Configuration) -QtNetwork.QHttpHeaders.WellKnownHeader?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AIM?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Accept?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptAdditions?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptCH?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptDatetime?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptEncoding?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptFeatures?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptLanguage?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptPatch?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptPost?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptRanges?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptSignature?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlAllowCredentials?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlAllowHeaders?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlAllowMethods?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlAllowOrigin?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlExposeHeaders?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlMaxAge?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlRequestHeaders?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AccessControlRequestMethod?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Age?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Allow?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ALPN?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AltSvc?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AltUsed?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Alternates?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ApplyToRedirectRef?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AuthenticationControl?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AuthenticationInfo?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Authorization?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CacheControl?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CacheStatus?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CalManagedID?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CalDAVTimezones?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CapsuleProtocol?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CDNCacheControl?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CDNLoop?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CertNotAfter?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CertNotBefore?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ClearSiteData?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ClientCert?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ClientCertChain?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Close?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Connection?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentDigest?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentDisposition?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentEncoding?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentID?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentLanguage?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentLength?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentLocation?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentRange?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentSecurityPolicy?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentSecurityPolicyReportOnly?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ContentType?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Cookie?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CrossOriginEmbedderPolicy?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CrossOriginEmbedderPolicyReportOnly?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CrossOriginOpenerPolicy?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CrossOriginOpenerPolicyReportOnly?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CrossOriginResourcePolicy?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DASL?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Date?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DAV?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DeltaBase?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Depth?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Destination?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DifferentialID?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DPoP?10 -QtNetwork.QHttpHeaders.WellKnownHeader.DPoPNonce?10 -QtNetwork.QHttpHeaders.WellKnownHeader.EarlyData?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ETag?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Expect?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ExpectCT?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Expires?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Forwarded?10 -QtNetwork.QHttpHeaders.WellKnownHeader.From?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Hobareg?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Host?10 -QtNetwork.QHttpHeaders.WellKnownHeader.If?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfMatch?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfModifiedSince?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfNoneMatch?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfRange?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfScheduleTagMatch?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IfUnmodifiedSince?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IM?10 -QtNetwork.QHttpHeaders.WellKnownHeader.IncludeReferredTokenBindingID?10 -QtNetwork.QHttpHeaders.WellKnownHeader.KeepAlive?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Label?10 -QtNetwork.QHttpHeaders.WellKnownHeader.LastEventID?10 -QtNetwork.QHttpHeaders.WellKnownHeader.LastModified?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Link?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Location?10 -QtNetwork.QHttpHeaders.WellKnownHeader.LockToken?10 -QtNetwork.QHttpHeaders.WellKnownHeader.MaxForwards?10 -QtNetwork.QHttpHeaders.WellKnownHeader.MementoDatetime?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Meter?10 -QtNetwork.QHttpHeaders.WellKnownHeader.MIMEVersion?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Negotiate?10 -QtNetwork.QHttpHeaders.WellKnownHeader.NEL?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ODataEntityId?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ODataIsolation?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ODataMaxVersion?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ODataVersion?10 -QtNetwork.QHttpHeaders.WellKnownHeader.OptionalWWWAuthenticate?10 -QtNetwork.QHttpHeaders.WellKnownHeader.OrderingType?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Origin?10 -QtNetwork.QHttpHeaders.WellKnownHeader.OriginAgentCluster?10 -QtNetwork.QHttpHeaders.WellKnownHeader.OSCORE?10 -QtNetwork.QHttpHeaders.WellKnownHeader.OSLCCoreVersion?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Overwrite?10 -QtNetwork.QHttpHeaders.WellKnownHeader.PingFrom?10 -QtNetwork.QHttpHeaders.WellKnownHeader.PingTo?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Position?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Prefer?10 -QtNetwork.QHttpHeaders.WellKnownHeader.PreferenceApplied?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Priority?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProxyAuthenticate?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProxyAuthenticationInfo?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProxyAuthorization?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProxyStatus?10 -QtNetwork.QHttpHeaders.WellKnownHeader.PublicKeyPins?10 -QtNetwork.QHttpHeaders.WellKnownHeader.PublicKeyPinsReportOnly?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Range?10 -QtNetwork.QHttpHeaders.WellKnownHeader.RedirectRef?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Referer?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Refresh?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ReplayNonce?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ReprDigest?10 -QtNetwork.QHttpHeaders.WellKnownHeader.RetryAfter?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ScheduleReply?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ScheduleTag?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecPurpose?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecTokenBinding?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecWebSocketAccept?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecWebSocketExtensions?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecWebSocketKey?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecWebSocketProtocol?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SecWebSocketVersion?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Server?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ServerTiming?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SetCookie?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Signature?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SignatureInput?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SLUG?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SoapAction?10 -QtNetwork.QHttpHeaders.WellKnownHeader.StatusURI?10 -QtNetwork.QHttpHeaders.WellKnownHeader.StrictTransportSecurity?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Sunset?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SurrogateCapability?10 -QtNetwork.QHttpHeaders.WellKnownHeader.SurrogateControl?10 -QtNetwork.QHttpHeaders.WellKnownHeader.TCN?10 -QtNetwork.QHttpHeaders.WellKnownHeader.TE?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Timeout?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Topic?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Traceparent?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Tracestate?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Trailer?10 -QtNetwork.QHttpHeaders.WellKnownHeader.TransferEncoding?10 -QtNetwork.QHttpHeaders.WellKnownHeader.TTL?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Upgrade?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Urgency?10 -QtNetwork.QHttpHeaders.WellKnownHeader.UserAgent?10 -QtNetwork.QHttpHeaders.WellKnownHeader.VariantVary?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Vary?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Via?10 -QtNetwork.QHttpHeaders.WellKnownHeader.WantContentDigest?10 -QtNetwork.QHttpHeaders.WellKnownHeader.WantReprDigest?10 -QtNetwork.QHttpHeaders.WellKnownHeader.WWWAuthenticate?10 -QtNetwork.QHttpHeaders.WellKnownHeader.XContentTypeOptions?10 -QtNetwork.QHttpHeaders.WellKnownHeader.XFrameOptions?10 -QtNetwork.QHttpHeaders.WellKnownHeader.AcceptCharset?10 -QtNetwork.QHttpHeaders.WellKnownHeader.CPEPInfo?10 -QtNetwork.QHttpHeaders.WellKnownHeader.Pragma?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProtocolInfo?10 -QtNetwork.QHttpHeaders.WellKnownHeader.ProtocolQuery?10 -QtNetwork.QHttpHeaders?1() -QtNetwork.QHttpHeaders.__init__?1(self) -QtNetwork.QHttpHeaders?1(QHttpHeaders) -QtNetwork.QHttpHeaders.__init__?1(self, QHttpHeaders) -QtNetwork.QHttpHeaders.swap?4(QHttpHeaders) -QtNetwork.QHttpHeaders.append?4(QAnyStringView, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.append?4(QHttpHeaders.WellKnownHeader, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.insert?4(int, QAnyStringView, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.insert?4(int, QHttpHeaders.WellKnownHeader, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.replace?4(int, QAnyStringView, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.replace?4(int, QHttpHeaders.WellKnownHeader, QAnyStringView) -> bool -QtNetwork.QHttpHeaders.contains?4(QAnyStringView) -> bool -QtNetwork.QHttpHeaders.contains?4(QHttpHeaders.WellKnownHeader) -> bool -QtNetwork.QHttpHeaders.clear?4() -QtNetwork.QHttpHeaders.removeAll?4(QAnyStringView) -QtNetwork.QHttpHeaders.removeAll?4(QHttpHeaders.WellKnownHeader) -QtNetwork.QHttpHeaders.removeAt?4(int) -QtNetwork.QHttpHeaders.value?4(QAnyStringView, QByteArrayView defaultValue={}) -> QByteArrayView -QtNetwork.QHttpHeaders.value?4(QHttpHeaders.WellKnownHeader, QByteArrayView defaultValue={}) -> QByteArrayView -QtNetwork.QHttpHeaders.values?4(QAnyStringView) -> unknown-type -QtNetwork.QHttpHeaders.values?4(QHttpHeaders.WellKnownHeader) -> unknown-type -QtNetwork.QHttpHeaders.valueAt?4(int) -> QByteArrayView -QtNetwork.QHttpHeaders.nameAt?4(int) -> QString -QtNetwork.QHttpHeaders.combinedValue?4(QAnyStringView) -> QByteArray -QtNetwork.QHttpHeaders.combinedValue?4(QHttpHeaders.WellKnownHeader) -> QByteArray -QtNetwork.QHttpHeaders.size?4() -> int -QtNetwork.QHttpHeaders.reserve?4(int) -QtNetwork.QHttpHeaders.isEmpty?4() -> bool -QtNetwork.QHttpHeaders.wellKnownHeaderName?4(QHttpHeaders.WellKnownHeader) -> QByteArrayView -QtNetwork.QHttpHeaders.fromListOfPairs?4(unknown-type) -> QHttpHeaders -QtNetwork.QHttpHeaders.toListOfPairs?4() -> unknown-type -QtNetwork.QHttpPart?1() -QtNetwork.QHttpPart.__init__?1(self) -QtNetwork.QHttpPart?1(QHttpPart) -QtNetwork.QHttpPart.__init__?1(self, QHttpPart) -QtNetwork.QHttpPart.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) -QtNetwork.QHttpPart.setRawHeader?4(QByteArray, QByteArray) -QtNetwork.QHttpPart.setBody?4(QByteArray) -QtNetwork.QHttpPart.setBodyDevice?4(QIODevice) -QtNetwork.QHttpPart.swap?4(QHttpPart) -QtNetwork.QHttpMultiPart.ContentType?10 -QtNetwork.QHttpMultiPart.ContentType.MixedType?10 -QtNetwork.QHttpMultiPart.ContentType.RelatedType?10 -QtNetwork.QHttpMultiPart.ContentType.FormDataType?10 -QtNetwork.QHttpMultiPart.ContentType.AlternativeType?10 -QtNetwork.QHttpMultiPart?1(QObject parent=None) -QtNetwork.QHttpMultiPart.__init__?1(self, QObject parent=None) -QtNetwork.QHttpMultiPart?1(QHttpMultiPart.ContentType, QObject parent=None) -QtNetwork.QHttpMultiPart.__init__?1(self, QHttpMultiPart.ContentType, QObject parent=None) -QtNetwork.QHttpMultiPart.append?4(QHttpPart) -QtNetwork.QHttpMultiPart.setContentType?4(QHttpMultiPart.ContentType) -QtNetwork.QHttpMultiPart.boundary?4() -> QByteArray -QtNetwork.QHttpMultiPart.setBoundary?4(QByteArray) -QtNetwork.QLocalServer.SocketOption?10 -QtNetwork.QLocalServer.SocketOption.UserAccessOption?10 -QtNetwork.QLocalServer.SocketOption.GroupAccessOption?10 -QtNetwork.QLocalServer.SocketOption.OtherAccessOption?10 -QtNetwork.QLocalServer.SocketOption.WorldAccessOption?10 -QtNetwork.QLocalServer.SocketOption.AbstractNamespaceOption?10 -QtNetwork.QLocalServer?1(QObject parent=None) -QtNetwork.QLocalServer.__init__?1(self, QObject parent=None) -QtNetwork.QLocalServer.close?4() -QtNetwork.QLocalServer.errorString?4() -> QString -QtNetwork.QLocalServer.hasPendingConnections?4() -> bool -QtNetwork.QLocalServer.isListening?4() -> bool -QtNetwork.QLocalServer.listen?4(QString) -> bool -QtNetwork.QLocalServer.listen?4(qintptr) -> bool -QtNetwork.QLocalServer.maxPendingConnections?4() -> int -QtNetwork.QLocalServer.nextPendingConnection?4() -> QLocalSocket -QtNetwork.QLocalServer.serverName?4() -> QString -QtNetwork.QLocalServer.fullServerName?4() -> QString -QtNetwork.QLocalServer.serverError?4() -> QAbstractSocket.SocketError -QtNetwork.QLocalServer.setMaxPendingConnections?4(int) -QtNetwork.QLocalServer.waitForNewConnection?4(int msecs=0) -> (bool, bool) -QtNetwork.QLocalServer.removeServer?4(QString) -> bool -QtNetwork.QLocalServer.newConnection?4() -QtNetwork.QLocalServer.incomingConnection?4(quintptr) -QtNetwork.QLocalServer.setSocketOptions?4(unknown-type) -QtNetwork.QLocalServer.socketOptions?4() -> unknown-type -QtNetwork.QLocalServer.socketDescriptor?4() -> qintptr -QtNetwork.QLocalServer.setListenBacklogSize?4(int) -QtNetwork.QLocalServer.listenBacklogSize?4() -> int -QtNetwork.QLocalSocket.SocketOption?10 -QtNetwork.QLocalSocket.SocketOption.NoOptions?10 -QtNetwork.QLocalSocket.SocketOption.AbstractNamespaceOption?10 -QtNetwork.QLocalSocket.LocalSocketState?10 -QtNetwork.QLocalSocket.LocalSocketState.UnconnectedState?10 -QtNetwork.QLocalSocket.LocalSocketState.ConnectingState?10 -QtNetwork.QLocalSocket.LocalSocketState.ConnectedState?10 -QtNetwork.QLocalSocket.LocalSocketState.ClosingState?10 -QtNetwork.QLocalSocket.LocalSocketError?10 -QtNetwork.QLocalSocket.LocalSocketError.ConnectionRefusedError?10 -QtNetwork.QLocalSocket.LocalSocketError.PeerClosedError?10 -QtNetwork.QLocalSocket.LocalSocketError.ServerNotFoundError?10 -QtNetwork.QLocalSocket.LocalSocketError.SocketAccessError?10 -QtNetwork.QLocalSocket.LocalSocketError.SocketResourceError?10 -QtNetwork.QLocalSocket.LocalSocketError.SocketTimeoutError?10 -QtNetwork.QLocalSocket.LocalSocketError.DatagramTooLargeError?10 -QtNetwork.QLocalSocket.LocalSocketError.ConnectionError?10 -QtNetwork.QLocalSocket.LocalSocketError.UnsupportedSocketOperationError?10 -QtNetwork.QLocalSocket.LocalSocketError.OperationError?10 -QtNetwork.QLocalSocket.LocalSocketError.UnknownSocketError?10 -QtNetwork.QLocalSocket?1(QObject parent=None) -QtNetwork.QLocalSocket.__init__?1(self, QObject parent=None) -QtNetwork.QLocalSocket.connectToServer?4(QString, unknown-type mode=QIODeviceBase.ReadWrite) -QtNetwork.QLocalSocket.connectToServer?4(unknown-type mode=QIODeviceBase.ReadWrite) -QtNetwork.QLocalSocket.disconnectFromServer?4() -QtNetwork.QLocalSocket.open?4(unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtNetwork.QLocalSocket.serverName?4() -> QString -QtNetwork.QLocalSocket.setServerName?4(QString) -QtNetwork.QLocalSocket.fullServerName?4() -> QString -QtNetwork.QLocalSocket.abort?4() -QtNetwork.QLocalSocket.isSequential?4() -> bool -QtNetwork.QLocalSocket.bytesAvailable?4() -> int -QtNetwork.QLocalSocket.bytesToWrite?4() -> int -QtNetwork.QLocalSocket.canReadLine?4() -> bool -QtNetwork.QLocalSocket.close?4() -QtNetwork.QLocalSocket.error?4() -> QLocalSocket.LocalSocketError -QtNetwork.QLocalSocket.flush?4() -> bool -QtNetwork.QLocalSocket.isValid?4() -> bool -QtNetwork.QLocalSocket.readBufferSize?4() -> int -QtNetwork.QLocalSocket.setReadBufferSize?4(int) -QtNetwork.QLocalSocket.setSocketDescriptor?4(qintptr, QLocalSocket.LocalSocketState state=QLocalSocket.ConnectedState, unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtNetwork.QLocalSocket.socketDescriptor?4() -> qintptr -QtNetwork.QLocalSocket.state?4() -> QLocalSocket.LocalSocketState -QtNetwork.QLocalSocket.waitForBytesWritten?4(int msecs=30000) -> bool -QtNetwork.QLocalSocket.waitForConnected?4(int msecs=30000) -> bool -QtNetwork.QLocalSocket.waitForDisconnected?4(int msecs=30000) -> bool -QtNetwork.QLocalSocket.waitForReadyRead?4(int msecs=30000) -> bool -QtNetwork.QLocalSocket.connected?4() -QtNetwork.QLocalSocket.disconnected?4() -QtNetwork.QLocalSocket.errorOccurred?4(QLocalSocket.LocalSocketError) -QtNetwork.QLocalSocket.stateChanged?4(QLocalSocket.LocalSocketState) -QtNetwork.QLocalSocket.readData?4(int) -> Any -QtNetwork.QLocalSocket.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtNetwork.QLocalSocket.skipData?4(int) -> int -QtNetwork.QLocalSocket.setSocketOptions?4(unknown-type) -QtNetwork.QLocalSocket.socketOptions?4() -> unknown-type -QtNetwork.QLocalSocket.readLineData?4(int) -> Any -QtNetwork.QNetworkAccessManager.Operation?10 -QtNetwork.QNetworkAccessManager.Operation.HeadOperation?10 -QtNetwork.QNetworkAccessManager.Operation.GetOperation?10 -QtNetwork.QNetworkAccessManager.Operation.PutOperation?10 -QtNetwork.QNetworkAccessManager.Operation.PostOperation?10 -QtNetwork.QNetworkAccessManager.Operation.DeleteOperation?10 -QtNetwork.QNetworkAccessManager.Operation.CustomOperation?10 -QtNetwork.QNetworkAccessManager?1(QObject parent=None) -QtNetwork.QNetworkAccessManager.__init__?1(self, QObject parent=None) -QtNetwork.QNetworkAccessManager.proxy?4() -> QNetworkProxy -QtNetwork.QNetworkAccessManager.setProxy?4(QNetworkProxy) -QtNetwork.QNetworkAccessManager.cookieJar?4() -> QNetworkCookieJar -QtNetwork.QNetworkAccessManager.setCookieJar?4(QNetworkCookieJar) -QtNetwork.QNetworkAccessManager.head?4(QNetworkRequest) -> QNetworkReply -QtNetwork.QNetworkAccessManager.get?4(QNetworkRequest) -> QNetworkReply -QtNetwork.QNetworkAccessManager.get?4(QNetworkRequest, QByteArray) -> QNetworkReply -QtNetwork.QNetworkAccessManager.get?4(QNetworkRequest, QIODevice) -> QNetworkReply -QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QIODevice) -> QNetworkReply -QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QByteArray) -> QNetworkReply -QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QHttpMultiPart) -> QNetworkReply -QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QIODevice) -> QNetworkReply -QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QByteArray) -> QNetworkReply -QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QHttpMultiPart) -> QNetworkReply -QtNetwork.QNetworkAccessManager.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) -QtNetwork.QNetworkAccessManager.authenticationRequired?4(QNetworkReply, QAuthenticator) -QtNetwork.QNetworkAccessManager.finished?4(QNetworkReply) -QtNetwork.QNetworkAccessManager.encrypted?4(QNetworkReply) -QtNetwork.QNetworkAccessManager.sslErrors?4(QNetworkReply, unknown-type) -QtNetwork.QNetworkAccessManager.preSharedKeyAuthenticationRequired?4(QNetworkReply, QSslPreSharedKeyAuthenticator) -QtNetwork.QNetworkAccessManager.createRequest?4(QNetworkAccessManager.Operation, QNetworkRequest, QIODevice device=None) -> QNetworkReply -QtNetwork.QNetworkAccessManager.proxyFactory?4() -> QNetworkProxyFactory -QtNetwork.QNetworkAccessManager.setProxyFactory?4(QNetworkProxyFactory) -QtNetwork.QNetworkAccessManager.cache?4() -> QAbstractNetworkCache -QtNetwork.QNetworkAccessManager.setCache?4(QAbstractNetworkCache) -QtNetwork.QNetworkAccessManager.deleteResource?4(QNetworkRequest) -> QNetworkReply -QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QIODevice data=None) -> QNetworkReply -QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QByteArray) -> QNetworkReply -QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QHttpMultiPart) -> QNetworkReply -QtNetwork.QNetworkAccessManager.clearAccessCache?4() -QtNetwork.QNetworkAccessManager.supportedSchemes?4() -> QStringList -QtNetwork.QNetworkAccessManager.connectToHostEncrypted?4(QString, int port=443, QSslConfiguration sslConfiguration=QSslConfiguration.defaultConfiguration()) -QtNetwork.QNetworkAccessManager.connectToHostEncrypted?4(QString, int, QSslConfiguration, QString) -QtNetwork.QNetworkAccessManager.connectToHost?4(QString, int port=80) -QtNetwork.QNetworkAccessManager.supportedSchemesImplementation?4() -> QStringList -QtNetwork.QNetworkAccessManager.clearConnectionCache?4() -QtNetwork.QNetworkAccessManager.setStrictTransportSecurityEnabled?4(bool) -QtNetwork.QNetworkAccessManager.isStrictTransportSecurityEnabled?4() -> bool -QtNetwork.QNetworkAccessManager.addStrictTransportSecurityHosts?4(unknown-type) -QtNetwork.QNetworkAccessManager.strictTransportSecurityHosts?4() -> unknown-type -QtNetwork.QNetworkAccessManager.setRedirectPolicy?4(QNetworkRequest.RedirectPolicy) -QtNetwork.QNetworkAccessManager.redirectPolicy?4() -> QNetworkRequest.RedirectPolicy -QtNetwork.QNetworkAccessManager.enableStrictTransportSecurityStore?4(bool, QString storeDir='') -QtNetwork.QNetworkAccessManager.isStrictTransportSecurityStoreEnabled?4() -> bool -QtNetwork.QNetworkAccessManager.autoDeleteReplies?4() -> bool -QtNetwork.QNetworkAccessManager.setAutoDeleteReplies?4(bool) -QtNetwork.QNetworkAccessManager.transferTimeout?4() -> int -QtNetwork.QNetworkAccessManager.setTransferTimeout?4(int timeout=QNetworkRequest.DefaultTransferTimeoutConstant) -QtNetwork.QNetworkCookie.SameSite?10 -QtNetwork.QNetworkCookie.SameSite.Default?10 -QtNetwork.QNetworkCookie.SameSite.None_?10 -QtNetwork.QNetworkCookie.SameSite.Lax?10 -QtNetwork.QNetworkCookie.SameSite.Strict?10 -QtNetwork.QNetworkCookie.RawForm?10 -QtNetwork.QNetworkCookie.RawForm.NameAndValueOnly?10 -QtNetwork.QNetworkCookie.RawForm.Full?10 -QtNetwork.QNetworkCookie?1(QByteArray name=QByteArray(), QByteArray value=QByteArray()) -QtNetwork.QNetworkCookie.__init__?1(self, QByteArray name=QByteArray(), QByteArray value=QByteArray()) -QtNetwork.QNetworkCookie?1(QNetworkCookie) -QtNetwork.QNetworkCookie.__init__?1(self, QNetworkCookie) -QtNetwork.QNetworkCookie.isSecure?4() -> bool -QtNetwork.QNetworkCookie.setSecure?4(bool) -QtNetwork.QNetworkCookie.isSessionCookie?4() -> bool -QtNetwork.QNetworkCookie.expirationDate?4() -> QDateTime -QtNetwork.QNetworkCookie.setExpirationDate?4(QDateTime) -QtNetwork.QNetworkCookie.domain?4() -> QString -QtNetwork.QNetworkCookie.setDomain?4(QString) -QtNetwork.QNetworkCookie.path?4() -> QString -QtNetwork.QNetworkCookie.setPath?4(QString) -QtNetwork.QNetworkCookie.name?4() -> QByteArray -QtNetwork.QNetworkCookie.setName?4(QByteArray) -QtNetwork.QNetworkCookie.value?4() -> QByteArray -QtNetwork.QNetworkCookie.setValue?4(QByteArray) -QtNetwork.QNetworkCookie.toRawForm?4(QNetworkCookie.RawForm form=QNetworkCookie.Full) -> QByteArray -QtNetwork.QNetworkCookie.parseCookies?4(QByteArrayView) -> unknown-type -QtNetwork.QNetworkCookie.isHttpOnly?4() -> bool -QtNetwork.QNetworkCookie.setHttpOnly?4(bool) -QtNetwork.QNetworkCookie.swap?4(QNetworkCookie) -QtNetwork.QNetworkCookie.hasSameIdentifier?4(QNetworkCookie) -> bool -QtNetwork.QNetworkCookie.normalize?4(QUrl) -QtNetwork.QNetworkCookie.sameSitePolicy?4() -> QNetworkCookie.SameSite -QtNetwork.QNetworkCookie.setSameSitePolicy?4(QNetworkCookie.SameSite) -QtNetwork.QNetworkCookieJar?1(QObject parent=None) -QtNetwork.QNetworkCookieJar.__init__?1(self, QObject parent=None) -QtNetwork.QNetworkCookieJar.cookiesForUrl?4(QUrl) -> unknown-type -QtNetwork.QNetworkCookieJar.setCookiesFromUrl?4(unknown-type, QUrl) -> bool -QtNetwork.QNetworkCookieJar.insertCookie?4(QNetworkCookie) -> bool -QtNetwork.QNetworkCookieJar.updateCookie?4(QNetworkCookie) -> bool -QtNetwork.QNetworkCookieJar.deleteCookie?4(QNetworkCookie) -> bool -QtNetwork.QNetworkCookieJar.setAllCookies?4(unknown-type) -QtNetwork.QNetworkCookieJar.allCookies?4() -> unknown-type -QtNetwork.QNetworkCookieJar.validateCookie?4(QNetworkCookie, QUrl) -> bool -QtNetwork.QNetworkDatagram?1() -QtNetwork.QNetworkDatagram.__init__?1(self) -QtNetwork.QNetworkDatagram?1(QByteArray, QHostAddress destinationAddress=QHostAddress(), int port=0) -QtNetwork.QNetworkDatagram.__init__?1(self, QByteArray, QHostAddress destinationAddress=QHostAddress(), int port=0) -QtNetwork.QNetworkDatagram?1(QNetworkDatagram) -QtNetwork.QNetworkDatagram.__init__?1(self, QNetworkDatagram) -QtNetwork.QNetworkDatagram.swap?4(QNetworkDatagram) -QtNetwork.QNetworkDatagram.clear?4() -QtNetwork.QNetworkDatagram.isValid?4() -> bool -QtNetwork.QNetworkDatagram.isNull?4() -> bool -QtNetwork.QNetworkDatagram.interfaceIndex?4() -> int -QtNetwork.QNetworkDatagram.setInterfaceIndex?4(int) -QtNetwork.QNetworkDatagram.senderAddress?4() -> QHostAddress -QtNetwork.QNetworkDatagram.destinationAddress?4() -> QHostAddress -QtNetwork.QNetworkDatagram.senderPort?4() -> int -QtNetwork.QNetworkDatagram.destinationPort?4() -> int -QtNetwork.QNetworkDatagram.setSender?4(QHostAddress, int port=0) -QtNetwork.QNetworkDatagram.setDestination?4(QHostAddress, int) -QtNetwork.QNetworkDatagram.hopLimit?4() -> int -QtNetwork.QNetworkDatagram.setHopLimit?4(int) -QtNetwork.QNetworkDatagram.data?4() -> QByteArray -QtNetwork.QNetworkDatagram.setData?4(QByteArray) -QtNetwork.QNetworkDatagram.makeReply?4(QByteArray) -> QNetworkDatagram -QtNetwork.QNetworkDiskCache?1(QObject parent=None) -QtNetwork.QNetworkDiskCache.__init__?1(self, QObject parent=None) -QtNetwork.QNetworkDiskCache.cacheDirectory?4() -> QString -QtNetwork.QNetworkDiskCache.setCacheDirectory?4(QString) -QtNetwork.QNetworkDiskCache.maximumCacheSize?4() -> int -QtNetwork.QNetworkDiskCache.setMaximumCacheSize?4(int) -QtNetwork.QNetworkDiskCache.cacheSize?4() -> int -QtNetwork.QNetworkDiskCache.metaData?4(QUrl) -> QNetworkCacheMetaData -QtNetwork.QNetworkDiskCache.updateMetaData?4(QNetworkCacheMetaData) -QtNetwork.QNetworkDiskCache.data?4(QUrl) -> QIODevice -QtNetwork.QNetworkDiskCache.remove?4(QUrl) -> bool -QtNetwork.QNetworkDiskCache.prepare?4(QNetworkCacheMetaData) -> QIODevice -QtNetwork.QNetworkDiskCache.insert?4(QIODevice) -QtNetwork.QNetworkDiskCache.fileMetaData?4(QString) -> QNetworkCacheMetaData -QtNetwork.QNetworkDiskCache.clear?4() -QtNetwork.QNetworkDiskCache.expire?4() -> int -QtNetwork.QNetworkInformation.TransportMedium?10 -QtNetwork.QNetworkInformation.TransportMedium.Unknown?10 -QtNetwork.QNetworkInformation.TransportMedium.Ethernet?10 -QtNetwork.QNetworkInformation.TransportMedium.Cellular?10 -QtNetwork.QNetworkInformation.TransportMedium.WiFi?10 -QtNetwork.QNetworkInformation.TransportMedium.Bluetooth?10 -QtNetwork.QNetworkInformation.Feature?10 -QtNetwork.QNetworkInformation.Feature.Reachability?10 -QtNetwork.QNetworkInformation.Feature.CaptivePortal?10 -QtNetwork.QNetworkInformation.Feature.TransportMedium?10 -QtNetwork.QNetworkInformation.Feature.Metered?10 -QtNetwork.QNetworkInformation.Reachability?10 -QtNetwork.QNetworkInformation.Reachability.Unknown?10 -QtNetwork.QNetworkInformation.Reachability.Disconnected?10 -QtNetwork.QNetworkInformation.Reachability.Local?10 -QtNetwork.QNetworkInformation.Reachability.Site?10 -QtNetwork.QNetworkInformation.Reachability.Online?10 -QtNetwork.QNetworkInformation.reachability?4() -> QNetworkInformation.Reachability -QtNetwork.QNetworkInformation.backendName?4() -> QString -QtNetwork.QNetworkInformation.supports?4(unknown-type) -> bool -QtNetwork.QNetworkInformation.load?4(QStringView) -> bool -QtNetwork.QNetworkInformation.load?4(unknown-type) -> bool -QtNetwork.QNetworkInformation.availableBackends?4() -> QStringList -QtNetwork.QNetworkInformation.instance?4() -> QNetworkInformation -QtNetwork.QNetworkInformation.reachabilityChanged?4(QNetworkInformation.Reachability) -QtNetwork.QNetworkInformation.isBehindCaptivePortal?4() -> bool -QtNetwork.QNetworkInformation.isBehindCaptivePortalChanged?4(bool) -QtNetwork.QNetworkInformation.transportMedium?4() -> QNetworkInformation.TransportMedium -QtNetwork.QNetworkInformation.isMetered?4() -> bool -QtNetwork.QNetworkInformation.supportedFeatures?4() -> unknown-type -QtNetwork.QNetworkInformation.loadDefaultBackend?4() -> bool -QtNetwork.QNetworkInformation.transportMediumChanged?4(QNetworkInformation.TransportMedium) -QtNetwork.QNetworkInformation.isMeteredChanged?4(bool) -QtNetwork.QNetworkInformation.loadBackendByName?4(QStringView) -> bool -QtNetwork.QNetworkInformation.loadBackendByFeatures?4(unknown-type) -> bool -QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus?10 -QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsEligibilityUnknown?10 -QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsIneligible?10 -QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsEligible?10 -QtNetwork.QNetworkAddressEntry?1() -QtNetwork.QNetworkAddressEntry.__init__?1(self) -QtNetwork.QNetworkAddressEntry?1(QNetworkAddressEntry) -QtNetwork.QNetworkAddressEntry.__init__?1(self, QNetworkAddressEntry) -QtNetwork.QNetworkAddressEntry.ip?4() -> QHostAddress -QtNetwork.QNetworkAddressEntry.setIp?4(QHostAddress) -QtNetwork.QNetworkAddressEntry.netmask?4() -> QHostAddress -QtNetwork.QNetworkAddressEntry.setNetmask?4(QHostAddress) -QtNetwork.QNetworkAddressEntry.broadcast?4() -> QHostAddress -QtNetwork.QNetworkAddressEntry.setBroadcast?4(QHostAddress) -QtNetwork.QNetworkAddressEntry.prefixLength?4() -> int -QtNetwork.QNetworkAddressEntry.setPrefixLength?4(int) -QtNetwork.QNetworkAddressEntry.swap?4(QNetworkAddressEntry) -QtNetwork.QNetworkAddressEntry.dnsEligibility?4() -> QNetworkAddressEntry.DnsEligibilityStatus -QtNetwork.QNetworkAddressEntry.setDnsEligibility?4(QNetworkAddressEntry.DnsEligibilityStatus) -QtNetwork.QNetworkAddressEntry.isLifetimeKnown?4() -> bool -QtNetwork.QNetworkAddressEntry.preferredLifetime?4() -> QDeadlineTimer -QtNetwork.QNetworkAddressEntry.validityLifetime?4() -> QDeadlineTimer -QtNetwork.QNetworkAddressEntry.setAddressLifetime?4(QDeadlineTimer, QDeadlineTimer) -QtNetwork.QNetworkAddressEntry.clearAddressLifetime?4() -QtNetwork.QNetworkAddressEntry.isPermanent?4() -> bool -QtNetwork.QNetworkAddressEntry.isTemporary?4() -> bool -QtNetwork.QNetworkInterface.InterfaceType?10 -QtNetwork.QNetworkInterface.InterfaceType.Unknown?10 -QtNetwork.QNetworkInterface.InterfaceType.Loopback?10 -QtNetwork.QNetworkInterface.InterfaceType.Virtual?10 -QtNetwork.QNetworkInterface.InterfaceType.Ethernet?10 -QtNetwork.QNetworkInterface.InterfaceType.Slip?10 -QtNetwork.QNetworkInterface.InterfaceType.CanBus?10 -QtNetwork.QNetworkInterface.InterfaceType.Ppp?10 -QtNetwork.QNetworkInterface.InterfaceType.Fddi?10 -QtNetwork.QNetworkInterface.InterfaceType.Wifi?10 -QtNetwork.QNetworkInterface.InterfaceType.Ieee80211?10 -QtNetwork.QNetworkInterface.InterfaceType.Phonet?10 -QtNetwork.QNetworkInterface.InterfaceType.Ieee802154?10 -QtNetwork.QNetworkInterface.InterfaceType.SixLoWPAN?10 -QtNetwork.QNetworkInterface.InterfaceType.Ieee80216?10 -QtNetwork.QNetworkInterface.InterfaceType.Ieee1394?10 -QtNetwork.QNetworkInterface.InterfaceFlag?10 -QtNetwork.QNetworkInterface.InterfaceFlag.IsUp?10 -QtNetwork.QNetworkInterface.InterfaceFlag.IsRunning?10 -QtNetwork.QNetworkInterface.InterfaceFlag.CanBroadcast?10 -QtNetwork.QNetworkInterface.InterfaceFlag.IsLoopBack?10 -QtNetwork.QNetworkInterface.InterfaceFlag.IsPointToPoint?10 -QtNetwork.QNetworkInterface.InterfaceFlag.CanMulticast?10 -QtNetwork.QNetworkInterface?1() -QtNetwork.QNetworkInterface.__init__?1(self) -QtNetwork.QNetworkInterface?1(QNetworkInterface) -QtNetwork.QNetworkInterface.__init__?1(self, QNetworkInterface) -QtNetwork.QNetworkInterface.isValid?4() -> bool -QtNetwork.QNetworkInterface.name?4() -> QString -QtNetwork.QNetworkInterface.flags?4() -> unknown-type -QtNetwork.QNetworkInterface.hardwareAddress?4() -> QString -QtNetwork.QNetworkInterface.addressEntries?4() -> unknown-type -QtNetwork.QNetworkInterface.interfaceFromName?4(QString) -> QNetworkInterface -QtNetwork.QNetworkInterface.interfaceFromIndex?4(int) -> QNetworkInterface -QtNetwork.QNetworkInterface.allInterfaces?4() -> unknown-type -QtNetwork.QNetworkInterface.allAddresses?4() -> unknown-type -QtNetwork.QNetworkInterface.index?4() -> int -QtNetwork.QNetworkInterface.humanReadableName?4() -> QString -QtNetwork.QNetworkInterface.swap?4(QNetworkInterface) -QtNetwork.QNetworkInterface.interfaceIndexFromName?4(QString) -> int -QtNetwork.QNetworkInterface.interfaceNameFromIndex?4(int) -> QString -QtNetwork.QNetworkInterface.type?4() -> QNetworkInterface.InterfaceType -QtNetwork.QNetworkInterface.maximumTransmissionUnit?4() -> int -QtNetwork.QNetworkProxy.Capability?10 -QtNetwork.QNetworkProxy.Capability.TunnelingCapability?10 -QtNetwork.QNetworkProxy.Capability.ListeningCapability?10 -QtNetwork.QNetworkProxy.Capability.UdpTunnelingCapability?10 -QtNetwork.QNetworkProxy.Capability.CachingCapability?10 -QtNetwork.QNetworkProxy.Capability.HostNameLookupCapability?10 -QtNetwork.QNetworkProxy.Capability.SctpTunnelingCapability?10 -QtNetwork.QNetworkProxy.Capability.SctpListeningCapability?10 -QtNetwork.QNetworkProxy.ProxyType?10 -QtNetwork.QNetworkProxy.ProxyType.DefaultProxy?10 -QtNetwork.QNetworkProxy.ProxyType.Socks5Proxy?10 -QtNetwork.QNetworkProxy.ProxyType.NoProxy?10 -QtNetwork.QNetworkProxy.ProxyType.HttpProxy?10 -QtNetwork.QNetworkProxy.ProxyType.HttpCachingProxy?10 -QtNetwork.QNetworkProxy.ProxyType.FtpCachingProxy?10 -QtNetwork.QNetworkProxy?1() -QtNetwork.QNetworkProxy.__init__?1(self) -QtNetwork.QNetworkProxy?1(QNetworkProxy.ProxyType, QString hostName='', int port=0, QString user='', QString password='') -QtNetwork.QNetworkProxy.__init__?1(self, QNetworkProxy.ProxyType, QString hostName='', int port=0, QString user='', QString password='') -QtNetwork.QNetworkProxy?1(QNetworkProxy) -QtNetwork.QNetworkProxy.__init__?1(self, QNetworkProxy) -QtNetwork.QNetworkProxy.setType?4(QNetworkProxy.ProxyType) -QtNetwork.QNetworkProxy.type?4() -> QNetworkProxy.ProxyType -QtNetwork.QNetworkProxy.setUser?4(QString) -QtNetwork.QNetworkProxy.user?4() -> QString -QtNetwork.QNetworkProxy.setPassword?4(QString) -QtNetwork.QNetworkProxy.password?4() -> QString -QtNetwork.QNetworkProxy.setHostName?4(QString) -QtNetwork.QNetworkProxy.hostName?4() -> QString -QtNetwork.QNetworkProxy.setPort?4(int) -QtNetwork.QNetworkProxy.port?4() -> int -QtNetwork.QNetworkProxy.setApplicationProxy?4(QNetworkProxy) -QtNetwork.QNetworkProxy.applicationProxy?4() -> QNetworkProxy -QtNetwork.QNetworkProxy.isCachingProxy?4() -> bool -QtNetwork.QNetworkProxy.isTransparentProxy?4() -> bool -QtNetwork.QNetworkProxy.setCapabilities?4(unknown-type) -QtNetwork.QNetworkProxy.capabilities?4() -> unknown-type -QtNetwork.QNetworkProxy.swap?4(QNetworkProxy) -QtNetwork.QNetworkProxy.header?4(QNetworkRequest.KnownHeaders) -> QVariant -QtNetwork.QNetworkProxy.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) -QtNetwork.QNetworkProxy.hasRawHeader?4(QByteArray) -> bool -QtNetwork.QNetworkProxy.rawHeaderList?4() -> unknown-type -QtNetwork.QNetworkProxy.rawHeader?4(QByteArray) -> QByteArray -QtNetwork.QNetworkProxy.setRawHeader?4(QByteArray, QByteArray) -QtNetwork.QNetworkProxyQuery.QueryType?10 -QtNetwork.QNetworkProxyQuery.QueryType.TcpSocket?10 -QtNetwork.QNetworkProxyQuery.QueryType.UdpSocket?10 -QtNetwork.QNetworkProxyQuery.QueryType.TcpServer?10 -QtNetwork.QNetworkProxyQuery.QueryType.UrlRequest?10 -QtNetwork.QNetworkProxyQuery.QueryType.SctpSocket?10 -QtNetwork.QNetworkProxyQuery.QueryType.SctpServer?10 -QtNetwork.QNetworkProxyQuery?1() -QtNetwork.QNetworkProxyQuery.__init__?1(self) -QtNetwork.QNetworkProxyQuery?1(QUrl, QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.UrlRequest) -QtNetwork.QNetworkProxyQuery.__init__?1(self, QUrl, QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.UrlRequest) -QtNetwork.QNetworkProxyQuery?1(QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) -QtNetwork.QNetworkProxyQuery.__init__?1(self, QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) -QtNetwork.QNetworkProxyQuery?1(int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) -QtNetwork.QNetworkProxyQuery.__init__?1(self, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) -QtNetwork.QNetworkProxyQuery?1(QNetworkProxyQuery) -QtNetwork.QNetworkProxyQuery.__init__?1(self, QNetworkProxyQuery) -QtNetwork.QNetworkProxyQuery.queryType?4() -> QNetworkProxyQuery.QueryType -QtNetwork.QNetworkProxyQuery.setQueryType?4(QNetworkProxyQuery.QueryType) -QtNetwork.QNetworkProxyQuery.peerPort?4() -> int -QtNetwork.QNetworkProxyQuery.setPeerPort?4(int) -QtNetwork.QNetworkProxyQuery.peerHostName?4() -> QString -QtNetwork.QNetworkProxyQuery.setPeerHostName?4(QString) -QtNetwork.QNetworkProxyQuery.localPort?4() -> int -QtNetwork.QNetworkProxyQuery.setLocalPort?4(int) -QtNetwork.QNetworkProxyQuery.protocolTag?4() -> QString -QtNetwork.QNetworkProxyQuery.setProtocolTag?4(QString) -QtNetwork.QNetworkProxyQuery.url?4() -> QUrl -QtNetwork.QNetworkProxyQuery.setUrl?4(QUrl) -QtNetwork.QNetworkProxyQuery.swap?4(QNetworkProxyQuery) -QtNetwork.QNetworkProxyFactory?1() -QtNetwork.QNetworkProxyFactory.__init__?1(self) -QtNetwork.QNetworkProxyFactory?1(QNetworkProxyFactory) -QtNetwork.QNetworkProxyFactory.__init__?1(self, QNetworkProxyFactory) -QtNetwork.QNetworkProxyFactory.queryProxy?4(QNetworkProxyQuery query=QNetworkProxyQuery()) -> unknown-type -QtNetwork.QNetworkProxyFactory.setApplicationProxyFactory?4(QNetworkProxyFactory) -QtNetwork.QNetworkProxyFactory.proxyForQuery?4(QNetworkProxyQuery) -> unknown-type -QtNetwork.QNetworkProxyFactory.systemProxyForQuery?4(QNetworkProxyQuery query=QNetworkProxyQuery()) -> unknown-type -QtNetwork.QNetworkProxyFactory.setUseSystemConfiguration?4(bool) -QtNetwork.QNetworkProxyFactory.usesSystemConfiguration?4() -> bool -QtNetwork.QNetworkReply.NetworkError?10 -QtNetwork.QNetworkReply.NetworkError.NoError?10 -QtNetwork.QNetworkReply.NetworkError.ConnectionRefusedError?10 -QtNetwork.QNetworkReply.NetworkError.RemoteHostClosedError?10 -QtNetwork.QNetworkReply.NetworkError.HostNotFoundError?10 -QtNetwork.QNetworkReply.NetworkError.TimeoutError?10 -QtNetwork.QNetworkReply.NetworkError.OperationCanceledError?10 -QtNetwork.QNetworkReply.NetworkError.SslHandshakeFailedError?10 -QtNetwork.QNetworkReply.NetworkError.UnknownNetworkError?10 -QtNetwork.QNetworkReply.NetworkError.ProxyConnectionRefusedError?10 -QtNetwork.QNetworkReply.NetworkError.ProxyConnectionClosedError?10 -QtNetwork.QNetworkReply.NetworkError.ProxyNotFoundError?10 -QtNetwork.QNetworkReply.NetworkError.ProxyTimeoutError?10 -QtNetwork.QNetworkReply.NetworkError.ProxyAuthenticationRequiredError?10 -QtNetwork.QNetworkReply.NetworkError.UnknownProxyError?10 -QtNetwork.QNetworkReply.NetworkError.ContentAccessDenied?10 -QtNetwork.QNetworkReply.NetworkError.ContentOperationNotPermittedError?10 -QtNetwork.QNetworkReply.NetworkError.ContentNotFoundError?10 -QtNetwork.QNetworkReply.NetworkError.AuthenticationRequiredError?10 -QtNetwork.QNetworkReply.NetworkError.UnknownContentError?10 -QtNetwork.QNetworkReply.NetworkError.ProtocolUnknownError?10 -QtNetwork.QNetworkReply.NetworkError.ProtocolInvalidOperationError?10 -QtNetwork.QNetworkReply.NetworkError.ProtocolFailure?10 -QtNetwork.QNetworkReply.NetworkError.ContentReSendError?10 -QtNetwork.QNetworkReply.NetworkError.TemporaryNetworkFailureError?10 -QtNetwork.QNetworkReply.NetworkError.NetworkSessionFailedError?10 -QtNetwork.QNetworkReply.NetworkError.BackgroundRequestNotAllowedError?10 -QtNetwork.QNetworkReply.NetworkError.ContentConflictError?10 -QtNetwork.QNetworkReply.NetworkError.ContentGoneError?10 -QtNetwork.QNetworkReply.NetworkError.InternalServerError?10 -QtNetwork.QNetworkReply.NetworkError.OperationNotImplementedError?10 -QtNetwork.QNetworkReply.NetworkError.ServiceUnavailableError?10 -QtNetwork.QNetworkReply.NetworkError.UnknownServerError?10 -QtNetwork.QNetworkReply.NetworkError.TooManyRedirectsError?10 -QtNetwork.QNetworkReply.NetworkError.InsecureRedirectError?10 -QtNetwork.QNetworkReply?1(QObject parent=None) -QtNetwork.QNetworkReply.__init__?1(self, QObject parent=None) -QtNetwork.QNetworkReply.abort?4() -QtNetwork.QNetworkReply.close?4() -QtNetwork.QNetworkReply.isSequential?4() -> bool -QtNetwork.QNetworkReply.readBufferSize?4() -> int -QtNetwork.QNetworkReply.setReadBufferSize?4(int) -QtNetwork.QNetworkReply.manager?4() -> QNetworkAccessManager -QtNetwork.QNetworkReply.operation?4() -> QNetworkAccessManager.Operation -QtNetwork.QNetworkReply.request?4() -> QNetworkRequest -QtNetwork.QNetworkReply.error?4() -> QNetworkReply.NetworkError -QtNetwork.QNetworkReply.url?4() -> QUrl -QtNetwork.QNetworkReply.header?4(QNetworkRequest.KnownHeaders) -> QVariant -QtNetwork.QNetworkReply.hasRawHeader?4(QAnyStringView) -> bool -QtNetwork.QNetworkReply.rawHeaderList?4() -> unknown-type -QtNetwork.QNetworkReply.rawHeader?4(QAnyStringView) -> QByteArray -QtNetwork.QNetworkReply.attribute?4(QNetworkRequest.Attribute) -> QVariant -QtNetwork.QNetworkReply.sslConfiguration?4() -> QSslConfiguration -QtNetwork.QNetworkReply.setSslConfiguration?4(QSslConfiguration) -QtNetwork.QNetworkReply.ignoreSslErrors?4() -QtNetwork.QNetworkReply.metaDataChanged?4() -QtNetwork.QNetworkReply.finished?4() -QtNetwork.QNetworkReply.encrypted?4() -QtNetwork.QNetworkReply.errorOccurred?4(QNetworkReply.NetworkError) -QtNetwork.QNetworkReply.sslErrors?4(unknown-type) -QtNetwork.QNetworkReply.uploadProgress?4(int, int) -QtNetwork.QNetworkReply.downloadProgress?4(int, int) -QtNetwork.QNetworkReply.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) -QtNetwork.QNetworkReply.redirected?4(QUrl) -QtNetwork.QNetworkReply.redirectAllowed?4() -QtNetwork.QNetworkReply.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtNetwork.QNetworkReply.setOperation?4(QNetworkAccessManager.Operation) -QtNetwork.QNetworkReply.setRequest?4(QNetworkRequest) -QtNetwork.QNetworkReply.setError?4(QNetworkReply.NetworkError, QString) -QtNetwork.QNetworkReply.setUrl?4(QUrl) -QtNetwork.QNetworkReply.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) -QtNetwork.QNetworkReply.setRawHeader?4(QByteArray, QByteArray) -QtNetwork.QNetworkReply.setAttribute?4(QNetworkRequest.Attribute, QVariant) -QtNetwork.QNetworkReply.setFinished?4(bool) -QtNetwork.QNetworkReply.isFinished?4() -> bool -QtNetwork.QNetworkReply.isRunning?4() -> bool -QtNetwork.QNetworkReply.ignoreSslErrors?4(unknown-type) -QtNetwork.QNetworkReply.rawHeaderPairs?4() -> unknown-type -QtNetwork.QNetworkReply.sslConfigurationImplementation?4(QSslConfiguration) -QtNetwork.QNetworkReply.setSslConfigurationImplementation?4(QSslConfiguration) -QtNetwork.QNetworkReply.ignoreSslErrorsImplementation?4(unknown-type) -QtNetwork.QNetworkReply.socketStartedConnecting?4() -QtNetwork.QNetworkReply.requestSent?4() -QtNetwork.QNetworkRequest.TransferTimeoutConstant?10 -QtNetwork.QNetworkRequest.TransferTimeoutConstant.DefaultTransferTimeoutConstant?10 -QtNetwork.QNetworkRequest.RedirectPolicy?10 -QtNetwork.QNetworkRequest.RedirectPolicy.ManualRedirectPolicy?10 -QtNetwork.QNetworkRequest.RedirectPolicy.NoLessSafeRedirectPolicy?10 -QtNetwork.QNetworkRequest.RedirectPolicy.SameOriginRedirectPolicy?10 -QtNetwork.QNetworkRequest.RedirectPolicy.UserVerifiedRedirectPolicy?10 -QtNetwork.QNetworkRequest.Priority?10 -QtNetwork.QNetworkRequest.Priority.HighPriority?10 -QtNetwork.QNetworkRequest.Priority.NormalPriority?10 -QtNetwork.QNetworkRequest.Priority.LowPriority?10 -QtNetwork.QNetworkRequest.LoadControl?10 -QtNetwork.QNetworkRequest.LoadControl.Automatic?10 -QtNetwork.QNetworkRequest.LoadControl.Manual?10 -QtNetwork.QNetworkRequest.CacheLoadControl?10 -QtNetwork.QNetworkRequest.CacheLoadControl.AlwaysNetwork?10 -QtNetwork.QNetworkRequest.CacheLoadControl.PreferNetwork?10 -QtNetwork.QNetworkRequest.CacheLoadControl.PreferCache?10 -QtNetwork.QNetworkRequest.CacheLoadControl.AlwaysCache?10 -QtNetwork.QNetworkRequest.Attribute?10 -QtNetwork.QNetworkRequest.Attribute.HttpStatusCodeAttribute?10 -QtNetwork.QNetworkRequest.Attribute.HttpReasonPhraseAttribute?10 -QtNetwork.QNetworkRequest.Attribute.RedirectionTargetAttribute?10 -QtNetwork.QNetworkRequest.Attribute.ConnectionEncryptedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.CacheLoadControlAttribute?10 -QtNetwork.QNetworkRequest.Attribute.CacheSaveControlAttribute?10 -QtNetwork.QNetworkRequest.Attribute.SourceIsFromCacheAttribute?10 -QtNetwork.QNetworkRequest.Attribute.DoNotBufferUploadDataAttribute?10 -QtNetwork.QNetworkRequest.Attribute.HttpPipeliningAllowedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.HttpPipeliningWasUsedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.CustomVerbAttribute?10 -QtNetwork.QNetworkRequest.Attribute.CookieLoadControlAttribute?10 -QtNetwork.QNetworkRequest.Attribute.AuthenticationReuseAttribute?10 -QtNetwork.QNetworkRequest.Attribute.CookieSaveControlAttribute?10 -QtNetwork.QNetworkRequest.Attribute.BackgroundRequestAttribute?10 -QtNetwork.QNetworkRequest.Attribute.EmitAllUploadProgressSignalsAttribute?10 -QtNetwork.QNetworkRequest.Attribute.Http2AllowedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.Http2WasUsedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.OriginalContentLengthAttribute?10 -QtNetwork.QNetworkRequest.Attribute.RedirectPolicyAttribute?10 -QtNetwork.QNetworkRequest.Attribute.Http2DirectAttribute?10 -QtNetwork.QNetworkRequest.Attribute.AutoDeleteReplyOnFinishAttribute?10 -QtNetwork.QNetworkRequest.Attribute.ConnectionCacheExpiryTimeoutSecondsAttribute?10 -QtNetwork.QNetworkRequest.Attribute.Http2CleartextAllowedAttribute?10 -QtNetwork.QNetworkRequest.Attribute.UseCredentialsAttribute?10 -QtNetwork.QNetworkRequest.Attribute.User?10 -QtNetwork.QNetworkRequest.Attribute.UserMax?10 -QtNetwork.QNetworkRequest.KnownHeaders?10 -QtNetwork.QNetworkRequest.KnownHeaders.ContentTypeHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.ContentLengthHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.LocationHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.LastModifiedHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.CookieHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.SetCookieHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.ContentDispositionHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.UserAgentHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.ServerHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.IfModifiedSinceHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.ETagHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.IfMatchHeader?10 -QtNetwork.QNetworkRequest.KnownHeaders.IfNoneMatchHeader?10 -QtNetwork.QNetworkRequest?1(QUrl) -QtNetwork.QNetworkRequest.__init__?1(self, QUrl) -QtNetwork.QNetworkRequest?1() -QtNetwork.QNetworkRequest.__init__?1(self) -QtNetwork.QNetworkRequest?1(QNetworkRequest) -QtNetwork.QNetworkRequest.__init__?1(self, QNetworkRequest) -QtNetwork.QNetworkRequest.url?4() -> QUrl -QtNetwork.QNetworkRequest.setUrl?4(QUrl) -QtNetwork.QNetworkRequest.header?4(QNetworkRequest.KnownHeaders) -> QVariant -QtNetwork.QNetworkRequest.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) -QtNetwork.QNetworkRequest.hasRawHeader?4(QAnyStringView) -> bool -QtNetwork.QNetworkRequest.rawHeaderList?4() -> unknown-type -QtNetwork.QNetworkRequest.rawHeader?4(QAnyStringView) -> QByteArray -QtNetwork.QNetworkRequest.setRawHeader?4(QByteArray, QByteArray) -QtNetwork.QNetworkRequest.attribute?4(QNetworkRequest.Attribute, QVariant defaultValue=None) -> QVariant -QtNetwork.QNetworkRequest.setAttribute?4(QNetworkRequest.Attribute, QVariant) -QtNetwork.QNetworkRequest.sslConfiguration?4() -> QSslConfiguration -QtNetwork.QNetworkRequest.setSslConfiguration?4(QSslConfiguration) -QtNetwork.QNetworkRequest.setOriginatingObject?4(QObject) -QtNetwork.QNetworkRequest.originatingObject?4() -> QObject -QtNetwork.QNetworkRequest.priority?4() -> QNetworkRequest.Priority -QtNetwork.QNetworkRequest.setPriority?4(QNetworkRequest.Priority) -QtNetwork.QNetworkRequest.swap?4(QNetworkRequest) -QtNetwork.QNetworkRequest.maximumRedirectsAllowed?4() -> int -QtNetwork.QNetworkRequest.setMaximumRedirectsAllowed?4(int) -QtNetwork.QNetworkRequest.peerVerifyName?4() -> QString -QtNetwork.QNetworkRequest.setPeerVerifyName?4(QString) -QtNetwork.QNetworkRequest.http1Configuration?4() -> QHttp1Configuration -QtNetwork.QNetworkRequest.http2Configuration?4() -> QHttp2Configuration -QtNetwork.QNetworkRequest.setHttp1Configuration?4(QHttp1Configuration) -QtNetwork.QNetworkRequest.setHttp2Configuration?4(QHttp2Configuration) -QtNetwork.QNetworkRequest.transferTimeout?4() -> int -QtNetwork.QNetworkRequest.setTransferTimeout?4(int timeout=QNetworkRequest.DefaultTransferTimeoutConstant) -QtNetwork.QNetworkRequest.decompressedSafetyCheckThreshold?4() -> int -QtNetwork.QNetworkRequest.setDecompressedSafetyCheckThreshold?4(int) -QtNetwork.QOcspResponse?1() -QtNetwork.QOcspResponse.__init__?1(self) -QtNetwork.QOcspResponse?1(QOcspResponse) -QtNetwork.QOcspResponse.__init__?1(self, QOcspResponse) -QtNetwork.QOcspResponse.certificateStatus?4() -> QOcspCertificateStatus -QtNetwork.QOcspResponse.revocationReason?4() -> QOcspRevocationReason -QtNetwork.QOcspResponse.responder?4() -> QSslCertificate -QtNetwork.QOcspResponse.subject?4() -> QSslCertificate -QtNetwork.QOcspResponse.swap?4(QOcspResponse) -QtNetwork.QPasswordDigestor.deriveKeyPbkdf1?4(QCryptographicHash.Algorithm, QByteArray, QByteArray, int, int) -> QByteArray -QtNetwork.QPasswordDigestor.deriveKeyPbkdf2?4(QCryptographicHash.Algorithm, QByteArray, QByteArray, int, int) -> QByteArray -QtNetwork.QSsl.SupportedFeature?10 -QtNetwork.QSsl.SupportedFeature.CertificateVerification?10 -QtNetwork.QSsl.SupportedFeature.ClientSideAlpn?10 -QtNetwork.QSsl.SupportedFeature.ServerSideAlpn?10 -QtNetwork.QSsl.SupportedFeature.Ocsp?10 -QtNetwork.QSsl.SupportedFeature.Psk?10 -QtNetwork.QSsl.SupportedFeature.SessionTicket?10 -QtNetwork.QSsl.SupportedFeature.Alerts?10 -QtNetwork.QSsl.ImplementedClass?10 -QtNetwork.QSsl.ImplementedClass.Key?10 -QtNetwork.QSsl.ImplementedClass.Certificate?10 -QtNetwork.QSsl.ImplementedClass.Socket?10 -QtNetwork.QSsl.ImplementedClass.DiffieHellman?10 -QtNetwork.QSsl.ImplementedClass.EllipticCurve?10 -QtNetwork.QSsl.ImplementedClass.Dtls?10 -QtNetwork.QSsl.ImplementedClass.DtlsCookie?10 -QtNetwork.QSsl.AlertType?10 -QtNetwork.QSsl.AlertType.CloseNotify?10 -QtNetwork.QSsl.AlertType.UnexpectedMessage?10 -QtNetwork.QSsl.AlertType.BadRecordMac?10 -QtNetwork.QSsl.AlertType.RecordOverflow?10 -QtNetwork.QSsl.AlertType.DecompressionFailure?10 -QtNetwork.QSsl.AlertType.HandshakeFailure?10 -QtNetwork.QSsl.AlertType.NoCertificate?10 -QtNetwork.QSsl.AlertType.BadCertificate?10 -QtNetwork.QSsl.AlertType.UnsupportedCertificate?10 -QtNetwork.QSsl.AlertType.CertificateRevoked?10 -QtNetwork.QSsl.AlertType.CertificateExpired?10 -QtNetwork.QSsl.AlertType.CertificateUnknown?10 -QtNetwork.QSsl.AlertType.IllegalParameter?10 -QtNetwork.QSsl.AlertType.UnknownCa?10 -QtNetwork.QSsl.AlertType.AccessDenied?10 -QtNetwork.QSsl.AlertType.DecodeError?10 -QtNetwork.QSsl.AlertType.DecryptError?10 -QtNetwork.QSsl.AlertType.ExportRestriction?10 -QtNetwork.QSsl.AlertType.ProtocolVersion?10 -QtNetwork.QSsl.AlertType.InsufficientSecurity?10 -QtNetwork.QSsl.AlertType.InternalError?10 -QtNetwork.QSsl.AlertType.InappropriateFallback?10 -QtNetwork.QSsl.AlertType.UserCancelled?10 -QtNetwork.QSsl.AlertType.NoRenegotiation?10 -QtNetwork.QSsl.AlertType.MissingExtension?10 -QtNetwork.QSsl.AlertType.UnsupportedExtension?10 -QtNetwork.QSsl.AlertType.CertificateUnobtainable?10 -QtNetwork.QSsl.AlertType.UnrecognizedName?10 -QtNetwork.QSsl.AlertType.BadCertificateStatusResponse?10 -QtNetwork.QSsl.AlertType.BadCertificateHashValue?10 -QtNetwork.QSsl.AlertType.UnknownPskIdentity?10 -QtNetwork.QSsl.AlertType.CertificateRequired?10 -QtNetwork.QSsl.AlertType.NoApplicationProtocol?10 -QtNetwork.QSsl.AlertType.UnknownAlertMessage?10 -QtNetwork.QSsl.AlertLevel?10 -QtNetwork.QSsl.AlertLevel.Warning?10 -QtNetwork.QSsl.AlertLevel.Fatal?10 -QtNetwork.QSsl.AlertLevel.Unknown?10 -QtNetwork.QSsl.SslOption?10 -QtNetwork.QSsl.SslOption.SslOptionDisableEmptyFragments?10 -QtNetwork.QSsl.SslOption.SslOptionDisableSessionTickets?10 -QtNetwork.QSsl.SslOption.SslOptionDisableCompression?10 -QtNetwork.QSsl.SslOption.SslOptionDisableServerNameIndication?10 -QtNetwork.QSsl.SslOption.SslOptionDisableLegacyRenegotiation?10 -QtNetwork.QSsl.SslOption.SslOptionDisableSessionSharing?10 -QtNetwork.QSsl.SslOption.SslOptionDisableSessionPersistence?10 -QtNetwork.QSsl.SslOption.SslOptionDisableServerCipherPreference?10 -QtNetwork.QSsl.SslProtocol?10 -QtNetwork.QSsl.SslProtocol.UnknownProtocol?10 -QtNetwork.QSsl.SslProtocol.TlsV1_0?10 -QtNetwork.QSsl.SslProtocol.TlsV1_0OrLater?10 -QtNetwork.QSsl.SslProtocol.TlsV1_1?10 -QtNetwork.QSsl.SslProtocol.TlsV1_1OrLater?10 -QtNetwork.QSsl.SslProtocol.TlsV1_2?10 -QtNetwork.QSsl.SslProtocol.TlsV1_2OrLater?10 -QtNetwork.QSsl.SslProtocol.AnyProtocol?10 -QtNetwork.QSsl.SslProtocol.SecureProtocols?10 -QtNetwork.QSsl.SslProtocol.DtlsV1_0?10 -QtNetwork.QSsl.SslProtocol.DtlsV1_0OrLater?10 -QtNetwork.QSsl.SslProtocol.DtlsV1_2?10 -QtNetwork.QSsl.SslProtocol.DtlsV1_2OrLater?10 -QtNetwork.QSsl.SslProtocol.TlsV1_3?10 -QtNetwork.QSsl.SslProtocol.TlsV1_3OrLater?10 -QtNetwork.QSsl.AlternativeNameEntryType?10 -QtNetwork.QSsl.AlternativeNameEntryType.EmailEntry?10 -QtNetwork.QSsl.AlternativeNameEntryType.DnsEntry?10 -QtNetwork.QSsl.AlternativeNameEntryType.IpAddressEntry?10 -QtNetwork.QSsl.KeyAlgorithm?10 -QtNetwork.QSsl.KeyAlgorithm.Opaque?10 -QtNetwork.QSsl.KeyAlgorithm.Rsa?10 -QtNetwork.QSsl.KeyAlgorithm.Dsa?10 -QtNetwork.QSsl.KeyAlgorithm.Ec?10 -QtNetwork.QSsl.KeyAlgorithm.Dh?10 -QtNetwork.QSsl.EncodingFormat?10 -QtNetwork.QSsl.EncodingFormat.Pem?10 -QtNetwork.QSsl.EncodingFormat.Der?10 -QtNetwork.QSsl.KeyType?10 -QtNetwork.QSsl.KeyType.PrivateKey?10 -QtNetwork.QSsl.KeyType.PublicKey?10 -QtNetwork.QSslCertificate.PatternSyntax?10 -QtNetwork.QSslCertificate.PatternSyntax.RegularExpression?10 -QtNetwork.QSslCertificate.PatternSyntax.Wildcard?10 -QtNetwork.QSslCertificate.PatternSyntax.FixedString?10 -QtNetwork.QSslCertificate.SubjectInfo?10 -QtNetwork.QSslCertificate.SubjectInfo.Organization?10 -QtNetwork.QSslCertificate.SubjectInfo.CommonName?10 -QtNetwork.QSslCertificate.SubjectInfo.LocalityName?10 -QtNetwork.QSslCertificate.SubjectInfo.OrganizationalUnitName?10 -QtNetwork.QSslCertificate.SubjectInfo.CountryName?10 -QtNetwork.QSslCertificate.SubjectInfo.StateOrProvinceName?10 -QtNetwork.QSslCertificate.SubjectInfo.DistinguishedNameQualifier?10 -QtNetwork.QSslCertificate.SubjectInfo.SerialNumber?10 -QtNetwork.QSslCertificate.SubjectInfo.EmailAddress?10 -QtNetwork.QSslCertificate?1(QIODevice, QSsl.EncodingFormat format=QSsl.Pem) -QtNetwork.QSslCertificate.__init__?1(self, QIODevice, QSsl.EncodingFormat format=QSsl.Pem) -QtNetwork.QSslCertificate?1(QByteArray data=QByteArray(), QSsl.EncodingFormat format=QSsl.Pem) -QtNetwork.QSslCertificate.__init__?1(self, QByteArray data=QByteArray(), QSsl.EncodingFormat format=QSsl.Pem) -QtNetwork.QSslCertificate?1(QSslCertificate) -QtNetwork.QSslCertificate.__init__?1(self, QSslCertificate) -QtNetwork.QSslCertificate.isNull?4() -> bool -QtNetwork.QSslCertificate.clear?4() -QtNetwork.QSslCertificate.version?4() -> QByteArray -QtNetwork.QSslCertificate.serialNumber?4() -> QByteArray -QtNetwork.QSslCertificate.digest?4(QCryptographicHash.Algorithm algorithm=QCryptographicHash.Md5) -> QByteArray -QtNetwork.QSslCertificate.issuerInfo?4(QSslCertificate.SubjectInfo) -> QStringList -QtNetwork.QSslCertificate.issuerInfo?4(QByteArray) -> QStringList -QtNetwork.QSslCertificate.subjectInfo?4(QSslCertificate.SubjectInfo) -> QStringList -QtNetwork.QSslCertificate.subjectInfo?4(QByteArray) -> QStringList -QtNetwork.QSslCertificate.subjectAlternativeNames?4() -> unknown-type -QtNetwork.QSslCertificate.effectiveDate?4() -> QDateTime -QtNetwork.QSslCertificate.expiryDate?4() -> QDateTime -QtNetwork.QSslCertificate.publicKey?4() -> QSslKey -QtNetwork.QSslCertificate.toPem?4() -> QByteArray -QtNetwork.QSslCertificate.toDer?4() -> QByteArray -QtNetwork.QSslCertificate.fromPath?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QSslCertificate.PatternSyntax syntax=QSslCertificate.PatternSyntax.FixedString) -> unknown-type -QtNetwork.QSslCertificate.fromDevice?4(QIODevice, QSsl.EncodingFormat format=QSsl.Pem) -> unknown-type -QtNetwork.QSslCertificate.fromData?4(QByteArray, QSsl.EncodingFormat format=QSsl.Pem) -> unknown-type -QtNetwork.QSslCertificate.handle?4() -> PyQt6.sip.voidptr -QtNetwork.QSslCertificate.swap?4(QSslCertificate) -QtNetwork.QSslCertificate.isBlacklisted?4() -> bool -QtNetwork.QSslCertificate.subjectInfoAttributes?4() -> unknown-type -QtNetwork.QSslCertificate.issuerInfoAttributes?4() -> unknown-type -QtNetwork.QSslCertificate.extensions?4() -> unknown-type -QtNetwork.QSslCertificate.toText?4() -> QString -QtNetwork.QSslCertificate.verify?4(unknown-type, QString hostName='') -> unknown-type -QtNetwork.QSslCertificate.isSelfSigned?4() -> bool -QtNetwork.QSslCertificate.importPkcs12?4(QIODevice, QSslKey, QSslCertificate, unknown-type caCertificates=[], QByteArray passPhrase=QByteArray()) -> bool -QtNetwork.QSslCertificate.issuerDisplayName?4() -> QString -QtNetwork.QSslCertificate.subjectDisplayName?4() -> QString -QtNetwork.QSslCertificateExtension?1() -QtNetwork.QSslCertificateExtension.__init__?1(self) -QtNetwork.QSslCertificateExtension?1(QSslCertificateExtension) -QtNetwork.QSslCertificateExtension.__init__?1(self, QSslCertificateExtension) -QtNetwork.QSslCertificateExtension.swap?4(QSslCertificateExtension) -QtNetwork.QSslCertificateExtension.oid?4() -> QString -QtNetwork.QSslCertificateExtension.name?4() -> QString -QtNetwork.QSslCertificateExtension.value?4() -> QVariant -QtNetwork.QSslCertificateExtension.isCritical?4() -> bool -QtNetwork.QSslCertificateExtension.isSupported?4() -> bool -QtNetwork.QSslCipher?1() -QtNetwork.QSslCipher.__init__?1(self) -QtNetwork.QSslCipher?1(QString) -QtNetwork.QSslCipher.__init__?1(self, QString) -QtNetwork.QSslCipher?1(QString, QSsl.SslProtocol) -QtNetwork.QSslCipher.__init__?1(self, QString, QSsl.SslProtocol) -QtNetwork.QSslCipher?1(QSslCipher) -QtNetwork.QSslCipher.__init__?1(self, QSslCipher) -QtNetwork.QSslCipher.isNull?4() -> bool -QtNetwork.QSslCipher.name?4() -> QString -QtNetwork.QSslCipher.supportedBits?4() -> int -QtNetwork.QSslCipher.usedBits?4() -> int -QtNetwork.QSslCipher.keyExchangeMethod?4() -> QString -QtNetwork.QSslCipher.authenticationMethod?4() -> QString -QtNetwork.QSslCipher.encryptionMethod?4() -> QString -QtNetwork.QSslCipher.protocolString?4() -> QString -QtNetwork.QSslCipher.protocol?4() -> QSsl.SslProtocol -QtNetwork.QSslCipher.swap?4(QSslCipher) -QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus?10 -QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationNone?10 -QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationNegotiated?10 -QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationUnsupported?10 -QtNetwork.QSslConfiguration.NextProtocolHttp1_1?7 -QtNetwork.QSslConfiguration?1() -QtNetwork.QSslConfiguration.__init__?1(self) -QtNetwork.QSslConfiguration?1(QSslConfiguration) -QtNetwork.QSslConfiguration.__init__?1(self, QSslConfiguration) -QtNetwork.QSslConfiguration.isNull?4() -> bool -QtNetwork.QSslConfiguration.protocol?4() -> QSsl.SslProtocol -QtNetwork.QSslConfiguration.setProtocol?4(QSsl.SslProtocol) -QtNetwork.QSslConfiguration.peerVerifyMode?4() -> QSslSocket.PeerVerifyMode -QtNetwork.QSslConfiguration.setPeerVerifyMode?4(QSslSocket.PeerVerifyMode) -QtNetwork.QSslConfiguration.peerVerifyDepth?4() -> int -QtNetwork.QSslConfiguration.setPeerVerifyDepth?4(int) -QtNetwork.QSslConfiguration.localCertificate?4() -> QSslCertificate -QtNetwork.QSslConfiguration.setLocalCertificate?4(QSslCertificate) -QtNetwork.QSslConfiguration.peerCertificate?4() -> QSslCertificate -QtNetwork.QSslConfiguration.peerCertificateChain?4() -> unknown-type -QtNetwork.QSslConfiguration.sessionCipher?4() -> QSslCipher -QtNetwork.QSslConfiguration.privateKey?4() -> QSslKey -QtNetwork.QSslConfiguration.setPrivateKey?4(QSslKey) -QtNetwork.QSslConfiguration.ciphers?4() -> unknown-type -QtNetwork.QSslConfiguration.setCiphers?4(QString) -QtNetwork.QSslConfiguration.setCiphers?4(unknown-type) -QtNetwork.QSslConfiguration.caCertificates?4() -> unknown-type -QtNetwork.QSslConfiguration.setCaCertificates?4(unknown-type) -QtNetwork.QSslConfiguration.defaultConfiguration?4() -> QSslConfiguration -QtNetwork.QSslConfiguration.setDefaultConfiguration?4(QSslConfiguration) -QtNetwork.QSslConfiguration.setSslOption?4(QSsl.SslOption, bool) -QtNetwork.QSslConfiguration.testSslOption?4(QSsl.SslOption) -> bool -QtNetwork.QSslConfiguration.swap?4(QSslConfiguration) -QtNetwork.QSslConfiguration.localCertificateChain?4() -> unknown-type -QtNetwork.QSslConfiguration.setLocalCertificateChain?4(unknown-type) -QtNetwork.QSslConfiguration.sessionTicket?4() -> QByteArray -QtNetwork.QSslConfiguration.setSessionTicket?4(QByteArray) -QtNetwork.QSslConfiguration.sessionTicketLifeTimeHint?4() -> int -QtNetwork.QSslConfiguration.setAllowedNextProtocols?4(unknown-type) -QtNetwork.QSslConfiguration.allowedNextProtocols?4() -> unknown-type -QtNetwork.QSslConfiguration.nextNegotiatedProtocol?4() -> QByteArray -QtNetwork.QSslConfiguration.nextProtocolNegotiationStatus?4() -> QSslConfiguration.NextProtocolNegotiationStatus -QtNetwork.QSslConfiguration.sessionProtocol?4() -> QSsl.SslProtocol -QtNetwork.QSslConfiguration.supportedCiphers?4() -> unknown-type -QtNetwork.QSslConfiguration.systemCaCertificates?4() -> unknown-type -QtNetwork.QSslConfiguration.ellipticCurves?4() -> unknown-type -QtNetwork.QSslConfiguration.setEllipticCurves?4(unknown-type) -QtNetwork.QSslConfiguration.supportedEllipticCurves?4() -> unknown-type -QtNetwork.QSslConfiguration.ephemeralServerKey?4() -> QSslKey -QtNetwork.QSslConfiguration.preSharedKeyIdentityHint?4() -> QByteArray -QtNetwork.QSslConfiguration.setPreSharedKeyIdentityHint?4(QByteArray) -QtNetwork.QSslConfiguration.diffieHellmanParameters?4() -> QSslDiffieHellmanParameters -QtNetwork.QSslConfiguration.setDiffieHellmanParameters?4(QSslDiffieHellmanParameters) -QtNetwork.QSslConfiguration.backendConfiguration?4() -> unknown-type -QtNetwork.QSslConfiguration.setBackendConfigurationOption?4(QByteArray, QVariant) -QtNetwork.QSslConfiguration.setBackendConfiguration?4(unknown-type backendConfiguration={}) -QtNetwork.QSslConfiguration.setOcspStaplingEnabled?4(bool) -QtNetwork.QSslConfiguration.ocspStaplingEnabled?4() -> bool -QtNetwork.QSslConfiguration.addCaCertificate?4(QSslCertificate) -QtNetwork.QSslConfiguration.addCaCertificates?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QSslCertificate.PatternSyntax syntax=QSslCertificate.PatternSyntax.FixedString) -> bool -QtNetwork.QSslConfiguration.addCaCertificates?4(unknown-type) -QtNetwork.QSslConfiguration.handshakeMustInterruptOnError?4() -> bool -QtNetwork.QSslConfiguration.setHandshakeMustInterruptOnError?4(bool) -QtNetwork.QSslConfiguration.missingCertificateIsFatal?4() -> bool -QtNetwork.QSslConfiguration.setMissingCertificateIsFatal?4(bool) -QtNetwork.QSslConfiguration.dtlsCookieVerificationEnabled?4() -> bool -QtNetwork.QSslConfiguration.setDtlsCookieVerificationEnabled?4(bool) -QtNetwork.QSslConfiguration.defaultDtlsConfiguration?4() -> QSslConfiguration -QtNetwork.QSslConfiguration.setDefaultDtlsConfiguration?4(QSslConfiguration) -QtNetwork.QSslDiffieHellmanParameters.Error?10 -QtNetwork.QSslDiffieHellmanParameters.Error.NoError?10 -QtNetwork.QSslDiffieHellmanParameters.Error.InvalidInputDataError?10 -QtNetwork.QSslDiffieHellmanParameters.Error.UnsafeParametersError?10 -QtNetwork.QSslDiffieHellmanParameters?1() -QtNetwork.QSslDiffieHellmanParameters.__init__?1(self) -QtNetwork.QSslDiffieHellmanParameters?1(QSslDiffieHellmanParameters) -QtNetwork.QSslDiffieHellmanParameters.__init__?1(self, QSslDiffieHellmanParameters) -QtNetwork.QSslDiffieHellmanParameters.swap?4(QSslDiffieHellmanParameters) -QtNetwork.QSslDiffieHellmanParameters.defaultParameters?4() -> QSslDiffieHellmanParameters -QtNetwork.QSslDiffieHellmanParameters.fromEncoded?4(QByteArray, QSsl.EncodingFormat encoding=QSsl.Pem) -> QSslDiffieHellmanParameters -QtNetwork.QSslDiffieHellmanParameters.fromEncoded?4(QIODevice, QSsl.EncodingFormat encoding=QSsl.Pem) -> QSslDiffieHellmanParameters -QtNetwork.QSslDiffieHellmanParameters.isEmpty?4() -> bool -QtNetwork.QSslDiffieHellmanParameters.isValid?4() -> bool -QtNetwork.QSslDiffieHellmanParameters.error?4() -> QSslDiffieHellmanParameters.Error -QtNetwork.QSslDiffieHellmanParameters.errorString?4() -> QString -QtNetwork.QSslEllipticCurve?1() -QtNetwork.QSslEllipticCurve.__init__?1(self) -QtNetwork.QSslEllipticCurve?1(QSslEllipticCurve) -QtNetwork.QSslEllipticCurve.__init__?1(self, QSslEllipticCurve) -QtNetwork.QSslEllipticCurve.fromShortName?4(QString) -> QSslEllipticCurve -QtNetwork.QSslEllipticCurve.fromLongName?4(QString) -> QSslEllipticCurve -QtNetwork.QSslEllipticCurve.shortName?4() -> QString -QtNetwork.QSslEllipticCurve.longName?4() -> QString -QtNetwork.QSslEllipticCurve.isValid?4() -> bool -QtNetwork.QSslEllipticCurve.isTlsNamedCurve?4() -> bool -QtNetwork.QSslError.SslError?10 -QtNetwork.QSslError.SslError.UnspecifiedError?10 -QtNetwork.QSslError.SslError.NoError?10 -QtNetwork.QSslError.SslError.UnableToGetIssuerCertificate?10 -QtNetwork.QSslError.SslError.UnableToDecryptCertificateSignature?10 -QtNetwork.QSslError.SslError.UnableToDecodeIssuerPublicKey?10 -QtNetwork.QSslError.SslError.CertificateSignatureFailed?10 -QtNetwork.QSslError.SslError.CertificateNotYetValid?10 -QtNetwork.QSslError.SslError.CertificateExpired?10 -QtNetwork.QSslError.SslError.InvalidNotBeforeField?10 -QtNetwork.QSslError.SslError.InvalidNotAfterField?10 -QtNetwork.QSslError.SslError.SelfSignedCertificate?10 -QtNetwork.QSslError.SslError.SelfSignedCertificateInChain?10 -QtNetwork.QSslError.SslError.UnableToGetLocalIssuerCertificate?10 -QtNetwork.QSslError.SslError.UnableToVerifyFirstCertificate?10 -QtNetwork.QSslError.SslError.CertificateRevoked?10 -QtNetwork.QSslError.SslError.InvalidCaCertificate?10 -QtNetwork.QSslError.SslError.PathLengthExceeded?10 -QtNetwork.QSslError.SslError.InvalidPurpose?10 -QtNetwork.QSslError.SslError.CertificateUntrusted?10 -QtNetwork.QSslError.SslError.CertificateRejected?10 -QtNetwork.QSslError.SslError.SubjectIssuerMismatch?10 -QtNetwork.QSslError.SslError.AuthorityIssuerSerialNumberMismatch?10 -QtNetwork.QSslError.SslError.NoPeerCertificate?10 -QtNetwork.QSslError.SslError.HostNameMismatch?10 -QtNetwork.QSslError.SslError.NoSslSupport?10 -QtNetwork.QSslError.SslError.CertificateBlacklisted?10 -QtNetwork.QSslError.SslError.CertificateStatusUnknown?10 -QtNetwork.QSslError.SslError.OcspNoResponseFound?10 -QtNetwork.QSslError.SslError.OcspMalformedRequest?10 -QtNetwork.QSslError.SslError.OcspMalformedResponse?10 -QtNetwork.QSslError.SslError.OcspInternalError?10 -QtNetwork.QSslError.SslError.OcspTryLater?10 -QtNetwork.QSslError.SslError.OcspSigRequred?10 -QtNetwork.QSslError.SslError.OcspUnauthorized?10 -QtNetwork.QSslError.SslError.OcspResponseCannotBeTrusted?10 -QtNetwork.QSslError.SslError.OcspResponseCertIdUnknown?10 -QtNetwork.QSslError.SslError.OcspResponseExpired?10 -QtNetwork.QSslError.SslError.OcspStatusUnknown?10 -QtNetwork.QSslError?1() -QtNetwork.QSslError.__init__?1(self) -QtNetwork.QSslError?1(QSslError.SslError) -QtNetwork.QSslError.__init__?1(self, QSslError.SslError) -QtNetwork.QSslError?1(QSslError.SslError, QSslCertificate) -QtNetwork.QSslError.__init__?1(self, QSslError.SslError, QSslCertificate) -QtNetwork.QSslError?1(QSslError) -QtNetwork.QSslError.__init__?1(self, QSslError) -QtNetwork.QSslError.error?4() -> QSslError.SslError -QtNetwork.QSslError.errorString?4() -> QString -QtNetwork.QSslError.certificate?4() -> QSslCertificate -QtNetwork.QSslError.swap?4(QSslError) -QtNetwork.QSslKey?1() -QtNetwork.QSslKey.__init__?1(self) -QtNetwork.QSslKey?1(QByteArray, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) -QtNetwork.QSslKey.__init__?1(self, QByteArray, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) -QtNetwork.QSslKey?1(QIODevice, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) -QtNetwork.QSslKey.__init__?1(self, QIODevice, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) -QtNetwork.QSslKey?1(PyQt6.sip.voidptr, QSsl.KeyType type=QSsl.PrivateKey) -QtNetwork.QSslKey.__init__?1(self, PyQt6.sip.voidptr, QSsl.KeyType type=QSsl.PrivateKey) -QtNetwork.QSslKey?1(QSslKey) -QtNetwork.QSslKey.__init__?1(self, QSslKey) -QtNetwork.QSslKey.isNull?4() -> bool -QtNetwork.QSslKey.clear?4() -QtNetwork.QSslKey.length?4() -> int -QtNetwork.QSslKey.type?4() -> QSsl.KeyType -QtNetwork.QSslKey.algorithm?4() -> QSsl.KeyAlgorithm -QtNetwork.QSslKey.toPem?4(QByteArray passPhrase=QByteArray()) -> QByteArray -QtNetwork.QSslKey.toDer?4(QByteArray passPhrase=QByteArray()) -> QByteArray -QtNetwork.QSslKey.handle?4() -> PyQt6.sip.voidptr -QtNetwork.QSslKey.swap?4(QSslKey) -QtNetwork.QSslPreSharedKeyAuthenticator?1() -QtNetwork.QSslPreSharedKeyAuthenticator.__init__?1(self) -QtNetwork.QSslPreSharedKeyAuthenticator?1(QSslPreSharedKeyAuthenticator) -QtNetwork.QSslPreSharedKeyAuthenticator.__init__?1(self, QSslPreSharedKeyAuthenticator) -QtNetwork.QSslPreSharedKeyAuthenticator.swap?4(QSslPreSharedKeyAuthenticator) -QtNetwork.QSslPreSharedKeyAuthenticator.identityHint?4() -> QByteArray -QtNetwork.QSslPreSharedKeyAuthenticator.setIdentity?4(QByteArray) -QtNetwork.QSslPreSharedKeyAuthenticator.identity?4() -> QByteArray -QtNetwork.QSslPreSharedKeyAuthenticator.maximumIdentityLength?4() -> int -QtNetwork.QSslPreSharedKeyAuthenticator.setPreSharedKey?4(QByteArray) -QtNetwork.QSslPreSharedKeyAuthenticator.preSharedKey?4() -> QByteArray -QtNetwork.QSslPreSharedKeyAuthenticator.maximumPreSharedKeyLength?4() -> int -QtNetwork.QTcpServer?1(QObject parent=None) -QtNetwork.QTcpServer.__init__?1(self, QObject parent=None) -QtNetwork.QTcpServer.listen?4(QHostAddress address=QHostAddress.Any, int port=0) -> bool -QtNetwork.QTcpServer.close?4() -QtNetwork.QTcpServer.isListening?4() -> bool -QtNetwork.QTcpServer.setMaxPendingConnections?4(int) -QtNetwork.QTcpServer.maxPendingConnections?4() -> int -QtNetwork.QTcpServer.serverPort?4() -> int -QtNetwork.QTcpServer.serverAddress?4() -> QHostAddress -QtNetwork.QTcpServer.socketDescriptor?4() -> qintptr -QtNetwork.QTcpServer.setSocketDescriptor?4(qintptr) -> bool -QtNetwork.QTcpServer.waitForNewConnection?4(int msecs=0) -> (bool, bool) -QtNetwork.QTcpServer.hasPendingConnections?4() -> bool -QtNetwork.QTcpServer.nextPendingConnection?4() -> QTcpSocket -QtNetwork.QTcpServer.serverError?4() -> QAbstractSocket.SocketError -QtNetwork.QTcpServer.errorString?4() -> QString -QtNetwork.QTcpServer.setProxy?4(QNetworkProxy) -QtNetwork.QTcpServer.proxy?4() -> QNetworkProxy -QtNetwork.QTcpServer.pauseAccepting?4() -QtNetwork.QTcpServer.resumeAccepting?4() -QtNetwork.QTcpServer.incomingConnection?4(qintptr) -QtNetwork.QTcpServer.addPendingConnection?4(QTcpSocket) -QtNetwork.QTcpServer.newConnection?4() -QtNetwork.QTcpServer.acceptError?4(QAbstractSocket.SocketError) -QtNetwork.QTcpServer.setListenBacklogSize?4(int) -QtNetwork.QTcpServer.listenBacklogSize?4() -> int -QtNetwork.QTcpServer.pendingConnectionAvailable?4() -QtNetwork.QSslServer?1(QObject parent=None) -QtNetwork.QSslServer.__init__?1(self, QObject parent=None) -QtNetwork.QSslServer.setSslConfiguration?4(QSslConfiguration) -QtNetwork.QSslServer.sslConfiguration?4() -> QSslConfiguration -QtNetwork.QSslServer.setHandshakeTimeout?4(int) -QtNetwork.QSslServer.handshakeTimeout?4() -> int -QtNetwork.QSslServer.sslErrors?4(QSslSocket, unknown-type) -QtNetwork.QSslServer.peerVerifyError?4(QSslSocket, QSslError) -QtNetwork.QSslServer.errorOccurred?4(QSslSocket, QAbstractSocket.SocketError) -QtNetwork.QSslServer.preSharedKeyAuthenticationRequired?4(QSslSocket, QSslPreSharedKeyAuthenticator) -QtNetwork.QSslServer.alertSent?4(QSslSocket, QSsl.AlertLevel, QSsl.AlertType, QString) -QtNetwork.QSslServer.alertReceived?4(QSslSocket, QSsl.AlertLevel, QSsl.AlertType, QString) -QtNetwork.QSslServer.handshakeInterruptedOnError?4(QSslSocket, QSslError) -QtNetwork.QSslServer.startedEncryptionHandshake?4(QSslSocket) -QtNetwork.QSslServer.incomingConnection?4(qintptr) -QtNetwork.QTcpSocket?1(QObject parent=None) -QtNetwork.QTcpSocket.__init__?1(self, QObject parent=None) -QtNetwork.QSslSocket.PeerVerifyMode?10 -QtNetwork.QSslSocket.PeerVerifyMode.VerifyNone?10 -QtNetwork.QSslSocket.PeerVerifyMode.QueryPeer?10 -QtNetwork.QSslSocket.PeerVerifyMode.VerifyPeer?10 -QtNetwork.QSslSocket.PeerVerifyMode.AutoVerifyPeer?10 -QtNetwork.QSslSocket.SslMode?10 -QtNetwork.QSslSocket.SslMode.UnencryptedMode?10 -QtNetwork.QSslSocket.SslMode.SslClientMode?10 -QtNetwork.QSslSocket.SslMode.SslServerMode?10 -QtNetwork.QSslSocket?1(QObject parent=None) -QtNetwork.QSslSocket.__init__?1(self, QObject parent=None) -QtNetwork.QSslSocket.connectToHostEncrypted?4(QString, int, unknown-type mode=QIODeviceBase.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) -QtNetwork.QSslSocket.connectToHostEncrypted?4(QString, int, QString, unknown-type mode=QIODeviceBase.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) -QtNetwork.QSslSocket.setSocketDescriptor?4(qintptr, QAbstractSocket.SocketState state=QAbstractSocket.ConnectedState, unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtNetwork.QSslSocket.mode?4() -> QSslSocket.SslMode -QtNetwork.QSslSocket.isEncrypted?4() -> bool -QtNetwork.QSslSocket.protocol?4() -> QSsl.SslProtocol -QtNetwork.QSslSocket.setProtocol?4(QSsl.SslProtocol) -QtNetwork.QSslSocket.bytesAvailable?4() -> int -QtNetwork.QSslSocket.bytesToWrite?4() -> int -QtNetwork.QSslSocket.canReadLine?4() -> bool -QtNetwork.QSslSocket.close?4() -QtNetwork.QSslSocket.atEnd?4() -> bool -QtNetwork.QSslSocket.setLocalCertificate?4(QSslCertificate) -QtNetwork.QSslSocket.setLocalCertificate?4(QString, QSsl.EncodingFormat format=QSsl.Pem) -QtNetwork.QSslSocket.localCertificate?4() -> QSslCertificate -QtNetwork.QSslSocket.peerCertificate?4() -> QSslCertificate -QtNetwork.QSslSocket.peerCertificateChain?4() -> unknown-type -QtNetwork.QSslSocket.sessionCipher?4() -> QSslCipher -QtNetwork.QSslSocket.setPrivateKey?4(QSslKey) -QtNetwork.QSslSocket.setPrivateKey?4(QString, QSsl.KeyAlgorithm algorithm=QSsl.Rsa, QSsl.EncodingFormat format=QSsl.Pem, QByteArray passPhrase=QByteArray()) -QtNetwork.QSslSocket.privateKey?4() -> QSslKey -QtNetwork.QSslSocket.waitForConnected?4(int msecs=30000) -> bool -QtNetwork.QSslSocket.waitForEncrypted?4(int msecs=30000) -> bool -QtNetwork.QSslSocket.waitForReadyRead?4(int msecs=30000) -> bool -QtNetwork.QSslSocket.waitForBytesWritten?4(int msecs=30000) -> bool -QtNetwork.QSslSocket.waitForDisconnected?4(int msecs=30000) -> bool -QtNetwork.QSslSocket.supportsSsl?4() -> bool -QtNetwork.QSslSocket.startClientEncryption?4() -QtNetwork.QSslSocket.startServerEncryption?4() -QtNetwork.QSslSocket.ignoreSslErrors?4() -QtNetwork.QSslSocket.encrypted?4() -QtNetwork.QSslSocket.sslErrors?4(unknown-type) -QtNetwork.QSslSocket.modeChanged?4(QSslSocket.SslMode) -QtNetwork.QSslSocket.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) -QtNetwork.QSslSocket.readData?4(int) -> Any -QtNetwork.QSslSocket.writeData?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -> int -QtNetwork.QSslSocket.skipData?4(int) -> int -QtNetwork.QSslSocket.peerVerifyMode?4() -> QSslSocket.PeerVerifyMode -QtNetwork.QSslSocket.setPeerVerifyMode?4(QSslSocket.PeerVerifyMode) -QtNetwork.QSslSocket.peerVerifyDepth?4() -> int -QtNetwork.QSslSocket.setPeerVerifyDepth?4(int) -QtNetwork.QSslSocket.setReadBufferSize?4(int) -QtNetwork.QSslSocket.encryptedBytesAvailable?4() -> int -QtNetwork.QSslSocket.encryptedBytesToWrite?4() -> int -QtNetwork.QSslSocket.sslConfiguration?4() -> QSslConfiguration -QtNetwork.QSslSocket.setSslConfiguration?4(QSslConfiguration) -QtNetwork.QSslSocket.peerVerifyError?4(QSslError) -QtNetwork.QSslSocket.encryptedBytesWritten?4(int) -QtNetwork.QSslSocket.newSessionTicketReceived?4() -QtNetwork.QSslSocket.setSocketOption?4(QAbstractSocket.SocketOption, QVariant) -QtNetwork.QSslSocket.socketOption?4(QAbstractSocket.SocketOption) -> QVariant -QtNetwork.QSslSocket.ignoreSslErrors?4(unknown-type) -QtNetwork.QSslSocket.peerVerifyName?4() -> QString -QtNetwork.QSslSocket.setPeerVerifyName?4(QString) -QtNetwork.QSslSocket.resume?4() -QtNetwork.QSslSocket.connectToHost?4(QString, int, unknown-type mode=QIODeviceBase.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) -QtNetwork.QSslSocket.disconnectFromHost?4() -QtNetwork.QSslSocket.sslLibraryVersionNumber?4() -> int -QtNetwork.QSslSocket.sslLibraryVersionString?4() -> QString -QtNetwork.QSslSocket.setLocalCertificateChain?4(unknown-type) -QtNetwork.QSslSocket.localCertificateChain?4() -> unknown-type -QtNetwork.QSslSocket.sessionProtocol?4() -> QSsl.SslProtocol -QtNetwork.QSslSocket.sslLibraryBuildVersionNumber?4() -> int -QtNetwork.QSslSocket.sslLibraryBuildVersionString?4() -> QString -QtNetwork.QSslSocket.ocspResponses?4() -> unknown-type -QtNetwork.QSslSocket.sslHandshakeErrors?4() -> unknown-type -QtNetwork.QSslSocket.continueInterruptedHandshake?4() -QtNetwork.QSslSocket.alertSent?4(QSsl.AlertLevel, QSsl.AlertType, QString) -QtNetwork.QSslSocket.alertReceived?4(QSsl.AlertLevel, QSsl.AlertType, QString) -QtNetwork.QSslSocket.handshakeInterruptedOnError?4(QSslError) -QtNetwork.QSslSocket.availableBackends?4() -> unknown-type -QtNetwork.QSslSocket.activeBackend?4() -> QString -QtNetwork.QSslSocket.setActiveBackend?4(QString) -> bool -QtNetwork.QSslSocket.supportedProtocols?4(QString backendName='') -> unknown-type -QtNetwork.QSslSocket.isProtocolSupported?4(QSsl.SslProtocol, QString backendName='') -> bool -QtNetwork.QSslSocket.implementedClasses?4(QString backendName='') -> unknown-type -QtNetwork.QSslSocket.isClassImplemented?4(QSsl.ImplementedClass, QString backendName='') -> bool -QtNetwork.QSslSocket.supportedFeatures?4(QString backendName='') -> unknown-type -QtNetwork.QSslSocket.isFeatureSupported?4(QSsl.SupportedFeature, QString backendName='') -> bool -QtNetwork.QUdpSocket?1(QObject parent=None) -QtNetwork.QUdpSocket.__init__?1(self, QObject parent=None) -QtNetwork.QUdpSocket.hasPendingDatagrams?4() -> bool -QtNetwork.QUdpSocket.pendingDatagramSize?4() -> int -QtNetwork.QUdpSocket.readDatagram?4(int) -> (Any, QHostAddress, int) -QtNetwork.QUdpSocket.receiveDatagram?4(int maxSize=-1) -> QNetworkDatagram -QtNetwork.QUdpSocket.writeDatagram?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr], QHostAddress, int) -> int -QtNetwork.QUdpSocket.writeDatagram?4(QNetworkDatagram) -> int -QtNetwork.QUdpSocket.joinMulticastGroup?4(QHostAddress) -> bool -QtNetwork.QUdpSocket.joinMulticastGroup?4(QHostAddress, QNetworkInterface) -> bool -QtNetwork.QUdpSocket.leaveMulticastGroup?4(QHostAddress) -> bool -QtNetwork.QUdpSocket.leaveMulticastGroup?4(QHostAddress, QNetworkInterface) -> bool -QtNetwork.QUdpSocket.multicastInterface?4() -> QNetworkInterface -QtNetwork.QUdpSocket.setMulticastInterface?4(QNetworkInterface) -QtGui.qt_set_sequence_auto_mnemonic?4(bool) -QtGui.qFuzzyCompare?4(QMatrix4x4, QMatrix4x4) -> bool -QtGui.qPixelFormatRgba?4(int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied premultiplied=QPixelFormat.NotPremultiplied, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat -QtGui.qPixelFormatGrayscale?4(int, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat -QtGui.qPixelFormatCmyk?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat -QtGui.qPixelFormatHsl?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.FloatingPoint) -> QPixelFormat -QtGui.qPixelFormatHsv?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.FloatingPoint) -> QPixelFormat -QtGui.qPixelFormatYuv?4(QPixelFormat.YUVLayout, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.AlphaPremultiplied premultiplied=QPixelFormat.NotPremultiplied, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedByte, QPixelFormat.ByteOrder byteOrder=QPixelFormat.LittleEndian) -> QPixelFormat -QtGui.qPixelFormatAlpha?4(int, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat -QtGui.qFuzzyCompare?4(QQuaternion, QQuaternion) -> bool -QtGui.qRgba64?4(int, int, int, int) -> QRgba64 -QtGui.qRgba64?4(int) -> QRgba64 -QtGui.qPremultiply?4(QRgba64) -> QRgba64 -QtGui.qUnpremultiply?4(QRgba64) -> QRgba64 -QtGui.qRed?4(QRgba64) -> int -QtGui.qGreen?4(QRgba64) -> int -QtGui.qBlue?4(QRgba64) -> int -QtGui.qAlpha?4(QRgba64) -> int -QtGui.qRed?4(int) -> int -QtGui.qGreen?4(int) -> int -QtGui.qBlue?4(int) -> int -QtGui.qAlpha?4(int) -> int -QtGui.qRgb?4(int, int, int) -> int -QtGui.qRgba?4(int, int, int, int) -> int -QtGui.qGray?4(int, int, int) -> int -QtGui.qGray?4(int) -> int -QtGui.qPremultiply?4(int) -> int -QtGui.qUnpremultiply?4(int) -> int -QtGui.qFuzzyCompare?4(QTransform, QTransform) -> bool -QtGui.qFuzzyCompare?4(QVector4D, QVector4D) -> bool -QtGui.qFuzzyCompare?4(QVector3D, QVector3D) -> bool -QtGui.qFuzzyCompare?4(QVector2D, QVector2D) -> bool -QtGui.QAbstractFileIconProvider.Option?10 -QtGui.QAbstractFileIconProvider.Option.DontUseCustomDirectoryIcons?10 -QtGui.QAbstractFileIconProvider.IconType?10 -QtGui.QAbstractFileIconProvider.IconType.Computer?10 -QtGui.QAbstractFileIconProvider.IconType.Desktop?10 -QtGui.QAbstractFileIconProvider.IconType.Trashcan?10 -QtGui.QAbstractFileIconProvider.IconType.Network?10 -QtGui.QAbstractFileIconProvider.IconType.Drive?10 -QtGui.QAbstractFileIconProvider.IconType.Folder?10 -QtGui.QAbstractFileIconProvider.IconType.File?10 -QtGui.QAbstractFileIconProvider?1() -QtGui.QAbstractFileIconProvider.__init__?1(self) -QtGui.QAbstractFileIconProvider.icon?4(QAbstractFileIconProvider.IconType) -> QIcon -QtGui.QAbstractFileIconProvider.icon?4(QFileInfo) -> QIcon -QtGui.QAbstractFileIconProvider.type?4(QFileInfo) -> QString -QtGui.QAbstractFileIconProvider.setOptions?4(unknown-type) -QtGui.QAbstractFileIconProvider.options?4() -> unknown-type -QtGui.QAbstractTextDocumentLayout?1(QTextDocument) -QtGui.QAbstractTextDocumentLayout.__init__?1(self, QTextDocument) -QtGui.QAbstractTextDocumentLayout.draw?4(QPainter, QAbstractTextDocumentLayout.PaintContext) -QtGui.QAbstractTextDocumentLayout.hitTest?4(QPointF, Qt.HitTestAccuracy) -> int -QtGui.QAbstractTextDocumentLayout.anchorAt?4(QPointF) -> QString -QtGui.QAbstractTextDocumentLayout.pageCount?4() -> int -QtGui.QAbstractTextDocumentLayout.documentSize?4() -> QSizeF -QtGui.QAbstractTextDocumentLayout.frameBoundingRect?4(QTextFrame) -> QRectF -QtGui.QAbstractTextDocumentLayout.blockBoundingRect?4(QTextBlock) -> QRectF -QtGui.QAbstractTextDocumentLayout.setPaintDevice?4(QPaintDevice) -QtGui.QAbstractTextDocumentLayout.paintDevice?4() -> QPaintDevice -QtGui.QAbstractTextDocumentLayout.document?4() -> QTextDocument -QtGui.QAbstractTextDocumentLayout.registerHandler?4(int, QObject) -QtGui.QAbstractTextDocumentLayout.unregisterHandler?4(int, QObject component=None) -QtGui.QAbstractTextDocumentLayout.handlerForObject?4(int) -> QTextObjectInterface -QtGui.QAbstractTextDocumentLayout.update?4(QRectF rect=QRectF(0, 0, 1e+09, 1e+09)) -QtGui.QAbstractTextDocumentLayout.documentSizeChanged?4(QSizeF) -QtGui.QAbstractTextDocumentLayout.pageCountChanged?4(int) -QtGui.QAbstractTextDocumentLayout.updateBlock?4(QTextBlock) -QtGui.QAbstractTextDocumentLayout.documentChanged?4(int, int, int) -QtGui.QAbstractTextDocumentLayout.resizeInlineObject?4(QTextInlineObject, int, QTextFormat) -QtGui.QAbstractTextDocumentLayout.positionInlineObject?4(QTextInlineObject, int, QTextFormat) -QtGui.QAbstractTextDocumentLayout.drawInlineObject?4(QPainter, QRectF, QTextInlineObject, int, QTextFormat) -QtGui.QAbstractTextDocumentLayout.format?4(int) -> QTextCharFormat -QtGui.QAbstractTextDocumentLayout.imageAt?4(QPointF) -> QString -QtGui.QAbstractTextDocumentLayout.formatAt?4(QPointF) -> QTextFormat -QtGui.QAbstractTextDocumentLayout.blockWithMarkerAt?4(QPointF) -> QTextBlock -QtGui.QAbstractTextDocumentLayout.Selection.cursor?7 -QtGui.QAbstractTextDocumentLayout.Selection.format?7 -QtGui.QAbstractTextDocumentLayout.Selection?1() -QtGui.QAbstractTextDocumentLayout.Selection.__init__?1(self) -QtGui.QAbstractTextDocumentLayout.Selection?1(QAbstractTextDocumentLayout.Selection) -QtGui.QAbstractTextDocumentLayout.Selection.__init__?1(self, QAbstractTextDocumentLayout.Selection) -QtGui.QAbstractTextDocumentLayout.PaintContext.clip?7 -QtGui.QAbstractTextDocumentLayout.PaintContext.cursorPosition?7 -QtGui.QAbstractTextDocumentLayout.PaintContext.palette?7 -QtGui.QAbstractTextDocumentLayout.PaintContext.selections?7 -QtGui.QAbstractTextDocumentLayout.PaintContext?1() -QtGui.QAbstractTextDocumentLayout.PaintContext.__init__?1(self) -QtGui.QAbstractTextDocumentLayout.PaintContext?1(QAbstractTextDocumentLayout.PaintContext) -QtGui.QAbstractTextDocumentLayout.PaintContext.__init__?1(self, QAbstractTextDocumentLayout.PaintContext) -QtGui.QTextObjectInterface?1() -QtGui.QTextObjectInterface.__init__?1(self) -QtGui.QTextObjectInterface?1(QTextObjectInterface) -QtGui.QTextObjectInterface.__init__?1(self, QTextObjectInterface) -QtGui.QTextObjectInterface.intrinsicSize?4(QTextDocument, int, QTextFormat) -> QSizeF -QtGui.QTextObjectInterface.drawObject?4(QPainter, QRectF, QTextDocument, int, QTextFormat) -QtGui.QAction.Priority?10 -QtGui.QAction.Priority.LowPriority?10 -QtGui.QAction.Priority.NormalPriority?10 -QtGui.QAction.Priority.HighPriority?10 -QtGui.QAction.MenuRole?10 -QtGui.QAction.MenuRole.NoRole?10 -QtGui.QAction.MenuRole.TextHeuristicRole?10 -QtGui.QAction.MenuRole.ApplicationSpecificRole?10 -QtGui.QAction.MenuRole.AboutQtRole?10 -QtGui.QAction.MenuRole.AboutRole?10 -QtGui.QAction.MenuRole.PreferencesRole?10 -QtGui.QAction.MenuRole.QuitRole?10 -QtGui.QAction.ActionEvent?10 -QtGui.QAction.ActionEvent.Trigger?10 -QtGui.QAction.ActionEvent.Hover?10 -QtGui.QAction?1(QObject parent=None) -QtGui.QAction.__init__?1(self, QObject parent=None) -QtGui.QAction?1(QString, QObject parent=None) -QtGui.QAction.__init__?1(self, QString, QObject parent=None) -QtGui.QAction?1(QIcon, QString, QObject parent=None) -QtGui.QAction.__init__?1(self, QIcon, QString, QObject parent=None) -QtGui.QAction.setActionGroup?4(QActionGroup) -QtGui.QAction.actionGroup?4() -> QActionGroup -QtGui.QAction.setIcon?4(QIcon) -QtGui.QAction.icon?4() -> QIcon -QtGui.QAction.setText?4(QString) -QtGui.QAction.text?4() -> QString -QtGui.QAction.setIconText?4(QString) -QtGui.QAction.iconText?4() -> QString -QtGui.QAction.setToolTip?4(QString) -QtGui.QAction.toolTip?4() -> QString -QtGui.QAction.setStatusTip?4(QString) -QtGui.QAction.statusTip?4() -> QString -QtGui.QAction.setWhatsThis?4(QString) -QtGui.QAction.whatsThis?4() -> QString -QtGui.QAction.setSeparator?4(bool) -QtGui.QAction.isSeparator?4() -> bool -QtGui.QAction.setShortcut?4(QKeySequence) -QtGui.QAction.shortcut?4() -> QKeySequence -QtGui.QAction.setShortcutContext?4(Qt.ShortcutContext) -QtGui.QAction.shortcutContext?4() -> Qt.ShortcutContext -QtGui.QAction.setFont?4(QFont) -QtGui.QAction.font?4() -> QFont -QtGui.QAction.setCheckable?4(bool) -QtGui.QAction.isCheckable?4() -> bool -QtGui.QAction.data?4() -> QVariant -QtGui.QAction.setData?4(QVariant) -QtGui.QAction.isChecked?4() -> bool -QtGui.QAction.isEnabled?4() -> bool -QtGui.QAction.isVisible?4() -> bool -QtGui.QAction.activate?4(QAction.ActionEvent) -QtGui.QAction.showStatusText?4(QObject object=None) -> bool -QtGui.QAction.event?4(QEvent) -> bool -QtGui.QAction.trigger?4() -QtGui.QAction.hover?4() -QtGui.QAction.setChecked?4(bool) -QtGui.QAction.toggle?4() -QtGui.QAction.setEnabled?4(bool) -QtGui.QAction.setDisabled?4(bool) -QtGui.QAction.setVisible?4(bool) -QtGui.QAction.changed?4() -QtGui.QAction.triggered?4(bool checked=False) -QtGui.QAction.hovered?4() -QtGui.QAction.toggled?4(bool) -QtGui.QAction.setShortcuts?4(unknown-type) -QtGui.QAction.setShortcuts?4(QKeySequence.StandardKey) -QtGui.QAction.shortcuts?4() -> unknown-type -QtGui.QAction.setAutoRepeat?4(bool) -QtGui.QAction.autoRepeat?4() -> bool -QtGui.QAction.setMenuRole?4(QAction.MenuRole) -QtGui.QAction.menuRole?4() -> QAction.MenuRole -QtGui.QAction.menu?4() -> QMenu -QtGui.QAction.setMenu?4(QMenu) -QtGui.QAction.setIconVisibleInMenu?4(bool) -QtGui.QAction.isIconVisibleInMenu?4() -> bool -QtGui.QAction.setPriority?4(QAction.Priority) -QtGui.QAction.priority?4() -> QAction.Priority -QtGui.QAction.setShortcutVisibleInContextMenu?4(bool) -QtGui.QAction.isShortcutVisibleInContextMenu?4() -> bool -QtGui.QAction.associatedObjects?4() -> unknown-type -QtGui.QAction.resetEnabled?4() -QtGui.QAction.enabledChanged?4(bool) -QtGui.QAction.checkableChanged?4(bool) -QtGui.QAction.visibleChanged?4() -QtGui.QActionGroup.ExclusionPolicy?10 -QtGui.QActionGroup.ExclusionPolicy.None_?10 -QtGui.QActionGroup.ExclusionPolicy.Exclusive?10 -QtGui.QActionGroup.ExclusionPolicy.ExclusiveOptional?10 -QtGui.QActionGroup?1(QObject) -QtGui.QActionGroup.__init__?1(self, QObject) -QtGui.QActionGroup.addAction?4(QAction) -> QAction -QtGui.QActionGroup.addAction?4(QString) -> QAction -QtGui.QActionGroup.addAction?4(QIcon, QString) -> QAction -QtGui.QActionGroup.removeAction?4(QAction) -QtGui.QActionGroup.actions?4() -> unknown-type -QtGui.QActionGroup.checkedAction?4() -> QAction -QtGui.QActionGroup.isExclusive?4() -> bool -QtGui.QActionGroup.isEnabled?4() -> bool -QtGui.QActionGroup.isVisible?4() -> bool -QtGui.QActionGroup.exclusionPolicy?4() -> QActionGroup.ExclusionPolicy -QtGui.QActionGroup.setEnabled?4(bool) -QtGui.QActionGroup.setDisabled?4(bool) -QtGui.QActionGroup.setVisible?4(bool) -QtGui.QActionGroup.setExclusive?4(bool) -QtGui.QActionGroup.setExclusionPolicy?4(QActionGroup.ExclusionPolicy) -QtGui.QActionGroup.triggered?4(QAction) -QtGui.QActionGroup.hovered?4(QAction) -QtGui.QBackingStore?1(QWindow) -QtGui.QBackingStore.__init__?1(self, QWindow) -QtGui.QBackingStore.window?4() -> QWindow -QtGui.QBackingStore.paintDevice?4() -> QPaintDevice -QtGui.QBackingStore.flush?4(QRegion, QWindow window=None, QPoint offset=QPoint()) -QtGui.QBackingStore.resize?4(QSize) -QtGui.QBackingStore.size?4() -> QSize -QtGui.QBackingStore.scroll?4(QRegion, int, int) -> bool -QtGui.QBackingStore.beginPaint?4(QRegion) -QtGui.QBackingStore.endPaint?4() -QtGui.QBackingStore.setStaticContents?4(QRegion) -QtGui.QBackingStore.staticContents?4() -> QRegion -QtGui.QBackingStore.hasStaticContents?4() -> bool -QtGui.QPaintDevice.PaintDeviceMetric?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmWidth?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmHeight?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmWidthMM?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmHeightMM?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmNumColors?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmDepth?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmDpiX?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmDpiY?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmPhysicalDpiX?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmPhysicalDpiY?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmDevicePixelRatio?10 -QtGui.QPaintDevice.PaintDeviceMetric.PdmDevicePixelRatioScaled?10 -QtGui.QPaintDevice?1() -QtGui.QPaintDevice.__init__?1(self) -QtGui.QPaintDevice.paintEngine?4() -> QPaintEngine -QtGui.QPaintDevice.width?4() -> int -QtGui.QPaintDevice.height?4() -> int -QtGui.QPaintDevice.widthMM?4() -> int -QtGui.QPaintDevice.heightMM?4() -> int -QtGui.QPaintDevice.logicalDpiX?4() -> int -QtGui.QPaintDevice.logicalDpiY?4() -> int -QtGui.QPaintDevice.physicalDpiX?4() -> int -QtGui.QPaintDevice.physicalDpiY?4() -> int -QtGui.QPaintDevice.depth?4() -> int -QtGui.QPaintDevice.paintingActive?4() -> bool -QtGui.QPaintDevice.colorCount?4() -> int -QtGui.QPaintDevice.devicePixelRatio?4() -> float -QtGui.QPaintDevice.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QPaintDevice.devicePixelRatioF?4() -> float -QtGui.QPaintDevice.devicePixelRatioFScale?4() -> float -QtGui.QPixmap?1() -QtGui.QPixmap.__init__?1(self) -QtGui.QPixmap?1(int, int) -QtGui.QPixmap.__init__?1(self, int, int) -QtGui.QPixmap?1(QSize) -QtGui.QPixmap.__init__?1(self, QSize) -QtGui.QPixmap?1(QString, str format=None, unknown-type flags=Qt.AutoColor) -QtGui.QPixmap.__init__?1(self, QString, str format=None, unknown-type flags=Qt.AutoColor) -QtGui.QPixmap?1(List) -QtGui.QPixmap.__init__?1(self, List) -QtGui.QPixmap?1(QPixmap) -QtGui.QPixmap.__init__?1(self, QPixmap) -QtGui.QPixmap?1(QVariant) -QtGui.QPixmap.__init__?1(self, QVariant) -QtGui.QPixmap.isNull?4() -> bool -QtGui.QPixmap.devType?4() -> int -QtGui.QPixmap.width?4() -> int -QtGui.QPixmap.height?4() -> int -QtGui.QPixmap.size?4() -> QSize -QtGui.QPixmap.rect?4() -> QRect -QtGui.QPixmap.depth?4() -> int -QtGui.QPixmap.defaultDepth?4() -> int -QtGui.QPixmap.fill?4(QColor color=Qt.white) -QtGui.QPixmap.mask?4() -> QBitmap -QtGui.QPixmap.setMask?4(QBitmap) -QtGui.QPixmap.hasAlpha?4() -> bool -QtGui.QPixmap.hasAlphaChannel?4() -> bool -QtGui.QPixmap.createHeuristicMask?4(bool clipTight=True) -> QBitmap -QtGui.QPixmap.createMaskFromColor?4(QColor, Qt.MaskMode mode=Qt.MaskInColor) -> QBitmap -QtGui.QPixmap.scaled?4(int, int, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QPixmap -QtGui.QPixmap.scaled?4(QSize, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QPixmap -QtGui.QPixmap.scaledToWidth?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap -QtGui.QPixmap.scaledToHeight?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap -QtGui.QPixmap.toImage?4() -> QImage -QtGui.QPixmap.fromImage?4(QImage, unknown-type flags=Qt.AutoColor) -> QPixmap -QtGui.QPixmap.fromImageReader?4(QImageReader, unknown-type flags=Qt.AutoColor) -> QPixmap -QtGui.QPixmap.convertFromImage?4(QImage, unknown-type flags=Qt.AutoColor) -> bool -QtGui.QPixmap.load?4(QString, str format=None, unknown-type flags=Qt.AutoColor) -> bool -QtGui.QPixmap.loadFromData?4(bytes, str format=None, unknown-type flags=Qt.AutoColor) -> bool -QtGui.QPixmap.loadFromData?4(QByteArray, str format=None, unknown-type flags=Qt.AutoColor) -> bool -QtGui.QPixmap.save?4(QString, str format=None, int quality=-1) -> bool -QtGui.QPixmap.save?4(QIODevice, str format=None, int quality=-1) -> bool -QtGui.QPixmap.copy?4(QRect rect=QRect()) -> QPixmap -QtGui.QPixmap.detach?4() -QtGui.QPixmap.isQBitmap?4() -> bool -QtGui.QPixmap.paintEngine?4() -> QPaintEngine -QtGui.QPixmap.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QPixmap.copy?4(int, int, int, int) -> QPixmap -QtGui.QPixmap.transformed?4(QTransform, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap -QtGui.QPixmap.trueMatrix?4(QTransform, int, int) -> QTransform -QtGui.QPixmap.cacheKey?4() -> int -QtGui.QPixmap.scroll?4(int, int, QRect) -> QRegion -QtGui.QPixmap.scroll?4(int, int, int, int, int, int) -> QRegion -QtGui.QPixmap.swap?4(QPixmap) -QtGui.QPixmap.devicePixelRatio?4() -> float -QtGui.QPixmap.setDevicePixelRatio?4(float) -QtGui.QPixmap.deviceIndependentSize?4() -> QSizeF -QtGui.QBitmap?1() -QtGui.QBitmap.__init__?1(self) -QtGui.QBitmap?1(int, int) -QtGui.QBitmap.__init__?1(self, int, int) -QtGui.QBitmap?1(QSize) -QtGui.QBitmap.__init__?1(self, QSize) -QtGui.QBitmap?1(QString, str format=None) -QtGui.QBitmap.__init__?1(self, QString, str format=None) -QtGui.QBitmap?1(QVariant) -QtGui.QBitmap.__init__?1(self, QVariant) -QtGui.QBitmap?1(QBitmap) -QtGui.QBitmap.__init__?1(self, QBitmap) -QtGui.QBitmap.clear?4() -QtGui.QBitmap.fromImage?4(QImage, unknown-type flags=Qt.AutoColor) -> QBitmap -QtGui.QBitmap.fromPixmap?4(QPixmap) -> QBitmap -QtGui.QBitmap.fromData?4(QSize, bytes, QImage.Format format=QImage.Format_MonoLSB) -> QBitmap -QtGui.QBitmap.transformed?4(QTransform) -> QBitmap -QtGui.QBitmap.swap?4(QBitmap) -QtGui.QColor.NameFormat?10 -QtGui.QColor.NameFormat.HexRgb?10 -QtGui.QColor.NameFormat.HexArgb?10 -QtGui.QColor.Spec?10 -QtGui.QColor.Spec.Invalid?10 -QtGui.QColor.Spec.Rgb?10 -QtGui.QColor.Spec.Hsv?10 -QtGui.QColor.Spec.Cmyk?10 -QtGui.QColor.Spec.Hsl?10 -QtGui.QColor.Spec.ExtendedRgb?10 -QtGui.QColor?1(Qt.GlobalColor) -QtGui.QColor.__init__?1(self, Qt.GlobalColor) -QtGui.QColor?1(int) -QtGui.QColor.__init__?1(self, int) -QtGui.QColor?1(QRgba64) -QtGui.QColor.__init__?1(self, QRgba64) -QtGui.QColor?1(QVariant) -QtGui.QColor.__init__?1(self, QVariant) -QtGui.QColor?1() -QtGui.QColor.__init__?1(self) -QtGui.QColor?1(int, int, int, int alpha=255) -QtGui.QColor.__init__?1(self, int, int, int, int alpha=255) -QtGui.QColor?1(QStringView) -QtGui.QColor.__init__?1(self, QStringView) -QtGui.QColor?1(QColor) -QtGui.QColor.__init__?1(self, QColor) -QtGui.QColor.name?4(QColor.NameFormat format=QColor.HexRgb) -> QString -QtGui.QColor.setNamedColor?4(QStringView) -QtGui.QColor.colorNames?4() -> QStringList -QtGui.QColor.spec?4() -> QColor.Spec -QtGui.QColor.alpha?4() -> int -QtGui.QColor.setAlpha?4(int) -QtGui.QColor.alphaF?4() -> float -QtGui.QColor.setAlphaF?4(float) -QtGui.QColor.red?4() -> int -QtGui.QColor.green?4() -> int -QtGui.QColor.blue?4() -> int -QtGui.QColor.setRed?4(int) -QtGui.QColor.setGreen?4(int) -QtGui.QColor.setBlue?4(int) -QtGui.QColor.redF?4() -> float -QtGui.QColor.greenF?4() -> float -QtGui.QColor.blueF?4() -> float -QtGui.QColor.setRedF?4(float) -QtGui.QColor.setGreenF?4(float) -QtGui.QColor.setBlueF?4(float) -QtGui.QColor.getRgb?4() -> (int, int, int, int) -QtGui.QColor.setRgb?4(int, int, int, int alpha=255) -QtGui.QColor.getRgbF?4() -> (float, float, float, float) -QtGui.QColor.setRgbF?4(float, float, float, float alpha=1) -QtGui.QColor.rgba?4() -> int -QtGui.QColor.setRgba?4(int) -QtGui.QColor.rgb?4() -> int -QtGui.QColor.setRgb?4(int) -QtGui.QColor.hue?4() -> int -QtGui.QColor.saturation?4() -> int -QtGui.QColor.value?4() -> int -QtGui.QColor.hueF?4() -> float -QtGui.QColor.saturationF?4() -> float -QtGui.QColor.valueF?4() -> float -QtGui.QColor.getHsv?4() -> (int, int, int, int) -QtGui.QColor.setHsv?4(int, int, int, int alpha=255) -QtGui.QColor.getHsvF?4() -> (float, float, float, float) -QtGui.QColor.setHsvF?4(float, float, float, float alpha=1) -QtGui.QColor.cyan?4() -> int -QtGui.QColor.magenta?4() -> int -QtGui.QColor.yellow?4() -> int -QtGui.QColor.black?4() -> int -QtGui.QColor.cyanF?4() -> float -QtGui.QColor.magentaF?4() -> float -QtGui.QColor.yellowF?4() -> float -QtGui.QColor.blackF?4() -> float -QtGui.QColor.getCmyk?4() -> (int, int, int, int, int) -QtGui.QColor.setCmyk?4(int, int, int, int, int alpha=255) -QtGui.QColor.getCmykF?4() -> (float, float, float, float, float) -QtGui.QColor.setCmykF?4(float, float, float, float, float alpha=1) -QtGui.QColor.toRgb?4() -> QColor -QtGui.QColor.toHsv?4() -> QColor -QtGui.QColor.toCmyk?4() -> QColor -QtGui.QColor.convertTo?4(QColor.Spec) -> QColor -QtGui.QColor.fromRgb?4(int) -> QColor -QtGui.QColor.fromRgba?4(int) -> QColor -QtGui.QColor.fromRgb?4(int, int, int, int alpha=255) -> QColor -QtGui.QColor.fromRgbF?4(float, float, float, float alpha=1) -> QColor -QtGui.QColor.fromHsv?4(int, int, int, int alpha=255) -> QColor -QtGui.QColor.fromHsvF?4(float, float, float, float alpha=1) -> QColor -QtGui.QColor.fromCmyk?4(int, int, int, int, int alpha=255) -> QColor -QtGui.QColor.fromCmykF?4(float, float, float, float, float alpha=1) -> QColor -QtGui.QColor.isValid?4() -> bool -QtGui.QColor.lighter?4(int factor=150) -> QColor -QtGui.QColor.darker?4(int factor=200) -> QColor -QtGui.QColor.hsvHue?4() -> int -QtGui.QColor.hsvSaturation?4() -> int -QtGui.QColor.hsvHueF?4() -> float -QtGui.QColor.hsvSaturationF?4() -> float -QtGui.QColor.hslHue?4() -> int -QtGui.QColor.hslSaturation?4() -> int -QtGui.QColor.lightness?4() -> int -QtGui.QColor.hslHueF?4() -> float -QtGui.QColor.hslSaturationF?4() -> float -QtGui.QColor.lightnessF?4() -> float -QtGui.QColor.getHsl?4() -> (int, int, int, int) -QtGui.QColor.setHsl?4(int, int, int, int alpha=255) -QtGui.QColor.getHslF?4() -> (float, float, float, float) -QtGui.QColor.setHslF?4(float, float, float, float alpha=1) -QtGui.QColor.toHsl?4() -> QColor -QtGui.QColor.fromHsl?4(int, int, int, int alpha=255) -> QColor -QtGui.QColor.fromHslF?4(float, float, float, float alpha=1) -> QColor -QtGui.QColor.isValidColor?4(QString) -> bool -QtGui.QColor.rgba64?4() -> QRgba64 -QtGui.QColor.setRgba64?4(QRgba64) -QtGui.QColor.fromRgba64?4(int, int, int, int alpha=USHRT_MAX) -> QColor -QtGui.QColor.fromRgba64?4(QRgba64) -> QColor -QtGui.QColor.toExtendedRgb?4() -> QColor -QtGui.QColor.fromString?4(QAnyStringView) -> QColor -QtGui.QColor.isValidColorName?4(QAnyStringView) -> bool -QtGui.QColorConstants.Black?7 -QtGui.QColorConstants.Blue?7 -QtGui.QColorConstants.Color0?7 -QtGui.QColorConstants.Color1?7 -QtGui.QColorConstants.Cyan?7 -QtGui.QColorConstants.DarkBlue?7 -QtGui.QColorConstants.DarkCyan?7 -QtGui.QColorConstants.DarkGray?7 -QtGui.QColorConstants.DarkGreen?7 -QtGui.QColorConstants.DarkMagenta?7 -QtGui.QColorConstants.DarkRed?7 -QtGui.QColorConstants.DarkYellow?7 -QtGui.QColorConstants.Gray?7 -QtGui.QColorConstants.Green?7 -QtGui.QColorConstants.LightGray?7 -QtGui.QColorConstants.Magenta?7 -QtGui.QColorConstants.Red?7 -QtGui.QColorConstants.Transparent?7 -QtGui.QColorConstants.White?7 -QtGui.QColorConstants.Yellow?7 -QtGui.QColorConstants.Svg.aliceblue?7 -QtGui.QColorConstants.Svg.antiquewhite?7 -QtGui.QColorConstants.Svg.aqua?7 -QtGui.QColorConstants.Svg.aquamarine?7 -QtGui.QColorConstants.Svg.azure?7 -QtGui.QColorConstants.Svg.beige?7 -QtGui.QColorConstants.Svg.bisque?7 -QtGui.QColorConstants.Svg.black?7 -QtGui.QColorConstants.Svg.blanchedalmond?7 -QtGui.QColorConstants.Svg.blue?7 -QtGui.QColorConstants.Svg.blueviolet?7 -QtGui.QColorConstants.Svg.brown?7 -QtGui.QColorConstants.Svg.burlywood?7 -QtGui.QColorConstants.Svg.cadetblue?7 -QtGui.QColorConstants.Svg.chartreuse?7 -QtGui.QColorConstants.Svg.chocolate?7 -QtGui.QColorConstants.Svg.coral?7 -QtGui.QColorConstants.Svg.cornflowerblue?7 -QtGui.QColorConstants.Svg.cornsilk?7 -QtGui.QColorConstants.Svg.crimson?7 -QtGui.QColorConstants.Svg.cyan?7 -QtGui.QColorConstants.Svg.darkblue?7 -QtGui.QColorConstants.Svg.darkcyan?7 -QtGui.QColorConstants.Svg.darkgoldenrod?7 -QtGui.QColorConstants.Svg.darkgray?7 -QtGui.QColorConstants.Svg.darkgreen?7 -QtGui.QColorConstants.Svg.darkgrey?7 -QtGui.QColorConstants.Svg.darkkhaki?7 -QtGui.QColorConstants.Svg.darkmagenta?7 -QtGui.QColorConstants.Svg.darkolivegreen?7 -QtGui.QColorConstants.Svg.darkorange?7 -QtGui.QColorConstants.Svg.darkorchid?7 -QtGui.QColorConstants.Svg.darkred?7 -QtGui.QColorConstants.Svg.darksalmon?7 -QtGui.QColorConstants.Svg.darkseagreen?7 -QtGui.QColorConstants.Svg.darkslateblue?7 -QtGui.QColorConstants.Svg.darkslategray?7 -QtGui.QColorConstants.Svg.darkslategrey?7 -QtGui.QColorConstants.Svg.darkturquoise?7 -QtGui.QColorConstants.Svg.darkviolet?7 -QtGui.QColorConstants.Svg.deeppink?7 -QtGui.QColorConstants.Svg.deepskyblue?7 -QtGui.QColorConstants.Svg.dimgray?7 -QtGui.QColorConstants.Svg.dimgrey?7 -QtGui.QColorConstants.Svg.dodgerblue?7 -QtGui.QColorConstants.Svg.firebrick?7 -QtGui.QColorConstants.Svg.floralwhite?7 -QtGui.QColorConstants.Svg.forestgreen?7 -QtGui.QColorConstants.Svg.fuchsia?7 -QtGui.QColorConstants.Svg.gainsboro?7 -QtGui.QColorConstants.Svg.ghostwhite?7 -QtGui.QColorConstants.Svg.gold?7 -QtGui.QColorConstants.Svg.goldenrod?7 -QtGui.QColorConstants.Svg.gray?7 -QtGui.QColorConstants.Svg.green?7 -QtGui.QColorConstants.Svg.greenyellow?7 -QtGui.QColorConstants.Svg.grey?7 -QtGui.QColorConstants.Svg.honeydew?7 -QtGui.QColorConstants.Svg.hotpink?7 -QtGui.QColorConstants.Svg.indianred?7 -QtGui.QColorConstants.Svg.indigo?7 -QtGui.QColorConstants.Svg.ivory?7 -QtGui.QColorConstants.Svg.khaki?7 -QtGui.QColorConstants.Svg.lavender?7 -QtGui.QColorConstants.Svg.lavenderblush?7 -QtGui.QColorConstants.Svg.lawngreen?7 -QtGui.QColorConstants.Svg.lemonchiffon?7 -QtGui.QColorConstants.Svg.lightblue?7 -QtGui.QColorConstants.Svg.lightcoral?7 -QtGui.QColorConstants.Svg.lightcyan?7 -QtGui.QColorConstants.Svg.lightgoldenrodyellow?7 -QtGui.QColorConstants.Svg.lightgray?7 -QtGui.QColorConstants.Svg.lightgreen?7 -QtGui.QColorConstants.Svg.lightgrey?7 -QtGui.QColorConstants.Svg.lightpink?7 -QtGui.QColorConstants.Svg.lightsalmon?7 -QtGui.QColorConstants.Svg.lightseagreen?7 -QtGui.QColorConstants.Svg.lightskyblue?7 -QtGui.QColorConstants.Svg.lightslategray?7 -QtGui.QColorConstants.Svg.lightslategrey?7 -QtGui.QColorConstants.Svg.lightsteelblue?7 -QtGui.QColorConstants.Svg.lightyellow?7 -QtGui.QColorConstants.Svg.lime?7 -QtGui.QColorConstants.Svg.limegreen?7 -QtGui.QColorConstants.Svg.linen?7 -QtGui.QColorConstants.Svg.magenta?7 -QtGui.QColorConstants.Svg.maroon?7 -QtGui.QColorConstants.Svg.mediumaquamarine?7 -QtGui.QColorConstants.Svg.mediumblue?7 -QtGui.QColorConstants.Svg.mediumorchid?7 -QtGui.QColorConstants.Svg.mediumpurple?7 -QtGui.QColorConstants.Svg.mediumseagreen?7 -QtGui.QColorConstants.Svg.mediumslateblue?7 -QtGui.QColorConstants.Svg.mediumspringgreen?7 -QtGui.QColorConstants.Svg.mediumturquoise?7 -QtGui.QColorConstants.Svg.mediumvioletred?7 -QtGui.QColorConstants.Svg.midnightblue?7 -QtGui.QColorConstants.Svg.mintcream?7 -QtGui.QColorConstants.Svg.mistyrose?7 -QtGui.QColorConstants.Svg.moccasin?7 -QtGui.QColorConstants.Svg.navajowhite?7 -QtGui.QColorConstants.Svg.navy?7 -QtGui.QColorConstants.Svg.oldlace?7 -QtGui.QColorConstants.Svg.olive?7 -QtGui.QColorConstants.Svg.olivedrab?7 -QtGui.QColorConstants.Svg.orange?7 -QtGui.QColorConstants.Svg.orangered?7 -QtGui.QColorConstants.Svg.orchid?7 -QtGui.QColorConstants.Svg.palegoldenrod?7 -QtGui.QColorConstants.Svg.palegreen?7 -QtGui.QColorConstants.Svg.paleturquoise?7 -QtGui.QColorConstants.Svg.palevioletred?7 -QtGui.QColorConstants.Svg.papayawhip?7 -QtGui.QColorConstants.Svg.peachpuff?7 -QtGui.QColorConstants.Svg.peru?7 -QtGui.QColorConstants.Svg.pink?7 -QtGui.QColorConstants.Svg.plum?7 -QtGui.QColorConstants.Svg.powderblue?7 -QtGui.QColorConstants.Svg.purple?7 -QtGui.QColorConstants.Svg.red?7 -QtGui.QColorConstants.Svg.rosybrown?7 -QtGui.QColorConstants.Svg.royalblue?7 -QtGui.QColorConstants.Svg.saddlebrown?7 -QtGui.QColorConstants.Svg.salmon?7 -QtGui.QColorConstants.Svg.sandybrown?7 -QtGui.QColorConstants.Svg.seagreen?7 -QtGui.QColorConstants.Svg.seashell?7 -QtGui.QColorConstants.Svg.sienna?7 -QtGui.QColorConstants.Svg.silver?7 -QtGui.QColorConstants.Svg.skyblue?7 -QtGui.QColorConstants.Svg.slateblue?7 -QtGui.QColorConstants.Svg.slategray?7 -QtGui.QColorConstants.Svg.slategrey?7 -QtGui.QColorConstants.Svg.snow?7 -QtGui.QColorConstants.Svg.springgreen?7 -QtGui.QColorConstants.Svg.steelblue?7 -QtGui.QColorConstants.Svg.tan?7 -QtGui.QColorConstants.Svg.teal?7 -QtGui.QColorConstants.Svg.thistle?7 -QtGui.QColorConstants.Svg.tomato?7 -QtGui.QColorConstants.Svg.turquoise?7 -QtGui.QColorConstants.Svg.violet?7 -QtGui.QColorConstants.Svg.wheat?7 -QtGui.QColorConstants.Svg.white?7 -QtGui.QColorConstants.Svg.whitesmoke?7 -QtGui.QColorConstants.Svg.yellow?7 -QtGui.QColorConstants.Svg.yellowgreen?7 -QtGui.QBrush?1() -QtGui.QBrush.__init__?1(self) -QtGui.QBrush?1(Qt.BrushStyle) -QtGui.QBrush.__init__?1(self, Qt.BrushStyle) -QtGui.QBrush?1(QColor, Qt.BrushStyle style=Qt.SolidPattern) -QtGui.QBrush.__init__?1(self, QColor, Qt.BrushStyle style=Qt.SolidPattern) -QtGui.QBrush?1(QColor, QPixmap) -QtGui.QBrush.__init__?1(self, QColor, QPixmap) -QtGui.QBrush?1(QPixmap) -QtGui.QBrush.__init__?1(self, QPixmap) -QtGui.QBrush?1(QImage) -QtGui.QBrush.__init__?1(self, QImage) -QtGui.QBrush?1(QBrush) -QtGui.QBrush.__init__?1(self, QBrush) -QtGui.QBrush?1(QVariant) -QtGui.QBrush.__init__?1(self, QVariant) -QtGui.QBrush.setStyle?4(Qt.BrushStyle) -QtGui.QBrush.texture?4() -> QPixmap -QtGui.QBrush.setTexture?4(QPixmap) -QtGui.QBrush.setColor?4(QColor) -QtGui.QBrush.gradient?4() -> QGradient -QtGui.QBrush.isOpaque?4() -> bool -QtGui.QBrush.setColor?4(Qt.GlobalColor) -QtGui.QBrush.style?4() -> Qt.BrushStyle -QtGui.QBrush.color?4() -> QColor -QtGui.QBrush.setTextureImage?4(QImage) -QtGui.QBrush.textureImage?4() -> QImage -QtGui.QBrush.setTransform?4(QTransform) -QtGui.QBrush.transform?4() -> QTransform -QtGui.QBrush.swap?4(QBrush) -QtGui.QGradient.Preset?10 -QtGui.QGradient.Preset.WarmFlame?10 -QtGui.QGradient.Preset.NightFade?10 -QtGui.QGradient.Preset.SpringWarmth?10 -QtGui.QGradient.Preset.JuicyPeach?10 -QtGui.QGradient.Preset.YoungPassion?10 -QtGui.QGradient.Preset.LadyLips?10 -QtGui.QGradient.Preset.SunnyMorning?10 -QtGui.QGradient.Preset.RainyAshville?10 -QtGui.QGradient.Preset.FrozenDreams?10 -QtGui.QGradient.Preset.WinterNeva?10 -QtGui.QGradient.Preset.DustyGrass?10 -QtGui.QGradient.Preset.TemptingAzure?10 -QtGui.QGradient.Preset.HeavyRain?10 -QtGui.QGradient.Preset.AmyCrisp?10 -QtGui.QGradient.Preset.MeanFruit?10 -QtGui.QGradient.Preset.DeepBlue?10 -QtGui.QGradient.Preset.RipeMalinka?10 -QtGui.QGradient.Preset.CloudyKnoxville?10 -QtGui.QGradient.Preset.MalibuBeach?10 -QtGui.QGradient.Preset.NewLife?10 -QtGui.QGradient.Preset.TrueSunset?10 -QtGui.QGradient.Preset.MorpheusDen?10 -QtGui.QGradient.Preset.RareWind?10 -QtGui.QGradient.Preset.NearMoon?10 -QtGui.QGradient.Preset.WildApple?10 -QtGui.QGradient.Preset.SaintPetersburg?10 -QtGui.QGradient.Preset.PlumPlate?10 -QtGui.QGradient.Preset.EverlastingSky?10 -QtGui.QGradient.Preset.HappyFisher?10 -QtGui.QGradient.Preset.Blessing?10 -QtGui.QGradient.Preset.SharpeyeEagle?10 -QtGui.QGradient.Preset.LadogaBottom?10 -QtGui.QGradient.Preset.LemonGate?10 -QtGui.QGradient.Preset.ItmeoBranding?10 -QtGui.QGradient.Preset.ZeusMiracle?10 -QtGui.QGradient.Preset.OldHat?10 -QtGui.QGradient.Preset.StarWine?10 -QtGui.QGradient.Preset.HappyAcid?10 -QtGui.QGradient.Preset.AwesomePine?10 -QtGui.QGradient.Preset.NewYork?10 -QtGui.QGradient.Preset.ShyRainbow?10 -QtGui.QGradient.Preset.MixedHopes?10 -QtGui.QGradient.Preset.FlyHigh?10 -QtGui.QGradient.Preset.StrongBliss?10 -QtGui.QGradient.Preset.FreshMilk?10 -QtGui.QGradient.Preset.SnowAgain?10 -QtGui.QGradient.Preset.FebruaryInk?10 -QtGui.QGradient.Preset.KindSteel?10 -QtGui.QGradient.Preset.SoftGrass?10 -QtGui.QGradient.Preset.GrownEarly?10 -QtGui.QGradient.Preset.SharpBlues?10 -QtGui.QGradient.Preset.ShadyWater?10 -QtGui.QGradient.Preset.DirtyBeauty?10 -QtGui.QGradient.Preset.GreatWhale?10 -QtGui.QGradient.Preset.TeenNotebook?10 -QtGui.QGradient.Preset.PoliteRumors?10 -QtGui.QGradient.Preset.SweetPeriod?10 -QtGui.QGradient.Preset.WideMatrix?10 -QtGui.QGradient.Preset.SoftCherish?10 -QtGui.QGradient.Preset.RedSalvation?10 -QtGui.QGradient.Preset.BurningSpring?10 -QtGui.QGradient.Preset.NightParty?10 -QtGui.QGradient.Preset.SkyGlider?10 -QtGui.QGradient.Preset.HeavenPeach?10 -QtGui.QGradient.Preset.PurpleDivision?10 -QtGui.QGradient.Preset.AquaSplash?10 -QtGui.QGradient.Preset.SpikyNaga?10 -QtGui.QGradient.Preset.LoveKiss?10 -QtGui.QGradient.Preset.CleanMirror?10 -QtGui.QGradient.Preset.PremiumDark?10 -QtGui.QGradient.Preset.ColdEvening?10 -QtGui.QGradient.Preset.CochitiLake?10 -QtGui.QGradient.Preset.SummerGames?10 -QtGui.QGradient.Preset.PassionateBed?10 -QtGui.QGradient.Preset.MountainRock?10 -QtGui.QGradient.Preset.DesertHump?10 -QtGui.QGradient.Preset.JungleDay?10 -QtGui.QGradient.Preset.PhoenixStart?10 -QtGui.QGradient.Preset.OctoberSilence?10 -QtGui.QGradient.Preset.FarawayRiver?10 -QtGui.QGradient.Preset.AlchemistLab?10 -QtGui.QGradient.Preset.OverSun?10 -QtGui.QGradient.Preset.PremiumWhite?10 -QtGui.QGradient.Preset.MarsParty?10 -QtGui.QGradient.Preset.EternalConstance?10 -QtGui.QGradient.Preset.JapanBlush?10 -QtGui.QGradient.Preset.SmilingRain?10 -QtGui.QGradient.Preset.CloudyApple?10 -QtGui.QGradient.Preset.BigMango?10 -QtGui.QGradient.Preset.HealthyWater?10 -QtGui.QGradient.Preset.AmourAmour?10 -QtGui.QGradient.Preset.RiskyConcrete?10 -QtGui.QGradient.Preset.StrongStick?10 -QtGui.QGradient.Preset.ViciousStance?10 -QtGui.QGradient.Preset.PaloAlto?10 -QtGui.QGradient.Preset.HappyMemories?10 -QtGui.QGradient.Preset.MidnightBloom?10 -QtGui.QGradient.Preset.Crystalline?10 -QtGui.QGradient.Preset.PartyBliss?10 -QtGui.QGradient.Preset.ConfidentCloud?10 -QtGui.QGradient.Preset.LeCocktail?10 -QtGui.QGradient.Preset.RiverCity?10 -QtGui.QGradient.Preset.FrozenBerry?10 -QtGui.QGradient.Preset.ChildCare?10 -QtGui.QGradient.Preset.FlyingLemon?10 -QtGui.QGradient.Preset.NewRetrowave?10 -QtGui.QGradient.Preset.HiddenJaguar?10 -QtGui.QGradient.Preset.AboveTheSky?10 -QtGui.QGradient.Preset.Nega?10 -QtGui.QGradient.Preset.DenseWater?10 -QtGui.QGradient.Preset.Seashore?10 -QtGui.QGradient.Preset.MarbleWall?10 -QtGui.QGradient.Preset.CheerfulCaramel?10 -QtGui.QGradient.Preset.NightSky?10 -QtGui.QGradient.Preset.MagicLake?10 -QtGui.QGradient.Preset.YoungGrass?10 -QtGui.QGradient.Preset.ColorfulPeach?10 -QtGui.QGradient.Preset.GentleCare?10 -QtGui.QGradient.Preset.PlumBath?10 -QtGui.QGradient.Preset.HappyUnicorn?10 -QtGui.QGradient.Preset.AfricanField?10 -QtGui.QGradient.Preset.SolidStone?10 -QtGui.QGradient.Preset.OrangeJuice?10 -QtGui.QGradient.Preset.GlassWater?10 -QtGui.QGradient.Preset.NorthMiracle?10 -QtGui.QGradient.Preset.FruitBlend?10 -QtGui.QGradient.Preset.MillenniumPine?10 -QtGui.QGradient.Preset.HighFlight?10 -QtGui.QGradient.Preset.MoleHall?10 -QtGui.QGradient.Preset.SpaceShift?10 -QtGui.QGradient.Preset.ForestInei?10 -QtGui.QGradient.Preset.RoyalGarden?10 -QtGui.QGradient.Preset.RichMetal?10 -QtGui.QGradient.Preset.JuicyCake?10 -QtGui.QGradient.Preset.SmartIndigo?10 -QtGui.QGradient.Preset.SandStrike?10 -QtGui.QGradient.Preset.NorseBeauty?10 -QtGui.QGradient.Preset.AquaGuidance?10 -QtGui.QGradient.Preset.SunVeggie?10 -QtGui.QGradient.Preset.SeaLord?10 -QtGui.QGradient.Preset.BlackSea?10 -QtGui.QGradient.Preset.GrassShampoo?10 -QtGui.QGradient.Preset.LandingAircraft?10 -QtGui.QGradient.Preset.WitchDance?10 -QtGui.QGradient.Preset.SleeplessNight?10 -QtGui.QGradient.Preset.AngelCare?10 -QtGui.QGradient.Preset.CrystalRiver?10 -QtGui.QGradient.Preset.SoftLipstick?10 -QtGui.QGradient.Preset.SaltMountain?10 -QtGui.QGradient.Preset.PerfectWhite?10 -QtGui.QGradient.Preset.FreshOasis?10 -QtGui.QGradient.Preset.StrictNovember?10 -QtGui.QGradient.Preset.MorningSalad?10 -QtGui.QGradient.Preset.DeepRelief?10 -QtGui.QGradient.Preset.SeaStrike?10 -QtGui.QGradient.Preset.NightCall?10 -QtGui.QGradient.Preset.SupremeSky?10 -QtGui.QGradient.Preset.LightBlue?10 -QtGui.QGradient.Preset.MindCrawl?10 -QtGui.QGradient.Preset.LilyMeadow?10 -QtGui.QGradient.Preset.SugarLollipop?10 -QtGui.QGradient.Preset.SweetDessert?10 -QtGui.QGradient.Preset.MagicRay?10 -QtGui.QGradient.Preset.TeenParty?10 -QtGui.QGradient.Preset.FrozenHeat?10 -QtGui.QGradient.Preset.GagarinView?10 -QtGui.QGradient.Preset.FabledSunset?10 -QtGui.QGradient.Preset.PerfectBlue?10 -QtGui.QGradient.Preset.NumPresets?10 -QtGui.QGradient.Spread?10 -QtGui.QGradient.Spread.PadSpread?10 -QtGui.QGradient.Spread.ReflectSpread?10 -QtGui.QGradient.Spread.RepeatSpread?10 -QtGui.QGradient.Type?10 -QtGui.QGradient.Type.LinearGradient?10 -QtGui.QGradient.Type.RadialGradient?10 -QtGui.QGradient.Type.ConicalGradient?10 -QtGui.QGradient.Type.NoGradient?10 -QtGui.QGradient.CoordinateMode?10 -QtGui.QGradient.CoordinateMode.LogicalMode?10 -QtGui.QGradient.CoordinateMode.StretchToDeviceMode?10 -QtGui.QGradient.CoordinateMode.ObjectBoundingMode?10 -QtGui.QGradient.CoordinateMode.ObjectMode?10 -QtGui.QGradient?1() -QtGui.QGradient.__init__?1(self) -QtGui.QGradient?1(QGradient.Preset) -QtGui.QGradient.__init__?1(self, QGradient.Preset) -QtGui.QGradient?1(QGradient) -QtGui.QGradient.__init__?1(self, QGradient) -QtGui.QGradient.type?4() -> QGradient.Type -QtGui.QGradient.spread?4() -> QGradient.Spread -QtGui.QGradient.setColorAt?4(float, QColor) -QtGui.QGradient.setStops?4(unknown-type) -QtGui.QGradient.stops?4() -> unknown-type -QtGui.QGradient.setSpread?4(QGradient.Spread) -QtGui.QGradient.coordinateMode?4() -> QGradient.CoordinateMode -QtGui.QGradient.setCoordinateMode?4(QGradient.CoordinateMode) -QtGui.QLinearGradient?1() -QtGui.QLinearGradient.__init__?1(self) -QtGui.QLinearGradient?1(QPointF, QPointF) -QtGui.QLinearGradient.__init__?1(self, QPointF, QPointF) -QtGui.QLinearGradient?1(float, float, float, float) -QtGui.QLinearGradient.__init__?1(self, float, float, float, float) -QtGui.QLinearGradient?1(QLinearGradient) -QtGui.QLinearGradient.__init__?1(self, QLinearGradient) -QtGui.QLinearGradient.start?4() -> QPointF -QtGui.QLinearGradient.finalStop?4() -> QPointF -QtGui.QLinearGradient.setStart?4(QPointF) -QtGui.QLinearGradient.setStart?4(float, float) -QtGui.QLinearGradient.setFinalStop?4(QPointF) -QtGui.QLinearGradient.setFinalStop?4(float, float) -QtGui.QRadialGradient?1() -QtGui.QRadialGradient.__init__?1(self) -QtGui.QRadialGradient?1(QPointF, float, QPointF) -QtGui.QRadialGradient.__init__?1(self, QPointF, float, QPointF) -QtGui.QRadialGradient?1(QPointF, float, QPointF, float) -QtGui.QRadialGradient.__init__?1(self, QPointF, float, QPointF, float) -QtGui.QRadialGradient?1(QPointF, float) -QtGui.QRadialGradient.__init__?1(self, QPointF, float) -QtGui.QRadialGradient?1(float, float, float, float, float) -QtGui.QRadialGradient.__init__?1(self, float, float, float, float, float) -QtGui.QRadialGradient?1(float, float, float, float, float, float) -QtGui.QRadialGradient.__init__?1(self, float, float, float, float, float, float) -QtGui.QRadialGradient?1(float, float, float) -QtGui.QRadialGradient.__init__?1(self, float, float, float) -QtGui.QRadialGradient?1(QRadialGradient) -QtGui.QRadialGradient.__init__?1(self, QRadialGradient) -QtGui.QRadialGradient.center?4() -> QPointF -QtGui.QRadialGradient.focalPoint?4() -> QPointF -QtGui.QRadialGradient.radius?4() -> float -QtGui.QRadialGradient.setCenter?4(QPointF) -QtGui.QRadialGradient.setCenter?4(float, float) -QtGui.QRadialGradient.setFocalPoint?4(QPointF) -QtGui.QRadialGradient.setFocalPoint?4(float, float) -QtGui.QRadialGradient.setRadius?4(float) -QtGui.QRadialGradient.centerRadius?4() -> float -QtGui.QRadialGradient.setCenterRadius?4(float) -QtGui.QRadialGradient.focalRadius?4() -> float -QtGui.QRadialGradient.setFocalRadius?4(float) -QtGui.QConicalGradient?1() -QtGui.QConicalGradient.__init__?1(self) -QtGui.QConicalGradient?1(QPointF, float) -QtGui.QConicalGradient.__init__?1(self, QPointF, float) -QtGui.QConicalGradient?1(float, float, float) -QtGui.QConicalGradient.__init__?1(self, float, float, float) -QtGui.QConicalGradient?1(QConicalGradient) -QtGui.QConicalGradient.__init__?1(self, QConicalGradient) -QtGui.QConicalGradient.center?4() -> QPointF -QtGui.QConicalGradient.angle?4() -> float -QtGui.QConicalGradient.setCenter?4(QPointF) -QtGui.QConicalGradient.setCenter?4(float, float) -QtGui.QConicalGradient.setAngle?4(float) -QtGui.QClipboard.Mode?10 -QtGui.QClipboard.Mode.Clipboard?10 -QtGui.QClipboard.Mode.Selection?10 -QtGui.QClipboard.Mode.FindBuffer?10 -QtGui.QClipboard.clear?4(QClipboard.Mode mode=QClipboard.Clipboard) -QtGui.QClipboard.supportsFindBuffer?4() -> bool -QtGui.QClipboard.supportsSelection?4() -> bool -QtGui.QClipboard.ownsClipboard?4() -> bool -QtGui.QClipboard.ownsFindBuffer?4() -> bool -QtGui.QClipboard.ownsSelection?4() -> bool -QtGui.QClipboard.text?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QString -QtGui.QClipboard.text?4(QString, QClipboard.Mode mode=QClipboard.Clipboard) -> Tuple -QtGui.QClipboard.setText?4(QString, QClipboard.Mode mode=QClipboard.Clipboard) -QtGui.QClipboard.mimeData?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QMimeData -QtGui.QClipboard.setMimeData?4(QMimeData, QClipboard.Mode mode=QClipboard.Clipboard) -QtGui.QClipboard.image?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QImage -QtGui.QClipboard.pixmap?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QPixmap -QtGui.QClipboard.setImage?4(QImage, QClipboard.Mode mode=QClipboard.Clipboard) -QtGui.QClipboard.setPixmap?4(QPixmap, QClipboard.Mode mode=QClipboard.Clipboard) -QtGui.QClipboard.changed?4(QClipboard.Mode) -QtGui.QClipboard.dataChanged?4() -QtGui.QClipboard.findBufferChanged?4() -QtGui.QClipboard.selectionChanged?4() -QtGui.QColorSpace.TransferFunction?10 -QtGui.QColorSpace.TransferFunction.Custom?10 -QtGui.QColorSpace.TransferFunction.Linear?10 -QtGui.QColorSpace.TransferFunction.Gamma?10 -QtGui.QColorSpace.TransferFunction.SRgb?10 -QtGui.QColorSpace.TransferFunction.ProPhotoRgb?10 -QtGui.QColorSpace.Primaries?10 -QtGui.QColorSpace.Primaries.Custom?10 -QtGui.QColorSpace.Primaries.SRgb?10 -QtGui.QColorSpace.Primaries.AdobeRgb?10 -QtGui.QColorSpace.Primaries.DciP3D65?10 -QtGui.QColorSpace.Primaries.ProPhotoRgb?10 -QtGui.QColorSpace.NamedColorSpace?10 -QtGui.QColorSpace.NamedColorSpace.SRgb?10 -QtGui.QColorSpace.NamedColorSpace.SRgbLinear?10 -QtGui.QColorSpace.NamedColorSpace.AdobeRgb?10 -QtGui.QColorSpace.NamedColorSpace.DisplayP3?10 -QtGui.QColorSpace.NamedColorSpace.ProPhotoRgb?10 -QtGui.QColorSpace?1() -QtGui.QColorSpace.__init__?1(self) -QtGui.QColorSpace?1(QColorSpace.NamedColorSpace) -QtGui.QColorSpace.__init__?1(self, QColorSpace.NamedColorSpace) -QtGui.QColorSpace?1(QColorSpace.Primaries, QColorSpace.TransferFunction, float gamma=0) -QtGui.QColorSpace.__init__?1(self, QColorSpace.Primaries, QColorSpace.TransferFunction, float gamma=0) -QtGui.QColorSpace?1(QColorSpace.Primaries, float) -QtGui.QColorSpace.__init__?1(self, QColorSpace.Primaries, float) -QtGui.QColorSpace?1(QColorSpace.Primaries, unknown-type) -QtGui.QColorSpace.__init__?1(self, QColorSpace.Primaries, unknown-type) -QtGui.QColorSpace?1(QPointF, QPointF, QPointF, QPointF, QColorSpace.TransferFunction, float gamma=0) -QtGui.QColorSpace.__init__?1(self, QPointF, QPointF, QPointF, QPointF, QColorSpace.TransferFunction, float gamma=0) -QtGui.QColorSpace?1(QPointF, QPointF, QPointF, QPointF, unknown-type, unknown-type, unknown-type) -QtGui.QColorSpace.__init__?1(self, QPointF, QPointF, QPointF, QPointF, unknown-type, unknown-type, unknown-type) -QtGui.QColorSpace?1(QPointF, QPointF, QPointF, QPointF, unknown-type) -QtGui.QColorSpace.__init__?1(self, QPointF, QPointF, QPointF, QPointF, unknown-type) -QtGui.QColorSpace?1(QColorSpace) -QtGui.QColorSpace.__init__?1(self, QColorSpace) -QtGui.QColorSpace.swap?4(QColorSpace) -QtGui.QColorSpace.primaries?4() -> QColorSpace.Primaries -QtGui.QColorSpace.transferFunction?4() -> QColorSpace.TransferFunction -QtGui.QColorSpace.gamma?4() -> float -QtGui.QColorSpace.setTransferFunction?4(QColorSpace.TransferFunction, float gamma=0) -QtGui.QColorSpace.setTransferFunction?4(unknown-type) -QtGui.QColorSpace.setTransferFunctions?4(unknown-type, unknown-type, unknown-type) -QtGui.QColorSpace.withTransferFunction?4(unknown-type) -> QColorSpace -QtGui.QColorSpace.withTransferFunction?4(QColorSpace.TransferFunction, float gamma=0) -> QColorSpace -QtGui.QColorSpace.withTransferFunctions?4(unknown-type, unknown-type, unknown-type) -> QColorSpace -QtGui.QColorSpace.setPrimaries?4(QColorSpace.Primaries) -QtGui.QColorSpace.setPrimaries?4(QPointF, QPointF, QPointF, QPointF) -QtGui.QColorSpace.isValid?4() -> bool -QtGui.QColorSpace.fromIccProfile?4(QByteArray) -> QColorSpace -QtGui.QColorSpace.iccProfile?4() -> QByteArray -QtGui.QColorSpace.transformationToColorSpace?4(QColorSpace) -> QColorTransform -QtGui.QColorSpace.description?4() -> QString -QtGui.QColorSpace.setDescription?4(QString) -QtGui.QColorTransform?1() -QtGui.QColorTransform.__init__?1(self) -QtGui.QColorTransform?1(QColorTransform) -QtGui.QColorTransform.__init__?1(self, QColorTransform) -QtGui.QColorTransform.swap?4(QColorTransform) -QtGui.QColorTransform.map?4(int) -> int -QtGui.QColorTransform.map?4(QRgba64) -> QRgba64 -QtGui.QColorTransform.map?4(QColor) -> QColor -QtGui.QColorTransform.isIdentity?4() -> bool -QtGui.QCursor?1() -QtGui.QCursor.__init__?1(self) -QtGui.QCursor?1(QBitmap, QBitmap, int hotX=-1, int hotY=-1) -QtGui.QCursor.__init__?1(self, QBitmap, QBitmap, int hotX=-1, int hotY=-1) -QtGui.QCursor?1(QPixmap, int hotX=-1, int hotY=-1) -QtGui.QCursor.__init__?1(self, QPixmap, int hotX=-1, int hotY=-1) -QtGui.QCursor?1(QCursor) -QtGui.QCursor.__init__?1(self, QCursor) -QtGui.QCursor?1(QVariant) -QtGui.QCursor.__init__?1(self, QVariant) -QtGui.QCursor.shape?4() -> Qt.CursorShape -QtGui.QCursor.setShape?4(Qt.CursorShape) -QtGui.QCursor.bitmap?4() -> QBitmap -QtGui.QCursor.mask?4() -> QBitmap -QtGui.QCursor.pixmap?4() -> QPixmap -QtGui.QCursor.hotSpot?4() -> QPoint -QtGui.QCursor.pos?4() -> QPoint -QtGui.QCursor.setPos?4(int, int) -QtGui.QCursor.setPos?4(QPoint) -QtGui.QCursor.pos?4(QScreen) -> QPoint -QtGui.QCursor.setPos?4(QScreen, int, int) -QtGui.QCursor.setPos?4(QScreen, QPoint) -QtGui.QCursor.swap?4(QCursor) -QtGui.QDesktopServices?1() -QtGui.QDesktopServices.__init__?1(self) -QtGui.QDesktopServices?1(QDesktopServices) -QtGui.QDesktopServices.__init__?1(self, QDesktopServices) -QtGui.QDesktopServices.openUrl?4(QUrl) -> bool -QtGui.QDesktopServices.setUrlHandler?4(QString, QObject, str) -QtGui.QDesktopServices.setUrlHandler?4(QString, Callable[..., None]) -QtGui.QDesktopServices.unsetUrlHandler?4(QString) -QtGui.QDrag?1(QObject) -QtGui.QDrag.__init__?1(self, QObject) -QtGui.QDrag.exec?4(unknown-type supportedActions=Qt.MoveAction) -> Qt.DropAction -QtGui.QDrag.exec?4(unknown-type, Qt.DropAction) -> Qt.DropAction -QtGui.QDrag.setMimeData?4(QMimeData) -QtGui.QDrag.mimeData?4() -> QMimeData -QtGui.QDrag.setPixmap?4(QPixmap) -QtGui.QDrag.pixmap?4() -> QPixmap -QtGui.QDrag.setHotSpot?4(QPoint) -QtGui.QDrag.hotSpot?4() -> QPoint -QtGui.QDrag.source?4() -> QObject -QtGui.QDrag.target?4() -> QObject -QtGui.QDrag.setDragCursor?4(QPixmap, Qt.DropAction) -QtGui.QDrag.actionChanged?4(Qt.DropAction) -QtGui.QDrag.targetChanged?4(QObject) -QtGui.QDrag.dragCursor?4(Qt.DropAction) -> QPixmap -QtGui.QDrag.supportedActions?4() -> unknown-type -QtGui.QDrag.defaultAction?4() -> Qt.DropAction -QtGui.QDrag.cancel?4() -QtGui.QInputEvent.modifiers?4() -> unknown-type -QtGui.QInputEvent.timestamp?4() -> int -QtGui.QInputEvent.device?4() -> QInputDevice -QtGui.QInputEvent.deviceType?4() -> QInputDevice.DeviceType -QtGui.QInputEvent.clone?4() -> QInputEvent -QtGui.QKeyEvent?1(QEvent.Type, int, unknown-type, int, int, int, QString text='', bool autorep=False, int count=1, QInputDevice device=QInputDevice.primaryKeyboard()) -QtGui.QKeyEvent.__init__?1(self, QEvent.Type, int, unknown-type, int, int, int, QString text='', bool autorep=False, int count=1, QInputDevice device=QInputDevice.primaryKeyboard()) -QtGui.QKeyEvent?1(QEvent.Type, int, unknown-type, QString text='', bool autorep=False, int count=1) -QtGui.QKeyEvent.__init__?1(self, QEvent.Type, int, unknown-type, QString text='', bool autorep=False, int count=1) -QtGui.QKeyEvent.key?4() -> int -QtGui.QKeyEvent.modifiers?4() -> unknown-type -QtGui.QKeyEvent.text?4() -> QString -QtGui.QKeyEvent.isAutoRepeat?4() -> bool -QtGui.QKeyEvent.count?4() -> int -QtGui.QKeyEvent.matches?4(QKeySequence.StandardKey) -> bool -QtGui.QKeyEvent.nativeModifiers?4() -> int -QtGui.QKeyEvent.nativeScanCode?4() -> int -QtGui.QKeyEvent.nativeVirtualKey?4() -> int -QtGui.QKeyEvent.keyCombination?4() -> QKeyCombination -QtGui.QKeyEvent.clone?4() -> QKeyEvent -QtGui.QFocusEvent?1(QEvent.Type, Qt.FocusReason reason=Qt.OtherFocusReason) -QtGui.QFocusEvent.__init__?1(self, QEvent.Type, Qt.FocusReason reason=Qt.OtherFocusReason) -QtGui.QFocusEvent.gotFocus?4() -> bool -QtGui.QFocusEvent.lostFocus?4() -> bool -QtGui.QFocusEvent.reason?4() -> Qt.FocusReason -QtGui.QFocusEvent.clone?4() -> QFocusEvent -QtGui.QPaintEvent?1(QRegion) -QtGui.QPaintEvent.__init__?1(self, QRegion) -QtGui.QPaintEvent?1(QRect) -QtGui.QPaintEvent.__init__?1(self, QRect) -QtGui.QPaintEvent.rect?4() -> QRect -QtGui.QPaintEvent.region?4() -> QRegion -QtGui.QPaintEvent.clone?4() -> QPaintEvent -QtGui.QMoveEvent?1(QPoint, QPoint) -QtGui.QMoveEvent.__init__?1(self, QPoint, QPoint) -QtGui.QMoveEvent.pos?4() -> QPoint -QtGui.QMoveEvent.oldPos?4() -> QPoint -QtGui.QMoveEvent.clone?4() -> QMoveEvent -QtGui.QResizeEvent?1(QSize, QSize) -QtGui.QResizeEvent.__init__?1(self, QSize, QSize) -QtGui.QResizeEvent.size?4() -> QSize -QtGui.QResizeEvent.oldSize?4() -> QSize -QtGui.QResizeEvent.clone?4() -> QResizeEvent -QtGui.QCloseEvent?1() -QtGui.QCloseEvent.__init__?1(self) -QtGui.QCloseEvent.clone?4() -> QCloseEvent -QtGui.QIconDragEvent?1() -QtGui.QIconDragEvent.__init__?1(self) -QtGui.QIconDragEvent.clone?4() -> QIconDragEvent -QtGui.QShowEvent?1() -QtGui.QShowEvent.__init__?1(self) -QtGui.QShowEvent.clone?4() -> QShowEvent -QtGui.QHideEvent?1() -QtGui.QHideEvent.__init__?1(self) -QtGui.QHideEvent.clone?4() -> QHideEvent -QtGui.QContextMenuEvent.Reason?10 -QtGui.QContextMenuEvent.Reason.Mouse?10 -QtGui.QContextMenuEvent.Reason.Keyboard?10 -QtGui.QContextMenuEvent.Reason.Other?10 -QtGui.QContextMenuEvent?1(QContextMenuEvent.Reason, QPoint, QPoint, unknown-type modifiers=Qt.NoModifier) -QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent.Reason, QPoint, QPoint, unknown-type modifiers=Qt.NoModifier) -QtGui.QContextMenuEvent?1(QContextMenuEvent.Reason, QPoint) -QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent.Reason, QPoint) -QtGui.QContextMenuEvent.x?4() -> int -QtGui.QContextMenuEvent.y?4() -> int -QtGui.QContextMenuEvent.globalX?4() -> int -QtGui.QContextMenuEvent.globalY?4() -> int -QtGui.QContextMenuEvent.pos?4() -> QPoint -QtGui.QContextMenuEvent.globalPos?4() -> QPoint -QtGui.QContextMenuEvent.reason?4() -> QContextMenuEvent.Reason -QtGui.QContextMenuEvent.clone?4() -> QContextMenuEvent -QtGui.QInputMethodEvent.AttributeType?10 -QtGui.QInputMethodEvent.AttributeType.TextFormat?10 -QtGui.QInputMethodEvent.AttributeType.Cursor?10 -QtGui.QInputMethodEvent.AttributeType.Language?10 -QtGui.QInputMethodEvent.AttributeType.Ruby?10 -QtGui.QInputMethodEvent.AttributeType.Selection?10 -QtGui.QInputMethodEvent?1() -QtGui.QInputMethodEvent.__init__?1(self) -QtGui.QInputMethodEvent?1(QString, unknown-type) -QtGui.QInputMethodEvent.__init__?1(self, QString, unknown-type) -QtGui.QInputMethodEvent.setCommitString?4(QString, int from=0, int length=0) -QtGui.QInputMethodEvent.attributes?4() -> unknown-type -QtGui.QInputMethodEvent.preeditString?4() -> QString -QtGui.QInputMethodEvent.commitString?4() -> QString -QtGui.QInputMethodEvent.replacementStart?4() -> int -QtGui.QInputMethodEvent.replacementLength?4() -> int -QtGui.QInputMethodEvent.clone?4() -> QInputMethodEvent -QtGui.QInputMethodEvent.Attribute.length?7 -QtGui.QInputMethodEvent.Attribute.start?7 -QtGui.QInputMethodEvent.Attribute.type?7 -QtGui.QInputMethodEvent.Attribute.value?7 -QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.AttributeType, int, int, QVariant) -QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.AttributeType, int, int, QVariant) -QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.AttributeType, int, int) -QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.AttributeType, int, int) -QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.Attribute) -QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.Attribute) -QtGui.QInputMethodQueryEvent?1(unknown-type) -QtGui.QInputMethodQueryEvent.__init__?1(self, unknown-type) -QtGui.QInputMethodQueryEvent.queries?4() -> unknown-type -QtGui.QInputMethodQueryEvent.setValue?4(Qt.InputMethodQuery, QVariant) -QtGui.QInputMethodQueryEvent.value?4(Qt.InputMethodQuery) -> QVariant -QtGui.QInputMethodQueryEvent.clone?4() -> QInputMethodQueryEvent -QtGui.QDropEvent?1(QPointF, unknown-type, QMimeData, unknown-type, unknown-type, QEvent.Type type=QEvent.Drop) -QtGui.QDropEvent.__init__?1(self, QPointF, unknown-type, QMimeData, unknown-type, unknown-type, QEvent.Type type=QEvent.Drop) -QtGui.QDropEvent.possibleActions?4() -> unknown-type -QtGui.QDropEvent.proposedAction?4() -> Qt.DropAction -QtGui.QDropEvent.acceptProposedAction?4() -QtGui.QDropEvent.dropAction?4() -> Qt.DropAction -QtGui.QDropEvent.setDropAction?4(Qt.DropAction) -QtGui.QDropEvent.source?4() -> QObject -QtGui.QDropEvent.mimeData?4() -> QMimeData -QtGui.QDropEvent.position?4() -> QPointF -QtGui.QDropEvent.buttons?4() -> unknown-type -QtGui.QDropEvent.modifiers?4() -> unknown-type -QtGui.QDropEvent.clone?4() -> QDropEvent -QtGui.QDragMoveEvent?1(QPoint, unknown-type, QMimeData, unknown-type, unknown-type, QEvent.Type type=QEvent.DragMove) -QtGui.QDragMoveEvent.__init__?1(self, QPoint, unknown-type, QMimeData, unknown-type, unknown-type, QEvent.Type type=QEvent.DragMove) -QtGui.QDragMoveEvent.answerRect?4() -> QRect -QtGui.QDragMoveEvent.accept?4() -QtGui.QDragMoveEvent.ignore?4() -QtGui.QDragMoveEvent.accept?4(QRect) -QtGui.QDragMoveEvent.ignore?4(QRect) -QtGui.QDragMoveEvent.clone?4() -> QDragMoveEvent -QtGui.QDragEnterEvent?1(QPoint, unknown-type, QMimeData, unknown-type, unknown-type) -QtGui.QDragEnterEvent.__init__?1(self, QPoint, unknown-type, QMimeData, unknown-type, unknown-type) -QtGui.QDragEnterEvent.clone?4() -> QDragEnterEvent -QtGui.QDragLeaveEvent?1() -QtGui.QDragLeaveEvent.__init__?1(self) -QtGui.QDragLeaveEvent.clone?4() -> QDragLeaveEvent -QtGui.QHelpEvent?1(QEvent.Type, QPoint, QPoint) -QtGui.QHelpEvent.__init__?1(self, QEvent.Type, QPoint, QPoint) -QtGui.QHelpEvent.x?4() -> int -QtGui.QHelpEvent.y?4() -> int -QtGui.QHelpEvent.globalX?4() -> int -QtGui.QHelpEvent.globalY?4() -> int -QtGui.QHelpEvent.pos?4() -> QPoint -QtGui.QHelpEvent.globalPos?4() -> QPoint -QtGui.QHelpEvent.clone?4() -> QHelpEvent -QtGui.QStatusTipEvent?1(QString) -QtGui.QStatusTipEvent.__init__?1(self, QString) -QtGui.QStatusTipEvent.tip?4() -> QString -QtGui.QStatusTipEvent.clone?4() -> QStatusTipEvent -QtGui.QWhatsThisClickedEvent?1(QString) -QtGui.QWhatsThisClickedEvent.__init__?1(self, QString) -QtGui.QWhatsThisClickedEvent.href?4() -> QString -QtGui.QWhatsThisClickedEvent.clone?4() -> QWhatsThisClickedEvent -QtGui.QActionEvent?1(int, QAction, QAction before=None) -QtGui.QActionEvent.__init__?1(self, int, QAction, QAction before=None) -QtGui.QActionEvent.action?4() -> QAction -QtGui.QActionEvent.before?4() -> QAction -QtGui.QActionEvent.clone?4() -> QActionEvent -QtGui.QFileOpenEvent.file?4() -> QString -QtGui.QFileOpenEvent.url?4() -> QUrl -QtGui.QFileOpenEvent.openFile?4(QFile, unknown-type) -> bool -QtGui.QFileOpenEvent.clone?4() -> QFileOpenEvent -QtGui.QShortcutEvent?1(QKeySequence, int, bool ambiguous=False) -QtGui.QShortcutEvent.__init__?1(self, QKeySequence, int, bool ambiguous=False) -QtGui.QShortcutEvent?1(QKeySequence, QShortcut shortcut=None, bool ambiguous=False) -QtGui.QShortcutEvent.__init__?1(self, QKeySequence, QShortcut shortcut=None, bool ambiguous=False) -QtGui.QShortcutEvent.isAmbiguous?4() -> bool -QtGui.QShortcutEvent.key?4() -> QKeySequence -QtGui.QShortcutEvent.shortcutId?4() -> int -QtGui.QShortcutEvent.clone?4() -> QShortcutEvent -QtGui.QWindowStateChangeEvent.oldState?4() -> unknown-type -QtGui.QWindowStateChangeEvent.clone?4() -> QWindowStateChangeEvent -QtGui.QExposeEvent?1(QRegion) -QtGui.QExposeEvent.__init__?1(self, QRegion) -QtGui.QExposeEvent.clone?4() -> QExposeEvent -QtGui.QScrollPrepareEvent?1(QPointF) -QtGui.QScrollPrepareEvent.__init__?1(self, QPointF) -QtGui.QScrollPrepareEvent.startPos?4() -> QPointF -QtGui.QScrollPrepareEvent.viewportSize?4() -> QSizeF -QtGui.QScrollPrepareEvent.contentPosRange?4() -> QRectF -QtGui.QScrollPrepareEvent.contentPos?4() -> QPointF -QtGui.QScrollPrepareEvent.setViewportSize?4(QSizeF) -QtGui.QScrollPrepareEvent.setContentPosRange?4(QRectF) -QtGui.QScrollPrepareEvent.setContentPos?4(QPointF) -QtGui.QScrollPrepareEvent.clone?4() -> QScrollPrepareEvent -QtGui.QScrollEvent.ScrollState?10 -QtGui.QScrollEvent.ScrollState.ScrollStarted?10 -QtGui.QScrollEvent.ScrollState.ScrollUpdated?10 -QtGui.QScrollEvent.ScrollState.ScrollFinished?10 -QtGui.QScrollEvent?1(QPointF, QPointF, QScrollEvent.ScrollState) -QtGui.QScrollEvent.__init__?1(self, QPointF, QPointF, QScrollEvent.ScrollState) -QtGui.QScrollEvent.contentPos?4() -> QPointF -QtGui.QScrollEvent.overshootDistance?4() -> QPointF -QtGui.QScrollEvent.scrollState?4() -> QScrollEvent.ScrollState -QtGui.QScrollEvent.clone?4() -> QScrollEvent -QtGui.QPlatformSurfaceEvent.SurfaceEventType?10 -QtGui.QPlatformSurfaceEvent.SurfaceEventType.SurfaceCreated?10 -QtGui.QPlatformSurfaceEvent.SurfaceEventType.SurfaceAboutToBeDestroyed?10 -QtGui.QPlatformSurfaceEvent?1(QPlatformSurfaceEvent.SurfaceEventType) -QtGui.QPlatformSurfaceEvent.__init__?1(self, QPlatformSurfaceEvent.SurfaceEventType) -QtGui.QPlatformSurfaceEvent.surfaceEventType?4() -> QPlatformSurfaceEvent.SurfaceEventType -QtGui.QPlatformSurfaceEvent.clone?4() -> QPlatformSurfaceEvent -QtGui.QPointerEvent.pointingDevice?4() -> QPointingDevice -QtGui.QPointerEvent.pointerType?4() -> QPointingDevice.PointerType -QtGui.QPointerEvent.pointCount?4() -> int -QtGui.QPointerEvent.point?4(int) -> QEventPoint -QtGui.QPointerEvent.points?4() -> unknown-type -QtGui.QPointerEvent.pointById?4(int) -> QEventPoint -QtGui.QPointerEvent.isBeginEvent?4() -> bool -QtGui.QPointerEvent.isUpdateEvent?4() -> bool -QtGui.QPointerEvent.isEndEvent?4() -> bool -QtGui.QPointerEvent.allPointsAccepted?4() -> bool -QtGui.QPointerEvent.setAccepted?4(bool) -QtGui.QPointerEvent.clone?4() -> QPointerEvent -QtGui.QSinglePointEvent.button?4() -> Qt.MouseButton -QtGui.QSinglePointEvent.buttons?4() -> unknown-type -QtGui.QSinglePointEvent.position?4() -> QPointF -QtGui.QSinglePointEvent.scenePosition?4() -> QPointF -QtGui.QSinglePointEvent.globalPosition?4() -> QPointF -QtGui.QSinglePointEvent.isBeginEvent?4() -> bool -QtGui.QSinglePointEvent.isUpdateEvent?4() -> bool -QtGui.QSinglePointEvent.isEndEvent?4() -> bool -QtGui.QSinglePointEvent.exclusivePointGrabber?4() -> QObject -QtGui.QSinglePointEvent.setExclusivePointGrabber?4(QObject) -QtGui.QSinglePointEvent.clone?4() -> QSinglePointEvent -QtGui.QEnterEvent?1(QPointF, QPointF, QPointF, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QEnterEvent.__init__?1(self, QPointF, QPointF, QPointF, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QEnterEvent.clone?4() -> QEnterEvent -QtGui.QMouseEvent?1(QEvent.Type, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent?1(QEvent.Type, QPointF, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent?1(QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, unknown-type, unknown-type, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QMouseEvent.pos?4() -> QPoint -QtGui.QMouseEvent.flags?4() -> unknown-type -QtGui.QMouseEvent.clone?4() -> QMouseEvent -QtGui.QHoverEvent?1(QEvent.Type, QPointF, QPointF, QPointF, unknown-type modifiers=Qt.NoModifier, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QHoverEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, QPointF, unknown-type modifiers=Qt.NoModifier, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QHoverEvent?1(QEvent.Type, QPointF, QPointF, unknown-type modifiers=Qt.NoModifier, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QHoverEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, unknown-type modifiers=Qt.NoModifier, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QHoverEvent.isUpdateEvent?4() -> bool -QtGui.QHoverEvent.oldPos?4() -> QPoint -QtGui.QHoverEvent.oldPosF?4() -> QPointF -QtGui.QHoverEvent.clone?4() -> QHoverEvent -QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, unknown-type, unknown-type, Qt.ScrollPhase, bool, Qt.MouseEventSource source=Qt.MouseEventNotSynthesized, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, unknown-type, unknown-type, Qt.ScrollPhase, bool, Qt.MouseEventSource source=Qt.MouseEventNotSynthesized, QPointingDevice device=QPointingDevice.primaryPointingDevice()) -QtGui.QWheelEvent.pixelDelta?4() -> QPoint -QtGui.QWheelEvent.angleDelta?4() -> QPoint -QtGui.QWheelEvent.phase?4() -> Qt.ScrollPhase -QtGui.QWheelEvent.inverted?4() -> bool -QtGui.QWheelEvent.isBeginEvent?4() -> bool -QtGui.QWheelEvent.isUpdateEvent?4() -> bool -QtGui.QWheelEvent.isEndEvent?4() -> bool -QtGui.QWheelEvent.clone?4() -> QWheelEvent -QtGui.QTabletEvent?1(QEvent.Type, QPointingDevice, QPointF, QPointF, float, float, float, float, float, float, unknown-type, Qt.MouseButton, unknown-type) -QtGui.QTabletEvent.__init__?1(self, QEvent.Type, QPointingDevice, QPointF, QPointF, float, float, float, float, float, float, unknown-type, Qt.MouseButton, unknown-type) -QtGui.QTabletEvent.pressure?4() -> float -QtGui.QTabletEvent.rotation?4() -> float -QtGui.QTabletEvent.z?4() -> float -QtGui.QTabletEvent.tangentialPressure?4() -> float -QtGui.QTabletEvent.xTilt?4() -> float -QtGui.QTabletEvent.yTilt?4() -> float -QtGui.QTabletEvent.clone?4() -> QTabletEvent -QtGui.QNativeGestureEvent?1(Qt.NativeGestureType, QPointingDevice, int, QPointF, QPointF, QPointF, float, QPointF, int sequenceId=UINT64_MAX) -QtGui.QNativeGestureEvent.__init__?1(self, Qt.NativeGestureType, QPointingDevice, int, QPointF, QPointF, QPointF, float, QPointF, int sequenceId=UINT64_MAX) -QtGui.QNativeGestureEvent?1(Qt.NativeGestureType, QPointingDevice, QPointF, QPointF, QPointF, float, int, int) -QtGui.QNativeGestureEvent.__init__?1(self, Qt.NativeGestureType, QPointingDevice, QPointF, QPointF, QPointF, float, int, int) -QtGui.QNativeGestureEvent.gestureType?4() -> Qt.NativeGestureType -QtGui.QNativeGestureEvent.value?4() -> float -QtGui.QNativeGestureEvent.clone?4() -> QNativeGestureEvent -QtGui.QNativeGestureEvent.fingerCount?4() -> int -QtGui.QNativeGestureEvent.delta?4() -> QPointF -QtGui.QTouchEvent?1(QEvent.Type, QPointingDevice device=None, unknown-type modifiers=Qt.NoModifier, unknown-type touchPoints=[]) -QtGui.QTouchEvent.__init__?1(self, QEvent.Type, QPointingDevice device=None, unknown-type modifiers=Qt.NoModifier, unknown-type touchPoints=[]) -QtGui.QTouchEvent.target?4() -> QObject -QtGui.QTouchEvent.touchPointStates?4() -> unknown-type -QtGui.QTouchEvent.isBeginEvent?4() -> bool -QtGui.QTouchEvent.isUpdateEvent?4() -> bool -QtGui.QTouchEvent.isEndEvent?4() -> bool -QtGui.QTouchEvent.clone?4() -> QTouchEvent -QtGui.QChildWindowEvent?1(QEvent.Type, QWindow) -QtGui.QChildWindowEvent.__init__?1(self, QEvent.Type, QWindow) -QtGui.QChildWindowEvent.child?4() -> QWindow -QtGui.QChildWindowEvent.clone?4() -> QChildWindowEvent -QtGui.QEventPoint.State?10 -QtGui.QEventPoint.State.Unknown?10 -QtGui.QEventPoint.State.Stationary?10 -QtGui.QEventPoint.State.Pressed?10 -QtGui.QEventPoint.State.Updated?10 -QtGui.QEventPoint.State.Released?10 -QtGui.QEventPoint?1(int, QEventPoint.State, QPointF, QPointF) -QtGui.QEventPoint.__init__?1(self, int, QEventPoint.State, QPointF, QPointF) -QtGui.QEventPoint?1(QEventPoint) -QtGui.QEventPoint.__init__?1(self, QEventPoint) -QtGui.QEventPoint.swap?4(QEventPoint) -QtGui.QEventPoint.position?4() -> QPointF -QtGui.QEventPoint.pressPosition?4() -> QPointF -QtGui.QEventPoint.grabPosition?4() -> QPointF -QtGui.QEventPoint.lastPosition?4() -> QPointF -QtGui.QEventPoint.scenePosition?4() -> QPointF -QtGui.QEventPoint.scenePressPosition?4() -> QPointF -QtGui.QEventPoint.sceneGrabPosition?4() -> QPointF -QtGui.QEventPoint.sceneLastPosition?4() -> QPointF -QtGui.QEventPoint.globalPosition?4() -> QPointF -QtGui.QEventPoint.globalPressPosition?4() -> QPointF -QtGui.QEventPoint.globalGrabPosition?4() -> QPointF -QtGui.QEventPoint.globalLastPosition?4() -> QPointF -QtGui.QEventPoint.normalizedPosition?4() -> QPointF -QtGui.QEventPoint.velocity?4() -> QVector2D -QtGui.QEventPoint.state?4() -> QEventPoint.State -QtGui.QEventPoint.device?4() -> QPointingDevice -QtGui.QEventPoint.id?4() -> int -QtGui.QEventPoint.uniqueId?4() -> QPointingDeviceUniqueId -QtGui.QEventPoint.timestamp?4() -> int -QtGui.QEventPoint.lastTimestamp?4() -> int -QtGui.QEventPoint.pressTimestamp?4() -> int -QtGui.QEventPoint.timeHeld?4() -> float -QtGui.QEventPoint.pressure?4() -> float -QtGui.QEventPoint.rotation?4() -> float -QtGui.QEventPoint.ellipseDiameters?4() -> QSizeF -QtGui.QEventPoint.isAccepted?4() -> bool -QtGui.QEventPoint.setAccepted?4(bool accepted=True) -QtGui.QFileSystemModel.Option?10 -QtGui.QFileSystemModel.Option.DontWatchForChanges?10 -QtGui.QFileSystemModel.Option.DontResolveSymlinks?10 -QtGui.QFileSystemModel.Option.DontUseCustomDirectoryIcons?10 -QtGui.QFileSystemModel.Roles?10 -QtGui.QFileSystemModel.Roles.FileIconRole?10 -QtGui.QFileSystemModel.Roles.FilePathRole?10 -QtGui.QFileSystemModel.Roles.FileNameRole?10 -QtGui.QFileSystemModel.Roles.FilePermissions?10 -QtGui.QFileSystemModel?1(QObject parent=None) -QtGui.QFileSystemModel.__init__?1(self, QObject parent=None) -QtGui.QFileSystemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtGui.QFileSystemModel.index?4(QString, int column=0) -> QModelIndex -QtGui.QFileSystemModel.parent?4(QModelIndex) -> QModelIndex -QtGui.QFileSystemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtGui.QFileSystemModel.canFetchMore?4(QModelIndex) -> bool -QtGui.QFileSystemModel.fetchMore?4(QModelIndex) -QtGui.QFileSystemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtGui.QFileSystemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtGui.QFileSystemModel.myComputer?4(int role=Qt.DisplayRole) -> QVariant -QtGui.QFileSystemModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtGui.QFileSystemModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtGui.QFileSystemModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtGui.QFileSystemModel.flags?4(QModelIndex) -> unknown-type -QtGui.QFileSystemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtGui.QFileSystemModel.mimeTypes?4() -> QStringList -QtGui.QFileSystemModel.mimeData?4(unknown-type) -> QMimeData -QtGui.QFileSystemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtGui.QFileSystemModel.supportedDropActions?4() -> unknown-type -QtGui.QFileSystemModel.setRootPath?4(QString) -> QModelIndex -QtGui.QFileSystemModel.rootPath?4() -> QString -QtGui.QFileSystemModel.rootDirectory?4() -> QDir -QtGui.QFileSystemModel.setIconProvider?4(QAbstractFileIconProvider) -QtGui.QFileSystemModel.iconProvider?4() -> QAbstractFileIconProvider -QtGui.QFileSystemModel.setFilter?4(unknown-type) -QtGui.QFileSystemModel.filter?4() -> unknown-type -QtGui.QFileSystemModel.setResolveSymlinks?4(bool) -QtGui.QFileSystemModel.resolveSymlinks?4() -> bool -QtGui.QFileSystemModel.setReadOnly?4(bool) -QtGui.QFileSystemModel.isReadOnly?4() -> bool -QtGui.QFileSystemModel.setNameFilterDisables?4(bool) -QtGui.QFileSystemModel.nameFilterDisables?4() -> bool -QtGui.QFileSystemModel.setNameFilters?4(QStringList) -QtGui.QFileSystemModel.nameFilters?4() -> QStringList -QtGui.QFileSystemModel.filePath?4(QModelIndex) -> QString -QtGui.QFileSystemModel.isDir?4(QModelIndex) -> bool -QtGui.QFileSystemModel.size?4(QModelIndex) -> int -QtGui.QFileSystemModel.type?4(QModelIndex) -> QString -QtGui.QFileSystemModel.lastModified?4(QModelIndex) -> QDateTime -QtGui.QFileSystemModel.lastModified?4(QModelIndex, QTimeZone) -> QDateTime -QtGui.QFileSystemModel.mkdir?4(QModelIndex, QString) -> QModelIndex -QtGui.QFileSystemModel.permissions?4(QModelIndex) -> unknown-type -QtGui.QFileSystemModel.rmdir?4(QModelIndex) -> bool -QtGui.QFileSystemModel.fileName?4(QModelIndex) -> QString -QtGui.QFileSystemModel.fileIcon?4(QModelIndex) -> QIcon -QtGui.QFileSystemModel.fileInfo?4(QModelIndex) -> QFileInfo -QtGui.QFileSystemModel.remove?4(QModelIndex) -> bool -QtGui.QFileSystemModel.fileRenamed?4(QString, QString, QString) -QtGui.QFileSystemModel.rootPathChanged?4(QString) -QtGui.QFileSystemModel.directoryLoaded?4(QString) -QtGui.QFileSystemModel.event?4(QEvent) -> bool -QtGui.QFileSystemModel.timerEvent?4(QTimerEvent) -QtGui.QFileSystemModel.sibling?4(int, int, QModelIndex) -> QModelIndex -QtGui.QFileSystemModel.setOption?4(QFileSystemModel.Option, bool on=True) -QtGui.QFileSystemModel.testOption?4(QFileSystemModel.Option) -> bool -QtGui.QFileSystemModel.setOptions?4(unknown-type) -QtGui.QFileSystemModel.options?4() -> unknown-type -QtGui.QFileSystemModel.roleNames?4() -> unknown-type -QtGui.QFont.HintingPreference?10 -QtGui.QFont.HintingPreference.PreferDefaultHinting?10 -QtGui.QFont.HintingPreference.PreferNoHinting?10 -QtGui.QFont.HintingPreference.PreferVerticalHinting?10 -QtGui.QFont.HintingPreference.PreferFullHinting?10 -QtGui.QFont.SpacingType?10 -QtGui.QFont.SpacingType.PercentageSpacing?10 -QtGui.QFont.SpacingType.AbsoluteSpacing?10 -QtGui.QFont.Capitalization?10 -QtGui.QFont.Capitalization.MixedCase?10 -QtGui.QFont.Capitalization.AllUppercase?10 -QtGui.QFont.Capitalization.AllLowercase?10 -QtGui.QFont.Capitalization.SmallCaps?10 -QtGui.QFont.Capitalization.Capitalize?10 -QtGui.QFont.Stretch?10 -QtGui.QFont.Stretch.AnyStretch?10 -QtGui.QFont.Stretch.UltraCondensed?10 -QtGui.QFont.Stretch.ExtraCondensed?10 -QtGui.QFont.Stretch.Condensed?10 -QtGui.QFont.Stretch.SemiCondensed?10 -QtGui.QFont.Stretch.Unstretched?10 -QtGui.QFont.Stretch.SemiExpanded?10 -QtGui.QFont.Stretch.Expanded?10 -QtGui.QFont.Stretch.ExtraExpanded?10 -QtGui.QFont.Stretch.UltraExpanded?10 -QtGui.QFont.Style?10 -QtGui.QFont.Style.StyleNormal?10 -QtGui.QFont.Style.StyleItalic?10 -QtGui.QFont.Style.StyleOblique?10 -QtGui.QFont.Weight?10 -QtGui.QFont.Weight.Thin?10 -QtGui.QFont.Weight.ExtraLight?10 -QtGui.QFont.Weight.Light?10 -QtGui.QFont.Weight.Normal?10 -QtGui.QFont.Weight.Medium?10 -QtGui.QFont.Weight.DemiBold?10 -QtGui.QFont.Weight.Bold?10 -QtGui.QFont.Weight.ExtraBold?10 -QtGui.QFont.Weight.Black?10 -QtGui.QFont.StyleStrategy?10 -QtGui.QFont.StyleStrategy.PreferDefault?10 -QtGui.QFont.StyleStrategy.PreferBitmap?10 -QtGui.QFont.StyleStrategy.PreferDevice?10 -QtGui.QFont.StyleStrategy.PreferOutline?10 -QtGui.QFont.StyleStrategy.ForceOutline?10 -QtGui.QFont.StyleStrategy.PreferMatch?10 -QtGui.QFont.StyleStrategy.PreferQuality?10 -QtGui.QFont.StyleStrategy.PreferAntialias?10 -QtGui.QFont.StyleStrategy.NoAntialias?10 -QtGui.QFont.StyleStrategy.NoSubpixelAntialias?10 -QtGui.QFont.StyleStrategy.NoFontMerging?10 -QtGui.QFont.StyleStrategy.PreferNoShaping?10 -QtGui.QFont.StyleHint?10 -QtGui.QFont.StyleHint.Helvetica?10 -QtGui.QFont.StyleHint.SansSerif?10 -QtGui.QFont.StyleHint.Times?10 -QtGui.QFont.StyleHint.Serif?10 -QtGui.QFont.StyleHint.Courier?10 -QtGui.QFont.StyleHint.TypeWriter?10 -QtGui.QFont.StyleHint.OldEnglish?10 -QtGui.QFont.StyleHint.Decorative?10 -QtGui.QFont.StyleHint.System?10 -QtGui.QFont.StyleHint.AnyStyle?10 -QtGui.QFont.StyleHint.Cursive?10 -QtGui.QFont.StyleHint.Monospace?10 -QtGui.QFont.StyleHint.Fantasy?10 -QtGui.QFont?1() -QtGui.QFont.__init__?1(self) -QtGui.QFont?1(QStringList, int pointSize=-1, int weight=-1, bool italic=False) -QtGui.QFont.__init__?1(self, QStringList, int pointSize=-1, int weight=-1, bool italic=False) -QtGui.QFont?1(QString, int pointSize=-1, int weight=-1, bool italic=False) -QtGui.QFont.__init__?1(self, QString, int pointSize=-1, int weight=-1, bool italic=False) -QtGui.QFont?1(QFont) -QtGui.QFont.__init__?1(self, QFont) -QtGui.QFont?1(QVariant) -QtGui.QFont.__init__?1(self, QVariant) -QtGui.QFont.family?4() -> QString -QtGui.QFont.setFamily?4(QString) -QtGui.QFont.pointSize?4() -> int -QtGui.QFont.setPointSize?4(int) -QtGui.QFont.pointSizeF?4() -> float -QtGui.QFont.setPointSizeF?4(float) -QtGui.QFont.pixelSize?4() -> int -QtGui.QFont.setPixelSize?4(int) -QtGui.QFont.weight?4() -> int -QtGui.QFont.setWeight?4(int) -QtGui.QFont.setStyle?4(QFont.Style) -QtGui.QFont.style?4() -> QFont.Style -QtGui.QFont.underline?4() -> bool -QtGui.QFont.setUnderline?4(bool) -QtGui.QFont.overline?4() -> bool -QtGui.QFont.setOverline?4(bool) -QtGui.QFont.strikeOut?4() -> bool -QtGui.QFont.setStrikeOut?4(bool) -QtGui.QFont.fixedPitch?4() -> bool -QtGui.QFont.setFixedPitch?4(bool) -QtGui.QFont.kerning?4() -> bool -QtGui.QFont.setKerning?4(bool) -QtGui.QFont.styleHint?4() -> QFont.StyleHint -QtGui.QFont.styleStrategy?4() -> QFont.StyleStrategy -QtGui.QFont.setStyleHint?4(QFont.StyleHint, QFont.StyleStrategy strategy=QFont.PreferDefault) -QtGui.QFont.setStyleStrategy?4(QFont.StyleStrategy) -QtGui.QFont.stretch?4() -> int -QtGui.QFont.setStretch?4(int) -QtGui.QFont.exactMatch?4() -> bool -QtGui.QFont.isCopyOf?4(QFont) -> bool -QtGui.QFont.key?4() -> QString -QtGui.QFont.toString?4() -> QString -QtGui.QFont.fromString?4(QString) -> bool -QtGui.QFont.substitute?4(QString) -> QString -QtGui.QFont.substitutes?4(QString) -> QStringList -QtGui.QFont.substitutions?4() -> QStringList -QtGui.QFont.insertSubstitution?4(QString, QString) -QtGui.QFont.insertSubstitutions?4(QString, QStringList) -QtGui.QFont.removeSubstitutions?4(QString) -QtGui.QFont.initialize?4() -QtGui.QFont.cleanup?4() -QtGui.QFont.cacheStatistics?4() -QtGui.QFont.defaultFamily?4() -> QString -QtGui.QFont.resolve?4(QFont) -> QFont -QtGui.QFont.bold?4() -> bool -QtGui.QFont.setBold?4(bool) -QtGui.QFont.italic?4() -> bool -QtGui.QFont.setItalic?4(bool) -QtGui.QFont.letterSpacing?4() -> float -QtGui.QFont.letterSpacingType?4() -> QFont.SpacingType -QtGui.QFont.setLetterSpacing?4(QFont.SpacingType, float) -QtGui.QFont.wordSpacing?4() -> float -QtGui.QFont.setWordSpacing?4(float) -QtGui.QFont.setCapitalization?4(QFont.Capitalization) -QtGui.QFont.capitalization?4() -> QFont.Capitalization -QtGui.QFont.styleName?4() -> QString -QtGui.QFont.setStyleName?4(QString) -QtGui.QFont.setHintingPreference?4(QFont.HintingPreference) -QtGui.QFont.hintingPreference?4() -> QFont.HintingPreference -QtGui.QFont.swap?4(QFont) -QtGui.QFont.families?4() -> QStringList -QtGui.QFont.setFamilies?4(QStringList) -QtGui.QFont.setFeature?4(QFont.Tag, int) -QtGui.QFont.unsetFeature?4(QFont.Tag) -QtGui.QFont.featureValue?4(QFont.Tag) -> int -QtGui.QFont.isFeatureSet?4(QFont.Tag) -> bool -QtGui.QFont.featureTags?4() -> unknown-type -QtGui.QFont.clearFeatures?4() -QtGui.QFont.setVariableAxis?4(QFont.Tag, float) -QtGui.QFont.unsetVariableAxis?4(QFont.Tag) -QtGui.QFont.isVariableAxisSet?4(QFont.Tag) -> bool -QtGui.QFont.variableAxisValue?4(QFont.Tag) -> float -QtGui.QFont.clearVariableAxes?4() -QtGui.QFont.variableAxisTags?4() -> unknown-type -QtGui.QFont.Tag?1() -QtGui.QFont.Tag.__init__?1(self) -QtGui.QFont.Tag?1(QAnyStringView) -QtGui.QFont.Tag.__init__?1(self, QAnyStringView) -QtGui.QFont.Tag?1(QFont.Tag) -QtGui.QFont.Tag.__init__?1(self, QFont.Tag) -QtGui.QFont.Tag.isValid?4() -> bool -QtGui.QFont.Tag.value?4() -> int -QtGui.QFont.Tag.toString?4() -> QByteArray -QtGui.QFont.Tag.fromValue?4(int) -> unknown-type -QtGui.QFont.Tag.fromString?4(QAnyStringView) -> unknown-type -QtGui.QFontDatabase.SystemFont?10 -QtGui.QFontDatabase.SystemFont.GeneralFont?10 -QtGui.QFontDatabase.SystemFont.FixedFont?10 -QtGui.QFontDatabase.SystemFont.TitleFont?10 -QtGui.QFontDatabase.SystemFont.SmallestReadableFont?10 -QtGui.QFontDatabase.WritingSystem?10 -QtGui.QFontDatabase.WritingSystem.Any?10 -QtGui.QFontDatabase.WritingSystem.Latin?10 -QtGui.QFontDatabase.WritingSystem.Greek?10 -QtGui.QFontDatabase.WritingSystem.Cyrillic?10 -QtGui.QFontDatabase.WritingSystem.Armenian?10 -QtGui.QFontDatabase.WritingSystem.Hebrew?10 -QtGui.QFontDatabase.WritingSystem.Arabic?10 -QtGui.QFontDatabase.WritingSystem.Syriac?10 -QtGui.QFontDatabase.WritingSystem.Thaana?10 -QtGui.QFontDatabase.WritingSystem.Devanagari?10 -QtGui.QFontDatabase.WritingSystem.Bengali?10 -QtGui.QFontDatabase.WritingSystem.Gurmukhi?10 -QtGui.QFontDatabase.WritingSystem.Gujarati?10 -QtGui.QFontDatabase.WritingSystem.Oriya?10 -QtGui.QFontDatabase.WritingSystem.Tamil?10 -QtGui.QFontDatabase.WritingSystem.Telugu?10 -QtGui.QFontDatabase.WritingSystem.Kannada?10 -QtGui.QFontDatabase.WritingSystem.Malayalam?10 -QtGui.QFontDatabase.WritingSystem.Sinhala?10 -QtGui.QFontDatabase.WritingSystem.Thai?10 -QtGui.QFontDatabase.WritingSystem.Lao?10 -QtGui.QFontDatabase.WritingSystem.Tibetan?10 -QtGui.QFontDatabase.WritingSystem.Myanmar?10 -QtGui.QFontDatabase.WritingSystem.Georgian?10 -QtGui.QFontDatabase.WritingSystem.Khmer?10 -QtGui.QFontDatabase.WritingSystem.SimplifiedChinese?10 -QtGui.QFontDatabase.WritingSystem.TraditionalChinese?10 -QtGui.QFontDatabase.WritingSystem.Japanese?10 -QtGui.QFontDatabase.WritingSystem.Korean?10 -QtGui.QFontDatabase.WritingSystem.Vietnamese?10 -QtGui.QFontDatabase.WritingSystem.Other?10 -QtGui.QFontDatabase.WritingSystem.Symbol?10 -QtGui.QFontDatabase.WritingSystem.Ogham?10 -QtGui.QFontDatabase.WritingSystem.Runic?10 -QtGui.QFontDatabase.WritingSystem.Nko?10 -QtGui.QFontDatabase?1(QFontDatabase) -QtGui.QFontDatabase.__init__?1(self, QFontDatabase) -QtGui.QFontDatabase.standardSizes?4() -> unknown-type -QtGui.QFontDatabase.writingSystems?4(QString) -> unknown-type -QtGui.QFontDatabase.writingSystems?4() -> unknown-type -QtGui.QFontDatabase.families?4(QFontDatabase.WritingSystem writingSystem=QFontDatabase.Any) -> QStringList -QtGui.QFontDatabase.styles?4(QString) -> QStringList -QtGui.QFontDatabase.pointSizes?4(QString, QString style='') -> unknown-type -QtGui.QFontDatabase.smoothSizes?4(QString, QString) -> unknown-type -QtGui.QFontDatabase.styleString?4(QFontInfo) -> QString -QtGui.QFontDatabase.styleString?4(QFont) -> QString -QtGui.QFontDatabase.font?4(QString, QString, int) -> QFont -QtGui.QFontDatabase.isBitmapScalable?4(QString, QString style='') -> bool -QtGui.QFontDatabase.isSmoothlyScalable?4(QString, QString style='') -> bool -QtGui.QFontDatabase.isScalable?4(QString, QString style='') -> bool -QtGui.QFontDatabase.isFixedPitch?4(QString, QString style='') -> bool -QtGui.QFontDatabase.italic?4(QString, QString) -> bool -QtGui.QFontDatabase.bold?4(QString, QString) -> bool -QtGui.QFontDatabase.weight?4(QString, QString) -> int -QtGui.QFontDatabase.writingSystemName?4(QFontDatabase.WritingSystem) -> QString -QtGui.QFontDatabase.writingSystemSample?4(QFontDatabase.WritingSystem) -> QString -QtGui.QFontDatabase.addApplicationFont?4(QString) -> int -QtGui.QFontDatabase.addApplicationFontFromData?4(QByteArray) -> int -QtGui.QFontDatabase.applicationFontFamilies?4(int) -> QStringList -QtGui.QFontDatabase.removeApplicationFont?4(int) -> bool -QtGui.QFontDatabase.removeAllApplicationFonts?4() -> bool -QtGui.QFontDatabase.systemFont?4(QFontDatabase.SystemFont) -> QFont -QtGui.QFontDatabase.isPrivateFamily?4(QString) -> bool -QtGui.QFontInfo?1(QFont) -QtGui.QFontInfo.__init__?1(self, QFont) -QtGui.QFontInfo?1(QFontInfo) -QtGui.QFontInfo.__init__?1(self, QFontInfo) -QtGui.QFontInfo.family?4() -> QString -QtGui.QFontInfo.pixelSize?4() -> int -QtGui.QFontInfo.pointSize?4() -> int -QtGui.QFontInfo.pointSizeF?4() -> float -QtGui.QFontInfo.italic?4() -> bool -QtGui.QFontInfo.style?4() -> QFont.Style -QtGui.QFontInfo.weight?4() -> int -QtGui.QFontInfo.bold?4() -> bool -QtGui.QFontInfo.fixedPitch?4() -> bool -QtGui.QFontInfo.styleHint?4() -> QFont.StyleHint -QtGui.QFontInfo.exactMatch?4() -> bool -QtGui.QFontInfo.styleName?4() -> QString -QtGui.QFontInfo.swap?4(QFontInfo) -QtGui.QFontMetrics?1(QFont) -QtGui.QFontMetrics.__init__?1(self, QFont) -QtGui.QFontMetrics?1(QFont, QPaintDevice) -QtGui.QFontMetrics.__init__?1(self, QFont, QPaintDevice) -QtGui.QFontMetrics?1(QFontMetrics) -QtGui.QFontMetrics.__init__?1(self, QFontMetrics) -QtGui.QFontMetrics.ascent?4() -> int -QtGui.QFontMetrics.descent?4() -> int -QtGui.QFontMetrics.height?4() -> int -QtGui.QFontMetrics.leading?4() -> int -QtGui.QFontMetrics.lineSpacing?4() -> int -QtGui.QFontMetrics.minLeftBearing?4() -> int -QtGui.QFontMetrics.minRightBearing?4() -> int -QtGui.QFontMetrics.maxWidth?4() -> int -QtGui.QFontMetrics.xHeight?4() -> int -QtGui.QFontMetrics.inFont?4(QChar) -> bool -QtGui.QFontMetrics.leftBearing?4(QChar) -> int -QtGui.QFontMetrics.rightBearing?4(QChar) -> int -QtGui.QFontMetrics.boundingRect?4(QString, QTextOption) -> QRect -QtGui.QFontMetrics.boundingRectChar?4(QChar) -> QRect -QtGui.QFontMetrics.boundingRect?4(QString) -> QRect -QtGui.QFontMetrics.boundingRect?4(QRect, int, QString, int tabStops=0, List tabArray=None) -> QRect -QtGui.QFontMetrics.boundingRect?4(int, int, int, int, int, QString, int tabStops=0, List tabArray=None) -> QRect -QtGui.QFontMetrics.size?4(int, QString, int tabStops=0, List tabArray=None) -> QSize -QtGui.QFontMetrics.underlinePos?4() -> int -QtGui.QFontMetrics.overlinePos?4() -> int -QtGui.QFontMetrics.strikeOutPos?4() -> int -QtGui.QFontMetrics.lineWidth?4() -> int -QtGui.QFontMetrics.averageCharWidth?4() -> int -QtGui.QFontMetrics.elidedText?4(QString, Qt.TextElideMode, int, int flags=0) -> QString -QtGui.QFontMetrics.tightBoundingRect?4(QString, QTextOption) -> QRect -QtGui.QFontMetrics.tightBoundingRect?4(QString) -> QRect -QtGui.QFontMetrics.inFontUcs4?4(int) -> bool -QtGui.QFontMetrics.swap?4(QFontMetrics) -QtGui.QFontMetrics.capHeight?4() -> int -QtGui.QFontMetrics.horizontalAdvance?4(QString, QTextOption) -> int -QtGui.QFontMetrics.horizontalAdvance?4(QString, int length=-1) -> int -QtGui.QFontMetrics.fontDpi?4() -> float -QtGui.QFontMetricsF?1(QFont) -QtGui.QFontMetricsF.__init__?1(self, QFont) -QtGui.QFontMetricsF?1(QFont, QPaintDevice) -QtGui.QFontMetricsF.__init__?1(self, QFont, QPaintDevice) -QtGui.QFontMetricsF?1(QFontMetrics) -QtGui.QFontMetricsF.__init__?1(self, QFontMetrics) -QtGui.QFontMetricsF?1(QFontMetricsF) -QtGui.QFontMetricsF.__init__?1(self, QFontMetricsF) -QtGui.QFontMetricsF.ascent?4() -> float -QtGui.QFontMetricsF.descent?4() -> float -QtGui.QFontMetricsF.height?4() -> float -QtGui.QFontMetricsF.leading?4() -> float -QtGui.QFontMetricsF.lineSpacing?4() -> float -QtGui.QFontMetricsF.minLeftBearing?4() -> float -QtGui.QFontMetricsF.minRightBearing?4() -> float -QtGui.QFontMetricsF.maxWidth?4() -> float -QtGui.QFontMetricsF.xHeight?4() -> float -QtGui.QFontMetricsF.inFont?4(QChar) -> bool -QtGui.QFontMetricsF.leftBearing?4(QChar) -> float -QtGui.QFontMetricsF.rightBearing?4(QChar) -> float -QtGui.QFontMetricsF.boundingRect?4(QString, QTextOption) -> QRectF -QtGui.QFontMetricsF.boundingRectChar?4(QChar) -> QRectF -QtGui.QFontMetricsF.boundingRect?4(QString) -> QRectF -QtGui.QFontMetricsF.boundingRect?4(QRectF, int, QString, int tabStops=0, List tabArray=None) -> QRectF -QtGui.QFontMetricsF.size?4(int, QString, int tabStops=0, List tabArray=None) -> QSizeF -QtGui.QFontMetricsF.underlinePos?4() -> float -QtGui.QFontMetricsF.overlinePos?4() -> float -QtGui.QFontMetricsF.strikeOutPos?4() -> float -QtGui.QFontMetricsF.lineWidth?4() -> float -QtGui.QFontMetricsF.averageCharWidth?4() -> float -QtGui.QFontMetricsF.elidedText?4(QString, Qt.TextElideMode, float, int flags=0) -> QString -QtGui.QFontMetricsF.tightBoundingRect?4(QString, QTextOption) -> QRectF -QtGui.QFontMetricsF.tightBoundingRect?4(QString) -> QRectF -QtGui.QFontMetricsF.inFontUcs4?4(int) -> bool -QtGui.QFontMetricsF.swap?4(QFontMetricsF) -QtGui.QFontMetricsF.capHeight?4() -> float -QtGui.QFontMetricsF.horizontalAdvance?4(QString, QTextOption) -> float -QtGui.QFontMetricsF.horizontalAdvance?4(QString, int length=-1) -> float -QtGui.QFontMetricsF.fontDpi?4() -> float -QtGui.QMatrix4x3?1() -QtGui.QMatrix4x3.__init__?1(self) -QtGui.QMatrix4x3?1(QMatrix4x3) -QtGui.QMatrix4x3.__init__?1(self, QMatrix4x3) -QtGui.QMatrix4x3?1(Any) -QtGui.QMatrix4x3.__init__?1(self, Any) -QtGui.QMatrix4x3.data?4() -> List -QtGui.QMatrix4x3.copyDataTo?4() -> List -QtGui.QMatrix4x3.isIdentity?4() -> bool -QtGui.QMatrix4x3.setToIdentity?4() -QtGui.QMatrix4x3.fill?4(float) -QtGui.QMatrix4x3.transposed?4() -> QMatrix3x4 -QtGui.QMatrix4x2?1() -QtGui.QMatrix4x2.__init__?1(self) -QtGui.QMatrix4x2?1(QMatrix4x2) -QtGui.QMatrix4x2.__init__?1(self, QMatrix4x2) -QtGui.QMatrix4x2?1(Any) -QtGui.QMatrix4x2.__init__?1(self, Any) -QtGui.QMatrix4x2.data?4() -> List -QtGui.QMatrix4x2.copyDataTo?4() -> List -QtGui.QMatrix4x2.isIdentity?4() -> bool -QtGui.QMatrix4x2.setToIdentity?4() -QtGui.QMatrix4x2.fill?4(float) -QtGui.QMatrix4x2.transposed?4() -> QMatrix2x4 -QtGui.QMatrix3x4?1() -QtGui.QMatrix3x4.__init__?1(self) -QtGui.QMatrix3x4?1(QMatrix3x4) -QtGui.QMatrix3x4.__init__?1(self, QMatrix3x4) -QtGui.QMatrix3x4?1(Any) -QtGui.QMatrix3x4.__init__?1(self, Any) -QtGui.QMatrix3x4.data?4() -> List -QtGui.QMatrix3x4.copyDataTo?4() -> List -QtGui.QMatrix3x4.isIdentity?4() -> bool -QtGui.QMatrix3x4.setToIdentity?4() -QtGui.QMatrix3x4.fill?4(float) -QtGui.QMatrix3x4.transposed?4() -> QMatrix4x3 -QtGui.QMatrix3x3?1() -QtGui.QMatrix3x3.__init__?1(self) -QtGui.QMatrix3x3?1(QMatrix3x3) -QtGui.QMatrix3x3.__init__?1(self, QMatrix3x3) -QtGui.QMatrix3x3?1(Any) -QtGui.QMatrix3x3.__init__?1(self, Any) -QtGui.QMatrix3x3.data?4() -> List -QtGui.QMatrix3x3.copyDataTo?4() -> List -QtGui.QMatrix3x3.isIdentity?4() -> bool -QtGui.QMatrix3x3.setToIdentity?4() -QtGui.QMatrix3x3.fill?4(float) -QtGui.QMatrix3x3.transposed?4() -> QMatrix3x3 -QtGui.QMatrix3x2?1() -QtGui.QMatrix3x2.__init__?1(self) -QtGui.QMatrix3x2?1(QMatrix3x2) -QtGui.QMatrix3x2.__init__?1(self, QMatrix3x2) -QtGui.QMatrix3x2?1(Any) -QtGui.QMatrix3x2.__init__?1(self, Any) -QtGui.QMatrix3x2.data?4() -> List -QtGui.QMatrix3x2.copyDataTo?4() -> List -QtGui.QMatrix3x2.isIdentity?4() -> bool -QtGui.QMatrix3x2.setToIdentity?4() -QtGui.QMatrix3x2.fill?4(float) -QtGui.QMatrix3x2.transposed?4() -> QMatrix2x3 -QtGui.QMatrix2x4?1() -QtGui.QMatrix2x4.__init__?1(self) -QtGui.QMatrix2x4?1(QMatrix2x4) -QtGui.QMatrix2x4.__init__?1(self, QMatrix2x4) -QtGui.QMatrix2x4?1(Any) -QtGui.QMatrix2x4.__init__?1(self, Any) -QtGui.QMatrix2x4.data?4() -> List -QtGui.QMatrix2x4.copyDataTo?4() -> List -QtGui.QMatrix2x4.isIdentity?4() -> bool -QtGui.QMatrix2x4.setToIdentity?4() -QtGui.QMatrix2x4.fill?4(float) -QtGui.QMatrix2x4.transposed?4() -> QMatrix4x2 -QtGui.QMatrix2x3?1() -QtGui.QMatrix2x3.__init__?1(self) -QtGui.QMatrix2x3?1(QMatrix2x3) -QtGui.QMatrix2x3.__init__?1(self, QMatrix2x3) -QtGui.QMatrix2x3?1(Any) -QtGui.QMatrix2x3.__init__?1(self, Any) -QtGui.QMatrix2x3.data?4() -> List -QtGui.QMatrix2x3.copyDataTo?4() -> List -QtGui.QMatrix2x3.isIdentity?4() -> bool -QtGui.QMatrix2x3.setToIdentity?4() -QtGui.QMatrix2x3.fill?4(float) -QtGui.QMatrix2x3.transposed?4() -> QMatrix3x2 -QtGui.QMatrix2x2?1() -QtGui.QMatrix2x2.__init__?1(self) -QtGui.QMatrix2x2?1(QMatrix2x2) -QtGui.QMatrix2x2.__init__?1(self, QMatrix2x2) -QtGui.QMatrix2x2?1(Any) -QtGui.QMatrix2x2.__init__?1(self, Any) -QtGui.QMatrix2x2.data?4() -> List -QtGui.QMatrix2x2.copyDataTo?4() -> List -QtGui.QMatrix2x2.isIdentity?4() -> bool -QtGui.QMatrix2x2.setToIdentity?4() -QtGui.QMatrix2x2.fill?4(float) -QtGui.QMatrix2x2.transposed?4() -> QMatrix2x2 -QtGui.QGlyphRun.GlyphRunFlag?10 -QtGui.QGlyphRun.GlyphRunFlag.Overline?10 -QtGui.QGlyphRun.GlyphRunFlag.Underline?10 -QtGui.QGlyphRun.GlyphRunFlag.StrikeOut?10 -QtGui.QGlyphRun.GlyphRunFlag.RightToLeft?10 -QtGui.QGlyphRun.GlyphRunFlag.SplitLigature?10 -QtGui.QGlyphRun?1() -QtGui.QGlyphRun.__init__?1(self) -QtGui.QGlyphRun?1(QGlyphRun) -QtGui.QGlyphRun.__init__?1(self, QGlyphRun) -QtGui.QGlyphRun.rawFont?4() -> QRawFont -QtGui.QGlyphRun.setRawFont?4(QRawFont) -QtGui.QGlyphRun.glyphIndexes?4() -> unknown-type -QtGui.QGlyphRun.setGlyphIndexes?4(unknown-type) -QtGui.QGlyphRun.positions?4() -> unknown-type -QtGui.QGlyphRun.setPositions?4(unknown-type) -QtGui.QGlyphRun.clear?4() -QtGui.QGlyphRun.setOverline?4(bool) -QtGui.QGlyphRun.overline?4() -> bool -QtGui.QGlyphRun.setUnderline?4(bool) -QtGui.QGlyphRun.underline?4() -> bool -QtGui.QGlyphRun.setStrikeOut?4(bool) -QtGui.QGlyphRun.strikeOut?4() -> bool -QtGui.QGlyphRun.setRightToLeft?4(bool) -QtGui.QGlyphRun.isRightToLeft?4() -> bool -QtGui.QGlyphRun.setFlag?4(QGlyphRun.GlyphRunFlag, bool enabled=True) -QtGui.QGlyphRun.setFlags?4(unknown-type) -QtGui.QGlyphRun.flags?4() -> unknown-type -QtGui.QGlyphRun.setBoundingRect?4(QRectF) -QtGui.QGlyphRun.boundingRect?4() -> QRectF -QtGui.QGlyphRun.isEmpty?4() -> bool -QtGui.QGlyphRun.swap?4(QGlyphRun) -QtGui.QGlyphRun.stringIndexes?4() -> unknown-type -QtGui.QGlyphRun.setStringIndexes?4(unknown-type) -QtGui.QGlyphRun.setSourceString?4(QString) -QtGui.QGlyphRun.sourceString?4() -> QString -QtGui.QGuiApplication?1(List) -QtGui.QGuiApplication.__init__?1(self, List) -QtGui.QGuiApplication.allWindows?4() -> unknown-type -QtGui.QGuiApplication.topLevelWindows?4() -> unknown-type -QtGui.QGuiApplication.topLevelAt?4(QPoint) -> QWindow -QtGui.QGuiApplication.platformName?4() -> QString -QtGui.QGuiApplication.focusWindow?4() -> QWindow -QtGui.QGuiApplication.focusObject?4() -> QObject -QtGui.QGuiApplication.primaryScreen?4() -> QScreen -QtGui.QGuiApplication.screens?4() -> unknown-type -QtGui.QGuiApplication.overrideCursor?4() -> QCursor -QtGui.QGuiApplication.setOverrideCursor?4(QCursor) -QtGui.QGuiApplication.changeOverrideCursor?4(QCursor) -QtGui.QGuiApplication.restoreOverrideCursor?4() -QtGui.QGuiApplication.font?4() -> QFont -QtGui.QGuiApplication.setFont?4(QFont) -QtGui.QGuiApplication.clipboard?4() -> QClipboard -QtGui.QGuiApplication.palette?4() -> QPalette -QtGui.QGuiApplication.setPalette?4(QPalette) -QtGui.QGuiApplication.keyboardModifiers?4() -> unknown-type -QtGui.QGuiApplication.queryKeyboardModifiers?4() -> unknown-type -QtGui.QGuiApplication.mouseButtons?4() -> unknown-type -QtGui.QGuiApplication.setLayoutDirection?4(Qt.LayoutDirection) -QtGui.QGuiApplication.layoutDirection?4() -> Qt.LayoutDirection -QtGui.QGuiApplication.isRightToLeft?4() -> bool -QtGui.QGuiApplication.isLeftToRight?4() -> bool -QtGui.QGuiApplication.setDesktopSettingsAware?4(bool) -QtGui.QGuiApplication.desktopSettingsAware?4() -> bool -QtGui.QGuiApplication.setQuitOnLastWindowClosed?4(bool) -QtGui.QGuiApplication.quitOnLastWindowClosed?4() -> bool -QtGui.QGuiApplication.exec?4() -> int -QtGui.QGuiApplication.notify?4(QObject, QEvent) -> bool -QtGui.QGuiApplication.fontDatabaseChanged?4() -QtGui.QGuiApplication.screenAdded?4(QScreen) -QtGui.QGuiApplication.lastWindowClosed?4() -QtGui.QGuiApplication.focusObjectChanged?4(QObject) -QtGui.QGuiApplication.commitDataRequest?4(QSessionManager) -QtGui.QGuiApplication.saveStateRequest?4(QSessionManager) -QtGui.QGuiApplication.focusWindowChanged?4(QWindow) -QtGui.QGuiApplication.applicationStateChanged?4(Qt.ApplicationState) -QtGui.QGuiApplication.applicationDisplayNameChanged?4() -QtGui.QGuiApplication.setApplicationDisplayName?4(QString) -QtGui.QGuiApplication.applicationDisplayName?4() -> QString -QtGui.QGuiApplication.modalWindow?4() -> QWindow -QtGui.QGuiApplication.styleHints?4() -> QStyleHints -QtGui.QGuiApplication.inputMethod?4() -> QInputMethod -QtGui.QGuiApplication.devicePixelRatio?4() -> float -QtGui.QGuiApplication.isSessionRestored?4() -> bool -QtGui.QGuiApplication.sessionId?4() -> QString -QtGui.QGuiApplication.sessionKey?4() -> QString -QtGui.QGuiApplication.isSavingSession?4() -> bool -QtGui.QGuiApplication.applicationState?4() -> Qt.ApplicationState -QtGui.QGuiApplication.sync?4() -QtGui.QGuiApplication.setWindowIcon?4(QIcon) -QtGui.QGuiApplication.windowIcon?4() -> QIcon -QtGui.QGuiApplication.screenRemoved?4(QScreen) -QtGui.QGuiApplication.layoutDirectionChanged?4(Qt.LayoutDirection) -QtGui.QGuiApplication.primaryScreenChanged?4(QScreen) -QtGui.QGuiApplication.setDesktopFileName?4(QString) -QtGui.QGuiApplication.desktopFileName?4() -> QString -QtGui.QGuiApplication.screenAt?4(QPoint) -> QScreen -QtGui.QGuiApplication.setHighDpiScaleFactorRoundingPolicy?4(Qt.HighDpiScaleFactorRoundingPolicy) -QtGui.QGuiApplication.highDpiScaleFactorRoundingPolicy?4() -> Qt.HighDpiScaleFactorRoundingPolicy -QtGui.QGuiApplication.setBadgeNumber?4(int) -QtGui.QGuiApplication.event?4(QEvent) -> bool -QtGui.QIcon.ThemeIcon?10 -QtGui.QIcon.ThemeIcon.AddressBookNew?10 -QtGui.QIcon.ThemeIcon.ApplicationExit?10 -QtGui.QIcon.ThemeIcon.AppointmentNew?10 -QtGui.QIcon.ThemeIcon.CallStart?10 -QtGui.QIcon.ThemeIcon.CallStop?10 -QtGui.QIcon.ThemeIcon.ContactNew?10 -QtGui.QIcon.ThemeIcon.DocumentNew?10 -QtGui.QIcon.ThemeIcon.DocumentOpen?10 -QtGui.QIcon.ThemeIcon.DocumentOpenRecent?10 -QtGui.QIcon.ThemeIcon.DocumentPageSetup?10 -QtGui.QIcon.ThemeIcon.DocumentPrint?10 -QtGui.QIcon.ThemeIcon.DocumentPrintPreview?10 -QtGui.QIcon.ThemeIcon.DocumentProperties?10 -QtGui.QIcon.ThemeIcon.DocumentRevert?10 -QtGui.QIcon.ThemeIcon.DocumentSave?10 -QtGui.QIcon.ThemeIcon.DocumentSaveAs?10 -QtGui.QIcon.ThemeIcon.DocumentSend?10 -QtGui.QIcon.ThemeIcon.EditClear?10 -QtGui.QIcon.ThemeIcon.EditCopy?10 -QtGui.QIcon.ThemeIcon.EditCut?10 -QtGui.QIcon.ThemeIcon.EditDelete?10 -QtGui.QIcon.ThemeIcon.EditFind?10 -QtGui.QIcon.ThemeIcon.EditPaste?10 -QtGui.QIcon.ThemeIcon.EditRedo?10 -QtGui.QIcon.ThemeIcon.EditSelectAll?10 -QtGui.QIcon.ThemeIcon.EditUndo?10 -QtGui.QIcon.ThemeIcon.FolderNew?10 -QtGui.QIcon.ThemeIcon.FormatIndentLess?10 -QtGui.QIcon.ThemeIcon.FormatIndentMore?10 -QtGui.QIcon.ThemeIcon.FormatJustifyCenter?10 -QtGui.QIcon.ThemeIcon.FormatJustifyFill?10 -QtGui.QIcon.ThemeIcon.FormatJustifyLeft?10 -QtGui.QIcon.ThemeIcon.FormatJustifyRight?10 -QtGui.QIcon.ThemeIcon.FormatTextDirectionLtr?10 -QtGui.QIcon.ThemeIcon.FormatTextDirectionRtl?10 -QtGui.QIcon.ThemeIcon.FormatTextBold?10 -QtGui.QIcon.ThemeIcon.FormatTextItalic?10 -QtGui.QIcon.ThemeIcon.FormatTextUnderline?10 -QtGui.QIcon.ThemeIcon.FormatTextStrikethrough?10 -QtGui.QIcon.ThemeIcon.GoDown?10 -QtGui.QIcon.ThemeIcon.GoHome?10 -QtGui.QIcon.ThemeIcon.GoNext?10 -QtGui.QIcon.ThemeIcon.GoPrevious?10 -QtGui.QIcon.ThemeIcon.GoUp?10 -QtGui.QIcon.ThemeIcon.HelpAbout?10 -QtGui.QIcon.ThemeIcon.HelpFaq?10 -QtGui.QIcon.ThemeIcon.InsertImage?10 -QtGui.QIcon.ThemeIcon.InsertLink?10 -QtGui.QIcon.ThemeIcon.InsertText?10 -QtGui.QIcon.ThemeIcon.ListAdd?10 -QtGui.QIcon.ThemeIcon.ListRemove?10 -QtGui.QIcon.ThemeIcon.MailForward?10 -QtGui.QIcon.ThemeIcon.MailMarkImportant?10 -QtGui.QIcon.ThemeIcon.MailMarkRead?10 -QtGui.QIcon.ThemeIcon.MailMarkUnread?10 -QtGui.QIcon.ThemeIcon.MailMessageNew?10 -QtGui.QIcon.ThemeIcon.MailReplyAll?10 -QtGui.QIcon.ThemeIcon.MailReplySender?10 -QtGui.QIcon.ThemeIcon.MailSend?10 -QtGui.QIcon.ThemeIcon.MediaEject?10 -QtGui.QIcon.ThemeIcon.MediaPlaybackPause?10 -QtGui.QIcon.ThemeIcon.MediaPlaybackStart?10 -QtGui.QIcon.ThemeIcon.MediaPlaybackStop?10 -QtGui.QIcon.ThemeIcon.MediaRecord?10 -QtGui.QIcon.ThemeIcon.MediaSeekBackward?10 -QtGui.QIcon.ThemeIcon.MediaSeekForward?10 -QtGui.QIcon.ThemeIcon.MediaSkipBackward?10 -QtGui.QIcon.ThemeIcon.MediaSkipForward?10 -QtGui.QIcon.ThemeIcon.ObjectRotateLeft?10 -QtGui.QIcon.ThemeIcon.ObjectRotateRight?10 -QtGui.QIcon.ThemeIcon.ProcessStop?10 -QtGui.QIcon.ThemeIcon.SystemLockScreen?10 -QtGui.QIcon.ThemeIcon.SystemLogOut?10 -QtGui.QIcon.ThemeIcon.SystemSearch?10 -QtGui.QIcon.ThemeIcon.SystemReboot?10 -QtGui.QIcon.ThemeIcon.SystemShutdown?10 -QtGui.QIcon.ThemeIcon.ToolsCheckSpelling?10 -QtGui.QIcon.ThemeIcon.ViewFullscreen?10 -QtGui.QIcon.ThemeIcon.ViewRefresh?10 -QtGui.QIcon.ThemeIcon.ViewRestore?10 -QtGui.QIcon.ThemeIcon.WindowClose?10 -QtGui.QIcon.ThemeIcon.WindowNew?10 -QtGui.QIcon.ThemeIcon.ZoomFitBest?10 -QtGui.QIcon.ThemeIcon.ZoomIn?10 -QtGui.QIcon.ThemeIcon.ZoomOut?10 -QtGui.QIcon.ThemeIcon.AudioCard?10 -QtGui.QIcon.ThemeIcon.AudioInputMicrophone?10 -QtGui.QIcon.ThemeIcon.Battery?10 -QtGui.QIcon.ThemeIcon.CameraPhoto?10 -QtGui.QIcon.ThemeIcon.CameraVideo?10 -QtGui.QIcon.ThemeIcon.CameraWeb?10 -QtGui.QIcon.ThemeIcon.Computer?10 -QtGui.QIcon.ThemeIcon.DriveHarddisk?10 -QtGui.QIcon.ThemeIcon.DriveOptical?10 -QtGui.QIcon.ThemeIcon.InputGaming?10 -QtGui.QIcon.ThemeIcon.InputKeyboard?10 -QtGui.QIcon.ThemeIcon.InputMouse?10 -QtGui.QIcon.ThemeIcon.InputTablet?10 -QtGui.QIcon.ThemeIcon.MediaFlash?10 -QtGui.QIcon.ThemeIcon.MediaOptical?10 -QtGui.QIcon.ThemeIcon.MediaTape?10 -QtGui.QIcon.ThemeIcon.MultimediaPlayer?10 -QtGui.QIcon.ThemeIcon.NetworkWired?10 -QtGui.QIcon.ThemeIcon.NetworkWireless?10 -QtGui.QIcon.ThemeIcon.Phone?10 -QtGui.QIcon.ThemeIcon.Printer?10 -QtGui.QIcon.ThemeIcon.Scanner?10 -QtGui.QIcon.ThemeIcon.VideoDisplay?10 -QtGui.QIcon.ThemeIcon.AppointmentMissed?10 -QtGui.QIcon.ThemeIcon.AppointmentSoon?10 -QtGui.QIcon.ThemeIcon.AudioVolumeHigh?10 -QtGui.QIcon.ThemeIcon.AudioVolumeLow?10 -QtGui.QIcon.ThemeIcon.AudioVolumeMedium?10 -QtGui.QIcon.ThemeIcon.AudioVolumeMuted?10 -QtGui.QIcon.ThemeIcon.BatteryCaution?10 -QtGui.QIcon.ThemeIcon.BatteryLow?10 -QtGui.QIcon.ThemeIcon.DialogError?10 -QtGui.QIcon.ThemeIcon.DialogInformation?10 -QtGui.QIcon.ThemeIcon.DialogPassword?10 -QtGui.QIcon.ThemeIcon.DialogQuestion?10 -QtGui.QIcon.ThemeIcon.DialogWarning?10 -QtGui.QIcon.ThemeIcon.FolderDragAccept?10 -QtGui.QIcon.ThemeIcon.FolderOpen?10 -QtGui.QIcon.ThemeIcon.FolderVisiting?10 -QtGui.QIcon.ThemeIcon.ImageLoading?10 -QtGui.QIcon.ThemeIcon.ImageMissing?10 -QtGui.QIcon.ThemeIcon.MailAttachment?10 -QtGui.QIcon.ThemeIcon.MailUnread?10 -QtGui.QIcon.ThemeIcon.MailRead?10 -QtGui.QIcon.ThemeIcon.MailReplied?10 -QtGui.QIcon.ThemeIcon.MediaPlaylistRepeat?10 -QtGui.QIcon.ThemeIcon.MediaPlaylistShuffle?10 -QtGui.QIcon.ThemeIcon.NetworkOffline?10 -QtGui.QIcon.ThemeIcon.PrinterPrinting?10 -QtGui.QIcon.ThemeIcon.SecurityHigh?10 -QtGui.QIcon.ThemeIcon.SecurityLow?10 -QtGui.QIcon.ThemeIcon.SoftwareUpdateAvailable?10 -QtGui.QIcon.ThemeIcon.SoftwareUpdateUrgent?10 -QtGui.QIcon.ThemeIcon.SyncError?10 -QtGui.QIcon.ThemeIcon.SyncSynchronizing?10 -QtGui.QIcon.ThemeIcon.UserAvailable?10 -QtGui.QIcon.ThemeIcon.UserOffline?10 -QtGui.QIcon.ThemeIcon.WeatherClear?10 -QtGui.QIcon.ThemeIcon.WeatherClearNight?10 -QtGui.QIcon.ThemeIcon.WeatherFewClouds?10 -QtGui.QIcon.ThemeIcon.WeatherFewCloudsNight?10 -QtGui.QIcon.ThemeIcon.WeatherFog?10 -QtGui.QIcon.ThemeIcon.WeatherShowers?10 -QtGui.QIcon.ThemeIcon.WeatherSnow?10 -QtGui.QIcon.ThemeIcon.WeatherStorm?10 -QtGui.QIcon.State?10 -QtGui.QIcon.State.On?10 -QtGui.QIcon.State.Off?10 -QtGui.QIcon.Mode?10 -QtGui.QIcon.Mode.Normal?10 -QtGui.QIcon.Mode.Disabled?10 -QtGui.QIcon.Mode.Active?10 -QtGui.QIcon.Mode.Selected?10 -QtGui.QIcon?1() -QtGui.QIcon.__init__?1(self) -QtGui.QIcon?1(QPixmap) -QtGui.QIcon.__init__?1(self, QPixmap) -QtGui.QIcon?1(QIcon) -QtGui.QIcon.__init__?1(self, QIcon) -QtGui.QIcon?1(QString) -QtGui.QIcon.__init__?1(self, QString) -QtGui.QIcon?1(QIconEngine) -QtGui.QIcon.__init__?1(self, QIconEngine) -QtGui.QIcon?1(QVariant) -QtGui.QIcon.__init__?1(self, QVariant) -QtGui.QIcon.pixmap?4(QSize, float, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap -QtGui.QIcon.pixmap?4(QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap -QtGui.QIcon.pixmap?4(int, int, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap -QtGui.QIcon.pixmap?4(int, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap -QtGui.QIcon.actualSize?4(QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QSize -QtGui.QIcon.availableSizes?4(QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> unknown-type -QtGui.QIcon.paint?4(QPainter, QRect, unknown-type alignment=Qt.AlignCenter, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -QtGui.QIcon.paint?4(QPainter, int, int, int, int, unknown-type alignment=Qt.AlignCenter, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -QtGui.QIcon.isNull?4() -> bool -QtGui.QIcon.isDetached?4() -> bool -QtGui.QIcon.addPixmap?4(QPixmap, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -QtGui.QIcon.addFile?4(QString, QSize size=QSize(), QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -QtGui.QIcon.cacheKey?4() -> int -QtGui.QIcon.fromTheme?4(QString) -> QIcon -QtGui.QIcon.fromTheme?4(QString, QIcon) -> QIcon -QtGui.QIcon.fromTheme?4(QIcon.ThemeIcon) -> QIcon -QtGui.QIcon.fromTheme?4(QIcon.ThemeIcon, QIcon) -> QIcon -QtGui.QIcon.hasThemeIcon?4(QString) -> bool -QtGui.QIcon.hasThemeIcon?4(QIcon.ThemeIcon) -> bool -QtGui.QIcon.themeSearchPaths?4() -> QStringList -QtGui.QIcon.setThemeSearchPaths?4(QStringList) -QtGui.QIcon.themeName?4() -> QString -QtGui.QIcon.setThemeName?4(QString) -QtGui.QIcon.name?4() -> QString -QtGui.QIcon.swap?4(QIcon) -QtGui.QIcon.setIsMask?4(bool) -QtGui.QIcon.isMask?4() -> bool -QtGui.QIcon.fallbackSearchPaths?4() -> QStringList -QtGui.QIcon.setFallbackSearchPaths?4(QStringList) -QtGui.QIcon.fallbackThemeName?4() -> QString -QtGui.QIcon.setFallbackThemeName?4(QString) -QtGui.QIconEngine.IconEngineHook?10 -QtGui.QIconEngine.IconEngineHook.IsNullHook?10 -QtGui.QIconEngine.IconEngineHook.ScaledPixmapHook?10 -QtGui.QIconEngine?1() -QtGui.QIconEngine.__init__?1(self) -QtGui.QIconEngine?1(QIconEngine) -QtGui.QIconEngine.__init__?1(self, QIconEngine) -QtGui.QIconEngine.paint?4(QPainter, QRect, QIcon.Mode, QIcon.State) -QtGui.QIconEngine.actualSize?4(QSize, QIcon.Mode, QIcon.State) -> QSize -QtGui.QIconEngine.pixmap?4(QSize, QIcon.Mode, QIcon.State) -> QPixmap -QtGui.QIconEngine.addPixmap?4(QPixmap, QIcon.Mode, QIcon.State) -QtGui.QIconEngine.addFile?4(QString, QSize, QIcon.Mode, QIcon.State) -QtGui.QIconEngine.key?4() -> QString -QtGui.QIconEngine.clone?4() -> QIconEngine -QtGui.QIconEngine.read?4(QDataStream) -> bool -QtGui.QIconEngine.write?4(QDataStream) -> bool -QtGui.QIconEngine.availableSizes?4(QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> unknown-type -QtGui.QIconEngine.iconName?4() -> QString -QtGui.QIconEngine.isNull?4() -> bool -QtGui.QIconEngine.scaledPixmap?4(QSize, QIcon.Mode, QIcon.State, float) -> QPixmap -QtGui.QIconEngine.ScaledPixmapArgument.mode?7 -QtGui.QIconEngine.ScaledPixmapArgument.pixmap?7 -QtGui.QIconEngine.ScaledPixmapArgument.scale?7 -QtGui.QIconEngine.ScaledPixmapArgument.size?7 -QtGui.QIconEngine.ScaledPixmapArgument.state?7 -QtGui.QIconEngine.ScaledPixmapArgument?1() -QtGui.QIconEngine.ScaledPixmapArgument.__init__?1(self) -QtGui.QIconEngine.ScaledPixmapArgument?1(QIconEngine.ScaledPixmapArgument) -QtGui.QIconEngine.ScaledPixmapArgument.__init__?1(self, QIconEngine.ScaledPixmapArgument) -QtGui.QImage.Format?10 -QtGui.QImage.Format.Format_Invalid?10 -QtGui.QImage.Format.Format_Mono?10 -QtGui.QImage.Format.Format_MonoLSB?10 -QtGui.QImage.Format.Format_Indexed8?10 -QtGui.QImage.Format.Format_RGB32?10 -QtGui.QImage.Format.Format_ARGB32?10 -QtGui.QImage.Format.Format_ARGB32_Premultiplied?10 -QtGui.QImage.Format.Format_RGB16?10 -QtGui.QImage.Format.Format_ARGB8565_Premultiplied?10 -QtGui.QImage.Format.Format_RGB666?10 -QtGui.QImage.Format.Format_ARGB6666_Premultiplied?10 -QtGui.QImage.Format.Format_RGB555?10 -QtGui.QImage.Format.Format_ARGB8555_Premultiplied?10 -QtGui.QImage.Format.Format_RGB888?10 -QtGui.QImage.Format.Format_RGB444?10 -QtGui.QImage.Format.Format_ARGB4444_Premultiplied?10 -QtGui.QImage.Format.Format_RGBX8888?10 -QtGui.QImage.Format.Format_RGBA8888?10 -QtGui.QImage.Format.Format_RGBA8888_Premultiplied?10 -QtGui.QImage.Format.Format_BGR30?10 -QtGui.QImage.Format.Format_A2BGR30_Premultiplied?10 -QtGui.QImage.Format.Format_RGB30?10 -QtGui.QImage.Format.Format_A2RGB30_Premultiplied?10 -QtGui.QImage.Format.Format_Alpha8?10 -QtGui.QImage.Format.Format_Grayscale8?10 -QtGui.QImage.Format.Format_RGBX64?10 -QtGui.QImage.Format.Format_RGBA64?10 -QtGui.QImage.Format.Format_RGBA64_Premultiplied?10 -QtGui.QImage.Format.Format_Grayscale16?10 -QtGui.QImage.Format.Format_BGR888?10 -QtGui.QImage.Format.Format_RGBX16FPx4?10 -QtGui.QImage.Format.Format_RGBA16FPx4?10 -QtGui.QImage.Format.Format_RGBA16FPx4_Premultiplied?10 -QtGui.QImage.Format.Format_RGBX32FPx4?10 -QtGui.QImage.Format.Format_RGBA32FPx4?10 -QtGui.QImage.Format.Format_RGBA32FPx4_Premultiplied?10 -QtGui.QImage.InvertMode?10 -QtGui.QImage.InvertMode.InvertRgb?10 -QtGui.QImage.InvertMode.InvertRgba?10 -QtGui.QImage?1() -QtGui.QImage.__init__?1(self) -QtGui.QImage?1(QSize, QImage.Format) -QtGui.QImage.__init__?1(self, QSize, QImage.Format) -QtGui.QImage?1(int, int, QImage.Format) -QtGui.QImage.__init__?1(self, int, int, QImage.Format) -QtGui.QImage?1(bytes, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage.__init__?1(self, bytes, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage?1(bytes, int, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage.__init__?1(self, bytes, int, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage?1(PyQt6.sip.voidptr, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage.__init__?1(self, PyQt6.sip.voidptr, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage?1(PyQt6.sip.voidptr, int, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage.__init__?1(self, PyQt6.sip.voidptr, int, int, int, QImage.Format, Callable[..., None] cleanupFunction=None, Any cleanupInfo=None) -QtGui.QImage?1(List) -QtGui.QImage.__init__?1(self, List) -QtGui.QImage?1(QString, str format=None) -QtGui.QImage.__init__?1(self, QString, str format=None) -QtGui.QImage?1(QImage) -QtGui.QImage.__init__?1(self, QImage) -QtGui.QImage?1(QVariant) -QtGui.QImage.__init__?1(self, QVariant) -QtGui.QImage.isNull?4() -> bool -QtGui.QImage.copy?4(QRect rect=QRect()) -> QImage -QtGui.QImage.copy?4(int, int, int, int) -> QImage -QtGui.QImage.format?4() -> QImage.Format -QtGui.QImage.convertToFormat?4(QImage.Format, unknown-type flags=Qt.AutoColor) -> QImage -QtGui.QImage.convertToFormat?4(QImage.Format, unknown-type, unknown-type flags=Qt.AutoColor) -> QImage -QtGui.QImage.width?4() -> int -QtGui.QImage.height?4() -> int -QtGui.QImage.size?4() -> QSize -QtGui.QImage.rect?4() -> QRect -QtGui.QImage.depth?4() -> int -QtGui.QImage.color?4(int) -> int -QtGui.QImage.setColor?4(int, int) -QtGui.QImage.allGray?4() -> bool -QtGui.QImage.isGrayscale?4() -> bool -QtGui.QImage.bits?4() -> PyQt6.sip.voidptr -QtGui.QImage.constBits?4() -> PyQt6.sip.voidptr -QtGui.QImage.scanLine?4(int) -> PyQt6.sip.voidptr -QtGui.QImage.constScanLine?4(int) -> PyQt6.sip.voidptr -QtGui.QImage.bytesPerLine?4() -> int -QtGui.QImage.valid?4(QPoint) -> bool -QtGui.QImage.valid?4(int, int) -> bool -QtGui.QImage.pixelIndex?4(QPoint) -> int -QtGui.QImage.pixelIndex?4(int, int) -> int -QtGui.QImage.pixel?4(QPoint) -> int -QtGui.QImage.pixel?4(int, int) -> int -QtGui.QImage.setPixel?4(QPoint, int) -QtGui.QImage.setPixel?4(int, int, int) -QtGui.QImage.colorTable?4() -> unknown-type -QtGui.QImage.setColorTable?4(unknown-type) -QtGui.QImage.fill?4(int) -QtGui.QImage.fill?4(Qt.GlobalColor) -QtGui.QImage.fill?4(QColor) -QtGui.QImage.hasAlphaChannel?4() -> bool -QtGui.QImage.setAlphaChannel?4(QImage) -QtGui.QImage.createAlphaMask?4(unknown-type flags=Qt.AutoColor) -> QImage -QtGui.QImage.createHeuristicMask?4(bool clipTight=True) -> QImage -QtGui.QImage.scaled?4(int, int, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QImage -QtGui.QImage.scaled?4(QSize, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QImage -QtGui.QImage.scaledToWidth?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage -QtGui.QImage.scaledToHeight?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage -QtGui.QImage.mirrored?4(bool horizontal=False, bool vertical=True) -> QImage -QtGui.QImage.mirror?4(bool horizontal=False, bool vertical=True) -QtGui.QImage.rgbSwapped?4() -> QImage -QtGui.QImage.rgbSwap?4() -QtGui.QImage.invertPixels?4(QImage.InvertMode mode=QImage.InvertRgb) -QtGui.QImage.load?4(QIODevice, str) -> bool -QtGui.QImage.load?4(QString, str format=None) -> bool -QtGui.QImage.loadFromData?4(bytes, str format=None) -> bool -QtGui.QImage.loadFromData?4(QByteArray, str format=None) -> bool -QtGui.QImage.save?4(QString, str format=None, int quality=-1) -> bool -QtGui.QImage.save?4(QIODevice, str format=None, int quality=-1) -> bool -QtGui.QImage.fromData?4(bytes, str format=None) -> QImage -QtGui.QImage.fromData?4(QByteArray, str format=None) -> QImage -QtGui.QImage.paintEngine?4() -> QPaintEngine -QtGui.QImage.dotsPerMeterX?4() -> int -QtGui.QImage.dotsPerMeterY?4() -> int -QtGui.QImage.setDotsPerMeterX?4(int) -QtGui.QImage.setDotsPerMeterY?4(int) -QtGui.QImage.offset?4() -> QPoint -QtGui.QImage.setOffset?4(QPoint) -QtGui.QImage.textKeys?4() -> QStringList -QtGui.QImage.text?4(QString key='') -> QString -QtGui.QImage.setText?4(QString, QString) -QtGui.QImage.createMaskFromColor?4(int, Qt.MaskMode mode=Qt.MaskInColor) -> QImage -QtGui.QImage.transformed?4(QTransform, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage -QtGui.QImage.trueMatrix?4(QTransform, int, int) -> QTransform -QtGui.QImage.cacheKey?4() -> int -QtGui.QImage.colorCount?4() -> int -QtGui.QImage.setColorCount?4(int) -QtGui.QImage.bitPlaneCount?4() -> int -QtGui.QImage.swap?4(QImage) -QtGui.QImage.devicePixelRatio?4() -> float -QtGui.QImage.setDevicePixelRatio?4(float) -QtGui.QImage.pixelFormat?4() -> QPixelFormat -QtGui.QImage.toPixelFormat?4(QImage.Format) -> QPixelFormat -QtGui.QImage.toImageFormat?4(QPixelFormat) -> QImage.Format -QtGui.QImage.pixelColor?4(int, int) -> QColor -QtGui.QImage.pixelColor?4(QPoint) -> QColor -QtGui.QImage.setPixelColor?4(int, int, QColor) -QtGui.QImage.setPixelColor?4(QPoint, QColor) -QtGui.QImage.reinterpretAsFormat?4(QImage.Format) -> bool -QtGui.QImage.sizeInBytes?4() -> int -QtGui.QImage.convertedTo?4(QImage.Format, unknown-type flags=Qt.AutoColor) -> QImage -QtGui.QImage.convertTo?4(QImage.Format, unknown-type flags=Qt.AutoColor) -QtGui.QImage.colorSpace?4() -> QColorSpace -QtGui.QImage.setColorSpace?4(QColorSpace) -QtGui.QImage.convertedToColorSpace?4(QColorSpace) -> QImage -QtGui.QImage.convertToColorSpace?4(QColorSpace) -QtGui.QImage.applyColorTransform?4(QColorTransform) -QtGui.QImage.deviceIndependentSize?4() -> QSizeF -QtGui.QImage.colorTransformed?4(QColorTransform) -> QImage -QtGui.QImageIOHandler.Transformation?10 -QtGui.QImageIOHandler.Transformation.TransformationNone?10 -QtGui.QImageIOHandler.Transformation.TransformationMirror?10 -QtGui.QImageIOHandler.Transformation.TransformationFlip?10 -QtGui.QImageIOHandler.Transformation.TransformationRotate180?10 -QtGui.QImageIOHandler.Transformation.TransformationRotate90?10 -QtGui.QImageIOHandler.Transformation.TransformationMirrorAndRotate90?10 -QtGui.QImageIOHandler.Transformation.TransformationFlipAndRotate90?10 -QtGui.QImageIOHandler.Transformation.TransformationRotate270?10 -QtGui.QImageIOHandler.ImageOption?10 -QtGui.QImageIOHandler.ImageOption.Size?10 -QtGui.QImageIOHandler.ImageOption.ClipRect?10 -QtGui.QImageIOHandler.ImageOption.Description?10 -QtGui.QImageIOHandler.ImageOption.ScaledClipRect?10 -QtGui.QImageIOHandler.ImageOption.ScaledSize?10 -QtGui.QImageIOHandler.ImageOption.CompressionRatio?10 -QtGui.QImageIOHandler.ImageOption.Gamma?10 -QtGui.QImageIOHandler.ImageOption.Quality?10 -QtGui.QImageIOHandler.ImageOption.Name?10 -QtGui.QImageIOHandler.ImageOption.SubType?10 -QtGui.QImageIOHandler.ImageOption.IncrementalReading?10 -QtGui.QImageIOHandler.ImageOption.Endianness?10 -QtGui.QImageIOHandler.ImageOption.Animation?10 -QtGui.QImageIOHandler.ImageOption.BackgroundColor?10 -QtGui.QImageIOHandler.ImageOption.SupportedSubTypes?10 -QtGui.QImageIOHandler.ImageOption.OptimizedWrite?10 -QtGui.QImageIOHandler.ImageOption.ProgressiveScanWrite?10 -QtGui.QImageIOHandler.ImageOption.ImageTransformation?10 -QtGui.QImageIOHandler?1() -QtGui.QImageIOHandler.__init__?1(self) -QtGui.QImageIOHandler.setDevice?4(QIODevice) -QtGui.QImageIOHandler.device?4() -> QIODevice -QtGui.QImageIOHandler.setFormat?4(QByteArray) -QtGui.QImageIOHandler.format?4() -> QByteArray -QtGui.QImageIOHandler.canRead?4() -> bool -QtGui.QImageIOHandler.read?4(QImage) -> bool -QtGui.QImageIOHandler.write?4(QImage) -> bool -QtGui.QImageIOHandler.option?4(QImageIOHandler.ImageOption) -> QVariant -QtGui.QImageIOHandler.setOption?4(QImageIOHandler.ImageOption, QVariant) -QtGui.QImageIOHandler.supportsOption?4(QImageIOHandler.ImageOption) -> bool -QtGui.QImageIOHandler.jumpToNextImage?4() -> bool -QtGui.QImageIOHandler.jumpToImage?4(int) -> bool -QtGui.QImageIOHandler.loopCount?4() -> int -QtGui.QImageIOHandler.imageCount?4() -> int -QtGui.QImageIOHandler.nextImageDelay?4() -> int -QtGui.QImageIOHandler.currentImageNumber?4() -> int -QtGui.QImageIOHandler.currentImageRect?4() -> QRect -QtGui.QImageReader.ImageReaderError?10 -QtGui.QImageReader.ImageReaderError.UnknownError?10 -QtGui.QImageReader.ImageReaderError.FileNotFoundError?10 -QtGui.QImageReader.ImageReaderError.DeviceError?10 -QtGui.QImageReader.ImageReaderError.UnsupportedFormatError?10 -QtGui.QImageReader.ImageReaderError.InvalidDataError?10 -QtGui.QImageReader?1() -QtGui.QImageReader.__init__?1(self) -QtGui.QImageReader?1(QIODevice, QByteArray format=QByteArray()) -QtGui.QImageReader.__init__?1(self, QIODevice, QByteArray format=QByteArray()) -QtGui.QImageReader?1(QString, QByteArray format=QByteArray()) -QtGui.QImageReader.__init__?1(self, QString, QByteArray format=QByteArray()) -QtGui.QImageReader.setFormat?4(QByteArray) -QtGui.QImageReader.format?4() -> QByteArray -QtGui.QImageReader.setDevice?4(QIODevice) -QtGui.QImageReader.device?4() -> QIODevice -QtGui.QImageReader.setFileName?4(QString) -QtGui.QImageReader.fileName?4() -> QString -QtGui.QImageReader.size?4() -> QSize -QtGui.QImageReader.setClipRect?4(QRect) -QtGui.QImageReader.clipRect?4() -> QRect -QtGui.QImageReader.setScaledSize?4(QSize) -QtGui.QImageReader.scaledSize?4() -> QSize -QtGui.QImageReader.setScaledClipRect?4(QRect) -QtGui.QImageReader.scaledClipRect?4() -> QRect -QtGui.QImageReader.canRead?4() -> bool -QtGui.QImageReader.read?4() -> QImage -QtGui.QImageReader.read?4(QImage) -> bool -QtGui.QImageReader.jumpToNextImage?4() -> bool -QtGui.QImageReader.jumpToImage?4(int) -> bool -QtGui.QImageReader.loopCount?4() -> int -QtGui.QImageReader.imageCount?4() -> int -QtGui.QImageReader.nextImageDelay?4() -> int -QtGui.QImageReader.currentImageNumber?4() -> int -QtGui.QImageReader.currentImageRect?4() -> QRect -QtGui.QImageReader.error?4() -> QImageReader.ImageReaderError -QtGui.QImageReader.errorString?4() -> QString -QtGui.QImageReader.imageFormat?4(QString) -> QByteArray -QtGui.QImageReader.imageFormat?4(QIODevice) -> QByteArray -QtGui.QImageReader.supportedImageFormats?4() -> unknown-type -QtGui.QImageReader.textKeys?4() -> QStringList -QtGui.QImageReader.text?4(QString) -> QString -QtGui.QImageReader.setBackgroundColor?4(QColor) -QtGui.QImageReader.backgroundColor?4() -> QColor -QtGui.QImageReader.supportsAnimation?4() -> bool -QtGui.QImageReader.setQuality?4(int) -QtGui.QImageReader.quality?4() -> int -QtGui.QImageReader.supportsOption?4(QImageIOHandler.ImageOption) -> bool -QtGui.QImageReader.setAutoDetectImageFormat?4(bool) -QtGui.QImageReader.autoDetectImageFormat?4() -> bool -QtGui.QImageReader.imageFormat?4() -> QImage.Format -QtGui.QImageReader.setDecideFormatFromContent?4(bool) -QtGui.QImageReader.decideFormatFromContent?4() -> bool -QtGui.QImageReader.supportedMimeTypes?4() -> unknown-type -QtGui.QImageReader.subType?4() -> QByteArray -QtGui.QImageReader.supportedSubTypes?4() -> unknown-type -QtGui.QImageReader.transformation?4() -> unknown-type -QtGui.QImageReader.setAutoTransform?4(bool) -QtGui.QImageReader.autoTransform?4() -> bool -QtGui.QImageReader.imageFormatsForMimeType?4(QByteArray) -> unknown-type -QtGui.QImageReader.allocationLimit?4() -> int -QtGui.QImageReader.setAllocationLimit?4(int) -QtGui.QImageWriter.ImageWriterError?10 -QtGui.QImageWriter.ImageWriterError.UnknownError?10 -QtGui.QImageWriter.ImageWriterError.DeviceError?10 -QtGui.QImageWriter.ImageWriterError.UnsupportedFormatError?10 -QtGui.QImageWriter.ImageWriterError.InvalidImageError?10 -QtGui.QImageWriter?1() -QtGui.QImageWriter.__init__?1(self) -QtGui.QImageWriter?1(QIODevice, QByteArray) -QtGui.QImageWriter.__init__?1(self, QIODevice, QByteArray) -QtGui.QImageWriter?1(QString, QByteArray format=QByteArray()) -QtGui.QImageWriter.__init__?1(self, QString, QByteArray format=QByteArray()) -QtGui.QImageWriter.setFormat?4(QByteArray) -QtGui.QImageWriter.format?4() -> QByteArray -QtGui.QImageWriter.setDevice?4(QIODevice) -QtGui.QImageWriter.device?4() -> QIODevice -QtGui.QImageWriter.setFileName?4(QString) -QtGui.QImageWriter.fileName?4() -> QString -QtGui.QImageWriter.setQuality?4(int) -QtGui.QImageWriter.quality?4() -> int -QtGui.QImageWriter.canWrite?4() -> bool -QtGui.QImageWriter.write?4(QImage) -> bool -QtGui.QImageWriter.error?4() -> QImageWriter.ImageWriterError -QtGui.QImageWriter.errorString?4() -> QString -QtGui.QImageWriter.supportedImageFormats?4() -> unknown-type -QtGui.QImageWriter.setText?4(QString, QString) -QtGui.QImageWriter.supportsOption?4(QImageIOHandler.ImageOption) -> bool -QtGui.QImageWriter.setCompression?4(int) -QtGui.QImageWriter.compression?4() -> int -QtGui.QImageWriter.supportedMimeTypes?4() -> unknown-type -QtGui.QImageWriter.setSubType?4(QByteArray) -QtGui.QImageWriter.subType?4() -> QByteArray -QtGui.QImageWriter.supportedSubTypes?4() -> unknown-type -QtGui.QImageWriter.setOptimizedWrite?4(bool) -QtGui.QImageWriter.optimizedWrite?4() -> bool -QtGui.QImageWriter.setProgressiveScanWrite?4(bool) -QtGui.QImageWriter.progressiveScanWrite?4() -> bool -QtGui.QImageWriter.transformation?4() -> unknown-type -QtGui.QImageWriter.setTransformation?4(unknown-type) -QtGui.QImageWriter.imageFormatsForMimeType?4(QByteArray) -> unknown-type -QtGui.QInputDevice.Capability?10 -QtGui.QInputDevice.Capability.None_?10 -QtGui.QInputDevice.Capability.Position?10 -QtGui.QInputDevice.Capability.Area?10 -QtGui.QInputDevice.Capability.Pressure?10 -QtGui.QInputDevice.Capability.Velocity?10 -QtGui.QInputDevice.Capability.NormalizedPosition?10 -QtGui.QInputDevice.Capability.MouseEmulation?10 -QtGui.QInputDevice.Capability.PixelScroll?10 -QtGui.QInputDevice.Capability.Scroll?10 -QtGui.QInputDevice.Capability.Hover?10 -QtGui.QInputDevice.Capability.Rotation?10 -QtGui.QInputDevice.Capability.XTilt?10 -QtGui.QInputDevice.Capability.YTilt?10 -QtGui.QInputDevice.Capability.TangentialPressure?10 -QtGui.QInputDevice.Capability.ZPosition?10 -QtGui.QInputDevice.Capability.All?10 -QtGui.QInputDevice.DeviceType?10 -QtGui.QInputDevice.DeviceType.Unknown?10 -QtGui.QInputDevice.DeviceType.Mouse?10 -QtGui.QInputDevice.DeviceType.TouchScreen?10 -QtGui.QInputDevice.DeviceType.TouchPad?10 -QtGui.QInputDevice.DeviceType.Puck?10 -QtGui.QInputDevice.DeviceType.Stylus?10 -QtGui.QInputDevice.DeviceType.Airbrush?10 -QtGui.QInputDevice.DeviceType.Keyboard?10 -QtGui.QInputDevice.DeviceType.AllDevices?10 -QtGui.QInputDevice?1(QString, int, QInputDevice.DeviceType, QString seatName='', QObject parent=None) -QtGui.QInputDevice.__init__?1(self, QString, int, QInputDevice.DeviceType, QString seatName='', QObject parent=None) -QtGui.QInputDevice?1(QObject parent=None) -QtGui.QInputDevice.__init__?1(self, QObject parent=None) -QtGui.QInputDevice.name?4() -> QString -QtGui.QInputDevice.type?4() -> QInputDevice.DeviceType -QtGui.QInputDevice.capabilities?4() -> unknown-type -QtGui.QInputDevice.hasCapability?4(QInputDevice.Capability) -> bool -QtGui.QInputDevice.systemId?4() -> int -QtGui.QInputDevice.seatName?4() -> QString -QtGui.QInputDevice.availableVirtualGeometry?4() -> QRect -QtGui.QInputDevice.devices?4() -> unknown-type -QtGui.QInputDevice.primaryKeyboard?4(QString seatName='') -> QInputDevice -QtGui.QInputDevice.availableVirtualGeometryChanged?4(QRect) -QtGui.QInputDevice.seatNames?4() -> QStringList -QtGui.QInputMethod.Action?10 -QtGui.QInputMethod.Action.Click?10 -QtGui.QInputMethod.Action.ContextMenu?10 -QtGui.QInputMethod.inputItemTransform?4() -> QTransform -QtGui.QInputMethod.setInputItemTransform?4(QTransform) -QtGui.QInputMethod.cursorRectangle?4() -> QRectF -QtGui.QInputMethod.keyboardRectangle?4() -> QRectF -QtGui.QInputMethod.isVisible?4() -> bool -QtGui.QInputMethod.setVisible?4(bool) -QtGui.QInputMethod.isAnimating?4() -> bool -QtGui.QInputMethod.locale?4() -> QLocale -QtGui.QInputMethod.inputDirection?4() -> Qt.LayoutDirection -QtGui.QInputMethod.inputItemRectangle?4() -> QRectF -QtGui.QInputMethod.setInputItemRectangle?4(QRectF) -QtGui.QInputMethod.queryFocusObject?4(Qt.InputMethodQuery, QVariant) -> QVariant -QtGui.QInputMethod.show?4() -QtGui.QInputMethod.hide?4() -QtGui.QInputMethod.update?4(unknown-type) -QtGui.QInputMethod.reset?4() -QtGui.QInputMethod.commit?4() -QtGui.QInputMethod.invokeAction?4(QInputMethod.Action, int) -QtGui.QInputMethod.cursorRectangleChanged?4() -QtGui.QInputMethod.keyboardRectangleChanged?4() -QtGui.QInputMethod.visibleChanged?4() -QtGui.QInputMethod.animatingChanged?4() -QtGui.QInputMethod.localeChanged?4() -QtGui.QInputMethod.inputDirectionChanged?4(Qt.LayoutDirection) -QtGui.QInputMethod.anchorRectangle?4() -> QRectF -QtGui.QInputMethod.inputItemClipRectangle?4() -> QRectF -QtGui.QInputMethod.anchorRectangleChanged?4() -QtGui.QInputMethod.inputItemClipRectangleChanged?4() -QtGui.QKeySequence.StandardKey?10 -QtGui.QKeySequence.StandardKey.UnknownKey?10 -QtGui.QKeySequence.StandardKey.HelpContents?10 -QtGui.QKeySequence.StandardKey.WhatsThis?10 -QtGui.QKeySequence.StandardKey.Open?10 -QtGui.QKeySequence.StandardKey.Close?10 -QtGui.QKeySequence.StandardKey.Save?10 -QtGui.QKeySequence.StandardKey.New?10 -QtGui.QKeySequence.StandardKey.Delete?10 -QtGui.QKeySequence.StandardKey.Cut?10 -QtGui.QKeySequence.StandardKey.Copy?10 -QtGui.QKeySequence.StandardKey.Paste?10 -QtGui.QKeySequence.StandardKey.Undo?10 -QtGui.QKeySequence.StandardKey.Redo?10 -QtGui.QKeySequence.StandardKey.Back?10 -QtGui.QKeySequence.StandardKey.Forward?10 -QtGui.QKeySequence.StandardKey.Refresh?10 -QtGui.QKeySequence.StandardKey.ZoomIn?10 -QtGui.QKeySequence.StandardKey.ZoomOut?10 -QtGui.QKeySequence.StandardKey.Print?10 -QtGui.QKeySequence.StandardKey.AddTab?10 -QtGui.QKeySequence.StandardKey.NextChild?10 -QtGui.QKeySequence.StandardKey.PreviousChild?10 -QtGui.QKeySequence.StandardKey.Find?10 -QtGui.QKeySequence.StandardKey.FindNext?10 -QtGui.QKeySequence.StandardKey.FindPrevious?10 -QtGui.QKeySequence.StandardKey.Replace?10 -QtGui.QKeySequence.StandardKey.SelectAll?10 -QtGui.QKeySequence.StandardKey.Bold?10 -QtGui.QKeySequence.StandardKey.Italic?10 -QtGui.QKeySequence.StandardKey.Underline?10 -QtGui.QKeySequence.StandardKey.MoveToNextChar?10 -QtGui.QKeySequence.StandardKey.MoveToPreviousChar?10 -QtGui.QKeySequence.StandardKey.MoveToNextWord?10 -QtGui.QKeySequence.StandardKey.MoveToPreviousWord?10 -QtGui.QKeySequence.StandardKey.MoveToNextLine?10 -QtGui.QKeySequence.StandardKey.MoveToPreviousLine?10 -QtGui.QKeySequence.StandardKey.MoveToNextPage?10 -QtGui.QKeySequence.StandardKey.MoveToPreviousPage?10 -QtGui.QKeySequence.StandardKey.MoveToStartOfLine?10 -QtGui.QKeySequence.StandardKey.MoveToEndOfLine?10 -QtGui.QKeySequence.StandardKey.MoveToStartOfBlock?10 -QtGui.QKeySequence.StandardKey.MoveToEndOfBlock?10 -QtGui.QKeySequence.StandardKey.MoveToStartOfDocument?10 -QtGui.QKeySequence.StandardKey.MoveToEndOfDocument?10 -QtGui.QKeySequence.StandardKey.SelectNextChar?10 -QtGui.QKeySequence.StandardKey.SelectPreviousChar?10 -QtGui.QKeySequence.StandardKey.SelectNextWord?10 -QtGui.QKeySequence.StandardKey.SelectPreviousWord?10 -QtGui.QKeySequence.StandardKey.SelectNextLine?10 -QtGui.QKeySequence.StandardKey.SelectPreviousLine?10 -QtGui.QKeySequence.StandardKey.SelectNextPage?10 -QtGui.QKeySequence.StandardKey.SelectPreviousPage?10 -QtGui.QKeySequence.StandardKey.SelectStartOfLine?10 -QtGui.QKeySequence.StandardKey.SelectEndOfLine?10 -QtGui.QKeySequence.StandardKey.SelectStartOfBlock?10 -QtGui.QKeySequence.StandardKey.SelectEndOfBlock?10 -QtGui.QKeySequence.StandardKey.SelectStartOfDocument?10 -QtGui.QKeySequence.StandardKey.SelectEndOfDocument?10 -QtGui.QKeySequence.StandardKey.DeleteStartOfWord?10 -QtGui.QKeySequence.StandardKey.DeleteEndOfWord?10 -QtGui.QKeySequence.StandardKey.DeleteEndOfLine?10 -QtGui.QKeySequence.StandardKey.InsertParagraphSeparator?10 -QtGui.QKeySequence.StandardKey.InsertLineSeparator?10 -QtGui.QKeySequence.StandardKey.SaveAs?10 -QtGui.QKeySequence.StandardKey.Preferences?10 -QtGui.QKeySequence.StandardKey.Quit?10 -QtGui.QKeySequence.StandardKey.FullScreen?10 -QtGui.QKeySequence.StandardKey.Deselect?10 -QtGui.QKeySequence.StandardKey.DeleteCompleteLine?10 -QtGui.QKeySequence.StandardKey.Backspace?10 -QtGui.QKeySequence.StandardKey.Cancel?10 -QtGui.QKeySequence.SequenceMatch?10 -QtGui.QKeySequence.SequenceMatch.NoMatch?10 -QtGui.QKeySequence.SequenceMatch.PartialMatch?10 -QtGui.QKeySequence.SequenceMatch.ExactMatch?10 -QtGui.QKeySequence.SequenceFormat?10 -QtGui.QKeySequence.SequenceFormat.NativeText?10 -QtGui.QKeySequence.SequenceFormat.PortableText?10 -QtGui.QKeySequence?1() -QtGui.QKeySequence.__init__?1(self) -QtGui.QKeySequence?1(QKeySequence) -QtGui.QKeySequence.__init__?1(self, QKeySequence) -QtGui.QKeySequence?1(QKeySequence.StandardKey) -QtGui.QKeySequence.__init__?1(self, QKeySequence.StandardKey) -QtGui.QKeySequence?1(QString, QKeySequence.SequenceFormat format=QKeySequence.NativeText) -QtGui.QKeySequence.__init__?1(self, QString, QKeySequence.SequenceFormat format=QKeySequence.NativeText) -QtGui.QKeySequence?1(int, int key2=0, int key3=0, int key4=0) -QtGui.QKeySequence.__init__?1(self, int, int key2=0, int key3=0, int key4=0) -QtGui.QKeySequence?1(QKeyCombination, QKeyCombination key2=QKeyCombination.fromCombined(0), QKeyCombination key3=QKeyCombination.fromCombined(0), QKeyCombination key4=QKeyCombination.fromCombined(0)) -QtGui.QKeySequence.__init__?1(self, QKeyCombination, QKeyCombination key2=QKeyCombination.fromCombined(0), QKeyCombination key3=QKeyCombination.fromCombined(0), QKeyCombination key4=QKeyCombination.fromCombined(0)) -QtGui.QKeySequence?1(QVariant) -QtGui.QKeySequence.__init__?1(self, QVariant) -QtGui.QKeySequence.count?4() -> int -QtGui.QKeySequence.isEmpty?4() -> bool -QtGui.QKeySequence.matches?4(QKeySequence) -> QKeySequence.SequenceMatch -QtGui.QKeySequence.mnemonic?4(QString) -> QKeySequence -QtGui.QKeySequence.isDetached?4() -> bool -QtGui.QKeySequence.swap?4(QKeySequence) -QtGui.QKeySequence.toString?4(QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QString -QtGui.QKeySequence.fromString?4(QString, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QKeySequence -QtGui.QKeySequence.keyBindings?4(QKeySequence.StandardKey) -> unknown-type -QtGui.QKeySequence.listFromString?4(QString, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> unknown-type -QtGui.QKeySequence.listToString?4(unknown-type, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QString -QtGui.QMatrix4x4?1() -QtGui.QMatrix4x4.__init__?1(self) -QtGui.QMatrix4x4?1(Any) -QtGui.QMatrix4x4.__init__?1(self, Any) -QtGui.QMatrix4x4?1(float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float) -QtGui.QMatrix4x4.__init__?1(self, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float) -QtGui.QMatrix4x4?1(QTransform) -QtGui.QMatrix4x4.__init__?1(self, QTransform) -QtGui.QMatrix4x4?1(QMatrix4x4) -QtGui.QMatrix4x4.__init__?1(self, QMatrix4x4) -QtGui.QMatrix4x4.determinant?4() -> float -QtGui.QMatrix4x4.inverted?4() -> (QMatrix4x4, bool) -QtGui.QMatrix4x4.transposed?4() -> QMatrix4x4 -QtGui.QMatrix4x4.normalMatrix?4() -> QMatrix3x3 -QtGui.QMatrix4x4.scale?4(QVector3D) -QtGui.QMatrix4x4.scale?4(float, float) -QtGui.QMatrix4x4.scale?4(float, float, float) -QtGui.QMatrix4x4.scale?4(float) -QtGui.QMatrix4x4.translate?4(QVector3D) -QtGui.QMatrix4x4.translate?4(float, float) -QtGui.QMatrix4x4.translate?4(float, float, float) -QtGui.QMatrix4x4.rotate?4(float, QVector3D) -QtGui.QMatrix4x4.rotate?4(float, float, float, float z=0) -QtGui.QMatrix4x4.rotate?4(QQuaternion) -QtGui.QMatrix4x4.ortho?4(QRect) -QtGui.QMatrix4x4.ortho?4(QRectF) -QtGui.QMatrix4x4.ortho?4(float, float, float, float, float, float) -QtGui.QMatrix4x4.frustum?4(float, float, float, float, float, float) -QtGui.QMatrix4x4.perspective?4(float, float, float, float) -QtGui.QMatrix4x4.lookAt?4(QVector3D, QVector3D, QVector3D) -QtGui.QMatrix4x4.copyDataTo?4() -> List -QtGui.QMatrix4x4.toTransform?4() -> QTransform -QtGui.QMatrix4x4.toTransform?4(float) -> QTransform -QtGui.QMatrix4x4.mapRect?4(QRect) -> QRect -QtGui.QMatrix4x4.mapRect?4(QRectF) -> QRectF -QtGui.QMatrix4x4.data?4() -> List -QtGui.QMatrix4x4.optimize?4() -QtGui.QMatrix4x4.column?4(int) -> QVector4D -QtGui.QMatrix4x4.setColumn?4(int, QVector4D) -QtGui.QMatrix4x4.row?4(int) -> QVector4D -QtGui.QMatrix4x4.setRow?4(int, QVector4D) -QtGui.QMatrix4x4.isIdentity?4() -> bool -QtGui.QMatrix4x4.setToIdentity?4() -QtGui.QMatrix4x4.fill?4(float) -QtGui.QMatrix4x4.map?4(QPoint) -> QPoint -QtGui.QMatrix4x4.map?4(QPointF) -> QPointF -QtGui.QMatrix4x4.map?4(QVector3D) -> QVector3D -QtGui.QMatrix4x4.mapVector?4(QVector3D) -> QVector3D -QtGui.QMatrix4x4.map?4(QVector4D) -> QVector4D -QtGui.QMatrix4x4.viewport?4(float, float, float, float, float nearPlane=0, float farPlane=1) -QtGui.QMatrix4x4.viewport?4(QRectF) -QtGui.QMatrix4x4.isAffine?4() -> bool -QtGui.QMovie.CacheMode?10 -QtGui.QMovie.CacheMode.CacheNone?10 -QtGui.QMovie.CacheMode.CacheAll?10 -QtGui.QMovie.MovieState?10 -QtGui.QMovie.MovieState.NotRunning?10 -QtGui.QMovie.MovieState.Paused?10 -QtGui.QMovie.MovieState.Running?10 -QtGui.QMovie?1(QObject parent=None) -QtGui.QMovie.__init__?1(self, QObject parent=None) -QtGui.QMovie?1(QIODevice, QByteArray format=QByteArray(), QObject parent=None) -QtGui.QMovie.__init__?1(self, QIODevice, QByteArray format=QByteArray(), QObject parent=None) -QtGui.QMovie?1(QString, QByteArray format=QByteArray(), QObject parent=None) -QtGui.QMovie.__init__?1(self, QString, QByteArray format=QByteArray(), QObject parent=None) -QtGui.QMovie.supportedFormats?4() -> unknown-type -QtGui.QMovie.setDevice?4(QIODevice) -QtGui.QMovie.device?4() -> QIODevice -QtGui.QMovie.setFileName?4(QString) -QtGui.QMovie.fileName?4() -> QString -QtGui.QMovie.setFormat?4(QByteArray) -QtGui.QMovie.format?4() -> QByteArray -QtGui.QMovie.setBackgroundColor?4(QColor) -QtGui.QMovie.backgroundColor?4() -> QColor -QtGui.QMovie.state?4() -> QMovie.MovieState -QtGui.QMovie.frameRect?4() -> QRect -QtGui.QMovie.currentImage?4() -> QImage -QtGui.QMovie.currentPixmap?4() -> QPixmap -QtGui.QMovie.isValid?4() -> bool -QtGui.QMovie.jumpToFrame?4(int) -> bool -QtGui.QMovie.loopCount?4() -> int -QtGui.QMovie.frameCount?4() -> int -QtGui.QMovie.nextFrameDelay?4() -> int -QtGui.QMovie.currentFrameNumber?4() -> int -QtGui.QMovie.setSpeed?4(int) -QtGui.QMovie.speed?4() -> int -QtGui.QMovie.scaledSize?4() -> QSize -QtGui.QMovie.setScaledSize?4(QSize) -QtGui.QMovie.cacheMode?4() -> QMovie.CacheMode -QtGui.QMovie.setCacheMode?4(QMovie.CacheMode) -QtGui.QMovie.started?4() -QtGui.QMovie.resized?4(QSize) -QtGui.QMovie.updated?4(QRect) -QtGui.QMovie.stateChanged?4(QMovie.MovieState) -QtGui.QMovie.error?4(QImageReader.ImageReaderError) -QtGui.QMovie.finished?4() -QtGui.QMovie.frameChanged?4(int) -QtGui.QMovie.start?4() -QtGui.QMovie.jumpToNextFrame?4() -> bool -QtGui.QMovie.setPaused?4(bool) -QtGui.QMovie.stop?4() -QtGui.QMovie.lastError?4() -> QImageReader.ImageReaderError -QtGui.QMovie.lastErrorString?4() -> QString -QtGui.QSurface.SurfaceType?10 -QtGui.QSurface.SurfaceType.RasterSurface?10 -QtGui.QSurface.SurfaceType.OpenGLSurface?10 -QtGui.QSurface.SurfaceType.RasterGLSurface?10 -QtGui.QSurface.SurfaceType.OpenVGSurface?10 -QtGui.QSurface.SurfaceType.VulkanSurface?10 -QtGui.QSurface.SurfaceType.MetalSurface?10 -QtGui.QSurface.SurfaceType.Direct3DSurface?10 -QtGui.QSurface.SurfaceClass?10 -QtGui.QSurface.SurfaceClass.Window?10 -QtGui.QSurface.SurfaceClass.Offscreen?10 -QtGui.QSurface?1(QSurface.SurfaceClass) -QtGui.QSurface.__init__?1(self, QSurface.SurfaceClass) -QtGui.QSurface?1(QSurface) -QtGui.QSurface.__init__?1(self, QSurface) -QtGui.QSurface.surfaceClass?4() -> QSurface.SurfaceClass -QtGui.QSurface.format?4() -> QSurfaceFormat -QtGui.QSurface.surfaceType?4() -> QSurface.SurfaceType -QtGui.QSurface.size?4() -> QSize -QtGui.QSurface.supportsOpenGL?4() -> bool -QtGui.QOffscreenSurface?1(QScreen screen=None, QObject parent=None) -QtGui.QOffscreenSurface.__init__?1(self, QScreen screen=None, QObject parent=None) -QtGui.QOffscreenSurface.surfaceType?4() -> QSurface.SurfaceType -QtGui.QOffscreenSurface.create?4() -QtGui.QOffscreenSurface.destroy?4() -QtGui.QOffscreenSurface.isValid?4() -> bool -QtGui.QOffscreenSurface.setFormat?4(QSurfaceFormat) -QtGui.QOffscreenSurface.format?4() -> QSurfaceFormat -QtGui.QOffscreenSurface.requestedFormat?4() -> QSurfaceFormat -QtGui.QOffscreenSurface.size?4() -> QSize -QtGui.QOffscreenSurface.screen?4() -> QScreen -QtGui.QOffscreenSurface.setScreen?4(QScreen) -QtGui.QOffscreenSurface.screenChanged?4(QScreen) -QtGui.QOpenGLContextGroup.shares?4() -> unknown-type -QtGui.QOpenGLContextGroup.currentContextGroup?4() -> QOpenGLContextGroup -QtGui.QOpenGLContext.OpenGLModuleType?10 -QtGui.QOpenGLContext.OpenGLModuleType.LibGL?10 -QtGui.QOpenGLContext.OpenGLModuleType.LibGLES?10 -QtGui.QOpenGLContext?1(QObject parent=None) -QtGui.QOpenGLContext.__init__?1(self, QObject parent=None) -QtGui.QOpenGLContext.setFormat?4(QSurfaceFormat) -QtGui.QOpenGLContext.setShareContext?4(QOpenGLContext) -QtGui.QOpenGLContext.setScreen?4(QScreen) -QtGui.QOpenGLContext.create?4() -> bool -QtGui.QOpenGLContext.isValid?4() -> bool -QtGui.QOpenGLContext.format?4() -> QSurfaceFormat -QtGui.QOpenGLContext.shareContext?4() -> QOpenGLContext -QtGui.QOpenGLContext.shareGroup?4() -> QOpenGLContextGroup -QtGui.QOpenGLContext.screen?4() -> QScreen -QtGui.QOpenGLContext.defaultFramebufferObject?4() -> int -QtGui.QOpenGLContext.makeCurrent?4(QSurface) -> bool -QtGui.QOpenGLContext.doneCurrent?4() -QtGui.QOpenGLContext.swapBuffers?4(QSurface) -QtGui.QOpenGLContext.getProcAddress?4(QByteArray) -> PyQt6.sip.voidptr -QtGui.QOpenGLContext.surface?4() -> QSurface -QtGui.QOpenGLContext.currentContext?4() -> QOpenGLContext -QtGui.QOpenGLContext.areSharing?4(QOpenGLContext, QOpenGLContext) -> bool -QtGui.QOpenGLContext.extensions?4() -> unknown-type -QtGui.QOpenGLContext.hasExtension?4(QByteArray) -> bool -QtGui.QOpenGLContext.aboutToBeDestroyed?4() -QtGui.QOpenGLContext.openGLModuleType?4() -> QOpenGLContext.OpenGLModuleType -QtGui.QOpenGLContext.isOpenGLES?4() -> bool -QtGui.QOpenGLContext.supportsThreadedOpenGL?4() -> bool -QtGui.QOpenGLContext.globalShareContext?4() -> QOpenGLContext -QtGui.QPagedPaintDevice.PdfVersion?10 -QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_1_4?10 -QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_A1b?10 -QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_1_6?10 -QtGui.QPagedPaintDevice.newPage?4() -> bool -QtGui.QPagedPaintDevice.setPageSize?4(QPageSize) -> bool -QtGui.QPagedPaintDevice.setPageLayout?4(QPageLayout) -> bool -QtGui.QPagedPaintDevice.pageLayout?4() -> QPageLayout -QtGui.QPagedPaintDevice.setPageOrientation?4(QPageLayout.Orientation) -> bool -QtGui.QPagedPaintDevice.setPageMargins?4(QMarginsF, QPageLayout.Unit units=QPageLayout.Millimeter) -> bool -QtGui.QPagedPaintDevice.setPageRanges?4(QPageRanges) -QtGui.QPagedPaintDevice.pageRanges?4() -> QPageRanges -QtGui.QPageLayout.Mode?10 -QtGui.QPageLayout.Mode.StandardMode?10 -QtGui.QPageLayout.Mode.FullPageMode?10 -QtGui.QPageLayout.Orientation?10 -QtGui.QPageLayout.Orientation.Portrait?10 -QtGui.QPageLayout.Orientation.Landscape?10 -QtGui.QPageLayout.Unit?10 -QtGui.QPageLayout.Unit.Millimeter?10 -QtGui.QPageLayout.Unit.Point?10 -QtGui.QPageLayout.Unit.Inch?10 -QtGui.QPageLayout.Unit.Pica?10 -QtGui.QPageLayout.Unit.Didot?10 -QtGui.QPageLayout.Unit.Cicero?10 -QtGui.QPageLayout?1() -QtGui.QPageLayout.__init__?1(self) -QtGui.QPageLayout?1(QPageSize, QPageLayout.Orientation, QMarginsF, QPageLayout.Unit units=QPageLayout.Point, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) -QtGui.QPageLayout.__init__?1(self, QPageSize, QPageLayout.Orientation, QMarginsF, QPageLayout.Unit units=QPageLayout.Point, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) -QtGui.QPageLayout?1(QPageLayout) -QtGui.QPageLayout.__init__?1(self, QPageLayout) -QtGui.QPageLayout.swap?4(QPageLayout) -QtGui.QPageLayout.isEquivalentTo?4(QPageLayout) -> bool -QtGui.QPageLayout.isValid?4() -> bool -QtGui.QPageLayout.setMode?4(QPageLayout.Mode) -QtGui.QPageLayout.mode?4() -> QPageLayout.Mode -QtGui.QPageLayout.setPageSize?4(QPageSize, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) -QtGui.QPageLayout.pageSize?4() -> QPageSize -QtGui.QPageLayout.setOrientation?4(QPageLayout.Orientation) -QtGui.QPageLayout.orientation?4() -> QPageLayout.Orientation -QtGui.QPageLayout.setUnits?4(QPageLayout.Unit) -QtGui.QPageLayout.units?4() -> QPageLayout.Unit -QtGui.QPageLayout.setMargins?4(QMarginsF) -> bool -QtGui.QPageLayout.setLeftMargin?4(float) -> bool -QtGui.QPageLayout.setRightMargin?4(float) -> bool -QtGui.QPageLayout.setTopMargin?4(float) -> bool -QtGui.QPageLayout.setBottomMargin?4(float) -> bool -QtGui.QPageLayout.margins?4() -> QMarginsF -QtGui.QPageLayout.margins?4(QPageLayout.Unit) -> QMarginsF -QtGui.QPageLayout.marginsPoints?4() -> QMargins -QtGui.QPageLayout.marginsPixels?4(int) -> QMargins -QtGui.QPageLayout.setMinimumMargins?4(QMarginsF) -QtGui.QPageLayout.minimumMargins?4() -> QMarginsF -QtGui.QPageLayout.maximumMargins?4() -> QMarginsF -QtGui.QPageLayout.fullRect?4() -> QRectF -QtGui.QPageLayout.fullRect?4(QPageLayout.Unit) -> QRectF -QtGui.QPageLayout.fullRectPoints?4() -> QRect -QtGui.QPageLayout.fullRectPixels?4(int) -> QRect -QtGui.QPageLayout.paintRect?4() -> QRectF -QtGui.QPageLayout.paintRect?4(QPageLayout.Unit) -> QRectF -QtGui.QPageLayout.paintRectPoints?4() -> QRect -QtGui.QPageLayout.paintRectPixels?4(int) -> QRect -QtGui.QPageRanges?1() -QtGui.QPageRanges.__init__?1(self) -QtGui.QPageRanges?1(QPageRanges) -QtGui.QPageRanges.__init__?1(self, QPageRanges) -QtGui.QPageRanges.swap?4(QPageRanges) -QtGui.QPageRanges.addPage?4(int) -QtGui.QPageRanges.addRange?4(int, int) -QtGui.QPageRanges.toRangeList?4() -> unknown-type -QtGui.QPageRanges.clear?4() -QtGui.QPageRanges.toString?4() -> QString -QtGui.QPageRanges.fromString?4(QString) -> QPageRanges -QtGui.QPageRanges.contains?4(int) -> bool -QtGui.QPageRanges.isEmpty?4() -> bool -QtGui.QPageRanges.firstPage?4() -> int -QtGui.QPageRanges.lastPage?4() -> int -QtGui.QPageRanges.Range.from_?7 -QtGui.QPageRanges.Range.to?7 -QtGui.QPageRanges.Range?1() -QtGui.QPageRanges.Range.__init__?1(self) -QtGui.QPageRanges.Range?1(QPageRanges.Range) -QtGui.QPageRanges.Range.__init__?1(self, QPageRanges.Range) -QtGui.QPageRanges.Range.contains?4(int) -> bool -QtGui.QPageSize.SizeMatchPolicy?10 -QtGui.QPageSize.SizeMatchPolicy.FuzzyMatch?10 -QtGui.QPageSize.SizeMatchPolicy.FuzzyOrientationMatch?10 -QtGui.QPageSize.SizeMatchPolicy.ExactMatch?10 -QtGui.QPageSize.Unit?10 -QtGui.QPageSize.Unit.Millimeter?10 -QtGui.QPageSize.Unit.Point?10 -QtGui.QPageSize.Unit.Inch?10 -QtGui.QPageSize.Unit.Pica?10 -QtGui.QPageSize.Unit.Didot?10 -QtGui.QPageSize.Unit.Cicero?10 -QtGui.QPageSize.PageSizeId?10 -QtGui.QPageSize.PageSizeId.A4?10 -QtGui.QPageSize.PageSizeId.B5?10 -QtGui.QPageSize.PageSizeId.Letter?10 -QtGui.QPageSize.PageSizeId.Legal?10 -QtGui.QPageSize.PageSizeId.Executive?10 -QtGui.QPageSize.PageSizeId.A0?10 -QtGui.QPageSize.PageSizeId.A1?10 -QtGui.QPageSize.PageSizeId.A2?10 -QtGui.QPageSize.PageSizeId.A3?10 -QtGui.QPageSize.PageSizeId.A5?10 -QtGui.QPageSize.PageSizeId.A6?10 -QtGui.QPageSize.PageSizeId.A7?10 -QtGui.QPageSize.PageSizeId.A8?10 -QtGui.QPageSize.PageSizeId.A9?10 -QtGui.QPageSize.PageSizeId.B0?10 -QtGui.QPageSize.PageSizeId.B1?10 -QtGui.QPageSize.PageSizeId.B10?10 -QtGui.QPageSize.PageSizeId.B2?10 -QtGui.QPageSize.PageSizeId.B3?10 -QtGui.QPageSize.PageSizeId.B4?10 -QtGui.QPageSize.PageSizeId.B6?10 -QtGui.QPageSize.PageSizeId.B7?10 -QtGui.QPageSize.PageSizeId.B8?10 -QtGui.QPageSize.PageSizeId.B9?10 -QtGui.QPageSize.PageSizeId.C5E?10 -QtGui.QPageSize.PageSizeId.Comm10E?10 -QtGui.QPageSize.PageSizeId.DLE?10 -QtGui.QPageSize.PageSizeId.Folio?10 -QtGui.QPageSize.PageSizeId.Ledger?10 -QtGui.QPageSize.PageSizeId.Tabloid?10 -QtGui.QPageSize.PageSizeId.Custom?10 -QtGui.QPageSize.PageSizeId.A10?10 -QtGui.QPageSize.PageSizeId.A3Extra?10 -QtGui.QPageSize.PageSizeId.A4Extra?10 -QtGui.QPageSize.PageSizeId.A4Plus?10 -QtGui.QPageSize.PageSizeId.A4Small?10 -QtGui.QPageSize.PageSizeId.A5Extra?10 -QtGui.QPageSize.PageSizeId.B5Extra?10 -QtGui.QPageSize.PageSizeId.JisB0?10 -QtGui.QPageSize.PageSizeId.JisB1?10 -QtGui.QPageSize.PageSizeId.JisB2?10 -QtGui.QPageSize.PageSizeId.JisB3?10 -QtGui.QPageSize.PageSizeId.JisB4?10 -QtGui.QPageSize.PageSizeId.JisB5?10 -QtGui.QPageSize.PageSizeId.JisB6?10 -QtGui.QPageSize.PageSizeId.JisB7?10 -QtGui.QPageSize.PageSizeId.JisB8?10 -QtGui.QPageSize.PageSizeId.JisB9?10 -QtGui.QPageSize.PageSizeId.JisB10?10 -QtGui.QPageSize.PageSizeId.AnsiC?10 -QtGui.QPageSize.PageSizeId.AnsiD?10 -QtGui.QPageSize.PageSizeId.AnsiE?10 -QtGui.QPageSize.PageSizeId.LegalExtra?10 -QtGui.QPageSize.PageSizeId.LetterExtra?10 -QtGui.QPageSize.PageSizeId.LetterPlus?10 -QtGui.QPageSize.PageSizeId.LetterSmall?10 -QtGui.QPageSize.PageSizeId.TabloidExtra?10 -QtGui.QPageSize.PageSizeId.ArchA?10 -QtGui.QPageSize.PageSizeId.ArchB?10 -QtGui.QPageSize.PageSizeId.ArchC?10 -QtGui.QPageSize.PageSizeId.ArchD?10 -QtGui.QPageSize.PageSizeId.ArchE?10 -QtGui.QPageSize.PageSizeId.Imperial7x9?10 -QtGui.QPageSize.PageSizeId.Imperial8x10?10 -QtGui.QPageSize.PageSizeId.Imperial9x11?10 -QtGui.QPageSize.PageSizeId.Imperial9x12?10 -QtGui.QPageSize.PageSizeId.Imperial10x11?10 -QtGui.QPageSize.PageSizeId.Imperial10x13?10 -QtGui.QPageSize.PageSizeId.Imperial10x14?10 -QtGui.QPageSize.PageSizeId.Imperial12x11?10 -QtGui.QPageSize.PageSizeId.Imperial15x11?10 -QtGui.QPageSize.PageSizeId.ExecutiveStandard?10 -QtGui.QPageSize.PageSizeId.Note?10 -QtGui.QPageSize.PageSizeId.Quarto?10 -QtGui.QPageSize.PageSizeId.Statement?10 -QtGui.QPageSize.PageSizeId.SuperA?10 -QtGui.QPageSize.PageSizeId.SuperB?10 -QtGui.QPageSize.PageSizeId.Postcard?10 -QtGui.QPageSize.PageSizeId.DoublePostcard?10 -QtGui.QPageSize.PageSizeId.Prc16K?10 -QtGui.QPageSize.PageSizeId.Prc32K?10 -QtGui.QPageSize.PageSizeId.Prc32KBig?10 -QtGui.QPageSize.PageSizeId.FanFoldUS?10 -QtGui.QPageSize.PageSizeId.FanFoldGerman?10 -QtGui.QPageSize.PageSizeId.FanFoldGermanLegal?10 -QtGui.QPageSize.PageSizeId.EnvelopeB4?10 -QtGui.QPageSize.PageSizeId.EnvelopeB5?10 -QtGui.QPageSize.PageSizeId.EnvelopeB6?10 -QtGui.QPageSize.PageSizeId.EnvelopeC0?10 -QtGui.QPageSize.PageSizeId.EnvelopeC1?10 -QtGui.QPageSize.PageSizeId.EnvelopeC2?10 -QtGui.QPageSize.PageSizeId.EnvelopeC3?10 -QtGui.QPageSize.PageSizeId.EnvelopeC4?10 -QtGui.QPageSize.PageSizeId.EnvelopeC6?10 -QtGui.QPageSize.PageSizeId.EnvelopeC65?10 -QtGui.QPageSize.PageSizeId.EnvelopeC7?10 -QtGui.QPageSize.PageSizeId.Envelope9?10 -QtGui.QPageSize.PageSizeId.Envelope11?10 -QtGui.QPageSize.PageSizeId.Envelope12?10 -QtGui.QPageSize.PageSizeId.Envelope14?10 -QtGui.QPageSize.PageSizeId.EnvelopeMonarch?10 -QtGui.QPageSize.PageSizeId.EnvelopePersonal?10 -QtGui.QPageSize.PageSizeId.EnvelopeChou3?10 -QtGui.QPageSize.PageSizeId.EnvelopeChou4?10 -QtGui.QPageSize.PageSizeId.EnvelopeInvite?10 -QtGui.QPageSize.PageSizeId.EnvelopeItalian?10 -QtGui.QPageSize.PageSizeId.EnvelopeKaku2?10 -QtGui.QPageSize.PageSizeId.EnvelopeKaku3?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc1?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc2?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc3?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc4?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc5?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc6?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc7?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc8?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc9?10 -QtGui.QPageSize.PageSizeId.EnvelopePrc10?10 -QtGui.QPageSize.PageSizeId.EnvelopeYou4?10 -QtGui.QPageSize.PageSizeId.AnsiA?10 -QtGui.QPageSize.PageSizeId.AnsiB?10 -QtGui.QPageSize.PageSizeId.EnvelopeC5?10 -QtGui.QPageSize.PageSizeId.EnvelopeDL?10 -QtGui.QPageSize.PageSizeId.Envelope10?10 -QtGui.QPageSize.PageSizeId.LastPageSize?10 -QtGui.QPageSize?1() -QtGui.QPageSize.__init__?1(self) -QtGui.QPageSize?1(QPageSize.PageSizeId) -QtGui.QPageSize.__init__?1(self, QPageSize.PageSizeId) -QtGui.QPageSize?1(QSize, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -QtGui.QPageSize.__init__?1(self, QSize, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -QtGui.QPageSize?1(QSizeF, QPageSize.Unit, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -QtGui.QPageSize.__init__?1(self, QSizeF, QPageSize.Unit, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -QtGui.QPageSize?1(QPageSize) -QtGui.QPageSize.__init__?1(self, QPageSize) -QtGui.QPageSize.swap?4(QPageSize) -QtGui.QPageSize.isEquivalentTo?4(QPageSize) -> bool -QtGui.QPageSize.isValid?4() -> bool -QtGui.QPageSize.key?4() -> QString -QtGui.QPageSize.name?4() -> QString -QtGui.QPageSize.id?4() -> QPageSize.PageSizeId -QtGui.QPageSize.windowsId?4() -> int -QtGui.QPageSize.definitionSize?4() -> QSizeF -QtGui.QPageSize.definitionUnits?4() -> QPageSize.Unit -QtGui.QPageSize.size?4(QPageSize.Unit) -> QSizeF -QtGui.QPageSize.sizePoints?4() -> QSize -QtGui.QPageSize.sizePixels?4(int) -> QSize -QtGui.QPageSize.rect?4(QPageSize.Unit) -> QRectF -QtGui.QPageSize.rectPoints?4() -> QRect -QtGui.QPageSize.rectPixels?4(int) -> QRect -QtGui.QPageSize.key?4(QPageSize.PageSizeId) -> QString -QtGui.QPageSize.name?4(QPageSize.PageSizeId) -> QString -QtGui.QPageSize.id?4(QSize, QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -> QPageSize.PageSizeId -QtGui.QPageSize.id?4(QSizeF, QPageSize.Unit, QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -> QPageSize.PageSizeId -QtGui.QPageSize.id?4(int) -> QPageSize.PageSizeId -QtGui.QPageSize.windowsId?4(QPageSize.PageSizeId) -> int -QtGui.QPageSize.definitionSize?4(QPageSize.PageSizeId) -> QSizeF -QtGui.QPageSize.definitionUnits?4(QPageSize.PageSizeId) -> QPageSize.Unit -QtGui.QPageSize.size?4(QPageSize.PageSizeId, QPageSize.Unit) -> QSizeF -QtGui.QPageSize.sizePoints?4(QPageSize.PageSizeId) -> QSize -QtGui.QPageSize.sizePixels?4(QPageSize.PageSizeId, int) -> QSize -QtGui.QWindow.Visibility?10 -QtGui.QWindow.Visibility.Hidden?10 -QtGui.QWindow.Visibility.AutomaticVisibility?10 -QtGui.QWindow.Visibility.Windowed?10 -QtGui.QWindow.Visibility.Minimized?10 -QtGui.QWindow.Visibility.Maximized?10 -QtGui.QWindow.Visibility.FullScreen?10 -QtGui.QWindow.AncestorMode?10 -QtGui.QWindow.AncestorMode.ExcludeTransients?10 -QtGui.QWindow.AncestorMode.IncludeTransients?10 -QtGui.QWindow?1(QScreen screen=None) -QtGui.QWindow.__init__?1(self, QScreen screen=None) -QtGui.QWindow?1(QWindow) -QtGui.QWindow.__init__?1(self, QWindow) -QtGui.QWindow.setSurfaceType?4(QSurface.SurfaceType) -QtGui.QWindow.surfaceType?4() -> QSurface.SurfaceType -QtGui.QWindow.isVisible?4() -> bool -QtGui.QWindow.create?4() -QtGui.QWindow.winId?4() -> quintptr -QtGui.QWindow.parent?4(QWindow.AncestorMode mode=QWindow.ExcludeTransients) -> QWindow -QtGui.QWindow.setParent?4(QWindow) -QtGui.QWindow.isTopLevel?4() -> bool -QtGui.QWindow.isModal?4() -> bool -QtGui.QWindow.modality?4() -> Qt.WindowModality -QtGui.QWindow.setModality?4(Qt.WindowModality) -QtGui.QWindow.setFormat?4(QSurfaceFormat) -QtGui.QWindow.format?4() -> QSurfaceFormat -QtGui.QWindow.requestedFormat?4() -> QSurfaceFormat -QtGui.QWindow.setFlags?4(unknown-type) -QtGui.QWindow.flags?4() -> unknown-type -QtGui.QWindow.type?4() -> Qt.WindowType -QtGui.QWindow.title?4() -> QString -QtGui.QWindow.setOpacity?4(float) -QtGui.QWindow.requestActivate?4() -QtGui.QWindow.isActive?4() -> bool -QtGui.QWindow.reportContentOrientationChange?4(Qt.ScreenOrientation) -QtGui.QWindow.contentOrientation?4() -> Qt.ScreenOrientation -QtGui.QWindow.devicePixelRatio?4() -> float -QtGui.QWindow.windowState?4() -> Qt.WindowState -QtGui.QWindow.setWindowState?4(Qt.WindowState) -QtGui.QWindow.setTransientParent?4(QWindow) -QtGui.QWindow.transientParent?4() -> QWindow -QtGui.QWindow.isAncestorOf?4(QWindow, QWindow.AncestorMode mode=QWindow.IncludeTransients) -> bool -QtGui.QWindow.isExposed?4() -> bool -QtGui.QWindow.minimumWidth?4() -> int -QtGui.QWindow.minimumHeight?4() -> int -QtGui.QWindow.maximumWidth?4() -> int -QtGui.QWindow.maximumHeight?4() -> int -QtGui.QWindow.minimumSize?4() -> QSize -QtGui.QWindow.maximumSize?4() -> QSize -QtGui.QWindow.baseSize?4() -> QSize -QtGui.QWindow.sizeIncrement?4() -> QSize -QtGui.QWindow.setMinimumSize?4(QSize) -QtGui.QWindow.setMaximumSize?4(QSize) -QtGui.QWindow.setBaseSize?4(QSize) -QtGui.QWindow.setSizeIncrement?4(QSize) -QtGui.QWindow.setGeometry?4(int, int, int, int) -QtGui.QWindow.setGeometry?4(QRect) -QtGui.QWindow.geometry?4() -> QRect -QtGui.QWindow.frameMargins?4() -> QMargins -QtGui.QWindow.frameGeometry?4() -> QRect -QtGui.QWindow.framePosition?4() -> QPoint -QtGui.QWindow.setFramePosition?4(QPoint) -QtGui.QWindow.width?4() -> int -QtGui.QWindow.height?4() -> int -QtGui.QWindow.x?4() -> int -QtGui.QWindow.y?4() -> int -QtGui.QWindow.size?4() -> QSize -QtGui.QWindow.position?4() -> QPoint -QtGui.QWindow.setPosition?4(QPoint) -QtGui.QWindow.setPosition?4(int, int) -QtGui.QWindow.resize?4(QSize) -QtGui.QWindow.resize?4(int, int) -QtGui.QWindow.setFilePath?4(QString) -QtGui.QWindow.filePath?4() -> QString -QtGui.QWindow.setIcon?4(QIcon) -QtGui.QWindow.icon?4() -> QIcon -QtGui.QWindow.destroy?4() -QtGui.QWindow.setKeyboardGrabEnabled?4(bool) -> bool -QtGui.QWindow.setMouseGrabEnabled?4(bool) -> bool -QtGui.QWindow.screen?4() -> QScreen -QtGui.QWindow.setScreen?4(QScreen) -QtGui.QWindow.focusObject?4() -> QObject -QtGui.QWindow.mapToGlobal?4(QPoint) -> QPoint -QtGui.QWindow.mapToGlobal?4(QPointF) -> QPointF -QtGui.QWindow.mapFromGlobal?4(QPoint) -> QPoint -QtGui.QWindow.mapFromGlobal?4(QPointF) -> QPointF -QtGui.QWindow.cursor?4() -> QCursor -QtGui.QWindow.setCursor?4(QCursor) -QtGui.QWindow.unsetCursor?4() -QtGui.QWindow.setVisible?4(bool) -QtGui.QWindow.show?4() -QtGui.QWindow.hide?4() -QtGui.QWindow.showMinimized?4() -QtGui.QWindow.showMaximized?4() -QtGui.QWindow.showFullScreen?4() -QtGui.QWindow.showNormal?4() -QtGui.QWindow.close?4() -> bool -QtGui.QWindow.raise_?4() -QtGui.QWindow.lower?4() -QtGui.QWindow.setTitle?4(QString) -QtGui.QWindow.setX?4(int) -QtGui.QWindow.setY?4(int) -QtGui.QWindow.setWidth?4(int) -QtGui.QWindow.setHeight?4(int) -QtGui.QWindow.setMinimumWidth?4(int) -QtGui.QWindow.setMinimumHeight?4(int) -QtGui.QWindow.setMaximumWidth?4(int) -QtGui.QWindow.setMaximumHeight?4(int) -QtGui.QWindow.alert?4(int) -QtGui.QWindow.requestUpdate?4() -QtGui.QWindow.screenChanged?4(QScreen) -QtGui.QWindow.modalityChanged?4(Qt.WindowModality) -QtGui.QWindow.windowStateChanged?4(Qt.WindowState) -QtGui.QWindow.xChanged?4(int) -QtGui.QWindow.yChanged?4(int) -QtGui.QWindow.widthChanged?4(int) -QtGui.QWindow.heightChanged?4(int) -QtGui.QWindow.minimumWidthChanged?4(int) -QtGui.QWindow.minimumHeightChanged?4(int) -QtGui.QWindow.maximumWidthChanged?4(int) -QtGui.QWindow.maximumHeightChanged?4(int) -QtGui.QWindow.visibleChanged?4(bool) -QtGui.QWindow.contentOrientationChanged?4(Qt.ScreenOrientation) -QtGui.QWindow.focusObjectChanged?4(QObject) -QtGui.QWindow.windowTitleChanged?4(QString) -QtGui.QWindow.exposeEvent?4(QExposeEvent) -QtGui.QWindow.resizeEvent?4(QResizeEvent) -QtGui.QWindow.moveEvent?4(QMoveEvent) -QtGui.QWindow.focusInEvent?4(QFocusEvent) -QtGui.QWindow.focusOutEvent?4(QFocusEvent) -QtGui.QWindow.showEvent?4(QShowEvent) -QtGui.QWindow.hideEvent?4(QHideEvent) -QtGui.QWindow.event?4(QEvent) -> bool -QtGui.QWindow.keyPressEvent?4(QKeyEvent) -QtGui.QWindow.keyReleaseEvent?4(QKeyEvent) -QtGui.QWindow.mousePressEvent?4(QMouseEvent) -QtGui.QWindow.mouseReleaseEvent?4(QMouseEvent) -QtGui.QWindow.mouseDoubleClickEvent?4(QMouseEvent) -QtGui.QWindow.mouseMoveEvent?4(QMouseEvent) -QtGui.QWindow.wheelEvent?4(QWheelEvent) -QtGui.QWindow.touchEvent?4(QTouchEvent) -QtGui.QWindow.tabletEvent?4(QTabletEvent) -QtGui.QWindow.visibility?4() -> QWindow.Visibility -QtGui.QWindow.setVisibility?4(QWindow.Visibility) -QtGui.QWindow.opacity?4() -> float -QtGui.QWindow.setMask?4(QRegion) -QtGui.QWindow.mask?4() -> QRegion -QtGui.QWindow.fromWinId?4(quintptr) -> QWindow -QtGui.QWindow.visibilityChanged?4(QWindow.Visibility) -QtGui.QWindow.activeChanged?4() -QtGui.QWindow.opacityChanged?4(float) -QtGui.QWindow.setFlag?4(Qt.WindowType, bool on=True) -QtGui.QWindow.windowStates?4() -> unknown-type -QtGui.QWindow.setWindowStates?4(unknown-type) -QtGui.QWindow.startSystemResize?4(unknown-type) -> bool -QtGui.QWindow.startSystemMove?4() -> bool -QtGui.QWindow.paintEvent?4(QPaintEvent) -QtGui.QWindow.closeEvent?4(QCloseEvent) -QtGui.QWindow.nativeEvent?4(QByteArray, PyQt6.sip.voidptr) -> (bool, qintptr) -QtGui.QPaintDeviceWindow.update?4(QRect) -QtGui.QPaintDeviceWindow.update?4(QRegion) -QtGui.QPaintDeviceWindow.update?4() -QtGui.QPaintDeviceWindow.paintEvent?4(QPaintEvent) -QtGui.QPaintDeviceWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QPaintDeviceWindow.exposeEvent?4(QExposeEvent) -QtGui.QPaintDeviceWindow.event?4(QEvent) -> bool -QtGui.QTextItem.RenderFlag?10 -QtGui.QTextItem.RenderFlag.RightToLeft?10 -QtGui.QTextItem.RenderFlag.Overline?10 -QtGui.QTextItem.RenderFlag.Underline?10 -QtGui.QTextItem.RenderFlag.StrikeOut?10 -QtGui.QTextItem?1() -QtGui.QTextItem.__init__?1(self) -QtGui.QTextItem?1(QTextItem) -QtGui.QTextItem.__init__?1(self, QTextItem) -QtGui.QTextItem.descent?4() -> float -QtGui.QTextItem.ascent?4() -> float -QtGui.QTextItem.width?4() -> float -QtGui.QTextItem.renderFlags?4() -> unknown-type -QtGui.QTextItem.text?4() -> QString -QtGui.QTextItem.font?4() -> QFont -QtGui.QPaintEngine.Type?10 -QtGui.QPaintEngine.Type.X11?10 -QtGui.QPaintEngine.Type.Windows?10 -QtGui.QPaintEngine.Type.QuickDraw?10 -QtGui.QPaintEngine.Type.CoreGraphics?10 -QtGui.QPaintEngine.Type.MacPrinter?10 -QtGui.QPaintEngine.Type.QWindowSystem?10 -QtGui.QPaintEngine.Type.OpenGL?10 -QtGui.QPaintEngine.Type.Picture?10 -QtGui.QPaintEngine.Type.SVG?10 -QtGui.QPaintEngine.Type.Raster?10 -QtGui.QPaintEngine.Type.Direct3D?10 -QtGui.QPaintEngine.Type.Pdf?10 -QtGui.QPaintEngine.Type.OpenVG?10 -QtGui.QPaintEngine.Type.OpenGL2?10 -QtGui.QPaintEngine.Type.PaintBuffer?10 -QtGui.QPaintEngine.Type.Blitter?10 -QtGui.QPaintEngine.Type.Direct2D?10 -QtGui.QPaintEngine.Type.User?10 -QtGui.QPaintEngine.Type.MaxUser?10 -QtGui.QPaintEngine.PolygonDrawMode?10 -QtGui.QPaintEngine.PolygonDrawMode.OddEvenMode?10 -QtGui.QPaintEngine.PolygonDrawMode.WindingMode?10 -QtGui.QPaintEngine.PolygonDrawMode.ConvexMode?10 -QtGui.QPaintEngine.PolygonDrawMode.PolylineMode?10 -QtGui.QPaintEngine.DirtyFlag?10 -QtGui.QPaintEngine.DirtyFlag.DirtyPen?10 -QtGui.QPaintEngine.DirtyFlag.DirtyBrush?10 -QtGui.QPaintEngine.DirtyFlag.DirtyBrushOrigin?10 -QtGui.QPaintEngine.DirtyFlag.DirtyFont?10 -QtGui.QPaintEngine.DirtyFlag.DirtyBackground?10 -QtGui.QPaintEngine.DirtyFlag.DirtyBackgroundMode?10 -QtGui.QPaintEngine.DirtyFlag.DirtyTransform?10 -QtGui.QPaintEngine.DirtyFlag.DirtyClipRegion?10 -QtGui.QPaintEngine.DirtyFlag.DirtyClipPath?10 -QtGui.QPaintEngine.DirtyFlag.DirtyHints?10 -QtGui.QPaintEngine.DirtyFlag.DirtyCompositionMode?10 -QtGui.QPaintEngine.DirtyFlag.DirtyClipEnabled?10 -QtGui.QPaintEngine.DirtyFlag.DirtyOpacity?10 -QtGui.QPaintEngine.DirtyFlag.AllDirty?10 -QtGui.QPaintEngine.PaintEngineFeature?10 -QtGui.QPaintEngine.PaintEngineFeature.PrimitiveTransform?10 -QtGui.QPaintEngine.PaintEngineFeature.PatternTransform?10 -QtGui.QPaintEngine.PaintEngineFeature.PixmapTransform?10 -QtGui.QPaintEngine.PaintEngineFeature.PatternBrush?10 -QtGui.QPaintEngine.PaintEngineFeature.LinearGradientFill?10 -QtGui.QPaintEngine.PaintEngineFeature.RadialGradientFill?10 -QtGui.QPaintEngine.PaintEngineFeature.ConicalGradientFill?10 -QtGui.QPaintEngine.PaintEngineFeature.AlphaBlend?10 -QtGui.QPaintEngine.PaintEngineFeature.PorterDuff?10 -QtGui.QPaintEngine.PaintEngineFeature.PainterPaths?10 -QtGui.QPaintEngine.PaintEngineFeature.Antialiasing?10 -QtGui.QPaintEngine.PaintEngineFeature.BrushStroke?10 -QtGui.QPaintEngine.PaintEngineFeature.ConstantOpacity?10 -QtGui.QPaintEngine.PaintEngineFeature.MaskedBrush?10 -QtGui.QPaintEngine.PaintEngineFeature.PaintOutsidePaintEvent?10 -QtGui.QPaintEngine.PaintEngineFeature.PerspectiveTransform?10 -QtGui.QPaintEngine.PaintEngineFeature.BlendModes?10 -QtGui.QPaintEngine.PaintEngineFeature.ObjectBoundingModeGradients?10 -QtGui.QPaintEngine.PaintEngineFeature.RasterOpModes?10 -QtGui.QPaintEngine.PaintEngineFeature.AllFeatures?10 -QtGui.QPaintEngine?1(unknown-type features=QPaintEngine.PaintEngineFeatures()) -QtGui.QPaintEngine.__init__?1(self, unknown-type features=QPaintEngine.PaintEngineFeatures()) -QtGui.QPaintEngine.isActive?4() -> bool -QtGui.QPaintEngine.setActive?4(bool) -QtGui.QPaintEngine.begin?4(QPaintDevice) -> bool -QtGui.QPaintEngine.end?4() -> bool -QtGui.QPaintEngine.updateState?4(QPaintEngineState) -QtGui.QPaintEngine.drawRects?4(QRect) -QtGui.QPaintEngine.drawRects?4(QRectF) -QtGui.QPaintEngine.drawLines?4(QLine) -QtGui.QPaintEngine.drawLines?4(QLineF) -QtGui.QPaintEngine.drawEllipse?4(QRectF) -QtGui.QPaintEngine.drawEllipse?4(QRect) -QtGui.QPaintEngine.drawPath?4(QPainterPath) -QtGui.QPaintEngine.drawPoints?4(QPointF) -QtGui.QPaintEngine.drawPoints?4(QPoint) -QtGui.QPaintEngine.drawPolygon?4(QPointF, QPaintEngine.PolygonDrawMode) -QtGui.QPaintEngine.drawPolygon?4(QPoint, QPaintEngine.PolygonDrawMode) -QtGui.QPaintEngine.drawPixmap?4(QRectF, QPixmap, QRectF) -QtGui.QPaintEngine.drawTextItem?4(QPointF, QTextItem) -QtGui.QPaintEngine.drawTiledPixmap?4(QRectF, QPixmap, QPointF) -QtGui.QPaintEngine.drawImage?4(QRectF, QImage, QRectF, unknown-type flags=Qt.AutoColor) -QtGui.QPaintEngine.setPaintDevice?4(QPaintDevice) -QtGui.QPaintEngine.paintDevice?4() -> QPaintDevice -QtGui.QPaintEngine.type?4() -> QPaintEngine.Type -QtGui.QPaintEngine.painter?4() -> QPainter -QtGui.QPaintEngine.hasFeature?4(unknown-type) -> bool -QtGui.QPaintEngineState?1() -QtGui.QPaintEngineState.__init__?1(self) -QtGui.QPaintEngineState?1(QPaintEngineState) -QtGui.QPaintEngineState.__init__?1(self, QPaintEngineState) -QtGui.QPaintEngineState.state?4() -> unknown-type -QtGui.QPaintEngineState.pen?4() -> QPen -QtGui.QPaintEngineState.brush?4() -> QBrush -QtGui.QPaintEngineState.brushOrigin?4() -> QPointF -QtGui.QPaintEngineState.backgroundBrush?4() -> QBrush -QtGui.QPaintEngineState.backgroundMode?4() -> Qt.BGMode -QtGui.QPaintEngineState.font?4() -> QFont -QtGui.QPaintEngineState.opacity?4() -> float -QtGui.QPaintEngineState.clipOperation?4() -> Qt.ClipOperation -QtGui.QPaintEngineState.clipRegion?4() -> QRegion -QtGui.QPaintEngineState.clipPath?4() -> QPainterPath -QtGui.QPaintEngineState.isClipEnabled?4() -> bool -QtGui.QPaintEngineState.renderHints?4() -> unknown-type -QtGui.QPaintEngineState.compositionMode?4() -> QPainter.CompositionMode -QtGui.QPaintEngineState.painter?4() -> QPainter -QtGui.QPaintEngineState.transform?4() -> QTransform -QtGui.QPaintEngineState.brushNeedsResolving?4() -> bool -QtGui.QPaintEngineState.penNeedsResolving?4() -> bool -QtGui.QPainter.PixmapFragmentHint?10 -QtGui.QPainter.PixmapFragmentHint.OpaqueHint?10 -QtGui.QPainter.CompositionMode?10 -QtGui.QPainter.CompositionMode.CompositionMode_SourceOver?10 -QtGui.QPainter.CompositionMode.CompositionMode_DestinationOver?10 -QtGui.QPainter.CompositionMode.CompositionMode_Clear?10 -QtGui.QPainter.CompositionMode.CompositionMode_Source?10 -QtGui.QPainter.CompositionMode.CompositionMode_Destination?10 -QtGui.QPainter.CompositionMode.CompositionMode_SourceIn?10 -QtGui.QPainter.CompositionMode.CompositionMode_DestinationIn?10 -QtGui.QPainter.CompositionMode.CompositionMode_SourceOut?10 -QtGui.QPainter.CompositionMode.CompositionMode_DestinationOut?10 -QtGui.QPainter.CompositionMode.CompositionMode_SourceAtop?10 -QtGui.QPainter.CompositionMode.CompositionMode_DestinationAtop?10 -QtGui.QPainter.CompositionMode.CompositionMode_Xor?10 -QtGui.QPainter.CompositionMode.CompositionMode_Plus?10 -QtGui.QPainter.CompositionMode.CompositionMode_Multiply?10 -QtGui.QPainter.CompositionMode.CompositionMode_Screen?10 -QtGui.QPainter.CompositionMode.CompositionMode_Overlay?10 -QtGui.QPainter.CompositionMode.CompositionMode_Darken?10 -QtGui.QPainter.CompositionMode.CompositionMode_Lighten?10 -QtGui.QPainter.CompositionMode.CompositionMode_ColorDodge?10 -QtGui.QPainter.CompositionMode.CompositionMode_ColorBurn?10 -QtGui.QPainter.CompositionMode.CompositionMode_HardLight?10 -QtGui.QPainter.CompositionMode.CompositionMode_SoftLight?10 -QtGui.QPainter.CompositionMode.CompositionMode_Difference?10 -QtGui.QPainter.CompositionMode.CompositionMode_Exclusion?10 -QtGui.QPainter.CompositionMode.RasterOp_SourceOrDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_SourceAndDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_SourceXorDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSourceAndNotDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSourceOrNotDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSourceXorDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSource?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSourceAndDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_SourceAndNotDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotSourceOrDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_SourceOrNotDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_ClearDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_SetDestination?10 -QtGui.QPainter.CompositionMode.RasterOp_NotDestination?10 -QtGui.QPainter.RenderHint?10 -QtGui.QPainter.RenderHint.Antialiasing?10 -QtGui.QPainter.RenderHint.TextAntialiasing?10 -QtGui.QPainter.RenderHint.SmoothPixmapTransform?10 -QtGui.QPainter.RenderHint.LosslessImageRendering?10 -QtGui.QPainter.RenderHint.VerticalSubpixelPositioning?10 -QtGui.QPainter.RenderHint.NonCosmeticBrushPatterns?10 -QtGui.QPainter?1() -QtGui.QPainter.__init__?1(self) -QtGui.QPainter?1(QPaintDevice) -QtGui.QPainter.__init__?1(self, QPaintDevice) -QtGui.QPainter.__enter__?4() -> Any -QtGui.QPainter.__exit__?4(Any, Any, Any) -QtGui.QPainter.device?4() -> QPaintDevice -QtGui.QPainter.begin?4(QPaintDevice) -> bool -QtGui.QPainter.end?4() -> bool -QtGui.QPainter.isActive?4() -> bool -QtGui.QPainter.setCompositionMode?4(QPainter.CompositionMode) -QtGui.QPainter.compositionMode?4() -> QPainter.CompositionMode -QtGui.QPainter.font?4() -> QFont -QtGui.QPainter.setFont?4(QFont) -QtGui.QPainter.fontMetrics?4() -> QFontMetrics -QtGui.QPainter.fontInfo?4() -> QFontInfo -QtGui.QPainter.setPen?4(QColor) -QtGui.QPainter.setPen?4(QPen) -QtGui.QPainter.setPen?4(Qt.PenStyle) -QtGui.QPainter.pen?4() -> QPen -QtGui.QPainter.setBrush?4(QBrush) -QtGui.QPainter.setBrush?4(Qt.BrushStyle) -QtGui.QPainter.brush?4() -> QBrush -QtGui.QPainter.setBackgroundMode?4(Qt.BGMode) -QtGui.QPainter.backgroundMode?4() -> Qt.BGMode -QtGui.QPainter.brushOrigin?4() -> QPoint -QtGui.QPainter.setBrushOrigin?4(QPointF) -QtGui.QPainter.setBackground?4(QBrush) -QtGui.QPainter.background?4() -> QBrush -QtGui.QPainter.clipRegion?4() -> QRegion -QtGui.QPainter.clipPath?4() -> QPainterPath -QtGui.QPainter.setClipRect?4(QRectF, Qt.ClipOperation operation=Qt.ReplaceClip) -QtGui.QPainter.setClipRegion?4(QRegion, Qt.ClipOperation operation=Qt.ReplaceClip) -QtGui.QPainter.setClipPath?4(QPainterPath, Qt.ClipOperation operation=Qt.ReplaceClip) -QtGui.QPainter.setClipping?4(bool) -QtGui.QPainter.hasClipping?4() -> bool -QtGui.QPainter.save?4() -QtGui.QPainter.restore?4() -QtGui.QPainter.scale?4(float, float) -QtGui.QPainter.shear?4(float, float) -QtGui.QPainter.rotate?4(float) -QtGui.QPainter.translate?4(QPointF) -QtGui.QPainter.window?4() -> QRect -QtGui.QPainter.setWindow?4(QRect) -QtGui.QPainter.viewport?4() -> QRect -QtGui.QPainter.setViewport?4(QRect) -QtGui.QPainter.setViewTransformEnabled?4(bool) -QtGui.QPainter.viewTransformEnabled?4() -> bool -QtGui.QPainter.strokePath?4(QPainterPath, QPen) -QtGui.QPainter.fillPath?4(QPainterPath, QBrush) -QtGui.QPainter.drawPath?4(QPainterPath) -QtGui.QPainter.drawPoints?4(QPolygonF) -QtGui.QPainter.drawPoints?4(QPolygon) -QtGui.QPainter.drawPoints?4(QPointF) -QtGui.QPainter.drawPoints?4(QPointF, Any) -QtGui.QPainter.drawPoints?4(QPoint) -QtGui.QPainter.drawPoints?4(QPoint, Any) -QtGui.QPainter.drawLines?4(QLineF) -QtGui.QPainter.drawLines?4(QLineF, Any) -QtGui.QPainter.drawLines?4(QPointF) -QtGui.QPainter.drawLines?4(QPointF, Any) -QtGui.QPainter.drawLines?4(QLine) -QtGui.QPainter.drawLines?4(QLine, Any) -QtGui.QPainter.drawLines?4(QPoint) -QtGui.QPainter.drawLines?4(QPoint, Any) -QtGui.QPainter.drawRects?4(QRectF) -QtGui.QPainter.drawRects?4(QRectF, Any) -QtGui.QPainter.drawRects?4(QRect) -QtGui.QPainter.drawRects?4(QRect, Any) -QtGui.QPainter.drawEllipse?4(QRectF) -QtGui.QPainter.drawEllipse?4(QRect) -QtGui.QPainter.drawPolyline?4(QPolygonF) -QtGui.QPainter.drawPolyline?4(QPolygon) -QtGui.QPainter.drawPolyline?4(QPointF) -QtGui.QPainter.drawPolyline?4(QPointF, Any) -QtGui.QPainter.drawPolyline?4(QPoint) -QtGui.QPainter.drawPolyline?4(QPoint, Any) -QtGui.QPainter.drawPolygon?4(QPolygonF, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QPainter.drawPolygon?4(QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QPainter.drawPolygon?4(QPointF, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QPainter.drawPolygon?4(QPointF, Any) -QtGui.QPainter.drawPolygon?4(QPoint, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QPainter.drawPolygon?4(QPoint, Any) -QtGui.QPainter.drawConvexPolygon?4(QPolygonF) -QtGui.QPainter.drawConvexPolygon?4(QPolygon) -QtGui.QPainter.drawConvexPolygon?4(QPointF) -QtGui.QPainter.drawConvexPolygon?4(QPointF, Any) -QtGui.QPainter.drawConvexPolygon?4(QPoint) -QtGui.QPainter.drawConvexPolygon?4(QPoint, Any) -QtGui.QPainter.drawArc?4(QRectF, int, int) -QtGui.QPainter.drawPie?4(QRectF, int, int) -QtGui.QPainter.drawChord?4(QRectF, int, int) -QtGui.QPainter.drawTiledPixmap?4(QRectF, QPixmap, QPointF pos=QPointF()) -QtGui.QPainter.drawPicture?4(QPointF, QPicture) -QtGui.QPainter.drawPixmap?4(QRectF, QPixmap, QRectF) -QtGui.QPainter.setLayoutDirection?4(Qt.LayoutDirection) -QtGui.QPainter.layoutDirection?4() -> Qt.LayoutDirection -QtGui.QPainter.drawText?4(QPointF, QString) -QtGui.QPainter.drawText?4(QRectF, int, QString) -> QRectF -QtGui.QPainter.drawText?4(QRect, int, QString) -> QRect -QtGui.QPainter.drawText?4(QRectF, QString, QTextOption option=QTextOption()) -QtGui.QPainter.boundingRect?4(QRectF, int, QString) -> QRectF -QtGui.QPainter.boundingRect?4(QRect, int, QString) -> QRect -QtGui.QPainter.boundingRect?4(QRectF, QString, QTextOption option=QTextOption()) -> QRectF -QtGui.QPainter.fillRect?4(QRectF, QBrush) -QtGui.QPainter.fillRect?4(QRect, QBrush) -QtGui.QPainter.eraseRect?4(QRectF) -QtGui.QPainter.setRenderHint?4(QPainter.RenderHint, bool on=True) -QtGui.QPainter.renderHints?4() -> unknown-type -QtGui.QPainter.setRenderHints?4(unknown-type, bool on=True) -QtGui.QPainter.paintEngine?4() -> QPaintEngine -QtGui.QPainter.drawLine?4(QLineF) -QtGui.QPainter.drawLine?4(QLine) -QtGui.QPainter.drawLine?4(int, int, int, int) -QtGui.QPainter.drawLine?4(QPoint, QPoint) -QtGui.QPainter.drawLine?4(QPointF, QPointF) -QtGui.QPainter.drawRect?4(QRectF) -QtGui.QPainter.drawRect?4(int, int, int, int) -QtGui.QPainter.drawRect?4(QRect) -QtGui.QPainter.drawPoint?4(QPointF) -QtGui.QPainter.drawPoint?4(int, int) -QtGui.QPainter.drawPoint?4(QPoint) -QtGui.QPainter.drawEllipse?4(int, int, int, int) -QtGui.QPainter.drawArc?4(QRect, int, int) -QtGui.QPainter.drawArc?4(int, int, int, int, int, int) -QtGui.QPainter.drawPie?4(QRect, int, int) -QtGui.QPainter.drawPie?4(int, int, int, int, int, int) -QtGui.QPainter.drawChord?4(QRect, int, int) -QtGui.QPainter.drawChord?4(int, int, int, int, int, int) -QtGui.QPainter.setClipRect?4(int, int, int, int, Qt.ClipOperation operation=Qt.ReplaceClip) -QtGui.QPainter.setClipRect?4(QRect, Qt.ClipOperation operation=Qt.ReplaceClip) -QtGui.QPainter.eraseRect?4(QRect) -QtGui.QPainter.eraseRect?4(int, int, int, int) -QtGui.QPainter.fillRect?4(int, int, int, int, QBrush) -QtGui.QPainter.setBrushOrigin?4(int, int) -QtGui.QPainter.setBrushOrigin?4(QPoint) -QtGui.QPainter.drawTiledPixmap?4(QRect, QPixmap, QPoint pos=QPoint()) -QtGui.QPainter.drawTiledPixmap?4(int, int, int, int, QPixmap, int sx=0, int sy=0) -QtGui.QPainter.drawPixmap?4(QRect, QPixmap, QRect) -QtGui.QPainter.drawPixmap?4(QPointF, QPixmap) -QtGui.QPainter.drawPixmap?4(QPoint, QPixmap) -QtGui.QPainter.drawPixmap?4(QRect, QPixmap) -QtGui.QPainter.drawPixmap?4(int, int, QPixmap) -QtGui.QPainter.drawPixmap?4(int, int, int, int, QPixmap) -QtGui.QPainter.drawPixmap?4(int, int, int, int, QPixmap, int, int, int, int) -QtGui.QPainter.drawPixmap?4(int, int, QPixmap, int, int, int, int) -QtGui.QPainter.drawPixmap?4(QPointF, QPixmap, QRectF) -QtGui.QPainter.drawPixmap?4(QPoint, QPixmap, QRect) -QtGui.QPainter.drawImage?4(QRectF, QImage) -QtGui.QPainter.drawImage?4(QRectF, QImage, QRectF, unknown-type flags=Qt.AutoColor) -QtGui.QPainter.drawImage?4(QRect, QImage) -QtGui.QPainter.drawImage?4(QRect, QImage, QRect, unknown-type flags=Qt.AutoColor) -QtGui.QPainter.drawImage?4(QPointF, QImage) -QtGui.QPainter.drawImage?4(QPointF, QImage, QRectF, unknown-type flags=Qt.AutoColor) -QtGui.QPainter.drawImage?4(QPoint, QImage) -QtGui.QPainter.drawImage?4(QPoint, QImage, QRect, unknown-type flags=Qt.AutoColor) -QtGui.QPainter.drawImage?4(int, int, QImage, int sx=0, int sy=0, int sw=-1, int sh=-1, unknown-type flags=Qt.AutoColor) -QtGui.QPainter.drawText?4(QPoint, QString) -QtGui.QPainter.drawText?4(int, int, int, int, int, QString) -> QRect -QtGui.QPainter.drawText?4(int, int, QString) -QtGui.QPainter.boundingRect?4(int, int, int, int, int, QString) -> QRect -QtGui.QPainter.opacity?4() -> float -QtGui.QPainter.setOpacity?4(float) -QtGui.QPainter.translate?4(float, float) -QtGui.QPainter.translate?4(QPoint) -QtGui.QPainter.setViewport?4(int, int, int, int) -QtGui.QPainter.setWindow?4(int, int, int, int) -QtGui.QPainter.worldMatrixEnabled?4() -> bool -QtGui.QPainter.setWorldMatrixEnabled?4(bool) -QtGui.QPainter.drawPicture?4(int, int, QPicture) -QtGui.QPainter.drawPicture?4(QPoint, QPicture) -QtGui.QPainter.setTransform?4(QTransform, bool combine=False) -QtGui.QPainter.transform?4() -> QTransform -QtGui.QPainter.deviceTransform?4() -> QTransform -QtGui.QPainter.resetTransform?4() -QtGui.QPainter.setWorldTransform?4(QTransform, bool combine=False) -QtGui.QPainter.worldTransform?4() -> QTransform -QtGui.QPainter.combinedTransform?4() -> QTransform -QtGui.QPainter.testRenderHint?4(QPainter.RenderHint) -> bool -QtGui.QPainter.drawRoundedRect?4(QRectF, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) -QtGui.QPainter.drawRoundedRect?4(int, int, int, int, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) -QtGui.QPainter.drawRoundedRect?4(QRect, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) -QtGui.QPainter.drawEllipse?4(QPointF, float, float) -QtGui.QPainter.drawEllipse?4(QPoint, int, int) -QtGui.QPainter.fillRect?4(QRectF, QColor) -QtGui.QPainter.fillRect?4(QRect, QColor) -QtGui.QPainter.fillRect?4(int, int, int, int, QColor) -QtGui.QPainter.fillRect?4(int, int, int, int, Qt.GlobalColor) -QtGui.QPainter.fillRect?4(QRect, Qt.GlobalColor) -QtGui.QPainter.fillRect?4(QRectF, Qt.GlobalColor) -QtGui.QPainter.fillRect?4(int, int, int, int, Qt.BrushStyle) -QtGui.QPainter.fillRect?4(QRect, Qt.BrushStyle) -QtGui.QPainter.fillRect?4(QRectF, Qt.BrushStyle) -QtGui.QPainter.beginNativePainting?4() -QtGui.QPainter.endNativePainting?4() -QtGui.QPainter.drawPixmapFragments?4(QPainter.PixmapFragment, QPixmap, unknown-type hints=QPainter.PixmapFragmentHints()) -QtGui.QPainter.drawStaticText?4(QPointF, QStaticText) -QtGui.QPainter.drawStaticText?4(QPoint, QStaticText) -QtGui.QPainter.drawStaticText?4(int, int, QStaticText) -QtGui.QPainter.clipBoundingRect?4() -> QRectF -QtGui.QPainter.drawGlyphRun?4(QPointF, QGlyphRun) -QtGui.QPainter.fillRect?4(int, int, int, int, QGradient.Preset) -QtGui.QPainter.fillRect?4(QRect, QGradient.Preset) -QtGui.QPainter.fillRect?4(QRectF, QGradient.Preset) -QtGui.QPainter.PixmapFragment.height?7 -QtGui.QPainter.PixmapFragment.opacity?7 -QtGui.QPainter.PixmapFragment.rotation?7 -QtGui.QPainter.PixmapFragment.scaleX?7 -QtGui.QPainter.PixmapFragment.scaleY?7 -QtGui.QPainter.PixmapFragment.sourceLeft?7 -QtGui.QPainter.PixmapFragment.sourceTop?7 -QtGui.QPainter.PixmapFragment.width?7 -QtGui.QPainter.PixmapFragment.x?7 -QtGui.QPainter.PixmapFragment.y?7 -QtGui.QPainter.PixmapFragment?1() -QtGui.QPainter.PixmapFragment.__init__?1(self) -QtGui.QPainter.PixmapFragment?1(QPainter.PixmapFragment) -QtGui.QPainter.PixmapFragment.__init__?1(self, QPainter.PixmapFragment) -QtGui.QPainter.PixmapFragment.create?4(QPointF, QRectF, float scaleX=1, float scaleY=1, float rotation=0, float opacity=1) -> QPainter.PixmapFragment -QtGui.QPainterPath.ElementType?10 -QtGui.QPainterPath.ElementType.MoveToElement?10 -QtGui.QPainterPath.ElementType.LineToElement?10 -QtGui.QPainterPath.ElementType.CurveToElement?10 -QtGui.QPainterPath.ElementType.CurveToDataElement?10 -QtGui.QPainterPath?1() -QtGui.QPainterPath.__init__?1(self) -QtGui.QPainterPath?1(QPointF) -QtGui.QPainterPath.__init__?1(self, QPointF) -QtGui.QPainterPath?1(QPainterPath) -QtGui.QPainterPath.__init__?1(self, QPainterPath) -QtGui.QPainterPath.closeSubpath?4() -QtGui.QPainterPath.moveTo?4(QPointF) -QtGui.QPainterPath.lineTo?4(QPointF) -QtGui.QPainterPath.arcTo?4(QRectF, float, float) -QtGui.QPainterPath.cubicTo?4(QPointF, QPointF, QPointF) -QtGui.QPainterPath.quadTo?4(QPointF, QPointF) -QtGui.QPainterPath.currentPosition?4() -> QPointF -QtGui.QPainterPath.addRect?4(QRectF) -QtGui.QPainterPath.addEllipse?4(QRectF) -QtGui.QPainterPath.addPolygon?4(QPolygonF) -QtGui.QPainterPath.addText?4(QPointF, QFont, QString) -QtGui.QPainterPath.addPath?4(QPainterPath) -QtGui.QPainterPath.addRegion?4(QRegion) -QtGui.QPainterPath.connectPath?4(QPainterPath) -QtGui.QPainterPath.contains?4(QPointF) -> bool -QtGui.QPainterPath.contains?4(QRectF) -> bool -QtGui.QPainterPath.intersects?4(QRectF) -> bool -QtGui.QPainterPath.boundingRect?4() -> QRectF -QtGui.QPainterPath.controlPointRect?4() -> QRectF -QtGui.QPainterPath.fillRule?4() -> Qt.FillRule -QtGui.QPainterPath.setFillRule?4(Qt.FillRule) -QtGui.QPainterPath.toReversed?4() -> QPainterPath -QtGui.QPainterPath.toSubpathPolygons?4(QTransform matrix=QTransform()) -> unknown-type -QtGui.QPainterPath.toFillPolygons?4(QTransform matrix=QTransform()) -> unknown-type -QtGui.QPainterPath.toFillPolygon?4(QTransform matrix=QTransform()) -> QPolygonF -QtGui.QPainterPath.moveTo?4(float, float) -QtGui.QPainterPath.arcMoveTo?4(QRectF, float) -QtGui.QPainterPath.arcMoveTo?4(float, float, float, float, float) -QtGui.QPainterPath.arcTo?4(float, float, float, float, float, float) -QtGui.QPainterPath.lineTo?4(float, float) -QtGui.QPainterPath.cubicTo?4(float, float, float, float, float, float) -QtGui.QPainterPath.quadTo?4(float, float, float, float) -QtGui.QPainterPath.addEllipse?4(float, float, float, float) -QtGui.QPainterPath.addRect?4(float, float, float, float) -QtGui.QPainterPath.addText?4(float, float, QFont, QString) -QtGui.QPainterPath.isEmpty?4() -> bool -QtGui.QPainterPath.elementCount?4() -> int -QtGui.QPainterPath.elementAt?4(int) -> QPainterPath.Element -QtGui.QPainterPath.setElementPositionAt?4(int, float, float) -QtGui.QPainterPath.length?4() -> float -QtGui.QPainterPath.percentAtLength?4(float) -> float -QtGui.QPainterPath.pointAtPercent?4(float) -> QPointF -QtGui.QPainterPath.angleAtPercent?4(float) -> float -QtGui.QPainterPath.slopeAtPercent?4(float) -> float -QtGui.QPainterPath.intersects?4(QPainterPath) -> bool -QtGui.QPainterPath.contains?4(QPainterPath) -> bool -QtGui.QPainterPath.united?4(QPainterPath) -> QPainterPath -QtGui.QPainterPath.intersected?4(QPainterPath) -> QPainterPath -QtGui.QPainterPath.subtracted?4(QPainterPath) -> QPainterPath -QtGui.QPainterPath.addRoundedRect?4(QRectF, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) -QtGui.QPainterPath.addRoundedRect?4(float, float, float, float, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) -QtGui.QPainterPath.addEllipse?4(QPointF, float, float) -QtGui.QPainterPath.simplified?4() -> QPainterPath -QtGui.QPainterPath.translate?4(float, float) -QtGui.QPainterPath.translated?4(float, float) -> QPainterPath -QtGui.QPainterPath.translate?4(QPointF) -QtGui.QPainterPath.translated?4(QPointF) -> QPainterPath -QtGui.QPainterPath.swap?4(QPainterPath) -QtGui.QPainterPath.clear?4() -QtGui.QPainterPath.reserve?4(int) -QtGui.QPainterPath.capacity?4() -> int -QtGui.QPainterPath.Element.type?7 -QtGui.QPainterPath.Element.x?7 -QtGui.QPainterPath.Element.y?7 -QtGui.QPainterPath.Element?1() -QtGui.QPainterPath.Element.__init__?1(self) -QtGui.QPainterPath.Element?1(QPainterPath.Element) -QtGui.QPainterPath.Element.__init__?1(self, QPainterPath.Element) -QtGui.QPainterPath.Element.isMoveTo?4() -> bool -QtGui.QPainterPath.Element.isLineTo?4() -> bool -QtGui.QPainterPath.Element.isCurveTo?4() -> bool -QtGui.QPainterPathStroker?1() -QtGui.QPainterPathStroker.__init__?1(self) -QtGui.QPainterPathStroker?1(QPen) -QtGui.QPainterPathStroker.__init__?1(self, QPen) -QtGui.QPainterPathStroker.setWidth?4(float) -QtGui.QPainterPathStroker.width?4() -> float -QtGui.QPainterPathStroker.setCapStyle?4(Qt.PenCapStyle) -QtGui.QPainterPathStroker.capStyle?4() -> Qt.PenCapStyle -QtGui.QPainterPathStroker.setJoinStyle?4(Qt.PenJoinStyle) -QtGui.QPainterPathStroker.joinStyle?4() -> Qt.PenJoinStyle -QtGui.QPainterPathStroker.setMiterLimit?4(float) -QtGui.QPainterPathStroker.miterLimit?4() -> float -QtGui.QPainterPathStroker.setCurveThreshold?4(float) -QtGui.QPainterPathStroker.curveThreshold?4() -> float -QtGui.QPainterPathStroker.setDashPattern?4(Qt.PenStyle) -QtGui.QPainterPathStroker.setDashPattern?4(unknown-type) -QtGui.QPainterPathStroker.dashPattern?4() -> unknown-type -QtGui.QPainterPathStroker.createStroke?4(QPainterPath) -> QPainterPath -QtGui.QPainterPathStroker.setDashOffset?4(float) -QtGui.QPainterPathStroker.dashOffset?4() -> float -QtGui.QPalette.ColorRole?10 -QtGui.QPalette.ColorRole.WindowText?10 -QtGui.QPalette.ColorRole.Button?10 -QtGui.QPalette.ColorRole.Light?10 -QtGui.QPalette.ColorRole.Midlight?10 -QtGui.QPalette.ColorRole.Dark?10 -QtGui.QPalette.ColorRole.Mid?10 -QtGui.QPalette.ColorRole.Text?10 -QtGui.QPalette.ColorRole.BrightText?10 -QtGui.QPalette.ColorRole.ButtonText?10 -QtGui.QPalette.ColorRole.Base?10 -QtGui.QPalette.ColorRole.Window?10 -QtGui.QPalette.ColorRole.Shadow?10 -QtGui.QPalette.ColorRole.Highlight?10 -QtGui.QPalette.ColorRole.HighlightedText?10 -QtGui.QPalette.ColorRole.Link?10 -QtGui.QPalette.ColorRole.LinkVisited?10 -QtGui.QPalette.ColorRole.AlternateBase?10 -QtGui.QPalette.ColorRole.ToolTipBase?10 -QtGui.QPalette.ColorRole.ToolTipText?10 -QtGui.QPalette.ColorRole.PlaceholderText?10 -QtGui.QPalette.ColorRole.Accent?10 -QtGui.QPalette.ColorRole.NoRole?10 -QtGui.QPalette.ColorRole.NColorRoles?10 -QtGui.QPalette.ColorGroup?10 -QtGui.QPalette.ColorGroup.Active?10 -QtGui.QPalette.ColorGroup.Disabled?10 -QtGui.QPalette.ColorGroup.Inactive?10 -QtGui.QPalette.ColorGroup.NColorGroups?10 -QtGui.QPalette.ColorGroup.Current?10 -QtGui.QPalette.ColorGroup.All?10 -QtGui.QPalette.ColorGroup.Normal?10 -QtGui.QPalette?1() -QtGui.QPalette.__init__?1(self) -QtGui.QPalette?1(QColor) -QtGui.QPalette.__init__?1(self, QColor) -QtGui.QPalette?1(Qt.GlobalColor) -QtGui.QPalette.__init__?1(self, Qt.GlobalColor) -QtGui.QPalette?1(QColor, QColor) -QtGui.QPalette.__init__?1(self, QColor, QColor) -QtGui.QPalette?1(QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) -QtGui.QPalette.__init__?1(self, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) -QtGui.QPalette?1(QPalette) -QtGui.QPalette.__init__?1(self, QPalette) -QtGui.QPalette?1(QVariant) -QtGui.QPalette.__init__?1(self, QVariant) -QtGui.QPalette.currentColorGroup?4() -> QPalette.ColorGroup -QtGui.QPalette.setCurrentColorGroup?4(QPalette.ColorGroup) -QtGui.QPalette.color?4(QPalette.ColorGroup, QPalette.ColorRole) -> QColor -QtGui.QPalette.brush?4(QPalette.ColorGroup, QPalette.ColorRole) -> QBrush -QtGui.QPalette.setBrush?4(QPalette.ColorGroup, QPalette.ColorRole, QBrush) -QtGui.QPalette.setColorGroup?4(QPalette.ColorGroup, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) -QtGui.QPalette.isEqual?4(QPalette.ColorGroup, QPalette.ColorGroup) -> bool -QtGui.QPalette.color?4(QPalette.ColorRole) -> QColor -QtGui.QPalette.brush?4(QPalette.ColorRole) -> QBrush -QtGui.QPalette.windowText?4() -> QBrush -QtGui.QPalette.button?4() -> QBrush -QtGui.QPalette.light?4() -> QBrush -QtGui.QPalette.dark?4() -> QBrush -QtGui.QPalette.mid?4() -> QBrush -QtGui.QPalette.text?4() -> QBrush -QtGui.QPalette.base?4() -> QBrush -QtGui.QPalette.alternateBase?4() -> QBrush -QtGui.QPalette.window?4() -> QBrush -QtGui.QPalette.midlight?4() -> QBrush -QtGui.QPalette.brightText?4() -> QBrush -QtGui.QPalette.buttonText?4() -> QBrush -QtGui.QPalette.shadow?4() -> QBrush -QtGui.QPalette.highlight?4() -> QBrush -QtGui.QPalette.highlightedText?4() -> QBrush -QtGui.QPalette.link?4() -> QBrush -QtGui.QPalette.linkVisited?4() -> QBrush -QtGui.QPalette.toolTipBase?4() -> QBrush -QtGui.QPalette.toolTipText?4() -> QBrush -QtGui.QPalette.placeholderText?4() -> QBrush -QtGui.QPalette.isCopyOf?4(QPalette) -> bool -QtGui.QPalette.resolve?4(QPalette) -> QPalette -QtGui.QPalette.setColor?4(QPalette.ColorGroup, QPalette.ColorRole, QColor) -QtGui.QPalette.setColor?4(QPalette.ColorRole, QColor) -QtGui.QPalette.setBrush?4(QPalette.ColorRole, QBrush) -QtGui.QPalette.isBrushSet?4(QPalette.ColorGroup, QPalette.ColorRole) -> bool -QtGui.QPalette.cacheKey?4() -> int -QtGui.QPalette.swap?4(QPalette) -QtGui.QPalette.accent?4() -> QBrush -QtGui.QPdfWriter?1(QString) -QtGui.QPdfWriter.__init__?1(self, QString) -QtGui.QPdfWriter?1(QIODevice) -QtGui.QPdfWriter.__init__?1(self, QIODevice) -QtGui.QPdfWriter.title?4() -> QString -QtGui.QPdfWriter.setTitle?4(QString) -QtGui.QPdfWriter.creator?4() -> QString -QtGui.QPdfWriter.setCreator?4(QString) -QtGui.QPdfWriter.newPage?4() -> bool -QtGui.QPdfWriter.paintEngine?4() -> QPaintEngine -QtGui.QPdfWriter.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QPdfWriter.setResolution?4(int) -QtGui.QPdfWriter.resolution?4() -> int -QtGui.QPdfWriter.setPdfVersion?4(QPagedPaintDevice.PdfVersion) -QtGui.QPdfWriter.pdfVersion?4() -> QPagedPaintDevice.PdfVersion -QtGui.QPdfWriter.setDocumentXmpMetadata?4(QByteArray) -QtGui.QPdfWriter.documentXmpMetadata?4() -> QByteArray -QtGui.QPdfWriter.addFileAttachment?4(QString, QByteArray, QString mimeType='') -QtGui.QPen?1() -QtGui.QPen.__init__?1(self) -QtGui.QPen?1(Qt.PenStyle) -QtGui.QPen.__init__?1(self, Qt.PenStyle) -QtGui.QPen?1(QBrush, float, Qt.PenStyle style=Qt.SolidLine, Qt.PenCapStyle cap=Qt.SquareCap, Qt.PenJoinStyle join=Qt.BevelJoin) -QtGui.QPen.__init__?1(self, QBrush, float, Qt.PenStyle style=Qt.SolidLine, Qt.PenCapStyle cap=Qt.SquareCap, Qt.PenJoinStyle join=Qt.BevelJoin) -QtGui.QPen?1(QPen) -QtGui.QPen.__init__?1(self, QPen) -QtGui.QPen?1(QVariant) -QtGui.QPen.__init__?1(self, QVariant) -QtGui.QPen.style?4() -> Qt.PenStyle -QtGui.QPen.setStyle?4(Qt.PenStyle) -QtGui.QPen.widthF?4() -> float -QtGui.QPen.setWidthF?4(float) -QtGui.QPen.width?4() -> int -QtGui.QPen.setWidth?4(int) -QtGui.QPen.color?4() -> QColor -QtGui.QPen.setColor?4(QColor) -QtGui.QPen.brush?4() -> QBrush -QtGui.QPen.setBrush?4(QBrush) -QtGui.QPen.isSolid?4() -> bool -QtGui.QPen.capStyle?4() -> Qt.PenCapStyle -QtGui.QPen.setCapStyle?4(Qt.PenCapStyle) -QtGui.QPen.joinStyle?4() -> Qt.PenJoinStyle -QtGui.QPen.setJoinStyle?4(Qt.PenJoinStyle) -QtGui.QPen.dashPattern?4() -> unknown-type -QtGui.QPen.setDashPattern?4(unknown-type) -QtGui.QPen.miterLimit?4() -> float -QtGui.QPen.setMiterLimit?4(float) -QtGui.QPen.dashOffset?4() -> float -QtGui.QPen.setDashOffset?4(float) -QtGui.QPen.isCosmetic?4() -> bool -QtGui.QPen.setCosmetic?4(bool) -QtGui.QPen.swap?4(QPen) -QtGui.QPicture?1(int formatVersion=-1) -QtGui.QPicture.__init__?1(self, int formatVersion=-1) -QtGui.QPicture?1(QPicture) -QtGui.QPicture.__init__?1(self, QPicture) -QtGui.QPicture.isNull?4() -> bool -QtGui.QPicture.devType?4() -> int -QtGui.QPicture.size?4() -> int -QtGui.QPicture.data?4() -> bytes -QtGui.QPicture.setData?4(bytes) -QtGui.QPicture.play?4(QPainter) -> bool -QtGui.QPicture.load?4(QString) -> bool -QtGui.QPicture.load?4(QIODevice) -> bool -QtGui.QPicture.save?4(QString) -> bool -QtGui.QPicture.save?4(QIODevice) -> bool -QtGui.QPicture.boundingRect?4() -> QRect -QtGui.QPicture.setBoundingRect?4(QRect) -QtGui.QPicture.detach?4() -QtGui.QPicture.isDetached?4() -> bool -QtGui.QPicture.paintEngine?4() -> QPaintEngine -QtGui.QPicture.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QPicture.swap?4(QPicture) -QtGui.QPixelFormat.ByteOrder?10 -QtGui.QPixelFormat.ByteOrder.LittleEndian?10 -QtGui.QPixelFormat.ByteOrder.BigEndian?10 -QtGui.QPixelFormat.ByteOrder.CurrentSystemEndian?10 -QtGui.QPixelFormat.YUVLayout?10 -QtGui.QPixelFormat.YUVLayout.YUV444?10 -QtGui.QPixelFormat.YUVLayout.YUV422?10 -QtGui.QPixelFormat.YUVLayout.YUV411?10 -QtGui.QPixelFormat.YUVLayout.YUV420P?10 -QtGui.QPixelFormat.YUVLayout.YUV420SP?10 -QtGui.QPixelFormat.YUVLayout.YV12?10 -QtGui.QPixelFormat.YUVLayout.UYVY?10 -QtGui.QPixelFormat.YUVLayout.YUYV?10 -QtGui.QPixelFormat.YUVLayout.NV12?10 -QtGui.QPixelFormat.YUVLayout.NV21?10 -QtGui.QPixelFormat.YUVLayout.IMC1?10 -QtGui.QPixelFormat.YUVLayout.IMC2?10 -QtGui.QPixelFormat.YUVLayout.IMC3?10 -QtGui.QPixelFormat.YUVLayout.IMC4?10 -QtGui.QPixelFormat.YUVLayout.Y8?10 -QtGui.QPixelFormat.YUVLayout.Y16?10 -QtGui.QPixelFormat.TypeInterpretation?10 -QtGui.QPixelFormat.TypeInterpretation.UnsignedInteger?10 -QtGui.QPixelFormat.TypeInterpretation.UnsignedShort?10 -QtGui.QPixelFormat.TypeInterpretation.UnsignedByte?10 -QtGui.QPixelFormat.TypeInterpretation.FloatingPoint?10 -QtGui.QPixelFormat.AlphaPremultiplied?10 -QtGui.QPixelFormat.AlphaPremultiplied.NotPremultiplied?10 -QtGui.QPixelFormat.AlphaPremultiplied.Premultiplied?10 -QtGui.QPixelFormat.AlphaPosition?10 -QtGui.QPixelFormat.AlphaPosition.AtBeginning?10 -QtGui.QPixelFormat.AlphaPosition.AtEnd?10 -QtGui.QPixelFormat.AlphaUsage?10 -QtGui.QPixelFormat.AlphaUsage.UsesAlpha?10 -QtGui.QPixelFormat.AlphaUsage.IgnoresAlpha?10 -QtGui.QPixelFormat.ColorModel?10 -QtGui.QPixelFormat.ColorModel.RGB?10 -QtGui.QPixelFormat.ColorModel.BGR?10 -QtGui.QPixelFormat.ColorModel.Indexed?10 -QtGui.QPixelFormat.ColorModel.Grayscale?10 -QtGui.QPixelFormat.ColorModel.CMYK?10 -QtGui.QPixelFormat.ColorModel.HSL?10 -QtGui.QPixelFormat.ColorModel.HSV?10 -QtGui.QPixelFormat.ColorModel.YUV?10 -QtGui.QPixelFormat.ColorModel.Alpha?10 -QtGui.QPixelFormat?1() -QtGui.QPixelFormat.__init__?1(self) -QtGui.QPixelFormat?1(QPixelFormat.ColorModel, int, int, int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied, QPixelFormat.TypeInterpretation, QPixelFormat.ByteOrder byteOrder=QPixelFormat.CurrentSystemEndian, int subEnum=0) -QtGui.QPixelFormat.__init__?1(self, QPixelFormat.ColorModel, int, int, int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied, QPixelFormat.TypeInterpretation, QPixelFormat.ByteOrder byteOrder=QPixelFormat.CurrentSystemEndian, int subEnum=0) -QtGui.QPixelFormat?1(QPixelFormat) -QtGui.QPixelFormat.__init__?1(self, QPixelFormat) -QtGui.QPixelFormat.colorModel?4() -> QPixelFormat.ColorModel -QtGui.QPixelFormat.channelCount?4() -> int -QtGui.QPixelFormat.redSize?4() -> int -QtGui.QPixelFormat.greenSize?4() -> int -QtGui.QPixelFormat.blueSize?4() -> int -QtGui.QPixelFormat.cyanSize?4() -> int -QtGui.QPixelFormat.magentaSize?4() -> int -QtGui.QPixelFormat.yellowSize?4() -> int -QtGui.QPixelFormat.blackSize?4() -> int -QtGui.QPixelFormat.hueSize?4() -> int -QtGui.QPixelFormat.saturationSize?4() -> int -QtGui.QPixelFormat.lightnessSize?4() -> int -QtGui.QPixelFormat.brightnessSize?4() -> int -QtGui.QPixelFormat.alphaSize?4() -> int -QtGui.QPixelFormat.bitsPerPixel?4() -> int -QtGui.QPixelFormat.alphaUsage?4() -> QPixelFormat.AlphaUsage -QtGui.QPixelFormat.alphaPosition?4() -> QPixelFormat.AlphaPosition -QtGui.QPixelFormat.premultiplied?4() -> QPixelFormat.AlphaPremultiplied -QtGui.QPixelFormat.typeInterpretation?4() -> QPixelFormat.TypeInterpretation -QtGui.QPixelFormat.byteOrder?4() -> QPixelFormat.ByteOrder -QtGui.QPixelFormat.yuvLayout?4() -> QPixelFormat.YUVLayout -QtGui.QPixelFormat.subEnum?4() -> int -QtGui.QPixmapCache?1() -QtGui.QPixmapCache.__init__?1(self) -QtGui.QPixmapCache?1(QPixmapCache) -QtGui.QPixmapCache.__init__?1(self, QPixmapCache) -QtGui.QPixmapCache.cacheLimit?4() -> int -QtGui.QPixmapCache.clear?4() -QtGui.QPixmapCache.find?4(QString) -> QPixmap -QtGui.QPixmapCache.find?4(QPixmapCache.Key) -> QPixmap -QtGui.QPixmapCache.insert?4(QString, QPixmap) -> bool -QtGui.QPixmapCache.insert?4(QPixmap) -> QPixmapCache.Key -QtGui.QPixmapCache.remove?4(QString) -QtGui.QPixmapCache.remove?4(QPixmapCache.Key) -QtGui.QPixmapCache.replace?4(QPixmapCache.Key, QPixmap) -> bool -QtGui.QPixmapCache.setCacheLimit?4(int) -QtGui.QPixmapCache.Key?1() -QtGui.QPixmapCache.Key.__init__?1(self) -QtGui.QPixmapCache.Key?1(QPixmapCache.Key) -QtGui.QPixmapCache.Key.__init__?1(self, QPixmapCache.Key) -QtGui.QPixmapCache.Key.swap?4(QPixmapCache.Key) -QtGui.QPixmapCache.Key.isValid?4() -> bool -QtGui.QPointingDeviceUniqueId?1() -QtGui.QPointingDeviceUniqueId.__init__?1(self) -QtGui.QPointingDeviceUniqueId?1(QPointingDeviceUniqueId) -QtGui.QPointingDeviceUniqueId.__init__?1(self, QPointingDeviceUniqueId) -QtGui.QPointingDeviceUniqueId.fromNumericId?4(int) -> QPointingDeviceUniqueId -QtGui.QPointingDeviceUniqueId.isValid?4() -> bool -QtGui.QPointingDeviceUniqueId.numericId?4() -> int -QtGui.QPointingDevice.PointerType?10 -QtGui.QPointingDevice.PointerType.Unknown?10 -QtGui.QPointingDevice.PointerType.Generic?10 -QtGui.QPointingDevice.PointerType.Finger?10 -QtGui.QPointingDevice.PointerType.Pen?10 -QtGui.QPointingDevice.PointerType.Eraser?10 -QtGui.QPointingDevice.PointerType.Cursor?10 -QtGui.QPointingDevice.PointerType.AllPointerTypes?10 -QtGui.QPointingDevice?1(QString, int, QInputDevice.DeviceType, QPointingDevice.PointerType, unknown-type, int, int, QString seatName='', QPointingDeviceUniqueId uniqueId=QPointingDeviceUniqueId(), QObject parent=None) -QtGui.QPointingDevice.__init__?1(self, QString, int, QInputDevice.DeviceType, QPointingDevice.PointerType, unknown-type, int, int, QString seatName='', QPointingDeviceUniqueId uniqueId=QPointingDeviceUniqueId(), QObject parent=None) -QtGui.QPointingDevice?1(QObject parent=None) -QtGui.QPointingDevice.__init__?1(self, QObject parent=None) -QtGui.QPointingDevice.pointerType?4() -> QPointingDevice.PointerType -QtGui.QPointingDevice.maximumPoints?4() -> int -QtGui.QPointingDevice.buttonCount?4() -> int -QtGui.QPointingDevice.uniqueId?4() -> QPointingDeviceUniqueId -QtGui.QPointingDevice.primaryPointingDevice?4(QString seatName='') -> QPointingDevice -QtGui.QPolygon?1() -QtGui.QPolygon.__init__?1(self) -QtGui.QPolygon?1(QRect, bool closed=False) -QtGui.QPolygon.__init__?1(self, QRect, bool closed=False) -QtGui.QPolygon?1(unknown-type) -QtGui.QPolygon.__init__?1(self, unknown-type) -QtGui.QPolygon?1(QVariant) -QtGui.QPolygon.__init__?1(self, QVariant) -QtGui.QPolygon?1(QPolygon) -QtGui.QPolygon.__init__?1(self, QPolygon) -QtGui.QPolygon.swap?4(QPolygon) -QtGui.QPolygon.translate?4(int, int) -QtGui.QPolygon.translate?4(QPoint) -QtGui.QPolygon.translated?4(int, int) -> QPolygon -QtGui.QPolygon.translated?4(QPoint) -> QPolygon -QtGui.QPolygon.boundingRect?4() -> QRect -QtGui.QPolygon.point?4(int) -> QPoint -QtGui.QPolygon.setPoint?4(int, int, int) -QtGui.QPolygon.setPoint?4(int, QPoint) -QtGui.QPolygon.setPoints?4(int, int, Any) -QtGui.QPolygon.putPoints?4(int, int, int, Any) -QtGui.QPolygon.putPoints?4(int, int, QPolygon, int from=0) -QtGui.QPolygon.containsPoint?4(QPoint, Qt.FillRule) -> bool -QtGui.QPolygon.united?4(QPolygon) -> QPolygon -QtGui.QPolygon.intersected?4(QPolygon) -> QPolygon -QtGui.QPolygon.subtracted?4(QPolygon) -> QPolygon -QtGui.QPolygon.intersects?4(QPolygon) -> bool -QtGui.QPolygon.append?4(QPoint) -QtGui.QPolygon.at?4(int) -> QPoint -QtGui.QPolygon.clear?4() -QtGui.QPolygon.contains?4(QPoint) -> bool -QtGui.QPolygon.count?4(QPoint) -> int -QtGui.QPolygon.count?4() -> int -QtGui.QPolygon.data?4() -> PyQt6.sip.voidptr -QtGui.QPolygon.fill?4(QPoint, int size=-1) -QtGui.QPolygon.first?4() -> QPoint -QtGui.QPolygon.indexOf?4(QPoint, int from=0) -> int -QtGui.QPolygon.insert?4(int, QPoint) -QtGui.QPolygon.isEmpty?4() -> bool -QtGui.QPolygon.last?4() -> QPoint -QtGui.QPolygon.lastIndexOf?4(QPoint, int from=-1) -> int -QtGui.QPolygon.mid?4(int, int length=-1) -> QPolygon -QtGui.QPolygon.prepend?4(QPoint) -QtGui.QPolygon.remove?4(int) -QtGui.QPolygon.remove?4(int, int) -QtGui.QPolygon.replace?4(int, QPoint) -QtGui.QPolygon.resize?4(int) -QtGui.QPolygon.size?4() -> int -QtGui.QPolygon.value?4(int) -> QPoint -QtGui.QPolygon.value?4(int, QPoint) -> QPoint -QtGui.QPolygon.toPolygonF?4() -> QPolygonF -QtGui.QPolygonF?1() -QtGui.QPolygonF.__init__?1(self) -QtGui.QPolygonF?1(unknown-type) -QtGui.QPolygonF.__init__?1(self, unknown-type) -QtGui.QPolygonF?1(QRectF) -QtGui.QPolygonF.__init__?1(self, QRectF) -QtGui.QPolygonF?1(QPolygon) -QtGui.QPolygonF.__init__?1(self, QPolygon) -QtGui.QPolygonF?1(QVariant) -QtGui.QPolygonF.__init__?1(self, QVariant) -QtGui.QPolygonF?1(QPolygonF) -QtGui.QPolygonF.__init__?1(self, QPolygonF) -QtGui.QPolygonF.swap?4(QPolygonF) -QtGui.QPolygonF.translate?4(float, float) -QtGui.QPolygonF.translate?4(QPointF) -QtGui.QPolygonF.translated?4(float, float) -> QPolygonF -QtGui.QPolygonF.translated?4(QPointF) -> QPolygonF -QtGui.QPolygonF.toPolygon?4() -> QPolygon -QtGui.QPolygonF.isClosed?4() -> bool -QtGui.QPolygonF.boundingRect?4() -> QRectF -QtGui.QPolygonF.containsPoint?4(QPointF, Qt.FillRule) -> bool -QtGui.QPolygonF.united?4(QPolygonF) -> QPolygonF -QtGui.QPolygonF.intersected?4(QPolygonF) -> QPolygonF -QtGui.QPolygonF.subtracted?4(QPolygonF) -> QPolygonF -QtGui.QPolygonF.intersects?4(QPolygonF) -> bool -QtGui.QPolygonF.append?4(QPointF) -QtGui.QPolygonF.at?4(int) -> QPointF -QtGui.QPolygonF.clear?4() -QtGui.QPolygonF.contains?4(QPointF) -> bool -QtGui.QPolygonF.count?4(QPointF) -> int -QtGui.QPolygonF.count?4() -> int -QtGui.QPolygonF.data?4() -> PyQt6.sip.voidptr -QtGui.QPolygonF.fill?4(QPointF, int size=-1) -QtGui.QPolygonF.first?4() -> QPointF -QtGui.QPolygonF.indexOf?4(QPointF, int from=0) -> int -QtGui.QPolygonF.insert?4(int, QPointF) -QtGui.QPolygonF.isEmpty?4() -> bool -QtGui.QPolygonF.last?4() -> QPointF -QtGui.QPolygonF.lastIndexOf?4(QPointF, int from=-1) -> int -QtGui.QPolygonF.mid?4(int, int length=-1) -> QPolygonF -QtGui.QPolygonF.prepend?4(QPointF) -QtGui.QPolygonF.remove?4(int) -QtGui.QPolygonF.remove?4(int, int) -QtGui.QPolygonF.replace?4(int, QPointF) -QtGui.QPolygonF.resize?4(int) -QtGui.QPolygonF.size?4() -> int -QtGui.QPolygonF.value?4(int) -> QPointF -QtGui.QPolygonF.value?4(int, QPointF) -> QPointF -QtGui.QQuaternion?1() -QtGui.QQuaternion.__init__?1(self) -QtGui.QQuaternion?1(float, float, float, float) -QtGui.QQuaternion.__init__?1(self, float, float, float, float) -QtGui.QQuaternion?1(float, QVector3D) -QtGui.QQuaternion.__init__?1(self, float, QVector3D) -QtGui.QQuaternion?1(QVector4D) -QtGui.QQuaternion.__init__?1(self, QVector4D) -QtGui.QQuaternion?1(QQuaternion) -QtGui.QQuaternion.__init__?1(self, QQuaternion) -QtGui.QQuaternion.length?4() -> float -QtGui.QQuaternion.lengthSquared?4() -> float -QtGui.QQuaternion.normalized?4() -> QQuaternion -QtGui.QQuaternion.normalize?4() -QtGui.QQuaternion.rotatedVector?4(QVector3D) -> QVector3D -QtGui.QQuaternion.fromAxisAndAngle?4(QVector3D, float) -> QQuaternion -QtGui.QQuaternion.fromAxisAndAngle?4(float, float, float, float) -> QQuaternion -QtGui.QQuaternion.slerp?4(QQuaternion, QQuaternion, float) -> QQuaternion -QtGui.QQuaternion.nlerp?4(QQuaternion, QQuaternion, float) -> QQuaternion -QtGui.QQuaternion.isNull?4() -> bool -QtGui.QQuaternion.isIdentity?4() -> bool -QtGui.QQuaternion.x?4() -> float -QtGui.QQuaternion.y?4() -> float -QtGui.QQuaternion.z?4() -> float -QtGui.QQuaternion.scalar?4() -> float -QtGui.QQuaternion.setX?4(float) -QtGui.QQuaternion.setY?4(float) -QtGui.QQuaternion.setZ?4(float) -QtGui.QQuaternion.setScalar?4(float) -QtGui.QQuaternion.setVector?4(QVector3D) -QtGui.QQuaternion.vector?4() -> QVector3D -QtGui.QQuaternion.setVector?4(float, float, float) -QtGui.QQuaternion.toVector4D?4() -> QVector4D -QtGui.QQuaternion.getAxisAndAngle?4() -> (QVector3D, float) -QtGui.QQuaternion.getEulerAngles?4() -> (float, float, float) -QtGui.QQuaternion.fromEulerAngles?4(float, float, float) -> QQuaternion -QtGui.QQuaternion.toRotationMatrix?4() -> QMatrix3x3 -QtGui.QQuaternion.fromRotationMatrix?4(QMatrix3x3) -> QQuaternion -QtGui.QQuaternion.getAxes?4() -> (QVector3D, QVector3D, QVector3D) -QtGui.QQuaternion.fromAxes?4(QVector3D, QVector3D, QVector3D) -> QQuaternion -QtGui.QQuaternion.fromDirection?4(QVector3D, QVector3D) -> QQuaternion -QtGui.QQuaternion.rotationTo?4(QVector3D, QVector3D) -> QQuaternion -QtGui.QQuaternion.dotProduct?4(QQuaternion, QQuaternion) -> float -QtGui.QQuaternion.inverted?4() -> QQuaternion -QtGui.QQuaternion.conjugated?4() -> QQuaternion -QtGui.QQuaternion.toEulerAngles?4() -> QVector3D -QtGui.QQuaternion.fromEulerAngles?4(QVector3D) -> QQuaternion -QtGui.QRasterWindow?1(QWindow parent=None) -QtGui.QRasterWindow.__init__?1(self, QWindow parent=None) -QtGui.QRasterWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtGui.QRasterWindow.resizeEvent?4(QResizeEvent) -QtGui.QRawFont.LayoutFlag?10 -QtGui.QRawFont.LayoutFlag.SeparateAdvances?10 -QtGui.QRawFont.LayoutFlag.KernedAdvances?10 -QtGui.QRawFont.LayoutFlag.UseDesignMetrics?10 -QtGui.QRawFont.AntialiasingType?10 -QtGui.QRawFont.AntialiasingType.PixelAntialiasing?10 -QtGui.QRawFont.AntialiasingType.SubPixelAntialiasing?10 -QtGui.QRawFont?1() -QtGui.QRawFont.__init__?1(self) -QtGui.QRawFont?1(QString, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) -QtGui.QRawFont.__init__?1(self, QString, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) -QtGui.QRawFont?1(QByteArray, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) -QtGui.QRawFont.__init__?1(self, QByteArray, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) -QtGui.QRawFont?1(QRawFont) -QtGui.QRawFont.__init__?1(self, QRawFont) -QtGui.QRawFont.isValid?4() -> bool -QtGui.QRawFont.familyName?4() -> QString -QtGui.QRawFont.styleName?4() -> QString -QtGui.QRawFont.style?4() -> QFont.Style -QtGui.QRawFont.weight?4() -> int -QtGui.QRawFont.glyphIndexesForString?4(QString) -> unknown-type -QtGui.QRawFont.advancesForGlyphIndexes?4(unknown-type, unknown-type) -> unknown-type -QtGui.QRawFont.advancesForGlyphIndexes?4(unknown-type) -> unknown-type -QtGui.QRawFont.alphaMapForGlyph?4(int, QRawFont.AntialiasingType antialiasingType=QRawFont.SubPixelAntialiasing, QTransform transform=QTransform()) -> QImage -QtGui.QRawFont.pathForGlyph?4(int) -> QPainterPath -QtGui.QRawFont.setPixelSize?4(float) -QtGui.QRawFont.pixelSize?4() -> float -QtGui.QRawFont.hintingPreference?4() -> QFont.HintingPreference -QtGui.QRawFont.ascent?4() -> float -QtGui.QRawFont.descent?4() -> float -QtGui.QRawFont.leading?4() -> float -QtGui.QRawFont.xHeight?4() -> float -QtGui.QRawFont.averageCharWidth?4() -> float -QtGui.QRawFont.maxCharWidth?4() -> float -QtGui.QRawFont.unitsPerEm?4() -> float -QtGui.QRawFont.loadFromFile?4(QString, float, QFont.HintingPreference) -QtGui.QRawFont.loadFromData?4(QByteArray, float, QFont.HintingPreference) -QtGui.QRawFont.supportsCharacter?4(int) -> bool -QtGui.QRawFont.supportsCharacter?4(QChar) -> bool -QtGui.QRawFont.supportedWritingSystems?4() -> unknown-type -QtGui.QRawFont.fontTable?4(str) -> QByteArray -QtGui.QRawFont.fontTable?4(QFont.Tag) -> QByteArray -QtGui.QRawFont.fromFont?4(QFont, QFontDatabase.WritingSystem writingSystem=QFontDatabase.Any) -> QRawFont -QtGui.QRawFont.boundingRect?4(int) -> QRectF -QtGui.QRawFont.lineThickness?4() -> float -QtGui.QRawFont.underlinePosition?4() -> float -QtGui.QRawFont.swap?4(QRawFont) -QtGui.QRawFont.capHeight?4() -> float -QtGui.QRegion.RegionType?10 -QtGui.QRegion.RegionType.Rectangle?10 -QtGui.QRegion.RegionType.Ellipse?10 -QtGui.QRegion?1() -QtGui.QRegion.__init__?1(self) -QtGui.QRegion?1(int, int, int, int, QRegion.RegionType type=QRegion.Rectangle) -QtGui.QRegion.__init__?1(self, int, int, int, int, QRegion.RegionType type=QRegion.Rectangle) -QtGui.QRegion?1(QRect, QRegion.RegionType type=QRegion.Rectangle) -QtGui.QRegion.__init__?1(self, QRect, QRegion.RegionType type=QRegion.Rectangle) -QtGui.QRegion?1(QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QRegion.__init__?1(self, QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) -QtGui.QRegion?1(QBitmap) -QtGui.QRegion.__init__?1(self, QBitmap) -QtGui.QRegion?1(QRegion) -QtGui.QRegion.__init__?1(self, QRegion) -QtGui.QRegion?1(QVariant) -QtGui.QRegion.__init__?1(self, QVariant) -QtGui.QRegion.isEmpty?4() -> bool -QtGui.QRegion.contains?4(QPoint) -> bool -QtGui.QRegion.contains?4(QRect) -> bool -QtGui.QRegion.translate?4(int, int) -QtGui.QRegion.translate?4(QPoint) -QtGui.QRegion.translated?4(int, int) -> QRegion -QtGui.QRegion.translated?4(QPoint) -> QRegion -QtGui.QRegion.united?4(QRegion) -> QRegion -QtGui.QRegion.united?4(QRect) -> QRegion -QtGui.QRegion.boundingRect?4() -> QRect -QtGui.QRegion.setRects?4(unknown-type) -QtGui.QRegion.intersected?4(QRegion) -> QRegion -QtGui.QRegion.intersected?4(QRect) -> QRegion -QtGui.QRegion.subtracted?4(QRegion) -> QRegion -QtGui.QRegion.xored?4(QRegion) -> QRegion -QtGui.QRegion.intersects?4(QRegion) -> bool -QtGui.QRegion.intersects?4(QRect) -> bool -QtGui.QRegion.rectCount?4() -> int -QtGui.QRegion.swap?4(QRegion) -QtGui.QRegion.isNull?4() -> bool -QtGui.QRgba64?1() -QtGui.QRgba64.__init__?1(self) -QtGui.QRgba64?1(QRgba64) -QtGui.QRgba64.__init__?1(self, QRgba64) -QtGui.QRgba64.fromRgba64?4(int) -> QRgba64 -QtGui.QRgba64.fromRgba64?4(int, int, int, int) -> QRgba64 -QtGui.QRgba64.fromRgba?4(int, int, int, int) -> QRgba64 -QtGui.QRgba64.fromArgb32?4(int) -> QRgba64 -QtGui.QRgba64.isOpaque?4() -> bool -QtGui.QRgba64.isTransparent?4() -> bool -QtGui.QRgba64.red?4() -> int -QtGui.QRgba64.green?4() -> int -QtGui.QRgba64.blue?4() -> int -QtGui.QRgba64.alpha?4() -> int -QtGui.QRgba64.setRed?4(int) -QtGui.QRgba64.setGreen?4(int) -QtGui.QRgba64.setBlue?4(int) -QtGui.QRgba64.setAlpha?4(int) -QtGui.QRgba64.red8?4() -> int -QtGui.QRgba64.green8?4() -> int -QtGui.QRgba64.blue8?4() -> int -QtGui.QRgba64.alpha8?4() -> int -QtGui.QRgba64.toArgb32?4() -> int -QtGui.QRgba64.toRgb16?4() -> int -QtGui.QRgba64.premultiplied?4() -> QRgba64 -QtGui.QRgba64.unpremultiplied?4() -> QRgba64 -QtGui.QScreen.name?4() -> QString -QtGui.QScreen.depth?4() -> int -QtGui.QScreen.size?4() -> QSize -QtGui.QScreen.geometry?4() -> QRect -QtGui.QScreen.physicalSize?4() -> QSizeF -QtGui.QScreen.physicalDotsPerInchX?4() -> float -QtGui.QScreen.physicalDotsPerInchY?4() -> float -QtGui.QScreen.physicalDotsPerInch?4() -> float -QtGui.QScreen.logicalDotsPerInchX?4() -> float -QtGui.QScreen.logicalDotsPerInchY?4() -> float -QtGui.QScreen.logicalDotsPerInch?4() -> float -QtGui.QScreen.availableSize?4() -> QSize -QtGui.QScreen.availableGeometry?4() -> QRect -QtGui.QScreen.virtualSiblings?4() -> unknown-type -QtGui.QScreen.virtualSize?4() -> QSize -QtGui.QScreen.virtualGeometry?4() -> QRect -QtGui.QScreen.availableVirtualSize?4() -> QSize -QtGui.QScreen.availableVirtualGeometry?4() -> QRect -QtGui.QScreen.nativeOrientation?4() -> Qt.ScreenOrientation -QtGui.QScreen.primaryOrientation?4() -> Qt.ScreenOrientation -QtGui.QScreen.orientation?4() -> Qt.ScreenOrientation -QtGui.QScreen.angleBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation) -> int -QtGui.QScreen.transformBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation, QRect) -> QTransform -QtGui.QScreen.mapBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation, QRect) -> QRect -QtGui.QScreen.isPortrait?4(Qt.ScreenOrientation) -> bool -QtGui.QScreen.isLandscape?4(Qt.ScreenOrientation) -> bool -QtGui.QScreen.grabWindow?4(quintptr window=0, int x=0, int y=0, int width=-1, int height=-1) -> QPixmap -QtGui.QScreen.refreshRate?4() -> float -QtGui.QScreen.devicePixelRatio?4() -> float -QtGui.QScreen.geometryChanged?4(QRect) -QtGui.QScreen.physicalDotsPerInchChanged?4(float) -QtGui.QScreen.logicalDotsPerInchChanged?4(float) -QtGui.QScreen.primaryOrientationChanged?4(Qt.ScreenOrientation) -QtGui.QScreen.orientationChanged?4(Qt.ScreenOrientation) -QtGui.QScreen.refreshRateChanged?4(float) -QtGui.QScreen.physicalSizeChanged?4(QSizeF) -QtGui.QScreen.virtualGeometryChanged?4(QRect) -QtGui.QScreen.availableGeometryChanged?4(QRect) -QtGui.QScreen.manufacturer?4() -> QString -QtGui.QScreen.model?4() -> QString -QtGui.QScreen.serialNumber?4() -> QString -QtGui.QScreen.virtualSiblingAt?4(QPoint) -> QScreen -QtGui.QSessionManager.RestartHint?10 -QtGui.QSessionManager.RestartHint.RestartIfRunning?10 -QtGui.QSessionManager.RestartHint.RestartAnyway?10 -QtGui.QSessionManager.RestartHint.RestartImmediately?10 -QtGui.QSessionManager.RestartHint.RestartNever?10 -QtGui.QSessionManager.sessionId?4() -> QString -QtGui.QSessionManager.sessionKey?4() -> QString -QtGui.QSessionManager.allowsInteraction?4() -> bool -QtGui.QSessionManager.allowsErrorInteraction?4() -> bool -QtGui.QSessionManager.release?4() -QtGui.QSessionManager.cancel?4() -QtGui.QSessionManager.setRestartHint?4(QSessionManager.RestartHint) -QtGui.QSessionManager.restartHint?4() -> QSessionManager.RestartHint -QtGui.QSessionManager.setRestartCommand?4(QStringList) -QtGui.QSessionManager.restartCommand?4() -> QStringList -QtGui.QSessionManager.setDiscardCommand?4(QStringList) -QtGui.QSessionManager.discardCommand?4() -> QStringList -QtGui.QSessionManager.setManagerProperty?4(QString, QString) -QtGui.QSessionManager.setManagerProperty?4(QString, QStringList) -QtGui.QSessionManager.isPhase2?4() -> bool -QtGui.QSessionManager.requestPhase2?4() -QtGui.QShortcut?1(QKeySequence.StandardKey, QObject, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) -QtGui.QShortcut.__init__?1(self, QKeySequence.StandardKey, QObject, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) -QtGui.QShortcut?1(QKeySequence, QObject, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) -QtGui.QShortcut.__init__?1(self, QKeySequence, QObject, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) -QtGui.QShortcut?1(QObject) -QtGui.QShortcut.__init__?1(self, QObject) -QtGui.QShortcut.setKey?4(QKeySequence) -QtGui.QShortcut.key?4() -> QKeySequence -QtGui.QShortcut.setEnabled?4(bool) -QtGui.QShortcut.isEnabled?4() -> bool -QtGui.QShortcut.setContext?4(Qt.ShortcutContext) -QtGui.QShortcut.context?4() -> Qt.ShortcutContext -QtGui.QShortcut.setWhatsThis?4(QString) -QtGui.QShortcut.whatsThis?4() -> QString -QtGui.QShortcut.setAutoRepeat?4(bool) -QtGui.QShortcut.autoRepeat?4() -> bool -QtGui.QShortcut.activated?4() -QtGui.QShortcut.activatedAmbiguously?4() -QtGui.QShortcut.setKeys?4(unknown-type) -QtGui.QShortcut.setKeys?4(QKeySequence.StandardKey) -QtGui.QShortcut.keys?4() -> unknown-type -QtGui.QShortcut.event?4(QEvent) -> bool -QtGui.QStandardItemModel?1(QObject parent=None) -QtGui.QStandardItemModel.__init__?1(self, QObject parent=None) -QtGui.QStandardItemModel?1(int, int, QObject parent=None) -QtGui.QStandardItemModel.__init__?1(self, int, int, QObject parent=None) -QtGui.QStandardItemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtGui.QStandardItemModel.parent?4(QModelIndex) -> QModelIndex -QtGui.QStandardItemModel.parent?4() -> QObject -QtGui.QStandardItemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtGui.QStandardItemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtGui.QStandardItemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtGui.QStandardItemModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtGui.QStandardItemModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtGui.QStandardItemModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtGui.QStandardItemModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.flags?4(QModelIndex) -> unknown-type -QtGui.QStandardItemModel.clear?4() -QtGui.QStandardItemModel.supportedDropActions?4() -> unknown-type -QtGui.QStandardItemModel.itemData?4(QModelIndex) -> unknown-type -QtGui.QStandardItemModel.setItemData?4(QModelIndex, unknown-type) -> bool -QtGui.QStandardItemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtGui.QStandardItemModel.itemFromIndex?4(QModelIndex) -> QStandardItem -QtGui.QStandardItemModel.indexFromItem?4(QStandardItem) -> QModelIndex -QtGui.QStandardItemModel.item?4(int, int column=0) -> QStandardItem -QtGui.QStandardItemModel.setItem?4(int, int, QStandardItem) -QtGui.QStandardItemModel.setItem?4(int, QStandardItem) -QtGui.QStandardItemModel.invisibleRootItem?4() -> QStandardItem -QtGui.QStandardItemModel.horizontalHeaderItem?4(int) -> QStandardItem -QtGui.QStandardItemModel.setHorizontalHeaderItem?4(int, QStandardItem) -QtGui.QStandardItemModel.verticalHeaderItem?4(int) -> QStandardItem -QtGui.QStandardItemModel.setVerticalHeaderItem?4(int, QStandardItem) -QtGui.QStandardItemModel.setHorizontalHeaderLabels?4(QStringList) -QtGui.QStandardItemModel.setVerticalHeaderLabels?4(QStringList) -QtGui.QStandardItemModel.setRowCount?4(int) -QtGui.QStandardItemModel.setColumnCount?4(int) -QtGui.QStandardItemModel.appendRow?4(unknown-type) -QtGui.QStandardItemModel.appendColumn?4(unknown-type) -QtGui.QStandardItemModel.insertRow?4(int, unknown-type) -QtGui.QStandardItemModel.insertColumn?4(int, unknown-type) -QtGui.QStandardItemModel.takeItem?4(int, int column=0) -> QStandardItem -QtGui.QStandardItemModel.takeRow?4(int) -> unknown-type -QtGui.QStandardItemModel.takeColumn?4(int) -> unknown-type -QtGui.QStandardItemModel.takeHorizontalHeaderItem?4(int) -> QStandardItem -QtGui.QStandardItemModel.takeVerticalHeaderItem?4(int) -> QStandardItem -QtGui.QStandardItemModel.itemPrototype?4() -> QStandardItem -QtGui.QStandardItemModel.setItemPrototype?4(QStandardItem) -QtGui.QStandardItemModel.findItems?4(QString, unknown-type flags=Qt.MatchExactly, int column=0) -> unknown-type -QtGui.QStandardItemModel.sortRole?4() -> int -QtGui.QStandardItemModel.setSortRole?4(int) -QtGui.QStandardItemModel.appendRow?4(QStandardItem) -QtGui.QStandardItemModel.insertRow?4(int, QStandardItem) -QtGui.QStandardItemModel.insertRow?4(int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.insertColumn?4(int, QModelIndex parent=QModelIndex()) -> bool -QtGui.QStandardItemModel.mimeTypes?4() -> QStringList -QtGui.QStandardItemModel.mimeData?4(unknown-type) -> QMimeData -QtGui.QStandardItemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool -QtGui.QStandardItemModel.setItemRoleNames?4(unknown-type) -QtGui.QStandardItemModel.clearItemData?4(QModelIndex) -> bool -QtGui.QStandardItemModel.roleNames?4() -> unknown-type -QtGui.QStandardItemModel.itemChanged?4(QStandardItem) -QtGui.QStandardItem.ItemType?10 -QtGui.QStandardItem.ItemType.Type?10 -QtGui.QStandardItem.ItemType.UserType?10 -QtGui.QStandardItem?1() -QtGui.QStandardItem.__init__?1(self) -QtGui.QStandardItem?1(QString) -QtGui.QStandardItem.__init__?1(self, QString) -QtGui.QStandardItem?1(QIcon, QString) -QtGui.QStandardItem.__init__?1(self, QIcon, QString) -QtGui.QStandardItem?1(int, int columns=1) -QtGui.QStandardItem.__init__?1(self, int, int columns=1) -QtGui.QStandardItem?1(QStandardItem) -QtGui.QStandardItem.__init__?1(self, QStandardItem) -QtGui.QStandardItem.data?4(int role=Qt.UserRole+1) -> QVariant -QtGui.QStandardItem.setData?4(QVariant, int role=Qt.UserRole+1) -QtGui.QStandardItem.text?4() -> QString -QtGui.QStandardItem.icon?4() -> QIcon -QtGui.QStandardItem.toolTip?4() -> QString -QtGui.QStandardItem.statusTip?4() -> QString -QtGui.QStandardItem.whatsThis?4() -> QString -QtGui.QStandardItem.sizeHint?4() -> QSize -QtGui.QStandardItem.font?4() -> QFont -QtGui.QStandardItem.textAlignment?4() -> unknown-type -QtGui.QStandardItem.background?4() -> QBrush -QtGui.QStandardItem.foreground?4() -> QBrush -QtGui.QStandardItem.checkState?4() -> Qt.CheckState -QtGui.QStandardItem.accessibleText?4() -> QString -QtGui.QStandardItem.accessibleDescription?4() -> QString -QtGui.QStandardItem.flags?4() -> unknown-type -QtGui.QStandardItem.setFlags?4(unknown-type) -QtGui.QStandardItem.isEnabled?4() -> bool -QtGui.QStandardItem.setEnabled?4(bool) -QtGui.QStandardItem.isEditable?4() -> bool -QtGui.QStandardItem.setEditable?4(bool) -QtGui.QStandardItem.isSelectable?4() -> bool -QtGui.QStandardItem.setSelectable?4(bool) -QtGui.QStandardItem.isCheckable?4() -> bool -QtGui.QStandardItem.setCheckable?4(bool) -QtGui.QStandardItem.isDragEnabled?4() -> bool -QtGui.QStandardItem.setDragEnabled?4(bool) -QtGui.QStandardItem.isDropEnabled?4() -> bool -QtGui.QStandardItem.setDropEnabled?4(bool) -QtGui.QStandardItem.parent?4() -> QStandardItem -QtGui.QStandardItem.row?4() -> int -QtGui.QStandardItem.column?4() -> int -QtGui.QStandardItem.index?4() -> QModelIndex -QtGui.QStandardItem.model?4() -> QStandardItemModel -QtGui.QStandardItem.rowCount?4() -> int -QtGui.QStandardItem.setRowCount?4(int) -QtGui.QStandardItem.columnCount?4() -> int -QtGui.QStandardItem.setColumnCount?4(int) -QtGui.QStandardItem.hasChildren?4() -> bool -QtGui.QStandardItem.child?4(int, int column=0) -> QStandardItem -QtGui.QStandardItem.setChild?4(int, int, QStandardItem) -QtGui.QStandardItem.setChild?4(int, QStandardItem) -QtGui.QStandardItem.insertRow?4(int, unknown-type) -QtGui.QStandardItem.insertRow?4(int, QStandardItem) -QtGui.QStandardItem.insertRows?4(int, int) -QtGui.QStandardItem.insertColumn?4(int, unknown-type) -QtGui.QStandardItem.insertColumns?4(int, int) -QtGui.QStandardItem.removeRow?4(int) -QtGui.QStandardItem.removeColumn?4(int) -QtGui.QStandardItem.removeRows?4(int, int) -QtGui.QStandardItem.removeColumns?4(int, int) -QtGui.QStandardItem.takeChild?4(int, int column=0) -> QStandardItem -QtGui.QStandardItem.takeRow?4(int) -> unknown-type -QtGui.QStandardItem.takeColumn?4(int) -> unknown-type -QtGui.QStandardItem.sortChildren?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtGui.QStandardItem.clone?4() -> QStandardItem -QtGui.QStandardItem.type?4() -> int -QtGui.QStandardItem.read?4(QDataStream) -QtGui.QStandardItem.write?4(QDataStream) -QtGui.QStandardItem.setText?4(QString) -QtGui.QStandardItem.setIcon?4(QIcon) -QtGui.QStandardItem.setToolTip?4(QString) -QtGui.QStandardItem.setStatusTip?4(QString) -QtGui.QStandardItem.setWhatsThis?4(QString) -QtGui.QStandardItem.setSizeHint?4(QSize) -QtGui.QStandardItem.setFont?4(QFont) -QtGui.QStandardItem.setTextAlignment?4(unknown-type) -QtGui.QStandardItem.setBackground?4(QBrush) -QtGui.QStandardItem.setForeground?4(QBrush) -QtGui.QStandardItem.setCheckState?4(Qt.CheckState) -QtGui.QStandardItem.setAccessibleText?4(QString) -QtGui.QStandardItem.setAccessibleDescription?4(QString) -QtGui.QStandardItem.appendRow?4(unknown-type) -QtGui.QStandardItem.appendRow?4(QStandardItem) -QtGui.QStandardItem.appendColumn?4(unknown-type) -QtGui.QStandardItem.insertRows?4(int, unknown-type) -QtGui.QStandardItem.appendRows?4(unknown-type) -QtGui.QStandardItem.emitDataChanged?4() -QtGui.QStandardItem.isAutoTristate?4() -> bool -QtGui.QStandardItem.setAutoTristate?4(bool) -QtGui.QStandardItem.isUserTristate?4() -> bool -QtGui.QStandardItem.setUserTristate?4(bool) -QtGui.QStandardItem.clearData?4() -QtGui.QStaticText.PerformanceHint?10 -QtGui.QStaticText.PerformanceHint.ModerateCaching?10 -QtGui.QStaticText.PerformanceHint.AggressiveCaching?10 -QtGui.QStaticText?1() -QtGui.QStaticText.__init__?1(self) -QtGui.QStaticText?1(QString) -QtGui.QStaticText.__init__?1(self, QString) -QtGui.QStaticText?1(QStaticText) -QtGui.QStaticText.__init__?1(self, QStaticText) -QtGui.QStaticText.setText?4(QString) -QtGui.QStaticText.text?4() -> QString -QtGui.QStaticText.setTextFormat?4(Qt.TextFormat) -QtGui.QStaticText.textFormat?4() -> Qt.TextFormat -QtGui.QStaticText.setTextWidth?4(float) -QtGui.QStaticText.textWidth?4() -> float -QtGui.QStaticText.setTextOption?4(QTextOption) -QtGui.QStaticText.textOption?4() -> QTextOption -QtGui.QStaticText.size?4() -> QSizeF -QtGui.QStaticText.prepare?4(QTransform matrix=QTransform(), QFont font=QFont()) -QtGui.QStaticText.setPerformanceHint?4(QStaticText.PerformanceHint) -QtGui.QStaticText.performanceHint?4() -> QStaticText.PerformanceHint -QtGui.QStaticText.swap?4(QStaticText) -QtGui.QStyleHints.mouseDoubleClickInterval?4() -> int -QtGui.QStyleHints.startDragDistance?4() -> int -QtGui.QStyleHints.startDragTime?4() -> int -QtGui.QStyleHints.startDragVelocity?4() -> int -QtGui.QStyleHints.keyboardInputInterval?4() -> int -QtGui.QStyleHints.keyboardAutoRepeatRate?4() -> int -QtGui.QStyleHints.cursorFlashTime?4() -> int -QtGui.QStyleHints.showIsFullScreen?4() -> bool -QtGui.QStyleHints.passwordMaskDelay?4() -> int -QtGui.QStyleHints.fontSmoothingGamma?4() -> float -QtGui.QStyleHints.useRtlExtensions?4() -> bool -QtGui.QStyleHints.passwordMaskCharacter?4() -> QChar -QtGui.QStyleHints.setFocusOnTouchRelease?4() -> bool -QtGui.QStyleHints.mousePressAndHoldInterval?4() -> int -QtGui.QStyleHints.tabFocusBehavior?4() -> Qt.TabFocusBehavior -QtGui.QStyleHints.singleClickActivation?4() -> bool -QtGui.QStyleHints.cursorFlashTimeChanged?4(int) -QtGui.QStyleHints.keyboardInputIntervalChanged?4(int) -QtGui.QStyleHints.mouseDoubleClickIntervalChanged?4(int) -QtGui.QStyleHints.startDragDistanceChanged?4(int) -QtGui.QStyleHints.startDragTimeChanged?4(int) -QtGui.QStyleHints.mousePressAndHoldIntervalChanged?4(int) -QtGui.QStyleHints.tabFocusBehaviorChanged?4(Qt.TabFocusBehavior) -QtGui.QStyleHints.showIsMaximized?4() -> bool -QtGui.QStyleHints.useHoverEffects?4() -> bool -QtGui.QStyleHints.setUseHoverEffects?4(bool) -QtGui.QStyleHints.useHoverEffectsChanged?4(bool) -QtGui.QStyleHints.wheelScrollLines?4() -> int -QtGui.QStyleHints.wheelScrollLinesChanged?4(int) -QtGui.QStyleHints.showShortcutsInContextMenus?4() -> bool -QtGui.QStyleHints.mouseQuickSelectionThreshold?4() -> int -QtGui.QStyleHints.mouseQuickSelectionThresholdChanged?4(int) -QtGui.QStyleHints.setShowShortcutsInContextMenus?4(bool) -QtGui.QStyleHints.showShortcutsInContextMenusChanged?4(bool) -QtGui.QStyleHints.mouseDoubleClickDistance?4() -> int -QtGui.QStyleHints.touchDoubleTapDistance?4() -> int -QtGui.QStyleHints.keyboardAutoRepeatRateF?4() -> float -QtGui.QStyleHints.colorScheme?4() -> Qt.ColorScheme -QtGui.QStyleHints.colorSchemeChanged?4(Qt.ColorScheme) -QtGui.QSurfaceFormat.OpenGLContextProfile?10 -QtGui.QSurfaceFormat.OpenGLContextProfile.NoProfile?10 -QtGui.QSurfaceFormat.OpenGLContextProfile.CoreProfile?10 -QtGui.QSurfaceFormat.OpenGLContextProfile.CompatibilityProfile?10 -QtGui.QSurfaceFormat.RenderableType?10 -QtGui.QSurfaceFormat.RenderableType.DefaultRenderableType?10 -QtGui.QSurfaceFormat.RenderableType.OpenGL?10 -QtGui.QSurfaceFormat.RenderableType.OpenGLES?10 -QtGui.QSurfaceFormat.RenderableType.OpenVG?10 -QtGui.QSurfaceFormat.SwapBehavior?10 -QtGui.QSurfaceFormat.SwapBehavior.DefaultSwapBehavior?10 -QtGui.QSurfaceFormat.SwapBehavior.SingleBuffer?10 -QtGui.QSurfaceFormat.SwapBehavior.DoubleBuffer?10 -QtGui.QSurfaceFormat.SwapBehavior.TripleBuffer?10 -QtGui.QSurfaceFormat.FormatOption?10 -QtGui.QSurfaceFormat.FormatOption.StereoBuffers?10 -QtGui.QSurfaceFormat.FormatOption.DebugContext?10 -QtGui.QSurfaceFormat.FormatOption.DeprecatedFunctions?10 -QtGui.QSurfaceFormat.FormatOption.ResetNotification?10 -QtGui.QSurfaceFormat.FormatOption.ProtectedContent?10 -QtGui.QSurfaceFormat?1() -QtGui.QSurfaceFormat.__init__?1(self) -QtGui.QSurfaceFormat?1(unknown-type) -QtGui.QSurfaceFormat.__init__?1(self, unknown-type) -QtGui.QSurfaceFormat?1(QSurfaceFormat) -QtGui.QSurfaceFormat.__init__?1(self, QSurfaceFormat) -QtGui.QSurfaceFormat.setDepthBufferSize?4(int) -QtGui.QSurfaceFormat.depthBufferSize?4() -> int -QtGui.QSurfaceFormat.setStencilBufferSize?4(int) -QtGui.QSurfaceFormat.stencilBufferSize?4() -> int -QtGui.QSurfaceFormat.setRedBufferSize?4(int) -QtGui.QSurfaceFormat.redBufferSize?4() -> int -QtGui.QSurfaceFormat.setGreenBufferSize?4(int) -QtGui.QSurfaceFormat.greenBufferSize?4() -> int -QtGui.QSurfaceFormat.setBlueBufferSize?4(int) -QtGui.QSurfaceFormat.blueBufferSize?4() -> int -QtGui.QSurfaceFormat.setAlphaBufferSize?4(int) -QtGui.QSurfaceFormat.alphaBufferSize?4() -> int -QtGui.QSurfaceFormat.setSamples?4(int) -QtGui.QSurfaceFormat.samples?4() -> int -QtGui.QSurfaceFormat.setSwapBehavior?4(QSurfaceFormat.SwapBehavior) -QtGui.QSurfaceFormat.swapBehavior?4() -> QSurfaceFormat.SwapBehavior -QtGui.QSurfaceFormat.hasAlpha?4() -> bool -QtGui.QSurfaceFormat.setProfile?4(QSurfaceFormat.OpenGLContextProfile) -QtGui.QSurfaceFormat.profile?4() -> QSurfaceFormat.OpenGLContextProfile -QtGui.QSurfaceFormat.setRenderableType?4(QSurfaceFormat.RenderableType) -QtGui.QSurfaceFormat.renderableType?4() -> QSurfaceFormat.RenderableType -QtGui.QSurfaceFormat.setMajorVersion?4(int) -QtGui.QSurfaceFormat.majorVersion?4() -> int -QtGui.QSurfaceFormat.setMinorVersion?4(int) -QtGui.QSurfaceFormat.minorVersion?4() -> int -QtGui.QSurfaceFormat.setStereo?4(bool) -QtGui.QSurfaceFormat.stereo?4() -> bool -QtGui.QSurfaceFormat.version?4() -> unknown-type -QtGui.QSurfaceFormat.setVersion?4(int, int) -QtGui.QSurfaceFormat.setOptions?4(unknown-type) -QtGui.QSurfaceFormat.setOption?4(QSurfaceFormat.FormatOption, bool on=True) -QtGui.QSurfaceFormat.testOption?4(QSurfaceFormat.FormatOption) -> bool -QtGui.QSurfaceFormat.options?4() -> unknown-type -QtGui.QSurfaceFormat.swapInterval?4() -> int -QtGui.QSurfaceFormat.setSwapInterval?4(int) -QtGui.QSurfaceFormat.setDefaultFormat?4(QSurfaceFormat) -QtGui.QSurfaceFormat.defaultFormat?4() -> QSurfaceFormat -QtGui.QSurfaceFormat.colorSpace?4() -> QColorSpace -QtGui.QSurfaceFormat.setColorSpace?4(QColorSpace) -QtGui.QSyntaxHighlighter?1(QTextDocument) -QtGui.QSyntaxHighlighter.__init__?1(self, QTextDocument) -QtGui.QSyntaxHighlighter?1(QObject) -QtGui.QSyntaxHighlighter.__init__?1(self, QObject) -QtGui.QSyntaxHighlighter.setDocument?4(QTextDocument) -QtGui.QSyntaxHighlighter.document?4() -> QTextDocument -QtGui.QSyntaxHighlighter.rehighlight?4() -QtGui.QSyntaxHighlighter.rehighlightBlock?4(QTextBlock) -QtGui.QSyntaxHighlighter.highlightBlock?4(QString) -QtGui.QSyntaxHighlighter.setFormat?4(int, int, QTextCharFormat) -QtGui.QSyntaxHighlighter.setFormat?4(int, int, QColor) -QtGui.QSyntaxHighlighter.setFormat?4(int, int, QFont) -QtGui.QSyntaxHighlighter.format?4(int) -> QTextCharFormat -QtGui.QSyntaxHighlighter.previousBlockState?4() -> int -QtGui.QSyntaxHighlighter.currentBlockState?4() -> int -QtGui.QSyntaxHighlighter.setCurrentBlockState?4(int) -QtGui.QSyntaxHighlighter.setCurrentBlockUserData?4(QTextBlockUserData) -QtGui.QSyntaxHighlighter.currentBlockUserData?4() -> QTextBlockUserData -QtGui.QSyntaxHighlighter.currentBlock?4() -> QTextBlock -QtGui.QTextCursor.SelectionType?10 -QtGui.QTextCursor.SelectionType.WordUnderCursor?10 -QtGui.QTextCursor.SelectionType.LineUnderCursor?10 -QtGui.QTextCursor.SelectionType.BlockUnderCursor?10 -QtGui.QTextCursor.SelectionType.Document?10 -QtGui.QTextCursor.MoveOperation?10 -QtGui.QTextCursor.MoveOperation.NoMove?10 -QtGui.QTextCursor.MoveOperation.Start?10 -QtGui.QTextCursor.MoveOperation.Up?10 -QtGui.QTextCursor.MoveOperation.StartOfLine?10 -QtGui.QTextCursor.MoveOperation.StartOfBlock?10 -QtGui.QTextCursor.MoveOperation.StartOfWord?10 -QtGui.QTextCursor.MoveOperation.PreviousBlock?10 -QtGui.QTextCursor.MoveOperation.PreviousCharacter?10 -QtGui.QTextCursor.MoveOperation.PreviousWord?10 -QtGui.QTextCursor.MoveOperation.Left?10 -QtGui.QTextCursor.MoveOperation.WordLeft?10 -QtGui.QTextCursor.MoveOperation.End?10 -QtGui.QTextCursor.MoveOperation.Down?10 -QtGui.QTextCursor.MoveOperation.EndOfLine?10 -QtGui.QTextCursor.MoveOperation.EndOfWord?10 -QtGui.QTextCursor.MoveOperation.EndOfBlock?10 -QtGui.QTextCursor.MoveOperation.NextBlock?10 -QtGui.QTextCursor.MoveOperation.NextCharacter?10 -QtGui.QTextCursor.MoveOperation.NextWord?10 -QtGui.QTextCursor.MoveOperation.Right?10 -QtGui.QTextCursor.MoveOperation.WordRight?10 -QtGui.QTextCursor.MoveOperation.NextCell?10 -QtGui.QTextCursor.MoveOperation.PreviousCell?10 -QtGui.QTextCursor.MoveOperation.NextRow?10 -QtGui.QTextCursor.MoveOperation.PreviousRow?10 -QtGui.QTextCursor.MoveMode?10 -QtGui.QTextCursor.MoveMode.MoveAnchor?10 -QtGui.QTextCursor.MoveMode.KeepAnchor?10 -QtGui.QTextCursor?1() -QtGui.QTextCursor.__init__?1(self) -QtGui.QTextCursor?1(QTextDocument) -QtGui.QTextCursor.__init__?1(self, QTextDocument) -QtGui.QTextCursor?1(QTextFrame) -QtGui.QTextCursor.__init__?1(self, QTextFrame) -QtGui.QTextCursor?1(QTextBlock) -QtGui.QTextCursor.__init__?1(self, QTextBlock) -QtGui.QTextCursor?1(QTextCursor) -QtGui.QTextCursor.__init__?1(self, QTextCursor) -QtGui.QTextCursor.isNull?4() -> bool -QtGui.QTextCursor.setPosition?4(int, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) -QtGui.QTextCursor.position?4() -> int -QtGui.QTextCursor.anchor?4() -> int -QtGui.QTextCursor.insertText?4(QString) -QtGui.QTextCursor.insertText?4(QString, QTextCharFormat) -QtGui.QTextCursor.movePosition?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor, int n=1) -> bool -QtGui.QTextCursor.deleteChar?4() -QtGui.QTextCursor.deletePreviousChar?4() -QtGui.QTextCursor.select?4(QTextCursor.SelectionType) -QtGui.QTextCursor.hasSelection?4() -> bool -QtGui.QTextCursor.hasComplexSelection?4() -> bool -QtGui.QTextCursor.removeSelectedText?4() -QtGui.QTextCursor.clearSelection?4() -QtGui.QTextCursor.selectionStart?4() -> int -QtGui.QTextCursor.selectionEnd?4() -> int -QtGui.QTextCursor.selectedText?4() -> QString -QtGui.QTextCursor.selection?4() -> QTextDocumentFragment -QtGui.QTextCursor.selectedTableCells?4() -> (int, int, int, int) -QtGui.QTextCursor.block?4() -> QTextBlock -QtGui.QTextCursor.charFormat?4() -> QTextCharFormat -QtGui.QTextCursor.setCharFormat?4(QTextCharFormat) -QtGui.QTextCursor.mergeCharFormat?4(QTextCharFormat) -QtGui.QTextCursor.blockFormat?4() -> QTextBlockFormat -QtGui.QTextCursor.setBlockFormat?4(QTextBlockFormat) -QtGui.QTextCursor.mergeBlockFormat?4(QTextBlockFormat) -QtGui.QTextCursor.blockCharFormat?4() -> QTextCharFormat -QtGui.QTextCursor.setBlockCharFormat?4(QTextCharFormat) -QtGui.QTextCursor.mergeBlockCharFormat?4(QTextCharFormat) -QtGui.QTextCursor.atBlockStart?4() -> bool -QtGui.QTextCursor.atBlockEnd?4() -> bool -QtGui.QTextCursor.atStart?4() -> bool -QtGui.QTextCursor.atEnd?4() -> bool -QtGui.QTextCursor.insertBlock?4() -QtGui.QTextCursor.insertBlock?4(QTextBlockFormat) -QtGui.QTextCursor.insertBlock?4(QTextBlockFormat, QTextCharFormat) -QtGui.QTextCursor.insertList?4(QTextListFormat) -> QTextList -QtGui.QTextCursor.insertList?4(QTextListFormat.Style) -> QTextList -QtGui.QTextCursor.createList?4(QTextListFormat) -> QTextList -QtGui.QTextCursor.createList?4(QTextListFormat.Style) -> QTextList -QtGui.QTextCursor.currentList?4() -> QTextList -QtGui.QTextCursor.insertTable?4(int, int, QTextTableFormat) -> QTextTable -QtGui.QTextCursor.insertTable?4(int, int) -> QTextTable -QtGui.QTextCursor.currentTable?4() -> QTextTable -QtGui.QTextCursor.insertFrame?4(QTextFrameFormat) -> QTextFrame -QtGui.QTextCursor.currentFrame?4() -> QTextFrame -QtGui.QTextCursor.insertFragment?4(QTextDocumentFragment) -QtGui.QTextCursor.insertHtml?4(QString) -QtGui.QTextCursor.insertImage?4(QTextImageFormat) -QtGui.QTextCursor.insertImage?4(QTextImageFormat, QTextFrameFormat.Position) -QtGui.QTextCursor.insertImage?4(QString) -QtGui.QTextCursor.insertImage?4(QImage, QString name='') -QtGui.QTextCursor.beginEditBlock?4() -QtGui.QTextCursor.joinPreviousEditBlock?4() -QtGui.QTextCursor.endEditBlock?4() -QtGui.QTextCursor.blockNumber?4() -> int -QtGui.QTextCursor.columnNumber?4() -> int -QtGui.QTextCursor.isCopyOf?4(QTextCursor) -> bool -QtGui.QTextCursor.visualNavigation?4() -> bool -QtGui.QTextCursor.setVisualNavigation?4(bool) -QtGui.QTextCursor.document?4() -> QTextDocument -QtGui.QTextCursor.positionInBlock?4() -> int -QtGui.QTextCursor.setVerticalMovementX?4(int) -QtGui.QTextCursor.verticalMovementX?4() -> int -QtGui.QTextCursor.setKeepPositionOnInsert?4(bool) -QtGui.QTextCursor.keepPositionOnInsert?4() -> bool -QtGui.QTextCursor.swap?4(QTextCursor) -QtGui.QTextCursor.insertMarkdown?4(QString, unknown-type features=QTextDocument.MarkdownDialectGitHub) -QtGui.Qt.mightBeRichText?4(QAnyStringView) -> bool -QtGui.Qt.convertFromPlainText?4(QString, Qt.WhiteSpaceMode mode=Qt.WhiteSpacePre) -> QString -QtGui.QTextDocument.MarkdownFeature?10 -QtGui.QTextDocument.MarkdownFeature.MarkdownNoHTML?10 -QtGui.QTextDocument.MarkdownFeature.MarkdownDialectCommonMark?10 -QtGui.QTextDocument.MarkdownFeature.MarkdownDialectGitHub?10 -QtGui.QTextDocument.Stacks?10 -QtGui.QTextDocument.Stacks.UndoStack?10 -QtGui.QTextDocument.Stacks.RedoStack?10 -QtGui.QTextDocument.Stacks.UndoAndRedoStacks?10 -QtGui.QTextDocument.ResourceType?10 -QtGui.QTextDocument.ResourceType.UnknownResource?10 -QtGui.QTextDocument.ResourceType.HtmlResource?10 -QtGui.QTextDocument.ResourceType.ImageResource?10 -QtGui.QTextDocument.ResourceType.StyleSheetResource?10 -QtGui.QTextDocument.ResourceType.MarkdownResource?10 -QtGui.QTextDocument.ResourceType.UserResource?10 -QtGui.QTextDocument.FindFlag?10 -QtGui.QTextDocument.FindFlag.FindBackward?10 -QtGui.QTextDocument.FindFlag.FindCaseSensitively?10 -QtGui.QTextDocument.FindFlag.FindWholeWords?10 -QtGui.QTextDocument.MetaInformation?10 -QtGui.QTextDocument.MetaInformation.DocumentTitle?10 -QtGui.QTextDocument.MetaInformation.DocumentUrl?10 -QtGui.QTextDocument.MetaInformation.CssMedia?10 -QtGui.QTextDocument?1(QObject parent=None) -QtGui.QTextDocument.__init__?1(self, QObject parent=None) -QtGui.QTextDocument?1(QString, QObject parent=None) -QtGui.QTextDocument.__init__?1(self, QString, QObject parent=None) -QtGui.QTextDocument.clone?4(QObject parent=None) -> QTextDocument -QtGui.QTextDocument.isEmpty?4() -> bool -QtGui.QTextDocument.clear?4() -QtGui.QTextDocument.setUndoRedoEnabled?4(bool) -QtGui.QTextDocument.isUndoRedoEnabled?4() -> bool -QtGui.QTextDocument.isUndoAvailable?4() -> bool -QtGui.QTextDocument.isRedoAvailable?4() -> bool -QtGui.QTextDocument.setDocumentLayout?4(QAbstractTextDocumentLayout) -QtGui.QTextDocument.documentLayout?4() -> QAbstractTextDocumentLayout -QtGui.QTextDocument.setMetaInformation?4(QTextDocument.MetaInformation, QString) -QtGui.QTextDocument.metaInformation?4(QTextDocument.MetaInformation) -> QString -QtGui.QTextDocument.toHtml?4() -> QString -QtGui.QTextDocument.setHtml?4(QString) -QtGui.QTextDocument.toPlainText?4() -> QString -QtGui.QTextDocument.setPlainText?4(QString) -QtGui.QTextDocument.find?4(QRegularExpression, QTextCursor, unknown-type options=QTextDocument.FindFlags()) -> QTextCursor -QtGui.QTextDocument.find?4(QRegularExpression, int position=0, unknown-type options=QTextDocument.FindFlags()) -> QTextCursor -QtGui.QTextDocument.find?4(QString, QTextCursor, unknown-type options=QTextDocument.FindFlags()) -> QTextCursor -QtGui.QTextDocument.find?4(QString, int position=0, unknown-type options=QTextDocument.FindFlags()) -> QTextCursor -QtGui.QTextDocument.rootFrame?4() -> QTextFrame -QtGui.QTextDocument.object?4(int) -> QTextObject -QtGui.QTextDocument.objectForFormat?4(QTextFormat) -> QTextObject -QtGui.QTextDocument.findBlock?4(int) -> QTextBlock -QtGui.QTextDocument.begin?4() -> QTextBlock -QtGui.QTextDocument.end?4() -> QTextBlock -QtGui.QTextDocument.setPageSize?4(QSizeF) -QtGui.QTextDocument.pageSize?4() -> QSizeF -QtGui.QTextDocument.setDefaultFont?4(QFont) -QtGui.QTextDocument.defaultFont?4() -> QFont -QtGui.QTextDocument.pageCount?4() -> int -QtGui.QTextDocument.isModified?4() -> bool -QtGui.QTextDocument.print?4(QPagedPaintDevice) -QtGui.QTextDocument.resource?4(int, QUrl) -> QVariant -QtGui.QTextDocument.addResource?4(int, QUrl, QVariant) -QtGui.QTextDocument.allFormats?4() -> unknown-type -QtGui.QTextDocument.markContentsDirty?4(int, int) -QtGui.QTextDocument.setUseDesignMetrics?4(bool) -QtGui.QTextDocument.useDesignMetrics?4() -> bool -QtGui.QTextDocument.blockCountChanged?4(int) -QtGui.QTextDocument.contentsChange?4(int, int, int) -QtGui.QTextDocument.contentsChanged?4() -QtGui.QTextDocument.cursorPositionChanged?4(QTextCursor) -QtGui.QTextDocument.modificationChanged?4(bool) -QtGui.QTextDocument.redoAvailable?4(bool) -QtGui.QTextDocument.undoAvailable?4(bool) -QtGui.QTextDocument.undo?4() -QtGui.QTextDocument.redo?4() -QtGui.QTextDocument.setModified?4(bool on=True) -QtGui.QTextDocument.createObject?4(QTextFormat) -> QTextObject -QtGui.QTextDocument.loadResource?4(int, QUrl) -> QVariant -QtGui.QTextDocument.drawContents?4(QPainter, QRectF rect=QRectF()) -QtGui.QTextDocument.setTextWidth?4(float) -QtGui.QTextDocument.textWidth?4() -> float -QtGui.QTextDocument.idealWidth?4() -> float -QtGui.QTextDocument.adjustSize?4() -QtGui.QTextDocument.size?4() -> QSizeF -QtGui.QTextDocument.blockCount?4() -> int -QtGui.QTextDocument.setDefaultStyleSheet?4(QString) -QtGui.QTextDocument.defaultStyleSheet?4() -> QString -QtGui.QTextDocument.undo?4(QTextCursor) -QtGui.QTextDocument.redo?4(QTextCursor) -QtGui.QTextDocument.maximumBlockCount?4() -> int -QtGui.QTextDocument.setMaximumBlockCount?4(int) -QtGui.QTextDocument.defaultTextOption?4() -> QTextOption -QtGui.QTextDocument.setDefaultTextOption?4(QTextOption) -QtGui.QTextDocument.revision?4() -> int -QtGui.QTextDocument.findBlockByNumber?4(int) -> QTextBlock -QtGui.QTextDocument.findBlockByLineNumber?4(int) -> QTextBlock -QtGui.QTextDocument.firstBlock?4() -> QTextBlock -QtGui.QTextDocument.lastBlock?4() -> QTextBlock -QtGui.QTextDocument.indentWidth?4() -> float -QtGui.QTextDocument.setIndentWidth?4(float) -QtGui.QTextDocument.undoCommandAdded?4() -QtGui.QTextDocument.documentLayoutChanged?4() -QtGui.QTextDocument.characterAt?4(int) -> QChar -QtGui.QTextDocument.documentMargin?4() -> float -QtGui.QTextDocument.setDocumentMargin?4(float) -QtGui.QTextDocument.lineCount?4() -> int -QtGui.QTextDocument.characterCount?4() -> int -QtGui.QTextDocument.availableUndoSteps?4() -> int -QtGui.QTextDocument.availableRedoSteps?4() -> int -QtGui.QTextDocument.clearUndoRedoStacks?4(QTextDocument.Stacks stacks=QTextDocument.UndoAndRedoStacks) -QtGui.QTextDocument.defaultCursorMoveStyle?4() -> Qt.CursorMoveStyle -QtGui.QTextDocument.setDefaultCursorMoveStyle?4(Qt.CursorMoveStyle) -QtGui.QTextDocument.baseUrl?4() -> QUrl -QtGui.QTextDocument.setBaseUrl?4(QUrl) -QtGui.QTextDocument.baseUrlChanged?4(QUrl) -QtGui.QTextDocument.toRawText?4() -> QString -QtGui.QTextDocument.toMarkdown?4(unknown-type features=QTextDocument.MarkdownDialectGitHub) -> QString -QtGui.QTextDocument.setMarkdown?4(QString, unknown-type features=QTextDocument.MarkdownDialectGitHub) -QtGui.QTextDocument.setSuperScriptBaseline?4(float) -QtGui.QTextDocument.superScriptBaseline?4() -> float -QtGui.QTextDocument.setSubScriptBaseline?4(float) -QtGui.QTextDocument.subScriptBaseline?4() -> float -QtGui.QTextDocument.setBaselineOffset?4(float) -QtGui.QTextDocument.baselineOffset?4() -> float -QtGui.QTextDocument.resourceProvider?4() -> Callable[..., None] -QtGui.QTextDocument.setResourceProvider?4(Callable[..., None]) -QtGui.QTextDocument.defaultResourceProvider?4() -> Callable[..., None] -QtGui.QTextDocument.setDefaultResourceProvider?4(Callable[..., None]) -QtGui.QTextDocument.setLayoutEnabled?4(bool) -QtGui.QTextDocument.isLayoutEnabled?4() -> bool -QtGui.QTextDocumentFragment?1() -QtGui.QTextDocumentFragment.__init__?1(self) -QtGui.QTextDocumentFragment?1(QTextDocument) -QtGui.QTextDocumentFragment.__init__?1(self, QTextDocument) -QtGui.QTextDocumentFragment?1(QTextCursor) -QtGui.QTextDocumentFragment.__init__?1(self, QTextCursor) -QtGui.QTextDocumentFragment?1(QTextDocumentFragment) -QtGui.QTextDocumentFragment.__init__?1(self, QTextDocumentFragment) -QtGui.QTextDocumentFragment.isEmpty?4() -> bool -QtGui.QTextDocumentFragment.toPlainText?4() -> QString -QtGui.QTextDocumentFragment.toHtml?4() -> QString -QtGui.QTextDocumentFragment.fromPlainText?4(QString) -> QTextDocumentFragment -QtGui.QTextDocumentFragment.fromHtml?4(QString, QTextDocument resourceProvider=None) -> QTextDocumentFragment -QtGui.QTextDocumentFragment.toRawText?4() -> QString -QtGui.QTextDocumentFragment.toMarkdown?4(unknown-type features=QTextDocument.MarkdownDialectGitHub) -> QString -QtGui.QTextDocumentFragment.fromMarkdown?4(QString, unknown-type features=QTextDocument.MarkdownDialectGitHub) -> QTextDocumentFragment -QtGui.QTextDocumentWriter?1() -QtGui.QTextDocumentWriter.__init__?1(self) -QtGui.QTextDocumentWriter?1(QIODevice, QByteArray) -QtGui.QTextDocumentWriter.__init__?1(self, QIODevice, QByteArray) -QtGui.QTextDocumentWriter?1(QString, QByteArray format=QByteArray()) -QtGui.QTextDocumentWriter.__init__?1(self, QString, QByteArray format=QByteArray()) -QtGui.QTextDocumentWriter.setFormat?4(QByteArray) -QtGui.QTextDocumentWriter.format?4() -> QByteArray -QtGui.QTextDocumentWriter.setDevice?4(QIODevice) -QtGui.QTextDocumentWriter.device?4() -> QIODevice -QtGui.QTextDocumentWriter.setFileName?4(QString) -QtGui.QTextDocumentWriter.fileName?4() -> QString -QtGui.QTextDocumentWriter.write?4(QTextDocument) -> bool -QtGui.QTextDocumentWriter.write?4(QTextDocumentFragment) -> bool -QtGui.QTextDocumentWriter.supportedDocumentFormats?4() -> unknown-type -QtGui.QTextLength.Type?10 -QtGui.QTextLength.Type.VariableLength?10 -QtGui.QTextLength.Type.FixedLength?10 -QtGui.QTextLength.Type.PercentageLength?10 -QtGui.QTextLength?1() -QtGui.QTextLength.__init__?1(self) -QtGui.QTextLength?1(QTextLength.Type, float) -QtGui.QTextLength.__init__?1(self, QTextLength.Type, float) -QtGui.QTextLength?1(QVariant) -QtGui.QTextLength.__init__?1(self, QVariant) -QtGui.QTextLength?1(QTextLength) -QtGui.QTextLength.__init__?1(self, QTextLength) -QtGui.QTextLength.type?4() -> QTextLength.Type -QtGui.QTextLength.value?4(float) -> float -QtGui.QTextLength.rawValue?4() -> float -QtGui.QTextFormat.Property?10 -QtGui.QTextFormat.Property.ObjectIndex?10 -QtGui.QTextFormat.Property.CssFloat?10 -QtGui.QTextFormat.Property.LayoutDirection?10 -QtGui.QTextFormat.Property.OutlinePen?10 -QtGui.QTextFormat.Property.BackgroundBrush?10 -QtGui.QTextFormat.Property.ForegroundBrush?10 -QtGui.QTextFormat.Property.BlockAlignment?10 -QtGui.QTextFormat.Property.BlockTopMargin?10 -QtGui.QTextFormat.Property.BlockBottomMargin?10 -QtGui.QTextFormat.Property.BlockLeftMargin?10 -QtGui.QTextFormat.Property.BlockRightMargin?10 -QtGui.QTextFormat.Property.TextIndent?10 -QtGui.QTextFormat.Property.BlockIndent?10 -QtGui.QTextFormat.Property.BlockNonBreakableLines?10 -QtGui.QTextFormat.Property.BlockTrailingHorizontalRulerWidth?10 -QtGui.QTextFormat.Property.FontPointSize?10 -QtGui.QTextFormat.Property.FontSizeAdjustment?10 -QtGui.QTextFormat.Property.FontSizeIncrement?10 -QtGui.QTextFormat.Property.FontWeight?10 -QtGui.QTextFormat.Property.FontItalic?10 -QtGui.QTextFormat.Property.FontUnderline?10 -QtGui.QTextFormat.Property.FontOverline?10 -QtGui.QTextFormat.Property.FontStrikeOut?10 -QtGui.QTextFormat.Property.FontFixedPitch?10 -QtGui.QTextFormat.Property.FontPixelSize?10 -QtGui.QTextFormat.Property.TextUnderlineColor?10 -QtGui.QTextFormat.Property.TextVerticalAlignment?10 -QtGui.QTextFormat.Property.TextOutline?10 -QtGui.QTextFormat.Property.IsAnchor?10 -QtGui.QTextFormat.Property.AnchorHref?10 -QtGui.QTextFormat.Property.AnchorName?10 -QtGui.QTextFormat.Property.ObjectType?10 -QtGui.QTextFormat.Property.ListStyle?10 -QtGui.QTextFormat.Property.ListIndent?10 -QtGui.QTextFormat.Property.FrameBorder?10 -QtGui.QTextFormat.Property.FrameMargin?10 -QtGui.QTextFormat.Property.FramePadding?10 -QtGui.QTextFormat.Property.FrameWidth?10 -QtGui.QTextFormat.Property.FrameHeight?10 -QtGui.QTextFormat.Property.TableColumns?10 -QtGui.QTextFormat.Property.TableColumnWidthConstraints?10 -QtGui.QTextFormat.Property.TableCellSpacing?10 -QtGui.QTextFormat.Property.TableCellPadding?10 -QtGui.QTextFormat.Property.TableCellRowSpan?10 -QtGui.QTextFormat.Property.TableCellColumnSpan?10 -QtGui.QTextFormat.Property.ImageName?10 -QtGui.QTextFormat.Property.ImageWidth?10 -QtGui.QTextFormat.Property.ImageHeight?10 -QtGui.QTextFormat.Property.TextUnderlineStyle?10 -QtGui.QTextFormat.Property.TableHeaderRowCount?10 -QtGui.QTextFormat.Property.FullWidthSelection?10 -QtGui.QTextFormat.Property.PageBreakPolicy?10 -QtGui.QTextFormat.Property.TextToolTip?10 -QtGui.QTextFormat.Property.FrameTopMargin?10 -QtGui.QTextFormat.Property.FrameBottomMargin?10 -QtGui.QTextFormat.Property.FrameLeftMargin?10 -QtGui.QTextFormat.Property.FrameRightMargin?10 -QtGui.QTextFormat.Property.FrameBorderBrush?10 -QtGui.QTextFormat.Property.FrameBorderStyle?10 -QtGui.QTextFormat.Property.BackgroundImageUrl?10 -QtGui.QTextFormat.Property.TabPositions?10 -QtGui.QTextFormat.Property.FirstFontProperty?10 -QtGui.QTextFormat.Property.FontCapitalization?10 -QtGui.QTextFormat.Property.FontLetterSpacing?10 -QtGui.QTextFormat.Property.FontWordSpacing?10 -QtGui.QTextFormat.Property.LastFontProperty?10 -QtGui.QTextFormat.Property.TableCellTopPadding?10 -QtGui.QTextFormat.Property.TableCellBottomPadding?10 -QtGui.QTextFormat.Property.TableCellLeftPadding?10 -QtGui.QTextFormat.Property.TableCellRightPadding?10 -QtGui.QTextFormat.Property.FontStyleHint?10 -QtGui.QTextFormat.Property.FontStyleStrategy?10 -QtGui.QTextFormat.Property.FontKerning?10 -QtGui.QTextFormat.Property.LineHeight?10 -QtGui.QTextFormat.Property.LineHeightType?10 -QtGui.QTextFormat.Property.FontHintingPreference?10 -QtGui.QTextFormat.Property.ListNumberPrefix?10 -QtGui.QTextFormat.Property.ListNumberSuffix?10 -QtGui.QTextFormat.Property.FontStretch?10 -QtGui.QTextFormat.Property.FontLetterSpacingType?10 -QtGui.QTextFormat.Property.HeadingLevel?10 -QtGui.QTextFormat.Property.ImageQuality?10 -QtGui.QTextFormat.Property.FontFamilies?10 -QtGui.QTextFormat.Property.FontStyleName?10 -QtGui.QTextFormat.Property.BlockQuoteLevel?10 -QtGui.QTextFormat.Property.BlockCodeLanguage?10 -QtGui.QTextFormat.Property.BlockCodeFence?10 -QtGui.QTextFormat.Property.BlockMarker?10 -QtGui.QTextFormat.Property.TableBorderCollapse?10 -QtGui.QTextFormat.Property.TableCellTopBorder?10 -QtGui.QTextFormat.Property.TableCellBottomBorder?10 -QtGui.QTextFormat.Property.TableCellLeftBorder?10 -QtGui.QTextFormat.Property.TableCellRightBorder?10 -QtGui.QTextFormat.Property.TableCellTopBorderStyle?10 -QtGui.QTextFormat.Property.TableCellBottomBorderStyle?10 -QtGui.QTextFormat.Property.TableCellLeftBorderStyle?10 -QtGui.QTextFormat.Property.TableCellRightBorderStyle?10 -QtGui.QTextFormat.Property.TableCellTopBorderBrush?10 -QtGui.QTextFormat.Property.TableCellBottomBorderBrush?10 -QtGui.QTextFormat.Property.TableCellLeftBorderBrush?10 -QtGui.QTextFormat.Property.TableCellRightBorderBrush?10 -QtGui.QTextFormat.Property.ImageTitle?10 -QtGui.QTextFormat.Property.ImageAltText?10 -QtGui.QTextFormat.Property.TextSuperScriptBaseline?10 -QtGui.QTextFormat.Property.TextSubScriptBaseline?10 -QtGui.QTextFormat.Property.TextBaselineOffset?10 -QtGui.QTextFormat.Property.OldFontLetterSpacingType?10 -QtGui.QTextFormat.Property.OldFontStretch?10 -QtGui.QTextFormat.Property.OldTextUnderlineColor?10 -QtGui.QTextFormat.Property.OldFontFamily?10 -QtGui.QTextFormat.Property.ListStart?10 -QtGui.QTextFormat.Property.UserProperty?10 -QtGui.QTextFormat.PageBreakFlag?10 -QtGui.QTextFormat.PageBreakFlag.PageBreak_Auto?10 -QtGui.QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore?10 -QtGui.QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter?10 -QtGui.QTextFormat.ObjectTypes?10 -QtGui.QTextFormat.ObjectTypes.NoObject?10 -QtGui.QTextFormat.ObjectTypes.ImageObject?10 -QtGui.QTextFormat.ObjectTypes.TableObject?10 -QtGui.QTextFormat.ObjectTypes.TableCellObject?10 -QtGui.QTextFormat.ObjectTypes.UserObject?10 -QtGui.QTextFormat.FormatType?10 -QtGui.QTextFormat.FormatType.InvalidFormat?10 -QtGui.QTextFormat.FormatType.BlockFormat?10 -QtGui.QTextFormat.FormatType.CharFormat?10 -QtGui.QTextFormat.FormatType.ListFormat?10 -QtGui.QTextFormat.FormatType.FrameFormat?10 -QtGui.QTextFormat.FormatType.UserFormat?10 -QtGui.QTextFormat?1() -QtGui.QTextFormat.__init__?1(self) -QtGui.QTextFormat?1(int) -QtGui.QTextFormat.__init__?1(self, int) -QtGui.QTextFormat?1(QTextFormat) -QtGui.QTextFormat.__init__?1(self, QTextFormat) -QtGui.QTextFormat?1(QVariant) -QtGui.QTextFormat.__init__?1(self, QVariant) -QtGui.QTextFormat.merge?4(QTextFormat) -QtGui.QTextFormat.isValid?4() -> bool -QtGui.QTextFormat.type?4() -> int -QtGui.QTextFormat.objectIndex?4() -> int -QtGui.QTextFormat.setObjectIndex?4(int) -QtGui.QTextFormat.property?4(int) -> QVariant -QtGui.QTextFormat.setProperty?4(int, unknown-type) -QtGui.QTextFormat.setProperty?4(int, QVariant) -QtGui.QTextFormat.clearProperty?4(int) -QtGui.QTextFormat.hasProperty?4(int) -> bool -QtGui.QTextFormat.boolProperty?4(int) -> bool -QtGui.QTextFormat.intProperty?4(int) -> int -QtGui.QTextFormat.doubleProperty?4(int) -> float -QtGui.QTextFormat.stringProperty?4(int) -> QString -QtGui.QTextFormat.colorProperty?4(int) -> QColor -QtGui.QTextFormat.penProperty?4(int) -> QPen -QtGui.QTextFormat.brushProperty?4(int) -> QBrush -QtGui.QTextFormat.lengthProperty?4(int) -> QTextLength -QtGui.QTextFormat.lengthVectorProperty?4(int) -> unknown-type -QtGui.QTextFormat.properties?4() -> unknown-type -QtGui.QTextFormat.objectType?4() -> int -QtGui.QTextFormat.isCharFormat?4() -> bool -QtGui.QTextFormat.isBlockFormat?4() -> bool -QtGui.QTextFormat.isListFormat?4() -> bool -QtGui.QTextFormat.isFrameFormat?4() -> bool -QtGui.QTextFormat.isImageFormat?4() -> bool -QtGui.QTextFormat.isTableFormat?4() -> bool -QtGui.QTextFormat.toBlockFormat?4() -> QTextBlockFormat -QtGui.QTextFormat.toCharFormat?4() -> QTextCharFormat -QtGui.QTextFormat.toListFormat?4() -> QTextListFormat -QtGui.QTextFormat.toTableFormat?4() -> QTextTableFormat -QtGui.QTextFormat.toFrameFormat?4() -> QTextFrameFormat -QtGui.QTextFormat.toImageFormat?4() -> QTextImageFormat -QtGui.QTextFormat.setLayoutDirection?4(Qt.LayoutDirection) -QtGui.QTextFormat.layoutDirection?4() -> Qt.LayoutDirection -QtGui.QTextFormat.setBackground?4(QBrush) -QtGui.QTextFormat.background?4() -> QBrush -QtGui.QTextFormat.clearBackground?4() -QtGui.QTextFormat.setForeground?4(QBrush) -QtGui.QTextFormat.foreground?4() -> QBrush -QtGui.QTextFormat.clearForeground?4() -QtGui.QTextFormat.setObjectType?4(int) -QtGui.QTextFormat.propertyCount?4() -> int -QtGui.QTextFormat.isTableCellFormat?4() -> bool -QtGui.QTextFormat.toTableCellFormat?4() -> QTextTableCellFormat -QtGui.QTextFormat.swap?4(QTextFormat) -QtGui.QTextFormat.isEmpty?4() -> bool -QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior?10 -QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesSpecifiedOnly?10 -QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesAll?10 -QtGui.QTextCharFormat.UnderlineStyle?10 -QtGui.QTextCharFormat.UnderlineStyle.NoUnderline?10 -QtGui.QTextCharFormat.UnderlineStyle.SingleUnderline?10 -QtGui.QTextCharFormat.UnderlineStyle.DashUnderline?10 -QtGui.QTextCharFormat.UnderlineStyle.DotLine?10 -QtGui.QTextCharFormat.UnderlineStyle.DashDotLine?10 -QtGui.QTextCharFormat.UnderlineStyle.DashDotDotLine?10 -QtGui.QTextCharFormat.UnderlineStyle.WaveUnderline?10 -QtGui.QTextCharFormat.UnderlineStyle.SpellCheckUnderline?10 -QtGui.QTextCharFormat.VerticalAlignment?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignNormal?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignSuperScript?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignSubScript?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignMiddle?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignTop?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignBottom?10 -QtGui.QTextCharFormat.VerticalAlignment.AlignBaseline?10 -QtGui.QTextCharFormat?1() -QtGui.QTextCharFormat.__init__?1(self) -QtGui.QTextCharFormat?1(QTextCharFormat) -QtGui.QTextCharFormat.__init__?1(self, QTextCharFormat) -QtGui.QTextCharFormat.isValid?4() -> bool -QtGui.QTextCharFormat.setFont?4(QFont, QTextCharFormat.FontPropertiesInheritanceBehavior behavior=QTextCharFormat.FontPropertiesAll) -QtGui.QTextCharFormat.font?4() -> QFont -QtGui.QTextCharFormat.setFontFamily?4(QString) -QtGui.QTextCharFormat.fontFamily?4() -> QString -QtGui.QTextCharFormat.setFontPointSize?4(float) -QtGui.QTextCharFormat.fontPointSize?4() -> float -QtGui.QTextCharFormat.setFontWeight?4(int) -QtGui.QTextCharFormat.fontWeight?4() -> int -QtGui.QTextCharFormat.setFontItalic?4(bool) -QtGui.QTextCharFormat.fontItalic?4() -> bool -QtGui.QTextCharFormat.setFontUnderline?4(bool) -QtGui.QTextCharFormat.fontUnderline?4() -> bool -QtGui.QTextCharFormat.setFontOverline?4(bool) -QtGui.QTextCharFormat.fontOverline?4() -> bool -QtGui.QTextCharFormat.setFontStrikeOut?4(bool) -QtGui.QTextCharFormat.fontStrikeOut?4() -> bool -QtGui.QTextCharFormat.setUnderlineColor?4(QColor) -QtGui.QTextCharFormat.underlineColor?4() -> QColor -QtGui.QTextCharFormat.setFontFixedPitch?4(bool) -QtGui.QTextCharFormat.fontFixedPitch?4() -> bool -QtGui.QTextCharFormat.setVerticalAlignment?4(QTextCharFormat.VerticalAlignment) -QtGui.QTextCharFormat.verticalAlignment?4() -> QTextCharFormat.VerticalAlignment -QtGui.QTextCharFormat.setAnchor?4(bool) -QtGui.QTextCharFormat.isAnchor?4() -> bool -QtGui.QTextCharFormat.setAnchorHref?4(QString) -QtGui.QTextCharFormat.anchorHref?4() -> QString -QtGui.QTextCharFormat.tableCellRowSpan?4() -> int -QtGui.QTextCharFormat.tableCellColumnSpan?4() -> int -QtGui.QTextCharFormat.setTableCellRowSpan?4(int) -QtGui.QTextCharFormat.setTableCellColumnSpan?4(int) -QtGui.QTextCharFormat.setTextOutline?4(QPen) -QtGui.QTextCharFormat.textOutline?4() -> QPen -QtGui.QTextCharFormat.setUnderlineStyle?4(QTextCharFormat.UnderlineStyle) -QtGui.QTextCharFormat.underlineStyle?4() -> QTextCharFormat.UnderlineStyle -QtGui.QTextCharFormat.setToolTip?4(QString) -QtGui.QTextCharFormat.toolTip?4() -> QString -QtGui.QTextCharFormat.setAnchorNames?4(QStringList) -QtGui.QTextCharFormat.anchorNames?4() -> QStringList -QtGui.QTextCharFormat.setFontCapitalization?4(QFont.Capitalization) -QtGui.QTextCharFormat.fontCapitalization?4() -> QFont.Capitalization -QtGui.QTextCharFormat.setFontLetterSpacing?4(float) -QtGui.QTextCharFormat.fontLetterSpacing?4() -> float -QtGui.QTextCharFormat.setFontWordSpacing?4(float) -QtGui.QTextCharFormat.fontWordSpacing?4() -> float -QtGui.QTextCharFormat.setFontStyleHint?4(QFont.StyleHint, QFont.StyleStrategy strategy=QFont.PreferDefault) -QtGui.QTextCharFormat.setFontStyleStrategy?4(QFont.StyleStrategy) -QtGui.QTextCharFormat.fontStyleHint?4() -> QFont.StyleHint -QtGui.QTextCharFormat.fontStyleStrategy?4() -> QFont.StyleStrategy -QtGui.QTextCharFormat.setFontKerning?4(bool) -QtGui.QTextCharFormat.fontKerning?4() -> bool -QtGui.QTextCharFormat.setFontHintingPreference?4(QFont.HintingPreference) -QtGui.QTextCharFormat.fontHintingPreference?4() -> QFont.HintingPreference -QtGui.QTextCharFormat.fontStretch?4() -> int -QtGui.QTextCharFormat.setFontStretch?4(int) -QtGui.QTextCharFormat.setFontLetterSpacingType?4(QFont.SpacingType) -QtGui.QTextCharFormat.fontLetterSpacingType?4() -> QFont.SpacingType -QtGui.QTextCharFormat.setFontFamilies?4(QStringList) -QtGui.QTextCharFormat.fontFamilies?4() -> QVariant -QtGui.QTextCharFormat.setFontStyleName?4(QString) -QtGui.QTextCharFormat.fontStyleName?4() -> QVariant -QtGui.QTextCharFormat.setSuperScriptBaseline?4(float) -QtGui.QTextCharFormat.superScriptBaseline?4() -> float -QtGui.QTextCharFormat.setSubScriptBaseline?4(float) -QtGui.QTextCharFormat.subScriptBaseline?4() -> float -QtGui.QTextCharFormat.setBaselineOffset?4(float) -QtGui.QTextCharFormat.baselineOffset?4() -> float -QtGui.QTextBlockFormat.MarkerType?10 -QtGui.QTextBlockFormat.MarkerType.NoMarker?10 -QtGui.QTextBlockFormat.MarkerType.Unchecked?10 -QtGui.QTextBlockFormat.MarkerType.Checked?10 -QtGui.QTextBlockFormat.LineHeightTypes?10 -QtGui.QTextBlockFormat.LineHeightTypes.SingleHeight?10 -QtGui.QTextBlockFormat.LineHeightTypes.ProportionalHeight?10 -QtGui.QTextBlockFormat.LineHeightTypes.FixedHeight?10 -QtGui.QTextBlockFormat.LineHeightTypes.MinimumHeight?10 -QtGui.QTextBlockFormat.LineHeightTypes.LineDistanceHeight?10 -QtGui.QTextBlockFormat?1() -QtGui.QTextBlockFormat.__init__?1(self) -QtGui.QTextBlockFormat?1(QTextBlockFormat) -QtGui.QTextBlockFormat.__init__?1(self, QTextBlockFormat) -QtGui.QTextBlockFormat.isValid?4() -> bool -QtGui.QTextBlockFormat.alignment?4() -> unknown-type -QtGui.QTextBlockFormat.setTopMargin?4(float) -QtGui.QTextBlockFormat.topMargin?4() -> float -QtGui.QTextBlockFormat.setBottomMargin?4(float) -QtGui.QTextBlockFormat.bottomMargin?4() -> float -QtGui.QTextBlockFormat.setLeftMargin?4(float) -QtGui.QTextBlockFormat.leftMargin?4() -> float -QtGui.QTextBlockFormat.setRightMargin?4(float) -QtGui.QTextBlockFormat.rightMargin?4() -> float -QtGui.QTextBlockFormat.setTextIndent?4(float) -QtGui.QTextBlockFormat.textIndent?4() -> float -QtGui.QTextBlockFormat.indent?4() -> int -QtGui.QTextBlockFormat.setNonBreakableLines?4(bool) -QtGui.QTextBlockFormat.nonBreakableLines?4() -> bool -QtGui.QTextBlockFormat.setAlignment?4(unknown-type) -QtGui.QTextBlockFormat.setIndent?4(int) -QtGui.QTextBlockFormat.setPageBreakPolicy?4(unknown-type) -QtGui.QTextBlockFormat.pageBreakPolicy?4() -> unknown-type -QtGui.QTextBlockFormat.setTabPositions?4(unknown-type) -QtGui.QTextBlockFormat.tabPositions?4() -> unknown-type -QtGui.QTextBlockFormat.setLineHeight?4(float, int) -QtGui.QTextBlockFormat.lineHeight?4() -> float -QtGui.QTextBlockFormat.lineHeight?4(float, float scaling=1) -> float -QtGui.QTextBlockFormat.lineHeightType?4() -> int -QtGui.QTextBlockFormat.setHeadingLevel?4(int) -QtGui.QTextBlockFormat.headingLevel?4() -> int -QtGui.QTextBlockFormat.setMarker?4(QTextBlockFormat.MarkerType) -QtGui.QTextBlockFormat.marker?4() -> QTextBlockFormat.MarkerType -QtGui.QTextListFormat.Style?10 -QtGui.QTextListFormat.Style.ListDisc?10 -QtGui.QTextListFormat.Style.ListCircle?10 -QtGui.QTextListFormat.Style.ListSquare?10 -QtGui.QTextListFormat.Style.ListDecimal?10 -QtGui.QTextListFormat.Style.ListLowerAlpha?10 -QtGui.QTextListFormat.Style.ListUpperAlpha?10 -QtGui.QTextListFormat.Style.ListLowerRoman?10 -QtGui.QTextListFormat.Style.ListUpperRoman?10 -QtGui.QTextListFormat?1() -QtGui.QTextListFormat.__init__?1(self) -QtGui.QTextListFormat?1(QTextListFormat) -QtGui.QTextListFormat.__init__?1(self, QTextListFormat) -QtGui.QTextListFormat.isValid?4() -> bool -QtGui.QTextListFormat.style?4() -> QTextListFormat.Style -QtGui.QTextListFormat.indent?4() -> int -QtGui.QTextListFormat.setStyle?4(QTextListFormat.Style) -QtGui.QTextListFormat.setIndent?4(int) -QtGui.QTextListFormat.numberPrefix?4() -> QString -QtGui.QTextListFormat.numberSuffix?4() -> QString -QtGui.QTextListFormat.setNumberPrefix?4(QString) -QtGui.QTextListFormat.setNumberSuffix?4(QString) -QtGui.QTextListFormat.setStart?4(int) -QtGui.QTextListFormat.start?4() -> int -QtGui.QTextImageFormat?1() -QtGui.QTextImageFormat.__init__?1(self) -QtGui.QTextImageFormat?1(QTextImageFormat) -QtGui.QTextImageFormat.__init__?1(self, QTextImageFormat) -QtGui.QTextImageFormat.isValid?4() -> bool -QtGui.QTextImageFormat.name?4() -> QString -QtGui.QTextImageFormat.width?4() -> float -QtGui.QTextImageFormat.height?4() -> float -QtGui.QTextImageFormat.quality?4() -> int -QtGui.QTextImageFormat.setName?4(QString) -QtGui.QTextImageFormat.setWidth?4(float) -QtGui.QTextImageFormat.setHeight?4(float) -QtGui.QTextImageFormat.setQuality?4(int quality=100) -QtGui.QTextFrameFormat.BorderStyle?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_None?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Dotted?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Dashed?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Solid?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Double?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_DotDash?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_DotDotDash?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Groove?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Ridge?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Inset?10 -QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Outset?10 -QtGui.QTextFrameFormat.Position?10 -QtGui.QTextFrameFormat.Position.InFlow?10 -QtGui.QTextFrameFormat.Position.FloatLeft?10 -QtGui.QTextFrameFormat.Position.FloatRight?10 -QtGui.QTextFrameFormat?1() -QtGui.QTextFrameFormat.__init__?1(self) -QtGui.QTextFrameFormat?1(QTextFrameFormat) -QtGui.QTextFrameFormat.__init__?1(self, QTextFrameFormat) -QtGui.QTextFrameFormat.isValid?4() -> bool -QtGui.QTextFrameFormat.setPosition?4(QTextFrameFormat.Position) -QtGui.QTextFrameFormat.position?4() -> QTextFrameFormat.Position -QtGui.QTextFrameFormat.border?4() -> float -QtGui.QTextFrameFormat.margin?4() -> float -QtGui.QTextFrameFormat.padding?4() -> float -QtGui.QTextFrameFormat.setWidth?4(QTextLength) -QtGui.QTextFrameFormat.width?4() -> QTextLength -QtGui.QTextFrameFormat.height?4() -> QTextLength -QtGui.QTextFrameFormat.setBorder?4(float) -QtGui.QTextFrameFormat.setMargin?4(float) -QtGui.QTextFrameFormat.setPadding?4(float) -QtGui.QTextFrameFormat.setWidth?4(float) -QtGui.QTextFrameFormat.setHeight?4(float) -QtGui.QTextFrameFormat.setHeight?4(QTextLength) -QtGui.QTextFrameFormat.setPageBreakPolicy?4(unknown-type) -QtGui.QTextFrameFormat.pageBreakPolicy?4() -> unknown-type -QtGui.QTextFrameFormat.setBorderBrush?4(QBrush) -QtGui.QTextFrameFormat.borderBrush?4() -> QBrush -QtGui.QTextFrameFormat.setBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextFrameFormat.borderStyle?4() -> QTextFrameFormat.BorderStyle -QtGui.QTextFrameFormat.topMargin?4() -> float -QtGui.QTextFrameFormat.bottomMargin?4() -> float -QtGui.QTextFrameFormat.leftMargin?4() -> float -QtGui.QTextFrameFormat.rightMargin?4() -> float -QtGui.QTextFrameFormat.setTopMargin?4(float) -QtGui.QTextFrameFormat.setBottomMargin?4(float) -QtGui.QTextFrameFormat.setLeftMargin?4(float) -QtGui.QTextFrameFormat.setRightMargin?4(float) -QtGui.QTextTableFormat?1() -QtGui.QTextTableFormat.__init__?1(self) -QtGui.QTextTableFormat?1(QTextTableFormat) -QtGui.QTextTableFormat.__init__?1(self, QTextTableFormat) -QtGui.QTextTableFormat.isValid?4() -> bool -QtGui.QTextTableFormat.columns?4() -> int -QtGui.QTextTableFormat.setColumnWidthConstraints?4(unknown-type) -QtGui.QTextTableFormat.columnWidthConstraints?4() -> unknown-type -QtGui.QTextTableFormat.clearColumnWidthConstraints?4() -QtGui.QTextTableFormat.cellSpacing?4() -> float -QtGui.QTextTableFormat.setCellSpacing?4(float) -QtGui.QTextTableFormat.cellPadding?4() -> float -QtGui.QTextTableFormat.alignment?4() -> unknown-type -QtGui.QTextTableFormat.setColumns?4(int) -QtGui.QTextTableFormat.setCellPadding?4(float) -QtGui.QTextTableFormat.setAlignment?4(unknown-type) -QtGui.QTextTableFormat.setHeaderRowCount?4(int) -QtGui.QTextTableFormat.headerRowCount?4() -> int -QtGui.QTextTableFormat.setBorderCollapse?4(bool) -QtGui.QTextTableFormat.borderCollapse?4() -> bool -QtGui.QTextTableCellFormat?1() -QtGui.QTextTableCellFormat.__init__?1(self) -QtGui.QTextTableCellFormat?1(QTextTableCellFormat) -QtGui.QTextTableCellFormat.__init__?1(self, QTextTableCellFormat) -QtGui.QTextTableCellFormat.isValid?4() -> bool -QtGui.QTextTableCellFormat.setTopPadding?4(float) -QtGui.QTextTableCellFormat.topPadding?4() -> float -QtGui.QTextTableCellFormat.setBottomPadding?4(float) -QtGui.QTextTableCellFormat.bottomPadding?4() -> float -QtGui.QTextTableCellFormat.setLeftPadding?4(float) -QtGui.QTextTableCellFormat.leftPadding?4() -> float -QtGui.QTextTableCellFormat.setRightPadding?4(float) -QtGui.QTextTableCellFormat.rightPadding?4() -> float -QtGui.QTextTableCellFormat.setPadding?4(float) -QtGui.QTextTableCellFormat.setTopBorder?4(float) -QtGui.QTextTableCellFormat.topBorder?4() -> float -QtGui.QTextTableCellFormat.setBottomBorder?4(float) -QtGui.QTextTableCellFormat.bottomBorder?4() -> float -QtGui.QTextTableCellFormat.setLeftBorder?4(float) -QtGui.QTextTableCellFormat.leftBorder?4() -> float -QtGui.QTextTableCellFormat.setRightBorder?4(float) -QtGui.QTextTableCellFormat.rightBorder?4() -> float -QtGui.QTextTableCellFormat.setBorder?4(float) -QtGui.QTextTableCellFormat.setTopBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextTableCellFormat.topBorderStyle?4() -> QTextFrameFormat.BorderStyle -QtGui.QTextTableCellFormat.setBottomBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextTableCellFormat.bottomBorderStyle?4() -> QTextFrameFormat.BorderStyle -QtGui.QTextTableCellFormat.setLeftBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextTableCellFormat.leftBorderStyle?4() -> QTextFrameFormat.BorderStyle -QtGui.QTextTableCellFormat.setRightBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextTableCellFormat.rightBorderStyle?4() -> QTextFrameFormat.BorderStyle -QtGui.QTextTableCellFormat.setBorderStyle?4(QTextFrameFormat.BorderStyle) -QtGui.QTextTableCellFormat.setTopBorderBrush?4(QBrush) -QtGui.QTextTableCellFormat.topBorderBrush?4() -> QBrush -QtGui.QTextTableCellFormat.setBottomBorderBrush?4(QBrush) -QtGui.QTextTableCellFormat.bottomBorderBrush?4() -> QBrush -QtGui.QTextTableCellFormat.setLeftBorderBrush?4(QBrush) -QtGui.QTextTableCellFormat.leftBorderBrush?4() -> QBrush -QtGui.QTextTableCellFormat.setRightBorderBrush?4(QBrush) -QtGui.QTextTableCellFormat.rightBorderBrush?4() -> QBrush -QtGui.QTextTableCellFormat.setBorderBrush?4(QBrush) -QtGui.QTextInlineObject?1() -QtGui.QTextInlineObject.__init__?1(self) -QtGui.QTextInlineObject?1(QTextInlineObject) -QtGui.QTextInlineObject.__init__?1(self, QTextInlineObject) -QtGui.QTextInlineObject.isValid?4() -> bool -QtGui.QTextInlineObject.rect?4() -> QRectF -QtGui.QTextInlineObject.width?4() -> float -QtGui.QTextInlineObject.ascent?4() -> float -QtGui.QTextInlineObject.descent?4() -> float -QtGui.QTextInlineObject.height?4() -> float -QtGui.QTextInlineObject.textDirection?4() -> Qt.LayoutDirection -QtGui.QTextInlineObject.setWidth?4(float) -QtGui.QTextInlineObject.setAscent?4(float) -QtGui.QTextInlineObject.setDescent?4(float) -QtGui.QTextInlineObject.textPosition?4() -> int -QtGui.QTextInlineObject.formatIndex?4() -> int -QtGui.QTextInlineObject.format?4() -> QTextFormat -QtGui.QTextLayout.GlyphRunRetrievalFlag?10 -QtGui.QTextLayout.GlyphRunRetrievalFlag.RetrieveGlyphIndexes?10 -QtGui.QTextLayout.GlyphRunRetrievalFlag.RetrieveGlyphPositions?10 -QtGui.QTextLayout.GlyphRunRetrievalFlag.RetrieveStringIndexes?10 -QtGui.QTextLayout.GlyphRunRetrievalFlag.RetrieveString?10 -QtGui.QTextLayout.GlyphRunRetrievalFlag.RetrieveAll?10 -QtGui.QTextLayout.CursorMode?10 -QtGui.QTextLayout.CursorMode.SkipCharacters?10 -QtGui.QTextLayout.CursorMode.SkipWords?10 -QtGui.QTextLayout?1() -QtGui.QTextLayout.__init__?1(self) -QtGui.QTextLayout?1(QString) -QtGui.QTextLayout.__init__?1(self, QString) -QtGui.QTextLayout?1(QString, QFont, QPaintDevice paintdevice=None) -QtGui.QTextLayout.__init__?1(self, QString, QFont, QPaintDevice paintdevice=None) -QtGui.QTextLayout?1(QTextBlock) -QtGui.QTextLayout.__init__?1(self, QTextBlock) -QtGui.QTextLayout.setFont?4(QFont) -QtGui.QTextLayout.font?4() -> QFont -QtGui.QTextLayout.setText?4(QString) -QtGui.QTextLayout.text?4() -> QString -QtGui.QTextLayout.setTextOption?4(QTextOption) -QtGui.QTextLayout.textOption?4() -> QTextOption -QtGui.QTextLayout.setPreeditArea?4(int, QString) -QtGui.QTextLayout.preeditAreaPosition?4() -> int -QtGui.QTextLayout.preeditAreaText?4() -> QString -QtGui.QTextLayout.setCacheEnabled?4(bool) -QtGui.QTextLayout.cacheEnabled?4() -> bool -QtGui.QTextLayout.beginLayout?4() -QtGui.QTextLayout.endLayout?4() -QtGui.QTextLayout.createLine?4() -> QTextLine -QtGui.QTextLayout.lineCount?4() -> int -QtGui.QTextLayout.lineAt?4(int) -> QTextLine -QtGui.QTextLayout.lineForTextPosition?4(int) -> QTextLine -QtGui.QTextLayout.isValidCursorPosition?4(int) -> bool -QtGui.QTextLayout.nextCursorPosition?4(int, QTextLayout.CursorMode mode=QTextLayout.SkipCharacters) -> int -QtGui.QTextLayout.previousCursorPosition?4(int, QTextLayout.CursorMode mode=QTextLayout.SkipCharacters) -> int -QtGui.QTextLayout.draw?4(QPainter, QPointF, unknown-type selections=[], QRectF clip=QRectF()) -QtGui.QTextLayout.drawCursor?4(QPainter, QPointF, int) -QtGui.QTextLayout.drawCursor?4(QPainter, QPointF, int, int) -QtGui.QTextLayout.position?4() -> QPointF -QtGui.QTextLayout.setPosition?4(QPointF) -QtGui.QTextLayout.boundingRect?4() -> QRectF -QtGui.QTextLayout.minimumWidth?4() -> float -QtGui.QTextLayout.maximumWidth?4() -> float -QtGui.QTextLayout.clearLayout?4() -QtGui.QTextLayout.setCursorMoveStyle?4(Qt.CursorMoveStyle) -QtGui.QTextLayout.cursorMoveStyle?4() -> Qt.CursorMoveStyle -QtGui.QTextLayout.leftCursorPosition?4(int) -> int -QtGui.QTextLayout.rightCursorPosition?4(int) -> int -QtGui.QTextLayout.glyphRuns?4(int from=-1, int length=-1) -> unknown-type -QtGui.QTextLayout.glyphRuns?4(int, int, unknown-type) -> unknown-type -QtGui.QTextLayout.setFormats?4(unknown-type) -QtGui.QTextLayout.formats?4() -> unknown-type -QtGui.QTextLayout.clearFormats?4() -QtGui.QTextLayout.FormatRange.format?7 -QtGui.QTextLayout.FormatRange.length?7 -QtGui.QTextLayout.FormatRange.start?7 -QtGui.QTextLayout.FormatRange?1() -QtGui.QTextLayout.FormatRange.__init__?1(self) -QtGui.QTextLayout.FormatRange?1(QTextLayout.FormatRange) -QtGui.QTextLayout.FormatRange.__init__?1(self, QTextLayout.FormatRange) -QtGui.QTextLine.CursorPosition?10 -QtGui.QTextLine.CursorPosition.CursorBetweenCharacters?10 -QtGui.QTextLine.CursorPosition.CursorOnCharacter?10 -QtGui.QTextLine.Edge?10 -QtGui.QTextLine.Edge.Leading?10 -QtGui.QTextLine.Edge.Trailing?10 -QtGui.QTextLine?1() -QtGui.QTextLine.__init__?1(self) -QtGui.QTextLine?1(QTextLine) -QtGui.QTextLine.__init__?1(self, QTextLine) -QtGui.QTextLine.isValid?4() -> bool -QtGui.QTextLine.rect?4() -> QRectF -QtGui.QTextLine.x?4() -> float -QtGui.QTextLine.y?4() -> float -QtGui.QTextLine.width?4() -> float -QtGui.QTextLine.ascent?4() -> float -QtGui.QTextLine.descent?4() -> float -QtGui.QTextLine.height?4() -> float -QtGui.QTextLine.naturalTextWidth?4() -> float -QtGui.QTextLine.naturalTextRect?4() -> QRectF -QtGui.QTextLine.cursorToX?4(int, QTextLine.Edge edge=QTextLine.Leading) -> (float, int) -QtGui.QTextLine.xToCursor?4(float, QTextLine.CursorPosition edge=QTextLine.CursorBetweenCharacters) -> int -QtGui.QTextLine.setLineWidth?4(float) -QtGui.QTextLine.setNumColumns?4(int) -QtGui.QTextLine.setNumColumns?4(int, float) -QtGui.QTextLine.setPosition?4(QPointF) -QtGui.QTextLine.textStart?4() -> int -QtGui.QTextLine.textLength?4() -> int -QtGui.QTextLine.lineNumber?4() -> int -QtGui.QTextLine.draw?4(QPainter, QPointF) -QtGui.QTextLine.position?4() -> QPointF -QtGui.QTextLine.leading?4() -> float -QtGui.QTextLine.setLeadingIncluded?4(bool) -QtGui.QTextLine.leadingIncluded?4() -> bool -QtGui.QTextLine.horizontalAdvance?4() -> float -QtGui.QTextLine.glyphRuns?4(int from=-1, int length=-1) -> unknown-type -QtGui.QTextLine.glyphRuns?4(int, int, unknown-type) -> unknown-type -QtGui.QTextObject?1(QTextDocument) -QtGui.QTextObject.__init__?1(self, QTextDocument) -QtGui.QTextObject.setFormat?4(QTextFormat) -QtGui.QTextObject.format?4() -> QTextFormat -QtGui.QTextObject.formatIndex?4() -> int -QtGui.QTextObject.document?4() -> QTextDocument -QtGui.QTextObject.objectIndex?4() -> int -QtGui.QTextBlockGroup?1(QTextDocument) -QtGui.QTextBlockGroup.__init__?1(self, QTextDocument) -QtGui.QTextBlockGroup.blockInserted?4(QTextBlock) -QtGui.QTextBlockGroup.blockRemoved?4(QTextBlock) -QtGui.QTextBlockGroup.blockFormatChanged?4(QTextBlock) -QtGui.QTextBlockGroup.blockList?4() -> unknown-type -QtGui.QTextList?1(QTextDocument) -QtGui.QTextList.__init__?1(self, QTextDocument) -QtGui.QTextList.count?4() -> int -QtGui.QTextList.item?4(int) -> QTextBlock -QtGui.QTextList.itemNumber?4(QTextBlock) -> int -QtGui.QTextList.itemText?4(QTextBlock) -> QString -QtGui.QTextList.removeItem?4(int) -QtGui.QTextList.remove?4(QTextBlock) -QtGui.QTextList.add?4(QTextBlock) -QtGui.QTextList.format?4() -> QTextListFormat -QtGui.QTextList.setFormat?4(QTextListFormat) -QtGui.QTextFrame?1(QTextDocument) -QtGui.QTextFrame.__init__?1(self, QTextDocument) -QtGui.QTextFrame.frameFormat?4() -> QTextFrameFormat -QtGui.QTextFrame.firstCursorPosition?4() -> QTextCursor -QtGui.QTextFrame.lastCursorPosition?4() -> QTextCursor -QtGui.QTextFrame.firstPosition?4() -> int -QtGui.QTextFrame.lastPosition?4() -> int -QtGui.QTextFrame.childFrames?4() -> unknown-type -QtGui.QTextFrame.parentFrame?4() -> QTextFrame -QtGui.QTextFrame.begin?4() -> QTextFrame.iterator -QtGui.QTextFrame.end?4() -> QTextFrame.iterator -QtGui.QTextFrame.setFrameFormat?4(QTextFrameFormat) -QtGui.QTextFrame.iterator?1() -QtGui.QTextFrame.iterator.__init__?1(self) -QtGui.QTextFrame.iterator?1(QTextFrame.iterator) -QtGui.QTextFrame.iterator.__init__?1(self, QTextFrame.iterator) -QtGui.QTextFrame.iterator.parentFrame?4() -> QTextFrame -QtGui.QTextFrame.iterator.currentFrame?4() -> QTextFrame -QtGui.QTextFrame.iterator.currentBlock?4() -> QTextBlock -QtGui.QTextFrame.iterator.atEnd?4() -> bool -QtGui.QTextBlock?1() -QtGui.QTextBlock.__init__?1(self) -QtGui.QTextBlock?1(QTextBlock) -QtGui.QTextBlock.__init__?1(self, QTextBlock) -QtGui.QTextBlock.isValid?4() -> bool -QtGui.QTextBlock.position?4() -> int -QtGui.QTextBlock.length?4() -> int -QtGui.QTextBlock.contains?4(int) -> bool -QtGui.QTextBlock.layout?4() -> QTextLayout -QtGui.QTextBlock.blockFormat?4() -> QTextBlockFormat -QtGui.QTextBlock.blockFormatIndex?4() -> int -QtGui.QTextBlock.charFormat?4() -> QTextCharFormat -QtGui.QTextBlock.charFormatIndex?4() -> int -QtGui.QTextBlock.text?4() -> QString -QtGui.QTextBlock.document?4() -> QTextDocument -QtGui.QTextBlock.textList?4() -> QTextList -QtGui.QTextBlock.begin?4() -> QTextBlock.iterator -QtGui.QTextBlock.end?4() -> QTextBlock.iterator -QtGui.QTextBlock.next?4() -> QTextBlock -QtGui.QTextBlock.previous?4() -> QTextBlock -QtGui.QTextBlock.userData?4() -> QTextBlockUserData -QtGui.QTextBlock.setUserData?4(QTextBlockUserData) -QtGui.QTextBlock.userState?4() -> int -QtGui.QTextBlock.setUserState?4(int) -QtGui.QTextBlock.clearLayout?4() -QtGui.QTextBlock.revision?4() -> int -QtGui.QTextBlock.setRevision?4(int) -QtGui.QTextBlock.isVisible?4() -> bool -QtGui.QTextBlock.setVisible?4(bool) -QtGui.QTextBlock.blockNumber?4() -> int -QtGui.QTextBlock.firstLineNumber?4() -> int -QtGui.QTextBlock.setLineCount?4(int) -QtGui.QTextBlock.lineCount?4() -> int -QtGui.QTextBlock.textDirection?4() -> Qt.LayoutDirection -QtGui.QTextBlock.textFormats?4() -> unknown-type -QtGui.QTextBlock.iterator?1() -QtGui.QTextBlock.iterator.__init__?1(self) -QtGui.QTextBlock.iterator?1(QTextBlock.iterator) -QtGui.QTextBlock.iterator.__init__?1(self, QTextBlock.iterator) -QtGui.QTextBlock.iterator.fragment?4() -> QTextFragment -QtGui.QTextBlock.iterator.atEnd?4() -> bool -QtGui.QTextFragment?1() -QtGui.QTextFragment.__init__?1(self) -QtGui.QTextFragment?1(QTextFragment) -QtGui.QTextFragment.__init__?1(self, QTextFragment) -QtGui.QTextFragment.isValid?4() -> bool -QtGui.QTextFragment.position?4() -> int -QtGui.QTextFragment.length?4() -> int -QtGui.QTextFragment.contains?4(int) -> bool -QtGui.QTextFragment.charFormat?4() -> QTextCharFormat -QtGui.QTextFragment.charFormatIndex?4() -> int -QtGui.QTextFragment.text?4() -> QString -QtGui.QTextFragment.glyphRuns?4(int from=-1, int length=-1) -> unknown-type -QtGui.QTextBlockUserData?1() -QtGui.QTextBlockUserData.__init__?1(self) -QtGui.QTextBlockUserData?1(QTextBlockUserData) -QtGui.QTextBlockUserData.__init__?1(self, QTextBlockUserData) -QtGui.QTextOption.TabType?10 -QtGui.QTextOption.TabType.LeftTab?10 -QtGui.QTextOption.TabType.RightTab?10 -QtGui.QTextOption.TabType.CenterTab?10 -QtGui.QTextOption.TabType.DelimiterTab?10 -QtGui.QTextOption.Flag?10 -QtGui.QTextOption.Flag.IncludeTrailingSpaces?10 -QtGui.QTextOption.Flag.ShowTabsAndSpaces?10 -QtGui.QTextOption.Flag.ShowLineAndParagraphSeparators?10 -QtGui.QTextOption.Flag.AddSpaceForLineAndParagraphSeparators?10 -QtGui.QTextOption.Flag.SuppressColors?10 -QtGui.QTextOption.Flag.ShowDocumentTerminator?10 -QtGui.QTextOption.WrapMode?10 -QtGui.QTextOption.WrapMode.NoWrap?10 -QtGui.QTextOption.WrapMode.WordWrap?10 -QtGui.QTextOption.WrapMode.ManualWrap?10 -QtGui.QTextOption.WrapMode.WrapAnywhere?10 -QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere?10 -QtGui.QTextOption?1() -QtGui.QTextOption.__init__?1(self) -QtGui.QTextOption?1(unknown-type) -QtGui.QTextOption.__init__?1(self, unknown-type) -QtGui.QTextOption?1(QTextOption) -QtGui.QTextOption.__init__?1(self, QTextOption) -QtGui.QTextOption.alignment?4() -> unknown-type -QtGui.QTextOption.setTextDirection?4(Qt.LayoutDirection) -QtGui.QTextOption.textDirection?4() -> Qt.LayoutDirection -QtGui.QTextOption.setWrapMode?4(QTextOption.WrapMode) -QtGui.QTextOption.wrapMode?4() -> QTextOption.WrapMode -QtGui.QTextOption.flags?4() -> unknown-type -QtGui.QTextOption.setTabArray?4(unknown-type) -QtGui.QTextOption.tabArray?4() -> unknown-type -QtGui.QTextOption.setUseDesignMetrics?4(bool) -QtGui.QTextOption.useDesignMetrics?4() -> bool -QtGui.QTextOption.setAlignment?4(unknown-type) -QtGui.QTextOption.setFlags?4(unknown-type) -QtGui.QTextOption.setTabs?4(unknown-type) -QtGui.QTextOption.tabs?4() -> unknown-type -QtGui.QTextOption.setTabStopDistance?4(float) -QtGui.QTextOption.tabStopDistance?4() -> float -QtGui.QTextOption.Tab.delimiter?7 -QtGui.QTextOption.Tab.position?7 -QtGui.QTextOption.Tab.type?7 -QtGui.QTextOption.Tab?1() -QtGui.QTextOption.Tab.__init__?1(self) -QtGui.QTextOption.Tab?1(float, QTextOption.TabType, QChar delim='') -QtGui.QTextOption.Tab.__init__?1(self, float, QTextOption.TabType, QChar delim='') -QtGui.QTextOption.Tab?1(QTextOption.Tab) -QtGui.QTextOption.Tab.__init__?1(self, QTextOption.Tab) -QtGui.QTextTableCell?1() -QtGui.QTextTableCell.__init__?1(self) -QtGui.QTextTableCell?1(QTextTableCell) -QtGui.QTextTableCell.__init__?1(self, QTextTableCell) -QtGui.QTextTableCell.format?4() -> QTextCharFormat -QtGui.QTextTableCell.setFormat?4(QTextCharFormat) -QtGui.QTextTableCell.row?4() -> int -QtGui.QTextTableCell.column?4() -> int -QtGui.QTextTableCell.rowSpan?4() -> int -QtGui.QTextTableCell.columnSpan?4() -> int -QtGui.QTextTableCell.isValid?4() -> bool -QtGui.QTextTableCell.firstCursorPosition?4() -> QTextCursor -QtGui.QTextTableCell.lastCursorPosition?4() -> QTextCursor -QtGui.QTextTableCell.tableCellFormatIndex?4() -> int -QtGui.QTextTable?1(QTextDocument) -QtGui.QTextTable.__init__?1(self, QTextDocument) -QtGui.QTextTable.resize?4(int, int) -QtGui.QTextTable.insertRows?4(int, int) -QtGui.QTextTable.insertColumns?4(int, int) -QtGui.QTextTable.removeRows?4(int, int) -QtGui.QTextTable.removeColumns?4(int, int) -QtGui.QTextTable.mergeCells?4(int, int, int, int) -QtGui.QTextTable.mergeCells?4(QTextCursor) -QtGui.QTextTable.splitCell?4(int, int, int, int) -QtGui.QTextTable.rows?4() -> int -QtGui.QTextTable.columns?4() -> int -QtGui.QTextTable.cellAt?4(int, int) -> QTextTableCell -QtGui.QTextTable.cellAt?4(int) -> QTextTableCell -QtGui.QTextTable.cellAt?4(QTextCursor) -> QTextTableCell -QtGui.QTextTable.rowStart?4(QTextCursor) -> QTextCursor -QtGui.QTextTable.rowEnd?4(QTextCursor) -> QTextCursor -QtGui.QTextTable.format?4() -> QTextTableFormat -QtGui.QTextTable.setFormat?4(QTextTableFormat) -QtGui.QTextTable.appendRows?4(int) -QtGui.QTextTable.appendColumns?4(int) -QtGui.QTransform.TransformationType?10 -QtGui.QTransform.TransformationType.TxNone?10 -QtGui.QTransform.TransformationType.TxTranslate?10 -QtGui.QTransform.TransformationType.TxScale?10 -QtGui.QTransform.TransformationType.TxRotate?10 -QtGui.QTransform.TransformationType.TxShear?10 -QtGui.QTransform.TransformationType.TxProject?10 -QtGui.QTransform?1() -QtGui.QTransform.__init__?1(self) -QtGui.QTransform?1(float, float, float, float, float, float, float, float, float) -QtGui.QTransform.__init__?1(self, float, float, float, float, float, float, float, float, float) -QtGui.QTransform?1(float, float, float, float, float, float) -QtGui.QTransform.__init__?1(self, float, float, float, float, float, float) -QtGui.QTransform?1(QTransform) -QtGui.QTransform.__init__?1(self, QTransform) -QtGui.QTransform.type?4() -> QTransform.TransformationType -QtGui.QTransform.setMatrix?4(float, float, float, float, float, float, float, float, float) -QtGui.QTransform.inverted?4() -> (QTransform, bool) -QtGui.QTransform.adjoint?4() -> QTransform -QtGui.QTransform.transposed?4() -> QTransform -QtGui.QTransform.translate?4(float, float) -> QTransform -QtGui.QTransform.scale?4(float, float) -> QTransform -QtGui.QTransform.shear?4(float, float) -> QTransform -QtGui.QTransform.rotate?4(float, Qt.Axis axis=Qt.ZAxis) -> QTransform -QtGui.QTransform.rotate?4(float, Qt.Axis, float) -> QTransform -QtGui.QTransform.rotateRadians?4(float, Qt.Axis axis=Qt.ZAxis) -> QTransform -QtGui.QTransform.rotateRadians?4(float, Qt.Axis, float) -> QTransform -QtGui.QTransform.squareToQuad?4(QPolygonF, QTransform) -> bool -QtGui.QTransform.quadToSquare?4(QPolygonF, QTransform) -> bool -QtGui.QTransform.quadToQuad?4(QPolygonF, QPolygonF, QTransform) -> bool -QtGui.QTransform.reset?4() -QtGui.QTransform.map?4(int, int) -> (int, int) -QtGui.QTransform.map?4(float, float) -> (float, float) -QtGui.QTransform.map?4(QPoint) -> QPoint -QtGui.QTransform.map?4(QPointF) -> QPointF -QtGui.QTransform.map?4(QLine) -> QLine -QtGui.QTransform.map?4(QLineF) -> QLineF -QtGui.QTransform.map?4(QPolygonF) -> QPolygonF -QtGui.QTransform.map?4(QPolygon) -> QPolygon -QtGui.QTransform.map?4(QRegion) -> QRegion -QtGui.QTransform.map?4(QPainterPath) -> QPainterPath -QtGui.QTransform.mapToPolygon?4(QRect) -> QPolygon -QtGui.QTransform.mapRect?4(QRect) -> QRect -QtGui.QTransform.mapRect?4(QRectF) -> QRectF -QtGui.QTransform.isAffine?4() -> bool -QtGui.QTransform.isIdentity?4() -> bool -QtGui.QTransform.isInvertible?4() -> bool -QtGui.QTransform.isScaling?4() -> bool -QtGui.QTransform.isRotating?4() -> bool -QtGui.QTransform.isTranslating?4() -> bool -QtGui.QTransform.determinant?4() -> float -QtGui.QTransform.m11?4() -> float -QtGui.QTransform.m12?4() -> float -QtGui.QTransform.m13?4() -> float -QtGui.QTransform.m21?4() -> float -QtGui.QTransform.m22?4() -> float -QtGui.QTransform.m23?4() -> float -QtGui.QTransform.m31?4() -> float -QtGui.QTransform.m32?4() -> float -QtGui.QTransform.m33?4() -> float -QtGui.QTransform.dx?4() -> float -QtGui.QTransform.dy?4() -> float -QtGui.QTransform.fromTranslate?4(float, float) -> QTransform -QtGui.QTransform.fromScale?4(float, float) -> QTransform -QtGui.QUndoGroup?1(QObject parent=None) -QtGui.QUndoGroup.__init__?1(self, QObject parent=None) -QtGui.QUndoGroup.addStack?4(QUndoStack) -QtGui.QUndoGroup.removeStack?4(QUndoStack) -QtGui.QUndoGroup.stacks?4() -> unknown-type -QtGui.QUndoGroup.activeStack?4() -> QUndoStack -QtGui.QUndoGroup.createRedoAction?4(QObject, QString prefix='') -> QAction -QtGui.QUndoGroup.createUndoAction?4(QObject, QString prefix='') -> QAction -QtGui.QUndoGroup.canUndo?4() -> bool -QtGui.QUndoGroup.canRedo?4() -> bool -QtGui.QUndoGroup.undoText?4() -> QString -QtGui.QUndoGroup.redoText?4() -> QString -QtGui.QUndoGroup.isClean?4() -> bool -QtGui.QUndoGroup.redo?4() -QtGui.QUndoGroup.setActiveStack?4(QUndoStack) -QtGui.QUndoGroup.undo?4() -QtGui.QUndoGroup.activeStackChanged?4(QUndoStack) -QtGui.QUndoGroup.canRedoChanged?4(bool) -QtGui.QUndoGroup.canUndoChanged?4(bool) -QtGui.QUndoGroup.cleanChanged?4(bool) -QtGui.QUndoGroup.indexChanged?4(int) -QtGui.QUndoGroup.redoTextChanged?4(QString) -QtGui.QUndoGroup.undoTextChanged?4(QString) -QtGui.QUndoCommand?1(QUndoCommand parent=None) -QtGui.QUndoCommand.__init__?1(self, QUndoCommand parent=None) -QtGui.QUndoCommand?1(QString, QUndoCommand parent=None) -QtGui.QUndoCommand.__init__?1(self, QString, QUndoCommand parent=None) -QtGui.QUndoCommand.id?4() -> int -QtGui.QUndoCommand.mergeWith?4(QUndoCommand) -> bool -QtGui.QUndoCommand.redo?4() -QtGui.QUndoCommand.setText?4(QString) -QtGui.QUndoCommand.text?4() -> QString -QtGui.QUndoCommand.undo?4() -QtGui.QUndoCommand.childCount?4() -> int -QtGui.QUndoCommand.child?4(int) -> QUndoCommand -QtGui.QUndoCommand.actionText?4() -> QString -QtGui.QUndoCommand.isObsolete?4() -> bool -QtGui.QUndoCommand.setObsolete?4(bool) -QtGui.QUndoStack?1(QObject parent=None) -QtGui.QUndoStack.__init__?1(self, QObject parent=None) -QtGui.QUndoStack.clear?4() -QtGui.QUndoStack.push?4(QUndoCommand) -QtGui.QUndoStack.canUndo?4() -> bool -QtGui.QUndoStack.canRedo?4() -> bool -QtGui.QUndoStack.undoText?4() -> QString -QtGui.QUndoStack.redoText?4() -> QString -QtGui.QUndoStack.count?4() -> int -QtGui.QUndoStack.index?4() -> int -QtGui.QUndoStack.text?4(int) -> QString -QtGui.QUndoStack.createUndoAction?4(QObject, QString prefix='') -> QAction -QtGui.QUndoStack.createRedoAction?4(QObject, QString prefix='') -> QAction -QtGui.QUndoStack.isActive?4() -> bool -QtGui.QUndoStack.isClean?4() -> bool -QtGui.QUndoStack.cleanIndex?4() -> int -QtGui.QUndoStack.beginMacro?4(QString) -QtGui.QUndoStack.endMacro?4() -QtGui.QUndoStack.redo?4() -QtGui.QUndoStack.setActive?4(bool active=True) -QtGui.QUndoStack.setClean?4() -QtGui.QUndoStack.setIndex?4(int) -QtGui.QUndoStack.undo?4() -QtGui.QUndoStack.resetClean?4() -QtGui.QUndoStack.canRedoChanged?4(bool) -QtGui.QUndoStack.canUndoChanged?4(bool) -QtGui.QUndoStack.cleanChanged?4(bool) -QtGui.QUndoStack.indexChanged?4(int) -QtGui.QUndoStack.redoTextChanged?4(QString) -QtGui.QUndoStack.undoTextChanged?4(QString) -QtGui.QUndoStack.setUndoLimit?4(int) -QtGui.QUndoStack.undoLimit?4() -> int -QtGui.QUndoStack.command?4(int) -> QUndoCommand -QtGui.QValidator.State?10 -QtGui.QValidator.State.Invalid?10 -QtGui.QValidator.State.Intermediate?10 -QtGui.QValidator.State.Acceptable?10 -QtGui.QValidator?1(QObject parent=None) -QtGui.QValidator.__init__?1(self, QObject parent=None) -QtGui.QValidator.validate?4(QString, int) -> (QValidator.State, QString, int) -QtGui.QValidator.fixup?4(QString) -> QString -QtGui.QValidator.setLocale?4(QLocale) -QtGui.QValidator.locale?4() -> QLocale -QtGui.QValidator.changed?4() -QtGui.QIntValidator?1(QObject parent=None) -QtGui.QIntValidator.__init__?1(self, QObject parent=None) -QtGui.QIntValidator?1(int, int, QObject parent=None) -QtGui.QIntValidator.__init__?1(self, int, int, QObject parent=None) -QtGui.QIntValidator.validate?4(QString, int) -> (QValidator.State, QString, int) -QtGui.QIntValidator.fixup?4(QString) -> QString -QtGui.QIntValidator.setBottom?4(int) -QtGui.QIntValidator.setTop?4(int) -QtGui.QIntValidator.setRange?4(int, int) -QtGui.QIntValidator.bottom?4() -> int -QtGui.QIntValidator.top?4() -> int -QtGui.QDoubleValidator.Notation?10 -QtGui.QDoubleValidator.Notation.StandardNotation?10 -QtGui.QDoubleValidator.Notation.ScientificNotation?10 -QtGui.QDoubleValidator?1(QObject parent=None) -QtGui.QDoubleValidator.__init__?1(self, QObject parent=None) -QtGui.QDoubleValidator?1(float, float, int, QObject parent=None) -QtGui.QDoubleValidator.__init__?1(self, float, float, int, QObject parent=None) -QtGui.QDoubleValidator.validate?4(QString, int) -> (QValidator.State, QString, int) -QtGui.QDoubleValidator.setRange?4(float, float, int decimals=0) -QtGui.QDoubleValidator.setBottom?4(float) -QtGui.QDoubleValidator.setTop?4(float) -QtGui.QDoubleValidator.setDecimals?4(int) -QtGui.QDoubleValidator.bottom?4() -> float -QtGui.QDoubleValidator.top?4() -> float -QtGui.QDoubleValidator.decimals?4() -> int -QtGui.QDoubleValidator.setNotation?4(QDoubleValidator.Notation) -QtGui.QDoubleValidator.notation?4() -> QDoubleValidator.Notation -QtGui.QDoubleValidator.fixup?4(QString) -QtGui.QRegularExpressionValidator?1(QObject parent=None) -QtGui.QRegularExpressionValidator.__init__?1(self, QObject parent=None) -QtGui.QRegularExpressionValidator?1(QRegularExpression, QObject parent=None) -QtGui.QRegularExpressionValidator.__init__?1(self, QRegularExpression, QObject parent=None) -QtGui.QRegularExpressionValidator.validate?4(QString, int) -> (QValidator.State, QString, int) -QtGui.QRegularExpressionValidator.regularExpression?4() -> QRegularExpression -QtGui.QRegularExpressionValidator.setRegularExpression?4(QRegularExpression) -QtGui.QVector2D?1() -QtGui.QVector2D.__init__?1(self) -QtGui.QVector2D?1(float, float) -QtGui.QVector2D.__init__?1(self, float, float) -QtGui.QVector2D?1(QPoint) -QtGui.QVector2D.__init__?1(self, QPoint) -QtGui.QVector2D?1(QPointF) -QtGui.QVector2D.__init__?1(self, QPointF) -QtGui.QVector2D?1(QVector3D) -QtGui.QVector2D.__init__?1(self, QVector3D) -QtGui.QVector2D?1(QVector4D) -QtGui.QVector2D.__init__?1(self, QVector4D) -QtGui.QVector2D?1(QVector2D) -QtGui.QVector2D.__init__?1(self, QVector2D) -QtGui.QVector2D.isNull?4() -> bool -QtGui.QVector2D.x?4() -> float -QtGui.QVector2D.y?4() -> float -QtGui.QVector2D.setX?4(float) -QtGui.QVector2D.setY?4(float) -QtGui.QVector2D.length?4() -> float -QtGui.QVector2D.lengthSquared?4() -> float -QtGui.QVector2D.normalized?4() -> QVector2D -QtGui.QVector2D.normalize?4() -QtGui.QVector2D.distanceToPoint?4(QVector2D) -> float -QtGui.QVector2D.distanceToLine?4(QVector2D, QVector2D) -> float -QtGui.QVector2D.dotProduct?4(QVector2D, QVector2D) -> float -QtGui.QVector2D.toVector3D?4() -> QVector3D -QtGui.QVector2D.toVector4D?4() -> QVector4D -QtGui.QVector2D.toPoint?4() -> QPoint -QtGui.QVector2D.toPointF?4() -> QPointF -QtGui.QVector3D?1() -QtGui.QVector3D.__init__?1(self) -QtGui.QVector3D?1(float, float, float) -QtGui.QVector3D.__init__?1(self, float, float, float) -QtGui.QVector3D?1(QPoint) -QtGui.QVector3D.__init__?1(self, QPoint) -QtGui.QVector3D?1(QPointF) -QtGui.QVector3D.__init__?1(self, QPointF) -QtGui.QVector3D?1(QVector2D, float) -QtGui.QVector3D.__init__?1(self, QVector2D, float) -QtGui.QVector3D?1(QVector2D) -QtGui.QVector3D.__init__?1(self, QVector2D) -QtGui.QVector3D?1(QVector4D) -QtGui.QVector3D.__init__?1(self, QVector4D) -QtGui.QVector3D?1(QVector3D) -QtGui.QVector3D.__init__?1(self, QVector3D) -QtGui.QVector3D.isNull?4() -> bool -QtGui.QVector3D.x?4() -> float -QtGui.QVector3D.y?4() -> float -QtGui.QVector3D.z?4() -> float -QtGui.QVector3D.setX?4(float) -QtGui.QVector3D.setY?4(float) -QtGui.QVector3D.setZ?4(float) -QtGui.QVector3D.length?4() -> float -QtGui.QVector3D.lengthSquared?4() -> float -QtGui.QVector3D.normalized?4() -> QVector3D -QtGui.QVector3D.normalize?4() -QtGui.QVector3D.dotProduct?4(QVector3D, QVector3D) -> float -QtGui.QVector3D.crossProduct?4(QVector3D, QVector3D) -> QVector3D -QtGui.QVector3D.normal?4(QVector3D, QVector3D) -> QVector3D -QtGui.QVector3D.normal?4(QVector3D, QVector3D, QVector3D) -> QVector3D -QtGui.QVector3D.project?4(QMatrix4x4, QMatrix4x4, QRect) -> QVector3D -QtGui.QVector3D.unproject?4(QMatrix4x4, QMatrix4x4, QRect) -> QVector3D -QtGui.QVector3D.distanceToPoint?4(QVector3D) -> float -QtGui.QVector3D.distanceToPlane?4(QVector3D, QVector3D) -> float -QtGui.QVector3D.distanceToPlane?4(QVector3D, QVector3D, QVector3D) -> float -QtGui.QVector3D.distanceToLine?4(QVector3D, QVector3D) -> float -QtGui.QVector3D.toVector2D?4() -> QVector2D -QtGui.QVector3D.toVector4D?4() -> QVector4D -QtGui.QVector3D.toPoint?4() -> QPoint -QtGui.QVector3D.toPointF?4() -> QPointF -QtGui.QVector4D?1() -QtGui.QVector4D.__init__?1(self) -QtGui.QVector4D?1(float, float, float, float) -QtGui.QVector4D.__init__?1(self, float, float, float, float) -QtGui.QVector4D?1(QPoint) -QtGui.QVector4D.__init__?1(self, QPoint) -QtGui.QVector4D?1(QPointF) -QtGui.QVector4D.__init__?1(self, QPointF) -QtGui.QVector4D?1(QVector2D) -QtGui.QVector4D.__init__?1(self, QVector2D) -QtGui.QVector4D?1(QVector2D, float, float) -QtGui.QVector4D.__init__?1(self, QVector2D, float, float) -QtGui.QVector4D?1(QVector3D) -QtGui.QVector4D.__init__?1(self, QVector3D) -QtGui.QVector4D?1(QVector3D, float) -QtGui.QVector4D.__init__?1(self, QVector3D, float) -QtGui.QVector4D?1(QVector4D) -QtGui.QVector4D.__init__?1(self, QVector4D) -QtGui.QVector4D.isNull?4() -> bool -QtGui.QVector4D.x?4() -> float -QtGui.QVector4D.y?4() -> float -QtGui.QVector4D.z?4() -> float -QtGui.QVector4D.w?4() -> float -QtGui.QVector4D.setX?4(float) -QtGui.QVector4D.setY?4(float) -QtGui.QVector4D.setZ?4(float) -QtGui.QVector4D.setW?4(float) -QtGui.QVector4D.length?4() -> float -QtGui.QVector4D.lengthSquared?4() -> float -QtGui.QVector4D.normalized?4() -> QVector4D -QtGui.QVector4D.normalize?4() -QtGui.QVector4D.dotProduct?4(QVector4D, QVector4D) -> float -QtGui.QVector4D.toVector2D?4() -> QVector2D -QtGui.QVector4D.toVector2DAffine?4() -> QVector2D -QtGui.QVector4D.toVector3D?4() -> QVector3D -QtGui.QVector4D.toVector3DAffine?4() -> QVector3D -QtGui.QVector4D.toPoint?4() -> QPoint -QtGui.QVector4D.toPointF?4() -> QPointF -QtQml.qmlClearTypeRegistrations?4() -QtQml.qmlRegisterTypeNotAvailable?4(str, int, int, str, QString) -> int -QtQml.qmlRegisterUncreatableMetaObject?4(QMetaObject, str, int, int, str, QString) -> int -QtQml.qmlProtectModule?4(str, int) -> bool -QtQml.qmlRegisterModule?4(str, int, int) -QtQml.qmlRegisterSingletonType?4(QUrl, str, int, int, str) -> int -QtQml.qmlRegisterType?4(QUrl, str, int, int, str) -> int -QtQml.qmlTypeId?4(str, int, int, str) -> int -QtQml.qmlContext?4(QObject) -> QQmlContext -QtQml.qmlEngine?4(QObject) -> QQmlEngine -QtQml.qjsEngine?4(QObject) -> QJSEngine -QtQml.qmlRegisterRevision?4(type, str, int, int, type attachedProperties=None) -> int -QtQml.qmlRegisterSingletonInstance?4(str, int, int, str, QObject) -> int -QtQml.qmlRegisterSingletonType?4(type, str, int, int, Callable[..., None], str name=None) -> int -QtQml.qmlRegisterType?4(type, str, int, int, str name=None, type attachedProperties=None) -> int -QtQml.qmlRegisterAnonymousType?4(type, str, int) -> int -QtQml.qmlRegisterUncreatableType?4(type, str, int, int, QString, str qmlName=None) -> int -QtQml.qmlAttachedPropertiesObject?4(type, QObject, bool create=True) -> QObject -QtQml.QJSEngine.ObjectOwnership?10 -QtQml.QJSEngine.ObjectOwnership.CppOwnership?10 -QtQml.QJSEngine.ObjectOwnership.JavaScriptOwnership?10 -QtQml.QJSEngine.Extension?10 -QtQml.QJSEngine.Extension.TranslationExtension?10 -QtQml.QJSEngine.Extension.ConsoleExtension?10 -QtQml.QJSEngine.Extension.GarbageCollectionExtension?10 -QtQml.QJSEngine.Extension.AllExtensions?10 -QtQml.QJSEngine?1() -QtQml.QJSEngine.__init__?1(self) -QtQml.QJSEngine?1(QObject) -QtQml.QJSEngine.__init__?1(self, QObject) -QtQml.QJSEngine.globalObject?4() -> QJSValue -QtQml.QJSEngine.evaluate?4(QString, QString fileName='', int lineNumber=1, List exceptionStackTrace=None) -> QJSValue -QtQml.QJSEngine.newObject?4() -> QJSValue -QtQml.QJSEngine.newArray?4(int length=0) -> QJSValue -QtQml.QJSEngine.newQObject?4(QObject) -> QJSValue -QtQml.QJSEngine.collectGarbage?4() -QtQml.QJSEngine.installExtensions?4(unknown-type, QJSValue object=QJSValue()) -QtQml.QJSEngine.newQMetaObject?4(QMetaObject) -> QJSValue -QtQml.QJSEngine.importModule?4(QString) -> QJSValue -QtQml.QJSEngine.newErrorObject?4(QJSValue.ErrorType, QString message='') -> QJSValue -QtQml.QJSEngine.throwError?4(QString) -QtQml.QJSEngine.throwError?4(QJSValue) -QtQml.QJSEngine.throwError?4(QJSValue.ErrorType, QString message='') -QtQml.QJSEngine.setInterrupted?4(bool) -QtQml.QJSEngine.isInterrupted?4() -> bool -QtQml.QJSEngine.uiLanguage?4() -> QString -QtQml.QJSEngine.setUiLanguage?4(QString) -QtQml.QJSEngine.setObjectOwnership?4(QObject, QJSEngine.ObjectOwnership) -QtQml.QJSEngine.objectOwnership?4(QObject) -> QJSEngine.ObjectOwnership -QtQml.QJSEngine.hasError?4() -> bool -QtQml.QJSEngine.catchError?4() -> QJSValue -QtQml.QJSEngine.uiLanguageChanged?4() -QtQml.QJSEngine.registerModule?4(QString, QJSValue) -> bool -QtQml.QJSEngine.newSymbol?4(QString) -> QJSValue -QtQml.QJSEngine.toScriptValue?4(QVariant) -> QJSValue -QtQml.QJSEngine.toManagedValue?4(QVariant) -> QJSManagedValue -QtQml.QJSEngine.toPrimitiveValue?4(QVariant) -> QJSPrimitiveValue -QtQml.QJSManagedValue.Type?10 -QtQml.QJSManagedValue.Type.Undefined?10 -QtQml.QJSManagedValue.Type.Boolean?10 -QtQml.QJSManagedValue.Type.Number?10 -QtQml.QJSManagedValue.Type.String?10 -QtQml.QJSManagedValue.Type.Object?10 -QtQml.QJSManagedValue.Type.Symbol?10 -QtQml.QJSManagedValue.Type.Function?10 -QtQml.QJSManagedValue?1() -QtQml.QJSManagedValue.__init__?1(self) -QtQml.QJSManagedValue?1(QJSValue, QJSEngine) -QtQml.QJSManagedValue.__init__?1(self, QJSValue, QJSEngine) -QtQml.QJSManagedValue?1(QJSPrimitiveValue, QJSEngine) -QtQml.QJSManagedValue.__init__?1(self, QJSPrimitiveValue, QJSEngine) -QtQml.QJSManagedValue?1(QString, QJSEngine) -QtQml.QJSManagedValue.__init__?1(self, QString, QJSEngine) -QtQml.QJSManagedValue?1(QVariant, QJSEngine) -QtQml.QJSManagedValue.__init__?1(self, QVariant, QJSEngine) -QtQml.QJSManagedValue.equals?4(QJSManagedValue) -> bool -QtQml.QJSManagedValue.strictlyEquals?4(QJSManagedValue) -> bool -QtQml.QJSManagedValue.engine?4() -> QJSEngine -QtQml.QJSManagedValue.prototype?4() -> QJSManagedValue -QtQml.QJSManagedValue.setPrototype?4(QJSManagedValue) -QtQml.QJSManagedValue.type?4() -> QJSManagedValue.Type -QtQml.QJSManagedValue.isUndefined?4() -> bool -QtQml.QJSManagedValue.isBoolean?4() -> bool -QtQml.QJSManagedValue.isNumber?4() -> bool -QtQml.QJSManagedValue.isString?4() -> bool -QtQml.QJSManagedValue.isObject?4() -> bool -QtQml.QJSManagedValue.isSymbol?4() -> bool -QtQml.QJSManagedValue.isFunction?4() -> bool -QtQml.QJSManagedValue.isInteger?4() -> bool -QtQml.QJSManagedValue.isNull?4() -> bool -QtQml.QJSManagedValue.isRegularExpression?4() -> bool -QtQml.QJSManagedValue.isArray?4() -> bool -QtQml.QJSManagedValue.isUrl?4() -> bool -QtQml.QJSManagedValue.isVariant?4() -> bool -QtQml.QJSManagedValue.isQObject?4() -> bool -QtQml.QJSManagedValue.isQMetaObject?4() -> bool -QtQml.QJSManagedValue.isDate?4() -> bool -QtQml.QJSManagedValue.isError?4() -> bool -QtQml.QJSManagedValue.toString?4() -> QString -QtQml.QJSManagedValue.toNumber?4() -> float -QtQml.QJSManagedValue.toBoolean?4() -> bool -QtQml.QJSManagedValue.toPrimitive?4() -> QJSPrimitiveValue -QtQml.QJSManagedValue.toJSValue?4() -> QJSValue -QtQml.QJSManagedValue.toVariant?4() -> QVariant -QtQml.QJSManagedValue.toInteger?4() -> int -QtQml.QJSManagedValue.toRegularExpression?4() -> QRegularExpression -QtQml.QJSManagedValue.toUrl?4() -> QUrl -QtQml.QJSManagedValue.toQObject?4() -> QObject -QtQml.QJSManagedValue.toQMetaObject?4() -> QMetaObject -QtQml.QJSManagedValue.toDateTime?4() -> QDateTime -QtQml.QJSManagedValue.hasProperty?4(QString) -> bool -QtQml.QJSManagedValue.hasOwnProperty?4(QString) -> bool -QtQml.QJSManagedValue.property?4(QString) -> QJSValue -QtQml.QJSManagedValue.setProperty?4(QString, QJSValue) -QtQml.QJSManagedValue.deleteProperty?4(QString) -> bool -QtQml.QJSManagedValue.hasProperty?4(int) -> bool -QtQml.QJSManagedValue.hasOwnProperty?4(int) -> bool -QtQml.QJSManagedValue.property?4(int) -> QJSValue -QtQml.QJSManagedValue.setProperty?4(int, QJSValue) -QtQml.QJSManagedValue.deleteProperty?4(int) -> bool -QtQml.QJSManagedValue.call?4(unknown-type arguments=[]) -> QJSValue -QtQml.QJSManagedValue.callWithInstance?4(QJSValue, unknown-type arguments=[]) -> QJSValue -QtQml.QJSManagedValue.callAsConstructor?4(unknown-type arguments=[]) -> QJSValue -QtQml.QJSPrimitiveUndefined?1() -QtQml.QJSPrimitiveUndefined.__init__?1(self) -QtQml.QJSPrimitiveUndefined?1(QJSPrimitiveUndefined) -QtQml.QJSPrimitiveUndefined.__init__?1(self, QJSPrimitiveUndefined) -QtQml.QJSPrimitiveNull?1() -QtQml.QJSPrimitiveNull.__init__?1(self) -QtQml.QJSPrimitiveNull?1(QJSPrimitiveNull) -QtQml.QJSPrimitiveNull.__init__?1(self, QJSPrimitiveNull) -QtQml.QJSPrimitiveValue.Type?10 -QtQml.QJSPrimitiveValue.Type.Undefined?10 -QtQml.QJSPrimitiveValue.Type.Null?10 -QtQml.QJSPrimitiveValue.Type.Boolean?10 -QtQml.QJSPrimitiveValue.Type.Integer?10 -QtQml.QJSPrimitiveValue.Type.Double?10 -QtQml.QJSPrimitiveValue.Type.String?10 -QtQml.QJSPrimitiveValue?1() -QtQml.QJSPrimitiveValue.__init__?1(self) -QtQml.QJSPrimitiveValue?1(QJSPrimitiveUndefined) -QtQml.QJSPrimitiveValue.__init__?1(self, QJSPrimitiveUndefined) -QtQml.QJSPrimitiveValue?1(QJSPrimitiveNull) -QtQml.QJSPrimitiveValue.__init__?1(self, QJSPrimitiveNull) -QtQml.QJSPrimitiveValue?1(bool) -QtQml.QJSPrimitiveValue.__init__?1(self, bool) -QtQml.QJSPrimitiveValue?1(int) -QtQml.QJSPrimitiveValue.__init__?1(self, int) -QtQml.QJSPrimitiveValue?1(float) -QtQml.QJSPrimitiveValue.__init__?1(self, float) -QtQml.QJSPrimitiveValue?1(QString) -QtQml.QJSPrimitiveValue.__init__?1(self, QString) -QtQml.QJSPrimitiveValue?1(QJSPrimitiveValue) -QtQml.QJSPrimitiveValue.__init__?1(self, QJSPrimitiveValue) -QtQml.QJSPrimitiveValue.type?4() -> QJSPrimitiveValue.Type -QtQml.QJSPrimitiveValue.toBoolean?4() -> bool -QtQml.QJSPrimitiveValue.toInteger?4() -> int -QtQml.QJSPrimitiveValue.toDouble?4() -> float -QtQml.QJSPrimitiveValue.toString?4() -> QString -QtQml.QJSPrimitiveValue.strictlyEquals?4(QJSPrimitiveValue) -> bool -QtQml.QJSPrimitiveValue.equals?4(QJSPrimitiveValue) -> bool -QtQml.QJSPrimitiveValue.metaType?4() -> QMetaType -QtQml.QJSPrimitiveValue.data?4() -> PyQt6.sip.voidptr -QtQml.QJSValue.ErrorType?10 -QtQml.QJSValue.ErrorType.GenericError?10 -QtQml.QJSValue.ErrorType.EvalError?10 -QtQml.QJSValue.ErrorType.RangeError?10 -QtQml.QJSValue.ErrorType.ReferenceError?10 -QtQml.QJSValue.ErrorType.SyntaxError?10 -QtQml.QJSValue.ErrorType.TypeError?10 -QtQml.QJSValue.ErrorType.URIError?10 -QtQml.QJSValue.ObjectConversionBehavior?10 -QtQml.QJSValue.ObjectConversionBehavior.ConvertJSObjects?10 -QtQml.QJSValue.ObjectConversionBehavior.RetainJSObjects?10 -QtQml.QJSValue.SpecialValue?10 -QtQml.QJSValue.SpecialValue.NullValue?10 -QtQml.QJSValue.SpecialValue.UndefinedValue?10 -QtQml.QJSValue?1(QJSValue.SpecialValue value=QJSValue.UndefinedValue) -QtQml.QJSValue.__init__?1(self, QJSValue.SpecialValue value=QJSValue.UndefinedValue) -QtQml.QJSValue?1(QJSValue) -QtQml.QJSValue.__init__?1(self, QJSValue) -QtQml.QJSValue.isBool?4() -> bool -QtQml.QJSValue.isNumber?4() -> bool -QtQml.QJSValue.isNull?4() -> bool -QtQml.QJSValue.isString?4() -> bool -QtQml.QJSValue.isUndefined?4() -> bool -QtQml.QJSValue.isVariant?4() -> bool -QtQml.QJSValue.isQObject?4() -> bool -QtQml.QJSValue.isObject?4() -> bool -QtQml.QJSValue.isDate?4() -> bool -QtQml.QJSValue.isRegExp?4() -> bool -QtQml.QJSValue.isArray?4() -> bool -QtQml.QJSValue.isError?4() -> bool -QtQml.QJSValue.isUrl?4() -> bool -QtQml.QJSValue.toString?4() -> QString -QtQml.QJSValue.toNumber?4() -> float -QtQml.QJSValue.toInt?4() -> int -QtQml.QJSValue.toUInt?4() -> int -QtQml.QJSValue.toBool?4() -> bool -QtQml.QJSValue.toVariant?4() -> QVariant -QtQml.QJSValue.toVariant?4(QJSValue.ObjectConversionBehavior) -> QVariant -QtQml.QJSValue.toPrimitive?4() -> QJSPrimitiveValue -QtQml.QJSValue.toQObject?4() -> QObject -QtQml.QJSValue.toDateTime?4() -> QDateTime -QtQml.QJSValue.equals?4(QJSValue) -> bool -QtQml.QJSValue.strictlyEquals?4(QJSValue) -> bool -QtQml.QJSValue.prototype?4() -> QJSValue -QtQml.QJSValue.setPrototype?4(QJSValue) -QtQml.QJSValue.property?4(QString) -> QJSValue -QtQml.QJSValue.setProperty?4(QString, QJSValue) -QtQml.QJSValue.hasProperty?4(QString) -> bool -QtQml.QJSValue.hasOwnProperty?4(QString) -> bool -QtQml.QJSValue.property?4(int) -> QJSValue -QtQml.QJSValue.setProperty?4(int, QJSValue) -QtQml.QJSValue.deleteProperty?4(QString) -> bool -QtQml.QJSValue.isCallable?4() -> bool -QtQml.QJSValue.call?4(unknown-type args=[]) -> QJSValue -QtQml.QJSValue.callWithInstance?4(QJSValue, unknown-type args=[]) -> QJSValue -QtQml.QJSValue.callAsConstructor?4(unknown-type args=[]) -> QJSValue -QtQml.QJSValue.errorType?4() -> QJSValue.ErrorType -QtQml.QJSValueIterator?1(QJSValue) -QtQml.QJSValueIterator.__init__?1(self, QJSValue) -QtQml.QJSValueIterator.hasNext?4() -> bool -QtQml.QJSValueIterator.next?4() -> bool -QtQml.QJSValueIterator.name?4() -> QString -QtQml.QJSValueIterator.value?4() -> QJSValue -QtQml.QQmlAbstractUrlInterceptor.DataType?10 -QtQml.QQmlAbstractUrlInterceptor.DataType.QmlFile?10 -QtQml.QQmlAbstractUrlInterceptor.DataType.JavaScriptFile?10 -QtQml.QQmlAbstractUrlInterceptor.DataType.QmldirFile?10 -QtQml.QQmlAbstractUrlInterceptor.DataType.UrlString?10 -QtQml.QQmlAbstractUrlInterceptor?1() -QtQml.QQmlAbstractUrlInterceptor.__init__?1(self) -QtQml.QQmlAbstractUrlInterceptor?1(QQmlAbstractUrlInterceptor) -QtQml.QQmlAbstractUrlInterceptor.__init__?1(self, QQmlAbstractUrlInterceptor) -QtQml.QQmlAbstractUrlInterceptor.intercept?4(QUrl, QQmlAbstractUrlInterceptor.DataType) -> QUrl -QtQml.QQmlEngine?1(QObject parent=None) -QtQml.QQmlEngine.__init__?1(self, QObject parent=None) -QtQml.QQmlEngine.rootContext?4() -> QQmlContext -QtQml.QQmlEngine.clearComponentCache?4() -QtQml.QQmlEngine.trimComponentCache?4() -QtQml.QQmlEngine.importPathList?4() -> QStringList -QtQml.QQmlEngine.setImportPathList?4(QStringList) -QtQml.QQmlEngine.addImportPath?4(QString) -QtQml.QQmlEngine.pluginPathList?4() -> QStringList -QtQml.QQmlEngine.setPluginPathList?4(QStringList) -QtQml.QQmlEngine.addPluginPath?4(QString) -QtQml.QQmlEngine.importPlugin?4(QString, QString, unknown-type) -> bool -QtQml.QQmlEngine.setNetworkAccessManagerFactory?4(QQmlNetworkAccessManagerFactory) -QtQml.QQmlEngine.networkAccessManagerFactory?4() -> QQmlNetworkAccessManagerFactory -QtQml.QQmlEngine.networkAccessManager?4() -> QNetworkAccessManager -QtQml.QQmlEngine.addImageProvider?4(QString, QQmlImageProviderBase) -QtQml.QQmlEngine.imageProvider?4(QString) -> QQmlImageProviderBase -QtQml.QQmlEngine.removeImageProvider?4(QString) -QtQml.QQmlEngine.setIncubationController?4(QQmlIncubationController) -QtQml.QQmlEngine.incubationController?4() -> QQmlIncubationController -QtQml.QQmlEngine.setOfflineStoragePath?4(QString) -QtQml.QQmlEngine.offlineStoragePath?4() -> QString -QtQml.QQmlEngine.baseUrl?4() -> QUrl -QtQml.QQmlEngine.setBaseUrl?4(QUrl) -QtQml.QQmlEngine.outputWarningsToStandardError?4() -> bool -QtQml.QQmlEngine.setOutputWarningsToStandardError?4(bool) -QtQml.QQmlEngine.contextForObject?4(QObject) -> QQmlContext -QtQml.QQmlEngine.setContextForObject?4(QObject, QQmlContext) -QtQml.QQmlEngine.retranslate?4() -QtQml.QQmlEngine.event?4(QEvent) -> bool -QtQml.QQmlEngine.quit?4() -QtQml.QQmlEngine.warnings?4(unknown-type) -QtQml.QQmlEngine.exit?4(int) -QtQml.QQmlEngine.offlineStorageDatabaseFilePath?4(QString) -> QString -QtQml.QQmlEngine.singletonInstance?4(int) -> Any -QtQml.QQmlEngine.singletonInstance?4(QAnyStringView, QAnyStringView) -> Any -QtQml.QQmlEngine.addUrlInterceptor?4(QQmlAbstractUrlInterceptor) -QtQml.QQmlEngine.removeUrlInterceptor?4(QQmlAbstractUrlInterceptor) -QtQml.QQmlEngine.interceptUrl?4(QUrl, QQmlAbstractUrlInterceptor.DataType) -> QUrl -QtQml.QQmlEngine.urlInterceptors?4() -> unknown-type -QtQml.QQmlEngine.clearSingletons?4() -QtQml.QQmlEngine.offlineStoragePathChanged?4() -QtQml.QQmlEngine.markCurrentFunctionAsTranslationBinding?4() -QtQml.QQmlApplicationEngine?1(QObject parent=None) -QtQml.QQmlApplicationEngine.__init__?1(self, QObject parent=None) -QtQml.QQmlApplicationEngine?1(QUrl, QObject parent=None) -QtQml.QQmlApplicationEngine.__init__?1(self, QUrl, QObject parent=None) -QtQml.QQmlApplicationEngine?1(QString, QObject parent=None) -QtQml.QQmlApplicationEngine.__init__?1(self, QString, QObject parent=None) -QtQml.QQmlApplicationEngine?1(QAnyStringView, QAnyStringView, QObject parent=None) -QtQml.QQmlApplicationEngine.__init__?1(self, QAnyStringView, QAnyStringView, QObject parent=None) -QtQml.QQmlApplicationEngine.rootObjects?4() -> unknown-type -QtQml.QQmlApplicationEngine.load?4(QUrl) -QtQml.QQmlApplicationEngine.load?4(QString) -QtQml.QQmlApplicationEngine.loadData?4(QByteArray, QUrl url=QUrl()) -QtQml.QQmlApplicationEngine.setExtraFileSelectors?4(QStringList) -QtQml.QQmlApplicationEngine.setInitialProperties?4(unknown-type) -QtQml.QQmlApplicationEngine.loadFromModule?4(QAnyStringView, QAnyStringView) -QtQml.QQmlApplicationEngine.objectCreated?4(QObject, QUrl) -QtQml.QQmlApplicationEngine.objectCreationFailed?4(QUrl) -QtQml.QQmlComponent.Status?10 -QtQml.QQmlComponent.Status.Null?10 -QtQml.QQmlComponent.Status.Ready?10 -QtQml.QQmlComponent.Status.Loading?10 -QtQml.QQmlComponent.Status.Error?10 -QtQml.QQmlComponent.CompilationMode?10 -QtQml.QQmlComponent.CompilationMode.PreferSynchronous?10 -QtQml.QQmlComponent.CompilationMode.Asynchronous?10 -QtQml.QQmlComponent?1(QQmlEngine, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QString, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QString, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QString, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QString, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QUrl, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QUrl, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QUrl, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QUrl, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QAnyStringView, QAnyStringView, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QAnyStringView, QAnyStringView, QObject parent=None) -QtQml.QQmlComponent?1(QQmlEngine, QAnyStringView, QAnyStringView, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QAnyStringView, QAnyStringView, QQmlComponent.CompilationMode, QObject parent=None) -QtQml.QQmlComponent?1(QObject parent=None) -QtQml.QQmlComponent.__init__?1(self, QObject parent=None) -QtQml.QQmlComponent.status?4() -> QQmlComponent.Status -QtQml.QQmlComponent.isBound?4() -> bool -QtQml.QQmlComponent.isNull?4() -> bool -QtQml.QQmlComponent.isReady?4() -> bool -QtQml.QQmlComponent.isError?4() -> bool -QtQml.QQmlComponent.isLoading?4() -> bool -QtQml.QQmlComponent.errors?4() -> unknown-type -QtQml.QQmlComponent.progress?4() -> float -QtQml.QQmlComponent.url?4() -> QUrl -QtQml.QQmlComponent.create?4(QQmlContext context=None) -> QObject -QtQml.QQmlComponent.createWithInitialProperties?4(unknown-type, QQmlContext context=None) -> QObject -QtQml.QQmlComponent.beginCreate?4(QQmlContext) -> QObject -QtQml.QQmlComponent.completeCreate?4() -QtQml.QQmlComponent.create?4(QQmlIncubator, QQmlContext context=None, QQmlContext forContext=None) -QtQml.QQmlComponent.creationContext?4() -> QQmlContext -QtQml.QQmlComponent.loadUrl?4(QUrl) -QtQml.QQmlComponent.loadUrl?4(QUrl, QQmlComponent.CompilationMode) -QtQml.QQmlComponent.setData?4(QByteArray, QUrl) -QtQml.QQmlComponent.loadFromModule?4(QAnyStringView, QAnyStringView, QQmlComponent.CompilationMode mode=QQmlComponent.PreferSynchronous) -QtQml.QQmlComponent.statusChanged?4(QQmlComponent.Status) -QtQml.QQmlComponent.progressChanged?4(float) -QtQml.QQmlComponent.engine?4() -> QQmlEngine -QtQml.QQmlComponent.setInitialProperties?4(QObject, unknown-type) -QtQml.QQmlContext?1(QQmlEngine, QObject parent=None) -QtQml.QQmlContext.__init__?1(self, QQmlEngine, QObject parent=None) -QtQml.QQmlContext?1(QQmlContext, QObject parent=None) -QtQml.QQmlContext.__init__?1(self, QQmlContext, QObject parent=None) -QtQml.QQmlContext.isValid?4() -> bool -QtQml.QQmlContext.engine?4() -> QQmlEngine -QtQml.QQmlContext.parentContext?4() -> QQmlContext -QtQml.QQmlContext.contextObject?4() -> QObject -QtQml.QQmlContext.setContextObject?4(QObject) -QtQml.QQmlContext.contextProperty?4(QString) -> QVariant -QtQml.QQmlContext.setContextProperty?4(QString, QObject) -QtQml.QQmlContext.setContextProperty?4(QString, QVariant) -QtQml.QQmlContext.nameForObject?4(QObject) -> QString -QtQml.QQmlContext.resolvedUrl?4(QUrl) -> QUrl -QtQml.QQmlContext.setBaseUrl?4(QUrl) -QtQml.QQmlContext.baseUrl?4() -> QUrl -QtQml.QQmlContext.setContextProperties?4(unknown-type) -QtQml.QQmlContext.objectForName?4(QString) -> QObject -QtQml.QQmlContext.PropertyPair.name?7 -QtQml.QQmlContext.PropertyPair.value?7 -QtQml.QQmlContext.PropertyPair?1() -QtQml.QQmlContext.PropertyPair.__init__?1(self) -QtQml.QQmlContext.PropertyPair?1(QQmlContext.PropertyPair) -QtQml.QQmlContext.PropertyPair.__init__?1(self, QQmlContext.PropertyPair) -QtQml.QQmlImageProviderBase.Flag?10 -QtQml.QQmlImageProviderBase.Flag.ForceAsynchronousImageLoading?10 -QtQml.QQmlImageProviderBase.ImageType?10 -QtQml.QQmlImageProviderBase.ImageType.Image?10 -QtQml.QQmlImageProviderBase.ImageType.Pixmap?10 -QtQml.QQmlImageProviderBase.ImageType.Texture?10 -QtQml.QQmlImageProviderBase.ImageType.ImageResponse?10 -QtQml.QQmlImageProviderBase.imageType?4() -> QQmlImageProviderBase.ImageType -QtQml.QQmlImageProviderBase.flags?4() -> unknown-type -QtQml.QQmlError?1() -QtQml.QQmlError.__init__?1(self) -QtQml.QQmlError?1(QQmlError) -QtQml.QQmlError.__init__?1(self, QQmlError) -QtQml.QQmlError.isValid?4() -> bool -QtQml.QQmlError.url?4() -> QUrl -QtQml.QQmlError.setUrl?4(QUrl) -QtQml.QQmlError.description?4() -> QString -QtQml.QQmlError.setDescription?4(QString) -QtQml.QQmlError.line?4() -> int -QtQml.QQmlError.setLine?4(int) -QtQml.QQmlError.column?4() -> int -QtQml.QQmlError.setColumn?4(int) -QtQml.QQmlError.toString?4() -> QString -QtQml.QQmlError.object?4() -> QObject -QtQml.QQmlError.setObject?4(QObject) -QtQml.QQmlError.messageType?4() -> QtMsgType -QtQml.QQmlError.setMessageType?4(QtMsgType) -QtQml.QQmlError.swap?4(QQmlError) -QtQml.QQmlExpression?1() -QtQml.QQmlExpression.__init__?1(self) -QtQml.QQmlExpression?1(QQmlContext, QObject, QString, QObject parent=None) -QtQml.QQmlExpression.__init__?1(self, QQmlContext, QObject, QString, QObject parent=None) -QtQml.QQmlExpression?1(QQmlScriptString, QQmlContext context=None, QObject scope=None, QObject parent=None) -QtQml.QQmlExpression.__init__?1(self, QQmlScriptString, QQmlContext context=None, QObject scope=None, QObject parent=None) -QtQml.QQmlExpression.engine?4() -> QQmlEngine -QtQml.QQmlExpression.context?4() -> QQmlContext -QtQml.QQmlExpression.expression?4() -> QString -QtQml.QQmlExpression.setExpression?4(QString) -QtQml.QQmlExpression.notifyOnValueChanged?4() -> bool -QtQml.QQmlExpression.setNotifyOnValueChanged?4(bool) -QtQml.QQmlExpression.sourceFile?4() -> QString -QtQml.QQmlExpression.lineNumber?4() -> int -QtQml.QQmlExpression.columnNumber?4() -> int -QtQml.QQmlExpression.setSourceLocation?4(QString, int, int column=0) -QtQml.QQmlExpression.scopeObject?4() -> QObject -QtQml.QQmlExpression.hasError?4() -> bool -QtQml.QQmlExpression.clearError?4() -QtQml.QQmlExpression.error?4() -> QQmlError -QtQml.QQmlExpression.evaluate?4() -> (QVariant, bool) -QtQml.QQmlExpression.valueChanged?4() -QtQml.QQmlExtensionPlugin?1(QObject parent=None) -QtQml.QQmlExtensionPlugin.__init__?1(self, QObject parent=None) -QtQml.QQmlExtensionPlugin.registerTypes?4(str) -QtQml.QQmlExtensionPlugin.baseUrl?4() -> QUrl -QtQml.QQmlExtensionPlugin.unregisterTypes?4() -QtQml.QQmlEngineExtensionPlugin?1(QObject parent=None) -QtQml.QQmlEngineExtensionPlugin.__init__?1(self, QObject parent=None) -QtQml.QQmlEngineExtensionPlugin.initializeEngine?4(QQmlEngine, str) -QtQml.QQmlFileSelector?1(QQmlEngine, QObject parent=None) -QtQml.QQmlFileSelector.__init__?1(self, QQmlEngine, QObject parent=None) -QtQml.QQmlFileSelector.setSelector?4(QFileSelector) -QtQml.QQmlFileSelector.setExtraSelectors?4(QStringList) -QtQml.QQmlFileSelector.selector?4() -> QFileSelector -QtQml.QQmlIncubator.Status?10 -QtQml.QQmlIncubator.Status.Null?10 -QtQml.QQmlIncubator.Status.Ready?10 -QtQml.QQmlIncubator.Status.Loading?10 -QtQml.QQmlIncubator.Status.Error?10 -QtQml.QQmlIncubator.IncubationMode?10 -QtQml.QQmlIncubator.IncubationMode.Asynchronous?10 -QtQml.QQmlIncubator.IncubationMode.AsynchronousIfNested?10 -QtQml.QQmlIncubator.IncubationMode.Synchronous?10 -QtQml.QQmlIncubator?1(QQmlIncubator.IncubationMode mode=QQmlIncubator.Asynchronous) -QtQml.QQmlIncubator.__init__?1(self, QQmlIncubator.IncubationMode mode=QQmlIncubator.Asynchronous) -QtQml.QQmlIncubator.clear?4() -QtQml.QQmlIncubator.forceCompletion?4() -QtQml.QQmlIncubator.isNull?4() -> bool -QtQml.QQmlIncubator.isReady?4() -> bool -QtQml.QQmlIncubator.isError?4() -> bool -QtQml.QQmlIncubator.isLoading?4() -> bool -QtQml.QQmlIncubator.errors?4() -> unknown-type -QtQml.QQmlIncubator.incubationMode?4() -> QQmlIncubator.IncubationMode -QtQml.QQmlIncubator.status?4() -> QQmlIncubator.Status -QtQml.QQmlIncubator.object?4() -> QObject -QtQml.QQmlIncubator.setInitialProperties?4(unknown-type) -QtQml.QQmlIncubator.statusChanged?4(QQmlIncubator.Status) -QtQml.QQmlIncubator.setInitialState?4(QObject) -QtQml.QQmlIncubationController?1() -QtQml.QQmlIncubationController.__init__?1(self) -QtQml.QQmlIncubationController.engine?4() -> QQmlEngine -QtQml.QQmlIncubationController.incubatingObjectCount?4() -> int -QtQml.QQmlIncubationController.incubateFor?4(int) -QtQml.QQmlIncubationController.incubatingObjectCountChanged?4(int) -QtQml.QQmlListReference?1() -QtQml.QQmlListReference.__init__?1(self) -QtQml.QQmlListReference?1(QObject, str, QQmlEngine engine=None) -QtQml.QQmlListReference.__init__?1(self, QObject, str, QQmlEngine engine=None) -QtQml.QQmlListReference?1(QQmlListReference) -QtQml.QQmlListReference.__init__?1(self, QQmlListReference) -QtQml.QQmlListReference?1(QVariant, QQmlEngine engine=None) -QtQml.QQmlListReference.__init__?1(self, QVariant, QQmlEngine engine=None) -QtQml.QQmlListReference.isValid?4() -> bool -QtQml.QQmlListReference.object?4() -> QObject -QtQml.QQmlListReference.listElementType?4() -> QMetaObject -QtQml.QQmlListReference.canAppend?4() -> bool -QtQml.QQmlListReference.canAt?4() -> bool -QtQml.QQmlListReference.canClear?4() -> bool -QtQml.QQmlListReference.canCount?4() -> bool -QtQml.QQmlListReference.isManipulable?4() -> bool -QtQml.QQmlListReference.isReadable?4() -> bool -QtQml.QQmlListReference.append?4(QObject) -> bool -QtQml.QQmlListReference.at?4(int) -> QObject -QtQml.QQmlListReference.clear?4() -> bool -QtQml.QQmlListReference.count?4() -> int -QtQml.QQmlListReference.canReplace?4() -> bool -QtQml.QQmlListReference.canRemoveLast?4() -> bool -QtQml.QQmlListReference.replace?4(int, QObject) -> bool -QtQml.QQmlListReference.removeLast?4() -> bool -QtQml.QQmlNetworkAccessManagerFactory?1() -QtQml.QQmlNetworkAccessManagerFactory.__init__?1(self) -QtQml.QQmlNetworkAccessManagerFactory?1(QQmlNetworkAccessManagerFactory) -QtQml.QQmlNetworkAccessManagerFactory.__init__?1(self, QQmlNetworkAccessManagerFactory) -QtQml.QQmlNetworkAccessManagerFactory.create?4(QObject) -> QNetworkAccessManager -QtQml.QQmlParserStatus?1() -QtQml.QQmlParserStatus.__init__?1(self) -QtQml.QQmlParserStatus?1(QQmlParserStatus) -QtQml.QQmlParserStatus.__init__?1(self, QQmlParserStatus) -QtQml.QQmlParserStatus.classBegin?4() -QtQml.QQmlParserStatus.componentComplete?4() -QtQml.QQmlProperty.Type?10 -QtQml.QQmlProperty.Type.Invalid?10 -QtQml.QQmlProperty.Type.Property?10 -QtQml.QQmlProperty.Type.SignalProperty?10 -QtQml.QQmlProperty.PropertyTypeCategory?10 -QtQml.QQmlProperty.PropertyTypeCategory.InvalidCategory?10 -QtQml.QQmlProperty.PropertyTypeCategory.List?10 -QtQml.QQmlProperty.PropertyTypeCategory.Object?10 -QtQml.QQmlProperty.PropertyTypeCategory.Normal?10 -QtQml.QQmlProperty?1() -QtQml.QQmlProperty.__init__?1(self) -QtQml.QQmlProperty?1(QObject) -QtQml.QQmlProperty.__init__?1(self, QObject) -QtQml.QQmlProperty?1(QObject, QQmlContext) -QtQml.QQmlProperty.__init__?1(self, QObject, QQmlContext) -QtQml.QQmlProperty?1(QObject, QQmlEngine) -QtQml.QQmlProperty.__init__?1(self, QObject, QQmlEngine) -QtQml.QQmlProperty?1(QObject, QString) -QtQml.QQmlProperty.__init__?1(self, QObject, QString) -QtQml.QQmlProperty?1(QObject, QString, QQmlContext) -QtQml.QQmlProperty.__init__?1(self, QObject, QString, QQmlContext) -QtQml.QQmlProperty?1(QObject, QString, QQmlEngine) -QtQml.QQmlProperty.__init__?1(self, QObject, QString, QQmlEngine) -QtQml.QQmlProperty?1(QQmlProperty) -QtQml.QQmlProperty.__init__?1(self, QQmlProperty) -QtQml.QQmlProperty.type?4() -> QQmlProperty.Type -QtQml.QQmlProperty.isValid?4() -> bool -QtQml.QQmlProperty.isProperty?4() -> bool -QtQml.QQmlProperty.isSignalProperty?4() -> bool -QtQml.QQmlProperty.isBindable?4() -> bool -QtQml.QQmlProperty.propertyType?4() -> int -QtQml.QQmlProperty.propertyTypeCategory?4() -> QQmlProperty.PropertyTypeCategory -QtQml.QQmlProperty.propertyTypeName?4() -> str -QtQml.QQmlProperty.propertyMetaType?4() -> QMetaType -QtQml.QQmlProperty.name?4() -> QString -QtQml.QQmlProperty.read?4() -> QVariant -QtQml.QQmlProperty.read?4(QObject, QString) -> QVariant -QtQml.QQmlProperty.read?4(QObject, QString, QQmlContext) -> QVariant -QtQml.QQmlProperty.read?4(QObject, QString, QQmlEngine) -> QVariant -QtQml.QQmlProperty.write?4(QVariant) -> bool -QtQml.QQmlProperty.write?4(QObject, QString, QVariant) -> bool -QtQml.QQmlProperty.write?4(QObject, QString, QVariant, QQmlContext) -> bool -QtQml.QQmlProperty.write?4(QObject, QString, QVariant, QQmlEngine) -> bool -QtQml.QQmlProperty.reset?4() -> bool -QtQml.QQmlProperty.hasNotifySignal?4() -> bool -QtQml.QQmlProperty.needsNotifySignal?4() -> bool -QtQml.QQmlProperty.connectNotifySignal?4(Any) -> bool -QtQml.QQmlProperty.connectNotifySignal?4(QObject, int) -> bool -QtQml.QQmlProperty.isWritable?4() -> bool -QtQml.QQmlProperty.isDesignable?4() -> bool -QtQml.QQmlProperty.isResettable?4() -> bool -QtQml.QQmlProperty.object?4() -> QObject -QtQml.QQmlProperty.index?4() -> int -QtQml.QQmlProperty.property?4() -> QMetaProperty -QtQml.QQmlProperty.method?4() -> QMetaMethod -QtQml.QQmlProperty.swap?4(QQmlProperty) -QtQml.QQmlPropertyMap?1(QObject parent=None) -QtQml.QQmlPropertyMap.__init__?1(self, QObject parent=None) -QtQml.QQmlPropertyMap.value?4(QString) -> QVariant -QtQml.QQmlPropertyMap.insert?4(unknown-type) -QtQml.QQmlPropertyMap.insert?4(QString, QVariant) -QtQml.QQmlPropertyMap.freeze?4() -QtQml.QQmlPropertyMap.clear?4(QString) -QtQml.QQmlPropertyMap.keys?4() -> QStringList -QtQml.QQmlPropertyMap.count?4() -> int -QtQml.QQmlPropertyMap.size?4() -> int -QtQml.QQmlPropertyMap.isEmpty?4() -> bool -QtQml.QQmlPropertyMap.contains?4(QString) -> bool -QtQml.QQmlPropertyMap.valueChanged?4(QString, QVariant) -QtQml.QQmlPropertyMap.updateValue?4(QString, QVariant) -> QVariant -QtQml.QQmlPropertyValueSource?1() -QtQml.QQmlPropertyValueSource.__init__?1(self) -QtQml.QQmlPropertyValueSource?1(QQmlPropertyValueSource) -QtQml.QQmlPropertyValueSource.__init__?1(self, QQmlPropertyValueSource) -QtQml.QQmlPropertyValueSource.setTarget?4(QQmlProperty) -QtQml.QQmlScriptString?1() -QtQml.QQmlScriptString.__init__?1(self) -QtQml.QQmlScriptString?1(QQmlScriptString) -QtQml.QQmlScriptString.__init__?1(self, QQmlScriptString) -QtQml.QQmlScriptString.isEmpty?4() -> bool -QtQml.QQmlScriptString.isUndefinedLiteral?4() -> bool -QtQml.QQmlScriptString.isNullLiteral?4() -> bool -QtQml.QQmlScriptString.stringLiteral?4() -> QString -QtQml.QQmlScriptString.numberLiteral?4() -> (float, bool) -QtQml.QQmlScriptString.booleanLiteral?4() -> (bool, bool) -QtWidgets.QWIDGETSIZE_MAX?7 -QtWidgets.qDrawShadeLine?4(QPainter, int, int, int, int, QPalette, bool sunken=True, int lineWidth=1, int midLineWidth=0) -QtWidgets.qDrawShadeLine?4(QPainter, QPoint, QPoint, QPalette, bool sunken=True, int lineWidth=1, int midLineWidth=0) -QtWidgets.qDrawShadeRect?4(QPainter, int, int, int, int, QPalette, bool sunken=False, int lineWidth=1, int midLineWidth=0, QBrush fill=None) -QtWidgets.qDrawShadeRect?4(QPainter, QRect, QPalette, bool sunken=False, int lineWidth=1, int midLineWidth=0, QBrush fill=None) -QtWidgets.qDrawShadePanel?4(QPainter, int, int, int, int, QPalette, bool sunken=False, int lineWidth=1, QBrush fill=None) -QtWidgets.qDrawShadePanel?4(QPainter, QRect, QPalette, bool sunken=False, int lineWidth=1, QBrush fill=None) -QtWidgets.qDrawWinButton?4(QPainter, int, int, int, int, QPalette, bool sunken=False, QBrush fill=None) -QtWidgets.qDrawWinButton?4(QPainter, QRect, QPalette, bool sunken=False, QBrush fill=None) -QtWidgets.qDrawWinPanel?4(QPainter, int, int, int, int, QPalette, bool sunken=False, QBrush fill=None) -QtWidgets.qDrawWinPanel?4(QPainter, QRect, QPalette, bool sunken=False, QBrush fill=None) -QtWidgets.qDrawPlainRect?4(QPainter, int, int, int, int, QColor, int lineWidth=1, QBrush fill=None) -QtWidgets.qDrawPlainRect?4(QPainter, QRect, QColor, int lineWidth=1, QBrush fill=None) -QtWidgets.qDrawBorderPixmap?4(QPainter, QRect, QMargins, QPixmap) -QtWidgets.qDrawPlainRoundedRect?4(QPainter, QRect, float, float, QColor, int lineWidth=1, QBrush fill=None) -QtWidgets.qDrawPlainRoundedRect?4(QPainter, int, int, int, int, float, float, QColor, int lineWidth=1, QBrush fill=None) -QtWidgets.QWidget.RenderFlag?10 -QtWidgets.QWidget.RenderFlag.DrawWindowBackground?10 -QtWidgets.QWidget.RenderFlag.DrawChildren?10 -QtWidgets.QWidget.RenderFlag.IgnoreMask?10 -QtWidgets.QWidget?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QWidget.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QWidget.devType?4() -> int -QtWidgets.QWidget.style?4() -> QStyle -QtWidgets.QWidget.setStyle?4(QStyle) -QtWidgets.QWidget.isEnabledTo?4(QWidget) -> bool -QtWidgets.QWidget.setEnabled?4(bool) -QtWidgets.QWidget.setDisabled?4(bool) -QtWidgets.QWidget.setWindowModified?4(bool) -QtWidgets.QWidget.frameGeometry?4() -> QRect -QtWidgets.QWidget.normalGeometry?4() -> QRect -QtWidgets.QWidget.x?4() -> int -QtWidgets.QWidget.y?4() -> int -QtWidgets.QWidget.pos?4() -> QPoint -QtWidgets.QWidget.frameSize?4() -> QSize -QtWidgets.QWidget.childrenRect?4() -> QRect -QtWidgets.QWidget.childrenRegion?4() -> QRegion -QtWidgets.QWidget.minimumSize?4() -> QSize -QtWidgets.QWidget.maximumSize?4() -> QSize -QtWidgets.QWidget.setMinimumSize?4(int, int) -QtWidgets.QWidget.setMaximumSize?4(int, int) -QtWidgets.QWidget.setMinimumWidth?4(int) -QtWidgets.QWidget.setMinimumHeight?4(int) -QtWidgets.QWidget.setMaximumWidth?4(int) -QtWidgets.QWidget.setMaximumHeight?4(int) -QtWidgets.QWidget.sizeIncrement?4() -> QSize -QtWidgets.QWidget.setSizeIncrement?4(int, int) -QtWidgets.QWidget.baseSize?4() -> QSize -QtWidgets.QWidget.setBaseSize?4(int, int) -QtWidgets.QWidget.setFixedSize?4(QSize) -QtWidgets.QWidget.setFixedSize?4(int, int) -QtWidgets.QWidget.setFixedWidth?4(int) -QtWidgets.QWidget.setFixedHeight?4(int) -QtWidgets.QWidget.mapToGlobal?4(QPoint) -> QPoint -QtWidgets.QWidget.mapToGlobal?4(QPointF) -> QPointF -QtWidgets.QWidget.mapFromGlobal?4(QPoint) -> QPoint -QtWidgets.QWidget.mapFromGlobal?4(QPointF) -> QPointF -QtWidgets.QWidget.mapToParent?4(QPoint) -> QPoint -QtWidgets.QWidget.mapToParent?4(QPointF) -> QPointF -QtWidgets.QWidget.mapFromParent?4(QPoint) -> QPoint -QtWidgets.QWidget.mapFromParent?4(QPointF) -> QPointF -QtWidgets.QWidget.mapTo?4(QWidget, QPoint) -> QPoint -QtWidgets.QWidget.mapTo?4(QWidget, QPointF) -> QPointF -QtWidgets.QWidget.mapFrom?4(QWidget, QPoint) -> QPoint -QtWidgets.QWidget.mapFrom?4(QWidget, QPointF) -> QPointF -QtWidgets.QWidget.window?4() -> QWidget -QtWidgets.QWidget.palette?4() -> QPalette -QtWidgets.QWidget.setPalette?4(QPalette) -QtWidgets.QWidget.setBackgroundRole?4(QPalette.ColorRole) -QtWidgets.QWidget.backgroundRole?4() -> QPalette.ColorRole -QtWidgets.QWidget.setForegroundRole?4(QPalette.ColorRole) -QtWidgets.QWidget.foregroundRole?4() -> QPalette.ColorRole -QtWidgets.QWidget.setFont?4(QFont) -QtWidgets.QWidget.cursor?4() -> QCursor -QtWidgets.QWidget.setCursor?4(QCursor) -QtWidgets.QWidget.unsetCursor?4() -QtWidgets.QWidget.setMask?4(QBitmap) -QtWidgets.QWidget.setMask?4(QRegion) -QtWidgets.QWidget.mask?4() -> QRegion -QtWidgets.QWidget.clearMask?4() -QtWidgets.QWidget.setWindowTitle?4(QString) -QtWidgets.QWidget.windowTitle?4() -> QString -QtWidgets.QWidget.setWindowIcon?4(QIcon) -QtWidgets.QWidget.windowIcon?4() -> QIcon -QtWidgets.QWidget.setWindowIconText?4(QString) -QtWidgets.QWidget.windowIconText?4() -> QString -QtWidgets.QWidget.setWindowRole?4(QString) -QtWidgets.QWidget.windowRole?4() -> QString -QtWidgets.QWidget.setWindowOpacity?4(float) -QtWidgets.QWidget.windowOpacity?4() -> float -QtWidgets.QWidget.isWindowModified?4() -> bool -QtWidgets.QWidget.setToolTip?4(QString) -QtWidgets.QWidget.toolTip?4() -> QString -QtWidgets.QWidget.setStatusTip?4(QString) -QtWidgets.QWidget.statusTip?4() -> QString -QtWidgets.QWidget.setWhatsThis?4(QString) -QtWidgets.QWidget.whatsThis?4() -> QString -QtWidgets.QWidget.accessibleName?4() -> QString -QtWidgets.QWidget.setAccessibleName?4(QString) -QtWidgets.QWidget.accessibleDescription?4() -> QString -QtWidgets.QWidget.setAccessibleDescription?4(QString) -QtWidgets.QWidget.setLayoutDirection?4(Qt.LayoutDirection) -QtWidgets.QWidget.layoutDirection?4() -> Qt.LayoutDirection -QtWidgets.QWidget.unsetLayoutDirection?4() -QtWidgets.QWidget.isRightToLeft?4() -> bool -QtWidgets.QWidget.isLeftToRight?4() -> bool -QtWidgets.QWidget.setFocus?4() -QtWidgets.QWidget.isActiveWindow?4() -> bool -QtWidgets.QWidget.activateWindow?4() -QtWidgets.QWidget.clearFocus?4() -QtWidgets.QWidget.setFocus?4(Qt.FocusReason) -QtWidgets.QWidget.focusPolicy?4() -> Qt.FocusPolicy -QtWidgets.QWidget.setFocusPolicy?4(Qt.FocusPolicy) -QtWidgets.QWidget.hasFocus?4() -> bool -QtWidgets.QWidget.setTabOrder?4(QWidget, QWidget) -QtWidgets.QWidget.setFocusProxy?4(QWidget) -QtWidgets.QWidget.focusProxy?4() -> QWidget -QtWidgets.QWidget.contextMenuPolicy?4() -> Qt.ContextMenuPolicy -QtWidgets.QWidget.setContextMenuPolicy?4(Qt.ContextMenuPolicy) -QtWidgets.QWidget.grabMouse?4() -QtWidgets.QWidget.grabMouse?4(QCursor) -QtWidgets.QWidget.releaseMouse?4() -QtWidgets.QWidget.grabKeyboard?4() -QtWidgets.QWidget.releaseKeyboard?4() -QtWidgets.QWidget.grabShortcut?4(QKeySequence, Qt.ShortcutContext context=Qt.WindowShortcut) -> int -QtWidgets.QWidget.releaseShortcut?4(int) -QtWidgets.QWidget.setShortcutEnabled?4(int, bool enabled=True) -QtWidgets.QWidget.mouseGrabber?4() -> QWidget -QtWidgets.QWidget.keyboardGrabber?4() -> QWidget -QtWidgets.QWidget.setUpdatesEnabled?4(bool) -QtWidgets.QWidget.update?4() -QtWidgets.QWidget.repaint?4() -QtWidgets.QWidget.update?4(QRect) -QtWidgets.QWidget.update?4(QRegion) -QtWidgets.QWidget.repaint?4(int, int, int, int) -QtWidgets.QWidget.repaint?4(QRect) -QtWidgets.QWidget.repaint?4(QRegion) -QtWidgets.QWidget.setVisible?4(bool) -QtWidgets.QWidget.setHidden?4(bool) -QtWidgets.QWidget.show?4() -QtWidgets.QWidget.hide?4() -QtWidgets.QWidget.showMinimized?4() -QtWidgets.QWidget.showMaximized?4() -QtWidgets.QWidget.showFullScreen?4() -QtWidgets.QWidget.showNormal?4() -QtWidgets.QWidget.close?4() -> bool -QtWidgets.QWidget.raise_?4() -QtWidgets.QWidget.lower?4() -QtWidgets.QWidget.stackUnder?4(QWidget) -QtWidgets.QWidget.move?4(QPoint) -QtWidgets.QWidget.resize?4(QSize) -QtWidgets.QWidget.setGeometry?4(QRect) -QtWidgets.QWidget.adjustSize?4() -QtWidgets.QWidget.isVisibleTo?4(QWidget) -> bool -QtWidgets.QWidget.isMinimized?4() -> bool -QtWidgets.QWidget.isMaximized?4() -> bool -QtWidgets.QWidget.isFullScreen?4() -> bool -QtWidgets.QWidget.windowState?4() -> unknown-type -QtWidgets.QWidget.setWindowState?4(unknown-type) -QtWidgets.QWidget.overrideWindowState?4(unknown-type) -QtWidgets.QWidget.sizeHint?4() -> QSize -QtWidgets.QWidget.minimumSizeHint?4() -> QSize -QtWidgets.QWidget.sizePolicy?4() -> QSizePolicy -QtWidgets.QWidget.setSizePolicy?4(QSizePolicy) -QtWidgets.QWidget.heightForWidth?4(int) -> int -QtWidgets.QWidget.visibleRegion?4() -> QRegion -QtWidgets.QWidget.setContentsMargins?4(int, int, int, int) -QtWidgets.QWidget.contentsRect?4() -> QRect -QtWidgets.QWidget.layout?4() -> QLayout -QtWidgets.QWidget.setLayout?4(QLayout) -QtWidgets.QWidget.updateGeometry?4() -QtWidgets.QWidget.setParent?4(QWidget) -QtWidgets.QWidget.setParent?4(QWidget, unknown-type) -QtWidgets.QWidget.scroll?4(int, int) -QtWidgets.QWidget.scroll?4(int, int, QRect) -QtWidgets.QWidget.focusWidget?4() -> QWidget -QtWidgets.QWidget.nextInFocusChain?4() -> QWidget -QtWidgets.QWidget.acceptDrops?4() -> bool -QtWidgets.QWidget.setAcceptDrops?4(bool) -QtWidgets.QWidget.addAction?4(QIcon, QString) -> QAction -QtWidgets.QWidget.addAction?4(QIcon, QString, Any, Qt.ConnectionType type=Qt.AutoConnection) -> QAction -QtWidgets.QWidget.addAction?4(QIcon, QString, QKeySequence) -> QAction -QtWidgets.QWidget.addAction?4(QIcon, QString, QKeySequence, Any, Qt.ConnectionType type=Qt.AutoConnection) -> QAction -QtWidgets.QWidget.addAction?4(QString) -> QAction -QtWidgets.QWidget.addAction?4(QString, QKeySequence) -> QAction -QtWidgets.QWidget.addAction?4(QString, Any, Qt.ConnectionType type=Qt.AutoConnection) -> QAction -QtWidgets.QWidget.addAction?4(QString, QKeySequence, Any, Qt.ConnectionType type=Qt.AutoConnection) -> QAction -QtWidgets.QWidget.addAction?4(QAction) -QtWidgets.QWidget.addActions?4(unknown-type) -QtWidgets.QWidget.insertAction?4(QAction, QAction) -QtWidgets.QWidget.insertActions?4(QAction, unknown-type) -QtWidgets.QWidget.removeAction?4(QAction) -QtWidgets.QWidget.actions?4() -> unknown-type -QtWidgets.QWidget.setWindowFlags?4(unknown-type) -QtWidgets.QWidget.overrideWindowFlags?4(unknown-type) -QtWidgets.QWidget.find?4(quintptr) -> QWidget -QtWidgets.QWidget.childAt?4(QPoint) -> QWidget -QtWidgets.QWidget.setAttribute?4(Qt.WidgetAttribute, bool on=True) -QtWidgets.QWidget.paintEngine?4() -> QPaintEngine -QtWidgets.QWidget.ensurePolished?4() -QtWidgets.QWidget.isAncestorOf?4(QWidget) -> bool -QtWidgets.QWidget.customContextMenuRequested?4(QPoint) -QtWidgets.QWidget.event?4(QEvent) -> bool -QtWidgets.QWidget.mousePressEvent?4(QMouseEvent) -QtWidgets.QWidget.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QWidget.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QWidget.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QWidget.wheelEvent?4(QWheelEvent) -QtWidgets.QWidget.keyPressEvent?4(QKeyEvent) -QtWidgets.QWidget.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QWidget.focusInEvent?4(QFocusEvent) -QtWidgets.QWidget.focusOutEvent?4(QFocusEvent) -QtWidgets.QWidget.enterEvent?4(QEnterEvent) -QtWidgets.QWidget.leaveEvent?4(QEvent) -QtWidgets.QWidget.paintEvent?4(QPaintEvent) -QtWidgets.QWidget.moveEvent?4(QMoveEvent) -QtWidgets.QWidget.resizeEvent?4(QResizeEvent) -QtWidgets.QWidget.closeEvent?4(QCloseEvent) -QtWidgets.QWidget.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QWidget.tabletEvent?4(QTabletEvent) -QtWidgets.QWidget.actionEvent?4(QActionEvent) -QtWidgets.QWidget.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QWidget.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QWidget.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QWidget.dropEvent?4(QDropEvent) -QtWidgets.QWidget.showEvent?4(QShowEvent) -QtWidgets.QWidget.hideEvent?4(QHideEvent) -QtWidgets.QWidget.changeEvent?4(QEvent) -QtWidgets.QWidget.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtWidgets.QWidget.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QWidget.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QWidget.updateMicroFocus?4(Qt.InputMethodQuery query=Qt.ImQueryAll) -QtWidgets.QWidget.create?4(quintptr window=0, bool initializeWindow=True, bool destroyOldWindow=True) -QtWidgets.QWidget.destroy?4(bool destroyWindow=True, bool destroySubWindows=True) -QtWidgets.QWidget.focusNextPrevChild?4(bool) -> bool -QtWidgets.QWidget.focusNextChild?4() -> bool -QtWidgets.QWidget.focusPreviousChild?4() -> bool -QtWidgets.QWidget.childAt?4(int, int) -> QWidget -QtWidgets.QWidget.windowType?4() -> Qt.WindowType -QtWidgets.QWidget.windowFlags?4() -> unknown-type -QtWidgets.QWidget.winId?4() -> quintptr -QtWidgets.QWidget.isWindow?4() -> bool -QtWidgets.QWidget.isEnabled?4() -> bool -QtWidgets.QWidget.isModal?4() -> bool -QtWidgets.QWidget.minimumWidth?4() -> int -QtWidgets.QWidget.minimumHeight?4() -> int -QtWidgets.QWidget.maximumWidth?4() -> int -QtWidgets.QWidget.maximumHeight?4() -> int -QtWidgets.QWidget.setMinimumSize?4(QSize) -QtWidgets.QWidget.setMaximumSize?4(QSize) -QtWidgets.QWidget.setSizeIncrement?4(QSize) -QtWidgets.QWidget.setBaseSize?4(QSize) -QtWidgets.QWidget.font?4() -> QFont -QtWidgets.QWidget.fontMetrics?4() -> QFontMetrics -QtWidgets.QWidget.fontInfo?4() -> QFontInfo -QtWidgets.QWidget.setMouseTracking?4(bool) -QtWidgets.QWidget.hasMouseTracking?4() -> bool -QtWidgets.QWidget.underMouse?4() -> bool -QtWidgets.QWidget.updatesEnabled?4() -> bool -QtWidgets.QWidget.update?4(int, int, int, int) -QtWidgets.QWidget.isVisible?4() -> bool -QtWidgets.QWidget.isHidden?4() -> bool -QtWidgets.QWidget.move?4(int, int) -QtWidgets.QWidget.resize?4(int, int) -QtWidgets.QWidget.setGeometry?4(int, int, int, int) -QtWidgets.QWidget.rect?4() -> QRect -QtWidgets.QWidget.geometry?4() -> QRect -QtWidgets.QWidget.size?4() -> QSize -QtWidgets.QWidget.width?4() -> int -QtWidgets.QWidget.height?4() -> int -QtWidgets.QWidget.parentWidget?4() -> QWidget -QtWidgets.QWidget.setSizePolicy?4(QSizePolicy.Policy, QSizePolicy.Policy) -QtWidgets.QWidget.testAttribute?4(Qt.WidgetAttribute) -> bool -QtWidgets.QWidget.windowModality?4() -> Qt.WindowModality -QtWidgets.QWidget.setWindowModality?4(Qt.WindowModality) -QtWidgets.QWidget.autoFillBackground?4() -> bool -QtWidgets.QWidget.setAutoFillBackground?4(bool) -QtWidgets.QWidget.setStyleSheet?4(QString) -QtWidgets.QWidget.styleSheet?4() -> QString -QtWidgets.QWidget.setShortcutAutoRepeat?4(int, bool enabled=True) -QtWidgets.QWidget.saveGeometry?4() -> QByteArray -QtWidgets.QWidget.restoreGeometry?4(QByteArray) -> bool -QtWidgets.QWidget.render?4(QPaintDevice, QPoint targetOffset=QPoint(), QRegion sourceRegion=QRegion(), unknown-type flags=QWidget.RenderFlags(QWidget.DrawWindowBackground|QWidget.DrawChildren)) -QtWidgets.QWidget.render?4(QPainter, QPoint targetOffset=QPoint(), QRegion sourceRegion=QRegion(), unknown-type flags=QWidget.RenderFlags(QWidget.DrawWindowBackground|QWidget.DrawChildren)) -QtWidgets.QWidget.setLocale?4(QLocale) -QtWidgets.QWidget.locale?4() -> QLocale -QtWidgets.QWidget.unsetLocale?4() -QtWidgets.QWidget.effectiveWinId?4() -> quintptr -QtWidgets.QWidget.nativeParentWidget?4() -> QWidget -QtWidgets.QWidget.setWindowFilePath?4(QString) -QtWidgets.QWidget.windowFilePath?4() -> QString -QtWidgets.QWidget.graphicsProxyWidget?4() -> QGraphicsProxyWidget -QtWidgets.QWidget.graphicsEffect?4() -> QGraphicsEffect -QtWidgets.QWidget.setGraphicsEffect?4(QGraphicsEffect) -QtWidgets.QWidget.grabGesture?4(Qt.GestureType, unknown-type flags=Qt.GestureFlags()) -QtWidgets.QWidget.ungrabGesture?4(Qt.GestureType) -QtWidgets.QWidget.setContentsMargins?4(QMargins) -QtWidgets.QWidget.contentsMargins?4() -> QMargins -QtWidgets.QWidget.previousInFocusChain?4() -> QWidget -QtWidgets.QWidget.inputMethodHints?4() -> unknown-type -QtWidgets.QWidget.setInputMethodHints?4(unknown-type) -QtWidgets.QWidget.hasHeightForWidth?4() -> bool -QtWidgets.QWidget.grab?4(QRect rectangle=QRect(QPoint(0, 0), QSize(-1, -1))) -> QPixmap -QtWidgets.QWidget.createWindowContainer?4(QWindow, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -> Any -QtWidgets.QWidget.windowHandle?4() -> QWindow -QtWidgets.QWidget.nativeEvent?4(QByteArray, PyQt6.sip.voidptr) -> (bool, qintptr) -QtWidgets.QWidget.sharedPainter?4() -> QPainter -QtWidgets.QWidget.initPainter?4(QPainter) -QtWidgets.QWidget.setToolTipDuration?4(int) -QtWidgets.QWidget.toolTipDuration?4() -> int -QtWidgets.QWidget.windowTitleChanged?4(QString) -QtWidgets.QWidget.windowIconChanged?4(QIcon) -QtWidgets.QWidget.windowIconTextChanged?4(QString) -QtWidgets.QWidget.setTabletTracking?4(bool) -QtWidgets.QWidget.hasTabletTracking?4() -> bool -QtWidgets.QWidget.setWindowFlag?4(Qt.WindowType, bool on=True) -QtWidgets.QWidget.screen?4() -> QScreen -QtWidgets.QWidget.setScreen?4(QScreen) -QtWidgets.QAbstractButton?1(QWidget parent=None) -QtWidgets.QAbstractButton.__init__?1(self, QWidget parent=None) -QtWidgets.QAbstractButton.setAutoRepeatDelay?4(int) -QtWidgets.QAbstractButton.autoRepeatDelay?4() -> int -QtWidgets.QAbstractButton.setAutoRepeatInterval?4(int) -QtWidgets.QAbstractButton.autoRepeatInterval?4() -> int -QtWidgets.QAbstractButton.setText?4(QString) -QtWidgets.QAbstractButton.text?4() -> QString -QtWidgets.QAbstractButton.setIcon?4(QIcon) -QtWidgets.QAbstractButton.icon?4() -> QIcon -QtWidgets.QAbstractButton.iconSize?4() -> QSize -QtWidgets.QAbstractButton.setShortcut?4(QKeySequence) -QtWidgets.QAbstractButton.shortcut?4() -> QKeySequence -QtWidgets.QAbstractButton.setCheckable?4(bool) -QtWidgets.QAbstractButton.isCheckable?4() -> bool -QtWidgets.QAbstractButton.isChecked?4() -> bool -QtWidgets.QAbstractButton.setDown?4(bool) -QtWidgets.QAbstractButton.isDown?4() -> bool -QtWidgets.QAbstractButton.setAutoRepeat?4(bool) -QtWidgets.QAbstractButton.autoRepeat?4() -> bool -QtWidgets.QAbstractButton.setAutoExclusive?4(bool) -QtWidgets.QAbstractButton.autoExclusive?4() -> bool -QtWidgets.QAbstractButton.group?4() -> QButtonGroup -QtWidgets.QAbstractButton.setIconSize?4(QSize) -QtWidgets.QAbstractButton.animateClick?4() -QtWidgets.QAbstractButton.click?4() -QtWidgets.QAbstractButton.toggle?4() -QtWidgets.QAbstractButton.setChecked?4(bool) -QtWidgets.QAbstractButton.pressed?4() -QtWidgets.QAbstractButton.released?4() -QtWidgets.QAbstractButton.clicked?4(bool checked=False) -QtWidgets.QAbstractButton.toggled?4(bool) -QtWidgets.QAbstractButton.paintEvent?4(QPaintEvent) -QtWidgets.QAbstractButton.hitButton?4(QPoint) -> bool -QtWidgets.QAbstractButton.checkStateSet?4() -QtWidgets.QAbstractButton.nextCheckState?4() -QtWidgets.QAbstractButton.event?4(QEvent) -> bool -QtWidgets.QAbstractButton.keyPressEvent?4(QKeyEvent) -QtWidgets.QAbstractButton.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QAbstractButton.mousePressEvent?4(QMouseEvent) -QtWidgets.QAbstractButton.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QAbstractButton.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QAbstractButton.focusInEvent?4(QFocusEvent) -QtWidgets.QAbstractButton.focusOutEvent?4(QFocusEvent) -QtWidgets.QAbstractButton.changeEvent?4(QEvent) -QtWidgets.QAbstractButton.timerEvent?4(QTimerEvent) -QtWidgets.QAbstractItemDelegate.EndEditHint?10 -QtWidgets.QAbstractItemDelegate.EndEditHint.NoHint?10 -QtWidgets.QAbstractItemDelegate.EndEditHint.EditNextItem?10 -QtWidgets.QAbstractItemDelegate.EndEditHint.EditPreviousItem?10 -QtWidgets.QAbstractItemDelegate.EndEditHint.SubmitModelCache?10 -QtWidgets.QAbstractItemDelegate.EndEditHint.RevertModelCache?10 -QtWidgets.QAbstractItemDelegate?1(QObject parent=None) -QtWidgets.QAbstractItemDelegate.__init__?1(self, QObject parent=None) -QtWidgets.QAbstractItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) -QtWidgets.QAbstractItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize -QtWidgets.QAbstractItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget -QtWidgets.QAbstractItemDelegate.setEditorData?4(QWidget, QModelIndex) -QtWidgets.QAbstractItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) -QtWidgets.QAbstractItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) -QtWidgets.QAbstractItemDelegate.destroyEditor?4(QWidget, QModelIndex) -QtWidgets.QAbstractItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool -QtWidgets.QAbstractItemDelegate.helpEvent?4(QHelpEvent, QAbstractItemView, QStyleOptionViewItem, QModelIndex) -> bool -QtWidgets.QAbstractItemDelegate.commitData?4(QWidget) -QtWidgets.QAbstractItemDelegate.closeEditor?4(QWidget, QAbstractItemDelegate.EndEditHint hint=QAbstractItemDelegate.NoHint) -QtWidgets.QAbstractItemDelegate.sizeHintChanged?4(QModelIndex) -QtWidgets.QFrame.StyleMask?10 -QtWidgets.QFrame.StyleMask.Shadow_Mask?10 -QtWidgets.QFrame.StyleMask.Shape_Mask?10 -QtWidgets.QFrame.Shape?10 -QtWidgets.QFrame.Shape.NoFrame?10 -QtWidgets.QFrame.Shape.Box?10 -QtWidgets.QFrame.Shape.Panel?10 -QtWidgets.QFrame.Shape.WinPanel?10 -QtWidgets.QFrame.Shape.HLine?10 -QtWidgets.QFrame.Shape.VLine?10 -QtWidgets.QFrame.Shape.StyledPanel?10 -QtWidgets.QFrame.Shadow?10 -QtWidgets.QFrame.Shadow.Plain?10 -QtWidgets.QFrame.Shadow.Raised?10 -QtWidgets.QFrame.Shadow.Sunken?10 -QtWidgets.QFrame?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QFrame.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QFrame.frameStyle?4() -> int -QtWidgets.QFrame.setFrameStyle?4(int) -QtWidgets.QFrame.frameWidth?4() -> int -QtWidgets.QFrame.sizeHint?4() -> QSize -QtWidgets.QFrame.frameShape?4() -> QFrame.Shape -QtWidgets.QFrame.setFrameShape?4(QFrame.Shape) -QtWidgets.QFrame.frameShadow?4() -> QFrame.Shadow -QtWidgets.QFrame.setFrameShadow?4(QFrame.Shadow) -QtWidgets.QFrame.lineWidth?4() -> int -QtWidgets.QFrame.setLineWidth?4(int) -QtWidgets.QFrame.midLineWidth?4() -> int -QtWidgets.QFrame.setMidLineWidth?4(int) -QtWidgets.QFrame.frameRect?4() -> QRect -QtWidgets.QFrame.setFrameRect?4(QRect) -QtWidgets.QFrame.event?4(QEvent) -> bool -QtWidgets.QFrame.paintEvent?4(QPaintEvent) -QtWidgets.QFrame.changeEvent?4(QEvent) -QtWidgets.QFrame.drawFrame?4(QPainter) -QtWidgets.QFrame.initStyleOption?4(QStyleOptionFrame) -QtWidgets.QAbstractScrollArea.SizeAdjustPolicy?10 -QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustIgnored?10 -QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustToContentsOnFirstShow?10 -QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents?10 -QtWidgets.QAbstractScrollArea?1(QWidget parent=None) -QtWidgets.QAbstractScrollArea.__init__?1(self, QWidget parent=None) -QtWidgets.QAbstractScrollArea.verticalScrollBarPolicy?4() -> Qt.ScrollBarPolicy -QtWidgets.QAbstractScrollArea.setVerticalScrollBarPolicy?4(Qt.ScrollBarPolicy) -QtWidgets.QAbstractScrollArea.verticalScrollBar?4() -> QScrollBar -QtWidgets.QAbstractScrollArea.horizontalScrollBarPolicy?4() -> Qt.ScrollBarPolicy -QtWidgets.QAbstractScrollArea.setHorizontalScrollBarPolicy?4(Qt.ScrollBarPolicy) -QtWidgets.QAbstractScrollArea.horizontalScrollBar?4() -> QScrollBar -QtWidgets.QAbstractScrollArea.viewport?4() -> QWidget -QtWidgets.QAbstractScrollArea.maximumViewportSize?4() -> QSize -QtWidgets.QAbstractScrollArea.minimumSizeHint?4() -> QSize -QtWidgets.QAbstractScrollArea.sizeHint?4() -> QSize -QtWidgets.QAbstractScrollArea.setViewportMargins?4(int, int, int, int) -QtWidgets.QAbstractScrollArea.setViewportMargins?4(QMargins) -QtWidgets.QAbstractScrollArea.viewportMargins?4() -> QMargins -QtWidgets.QAbstractScrollArea.viewportSizeHint?4() -> QSize -QtWidgets.QAbstractScrollArea.event?4(QEvent) -> bool -QtWidgets.QAbstractScrollArea.viewportEvent?4(QEvent) -> bool -QtWidgets.QAbstractScrollArea.resizeEvent?4(QResizeEvent) -QtWidgets.QAbstractScrollArea.paintEvent?4(QPaintEvent) -QtWidgets.QAbstractScrollArea.mousePressEvent?4(QMouseEvent) -QtWidgets.QAbstractScrollArea.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QAbstractScrollArea.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QAbstractScrollArea.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QAbstractScrollArea.wheelEvent?4(QWheelEvent) -QtWidgets.QAbstractScrollArea.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QAbstractScrollArea.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QAbstractScrollArea.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QAbstractScrollArea.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QAbstractScrollArea.dropEvent?4(QDropEvent) -QtWidgets.QAbstractScrollArea.keyPressEvent?4(QKeyEvent) -QtWidgets.QAbstractScrollArea.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QAbstractScrollArea.scrollContentsBy?4(int, int) -QtWidgets.QAbstractScrollArea.setVerticalScrollBar?4(QScrollBar) -QtWidgets.QAbstractScrollArea.setHorizontalScrollBar?4(QScrollBar) -QtWidgets.QAbstractScrollArea.cornerWidget?4() -> QWidget -QtWidgets.QAbstractScrollArea.setCornerWidget?4(QWidget) -QtWidgets.QAbstractScrollArea.addScrollBarWidget?4(QWidget, unknown-type) -QtWidgets.QAbstractScrollArea.scrollBarWidgets?4(unknown-type) -> unknown-type -QtWidgets.QAbstractScrollArea.setViewport?4(QWidget) -QtWidgets.QAbstractScrollArea.setupViewport?4(QWidget) -QtWidgets.QAbstractScrollArea.sizeAdjustPolicy?4() -> QAbstractScrollArea.SizeAdjustPolicy -QtWidgets.QAbstractScrollArea.setSizeAdjustPolicy?4(QAbstractScrollArea.SizeAdjustPolicy) -QtWidgets.QAbstractItemView.DropIndicatorPosition?10 -QtWidgets.QAbstractItemView.DropIndicatorPosition.OnItem?10 -QtWidgets.QAbstractItemView.DropIndicatorPosition.AboveItem?10 -QtWidgets.QAbstractItemView.DropIndicatorPosition.BelowItem?10 -QtWidgets.QAbstractItemView.DropIndicatorPosition.OnViewport?10 -QtWidgets.QAbstractItemView.State?10 -QtWidgets.QAbstractItemView.State.NoState?10 -QtWidgets.QAbstractItemView.State.DraggingState?10 -QtWidgets.QAbstractItemView.State.DragSelectingState?10 -QtWidgets.QAbstractItemView.State.EditingState?10 -QtWidgets.QAbstractItemView.State.ExpandingState?10 -QtWidgets.QAbstractItemView.State.CollapsingState?10 -QtWidgets.QAbstractItemView.State.AnimatingState?10 -QtWidgets.QAbstractItemView.CursorAction?10 -QtWidgets.QAbstractItemView.CursorAction.MoveUp?10 -QtWidgets.QAbstractItemView.CursorAction.MoveDown?10 -QtWidgets.QAbstractItemView.CursorAction.MoveLeft?10 -QtWidgets.QAbstractItemView.CursorAction.MoveRight?10 -QtWidgets.QAbstractItemView.CursorAction.MoveHome?10 -QtWidgets.QAbstractItemView.CursorAction.MoveEnd?10 -QtWidgets.QAbstractItemView.CursorAction.MovePageUp?10 -QtWidgets.QAbstractItemView.CursorAction.MovePageDown?10 -QtWidgets.QAbstractItemView.CursorAction.MoveNext?10 -QtWidgets.QAbstractItemView.CursorAction.MovePrevious?10 -QtWidgets.QAbstractItemView.SelectionMode?10 -QtWidgets.QAbstractItemView.SelectionMode.NoSelection?10 -QtWidgets.QAbstractItemView.SelectionMode.SingleSelection?10 -QtWidgets.QAbstractItemView.SelectionMode.MultiSelection?10 -QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection?10 -QtWidgets.QAbstractItemView.SelectionMode.ContiguousSelection?10 -QtWidgets.QAbstractItemView.SelectionBehavior?10 -QtWidgets.QAbstractItemView.SelectionBehavior.SelectItems?10 -QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows?10 -QtWidgets.QAbstractItemView.SelectionBehavior.SelectColumns?10 -QtWidgets.QAbstractItemView.ScrollMode?10 -QtWidgets.QAbstractItemView.ScrollMode.ScrollPerItem?10 -QtWidgets.QAbstractItemView.ScrollMode.ScrollPerPixel?10 -QtWidgets.QAbstractItemView.ScrollHint?10 -QtWidgets.QAbstractItemView.ScrollHint.EnsureVisible?10 -QtWidgets.QAbstractItemView.ScrollHint.PositionAtTop?10 -QtWidgets.QAbstractItemView.ScrollHint.PositionAtBottom?10 -QtWidgets.QAbstractItemView.ScrollHint.PositionAtCenter?10 -QtWidgets.QAbstractItemView.EditTrigger?10 -QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers?10 -QtWidgets.QAbstractItemView.EditTrigger.CurrentChanged?10 -QtWidgets.QAbstractItemView.EditTrigger.DoubleClicked?10 -QtWidgets.QAbstractItemView.EditTrigger.SelectedClicked?10 -QtWidgets.QAbstractItemView.EditTrigger.EditKeyPressed?10 -QtWidgets.QAbstractItemView.EditTrigger.AnyKeyPressed?10 -QtWidgets.QAbstractItemView.EditTrigger.AllEditTriggers?10 -QtWidgets.QAbstractItemView.DragDropMode?10 -QtWidgets.QAbstractItemView.DragDropMode.NoDragDrop?10 -QtWidgets.QAbstractItemView.DragDropMode.DragOnly?10 -QtWidgets.QAbstractItemView.DragDropMode.DropOnly?10 -QtWidgets.QAbstractItemView.DragDropMode.DragDrop?10 -QtWidgets.QAbstractItemView.DragDropMode.InternalMove?10 -QtWidgets.QAbstractItemView?1(QWidget parent=None) -QtWidgets.QAbstractItemView.__init__?1(self, QWidget parent=None) -QtWidgets.QAbstractItemView.setModel?4(QAbstractItemModel) -QtWidgets.QAbstractItemView.model?4() -> QAbstractItemModel -QtWidgets.QAbstractItemView.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QAbstractItemView.selectionModel?4() -> QItemSelectionModel -QtWidgets.QAbstractItemView.setItemDelegate?4(QAbstractItemDelegate) -QtWidgets.QAbstractItemView.itemDelegate?4() -> QAbstractItemDelegate -QtWidgets.QAbstractItemView.setSelectionMode?4(QAbstractItemView.SelectionMode) -QtWidgets.QAbstractItemView.selectionMode?4() -> QAbstractItemView.SelectionMode -QtWidgets.QAbstractItemView.setSelectionBehavior?4(QAbstractItemView.SelectionBehavior) -QtWidgets.QAbstractItemView.selectionBehavior?4() -> QAbstractItemView.SelectionBehavior -QtWidgets.QAbstractItemView.currentIndex?4() -> QModelIndex -QtWidgets.QAbstractItemView.rootIndex?4() -> QModelIndex -QtWidgets.QAbstractItemView.setEditTriggers?4(unknown-type) -QtWidgets.QAbstractItemView.editTriggers?4() -> unknown-type -QtWidgets.QAbstractItemView.setAutoScroll?4(bool) -QtWidgets.QAbstractItemView.hasAutoScroll?4() -> bool -QtWidgets.QAbstractItemView.setTabKeyNavigation?4(bool) -QtWidgets.QAbstractItemView.tabKeyNavigation?4() -> bool -QtWidgets.QAbstractItemView.setDropIndicatorShown?4(bool) -QtWidgets.QAbstractItemView.showDropIndicator?4() -> bool -QtWidgets.QAbstractItemView.setDragEnabled?4(bool) -QtWidgets.QAbstractItemView.dragEnabled?4() -> bool -QtWidgets.QAbstractItemView.setAlternatingRowColors?4(bool) -QtWidgets.QAbstractItemView.alternatingRowColors?4() -> bool -QtWidgets.QAbstractItemView.setIconSize?4(QSize) -QtWidgets.QAbstractItemView.iconSize?4() -> QSize -QtWidgets.QAbstractItemView.setTextElideMode?4(Qt.TextElideMode) -QtWidgets.QAbstractItemView.textElideMode?4() -> Qt.TextElideMode -QtWidgets.QAbstractItemView.keyboardSearch?4(QString) -QtWidgets.QAbstractItemView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QAbstractItemView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QAbstractItemView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QAbstractItemView.sizeHintForIndex?4(QModelIndex) -> QSize -QtWidgets.QAbstractItemView.sizeHintForRow?4(int) -> int -QtWidgets.QAbstractItemView.sizeHintForColumn?4(int) -> int -QtWidgets.QAbstractItemView.openPersistentEditor?4(QModelIndex) -QtWidgets.QAbstractItemView.closePersistentEditor?4(QModelIndex) -QtWidgets.QAbstractItemView.setIndexWidget?4(QModelIndex, QWidget) -QtWidgets.QAbstractItemView.indexWidget?4(QModelIndex) -> QWidget -QtWidgets.QAbstractItemView.reset?4() -QtWidgets.QAbstractItemView.setRootIndex?4(QModelIndex) -QtWidgets.QAbstractItemView.selectAll?4() -QtWidgets.QAbstractItemView.edit?4(QModelIndex) -QtWidgets.QAbstractItemView.clearSelection?4() -QtWidgets.QAbstractItemView.setCurrentIndex?4(QModelIndex) -QtWidgets.QAbstractItemView.scrollToTop?4() -QtWidgets.QAbstractItemView.scrollToBottom?4() -QtWidgets.QAbstractItemView.update?4() -QtWidgets.QAbstractItemView.update?4(QModelIndex) -QtWidgets.QAbstractItemView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) -QtWidgets.QAbstractItemView.rowsInserted?4(QModelIndex, int, int) -QtWidgets.QAbstractItemView.rowsAboutToBeRemoved?4(QModelIndex, int, int) -QtWidgets.QAbstractItemView.selectionChanged?4(QItemSelection, QItemSelection) -QtWidgets.QAbstractItemView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QAbstractItemView.updateEditorData?4() -QtWidgets.QAbstractItemView.updateEditorGeometries?4() -QtWidgets.QAbstractItemView.updateGeometries?4() -QtWidgets.QAbstractItemView.verticalScrollbarAction?4(int) -QtWidgets.QAbstractItemView.horizontalScrollbarAction?4(int) -QtWidgets.QAbstractItemView.verticalScrollbarValueChanged?4(int) -QtWidgets.QAbstractItemView.horizontalScrollbarValueChanged?4(int) -QtWidgets.QAbstractItemView.closeEditor?4(QWidget, QAbstractItemDelegate.EndEditHint) -QtWidgets.QAbstractItemView.commitData?4(QWidget) -QtWidgets.QAbstractItemView.editorDestroyed?4(QObject) -QtWidgets.QAbstractItemView.pressed?4(QModelIndex) -QtWidgets.QAbstractItemView.clicked?4(QModelIndex) -QtWidgets.QAbstractItemView.doubleClicked?4(QModelIndex) -QtWidgets.QAbstractItemView.activated?4(QModelIndex) -QtWidgets.QAbstractItemView.entered?4(QModelIndex) -QtWidgets.QAbstractItemView.viewportEntered?4() -QtWidgets.QAbstractItemView.iconSizeChanged?4(QSize) -QtWidgets.QAbstractItemView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QAbstractItemView.horizontalOffset?4() -> int -QtWidgets.QAbstractItemView.verticalOffset?4() -> int -QtWidgets.QAbstractItemView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QAbstractItemView.setSelection?4(QRect, unknown-type) -QtWidgets.QAbstractItemView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QAbstractItemView.selectedIndexes?4() -> unknown-type -QtWidgets.QAbstractItemView.edit?4(QModelIndex, QAbstractItemView.EditTrigger, QEvent) -> bool -QtWidgets.QAbstractItemView.selectionCommand?4(QModelIndex, QEvent event=None) -> unknown-type -QtWidgets.QAbstractItemView.startDrag?4(unknown-type) -QtWidgets.QAbstractItemView.state?4() -> QAbstractItemView.State -QtWidgets.QAbstractItemView.setState?4(QAbstractItemView.State) -QtWidgets.QAbstractItemView.scheduleDelayedItemsLayout?4() -QtWidgets.QAbstractItemView.executeDelayedItemsLayout?4() -QtWidgets.QAbstractItemView.scrollDirtyRegion?4(int, int) -QtWidgets.QAbstractItemView.setDirtyRegion?4(QRegion) -QtWidgets.QAbstractItemView.dirtyRegionOffset?4() -> QPoint -QtWidgets.QAbstractItemView.event?4(QEvent) -> bool -QtWidgets.QAbstractItemView.viewportEvent?4(QEvent) -> bool -QtWidgets.QAbstractItemView.mousePressEvent?4(QMouseEvent) -QtWidgets.QAbstractItemView.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QAbstractItemView.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QAbstractItemView.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QAbstractItemView.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QAbstractItemView.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QAbstractItemView.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QAbstractItemView.dropEvent?4(QDropEvent) -QtWidgets.QAbstractItemView.focusInEvent?4(QFocusEvent) -QtWidgets.QAbstractItemView.focusOutEvent?4(QFocusEvent) -QtWidgets.QAbstractItemView.keyPressEvent?4(QKeyEvent) -QtWidgets.QAbstractItemView.resizeEvent?4(QResizeEvent) -QtWidgets.QAbstractItemView.timerEvent?4(QTimerEvent) -QtWidgets.QAbstractItemView.dropIndicatorPosition?4() -> QAbstractItemView.DropIndicatorPosition -QtWidgets.QAbstractItemView.setVerticalScrollMode?4(QAbstractItemView.ScrollMode) -QtWidgets.QAbstractItemView.verticalScrollMode?4() -> QAbstractItemView.ScrollMode -QtWidgets.QAbstractItemView.setHorizontalScrollMode?4(QAbstractItemView.ScrollMode) -QtWidgets.QAbstractItemView.horizontalScrollMode?4() -> QAbstractItemView.ScrollMode -QtWidgets.QAbstractItemView.setDragDropOverwriteMode?4(bool) -QtWidgets.QAbstractItemView.dragDropOverwriteMode?4() -> bool -QtWidgets.QAbstractItemView.setDragDropMode?4(QAbstractItemView.DragDropMode) -QtWidgets.QAbstractItemView.dragDropMode?4() -> QAbstractItemView.DragDropMode -QtWidgets.QAbstractItemView.setItemDelegateForRow?4(int, QAbstractItemDelegate) -QtWidgets.QAbstractItemView.itemDelegateForRow?4(int) -> QAbstractItemDelegate -QtWidgets.QAbstractItemView.setItemDelegateForColumn?4(int, QAbstractItemDelegate) -QtWidgets.QAbstractItemView.itemDelegateForColumn?4(int) -> QAbstractItemDelegate -QtWidgets.QAbstractItemView.itemDelegateForIndex?4(QModelIndex) -> QAbstractItemDelegate -QtWidgets.QAbstractItemView.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QAbstractItemView.setAutoScrollMargin?4(int) -QtWidgets.QAbstractItemView.autoScrollMargin?4() -> int -QtWidgets.QAbstractItemView.focusNextPrevChild?4(bool) -> bool -QtWidgets.QAbstractItemView.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QAbstractItemView.viewportSizeHint?4() -> QSize -QtWidgets.QAbstractItemView.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QAbstractItemView.setDefaultDropAction?4(Qt.DropAction) -QtWidgets.QAbstractItemView.defaultDropAction?4() -> Qt.DropAction -QtWidgets.QAbstractItemView.resetVerticalScrollMode?4() -QtWidgets.QAbstractItemView.resetHorizontalScrollMode?4() -QtWidgets.QAbstractItemView.isPersistentEditorOpen?4(QModelIndex) -> bool -QtWidgets.QAbstractItemView.initViewItemOption?4(QStyleOptionViewItem) -QtWidgets.QAbstractSlider.SliderChange?10 -QtWidgets.QAbstractSlider.SliderChange.SliderRangeChange?10 -QtWidgets.QAbstractSlider.SliderChange.SliderOrientationChange?10 -QtWidgets.QAbstractSlider.SliderChange.SliderStepsChange?10 -QtWidgets.QAbstractSlider.SliderChange.SliderValueChange?10 -QtWidgets.QAbstractSlider.SliderAction?10 -QtWidgets.QAbstractSlider.SliderAction.SliderNoAction?10 -QtWidgets.QAbstractSlider.SliderAction.SliderSingleStepAdd?10 -QtWidgets.QAbstractSlider.SliderAction.SliderSingleStepSub?10 -QtWidgets.QAbstractSlider.SliderAction.SliderPageStepAdd?10 -QtWidgets.QAbstractSlider.SliderAction.SliderPageStepSub?10 -QtWidgets.QAbstractSlider.SliderAction.SliderToMinimum?10 -QtWidgets.QAbstractSlider.SliderAction.SliderToMaximum?10 -QtWidgets.QAbstractSlider.SliderAction.SliderMove?10 -QtWidgets.QAbstractSlider?1(QWidget parent=None) -QtWidgets.QAbstractSlider.__init__?1(self, QWidget parent=None) -QtWidgets.QAbstractSlider.orientation?4() -> Qt.Orientation -QtWidgets.QAbstractSlider.setMinimum?4(int) -QtWidgets.QAbstractSlider.minimum?4() -> int -QtWidgets.QAbstractSlider.setMaximum?4(int) -QtWidgets.QAbstractSlider.maximum?4() -> int -QtWidgets.QAbstractSlider.setRange?4(int, int) -QtWidgets.QAbstractSlider.setSingleStep?4(int) -QtWidgets.QAbstractSlider.singleStep?4() -> int -QtWidgets.QAbstractSlider.setPageStep?4(int) -QtWidgets.QAbstractSlider.pageStep?4() -> int -QtWidgets.QAbstractSlider.setTracking?4(bool) -QtWidgets.QAbstractSlider.hasTracking?4() -> bool -QtWidgets.QAbstractSlider.setSliderDown?4(bool) -QtWidgets.QAbstractSlider.isSliderDown?4() -> bool -QtWidgets.QAbstractSlider.setSliderPosition?4(int) -QtWidgets.QAbstractSlider.sliderPosition?4() -> int -QtWidgets.QAbstractSlider.setInvertedAppearance?4(bool) -QtWidgets.QAbstractSlider.invertedAppearance?4() -> bool -QtWidgets.QAbstractSlider.setInvertedControls?4(bool) -QtWidgets.QAbstractSlider.invertedControls?4() -> bool -QtWidgets.QAbstractSlider.value?4() -> int -QtWidgets.QAbstractSlider.triggerAction?4(QAbstractSlider.SliderAction) -QtWidgets.QAbstractSlider.setValue?4(int) -QtWidgets.QAbstractSlider.setOrientation?4(Qt.Orientation) -QtWidgets.QAbstractSlider.valueChanged?4(int) -QtWidgets.QAbstractSlider.sliderPressed?4() -QtWidgets.QAbstractSlider.sliderMoved?4(int) -QtWidgets.QAbstractSlider.sliderReleased?4() -QtWidgets.QAbstractSlider.rangeChanged?4(int, int) -QtWidgets.QAbstractSlider.actionTriggered?4(int) -QtWidgets.QAbstractSlider.setRepeatAction?4(QAbstractSlider.SliderAction, int thresholdTime=500, int repeatTime=50) -QtWidgets.QAbstractSlider.repeatAction?4() -> QAbstractSlider.SliderAction -QtWidgets.QAbstractSlider.sliderChange?4(QAbstractSlider.SliderChange) -QtWidgets.QAbstractSlider.event?4(QEvent) -> bool -QtWidgets.QAbstractSlider.keyPressEvent?4(QKeyEvent) -QtWidgets.QAbstractSlider.timerEvent?4(QTimerEvent) -QtWidgets.QAbstractSlider.wheelEvent?4(QWheelEvent) -QtWidgets.QAbstractSlider.changeEvent?4(QEvent) -QtWidgets.QAbstractSpinBox.StepType?10 -QtWidgets.QAbstractSpinBox.StepType.DefaultStepType?10 -QtWidgets.QAbstractSpinBox.StepType.AdaptiveDecimalStepType?10 -QtWidgets.QAbstractSpinBox.CorrectionMode?10 -QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue?10 -QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToNearestValue?10 -QtWidgets.QAbstractSpinBox.ButtonSymbols?10 -QtWidgets.QAbstractSpinBox.ButtonSymbols.UpDownArrows?10 -QtWidgets.QAbstractSpinBox.ButtonSymbols.PlusMinus?10 -QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons?10 -QtWidgets.QAbstractSpinBox.StepEnabledFlag?10 -QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepNone?10 -QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepUpEnabled?10 -QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepDownEnabled?10 -QtWidgets.QAbstractSpinBox?1(QWidget parent=None) -QtWidgets.QAbstractSpinBox.__init__?1(self, QWidget parent=None) -QtWidgets.QAbstractSpinBox.buttonSymbols?4() -> QAbstractSpinBox.ButtonSymbols -QtWidgets.QAbstractSpinBox.setButtonSymbols?4(QAbstractSpinBox.ButtonSymbols) -QtWidgets.QAbstractSpinBox.text?4() -> QString -QtWidgets.QAbstractSpinBox.specialValueText?4() -> QString -QtWidgets.QAbstractSpinBox.setSpecialValueText?4(QString) -QtWidgets.QAbstractSpinBox.wrapping?4() -> bool -QtWidgets.QAbstractSpinBox.setWrapping?4(bool) -QtWidgets.QAbstractSpinBox.setReadOnly?4(bool) -QtWidgets.QAbstractSpinBox.isReadOnly?4() -> bool -QtWidgets.QAbstractSpinBox.setAlignment?4(unknown-type) -QtWidgets.QAbstractSpinBox.alignment?4() -> unknown-type -QtWidgets.QAbstractSpinBox.setFrame?4(bool) -QtWidgets.QAbstractSpinBox.hasFrame?4() -> bool -QtWidgets.QAbstractSpinBox.sizeHint?4() -> QSize -QtWidgets.QAbstractSpinBox.minimumSizeHint?4() -> QSize -QtWidgets.QAbstractSpinBox.interpretText?4() -QtWidgets.QAbstractSpinBox.event?4(QEvent) -> bool -QtWidgets.QAbstractSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) -QtWidgets.QAbstractSpinBox.fixup?4(QString) -> QString -QtWidgets.QAbstractSpinBox.stepBy?4(int) -QtWidgets.QAbstractSpinBox.stepUp?4() -QtWidgets.QAbstractSpinBox.stepDown?4() -QtWidgets.QAbstractSpinBox.selectAll?4() -QtWidgets.QAbstractSpinBox.clear?4() -QtWidgets.QAbstractSpinBox.editingFinished?4() -QtWidgets.QAbstractSpinBox.resizeEvent?4(QResizeEvent) -QtWidgets.QAbstractSpinBox.keyPressEvent?4(QKeyEvent) -QtWidgets.QAbstractSpinBox.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QAbstractSpinBox.wheelEvent?4(QWheelEvent) -QtWidgets.QAbstractSpinBox.focusInEvent?4(QFocusEvent) -QtWidgets.QAbstractSpinBox.focusOutEvent?4(QFocusEvent) -QtWidgets.QAbstractSpinBox.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QAbstractSpinBox.changeEvent?4(QEvent) -QtWidgets.QAbstractSpinBox.closeEvent?4(QCloseEvent) -QtWidgets.QAbstractSpinBox.hideEvent?4(QHideEvent) -QtWidgets.QAbstractSpinBox.mousePressEvent?4(QMouseEvent) -QtWidgets.QAbstractSpinBox.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QAbstractSpinBox.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QAbstractSpinBox.timerEvent?4(QTimerEvent) -QtWidgets.QAbstractSpinBox.paintEvent?4(QPaintEvent) -QtWidgets.QAbstractSpinBox.showEvent?4(QShowEvent) -QtWidgets.QAbstractSpinBox.lineEdit?4() -> QLineEdit -QtWidgets.QAbstractSpinBox.setLineEdit?4(QLineEdit) -QtWidgets.QAbstractSpinBox.stepEnabled?4() -> unknown-type -QtWidgets.QAbstractSpinBox.initStyleOption?4(QStyleOptionSpinBox) -QtWidgets.QAbstractSpinBox.setCorrectionMode?4(QAbstractSpinBox.CorrectionMode) -QtWidgets.QAbstractSpinBox.correctionMode?4() -> QAbstractSpinBox.CorrectionMode -QtWidgets.QAbstractSpinBox.hasAcceptableInput?4() -> bool -QtWidgets.QAbstractSpinBox.setAccelerated?4(bool) -QtWidgets.QAbstractSpinBox.isAccelerated?4() -> bool -QtWidgets.QAbstractSpinBox.setKeyboardTracking?4(bool) -QtWidgets.QAbstractSpinBox.keyboardTracking?4() -> bool -QtWidgets.QAbstractSpinBox.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QAbstractSpinBox.setGroupSeparatorShown?4(bool) -QtWidgets.QAbstractSpinBox.isGroupSeparatorShown?4() -> bool -QtWidgets.QApplication?1(List) -QtWidgets.QApplication.__init__?1(self, List) -QtWidgets.QApplication.style?4() -> QStyle -QtWidgets.QApplication.setStyle?4(QStyle) -QtWidgets.QApplication.setStyle?4(QString) -> QStyle -QtWidgets.QApplication.palette?4() -> QPalette -QtWidgets.QApplication.palette?4(QWidget) -> QPalette -QtWidgets.QApplication.palette?4(str) -> QPalette -QtWidgets.QApplication.setPalette?4(QPalette, str className=None) -QtWidgets.QApplication.font?4() -> QFont -QtWidgets.QApplication.font?4(QWidget) -> QFont -QtWidgets.QApplication.font?4(str) -> QFont -QtWidgets.QApplication.setFont?4(QFont, str className=None) -QtWidgets.QApplication.allWidgets?4() -> unknown-type -QtWidgets.QApplication.topLevelWidgets?4() -> unknown-type -QtWidgets.QApplication.activePopupWidget?4() -> QWidget -QtWidgets.QApplication.activeModalWidget?4() -> QWidget -QtWidgets.QApplication.focusWidget?4() -> QWidget -QtWidgets.QApplication.activeWindow?4() -> QWidget -QtWidgets.QApplication.setActiveWindow?4(QWidget) -QtWidgets.QApplication.widgetAt?4(QPoint) -> QWidget -QtWidgets.QApplication.widgetAt?4(int, int) -> QWidget -QtWidgets.QApplication.topLevelAt?4(QPoint) -> QWidget -QtWidgets.QApplication.topLevelAt?4(int, int) -> QWidget -QtWidgets.QApplication.beep?4() -QtWidgets.QApplication.alert?4(QWidget, int msecs=0) -QtWidgets.QApplication.setCursorFlashTime?4(int) -QtWidgets.QApplication.cursorFlashTime?4() -> int -QtWidgets.QApplication.setDoubleClickInterval?4(int) -QtWidgets.QApplication.doubleClickInterval?4() -> int -QtWidgets.QApplication.setKeyboardInputInterval?4(int) -QtWidgets.QApplication.keyboardInputInterval?4() -> int -QtWidgets.QApplication.setWheelScrollLines?4(int) -QtWidgets.QApplication.wheelScrollLines?4() -> int -QtWidgets.QApplication.setStartDragTime?4(int) -QtWidgets.QApplication.startDragTime?4() -> int -QtWidgets.QApplication.setStartDragDistance?4(int) -QtWidgets.QApplication.startDragDistance?4() -> int -QtWidgets.QApplication.isEffectEnabled?4(Qt.UIEffect) -> bool -QtWidgets.QApplication.setEffectEnabled?4(Qt.UIEffect, bool enabled=True) -QtWidgets.QApplication.exec?4() -> int -QtWidgets.QApplication.notify?4(QObject, QEvent) -> bool -QtWidgets.QApplication.autoSipEnabled?4() -> bool -QtWidgets.QApplication.styleSheet?4() -> QString -QtWidgets.QApplication.focusChanged?4(QWidget, QWidget) -QtWidgets.QApplication.aboutQt?4() -QtWidgets.QApplication.closeAllWindows?4() -QtWidgets.QApplication.setAutoSipEnabled?4(bool) -QtWidgets.QApplication.setStyleSheet?4(QString) -QtWidgets.QApplication.event?4(QEvent) -> bool -QtWidgets.QLayoutItem?1(unknown-type alignment=Qt.Alignment()) -QtWidgets.QLayoutItem.__init__?1(self, unknown-type alignment=Qt.Alignment()) -QtWidgets.QLayoutItem?1(QLayoutItem) -QtWidgets.QLayoutItem.__init__?1(self, QLayoutItem) -QtWidgets.QLayoutItem.sizeHint?4() -> QSize -QtWidgets.QLayoutItem.minimumSize?4() -> QSize -QtWidgets.QLayoutItem.maximumSize?4() -> QSize -QtWidgets.QLayoutItem.expandingDirections?4() -> unknown-type -QtWidgets.QLayoutItem.setGeometry?4(QRect) -QtWidgets.QLayoutItem.geometry?4() -> QRect -QtWidgets.QLayoutItem.isEmpty?4() -> bool -QtWidgets.QLayoutItem.hasHeightForWidth?4() -> bool -QtWidgets.QLayoutItem.heightForWidth?4(int) -> int -QtWidgets.QLayoutItem.minimumHeightForWidth?4(int) -> int -QtWidgets.QLayoutItem.invalidate?4() -QtWidgets.QLayoutItem.widget?4() -> QWidget -QtWidgets.QLayoutItem.layout?4() -> QLayout -QtWidgets.QLayoutItem.spacerItem?4() -> QSpacerItem -QtWidgets.QLayoutItem.alignment?4() -> unknown-type -QtWidgets.QLayoutItem.setAlignment?4(unknown-type) -QtWidgets.QLayoutItem.controlTypes?4() -> unknown-type -QtWidgets.QLayout.SizeConstraint?10 -QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint?10 -QtWidgets.QLayout.SizeConstraint.SetNoConstraint?10 -QtWidgets.QLayout.SizeConstraint.SetMinimumSize?10 -QtWidgets.QLayout.SizeConstraint.SetFixedSize?10 -QtWidgets.QLayout.SizeConstraint.SetMaximumSize?10 -QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize?10 -QtWidgets.QLayout?1(QWidget parent=None) -QtWidgets.QLayout.__init__?1(self, QWidget parent=None) -QtWidgets.QLayout.spacing?4() -> int -QtWidgets.QLayout.setSpacing?4(int) -QtWidgets.QLayout.setAlignment?4(QWidget, unknown-type) -> bool -QtWidgets.QLayout.setAlignment?4(QLayout, unknown-type) -> bool -QtWidgets.QLayout.setAlignment?4(unknown-type) -QtWidgets.QLayout.setSizeConstraint?4(QLayout.SizeConstraint) -QtWidgets.QLayout.sizeConstraint?4() -> QLayout.SizeConstraint -QtWidgets.QLayout.setMenuBar?4(QWidget) -QtWidgets.QLayout.menuBar?4() -> QWidget -QtWidgets.QLayout.parentWidget?4() -> QWidget -QtWidgets.QLayout.invalidate?4() -QtWidgets.QLayout.geometry?4() -> QRect -QtWidgets.QLayout.activate?4() -> bool -QtWidgets.QLayout.update?4() -QtWidgets.QLayout.addWidget?4(QWidget) -QtWidgets.QLayout.addItem?4(QLayoutItem) -QtWidgets.QLayout.removeWidget?4(QWidget) -QtWidgets.QLayout.removeItem?4(QLayoutItem) -QtWidgets.QLayout.expandingDirections?4() -> unknown-type -QtWidgets.QLayout.minimumSize?4() -> QSize -QtWidgets.QLayout.maximumSize?4() -> QSize -QtWidgets.QLayout.setGeometry?4(QRect) -QtWidgets.QLayout.itemAt?4(int) -> QLayoutItem -QtWidgets.QLayout.takeAt?4(int) -> QLayoutItem -QtWidgets.QLayout.indexOf?4(QWidget) -> int -QtWidgets.QLayout.indexOf?4(QLayoutItem) -> int -QtWidgets.QLayout.count?4() -> int -QtWidgets.QLayout.isEmpty?4() -> bool -QtWidgets.QLayout.totalHeightForWidth?4(int) -> int -QtWidgets.QLayout.totalMinimumSize?4() -> QSize -QtWidgets.QLayout.totalMaximumSize?4() -> QSize -QtWidgets.QLayout.totalSizeHint?4() -> QSize -QtWidgets.QLayout.layout?4() -> QLayout -QtWidgets.QLayout.setEnabled?4(bool) -QtWidgets.QLayout.isEnabled?4() -> bool -QtWidgets.QLayout.closestAcceptableSize?4(QWidget, QSize) -> QSize -QtWidgets.QLayout.widgetEvent?4(QEvent) -QtWidgets.QLayout.childEvent?4(QChildEvent) -QtWidgets.QLayout.addChildLayout?4(QLayout) -QtWidgets.QLayout.addChildWidget?4(QWidget) -QtWidgets.QLayout.alignmentRect?4(QRect) -> QRect -QtWidgets.QLayout.setContentsMargins?4(int, int, int, int) -QtWidgets.QLayout.getContentsMargins?4() -> (int, int, int, int) -QtWidgets.QLayout.contentsRect?4() -> QRect -QtWidgets.QLayout.setContentsMargins?4(QMargins) -QtWidgets.QLayout.contentsMargins?4() -> QMargins -QtWidgets.QLayout.controlTypes?4() -> unknown-type -QtWidgets.QLayout.replaceWidget?4(QWidget, QWidget, unknown-type options=Qt.FindChildrenRecursively) -> QLayoutItem -QtWidgets.QLayout.unsetContentsMargins?4() -QtWidgets.QBoxLayout.Direction?10 -QtWidgets.QBoxLayout.Direction.LeftToRight?10 -QtWidgets.QBoxLayout.Direction.RightToLeft?10 -QtWidgets.QBoxLayout.Direction.TopToBottom?10 -QtWidgets.QBoxLayout.Direction.BottomToTop?10 -QtWidgets.QBoxLayout.Direction.Down?10 -QtWidgets.QBoxLayout.Direction.Up?10 -QtWidgets.QBoxLayout?1(QBoxLayout.Direction, QWidget parent=None) -QtWidgets.QBoxLayout.__init__?1(self, QBoxLayout.Direction, QWidget parent=None) -QtWidgets.QBoxLayout.direction?4() -> QBoxLayout.Direction -QtWidgets.QBoxLayout.setDirection?4(QBoxLayout.Direction) -QtWidgets.QBoxLayout.addSpacing?4(int) -QtWidgets.QBoxLayout.addStretch?4(int stretch=0) -QtWidgets.QBoxLayout.addWidget?4(QWidget, int stretch=0, unknown-type alignment=Qt.Alignment()) -QtWidgets.QBoxLayout.addLayout?4(QLayout, int stretch=0) -QtWidgets.QBoxLayout.addStrut?4(int) -QtWidgets.QBoxLayout.addItem?4(QLayoutItem) -QtWidgets.QBoxLayout.insertSpacing?4(int, int) -QtWidgets.QBoxLayout.insertStretch?4(int, int stretch=0) -QtWidgets.QBoxLayout.insertWidget?4(int, QWidget, int stretch=0, unknown-type alignment=Qt.Alignment()) -QtWidgets.QBoxLayout.insertLayout?4(int, QLayout, int stretch=0) -QtWidgets.QBoxLayout.setStretchFactor?4(QWidget, int) -> bool -QtWidgets.QBoxLayout.setStretchFactor?4(QLayout, int) -> bool -QtWidgets.QBoxLayout.sizeHint?4() -> QSize -QtWidgets.QBoxLayout.minimumSize?4() -> QSize -QtWidgets.QBoxLayout.maximumSize?4() -> QSize -QtWidgets.QBoxLayout.hasHeightForWidth?4() -> bool -QtWidgets.QBoxLayout.heightForWidth?4(int) -> int -QtWidgets.QBoxLayout.minimumHeightForWidth?4(int) -> int -QtWidgets.QBoxLayout.expandingDirections?4() -> unknown-type -QtWidgets.QBoxLayout.invalidate?4() -QtWidgets.QBoxLayout.itemAt?4(int) -> QLayoutItem -QtWidgets.QBoxLayout.takeAt?4(int) -> QLayoutItem -QtWidgets.QBoxLayout.count?4() -> int -QtWidgets.QBoxLayout.setGeometry?4(QRect) -QtWidgets.QBoxLayout.spacing?4() -> int -QtWidgets.QBoxLayout.setSpacing?4(int) -QtWidgets.QBoxLayout.addSpacerItem?4(QSpacerItem) -QtWidgets.QBoxLayout.insertSpacerItem?4(int, QSpacerItem) -QtWidgets.QBoxLayout.setStretch?4(int, int) -QtWidgets.QBoxLayout.stretch?4(int) -> int -QtWidgets.QBoxLayout.insertItem?4(int, QLayoutItem) -QtWidgets.QHBoxLayout?1() -QtWidgets.QHBoxLayout.__init__?1(self) -QtWidgets.QHBoxLayout?1(QWidget) -QtWidgets.QHBoxLayout.__init__?1(self, QWidget) -QtWidgets.QVBoxLayout?1() -QtWidgets.QVBoxLayout.__init__?1(self) -QtWidgets.QVBoxLayout?1(QWidget) -QtWidgets.QVBoxLayout.__init__?1(self, QWidget) -QtWidgets.QButtonGroup?1(QObject parent=None) -QtWidgets.QButtonGroup.__init__?1(self, QObject parent=None) -QtWidgets.QButtonGroup.setExclusive?4(bool) -QtWidgets.QButtonGroup.exclusive?4() -> bool -QtWidgets.QButtonGroup.addButton?4(QAbstractButton, int id=-1) -QtWidgets.QButtonGroup.removeButton?4(QAbstractButton) -QtWidgets.QButtonGroup.buttons?4() -> unknown-type -QtWidgets.QButtonGroup.button?4(int) -> QAbstractButton -QtWidgets.QButtonGroup.checkedButton?4() -> QAbstractButton -QtWidgets.QButtonGroup.setId?4(QAbstractButton, int) -QtWidgets.QButtonGroup.id?4(QAbstractButton) -> int -QtWidgets.QButtonGroup.checkedId?4() -> int -QtWidgets.QButtonGroup.buttonClicked?4(QAbstractButton) -QtWidgets.QButtonGroup.buttonPressed?4(QAbstractButton) -QtWidgets.QButtonGroup.buttonReleased?4(QAbstractButton) -QtWidgets.QButtonGroup.buttonToggled?4(QAbstractButton, bool) -QtWidgets.QButtonGroup.idClicked?4(int) -QtWidgets.QButtonGroup.idPressed?4(int) -QtWidgets.QButtonGroup.idReleased?4(int) -QtWidgets.QButtonGroup.idToggled?4(int, bool) -QtWidgets.QCalendarWidget.SelectionMode?10 -QtWidgets.QCalendarWidget.SelectionMode.NoSelection?10 -QtWidgets.QCalendarWidget.SelectionMode.SingleSelection?10 -QtWidgets.QCalendarWidget.VerticalHeaderFormat?10 -QtWidgets.QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader?10 -QtWidgets.QCalendarWidget.VerticalHeaderFormat.ISOWeekNumbers?10 -QtWidgets.QCalendarWidget.HorizontalHeaderFormat?10 -QtWidgets.QCalendarWidget.HorizontalHeaderFormat.NoHorizontalHeader?10 -QtWidgets.QCalendarWidget.HorizontalHeaderFormat.SingleLetterDayNames?10 -QtWidgets.QCalendarWidget.HorizontalHeaderFormat.ShortDayNames?10 -QtWidgets.QCalendarWidget.HorizontalHeaderFormat.LongDayNames?10 -QtWidgets.QCalendarWidget?1(QWidget parent=None) -QtWidgets.QCalendarWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QCalendarWidget.sizeHint?4() -> QSize -QtWidgets.QCalendarWidget.minimumSizeHint?4() -> QSize -QtWidgets.QCalendarWidget.selectedDate?4() -> QDate -QtWidgets.QCalendarWidget.yearShown?4() -> int -QtWidgets.QCalendarWidget.monthShown?4() -> int -QtWidgets.QCalendarWidget.minimumDate?4() -> QDate -QtWidgets.QCalendarWidget.setMinimumDate?4(QDate) -QtWidgets.QCalendarWidget.maximumDate?4() -> QDate -QtWidgets.QCalendarWidget.setMaximumDate?4(QDate) -QtWidgets.QCalendarWidget.firstDayOfWeek?4() -> Qt.DayOfWeek -QtWidgets.QCalendarWidget.setFirstDayOfWeek?4(Qt.DayOfWeek) -QtWidgets.QCalendarWidget.isGridVisible?4() -> bool -QtWidgets.QCalendarWidget.setGridVisible?4(bool) -QtWidgets.QCalendarWidget.selectionMode?4() -> QCalendarWidget.SelectionMode -QtWidgets.QCalendarWidget.setSelectionMode?4(QCalendarWidget.SelectionMode) -QtWidgets.QCalendarWidget.horizontalHeaderFormat?4() -> QCalendarWidget.HorizontalHeaderFormat -QtWidgets.QCalendarWidget.setHorizontalHeaderFormat?4(QCalendarWidget.HorizontalHeaderFormat) -QtWidgets.QCalendarWidget.verticalHeaderFormat?4() -> QCalendarWidget.VerticalHeaderFormat -QtWidgets.QCalendarWidget.setVerticalHeaderFormat?4(QCalendarWidget.VerticalHeaderFormat) -QtWidgets.QCalendarWidget.headerTextFormat?4() -> QTextCharFormat -QtWidgets.QCalendarWidget.setHeaderTextFormat?4(QTextCharFormat) -QtWidgets.QCalendarWidget.weekdayTextFormat?4(Qt.DayOfWeek) -> QTextCharFormat -QtWidgets.QCalendarWidget.setWeekdayTextFormat?4(Qt.DayOfWeek, QTextCharFormat) -QtWidgets.QCalendarWidget.dateTextFormat?4() -> unknown-type -QtWidgets.QCalendarWidget.dateTextFormat?4(QDate) -> QTextCharFormat -QtWidgets.QCalendarWidget.setDateTextFormat?4(QDate, QTextCharFormat) -QtWidgets.QCalendarWidget.updateCell?4(QDate) -QtWidgets.QCalendarWidget.updateCells?4() -QtWidgets.QCalendarWidget.event?4(QEvent) -> bool -QtWidgets.QCalendarWidget.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QCalendarWidget.mousePressEvent?4(QMouseEvent) -QtWidgets.QCalendarWidget.resizeEvent?4(QResizeEvent) -QtWidgets.QCalendarWidget.keyPressEvent?4(QKeyEvent) -QtWidgets.QCalendarWidget.paintCell?4(QPainter, QRect, QDate) -QtWidgets.QCalendarWidget.setCurrentPage?4(int, int) -QtWidgets.QCalendarWidget.setDateRange?4(QDate, QDate) -QtWidgets.QCalendarWidget.setSelectedDate?4(QDate) -QtWidgets.QCalendarWidget.showNextMonth?4() -QtWidgets.QCalendarWidget.showNextYear?4() -QtWidgets.QCalendarWidget.showPreviousMonth?4() -QtWidgets.QCalendarWidget.showPreviousYear?4() -QtWidgets.QCalendarWidget.showSelectedDate?4() -QtWidgets.QCalendarWidget.showToday?4() -QtWidgets.QCalendarWidget.activated?4(QDate) -QtWidgets.QCalendarWidget.clicked?4(QDate) -QtWidgets.QCalendarWidget.currentPageChanged?4(int, int) -QtWidgets.QCalendarWidget.selectionChanged?4() -QtWidgets.QCalendarWidget.isNavigationBarVisible?4() -> bool -QtWidgets.QCalendarWidget.isDateEditEnabled?4() -> bool -QtWidgets.QCalendarWidget.setDateEditEnabled?4(bool) -QtWidgets.QCalendarWidget.dateEditAcceptDelay?4() -> int -QtWidgets.QCalendarWidget.setDateEditAcceptDelay?4(int) -QtWidgets.QCalendarWidget.setNavigationBarVisible?4(bool) -QtWidgets.QCalendarWidget.calendar?4() -> QCalendar -QtWidgets.QCalendarWidget.setCalendar?4(QCalendar) -QtWidgets.QCalendarWidget.clearMinimumDate?4() -QtWidgets.QCalendarWidget.clearMaximumDate?4() -QtWidgets.QCheckBox?1(QWidget parent=None) -QtWidgets.QCheckBox.__init__?1(self, QWidget parent=None) -QtWidgets.QCheckBox?1(QString, QWidget parent=None) -QtWidgets.QCheckBox.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QCheckBox.sizeHint?4() -> QSize -QtWidgets.QCheckBox.setTristate?4(bool on=True) -QtWidgets.QCheckBox.isTristate?4() -> bool -QtWidgets.QCheckBox.checkState?4() -> Qt.CheckState -QtWidgets.QCheckBox.setCheckState?4(Qt.CheckState) -QtWidgets.QCheckBox.minimumSizeHint?4() -> QSize -QtWidgets.QCheckBox.stateChanged?4(int) -QtWidgets.QCheckBox.checkStateChanged?4(Qt.CheckState) -QtWidgets.QCheckBox.hitButton?4(QPoint) -> bool -QtWidgets.QCheckBox.checkStateSet?4() -QtWidgets.QCheckBox.nextCheckState?4() -QtWidgets.QCheckBox.event?4(QEvent) -> bool -QtWidgets.QCheckBox.paintEvent?4(QPaintEvent) -QtWidgets.QCheckBox.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QCheckBox.initStyleOption?4(QStyleOptionButton) -QtWidgets.QDialog.DialogCode?10 -QtWidgets.QDialog.DialogCode.Rejected?10 -QtWidgets.QDialog.DialogCode.Accepted?10 -QtWidgets.QDialog?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDialog.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDialog.result?4() -> int -QtWidgets.QDialog.setVisible?4(bool) -QtWidgets.QDialog.sizeHint?4() -> QSize -QtWidgets.QDialog.minimumSizeHint?4() -> QSize -QtWidgets.QDialog.setSizeGripEnabled?4(bool) -QtWidgets.QDialog.isSizeGripEnabled?4() -> bool -QtWidgets.QDialog.setModal?4(bool) -QtWidgets.QDialog.setResult?4(int) -QtWidgets.QDialog.exec?4() -> int -QtWidgets.QDialog.done?4(int) -QtWidgets.QDialog.accept?4() -QtWidgets.QDialog.reject?4() -QtWidgets.QDialog.open?4() -QtWidgets.QDialog.accepted?4() -QtWidgets.QDialog.finished?4(int) -QtWidgets.QDialog.rejected?4() -QtWidgets.QDialog.keyPressEvent?4(QKeyEvent) -QtWidgets.QDialog.closeEvent?4(QCloseEvent) -QtWidgets.QDialog.showEvent?4(QShowEvent) -QtWidgets.QDialog.resizeEvent?4(QResizeEvent) -QtWidgets.QDialog.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QDialog.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QColorDialog.ColorDialogOption?10 -QtWidgets.QColorDialog.ColorDialogOption.ShowAlphaChannel?10 -QtWidgets.QColorDialog.ColorDialogOption.NoButtons?10 -QtWidgets.QColorDialog.ColorDialogOption.DontUseNativeDialog?10 -QtWidgets.QColorDialog.ColorDialogOption.NoEyeDropperButton?10 -QtWidgets.QColorDialog?1(QWidget parent=None) -QtWidgets.QColorDialog.__init__?1(self, QWidget parent=None) -QtWidgets.QColorDialog?1(QColor, QWidget parent=None) -QtWidgets.QColorDialog.__init__?1(self, QColor, QWidget parent=None) -QtWidgets.QColorDialog.getColor?4(QColor initial=Qt.white, QWidget parent=None, QString title='', unknown-type options=QColorDialog.ColorDialogOptions()) -> QColor -QtWidgets.QColorDialog.customCount?4() -> int -QtWidgets.QColorDialog.customColor?4(int) -> QColor -QtWidgets.QColorDialog.setCustomColor?4(int, QColor) -QtWidgets.QColorDialog.standardColor?4(int) -> QColor -QtWidgets.QColorDialog.setStandardColor?4(int, QColor) -QtWidgets.QColorDialog.open?4() -QtWidgets.QColorDialog.colorSelected?4(QColor) -QtWidgets.QColorDialog.currentColorChanged?4(QColor) -QtWidgets.QColorDialog.changeEvent?4(QEvent) -QtWidgets.QColorDialog.done?4(int) -QtWidgets.QColorDialog.setCurrentColor?4(QColor) -QtWidgets.QColorDialog.currentColor?4() -> QColor -QtWidgets.QColorDialog.selectedColor?4() -> QColor -QtWidgets.QColorDialog.setOption?4(QColorDialog.ColorDialogOption, bool on=True) -QtWidgets.QColorDialog.testOption?4(QColorDialog.ColorDialogOption) -> bool -QtWidgets.QColorDialog.setOptions?4(unknown-type) -QtWidgets.QColorDialog.options?4() -> unknown-type -QtWidgets.QColorDialog.open?4(Any) -QtWidgets.QColorDialog.setVisible?4(bool) -QtWidgets.QColumnView?1(QWidget parent=None) -QtWidgets.QColumnView.__init__?1(self, QWidget parent=None) -QtWidgets.QColumnView.columnWidths?4() -> unknown-type -QtWidgets.QColumnView.previewWidget?4() -> QWidget -QtWidgets.QColumnView.resizeGripsVisible?4() -> bool -QtWidgets.QColumnView.setColumnWidths?4(unknown-type) -QtWidgets.QColumnView.setPreviewWidget?4(QWidget) -QtWidgets.QColumnView.setResizeGripsVisible?4(bool) -QtWidgets.QColumnView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QColumnView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QColumnView.sizeHint?4() -> QSize -QtWidgets.QColumnView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QColumnView.setModel?4(QAbstractItemModel) -QtWidgets.QColumnView.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QColumnView.setRootIndex?4(QModelIndex) -QtWidgets.QColumnView.selectAll?4() -QtWidgets.QColumnView.updatePreviewWidget?4(QModelIndex) -QtWidgets.QColumnView.createColumn?4(QModelIndex) -> QAbstractItemView -QtWidgets.QColumnView.initializeColumn?4(QAbstractItemView) -QtWidgets.QColumnView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QColumnView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QColumnView.resizeEvent?4(QResizeEvent) -QtWidgets.QColumnView.setSelection?4(QRect, unknown-type) -QtWidgets.QColumnView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QColumnView.horizontalOffset?4() -> int -QtWidgets.QColumnView.verticalOffset?4() -> int -QtWidgets.QColumnView.scrollContentsBy?4(int, int) -QtWidgets.QColumnView.rowsInserted?4(QModelIndex, int, int) -QtWidgets.QColumnView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QComboBox.SizeAdjustPolicy?10 -QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContents?10 -QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow?10 -QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon?10 -QtWidgets.QComboBox.InsertPolicy?10 -QtWidgets.QComboBox.InsertPolicy.NoInsert?10 -QtWidgets.QComboBox.InsertPolicy.InsertAtTop?10 -QtWidgets.QComboBox.InsertPolicy.InsertAtCurrent?10 -QtWidgets.QComboBox.InsertPolicy.InsertAtBottom?10 -QtWidgets.QComboBox.InsertPolicy.InsertAfterCurrent?10 -QtWidgets.QComboBox.InsertPolicy.InsertBeforeCurrent?10 -QtWidgets.QComboBox.InsertPolicy.InsertAlphabetically?10 -QtWidgets.QComboBox?1(QWidget parent=None) -QtWidgets.QComboBox.__init__?1(self, QWidget parent=None) -QtWidgets.QComboBox.maxVisibleItems?4() -> int -QtWidgets.QComboBox.setMaxVisibleItems?4(int) -QtWidgets.QComboBox.count?4() -> int -QtWidgets.QComboBox.setMaxCount?4(int) -QtWidgets.QComboBox.maxCount?4() -> int -QtWidgets.QComboBox.duplicatesEnabled?4() -> bool -QtWidgets.QComboBox.setDuplicatesEnabled?4(bool) -QtWidgets.QComboBox.setFrame?4(bool) -QtWidgets.QComboBox.hasFrame?4() -> bool -QtWidgets.QComboBox.findText?4(QString, unknown-type flags=Qt.MatchExactly|Qt.MatchCaseSensitive) -> int -QtWidgets.QComboBox.findData?4(QVariant, int role=Qt.UserRole, unknown-type flags=Qt.MatchExactly|Qt.MatchCaseSensitive) -> int -QtWidgets.QComboBox.insertPolicy?4() -> QComboBox.InsertPolicy -QtWidgets.QComboBox.setInsertPolicy?4(QComboBox.InsertPolicy) -QtWidgets.QComboBox.sizeAdjustPolicy?4() -> QComboBox.SizeAdjustPolicy -QtWidgets.QComboBox.setSizeAdjustPolicy?4(QComboBox.SizeAdjustPolicy) -QtWidgets.QComboBox.minimumContentsLength?4() -> int -QtWidgets.QComboBox.setMinimumContentsLength?4(int) -QtWidgets.QComboBox.iconSize?4() -> QSize -QtWidgets.QComboBox.setIconSize?4(QSize) -QtWidgets.QComboBox.isEditable?4() -> bool -QtWidgets.QComboBox.setEditable?4(bool) -QtWidgets.QComboBox.setLineEdit?4(QLineEdit) -QtWidgets.QComboBox.lineEdit?4() -> QLineEdit -QtWidgets.QComboBox.setValidator?4(QValidator) -QtWidgets.QComboBox.validator?4() -> QValidator -QtWidgets.QComboBox.itemDelegate?4() -> QAbstractItemDelegate -QtWidgets.QComboBox.setItemDelegate?4(QAbstractItemDelegate) -QtWidgets.QComboBox.model?4() -> QAbstractItemModel -QtWidgets.QComboBox.setModel?4(QAbstractItemModel) -QtWidgets.QComboBox.rootModelIndex?4() -> QModelIndex -QtWidgets.QComboBox.setRootModelIndex?4(QModelIndex) -QtWidgets.QComboBox.modelColumn?4() -> int -QtWidgets.QComboBox.setModelColumn?4(int) -QtWidgets.QComboBox.currentIndex?4() -> int -QtWidgets.QComboBox.setCurrentIndex?4(int) -QtWidgets.QComboBox.currentText?4() -> QString -QtWidgets.QComboBox.itemText?4(int) -> QString -QtWidgets.QComboBox.itemIcon?4(int) -> QIcon -QtWidgets.QComboBox.itemData?4(int, int role=Qt.UserRole) -> QVariant -QtWidgets.QComboBox.addItems?4(QStringList) -QtWidgets.QComboBox.addItem?4(QString, QVariant userData=None) -QtWidgets.QComboBox.addItem?4(QIcon, QString, QVariant userData=None) -QtWidgets.QComboBox.insertItem?4(int, QString, QVariant userData=None) -QtWidgets.QComboBox.insertItem?4(int, QIcon, QString, QVariant userData=None) -QtWidgets.QComboBox.insertItems?4(int, QStringList) -QtWidgets.QComboBox.removeItem?4(int) -QtWidgets.QComboBox.setItemText?4(int, QString) -QtWidgets.QComboBox.setItemIcon?4(int, QIcon) -QtWidgets.QComboBox.setItemData?4(int, QVariant, int role=Qt.UserRole) -QtWidgets.QComboBox.view?4() -> QAbstractItemView -QtWidgets.QComboBox.setView?4(QAbstractItemView) -QtWidgets.QComboBox.sizeHint?4() -> QSize -QtWidgets.QComboBox.minimumSizeHint?4() -> QSize -QtWidgets.QComboBox.showPopup?4() -QtWidgets.QComboBox.hidePopup?4() -QtWidgets.QComboBox.event?4(QEvent) -> bool -QtWidgets.QComboBox.setCompleter?4(QCompleter) -QtWidgets.QComboBox.completer?4() -> QCompleter -QtWidgets.QComboBox.insertSeparator?4(int) -QtWidgets.QComboBox.clear?4() -QtWidgets.QComboBox.clearEditText?4() -QtWidgets.QComboBox.setEditText?4(QString) -QtWidgets.QComboBox.setCurrentText?4(QString) -QtWidgets.QComboBox.editTextChanged?4(QString) -QtWidgets.QComboBox.activated?4(int) -QtWidgets.QComboBox.currentIndexChanged?4(int) -QtWidgets.QComboBox.currentTextChanged?4(QString) -QtWidgets.QComboBox.highlighted?4(int) -QtWidgets.QComboBox.initStyleOption?4(QStyleOptionComboBox) -QtWidgets.QComboBox.focusInEvent?4(QFocusEvent) -QtWidgets.QComboBox.focusOutEvent?4(QFocusEvent) -QtWidgets.QComboBox.changeEvent?4(QEvent) -QtWidgets.QComboBox.resizeEvent?4(QResizeEvent) -QtWidgets.QComboBox.paintEvent?4(QPaintEvent) -QtWidgets.QComboBox.showEvent?4(QShowEvent) -QtWidgets.QComboBox.hideEvent?4(QHideEvent) -QtWidgets.QComboBox.mousePressEvent?4(QMouseEvent) -QtWidgets.QComboBox.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QComboBox.keyPressEvent?4(QKeyEvent) -QtWidgets.QComboBox.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QComboBox.wheelEvent?4(QWheelEvent) -QtWidgets.QComboBox.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QComboBox.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QComboBox.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QComboBox.currentData?4(int role=Qt.UserRole) -> QVariant -QtWidgets.QComboBox.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant -QtWidgets.QComboBox.textActivated?4(QString) -QtWidgets.QComboBox.textHighlighted?4(QString) -QtWidgets.QComboBox.setPlaceholderText?4(QString) -QtWidgets.QComboBox.placeholderText?4() -> QString -QtWidgets.QPushButton?1(QWidget parent=None) -QtWidgets.QPushButton.__init__?1(self, QWidget parent=None) -QtWidgets.QPushButton?1(QString, QWidget parent=None) -QtWidgets.QPushButton.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QPushButton?1(QIcon, QString, QWidget parent=None) -QtWidgets.QPushButton.__init__?1(self, QIcon, QString, QWidget parent=None) -QtWidgets.QPushButton.sizeHint?4() -> QSize -QtWidgets.QPushButton.minimumSizeHint?4() -> QSize -QtWidgets.QPushButton.autoDefault?4() -> bool -QtWidgets.QPushButton.setAutoDefault?4(bool) -QtWidgets.QPushButton.isDefault?4() -> bool -QtWidgets.QPushButton.setDefault?4(bool) -QtWidgets.QPushButton.setMenu?4(QMenu) -QtWidgets.QPushButton.menu?4() -> QMenu -QtWidgets.QPushButton.setFlat?4(bool) -QtWidgets.QPushButton.isFlat?4() -> bool -QtWidgets.QPushButton.showMenu?4() -QtWidgets.QPushButton.initStyleOption?4(QStyleOptionButton) -QtWidgets.QPushButton.event?4(QEvent) -> bool -QtWidgets.QPushButton.paintEvent?4(QPaintEvent) -QtWidgets.QPushButton.keyPressEvent?4(QKeyEvent) -QtWidgets.QPushButton.focusInEvent?4(QFocusEvent) -QtWidgets.QPushButton.focusOutEvent?4(QFocusEvent) -QtWidgets.QPushButton.hitButton?4(QPoint) -> bool -QtWidgets.QPushButton.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QCommandLinkButton?1(QWidget parent=None) -QtWidgets.QCommandLinkButton.__init__?1(self, QWidget parent=None) -QtWidgets.QCommandLinkButton?1(QString, QWidget parent=None) -QtWidgets.QCommandLinkButton.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QCommandLinkButton?1(QString, QString, QWidget parent=None) -QtWidgets.QCommandLinkButton.__init__?1(self, QString, QString, QWidget parent=None) -QtWidgets.QCommandLinkButton.description?4() -> QString -QtWidgets.QCommandLinkButton.setDescription?4(QString) -QtWidgets.QCommandLinkButton.sizeHint?4() -> QSize -QtWidgets.QCommandLinkButton.heightForWidth?4(int) -> int -QtWidgets.QCommandLinkButton.minimumSizeHint?4() -> QSize -QtWidgets.QCommandLinkButton.initStyleOption?4(QStyleOptionButton) -QtWidgets.QCommandLinkButton.event?4(QEvent) -> bool -QtWidgets.QCommandLinkButton.paintEvent?4(QPaintEvent) -QtWidgets.QStyle.RequestSoftwareInputPanel?10 -QtWidgets.QStyle.RequestSoftwareInputPanel.RSIP_OnMouseClickAndAlreadyFocused?10 -QtWidgets.QStyle.RequestSoftwareInputPanel.RSIP_OnMouseClick?10 -QtWidgets.QStyle.StandardPixmap?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarMenuButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarMinButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarMaxButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarCloseButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarNormalButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarShadeButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarUnshadeButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TitleBarContextHelpButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DockWidgetCloseButton?10 -QtWidgets.QStyle.StandardPixmap.SP_MessageBoxInformation?10 -QtWidgets.QStyle.StandardPixmap.SP_MessageBoxWarning?10 -QtWidgets.QStyle.StandardPixmap.SP_MessageBoxCritical?10 -QtWidgets.QStyle.StandardPixmap.SP_MessageBoxQuestion?10 -QtWidgets.QStyle.StandardPixmap.SP_DesktopIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_TrashIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_ComputerIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DriveFDIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DriveHDIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DriveCDIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DriveDVDIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DriveNetIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DirOpenIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DirClosedIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DirLinkIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_FileIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_FileLinkIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_ToolBarHorizontalExtensionButton?10 -QtWidgets.QStyle.StandardPixmap.SP_ToolBarVerticalExtensionButton?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogStart?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogEnd?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogToParent?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogNewFolder?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogDetailedView?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogInfoView?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogContentsView?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogListView?10 -QtWidgets.QStyle.StandardPixmap.SP_FileDialogBack?10 -QtWidgets.QStyle.StandardPixmap.SP_DirIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogOkButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogCancelButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogHelpButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogOpenButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogSaveButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogCloseButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogApplyButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogResetButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogDiscardButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogYesButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogNoButton?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowUp?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowDown?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowLeft?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowRight?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowBack?10 -QtWidgets.QStyle.StandardPixmap.SP_ArrowForward?10 -QtWidgets.QStyle.StandardPixmap.SP_DirHomeIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_CommandLink?10 -QtWidgets.QStyle.StandardPixmap.SP_VistaShield?10 -QtWidgets.QStyle.StandardPixmap.SP_BrowserReload?10 -QtWidgets.QStyle.StandardPixmap.SP_BrowserStop?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaPlay?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaStop?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaPause?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaSkipForward?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaSkipBackward?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaSeekForward?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaSeekBackward?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaVolume?10 -QtWidgets.QStyle.StandardPixmap.SP_MediaVolumeMuted?10 -QtWidgets.QStyle.StandardPixmap.SP_DirLinkOpenIcon?10 -QtWidgets.QStyle.StandardPixmap.SP_LineEditClearButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogYesToAllButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogNoToAllButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogSaveAllButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogAbortButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogRetryButton?10 -QtWidgets.QStyle.StandardPixmap.SP_DialogIgnoreButton?10 -QtWidgets.QStyle.StandardPixmap.SP_RestoreDefaultsButton?10 -QtWidgets.QStyle.StandardPixmap.SP_TabCloseButton?10 -QtWidgets.QStyle.StandardPixmap.SP_CustomBase?10 -QtWidgets.QStyle.StyleHint?10 -QtWidgets.QStyle.StyleHint.SH_EtchDisabledText?10 -QtWidgets.QStyle.StyleHint.SH_DitherDisabledText?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_MiddleClickAbsolutePosition?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_ScrollWhenPointerLeavesControl?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_SelectMouseType?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_Alignment?10 -QtWidgets.QStyle.StyleHint.SH_Header_ArrowAlignment?10 -QtWidgets.QStyle.StyleHint.SH_Slider_SnapToValue?10 -QtWidgets.QStyle.StyleHint.SH_Slider_SloppyKeyEvents?10 -QtWidgets.QStyle.StyleHint.SH_ProgressDialog_CenterCancelButton?10 -QtWidgets.QStyle.StyleHint.SH_ProgressDialog_TextLabelAlignment?10 -QtWidgets.QStyle.StyleHint.SH_PrintDialog_RightAlignButtons?10 -QtWidgets.QStyle.StyleHint.SH_MainWindow_SpaceBelowMenuBar?10 -QtWidgets.QStyle.StyleHint.SH_FontDialog_SelectAssociatedText?10 -QtWidgets.QStyle.StyleHint.SH_Menu_AllowActiveAndDisabled?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SpaceActivatesItem?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuPopupDelay?10 -QtWidgets.QStyle.StyleHint.SH_ScrollView_FrameOnlyAroundContents?10 -QtWidgets.QStyle.StyleHint.SH_MenuBar_AltKeyNavigation?10 -QtWidgets.QStyle.StyleHint.SH_ComboBox_ListMouseTracking?10 -QtWidgets.QStyle.StyleHint.SH_Menu_MouseTracking?10 -QtWidgets.QStyle.StyleHint.SH_MenuBar_MouseTracking?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_ChangeHighlightOnFocus?10 -QtWidgets.QStyle.StyleHint.SH_Widget_ShareActivation?10 -QtWidgets.QStyle.StyleHint.SH_Workspace_FillSpaceOnMaximize?10 -QtWidgets.QStyle.StyleHint.SH_ComboBox_Popup?10 -QtWidgets.QStyle.StyleHint.SH_TitleBar_NoBorder?10 -QtWidgets.QStyle.StyleHint.SH_BlinkCursorWhenTextSelected?10 -QtWidgets.QStyle.StyleHint.SH_RichText_FullWidthSelection?10 -QtWidgets.QStyle.StyleHint.SH_Menu_Scrollable?10 -QtWidgets.QStyle.StyleHint.SH_GroupBox_TextLabelVerticalAlignment?10 -QtWidgets.QStyle.StyleHint.SH_GroupBox_TextLabelColor?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SloppySubMenus?10 -QtWidgets.QStyle.StyleHint.SH_Table_GridLineColor?10 -QtWidgets.QStyle.StyleHint.SH_LineEdit_PasswordCharacter?10 -QtWidgets.QStyle.StyleHint.SH_DialogButtons_DefaultButton?10 -QtWidgets.QStyle.StyleHint.SH_ToolBox_SelectedPageTitleBold?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_PreferNoArrows?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_LeftClickAbsolutePosition?10 -QtWidgets.QStyle.StyleHint.SH_UnderlineShortcut?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_AnimateButton?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_KeyPressAutoRepeatRate?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_ClickAutoRepeatRate?10 -QtWidgets.QStyle.StyleHint.SH_Menu_FillScreenWithScroll?10 -QtWidgets.QStyle.StyleHint.SH_ToolTipLabel_Opacity?10 -QtWidgets.QStyle.StyleHint.SH_DrawMenuBarSeparator?10 -QtWidgets.QStyle.StyleHint.SH_TitleBar_ModifyNotification?10 -QtWidgets.QStyle.StyleHint.SH_Button_FocusPolicy?10 -QtWidgets.QStyle.StyleHint.SH_MessageBox_UseBorderForButtonSpacing?10 -QtWidgets.QStyle.StyleHint.SH_TitleBar_AutoRaise?10 -QtWidgets.QStyle.StyleHint.SH_ToolButton_PopupDelay?10 -QtWidgets.QStyle.StyleHint.SH_FocusFrame_Mask?10 -QtWidgets.QStyle.StyleHint.SH_RubberBand_Mask?10 -QtWidgets.QStyle.StyleHint.SH_WindowFrame_Mask?10 -QtWidgets.QStyle.StyleHint.SH_SpinControls_DisableOnBounds?10 -QtWidgets.QStyle.StyleHint.SH_Dial_BackgroundRole?10 -QtWidgets.QStyle.StyleHint.SH_ComboBox_LayoutDirection?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_EllipsisLocation?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_ShowDecorationSelected?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_ActivateItemOnSingleClick?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_ContextMenu?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_RollBetweenButtons?10 -QtWidgets.QStyle.StyleHint.SH_Slider_StopMouseOverSlider?10 -QtWidgets.QStyle.StyleHint.SH_Slider_AbsoluteSetButtons?10 -QtWidgets.QStyle.StyleHint.SH_Slider_PageSetButtons?10 -QtWidgets.QStyle.StyleHint.SH_Menu_KeyboardSearch?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_ElideMode?10 -QtWidgets.QStyle.StyleHint.SH_DialogButtonLayout?10 -QtWidgets.QStyle.StyleHint.SH_ComboBox_PopupFrameStyle?10 -QtWidgets.QStyle.StyleHint.SH_MessageBox_TextInteractionFlags?10 -QtWidgets.QStyle.StyleHint.SH_DialogButtonBox_ButtonsHaveIcons?10 -QtWidgets.QStyle.StyleHint.SH_MessageBox_CenterButtons?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SelectionWrap?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_MovementWithoutUpdatingSelection?10 -QtWidgets.QStyle.StyleHint.SH_ToolTip_Mask?10 -QtWidgets.QStyle.StyleHint.SH_FocusFrame_AboveWidget?10 -QtWidgets.QStyle.StyleHint.SH_TextControl_FocusIndicatorTextCharFormat?10 -QtWidgets.QStyle.StyleHint.SH_WizardStyle?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_ArrowKeysNavigateIntoChildren?10 -QtWidgets.QStyle.StyleHint.SH_Menu_Mask?10 -QtWidgets.QStyle.StyleHint.SH_Menu_FlashTriggeredItem?10 -QtWidgets.QStyle.StyleHint.SH_Menu_FadeOutOnHide?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_ClickAutoRepeatThreshold?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_PaintAlternatingRowColorsForEmptyArea?10 -QtWidgets.QStyle.StyleHint.SH_FormLayoutWrapPolicy?10 -QtWidgets.QStyle.StyleHint.SH_TabWidget_DefaultTabPosition?10 -QtWidgets.QStyle.StyleHint.SH_ToolBar_Movable?10 -QtWidgets.QStyle.StyleHint.SH_FormLayoutFieldGrowthPolicy?10 -QtWidgets.QStyle.StyleHint.SH_FormLayoutFormAlignment?10 -QtWidgets.QStyle.StyleHint.SH_FormLayoutLabelAlignment?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_DrawDelegateFrame?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_CloseButtonPosition?10 -QtWidgets.QStyle.StyleHint.SH_DockWidget_ButtonsHaveFrame?10 -QtWidgets.QStyle.StyleHint.SH_ToolButtonStyle?10 -QtWidgets.QStyle.StyleHint.SH_RequestSoftwareInputPanel?10 -QtWidgets.QStyle.StyleHint.SH_ListViewExpand_SelectMouseType?10 -QtWidgets.QStyle.StyleHint.SH_ScrollBar_Transient?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SupportsSections?10 -QtWidgets.QStyle.StyleHint.SH_ToolTip_WakeUpDelay?10 -QtWidgets.QStyle.StyleHint.SH_ToolTip_FallAsleepDelay?10 -QtWidgets.QStyle.StyleHint.SH_Widget_Animate?10 -QtWidgets.QStyle.StyleHint.SH_Splitter_OpaqueResize?10 -QtWidgets.QStyle.StyleHint.SH_LineEdit_PasswordMaskDelay?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_ChangeCurrentDelay?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuUniDirection?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuUniDirectionFailCount?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuSloppySelectOtherActions?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuSloppyCloseTimeout?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuResetWhenReenteringParent?10 -QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuDontStartSloppyOnLeave?10 -QtWidgets.QStyle.StyleHint.SH_ItemView_ScrollMode?10 -QtWidgets.QStyle.StyleHint.SH_TitleBar_ShowToolTipsOnButtons?10 -QtWidgets.QStyle.StyleHint.SH_Widget_Animation_Duration?10 -QtWidgets.QStyle.StyleHint.SH_ComboBox_AllowWheelScrolling?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_ButtonsInsideFrame?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_StepModifier?10 -QtWidgets.QStyle.StyleHint.SH_TabBar_AllowWheelScrolling?10 -QtWidgets.QStyle.StyleHint.SH_Table_AlwaysDrawLeftTopGridLines?10 -QtWidgets.QStyle.StyleHint.SH_SpinBox_SelectOnStep?10 -QtWidgets.QStyle.StyleHint.SH_CustomBase?10 -QtWidgets.QStyle.ContentsType?10 -QtWidgets.QStyle.ContentsType.CT_PushButton?10 -QtWidgets.QStyle.ContentsType.CT_CheckBox?10 -QtWidgets.QStyle.ContentsType.CT_RadioButton?10 -QtWidgets.QStyle.ContentsType.CT_ToolButton?10 -QtWidgets.QStyle.ContentsType.CT_ComboBox?10 -QtWidgets.QStyle.ContentsType.CT_Splitter?10 -QtWidgets.QStyle.ContentsType.CT_ProgressBar?10 -QtWidgets.QStyle.ContentsType.CT_MenuItem?10 -QtWidgets.QStyle.ContentsType.CT_MenuBarItem?10 -QtWidgets.QStyle.ContentsType.CT_MenuBar?10 -QtWidgets.QStyle.ContentsType.CT_Menu?10 -QtWidgets.QStyle.ContentsType.CT_TabBarTab?10 -QtWidgets.QStyle.ContentsType.CT_Slider?10 -QtWidgets.QStyle.ContentsType.CT_ScrollBar?10 -QtWidgets.QStyle.ContentsType.CT_LineEdit?10 -QtWidgets.QStyle.ContentsType.CT_SpinBox?10 -QtWidgets.QStyle.ContentsType.CT_SizeGrip?10 -QtWidgets.QStyle.ContentsType.CT_TabWidget?10 -QtWidgets.QStyle.ContentsType.CT_DialogButtons?10 -QtWidgets.QStyle.ContentsType.CT_HeaderSection?10 -QtWidgets.QStyle.ContentsType.CT_GroupBox?10 -QtWidgets.QStyle.ContentsType.CT_MdiControls?10 -QtWidgets.QStyle.ContentsType.CT_ItemViewItem?10 -QtWidgets.QStyle.ContentsType.CT_CustomBase?10 -QtWidgets.QStyle.PixelMetric?10 -QtWidgets.QStyle.PixelMetric.PM_ButtonMargin?10 -QtWidgets.QStyle.PixelMetric.PM_ButtonDefaultIndicator?10 -QtWidgets.QStyle.PixelMetric.PM_MenuButtonIndicator?10 -QtWidgets.QStyle.PixelMetric.PM_ButtonShiftHorizontal?10 -QtWidgets.QStyle.PixelMetric.PM_ButtonShiftVertical?10 -QtWidgets.QStyle.PixelMetric.PM_DefaultFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_SpinBoxFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_ComboBoxFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_MaximumDragDistance?10 -QtWidgets.QStyle.PixelMetric.PM_ScrollBarExtent?10 -QtWidgets.QStyle.PixelMetric.PM_ScrollBarSliderMin?10 -QtWidgets.QStyle.PixelMetric.PM_SliderThickness?10 -QtWidgets.QStyle.PixelMetric.PM_SliderControlThickness?10 -QtWidgets.QStyle.PixelMetric.PM_SliderLength?10 -QtWidgets.QStyle.PixelMetric.PM_SliderTickmarkOffset?10 -QtWidgets.QStyle.PixelMetric.PM_SliderSpaceAvailable?10 -QtWidgets.QStyle.PixelMetric.PM_DockWidgetSeparatorExtent?10 -QtWidgets.QStyle.PixelMetric.PM_DockWidgetHandleExtent?10 -QtWidgets.QStyle.PixelMetric.PM_DockWidgetFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarTabOverlap?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarTabHSpace?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarTabVSpace?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarBaseHeight?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarBaseOverlap?10 -QtWidgets.QStyle.PixelMetric.PM_ProgressBarChunkWidth?10 -QtWidgets.QStyle.PixelMetric.PM_SplitterWidth?10 -QtWidgets.QStyle.PixelMetric.PM_TitleBarHeight?10 -QtWidgets.QStyle.PixelMetric.PM_MenuScrollerHeight?10 -QtWidgets.QStyle.PixelMetric.PM_MenuHMargin?10 -QtWidgets.QStyle.PixelMetric.PM_MenuVMargin?10 -QtWidgets.QStyle.PixelMetric.PM_MenuPanelWidth?10 -QtWidgets.QStyle.PixelMetric.PM_MenuTearoffHeight?10 -QtWidgets.QStyle.PixelMetric.PM_MenuDesktopFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_MenuBarPanelWidth?10 -QtWidgets.QStyle.PixelMetric.PM_MenuBarItemSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_MenuBarVMargin?10 -QtWidgets.QStyle.PixelMetric.PM_MenuBarHMargin?10 -QtWidgets.QStyle.PixelMetric.PM_IndicatorWidth?10 -QtWidgets.QStyle.PixelMetric.PM_IndicatorHeight?10 -QtWidgets.QStyle.PixelMetric.PM_ExclusiveIndicatorWidth?10 -QtWidgets.QStyle.PixelMetric.PM_ExclusiveIndicatorHeight?10 -QtWidgets.QStyle.PixelMetric.PM_DialogButtonsSeparator?10 -QtWidgets.QStyle.PixelMetric.PM_DialogButtonsButtonWidth?10 -QtWidgets.QStyle.PixelMetric.PM_DialogButtonsButtonHeight?10 -QtWidgets.QStyle.PixelMetric.PM_MdiSubWindowFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_MdiSubWindowMinimizedWidth?10 -QtWidgets.QStyle.PixelMetric.PM_HeaderMargin?10 -QtWidgets.QStyle.PixelMetric.PM_HeaderMarkSize?10 -QtWidgets.QStyle.PixelMetric.PM_HeaderGripMargin?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarTabShiftHorizontal?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarTabShiftVertical?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarScrollButtonWidth?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarHandleExtent?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarItemSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarItemMargin?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarSeparatorExtent?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarExtensionExtent?10 -QtWidgets.QStyle.PixelMetric.PM_SpinBoxSliderHeight?10 -QtWidgets.QStyle.PixelMetric.PM_ToolBarIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_ListViewIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_IconViewIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_SmallIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_LargeIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_FocusFrameVMargin?10 -QtWidgets.QStyle.PixelMetric.PM_FocusFrameHMargin?10 -QtWidgets.QStyle.PixelMetric.PM_ToolTipLabelFrameWidth?10 -QtWidgets.QStyle.PixelMetric.PM_CheckBoxLabelSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_TabBarIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_SizeGripSize?10 -QtWidgets.QStyle.PixelMetric.PM_DockWidgetTitleMargin?10 -QtWidgets.QStyle.PixelMetric.PM_MessageBoxIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_ButtonIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_DockWidgetTitleBarButtonMargin?10 -QtWidgets.QStyle.PixelMetric.PM_RadioButtonLabelSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutLeftMargin?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutTopMargin?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutRightMargin?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutBottomMargin?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutHorizontalSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_LayoutVerticalSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_TabBar_ScrollButtonOverlap?10 -QtWidgets.QStyle.PixelMetric.PM_TextCursorWidth?10 -QtWidgets.QStyle.PixelMetric.PM_TabCloseIndicatorWidth?10 -QtWidgets.QStyle.PixelMetric.PM_TabCloseIndicatorHeight?10 -QtWidgets.QStyle.PixelMetric.PM_ScrollView_ScrollBarSpacing?10 -QtWidgets.QStyle.PixelMetric.PM_SubMenuOverlap?10 -QtWidgets.QStyle.PixelMetric.PM_ScrollView_ScrollBarOverlap?10 -QtWidgets.QStyle.PixelMetric.PM_TreeViewIndentation?10 -QtWidgets.QStyle.PixelMetric.PM_HeaderDefaultSectionSizeHorizontal?10 -QtWidgets.QStyle.PixelMetric.PM_HeaderDefaultSectionSizeVertical?10 -QtWidgets.QStyle.PixelMetric.PM_TitleBarButtonIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_TitleBarButtonSize?10 -QtWidgets.QStyle.PixelMetric.PM_LineEditIconSize?10 -QtWidgets.QStyle.PixelMetric.PM_LineEditIconMargin?10 -QtWidgets.QStyle.PixelMetric.PM_CustomBase?10 -QtWidgets.QStyle.SubControl?10 -QtWidgets.QStyle.SubControl.SC_None?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarAddLine?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarSubLine?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarAddPage?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarSubPage?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarFirst?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarLast?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarSlider?10 -QtWidgets.QStyle.SubControl.SC_ScrollBarGroove?10 -QtWidgets.QStyle.SubControl.SC_SpinBoxUp?10 -QtWidgets.QStyle.SubControl.SC_SpinBoxDown?10 -QtWidgets.QStyle.SubControl.SC_SpinBoxFrame?10 -QtWidgets.QStyle.SubControl.SC_SpinBoxEditField?10 -QtWidgets.QStyle.SubControl.SC_ComboBoxFrame?10 -QtWidgets.QStyle.SubControl.SC_ComboBoxEditField?10 -QtWidgets.QStyle.SubControl.SC_ComboBoxArrow?10 -QtWidgets.QStyle.SubControl.SC_ComboBoxListBoxPopup?10 -QtWidgets.QStyle.SubControl.SC_SliderGroove?10 -QtWidgets.QStyle.SubControl.SC_SliderHandle?10 -QtWidgets.QStyle.SubControl.SC_SliderTickmarks?10 -QtWidgets.QStyle.SubControl.SC_ToolButton?10 -QtWidgets.QStyle.SubControl.SC_ToolButtonMenu?10 -QtWidgets.QStyle.SubControl.SC_TitleBarSysMenu?10 -QtWidgets.QStyle.SubControl.SC_TitleBarMinButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarMaxButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarCloseButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarNormalButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarShadeButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarUnshadeButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarContextHelpButton?10 -QtWidgets.QStyle.SubControl.SC_TitleBarLabel?10 -QtWidgets.QStyle.SubControl.SC_DialGroove?10 -QtWidgets.QStyle.SubControl.SC_DialHandle?10 -QtWidgets.QStyle.SubControl.SC_DialTickmarks?10 -QtWidgets.QStyle.SubControl.SC_GroupBoxCheckBox?10 -QtWidgets.QStyle.SubControl.SC_GroupBoxLabel?10 -QtWidgets.QStyle.SubControl.SC_GroupBoxContents?10 -QtWidgets.QStyle.SubControl.SC_GroupBoxFrame?10 -QtWidgets.QStyle.SubControl.SC_MdiMinButton?10 -QtWidgets.QStyle.SubControl.SC_MdiNormalButton?10 -QtWidgets.QStyle.SubControl.SC_MdiCloseButton?10 -QtWidgets.QStyle.SubControl.SC_CustomBase?10 -QtWidgets.QStyle.SubControl.SC_All?10 -QtWidgets.QStyle.ComplexControl?10 -QtWidgets.QStyle.ComplexControl.CC_SpinBox?10 -QtWidgets.QStyle.ComplexControl.CC_ComboBox?10 -QtWidgets.QStyle.ComplexControl.CC_ScrollBar?10 -QtWidgets.QStyle.ComplexControl.CC_Slider?10 -QtWidgets.QStyle.ComplexControl.CC_ToolButton?10 -QtWidgets.QStyle.ComplexControl.CC_TitleBar?10 -QtWidgets.QStyle.ComplexControl.CC_Dial?10 -QtWidgets.QStyle.ComplexControl.CC_GroupBox?10 -QtWidgets.QStyle.ComplexControl.CC_MdiControls?10 -QtWidgets.QStyle.ComplexControl.CC_CustomBase?10 -QtWidgets.QStyle.SubElement?10 -QtWidgets.QStyle.SubElement.SE_PushButtonContents?10 -QtWidgets.QStyle.SubElement.SE_PushButtonFocusRect?10 -QtWidgets.QStyle.SubElement.SE_CheckBoxIndicator?10 -QtWidgets.QStyle.SubElement.SE_CheckBoxContents?10 -QtWidgets.QStyle.SubElement.SE_CheckBoxFocusRect?10 -QtWidgets.QStyle.SubElement.SE_CheckBoxClickRect?10 -QtWidgets.QStyle.SubElement.SE_RadioButtonIndicator?10 -QtWidgets.QStyle.SubElement.SE_RadioButtonContents?10 -QtWidgets.QStyle.SubElement.SE_RadioButtonFocusRect?10 -QtWidgets.QStyle.SubElement.SE_RadioButtonClickRect?10 -QtWidgets.QStyle.SubElement.SE_ComboBoxFocusRect?10 -QtWidgets.QStyle.SubElement.SE_SliderFocusRect?10 -QtWidgets.QStyle.SubElement.SE_ProgressBarGroove?10 -QtWidgets.QStyle.SubElement.SE_ProgressBarContents?10 -QtWidgets.QStyle.SubElement.SE_ProgressBarLabel?10 -QtWidgets.QStyle.SubElement.SE_ToolBoxTabContents?10 -QtWidgets.QStyle.SubElement.SE_HeaderLabel?10 -QtWidgets.QStyle.SubElement.SE_HeaderArrow?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetTabBar?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetTabPane?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetTabContents?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetLeftCorner?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetRightCorner?10 -QtWidgets.QStyle.SubElement.SE_TabBarTearIndicator?10 -QtWidgets.QStyle.SubElement.SE_TreeViewDisclosureItem?10 -QtWidgets.QStyle.SubElement.SE_LineEditContents?10 -QtWidgets.QStyle.SubElement.SE_FrameContents?10 -QtWidgets.QStyle.SubElement.SE_DockWidgetCloseButton?10 -QtWidgets.QStyle.SubElement.SE_DockWidgetFloatButton?10 -QtWidgets.QStyle.SubElement.SE_DockWidgetTitleBarText?10 -QtWidgets.QStyle.SubElement.SE_DockWidgetIcon?10 -QtWidgets.QStyle.SubElement.SE_CheckBoxLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_ComboBoxLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_DateTimeEditLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_LabelLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_ProgressBarLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_PushButtonLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_RadioButtonLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_SliderLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_SpinBoxLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_ToolButtonLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_FrameLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_GroupBoxLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_TabWidgetLayoutItem?10 -QtWidgets.QStyle.SubElement.SE_ItemViewItemCheckIndicator?10 -QtWidgets.QStyle.SubElement.SE_ItemViewItemDecoration?10 -QtWidgets.QStyle.SubElement.SE_ItemViewItemText?10 -QtWidgets.QStyle.SubElement.SE_ItemViewItemFocusRect?10 -QtWidgets.QStyle.SubElement.SE_TabBarTabLeftButton?10 -QtWidgets.QStyle.SubElement.SE_TabBarTabRightButton?10 -QtWidgets.QStyle.SubElement.SE_TabBarTabText?10 -QtWidgets.QStyle.SubElement.SE_ShapedFrameContents?10 -QtWidgets.QStyle.SubElement.SE_ToolBarHandle?10 -QtWidgets.QStyle.SubElement.SE_TabBarTearIndicatorLeft?10 -QtWidgets.QStyle.SubElement.SE_TabBarScrollLeftButton?10 -QtWidgets.QStyle.SubElement.SE_TabBarScrollRightButton?10 -QtWidgets.QStyle.SubElement.SE_TabBarTearIndicatorRight?10 -QtWidgets.QStyle.SubElement.SE_PushButtonBevel?10 -QtWidgets.QStyle.SubElement.SE_CustomBase?10 -QtWidgets.QStyle.ControlElement?10 -QtWidgets.QStyle.ControlElement.CE_PushButton?10 -QtWidgets.QStyle.ControlElement.CE_PushButtonBevel?10 -QtWidgets.QStyle.ControlElement.CE_PushButtonLabel?10 -QtWidgets.QStyle.ControlElement.CE_CheckBox?10 -QtWidgets.QStyle.ControlElement.CE_CheckBoxLabel?10 -QtWidgets.QStyle.ControlElement.CE_RadioButton?10 -QtWidgets.QStyle.ControlElement.CE_RadioButtonLabel?10 -QtWidgets.QStyle.ControlElement.CE_TabBarTab?10 -QtWidgets.QStyle.ControlElement.CE_TabBarTabShape?10 -QtWidgets.QStyle.ControlElement.CE_TabBarTabLabel?10 -QtWidgets.QStyle.ControlElement.CE_ProgressBar?10 -QtWidgets.QStyle.ControlElement.CE_ProgressBarGroove?10 -QtWidgets.QStyle.ControlElement.CE_ProgressBarContents?10 -QtWidgets.QStyle.ControlElement.CE_ProgressBarLabel?10 -QtWidgets.QStyle.ControlElement.CE_MenuItem?10 -QtWidgets.QStyle.ControlElement.CE_MenuScroller?10 -QtWidgets.QStyle.ControlElement.CE_MenuVMargin?10 -QtWidgets.QStyle.ControlElement.CE_MenuHMargin?10 -QtWidgets.QStyle.ControlElement.CE_MenuTearoff?10 -QtWidgets.QStyle.ControlElement.CE_MenuEmptyArea?10 -QtWidgets.QStyle.ControlElement.CE_MenuBarItem?10 -QtWidgets.QStyle.ControlElement.CE_MenuBarEmptyArea?10 -QtWidgets.QStyle.ControlElement.CE_ToolButtonLabel?10 -QtWidgets.QStyle.ControlElement.CE_Header?10 -QtWidgets.QStyle.ControlElement.CE_HeaderSection?10 -QtWidgets.QStyle.ControlElement.CE_HeaderLabel?10 -QtWidgets.QStyle.ControlElement.CE_ToolBoxTab?10 -QtWidgets.QStyle.ControlElement.CE_SizeGrip?10 -QtWidgets.QStyle.ControlElement.CE_Splitter?10 -QtWidgets.QStyle.ControlElement.CE_RubberBand?10 -QtWidgets.QStyle.ControlElement.CE_DockWidgetTitle?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarAddLine?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarSubLine?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarAddPage?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarSubPage?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarSlider?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarFirst?10 -QtWidgets.QStyle.ControlElement.CE_ScrollBarLast?10 -QtWidgets.QStyle.ControlElement.CE_FocusFrame?10 -QtWidgets.QStyle.ControlElement.CE_ComboBoxLabel?10 -QtWidgets.QStyle.ControlElement.CE_ToolBar?10 -QtWidgets.QStyle.ControlElement.CE_ToolBoxTabShape?10 -QtWidgets.QStyle.ControlElement.CE_ToolBoxTabLabel?10 -QtWidgets.QStyle.ControlElement.CE_HeaderEmptyArea?10 -QtWidgets.QStyle.ControlElement.CE_ColumnViewGrip?10 -QtWidgets.QStyle.ControlElement.CE_ItemViewItem?10 -QtWidgets.QStyle.ControlElement.CE_ShapedFrame?10 -QtWidgets.QStyle.ControlElement.CE_CustomBase?10 -QtWidgets.QStyle.PrimitiveElement?10 -QtWidgets.QStyle.PrimitiveElement.PE_Frame?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameDefaultButton?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameDockWidget?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameFocusRect?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameGroupBox?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameLineEdit?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameMenu?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameTabWidget?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameWindow?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameButtonBevel?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameButtonTool?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameTabBarBase?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonCommand?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonBevel?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonTool?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelMenuBar?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelToolBar?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelLineEdit?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowDown?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowLeft?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowRight?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowUp?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorBranch?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorButtonDropDown?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorCheckBox?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorDockWidgetResizeHandle?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorHeaderArrow?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorMenuCheckMark?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorProgressChunk?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorRadioButton?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinDown?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinMinus?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinPlus?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinUp?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorToolBarHandle?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorToolBarSeparator?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelTipLabel?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTear?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelScrollAreaCorner?10 -QtWidgets.QStyle.PrimitiveElement.PE_Widget?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorColumnViewArrow?10 -QtWidgets.QStyle.PrimitiveElement.PE_FrameStatusBarItem?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorItemViewItemCheck?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorItemViewItemDrop?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelItemViewItem?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelItemViewRow?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelStatusBar?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabClose?10 -QtWidgets.QStyle.PrimitiveElement.PE_PanelMenu?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTearLeft?10 -QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTearRight?10 -QtWidgets.QStyle.PrimitiveElement.PE_CustomBase?10 -QtWidgets.QStyle.StateFlag?10 -QtWidgets.QStyle.StateFlag.State_None?10 -QtWidgets.QStyle.StateFlag.State_Enabled?10 -QtWidgets.QStyle.StateFlag.State_Raised?10 -QtWidgets.QStyle.StateFlag.State_Sunken?10 -QtWidgets.QStyle.StateFlag.State_Off?10 -QtWidgets.QStyle.StateFlag.State_NoChange?10 -QtWidgets.QStyle.StateFlag.State_On?10 -QtWidgets.QStyle.StateFlag.State_DownArrow?10 -QtWidgets.QStyle.StateFlag.State_Horizontal?10 -QtWidgets.QStyle.StateFlag.State_HasFocus?10 -QtWidgets.QStyle.StateFlag.State_Top?10 -QtWidgets.QStyle.StateFlag.State_Bottom?10 -QtWidgets.QStyle.StateFlag.State_FocusAtBorder?10 -QtWidgets.QStyle.StateFlag.State_AutoRaise?10 -QtWidgets.QStyle.StateFlag.State_MouseOver?10 -QtWidgets.QStyle.StateFlag.State_UpArrow?10 -QtWidgets.QStyle.StateFlag.State_Selected?10 -QtWidgets.QStyle.StateFlag.State_Active?10 -QtWidgets.QStyle.StateFlag.State_Open?10 -QtWidgets.QStyle.StateFlag.State_Children?10 -QtWidgets.QStyle.StateFlag.State_Item?10 -QtWidgets.QStyle.StateFlag.State_Sibling?10 -QtWidgets.QStyle.StateFlag.State_Editing?10 -QtWidgets.QStyle.StateFlag.State_KeyboardFocusChange?10 -QtWidgets.QStyle.StateFlag.State_ReadOnly?10 -QtWidgets.QStyle.StateFlag.State_Window?10 -QtWidgets.QStyle.StateFlag.State_Small?10 -QtWidgets.QStyle.StateFlag.State_Mini?10 -QtWidgets.QStyle?1() -QtWidgets.QStyle.__init__?1(self) -QtWidgets.QStyle.polish?4(QWidget) -QtWidgets.QStyle.unpolish?4(QWidget) -QtWidgets.QStyle.polish?4(QApplication) -QtWidgets.QStyle.unpolish?4(QApplication) -QtWidgets.QStyle.polish?4(QPalette) -> QPalette -QtWidgets.QStyle.itemTextRect?4(QFontMetrics, QRect, int, bool, QString) -> QRect -QtWidgets.QStyle.itemPixmapRect?4(QRect, int, QPixmap) -> QRect -QtWidgets.QStyle.drawItemText?4(QPainter, QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) -QtWidgets.QStyle.drawItemPixmap?4(QPainter, QRect, int, QPixmap) -QtWidgets.QStyle.standardPalette?4() -> QPalette -QtWidgets.QStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget widget=None) -> QRect -QtWidgets.QStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) -QtWidgets.QStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl -QtWidgets.QStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget widget=None) -> QRect -QtWidgets.QStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget widget=None) -> QSize -QtWidgets.QStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int -QtWidgets.QStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QPixmap -QtWidgets.QStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon -QtWidgets.QStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap -QtWidgets.QStyle.visualRect?4(Qt.LayoutDirection, QRect, QRect) -> QRect -QtWidgets.QStyle.visualPos?4(Qt.LayoutDirection, QRect, QPoint) -> QPoint -QtWidgets.QStyle.sliderPositionFromValue?4(int, int, int, int, bool upsideDown=False) -> int -QtWidgets.QStyle.sliderValueFromPosition?4(int, int, int, int, bool upsideDown=False) -> int -QtWidgets.QStyle.visualAlignment?4(Qt.LayoutDirection, unknown-type) -> unknown-type -QtWidgets.QStyle.alignedRect?4(Qt.LayoutDirection, unknown-type, QSize, QRect) -> QRect -QtWidgets.QStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QStyle.combinedLayoutSpacing?4(unknown-type, unknown-type, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QStyle.proxy?4() -> QStyle -QtWidgets.QStyle.name?4() -> QString -QtWidgets.QCommonStyle?1() -QtWidgets.QCommonStyle.__init__?1(self) -QtWidgets.QCommonStyle.polish?4(QWidget) -QtWidgets.QCommonStyle.unpolish?4(QWidget) -QtWidgets.QCommonStyle.polish?4(QApplication) -QtWidgets.QCommonStyle.unpolish?4(QApplication) -QtWidgets.QCommonStyle.polish?4(QPalette) -> QPalette -QtWidgets.QCommonStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QCommonStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QCommonStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget widget=None) -> QRect -QtWidgets.QCommonStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) -QtWidgets.QCommonStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl -QtWidgets.QCommonStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget widget=None) -> QRect -QtWidgets.QCommonStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget widget=None) -> QSize -QtWidgets.QCommonStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QCommonStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int -QtWidgets.QCommonStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QPixmap -QtWidgets.QCommonStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap -QtWidgets.QCommonStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon -QtWidgets.QCommonStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QCompleter.ModelSorting?10 -QtWidgets.QCompleter.ModelSorting.UnsortedModel?10 -QtWidgets.QCompleter.ModelSorting.CaseSensitivelySortedModel?10 -QtWidgets.QCompleter.ModelSorting.CaseInsensitivelySortedModel?10 -QtWidgets.QCompleter.CompletionMode?10 -QtWidgets.QCompleter.CompletionMode.PopupCompletion?10 -QtWidgets.QCompleter.CompletionMode.UnfilteredPopupCompletion?10 -QtWidgets.QCompleter.CompletionMode.InlineCompletion?10 -QtWidgets.QCompleter?1(QAbstractItemModel, QObject parent=None) -QtWidgets.QCompleter.__init__?1(self, QAbstractItemModel, QObject parent=None) -QtWidgets.QCompleter?1(QStringList, QObject parent=None) -QtWidgets.QCompleter.__init__?1(self, QStringList, QObject parent=None) -QtWidgets.QCompleter?1(QObject parent=None) -QtWidgets.QCompleter.__init__?1(self, QObject parent=None) -QtWidgets.QCompleter.setWidget?4(QWidget) -QtWidgets.QCompleter.widget?4() -> QWidget -QtWidgets.QCompleter.setModel?4(QAbstractItemModel) -QtWidgets.QCompleter.model?4() -> QAbstractItemModel -QtWidgets.QCompleter.setCompletionMode?4(QCompleter.CompletionMode) -QtWidgets.QCompleter.completionMode?4() -> QCompleter.CompletionMode -QtWidgets.QCompleter.popup?4() -> QAbstractItemView -QtWidgets.QCompleter.setPopup?4(QAbstractItemView) -QtWidgets.QCompleter.setCaseSensitivity?4(Qt.CaseSensitivity) -QtWidgets.QCompleter.caseSensitivity?4() -> Qt.CaseSensitivity -QtWidgets.QCompleter.setModelSorting?4(QCompleter.ModelSorting) -QtWidgets.QCompleter.modelSorting?4() -> QCompleter.ModelSorting -QtWidgets.QCompleter.setCompletionColumn?4(int) -QtWidgets.QCompleter.completionColumn?4() -> int -QtWidgets.QCompleter.setCompletionRole?4(int) -QtWidgets.QCompleter.completionRole?4() -> int -QtWidgets.QCompleter.completionCount?4() -> int -QtWidgets.QCompleter.setCurrentRow?4(int) -> bool -QtWidgets.QCompleter.currentRow?4() -> int -QtWidgets.QCompleter.currentIndex?4() -> QModelIndex -QtWidgets.QCompleter.currentCompletion?4() -> QString -QtWidgets.QCompleter.completionModel?4() -> QAbstractItemModel -QtWidgets.QCompleter.completionPrefix?4() -> QString -QtWidgets.QCompleter.pathFromIndex?4(QModelIndex) -> QString -QtWidgets.QCompleter.splitPath?4(QString) -> QStringList -QtWidgets.QCompleter.wrapAround?4() -> bool -QtWidgets.QCompleter.complete?4(QRect rect=QRect()) -QtWidgets.QCompleter.setCompletionPrefix?4(QString) -QtWidgets.QCompleter.setWrapAround?4(bool) -QtWidgets.QCompleter.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QCompleter.event?4(QEvent) -> bool -QtWidgets.QCompleter.activated?4(QString) -QtWidgets.QCompleter.activated?4(QModelIndex) -QtWidgets.QCompleter.highlighted?4(QString) -QtWidgets.QCompleter.highlighted?4(QModelIndex) -QtWidgets.QCompleter.maxVisibleItems?4() -> int -QtWidgets.QCompleter.setMaxVisibleItems?4(int) -QtWidgets.QCompleter.setFilterMode?4(unknown-type) -QtWidgets.QCompleter.filterMode?4() -> unknown-type -QtWidgets.QDataWidgetMapper.SubmitPolicy?10 -QtWidgets.QDataWidgetMapper.SubmitPolicy.AutoSubmit?10 -QtWidgets.QDataWidgetMapper.SubmitPolicy.ManualSubmit?10 -QtWidgets.QDataWidgetMapper?1(QObject parent=None) -QtWidgets.QDataWidgetMapper.__init__?1(self, QObject parent=None) -QtWidgets.QDataWidgetMapper.setModel?4(QAbstractItemModel) -QtWidgets.QDataWidgetMapper.model?4() -> QAbstractItemModel -QtWidgets.QDataWidgetMapper.setItemDelegate?4(QAbstractItemDelegate) -QtWidgets.QDataWidgetMapper.itemDelegate?4() -> QAbstractItemDelegate -QtWidgets.QDataWidgetMapper.setRootIndex?4(QModelIndex) -QtWidgets.QDataWidgetMapper.rootIndex?4() -> QModelIndex -QtWidgets.QDataWidgetMapper.setOrientation?4(Qt.Orientation) -QtWidgets.QDataWidgetMapper.orientation?4() -> Qt.Orientation -QtWidgets.QDataWidgetMapper.setSubmitPolicy?4(QDataWidgetMapper.SubmitPolicy) -QtWidgets.QDataWidgetMapper.submitPolicy?4() -> QDataWidgetMapper.SubmitPolicy -QtWidgets.QDataWidgetMapper.addMapping?4(QWidget, int) -QtWidgets.QDataWidgetMapper.addMapping?4(QWidget, int, QByteArray) -QtWidgets.QDataWidgetMapper.removeMapping?4(QWidget) -QtWidgets.QDataWidgetMapper.mappedPropertyName?4(QWidget) -> QByteArray -QtWidgets.QDataWidgetMapper.mappedSection?4(QWidget) -> int -QtWidgets.QDataWidgetMapper.mappedWidgetAt?4(int) -> QWidget -QtWidgets.QDataWidgetMapper.clearMapping?4() -QtWidgets.QDataWidgetMapper.currentIndex?4() -> int -QtWidgets.QDataWidgetMapper.revert?4() -QtWidgets.QDataWidgetMapper.setCurrentIndex?4(int) -QtWidgets.QDataWidgetMapper.setCurrentModelIndex?4(QModelIndex) -QtWidgets.QDataWidgetMapper.submit?4() -> bool -QtWidgets.QDataWidgetMapper.toFirst?4() -QtWidgets.QDataWidgetMapper.toLast?4() -QtWidgets.QDataWidgetMapper.toNext?4() -QtWidgets.QDataWidgetMapper.toPrevious?4() -QtWidgets.QDataWidgetMapper.currentIndexChanged?4(int) -QtWidgets.QDateTimeEdit.Section?10 -QtWidgets.QDateTimeEdit.Section.NoSection?10 -QtWidgets.QDateTimeEdit.Section.AmPmSection?10 -QtWidgets.QDateTimeEdit.Section.MSecSection?10 -QtWidgets.QDateTimeEdit.Section.SecondSection?10 -QtWidgets.QDateTimeEdit.Section.MinuteSection?10 -QtWidgets.QDateTimeEdit.Section.HourSection?10 -QtWidgets.QDateTimeEdit.Section.DaySection?10 -QtWidgets.QDateTimeEdit.Section.MonthSection?10 -QtWidgets.QDateTimeEdit.Section.YearSection?10 -QtWidgets.QDateTimeEdit.Section.TimeSections_Mask?10 -QtWidgets.QDateTimeEdit.Section.DateSections_Mask?10 -QtWidgets.QDateTimeEdit?1(QWidget parent=None) -QtWidgets.QDateTimeEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QDateTimeEdit?1(QDateTime, QWidget parent=None) -QtWidgets.QDateTimeEdit.__init__?1(self, QDateTime, QWidget parent=None) -QtWidgets.QDateTimeEdit?1(QDate, QWidget parent=None) -QtWidgets.QDateTimeEdit.__init__?1(self, QDate, QWidget parent=None) -QtWidgets.QDateTimeEdit?1(QTime, QWidget parent=None) -QtWidgets.QDateTimeEdit.__init__?1(self, QTime, QWidget parent=None) -QtWidgets.QDateTimeEdit.dateTime?4() -> QDateTime -QtWidgets.QDateTimeEdit.date?4() -> QDate -QtWidgets.QDateTimeEdit.time?4() -> QTime -QtWidgets.QDateTimeEdit.minimumDate?4() -> QDate -QtWidgets.QDateTimeEdit.setMinimumDate?4(QDate) -QtWidgets.QDateTimeEdit.clearMinimumDate?4() -QtWidgets.QDateTimeEdit.maximumDate?4() -> QDate -QtWidgets.QDateTimeEdit.setMaximumDate?4(QDate) -QtWidgets.QDateTimeEdit.clearMaximumDate?4() -QtWidgets.QDateTimeEdit.setDateRange?4(QDate, QDate) -QtWidgets.QDateTimeEdit.minimumTime?4() -> QTime -QtWidgets.QDateTimeEdit.setMinimumTime?4(QTime) -QtWidgets.QDateTimeEdit.clearMinimumTime?4() -QtWidgets.QDateTimeEdit.maximumTime?4() -> QTime -QtWidgets.QDateTimeEdit.setMaximumTime?4(QTime) -QtWidgets.QDateTimeEdit.clearMaximumTime?4() -QtWidgets.QDateTimeEdit.setTimeRange?4(QTime, QTime) -QtWidgets.QDateTimeEdit.displayedSections?4() -> unknown-type -QtWidgets.QDateTimeEdit.currentSection?4() -> QDateTimeEdit.Section -QtWidgets.QDateTimeEdit.setCurrentSection?4(QDateTimeEdit.Section) -QtWidgets.QDateTimeEdit.sectionText?4(QDateTimeEdit.Section) -> QString -QtWidgets.QDateTimeEdit.displayFormat?4() -> QString -QtWidgets.QDateTimeEdit.setDisplayFormat?4(QString) -QtWidgets.QDateTimeEdit.calendarPopup?4() -> bool -QtWidgets.QDateTimeEdit.setCalendarPopup?4(bool) -QtWidgets.QDateTimeEdit.setSelectedSection?4(QDateTimeEdit.Section) -QtWidgets.QDateTimeEdit.sizeHint?4() -> QSize -QtWidgets.QDateTimeEdit.clear?4() -QtWidgets.QDateTimeEdit.stepBy?4(int) -QtWidgets.QDateTimeEdit.event?4(QEvent) -> bool -QtWidgets.QDateTimeEdit.sectionAt?4(int) -> QDateTimeEdit.Section -QtWidgets.QDateTimeEdit.currentSectionIndex?4() -> int -QtWidgets.QDateTimeEdit.setCurrentSectionIndex?4(int) -QtWidgets.QDateTimeEdit.sectionCount?4() -> int -QtWidgets.QDateTimeEdit.dateTimeChanged?4(QDateTime) -QtWidgets.QDateTimeEdit.timeChanged?4(QTime) -QtWidgets.QDateTimeEdit.dateChanged?4(QDate) -QtWidgets.QDateTimeEdit.setDateTime?4(QDateTime) -QtWidgets.QDateTimeEdit.setDate?4(QDate) -QtWidgets.QDateTimeEdit.setTime?4(QTime) -QtWidgets.QDateTimeEdit.initStyleOption?4(QStyleOptionSpinBox) -QtWidgets.QDateTimeEdit.keyPressEvent?4(QKeyEvent) -QtWidgets.QDateTimeEdit.wheelEvent?4(QWheelEvent) -QtWidgets.QDateTimeEdit.focusInEvent?4(QFocusEvent) -QtWidgets.QDateTimeEdit.focusNextPrevChild?4(bool) -> bool -QtWidgets.QDateTimeEdit.mousePressEvent?4(QMouseEvent) -QtWidgets.QDateTimeEdit.paintEvent?4(QPaintEvent) -QtWidgets.QDateTimeEdit.validate?4(QString, int) -> (QValidator.State, QString, int) -QtWidgets.QDateTimeEdit.fixup?4(QString) -> QString -QtWidgets.QDateTimeEdit.dateTimeFromText?4(QString) -> QDateTime -QtWidgets.QDateTimeEdit.textFromDateTime?4(QDateTime) -> QString -QtWidgets.QDateTimeEdit.stepEnabled?4() -> unknown-type -QtWidgets.QDateTimeEdit.minimumDateTime?4() -> QDateTime -QtWidgets.QDateTimeEdit.clearMinimumDateTime?4() -QtWidgets.QDateTimeEdit.setMinimumDateTime?4(QDateTime) -QtWidgets.QDateTimeEdit.maximumDateTime?4() -> QDateTime -QtWidgets.QDateTimeEdit.clearMaximumDateTime?4() -QtWidgets.QDateTimeEdit.setMaximumDateTime?4(QDateTime) -QtWidgets.QDateTimeEdit.setDateTimeRange?4(QDateTime, QDateTime) -QtWidgets.QDateTimeEdit.calendarWidget?4() -> QCalendarWidget -QtWidgets.QDateTimeEdit.setCalendarWidget?4(QCalendarWidget) -QtWidgets.QDateTimeEdit.timeSpec?4() -> Qt.TimeSpec -QtWidgets.QDateTimeEdit.setTimeSpec?4(Qt.TimeSpec) -QtWidgets.QDateTimeEdit.calendar?4() -> QCalendar -QtWidgets.QDateTimeEdit.setCalendar?4(QCalendar) -QtWidgets.QDateTimeEdit.timeZone?4() -> QTimeZone -QtWidgets.QDateTimeEdit.setTimeZone?4(QTimeZone) -QtWidgets.QTimeEdit?1(QWidget parent=None) -QtWidgets.QTimeEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QTimeEdit?1(QTime, QWidget parent=None) -QtWidgets.QTimeEdit.__init__?1(self, QTime, QWidget parent=None) -QtWidgets.QDateEdit?1(QWidget parent=None) -QtWidgets.QDateEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QDateEdit?1(QDate, QWidget parent=None) -QtWidgets.QDateEdit.__init__?1(self, QDate, QWidget parent=None) -QtWidgets.QDial?1(QWidget parent=None) -QtWidgets.QDial.__init__?1(self, QWidget parent=None) -QtWidgets.QDial.wrapping?4() -> bool -QtWidgets.QDial.notchSize?4() -> int -QtWidgets.QDial.setNotchTarget?4(float) -QtWidgets.QDial.notchTarget?4() -> float -QtWidgets.QDial.notchesVisible?4() -> bool -QtWidgets.QDial.sizeHint?4() -> QSize -QtWidgets.QDial.minimumSizeHint?4() -> QSize -QtWidgets.QDial.setNotchesVisible?4(bool) -QtWidgets.QDial.setWrapping?4(bool) -QtWidgets.QDial.initStyleOption?4(QStyleOptionSlider) -QtWidgets.QDial.event?4(QEvent) -> bool -QtWidgets.QDial.resizeEvent?4(QResizeEvent) -QtWidgets.QDial.paintEvent?4(QPaintEvent) -QtWidgets.QDial.mousePressEvent?4(QMouseEvent) -QtWidgets.QDial.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QDial.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QDial.sliderChange?4(QAbstractSlider.SliderChange) -QtWidgets.QDialogButtonBox.StandardButton?10 -QtWidgets.QDialogButtonBox.StandardButton.NoButton?10 -QtWidgets.QDialogButtonBox.StandardButton.Ok?10 -QtWidgets.QDialogButtonBox.StandardButton.Save?10 -QtWidgets.QDialogButtonBox.StandardButton.SaveAll?10 -QtWidgets.QDialogButtonBox.StandardButton.Open?10 -QtWidgets.QDialogButtonBox.StandardButton.Yes?10 -QtWidgets.QDialogButtonBox.StandardButton.YesToAll?10 -QtWidgets.QDialogButtonBox.StandardButton.No?10 -QtWidgets.QDialogButtonBox.StandardButton.NoToAll?10 -QtWidgets.QDialogButtonBox.StandardButton.Abort?10 -QtWidgets.QDialogButtonBox.StandardButton.Retry?10 -QtWidgets.QDialogButtonBox.StandardButton.Ignore?10 -QtWidgets.QDialogButtonBox.StandardButton.Close?10 -QtWidgets.QDialogButtonBox.StandardButton.Cancel?10 -QtWidgets.QDialogButtonBox.StandardButton.Discard?10 -QtWidgets.QDialogButtonBox.StandardButton.Help?10 -QtWidgets.QDialogButtonBox.StandardButton.Apply?10 -QtWidgets.QDialogButtonBox.StandardButton.Reset?10 -QtWidgets.QDialogButtonBox.StandardButton.RestoreDefaults?10 -QtWidgets.QDialogButtonBox.ButtonRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.InvalidRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.AcceptRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.RejectRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.DestructiveRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.ActionRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.HelpRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.YesRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.NoRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.ResetRole?10 -QtWidgets.QDialogButtonBox.ButtonRole.ApplyRole?10 -QtWidgets.QDialogButtonBox.ButtonLayout?10 -QtWidgets.QDialogButtonBox.ButtonLayout.WinLayout?10 -QtWidgets.QDialogButtonBox.ButtonLayout.MacLayout?10 -QtWidgets.QDialogButtonBox.ButtonLayout.KdeLayout?10 -QtWidgets.QDialogButtonBox.ButtonLayout.GnomeLayout?10 -QtWidgets.QDialogButtonBox.ButtonLayout.AndroidLayout?10 -QtWidgets.QDialogButtonBox?1(QWidget parent=None) -QtWidgets.QDialogButtonBox.__init__?1(self, QWidget parent=None) -QtWidgets.QDialogButtonBox?1(Qt.Orientation, QWidget parent=None) -QtWidgets.QDialogButtonBox.__init__?1(self, Qt.Orientation, QWidget parent=None) -QtWidgets.QDialogButtonBox?1(unknown-type, QWidget parent=None) -QtWidgets.QDialogButtonBox.__init__?1(self, unknown-type, QWidget parent=None) -QtWidgets.QDialogButtonBox?1(unknown-type, Qt.Orientation, QWidget parent=None) -QtWidgets.QDialogButtonBox.__init__?1(self, unknown-type, Qt.Orientation, QWidget parent=None) -QtWidgets.QDialogButtonBox.setOrientation?4(Qt.Orientation) -QtWidgets.QDialogButtonBox.orientation?4() -> Qt.Orientation -QtWidgets.QDialogButtonBox.addButton?4(QAbstractButton, QDialogButtonBox.ButtonRole) -QtWidgets.QDialogButtonBox.addButton?4(QString, QDialogButtonBox.ButtonRole) -> QPushButton -QtWidgets.QDialogButtonBox.addButton?4(QDialogButtonBox.StandardButton) -> QPushButton -QtWidgets.QDialogButtonBox.removeButton?4(QAbstractButton) -QtWidgets.QDialogButtonBox.clear?4() -QtWidgets.QDialogButtonBox.buttons?4() -> unknown-type -QtWidgets.QDialogButtonBox.buttonRole?4(QAbstractButton) -> QDialogButtonBox.ButtonRole -QtWidgets.QDialogButtonBox.setStandardButtons?4(unknown-type) -QtWidgets.QDialogButtonBox.standardButtons?4() -> unknown-type -QtWidgets.QDialogButtonBox.standardButton?4(QAbstractButton) -> QDialogButtonBox.StandardButton -QtWidgets.QDialogButtonBox.button?4(QDialogButtonBox.StandardButton) -> QPushButton -QtWidgets.QDialogButtonBox.setCenterButtons?4(bool) -QtWidgets.QDialogButtonBox.centerButtons?4() -> bool -QtWidgets.QDialogButtonBox.accepted?4() -QtWidgets.QDialogButtonBox.clicked?4(QAbstractButton) -QtWidgets.QDialogButtonBox.helpRequested?4() -QtWidgets.QDialogButtonBox.rejected?4() -QtWidgets.QDialogButtonBox.changeEvent?4(QEvent) -QtWidgets.QDialogButtonBox.event?4(QEvent) -> bool -QtWidgets.QDockWidget.DockWidgetFeature?10 -QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable?10 -QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable?10 -QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable?10 -QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetVerticalTitleBar?10 -QtWidgets.QDockWidget.DockWidgetFeature.NoDockWidgetFeatures?10 -QtWidgets.QDockWidget?1(QString, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDockWidget.__init__?1(self, QString, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDockWidget?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDockWidget.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QDockWidget.widget?4() -> QWidget -QtWidgets.QDockWidget.setWidget?4(QWidget) -QtWidgets.QDockWidget.setFeatures?4(unknown-type) -QtWidgets.QDockWidget.features?4() -> unknown-type -QtWidgets.QDockWidget.setFloating?4(bool) -QtWidgets.QDockWidget.isFloating?4() -> bool -QtWidgets.QDockWidget.setAllowedAreas?4(unknown-type) -QtWidgets.QDockWidget.allowedAreas?4() -> unknown-type -QtWidgets.QDockWidget.isAreaAllowed?4(Qt.DockWidgetArea) -> bool -QtWidgets.QDockWidget.toggleViewAction?4() -> QAction -QtWidgets.QDockWidget.setTitleBarWidget?4(QWidget) -QtWidgets.QDockWidget.titleBarWidget?4() -> QWidget -QtWidgets.QDockWidget.featuresChanged?4(unknown-type) -QtWidgets.QDockWidget.topLevelChanged?4(bool) -QtWidgets.QDockWidget.allowedAreasChanged?4(unknown-type) -QtWidgets.QDockWidget.dockLocationChanged?4(Qt.DockWidgetArea) -QtWidgets.QDockWidget.visibilityChanged?4(bool) -QtWidgets.QDockWidget.initStyleOption?4(QStyleOptionDockWidget) -QtWidgets.QDockWidget.changeEvent?4(QEvent) -QtWidgets.QDockWidget.closeEvent?4(QCloseEvent) -QtWidgets.QDockWidget.paintEvent?4(QPaintEvent) -QtWidgets.QDockWidget.event?4(QEvent) -> bool -QtWidgets.QErrorMessage?1(QWidget parent=None) -QtWidgets.QErrorMessage.__init__?1(self, QWidget parent=None) -QtWidgets.QErrorMessage.qtHandler?4() -> QErrorMessage -QtWidgets.QErrorMessage.showMessage?4(QString) -QtWidgets.QErrorMessage.showMessage?4(QString, QString) -QtWidgets.QErrorMessage.changeEvent?4(QEvent) -QtWidgets.QErrorMessage.done?4(int) -QtWidgets.QFileDialog.Option?10 -QtWidgets.QFileDialog.Option.ShowDirsOnly?10 -QtWidgets.QFileDialog.Option.DontResolveSymlinks?10 -QtWidgets.QFileDialog.Option.DontConfirmOverwrite?10 -QtWidgets.QFileDialog.Option.DontUseNativeDialog?10 -QtWidgets.QFileDialog.Option.ReadOnly?10 -QtWidgets.QFileDialog.Option.HideNameFilterDetails?10 -QtWidgets.QFileDialog.Option.DontUseCustomDirectoryIcons?10 -QtWidgets.QFileDialog.DialogLabel?10 -QtWidgets.QFileDialog.DialogLabel.LookIn?10 -QtWidgets.QFileDialog.DialogLabel.FileName?10 -QtWidgets.QFileDialog.DialogLabel.FileType?10 -QtWidgets.QFileDialog.DialogLabel.Accept?10 -QtWidgets.QFileDialog.DialogLabel.Reject?10 -QtWidgets.QFileDialog.AcceptMode?10 -QtWidgets.QFileDialog.AcceptMode.AcceptOpen?10 -QtWidgets.QFileDialog.AcceptMode.AcceptSave?10 -QtWidgets.QFileDialog.FileMode?10 -QtWidgets.QFileDialog.FileMode.AnyFile?10 -QtWidgets.QFileDialog.FileMode.ExistingFile?10 -QtWidgets.QFileDialog.FileMode.Directory?10 -QtWidgets.QFileDialog.FileMode.ExistingFiles?10 -QtWidgets.QFileDialog.ViewMode?10 -QtWidgets.QFileDialog.ViewMode.Detail?10 -QtWidgets.QFileDialog.ViewMode.List?10 -QtWidgets.QFileDialog?1(QWidget, unknown-type) -QtWidgets.QFileDialog.__init__?1(self, QWidget, unknown-type) -QtWidgets.QFileDialog?1(QWidget parent=None, QString caption='', QString directory='', QString filter='') -QtWidgets.QFileDialog.__init__?1(self, QWidget parent=None, QString caption='', QString directory='', QString filter='') -QtWidgets.QFileDialog.setDirectory?4(QString) -QtWidgets.QFileDialog.setDirectory?4(QDir) -QtWidgets.QFileDialog.directory?4() -> QDir -QtWidgets.QFileDialog.selectFile?4(QString) -QtWidgets.QFileDialog.selectedFiles?4() -> QStringList -QtWidgets.QFileDialog.setViewMode?4(QFileDialog.ViewMode) -QtWidgets.QFileDialog.viewMode?4() -> QFileDialog.ViewMode -QtWidgets.QFileDialog.setFileMode?4(QFileDialog.FileMode) -QtWidgets.QFileDialog.fileMode?4() -> QFileDialog.FileMode -QtWidgets.QFileDialog.setAcceptMode?4(QFileDialog.AcceptMode) -QtWidgets.QFileDialog.acceptMode?4() -> QFileDialog.AcceptMode -QtWidgets.QFileDialog.setDefaultSuffix?4(QString) -QtWidgets.QFileDialog.defaultSuffix?4() -> QString -QtWidgets.QFileDialog.setHistory?4(QStringList) -QtWidgets.QFileDialog.history?4() -> QStringList -QtWidgets.QFileDialog.setItemDelegate?4(QAbstractItemDelegate) -QtWidgets.QFileDialog.itemDelegate?4() -> QAbstractItemDelegate -QtWidgets.QFileDialog.setIconProvider?4(QAbstractFileIconProvider) -QtWidgets.QFileDialog.iconProvider?4() -> QAbstractFileIconProvider -QtWidgets.QFileDialog.setLabelText?4(QFileDialog.DialogLabel, QString) -QtWidgets.QFileDialog.labelText?4(QFileDialog.DialogLabel) -> QString -QtWidgets.QFileDialog.currentChanged?4(QString) -QtWidgets.QFileDialog.directoryEntered?4(QString) -QtWidgets.QFileDialog.filesSelected?4(QStringList) -QtWidgets.QFileDialog.filterSelected?4(QString) -QtWidgets.QFileDialog.fileSelected?4(QString) -QtWidgets.QFileDialog.getExistingDirectory?4(QWidget parent=None, QString caption='', QString directory='', unknown-type options=QFileDialog.ShowDirsOnly) -> QString -QtWidgets.QFileDialog.getExistingDirectoryUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), unknown-type options=QFileDialog.ShowDirsOnly, QStringList supportedSchemes=[]) -> QUrl -QtWidgets.QFileDialog.getOpenFileName?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options()) -> Tuple -QtWidgets.QFileDialog.getOpenFileNames?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options()) -> Tuple -QtWidgets.QFileDialog.getSaveFileName?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options()) -> Tuple -QtWidgets.QFileDialog.done?4(int) -QtWidgets.QFileDialog.accept?4() -QtWidgets.QFileDialog.changeEvent?4(QEvent) -QtWidgets.QFileDialog.setSidebarUrls?4(unknown-type) -QtWidgets.QFileDialog.sidebarUrls?4() -> unknown-type -QtWidgets.QFileDialog.saveState?4() -> QByteArray -QtWidgets.QFileDialog.restoreState?4(QByteArray) -> bool -QtWidgets.QFileDialog.setProxyModel?4(QAbstractProxyModel) -QtWidgets.QFileDialog.proxyModel?4() -> QAbstractProxyModel -QtWidgets.QFileDialog.setNameFilter?4(QString) -QtWidgets.QFileDialog.setNameFilters?4(QStringList) -QtWidgets.QFileDialog.nameFilters?4() -> QStringList -QtWidgets.QFileDialog.selectNameFilter?4(QString) -QtWidgets.QFileDialog.selectedNameFilter?4() -> QString -QtWidgets.QFileDialog.filter?4() -> unknown-type -QtWidgets.QFileDialog.setFilter?4(unknown-type) -QtWidgets.QFileDialog.setOption?4(QFileDialog.Option, bool on=True) -QtWidgets.QFileDialog.testOption?4(QFileDialog.Option) -> bool -QtWidgets.QFileDialog.setOptions?4(unknown-type) -QtWidgets.QFileDialog.options?4() -> unknown-type -QtWidgets.QFileDialog.open?4() -QtWidgets.QFileDialog.open?4(Any) -QtWidgets.QFileDialog.setVisible?4(bool) -QtWidgets.QFileDialog.setDirectoryUrl?4(QUrl) -QtWidgets.QFileDialog.directoryUrl?4() -> QUrl -QtWidgets.QFileDialog.selectUrl?4(QUrl) -QtWidgets.QFileDialog.selectedUrls?4() -> unknown-type -QtWidgets.QFileDialog.setMimeTypeFilters?4(QStringList) -QtWidgets.QFileDialog.mimeTypeFilters?4() -> QStringList -QtWidgets.QFileDialog.selectMimeTypeFilter?4(QString) -QtWidgets.QFileDialog.urlSelected?4(QUrl) -QtWidgets.QFileDialog.urlsSelected?4(unknown-type) -QtWidgets.QFileDialog.currentUrlChanged?4(QUrl) -QtWidgets.QFileDialog.directoryUrlEntered?4(QUrl) -QtWidgets.QFileDialog.getOpenFileUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options(), QStringList supportedSchemes=[]) -> Tuple -QtWidgets.QFileDialog.getOpenFileUrls?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options(), QStringList supportedSchemes=[]) -> Tuple -QtWidgets.QFileDialog.getSaveFileUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', unknown-type options=QFileDialog.Options(), QStringList supportedSchemes=[]) -> Tuple -QtWidgets.QFileDialog.setSupportedSchemes?4(QStringList) -QtWidgets.QFileDialog.supportedSchemes?4() -> QStringList -QtWidgets.QFileDialog.selectedMimeTypeFilter?4() -> QString -QtWidgets.QFileDialog.saveFileContent?4(QByteArray, QString fileNameHint='') -QtWidgets.QFileDialog.saveFileContent?4(QByteArray, QString, QWidget parent=None) -QtWidgets.QFileIconProvider?1() -QtWidgets.QFileIconProvider.__init__?1(self) -QtWidgets.QFileIconProvider.icon?4(QAbstractFileIconProvider.IconType) -> QIcon -QtWidgets.QFileIconProvider.icon?4(QFileInfo) -> QIcon -QtWidgets.QFocusFrame?1(QWidget parent=None) -QtWidgets.QFocusFrame.__init__?1(self, QWidget parent=None) -QtWidgets.QFocusFrame.setWidget?4(QWidget) -QtWidgets.QFocusFrame.widget?4() -> QWidget -QtWidgets.QFocusFrame.initStyleOption?4(QStyleOption) -QtWidgets.QFocusFrame.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QFocusFrame.event?4(QEvent) -> bool -QtWidgets.QFocusFrame.paintEvent?4(QPaintEvent) -QtWidgets.QFontComboBox.FontFilter?10 -QtWidgets.QFontComboBox.FontFilter.AllFonts?10 -QtWidgets.QFontComboBox.FontFilter.ScalableFonts?10 -QtWidgets.QFontComboBox.FontFilter.NonScalableFonts?10 -QtWidgets.QFontComboBox.FontFilter.MonospacedFonts?10 -QtWidgets.QFontComboBox.FontFilter.ProportionalFonts?10 -QtWidgets.QFontComboBox?1(QWidget parent=None) -QtWidgets.QFontComboBox.__init__?1(self, QWidget parent=None) -QtWidgets.QFontComboBox.fontFilters?4() -> unknown-type -QtWidgets.QFontComboBox.setWritingSystem?4(QFontDatabase.WritingSystem) -QtWidgets.QFontComboBox.writingSystem?4() -> QFontDatabase.WritingSystem -QtWidgets.QFontComboBox.setFontFilters?4(unknown-type) -QtWidgets.QFontComboBox.currentFont?4() -> QFont -QtWidgets.QFontComboBox.sizeHint?4() -> QSize -QtWidgets.QFontComboBox.setCurrentFont?4(QFont) -QtWidgets.QFontComboBox.currentFontChanged?4(QFont) -QtWidgets.QFontComboBox.event?4(QEvent) -> bool -QtWidgets.QFontComboBox.setSampleTextForSystem?4(QFontDatabase.WritingSystem, QString) -QtWidgets.QFontComboBox.sampleTextForSystem?4(QFontDatabase.WritingSystem) -> QString -QtWidgets.QFontComboBox.setSampleTextForFont?4(QString, QString) -QtWidgets.QFontComboBox.sampleTextForFont?4(QString) -> QString -QtWidgets.QFontComboBox.setDisplayFont?4(QString, QFont) -QtWidgets.QFontComboBox.displayFont?4(QString) -> Any -QtWidgets.QFontDialog.FontDialogOption?10 -QtWidgets.QFontDialog.FontDialogOption.NoButtons?10 -QtWidgets.QFontDialog.FontDialogOption.DontUseNativeDialog?10 -QtWidgets.QFontDialog.FontDialogOption.ScalableFonts?10 -QtWidgets.QFontDialog.FontDialogOption.NonScalableFonts?10 -QtWidgets.QFontDialog.FontDialogOption.MonospacedFonts?10 -QtWidgets.QFontDialog.FontDialogOption.ProportionalFonts?10 -QtWidgets.QFontDialog?1(QWidget parent=None) -QtWidgets.QFontDialog.__init__?1(self, QWidget parent=None) -QtWidgets.QFontDialog?1(QFont, QWidget parent=None) -QtWidgets.QFontDialog.__init__?1(self, QFont, QWidget parent=None) -QtWidgets.QFontDialog.getFont?4(QFont, QWidget parent=None, QString caption='', unknown-type options=QFontDialog.FontDialogOptions()) -> (QFont, bool) -QtWidgets.QFontDialog.getFont?4(QWidget parent=None) -> (QFont, bool) -QtWidgets.QFontDialog.changeEvent?4(QEvent) -QtWidgets.QFontDialog.done?4(int) -QtWidgets.QFontDialog.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QFontDialog.setCurrentFont?4(QFont) -QtWidgets.QFontDialog.currentFont?4() -> QFont -QtWidgets.QFontDialog.selectedFont?4() -> QFont -QtWidgets.QFontDialog.setOption?4(QFontDialog.FontDialogOption, bool on=True) -QtWidgets.QFontDialog.testOption?4(QFontDialog.FontDialogOption) -> bool -QtWidgets.QFontDialog.setOptions?4(unknown-type) -QtWidgets.QFontDialog.options?4() -> unknown-type -QtWidgets.QFontDialog.open?4() -QtWidgets.QFontDialog.open?4(Any) -QtWidgets.QFontDialog.setVisible?4(bool) -QtWidgets.QFontDialog.currentFontChanged?4(QFont) -QtWidgets.QFontDialog.fontSelected?4(QFont) -QtWidgets.QFormLayout.ItemRole?10 -QtWidgets.QFormLayout.ItemRole.LabelRole?10 -QtWidgets.QFormLayout.ItemRole.FieldRole?10 -QtWidgets.QFormLayout.ItemRole.SpanningRole?10 -QtWidgets.QFormLayout.RowWrapPolicy?10 -QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows?10 -QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows?10 -QtWidgets.QFormLayout.RowWrapPolicy.WrapAllRows?10 -QtWidgets.QFormLayout.FieldGrowthPolicy?10 -QtWidgets.QFormLayout.FieldGrowthPolicy.FieldsStayAtSizeHint?10 -QtWidgets.QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow?10 -QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow?10 -QtWidgets.QFormLayout?1(QWidget parent=None) -QtWidgets.QFormLayout.__init__?1(self, QWidget parent=None) -QtWidgets.QFormLayout.setFieldGrowthPolicy?4(QFormLayout.FieldGrowthPolicy) -QtWidgets.QFormLayout.fieldGrowthPolicy?4() -> QFormLayout.FieldGrowthPolicy -QtWidgets.QFormLayout.setRowWrapPolicy?4(QFormLayout.RowWrapPolicy) -QtWidgets.QFormLayout.rowWrapPolicy?4() -> QFormLayout.RowWrapPolicy -QtWidgets.QFormLayout.setLabelAlignment?4(unknown-type) -QtWidgets.QFormLayout.labelAlignment?4() -> unknown-type -QtWidgets.QFormLayout.setFormAlignment?4(unknown-type) -QtWidgets.QFormLayout.formAlignment?4() -> unknown-type -QtWidgets.QFormLayout.setHorizontalSpacing?4(int) -QtWidgets.QFormLayout.horizontalSpacing?4() -> int -QtWidgets.QFormLayout.setVerticalSpacing?4(int) -QtWidgets.QFormLayout.verticalSpacing?4() -> int -QtWidgets.QFormLayout.spacing?4() -> int -QtWidgets.QFormLayout.setSpacing?4(int) -QtWidgets.QFormLayout.addRow?4(QWidget, QWidget) -QtWidgets.QFormLayout.addRow?4(QWidget, QLayout) -QtWidgets.QFormLayout.addRow?4(QString, QWidget) -QtWidgets.QFormLayout.addRow?4(QString, QLayout) -QtWidgets.QFormLayout.addRow?4(QWidget) -QtWidgets.QFormLayout.addRow?4(QLayout) -QtWidgets.QFormLayout.insertRow?4(int, QWidget, QWidget) -QtWidgets.QFormLayout.insertRow?4(int, QWidget, QLayout) -QtWidgets.QFormLayout.insertRow?4(int, QString, QWidget) -QtWidgets.QFormLayout.insertRow?4(int, QString, QLayout) -QtWidgets.QFormLayout.insertRow?4(int, QWidget) -QtWidgets.QFormLayout.insertRow?4(int, QLayout) -QtWidgets.QFormLayout.setItem?4(int, QFormLayout.ItemRole, QLayoutItem) -QtWidgets.QFormLayout.setWidget?4(int, QFormLayout.ItemRole, QWidget) -QtWidgets.QFormLayout.setLayout?4(int, QFormLayout.ItemRole, QLayout) -QtWidgets.QFormLayout.itemAt?4(int, QFormLayout.ItemRole) -> QLayoutItem -QtWidgets.QFormLayout.getItemPosition?4(int) -> (int, QFormLayout.ItemRole) -QtWidgets.QFormLayout.getWidgetPosition?4(QWidget) -> (int, QFormLayout.ItemRole) -QtWidgets.QFormLayout.getLayoutPosition?4(QLayout) -> (int, QFormLayout.ItemRole) -QtWidgets.QFormLayout.labelForField?4(QWidget) -> QWidget -QtWidgets.QFormLayout.labelForField?4(QLayout) -> QWidget -QtWidgets.QFormLayout.addItem?4(QLayoutItem) -QtWidgets.QFormLayout.itemAt?4(int) -> QLayoutItem -QtWidgets.QFormLayout.takeAt?4(int) -> QLayoutItem -QtWidgets.QFormLayout.setGeometry?4(QRect) -QtWidgets.QFormLayout.minimumSize?4() -> QSize -QtWidgets.QFormLayout.sizeHint?4() -> QSize -QtWidgets.QFormLayout.invalidate?4() -QtWidgets.QFormLayout.hasHeightForWidth?4() -> bool -QtWidgets.QFormLayout.heightForWidth?4(int) -> int -QtWidgets.QFormLayout.expandingDirections?4() -> unknown-type -QtWidgets.QFormLayout.count?4() -> int -QtWidgets.QFormLayout.rowCount?4() -> int -QtWidgets.QFormLayout.removeRow?4(int) -QtWidgets.QFormLayout.removeRow?4(QWidget) -QtWidgets.QFormLayout.removeRow?4(QLayout) -QtWidgets.QFormLayout.takeRow?4(int) -> QFormLayout.TakeRowResult -QtWidgets.QFormLayout.takeRow?4(QWidget) -> QFormLayout.TakeRowResult -QtWidgets.QFormLayout.takeRow?4(QLayout) -> QFormLayout.TakeRowResult -QtWidgets.QFormLayout.setRowVisible?4(QLayout, bool) -QtWidgets.QFormLayout.setRowVisible?4(QWidget, bool) -QtWidgets.QFormLayout.setRowVisible?4(int, bool) -QtWidgets.QFormLayout.isRowVisible?4(QLayout) -> bool -QtWidgets.QFormLayout.isRowVisible?4(QWidget) -> bool -QtWidgets.QFormLayout.isRowVisible?4(int) -> bool -QtWidgets.QFormLayout.TakeRowResult.fieldItem?7 -QtWidgets.QFormLayout.TakeRowResult.labelItem?7 -QtWidgets.QFormLayout.TakeRowResult?1() -QtWidgets.QFormLayout.TakeRowResult.__init__?1(self) -QtWidgets.QFormLayout.TakeRowResult?1(QFormLayout.TakeRowResult) -QtWidgets.QFormLayout.TakeRowResult.__init__?1(self, QFormLayout.TakeRowResult) -QtWidgets.QGesture.GestureCancelPolicy?10 -QtWidgets.QGesture.GestureCancelPolicy.CancelNone?10 -QtWidgets.QGesture.GestureCancelPolicy.CancelAllInContext?10 -QtWidgets.QGesture?1(QObject parent=None) -QtWidgets.QGesture.__init__?1(self, QObject parent=None) -QtWidgets.QGesture.gestureType?4() -> Qt.GestureType -QtWidgets.QGesture.state?4() -> Qt.GestureState -QtWidgets.QGesture.hotSpot?4() -> QPointF -QtWidgets.QGesture.setHotSpot?4(QPointF) -QtWidgets.QGesture.hasHotSpot?4() -> bool -QtWidgets.QGesture.unsetHotSpot?4() -QtWidgets.QGesture.setGestureCancelPolicy?4(QGesture.GestureCancelPolicy) -QtWidgets.QGesture.gestureCancelPolicy?4() -> QGesture.GestureCancelPolicy -QtWidgets.QPanGesture?1(QObject parent=None) -QtWidgets.QPanGesture.__init__?1(self, QObject parent=None) -QtWidgets.QPanGesture.lastOffset?4() -> QPointF -QtWidgets.QPanGesture.offset?4() -> QPointF -QtWidgets.QPanGesture.delta?4() -> QPointF -QtWidgets.QPanGesture.acceleration?4() -> float -QtWidgets.QPanGesture.setLastOffset?4(QPointF) -QtWidgets.QPanGesture.setOffset?4(QPointF) -QtWidgets.QPanGesture.setAcceleration?4(float) -QtWidgets.QPinchGesture.ChangeFlag?10 -QtWidgets.QPinchGesture.ChangeFlag.ScaleFactorChanged?10 -QtWidgets.QPinchGesture.ChangeFlag.RotationAngleChanged?10 -QtWidgets.QPinchGesture.ChangeFlag.CenterPointChanged?10 -QtWidgets.QPinchGesture?1(QObject parent=None) -QtWidgets.QPinchGesture.__init__?1(self, QObject parent=None) -QtWidgets.QPinchGesture.totalChangeFlags?4() -> unknown-type -QtWidgets.QPinchGesture.setTotalChangeFlags?4(unknown-type) -QtWidgets.QPinchGesture.changeFlags?4() -> unknown-type -QtWidgets.QPinchGesture.setChangeFlags?4(unknown-type) -QtWidgets.QPinchGesture.startCenterPoint?4() -> QPointF -QtWidgets.QPinchGesture.lastCenterPoint?4() -> QPointF -QtWidgets.QPinchGesture.centerPoint?4() -> QPointF -QtWidgets.QPinchGesture.setStartCenterPoint?4(QPointF) -QtWidgets.QPinchGesture.setLastCenterPoint?4(QPointF) -QtWidgets.QPinchGesture.setCenterPoint?4(QPointF) -QtWidgets.QPinchGesture.totalScaleFactor?4() -> float -QtWidgets.QPinchGesture.lastScaleFactor?4() -> float -QtWidgets.QPinchGesture.scaleFactor?4() -> float -QtWidgets.QPinchGesture.setTotalScaleFactor?4(float) -QtWidgets.QPinchGesture.setLastScaleFactor?4(float) -QtWidgets.QPinchGesture.setScaleFactor?4(float) -QtWidgets.QPinchGesture.totalRotationAngle?4() -> float -QtWidgets.QPinchGesture.lastRotationAngle?4() -> float -QtWidgets.QPinchGesture.rotationAngle?4() -> float -QtWidgets.QPinchGesture.setTotalRotationAngle?4(float) -QtWidgets.QPinchGesture.setLastRotationAngle?4(float) -QtWidgets.QPinchGesture.setRotationAngle?4(float) -QtWidgets.QSwipeGesture.SwipeDirection?10 -QtWidgets.QSwipeGesture.SwipeDirection.NoDirection?10 -QtWidgets.QSwipeGesture.SwipeDirection.Left?10 -QtWidgets.QSwipeGesture.SwipeDirection.Right?10 -QtWidgets.QSwipeGesture.SwipeDirection.Up?10 -QtWidgets.QSwipeGesture.SwipeDirection.Down?10 -QtWidgets.QSwipeGesture?1(QObject parent=None) -QtWidgets.QSwipeGesture.__init__?1(self, QObject parent=None) -QtWidgets.QSwipeGesture.horizontalDirection?4() -> QSwipeGesture.SwipeDirection -QtWidgets.QSwipeGesture.verticalDirection?4() -> QSwipeGesture.SwipeDirection -QtWidgets.QSwipeGesture.swipeAngle?4() -> float -QtWidgets.QSwipeGesture.setSwipeAngle?4(float) -QtWidgets.QTapGesture?1(QObject parent=None) -QtWidgets.QTapGesture.__init__?1(self, QObject parent=None) -QtWidgets.QTapGesture.position?4() -> QPointF -QtWidgets.QTapGesture.setPosition?4(QPointF) -QtWidgets.QTapAndHoldGesture?1(QObject parent=None) -QtWidgets.QTapAndHoldGesture.__init__?1(self, QObject parent=None) -QtWidgets.QTapAndHoldGesture.position?4() -> QPointF -QtWidgets.QTapAndHoldGesture.setPosition?4(QPointF) -QtWidgets.QTapAndHoldGesture.setTimeout?4(int) -QtWidgets.QTapAndHoldGesture.timeout?4() -> int -QtWidgets.QGestureEvent?1(unknown-type) -QtWidgets.QGestureEvent.__init__?1(self, unknown-type) -QtWidgets.QGestureEvent?1(QGestureEvent) -QtWidgets.QGestureEvent.__init__?1(self, QGestureEvent) -QtWidgets.QGestureEvent.gestures?4() -> unknown-type -QtWidgets.QGestureEvent.gesture?4(Qt.GestureType) -> QGesture -QtWidgets.QGestureEvent.activeGestures?4() -> unknown-type -QtWidgets.QGestureEvent.canceledGestures?4() -> unknown-type -QtWidgets.QGestureEvent.setAccepted?4(bool) -QtWidgets.QGestureEvent.isAccepted?4() -> bool -QtWidgets.QGestureEvent.accept?4() -QtWidgets.QGestureEvent.ignore?4() -QtWidgets.QGestureEvent.setAccepted?4(QGesture, bool) -QtWidgets.QGestureEvent.accept?4(QGesture) -QtWidgets.QGestureEvent.ignore?4(QGesture) -QtWidgets.QGestureEvent.isAccepted?4(QGesture) -> bool -QtWidgets.QGestureEvent.setAccepted?4(Qt.GestureType, bool) -QtWidgets.QGestureEvent.accept?4(Qt.GestureType) -QtWidgets.QGestureEvent.ignore?4(Qt.GestureType) -QtWidgets.QGestureEvent.isAccepted?4(Qt.GestureType) -> bool -QtWidgets.QGestureEvent.widget?4() -> QWidget -QtWidgets.QGestureEvent.mapToGraphicsScene?4(QPointF) -> QPointF -QtWidgets.QGestureRecognizer.ResultFlag?10 -QtWidgets.QGestureRecognizer.ResultFlag.Ignore?10 -QtWidgets.QGestureRecognizer.ResultFlag.MayBeGesture?10 -QtWidgets.QGestureRecognizer.ResultFlag.TriggerGesture?10 -QtWidgets.QGestureRecognizer.ResultFlag.FinishGesture?10 -QtWidgets.QGestureRecognizer.ResultFlag.CancelGesture?10 -QtWidgets.QGestureRecognizer.ResultFlag.ConsumeEventHint?10 -QtWidgets.QGestureRecognizer?1() -QtWidgets.QGestureRecognizer.__init__?1(self) -QtWidgets.QGestureRecognizer?1(QGestureRecognizer) -QtWidgets.QGestureRecognizer.__init__?1(self, QGestureRecognizer) -QtWidgets.QGestureRecognizer.create?4(QObject) -> QGesture -QtWidgets.QGestureRecognizer.recognize?4(QGesture, QObject, QEvent) -> unknown-type -QtWidgets.QGestureRecognizer.reset?4(QGesture) -QtWidgets.QGestureRecognizer.registerRecognizer?4(QGestureRecognizer) -> Qt.GestureType -QtWidgets.QGestureRecognizer.unregisterRecognizer?4(Qt.GestureType) -QtWidgets.QGraphicsAnchor.setSpacing?4(float) -QtWidgets.QGraphicsAnchor.unsetSpacing?4() -QtWidgets.QGraphicsAnchor.spacing?4() -> float -QtWidgets.QGraphicsAnchor.setSizePolicy?4(QSizePolicy.Policy) -QtWidgets.QGraphicsAnchor.sizePolicy?4() -> QSizePolicy.Policy -QtWidgets.QGraphicsLayoutItem?1(QGraphicsLayoutItem parent=None, bool isLayout=False) -QtWidgets.QGraphicsLayoutItem.__init__?1(self, QGraphicsLayoutItem parent=None, bool isLayout=False) -QtWidgets.QGraphicsLayoutItem.setSizePolicy?4(QSizePolicy) -QtWidgets.QGraphicsLayoutItem.setSizePolicy?4(QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType controlType=QSizePolicy.DefaultType) -QtWidgets.QGraphicsLayoutItem.sizePolicy?4() -> QSizePolicy -QtWidgets.QGraphicsLayoutItem.setMinimumSize?4(QSizeF) -QtWidgets.QGraphicsLayoutItem.minimumSize?4() -> QSizeF -QtWidgets.QGraphicsLayoutItem.setMinimumWidth?4(float) -QtWidgets.QGraphicsLayoutItem.setMinimumHeight?4(float) -QtWidgets.QGraphicsLayoutItem.setPreferredSize?4(QSizeF) -QtWidgets.QGraphicsLayoutItem.preferredSize?4() -> QSizeF -QtWidgets.QGraphicsLayoutItem.setPreferredWidth?4(float) -QtWidgets.QGraphicsLayoutItem.setPreferredHeight?4(float) -QtWidgets.QGraphicsLayoutItem.setMaximumSize?4(QSizeF) -QtWidgets.QGraphicsLayoutItem.maximumSize?4() -> QSizeF -QtWidgets.QGraphicsLayoutItem.setMaximumWidth?4(float) -QtWidgets.QGraphicsLayoutItem.setMaximumHeight?4(float) -QtWidgets.QGraphicsLayoutItem.setGeometry?4(QRectF) -QtWidgets.QGraphicsLayoutItem.geometry?4() -> QRectF -QtWidgets.QGraphicsLayoutItem.getContentsMargins?4() -> (float, float, float, float) -QtWidgets.QGraphicsLayoutItem.contentsRect?4() -> QRectF -QtWidgets.QGraphicsLayoutItem.effectiveSizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsLayoutItem.updateGeometry?4() -QtWidgets.QGraphicsLayoutItem.parentLayoutItem?4() -> QGraphicsLayoutItem -QtWidgets.QGraphicsLayoutItem.setParentLayoutItem?4(QGraphicsLayoutItem) -QtWidgets.QGraphicsLayoutItem.isLayout?4() -> bool -QtWidgets.QGraphicsLayoutItem.setMinimumSize?4(float, float) -QtWidgets.QGraphicsLayoutItem.setPreferredSize?4(float, float) -QtWidgets.QGraphicsLayoutItem.setMaximumSize?4(float, float) -QtWidgets.QGraphicsLayoutItem.minimumWidth?4() -> float -QtWidgets.QGraphicsLayoutItem.minimumHeight?4() -> float -QtWidgets.QGraphicsLayoutItem.preferredWidth?4() -> float -QtWidgets.QGraphicsLayoutItem.preferredHeight?4() -> float -QtWidgets.QGraphicsLayoutItem.maximumWidth?4() -> float -QtWidgets.QGraphicsLayoutItem.maximumHeight?4() -> float -QtWidgets.QGraphicsLayoutItem.graphicsItem?4() -> QGraphicsItem -QtWidgets.QGraphicsLayoutItem.ownedByLayout?4() -> bool -QtWidgets.QGraphicsLayoutItem.isEmpty?4() -> bool -QtWidgets.QGraphicsLayoutItem.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsLayoutItem.setGraphicsItem?4(QGraphicsItem) -QtWidgets.QGraphicsLayoutItem.setOwnedByLayout?4(bool) -QtWidgets.QGraphicsLayout?1(QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLayout.__init__?1(self, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLayout.setContentsMargins?4(float, float, float, float) -QtWidgets.QGraphicsLayout.getContentsMargins?4() -> (float, float, float, float) -QtWidgets.QGraphicsLayout.activate?4() -QtWidgets.QGraphicsLayout.isActivated?4() -> bool -QtWidgets.QGraphicsLayout.invalidate?4() -QtWidgets.QGraphicsLayout.widgetEvent?4(QEvent) -QtWidgets.QGraphicsLayout.count?4() -> int -QtWidgets.QGraphicsLayout.itemAt?4(int) -> QGraphicsLayoutItem -QtWidgets.QGraphicsLayout.removeAt?4(int) -QtWidgets.QGraphicsLayout.updateGeometry?4() -QtWidgets.QGraphicsLayout.addChildLayoutItem?4(QGraphicsLayoutItem) -QtWidgets.QGraphicsAnchorLayout?1(QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsAnchorLayout.__init__?1(self, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsAnchorLayout.addAnchor?4(QGraphicsLayoutItem, Qt.AnchorPoint, QGraphicsLayoutItem, Qt.AnchorPoint) -> QGraphicsAnchor -QtWidgets.QGraphicsAnchorLayout.anchor?4(QGraphicsLayoutItem, Qt.AnchorPoint, QGraphicsLayoutItem, Qt.AnchorPoint) -> QGraphicsAnchor -QtWidgets.QGraphicsAnchorLayout.addCornerAnchors?4(QGraphicsLayoutItem, Qt.Corner, QGraphicsLayoutItem, Qt.Corner) -QtWidgets.QGraphicsAnchorLayout.addAnchors?4(QGraphicsLayoutItem, QGraphicsLayoutItem, unknown-type orientations=Qt.Horizontal|Qt.Vertical) -QtWidgets.QGraphicsAnchorLayout.setHorizontalSpacing?4(float) -QtWidgets.QGraphicsAnchorLayout.setVerticalSpacing?4(float) -QtWidgets.QGraphicsAnchorLayout.setSpacing?4(float) -QtWidgets.QGraphicsAnchorLayout.horizontalSpacing?4() -> float -QtWidgets.QGraphicsAnchorLayout.verticalSpacing?4() -> float -QtWidgets.QGraphicsAnchorLayout.removeAt?4(int) -QtWidgets.QGraphicsAnchorLayout.setGeometry?4(QRectF) -QtWidgets.QGraphicsAnchorLayout.count?4() -> int -QtWidgets.QGraphicsAnchorLayout.itemAt?4(int) -> QGraphicsLayoutItem -QtWidgets.QGraphicsAnchorLayout.invalidate?4() -QtWidgets.QGraphicsAnchorLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsEffect.PixmapPadMode?10 -QtWidgets.QGraphicsEffect.PixmapPadMode.NoPad?10 -QtWidgets.QGraphicsEffect.PixmapPadMode.PadToTransparentBorder?10 -QtWidgets.QGraphicsEffect.PixmapPadMode.PadToEffectiveBoundingRect?10 -QtWidgets.QGraphicsEffect.ChangeFlag?10 -QtWidgets.QGraphicsEffect.ChangeFlag.SourceAttached?10 -QtWidgets.QGraphicsEffect.ChangeFlag.SourceDetached?10 -QtWidgets.QGraphicsEffect.ChangeFlag.SourceBoundingRectChanged?10 -QtWidgets.QGraphicsEffect.ChangeFlag.SourceInvalidated?10 -QtWidgets.QGraphicsEffect?1(QObject parent=None) -QtWidgets.QGraphicsEffect.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsEffect.boundingRectFor?4(QRectF) -> QRectF -QtWidgets.QGraphicsEffect.boundingRect?4() -> QRectF -QtWidgets.QGraphicsEffect.isEnabled?4() -> bool -QtWidgets.QGraphicsEffect.setEnabled?4(bool) -QtWidgets.QGraphicsEffect.update?4() -QtWidgets.QGraphicsEffect.enabledChanged?4(bool) -QtWidgets.QGraphicsEffect.draw?4(QPainter) -QtWidgets.QGraphicsEffect.sourceChanged?4(unknown-type) -QtWidgets.QGraphicsEffect.updateBoundingRect?4() -QtWidgets.QGraphicsEffect.sourceIsPixmap?4() -> bool -QtWidgets.QGraphicsEffect.sourceBoundingRect?4(Qt.CoordinateSystem system=Qt.LogicalCoordinates) -> QRectF -QtWidgets.QGraphicsEffect.drawSource?4(QPainter) -QtWidgets.QGraphicsEffect.sourcePixmap?4(Qt.CoordinateSystem system=Qt.LogicalCoordinates, QGraphicsEffect.PixmapPadMode mode=QGraphicsEffect.PadToEffectiveBoundingRect) -> (QPixmap, QPoint) -QtWidgets.QGraphicsColorizeEffect?1(QObject parent=None) -QtWidgets.QGraphicsColorizeEffect.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsColorizeEffect.color?4() -> QColor -QtWidgets.QGraphicsColorizeEffect.strength?4() -> float -QtWidgets.QGraphicsColorizeEffect.setColor?4(QColor) -QtWidgets.QGraphicsColorizeEffect.setStrength?4(float) -QtWidgets.QGraphicsColorizeEffect.colorChanged?4(QColor) -QtWidgets.QGraphicsColorizeEffect.strengthChanged?4(float) -QtWidgets.QGraphicsColorizeEffect.draw?4(QPainter) -QtWidgets.QGraphicsBlurEffect.BlurHint?10 -QtWidgets.QGraphicsBlurEffect.BlurHint.PerformanceHint?10 -QtWidgets.QGraphicsBlurEffect.BlurHint.QualityHint?10 -QtWidgets.QGraphicsBlurEffect.BlurHint.AnimationHint?10 -QtWidgets.QGraphicsBlurEffect?1(QObject parent=None) -QtWidgets.QGraphicsBlurEffect.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsBlurEffect.boundingRectFor?4(QRectF) -> QRectF -QtWidgets.QGraphicsBlurEffect.blurRadius?4() -> float -QtWidgets.QGraphicsBlurEffect.blurHints?4() -> unknown-type -QtWidgets.QGraphicsBlurEffect.setBlurRadius?4(float) -QtWidgets.QGraphicsBlurEffect.setBlurHints?4(unknown-type) -QtWidgets.QGraphicsBlurEffect.blurRadiusChanged?4(float) -QtWidgets.QGraphicsBlurEffect.blurHintsChanged?4(unknown-type) -QtWidgets.QGraphicsBlurEffect.draw?4(QPainter) -QtWidgets.QGraphicsDropShadowEffect?1(QObject parent=None) -QtWidgets.QGraphicsDropShadowEffect.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsDropShadowEffect.boundingRectFor?4(QRectF) -> QRectF -QtWidgets.QGraphicsDropShadowEffect.offset?4() -> QPointF -QtWidgets.QGraphicsDropShadowEffect.xOffset?4() -> float -QtWidgets.QGraphicsDropShadowEffect.yOffset?4() -> float -QtWidgets.QGraphicsDropShadowEffect.blurRadius?4() -> float -QtWidgets.QGraphicsDropShadowEffect.color?4() -> QColor -QtWidgets.QGraphicsDropShadowEffect.setOffset?4(QPointF) -QtWidgets.QGraphicsDropShadowEffect.setOffset?4(float, float) -QtWidgets.QGraphicsDropShadowEffect.setOffset?4(float) -QtWidgets.QGraphicsDropShadowEffect.setXOffset?4(float) -QtWidgets.QGraphicsDropShadowEffect.setYOffset?4(float) -QtWidgets.QGraphicsDropShadowEffect.setBlurRadius?4(float) -QtWidgets.QGraphicsDropShadowEffect.setColor?4(QColor) -QtWidgets.QGraphicsDropShadowEffect.offsetChanged?4(QPointF) -QtWidgets.QGraphicsDropShadowEffect.blurRadiusChanged?4(float) -QtWidgets.QGraphicsDropShadowEffect.colorChanged?4(QColor) -QtWidgets.QGraphicsDropShadowEffect.draw?4(QPainter) -QtWidgets.QGraphicsOpacityEffect?1(QObject parent=None) -QtWidgets.QGraphicsOpacityEffect.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsOpacityEffect.opacity?4() -> float -QtWidgets.QGraphicsOpacityEffect.opacityMask?4() -> QBrush -QtWidgets.QGraphicsOpacityEffect.setOpacity?4(float) -QtWidgets.QGraphicsOpacityEffect.setOpacityMask?4(QBrush) -QtWidgets.QGraphicsOpacityEffect.opacityChanged?4(float) -QtWidgets.QGraphicsOpacityEffect.opacityMaskChanged?4(QBrush) -QtWidgets.QGraphicsOpacityEffect.draw?4(QPainter) -QtWidgets.QGraphicsGridLayout?1(QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsGridLayout.__init__?1(self, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsGridLayout.addItem?4(QGraphicsLayoutItem, int, int, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGraphicsGridLayout.addItem?4(QGraphicsLayoutItem, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGraphicsGridLayout.setHorizontalSpacing?4(float) -QtWidgets.QGraphicsGridLayout.horizontalSpacing?4() -> float -QtWidgets.QGraphicsGridLayout.setVerticalSpacing?4(float) -QtWidgets.QGraphicsGridLayout.verticalSpacing?4() -> float -QtWidgets.QGraphicsGridLayout.setSpacing?4(float) -QtWidgets.QGraphicsGridLayout.setRowSpacing?4(int, float) -QtWidgets.QGraphicsGridLayout.rowSpacing?4(int) -> float -QtWidgets.QGraphicsGridLayout.setColumnSpacing?4(int, float) -QtWidgets.QGraphicsGridLayout.columnSpacing?4(int) -> float -QtWidgets.QGraphicsGridLayout.setRowStretchFactor?4(int, int) -QtWidgets.QGraphicsGridLayout.rowStretchFactor?4(int) -> int -QtWidgets.QGraphicsGridLayout.setColumnStretchFactor?4(int, int) -QtWidgets.QGraphicsGridLayout.columnStretchFactor?4(int) -> int -QtWidgets.QGraphicsGridLayout.setRowMinimumHeight?4(int, float) -QtWidgets.QGraphicsGridLayout.rowMinimumHeight?4(int) -> float -QtWidgets.QGraphicsGridLayout.setRowPreferredHeight?4(int, float) -QtWidgets.QGraphicsGridLayout.rowPreferredHeight?4(int) -> float -QtWidgets.QGraphicsGridLayout.setRowMaximumHeight?4(int, float) -QtWidgets.QGraphicsGridLayout.rowMaximumHeight?4(int) -> float -QtWidgets.QGraphicsGridLayout.setRowFixedHeight?4(int, float) -QtWidgets.QGraphicsGridLayout.setColumnMinimumWidth?4(int, float) -QtWidgets.QGraphicsGridLayout.columnMinimumWidth?4(int) -> float -QtWidgets.QGraphicsGridLayout.setColumnPreferredWidth?4(int, float) -QtWidgets.QGraphicsGridLayout.columnPreferredWidth?4(int) -> float -QtWidgets.QGraphicsGridLayout.setColumnMaximumWidth?4(int, float) -QtWidgets.QGraphicsGridLayout.columnMaximumWidth?4(int) -> float -QtWidgets.QGraphicsGridLayout.setColumnFixedWidth?4(int, float) -QtWidgets.QGraphicsGridLayout.setRowAlignment?4(int, unknown-type) -QtWidgets.QGraphicsGridLayout.rowAlignment?4(int) -> unknown-type -QtWidgets.QGraphicsGridLayout.setColumnAlignment?4(int, unknown-type) -QtWidgets.QGraphicsGridLayout.columnAlignment?4(int) -> unknown-type -QtWidgets.QGraphicsGridLayout.setAlignment?4(QGraphicsLayoutItem, unknown-type) -QtWidgets.QGraphicsGridLayout.alignment?4(QGraphicsLayoutItem) -> unknown-type -QtWidgets.QGraphicsGridLayout.rowCount?4() -> int -QtWidgets.QGraphicsGridLayout.columnCount?4() -> int -QtWidgets.QGraphicsGridLayout.itemAt?4(int, int) -> QGraphicsLayoutItem -QtWidgets.QGraphicsGridLayout.count?4() -> int -QtWidgets.QGraphicsGridLayout.itemAt?4(int) -> QGraphicsLayoutItem -QtWidgets.QGraphicsGridLayout.removeAt?4(int) -QtWidgets.QGraphicsGridLayout.invalidate?4() -QtWidgets.QGraphicsGridLayout.setGeometry?4(QRectF) -QtWidgets.QGraphicsGridLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsGridLayout.removeItem?4(QGraphicsLayoutItem) -QtWidgets.QGraphicsItem.PanelModality?10 -QtWidgets.QGraphicsItem.PanelModality.NonModal?10 -QtWidgets.QGraphicsItem.PanelModality.PanelModal?10 -QtWidgets.QGraphicsItem.PanelModality.SceneModal?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsFocusable?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemClipsToShape?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemClipsChildrenToShape?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIgnoresTransformations?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIgnoresParentOpacity?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemDoesntPropagateOpacityToChildren?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemStacksBehindParent?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemUsesExtendedStyleOption?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemHasNoContents?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsGeometryChanges?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemAcceptsInputMethod?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemNegativeZStacksBehindParent?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsPanel?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsScenePositionChanges?10 -QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemContainsChildrenInShape?10 -QtWidgets.QGraphicsItem.GraphicsItemChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemVisibleChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemEnabledChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemParentChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemChildAddedChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemChildRemovedChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSceneChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemVisibleHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemEnabledHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemParentHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSceneHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemCursorChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemCursorHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemToolTipChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemToolTipHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemFlagsChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemFlagsHaveChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemZValueChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemZValueHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemOpacityChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemOpacityHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScenePositionHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemRotationChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemRotationHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScaleChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScaleHasChanged?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformOriginPointChange?10 -QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformOriginPointHasChanged?10 -QtWidgets.QGraphicsItem.CacheMode?10 -QtWidgets.QGraphicsItem.CacheMode.NoCache?10 -QtWidgets.QGraphicsItem.CacheMode.ItemCoordinateCache?10 -QtWidgets.QGraphicsItem.CacheMode.DeviceCoordinateCache?10 -QtWidgets.QGraphicsItem.Type?7 -QtWidgets.QGraphicsItem.UserType?7 -QtWidgets.QGraphicsItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsItem.scene?4() -> QGraphicsScene -QtWidgets.QGraphicsItem.parentItem?4() -> QGraphicsItem -QtWidgets.QGraphicsItem.topLevelItem?4() -> QGraphicsItem -QtWidgets.QGraphicsItem.setParentItem?4(QGraphicsItem) -QtWidgets.QGraphicsItem.group?4() -> QGraphicsItemGroup -QtWidgets.QGraphicsItem.setGroup?4(QGraphicsItemGroup) -QtWidgets.QGraphicsItem.flags?4() -> unknown-type -QtWidgets.QGraphicsItem.setFlag?4(QGraphicsItem.GraphicsItemFlag, bool enabled=True) -QtWidgets.QGraphicsItem.setFlags?4(unknown-type) -QtWidgets.QGraphicsItem.toolTip?4() -> QString -QtWidgets.QGraphicsItem.setToolTip?4(QString) -QtWidgets.QGraphicsItem.cursor?4() -> QCursor -QtWidgets.QGraphicsItem.setCursor?4(QCursor) -QtWidgets.QGraphicsItem.hasCursor?4() -> bool -QtWidgets.QGraphicsItem.unsetCursor?4() -QtWidgets.QGraphicsItem.isVisible?4() -> bool -QtWidgets.QGraphicsItem.setVisible?4(bool) -QtWidgets.QGraphicsItem.hide?4() -QtWidgets.QGraphicsItem.show?4() -QtWidgets.QGraphicsItem.isEnabled?4() -> bool -QtWidgets.QGraphicsItem.setEnabled?4(bool) -QtWidgets.QGraphicsItem.isSelected?4() -> bool -QtWidgets.QGraphicsItem.setSelected?4(bool) -QtWidgets.QGraphicsItem.acceptDrops?4() -> bool -QtWidgets.QGraphicsItem.setAcceptDrops?4(bool) -QtWidgets.QGraphicsItem.acceptedMouseButtons?4() -> unknown-type -QtWidgets.QGraphicsItem.setAcceptedMouseButtons?4(unknown-type) -QtWidgets.QGraphicsItem.hasFocus?4() -> bool -QtWidgets.QGraphicsItem.setFocus?4(Qt.FocusReason focusReason=Qt.OtherFocusReason) -QtWidgets.QGraphicsItem.clearFocus?4() -QtWidgets.QGraphicsItem.pos?4() -> QPointF -QtWidgets.QGraphicsItem.x?4() -> float -QtWidgets.QGraphicsItem.y?4() -> float -QtWidgets.QGraphicsItem.scenePos?4() -> QPointF -QtWidgets.QGraphicsItem.setPos?4(QPointF) -QtWidgets.QGraphicsItem.moveBy?4(float, float) -QtWidgets.QGraphicsItem.ensureVisible?4(QRectF rect=QRectF(), int xMargin=50, int yMargin=50) -QtWidgets.QGraphicsItem.advance?4(int) -QtWidgets.QGraphicsItem.zValue?4() -> float -QtWidgets.QGraphicsItem.setZValue?4(float) -QtWidgets.QGraphicsItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsItem.childrenBoundingRect?4() -> QRectF -QtWidgets.QGraphicsItem.sceneBoundingRect?4() -> QRectF -QtWidgets.QGraphicsItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsItem.collidesWithItem?4(QGraphicsItem, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> bool -QtWidgets.QGraphicsItem.collidesWithPath?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> bool -QtWidgets.QGraphicsItem.collidingItems?4(Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsItem.update?4(QRectF rect=QRectF()) -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapToParent?4(QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapToScene?4(QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToParent?4(QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToScene?4(QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToParent?4(QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToScene?4(QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.mapToParent?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.mapToScene?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapFromParent?4(QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapFromScene?4(QPointF) -> QPointF -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromParent?4(QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromScene?4(QRectF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromParent?4(QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromScene?4(QPolygonF) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.mapFromParent?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.mapFromScene?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsItem.isAncestorOf?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsItem.data?4(int) -> QVariant -QtWidgets.QGraphicsItem.setData?4(int, QVariant) -QtWidgets.QGraphicsItem.type?4() -> int -QtWidgets.QGraphicsItem.installSceneEventFilter?4(QGraphicsItem) -QtWidgets.QGraphicsItem.removeSceneEventFilter?4(QGraphicsItem) -QtWidgets.QGraphicsItem.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) -QtWidgets.QGraphicsItem.dragEnterEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsItem.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsItem.dragMoveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsItem.dropEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsItem.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsItem.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsItem.hoverEnterEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsItem.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsItem.hoverMoveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsItem.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QGraphicsItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QGraphicsItem.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant -QtWidgets.QGraphicsItem.keyPressEvent?4(QKeyEvent) -QtWidgets.QGraphicsItem.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QGraphicsItem.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsItem.mouseMoveEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsItem.mousePressEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsItem.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsItem.prepareGeometryChange?4() -QtWidgets.QGraphicsItem.sceneEvent?4(QEvent) -> bool -QtWidgets.QGraphicsItem.sceneEventFilter?4(QGraphicsItem, QEvent) -> bool -QtWidgets.QGraphicsItem.wheelEvent?4(QGraphicsSceneWheelEvent) -QtWidgets.QGraphicsItem.setPos?4(float, float) -QtWidgets.QGraphicsItem.ensureVisible?4(float, float, float, float, int xMargin=50, int yMargin=50) -QtWidgets.QGraphicsItem.update?4(float, float, float, float) -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, float, float) -> QPointF -QtWidgets.QGraphicsItem.mapToParent?4(float, float) -> QPointF -QtWidgets.QGraphicsItem.mapToScene?4(float, float) -> QPointF -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, float, float) -> QPointF -QtWidgets.QGraphicsItem.mapFromParent?4(float, float) -> QPointF -QtWidgets.QGraphicsItem.mapFromScene?4(float, float) -> QPointF -QtWidgets.QGraphicsItem.transform?4() -> QTransform -QtWidgets.QGraphicsItem.sceneTransform?4() -> QTransform -QtWidgets.QGraphicsItem.deviceTransform?4(QTransform) -> QTransform -QtWidgets.QGraphicsItem.setTransform?4(QTransform, bool combine=False) -QtWidgets.QGraphicsItem.resetTransform?4() -QtWidgets.QGraphicsItem.isObscured?4(QRectF rect=QRectF()) -> bool -QtWidgets.QGraphicsItem.isObscured?4(float, float, float, float) -> bool -QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.mapToParent?4(float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.mapToScene?4(float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromParent?4(float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.mapFromScene?4(float, float, float, float) -> QPolygonF -QtWidgets.QGraphicsItem.parentWidget?4() -> QGraphicsWidget -QtWidgets.QGraphicsItem.topLevelWidget?4() -> QGraphicsWidget -QtWidgets.QGraphicsItem.window?4() -> QGraphicsWidget -QtWidgets.QGraphicsItem.childItems?4() -> unknown-type -QtWidgets.QGraphicsItem.isWidget?4() -> bool -QtWidgets.QGraphicsItem.isWindow?4() -> bool -QtWidgets.QGraphicsItem.cacheMode?4() -> QGraphicsItem.CacheMode -QtWidgets.QGraphicsItem.setCacheMode?4(QGraphicsItem.CacheMode, QSize logicalCacheSize=QSize()) -QtWidgets.QGraphicsItem.isVisibleTo?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsItem.acceptHoverEvents?4() -> bool -QtWidgets.QGraphicsItem.setAcceptHoverEvents?4(bool) -QtWidgets.QGraphicsItem.grabMouse?4() -QtWidgets.QGraphicsItem.ungrabMouse?4() -QtWidgets.QGraphicsItem.grabKeyboard?4() -QtWidgets.QGraphicsItem.ungrabKeyboard?4() -QtWidgets.QGraphicsItem.boundingRegion?4(QTransform) -> QRegion -QtWidgets.QGraphicsItem.boundingRegionGranularity?4() -> float -QtWidgets.QGraphicsItem.setBoundingRegionGranularity?4(float) -QtWidgets.QGraphicsItem.scroll?4(float, float, QRectF rect=QRectF()) -QtWidgets.QGraphicsItem.commonAncestorItem?4(QGraphicsItem) -> QGraphicsItem -QtWidgets.QGraphicsItem.isUnderMouse?4() -> bool -QtWidgets.QGraphicsItem.opacity?4() -> float -QtWidgets.QGraphicsItem.effectiveOpacity?4() -> float -QtWidgets.QGraphicsItem.setOpacity?4(float) -QtWidgets.QGraphicsItem.itemTransform?4(QGraphicsItem) -> (QTransform, bool) -QtWidgets.QGraphicsItem.isClipped?4() -> bool -QtWidgets.QGraphicsItem.clipPath?4() -> QPainterPath -QtWidgets.QGraphicsItem.mapRectToItem?4(QGraphicsItem, QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectToParent?4(QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectToScene?4(QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromItem?4(QGraphicsItem, QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromParent?4(QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromScene?4(QRectF) -> QRectF -QtWidgets.QGraphicsItem.mapRectToItem?4(QGraphicsItem, float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.mapRectToParent?4(float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.mapRectToScene?4(float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromItem?4(QGraphicsItem, float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromParent?4(float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.mapRectFromScene?4(float, float, float, float) -> QRectF -QtWidgets.QGraphicsItem.parentObject?4() -> QGraphicsObject -QtWidgets.QGraphicsItem.panel?4() -> QGraphicsItem -QtWidgets.QGraphicsItem.isPanel?4() -> bool -QtWidgets.QGraphicsItem.toGraphicsObject?4() -> QGraphicsObject -QtWidgets.QGraphicsItem.panelModality?4() -> QGraphicsItem.PanelModality -QtWidgets.QGraphicsItem.setPanelModality?4(QGraphicsItem.PanelModality) -QtWidgets.QGraphicsItem.isBlockedByModalPanel?4() -> (bool, QGraphicsItem) -QtWidgets.QGraphicsItem.graphicsEffect?4() -> QGraphicsEffect -QtWidgets.QGraphicsItem.setGraphicsEffect?4(QGraphicsEffect) -QtWidgets.QGraphicsItem.acceptTouchEvents?4() -> bool -QtWidgets.QGraphicsItem.setAcceptTouchEvents?4(bool) -QtWidgets.QGraphicsItem.filtersChildEvents?4() -> bool -QtWidgets.QGraphicsItem.setFiltersChildEvents?4(bool) -QtWidgets.QGraphicsItem.isActive?4() -> bool -QtWidgets.QGraphicsItem.setActive?4(bool) -QtWidgets.QGraphicsItem.focusProxy?4() -> QGraphicsItem -QtWidgets.QGraphicsItem.setFocusProxy?4(QGraphicsItem) -QtWidgets.QGraphicsItem.focusItem?4() -> QGraphicsItem -QtWidgets.QGraphicsItem.setX?4(float) -QtWidgets.QGraphicsItem.setY?4(float) -QtWidgets.QGraphicsItem.setRotation?4(float) -QtWidgets.QGraphicsItem.rotation?4() -> float -QtWidgets.QGraphicsItem.setScale?4(float) -QtWidgets.QGraphicsItem.scale?4() -> float -QtWidgets.QGraphicsItem.transformations?4() -> unknown-type -QtWidgets.QGraphicsItem.setTransformations?4(unknown-type) -QtWidgets.QGraphicsItem.transformOriginPoint?4() -> QPointF -QtWidgets.QGraphicsItem.setTransformOriginPoint?4(QPointF) -QtWidgets.QGraphicsItem.setTransformOriginPoint?4(float, float) -QtWidgets.QGraphicsItem.stackBefore?4(QGraphicsItem) -QtWidgets.QGraphicsItem.inputMethodHints?4() -> unknown-type -QtWidgets.QGraphicsItem.setInputMethodHints?4(unknown-type) -QtWidgets.QGraphicsItem.updateMicroFocus?4() -QtWidgets.QAbstractGraphicsShapeItem?1(QGraphicsItem parent=None) -QtWidgets.QAbstractGraphicsShapeItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QAbstractGraphicsShapeItem.pen?4() -> QPen -QtWidgets.QAbstractGraphicsShapeItem.setPen?4(QPen) -QtWidgets.QAbstractGraphicsShapeItem.brush?4() -> QBrush -QtWidgets.QAbstractGraphicsShapeItem.setBrush?4(QBrush) -QtWidgets.QAbstractGraphicsShapeItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QAbstractGraphicsShapeItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsPathItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsPathItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsPathItem?1(QPainterPath, QGraphicsItem parent=None) -QtWidgets.QGraphicsPathItem.__init__?1(self, QPainterPath, QGraphicsItem parent=None) -QtWidgets.QGraphicsPathItem.path?4() -> QPainterPath -QtWidgets.QGraphicsPathItem.setPath?4(QPainterPath) -QtWidgets.QGraphicsPathItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsPathItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsPathItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsPathItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsPathItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsPathItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsPathItem.type?4() -> int -QtWidgets.QGraphicsRectItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem?1(QRectF, QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem.__init__?1(self, QRectF, QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem?1(float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsRectItem.rect?4() -> QRectF -QtWidgets.QGraphicsRectItem.setRect?4(QRectF) -QtWidgets.QGraphicsRectItem.setRect?4(float, float, float, float) -QtWidgets.QGraphicsRectItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsRectItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsRectItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsRectItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsRectItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsRectItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsRectItem.type?4() -> int -QtWidgets.QGraphicsEllipseItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem?1(QRectF, QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem.__init__?1(self, QRectF, QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem?1(float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsEllipseItem.rect?4() -> QRectF -QtWidgets.QGraphicsEllipseItem.setRect?4(QRectF) -QtWidgets.QGraphicsEllipseItem.setRect?4(float, float, float, float) -QtWidgets.QGraphicsEllipseItem.startAngle?4() -> int -QtWidgets.QGraphicsEllipseItem.setStartAngle?4(int) -QtWidgets.QGraphicsEllipseItem.spanAngle?4() -> int -QtWidgets.QGraphicsEllipseItem.setSpanAngle?4(int) -QtWidgets.QGraphicsEllipseItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsEllipseItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsEllipseItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsEllipseItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsEllipseItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsEllipseItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsEllipseItem.type?4() -> int -QtWidgets.QGraphicsPolygonItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsPolygonItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsPolygonItem?1(QPolygonF, QGraphicsItem parent=None) -QtWidgets.QGraphicsPolygonItem.__init__?1(self, QPolygonF, QGraphicsItem parent=None) -QtWidgets.QGraphicsPolygonItem.polygon?4() -> QPolygonF -QtWidgets.QGraphicsPolygonItem.setPolygon?4(QPolygonF) -QtWidgets.QGraphicsPolygonItem.fillRule?4() -> Qt.FillRule -QtWidgets.QGraphicsPolygonItem.setFillRule?4(Qt.FillRule) -QtWidgets.QGraphicsPolygonItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsPolygonItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsPolygonItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsPolygonItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsPolygonItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsPolygonItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsPolygonItem.type?4() -> int -QtWidgets.QGraphicsLineItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem?1(QLineF, QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem.__init__?1(self, QLineF, QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem?1(float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) -QtWidgets.QGraphicsLineItem.pen?4() -> QPen -QtWidgets.QGraphicsLineItem.setPen?4(QPen) -QtWidgets.QGraphicsLineItem.line?4() -> QLineF -QtWidgets.QGraphicsLineItem.setLine?4(QLineF) -QtWidgets.QGraphicsLineItem.setLine?4(float, float, float, float) -QtWidgets.QGraphicsLineItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsLineItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsLineItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsLineItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsLineItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsLineItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsLineItem.type?4() -> int -QtWidgets.QGraphicsPixmapItem.ShapeMode?10 -QtWidgets.QGraphicsPixmapItem.ShapeMode.MaskShape?10 -QtWidgets.QGraphicsPixmapItem.ShapeMode.BoundingRectShape?10 -QtWidgets.QGraphicsPixmapItem.ShapeMode.HeuristicMaskShape?10 -QtWidgets.QGraphicsPixmapItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsPixmapItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsPixmapItem?1(QPixmap, QGraphicsItem parent=None) -QtWidgets.QGraphicsPixmapItem.__init__?1(self, QPixmap, QGraphicsItem parent=None) -QtWidgets.QGraphicsPixmapItem.pixmap?4() -> QPixmap -QtWidgets.QGraphicsPixmapItem.setPixmap?4(QPixmap) -QtWidgets.QGraphicsPixmapItem.transformationMode?4() -> Qt.TransformationMode -QtWidgets.QGraphicsPixmapItem.setTransformationMode?4(Qt.TransformationMode) -QtWidgets.QGraphicsPixmapItem.offset?4() -> QPointF -QtWidgets.QGraphicsPixmapItem.setOffset?4(QPointF) -QtWidgets.QGraphicsPixmapItem.setOffset?4(float, float) -QtWidgets.QGraphicsPixmapItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsPixmapItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsPixmapItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsPixmapItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) -QtWidgets.QGraphicsPixmapItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsPixmapItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsPixmapItem.type?4() -> int -QtWidgets.QGraphicsPixmapItem.shapeMode?4() -> QGraphicsPixmapItem.ShapeMode -QtWidgets.QGraphicsPixmapItem.setShapeMode?4(QGraphicsPixmapItem.ShapeMode) -QtWidgets.QGraphicsSimpleTextItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsSimpleTextItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsSimpleTextItem?1(QString, QGraphicsItem parent=None) -QtWidgets.QGraphicsSimpleTextItem.__init__?1(self, QString, QGraphicsItem parent=None) -QtWidgets.QGraphicsSimpleTextItem.setText?4(QString) -QtWidgets.QGraphicsSimpleTextItem.text?4() -> QString -QtWidgets.QGraphicsSimpleTextItem.setFont?4(QFont) -QtWidgets.QGraphicsSimpleTextItem.font?4() -> QFont -QtWidgets.QGraphicsSimpleTextItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsSimpleTextItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsSimpleTextItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsSimpleTextItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) -QtWidgets.QGraphicsSimpleTextItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsSimpleTextItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsSimpleTextItem.type?4() -> int -QtWidgets.QGraphicsItemGroup?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsItemGroup.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsItemGroup.addToGroup?4(QGraphicsItem) -QtWidgets.QGraphicsItemGroup.removeFromGroup?4(QGraphicsItem) -QtWidgets.QGraphicsItemGroup.boundingRect?4() -> QRectF -QtWidgets.QGraphicsItemGroup.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsItemGroup.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsItemGroup.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsItemGroup.type?4() -> int -QtWidgets.QGraphicsObject?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsObject.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsObject.grabGesture?4(Qt.GestureType, unknown-type flags=Qt.GestureFlags()) -QtWidgets.QGraphicsObject.ungrabGesture?4(Qt.GestureType) -QtWidgets.QGraphicsObject.parentChanged?4() -QtWidgets.QGraphicsObject.opacityChanged?4() -QtWidgets.QGraphicsObject.visibleChanged?4() -QtWidgets.QGraphicsObject.enabledChanged?4() -QtWidgets.QGraphicsObject.xChanged?4() -QtWidgets.QGraphicsObject.yChanged?4() -QtWidgets.QGraphicsObject.zChanged?4() -QtWidgets.QGraphicsObject.rotationChanged?4() -QtWidgets.QGraphicsObject.scaleChanged?4() -QtWidgets.QGraphicsObject.updateMicroFocus?4() -QtWidgets.QGraphicsObject.event?4(QEvent) -> bool -QtWidgets.QGraphicsTextItem?1(QGraphicsItem parent=None) -QtWidgets.QGraphicsTextItem.__init__?1(self, QGraphicsItem parent=None) -QtWidgets.QGraphicsTextItem?1(QString, QGraphicsItem parent=None) -QtWidgets.QGraphicsTextItem.__init__?1(self, QString, QGraphicsItem parent=None) -QtWidgets.QGraphicsTextItem.toHtml?4() -> QString -QtWidgets.QGraphicsTextItem.setHtml?4(QString) -QtWidgets.QGraphicsTextItem.toPlainText?4() -> QString -QtWidgets.QGraphicsTextItem.setPlainText?4(QString) -QtWidgets.QGraphicsTextItem.font?4() -> QFont -QtWidgets.QGraphicsTextItem.setFont?4(QFont) -QtWidgets.QGraphicsTextItem.setDefaultTextColor?4(QColor) -QtWidgets.QGraphicsTextItem.defaultTextColor?4() -> QColor -QtWidgets.QGraphicsTextItem.boundingRect?4() -> QRectF -QtWidgets.QGraphicsTextItem.shape?4() -> QPainterPath -QtWidgets.QGraphicsTextItem.contains?4(QPointF) -> bool -QtWidgets.QGraphicsTextItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) -QtWidgets.QGraphicsTextItem.isObscuredBy?4(QGraphicsItem) -> bool -QtWidgets.QGraphicsTextItem.opaqueArea?4() -> QPainterPath -QtWidgets.QGraphicsTextItem.type?4() -> int -QtWidgets.QGraphicsTextItem.setTextWidth?4(float) -QtWidgets.QGraphicsTextItem.textWidth?4() -> float -QtWidgets.QGraphicsTextItem.adjustSize?4() -QtWidgets.QGraphicsTextItem.setDocument?4(QTextDocument) -QtWidgets.QGraphicsTextItem.document?4() -> QTextDocument -QtWidgets.QGraphicsTextItem.setTextInteractionFlags?4(unknown-type) -QtWidgets.QGraphicsTextItem.textInteractionFlags?4() -> unknown-type -QtWidgets.QGraphicsTextItem.setTabChangesFocus?4(bool) -QtWidgets.QGraphicsTextItem.tabChangesFocus?4() -> bool -QtWidgets.QGraphicsTextItem.setOpenExternalLinks?4(bool) -QtWidgets.QGraphicsTextItem.openExternalLinks?4() -> bool -QtWidgets.QGraphicsTextItem.setTextCursor?4(QTextCursor) -QtWidgets.QGraphicsTextItem.textCursor?4() -> QTextCursor -QtWidgets.QGraphicsTextItem.linkActivated?4(QString) -QtWidgets.QGraphicsTextItem.linkHovered?4(QString) -QtWidgets.QGraphicsTextItem.sceneEvent?4(QEvent) -> bool -QtWidgets.QGraphicsTextItem.mousePressEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsTextItem.mouseMoveEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsTextItem.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsTextItem.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsTextItem.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) -QtWidgets.QGraphicsTextItem.keyPressEvent?4(QKeyEvent) -QtWidgets.QGraphicsTextItem.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QGraphicsTextItem.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsTextItem.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsTextItem.dragEnterEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsTextItem.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsTextItem.dragMoveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsTextItem.dropEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsTextItem.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QGraphicsTextItem.hoverEnterEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsTextItem.hoverMoveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsTextItem.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsTextItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QGraphicsLinearLayout?1(QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLinearLayout.__init__?1(self, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLinearLayout?1(Qt.Orientation, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLinearLayout.__init__?1(self, Qt.Orientation, QGraphicsLayoutItem parent=None) -QtWidgets.QGraphicsLinearLayout.setOrientation?4(Qt.Orientation) -QtWidgets.QGraphicsLinearLayout.orientation?4() -> Qt.Orientation -QtWidgets.QGraphicsLinearLayout.addItem?4(QGraphicsLayoutItem) -QtWidgets.QGraphicsLinearLayout.addStretch?4(int stretch=1) -QtWidgets.QGraphicsLinearLayout.insertItem?4(int, QGraphicsLayoutItem) -QtWidgets.QGraphicsLinearLayout.insertStretch?4(int, int stretch=1) -QtWidgets.QGraphicsLinearLayout.removeItem?4(QGraphicsLayoutItem) -QtWidgets.QGraphicsLinearLayout.removeAt?4(int) -QtWidgets.QGraphicsLinearLayout.setSpacing?4(float) -QtWidgets.QGraphicsLinearLayout.spacing?4() -> float -QtWidgets.QGraphicsLinearLayout.setItemSpacing?4(int, float) -QtWidgets.QGraphicsLinearLayout.itemSpacing?4(int) -> float -QtWidgets.QGraphicsLinearLayout.setStretchFactor?4(QGraphicsLayoutItem, int) -QtWidgets.QGraphicsLinearLayout.stretchFactor?4(QGraphicsLayoutItem) -> int -QtWidgets.QGraphicsLinearLayout.setAlignment?4(QGraphicsLayoutItem, unknown-type) -QtWidgets.QGraphicsLinearLayout.alignment?4(QGraphicsLayoutItem) -> unknown-type -QtWidgets.QGraphicsLinearLayout.setGeometry?4(QRectF) -QtWidgets.QGraphicsLinearLayout.count?4() -> int -QtWidgets.QGraphicsLinearLayout.itemAt?4(int) -> QGraphicsLayoutItem -QtWidgets.QGraphicsLinearLayout.invalidate?4() -QtWidgets.QGraphicsLinearLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsWidget?1(QGraphicsItem parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QGraphicsWidget.__init__?1(self, QGraphicsItem parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QGraphicsWidget.layout?4() -> QGraphicsLayout -QtWidgets.QGraphicsWidget.setLayout?4(QGraphicsLayout) -QtWidgets.QGraphicsWidget.adjustSize?4() -QtWidgets.QGraphicsWidget.layoutDirection?4() -> Qt.LayoutDirection -QtWidgets.QGraphicsWidget.setLayoutDirection?4(Qt.LayoutDirection) -QtWidgets.QGraphicsWidget.unsetLayoutDirection?4() -QtWidgets.QGraphicsWidget.style?4() -> QStyle -QtWidgets.QGraphicsWidget.setStyle?4(QStyle) -QtWidgets.QGraphicsWidget.font?4() -> QFont -QtWidgets.QGraphicsWidget.setFont?4(QFont) -QtWidgets.QGraphicsWidget.palette?4() -> QPalette -QtWidgets.QGraphicsWidget.setPalette?4(QPalette) -QtWidgets.QGraphicsWidget.resize?4(QSizeF) -QtWidgets.QGraphicsWidget.resize?4(float, float) -QtWidgets.QGraphicsWidget.size?4() -> QSizeF -QtWidgets.QGraphicsWidget.setGeometry?4(QRectF) -QtWidgets.QGraphicsWidget.rect?4() -> QRectF -QtWidgets.QGraphicsWidget.setContentsMargins?4(QMarginsF) -QtWidgets.QGraphicsWidget.setContentsMargins?4(float, float, float, float) -QtWidgets.QGraphicsWidget.getContentsMargins?4() -> (float, float, float, float) -QtWidgets.QGraphicsWidget.setWindowFrameMargins?4(QMarginsF) -QtWidgets.QGraphicsWidget.setWindowFrameMargins?4(float, float, float, float) -QtWidgets.QGraphicsWidget.getWindowFrameMargins?4() -> (float, float, float, float) -QtWidgets.QGraphicsWidget.unsetWindowFrameMargins?4() -QtWidgets.QGraphicsWidget.windowFrameGeometry?4() -> QRectF -QtWidgets.QGraphicsWidget.windowFrameRect?4() -> QRectF -QtWidgets.QGraphicsWidget.windowFlags?4() -> unknown-type -QtWidgets.QGraphicsWidget.windowType?4() -> Qt.WindowType -QtWidgets.QGraphicsWidget.setWindowFlags?4(unknown-type) -QtWidgets.QGraphicsWidget.isActiveWindow?4() -> bool -QtWidgets.QGraphicsWidget.setWindowTitle?4(QString) -QtWidgets.QGraphicsWidget.windowTitle?4() -> QString -QtWidgets.QGraphicsWidget.focusPolicy?4() -> Qt.FocusPolicy -QtWidgets.QGraphicsWidget.setFocusPolicy?4(Qt.FocusPolicy) -QtWidgets.QGraphicsWidget.setTabOrder?4(QGraphicsWidget, QGraphicsWidget) -QtWidgets.QGraphicsWidget.focusWidget?4() -> QGraphicsWidget -QtWidgets.QGraphicsWidget.grabShortcut?4(QKeySequence, Qt.ShortcutContext context=Qt.WindowShortcut) -> int -QtWidgets.QGraphicsWidget.releaseShortcut?4(int) -QtWidgets.QGraphicsWidget.setShortcutEnabled?4(int, bool enabled=True) -QtWidgets.QGraphicsWidget.setShortcutAutoRepeat?4(int, bool enabled=True) -QtWidgets.QGraphicsWidget.addAction?4(QAction) -QtWidgets.QGraphicsWidget.addActions?4(unknown-type) -QtWidgets.QGraphicsWidget.insertAction?4(QAction, QAction) -QtWidgets.QGraphicsWidget.insertActions?4(QAction, unknown-type) -QtWidgets.QGraphicsWidget.removeAction?4(QAction) -QtWidgets.QGraphicsWidget.actions?4() -> unknown-type -QtWidgets.QGraphicsWidget.setAttribute?4(Qt.WidgetAttribute, bool on=True) -QtWidgets.QGraphicsWidget.testAttribute?4(Qt.WidgetAttribute) -> bool -QtWidgets.QGraphicsWidget.type?4() -> int -QtWidgets.QGraphicsWidget.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsWidget.paintWindowFrame?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtWidgets.QGraphicsWidget.boundingRect?4() -> QRectF -QtWidgets.QGraphicsWidget.shape?4() -> QPainterPath -QtWidgets.QGraphicsWidget.setGeometry?4(float, float, float, float) -QtWidgets.QGraphicsWidget.close?4() -> bool -QtWidgets.QGraphicsWidget.initStyleOption?4(QStyleOption) -QtWidgets.QGraphicsWidget.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsWidget.updateGeometry?4() -QtWidgets.QGraphicsWidget.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant -QtWidgets.QGraphicsWidget.sceneEvent?4(QEvent) -> bool -QtWidgets.QGraphicsWidget.windowFrameEvent?4(QEvent) -> bool -QtWidgets.QGraphicsWidget.windowFrameSectionAt?4(QPointF) -> Qt.WindowFrameSection -QtWidgets.QGraphicsWidget.event?4(QEvent) -> bool -QtWidgets.QGraphicsWidget.changeEvent?4(QEvent) -QtWidgets.QGraphicsWidget.closeEvent?4(QCloseEvent) -QtWidgets.QGraphicsWidget.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsWidget.focusNextPrevChild?4(bool) -> bool -QtWidgets.QGraphicsWidget.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsWidget.hideEvent?4(QHideEvent) -QtWidgets.QGraphicsWidget.moveEvent?4(QGraphicsSceneMoveEvent) -QtWidgets.QGraphicsWidget.polishEvent?4() -QtWidgets.QGraphicsWidget.resizeEvent?4(QGraphicsSceneResizeEvent) -QtWidgets.QGraphicsWidget.showEvent?4(QShowEvent) -QtWidgets.QGraphicsWidget.hoverMoveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsWidget.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsWidget.grabMouseEvent?4(QEvent) -QtWidgets.QGraphicsWidget.ungrabMouseEvent?4(QEvent) -QtWidgets.QGraphicsWidget.grabKeyboardEvent?4(QEvent) -QtWidgets.QGraphicsWidget.ungrabKeyboardEvent?4(QEvent) -QtWidgets.QGraphicsWidget.autoFillBackground?4() -> bool -QtWidgets.QGraphicsWidget.setAutoFillBackground?4(bool) -QtWidgets.QGraphicsWidget.geometryChanged?4() -QtWidgets.QGraphicsProxyWidget?1(QGraphicsItem parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QGraphicsProxyWidget.__init__?1(self, QGraphicsItem parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QGraphicsProxyWidget.setWidget?4(QWidget) -QtWidgets.QGraphicsProxyWidget.widget?4() -> QWidget -QtWidgets.QGraphicsProxyWidget.subWidgetRect?4(QWidget) -> QRectF -QtWidgets.QGraphicsProxyWidget.setGeometry?4(QRectF) -QtWidgets.QGraphicsProxyWidget.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) -QtWidgets.QGraphicsProxyWidget.type?4() -> int -QtWidgets.QGraphicsProxyWidget.createProxyForChildWidget?4(QWidget) -> QGraphicsProxyWidget -QtWidgets.QGraphicsProxyWidget.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant -QtWidgets.QGraphicsProxyWidget.event?4(QEvent) -> bool -QtWidgets.QGraphicsProxyWidget.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QGraphicsProxyWidget.showEvent?4(QShowEvent) -QtWidgets.QGraphicsProxyWidget.hideEvent?4(QHideEvent) -QtWidgets.QGraphicsProxyWidget.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) -QtWidgets.QGraphicsProxyWidget.hoverEnterEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsProxyWidget.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsProxyWidget.hoverMoveEvent?4(QGraphicsSceneHoverEvent) -QtWidgets.QGraphicsProxyWidget.grabMouseEvent?4(QEvent) -QtWidgets.QGraphicsProxyWidget.ungrabMouseEvent?4(QEvent) -QtWidgets.QGraphicsProxyWidget.mouseMoveEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsProxyWidget.mousePressEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsProxyWidget.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsProxyWidget.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsProxyWidget.wheelEvent?4(QGraphicsSceneWheelEvent) -QtWidgets.QGraphicsProxyWidget.keyPressEvent?4(QKeyEvent) -QtWidgets.QGraphicsProxyWidget.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QGraphicsProxyWidget.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsProxyWidget.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsProxyWidget.focusNextPrevChild?4(bool) -> bool -QtWidgets.QGraphicsProxyWidget.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF -QtWidgets.QGraphicsProxyWidget.resizeEvent?4(QGraphicsSceneResizeEvent) -QtWidgets.QGraphicsProxyWidget.dragEnterEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsProxyWidget.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsProxyWidget.dragMoveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsProxyWidget.dropEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsProxyWidget.newProxyWidget?4(QWidget) -> QGraphicsProxyWidget -QtWidgets.QGraphicsProxyWidget.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QGraphicsProxyWidget.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QGraphicsScene.SceneLayer?10 -QtWidgets.QGraphicsScene.SceneLayer.ItemLayer?10 -QtWidgets.QGraphicsScene.SceneLayer.BackgroundLayer?10 -QtWidgets.QGraphicsScene.SceneLayer.ForegroundLayer?10 -QtWidgets.QGraphicsScene.SceneLayer.AllLayers?10 -QtWidgets.QGraphicsScene.ItemIndexMethod?10 -QtWidgets.QGraphicsScene.ItemIndexMethod.BspTreeIndex?10 -QtWidgets.QGraphicsScene.ItemIndexMethod.NoIndex?10 -QtWidgets.QGraphicsScene?1(QObject parent=None) -QtWidgets.QGraphicsScene.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsScene?1(QRectF, QObject parent=None) -QtWidgets.QGraphicsScene.__init__?1(self, QRectF, QObject parent=None) -QtWidgets.QGraphicsScene?1(float, float, float, float, QObject parent=None) -QtWidgets.QGraphicsScene.__init__?1(self, float, float, float, float, QObject parent=None) -QtWidgets.QGraphicsScene.sceneRect?4() -> QRectF -QtWidgets.QGraphicsScene.width?4() -> float -QtWidgets.QGraphicsScene.height?4() -> float -QtWidgets.QGraphicsScene.setSceneRect?4(QRectF) -QtWidgets.QGraphicsScene.setSceneRect?4(float, float, float, float) -QtWidgets.QGraphicsScene.render?4(QPainter, QRectF target=QRectF(), QRectF source=QRectF(), Qt.AspectRatioMode mode=Qt.KeepAspectRatio) -QtWidgets.QGraphicsScene.itemIndexMethod?4() -> QGraphicsScene.ItemIndexMethod -QtWidgets.QGraphicsScene.setItemIndexMethod?4(QGraphicsScene.ItemIndexMethod) -QtWidgets.QGraphicsScene.itemsBoundingRect?4() -> QRectF -QtWidgets.QGraphicsScene.items?4(Qt.SortOrder order=Qt.DescendingOrder) -> unknown-type -QtWidgets.QGraphicsScene.items?4(QPointF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type -QtWidgets.QGraphicsScene.items?4(QRectF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type -QtWidgets.QGraphicsScene.items?4(QPolygonF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type -QtWidgets.QGraphicsScene.items?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type -QtWidgets.QGraphicsScene.items?4(float, float, float, float, Qt.ItemSelectionMode, Qt.SortOrder, QTransform deviceTransform=QTransform()) -> unknown-type -QtWidgets.QGraphicsScene.collidingItems?4(QGraphicsItem, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsScene.selectedItems?4() -> unknown-type -QtWidgets.QGraphicsScene.setSelectionArea?4(QPainterPath, QTransform) -QtWidgets.QGraphicsScene.setSelectionArea?4(QPainterPath, Qt.ItemSelectionOperation selectionOperation=Qt.ReplaceSelection, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, QTransform deviceTransform=QTransform()) -QtWidgets.QGraphicsScene.clearSelection?4() -QtWidgets.QGraphicsScene.createItemGroup?4(unknown-type) -> QGraphicsItemGroup -QtWidgets.QGraphicsScene.destroyItemGroup?4(QGraphicsItemGroup) -QtWidgets.QGraphicsScene.addItem?4(QGraphicsItem) -QtWidgets.QGraphicsScene.addEllipse?4(QRectF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsEllipseItem -QtWidgets.QGraphicsScene.addEllipse?4(float, float, float, float, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsEllipseItem -QtWidgets.QGraphicsScene.addLine?4(QLineF, QPen pen=QPen()) -> QGraphicsLineItem -QtWidgets.QGraphicsScene.addLine?4(float, float, float, float, QPen pen=QPen()) -> QGraphicsLineItem -QtWidgets.QGraphicsScene.addPath?4(QPainterPath, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsPathItem -QtWidgets.QGraphicsScene.addPixmap?4(QPixmap) -> QGraphicsPixmapItem -QtWidgets.QGraphicsScene.addPolygon?4(QPolygonF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsPolygonItem -QtWidgets.QGraphicsScene.addRect?4(QRectF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsRectItem -QtWidgets.QGraphicsScene.addRect?4(float, float, float, float, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsRectItem -QtWidgets.QGraphicsScene.addSimpleText?4(QString, QFont font=QFont()) -> QGraphicsSimpleTextItem -QtWidgets.QGraphicsScene.addText?4(QString, QFont font=QFont()) -> QGraphicsTextItem -QtWidgets.QGraphicsScene.removeItem?4(QGraphicsItem) -QtWidgets.QGraphicsScene.focusItem?4() -> QGraphicsItem -QtWidgets.QGraphicsScene.setFocusItem?4(QGraphicsItem, Qt.FocusReason focusReason=Qt.OtherFocusReason) -QtWidgets.QGraphicsScene.hasFocus?4() -> bool -QtWidgets.QGraphicsScene.setFocus?4(Qt.FocusReason focusReason=Qt.OtherFocusReason) -QtWidgets.QGraphicsScene.clearFocus?4() -QtWidgets.QGraphicsScene.mouseGrabberItem?4() -> QGraphicsItem -QtWidgets.QGraphicsScene.backgroundBrush?4() -> QBrush -QtWidgets.QGraphicsScene.setBackgroundBrush?4(QBrush) -QtWidgets.QGraphicsScene.foregroundBrush?4() -> QBrush -QtWidgets.QGraphicsScene.setForegroundBrush?4(QBrush) -QtWidgets.QGraphicsScene.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QGraphicsScene.views?4() -> unknown-type -QtWidgets.QGraphicsScene.advance?4() -QtWidgets.QGraphicsScene.update?4(QRectF rect=QRectF()) -QtWidgets.QGraphicsScene.invalidate?4(QRectF rect=QRectF(), unknown-type layers=QGraphicsScene.AllLayers) -QtWidgets.QGraphicsScene.clear?4() -QtWidgets.QGraphicsScene.changed?4(unknown-type) -QtWidgets.QGraphicsScene.sceneRectChanged?4(QRectF) -QtWidgets.QGraphicsScene.selectionChanged?4() -QtWidgets.QGraphicsScene.event?4(QEvent) -> bool -QtWidgets.QGraphicsScene.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) -QtWidgets.QGraphicsScene.dragEnterEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsScene.dragMoveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsScene.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsScene.dropEvent?4(QGraphicsSceneDragDropEvent) -QtWidgets.QGraphicsScene.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsScene.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsScene.helpEvent?4(QGraphicsSceneHelpEvent) -QtWidgets.QGraphicsScene.keyPressEvent?4(QKeyEvent) -QtWidgets.QGraphicsScene.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QGraphicsScene.mousePressEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsScene.mouseMoveEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsScene.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsScene.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) -QtWidgets.QGraphicsScene.wheelEvent?4(QGraphicsSceneWheelEvent) -QtWidgets.QGraphicsScene.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QGraphicsScene.drawBackground?4(QPainter, QRectF) -QtWidgets.QGraphicsScene.drawForeground?4(QPainter, QRectF) -QtWidgets.QGraphicsScene.bspTreeDepth?4() -> int -QtWidgets.QGraphicsScene.setBspTreeDepth?4(int) -QtWidgets.QGraphicsScene.selectionArea?4() -> QPainterPath -QtWidgets.QGraphicsScene.update?4(float, float, float, float) -QtWidgets.QGraphicsScene.addWidget?4(QWidget, unknown-type flags=Qt.WindowFlags()) -> QGraphicsProxyWidget -QtWidgets.QGraphicsScene.style?4() -> QStyle -QtWidgets.QGraphicsScene.setStyle?4(QStyle) -QtWidgets.QGraphicsScene.font?4() -> QFont -QtWidgets.QGraphicsScene.setFont?4(QFont) -QtWidgets.QGraphicsScene.palette?4() -> QPalette -QtWidgets.QGraphicsScene.setPalette?4(QPalette) -QtWidgets.QGraphicsScene.activeWindow?4() -> QGraphicsWidget -QtWidgets.QGraphicsScene.setActiveWindow?4(QGraphicsWidget) -QtWidgets.QGraphicsScene.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QGraphicsScene.focusNextPrevChild?4(bool) -> bool -QtWidgets.QGraphicsScene.setStickyFocus?4(bool) -QtWidgets.QGraphicsScene.stickyFocus?4() -> bool -QtWidgets.QGraphicsScene.itemAt?4(QPointF, QTransform) -> QGraphicsItem -QtWidgets.QGraphicsScene.itemAt?4(float, float, QTransform) -> QGraphicsItem -QtWidgets.QGraphicsScene.isActive?4() -> bool -QtWidgets.QGraphicsScene.activePanel?4() -> QGraphicsItem -QtWidgets.QGraphicsScene.setActivePanel?4(QGraphicsItem) -QtWidgets.QGraphicsScene.sendEvent?4(QGraphicsItem, QEvent) -> bool -QtWidgets.QGraphicsScene.invalidate?4(float, float, float, float, unknown-type layers=QGraphicsScene.AllLayers) -QtWidgets.QGraphicsScene.minimumRenderSize?4() -> float -QtWidgets.QGraphicsScene.setMinimumRenderSize?4(float) -QtWidgets.QGraphicsScene.focusItemChanged?4(QGraphicsItem, QGraphicsItem, Qt.FocusReason) -QtWidgets.QGraphicsScene.focusOnTouch?4() -> bool -QtWidgets.QGraphicsScene.setFocusOnTouch?4(bool) -QtWidgets.QGraphicsSceneEvent.widget?4() -> QWidget -QtWidgets.QGraphicsSceneEvent.timestamp?4() -> int -QtWidgets.QGraphicsSceneMouseEvent.pos?4() -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneMouseEvent.buttonDownPos?4(Qt.MouseButton) -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.buttonDownScenePos?4(Qt.MouseButton) -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.buttonDownScreenPos?4(Qt.MouseButton) -> QPoint -QtWidgets.QGraphicsSceneMouseEvent.lastPos?4() -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.lastScenePos?4() -> QPointF -QtWidgets.QGraphicsSceneMouseEvent.lastScreenPos?4() -> QPoint -QtWidgets.QGraphicsSceneMouseEvent.buttons?4() -> unknown-type -QtWidgets.QGraphicsSceneMouseEvent.button?4() -> Qt.MouseButton -QtWidgets.QGraphicsSceneMouseEvent.modifiers?4() -> unknown-type -QtWidgets.QGraphicsSceneMouseEvent.source?4() -> Qt.MouseEventSource -QtWidgets.QGraphicsSceneMouseEvent.flags?4() -> unknown-type -QtWidgets.QGraphicsSceneWheelEvent.pos?4() -> QPointF -QtWidgets.QGraphicsSceneWheelEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneWheelEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneWheelEvent.buttons?4() -> unknown-type -QtWidgets.QGraphicsSceneWheelEvent.modifiers?4() -> unknown-type -QtWidgets.QGraphicsSceneWheelEvent.delta?4() -> int -QtWidgets.QGraphicsSceneWheelEvent.orientation?4() -> Qt.Orientation -QtWidgets.QGraphicsSceneWheelEvent.phase?4() -> Qt.ScrollPhase -QtWidgets.QGraphicsSceneWheelEvent.pixelDelta?4() -> QPoint -QtWidgets.QGraphicsSceneWheelEvent.isInverted?4() -> bool -QtWidgets.QGraphicsSceneContextMenuEvent.Reason?10 -QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Mouse?10 -QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Keyboard?10 -QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Other?10 -QtWidgets.QGraphicsSceneContextMenuEvent.pos?4() -> QPointF -QtWidgets.QGraphicsSceneContextMenuEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneContextMenuEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneContextMenuEvent.modifiers?4() -> unknown-type -QtWidgets.QGraphicsSceneContextMenuEvent.reason?4() -> QGraphicsSceneContextMenuEvent.Reason -QtWidgets.QGraphicsSceneHoverEvent.pos?4() -> QPointF -QtWidgets.QGraphicsSceneHoverEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneHoverEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneHoverEvent.lastPos?4() -> QPointF -QtWidgets.QGraphicsSceneHoverEvent.lastScenePos?4() -> QPointF -QtWidgets.QGraphicsSceneHoverEvent.lastScreenPos?4() -> QPoint -QtWidgets.QGraphicsSceneHoverEvent.modifiers?4() -> unknown-type -QtWidgets.QGraphicsSceneHelpEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneHelpEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneDragDropEvent.pos?4() -> QPointF -QtWidgets.QGraphicsSceneDragDropEvent.scenePos?4() -> QPointF -QtWidgets.QGraphicsSceneDragDropEvent.screenPos?4() -> QPoint -QtWidgets.QGraphicsSceneDragDropEvent.buttons?4() -> unknown-type -QtWidgets.QGraphicsSceneDragDropEvent.modifiers?4() -> unknown-type -QtWidgets.QGraphicsSceneDragDropEvent.possibleActions?4() -> unknown-type -QtWidgets.QGraphicsSceneDragDropEvent.proposedAction?4() -> Qt.DropAction -QtWidgets.QGraphicsSceneDragDropEvent.acceptProposedAction?4() -QtWidgets.QGraphicsSceneDragDropEvent.dropAction?4() -> Qt.DropAction -QtWidgets.QGraphicsSceneDragDropEvent.setDropAction?4(Qt.DropAction) -QtWidgets.QGraphicsSceneDragDropEvent.source?4() -> QWidget -QtWidgets.QGraphicsSceneDragDropEvent.mimeData?4() -> QMimeData -QtWidgets.QGraphicsSceneResizeEvent?1() -QtWidgets.QGraphicsSceneResizeEvent.__init__?1(self) -QtWidgets.QGraphicsSceneResizeEvent.oldSize?4() -> QSizeF -QtWidgets.QGraphicsSceneResizeEvent.newSize?4() -> QSizeF -QtWidgets.QGraphicsSceneMoveEvent?1() -QtWidgets.QGraphicsSceneMoveEvent.__init__?1(self) -QtWidgets.QGraphicsSceneMoveEvent.oldPos?4() -> QPointF -QtWidgets.QGraphicsSceneMoveEvent.newPos?4() -> QPointF -QtWidgets.QGraphicsTransform?1(QObject parent=None) -QtWidgets.QGraphicsTransform.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsTransform.applyTo?4(QMatrix4x4) -QtWidgets.QGraphicsTransform.update?4() -QtWidgets.QGraphicsScale?1(QObject parent=None) -QtWidgets.QGraphicsScale.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsScale.origin?4() -> QVector3D -QtWidgets.QGraphicsScale.setOrigin?4(QVector3D) -QtWidgets.QGraphicsScale.xScale?4() -> float -QtWidgets.QGraphicsScale.setXScale?4(float) -QtWidgets.QGraphicsScale.yScale?4() -> float -QtWidgets.QGraphicsScale.setYScale?4(float) -QtWidgets.QGraphicsScale.zScale?4() -> float -QtWidgets.QGraphicsScale.setZScale?4(float) -QtWidgets.QGraphicsScale.applyTo?4(QMatrix4x4) -QtWidgets.QGraphicsScale.originChanged?4() -QtWidgets.QGraphicsScale.scaleChanged?4() -QtWidgets.QGraphicsScale.xScaleChanged?4() -QtWidgets.QGraphicsScale.yScaleChanged?4() -QtWidgets.QGraphicsScale.zScaleChanged?4() -QtWidgets.QGraphicsRotation?1(QObject parent=None) -QtWidgets.QGraphicsRotation.__init__?1(self, QObject parent=None) -QtWidgets.QGraphicsRotation.origin?4() -> QVector3D -QtWidgets.QGraphicsRotation.setOrigin?4(QVector3D) -QtWidgets.QGraphicsRotation.angle?4() -> float -QtWidgets.QGraphicsRotation.setAngle?4(float) -QtWidgets.QGraphicsRotation.axis?4() -> QVector3D -QtWidgets.QGraphicsRotation.setAxis?4(QVector3D) -QtWidgets.QGraphicsRotation.setAxis?4(Qt.Axis) -QtWidgets.QGraphicsRotation.applyTo?4(QMatrix4x4) -QtWidgets.QGraphicsRotation.originChanged?4() -QtWidgets.QGraphicsRotation.angleChanged?4() -QtWidgets.QGraphicsRotation.axisChanged?4() -QtWidgets.QGraphicsView.OptimizationFlag?10 -QtWidgets.QGraphicsView.OptimizationFlag.DontSavePainterState?10 -QtWidgets.QGraphicsView.OptimizationFlag.DontAdjustForAntialiasing?10 -QtWidgets.QGraphicsView.ViewportUpdateMode?10 -QtWidgets.QGraphicsView.ViewportUpdateMode.FullViewportUpdate?10 -QtWidgets.QGraphicsView.ViewportUpdateMode.MinimalViewportUpdate?10 -QtWidgets.QGraphicsView.ViewportUpdateMode.SmartViewportUpdate?10 -QtWidgets.QGraphicsView.ViewportUpdateMode.BoundingRectViewportUpdate?10 -QtWidgets.QGraphicsView.ViewportUpdateMode.NoViewportUpdate?10 -QtWidgets.QGraphicsView.ViewportAnchor?10 -QtWidgets.QGraphicsView.ViewportAnchor.NoAnchor?10 -QtWidgets.QGraphicsView.ViewportAnchor.AnchorViewCenter?10 -QtWidgets.QGraphicsView.ViewportAnchor.AnchorUnderMouse?10 -QtWidgets.QGraphicsView.DragMode?10 -QtWidgets.QGraphicsView.DragMode.NoDrag?10 -QtWidgets.QGraphicsView.DragMode.ScrollHandDrag?10 -QtWidgets.QGraphicsView.DragMode.RubberBandDrag?10 -QtWidgets.QGraphicsView.CacheModeFlag?10 -QtWidgets.QGraphicsView.CacheModeFlag.CacheNone?10 -QtWidgets.QGraphicsView.CacheModeFlag.CacheBackground?10 -QtWidgets.QGraphicsView?1(QWidget parent=None) -QtWidgets.QGraphicsView.__init__?1(self, QWidget parent=None) -QtWidgets.QGraphicsView?1(QGraphicsScene, QWidget parent=None) -QtWidgets.QGraphicsView.__init__?1(self, QGraphicsScene, QWidget parent=None) -QtWidgets.QGraphicsView.sizeHint?4() -> QSize -QtWidgets.QGraphicsView.renderHints?4() -> unknown-type -QtWidgets.QGraphicsView.setRenderHint?4(QPainter.RenderHint, bool on=True) -QtWidgets.QGraphicsView.setRenderHints?4(unknown-type) -QtWidgets.QGraphicsView.alignment?4() -> unknown-type -QtWidgets.QGraphicsView.setAlignment?4(unknown-type) -QtWidgets.QGraphicsView.transformationAnchor?4() -> QGraphicsView.ViewportAnchor -QtWidgets.QGraphicsView.setTransformationAnchor?4(QGraphicsView.ViewportAnchor) -QtWidgets.QGraphicsView.resizeAnchor?4() -> QGraphicsView.ViewportAnchor -QtWidgets.QGraphicsView.setResizeAnchor?4(QGraphicsView.ViewportAnchor) -QtWidgets.QGraphicsView.dragMode?4() -> QGraphicsView.DragMode -QtWidgets.QGraphicsView.setDragMode?4(QGraphicsView.DragMode) -QtWidgets.QGraphicsView.cacheMode?4() -> unknown-type -QtWidgets.QGraphicsView.setCacheMode?4(unknown-type) -QtWidgets.QGraphicsView.resetCachedContent?4() -QtWidgets.QGraphicsView.isInteractive?4() -> bool -QtWidgets.QGraphicsView.setInteractive?4(bool) -QtWidgets.QGraphicsView.scene?4() -> QGraphicsScene -QtWidgets.QGraphicsView.setScene?4(QGraphicsScene) -QtWidgets.QGraphicsView.sceneRect?4() -> QRectF -QtWidgets.QGraphicsView.setSceneRect?4(QRectF) -QtWidgets.QGraphicsView.rotate?4(float) -QtWidgets.QGraphicsView.scale?4(float, float) -QtWidgets.QGraphicsView.shear?4(float, float) -QtWidgets.QGraphicsView.translate?4(float, float) -QtWidgets.QGraphicsView.centerOn?4(QPointF) -QtWidgets.QGraphicsView.centerOn?4(QGraphicsItem) -QtWidgets.QGraphicsView.ensureVisible?4(QRectF, int xMargin=50, int yMargin=50) -QtWidgets.QGraphicsView.ensureVisible?4(QGraphicsItem, int xMargin=50, int yMargin=50) -QtWidgets.QGraphicsView.fitInView?4(QRectF, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) -QtWidgets.QGraphicsView.fitInView?4(QGraphicsItem, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) -QtWidgets.QGraphicsView.render?4(QPainter, QRectF target=QRectF(), QRect source=QRect(), Qt.AspectRatioMode mode=Qt.KeepAspectRatio) -QtWidgets.QGraphicsView.items?4() -> unknown-type -QtWidgets.QGraphicsView.items?4(QPoint) -> unknown-type -QtWidgets.QGraphicsView.items?4(int, int) -> unknown-type -QtWidgets.QGraphicsView.items?4(int, int, int, int, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsView.items?4(QRect, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsView.items?4(QPolygon, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsView.items?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type -QtWidgets.QGraphicsView.itemAt?4(QPoint) -> QGraphicsItem -QtWidgets.QGraphicsView.mapToScene?4(QPoint) -> QPointF -QtWidgets.QGraphicsView.mapToScene?4(QRect) -> QPolygonF -QtWidgets.QGraphicsView.mapToScene?4(QPolygon) -> QPolygonF -QtWidgets.QGraphicsView.mapToScene?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsView.mapFromScene?4(QPointF) -> QPoint -QtWidgets.QGraphicsView.mapFromScene?4(QRectF) -> QPolygon -QtWidgets.QGraphicsView.mapFromScene?4(QPolygonF) -> QPolygon -QtWidgets.QGraphicsView.mapFromScene?4(QPainterPath) -> QPainterPath -QtWidgets.QGraphicsView.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QGraphicsView.backgroundBrush?4() -> QBrush -QtWidgets.QGraphicsView.setBackgroundBrush?4(QBrush) -QtWidgets.QGraphicsView.foregroundBrush?4() -> QBrush -QtWidgets.QGraphicsView.setForegroundBrush?4(QBrush) -QtWidgets.QGraphicsView.invalidateScene?4(QRectF rect=QRectF(), unknown-type layers=QGraphicsScene.AllLayers) -QtWidgets.QGraphicsView.updateScene?4(unknown-type) -QtWidgets.QGraphicsView.updateSceneRect?4(QRectF) -QtWidgets.QGraphicsView.setupViewport?4(QWidget) -QtWidgets.QGraphicsView.event?4(QEvent) -> bool -QtWidgets.QGraphicsView.viewportEvent?4(QEvent) -> bool -QtWidgets.QGraphicsView.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QGraphicsView.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QGraphicsView.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QGraphicsView.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QGraphicsView.dropEvent?4(QDropEvent) -QtWidgets.QGraphicsView.focusInEvent?4(QFocusEvent) -QtWidgets.QGraphicsView.focusOutEvent?4(QFocusEvent) -QtWidgets.QGraphicsView.focusNextPrevChild?4(bool) -> bool -QtWidgets.QGraphicsView.keyPressEvent?4(QKeyEvent) -QtWidgets.QGraphicsView.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QGraphicsView.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QGraphicsView.mousePressEvent?4(QMouseEvent) -QtWidgets.QGraphicsView.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QGraphicsView.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QGraphicsView.wheelEvent?4(QWheelEvent) -QtWidgets.QGraphicsView.paintEvent?4(QPaintEvent) -QtWidgets.QGraphicsView.resizeEvent?4(QResizeEvent) -QtWidgets.QGraphicsView.scrollContentsBy?4(int, int) -QtWidgets.QGraphicsView.showEvent?4(QShowEvent) -QtWidgets.QGraphicsView.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QGraphicsView.drawBackground?4(QPainter, QRectF) -QtWidgets.QGraphicsView.drawForeground?4(QPainter, QRectF) -QtWidgets.QGraphicsView.setSceneRect?4(float, float, float, float) -QtWidgets.QGraphicsView.centerOn?4(float, float) -QtWidgets.QGraphicsView.ensureVisible?4(float, float, float, float, int xMargin=50, int yMargin=50) -QtWidgets.QGraphicsView.fitInView?4(float, float, float, float, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) -QtWidgets.QGraphicsView.itemAt?4(int, int) -> QGraphicsItem -QtWidgets.QGraphicsView.mapToScene?4(int, int) -> QPointF -QtWidgets.QGraphicsView.mapToScene?4(int, int, int, int) -> QPolygonF -QtWidgets.QGraphicsView.mapFromScene?4(float, float) -> QPoint -QtWidgets.QGraphicsView.mapFromScene?4(float, float, float, float) -> QPolygon -QtWidgets.QGraphicsView.viewportUpdateMode?4() -> QGraphicsView.ViewportUpdateMode -QtWidgets.QGraphicsView.setViewportUpdateMode?4(QGraphicsView.ViewportUpdateMode) -QtWidgets.QGraphicsView.optimizationFlags?4() -> unknown-type -QtWidgets.QGraphicsView.setOptimizationFlag?4(QGraphicsView.OptimizationFlag, bool enabled=True) -QtWidgets.QGraphicsView.setOptimizationFlags?4(unknown-type) -QtWidgets.QGraphicsView.rubberBandSelectionMode?4() -> Qt.ItemSelectionMode -QtWidgets.QGraphicsView.setRubberBandSelectionMode?4(Qt.ItemSelectionMode) -QtWidgets.QGraphicsView.transform?4() -> QTransform -QtWidgets.QGraphicsView.viewportTransform?4() -> QTransform -QtWidgets.QGraphicsView.setTransform?4(QTransform, bool combine=False) -QtWidgets.QGraphicsView.resetTransform?4() -QtWidgets.QGraphicsView.isTransformed?4() -> bool -QtWidgets.QGraphicsView.rubberBandRect?4() -> QRect -QtWidgets.QGraphicsView.rubberBandChanged?4(QRect, QPointF, QPointF) -QtWidgets.QGridLayout?1(QWidget parent=None) -QtWidgets.QGridLayout.__init__?1(self, QWidget parent=None) -QtWidgets.QGridLayout.sizeHint?4() -> QSize -QtWidgets.QGridLayout.minimumSize?4() -> QSize -QtWidgets.QGridLayout.maximumSize?4() -> QSize -QtWidgets.QGridLayout.setRowStretch?4(int, int) -QtWidgets.QGridLayout.setColumnStretch?4(int, int) -QtWidgets.QGridLayout.rowStretch?4(int) -> int -QtWidgets.QGridLayout.columnStretch?4(int) -> int -QtWidgets.QGridLayout.setRowMinimumHeight?4(int, int) -QtWidgets.QGridLayout.setColumnMinimumWidth?4(int, int) -QtWidgets.QGridLayout.rowMinimumHeight?4(int) -> int -QtWidgets.QGridLayout.columnMinimumWidth?4(int) -> int -QtWidgets.QGridLayout.columnCount?4() -> int -QtWidgets.QGridLayout.rowCount?4() -> int -QtWidgets.QGridLayout.cellRect?4(int, int) -> QRect -QtWidgets.QGridLayout.hasHeightForWidth?4() -> bool -QtWidgets.QGridLayout.heightForWidth?4(int) -> int -QtWidgets.QGridLayout.minimumHeightForWidth?4(int) -> int -QtWidgets.QGridLayout.expandingDirections?4() -> unknown-type -QtWidgets.QGridLayout.invalidate?4() -QtWidgets.QGridLayout.addWidget?4(QWidget) -QtWidgets.QGridLayout.addWidget?4(QWidget, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGridLayout.addWidget?4(QWidget, int, int, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGridLayout.addLayout?4(QLayout, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGridLayout.addLayout?4(QLayout, int, int, int, int, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGridLayout.setOriginCorner?4(Qt.Corner) -QtWidgets.QGridLayout.originCorner?4() -> Qt.Corner -QtWidgets.QGridLayout.itemAt?4(int) -> QLayoutItem -QtWidgets.QGridLayout.takeAt?4(int) -> QLayoutItem -QtWidgets.QGridLayout.count?4() -> int -QtWidgets.QGridLayout.setGeometry?4(QRect) -QtWidgets.QGridLayout.addItem?4(QLayoutItem, int, int, int rowSpan=1, int columnSpan=1, unknown-type alignment=Qt.Alignment()) -QtWidgets.QGridLayout.setDefaultPositioning?4(int, Qt.Orientation) -QtWidgets.QGridLayout.getItemPosition?4(int) -> (int, int, int, int) -QtWidgets.QGridLayout.setHorizontalSpacing?4(int) -QtWidgets.QGridLayout.horizontalSpacing?4() -> int -QtWidgets.QGridLayout.setVerticalSpacing?4(int) -QtWidgets.QGridLayout.verticalSpacing?4() -> int -QtWidgets.QGridLayout.setSpacing?4(int) -QtWidgets.QGridLayout.spacing?4() -> int -QtWidgets.QGridLayout.itemAtPosition?4(int, int) -> QLayoutItem -QtWidgets.QGridLayout.addItem?4(QLayoutItem) -QtWidgets.QGroupBox?1(QWidget parent=None) -QtWidgets.QGroupBox.__init__?1(self, QWidget parent=None) -QtWidgets.QGroupBox?1(QString, QWidget parent=None) -QtWidgets.QGroupBox.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QGroupBox.title?4() -> QString -QtWidgets.QGroupBox.setTitle?4(QString) -QtWidgets.QGroupBox.alignment?4() -> unknown-type -QtWidgets.QGroupBox.setAlignment?4(int) -QtWidgets.QGroupBox.minimumSizeHint?4() -> QSize -QtWidgets.QGroupBox.isFlat?4() -> bool -QtWidgets.QGroupBox.setFlat?4(bool) -QtWidgets.QGroupBox.isCheckable?4() -> bool -QtWidgets.QGroupBox.setCheckable?4(bool) -QtWidgets.QGroupBox.isChecked?4() -> bool -QtWidgets.QGroupBox.setChecked?4(bool) -QtWidgets.QGroupBox.clicked?4(bool checked=False) -QtWidgets.QGroupBox.toggled?4(bool) -QtWidgets.QGroupBox.initStyleOption?4(QStyleOptionGroupBox) -QtWidgets.QGroupBox.event?4(QEvent) -> bool -QtWidgets.QGroupBox.childEvent?4(QChildEvent) -QtWidgets.QGroupBox.resizeEvent?4(QResizeEvent) -QtWidgets.QGroupBox.paintEvent?4(QPaintEvent) -QtWidgets.QGroupBox.focusInEvent?4(QFocusEvent) -QtWidgets.QGroupBox.changeEvent?4(QEvent) -QtWidgets.QGroupBox.mousePressEvent?4(QMouseEvent) -QtWidgets.QGroupBox.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QGroupBox.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QHeaderView.ResizeMode?10 -QtWidgets.QHeaderView.ResizeMode.Interactive?10 -QtWidgets.QHeaderView.ResizeMode.Fixed?10 -QtWidgets.QHeaderView.ResizeMode.Stretch?10 -QtWidgets.QHeaderView.ResizeMode.ResizeToContents?10 -QtWidgets.QHeaderView.ResizeMode.Custom?10 -QtWidgets.QHeaderView?1(Qt.Orientation, QWidget parent=None) -QtWidgets.QHeaderView.__init__?1(self, Qt.Orientation, QWidget parent=None) -QtWidgets.QHeaderView.setModel?4(QAbstractItemModel) -QtWidgets.QHeaderView.orientation?4() -> Qt.Orientation -QtWidgets.QHeaderView.offset?4() -> int -QtWidgets.QHeaderView.length?4() -> int -QtWidgets.QHeaderView.sizeHint?4() -> QSize -QtWidgets.QHeaderView.sectionSizeHint?4(int) -> int -QtWidgets.QHeaderView.visualIndexAt?4(int) -> int -QtWidgets.QHeaderView.logicalIndexAt?4(int) -> int -QtWidgets.QHeaderView.sectionSize?4(int) -> int -QtWidgets.QHeaderView.sectionPosition?4(int) -> int -QtWidgets.QHeaderView.sectionViewportPosition?4(int) -> int -QtWidgets.QHeaderView.moveSection?4(int, int) -QtWidgets.QHeaderView.resizeSection?4(int, int) -QtWidgets.QHeaderView.isSectionHidden?4(int) -> bool -QtWidgets.QHeaderView.setSectionHidden?4(int, bool) -QtWidgets.QHeaderView.count?4() -> int -QtWidgets.QHeaderView.visualIndex?4(int) -> int -QtWidgets.QHeaderView.logicalIndex?4(int) -> int -QtWidgets.QHeaderView.setHighlightSections?4(bool) -QtWidgets.QHeaderView.highlightSections?4() -> bool -QtWidgets.QHeaderView.stretchSectionCount?4() -> int -QtWidgets.QHeaderView.setSortIndicatorShown?4(bool) -QtWidgets.QHeaderView.isSortIndicatorShown?4() -> bool -QtWidgets.QHeaderView.setSortIndicator?4(int, Qt.SortOrder) -QtWidgets.QHeaderView.sortIndicatorSection?4() -> int -QtWidgets.QHeaderView.sortIndicatorOrder?4() -> Qt.SortOrder -QtWidgets.QHeaderView.stretchLastSection?4() -> bool -QtWidgets.QHeaderView.setStretchLastSection?4(bool) -QtWidgets.QHeaderView.sectionsMoved?4() -> bool -QtWidgets.QHeaderView.setOffset?4(int) -QtWidgets.QHeaderView.headerDataChanged?4(Qt.Orientation, int, int) -QtWidgets.QHeaderView.setOffsetToSectionPosition?4(int) -QtWidgets.QHeaderView.geometriesChanged?4() -QtWidgets.QHeaderView.sectionMoved?4(int, int, int) -QtWidgets.QHeaderView.sectionResized?4(int, int, int) -QtWidgets.QHeaderView.sectionPressed?4(int) -QtWidgets.QHeaderView.sectionClicked?4(int) -QtWidgets.QHeaderView.sectionDoubleClicked?4(int) -QtWidgets.QHeaderView.sectionCountChanged?4(int, int) -QtWidgets.QHeaderView.sectionHandleDoubleClicked?4(int) -QtWidgets.QHeaderView.updateSection?4(int) -QtWidgets.QHeaderView.resizeSections?4() -QtWidgets.QHeaderView.sectionsInserted?4(QModelIndex, int, int) -QtWidgets.QHeaderView.sectionsAboutToBeRemoved?4(QModelIndex, int, int) -QtWidgets.QHeaderView.initialize?4() -QtWidgets.QHeaderView.initializeSections?4() -QtWidgets.QHeaderView.initializeSections?4(int, int) -QtWidgets.QHeaderView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QHeaderView.event?4(QEvent) -> bool -QtWidgets.QHeaderView.viewportEvent?4(QEvent) -> bool -QtWidgets.QHeaderView.paintEvent?4(QPaintEvent) -QtWidgets.QHeaderView.mousePressEvent?4(QMouseEvent) -QtWidgets.QHeaderView.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QHeaderView.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QHeaderView.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QHeaderView.paintSection?4(QPainter, QRect, int) -QtWidgets.QHeaderView.sectionSizeFromContents?4(int) -> QSize -QtWidgets.QHeaderView.horizontalOffset?4() -> int -QtWidgets.QHeaderView.verticalOffset?4() -> int -QtWidgets.QHeaderView.updateGeometries?4() -QtWidgets.QHeaderView.scrollContentsBy?4(int, int) -QtWidgets.QHeaderView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) -QtWidgets.QHeaderView.rowsInserted?4(QModelIndex, int, int) -QtWidgets.QHeaderView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QHeaderView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint) -QtWidgets.QHeaderView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QHeaderView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QHeaderView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QHeaderView.setSelection?4(QRect, unknown-type) -QtWidgets.QHeaderView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QHeaderView.logicalIndexAt?4(int, int) -> int -QtWidgets.QHeaderView.logicalIndexAt?4(QPoint) -> int -QtWidgets.QHeaderView.hideSection?4(int) -QtWidgets.QHeaderView.showSection?4(int) -QtWidgets.QHeaderView.resizeSections?4(QHeaderView.ResizeMode) -QtWidgets.QHeaderView.hiddenSectionCount?4() -> int -QtWidgets.QHeaderView.defaultSectionSize?4() -> int -QtWidgets.QHeaderView.setDefaultSectionSize?4(int) -QtWidgets.QHeaderView.defaultAlignment?4() -> unknown-type -QtWidgets.QHeaderView.setDefaultAlignment?4(unknown-type) -QtWidgets.QHeaderView.sectionsHidden?4() -> bool -QtWidgets.QHeaderView.swapSections?4(int, int) -QtWidgets.QHeaderView.cascadingSectionResizes?4() -> bool -QtWidgets.QHeaderView.setCascadingSectionResizes?4(bool) -QtWidgets.QHeaderView.minimumSectionSize?4() -> int -QtWidgets.QHeaderView.setMinimumSectionSize?4(int) -QtWidgets.QHeaderView.saveState?4() -> QByteArray -QtWidgets.QHeaderView.restoreState?4(QByteArray) -> bool -QtWidgets.QHeaderView.reset?4() -QtWidgets.QHeaderView.setOffsetToLastSection?4() -QtWidgets.QHeaderView.sectionEntered?4(int) -QtWidgets.QHeaderView.sortIndicatorChanged?4(int, Qt.SortOrder) -QtWidgets.QHeaderView.initStyleOption?4(QStyleOptionHeader) -QtWidgets.QHeaderView.initStyleOptionForIndex?4(QStyleOptionHeader, int) -QtWidgets.QHeaderView.setSectionsMovable?4(bool) -QtWidgets.QHeaderView.sectionsMovable?4() -> bool -QtWidgets.QHeaderView.setSectionsClickable?4(bool) -QtWidgets.QHeaderView.sectionsClickable?4() -> bool -QtWidgets.QHeaderView.sectionResizeMode?4(int) -> QHeaderView.ResizeMode -QtWidgets.QHeaderView.setSectionResizeMode?4(int, QHeaderView.ResizeMode) -QtWidgets.QHeaderView.setSectionResizeMode?4(QHeaderView.ResizeMode) -QtWidgets.QHeaderView.setVisible?4(bool) -QtWidgets.QHeaderView.setResizeContentsPrecision?4(int) -QtWidgets.QHeaderView.resizeContentsPrecision?4() -> int -QtWidgets.QHeaderView.maximumSectionSize?4() -> int -QtWidgets.QHeaderView.setMaximumSectionSize?4(int) -QtWidgets.QHeaderView.resetDefaultSectionSize?4() -QtWidgets.QHeaderView.setFirstSectionMovable?4(bool) -QtWidgets.QHeaderView.isFirstSectionMovable?4() -> bool -QtWidgets.QHeaderView.setSortIndicatorClearable?4(bool) -QtWidgets.QHeaderView.isSortIndicatorClearable?4() -> bool -QtWidgets.QHeaderView.sortIndicatorClearableChanged?4(bool) -QtWidgets.QInputDialog.InputMode?10 -QtWidgets.QInputDialog.InputMode.TextInput?10 -QtWidgets.QInputDialog.InputMode.IntInput?10 -QtWidgets.QInputDialog.InputMode.DoubleInput?10 -QtWidgets.QInputDialog.InputDialogOption?10 -QtWidgets.QInputDialog.InputDialogOption.NoButtons?10 -QtWidgets.QInputDialog.InputDialogOption.UseListViewForComboBoxItems?10 -QtWidgets.QInputDialog.InputDialogOption.UsePlainTextEditForTextInput?10 -QtWidgets.QInputDialog?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QInputDialog.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QInputDialog.getText?4(QWidget, QString, QString, QLineEdit.EchoMode echo=QLineEdit.Normal, QString text='', unknown-type flags=Qt.WindowFlags(), unknown-type inputMethodHints=Qt.ImhNone) -> (QString, bool) -QtWidgets.QInputDialog.getInt?4(QWidget, QString, QString, int value=0, int min=-2147483647, int max=2147483647, int step=1, unknown-type flags=Qt.WindowFlags()) -> (int, bool) -QtWidgets.QInputDialog.getDouble?4(QWidget, QString, QString, float value=0, float min=-2147483647, float max=2147483647, int decimals=1, unknown-type flags=Qt.WindowFlags(), float step=1) -> (float, bool) -QtWidgets.QInputDialog.getItem?4(QWidget, QString, QString, QStringList, int current=0, bool editable=True, unknown-type flags=Qt.WindowFlags(), unknown-type inputMethodHints=Qt.ImhNone) -> (QString, bool) -QtWidgets.QInputDialog.getMultiLineText?4(QWidget, QString, QString, QString text='', unknown-type flags=Qt.WindowFlags(), unknown-type inputMethodHints=Qt.ImhNone) -> (QString, bool) -QtWidgets.QInputDialog.setInputMode?4(QInputDialog.InputMode) -QtWidgets.QInputDialog.inputMode?4() -> QInputDialog.InputMode -QtWidgets.QInputDialog.setLabelText?4(QString) -QtWidgets.QInputDialog.labelText?4() -> QString -QtWidgets.QInputDialog.setOption?4(QInputDialog.InputDialogOption, bool on=True) -QtWidgets.QInputDialog.testOption?4(QInputDialog.InputDialogOption) -> bool -QtWidgets.QInputDialog.setOptions?4(unknown-type) -QtWidgets.QInputDialog.options?4() -> unknown-type -QtWidgets.QInputDialog.setTextValue?4(QString) -QtWidgets.QInputDialog.textValue?4() -> QString -QtWidgets.QInputDialog.setTextEchoMode?4(QLineEdit.EchoMode) -QtWidgets.QInputDialog.textEchoMode?4() -> QLineEdit.EchoMode -QtWidgets.QInputDialog.setComboBoxEditable?4(bool) -QtWidgets.QInputDialog.isComboBoxEditable?4() -> bool -QtWidgets.QInputDialog.setComboBoxItems?4(QStringList) -QtWidgets.QInputDialog.comboBoxItems?4() -> QStringList -QtWidgets.QInputDialog.setIntValue?4(int) -QtWidgets.QInputDialog.intValue?4() -> int -QtWidgets.QInputDialog.setIntMinimum?4(int) -QtWidgets.QInputDialog.intMinimum?4() -> int -QtWidgets.QInputDialog.setIntMaximum?4(int) -QtWidgets.QInputDialog.intMaximum?4() -> int -QtWidgets.QInputDialog.setIntRange?4(int, int) -QtWidgets.QInputDialog.setIntStep?4(int) -QtWidgets.QInputDialog.intStep?4() -> int -QtWidgets.QInputDialog.setDoubleValue?4(float) -QtWidgets.QInputDialog.doubleValue?4() -> float -QtWidgets.QInputDialog.setDoubleMinimum?4(float) -QtWidgets.QInputDialog.doubleMinimum?4() -> float -QtWidgets.QInputDialog.setDoubleMaximum?4(float) -QtWidgets.QInputDialog.doubleMaximum?4() -> float -QtWidgets.QInputDialog.setDoubleRange?4(float, float) -QtWidgets.QInputDialog.setDoubleDecimals?4(int) -QtWidgets.QInputDialog.doubleDecimals?4() -> int -QtWidgets.QInputDialog.setOkButtonText?4(QString) -QtWidgets.QInputDialog.okButtonText?4() -> QString -QtWidgets.QInputDialog.setCancelButtonText?4(QString) -QtWidgets.QInputDialog.cancelButtonText?4() -> QString -QtWidgets.QInputDialog.open?4() -QtWidgets.QInputDialog.open?4(Any) -QtWidgets.QInputDialog.minimumSizeHint?4() -> QSize -QtWidgets.QInputDialog.sizeHint?4() -> QSize -QtWidgets.QInputDialog.setVisible?4(bool) -QtWidgets.QInputDialog.done?4(int) -QtWidgets.QInputDialog.textValueChanged?4(QString) -QtWidgets.QInputDialog.textValueSelected?4(QString) -QtWidgets.QInputDialog.intValueChanged?4(int) -QtWidgets.QInputDialog.intValueSelected?4(int) -QtWidgets.QInputDialog.doubleValueChanged?4(float) -QtWidgets.QInputDialog.doubleValueSelected?4(float) -QtWidgets.QInputDialog.setDoubleStep?4(float) -QtWidgets.QInputDialog.doubleStep?4() -> float -QtWidgets.QItemDelegate?1(QObject parent=None) -QtWidgets.QItemDelegate.__init__?1(self, QObject parent=None) -QtWidgets.QItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) -QtWidgets.QItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize -QtWidgets.QItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget -QtWidgets.QItemDelegate.setEditorData?4(QWidget, QModelIndex) -QtWidgets.QItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) -QtWidgets.QItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) -QtWidgets.QItemDelegate.itemEditorFactory?4() -> QItemEditorFactory -QtWidgets.QItemDelegate.setItemEditorFactory?4(QItemEditorFactory) -QtWidgets.QItemDelegate.hasClipping?4() -> bool -QtWidgets.QItemDelegate.setClipping?4(bool) -QtWidgets.QItemDelegate.drawBackground?4(QPainter, QStyleOptionViewItem, QModelIndex) -QtWidgets.QItemDelegate.drawCheck?4(QPainter, QStyleOptionViewItem, QRect, Qt.CheckState) -QtWidgets.QItemDelegate.drawDecoration?4(QPainter, QStyleOptionViewItem, QRect, QPixmap) -QtWidgets.QItemDelegate.drawDisplay?4(QPainter, QStyleOptionViewItem, QRect, QString) -QtWidgets.QItemDelegate.drawFocus?4(QPainter, QStyleOptionViewItem, QRect) -QtWidgets.QItemDelegate.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool -QtWidgets.QItemEditorCreatorBase?1() -QtWidgets.QItemEditorCreatorBase.__init__?1(self) -QtWidgets.QItemEditorCreatorBase?1(QItemEditorCreatorBase) -QtWidgets.QItemEditorCreatorBase.__init__?1(self, QItemEditorCreatorBase) -QtWidgets.QItemEditorCreatorBase.createWidget?4(QWidget) -> QWidget -QtWidgets.QItemEditorCreatorBase.valuePropertyName?4() -> QByteArray -QtWidgets.QItemEditorFactory?1() -QtWidgets.QItemEditorFactory.__init__?1(self) -QtWidgets.QItemEditorFactory?1(QItemEditorFactory) -QtWidgets.QItemEditorFactory.__init__?1(self, QItemEditorFactory) -QtWidgets.QItemEditorFactory.createEditor?4(int, QWidget) -> QWidget -QtWidgets.QItemEditorFactory.valuePropertyName?4(int) -> QByteArray -QtWidgets.QItemEditorFactory.registerEditor?4(int, QItemEditorCreatorBase) -QtWidgets.QItemEditorFactory.defaultFactory?4() -> QItemEditorFactory -QtWidgets.QItemEditorFactory.setDefaultFactory?4(QItemEditorFactory) -QtWidgets.QKeySequenceEdit?1(QWidget parent=None) -QtWidgets.QKeySequenceEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QKeySequenceEdit?1(QKeySequence, QWidget parent=None) -QtWidgets.QKeySequenceEdit.__init__?1(self, QKeySequence, QWidget parent=None) -QtWidgets.QKeySequenceEdit.keySequence?4() -> QKeySequence -QtWidgets.QKeySequenceEdit.setKeySequence?4(QKeySequence) -QtWidgets.QKeySequenceEdit.clear?4() -QtWidgets.QKeySequenceEdit.editingFinished?4() -QtWidgets.QKeySequenceEdit.keySequenceChanged?4(QKeySequence) -QtWidgets.QKeySequenceEdit.event?4(QEvent) -> bool -QtWidgets.QKeySequenceEdit.keyPressEvent?4(QKeyEvent) -QtWidgets.QKeySequenceEdit.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QKeySequenceEdit.timerEvent?4(QTimerEvent) -QtWidgets.QKeySequenceEdit.focusOutEvent?4(QFocusEvent) -QtWidgets.QKeySequenceEdit.setClearButtonEnabled?4(bool) -QtWidgets.QKeySequenceEdit.isClearButtonEnabled?4() -> bool -QtWidgets.QKeySequenceEdit.maximumSequenceLength?4() -> int -QtWidgets.QKeySequenceEdit.setFinishingKeyCombinations?4(unknown-type) -QtWidgets.QKeySequenceEdit.finishingKeyCombinations?4() -> unknown-type -QtWidgets.QKeySequenceEdit.setMaximumSequenceLength?4(int) -QtWidgets.QLabel?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QLabel.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QLabel?1(QString, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QLabel.__init__?1(self, QString, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QLabel.text?4() -> QString -QtWidgets.QLabel.pixmap?4() -> QPixmap -QtWidgets.QLabel.picture?4() -> QPicture -QtWidgets.QLabel.movie?4() -> QMovie -QtWidgets.QLabel.textFormat?4() -> Qt.TextFormat -QtWidgets.QLabel.setTextFormat?4(Qt.TextFormat) -QtWidgets.QLabel.alignment?4() -> unknown-type -QtWidgets.QLabel.setAlignment?4(unknown-type) -QtWidgets.QLabel.setWordWrap?4(bool) -QtWidgets.QLabel.wordWrap?4() -> bool -QtWidgets.QLabel.indent?4() -> int -QtWidgets.QLabel.setIndent?4(int) -QtWidgets.QLabel.margin?4() -> int -QtWidgets.QLabel.setMargin?4(int) -QtWidgets.QLabel.hasScaledContents?4() -> bool -QtWidgets.QLabel.setScaledContents?4(bool) -QtWidgets.QLabel.sizeHint?4() -> QSize -QtWidgets.QLabel.minimumSizeHint?4() -> QSize -QtWidgets.QLabel.setBuddy?4(QWidget) -QtWidgets.QLabel.buddy?4() -> QWidget -QtWidgets.QLabel.heightForWidth?4(int) -> int -QtWidgets.QLabel.openExternalLinks?4() -> bool -QtWidgets.QLabel.setTextInteractionFlags?4(unknown-type) -QtWidgets.QLabel.textInteractionFlags?4() -> unknown-type -QtWidgets.QLabel.setOpenExternalLinks?4(bool) -QtWidgets.QLabel.clear?4() -QtWidgets.QLabel.setMovie?4(QMovie) -QtWidgets.QLabel.setNum?4(float) -QtWidgets.QLabel.setNum?4(int) -QtWidgets.QLabel.setPicture?4(QPicture) -QtWidgets.QLabel.setPixmap?4(QPixmap) -QtWidgets.QLabel.setText?4(QString) -QtWidgets.QLabel.linkActivated?4(QString) -QtWidgets.QLabel.linkHovered?4(QString) -QtWidgets.QLabel.event?4(QEvent) -> bool -QtWidgets.QLabel.paintEvent?4(QPaintEvent) -QtWidgets.QLabel.changeEvent?4(QEvent) -QtWidgets.QLabel.keyPressEvent?4(QKeyEvent) -QtWidgets.QLabel.mousePressEvent?4(QMouseEvent) -QtWidgets.QLabel.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QLabel.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QLabel.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QLabel.focusInEvent?4(QFocusEvent) -QtWidgets.QLabel.focusOutEvent?4(QFocusEvent) -QtWidgets.QLabel.focusNextPrevChild?4(bool) -> bool -QtWidgets.QLabel.setSelection?4(int, int) -QtWidgets.QLabel.hasSelectedText?4() -> bool -QtWidgets.QLabel.selectedText?4() -> QString -QtWidgets.QLabel.selectionStart?4() -> int -QtWidgets.QLabel.resourceProvider?4() -> Callable[..., None] -QtWidgets.QLabel.setResourceProvider?4(Callable[..., None]) -QtWidgets.QSpacerItem?1(int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) -QtWidgets.QSpacerItem.__init__?1(self, int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) -QtWidgets.QSpacerItem?1(QSpacerItem) -QtWidgets.QSpacerItem.__init__?1(self, QSpacerItem) -QtWidgets.QSpacerItem.changeSize?4(int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) -QtWidgets.QSpacerItem.sizeHint?4() -> QSize -QtWidgets.QSpacerItem.minimumSize?4() -> QSize -QtWidgets.QSpacerItem.maximumSize?4() -> QSize -QtWidgets.QSpacerItem.expandingDirections?4() -> unknown-type -QtWidgets.QSpacerItem.isEmpty?4() -> bool -QtWidgets.QSpacerItem.setGeometry?4(QRect) -QtWidgets.QSpacerItem.geometry?4() -> QRect -QtWidgets.QSpacerItem.spacerItem?4() -> QSpacerItem -QtWidgets.QSpacerItem.sizePolicy?4() -> QSizePolicy -QtWidgets.QWidgetItem?1(QWidget) -QtWidgets.QWidgetItem.__init__?1(self, QWidget) -QtWidgets.QWidgetItem.sizeHint?4() -> QSize -QtWidgets.QWidgetItem.minimumSize?4() -> QSize -QtWidgets.QWidgetItem.maximumSize?4() -> QSize -QtWidgets.QWidgetItem.expandingDirections?4() -> unknown-type -QtWidgets.QWidgetItem.isEmpty?4() -> bool -QtWidgets.QWidgetItem.setGeometry?4(QRect) -QtWidgets.QWidgetItem.geometry?4() -> QRect -QtWidgets.QWidgetItem.widget?4() -> QWidget -QtWidgets.QWidgetItem.hasHeightForWidth?4() -> bool -QtWidgets.QWidgetItem.heightForWidth?4(int) -> int -QtWidgets.QWidgetItem.controlTypes?4() -> unknown-type -QtWidgets.QWidgetItem.minimumHeightForWidth?4(int) -> int -QtWidgets.QLCDNumber.SegmentStyle?10 -QtWidgets.QLCDNumber.SegmentStyle.Outline?10 -QtWidgets.QLCDNumber.SegmentStyle.Filled?10 -QtWidgets.QLCDNumber.SegmentStyle.Flat?10 -QtWidgets.QLCDNumber.Mode?10 -QtWidgets.QLCDNumber.Mode.Hex?10 -QtWidgets.QLCDNumber.Mode.Dec?10 -QtWidgets.QLCDNumber.Mode.Oct?10 -QtWidgets.QLCDNumber.Mode.Bin?10 -QtWidgets.QLCDNumber?1(QWidget parent=None) -QtWidgets.QLCDNumber.__init__?1(self, QWidget parent=None) -QtWidgets.QLCDNumber?1(int, QWidget parent=None) -QtWidgets.QLCDNumber.__init__?1(self, int, QWidget parent=None) -QtWidgets.QLCDNumber.smallDecimalPoint?4() -> bool -QtWidgets.QLCDNumber.digitCount?4() -> int -QtWidgets.QLCDNumber.setDigitCount?4(int) -QtWidgets.QLCDNumber.setNumDigits?4(int) -QtWidgets.QLCDNumber.checkOverflow?4(float) -> bool -QtWidgets.QLCDNumber.checkOverflow?4(int) -> bool -QtWidgets.QLCDNumber.mode?4() -> QLCDNumber.Mode -QtWidgets.QLCDNumber.setMode?4(QLCDNumber.Mode) -QtWidgets.QLCDNumber.segmentStyle?4() -> QLCDNumber.SegmentStyle -QtWidgets.QLCDNumber.setSegmentStyle?4(QLCDNumber.SegmentStyle) -QtWidgets.QLCDNumber.value?4() -> float -QtWidgets.QLCDNumber.intValue?4() -> int -QtWidgets.QLCDNumber.sizeHint?4() -> QSize -QtWidgets.QLCDNumber.display?4(QString) -QtWidgets.QLCDNumber.display?4(float) -QtWidgets.QLCDNumber.display?4(int) -QtWidgets.QLCDNumber.setHexMode?4() -QtWidgets.QLCDNumber.setDecMode?4() -QtWidgets.QLCDNumber.setOctMode?4() -QtWidgets.QLCDNumber.setBinMode?4() -QtWidgets.QLCDNumber.setSmallDecimalPoint?4(bool) -QtWidgets.QLCDNumber.overflow?4() -QtWidgets.QLCDNumber.event?4(QEvent) -> bool -QtWidgets.QLCDNumber.paintEvent?4(QPaintEvent) -QtWidgets.QLineEdit.ActionPosition?10 -QtWidgets.QLineEdit.ActionPosition.LeadingPosition?10 -QtWidgets.QLineEdit.ActionPosition.TrailingPosition?10 -QtWidgets.QLineEdit.EchoMode?10 -QtWidgets.QLineEdit.EchoMode.Normal?10 -QtWidgets.QLineEdit.EchoMode.NoEcho?10 -QtWidgets.QLineEdit.EchoMode.Password?10 -QtWidgets.QLineEdit.EchoMode.PasswordEchoOnEdit?10 -QtWidgets.QLineEdit?1(QWidget parent=None) -QtWidgets.QLineEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QLineEdit?1(QString, QWidget parent=None) -QtWidgets.QLineEdit.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QLineEdit.text?4() -> QString -QtWidgets.QLineEdit.displayText?4() -> QString -QtWidgets.QLineEdit.maxLength?4() -> int -QtWidgets.QLineEdit.setMaxLength?4(int) -QtWidgets.QLineEdit.setFrame?4(bool) -QtWidgets.QLineEdit.hasFrame?4() -> bool -QtWidgets.QLineEdit.echoMode?4() -> QLineEdit.EchoMode -QtWidgets.QLineEdit.setEchoMode?4(QLineEdit.EchoMode) -QtWidgets.QLineEdit.isReadOnly?4() -> bool -QtWidgets.QLineEdit.setReadOnly?4(bool) -QtWidgets.QLineEdit.setValidator?4(QValidator) -QtWidgets.QLineEdit.validator?4() -> QValidator -QtWidgets.QLineEdit.sizeHint?4() -> QSize -QtWidgets.QLineEdit.minimumSizeHint?4() -> QSize -QtWidgets.QLineEdit.cursorPosition?4() -> int -QtWidgets.QLineEdit.setCursorPosition?4(int) -QtWidgets.QLineEdit.cursorPositionAt?4(QPoint) -> int -QtWidgets.QLineEdit.setAlignment?4(unknown-type) -QtWidgets.QLineEdit.alignment?4() -> unknown-type -QtWidgets.QLineEdit.cursorForward?4(bool, int steps=1) -QtWidgets.QLineEdit.cursorBackward?4(bool, int steps=1) -QtWidgets.QLineEdit.cursorWordForward?4(bool) -QtWidgets.QLineEdit.cursorWordBackward?4(bool) -QtWidgets.QLineEdit.backspace?4() -QtWidgets.QLineEdit.del_?4() -QtWidgets.QLineEdit.home?4(bool) -QtWidgets.QLineEdit.end?4(bool) -QtWidgets.QLineEdit.isModified?4() -> bool -QtWidgets.QLineEdit.setModified?4(bool) -QtWidgets.QLineEdit.setSelection?4(int, int) -QtWidgets.QLineEdit.hasSelectedText?4() -> bool -QtWidgets.QLineEdit.selectedText?4() -> QString -QtWidgets.QLineEdit.selectionStart?4() -> int -QtWidgets.QLineEdit.isUndoAvailable?4() -> bool -QtWidgets.QLineEdit.isRedoAvailable?4() -> bool -QtWidgets.QLineEdit.setDragEnabled?4(bool) -QtWidgets.QLineEdit.dragEnabled?4() -> bool -QtWidgets.QLineEdit.inputMask?4() -> QString -QtWidgets.QLineEdit.setInputMask?4(QString) -QtWidgets.QLineEdit.hasAcceptableInput?4() -> bool -QtWidgets.QLineEdit.setText?4(QString) -QtWidgets.QLineEdit.clear?4() -QtWidgets.QLineEdit.selectAll?4() -QtWidgets.QLineEdit.undo?4() -QtWidgets.QLineEdit.redo?4() -QtWidgets.QLineEdit.cut?4() -QtWidgets.QLineEdit.copy?4() -QtWidgets.QLineEdit.paste?4() -QtWidgets.QLineEdit.deselect?4() -QtWidgets.QLineEdit.insert?4(QString) -QtWidgets.QLineEdit.createStandardContextMenu?4() -> QMenu -QtWidgets.QLineEdit.textChanged?4(QString) -QtWidgets.QLineEdit.textEdited?4(QString) -QtWidgets.QLineEdit.cursorPositionChanged?4(int, int) -QtWidgets.QLineEdit.returnPressed?4() -QtWidgets.QLineEdit.editingFinished?4() -QtWidgets.QLineEdit.selectionChanged?4() -QtWidgets.QLineEdit.initStyleOption?4(QStyleOptionFrame) -QtWidgets.QLineEdit.mousePressEvent?4(QMouseEvent) -QtWidgets.QLineEdit.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QLineEdit.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QLineEdit.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QLineEdit.keyPressEvent?4(QKeyEvent) -QtWidgets.QLineEdit.focusInEvent?4(QFocusEvent) -QtWidgets.QLineEdit.focusOutEvent?4(QFocusEvent) -QtWidgets.QLineEdit.paintEvent?4(QPaintEvent) -QtWidgets.QLineEdit.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QLineEdit.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QLineEdit.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QLineEdit.dropEvent?4(QDropEvent) -QtWidgets.QLineEdit.changeEvent?4(QEvent) -QtWidgets.QLineEdit.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QLineEdit.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QLineEdit.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QLineEdit.cursorRect?4() -> QRect -QtWidgets.QLineEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QLineEdit.event?4(QEvent) -> bool -QtWidgets.QLineEdit.timerEvent?4(QTimerEvent) -QtWidgets.QLineEdit.setCompleter?4(QCompleter) -QtWidgets.QLineEdit.completer?4() -> QCompleter -QtWidgets.QLineEdit.setTextMargins?4(int, int, int, int) -QtWidgets.QLineEdit.setTextMargins?4(QMargins) -QtWidgets.QLineEdit.textMargins?4() -> QMargins -QtWidgets.QLineEdit.placeholderText?4() -> QString -QtWidgets.QLineEdit.setPlaceholderText?4(QString) -QtWidgets.QLineEdit.setCursorMoveStyle?4(Qt.CursorMoveStyle) -QtWidgets.QLineEdit.cursorMoveStyle?4() -> Qt.CursorMoveStyle -QtWidgets.QLineEdit.setClearButtonEnabled?4(bool) -QtWidgets.QLineEdit.isClearButtonEnabled?4() -> bool -QtWidgets.QLineEdit.addAction?4(QAction) -QtWidgets.QLineEdit.addAction?4(QAction, QLineEdit.ActionPosition) -QtWidgets.QLineEdit.addAction?4(QIcon, QLineEdit.ActionPosition) -> QAction -QtWidgets.QLineEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant -QtWidgets.QLineEdit.selectionEnd?4() -> int -QtWidgets.QLineEdit.selectionLength?4() -> int -QtWidgets.QLineEdit.inputRejected?4() -QtWidgets.QListView.ViewMode?10 -QtWidgets.QListView.ViewMode.ListMode?10 -QtWidgets.QListView.ViewMode.IconMode?10 -QtWidgets.QListView.LayoutMode?10 -QtWidgets.QListView.LayoutMode.SinglePass?10 -QtWidgets.QListView.LayoutMode.Batched?10 -QtWidgets.QListView.ResizeMode?10 -QtWidgets.QListView.ResizeMode.Fixed?10 -QtWidgets.QListView.ResizeMode.Adjust?10 -QtWidgets.QListView.Flow?10 -QtWidgets.QListView.Flow.LeftToRight?10 -QtWidgets.QListView.Flow.TopToBottom?10 -QtWidgets.QListView.Movement?10 -QtWidgets.QListView.Movement.Static?10 -QtWidgets.QListView.Movement.Free?10 -QtWidgets.QListView.Movement.Snap?10 -QtWidgets.QListView?1(QWidget parent=None) -QtWidgets.QListView.__init__?1(self, QWidget parent=None) -QtWidgets.QListView.setMovement?4(QListView.Movement) -QtWidgets.QListView.movement?4() -> QListView.Movement -QtWidgets.QListView.setFlow?4(QListView.Flow) -QtWidgets.QListView.flow?4() -> QListView.Flow -QtWidgets.QListView.setWrapping?4(bool) -QtWidgets.QListView.isWrapping?4() -> bool -QtWidgets.QListView.setResizeMode?4(QListView.ResizeMode) -QtWidgets.QListView.resizeMode?4() -> QListView.ResizeMode -QtWidgets.QListView.setLayoutMode?4(QListView.LayoutMode) -QtWidgets.QListView.layoutMode?4() -> QListView.LayoutMode -QtWidgets.QListView.setSpacing?4(int) -QtWidgets.QListView.spacing?4() -> int -QtWidgets.QListView.setGridSize?4(QSize) -QtWidgets.QListView.gridSize?4() -> QSize -QtWidgets.QListView.setViewMode?4(QListView.ViewMode) -QtWidgets.QListView.viewMode?4() -> QListView.ViewMode -QtWidgets.QListView.clearPropertyFlags?4() -QtWidgets.QListView.isRowHidden?4(int) -> bool -QtWidgets.QListView.setRowHidden?4(int, bool) -QtWidgets.QListView.setModelColumn?4(int) -QtWidgets.QListView.modelColumn?4() -> int -QtWidgets.QListView.setUniformItemSizes?4(bool) -QtWidgets.QListView.uniformItemSizes?4() -> bool -QtWidgets.QListView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QListView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QListView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QListView.reset?4() -QtWidgets.QListView.setRootIndex?4(QModelIndex) -QtWidgets.QListView.indexesMoved?4(unknown-type) -QtWidgets.QListView.scrollContentsBy?4(int, int) -QtWidgets.QListView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) -QtWidgets.QListView.rowsInserted?4(QModelIndex, int, int) -QtWidgets.QListView.rowsAboutToBeRemoved?4(QModelIndex, int, int) -QtWidgets.QListView.event?4(QEvent) -> bool -QtWidgets.QListView.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QListView.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QListView.timerEvent?4(QTimerEvent) -QtWidgets.QListView.resizeEvent?4(QResizeEvent) -QtWidgets.QListView.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QListView.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QListView.dropEvent?4(QDropEvent) -QtWidgets.QListView.wheelEvent?4(QWheelEvent) -QtWidgets.QListView.startDrag?4(unknown-type) -QtWidgets.QListView.paintEvent?4(QPaintEvent) -QtWidgets.QListView.horizontalOffset?4() -> int -QtWidgets.QListView.verticalOffset?4() -> int -QtWidgets.QListView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QListView.rectForIndex?4(QModelIndex) -> QRect -QtWidgets.QListView.setPositionForIndex?4(QPoint, QModelIndex) -QtWidgets.QListView.setSelection?4(QRect, unknown-type) -QtWidgets.QListView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QListView.selectedIndexes?4() -> unknown-type -QtWidgets.QListView.updateGeometries?4() -QtWidgets.QListView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QListView.viewportSizeHint?4() -> QSize -QtWidgets.QListView.setBatchSize?4(int) -QtWidgets.QListView.batchSize?4() -> int -QtWidgets.QListView.setWordWrap?4(bool) -QtWidgets.QListView.wordWrap?4() -> bool -QtWidgets.QListView.setSelectionRectVisible?4(bool) -QtWidgets.QListView.isSelectionRectVisible?4() -> bool -QtWidgets.QListView.selectionChanged?4(QItemSelection, QItemSelection) -QtWidgets.QListView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QListView.initViewItemOption?4(QStyleOptionViewItem) -QtWidgets.QListView.setItemAlignment?4(unknown-type) -QtWidgets.QListView.itemAlignment?4() -> unknown-type -QtWidgets.QListWidgetItem.ItemType?10 -QtWidgets.QListWidgetItem.ItemType.Type?10 -QtWidgets.QListWidgetItem.ItemType.UserType?10 -QtWidgets.QListWidgetItem?1(QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem.__init__?1(self, QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem?1(QString, QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem.__init__?1(self, QString, QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem?1(QIcon, QString, QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem.__init__?1(self, QIcon, QString, QListWidget parent=None, int type=QListWidgetItem.Type) -QtWidgets.QListWidgetItem?1(QListWidgetItem) -QtWidgets.QListWidgetItem.__init__?1(self, QListWidgetItem) -QtWidgets.QListWidgetItem.clone?4() -> QListWidgetItem -QtWidgets.QListWidgetItem.listWidget?4() -> QListWidget -QtWidgets.QListWidgetItem.flags?4() -> unknown-type -QtWidgets.QListWidgetItem.text?4() -> QString -QtWidgets.QListWidgetItem.icon?4() -> QIcon -QtWidgets.QListWidgetItem.statusTip?4() -> QString -QtWidgets.QListWidgetItem.toolTip?4() -> QString -QtWidgets.QListWidgetItem.whatsThis?4() -> QString -QtWidgets.QListWidgetItem.font?4() -> QFont -QtWidgets.QListWidgetItem.textAlignment?4() -> int -QtWidgets.QListWidgetItem.setTextAlignment?4(unknown-type) -QtWidgets.QListWidgetItem.setTextAlignment?4(int) -QtWidgets.QListWidgetItem.checkState?4() -> Qt.CheckState -QtWidgets.QListWidgetItem.setCheckState?4(Qt.CheckState) -QtWidgets.QListWidgetItem.sizeHint?4() -> QSize -QtWidgets.QListWidgetItem.setSizeHint?4(QSize) -QtWidgets.QListWidgetItem.data?4(int) -> QVariant -QtWidgets.QListWidgetItem.setData?4(int, QVariant) -QtWidgets.QListWidgetItem.read?4(QDataStream) -QtWidgets.QListWidgetItem.write?4(QDataStream) -QtWidgets.QListWidgetItem.type?4() -> int -QtWidgets.QListWidgetItem.setFlags?4(unknown-type) -QtWidgets.QListWidgetItem.setText?4(QString) -QtWidgets.QListWidgetItem.setIcon?4(QIcon) -QtWidgets.QListWidgetItem.setStatusTip?4(QString) -QtWidgets.QListWidgetItem.setToolTip?4(QString) -QtWidgets.QListWidgetItem.setWhatsThis?4(QString) -QtWidgets.QListWidgetItem.setFont?4(QFont) -QtWidgets.QListWidgetItem.background?4() -> QBrush -QtWidgets.QListWidgetItem.setBackground?4(QBrush) -QtWidgets.QListWidgetItem.foreground?4() -> QBrush -QtWidgets.QListWidgetItem.setForeground?4(QBrush) -QtWidgets.QListWidgetItem.setSelected?4(bool) -QtWidgets.QListWidgetItem.isSelected?4() -> bool -QtWidgets.QListWidgetItem.setHidden?4(bool) -QtWidgets.QListWidgetItem.isHidden?4() -> bool -QtWidgets.QListWidget?1(QWidget parent=None) -QtWidgets.QListWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QListWidget.item?4(int) -> QListWidgetItem -QtWidgets.QListWidget.row?4(QListWidgetItem) -> int -QtWidgets.QListWidget.insertItem?4(int, QListWidgetItem) -QtWidgets.QListWidget.insertItem?4(int, QString) -QtWidgets.QListWidget.insertItems?4(int, QStringList) -QtWidgets.QListWidget.addItem?4(QListWidgetItem) -QtWidgets.QListWidget.addItem?4(QString) -QtWidgets.QListWidget.addItems?4(QStringList) -QtWidgets.QListWidget.takeItem?4(int) -> QListWidgetItem -QtWidgets.QListWidget.count?4() -> int -QtWidgets.QListWidget.currentItem?4() -> QListWidgetItem -QtWidgets.QListWidget.setCurrentItem?4(QListWidgetItem) -QtWidgets.QListWidget.setCurrentItem?4(QListWidgetItem, unknown-type) -QtWidgets.QListWidget.currentRow?4() -> int -QtWidgets.QListWidget.setCurrentRow?4(int) -QtWidgets.QListWidget.setCurrentRow?4(int, unknown-type) -QtWidgets.QListWidget.itemAt?4(QPoint) -> QListWidgetItem -QtWidgets.QListWidget.itemAt?4(int, int) -> QListWidgetItem -QtWidgets.QListWidget.itemWidget?4(QListWidgetItem) -> QWidget -QtWidgets.QListWidget.setItemWidget?4(QListWidgetItem, QWidget) -QtWidgets.QListWidget.visualItemRect?4(QListWidgetItem) -> QRect -QtWidgets.QListWidget.sortItems?4(Qt.SortOrder order=Qt.AscendingOrder) -QtWidgets.QListWidget.editItem?4(QListWidgetItem) -QtWidgets.QListWidget.openPersistentEditor?4(QListWidgetItem) -QtWidgets.QListWidget.closePersistentEditor?4(QListWidgetItem) -QtWidgets.QListWidget.selectedItems?4() -> unknown-type -QtWidgets.QListWidget.findItems?4(QString, unknown-type) -> unknown-type -QtWidgets.QListWidget.clear?4() -QtWidgets.QListWidget.scrollToItem?4(QListWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QListWidget.itemPressed?4(QListWidgetItem) -QtWidgets.QListWidget.itemClicked?4(QListWidgetItem) -QtWidgets.QListWidget.itemDoubleClicked?4(QListWidgetItem) -QtWidgets.QListWidget.itemActivated?4(QListWidgetItem) -QtWidgets.QListWidget.itemEntered?4(QListWidgetItem) -QtWidgets.QListWidget.itemChanged?4(QListWidgetItem) -QtWidgets.QListWidget.currentItemChanged?4(QListWidgetItem, QListWidgetItem) -QtWidgets.QListWidget.currentTextChanged?4(QString) -QtWidgets.QListWidget.currentRowChanged?4(int) -QtWidgets.QListWidget.itemSelectionChanged?4() -QtWidgets.QListWidget.mimeTypes?4() -> QStringList -QtWidgets.QListWidget.mimeData?4(unknown-type) -> QMimeData -QtWidgets.QListWidget.dropMimeData?4(int, QMimeData, Qt.DropAction) -> bool -QtWidgets.QListWidget.supportedDropActions?4() -> unknown-type -QtWidgets.QListWidget.event?4(QEvent) -> bool -QtWidgets.QListWidget.dropEvent?4(QDropEvent) -QtWidgets.QListWidget.items?4(QMimeData) -> unknown-type -QtWidgets.QListWidget.indexFromItem?4(QListWidgetItem) -> QModelIndex -QtWidgets.QListWidget.itemFromIndex?4(QModelIndex) -> QListWidgetItem -QtWidgets.QListWidget.setSortingEnabled?4(bool) -QtWidgets.QListWidget.isSortingEnabled?4() -> bool -QtWidgets.QListWidget.removeItemWidget?4(QListWidgetItem) -QtWidgets.QListWidget.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QListWidget.isPersistentEditorOpen?4(QListWidgetItem) -> bool -QtWidgets.QMainWindow.DockOption?10 -QtWidgets.QMainWindow.DockOption.AnimatedDocks?10 -QtWidgets.QMainWindow.DockOption.AllowNestedDocks?10 -QtWidgets.QMainWindow.DockOption.AllowTabbedDocks?10 -QtWidgets.QMainWindow.DockOption.ForceTabbedDocks?10 -QtWidgets.QMainWindow.DockOption.VerticalTabs?10 -QtWidgets.QMainWindow.DockOption.GroupedDragging?10 -QtWidgets.QMainWindow?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QMainWindow.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QMainWindow.iconSize?4() -> QSize -QtWidgets.QMainWindow.setIconSize?4(QSize) -QtWidgets.QMainWindow.toolButtonStyle?4() -> Qt.ToolButtonStyle -QtWidgets.QMainWindow.setToolButtonStyle?4(Qt.ToolButtonStyle) -QtWidgets.QMainWindow.menuBar?4() -> QMenuBar -QtWidgets.QMainWindow.setMenuBar?4(QMenuBar) -QtWidgets.QMainWindow.statusBar?4() -> QStatusBar -QtWidgets.QMainWindow.setStatusBar?4(QStatusBar) -QtWidgets.QMainWindow.centralWidget?4() -> QWidget -QtWidgets.QMainWindow.setCentralWidget?4(QWidget) -QtWidgets.QMainWindow.setCorner?4(Qt.Corner, Qt.DockWidgetArea) -QtWidgets.QMainWindow.corner?4(Qt.Corner) -> Qt.DockWidgetArea -QtWidgets.QMainWindow.addToolBarBreak?4(Qt.ToolBarArea area=Qt.TopToolBarArea) -QtWidgets.QMainWindow.insertToolBarBreak?4(QToolBar) -QtWidgets.QMainWindow.addToolBar?4(Qt.ToolBarArea, QToolBar) -QtWidgets.QMainWindow.addToolBar?4(QToolBar) -QtWidgets.QMainWindow.addToolBar?4(QString) -> QToolBar -QtWidgets.QMainWindow.insertToolBar?4(QToolBar, QToolBar) -QtWidgets.QMainWindow.removeToolBar?4(QToolBar) -QtWidgets.QMainWindow.toolBarArea?4(QToolBar) -> Qt.ToolBarArea -QtWidgets.QMainWindow.addDockWidget?4(Qt.DockWidgetArea, QDockWidget) -QtWidgets.QMainWindow.addDockWidget?4(Qt.DockWidgetArea, QDockWidget, Qt.Orientation) -QtWidgets.QMainWindow.splitDockWidget?4(QDockWidget, QDockWidget, Qt.Orientation) -QtWidgets.QMainWindow.removeDockWidget?4(QDockWidget) -QtWidgets.QMainWindow.dockWidgetArea?4(QDockWidget) -> Qt.DockWidgetArea -QtWidgets.QMainWindow.saveState?4(int version=0) -> QByteArray -QtWidgets.QMainWindow.restoreState?4(QByteArray, int version=0) -> bool -QtWidgets.QMainWindow.createPopupMenu?4() -> QMenu -QtWidgets.QMainWindow.setAnimated?4(bool) -QtWidgets.QMainWindow.setDockNestingEnabled?4(bool) -QtWidgets.QMainWindow.iconSizeChanged?4(QSize) -QtWidgets.QMainWindow.toolButtonStyleChanged?4(Qt.ToolButtonStyle) -QtWidgets.QMainWindow.tabifiedDockWidgetActivated?4(QDockWidget) -QtWidgets.QMainWindow.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QMainWindow.event?4(QEvent) -> bool -QtWidgets.QMainWindow.isAnimated?4() -> bool -QtWidgets.QMainWindow.isDockNestingEnabled?4() -> bool -QtWidgets.QMainWindow.isSeparator?4(QPoint) -> bool -QtWidgets.QMainWindow.menuWidget?4() -> QWidget -QtWidgets.QMainWindow.setMenuWidget?4(QWidget) -QtWidgets.QMainWindow.tabifyDockWidget?4(QDockWidget, QDockWidget) -QtWidgets.QMainWindow.setDockOptions?4(unknown-type) -QtWidgets.QMainWindow.dockOptions?4() -> unknown-type -QtWidgets.QMainWindow.removeToolBarBreak?4(QToolBar) -QtWidgets.QMainWindow.toolBarBreak?4(QToolBar) -> bool -QtWidgets.QMainWindow.setUnifiedTitleAndToolBarOnMac?4(bool) -QtWidgets.QMainWindow.unifiedTitleAndToolBarOnMac?4() -> bool -QtWidgets.QMainWindow.restoreDockWidget?4(QDockWidget) -> bool -QtWidgets.QMainWindow.documentMode?4() -> bool -QtWidgets.QMainWindow.setDocumentMode?4(bool) -QtWidgets.QMainWindow.tabShape?4() -> QTabWidget.TabShape -QtWidgets.QMainWindow.setTabShape?4(QTabWidget.TabShape) -QtWidgets.QMainWindow.tabPosition?4(Qt.DockWidgetArea) -> QTabWidget.TabPosition -QtWidgets.QMainWindow.setTabPosition?4(unknown-type, QTabWidget.TabPosition) -QtWidgets.QMainWindow.tabifiedDockWidgets?4(QDockWidget) -> unknown-type -QtWidgets.QMainWindow.takeCentralWidget?4() -> QWidget -QtWidgets.QMainWindow.resizeDocks?4(unknown-type, unknown-type, Qt.Orientation) -QtWidgets.QMdiArea.WindowOrder?10 -QtWidgets.QMdiArea.WindowOrder.CreationOrder?10 -QtWidgets.QMdiArea.WindowOrder.StackingOrder?10 -QtWidgets.QMdiArea.WindowOrder.ActivationHistoryOrder?10 -QtWidgets.QMdiArea.ViewMode?10 -QtWidgets.QMdiArea.ViewMode.SubWindowView?10 -QtWidgets.QMdiArea.ViewMode.TabbedView?10 -QtWidgets.QMdiArea.AreaOption?10 -QtWidgets.QMdiArea.AreaOption.DontMaximizeSubWindowOnActivation?10 -QtWidgets.QMdiArea?1(QWidget parent=None) -QtWidgets.QMdiArea.__init__?1(self, QWidget parent=None) -QtWidgets.QMdiArea.sizeHint?4() -> QSize -QtWidgets.QMdiArea.minimumSizeHint?4() -> QSize -QtWidgets.QMdiArea.activeSubWindow?4() -> QMdiSubWindow -QtWidgets.QMdiArea.addSubWindow?4(QWidget, unknown-type flags=Qt.WindowFlags()) -> QMdiSubWindow -QtWidgets.QMdiArea.subWindowList?4(QMdiArea.WindowOrder order=QMdiArea.CreationOrder) -> unknown-type -QtWidgets.QMdiArea.currentSubWindow?4() -> QMdiSubWindow -QtWidgets.QMdiArea.removeSubWindow?4(QWidget) -QtWidgets.QMdiArea.background?4() -> QBrush -QtWidgets.QMdiArea.setBackground?4(QBrush) -QtWidgets.QMdiArea.setOption?4(QMdiArea.AreaOption, bool on=True) -QtWidgets.QMdiArea.testOption?4(QMdiArea.AreaOption) -> bool -QtWidgets.QMdiArea.subWindowActivated?4(QMdiSubWindow) -QtWidgets.QMdiArea.setActiveSubWindow?4(QMdiSubWindow) -QtWidgets.QMdiArea.tileSubWindows?4() -QtWidgets.QMdiArea.cascadeSubWindows?4() -QtWidgets.QMdiArea.closeActiveSubWindow?4() -QtWidgets.QMdiArea.closeAllSubWindows?4() -QtWidgets.QMdiArea.activateNextSubWindow?4() -QtWidgets.QMdiArea.activatePreviousSubWindow?4() -QtWidgets.QMdiArea.setupViewport?4(QWidget) -QtWidgets.QMdiArea.event?4(QEvent) -> bool -QtWidgets.QMdiArea.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QMdiArea.paintEvent?4(QPaintEvent) -QtWidgets.QMdiArea.childEvent?4(QChildEvent) -QtWidgets.QMdiArea.resizeEvent?4(QResizeEvent) -QtWidgets.QMdiArea.timerEvent?4(QTimerEvent) -QtWidgets.QMdiArea.showEvent?4(QShowEvent) -QtWidgets.QMdiArea.viewportEvent?4(QEvent) -> bool -QtWidgets.QMdiArea.scrollContentsBy?4(int, int) -QtWidgets.QMdiArea.activationOrder?4() -> QMdiArea.WindowOrder -QtWidgets.QMdiArea.setActivationOrder?4(QMdiArea.WindowOrder) -QtWidgets.QMdiArea.setViewMode?4(QMdiArea.ViewMode) -QtWidgets.QMdiArea.viewMode?4() -> QMdiArea.ViewMode -QtWidgets.QMdiArea.setTabShape?4(QTabWidget.TabShape) -QtWidgets.QMdiArea.tabShape?4() -> QTabWidget.TabShape -QtWidgets.QMdiArea.setTabPosition?4(QTabWidget.TabPosition) -QtWidgets.QMdiArea.tabPosition?4() -> QTabWidget.TabPosition -QtWidgets.QMdiArea.documentMode?4() -> bool -QtWidgets.QMdiArea.setDocumentMode?4(bool) -QtWidgets.QMdiArea.setTabsClosable?4(bool) -QtWidgets.QMdiArea.tabsClosable?4() -> bool -QtWidgets.QMdiArea.setTabsMovable?4(bool) -QtWidgets.QMdiArea.tabsMovable?4() -> bool -QtWidgets.QMdiSubWindow.SubWindowOption?10 -QtWidgets.QMdiSubWindow.SubWindowOption.RubberBandResize?10 -QtWidgets.QMdiSubWindow.SubWindowOption.RubberBandMove?10 -QtWidgets.QMdiSubWindow?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QMdiSubWindow.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QMdiSubWindow.sizeHint?4() -> QSize -QtWidgets.QMdiSubWindow.minimumSizeHint?4() -> QSize -QtWidgets.QMdiSubWindow.setWidget?4(QWidget) -QtWidgets.QMdiSubWindow.widget?4() -> QWidget -QtWidgets.QMdiSubWindow.isShaded?4() -> bool -QtWidgets.QMdiSubWindow.setOption?4(QMdiSubWindow.SubWindowOption, bool on=True) -QtWidgets.QMdiSubWindow.testOption?4(QMdiSubWindow.SubWindowOption) -> bool -QtWidgets.QMdiSubWindow.setKeyboardSingleStep?4(int) -QtWidgets.QMdiSubWindow.keyboardSingleStep?4() -> int -QtWidgets.QMdiSubWindow.setKeyboardPageStep?4(int) -QtWidgets.QMdiSubWindow.keyboardPageStep?4() -> int -QtWidgets.QMdiSubWindow.setSystemMenu?4(QMenu) -QtWidgets.QMdiSubWindow.systemMenu?4() -> QMenu -QtWidgets.QMdiSubWindow.mdiArea?4() -> QMdiArea -QtWidgets.QMdiSubWindow.windowStateChanged?4(unknown-type, unknown-type) -QtWidgets.QMdiSubWindow.aboutToActivate?4() -QtWidgets.QMdiSubWindow.showSystemMenu?4() -QtWidgets.QMdiSubWindow.showShaded?4() -QtWidgets.QMdiSubWindow.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QMdiSubWindow.event?4(QEvent) -> bool -QtWidgets.QMdiSubWindow.showEvent?4(QShowEvent) -QtWidgets.QMdiSubWindow.hideEvent?4(QHideEvent) -QtWidgets.QMdiSubWindow.changeEvent?4(QEvent) -QtWidgets.QMdiSubWindow.closeEvent?4(QCloseEvent) -QtWidgets.QMdiSubWindow.leaveEvent?4(QEvent) -QtWidgets.QMdiSubWindow.resizeEvent?4(QResizeEvent) -QtWidgets.QMdiSubWindow.timerEvent?4(QTimerEvent) -QtWidgets.QMdiSubWindow.moveEvent?4(QMoveEvent) -QtWidgets.QMdiSubWindow.paintEvent?4(QPaintEvent) -QtWidgets.QMdiSubWindow.mousePressEvent?4(QMouseEvent) -QtWidgets.QMdiSubWindow.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QMdiSubWindow.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QMdiSubWindow.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QMdiSubWindow.keyPressEvent?4(QKeyEvent) -QtWidgets.QMdiSubWindow.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QMdiSubWindow.focusInEvent?4(QFocusEvent) -QtWidgets.QMdiSubWindow.focusOutEvent?4(QFocusEvent) -QtWidgets.QMdiSubWindow.childEvent?4(QChildEvent) -QtWidgets.QMenu?1(QWidget parent=None) -QtWidgets.QMenu.__init__?1(self, QWidget parent=None) -QtWidgets.QMenu?1(QString, QWidget parent=None) -QtWidgets.QMenu.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QMenu.addMenu?4(QMenu) -> QAction -QtWidgets.QMenu.addMenu?4(QString) -> QMenu -QtWidgets.QMenu.addMenu?4(QIcon, QString) -> QMenu -QtWidgets.QMenu.addSeparator?4() -> QAction -QtWidgets.QMenu.insertMenu?4(QAction, QMenu) -> QAction -QtWidgets.QMenu.insertSeparator?4(QAction) -> QAction -QtWidgets.QMenu.clear?4() -QtWidgets.QMenu.setTearOffEnabled?4(bool) -QtWidgets.QMenu.isTearOffEnabled?4() -> bool -QtWidgets.QMenu.isTearOffMenuVisible?4() -> bool -QtWidgets.QMenu.hideTearOffMenu?4() -QtWidgets.QMenu.setDefaultAction?4(QAction) -QtWidgets.QMenu.defaultAction?4() -> QAction -QtWidgets.QMenu.setActiveAction?4(QAction) -QtWidgets.QMenu.activeAction?4() -> QAction -QtWidgets.QMenu.popup?4(QPoint, QAction action=None) -QtWidgets.QMenu.exec?4() -> QAction -QtWidgets.QMenu.exec?4(QPoint, QAction action=None) -> QAction -QtWidgets.QMenu.exec?4(unknown-type, QPoint, QAction at=None, QWidget parent=None) -> QAction -QtWidgets.QMenu.sizeHint?4() -> QSize -QtWidgets.QMenu.actionGeometry?4(QAction) -> QRect -QtWidgets.QMenu.actionAt?4(QPoint) -> QAction -QtWidgets.QMenu.menuAction?4() -> QAction -QtWidgets.QMenu.title?4() -> QString -QtWidgets.QMenu.setTitle?4(QString) -QtWidgets.QMenu.icon?4() -> QIcon -QtWidgets.QMenu.setIcon?4(QIcon) -QtWidgets.QMenu.setNoReplayFor?4(QWidget) -QtWidgets.QMenu.aboutToHide?4() -QtWidgets.QMenu.aboutToShow?4() -QtWidgets.QMenu.hovered?4(QAction) -QtWidgets.QMenu.triggered?4(QAction) -QtWidgets.QMenu.columnCount?4() -> int -QtWidgets.QMenu.initStyleOption?4(QStyleOptionMenuItem, QAction) -QtWidgets.QMenu.changeEvent?4(QEvent) -QtWidgets.QMenu.keyPressEvent?4(QKeyEvent) -QtWidgets.QMenu.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QMenu.mousePressEvent?4(QMouseEvent) -QtWidgets.QMenu.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QMenu.wheelEvent?4(QWheelEvent) -QtWidgets.QMenu.enterEvent?4(QEnterEvent) -QtWidgets.QMenu.leaveEvent?4(QEvent) -QtWidgets.QMenu.hideEvent?4(QHideEvent) -QtWidgets.QMenu.paintEvent?4(QPaintEvent) -QtWidgets.QMenu.actionEvent?4(QActionEvent) -QtWidgets.QMenu.timerEvent?4(QTimerEvent) -QtWidgets.QMenu.event?4(QEvent) -> bool -QtWidgets.QMenu.focusNextPrevChild?4(bool) -> bool -QtWidgets.QMenu.isEmpty?4() -> bool -QtWidgets.QMenu.separatorsCollapsible?4() -> bool -QtWidgets.QMenu.setSeparatorsCollapsible?4(bool) -QtWidgets.QMenu.addSection?4(QString) -> QAction -QtWidgets.QMenu.addSection?4(QIcon, QString) -> QAction -QtWidgets.QMenu.insertSection?4(QAction, QString) -> QAction -QtWidgets.QMenu.insertSection?4(QAction, QIcon, QString) -> QAction -QtWidgets.QMenu.toolTipsVisible?4() -> bool -QtWidgets.QMenu.setToolTipsVisible?4(bool) -QtWidgets.QMenu.showTearOffMenu?4() -QtWidgets.QMenu.showTearOffMenu?4(QPoint) -QtWidgets.QMenu.menuInAction?4(QAction) -> QMenu -QtWidgets.QMenuBar?1(QWidget parent=None) -QtWidgets.QMenuBar.__init__?1(self, QWidget parent=None) -QtWidgets.QMenuBar.addMenu?4(QMenu) -> QAction -QtWidgets.QMenuBar.addMenu?4(QString) -> QMenu -QtWidgets.QMenuBar.addMenu?4(QIcon, QString) -> QMenu -QtWidgets.QMenuBar.addSeparator?4() -> QAction -QtWidgets.QMenuBar.insertMenu?4(QAction, QMenu) -> QAction -QtWidgets.QMenuBar.insertSeparator?4(QAction) -> QAction -QtWidgets.QMenuBar.clear?4() -QtWidgets.QMenuBar.activeAction?4() -> QAction -QtWidgets.QMenuBar.setActiveAction?4(QAction) -QtWidgets.QMenuBar.setDefaultUp?4(bool) -QtWidgets.QMenuBar.isDefaultUp?4() -> bool -QtWidgets.QMenuBar.sizeHint?4() -> QSize -QtWidgets.QMenuBar.minimumSizeHint?4() -> QSize -QtWidgets.QMenuBar.heightForWidth?4(int) -> int -QtWidgets.QMenuBar.actionGeometry?4(QAction) -> QRect -QtWidgets.QMenuBar.actionAt?4(QPoint) -> QAction -QtWidgets.QMenuBar.setCornerWidget?4(QWidget, Qt.Corner corner=Qt.TopRightCorner) -QtWidgets.QMenuBar.cornerWidget?4(Qt.Corner corner=Qt.TopRightCorner) -> QWidget -QtWidgets.QMenuBar.setVisible?4(bool) -QtWidgets.QMenuBar.triggered?4(QAction) -QtWidgets.QMenuBar.hovered?4(QAction) -QtWidgets.QMenuBar.initStyleOption?4(QStyleOptionMenuItem, QAction) -QtWidgets.QMenuBar.changeEvent?4(QEvent) -QtWidgets.QMenuBar.keyPressEvent?4(QKeyEvent) -QtWidgets.QMenuBar.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QMenuBar.mousePressEvent?4(QMouseEvent) -QtWidgets.QMenuBar.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QMenuBar.leaveEvent?4(QEvent) -QtWidgets.QMenuBar.paintEvent?4(QPaintEvent) -QtWidgets.QMenuBar.resizeEvent?4(QResizeEvent) -QtWidgets.QMenuBar.actionEvent?4(QActionEvent) -QtWidgets.QMenuBar.focusOutEvent?4(QFocusEvent) -QtWidgets.QMenuBar.focusInEvent?4(QFocusEvent) -QtWidgets.QMenuBar.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QMenuBar.event?4(QEvent) -> bool -QtWidgets.QMenuBar.timerEvent?4(QTimerEvent) -QtWidgets.QMenuBar.isNativeMenuBar?4() -> bool -QtWidgets.QMenuBar.setNativeMenuBar?4(bool) -QtWidgets.QMessageBox.Option?10 -QtWidgets.QMessageBox.Option.DontUseNativeDialog?10 -QtWidgets.QMessageBox.StandardButton?10 -QtWidgets.QMessageBox.StandardButton.NoButton?10 -QtWidgets.QMessageBox.StandardButton.Ok?10 -QtWidgets.QMessageBox.StandardButton.Save?10 -QtWidgets.QMessageBox.StandardButton.SaveAll?10 -QtWidgets.QMessageBox.StandardButton.Open?10 -QtWidgets.QMessageBox.StandardButton.Yes?10 -QtWidgets.QMessageBox.StandardButton.YesToAll?10 -QtWidgets.QMessageBox.StandardButton.No?10 -QtWidgets.QMessageBox.StandardButton.NoToAll?10 -QtWidgets.QMessageBox.StandardButton.Abort?10 -QtWidgets.QMessageBox.StandardButton.Retry?10 -QtWidgets.QMessageBox.StandardButton.Ignore?10 -QtWidgets.QMessageBox.StandardButton.Close?10 -QtWidgets.QMessageBox.StandardButton.Cancel?10 -QtWidgets.QMessageBox.StandardButton.Discard?10 -QtWidgets.QMessageBox.StandardButton.Help?10 -QtWidgets.QMessageBox.StandardButton.Apply?10 -QtWidgets.QMessageBox.StandardButton.Reset?10 -QtWidgets.QMessageBox.StandardButton.RestoreDefaults?10 -QtWidgets.QMessageBox.StandardButton.FirstButton?10 -QtWidgets.QMessageBox.StandardButton.LastButton?10 -QtWidgets.QMessageBox.StandardButton.YesAll?10 -QtWidgets.QMessageBox.StandardButton.NoAll?10 -QtWidgets.QMessageBox.StandardButton.Default?10 -QtWidgets.QMessageBox.StandardButton.Escape?10 -QtWidgets.QMessageBox.StandardButton.FlagMask?10 -QtWidgets.QMessageBox.StandardButton.ButtonMask?10 -QtWidgets.QMessageBox.Icon?10 -QtWidgets.QMessageBox.Icon.NoIcon?10 -QtWidgets.QMessageBox.Icon.Information?10 -QtWidgets.QMessageBox.Icon.Warning?10 -QtWidgets.QMessageBox.Icon.Critical?10 -QtWidgets.QMessageBox.Icon.Question?10 -QtWidgets.QMessageBox.ButtonRole?10 -QtWidgets.QMessageBox.ButtonRole.InvalidRole?10 -QtWidgets.QMessageBox.ButtonRole.AcceptRole?10 -QtWidgets.QMessageBox.ButtonRole.RejectRole?10 -QtWidgets.QMessageBox.ButtonRole.DestructiveRole?10 -QtWidgets.QMessageBox.ButtonRole.ActionRole?10 -QtWidgets.QMessageBox.ButtonRole.HelpRole?10 -QtWidgets.QMessageBox.ButtonRole.YesRole?10 -QtWidgets.QMessageBox.ButtonRole.NoRole?10 -QtWidgets.QMessageBox.ButtonRole.ResetRole?10 -QtWidgets.QMessageBox.ButtonRole.ApplyRole?10 -QtWidgets.QMessageBox?1(QWidget parent=None) -QtWidgets.QMessageBox.__init__?1(self, QWidget parent=None) -QtWidgets.QMessageBox?1(QMessageBox.Icon, QString, QString, unknown-type buttons=QMessageBox.NoButton, QWidget parent=None, unknown-type flags=Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint) -QtWidgets.QMessageBox.__init__?1(self, QMessageBox.Icon, QString, QString, unknown-type buttons=QMessageBox.NoButton, QWidget parent=None, unknown-type flags=Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint) -QtWidgets.QMessageBox.text?4() -> QString -QtWidgets.QMessageBox.setText?4(QString) -QtWidgets.QMessageBox.icon?4() -> QMessageBox.Icon -QtWidgets.QMessageBox.setIcon?4(QMessageBox.Icon) -QtWidgets.QMessageBox.iconPixmap?4() -> QPixmap -QtWidgets.QMessageBox.setIconPixmap?4(QPixmap) -QtWidgets.QMessageBox.textFormat?4() -> Qt.TextFormat -QtWidgets.QMessageBox.setTextFormat?4(Qt.TextFormat) -QtWidgets.QMessageBox.information?4(QWidget, QString, QString, unknown-type buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton -QtWidgets.QMessageBox.question?4(QWidget, QString, QString, unknown-type buttons=QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton -QtWidgets.QMessageBox.warning?4(QWidget, QString, QString, unknown-type buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton -QtWidgets.QMessageBox.critical?4(QWidget, QString, QString, unknown-type buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton -QtWidgets.QMessageBox.about?4(QWidget, QString, QString) -QtWidgets.QMessageBox.aboutQt?4(QWidget, QString title='') -QtWidgets.QMessageBox.standardIcon?4(QMessageBox.Icon) -> QPixmap -QtWidgets.QMessageBox.event?4(QEvent) -> bool -QtWidgets.QMessageBox.resizeEvent?4(QResizeEvent) -QtWidgets.QMessageBox.showEvent?4(QShowEvent) -QtWidgets.QMessageBox.closeEvent?4(QCloseEvent) -QtWidgets.QMessageBox.keyPressEvent?4(QKeyEvent) -QtWidgets.QMessageBox.changeEvent?4(QEvent) -QtWidgets.QMessageBox.addButton?4(QAbstractButton, QMessageBox.ButtonRole) -QtWidgets.QMessageBox.addButton?4(QString, QMessageBox.ButtonRole) -> QPushButton -QtWidgets.QMessageBox.addButton?4(QMessageBox.StandardButton) -> QPushButton -QtWidgets.QMessageBox.removeButton?4(QAbstractButton) -QtWidgets.QMessageBox.setStandardButtons?4(unknown-type) -QtWidgets.QMessageBox.standardButtons?4() -> unknown-type -QtWidgets.QMessageBox.standardButton?4(QAbstractButton) -> QMessageBox.StandardButton -QtWidgets.QMessageBox.button?4(QMessageBox.StandardButton) -> QAbstractButton -QtWidgets.QMessageBox.defaultButton?4() -> QPushButton -QtWidgets.QMessageBox.setDefaultButton?4(QPushButton) -QtWidgets.QMessageBox.setDefaultButton?4(QMessageBox.StandardButton) -QtWidgets.QMessageBox.escapeButton?4() -> QAbstractButton -QtWidgets.QMessageBox.setEscapeButton?4(QAbstractButton) -QtWidgets.QMessageBox.setEscapeButton?4(QMessageBox.StandardButton) -QtWidgets.QMessageBox.clickedButton?4() -> QAbstractButton -QtWidgets.QMessageBox.informativeText?4() -> QString -QtWidgets.QMessageBox.setInformativeText?4(QString) -QtWidgets.QMessageBox.detailedText?4() -> QString -QtWidgets.QMessageBox.setDetailedText?4(QString) -QtWidgets.QMessageBox.setWindowTitle?4(QString) -QtWidgets.QMessageBox.setWindowModality?4(Qt.WindowModality) -QtWidgets.QMessageBox.open?4() -QtWidgets.QMessageBox.open?4(Any) -QtWidgets.QMessageBox.buttons?4() -> unknown-type -QtWidgets.QMessageBox.buttonRole?4(QAbstractButton) -> QMessageBox.ButtonRole -QtWidgets.QMessageBox.buttonClicked?4(QAbstractButton) -QtWidgets.QMessageBox.setTextInteractionFlags?4(unknown-type) -QtWidgets.QMessageBox.textInteractionFlags?4() -> unknown-type -QtWidgets.QMessageBox.setCheckBox?4(QCheckBox) -QtWidgets.QMessageBox.checkBox?4() -> QCheckBox -QtWidgets.QMessageBox.setOption?4(QMessageBox.Option, bool on=True) -QtWidgets.QMessageBox.testOption?4(QMessageBox.Option) -> bool -QtWidgets.QMessageBox.setOptions?4(unknown-type) -QtWidgets.QMessageBox.options?4() -> unknown-type -QtWidgets.QPlainTextEdit.LineWrapMode?10 -QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap?10 -QtWidgets.QPlainTextEdit.LineWrapMode.WidgetWidth?10 -QtWidgets.QPlainTextEdit?1(QWidget parent=None) -QtWidgets.QPlainTextEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QPlainTextEdit?1(QString, QWidget parent=None) -QtWidgets.QPlainTextEdit.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QPlainTextEdit.setDocument?4(QTextDocument) -QtWidgets.QPlainTextEdit.document?4() -> QTextDocument -QtWidgets.QPlainTextEdit.setTextCursor?4(QTextCursor) -QtWidgets.QPlainTextEdit.textCursor?4() -> QTextCursor -QtWidgets.QPlainTextEdit.isReadOnly?4() -> bool -QtWidgets.QPlainTextEdit.setReadOnly?4(bool) -QtWidgets.QPlainTextEdit.setTextInteractionFlags?4(unknown-type) -QtWidgets.QPlainTextEdit.textInteractionFlags?4() -> unknown-type -QtWidgets.QPlainTextEdit.mergeCurrentCharFormat?4(QTextCharFormat) -QtWidgets.QPlainTextEdit.setCurrentCharFormat?4(QTextCharFormat) -QtWidgets.QPlainTextEdit.currentCharFormat?4() -> QTextCharFormat -QtWidgets.QPlainTextEdit.tabChangesFocus?4() -> bool -QtWidgets.QPlainTextEdit.setTabChangesFocus?4(bool) -QtWidgets.QPlainTextEdit.setDocumentTitle?4(QString) -QtWidgets.QPlainTextEdit.documentTitle?4() -> QString -QtWidgets.QPlainTextEdit.isUndoRedoEnabled?4() -> bool -QtWidgets.QPlainTextEdit.setUndoRedoEnabled?4(bool) -QtWidgets.QPlainTextEdit.setMaximumBlockCount?4(int) -QtWidgets.QPlainTextEdit.maximumBlockCount?4() -> int -QtWidgets.QPlainTextEdit.lineWrapMode?4() -> QPlainTextEdit.LineWrapMode -QtWidgets.QPlainTextEdit.setLineWrapMode?4(QPlainTextEdit.LineWrapMode) -QtWidgets.QPlainTextEdit.wordWrapMode?4() -> QTextOption.WrapMode -QtWidgets.QPlainTextEdit.setWordWrapMode?4(QTextOption.WrapMode) -QtWidgets.QPlainTextEdit.setBackgroundVisible?4(bool) -QtWidgets.QPlainTextEdit.backgroundVisible?4() -> bool -QtWidgets.QPlainTextEdit.setCenterOnScroll?4(bool) -QtWidgets.QPlainTextEdit.centerOnScroll?4() -> bool -QtWidgets.QPlainTextEdit.find?4(QString, unknown-type options=QTextDocument.FindFlags()) -> bool -QtWidgets.QPlainTextEdit.toPlainText?4() -> QString -QtWidgets.QPlainTextEdit.ensureCursorVisible?4() -QtWidgets.QPlainTextEdit.loadResource?4(int, QUrl) -> QVariant -QtWidgets.QPlainTextEdit.createStandardContextMenu?4() -> QMenu -QtWidgets.QPlainTextEdit.createStandardContextMenu?4(QPoint) -> QMenu -QtWidgets.QPlainTextEdit.cursorForPosition?4(QPoint) -> QTextCursor -QtWidgets.QPlainTextEdit.cursorRect?4(QTextCursor) -> QRect -QtWidgets.QPlainTextEdit.cursorRect?4() -> QRect -QtWidgets.QPlainTextEdit.overwriteMode?4() -> bool -QtWidgets.QPlainTextEdit.setOverwriteMode?4(bool) -QtWidgets.QPlainTextEdit.cursorWidth?4() -> int -QtWidgets.QPlainTextEdit.setCursorWidth?4(int) -QtWidgets.QPlainTextEdit.setExtraSelections?4(unknown-type) -QtWidgets.QPlainTextEdit.extraSelections?4() -> unknown-type -QtWidgets.QPlainTextEdit.moveCursor?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) -QtWidgets.QPlainTextEdit.canPaste?4() -> bool -QtWidgets.QPlainTextEdit.print?4(QPagedPaintDevice) -QtWidgets.QPlainTextEdit.blockCount?4() -> int -QtWidgets.QPlainTextEdit.setPlainText?4(QString) -QtWidgets.QPlainTextEdit.cut?4() -QtWidgets.QPlainTextEdit.copy?4() -QtWidgets.QPlainTextEdit.paste?4() -QtWidgets.QPlainTextEdit.undo?4() -QtWidgets.QPlainTextEdit.redo?4() -QtWidgets.QPlainTextEdit.clear?4() -QtWidgets.QPlainTextEdit.selectAll?4() -QtWidgets.QPlainTextEdit.insertPlainText?4(QString) -QtWidgets.QPlainTextEdit.appendPlainText?4(QString) -QtWidgets.QPlainTextEdit.appendHtml?4(QString) -QtWidgets.QPlainTextEdit.centerCursor?4() -QtWidgets.QPlainTextEdit.textChanged?4() -QtWidgets.QPlainTextEdit.undoAvailable?4(bool) -QtWidgets.QPlainTextEdit.redoAvailable?4(bool) -QtWidgets.QPlainTextEdit.copyAvailable?4(bool) -QtWidgets.QPlainTextEdit.selectionChanged?4() -QtWidgets.QPlainTextEdit.cursorPositionChanged?4() -QtWidgets.QPlainTextEdit.updateRequest?4(QRect, int) -QtWidgets.QPlainTextEdit.blockCountChanged?4(int) -QtWidgets.QPlainTextEdit.modificationChanged?4(bool) -QtWidgets.QPlainTextEdit.event?4(QEvent) -> bool -QtWidgets.QPlainTextEdit.timerEvent?4(QTimerEvent) -QtWidgets.QPlainTextEdit.keyPressEvent?4(QKeyEvent) -QtWidgets.QPlainTextEdit.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QPlainTextEdit.resizeEvent?4(QResizeEvent) -QtWidgets.QPlainTextEdit.paintEvent?4(QPaintEvent) -QtWidgets.QPlainTextEdit.mousePressEvent?4(QMouseEvent) -QtWidgets.QPlainTextEdit.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QPlainTextEdit.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QPlainTextEdit.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QPlainTextEdit.focusNextPrevChild?4(bool) -> bool -QtWidgets.QPlainTextEdit.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QPlainTextEdit.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QPlainTextEdit.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QPlainTextEdit.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QPlainTextEdit.dropEvent?4(QDropEvent) -QtWidgets.QPlainTextEdit.focusInEvent?4(QFocusEvent) -QtWidgets.QPlainTextEdit.focusOutEvent?4(QFocusEvent) -QtWidgets.QPlainTextEdit.showEvent?4(QShowEvent) -QtWidgets.QPlainTextEdit.changeEvent?4(QEvent) -QtWidgets.QPlainTextEdit.wheelEvent?4(QWheelEvent) -QtWidgets.QPlainTextEdit.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QPlainTextEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QPlainTextEdit.createMimeDataFromSelection?4() -> QMimeData -QtWidgets.QPlainTextEdit.canInsertFromMimeData?4(QMimeData) -> bool -QtWidgets.QPlainTextEdit.insertFromMimeData?4(QMimeData) -QtWidgets.QPlainTextEdit.scrollContentsBy?4(int, int) -QtWidgets.QPlainTextEdit.firstVisibleBlock?4() -> QTextBlock -QtWidgets.QPlainTextEdit.contentOffset?4() -> QPointF -QtWidgets.QPlainTextEdit.blockBoundingRect?4(QTextBlock) -> QRectF -QtWidgets.QPlainTextEdit.blockBoundingGeometry?4(QTextBlock) -> QRectF -QtWidgets.QPlainTextEdit.getPaintContext?4() -> QAbstractTextDocumentLayout.PaintContext -QtWidgets.QPlainTextEdit.anchorAt?4(QPoint) -> QString -QtWidgets.QPlainTextEdit.zoomIn?4(int range=1) -QtWidgets.QPlainTextEdit.zoomOut?4(int range=1) -QtWidgets.QPlainTextEdit.setPlaceholderText?4(QString) -QtWidgets.QPlainTextEdit.placeholderText?4() -> QString -QtWidgets.QPlainTextEdit.find?4(QRegularExpression, unknown-type options=QTextDocument.FindFlags()) -> bool -QtWidgets.QPlainTextEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant -QtWidgets.QPlainTextEdit.tabStopDistance?4() -> float -QtWidgets.QPlainTextEdit.setTabStopDistance?4(float) -QtWidgets.QPlainTextDocumentLayout?1(QTextDocument) -QtWidgets.QPlainTextDocumentLayout.__init__?1(self, QTextDocument) -QtWidgets.QPlainTextDocumentLayout.draw?4(QPainter, QAbstractTextDocumentLayout.PaintContext) -QtWidgets.QPlainTextDocumentLayout.hitTest?4(QPointF, Qt.HitTestAccuracy) -> int -QtWidgets.QPlainTextDocumentLayout.pageCount?4() -> int -QtWidgets.QPlainTextDocumentLayout.documentSize?4() -> QSizeF -QtWidgets.QPlainTextDocumentLayout.frameBoundingRect?4(QTextFrame) -> QRectF -QtWidgets.QPlainTextDocumentLayout.blockBoundingRect?4(QTextBlock) -> QRectF -QtWidgets.QPlainTextDocumentLayout.ensureBlockLayout?4(QTextBlock) -QtWidgets.QPlainTextDocumentLayout.setCursorWidth?4(int) -QtWidgets.QPlainTextDocumentLayout.cursorWidth?4() -> int -QtWidgets.QPlainTextDocumentLayout.requestUpdate?4() -QtWidgets.QPlainTextDocumentLayout.documentChanged?4(int, int, int) -QtWidgets.QProgressBar.Direction?10 -QtWidgets.QProgressBar.Direction.TopToBottom?10 -QtWidgets.QProgressBar.Direction.BottomToTop?10 -QtWidgets.QProgressBar?1(QWidget parent=None) -QtWidgets.QProgressBar.__init__?1(self, QWidget parent=None) -QtWidgets.QProgressBar.minimum?4() -> int -QtWidgets.QProgressBar.maximum?4() -> int -QtWidgets.QProgressBar.setRange?4(int, int) -QtWidgets.QProgressBar.value?4() -> int -QtWidgets.QProgressBar.text?4() -> QString -QtWidgets.QProgressBar.setTextVisible?4(bool) -QtWidgets.QProgressBar.isTextVisible?4() -> bool -QtWidgets.QProgressBar.alignment?4() -> unknown-type -QtWidgets.QProgressBar.setAlignment?4(unknown-type) -QtWidgets.QProgressBar.sizeHint?4() -> QSize -QtWidgets.QProgressBar.minimumSizeHint?4() -> QSize -QtWidgets.QProgressBar.orientation?4() -> Qt.Orientation -QtWidgets.QProgressBar.setInvertedAppearance?4(bool) -QtWidgets.QProgressBar.setTextDirection?4(QProgressBar.Direction) -QtWidgets.QProgressBar.setFormat?4(QString) -QtWidgets.QProgressBar.format?4() -> QString -QtWidgets.QProgressBar.resetFormat?4() -QtWidgets.QProgressBar.reset?4() -QtWidgets.QProgressBar.setMinimum?4(int) -QtWidgets.QProgressBar.setMaximum?4(int) -QtWidgets.QProgressBar.setValue?4(int) -QtWidgets.QProgressBar.setOrientation?4(Qt.Orientation) -QtWidgets.QProgressBar.valueChanged?4(int) -QtWidgets.QProgressBar.initStyleOption?4(QStyleOptionProgressBar) -QtWidgets.QProgressBar.event?4(QEvent) -> bool -QtWidgets.QProgressBar.paintEvent?4(QPaintEvent) -QtWidgets.QProgressDialog?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QProgressDialog.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QProgressDialog?1(QString, QString, int, int, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QProgressDialog.__init__?1(self, QString, QString, int, int, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QProgressDialog.setLabel?4(QLabel) -QtWidgets.QProgressDialog.setCancelButton?4(QPushButton) -QtWidgets.QProgressDialog.setBar?4(QProgressBar) -QtWidgets.QProgressDialog.wasCanceled?4() -> bool -QtWidgets.QProgressDialog.minimum?4() -> int -QtWidgets.QProgressDialog.maximum?4() -> int -QtWidgets.QProgressDialog.setRange?4(int, int) -QtWidgets.QProgressDialog.value?4() -> int -QtWidgets.QProgressDialog.sizeHint?4() -> QSize -QtWidgets.QProgressDialog.labelText?4() -> QString -QtWidgets.QProgressDialog.minimumDuration?4() -> int -QtWidgets.QProgressDialog.setAutoReset?4(bool) -QtWidgets.QProgressDialog.autoReset?4() -> bool -QtWidgets.QProgressDialog.setAutoClose?4(bool) -QtWidgets.QProgressDialog.autoClose?4() -> bool -QtWidgets.QProgressDialog.cancel?4() -QtWidgets.QProgressDialog.reset?4() -QtWidgets.QProgressDialog.setMaximum?4(int) -QtWidgets.QProgressDialog.setMinimum?4(int) -QtWidgets.QProgressDialog.setValue?4(int) -QtWidgets.QProgressDialog.setLabelText?4(QString) -QtWidgets.QProgressDialog.setCancelButtonText?4(QString) -QtWidgets.QProgressDialog.setMinimumDuration?4(int) -QtWidgets.QProgressDialog.canceled?4() -QtWidgets.QProgressDialog.resizeEvent?4(QResizeEvent) -QtWidgets.QProgressDialog.closeEvent?4(QCloseEvent) -QtWidgets.QProgressDialog.changeEvent?4(QEvent) -QtWidgets.QProgressDialog.showEvent?4(QShowEvent) -QtWidgets.QProgressDialog.forceShow?4() -QtWidgets.QProgressDialog.open?4() -QtWidgets.QProgressDialog.open?4(Any) -QtWidgets.QProxyStyle?1(QStyle style=None) -QtWidgets.QProxyStyle.__init__?1(self, QStyle style=None) -QtWidgets.QProxyStyle?1(QString) -QtWidgets.QProxyStyle.__init__?1(self, QString) -QtWidgets.QProxyStyle.baseStyle?4() -> QStyle -QtWidgets.QProxyStyle.setBaseStyle?4(QStyle) -QtWidgets.QProxyStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QProxyStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) -QtWidgets.QProxyStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) -QtWidgets.QProxyStyle.drawItemText?4(QPainter, QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) -QtWidgets.QProxyStyle.drawItemPixmap?4(QPainter, QRect, int, QPixmap) -QtWidgets.QProxyStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget) -> QSize -QtWidgets.QProxyStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget) -> QRect -QtWidgets.QProxyStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget) -> QRect -QtWidgets.QProxyStyle.itemTextRect?4(QFontMetrics, QRect, int, bool, QString) -> QRect -QtWidgets.QProxyStyle.itemPixmapRect?4(QRect, int, QPixmap) -> QRect -QtWidgets.QProxyStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl -QtWidgets.QProxyStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int -QtWidgets.QProxyStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QProxyStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int -QtWidgets.QProxyStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon -QtWidgets.QProxyStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption, QWidget widget=None) -> QPixmap -QtWidgets.QProxyStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap -QtWidgets.QProxyStyle.standardPalette?4() -> QPalette -QtWidgets.QProxyStyle.polish?4(QWidget) -QtWidgets.QProxyStyle.polish?4(QPalette) -> QPalette -QtWidgets.QProxyStyle.polish?4(QApplication) -QtWidgets.QProxyStyle.unpolish?4(QWidget) -QtWidgets.QProxyStyle.unpolish?4(QApplication) -QtWidgets.QProxyStyle.event?4(QEvent) -> bool -QtWidgets.QRadioButton?1(QWidget parent=None) -QtWidgets.QRadioButton.__init__?1(self, QWidget parent=None) -QtWidgets.QRadioButton?1(QString, QWidget parent=None) -QtWidgets.QRadioButton.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QRadioButton.sizeHint?4() -> QSize -QtWidgets.QRadioButton.minimumSizeHint?4() -> QSize -QtWidgets.QRadioButton.initStyleOption?4(QStyleOptionButton) -QtWidgets.QRadioButton.hitButton?4(QPoint) -> bool -QtWidgets.QRadioButton.event?4(QEvent) -> bool -QtWidgets.QRadioButton.paintEvent?4(QPaintEvent) -QtWidgets.QRadioButton.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QRubberBand.Shape?10 -QtWidgets.QRubberBand.Shape.Line?10 -QtWidgets.QRubberBand.Shape.Rectangle?10 -QtWidgets.QRubberBand?1(QRubberBand.Shape, QWidget parent=None) -QtWidgets.QRubberBand.__init__?1(self, QRubberBand.Shape, QWidget parent=None) -QtWidgets.QRubberBand.shape?4() -> QRubberBand.Shape -QtWidgets.QRubberBand.setGeometry?4(QRect) -QtWidgets.QRubberBand.setGeometry?4(int, int, int, int) -QtWidgets.QRubberBand.move?4(QPoint) -QtWidgets.QRubberBand.move?4(int, int) -QtWidgets.QRubberBand.resize?4(int, int) -QtWidgets.QRubberBand.resize?4(QSize) -QtWidgets.QRubberBand.initStyleOption?4(QStyleOptionRubberBand) -QtWidgets.QRubberBand.event?4(QEvent) -> bool -QtWidgets.QRubberBand.paintEvent?4(QPaintEvent) -QtWidgets.QRubberBand.changeEvent?4(QEvent) -QtWidgets.QRubberBand.showEvent?4(QShowEvent) -QtWidgets.QRubberBand.resizeEvent?4(QResizeEvent) -QtWidgets.QRubberBand.moveEvent?4(QMoveEvent) -QtWidgets.QScrollArea?1(QWidget parent=None) -QtWidgets.QScrollArea.__init__?1(self, QWidget parent=None) -QtWidgets.QScrollArea.widget?4() -> QWidget -QtWidgets.QScrollArea.setWidget?4(QWidget) -QtWidgets.QScrollArea.takeWidget?4() -> QWidget -QtWidgets.QScrollArea.widgetResizable?4() -> bool -QtWidgets.QScrollArea.setWidgetResizable?4(bool) -QtWidgets.QScrollArea.alignment?4() -> unknown-type -QtWidgets.QScrollArea.setAlignment?4(unknown-type) -QtWidgets.QScrollArea.sizeHint?4() -> QSize -QtWidgets.QScrollArea.focusNextPrevChild?4(bool) -> bool -QtWidgets.QScrollArea.ensureVisible?4(int, int, int xMargin=50, int yMargin=50) -QtWidgets.QScrollArea.ensureWidgetVisible?4(QWidget, int xMargin=50, int yMargin=50) -QtWidgets.QScrollArea.event?4(QEvent) -> bool -QtWidgets.QScrollArea.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QScrollArea.resizeEvent?4(QResizeEvent) -QtWidgets.QScrollArea.scrollContentsBy?4(int, int) -QtWidgets.QScrollArea.viewportSizeHint?4() -> QSize -QtWidgets.QScrollBar?1(QWidget parent=None) -QtWidgets.QScrollBar.__init__?1(self, QWidget parent=None) -QtWidgets.QScrollBar?1(Qt.Orientation, QWidget parent=None) -QtWidgets.QScrollBar.__init__?1(self, Qt.Orientation, QWidget parent=None) -QtWidgets.QScrollBar.sizeHint?4() -> QSize -QtWidgets.QScrollBar.event?4(QEvent) -> bool -QtWidgets.QScrollBar.initStyleOption?4(QStyleOptionSlider) -QtWidgets.QScrollBar.paintEvent?4(QPaintEvent) -QtWidgets.QScrollBar.mousePressEvent?4(QMouseEvent) -QtWidgets.QScrollBar.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QScrollBar.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QScrollBar.hideEvent?4(QHideEvent) -QtWidgets.QScrollBar.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QScrollBar.wheelEvent?4(QWheelEvent) -QtWidgets.QScrollBar.sliderChange?4(QAbstractSlider.SliderChange) -QtWidgets.QScroller.Input?10 -QtWidgets.QScroller.Input.InputPress?10 -QtWidgets.QScroller.Input.InputMove?10 -QtWidgets.QScroller.Input.InputRelease?10 -QtWidgets.QScroller.ScrollerGestureType?10 -QtWidgets.QScroller.ScrollerGestureType.TouchGesture?10 -QtWidgets.QScroller.ScrollerGestureType.LeftMouseButtonGesture?10 -QtWidgets.QScroller.ScrollerGestureType.RightMouseButtonGesture?10 -QtWidgets.QScroller.ScrollerGestureType.MiddleMouseButtonGesture?10 -QtWidgets.QScroller.State?10 -QtWidgets.QScroller.State.Inactive?10 -QtWidgets.QScroller.State.Pressed?10 -QtWidgets.QScroller.State.Dragging?10 -QtWidgets.QScroller.State.Scrolling?10 -QtWidgets.QScroller.hasScroller?4(QObject) -> bool -QtWidgets.QScroller.scroller?4(QObject) -> QScroller -QtWidgets.QScroller.grabGesture?4(QObject, QScroller.ScrollerGestureType scrollGestureType=QScroller.TouchGesture) -> Qt.GestureType -QtWidgets.QScroller.grabbedGesture?4(QObject) -> Qt.GestureType -QtWidgets.QScroller.ungrabGesture?4(QObject) -QtWidgets.QScroller.activeScrollers?4() -> unknown-type -QtWidgets.QScroller.target?4() -> QObject -QtWidgets.QScroller.state?4() -> QScroller.State -QtWidgets.QScroller.handleInput?4(QScroller.Input, QPointF, int timestamp=0) -> bool -QtWidgets.QScroller.stop?4() -QtWidgets.QScroller.velocity?4() -> QPointF -QtWidgets.QScroller.finalPosition?4() -> QPointF -QtWidgets.QScroller.pixelPerMeter?4() -> QPointF -QtWidgets.QScroller.scrollerProperties?4() -> QScrollerProperties -QtWidgets.QScroller.setSnapPositionsX?4(unknown-type) -QtWidgets.QScroller.setSnapPositionsX?4(float, float) -QtWidgets.QScroller.setSnapPositionsY?4(unknown-type) -QtWidgets.QScroller.setSnapPositionsY?4(float, float) -QtWidgets.QScroller.setScrollerProperties?4(QScrollerProperties) -QtWidgets.QScroller.scrollTo?4(QPointF) -QtWidgets.QScroller.scrollTo?4(QPointF, int) -QtWidgets.QScroller.ensureVisible?4(QRectF, float, float) -QtWidgets.QScroller.ensureVisible?4(QRectF, float, float, int) -QtWidgets.QScroller.resendPrepareEvent?4() -QtWidgets.QScroller.stateChanged?4(QScroller.State) -QtWidgets.QScroller.scrollerPropertiesChanged?4(QScrollerProperties) -QtWidgets.QScrollerProperties.ScrollMetric?10 -QtWidgets.QScrollerProperties.ScrollMetric.MousePressEventDelay?10 -QtWidgets.QScrollerProperties.ScrollMetric.DragStartDistance?10 -QtWidgets.QScrollerProperties.ScrollMetric.DragVelocitySmoothingFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.AxisLockThreshold?10 -QtWidgets.QScrollerProperties.ScrollMetric.ScrollingCurve?10 -QtWidgets.QScrollerProperties.ScrollMetric.DecelerationFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.MinimumVelocity?10 -QtWidgets.QScrollerProperties.ScrollMetric.MaximumVelocity?10 -QtWidgets.QScrollerProperties.ScrollMetric.MaximumClickThroughVelocity?10 -QtWidgets.QScrollerProperties.ScrollMetric.AcceleratingFlickMaximumTime?10 -QtWidgets.QScrollerProperties.ScrollMetric.AcceleratingFlickSpeedupFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.SnapPositionRatio?10 -QtWidgets.QScrollerProperties.ScrollMetric.SnapTime?10 -QtWidgets.QScrollerProperties.ScrollMetric.OvershootDragResistanceFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.OvershootDragDistanceFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.OvershootScrollDistanceFactor?10 -QtWidgets.QScrollerProperties.ScrollMetric.OvershootScrollTime?10 -QtWidgets.QScrollerProperties.ScrollMetric.HorizontalOvershootPolicy?10 -QtWidgets.QScrollerProperties.ScrollMetric.VerticalOvershootPolicy?10 -QtWidgets.QScrollerProperties.ScrollMetric.FrameRate?10 -QtWidgets.QScrollerProperties.ScrollMetric.ScrollMetricCount?10 -QtWidgets.QScrollerProperties.FrameRates?10 -QtWidgets.QScrollerProperties.FrameRates.Standard?10 -QtWidgets.QScrollerProperties.FrameRates.Fps60?10 -QtWidgets.QScrollerProperties.FrameRates.Fps30?10 -QtWidgets.QScrollerProperties.FrameRates.Fps20?10 -QtWidgets.QScrollerProperties.OvershootPolicy?10 -QtWidgets.QScrollerProperties.OvershootPolicy.OvershootWhenScrollable?10 -QtWidgets.QScrollerProperties.OvershootPolicy.OvershootAlwaysOff?10 -QtWidgets.QScrollerProperties.OvershootPolicy.OvershootAlwaysOn?10 -QtWidgets.QScrollerProperties?1() -QtWidgets.QScrollerProperties.__init__?1(self) -QtWidgets.QScrollerProperties?1(QScrollerProperties) -QtWidgets.QScrollerProperties.__init__?1(self, QScrollerProperties) -QtWidgets.QScrollerProperties.setDefaultScrollerProperties?4(QScrollerProperties) -QtWidgets.QScrollerProperties.unsetDefaultScrollerProperties?4() -QtWidgets.QScrollerProperties.scrollMetric?4(QScrollerProperties.ScrollMetric) -> QVariant -QtWidgets.QScrollerProperties.setScrollMetric?4(QScrollerProperties.ScrollMetric, QVariant) -QtWidgets.QSizeGrip?1(QWidget) -QtWidgets.QSizeGrip.__init__?1(self, QWidget) -QtWidgets.QSizeGrip.sizeHint?4() -> QSize -QtWidgets.QSizeGrip.setVisible?4(bool) -QtWidgets.QSizeGrip.paintEvent?4(QPaintEvent) -QtWidgets.QSizeGrip.mousePressEvent?4(QMouseEvent) -QtWidgets.QSizeGrip.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QSizeGrip.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QSizeGrip.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QSizeGrip.event?4(QEvent) -> bool -QtWidgets.QSizeGrip.moveEvent?4(QMoveEvent) -QtWidgets.QSizeGrip.showEvent?4(QShowEvent) -QtWidgets.QSizeGrip.hideEvent?4(QHideEvent) -QtWidgets.QSizePolicy.ControlType?10 -QtWidgets.QSizePolicy.ControlType.DefaultType?10 -QtWidgets.QSizePolicy.ControlType.ButtonBox?10 -QtWidgets.QSizePolicy.ControlType.CheckBox?10 -QtWidgets.QSizePolicy.ControlType.ComboBox?10 -QtWidgets.QSizePolicy.ControlType.Frame?10 -QtWidgets.QSizePolicy.ControlType.GroupBox?10 -QtWidgets.QSizePolicy.ControlType.Label?10 -QtWidgets.QSizePolicy.ControlType.Line?10 -QtWidgets.QSizePolicy.ControlType.LineEdit?10 -QtWidgets.QSizePolicy.ControlType.PushButton?10 -QtWidgets.QSizePolicy.ControlType.RadioButton?10 -QtWidgets.QSizePolicy.ControlType.Slider?10 -QtWidgets.QSizePolicy.ControlType.SpinBox?10 -QtWidgets.QSizePolicy.ControlType.TabWidget?10 -QtWidgets.QSizePolicy.ControlType.ToolButton?10 -QtWidgets.QSizePolicy.Policy?10 -QtWidgets.QSizePolicy.Policy.Fixed?10 -QtWidgets.QSizePolicy.Policy.Minimum?10 -QtWidgets.QSizePolicy.Policy.Maximum?10 -QtWidgets.QSizePolicy.Policy.Preferred?10 -QtWidgets.QSizePolicy.Policy.MinimumExpanding?10 -QtWidgets.QSizePolicy.Policy.Expanding?10 -QtWidgets.QSizePolicy.Policy.Ignored?10 -QtWidgets.QSizePolicy.PolicyFlag?10 -QtWidgets.QSizePolicy.PolicyFlag.GrowFlag?10 -QtWidgets.QSizePolicy.PolicyFlag.ExpandFlag?10 -QtWidgets.QSizePolicy.PolicyFlag.ShrinkFlag?10 -QtWidgets.QSizePolicy.PolicyFlag.IgnoreFlag?10 -QtWidgets.QSizePolicy?1() -QtWidgets.QSizePolicy.__init__?1(self) -QtWidgets.QSizePolicy?1(QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType type=QSizePolicy.DefaultType) -QtWidgets.QSizePolicy.__init__?1(self, QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType type=QSizePolicy.DefaultType) -QtWidgets.QSizePolicy?1(QVariant) -QtWidgets.QSizePolicy.__init__?1(self, QVariant) -QtWidgets.QSizePolicy?1(QSizePolicy) -QtWidgets.QSizePolicy.__init__?1(self, QSizePolicy) -QtWidgets.QSizePolicy.horizontalPolicy?4() -> QSizePolicy.Policy -QtWidgets.QSizePolicy.verticalPolicy?4() -> QSizePolicy.Policy -QtWidgets.QSizePolicy.setHorizontalPolicy?4(QSizePolicy.Policy) -QtWidgets.QSizePolicy.setVerticalPolicy?4(QSizePolicy.Policy) -QtWidgets.QSizePolicy.expandingDirections?4() -> unknown-type -QtWidgets.QSizePolicy.setHeightForWidth?4(bool) -QtWidgets.QSizePolicy.hasHeightForWidth?4() -> bool -QtWidgets.QSizePolicy.horizontalStretch?4() -> int -QtWidgets.QSizePolicy.verticalStretch?4() -> int -QtWidgets.QSizePolicy.setHorizontalStretch?4(int) -QtWidgets.QSizePolicy.setVerticalStretch?4(int) -QtWidgets.QSizePolicy.transpose?4() -QtWidgets.QSizePolicy.transposed?4() -> QSizePolicy -QtWidgets.QSizePolicy.controlType?4() -> QSizePolicy.ControlType -QtWidgets.QSizePolicy.setControlType?4(QSizePolicy.ControlType) -QtWidgets.QSizePolicy.setWidthForHeight?4(bool) -QtWidgets.QSizePolicy.hasWidthForHeight?4() -> bool -QtWidgets.QSizePolicy.retainSizeWhenHidden?4() -> bool -QtWidgets.QSizePolicy.setRetainSizeWhenHidden?4(bool) -QtWidgets.QSlider.TickPosition?10 -QtWidgets.QSlider.TickPosition.NoTicks?10 -QtWidgets.QSlider.TickPosition.TicksAbove?10 -QtWidgets.QSlider.TickPosition.TicksLeft?10 -QtWidgets.QSlider.TickPosition.TicksBelow?10 -QtWidgets.QSlider.TickPosition.TicksRight?10 -QtWidgets.QSlider.TickPosition.TicksBothSides?10 -QtWidgets.QSlider?1(QWidget parent=None) -QtWidgets.QSlider.__init__?1(self, QWidget parent=None) -QtWidgets.QSlider?1(Qt.Orientation, QWidget parent=None) -QtWidgets.QSlider.__init__?1(self, Qt.Orientation, QWidget parent=None) -QtWidgets.QSlider.sizeHint?4() -> QSize -QtWidgets.QSlider.minimumSizeHint?4() -> QSize -QtWidgets.QSlider.setTickPosition?4(QSlider.TickPosition) -QtWidgets.QSlider.tickPosition?4() -> QSlider.TickPosition -QtWidgets.QSlider.setTickInterval?4(int) -QtWidgets.QSlider.tickInterval?4() -> int -QtWidgets.QSlider.event?4(QEvent) -> bool -QtWidgets.QSlider.initStyleOption?4(QStyleOptionSlider) -QtWidgets.QSlider.paintEvent?4(QPaintEvent) -QtWidgets.QSlider.mousePressEvent?4(QMouseEvent) -QtWidgets.QSlider.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QSlider.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QSpinBox?1(QWidget parent=None) -QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None) -QtWidgets.QSpinBox.value?4() -> int -QtWidgets.QSpinBox.prefix?4() -> QString -QtWidgets.QSpinBox.setPrefix?4(QString) -QtWidgets.QSpinBox.suffix?4() -> QString -QtWidgets.QSpinBox.setSuffix?4(QString) -QtWidgets.QSpinBox.cleanText?4() -> QString -QtWidgets.QSpinBox.singleStep?4() -> int -QtWidgets.QSpinBox.setSingleStep?4(int) -QtWidgets.QSpinBox.minimum?4() -> int -QtWidgets.QSpinBox.setMinimum?4(int) -QtWidgets.QSpinBox.maximum?4() -> int -QtWidgets.QSpinBox.setMaximum?4(int) -QtWidgets.QSpinBox.setRange?4(int, int) -QtWidgets.QSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) -QtWidgets.QSpinBox.valueFromText?4(QString) -> int -QtWidgets.QSpinBox.textFromValue?4(int) -> QString -QtWidgets.QSpinBox.fixup?4(QString) -> QString -QtWidgets.QSpinBox.event?4(QEvent) -> bool -QtWidgets.QSpinBox.setValue?4(int) -QtWidgets.QSpinBox.valueChanged?4(int) -QtWidgets.QSpinBox.textChanged?4(QString) -QtWidgets.QSpinBox.displayIntegerBase?4() -> int -QtWidgets.QSpinBox.setDisplayIntegerBase?4(int) -QtWidgets.QSpinBox.stepType?4() -> QAbstractSpinBox.StepType -QtWidgets.QSpinBox.setStepType?4(QAbstractSpinBox.StepType) -QtWidgets.QDoubleSpinBox?1(QWidget parent=None) -QtWidgets.QDoubleSpinBox.__init__?1(self, QWidget parent=None) -QtWidgets.QDoubleSpinBox.value?4() -> float -QtWidgets.QDoubleSpinBox.prefix?4() -> QString -QtWidgets.QDoubleSpinBox.setPrefix?4(QString) -QtWidgets.QDoubleSpinBox.suffix?4() -> QString -QtWidgets.QDoubleSpinBox.setSuffix?4(QString) -QtWidgets.QDoubleSpinBox.cleanText?4() -> QString -QtWidgets.QDoubleSpinBox.singleStep?4() -> float -QtWidgets.QDoubleSpinBox.setSingleStep?4(float) -QtWidgets.QDoubleSpinBox.minimum?4() -> float -QtWidgets.QDoubleSpinBox.setMinimum?4(float) -QtWidgets.QDoubleSpinBox.maximum?4() -> float -QtWidgets.QDoubleSpinBox.setMaximum?4(float) -QtWidgets.QDoubleSpinBox.setRange?4(float, float) -QtWidgets.QDoubleSpinBox.decimals?4() -> int -QtWidgets.QDoubleSpinBox.setDecimals?4(int) -QtWidgets.QDoubleSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) -QtWidgets.QDoubleSpinBox.valueFromText?4(QString) -> float -QtWidgets.QDoubleSpinBox.textFromValue?4(float) -> QString -QtWidgets.QDoubleSpinBox.fixup?4(QString) -> QString -QtWidgets.QDoubleSpinBox.setValue?4(float) -QtWidgets.QDoubleSpinBox.valueChanged?4(float) -QtWidgets.QDoubleSpinBox.textChanged?4(QString) -QtWidgets.QDoubleSpinBox.stepType?4() -> QAbstractSpinBox.StepType -QtWidgets.QDoubleSpinBox.setStepType?4(QAbstractSpinBox.StepType) -QtWidgets.QSplashScreen?1(QPixmap pixmap=QPixmap(), unknown-type flags=Qt.WindowFlags()) -QtWidgets.QSplashScreen.__init__?1(self, QPixmap pixmap=QPixmap(), unknown-type flags=Qt.WindowFlags()) -QtWidgets.QSplashScreen?1(QScreen, QPixmap pixmap=QPixmap(), unknown-type flags=Qt.WindowFlags()) -QtWidgets.QSplashScreen.__init__?1(self, QScreen, QPixmap pixmap=QPixmap(), unknown-type flags=Qt.WindowFlags()) -QtWidgets.QSplashScreen.setPixmap?4(QPixmap) -QtWidgets.QSplashScreen.pixmap?4() -> QPixmap -QtWidgets.QSplashScreen.finish?4(QWidget) -QtWidgets.QSplashScreen.repaint?4() -QtWidgets.QSplashScreen.message?4() -> QString -QtWidgets.QSplashScreen.showMessage?4(QString, int alignment=Qt.AlignLeft, QColor color=Qt.black) -QtWidgets.QSplashScreen.clearMessage?4() -QtWidgets.QSplashScreen.messageChanged?4(QString) -QtWidgets.QSplashScreen.drawContents?4(QPainter) -QtWidgets.QSplashScreen.event?4(QEvent) -> bool -QtWidgets.QSplashScreen.mousePressEvent?4(QMouseEvent) -QtWidgets.QSplitter?1(QWidget parent=None) -QtWidgets.QSplitter.__init__?1(self, QWidget parent=None) -QtWidgets.QSplitter?1(Qt.Orientation, QWidget parent=None) -QtWidgets.QSplitter.__init__?1(self, Qt.Orientation, QWidget parent=None) -QtWidgets.QSplitter.addWidget?4(QWidget) -QtWidgets.QSplitter.insertWidget?4(int, QWidget) -QtWidgets.QSplitter.setOrientation?4(Qt.Orientation) -QtWidgets.QSplitter.orientation?4() -> Qt.Orientation -QtWidgets.QSplitter.setChildrenCollapsible?4(bool) -QtWidgets.QSplitter.childrenCollapsible?4() -> bool -QtWidgets.QSplitter.setCollapsible?4(int, bool) -QtWidgets.QSplitter.isCollapsible?4(int) -> bool -QtWidgets.QSplitter.setOpaqueResize?4(bool opaque=True) -QtWidgets.QSplitter.opaqueResize?4() -> bool -QtWidgets.QSplitter.refresh?4() -QtWidgets.QSplitter.sizeHint?4() -> QSize -QtWidgets.QSplitter.minimumSizeHint?4() -> QSize -QtWidgets.QSplitter.sizes?4() -> unknown-type -QtWidgets.QSplitter.setSizes?4(unknown-type) -QtWidgets.QSplitter.saveState?4() -> QByteArray -QtWidgets.QSplitter.restoreState?4(QByteArray) -> bool -QtWidgets.QSplitter.handleWidth?4() -> int -QtWidgets.QSplitter.setHandleWidth?4(int) -QtWidgets.QSplitter.indexOf?4(QWidget) -> int -QtWidgets.QSplitter.widget?4(int) -> QWidget -QtWidgets.QSplitter.count?4() -> int -QtWidgets.QSplitter.getRange?4(int) -> (int, int) -QtWidgets.QSplitter.handle?4(int) -> QSplitterHandle -QtWidgets.QSplitter.setStretchFactor?4(int, int) -QtWidgets.QSplitter.replaceWidget?4(int, QWidget) -> QWidget -QtWidgets.QSplitter.splitterMoved?4(int, int) -QtWidgets.QSplitter.createHandle?4() -> QSplitterHandle -QtWidgets.QSplitter.childEvent?4(QChildEvent) -QtWidgets.QSplitter.event?4(QEvent) -> bool -QtWidgets.QSplitter.resizeEvent?4(QResizeEvent) -QtWidgets.QSplitter.changeEvent?4(QEvent) -QtWidgets.QSplitter.moveSplitter?4(int, int) -QtWidgets.QSplitter.setRubberBand?4(int) -QtWidgets.QSplitter.closestLegalPosition?4(int, int) -> int -QtWidgets.QSplitterHandle?1(Qt.Orientation, QSplitter) -QtWidgets.QSplitterHandle.__init__?1(self, Qt.Orientation, QSplitter) -QtWidgets.QSplitterHandle.setOrientation?4(Qt.Orientation) -QtWidgets.QSplitterHandle.orientation?4() -> Qt.Orientation -QtWidgets.QSplitterHandle.opaqueResize?4() -> bool -QtWidgets.QSplitterHandle.splitter?4() -> QSplitter -QtWidgets.QSplitterHandle.sizeHint?4() -> QSize -QtWidgets.QSplitterHandle.paintEvent?4(QPaintEvent) -QtWidgets.QSplitterHandle.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QSplitterHandle.mousePressEvent?4(QMouseEvent) -QtWidgets.QSplitterHandle.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QSplitterHandle.event?4(QEvent) -> bool -QtWidgets.QSplitterHandle.moveSplitter?4(int) -QtWidgets.QSplitterHandle.closestLegalPosition?4(int) -> int -QtWidgets.QSplitterHandle.resizeEvent?4(QResizeEvent) -QtWidgets.QStackedLayout.StackingMode?10 -QtWidgets.QStackedLayout.StackingMode.StackOne?10 -QtWidgets.QStackedLayout.StackingMode.StackAll?10 -QtWidgets.QStackedLayout?1() -QtWidgets.QStackedLayout.__init__?1(self) -QtWidgets.QStackedLayout?1(QWidget) -QtWidgets.QStackedLayout.__init__?1(self, QWidget) -QtWidgets.QStackedLayout?1(QLayout) -QtWidgets.QStackedLayout.__init__?1(self, QLayout) -QtWidgets.QStackedLayout.addWidget?4(QWidget) -> int -QtWidgets.QStackedLayout.insertWidget?4(int, QWidget) -> int -QtWidgets.QStackedLayout.currentWidget?4() -> QWidget -QtWidgets.QStackedLayout.currentIndex?4() -> int -QtWidgets.QStackedLayout.widget?4(int) -> QWidget -QtWidgets.QStackedLayout.count?4() -> int -QtWidgets.QStackedLayout.addItem?4(QLayoutItem) -QtWidgets.QStackedLayout.sizeHint?4() -> QSize -QtWidgets.QStackedLayout.minimumSize?4() -> QSize -QtWidgets.QStackedLayout.itemAt?4(int) -> QLayoutItem -QtWidgets.QStackedLayout.takeAt?4(int) -> QLayoutItem -QtWidgets.QStackedLayout.setGeometry?4(QRect) -QtWidgets.QStackedLayout.widgetRemoved?4(int) -QtWidgets.QStackedLayout.currentChanged?4(int) -QtWidgets.QStackedLayout.setCurrentIndex?4(int) -QtWidgets.QStackedLayout.setCurrentWidget?4(QWidget) -QtWidgets.QStackedLayout.stackingMode?4() -> QStackedLayout.StackingMode -QtWidgets.QStackedLayout.setStackingMode?4(QStackedLayout.StackingMode) -QtWidgets.QStackedLayout.hasHeightForWidth?4() -> bool -QtWidgets.QStackedLayout.heightForWidth?4(int) -> int -QtWidgets.QStackedWidget?1(QWidget parent=None) -QtWidgets.QStackedWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QStackedWidget.addWidget?4(QWidget) -> int -QtWidgets.QStackedWidget.insertWidget?4(int, QWidget) -> int -QtWidgets.QStackedWidget.removeWidget?4(QWidget) -QtWidgets.QStackedWidget.currentWidget?4() -> QWidget -QtWidgets.QStackedWidget.currentIndex?4() -> int -QtWidgets.QStackedWidget.indexOf?4(QWidget) -> int -QtWidgets.QStackedWidget.widget?4(int) -> QWidget -QtWidgets.QStackedWidget.count?4() -> int -QtWidgets.QStackedWidget.setCurrentIndex?4(int) -QtWidgets.QStackedWidget.setCurrentWidget?4(QWidget) -QtWidgets.QStackedWidget.currentChanged?4(int) -QtWidgets.QStackedWidget.widgetRemoved?4(int) -QtWidgets.QStackedWidget.event?4(QEvent) -> bool -QtWidgets.QStatusBar?1(QWidget parent=None) -QtWidgets.QStatusBar.__init__?1(self, QWidget parent=None) -QtWidgets.QStatusBar.addWidget?4(QWidget, int stretch=0) -QtWidgets.QStatusBar.addPermanentWidget?4(QWidget, int stretch=0) -QtWidgets.QStatusBar.removeWidget?4(QWidget) -QtWidgets.QStatusBar.setSizeGripEnabled?4(bool) -QtWidgets.QStatusBar.isSizeGripEnabled?4() -> bool -QtWidgets.QStatusBar.currentMessage?4() -> QString -QtWidgets.QStatusBar.insertWidget?4(int, QWidget, int stretch=0) -> int -QtWidgets.QStatusBar.insertPermanentWidget?4(int, QWidget, int stretch=0) -> int -QtWidgets.QStatusBar.showMessage?4(QString, int msecs=0) -QtWidgets.QStatusBar.clearMessage?4() -QtWidgets.QStatusBar.messageChanged?4(QString) -QtWidgets.QStatusBar.paintEvent?4(QPaintEvent) -QtWidgets.QStatusBar.resizeEvent?4(QResizeEvent) -QtWidgets.QStatusBar.reformat?4() -QtWidgets.QStatusBar.hideOrShow?4() -QtWidgets.QStatusBar.event?4(QEvent) -> bool -QtWidgets.QStatusBar.showEvent?4(QShowEvent) -QtWidgets.QStyledItemDelegate?1(QObject parent=None) -QtWidgets.QStyledItemDelegate.__init__?1(self, QObject parent=None) -QtWidgets.QStyledItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) -QtWidgets.QStyledItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize -QtWidgets.QStyledItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget -QtWidgets.QStyledItemDelegate.setEditorData?4(QWidget, QModelIndex) -QtWidgets.QStyledItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) -QtWidgets.QStyledItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) -QtWidgets.QStyledItemDelegate.itemEditorFactory?4() -> QItemEditorFactory -QtWidgets.QStyledItemDelegate.setItemEditorFactory?4(QItemEditorFactory) -QtWidgets.QStyledItemDelegate.displayText?4(QVariant, QLocale) -> QString -QtWidgets.QStyledItemDelegate.initStyleOption?4(QStyleOptionViewItem, QModelIndex) -QtWidgets.QStyledItemDelegate.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QStyledItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool -QtWidgets.QStyleFactory?1() -QtWidgets.QStyleFactory.__init__?1(self) -QtWidgets.QStyleFactory?1(QStyleFactory) -QtWidgets.QStyleFactory.__init__?1(self, QStyleFactory) -QtWidgets.QStyleFactory.keys?4() -> QStringList -QtWidgets.QStyleFactory.create?4(QString) -> QStyle -QtWidgets.QStyleOption.StyleOptionVersion?10 -QtWidgets.QStyleOption.StyleOptionVersion.Version?10 -QtWidgets.QStyleOption.StyleOptionType?10 -QtWidgets.QStyleOption.StyleOptionType.Type?10 -QtWidgets.QStyleOption.OptionType?10 -QtWidgets.QStyleOption.OptionType.SO_Default?10 -QtWidgets.QStyleOption.OptionType.SO_FocusRect?10 -QtWidgets.QStyleOption.OptionType.SO_Button?10 -QtWidgets.QStyleOption.OptionType.SO_Tab?10 -QtWidgets.QStyleOption.OptionType.SO_MenuItem?10 -QtWidgets.QStyleOption.OptionType.SO_Frame?10 -QtWidgets.QStyleOption.OptionType.SO_ProgressBar?10 -QtWidgets.QStyleOption.OptionType.SO_ToolBox?10 -QtWidgets.QStyleOption.OptionType.SO_Header?10 -QtWidgets.QStyleOption.OptionType.SO_DockWidget?10 -QtWidgets.QStyleOption.OptionType.SO_ViewItem?10 -QtWidgets.QStyleOption.OptionType.SO_TabWidgetFrame?10 -QtWidgets.QStyleOption.OptionType.SO_TabBarBase?10 -QtWidgets.QStyleOption.OptionType.SO_RubberBand?10 -QtWidgets.QStyleOption.OptionType.SO_ToolBar?10 -QtWidgets.QStyleOption.OptionType.SO_Complex?10 -QtWidgets.QStyleOption.OptionType.SO_Slider?10 -QtWidgets.QStyleOption.OptionType.SO_SpinBox?10 -QtWidgets.QStyleOption.OptionType.SO_ToolButton?10 -QtWidgets.QStyleOption.OptionType.SO_ComboBox?10 -QtWidgets.QStyleOption.OptionType.SO_TitleBar?10 -QtWidgets.QStyleOption.OptionType.SO_GroupBox?10 -QtWidgets.QStyleOption.OptionType.SO_ComplexCustomBase?10 -QtWidgets.QStyleOption.OptionType.SO_GraphicsItem?10 -QtWidgets.QStyleOption.OptionType.SO_SizeGrip?10 -QtWidgets.QStyleOption.OptionType.SO_CustomBase?10 -QtWidgets.QStyleOption.direction?7 -QtWidgets.QStyleOption.fontMetrics?7 -QtWidgets.QStyleOption.palette?7 -QtWidgets.QStyleOption.rect?7 -QtWidgets.QStyleOption.state?7 -QtWidgets.QStyleOption.styleObject?7 -QtWidgets.QStyleOption.type?7 -QtWidgets.QStyleOption.version?7 -QtWidgets.QStyleOption?1(int version=QStyleOption.Version, int type=QStyleOption.SO_Default) -QtWidgets.QStyleOption.__init__?1(self, int version=QStyleOption.Version, int type=QStyleOption.SO_Default) -QtWidgets.QStyleOption?1(QStyleOption) -QtWidgets.QStyleOption.__init__?1(self, QStyleOption) -QtWidgets.QStyleOption.initFrom?4(QWidget) -QtWidgets.QStyleOptionFocusRect.StyleOptionVersion?10 -QtWidgets.QStyleOptionFocusRect.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionFocusRect.StyleOptionType?10 -QtWidgets.QStyleOptionFocusRect.StyleOptionType.Type?10 -QtWidgets.QStyleOptionFocusRect.backgroundColor?7 -QtWidgets.QStyleOptionFocusRect?1() -QtWidgets.QStyleOptionFocusRect.__init__?1(self) -QtWidgets.QStyleOptionFocusRect?1(QStyleOptionFocusRect) -QtWidgets.QStyleOptionFocusRect.__init__?1(self, QStyleOptionFocusRect) -QtWidgets.QStyleOptionFrame.FrameFeature?10 -QtWidgets.QStyleOptionFrame.FrameFeature.None_?10 -QtWidgets.QStyleOptionFrame.FrameFeature.Flat?10 -QtWidgets.QStyleOptionFrame.FrameFeature.Rounded?10 -QtWidgets.QStyleOptionFrame.StyleOptionVersion?10 -QtWidgets.QStyleOptionFrame.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionFrame.StyleOptionType?10 -QtWidgets.QStyleOptionFrame.StyleOptionType.Type?10 -QtWidgets.QStyleOptionFrame.features?7 -QtWidgets.QStyleOptionFrame.frameShape?7 -QtWidgets.QStyleOptionFrame.lineWidth?7 -QtWidgets.QStyleOptionFrame.midLineWidth?7 -QtWidgets.QStyleOptionFrame?1() -QtWidgets.QStyleOptionFrame.__init__?1(self) -QtWidgets.QStyleOptionFrame?1(QStyleOptionFrame) -QtWidgets.QStyleOptionFrame.__init__?1(self, QStyleOptionFrame) -QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionVersion?10 -QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionType?10 -QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionType.Type?10 -QtWidgets.QStyleOptionTabWidgetFrame.leftCornerWidgetSize?7 -QtWidgets.QStyleOptionTabWidgetFrame.lineWidth?7 -QtWidgets.QStyleOptionTabWidgetFrame.midLineWidth?7 -QtWidgets.QStyleOptionTabWidgetFrame.rightCornerWidgetSize?7 -QtWidgets.QStyleOptionTabWidgetFrame.selectedTabRect?7 -QtWidgets.QStyleOptionTabWidgetFrame.shape?7 -QtWidgets.QStyleOptionTabWidgetFrame.tabBarRect?7 -QtWidgets.QStyleOptionTabWidgetFrame.tabBarSize?7 -QtWidgets.QStyleOptionTabWidgetFrame?1() -QtWidgets.QStyleOptionTabWidgetFrame.__init__?1(self) -QtWidgets.QStyleOptionTabWidgetFrame?1(QStyleOptionTabWidgetFrame) -QtWidgets.QStyleOptionTabWidgetFrame.__init__?1(self, QStyleOptionTabWidgetFrame) -QtWidgets.QStyleOptionTabBarBase.StyleOptionVersion?10 -QtWidgets.QStyleOptionTabBarBase.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionTabBarBase.StyleOptionType?10 -QtWidgets.QStyleOptionTabBarBase.StyleOptionType.Type?10 -QtWidgets.QStyleOptionTabBarBase.documentMode?7 -QtWidgets.QStyleOptionTabBarBase.selectedTabRect?7 -QtWidgets.QStyleOptionTabBarBase.shape?7 -QtWidgets.QStyleOptionTabBarBase.tabBarRect?7 -QtWidgets.QStyleOptionTabBarBase?1() -QtWidgets.QStyleOptionTabBarBase.__init__?1(self) -QtWidgets.QStyleOptionTabBarBase?1(QStyleOptionTabBarBase) -QtWidgets.QStyleOptionTabBarBase.__init__?1(self, QStyleOptionTabBarBase) -QtWidgets.QStyleOptionHeader.SortIndicator?10 -QtWidgets.QStyleOptionHeader.SortIndicator.None_?10 -QtWidgets.QStyleOptionHeader.SortIndicator.SortUp?10 -QtWidgets.QStyleOptionHeader.SortIndicator.SortDown?10 -QtWidgets.QStyleOptionHeader.SelectedPosition?10 -QtWidgets.QStyleOptionHeader.SelectedPosition.NotAdjacent?10 -QtWidgets.QStyleOptionHeader.SelectedPosition.NextIsSelected?10 -QtWidgets.QStyleOptionHeader.SelectedPosition.PreviousIsSelected?10 -QtWidgets.QStyleOptionHeader.SelectedPosition.NextAndPreviousAreSelected?10 -QtWidgets.QStyleOptionHeader.SectionPosition?10 -QtWidgets.QStyleOptionHeader.SectionPosition.Beginning?10 -QtWidgets.QStyleOptionHeader.SectionPosition.Middle?10 -QtWidgets.QStyleOptionHeader.SectionPosition.End?10 -QtWidgets.QStyleOptionHeader.SectionPosition.OnlyOneSection?10 -QtWidgets.QStyleOptionHeader.StyleOptionVersion?10 -QtWidgets.QStyleOptionHeader.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionHeader.StyleOptionType?10 -QtWidgets.QStyleOptionHeader.StyleOptionType.Type?10 -QtWidgets.QStyleOptionHeader.icon?7 -QtWidgets.QStyleOptionHeader.iconAlignment?7 -QtWidgets.QStyleOptionHeader.orientation?7 -QtWidgets.QStyleOptionHeader.position?7 -QtWidgets.QStyleOptionHeader.section?7 -QtWidgets.QStyleOptionHeader.selectedPosition?7 -QtWidgets.QStyleOptionHeader.sortIndicator?7 -QtWidgets.QStyleOptionHeader.text?7 -QtWidgets.QStyleOptionHeader.textAlignment?7 -QtWidgets.QStyleOptionHeader?1() -QtWidgets.QStyleOptionHeader.__init__?1(self) -QtWidgets.QStyleOptionHeader?1(QStyleOptionHeader) -QtWidgets.QStyleOptionHeader.__init__?1(self, QStyleOptionHeader) -QtWidgets.QStyleOptionHeaderV2.StyleOptionVersion?10 -QtWidgets.QStyleOptionHeaderV2.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionHeaderV2.StyleOptionType?10 -QtWidgets.QStyleOptionHeaderV2.StyleOptionType.Type?10 -QtWidgets.QStyleOptionHeaderV2.isSectionDragTarget?7 -QtWidgets.QStyleOptionHeaderV2.textElideMode?7 -QtWidgets.QStyleOptionHeaderV2?1() -QtWidgets.QStyleOptionHeaderV2.__init__?1(self) -QtWidgets.QStyleOptionHeaderV2?1(QStyleOptionHeaderV2) -QtWidgets.QStyleOptionHeaderV2.__init__?1(self, QStyleOptionHeaderV2) -QtWidgets.QStyleOptionButton.ButtonFeature?10 -QtWidgets.QStyleOptionButton.ButtonFeature.None_?10 -QtWidgets.QStyleOptionButton.ButtonFeature.Flat?10 -QtWidgets.QStyleOptionButton.ButtonFeature.HasMenu?10 -QtWidgets.QStyleOptionButton.ButtonFeature.DefaultButton?10 -QtWidgets.QStyleOptionButton.ButtonFeature.AutoDefaultButton?10 -QtWidgets.QStyleOptionButton.ButtonFeature.CommandLinkButton?10 -QtWidgets.QStyleOptionButton.StyleOptionVersion?10 -QtWidgets.QStyleOptionButton.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionButton.StyleOptionType?10 -QtWidgets.QStyleOptionButton.StyleOptionType.Type?10 -QtWidgets.QStyleOptionButton.features?7 -QtWidgets.QStyleOptionButton.icon?7 -QtWidgets.QStyleOptionButton.iconSize?7 -QtWidgets.QStyleOptionButton.text?7 -QtWidgets.QStyleOptionButton?1() -QtWidgets.QStyleOptionButton.__init__?1(self) -QtWidgets.QStyleOptionButton?1(QStyleOptionButton) -QtWidgets.QStyleOptionButton.__init__?1(self, QStyleOptionButton) -QtWidgets.QStyleOptionTab.TabFeature?10 -QtWidgets.QStyleOptionTab.TabFeature.None_?10 -QtWidgets.QStyleOptionTab.TabFeature.HasFrame?10 -QtWidgets.QStyleOptionTab.CornerWidget?10 -QtWidgets.QStyleOptionTab.CornerWidget.NoCornerWidgets?10 -QtWidgets.QStyleOptionTab.CornerWidget.LeftCornerWidget?10 -QtWidgets.QStyleOptionTab.CornerWidget.RightCornerWidget?10 -QtWidgets.QStyleOptionTab.SelectedPosition?10 -QtWidgets.QStyleOptionTab.SelectedPosition.NotAdjacent?10 -QtWidgets.QStyleOptionTab.SelectedPosition.NextIsSelected?10 -QtWidgets.QStyleOptionTab.SelectedPosition.PreviousIsSelected?10 -QtWidgets.QStyleOptionTab.TabPosition?10 -QtWidgets.QStyleOptionTab.TabPosition.Beginning?10 -QtWidgets.QStyleOptionTab.TabPosition.Middle?10 -QtWidgets.QStyleOptionTab.TabPosition.End?10 -QtWidgets.QStyleOptionTab.TabPosition.OnlyOneTab?10 -QtWidgets.QStyleOptionTab.TabPosition.Moving?10 -QtWidgets.QStyleOptionTab.StyleOptionVersion?10 -QtWidgets.QStyleOptionTab.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionTab.StyleOptionType?10 -QtWidgets.QStyleOptionTab.StyleOptionType.Type?10 -QtWidgets.QStyleOptionTab.cornerWidgets?7 -QtWidgets.QStyleOptionTab.documentMode?7 -QtWidgets.QStyleOptionTab.features?7 -QtWidgets.QStyleOptionTab.icon?7 -QtWidgets.QStyleOptionTab.iconSize?7 -QtWidgets.QStyleOptionTab.leftButtonSize?7 -QtWidgets.QStyleOptionTab.position?7 -QtWidgets.QStyleOptionTab.rightButtonSize?7 -QtWidgets.QStyleOptionTab.row?7 -QtWidgets.QStyleOptionTab.selectedPosition?7 -QtWidgets.QStyleOptionTab.shape?7 -QtWidgets.QStyleOptionTab.tabIndex?7 -QtWidgets.QStyleOptionTab.text?7 -QtWidgets.QStyleOptionTab?1() -QtWidgets.QStyleOptionTab.__init__?1(self) -QtWidgets.QStyleOptionTab?1(QStyleOptionTab) -QtWidgets.QStyleOptionTab.__init__?1(self, QStyleOptionTab) -QtWidgets.QStyleOptionProgressBar.StyleOptionVersion?10 -QtWidgets.QStyleOptionProgressBar.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionProgressBar.StyleOptionType?10 -QtWidgets.QStyleOptionProgressBar.StyleOptionType.Type?10 -QtWidgets.QStyleOptionProgressBar.bottomToTop?7 -QtWidgets.QStyleOptionProgressBar.invertedAppearance?7 -QtWidgets.QStyleOptionProgressBar.maximum?7 -QtWidgets.QStyleOptionProgressBar.minimum?7 -QtWidgets.QStyleOptionProgressBar.progress?7 -QtWidgets.QStyleOptionProgressBar.text?7 -QtWidgets.QStyleOptionProgressBar.textAlignment?7 -QtWidgets.QStyleOptionProgressBar.textVisible?7 -QtWidgets.QStyleOptionProgressBar?1() -QtWidgets.QStyleOptionProgressBar.__init__?1(self) -QtWidgets.QStyleOptionProgressBar?1(QStyleOptionProgressBar) -QtWidgets.QStyleOptionProgressBar.__init__?1(self, QStyleOptionProgressBar) -QtWidgets.QStyleOptionMenuItem.CheckType?10 -QtWidgets.QStyleOptionMenuItem.CheckType.NotCheckable?10 -QtWidgets.QStyleOptionMenuItem.CheckType.Exclusive?10 -QtWidgets.QStyleOptionMenuItem.CheckType.NonExclusive?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.Normal?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.DefaultItem?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.Separator?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.SubMenu?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.Scroller?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.TearOff?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.Margin?10 -QtWidgets.QStyleOptionMenuItem.MenuItemType.EmptyArea?10 -QtWidgets.QStyleOptionMenuItem.StyleOptionVersion?10 -QtWidgets.QStyleOptionMenuItem.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionMenuItem.StyleOptionType?10 -QtWidgets.QStyleOptionMenuItem.StyleOptionType.Type?10 -QtWidgets.QStyleOptionMenuItem.checkType?7 -QtWidgets.QStyleOptionMenuItem.checked?7 -QtWidgets.QStyleOptionMenuItem.font?7 -QtWidgets.QStyleOptionMenuItem.icon?7 -QtWidgets.QStyleOptionMenuItem.maxIconWidth?7 -QtWidgets.QStyleOptionMenuItem.menuHasCheckableItems?7 -QtWidgets.QStyleOptionMenuItem.menuItemType?7 -QtWidgets.QStyleOptionMenuItem.menuRect?7 -QtWidgets.QStyleOptionMenuItem.reservedShortcutWidth?7 -QtWidgets.QStyleOptionMenuItem.text?7 -QtWidgets.QStyleOptionMenuItem?1() -QtWidgets.QStyleOptionMenuItem.__init__?1(self) -QtWidgets.QStyleOptionMenuItem?1(QStyleOptionMenuItem) -QtWidgets.QStyleOptionMenuItem.__init__?1(self, QStyleOptionMenuItem) -QtWidgets.QStyleOptionDockWidget.StyleOptionVersion?10 -QtWidgets.QStyleOptionDockWidget.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionDockWidget.StyleOptionType?10 -QtWidgets.QStyleOptionDockWidget.StyleOptionType.Type?10 -QtWidgets.QStyleOptionDockWidget.closable?7 -QtWidgets.QStyleOptionDockWidget.floatable?7 -QtWidgets.QStyleOptionDockWidget.movable?7 -QtWidgets.QStyleOptionDockWidget.title?7 -QtWidgets.QStyleOptionDockWidget.verticalTitleBar?7 -QtWidgets.QStyleOptionDockWidget?1() -QtWidgets.QStyleOptionDockWidget.__init__?1(self) -QtWidgets.QStyleOptionDockWidget?1(QStyleOptionDockWidget) -QtWidgets.QStyleOptionDockWidget.__init__?1(self, QStyleOptionDockWidget) -QtWidgets.QStyleOptionViewItem.ViewItemPosition?10 -QtWidgets.QStyleOptionViewItem.ViewItemPosition.Invalid?10 -QtWidgets.QStyleOptionViewItem.ViewItemPosition.Beginning?10 -QtWidgets.QStyleOptionViewItem.ViewItemPosition.Middle?10 -QtWidgets.QStyleOptionViewItem.ViewItemPosition.End?10 -QtWidgets.QStyleOptionViewItem.ViewItemPosition.OnlyOne?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.None_?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.WrapText?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.Alternate?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasCheckIndicator?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasDisplay?10 -QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasDecoration?10 -QtWidgets.QStyleOptionViewItem.Position?10 -QtWidgets.QStyleOptionViewItem.Position.Left?10 -QtWidgets.QStyleOptionViewItem.Position.Right?10 -QtWidgets.QStyleOptionViewItem.Position.Top?10 -QtWidgets.QStyleOptionViewItem.Position.Bottom?10 -QtWidgets.QStyleOptionViewItem.StyleOptionVersion?10 -QtWidgets.QStyleOptionViewItem.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionViewItem.StyleOptionType?10 -QtWidgets.QStyleOptionViewItem.StyleOptionType.Type?10 -QtWidgets.QStyleOptionViewItem.backgroundBrush?7 -QtWidgets.QStyleOptionViewItem.checkState?7 -QtWidgets.QStyleOptionViewItem.decorationAlignment?7 -QtWidgets.QStyleOptionViewItem.decorationPosition?7 -QtWidgets.QStyleOptionViewItem.decorationSize?7 -QtWidgets.QStyleOptionViewItem.displayAlignment?7 -QtWidgets.QStyleOptionViewItem.features?7 -QtWidgets.QStyleOptionViewItem.font?7 -QtWidgets.QStyleOptionViewItem.icon?7 -QtWidgets.QStyleOptionViewItem.index?7 -QtWidgets.QStyleOptionViewItem.locale?7 -QtWidgets.QStyleOptionViewItem.showDecorationSelected?7 -QtWidgets.QStyleOptionViewItem.text?7 -QtWidgets.QStyleOptionViewItem.textElideMode?7 -QtWidgets.QStyleOptionViewItem.viewItemPosition?7 -QtWidgets.QStyleOptionViewItem.widget?7 -QtWidgets.QStyleOptionViewItem?1() -QtWidgets.QStyleOptionViewItem.__init__?1(self) -QtWidgets.QStyleOptionViewItem?1(QStyleOptionViewItem) -QtWidgets.QStyleOptionViewItem.__init__?1(self, QStyleOptionViewItem) -QtWidgets.QStyleOptionToolBox.SelectedPosition?10 -QtWidgets.QStyleOptionToolBox.SelectedPosition.NotAdjacent?10 -QtWidgets.QStyleOptionToolBox.SelectedPosition.NextIsSelected?10 -QtWidgets.QStyleOptionToolBox.SelectedPosition.PreviousIsSelected?10 -QtWidgets.QStyleOptionToolBox.TabPosition?10 -QtWidgets.QStyleOptionToolBox.TabPosition.Beginning?10 -QtWidgets.QStyleOptionToolBox.TabPosition.Middle?10 -QtWidgets.QStyleOptionToolBox.TabPosition.End?10 -QtWidgets.QStyleOptionToolBox.TabPosition.OnlyOneTab?10 -QtWidgets.QStyleOptionToolBox.StyleOptionVersion?10 -QtWidgets.QStyleOptionToolBox.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionToolBox.StyleOptionType?10 -QtWidgets.QStyleOptionToolBox.StyleOptionType.Type?10 -QtWidgets.QStyleOptionToolBox.icon?7 -QtWidgets.QStyleOptionToolBox.position?7 -QtWidgets.QStyleOptionToolBox.selectedPosition?7 -QtWidgets.QStyleOptionToolBox.text?7 -QtWidgets.QStyleOptionToolBox?1() -QtWidgets.QStyleOptionToolBox.__init__?1(self) -QtWidgets.QStyleOptionToolBox?1(QStyleOptionToolBox) -QtWidgets.QStyleOptionToolBox.__init__?1(self, QStyleOptionToolBox) -QtWidgets.QStyleOptionRubberBand.StyleOptionVersion?10 -QtWidgets.QStyleOptionRubberBand.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionRubberBand.StyleOptionType?10 -QtWidgets.QStyleOptionRubberBand.StyleOptionType.Type?10 -QtWidgets.QStyleOptionRubberBand.opaque?7 -QtWidgets.QStyleOptionRubberBand.shape?7 -QtWidgets.QStyleOptionRubberBand?1() -QtWidgets.QStyleOptionRubberBand.__init__?1(self) -QtWidgets.QStyleOptionRubberBand?1(QStyleOptionRubberBand) -QtWidgets.QStyleOptionRubberBand.__init__?1(self, QStyleOptionRubberBand) -QtWidgets.QStyleOptionComplex.StyleOptionVersion?10 -QtWidgets.QStyleOptionComplex.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionComplex.StyleOptionType?10 -QtWidgets.QStyleOptionComplex.StyleOptionType.Type?10 -QtWidgets.QStyleOptionComplex.activeSubControls?7 -QtWidgets.QStyleOptionComplex.subControls?7 -QtWidgets.QStyleOptionComplex?1(int version=QStyleOptionComplex.Version, int type=QStyleOption.SO_Complex) -QtWidgets.QStyleOptionComplex.__init__?1(self, int version=QStyleOptionComplex.Version, int type=QStyleOption.SO_Complex) -QtWidgets.QStyleOptionComplex?1(QStyleOptionComplex) -QtWidgets.QStyleOptionComplex.__init__?1(self, QStyleOptionComplex) -QtWidgets.QStyleOptionSlider.StyleOptionVersion?10 -QtWidgets.QStyleOptionSlider.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionSlider.StyleOptionType?10 -QtWidgets.QStyleOptionSlider.StyleOptionType.Type?10 -QtWidgets.QStyleOptionSlider.dialWrapping?7 -QtWidgets.QStyleOptionSlider.keyboardModifiers?7 -QtWidgets.QStyleOptionSlider.maximum?7 -QtWidgets.QStyleOptionSlider.minimum?7 -QtWidgets.QStyleOptionSlider.notchTarget?7 -QtWidgets.QStyleOptionSlider.orientation?7 -QtWidgets.QStyleOptionSlider.pageStep?7 -QtWidgets.QStyleOptionSlider.singleStep?7 -QtWidgets.QStyleOptionSlider.sliderPosition?7 -QtWidgets.QStyleOptionSlider.sliderValue?7 -QtWidgets.QStyleOptionSlider.tickInterval?7 -QtWidgets.QStyleOptionSlider.tickPosition?7 -QtWidgets.QStyleOptionSlider.upsideDown?7 -QtWidgets.QStyleOptionSlider?1() -QtWidgets.QStyleOptionSlider.__init__?1(self) -QtWidgets.QStyleOptionSlider?1(QStyleOptionSlider) -QtWidgets.QStyleOptionSlider.__init__?1(self, QStyleOptionSlider) -QtWidgets.QStyleOptionSpinBox.StyleOptionVersion?10 -QtWidgets.QStyleOptionSpinBox.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionSpinBox.StyleOptionType?10 -QtWidgets.QStyleOptionSpinBox.StyleOptionType.Type?10 -QtWidgets.QStyleOptionSpinBox.buttonSymbols?7 -QtWidgets.QStyleOptionSpinBox.frame?7 -QtWidgets.QStyleOptionSpinBox.stepEnabled?7 -QtWidgets.QStyleOptionSpinBox?1() -QtWidgets.QStyleOptionSpinBox.__init__?1(self) -QtWidgets.QStyleOptionSpinBox?1(QStyleOptionSpinBox) -QtWidgets.QStyleOptionSpinBox.__init__?1(self, QStyleOptionSpinBox) -QtWidgets.QStyleOptionToolButton.ToolButtonFeature?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.None_?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.Arrow?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.Menu?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.PopupDelay?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.MenuButtonPopup?10 -QtWidgets.QStyleOptionToolButton.ToolButtonFeature.HasMenu?10 -QtWidgets.QStyleOptionToolButton.StyleOptionVersion?10 -QtWidgets.QStyleOptionToolButton.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionToolButton.StyleOptionType?10 -QtWidgets.QStyleOptionToolButton.StyleOptionType.Type?10 -QtWidgets.QStyleOptionToolButton.arrowType?7 -QtWidgets.QStyleOptionToolButton.features?7 -QtWidgets.QStyleOptionToolButton.font?7 -QtWidgets.QStyleOptionToolButton.icon?7 -QtWidgets.QStyleOptionToolButton.iconSize?7 -QtWidgets.QStyleOptionToolButton.pos?7 -QtWidgets.QStyleOptionToolButton.text?7 -QtWidgets.QStyleOptionToolButton.toolButtonStyle?7 -QtWidgets.QStyleOptionToolButton?1() -QtWidgets.QStyleOptionToolButton.__init__?1(self) -QtWidgets.QStyleOptionToolButton?1(QStyleOptionToolButton) -QtWidgets.QStyleOptionToolButton.__init__?1(self, QStyleOptionToolButton) -QtWidgets.QStyleOptionComboBox.StyleOptionVersion?10 -QtWidgets.QStyleOptionComboBox.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionComboBox.StyleOptionType?10 -QtWidgets.QStyleOptionComboBox.StyleOptionType.Type?10 -QtWidgets.QStyleOptionComboBox.currentIcon?7 -QtWidgets.QStyleOptionComboBox.currentText?7 -QtWidgets.QStyleOptionComboBox.editable?7 -QtWidgets.QStyleOptionComboBox.frame?7 -QtWidgets.QStyleOptionComboBox.iconSize?7 -QtWidgets.QStyleOptionComboBox.popupRect?7 -QtWidgets.QStyleOptionComboBox.textAlignment?7 -QtWidgets.QStyleOptionComboBox?1() -QtWidgets.QStyleOptionComboBox.__init__?1(self) -QtWidgets.QStyleOptionComboBox?1(QStyleOptionComboBox) -QtWidgets.QStyleOptionComboBox.__init__?1(self, QStyleOptionComboBox) -QtWidgets.QStyleOptionTitleBar.StyleOptionVersion?10 -QtWidgets.QStyleOptionTitleBar.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionTitleBar.StyleOptionType?10 -QtWidgets.QStyleOptionTitleBar.StyleOptionType.Type?10 -QtWidgets.QStyleOptionTitleBar.icon?7 -QtWidgets.QStyleOptionTitleBar.text?7 -QtWidgets.QStyleOptionTitleBar.titleBarFlags?7 -QtWidgets.QStyleOptionTitleBar.titleBarState?7 -QtWidgets.QStyleOptionTitleBar?1() -QtWidgets.QStyleOptionTitleBar.__init__?1(self) -QtWidgets.QStyleOptionTitleBar?1(QStyleOptionTitleBar) -QtWidgets.QStyleOptionTitleBar.__init__?1(self, QStyleOptionTitleBar) -QtWidgets.QStyleHintReturn.StyleOptionVersion?10 -QtWidgets.QStyleHintReturn.StyleOptionVersion.Version?10 -QtWidgets.QStyleHintReturn.StyleOptionType?10 -QtWidgets.QStyleHintReturn.StyleOptionType.Type?10 -QtWidgets.QStyleHintReturn.HintReturnType?10 -QtWidgets.QStyleHintReturn.HintReturnType.SH_Default?10 -QtWidgets.QStyleHintReturn.HintReturnType.SH_Mask?10 -QtWidgets.QStyleHintReturn.HintReturnType.SH_Variant?10 -QtWidgets.QStyleHintReturn.type?7 -QtWidgets.QStyleHintReturn.version?7 -QtWidgets.QStyleHintReturn?1(int version=QStyleOption.Version, int type=QStyleHintReturn.SH_Default) -QtWidgets.QStyleHintReturn.__init__?1(self, int version=QStyleOption.Version, int type=QStyleHintReturn.SH_Default) -QtWidgets.QStyleHintReturn?1(QStyleHintReturn) -QtWidgets.QStyleHintReturn.__init__?1(self, QStyleHintReturn) -QtWidgets.QStyleHintReturnMask.StyleOptionVersion?10 -QtWidgets.QStyleHintReturnMask.StyleOptionVersion.Version?10 -QtWidgets.QStyleHintReturnMask.StyleOptionType?10 -QtWidgets.QStyleHintReturnMask.StyleOptionType.Type?10 -QtWidgets.QStyleHintReturnMask.region?7 -QtWidgets.QStyleHintReturnMask?1() -QtWidgets.QStyleHintReturnMask.__init__?1(self) -QtWidgets.QStyleHintReturnMask?1(QStyleHintReturnMask) -QtWidgets.QStyleHintReturnMask.__init__?1(self, QStyleHintReturnMask) -QtWidgets.QStyleOptionToolBar.ToolBarFeature?10 -QtWidgets.QStyleOptionToolBar.ToolBarFeature.None_?10 -QtWidgets.QStyleOptionToolBar.ToolBarFeature.Movable?10 -QtWidgets.QStyleOptionToolBar.ToolBarPosition?10 -QtWidgets.QStyleOptionToolBar.ToolBarPosition.Beginning?10 -QtWidgets.QStyleOptionToolBar.ToolBarPosition.Middle?10 -QtWidgets.QStyleOptionToolBar.ToolBarPosition.End?10 -QtWidgets.QStyleOptionToolBar.ToolBarPosition.OnlyOne?10 -QtWidgets.QStyleOptionToolBar.StyleOptionVersion?10 -QtWidgets.QStyleOptionToolBar.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionToolBar.StyleOptionType?10 -QtWidgets.QStyleOptionToolBar.StyleOptionType.Type?10 -QtWidgets.QStyleOptionToolBar.features?7 -QtWidgets.QStyleOptionToolBar.lineWidth?7 -QtWidgets.QStyleOptionToolBar.midLineWidth?7 -QtWidgets.QStyleOptionToolBar.positionOfLine?7 -QtWidgets.QStyleOptionToolBar.positionWithinLine?7 -QtWidgets.QStyleOptionToolBar.toolBarArea?7 -QtWidgets.QStyleOptionToolBar?1() -QtWidgets.QStyleOptionToolBar.__init__?1(self) -QtWidgets.QStyleOptionToolBar?1(QStyleOptionToolBar) -QtWidgets.QStyleOptionToolBar.__init__?1(self, QStyleOptionToolBar) -QtWidgets.QStyleOptionGroupBox.StyleOptionVersion?10 -QtWidgets.QStyleOptionGroupBox.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionGroupBox.StyleOptionType?10 -QtWidgets.QStyleOptionGroupBox.StyleOptionType.Type?10 -QtWidgets.QStyleOptionGroupBox.features?7 -QtWidgets.QStyleOptionGroupBox.lineWidth?7 -QtWidgets.QStyleOptionGroupBox.midLineWidth?7 -QtWidgets.QStyleOptionGroupBox.text?7 -QtWidgets.QStyleOptionGroupBox.textAlignment?7 -QtWidgets.QStyleOptionGroupBox.textColor?7 -QtWidgets.QStyleOptionGroupBox?1() -QtWidgets.QStyleOptionGroupBox.__init__?1(self) -QtWidgets.QStyleOptionGroupBox?1(QStyleOptionGroupBox) -QtWidgets.QStyleOptionGroupBox.__init__?1(self, QStyleOptionGroupBox) -QtWidgets.QStyleOptionSizeGrip.StyleOptionVersion?10 -QtWidgets.QStyleOptionSizeGrip.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionSizeGrip.StyleOptionType?10 -QtWidgets.QStyleOptionSizeGrip.StyleOptionType.Type?10 -QtWidgets.QStyleOptionSizeGrip.corner?7 -QtWidgets.QStyleOptionSizeGrip?1() -QtWidgets.QStyleOptionSizeGrip.__init__?1(self) -QtWidgets.QStyleOptionSizeGrip?1(QStyleOptionSizeGrip) -QtWidgets.QStyleOptionSizeGrip.__init__?1(self, QStyleOptionSizeGrip) -QtWidgets.QStyleOptionGraphicsItem.StyleOptionVersion?10 -QtWidgets.QStyleOptionGraphicsItem.StyleOptionVersion.Version?10 -QtWidgets.QStyleOptionGraphicsItem.StyleOptionType?10 -QtWidgets.QStyleOptionGraphicsItem.StyleOptionType.Type?10 -QtWidgets.QStyleOptionGraphicsItem.exposedRect?7 -QtWidgets.QStyleOptionGraphicsItem?1() -QtWidgets.QStyleOptionGraphicsItem.__init__?1(self) -QtWidgets.QStyleOptionGraphicsItem?1(QStyleOptionGraphicsItem) -QtWidgets.QStyleOptionGraphicsItem.__init__?1(self, QStyleOptionGraphicsItem) -QtWidgets.QStyleOptionGraphicsItem.levelOfDetailFromTransform?4(QTransform) -> float -QtWidgets.QStyleHintReturnVariant.StyleOptionVersion?10 -QtWidgets.QStyleHintReturnVariant.StyleOptionVersion.Version?10 -QtWidgets.QStyleHintReturnVariant.StyleOptionType?10 -QtWidgets.QStyleHintReturnVariant.StyleOptionType.Type?10 -QtWidgets.QStyleHintReturnVariant.variant?7 -QtWidgets.QStyleHintReturnVariant?1() -QtWidgets.QStyleHintReturnVariant.__init__?1(self) -QtWidgets.QStyleHintReturnVariant?1(QStyleHintReturnVariant) -QtWidgets.QStyleHintReturnVariant.__init__?1(self, QStyleHintReturnVariant) -QtWidgets.QStylePainter?1() -QtWidgets.QStylePainter.__init__?1(self) -QtWidgets.QStylePainter?1(QWidget) -QtWidgets.QStylePainter.__init__?1(self, QWidget) -QtWidgets.QStylePainter?1(QPaintDevice, QWidget) -QtWidgets.QStylePainter.__init__?1(self, QPaintDevice, QWidget) -QtWidgets.QStylePainter.begin?4(QWidget) -> bool -QtWidgets.QStylePainter.begin?4(QPaintDevice, QWidget) -> bool -QtWidgets.QStylePainter.style?4() -> QStyle -QtWidgets.QStylePainter.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption) -QtWidgets.QStylePainter.drawControl?4(QStyle.ControlElement, QStyleOption) -QtWidgets.QStylePainter.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex) -QtWidgets.QStylePainter.drawItemText?4(QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) -QtWidgets.QStylePainter.drawItemPixmap?4(QRect, int, QPixmap) -QtWidgets.QSystemTrayIcon.MessageIcon?10 -QtWidgets.QSystemTrayIcon.MessageIcon.NoIcon?10 -QtWidgets.QSystemTrayIcon.MessageIcon.Information?10 -QtWidgets.QSystemTrayIcon.MessageIcon.Warning?10 -QtWidgets.QSystemTrayIcon.MessageIcon.Critical?10 -QtWidgets.QSystemTrayIcon.ActivationReason?10 -QtWidgets.QSystemTrayIcon.ActivationReason.Unknown?10 -QtWidgets.QSystemTrayIcon.ActivationReason.Context?10 -QtWidgets.QSystemTrayIcon.ActivationReason.DoubleClick?10 -QtWidgets.QSystemTrayIcon.ActivationReason.Trigger?10 -QtWidgets.QSystemTrayIcon.ActivationReason.MiddleClick?10 -QtWidgets.QSystemTrayIcon?1(QObject parent=None) -QtWidgets.QSystemTrayIcon.__init__?1(self, QObject parent=None) -QtWidgets.QSystemTrayIcon?1(QIcon, QObject parent=None) -QtWidgets.QSystemTrayIcon.__init__?1(self, QIcon, QObject parent=None) -QtWidgets.QSystemTrayIcon.setContextMenu?4(QMenu) -QtWidgets.QSystemTrayIcon.contextMenu?4() -> QMenu -QtWidgets.QSystemTrayIcon.geometry?4() -> QRect -QtWidgets.QSystemTrayIcon.icon?4() -> QIcon -QtWidgets.QSystemTrayIcon.setIcon?4(QIcon) -QtWidgets.QSystemTrayIcon.toolTip?4() -> QString -QtWidgets.QSystemTrayIcon.setToolTip?4(QString) -QtWidgets.QSystemTrayIcon.isSystemTrayAvailable?4() -> bool -QtWidgets.QSystemTrayIcon.supportsMessages?4() -> bool -QtWidgets.QSystemTrayIcon.showMessage?4(QString, QString, QSystemTrayIcon.MessageIcon icon=QSystemTrayIcon.Information, int msecs=10000) -QtWidgets.QSystemTrayIcon.showMessage?4(QString, QString, QIcon, int msecs=10000) -QtWidgets.QSystemTrayIcon.isVisible?4() -> bool -QtWidgets.QSystemTrayIcon.hide?4() -QtWidgets.QSystemTrayIcon.setVisible?4(bool) -QtWidgets.QSystemTrayIcon.show?4() -QtWidgets.QSystemTrayIcon.activated?4(QSystemTrayIcon.ActivationReason) -QtWidgets.QSystemTrayIcon.messageClicked?4() -QtWidgets.QSystemTrayIcon.event?4(QEvent) -> bool -QtWidgets.QTabBar.SelectionBehavior?10 -QtWidgets.QTabBar.SelectionBehavior.SelectLeftTab?10 -QtWidgets.QTabBar.SelectionBehavior.SelectRightTab?10 -QtWidgets.QTabBar.SelectionBehavior.SelectPreviousTab?10 -QtWidgets.QTabBar.ButtonPosition?10 -QtWidgets.QTabBar.ButtonPosition.LeftSide?10 -QtWidgets.QTabBar.ButtonPosition.RightSide?10 -QtWidgets.QTabBar.Shape?10 -QtWidgets.QTabBar.Shape.RoundedNorth?10 -QtWidgets.QTabBar.Shape.RoundedSouth?10 -QtWidgets.QTabBar.Shape.RoundedWest?10 -QtWidgets.QTabBar.Shape.RoundedEast?10 -QtWidgets.QTabBar.Shape.TriangularNorth?10 -QtWidgets.QTabBar.Shape.TriangularSouth?10 -QtWidgets.QTabBar.Shape.TriangularWest?10 -QtWidgets.QTabBar.Shape.TriangularEast?10 -QtWidgets.QTabBar?1(QWidget parent=None) -QtWidgets.QTabBar.__init__?1(self, QWidget parent=None) -QtWidgets.QTabBar.shape?4() -> QTabBar.Shape -QtWidgets.QTabBar.setShape?4(QTabBar.Shape) -QtWidgets.QTabBar.addTab?4(QString) -> int -QtWidgets.QTabBar.addTab?4(QIcon, QString) -> int -QtWidgets.QTabBar.insertTab?4(int, QString) -> int -QtWidgets.QTabBar.insertTab?4(int, QIcon, QString) -> int -QtWidgets.QTabBar.removeTab?4(int) -QtWidgets.QTabBar.isTabEnabled?4(int) -> bool -QtWidgets.QTabBar.setTabEnabled?4(int, bool) -QtWidgets.QTabBar.tabText?4(int) -> QString -QtWidgets.QTabBar.setTabText?4(int, QString) -QtWidgets.QTabBar.tabTextColor?4(int) -> QColor -QtWidgets.QTabBar.setTabTextColor?4(int, QColor) -QtWidgets.QTabBar.tabIcon?4(int) -> QIcon -QtWidgets.QTabBar.setTabIcon?4(int, QIcon) -QtWidgets.QTabBar.setTabToolTip?4(int, QString) -QtWidgets.QTabBar.tabToolTip?4(int) -> QString -QtWidgets.QTabBar.setTabWhatsThis?4(int, QString) -QtWidgets.QTabBar.tabWhatsThis?4(int) -> QString -QtWidgets.QTabBar.setTabData?4(int, QVariant) -QtWidgets.QTabBar.tabData?4(int) -> QVariant -QtWidgets.QTabBar.tabAt?4(QPoint) -> int -QtWidgets.QTabBar.tabRect?4(int) -> QRect -QtWidgets.QTabBar.currentIndex?4() -> int -QtWidgets.QTabBar.count?4() -> int -QtWidgets.QTabBar.sizeHint?4() -> QSize -QtWidgets.QTabBar.minimumSizeHint?4() -> QSize -QtWidgets.QTabBar.setDrawBase?4(bool) -QtWidgets.QTabBar.drawBase?4() -> bool -QtWidgets.QTabBar.iconSize?4() -> QSize -QtWidgets.QTabBar.setIconSize?4(QSize) -QtWidgets.QTabBar.elideMode?4() -> Qt.TextElideMode -QtWidgets.QTabBar.setElideMode?4(Qt.TextElideMode) -QtWidgets.QTabBar.setUsesScrollButtons?4(bool) -QtWidgets.QTabBar.usesScrollButtons?4() -> bool -QtWidgets.QTabBar.setCurrentIndex?4(int) -QtWidgets.QTabBar.currentChanged?4(int) -QtWidgets.QTabBar.initStyleOption?4(QStyleOptionTab, int) -QtWidgets.QTabBar.tabSizeHint?4(int) -> QSize -QtWidgets.QTabBar.tabInserted?4(int) -QtWidgets.QTabBar.tabRemoved?4(int) -QtWidgets.QTabBar.tabLayoutChange?4() -QtWidgets.QTabBar.event?4(QEvent) -> bool -QtWidgets.QTabBar.resizeEvent?4(QResizeEvent) -QtWidgets.QTabBar.showEvent?4(QShowEvent) -QtWidgets.QTabBar.paintEvent?4(QPaintEvent) -QtWidgets.QTabBar.mousePressEvent?4(QMouseEvent) -QtWidgets.QTabBar.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QTabBar.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QTabBar.keyPressEvent?4(QKeyEvent) -QtWidgets.QTabBar.changeEvent?4(QEvent) -QtWidgets.QTabBar.moveTab?4(int, int) -QtWidgets.QTabBar.tabsClosable?4() -> bool -QtWidgets.QTabBar.setTabsClosable?4(bool) -QtWidgets.QTabBar.setTabButton?4(int, QTabBar.ButtonPosition, QWidget) -QtWidgets.QTabBar.tabButton?4(int, QTabBar.ButtonPosition) -> QWidget -QtWidgets.QTabBar.selectionBehaviorOnRemove?4() -> QTabBar.SelectionBehavior -QtWidgets.QTabBar.setSelectionBehaviorOnRemove?4(QTabBar.SelectionBehavior) -QtWidgets.QTabBar.expanding?4() -> bool -QtWidgets.QTabBar.setExpanding?4(bool) -QtWidgets.QTabBar.isMovable?4() -> bool -QtWidgets.QTabBar.setMovable?4(bool) -QtWidgets.QTabBar.documentMode?4() -> bool -QtWidgets.QTabBar.setDocumentMode?4(bool) -QtWidgets.QTabBar.tabCloseRequested?4(int) -QtWidgets.QTabBar.tabMoved?4(int, int) -QtWidgets.QTabBar.hideEvent?4(QHideEvent) -QtWidgets.QTabBar.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QTabBar.wheelEvent?4(QWheelEvent) -QtWidgets.QTabBar.minimumTabSizeHint?4(int) -> QSize -QtWidgets.QTabBar.tabBarClicked?4(int) -QtWidgets.QTabBar.tabBarDoubleClicked?4(int) -QtWidgets.QTabBar.autoHide?4() -> bool -QtWidgets.QTabBar.setAutoHide?4(bool) -QtWidgets.QTabBar.changeCurrentOnDrag?4() -> bool -QtWidgets.QTabBar.setChangeCurrentOnDrag?4(bool) -QtWidgets.QTabBar.timerEvent?4(QTimerEvent) -QtWidgets.QTabBar.accessibleTabName?4(int) -> QString -QtWidgets.QTabBar.setAccessibleTabName?4(int, QString) -QtWidgets.QTabBar.isTabVisible?4(int) -> bool -QtWidgets.QTabBar.setTabVisible?4(int, bool) -QtWidgets.QTableView?1(QWidget parent=None) -QtWidgets.QTableView.__init__?1(self, QWidget parent=None) -QtWidgets.QTableView.setModel?4(QAbstractItemModel) -QtWidgets.QTableView.setRootIndex?4(QModelIndex) -QtWidgets.QTableView.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QTableView.horizontalHeader?4() -> QHeaderView -QtWidgets.QTableView.verticalHeader?4() -> QHeaderView -QtWidgets.QTableView.setHorizontalHeader?4(QHeaderView) -QtWidgets.QTableView.setVerticalHeader?4(QHeaderView) -QtWidgets.QTableView.rowViewportPosition?4(int) -> int -QtWidgets.QTableView.setRowHeight?4(int, int) -QtWidgets.QTableView.rowHeight?4(int) -> int -QtWidgets.QTableView.rowAt?4(int) -> int -QtWidgets.QTableView.columnViewportPosition?4(int) -> int -QtWidgets.QTableView.setColumnWidth?4(int, int) -QtWidgets.QTableView.columnWidth?4(int) -> int -QtWidgets.QTableView.columnAt?4(int) -> int -QtWidgets.QTableView.isRowHidden?4(int) -> bool -QtWidgets.QTableView.setRowHidden?4(int, bool) -QtWidgets.QTableView.isColumnHidden?4(int) -> bool -QtWidgets.QTableView.setColumnHidden?4(int, bool) -QtWidgets.QTableView.showGrid?4() -> bool -QtWidgets.QTableView.setShowGrid?4(bool) -QtWidgets.QTableView.gridStyle?4() -> Qt.PenStyle -QtWidgets.QTableView.setGridStyle?4(Qt.PenStyle) -QtWidgets.QTableView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QTableView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QTableView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QTableView.selectRow?4(int) -QtWidgets.QTableView.selectColumn?4(int) -QtWidgets.QTableView.hideRow?4(int) -QtWidgets.QTableView.hideColumn?4(int) -QtWidgets.QTableView.showRow?4(int) -QtWidgets.QTableView.showColumn?4(int) -QtWidgets.QTableView.resizeRowToContents?4(int) -QtWidgets.QTableView.resizeRowsToContents?4() -QtWidgets.QTableView.resizeColumnToContents?4(int) -QtWidgets.QTableView.resizeColumnsToContents?4() -QtWidgets.QTableView.rowMoved?4(int, int, int) -QtWidgets.QTableView.columnMoved?4(int, int, int) -QtWidgets.QTableView.rowResized?4(int, int, int) -QtWidgets.QTableView.columnResized?4(int, int, int) -QtWidgets.QTableView.rowCountChanged?4(int, int) -QtWidgets.QTableView.columnCountChanged?4(int, int) -QtWidgets.QTableView.scrollContentsBy?4(int, int) -QtWidgets.QTableView.paintEvent?4(QPaintEvent) -QtWidgets.QTableView.timerEvent?4(QTimerEvent) -QtWidgets.QTableView.horizontalOffset?4() -> int -QtWidgets.QTableView.verticalOffset?4() -> int -QtWidgets.QTableView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QTableView.setSelection?4(QRect, unknown-type) -QtWidgets.QTableView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QTableView.selectedIndexes?4() -> unknown-type -QtWidgets.QTableView.updateGeometries?4() -QtWidgets.QTableView.sizeHintForRow?4(int) -> int -QtWidgets.QTableView.sizeHintForColumn?4(int) -> int -QtWidgets.QTableView.verticalScrollbarAction?4(int) -QtWidgets.QTableView.horizontalScrollbarAction?4(int) -QtWidgets.QTableView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QTableView.viewportSizeHint?4() -> QSize -QtWidgets.QTableView.setSortingEnabled?4(bool) -QtWidgets.QTableView.isSortingEnabled?4() -> bool -QtWidgets.QTableView.setSpan?4(int, int, int, int) -QtWidgets.QTableView.rowSpan?4(int, int) -> int -QtWidgets.QTableView.columnSpan?4(int, int) -> int -QtWidgets.QTableView.sortByColumn?4(int, Qt.SortOrder) -QtWidgets.QTableView.setWordWrap?4(bool) -QtWidgets.QTableView.wordWrap?4() -> bool -QtWidgets.QTableView.setCornerButtonEnabled?4(bool) -QtWidgets.QTableView.isCornerButtonEnabled?4() -> bool -QtWidgets.QTableView.clearSpans?4() -QtWidgets.QTableView.selectionChanged?4(QItemSelection, QItemSelection) -QtWidgets.QTableView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QTableView.initViewItemOption?4(QStyleOptionViewItem) -QtWidgets.QTableWidgetSelectionRange?1() -QtWidgets.QTableWidgetSelectionRange.__init__?1(self) -QtWidgets.QTableWidgetSelectionRange?1(int, int, int, int) -QtWidgets.QTableWidgetSelectionRange.__init__?1(self, int, int, int, int) -QtWidgets.QTableWidgetSelectionRange?1(QTableWidgetSelectionRange) -QtWidgets.QTableWidgetSelectionRange.__init__?1(self, QTableWidgetSelectionRange) -QtWidgets.QTableWidgetSelectionRange.topRow?4() -> int -QtWidgets.QTableWidgetSelectionRange.bottomRow?4() -> int -QtWidgets.QTableWidgetSelectionRange.leftColumn?4() -> int -QtWidgets.QTableWidgetSelectionRange.rightColumn?4() -> int -QtWidgets.QTableWidgetSelectionRange.rowCount?4() -> int -QtWidgets.QTableWidgetSelectionRange.columnCount?4() -> int -QtWidgets.QTableWidgetItem.ItemType?10 -QtWidgets.QTableWidgetItem.ItemType.Type?10 -QtWidgets.QTableWidgetItem.ItemType.UserType?10 -QtWidgets.QTableWidgetItem?1(int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem.__init__?1(self, int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem?1(QString, int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem.__init__?1(self, QString, int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem?1(QIcon, QString, int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem.__init__?1(self, QIcon, QString, int type=QTableWidgetItem.Type) -QtWidgets.QTableWidgetItem?1(QTableWidgetItem) -QtWidgets.QTableWidgetItem.__init__?1(self, QTableWidgetItem) -QtWidgets.QTableWidgetItem.clone?4() -> QTableWidgetItem -QtWidgets.QTableWidgetItem.tableWidget?4() -> QTableWidget -QtWidgets.QTableWidgetItem.flags?4() -> unknown-type -QtWidgets.QTableWidgetItem.text?4() -> QString -QtWidgets.QTableWidgetItem.icon?4() -> QIcon -QtWidgets.QTableWidgetItem.statusTip?4() -> QString -QtWidgets.QTableWidgetItem.toolTip?4() -> QString -QtWidgets.QTableWidgetItem.whatsThis?4() -> QString -QtWidgets.QTableWidgetItem.font?4() -> QFont -QtWidgets.QTableWidgetItem.textAlignment?4() -> int -QtWidgets.QTableWidgetItem.setTextAlignment?4(unknown-type) -QtWidgets.QTableWidgetItem.setTextAlignment?4(int) -QtWidgets.QTableWidgetItem.checkState?4() -> Qt.CheckState -QtWidgets.QTableWidgetItem.setCheckState?4(Qt.CheckState) -QtWidgets.QTableWidgetItem.data?4(int) -> QVariant -QtWidgets.QTableWidgetItem.setData?4(int, QVariant) -QtWidgets.QTableWidgetItem.read?4(QDataStream) -QtWidgets.QTableWidgetItem.write?4(QDataStream) -QtWidgets.QTableWidgetItem.type?4() -> int -QtWidgets.QTableWidgetItem.setFlags?4(unknown-type) -QtWidgets.QTableWidgetItem.setText?4(QString) -QtWidgets.QTableWidgetItem.setIcon?4(QIcon) -QtWidgets.QTableWidgetItem.setStatusTip?4(QString) -QtWidgets.QTableWidgetItem.setToolTip?4(QString) -QtWidgets.QTableWidgetItem.setWhatsThis?4(QString) -QtWidgets.QTableWidgetItem.setFont?4(QFont) -QtWidgets.QTableWidgetItem.sizeHint?4() -> QSize -QtWidgets.QTableWidgetItem.setSizeHint?4(QSize) -QtWidgets.QTableWidgetItem.background?4() -> QBrush -QtWidgets.QTableWidgetItem.setBackground?4(QBrush) -QtWidgets.QTableWidgetItem.foreground?4() -> QBrush -QtWidgets.QTableWidgetItem.setForeground?4(QBrush) -QtWidgets.QTableWidgetItem.row?4() -> int -QtWidgets.QTableWidgetItem.column?4() -> int -QtWidgets.QTableWidgetItem.setSelected?4(bool) -QtWidgets.QTableWidgetItem.isSelected?4() -> bool -QtWidgets.QTableWidget?1(QWidget parent=None) -QtWidgets.QTableWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QTableWidget?1(int, int, QWidget parent=None) -QtWidgets.QTableWidget.__init__?1(self, int, int, QWidget parent=None) -QtWidgets.QTableWidget.setRowCount?4(int) -QtWidgets.QTableWidget.rowCount?4() -> int -QtWidgets.QTableWidget.setColumnCount?4(int) -QtWidgets.QTableWidget.columnCount?4() -> int -QtWidgets.QTableWidget.row?4(QTableWidgetItem) -> int -QtWidgets.QTableWidget.column?4(QTableWidgetItem) -> int -QtWidgets.QTableWidget.item?4(int, int) -> QTableWidgetItem -QtWidgets.QTableWidget.setItem?4(int, int, QTableWidgetItem) -QtWidgets.QTableWidget.takeItem?4(int, int) -> QTableWidgetItem -QtWidgets.QTableWidget.verticalHeaderItem?4(int) -> QTableWidgetItem -QtWidgets.QTableWidget.setVerticalHeaderItem?4(int, QTableWidgetItem) -QtWidgets.QTableWidget.takeVerticalHeaderItem?4(int) -> QTableWidgetItem -QtWidgets.QTableWidget.horizontalHeaderItem?4(int) -> QTableWidgetItem -QtWidgets.QTableWidget.setHorizontalHeaderItem?4(int, QTableWidgetItem) -QtWidgets.QTableWidget.takeHorizontalHeaderItem?4(int) -> QTableWidgetItem -QtWidgets.QTableWidget.setVerticalHeaderLabels?4(QStringList) -QtWidgets.QTableWidget.setHorizontalHeaderLabels?4(QStringList) -QtWidgets.QTableWidget.currentRow?4() -> int -QtWidgets.QTableWidget.currentColumn?4() -> int -QtWidgets.QTableWidget.currentItem?4() -> QTableWidgetItem -QtWidgets.QTableWidget.setCurrentItem?4(QTableWidgetItem) -QtWidgets.QTableWidget.setCurrentItem?4(QTableWidgetItem, unknown-type) -QtWidgets.QTableWidget.setCurrentCell?4(int, int) -QtWidgets.QTableWidget.setCurrentCell?4(int, int, unknown-type) -QtWidgets.QTableWidget.sortItems?4(int, Qt.SortOrder order=Qt.AscendingOrder) -QtWidgets.QTableWidget.setSortingEnabled?4(bool) -QtWidgets.QTableWidget.isSortingEnabled?4() -> bool -QtWidgets.QTableWidget.editItem?4(QTableWidgetItem) -QtWidgets.QTableWidget.openPersistentEditor?4(QTableWidgetItem) -QtWidgets.QTableWidget.closePersistentEditor?4(QTableWidgetItem) -QtWidgets.QTableWidget.cellWidget?4(int, int) -> QWidget -QtWidgets.QTableWidget.setCellWidget?4(int, int, QWidget) -QtWidgets.QTableWidget.removeCellWidget?4(int, int) -QtWidgets.QTableWidget.setRangeSelected?4(QTableWidgetSelectionRange, bool) -QtWidgets.QTableWidget.selectedRanges?4() -> unknown-type -QtWidgets.QTableWidget.selectedItems?4() -> unknown-type -QtWidgets.QTableWidget.findItems?4(QString, unknown-type) -> unknown-type -QtWidgets.QTableWidget.visualRow?4(int) -> int -QtWidgets.QTableWidget.visualColumn?4(int) -> int -QtWidgets.QTableWidget.itemAt?4(QPoint) -> QTableWidgetItem -QtWidgets.QTableWidget.itemAt?4(int, int) -> QTableWidgetItem -QtWidgets.QTableWidget.visualItemRect?4(QTableWidgetItem) -> QRect -QtWidgets.QTableWidget.itemPrototype?4() -> QTableWidgetItem -QtWidgets.QTableWidget.setItemPrototype?4(QTableWidgetItem) -QtWidgets.QTableWidget.scrollToItem?4(QTableWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QTableWidget.insertRow?4(int) -QtWidgets.QTableWidget.insertColumn?4(int) -QtWidgets.QTableWidget.removeRow?4(int) -QtWidgets.QTableWidget.removeColumn?4(int) -QtWidgets.QTableWidget.clear?4() -QtWidgets.QTableWidget.clearContents?4() -QtWidgets.QTableWidget.itemPressed?4(QTableWidgetItem) -QtWidgets.QTableWidget.itemClicked?4(QTableWidgetItem) -QtWidgets.QTableWidget.itemDoubleClicked?4(QTableWidgetItem) -QtWidgets.QTableWidget.itemActivated?4(QTableWidgetItem) -QtWidgets.QTableWidget.itemEntered?4(QTableWidgetItem) -QtWidgets.QTableWidget.itemChanged?4(QTableWidgetItem) -QtWidgets.QTableWidget.currentItemChanged?4(QTableWidgetItem, QTableWidgetItem) -QtWidgets.QTableWidget.itemSelectionChanged?4() -QtWidgets.QTableWidget.cellPressed?4(int, int) -QtWidgets.QTableWidget.cellClicked?4(int, int) -QtWidgets.QTableWidget.cellDoubleClicked?4(int, int) -QtWidgets.QTableWidget.cellActivated?4(int, int) -QtWidgets.QTableWidget.cellEntered?4(int, int) -QtWidgets.QTableWidget.cellChanged?4(int, int) -QtWidgets.QTableWidget.currentCellChanged?4(int, int, int, int) -QtWidgets.QTableWidget.mimeTypes?4() -> QStringList -QtWidgets.QTableWidget.mimeData?4(unknown-type) -> QMimeData -QtWidgets.QTableWidget.dropMimeData?4(int, int, QMimeData, Qt.DropAction) -> bool -QtWidgets.QTableWidget.supportedDropActions?4() -> unknown-type -QtWidgets.QTableWidget.items?4(QMimeData) -> unknown-type -QtWidgets.QTableWidget.indexFromItem?4(QTableWidgetItem) -> QModelIndex -QtWidgets.QTableWidget.itemFromIndex?4(QModelIndex) -> QTableWidgetItem -QtWidgets.QTableWidget.event?4(QEvent) -> bool -QtWidgets.QTableWidget.dropEvent?4(QDropEvent) -QtWidgets.QTableWidget.isPersistentEditorOpen?4(QTableWidgetItem) -> bool -QtWidgets.QTabWidget.TabShape?10 -QtWidgets.QTabWidget.TabShape.Rounded?10 -QtWidgets.QTabWidget.TabShape.Triangular?10 -QtWidgets.QTabWidget.TabPosition?10 -QtWidgets.QTabWidget.TabPosition.North?10 -QtWidgets.QTabWidget.TabPosition.South?10 -QtWidgets.QTabWidget.TabPosition.West?10 -QtWidgets.QTabWidget.TabPosition.East?10 -QtWidgets.QTabWidget?1(QWidget parent=None) -QtWidgets.QTabWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QTabWidget.clear?4() -QtWidgets.QTabWidget.addTab?4(QWidget, QString) -> int -QtWidgets.QTabWidget.addTab?4(QWidget, QIcon, QString) -> int -QtWidgets.QTabWidget.insertTab?4(int, QWidget, QString) -> int -QtWidgets.QTabWidget.insertTab?4(int, QWidget, QIcon, QString) -> int -QtWidgets.QTabWidget.removeTab?4(int) -QtWidgets.QTabWidget.isTabEnabled?4(int) -> bool -QtWidgets.QTabWidget.setTabEnabled?4(int, bool) -QtWidgets.QTabWidget.tabText?4(int) -> QString -QtWidgets.QTabWidget.setTabText?4(int, QString) -QtWidgets.QTabWidget.tabIcon?4(int) -> QIcon -QtWidgets.QTabWidget.setTabIcon?4(int, QIcon) -QtWidgets.QTabWidget.setTabToolTip?4(int, QString) -QtWidgets.QTabWidget.tabToolTip?4(int) -> QString -QtWidgets.QTabWidget.setTabWhatsThis?4(int, QString) -QtWidgets.QTabWidget.tabWhatsThis?4(int) -> QString -QtWidgets.QTabWidget.currentIndex?4() -> int -QtWidgets.QTabWidget.currentWidget?4() -> QWidget -QtWidgets.QTabWidget.widget?4(int) -> QWidget -QtWidgets.QTabWidget.indexOf?4(QWidget) -> int -QtWidgets.QTabWidget.count?4() -> int -QtWidgets.QTabWidget.tabPosition?4() -> QTabWidget.TabPosition -QtWidgets.QTabWidget.setTabPosition?4(QTabWidget.TabPosition) -QtWidgets.QTabWidget.tabShape?4() -> QTabWidget.TabShape -QtWidgets.QTabWidget.setTabShape?4(QTabWidget.TabShape) -QtWidgets.QTabWidget.sizeHint?4() -> QSize -QtWidgets.QTabWidget.minimumSizeHint?4() -> QSize -QtWidgets.QTabWidget.setCornerWidget?4(QWidget, Qt.Corner corner=Qt.TopRightCorner) -QtWidgets.QTabWidget.cornerWidget?4(Qt.Corner corner=Qt.TopRightCorner) -> QWidget -QtWidgets.QTabWidget.setCurrentIndex?4(int) -QtWidgets.QTabWidget.setCurrentWidget?4(QWidget) -QtWidgets.QTabWidget.currentChanged?4(int) -QtWidgets.QTabWidget.initStyleOption?4(QStyleOptionTabWidgetFrame) -QtWidgets.QTabWidget.tabInserted?4(int) -QtWidgets.QTabWidget.tabRemoved?4(int) -QtWidgets.QTabWidget.event?4(QEvent) -> bool -QtWidgets.QTabWidget.showEvent?4(QShowEvent) -QtWidgets.QTabWidget.resizeEvent?4(QResizeEvent) -QtWidgets.QTabWidget.keyPressEvent?4(QKeyEvent) -QtWidgets.QTabWidget.paintEvent?4(QPaintEvent) -QtWidgets.QTabWidget.setTabBar?4(QTabBar) -QtWidgets.QTabWidget.tabBar?4() -> QTabBar -QtWidgets.QTabWidget.changeEvent?4(QEvent) -QtWidgets.QTabWidget.elideMode?4() -> Qt.TextElideMode -QtWidgets.QTabWidget.setElideMode?4(Qt.TextElideMode) -QtWidgets.QTabWidget.iconSize?4() -> QSize -QtWidgets.QTabWidget.setIconSize?4(QSize) -QtWidgets.QTabWidget.usesScrollButtons?4() -> bool -QtWidgets.QTabWidget.setUsesScrollButtons?4(bool) -QtWidgets.QTabWidget.tabsClosable?4() -> bool -QtWidgets.QTabWidget.setTabsClosable?4(bool) -QtWidgets.QTabWidget.isMovable?4() -> bool -QtWidgets.QTabWidget.setMovable?4(bool) -QtWidgets.QTabWidget.documentMode?4() -> bool -QtWidgets.QTabWidget.setDocumentMode?4(bool) -QtWidgets.QTabWidget.tabCloseRequested?4(int) -QtWidgets.QTabWidget.heightForWidth?4(int) -> int -QtWidgets.QTabWidget.hasHeightForWidth?4() -> bool -QtWidgets.QTabWidget.tabBarClicked?4(int) -QtWidgets.QTabWidget.tabBarDoubleClicked?4(int) -QtWidgets.QTabWidget.tabBarAutoHide?4() -> bool -QtWidgets.QTabWidget.setTabBarAutoHide?4(bool) -QtWidgets.QTabWidget.isTabVisible?4(int) -> bool -QtWidgets.QTabWidget.setTabVisible?4(int, bool) -QtWidgets.QTextEdit.AutoFormattingFlag?10 -QtWidgets.QTextEdit.AutoFormattingFlag.AutoNone?10 -QtWidgets.QTextEdit.AutoFormattingFlag.AutoBulletList?10 -QtWidgets.QTextEdit.AutoFormattingFlag.AutoAll?10 -QtWidgets.QTextEdit.LineWrapMode?10 -QtWidgets.QTextEdit.LineWrapMode.NoWrap?10 -QtWidgets.QTextEdit.LineWrapMode.WidgetWidth?10 -QtWidgets.QTextEdit.LineWrapMode.FixedPixelWidth?10 -QtWidgets.QTextEdit.LineWrapMode.FixedColumnWidth?10 -QtWidgets.QTextEdit?1(QWidget parent=None) -QtWidgets.QTextEdit.__init__?1(self, QWidget parent=None) -QtWidgets.QTextEdit?1(QString, QWidget parent=None) -QtWidgets.QTextEdit.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QTextEdit.setDocument?4(QTextDocument) -QtWidgets.QTextEdit.document?4() -> QTextDocument -QtWidgets.QTextEdit.setTextCursor?4(QTextCursor) -QtWidgets.QTextEdit.textCursor?4() -> QTextCursor -QtWidgets.QTextEdit.isReadOnly?4() -> bool -QtWidgets.QTextEdit.setReadOnly?4(bool) -QtWidgets.QTextEdit.fontPointSize?4() -> float -QtWidgets.QTextEdit.fontFamily?4() -> QString -QtWidgets.QTextEdit.fontWeight?4() -> int -QtWidgets.QTextEdit.fontUnderline?4() -> bool -QtWidgets.QTextEdit.fontItalic?4() -> bool -QtWidgets.QTextEdit.textColor?4() -> QColor -QtWidgets.QTextEdit.currentFont?4() -> QFont -QtWidgets.QTextEdit.alignment?4() -> unknown-type -QtWidgets.QTextEdit.mergeCurrentCharFormat?4(QTextCharFormat) -QtWidgets.QTextEdit.setCurrentCharFormat?4(QTextCharFormat) -QtWidgets.QTextEdit.currentCharFormat?4() -> QTextCharFormat -QtWidgets.QTextEdit.autoFormatting?4() -> unknown-type -QtWidgets.QTextEdit.setAutoFormatting?4(unknown-type) -QtWidgets.QTextEdit.tabChangesFocus?4() -> bool -QtWidgets.QTextEdit.setTabChangesFocus?4(bool) -QtWidgets.QTextEdit.setDocumentTitle?4(QString) -QtWidgets.QTextEdit.documentTitle?4() -> QString -QtWidgets.QTextEdit.isUndoRedoEnabled?4() -> bool -QtWidgets.QTextEdit.setUndoRedoEnabled?4(bool) -QtWidgets.QTextEdit.lineWrapMode?4() -> QTextEdit.LineWrapMode -QtWidgets.QTextEdit.setLineWrapMode?4(QTextEdit.LineWrapMode) -QtWidgets.QTextEdit.lineWrapColumnOrWidth?4() -> int -QtWidgets.QTextEdit.setLineWrapColumnOrWidth?4(int) -QtWidgets.QTextEdit.wordWrapMode?4() -> QTextOption.WrapMode -QtWidgets.QTextEdit.setWordWrapMode?4(QTextOption.WrapMode) -QtWidgets.QTextEdit.find?4(QString, unknown-type options=QTextDocument.FindFlags()) -> bool -QtWidgets.QTextEdit.toPlainText?4() -> QString -QtWidgets.QTextEdit.toHtml?4() -> QString -QtWidgets.QTextEdit.append?4(QString) -QtWidgets.QTextEdit.ensureCursorVisible?4() -QtWidgets.QTextEdit.loadResource?4(int, QUrl) -> QVariant -QtWidgets.QTextEdit.createStandardContextMenu?4() -> QMenu -QtWidgets.QTextEdit.createStandardContextMenu?4(QPoint) -> QMenu -QtWidgets.QTextEdit.cursorForPosition?4(QPoint) -> QTextCursor -QtWidgets.QTextEdit.cursorRect?4(QTextCursor) -> QRect -QtWidgets.QTextEdit.cursorRect?4() -> QRect -QtWidgets.QTextEdit.anchorAt?4(QPoint) -> QString -QtWidgets.QTextEdit.overwriteMode?4() -> bool -QtWidgets.QTextEdit.setOverwriteMode?4(bool) -QtWidgets.QTextEdit.acceptRichText?4() -> bool -QtWidgets.QTextEdit.setAcceptRichText?4(bool) -QtWidgets.QTextEdit.setTextInteractionFlags?4(unknown-type) -QtWidgets.QTextEdit.textInteractionFlags?4() -> unknown-type -QtWidgets.QTextEdit.setCursorWidth?4(int) -QtWidgets.QTextEdit.cursorWidth?4() -> int -QtWidgets.QTextEdit.setExtraSelections?4(unknown-type) -QtWidgets.QTextEdit.extraSelections?4() -> unknown-type -QtWidgets.QTextEdit.canPaste?4() -> bool -QtWidgets.QTextEdit.moveCursor?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) -QtWidgets.QTextEdit.print?4(QPagedPaintDevice) -QtWidgets.QTextEdit.setFontPointSize?4(float) -QtWidgets.QTextEdit.setFontFamily?4(QString) -QtWidgets.QTextEdit.setFontWeight?4(int) -QtWidgets.QTextEdit.setFontUnderline?4(bool) -QtWidgets.QTextEdit.setFontItalic?4(bool) -QtWidgets.QTextEdit.setText?4(QString) -QtWidgets.QTextEdit.setTextColor?4(QColor) -QtWidgets.QTextEdit.setCurrentFont?4(QFont) -QtWidgets.QTextEdit.setAlignment?4(unknown-type) -QtWidgets.QTextEdit.setPlainText?4(QString) -QtWidgets.QTextEdit.setHtml?4(QString) -QtWidgets.QTextEdit.cut?4() -QtWidgets.QTextEdit.copy?4() -QtWidgets.QTextEdit.paste?4() -QtWidgets.QTextEdit.clear?4() -QtWidgets.QTextEdit.selectAll?4() -QtWidgets.QTextEdit.insertPlainText?4(QString) -QtWidgets.QTextEdit.insertHtml?4(QString) -QtWidgets.QTextEdit.scrollToAnchor?4(QString) -QtWidgets.QTextEdit.redo?4() -QtWidgets.QTextEdit.undo?4() -QtWidgets.QTextEdit.zoomIn?4(int range=1) -QtWidgets.QTextEdit.zoomOut?4(int range=1) -QtWidgets.QTextEdit.textChanged?4() -QtWidgets.QTextEdit.undoAvailable?4(bool) -QtWidgets.QTextEdit.redoAvailable?4(bool) -QtWidgets.QTextEdit.currentCharFormatChanged?4(QTextCharFormat) -QtWidgets.QTextEdit.copyAvailable?4(bool) -QtWidgets.QTextEdit.selectionChanged?4() -QtWidgets.QTextEdit.cursorPositionChanged?4() -QtWidgets.QTextEdit.event?4(QEvent) -> bool -QtWidgets.QTextEdit.timerEvent?4(QTimerEvent) -QtWidgets.QTextEdit.keyPressEvent?4(QKeyEvent) -QtWidgets.QTextEdit.keyReleaseEvent?4(QKeyEvent) -QtWidgets.QTextEdit.resizeEvent?4(QResizeEvent) -QtWidgets.QTextEdit.paintEvent?4(QPaintEvent) -QtWidgets.QTextEdit.mousePressEvent?4(QMouseEvent) -QtWidgets.QTextEdit.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QTextEdit.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QTextEdit.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QTextEdit.focusNextPrevChild?4(bool) -> bool -QtWidgets.QTextEdit.contextMenuEvent?4(QContextMenuEvent) -QtWidgets.QTextEdit.dragEnterEvent?4(QDragEnterEvent) -QtWidgets.QTextEdit.dragLeaveEvent?4(QDragLeaveEvent) -QtWidgets.QTextEdit.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QTextEdit.dropEvent?4(QDropEvent) -QtWidgets.QTextEdit.focusInEvent?4(QFocusEvent) -QtWidgets.QTextEdit.focusOutEvent?4(QFocusEvent) -QtWidgets.QTextEdit.showEvent?4(QShowEvent) -QtWidgets.QTextEdit.changeEvent?4(QEvent) -QtWidgets.QTextEdit.wheelEvent?4(QWheelEvent) -QtWidgets.QTextEdit.createMimeDataFromSelection?4() -> QMimeData -QtWidgets.QTextEdit.canInsertFromMimeData?4(QMimeData) -> bool -QtWidgets.QTextEdit.insertFromMimeData?4(QMimeData) -QtWidgets.QTextEdit.inputMethodEvent?4(QInputMethodEvent) -QtWidgets.QTextEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtWidgets.QTextEdit.scrollContentsBy?4(int, int) -QtWidgets.QTextEdit.textBackgroundColor?4() -> QColor -QtWidgets.QTextEdit.setTextBackgroundColor?4(QColor) -QtWidgets.QTextEdit.setPlaceholderText?4(QString) -QtWidgets.QTextEdit.placeholderText?4() -> QString -QtWidgets.QTextEdit.find?4(QRegularExpression, unknown-type options=QTextDocument.FindFlags()) -> bool -QtWidgets.QTextEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant -QtWidgets.QTextEdit.tabStopDistance?4() -> float -QtWidgets.QTextEdit.setTabStopDistance?4(float) -QtWidgets.QTextEdit.toMarkdown?4(unknown-type features=QTextDocument.MarkdownDialectGitHub) -> QString -QtWidgets.QTextEdit.setMarkdown?4(QString) -QtWidgets.QTextBrowser?1(QWidget parent=None) -QtWidgets.QTextBrowser.__init__?1(self, QWidget parent=None) -QtWidgets.QTextBrowser.source?4() -> QUrl -QtWidgets.QTextBrowser.searchPaths?4() -> QStringList -QtWidgets.QTextBrowser.setSearchPaths?4(QStringList) -QtWidgets.QTextBrowser.loadResource?4(int, QUrl) -> QVariant -QtWidgets.QTextBrowser.setSource?4(QUrl, QTextDocument.ResourceType type=QTextDocument.UnknownResource) -QtWidgets.QTextBrowser.backward?4() -QtWidgets.QTextBrowser.forward?4() -QtWidgets.QTextBrowser.home?4() -QtWidgets.QTextBrowser.reload?4() -QtWidgets.QTextBrowser.backwardAvailable?4(bool) -QtWidgets.QTextBrowser.forwardAvailable?4(bool) -QtWidgets.QTextBrowser.sourceChanged?4(QUrl) -QtWidgets.QTextBrowser.highlighted?4(QUrl) -QtWidgets.QTextBrowser.anchorClicked?4(QUrl) -QtWidgets.QTextBrowser.event?4(QEvent) -> bool -QtWidgets.QTextBrowser.keyPressEvent?4(QKeyEvent) -QtWidgets.QTextBrowser.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QTextBrowser.mousePressEvent?4(QMouseEvent) -QtWidgets.QTextBrowser.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QTextBrowser.focusOutEvent?4(QFocusEvent) -QtWidgets.QTextBrowser.focusNextPrevChild?4(bool) -> bool -QtWidgets.QTextBrowser.paintEvent?4(QPaintEvent) -QtWidgets.QTextBrowser.isBackwardAvailable?4() -> bool -QtWidgets.QTextBrowser.isForwardAvailable?4() -> bool -QtWidgets.QTextBrowser.clearHistory?4() -QtWidgets.QTextBrowser.openExternalLinks?4() -> bool -QtWidgets.QTextBrowser.setOpenExternalLinks?4(bool) -QtWidgets.QTextBrowser.openLinks?4() -> bool -QtWidgets.QTextBrowser.setOpenLinks?4(bool) -QtWidgets.QTextBrowser.historyTitle?4(int) -> QString -QtWidgets.QTextBrowser.historyUrl?4(int) -> QUrl -QtWidgets.QTextBrowser.backwardHistoryCount?4() -> int -QtWidgets.QTextBrowser.forwardHistoryCount?4() -> int -QtWidgets.QTextBrowser.historyChanged?4() -QtWidgets.QTextBrowser.sourceType?4() -> QTextDocument.ResourceType -QtWidgets.QTextBrowser.doSetSource?4(QUrl, QTextDocument.ResourceType type=QTextDocument.UnknownResource) -QtWidgets.QTextEdit.ExtraSelection.cursor?7 -QtWidgets.QTextEdit.ExtraSelection.format?7 -QtWidgets.QTextEdit.ExtraSelection?1() -QtWidgets.QTextEdit.ExtraSelection.__init__?1(self) -QtWidgets.QTextEdit.ExtraSelection?1(QTextEdit.ExtraSelection) -QtWidgets.QTextEdit.ExtraSelection.__init__?1(self, QTextEdit.ExtraSelection) -QtWidgets.QToolBar?1(QString, QWidget parent=None) -QtWidgets.QToolBar.__init__?1(self, QString, QWidget parent=None) -QtWidgets.QToolBar?1(QWidget parent=None) -QtWidgets.QToolBar.__init__?1(self, QWidget parent=None) -QtWidgets.QToolBar.setMovable?4(bool) -QtWidgets.QToolBar.isMovable?4() -> bool -QtWidgets.QToolBar.setAllowedAreas?4(unknown-type) -QtWidgets.QToolBar.allowedAreas?4() -> unknown-type -QtWidgets.QToolBar.isAreaAllowed?4(Qt.ToolBarArea) -> bool -QtWidgets.QToolBar.setOrientation?4(Qt.Orientation) -QtWidgets.QToolBar.orientation?4() -> Qt.Orientation -QtWidgets.QToolBar.clear?4() -QtWidgets.QToolBar.addSeparator?4() -> QAction -QtWidgets.QToolBar.insertSeparator?4(QAction) -> QAction -QtWidgets.QToolBar.addWidget?4(QWidget) -> QAction -QtWidgets.QToolBar.insertWidget?4(QAction, QWidget) -> QAction -QtWidgets.QToolBar.actionGeometry?4(QAction) -> QRect -QtWidgets.QToolBar.actionAt?4(QPoint) -> QAction -QtWidgets.QToolBar.actionAt?4(int, int) -> QAction -QtWidgets.QToolBar.toggleViewAction?4() -> QAction -QtWidgets.QToolBar.iconSize?4() -> QSize -QtWidgets.QToolBar.toolButtonStyle?4() -> Qt.ToolButtonStyle -QtWidgets.QToolBar.widgetForAction?4(QAction) -> QWidget -QtWidgets.QToolBar.setIconSize?4(QSize) -QtWidgets.QToolBar.setToolButtonStyle?4(Qt.ToolButtonStyle) -QtWidgets.QToolBar.actionTriggered?4(QAction) -QtWidgets.QToolBar.movableChanged?4(bool) -QtWidgets.QToolBar.allowedAreasChanged?4(unknown-type) -QtWidgets.QToolBar.orientationChanged?4(Qt.Orientation) -QtWidgets.QToolBar.iconSizeChanged?4(QSize) -QtWidgets.QToolBar.toolButtonStyleChanged?4(Qt.ToolButtonStyle) -QtWidgets.QToolBar.topLevelChanged?4(bool) -QtWidgets.QToolBar.visibilityChanged?4(bool) -QtWidgets.QToolBar.initStyleOption?4(QStyleOptionToolBar) -QtWidgets.QToolBar.actionEvent?4(QActionEvent) -QtWidgets.QToolBar.changeEvent?4(QEvent) -QtWidgets.QToolBar.paintEvent?4(QPaintEvent) -QtWidgets.QToolBar.event?4(QEvent) -> bool -QtWidgets.QToolBar.isFloatable?4() -> bool -QtWidgets.QToolBar.setFloatable?4(bool) -QtWidgets.QToolBar.isFloating?4() -> bool -QtWidgets.QToolBox?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QToolBox.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QToolBox.addItem?4(QWidget, QString) -> int -QtWidgets.QToolBox.addItem?4(QWidget, QIcon, QString) -> int -QtWidgets.QToolBox.insertItem?4(int, QWidget, QString) -> int -QtWidgets.QToolBox.insertItem?4(int, QWidget, QIcon, QString) -> int -QtWidgets.QToolBox.removeItem?4(int) -QtWidgets.QToolBox.setItemEnabled?4(int, bool) -QtWidgets.QToolBox.isItemEnabled?4(int) -> bool -QtWidgets.QToolBox.setItemText?4(int, QString) -QtWidgets.QToolBox.itemText?4(int) -> QString -QtWidgets.QToolBox.setItemIcon?4(int, QIcon) -QtWidgets.QToolBox.itemIcon?4(int) -> QIcon -QtWidgets.QToolBox.setItemToolTip?4(int, QString) -QtWidgets.QToolBox.itemToolTip?4(int) -> QString -QtWidgets.QToolBox.currentIndex?4() -> int -QtWidgets.QToolBox.currentWidget?4() -> QWidget -QtWidgets.QToolBox.widget?4(int) -> QWidget -QtWidgets.QToolBox.indexOf?4(QWidget) -> int -QtWidgets.QToolBox.count?4() -> int -QtWidgets.QToolBox.setCurrentIndex?4(int) -QtWidgets.QToolBox.setCurrentWidget?4(QWidget) -QtWidgets.QToolBox.currentChanged?4(int) -QtWidgets.QToolBox.itemInserted?4(int) -QtWidgets.QToolBox.itemRemoved?4(int) -QtWidgets.QToolBox.event?4(QEvent) -> bool -QtWidgets.QToolBox.showEvent?4(QShowEvent) -QtWidgets.QToolBox.changeEvent?4(QEvent) -QtWidgets.QToolButton.ToolButtonPopupMode?10 -QtWidgets.QToolButton.ToolButtonPopupMode.DelayedPopup?10 -QtWidgets.QToolButton.ToolButtonPopupMode.MenuButtonPopup?10 -QtWidgets.QToolButton.ToolButtonPopupMode.InstantPopup?10 -QtWidgets.QToolButton?1(QWidget parent=None) -QtWidgets.QToolButton.__init__?1(self, QWidget parent=None) -QtWidgets.QToolButton.sizeHint?4() -> QSize -QtWidgets.QToolButton.minimumSizeHint?4() -> QSize -QtWidgets.QToolButton.toolButtonStyle?4() -> Qt.ToolButtonStyle -QtWidgets.QToolButton.arrowType?4() -> Qt.ArrowType -QtWidgets.QToolButton.setArrowType?4(Qt.ArrowType) -QtWidgets.QToolButton.setMenu?4(QMenu) -QtWidgets.QToolButton.menu?4() -> QMenu -QtWidgets.QToolButton.setPopupMode?4(QToolButton.ToolButtonPopupMode) -QtWidgets.QToolButton.popupMode?4() -> QToolButton.ToolButtonPopupMode -QtWidgets.QToolButton.defaultAction?4() -> QAction -QtWidgets.QToolButton.setAutoRaise?4(bool) -QtWidgets.QToolButton.autoRaise?4() -> bool -QtWidgets.QToolButton.showMenu?4() -QtWidgets.QToolButton.setToolButtonStyle?4(Qt.ToolButtonStyle) -QtWidgets.QToolButton.setDefaultAction?4(QAction) -QtWidgets.QToolButton.triggered?4(QAction) -QtWidgets.QToolButton.initStyleOption?4(QStyleOptionToolButton) -QtWidgets.QToolButton.event?4(QEvent) -> bool -QtWidgets.QToolButton.mousePressEvent?4(QMouseEvent) -QtWidgets.QToolButton.paintEvent?4(QPaintEvent) -QtWidgets.QToolButton.actionEvent?4(QActionEvent) -QtWidgets.QToolButton.enterEvent?4(QEnterEvent) -QtWidgets.QToolButton.leaveEvent?4(QEvent) -QtWidgets.QToolButton.timerEvent?4(QTimerEvent) -QtWidgets.QToolButton.changeEvent?4(QEvent) -QtWidgets.QToolButton.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QToolButton.nextCheckState?4() -QtWidgets.QToolButton.hitButton?4(QPoint) -> bool -QtWidgets.QToolButton.checkStateSet?4() -QtWidgets.QToolTip?1(QToolTip) -QtWidgets.QToolTip.__init__?1(self, QToolTip) -QtWidgets.QToolTip.showText?4(QPoint, QString, QWidget widget=None, QRect rect={}, int msecShowTime=-1) -QtWidgets.QToolTip.palette?4() -> QPalette -QtWidgets.QToolTip.hideText?4() -QtWidgets.QToolTip.setPalette?4(QPalette) -QtWidgets.QToolTip.font?4() -> QFont -QtWidgets.QToolTip.setFont?4(QFont) -QtWidgets.QToolTip.isVisible?4() -> bool -QtWidgets.QToolTip.text?4() -> QString -QtWidgets.QTreeView?1(QWidget parent=None) -QtWidgets.QTreeView.__init__?1(self, QWidget parent=None) -QtWidgets.QTreeView.setModel?4(QAbstractItemModel) -QtWidgets.QTreeView.setRootIndex?4(QModelIndex) -QtWidgets.QTreeView.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QTreeView.header?4() -> QHeaderView -QtWidgets.QTreeView.setHeader?4(QHeaderView) -QtWidgets.QTreeView.indentation?4() -> int -QtWidgets.QTreeView.setIndentation?4(int) -QtWidgets.QTreeView.rootIsDecorated?4() -> bool -QtWidgets.QTreeView.setRootIsDecorated?4(bool) -QtWidgets.QTreeView.uniformRowHeights?4() -> bool -QtWidgets.QTreeView.setUniformRowHeights?4(bool) -QtWidgets.QTreeView.itemsExpandable?4() -> bool -QtWidgets.QTreeView.setItemsExpandable?4(bool) -QtWidgets.QTreeView.columnViewportPosition?4(int) -> int -QtWidgets.QTreeView.columnWidth?4(int) -> int -QtWidgets.QTreeView.columnAt?4(int) -> int -QtWidgets.QTreeView.isColumnHidden?4(int) -> bool -QtWidgets.QTreeView.setColumnHidden?4(int, bool) -QtWidgets.QTreeView.isRowHidden?4(int, QModelIndex) -> bool -QtWidgets.QTreeView.setRowHidden?4(int, QModelIndex, bool) -QtWidgets.QTreeView.isExpanded?4(QModelIndex) -> bool -QtWidgets.QTreeView.setExpanded?4(QModelIndex, bool) -QtWidgets.QTreeView.keyboardSearch?4(QString) -QtWidgets.QTreeView.visualRect?4(QModelIndex) -> QRect -QtWidgets.QTreeView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QTreeView.indexAt?4(QPoint) -> QModelIndex -QtWidgets.QTreeView.indexAbove?4(QModelIndex) -> QModelIndex -QtWidgets.QTreeView.indexBelow?4(QModelIndex) -> QModelIndex -QtWidgets.QTreeView.reset?4() -QtWidgets.QTreeView.expanded?4(QModelIndex) -QtWidgets.QTreeView.collapsed?4(QModelIndex) -QtWidgets.QTreeView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) -QtWidgets.QTreeView.hideColumn?4(int) -QtWidgets.QTreeView.showColumn?4(int) -QtWidgets.QTreeView.expand?4(QModelIndex) -QtWidgets.QTreeView.expandAll?4() -QtWidgets.QTreeView.collapse?4(QModelIndex) -QtWidgets.QTreeView.collapseAll?4() -QtWidgets.QTreeView.resizeColumnToContents?4(int) -QtWidgets.QTreeView.selectAll?4() -QtWidgets.QTreeView.columnResized?4(int, int, int) -QtWidgets.QTreeView.columnCountChanged?4(int, int) -QtWidgets.QTreeView.columnMoved?4() -QtWidgets.QTreeView.reexpand?4() -QtWidgets.QTreeView.rowsRemoved?4(QModelIndex, int, int) -QtWidgets.QTreeView.scrollContentsBy?4(int, int) -QtWidgets.QTreeView.rowsInserted?4(QModelIndex, int, int) -QtWidgets.QTreeView.rowsAboutToBeRemoved?4(QModelIndex, int, int) -QtWidgets.QTreeView.moveCursor?4(QAbstractItemView.CursorAction, unknown-type) -> QModelIndex -QtWidgets.QTreeView.horizontalOffset?4() -> int -QtWidgets.QTreeView.verticalOffset?4() -> int -QtWidgets.QTreeView.setSelection?4(QRect, unknown-type) -QtWidgets.QTreeView.visualRegionForSelection?4(QItemSelection) -> QRegion -QtWidgets.QTreeView.selectedIndexes?4() -> unknown-type -QtWidgets.QTreeView.changeEvent?4(QEvent) -QtWidgets.QTreeView.paintEvent?4(QPaintEvent) -QtWidgets.QTreeView.timerEvent?4(QTimerEvent) -QtWidgets.QTreeView.mouseReleaseEvent?4(QMouseEvent) -QtWidgets.QTreeView.drawRow?4(QPainter, QStyleOptionViewItem, QModelIndex) -QtWidgets.QTreeView.drawBranches?4(QPainter, QRect, QModelIndex) -QtWidgets.QTreeView.drawTree?4(QPainter, QRegion) -QtWidgets.QTreeView.mousePressEvent?4(QMouseEvent) -QtWidgets.QTreeView.mouseMoveEvent?4(QMouseEvent) -QtWidgets.QTreeView.mouseDoubleClickEvent?4(QMouseEvent) -QtWidgets.QTreeView.keyPressEvent?4(QKeyEvent) -QtWidgets.QTreeView.updateGeometries?4() -QtWidgets.QTreeView.sizeHintForColumn?4(int) -> int -QtWidgets.QTreeView.indexRowSizeHint?4(QModelIndex) -> int -QtWidgets.QTreeView.horizontalScrollbarAction?4(int) -QtWidgets.QTreeView.isIndexHidden?4(QModelIndex) -> bool -QtWidgets.QTreeView.setColumnWidth?4(int, int) -QtWidgets.QTreeView.setSortingEnabled?4(bool) -QtWidgets.QTreeView.isSortingEnabled?4() -> bool -QtWidgets.QTreeView.setAnimated?4(bool) -QtWidgets.QTreeView.isAnimated?4() -> bool -QtWidgets.QTreeView.setAllColumnsShowFocus?4(bool) -QtWidgets.QTreeView.allColumnsShowFocus?4() -> bool -QtWidgets.QTreeView.sortByColumn?4(int, Qt.SortOrder) -QtWidgets.QTreeView.autoExpandDelay?4() -> int -QtWidgets.QTreeView.setAutoExpandDelay?4(int) -QtWidgets.QTreeView.isFirstColumnSpanned?4(int, QModelIndex) -> bool -QtWidgets.QTreeView.setFirstColumnSpanned?4(int, QModelIndex, bool) -QtWidgets.QTreeView.setWordWrap?4(bool) -QtWidgets.QTreeView.wordWrap?4() -> bool -QtWidgets.QTreeView.expandToDepth?4(int) -QtWidgets.QTreeView.dragMoveEvent?4(QDragMoveEvent) -QtWidgets.QTreeView.viewportEvent?4(QEvent) -> bool -QtWidgets.QTreeView.rowHeight?4(QModelIndex) -> int -QtWidgets.QTreeView.selectionChanged?4(QItemSelection, QItemSelection) -QtWidgets.QTreeView.currentChanged?4(QModelIndex, QModelIndex) -QtWidgets.QTreeView.expandsOnDoubleClick?4() -> bool -QtWidgets.QTreeView.setExpandsOnDoubleClick?4(bool) -QtWidgets.QTreeView.isHeaderHidden?4() -> bool -QtWidgets.QTreeView.setHeaderHidden?4(bool) -QtWidgets.QTreeView.setTreePosition?4(int) -QtWidgets.QTreeView.treePosition?4() -> int -QtWidgets.QTreeView.viewportSizeHint?4() -> QSize -QtWidgets.QTreeView.resetIndentation?4() -QtWidgets.QTreeView.expandRecursively?4(QModelIndex, int depth=-1) -QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy?10 -QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.ShowIndicator?10 -QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.DontShowIndicator?10 -QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.DontShowIndicatorWhenChildless?10 -QtWidgets.QTreeWidgetItem.ItemType?10 -QtWidgets.QTreeWidgetItem.ItemType.Type?10 -QtWidgets.QTreeWidgetItem.ItemType.UserType?10 -QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidget, QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, QTreeWidgetItem, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidget, QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidget, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, QStringList, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem.__init__?1(self, int type=QTreeWidgetItem.Type) -QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem) -QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem) -QtWidgets.QTreeWidgetItem.clone?4() -> QTreeWidgetItem -QtWidgets.QTreeWidgetItem.treeWidget?4() -> QTreeWidget -QtWidgets.QTreeWidgetItem.flags?4() -> unknown-type -QtWidgets.QTreeWidgetItem.text?4(int) -> QString -QtWidgets.QTreeWidgetItem.icon?4(int) -> QIcon -QtWidgets.QTreeWidgetItem.statusTip?4(int) -> QString -QtWidgets.QTreeWidgetItem.toolTip?4(int) -> QString -QtWidgets.QTreeWidgetItem.whatsThis?4(int) -> QString -QtWidgets.QTreeWidgetItem.font?4(int) -> QFont -QtWidgets.QTreeWidgetItem.textAlignment?4(int) -> int -QtWidgets.QTreeWidgetItem.setTextAlignment?4(int, unknown-type) -QtWidgets.QTreeWidgetItem.setTextAlignment?4(int, int) -QtWidgets.QTreeWidgetItem.checkState?4(int) -> Qt.CheckState -QtWidgets.QTreeWidgetItem.setCheckState?4(int, Qt.CheckState) -QtWidgets.QTreeWidgetItem.data?4(int, int) -> QVariant -QtWidgets.QTreeWidgetItem.setData?4(int, int, QVariant) -QtWidgets.QTreeWidgetItem.read?4(QDataStream) -QtWidgets.QTreeWidgetItem.write?4(QDataStream) -QtWidgets.QTreeWidgetItem.parent?4() -> QTreeWidgetItem -QtWidgets.QTreeWidgetItem.child?4(int) -> QTreeWidgetItem -QtWidgets.QTreeWidgetItem.childCount?4() -> int -QtWidgets.QTreeWidgetItem.columnCount?4() -> int -QtWidgets.QTreeWidgetItem.addChild?4(QTreeWidgetItem) -QtWidgets.QTreeWidgetItem.insertChild?4(int, QTreeWidgetItem) -QtWidgets.QTreeWidgetItem.takeChild?4(int) -> QTreeWidgetItem -QtWidgets.QTreeWidgetItem.type?4() -> int -QtWidgets.QTreeWidgetItem.setFlags?4(unknown-type) -QtWidgets.QTreeWidgetItem.setText?4(int, QString) -QtWidgets.QTreeWidgetItem.setIcon?4(int, QIcon) -QtWidgets.QTreeWidgetItem.setStatusTip?4(int, QString) -QtWidgets.QTreeWidgetItem.setToolTip?4(int, QString) -QtWidgets.QTreeWidgetItem.setWhatsThis?4(int, QString) -QtWidgets.QTreeWidgetItem.setFont?4(int, QFont) -QtWidgets.QTreeWidgetItem.indexOfChild?4(QTreeWidgetItem) -> int -QtWidgets.QTreeWidgetItem.sizeHint?4(int) -> QSize -QtWidgets.QTreeWidgetItem.setSizeHint?4(int, QSize) -QtWidgets.QTreeWidgetItem.addChildren?4(unknown-type) -QtWidgets.QTreeWidgetItem.insertChildren?4(int, unknown-type) -QtWidgets.QTreeWidgetItem.takeChildren?4() -> unknown-type -QtWidgets.QTreeWidgetItem.background?4(int) -> QBrush -QtWidgets.QTreeWidgetItem.setBackground?4(int, QBrush) -QtWidgets.QTreeWidgetItem.foreground?4(int) -> QBrush -QtWidgets.QTreeWidgetItem.setForeground?4(int, QBrush) -QtWidgets.QTreeWidgetItem.sortChildren?4(int, Qt.SortOrder) -QtWidgets.QTreeWidgetItem.setSelected?4(bool) -QtWidgets.QTreeWidgetItem.isSelected?4() -> bool -QtWidgets.QTreeWidgetItem.setHidden?4(bool) -QtWidgets.QTreeWidgetItem.isHidden?4() -> bool -QtWidgets.QTreeWidgetItem.setExpanded?4(bool) -QtWidgets.QTreeWidgetItem.isExpanded?4() -> bool -QtWidgets.QTreeWidgetItem.setChildIndicatorPolicy?4(QTreeWidgetItem.ChildIndicatorPolicy) -QtWidgets.QTreeWidgetItem.childIndicatorPolicy?4() -> QTreeWidgetItem.ChildIndicatorPolicy -QtWidgets.QTreeWidgetItem.removeChild?4(QTreeWidgetItem) -QtWidgets.QTreeWidgetItem.setFirstColumnSpanned?4(bool) -QtWidgets.QTreeWidgetItem.isFirstColumnSpanned?4() -> bool -QtWidgets.QTreeWidgetItem.setDisabled?4(bool) -QtWidgets.QTreeWidgetItem.isDisabled?4() -> bool -QtWidgets.QTreeWidgetItem.emitDataChanged?4() -QtWidgets.QTreeWidget?1(QWidget parent=None) -QtWidgets.QTreeWidget.__init__?1(self, QWidget parent=None) -QtWidgets.QTreeWidget.columnCount?4() -> int -QtWidgets.QTreeWidget.setColumnCount?4(int) -QtWidgets.QTreeWidget.topLevelItem?4(int) -> QTreeWidgetItem -QtWidgets.QTreeWidget.topLevelItemCount?4() -> int -QtWidgets.QTreeWidget.insertTopLevelItem?4(int, QTreeWidgetItem) -QtWidgets.QTreeWidget.addTopLevelItem?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.takeTopLevelItem?4(int) -> QTreeWidgetItem -QtWidgets.QTreeWidget.indexOfTopLevelItem?4(QTreeWidgetItem) -> int -QtWidgets.QTreeWidget.insertTopLevelItems?4(int, unknown-type) -QtWidgets.QTreeWidget.addTopLevelItems?4(unknown-type) -QtWidgets.QTreeWidget.headerItem?4() -> QTreeWidgetItem -QtWidgets.QTreeWidget.setHeaderItem?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.setHeaderLabels?4(QStringList) -QtWidgets.QTreeWidget.currentItem?4() -> QTreeWidgetItem -QtWidgets.QTreeWidget.currentColumn?4() -> int -QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem, int, unknown-type) -QtWidgets.QTreeWidget.itemAt?4(QPoint) -> QTreeWidgetItem -QtWidgets.QTreeWidget.itemAt?4(int, int) -> QTreeWidgetItem -QtWidgets.QTreeWidget.visualItemRect?4(QTreeWidgetItem) -> QRect -QtWidgets.QTreeWidget.sortColumn?4() -> int -QtWidgets.QTreeWidget.sortItems?4(int, Qt.SortOrder) -QtWidgets.QTreeWidget.editItem?4(QTreeWidgetItem, int column=0) -QtWidgets.QTreeWidget.openPersistentEditor?4(QTreeWidgetItem, int column=0) -QtWidgets.QTreeWidget.closePersistentEditor?4(QTreeWidgetItem, int column=0) -QtWidgets.QTreeWidget.itemWidget?4(QTreeWidgetItem, int) -> QWidget -QtWidgets.QTreeWidget.setItemWidget?4(QTreeWidgetItem, int, QWidget) -QtWidgets.QTreeWidget.selectedItems?4() -> unknown-type -QtWidgets.QTreeWidget.findItems?4(QString, unknown-type, int column=0) -> unknown-type -QtWidgets.QTreeWidget.scrollToItem?4(QTreeWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) -QtWidgets.QTreeWidget.expandItem?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.collapseItem?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.clear?4() -QtWidgets.QTreeWidget.itemPressed?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemClicked?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemDoubleClicked?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemActivated?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemEntered?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemChanged?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.itemExpanded?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.itemCollapsed?4(QTreeWidgetItem) -QtWidgets.QTreeWidget.currentItemChanged?4(QTreeWidgetItem, QTreeWidgetItem) -QtWidgets.QTreeWidget.itemSelectionChanged?4() -QtWidgets.QTreeWidget.mimeTypes?4() -> QStringList -QtWidgets.QTreeWidget.mimeData?4(unknown-type) -> QMimeData -QtWidgets.QTreeWidget.dropMimeData?4(QTreeWidgetItem, int, QMimeData, Qt.DropAction) -> bool -QtWidgets.QTreeWidget.supportedDropActions?4() -> unknown-type -QtWidgets.QTreeWidget.indexFromItem?4(QTreeWidgetItem, int column=0) -> QModelIndex -QtWidgets.QTreeWidget.itemFromIndex?4(QModelIndex) -> QTreeWidgetItem -QtWidgets.QTreeWidget.event?4(QEvent) -> bool -QtWidgets.QTreeWidget.dropEvent?4(QDropEvent) -QtWidgets.QTreeWidget.invisibleRootItem?4() -> QTreeWidgetItem -QtWidgets.QTreeWidget.setHeaderLabel?4(QString) -QtWidgets.QTreeWidget.itemAbove?4(QTreeWidgetItem) -> QTreeWidgetItem -QtWidgets.QTreeWidget.itemBelow?4(QTreeWidgetItem) -> QTreeWidgetItem -QtWidgets.QTreeWidget.removeItemWidget?4(QTreeWidgetItem, int) -QtWidgets.QTreeWidget.setSelectionModel?4(QItemSelectionModel) -QtWidgets.QTreeWidget.isPersistentEditorOpen?4(QTreeWidgetItem, int column=0) -> bool -QtWidgets.QTreeWidgetItemIterator.IteratorFlag?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.All?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Hidden?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotHidden?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Selected?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Unselected?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Selectable?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotSelectable?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DragEnabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DragDisabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DropEnabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DropDisabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.HasChildren?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NoChildren?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Checked?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotChecked?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Enabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Disabled?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Editable?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotEditable?10 -QtWidgets.QTreeWidgetItemIterator.IteratorFlag.UserFlag?10 -QtWidgets.QTreeWidgetItemIterator?1(QTreeWidgetItem, unknown-type flags=QTreeWidgetItemIterator.All) -QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidgetItem, unknown-type flags=QTreeWidgetItemIterator.All) -QtWidgets.QTreeWidgetItemIterator?1(QTreeWidget, unknown-type flags=QTreeWidgetItemIterator.All) -QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidget, unknown-type flags=QTreeWidgetItemIterator.All) -QtWidgets.QTreeWidgetItemIterator?1(QTreeWidgetItemIterator) -QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidgetItemIterator) -QtWidgets.QTreeWidgetItemIterator.value?4() -> QTreeWidgetItem -QtWidgets.QUndoView?1(QWidget parent=None) -QtWidgets.QUndoView.__init__?1(self, QWidget parent=None) -QtWidgets.QUndoView?1(QUndoStack, QWidget parent=None) -QtWidgets.QUndoView.__init__?1(self, QUndoStack, QWidget parent=None) -QtWidgets.QUndoView?1(QUndoGroup, QWidget parent=None) -QtWidgets.QUndoView.__init__?1(self, QUndoGroup, QWidget parent=None) -QtWidgets.QUndoView.stack?4() -> QUndoStack -QtWidgets.QUndoView.group?4() -> QUndoGroup -QtWidgets.QUndoView.setEmptyLabel?4(QString) -QtWidgets.QUndoView.emptyLabel?4() -> QString -QtWidgets.QUndoView.setCleanIcon?4(QIcon) -QtWidgets.QUndoView.cleanIcon?4() -> QIcon -QtWidgets.QUndoView.setStack?4(QUndoStack) -QtWidgets.QUndoView.setGroup?4(QUndoGroup) -QtWidgets.QWhatsThis?1(QWhatsThis) -QtWidgets.QWhatsThis.__init__?1(self, QWhatsThis) -QtWidgets.QWhatsThis.enterWhatsThisMode?4() -QtWidgets.QWhatsThis.inWhatsThisMode?4() -> bool -QtWidgets.QWhatsThis.leaveWhatsThisMode?4() -QtWidgets.QWhatsThis.showText?4(QPoint, QString, QWidget widget=None) -QtWidgets.QWhatsThis.hideText?4() -QtWidgets.QWhatsThis.createAction?4(QObject parent=None) -> QAction -QtWidgets.QWidgetAction?1(QObject) -QtWidgets.QWidgetAction.__init__?1(self, QObject) -QtWidgets.QWidgetAction.setDefaultWidget?4(QWidget) -QtWidgets.QWidgetAction.defaultWidget?4() -> QWidget -QtWidgets.QWidgetAction.requestWidget?4(QWidget) -> QWidget -QtWidgets.QWidgetAction.releaseWidget?4(QWidget) -QtWidgets.QWidgetAction.event?4(QEvent) -> bool -QtWidgets.QWidgetAction.eventFilter?4(QObject, QEvent) -> bool -QtWidgets.QWidgetAction.createWidget?4(QWidget) -> QWidget -QtWidgets.QWidgetAction.deleteWidget?4(QWidget) -QtWidgets.QWidgetAction.createdWidgets?4() -> unknown-type -QtWidgets.QWizard.WizardOption?10 -QtWidgets.QWizard.WizardOption.IndependentPages?10 -QtWidgets.QWizard.WizardOption.IgnoreSubTitles?10 -QtWidgets.QWizard.WizardOption.ExtendedWatermarkPixmap?10 -QtWidgets.QWizard.WizardOption.NoDefaultButton?10 -QtWidgets.QWizard.WizardOption.NoBackButtonOnStartPage?10 -QtWidgets.QWizard.WizardOption.NoBackButtonOnLastPage?10 -QtWidgets.QWizard.WizardOption.DisabledBackButtonOnLastPage?10 -QtWidgets.QWizard.WizardOption.HaveNextButtonOnLastPage?10 -QtWidgets.QWizard.WizardOption.HaveFinishButtonOnEarlyPages?10 -QtWidgets.QWizard.WizardOption.NoCancelButton?10 -QtWidgets.QWizard.WizardOption.CancelButtonOnLeft?10 -QtWidgets.QWizard.WizardOption.HaveHelpButton?10 -QtWidgets.QWizard.WizardOption.HelpButtonOnRight?10 -QtWidgets.QWizard.WizardOption.HaveCustomButton1?10 -QtWidgets.QWizard.WizardOption.HaveCustomButton2?10 -QtWidgets.QWizard.WizardOption.HaveCustomButton3?10 -QtWidgets.QWizard.WizardOption.NoCancelButtonOnLastPage?10 -QtWidgets.QWizard.WizardStyle?10 -QtWidgets.QWizard.WizardStyle.ClassicStyle?10 -QtWidgets.QWizard.WizardStyle.ModernStyle?10 -QtWidgets.QWizard.WizardStyle.MacStyle?10 -QtWidgets.QWizard.WizardStyle.AeroStyle?10 -QtWidgets.QWizard.WizardPixmap?10 -QtWidgets.QWizard.WizardPixmap.WatermarkPixmap?10 -QtWidgets.QWizard.WizardPixmap.LogoPixmap?10 -QtWidgets.QWizard.WizardPixmap.BannerPixmap?10 -QtWidgets.QWizard.WizardPixmap.BackgroundPixmap?10 -QtWidgets.QWizard.WizardButton?10 -QtWidgets.QWizard.WizardButton.BackButton?10 -QtWidgets.QWizard.WizardButton.NextButton?10 -QtWidgets.QWizard.WizardButton.CommitButton?10 -QtWidgets.QWizard.WizardButton.FinishButton?10 -QtWidgets.QWizard.WizardButton.CancelButton?10 -QtWidgets.QWizard.WizardButton.HelpButton?10 -QtWidgets.QWizard.WizardButton.CustomButton1?10 -QtWidgets.QWizard.WizardButton.CustomButton2?10 -QtWidgets.QWizard.WizardButton.CustomButton3?10 -QtWidgets.QWizard.WizardButton.Stretch?10 -QtWidgets.QWizard?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QWizard.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtWidgets.QWizard.addPage?4(QWizardPage) -> int -QtWidgets.QWizard.setPage?4(int, QWizardPage) -QtWidgets.QWizard.page?4(int) -> QWizardPage -QtWidgets.QWizard.hasVisitedPage?4(int) -> bool -QtWidgets.QWizard.visitedIds?4() -> unknown-type -QtWidgets.QWizard.setStartId?4(int) -QtWidgets.QWizard.startId?4() -> int -QtWidgets.QWizard.currentPage?4() -> QWizardPage -QtWidgets.QWizard.currentId?4() -> int -QtWidgets.QWizard.validateCurrentPage?4() -> bool -QtWidgets.QWizard.nextId?4() -> int -QtWidgets.QWizard.setField?4(QString, QVariant) -QtWidgets.QWizard.field?4(QString) -> QVariant -QtWidgets.QWizard.setWizardStyle?4(QWizard.WizardStyle) -QtWidgets.QWizard.wizardStyle?4() -> QWizard.WizardStyle -QtWidgets.QWizard.setOption?4(QWizard.WizardOption, bool on=True) -QtWidgets.QWizard.testOption?4(QWizard.WizardOption) -> bool -QtWidgets.QWizard.setOptions?4(unknown-type) -QtWidgets.QWizard.options?4() -> unknown-type -QtWidgets.QWizard.setButtonText?4(QWizard.WizardButton, QString) -QtWidgets.QWizard.buttonText?4(QWizard.WizardButton) -> QString -QtWidgets.QWizard.setButtonLayout?4(unknown-type) -QtWidgets.QWizard.setButton?4(QWizard.WizardButton, QAbstractButton) -QtWidgets.QWizard.button?4(QWizard.WizardButton) -> QAbstractButton -QtWidgets.QWizard.setTitleFormat?4(Qt.TextFormat) -QtWidgets.QWizard.titleFormat?4() -> Qt.TextFormat -QtWidgets.QWizard.setSubTitleFormat?4(Qt.TextFormat) -QtWidgets.QWizard.subTitleFormat?4() -> Qt.TextFormat -QtWidgets.QWizard.setPixmap?4(QWizard.WizardPixmap, QPixmap) -QtWidgets.QWizard.pixmap?4(QWizard.WizardPixmap) -> QPixmap -QtWidgets.QWizard.setDefaultProperty?4(str, str, Any) -QtWidgets.QWizard.setVisible?4(bool) -QtWidgets.QWizard.sizeHint?4() -> QSize -QtWidgets.QWizard.currentIdChanged?4(int) -QtWidgets.QWizard.helpRequested?4() -QtWidgets.QWizard.customButtonClicked?4(int) -QtWidgets.QWizard.back?4() -QtWidgets.QWizard.next?4() -QtWidgets.QWizard.restart?4() -QtWidgets.QWizard.event?4(QEvent) -> bool -QtWidgets.QWizard.resizeEvent?4(QResizeEvent) -QtWidgets.QWizard.paintEvent?4(QPaintEvent) -QtWidgets.QWizard.done?4(int) -QtWidgets.QWizard.initializePage?4(int) -QtWidgets.QWizard.cleanupPage?4(int) -QtWidgets.QWizard.removePage?4(int) -QtWidgets.QWizard.pageIds?4() -> unknown-type -QtWidgets.QWizard.setSideWidget?4(QWidget) -QtWidgets.QWizard.sideWidget?4() -> QWidget -QtWidgets.QWizard.pageAdded?4(int) -QtWidgets.QWizard.pageRemoved?4(int) -QtWidgets.QWizard.setCurrentId?4(int) -QtWidgets.QWizardPage?1(QWidget parent=None) -QtWidgets.QWizardPage.__init__?1(self, QWidget parent=None) -QtWidgets.QWizardPage.setTitle?4(QString) -QtWidgets.QWizardPage.title?4() -> QString -QtWidgets.QWizardPage.setSubTitle?4(QString) -QtWidgets.QWizardPage.subTitle?4() -> QString -QtWidgets.QWizardPage.setPixmap?4(QWizard.WizardPixmap, QPixmap) -QtWidgets.QWizardPage.pixmap?4(QWizard.WizardPixmap) -> QPixmap -QtWidgets.QWizardPage.setFinalPage?4(bool) -QtWidgets.QWizardPage.isFinalPage?4() -> bool -QtWidgets.QWizardPage.setCommitPage?4(bool) -QtWidgets.QWizardPage.isCommitPage?4() -> bool -QtWidgets.QWizardPage.setButtonText?4(QWizard.WizardButton, QString) -QtWidgets.QWizardPage.buttonText?4(QWizard.WizardButton) -> QString -QtWidgets.QWizardPage.initializePage?4() -QtWidgets.QWizardPage.cleanupPage?4() -QtWidgets.QWizardPage.validatePage?4() -> bool -QtWidgets.QWizardPage.isComplete?4() -> bool -QtWidgets.QWizardPage.nextId?4() -> int -QtWidgets.QWizardPage.completeChanged?4() -QtWidgets.QWizardPage.setField?4(QString, QVariant) -QtWidgets.QWizardPage.field?4(QString) -> QVariant -QtWidgets.QWizardPage.registerField?4(QString, QWidget, str property=None, Any changedSignal=None) -QtWidgets.QWizardPage.wizard?4() -> QWizard -QtDBus.QDBusAbstractAdaptor?1(QObject) -QtDBus.QDBusAbstractAdaptor.__init__?1(self, QObject) -QtDBus.QDBusAbstractAdaptor.setAutoRelaySignals?4(bool) -QtDBus.QDBusAbstractAdaptor.autoRelaySignals?4() -> bool -QtDBus.QDBusAbstractInterface?1(QString, QString, str, QDBusConnection, QObject) -QtDBus.QDBusAbstractInterface.__init__?1(self, QString, QString, str, QDBusConnection, QObject) -QtDBus.QDBusAbstractInterface.isValid?4() -> bool -QtDBus.QDBusAbstractInterface.connection?4() -> QDBusConnection -QtDBus.QDBusAbstractInterface.service?4() -> QString -QtDBus.QDBusAbstractInterface.path?4() -> QString -QtDBus.QDBusAbstractInterface.interface?4() -> QString -QtDBus.QDBusAbstractInterface.lastError?4() -> QDBusError -QtDBus.QDBusAbstractInterface.setTimeout?4(int) -QtDBus.QDBusAbstractInterface.timeout?4() -> int -QtDBus.QDBusAbstractInterface.call?4(QString, Any) -> QDBusMessage -QtDBus.QDBusAbstractInterface.call?4(QDBus.CallMode, QString, Any) -> QDBusMessage -QtDBus.QDBusAbstractInterface.callWithArgumentList?4(QDBus.CallMode, QString, unknown-type) -> QDBusMessage -QtDBus.QDBusAbstractInterface.callWithCallback?4(QString, unknown-type, Any, Any) -> bool -QtDBus.QDBusAbstractInterface.callWithCallback?4(QString, unknown-type, Any) -> bool -QtDBus.QDBusAbstractInterface.asyncCall?4(QString, Any) -> QDBusPendingCall -QtDBus.QDBusAbstractInterface.asyncCallWithArgumentList?4(QString, unknown-type) -> QDBusPendingCall -QtDBus.QDBusAbstractInterface.connectNotify?4(QMetaMethod) -QtDBus.QDBusAbstractInterface.disconnectNotify?4(QMetaMethod) -QtDBus.QDBusAbstractInterface.setInteractiveAuthorizationAllowed?4(bool) -QtDBus.QDBusAbstractInterface.isInteractiveAuthorizationAllowed?4() -> bool -QtDBus.QDBusArgument?1() -QtDBus.QDBusArgument.__init__?1(self) -QtDBus.QDBusArgument?1(QDBusArgument) -QtDBus.QDBusArgument.__init__?1(self, QDBusArgument) -QtDBus.QDBusArgument?1(Any, int id=QMetaType.Int) -QtDBus.QDBusArgument.__init__?1(self, Any, int id=QMetaType.Int) -QtDBus.QDBusArgument.add?4(Any, int id=QMetaType.Int) -> Any -QtDBus.QDBusArgument.beginStructure?4() -QtDBus.QDBusArgument.endStructure?4() -QtDBus.QDBusArgument.beginArray?4(QMetaType) -QtDBus.QDBusArgument.beginArray?4(int) -QtDBus.QDBusArgument.endArray?4() -QtDBus.QDBusArgument.beginMap?4(QMetaType, QMetaType) -QtDBus.QDBusArgument.beginMap?4(int, int) -QtDBus.QDBusArgument.endMap?4() -QtDBus.QDBusArgument.beginMapEntry?4() -QtDBus.QDBusArgument.endMapEntry?4() -QtDBus.QDBusArgument.swap?4(QDBusArgument) -QtDBus.QDBus.CallMode?10 -QtDBus.QDBus.CallMode.NoBlock?10 -QtDBus.QDBus.CallMode.Block?10 -QtDBus.QDBus.CallMode.BlockWithGui?10 -QtDBus.QDBus.CallMode.AutoDetect?10 -QtDBus.QDBusConnection.ConnectionCapability?10 -QtDBus.QDBusConnection.ConnectionCapability.UnixFileDescriptorPassing?10 -QtDBus.QDBusConnection.UnregisterMode?10 -QtDBus.QDBusConnection.UnregisterMode.UnregisterNode?10 -QtDBus.QDBusConnection.UnregisterMode.UnregisterTree?10 -QtDBus.QDBusConnection.RegisterOption?10 -QtDBus.QDBusConnection.RegisterOption.ExportAdaptors?10 -QtDBus.QDBusConnection.RegisterOption.ExportScriptableSlots?10 -QtDBus.QDBusConnection.RegisterOption.ExportScriptableSignals?10 -QtDBus.QDBusConnection.RegisterOption.ExportScriptableProperties?10 -QtDBus.QDBusConnection.RegisterOption.ExportScriptableInvokables?10 -QtDBus.QDBusConnection.RegisterOption.ExportScriptableContents?10 -QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableSlots?10 -QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableSignals?10 -QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableProperties?10 -QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableInvokables?10 -QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableContents?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllSlots?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllSignals?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllProperties?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllInvokables?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllContents?10 -QtDBus.QDBusConnection.RegisterOption.ExportAllSignal?10 -QtDBus.QDBusConnection.RegisterOption.ExportChildObjects?10 -QtDBus.QDBusConnection.BusType?10 -QtDBus.QDBusConnection.BusType.SessionBus?10 -QtDBus.QDBusConnection.BusType.SystemBus?10 -QtDBus.QDBusConnection.BusType.ActivationBus?10 -QtDBus.QDBusConnection?1(QString) -QtDBus.QDBusConnection.__init__?1(self, QString) -QtDBus.QDBusConnection?1(QDBusConnection) -QtDBus.QDBusConnection.__init__?1(self, QDBusConnection) -QtDBus.QDBusConnection.isConnected?4() -> bool -QtDBus.QDBusConnection.baseService?4() -> QString -QtDBus.QDBusConnection.lastError?4() -> QDBusError -QtDBus.QDBusConnection.name?4() -> QString -QtDBus.QDBusConnection.connectionCapabilities?4() -> unknown-type -QtDBus.QDBusConnection.send?4(QDBusMessage) -> bool -QtDBus.QDBusConnection.callWithCallback?4(QDBusMessage, Any, Any, int timeout=-1) -> bool -QtDBus.QDBusConnection.call?4(QDBusMessage, QDBus.CallMode mode=QDBus.Block, int timeout=-1) -> QDBusMessage -QtDBus.QDBusConnection.asyncCall?4(QDBusMessage, int timeout=-1) -> QDBusPendingCall -QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, Any) -> bool -QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, QString, Any) -> bool -QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, QStringList, QString, Any) -> bool -QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, Any) -> bool -QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, QString, Any) -> bool -QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, QStringList, QString, Any) -> bool -QtDBus.QDBusConnection.registerObject?4(QString, QObject, unknown-type options=QDBusConnection.ExportAdaptors) -> bool -QtDBus.QDBusConnection.registerObject?4(QString, QString, QObject, unknown-type options=QDBusConnection.ExportAdaptors) -> bool -QtDBus.QDBusConnection.unregisterObject?4(QString, QDBusConnection.UnregisterMode mode=QDBusConnection.UnregisterNode) -QtDBus.QDBusConnection.objectRegisteredAt?4(QString) -> QObject -QtDBus.QDBusConnection.registerService?4(QString) -> bool -QtDBus.QDBusConnection.unregisterService?4(QString) -> bool -QtDBus.QDBusConnection.interface?4() -> QDBusConnectionInterface -QtDBus.QDBusConnection.connectToBus?4(QDBusConnection.BusType, QString) -> QDBusConnection -QtDBus.QDBusConnection.connectToBus?4(QString, QString) -> QDBusConnection -QtDBus.QDBusConnection.connectToPeer?4(QString, QString) -> QDBusConnection -QtDBus.QDBusConnection.disconnectFromBus?4(QString) -QtDBus.QDBusConnection.disconnectFromPeer?4(QString) -QtDBus.QDBusConnection.localMachineId?4() -> QByteArray -QtDBus.QDBusConnection.sessionBus?4() -> QDBusConnection -QtDBus.QDBusConnection.systemBus?4() -> QDBusConnection -QtDBus.QDBusConnection.swap?4(QDBusConnection) -QtDBus.QDBusConnectionInterface.RegisterServiceReply?10 -QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceNotRegistered?10 -QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceRegistered?10 -QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceQueued?10 -QtDBus.QDBusConnectionInterface.ServiceReplacementOptions?10 -QtDBus.QDBusConnectionInterface.ServiceReplacementOptions.DontAllowReplacement?10 -QtDBus.QDBusConnectionInterface.ServiceReplacementOptions.AllowReplacement?10 -QtDBus.QDBusConnectionInterface.ServiceQueueOptions?10 -QtDBus.QDBusConnectionInterface.ServiceQueueOptions.DontQueueService?10 -QtDBus.QDBusConnectionInterface.ServiceQueueOptions.QueueService?10 -QtDBus.QDBusConnectionInterface.ServiceQueueOptions.ReplaceExistingService?10 -QtDBus.QDBusConnectionInterface.registeredServiceNames?4() -> unknown-type -QtDBus.QDBusConnectionInterface.activatableServiceNames?4() -> unknown-type -QtDBus.QDBusConnectionInterface.isServiceRegistered?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.serviceOwner?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.unregisterService?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.registerService?4(QString, QDBusConnectionInterface.ServiceQueueOptions qoption=QDBusConnectionInterface.DontQueueService, QDBusConnectionInterface.ServiceReplacementOptions roption=QDBusConnectionInterface.DontAllowReplacement) -> unknown-type -QtDBus.QDBusConnectionInterface.servicePid?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.serviceUid?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.startService?4(QString) -> unknown-type -QtDBus.QDBusConnectionInterface.serviceRegistered?4(QString) -QtDBus.QDBusConnectionInterface.serviceUnregistered?4(QString) -QtDBus.QDBusConnectionInterface.serviceOwnerChanged?4(QString, QString, QString) -QtDBus.QDBusConnectionInterface.callWithCallbackFailed?4(QDBusError, QDBusMessage) -QtDBus.QDBusConnectionInterface.connectNotify?4(QMetaMethod) -QtDBus.QDBusConnectionInterface.disconnectNotify?4(QMetaMethod) -QtDBus.QDBusError.ErrorType?10 -QtDBus.QDBusError.ErrorType.NoError?10 -QtDBus.QDBusError.ErrorType.Other?10 -QtDBus.QDBusError.ErrorType.Failed?10 -QtDBus.QDBusError.ErrorType.NoMemory?10 -QtDBus.QDBusError.ErrorType.ServiceUnknown?10 -QtDBus.QDBusError.ErrorType.NoReply?10 -QtDBus.QDBusError.ErrorType.BadAddress?10 -QtDBus.QDBusError.ErrorType.NotSupported?10 -QtDBus.QDBusError.ErrorType.LimitsExceeded?10 -QtDBus.QDBusError.ErrorType.AccessDenied?10 -QtDBus.QDBusError.ErrorType.NoServer?10 -QtDBus.QDBusError.ErrorType.Timeout?10 -QtDBus.QDBusError.ErrorType.NoNetwork?10 -QtDBus.QDBusError.ErrorType.AddressInUse?10 -QtDBus.QDBusError.ErrorType.Disconnected?10 -QtDBus.QDBusError.ErrorType.InvalidArgs?10 -QtDBus.QDBusError.ErrorType.UnknownMethod?10 -QtDBus.QDBusError.ErrorType.TimedOut?10 -QtDBus.QDBusError.ErrorType.InvalidSignature?10 -QtDBus.QDBusError.ErrorType.UnknownInterface?10 -QtDBus.QDBusError.ErrorType.InternalError?10 -QtDBus.QDBusError.ErrorType.UnknownObject?10 -QtDBus.QDBusError.ErrorType.InvalidService?10 -QtDBus.QDBusError.ErrorType.InvalidObjectPath?10 -QtDBus.QDBusError.ErrorType.InvalidInterface?10 -QtDBus.QDBusError.ErrorType.InvalidMember?10 -QtDBus.QDBusError.ErrorType.UnknownProperty?10 -QtDBus.QDBusError.ErrorType.PropertyReadOnly?10 -QtDBus.QDBusError?1(QDBusError) -QtDBus.QDBusError.__init__?1(self, QDBusError) -QtDBus.QDBusError.type?4() -> QDBusError.ErrorType -QtDBus.QDBusError.name?4() -> QString -QtDBus.QDBusError.message?4() -> QString -QtDBus.QDBusError.isValid?4() -> bool -QtDBus.QDBusError.errorString?4(QDBusError.ErrorType) -> QString -QtDBus.QDBusError.swap?4(QDBusError) -QtDBus.QDBusObjectPath?1() -QtDBus.QDBusObjectPath.__init__?1(self) -QtDBus.QDBusObjectPath?1(QString) -QtDBus.QDBusObjectPath.__init__?1(self, QString) -QtDBus.QDBusObjectPath?1(QDBusObjectPath) -QtDBus.QDBusObjectPath.__init__?1(self, QDBusObjectPath) -QtDBus.QDBusObjectPath.path?4() -> QString -QtDBus.QDBusObjectPath.setPath?4(QString) -QtDBus.QDBusObjectPath.swap?4(QDBusObjectPath) -QtDBus.QDBusSignature?1() -QtDBus.QDBusSignature.__init__?1(self) -QtDBus.QDBusSignature?1(QString) -QtDBus.QDBusSignature.__init__?1(self, QString) -QtDBus.QDBusSignature?1(QDBusSignature) -QtDBus.QDBusSignature.__init__?1(self, QDBusSignature) -QtDBus.QDBusSignature.signature?4() -> QString -QtDBus.QDBusSignature.setSignature?4(QString) -QtDBus.QDBusSignature.swap?4(QDBusSignature) -QtDBus.QDBusVariant?1() -QtDBus.QDBusVariant.__init__?1(self) -QtDBus.QDBusVariant?1(QVariant) -QtDBus.QDBusVariant.__init__?1(self, QVariant) -QtDBus.QDBusVariant?1(QDBusVariant) -QtDBus.QDBusVariant.__init__?1(self, QDBusVariant) -QtDBus.QDBusVariant.variant?4() -> QVariant -QtDBus.QDBusVariant.setVariant?4(QVariant) -QtDBus.QDBusVariant.swap?4(QDBusVariant) -QtDBus.QDBusInterface?1(QString, QString, QString interface='', QDBusConnection connection=QDBusConnection.sessionBus(), QObject parent=None) -QtDBus.QDBusInterface.__init__?1(self, QString, QString, QString interface='', QDBusConnection connection=QDBusConnection.sessionBus(), QObject parent=None) -QtDBus.QDBusMessage.MessageType?10 -QtDBus.QDBusMessage.MessageType.InvalidMessage?10 -QtDBus.QDBusMessage.MessageType.MethodCallMessage?10 -QtDBus.QDBusMessage.MessageType.ReplyMessage?10 -QtDBus.QDBusMessage.MessageType.ErrorMessage?10 -QtDBus.QDBusMessage.MessageType.SignalMessage?10 -QtDBus.QDBusMessage?1() -QtDBus.QDBusMessage.__init__?1(self) -QtDBus.QDBusMessage?1(QDBusMessage) -QtDBus.QDBusMessage.__init__?1(self, QDBusMessage) -QtDBus.QDBusMessage.createSignal?4(QString, QString, QString) -> QDBusMessage -QtDBus.QDBusMessage.createMethodCall?4(QString, QString, QString, QString) -> QDBusMessage -QtDBus.QDBusMessage.createError?4(QString, QString) -> QDBusMessage -QtDBus.QDBusMessage.createError?4(QDBusError) -> QDBusMessage -QtDBus.QDBusMessage.createError?4(QDBusError.ErrorType, QString) -> QDBusMessage -QtDBus.QDBusMessage.createReply?4(unknown-type arguments=[]) -> QDBusMessage -QtDBus.QDBusMessage.createReply?4(QVariant) -> QDBusMessage -QtDBus.QDBusMessage.createErrorReply?4(QString, QString) -> QDBusMessage -QtDBus.QDBusMessage.createErrorReply?4(QDBusError) -> QDBusMessage -QtDBus.QDBusMessage.createErrorReply?4(QDBusError.ErrorType, QString) -> QDBusMessage -QtDBus.QDBusMessage.service?4() -> QString -QtDBus.QDBusMessage.path?4() -> QString -QtDBus.QDBusMessage.interface?4() -> QString -QtDBus.QDBusMessage.member?4() -> QString -QtDBus.QDBusMessage.errorName?4() -> QString -QtDBus.QDBusMessage.errorMessage?4() -> QString -QtDBus.QDBusMessage.type?4() -> QDBusMessage.MessageType -QtDBus.QDBusMessage.signature?4() -> QString -QtDBus.QDBusMessage.isReplyRequired?4() -> bool -QtDBus.QDBusMessage.setDelayedReply?4(bool) -QtDBus.QDBusMessage.isDelayedReply?4() -> bool -QtDBus.QDBusMessage.setAutoStartService?4(bool) -QtDBus.QDBusMessage.autoStartService?4() -> bool -QtDBus.QDBusMessage.setArguments?4(unknown-type) -QtDBus.QDBusMessage.arguments?4() -> unknown-type -QtDBus.QDBusMessage.swap?4(QDBusMessage) -QtDBus.QDBusMessage.createTargetedSignal?4(QString, QString, QString, QString) -> QDBusMessage -QtDBus.QDBusMessage.setInteractiveAuthorizationAllowed?4(bool) -QtDBus.QDBusMessage.isInteractiveAuthorizationAllowed?4() -> bool -QtDBus.QDBusPendingCall?1(QDBusPendingCall) -QtDBus.QDBusPendingCall.__init__?1(self, QDBusPendingCall) -QtDBus.QDBusPendingCall.fromError?4(QDBusError) -> QDBusPendingCall -QtDBus.QDBusPendingCall.fromCompletedCall?4(QDBusMessage) -> QDBusPendingCall -QtDBus.QDBusPendingCall.swap?4(QDBusPendingCall) -QtDBus.QDBusPendingCallWatcher?1(QDBusPendingCall, QObject parent=None) -QtDBus.QDBusPendingCallWatcher.__init__?1(self, QDBusPendingCall, QObject parent=None) -QtDBus.QDBusPendingCallWatcher.isFinished?4() -> bool -QtDBus.QDBusPendingCallWatcher.waitForFinished?4() -QtDBus.QDBusPendingCallWatcher.finished?4(QDBusPendingCallWatcher watcher=None) -QtDBus.QDBusServiceWatcher.WatchModeFlag?10 -QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForRegistration?10 -QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForUnregistration?10 -QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForOwnerChange?10 -QtDBus.QDBusServiceWatcher?1(QObject parent=None) -QtDBus.QDBusServiceWatcher.__init__?1(self, QObject parent=None) -QtDBus.QDBusServiceWatcher?1(QString, QDBusConnection, unknown-type watchMode=QDBusServiceWatcher.WatchForOwnerChange, QObject parent=None) -QtDBus.QDBusServiceWatcher.__init__?1(self, QString, QDBusConnection, unknown-type watchMode=QDBusServiceWatcher.WatchForOwnerChange, QObject parent=None) -QtDBus.QDBusServiceWatcher.watchedServices?4() -> QStringList -QtDBus.QDBusServiceWatcher.setWatchedServices?4(QStringList) -QtDBus.QDBusServiceWatcher.addWatchedService?4(QString) -QtDBus.QDBusServiceWatcher.removeWatchedService?4(QString) -> bool -QtDBus.QDBusServiceWatcher.watchMode?4() -> unknown-type -QtDBus.QDBusServiceWatcher.setWatchMode?4(unknown-type) -QtDBus.QDBusServiceWatcher.connection?4() -> QDBusConnection -QtDBus.QDBusServiceWatcher.setConnection?4(QDBusConnection) -QtDBus.QDBusServiceWatcher.serviceRegistered?4(QString) -QtDBus.QDBusServiceWatcher.serviceUnregistered?4(QString) -QtDBus.QDBusServiceWatcher.serviceOwnerChanged?4(QString, QString, QString) -QtDBus.QDBusUnixFileDescriptor?1() -QtDBus.QDBusUnixFileDescriptor.__init__?1(self) -QtDBus.QDBusUnixFileDescriptor?1(int) -QtDBus.QDBusUnixFileDescriptor.__init__?1(self, int) -QtDBus.QDBusUnixFileDescriptor?1(QDBusUnixFileDescriptor) -QtDBus.QDBusUnixFileDescriptor.__init__?1(self, QDBusUnixFileDescriptor) -QtDBus.QDBusUnixFileDescriptor.isValid?4() -> bool -QtDBus.QDBusUnixFileDescriptor.fileDescriptor?4() -> int -QtDBus.QDBusUnixFileDescriptor.setFileDescriptor?4(int) -QtDBus.QDBusUnixFileDescriptor.isSupported?4() -> bool -QtDBus.QDBusUnixFileDescriptor.swap?4(QDBusUnixFileDescriptor) -QtDBus.QDBusPendingReply?1() -QtDBus.QDBusPendingReply.__init__?1(self) -QtDBus.QDBusPendingReply?1(QDBusPendingReply) -QtDBus.QDBusPendingReply.__init__?1(self, QDBusPendingReply) -QtDBus.QDBusPendingReply?1(QDBusPendingCall) -QtDBus.QDBusPendingReply.__init__?1(self, QDBusPendingCall) -QtDBus.QDBusPendingReply?1(QDBusMessage) -QtDBus.QDBusPendingReply.__init__?1(self, QDBusMessage) -QtDBus.QDBusPendingReply.argumentAt?4(int) -> QVariant -QtDBus.QDBusPendingReply.error?4() -> QDBusError -QtDBus.QDBusPendingReply.isError?4() -> bool -QtDBus.QDBusPendingReply.isFinished?4() -> bool -QtDBus.QDBusPendingReply.isValid?4() -> bool -QtDBus.QDBusPendingReply.reply?4() -> QDBusMessage -QtDBus.QDBusPendingReply.waitForFinished?4() -QtDBus.QDBusPendingReply.value?4(Any type=None) -> Any -QtDBus.QDBusReply?1(QDBusMessage) -QtDBus.QDBusReply.__init__?1(self, QDBusMessage) -QtDBus.QDBusReply?1(QDBusPendingCall) -QtDBus.QDBusReply.__init__?1(self, QDBusPendingCall) -QtDBus.QDBusReply?1(QDBusError) -QtDBus.QDBusReply.__init__?1(self, QDBusError) -QtDBus.QDBusReply?1(QDBusReply) -QtDBus.QDBusReply.__init__?1(self, QDBusReply) -QtDBus.QDBusReply.error?4() -> QDBusError -QtDBus.QDBusReply.isValid?4() -> bool -QtDBus.QDBusReply.value?4(Any type=None) -> Any -QtDesigner.QDesignerActionEditorInterface?1(QWidget, unknown-type flags={}) -QtDesigner.QDesignerActionEditorInterface.__init__?1(self, QWidget, unknown-type flags={}) -QtDesigner.QDesignerActionEditorInterface.core?4() -> QDesignerFormEditorInterface -QtDesigner.QDesignerActionEditorInterface.manageAction?4(QAction) -QtDesigner.QDesignerActionEditorInterface.unmanageAction?4(QAction) -QtDesigner.QDesignerActionEditorInterface.setFormWindow?4(QDesignerFormWindowInterface) -QtDesigner.QAbstractFormBuilder?1() -QtDesigner.QAbstractFormBuilder.__init__?1(self) -QtDesigner.QAbstractFormBuilder.load?4(QIODevice, QWidget parent=None) -> QWidget -QtDesigner.QAbstractFormBuilder.save?4(QIODevice, QWidget) -QtDesigner.QAbstractFormBuilder.setWorkingDirectory?4(QDir) -QtDesigner.QAbstractFormBuilder.workingDirectory?4() -> QDir -QtDesigner.QAbstractFormBuilder.errorString?4() -> QString -QtDesigner.QDesignerFormEditorInterface?1(QObject parent=None) -QtDesigner.QDesignerFormEditorInterface.__init__?1(self, QObject parent=None) -QtDesigner.QDesignerFormEditorInterface.extensionManager?4() -> QExtensionManager -QtDesigner.QDesignerFormEditorInterface.topLevel?4() -> QWidget -QtDesigner.QDesignerFormEditorInterface.widgetBox?4() -> QDesignerWidgetBoxInterface -QtDesigner.QDesignerFormEditorInterface.propertyEditor?4() -> QDesignerPropertyEditorInterface -QtDesigner.QDesignerFormEditorInterface.objectInspector?4() -> QDesignerObjectInspectorInterface -QtDesigner.QDesignerFormEditorInterface.formWindowManager?4() -> QDesignerFormWindowManagerInterface -QtDesigner.QDesignerFormEditorInterface.actionEditor?4() -> QDesignerActionEditorInterface -QtDesigner.QDesignerFormEditorInterface.setWidgetBox?4(QDesignerWidgetBoxInterface) -QtDesigner.QDesignerFormEditorInterface.setPropertyEditor?4(QDesignerPropertyEditorInterface) -QtDesigner.QDesignerFormEditorInterface.setObjectInspector?4(QDesignerObjectInspectorInterface) -QtDesigner.QDesignerFormEditorInterface.setActionEditor?4(QDesignerActionEditorInterface) -QtDesigner.QDesignerFormWindowInterface.FeatureFlag?10 -QtDesigner.QDesignerFormWindowInterface.FeatureFlag.EditFeature?10 -QtDesigner.QDesignerFormWindowInterface.FeatureFlag.GridFeature?10 -QtDesigner.QDesignerFormWindowInterface.FeatureFlag.TabOrderFeature?10 -QtDesigner.QDesignerFormWindowInterface.FeatureFlag.DefaultFeature?10 -QtDesigner.QDesignerFormWindowInterface?1(QWidget parent=None, unknown-type flags={}) -QtDesigner.QDesignerFormWindowInterface.__init__?1(self, QWidget parent=None, unknown-type flags={}) -QtDesigner.QDesignerFormWindowInterface.fileName?4() -> QString -QtDesigner.QDesignerFormWindowInterface.absoluteDir?4() -> QDir -QtDesigner.QDesignerFormWindowInterface.contents?4() -> QString -QtDesigner.QDesignerFormWindowInterface.setContents?4(QIODevice, QString errorMessage='') -> bool -QtDesigner.QDesignerFormWindowInterface.features?4() -> unknown-type -QtDesigner.QDesignerFormWindowInterface.hasFeature?4(unknown-type) -> bool -QtDesigner.QDesignerFormWindowInterface.author?4() -> QString -QtDesigner.QDesignerFormWindowInterface.setAuthor?4(QString) -QtDesigner.QDesignerFormWindowInterface.comment?4() -> QString -QtDesigner.QDesignerFormWindowInterface.setComment?4(QString) -QtDesigner.QDesignerFormWindowInterface.layoutDefault?4() -> (int, int) -QtDesigner.QDesignerFormWindowInterface.setLayoutDefault?4(int, int) -QtDesigner.QDesignerFormWindowInterface.layoutFunction?4() -> (QString, QString) -QtDesigner.QDesignerFormWindowInterface.setLayoutFunction?4(QString, QString) -QtDesigner.QDesignerFormWindowInterface.pixmapFunction?4() -> QString -QtDesigner.QDesignerFormWindowInterface.setPixmapFunction?4(QString) -QtDesigner.QDesignerFormWindowInterface.exportMacro?4() -> QString -QtDesigner.QDesignerFormWindowInterface.setExportMacro?4(QString) -QtDesigner.QDesignerFormWindowInterface.includeHints?4() -> QStringList -QtDesigner.QDesignerFormWindowInterface.setIncludeHints?4(QStringList) -QtDesigner.QDesignerFormWindowInterface.core?4() -> QDesignerFormEditorInterface -QtDesigner.QDesignerFormWindowInterface.cursor?4() -> QDesignerFormWindowCursorInterface -QtDesigner.QDesignerFormWindowInterface.grid?4() -> QPoint -QtDesigner.QDesignerFormWindowInterface.mainContainer?4() -> QWidget -QtDesigner.QDesignerFormWindowInterface.setMainContainer?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.isManaged?4(QWidget) -> bool -QtDesigner.QDesignerFormWindowInterface.isDirty?4() -> bool -QtDesigner.QDesignerFormWindowInterface.findFormWindow?4(QWidget) -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowInterface.findFormWindow?4(QObject) -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowInterface.emitSelectionChanged?4() -QtDesigner.QDesignerFormWindowInterface.resourceFiles?4() -> QStringList -QtDesigner.QDesignerFormWindowInterface.addResourceFile?4(QString) -QtDesigner.QDesignerFormWindowInterface.removeResourceFile?4(QString) -QtDesigner.QDesignerFormWindowInterface.manageWidget?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.unmanageWidget?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.setFeatures?4(unknown-type) -QtDesigner.QDesignerFormWindowInterface.setDirty?4(bool) -QtDesigner.QDesignerFormWindowInterface.clearSelection?4(bool update=True) -QtDesigner.QDesignerFormWindowInterface.selectWidget?4(QWidget, bool select=True) -QtDesigner.QDesignerFormWindowInterface.setGrid?4(QPoint) -QtDesigner.QDesignerFormWindowInterface.setFileName?4(QString) -QtDesigner.QDesignerFormWindowInterface.setContents?4(QString) -> bool -QtDesigner.QDesignerFormWindowInterface.mainContainerChanged?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.fileNameChanged?4(QString) -QtDesigner.QDesignerFormWindowInterface.featureChanged?4(unknown-type) -QtDesigner.QDesignerFormWindowInterface.selectionChanged?4() -QtDesigner.QDesignerFormWindowInterface.geometryChanged?4() -QtDesigner.QDesignerFormWindowInterface.resourceFilesChanged?4() -QtDesigner.QDesignerFormWindowInterface.widgetManaged?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.widgetUnmanaged?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.aboutToUnmanageWidget?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.activated?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.changed?4() -QtDesigner.QDesignerFormWindowInterface.widgetRemoved?4(QWidget) -QtDesigner.QDesignerFormWindowInterface.objectRemoved?4(QObject) -QtDesigner.QDesignerFormWindowInterface.checkContents?4() -> QStringList -QtDesigner.QDesignerFormWindowInterface.activeResourceFilePaths?4() -> QStringList -QtDesigner.QDesignerFormWindowInterface.formContainer?4() -> QWidget -QtDesigner.QDesignerFormWindowInterface.activateResourceFilePaths?4(QStringList) -> (int, QString) -QtDesigner.QDesignerFormWindowCursorInterface.MoveMode?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveMode.MoveAnchor?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveMode.KeepAnchor?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.NoMove?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Start?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.End?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Next?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Prev?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Left?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Right?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Up?10 -QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Down?10 -QtDesigner.QDesignerFormWindowCursorInterface?1() -QtDesigner.QDesignerFormWindowCursorInterface.__init__?1(self) -QtDesigner.QDesignerFormWindowCursorInterface.formWindow?4() -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowCursorInterface.movePosition?4(QDesignerFormWindowCursorInterface.MoveOperation, QDesignerFormWindowCursorInterface.MoveMode mode=QDesignerFormWindowCursorInterface.MoveAnchor) -> bool -QtDesigner.QDesignerFormWindowCursorInterface.position?4() -> int -QtDesigner.QDesignerFormWindowCursorInterface.setPosition?4(int, QDesignerFormWindowCursorInterface.MoveMode mode=QDesignerFormWindowCursorInterface.MoveAnchor) -QtDesigner.QDesignerFormWindowCursorInterface.current?4() -> QWidget -QtDesigner.QDesignerFormWindowCursorInterface.widgetCount?4() -> int -QtDesigner.QDesignerFormWindowCursorInterface.widget?4(int) -> QWidget -QtDesigner.QDesignerFormWindowCursorInterface.hasSelection?4() -> bool -QtDesigner.QDesignerFormWindowCursorInterface.selectedWidgetCount?4() -> int -QtDesigner.QDesignerFormWindowCursorInterface.selectedWidget?4(int) -> QWidget -QtDesigner.QDesignerFormWindowCursorInterface.setProperty?4(QString, QVariant) -QtDesigner.QDesignerFormWindowCursorInterface.setWidgetProperty?4(QWidget, QString, QVariant) -QtDesigner.QDesignerFormWindowCursorInterface.resetWidgetProperty?4(QWidget, QString) -QtDesigner.QDesignerFormWindowCursorInterface.isWidgetSelected?4(QWidget) -> bool -QtDesigner.QDesignerFormWindowManagerInterface.ActionGroup?10 -QtDesigner.QDesignerFormWindowManagerInterface.ActionGroup.StyledPreviewActionGroup?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.CutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.CopyAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.PasteAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.DeleteAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.SelectAllAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.LowerAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.RaiseAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.UndoAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.RedoAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.HorizontalLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.VerticalLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.SplitHorizontalAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.SplitVerticalAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.GridLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.FormLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.BreakLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.AdjustSizeAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.SimplifyLayoutAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.DefaultPreviewAction?10 -QtDesigner.QDesignerFormWindowManagerInterface.Action.FormWindowSettingsDialogAction?10 -QtDesigner.QDesignerFormWindowManagerInterface?1(QObject parent=None) -QtDesigner.QDesignerFormWindowManagerInterface.__init__?1(self, QObject parent=None) -QtDesigner.QDesignerFormWindowManagerInterface.actionFormLayout?4() -> QAction -QtDesigner.QDesignerFormWindowManagerInterface.actionSimplifyLayout?4() -> QAction -QtDesigner.QDesignerFormWindowManagerInterface.activeFormWindow?4() -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowManagerInterface.formWindowCount?4() -> int -QtDesigner.QDesignerFormWindowManagerInterface.formWindow?4(int) -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowManagerInterface.createFormWindow?4(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -> QDesignerFormWindowInterface -QtDesigner.QDesignerFormWindowManagerInterface.core?4() -> QDesignerFormEditorInterface -QtDesigner.QDesignerFormWindowManagerInterface.formWindowAdded?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.formWindowRemoved?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.activeFormWindowChanged?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.formWindowSettingsChanged?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.addFormWindow?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.removeFormWindow?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.setActiveFormWindow?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerFormWindowManagerInterface.action?4(QDesignerFormWindowManagerInterface.Action) -> QAction -QtDesigner.QDesignerFormWindowManagerInterface.actionGroup?4(QDesignerFormWindowManagerInterface.ActionGroup) -> QActionGroup -QtDesigner.QDesignerFormWindowManagerInterface.showPreview?4() -QtDesigner.QDesignerFormWindowManagerInterface.closeAllPreviews?4() -QtDesigner.QDesignerFormWindowManagerInterface.showPluginDialog?4() -QtDesigner.QDesignerObjectInspectorInterface?1(QWidget, unknown-type flags={}) -QtDesigner.QDesignerObjectInspectorInterface.__init__?1(self, QWidget, unknown-type flags={}) -QtDesigner.QDesignerObjectInspectorInterface.core?4() -> QDesignerFormEditorInterface -QtDesigner.QDesignerObjectInspectorInterface.setFormWindow?4(QDesignerFormWindowInterface) -QtDesigner.QDesignerPropertyEditorInterface?1(QWidget, unknown-type flags={}) -QtDesigner.QDesignerPropertyEditorInterface.__init__?1(self, QWidget, unknown-type flags={}) -QtDesigner.QDesignerPropertyEditorInterface.core?4() -> QDesignerFormEditorInterface -QtDesigner.QDesignerPropertyEditorInterface.isReadOnly?4() -> bool -QtDesigner.QDesignerPropertyEditorInterface.object?4() -> QObject -QtDesigner.QDesignerPropertyEditorInterface.currentPropertyName?4() -> QString -QtDesigner.QDesignerPropertyEditorInterface.propertyChanged?4(QString, QVariant) -QtDesigner.QDesignerPropertyEditorInterface.setObject?4(QObject) -QtDesigner.QDesignerPropertyEditorInterface.setPropertyValue?4(QString, QVariant, bool changed=True) -QtDesigner.QDesignerPropertyEditorInterface.setReadOnly?4(bool) -QtDesigner.QDesignerWidgetBoxInterface?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtDesigner.QDesignerWidgetBoxInterface.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtDesigner.QDesignerWidgetBoxInterface.setFileName?4(QString) -QtDesigner.QDesignerWidgetBoxInterface.fileName?4() -> QString -QtDesigner.QDesignerWidgetBoxInterface.load?4() -> bool -QtDesigner.QDesignerWidgetBoxInterface.save?4() -> bool -QtDesigner.QDesignerContainerExtension?1() -QtDesigner.QDesignerContainerExtension.__init__?1(self) -QtDesigner.QDesignerContainerExtension.count?4() -> int -QtDesigner.QDesignerContainerExtension.widget?4(int) -> QWidget -QtDesigner.QDesignerContainerExtension.currentIndex?4() -> int -QtDesigner.QDesignerContainerExtension.setCurrentIndex?4(int) -QtDesigner.QDesignerContainerExtension.addWidget?4(QWidget) -QtDesigner.QDesignerContainerExtension.insertWidget?4(int, QWidget) -QtDesigner.QDesignerContainerExtension.remove?4(int) -QtDesigner.QDesignerContainerExtension.canAddWidget?4() -> bool -QtDesigner.QDesignerContainerExtension.canRemove?4(int) -> bool -QtDesigner.QDesignerCustomWidgetInterface?1() -QtDesigner.QDesignerCustomWidgetInterface.__init__?1(self) -QtDesigner.QDesignerCustomWidgetInterface?1(QDesignerCustomWidgetInterface) -QtDesigner.QDesignerCustomWidgetInterface.__init__?1(self, QDesignerCustomWidgetInterface) -QtDesigner.QDesignerCustomWidgetInterface.name?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.group?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.toolTip?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.whatsThis?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.includeFile?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.icon?4() -> QIcon -QtDesigner.QDesignerCustomWidgetInterface.isContainer?4() -> bool -QtDesigner.QDesignerCustomWidgetInterface.createWidget?4(QWidget) -> QWidget -QtDesigner.QDesignerCustomWidgetInterface.isInitialized?4() -> bool -QtDesigner.QDesignerCustomWidgetInterface.initialize?4(QDesignerFormEditorInterface) -QtDesigner.QDesignerCustomWidgetInterface.domXml?4() -> QString -QtDesigner.QDesignerCustomWidgetInterface.codeTemplate?4() -> QString -QtDesigner.QDesignerCustomWidgetCollectionInterface?1() -QtDesigner.QDesignerCustomWidgetCollectionInterface.__init__?1(self) -QtDesigner.QDesignerCustomWidgetCollectionInterface?1(QDesignerCustomWidgetCollectionInterface) -QtDesigner.QDesignerCustomWidgetCollectionInterface.__init__?1(self, QDesignerCustomWidgetCollectionInterface) -QtDesigner.QDesignerCustomWidgetCollectionInterface.customWidgets?4() -> unknown-type -QtDesigner.QAbstractExtensionFactory?1() -QtDesigner.QAbstractExtensionFactory.__init__?1(self) -QtDesigner.QAbstractExtensionFactory?1(QAbstractExtensionFactory) -QtDesigner.QAbstractExtensionFactory.__init__?1(self, QAbstractExtensionFactory) -QtDesigner.QAbstractExtensionFactory.extension?4(QObject, QString) -> QObject -QtDesigner.QExtensionFactory?1(QExtensionManager parent=None) -QtDesigner.QExtensionFactory.__init__?1(self, QExtensionManager parent=None) -QtDesigner.QExtensionFactory.extension?4(QObject, QString) -> QObject -QtDesigner.QExtensionFactory.extensionManager?4() -> QExtensionManager -QtDesigner.QExtensionFactory.createExtension?4(QObject, QString, QObject) -> QObject -QtDesigner.QAbstractExtensionManager?1() -QtDesigner.QAbstractExtensionManager.__init__?1(self) -QtDesigner.QAbstractExtensionManager?1(QAbstractExtensionManager) -QtDesigner.QAbstractExtensionManager.__init__?1(self, QAbstractExtensionManager) -QtDesigner.QAbstractExtensionManager.registerExtensions?4(QAbstractExtensionFactory, QString) -QtDesigner.QAbstractExtensionManager.unregisterExtensions?4(QAbstractExtensionFactory, QString) -QtDesigner.QAbstractExtensionManager.extension?4(QObject, QString) -> QObject -QtDesigner.QFormBuilder?1() -QtDesigner.QFormBuilder.__init__?1(self) -QtDesigner.QFormBuilder.pluginPaths?4() -> QStringList -QtDesigner.QFormBuilder.clearPluginPaths?4() -QtDesigner.QFormBuilder.addPluginPath?4(QString) -QtDesigner.QFormBuilder.setPluginPath?4(QStringList) -QtDesigner.QFormBuilder.customWidgets?4() -> unknown-type -QtDesigner.QDesignerMemberSheetExtension?1() -QtDesigner.QDesignerMemberSheetExtension.__init__?1(self) -QtDesigner.QDesignerMemberSheetExtension.count?4() -> int -QtDesigner.QDesignerMemberSheetExtension.indexOf?4(QString) -> int -QtDesigner.QDesignerMemberSheetExtension.memberName?4(int) -> QString -QtDesigner.QDesignerMemberSheetExtension.memberGroup?4(int) -> QString -QtDesigner.QDesignerMemberSheetExtension.setMemberGroup?4(int, QString) -QtDesigner.QDesignerMemberSheetExtension.isVisible?4(int) -> bool -QtDesigner.QDesignerMemberSheetExtension.setVisible?4(int, bool) -QtDesigner.QDesignerMemberSheetExtension.isSignal?4(int) -> bool -QtDesigner.QDesignerMemberSheetExtension.isSlot?4(int) -> bool -QtDesigner.QDesignerMemberSheetExtension.inheritedFromWidget?4(int) -> bool -QtDesigner.QDesignerMemberSheetExtension.declaredInClass?4(int) -> QString -QtDesigner.QDesignerMemberSheetExtension.signature?4(int) -> QString -QtDesigner.QDesignerMemberSheetExtension.parameterTypes?4(int) -> unknown-type -QtDesigner.QDesignerMemberSheetExtension.parameterNames?4(int) -> unknown-type -QtDesigner.QDesignerPropertySheetExtension?1() -QtDesigner.QDesignerPropertySheetExtension.__init__?1(self) -QtDesigner.QDesignerPropertySheetExtension.count?4() -> int -QtDesigner.QDesignerPropertySheetExtension.indexOf?4(QString) -> int -QtDesigner.QDesignerPropertySheetExtension.propertyName?4(int) -> QString -QtDesigner.QDesignerPropertySheetExtension.propertyGroup?4(int) -> QString -QtDesigner.QDesignerPropertySheetExtension.setPropertyGroup?4(int, QString) -QtDesigner.QDesignerPropertySheetExtension.hasReset?4(int) -> bool -QtDesigner.QDesignerPropertySheetExtension.reset?4(int) -> bool -QtDesigner.QDesignerPropertySheetExtension.isVisible?4(int) -> bool -QtDesigner.QDesignerPropertySheetExtension.setVisible?4(int, bool) -QtDesigner.QDesignerPropertySheetExtension.isAttribute?4(int) -> bool -QtDesigner.QDesignerPropertySheetExtension.setAttribute?4(int, bool) -QtDesigner.QDesignerPropertySheetExtension.property?4(int) -> QVariant -QtDesigner.QDesignerPropertySheetExtension.setProperty?4(int, QVariant) -QtDesigner.QDesignerPropertySheetExtension.isChanged?4(int) -> bool -QtDesigner.QDesignerPropertySheetExtension.setChanged?4(int, bool) -QtDesigner.QDesignerPropertySheetExtension.isEnabled?4(int) -> bool -QtDesigner.QExtensionManager?1(QObject parent=None) -QtDesigner.QExtensionManager.__init__?1(self, QObject parent=None) -QtDesigner.QExtensionManager.registerExtensions?4(QAbstractExtensionFactory, QString iid='') -QtDesigner.QExtensionManager.unregisterExtensions?4(QAbstractExtensionFactory, QString iid='') -QtDesigner.QExtensionManager.extension?4(QObject, QString) -> QObject -QtDesigner.QDesignerTaskMenuExtension?1() -QtDesigner.QDesignerTaskMenuExtension.__init__?1(self) -QtDesigner.QDesignerTaskMenuExtension.taskActions?4() -> unknown-type -QtDesigner.QDesignerTaskMenuExtension.preferredEditAction?4() -> QAction -QtDesigner.QPyDesignerCustomWidgetCollectionPlugin?1(QObject parent=None) -QtDesigner.QPyDesignerCustomWidgetCollectionPlugin.__init__?1(self, QObject parent=None) -QtDesigner.QPyDesignerCustomWidgetPlugin?1(QObject parent=None) -QtDesigner.QPyDesignerCustomWidgetPlugin.__init__?1(self, QObject parent=None) -QtDesigner.QPyDesignerMemberSheetExtension?1(QObject) -QtDesigner.QPyDesignerMemberSheetExtension.__init__?1(self, QObject) -QtDesigner.QPyDesignerPropertySheetExtension?1(QObject) -QtDesigner.QPyDesignerPropertySheetExtension.__init__?1(self, QObject) -QtDesigner.QPyDesignerTaskMenuExtension?1(QObject) -QtDesigner.QPyDesignerTaskMenuExtension.__init__?1(self, QObject) -QtDesigner.QPyDesignerContainerExtension?1(QObject) -QtDesigner.QPyDesignerContainerExtension.__init__?1(self, QObject) -QtHelp.QCompressedHelpInfo?1() -QtHelp.QCompressedHelpInfo.__init__?1(self) -QtHelp.QCompressedHelpInfo?1(QCompressedHelpInfo) -QtHelp.QCompressedHelpInfo.__init__?1(self, QCompressedHelpInfo) -QtHelp.QCompressedHelpInfo.swap?4(QCompressedHelpInfo) -QtHelp.QCompressedHelpInfo.namespaceName?4() -> QString -QtHelp.QCompressedHelpInfo.component?4() -> QString -QtHelp.QCompressedHelpInfo.version?4() -> QVersionNumber -QtHelp.QCompressedHelpInfo.fromCompressedHelpFile?4(QString) -> QCompressedHelpInfo -QtHelp.QCompressedHelpInfo.isNull?4() -> bool -QtHelp.QHelpContentItem.child?4(int) -> QHelpContentItem -QtHelp.QHelpContentItem.childCount?4() -> int -QtHelp.QHelpContentItem.title?4() -> QString -QtHelp.QHelpContentItem.url?4() -> QUrl -QtHelp.QHelpContentItem.row?4() -> int -QtHelp.QHelpContentItem.parent?4() -> QHelpContentItem -QtHelp.QHelpContentItem.childPosition?4(QHelpContentItem) -> int -QtHelp.QHelpContentModel.createContents?4(QString) -QtHelp.QHelpContentModel.contentItemAt?4(QModelIndex) -> QHelpContentItem -QtHelp.QHelpContentModel.data?4(QModelIndex, int) -> QVariant -QtHelp.QHelpContentModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtHelp.QHelpContentModel.parent?4(QModelIndex) -> QModelIndex -QtHelp.QHelpContentModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtHelp.QHelpContentModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtHelp.QHelpContentModel.isCreatingContents?4() -> bool -QtHelp.QHelpContentModel.contentsCreationStarted?4() -QtHelp.QHelpContentModel.contentsCreated?4() -QtHelp.QHelpContentWidget.indexOf?4(QUrl) -> QModelIndex -QtHelp.QHelpContentWidget.linkActivated?4(QUrl) -QtHelp.QHelpEngineCore?1(QString, QObject parent=None) -QtHelp.QHelpEngineCore.__init__?1(self, QString, QObject parent=None) -QtHelp.QHelpEngineCore.setupData?4() -> bool -QtHelp.QHelpEngineCore.collectionFile?4() -> QString -QtHelp.QHelpEngineCore.setCollectionFile?4(QString) -QtHelp.QHelpEngineCore.copyCollectionFile?4(QString) -> bool -QtHelp.QHelpEngineCore.namespaceName?4(QString) -> QString -QtHelp.QHelpEngineCore.registerDocumentation?4(QString) -> bool -QtHelp.QHelpEngineCore.unregisterDocumentation?4(QString) -> bool -QtHelp.QHelpEngineCore.documentationFileName?4(QString) -> QString -QtHelp.QHelpEngineCore.registeredDocumentations?4() -> QStringList -QtHelp.QHelpEngineCore.findFile?4(QUrl) -> QUrl -QtHelp.QHelpEngineCore.fileData?4(QUrl) -> QByteArray -QtHelp.QHelpEngineCore.removeCustomValue?4(QString) -> bool -QtHelp.QHelpEngineCore.customValue?4(QString, QVariant defaultValue=None) -> QVariant -QtHelp.QHelpEngineCore.setCustomValue?4(QString, QVariant) -> bool -QtHelp.QHelpEngineCore.metaData?4(QString, QString) -> QVariant -QtHelp.QHelpEngineCore.error?4() -> QString -QtHelp.QHelpEngineCore.autoSaveFilter?4() -> bool -QtHelp.QHelpEngineCore.setAutoSaveFilter?4(bool) -QtHelp.QHelpEngineCore.setupStarted?4() -QtHelp.QHelpEngineCore.setupFinished?4() -QtHelp.QHelpEngineCore.warning?4(QString) -QtHelp.QHelpEngineCore.filterEngine?4() -> QHelpFilterEngine -QtHelp.QHelpEngineCore.files?4(QString, QString, QString extensionFilter='') -> unknown-type -QtHelp.QHelpEngineCore.setUsesFilterEngine?4(bool) -QtHelp.QHelpEngineCore.usesFilterEngine?4() -> bool -QtHelp.QHelpEngineCore.documentsForIdentifier?4(QString) -> unknown-type -QtHelp.QHelpEngineCore.documentsForIdentifier?4(QString, QString) -> unknown-type -QtHelp.QHelpEngineCore.documentsForKeyword?4(QString) -> unknown-type -QtHelp.QHelpEngineCore.documentsForKeyword?4(QString, QString) -> unknown-type -QtHelp.QHelpEngineCore.isReadOnly?4() -> bool -QtHelp.QHelpEngineCore.setReadOnly?4(bool) -QtHelp.QHelpEngine?1(QString, QObject parent=None) -QtHelp.QHelpEngine.__init__?1(self, QString, QObject parent=None) -QtHelp.QHelpEngine.contentModel?4() -> QHelpContentModel -QtHelp.QHelpEngine.indexModel?4() -> QHelpIndexModel -QtHelp.QHelpEngine.contentWidget?4() -> QHelpContentWidget -QtHelp.QHelpEngine.indexWidget?4() -> QHelpIndexWidget -QtHelp.QHelpEngine.searchEngine?4() -> QHelpSearchEngine -QtHelp.QHelpFilterData?1() -QtHelp.QHelpFilterData.__init__?1(self) -QtHelp.QHelpFilterData?1(QHelpFilterData) -QtHelp.QHelpFilterData.__init__?1(self, QHelpFilterData) -QtHelp.QHelpFilterData.swap?4(QHelpFilterData) -QtHelp.QHelpFilterData.setComponents?4(QStringList) -QtHelp.QHelpFilterData.setVersions?4(unknown-type) -QtHelp.QHelpFilterData.components?4() -> QStringList -QtHelp.QHelpFilterData.versions?4() -> unknown-type -QtHelp.QHelpFilterEngine.namespaceToComponent?4() -> unknown-type -QtHelp.QHelpFilterEngine.namespaceToVersion?4() -> unknown-type -QtHelp.QHelpFilterEngine.filters?4() -> QStringList -QtHelp.QHelpFilterEngine.activeFilter?4() -> QString -QtHelp.QHelpFilterEngine.setActiveFilter?4(QString) -> bool -QtHelp.QHelpFilterEngine.availableComponents?4() -> QStringList -QtHelp.QHelpFilterEngine.filterData?4(QString) -> QHelpFilterData -QtHelp.QHelpFilterEngine.setFilterData?4(QString, QHelpFilterData) -> bool -QtHelp.QHelpFilterEngine.removeFilter?4(QString) -> bool -QtHelp.QHelpFilterEngine.namespacesForFilter?4(QString) -> QStringList -QtHelp.QHelpFilterEngine.filterActivated?4(QString) -QtHelp.QHelpFilterEngine.availableVersions?4() -> unknown-type -QtHelp.QHelpFilterEngine.indices?4() -> QStringList -QtHelp.QHelpFilterEngine.indices?4(QString) -> QStringList -QtHelp.QHelpFilterSettingsWidget?1(QWidget parent=None) -QtHelp.QHelpFilterSettingsWidget.__init__?1(self, QWidget parent=None) -QtHelp.QHelpFilterSettingsWidget.setAvailableComponents?4(QStringList) -QtHelp.QHelpFilterSettingsWidget.setAvailableVersions?4(unknown-type) -QtHelp.QHelpFilterSettingsWidget.readSettings?4(QHelpFilterEngine) -QtHelp.QHelpFilterSettingsWidget.applySettings?4(QHelpFilterEngine) -> bool -QtHelp.QHelpIndexModel.helpEngine?4() -> QHelpEngineCore -QtHelp.QHelpIndexModel.createIndex?4(QString) -QtHelp.QHelpIndexModel.filter?4(QString, QString wildcard='') -> QModelIndex -QtHelp.QHelpIndexModel.isCreatingIndex?4() -> bool -QtHelp.QHelpIndexModel.indexCreationStarted?4() -QtHelp.QHelpIndexModel.indexCreated?4() -QtHelp.QHelpIndexWidget.filterIndices?4(QString, QString wildcard='') -QtHelp.QHelpIndexWidget.activateCurrentItem?4() -QtHelp.QHelpIndexWidget.documentActivated?4(QHelpLink, QString) -QtHelp.QHelpIndexWidget.documentsActivated?4(unknown-type, QString) -QtHelp.QHelpLink.title?7 -QtHelp.QHelpLink.url?7 -QtHelp.QHelpLink?1() -QtHelp.QHelpLink.__init__?1(self) -QtHelp.QHelpLink?1(QHelpLink) -QtHelp.QHelpLink.__init__?1(self, QHelpLink) -QtHelp.QHelpSearchQuery.FieldName?10 -QtHelp.QHelpSearchQuery.FieldName.DEFAULT?10 -QtHelp.QHelpSearchQuery.FieldName.FUZZY?10 -QtHelp.QHelpSearchQuery.FieldName.WITHOUT?10 -QtHelp.QHelpSearchQuery.FieldName.PHRASE?10 -QtHelp.QHelpSearchQuery.FieldName.ALL?10 -QtHelp.QHelpSearchQuery.FieldName.ATLEAST?10 -QtHelp.QHelpSearchQuery?1() -QtHelp.QHelpSearchQuery.__init__?1(self) -QtHelp.QHelpSearchQuery?1(QHelpSearchQuery.FieldName, QStringList) -QtHelp.QHelpSearchQuery.__init__?1(self, QHelpSearchQuery.FieldName, QStringList) -QtHelp.QHelpSearchQuery?1(QHelpSearchQuery) -QtHelp.QHelpSearchQuery.__init__?1(self, QHelpSearchQuery) -QtHelp.QHelpSearchEngine?1(QHelpEngineCore, QObject parent=None) -QtHelp.QHelpSearchEngine.__init__?1(self, QHelpEngineCore, QObject parent=None) -QtHelp.QHelpSearchEngine.queryWidget?4() -> QHelpSearchQueryWidget -QtHelp.QHelpSearchEngine.resultWidget?4() -> QHelpSearchResultWidget -QtHelp.QHelpSearchEngine.reindexDocumentation?4() -QtHelp.QHelpSearchEngine.cancelIndexing?4() -QtHelp.QHelpSearchEngine.cancelSearching?4() -QtHelp.QHelpSearchEngine.indexingStarted?4() -QtHelp.QHelpSearchEngine.indexingFinished?4() -QtHelp.QHelpSearchEngine.searchingStarted?4() -QtHelp.QHelpSearchEngine.searchingFinished?4(int) -QtHelp.QHelpSearchEngine.searchResultCount?4() -> int -QtHelp.QHelpSearchEngine.searchResults?4(int, int) -> unknown-type -QtHelp.QHelpSearchEngine.searchInput?4() -> QString -QtHelp.QHelpSearchEngine.search?4(QString) -QtHelp.QHelpSearchResult?1() -QtHelp.QHelpSearchResult.__init__?1(self) -QtHelp.QHelpSearchResult?1(QHelpSearchResult) -QtHelp.QHelpSearchResult.__init__?1(self, QHelpSearchResult) -QtHelp.QHelpSearchResult?1(QUrl, QString, QString) -QtHelp.QHelpSearchResult.__init__?1(self, QUrl, QString, QString) -QtHelp.QHelpSearchResult.title?4() -> QString -QtHelp.QHelpSearchResult.url?4() -> QUrl -QtHelp.QHelpSearchResult.snippet?4() -> QString -QtHelp.QHelpSearchQueryWidget?1(QWidget parent=None) -QtHelp.QHelpSearchQueryWidget.__init__?1(self, QWidget parent=None) -QtHelp.QHelpSearchQueryWidget.expandExtendedSearch?4() -QtHelp.QHelpSearchQueryWidget.collapseExtendedSearch?4() -QtHelp.QHelpSearchQueryWidget.search?4() -QtHelp.QHelpSearchQueryWidget.isCompactMode?4() -> bool -QtHelp.QHelpSearchQueryWidget.setCompactMode?4(bool) -QtHelp.QHelpSearchQueryWidget.searchInput?4() -> QString -QtHelp.QHelpSearchQueryWidget.setSearchInput?4(QString) -QtHelp.QHelpSearchResultWidget.linkAt?4(QPoint) -> QUrl -QtHelp.QHelpSearchResultWidget.requestShowLink?4(QUrl) -QtOpenGL.QOpenGLBuffer.RangeAccessFlag?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeRead?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeWrite?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeInvalidate?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeInvalidateBuffer?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeFlushExplicit?10 -QtOpenGL.QOpenGLBuffer.RangeAccessFlag.RangeUnsynchronized?10 -QtOpenGL.QOpenGLBuffer.Access?10 -QtOpenGL.QOpenGLBuffer.Access.ReadOnly?10 -QtOpenGL.QOpenGLBuffer.Access.WriteOnly?10 -QtOpenGL.QOpenGLBuffer.Access.ReadWrite?10 -QtOpenGL.QOpenGLBuffer.UsagePattern?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StreamDraw?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StreamRead?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StreamCopy?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StaticDraw?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StaticRead?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.StaticCopy?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.DynamicDraw?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.DynamicRead?10 -QtOpenGL.QOpenGLBuffer.UsagePattern.DynamicCopy?10 -QtOpenGL.QOpenGLBuffer.Type?10 -QtOpenGL.QOpenGLBuffer.Type.VertexBuffer?10 -QtOpenGL.QOpenGLBuffer.Type.IndexBuffer?10 -QtOpenGL.QOpenGLBuffer.Type.PixelPackBuffer?10 -QtOpenGL.QOpenGLBuffer.Type.PixelUnpackBuffer?10 -QtOpenGL.QOpenGLBuffer?1() -QtOpenGL.QOpenGLBuffer.__init__?1(self) -QtOpenGL.QOpenGLBuffer?1(QOpenGLBuffer.Type) -QtOpenGL.QOpenGLBuffer.__init__?1(self, QOpenGLBuffer.Type) -QtOpenGL.QOpenGLBuffer?1(QOpenGLBuffer) -QtOpenGL.QOpenGLBuffer.__init__?1(self, QOpenGLBuffer) -QtOpenGL.QOpenGLBuffer.type?4() -> QOpenGLBuffer.Type -QtOpenGL.QOpenGLBuffer.usagePattern?4() -> QOpenGLBuffer.UsagePattern -QtOpenGL.QOpenGLBuffer.setUsagePattern?4(QOpenGLBuffer.UsagePattern) -QtOpenGL.QOpenGLBuffer.create?4() -> bool -QtOpenGL.QOpenGLBuffer.isCreated?4() -> bool -QtOpenGL.QOpenGLBuffer.destroy?4() -QtOpenGL.QOpenGLBuffer.bind?4() -> bool -QtOpenGL.QOpenGLBuffer.release?4() -QtOpenGL.QOpenGLBuffer.release?4(QOpenGLBuffer.Type) -QtOpenGL.QOpenGLBuffer.bufferId?4() -> int -QtOpenGL.QOpenGLBuffer.size?4() -> int -QtOpenGL.QOpenGLBuffer.read?4(int, PyQt6.sip.voidptr, int) -> bool -QtOpenGL.QOpenGLBuffer.write?4(int, PyQt6.sip.voidptr, int) -QtOpenGL.QOpenGLBuffer.allocate?4(PyQt6.sip.voidptr, int) -QtOpenGL.QOpenGLBuffer.allocate?4(int) -QtOpenGL.QOpenGLBuffer.map?4(QOpenGLBuffer.Access) -> PyQt6.sip.voidptr -QtOpenGL.QOpenGLBuffer.unmap?4() -> bool -QtOpenGL.QOpenGLBuffer.mapRange?4(int, int, unknown-type) -> PyQt6.sip.voidptr -QtOpenGL.QOpenGLBuffer.swap?4(QOpenGLBuffer) -QtOpenGL.QOpenGLDebugMessage.Severity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.InvalidSeverity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.HighSeverity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.MediumSeverity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.LowSeverity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.NotificationSeverity?10 -QtOpenGL.QOpenGLDebugMessage.Severity.AnySeverity?10 -QtOpenGL.QOpenGLDebugMessage.Type?10 -QtOpenGL.QOpenGLDebugMessage.Type.InvalidType?10 -QtOpenGL.QOpenGLDebugMessage.Type.ErrorType?10 -QtOpenGL.QOpenGLDebugMessage.Type.DeprecatedBehaviorType?10 -QtOpenGL.QOpenGLDebugMessage.Type.UndefinedBehaviorType?10 -QtOpenGL.QOpenGLDebugMessage.Type.PortabilityType?10 -QtOpenGL.QOpenGLDebugMessage.Type.PerformanceType?10 -QtOpenGL.QOpenGLDebugMessage.Type.OtherType?10 -QtOpenGL.QOpenGLDebugMessage.Type.MarkerType?10 -QtOpenGL.QOpenGLDebugMessage.Type.GroupPushType?10 -QtOpenGL.QOpenGLDebugMessage.Type.GroupPopType?10 -QtOpenGL.QOpenGLDebugMessage.Type.AnyType?10 -QtOpenGL.QOpenGLDebugMessage.Source?10 -QtOpenGL.QOpenGLDebugMessage.Source.InvalidSource?10 -QtOpenGL.QOpenGLDebugMessage.Source.APISource?10 -QtOpenGL.QOpenGLDebugMessage.Source.WindowSystemSource?10 -QtOpenGL.QOpenGLDebugMessage.Source.ShaderCompilerSource?10 -QtOpenGL.QOpenGLDebugMessage.Source.ThirdPartySource?10 -QtOpenGL.QOpenGLDebugMessage.Source.ApplicationSource?10 -QtOpenGL.QOpenGLDebugMessage.Source.OtherSource?10 -QtOpenGL.QOpenGLDebugMessage.Source.AnySource?10 -QtOpenGL.QOpenGLDebugMessage?1() -QtOpenGL.QOpenGLDebugMessage.__init__?1(self) -QtOpenGL.QOpenGLDebugMessage?1(QOpenGLDebugMessage) -QtOpenGL.QOpenGLDebugMessage.__init__?1(self, QOpenGLDebugMessage) -QtOpenGL.QOpenGLDebugMessage.swap?4(QOpenGLDebugMessage) -QtOpenGL.QOpenGLDebugMessage.source?4() -> QOpenGLDebugMessage.Source -QtOpenGL.QOpenGLDebugMessage.type?4() -> QOpenGLDebugMessage.Type -QtOpenGL.QOpenGLDebugMessage.severity?4() -> QOpenGLDebugMessage.Severity -QtOpenGL.QOpenGLDebugMessage.id?4() -> int -QtOpenGL.QOpenGLDebugMessage.message?4() -> QString -QtOpenGL.QOpenGLDebugMessage.createApplicationMessage?4(QString, int id=0, QOpenGLDebugMessage.Severity severity=QOpenGLDebugMessage.NotificationSeverity, QOpenGLDebugMessage.Type type=QOpenGLDebugMessage.OtherType) -> QOpenGLDebugMessage -QtOpenGL.QOpenGLDebugMessage.createThirdPartyMessage?4(QString, int id=0, QOpenGLDebugMessage.Severity severity=QOpenGLDebugMessage.NotificationSeverity, QOpenGLDebugMessage.Type type=QOpenGLDebugMessage.OtherType) -> QOpenGLDebugMessage -QtOpenGL.QOpenGLDebugLogger.LoggingMode?10 -QtOpenGL.QOpenGLDebugLogger.LoggingMode.AsynchronousLogging?10 -QtOpenGL.QOpenGLDebugLogger.LoggingMode.SynchronousLogging?10 -QtOpenGL.QOpenGLDebugLogger?1(QObject parent=None) -QtOpenGL.QOpenGLDebugLogger.__init__?1(self, QObject parent=None) -QtOpenGL.QOpenGLDebugLogger.initialize?4() -> bool -QtOpenGL.QOpenGLDebugLogger.isLogging?4() -> bool -QtOpenGL.QOpenGLDebugLogger.loggingMode?4() -> QOpenGLDebugLogger.LoggingMode -QtOpenGL.QOpenGLDebugLogger.maximumMessageLength?4() -> int -QtOpenGL.QOpenGLDebugLogger.pushGroup?4(QString, int id=0, QOpenGLDebugMessage.Source source=QOpenGLDebugMessage.ApplicationSource) -QtOpenGL.QOpenGLDebugLogger.popGroup?4() -QtOpenGL.QOpenGLDebugLogger.enableMessages?4(unknown-type sources=QOpenGLDebugMessage.AnySource, unknown-type types=QOpenGLDebugMessage.AnyType, unknown-type severities=QOpenGLDebugMessage.AnySeverity) -QtOpenGL.QOpenGLDebugLogger.enableMessages?4(unknown-type, unknown-type sources=QOpenGLDebugMessage.AnySource, unknown-type types=QOpenGLDebugMessage.AnyType) -QtOpenGL.QOpenGLDebugLogger.disableMessages?4(unknown-type sources=QOpenGLDebugMessage.AnySource, unknown-type types=QOpenGLDebugMessage.AnyType, unknown-type severities=QOpenGLDebugMessage.AnySeverity) -QtOpenGL.QOpenGLDebugLogger.disableMessages?4(unknown-type, unknown-type sources=QOpenGLDebugMessage.AnySource, unknown-type types=QOpenGLDebugMessage.AnyType) -QtOpenGL.QOpenGLDebugLogger.loggedMessages?4() -> unknown-type -QtOpenGL.QOpenGLDebugLogger.logMessage?4(QOpenGLDebugMessage) -QtOpenGL.QOpenGLDebugLogger.startLogging?4(QOpenGLDebugLogger.LoggingMode loggingMode=QOpenGLDebugLogger.AsynchronousLogging) -QtOpenGL.QOpenGLDebugLogger.stopLogging?4() -QtOpenGL.QOpenGLDebugLogger.messageLogged?4(QOpenGLDebugMessage) -QtOpenGL.QOpenGLFramebufferObject.FramebufferRestorePolicy?10 -QtOpenGL.QOpenGLFramebufferObject.FramebufferRestorePolicy.DontRestoreFramebufferBinding?10 -QtOpenGL.QOpenGLFramebufferObject.FramebufferRestorePolicy.RestoreFramebufferBindingToDefault?10 -QtOpenGL.QOpenGLFramebufferObject.FramebufferRestorePolicy.RestoreFrameBufferBinding?10 -QtOpenGL.QOpenGLFramebufferObject.Attachment?10 -QtOpenGL.QOpenGLFramebufferObject.Attachment.NoAttachment?10 -QtOpenGL.QOpenGLFramebufferObject.Attachment.CombinedDepthStencil?10 -QtOpenGL.QOpenGLFramebufferObject.Attachment.Depth?10 -QtOpenGL.QOpenGLFramebufferObject?1(QSize, int target=GL_TEXTURE_2D) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, QSize, int target=GL_TEXTURE_2D) -QtOpenGL.QOpenGLFramebufferObject?1(int, int, int target=GL_TEXTURE_2D) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, int, int, int target=GL_TEXTURE_2D) -QtOpenGL.QOpenGLFramebufferObject?1(QSize, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, QSize, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) -QtOpenGL.QOpenGLFramebufferObject?1(int, int, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, int, int, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) -QtOpenGL.QOpenGLFramebufferObject?1(QSize, QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, QSize, QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObject?1(int, int, QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObject.__init__?1(self, int, int, QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObject.format?4() -> QOpenGLFramebufferObjectFormat -QtOpenGL.QOpenGLFramebufferObject.isValid?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.isBound?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.bind?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.release?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.width?4() -> int -QtOpenGL.QOpenGLFramebufferObject.height?4() -> int -QtOpenGL.QOpenGLFramebufferObject.texture?4() -> int -QtOpenGL.QOpenGLFramebufferObject.textures?4() -> unknown-type -QtOpenGL.QOpenGLFramebufferObject.size?4() -> QSize -QtOpenGL.QOpenGLFramebufferObject.toImage?4(bool flipped=True) -> QImage -QtOpenGL.QOpenGLFramebufferObject.toImage?4(bool, int) -> QImage -QtOpenGL.QOpenGLFramebufferObject.attachment?4() -> QOpenGLFramebufferObject.Attachment -QtOpenGL.QOpenGLFramebufferObject.setAttachment?4(QOpenGLFramebufferObject.Attachment) -QtOpenGL.QOpenGLFramebufferObject.handle?4() -> int -QtOpenGL.QOpenGLFramebufferObject.bindDefault?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.hasOpenGLFramebufferObjects?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.hasOpenGLFramebufferBlit?4() -> bool -QtOpenGL.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int buffers=GL_COLOR_BUFFER_BIT, int filter=GL_NEAREST) -QtOpenGL.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QOpenGLFramebufferObject, int buffers=GL_COLOR_BUFFER_BIT, int filter=GL_NEAREST) -QtOpenGL.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int, int, int, int) -QtOpenGL.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int, int, int, int, QOpenGLFramebufferObject.FramebufferRestorePolicy) -QtOpenGL.QOpenGLFramebufferObject.takeTexture?4() -> int -QtOpenGL.QOpenGLFramebufferObject.takeTexture?4(int) -> int -QtOpenGL.QOpenGLFramebufferObject.addColorAttachment?4(QSize, int internal_format=0) -QtOpenGL.QOpenGLFramebufferObject.addColorAttachment?4(int, int, int internal_format=0) -QtOpenGL.QOpenGLFramebufferObject.sizes?4() -> unknown-type -QtOpenGL.QOpenGLFramebufferObjectFormat?1() -QtOpenGL.QOpenGLFramebufferObjectFormat.__init__?1(self) -QtOpenGL.QOpenGLFramebufferObjectFormat?1(QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObjectFormat.__init__?1(self, QOpenGLFramebufferObjectFormat) -QtOpenGL.QOpenGLFramebufferObjectFormat.setSamples?4(int) -QtOpenGL.QOpenGLFramebufferObjectFormat.samples?4() -> int -QtOpenGL.QOpenGLFramebufferObjectFormat.setMipmap?4(bool) -QtOpenGL.QOpenGLFramebufferObjectFormat.mipmap?4() -> bool -QtOpenGL.QOpenGLFramebufferObjectFormat.setAttachment?4(QOpenGLFramebufferObject.Attachment) -QtOpenGL.QOpenGLFramebufferObjectFormat.attachment?4() -> QOpenGLFramebufferObject.Attachment -QtOpenGL.QOpenGLFramebufferObjectFormat.setTextureTarget?4(int) -QtOpenGL.QOpenGLFramebufferObjectFormat.textureTarget?4() -> int -QtOpenGL.QOpenGLFramebufferObjectFormat.setInternalTextureFormat?4(int) -QtOpenGL.QOpenGLFramebufferObjectFormat.internalTextureFormat?4() -> int -QtOpenGL.QOpenGLPaintDevice?1() -QtOpenGL.QOpenGLPaintDevice.__init__?1(self) -QtOpenGL.QOpenGLPaintDevice?1(QSize) -QtOpenGL.QOpenGLPaintDevice.__init__?1(self, QSize) -QtOpenGL.QOpenGLPaintDevice?1(int, int) -QtOpenGL.QOpenGLPaintDevice.__init__?1(self, int, int) -QtOpenGL.QOpenGLPaintDevice.paintEngine?4() -> QPaintEngine -QtOpenGL.QOpenGLPaintDevice.context?4() -> QOpenGLContext -QtOpenGL.QOpenGLPaintDevice.size?4() -> QSize -QtOpenGL.QOpenGLPaintDevice.setSize?4(QSize) -QtOpenGL.QOpenGLPaintDevice.dotsPerMeterX?4() -> float -QtOpenGL.QOpenGLPaintDevice.dotsPerMeterY?4() -> float -QtOpenGL.QOpenGLPaintDevice.setDotsPerMeterX?4(float) -QtOpenGL.QOpenGLPaintDevice.setDotsPerMeterY?4(float) -QtOpenGL.QOpenGLPaintDevice.setPaintFlipped?4(bool) -QtOpenGL.QOpenGLPaintDevice.paintFlipped?4() -> bool -QtOpenGL.QOpenGLPaintDevice.ensureActiveTarget?4() -QtOpenGL.QOpenGLPaintDevice.setDevicePixelRatio?4(float) -QtOpenGL.QOpenGLPaintDevice.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtOpenGL.QOpenGLPixelTransferOptions?1() -QtOpenGL.QOpenGLPixelTransferOptions.__init__?1(self) -QtOpenGL.QOpenGLPixelTransferOptions?1(QOpenGLPixelTransferOptions) -QtOpenGL.QOpenGLPixelTransferOptions.__init__?1(self, QOpenGLPixelTransferOptions) -QtOpenGL.QOpenGLPixelTransferOptions.swap?4(QOpenGLPixelTransferOptions) -QtOpenGL.QOpenGLPixelTransferOptions.setAlignment?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.alignment?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setSkipImages?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.skipImages?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setSkipRows?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.skipRows?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setSkipPixels?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.skipPixels?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setImageHeight?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.imageHeight?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setRowLength?4(int) -QtOpenGL.QOpenGLPixelTransferOptions.rowLength?4() -> int -QtOpenGL.QOpenGLPixelTransferOptions.setLeastSignificantByteFirst?4(bool) -QtOpenGL.QOpenGLPixelTransferOptions.isLeastSignificantBitFirst?4() -> bool -QtOpenGL.QOpenGLPixelTransferOptions.setSwapBytesEnabled?4(bool) -QtOpenGL.QOpenGLPixelTransferOptions.isSwapBytesEnabled?4() -> bool -QtOpenGL.QOpenGLShader.ShaderTypeBit?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.Vertex?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.Fragment?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.Geometry?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.TessellationControl?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.TessellationEvaluation?10 -QtOpenGL.QOpenGLShader.ShaderTypeBit.Compute?10 -QtOpenGL.QOpenGLShader?1(unknown-type, QObject parent=None) -QtOpenGL.QOpenGLShader.__init__?1(self, unknown-type, QObject parent=None) -QtOpenGL.QOpenGLShader.shaderType?4() -> unknown-type -QtOpenGL.QOpenGLShader.compileSourceCode?4(QByteArray) -> bool -QtOpenGL.QOpenGLShader.compileSourceCode?4(QString) -> bool -QtOpenGL.QOpenGLShader.compileSourceFile?4(QString) -> bool -QtOpenGL.QOpenGLShader.sourceCode?4() -> QByteArray -QtOpenGL.QOpenGLShader.isCompiled?4() -> bool -QtOpenGL.QOpenGLShader.log?4() -> QString -QtOpenGL.QOpenGLShader.shaderId?4() -> int -QtOpenGL.QOpenGLShader.hasOpenGLShaders?4(unknown-type, QOpenGLContext context=None) -> bool -QtOpenGL.QOpenGLShaderProgram?1(QObject parent=None) -QtOpenGL.QOpenGLShaderProgram.__init__?1(self, QObject parent=None) -QtOpenGL.QOpenGLShaderProgram.addShader?4(QOpenGLShader) -> bool -QtOpenGL.QOpenGLShaderProgram.removeShader?4(QOpenGLShader) -QtOpenGL.QOpenGLShaderProgram.shaders?4() -> unknown-type -QtOpenGL.QOpenGLShaderProgram.addShaderFromSourceCode?4(unknown-type, QByteArray) -> bool -QtOpenGL.QOpenGLShaderProgram.addShaderFromSourceCode?4(unknown-type, QString) -> bool -QtOpenGL.QOpenGLShaderProgram.addShaderFromSourceFile?4(unknown-type, QString) -> bool -QtOpenGL.QOpenGLShaderProgram.removeAllShaders?4() -QtOpenGL.QOpenGLShaderProgram.link?4() -> bool -QtOpenGL.QOpenGLShaderProgram.isLinked?4() -> bool -QtOpenGL.QOpenGLShaderProgram.log?4() -> QString -QtOpenGL.QOpenGLShaderProgram.bind?4() -> bool -QtOpenGL.QOpenGLShaderProgram.release?4() -QtOpenGL.QOpenGLShaderProgram.programId?4() -> int -QtOpenGL.QOpenGLShaderProgram.bindAttributeLocation?4(QByteArray, int) -QtOpenGL.QOpenGLShaderProgram.bindAttributeLocation?4(QString, int) -QtOpenGL.QOpenGLShaderProgram.attributeLocation?4(QByteArray) -> int -QtOpenGL.QOpenGLShaderProgram.attributeLocation?4(QString) -> int -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, float, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, QVector2D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, QVector3D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, QVector4D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(int, QColor) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, float, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, QVector2D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, QVector3D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, QVector4D) -QtOpenGL.QOpenGLShaderProgram.setAttributeValue?4(str, QColor) -QtOpenGL.QOpenGLShaderProgram.setAttributeArray?4(int, Any) -QtOpenGL.QOpenGLShaderProgram.setAttributeArray?4(str, Any) -QtOpenGL.QOpenGLShaderProgram.setAttributeBuffer?4(int, int, int, int, int stride=0) -QtOpenGL.QOpenGLShaderProgram.setAttributeBuffer?4(str, int, int, int, int stride=0) -QtOpenGL.QOpenGLShaderProgram.enableAttributeArray?4(int) -QtOpenGL.QOpenGLShaderProgram.enableAttributeArray?4(str) -QtOpenGL.QOpenGLShaderProgram.disableAttributeArray?4(int) -QtOpenGL.QOpenGLShaderProgram.disableAttributeArray?4(str) -QtOpenGL.QOpenGLShaderProgram.uniformLocation?4(QByteArray) -> int -QtOpenGL.QOpenGLShaderProgram.uniformLocation?4(QString) -> int -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, int) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, float, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QVector2D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QVector3D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QVector4D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QColor) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QPoint) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QPointF) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QSize) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QSizeF) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(int, QTransform) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, int) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, float, float, float, float) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QVector2D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QVector3D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QVector4D) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QColor) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QPoint) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QPointF) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QSize) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QSizeF) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x2) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x3) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x4) -QtOpenGL.QOpenGLShaderProgram.setUniformValue?4(str, QTransform) -QtOpenGL.QOpenGLShaderProgram.setUniformValueArray?4(int, Any) -QtOpenGL.QOpenGLShaderProgram.setUniformValueArray?4(str, Any) -QtOpenGL.QOpenGLShaderProgram.hasOpenGLShaderPrograms?4(QOpenGLContext context=None) -> bool -QtOpenGL.QOpenGLShaderProgram.maxGeometryOutputVertices?4() -> int -QtOpenGL.QOpenGLShaderProgram.setPatchVertexCount?4(int) -QtOpenGL.QOpenGLShaderProgram.patchVertexCount?4() -> int -QtOpenGL.QOpenGLShaderProgram.setDefaultOuterTessellationLevels?4(unknown-type) -QtOpenGL.QOpenGLShaderProgram.defaultOuterTessellationLevels?4() -> unknown-type -QtOpenGL.QOpenGLShaderProgram.setDefaultInnerTessellationLevels?4(unknown-type) -QtOpenGL.QOpenGLShaderProgram.defaultInnerTessellationLevels?4() -> unknown-type -QtOpenGL.QOpenGLShaderProgram.create?4() -> bool -QtOpenGL.QOpenGLShaderProgram.addCacheableShaderFromSourceCode?4(unknown-type, QByteArray) -> bool -QtOpenGL.QOpenGLShaderProgram.addCacheableShaderFromSourceCode?4(unknown-type, QString) -> bool -QtOpenGL.QOpenGLShaderProgram.addCacheableShaderFromSourceFile?4(unknown-type, QString) -> bool -QtOpenGL.QOpenGLTexture.ComparisonMode?10 -QtOpenGL.QOpenGLTexture.ComparisonMode.CompareRefToTexture?10 -QtOpenGL.QOpenGLTexture.ComparisonMode.CompareNone?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareLessEqual?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareGreaterEqual?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareLess?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareGreater?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareEqual?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CommpareNotEqual?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareAlways?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareNever?10 -QtOpenGL.QOpenGLTexture.ComparisonFunction.CompareNotEqual?10 -QtOpenGL.QOpenGLTexture.CoordinateDirection?10 -QtOpenGL.QOpenGLTexture.CoordinateDirection.DirectionS?10 -QtOpenGL.QOpenGLTexture.CoordinateDirection.DirectionT?10 -QtOpenGL.QOpenGLTexture.CoordinateDirection.DirectionR?10 -QtOpenGL.QOpenGLTexture.WrapMode?10 -QtOpenGL.QOpenGLTexture.WrapMode.Repeat?10 -QtOpenGL.QOpenGLTexture.WrapMode.MirroredRepeat?10 -QtOpenGL.QOpenGLTexture.WrapMode.ClampToEdge?10 -QtOpenGL.QOpenGLTexture.WrapMode.ClampToBorder?10 -QtOpenGL.QOpenGLTexture.Filter?10 -QtOpenGL.QOpenGLTexture.Filter.Nearest?10 -QtOpenGL.QOpenGLTexture.Filter.Linear?10 -QtOpenGL.QOpenGLTexture.Filter.NearestMipMapNearest?10 -QtOpenGL.QOpenGLTexture.Filter.NearestMipMapLinear?10 -QtOpenGL.QOpenGLTexture.Filter.LinearMipMapNearest?10 -QtOpenGL.QOpenGLTexture.Filter.LinearMipMapLinear?10 -QtOpenGL.QOpenGLTexture.DepthStencilMode?10 -QtOpenGL.QOpenGLTexture.DepthStencilMode.DepthMode?10 -QtOpenGL.QOpenGLTexture.DepthStencilMode.StencilMode?10 -QtOpenGL.QOpenGLTexture.SwizzleValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.RedValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.GreenValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.BlueValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.AlphaValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.ZeroValue?10 -QtOpenGL.QOpenGLTexture.SwizzleValue.OneValue?10 -QtOpenGL.QOpenGLTexture.SwizzleComponent?10 -QtOpenGL.QOpenGLTexture.SwizzleComponent.SwizzleRed?10 -QtOpenGL.QOpenGLTexture.SwizzleComponent.SwizzleGreen?10 -QtOpenGL.QOpenGLTexture.SwizzleComponent.SwizzleBlue?10 -QtOpenGL.QOpenGLTexture.SwizzleComponent.SwizzleAlpha?10 -QtOpenGL.QOpenGLTexture.Feature?10 -QtOpenGL.QOpenGLTexture.Feature.ImmutableStorage?10 -QtOpenGL.QOpenGLTexture.Feature.ImmutableMultisampleStorage?10 -QtOpenGL.QOpenGLTexture.Feature.TextureRectangle?10 -QtOpenGL.QOpenGLTexture.Feature.TextureArrays?10 -QtOpenGL.QOpenGLTexture.Feature.Texture3D?10 -QtOpenGL.QOpenGLTexture.Feature.TextureMultisample?10 -QtOpenGL.QOpenGLTexture.Feature.TextureBuffer?10 -QtOpenGL.QOpenGLTexture.Feature.TextureCubeMapArrays?10 -QtOpenGL.QOpenGLTexture.Feature.Swizzle?10 -QtOpenGL.QOpenGLTexture.Feature.StencilTexturing?10 -QtOpenGL.QOpenGLTexture.Feature.AnisotropicFiltering?10 -QtOpenGL.QOpenGLTexture.Feature.NPOTTextures?10 -QtOpenGL.QOpenGLTexture.Feature.NPOTTextureRepeat?10 -QtOpenGL.QOpenGLTexture.Feature.Texture1D?10 -QtOpenGL.QOpenGLTexture.Feature.TextureComparisonOperators?10 -QtOpenGL.QOpenGLTexture.Feature.TextureMipMapLevel?10 -QtOpenGL.QOpenGLTexture.PixelType?10 -QtOpenGL.QOpenGLTexture.PixelType.NoPixelType?10 -QtOpenGL.QOpenGLTexture.PixelType.Int8?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt8?10 -QtOpenGL.QOpenGLTexture.PixelType.Int16?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16?10 -QtOpenGL.QOpenGLTexture.PixelType.Int32?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32?10 -QtOpenGL.QOpenGLTexture.PixelType.Float16?10 -QtOpenGL.QOpenGLTexture.PixelType.Float16OES?10 -QtOpenGL.QOpenGLTexture.PixelType.Float32?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RGB9_E5?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RG11B10F?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt8_RG3B2?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt8_RG3B2_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_RGB5A1?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_RGB5A1_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_R5G6B5?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_R5G6B5_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_RGBA4?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt16_RGBA4_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RGB10A2?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RGB10A2_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RGBA8?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_RGBA8_Rev?10 -QtOpenGL.QOpenGLTexture.PixelType.UInt32_D24S8?10 -QtOpenGL.QOpenGLTexture.PixelType.Float32_D32_UInt32_S8_X24?10 -QtOpenGL.QOpenGLTexture.PixelFormat?10 -QtOpenGL.QOpenGLTexture.PixelFormat.NoSourceFormat?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Red?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RG?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RGB?10 -QtOpenGL.QOpenGLTexture.PixelFormat.BGR?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RGBA?10 -QtOpenGL.QOpenGLTexture.PixelFormat.BGRA?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Red_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RG_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RGB_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.BGR_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.RGBA_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.BGRA_Integer?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Depth?10 -QtOpenGL.QOpenGLTexture.PixelFormat.DepthStencil?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Alpha?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Luminance?10 -QtOpenGL.QOpenGLTexture.PixelFormat.LuminanceAlpha?10 -QtOpenGL.QOpenGLTexture.PixelFormat.Stencil?10 -QtOpenGL.QOpenGLTexture.CubeMapFace?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapPositiveX?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapNegativeX?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapPositiveY?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapNegativeY?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapPositiveZ?10 -QtOpenGL.QOpenGLTexture.CubeMapFace.CubeMapNegativeZ?10 -QtOpenGL.QOpenGLTexture.TextureFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.NoFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R8_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG8_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA8_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R16_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG16_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB16_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA16_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R8_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG8_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA8_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R16_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG16_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB16_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA16_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R8U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG8U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA8U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R16U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG16U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB16U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA16U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R32U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG32U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB32U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA32U?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R8I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG8I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA8I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R16I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG16I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB16I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA16I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R32I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG32I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB32I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA32I?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R16F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG16F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB16F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA16F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R32F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG32F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB32F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA32F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB9E5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG11B10F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG3B2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R5G6B5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB5A1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA4?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB10A2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D16?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D24?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D24S8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D32?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D32F?10 -QtOpenGL.QOpenGLTexture.TextureFormat.D32FS8X24?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB_DXT1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_DXT1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_DXT3?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_DXT5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R_ATI1N_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R_ATI1N_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG_ATI2N_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG_ATI2N_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB_BP_UNSIGNED_FLOAT?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB_BP_SIGNED_FLOAT?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB_BP_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB_DXT1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT3?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB_BP_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.DepthFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.AlphaFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBAFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.LuminanceFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.LuminanceAlphaFormat?10 -QtOpenGL.QOpenGLTexture.TextureFormat.S8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R11_EAC_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.R11_EAC_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG11_EAC_UNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RG11_EAC_SNorm?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8_ETC2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_ETC2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8_PunchThrough_Alpha1_ETC2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_PunchThrough_Alpha1_ETC2?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA8_ETC2_EAC?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ETC2_EAC?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGB8_ETC1?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_4x4?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_5x4?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_5x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_6x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_6x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x10?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_12x10?10 -QtOpenGL.QOpenGLTexture.TextureFormat.RGBA_ASTC_12x12?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_4x4?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_5x4?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_5x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_6x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_6x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x5?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x6?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x8?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x10?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_12x10?10 -QtOpenGL.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_12x12?10 -QtOpenGL.QOpenGLTexture.TextureUnitReset?10 -QtOpenGL.QOpenGLTexture.TextureUnitReset.ResetTextureUnit?10 -QtOpenGL.QOpenGLTexture.TextureUnitReset.DontResetTextureUnit?10 -QtOpenGL.QOpenGLTexture.MipMapGeneration?10 -QtOpenGL.QOpenGLTexture.MipMapGeneration.GenerateMipMaps?10 -QtOpenGL.QOpenGLTexture.MipMapGeneration.DontGenerateMipMaps?10 -QtOpenGL.QOpenGLTexture.BindingTarget?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget1D?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget1DArray?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget2D?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget2DArray?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget3D?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTargetCubeMap?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTargetCubeMapArray?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget2DMultisample?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTarget2DMultisampleArray?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTargetRectangle?10 -QtOpenGL.QOpenGLTexture.BindingTarget.BindingTargetBuffer?10 -QtOpenGL.QOpenGLTexture.Target?10 -QtOpenGL.QOpenGLTexture.Target.Target1D?10 -QtOpenGL.QOpenGLTexture.Target.Target1DArray?10 -QtOpenGL.QOpenGLTexture.Target.Target2D?10 -QtOpenGL.QOpenGLTexture.Target.Target2DArray?10 -QtOpenGL.QOpenGLTexture.Target.Target3D?10 -QtOpenGL.QOpenGLTexture.Target.TargetCubeMap?10 -QtOpenGL.QOpenGLTexture.Target.TargetCubeMapArray?10 -QtOpenGL.QOpenGLTexture.Target.Target2DMultisample?10 -QtOpenGL.QOpenGLTexture.Target.Target2DMultisampleArray?10 -QtOpenGL.QOpenGLTexture.Target.TargetRectangle?10 -QtOpenGL.QOpenGLTexture.Target.TargetBuffer?10 -QtOpenGL.QOpenGLTexture?1(QOpenGLTexture.Target) -QtOpenGL.QOpenGLTexture.__init__?1(self, QOpenGLTexture.Target) -QtOpenGL.QOpenGLTexture?1(QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) -QtOpenGL.QOpenGLTexture.__init__?1(self, QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) -QtOpenGL.QOpenGLTexture.create?4() -> bool -QtOpenGL.QOpenGLTexture.destroy?4() -QtOpenGL.QOpenGLTexture.isCreated?4() -> bool -QtOpenGL.QOpenGLTexture.textureId?4() -> int -QtOpenGL.QOpenGLTexture.bind?4() -QtOpenGL.QOpenGLTexture.bind?4(int, QOpenGLTexture.TextureUnitReset reset=QOpenGLTexture.DontResetTextureUnit) -QtOpenGL.QOpenGLTexture.release?4() -QtOpenGL.QOpenGLTexture.release?4(int, QOpenGLTexture.TextureUnitReset reset=QOpenGLTexture.DontResetTextureUnit) -QtOpenGL.QOpenGLTexture.isBound?4() -> bool -QtOpenGL.QOpenGLTexture.isBound?4(int) -> bool -QtOpenGL.QOpenGLTexture.boundTextureId?4(QOpenGLTexture.BindingTarget) -> int -QtOpenGL.QOpenGLTexture.boundTextureId?4(int, QOpenGLTexture.BindingTarget) -> int -QtOpenGL.QOpenGLTexture.setFormat?4(QOpenGLTexture.TextureFormat) -QtOpenGL.QOpenGLTexture.format?4() -> QOpenGLTexture.TextureFormat -QtOpenGL.QOpenGLTexture.setSize?4(int, int height=1, int depth=1) -QtOpenGL.QOpenGLTexture.width?4() -> int -QtOpenGL.QOpenGLTexture.height?4() -> int -QtOpenGL.QOpenGLTexture.depth?4() -> int -QtOpenGL.QOpenGLTexture.setMipLevels?4(int) -QtOpenGL.QOpenGLTexture.mipLevels?4() -> int -QtOpenGL.QOpenGLTexture.maximumMipLevels?4() -> int -QtOpenGL.QOpenGLTexture.setLayers?4(int) -QtOpenGL.QOpenGLTexture.layers?4() -> int -QtOpenGL.QOpenGLTexture.faces?4() -> int -QtOpenGL.QOpenGLTexture.allocateStorage?4() -QtOpenGL.QOpenGLTexture.allocateStorage?4(QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType) -QtOpenGL.QOpenGLTexture.isStorageAllocated?4() -> bool -QtOpenGL.QOpenGLTexture.createTextureView?4(QOpenGLTexture.Target, QOpenGLTexture.TextureFormat, int, int, int, int) -> QOpenGLTexture -QtOpenGL.QOpenGLTexture.isTextureView?4() -> bool -QtOpenGL.QOpenGLTexture.setData?4(int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) -QtOpenGL.QOpenGLTexture.setCompressedData?4(int, int, QOpenGLTexture.CubeMapFace, int, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setCompressedData?4(int, int, int, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setCompressedData?4(int, int, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setCompressedData?4(int, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.hasFeature?4(QOpenGLTexture.Feature) -> bool -QtOpenGL.QOpenGLTexture.setMipBaseLevel?4(int) -QtOpenGL.QOpenGLTexture.mipBaseLevel?4() -> int -QtOpenGL.QOpenGLTexture.setMipMaxLevel?4(int) -QtOpenGL.QOpenGLTexture.mipMaxLevel?4() -> int -QtOpenGL.QOpenGLTexture.setMipLevelRange?4(int, int) -QtOpenGL.QOpenGLTexture.mipLevelRange?4() -> unknown-type -QtOpenGL.QOpenGLTexture.setAutoMipMapGenerationEnabled?4(bool) -QtOpenGL.QOpenGLTexture.isAutoMipMapGenerationEnabled?4() -> bool -QtOpenGL.QOpenGLTexture.generateMipMaps?4() -QtOpenGL.QOpenGLTexture.generateMipMaps?4(int, bool resetBaseLevel=True) -QtOpenGL.QOpenGLTexture.setSwizzleMask?4(QOpenGLTexture.SwizzleComponent, QOpenGLTexture.SwizzleValue) -QtOpenGL.QOpenGLTexture.setSwizzleMask?4(QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue) -QtOpenGL.QOpenGLTexture.swizzleMask?4(QOpenGLTexture.SwizzleComponent) -> QOpenGLTexture.SwizzleValue -QtOpenGL.QOpenGLTexture.setDepthStencilMode?4(QOpenGLTexture.DepthStencilMode) -QtOpenGL.QOpenGLTexture.depthStencilMode?4() -> QOpenGLTexture.DepthStencilMode -QtOpenGL.QOpenGLTexture.setMinificationFilter?4(QOpenGLTexture.Filter) -QtOpenGL.QOpenGLTexture.minificationFilter?4() -> QOpenGLTexture.Filter -QtOpenGL.QOpenGLTexture.setMagnificationFilter?4(QOpenGLTexture.Filter) -QtOpenGL.QOpenGLTexture.magnificationFilter?4() -> QOpenGLTexture.Filter -QtOpenGL.QOpenGLTexture.setMinMagFilters?4(QOpenGLTexture.Filter, QOpenGLTexture.Filter) -QtOpenGL.QOpenGLTexture.minMagFilters?4() -> unknown-type -QtOpenGL.QOpenGLTexture.setMaximumAnisotropy?4(float) -QtOpenGL.QOpenGLTexture.maximumAnisotropy?4() -> float -QtOpenGL.QOpenGLTexture.setWrapMode?4(QOpenGLTexture.WrapMode) -QtOpenGL.QOpenGLTexture.setWrapMode?4(QOpenGLTexture.CoordinateDirection, QOpenGLTexture.WrapMode) -QtOpenGL.QOpenGLTexture.wrapMode?4(QOpenGLTexture.CoordinateDirection) -> QOpenGLTexture.WrapMode -QtOpenGL.QOpenGLTexture.setBorderColor?4(QColor) -QtOpenGL.QOpenGLTexture.borderColor?4() -> QColor -QtOpenGL.QOpenGLTexture.setMinimumLevelOfDetail?4(float) -QtOpenGL.QOpenGLTexture.minimumLevelOfDetail?4() -> float -QtOpenGL.QOpenGLTexture.setMaximumLevelOfDetail?4(float) -QtOpenGL.QOpenGLTexture.maximumLevelOfDetail?4() -> float -QtOpenGL.QOpenGLTexture.setLevelOfDetailRange?4(float, float) -QtOpenGL.QOpenGLTexture.levelOfDetailRange?4() -> unknown-type -QtOpenGL.QOpenGLTexture.setLevelofDetailBias?4(float) -QtOpenGL.QOpenGLTexture.levelofDetailBias?4() -> float -QtOpenGL.QOpenGLTexture.target?4() -> QOpenGLTexture.Target -QtOpenGL.QOpenGLTexture.setSamples?4(int) -QtOpenGL.QOpenGLTexture.samples?4() -> int -QtOpenGL.QOpenGLTexture.setFixedSamplePositions?4(bool) -QtOpenGL.QOpenGLTexture.isFixedSamplePositions?4() -> bool -QtOpenGL.QOpenGLTexture.setComparisonFunction?4(QOpenGLTexture.ComparisonFunction) -QtOpenGL.QOpenGLTexture.comparisonFunction?4() -> QOpenGLTexture.ComparisonFunction -QtOpenGL.QOpenGLTexture.setComparisonMode?4(QOpenGLTexture.ComparisonMode) -QtOpenGL.QOpenGLTexture.comparisonMode?4() -> QOpenGLTexture.ComparisonMode -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setCompressedData?4(int, int, int, QOpenGLTexture.CubeMapFace, int, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.CubeMapFace, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt6.sip.voidptr, QOpenGLPixelTransferOptions options=None) -QtOpenGL.QOpenGLTextureBlitter.Origin?10 -QtOpenGL.QOpenGLTextureBlitter.Origin.OriginBottomLeft?10 -QtOpenGL.QOpenGLTextureBlitter.Origin.OriginTopLeft?10 -QtOpenGL.QOpenGLTextureBlitter?1() -QtOpenGL.QOpenGLTextureBlitter.__init__?1(self) -QtOpenGL.QOpenGLTextureBlitter.create?4() -> bool -QtOpenGL.QOpenGLTextureBlitter.isCreated?4() -> bool -QtOpenGL.QOpenGLTextureBlitter.destroy?4() -QtOpenGL.QOpenGLTextureBlitter.supportsExternalOESTarget?4() -> bool -QtOpenGL.QOpenGLTextureBlitter.bind?4(int target=GL_TEXTURE_2D) -QtOpenGL.QOpenGLTextureBlitter.release?4() -QtOpenGL.QOpenGLTextureBlitter.setRedBlueSwizzle?4(bool) -QtOpenGL.QOpenGLTextureBlitter.setOpacity?4(float) -QtOpenGL.QOpenGLTextureBlitter.blit?4(int, QMatrix4x4, QOpenGLTextureBlitter.Origin) -QtOpenGL.QOpenGLTextureBlitter.blit?4(int, QMatrix4x4, QMatrix3x3) -QtOpenGL.QOpenGLTextureBlitter.targetTransform?4(QRectF, QRect) -> QMatrix4x4 -QtOpenGL.QOpenGLTextureBlitter.sourceTransform?4(QRectF, QSize, QOpenGLTextureBlitter.Origin) -> QMatrix3x3 -QtOpenGL.QOpenGLTextureBlitter.supportsRectangleTarget?4() -> bool -QtOpenGL.QOpenGLTimerQuery?1(QObject parent=None) -QtOpenGL.QOpenGLTimerQuery.__init__?1(self, QObject parent=None) -QtOpenGL.QOpenGLTimerQuery.create?4() -> bool -QtOpenGL.QOpenGLTimerQuery.destroy?4() -QtOpenGL.QOpenGLTimerQuery.isCreated?4() -> bool -QtOpenGL.QOpenGLTimerQuery.objectId?4() -> int -QtOpenGL.QOpenGLTimerQuery.begin?4() -QtOpenGL.QOpenGLTimerQuery.end?4() -QtOpenGL.QOpenGLTimerQuery.waitForTimestamp?4() -> int -QtOpenGL.QOpenGLTimerQuery.recordTimestamp?4() -QtOpenGL.QOpenGLTimerQuery.isResultAvailable?4() -> bool -QtOpenGL.QOpenGLTimerQuery.waitForResult?4() -> int -QtOpenGL.QOpenGLTimeMonitor?1(QObject parent=None) -QtOpenGL.QOpenGLTimeMonitor.__init__?1(self, QObject parent=None) -QtOpenGL.QOpenGLTimeMonitor.setSampleCount?4(int) -QtOpenGL.QOpenGLTimeMonitor.sampleCount?4() -> int -QtOpenGL.QOpenGLTimeMonitor.create?4() -> bool -QtOpenGL.QOpenGLTimeMonitor.destroy?4() -QtOpenGL.QOpenGLTimeMonitor.isCreated?4() -> bool -QtOpenGL.QOpenGLTimeMonitor.objectIds?4() -> unknown-type -QtOpenGL.QOpenGLTimeMonitor.recordSample?4() -> int -QtOpenGL.QOpenGLTimeMonitor.isResultAvailable?4() -> bool -QtOpenGL.QOpenGLTimeMonitor.waitForSamples?4() -> unknown-type -QtOpenGL.QOpenGLTimeMonitor.waitForIntervals?4() -> unknown-type -QtOpenGL.QOpenGLTimeMonitor.reset?4() -QtOpenGL.QOpenGLVersionFunctionsFactory?1() -QtOpenGL.QOpenGLVersionFunctionsFactory.__init__?1(self) -QtOpenGL.QOpenGLVersionFunctionsFactory?1(QOpenGLVersionFunctionsFactory) -QtOpenGL.QOpenGLVersionFunctionsFactory.__init__?1(self, QOpenGLVersionFunctionsFactory) -QtOpenGL.QOpenGLVersionFunctionsFactory.get?4(QOpenGLVersionProfile versionProfile=QOpenGLVersionProfile(), QOpenGLContext context=None) -> Any -QtOpenGL.QOpenGLVertexArrayObject?1(QObject parent=None) -QtOpenGL.QOpenGLVertexArrayObject.__init__?1(self, QObject parent=None) -QtOpenGL.QOpenGLVertexArrayObject.create?4() -> bool -QtOpenGL.QOpenGLVertexArrayObject.destroy?4() -QtOpenGL.QOpenGLVertexArrayObject.isCreated?4() -> bool -QtOpenGL.QOpenGLVertexArrayObject.objectId?4() -> int -QtOpenGL.QOpenGLVertexArrayObject.bind?4() -QtOpenGL.QOpenGLVertexArrayObject.release?4() -QtOpenGL.QOpenGLVertexArrayObject.Binder?1(QOpenGLVertexArrayObject) -QtOpenGL.QOpenGLVertexArrayObject.Binder.__init__?1(self, QOpenGLVertexArrayObject) -QtOpenGL.QOpenGLVertexArrayObject.Binder.release?4() -QtOpenGL.QOpenGLVertexArrayObject.Binder.rebind?4() -QtOpenGL.QOpenGLVertexArrayObject.Binder.__enter__?4() -> Any -QtOpenGL.QOpenGLVertexArrayObject.Binder.__exit__?4(Any, Any, Any) -QtOpenGL.QOpenGLWindow.UpdateBehavior?10 -QtOpenGL.QOpenGLWindow.UpdateBehavior.NoPartialUpdate?10 -QtOpenGL.QOpenGLWindow.UpdateBehavior.PartialUpdateBlit?10 -QtOpenGL.QOpenGLWindow.UpdateBehavior.PartialUpdateBlend?10 -QtOpenGL.QOpenGLWindow?1(QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) -QtOpenGL.QOpenGLWindow.__init__?1(self, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) -QtOpenGL.QOpenGLWindow?1(QOpenGLContext, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) -QtOpenGL.QOpenGLWindow.__init__?1(self, QOpenGLContext, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) -QtOpenGL.QOpenGLWindow.updateBehavior?4() -> QOpenGLWindow.UpdateBehavior -QtOpenGL.QOpenGLWindow.isValid?4() -> bool -QtOpenGL.QOpenGLWindow.makeCurrent?4() -QtOpenGL.QOpenGLWindow.doneCurrent?4() -QtOpenGL.QOpenGLWindow.context?4() -> QOpenGLContext -QtOpenGL.QOpenGLWindow.defaultFramebufferObject?4() -> int -QtOpenGL.QOpenGLWindow.grabFramebuffer?4() -> QImage -QtOpenGL.QOpenGLWindow.shareContext?4() -> QOpenGLContext -QtOpenGL.QOpenGLWindow.frameSwapped?4() -QtOpenGL.QOpenGLWindow.initializeGL?4() -QtOpenGL.QOpenGLWindow.resizeGL?4(int, int) -QtOpenGL.QOpenGLWindow.paintGL?4() -QtOpenGL.QOpenGLWindow.paintUnderGL?4() -QtOpenGL.QOpenGLWindow.paintOverGL?4() -QtOpenGL.QOpenGLWindow.paintEvent?4(QPaintEvent) -QtOpenGL.QOpenGLWindow.resizeEvent?4(QResizeEvent) -QtOpenGL.QOpenGLWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtOpenGL.QOpenGLFunctions_2_0?1() -QtOpenGL.QOpenGLFunctions_2_0.__init__?1(self) -QtOpenGL.QOpenGLFunctions_2_0.initializeOpenGLFunctions?4() -> bool -QtOpenGL.QOpenGLFunctions_2_0.glViewport?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glDepthRange?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glIsEnabled?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetTexLevelParameteriv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexLevelParameterfv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetString?4(int) -> str -QtOpenGL.QOpenGLFunctions_2_0.glGetIntegerv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetFloatv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetError?4() -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetDoublev?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetBooleanv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glReadPixels?4(int, int, int, int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glReadBuffer?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPixelStorei?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPixelStoref?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glDepthFunc?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilOp?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilFunc?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glLogicOp?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glBlendFunc?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glFlush?4() -QtOpenGL.QOpenGLFunctions_2_0.glFinish?4() -QtOpenGL.QOpenGLFunctions_2_0.glEnable?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDisable?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDepthMask?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glColorMask?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilMask?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glClearDepth?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glClearStencil?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glClearColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glClear?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDrawBuffer?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glTexImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexImage1D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glScissor?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPolygonMode?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPointSize?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glLineWidth?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glHint?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glFrontFace?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glCullFace?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glIndexubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexub?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glIsTexture?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGenTextures?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glDeleteTextures?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBindTexture?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCopyTexSubImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCopyTexSubImage1D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCopyTexImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCopyTexImage1D?4(int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPolygonOffset?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glDrawElements?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glDrawArrays?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCopyTexSubImage3D?4(int, int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexImage3D?4(int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glDrawRangeElements?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBlendEquation?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glBlendColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexImage2D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCompressedTexImage3D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glSampleCoverage?4(float, int) -QtOpenGL.QOpenGLFunctions_2_0.glActiveTexture?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPointParameteriv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPointParameteri?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPointParameterfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPointParameterf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glBlendFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glGetBufferParameteriv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glUnmapBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glBufferSubData?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBufferData?4(int, int, Any, int) -QtOpenGL.QOpenGLFunctions_2_0.glIsBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGenBuffers?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glDeleteBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBindBuffer?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glGetQueryiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glEndQuery?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glBeginQuery?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glIsQuery?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glDeleteQueries?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glGenQueries?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttribPointer?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glValidateProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glUniformMatrix4fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniformMatrix3fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniformMatrix2fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform4iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform3iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform2iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform1iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform4fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform3fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform2fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform1fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glUniform4i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glUniform3i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glUniform2i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glUniform1i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glUniform4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glUniform3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glUniform2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glUniform1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glUseProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glLinkProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glIsShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glIsProgram?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetVertexAttribiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetVertexAttribfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetVertexAttribdv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetUniformLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetShaderSource?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetShaderInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetShaderiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetProgramInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetProgramiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetAttribLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetAttachedShaders?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetActiveUniform?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetActiveAttrib?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glEnableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDisableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDetachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glDeleteShader?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glDeleteProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glCreateShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glCreateProgram?4() -> int -QtOpenGL.QOpenGLFunctions_2_0.glCompileShader?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glBindAttribLocation?4(int, int, str) -QtOpenGL.QOpenGLFunctions_2_0.glAttachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilMaskSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glStencilOpSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glDrawBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBlendEquationSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTranslatef?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTranslated?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glScalef?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glScaled?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRotatef?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRotated?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glPushMatrix?4() -QtOpenGL.QOpenGLFunctions_2_0.glPopMatrix?4() -QtOpenGL.QOpenGLFunctions_2_0.glOrtho?4(float, float, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glMatrixMode?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glLoadMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glLoadMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glLoadIdentity?4() -QtOpenGL.QOpenGLFunctions_2_0.glFrustum?4(float, float, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glIsList?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glGetTexGeniv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexGenfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexGendv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexEnviv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetTexEnvfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetMaterialiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetMaterialfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetLightiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetLightfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetClipPlane?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glDrawPixels?4(int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCopyPixels?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPixelMapusv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPixelMapuiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPixelMapfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPixelTransferi?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPixelTransferf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glPixelZoom?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glAlphaFunc?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glEvalPoint2?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glEvalMesh2?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glEvalPoint1?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glEvalMesh1?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord1fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord1f?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord1dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glEvalCoord1d?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glMapGrid2f?4(int, float, float, int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMapGrid2d?4(int, float, float, int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMapGrid1f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMapGrid1d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMap2f?4(int, float, float, int, int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMap2d?4(int, float, float, int, int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMap1f?4(int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMap1d?4(int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glPushAttrib?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPopAttrib?4() -QtOpenGL.QOpenGLFunctions_2_0.glAccum?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glIndexMask?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glClearIndex?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glClearAccum?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glPushName?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPopName?4() -QtOpenGL.QOpenGLFunctions_2_0.glPassThrough?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glLoadName?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glInitNames?4() -QtOpenGL.QOpenGLFunctions_2_0.glRenderMode?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glTexGeniv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexGeni?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexGenfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexGenf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexGendv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexGend?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexEnviv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexEnvi?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexEnvfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexEnvf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glShadeModel?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPolygonStipple?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glMaterialiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMateriali?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMaterialfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMaterialf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glLineStipple?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glLightModeliv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glLightModeli?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glLightModelfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glLightModelf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glLightiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glLighti?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glLightfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glLightf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glFogiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glFogi?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glFogfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glFogf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glColorMaterial?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glClipPlane?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertex2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1s?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1i?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1f?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoord1d?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glRects?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRecti?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRectf?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRectd?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glRasterPos2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormal3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glIndexsv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexs?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glIndexiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexi?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glIndexfv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexf?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glIndexdv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexd?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glEnd?4() -QtOpenGL.QOpenGLFunctions_2_0.glEdgeFlagv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glEdgeFlag?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4us?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4ub?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glColor4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glColor4bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor4b?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3us?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3ub?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColor3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glColor3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glColor3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glColor3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glBitmap?4(int, int, float, float, float, float, Any) -QtOpenGL.QOpenGLFunctions_2_0.glBegin?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glListBase?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glGenLists?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_0.glDeleteLists?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCallList?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glEndList?4() -QtOpenGL.QOpenGLFunctions_2_0.glNewList?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glPushClientAttrib?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glPopClientAttrib?4() -QtOpenGL.QOpenGLFunctions_2_0.glVertexPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glTexCoordPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glNormalPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glIndexPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glEnableClientState?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glEdgeFlagPointer?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glDisableClientState?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glColorPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glArrayElement?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glResetMinmax?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glResetHistogram?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glMinmax?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glHistogram?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glGetConvolutionParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetConvolutionParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glCopyConvolutionFilter2D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glCopyConvolutionFilter1D?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionFilter2D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glConvolutionFilter1D?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glCopyColorSubTable?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColorSubTable?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glGetColorTableParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glGetColorTableParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_0.glCopyColorTable?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glColorTableParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glColorTableParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glColorTable?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultTransposeMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultTransposeMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glLoadTransposeMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glLoadTransposeMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4s?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glMultiTexCoord1d?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glClientActiveTexture?4(int) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glWindowPos2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColorPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3us?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3ub?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3sv?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glSecondaryColor3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glFogCoordPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glFogCoorddv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glFogCoordd?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glFogCoordfv?4(Any) -QtOpenGL.QOpenGLFunctions_2_0.glFogCoordf?4(float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4usv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4uiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4ubv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4s?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4bv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nusv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nuiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nubv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nub?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nsv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Niv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib4Nbv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_0.glVertexAttrib1d?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1?1() -QtOpenGL.QOpenGLFunctions_2_1.__init__?1(self) -QtOpenGL.QOpenGLFunctions_2_1.initializeOpenGLFunctions?4() -> bool -QtOpenGL.QOpenGLFunctions_2_1.glViewport?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glDepthRange?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glIsEnabled?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetTexLevelParameteriv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexLevelParameterfv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetString?4(int) -> str -QtOpenGL.QOpenGLFunctions_2_1.glGetIntegerv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetFloatv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetError?4() -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetDoublev?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetBooleanv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glReadPixels?4(int, int, int, int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glReadBuffer?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPixelStorei?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPixelStoref?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glDepthFunc?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilOp?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilFunc?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glLogicOp?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glBlendFunc?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glFlush?4() -QtOpenGL.QOpenGLFunctions_2_1.glFinish?4() -QtOpenGL.QOpenGLFunctions_2_1.glEnable?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDisable?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDepthMask?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glColorMask?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilMask?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glClearDepth?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glClearStencil?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glClearColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glClear?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDrawBuffer?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glTexImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexImage1D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glScissor?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPolygonMode?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPointSize?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glLineWidth?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glHint?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glFrontFace?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glCullFace?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glIndexubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexub?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glIsTexture?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGenTextures?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glDeleteTextures?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBindTexture?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCopyTexSubImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCopyTexSubImage1D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCopyTexImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCopyTexImage1D?4(int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPolygonOffset?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glDrawElements?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glDrawArrays?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCopyTexSubImage3D?4(int, int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexImage3D?4(int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glDrawRangeElements?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBlendEquation?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glBlendColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexImage2D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCompressedTexImage3D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glSampleCoverage?4(float, int) -QtOpenGL.QOpenGLFunctions_2_1.glActiveTexture?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPointParameteriv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPointParameteri?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPointParameterfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPointParameterf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glBlendFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glGetBufferParameteriv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glUnmapBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glBufferSubData?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBufferData?4(int, int, Any, int) -QtOpenGL.QOpenGLFunctions_2_1.glIsBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGenBuffers?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glDeleteBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBindBuffer?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glGetQueryiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glEndQuery?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glBeginQuery?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glIsQuery?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glDeleteQueries?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glGenQueries?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttribPointer?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glValidateProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glUniformMatrix4fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniformMatrix3fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniformMatrix2fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform4iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform3iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform2iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform1iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform4fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform3fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform2fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform1fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glUniform4i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glUniform3i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glUniform2i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glUniform1i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glUniform4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glUniform3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glUniform2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glUniform1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glUseProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glLinkProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glIsShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glIsProgram?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetVertexAttribiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetVertexAttribfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetVertexAttribdv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetUniformLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetShaderSource?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetShaderInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetShaderiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetProgramInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetProgramiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetAttribLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetAttachedShaders?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetActiveUniform?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetActiveAttrib?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glEnableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDisableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDetachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glDeleteShader?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glDeleteProgram?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glCreateShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glCreateProgram?4() -> int -QtOpenGL.QOpenGLFunctions_2_1.glCompileShader?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glBindAttribLocation?4(int, int, str) -QtOpenGL.QOpenGLFunctions_2_1.glAttachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilMaskSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glStencilOpSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glDrawBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBlendEquationSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTranslatef?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTranslated?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glScalef?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glScaled?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRotatef?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRotated?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glPushMatrix?4() -QtOpenGL.QOpenGLFunctions_2_1.glPopMatrix?4() -QtOpenGL.QOpenGLFunctions_2_1.glOrtho?4(float, float, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glMatrixMode?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glLoadMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glLoadMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glLoadIdentity?4() -QtOpenGL.QOpenGLFunctions_2_1.glFrustum?4(float, float, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glIsList?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glGetTexGeniv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexGenfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexGendv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexEnviv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetTexEnvfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetMaterialiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetMaterialfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetLightiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetLightfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetClipPlane?4(int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glDrawPixels?4(int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCopyPixels?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPixelMapusv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPixelMapuiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPixelMapfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPixelTransferi?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPixelTransferf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glPixelZoom?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glAlphaFunc?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glEvalPoint2?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glEvalMesh2?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glEvalPoint1?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glEvalMesh1?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord1fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord1f?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord1dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glEvalCoord1d?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glMapGrid2f?4(int, float, float, int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMapGrid2d?4(int, float, float, int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMapGrid1f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMapGrid1d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMap2f?4(int, float, float, int, int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMap2d?4(int, float, float, int, int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMap1f?4(int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMap1d?4(int, float, float, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glPushAttrib?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPopAttrib?4() -QtOpenGL.QOpenGLFunctions_2_1.glAccum?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glIndexMask?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glClearIndex?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glClearAccum?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glPushName?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPopName?4() -QtOpenGL.QOpenGLFunctions_2_1.glPassThrough?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glLoadName?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glInitNames?4() -QtOpenGL.QOpenGLFunctions_2_1.glRenderMode?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glTexGeniv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexGeni?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexGenfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexGenf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexGendv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexGend?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexEnviv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexEnvi?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexEnvfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexEnvf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glShadeModel?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPolygonStipple?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glMaterialiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMateriali?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMaterialfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMaterialf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glLineStipple?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glLightModeliv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glLightModeli?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glLightModelfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glLightModelf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glLightiv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glLighti?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glLightfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glLightf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glFogiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glFogi?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glFogfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glFogf?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glColorMaterial?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glClipPlane?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertex2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1s?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1i?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1f?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoord1d?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glRects?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRecti?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRectf?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRectd?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glRasterPos2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormal3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glIndexsv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexs?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glIndexiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexi?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glIndexfv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexf?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glIndexdv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexd?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glEnd?4() -QtOpenGL.QOpenGLFunctions_2_1.glEdgeFlagv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glEdgeFlag?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4us?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4ub?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor4fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4f?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glColor4dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4d?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glColor4bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor4b?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3us?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3ub?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColor3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glColor3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glColor3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glColor3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glBitmap?4(int, int, float, float, float, float, Any) -QtOpenGL.QOpenGLFunctions_2_1.glBegin?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glListBase?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glGenLists?4(int) -> int -QtOpenGL.QOpenGLFunctions_2_1.glDeleteLists?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCallList?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glEndList?4() -QtOpenGL.QOpenGLFunctions_2_1.glNewList?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glPushClientAttrib?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glPopClientAttrib?4() -QtOpenGL.QOpenGLFunctions_2_1.glVertexPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glTexCoordPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glNormalPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glIndexPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glEnableClientState?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glEdgeFlagPointer?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glDisableClientState?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glColorPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glArrayElement?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glResetMinmax?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glResetHistogram?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glMinmax?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glHistogram?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glGetConvolutionParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetConvolutionParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glCopyConvolutionFilter2D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glCopyConvolutionFilter1D?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionFilter2D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glConvolutionFilter1D?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glCopyColorSubTable?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColorSubTable?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glGetColorTableParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glGetColorTableParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_2_1.glCopyColorTable?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glColorTableParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glColorTableParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glColorTable?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultTransposeMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultTransposeMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glLoadTransposeMatrixd?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glLoadTransposeMatrixf?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4s?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glMultiTexCoord1d?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glClientActiveTexture?4(int) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2sv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2i?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2f?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glWindowPos2d?4(float, float) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColorPointer?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3usv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3us?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3uiv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3ubv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3ub?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3sv?4(Union[bytes, bytearray, memoryview, PyQt6.sip.array, PyQt6.sip.voidptr]) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3iv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3fv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3f?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3dv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3d?4(float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3bv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glSecondaryColor3b?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glFogCoordPointer?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glFogCoorddv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glFogCoordd?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glFogCoordfv?4(Any) -QtOpenGL.QOpenGLFunctions_2_1.glFogCoordf?4(float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4usv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4uiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4ubv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4s?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4iv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4bv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nusv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nuiv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nubv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nub?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nsv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Niv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib4Nbv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3s?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2s?4(int, int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1sv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1s?4(int, int) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1fv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1f?4(int, float) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1dv?4(int, Any) -QtOpenGL.QOpenGLFunctions_2_1.glVertexAttrib1d?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core?1() -QtOpenGL.QOpenGLFunctions_4_1_Core.__init__?1(self) -QtOpenGL.QOpenGLFunctions_4_1_Core.initializeOpenGLFunctions?4() -> bool -QtOpenGL.QOpenGLFunctions_4_1_Core.glViewport?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDepthRange?4(float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsEnabled?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetTexLevelParameteriv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetTexLevelParameterfv?4(int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetTexParameteriv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetTexParameterfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetString?4(int) -> str -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetIntegerv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetFloatv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetError?4() -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetDoublev?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetBooleanv?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glReadPixels?4(int, int, int, int, int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glReadBuffer?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPixelStorei?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPixelStoref?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDepthFunc?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilOp?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilFunc?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glLogicOp?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendFunc?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFlush?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glFinish?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glEnable?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDisable?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDepthMask?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glColorMask?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilMask?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClearDepth?4(float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClearStencil?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClearColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClear?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawBuffer?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexImage1D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexParameteriv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexParameterfv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glScissor?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPolygonMode?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPointSize?4(float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glLineWidth?4(float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glHint?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFrontFace?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCullFace?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsTexture?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGenTextures?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glDeleteTextures?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindTexture?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCopyTexSubImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCopyTexSubImage1D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCopyTexImage2D?4(int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCopyTexImage1D?4(int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPolygonOffset?4(float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawElements?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawArrays?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCopyTexSubImage3D?4(int, int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexImage3D?4(int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawRangeElements?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendEquation?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendColor?4(float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexSubImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexSubImage2D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexSubImage3D?4(int, int, int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexImage1D?4(int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexImage2D?4(int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompressedTexImage3D?4(int, int, int, int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glSampleCoverage?4(float, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glActiveTexture?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPointParameteriv?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPointParameteri?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPointParameterfv?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPointParameterf?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetBufferParameteriv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glUnmapBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glBufferSubData?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBufferData?4(int, int, Any, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsBuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGenBuffers?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glDeleteBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindBuffer?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetQueryiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glEndQuery?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBeginQuery?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsQuery?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glDeleteQueries?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glGenQueries?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribPointer?4(int, int, int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glValidateProgram?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniformMatrix4fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniformMatrix3fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniformMatrix2fv?4(int, int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1iv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1fv?4(int, int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1i?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4f?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3f?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2f?4(int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1f?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUseProgram?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glLinkProgram?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsProgram?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetVertexAttribiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetVertexAttribfv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetVertexAttribdv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetUniformLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetShaderSource?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetShaderInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetShaderiv?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetProgramInfoLog?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetProgramiv?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetAttribLocation?4(int, str) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetAttachedShaders?4(int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetActiveUniform?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glGetActiveAttrib?4(int, int) -> Any -QtOpenGL.QOpenGLFunctions_4_1_Core.glEnableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDisableVertexAttribArray?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDetachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDeleteShader?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDeleteProgram?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCreateShader?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glCreateProgram?4() -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glCompileShader?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindAttribLocation?4(int, int, str) -QtOpenGL.QOpenGLFunctions_4_1_Core.glAttachShader?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilMaskSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilFuncSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glStencilOpSeparate?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawBuffers?4(int, Any) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendEquationSeparate?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsVertexArray?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindVertexArray?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferTextureLayer?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glRenderbufferStorageMultisample?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlitFramebuffer?4(int, int, int, int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glGenerateMipmap?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferRenderbuffer?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferTexture3D?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferTexture2D?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferTexture1D?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glCheckFramebufferStatus?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindFramebuffer?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsFramebuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glRenderbufferStorage?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindRenderbuffer?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsRenderbuffer?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glClearBufferfi?4(int, int, float, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4ui?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1ui?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glEndConditionalRender?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glBeginConditionalRender?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClampColor?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindBufferBase?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glEndTransformFeedback?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glBeginTransformFeedback?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsEnabledi?4(int, int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glDisablei?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glEnablei?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glColorMaski?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniformBlockBinding?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPrimitiveRestartIndex?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexBuffer?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawArraysInstanced?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glSampleMaski?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexImage3DMultisample?4(int, int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glTexImage2DMultisample?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProvokingVertex?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glFramebufferTexture?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribP4ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribP3ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribP2ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribP1ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glQueryCounter?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glSamplerParameterf?4(int, int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glSamplerParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindSampler?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsSampler?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribDivisor?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glEndQueryIndexed?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBeginQueryIndexed?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawTransformFeedbackStream?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDrawTransformFeedback?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glResumeTransformFeedback?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glPauseTransformFeedback?4() -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsTransformFeedback?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindTransformFeedback?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glPatchParameteri?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUniform1d?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendFuncSeparatei?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendFunci?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendEquationSeparatei?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glBlendEquationi?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glMinSampleShading?4(float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDepthRangeIndexed?4(int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glScissorIndexed?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glViewportIndexedf?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribL4d?4(int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribL3d?4(int, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribL2d?4(int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glVertexAttribL1d?4(int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glValidateProgramPipeline?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform4ui?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform4d?4(int, int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform4f?4(int, int, float, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform4i?4(int, int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform3ui?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform3d?4(int, int, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform3f?4(int, int, float, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform3i?4(int, int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform2ui?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform2d?4(int, int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform2f?4(int, int, float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform2i?4(int, int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform1ui?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform1d?4(int, int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform1f?4(int, int, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramUniform1i?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glIsProgramPipeline?4(int) -> int -QtOpenGL.QOpenGLFunctions_4_1_Core.glBindProgramPipeline?4(int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glActiveShaderProgram?4(int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glUseProgramStages?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glProgramParameteri?4(int, int, int) -QtOpenGL.QOpenGLFunctions_4_1_Core.glClearDepthf?4(float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glDepthRangef?4(float, float) -QtOpenGL.QOpenGLFunctions_4_1_Core.glReleaseShaderCompiler?4() -QtOpenGL.QOpenGLVersionProfile?1() -QtOpenGL.QOpenGLVersionProfile.__init__?1(self) -QtOpenGL.QOpenGLVersionProfile?1(QSurfaceFormat) -QtOpenGL.QOpenGLVersionProfile.__init__?1(self, QSurfaceFormat) -QtOpenGL.QOpenGLVersionProfile?1(QOpenGLVersionProfile) -QtOpenGL.QOpenGLVersionProfile.__init__?1(self, QOpenGLVersionProfile) -QtOpenGL.QOpenGLVersionProfile.version?4() -> unknown-type -QtOpenGL.QOpenGLVersionProfile.setVersion?4(int, int) -QtOpenGL.QOpenGLVersionProfile.profile?4() -> QSurfaceFormat.OpenGLContextProfile -QtOpenGL.QOpenGLVersionProfile.setProfile?4(QSurfaceFormat.OpenGLContextProfile) -QtOpenGL.QOpenGLVersionProfile.hasProfiles?4() -> bool -QtOpenGL.QOpenGLVersionProfile.isLegacyVersion?4() -> bool -QtOpenGL.QOpenGLVersionProfile.isValid?4() -> bool -QtOpenGLWidgets.QOpenGLWidget.TargetBuffer?10 -QtOpenGLWidgets.QOpenGLWidget.TargetBuffer.LeftBuffer?10 -QtOpenGLWidgets.QOpenGLWidget.TargetBuffer.RightBuffer?10 -QtOpenGLWidgets.QOpenGLWidget.UpdateBehavior?10 -QtOpenGLWidgets.QOpenGLWidget.UpdateBehavior.NoPartialUpdate?10 -QtOpenGLWidgets.QOpenGLWidget.UpdateBehavior.PartialUpdate?10 -QtOpenGLWidgets.QOpenGLWidget?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtOpenGLWidgets.QOpenGLWidget.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtOpenGLWidgets.QOpenGLWidget.setFormat?4(QSurfaceFormat) -QtOpenGLWidgets.QOpenGLWidget.format?4() -> QSurfaceFormat -QtOpenGLWidgets.QOpenGLWidget.isValid?4() -> bool -QtOpenGLWidgets.QOpenGLWidget.makeCurrent?4() -QtOpenGLWidgets.QOpenGLWidget.makeCurrent?4(QOpenGLWidget.TargetBuffer) -QtOpenGLWidgets.QOpenGLWidget.doneCurrent?4() -QtOpenGLWidgets.QOpenGLWidget.context?4() -> QOpenGLContext -QtOpenGLWidgets.QOpenGLWidget.defaultFramebufferObject?4() -> int -QtOpenGLWidgets.QOpenGLWidget.defaultFramebufferObject?4(QOpenGLWidget.TargetBuffer) -> int -QtOpenGLWidgets.QOpenGLWidget.grabFramebuffer?4() -> QImage -QtOpenGLWidgets.QOpenGLWidget.grabFramebuffer?4(QOpenGLWidget.TargetBuffer) -> QImage -QtOpenGLWidgets.QOpenGLWidget.aboutToCompose?4() -QtOpenGLWidgets.QOpenGLWidget.frameSwapped?4() -QtOpenGLWidgets.QOpenGLWidget.aboutToResize?4() -QtOpenGLWidgets.QOpenGLWidget.resized?4() -QtOpenGLWidgets.QOpenGLWidget.initializeGL?4() -QtOpenGLWidgets.QOpenGLWidget.resizeGL?4(int, int) -QtOpenGLWidgets.QOpenGLWidget.paintGL?4() -QtOpenGLWidgets.QOpenGLWidget.paintEvent?4(QPaintEvent) -QtOpenGLWidgets.QOpenGLWidget.resizeEvent?4(QResizeEvent) -QtOpenGLWidgets.QOpenGLWidget.event?4(QEvent) -> bool -QtOpenGLWidgets.QOpenGLWidget.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtOpenGLWidgets.QOpenGLWidget.paintEngine?4() -> QPaintEngine -QtOpenGLWidgets.QOpenGLWidget.setUpdateBehavior?4(QOpenGLWidget.UpdateBehavior) -QtOpenGLWidgets.QOpenGLWidget.updateBehavior?4() -> QOpenGLWidget.UpdateBehavior -QtOpenGLWidgets.QOpenGLWidget.textureFormat?4() -> int -QtOpenGLWidgets.QOpenGLWidget.setTextureFormat?4(int) -QtOpenGLWidgets.QOpenGLWidget.currentTargetBuffer?4() -> QOpenGLWidget.TargetBuffer -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintToFile?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintSelection?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintPageRange?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintCollateCopies?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintShowPageSize?10 -QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintCurrentPage?10 -QtPrintSupport.QAbstractPrintDialog.PrintRange?10 -QtPrintSupport.QAbstractPrintDialog.PrintRange.AllPages?10 -QtPrintSupport.QAbstractPrintDialog.PrintRange.Selection?10 -QtPrintSupport.QAbstractPrintDialog.PrintRange.PageRange?10 -QtPrintSupport.QAbstractPrintDialog.PrintRange.CurrentPage?10 -QtPrintSupport.QAbstractPrintDialog?1(QPrinter, QWidget parent=None) -QtPrintSupport.QAbstractPrintDialog.__init__?1(self, QPrinter, QWidget parent=None) -QtPrintSupport.QAbstractPrintDialog.setPrintRange?4(QAbstractPrintDialog.PrintRange) -QtPrintSupport.QAbstractPrintDialog.printRange?4() -> QAbstractPrintDialog.PrintRange -QtPrintSupport.QAbstractPrintDialog.setMinMax?4(int, int) -QtPrintSupport.QAbstractPrintDialog.minPage?4() -> int -QtPrintSupport.QAbstractPrintDialog.maxPage?4() -> int -QtPrintSupport.QAbstractPrintDialog.setFromTo?4(int, int) -QtPrintSupport.QAbstractPrintDialog.fromPage?4() -> int -QtPrintSupport.QAbstractPrintDialog.toPage?4() -> int -QtPrintSupport.QAbstractPrintDialog.printer?4() -> QPrinter -QtPrintSupport.QAbstractPrintDialog.setOptionTabs?4(unknown-type) -QtPrintSupport.QPageSetupDialog?1(QPrinter, QWidget parent=None) -QtPrintSupport.QPageSetupDialog.__init__?1(self, QPrinter, QWidget parent=None) -QtPrintSupport.QPageSetupDialog?1(QWidget parent=None) -QtPrintSupport.QPageSetupDialog.__init__?1(self, QWidget parent=None) -QtPrintSupport.QPageSetupDialog.setVisible?4(bool) -QtPrintSupport.QPageSetupDialog.exec?4() -> int -QtPrintSupport.QPageSetupDialog.open?4() -QtPrintSupport.QPageSetupDialog.open?4(Any) -QtPrintSupport.QPageSetupDialog.done?4(int) -QtPrintSupport.QPageSetupDialog.printer?4() -> QPrinter -QtPrintSupport.QPrintDialog?1(QPrinter, QWidget parent=None) -QtPrintSupport.QPrintDialog.__init__?1(self, QPrinter, QWidget parent=None) -QtPrintSupport.QPrintDialog?1(QWidget parent=None) -QtPrintSupport.QPrintDialog.__init__?1(self, QWidget parent=None) -QtPrintSupport.QPrintDialog.exec?4() -> int -QtPrintSupport.QPrintDialog.accept?4() -QtPrintSupport.QPrintDialog.done?4(int) -QtPrintSupport.QPrintDialog.setOption?4(QAbstractPrintDialog.PrintDialogOption, bool on=True) -QtPrintSupport.QPrintDialog.testOption?4(QAbstractPrintDialog.PrintDialogOption) -> bool -QtPrintSupport.QPrintDialog.setOptions?4(unknown-type) -QtPrintSupport.QPrintDialog.options?4() -> unknown-type -QtPrintSupport.QPrintDialog.setVisible?4(bool) -QtPrintSupport.QPrintDialog.open?4() -QtPrintSupport.QPrintDialog.open?4(Any) -QtPrintSupport.QPrintDialog.accepted?4() -QtPrintSupport.QPrintDialog.accepted?4(QPrinter) -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CollateCopies?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_ColorMode?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Creator?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_DocumentName?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_FullPage?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_NumberOfCopies?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Orientation?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_OutputFileName?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageOrder?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageRect?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageSize?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperRect?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSource?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PrinterName?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PrinterProgram?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Resolution?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SelectionOption?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SupportedResolutions?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_WindowsPageSize?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_FontEmbedding?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Duplex?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSources?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CustomPaperSize?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageMargins?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSize?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CopyCount?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SupportsMultipleCopies?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperName?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageSize?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageMargins?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageLayout?10 -QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CustomBase?10 -QtPrintSupport.QPrintEngine?1() -QtPrintSupport.QPrintEngine.__init__?1(self) -QtPrintSupport.QPrintEngine?1(QPrintEngine) -QtPrintSupport.QPrintEngine.__init__?1(self, QPrintEngine) -QtPrintSupport.QPrintEngine.setProperty?4(QPrintEngine.PrintEnginePropertyKey, QVariant) -QtPrintSupport.QPrintEngine.property?4(QPrintEngine.PrintEnginePropertyKey) -> QVariant -QtPrintSupport.QPrintEngine.newPage?4() -> bool -QtPrintSupport.QPrintEngine.abort?4() -> bool -QtPrintSupport.QPrintEngine.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtPrintSupport.QPrintEngine.printerState?4() -> QPrinter.PrinterState -QtPrintSupport.QPrinter.DuplexMode?10 -QtPrintSupport.QPrinter.DuplexMode.DuplexNone?10 -QtPrintSupport.QPrinter.DuplexMode.DuplexAuto?10 -QtPrintSupport.QPrinter.DuplexMode.DuplexLongSide?10 -QtPrintSupport.QPrinter.DuplexMode.DuplexShortSide?10 -QtPrintSupport.QPrinter.Unit?10 -QtPrintSupport.QPrinter.Unit.Millimeter?10 -QtPrintSupport.QPrinter.Unit.Point?10 -QtPrintSupport.QPrinter.Unit.Inch?10 -QtPrintSupport.QPrinter.Unit.Pica?10 -QtPrintSupport.QPrinter.Unit.Didot?10 -QtPrintSupport.QPrinter.Unit.Cicero?10 -QtPrintSupport.QPrinter.Unit.DevicePixel?10 -QtPrintSupport.QPrinter.PrintRange?10 -QtPrintSupport.QPrinter.PrintRange.AllPages?10 -QtPrintSupport.QPrinter.PrintRange.Selection?10 -QtPrintSupport.QPrinter.PrintRange.PageRange?10 -QtPrintSupport.QPrinter.PrintRange.CurrentPage?10 -QtPrintSupport.QPrinter.OutputFormat?10 -QtPrintSupport.QPrinter.OutputFormat.NativeFormat?10 -QtPrintSupport.QPrinter.OutputFormat.PdfFormat?10 -QtPrintSupport.QPrinter.PrinterState?10 -QtPrintSupport.QPrinter.PrinterState.Idle?10 -QtPrintSupport.QPrinter.PrinterState.Active?10 -QtPrintSupport.QPrinter.PrinterState.Aborted?10 -QtPrintSupport.QPrinter.PrinterState.Error?10 -QtPrintSupport.QPrinter.PaperSource?10 -QtPrintSupport.QPrinter.PaperSource.OnlyOne?10 -QtPrintSupport.QPrinter.PaperSource.Lower?10 -QtPrintSupport.QPrinter.PaperSource.Middle?10 -QtPrintSupport.QPrinter.PaperSource.Manual?10 -QtPrintSupport.QPrinter.PaperSource.Envelope?10 -QtPrintSupport.QPrinter.PaperSource.EnvelopeManual?10 -QtPrintSupport.QPrinter.PaperSource.Auto?10 -QtPrintSupport.QPrinter.PaperSource.Tractor?10 -QtPrintSupport.QPrinter.PaperSource.SmallFormat?10 -QtPrintSupport.QPrinter.PaperSource.LargeFormat?10 -QtPrintSupport.QPrinter.PaperSource.LargeCapacity?10 -QtPrintSupport.QPrinter.PaperSource.Cassette?10 -QtPrintSupport.QPrinter.PaperSource.FormSource?10 -QtPrintSupport.QPrinter.PaperSource.MaxPageSource?10 -QtPrintSupport.QPrinter.PaperSource.Upper?10 -QtPrintSupport.QPrinter.PaperSource.CustomSource?10 -QtPrintSupport.QPrinter.PaperSource.LastPaperSource?10 -QtPrintSupport.QPrinter.ColorMode?10 -QtPrintSupport.QPrinter.ColorMode.GrayScale?10 -QtPrintSupport.QPrinter.ColorMode.Color?10 -QtPrintSupport.QPrinter.PageOrder?10 -QtPrintSupport.QPrinter.PageOrder.FirstPageFirst?10 -QtPrintSupport.QPrinter.PageOrder.LastPageFirst?10 -QtPrintSupport.QPrinter.PrinterMode?10 -QtPrintSupport.QPrinter.PrinterMode.ScreenResolution?10 -QtPrintSupport.QPrinter.PrinterMode.PrinterResolution?10 -QtPrintSupport.QPrinter.PrinterMode.HighResolution?10 -QtPrintSupport.QPrinter?1(QPrinter.PrinterMode mode=QPrinter.ScreenResolution) -QtPrintSupport.QPrinter.__init__?1(self, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) -QtPrintSupport.QPrinter?1(QPrinterInfo, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) -QtPrintSupport.QPrinter.__init__?1(self, QPrinterInfo, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) -QtPrintSupport.QPrinter.setOutputFormat?4(QPrinter.OutputFormat) -QtPrintSupport.QPrinter.outputFormat?4() -> QPrinter.OutputFormat -QtPrintSupport.QPrinter.setPrinterName?4(QString) -QtPrintSupport.QPrinter.printerName?4() -> QString -QtPrintSupport.QPrinter.isValid?4() -> bool -QtPrintSupport.QPrinter.setOutputFileName?4(QString) -QtPrintSupport.QPrinter.outputFileName?4() -> QString -QtPrintSupport.QPrinter.setPrintProgram?4(QString) -QtPrintSupport.QPrinter.printProgram?4() -> QString -QtPrintSupport.QPrinter.setDocName?4(QString) -QtPrintSupport.QPrinter.docName?4() -> QString -QtPrintSupport.QPrinter.setCreator?4(QString) -QtPrintSupport.QPrinter.creator?4() -> QString -QtPrintSupport.QPrinter.setPageOrder?4(QPrinter.PageOrder) -QtPrintSupport.QPrinter.pageOrder?4() -> QPrinter.PageOrder -QtPrintSupport.QPrinter.setResolution?4(int) -QtPrintSupport.QPrinter.resolution?4() -> int -QtPrintSupport.QPrinter.setColorMode?4(QPrinter.ColorMode) -QtPrintSupport.QPrinter.colorMode?4() -> QPrinter.ColorMode -QtPrintSupport.QPrinter.setCollateCopies?4(bool) -QtPrintSupport.QPrinter.collateCopies?4() -> bool -QtPrintSupport.QPrinter.setFullPage?4(bool) -QtPrintSupport.QPrinter.fullPage?4() -> bool -QtPrintSupport.QPrinter.setCopyCount?4(int) -QtPrintSupport.QPrinter.copyCount?4() -> int -QtPrintSupport.QPrinter.supportsMultipleCopies?4() -> bool -QtPrintSupport.QPrinter.setPaperSource?4(QPrinter.PaperSource) -QtPrintSupport.QPrinter.paperSource?4() -> QPrinter.PaperSource -QtPrintSupport.QPrinter.setDuplex?4(QPrinter.DuplexMode) -QtPrintSupport.QPrinter.duplex?4() -> QPrinter.DuplexMode -QtPrintSupport.QPrinter.supportedResolutions?4() -> unknown-type -QtPrintSupport.QPrinter.setFontEmbeddingEnabled?4(bool) -QtPrintSupport.QPrinter.fontEmbeddingEnabled?4() -> bool -QtPrintSupport.QPrinter.paperRect?4(QPrinter.Unit) -> QRectF -QtPrintSupport.QPrinter.pageRect?4(QPrinter.Unit) -> QRectF -QtPrintSupport.QPrinter.printerSelectionOption?4() -> QString -QtPrintSupport.QPrinter.setPrinterSelectionOption?4(QString) -QtPrintSupport.QPrinter.newPage?4() -> bool -QtPrintSupport.QPrinter.abort?4() -> bool -QtPrintSupport.QPrinter.printerState?4() -> QPrinter.PrinterState -QtPrintSupport.QPrinter.paintEngine?4() -> QPaintEngine -QtPrintSupport.QPrinter.printEngine?4() -> QPrintEngine -QtPrintSupport.QPrinter.setFromTo?4(int, int) -QtPrintSupport.QPrinter.fromPage?4() -> int -QtPrintSupport.QPrinter.toPage?4() -> int -QtPrintSupport.QPrinter.setPrintRange?4(QPrinter.PrintRange) -QtPrintSupport.QPrinter.printRange?4() -> QPrinter.PrintRange -QtPrintSupport.QPrinter.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtPrintSupport.QPrinter.setEngines?4(QPrintEngine, QPaintEngine) -QtPrintSupport.QPrinter.setPdfVersion?4(QPagedPaintDevice.PdfVersion) -QtPrintSupport.QPrinter.pdfVersion?4() -> QPagedPaintDevice.PdfVersion -QtPrintSupport.QPrinterInfo?1() -QtPrintSupport.QPrinterInfo.__init__?1(self) -QtPrintSupport.QPrinterInfo?1(QPrinterInfo) -QtPrintSupport.QPrinterInfo.__init__?1(self, QPrinterInfo) -QtPrintSupport.QPrinterInfo?1(QPrinter) -QtPrintSupport.QPrinterInfo.__init__?1(self, QPrinter) -QtPrintSupport.QPrinterInfo.printerName?4() -> QString -QtPrintSupport.QPrinterInfo.isNull?4() -> bool -QtPrintSupport.QPrinterInfo.isDefault?4() -> bool -QtPrintSupport.QPrinterInfo.availablePrinters?4() -> unknown-type -QtPrintSupport.QPrinterInfo.defaultPrinter?4() -> QPrinterInfo -QtPrintSupport.QPrinterInfo.description?4() -> QString -QtPrintSupport.QPrinterInfo.location?4() -> QString -QtPrintSupport.QPrinterInfo.makeAndModel?4() -> QString -QtPrintSupport.QPrinterInfo.printerInfo?4(QString) -> QPrinterInfo -QtPrintSupport.QPrinterInfo.isRemote?4() -> bool -QtPrintSupport.QPrinterInfo.state?4() -> QPrinter.PrinterState -QtPrintSupport.QPrinterInfo.supportedPageSizes?4() -> unknown-type -QtPrintSupport.QPrinterInfo.defaultPageSize?4() -> QPageSize -QtPrintSupport.QPrinterInfo.supportsCustomPageSizes?4() -> bool -QtPrintSupport.QPrinterInfo.minimumPhysicalPageSize?4() -> QPageSize -QtPrintSupport.QPrinterInfo.maximumPhysicalPageSize?4() -> QPageSize -QtPrintSupport.QPrinterInfo.supportedResolutions?4() -> unknown-type -QtPrintSupport.QPrinterInfo.availablePrinterNames?4() -> QStringList -QtPrintSupport.QPrinterInfo.defaultPrinterName?4() -> QString -QtPrintSupport.QPrinterInfo.defaultDuplexMode?4() -> QPrinter.DuplexMode -QtPrintSupport.QPrinterInfo.supportedDuplexModes?4() -> unknown-type -QtPrintSupport.QPrinterInfo.defaultColorMode?4() -> QPrinter.ColorMode -QtPrintSupport.QPrinterInfo.supportedColorModes?4() -> unknown-type -QtPrintSupport.QPrintPreviewDialog?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewDialog.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewDialog?1(QPrinter, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewDialog.__init__?1(self, QPrinter, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewDialog.setVisible?4(bool) -QtPrintSupport.QPrintPreviewDialog.open?4() -QtPrintSupport.QPrintPreviewDialog.open?4(Any) -QtPrintSupport.QPrintPreviewDialog.printer?4() -> QPrinter -QtPrintSupport.QPrintPreviewDialog.done?4(int) -QtPrintSupport.QPrintPreviewDialog.paintRequested?4(QPrinter) -QtPrintSupport.QPrintPreviewWidget.ZoomMode?10 -QtPrintSupport.QPrintPreviewWidget.ZoomMode.CustomZoom?10 -QtPrintSupport.QPrintPreviewWidget.ZoomMode.FitToWidth?10 -QtPrintSupport.QPrintPreviewWidget.ZoomMode.FitInView?10 -QtPrintSupport.QPrintPreviewWidget.ViewMode?10 -QtPrintSupport.QPrintPreviewWidget.ViewMode.SinglePageView?10 -QtPrintSupport.QPrintPreviewWidget.ViewMode.FacingPagesView?10 -QtPrintSupport.QPrintPreviewWidget.ViewMode.AllPagesView?10 -QtPrintSupport.QPrintPreviewWidget?1(QPrinter, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewWidget.__init__?1(self, QPrinter, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewWidget?1(QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewWidget.__init__?1(self, QWidget parent=None, unknown-type flags=Qt.WindowFlags()) -QtPrintSupport.QPrintPreviewWidget.zoomFactor?4() -> float -QtPrintSupport.QPrintPreviewWidget.orientation?4() -> QPageLayout.Orientation -QtPrintSupport.QPrintPreviewWidget.viewMode?4() -> QPrintPreviewWidget.ViewMode -QtPrintSupport.QPrintPreviewWidget.zoomMode?4() -> QPrintPreviewWidget.ZoomMode -QtPrintSupport.QPrintPreviewWidget.currentPage?4() -> int -QtPrintSupport.QPrintPreviewWidget.setVisible?4(bool) -QtPrintSupport.QPrintPreviewWidget.print?4() -QtPrintSupport.QPrintPreviewWidget.zoomIn?4(float factor=1.1) -QtPrintSupport.QPrintPreviewWidget.zoomOut?4(float factor=1.1) -QtPrintSupport.QPrintPreviewWidget.setZoomFactor?4(float) -QtPrintSupport.QPrintPreviewWidget.setOrientation?4(QPageLayout.Orientation) -QtPrintSupport.QPrintPreviewWidget.setViewMode?4(QPrintPreviewWidget.ViewMode) -QtPrintSupport.QPrintPreviewWidget.setZoomMode?4(QPrintPreviewWidget.ZoomMode) -QtPrintSupport.QPrintPreviewWidget.setCurrentPage?4(int) -QtPrintSupport.QPrintPreviewWidget.fitToWidth?4() -QtPrintSupport.QPrintPreviewWidget.fitInView?4() -QtPrintSupport.QPrintPreviewWidget.setLandscapeOrientation?4() -QtPrintSupport.QPrintPreviewWidget.setPortraitOrientation?4() -QtPrintSupport.QPrintPreviewWidget.setSinglePageViewMode?4() -QtPrintSupport.QPrintPreviewWidget.setFacingPagesViewMode?4() -QtPrintSupport.QPrintPreviewWidget.setAllPagesViewMode?4() -QtPrintSupport.QPrintPreviewWidget.updatePreview?4() -QtPrintSupport.QPrintPreviewWidget.paintRequested?4(QPrinter) -QtPrintSupport.QPrintPreviewWidget.previewChanged?4() -QtPrintSupport.QPrintPreviewWidget.pageCount?4() -> int -QtQuick.QQuickItem.TransformOrigin?10 -QtQuick.QQuickItem.TransformOrigin.TopLeft?10 -QtQuick.QQuickItem.TransformOrigin.Top?10 -QtQuick.QQuickItem.TransformOrigin.TopRight?10 -QtQuick.QQuickItem.TransformOrigin.Left?10 -QtQuick.QQuickItem.TransformOrigin.Center?10 -QtQuick.QQuickItem.TransformOrigin.Right?10 -QtQuick.QQuickItem.TransformOrigin.BottomLeft?10 -QtQuick.QQuickItem.TransformOrigin.Bottom?10 -QtQuick.QQuickItem.TransformOrigin.BottomRight?10 -QtQuick.QQuickItem.ItemChange?10 -QtQuick.QQuickItem.ItemChange.ItemChildAddedChange?10 -QtQuick.QQuickItem.ItemChange.ItemChildRemovedChange?10 -QtQuick.QQuickItem.ItemChange.ItemSceneChange?10 -QtQuick.QQuickItem.ItemChange.ItemVisibleHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemParentHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemOpacityHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemActiveFocusHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemRotationHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemAntialiasingHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemDevicePixelRatioHasChanged?10 -QtQuick.QQuickItem.ItemChange.ItemEnabledHasChanged?10 -QtQuick.QQuickItem.Flag?10 -QtQuick.QQuickItem.Flag.ItemClipsChildrenToShape?10 -QtQuick.QQuickItem.Flag.ItemAcceptsInputMethod?10 -QtQuick.QQuickItem.Flag.ItemIsFocusScope?10 -QtQuick.QQuickItem.Flag.ItemHasContents?10 -QtQuick.QQuickItem.Flag.ItemAcceptsDrops?10 -QtQuick.QQuickItem.Flag.ItemIsViewport?10 -QtQuick.QQuickItem.Flag.ItemObservesViewport?10 -QtQuick.QQuickItem?1(QQuickItem parent=None) -QtQuick.QQuickItem.__init__?1(self, QQuickItem parent=None) -QtQuick.QQuickItem.window?4() -> QQuickWindow -QtQuick.QQuickItem.parentItem?4() -> QQuickItem -QtQuick.QQuickItem.setParentItem?4(QQuickItem) -QtQuick.QQuickItem.stackBefore?4(QQuickItem) -QtQuick.QQuickItem.stackAfter?4(QQuickItem) -QtQuick.QQuickItem.childrenRect?4() -> QRectF -QtQuick.QQuickItem.childItems?4() -> unknown-type -QtQuick.QQuickItem.clip?4() -> bool -QtQuick.QQuickItem.setClip?4(bool) -QtQuick.QQuickItem.state?4() -> QString -QtQuick.QQuickItem.setState?4(QString) -QtQuick.QQuickItem.baselineOffset?4() -> float -QtQuick.QQuickItem.setBaselineOffset?4(float) -QtQuick.QQuickItem.x?4() -> float -QtQuick.QQuickItem.y?4() -> float -QtQuick.QQuickItem.setX?4(float) -QtQuick.QQuickItem.setY?4(float) -QtQuick.QQuickItem.width?4() -> float -QtQuick.QQuickItem.setWidth?4(float) -QtQuick.QQuickItem.resetWidth?4() -QtQuick.QQuickItem.setImplicitWidth?4(float) -QtQuick.QQuickItem.implicitWidth?4() -> float -QtQuick.QQuickItem.height?4() -> float -QtQuick.QQuickItem.setHeight?4(float) -QtQuick.QQuickItem.resetHeight?4() -QtQuick.QQuickItem.setImplicitHeight?4(float) -QtQuick.QQuickItem.implicitHeight?4() -> float -QtQuick.QQuickItem.setSize?4(QSizeF) -QtQuick.QQuickItem.transformOrigin?4() -> QQuickItem.TransformOrigin -QtQuick.QQuickItem.setTransformOrigin?4(QQuickItem.TransformOrigin) -QtQuick.QQuickItem.z?4() -> float -QtQuick.QQuickItem.setZ?4(float) -QtQuick.QQuickItem.rotation?4() -> float -QtQuick.QQuickItem.setRotation?4(float) -QtQuick.QQuickItem.scale?4() -> float -QtQuick.QQuickItem.setScale?4(float) -QtQuick.QQuickItem.opacity?4() -> float -QtQuick.QQuickItem.setOpacity?4(float) -QtQuick.QQuickItem.isVisible?4() -> bool -QtQuick.QQuickItem.setVisible?4(bool) -QtQuick.QQuickItem.isEnabled?4() -> bool -QtQuick.QQuickItem.setEnabled?4(bool) -QtQuick.QQuickItem.smooth?4() -> bool -QtQuick.QQuickItem.setSmooth?4(bool) -QtQuick.QQuickItem.antialiasing?4() -> bool -QtQuick.QQuickItem.setAntialiasing?4(bool) -QtQuick.QQuickItem.flags?4() -> unknown-type -QtQuick.QQuickItem.setFlag?4(QQuickItem.Flag, bool enabled=True) -QtQuick.QQuickItem.setFlags?4(unknown-type) -QtQuick.QQuickItem.hasActiveFocus?4() -> bool -QtQuick.QQuickItem.hasFocus?4() -> bool -QtQuick.QQuickItem.setFocus?4(bool) -QtQuick.QQuickItem.isFocusScope?4() -> bool -QtQuick.QQuickItem.scopedFocusItem?4() -> QQuickItem -QtQuick.QQuickItem.acceptedMouseButtons?4() -> unknown-type -QtQuick.QQuickItem.setAcceptedMouseButtons?4(unknown-type) -QtQuick.QQuickItem.acceptHoverEvents?4() -> bool -QtQuick.QQuickItem.setAcceptHoverEvents?4(bool) -QtQuick.QQuickItem.cursor?4() -> QCursor -QtQuick.QQuickItem.setCursor?4(QCursor) -QtQuick.QQuickItem.unsetCursor?4() -QtQuick.QQuickItem.grabMouse?4() -QtQuick.QQuickItem.ungrabMouse?4() -QtQuick.QQuickItem.keepMouseGrab?4() -> bool -QtQuick.QQuickItem.setKeepMouseGrab?4(bool) -QtQuick.QQuickItem.filtersChildMouseEvents?4() -> bool -QtQuick.QQuickItem.setFiltersChildMouseEvents?4(bool) -QtQuick.QQuickItem.grabTouchPoints?4(unknown-type) -QtQuick.QQuickItem.ungrabTouchPoints?4() -QtQuick.QQuickItem.keepTouchGrab?4() -> bool -QtQuick.QQuickItem.setKeepTouchGrab?4(bool) -QtQuick.QQuickItem.contains?4(QPointF) -> bool -QtQuick.QQuickItem.mapToItem?4(QQuickItem, QPointF) -> QPointF -QtQuick.QQuickItem.mapToScene?4(QPointF) -> QPointF -QtQuick.QQuickItem.mapRectToItem?4(QQuickItem, QRectF) -> QRectF -QtQuick.QQuickItem.mapRectToScene?4(QRectF) -> QRectF -QtQuick.QQuickItem.mapFromItem?4(QQuickItem, QPointF) -> QPointF -QtQuick.QQuickItem.mapFromScene?4(QPointF) -> QPointF -QtQuick.QQuickItem.mapRectFromItem?4(QQuickItem, QRectF) -> QRectF -QtQuick.QQuickItem.mapRectFromScene?4(QRectF) -> QRectF -QtQuick.QQuickItem.polish?4() -QtQuick.QQuickItem.forceActiveFocus?4() -QtQuick.QQuickItem.childAt?4(float, float) -> QQuickItem -QtQuick.QQuickItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant -QtQuick.QQuickItem.isTextureProvider?4() -> bool -QtQuick.QQuickItem.textureProvider?4() -> QSGTextureProvider -QtQuick.QQuickItem.update?4() -QtQuick.QQuickItem.childrenRectChanged?4(QRectF) -QtQuick.QQuickItem.baselineOffsetChanged?4(float) -QtQuick.QQuickItem.stateChanged?4(QString) -QtQuick.QQuickItem.focusChanged?4(bool) -QtQuick.QQuickItem.activeFocusChanged?4(bool) -QtQuick.QQuickItem.parentChanged?4(QQuickItem) -QtQuick.QQuickItem.transformOriginChanged?4(QQuickItem.TransformOrigin) -QtQuick.QQuickItem.smoothChanged?4(bool) -QtQuick.QQuickItem.antialiasingChanged?4(bool) -QtQuick.QQuickItem.clipChanged?4(bool) -QtQuick.QQuickItem.opacityChanged?4() -QtQuick.QQuickItem.enabledChanged?4() -QtQuick.QQuickItem.visibleChanged?4() -QtQuick.QQuickItem.rotationChanged?4() -QtQuick.QQuickItem.scaleChanged?4() -QtQuick.QQuickItem.xChanged?4() -QtQuick.QQuickItem.yChanged?4() -QtQuick.QQuickItem.widthChanged?4() -QtQuick.QQuickItem.heightChanged?4() -QtQuick.QQuickItem.zChanged?4() -QtQuick.QQuickItem.implicitWidthChanged?4() -QtQuick.QQuickItem.implicitHeightChanged?4() -QtQuick.QQuickItem.event?4(QEvent) -> bool -QtQuick.QQuickItem.isComponentComplete?4() -> bool -QtQuick.QQuickItem.itemChange?4(QQuickItem.ItemChange, QQuickItem.ItemChangeData) -QtQuick.QQuickItem.updateInputMethod?4(unknown-type queries=Qt.ImQueryInput) -QtQuick.QQuickItem.widthValid?4() -> bool -QtQuick.QQuickItem.heightValid?4() -> bool -QtQuick.QQuickItem.classBegin?4() -QtQuick.QQuickItem.componentComplete?4() -QtQuick.QQuickItem.keyPressEvent?4(QKeyEvent) -QtQuick.QQuickItem.keyReleaseEvent?4(QKeyEvent) -QtQuick.QQuickItem.inputMethodEvent?4(QInputMethodEvent) -QtQuick.QQuickItem.focusInEvent?4(QFocusEvent) -QtQuick.QQuickItem.focusOutEvent?4(QFocusEvent) -QtQuick.QQuickItem.mousePressEvent?4(QMouseEvent) -QtQuick.QQuickItem.mouseMoveEvent?4(QMouseEvent) -QtQuick.QQuickItem.mouseReleaseEvent?4(QMouseEvent) -QtQuick.QQuickItem.mouseDoubleClickEvent?4(QMouseEvent) -QtQuick.QQuickItem.mouseUngrabEvent?4() -QtQuick.QQuickItem.touchUngrabEvent?4() -QtQuick.QQuickItem.wheelEvent?4(QWheelEvent) -QtQuick.QQuickItem.touchEvent?4(QTouchEvent) -QtQuick.QQuickItem.hoverEnterEvent?4(QHoverEvent) -QtQuick.QQuickItem.hoverMoveEvent?4(QHoverEvent) -QtQuick.QQuickItem.hoverLeaveEvent?4(QHoverEvent) -QtQuick.QQuickItem.dragEnterEvent?4(QDragEnterEvent) -QtQuick.QQuickItem.dragMoveEvent?4(QDragMoveEvent) -QtQuick.QQuickItem.dragLeaveEvent?4(QDragLeaveEvent) -QtQuick.QQuickItem.dropEvent?4(QDropEvent) -QtQuick.QQuickItem.childMouseEventFilter?4(QQuickItem, QEvent) -> bool -QtQuick.QQuickItem.geometryChange?4(QRectF, QRectF) -QtQuick.QQuickItem.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode -QtQuick.QQuickItem.releaseResources?4() -QtQuick.QQuickItem.updatePolish?4() -QtQuick.QQuickItem.activeFocusOnTab?4() -> bool -QtQuick.QQuickItem.setActiveFocusOnTab?4(bool) -QtQuick.QQuickItem.setFocus?4(bool, Qt.FocusReason) -QtQuick.QQuickItem.forceActiveFocus?4(Qt.FocusReason) -QtQuick.QQuickItem.nextItemInFocusChain?4(bool forward=True) -> QQuickItem -QtQuick.QQuickItem.activeFocusOnTabChanged?4(bool) -QtQuick.QQuickItem.windowChanged?4(QQuickWindow) -QtQuick.QQuickItem.resetAntialiasing?4() -QtQuick.QQuickItem.grabToImage?4(QSize targetSize=QSize()) -> QQuickItemGrabResult -QtQuick.QQuickItem.isAncestorOf?4(QQuickItem) -> bool -QtQuick.QQuickItem.mapToGlobal?4(QPointF) -> QPointF -QtQuick.QQuickItem.mapFromGlobal?4(QPointF) -> QPointF -QtQuick.QQuickItem.size?4() -> QSizeF -QtQuick.QQuickItem.acceptTouchEvents?4() -> bool -QtQuick.QQuickItem.setAcceptTouchEvents?4(bool) -QtQuick.QQuickItem.containmentMask?4() -> QObject -QtQuick.QQuickItem.setContainmentMask?4(QObject) -QtQuick.QQuickItem.containmentMaskChanged?4() -QtQuick.QQuickItem.viewportItem?4() -> QQuickItem -QtQuick.QQuickItem.ensurePolished?4() -QtQuick.QQuickItem.dumpItemTree?4() -QtQuick.QQuickItem.focusPolicy?4() -> Qt.FocusPolicy -QtQuick.QQuickItem.setFocusPolicy?4(Qt.FocusPolicy) -QtQuick.QQuickItem.focusPolicyChanged?4(Qt.FocusPolicy) -QtQuick.QQuickFramebufferObject?1(QQuickItem parent=None) -QtQuick.QQuickFramebufferObject.__init__?1(self, QQuickItem parent=None) -QtQuick.QQuickFramebufferObject.textureFollowsItemSize?4() -> bool -QtQuick.QQuickFramebufferObject.setTextureFollowsItemSize?4(bool) -QtQuick.QQuickFramebufferObject.createRenderer?4() -> QQuickFramebufferObject.Renderer -QtQuick.QQuickFramebufferObject.geometryChange?4(QRectF, QRectF) -QtQuick.QQuickFramebufferObject.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode -QtQuick.QQuickFramebufferObject.textureFollowsItemSizeChanged?4(bool) -QtQuick.QQuickFramebufferObject.isTextureProvider?4() -> bool -QtQuick.QQuickFramebufferObject.textureProvider?4() -> QSGTextureProvider -QtQuick.QQuickFramebufferObject.releaseResources?4() -QtQuick.QQuickFramebufferObject.mirrorVertically?4() -> bool -QtQuick.QQuickFramebufferObject.setMirrorVertically?4(bool) -QtQuick.QQuickFramebufferObject.mirrorVerticallyChanged?4(bool) -QtQuick.QQuickFramebufferObject.Renderer?1() -QtQuick.QQuickFramebufferObject.Renderer.__init__?1(self) -QtQuick.QQuickFramebufferObject.Renderer?1(QQuickFramebufferObject.Renderer) -QtQuick.QQuickFramebufferObject.Renderer.__init__?1(self, QQuickFramebufferObject.Renderer) -QtQuick.QQuickFramebufferObject.Renderer.render?4() -QtQuick.QQuickFramebufferObject.Renderer.createFramebufferObject?4(QSize) -> QOpenGLFramebufferObject -QtQuick.QQuickFramebufferObject.Renderer.synchronize?4(QQuickFramebufferObject) -QtQuick.QQuickFramebufferObject.Renderer.framebufferObject?4() -> QOpenGLFramebufferObject -QtQuick.QQuickFramebufferObject.Renderer.update?4() -QtQuick.QQuickFramebufferObject.Renderer.invalidateFramebufferObject?4() -QtQuick.QQuickGraphicsConfiguration?1() -QtQuick.QQuickGraphicsConfiguration.__init__?1(self) -QtQuick.QQuickGraphicsConfiguration?1(QQuickGraphicsConfiguration) -QtQuick.QQuickGraphicsConfiguration.__init__?1(self, QQuickGraphicsConfiguration) -QtQuick.QQuickGraphicsConfiguration.setDeviceExtensions?4(QByteArrayList) -QtQuick.QQuickGraphicsConfiguration.deviceExtensions?4() -> QByteArrayList -QtQuick.QQuickGraphicsConfiguration.setDepthBufferFor2D?4(bool) -QtQuick.QQuickGraphicsConfiguration.isDepthBufferEnabledFor2D?4() -> bool -QtQuick.QQuickGraphicsConfiguration.preferredInstanceExtensions?4() -> QByteArrayList -QtQuick.QQuickGraphicsConfiguration.setDebugLayer?4(bool) -QtQuick.QQuickGraphicsConfiguration.isDebugLayerEnabled?4() -> bool -QtQuick.QQuickGraphicsConfiguration.setDebugMarkers?4(bool) -QtQuick.QQuickGraphicsConfiguration.isDebugMarkersEnabled?4() -> bool -QtQuick.QQuickGraphicsConfiguration.setPreferSoftwareDevice?4(bool) -QtQuick.QQuickGraphicsConfiguration.prefersSoftwareDevice?4() -> bool -QtQuick.QQuickGraphicsConfiguration.setAutomaticPipelineCache?4(bool) -QtQuick.QQuickGraphicsConfiguration.isAutomaticPipelineCacheEnabled?4() -> bool -QtQuick.QQuickGraphicsConfiguration.setPipelineCacheSaveFile?4(QString) -QtQuick.QQuickGraphicsConfiguration.pipelineCacheSaveFile?4() -> QString -QtQuick.QQuickGraphicsConfiguration.setPipelineCacheLoadFile?4(QString) -QtQuick.QQuickGraphicsConfiguration.pipelineCacheLoadFile?4() -> QString -QtQuick.QQuickGraphicsConfiguration.setTimestamps?4(bool) -QtQuick.QQuickGraphicsConfiguration.timestampsEnabled?4() -> bool -QtQuick.QQuickGraphicsDevice?1() -QtQuick.QQuickGraphicsDevice.__init__?1(self) -QtQuick.QQuickGraphicsDevice?1(QQuickGraphicsDevice) -QtQuick.QQuickGraphicsDevice.__init__?1(self, QQuickGraphicsDevice) -QtQuick.QQuickGraphicsDevice.isNull?4() -> bool -QtQuick.QQuickGraphicsDevice.fromOpenGLContext?4(QOpenGLContext) -> QQuickGraphicsDevice -QtQuick.QQuickTextureFactory?1() -QtQuick.QQuickTextureFactory.__init__?1(self) -QtQuick.QQuickTextureFactory.createTexture?4(QQuickWindow) -> QSGTexture -QtQuick.QQuickTextureFactory.textureSize?4() -> QSize -QtQuick.QQuickTextureFactory.textureByteCount?4() -> int -QtQuick.QQuickTextureFactory.image?4() -> QImage -QtQuick.QQuickTextureFactory.textureFactoryForImage?4(QImage) -> QQuickTextureFactory -QtQuick.QQuickImageProvider?1(QQmlImageProviderBase.ImageType, unknown-type flags=QQmlImageProviderBase.Flags()) -QtQuick.QQuickImageProvider.__init__?1(self, QQmlImageProviderBase.ImageType, unknown-type flags=QQmlImageProviderBase.Flags()) -QtQuick.QQuickImageProvider.imageType?4() -> QQmlImageProviderBase.ImageType -QtQuick.QQuickImageProvider.flags?4() -> unknown-type -QtQuick.QQuickImageProvider.requestImage?4(QString, QSize) -> (QImage, QSize) -QtQuick.QQuickImageProvider.requestPixmap?4(QString, QSize) -> (QPixmap, QSize) -QtQuick.QQuickImageProvider.requestTexture?4(QString, QSize) -> (QQuickTextureFactory, QSize) -QtQuick.QQuickImageResponse?1() -QtQuick.QQuickImageResponse.__init__?1(self) -QtQuick.QQuickImageResponse.textureFactory?4() -> QQuickTextureFactory -QtQuick.QQuickImageResponse.errorString?4() -> QString -QtQuick.QQuickImageResponse.cancel?4() -QtQuick.QQuickImageResponse.finished?4() -QtQuick.QQuickAsyncImageProvider?1() -QtQuick.QQuickAsyncImageProvider.__init__?1(self) -QtQuick.QQuickAsyncImageProvider.requestImageResponse?4(QString, QSize) -> QQuickImageResponse -QtQuick.QQuickItem.ItemChangeData.boolValue?7 -QtQuick.QQuickItem.ItemChangeData.item?7 -QtQuick.QQuickItem.ItemChangeData.realValue?7 -QtQuick.QQuickItem.ItemChangeData.window?7 -QtQuick.QQuickItem.ItemChangeData?1(QQuickItem) -QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickItem) -QtQuick.QQuickItem.ItemChangeData?1(QQuickWindow) -QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickWindow) -QtQuick.QQuickItem.ItemChangeData?1(float) -QtQuick.QQuickItem.ItemChangeData.__init__?1(self, float) -QtQuick.QQuickItem.ItemChangeData?1(bool) -QtQuick.QQuickItem.ItemChangeData.__init__?1(self, bool) -QtQuick.QQuickItem.ItemChangeData?1(QQuickItem.ItemChangeData) -QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickItem.ItemChangeData) -QtQuick.QQuickItem.UpdatePaintNodeData.transformNode?7 -QtQuick.QQuickItem.UpdatePaintNodeData?1(QQuickItem.UpdatePaintNodeData) -QtQuick.QQuickItem.UpdatePaintNodeData.__init__?1(self, QQuickItem.UpdatePaintNodeData) -QtQuick.QQuickItemGrabResult.image?4() -> QImage -QtQuick.QQuickItemGrabResult.url?4() -> QUrl -QtQuick.QQuickItemGrabResult.saveToFile?4(QString) -> bool -QtQuick.QQuickItemGrabResult.saveToFile?4(QUrl) -> bool -QtQuick.QQuickItemGrabResult.event?4(QEvent) -> bool -QtQuick.QQuickItemGrabResult.ready?4() -QtQuick.QQuickPaintedItem.PerformanceHint?10 -QtQuick.QQuickPaintedItem.PerformanceHint.FastFBOResizing?10 -QtQuick.QQuickPaintedItem.RenderTarget?10 -QtQuick.QQuickPaintedItem.RenderTarget.Image?10 -QtQuick.QQuickPaintedItem.RenderTarget.FramebufferObject?10 -QtQuick.QQuickPaintedItem.RenderTarget.InvertedYFramebufferObject?10 -QtQuick.QQuickPaintedItem?1(QQuickItem parent=None) -QtQuick.QQuickPaintedItem.__init__?1(self, QQuickItem parent=None) -QtQuick.QQuickPaintedItem.update?4(QRect rect=QRect()) -QtQuick.QQuickPaintedItem.opaquePainting?4() -> bool -QtQuick.QQuickPaintedItem.setOpaquePainting?4(bool) -QtQuick.QQuickPaintedItem.antialiasing?4() -> bool -QtQuick.QQuickPaintedItem.setAntialiasing?4(bool) -QtQuick.QQuickPaintedItem.mipmap?4() -> bool -QtQuick.QQuickPaintedItem.setMipmap?4(bool) -QtQuick.QQuickPaintedItem.performanceHints?4() -> unknown-type -QtQuick.QQuickPaintedItem.setPerformanceHint?4(QQuickPaintedItem.PerformanceHint, bool enabled=True) -QtQuick.QQuickPaintedItem.setPerformanceHints?4(unknown-type) -QtQuick.QQuickPaintedItem.contentsBoundingRect?4() -> QRectF -QtQuick.QQuickPaintedItem.contentsSize?4() -> QSize -QtQuick.QQuickPaintedItem.setContentsSize?4(QSize) -QtQuick.QQuickPaintedItem.resetContentsSize?4() -QtQuick.QQuickPaintedItem.contentsScale?4() -> float -QtQuick.QQuickPaintedItem.setContentsScale?4(float) -QtQuick.QQuickPaintedItem.fillColor?4() -> QColor -QtQuick.QQuickPaintedItem.setFillColor?4(QColor) -QtQuick.QQuickPaintedItem.renderTarget?4() -> QQuickPaintedItem.RenderTarget -QtQuick.QQuickPaintedItem.setRenderTarget?4(QQuickPaintedItem.RenderTarget) -QtQuick.QQuickPaintedItem.paint?4(QPainter) -QtQuick.QQuickPaintedItem.fillColorChanged?4() -QtQuick.QQuickPaintedItem.contentsSizeChanged?4() -QtQuick.QQuickPaintedItem.contentsScaleChanged?4() -QtQuick.QQuickPaintedItem.renderTargetChanged?4() -QtQuick.QQuickPaintedItem.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode -QtQuick.QQuickPaintedItem.isTextureProvider?4() -> bool -QtQuick.QQuickPaintedItem.textureProvider?4() -> QSGTextureProvider -QtQuick.QQuickPaintedItem.releaseResources?4() -QtQuick.QQuickPaintedItem.itemChange?4(QQuickItem.ItemChange, QQuickItem.ItemChangeData) -QtQuick.QQuickPaintedItem.textureSize?4() -> QSize -QtQuick.QQuickPaintedItem.setTextureSize?4(QSize) -QtQuick.QQuickPaintedItem.textureSizeChanged?4() -QtQuick.QQuickRenderControl?1(QObject parent=None) -QtQuick.QQuickRenderControl.__init__?1(self, QObject parent=None) -QtQuick.QQuickRenderControl.initialize?4() -> bool -QtQuick.QQuickRenderControl.invalidate?4() -QtQuick.QQuickRenderControl.polishItems?4() -QtQuick.QQuickRenderControl.render?4() -QtQuick.QQuickRenderControl.sync?4() -> bool -QtQuick.QQuickRenderControl.renderWindowFor?4(QQuickWindow, QPoint offset=None) -> QWindow -QtQuick.QQuickRenderControl.renderWindow?4(QPoint) -> QWindow -QtQuick.QQuickRenderControl.prepareThread?4(QThread) -QtQuick.QQuickRenderControl.renderRequested?4() -QtQuick.QQuickRenderControl.sceneChanged?4() -QtQuick.QQuickRenderControl.setSamples?4(int) -QtQuick.QQuickRenderControl.samples?4() -> int -QtQuick.QQuickRenderControl.beginFrame?4() -QtQuick.QQuickRenderControl.endFrame?4() -QtQuick.QQuickRenderControl.window?4() -> QQuickWindow -QtQuick.QQuickRenderTarget?1() -QtQuick.QQuickRenderTarget.__init__?1(self) -QtQuick.QQuickRenderTarget?1(QQuickRenderTarget) -QtQuick.QQuickRenderTarget.__init__?1(self, QQuickRenderTarget) -QtQuick.QQuickRenderTarget.isNull?4() -> bool -QtQuick.QQuickRenderTarget.fromOpenGLTexture?4(int, QSize, int sampleCount=1) -> QQuickRenderTarget -QtQuick.QQuickRenderTarget.fromOpenGLTexture?4(int, int, QSize, int sampleCount=1) -> QQuickRenderTarget -QtQuick.QQuickRenderTarget.fromOpenGLRenderBuffer?4(int, QSize, int sampleCount=1) -> QQuickRenderTarget -QtQuick.QQuickRenderTarget.fromPaintDevice?4(QPaintDevice) -> QQuickRenderTarget -QtQuick.QQuickRenderTarget.devicePixelRatio?4() -> float -QtQuick.QQuickRenderTarget.setDevicePixelRatio?4(float) -QtQuick.QQuickRenderTarget.mirrorVertically?4() -> bool -QtQuick.QQuickRenderTarget.setMirrorVertically?4(bool) -QtQuick.QQuickTextDocument.Status?10 -QtQuick.QQuickTextDocument.Status.Null?10 -QtQuick.QQuickTextDocument.Status.Loading?10 -QtQuick.QQuickTextDocument.Status.Loaded?10 -QtQuick.QQuickTextDocument.Status.Saving?10 -QtQuick.QQuickTextDocument.Status.Saved?10 -QtQuick.QQuickTextDocument.Status.ReadError?10 -QtQuick.QQuickTextDocument.Status.WriteError?10 -QtQuick.QQuickTextDocument.Status.NonLocalFileError?10 -QtQuick.QQuickTextDocument?1(QQuickItem) -QtQuick.QQuickTextDocument.__init__?1(self, QQuickItem) -QtQuick.QQuickTextDocument.textDocument?4() -> QTextDocument -QtQuick.QQuickTextDocument.source?4() -> QUrl -QtQuick.QQuickTextDocument.setSource?4(QUrl) -QtQuick.QQuickTextDocument.isModified?4() -> bool -QtQuick.QQuickTextDocument.setModified?4(bool) -QtQuick.QQuickTextDocument.setTextDocument?4(QTextDocument) -QtQuick.QQuickTextDocument.save?4() -QtQuick.QQuickTextDocument.saveAs?4(QUrl) -QtQuick.QQuickTextDocument.status?4() -> QQuickTextDocument.Status -QtQuick.QQuickTextDocument.errorString?4() -> QString -QtQuick.QQuickTextDocument.textDocumentChanged?4() -QtQuick.QQuickTextDocument.sourceChanged?4() -QtQuick.QQuickTextDocument.modifiedChanged?4() -QtQuick.QQuickTextDocument.statusChanged?4() -QtQuick.QQuickTextDocument.errorStringChanged?4() -QtQuick.QQuickWindow.TextRenderType?10 -QtQuick.QQuickWindow.TextRenderType.QtTextRendering?10 -QtQuick.QQuickWindow.TextRenderType.NativeTextRendering?10 -QtQuick.QQuickWindow.TextRenderType.CurveTextRendering?10 -QtQuick.QQuickWindow.RenderStage?10 -QtQuick.QQuickWindow.RenderStage.BeforeSynchronizingStage?10 -QtQuick.QQuickWindow.RenderStage.AfterSynchronizingStage?10 -QtQuick.QQuickWindow.RenderStage.BeforeRenderingStage?10 -QtQuick.QQuickWindow.RenderStage.AfterRenderingStage?10 -QtQuick.QQuickWindow.RenderStage.AfterSwapStage?10 -QtQuick.QQuickWindow.RenderStage.NoStage?10 -QtQuick.QQuickWindow.SceneGraphError?10 -QtQuick.QQuickWindow.SceneGraphError.ContextNotAvailable?10 -QtQuick.QQuickWindow.CreateTextureOption?10 -QtQuick.QQuickWindow.CreateTextureOption.TextureHasAlphaChannel?10 -QtQuick.QQuickWindow.CreateTextureOption.TextureHasMipmaps?10 -QtQuick.QQuickWindow.CreateTextureOption.TextureOwnsGLTexture?10 -QtQuick.QQuickWindow.CreateTextureOption.TextureCanUseAtlas?10 -QtQuick.QQuickWindow.CreateTextureOption.TextureIsOpaque?10 -QtQuick.QQuickWindow?1(QWindow parent=None) -QtQuick.QQuickWindow.__init__?1(self, QWindow parent=None) -QtQuick.QQuickWindow.contentItem?4() -> QQuickItem -QtQuick.QQuickWindow.activeFocusItem?4() -> QQuickItem -QtQuick.QQuickWindow.focusObject?4() -> QObject -QtQuick.QQuickWindow.mouseGrabberItem?4() -> QQuickItem -QtQuick.QQuickWindow.grabWindow?4() -> QImage -QtQuick.QQuickWindow.setRenderTarget?4(QQuickRenderTarget) -QtQuick.QQuickWindow.renderTarget?4() -> QQuickRenderTarget -QtQuick.QQuickWindow.incubationController?4() -> QQmlIncubationController -QtQuick.QQuickWindow.createTextNode?4() -> QSGTextNode -QtQuick.QQuickWindow.createTextureFromImage?4(QImage) -> QSGTexture -QtQuick.QQuickWindow.createTextureFromImage?4(QImage, unknown-type) -> QSGTexture -QtQuick.QQuickWindow.setColor?4(QColor) -QtQuick.QQuickWindow.color?4() -> QColor -QtQuick.QQuickWindow.setPersistentSceneGraph?4(bool) -QtQuick.QQuickWindow.isPersistentSceneGraph?4() -> bool -QtQuick.QQuickWindow.frameSwapped?4() -QtQuick.QQuickWindow.sceneGraphInitialized?4() -QtQuick.QQuickWindow.sceneGraphInvalidated?4() -QtQuick.QQuickWindow.beforeSynchronizing?4() -QtQuick.QQuickWindow.beforeRendering?4() -QtQuick.QQuickWindow.afterRendering?4() -QtQuick.QQuickWindow.colorChanged?4(QColor) -QtQuick.QQuickWindow.update?4() -QtQuick.QQuickWindow.releaseResources?4() -QtQuick.QQuickWindow.exposeEvent?4(QExposeEvent) -QtQuick.QQuickWindow.resizeEvent?4(QResizeEvent) -QtQuick.QQuickWindow.showEvent?4(QShowEvent) -QtQuick.QQuickWindow.hideEvent?4(QHideEvent) -QtQuick.QQuickWindow.focusInEvent?4(QFocusEvent) -QtQuick.QQuickWindow.focusOutEvent?4(QFocusEvent) -QtQuick.QQuickWindow.event?4(QEvent) -> bool -QtQuick.QQuickWindow.keyPressEvent?4(QKeyEvent) -QtQuick.QQuickWindow.keyReleaseEvent?4(QKeyEvent) -QtQuick.QQuickWindow.mousePressEvent?4(QMouseEvent) -QtQuick.QQuickWindow.mouseReleaseEvent?4(QMouseEvent) -QtQuick.QQuickWindow.mouseDoubleClickEvent?4(QMouseEvent) -QtQuick.QQuickWindow.mouseMoveEvent?4(QMouseEvent) -QtQuick.QQuickWindow.wheelEvent?4(QWheelEvent) -QtQuick.QQuickWindow.tabletEvent?4(QTabletEvent) -QtQuick.QQuickWindow.closeEvent?4(QCloseEvent) -QtQuick.QQuickWindow.hasDefaultAlphaBuffer?4() -> bool -QtQuick.QQuickWindow.setDefaultAlphaBuffer?4(bool) -QtQuick.QQuickWindow.closing?4(QQuickCloseEvent) -QtQuick.QQuickWindow.activeFocusItemChanged?4() -QtQuick.QQuickWindow.afterSynchronizing?4() -QtQuick.QQuickWindow.afterAnimating?4() -QtQuick.QQuickWindow.sceneGraphAboutToStop?4() -QtQuick.QQuickWindow.sceneGraphError?4(QQuickWindow.SceneGraphError, QString) -QtQuick.QQuickWindow.scheduleRenderJob?4(QRunnable, QQuickWindow.RenderStage) -QtQuick.QQuickWindow.effectiveDevicePixelRatio?4() -> float -QtQuick.QQuickWindow.isSceneGraphInitialized?4() -> bool -QtQuick.QQuickWindow.rendererInterface?4() -> QSGRendererInterface -QtQuick.QQuickWindow.setSceneGraphBackend?4(QString) -QtQuick.QQuickWindow.createRectangleNode?4() -> QSGRectangleNode -QtQuick.QQuickWindow.createImageNode?4() -> QSGImageNode -QtQuick.QQuickWindow.sceneGraphBackend?4() -> QString -QtQuick.QQuickWindow.textRenderType?4() -> QQuickWindow.TextRenderType -QtQuick.QQuickWindow.setTextRenderType?4(QQuickWindow.TextRenderType) -QtQuick.QQuickWindow.beginExternalCommands?4() -QtQuick.QQuickWindow.endExternalCommands?4() -QtQuick.QQuickWindow.beforeRenderPassRecording?4() -QtQuick.QQuickWindow.afterRenderPassRecording?4() -QtQuick.QQuickWindow.beforeFrameBegin?4() -QtQuick.QQuickWindow.afterFrameEnd?4() -QtQuick.QQuickWindow.setPersistentGraphics?4(bool) -QtQuick.QQuickWindow.isPersistentGraphics?4() -> bool -QtQuick.QQuickWindow.setGraphicsApi?4(QSGRendererInterface.GraphicsApi) -QtQuick.QQuickWindow.graphicsApi?4() -> QSGRendererInterface.GraphicsApi -QtQuick.QQuickWindow.setGraphicsDevice?4(QQuickGraphicsDevice) -QtQuick.QQuickWindow.graphicsDevice?4() -> QQuickGraphicsDevice -QtQuick.QQuickWindow.setGraphicsConfiguration?4(QQuickGraphicsConfiguration) -QtQuick.QQuickWindow.graphicsConfiguration?4() -> QQuickGraphicsConfiguration -QtQuick.QQuickView.Status?10 -QtQuick.QQuickView.Status.Null?10 -QtQuick.QQuickView.Status.Ready?10 -QtQuick.QQuickView.Status.Loading?10 -QtQuick.QQuickView.Status.Error?10 -QtQuick.QQuickView.ResizeMode?10 -QtQuick.QQuickView.ResizeMode.SizeViewToRootObject?10 -QtQuick.QQuickView.ResizeMode.SizeRootObjectToView?10 -QtQuick.QQuickView?1(QWindow parent=None) -QtQuick.QQuickView.__init__?1(self, QWindow parent=None) -QtQuick.QQuickView?1(QQmlEngine, QWindow) -QtQuick.QQuickView.__init__?1(self, QQmlEngine, QWindow) -QtQuick.QQuickView?1(QUrl, QWindow parent=None) -QtQuick.QQuickView.__init__?1(self, QUrl, QWindow parent=None) -QtQuick.QQuickView?1(QAnyStringView, QAnyStringView, QWindow parent=None) -QtQuick.QQuickView.__init__?1(self, QAnyStringView, QAnyStringView, QWindow parent=None) -QtQuick.QQuickView.source?4() -> QUrl -QtQuick.QQuickView.engine?4() -> QQmlEngine -QtQuick.QQuickView.rootContext?4() -> QQmlContext -QtQuick.QQuickView.rootObject?4() -> QQuickItem -QtQuick.QQuickView.resizeMode?4() -> QQuickView.ResizeMode -QtQuick.QQuickView.setResizeMode?4(QQuickView.ResizeMode) -QtQuick.QQuickView.status?4() -> QQuickView.Status -QtQuick.QQuickView.errors?4() -> unknown-type -QtQuick.QQuickView.initialSize?4() -> QSize -QtQuick.QQuickView.setSource?4(QUrl) -QtQuick.QQuickView.setInitialProperties?4(unknown-type) -QtQuick.QQuickView.loadFromModule?4(QAnyStringView, QAnyStringView) -QtQuick.QQuickView.statusChanged?4(QQuickView.Status) -QtQuick.QQuickView.resizeEvent?4(QResizeEvent) -QtQuick.QQuickView.timerEvent?4(QTimerEvent) -QtQuick.QQuickView.keyPressEvent?4(QKeyEvent) -QtQuick.QQuickView.keyReleaseEvent?4(QKeyEvent) -QtQuick.QQuickView.mousePressEvent?4(QMouseEvent) -QtQuick.QQuickView.mouseReleaseEvent?4(QMouseEvent) -QtQuick.QQuickView.mouseMoveEvent?4(QMouseEvent) -QtQuick.QSGMaterial.Flag?10 -QtQuick.QSGMaterial.Flag.Blending?10 -QtQuick.QSGMaterial.Flag.RequiresDeterminant?10 -QtQuick.QSGMaterial.Flag.RequiresFullMatrixExceptTranslate?10 -QtQuick.QSGMaterial.Flag.RequiresFullMatrix?10 -QtQuick.QSGMaterial.Flag.NoBatching?10 -QtQuick.QSGMaterial.Flag.CustomCompileStep?10 -QtQuick.QSGMaterial?1() -QtQuick.QSGMaterial.__init__?1(self) -QtQuick.QSGMaterial.type?4() -> QSGMaterialType -QtQuick.QSGMaterial.createShader?4(QSGRendererInterface.RenderMode) -> QSGMaterialShader -QtQuick.QSGMaterial.compare?4(QSGMaterial) -> int -QtQuick.QSGMaterial.flags?4() -> unknown-type -QtQuick.QSGMaterial.setFlag?4(unknown-type, bool enabled=True) -QtQuick.QSGFlatColorMaterial?1() -QtQuick.QSGFlatColorMaterial.__init__?1(self) -QtQuick.QSGFlatColorMaterial.type?4() -> QSGMaterialType -QtQuick.QSGFlatColorMaterial.createShader?4(QSGRendererInterface.RenderMode) -> QSGMaterialShader -QtQuick.QSGFlatColorMaterial.setColor?4(QColor) -QtQuick.QSGFlatColorMaterial.color?4() -> QColor -QtQuick.QSGFlatColorMaterial.compare?4(QSGMaterial) -> int -QtQuick.QSGGeometry.Type?10 -QtQuick.QSGGeometry.Type.ByteType?10 -QtQuick.QSGGeometry.Type.UnsignedByteType?10 -QtQuick.QSGGeometry.Type.ShortType?10 -QtQuick.QSGGeometry.Type.UnsignedShortType?10 -QtQuick.QSGGeometry.Type.IntType?10 -QtQuick.QSGGeometry.Type.UnsignedIntType?10 -QtQuick.QSGGeometry.Type.FloatType?10 -QtQuick.QSGGeometry.Type.Bytes2Type?10 -QtQuick.QSGGeometry.Type.Bytes3Type?10 -QtQuick.QSGGeometry.Type.Bytes4Type?10 -QtQuick.QSGGeometry.Type.DoubleType?10 -QtQuick.QSGGeometry.DrawingMode?10 -QtQuick.QSGGeometry.DrawingMode.DrawPoints?10 -QtQuick.QSGGeometry.DrawingMode.DrawLines?10 -QtQuick.QSGGeometry.DrawingMode.DrawLineLoop?10 -QtQuick.QSGGeometry.DrawingMode.DrawLineStrip?10 -QtQuick.QSGGeometry.DrawingMode.DrawTriangles?10 -QtQuick.QSGGeometry.DrawingMode.DrawTriangleStrip?10 -QtQuick.QSGGeometry.DrawingMode.DrawTriangleFan?10 -QtQuick.QSGGeometry.AttributeType?10 -QtQuick.QSGGeometry.AttributeType.UnknownAttribute?10 -QtQuick.QSGGeometry.AttributeType.PositionAttribute?10 -QtQuick.QSGGeometry.AttributeType.ColorAttribute?10 -QtQuick.QSGGeometry.AttributeType.TexCoordAttribute?10 -QtQuick.QSGGeometry.AttributeType.TexCoord1Attribute?10 -QtQuick.QSGGeometry.AttributeType.TexCoord2Attribute?10 -QtQuick.QSGGeometry.DataPattern?10 -QtQuick.QSGGeometry.DataPattern.AlwaysUploadPattern?10 -QtQuick.QSGGeometry.DataPattern.StreamPattern?10 -QtQuick.QSGGeometry.DataPattern.DynamicPattern?10 -QtQuick.QSGGeometry.DataPattern.StaticPattern?10 -QtQuick.QSGGeometry?1(QSGGeometry.AttributeSet, int, int indexCount=0, int indexType=QSGGeometry.UnsignedShortType) -QtQuick.QSGGeometry.__init__?1(self, QSGGeometry.AttributeSet, int, int indexCount=0, int indexType=QSGGeometry.UnsignedShortType) -QtQuick.QSGGeometry.defaultAttributes_Point2D?4() -> QSGGeometry.AttributeSet -QtQuick.QSGGeometry.defaultAttributes_TexturedPoint2D?4() -> QSGGeometry.AttributeSet -QtQuick.QSGGeometry.defaultAttributes_ColoredPoint2D?4() -> QSGGeometry.AttributeSet -QtQuick.QSGGeometry.setDrawingMode?4(int) -QtQuick.QSGGeometry.drawingMode?4() -> int -QtQuick.QSGGeometry.allocate?4(int, int indexCount=0) -QtQuick.QSGGeometry.vertexCount?4() -> int -QtQuick.QSGGeometry.vertexData?4() -> PyQt6.sip.voidptr -QtQuick.QSGGeometry.indexType?4() -> int -QtQuick.QSGGeometry.indexCount?4() -> int -QtQuick.QSGGeometry.indexData?4() -> PyQt6.sip.voidptr -QtQuick.QSGGeometry.attributeCount?4() -> int -QtQuick.QSGGeometry.attributes?4() -> Any -QtQuick.QSGGeometry.sizeOfVertex?4() -> int -QtQuick.QSGGeometry.updateRectGeometry?4(QSGGeometry, QRectF) -QtQuick.QSGGeometry.updateTexturedRectGeometry?4(QSGGeometry, QRectF, QRectF) -QtQuick.QSGGeometry.setIndexDataPattern?4(QSGGeometry.DataPattern) -QtQuick.QSGGeometry.indexDataPattern?4() -> QSGGeometry.DataPattern -QtQuick.QSGGeometry.setVertexDataPattern?4(QSGGeometry.DataPattern) -QtQuick.QSGGeometry.vertexDataPattern?4() -> QSGGeometry.DataPattern -QtQuick.QSGGeometry.markIndexDataDirty?4() -QtQuick.QSGGeometry.markVertexDataDirty?4() -QtQuick.QSGGeometry.lineWidth?4() -> float -QtQuick.QSGGeometry.setLineWidth?4(float) -QtQuick.QSGGeometry.indexDataAsUInt?4() -> Any -QtQuick.QSGGeometry.indexDataAsUShort?4() -> Any -QtQuick.QSGGeometry.vertexDataAsPoint2D?4() -> Any -QtQuick.QSGGeometry.vertexDataAsTexturedPoint2D?4() -> Any -QtQuick.QSGGeometry.vertexDataAsColoredPoint2D?4() -> Any -QtQuick.QSGGeometry.sizeOfIndex?4() -> int -QtQuick.QSGGeometry.updateColoredRectGeometry?4(QSGGeometry, QRectF) -QtQuick.QSGGeometry.Attribute.attributeType?7 -QtQuick.QSGGeometry.Attribute.isVertexCoordinate?7 -QtQuick.QSGGeometry.Attribute.position?7 -QtQuick.QSGGeometry.Attribute.tupleSize?7 -QtQuick.QSGGeometry.Attribute.type?7 -QtQuick.QSGGeometry.Attribute?1() -QtQuick.QSGGeometry.Attribute.__init__?1(self) -QtQuick.QSGGeometry.Attribute?1(QSGGeometry.Attribute) -QtQuick.QSGGeometry.Attribute.__init__?1(self, QSGGeometry.Attribute) -QtQuick.QSGGeometry.Attribute.create?4(int, int, int, bool isPosition=False) -> QSGGeometry.Attribute -QtQuick.QSGGeometry.Attribute.createWithAttributeType?4(int, int, int, QSGGeometry.AttributeType) -> QSGGeometry.Attribute -QtQuick.QSGGeometry.AttributeSet.attributes?7 -QtQuick.QSGGeometry.AttributeSet.count?7 -QtQuick.QSGGeometry.AttributeSet.stride?7 -QtQuick.QSGGeometry.AttributeSet?1(Any, int stride=0) -QtQuick.QSGGeometry.AttributeSet.__init__?1(self, Any, int stride=0) -QtQuick.QSGGeometry.Point2D.x?7 -QtQuick.QSGGeometry.Point2D.y?7 -QtQuick.QSGGeometry.Point2D?1() -QtQuick.QSGGeometry.Point2D.__init__?1(self) -QtQuick.QSGGeometry.Point2D?1(QSGGeometry.Point2D) -QtQuick.QSGGeometry.Point2D.__init__?1(self, QSGGeometry.Point2D) -QtQuick.QSGGeometry.Point2D.set?4(float, float) -QtQuick.QSGGeometry.TexturedPoint2D.tx?7 -QtQuick.QSGGeometry.TexturedPoint2D.ty?7 -QtQuick.QSGGeometry.TexturedPoint2D.x?7 -QtQuick.QSGGeometry.TexturedPoint2D.y?7 -QtQuick.QSGGeometry.TexturedPoint2D?1() -QtQuick.QSGGeometry.TexturedPoint2D.__init__?1(self) -QtQuick.QSGGeometry.TexturedPoint2D?1(QSGGeometry.TexturedPoint2D) -QtQuick.QSGGeometry.TexturedPoint2D.__init__?1(self, QSGGeometry.TexturedPoint2D) -QtQuick.QSGGeometry.TexturedPoint2D.set?4(float, float, float, float) -QtQuick.QSGGeometry.ColoredPoint2D.a?7 -QtQuick.QSGGeometry.ColoredPoint2D.b?7 -QtQuick.QSGGeometry.ColoredPoint2D.g?7 -QtQuick.QSGGeometry.ColoredPoint2D.r?7 -QtQuick.QSGGeometry.ColoredPoint2D.x?7 -QtQuick.QSGGeometry.ColoredPoint2D.y?7 -QtQuick.QSGGeometry.ColoredPoint2D?1() -QtQuick.QSGGeometry.ColoredPoint2D.__init__?1(self) -QtQuick.QSGGeometry.ColoredPoint2D?1(QSGGeometry.ColoredPoint2D) -QtQuick.QSGGeometry.ColoredPoint2D.__init__?1(self, QSGGeometry.ColoredPoint2D) -QtQuick.QSGGeometry.ColoredPoint2D.set?4(float, float, int, int, int, int) -QtQuick.QSGNode.DirtyStateBit?10 -QtQuick.QSGNode.DirtyStateBit.DirtyMatrix?10 -QtQuick.QSGNode.DirtyStateBit.DirtyNodeAdded?10 -QtQuick.QSGNode.DirtyStateBit.DirtyNodeRemoved?10 -QtQuick.QSGNode.DirtyStateBit.DirtyGeometry?10 -QtQuick.QSGNode.DirtyStateBit.DirtyMaterial?10 -QtQuick.QSGNode.DirtyStateBit.DirtyOpacity?10 -QtQuick.QSGNode.Flag?10 -QtQuick.QSGNode.Flag.OwnedByParent?10 -QtQuick.QSGNode.Flag.UsePreprocess?10 -QtQuick.QSGNode.Flag.OwnsGeometry?10 -QtQuick.QSGNode.Flag.OwnsMaterial?10 -QtQuick.QSGNode.Flag.OwnsOpaqueMaterial?10 -QtQuick.QSGNode.NodeType?10 -QtQuick.QSGNode.NodeType.BasicNodeType?10 -QtQuick.QSGNode.NodeType.GeometryNodeType?10 -QtQuick.QSGNode.NodeType.TransformNodeType?10 -QtQuick.QSGNode.NodeType.ClipNodeType?10 -QtQuick.QSGNode.NodeType.OpacityNodeType?10 -QtQuick.QSGNode?1() -QtQuick.QSGNode.__init__?1(self) -QtQuick.QSGNode.parent?4() -> QSGNode -QtQuick.QSGNode.removeChildNode?4(QSGNode) -QtQuick.QSGNode.removeAllChildNodes?4() -QtQuick.QSGNode.prependChildNode?4(QSGNode) -QtQuick.QSGNode.appendChildNode?4(QSGNode) -QtQuick.QSGNode.insertChildNodeBefore?4(QSGNode, QSGNode) -QtQuick.QSGNode.insertChildNodeAfter?4(QSGNode, QSGNode) -QtQuick.QSGNode.childCount?4() -> int -QtQuick.QSGNode.childAtIndex?4(int) -> QSGNode -QtQuick.QSGNode.firstChild?4() -> QSGNode -QtQuick.QSGNode.lastChild?4() -> QSGNode -QtQuick.QSGNode.nextSibling?4() -> QSGNode -QtQuick.QSGNode.previousSibling?4() -> QSGNode -QtQuick.QSGNode.type?4() -> QSGNode.NodeType -QtQuick.QSGNode.markDirty?4(unknown-type) -QtQuick.QSGNode.isSubtreeBlocked?4() -> bool -QtQuick.QSGNode.flags?4() -> unknown-type -QtQuick.QSGNode.setFlag?4(QSGNode.Flag, bool enabled=True) -QtQuick.QSGNode.setFlags?4(unknown-type, bool enabled=True) -QtQuick.QSGNode.preprocess?4() -QtQuick.QSGBasicGeometryNode.setGeometry?4(QSGGeometry) -QtQuick.QSGBasicGeometryNode.geometry?4() -> QSGGeometry -QtQuick.QSGGeometryNode?1() -QtQuick.QSGGeometryNode.__init__?1(self) -QtQuick.QSGGeometryNode.setMaterial?4(QSGMaterial) -QtQuick.QSGGeometryNode.material?4() -> QSGMaterial -QtQuick.QSGGeometryNode.setOpaqueMaterial?4(QSGMaterial) -QtQuick.QSGGeometryNode.opaqueMaterial?4() -> QSGMaterial -QtQuick.QSGImageNode.TextureCoordinatesTransformFlag?10 -QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.NoTransform?10 -QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.MirrorHorizontally?10 -QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.MirrorVertically?10 -QtQuick.QSGImageNode.setRect?4(QRectF) -QtQuick.QSGImageNode.setRect?4(float, float, float, float) -QtQuick.QSGImageNode.rect?4() -> QRectF -QtQuick.QSGImageNode.setSourceRect?4(QRectF) -QtQuick.QSGImageNode.setSourceRect?4(float, float, float, float) -QtQuick.QSGImageNode.sourceRect?4() -> QRectF -QtQuick.QSGImageNode.setTexture?4(QSGTexture) -QtQuick.QSGImageNode.texture?4() -> QSGTexture -QtQuick.QSGImageNode.setFiltering?4(QSGTexture.Filtering) -QtQuick.QSGImageNode.filtering?4() -> QSGTexture.Filtering -QtQuick.QSGImageNode.setMipmapFiltering?4(QSGTexture.Filtering) -QtQuick.QSGImageNode.mipmapFiltering?4() -> QSGTexture.Filtering -QtQuick.QSGImageNode.setTextureCoordinatesTransform?4(unknown-type) -QtQuick.QSGImageNode.textureCoordinatesTransform?4() -> unknown-type -QtQuick.QSGImageNode.setOwnsTexture?4(bool) -QtQuick.QSGImageNode.ownsTexture?4() -> bool -QtQuick.QSGImageNode.rebuildGeometry?4(QSGGeometry, QSGTexture, QRectF, QRectF, unknown-type) -QtQuick.QSGImageNode.setAnisotropyLevel?4(QSGTexture.AnisotropyLevel) -QtQuick.QSGImageNode.anisotropyLevel?4() -> QSGTexture.AnisotropyLevel -QtQuick.QSGMaterialShader.Stage?10 -QtQuick.QSGMaterialShader.Stage.VertexStage?10 -QtQuick.QSGMaterialShader.Stage.FragmentStage?10 -QtQuick.QSGMaterialShader.Flag?10 -QtQuick.QSGMaterialShader.Flag.UpdatesGraphicsPipelineState?10 -QtQuick.QSGMaterialShader?1() -QtQuick.QSGMaterialShader.__init__?1(self) -QtQuick.QSGMaterialShader.updateUniformData?4(QSGMaterialShader.RenderState, QSGMaterial, QSGMaterial) -> bool -QtQuick.QSGMaterialShader.updateSampledImage?4(QSGMaterialShader.RenderState, int, QSGMaterial, QSGMaterial) -> QSGTexture -QtQuick.QSGMaterialShader.updateGraphicsPipelineState?4(QSGMaterialShader.RenderState, QSGMaterialShader.GraphicsPipelineState, QSGMaterial, QSGMaterial) -> bool -QtQuick.QSGMaterialShader.flags?4() -> unknown-type -QtQuick.QSGMaterialShader.setFlag?4(unknown-type, bool on=True) -QtQuick.QSGMaterialShader.setFlags?4(unknown-type) -QtQuick.QSGMaterialShader.combinedImageSamplerCount?4(int) -> int -QtQuick.QSGMaterialShader.setShaderFileName?4(QSGMaterialShader.Stage, QString) -QtQuick.QSGMaterialShader.RenderState.DirtyState?10 -QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyMatrix?10 -QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyOpacity?10 -QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyCachedMaterialData?10 -QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyAll?10 -QtQuick.QSGMaterialShader.RenderState?1() -QtQuick.QSGMaterialShader.RenderState.__init__?1(self) -QtQuick.QSGMaterialShader.RenderState?1(QSGMaterialShader.RenderState) -QtQuick.QSGMaterialShader.RenderState.__init__?1(self, QSGMaterialShader.RenderState) -QtQuick.QSGMaterialShader.RenderState.dirtyStates?4() -> unknown-type -QtQuick.QSGMaterialShader.RenderState.isMatrixDirty?4() -> bool -QtQuick.QSGMaterialShader.RenderState.isOpacityDirty?4() -> bool -QtQuick.QSGMaterialShader.RenderState.opacity?4() -> float -QtQuick.QSGMaterialShader.RenderState.combinedMatrix?4() -> QMatrix4x4 -QtQuick.QSGMaterialShader.RenderState.modelViewMatrix?4() -> QMatrix4x4 -QtQuick.QSGMaterialShader.RenderState.projectionMatrix?4() -> QMatrix4x4 -QtQuick.QSGMaterialShader.RenderState.viewportRect?4() -> QRect -QtQuick.QSGMaterialShader.RenderState.deviceRect?4() -> QRect -QtQuick.QSGMaterialShader.RenderState.determinant?4() -> float -QtQuick.QSGMaterialShader.RenderState.devicePixelRatio?4() -> float -QtQuick.QSGMaterialShader.RenderState.uniformData?4() -> QByteArray -QtQuick.QSGMaterialShader.GraphicsPipelineState.PolygonMode?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.PolygonMode.Fill?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.PolygonMode.Line?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.CullMode?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.CullMode.CullNone?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.CullMode.CullFront?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.CullMode.CullBack?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent.R?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent.G?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent.B?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent.A?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.Zero?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.One?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.SrcColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusSrcColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.DstColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusDstColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.SrcAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusSrcAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.DstAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusDstAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.ConstantColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusConstantColor?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.ConstantAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusConstantAlpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.SrcAlphaSaturate?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.Src1Color?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusSrc1Color?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.Src1Alpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.BlendFactor.OneMinusSrc1Alpha?10 -QtQuick.QSGMaterialShader.GraphicsPipelineState.blendConstant?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.blendEnable?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.colorWrite?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.cullMode?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.dstAlpha?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.dstColor?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.polygonMode?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.separateBlendFactors?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.srcAlpha?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState.srcColor?7 -QtQuick.QSGMaterialShader.GraphicsPipelineState?1() -QtQuick.QSGMaterialShader.GraphicsPipelineState.__init__?1(self) -QtQuick.QSGMaterialShader.GraphicsPipelineState?1(QSGMaterialShader.GraphicsPipelineState) -QtQuick.QSGMaterialShader.GraphicsPipelineState.__init__?1(self, QSGMaterialShader.GraphicsPipelineState) -QtQuick.QSGMaterialType?1() -QtQuick.QSGMaterialType.__init__?1(self) -QtQuick.QSGMaterialType?1(QSGMaterialType) -QtQuick.QSGMaterialType.__init__?1(self, QSGMaterialType) -QtQuick.QSGClipNode?1() -QtQuick.QSGClipNode.__init__?1(self) -QtQuick.QSGClipNode.setIsRectangular?4(bool) -QtQuick.QSGClipNode.isRectangular?4() -> bool -QtQuick.QSGClipNode.setClipRect?4(QRectF) -QtQuick.QSGClipNode.clipRect?4() -> QRectF -QtQuick.QSGTransformNode?1() -QtQuick.QSGTransformNode.__init__?1(self) -QtQuick.QSGTransformNode.setMatrix?4(QMatrix4x4) -QtQuick.QSGTransformNode.matrix?4() -> QMatrix4x4 -QtQuick.QSGOpacityNode?1() -QtQuick.QSGOpacityNode.__init__?1(self) -QtQuick.QSGOpacityNode.setOpacity?4(float) -QtQuick.QSGOpacityNode.opacity?4() -> float -QtQuick.QSGRectangleNode.setRect?4(QRectF) -QtQuick.QSGRectangleNode.setRect?4(float, float, float, float) -QtQuick.QSGRectangleNode.rect?4() -> QRectF -QtQuick.QSGRectangleNode.setColor?4(QColor) -QtQuick.QSGRectangleNode.color?4() -> QColor -QtQuick.QSGRendererInterface.RenderMode?10 -QtQuick.QSGRendererInterface.RenderMode.RenderMode2D?10 -QtQuick.QSGRendererInterface.RenderMode.RenderMode2DNoDepthBuffer?10 -QtQuick.QSGRendererInterface.RenderMode.RenderMode3D?10 -QtQuick.QSGRendererInterface.ShaderSourceType?10 -QtQuick.QSGRendererInterface.ShaderSourceType.ShaderSourceString?10 -QtQuick.QSGRendererInterface.ShaderSourceType.ShaderSourceFile?10 -QtQuick.QSGRendererInterface.ShaderSourceType.ShaderByteCode?10 -QtQuick.QSGRendererInterface.ShaderCompilationType?10 -QtQuick.QSGRendererInterface.ShaderCompilationType.RuntimeCompilation?10 -QtQuick.QSGRendererInterface.ShaderCompilationType.OfflineCompilation?10 -QtQuick.QSGRendererInterface.ShaderType?10 -QtQuick.QSGRendererInterface.ShaderType.UnknownShadingLanguage?10 -QtQuick.QSGRendererInterface.ShaderType.GLSL?10 -QtQuick.QSGRendererInterface.ShaderType.HLSL?10 -QtQuick.QSGRendererInterface.ShaderType.RhiShader?10 -QtQuick.QSGRendererInterface.Resource?10 -QtQuick.QSGRendererInterface.Resource.DeviceResource?10 -QtQuick.QSGRendererInterface.Resource.CommandQueueResource?10 -QtQuick.QSGRendererInterface.Resource.CommandListResource?10 -QtQuick.QSGRendererInterface.Resource.PainterResource?10 -QtQuick.QSGRendererInterface.Resource.RhiResource?10 -QtQuick.QSGRendererInterface.Resource.PhysicalDeviceResource?10 -QtQuick.QSGRendererInterface.Resource.OpenGLContextResource?10 -QtQuick.QSGRendererInterface.Resource.DeviceContextResource?10 -QtQuick.QSGRendererInterface.Resource.CommandEncoderResource?10 -QtQuick.QSGRendererInterface.Resource.VulkanInstanceResource?10 -QtQuick.QSGRendererInterface.Resource.RenderPassResource?10 -QtQuick.QSGRendererInterface.Resource.RhiSwapchainResource?10 -QtQuick.QSGRendererInterface.Resource.RhiRedirectCommandBuffer?10 -QtQuick.QSGRendererInterface.Resource.RhiRedirectRenderTarget?10 -QtQuick.QSGRendererInterface.Resource.RedirectPaintDevice?10 -QtQuick.QSGRendererInterface.Resource.GraphicsQueueFamilyIndexResource?10 -QtQuick.QSGRendererInterface.Resource.GraphicsQueueIndexResource?10 -QtQuick.QSGRendererInterface.GraphicsApi?10 -QtQuick.QSGRendererInterface.GraphicsApi.Unknown?10 -QtQuick.QSGRendererInterface.GraphicsApi.Software?10 -QtQuick.QSGRendererInterface.GraphicsApi.OpenGL?10 -QtQuick.QSGRendererInterface.GraphicsApi.OpenVG?10 -QtQuick.QSGRendererInterface.GraphicsApi.OpenGLRhi?10 -QtQuick.QSGRendererInterface.GraphicsApi.Direct3D11Rhi?10 -QtQuick.QSGRendererInterface.GraphicsApi.VulkanRhi?10 -QtQuick.QSGRendererInterface.GraphicsApi.MetalRhi?10 -QtQuick.QSGRendererInterface.GraphicsApi.NullRhi?10 -QtQuick.QSGRendererInterface.GraphicsApi.Direct3D11?10 -QtQuick.QSGRendererInterface.GraphicsApi.Vulkan?10 -QtQuick.QSGRendererInterface.GraphicsApi.Metal?10 -QtQuick.QSGRendererInterface.GraphicsApi.Direct3D12?10 -QtQuick.QSGRendererInterface.GraphicsApi.Null?10 -QtQuick.QSGRendererInterface.graphicsApi?4() -> QSGRendererInterface.GraphicsApi -QtQuick.QSGRendererInterface.getResource?4(QQuickWindow, QSGRendererInterface.Resource) -> PyQt6.sip.voidptr -QtQuick.QSGRendererInterface.getResource?4(QQuickWindow, str) -> PyQt6.sip.voidptr -QtQuick.QSGRendererInterface.shaderType?4() -> QSGRendererInterface.ShaderType -QtQuick.QSGRendererInterface.shaderCompilationType?4() -> unknown-type -QtQuick.QSGRendererInterface.shaderSourceType?4() -> unknown-type -QtQuick.QSGRendererInterface.isApiRhiBased?4(QSGRendererInterface.GraphicsApi) -> bool -QtQuick.QSGRenderNode.RenderingFlag?10 -QtQuick.QSGRenderNode.RenderingFlag.BoundedRectRendering?10 -QtQuick.QSGRenderNode.RenderingFlag.DepthAwareRendering?10 -QtQuick.QSGRenderNode.RenderingFlag.OpaqueRendering?10 -QtQuick.QSGRenderNode.StateFlag?10 -QtQuick.QSGRenderNode.StateFlag.DepthState?10 -QtQuick.QSGRenderNode.StateFlag.StencilState?10 -QtQuick.QSGRenderNode.StateFlag.ScissorState?10 -QtQuick.QSGRenderNode.StateFlag.ColorState?10 -QtQuick.QSGRenderNode.StateFlag.BlendState?10 -QtQuick.QSGRenderNode.StateFlag.CullState?10 -QtQuick.QSGRenderNode.StateFlag.ViewportState?10 -QtQuick.QSGRenderNode.StateFlag.RenderTargetState?10 -QtQuick.QSGRenderNode?1() -QtQuick.QSGRenderNode.__init__?1(self) -QtQuick.QSGRenderNode.changedStates?4() -> unknown-type -QtQuick.QSGRenderNode.render?4(QSGRenderNode.RenderState) -QtQuick.QSGRenderNode.releaseResources?4() -QtQuick.QSGRenderNode.flags?4() -> unknown-type -QtQuick.QSGRenderNode.rect?4() -> QRectF -QtQuick.QSGRenderNode.matrix?4() -> QMatrix4x4 -QtQuick.QSGRenderNode.clipList?4() -> QSGClipNode -QtQuick.QSGRenderNode.inheritedOpacity?4() -> float -QtQuick.QSGRenderNode.prepare?4() -QtQuick.QSGRenderNode.projectionMatrix?4() -> QMatrix4x4 -QtQuick.QSGRenderNode.RenderState.projectionMatrix?4() -> QMatrix4x4 -QtQuick.QSGRenderNode.RenderState.scissorRect?4() -> QRect -QtQuick.QSGRenderNode.RenderState.scissorEnabled?4() -> bool -QtQuick.QSGRenderNode.RenderState.stencilValue?4() -> int -QtQuick.QSGRenderNode.RenderState.stencilEnabled?4() -> bool -QtQuick.QSGRenderNode.RenderState.clipRegion?4() -> QRegion -QtQuick.QSGRenderNode.RenderState.get?4(str) -> PyQt6.sip.voidptr -QtQuick.QSGSimpleRectNode?1(QRectF, QColor) -QtQuick.QSGSimpleRectNode.__init__?1(self, QRectF, QColor) -QtQuick.QSGSimpleRectNode?1() -QtQuick.QSGSimpleRectNode.__init__?1(self) -QtQuick.QSGSimpleRectNode.setRect?4(QRectF) -QtQuick.QSGSimpleRectNode.setRect?4(float, float, float, float) -QtQuick.QSGSimpleRectNode.rect?4() -> QRectF -QtQuick.QSGSimpleRectNode.setColor?4(QColor) -QtQuick.QSGSimpleRectNode.color?4() -> QColor -QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag?10 -QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.NoTransform?10 -QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.MirrorHorizontally?10 -QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.MirrorVertically?10 -QtQuick.QSGSimpleTextureNode?1() -QtQuick.QSGSimpleTextureNode.__init__?1(self) -QtQuick.QSGSimpleTextureNode.setRect?4(QRectF) -QtQuick.QSGSimpleTextureNode.setRect?4(float, float, float, float) -QtQuick.QSGSimpleTextureNode.rect?4() -> QRectF -QtQuick.QSGSimpleTextureNode.setTexture?4(QSGTexture) -QtQuick.QSGSimpleTextureNode.texture?4() -> QSGTexture -QtQuick.QSGSimpleTextureNode.setFiltering?4(QSGTexture.Filtering) -QtQuick.QSGSimpleTextureNode.filtering?4() -> QSGTexture.Filtering -QtQuick.QSGSimpleTextureNode.setTextureCoordinatesTransform?4(unknown-type) -QtQuick.QSGSimpleTextureNode.textureCoordinatesTransform?4() -> unknown-type -QtQuick.QSGSimpleTextureNode.setOwnsTexture?4(bool) -QtQuick.QSGSimpleTextureNode.ownsTexture?4() -> bool -QtQuick.QSGSimpleTextureNode.setSourceRect?4(QRectF) -QtQuick.QSGSimpleTextureNode.setSourceRect?4(float, float, float, float) -QtQuick.QSGSimpleTextureNode.sourceRect?4() -> QRectF -QtQuick.QSGTextNode.TextStyle?10 -QtQuick.QSGTextNode.TextStyle.Normal?10 -QtQuick.QSGTextNode.TextStyle.Outline?10 -QtQuick.QSGTextNode.TextStyle.Raised?10 -QtQuick.QSGTextNode.TextStyle.Sunken?10 -QtQuick.QSGTextNode.RenderType?10 -QtQuick.QSGTextNode.RenderType.QtRendering?10 -QtQuick.QSGTextNode.RenderType.NativeRendering?10 -QtQuick.QSGTextNode.RenderType.CurveRendering?10 -QtQuick.QSGTextNode.addTextDocument?4(QPointF, QTextDocument, int selectionStart=-1, int selectionCount=-1) -QtQuick.QSGTextNode.addTextLayout?4(QPointF, QTextLayout, int selectionStart=-1, int selectionCount=-1, int lineStart=0, int lineCount=-1) -QtQuick.QSGTextNode.setColor?4(QColor) -QtQuick.QSGTextNode.color?4() -> QColor -QtQuick.QSGTextNode.setTextStyle?4(QSGTextNode.TextStyle) -QtQuick.QSGTextNode.textStyle?4() -> QSGTextNode.TextStyle -QtQuick.QSGTextNode.setStyleColor?4(QColor) -QtQuick.QSGTextNode.styleColor?4() -> QColor -QtQuick.QSGTextNode.setLinkColor?4(QColor) -QtQuick.QSGTextNode.linkColor?4() -> QColor -QtQuick.QSGTextNode.setSelectionColor?4(QColor) -QtQuick.QSGTextNode.selectionColor?4() -> QColor -QtQuick.QSGTextNode.setSelectionTextColor?4(QColor) -QtQuick.QSGTextNode.selectionTextColor?4() -> QColor -QtQuick.QSGTextNode.setRenderType?4(QSGTextNode.RenderType) -QtQuick.QSGTextNode.renderType?4() -> QSGTextNode.RenderType -QtQuick.QSGTextNode.setRenderTypeQuality?4(int) -QtQuick.QSGTextNode.renderTypeQuality?4() -> int -QtQuick.QSGTextNode.setFiltering?4(QSGTexture.Filtering) -QtQuick.QSGTextNode.filtering?4() -> QSGTexture.Filtering -QtQuick.QSGTextNode.clear?4() -QtQuick.QSGTextNode.setViewport?4(QRectF) -QtQuick.QSGTextNode.viewport?4() -> QRectF -QtQuick.QSGTexture.AnisotropyLevel?10 -QtQuick.QSGTexture.AnisotropyLevel.AnisotropyNone?10 -QtQuick.QSGTexture.AnisotropyLevel.Anisotropy2x?10 -QtQuick.QSGTexture.AnisotropyLevel.Anisotropy4x?10 -QtQuick.QSGTexture.AnisotropyLevel.Anisotropy8x?10 -QtQuick.QSGTexture.AnisotropyLevel.Anisotropy16x?10 -QtQuick.QSGTexture.Filtering?10 -QtQuick.QSGTexture.Filtering.None_?10 -QtQuick.QSGTexture.Filtering.Nearest?10 -QtQuick.QSGTexture.Filtering.Linear?10 -QtQuick.QSGTexture.WrapMode?10 -QtQuick.QSGTexture.WrapMode.Repeat?10 -QtQuick.QSGTexture.WrapMode.ClampToEdge?10 -QtQuick.QSGTexture.WrapMode.MirroredRepeat?10 -QtQuick.QSGTexture?1() -QtQuick.QSGTexture.__init__?1(self) -QtQuick.QSGTexture.textureSize?4() -> QSize -QtQuick.QSGTexture.hasAlphaChannel?4() -> bool -QtQuick.QSGTexture.hasMipmaps?4() -> bool -QtQuick.QSGTexture.normalizedTextureSubRect?4() -> QRectF -QtQuick.QSGTexture.isAtlasTexture?4() -> bool -QtQuick.QSGTexture.setMipmapFiltering?4(QSGTexture.Filtering) -QtQuick.QSGTexture.mipmapFiltering?4() -> QSGTexture.Filtering -QtQuick.QSGTexture.setFiltering?4(QSGTexture.Filtering) -QtQuick.QSGTexture.filtering?4() -> QSGTexture.Filtering -QtQuick.QSGTexture.setHorizontalWrapMode?4(QSGTexture.WrapMode) -QtQuick.QSGTexture.horizontalWrapMode?4() -> QSGTexture.WrapMode -QtQuick.QSGTexture.setVerticalWrapMode?4(QSGTexture.WrapMode) -QtQuick.QSGTexture.verticalWrapMode?4() -> QSGTexture.WrapMode -QtQuick.QSGTexture.convertToNormalizedSourceRect?4(QRectF) -> QRectF -QtQuick.QSGTexture.setAnisotropyLevel?4(QSGTexture.AnisotropyLevel) -QtQuick.QSGTexture.anisotropyLevel?4() -> QSGTexture.AnisotropyLevel -QtQuick.QSGTexture.comparisonKey?4() -> int -QtQuick.QSGDynamicTexture?1() -QtQuick.QSGDynamicTexture.__init__?1(self) -QtQuick.QSGDynamicTexture.updateTexture?4() -> bool -QtQuick.QNativeInterface.QSGOpenGLTexture.nativeTexture?4() -> int -QtQuick.QNativeInterface.QSGOpenGLTexture.fromNative?4(int, QQuickWindow, QSize, unknown-type options={}) -> QSGTexture -QtQuick.QSGOpaqueTextureMaterial?1() -QtQuick.QSGOpaqueTextureMaterial.__init__?1(self) -QtQuick.QSGOpaqueTextureMaterial.type?4() -> QSGMaterialType -QtQuick.QSGOpaqueTextureMaterial.createShader?4(QSGRendererInterface.RenderMode) -> QSGMaterialShader -QtQuick.QSGOpaqueTextureMaterial.compare?4(QSGMaterial) -> int -QtQuick.QSGOpaqueTextureMaterial.setTexture?4(QSGTexture) -QtQuick.QSGOpaqueTextureMaterial.texture?4() -> QSGTexture -QtQuick.QSGOpaqueTextureMaterial.setMipmapFiltering?4(QSGTexture.Filtering) -QtQuick.QSGOpaqueTextureMaterial.mipmapFiltering?4() -> QSGTexture.Filtering -QtQuick.QSGOpaqueTextureMaterial.setFiltering?4(QSGTexture.Filtering) -QtQuick.QSGOpaqueTextureMaterial.filtering?4() -> QSGTexture.Filtering -QtQuick.QSGOpaqueTextureMaterial.setHorizontalWrapMode?4(QSGTexture.WrapMode) -QtQuick.QSGOpaqueTextureMaterial.horizontalWrapMode?4() -> QSGTexture.WrapMode -QtQuick.QSGOpaqueTextureMaterial.setVerticalWrapMode?4(QSGTexture.WrapMode) -QtQuick.QSGOpaqueTextureMaterial.verticalWrapMode?4() -> QSGTexture.WrapMode -QtQuick.QSGOpaqueTextureMaterial.setAnisotropyLevel?4(QSGTexture.AnisotropyLevel) -QtQuick.QSGOpaqueTextureMaterial.anisotropyLevel?4() -> QSGTexture.AnisotropyLevel -QtQuick.QSGTextureMaterial?1() -QtQuick.QSGTextureMaterial.__init__?1(self) -QtQuick.QSGTextureMaterial.type?4() -> QSGMaterialType -QtQuick.QSGTextureMaterial.createShader?4(QSGRendererInterface.RenderMode) -> QSGMaterialShader -QtQuick.QSGTextureProvider?1() -QtQuick.QSGTextureProvider.__init__?1(self) -QtQuick.QSGTextureProvider.texture?4() -> QSGTexture -QtQuick.QSGTextureProvider.textureChanged?4() -QtQuick.QSGVertexColorMaterial?1() -QtQuick.QSGVertexColorMaterial.__init__?1(self) -QtQuick.QSGVertexColorMaterial.compare?4(QSGMaterial) -> int -QtQuick.QSGVertexColorMaterial.type?4() -> QSGMaterialType -QtQuick.QSGVertexColorMaterial.createShader?4(QSGRendererInterface.RenderMode) -> QSGMaterialShader -QtQuick3D.QQuick3D?1() -QtQuick3D.QQuick3D.__init__?1(self) -QtQuick3D.QQuick3D?1(QQuick3D) -QtQuick3D.QQuick3D.__init__?1(self, QQuick3D) -QtQuick3D.QQuick3D.idealSurfaceFormat?4(int samples=-1) -> QSurfaceFormat -QtQuick3D.QQuick3DObject?1(QQuick3DObject parent=None) -QtQuick3D.QQuick3DObject.__init__?1(self, QQuick3DObject parent=None) -QtQuick3D.QQuick3DObject.state?4() -> QString -QtQuick3D.QQuick3DObject.setState?4(QString) -QtQuick3D.QQuick3DObject.parentItem?4() -> QQuick3DObject -QtQuick3D.QQuick3DObject.setParentItem?4(QQuick3DObject) -QtQuick3D.QQuick3DObject.stateChanged?4() -QtQuick3D.QQuick3DObject.classBegin?4() -QtQuick3D.QQuick3DObject.componentComplete?4() -QtQuick3D.QQuick3DGeometry.PrimitiveType?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.Points?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.LineStrip?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.Lines?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.TriangleStrip?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.TriangleFan?10 -QtQuick3D.QQuick3DGeometry.PrimitiveType.Triangles?10 -QtQuick3D.QQuick3DGeometry?1(QQuick3DObject parent=None) -QtQuick3D.QQuick3DGeometry.__init__?1(self, QQuick3DObject parent=None) -QtQuick3D.QQuick3DGeometry.attributeCount?4() -> int -QtQuick3D.QQuick3DGeometry.attribute?4(int) -> QQuick3DGeometry.Attribute -QtQuick3D.QQuick3DGeometry.primitiveType?4() -> QQuick3DGeometry.PrimitiveType -QtQuick3D.QQuick3DGeometry.boundsMin?4() -> QVector3D -QtQuick3D.QQuick3DGeometry.boundsMax?4() -> QVector3D -QtQuick3D.QQuick3DGeometry.stride?4() -> int -QtQuick3D.QQuick3DGeometry.setVertexData?4(QByteArray) -QtQuick3D.QQuick3DGeometry.setVertexData?4(int, QByteArray) -QtQuick3D.QQuick3DGeometry.setIndexData?4(QByteArray) -QtQuick3D.QQuick3DGeometry.setIndexData?4(int, QByteArray) -QtQuick3D.QQuick3DGeometry.setStride?4(int) -QtQuick3D.QQuick3DGeometry.setBounds?4(QVector3D, QVector3D) -QtQuick3D.QQuick3DGeometry.setPrimitiveType?4(QQuick3DGeometry.PrimitiveType) -QtQuick3D.QQuick3DGeometry.addAttribute?4(QQuick3DGeometry.Attribute.Semantic, int, QQuick3DGeometry.Attribute.ComponentType) -QtQuick3D.QQuick3DGeometry.addAttribute?4(QQuick3DGeometry.Attribute) -QtQuick3D.QQuick3DGeometry.clear?4() -QtQuick3D.QQuick3DGeometry.vertexData?4() -> QByteArray -QtQuick3D.QQuick3DGeometry.indexData?4() -> QByteArray -QtQuick3D.QQuick3DGeometry.subsetCount?4(int) -> int -QtQuick3D.QQuick3DGeometry.subsetCount?4() -> int -QtQuick3D.QQuick3DGeometry.subsetBoundsMin?4(int) -> QVector3D -QtQuick3D.QQuick3DGeometry.subsetBoundsMax?4(int) -> QVector3D -QtQuick3D.QQuick3DGeometry.subsetOffset?4(int) -> int -QtQuick3D.QQuick3DGeometry.subsetName?4(int) -> QString -QtQuick3D.QQuick3DGeometry.addSubset?4(int, int, QVector3D, QVector3D, QString name='') -QtQuick3D.QQuick3DGeometry.targetData?4() -> QByteArray -QtQuick3D.QQuick3DGeometry.setTargetData?4(int, QByteArray) -QtQuick3D.QQuick3DGeometry.setTargetData?4(QByteArray) -QtQuick3D.QQuick3DGeometry.targetAttribute?4(int) -> QQuick3DGeometry.TargetAttribute -QtQuick3D.QQuick3DGeometry.targetAttributeCount?4() -> int -QtQuick3D.QQuick3DGeometry.addTargetAttribute?4(QQuick3DGeometry.TargetAttribute) -QtQuick3D.QQuick3DGeometry.addTargetAttribute?4(int, QQuick3DGeometry.Attribute.Semantic, int, int stride=0) -QtQuick3D.QQuick3DGeometry.Attribute.ComponentType?10 -QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.U16Type?10 -QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.U32Type?10 -QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.F32Type?10 -QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.I32Type?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.IndexSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.PositionSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.NormalSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TexCoordSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TangentSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.BinormalSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.JointSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.WeightSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.ColorSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TargetPositionSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TargetNormalSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TargetTangentSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TargetBinormalSemantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TexCoord1Semantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TexCoord0Semantic?10 -QtQuick3D.QQuick3DGeometry.Attribute.componentType?7 -QtQuick3D.QQuick3DGeometry.Attribute.offset?7 -QtQuick3D.QQuick3DGeometry.Attribute.semantic?7 -QtQuick3D.QQuick3DGeometry.Attribute?1() -QtQuick3D.QQuick3DGeometry.Attribute.__init__?1(self) -QtQuick3D.QQuick3DGeometry.Attribute?1(QQuick3DGeometry.Attribute) -QtQuick3D.QQuick3DGeometry.Attribute.__init__?1(self, QQuick3DGeometry.Attribute) -QtQuick3D.QQuick3DGeometry.TargetAttribute.attr?7 -QtQuick3D.QQuick3DGeometry.TargetAttribute.stride?7 -QtQuick3D.QQuick3DGeometry.TargetAttribute.targetId?7 -QtQuick3D.QQuick3DGeometry.TargetAttribute?1() -QtQuick3D.QQuick3DGeometry.TargetAttribute.__init__?1(self) -QtQuick3D.QQuick3DGeometry.TargetAttribute?1(QQuick3DGeometry.TargetAttribute) -QtQuick3D.QQuick3DGeometry.TargetAttribute.__init__?1(self, QQuick3DGeometry.TargetAttribute) -QtQuick3D.QQuick3DTextureData.Format?10 -QtQuick3D.QQuick3DTextureData.Format.None_?10 -QtQuick3D.QQuick3DTextureData.Format.RGBA8?10 -QtQuick3D.QQuick3DTextureData.Format.RGBA16F?10 -QtQuick3D.QQuick3DTextureData.Format.RGBA32F?10 -QtQuick3D.QQuick3DTextureData.Format.RGBE8?10 -QtQuick3D.QQuick3DTextureData.Format.R8?10 -QtQuick3D.QQuick3DTextureData.Format.R16?10 -QtQuick3D.QQuick3DTextureData.Format.R16F?10 -QtQuick3D.QQuick3DTextureData.Format.R32F?10 -QtQuick3D.QQuick3DTextureData.Format.BC1?10 -QtQuick3D.QQuick3DTextureData.Format.BC2?10 -QtQuick3D.QQuick3DTextureData.Format.BC3?10 -QtQuick3D.QQuick3DTextureData.Format.BC4?10 -QtQuick3D.QQuick3DTextureData.Format.BC5?10 -QtQuick3D.QQuick3DTextureData.Format.BC6H?10 -QtQuick3D.QQuick3DTextureData.Format.BC7?10 -QtQuick3D.QQuick3DTextureData.Format.DXT1_RGBA?10 -QtQuick3D.QQuick3DTextureData.Format.DXT1_RGB?10 -QtQuick3D.QQuick3DTextureData.Format.DXT3_RGBA?10 -QtQuick3D.QQuick3DTextureData.Format.DXT5_RGBA?10 -QtQuick3D.QQuick3DTextureData.Format.ETC2_RGB8?10 -QtQuick3D.QQuick3DTextureData.Format.ETC2_RGB8A1?10 -QtQuick3D.QQuick3DTextureData.Format.ETC2_RGBA8?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_4x4?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_5x4?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_5x5?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_6x5?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_6x6?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_8x5?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_8x6?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_8x8?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_10x5?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_10x6?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_10x8?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_10x10?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_12x10?10 -QtQuick3D.QQuick3DTextureData.Format.ASTC_12x12?10 -QtQuick3D.QQuick3DTextureData?1(QQuick3DObject parent=None) -QtQuick3D.QQuick3DTextureData.__init__?1(self, QQuick3DObject parent=None) -QtQuick3D.QQuick3DTextureData.textureData?4() -> QByteArray -QtQuick3D.QQuick3DTextureData.setTextureData?4(QByteArray) -QtQuick3D.QQuick3DTextureData.size?4() -> QSize -QtQuick3D.QQuick3DTextureData.setSize?4(QSize) -QtQuick3D.QQuick3DTextureData.format?4() -> QQuick3DTextureData.Format -QtQuick3D.QQuick3DTextureData.setFormat?4(QQuick3DTextureData.Format) -QtQuick3D.QQuick3DTextureData.hasTransparency?4() -> bool -QtQuick3D.QQuick3DTextureData.setHasTransparency?4(bool) -QtQuick3D.QQuick3DTextureData.depth?4() -> int -QtQuick3D.QQuick3DTextureData.setDepth?4(int) -QtQuickWidgets.QQuickWidget.Status?10 -QtQuickWidgets.QQuickWidget.Status.Null?10 -QtQuickWidgets.QQuickWidget.Status.Ready?10 -QtQuickWidgets.QQuickWidget.Status.Loading?10 -QtQuickWidgets.QQuickWidget.Status.Error?10 -QtQuickWidgets.QQuickWidget.ResizeMode?10 -QtQuickWidgets.QQuickWidget.ResizeMode.SizeViewToRootObject?10 -QtQuickWidgets.QQuickWidget.ResizeMode.SizeRootObjectToView?10 -QtQuickWidgets.QQuickWidget?1(QWidget parent=None) -QtQuickWidgets.QQuickWidget.__init__?1(self, QWidget parent=None) -QtQuickWidgets.QQuickWidget?1(QQmlEngine, QWidget) -QtQuickWidgets.QQuickWidget.__init__?1(self, QQmlEngine, QWidget) -QtQuickWidgets.QQuickWidget?1(QUrl, QWidget parent=None) -QtQuickWidgets.QQuickWidget.__init__?1(self, QUrl, QWidget parent=None) -QtQuickWidgets.QQuickWidget.source?4() -> QUrl -QtQuickWidgets.QQuickWidget.engine?4() -> QQmlEngine -QtQuickWidgets.QQuickWidget.rootContext?4() -> QQmlContext -QtQuickWidgets.QQuickWidget.rootObject?4() -> QQuickItem -QtQuickWidgets.QQuickWidget.resizeMode?4() -> QQuickWidget.ResizeMode -QtQuickWidgets.QQuickWidget.setResizeMode?4(QQuickWidget.ResizeMode) -QtQuickWidgets.QQuickWidget.status?4() -> QQuickWidget.Status -QtQuickWidgets.QQuickWidget.errors?4() -> unknown-type -QtQuickWidgets.QQuickWidget.sizeHint?4() -> QSize -QtQuickWidgets.QQuickWidget.initialSize?4() -> QSize -QtQuickWidgets.QQuickWidget.setFormat?4(QSurfaceFormat) -QtQuickWidgets.QQuickWidget.format?4() -> QSurfaceFormat -QtQuickWidgets.QQuickWidget.setSource?4(QUrl) -QtQuickWidgets.QQuickWidget.statusChanged?4(QQuickWidget.Status) -QtQuickWidgets.QQuickWidget.sceneGraphError?4(QQuickWindow.SceneGraphError, QString) -QtQuickWidgets.QQuickWidget.resizeEvent?4(QResizeEvent) -QtQuickWidgets.QQuickWidget.timerEvent?4(QTimerEvent) -QtQuickWidgets.QQuickWidget.keyPressEvent?4(QKeyEvent) -QtQuickWidgets.QQuickWidget.keyReleaseEvent?4(QKeyEvent) -QtQuickWidgets.QQuickWidget.mousePressEvent?4(QMouseEvent) -QtQuickWidgets.QQuickWidget.mouseReleaseEvent?4(QMouseEvent) -QtQuickWidgets.QQuickWidget.mouseMoveEvent?4(QMouseEvent) -QtQuickWidgets.QQuickWidget.mouseDoubleClickEvent?4(QMouseEvent) -QtQuickWidgets.QQuickWidget.showEvent?4(QShowEvent) -QtQuickWidgets.QQuickWidget.hideEvent?4(QHideEvent) -QtQuickWidgets.QQuickWidget.wheelEvent?4(QWheelEvent) -QtQuickWidgets.QQuickWidget.event?4(QEvent) -> bool -QtQuickWidgets.QQuickWidget.focusInEvent?4(QFocusEvent) -QtQuickWidgets.QQuickWidget.focusOutEvent?4(QFocusEvent) -QtQuickWidgets.QQuickWidget.dragEnterEvent?4(QDragEnterEvent) -QtQuickWidgets.QQuickWidget.dragMoveEvent?4(QDragMoveEvent) -QtQuickWidgets.QQuickWidget.dragLeaveEvent?4(QDragLeaveEvent) -QtQuickWidgets.QQuickWidget.dropEvent?4(QDropEvent) -QtQuickWidgets.QQuickWidget.paintEvent?4(QPaintEvent) -QtQuickWidgets.QQuickWidget.grabFramebuffer?4() -> QImage -QtQuickWidgets.QQuickWidget.setClearColor?4(QColor) -QtQuickWidgets.QQuickWidget.quickWindow?4() -> QQuickWindow -QtQuickWidgets.QQuickWidget.focusNextPrevChild?4(bool) -> bool -QtSql.QSqlDriverCreatorBase?1() -QtSql.QSqlDriverCreatorBase.__init__?1(self) -QtSql.QSqlDriverCreatorBase?1(QSqlDriverCreatorBase) -QtSql.QSqlDriverCreatorBase.__init__?1(self, QSqlDriverCreatorBase) -QtSql.QSqlDriverCreatorBase.createObject?4() -> QSqlDriver -QtSql.QSqlDatabase?1() -QtSql.QSqlDatabase.__init__?1(self) -QtSql.QSqlDatabase?1(QSqlDatabase) -QtSql.QSqlDatabase.__init__?1(self, QSqlDatabase) -QtSql.QSqlDatabase?1(QString) -QtSql.QSqlDatabase.__init__?1(self, QString) -QtSql.QSqlDatabase?1(QSqlDriver) -QtSql.QSqlDatabase.__init__?1(self, QSqlDriver) -QtSql.QSqlDatabase.open?4() -> bool -QtSql.QSqlDatabase.open?4(QString, QString) -> bool -QtSql.QSqlDatabase.close?4() -QtSql.QSqlDatabase.isOpen?4() -> bool -QtSql.QSqlDatabase.isOpenError?4() -> bool -QtSql.QSqlDatabase.tables?4(QSql.TableType type=QSql.Tables) -> QStringList -QtSql.QSqlDatabase.primaryIndex?4(QString) -> QSqlIndex -QtSql.QSqlDatabase.record?4(QString) -> QSqlRecord -QtSql.QSqlDatabase.exec?4(QString query='') -> QSqlQuery -QtSql.QSqlDatabase.lastError?4() -> QSqlError -QtSql.QSqlDatabase.isValid?4() -> bool -QtSql.QSqlDatabase.transaction?4() -> bool -QtSql.QSqlDatabase.commit?4() -> bool -QtSql.QSqlDatabase.rollback?4() -> bool -QtSql.QSqlDatabase.setDatabaseName?4(QString) -QtSql.QSqlDatabase.setUserName?4(QString) -QtSql.QSqlDatabase.setPassword?4(QString) -QtSql.QSqlDatabase.setHostName?4(QString) -QtSql.QSqlDatabase.setPort?4(int) -QtSql.QSqlDatabase.setConnectOptions?4(QString options='') -QtSql.QSqlDatabase.databaseName?4() -> QString -QtSql.QSqlDatabase.userName?4() -> QString -QtSql.QSqlDatabase.password?4() -> QString -QtSql.QSqlDatabase.hostName?4() -> QString -QtSql.QSqlDatabase.driverName?4() -> QString -QtSql.QSqlDatabase.port?4() -> int -QtSql.QSqlDatabase.connectOptions?4() -> QString -QtSql.QSqlDatabase.connectionName?4() -> QString -QtSql.QSqlDatabase.driver?4() -> QSqlDriver -QtSql.QSqlDatabase.addDatabase?4(QString, QString connectionName='') -> QSqlDatabase -QtSql.QSqlDatabase.addDatabase?4(QSqlDriver, QString connectionName='') -> QSqlDatabase -QtSql.QSqlDatabase.cloneDatabase?4(QSqlDatabase, QString) -> QSqlDatabase -QtSql.QSqlDatabase.cloneDatabase?4(QString, QString) -> QSqlDatabase -QtSql.QSqlDatabase.database?4(QString connectionName='', bool open=True) -> QSqlDatabase -QtSql.QSqlDatabase.removeDatabase?4(QString) -QtSql.QSqlDatabase.contains?4(QString connectionName='') -> bool -QtSql.QSqlDatabase.drivers?4() -> QStringList -QtSql.QSqlDatabase.connectionNames?4() -> QStringList -QtSql.QSqlDatabase.registerSqlDriver?4(QString, QSqlDriverCreatorBase) -QtSql.QSqlDatabase.isDriverAvailable?4(QString) -> bool -QtSql.QSqlDatabase.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) -QtSql.QSqlDatabase.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy -QtSql.QSqlDriver.DbmsType?10 -QtSql.QSqlDriver.DbmsType.UnknownDbms?10 -QtSql.QSqlDriver.DbmsType.MSSqlServer?10 -QtSql.QSqlDriver.DbmsType.MySqlServer?10 -QtSql.QSqlDriver.DbmsType.PostgreSQL?10 -QtSql.QSqlDriver.DbmsType.Oracle?10 -QtSql.QSqlDriver.DbmsType.Sybase?10 -QtSql.QSqlDriver.DbmsType.SQLite?10 -QtSql.QSqlDriver.DbmsType.Interbase?10 -QtSql.QSqlDriver.DbmsType.DB2?10 -QtSql.QSqlDriver.DbmsType.MimerSQL?10 -QtSql.QSqlDriver.NotificationSource?10 -QtSql.QSqlDriver.NotificationSource.UnknownSource?10 -QtSql.QSqlDriver.NotificationSource.SelfSource?10 -QtSql.QSqlDriver.NotificationSource.OtherSource?10 -QtSql.QSqlDriver.IdentifierType?10 -QtSql.QSqlDriver.IdentifierType.FieldName?10 -QtSql.QSqlDriver.IdentifierType.TableName?10 -QtSql.QSqlDriver.StatementType?10 -QtSql.QSqlDriver.StatementType.WhereStatement?10 -QtSql.QSqlDriver.StatementType.SelectStatement?10 -QtSql.QSqlDriver.StatementType.UpdateStatement?10 -QtSql.QSqlDriver.StatementType.InsertStatement?10 -QtSql.QSqlDriver.StatementType.DeleteStatement?10 -QtSql.QSqlDriver.DriverFeature?10 -QtSql.QSqlDriver.DriverFeature.Transactions?10 -QtSql.QSqlDriver.DriverFeature.QuerySize?10 -QtSql.QSqlDriver.DriverFeature.BLOB?10 -QtSql.QSqlDriver.DriverFeature.Unicode?10 -QtSql.QSqlDriver.DriverFeature.PreparedQueries?10 -QtSql.QSqlDriver.DriverFeature.NamedPlaceholders?10 -QtSql.QSqlDriver.DriverFeature.PositionalPlaceholders?10 -QtSql.QSqlDriver.DriverFeature.LastInsertId?10 -QtSql.QSqlDriver.DriverFeature.BatchOperations?10 -QtSql.QSqlDriver.DriverFeature.SimpleLocking?10 -QtSql.QSqlDriver.DriverFeature.LowPrecisionNumbers?10 -QtSql.QSqlDriver.DriverFeature.EventNotifications?10 -QtSql.QSqlDriver.DriverFeature.FinishQuery?10 -QtSql.QSqlDriver.DriverFeature.MultipleResultSets?10 -QtSql.QSqlDriver?1(QObject parent=None) -QtSql.QSqlDriver.__init__?1(self, QObject parent=None) -QtSql.QSqlDriver.isOpen?4() -> bool -QtSql.QSqlDriver.isOpenError?4() -> bool -QtSql.QSqlDriver.beginTransaction?4() -> bool -QtSql.QSqlDriver.commitTransaction?4() -> bool -QtSql.QSqlDriver.rollbackTransaction?4() -> bool -QtSql.QSqlDriver.tables?4(QSql.TableType) -> QStringList -QtSql.QSqlDriver.primaryIndex?4(QString) -> QSqlIndex -QtSql.QSqlDriver.record?4(QString) -> QSqlRecord -QtSql.QSqlDriver.formatValue?4(QSqlField, bool trimStrings=False) -> QString -QtSql.QSqlDriver.escapeIdentifier?4(QString, QSqlDriver.IdentifierType) -> QString -QtSql.QSqlDriver.sqlStatement?4(QSqlDriver.StatementType, QString, QSqlRecord, bool) -> QString -QtSql.QSqlDriver.lastError?4() -> QSqlError -QtSql.QSqlDriver.handle?4() -> QVariant -QtSql.QSqlDriver.hasFeature?4(QSqlDriver.DriverFeature) -> bool -QtSql.QSqlDriver.close?4() -QtSql.QSqlDriver.createResult?4() -> QSqlResult -QtSql.QSqlDriver.open?4(QString, QString user='', QString password='', QString host='', int port=-1, QString options='') -> bool -QtSql.QSqlDriver.setOpen?4(bool) -QtSql.QSqlDriver.setOpenError?4(bool) -QtSql.QSqlDriver.setLastError?4(QSqlError) -QtSql.QSqlDriver.subscribeToNotification?4(QString) -> bool -QtSql.QSqlDriver.unsubscribeFromNotification?4(QString) -> bool -QtSql.QSqlDriver.subscribedToNotifications?4() -> QStringList -QtSql.QSqlDriver.notification?4(QString, QSqlDriver.NotificationSource, QVariant) -QtSql.QSqlDriver.isIdentifierEscaped?4(QString, QSqlDriver.IdentifierType) -> bool -QtSql.QSqlDriver.stripDelimiters?4(QString, QSqlDriver.IdentifierType) -> QString -QtSql.QSqlDriver.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) -QtSql.QSqlDriver.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy -QtSql.QSqlDriver.dbmsType?4() -> QSqlDriver.DbmsType -QtSql.QSqlDriver.maximumIdentifierLength?4(QSqlDriver.IdentifierType) -> int -QtSql.QSqlError.ErrorType?10 -QtSql.QSqlError.ErrorType.NoError?10 -QtSql.QSqlError.ErrorType.ConnectionError?10 -QtSql.QSqlError.ErrorType.StatementError?10 -QtSql.QSqlError.ErrorType.TransactionError?10 -QtSql.QSqlError.ErrorType.UnknownError?10 -QtSql.QSqlError?1(QString driverText='', QString databaseText='', QSqlError.ErrorType type=QSqlError.NoError, QString errorCode='') -QtSql.QSqlError.__init__?1(self, QString driverText='', QString databaseText='', QSqlError.ErrorType type=QSqlError.NoError, QString errorCode='') -QtSql.QSqlError?1(QSqlError) -QtSql.QSqlError.__init__?1(self, QSqlError) -QtSql.QSqlError.driverText?4() -> QString -QtSql.QSqlError.databaseText?4() -> QString -QtSql.QSqlError.type?4() -> QSqlError.ErrorType -QtSql.QSqlError.text?4() -> QString -QtSql.QSqlError.isValid?4() -> bool -QtSql.QSqlError.nativeErrorCode?4() -> QString -QtSql.QSqlError.swap?4(QSqlError) -QtSql.QSqlField.RequiredStatus?10 -QtSql.QSqlField.RequiredStatus.Unknown?10 -QtSql.QSqlField.RequiredStatus.Optional?10 -QtSql.QSqlField.RequiredStatus.Required?10 -QtSql.QSqlField?1(QString fieldName='', QMetaType type=QMetaType(), QString tableName='') -QtSql.QSqlField.__init__?1(self, QString fieldName='', QMetaType type=QMetaType(), QString tableName='') -QtSql.QSqlField?1(QSqlField) -QtSql.QSqlField.__init__?1(self, QSqlField) -QtSql.QSqlField.setValue?4(QVariant) -QtSql.QSqlField.value?4() -> QVariant -QtSql.QSqlField.setName?4(QString) -QtSql.QSqlField.name?4() -> QString -QtSql.QSqlField.isNull?4() -> bool -QtSql.QSqlField.setReadOnly?4(bool) -QtSql.QSqlField.isReadOnly?4() -> bool -QtSql.QSqlField.clear?4() -QtSql.QSqlField.isAutoValue?4() -> bool -QtSql.QSqlField.setRequiredStatus?4(QSqlField.RequiredStatus) -QtSql.QSqlField.setRequired?4(bool) -QtSql.QSqlField.setLength?4(int) -QtSql.QSqlField.setPrecision?4(int) -QtSql.QSqlField.setDefaultValue?4(QVariant) -QtSql.QSqlField.setSqlType?4(int) -QtSql.QSqlField.setGenerated?4(bool) -QtSql.QSqlField.setAutoValue?4(bool) -QtSql.QSqlField.requiredStatus?4() -> QSqlField.RequiredStatus -QtSql.QSqlField.length?4() -> int -QtSql.QSqlField.precision?4() -> int -QtSql.QSqlField.defaultValue?4() -> QVariant -QtSql.QSqlField.typeID?4() -> int -QtSql.QSqlField.isGenerated?4() -> bool -QtSql.QSqlField.isValid?4() -> bool -QtSql.QSqlField.setTableName?4(QString) -QtSql.QSqlField.tableName?4() -> QString -QtSql.QSqlField.metaType?4() -> QMetaType -QtSql.QSqlField.setMetaType?4(QMetaType) -QtSql.QSqlField.swap?4(QSqlField) -QtSql.QSqlRecord?1() -QtSql.QSqlRecord.__init__?1(self) -QtSql.QSqlRecord?1(QSqlRecord) -QtSql.QSqlRecord.__init__?1(self, QSqlRecord) -QtSql.QSqlRecord.value?4(int) -> QVariant -QtSql.QSqlRecord.value?4(QString) -> QVariant -QtSql.QSqlRecord.setValue?4(int, QVariant) -QtSql.QSqlRecord.setValue?4(QString, QVariant) -QtSql.QSqlRecord.setNull?4(int) -QtSql.QSqlRecord.setNull?4(QString) -QtSql.QSqlRecord.isNull?4(int) -> bool -QtSql.QSqlRecord.isNull?4(QString) -> bool -QtSql.QSqlRecord.indexOf?4(QString) -> int -QtSql.QSqlRecord.fieldName?4(int) -> QString -QtSql.QSqlRecord.field?4(int) -> QSqlField -QtSql.QSqlRecord.field?4(QString) -> QSqlField -QtSql.QSqlRecord.isGenerated?4(int) -> bool -QtSql.QSqlRecord.isGenerated?4(QString) -> bool -QtSql.QSqlRecord.setGenerated?4(QString, bool) -QtSql.QSqlRecord.setGenerated?4(int, bool) -QtSql.QSqlRecord.append?4(QSqlField) -QtSql.QSqlRecord.replace?4(int, QSqlField) -QtSql.QSqlRecord.insert?4(int, QSqlField) -QtSql.QSqlRecord.remove?4(int) -QtSql.QSqlRecord.isEmpty?4() -> bool -QtSql.QSqlRecord.contains?4(QString) -> bool -QtSql.QSqlRecord.clear?4() -QtSql.QSqlRecord.clearValues?4() -QtSql.QSqlRecord.count?4() -> int -QtSql.QSqlRecord.keyValues?4(QSqlRecord) -> QSqlRecord -QtSql.QSqlRecord.swap?4(QSqlRecord) -QtSql.QSqlIndex?1(QString cursorName='', QString name='') -QtSql.QSqlIndex.__init__?1(self, QString cursorName='', QString name='') -QtSql.QSqlIndex?1(QSqlIndex) -QtSql.QSqlIndex.__init__?1(self, QSqlIndex) -QtSql.QSqlIndex.setCursorName?4(QString) -QtSql.QSqlIndex.cursorName?4() -> QString -QtSql.QSqlIndex.setName?4(QString) -QtSql.QSqlIndex.name?4() -> QString -QtSql.QSqlIndex.append?4(QSqlField) -QtSql.QSqlIndex.append?4(QSqlField, bool) -QtSql.QSqlIndex.isDescending?4(int) -> bool -QtSql.QSqlIndex.setDescending?4(int, bool) -QtSql.QSqlIndex.swap?4(QSqlIndex) -QtSql.QSqlQuery.BatchExecutionMode?10 -QtSql.QSqlQuery.BatchExecutionMode.ValuesAsRows?10 -QtSql.QSqlQuery.BatchExecutionMode.ValuesAsColumns?10 -QtSql.QSqlQuery?1(QSqlDatabase) -QtSql.QSqlQuery.__init__?1(self, QSqlDatabase) -QtSql.QSqlQuery?1(QString query='', QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlQuery.__init__?1(self, QString query='', QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlQuery?1(QSqlResult) -QtSql.QSqlQuery.__init__?1(self, QSqlResult) -QtSql.QSqlQuery?1(QSqlQuery) -QtSql.QSqlQuery.__init__?1(self, QSqlQuery) -QtSql.QSqlQuery.isValid?4() -> bool -QtSql.QSqlQuery.isActive?4() -> bool -QtSql.QSqlQuery.isNull?4(int) -> bool -QtSql.QSqlQuery.isNull?4(QString) -> bool -QtSql.QSqlQuery.at?4() -> int -QtSql.QSqlQuery.lastQuery?4() -> QString -QtSql.QSqlQuery.numRowsAffected?4() -> int -QtSql.QSqlQuery.lastError?4() -> QSqlError -QtSql.QSqlQuery.isSelect?4() -> bool -QtSql.QSqlQuery.size?4() -> int -QtSql.QSqlQuery.driver?4() -> QSqlDriver -QtSql.QSqlQuery.result?4() -> QSqlResult -QtSql.QSqlQuery.isForwardOnly?4() -> bool -QtSql.QSqlQuery.record?4() -> QSqlRecord -QtSql.QSqlQuery.setForwardOnly?4(bool) -QtSql.QSqlQuery.exec?4(QString) -> bool -QtSql.QSqlQuery.value?4(int) -> QVariant -QtSql.QSqlQuery.value?4(QString) -> QVariant -QtSql.QSqlQuery.seek?4(int, bool relative=False) -> bool -QtSql.QSqlQuery.next?4() -> bool -QtSql.QSqlQuery.previous?4() -> bool -QtSql.QSqlQuery.first?4() -> bool -QtSql.QSqlQuery.last?4() -> bool -QtSql.QSqlQuery.clear?4() -QtSql.QSqlQuery.exec?4() -> bool -QtSql.QSqlQuery.execBatch?4(QSqlQuery.BatchExecutionMode mode=QSqlQuery.ValuesAsRows) -> bool -QtSql.QSqlQuery.prepare?4(QString) -> bool -QtSql.QSqlQuery.bindValue?4(QString, QVariant, unknown-type type=QSql.In) -QtSql.QSqlQuery.bindValue?4(int, QVariant, unknown-type type=QSql.In) -QtSql.QSqlQuery.addBindValue?4(QVariant, unknown-type type=QSql.In) -QtSql.QSqlQuery.boundValue?4(QString) -> QVariant -QtSql.QSqlQuery.boundValue?4(int) -> QVariant -QtSql.QSqlQuery.boundValues?4() -> unknown-type -QtSql.QSqlQuery.executedQuery?4() -> QString -QtSql.QSqlQuery.lastInsertId?4() -> QVariant -QtSql.QSqlQuery.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) -QtSql.QSqlQuery.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy -QtSql.QSqlQuery.finish?4() -QtSql.QSqlQuery.nextResult?4() -> bool -QtSql.QSqlQuery.swap?4(QSqlQuery) -QtSql.QSqlQuery.boundValueNames?4() -> QStringList -QtSql.QSqlQuery.boundValueName?4(int) -> QString -QtSql.QSqlQuery.setPositionalBindingEnabled?4(bool) -QtSql.QSqlQuery.isPositionalBindingEnabled?4() -> bool -QtSql.QSqlQueryModel?1(QObject parent=None) -QtSql.QSqlQueryModel.__init__?1(self, QObject parent=None) -QtSql.QSqlQueryModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtSql.QSqlQueryModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtSql.QSqlQueryModel.record?4() -> QSqlRecord -QtSql.QSqlQueryModel.record?4(int) -> QSqlRecord -QtSql.QSqlQueryModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtSql.QSqlQueryModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtSql.QSqlQueryModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool -QtSql.QSqlQueryModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlQueryModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlQueryModel.setQuery?4(QSqlQuery) -QtSql.QSqlQueryModel.setQuery?4(QString, QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlQueryModel.query?4() -> QSqlQuery -QtSql.QSqlQueryModel.clear?4() -QtSql.QSqlQueryModel.lastError?4() -> QSqlError -QtSql.QSqlQueryModel.fetchMore?4(QModelIndex parent=QModelIndex()) -QtSql.QSqlQueryModel.canFetchMore?4(QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlQueryModel.queryChange?4() -QtSql.QSqlQueryModel.indexInQuery?4(QModelIndex) -> QModelIndex -QtSql.QSqlQueryModel.setLastError?4(QSqlError) -QtSql.QSqlQueryModel.beginResetModel?4() -QtSql.QSqlQueryModel.endResetModel?4() -QtSql.QSqlQueryModel.beginInsertRows?4(QModelIndex, int, int) -QtSql.QSqlQueryModel.endInsertRows?4() -QtSql.QSqlQueryModel.beginRemoveRows?4(QModelIndex, int, int) -QtSql.QSqlQueryModel.endRemoveRows?4() -QtSql.QSqlQueryModel.beginInsertColumns?4(QModelIndex, int, int) -QtSql.QSqlQueryModel.endInsertColumns?4() -QtSql.QSqlQueryModel.beginRemoveColumns?4(QModelIndex, int, int) -QtSql.QSqlQueryModel.endRemoveColumns?4() -QtSql.QSqlQueryModel.roleNames?4() -> unknown-type -QtSql.QSqlRelationalDelegate?1(QObject parent=None) -QtSql.QSqlRelationalDelegate.__init__?1(self, QObject parent=None) -QtSql.QSqlRelationalDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget -QtSql.QSqlRelationalDelegate.setEditorData?4(QWidget, QModelIndex) -QtSql.QSqlRelationalDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) -QtSql.QSqlRelation?1() -QtSql.QSqlRelation.__init__?1(self) -QtSql.QSqlRelation?1(QString, QString, QString) -QtSql.QSqlRelation.__init__?1(self, QString, QString, QString) -QtSql.QSqlRelation?1(QSqlRelation) -QtSql.QSqlRelation.__init__?1(self, QSqlRelation) -QtSql.QSqlRelation.tableName?4() -> QString -QtSql.QSqlRelation.indexColumn?4() -> QString -QtSql.QSqlRelation.displayColumn?4() -> QString -QtSql.QSqlRelation.isValid?4() -> bool -QtSql.QSqlRelation.swap?4(QSqlRelation) -QtSql.QSqlTableModel.EditStrategy?10 -QtSql.QSqlTableModel.EditStrategy.OnFieldChange?10 -QtSql.QSqlTableModel.EditStrategy.OnRowChange?10 -QtSql.QSqlTableModel.EditStrategy.OnManualSubmit?10 -QtSql.QSqlTableModel?1(QObject parent=None, QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlTableModel.__init__?1(self, QObject parent=None, QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlTableModel.select?4() -> bool -QtSql.QSqlTableModel.setTable?4(QString) -QtSql.QSqlTableModel.tableName?4() -> QString -QtSql.QSqlTableModel.flags?4(QModelIndex) -> unknown-type -QtSql.QSqlTableModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtSql.QSqlTableModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtSql.QSqlTableModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant -QtSql.QSqlTableModel.isDirty?4(QModelIndex) -> bool -QtSql.QSqlTableModel.isDirty?4() -> bool -QtSql.QSqlTableModel.clear?4() -QtSql.QSqlTableModel.setEditStrategy?4(QSqlTableModel.EditStrategy) -QtSql.QSqlTableModel.editStrategy?4() -> QSqlTableModel.EditStrategy -QtSql.QSqlTableModel.primaryKey?4() -> QSqlIndex -QtSql.QSqlTableModel.database?4() -> QSqlDatabase -QtSql.QSqlTableModel.fieldIndex?4(QString) -> int -QtSql.QSqlTableModel.sort?4(int, Qt.SortOrder) -QtSql.QSqlTableModel.setSort?4(int, Qt.SortOrder) -QtSql.QSqlTableModel.filter?4() -> QString -QtSql.QSqlTableModel.setFilter?4(QString) -QtSql.QSqlTableModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtSql.QSqlTableModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlTableModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlTableModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlTableModel.insertRecord?4(int, QSqlRecord) -> bool -QtSql.QSqlTableModel.setRecord?4(int, QSqlRecord) -> bool -QtSql.QSqlTableModel.revertRow?4(int) -QtSql.QSqlTableModel.submit?4() -> bool -QtSql.QSqlTableModel.revert?4() -QtSql.QSqlTableModel.submitAll?4() -> bool -QtSql.QSqlTableModel.revertAll?4() -QtSql.QSqlTableModel.primeInsert?4(int, QSqlRecord) -QtSql.QSqlTableModel.beforeInsert?4(QSqlRecord) -QtSql.QSqlTableModel.beforeUpdate?4(int, QSqlRecord) -QtSql.QSqlTableModel.beforeDelete?4(int) -QtSql.QSqlTableModel.updateRowInTable?4(int, QSqlRecord) -> bool -QtSql.QSqlTableModel.insertRowIntoTable?4(QSqlRecord) -> bool -QtSql.QSqlTableModel.deleteRowFromTable?4(int) -> bool -QtSql.QSqlTableModel.orderByClause?4() -> QString -QtSql.QSqlTableModel.selectStatement?4() -> QString -QtSql.QSqlTableModel.setPrimaryKey?4(QSqlIndex) -QtSql.QSqlTableModel.indexInQuery?4(QModelIndex) -> QModelIndex -QtSql.QSqlTableModel.primaryValues?4(int) -> QSqlRecord -QtSql.QSqlTableModel.selectRow?4(int) -> bool -QtSql.QSqlTableModel.record?4() -> QSqlRecord -QtSql.QSqlTableModel.record?4(int) -> QSqlRecord -QtSql.QSqlTableModel.clearItemData?4(QModelIndex) -> bool -QtSql.QSqlRelationalTableModel.JoinMode?10 -QtSql.QSqlRelationalTableModel.JoinMode.InnerJoin?10 -QtSql.QSqlRelationalTableModel.JoinMode.LeftJoin?10 -QtSql.QSqlRelationalTableModel?1(QObject parent=None, QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlRelationalTableModel.__init__?1(self, QObject parent=None, QSqlDatabase db=QSqlDatabase()) -QtSql.QSqlRelationalTableModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtSql.QSqlRelationalTableModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtSql.QSqlRelationalTableModel.clear?4() -QtSql.QSqlRelationalTableModel.select?4() -> bool -QtSql.QSqlRelationalTableModel.setTable?4(QString) -QtSql.QSqlRelationalTableModel.setRelation?4(int, QSqlRelation) -QtSql.QSqlRelationalTableModel.relation?4(int) -> QSqlRelation -QtSql.QSqlRelationalTableModel.relationModel?4(int) -> QSqlTableModel -QtSql.QSqlRelationalTableModel.revertRow?4(int) -QtSql.QSqlRelationalTableModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool -QtSql.QSqlRelationalTableModel.selectStatement?4() -> QString -QtSql.QSqlRelationalTableModel.updateRowInTable?4(int, QSqlRecord) -> bool -QtSql.QSqlRelationalTableModel.orderByClause?4() -> QString -QtSql.QSqlRelationalTableModel.insertRowIntoTable?4(QSqlRecord) -> bool -QtSql.QSqlRelationalTableModel.setJoinMode?4(QSqlRelationalTableModel.JoinMode) -QtSql.QSqlResult.BindingSyntax?10 -QtSql.QSqlResult.BindingSyntax.PositionalBinding?10 -QtSql.QSqlResult.BindingSyntax.NamedBinding?10 -QtSql.QSqlResult?1(QSqlDriver) -QtSql.QSqlResult.__init__?1(self, QSqlDriver) -QtSql.QSqlResult.handle?4() -> QVariant -QtSql.QSqlResult.at?4() -> int -QtSql.QSqlResult.lastQuery?4() -> QString -QtSql.QSqlResult.lastError?4() -> QSqlError -QtSql.QSqlResult.isValid?4() -> bool -QtSql.QSqlResult.isActive?4() -> bool -QtSql.QSqlResult.isSelect?4() -> bool -QtSql.QSqlResult.isForwardOnly?4() -> bool -QtSql.QSqlResult.driver?4() -> QSqlDriver -QtSql.QSqlResult.setAt?4(int) -QtSql.QSqlResult.setActive?4(bool) -QtSql.QSqlResult.setLastError?4(QSqlError) -QtSql.QSqlResult.setQuery?4(QString) -QtSql.QSqlResult.setSelect?4(bool) -QtSql.QSqlResult.setForwardOnly?4(bool) -QtSql.QSqlResult.exec?4() -> bool -QtSql.QSqlResult.prepare?4(QString) -> bool -QtSql.QSqlResult.savePrepare?4(QString) -> bool -QtSql.QSqlResult.bindValue?4(int, QVariant, unknown-type) -QtSql.QSqlResult.bindValue?4(QString, QVariant, unknown-type) -QtSql.QSqlResult.addBindValue?4(QVariant, unknown-type) -QtSql.QSqlResult.boundValue?4(QString) -> QVariant -QtSql.QSqlResult.boundValue?4(int) -> QVariant -QtSql.QSqlResult.bindValueType?4(QString) -> unknown-type -QtSql.QSqlResult.bindValueType?4(int) -> unknown-type -QtSql.QSqlResult.boundValueCount?4() -> int -QtSql.QSqlResult.boundValues?4() -> unknown-type -QtSql.QSqlResult.executedQuery?4() -> QString -QtSql.QSqlResult.boundValueName?4(int) -> QString -QtSql.QSqlResult.clear?4() -QtSql.QSqlResult.hasOutValues?4() -> bool -QtSql.QSqlResult.bindingSyntax?4() -> QSqlResult.BindingSyntax -QtSql.QSqlResult.data?4(int) -> QVariant -QtSql.QSqlResult.isNull?4(int) -> bool -QtSql.QSqlResult.reset?4(QString) -> bool -QtSql.QSqlResult.fetch?4(int) -> bool -QtSql.QSqlResult.fetchNext?4() -> bool -QtSql.QSqlResult.fetchPrevious?4() -> bool -QtSql.QSqlResult.fetchFirst?4() -> bool -QtSql.QSqlResult.fetchLast?4() -> bool -QtSql.QSqlResult.size?4() -> int -QtSql.QSqlResult.numRowsAffected?4() -> int -QtSql.QSqlResult.record?4() -> QSqlRecord -QtSql.QSqlResult.lastInsertId?4() -> QVariant -QtSql.QSqlResult.boundValueNames?4() -> QStringList -QtSql.QSqlResult.setPositionalBindingEnabled?4(bool) -QtSql.QSqlResult.isPositionalBindingEnabled?4() -> bool -QtSql.QSql.NumericalPrecisionPolicy?10 -QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionInt32?10 -QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionInt64?10 -QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionDouble?10 -QtSql.QSql.NumericalPrecisionPolicy.HighPrecision?10 -QtSql.QSql.TableType?10 -QtSql.QSql.TableType.Tables?10 -QtSql.QSql.TableType.SystemTables?10 -QtSql.QSql.TableType.Views?10 -QtSql.QSql.TableType.AllTables?10 -QtSql.QSql.ParamTypeFlag?10 -QtSql.QSql.ParamTypeFlag.In?10 -QtSql.QSql.ParamTypeFlag.Out?10 -QtSql.QSql.ParamTypeFlag.InOut?10 -QtSql.QSql.ParamTypeFlag.Binary?10 -QtSql.QSql.Location?10 -QtSql.QSql.Location.BeforeFirstRow?10 -QtSql.QSql.Location.AfterLastRow?10 -QtSvg.QtSvg.Option?10 -QtSvg.QtSvg.Option.NoOption?10 -QtSvg.QtSvg.Option.Tiny12FeaturesOnly?10 -QtSvg.QSvgGenerator.SvgVersion?10 -QtSvg.QSvgGenerator.SvgVersion.SvgTiny12?10 -QtSvg.QSvgGenerator.SvgVersion.Svg11?10 -QtSvg.QSvgGenerator?1() -QtSvg.QSvgGenerator.__init__?1(self) -QtSvg.QSvgGenerator?1(QSvgGenerator.SvgVersion) -QtSvg.QSvgGenerator.__init__?1(self, QSvgGenerator.SvgVersion) -QtSvg.QSvgGenerator.size?4() -> QSize -QtSvg.QSvgGenerator.setSize?4(QSize) -QtSvg.QSvgGenerator.fileName?4() -> QString -QtSvg.QSvgGenerator.setFileName?4(QString) -QtSvg.QSvgGenerator.outputDevice?4() -> QIODevice -QtSvg.QSvgGenerator.setOutputDevice?4(QIODevice) -QtSvg.QSvgGenerator.resolution?4() -> int -QtSvg.QSvgGenerator.setResolution?4(int) -QtSvg.QSvgGenerator.title?4() -> QString -QtSvg.QSvgGenerator.setTitle?4(QString) -QtSvg.QSvgGenerator.description?4() -> QString -QtSvg.QSvgGenerator.setDescription?4(QString) -QtSvg.QSvgGenerator.viewBox?4() -> QRect -QtSvg.QSvgGenerator.viewBoxF?4() -> QRectF -QtSvg.QSvgGenerator.setViewBox?4(QRect) -QtSvg.QSvgGenerator.setViewBox?4(QRectF) -QtSvg.QSvgGenerator.paintEngine?4() -> QPaintEngine -QtSvg.QSvgGenerator.metric?4(QPaintDevice.PaintDeviceMetric) -> int -QtSvg.QSvgGenerator.svgVersion?4() -> QSvgGenerator.SvgVersion -QtSvg.QSvgRenderer?1(QObject parent=None) -QtSvg.QSvgRenderer.__init__?1(self, QObject parent=None) -QtSvg.QSvgRenderer?1(QString, QObject parent=None) -QtSvg.QSvgRenderer.__init__?1(self, QString, QObject parent=None) -QtSvg.QSvgRenderer?1(QByteArray, QObject parent=None) -QtSvg.QSvgRenderer.__init__?1(self, QByteArray, QObject parent=None) -QtSvg.QSvgRenderer?1(QXmlStreamReader, QObject parent=None) -QtSvg.QSvgRenderer.__init__?1(self, QXmlStreamReader, QObject parent=None) -QtSvg.QSvgRenderer.isValid?4() -> bool -QtSvg.QSvgRenderer.defaultSize?4() -> QSize -QtSvg.QSvgRenderer.elementExists?4(QString) -> bool -QtSvg.QSvgRenderer.viewBox?4() -> QRect -QtSvg.QSvgRenderer.viewBoxF?4() -> QRectF -QtSvg.QSvgRenderer.setViewBox?4(QRect) -QtSvg.QSvgRenderer.setViewBox?4(QRectF) -QtSvg.QSvgRenderer.animated?4() -> bool -QtSvg.QSvgRenderer.boundsOnElement?4(QString) -> QRectF -QtSvg.QSvgRenderer.framesPerSecond?4() -> int -QtSvg.QSvgRenderer.setFramesPerSecond?4(int) -QtSvg.QSvgRenderer.currentFrame?4() -> int -QtSvg.QSvgRenderer.setCurrentFrame?4(int) -QtSvg.QSvgRenderer.animationDuration?4() -> int -QtSvg.QSvgRenderer.load?4(QString) -> bool -QtSvg.QSvgRenderer.load?4(QByteArray) -> bool -QtSvg.QSvgRenderer.load?4(QXmlStreamReader) -> bool -QtSvg.QSvgRenderer.render?4(QPainter) -QtSvg.QSvgRenderer.render?4(QPainter, QRectF) -QtSvg.QSvgRenderer.render?4(QPainter, QString, QRectF bounds=QRectF()) -QtSvg.QSvgRenderer.repaintNeeded?4() -QtSvg.QSvgRenderer.aspectRatioMode?4() -> Qt.AspectRatioMode -QtSvg.QSvgRenderer.setAspectRatioMode?4(Qt.AspectRatioMode) -QtSvg.QSvgRenderer.transformForElement?4(QString) -> QTransform -QtSvg.QSvgRenderer.options?4() -> unknown-type -QtSvg.QSvgRenderer.setOptions?4(unknown-type) -QtSvg.QSvgRenderer.isAnimationEnabled?4() -> bool -QtSvg.QSvgRenderer.setAnimationEnabled?4(bool) -QtSvgWidgets.QGraphicsSvgItem?1(QGraphicsItem parent=None) -QtSvgWidgets.QGraphicsSvgItem.__init__?1(self, QGraphicsItem parent=None) -QtSvgWidgets.QGraphicsSvgItem?1(QString, QGraphicsItem parent=None) -QtSvgWidgets.QGraphicsSvgItem.__init__?1(self, QString, QGraphicsItem parent=None) -QtSvgWidgets.QGraphicsSvgItem.setSharedRenderer?4(QSvgRenderer) -QtSvgWidgets.QGraphicsSvgItem.renderer?4() -> QSvgRenderer -QtSvgWidgets.QGraphicsSvgItem.setElementId?4(QString) -QtSvgWidgets.QGraphicsSvgItem.elementId?4() -> QString -QtSvgWidgets.QGraphicsSvgItem.setMaximumCacheSize?4(QSize) -QtSvgWidgets.QGraphicsSvgItem.maximumCacheSize?4() -> QSize -QtSvgWidgets.QGraphicsSvgItem.boundingRect?4() -> QRectF -QtSvgWidgets.QGraphicsSvgItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtSvgWidgets.QGraphicsSvgItem.type?4() -> int -QtSvgWidgets.QSvgWidget?1(QWidget parent=None) -QtSvgWidgets.QSvgWidget.__init__?1(self, QWidget parent=None) -QtSvgWidgets.QSvgWidget?1(QString, QWidget parent=None) -QtSvgWidgets.QSvgWidget.__init__?1(self, QString, QWidget parent=None) -QtSvgWidgets.QSvgWidget.renderer?4() -> QSvgRenderer -QtSvgWidgets.QSvgWidget.sizeHint?4() -> QSize -QtSvgWidgets.QSvgWidget.load?4(QString) -QtSvgWidgets.QSvgWidget.load?4(QByteArray) -QtSvgWidgets.QSvgWidget.paintEvent?4(QPaintEvent) -QtSvgWidgets.QSvgWidget.options?4() -> unknown-type -QtSvgWidgets.QSvgWidget.setOptions?4(unknown-type) -QtTest.QAbstractItemModelTester.FailureReportingMode?10 -QtTest.QAbstractItemModelTester.FailureReportingMode.QtTest?10 -QtTest.QAbstractItemModelTester.FailureReportingMode.Warning?10 -QtTest.QAbstractItemModelTester.FailureReportingMode.Fatal?10 -QtTest.QAbstractItemModelTester?1(QAbstractItemModel, QObject parent=None) -QtTest.QAbstractItemModelTester.__init__?1(self, QAbstractItemModel, QObject parent=None) -QtTest.QAbstractItemModelTester?1(QAbstractItemModel, QAbstractItemModelTester.FailureReportingMode, QObject parent=None) -QtTest.QAbstractItemModelTester.__init__?1(self, QAbstractItemModel, QAbstractItemModelTester.FailureReportingMode, QObject parent=None) -QtTest.QAbstractItemModelTester.model?4() -> QAbstractItemModel -QtTest.QAbstractItemModelTester.failureReportingMode?4() -> QAbstractItemModelTester.FailureReportingMode -QtTest.QAbstractItemModelTester.setUseFetchMore?4(bool) -QtTest.QSignalSpy?1(Any) -QtTest.QSignalSpy.__init__?1(self, Any) -QtTest.QSignalSpy?1(QObject, QMetaMethod) -QtTest.QSignalSpy.__init__?1(self, QObject, QMetaMethod) -QtTest.QSignalSpy.isValid?4() -> bool -QtTest.QSignalSpy.signal?4() -> QByteArray -QtTest.QSignalSpy.wait?4(int timeout=5000) -> bool -QtTest.QTest.KeyAction?10 -QtTest.QTest.KeyAction.Press?10 -QtTest.QTest.KeyAction.Release?10 -QtTest.QTest.KeyAction.Click?10 -QtTest.QTest.KeyAction.Shortcut?10 -QtTest.QTest.keyClick?4(QWidget, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyClick?4(QWidget, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyClicks?4(QWidget, QString, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyEvent?4(QTest.KeyAction, QWidget, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyEvent?4(QTest.KeyAction, QWidget, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyPress?4(QWidget, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyPress?4(QWidget, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyRelease?4(QWidget, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyRelease?4(QWidget, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keySequence?4(QWidget, QKeySequence) -QtTest.QTest.simulateEvent?4(QWidget, bool, int, unknown-type, QString, bool, int delay=-1) -QtTest.QTest.sendKeyEvent?4(QTest.KeyAction, QWidget, Qt.Key, str, unknown-type, int delay=-1) -QtTest.QTest.sendKeyEvent?4(QTest.KeyAction, QWidget, Qt.Key, QString, unknown-type, int delay=-1) -QtTest.QTest.keyEvent?4(QTest.KeyAction, QWindow, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyEvent?4(QTest.KeyAction, QWindow, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyClick?4(QWindow, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyClick?4(QWindow, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyPress?4(QWindow, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyPress?4(QWindow, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyRelease?4(QWindow, Qt.Key, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keyRelease?4(QWindow, str, unknown-type modifier=Qt.NoModifier, int delay=-1) -QtTest.QTest.keySequence?4(QWindow, QKeySequence) -QtTest.QTest.mouseClick?4(QWidget, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseDClick?4(QWidget, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseMove?4(QWidget, QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mousePress?4(QWidget, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseRelease?4(QWidget, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mousePress?4(QWindow, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseRelease?4(QWindow, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseClick?4(QWindow, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseDClick?4(QWindow, Qt.MouseButton, unknown-type modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.mouseMove?4(QWindow, QPoint pos=QPoint(), int delay=-1) -QtTest.QTest.qWait?4(int) -QtTest.QTest.qWaitForWindowActive?4(QWindow, int timeout=5000) -> bool -QtTest.QTest.qWaitForWindowExposed?4(QWindow, int timeout=5000) -> bool -QtTest.QTest.qWaitForWindowActive?4(QWidget, int timeout=5000) -> bool -QtTest.QTest.qWaitForWindowExposed?4(QWidget, int timeout=5000) -> bool -QtXml.QDomImplementation.InvalidDataPolicy?10 -QtXml.QDomImplementation.InvalidDataPolicy.AcceptInvalidChars?10 -QtXml.QDomImplementation.InvalidDataPolicy.DropInvalidChars?10 -QtXml.QDomImplementation.InvalidDataPolicy.ReturnNullNode?10 -QtXml.QDomImplementation?1() -QtXml.QDomImplementation.__init__?1(self) -QtXml.QDomImplementation?1(QDomImplementation) -QtXml.QDomImplementation.__init__?1(self, QDomImplementation) -QtXml.QDomImplementation.hasFeature?4(QString, QString) -> bool -QtXml.QDomImplementation.createDocumentType?4(QString, QString, QString) -> QDomDocumentType -QtXml.QDomImplementation.createDocument?4(QString, QString, QDomDocumentType) -> QDomDocument -QtXml.QDomImplementation.invalidDataPolicy?4() -> QDomImplementation.InvalidDataPolicy -QtXml.QDomImplementation.setInvalidDataPolicy?4(QDomImplementation.InvalidDataPolicy) -QtXml.QDomImplementation.isNull?4() -> bool -QtXml.QDomNode.EncodingPolicy?10 -QtXml.QDomNode.EncodingPolicy.EncodingFromDocument?10 -QtXml.QDomNode.EncodingPolicy.EncodingFromTextStream?10 -QtXml.QDomNode.NodeType?10 -QtXml.QDomNode.NodeType.ElementNode?10 -QtXml.QDomNode.NodeType.AttributeNode?10 -QtXml.QDomNode.NodeType.TextNode?10 -QtXml.QDomNode.NodeType.CDATASectionNode?10 -QtXml.QDomNode.NodeType.EntityReferenceNode?10 -QtXml.QDomNode.NodeType.EntityNode?10 -QtXml.QDomNode.NodeType.ProcessingInstructionNode?10 -QtXml.QDomNode.NodeType.CommentNode?10 -QtXml.QDomNode.NodeType.DocumentNode?10 -QtXml.QDomNode.NodeType.DocumentTypeNode?10 -QtXml.QDomNode.NodeType.DocumentFragmentNode?10 -QtXml.QDomNode.NodeType.NotationNode?10 -QtXml.QDomNode.NodeType.BaseNode?10 -QtXml.QDomNode.NodeType.CharacterDataNode?10 -QtXml.QDomNode?1() -QtXml.QDomNode.__init__?1(self) -QtXml.QDomNode?1(QDomNode) -QtXml.QDomNode.__init__?1(self, QDomNode) -QtXml.QDomNode.insertBefore?4(QDomNode, QDomNode) -> QDomNode -QtXml.QDomNode.insertAfter?4(QDomNode, QDomNode) -> QDomNode -QtXml.QDomNode.replaceChild?4(QDomNode, QDomNode) -> QDomNode -QtXml.QDomNode.removeChild?4(QDomNode) -> QDomNode -QtXml.QDomNode.appendChild?4(QDomNode) -> QDomNode -QtXml.QDomNode.hasChildNodes?4() -> bool -QtXml.QDomNode.cloneNode?4(bool deep=True) -> QDomNode -QtXml.QDomNode.normalize?4() -QtXml.QDomNode.isSupported?4(QString, QString) -> bool -QtXml.QDomNode.nodeName?4() -> QString -QtXml.QDomNode.nodeType?4() -> QDomNode.NodeType -QtXml.QDomNode.parentNode?4() -> QDomNode -QtXml.QDomNode.childNodes?4() -> QDomNodeList -QtXml.QDomNode.firstChild?4() -> QDomNode -QtXml.QDomNode.lastChild?4() -> QDomNode -QtXml.QDomNode.previousSibling?4() -> QDomNode -QtXml.QDomNode.nextSibling?4() -> QDomNode -QtXml.QDomNode.attributes?4() -> QDomNamedNodeMap -QtXml.QDomNode.ownerDocument?4() -> QDomDocument -QtXml.QDomNode.namespaceURI?4() -> QString -QtXml.QDomNode.localName?4() -> QString -QtXml.QDomNode.hasAttributes?4() -> bool -QtXml.QDomNode.nodeValue?4() -> QString -QtXml.QDomNode.setNodeValue?4(QString) -QtXml.QDomNode.prefix?4() -> QString -QtXml.QDomNode.setPrefix?4(QString) -QtXml.QDomNode.isAttr?4() -> bool -QtXml.QDomNode.isCDATASection?4() -> bool -QtXml.QDomNode.isDocumentFragment?4() -> bool -QtXml.QDomNode.isDocument?4() -> bool -QtXml.QDomNode.isDocumentType?4() -> bool -QtXml.QDomNode.isElement?4() -> bool -QtXml.QDomNode.isEntityReference?4() -> bool -QtXml.QDomNode.isText?4() -> bool -QtXml.QDomNode.isEntity?4() -> bool -QtXml.QDomNode.isNotation?4() -> bool -QtXml.QDomNode.isProcessingInstruction?4() -> bool -QtXml.QDomNode.isCharacterData?4() -> bool -QtXml.QDomNode.isComment?4() -> bool -QtXml.QDomNode.namedItem?4(QString) -> QDomNode -QtXml.QDomNode.isNull?4() -> bool -QtXml.QDomNode.clear?4() -QtXml.QDomNode.toAttr?4() -> QDomAttr -QtXml.QDomNode.toCDATASection?4() -> QDomCDATASection -QtXml.QDomNode.toDocumentFragment?4() -> QDomDocumentFragment -QtXml.QDomNode.toDocument?4() -> QDomDocument -QtXml.QDomNode.toDocumentType?4() -> QDomDocumentType -QtXml.QDomNode.toElement?4() -> QDomElement -QtXml.QDomNode.toEntityReference?4() -> QDomEntityReference -QtXml.QDomNode.toText?4() -> QDomText -QtXml.QDomNode.toEntity?4() -> QDomEntity -QtXml.QDomNode.toNotation?4() -> QDomNotation -QtXml.QDomNode.toProcessingInstruction?4() -> QDomProcessingInstruction -QtXml.QDomNode.toCharacterData?4() -> QDomCharacterData -QtXml.QDomNode.toComment?4() -> QDomComment -QtXml.QDomNode.save?4(QTextStream, int, QDomNode.EncodingPolicy=QDomNode.EncodingFromDocument) -QtXml.QDomNode.firstChildElement?4(QString tagName='', QString namespaceURI='') -> QDomElement -QtXml.QDomNode.lastChildElement?4(QString tagName='', QString namespaceURI='') -> QDomElement -QtXml.QDomNode.previousSiblingElement?4(QString tagName='', QString namespaceURI='') -> QDomElement -QtXml.QDomNode.nextSiblingElement?4(QString taName='', QString namespaceURI='') -> QDomElement -QtXml.QDomNode.lineNumber?4() -> int -QtXml.QDomNode.columnNumber?4() -> int -QtXml.QDomNodeList?1() -QtXml.QDomNodeList.__init__?1(self) -QtXml.QDomNodeList?1(QDomNodeList) -QtXml.QDomNodeList.__init__?1(self, QDomNodeList) -QtXml.QDomNodeList.item?4(int) -> QDomNode -QtXml.QDomNodeList.at?4(int) -> QDomNode -QtXml.QDomNodeList.length?4() -> int -QtXml.QDomNodeList.count?4() -> int -QtXml.QDomNodeList.size?4() -> int -QtXml.QDomNodeList.isEmpty?4() -> bool -QtXml.QDomDocumentType?1() -QtXml.QDomDocumentType.__init__?1(self) -QtXml.QDomDocumentType?1(QDomDocumentType) -QtXml.QDomDocumentType.__init__?1(self, QDomDocumentType) -QtXml.QDomDocumentType.name?4() -> QString -QtXml.QDomDocumentType.entities?4() -> QDomNamedNodeMap -QtXml.QDomDocumentType.notations?4() -> QDomNamedNodeMap -QtXml.QDomDocumentType.publicId?4() -> QString -QtXml.QDomDocumentType.systemId?4() -> QString -QtXml.QDomDocumentType.internalSubset?4() -> QString -QtXml.QDomDocumentType.nodeType?4() -> QDomNode.NodeType -QtXml.QDomDocument.ParseOption?10 -QtXml.QDomDocument.ParseOption.Default?10 -QtXml.QDomDocument.ParseOption.UseNamespaceProcessing?10 -QtXml.QDomDocument.ParseOption.PreserveSpacingOnlyNodes?10 -QtXml.QDomDocument?1() -QtXml.QDomDocument.__init__?1(self) -QtXml.QDomDocument?1(QString) -QtXml.QDomDocument.__init__?1(self, QString) -QtXml.QDomDocument?1(QDomDocumentType) -QtXml.QDomDocument.__init__?1(self, QDomDocumentType) -QtXml.QDomDocument?1(QDomDocument) -QtXml.QDomDocument.__init__?1(self, QDomDocument) -QtXml.QDomDocument.createElement?4(QString) -> QDomElement -QtXml.QDomDocument.createDocumentFragment?4() -> QDomDocumentFragment -QtXml.QDomDocument.createTextNode?4(QString) -> QDomText -QtXml.QDomDocument.createComment?4(QString) -> QDomComment -QtXml.QDomDocument.createCDATASection?4(QString) -> QDomCDATASection -QtXml.QDomDocument.createProcessingInstruction?4(QString, QString) -> QDomProcessingInstruction -QtXml.QDomDocument.createAttribute?4(QString) -> QDomAttr -QtXml.QDomDocument.createEntityReference?4(QString) -> QDomEntityReference -QtXml.QDomDocument.elementsByTagName?4(QString) -> QDomNodeList -QtXml.QDomDocument.importNode?4(QDomNode, bool) -> QDomNode -QtXml.QDomDocument.createElementNS?4(QString, QString) -> QDomElement -QtXml.QDomDocument.createAttributeNS?4(QString, QString) -> QDomAttr -QtXml.QDomDocument.elementsByTagNameNS?4(QString, QString) -> QDomNodeList -QtXml.QDomDocument.elementById?4(QString) -> QDomElement -QtXml.QDomDocument.doctype?4() -> QDomDocumentType -QtXml.QDomDocument.implementation?4() -> QDomImplementation -QtXml.QDomDocument.documentElement?4() -> QDomElement -QtXml.QDomDocument.nodeType?4() -> QDomNode.NodeType -QtXml.QDomDocument.setContent?4(QXmlStreamReader, unknown-type options=QDomDocument.ParseOption.Default) -> Any -QtXml.QDomDocument.setContent?4(QIODevice, unknown-type options=QDomDocument.ParseOption.Default) -> Any -QtXml.QDomDocument.setContent?4(QAnyStringView, unknown-type options=QDomDocument.ParseOption.Default) -> Any -QtXml.QDomDocument.setContent?4(QByteArray, bool) -> (bool, QString, int, int) -QtXml.QDomDocument.setContent?4(QString, bool) -> (bool, QString, int, int) -QtXml.QDomDocument.setContent?4(QIODevice, bool) -> (bool, QString, int, int) -QtXml.QDomDocument.setContent?4(QXmlStreamReader, bool) -> (bool, QString, int, int) -QtXml.QDomDocument.toString?4(int indent=1) -> QString -QtXml.QDomDocument.toByteArray?4(int indent=1) -> QByteArray -QtXml.QDomNamedNodeMap?1() -QtXml.QDomNamedNodeMap.__init__?1(self) -QtXml.QDomNamedNodeMap?1(QDomNamedNodeMap) -QtXml.QDomNamedNodeMap.__init__?1(self, QDomNamedNodeMap) -QtXml.QDomNamedNodeMap.namedItem?4(QString) -> QDomNode -QtXml.QDomNamedNodeMap.setNamedItem?4(QDomNode) -> QDomNode -QtXml.QDomNamedNodeMap.removeNamedItem?4(QString) -> QDomNode -QtXml.QDomNamedNodeMap.item?4(int) -> QDomNode -QtXml.QDomNamedNodeMap.namedItemNS?4(QString, QString) -> QDomNode -QtXml.QDomNamedNodeMap.setNamedItemNS?4(QDomNode) -> QDomNode -QtXml.QDomNamedNodeMap.removeNamedItemNS?4(QString, QString) -> QDomNode -QtXml.QDomNamedNodeMap.length?4() -> int -QtXml.QDomNamedNodeMap.count?4() -> int -QtXml.QDomNamedNodeMap.size?4() -> int -QtXml.QDomNamedNodeMap.isEmpty?4() -> bool -QtXml.QDomNamedNodeMap.contains?4(QString) -> bool -QtXml.QDomDocumentFragment?1() -QtXml.QDomDocumentFragment.__init__?1(self) -QtXml.QDomDocumentFragment?1(QDomDocumentFragment) -QtXml.QDomDocumentFragment.__init__?1(self, QDomDocumentFragment) -QtXml.QDomDocumentFragment.nodeType?4() -> QDomNode.NodeType -QtXml.QDomCharacterData?1() -QtXml.QDomCharacterData.__init__?1(self) -QtXml.QDomCharacterData?1(QDomCharacterData) -QtXml.QDomCharacterData.__init__?1(self, QDomCharacterData) -QtXml.QDomCharacterData.substringData?4(int, int) -> QString -QtXml.QDomCharacterData.appendData?4(QString) -QtXml.QDomCharacterData.insertData?4(int, QString) -QtXml.QDomCharacterData.deleteData?4(int, int) -QtXml.QDomCharacterData.replaceData?4(int, int, QString) -QtXml.QDomCharacterData.length?4() -> int -QtXml.QDomCharacterData.data?4() -> QString -QtXml.QDomCharacterData.setData?4(QString) -QtXml.QDomCharacterData.nodeType?4() -> QDomNode.NodeType -QtXml.QDomAttr?1() -QtXml.QDomAttr.__init__?1(self) -QtXml.QDomAttr?1(QDomAttr) -QtXml.QDomAttr.__init__?1(self, QDomAttr) -QtXml.QDomAttr.name?4() -> QString -QtXml.QDomAttr.specified?4() -> bool -QtXml.QDomAttr.ownerElement?4() -> QDomElement -QtXml.QDomAttr.value?4() -> QString -QtXml.QDomAttr.setValue?4(QString) -QtXml.QDomAttr.nodeType?4() -> QDomNode.NodeType -QtXml.QDomElement?1() -QtXml.QDomElement.__init__?1(self) -QtXml.QDomElement?1(QDomElement) -QtXml.QDomElement.__init__?1(self, QDomElement) -QtXml.QDomElement.attribute?4(QString, QString defaultValue='') -> QString -QtXml.QDomElement.setAttribute?4(QString, QString) -QtXml.QDomElement.setAttribute?4(QString, int) -QtXml.QDomElement.setAttribute?4(QString, int) -QtXml.QDomElement.setAttribute?4(QString, float) -QtXml.QDomElement.setAttribute?4(QString, int) -QtXml.QDomElement.removeAttribute?4(QString) -QtXml.QDomElement.attributeNode?4(QString) -> QDomAttr -QtXml.QDomElement.setAttributeNode?4(QDomAttr) -> QDomAttr -QtXml.QDomElement.removeAttributeNode?4(QDomAttr) -> QDomAttr -QtXml.QDomElement.elementsByTagName?4(QString) -> QDomNodeList -QtXml.QDomElement.hasAttribute?4(QString) -> bool -QtXml.QDomElement.attributeNS?4(QString, QString, QString defaultValue='') -> QString -QtXml.QDomElement.setAttributeNS?4(QString, QString, QString) -QtXml.QDomElement.setAttributeNS?4(QString, QString, float) -QtXml.QDomElement.setAttributeNS?4(QString, QString, Any) -QtXml.QDomElement.removeAttributeNS?4(QString, QString) -QtXml.QDomElement.attributeNodeNS?4(QString, QString) -> QDomAttr -QtXml.QDomElement.setAttributeNodeNS?4(QDomAttr) -> QDomAttr -QtXml.QDomElement.elementsByTagNameNS?4(QString, QString) -> QDomNodeList -QtXml.QDomElement.hasAttributeNS?4(QString, QString) -> bool -QtXml.QDomElement.tagName?4() -> QString -QtXml.QDomElement.setTagName?4(QString) -QtXml.QDomElement.attributes?4() -> QDomNamedNodeMap -QtXml.QDomElement.nodeType?4() -> QDomNode.NodeType -QtXml.QDomElement.text?4() -> QString -QtXml.QDomText?1() -QtXml.QDomText.__init__?1(self) -QtXml.QDomText?1(QDomText) -QtXml.QDomText.__init__?1(self, QDomText) -QtXml.QDomText.splitText?4(int) -> QDomText -QtXml.QDomText.nodeType?4() -> QDomNode.NodeType -QtXml.QDomComment?1() -QtXml.QDomComment.__init__?1(self) -QtXml.QDomComment?1(QDomComment) -QtXml.QDomComment.__init__?1(self, QDomComment) -QtXml.QDomComment.nodeType?4() -> QDomNode.NodeType -QtXml.QDomCDATASection?1() -QtXml.QDomCDATASection.__init__?1(self) -QtXml.QDomCDATASection?1(QDomCDATASection) -QtXml.QDomCDATASection.__init__?1(self, QDomCDATASection) -QtXml.QDomCDATASection.nodeType?4() -> QDomNode.NodeType -QtXml.QDomNotation?1() -QtXml.QDomNotation.__init__?1(self) -QtXml.QDomNotation?1(QDomNotation) -QtXml.QDomNotation.__init__?1(self, QDomNotation) -QtXml.QDomNotation.publicId?4() -> QString -QtXml.QDomNotation.systemId?4() -> QString -QtXml.QDomNotation.nodeType?4() -> QDomNode.NodeType -QtXml.QDomEntity?1() -QtXml.QDomEntity.__init__?1(self) -QtXml.QDomEntity?1(QDomEntity) -QtXml.QDomEntity.__init__?1(self, QDomEntity) -QtXml.QDomEntity.publicId?4() -> QString -QtXml.QDomEntity.systemId?4() -> QString -QtXml.QDomEntity.notationName?4() -> QString -QtXml.QDomEntity.nodeType?4() -> QDomNode.NodeType -QtXml.QDomEntityReference?1() -QtXml.QDomEntityReference.__init__?1(self) -QtXml.QDomEntityReference?1(QDomEntityReference) -QtXml.QDomEntityReference.__init__?1(self, QDomEntityReference) -QtXml.QDomEntityReference.nodeType?4() -> QDomNode.NodeType -QtXml.QDomProcessingInstruction?1() -QtXml.QDomProcessingInstruction.__init__?1(self) -QtXml.QDomProcessingInstruction?1(QDomProcessingInstruction) -QtXml.QDomProcessingInstruction.__init__?1(self, QDomProcessingInstruction) -QtXml.QDomProcessingInstruction.target?4() -> QString -QtXml.QDomProcessingInstruction.data?4() -> QString -QtXml.QDomProcessingInstruction.setData?4(QString) -QtXml.QDomProcessingInstruction.nodeType?4() -> QDomNode.NodeType -QtMultimedia.QtVideo.Rotation?10 -QtMultimedia.QtVideo.Rotation.None_?10 -QtMultimedia.QtVideo.Rotation.Clockwise90?10 -QtMultimedia.QtVideo.Rotation.Clockwise180?10 -QtMultimedia.QtVideo.Rotation.Clockwise270?10 -QtMultimedia.QAudio.VolumeScale?10 -QtMultimedia.QAudio.VolumeScale.LinearVolumeScale?10 -QtMultimedia.QAudio.VolumeScale.CubicVolumeScale?10 -QtMultimedia.QAudio.VolumeScale.LogarithmicVolumeScale?10 -QtMultimedia.QAudio.VolumeScale.DecibelVolumeScale?10 -QtMultimedia.QAudio.State?10 -QtMultimedia.QAudio.State.ActiveState?10 -QtMultimedia.QAudio.State.SuspendedState?10 -QtMultimedia.QAudio.State.StoppedState?10 -QtMultimedia.QAudio.State.IdleState?10 -QtMultimedia.QAudio.Error?10 -QtMultimedia.QAudio.Error.NoError?10 -QtMultimedia.QAudio.Error.OpenError?10 -QtMultimedia.QAudio.Error.IOError?10 -QtMultimedia.QAudio.Error.UnderrunError?10 -QtMultimedia.QAudio.Error.FatalError?10 -QtMultimedia.QAudio.convertVolume?4(float, QAudio.VolumeScale, QAudio.VolumeScale) -> float -QtMultimedia.QAudioBuffer?1() -QtMultimedia.QAudioBuffer.__init__?1(self) -QtMultimedia.QAudioBuffer?1(QByteArray, QAudioFormat, int startTime=-1) -QtMultimedia.QAudioBuffer.__init__?1(self, QByteArray, QAudioFormat, int startTime=-1) -QtMultimedia.QAudioBuffer?1(int, QAudioFormat, int startTime=-1) -QtMultimedia.QAudioBuffer.__init__?1(self, int, QAudioFormat, int startTime=-1) -QtMultimedia.QAudioBuffer?1(QAudioBuffer) -QtMultimedia.QAudioBuffer.__init__?1(self, QAudioBuffer) -QtMultimedia.QAudioBuffer.isValid?4() -> bool -QtMultimedia.QAudioBuffer.format?4() -> QAudioFormat -QtMultimedia.QAudioBuffer.frameCount?4() -> int -QtMultimedia.QAudioBuffer.sampleCount?4() -> int -QtMultimedia.QAudioBuffer.byteCount?4() -> int -QtMultimedia.QAudioBuffer.duration?4() -> int -QtMultimedia.QAudioBuffer.startTime?4() -> int -QtMultimedia.QAudioBuffer.swap?4(QAudioBuffer) -QtMultimedia.QAudioBuffer.detach?4() -QtMultimedia.QAudioBuffer.constData?4() -> Any -QtMultimedia.QAudioBuffer.data?4() -> Any -QtMultimedia.QAudioDecoder.Error?10 -QtMultimedia.QAudioDecoder.Error.NoError?10 -QtMultimedia.QAudioDecoder.Error.ResourceError?10 -QtMultimedia.QAudioDecoder.Error.FormatError?10 -QtMultimedia.QAudioDecoder.Error.AccessDeniedError?10 -QtMultimedia.QAudioDecoder.Error.NotSupportedError?10 -QtMultimedia.QAudioDecoder?1(QObject parent=None) -QtMultimedia.QAudioDecoder.__init__?1(self, QObject parent=None) -QtMultimedia.QAudioDecoder.isSupported?4() -> bool -QtMultimedia.QAudioDecoder.isDecoding?4() -> bool -QtMultimedia.QAudioDecoder.source?4() -> QUrl -QtMultimedia.QAudioDecoder.setSource?4(QUrl) -QtMultimedia.QAudioDecoder.sourceDevice?4() -> QIODevice -QtMultimedia.QAudioDecoder.setSourceDevice?4(QIODevice) -QtMultimedia.QAudioDecoder.error?4() -> QAudioDecoder.Error -QtMultimedia.QAudioDecoder.errorString?4() -> QString -QtMultimedia.QAudioDecoder.read?4() -> QAudioBuffer -QtMultimedia.QAudioDecoder.bufferAvailable?4() -> bool -QtMultimedia.QAudioDecoder.position?4() -> int -QtMultimedia.QAudioDecoder.duration?4() -> int -QtMultimedia.QAudioDecoder.audioFormat?4() -> QAudioFormat -QtMultimedia.QAudioDecoder.setAudioFormat?4(QAudioFormat) -QtMultimedia.QAudioDecoder.start?4() -QtMultimedia.QAudioDecoder.stop?4() -QtMultimedia.QAudioDecoder.bufferAvailableChanged?4(bool) -QtMultimedia.QAudioDecoder.bufferReady?4() -QtMultimedia.QAudioDecoder.finished?4() -QtMultimedia.QAudioDecoder.isDecodingChanged?4(bool) -QtMultimedia.QAudioDecoder.error?4(QAudioDecoder.Error) -QtMultimedia.QAudioDecoder.sourceChanged?4() -QtMultimedia.QAudioDecoder.positionChanged?4(int) -QtMultimedia.QAudioDecoder.durationChanged?4(int) -QtMultimedia.QAudioDecoder.formatChanged?4(QAudioFormat) -QtMultimedia.QAudioDevice.Mode?10 -QtMultimedia.QAudioDevice.Mode.Null?10 -QtMultimedia.QAudioDevice.Mode.Input?10 -QtMultimedia.QAudioDevice.Mode.Output?10 -QtMultimedia.QAudioDevice?1() -QtMultimedia.QAudioDevice.__init__?1(self) -QtMultimedia.QAudioDevice?1(QAudioDevice) -QtMultimedia.QAudioDevice.__init__?1(self, QAudioDevice) -QtMultimedia.QAudioDevice.swap?4(QAudioDevice) -QtMultimedia.QAudioDevice.isNull?4() -> bool -QtMultimedia.QAudioDevice.id?4() -> QByteArray -QtMultimedia.QAudioDevice.description?4() -> QString -QtMultimedia.QAudioDevice.isDefault?4() -> bool -QtMultimedia.QAudioDevice.mode?4() -> QAudioDevice.Mode -QtMultimedia.QAudioDevice.isFormatSupported?4(QAudioFormat) -> bool -QtMultimedia.QAudioDevice.preferredFormat?4() -> QAudioFormat -QtMultimedia.QAudioDevice.minimumSampleRate?4() -> int -QtMultimedia.QAudioDevice.maximumSampleRate?4() -> int -QtMultimedia.QAudioDevice.minimumChannelCount?4() -> int -QtMultimedia.QAudioDevice.maximumChannelCount?4() -> int -QtMultimedia.QAudioDevice.supportedSampleFormats?4() -> unknown-type -QtMultimedia.QAudioDevice.channelConfiguration?4() -> QAudioFormat.ChannelConfig -QtMultimedia.QAudioFormat.SampleFormat?10 -QtMultimedia.QAudioFormat.SampleFormat.Unknown?10 -QtMultimedia.QAudioFormat.SampleFormat.UInt8?10 -QtMultimedia.QAudioFormat.SampleFormat.Int16?10 -QtMultimedia.QAudioFormat.SampleFormat.Int32?10 -QtMultimedia.QAudioFormat.SampleFormat.Float?10 -QtMultimedia.QAudioFormat.ChannelConfig?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigUnknown?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigMono?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigStereo?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfig2Dot1?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigSurround5Dot0?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigSurround5Dot1?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigSurround7Dot0?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfigSurround7Dot1?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfig3Dot0?10 -QtMultimedia.QAudioFormat.ChannelConfig.ChannelConfig3Dot1?10 -QtMultimedia.QAudioFormat.AudioChannelPosition?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.UnknownPosition?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.FrontLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.FrontRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.FrontCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.LFE?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BackLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BackRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.FrontLeftOfCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.FrontRightOfCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BackCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.LFE2?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.SideLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.SideRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopFrontLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopFrontRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopFrontCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopBackLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopBackRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopSideLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopSideRight?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.TopBackCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BottomFrontCenter?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BottomFrontLeft?10 -QtMultimedia.QAudioFormat.AudioChannelPosition.BottomFrontRight?10 -QtMultimedia.QAudioFormat?1() -QtMultimedia.QAudioFormat.__init__?1(self) -QtMultimedia.QAudioFormat?1(QAudioFormat) -QtMultimedia.QAudioFormat.__init__?1(self, QAudioFormat) -QtMultimedia.QAudioFormat.isValid?4() -> bool -QtMultimedia.QAudioFormat.setSampleRate?4(int) -QtMultimedia.QAudioFormat.sampleRate?4() -> int -QtMultimedia.QAudioFormat.setChannelCount?4(int) -QtMultimedia.QAudioFormat.channelCount?4() -> int -QtMultimedia.QAudioFormat.bytesForDuration?4(int) -> int -QtMultimedia.QAudioFormat.durationForBytes?4(int) -> int -QtMultimedia.QAudioFormat.bytesForFrames?4(int) -> int -QtMultimedia.QAudioFormat.framesForBytes?4(int) -> int -QtMultimedia.QAudioFormat.framesForDuration?4(int) -> int -QtMultimedia.QAudioFormat.durationForFrames?4(int) -> int -QtMultimedia.QAudioFormat.bytesPerFrame?4() -> int -QtMultimedia.QAudioFormat.setChannelConfig?4(QAudioFormat.ChannelConfig) -QtMultimedia.QAudioFormat.channelConfig?4() -> QAudioFormat.ChannelConfig -QtMultimedia.QAudioFormat.channelOffset?4(QAudioFormat.AudioChannelPosition) -> int -QtMultimedia.QAudioFormat.setSampleFormat?4(QAudioFormat.SampleFormat) -QtMultimedia.QAudioFormat.sampleFormat?4() -> QAudioFormat.SampleFormat -QtMultimedia.QAudioFormat.bytesPerSample?4() -> int -QtMultimedia.QAudioFormat.normalizedSampleValue?4(PyQt6.sip.voidptr) -> float -QtMultimedia.QAudioFormat.defaultChannelConfigForChannelCount?4(int) -> QAudioFormat.ChannelConfig -QtMultimedia.QAudioInput?1(QAudioDevice, QObject parent=None) -QtMultimedia.QAudioInput.__init__?1(self, QAudioDevice, QObject parent=None) -QtMultimedia.QAudioInput?1(QObject parent=None) -QtMultimedia.QAudioInput.__init__?1(self, QObject parent=None) -QtMultimedia.QAudioInput.device?4() -> QAudioDevice -QtMultimedia.QAudioInput.volume?4() -> float -QtMultimedia.QAudioInput.isMuted?4() -> bool -QtMultimedia.QAudioInput.setDevice?4(QAudioDevice) -QtMultimedia.QAudioInput.setMuted?4(bool) -QtMultimedia.QAudioInput.setVolume?4(float) -QtMultimedia.QAudioInput.deviceChanged?4() -QtMultimedia.QAudioInput.volumeChanged?4(float) -QtMultimedia.QAudioInput.mutedChanged?4(bool) -QtMultimedia.QAudioOutput?1(QAudioDevice, QObject parent=None) -QtMultimedia.QAudioOutput.__init__?1(self, QAudioDevice, QObject parent=None) -QtMultimedia.QAudioOutput?1(QObject parent=None) -QtMultimedia.QAudioOutput.__init__?1(self, QObject parent=None) -QtMultimedia.QAudioOutput.volume?4() -> float -QtMultimedia.QAudioOutput.device?4() -> QAudioDevice -QtMultimedia.QAudioOutput.isMuted?4() -> bool -QtMultimedia.QAudioOutput.setDevice?4(QAudioDevice) -QtMultimedia.QAudioOutput.setVolume?4(float) -QtMultimedia.QAudioOutput.setMuted?4(bool) -QtMultimedia.QAudioOutput.deviceChanged?4() -QtMultimedia.QAudioOutput.volumeChanged?4(float) -QtMultimedia.QAudioOutput.mutedChanged?4(bool) -QtMultimedia.QAudioSink?1(QAudioDevice, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSink.__init__?1(self, QAudioDevice, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSink?1(QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSink.__init__?1(self, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSink.format?4() -> QAudioFormat -QtMultimedia.QAudioSink.start?4(QIODevice) -QtMultimedia.QAudioSink.start?4() -> QIODevice -QtMultimedia.QAudioSink.stop?4() -QtMultimedia.QAudioSink.reset?4() -QtMultimedia.QAudioSink.suspend?4() -QtMultimedia.QAudioSink.resume?4() -QtMultimedia.QAudioSink.setBufferSize?4(int) -QtMultimedia.QAudioSink.bufferSize?4() -> int -QtMultimedia.QAudioSink.bytesFree?4() -> int -QtMultimedia.QAudioSink.processedUSecs?4() -> int -QtMultimedia.QAudioSink.elapsedUSecs?4() -> int -QtMultimedia.QAudioSink.error?4() -> QAudio.Error -QtMultimedia.QAudioSink.state?4() -> QAudio.State -QtMultimedia.QAudioSink.setVolume?4(float) -QtMultimedia.QAudioSink.volume?4() -> float -QtMultimedia.QAudioSink.stateChanged?4(QAudio.State) -QtMultimedia.QAudioSource?1(QAudioDevice, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSource.__init__?1(self, QAudioDevice, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSource?1(QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSource.__init__?1(self, QAudioFormat format=QAudioFormat(), QObject parent=None) -QtMultimedia.QAudioSource.format?4() -> QAudioFormat -QtMultimedia.QAudioSource.start?4(QIODevice) -QtMultimedia.QAudioSource.start?4() -> QIODevice -QtMultimedia.QAudioSource.stop?4() -QtMultimedia.QAudioSource.reset?4() -QtMultimedia.QAudioSource.suspend?4() -QtMultimedia.QAudioSource.resume?4() -QtMultimedia.QAudioSource.setBufferSize?4(int) -QtMultimedia.QAudioSource.bufferSize?4() -> int -QtMultimedia.QAudioSource.bytesAvailable?4() -> int -QtMultimedia.QAudioSource.setVolume?4(float) -QtMultimedia.QAudioSource.volume?4() -> float -QtMultimedia.QAudioSource.processedUSecs?4() -> int -QtMultimedia.QAudioSource.elapsedUSecs?4() -> int -QtMultimedia.QAudioSource.error?4() -> QAudio.Error -QtMultimedia.QAudioSource.state?4() -> QAudio.State -QtMultimedia.QAudioSource.stateChanged?4(QAudio.State) -QtMultimedia.QCamera.Feature?10 -QtMultimedia.QCamera.Feature.ColorTemperature?10 -QtMultimedia.QCamera.Feature.ExposureCompensation?10 -QtMultimedia.QCamera.Feature.IsoSensitivity?10 -QtMultimedia.QCamera.Feature.ManualExposureTime?10 -QtMultimedia.QCamera.Feature.CustomFocusPoint?10 -QtMultimedia.QCamera.Feature.FocusDistance?10 -QtMultimedia.QCamera.WhiteBalanceMode?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceAuto?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceManual?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceSunlight?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceCloudy?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceShade?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceTungsten?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceFluorescent?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceFlash?10 -QtMultimedia.QCamera.WhiteBalanceMode.WhiteBalanceSunset?10 -QtMultimedia.QCamera.ExposureMode?10 -QtMultimedia.QCamera.ExposureMode.ExposureAuto?10 -QtMultimedia.QCamera.ExposureMode.ExposureManual?10 -QtMultimedia.QCamera.ExposureMode.ExposurePortrait?10 -QtMultimedia.QCamera.ExposureMode.ExposureNight?10 -QtMultimedia.QCamera.ExposureMode.ExposureSports?10 -QtMultimedia.QCamera.ExposureMode.ExposureSnow?10 -QtMultimedia.QCamera.ExposureMode.ExposureBeach?10 -QtMultimedia.QCamera.ExposureMode.ExposureAction?10 -QtMultimedia.QCamera.ExposureMode.ExposureLandscape?10 -QtMultimedia.QCamera.ExposureMode.ExposureNightPortrait?10 -QtMultimedia.QCamera.ExposureMode.ExposureTheatre?10 -QtMultimedia.QCamera.ExposureMode.ExposureSunset?10 -QtMultimedia.QCamera.ExposureMode.ExposureSteadyPhoto?10 -QtMultimedia.QCamera.ExposureMode.ExposureFireworks?10 -QtMultimedia.QCamera.ExposureMode.ExposureParty?10 -QtMultimedia.QCamera.ExposureMode.ExposureCandlelight?10 -QtMultimedia.QCamera.ExposureMode.ExposureBarcode?10 -QtMultimedia.QCamera.TorchMode?10 -QtMultimedia.QCamera.TorchMode.TorchOff?10 -QtMultimedia.QCamera.TorchMode.TorchOn?10 -QtMultimedia.QCamera.TorchMode.TorchAuto?10 -QtMultimedia.QCamera.FlashMode?10 -QtMultimedia.QCamera.FlashMode.FlashOff?10 -QtMultimedia.QCamera.FlashMode.FlashOn?10 -QtMultimedia.QCamera.FlashMode.FlashAuto?10 -QtMultimedia.QCamera.FocusMode?10 -QtMultimedia.QCamera.FocusMode.FocusModeAuto?10 -QtMultimedia.QCamera.FocusMode.FocusModeAutoNear?10 -QtMultimedia.QCamera.FocusMode.FocusModeAutoFar?10 -QtMultimedia.QCamera.FocusMode.FocusModeHyperfocal?10 -QtMultimedia.QCamera.FocusMode.FocusModeInfinity?10 -QtMultimedia.QCamera.FocusMode.FocusModeManual?10 -QtMultimedia.QCamera.Error?10 -QtMultimedia.QCamera.Error.NoError?10 -QtMultimedia.QCamera.Error.CameraError?10 -QtMultimedia.QCamera?1(QCameraDevice, QObject parent=None) -QtMultimedia.QCamera.__init__?1(self, QCameraDevice, QObject parent=None) -QtMultimedia.QCamera?1(QCameraDevice.Position, QObject parent=None) -QtMultimedia.QCamera.__init__?1(self, QCameraDevice.Position, QObject parent=None) -QtMultimedia.QCamera?1(QObject parent=None) -QtMultimedia.QCamera.__init__?1(self, QObject parent=None) -QtMultimedia.QCamera.isAvailable?4() -> bool -QtMultimedia.QCamera.isActive?4() -> bool -QtMultimedia.QCamera.captureSession?4() -> QMediaCaptureSession -QtMultimedia.QCamera.cameraDevice?4() -> QCameraDevice -QtMultimedia.QCamera.setCameraDevice?4(QCameraDevice) -QtMultimedia.QCamera.cameraFormat?4() -> QCameraFormat -QtMultimedia.QCamera.setCameraFormat?4(QCameraFormat) -QtMultimedia.QCamera.error?4() -> QCamera.Error -QtMultimedia.QCamera.errorString?4() -> QString -QtMultimedia.QCamera.supportedFeatures?4() -> unknown-type -QtMultimedia.QCamera.focusMode?4() -> QCamera.FocusMode -QtMultimedia.QCamera.setFocusMode?4(QCamera.FocusMode) -QtMultimedia.QCamera.isFocusModeSupported?4(QCamera.FocusMode) -> bool -QtMultimedia.QCamera.focusPoint?4() -> QPointF -QtMultimedia.QCamera.customFocusPoint?4() -> QPointF -QtMultimedia.QCamera.setCustomFocusPoint?4(QPointF) -QtMultimedia.QCamera.setFocusDistance?4(float) -QtMultimedia.QCamera.focusDistance?4() -> float -QtMultimedia.QCamera.minimumZoomFactor?4() -> float -QtMultimedia.QCamera.maximumZoomFactor?4() -> float -QtMultimedia.QCamera.zoomFactor?4() -> float -QtMultimedia.QCamera.setZoomFactor?4(float) -QtMultimedia.QCamera.flashMode?4() -> QCamera.FlashMode -QtMultimedia.QCamera.isFlashModeSupported?4(QCamera.FlashMode) -> bool -QtMultimedia.QCamera.isFlashReady?4() -> bool -QtMultimedia.QCamera.torchMode?4() -> QCamera.TorchMode -QtMultimedia.QCamera.isTorchModeSupported?4(QCamera.TorchMode) -> bool -QtMultimedia.QCamera.exposureMode?4() -> QCamera.ExposureMode -QtMultimedia.QCamera.isExposureModeSupported?4(QCamera.ExposureMode) -> bool -QtMultimedia.QCamera.exposureCompensation?4() -> float -QtMultimedia.QCamera.isoSensitivity?4() -> int -QtMultimedia.QCamera.manualIsoSensitivity?4() -> int -QtMultimedia.QCamera.exposureTime?4() -> float -QtMultimedia.QCamera.manualExposureTime?4() -> float -QtMultimedia.QCamera.minimumIsoSensitivity?4() -> int -QtMultimedia.QCamera.maximumIsoSensitivity?4() -> int -QtMultimedia.QCamera.minimumExposureTime?4() -> float -QtMultimedia.QCamera.maximumExposureTime?4() -> float -QtMultimedia.QCamera.whiteBalanceMode?4() -> QCamera.WhiteBalanceMode -QtMultimedia.QCamera.isWhiteBalanceModeSupported?4(QCamera.WhiteBalanceMode) -> bool -QtMultimedia.QCamera.colorTemperature?4() -> int -QtMultimedia.QCamera.setActive?4(bool) -QtMultimedia.QCamera.start?4() -QtMultimedia.QCamera.stop?4() -QtMultimedia.QCamera.zoomTo?4(float, float) -QtMultimedia.QCamera.setFlashMode?4(QCamera.FlashMode) -QtMultimedia.QCamera.setTorchMode?4(QCamera.TorchMode) -QtMultimedia.QCamera.setExposureMode?4(QCamera.ExposureMode) -QtMultimedia.QCamera.setExposureCompensation?4(float) -QtMultimedia.QCamera.setManualIsoSensitivity?4(int) -QtMultimedia.QCamera.setAutoIsoSensitivity?4() -QtMultimedia.QCamera.setManualExposureTime?4(float) -QtMultimedia.QCamera.setAutoExposureTime?4() -QtMultimedia.QCamera.setWhiteBalanceMode?4(QCamera.WhiteBalanceMode) -QtMultimedia.QCamera.setColorTemperature?4(int) -QtMultimedia.QCamera.activeChanged?4(bool) -QtMultimedia.QCamera.errorChanged?4() -QtMultimedia.QCamera.errorOccurred?4(QCamera.Error, QString) -QtMultimedia.QCamera.cameraDeviceChanged?4() -QtMultimedia.QCamera.cameraFormatChanged?4() -QtMultimedia.QCamera.supportedFeaturesChanged?4() -QtMultimedia.QCamera.focusModeChanged?4() -QtMultimedia.QCamera.zoomFactorChanged?4(float) -QtMultimedia.QCamera.minimumZoomFactorChanged?4(float) -QtMultimedia.QCamera.maximumZoomFactorChanged?4(float) -QtMultimedia.QCamera.focusDistanceChanged?4(float) -QtMultimedia.QCamera.customFocusPointChanged?4() -QtMultimedia.QCamera.flashReady?4(bool) -QtMultimedia.QCamera.flashModeChanged?4() -QtMultimedia.QCamera.torchModeChanged?4() -QtMultimedia.QCamera.exposureTimeChanged?4(float) -QtMultimedia.QCamera.isoSensitivityChanged?4(int) -QtMultimedia.QCamera.exposureCompensationChanged?4(float) -QtMultimedia.QCamera.exposureModeChanged?4() -QtMultimedia.QCamera.whiteBalanceModeChanged?4() -QtMultimedia.QCamera.colorTemperatureChanged?4() -QtMultimedia.QCamera.focusPointChanged?4() -QtMultimedia.QCamera.manualExposureTimeChanged?4(float) -QtMultimedia.QCamera.manualIsoSensitivityChanged?4(int) -QtMultimedia.QCameraFormat?1() -QtMultimedia.QCameraFormat.__init__?1(self) -QtMultimedia.QCameraFormat?1(QCameraFormat) -QtMultimedia.QCameraFormat.__init__?1(self, QCameraFormat) -QtMultimedia.QCameraFormat.pixelFormat?4() -> QVideoFrameFormat.PixelFormat -QtMultimedia.QCameraFormat.resolution?4() -> QSize -QtMultimedia.QCameraFormat.minFrameRate?4() -> float -QtMultimedia.QCameraFormat.maxFrameRate?4() -> float -QtMultimedia.QCameraFormat.isNull?4() -> bool -QtMultimedia.QCameraDevice.Position?10 -QtMultimedia.QCameraDevice.Position.UnspecifiedPosition?10 -QtMultimedia.QCameraDevice.Position.BackFace?10 -QtMultimedia.QCameraDevice.Position.FrontFace?10 -QtMultimedia.QCameraDevice?1() -QtMultimedia.QCameraDevice.__init__?1(self) -QtMultimedia.QCameraDevice?1(QCameraDevice) -QtMultimedia.QCameraDevice.__init__?1(self, QCameraDevice) -QtMultimedia.QCameraDevice.isNull?4() -> bool -QtMultimedia.QCameraDevice.id?4() -> QByteArray -QtMultimedia.QCameraDevice.description?4() -> QString -QtMultimedia.QCameraDevice.isDefault?4() -> bool -QtMultimedia.QCameraDevice.position?4() -> QCameraDevice.Position -QtMultimedia.QCameraDevice.photoResolutions?4() -> unknown-type -QtMultimedia.QCameraDevice.videoFormats?4() -> unknown-type -QtMultimedia.QCameraDevice.correctionAngle?4() -> QtVideo.Rotation -QtMultimedia.QCapturableWindow?1() -QtMultimedia.QCapturableWindow.__init__?1(self) -QtMultimedia.QCapturableWindow?1(QCapturableWindow) -QtMultimedia.QCapturableWindow.__init__?1(self, QCapturableWindow) -QtMultimedia.QCapturableWindow.swap?4(QCapturableWindow) -QtMultimedia.QCapturableWindow.isValid?4() -> bool -QtMultimedia.QCapturableWindow.description?4() -> QString -QtMultimedia.QImageCapture.FileFormat?10 -QtMultimedia.QImageCapture.FileFormat.UnspecifiedFormat?10 -QtMultimedia.QImageCapture.FileFormat.JPEG?10 -QtMultimedia.QImageCapture.FileFormat.PNG?10 -QtMultimedia.QImageCapture.FileFormat.WebP?10 -QtMultimedia.QImageCapture.FileFormat.Tiff?10 -QtMultimedia.QImageCapture.Quality?10 -QtMultimedia.QImageCapture.Quality.VeryLowQuality?10 -QtMultimedia.QImageCapture.Quality.LowQuality?10 -QtMultimedia.QImageCapture.Quality.NormalQuality?10 -QtMultimedia.QImageCapture.Quality.HighQuality?10 -QtMultimedia.QImageCapture.Quality.VeryHighQuality?10 -QtMultimedia.QImageCapture.Error?10 -QtMultimedia.QImageCapture.Error.NoError?10 -QtMultimedia.QImageCapture.Error.NotReadyError?10 -QtMultimedia.QImageCapture.Error.ResourceError?10 -QtMultimedia.QImageCapture.Error.OutOfSpaceError?10 -QtMultimedia.QImageCapture.Error.NotSupportedFeatureError?10 -QtMultimedia.QImageCapture.Error.FormatError?10 -QtMultimedia.QImageCapture?1(QObject parent=None) -QtMultimedia.QImageCapture.__init__?1(self, QObject parent=None) -QtMultimedia.QImageCapture.isAvailable?4() -> bool -QtMultimedia.QImageCapture.captureSession?4() -> QMediaCaptureSession -QtMultimedia.QImageCapture.error?4() -> QImageCapture.Error -QtMultimedia.QImageCapture.errorString?4() -> QString -QtMultimedia.QImageCapture.isReadyForCapture?4() -> bool -QtMultimedia.QImageCapture.fileFormat?4() -> QImageCapture.FileFormat -QtMultimedia.QImageCapture.setFileFormat?4(QImageCapture.FileFormat) -QtMultimedia.QImageCapture.supportedFormats?4() -> unknown-type -QtMultimedia.QImageCapture.fileFormatName?4(QImageCapture.FileFormat) -> QString -QtMultimedia.QImageCapture.fileFormatDescription?4(QImageCapture.FileFormat) -> QString -QtMultimedia.QImageCapture.resolution?4() -> QSize -QtMultimedia.QImageCapture.setResolution?4(QSize) -QtMultimedia.QImageCapture.setResolution?4(int, int) -QtMultimedia.QImageCapture.quality?4() -> QImageCapture.Quality -QtMultimedia.QImageCapture.setQuality?4(QImageCapture.Quality) -QtMultimedia.QImageCapture.metaData?4() -> QMediaMetaData -QtMultimedia.QImageCapture.setMetaData?4(QMediaMetaData) -QtMultimedia.QImageCapture.addMetaData?4(QMediaMetaData) -QtMultimedia.QImageCapture.captureToFile?4(QString location='') -> int -QtMultimedia.QImageCapture.capture?4() -> int -QtMultimedia.QImageCapture.errorChanged?4() -QtMultimedia.QImageCapture.errorOccurred?4(int, QImageCapture.Error, QString) -QtMultimedia.QImageCapture.readyForCaptureChanged?4(bool) -QtMultimedia.QImageCapture.metaDataChanged?4() -QtMultimedia.QImageCapture.fileFormatChanged?4() -QtMultimedia.QImageCapture.qualityChanged?4() -QtMultimedia.QImageCapture.resolutionChanged?4() -QtMultimedia.QImageCapture.imageExposed?4(int) -QtMultimedia.QImageCapture.imageCaptured?4(int, QImage) -QtMultimedia.QImageCapture.imageAvailable?4(int, QVideoFrame) -QtMultimedia.QImageCapture.imageSaved?4(int, QString) -QtMultimedia.QMediaCaptureSession?1(QObject parent=None) -QtMultimedia.QMediaCaptureSession.__init__?1(self, QObject parent=None) -QtMultimedia.QMediaCaptureSession.audioInput?4() -> QAudioInput -QtMultimedia.QMediaCaptureSession.setAudioInput?4(QAudioInput) -QtMultimedia.QMediaCaptureSession.camera?4() -> QCamera -QtMultimedia.QMediaCaptureSession.setCamera?4(QCamera) -QtMultimedia.QMediaCaptureSession.imageCapture?4() -> QImageCapture -QtMultimedia.QMediaCaptureSession.setImageCapture?4(QImageCapture) -QtMultimedia.QMediaCaptureSession.recorder?4() -> QMediaRecorder -QtMultimedia.QMediaCaptureSession.setRecorder?4(QMediaRecorder) -QtMultimedia.QMediaCaptureSession.setVideoOutput?4(QObject) -QtMultimedia.QMediaCaptureSession.videoOutput?4() -> QObject -QtMultimedia.QMediaCaptureSession.setVideoSink?4(QVideoSink) -QtMultimedia.QMediaCaptureSession.videoSink?4() -> QVideoSink -QtMultimedia.QMediaCaptureSession.setAudioOutput?4(QAudioOutput) -QtMultimedia.QMediaCaptureSession.audioOutput?4() -> QAudioOutput -QtMultimedia.QMediaCaptureSession.audioInputChanged?4() -QtMultimedia.QMediaCaptureSession.cameraChanged?4() -QtMultimedia.QMediaCaptureSession.imageCaptureChanged?4() -QtMultimedia.QMediaCaptureSession.recorderChanged?4() -QtMultimedia.QMediaCaptureSession.videoOutputChanged?4() -QtMultimedia.QMediaCaptureSession.audioOutputChanged?4() -QtMultimedia.QMediaCaptureSession.screenCapture?4() -> QScreenCapture -QtMultimedia.QMediaCaptureSession.setScreenCapture?4(QScreenCapture) -QtMultimedia.QMediaCaptureSession.screenCaptureChanged?4() -QtMultimedia.QMediaCaptureSession.windowCapture?4() -> QWindowCapture -QtMultimedia.QMediaCaptureSession.setWindowCapture?4(QWindowCapture) -QtMultimedia.QMediaCaptureSession.windowCaptureChanged?4() -QtMultimedia.QMediaDevices?1(QObject parent=None) -QtMultimedia.QMediaDevices.__init__?1(self, QObject parent=None) -QtMultimedia.QMediaDevices.audioInputs?4() -> unknown-type -QtMultimedia.QMediaDevices.audioOutputs?4() -> unknown-type -QtMultimedia.QMediaDevices.videoInputs?4() -> unknown-type -QtMultimedia.QMediaDevices.defaultAudioInput?4() -> QAudioDevice -QtMultimedia.QMediaDevices.defaultAudioOutput?4() -> QAudioDevice -QtMultimedia.QMediaDevices.defaultVideoInput?4() -> QCameraDevice -QtMultimedia.QMediaDevices.audioInputsChanged?4() -QtMultimedia.QMediaDevices.audioOutputsChanged?4() -QtMultimedia.QMediaDevices.videoInputsChanged?4() -QtMultimedia.QMediaFormat.ResolveFlags?10 -QtMultimedia.QMediaFormat.ResolveFlags.NoFlags?10 -QtMultimedia.QMediaFormat.ResolveFlags.RequiresVideo?10 -QtMultimedia.QMediaFormat.ConversionMode?10 -QtMultimedia.QMediaFormat.ConversionMode.Encode?10 -QtMultimedia.QMediaFormat.ConversionMode.Decode?10 -QtMultimedia.QMediaFormat.VideoCodec?10 -QtMultimedia.QMediaFormat.VideoCodec.Unspecified?10 -QtMultimedia.QMediaFormat.VideoCodec.MPEG1?10 -QtMultimedia.QMediaFormat.VideoCodec.MPEG2?10 -QtMultimedia.QMediaFormat.VideoCodec.MPEG4?10 -QtMultimedia.QMediaFormat.VideoCodec.H264?10 -QtMultimedia.QMediaFormat.VideoCodec.H265?10 -QtMultimedia.QMediaFormat.VideoCodec.VP8?10 -QtMultimedia.QMediaFormat.VideoCodec.VP9?10 -QtMultimedia.QMediaFormat.VideoCodec.AV1?10 -QtMultimedia.QMediaFormat.VideoCodec.Theora?10 -QtMultimedia.QMediaFormat.VideoCodec.WMV?10 -QtMultimedia.QMediaFormat.VideoCodec.MotionJPEG?10 -QtMultimedia.QMediaFormat.AudioCodec?10 -QtMultimedia.QMediaFormat.AudioCodec.Unspecified?10 -QtMultimedia.QMediaFormat.AudioCodec.MP3?10 -QtMultimedia.QMediaFormat.AudioCodec.AAC?10 -QtMultimedia.QMediaFormat.AudioCodec.AC3?10 -QtMultimedia.QMediaFormat.AudioCodec.EAC3?10 -QtMultimedia.QMediaFormat.AudioCodec.FLAC?10 -QtMultimedia.QMediaFormat.AudioCodec.DolbyTrueHD?10 -QtMultimedia.QMediaFormat.AudioCodec.Opus?10 -QtMultimedia.QMediaFormat.AudioCodec.Vorbis?10 -QtMultimedia.QMediaFormat.AudioCodec.Wave?10 -QtMultimedia.QMediaFormat.AudioCodec.WMA?10 -QtMultimedia.QMediaFormat.AudioCodec.ALAC?10 -QtMultimedia.QMediaFormat.FileFormat?10 -QtMultimedia.QMediaFormat.FileFormat.UnspecifiedFormat?10 -QtMultimedia.QMediaFormat.FileFormat.WMV?10 -QtMultimedia.QMediaFormat.FileFormat.AVI?10 -QtMultimedia.QMediaFormat.FileFormat.Matroska?10 -QtMultimedia.QMediaFormat.FileFormat.MPEG4?10 -QtMultimedia.QMediaFormat.FileFormat.Ogg?10 -QtMultimedia.QMediaFormat.FileFormat.QuickTime?10 -QtMultimedia.QMediaFormat.FileFormat.WebM?10 -QtMultimedia.QMediaFormat.FileFormat.Mpeg4Audio?10 -QtMultimedia.QMediaFormat.FileFormat.AAC?10 -QtMultimedia.QMediaFormat.FileFormat.WMA?10 -QtMultimedia.QMediaFormat.FileFormat.MP3?10 -QtMultimedia.QMediaFormat.FileFormat.FLAC?10 -QtMultimedia.QMediaFormat.FileFormat.Wave?10 -QtMultimedia.QMediaFormat?1(QMediaFormat.FileFormat format=QMediaFormat.UnspecifiedFormat) -QtMultimedia.QMediaFormat.__init__?1(self, QMediaFormat.FileFormat format=QMediaFormat.UnspecifiedFormat) -QtMultimedia.QMediaFormat?1(QMediaFormat) -QtMultimedia.QMediaFormat.__init__?1(self, QMediaFormat) -QtMultimedia.QMediaFormat.swap?4(QMediaFormat) -QtMultimedia.QMediaFormat.fileFormat?4() -> QMediaFormat.FileFormat -QtMultimedia.QMediaFormat.setFileFormat?4(QMediaFormat.FileFormat) -QtMultimedia.QMediaFormat.setVideoCodec?4(QMediaFormat.VideoCodec) -QtMultimedia.QMediaFormat.videoCodec?4() -> QMediaFormat.VideoCodec -QtMultimedia.QMediaFormat.setAudioCodec?4(QMediaFormat.AudioCodec) -QtMultimedia.QMediaFormat.audioCodec?4() -> QMediaFormat.AudioCodec -QtMultimedia.QMediaFormat.isSupported?4(QMediaFormat.ConversionMode) -> bool -QtMultimedia.QMediaFormat.mimeType?4() -> QMimeType -QtMultimedia.QMediaFormat.supportedFileFormats?4(QMediaFormat.ConversionMode) -> unknown-type -QtMultimedia.QMediaFormat.supportedVideoCodecs?4(QMediaFormat.ConversionMode) -> unknown-type -QtMultimedia.QMediaFormat.supportedAudioCodecs?4(QMediaFormat.ConversionMode) -> unknown-type -QtMultimedia.QMediaFormat.fileFormatName?4(QMediaFormat.FileFormat) -> QString -QtMultimedia.QMediaFormat.audioCodecName?4(QMediaFormat.AudioCodec) -> QString -QtMultimedia.QMediaFormat.videoCodecName?4(QMediaFormat.VideoCodec) -> QString -QtMultimedia.QMediaFormat.fileFormatDescription?4(QMediaFormat.FileFormat) -> QString -QtMultimedia.QMediaFormat.audioCodecDescription?4(QMediaFormat.AudioCodec) -> QString -QtMultimedia.QMediaFormat.videoCodecDescription?4(QMediaFormat.VideoCodec) -> QString -QtMultimedia.QMediaFormat.resolveForEncoding?4(QMediaFormat.ResolveFlags) -QtMultimedia.QMediaMetaData.Key?10 -QtMultimedia.QMediaMetaData.Key.Title?10 -QtMultimedia.QMediaMetaData.Key.Author?10 -QtMultimedia.QMediaMetaData.Key.Comment?10 -QtMultimedia.QMediaMetaData.Key.Description?10 -QtMultimedia.QMediaMetaData.Key.Genre?10 -QtMultimedia.QMediaMetaData.Key.Date?10 -QtMultimedia.QMediaMetaData.Key.Language?10 -QtMultimedia.QMediaMetaData.Key.Publisher?10 -QtMultimedia.QMediaMetaData.Key.Copyright?10 -QtMultimedia.QMediaMetaData.Key.Url?10 -QtMultimedia.QMediaMetaData.Key.Duration?10 -QtMultimedia.QMediaMetaData.Key.MediaType?10 -QtMultimedia.QMediaMetaData.Key.FileFormat?10 -QtMultimedia.QMediaMetaData.Key.AudioBitRate?10 -QtMultimedia.QMediaMetaData.Key.AudioCodec?10 -QtMultimedia.QMediaMetaData.Key.VideoBitRate?10 -QtMultimedia.QMediaMetaData.Key.VideoCodec?10 -QtMultimedia.QMediaMetaData.Key.VideoFrameRate?10 -QtMultimedia.QMediaMetaData.Key.AlbumTitle?10 -QtMultimedia.QMediaMetaData.Key.AlbumArtist?10 -QtMultimedia.QMediaMetaData.Key.ContributingArtist?10 -QtMultimedia.QMediaMetaData.Key.TrackNumber?10 -QtMultimedia.QMediaMetaData.Key.Composer?10 -QtMultimedia.QMediaMetaData.Key.LeadPerformer?10 -QtMultimedia.QMediaMetaData.Key.ThumbnailImage?10 -QtMultimedia.QMediaMetaData.Key.CoverArtImage?10 -QtMultimedia.QMediaMetaData.Key.Orientation?10 -QtMultimedia.QMediaMetaData.Key.Resolution?10 -QtMultimedia.QMediaMetaData?1() -QtMultimedia.QMediaMetaData.__init__?1(self) -QtMultimedia.QMediaMetaData?1(QMediaMetaData) -QtMultimedia.QMediaMetaData.__init__?1(self, QMediaMetaData) -QtMultimedia.QMediaMetaData.value?4(QMediaMetaData.Key) -> QVariant -QtMultimedia.QMediaMetaData.insert?4(QMediaMetaData.Key, QVariant) -QtMultimedia.QMediaMetaData.keys?4() -> unknown-type -QtMultimedia.QMediaMetaData.stringValue?4(QMediaMetaData.Key) -> QString -QtMultimedia.QMediaMetaData.metaDataKeyToString?4(QMediaMetaData.Key) -> QString -QtMultimedia.QMediaMetaData.keyType?4(QMediaMetaData.Key) -> QMetaType -QtMultimedia.QMediaPlayer.Loops?10 -QtMultimedia.QMediaPlayer.Loops.Infinite?10 -QtMultimedia.QMediaPlayer.Loops.Once?10 -QtMultimedia.QMediaPlayer.Error?10 -QtMultimedia.QMediaPlayer.Error.NoError?10 -QtMultimedia.QMediaPlayer.Error.ResourceError?10 -QtMultimedia.QMediaPlayer.Error.FormatError?10 -QtMultimedia.QMediaPlayer.Error.NetworkError?10 -QtMultimedia.QMediaPlayer.Error.AccessDeniedError?10 -QtMultimedia.QMediaPlayer.MediaStatus?10 -QtMultimedia.QMediaPlayer.MediaStatus.NoMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.LoadingMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.LoadedMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.StalledMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.BufferingMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.BufferedMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.EndOfMedia?10 -QtMultimedia.QMediaPlayer.MediaStatus.InvalidMedia?10 -QtMultimedia.QMediaPlayer.PlaybackState?10 -QtMultimedia.QMediaPlayer.PlaybackState.StoppedState?10 -QtMultimedia.QMediaPlayer.PlaybackState.PlayingState?10 -QtMultimedia.QMediaPlayer.PlaybackState.PausedState?10 -QtMultimedia.QMediaPlayer?1(QObject parent=None) -QtMultimedia.QMediaPlayer.__init__?1(self, QObject parent=None) -QtMultimedia.QMediaPlayer.audioTracks?4() -> unknown-type -QtMultimedia.QMediaPlayer.videoTracks?4() -> unknown-type -QtMultimedia.QMediaPlayer.subtitleTracks?4() -> unknown-type -QtMultimedia.QMediaPlayer.activeAudioTrack?4() -> int -QtMultimedia.QMediaPlayer.activeVideoTrack?4() -> int -QtMultimedia.QMediaPlayer.activeSubtitleTrack?4() -> int -QtMultimedia.QMediaPlayer.setActiveAudioTrack?4(int) -QtMultimedia.QMediaPlayer.setActiveVideoTrack?4(int) -QtMultimedia.QMediaPlayer.setActiveSubtitleTrack?4(int) -QtMultimedia.QMediaPlayer.setAudioOutput?4(QAudioOutput) -QtMultimedia.QMediaPlayer.audioOutput?4() -> QAudioOutput -QtMultimedia.QMediaPlayer.setVideoOutput?4(QObject) -QtMultimedia.QMediaPlayer.videoOutput?4() -> QObject -QtMultimedia.QMediaPlayer.setVideoSink?4(QVideoSink) -QtMultimedia.QMediaPlayer.videoSink?4() -> QVideoSink -QtMultimedia.QMediaPlayer.source?4() -> QUrl -QtMultimedia.QMediaPlayer.sourceDevice?4() -> QIODevice -QtMultimedia.QMediaPlayer.playbackState?4() -> QMediaPlayer.PlaybackState -QtMultimedia.QMediaPlayer.mediaStatus?4() -> QMediaPlayer.MediaStatus -QtMultimedia.QMediaPlayer.duration?4() -> int -QtMultimedia.QMediaPlayer.position?4() -> int -QtMultimedia.QMediaPlayer.hasAudio?4() -> bool -QtMultimedia.QMediaPlayer.hasVideo?4() -> bool -QtMultimedia.QMediaPlayer.bufferProgress?4() -> float -QtMultimedia.QMediaPlayer.bufferedTimeRange?4() -> QMediaTimeRange -QtMultimedia.QMediaPlayer.isSeekable?4() -> bool -QtMultimedia.QMediaPlayer.playbackRate?4() -> float -QtMultimedia.QMediaPlayer.error?4() -> QMediaPlayer.Error -QtMultimedia.QMediaPlayer.errorString?4() -> QString -QtMultimedia.QMediaPlayer.isAvailable?4() -> bool -QtMultimedia.QMediaPlayer.metaData?4() -> QMediaMetaData -QtMultimedia.QMediaPlayer.play?4() -QtMultimedia.QMediaPlayer.pause?4() -QtMultimedia.QMediaPlayer.stop?4() -QtMultimedia.QMediaPlayer.setPosition?4(int) -QtMultimedia.QMediaPlayer.setPlaybackRate?4(float) -QtMultimedia.QMediaPlayer.setSource?4(QUrl) -QtMultimedia.QMediaPlayer.setSourceDevice?4(QIODevice, QUrl sourceUrl=QUrl()) -QtMultimedia.QMediaPlayer.sourceChanged?4(QUrl) -QtMultimedia.QMediaPlayer.playbackStateChanged?4(QMediaPlayer.PlaybackState) -QtMultimedia.QMediaPlayer.mediaStatusChanged?4(QMediaPlayer.MediaStatus) -QtMultimedia.QMediaPlayer.durationChanged?4(int) -QtMultimedia.QMediaPlayer.positionChanged?4(int) -QtMultimedia.QMediaPlayer.hasAudioChanged?4(bool) -QtMultimedia.QMediaPlayer.hasVideoChanged?4(bool) -QtMultimedia.QMediaPlayer.bufferProgressChanged?4(float) -QtMultimedia.QMediaPlayer.seekableChanged?4(bool) -QtMultimedia.QMediaPlayer.playbackRateChanged?4(float) -QtMultimedia.QMediaPlayer.metaDataChanged?4() -QtMultimedia.QMediaPlayer.videoOutputChanged?4() -QtMultimedia.QMediaPlayer.audioOutputChanged?4() -QtMultimedia.QMediaPlayer.tracksChanged?4() -QtMultimedia.QMediaPlayer.activeTracksChanged?4() -QtMultimedia.QMediaPlayer.errorChanged?4() -QtMultimedia.QMediaPlayer.errorOccurred?4(QMediaPlayer.Error, QString) -QtMultimedia.QMediaPlayer.loops?4() -> int -QtMultimedia.QMediaPlayer.setLoops?4(int) -QtMultimedia.QMediaPlayer.loopsChanged?4() -QtMultimedia.QMediaPlayer.isPlaying?4() -> bool -QtMultimedia.QMediaPlayer.playingChanged?4(bool) -QtMultimedia.QMediaRecorder.Error?10 -QtMultimedia.QMediaRecorder.Error.NoError?10 -QtMultimedia.QMediaRecorder.Error.ResourceError?10 -QtMultimedia.QMediaRecorder.Error.FormatError?10 -QtMultimedia.QMediaRecorder.Error.OutOfSpaceError?10 -QtMultimedia.QMediaRecorder.Error.LocationNotWritable?10 -QtMultimedia.QMediaRecorder.RecorderState?10 -QtMultimedia.QMediaRecorder.RecorderState.StoppedState?10 -QtMultimedia.QMediaRecorder.RecorderState.RecordingState?10 -QtMultimedia.QMediaRecorder.RecorderState.PausedState?10 -QtMultimedia.QMediaRecorder.EncodingMode?10 -QtMultimedia.QMediaRecorder.EncodingMode.ConstantQualityEncoding?10 -QtMultimedia.QMediaRecorder.EncodingMode.ConstantBitRateEncoding?10 -QtMultimedia.QMediaRecorder.EncodingMode.AverageBitRateEncoding?10 -QtMultimedia.QMediaRecorder.EncodingMode.TwoPassEncoding?10 -QtMultimedia.QMediaRecorder.Quality?10 -QtMultimedia.QMediaRecorder.Quality.VeryLowQuality?10 -QtMultimedia.QMediaRecorder.Quality.LowQuality?10 -QtMultimedia.QMediaRecorder.Quality.NormalQuality?10 -QtMultimedia.QMediaRecorder.Quality.HighQuality?10 -QtMultimedia.QMediaRecorder.Quality.VeryHighQuality?10 -QtMultimedia.QMediaRecorder?1(QObject parent=None) -QtMultimedia.QMediaRecorder.__init__?1(self, QObject parent=None) -QtMultimedia.QMediaRecorder.isAvailable?4() -> bool -QtMultimedia.QMediaRecorder.outputLocation?4() -> QUrl -QtMultimedia.QMediaRecorder.setOutputLocation?4(QUrl) -QtMultimedia.QMediaRecorder.actualLocation?4() -> QUrl -QtMultimedia.QMediaRecorder.recorderState?4() -> QMediaRecorder.RecorderState -QtMultimedia.QMediaRecorder.error?4() -> QMediaRecorder.Error -QtMultimedia.QMediaRecorder.errorString?4() -> QString -QtMultimedia.QMediaRecorder.duration?4() -> int -QtMultimedia.QMediaRecorder.mediaFormat?4() -> QMediaFormat -QtMultimedia.QMediaRecorder.setMediaFormat?4(QMediaFormat) -QtMultimedia.QMediaRecorder.encodingMode?4() -> QMediaRecorder.EncodingMode -QtMultimedia.QMediaRecorder.setEncodingMode?4(QMediaRecorder.EncodingMode) -QtMultimedia.QMediaRecorder.quality?4() -> QMediaRecorder.Quality -QtMultimedia.QMediaRecorder.setQuality?4(QMediaRecorder.Quality) -QtMultimedia.QMediaRecorder.videoResolution?4() -> QSize -QtMultimedia.QMediaRecorder.setVideoResolution?4(QSize) -QtMultimedia.QMediaRecorder.setVideoResolution?4(int, int) -QtMultimedia.QMediaRecorder.videoFrameRate?4() -> float -QtMultimedia.QMediaRecorder.setVideoFrameRate?4(float) -QtMultimedia.QMediaRecorder.videoBitRate?4() -> int -QtMultimedia.QMediaRecorder.setVideoBitRate?4(int) -QtMultimedia.QMediaRecorder.audioBitRate?4() -> int -QtMultimedia.QMediaRecorder.setAudioBitRate?4(int) -QtMultimedia.QMediaRecorder.audioChannelCount?4() -> int -QtMultimedia.QMediaRecorder.setAudioChannelCount?4(int) -QtMultimedia.QMediaRecorder.audioSampleRate?4() -> int -QtMultimedia.QMediaRecorder.setAudioSampleRate?4(int) -QtMultimedia.QMediaRecorder.metaData?4() -> QMediaMetaData -QtMultimedia.QMediaRecorder.setMetaData?4(QMediaMetaData) -QtMultimedia.QMediaRecorder.captureSession?4() -> QMediaCaptureSession -QtMultimedia.QMediaRecorder.record?4() -QtMultimedia.QMediaRecorder.pause?4() -QtMultimedia.QMediaRecorder.stop?4() -QtMultimedia.QMediaRecorder.recorderStateChanged?4(QMediaRecorder.RecorderState) -QtMultimedia.QMediaRecorder.durationChanged?4(int) -QtMultimedia.QMediaRecorder.actualLocationChanged?4(QUrl) -QtMultimedia.QMediaRecorder.errorOccurred?4(QMediaRecorder.Error, QString) -QtMultimedia.QMediaRecorder.errorChanged?4() -QtMultimedia.QMediaRecorder.metaDataChanged?4() -QtMultimedia.QMediaRecorder.mediaFormatChanged?4() -QtMultimedia.QMediaRecorder.encodingModeChanged?4() -QtMultimedia.QMediaRecorder.qualityChanged?4() -QtMultimedia.QMediaRecorder.videoResolutionChanged?4() -QtMultimedia.QMediaRecorder.videoFrameRateChanged?4() -QtMultimedia.QMediaRecorder.videoBitRateChanged?4() -QtMultimedia.QMediaRecorder.audioBitRateChanged?4() -QtMultimedia.QMediaRecorder.audioChannelCountChanged?4() -QtMultimedia.QMediaRecorder.audioSampleRateChanged?4() -QtMultimedia.QMediaTimeRange?1() -QtMultimedia.QMediaTimeRange.__init__?1(self) -QtMultimedia.QMediaTimeRange?1(QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange.__init__?1(self, QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange?1(int, int) -QtMultimedia.QMediaTimeRange.__init__?1(self, int, int) -QtMultimedia.QMediaTimeRange?1(QMediaTimeRange) -QtMultimedia.QMediaTimeRange.__init__?1(self, QMediaTimeRange) -QtMultimedia.QMediaTimeRange.earliestTime?4() -> int -QtMultimedia.QMediaTimeRange.latestTime?4() -> int -QtMultimedia.QMediaTimeRange.intervals?4() -> unknown-type -QtMultimedia.QMediaTimeRange.isEmpty?4() -> bool -QtMultimedia.QMediaTimeRange.isContinuous?4() -> bool -QtMultimedia.QMediaTimeRange.contains?4(int) -> bool -QtMultimedia.QMediaTimeRange.addInterval?4(QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange.addInterval?4(int, int) -QtMultimedia.QMediaTimeRange.addTimeRange?4(QMediaTimeRange) -QtMultimedia.QMediaTimeRange.removeInterval?4(QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange.removeInterval?4(int, int) -QtMultimedia.QMediaTimeRange.removeTimeRange?4(QMediaTimeRange) -QtMultimedia.QMediaTimeRange.clear?4() -QtMultimedia.QMediaTimeRange.Interval?1(int, int) -QtMultimedia.QMediaTimeRange.Interval.__init__?1(self, int, int) -QtMultimedia.QMediaTimeRange.Interval?1(QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange.Interval.__init__?1(self, QMediaTimeRange.Interval) -QtMultimedia.QMediaTimeRange.Interval.start?4() -> int -QtMultimedia.QMediaTimeRange.Interval.end?4() -> int -QtMultimedia.QMediaTimeRange.Interval.contains?4(int) -> bool -QtMultimedia.QMediaTimeRange.Interval.isNormal?4() -> bool -QtMultimedia.QMediaTimeRange.Interval.normalized?4() -> QMediaTimeRange.Interval -QtMultimedia.QMediaTimeRange.Interval.translated?4(int) -> QMediaTimeRange.Interval -QtMultimedia.QScreenCapture.Error?10 -QtMultimedia.QScreenCapture.Error.NoError?10 -QtMultimedia.QScreenCapture.Error.InternalError?10 -QtMultimedia.QScreenCapture.Error.CapturingNotSupported?10 -QtMultimedia.QScreenCapture.Error.CaptureFailed?10 -QtMultimedia.QScreenCapture.Error.NotFound?10 -QtMultimedia.QScreenCapture?1(QObject parent=None) -QtMultimedia.QScreenCapture.__init__?1(self, QObject parent=None) -QtMultimedia.QScreenCapture.captureSession?4() -> QMediaCaptureSession -QtMultimedia.QScreenCapture.setScreen?4(QScreen) -QtMultimedia.QScreenCapture.screen?4() -> QScreen -QtMultimedia.QScreenCapture.isActive?4() -> bool -QtMultimedia.QScreenCapture.error?4() -> QScreenCapture.Error -QtMultimedia.QScreenCapture.errorString?4() -> QString -QtMultimedia.QScreenCapture.setActive?4(bool) -QtMultimedia.QScreenCapture.start?4() -QtMultimedia.QScreenCapture.stop?4() -QtMultimedia.QScreenCapture.activeChanged?4(bool) -QtMultimedia.QScreenCapture.errorChanged?4() -QtMultimedia.QScreenCapture.screenChanged?4(QScreen) -QtMultimedia.QScreenCapture.errorOccurred?4(QScreenCapture.Error, QString) -QtMultimedia.QSoundEffect.Status?10 -QtMultimedia.QSoundEffect.Status.Null?10 -QtMultimedia.QSoundEffect.Status.Loading?10 -QtMultimedia.QSoundEffect.Status.Ready?10 -QtMultimedia.QSoundEffect.Status.Error?10 -QtMultimedia.QSoundEffect.Loop?10 -QtMultimedia.QSoundEffect.Loop.Infinite?10 -QtMultimedia.QSoundEffect?1(QAudioDevice, QObject parent=None) -QtMultimedia.QSoundEffect.__init__?1(self, QAudioDevice, QObject parent=None) -QtMultimedia.QSoundEffect?1(QObject parent=None) -QtMultimedia.QSoundEffect.__init__?1(self, QObject parent=None) -QtMultimedia.QSoundEffect.supportedMimeTypes?4() -> QStringList -QtMultimedia.QSoundEffect.audioDevice?4() -> QAudioDevice -QtMultimedia.QSoundEffect.setAudioDevice?4(QAudioDevice) -QtMultimedia.QSoundEffect.source?4() -> QUrl -QtMultimedia.QSoundEffect.setSource?4(QUrl) -QtMultimedia.QSoundEffect.loopCount?4() -> int -QtMultimedia.QSoundEffect.loopsRemaining?4() -> int -QtMultimedia.QSoundEffect.setLoopCount?4(int) -QtMultimedia.QSoundEffect.volume?4() -> float -QtMultimedia.QSoundEffect.setVolume?4(float) -QtMultimedia.QSoundEffect.isMuted?4() -> bool -QtMultimedia.QSoundEffect.setMuted?4(bool) -QtMultimedia.QSoundEffect.isLoaded?4() -> bool -QtMultimedia.QSoundEffect.isPlaying?4() -> bool -QtMultimedia.QSoundEffect.status?4() -> QSoundEffect.Status -QtMultimedia.QSoundEffect.play?4() -QtMultimedia.QSoundEffect.stop?4() -QtMultimedia.QSoundEffect.audioDeviceChanged?4() -QtMultimedia.QSoundEffect.sourceChanged?4() -QtMultimedia.QSoundEffect.loopCountChanged?4() -QtMultimedia.QSoundEffect.loopsRemainingChanged?4() -QtMultimedia.QSoundEffect.volumeChanged?4() -QtMultimedia.QSoundEffect.mutedChanged?4() -QtMultimedia.QSoundEffect.loadedChanged?4() -QtMultimedia.QSoundEffect.playingChanged?4() -QtMultimedia.QSoundEffect.statusChanged?4() -QtMultimedia.QVideoFrame.RotationAngle?10 -QtMultimedia.QVideoFrame.RotationAngle.Rotation0?10 -QtMultimedia.QVideoFrame.RotationAngle.Rotation90?10 -QtMultimedia.QVideoFrame.RotationAngle.Rotation180?10 -QtMultimedia.QVideoFrame.RotationAngle.Rotation270?10 -QtMultimedia.QVideoFrame.MapMode?10 -QtMultimedia.QVideoFrame.MapMode.NotMapped?10 -QtMultimedia.QVideoFrame.MapMode.ReadOnly?10 -QtMultimedia.QVideoFrame.MapMode.WriteOnly?10 -QtMultimedia.QVideoFrame.MapMode.ReadWrite?10 -QtMultimedia.QVideoFrame.HandleType?10 -QtMultimedia.QVideoFrame.HandleType.NoHandle?10 -QtMultimedia.QVideoFrame.HandleType.RhiTextureHandle?10 -QtMultimedia.QVideoFrame?1() -QtMultimedia.QVideoFrame.__init__?1(self) -QtMultimedia.QVideoFrame?1(QVideoFrameFormat) -QtMultimedia.QVideoFrame.__init__?1(self, QVideoFrameFormat) -QtMultimedia.QVideoFrame?1(QVideoFrame) -QtMultimedia.QVideoFrame.__init__?1(self, QVideoFrame) -QtMultimedia.QVideoFrame.isValid?4() -> bool -QtMultimedia.QVideoFrame.pixelFormat?4() -> QVideoFrameFormat.PixelFormat -QtMultimedia.QVideoFrame.handleType?4() -> QVideoFrame.HandleType -QtMultimedia.QVideoFrame.size?4() -> QSize -QtMultimedia.QVideoFrame.width?4() -> int -QtMultimedia.QVideoFrame.height?4() -> int -QtMultimedia.QVideoFrame.isMapped?4() -> bool -QtMultimedia.QVideoFrame.isReadable?4() -> bool -QtMultimedia.QVideoFrame.isWritable?4() -> bool -QtMultimedia.QVideoFrame.mapMode?4() -> QVideoFrame.MapMode -QtMultimedia.QVideoFrame.map?4(QVideoFrame.MapMode) -> bool -QtMultimedia.QVideoFrame.unmap?4() -QtMultimedia.QVideoFrame.bytesPerLine?4(int) -> int -QtMultimedia.QVideoFrame.bits?4(int) -> PyQt6.sip.voidptr -QtMultimedia.QVideoFrame.mappedBytes?4(int) -> int -QtMultimedia.QVideoFrame.startTime?4() -> int -QtMultimedia.QVideoFrame.setStartTime?4(int) -QtMultimedia.QVideoFrame.endTime?4() -> int -QtMultimedia.QVideoFrame.setEndTime?4(int) -QtMultimedia.QVideoFrame.planeCount?4() -> int -QtMultimedia.QVideoFrame.surfaceFormat?4() -> QVideoFrameFormat -QtMultimedia.QVideoFrame.toImage?4() -> QImage -QtMultimedia.QVideoFrame.subtitleText?4() -> QString -QtMultimedia.QVideoFrame.setSubtitleText?4(QString) -QtMultimedia.QVideoFrame.paint?4(QPainter, QRectF, QVideoFrame.PaintOptions) -QtMultimedia.QVideoFrame.setRotationAngle?4(QVideoFrame.RotationAngle) -QtMultimedia.QVideoFrame.rotationAngle?4() -> QVideoFrame.RotationAngle -QtMultimedia.QVideoFrame.setMirrored?4(bool) -QtMultimedia.QVideoFrame.mirrored?4() -> bool -QtMultimedia.QVideoFrame.setRotation?4(QtVideo.Rotation) -QtMultimedia.QVideoFrame.rotation?4() -> QtVideo.Rotation -QtMultimedia.QVideoFrame.PaintOptions.PaintFlag?10 -QtMultimedia.QVideoFrame.PaintOptions.PaintFlag.DontDrawSubtitles?10 -QtMultimedia.QVideoFrame.PaintOptions.aspectRatioMode?7 -QtMultimedia.QVideoFrame.PaintOptions.backgroundColor?7 -QtMultimedia.QVideoFrame.PaintOptions.paintFlags?7 -QtMultimedia.QVideoFrame.PaintOptions?1() -QtMultimedia.QVideoFrame.PaintOptions.__init__?1(self) -QtMultimedia.QVideoFrame.PaintOptions?1(QVideoFrame.PaintOptions) -QtMultimedia.QVideoFrame.PaintOptions.__init__?1(self, QVideoFrame.PaintOptions) -QtMultimedia.QVideoFrameFormat.ColorRange?10 -QtMultimedia.QVideoFrameFormat.ColorRange.ColorRange_Unknown?10 -QtMultimedia.QVideoFrameFormat.ColorRange.ColorRange_Video?10 -QtMultimedia.QVideoFrameFormat.ColorRange.ColorRange_Full?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_Unknown?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_BT709?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_BT601?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_Linear?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_Gamma22?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_Gamma28?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_ST2084?10 -QtMultimedia.QVideoFrameFormat.ColorTransfer.ColorTransfer_STD_B67?10 -QtMultimedia.QVideoFrameFormat.ColorSpace?10 -QtMultimedia.QVideoFrameFormat.ColorSpace.ColorSpace_Undefined?10 -QtMultimedia.QVideoFrameFormat.ColorSpace.ColorSpace_BT601?10 -QtMultimedia.QVideoFrameFormat.ColorSpace.ColorSpace_BT709?10 -QtMultimedia.QVideoFrameFormat.ColorSpace.ColorSpace_AdobeRgb?10 -QtMultimedia.QVideoFrameFormat.ColorSpace.ColorSpace_BT2020?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_Undefined?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_BT601?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_BT709?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_xvYCC601?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_xvYCC709?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_JPEG?10 -QtMultimedia.QVideoFrameFormat.YCbCrColorSpace.YCbCr_BT2020?10 -QtMultimedia.QVideoFrameFormat.Direction?10 -QtMultimedia.QVideoFrameFormat.Direction.TopToBottom?10 -QtMultimedia.QVideoFrameFormat.Direction.BottomToTop?10 -QtMultimedia.QVideoFrameFormat.PixelFormat?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_Invalid?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_YUV420P?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_YUV422P?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_YUV420P10?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_YV12?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_UYVY?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_YUYV?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_NV12?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_NV21?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_IMC1?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_IMC2?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_IMC3?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_IMC4?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_Y8?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_Y16?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_P010?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_P016?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_Jpeg?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_SamplerExternalOES?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_ARGB8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_ARGB8888_Premultiplied?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_XRGB8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_BGRA8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_BGRA8888_Premultiplied?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_BGRX8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_ABGR8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_XBGR8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_RGBA8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_RGBX8888?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_AYUV?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_AYUV_Premultiplied?10 -QtMultimedia.QVideoFrameFormat.PixelFormat.Format_SamplerRect?10 -QtMultimedia.QVideoFrameFormat?1() -QtMultimedia.QVideoFrameFormat.__init__?1(self) -QtMultimedia.QVideoFrameFormat?1(QSize, QVideoFrameFormat.PixelFormat) -QtMultimedia.QVideoFrameFormat.__init__?1(self, QSize, QVideoFrameFormat.PixelFormat) -QtMultimedia.QVideoFrameFormat?1(QVideoFrameFormat) -QtMultimedia.QVideoFrameFormat.__init__?1(self, QVideoFrameFormat) -QtMultimedia.QVideoFrameFormat.isValid?4() -> bool -QtMultimedia.QVideoFrameFormat.pixelFormat?4() -> QVideoFrameFormat.PixelFormat -QtMultimedia.QVideoFrameFormat.frameSize?4() -> QSize -QtMultimedia.QVideoFrameFormat.setFrameSize?4(QSize) -QtMultimedia.QVideoFrameFormat.setFrameSize?4(int, int) -QtMultimedia.QVideoFrameFormat.frameWidth?4() -> int -QtMultimedia.QVideoFrameFormat.frameHeight?4() -> int -QtMultimedia.QVideoFrameFormat.planeCount?4() -> int -QtMultimedia.QVideoFrameFormat.viewport?4() -> QRect -QtMultimedia.QVideoFrameFormat.setViewport?4(QRect) -QtMultimedia.QVideoFrameFormat.scanLineDirection?4() -> QVideoFrameFormat.Direction -QtMultimedia.QVideoFrameFormat.setScanLineDirection?4(QVideoFrameFormat.Direction) -QtMultimedia.QVideoFrameFormat.frameRate?4() -> float -QtMultimedia.QVideoFrameFormat.setFrameRate?4(float) -QtMultimedia.QVideoFrameFormat.yCbCrColorSpace?4() -> QVideoFrameFormat.YCbCrColorSpace -QtMultimedia.QVideoFrameFormat.setYCbCrColorSpace?4(QVideoFrameFormat.YCbCrColorSpace) -QtMultimedia.QVideoFrameFormat.isMirrored?4() -> bool -QtMultimedia.QVideoFrameFormat.setMirrored?4(bool) -QtMultimedia.QVideoFrameFormat.pixelFormatFromImageFormat?4(QImage.Format) -> QVideoFrameFormat.PixelFormat -QtMultimedia.QVideoFrameFormat.imageFormatFromPixelFormat?4(QVideoFrameFormat.PixelFormat) -> QImage.Format -QtMultimedia.QVideoFrameFormat.pixelFormatToString?4(QVideoFrameFormat.PixelFormat) -> QString -QtMultimedia.QVideoFrameFormat.colorSpace?4() -> QVideoFrameFormat.ColorSpace -QtMultimedia.QVideoFrameFormat.setColorSpace?4(QVideoFrameFormat.ColorSpace) -QtMultimedia.QVideoFrameFormat.colorTransfer?4() -> QVideoFrameFormat.ColorTransfer -QtMultimedia.QVideoFrameFormat.setColorTransfer?4(QVideoFrameFormat.ColorTransfer) -QtMultimedia.QVideoFrameFormat.colorRange?4() -> QVideoFrameFormat.ColorRange -QtMultimedia.QVideoFrameFormat.setColorRange?4(QVideoFrameFormat.ColorRange) -QtMultimedia.QVideoSink?1(QObject parent=None) -QtMultimedia.QVideoSink.__init__?1(self, QObject parent=None) -QtMultimedia.QVideoSink.videoSize?4() -> QSize -QtMultimedia.QVideoSink.subtitleText?4() -> QString -QtMultimedia.QVideoSink.setSubtitleText?4(QString) -QtMultimedia.QVideoSink.setVideoFrame?4(QVideoFrame) -QtMultimedia.QVideoSink.videoFrame?4() -> QVideoFrame -QtMultimedia.QVideoSink.videoFrameChanged?4(QVideoFrame) -QtMultimedia.QVideoSink.subtitleTextChanged?4(QString) -QtMultimedia.QVideoSink.videoSizeChanged?4() -QtMultimedia.QWindowCapture.Error?10 -QtMultimedia.QWindowCapture.Error.NoError?10 -QtMultimedia.QWindowCapture.Error.InternalError?10 -QtMultimedia.QWindowCapture.Error.CapturingNotSupported?10 -QtMultimedia.QWindowCapture.Error.CaptureFailed?10 -QtMultimedia.QWindowCapture.Error.NotFound?10 -QtMultimedia.QWindowCapture?1(QObject parent=None) -QtMultimedia.QWindowCapture.__init__?1(self, QObject parent=None) -QtMultimedia.QWindowCapture.capturableWindows?4() -> unknown-type -QtMultimedia.QWindowCapture.setWindow?4(QCapturableWindow) -QtMultimedia.QWindowCapture.window?4() -> QCapturableWindow -QtMultimedia.QWindowCapture.isActive?4() -> bool -QtMultimedia.QWindowCapture.error?4() -> QWindowCapture.Error -QtMultimedia.QWindowCapture.errorString?4() -> QString -QtMultimedia.QWindowCapture.setActive?4(bool) -QtMultimedia.QWindowCapture.start?4() -QtMultimedia.QWindowCapture.stop?4() -QtMultimedia.QWindowCapture.activeChanged?4(bool) -QtMultimedia.QWindowCapture.windowChanged?4(QCapturableWindow) -QtMultimedia.QWindowCapture.errorChanged?4() -QtMultimedia.QWindowCapture.errorOccurred?4(QWindowCapture.Error, QString) -QtMultimediaWidgets.QGraphicsVideoItem?1(QGraphicsItem parent=None) -QtMultimediaWidgets.QGraphicsVideoItem.__init__?1(self, QGraphicsItem parent=None) -QtMultimediaWidgets.QGraphicsVideoItem.videoSink?4() -> QVideoSink -QtMultimediaWidgets.QGraphicsVideoItem.aspectRatioMode?4() -> Qt.AspectRatioMode -QtMultimediaWidgets.QGraphicsVideoItem.setAspectRatioMode?4(Qt.AspectRatioMode) -QtMultimediaWidgets.QGraphicsVideoItem.offset?4() -> QPointF -QtMultimediaWidgets.QGraphicsVideoItem.setOffset?4(QPointF) -QtMultimediaWidgets.QGraphicsVideoItem.size?4() -> QSizeF -QtMultimediaWidgets.QGraphicsVideoItem.setSize?4(QSizeF) -QtMultimediaWidgets.QGraphicsVideoItem.nativeSize?4() -> QSizeF -QtMultimediaWidgets.QGraphicsVideoItem.boundingRect?4() -> QRectF -QtMultimediaWidgets.QGraphicsVideoItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) -QtMultimediaWidgets.QGraphicsVideoItem.type?4() -> int -QtMultimediaWidgets.QGraphicsVideoItem.nativeSizeChanged?4(QSizeF) -QtMultimediaWidgets.QGraphicsVideoItem.timerEvent?4(QTimerEvent) -QtMultimediaWidgets.QGraphicsVideoItem.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant -QtMultimediaWidgets.QVideoWidget?1(QWidget parent=None) -QtMultimediaWidgets.QVideoWidget.__init__?1(self, QWidget parent=None) -QtMultimediaWidgets.QVideoWidget.videoSink?4() -> QVideoSink -QtMultimediaWidgets.QVideoWidget.aspectRatioMode?4() -> Qt.AspectRatioMode -QtMultimediaWidgets.QVideoWidget.isFullScreen?4() -> bool -QtMultimediaWidgets.QVideoWidget.sizeHint?4() -> QSize -QtMultimediaWidgets.QVideoWidget.setFullScreen?4(bool) -QtMultimediaWidgets.QVideoWidget.setAspectRatioMode?4(Qt.AspectRatioMode) -QtMultimediaWidgets.QVideoWidget.fullScreenChanged?4(bool) -QtMultimediaWidgets.QVideoWidget.aspectRatioModeChanged?4(Qt.AspectRatioMode) -QtMultimediaWidgets.QVideoWidget.event?4(QEvent) -> bool -QtMultimediaWidgets.QVideoWidget.showEvent?4(QShowEvent) -QtMultimediaWidgets.QVideoWidget.hideEvent?4(QHideEvent) -QtMultimediaWidgets.QVideoWidget.resizeEvent?4(QResizeEvent) -QtMultimediaWidgets.QVideoWidget.moveEvent?4(QMoveEvent) -QtPositioning.QGeoAddress?1() -QtPositioning.QGeoAddress.__init__?1(self) -QtPositioning.QGeoAddress?1(QGeoAddress) -QtPositioning.QGeoAddress.__init__?1(self, QGeoAddress) -QtPositioning.QGeoAddress.text?4() -> QString -QtPositioning.QGeoAddress.setText?4(QString) -QtPositioning.QGeoAddress.country?4() -> QString -QtPositioning.QGeoAddress.setCountry?4(QString) -QtPositioning.QGeoAddress.countryCode?4() -> QString -QtPositioning.QGeoAddress.setCountryCode?4(QString) -QtPositioning.QGeoAddress.state?4() -> QString -QtPositioning.QGeoAddress.setState?4(QString) -QtPositioning.QGeoAddress.county?4() -> QString -QtPositioning.QGeoAddress.setCounty?4(QString) -QtPositioning.QGeoAddress.city?4() -> QString -QtPositioning.QGeoAddress.setCity?4(QString) -QtPositioning.QGeoAddress.district?4() -> QString -QtPositioning.QGeoAddress.setDistrict?4(QString) -QtPositioning.QGeoAddress.postalCode?4() -> QString -QtPositioning.QGeoAddress.setPostalCode?4(QString) -QtPositioning.QGeoAddress.street?4() -> QString -QtPositioning.QGeoAddress.setStreet?4(QString) -QtPositioning.QGeoAddress.isEmpty?4() -> bool -QtPositioning.QGeoAddress.clear?4() -QtPositioning.QGeoAddress.isTextGenerated?4() -> bool -QtPositioning.QGeoAddress.swap?4(QGeoAddress) -QtPositioning.QGeoAddress.streetNumber?4() -> QString -QtPositioning.QGeoAddress.setStreetNumber?4(QString) -QtPositioning.QGeoAreaMonitorInfo?1(QString name='') -QtPositioning.QGeoAreaMonitorInfo.__init__?1(self, QString name='') -QtPositioning.QGeoAreaMonitorInfo?1(QGeoAreaMonitorInfo) -QtPositioning.QGeoAreaMonitorInfo.__init__?1(self, QGeoAreaMonitorInfo) -QtPositioning.QGeoAreaMonitorInfo.name?4() -> QString -QtPositioning.QGeoAreaMonitorInfo.setName?4(QString) -QtPositioning.QGeoAreaMonitorInfo.identifier?4() -> QString -QtPositioning.QGeoAreaMonitorInfo.isValid?4() -> bool -QtPositioning.QGeoAreaMonitorInfo.area?4() -> QGeoShape -QtPositioning.QGeoAreaMonitorInfo.setArea?4(QGeoShape) -QtPositioning.QGeoAreaMonitorInfo.expiration?4() -> QDateTime -QtPositioning.QGeoAreaMonitorInfo.setExpiration?4(QDateTime) -QtPositioning.QGeoAreaMonitorInfo.isPersistent?4() -> bool -QtPositioning.QGeoAreaMonitorInfo.setPersistent?4(bool) -QtPositioning.QGeoAreaMonitorInfo.notificationParameters?4() -> unknown-type -QtPositioning.QGeoAreaMonitorInfo.setNotificationParameters?4(unknown-type) -QtPositioning.QGeoAreaMonitorInfo.swap?4(QGeoAreaMonitorInfo) -QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature?10 -QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature.PersistentAreaMonitorFeature?10 -QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature.AnyAreaMonitorFeature?10 -QtPositioning.QGeoAreaMonitorSource.Error?10 -QtPositioning.QGeoAreaMonitorSource.Error.AccessError?10 -QtPositioning.QGeoAreaMonitorSource.Error.InsufficientPositionInfo?10 -QtPositioning.QGeoAreaMonitorSource.Error.UnknownSourceError?10 -QtPositioning.QGeoAreaMonitorSource.Error.NoError?10 -QtPositioning.QGeoAreaMonitorSource?1(QObject) -QtPositioning.QGeoAreaMonitorSource.__init__?1(self, QObject) -QtPositioning.QGeoAreaMonitorSource.createDefaultSource?4(QObject) -> QGeoAreaMonitorSource -QtPositioning.QGeoAreaMonitorSource.createSource?4(QString, QObject) -> QGeoAreaMonitorSource -QtPositioning.QGeoAreaMonitorSource.availableSources?4() -> QStringList -QtPositioning.QGeoAreaMonitorSource.setPositionInfoSource?4(QGeoPositionInfoSource) -QtPositioning.QGeoAreaMonitorSource.positionInfoSource?4() -> QGeoPositionInfoSource -QtPositioning.QGeoAreaMonitorSource.sourceName?4() -> QString -QtPositioning.QGeoAreaMonitorSource.error?4() -> QGeoAreaMonitorSource.Error -QtPositioning.QGeoAreaMonitorSource.supportedAreaMonitorFeatures?4() -> unknown-type -QtPositioning.QGeoAreaMonitorSource.startMonitoring?4(QGeoAreaMonitorInfo) -> bool -QtPositioning.QGeoAreaMonitorSource.stopMonitoring?4(QGeoAreaMonitorInfo) -> bool -QtPositioning.QGeoAreaMonitorSource.requestUpdate?4(QGeoAreaMonitorInfo, str) -> bool -QtPositioning.QGeoAreaMonitorSource.activeMonitors?4() -> unknown-type -QtPositioning.QGeoAreaMonitorSource.activeMonitors?4(QGeoShape) -> unknown-type -QtPositioning.QGeoAreaMonitorSource.areaEntered?4(QGeoAreaMonitorInfo, QGeoPositionInfo) -QtPositioning.QGeoAreaMonitorSource.areaExited?4(QGeoAreaMonitorInfo, QGeoPositionInfo) -QtPositioning.QGeoAreaMonitorSource.monitorExpired?4(QGeoAreaMonitorInfo) -QtPositioning.QGeoAreaMonitorSource.errorOccurred?4(QGeoAreaMonitorSource.Error) -QtPositioning.QGeoAreaMonitorSource.setBackendProperty?4(QString, QVariant) -> bool -QtPositioning.QGeoAreaMonitorSource.backendProperty?4(QString) -> QVariant -QtPositioning.QGeoShape.ShapeType?10 -QtPositioning.QGeoShape.ShapeType.UnknownType?10 -QtPositioning.QGeoShape.ShapeType.RectangleType?10 -QtPositioning.QGeoShape.ShapeType.CircleType?10 -QtPositioning.QGeoShape.ShapeType.PathType?10 -QtPositioning.QGeoShape.ShapeType.PolygonType?10 -QtPositioning.QGeoShape?1() -QtPositioning.QGeoShape.__init__?1(self) -QtPositioning.QGeoShape?1(QGeoShape) -QtPositioning.QGeoShape.__init__?1(self, QGeoShape) -QtPositioning.QGeoShape.type?4() -> QGeoShape.ShapeType -QtPositioning.QGeoShape.isValid?4() -> bool -QtPositioning.QGeoShape.isEmpty?4() -> bool -QtPositioning.QGeoShape.contains?4(QGeoCoordinate) -> bool -QtPositioning.QGeoShape.center?4() -> QGeoCoordinate -QtPositioning.QGeoShape.toString?4() -> QString -QtPositioning.QGeoShape.boundingGeoRectangle?4() -> QGeoRectangle -QtPositioning.QGeoCircle?1() -QtPositioning.QGeoCircle.__init__?1(self) -QtPositioning.QGeoCircle?1(QGeoCoordinate, float radius=-1) -QtPositioning.QGeoCircle.__init__?1(self, QGeoCoordinate, float radius=-1) -QtPositioning.QGeoCircle?1(QGeoCircle) -QtPositioning.QGeoCircle.__init__?1(self, QGeoCircle) -QtPositioning.QGeoCircle?1(QGeoShape) -QtPositioning.QGeoCircle.__init__?1(self, QGeoShape) -QtPositioning.QGeoCircle.setCenter?4(QGeoCoordinate) -QtPositioning.QGeoCircle.center?4() -> QGeoCoordinate -QtPositioning.QGeoCircle.setRadius?4(float) -QtPositioning.QGeoCircle.radius?4() -> float -QtPositioning.QGeoCircle.translate?4(float, float) -QtPositioning.QGeoCircle.translated?4(float, float) -> QGeoCircle -QtPositioning.QGeoCircle.toString?4() -> QString -QtPositioning.QGeoCircle.extendCircle?4(QGeoCoordinate) -QtPositioning.QGeoCoordinate.CoordinateFormat?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.Degrees?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesWithHemisphere?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutes?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesWithHemisphere?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesSeconds?10 -QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesSecondsWithHemisphere?10 -QtPositioning.QGeoCoordinate.CoordinateType?10 -QtPositioning.QGeoCoordinate.CoordinateType.InvalidCoordinate?10 -QtPositioning.QGeoCoordinate.CoordinateType.Coordinate2D?10 -QtPositioning.QGeoCoordinate.CoordinateType.Coordinate3D?10 -QtPositioning.QGeoCoordinate?1() -QtPositioning.QGeoCoordinate.__init__?1(self) -QtPositioning.QGeoCoordinate?1(float, float) -QtPositioning.QGeoCoordinate.__init__?1(self, float, float) -QtPositioning.QGeoCoordinate?1(float, float, float) -QtPositioning.QGeoCoordinate.__init__?1(self, float, float, float) -QtPositioning.QGeoCoordinate?1(QGeoCoordinate) -QtPositioning.QGeoCoordinate.__init__?1(self, QGeoCoordinate) -QtPositioning.QGeoCoordinate.isValid?4() -> bool -QtPositioning.QGeoCoordinate.type?4() -> QGeoCoordinate.CoordinateType -QtPositioning.QGeoCoordinate.setLatitude?4(float) -QtPositioning.QGeoCoordinate.latitude?4() -> float -QtPositioning.QGeoCoordinate.setLongitude?4(float) -QtPositioning.QGeoCoordinate.longitude?4() -> float -QtPositioning.QGeoCoordinate.setAltitude?4(float) -QtPositioning.QGeoCoordinate.altitude?4() -> float -QtPositioning.QGeoCoordinate.distanceTo?4(QGeoCoordinate) -> float -QtPositioning.QGeoCoordinate.azimuthTo?4(QGeoCoordinate) -> float -QtPositioning.QGeoCoordinate.atDistanceAndAzimuth?4(float, float, float distanceUp=0) -> QGeoCoordinate -QtPositioning.QGeoCoordinate.toString?4(QGeoCoordinate.CoordinateFormat format=QGeoCoordinate.DegreesMinutesSecondsWithHemisphere) -> QString -QtPositioning.QGeoCoordinate.swap?4(QGeoCoordinate) -QtPositioning.QGeoLocation?1() -QtPositioning.QGeoLocation.__init__?1(self) -QtPositioning.QGeoLocation?1(QGeoLocation) -QtPositioning.QGeoLocation.__init__?1(self, QGeoLocation) -QtPositioning.QGeoLocation.address?4() -> QGeoAddress -QtPositioning.QGeoLocation.setAddress?4(QGeoAddress) -QtPositioning.QGeoLocation.coordinate?4() -> QGeoCoordinate -QtPositioning.QGeoLocation.setCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoLocation.isEmpty?4() -> bool -QtPositioning.QGeoLocation.extendedAttributes?4() -> unknown-type -QtPositioning.QGeoLocation.setExtendedAttributes?4(unknown-type) -QtPositioning.QGeoLocation.swap?4(QGeoLocation) -QtPositioning.QGeoLocation.boundingShape?4() -> QGeoShape -QtPositioning.QGeoLocation.setBoundingShape?4(QGeoShape) -QtPositioning.QGeoPath?1() -QtPositioning.QGeoPath.__init__?1(self) -QtPositioning.QGeoPath?1(unknown-type, float width=0) -QtPositioning.QGeoPath.__init__?1(self, unknown-type, float width=0) -QtPositioning.QGeoPath?1(QGeoPath) -QtPositioning.QGeoPath.__init__?1(self, QGeoPath) -QtPositioning.QGeoPath?1(QGeoShape) -QtPositioning.QGeoPath.__init__?1(self, QGeoShape) -QtPositioning.QGeoPath.setPath?4(unknown-type) -QtPositioning.QGeoPath.path?4() -> unknown-type -QtPositioning.QGeoPath.setWidth?4(float) -QtPositioning.QGeoPath.width?4() -> float -QtPositioning.QGeoPath.translate?4(float, float) -QtPositioning.QGeoPath.translated?4(float, float) -> QGeoPath -QtPositioning.QGeoPath.length?4(int indexFrom=0, int indexTo=-1) -> float -QtPositioning.QGeoPath.addCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoPath.insertCoordinate?4(int, QGeoCoordinate) -QtPositioning.QGeoPath.replaceCoordinate?4(int, QGeoCoordinate) -QtPositioning.QGeoPath.coordinateAt?4(int) -> QGeoCoordinate -QtPositioning.QGeoPath.containsCoordinate?4(QGeoCoordinate) -> bool -QtPositioning.QGeoPath.removeCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoPath.removeCoordinate?4(int) -QtPositioning.QGeoPath.toString?4() -> QString -QtPositioning.QGeoPath.size?4() -> int -QtPositioning.QGeoPath.clearPath?4() -QtPositioning.QGeoPolygon?1() -QtPositioning.QGeoPolygon.__init__?1(self) -QtPositioning.QGeoPolygon?1(unknown-type) -QtPositioning.QGeoPolygon.__init__?1(self, unknown-type) -QtPositioning.QGeoPolygon?1(QGeoPolygon) -QtPositioning.QGeoPolygon.__init__?1(self, QGeoPolygon) -QtPositioning.QGeoPolygon?1(QGeoShape) -QtPositioning.QGeoPolygon.__init__?1(self, QGeoShape) -QtPositioning.QGeoPolygon.translate?4(float, float) -QtPositioning.QGeoPolygon.translated?4(float, float) -> QGeoPolygon -QtPositioning.QGeoPolygon.length?4(int indexFrom=0, int indexTo=-1) -> float -QtPositioning.QGeoPolygon.size?4() -> int -QtPositioning.QGeoPolygon.addCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoPolygon.insertCoordinate?4(int, QGeoCoordinate) -QtPositioning.QGeoPolygon.replaceCoordinate?4(int, QGeoCoordinate) -QtPositioning.QGeoPolygon.coordinateAt?4(int) -> QGeoCoordinate -QtPositioning.QGeoPolygon.containsCoordinate?4(QGeoCoordinate) -> bool -QtPositioning.QGeoPolygon.removeCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoPolygon.removeCoordinate?4(int) -QtPositioning.QGeoPolygon.toString?4() -> QString -QtPositioning.QGeoPolygon.addHole?4(unknown-type) -QtPositioning.QGeoPolygon.addHole?4(QVariant) -QtPositioning.QGeoPolygon.hole?4(int) -> unknown-type -QtPositioning.QGeoPolygon.holePath?4(int) -> unknown-type -QtPositioning.QGeoPolygon.removeHole?4(int) -QtPositioning.QGeoPolygon.holesCount?4() -> int -QtPositioning.QGeoPolygon.setPerimeter?4(unknown-type) -QtPositioning.QGeoPolygon.perimeter?4() -> unknown-type -QtPositioning.QGeoPositionInfo.Attribute?10 -QtPositioning.QGeoPositionInfo.Attribute.Direction?10 -QtPositioning.QGeoPositionInfo.Attribute.GroundSpeed?10 -QtPositioning.QGeoPositionInfo.Attribute.VerticalSpeed?10 -QtPositioning.QGeoPositionInfo.Attribute.MagneticVariation?10 -QtPositioning.QGeoPositionInfo.Attribute.HorizontalAccuracy?10 -QtPositioning.QGeoPositionInfo.Attribute.VerticalAccuracy?10 -QtPositioning.QGeoPositionInfo.Attribute.DirectionAccuracy?10 -QtPositioning.QGeoPositionInfo?1() -QtPositioning.QGeoPositionInfo.__init__?1(self) -QtPositioning.QGeoPositionInfo?1(QGeoCoordinate, QDateTime) -QtPositioning.QGeoPositionInfo.__init__?1(self, QGeoCoordinate, QDateTime) -QtPositioning.QGeoPositionInfo?1(QGeoPositionInfo) -QtPositioning.QGeoPositionInfo.__init__?1(self, QGeoPositionInfo) -QtPositioning.QGeoPositionInfo.isValid?4() -> bool -QtPositioning.QGeoPositionInfo.setTimestamp?4(QDateTime) -QtPositioning.QGeoPositionInfo.timestamp?4() -> QDateTime -QtPositioning.QGeoPositionInfo.setCoordinate?4(QGeoCoordinate) -QtPositioning.QGeoPositionInfo.coordinate?4() -> QGeoCoordinate -QtPositioning.QGeoPositionInfo.setAttribute?4(QGeoPositionInfo.Attribute, float) -QtPositioning.QGeoPositionInfo.attribute?4(QGeoPositionInfo.Attribute) -> float -QtPositioning.QGeoPositionInfo.removeAttribute?4(QGeoPositionInfo.Attribute) -QtPositioning.QGeoPositionInfo.hasAttribute?4(QGeoPositionInfo.Attribute) -> bool -QtPositioning.QGeoPositionInfo.swap?4(QGeoPositionInfo) -QtPositioning.QGeoPositionInfoSource.PositioningMethod?10 -QtPositioning.QGeoPositionInfoSource.PositioningMethod.NoPositioningMethods?10 -QtPositioning.QGeoPositionInfoSource.PositioningMethod.SatellitePositioningMethods?10 -QtPositioning.QGeoPositionInfoSource.PositioningMethod.NonSatellitePositioningMethods?10 -QtPositioning.QGeoPositionInfoSource.PositioningMethod.AllPositioningMethods?10 -QtPositioning.QGeoPositionInfoSource.Error?10 -QtPositioning.QGeoPositionInfoSource.Error.AccessError?10 -QtPositioning.QGeoPositionInfoSource.Error.ClosedError?10 -QtPositioning.QGeoPositionInfoSource.Error.UnknownSourceError?10 -QtPositioning.QGeoPositionInfoSource.Error.UpdateTimeoutError?10 -QtPositioning.QGeoPositionInfoSource.Error.NoError?10 -QtPositioning.QGeoPositionInfoSource?1(QObject) -QtPositioning.QGeoPositionInfoSource.__init__?1(self, QObject) -QtPositioning.QGeoPositionInfoSource.setUpdateInterval?4(int) -QtPositioning.QGeoPositionInfoSource.updateInterval?4() -> int -QtPositioning.QGeoPositionInfoSource.setPreferredPositioningMethods?4(unknown-type) -QtPositioning.QGeoPositionInfoSource.preferredPositioningMethods?4() -> unknown-type -QtPositioning.QGeoPositionInfoSource.lastKnownPosition?4(bool fromSatellitePositioningMethodsOnly=False) -> QGeoPositionInfo -QtPositioning.QGeoPositionInfoSource.supportedPositioningMethods?4() -> unknown-type -QtPositioning.QGeoPositionInfoSource.minimumUpdateInterval?4() -> int -QtPositioning.QGeoPositionInfoSource.sourceName?4() -> QString -QtPositioning.QGeoPositionInfoSource.createDefaultSource?4(QObject) -> QGeoPositionInfoSource -QtPositioning.QGeoPositionInfoSource.createDefaultSource?4(unknown-type, QObject) -> QGeoPositionInfoSource -QtPositioning.QGeoPositionInfoSource.createSource?4(QString, QObject) -> QGeoPositionInfoSource -QtPositioning.QGeoPositionInfoSource.createSource?4(QString, unknown-type, QObject) -> QGeoPositionInfoSource -QtPositioning.QGeoPositionInfoSource.availableSources?4() -> QStringList -QtPositioning.QGeoPositionInfoSource.error?4() -> QGeoPositionInfoSource.Error -QtPositioning.QGeoPositionInfoSource.startUpdates?4() -QtPositioning.QGeoPositionInfoSource.stopUpdates?4() -QtPositioning.QGeoPositionInfoSource.requestUpdate?4(int timeout=0) -QtPositioning.QGeoPositionInfoSource.positionUpdated?4(QGeoPositionInfo) -QtPositioning.QGeoPositionInfoSource.supportedPositioningMethodsChanged?4() -QtPositioning.QGeoPositionInfoSource.errorOccurred?4(QGeoPositionInfoSource.Error) -QtPositioning.QGeoPositionInfoSource.setBackendProperty?4(QString, QVariant) -> bool -QtPositioning.QGeoPositionInfoSource.backendProperty?4(QString) -> QVariant -QtPositioning.QGeoRectangle?1() -QtPositioning.QGeoRectangle.__init__?1(self) -QtPositioning.QGeoRectangle?1(QGeoCoordinate, float, float) -QtPositioning.QGeoRectangle.__init__?1(self, QGeoCoordinate, float, float) -QtPositioning.QGeoRectangle?1(QGeoCoordinate, QGeoCoordinate) -QtPositioning.QGeoRectangle.__init__?1(self, QGeoCoordinate, QGeoCoordinate) -QtPositioning.QGeoRectangle?1(unknown-type) -QtPositioning.QGeoRectangle.__init__?1(self, unknown-type) -QtPositioning.QGeoRectangle?1(QGeoRectangle) -QtPositioning.QGeoRectangle.__init__?1(self, QGeoRectangle) -QtPositioning.QGeoRectangle?1(QGeoShape) -QtPositioning.QGeoRectangle.__init__?1(self, QGeoShape) -QtPositioning.QGeoRectangle.setTopLeft?4(QGeoCoordinate) -QtPositioning.QGeoRectangle.topLeft?4() -> QGeoCoordinate -QtPositioning.QGeoRectangle.setTopRight?4(QGeoCoordinate) -QtPositioning.QGeoRectangle.topRight?4() -> QGeoCoordinate -QtPositioning.QGeoRectangle.setBottomLeft?4(QGeoCoordinate) -QtPositioning.QGeoRectangle.bottomLeft?4() -> QGeoCoordinate -QtPositioning.QGeoRectangle.setBottomRight?4(QGeoCoordinate) -QtPositioning.QGeoRectangle.bottomRight?4() -> QGeoCoordinate -QtPositioning.QGeoRectangle.setCenter?4(QGeoCoordinate) -QtPositioning.QGeoRectangle.center?4() -> QGeoCoordinate -QtPositioning.QGeoRectangle.setWidth?4(float) -QtPositioning.QGeoRectangle.width?4() -> float -QtPositioning.QGeoRectangle.setHeight?4(float) -QtPositioning.QGeoRectangle.height?4() -> float -QtPositioning.QGeoRectangle.contains?4(QGeoRectangle) -> bool -QtPositioning.QGeoRectangle.intersects?4(QGeoRectangle) -> bool -QtPositioning.QGeoRectangle.translate?4(float, float) -QtPositioning.QGeoRectangle.translated?4(float, float) -> QGeoRectangle -QtPositioning.QGeoRectangle.united?4(QGeoRectangle) -> QGeoRectangle -QtPositioning.QGeoRectangle.toString?4() -> QString -QtPositioning.QGeoRectangle.extendRectangle?4(QGeoCoordinate) -QtPositioning.QGeoSatelliteInfo.SatelliteSystem?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.Undefined?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.GPS?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.GLONASS?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.GALILEO?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.BEIDOU?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.QZSS?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.Multiple?10 -QtPositioning.QGeoSatelliteInfo.SatelliteSystem.CustomType?10 -QtPositioning.QGeoSatelliteInfo.Attribute?10 -QtPositioning.QGeoSatelliteInfo.Attribute.Elevation?10 -QtPositioning.QGeoSatelliteInfo.Attribute.Azimuth?10 -QtPositioning.QGeoSatelliteInfo?1() -QtPositioning.QGeoSatelliteInfo.__init__?1(self) -QtPositioning.QGeoSatelliteInfo?1(QGeoSatelliteInfo) -QtPositioning.QGeoSatelliteInfo.__init__?1(self, QGeoSatelliteInfo) -QtPositioning.QGeoSatelliteInfo.setSatelliteSystem?4(QGeoSatelliteInfo.SatelliteSystem) -QtPositioning.QGeoSatelliteInfo.satelliteSystem?4() -> QGeoSatelliteInfo.SatelliteSystem -QtPositioning.QGeoSatelliteInfo.setSatelliteIdentifier?4(int) -QtPositioning.QGeoSatelliteInfo.satelliteIdentifier?4() -> int -QtPositioning.QGeoSatelliteInfo.setSignalStrength?4(int) -QtPositioning.QGeoSatelliteInfo.signalStrength?4() -> int -QtPositioning.QGeoSatelliteInfo.setAttribute?4(QGeoSatelliteInfo.Attribute, float) -QtPositioning.QGeoSatelliteInfo.attribute?4(QGeoSatelliteInfo.Attribute) -> float -QtPositioning.QGeoSatelliteInfo.removeAttribute?4(QGeoSatelliteInfo.Attribute) -QtPositioning.QGeoSatelliteInfo.hasAttribute?4(QGeoSatelliteInfo.Attribute) -> bool -QtPositioning.QGeoSatelliteInfo.swap?4(QGeoSatelliteInfo) -QtPositioning.QGeoSatelliteInfoSource.Error?10 -QtPositioning.QGeoSatelliteInfoSource.Error.AccessError?10 -QtPositioning.QGeoSatelliteInfoSource.Error.ClosedError?10 -QtPositioning.QGeoSatelliteInfoSource.Error.NoError?10 -QtPositioning.QGeoSatelliteInfoSource.Error.UnknownSourceError?10 -QtPositioning.QGeoSatelliteInfoSource.Error.UpdateTimeoutError?10 -QtPositioning.QGeoSatelliteInfoSource?1(QObject) -QtPositioning.QGeoSatelliteInfoSource.__init__?1(self, QObject) -QtPositioning.QGeoSatelliteInfoSource.createDefaultSource?4(QObject) -> QGeoSatelliteInfoSource -QtPositioning.QGeoSatelliteInfoSource.createDefaultSource?4(unknown-type, QObject) -> QGeoSatelliteInfoSource -QtPositioning.QGeoSatelliteInfoSource.createSource?4(QString, QObject) -> QGeoSatelliteInfoSource -QtPositioning.QGeoSatelliteInfoSource.createSource?4(QString, unknown-type, QObject) -> QGeoSatelliteInfoSource -QtPositioning.QGeoSatelliteInfoSource.availableSources?4() -> QStringList -QtPositioning.QGeoSatelliteInfoSource.sourceName?4() -> QString -QtPositioning.QGeoSatelliteInfoSource.setUpdateInterval?4(int) -QtPositioning.QGeoSatelliteInfoSource.updateInterval?4() -> int -QtPositioning.QGeoSatelliteInfoSource.minimumUpdateInterval?4() -> int -QtPositioning.QGeoSatelliteInfoSource.error?4() -> QGeoSatelliteInfoSource.Error -QtPositioning.QGeoSatelliteInfoSource.startUpdates?4() -QtPositioning.QGeoSatelliteInfoSource.stopUpdates?4() -QtPositioning.QGeoSatelliteInfoSource.requestUpdate?4(int timeout=0) -QtPositioning.QGeoSatelliteInfoSource.satellitesInViewUpdated?4(unknown-type) -QtPositioning.QGeoSatelliteInfoSource.satellitesInUseUpdated?4(unknown-type) -QtPositioning.QGeoSatelliteInfoSource.errorOccurred?4(QGeoSatelliteInfoSource.Error) -QtPositioning.QGeoSatelliteInfoSource.setBackendProperty?4(QString, QVariant) -> bool -QtPositioning.QGeoSatelliteInfoSource.backendProperty?4(QString) -> QVariant -QtPositioning.QNmeaPositionInfoSource.UpdateMode?10 -QtPositioning.QNmeaPositionInfoSource.UpdateMode.RealTimeMode?10 -QtPositioning.QNmeaPositionInfoSource.UpdateMode.SimulationMode?10 -QtPositioning.QNmeaPositionInfoSource?1(QNmeaPositionInfoSource.UpdateMode, QObject parent=None) -QtPositioning.QNmeaPositionInfoSource.__init__?1(self, QNmeaPositionInfoSource.UpdateMode, QObject parent=None) -QtPositioning.QNmeaPositionInfoSource.updateMode?4() -> QNmeaPositionInfoSource.UpdateMode -QtPositioning.QNmeaPositionInfoSource.setDevice?4(QIODevice) -QtPositioning.QNmeaPositionInfoSource.device?4() -> QIODevice -QtPositioning.QNmeaPositionInfoSource.setUpdateInterval?4(int) -QtPositioning.QNmeaPositionInfoSource.lastKnownPosition?4(bool fromSatellitePositioningMethodsOnly=False) -> QGeoPositionInfo -QtPositioning.QNmeaPositionInfoSource.supportedPositioningMethods?4() -> unknown-type -QtPositioning.QNmeaPositionInfoSource.minimumUpdateInterval?4() -> int -QtPositioning.QNmeaPositionInfoSource.error?4() -> QGeoPositionInfoSource.Error -QtPositioning.QNmeaPositionInfoSource.startUpdates?4() -QtPositioning.QNmeaPositionInfoSource.stopUpdates?4() -QtPositioning.QNmeaPositionInfoSource.requestUpdate?4(int timeout=0) -QtPositioning.QNmeaPositionInfoSource.parsePosInfoFromNmeaData?4(bytes, int, QGeoPositionInfo) -> (bool, bool) -QtPositioning.QNmeaPositionInfoSource.setUserEquivalentRangeError?4(float) -QtPositioning.QNmeaPositionInfoSource.userEquivalentRangeError?4() -> float -QtPositioning.QNmeaSatelliteInfoSource.SatelliteInfoParseStatus?10 -QtPositioning.QNmeaSatelliteInfoSource.SatelliteInfoParseStatus.NotParsed?10 -QtPositioning.QNmeaSatelliteInfoSource.SatelliteInfoParseStatus.PartiallyParsed?10 -QtPositioning.QNmeaSatelliteInfoSource.SatelliteInfoParseStatus.FullyParsed?10 -QtPositioning.QNmeaSatelliteInfoSource.UpdateMode?10 -QtPositioning.QNmeaSatelliteInfoSource.UpdateMode.RealTimeMode?10 -QtPositioning.QNmeaSatelliteInfoSource.UpdateMode.SimulationMode?10 -QtPositioning.QNmeaSatelliteInfoSource.SimulationUpdateInterval?7 -QtPositioning.QNmeaSatelliteInfoSource?1(QNmeaSatelliteInfoSource.UpdateMode, QObject parent=None) -QtPositioning.QNmeaSatelliteInfoSource.__init__?1(self, QNmeaSatelliteInfoSource.UpdateMode, QObject parent=None) -QtPositioning.QNmeaSatelliteInfoSource.updateMode?4() -> QNmeaSatelliteInfoSource.UpdateMode -QtPositioning.QNmeaSatelliteInfoSource.setDevice?4(QIODevice) -QtPositioning.QNmeaSatelliteInfoSource.device?4() -> QIODevice -QtPositioning.QNmeaSatelliteInfoSource.setUpdateInterval?4(int) -QtPositioning.QNmeaSatelliteInfoSource.minimumUpdateInterval?4() -> int -QtPositioning.QNmeaSatelliteInfoSource.error?4() -> QGeoSatelliteInfoSource.Error -QtPositioning.QNmeaSatelliteInfoSource.setBackendProperty?4(QString, QVariant) -> bool -QtPositioning.QNmeaSatelliteInfoSource.backendProperty?4(QString) -> QVariant -QtPositioning.QNmeaSatelliteInfoSource.startUpdates?4() -QtPositioning.QNmeaSatelliteInfoSource.stopUpdates?4() -QtPositioning.QNmeaSatelliteInfoSource.requestUpdate?4(int timeout=0) -QtPositioning.QNmeaSatelliteInfoSource.parseSatellitesInUseFromNmea?4(bytes, int, unknown-type) -> QGeoSatelliteInfo.SatelliteSystem -QtPositioning.QNmeaSatelliteInfoSource.parseSatelliteInfoFromNmea?4(bytes, int, unknown-type) -> (QNmeaSatelliteInfoSource.SatelliteInfoParseStatus, QGeoSatelliteInfo.SatelliteSystem) -QtRemoteObjects.QRemoteObjectSourceLocationInfo.hostUrl?7 -QtRemoteObjects.QRemoteObjectSourceLocationInfo.typeName?7 -QtRemoteObjects.QRemoteObjectSourceLocationInfo?1() -QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self) -QtRemoteObjects.QRemoteObjectSourceLocationInfo?1(QString, QUrl) -QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self, QString, QUrl) -QtRemoteObjects.QRemoteObjectSourceLocationInfo?1(QRemoteObjectSourceLocationInfo) -QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self, QRemoteObjectSourceLocationInfo) -QtRemoteObjects.QtRemoteObjects.InitialAction?10 -QtRemoteObjects.QtRemoteObjects.InitialAction.FetchRootSize?10 -QtRemoteObjects.QtRemoteObjects.InitialAction.PrefetchData?10 -QtRemoteObjects.QAbstractItemModelReplica.selectionModel?4() -> QItemSelectionModel -QtRemoteObjects.QAbstractItemModelReplica.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant -QtRemoteObjects.QAbstractItemModelReplica.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool -QtRemoteObjects.QAbstractItemModelReplica.parent?4(QModelIndex) -> QModelIndex -QtRemoteObjects.QAbstractItemModelReplica.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtRemoteObjects.QAbstractItemModelReplica.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool -QtRemoteObjects.QAbstractItemModelReplica.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtRemoteObjects.QAbstractItemModelReplica.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtRemoteObjects.QAbstractItemModelReplica.headerData?4(int, Qt.Orientation, int) -> QVariant -QtRemoteObjects.QAbstractItemModelReplica.flags?4(QModelIndex) -> unknown-type -QtRemoteObjects.QAbstractItemModelReplica.availableRoles?4() -> unknown-type -QtRemoteObjects.QAbstractItemModelReplica.roleNames?4() -> unknown-type -QtRemoteObjects.QAbstractItemModelReplica.isInitialized?4() -> bool -QtRemoteObjects.QAbstractItemModelReplica.hasData?4(QModelIndex, int) -> bool -QtRemoteObjects.QAbstractItemModelReplica.rootCacheSize?4() -> int -QtRemoteObjects.QAbstractItemModelReplica.setRootCacheSize?4(int) -QtRemoteObjects.QAbstractItemModelReplica.initialized?4() -QtRemoteObjects.QRemoteObjectReplica.State?10 -QtRemoteObjects.QRemoteObjectReplica.State.Uninitialized?10 -QtRemoteObjects.QRemoteObjectReplica.State.Default?10 -QtRemoteObjects.QRemoteObjectReplica.State.Valid?10 -QtRemoteObjects.QRemoteObjectReplica.State.Suspect?10 -QtRemoteObjects.QRemoteObjectReplica.State.SignatureMismatch?10 -QtRemoteObjects.QRemoteObjectReplica.isReplicaValid?4() -> bool -QtRemoteObjects.QRemoteObjectReplica.waitForSource?4(int timeout=30000) -> bool -QtRemoteObjects.QRemoteObjectReplica.isInitialized?4() -> bool -QtRemoteObjects.QRemoteObjectReplica.state?4() -> QRemoteObjectReplica.State -QtRemoteObjects.QRemoteObjectReplica.node?4() -> QRemoteObjectNode -QtRemoteObjects.QRemoteObjectReplica.setNode?4(QRemoteObjectNode) -QtRemoteObjects.QRemoteObjectReplica.initialized?4() -QtRemoteObjects.QRemoteObjectReplica.stateChanged?4(QRemoteObjectReplica.State, QRemoteObjectReplica.State) -QtRemoteObjects.QRemoteObjectReplica.notified?4() -QtRemoteObjects.QRemoteObjectAbstractPersistedStore?1(QObject parent=None) -QtRemoteObjects.QRemoteObjectAbstractPersistedStore.__init__?1(self, QObject parent=None) -QtRemoteObjects.QRemoteObjectAbstractPersistedStore.saveProperties?4(QString, QByteArray, unknown-type) -QtRemoteObjects.QRemoteObjectAbstractPersistedStore.restoreProperties?4(QString, QByteArray) -> unknown-type -QtRemoteObjects.QRemoteObjectNode.ErrorCode?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.NoError?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.RegistryNotAcquired?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.RegistryAlreadyHosted?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.NodeIsNoServer?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.ServerAlreadyCreated?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.UnintendedRegistryHosting?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.OperationNotValidOnClientNode?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.SourceNotRegistered?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.MissingObjectName?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.HostUrlInvalid?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.ProtocolMismatch?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.ListenFailed?10 -QtRemoteObjects.QRemoteObjectNode.ErrorCode.SocketAccessError?10 -QtRemoteObjects.QRemoteObjectNode?1(QObject parent=None) -QtRemoteObjects.QRemoteObjectNode.__init__?1(self, QObject parent=None) -QtRemoteObjects.QRemoteObjectNode?1(QUrl, QObject parent=None) -QtRemoteObjects.QRemoteObjectNode.__init__?1(self, QUrl, QObject parent=None) -QtRemoteObjects.QRemoteObjectNode.connectToNode?4(QUrl) -> bool -QtRemoteObjects.QRemoteObjectNode.addClientSideConnection?4(QIODevice) -QtRemoteObjects.QRemoteObjectNode.setName?4(QString) -QtRemoteObjects.QRemoteObjectNode.instances?4(QStringView) -> QStringList -QtRemoteObjects.QRemoteObjectNode.acquireDynamic?4(QString) -> QRemoteObjectDynamicReplica -QtRemoteObjects.QRemoteObjectNode.acquireModel?4(QString, QtRemoteObjects.InitialAction action=QtRemoteObjects.FetchRootSize, unknown-type rolesHint=[]) -> QAbstractItemModelReplica -QtRemoteObjects.QRemoteObjectNode.registryUrl?4() -> QUrl -QtRemoteObjects.QRemoteObjectNode.setRegistryUrl?4(QUrl) -> bool -QtRemoteObjects.QRemoteObjectNode.waitForRegistry?4(int timeout=30000) -> bool -QtRemoteObjects.QRemoteObjectNode.registry?4() -> QRemoteObjectRegistry -QtRemoteObjects.QRemoteObjectNode.persistedStore?4() -> QRemoteObjectAbstractPersistedStore -QtRemoteObjects.QRemoteObjectNode.setPersistedStore?4(QRemoteObjectAbstractPersistedStore) -QtRemoteObjects.QRemoteObjectNode.lastError?4() -> QRemoteObjectNode.ErrorCode -QtRemoteObjects.QRemoteObjectNode.heartbeatInterval?4() -> int -QtRemoteObjects.QRemoteObjectNode.setHeartbeatInterval?4(int) -QtRemoteObjects.QRemoteObjectNode.remoteObjectAdded?4(unknown-type) -QtRemoteObjects.QRemoteObjectNode.remoteObjectRemoved?4(unknown-type) -QtRemoteObjects.QRemoteObjectNode.error?4(QRemoteObjectNode.ErrorCode) -QtRemoteObjects.QRemoteObjectNode.heartbeatIntervalChanged?4(int) -QtRemoteObjects.QRemoteObjectNode.timerEvent?4(QTimerEvent) -QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas?10 -QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas.BuiltInSchemasOnly?10 -QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas.AllowExternalRegistration?10 -QtRemoteObjects.QRemoteObjectHostBase.setName?4(QString) -QtRemoteObjects.QRemoteObjectHostBase.enableRemoting?4(QObject, QString name='') -> bool -QtRemoteObjects.QRemoteObjectHostBase.enableRemoting?4(QAbstractItemModel, QString, unknown-type, QItemSelectionModel selectionModel=None) -> bool -QtRemoteObjects.QRemoteObjectHostBase.disableRemoting?4(QObject) -> bool -QtRemoteObjects.QRemoteObjectHostBase.addHostSideConnection?4(QIODevice) -QtRemoteObjects.QRemoteObjectHostBase.proxy?4(QUrl, QUrl hostUrl=QUrl()) -> bool -QtRemoteObjects.QRemoteObjectHostBase.reverseProxy?4() -> bool -QtRemoteObjects.QRemoteObjectHost?1(QObject parent=None) -QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QObject parent=None) -QtRemoteObjects.QRemoteObjectHost?1(QUrl, QUrl registryAddress=QUrl(), QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly, QObject parent=None) -QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QUrl, QUrl registryAddress=QUrl(), QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly, QObject parent=None) -QtRemoteObjects.QRemoteObjectHost?1(QUrl, QObject) -QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QUrl, QObject) -QtRemoteObjects.QRemoteObjectHost.hostUrl?4() -> QUrl -QtRemoteObjects.QRemoteObjectHost.setHostUrl?4(QUrl, QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly) -> bool -QtRemoteObjects.QRemoteObjectHost.hostUrlChanged?4() -QtRemoteObjects.QRemoteObjectHost.setLocalServerOptions?4(unknown-type) -QtRemoteObjects.QRemoteObjectRegistryHost?1(QUrl registryAddress=QUrl(), QObject parent=None) -QtRemoteObjects.QRemoteObjectRegistryHost.__init__?1(self, QUrl registryAddress=QUrl(), QObject parent=None) -QtRemoteObjects.QRemoteObjectRegistryHost.setRegistryUrl?4(QUrl) -> bool -QtRemoteObjects.QRemoteObjectRegistry.sourceLocations?4() -> unknown-type -QtRemoteObjects.QRemoteObjectRegistry.remoteObjectAdded?4(unknown-type) -QtRemoteObjects.QRemoteObjectRegistry.remoteObjectRemoved?4(unknown-type) -QtSensors.QSensorReading.timestamp?4() -> int -QtSensors.QSensorReading.setTimestamp?4(int) -QtSensors.QSensorReading.valueCount?4() -> int -QtSensors.QSensorReading.value?4(int) -> QVariant -QtSensors.QAccelerometerReading.x?4() -> float -QtSensors.QAccelerometerReading.setX?4(float) -QtSensors.QAccelerometerReading.y?4() -> float -QtSensors.QAccelerometerReading.setY?4(float) -QtSensors.QAccelerometerReading.z?4() -> float -QtSensors.QAccelerometerReading.setZ?4(float) -QtSensors.QSensorFilter?1() -QtSensors.QSensorFilter.__init__?1(self) -QtSensors.QSensorFilter?1(QSensorFilter) -QtSensors.QSensorFilter.__init__?1(self, QSensorFilter) -QtSensors.QSensorFilter.filter?4(QSensorReading) -> bool -QtSensors.QAccelerometerFilter?1() -QtSensors.QAccelerometerFilter.__init__?1(self) -QtSensors.QAccelerometerFilter?1(QAccelerometerFilter) -QtSensors.QAccelerometerFilter.__init__?1(self, QAccelerometerFilter) -QtSensors.QAccelerometerFilter.filter?4(QAccelerometerReading) -> bool -QtSensors.QSensor.AxesOrientationMode?10 -QtSensors.QSensor.AxesOrientationMode.FixedOrientation?10 -QtSensors.QSensor.AxesOrientationMode.AutomaticOrientation?10 -QtSensors.QSensor.AxesOrientationMode.UserOrientation?10 -QtSensors.QSensor.Feature?10 -QtSensors.QSensor.Feature.Buffering?10 -QtSensors.QSensor.Feature.AlwaysOn?10 -QtSensors.QSensor.Feature.GeoValues?10 -QtSensors.QSensor.Feature.FieldOfView?10 -QtSensors.QSensor.Feature.AccelerationMode?10 -QtSensors.QSensor.Feature.SkipDuplicates?10 -QtSensors.QSensor.Feature.AxesOrientation?10 -QtSensors.QSensor.Feature.PressureSensorTemperature?10 -QtSensors.QSensor?1(QByteArray, QObject parent=None) -QtSensors.QSensor.__init__?1(self, QByteArray, QObject parent=None) -QtSensors.QSensor.identifier?4() -> QByteArray -QtSensors.QSensor.setIdentifier?4(QByteArray) -QtSensors.QSensor.type?4() -> QByteArray -QtSensors.QSensor.connectToBackend?4() -> bool -QtSensors.QSensor.isConnectedToBackend?4() -> bool -QtSensors.QSensor.isBusy?4() -> bool -QtSensors.QSensor.setActive?4(bool) -QtSensors.QSensor.isActive?4() -> bool -QtSensors.QSensor.isAlwaysOn?4() -> bool -QtSensors.QSensor.setAlwaysOn?4(bool) -QtSensors.QSensor.skipDuplicates?4() -> bool -QtSensors.QSensor.setSkipDuplicates?4(bool) -QtSensors.QSensor.availableDataRates?4() -> unknown-type -QtSensors.QSensor.dataRate?4() -> int -QtSensors.QSensor.setDataRate?4(int) -QtSensors.QSensor.outputRanges?4() -> unknown-type -QtSensors.QSensor.outputRange?4() -> int -QtSensors.QSensor.setOutputRange?4(int) -QtSensors.QSensor.description?4() -> QString -QtSensors.QSensor.error?4() -> int -QtSensors.QSensor.addFilter?4(QSensorFilter) -QtSensors.QSensor.removeFilter?4(QSensorFilter) -QtSensors.QSensor.filters?4() -> unknown-type -QtSensors.QSensor.reading?4() -> QSensorReading -QtSensors.QSensor.sensorTypes?4() -> unknown-type -QtSensors.QSensor.sensorsForType?4(QByteArray) -> unknown-type -QtSensors.QSensor.defaultSensorForType?4(QByteArray) -> QByteArray -QtSensors.QSensor.isFeatureSupported?4(QSensor.Feature) -> bool -QtSensors.QSensor.axesOrientationMode?4() -> QSensor.AxesOrientationMode -QtSensors.QSensor.setAxesOrientationMode?4(QSensor.AxesOrientationMode) -QtSensors.QSensor.currentOrientation?4() -> int -QtSensors.QSensor.setCurrentOrientation?4(int) -QtSensors.QSensor.userOrientation?4() -> int -QtSensors.QSensor.setUserOrientation?4(int) -QtSensors.QSensor.maxBufferSize?4() -> int -QtSensors.QSensor.setMaxBufferSize?4(int) -QtSensors.QSensor.efficientBufferSize?4() -> int -QtSensors.QSensor.setEfficientBufferSize?4(int) -QtSensors.QSensor.bufferSize?4() -> int -QtSensors.QSensor.setBufferSize?4(int) -QtSensors.QSensor.start?4() -> bool -QtSensors.QSensor.stop?4() -QtSensors.QSensor.busyChanged?4() -QtSensors.QSensor.activeChanged?4() -QtSensors.QSensor.readingChanged?4() -QtSensors.QSensor.sensorError?4(int) -QtSensors.QSensor.availableSensorsChanged?4() -QtSensors.QSensor.alwaysOnChanged?4() -QtSensors.QSensor.dataRateChanged?4() -QtSensors.QSensor.skipDuplicatesChanged?4(bool) -QtSensors.QSensor.axesOrientationModeChanged?4(QSensor.AxesOrientationMode) -QtSensors.QSensor.currentOrientationChanged?4(int) -QtSensors.QSensor.userOrientationChanged?4(int) -QtSensors.QSensor.maxBufferSizeChanged?4(int) -QtSensors.QSensor.efficientBufferSizeChanged?4(int) -QtSensors.QSensor.bufferSizeChanged?4(int) -QtSensors.QSensor.identifierChanged?4() -QtSensors.QAccelerometer.AccelerationMode?10 -QtSensors.QAccelerometer.AccelerationMode.Combined?10 -QtSensors.QAccelerometer.AccelerationMode.Gravity?10 -QtSensors.QAccelerometer.AccelerationMode.User?10 -QtSensors.QAccelerometer?1(QObject parent=None) -QtSensors.QAccelerometer.__init__?1(self, QObject parent=None) -QtSensors.QAccelerometer.accelerationMode?4() -> QAccelerometer.AccelerationMode -QtSensors.QAccelerometer.setAccelerationMode?4(QAccelerometer.AccelerationMode) -QtSensors.QAccelerometer.reading?4() -> QAccelerometerReading -QtSensors.QAccelerometer.accelerationModeChanged?4(QAccelerometer.AccelerationMode) -QtSensors.QAmbientLightReading.LightLevel?10 -QtSensors.QAmbientLightReading.LightLevel.Undefined?10 -QtSensors.QAmbientLightReading.LightLevel.Dark?10 -QtSensors.QAmbientLightReading.LightLevel.Twilight?10 -QtSensors.QAmbientLightReading.LightLevel.Light?10 -QtSensors.QAmbientLightReading.LightLevel.Bright?10 -QtSensors.QAmbientLightReading.LightLevel.Sunny?10 -QtSensors.QAmbientLightReading.lightLevel?4() -> QAmbientLightReading.LightLevel -QtSensors.QAmbientLightReading.setLightLevel?4(QAmbientLightReading.LightLevel) -QtSensors.QAmbientLightFilter?1() -QtSensors.QAmbientLightFilter.__init__?1(self) -QtSensors.QAmbientLightFilter?1(QAmbientLightFilter) -QtSensors.QAmbientLightFilter.__init__?1(self, QAmbientLightFilter) -QtSensors.QAmbientLightFilter.filter?4(QAmbientLightReading) -> bool -QtSensors.QAmbientLightSensor?1(QObject parent=None) -QtSensors.QAmbientLightSensor.__init__?1(self, QObject parent=None) -QtSensors.QAmbientLightSensor.reading?4() -> QAmbientLightReading -QtSensors.QAmbientTemperatureReading.temperature?4() -> float -QtSensors.QAmbientTemperatureReading.setTemperature?4(float) -QtSensors.QAmbientTemperatureFilter?1() -QtSensors.QAmbientTemperatureFilter.__init__?1(self) -QtSensors.QAmbientTemperatureFilter?1(QAmbientTemperatureFilter) -QtSensors.QAmbientTemperatureFilter.__init__?1(self, QAmbientTemperatureFilter) -QtSensors.QAmbientTemperatureFilter.filter?4(QAmbientTemperatureReading) -> bool -QtSensors.QAmbientTemperatureSensor?1(QObject parent=None) -QtSensors.QAmbientTemperatureSensor.__init__?1(self, QObject parent=None) -QtSensors.QAmbientTemperatureSensor.reading?4() -> QAmbientTemperatureReading -QtSensors.QCompassReading.azimuth?4() -> float -QtSensors.QCompassReading.setAzimuth?4(float) -QtSensors.QCompassReading.calibrationLevel?4() -> float -QtSensors.QCompassReading.setCalibrationLevel?4(float) -QtSensors.QCompassFilter?1() -QtSensors.QCompassFilter.__init__?1(self) -QtSensors.QCompassFilter?1(QCompassFilter) -QtSensors.QCompassFilter.__init__?1(self, QCompassFilter) -QtSensors.QCompassFilter.filter?4(QCompassReading) -> bool -QtSensors.QCompass?1(QObject parent=None) -QtSensors.QCompass.__init__?1(self, QObject parent=None) -QtSensors.QCompass.reading?4() -> QCompassReading -QtSensors.QGyroscopeReading.x?4() -> float -QtSensors.QGyroscopeReading.setX?4(float) -QtSensors.QGyroscopeReading.y?4() -> float -QtSensors.QGyroscopeReading.setY?4(float) -QtSensors.QGyroscopeReading.z?4() -> float -QtSensors.QGyroscopeReading.setZ?4(float) -QtSensors.QGyroscopeFilter?1() -QtSensors.QGyroscopeFilter.__init__?1(self) -QtSensors.QGyroscopeFilter?1(QGyroscopeFilter) -QtSensors.QGyroscopeFilter.__init__?1(self, QGyroscopeFilter) -QtSensors.QGyroscopeFilter.filter?4(QGyroscopeReading) -> bool -QtSensors.QGyroscope?1(QObject parent=None) -QtSensors.QGyroscope.__init__?1(self, QObject parent=None) -QtSensors.QGyroscope.reading?4() -> QGyroscopeReading -QtSensors.QHumidityReading.relativeHumidity?4() -> float -QtSensors.QHumidityReading.setRelativeHumidity?4(float) -QtSensors.QHumidityReading.absoluteHumidity?4() -> float -QtSensors.QHumidityReading.setAbsoluteHumidity?4(float) -QtSensors.QHumidityFilter?1() -QtSensors.QHumidityFilter.__init__?1(self) -QtSensors.QHumidityFilter?1(QHumidityFilter) -QtSensors.QHumidityFilter.__init__?1(self, QHumidityFilter) -QtSensors.QHumidityFilter.filter?4(QHumidityReading) -> bool -QtSensors.QHumiditySensor?1(QObject parent=None) -QtSensors.QHumiditySensor.__init__?1(self, QObject parent=None) -QtSensors.QHumiditySensor.reading?4() -> QHumidityReading -QtSensors.QIRProximityReading.reflectance?4() -> float -QtSensors.QIRProximityReading.setReflectance?4(float) -QtSensors.QIRProximityFilter?1() -QtSensors.QIRProximityFilter.__init__?1(self) -QtSensors.QIRProximityFilter?1(QIRProximityFilter) -QtSensors.QIRProximityFilter.__init__?1(self, QIRProximityFilter) -QtSensors.QIRProximityFilter.filter?4(QIRProximityReading) -> bool -QtSensors.QIRProximitySensor?1(QObject parent=None) -QtSensors.QIRProximitySensor.__init__?1(self, QObject parent=None) -QtSensors.QIRProximitySensor.reading?4() -> QIRProximityReading -QtSensors.QLidReading.backLidClosed?4() -> bool -QtSensors.QLidReading.setBackLidClosed?4(bool) -QtSensors.QLidReading.frontLidClosed?4() -> bool -QtSensors.QLidReading.setFrontLidClosed?4(bool) -QtSensors.QLidReading.backLidChanged?4(bool) -QtSensors.QLidReading.frontLidChanged?4(bool) -QtSensors.QLidFilter?1() -QtSensors.QLidFilter.__init__?1(self) -QtSensors.QLidFilter?1(QLidFilter) -QtSensors.QLidFilter.__init__?1(self, QLidFilter) -QtSensors.QLidFilter.filter?4(QLidReading) -> bool -QtSensors.QLidSensor?1(QObject parent=None) -QtSensors.QLidSensor.__init__?1(self, QObject parent=None) -QtSensors.QLidSensor.reading?4() -> QLidReading -QtSensors.QLightReading.lux?4() -> float -QtSensors.QLightReading.setLux?4(float) -QtSensors.QLightFilter?1() -QtSensors.QLightFilter.__init__?1(self) -QtSensors.QLightFilter?1(QLightFilter) -QtSensors.QLightFilter.__init__?1(self, QLightFilter) -QtSensors.QLightFilter.filter?4(QLightReading) -> bool -QtSensors.QLightSensor?1(QObject parent=None) -QtSensors.QLightSensor.__init__?1(self, QObject parent=None) -QtSensors.QLightSensor.reading?4() -> QLightReading -QtSensors.QLightSensor.fieldOfView?4() -> float -QtSensors.QLightSensor.setFieldOfView?4(float) -QtSensors.QLightSensor.fieldOfViewChanged?4(float) -QtSensors.QMagnetometerReading.x?4() -> float -QtSensors.QMagnetometerReading.setX?4(float) -QtSensors.QMagnetometerReading.y?4() -> float -QtSensors.QMagnetometerReading.setY?4(float) -QtSensors.QMagnetometerReading.z?4() -> float -QtSensors.QMagnetometerReading.setZ?4(float) -QtSensors.QMagnetometerReading.calibrationLevel?4() -> float -QtSensors.QMagnetometerReading.setCalibrationLevel?4(float) -QtSensors.QMagnetometerFilter?1() -QtSensors.QMagnetometerFilter.__init__?1(self) -QtSensors.QMagnetometerFilter?1(QMagnetometerFilter) -QtSensors.QMagnetometerFilter.__init__?1(self, QMagnetometerFilter) -QtSensors.QMagnetometerFilter.filter?4(QMagnetometerReading) -> bool -QtSensors.QMagnetometer?1(QObject parent=None) -QtSensors.QMagnetometer.__init__?1(self, QObject parent=None) -QtSensors.QMagnetometer.reading?4() -> QMagnetometerReading -QtSensors.QMagnetometer.returnGeoValues?4() -> bool -QtSensors.QMagnetometer.setReturnGeoValues?4(bool) -QtSensors.QMagnetometer.returnGeoValuesChanged?4(bool) -QtSensors.QOrientationReading.Orientation?10 -QtSensors.QOrientationReading.Orientation.Undefined?10 -QtSensors.QOrientationReading.Orientation.TopUp?10 -QtSensors.QOrientationReading.Orientation.TopDown?10 -QtSensors.QOrientationReading.Orientation.LeftUp?10 -QtSensors.QOrientationReading.Orientation.RightUp?10 -QtSensors.QOrientationReading.Orientation.FaceUp?10 -QtSensors.QOrientationReading.Orientation.FaceDown?10 -QtSensors.QOrientationReading.orientation?4() -> QOrientationReading.Orientation -QtSensors.QOrientationReading.setOrientation?4(QOrientationReading.Orientation) -QtSensors.QOrientationFilter?1() -QtSensors.QOrientationFilter.__init__?1(self) -QtSensors.QOrientationFilter?1(QOrientationFilter) -QtSensors.QOrientationFilter.__init__?1(self, QOrientationFilter) -QtSensors.QOrientationFilter.filter?4(QOrientationReading) -> bool -QtSensors.QOrientationSensor?1(QObject parent=None) -QtSensors.QOrientationSensor.__init__?1(self, QObject parent=None) -QtSensors.QOrientationSensor.reading?4() -> QOrientationReading -QtSensors.QPressureReading.pressure?4() -> float -QtSensors.QPressureReading.setPressure?4(float) -QtSensors.QPressureReading.temperature?4() -> float -QtSensors.QPressureReading.setTemperature?4(float) -QtSensors.QPressureFilter?1() -QtSensors.QPressureFilter.__init__?1(self) -QtSensors.QPressureFilter?1(QPressureFilter) -QtSensors.QPressureFilter.__init__?1(self, QPressureFilter) -QtSensors.QPressureFilter.filter?4(QPressureReading) -> bool -QtSensors.QPressureSensor?1(QObject parent=None) -QtSensors.QPressureSensor.__init__?1(self, QObject parent=None) -QtSensors.QPressureSensor.reading?4() -> QPressureReading -QtSensors.QProximityReading.close?4() -> bool -QtSensors.QProximityReading.setClose?4(bool) -QtSensors.QProximityFilter?1() -QtSensors.QProximityFilter.__init__?1(self) -QtSensors.QProximityFilter?1(QProximityFilter) -QtSensors.QProximityFilter.__init__?1(self, QProximityFilter) -QtSensors.QProximityFilter.filter?4(QProximityReading) -> bool -QtSensors.QProximitySensor?1(QObject parent=None) -QtSensors.QProximitySensor.__init__?1(self, QObject parent=None) -QtSensors.QProximitySensor.reading?4() -> QProximityReading -QtSensors.QRotationReading.x?4() -> float -QtSensors.QRotationReading.y?4() -> float -QtSensors.QRotationReading.z?4() -> float -QtSensors.QRotationReading.setFromEuler?4(float, float, float) -QtSensors.QRotationFilter?1() -QtSensors.QRotationFilter.__init__?1(self) -QtSensors.QRotationFilter?1(QRotationFilter) -QtSensors.QRotationFilter.__init__?1(self, QRotationFilter) -QtSensors.QRotationFilter.filter?4(QRotationReading) -> bool -QtSensors.QRotationSensor?1(QObject parent=None) -QtSensors.QRotationSensor.__init__?1(self, QObject parent=None) -QtSensors.QRotationSensor.reading?4() -> QRotationReading -QtSensors.QRotationSensor.hasZ?4() -> bool -QtSensors.QRotationSensor.setHasZ?4(bool) -QtSensors.QRotationSensor.hasZChanged?4(bool) -QtSensors.qoutputrange.accuracy?7 -QtSensors.qoutputrange.maximum?7 -QtSensors.qoutputrange.minimum?7 -QtSensors.qoutputrange?1() -QtSensors.qoutputrange.__init__?1(self) -QtSensors.qoutputrange?1(qoutputrange) -QtSensors.qoutputrange.__init__?1(self, qoutputrange) -QtSensors.QTapReading.TapDirection?10 -QtSensors.QTapReading.TapDirection.Undefined?10 -QtSensors.QTapReading.TapDirection.X?10 -QtSensors.QTapReading.TapDirection.Y?10 -QtSensors.QTapReading.TapDirection.Z?10 -QtSensors.QTapReading.TapDirection.X_Pos?10 -QtSensors.QTapReading.TapDirection.Y_Pos?10 -QtSensors.QTapReading.TapDirection.Z_Pos?10 -QtSensors.QTapReading.TapDirection.X_Neg?10 -QtSensors.QTapReading.TapDirection.Y_Neg?10 -QtSensors.QTapReading.TapDirection.Z_Neg?10 -QtSensors.QTapReading.TapDirection.X_Both?10 -QtSensors.QTapReading.TapDirection.Y_Both?10 -QtSensors.QTapReading.TapDirection.Z_Both?10 -QtSensors.QTapReading.tapDirection?4() -> QTapReading.TapDirection -QtSensors.QTapReading.setTapDirection?4(QTapReading.TapDirection) -QtSensors.QTapReading.isDoubleTap?4() -> bool -QtSensors.QTapReading.setDoubleTap?4(bool) -QtSensors.QTapFilter?1() -QtSensors.QTapFilter.__init__?1(self) -QtSensors.QTapFilter?1(QTapFilter) -QtSensors.QTapFilter.__init__?1(self, QTapFilter) -QtSensors.QTapFilter.filter?4(QTapReading) -> bool -QtSensors.QTapSensor?1(QObject parent=None) -QtSensors.QTapSensor.__init__?1(self, QObject parent=None) -QtSensors.QTapSensor.reading?4() -> QTapReading -QtSensors.QTapSensor.returnDoubleTapEvents?4() -> bool -QtSensors.QTapSensor.setReturnDoubleTapEvents?4(bool) -QtSensors.QTapSensor.returnDoubleTapEventsChanged?4(bool) -QtSensors.QTiltReading.yRotation?4() -> float -QtSensors.QTiltReading.setYRotation?4(float) -QtSensors.QTiltReading.xRotation?4() -> float -QtSensors.QTiltReading.setXRotation?4(float) -QtSensors.QTiltFilter?1() -QtSensors.QTiltFilter.__init__?1(self) -QtSensors.QTiltFilter?1(QTiltFilter) -QtSensors.QTiltFilter.__init__?1(self, QTiltFilter) -QtSensors.QTiltFilter.filter?4(QTiltReading) -> bool -QtSensors.QTiltSensor?1(QObject parent=None) -QtSensors.QTiltSensor.__init__?1(self, QObject parent=None) -QtSensors.QTiltSensor.reading?4() -> QTiltReading -QtSensors.QTiltSensor.calibrate?4() -QtSerialPort.QSerialPort.SerialPortError?10 -QtSerialPort.QSerialPort.SerialPortError.NoError?10 -QtSerialPort.QSerialPort.SerialPortError.DeviceNotFoundError?10 -QtSerialPort.QSerialPort.SerialPortError.PermissionError?10 -QtSerialPort.QSerialPort.SerialPortError.OpenError?10 -QtSerialPort.QSerialPort.SerialPortError.WriteError?10 -QtSerialPort.QSerialPort.SerialPortError.ReadError?10 -QtSerialPort.QSerialPort.SerialPortError.ResourceError?10 -QtSerialPort.QSerialPort.SerialPortError.UnsupportedOperationError?10 -QtSerialPort.QSerialPort.SerialPortError.TimeoutError?10 -QtSerialPort.QSerialPort.SerialPortError.NotOpenError?10 -QtSerialPort.QSerialPort.SerialPortError.UnknownError?10 -QtSerialPort.QSerialPort.PinoutSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.NoSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.DataTerminalReadySignal?10 -QtSerialPort.QSerialPort.PinoutSignal.DataCarrierDetectSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.DataSetReadySignal?10 -QtSerialPort.QSerialPort.PinoutSignal.RingIndicatorSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.RequestToSendSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.ClearToSendSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.SecondaryTransmittedDataSignal?10 -QtSerialPort.QSerialPort.PinoutSignal.SecondaryReceivedDataSignal?10 -QtSerialPort.QSerialPort.FlowControl?10 -QtSerialPort.QSerialPort.FlowControl.NoFlowControl?10 -QtSerialPort.QSerialPort.FlowControl.HardwareControl?10 -QtSerialPort.QSerialPort.FlowControl.SoftwareControl?10 -QtSerialPort.QSerialPort.StopBits?10 -QtSerialPort.QSerialPort.StopBits.OneStop?10 -QtSerialPort.QSerialPort.StopBits.OneAndHalfStop?10 -QtSerialPort.QSerialPort.StopBits.TwoStop?10 -QtSerialPort.QSerialPort.Parity?10 -QtSerialPort.QSerialPort.Parity.NoParity?10 -QtSerialPort.QSerialPort.Parity.EvenParity?10 -QtSerialPort.QSerialPort.Parity.OddParity?10 -QtSerialPort.QSerialPort.Parity.SpaceParity?10 -QtSerialPort.QSerialPort.Parity.MarkParity?10 -QtSerialPort.QSerialPort.DataBits?10 -QtSerialPort.QSerialPort.DataBits.Data5?10 -QtSerialPort.QSerialPort.DataBits.Data6?10 -QtSerialPort.QSerialPort.DataBits.Data7?10 -QtSerialPort.QSerialPort.DataBits.Data8?10 -QtSerialPort.QSerialPort.BaudRate?10 -QtSerialPort.QSerialPort.BaudRate.Baud1200?10 -QtSerialPort.QSerialPort.BaudRate.Baud2400?10 -QtSerialPort.QSerialPort.BaudRate.Baud4800?10 -QtSerialPort.QSerialPort.BaudRate.Baud9600?10 -QtSerialPort.QSerialPort.BaudRate.Baud19200?10 -QtSerialPort.QSerialPort.BaudRate.Baud38400?10 -QtSerialPort.QSerialPort.BaudRate.Baud57600?10 -QtSerialPort.QSerialPort.BaudRate.Baud115200?10 -QtSerialPort.QSerialPort.Direction?10 -QtSerialPort.QSerialPort.Direction.Input?10 -QtSerialPort.QSerialPort.Direction.Output?10 -QtSerialPort.QSerialPort.Direction.AllDirections?10 -QtSerialPort.QSerialPort?1(QObject parent=None) -QtSerialPort.QSerialPort.__init__?1(self, QObject parent=None) -QtSerialPort.QSerialPort?1(QString, QObject parent=None) -QtSerialPort.QSerialPort.__init__?1(self, QString, QObject parent=None) -QtSerialPort.QSerialPort?1(QSerialPortInfo, QObject parent=None) -QtSerialPort.QSerialPort.__init__?1(self, QSerialPortInfo, QObject parent=None) -QtSerialPort.QSerialPort.setPortName?4(QString) -QtSerialPort.QSerialPort.portName?4() -> QString -QtSerialPort.QSerialPort.setPort?4(QSerialPortInfo) -QtSerialPort.QSerialPort.open?4(unknown-type) -> bool -QtSerialPort.QSerialPort.close?4() -QtSerialPort.QSerialPort.setBaudRate?4(int, unknown-type dir=QSerialPort.AllDirections) -> bool -QtSerialPort.QSerialPort.baudRate?4(unknown-type dir=QSerialPort.AllDirections) -> int -QtSerialPort.QSerialPort.setDataBits?4(QSerialPort.DataBits) -> bool -QtSerialPort.QSerialPort.dataBits?4() -> QSerialPort.DataBits -QtSerialPort.QSerialPort.setParity?4(QSerialPort.Parity) -> bool -QtSerialPort.QSerialPort.parity?4() -> QSerialPort.Parity -QtSerialPort.QSerialPort.setStopBits?4(QSerialPort.StopBits) -> bool -QtSerialPort.QSerialPort.stopBits?4() -> QSerialPort.StopBits -QtSerialPort.QSerialPort.setFlowControl?4(QSerialPort.FlowControl) -> bool -QtSerialPort.QSerialPort.flowControl?4() -> QSerialPort.FlowControl -QtSerialPort.QSerialPort.setDataTerminalReady?4(bool) -> bool -QtSerialPort.QSerialPort.isDataTerminalReady?4() -> bool -QtSerialPort.QSerialPort.setRequestToSend?4(bool) -> bool -QtSerialPort.QSerialPort.isRequestToSend?4() -> bool -QtSerialPort.QSerialPort.pinoutSignals?4() -> unknown-type -QtSerialPort.QSerialPort.flush?4() -> bool -QtSerialPort.QSerialPort.clear?4(unknown-type dir=QSerialPort.AllDirections) -> bool -QtSerialPort.QSerialPort.error?4() -> QSerialPort.SerialPortError -QtSerialPort.QSerialPort.clearError?4() -QtSerialPort.QSerialPort.readBufferSize?4() -> int -QtSerialPort.QSerialPort.setReadBufferSize?4(int) -QtSerialPort.QSerialPort.isSequential?4() -> bool -QtSerialPort.QSerialPort.bytesAvailable?4() -> int -QtSerialPort.QSerialPort.bytesToWrite?4() -> int -QtSerialPort.QSerialPort.canReadLine?4() -> bool -QtSerialPort.QSerialPort.waitForReadyRead?4(int msecs=30000) -> bool -QtSerialPort.QSerialPort.waitForBytesWritten?4(int msecs=30000) -> bool -QtSerialPort.QSerialPort.setBreakEnabled?4(bool enabled=True) -> bool -QtSerialPort.QSerialPort.baudRateChanged?4(int, unknown-type) -QtSerialPort.QSerialPort.dataBitsChanged?4(QSerialPort.DataBits) -QtSerialPort.QSerialPort.parityChanged?4(QSerialPort.Parity) -QtSerialPort.QSerialPort.stopBitsChanged?4(QSerialPort.StopBits) -QtSerialPort.QSerialPort.flowControlChanged?4(QSerialPort.FlowControl) -QtSerialPort.QSerialPort.dataTerminalReadyChanged?4(bool) -QtSerialPort.QSerialPort.requestToSendChanged?4(bool) -QtSerialPort.QSerialPort.readData?4(int) -> Any -QtSerialPort.QSerialPort.readLineData?4(int) -> Any -QtSerialPort.QSerialPort.writeData?4(bytes) -> int -QtSerialPort.QSerialPort.handle?4() -> int -QtSerialPort.QSerialPort.isBreakEnabled?4() -> bool -QtSerialPort.QSerialPort.breakEnabledChanged?4(bool) -QtSerialPort.QSerialPort.errorOccurred?4(QSerialPort.SerialPortError) -QtSerialPort.QSerialPortInfo?1() -QtSerialPort.QSerialPortInfo.__init__?1(self) -QtSerialPort.QSerialPortInfo?1(QSerialPort) -QtSerialPort.QSerialPortInfo.__init__?1(self, QSerialPort) -QtSerialPort.QSerialPortInfo?1(QString) -QtSerialPort.QSerialPortInfo.__init__?1(self, QString) -QtSerialPort.QSerialPortInfo?1(QSerialPortInfo) -QtSerialPort.QSerialPortInfo.__init__?1(self, QSerialPortInfo) -QtSerialPort.QSerialPortInfo.swap?4(QSerialPortInfo) -QtSerialPort.QSerialPortInfo.portName?4() -> QString -QtSerialPort.QSerialPortInfo.systemLocation?4() -> QString -QtSerialPort.QSerialPortInfo.description?4() -> QString -QtSerialPort.QSerialPortInfo.manufacturer?4() -> QString -QtSerialPort.QSerialPortInfo.vendorIdentifier?4() -> int -QtSerialPort.QSerialPortInfo.productIdentifier?4() -> int -QtSerialPort.QSerialPortInfo.hasVendorIdentifier?4() -> bool -QtSerialPort.QSerialPortInfo.hasProductIdentifier?4() -> bool -QtSerialPort.QSerialPortInfo.standardBaudRates?4() -> unknown-type -QtSerialPort.QSerialPortInfo.availablePorts?4() -> unknown-type -QtSerialPort.QSerialPortInfo.isNull?4() -> bool -QtSerialPort.QSerialPortInfo.serialNumber?4() -> QString -QtWebChannel.QWebChannel?1(QObject parent=None) -QtWebChannel.QWebChannel.__init__?1(self, QObject parent=None) -QtWebChannel.QWebChannel.registerObjects?4(unknown-type) -QtWebChannel.QWebChannel.registeredObjects?4() -> unknown-type -QtWebChannel.QWebChannel.registerObject?4(QString, QObject) -QtWebChannel.QWebChannel.deregisterObject?4(QObject) -QtWebChannel.QWebChannel.blockUpdates?4() -> bool -QtWebChannel.QWebChannel.setBlockUpdates?4(bool) -QtWebChannel.QWebChannel.propertyUpdateInterval?4() -> int -QtWebChannel.QWebChannel.setPropertyUpdateInterval?4(int) -QtWebChannel.QWebChannel.connectTo?4(QWebChannelAbstractTransport) -QtWebChannel.QWebChannel.disconnectFrom?4(QWebChannelAbstractTransport) -QtWebChannel.QWebChannel.blockUpdatesChanged?4(bool) -QtWebChannel.QWebChannelAbstractTransport?1(QObject parent=None) -QtWebChannel.QWebChannelAbstractTransport.__init__?1(self, QObject parent=None) -QtWebChannel.QWebChannelAbstractTransport.sendMessage?4(QJsonObject) -QtWebChannel.QWebChannelAbstractTransport.messageReceived?4(QJsonObject, QWebChannelAbstractTransport) -QtWebSockets.QMaskGenerator?1(QObject parent=None) -QtWebSockets.QMaskGenerator.__init__?1(self, QObject parent=None) -QtWebSockets.QMaskGenerator.seed?4() -> bool -QtWebSockets.QMaskGenerator.nextMask?4() -> int -QtWebSockets.QWebSocket?1(QString origin='', QWebSocketProtocol.Version version=QWebSocketProtocol.VersionLatest, QObject parent=None) -QtWebSockets.QWebSocket.__init__?1(self, QString origin='', QWebSocketProtocol.Version version=QWebSocketProtocol.VersionLatest, QObject parent=None) -QtWebSockets.QWebSocket.abort?4() -QtWebSockets.QWebSocket.error?4() -> QAbstractSocket.SocketError -QtWebSockets.QWebSocket.errorString?4() -> QString -QtWebSockets.QWebSocket.flush?4() -> bool -QtWebSockets.QWebSocket.isValid?4() -> bool -QtWebSockets.QWebSocket.localAddress?4() -> QHostAddress -QtWebSockets.QWebSocket.localPort?4() -> int -QtWebSockets.QWebSocket.pauseMode?4() -> unknown-type -QtWebSockets.QWebSocket.peerAddress?4() -> QHostAddress -QtWebSockets.QWebSocket.peerName?4() -> QString -QtWebSockets.QWebSocket.peerPort?4() -> int -QtWebSockets.QWebSocket.proxy?4() -> QNetworkProxy -QtWebSockets.QWebSocket.setProxy?4(QNetworkProxy) -QtWebSockets.QWebSocket.setMaskGenerator?4(QMaskGenerator) -QtWebSockets.QWebSocket.maskGenerator?4() -> QMaskGenerator -QtWebSockets.QWebSocket.readBufferSize?4() -> int -QtWebSockets.QWebSocket.setReadBufferSize?4(int) -QtWebSockets.QWebSocket.resume?4() -QtWebSockets.QWebSocket.setPauseMode?4(unknown-type) -QtWebSockets.QWebSocket.state?4() -> QAbstractSocket.SocketState -QtWebSockets.QWebSocket.version?4() -> QWebSocketProtocol.Version -QtWebSockets.QWebSocket.resourceName?4() -> QString -QtWebSockets.QWebSocket.requestUrl?4() -> QUrl -QtWebSockets.QWebSocket.origin?4() -> QString -QtWebSockets.QWebSocket.closeCode?4() -> QWebSocketProtocol.CloseCode -QtWebSockets.QWebSocket.closeReason?4() -> QString -QtWebSockets.QWebSocket.sendTextMessage?4(QString) -> int -QtWebSockets.QWebSocket.sendBinaryMessage?4(QByteArray) -> int -QtWebSockets.QWebSocket.ignoreSslErrors?4(unknown-type) -QtWebSockets.QWebSocket.setSslConfiguration?4(QSslConfiguration) -QtWebSockets.QWebSocket.sslConfiguration?4() -> QSslConfiguration -QtWebSockets.QWebSocket.request?4() -> QNetworkRequest -QtWebSockets.QWebSocket.close?4(QWebSocketProtocol.CloseCode closeCode=QWebSocketProtocol.CloseCodeNormal, QString reason='') -QtWebSockets.QWebSocket.open?4(QNetworkRequest, QWebSocketHandshakeOptions) -QtWebSockets.QWebSocket.open?4(QUrl, QWebSocketHandshakeOptions) -QtWebSockets.QWebSocket.open?4(QUrl) -QtWebSockets.QWebSocket.open?4(QNetworkRequest) -QtWebSockets.QWebSocket.ping?4(QByteArray payload=QByteArray()) -QtWebSockets.QWebSocket.ignoreSslErrors?4() -QtWebSockets.QWebSocket.aboutToClose?4() -QtWebSockets.QWebSocket.connected?4() -QtWebSockets.QWebSocket.disconnected?4() -QtWebSockets.QWebSocket.stateChanged?4(QAbstractSocket.SocketState) -QtWebSockets.QWebSocket.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) -QtWebSockets.QWebSocket.readChannelFinished?4() -QtWebSockets.QWebSocket.textFrameReceived?4(QString, bool) -QtWebSockets.QWebSocket.binaryFrameReceived?4(QByteArray, bool) -QtWebSockets.QWebSocket.textMessageReceived?4(QString) -QtWebSockets.QWebSocket.binaryMessageReceived?4(QByteArray) -QtWebSockets.QWebSocket.error?4(QAbstractSocket.SocketError) -QtWebSockets.QWebSocket.pong?4(int, QByteArray) -QtWebSockets.QWebSocket.bytesWritten?4(int) -QtWebSockets.QWebSocket.sslErrors?4(unknown-type) -QtWebSockets.QWebSocket.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) -QtWebSockets.QWebSocket.bytesToWrite?4() -> int -QtWebSockets.QWebSocket.setMaxAllowedIncomingFrameSize?4(int) -QtWebSockets.QWebSocket.maxAllowedIncomingFrameSize?4() -> int -QtWebSockets.QWebSocket.setMaxAllowedIncomingMessageSize?4(int) -QtWebSockets.QWebSocket.maxAllowedIncomingMessageSize?4() -> int -QtWebSockets.QWebSocket.maxIncomingMessageSize?4() -> int -QtWebSockets.QWebSocket.maxIncomingFrameSize?4() -> int -QtWebSockets.QWebSocket.setOutgoingFrameSize?4(int) -QtWebSockets.QWebSocket.outgoingFrameSize?4() -> int -QtWebSockets.QWebSocket.maxOutgoingFrameSize?4() -> int -QtWebSockets.QWebSocket.continueInterruptedHandshake?4() -QtWebSockets.QWebSocket.peerVerifyError?4(QSslError) -QtWebSockets.QWebSocket.alertSent?4(QSsl.AlertLevel, QSsl.AlertType, QString) -QtWebSockets.QWebSocket.alertReceived?4(QSsl.AlertLevel, QSsl.AlertType, QString) -QtWebSockets.QWebSocket.handshakeInterruptedOnError?4(QSslError) -QtWebSockets.QWebSocket.handshakeOptions?4() -> QWebSocketHandshakeOptions -QtWebSockets.QWebSocket.subprotocol?4() -> QString -QtWebSockets.QWebSocket.errorOccurred?4(QAbstractSocket.SocketError) -QtWebSockets.QWebSocket.authenticationRequired?4(QAuthenticator) -QtWebSockets.QWebSocketCorsAuthenticator?1(QString) -QtWebSockets.QWebSocketCorsAuthenticator.__init__?1(self, QString) -QtWebSockets.QWebSocketCorsAuthenticator?1(QWebSocketCorsAuthenticator) -QtWebSockets.QWebSocketCorsAuthenticator.__init__?1(self, QWebSocketCorsAuthenticator) -QtWebSockets.QWebSocketCorsAuthenticator.swap?4(QWebSocketCorsAuthenticator) -QtWebSockets.QWebSocketCorsAuthenticator.origin?4() -> QString -QtWebSockets.QWebSocketCorsAuthenticator.setAllowed?4(bool) -QtWebSockets.QWebSocketCorsAuthenticator.allowed?4() -> bool -QtWebSockets.QWebSocketHandshakeOptions?1() -QtWebSockets.QWebSocketHandshakeOptions.__init__?1(self) -QtWebSockets.QWebSocketHandshakeOptions?1(QWebSocketHandshakeOptions) -QtWebSockets.QWebSocketHandshakeOptions.__init__?1(self, QWebSocketHandshakeOptions) -QtWebSockets.QWebSocketHandshakeOptions.swap?4(QWebSocketHandshakeOptions) -QtWebSockets.QWebSocketHandshakeOptions.subprotocols?4() -> QStringList -QtWebSockets.QWebSocketHandshakeOptions.setSubprotocols?4(QStringList) -QtWebSockets.QWebSocketProtocol.CloseCode?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeNormal?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeGoingAway?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeProtocolError?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeDatatypeNotSupported?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeReserved1004?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeMissingStatusCode?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeAbnormalDisconnection?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeWrongDatatype?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodePolicyViolated?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeTooMuchData?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeMissingExtension?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeBadOperation?10 -QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeTlsHandshakeFailed?10 -QtWebSockets.QWebSocketProtocol.Version?10 -QtWebSockets.QWebSocketProtocol.Version.VersionUnknown?10 -QtWebSockets.QWebSocketProtocol.Version.Version0?10 -QtWebSockets.QWebSocketProtocol.Version.Version4?10 -QtWebSockets.QWebSocketProtocol.Version.Version5?10 -QtWebSockets.QWebSocketProtocol.Version.Version6?10 -QtWebSockets.QWebSocketProtocol.Version.Version7?10 -QtWebSockets.QWebSocketProtocol.Version.Version8?10 -QtWebSockets.QWebSocketProtocol.Version.Version13?10 -QtWebSockets.QWebSocketProtocol.Version.VersionLatest?10 -QtWebSockets.QWebSocketServer.SslMode?10 -QtWebSockets.QWebSocketServer.SslMode.SecureMode?10 -QtWebSockets.QWebSocketServer.SslMode.NonSecureMode?10 -QtWebSockets.QWebSocketServer?1(QString, QWebSocketServer.SslMode, QObject parent=None) -QtWebSockets.QWebSocketServer.__init__?1(self, QString, QWebSocketServer.SslMode, QObject parent=None) -QtWebSockets.QWebSocketServer.listen?4(QHostAddress address=QHostAddress.Any, int port=0) -> bool -QtWebSockets.QWebSocketServer.close?4() -QtWebSockets.QWebSocketServer.isListening?4() -> bool -QtWebSockets.QWebSocketServer.setMaxPendingConnections?4(int) -QtWebSockets.QWebSocketServer.maxPendingConnections?4() -> int -QtWebSockets.QWebSocketServer.serverPort?4() -> int -QtWebSockets.QWebSocketServer.serverAddress?4() -> QHostAddress -QtWebSockets.QWebSocketServer.secureMode?4() -> QWebSocketServer.SslMode -QtWebSockets.QWebSocketServer.setSocketDescriptor?4(qintptr) -> bool -QtWebSockets.QWebSocketServer.socketDescriptor?4() -> qintptr -QtWebSockets.QWebSocketServer.hasPendingConnections?4() -> bool -QtWebSockets.QWebSocketServer.nextPendingConnection?4() -> QWebSocket -QtWebSockets.QWebSocketServer.error?4() -> QWebSocketProtocol.CloseCode -QtWebSockets.QWebSocketServer.errorString?4() -> QString -QtWebSockets.QWebSocketServer.pauseAccepting?4() -QtWebSockets.QWebSocketServer.resumeAccepting?4() -QtWebSockets.QWebSocketServer.setServerName?4(QString) -QtWebSockets.QWebSocketServer.serverName?4() -> QString -QtWebSockets.QWebSocketServer.setProxy?4(QNetworkProxy) -QtWebSockets.QWebSocketServer.proxy?4() -> QNetworkProxy -QtWebSockets.QWebSocketServer.setSslConfiguration?4(QSslConfiguration) -QtWebSockets.QWebSocketServer.sslConfiguration?4() -> QSslConfiguration -QtWebSockets.QWebSocketServer.supportedVersions?4() -> unknown-type -QtWebSockets.QWebSocketServer.serverUrl?4() -> QUrl -QtWebSockets.QWebSocketServer.handleConnection?4(QTcpSocket) -QtWebSockets.QWebSocketServer.acceptError?4(QAbstractSocket.SocketError) -QtWebSockets.QWebSocketServer.serverError?4(QWebSocketProtocol.CloseCode) -QtWebSockets.QWebSocketServer.originAuthenticationRequired?4(QWebSocketCorsAuthenticator) -QtWebSockets.QWebSocketServer.newConnection?4() -QtWebSockets.QWebSocketServer.peerVerifyError?4(QSslError) -QtWebSockets.QWebSocketServer.sslErrors?4(unknown-type) -QtWebSockets.QWebSocketServer.closed?4() -QtWebSockets.QWebSocketServer.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) -QtWebSockets.QWebSocketServer.setHandshakeTimeout?4(int) -QtWebSockets.QWebSocketServer.handshakeTimeoutMS?4() -> int -QtWebSockets.QWebSocketServer.setSupportedSubprotocols?4(QStringList) -QtWebSockets.QWebSocketServer.supportedSubprotocols?4() -> QStringList -QtBluetooth.QBluetooth.AttAccessConstraint?10 -QtBluetooth.QBluetooth.AttAccessConstraint.AttAuthorizationRequired?10 -QtBluetooth.QBluetooth.AttAccessConstraint.AttAuthenticationRequired?10 -QtBluetooth.QBluetooth.AttAccessConstraint.AttEncryptionRequired?10 -QtBluetooth.QBluetooth.Security?10 -QtBluetooth.QBluetooth.Security.NoSecurity?10 -QtBluetooth.QBluetooth.Security.Authorization?10 -QtBluetooth.QBluetooth.Security.Authentication?10 -QtBluetooth.QBluetooth.Security.Encryption?10 -QtBluetooth.QBluetooth.Security.Secure?10 -QtBluetooth.QBluetoothAddress?1() -QtBluetooth.QBluetoothAddress.__init__?1(self) -QtBluetooth.QBluetoothAddress?1(int) -QtBluetooth.QBluetoothAddress.__init__?1(self, int) -QtBluetooth.QBluetoothAddress?1(QString) -QtBluetooth.QBluetoothAddress.__init__?1(self, QString) -QtBluetooth.QBluetoothAddress?1(QBluetoothAddress) -QtBluetooth.QBluetoothAddress.__init__?1(self, QBluetoothAddress) -QtBluetooth.QBluetoothAddress.isNull?4() -> bool -QtBluetooth.QBluetoothAddress.clear?4() -QtBluetooth.QBluetoothAddress.toUInt64?4() -> int -QtBluetooth.QBluetoothAddress.toString?4() -> QString -QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.NoMethod?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.ClassicMethod?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.LowEnergyMethod?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.NoError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.InputOutputError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.PoweredOffError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.InvalidBluetoothAdapterError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnsupportedPlatformError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnsupportedDiscoveryMethod?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.LocationServiceTurnedOffError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.MissingPermissionsError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnknownError?10 -QtBluetooth.QBluetoothDeviceDiscoveryAgent?1(QObject parent=None) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.__init__?1(self, QObject parent=None) -QtBluetooth.QBluetoothDeviceDiscoveryAgent?1(QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.__init__?1(self, QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.isActive?4() -> bool -QtBluetooth.QBluetoothDeviceDiscoveryAgent.error?4() -> QBluetoothDeviceDiscoveryAgent.Error -QtBluetooth.QBluetoothDeviceDiscoveryAgent.errorString?4() -> QString -QtBluetooth.QBluetoothDeviceDiscoveryAgent.discoveredDevices?4() -> unknown-type -QtBluetooth.QBluetoothDeviceDiscoveryAgent.start?4() -QtBluetooth.QBluetoothDeviceDiscoveryAgent.start?4(unknown-type) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.stop?4() -QtBluetooth.QBluetoothDeviceDiscoveryAgent.deviceDiscovered?4(QBluetoothDeviceInfo) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.finished?4() -QtBluetooth.QBluetoothDeviceDiscoveryAgent.errorOccurred?4(QBluetoothDeviceDiscoveryAgent.Error) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.canceled?4() -QtBluetooth.QBluetoothDeviceDiscoveryAgent.deviceUpdated?4(QBluetoothDeviceInfo, unknown-type) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.setLowEnergyDiscoveryTimeout?4(int) -QtBluetooth.QBluetoothDeviceDiscoveryAgent.lowEnergyDiscoveryTimeout?4() -> int -QtBluetooth.QBluetoothDeviceDiscoveryAgent.supportedDiscoveryMethods?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.Field?10 -QtBluetooth.QBluetoothDeviceInfo.Field.None_?10 -QtBluetooth.QBluetoothDeviceInfo.Field.RSSI?10 -QtBluetooth.QBluetoothDeviceInfo.Field.ManufacturerData?10 -QtBluetooth.QBluetoothDeviceInfo.Field.ServiceData?10 -QtBluetooth.QBluetoothDeviceInfo.Field.All?10 -QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration?10 -QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.UnknownCoreConfiguration?10 -QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.LowEnergyCoreConfiguration?10 -QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.BaseRateCoreConfiguration?10 -QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.BaseRateAndLowEnergyCoreConfiguration?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.NoService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.PositioningService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.NetworkingService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.RenderingService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.CapturingService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.ObjectTransferService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.AudioService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.TelephonyService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.InformationService?10 -QtBluetooth.QBluetoothDeviceInfo.ServiceClass.AllServices?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.UncategorizedHealthDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthBloodPressureMonitor?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthThermometer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthWeightScale?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthGlucoseMeter?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthPulseOximeter?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthDataDisplay?10 -QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthStepCounter?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.UncategorizedToy?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyRobot?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyVehicle?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyDoll?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyController?10 -QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyGame?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.UncategorizedWearableDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableWristWatch?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearablePager?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableJacket?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableHelmet?10 -QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableGlasses?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.UncategorizedImagingDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageDisplay?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageCamera?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageScanner?10 -QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImagePrinter?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.UncategorizedPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.KeyboardPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.PointingDevicePeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.KeyboardWithPointingDevicePeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.JoystickPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.GamepadPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.RemoteControlPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.SensingDevicePeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.DigitizerTabletPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.CardReaderPeripheral?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.UncategorizedAudioVideoDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.WearableHeadsetDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.HandsFreeDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Microphone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Loudspeaker?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Headphones?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.PortableAudioDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.CarAudio?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.SetTopBox?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.HiFiAudioDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Vcr?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoCamera?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Camcorder?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoMonitor?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoDisplayAndLoudspeaker?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoConferencing?10 -QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.GamingDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkFullService?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorOne?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorTwo?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorThree?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorFour?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorFive?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorSix?10 -QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkNoService?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.UncategorizedPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CellularPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CordlessPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.SmartPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.WiredModemOrVoiceGatewayPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CommonIsdnAccessPhone?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.UncategorizedComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.DesktopComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.ServerComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.LaptopComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.HandheldClamShellComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.HandheldComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.WearableComputer?10 -QtBluetooth.QBluetoothDeviceInfo.MinorMiscellaneousClass?10 -QtBluetooth.QBluetoothDeviceInfo.MinorMiscellaneousClass.UncategorizedMiscellaneous?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.MiscellaneousDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ComputerDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.PhoneDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.NetworkDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.AudioVideoDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.PeripheralDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ImagingDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.WearableDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ToyDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.HealthDevice?10 -QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.UncategorizedDevice?10 -QtBluetooth.QBluetoothDeviceInfo?1() -QtBluetooth.QBluetoothDeviceInfo.__init__?1(self) -QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothAddress, QString, int) -QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothAddress, QString, int) -QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothUuid, QString, int) -QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothUuid, QString, int) -QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothDeviceInfo) -QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothDeviceInfo) -QtBluetooth.QBluetoothDeviceInfo.isValid?4() -> bool -QtBluetooth.QBluetoothDeviceInfo.isCached?4() -> bool -QtBluetooth.QBluetoothDeviceInfo.setCached?4(bool) -QtBluetooth.QBluetoothDeviceInfo.address?4() -> QBluetoothAddress -QtBluetooth.QBluetoothDeviceInfo.name?4() -> QString -QtBluetooth.QBluetoothDeviceInfo.serviceClasses?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.majorDeviceClass?4() -> QBluetoothDeviceInfo.MajorDeviceClass -QtBluetooth.QBluetoothDeviceInfo.minorDeviceClass?4() -> int -QtBluetooth.QBluetoothDeviceInfo.rssi?4() -> int -QtBluetooth.QBluetoothDeviceInfo.setRssi?4(int) -QtBluetooth.QBluetoothDeviceInfo.setServiceUuids?4(unknown-type) -QtBluetooth.QBluetoothDeviceInfo.serviceUuids?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.setCoreConfigurations?4(unknown-type) -QtBluetooth.QBluetoothDeviceInfo.coreConfigurations?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.setDeviceUuid?4(QBluetoothUuid) -QtBluetooth.QBluetoothDeviceInfo.deviceUuid?4() -> QBluetoothUuid -QtBluetooth.QBluetoothDeviceInfo.manufacturerIds?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.manufacturerData?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.manufacturerData?4(int) -> QByteArray -QtBluetooth.QBluetoothDeviceInfo.setManufacturerData?4(int, QByteArray) -> bool -QtBluetooth.QBluetoothDeviceInfo.setName?4(QString) -QtBluetooth.QBluetoothDeviceInfo.serviceIds?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.serviceData?4() -> unknown-type -QtBluetooth.QBluetoothDeviceInfo.serviceData?4(QBluetoothUuid) -> QByteArray -QtBluetooth.QBluetoothDeviceInfo.setServiceData?4(QBluetoothUuid, QByteArray) -> bool -QtBluetooth.QBluetoothHostInfo?1() -QtBluetooth.QBluetoothHostInfo.__init__?1(self) -QtBluetooth.QBluetoothHostInfo?1(QBluetoothHostInfo) -QtBluetooth.QBluetoothHostInfo.__init__?1(self, QBluetoothHostInfo) -QtBluetooth.QBluetoothHostInfo.address?4() -> QBluetoothAddress -QtBluetooth.QBluetoothHostInfo.setAddress?4(QBluetoothAddress) -QtBluetooth.QBluetoothHostInfo.name?4() -> QString -QtBluetooth.QBluetoothHostInfo.setName?4(QString) -QtBluetooth.QBluetoothLocalDevice.Error?10 -QtBluetooth.QBluetoothLocalDevice.Error.NoError?10 -QtBluetooth.QBluetoothLocalDevice.Error.PairingError?10 -QtBluetooth.QBluetoothLocalDevice.Error.MissingPermissionsError?10 -QtBluetooth.QBluetoothLocalDevice.Error.UnknownError?10 -QtBluetooth.QBluetoothLocalDevice.HostMode?10 -QtBluetooth.QBluetoothLocalDevice.HostMode.HostPoweredOff?10 -QtBluetooth.QBluetoothLocalDevice.HostMode.HostConnectable?10 -QtBluetooth.QBluetoothLocalDevice.HostMode.HostDiscoverable?10 -QtBluetooth.QBluetoothLocalDevice.HostMode.HostDiscoverableLimitedInquiry?10 -QtBluetooth.QBluetoothLocalDevice.Pairing?10 -QtBluetooth.QBluetoothLocalDevice.Pairing.Unpaired?10 -QtBluetooth.QBluetoothLocalDevice.Pairing.Paired?10 -QtBluetooth.QBluetoothLocalDevice.Pairing.AuthorizedPaired?10 -QtBluetooth.QBluetoothLocalDevice?1(QObject parent=None) -QtBluetooth.QBluetoothLocalDevice.__init__?1(self, QObject parent=None) -QtBluetooth.QBluetoothLocalDevice?1(QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothLocalDevice.__init__?1(self, QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothLocalDevice.isValid?4() -> bool -QtBluetooth.QBluetoothLocalDevice.requestPairing?4(QBluetoothAddress, QBluetoothLocalDevice.Pairing) -QtBluetooth.QBluetoothLocalDevice.pairingStatus?4(QBluetoothAddress) -> QBluetoothLocalDevice.Pairing -QtBluetooth.QBluetoothLocalDevice.setHostMode?4(QBluetoothLocalDevice.HostMode) -QtBluetooth.QBluetoothLocalDevice.hostMode?4() -> QBluetoothLocalDevice.HostMode -QtBluetooth.QBluetoothLocalDevice.powerOn?4() -QtBluetooth.QBluetoothLocalDevice.name?4() -> QString -QtBluetooth.QBluetoothLocalDevice.address?4() -> QBluetoothAddress -QtBluetooth.QBluetoothLocalDevice.allDevices?4() -> unknown-type -QtBluetooth.QBluetoothLocalDevice.connectedDevices?4() -> unknown-type -QtBluetooth.QBluetoothLocalDevice.hostModeStateChanged?4(QBluetoothLocalDevice.HostMode) -QtBluetooth.QBluetoothLocalDevice.pairingFinished?4(QBluetoothAddress, QBluetoothLocalDevice.Pairing) -QtBluetooth.QBluetoothLocalDevice.errorOccurred?4(QBluetoothLocalDevice.Error) -QtBluetooth.QBluetoothLocalDevice.deviceConnected?4(QBluetoothAddress) -QtBluetooth.QBluetoothLocalDevice.deviceDisconnected?4(QBluetoothAddress) -QtBluetooth.QBluetoothServer.Error?10 -QtBluetooth.QBluetoothServer.Error.NoError?10 -QtBluetooth.QBluetoothServer.Error.UnknownError?10 -QtBluetooth.QBluetoothServer.Error.PoweredOffError?10 -QtBluetooth.QBluetoothServer.Error.InputOutputError?10 -QtBluetooth.QBluetoothServer.Error.ServiceAlreadyRegisteredError?10 -QtBluetooth.QBluetoothServer.Error.UnsupportedProtocolError?10 -QtBluetooth.QBluetoothServer.Error.MissingPermissionsError?10 -QtBluetooth.QBluetoothServer?1(QBluetoothServiceInfo.Protocol, QObject parent=None) -QtBluetooth.QBluetoothServer.__init__?1(self, QBluetoothServiceInfo.Protocol, QObject parent=None) -QtBluetooth.QBluetoothServer.close?4() -QtBluetooth.QBluetoothServer.listen?4(QBluetoothAddress address=QBluetoothAddress(), int port=0) -> bool -QtBluetooth.QBluetoothServer.listen?4(QBluetoothUuid, QString serviceName='') -> QBluetoothServiceInfo -QtBluetooth.QBluetoothServer.isListening?4() -> bool -QtBluetooth.QBluetoothServer.setMaxPendingConnections?4(int) -QtBluetooth.QBluetoothServer.maxPendingConnections?4() -> int -QtBluetooth.QBluetoothServer.hasPendingConnections?4() -> bool -QtBluetooth.QBluetoothServer.nextPendingConnection?4() -> QBluetoothSocket -QtBluetooth.QBluetoothServer.serverAddress?4() -> QBluetoothAddress -QtBluetooth.QBluetoothServer.serverPort?4() -> int -QtBluetooth.QBluetoothServer.setSecurityFlags?4(unknown-type) -QtBluetooth.QBluetoothServer.securityFlags?4() -> unknown-type -QtBluetooth.QBluetoothServer.serverType?4() -> QBluetoothServiceInfo.Protocol -QtBluetooth.QBluetoothServer.error?4() -> QBluetoothServer.Error -QtBluetooth.QBluetoothServer.newConnection?4() -QtBluetooth.QBluetoothServer.errorOccurred?4(QBluetoothServer.Error) -QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode.FullDiscovery?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.NoError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.InputOutputError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.PoweredOffError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.InvalidBluetoothAdapterError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.MissingPermissionsError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.UnknownError?10 -QtBluetooth.QBluetoothServiceDiscoveryAgent?1(QObject parent=None) -QtBluetooth.QBluetoothServiceDiscoveryAgent.__init__?1(self, QObject parent=None) -QtBluetooth.QBluetoothServiceDiscoveryAgent?1(QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothServiceDiscoveryAgent.__init__?1(self, QBluetoothAddress, QObject parent=None) -QtBluetooth.QBluetoothServiceDiscoveryAgent.isActive?4() -> bool -QtBluetooth.QBluetoothServiceDiscoveryAgent.error?4() -> QBluetoothServiceDiscoveryAgent.Error -QtBluetooth.QBluetoothServiceDiscoveryAgent.errorString?4() -> QString -QtBluetooth.QBluetoothServiceDiscoveryAgent.discoveredServices?4() -> unknown-type -QtBluetooth.QBluetoothServiceDiscoveryAgent.setUuidFilter?4(unknown-type) -QtBluetooth.QBluetoothServiceDiscoveryAgent.setUuidFilter?4(QBluetoothUuid) -QtBluetooth.QBluetoothServiceDiscoveryAgent.uuidFilter?4() -> unknown-type -QtBluetooth.QBluetoothServiceDiscoveryAgent.setRemoteAddress?4(QBluetoothAddress) -> bool -QtBluetooth.QBluetoothServiceDiscoveryAgent.remoteAddress?4() -> QBluetoothAddress -QtBluetooth.QBluetoothServiceDiscoveryAgent.start?4(QBluetoothServiceDiscoveryAgent.DiscoveryMode mode=QBluetoothServiceDiscoveryAgent.MinimalDiscovery) -QtBluetooth.QBluetoothServiceDiscoveryAgent.stop?4() -QtBluetooth.QBluetoothServiceDiscoveryAgent.clear?4() -QtBluetooth.QBluetoothServiceDiscoveryAgent.serviceDiscovered?4(QBluetoothServiceInfo) -QtBluetooth.QBluetoothServiceDiscoveryAgent.finished?4() -QtBluetooth.QBluetoothServiceDiscoveryAgent.canceled?4() -QtBluetooth.QBluetoothServiceDiscoveryAgent.errorOccurred?4(QBluetoothServiceDiscoveryAgent.Error) -QtBluetooth.QBluetoothServiceInfo.Protocol?10 -QtBluetooth.QBluetoothServiceInfo.Protocol.UnknownProtocol?10 -QtBluetooth.QBluetoothServiceInfo.Protocol.L2capProtocol?10 -QtBluetooth.QBluetoothServiceInfo.Protocol.RfcommProtocol?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceRecordHandle?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceClassIds?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceRecordState?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceId?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ProtocolDescriptorList?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.BrowseGroupList?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.LanguageBaseAttributeIdList?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceInfoTimeToLive?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceAvailability?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.BluetoothProfileDescriptorList?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.DocumentationUrl?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ClientExecutableUrl?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.IconUrl?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.AdditionalProtocolDescriptorList?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.PrimaryLanguageBase?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceName?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceDescription?10 -QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceProvider?10 -QtBluetooth.QBluetoothServiceInfo?1() -QtBluetooth.QBluetoothServiceInfo.__init__?1(self) -QtBluetooth.QBluetoothServiceInfo?1(QBluetoothServiceInfo) -QtBluetooth.QBluetoothServiceInfo.__init__?1(self, QBluetoothServiceInfo) -QtBluetooth.QBluetoothServiceInfo.isValid?4() -> bool -QtBluetooth.QBluetoothServiceInfo.isComplete?4() -> bool -QtBluetooth.QBluetoothServiceInfo.setDevice?4(QBluetoothDeviceInfo) -QtBluetooth.QBluetoothServiceInfo.device?4() -> QBluetoothDeviceInfo -QtBluetooth.QBluetoothServiceInfo.attribute?4(int) -> QVariant -QtBluetooth.QBluetoothServiceInfo.attributes?4() -> unknown-type -QtBluetooth.QBluetoothServiceInfo.contains?4(int) -> bool -QtBluetooth.QBluetoothServiceInfo.removeAttribute?4(int) -QtBluetooth.QBluetoothServiceInfo.socketProtocol?4() -> QBluetoothServiceInfo.Protocol -QtBluetooth.QBluetoothServiceInfo.protocolServiceMultiplexer?4() -> int -QtBluetooth.QBluetoothServiceInfo.serverChannel?4() -> int -QtBluetooth.QBluetoothServiceInfo.protocolDescriptor?4(QBluetoothUuid.ProtocolUuid) -> Sequence -QtBluetooth.QBluetoothServiceInfo.isRegistered?4() -> bool -QtBluetooth.QBluetoothServiceInfo.registerService?4(QBluetoothAddress localAdapter=QBluetoothAddress()) -> bool -QtBluetooth.QBluetoothServiceInfo.unregisterService?4() -> bool -QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, QBluetoothUuid) -QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, Sequence) -QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, QVariant) -QtBluetooth.QBluetoothServiceInfo.setServiceName?4(QString) -QtBluetooth.QBluetoothServiceInfo.serviceName?4() -> QString -QtBluetooth.QBluetoothServiceInfo.setServiceDescription?4(QString) -QtBluetooth.QBluetoothServiceInfo.serviceDescription?4() -> QString -QtBluetooth.QBluetoothServiceInfo.setServiceProvider?4(QString) -QtBluetooth.QBluetoothServiceInfo.serviceProvider?4() -> QString -QtBluetooth.QBluetoothServiceInfo.setServiceAvailability?4(int) -QtBluetooth.QBluetoothServiceInfo.serviceAvailability?4() -> int -QtBluetooth.QBluetoothServiceInfo.setServiceUuid?4(QBluetoothUuid) -QtBluetooth.QBluetoothServiceInfo.serviceUuid?4() -> QBluetoothUuid -QtBluetooth.QBluetoothServiceInfo.serviceClassUuids?4() -> unknown-type -QtBluetooth.QBluetoothSocket.SocketError?10 -QtBluetooth.QBluetoothSocket.SocketError.NoSocketError?10 -QtBluetooth.QBluetoothSocket.SocketError.UnknownSocketError?10 -QtBluetooth.QBluetoothSocket.SocketError.RemoteHostClosedError?10 -QtBluetooth.QBluetoothSocket.SocketError.HostNotFoundError?10 -QtBluetooth.QBluetoothSocket.SocketError.ServiceNotFoundError?10 -QtBluetooth.QBluetoothSocket.SocketError.NetworkError?10 -QtBluetooth.QBluetoothSocket.SocketError.UnsupportedProtocolError?10 -QtBluetooth.QBluetoothSocket.SocketError.OperationError?10 -QtBluetooth.QBluetoothSocket.SocketError.MissingPermissionsError?10 -QtBluetooth.QBluetoothSocket.SocketState?10 -QtBluetooth.QBluetoothSocket.SocketState.UnconnectedState?10 -QtBluetooth.QBluetoothSocket.SocketState.ServiceLookupState?10 -QtBluetooth.QBluetoothSocket.SocketState.ConnectingState?10 -QtBluetooth.QBluetoothSocket.SocketState.ConnectedState?10 -QtBluetooth.QBluetoothSocket.SocketState.BoundState?10 -QtBluetooth.QBluetoothSocket.SocketState.ClosingState?10 -QtBluetooth.QBluetoothSocket.SocketState.ListeningState?10 -QtBluetooth.QBluetoothSocket?1(QBluetoothServiceInfo.Protocol, QObject parent=None) -QtBluetooth.QBluetoothSocket.__init__?1(self, QBluetoothServiceInfo.Protocol, QObject parent=None) -QtBluetooth.QBluetoothSocket?1(QObject parent=None) -QtBluetooth.QBluetoothSocket.__init__?1(self, QObject parent=None) -QtBluetooth.QBluetoothSocket.abort?4() -QtBluetooth.QBluetoothSocket.close?4() -QtBluetooth.QBluetoothSocket.isSequential?4() -> bool -QtBluetooth.QBluetoothSocket.bytesAvailable?4() -> int -QtBluetooth.QBluetoothSocket.bytesToWrite?4() -> int -QtBluetooth.QBluetoothSocket.canReadLine?4() -> bool -QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothAddress, QBluetoothUuid.ServiceClassUuid, unknown-type mode=QIODeviceBase.ReadWrite) -QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothAddress, int, unknown-type mode=QIODeviceBase.ReadWrite) -QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothAddress, QBluetoothUuid, unknown-type mode=QIODeviceBase.ReadWrite) -QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothServiceInfo, unknown-type mode=QIODeviceBase.ReadWrite) -QtBluetooth.QBluetoothSocket.disconnectFromService?4() -QtBluetooth.QBluetoothSocket.localName?4() -> QString -QtBluetooth.QBluetoothSocket.localAddress?4() -> QBluetoothAddress -QtBluetooth.QBluetoothSocket.localPort?4() -> int -QtBluetooth.QBluetoothSocket.peerName?4() -> QString -QtBluetooth.QBluetoothSocket.peerAddress?4() -> QBluetoothAddress -QtBluetooth.QBluetoothSocket.peerPort?4() -> int -QtBluetooth.QBluetoothSocket.setSocketDescriptor?4(int, QBluetoothServiceInfo.Protocol, QBluetoothSocket.SocketState state=QBluetoothSocket.SocketState.ConnectedState, unknown-type mode=QIODeviceBase.ReadWrite) -> bool -QtBluetooth.QBluetoothSocket.socketDescriptor?4() -> int -QtBluetooth.QBluetoothSocket.socketType?4() -> QBluetoothServiceInfo.Protocol -QtBluetooth.QBluetoothSocket.state?4() -> QBluetoothSocket.SocketState -QtBluetooth.QBluetoothSocket.error?4() -> QBluetoothSocket.SocketError -QtBluetooth.QBluetoothSocket.errorString?4() -> QString -QtBluetooth.QBluetoothSocket.connected?4() -QtBluetooth.QBluetoothSocket.disconnected?4() -QtBluetooth.QBluetoothSocket.errorOccurred?4(QBluetoothSocket.SocketError) -QtBluetooth.QBluetoothSocket.stateChanged?4(QBluetoothSocket.SocketState) -QtBluetooth.QBluetoothSocket.readData?4(int) -> Any -QtBluetooth.QBluetoothSocket.writeData?4(bytes) -> int -QtBluetooth.QBluetoothSocket.setSocketState?4(QBluetoothSocket.SocketState) -QtBluetooth.QBluetoothSocket.setSocketError?4(QBluetoothSocket.SocketError) -QtBluetooth.QBluetoothSocket.doDeviceDiscovery?4(QBluetoothServiceInfo, unknown-type) -QtBluetooth.QBluetoothSocket.setPreferredSecurityFlags?4(unknown-type) -QtBluetooth.QBluetoothSocket.preferredSecurityFlags?4() -> unknown-type -QtBluetooth.QBluetoothUuid.DescriptorType?10 -QtBluetooth.QBluetoothUuid.DescriptorType.UnknownDescriptorType?10 -QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicExtendedProperties?10 -QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicUserDescription?10 -QtBluetooth.QBluetoothUuid.DescriptorType.ClientCharacteristicConfiguration?10 -QtBluetooth.QBluetoothUuid.DescriptorType.ServerCharacteristicConfiguration?10 -QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicPresentationFormat?10 -QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicAggregateFormat?10 -QtBluetooth.QBluetoothUuid.DescriptorType.ValidRange?10 -QtBluetooth.QBluetoothUuid.DescriptorType.ExternalReportReference?10 -QtBluetooth.QBluetoothUuid.DescriptorType.ReportReference?10 -QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingConfiguration?10 -QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingMeasurement?10 -QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingTriggerSetting?10 -QtBluetooth.QBluetoothUuid.CharacteristicType?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DeviceName?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Appearance?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.PeripheralPrivacyFlag?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ReconnectionAddress?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.PeripheralPreferredConnectionParameters?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ServiceChanged?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AlertLevel?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TxPowerLevel?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DateTime?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DayOfWeek?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DayDateTime?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ExactTime256?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DSTOffset?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeZone?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.LocalTimeInformation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeWithDST?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeAccuracy?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeSource?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ReferenceTimeInformation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeUpdateControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TimeUpdateState?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BatteryLevel?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TemperatureMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TemperatureType?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.IntermediateTemperature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.MeasurementInterval?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BootKeyboardInputReport?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SystemID?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ModelNumberString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SerialNumberString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.FirmwareRevisionString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HardwareRevisionString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SoftwareRevisionString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ManufacturerNameString?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.IEEE1107320601RegulatoryCertificationDataList?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CurrentTime?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticDeclination?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ScanRefresh?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BootKeyboardOutputReport?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BootMouseInputReport?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseMeasurementContext?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BloodPressureMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.IntermediateCuffPressure?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BodySensorLocation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AlertStatus?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RingerControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RingerSetting?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AlertCategoryIDBitMask?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AlertCategoryID?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AlertNotificationControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.UnreadAlertStatus?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.NewAlert?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SupportedNewAlertCategory?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SupportedUnreadAlertCategory?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BloodPressureFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HIDInformation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ReportMap?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HIDControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Report?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ProtocolMode?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ScanIntervalWindow?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.PnPID?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RecordAccessControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RSCMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RSCFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SCControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CSCMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CSCFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SensorLocation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerVector?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.LocationAndSpeed?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Navigation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.PositionQuality?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.LNFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.LNControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Elevation?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Pressure?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Temperature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Humidity?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TrueWindSpeed?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TrueWindDirection?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ApparentWindSpeed?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ApparentWindDirection?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.GustFactor?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.PollenConcentration?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.UVIndex?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Irradiance?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Rainfall?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.WindChill?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HeatIndex?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DewPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DescriptorValueChanged?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicHeartRateLowerLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicThreshold?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Age?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicHeartRateLowerLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicHeartRateUpperLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicThreshold?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicHeartRateUpperLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DateOfBirth?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DateOfThresholdAssessment?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.EmailAddress?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.FatBurnHeartRateLowerLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.FatBurnHeartRateUpperLimit?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.FirstName?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.FiveZoneHeartRateLimits?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Gender?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateMax?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Height?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.HipCircumference?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.LastName?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.MaximumRecommendedHeartRate?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.RestingHeartRate?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.SportTypeForAerobicAnaerobicThresholds?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.ThreeZoneHeartRateLimits?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.TwoZoneHeartRateLimits?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.VO2Max?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.WaistCircumference?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Weight?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.DatabaseChangeIncrement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.UserIndex?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BodyCompositionFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BodyCompositionMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.WeightMeasurement?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.WeightScaleFeature?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.UserControlPoint?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticFluxDensity2D?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticFluxDensity3D?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.Language?10 -QtBluetooth.QBluetoothUuid.CharacteristicType.BarometricPressureTrend?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ServiceDiscoveryServer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BrowseGroupDescriptor?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PublicBrowseGroup?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.SerialPort?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.LANAccessUsingPPP?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.DialupNetworking?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.IrMCSync?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ObexObjectPush?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.OBEXFileTransfer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.IrMCSyncCommand?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Headset?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AudioSource?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AudioSink?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControlTarget?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AdvancedAudioDistribution?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControl?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControlController?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeadsetAG?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PANU?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.NAP?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GN?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.DirectPrinting?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReferencePrinting?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BasicImage?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingResponder?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingAutomaticArchive?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingReferenceObjects?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Handsfree?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HandsfreeAudioGateway?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.DirectPrintingReferenceObjectsService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReflectedUI?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BasicPrinting?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PrintingStatus?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HumanInterfaceDeviceService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HardcopyCableReplacement?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HCRPrint?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HCRScan?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.SIMAccess?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccessPCE?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccessPSE?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccess?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeadsetHS?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageAccessServer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageNotificationServer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageAccessProfile?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GNSS?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GNSSServer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Display3D?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Glasses3D?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Synchronization3D?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.MPSProfile?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.MPSService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PnPInformation?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericNetworking?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericFileTransfer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAudio?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericTelephony?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoSource?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoSink?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoDistribution?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDP?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDPSource?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDPSink?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAccess?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAttribute?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImmediateAlert?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.LinkLoss?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.TxPower?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.CurrentTimeService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReferenceTimeUpdateService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.NextDSTChangeService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.Glucose?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HealthThermometer?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.DeviceInformation?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeartRate?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhoneAlertStatusService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BatteryService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BloodPressure?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.AlertNotificationService?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.HumanInterfaceDevice?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ScanParameters?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.RunningSpeedAndCadence?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.CyclingSpeedAndCadence?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.CyclingPower?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.LocationAndNavigation?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.EnvironmentalSensing?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BodyComposition?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.UserData?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.WeightScale?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.BondManagement?10 -QtBluetooth.QBluetoothUuid.ServiceClassUuid.ContinuousGlucoseMonitoring?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Sdp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Udp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Rfcomm?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Tcp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.TcsBin?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.TcsAt?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Att?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Obex?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Ip?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Ftp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Http?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Wsp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Bnep?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Upnp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Hidp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyControlChannel?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyDataChannel?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyNotification?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Avctp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Avdtp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.Cmtp?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.UdiCPlain?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.McapControlChannel?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.McapDataChannel?10 -QtBluetooth.QBluetoothUuid.ProtocolUuid.L2cap?10 -QtBluetooth.QBluetoothUuid?1() -QtBluetooth.QBluetoothUuid.__init__?1(self) -QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.ProtocolUuid) -QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.ProtocolUuid) -QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.ServiceClassUuid) -QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.ServiceClassUuid) -QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.CharacteristicType) -QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.CharacteristicType) -QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.DescriptorType) -QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.DescriptorType) -QtBluetooth.QBluetoothUuid?1(int) -QtBluetooth.QBluetoothUuid.__init__?1(self, int) -QtBluetooth.QBluetoothUuid?1(quint128, QSysInfo.Endian order=QSysInfo.BigEndian) -QtBluetooth.QBluetoothUuid.__init__?1(self, quint128, QSysInfo.Endian order=QSysInfo.BigEndian) -QtBluetooth.QBluetoothUuid?1(QString) -QtBluetooth.QBluetoothUuid.__init__?1(self, QString) -QtBluetooth.QBluetoothUuid?1(QBluetoothUuid) -QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid) -QtBluetooth.QBluetoothUuid?1(QUuid) -QtBluetooth.QBluetoothUuid.__init__?1(self, QUuid) -QtBluetooth.QBluetoothUuid.minimumSize?4() -> int -QtBluetooth.QBluetoothUuid.toUInt16?4() -> (int, bool) -QtBluetooth.QBluetoothUuid.toUInt32?4() -> (int, bool) -QtBluetooth.QBluetoothUuid.toUInt128?4() -> quint128 -QtBluetooth.QBluetoothUuid.serviceClassToString?4(QBluetoothUuid.ServiceClassUuid) -> QString -QtBluetooth.QBluetoothUuid.protocolToString?4(QBluetoothUuid.ProtocolUuid) -> QString -QtBluetooth.QBluetoothUuid.characteristicToString?4(QBluetoothUuid.CharacteristicType) -> QString -QtBluetooth.QBluetoothUuid.descriptorToString?4(QBluetoothUuid.DescriptorType) -> QString -QtBluetooth.QLowEnergyAdvertisingData.Discoverability?10 -QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityNone?10 -QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityLimited?10 -QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityGeneral?10 -QtBluetooth.QLowEnergyAdvertisingData?1() -QtBluetooth.QLowEnergyAdvertisingData.__init__?1(self) -QtBluetooth.QLowEnergyAdvertisingData?1(QLowEnergyAdvertisingData) -QtBluetooth.QLowEnergyAdvertisingData.__init__?1(self, QLowEnergyAdvertisingData) -QtBluetooth.QLowEnergyAdvertisingData.setLocalName?4(QString) -QtBluetooth.QLowEnergyAdvertisingData.localName?4() -> QString -QtBluetooth.QLowEnergyAdvertisingData.invalidManufacturerId?4() -> int -QtBluetooth.QLowEnergyAdvertisingData.setManufacturerData?4(int, QByteArray) -QtBluetooth.QLowEnergyAdvertisingData.manufacturerId?4() -> int -QtBluetooth.QLowEnergyAdvertisingData.manufacturerData?4() -> QByteArray -QtBluetooth.QLowEnergyAdvertisingData.setIncludePowerLevel?4(bool) -QtBluetooth.QLowEnergyAdvertisingData.includePowerLevel?4() -> bool -QtBluetooth.QLowEnergyAdvertisingData.setDiscoverability?4(QLowEnergyAdvertisingData.Discoverability) -QtBluetooth.QLowEnergyAdvertisingData.discoverability?4() -> QLowEnergyAdvertisingData.Discoverability -QtBluetooth.QLowEnergyAdvertisingData.setServices?4(unknown-type) -QtBluetooth.QLowEnergyAdvertisingData.services?4() -> unknown-type -QtBluetooth.QLowEnergyAdvertisingData.setRawData?4(QByteArray) -QtBluetooth.QLowEnergyAdvertisingData.rawData?4() -> QByteArray -QtBluetooth.QLowEnergyAdvertisingData.swap?4(QLowEnergyAdvertisingData) -QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy?10 -QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.IgnoreWhiteList?10 -QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForScanning?10 -QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForConnecting?10 -QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForScanningAndConnecting?10 -QtBluetooth.QLowEnergyAdvertisingParameters.Mode?10 -QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvInd?10 -QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvScanInd?10 -QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvNonConnInd?10 -QtBluetooth.QLowEnergyAdvertisingParameters?1() -QtBluetooth.QLowEnergyAdvertisingParameters.__init__?1(self) -QtBluetooth.QLowEnergyAdvertisingParameters?1(QLowEnergyAdvertisingParameters) -QtBluetooth.QLowEnergyAdvertisingParameters.__init__?1(self, QLowEnergyAdvertisingParameters) -QtBluetooth.QLowEnergyAdvertisingParameters.setMode?4(QLowEnergyAdvertisingParameters.Mode) -QtBluetooth.QLowEnergyAdvertisingParameters.mode?4() -> QLowEnergyAdvertisingParameters.Mode -QtBluetooth.QLowEnergyAdvertisingParameters.setWhiteList?4(unknown-type, QLowEnergyAdvertisingParameters.FilterPolicy) -QtBluetooth.QLowEnergyAdvertisingParameters.whiteList?4() -> unknown-type -QtBluetooth.QLowEnergyAdvertisingParameters.filterPolicy?4() -> QLowEnergyAdvertisingParameters.FilterPolicy -QtBluetooth.QLowEnergyAdvertisingParameters.setInterval?4(int, int) -QtBluetooth.QLowEnergyAdvertisingParameters.minimumInterval?4() -> int -QtBluetooth.QLowEnergyAdvertisingParameters.maximumInterval?4() -> int -QtBluetooth.QLowEnergyAdvertisingParameters.swap?4(QLowEnergyAdvertisingParameters) -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.address?7 -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.type?7 -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1(QBluetoothAddress, QLowEnergyController.RemoteAddressType) -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self, QBluetoothAddress, QLowEnergyController.RemoteAddressType) -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1() -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self) -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1(QLowEnergyAdvertisingParameters.AddressInfo) -QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self, QLowEnergyAdvertisingParameters.AddressInfo) -QtBluetooth.QLowEnergyCharacteristic.PropertyType?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Unknown?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Broadcasting?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Read?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.WriteNoResponse?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Write?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Notify?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.Indicate?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.WriteSigned?10 -QtBluetooth.QLowEnergyCharacteristic.PropertyType.ExtendedProperty?10 -QtBluetooth.QLowEnergyCharacteristic.CCCDDisable?7 -QtBluetooth.QLowEnergyCharacteristic.CCCDEnableIndication?7 -QtBluetooth.QLowEnergyCharacteristic.CCCDEnableNotification?7 -QtBluetooth.QLowEnergyCharacteristic?1() -QtBluetooth.QLowEnergyCharacteristic.__init__?1(self) -QtBluetooth.QLowEnergyCharacteristic?1(QLowEnergyCharacteristic) -QtBluetooth.QLowEnergyCharacteristic.__init__?1(self, QLowEnergyCharacteristic) -QtBluetooth.QLowEnergyCharacteristic.name?4() -> QString -QtBluetooth.QLowEnergyCharacteristic.uuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyCharacteristic.value?4() -> QByteArray -QtBluetooth.QLowEnergyCharacteristic.properties?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristic.descriptor?4(QBluetoothUuid) -> QLowEnergyDescriptor -QtBluetooth.QLowEnergyCharacteristic.descriptors?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristic.isValid?4() -> bool -QtBluetooth.QLowEnergyCharacteristic.clientCharacteristicConfiguration?4() -> QLowEnergyDescriptor -QtBluetooth.QLowEnergyCharacteristicData?1() -QtBluetooth.QLowEnergyCharacteristicData.__init__?1(self) -QtBluetooth.QLowEnergyCharacteristicData?1(QLowEnergyCharacteristicData) -QtBluetooth.QLowEnergyCharacteristicData.__init__?1(self, QLowEnergyCharacteristicData) -QtBluetooth.QLowEnergyCharacteristicData.uuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyCharacteristicData.setUuid?4(QBluetoothUuid) -QtBluetooth.QLowEnergyCharacteristicData.value?4() -> QByteArray -QtBluetooth.QLowEnergyCharacteristicData.setValue?4(QByteArray) -QtBluetooth.QLowEnergyCharacteristicData.properties?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristicData.setProperties?4(unknown-type) -QtBluetooth.QLowEnergyCharacteristicData.descriptors?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristicData.setDescriptors?4(unknown-type) -QtBluetooth.QLowEnergyCharacteristicData.addDescriptor?4(QLowEnergyDescriptorData) -QtBluetooth.QLowEnergyCharacteristicData.setReadConstraints?4(unknown-type) -QtBluetooth.QLowEnergyCharacteristicData.readConstraints?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristicData.setWriteConstraints?4(unknown-type) -QtBluetooth.QLowEnergyCharacteristicData.writeConstraints?4() -> unknown-type -QtBluetooth.QLowEnergyCharacteristicData.setValueLength?4(int, int) -QtBluetooth.QLowEnergyCharacteristicData.minimumValueLength?4() -> int -QtBluetooth.QLowEnergyCharacteristicData.maximumValueLength?4() -> int -QtBluetooth.QLowEnergyCharacteristicData.isValid?4() -> bool -QtBluetooth.QLowEnergyCharacteristicData.swap?4(QLowEnergyCharacteristicData) -QtBluetooth.QLowEnergyConnectionParameters?1() -QtBluetooth.QLowEnergyConnectionParameters.__init__?1(self) -QtBluetooth.QLowEnergyConnectionParameters?1(QLowEnergyConnectionParameters) -QtBluetooth.QLowEnergyConnectionParameters.__init__?1(self, QLowEnergyConnectionParameters) -QtBluetooth.QLowEnergyConnectionParameters.setIntervalRange?4(float, float) -QtBluetooth.QLowEnergyConnectionParameters.minimumInterval?4() -> float -QtBluetooth.QLowEnergyConnectionParameters.maximumInterval?4() -> float -QtBluetooth.QLowEnergyConnectionParameters.setLatency?4(int) -QtBluetooth.QLowEnergyConnectionParameters.latency?4() -> int -QtBluetooth.QLowEnergyConnectionParameters.setSupervisionTimeout?4(int) -QtBluetooth.QLowEnergyConnectionParameters.supervisionTimeout?4() -> int -QtBluetooth.QLowEnergyConnectionParameters.swap?4(QLowEnergyConnectionParameters) -QtBluetooth.QLowEnergyController.Role?10 -QtBluetooth.QLowEnergyController.Role.CentralRole?10 -QtBluetooth.QLowEnergyController.Role.PeripheralRole?10 -QtBluetooth.QLowEnergyController.RemoteAddressType?10 -QtBluetooth.QLowEnergyController.RemoteAddressType.PublicAddress?10 -QtBluetooth.QLowEnergyController.RemoteAddressType.RandomAddress?10 -QtBluetooth.QLowEnergyController.ControllerState?10 -QtBluetooth.QLowEnergyController.ControllerState.UnconnectedState?10 -QtBluetooth.QLowEnergyController.ControllerState.ConnectingState?10 -QtBluetooth.QLowEnergyController.ControllerState.ConnectedState?10 -QtBluetooth.QLowEnergyController.ControllerState.DiscoveringState?10 -QtBluetooth.QLowEnergyController.ControllerState.DiscoveredState?10 -QtBluetooth.QLowEnergyController.ControllerState.ClosingState?10 -QtBluetooth.QLowEnergyController.ControllerState.AdvertisingState?10 -QtBluetooth.QLowEnergyController.Error?10 -QtBluetooth.QLowEnergyController.Error.NoError?10 -QtBluetooth.QLowEnergyController.Error.UnknownError?10 -QtBluetooth.QLowEnergyController.Error.UnknownRemoteDeviceError?10 -QtBluetooth.QLowEnergyController.Error.NetworkError?10 -QtBluetooth.QLowEnergyController.Error.InvalidBluetoothAdapterError?10 -QtBluetooth.QLowEnergyController.Error.ConnectionError?10 -QtBluetooth.QLowEnergyController.Error.AdvertisingError?10 -QtBluetooth.QLowEnergyController.Error.RemoteHostClosedError?10 -QtBluetooth.QLowEnergyController.Error.AuthorizationError?10 -QtBluetooth.QLowEnergyController.Error.MissingPermissionsError?10 -QtBluetooth.QLowEnergyController.Error.RssiReadError?10 -QtBluetooth.QLowEnergyController.localAddress?4() -> QBluetoothAddress -QtBluetooth.QLowEnergyController.remoteAddress?4() -> QBluetoothAddress -QtBluetooth.QLowEnergyController.state?4() -> QLowEnergyController.ControllerState -QtBluetooth.QLowEnergyController.remoteAddressType?4() -> QLowEnergyController.RemoteAddressType -QtBluetooth.QLowEnergyController.setRemoteAddressType?4(QLowEnergyController.RemoteAddressType) -QtBluetooth.QLowEnergyController.connectToDevice?4() -QtBluetooth.QLowEnergyController.disconnectFromDevice?4() -QtBluetooth.QLowEnergyController.discoverServices?4() -QtBluetooth.QLowEnergyController.services?4() -> unknown-type -QtBluetooth.QLowEnergyController.createServiceObject?4(QBluetoothUuid, QObject parent=None) -> QLowEnergyService -QtBluetooth.QLowEnergyController.error?4() -> QLowEnergyController.Error -QtBluetooth.QLowEnergyController.errorString?4() -> QString -QtBluetooth.QLowEnergyController.remoteName?4() -> QString -QtBluetooth.QLowEnergyController.mtu?4() -> int -QtBluetooth.QLowEnergyController.connected?4() -QtBluetooth.QLowEnergyController.disconnected?4() -QtBluetooth.QLowEnergyController.stateChanged?4(QLowEnergyController.ControllerState) -QtBluetooth.QLowEnergyController.errorOccurred?4(QLowEnergyController.Error) -QtBluetooth.QLowEnergyController.serviceDiscovered?4(QBluetoothUuid) -QtBluetooth.QLowEnergyController.discoveryFinished?4() -QtBluetooth.QLowEnergyController.connectionUpdated?4(QLowEnergyConnectionParameters) -QtBluetooth.QLowEnergyController.mtuChanged?4(int) -QtBluetooth.QLowEnergyController.createCentral?4(QBluetoothDeviceInfo, QObject parent=None) -> QLowEnergyController -QtBluetooth.QLowEnergyController.createCentral?4(QBluetoothDeviceInfo, QBluetoothAddress, QObject parent=None) -> QLowEnergyController -QtBluetooth.QLowEnergyController.createPeripheral?4(QBluetoothAddress, QObject parent=None) -> QLowEnergyController -QtBluetooth.QLowEnergyController.createPeripheral?4(QObject parent=None) -> QLowEnergyController -QtBluetooth.QLowEnergyController.startAdvertising?4(QLowEnergyAdvertisingParameters, QLowEnergyAdvertisingData, QLowEnergyAdvertisingData scanResponseData=QLowEnergyAdvertisingData()) -QtBluetooth.QLowEnergyController.stopAdvertising?4() -QtBluetooth.QLowEnergyController.addService?4(QLowEnergyServiceData, QObject parent=None) -> QLowEnergyService -QtBluetooth.QLowEnergyController.requestConnectionUpdate?4(QLowEnergyConnectionParameters) -QtBluetooth.QLowEnergyController.role?4() -> QLowEnergyController.Role -QtBluetooth.QLowEnergyController.remoteDeviceUuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyController.readRssi?4() -QtBluetooth.QLowEnergyController.rssiRead?4(int) -QtBluetooth.QLowEnergyDescriptor?1() -QtBluetooth.QLowEnergyDescriptor.__init__?1(self) -QtBluetooth.QLowEnergyDescriptor?1(QLowEnergyDescriptor) -QtBluetooth.QLowEnergyDescriptor.__init__?1(self, QLowEnergyDescriptor) -QtBluetooth.QLowEnergyDescriptor.isValid?4() -> bool -QtBluetooth.QLowEnergyDescriptor.value?4() -> QByteArray -QtBluetooth.QLowEnergyDescriptor.uuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyDescriptor.name?4() -> QString -QtBluetooth.QLowEnergyDescriptor.type?4() -> QBluetoothUuid.DescriptorType -QtBluetooth.QLowEnergyDescriptorData?1() -QtBluetooth.QLowEnergyDescriptorData.__init__?1(self) -QtBluetooth.QLowEnergyDescriptorData?1(QBluetoothUuid, QByteArray) -QtBluetooth.QLowEnergyDescriptorData.__init__?1(self, QBluetoothUuid, QByteArray) -QtBluetooth.QLowEnergyDescriptorData?1(QLowEnergyDescriptorData) -QtBluetooth.QLowEnergyDescriptorData.__init__?1(self, QLowEnergyDescriptorData) -QtBluetooth.QLowEnergyDescriptorData.value?4() -> QByteArray -QtBluetooth.QLowEnergyDescriptorData.setValue?4(QByteArray) -QtBluetooth.QLowEnergyDescriptorData.uuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyDescriptorData.setUuid?4(QBluetoothUuid) -QtBluetooth.QLowEnergyDescriptorData.isValid?4() -> bool -QtBluetooth.QLowEnergyDescriptorData.setReadPermissions?4(bool, unknown-type constraints=QBluetooth.AttAccessConstraints()) -QtBluetooth.QLowEnergyDescriptorData.isReadable?4() -> bool -QtBluetooth.QLowEnergyDescriptorData.readConstraints?4() -> unknown-type -QtBluetooth.QLowEnergyDescriptorData.setWritePermissions?4(bool, unknown-type constraints=QBluetooth.AttAccessConstraints()) -QtBluetooth.QLowEnergyDescriptorData.isWritable?4() -> bool -QtBluetooth.QLowEnergyDescriptorData.writeConstraints?4() -> unknown-type -QtBluetooth.QLowEnergyDescriptorData.swap?4(QLowEnergyDescriptorData) -QtBluetooth.QLowEnergyService.WriteMode?10 -QtBluetooth.QLowEnergyService.WriteMode.WriteWithResponse?10 -QtBluetooth.QLowEnergyService.WriteMode.WriteWithoutResponse?10 -QtBluetooth.QLowEnergyService.WriteMode.WriteSigned?10 -QtBluetooth.QLowEnergyService.ServiceState?10 -QtBluetooth.QLowEnergyService.ServiceState.InvalidService?10 -QtBluetooth.QLowEnergyService.ServiceState.DiscoveryRequired?10 -QtBluetooth.QLowEnergyService.ServiceState.ServiceDiscovered?10 -QtBluetooth.QLowEnergyService.ServiceState.LocalService?10 -QtBluetooth.QLowEnergyService.ServiceState.RemoteService?10 -QtBluetooth.QLowEnergyService.ServiceState.RemoteServiceDiscovering?10 -QtBluetooth.QLowEnergyService.ServiceState.RemoteServiceDiscovered?10 -QtBluetooth.QLowEnergyService.ServiceState.DiscoveringService?10 -QtBluetooth.QLowEnergyService.ServiceError?10 -QtBluetooth.QLowEnergyService.ServiceError.NoError?10 -QtBluetooth.QLowEnergyService.ServiceError.OperationError?10 -QtBluetooth.QLowEnergyService.ServiceError.CharacteristicWriteError?10 -QtBluetooth.QLowEnergyService.ServiceError.DescriptorWriteError?10 -QtBluetooth.QLowEnergyService.ServiceError.CharacteristicReadError?10 -QtBluetooth.QLowEnergyService.ServiceError.DescriptorReadError?10 -QtBluetooth.QLowEnergyService.ServiceError.UnknownError?10 -QtBluetooth.QLowEnergyService.ServiceType?10 -QtBluetooth.QLowEnergyService.ServiceType.PrimaryService?10 -QtBluetooth.QLowEnergyService.ServiceType.IncludedService?10 -QtBluetooth.QLowEnergyService.DiscoveryMode?10 -QtBluetooth.QLowEnergyService.DiscoveryMode.FullDiscovery?10 -QtBluetooth.QLowEnergyService.DiscoveryMode.SkipValueDiscovery?10 -QtBluetooth.QLowEnergyService.includedServices?4() -> unknown-type -QtBluetooth.QLowEnergyService.type?4() -> unknown-type -QtBluetooth.QLowEnergyService.state?4() -> QLowEnergyService.ServiceState -QtBluetooth.QLowEnergyService.characteristic?4(QBluetoothUuid) -> QLowEnergyCharacteristic -QtBluetooth.QLowEnergyService.characteristics?4() -> unknown-type -QtBluetooth.QLowEnergyService.serviceUuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyService.serviceName?4() -> QString -QtBluetooth.QLowEnergyService.discoverDetails?4(QLowEnergyService.DiscoveryMode mode=QLowEnergyService.FullDiscovery) -QtBluetooth.QLowEnergyService.error?4() -> QLowEnergyService.ServiceError -QtBluetooth.QLowEnergyService.contains?4(QLowEnergyCharacteristic) -> bool -QtBluetooth.QLowEnergyService.contains?4(QLowEnergyDescriptor) -> bool -QtBluetooth.QLowEnergyService.writeCharacteristic?4(QLowEnergyCharacteristic, QByteArray, QLowEnergyService.WriteMode mode=QLowEnergyService.WriteWithResponse) -QtBluetooth.QLowEnergyService.writeDescriptor?4(QLowEnergyDescriptor, QByteArray) -QtBluetooth.QLowEnergyService.stateChanged?4(QLowEnergyService.ServiceState) -QtBluetooth.QLowEnergyService.characteristicChanged?4(QLowEnergyCharacteristic, QByteArray) -QtBluetooth.QLowEnergyService.characteristicWritten?4(QLowEnergyCharacteristic, QByteArray) -QtBluetooth.QLowEnergyService.descriptorWritten?4(QLowEnergyDescriptor, QByteArray) -QtBluetooth.QLowEnergyService.errorOccurred?4(QLowEnergyService.ServiceError) -QtBluetooth.QLowEnergyService.readCharacteristic?4(QLowEnergyCharacteristic) -QtBluetooth.QLowEnergyService.readDescriptor?4(QLowEnergyDescriptor) -QtBluetooth.QLowEnergyService.characteristicRead?4(QLowEnergyCharacteristic, QByteArray) -QtBluetooth.QLowEnergyService.descriptorRead?4(QLowEnergyDescriptor, QByteArray) -QtBluetooth.QLowEnergyServiceData.ServiceType?10 -QtBluetooth.QLowEnergyServiceData.ServiceType.ServiceTypePrimary?10 -QtBluetooth.QLowEnergyServiceData.ServiceType.ServiceTypeSecondary?10 -QtBluetooth.QLowEnergyServiceData?1() -QtBluetooth.QLowEnergyServiceData.__init__?1(self) -QtBluetooth.QLowEnergyServiceData?1(QLowEnergyServiceData) -QtBluetooth.QLowEnergyServiceData.__init__?1(self, QLowEnergyServiceData) -QtBluetooth.QLowEnergyServiceData.type?4() -> QLowEnergyServiceData.ServiceType -QtBluetooth.QLowEnergyServiceData.setType?4(QLowEnergyServiceData.ServiceType) -QtBluetooth.QLowEnergyServiceData.uuid?4() -> QBluetoothUuid -QtBluetooth.QLowEnergyServiceData.setUuid?4(QBluetoothUuid) -QtBluetooth.QLowEnergyServiceData.includedServices?4() -> unknown-type -QtBluetooth.QLowEnergyServiceData.setIncludedServices?4(unknown-type) -QtBluetooth.QLowEnergyServiceData.addIncludedService?4(QLowEnergyService) -QtBluetooth.QLowEnergyServiceData.characteristics?4() -> unknown-type -QtBluetooth.QLowEnergyServiceData.setCharacteristics?4(unknown-type) -QtBluetooth.QLowEnergyServiceData.addCharacteristic?4(QLowEnergyCharacteristicData) -QtBluetooth.QLowEnergyServiceData.isValid?4() -> bool -QtBluetooth.QLowEnergyServiceData.swap?4(QLowEnergyServiceData) -QtNfc.QNdefFilter?1() -QtNfc.QNdefFilter.__init__?1(self) -QtNfc.QNdefFilter?1(QNdefFilter) -QtNfc.QNdefFilter.__init__?1(self, QNdefFilter) -QtNfc.QNdefFilter.clear?4() -QtNfc.QNdefFilter.setOrderMatch?4(bool) -QtNfc.QNdefFilter.orderMatch?4() -> bool -QtNfc.QNdefFilter.appendRecord?4(QNdefFilter.Record) -> bool -QtNfc.QNdefFilter.appendRecord?4(QNdefRecord.TypeNameFormat, QByteArray, int min=1, int max=1) -> bool -QtNfc.QNdefFilter.recordCount?4() -> int -QtNfc.QNdefFilter.recordAt?4(int) -> QNdefFilter.Record -QtNfc.QNdefFilter.match?4(QNdefMessage) -> bool -QtNfc.QNdefFilter.Record.maximum?7 -QtNfc.QNdefFilter.Record.minimum?7 -QtNfc.QNdefFilter.Record.type?7 -QtNfc.QNdefFilter.Record.typeNameFormat?7 -QtNfc.QNdefFilter.Record?1() -QtNfc.QNdefFilter.Record.__init__?1(self) -QtNfc.QNdefFilter.Record?1(QNdefFilter.Record) -QtNfc.QNdefFilter.Record.__init__?1(self, QNdefFilter.Record) -QtNfc.QNdefMessage?1() -QtNfc.QNdefMessage.__init__?1(self) -QtNfc.QNdefMessage?1(QNdefRecord) -QtNfc.QNdefMessage.__init__?1(self, QNdefRecord) -QtNfc.QNdefMessage?1(QNdefMessage) -QtNfc.QNdefMessage.__init__?1(self, QNdefMessage) -QtNfc.QNdefMessage?1(unknown-type) -QtNfc.QNdefMessage.__init__?1(self, unknown-type) -QtNfc.QNdefMessage.toByteArray?4() -> QByteArray -QtNfc.QNdefMessage.fromByteArray?4(QByteArray) -> QNdefMessage -QtNfc.QNdefRecord.TypeNameFormat?10 -QtNfc.QNdefRecord.TypeNameFormat.Empty?10 -QtNfc.QNdefRecord.TypeNameFormat.NfcRtd?10 -QtNfc.QNdefRecord.TypeNameFormat.Mime?10 -QtNfc.QNdefRecord.TypeNameFormat.Uri?10 -QtNfc.QNdefRecord.TypeNameFormat.ExternalRtd?10 -QtNfc.QNdefRecord.TypeNameFormat.Unknown?10 -QtNfc.QNdefRecord?1() -QtNfc.QNdefRecord.__init__?1(self) -QtNfc.QNdefRecord?1(QNdefRecord) -QtNfc.QNdefRecord.__init__?1(self, QNdefRecord) -QtNfc.QNdefRecord.setTypeNameFormat?4(QNdefRecord.TypeNameFormat) -QtNfc.QNdefRecord.typeNameFormat?4() -> QNdefRecord.TypeNameFormat -QtNfc.QNdefRecord.setType?4(QByteArray) -QtNfc.QNdefRecord.type?4() -> QByteArray -QtNfc.QNdefRecord.setId?4(QByteArray) -QtNfc.QNdefRecord.id?4() -> QByteArray -QtNfc.QNdefRecord.setPayload?4(QByteArray) -QtNfc.QNdefRecord.payload?4() -> QByteArray -QtNfc.QNdefRecord.isEmpty?4() -> bool -QtNfc.QNdefRecord.clear?4() -QtNfc.QNdefNfcIconRecord?1() -QtNfc.QNdefNfcIconRecord.__init__?1(self) -QtNfc.QNdefNfcIconRecord?1(QNdefRecord) -QtNfc.QNdefNfcIconRecord.__init__?1(self, QNdefRecord) -QtNfc.QNdefNfcIconRecord?1(QNdefNfcIconRecord) -QtNfc.QNdefNfcIconRecord.__init__?1(self, QNdefNfcIconRecord) -QtNfc.QNdefNfcIconRecord.setData?4(QByteArray) -QtNfc.QNdefNfcIconRecord.data?4() -> QByteArray -QtNfc.QNdefNfcSmartPosterRecord.Action?10 -QtNfc.QNdefNfcSmartPosterRecord.Action.UnspecifiedAction?10 -QtNfc.QNdefNfcSmartPosterRecord.Action.DoAction?10 -QtNfc.QNdefNfcSmartPosterRecord.Action.SaveAction?10 -QtNfc.QNdefNfcSmartPosterRecord.Action.EditAction?10 -QtNfc.QNdefNfcSmartPosterRecord?1() -QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self) -QtNfc.QNdefNfcSmartPosterRecord?1(QNdefNfcSmartPosterRecord) -QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self, QNdefNfcSmartPosterRecord) -QtNfc.QNdefNfcSmartPosterRecord?1(QNdefRecord) -QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self, QNdefRecord) -QtNfc.QNdefNfcSmartPosterRecord.setPayload?4(QByteArray) -QtNfc.QNdefNfcSmartPosterRecord.hasTitle?4(QString locale='') -> bool -QtNfc.QNdefNfcSmartPosterRecord.hasAction?4() -> bool -QtNfc.QNdefNfcSmartPosterRecord.hasIcon?4(QByteArray mimetype=QByteArray()) -> bool -QtNfc.QNdefNfcSmartPosterRecord.hasSize?4() -> bool -QtNfc.QNdefNfcSmartPosterRecord.hasTypeInfo?4() -> bool -QtNfc.QNdefNfcSmartPosterRecord.titleCount?4() -> int -QtNfc.QNdefNfcSmartPosterRecord.title?4(QString locale='') -> QString -QtNfc.QNdefNfcSmartPosterRecord.titleRecord?4(int) -> QNdefNfcTextRecord -QtNfc.QNdefNfcSmartPosterRecord.titleRecords?4() -> unknown-type -QtNfc.QNdefNfcSmartPosterRecord.addTitle?4(QNdefNfcTextRecord) -> bool -QtNfc.QNdefNfcSmartPosterRecord.addTitle?4(QString, QString, QNdefNfcTextRecord.Encoding) -> bool -QtNfc.QNdefNfcSmartPosterRecord.removeTitle?4(QNdefNfcTextRecord) -> bool -QtNfc.QNdefNfcSmartPosterRecord.removeTitle?4(QString) -> bool -QtNfc.QNdefNfcSmartPosterRecord.setTitles?4(unknown-type) -QtNfc.QNdefNfcSmartPosterRecord.uri?4() -> QUrl -QtNfc.QNdefNfcSmartPosterRecord.uriRecord?4() -> QNdefNfcUriRecord -QtNfc.QNdefNfcSmartPosterRecord.setUri?4(QNdefNfcUriRecord) -QtNfc.QNdefNfcSmartPosterRecord.setUri?4(QUrl) -QtNfc.QNdefNfcSmartPosterRecord.action?4() -> QNdefNfcSmartPosterRecord.Action -QtNfc.QNdefNfcSmartPosterRecord.setAction?4(QNdefNfcSmartPosterRecord.Action) -QtNfc.QNdefNfcSmartPosterRecord.iconCount?4() -> int -QtNfc.QNdefNfcSmartPosterRecord.icon?4(QByteArray mimetype=QByteArray()) -> QByteArray -QtNfc.QNdefNfcSmartPosterRecord.iconRecord?4(int) -> QNdefNfcIconRecord -QtNfc.QNdefNfcSmartPosterRecord.iconRecords?4() -> unknown-type -QtNfc.QNdefNfcSmartPosterRecord.addIcon?4(QNdefNfcIconRecord) -QtNfc.QNdefNfcSmartPosterRecord.addIcon?4(QByteArray, QByteArray) -QtNfc.QNdefNfcSmartPosterRecord.removeIcon?4(QNdefNfcIconRecord) -> bool -QtNfc.QNdefNfcSmartPosterRecord.removeIcon?4(QByteArray) -> bool -QtNfc.QNdefNfcSmartPosterRecord.setIcons?4(unknown-type) -QtNfc.QNdefNfcSmartPosterRecord.size?4() -> int -QtNfc.QNdefNfcSmartPosterRecord.setSize?4(int) -QtNfc.QNdefNfcSmartPosterRecord.typeInfo?4() -> QString -QtNfc.QNdefNfcSmartPosterRecord.setTypeInfo?4(QString) -QtNfc.QNdefNfcTextRecord.Encoding?10 -QtNfc.QNdefNfcTextRecord.Encoding.Utf8?10 -QtNfc.QNdefNfcTextRecord.Encoding.Utf16?10 -QtNfc.QNdefNfcTextRecord?1() -QtNfc.QNdefNfcTextRecord.__init__?1(self) -QtNfc.QNdefNfcTextRecord?1(QNdefRecord) -QtNfc.QNdefNfcTextRecord.__init__?1(self, QNdefRecord) -QtNfc.QNdefNfcTextRecord?1(QNdefNfcTextRecord) -QtNfc.QNdefNfcTextRecord.__init__?1(self, QNdefNfcTextRecord) -QtNfc.QNdefNfcTextRecord.locale?4() -> QString -QtNfc.QNdefNfcTextRecord.setLocale?4(QString) -QtNfc.QNdefNfcTextRecord.text?4() -> QString -QtNfc.QNdefNfcTextRecord.setText?4(QString) -QtNfc.QNdefNfcTextRecord.encoding?4() -> QNdefNfcTextRecord.Encoding -QtNfc.QNdefNfcTextRecord.setEncoding?4(QNdefNfcTextRecord.Encoding) -QtNfc.QNdefNfcUriRecord?1() -QtNfc.QNdefNfcUriRecord.__init__?1(self) -QtNfc.QNdefNfcUriRecord?1(QNdefRecord) -QtNfc.QNdefNfcUriRecord.__init__?1(self, QNdefRecord) -QtNfc.QNdefNfcUriRecord?1(QNdefNfcUriRecord) -QtNfc.QNdefNfcUriRecord.__init__?1(self, QNdefNfcUriRecord) -QtNfc.QNdefNfcUriRecord.uri?4() -> QUrl -QtNfc.QNdefNfcUriRecord.setUri?4(QUrl) -QtNfc.QNearFieldManager.AdapterState?10 -QtNfc.QNearFieldManager.AdapterState.Offline?10 -QtNfc.QNearFieldManager.AdapterState.TurningOn?10 -QtNfc.QNearFieldManager.AdapterState.Online?10 -QtNfc.QNearFieldManager.AdapterState.TurningOff?10 -QtNfc.QNearFieldManager?1(QObject parent=None) -QtNfc.QNearFieldManager.__init__?1(self, QObject parent=None) -QtNfc.QNearFieldManager.startTargetDetection?4(QNearFieldTarget.AccessMethod) -> bool -QtNfc.QNearFieldManager.stopTargetDetection?4(QString errorMessage='') -QtNfc.QNearFieldManager.targetDetected?4(QNearFieldTarget) -QtNfc.QNearFieldManager.targetLost?4(QNearFieldTarget) -QtNfc.QNearFieldManager.targetDetectionStopped?4() -QtNfc.QNearFieldManager.isSupported?4(QNearFieldTarget.AccessMethod accessMethod=QNearFieldTarget.AnyAccess) -> bool -QtNfc.QNearFieldManager.adapterStateChanged?4(QNearFieldManager.AdapterState) -QtNfc.QNearFieldManager.isEnabled?4() -> bool -QtNfc.QNearFieldManager.setUserInformation?4(QString) -QtNfc.QNearFieldTarget.Error?10 -QtNfc.QNearFieldTarget.Error.NoError?10 -QtNfc.QNearFieldTarget.Error.UnknownError?10 -QtNfc.QNearFieldTarget.Error.UnsupportedError?10 -QtNfc.QNearFieldTarget.Error.TargetOutOfRangeError?10 -QtNfc.QNearFieldTarget.Error.NoResponseError?10 -QtNfc.QNearFieldTarget.Error.ChecksumMismatchError?10 -QtNfc.QNearFieldTarget.Error.InvalidParametersError?10 -QtNfc.QNearFieldTarget.Error.NdefReadError?10 -QtNfc.QNearFieldTarget.Error.NdefWriteError?10 -QtNfc.QNearFieldTarget.Error.CommandError?10 -QtNfc.QNearFieldTarget.Error.ConnectionError?10 -QtNfc.QNearFieldTarget.Error.TimeoutError?10 -QtNfc.QNearFieldTarget.AccessMethod?10 -QtNfc.QNearFieldTarget.AccessMethod.UnknownAccess?10 -QtNfc.QNearFieldTarget.AccessMethod.NdefAccess?10 -QtNfc.QNearFieldTarget.AccessMethod.TagTypeSpecificAccess?10 -QtNfc.QNearFieldTarget.AccessMethod.AnyAccess?10 -QtNfc.QNearFieldTarget.Type?10 -QtNfc.QNearFieldTarget.Type.ProprietaryTag?10 -QtNfc.QNearFieldTarget.Type.NfcTagType1?10 -QtNfc.QNearFieldTarget.Type.NfcTagType2?10 -QtNfc.QNearFieldTarget.Type.NfcTagType3?10 -QtNfc.QNearFieldTarget.Type.NfcTagType4?10 -QtNfc.QNearFieldTarget.Type.NfcTagType4A?10 -QtNfc.QNearFieldTarget.Type.NfcTagType4B?10 -QtNfc.QNearFieldTarget.Type.MifareTag?10 -QtNfc.QNearFieldTarget?1(QObject parent=None) -QtNfc.QNearFieldTarget.__init__?1(self, QObject parent=None) -QtNfc.QNearFieldTarget.uid?4() -> QByteArray -QtNfc.QNearFieldTarget.type?4() -> QNearFieldTarget.Type -QtNfc.QNearFieldTarget.accessMethods?4() -> unknown-type -QtNfc.QNearFieldTarget.hasNdefMessage?4() -> bool -QtNfc.QNearFieldTarget.readNdefMessages?4() -> QNearFieldTarget.RequestId -QtNfc.QNearFieldTarget.writeNdefMessages?4(unknown-type) -> QNearFieldTarget.RequestId -QtNfc.QNearFieldTarget.sendCommand?4(QByteArray) -> QNearFieldTarget.RequestId -QtNfc.QNearFieldTarget.waitForRequestCompleted?4(QNearFieldTarget.RequestId, int msecs=5000) -> bool -QtNfc.QNearFieldTarget.requestResponse?4(QNearFieldTarget.RequestId) -> QVariant -QtNfc.QNearFieldTarget.disconnected?4() -QtNfc.QNearFieldTarget.ndefMessageRead?4(QNdefMessage) -QtNfc.QNearFieldTarget.requestCompleted?4(QNearFieldTarget.RequestId) -QtNfc.QNearFieldTarget.error?4(QNearFieldTarget.Error, QNearFieldTarget.RequestId) -QtNfc.QNearFieldTarget.disconnect?4() -> bool -QtNfc.QNearFieldTarget.maxCommandLength?4() -> int -QtNfc.QNearFieldTarget.RequestId?1() -QtNfc.QNearFieldTarget.RequestId.__init__?1(self) -QtNfc.QNearFieldTarget.RequestId?1(QNearFieldTarget.RequestId) -QtNfc.QNearFieldTarget.RequestId.__init__?1(self, QNearFieldTarget.RequestId) -QtNfc.QNearFieldTarget.RequestId.isValid?4() -> bool -QtNfc.QNearFieldTarget.RequestId.refCount?4() -> int -QtPdf.QPdfBookmarkModel.Role?10 -QtPdf.QPdfBookmarkModel.Role.Title?10 -QtPdf.QPdfBookmarkModel.Role.Level?10 -QtPdf.QPdfBookmarkModel.Role.Page?10 -QtPdf.QPdfBookmarkModel.Role.Location?10 -QtPdf.QPdfBookmarkModel.Role.Zoom?10 -QtPdf.QPdfBookmarkModel?1(QObject) -QtPdf.QPdfBookmarkModel.__init__?1(self, QObject) -QtPdf.QPdfBookmarkModel.document?4() -> QPdfDocument -QtPdf.QPdfBookmarkModel.setDocument?4(QPdfDocument) -QtPdf.QPdfBookmarkModel.data?4(QModelIndex, int) -> QVariant -QtPdf.QPdfBookmarkModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex -QtPdf.QPdfBookmarkModel.parent?4(QModelIndex) -> QModelIndex -QtPdf.QPdfBookmarkModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int -QtPdf.QPdfBookmarkModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int -QtPdf.QPdfBookmarkModel.roleNames?4() -> unknown-type -QtPdf.QPdfBookmarkModel.documentChanged?4(QPdfDocument) -QtPdf.QPdfDocument.PageModelRole?10 -QtPdf.QPdfDocument.PageModelRole.Label?10 -QtPdf.QPdfDocument.PageModelRole.PointSize?10 -QtPdf.QPdfDocument.MetaDataField?10 -QtPdf.QPdfDocument.MetaDataField.Title?10 -QtPdf.QPdfDocument.MetaDataField.Subject?10 -QtPdf.QPdfDocument.MetaDataField.Author?10 -QtPdf.QPdfDocument.MetaDataField.Keywords?10 -QtPdf.QPdfDocument.MetaDataField.Producer?10 -QtPdf.QPdfDocument.MetaDataField.Creator?10 -QtPdf.QPdfDocument.MetaDataField.CreationDate?10 -QtPdf.QPdfDocument.MetaDataField.ModificationDate?10 -QtPdf.QPdfDocument.Error?10 -QtPdf.QPdfDocument.Error.None_?10 -QtPdf.QPdfDocument.Error.Unknown?10 -QtPdf.QPdfDocument.Error.DataNotYetAvailable?10 -QtPdf.QPdfDocument.Error.FileNotFound?10 -QtPdf.QPdfDocument.Error.InvalidFileFormat?10 -QtPdf.QPdfDocument.Error.IncorrectPassword?10 -QtPdf.QPdfDocument.Error.UnsupportedSecurityScheme?10 -QtPdf.QPdfDocument.Status?10 -QtPdf.QPdfDocument.Status.Null?10 -QtPdf.QPdfDocument.Status.Loading?10 -QtPdf.QPdfDocument.Status.Ready?10 -QtPdf.QPdfDocument.Status.Unloading?10 -QtPdf.QPdfDocument.Status.Error?10 -QtPdf.QPdfDocument?1(QObject) -QtPdf.QPdfDocument.__init__?1(self, QObject) -QtPdf.QPdfDocument.load?4(QString) -> QPdfDocument.Error -QtPdf.QPdfDocument.load?4(QIODevice) -QtPdf.QPdfDocument.status?4() -> QPdfDocument.Status -QtPdf.QPdfDocument.setPassword?4(QString) -QtPdf.QPdfDocument.password?4() -> QString -QtPdf.QPdfDocument.metaData?4(QPdfDocument.MetaDataField) -> QVariant -QtPdf.QPdfDocument.error?4() -> QPdfDocument.Error -QtPdf.QPdfDocument.close?4() -QtPdf.QPdfDocument.pageCount?4() -> int -QtPdf.QPdfDocument.pagePointSize?4(int) -> QSizeF -QtPdf.QPdfDocument.pageLabel?4(int) -> QString -QtPdf.QPdfDocument.pageModel?4() -> QAbstractListModel -QtPdf.QPdfDocument.render?4(int, QSize, QPdfDocumentRenderOptions options=QPdfDocumentRenderOptions()) -> QImage -QtPdf.QPdfDocument.getSelection?4(int, QPointF, QPointF) -> QPdfSelection -QtPdf.QPdfDocument.getSelectionAtIndex?4(int, int, int) -> QPdfSelection -QtPdf.QPdfDocument.getAllText?4(int) -> QPdfSelection -QtPdf.QPdfDocument.pageIndexForLabel?4(QString) -> int -QtPdf.QPdfDocument.passwordChanged?4() -QtPdf.QPdfDocument.statusChanged?4(QPdfDocument.Status) -QtPdf.QPdfDocument.pageCountChanged?4(int) -QtPdf.QPdfDocument.pageModelChanged?4() -QtPdf.QPdfDocumentRenderOptions.RenderFlag?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.None_?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.Annotations?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.OptimizedForLcd?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.Grayscale?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.ForceHalftone?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.TextAliased?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.ImageAliased?10 -QtPdf.QPdfDocumentRenderOptions.RenderFlag.PathAliased?10 -QtPdf.QPdfDocumentRenderOptions.Rotation?10 -QtPdf.QPdfDocumentRenderOptions.Rotation.None_?10 -QtPdf.QPdfDocumentRenderOptions.Rotation.Clockwise90?10 -QtPdf.QPdfDocumentRenderOptions.Rotation.Clockwise180?10 -QtPdf.QPdfDocumentRenderOptions.Rotation.Clockwise270?10 -QtPdf.QPdfDocumentRenderOptions?1() -QtPdf.QPdfDocumentRenderOptions.__init__?1(self) -QtPdf.QPdfDocumentRenderOptions?1(QPdfDocumentRenderOptions) -QtPdf.QPdfDocumentRenderOptions.__init__?1(self, QPdfDocumentRenderOptions) -QtPdf.QPdfDocumentRenderOptions.rotation?4() -> QPdfDocumentRenderOptions.Rotation -QtPdf.QPdfDocumentRenderOptions.setRotation?4(QPdfDocumentRenderOptions.Rotation) -QtPdf.QPdfDocumentRenderOptions.renderFlags?4() -> unknown-type -QtPdf.QPdfDocumentRenderOptions.setRenderFlags?4(unknown-type) -QtPdf.QPdfDocumentRenderOptions.scaledClipRect?4() -> QRect -QtPdf.QPdfDocumentRenderOptions.setScaledClipRect?4(QRect) -QtPdf.QPdfDocumentRenderOptions.scaledSize?4() -> QSize -QtPdf.QPdfDocumentRenderOptions.setScaledSize?4(QSize) -QtPdf.QPdfLink?1() -QtPdf.QPdfLink.__init__?1(self) -QtPdf.QPdfLink?1(QPdfLink) -QtPdf.QPdfLink.__init__?1(self, QPdfLink) -QtPdf.QPdfLink.swap?4(QPdfLink) -QtPdf.QPdfLink.isValid?4() -> bool -QtPdf.QPdfLink.page?4() -> int -QtPdf.QPdfLink.location?4() -> QPointF -QtPdf.QPdfLink.zoom?4() -> float -QtPdf.QPdfLink.url?4() -> QUrl -QtPdf.QPdfLink.contextBefore?4() -> QString -QtPdf.QPdfLink.contextAfter?4() -> QString -QtPdf.QPdfLink.rectangles?4() -> unknown-type -QtPdf.QPdfLink.toString?4() -> QString -QtPdf.QPdfLink.copyToClipboard?4(QClipboard.Mode mode=QClipboard.Clipboard) -QtPdf.QPdfLinkModel.Role?10 -QtPdf.QPdfLinkModel.Role.Link?10 -QtPdf.QPdfLinkModel.Role.Rectangle?10 -QtPdf.QPdfLinkModel.Role.Url?10 -QtPdf.QPdfLinkModel.Role.Page?10 -QtPdf.QPdfLinkModel.Role.Location?10 -QtPdf.QPdfLinkModel.Role.Zoom?10 -QtPdf.QPdfLinkModel?1(QObject parent=None) -QtPdf.QPdfLinkModel.__init__?1(self, QObject parent=None) -QtPdf.QPdfLinkModel.document?4() -> QPdfDocument -QtPdf.QPdfLinkModel.roleNames?4() -> unknown-type -QtPdf.QPdfLinkModel.rowCount?4(QModelIndex) -> int -QtPdf.QPdfLinkModel.data?4(QModelIndex, int) -> QVariant -QtPdf.QPdfLinkModel.page?4() -> int -QtPdf.QPdfLinkModel.linkAt?4(QPointF) -> QPdfLink -QtPdf.QPdfLinkModel.setDocument?4(QPdfDocument) -QtPdf.QPdfLinkModel.setPage?4(int) -QtPdf.QPdfLinkModel.documentChanged?4() -QtPdf.QPdfLinkModel.pageChanged?4(int) -QtPdf.QPdfPageNavigator?1(QObject) -QtPdf.QPdfPageNavigator.__init__?1(self, QObject) -QtPdf.QPdfPageNavigator.currentPage?4() -> int -QtPdf.QPdfPageNavigator.currentLocation?4() -> QPointF -QtPdf.QPdfPageNavigator.currentZoom?4() -> float -QtPdf.QPdfPageNavigator.backAvailable?4() -> bool -QtPdf.QPdfPageNavigator.forwardAvailable?4() -> bool -QtPdf.QPdfPageNavigator.clear?4() -QtPdf.QPdfPageNavigator.jump?4(QPdfLink) -QtPdf.QPdfPageNavigator.jump?4(int, QPointF, float zoom=0) -QtPdf.QPdfPageNavigator.update?4(int, QPointF, float) -QtPdf.QPdfPageNavigator.forward?4() -QtPdf.QPdfPageNavigator.back?4() -QtPdf.QPdfPageNavigator.currentPageChanged?4(int) -QtPdf.QPdfPageNavigator.currentLocationChanged?4(QPointF) -QtPdf.QPdfPageNavigator.currentZoomChanged?4(float) -QtPdf.QPdfPageNavigator.backAvailableChanged?4(bool) -QtPdf.QPdfPageNavigator.forwardAvailableChanged?4(bool) -QtPdf.QPdfPageNavigator.jumped?4(QPdfLink) -QtPdf.QPdfPageRenderer.RenderMode?10 -QtPdf.QPdfPageRenderer.RenderMode.MultiThreaded?10 -QtPdf.QPdfPageRenderer.RenderMode.SingleThreaded?10 -QtPdf.QPdfPageRenderer?1(QObject) -QtPdf.QPdfPageRenderer.__init__?1(self, QObject) -QtPdf.QPdfPageRenderer.renderMode?4() -> QPdfPageRenderer.RenderMode -QtPdf.QPdfPageRenderer.setRenderMode?4(QPdfPageRenderer.RenderMode) -QtPdf.QPdfPageRenderer.document?4() -> QPdfDocument -QtPdf.QPdfPageRenderer.setDocument?4(QPdfDocument) -QtPdf.QPdfPageRenderer.requestPage?4(int, QSize, QPdfDocumentRenderOptions options=QPdfDocumentRenderOptions()) -> int -QtPdf.QPdfPageRenderer.documentChanged?4(QPdfDocument) -QtPdf.QPdfPageRenderer.renderModeChanged?4(QPdfPageRenderer.RenderMode) -QtPdf.QPdfSearchModel.Role?10 -QtPdf.QPdfSearchModel.Role.Page?10 -QtPdf.QPdfSearchModel.Role.IndexOnPage?10 -QtPdf.QPdfSearchModel.Role.Location?10 -QtPdf.QPdfSearchModel.Role.ContextBefore?10 -QtPdf.QPdfSearchModel.Role.ContextAfter?10 -QtPdf.QPdfSearchModel?1(QObject) -QtPdf.QPdfSearchModel.__init__?1(self, QObject) -QtPdf.QPdfSearchModel.resultsOnPage?4(int) -> unknown-type -QtPdf.QPdfSearchModel.resultAtIndex?4(int) -> QPdfLink -QtPdf.QPdfSearchModel.document?4() -> QPdfDocument -QtPdf.QPdfSearchModel.searchString?4() -> QString -QtPdf.QPdfSearchModel.roleNames?4() -> unknown-type -QtPdf.QPdfSearchModel.rowCount?4(QModelIndex) -> int -QtPdf.QPdfSearchModel.data?4(QModelIndex, int) -> QVariant -QtPdf.QPdfSearchModel.setSearchString?4(QString) -QtPdf.QPdfSearchModel.setDocument?4(QPdfDocument) -QtPdf.QPdfSearchModel.documentChanged?4() -QtPdf.QPdfSearchModel.searchStringChanged?4() -QtPdf.QPdfSearchModel.timerEvent?4(QTimerEvent) -QtPdf.QPdfSelection?1(QPdfSelection) -QtPdf.QPdfSelection.__init__?1(self, QPdfSelection) -QtPdf.QPdfSelection.swap?4(QPdfSelection) -QtPdf.QPdfSelection.isValid?4() -> bool -QtPdf.QPdfSelection.bounds?4() -> unknown-type -QtPdf.QPdfSelection.text?4() -> QString -QtPdf.QPdfSelection.boundingRectangle?4() -> QRectF -QtPdf.QPdfSelection.startIndex?4() -> int -QtPdf.QPdfSelection.endIndex?4() -> int -QtPdf.QPdfSelection.copyToClipboard?4(QClipboard.Mode mode=QClipboard.Clipboard) -QtPdfWidgets.QPdfPageSelector?1(QWidget) -QtPdfWidgets.QPdfPageSelector.__init__?1(self, QWidget) -QtPdfWidgets.QPdfPageSelector.setDocument?4(QPdfDocument) -QtPdfWidgets.QPdfPageSelector.document?4() -> QPdfDocument -QtPdfWidgets.QPdfPageSelector.currentPage?4() -> int -QtPdfWidgets.QPdfPageSelector.currentPageLabel?4() -> QString -QtPdfWidgets.QPdfPageSelector.setCurrentPage?4(int) -QtPdfWidgets.QPdfPageSelector.documentChanged?4(QPdfDocument) -QtPdfWidgets.QPdfPageSelector.currentPageChanged?4(int) -QtPdfWidgets.QPdfPageSelector.currentPageLabelChanged?4(QString) -QtPdfWidgets.QPdfView.ZoomMode?10 -QtPdfWidgets.QPdfView.ZoomMode.Custom?10 -QtPdfWidgets.QPdfView.ZoomMode.FitToWidth?10 -QtPdfWidgets.QPdfView.ZoomMode.FitInView?10 -QtPdfWidgets.QPdfView.PageMode?10 -QtPdfWidgets.QPdfView.PageMode.SinglePage?10 -QtPdfWidgets.QPdfView.PageMode.MultiPage?10 -QtPdfWidgets.QPdfView?1(QWidget) -QtPdfWidgets.QPdfView.__init__?1(self, QWidget) -QtPdfWidgets.QPdfView.setDocument?4(QPdfDocument) -QtPdfWidgets.QPdfView.document?4() -> QPdfDocument -QtPdfWidgets.QPdfView.pageNavigator?4() -> QPdfPageNavigator -QtPdfWidgets.QPdfView.pageMode?4() -> QPdfView.PageMode -QtPdfWidgets.QPdfView.zoomMode?4() -> QPdfView.ZoomMode -QtPdfWidgets.QPdfView.zoomFactor?4() -> float -QtPdfWidgets.QPdfView.pageSpacing?4() -> int -QtPdfWidgets.QPdfView.setPageSpacing?4(int) -QtPdfWidgets.QPdfView.documentMargins?4() -> QMargins -QtPdfWidgets.QPdfView.setDocumentMargins?4(QMargins) -QtPdfWidgets.QPdfView.setPageMode?4(QPdfView.PageMode) -QtPdfWidgets.QPdfView.setZoomMode?4(QPdfView.ZoomMode) -QtPdfWidgets.QPdfView.setZoomFactor?4(float) -QtPdfWidgets.QPdfView.documentChanged?4(QPdfDocument) -QtPdfWidgets.QPdfView.pageModeChanged?4(QPdfView.PageMode) -QtPdfWidgets.QPdfView.zoomModeChanged?4(QPdfView.ZoomMode) -QtPdfWidgets.QPdfView.zoomFactorChanged?4(float) -QtPdfWidgets.QPdfView.pageSpacingChanged?4(int) -QtPdfWidgets.QPdfView.documentMarginsChanged?4(QMargins) -QtPdfWidgets.QPdfView.paintEvent?4(QPaintEvent) -QtPdfWidgets.QPdfView.resizeEvent?4(QResizeEvent) -QtPdfWidgets.QPdfView.scrollContentsBy?4(int, int) -QtPdfWidgets.QPdfView.searchModel?4() -> QPdfSearchModel -QtPdfWidgets.QPdfView.setSearchModel?4(QPdfSearchModel) -QtPdfWidgets.QPdfView.currentSearchResultIndex?4() -> int -QtPdfWidgets.QPdfView.setCurrentSearchResultIndex?4(int) -QtPdfWidgets.QPdfView.searchModelChanged?4(QPdfSearchModel) -QtPdfWidgets.QPdfView.currentSearchResultIndexChanged?4(int) -QtPdfWidgets.QPdfView.mousePressEvent?4(QMouseEvent) -QtPdfWidgets.QPdfView.mouseMoveEvent?4(QMouseEvent) -QtPdfWidgets.QPdfView.mouseReleaseEvent?4(QMouseEvent) -QtSpatialAudio.QAmbientSound.Loops?10 -QtSpatialAudio.QAmbientSound.Loops.Infinite?10 -QtSpatialAudio.QAmbientSound.Loops.Once?10 -QtSpatialAudio.QAmbientSound?1(QAudioEngine) -QtSpatialAudio.QAmbientSound.__init__?1(self, QAudioEngine) -QtSpatialAudio.QAmbientSound.setSource?4(QUrl) -QtSpatialAudio.QAmbientSound.source?4() -> QUrl -QtSpatialAudio.QAmbientSound.loops?4() -> int -QtSpatialAudio.QAmbientSound.setLoops?4(int) -QtSpatialAudio.QAmbientSound.autoPlay?4() -> bool -QtSpatialAudio.QAmbientSound.setAutoPlay?4(bool) -QtSpatialAudio.QAmbientSound.setVolume?4(float) -QtSpatialAudio.QAmbientSound.volume?4() -> float -QtSpatialAudio.QAmbientSound.engine?4() -> QAudioEngine -QtSpatialAudio.QAmbientSound.sourceChanged?4() -QtSpatialAudio.QAmbientSound.loopsChanged?4() -QtSpatialAudio.QAmbientSound.autoPlayChanged?4() -QtSpatialAudio.QAmbientSound.volumeChanged?4() -QtSpatialAudio.QAmbientSound.play?4() -QtSpatialAudio.QAmbientSound.pause?4() -QtSpatialAudio.QAmbientSound.stop?4() -QtSpatialAudio.QAudioEngine.OutputMode?10 -QtSpatialAudio.QAudioEngine.OutputMode.Surround?10 -QtSpatialAudio.QAudioEngine.OutputMode.Stereo?10 -QtSpatialAudio.QAudioEngine.OutputMode.Headphone?10 -QtSpatialAudio.QAudioEngine.DistanceScaleCentimeter?7 -QtSpatialAudio.QAudioEngine.DistanceScaleMeter?7 -QtSpatialAudio.QAudioEngine?1() -QtSpatialAudio.QAudioEngine.__init__?1(self) -QtSpatialAudio.QAudioEngine?1(QObject) -QtSpatialAudio.QAudioEngine.__init__?1(self, QObject) -QtSpatialAudio.QAudioEngine?1(int, QObject parent=None) -QtSpatialAudio.QAudioEngine.__init__?1(self, int, QObject parent=None) -QtSpatialAudio.QAudioEngine.setOutputMode?4(QAudioEngine.OutputMode) -QtSpatialAudio.QAudioEngine.outputMode?4() -> QAudioEngine.OutputMode -QtSpatialAudio.QAudioEngine.sampleRate?4() -> int -QtSpatialAudio.QAudioEngine.setOutputDevice?4(QAudioDevice) -QtSpatialAudio.QAudioEngine.outputDevice?4() -> QAudioDevice -QtSpatialAudio.QAudioEngine.setMasterVolume?4(float) -QtSpatialAudio.QAudioEngine.masterVolume?4() -> float -QtSpatialAudio.QAudioEngine.setPaused?4(bool) -QtSpatialAudio.QAudioEngine.paused?4() -> bool -QtSpatialAudio.QAudioEngine.setRoomEffectsEnabled?4(bool) -QtSpatialAudio.QAudioEngine.roomEffectsEnabled?4() -> bool -QtSpatialAudio.QAudioEngine.setDistanceScale?4(float) -QtSpatialAudio.QAudioEngine.distanceScale?4() -> float -QtSpatialAudio.QAudioEngine.outputModeChanged?4() -QtSpatialAudio.QAudioEngine.outputDeviceChanged?4() -QtSpatialAudio.QAudioEngine.masterVolumeChanged?4() -QtSpatialAudio.QAudioEngine.pausedChanged?4() -QtSpatialAudio.QAudioEngine.distanceScaleChanged?4() -QtSpatialAudio.QAudioEngine.start?4() -QtSpatialAudio.QAudioEngine.stop?4() -QtSpatialAudio.QAudioEngine.pause?4() -QtSpatialAudio.QAudioEngine.resume?4() -QtSpatialAudio.QAudioListener?1(QAudioEngine) -QtSpatialAudio.QAudioListener.__init__?1(self, QAudioEngine) -QtSpatialAudio.QAudioListener.setPosition?4(QVector3D) -QtSpatialAudio.QAudioListener.position?4() -> QVector3D -QtSpatialAudio.QAudioListener.setRotation?4(QQuaternion) -QtSpatialAudio.QAudioListener.rotation?4() -> QQuaternion -QtSpatialAudio.QAudioListener.engine?4() -> QAudioEngine -QtSpatialAudio.QAudioRoom.Wall?10 -QtSpatialAudio.QAudioRoom.Wall.LeftWall?10 -QtSpatialAudio.QAudioRoom.Wall.RightWall?10 -QtSpatialAudio.QAudioRoom.Wall.Floor?10 -QtSpatialAudio.QAudioRoom.Wall.Ceiling?10 -QtSpatialAudio.QAudioRoom.Wall.FrontWall?10 -QtSpatialAudio.QAudioRoom.Wall.BackWall?10 -QtSpatialAudio.QAudioRoom.Material?10 -QtSpatialAudio.QAudioRoom.Material.Transparent?10 -QtSpatialAudio.QAudioRoom.Material.AcousticCeilingTiles?10 -QtSpatialAudio.QAudioRoom.Material.BrickBare?10 -QtSpatialAudio.QAudioRoom.Material.BrickPainted?10 -QtSpatialAudio.QAudioRoom.Material.ConcreteBlockCoarse?10 -QtSpatialAudio.QAudioRoom.Material.ConcreteBlockPainted?10 -QtSpatialAudio.QAudioRoom.Material.CurtainHeavy?10 -QtSpatialAudio.QAudioRoom.Material.FiberGlassInsulation?10 -QtSpatialAudio.QAudioRoom.Material.GlassThin?10 -QtSpatialAudio.QAudioRoom.Material.GlassThick?10 -QtSpatialAudio.QAudioRoom.Material.Grass?10 -QtSpatialAudio.QAudioRoom.Material.LinoleumOnConcrete?10 -QtSpatialAudio.QAudioRoom.Material.Marble?10 -QtSpatialAudio.QAudioRoom.Material.Metal?10 -QtSpatialAudio.QAudioRoom.Material.ParquetOnConcrete?10 -QtSpatialAudio.QAudioRoom.Material.PlasterRough?10 -QtSpatialAudio.QAudioRoom.Material.PlasterSmooth?10 -QtSpatialAudio.QAudioRoom.Material.PlywoodPanel?10 -QtSpatialAudio.QAudioRoom.Material.PolishedConcreteOrTile?10 -QtSpatialAudio.QAudioRoom.Material.Sheetrock?10 -QtSpatialAudio.QAudioRoom.Material.WaterOrIceSurface?10 -QtSpatialAudio.QAudioRoom.Material.WoodCeiling?10 -QtSpatialAudio.QAudioRoom.Material.WoodPanel?10 -QtSpatialAudio.QAudioRoom.Material.UniformMaterial?10 -QtSpatialAudio.QAudioRoom?1(QAudioEngine) -QtSpatialAudio.QAudioRoom.__init__?1(self, QAudioEngine) -QtSpatialAudio.QAudioRoom.setPosition?4(QVector3D) -QtSpatialAudio.QAudioRoom.position?4() -> QVector3D -QtSpatialAudio.QAudioRoom.setDimensions?4(QVector3D) -QtSpatialAudio.QAudioRoom.dimensions?4() -> QVector3D -QtSpatialAudio.QAudioRoom.setRotation?4(QQuaternion) -QtSpatialAudio.QAudioRoom.rotation?4() -> QQuaternion -QtSpatialAudio.QAudioRoom.setWallMaterial?4(QAudioRoom.Wall, QAudioRoom.Material) -QtSpatialAudio.QAudioRoom.wallMaterial?4(QAudioRoom.Wall) -> QAudioRoom.Material -QtSpatialAudio.QAudioRoom.setReflectionGain?4(float) -QtSpatialAudio.QAudioRoom.reflectionGain?4() -> float -QtSpatialAudio.QAudioRoom.setReverbGain?4(float) -QtSpatialAudio.QAudioRoom.reverbGain?4() -> float -QtSpatialAudio.QAudioRoom.setReverbTime?4(float) -QtSpatialAudio.QAudioRoom.reverbTime?4() -> float -QtSpatialAudio.QAudioRoom.setReverbBrightness?4(float) -QtSpatialAudio.QAudioRoom.reverbBrightness?4() -> float -QtSpatialAudio.QAudioRoom.positionChanged?4() -QtSpatialAudio.QAudioRoom.dimensionsChanged?4() -QtSpatialAudio.QAudioRoom.rotationChanged?4() -QtSpatialAudio.QAudioRoom.wallsChanged?4() -QtSpatialAudio.QAudioRoom.reflectionGainChanged?4() -QtSpatialAudio.QAudioRoom.reverbGainChanged?4() -QtSpatialAudio.QAudioRoom.reverbTimeChanged?4() -QtSpatialAudio.QAudioRoom.reverbBrightnessChanged?4() -QtSpatialAudio.QSpatialSound.Loops?10 -QtSpatialAudio.QSpatialSound.Loops.Infinite?10 -QtSpatialAudio.QSpatialSound.Loops.Once?10 -QtSpatialAudio.QSpatialSound.DistanceModel?10 -QtSpatialAudio.QSpatialSound.DistanceModel.Logarithmic?10 -QtSpatialAudio.QSpatialSound.DistanceModel.Linear?10 -QtSpatialAudio.QSpatialSound.DistanceModel.ManualAttenuation?10 -QtSpatialAudio.QSpatialSound?1(QAudioEngine) -QtSpatialAudio.QSpatialSound.__init__?1(self, QAudioEngine) -QtSpatialAudio.QSpatialSound.setSource?4(QUrl) -QtSpatialAudio.QSpatialSound.source?4() -> QUrl -QtSpatialAudio.QSpatialSound.loops?4() -> int -QtSpatialAudio.QSpatialSound.setLoops?4(int) -QtSpatialAudio.QSpatialSound.autoPlay?4() -> bool -QtSpatialAudio.QSpatialSound.setAutoPlay?4(bool) -QtSpatialAudio.QSpatialSound.setPosition?4(QVector3D) -QtSpatialAudio.QSpatialSound.position?4() -> QVector3D -QtSpatialAudio.QSpatialSound.setRotation?4(QQuaternion) -QtSpatialAudio.QSpatialSound.rotation?4() -> QQuaternion -QtSpatialAudio.QSpatialSound.setVolume?4(float) -QtSpatialAudio.QSpatialSound.volume?4() -> float -QtSpatialAudio.QSpatialSound.setDistanceModel?4(QSpatialSound.DistanceModel) -QtSpatialAudio.QSpatialSound.distanceModel?4() -> QSpatialSound.DistanceModel -QtSpatialAudio.QSpatialSound.setSize?4(float) -QtSpatialAudio.QSpatialSound.size?4() -> float -QtSpatialAudio.QSpatialSound.setDistanceCutoff?4(float) -QtSpatialAudio.QSpatialSound.distanceCutoff?4() -> float -QtSpatialAudio.QSpatialSound.setManualAttenuation?4(float) -QtSpatialAudio.QSpatialSound.manualAttenuation?4() -> float -QtSpatialAudio.QSpatialSound.setOcclusionIntensity?4(float) -QtSpatialAudio.QSpatialSound.occlusionIntensity?4() -> float -QtSpatialAudio.QSpatialSound.setDirectivity?4(float) -QtSpatialAudio.QSpatialSound.directivity?4() -> float -QtSpatialAudio.QSpatialSound.setDirectivityOrder?4(float) -QtSpatialAudio.QSpatialSound.directivityOrder?4() -> float -QtSpatialAudio.QSpatialSound.setNearFieldGain?4(float) -QtSpatialAudio.QSpatialSound.nearFieldGain?4() -> float -QtSpatialAudio.QSpatialSound.engine?4() -> QAudioEngine -QtSpatialAudio.QSpatialSound.sourceChanged?4() -QtSpatialAudio.QSpatialSound.loopsChanged?4() -QtSpatialAudio.QSpatialSound.autoPlayChanged?4() -QtSpatialAudio.QSpatialSound.positionChanged?4() -QtSpatialAudio.QSpatialSound.rotationChanged?4() -QtSpatialAudio.QSpatialSound.volumeChanged?4() -QtSpatialAudio.QSpatialSound.distanceModelChanged?4() -QtSpatialAudio.QSpatialSound.sizeChanged?4() -QtSpatialAudio.QSpatialSound.distanceCutoffChanged?4() -QtSpatialAudio.QSpatialSound.manualAttenuationChanged?4() -QtSpatialAudio.QSpatialSound.occlusionIntensityChanged?4() -QtSpatialAudio.QSpatialSound.directivityChanged?4() -QtSpatialAudio.QSpatialSound.directivityOrderChanged?4() -QtSpatialAudio.QSpatialSound.nearFieldGainChanged?4() -QtSpatialAudio.QSpatialSound.play?4() -QtSpatialAudio.QSpatialSound.pause?4() -QtSpatialAudio.QSpatialSound.stop?4() -QtTextToSpeech.QTextToSpeech.Capability?10 -QtTextToSpeech.QTextToSpeech.Capability.None_?10 -QtTextToSpeech.QTextToSpeech.Capability.Speak?10 -QtTextToSpeech.QTextToSpeech.Capability.PauseResume?10 -QtTextToSpeech.QTextToSpeech.Capability.WordByWordProgress?10 -QtTextToSpeech.QTextToSpeech.Capability.Synthesize?10 -QtTextToSpeech.QTextToSpeech.State?10 -QtTextToSpeech.QTextToSpeech.State.Ready?10 -QtTextToSpeech.QTextToSpeech.State.Speaking?10 -QtTextToSpeech.QTextToSpeech.State.Paused?10 -QtTextToSpeech.QTextToSpeech.State.Error?10 -QtTextToSpeech.QTextToSpeech.State.Synthesizing?10 -QtTextToSpeech.QTextToSpeech.ErrorReason?10 -QtTextToSpeech.QTextToSpeech.ErrorReason.NoError?10 -QtTextToSpeech.QTextToSpeech.ErrorReason.Initialization?10 -QtTextToSpeech.QTextToSpeech.ErrorReason.Configuration?10 -QtTextToSpeech.QTextToSpeech.ErrorReason.Input?10 -QtTextToSpeech.QTextToSpeech.ErrorReason.Playback?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint.Default?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint.Immediate?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint.Word?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint.Sentence?10 -QtTextToSpeech.QTextToSpeech.BoundaryHint.Utterance?10 -QtTextToSpeech.QTextToSpeech?1(QString, unknown-type, QObject parent=None) -QtTextToSpeech.QTextToSpeech.__init__?1(self, QString, unknown-type, QObject parent=None) -QtTextToSpeech.QTextToSpeech?1(QObject parent=None) -QtTextToSpeech.QTextToSpeech.__init__?1(self, QObject parent=None) -QtTextToSpeech.QTextToSpeech?1(QString, QObject parent=None) -QtTextToSpeech.QTextToSpeech.__init__?1(self, QString, QObject parent=None) -QtTextToSpeech.QTextToSpeech.setEngine?4(QString, unknown-type params={}) -> bool -QtTextToSpeech.QTextToSpeech.engine?4() -> QString -QtTextToSpeech.QTextToSpeech.errorReason?4() -> QTextToSpeech.ErrorReason -QtTextToSpeech.QTextToSpeech.errorString?4() -> QString -QtTextToSpeech.QTextToSpeech.state?4() -> QTextToSpeech.State -QtTextToSpeech.QTextToSpeech.availableLocales?4() -> unknown-type -QtTextToSpeech.QTextToSpeech.locale?4() -> QLocale -QtTextToSpeech.QTextToSpeech.voice?4() -> QVoice -QtTextToSpeech.QTextToSpeech.availableVoices?4() -> unknown-type -QtTextToSpeech.QTextToSpeech.rate?4() -> float -QtTextToSpeech.QTextToSpeech.pitch?4() -> float -QtTextToSpeech.QTextToSpeech.volume?4() -> float -QtTextToSpeech.QTextToSpeech.availableEngines?4() -> QStringList -QtTextToSpeech.QTextToSpeech.say?4(QString) -QtTextToSpeech.QTextToSpeech.stop?4(QTextToSpeech.BoundaryHint boundaryHint=QTextToSpeech.BoundaryHint.Default) -QtTextToSpeech.QTextToSpeech.pause?4(QTextToSpeech.BoundaryHint boundaryHint=QTextToSpeech.BoundaryHint.Default) -QtTextToSpeech.QTextToSpeech.resume?4() -QtTextToSpeech.QTextToSpeech.setLocale?4(QLocale) -QtTextToSpeech.QTextToSpeech.setRate?4(float) -QtTextToSpeech.QTextToSpeech.setPitch?4(float) -QtTextToSpeech.QTextToSpeech.setVolume?4(float) -QtTextToSpeech.QTextToSpeech.setVoice?4(QVoice) -QtTextToSpeech.QTextToSpeech.stateChanged?4(QTextToSpeech.State) -QtTextToSpeech.QTextToSpeech.localeChanged?4(QLocale) -QtTextToSpeech.QTextToSpeech.rateChanged?4(float) -QtTextToSpeech.QTextToSpeech.pitchChanged?4(float) -QtTextToSpeech.QTextToSpeech.volumeChanged?4(float) -QtTextToSpeech.QTextToSpeech.voiceChanged?4(QVoice) -QtTextToSpeech.QTextToSpeech.engineChanged?4(QString) -QtTextToSpeech.QTextToSpeech.errorOccurred?4(QTextToSpeech.ErrorReason, QString) -QtTextToSpeech.QTextToSpeech.engineCapabilities?4() -> unknown-type -QtTextToSpeech.QTextToSpeech.enqueue?4(QString) -> int -QtTextToSpeech.QTextToSpeech.sayingWord?4(QString, int, int, int) -QtTextToSpeech.QTextToSpeech.aboutToSynthesize?4(int) -QtTextToSpeech.QVoice.Age?10 -QtTextToSpeech.QVoice.Age.Child?10 -QtTextToSpeech.QVoice.Age.Teenager?10 -QtTextToSpeech.QVoice.Age.Adult?10 -QtTextToSpeech.QVoice.Age.Senior?10 -QtTextToSpeech.QVoice.Age.Other?10 -QtTextToSpeech.QVoice.Gender?10 -QtTextToSpeech.QVoice.Gender.Male?10 -QtTextToSpeech.QVoice.Gender.Female?10 -QtTextToSpeech.QVoice.Gender.Unknown?10 -QtTextToSpeech.QVoice?1() -QtTextToSpeech.QVoice.__init__?1(self) -QtTextToSpeech.QVoice?1(QVoice) -QtTextToSpeech.QVoice.__init__?1(self, QVoice) -QtTextToSpeech.QVoice.name?4() -> QString -QtTextToSpeech.QVoice.gender?4() -> QVoice.Gender -QtTextToSpeech.QVoice.age?4() -> QVoice.Age -QtTextToSpeech.QVoice.genderName?4(QVoice.Gender) -> QString -QtTextToSpeech.QVoice.ageName?4(QVoice.Age) -> QString -QtTextToSpeech.QVoice.swap?4(QVoice) -QtTextToSpeech.QVoice.locale?4() -> QLocale -QtTextToSpeech.QVoice.language?4() -> QLocale.Language diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ar.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ar.qm deleted file mode 100644 index ddce1e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ar.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_bg.qm deleted file mode 100644 index 3b5c3ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ca.qm deleted file mode 100644 index 6b46339..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_cs.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_cs.qm deleted file mode 100644 index 95be1ea..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_cs.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_da.qm deleted file mode 100644 index 3ffc148..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_de.qm deleted file mode 100644 index dec7e14..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_es.qm deleted file mode 100644 index 7ea8766..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fa.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fa.qm deleted file mode 100644 index b964c32..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fa.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fi.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fi.qm deleted file mode 100644 index a4cb291..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fi.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fr.qm deleted file mode 100644 index 7d74c4a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gd.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gd.qm deleted file mode 100644 index 7b4d040..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gd.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gl.qm deleted file mode 100644 index 5255734..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_gl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_he.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_he.qm deleted file mode 100644 index c9d3107..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_he.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ar.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ar.qm deleted file mode 100644 index aa92f02..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ar.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_bg.qm deleted file mode 100644 index c65d260..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ca.qm deleted file mode 100644 index 43fd055..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_cs.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_cs.qm deleted file mode 100644 index fd50d84..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_cs.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_da.qm deleted file mode 100644 index 2c26d75..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_de.qm deleted file mode 100644 index 8634086..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_es.qm deleted file mode 100644 index 94e3967..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_fr.qm deleted file mode 100644 index 4703e91..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_gl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_gl.qm deleted file mode 100644 index aef1ab6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_gl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hr.qm deleted file mode 100644 index 2151a78..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hu.qm deleted file mode 100644 index 7df88dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_it.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_it.qm deleted file mode 100644 index e3bc252..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_it.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ja.qm deleted file mode 100644 index e64507a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ka.qm deleted file mode 100644 index ec0ad83..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ko.qm deleted file mode 100644 index f6b1d13..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nl.qm deleted file mode 100644 index eb22989..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nn.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nn.qm deleted file mode 100644 index aa47765..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_nn.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pl.qm deleted file mode 100644 index c2b82b2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pt_BR.qm deleted file mode 100644 index 21b5d02..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ru.qm deleted file mode 100644 index 2a7d88b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sk.qm deleted file mode 100644 index 8a4a447..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sl.qm deleted file mode 100644 index fd122a6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_sl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_tr.qm deleted file mode 100644 index 463f158..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_uk.qm deleted file mode 100644 index 192d28d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_CN.qm deleted file mode 100644 index 2eb396f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_TW.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_TW.qm deleted file mode 100644 index e928dda..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_help_zh_TW.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hr.qm deleted file mode 100644 index 0a1f8cd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hu.qm deleted file mode 100644 index c6908fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_it.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_it.qm deleted file mode 100644 index 9cfb64c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_it.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ja.qm deleted file mode 100644 index cd4aea4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ka.qm deleted file mode 100644 index ec430b0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ko.qm deleted file mode 100644 index b8528c9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lt.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lt.qm deleted file mode 100644 index e9c36fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lt.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lv.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lv.qm deleted file mode 100644 index 6c1126a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_lv.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nl.qm deleted file mode 100644 index 936ca0d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nn.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nn.qm deleted file mode 100644 index 58c5ca1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_nn.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pl.qm deleted file mode 100644 index 19d6c0f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_BR.qm deleted file mode 100644 index fe8dc29..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_PT.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_PT.qm deleted file mode 100644 index 03353ea..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_pt_PT.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ru.qm deleted file mode 100644 index 3268b91..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sk.qm deleted file mode 100644 index a9b0035..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sl.qm deleted file mode 100644 index bc2073b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sv.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sv.qm deleted file mode 100644 index d5a7ad1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_sv.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_tr.qm deleted file mode 100644 index 4163108..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_uk.qm deleted file mode 100644 index 42abff3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_CN.qm deleted file mode 100644 index f35616c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_TW.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_TW.qm deleted file mode 100644 index ea03c3d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qt_zh_TW.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ar.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ar.qm deleted file mode 100644 index 32861b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ar.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_bg.qm deleted file mode 100644 index faeb167..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ca.qm deleted file mode 100644 index 4e362dc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_cs.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_cs.qm deleted file mode 100644 index 459ef26..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_cs.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_da.qm deleted file mode 100644 index 4ede24b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_de.qm deleted file mode 100644 index 459c446..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_es.qm deleted file mode 100644 index 1a13157..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fa.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fa.qm deleted file mode 100644 index aadc0c1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fa.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fi.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fi.qm deleted file mode 100644 index 934aecd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fi.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fr.qm deleted file mode 100644 index 19f0ba5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_gd.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_gd.qm deleted file mode 100644 index 3fe3841..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_gd.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_he.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_he.qm deleted file mode 100644 index 95ed0c7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_he.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hr.qm deleted file mode 100644 index 4ed06fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hu.qm deleted file mode 100644 index 2d82693..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_it.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_it.qm deleted file mode 100644 index a4175b5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_it.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ja.qm deleted file mode 100644 index acd2f03..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ka.qm deleted file mode 100644 index 2756e92..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ko.qm deleted file mode 100644 index 20e4661..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_lv.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_lv.qm deleted file mode 100644 index f88a761..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_lv.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nl.qm deleted file mode 100644 index de4e74a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nn.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nn.qm deleted file mode 100644 index 506ec45..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_nn.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pl.qm deleted file mode 100644 index 3c4e03b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pt_BR.qm deleted file mode 100644 index 6fabd0e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ru.qm deleted file mode 100644 index c1a2286..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_sk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_sk.qm deleted file mode 100644 index 55a377e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_sk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_tr.qm deleted file mode 100644 index ce17f3d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_uk.qm deleted file mode 100644 index 21a3038..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_CN.qm deleted file mode 100644 index ba2273c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_TW.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_TW.qm deleted file mode 100644 index f32a72f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtbase_zh_TW.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_bg.qm deleted file mode 100644 index 3771f95..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ca.qm deleted file mode 100644 index d843943..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_da.qm deleted file mode 100644 index 5ebf0f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_de.qm deleted file mode 100644 index 5c87a09..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_es.qm deleted file mode 100644 index b08c44f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hr.qm deleted file mode 100644 index 6874632..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hu.qm deleted file mode 100644 index e814651..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ka.qm deleted file mode 100644 index 9cc5ab8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ko.qm deleted file mode 100644 index d8a5dac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_nl.qm deleted file mode 100644 index 765f2de..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pl.qm deleted file mode 100644 index 7682a92..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pt_BR.qm deleted file mode 100644 index d3d954d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ru.qm deleted file mode 100644 index 0a44d0f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_tr.qm deleted file mode 100644 index 8d3e094..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_uk.qm deleted file mode 100644 index d9a2cf3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_zh_CN.qm deleted file mode 100644 index 5d80764..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtconnectivity_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ar.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ar.qm deleted file mode 100644 index b6700c1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ar.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_bg.qm deleted file mode 100644 index 8a2ed7a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ca.qm deleted file mode 100644 index 608a0e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_da.qm deleted file mode 100644 index 3b23509..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_de.qm deleted file mode 100644 index d4272f3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_es.qm deleted file mode 100644 index da67b7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fa.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fa.qm deleted file mode 100644 index 1cfaa5d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fa.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fi.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fi.qm deleted file mode 100644 index cdd21cd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fi.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fr.qm deleted file mode 100644 index 0a94d6c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hr.qm deleted file mode 100644 index 8bcab6d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hu.qm deleted file mode 100644 index 59211e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ja.qm deleted file mode 100644 index ff73ef1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ka.qm deleted file mode 100644 index 46d3ef0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ko.qm deleted file mode 100644 index 46b578b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_lv.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_lv.qm deleted file mode 100644 index 7e88b0d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_lv.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nl.qm deleted file mode 100644 index 094a8e4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nn.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nn.qm deleted file mode 100644 index 343238f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_nn.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pl.qm deleted file mode 100644 index 0fbf88f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pt_BR.qm deleted file mode 100644 index 43ed919..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ru.qm deleted file mode 100644 index 57b513f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_sk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_sk.qm deleted file mode 100644 index d6d21ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_sk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_tr.qm deleted file mode 100644 index a329f86..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_uk.qm deleted file mode 100644 index 32f1398..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_CN.qm deleted file mode 100644 index a4849ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_TW.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_TW.qm deleted file mode 100644 index c9e38c3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtdeclarative_zh_TW.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_bg.qm deleted file mode 100644 index f56e0e0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ca.qm deleted file mode 100644 index 3ef39a1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_da.qm deleted file mode 100644 index b5e932d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_de.qm deleted file mode 100644 index 6c2d14a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_es.qm deleted file mode 100644 index 2b898a9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fi.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fi.qm deleted file mode 100644 index 950275f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fi.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fr.qm deleted file mode 100644 index a40c000..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hr.qm deleted file mode 100644 index 3cafcf0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hu.qm deleted file mode 100644 index 5ee1af9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ka.qm deleted file mode 100644 index d7b1258..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ko.qm deleted file mode 100644 index 18202c9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_nl.qm deleted file mode 100644 index 317f681..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pl.qm deleted file mode 100644 index 176a76d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pt_BR.qm deleted file mode 100644 index 081d6d4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ru.qm deleted file mode 100644 index e374246..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_tr.qm deleted file mode 100644 index ed109ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_uk.qm deleted file mode 100644 index 63438a1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_zh_CN.qm deleted file mode 100644 index 6fab2ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtlocation_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ar.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ar.qm deleted file mode 100644 index 8422ab3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ar.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_bg.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_bg.qm deleted file mode 100644 index d3bd825..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_bg.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ca.qm deleted file mode 100644 index fa45375..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_cs.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_cs.qm deleted file mode 100644 index 106a5e4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_cs.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_da.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_da.qm deleted file mode 100644 index 9324732..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_da.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_de.qm deleted file mode 100644 index 4b1061a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_es.qm deleted file mode 100644 index fe500a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fa.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fa.qm deleted file mode 100644 index 1f0fb75..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fa.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fi.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fi.qm deleted file mode 100644 index 2a39197..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fi.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fr.qm deleted file mode 100644 index 56e5954..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hr.qm deleted file mode 100644 index 1d3011d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hu.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hu.qm deleted file mode 100644 index 430c5a5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_hu.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_it.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_it.qm deleted file mode 100644 index c1060bf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_it.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ja.qm deleted file mode 100644 index 87af0b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ka.qm deleted file mode 100644 index 8a77c21..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ko.qm deleted file mode 100644 index a48156e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nl.qm deleted file mode 100644 index 4c3b36b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nn.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nn.qm deleted file mode 100644 index e103e7f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_nn.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pl.qm deleted file mode 100644 index 09f3a4a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pt_BR.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pt_BR.qm deleted file mode 100644 index 200f8d0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_pt_BR.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ru.qm deleted file mode 100644 index d6baa83..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_sk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_sk.qm deleted file mode 100644 index b9638b5..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_sk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_tr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_tr.qm deleted file mode 100644 index be53ad1..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_tr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_uk.qm deleted file mode 100644 index 501246e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_CN.qm deleted file mode 100644 index 3eb2a3a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_TW.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_TW.qm deleted file mode 100644 index 8747367..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtmultimedia_zh_TW.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_de.qm deleted file mode 100644 index 1b58bb8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_es.qm deleted file mode 100644 index 79eb553..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ja.qm deleted file mode 100644 index 4199f54..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ka.qm deleted file mode 100644 index bc82dca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ko.qm deleted file mode 100644 index 7b4feb0..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_pl.qm deleted file mode 100644 index 42e9e75..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ru.qm deleted file mode 100644 index 043c2da..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_uk.qm deleted file mode 100644 index bc0b13f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_zh_CN.qm deleted file mode 100644 index b0d095b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtserialport_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ca.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ca.qm deleted file mode 100644 index a312ff2..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ca.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_de.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_de.qm deleted file mode 100644 index 85c2c9e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_de.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_en.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_en.qm deleted file mode 100644 index 937ea3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_en.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_es.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_es.qm deleted file mode 100644 index e26e83d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_es.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_fr.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_fr.qm deleted file mode 100644 index a3fb8bd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_fr.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ja.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ja.qm deleted file mode 100644 index 66191e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ja.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ka.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ka.qm deleted file mode 100644 index 4096afc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ka.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ko.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ko.qm deleted file mode 100644 index 939f42b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ko.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_pl.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_pl.qm deleted file mode 100644 index 0f7d2b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_pl.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ru.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ru.qm deleted file mode 100644 index ee6a9ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_ru.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_uk.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_uk.qm deleted file mode 100644 index 3925a64..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_uk.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_zh_CN.qm b/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_zh_CN.qm deleted file mode 100644 index 7e16418..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/Qt6/translations/qtwebsockets_zh_CN.qm and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.abi3.so deleted file mode 100644 index 908c84f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.pyi deleted file mode 100644 index 76bb43c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtBluetooth.pyi +++ /dev/null @@ -1,1231 +0,0 @@ -# The PEP 484 type hints stub file for the QtBluetooth module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QBluetooth(PyQt6.sip.simplewrapper): - - class AttAccessConstraint(enum.Flag): - AttAuthorizationRequired = ... # type: QBluetooth.AttAccessConstraint - AttAuthenticationRequired = ... # type: QBluetooth.AttAccessConstraint - AttEncryptionRequired = ... # type: QBluetooth.AttAccessConstraint - - class Security(enum.Flag): - NoSecurity = ... # type: QBluetooth.Security - Authorization = ... # type: QBluetooth.Security - Authentication = ... # type: QBluetooth.Security - Encryption = ... # type: QBluetooth.Security - Secure = ... # type: QBluetooth.Security - - -class QBluetoothAddress(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, address: int) -> None: ... - @typing.overload - def __init__(self, address: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QBluetoothAddress') -> None: ... - - def __ge__(self, b: 'QBluetoothAddress') -> bool: ... - def __lt__(self, b: 'QBluetoothAddress') -> bool: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def toString(self) -> str: ... - def toUInt64(self) -> int: ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - - -class QBluetoothDeviceDiscoveryAgent(QtCore.QObject): - - class DiscoveryMethod(enum.Flag): - NoMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod - ClassicMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod - LowEnergyMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod - - class Error(enum.Enum): - NoError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - InputOutputError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - PoweredOffError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - InvalidBluetoothAdapterError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - UnsupportedPlatformError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - UnsupportedDiscoveryMethod = ... # type: QBluetoothDeviceDiscoveryAgent.Error - LocationServiceTurnedOffError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - MissingPermissionsError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - UnknownError = ... # type: QBluetoothDeviceDiscoveryAgent.Error - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, deviceAdapter: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - @staticmethod - def supportedDiscoveryMethods() -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod': ... - def lowEnergyDiscoveryTimeout(self) -> int: ... - def setLowEnergyDiscoveryTimeout(self, msTimeout: int) -> None: ... - deviceUpdated: typing.ClassVar[QtCore.pyqtSignal] - canceled: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - deviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - @typing.overload - def start(self) -> None: ... - @typing.overload - def start(self, method: 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod') -> None: ... - def discoveredDevices(self) -> typing.List['QBluetoothDeviceInfo']: ... - def errorString(self) -> str: ... - def error(self) -> 'QBluetoothDeviceDiscoveryAgent.Error': ... - def isActive(self) -> bool: ... - - -class QBluetoothDeviceInfo(PyQt6.sip.simplewrapper): - - class Field(enum.Flag): - None_ = ... # type: QBluetoothDeviceInfo.Field - RSSI = ... # type: QBluetoothDeviceInfo.Field - ManufacturerData = ... # type: QBluetoothDeviceInfo.Field - ServiceData = ... # type: QBluetoothDeviceInfo.Field - All = ... # type: QBluetoothDeviceInfo.Field - - class CoreConfiguration(enum.Flag): - UnknownCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration - LowEnergyCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration - BaseRateCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration - BaseRateAndLowEnergyCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration - - class ServiceClass(enum.Flag): - NoService = ... # type: QBluetoothDeviceInfo.ServiceClass - PositioningService = ... # type: QBluetoothDeviceInfo.ServiceClass - NetworkingService = ... # type: QBluetoothDeviceInfo.ServiceClass - RenderingService = ... # type: QBluetoothDeviceInfo.ServiceClass - CapturingService = ... # type: QBluetoothDeviceInfo.ServiceClass - ObjectTransferService = ... # type: QBluetoothDeviceInfo.ServiceClass - AudioService = ... # type: QBluetoothDeviceInfo.ServiceClass - TelephonyService = ... # type: QBluetoothDeviceInfo.ServiceClass - InformationService = ... # type: QBluetoothDeviceInfo.ServiceClass - AllServices = ... # type: QBluetoothDeviceInfo.ServiceClass - - class MinorHealthClass(enum.Enum): - UncategorizedHealthDevice = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthBloodPressureMonitor = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthThermometer = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthWeightScale = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthGlucoseMeter = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthPulseOximeter = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthDataDisplay = ... # type: QBluetoothDeviceInfo.MinorHealthClass - HealthStepCounter = ... # type: QBluetoothDeviceInfo.MinorHealthClass - - class MinorToyClass(enum.Enum): - UncategorizedToy = ... # type: QBluetoothDeviceInfo.MinorToyClass - ToyRobot = ... # type: QBluetoothDeviceInfo.MinorToyClass - ToyVehicle = ... # type: QBluetoothDeviceInfo.MinorToyClass - ToyDoll = ... # type: QBluetoothDeviceInfo.MinorToyClass - ToyController = ... # type: QBluetoothDeviceInfo.MinorToyClass - ToyGame = ... # type: QBluetoothDeviceInfo.MinorToyClass - - class MinorWearableClass(enum.Enum): - UncategorizedWearableDevice = ... # type: QBluetoothDeviceInfo.MinorWearableClass - WearableWristWatch = ... # type: QBluetoothDeviceInfo.MinorWearableClass - WearablePager = ... # type: QBluetoothDeviceInfo.MinorWearableClass - WearableJacket = ... # type: QBluetoothDeviceInfo.MinorWearableClass - WearableHelmet = ... # type: QBluetoothDeviceInfo.MinorWearableClass - WearableGlasses = ... # type: QBluetoothDeviceInfo.MinorWearableClass - - class MinorImagingClass(enum.Enum): - UncategorizedImagingDevice = ... # type: QBluetoothDeviceInfo.MinorImagingClass - ImageDisplay = ... # type: QBluetoothDeviceInfo.MinorImagingClass - ImageCamera = ... # type: QBluetoothDeviceInfo.MinorImagingClass - ImageScanner = ... # type: QBluetoothDeviceInfo.MinorImagingClass - ImagePrinter = ... # type: QBluetoothDeviceInfo.MinorImagingClass - - class MinorPeripheralClass(enum.Enum): - UncategorizedPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - KeyboardPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - PointingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - KeyboardWithPointingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - JoystickPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - GamepadPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - RemoteControlPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - SensingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - DigitizerTabletPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - CardReaderPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass - - class MinorAudioVideoClass(enum.Enum): - UncategorizedAudioVideoDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - WearableHeadsetDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - HandsFreeDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - Microphone = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - Loudspeaker = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - Headphones = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - PortableAudioDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - CarAudio = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - SetTopBox = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - HiFiAudioDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - Vcr = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - VideoCamera = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - Camcorder = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - VideoMonitor = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - VideoDisplayAndLoudspeaker = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - VideoConferencing = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - GamingDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass - - class MinorNetworkClass(enum.Enum): - NetworkFullService = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorOne = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorTwo = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorThree = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorFour = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorFive = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkLoadFactorSix = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - NetworkNoService = ... # type: QBluetoothDeviceInfo.MinorNetworkClass - - class MinorPhoneClass(enum.Enum): - UncategorizedPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - CellularPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - CordlessPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - SmartPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - WiredModemOrVoiceGatewayPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - CommonIsdnAccessPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass - - class MinorComputerClass(enum.Enum): - UncategorizedComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - DesktopComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - ServerComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - LaptopComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - HandheldClamShellComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - HandheldComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - WearableComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass - - class MinorMiscellaneousClass(enum.Enum): - UncategorizedMiscellaneous = ... # type: QBluetoothDeviceInfo.MinorMiscellaneousClass - - class MajorDeviceClass(enum.Enum): - MiscellaneousDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - ComputerDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - PhoneDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - NetworkDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - AudioVideoDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - PeripheralDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - ImagingDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - WearableDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - ToyDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - HealthDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - UncategorizedDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, address: QBluetoothAddress, name: typing.Optional[str], classOfDevice: int) -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid', name: typing.Optional[str], classOfDevice: int) -> None: ... - @typing.overload - def __init__(self, other: 'QBluetoothDeviceInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setServiceData(self, serviceId: 'QBluetoothUuid', data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def serviceData(self) -> typing.Dict['QBluetoothUuid', QtCore.QByteArray]: ... - @typing.overload - def serviceData(self, serviceId: 'QBluetoothUuid') -> QtCore.QByteArray: ... - def serviceIds(self) -> typing.List['QBluetoothUuid']: ... - def setName(self, name: typing.Optional[str]) -> None: ... - def setManufacturerData(self, manufacturerId: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def manufacturerData(self) -> typing.Dict[int, QtCore.QByteArray]: ... - @typing.overload - def manufacturerData(self, manufacturerId: int) -> QtCore.QByteArray: ... - def manufacturerIds(self) -> typing.List[int]: ... - def deviceUuid(self) -> 'QBluetoothUuid': ... - def setDeviceUuid(self, uuid: 'QBluetoothUuid') -> None: ... - def coreConfigurations(self) -> 'QBluetoothDeviceInfo.CoreConfiguration': ... - def setCoreConfigurations(self, coreConfigs: 'QBluetoothDeviceInfo.CoreConfiguration') -> None: ... - def serviceUuids(self) -> typing.List['QBluetoothUuid']: ... - def setServiceUuids(self, uuids: typing.Iterable['QBluetoothUuid']) -> None: ... - def setRssi(self, signal: int) -> None: ... - def rssi(self) -> int: ... - def minorDeviceClass(self) -> int: ... - def majorDeviceClass(self) -> 'QBluetoothDeviceInfo.MajorDeviceClass': ... - def serviceClasses(self) -> 'QBluetoothDeviceInfo.ServiceClass': ... - def name(self) -> str: ... - def address(self) -> QBluetoothAddress: ... - def setCached(self, cached: bool) -> None: ... - def isCached(self) -> bool: ... - def isValid(self) -> bool: ... - - -class QBluetoothHostInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QBluetoothHostInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setName(self, name: typing.Optional[str]) -> None: ... - def name(self) -> str: ... - def setAddress(self, address: QBluetoothAddress) -> None: ... - def address(self) -> QBluetoothAddress: ... - - -class QBluetoothLocalDevice(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QBluetoothLocalDevice.Error - PairingError = ... # type: QBluetoothLocalDevice.Error - MissingPermissionsError = ... # type: QBluetoothLocalDevice.Error - UnknownError = ... # type: QBluetoothLocalDevice.Error - - class HostMode(enum.Enum): - HostPoweredOff = ... # type: QBluetoothLocalDevice.HostMode - HostConnectable = ... # type: QBluetoothLocalDevice.HostMode - HostDiscoverable = ... # type: QBluetoothLocalDevice.HostMode - HostDiscoverableLimitedInquiry = ... # type: QBluetoothLocalDevice.HostMode - - class Pairing(enum.Enum): - Unpaired = ... # type: QBluetoothLocalDevice.Pairing - Paired = ... # type: QBluetoothLocalDevice.Pairing - AuthorizedPaired = ... # type: QBluetoothLocalDevice.Pairing - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, address: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - deviceDisconnected: typing.ClassVar[QtCore.pyqtSignal] - deviceConnected: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - pairingFinished: typing.ClassVar[QtCore.pyqtSignal] - hostModeStateChanged: typing.ClassVar[QtCore.pyqtSignal] - def connectedDevices(self) -> typing.List[QBluetoothAddress]: ... - @staticmethod - def allDevices() -> typing.List[QBluetoothHostInfo]: ... - def address(self) -> QBluetoothAddress: ... - def name(self) -> str: ... - def powerOn(self) -> None: ... - def hostMode(self) -> 'QBluetoothLocalDevice.HostMode': ... - def setHostMode(self, mode: 'QBluetoothLocalDevice.HostMode') -> None: ... - def pairingStatus(self, address: QBluetoothAddress) -> 'QBluetoothLocalDevice.Pairing': ... - def requestPairing(self, address: QBluetoothAddress, pairing: 'QBluetoothLocalDevice.Pairing') -> None: ... - def isValid(self) -> bool: ... - - -class QBluetoothServer(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QBluetoothServer.Error - UnknownError = ... # type: QBluetoothServer.Error - PoweredOffError = ... # type: QBluetoothServer.Error - InputOutputError = ... # type: QBluetoothServer.Error - ServiceAlreadyRegisteredError = ... # type: QBluetoothServer.Error - UnsupportedProtocolError = ... # type: QBluetoothServer.Error - MissingPermissionsError = ... # type: QBluetoothServer.Error - - def __init__(self, serverType: 'QBluetoothServiceInfo.Protocol', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - newConnection: typing.ClassVar[QtCore.pyqtSignal] - def error(self) -> 'QBluetoothServer.Error': ... - def serverType(self) -> 'QBluetoothServiceInfo.Protocol': ... - def securityFlags(self) -> QBluetooth.Security: ... - def setSecurityFlags(self, security: QBluetooth.Security) -> None: ... - def serverPort(self) -> int: ... - def serverAddress(self) -> QBluetoothAddress: ... - def nextPendingConnection(self) -> typing.Optional['QBluetoothSocket']: ... - def hasPendingConnections(self) -> bool: ... - def maxPendingConnections(self) -> int: ... - def setMaxPendingConnections(self, numConnections: int) -> None: ... - def isListening(self) -> bool: ... - @typing.overload - def listen(self, address: QBluetoothAddress = ..., port: int = ...) -> bool: ... - @typing.overload - def listen(self, uuid: 'QBluetoothUuid', serviceName: typing.Optional[str] = ...) -> 'QBluetoothServiceInfo': ... - def close(self) -> None: ... - - -class QBluetoothServiceDiscoveryAgent(QtCore.QObject): - - class DiscoveryMode(enum.Enum): - MinimalDiscovery = ... # type: QBluetoothServiceDiscoveryAgent.DiscoveryMode - FullDiscovery = ... # type: QBluetoothServiceDiscoveryAgent.DiscoveryMode - - class Error(enum.Enum): - NoError = ... # type: QBluetoothServiceDiscoveryAgent.Error - InputOutputError = ... # type: QBluetoothServiceDiscoveryAgent.Error - PoweredOffError = ... # type: QBluetoothServiceDiscoveryAgent.Error - InvalidBluetoothAdapterError = ... # type: QBluetoothServiceDiscoveryAgent.Error - MissingPermissionsError = ... # type: QBluetoothServiceDiscoveryAgent.Error - UnknownError = ... # type: QBluetoothServiceDiscoveryAgent.Error - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, deviceAdapter: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - canceled: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - serviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] - def clear(self) -> None: ... - def stop(self) -> None: ... - def start(self, mode: 'QBluetoothServiceDiscoveryAgent.DiscoveryMode' = ...) -> None: ... - def remoteAddress(self) -> QBluetoothAddress: ... - def setRemoteAddress(self, address: QBluetoothAddress) -> bool: ... - def uuidFilter(self) -> typing.List['QBluetoothUuid']: ... - @typing.overload - def setUuidFilter(self, uuids: typing.Iterable['QBluetoothUuid']) -> None: ... - @typing.overload - def setUuidFilter(self, uuid: 'QBluetoothUuid') -> None: ... - def discoveredServices(self) -> typing.List['QBluetoothServiceInfo']: ... - def errorString(self) -> str: ... - def error(self) -> 'QBluetoothServiceDiscoveryAgent.Error': ... - def isActive(self) -> bool: ... - - -class QBluetoothServiceInfo(PyQt6.sip.simplewrapper): - - class Protocol(enum.Enum): - UnknownProtocol = ... # type: QBluetoothServiceInfo.Protocol - L2capProtocol = ... # type: QBluetoothServiceInfo.Protocol - RfcommProtocol = ... # type: QBluetoothServiceInfo.Protocol - - class AttributeId(enum.Enum): - ServiceRecordHandle = ... # type: QBluetoothServiceInfo.AttributeId - ServiceClassIds = ... # type: QBluetoothServiceInfo.AttributeId - ServiceRecordState = ... # type: QBluetoothServiceInfo.AttributeId - ServiceId = ... # type: QBluetoothServiceInfo.AttributeId - ProtocolDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId - BrowseGroupList = ... # type: QBluetoothServiceInfo.AttributeId - LanguageBaseAttributeIdList = ... # type: QBluetoothServiceInfo.AttributeId - ServiceInfoTimeToLive = ... # type: QBluetoothServiceInfo.AttributeId - ServiceAvailability = ... # type: QBluetoothServiceInfo.AttributeId - BluetoothProfileDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId - DocumentationUrl = ... # type: QBluetoothServiceInfo.AttributeId - ClientExecutableUrl = ... # type: QBluetoothServiceInfo.AttributeId - IconUrl = ... # type: QBluetoothServiceInfo.AttributeId - AdditionalProtocolDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId - PrimaryLanguageBase = ... # type: QBluetoothServiceInfo.AttributeId - ServiceName = ... # type: QBluetoothServiceInfo.AttributeId - ServiceDescription = ... # type: QBluetoothServiceInfo.AttributeId - ServiceProvider = ... # type: QBluetoothServiceInfo.AttributeId - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QBluetoothServiceInfo') -> None: ... - - def serviceClassUuids(self) -> typing.List['QBluetoothUuid']: ... - def serviceUuid(self) -> 'QBluetoothUuid': ... - def setServiceUuid(self, uuid: 'QBluetoothUuid') -> None: ... - def serviceAvailability(self) -> int: ... - def setServiceAvailability(self, availability: int) -> None: ... - def serviceProvider(self) -> str: ... - def setServiceProvider(self, provider: typing.Optional[str]) -> None: ... - def serviceDescription(self) -> str: ... - def setServiceDescription(self, description: typing.Optional[str]) -> None: ... - def serviceName(self) -> str: ... - def setServiceName(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def setAttribute(self, attributeId: int, value: 'QBluetoothUuid') -> None: ... - @typing.overload - def setAttribute(self, attributeId: int, value: typing.Iterable[typing.Any]) -> None: ... - @typing.overload - def setAttribute(self, attributeId: int, value: typing.Any) -> None: ... - def unregisterService(self) -> bool: ... - def registerService(self, localAdapter: QBluetoothAddress = ...) -> bool: ... - def isRegistered(self) -> bool: ... - def protocolDescriptor(self, protocol: 'QBluetoothUuid.ProtocolUuid') -> typing.List[typing.Any]: ... - def serverChannel(self) -> int: ... - def protocolServiceMultiplexer(self) -> int: ... - def socketProtocol(self) -> 'QBluetoothServiceInfo.Protocol': ... - def removeAttribute(self, attributeId: int) -> None: ... - def contains(self, attributeId: int) -> bool: ... - def attributes(self) -> typing.List[int]: ... - def attribute(self, attributeId: int) -> typing.Any: ... - def device(self) -> QBluetoothDeviceInfo: ... - def setDevice(self, info: QBluetoothDeviceInfo) -> None: ... - def isComplete(self) -> bool: ... - def isValid(self) -> bool: ... - - -class QBluetoothSocket(QtCore.QIODevice): - - class SocketError(enum.Enum): - NoSocketError = ... # type: QBluetoothSocket.SocketError - UnknownSocketError = ... # type: QBluetoothSocket.SocketError - RemoteHostClosedError = ... # type: QBluetoothSocket.SocketError - HostNotFoundError = ... # type: QBluetoothSocket.SocketError - ServiceNotFoundError = ... # type: QBluetoothSocket.SocketError - NetworkError = ... # type: QBluetoothSocket.SocketError - UnsupportedProtocolError = ... # type: QBluetoothSocket.SocketError - OperationError = ... # type: QBluetoothSocket.SocketError - MissingPermissionsError = ... # type: QBluetoothSocket.SocketError - - class SocketState(enum.Enum): - UnconnectedState = ... # type: QBluetoothSocket.SocketState - ServiceLookupState = ... # type: QBluetoothSocket.SocketState - ConnectingState = ... # type: QBluetoothSocket.SocketState - ConnectedState = ... # type: QBluetoothSocket.SocketState - BoundState = ... # type: QBluetoothSocket.SocketState - ClosingState = ... # type: QBluetoothSocket.SocketState - ListeningState = ... # type: QBluetoothSocket.SocketState - - @typing.overload - def __init__(self, socketType: QBluetoothServiceInfo.Protocol, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def preferredSecurityFlags(self) -> QBluetooth.Security: ... - def setPreferredSecurityFlags(self, flags: QBluetooth.Security) -> None: ... - def doDeviceDiscovery(self, service: QBluetoothServiceInfo, openMode: QtCore.QIODeviceBase.OpenModeFlag) -> None: ... - def setSocketError(self, error: 'QBluetoothSocket.SocketError') -> None: ... - def setSocketState(self, state: 'QBluetoothSocket.SocketState') -> None: ... - def writeData(self, data: typing.Optional[PyQt6.sip.array[bytes]]) -> int: ... - def readData(self, maxlen: int) -> bytes: ... - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - connected: typing.ClassVar[QtCore.pyqtSignal] - def errorString(self) -> str: ... - def error(self) -> 'QBluetoothSocket.SocketError': ... - def state(self) -> 'QBluetoothSocket.SocketState': ... - def socketType(self) -> QBluetoothServiceInfo.Protocol: ... - def socketDescriptor(self) -> int: ... - def setSocketDescriptor(self, socketDescriptor: int, socketType: QBluetoothServiceInfo.Protocol, state: 'QBluetoothSocket.SocketState' = ..., mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> bool: ... - def peerPort(self) -> int: ... - def peerAddress(self) -> QBluetoothAddress: ... - def peerName(self) -> str: ... - def localPort(self) -> int: ... - def localAddress(self) -> QBluetoothAddress: ... - def localName(self) -> str: ... - def disconnectFromService(self) -> None: ... - @typing.overload - def connectToService(self, address: QBluetoothAddress, uuid: 'QBluetoothUuid.ServiceClassUuid', mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def connectToService(self, address: QBluetoothAddress, port: int, mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def connectToService(self, address: QBluetoothAddress, uuid: 'QBluetoothUuid', mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def connectToService(self, service: QBluetoothServiceInfo, mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - def canReadLine(self) -> bool: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def isSequential(self) -> bool: ... - def close(self) -> None: ... - def abort(self) -> None: ... - - -class QBluetoothUuid(QtCore.QUuid): - - class DescriptorType(enum.Enum): - UnknownDescriptorType = ... # type: QBluetoothUuid.DescriptorType - CharacteristicExtendedProperties = ... # type: QBluetoothUuid.DescriptorType - CharacteristicUserDescription = ... # type: QBluetoothUuid.DescriptorType - ClientCharacteristicConfiguration = ... # type: QBluetoothUuid.DescriptorType - ServerCharacteristicConfiguration = ... # type: QBluetoothUuid.DescriptorType - CharacteristicPresentationFormat = ... # type: QBluetoothUuid.DescriptorType - CharacteristicAggregateFormat = ... # type: QBluetoothUuid.DescriptorType - ValidRange = ... # type: QBluetoothUuid.DescriptorType - ExternalReportReference = ... # type: QBluetoothUuid.DescriptorType - ReportReference = ... # type: QBluetoothUuid.DescriptorType - EnvironmentalSensingConfiguration = ... # type: QBluetoothUuid.DescriptorType - EnvironmentalSensingMeasurement = ... # type: QBluetoothUuid.DescriptorType - EnvironmentalSensingTriggerSetting = ... # type: QBluetoothUuid.DescriptorType - - class CharacteristicType(enum.Enum): - DeviceName = ... # type: QBluetoothUuid.CharacteristicType - Appearance = ... # type: QBluetoothUuid.CharacteristicType - PeripheralPrivacyFlag = ... # type: QBluetoothUuid.CharacteristicType - ReconnectionAddress = ... # type: QBluetoothUuid.CharacteristicType - PeripheralPreferredConnectionParameters = ... # type: QBluetoothUuid.CharacteristicType - ServiceChanged = ... # type: QBluetoothUuid.CharacteristicType - AlertLevel = ... # type: QBluetoothUuid.CharacteristicType - TxPowerLevel = ... # type: QBluetoothUuid.CharacteristicType - DateTime = ... # type: QBluetoothUuid.CharacteristicType - DayOfWeek = ... # type: QBluetoothUuid.CharacteristicType - DayDateTime = ... # type: QBluetoothUuid.CharacteristicType - ExactTime256 = ... # type: QBluetoothUuid.CharacteristicType - DSTOffset = ... # type: QBluetoothUuid.CharacteristicType - TimeZone = ... # type: QBluetoothUuid.CharacteristicType - LocalTimeInformation = ... # type: QBluetoothUuid.CharacteristicType - TimeWithDST = ... # type: QBluetoothUuid.CharacteristicType - TimeAccuracy = ... # type: QBluetoothUuid.CharacteristicType - TimeSource = ... # type: QBluetoothUuid.CharacteristicType - ReferenceTimeInformation = ... # type: QBluetoothUuid.CharacteristicType - TimeUpdateControlPoint = ... # type: QBluetoothUuid.CharacteristicType - TimeUpdateState = ... # type: QBluetoothUuid.CharacteristicType - GlucoseMeasurement = ... # type: QBluetoothUuid.CharacteristicType - BatteryLevel = ... # type: QBluetoothUuid.CharacteristicType - TemperatureMeasurement = ... # type: QBluetoothUuid.CharacteristicType - TemperatureType = ... # type: QBluetoothUuid.CharacteristicType - IntermediateTemperature = ... # type: QBluetoothUuid.CharacteristicType - MeasurementInterval = ... # type: QBluetoothUuid.CharacteristicType - BootKeyboardInputReport = ... # type: QBluetoothUuid.CharacteristicType - SystemID = ... # type: QBluetoothUuid.CharacteristicType - ModelNumberString = ... # type: QBluetoothUuid.CharacteristicType - SerialNumberString = ... # type: QBluetoothUuid.CharacteristicType - FirmwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType - HardwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType - SoftwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType - ManufacturerNameString = ... # type: QBluetoothUuid.CharacteristicType - IEEE1107320601RegulatoryCertificationDataList = ... # type: QBluetoothUuid.CharacteristicType - CurrentTime = ... # type: QBluetoothUuid.CharacteristicType - MagneticDeclination = ... # type: QBluetoothUuid.CharacteristicType - ScanRefresh = ... # type: QBluetoothUuid.CharacteristicType - BootKeyboardOutputReport = ... # type: QBluetoothUuid.CharacteristicType - BootMouseInputReport = ... # type: QBluetoothUuid.CharacteristicType - GlucoseMeasurementContext = ... # type: QBluetoothUuid.CharacteristicType - BloodPressureMeasurement = ... # type: QBluetoothUuid.CharacteristicType - IntermediateCuffPressure = ... # type: QBluetoothUuid.CharacteristicType - HeartRateMeasurement = ... # type: QBluetoothUuid.CharacteristicType - BodySensorLocation = ... # type: QBluetoothUuid.CharacteristicType - HeartRateControlPoint = ... # type: QBluetoothUuid.CharacteristicType - AlertStatus = ... # type: QBluetoothUuid.CharacteristicType - RingerControlPoint = ... # type: QBluetoothUuid.CharacteristicType - RingerSetting = ... # type: QBluetoothUuid.CharacteristicType - AlertCategoryIDBitMask = ... # type: QBluetoothUuid.CharacteristicType - AlertCategoryID = ... # type: QBluetoothUuid.CharacteristicType - AlertNotificationControlPoint = ... # type: QBluetoothUuid.CharacteristicType - UnreadAlertStatus = ... # type: QBluetoothUuid.CharacteristicType - NewAlert = ... # type: QBluetoothUuid.CharacteristicType - SupportedNewAlertCategory = ... # type: QBluetoothUuid.CharacteristicType - SupportedUnreadAlertCategory = ... # type: QBluetoothUuid.CharacteristicType - BloodPressureFeature = ... # type: QBluetoothUuid.CharacteristicType - HIDInformation = ... # type: QBluetoothUuid.CharacteristicType - ReportMap = ... # type: QBluetoothUuid.CharacteristicType - HIDControlPoint = ... # type: QBluetoothUuid.CharacteristicType - Report = ... # type: QBluetoothUuid.CharacteristicType - ProtocolMode = ... # type: QBluetoothUuid.CharacteristicType - ScanIntervalWindow = ... # type: QBluetoothUuid.CharacteristicType - PnPID = ... # type: QBluetoothUuid.CharacteristicType - GlucoseFeature = ... # type: QBluetoothUuid.CharacteristicType - RecordAccessControlPoint = ... # type: QBluetoothUuid.CharacteristicType - RSCMeasurement = ... # type: QBluetoothUuid.CharacteristicType - RSCFeature = ... # type: QBluetoothUuid.CharacteristicType - SCControlPoint = ... # type: QBluetoothUuid.CharacteristicType - CSCMeasurement = ... # type: QBluetoothUuid.CharacteristicType - CSCFeature = ... # type: QBluetoothUuid.CharacteristicType - SensorLocation = ... # type: QBluetoothUuid.CharacteristicType - CyclingPowerMeasurement = ... # type: QBluetoothUuid.CharacteristicType - CyclingPowerVector = ... # type: QBluetoothUuid.CharacteristicType - CyclingPowerFeature = ... # type: QBluetoothUuid.CharacteristicType - CyclingPowerControlPoint = ... # type: QBluetoothUuid.CharacteristicType - LocationAndSpeed = ... # type: QBluetoothUuid.CharacteristicType - Navigation = ... # type: QBluetoothUuid.CharacteristicType - PositionQuality = ... # type: QBluetoothUuid.CharacteristicType - LNFeature = ... # type: QBluetoothUuid.CharacteristicType - LNControlPoint = ... # type: QBluetoothUuid.CharacteristicType - Elevation = ... # type: QBluetoothUuid.CharacteristicType - Pressure = ... # type: QBluetoothUuid.CharacteristicType - Temperature = ... # type: QBluetoothUuid.CharacteristicType - Humidity = ... # type: QBluetoothUuid.CharacteristicType - TrueWindSpeed = ... # type: QBluetoothUuid.CharacteristicType - TrueWindDirection = ... # type: QBluetoothUuid.CharacteristicType - ApparentWindSpeed = ... # type: QBluetoothUuid.CharacteristicType - ApparentWindDirection = ... # type: QBluetoothUuid.CharacteristicType - GustFactor = ... # type: QBluetoothUuid.CharacteristicType - PollenConcentration = ... # type: QBluetoothUuid.CharacteristicType - UVIndex = ... # type: QBluetoothUuid.CharacteristicType - Irradiance = ... # type: QBluetoothUuid.CharacteristicType - Rainfall = ... # type: QBluetoothUuid.CharacteristicType - WindChill = ... # type: QBluetoothUuid.CharacteristicType - HeatIndex = ... # type: QBluetoothUuid.CharacteristicType - DewPoint = ... # type: QBluetoothUuid.CharacteristicType - DescriptorValueChanged = ... # type: QBluetoothUuid.CharacteristicType - AerobicHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType - AerobicThreshold = ... # type: QBluetoothUuid.CharacteristicType - Age = ... # type: QBluetoothUuid.CharacteristicType - AnaerobicHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType - AnaerobicHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType - AnaerobicThreshold = ... # type: QBluetoothUuid.CharacteristicType - AerobicHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType - DateOfBirth = ... # type: QBluetoothUuid.CharacteristicType - DateOfThresholdAssessment = ... # type: QBluetoothUuid.CharacteristicType - EmailAddress = ... # type: QBluetoothUuid.CharacteristicType - FatBurnHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType - FatBurnHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType - FirstName = ... # type: QBluetoothUuid.CharacteristicType - FiveZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType - Gender = ... # type: QBluetoothUuid.CharacteristicType - HeartRateMax = ... # type: QBluetoothUuid.CharacteristicType - Height = ... # type: QBluetoothUuid.CharacteristicType - HipCircumference = ... # type: QBluetoothUuid.CharacteristicType - LastName = ... # type: QBluetoothUuid.CharacteristicType - MaximumRecommendedHeartRate = ... # type: QBluetoothUuid.CharacteristicType - RestingHeartRate = ... # type: QBluetoothUuid.CharacteristicType - SportTypeForAerobicAnaerobicThresholds = ... # type: QBluetoothUuid.CharacteristicType - ThreeZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType - TwoZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType - VO2Max = ... # type: QBluetoothUuid.CharacteristicType - WaistCircumference = ... # type: QBluetoothUuid.CharacteristicType - Weight = ... # type: QBluetoothUuid.CharacteristicType - DatabaseChangeIncrement = ... # type: QBluetoothUuid.CharacteristicType - UserIndex = ... # type: QBluetoothUuid.CharacteristicType - BodyCompositionFeature = ... # type: QBluetoothUuid.CharacteristicType - BodyCompositionMeasurement = ... # type: QBluetoothUuid.CharacteristicType - WeightMeasurement = ... # type: QBluetoothUuid.CharacteristicType - WeightScaleFeature = ... # type: QBluetoothUuid.CharacteristicType - UserControlPoint = ... # type: QBluetoothUuid.CharacteristicType - MagneticFluxDensity2D = ... # type: QBluetoothUuid.CharacteristicType - MagneticFluxDensity3D = ... # type: QBluetoothUuid.CharacteristicType - Language = ... # type: QBluetoothUuid.CharacteristicType - BarometricPressureTrend = ... # type: QBluetoothUuid.CharacteristicType - - class ServiceClassUuid(enum.Enum): - ServiceDiscoveryServer = ... # type: QBluetoothUuid.ServiceClassUuid - BrowseGroupDescriptor = ... # type: QBluetoothUuid.ServiceClassUuid - PublicBrowseGroup = ... # type: QBluetoothUuid.ServiceClassUuid - SerialPort = ... # type: QBluetoothUuid.ServiceClassUuid - LANAccessUsingPPP = ... # type: QBluetoothUuid.ServiceClassUuid - DialupNetworking = ... # type: QBluetoothUuid.ServiceClassUuid - IrMCSync = ... # type: QBluetoothUuid.ServiceClassUuid - ObexObjectPush = ... # type: QBluetoothUuid.ServiceClassUuid - OBEXFileTransfer = ... # type: QBluetoothUuid.ServiceClassUuid - IrMCSyncCommand = ... # type: QBluetoothUuid.ServiceClassUuid - Headset = ... # type: QBluetoothUuid.ServiceClassUuid - AudioSource = ... # type: QBluetoothUuid.ServiceClassUuid - AudioSink = ... # type: QBluetoothUuid.ServiceClassUuid - AV_RemoteControlTarget = ... # type: QBluetoothUuid.ServiceClassUuid - AdvancedAudioDistribution = ... # type: QBluetoothUuid.ServiceClassUuid - AV_RemoteControl = ... # type: QBluetoothUuid.ServiceClassUuid - AV_RemoteControlController = ... # type: QBluetoothUuid.ServiceClassUuid - HeadsetAG = ... # type: QBluetoothUuid.ServiceClassUuid - PANU = ... # type: QBluetoothUuid.ServiceClassUuid - NAP = ... # type: QBluetoothUuid.ServiceClassUuid - GN = ... # type: QBluetoothUuid.ServiceClassUuid - DirectPrinting = ... # type: QBluetoothUuid.ServiceClassUuid - ReferencePrinting = ... # type: QBluetoothUuid.ServiceClassUuid - BasicImage = ... # type: QBluetoothUuid.ServiceClassUuid - ImagingResponder = ... # type: QBluetoothUuid.ServiceClassUuid - ImagingAutomaticArchive = ... # type: QBluetoothUuid.ServiceClassUuid - ImagingReferenceObjects = ... # type: QBluetoothUuid.ServiceClassUuid - Handsfree = ... # type: QBluetoothUuid.ServiceClassUuid - HandsfreeAudioGateway = ... # type: QBluetoothUuid.ServiceClassUuid - DirectPrintingReferenceObjectsService = ... # type: QBluetoothUuid.ServiceClassUuid - ReflectedUI = ... # type: QBluetoothUuid.ServiceClassUuid - BasicPrinting = ... # type: QBluetoothUuid.ServiceClassUuid - PrintingStatus = ... # type: QBluetoothUuid.ServiceClassUuid - HumanInterfaceDeviceService = ... # type: QBluetoothUuid.ServiceClassUuid - HardcopyCableReplacement = ... # type: QBluetoothUuid.ServiceClassUuid - HCRPrint = ... # type: QBluetoothUuid.ServiceClassUuid - HCRScan = ... # type: QBluetoothUuid.ServiceClassUuid - SIMAccess = ... # type: QBluetoothUuid.ServiceClassUuid - PhonebookAccessPCE = ... # type: QBluetoothUuid.ServiceClassUuid - PhonebookAccessPSE = ... # type: QBluetoothUuid.ServiceClassUuid - PhonebookAccess = ... # type: QBluetoothUuid.ServiceClassUuid - HeadsetHS = ... # type: QBluetoothUuid.ServiceClassUuid - MessageAccessServer = ... # type: QBluetoothUuid.ServiceClassUuid - MessageNotificationServer = ... # type: QBluetoothUuid.ServiceClassUuid - MessageAccessProfile = ... # type: QBluetoothUuid.ServiceClassUuid - GNSS = ... # type: QBluetoothUuid.ServiceClassUuid - GNSSServer = ... # type: QBluetoothUuid.ServiceClassUuid - Display3D = ... # type: QBluetoothUuid.ServiceClassUuid - Glasses3D = ... # type: QBluetoothUuid.ServiceClassUuid - Synchronization3D = ... # type: QBluetoothUuid.ServiceClassUuid - MPSProfile = ... # type: QBluetoothUuid.ServiceClassUuid - MPSService = ... # type: QBluetoothUuid.ServiceClassUuid - PnPInformation = ... # type: QBluetoothUuid.ServiceClassUuid - GenericNetworking = ... # type: QBluetoothUuid.ServiceClassUuid - GenericFileTransfer = ... # type: QBluetoothUuid.ServiceClassUuid - GenericAudio = ... # type: QBluetoothUuid.ServiceClassUuid - GenericTelephony = ... # type: QBluetoothUuid.ServiceClassUuid - VideoSource = ... # type: QBluetoothUuid.ServiceClassUuid - VideoSink = ... # type: QBluetoothUuid.ServiceClassUuid - VideoDistribution = ... # type: QBluetoothUuid.ServiceClassUuid - HDP = ... # type: QBluetoothUuid.ServiceClassUuid - HDPSource = ... # type: QBluetoothUuid.ServiceClassUuid - HDPSink = ... # type: QBluetoothUuid.ServiceClassUuid - GenericAccess = ... # type: QBluetoothUuid.ServiceClassUuid - GenericAttribute = ... # type: QBluetoothUuid.ServiceClassUuid - ImmediateAlert = ... # type: QBluetoothUuid.ServiceClassUuid - LinkLoss = ... # type: QBluetoothUuid.ServiceClassUuid - TxPower = ... # type: QBluetoothUuid.ServiceClassUuid - CurrentTimeService = ... # type: QBluetoothUuid.ServiceClassUuid - ReferenceTimeUpdateService = ... # type: QBluetoothUuid.ServiceClassUuid - NextDSTChangeService = ... # type: QBluetoothUuid.ServiceClassUuid - Glucose = ... # type: QBluetoothUuid.ServiceClassUuid - HealthThermometer = ... # type: QBluetoothUuid.ServiceClassUuid - DeviceInformation = ... # type: QBluetoothUuid.ServiceClassUuid - HeartRate = ... # type: QBluetoothUuid.ServiceClassUuid - PhoneAlertStatusService = ... # type: QBluetoothUuid.ServiceClassUuid - BatteryService = ... # type: QBluetoothUuid.ServiceClassUuid - BloodPressure = ... # type: QBluetoothUuid.ServiceClassUuid - AlertNotificationService = ... # type: QBluetoothUuid.ServiceClassUuid - HumanInterfaceDevice = ... # type: QBluetoothUuid.ServiceClassUuid - ScanParameters = ... # type: QBluetoothUuid.ServiceClassUuid - RunningSpeedAndCadence = ... # type: QBluetoothUuid.ServiceClassUuid - CyclingSpeedAndCadence = ... # type: QBluetoothUuid.ServiceClassUuid - CyclingPower = ... # type: QBluetoothUuid.ServiceClassUuid - LocationAndNavigation = ... # type: QBluetoothUuid.ServiceClassUuid - EnvironmentalSensing = ... # type: QBluetoothUuid.ServiceClassUuid - BodyComposition = ... # type: QBluetoothUuid.ServiceClassUuid - UserData = ... # type: QBluetoothUuid.ServiceClassUuid - WeightScale = ... # type: QBluetoothUuid.ServiceClassUuid - BondManagement = ... # type: QBluetoothUuid.ServiceClassUuid - ContinuousGlucoseMonitoring = ... # type: QBluetoothUuid.ServiceClassUuid - - class ProtocolUuid(enum.Enum): - Sdp = ... # type: QBluetoothUuid.ProtocolUuid - Udp = ... # type: QBluetoothUuid.ProtocolUuid - Rfcomm = ... # type: QBluetoothUuid.ProtocolUuid - Tcp = ... # type: QBluetoothUuid.ProtocolUuid - TcsBin = ... # type: QBluetoothUuid.ProtocolUuid - TcsAt = ... # type: QBluetoothUuid.ProtocolUuid - Att = ... # type: QBluetoothUuid.ProtocolUuid - Obex = ... # type: QBluetoothUuid.ProtocolUuid - Ip = ... # type: QBluetoothUuid.ProtocolUuid - Ftp = ... # type: QBluetoothUuid.ProtocolUuid - Http = ... # type: QBluetoothUuid.ProtocolUuid - Wsp = ... # type: QBluetoothUuid.ProtocolUuid - Bnep = ... # type: QBluetoothUuid.ProtocolUuid - Upnp = ... # type: QBluetoothUuid.ProtocolUuid - Hidp = ... # type: QBluetoothUuid.ProtocolUuid - HardcopyControlChannel = ... # type: QBluetoothUuid.ProtocolUuid - HardcopyDataChannel = ... # type: QBluetoothUuid.ProtocolUuid - HardcopyNotification = ... # type: QBluetoothUuid.ProtocolUuid - Avctp = ... # type: QBluetoothUuid.ProtocolUuid - Avdtp = ... # type: QBluetoothUuid.ProtocolUuid - Cmtp = ... # type: QBluetoothUuid.ProtocolUuid - UdiCPlain = ... # type: QBluetoothUuid.ProtocolUuid - McapControlChannel = ... # type: QBluetoothUuid.ProtocolUuid - McapDataChannel = ... # type: QBluetoothUuid.ProtocolUuid - L2cap = ... # type: QBluetoothUuid.ProtocolUuid - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid.ProtocolUuid') -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid.ServiceClassUuid') -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid.CharacteristicType') -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid.DescriptorType') -> None: ... - @typing.overload - def __init__(self, uuid: int) -> None: ... - @typing.overload - def __init__(self, uuid: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int], order: QtCore.QSysInfo.Endian = ...) -> None: ... - @typing.overload - def __init__(self, uuid: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, uuid: 'QBluetoothUuid') -> None: ... - @typing.overload - def __init__(self, uuid: QtCore.QUuid) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - @staticmethod - def descriptorToString(uuid: 'QBluetoothUuid.DescriptorType') -> str: ... - @staticmethod - def characteristicToString(uuid: 'QBluetoothUuid.CharacteristicType') -> str: ... - @staticmethod - def protocolToString(uuid: 'QBluetoothUuid.ProtocolUuid') -> str: ... - @staticmethod - def serviceClassToString(uuid: 'QBluetoothUuid.ServiceClassUuid') -> str: ... - def toUInt128(self) -> typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]: ... - def toUInt32(self) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toUInt16(self) -> typing.Tuple[int, typing.Optional[bool]]: ... - def minimumSize(self) -> int: ... - - -class QLowEnergyAdvertisingData(PyQt6.sip.simplewrapper): - - class Discoverability(enum.Enum): - DiscoverabilityNone = ... # type: QLowEnergyAdvertisingData.Discoverability - DiscoverabilityLimited = ... # type: QLowEnergyAdvertisingData.Discoverability - DiscoverabilityGeneral = ... # type: QLowEnergyAdvertisingData.Discoverability - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyAdvertisingData') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyAdvertisingData') -> None: ... - def rawData(self) -> QtCore.QByteArray: ... - def setRawData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def services(self) -> typing.List[QBluetoothUuid]: ... - def setServices(self, services: typing.Iterable[QBluetoothUuid]) -> None: ... - def discoverability(self) -> 'QLowEnergyAdvertisingData.Discoverability': ... - def setDiscoverability(self, mode: 'QLowEnergyAdvertisingData.Discoverability') -> None: ... - def includePowerLevel(self) -> bool: ... - def setIncludePowerLevel(self, doInclude: bool) -> None: ... - def manufacturerData(self) -> QtCore.QByteArray: ... - def manufacturerId(self) -> int: ... - def setManufacturerData(self, id: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @staticmethod - def invalidManufacturerId() -> int: ... - def localName(self) -> str: ... - def setLocalName(self, name: typing.Optional[str]) -> None: ... - - -class QLowEnergyAdvertisingParameters(PyQt6.sip.simplewrapper): - - class FilterPolicy(enum.Enum): - IgnoreWhiteList = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy - UseWhiteListForScanning = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy - UseWhiteListForConnecting = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy - UseWhiteListForScanningAndConnecting = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy - - class Mode(enum.Enum): - AdvInd = ... # type: QLowEnergyAdvertisingParameters.Mode - AdvScanInd = ... # type: QLowEnergyAdvertisingParameters.Mode - AdvNonConnInd = ... # type: QLowEnergyAdvertisingParameters.Mode - - class AddressInfo(PyQt6.sip.simplewrapper): - - address = ... # type: QBluetoothAddress - type = ... # type: 'QLowEnergyController.RemoteAddressType' - - @typing.overload - def __init__(self, addr: QBluetoothAddress, t: 'QLowEnergyController.RemoteAddressType') -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QLowEnergyAdvertisingParameters.AddressInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyAdvertisingParameters') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyAdvertisingParameters') -> None: ... - def maximumInterval(self) -> int: ... - def minimumInterval(self) -> int: ... - def setInterval(self, minimum: int, maximum: int) -> None: ... - def filterPolicy(self) -> 'QLowEnergyAdvertisingParameters.FilterPolicy': ... - def whiteList(self) -> typing.List['QLowEnergyAdvertisingParameters.AddressInfo']: ... - def setWhiteList(self, whiteList: typing.Iterable['QLowEnergyAdvertisingParameters.AddressInfo'], policy: 'QLowEnergyAdvertisingParameters.FilterPolicy') -> None: ... - def mode(self) -> 'QLowEnergyAdvertisingParameters.Mode': ... - def setMode(self, mode: 'QLowEnergyAdvertisingParameters.Mode') -> None: ... - - -class QLowEnergyCharacteristic(PyQt6.sip.simplewrapper): - - class PropertyType(enum.Flag): - Unknown = ... # type: QLowEnergyCharacteristic.PropertyType - Broadcasting = ... # type: QLowEnergyCharacteristic.PropertyType - Read = ... # type: QLowEnergyCharacteristic.PropertyType - WriteNoResponse = ... # type: QLowEnergyCharacteristic.PropertyType - Write = ... # type: QLowEnergyCharacteristic.PropertyType - Notify = ... # type: QLowEnergyCharacteristic.PropertyType - Indicate = ... # type: QLowEnergyCharacteristic.PropertyType - WriteSigned = ... # type: QLowEnergyCharacteristic.PropertyType - ExtendedProperty = ... # type: QLowEnergyCharacteristic.PropertyType - - CCCDDisable = ... # type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] - CCCDEnableIndication = ... # type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] - CCCDEnableNotification = ... # type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyCharacteristic') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def clientCharacteristicConfiguration(self) -> 'QLowEnergyDescriptor': ... - def isValid(self) -> bool: ... - def descriptors(self) -> typing.List['QLowEnergyDescriptor']: ... - def descriptor(self, uuid: QBluetoothUuid) -> 'QLowEnergyDescriptor': ... - def properties(self) -> 'QLowEnergyCharacteristic.PropertyType': ... - def value(self) -> QtCore.QByteArray: ... - def uuid(self) -> QBluetoothUuid: ... - def name(self) -> str: ... - - -class QLowEnergyCharacteristicData(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyCharacteristicData') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyCharacteristicData') -> None: ... - def isValid(self) -> bool: ... - def maximumValueLength(self) -> int: ... - def minimumValueLength(self) -> int: ... - def setValueLength(self, minimum: int, maximum: int) -> None: ... - def writeConstraints(self) -> QBluetooth.AttAccessConstraint: ... - def setWriteConstraints(self, constraints: QBluetooth.AttAccessConstraint) -> None: ... - def readConstraints(self) -> QBluetooth.AttAccessConstraint: ... - def setReadConstraints(self, constraints: QBluetooth.AttAccessConstraint) -> None: ... - def addDescriptor(self, descriptor: 'QLowEnergyDescriptorData') -> None: ... - def setDescriptors(self, descriptors: typing.Iterable['QLowEnergyDescriptorData']) -> None: ... - def descriptors(self) -> typing.List['QLowEnergyDescriptorData']: ... - def setProperties(self, properties: QLowEnergyCharacteristic.PropertyType) -> None: ... - def properties(self) -> QLowEnergyCharacteristic.PropertyType: ... - def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def value(self) -> QtCore.QByteArray: ... - def setUuid(self, uuid: QBluetoothUuid) -> None: ... - def uuid(self) -> QBluetoothUuid: ... - - -class QLowEnergyConnectionParameters(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyConnectionParameters') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyConnectionParameters') -> None: ... - def supervisionTimeout(self) -> int: ... - def setSupervisionTimeout(self, timeout: int) -> None: ... - def latency(self) -> int: ... - def setLatency(self, latency: int) -> None: ... - def maximumInterval(self) -> float: ... - def minimumInterval(self) -> float: ... - def setIntervalRange(self, minimum: float, maximum: float) -> None: ... - - -class QLowEnergyController(QtCore.QObject): - - class Role(enum.Enum): - CentralRole = ... # type: QLowEnergyController.Role - PeripheralRole = ... # type: QLowEnergyController.Role - - class RemoteAddressType(enum.Enum): - PublicAddress = ... # type: QLowEnergyController.RemoteAddressType - RandomAddress = ... # type: QLowEnergyController.RemoteAddressType - - class ControllerState(enum.Enum): - UnconnectedState = ... # type: QLowEnergyController.ControllerState - ConnectingState = ... # type: QLowEnergyController.ControllerState - ConnectedState = ... # type: QLowEnergyController.ControllerState - DiscoveringState = ... # type: QLowEnergyController.ControllerState - DiscoveredState = ... # type: QLowEnergyController.ControllerState - ClosingState = ... # type: QLowEnergyController.ControllerState - AdvertisingState = ... # type: QLowEnergyController.ControllerState - - class Error(enum.Enum): - NoError = ... # type: QLowEnergyController.Error - UnknownError = ... # type: QLowEnergyController.Error - UnknownRemoteDeviceError = ... # type: QLowEnergyController.Error - NetworkError = ... # type: QLowEnergyController.Error - InvalidBluetoothAdapterError = ... # type: QLowEnergyController.Error - ConnectionError = ... # type: QLowEnergyController.Error - AdvertisingError = ... # type: QLowEnergyController.Error - RemoteHostClosedError = ... # type: QLowEnergyController.Error - AuthorizationError = ... # type: QLowEnergyController.Error - MissingPermissionsError = ... # type: QLowEnergyController.Error - RssiReadError = ... # type: QLowEnergyController.Error - - rssiRead: typing.ClassVar[QtCore.pyqtSignal] - def readRssi(self) -> None: ... - def remoteDeviceUuid(self) -> QBluetoothUuid: ... - def role(self) -> 'QLowEnergyController.Role': ... - def requestConnectionUpdate(self, parameters: QLowEnergyConnectionParameters) -> None: ... - def addService(self, service: 'QLowEnergyServiceData', parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyService']: ... - def stopAdvertising(self) -> None: ... - def startAdvertising(self, parameters: QLowEnergyAdvertisingParameters, advertisingData: QLowEnergyAdvertisingData, scanResponseData: QLowEnergyAdvertisingData = ...) -> None: ... - @typing.overload - @staticmethod - def createPeripheral(localDevice: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... - @typing.overload - @staticmethod - def createPeripheral(parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... - @typing.overload - @staticmethod - def createCentral(remoteDevice: QBluetoothDeviceInfo, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... - @typing.overload - @staticmethod - def createCentral(remoteDevice: QBluetoothDeviceInfo, localDevice: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... - mtuChanged: typing.ClassVar[QtCore.pyqtSignal] - connectionUpdated: typing.ClassVar[QtCore.pyqtSignal] - discoveryFinished: typing.ClassVar[QtCore.pyqtSignal] - serviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - connected: typing.ClassVar[QtCore.pyqtSignal] - def mtu(self) -> int: ... - def remoteName(self) -> str: ... - def errorString(self) -> str: ... - def error(self) -> 'QLowEnergyController.Error': ... - def createServiceObject(self, service: QBluetoothUuid, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyService']: ... - def services(self) -> typing.List[QBluetoothUuid]: ... - def discoverServices(self) -> None: ... - def disconnectFromDevice(self) -> None: ... - def connectToDevice(self) -> None: ... - def setRemoteAddressType(self, type: 'QLowEnergyController.RemoteAddressType') -> None: ... - def remoteAddressType(self) -> 'QLowEnergyController.RemoteAddressType': ... - def state(self) -> 'QLowEnergyController.ControllerState': ... - def remoteAddress(self) -> QBluetoothAddress: ... - def localAddress(self) -> QBluetoothAddress: ... - - -class QLowEnergyDescriptor(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyDescriptor') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def type(self) -> QBluetoothUuid.DescriptorType: ... - def name(self) -> str: ... - def uuid(self) -> QBluetoothUuid: ... - def value(self) -> QtCore.QByteArray: ... - def isValid(self) -> bool: ... - - -class QLowEnergyDescriptorData(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, uuid: QBluetoothUuid, value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyDescriptorData') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyDescriptorData') -> None: ... - def writeConstraints(self) -> QBluetooth.AttAccessConstraint: ... - def isWritable(self) -> bool: ... - def setWritePermissions(self, writable: bool, constraints: QBluetooth.AttAccessConstraint = ...) -> None: ... - def readConstraints(self) -> QBluetooth.AttAccessConstraint: ... - def isReadable(self) -> bool: ... - def setReadPermissions(self, readable: bool, constraints: QBluetooth.AttAccessConstraint = ...) -> None: ... - def isValid(self) -> bool: ... - def setUuid(self, uuid: QBluetoothUuid) -> None: ... - def uuid(self) -> QBluetoothUuid: ... - def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def value(self) -> QtCore.QByteArray: ... - - -class QLowEnergyService(QtCore.QObject): - - class WriteMode(enum.Enum): - WriteWithResponse = ... # type: QLowEnergyService.WriteMode - WriteWithoutResponse = ... # type: QLowEnergyService.WriteMode - WriteSigned = ... # type: QLowEnergyService.WriteMode - - class ServiceState(enum.Enum): - InvalidService = ... # type: QLowEnergyService.ServiceState - DiscoveryRequired = ... # type: QLowEnergyService.ServiceState - ServiceDiscovered = ... # type: QLowEnergyService.ServiceState - LocalService = ... # type: QLowEnergyService.ServiceState - RemoteService = ... # type: QLowEnergyService.ServiceState - RemoteServiceDiscovering = ... # type: QLowEnergyService.ServiceState - RemoteServiceDiscovered = ... # type: QLowEnergyService.ServiceState - DiscoveringService = ... # type: QLowEnergyService.ServiceState - - class ServiceError(enum.Enum): - NoError = ... # type: QLowEnergyService.ServiceError - OperationError = ... # type: QLowEnergyService.ServiceError - CharacteristicWriteError = ... # type: QLowEnergyService.ServiceError - DescriptorWriteError = ... # type: QLowEnergyService.ServiceError - CharacteristicReadError = ... # type: QLowEnergyService.ServiceError - DescriptorReadError = ... # type: QLowEnergyService.ServiceError - UnknownError = ... # type: QLowEnergyService.ServiceError - - class ServiceType(enum.Flag): - PrimaryService = ... # type: QLowEnergyService.ServiceType - IncludedService = ... # type: QLowEnergyService.ServiceType - - class DiscoveryMode(enum.Enum): - FullDiscovery = ... # type: QLowEnergyService.DiscoveryMode - SkipValueDiscovery = ... # type: QLowEnergyService.DiscoveryMode - - descriptorRead: typing.ClassVar[QtCore.pyqtSignal] - characteristicRead: typing.ClassVar[QtCore.pyqtSignal] - def readDescriptor(self, descriptor: QLowEnergyDescriptor) -> None: ... - def readCharacteristic(self, characteristic: QLowEnergyCharacteristic) -> None: ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - descriptorWritten: typing.ClassVar[QtCore.pyqtSignal] - characteristicWritten: typing.ClassVar[QtCore.pyqtSignal] - characteristicChanged: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def writeDescriptor(self, descriptor: QLowEnergyDescriptor, newValue: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def writeCharacteristic(self, characteristic: QLowEnergyCharacteristic, newValue: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], mode: 'QLowEnergyService.WriteMode' = ...) -> None: ... - @typing.overload - def contains(self, characteristic: QLowEnergyCharacteristic) -> bool: ... - @typing.overload - def contains(self, descriptor: QLowEnergyDescriptor) -> bool: ... - def error(self) -> 'QLowEnergyService.ServiceError': ... - def discoverDetails(self, mode: 'QLowEnergyService.DiscoveryMode' = ...) -> None: ... - def serviceName(self) -> str: ... - def serviceUuid(self) -> QBluetoothUuid: ... - def characteristics(self) -> typing.List[QLowEnergyCharacteristic]: ... - def characteristic(self, uuid: QBluetoothUuid) -> QLowEnergyCharacteristic: ... - def state(self) -> 'QLowEnergyService.ServiceState': ... - def type(self) -> 'QLowEnergyService.ServiceType': ... - def includedServices(self) -> typing.List[QBluetoothUuid]: ... - - -class QLowEnergyServiceData(PyQt6.sip.simplewrapper): - - class ServiceType(enum.Enum): - ServiceTypePrimary = ... # type: QLowEnergyServiceData.ServiceType - ServiceTypeSecondary = ... # type: QLowEnergyServiceData.ServiceType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLowEnergyServiceData') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QLowEnergyServiceData') -> None: ... - def isValid(self) -> bool: ... - def addCharacteristic(self, characteristic: QLowEnergyCharacteristicData) -> None: ... - def setCharacteristics(self, characteristics: typing.Iterable[QLowEnergyCharacteristicData]) -> None: ... - def characteristics(self) -> typing.List[QLowEnergyCharacteristicData]: ... - def addIncludedService(self, service: typing.Optional[QLowEnergyService]) -> None: ... - def setIncludedServices(self, services: typing.Iterable[QLowEnergyService]) -> None: ... - def includedServices(self) -> typing.List[QLowEnergyService]: ... - def setUuid(self, uuid: QBluetoothUuid) -> None: ... - def uuid(self) -> QBluetoothUuid: ... - def setType(self, type: 'QLowEnergyServiceData.ServiceType') -> None: ... - def type(self) -> 'QLowEnergyServiceData.ServiceType': ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so deleted file mode 100644 index 0de8e79..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtCore.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtCore.pyi deleted file mode 100644 index ad593c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtCore.pyi +++ /dev/null @@ -1,9122 +0,0 @@ -# The PEP 484 type hints stub file for the QtCore module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -# Support for QDate, QDateTime and QTime. -import datetime - - -# Support for new-style signals and slots. -class pyqtSignal: - - signatures = ... # type: typing.Tuple[str, ...] - - def __init__(self, *types: typing.Any, name: str = ...) -> None: ... - - @typing.overload - def __get__(self, instance: None, owner: typing.Type['QObject']) -> 'pyqtSignal': ... - - @typing.overload - def __get__(self, instance: 'QObject', owner: typing.Type['QObject']) -> 'pyqtBoundSignal': ... - - - -class pyqtBoundSignal: - - signal = ... # type: str - - def __getitem__(self, key: object) -> 'pyqtBoundSignal': ... - - def connect(self, slot: 'PYQT_SLOT') -> 'QMetaObject.Connection': ... - - @typing.overload - def disconnect(self) -> None: ... - - @typing.overload - def disconnect(self, slot: typing.Union['PYQT_SLOT', 'QMetaObject.Connection']) -> None: ... - - def emit(self, *args: typing.Any) -> None: ... - - -FuncT = typing.TypeVar('FuncT', bound=typing.Callable) -def pyqtSlot(*types, name: typing.Optional[str] = ..., result: typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ... - - -# For QObject.findChild() and QObject.findChildren(). -QObjectT = typing.TypeVar('QObjectT', bound=QObject) - - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[pyqtSignal, pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], pyqtBoundSignal] - - -class QtMsgType(enum.Enum): - QtDebugMsg = ... # type: QtMsgType - QtWarningMsg = ... # type: QtMsgType - QtCriticalMsg = ... # type: QtMsgType - QtFatalMsg = ... # type: QtMsgType - QtSystemMsg = ... # type: QtMsgType - QtInfoMsg = ... # type: QtMsgType - - -class QCborKnownTags(enum.Enum): - DateTimeString = ... # type: QCborKnownTags - UnixTime_t = ... # type: QCborKnownTags - PositiveBignum = ... # type: QCborKnownTags - NegativeBignum = ... # type: QCborKnownTags - Decimal = ... # type: QCborKnownTags - Bigfloat = ... # type: QCborKnownTags - COSE_Encrypt0 = ... # type: QCborKnownTags - COSE_Mac0 = ... # type: QCborKnownTags - COSE_Sign1 = ... # type: QCborKnownTags - ExpectedBase64url = ... # type: QCborKnownTags - ExpectedBase64 = ... # type: QCborKnownTags - ExpectedBase16 = ... # type: QCborKnownTags - EncodedCbor = ... # type: QCborKnownTags - Url = ... # type: QCborKnownTags - Base64url = ... # type: QCborKnownTags - Base64 = ... # type: QCborKnownTags - RegularExpression = ... # type: QCborKnownTags - MimeMessage = ... # type: QCborKnownTags - Uuid = ... # type: QCborKnownTags - COSE_Encrypt = ... # type: QCborKnownTags - COSE_Mac = ... # type: QCborKnownTags - COSE_Sign = ... # type: QCborKnownTags - Signature = ... # type: QCborKnownTags - - -class QCborSimpleType(enum.Enum): - False_ = ... # type: QCborSimpleType - True_ = ... # type: QCborSimpleType - Null = ... # type: QCborSimpleType - Undefined = ... # type: QCborSimpleType - - -class Qt(PyQt6.sip.simplewrapper): - - class PermissionStatus(enum.Enum): - Undetermined = ... # type: Qt.PermissionStatus - Granted = ... # type: Qt.PermissionStatus - Denied = ... # type: Qt.PermissionStatus - - class ColorScheme(enum.Enum): - Unknown = ... # type: Qt.ColorScheme - Light = ... # type: Qt.ColorScheme - Dark = ... # type: Qt.ColorScheme - - class HighDpiScaleFactorRoundingPolicy(enum.Enum): - Round = ... # type: Qt.HighDpiScaleFactorRoundingPolicy - Ceil = ... # type: Qt.HighDpiScaleFactorRoundingPolicy - Floor = ... # type: Qt.HighDpiScaleFactorRoundingPolicy - RoundPreferFloor = ... # type: Qt.HighDpiScaleFactorRoundingPolicy - PassThrough = ... # type: Qt.HighDpiScaleFactorRoundingPolicy - - class ChecksumType(enum.Enum): - ChecksumIso3309 = ... # type: Qt.ChecksumType - ChecksumItuV41 = ... # type: Qt.ChecksumType - - class EnterKeyType(enum.Enum): - EnterKeyDefault = ... # type: Qt.EnterKeyType - EnterKeyReturn = ... # type: Qt.EnterKeyType - EnterKeyDone = ... # type: Qt.EnterKeyType - EnterKeyGo = ... # type: Qt.EnterKeyType - EnterKeySend = ... # type: Qt.EnterKeyType - EnterKeySearch = ... # type: Qt.EnterKeyType - EnterKeyNext = ... # type: Qt.EnterKeyType - EnterKeyPrevious = ... # type: Qt.EnterKeyType - - class ItemSelectionOperation(enum.Enum): - ReplaceSelection = ... # type: Qt.ItemSelectionOperation - AddToSelection = ... # type: Qt.ItemSelectionOperation - - class TabFocusBehavior(enum.Enum): - NoTabFocus = ... # type: Qt.TabFocusBehavior - TabFocusTextControls = ... # type: Qt.TabFocusBehavior - TabFocusListControls = ... # type: Qt.TabFocusBehavior - TabFocusAllControls = ... # type: Qt.TabFocusBehavior - - class MouseEventFlag(enum.Flag): - MouseEventCreatedDoubleClick = ... # type: Qt.MouseEventFlag - - class MouseEventSource(enum.Enum): - MouseEventNotSynthesized = ... # type: Qt.MouseEventSource - MouseEventSynthesizedBySystem = ... # type: Qt.MouseEventSource - MouseEventSynthesizedByQt = ... # type: Qt.MouseEventSource - MouseEventSynthesizedByApplication = ... # type: Qt.MouseEventSource - - class ScrollPhase(enum.Enum): - ScrollBegin = ... # type: Qt.ScrollPhase - ScrollUpdate = ... # type: Qt.ScrollPhase - ScrollEnd = ... # type: Qt.ScrollPhase - NoScrollPhase = ... # type: Qt.ScrollPhase - ScrollMomentum = ... # type: Qt.ScrollPhase - - class NativeGestureType(enum.Enum): - BeginNativeGesture = ... # type: Qt.NativeGestureType - EndNativeGesture = ... # type: Qt.NativeGestureType - PanNativeGesture = ... # type: Qt.NativeGestureType - ZoomNativeGesture = ... # type: Qt.NativeGestureType - SmartZoomNativeGesture = ... # type: Qt.NativeGestureType - RotateNativeGesture = ... # type: Qt.NativeGestureType - SwipeNativeGesture = ... # type: Qt.NativeGestureType - - class Edge(enum.Flag): - TopEdge = ... # type: Qt.Edge - LeftEdge = ... # type: Qt.Edge - RightEdge = ... # type: Qt.Edge - BottomEdge = ... # type: Qt.Edge - - class ApplicationState(enum.Flag): - ApplicationSuspended = ... # type: Qt.ApplicationState - ApplicationHidden = ... # type: Qt.ApplicationState - ApplicationInactive = ... # type: Qt.ApplicationState - ApplicationActive = ... # type: Qt.ApplicationState - - class HitTestAccuracy(enum.Enum): - ExactHit = ... # type: Qt.HitTestAccuracy - FuzzyHit = ... # type: Qt.HitTestAccuracy - - class WhiteSpaceMode(enum.Enum): - WhiteSpaceNormal = ... # type: Qt.WhiteSpaceMode - WhiteSpacePre = ... # type: Qt.WhiteSpaceMode - WhiteSpaceNoWrap = ... # type: Qt.WhiteSpaceMode - WhiteSpaceModeUndefined = ... # type: Qt.WhiteSpaceMode - - class FindChildOption(enum.Flag): - FindDirectChildrenOnly = ... # type: Qt.FindChildOption - FindChildrenRecursively = ... # type: Qt.FindChildOption - - class ScreenOrientation(enum.Flag): - PrimaryOrientation = ... # type: Qt.ScreenOrientation - PortraitOrientation = ... # type: Qt.ScreenOrientation - LandscapeOrientation = ... # type: Qt.ScreenOrientation - InvertedPortraitOrientation = ... # type: Qt.ScreenOrientation - InvertedLandscapeOrientation = ... # type: Qt.ScreenOrientation - - class CursorMoveStyle(enum.Enum): - LogicalMoveStyle = ... # type: Qt.CursorMoveStyle - VisualMoveStyle = ... # type: Qt.CursorMoveStyle - - class NavigationMode(enum.Enum): - NavigationModeNone = ... # type: Qt.NavigationMode - NavigationModeKeypadTabOrder = ... # type: Qt.NavigationMode - NavigationModeKeypadDirectional = ... # type: Qt.NavigationMode - NavigationModeCursorAuto = ... # type: Qt.NavigationMode - NavigationModeCursorForceVisible = ... # type: Qt.NavigationMode - - class GestureFlag(enum.Flag): - DontStartGestureOnChildren = ... # type: Qt.GestureFlag - ReceivePartialGestures = ... # type: Qt.GestureFlag - IgnoredGesturesPropagateToParent = ... # type: Qt.GestureFlag - - class GestureType(enum.IntEnum): - TapGesture = ... # type: Qt.GestureType - TapAndHoldGesture = ... # type: Qt.GestureType - PanGesture = ... # type: Qt.GestureType - PinchGesture = ... # type: Qt.GestureType - SwipeGesture = ... # type: Qt.GestureType - CustomGesture = ... # type: Qt.GestureType - - class GestureState(enum.Enum): - GestureStarted = ... # type: Qt.GestureState - GestureUpdated = ... # type: Qt.GestureState - GestureFinished = ... # type: Qt.GestureState - GestureCanceled = ... # type: Qt.GestureState - - class TouchPointState(enum.Flag): - TouchPointUnknownState = ... # type: Qt.TouchPointState - TouchPointPressed = ... # type: Qt.TouchPointState - TouchPointMoved = ... # type: Qt.TouchPointState - TouchPointStationary = ... # type: Qt.TouchPointState - TouchPointReleased = ... # type: Qt.TouchPointState - - class CoordinateSystem(enum.Enum): - DeviceCoordinates = ... # type: Qt.CoordinateSystem - LogicalCoordinates = ... # type: Qt.CoordinateSystem - - class AnchorPoint(enum.Enum): - AnchorLeft = ... # type: Qt.AnchorPoint - AnchorHorizontalCenter = ... # type: Qt.AnchorPoint - AnchorRight = ... # type: Qt.AnchorPoint - AnchorTop = ... # type: Qt.AnchorPoint - AnchorVerticalCenter = ... # type: Qt.AnchorPoint - AnchorBottom = ... # type: Qt.AnchorPoint - - class InputMethodHint(enum.Flag): - ImhNone = ... # type: Qt.InputMethodHint - ImhHiddenText = ... # type: Qt.InputMethodHint - ImhNoAutoUppercase = ... # type: Qt.InputMethodHint - ImhPreferNumbers = ... # type: Qt.InputMethodHint - ImhPreferUppercase = ... # type: Qt.InputMethodHint - ImhPreferLowercase = ... # type: Qt.InputMethodHint - ImhNoPredictiveText = ... # type: Qt.InputMethodHint - ImhDigitsOnly = ... # type: Qt.InputMethodHint - ImhFormattedNumbersOnly = ... # type: Qt.InputMethodHint - ImhUppercaseOnly = ... # type: Qt.InputMethodHint - ImhLowercaseOnly = ... # type: Qt.InputMethodHint - ImhDialableCharactersOnly = ... # type: Qt.InputMethodHint - ImhEmailCharactersOnly = ... # type: Qt.InputMethodHint - ImhUrlCharactersOnly = ... # type: Qt.InputMethodHint - ImhExclusiveInputMask = ... # type: Qt.InputMethodHint - ImhSensitiveData = ... # type: Qt.InputMethodHint - ImhDate = ... # type: Qt.InputMethodHint - ImhTime = ... # type: Qt.InputMethodHint - ImhPreferLatin = ... # type: Qt.InputMethodHint - ImhLatinOnly = ... # type: Qt.InputMethodHint - ImhMultiLine = ... # type: Qt.InputMethodHint - ImhNoEditMenu = ... # type: Qt.InputMethodHint - ImhNoTextHandles = ... # type: Qt.InputMethodHint - - class TileRule(enum.Enum): - StretchTile = ... # type: Qt.TileRule - RepeatTile = ... # type: Qt.TileRule - RoundTile = ... # type: Qt.TileRule - - class WindowFrameSection(enum.Enum): - NoSection = ... # type: Qt.WindowFrameSection - LeftSection = ... # type: Qt.WindowFrameSection - TopLeftSection = ... # type: Qt.WindowFrameSection - TopSection = ... # type: Qt.WindowFrameSection - TopRightSection = ... # type: Qt.WindowFrameSection - RightSection = ... # type: Qt.WindowFrameSection - BottomRightSection = ... # type: Qt.WindowFrameSection - BottomSection = ... # type: Qt.WindowFrameSection - BottomLeftSection = ... # type: Qt.WindowFrameSection - TitleBarArea = ... # type: Qt.WindowFrameSection - - class SizeHint(enum.Enum): - MinimumSize = ... # type: Qt.SizeHint - PreferredSize = ... # type: Qt.SizeHint - MaximumSize = ... # type: Qt.SizeHint - MinimumDescent = ... # type: Qt.SizeHint - - class SizeMode(enum.Enum): - AbsoluteSize = ... # type: Qt.SizeMode - RelativeSize = ... # type: Qt.SizeMode - - class EventPriority(enum.Enum): - HighEventPriority = ... # type: Qt.EventPriority - NormalEventPriority = ... # type: Qt.EventPriority - LowEventPriority = ... # type: Qt.EventPriority - - class Axis(enum.Enum): - XAxis = ... # type: Qt.Axis - YAxis = ... # type: Qt.Axis - ZAxis = ... # type: Qt.Axis - - class MaskMode(enum.Enum): - MaskInColor = ... # type: Qt.MaskMode - MaskOutColor = ... # type: Qt.MaskMode - - class TextInteractionFlag(enum.Flag): - NoTextInteraction = ... # type: Qt.TextInteractionFlag - TextSelectableByMouse = ... # type: Qt.TextInteractionFlag - TextSelectableByKeyboard = ... # type: Qt.TextInteractionFlag - LinksAccessibleByMouse = ... # type: Qt.TextInteractionFlag - LinksAccessibleByKeyboard = ... # type: Qt.TextInteractionFlag - TextEditable = ... # type: Qt.TextInteractionFlag - TextEditorInteraction = ... # type: Qt.TextInteractionFlag - TextBrowserInteraction = ... # type: Qt.TextInteractionFlag - - class ItemSelectionMode(enum.Enum): - ContainsItemShape = ... # type: Qt.ItemSelectionMode - IntersectsItemShape = ... # type: Qt.ItemSelectionMode - ContainsItemBoundingRect = ... # type: Qt.ItemSelectionMode - IntersectsItemBoundingRect = ... # type: Qt.ItemSelectionMode - - class ApplicationAttribute(enum.Enum): - AA_DontShowIconsInMenus = ... # type: Qt.ApplicationAttribute - AA_NativeWindows = ... # type: Qt.ApplicationAttribute - AA_DontCreateNativeWidgetSiblings = ... # type: Qt.ApplicationAttribute - AA_DontUseNativeMenuBar = ... # type: Qt.ApplicationAttribute - AA_MacDontSwapCtrlAndMeta = ... # type: Qt.ApplicationAttribute - AA_Use96Dpi = ... # type: Qt.ApplicationAttribute - AA_SynthesizeTouchForUnhandledMouseEvents = ... # type: Qt.ApplicationAttribute - AA_SynthesizeMouseForUnhandledTouchEvents = ... # type: Qt.ApplicationAttribute - AA_ForceRasterWidgets = ... # type: Qt.ApplicationAttribute - AA_UseDesktopOpenGL = ... # type: Qt.ApplicationAttribute - AA_UseOpenGLES = ... # type: Qt.ApplicationAttribute - AA_UseSoftwareOpenGL = ... # type: Qt.ApplicationAttribute - AA_ShareOpenGLContexts = ... # type: Qt.ApplicationAttribute - AA_SetPalette = ... # type: Qt.ApplicationAttribute - AA_PluginApplication = ... # type: Qt.ApplicationAttribute - AA_UseStyleSheetPropagationInWidgetStyles = ... # type: Qt.ApplicationAttribute - AA_DontUseNativeDialogs = ... # type: Qt.ApplicationAttribute - AA_SynthesizeMouseForUnhandledTabletEvents = ... # type: Qt.ApplicationAttribute - AA_CompressHighFrequencyEvents = ... # type: Qt.ApplicationAttribute - AA_DontCheckOpenGLContextThreadAffinity = ... # type: Qt.ApplicationAttribute - AA_DisableShaderDiskCache = ... # type: Qt.ApplicationAttribute - AA_DontShowShortcutsInContextMenus = ... # type: Qt.ApplicationAttribute - AA_CompressTabletEvents = ... # type: Qt.ApplicationAttribute - AA_DisableSessionManager = ... # type: Qt.ApplicationAttribute - AA_DisableNativeVirtualKeyboard = ... # type: Qt.ApplicationAttribute - AA_QtQuickUseDefaultSizePolicy = ... # type: Qt.ApplicationAttribute - - class WindowModality(enum.Enum): - NonModal = ... # type: Qt.WindowModality - WindowModal = ... # type: Qt.WindowModality - ApplicationModal = ... # type: Qt.WindowModality - - class MatchFlag(enum.Flag): - MatchExactly = ... # type: Qt.MatchFlag - MatchFixedString = ... # type: Qt.MatchFlag - MatchContains = ... # type: Qt.MatchFlag - MatchStartsWith = ... # type: Qt.MatchFlag - MatchEndsWith = ... # type: Qt.MatchFlag - MatchWildcard = ... # type: Qt.MatchFlag - MatchCaseSensitive = ... # type: Qt.MatchFlag - MatchWrap = ... # type: Qt.MatchFlag - MatchRecursive = ... # type: Qt.MatchFlag - MatchRegularExpression = ... # type: Qt.MatchFlag - - class ItemFlag(enum.Flag): - NoItemFlags = ... # type: Qt.ItemFlag - ItemIsSelectable = ... # type: Qt.ItemFlag - ItemIsEditable = ... # type: Qt.ItemFlag - ItemIsDragEnabled = ... # type: Qt.ItemFlag - ItemIsDropEnabled = ... # type: Qt.ItemFlag - ItemIsUserCheckable = ... # type: Qt.ItemFlag - ItemIsEnabled = ... # type: Qt.ItemFlag - ItemNeverHasChildren = ... # type: Qt.ItemFlag - ItemIsUserTristate = ... # type: Qt.ItemFlag - ItemIsAutoTristate = ... # type: Qt.ItemFlag - - class ItemDataRole(enum.IntEnum): - DisplayRole = ... # type: Qt.ItemDataRole - DecorationRole = ... # type: Qt.ItemDataRole - EditRole = ... # type: Qt.ItemDataRole - ToolTipRole = ... # type: Qt.ItemDataRole - StatusTipRole = ... # type: Qt.ItemDataRole - WhatsThisRole = ... # type: Qt.ItemDataRole - FontRole = ... # type: Qt.ItemDataRole - TextAlignmentRole = ... # type: Qt.ItemDataRole - BackgroundRole = ... # type: Qt.ItemDataRole - ForegroundRole = ... # type: Qt.ItemDataRole - CheckStateRole = ... # type: Qt.ItemDataRole - AccessibleTextRole = ... # type: Qt.ItemDataRole - AccessibleDescriptionRole = ... # type: Qt.ItemDataRole - SizeHintRole = ... # type: Qt.ItemDataRole - InitialSortOrderRole = ... # type: Qt.ItemDataRole - UserRole = ... # type: Qt.ItemDataRole - - class CheckState(enum.Enum): - Unchecked = ... # type: Qt.CheckState - PartiallyChecked = ... # type: Qt.CheckState - Checked = ... # type: Qt.CheckState - - class DropAction(enum.Flag): - CopyAction = ... # type: Qt.DropAction - MoveAction = ... # type: Qt.DropAction - LinkAction = ... # type: Qt.DropAction - ActionMask = ... # type: Qt.DropAction - TargetMoveAction = ... # type: Qt.DropAction - IgnoreAction = ... # type: Qt.DropAction - - class LayoutDirection(enum.Enum): - LeftToRight = ... # type: Qt.LayoutDirection - RightToLeft = ... # type: Qt.LayoutDirection - LayoutDirectionAuto = ... # type: Qt.LayoutDirection - - class ToolButtonStyle(enum.Enum): - ToolButtonIconOnly = ... # type: Qt.ToolButtonStyle - ToolButtonTextOnly = ... # type: Qt.ToolButtonStyle - ToolButtonTextBesideIcon = ... # type: Qt.ToolButtonStyle - ToolButtonTextUnderIcon = ... # type: Qt.ToolButtonStyle - ToolButtonFollowStyle = ... # type: Qt.ToolButtonStyle - - class InputMethodQuery(enum.Flag): - ImFont = ... # type: Qt.InputMethodQuery - ImCursorPosition = ... # type: Qt.InputMethodQuery - ImSurroundingText = ... # type: Qt.InputMethodQuery - ImCurrentSelection = ... # type: Qt.InputMethodQuery - ImMaximumTextLength = ... # type: Qt.InputMethodQuery - ImAnchorPosition = ... # type: Qt.InputMethodQuery - ImEnabled = ... # type: Qt.InputMethodQuery - ImCursorRectangle = ... # type: Qt.InputMethodQuery - ImHints = ... # type: Qt.InputMethodQuery - ImPreferredLanguage = ... # type: Qt.InputMethodQuery - ImPlatformData = ... # type: Qt.InputMethodQuery - ImQueryInput = ... # type: Qt.InputMethodQuery - ImQueryAll = ... # type: Qt.InputMethodQuery - ImAbsolutePosition = ... # type: Qt.InputMethodQuery - ImTextBeforeCursor = ... # type: Qt.InputMethodQuery - ImTextAfterCursor = ... # type: Qt.InputMethodQuery - ImEnterKeyType = ... # type: Qt.InputMethodQuery - ImAnchorRectangle = ... # type: Qt.InputMethodQuery - ImInputItemClipRectangle = ... # type: Qt.InputMethodQuery - ImReadOnly = ... # type: Qt.InputMethodQuery - - class ContextMenuPolicy(enum.Enum): - NoContextMenu = ... # type: Qt.ContextMenuPolicy - PreventContextMenu = ... # type: Qt.ContextMenuPolicy - DefaultContextMenu = ... # type: Qt.ContextMenuPolicy - ActionsContextMenu = ... # type: Qt.ContextMenuPolicy - CustomContextMenu = ... # type: Qt.ContextMenuPolicy - - class FocusReason(enum.Enum): - MouseFocusReason = ... # type: Qt.FocusReason - TabFocusReason = ... # type: Qt.FocusReason - BacktabFocusReason = ... # type: Qt.FocusReason - ActiveWindowFocusReason = ... # type: Qt.FocusReason - PopupFocusReason = ... # type: Qt.FocusReason - ShortcutFocusReason = ... # type: Qt.FocusReason - MenuBarFocusReason = ... # type: Qt.FocusReason - OtherFocusReason = ... # type: Qt.FocusReason - NoFocusReason = ... # type: Qt.FocusReason - - class TransformationMode(enum.Enum): - FastTransformation = ... # type: Qt.TransformationMode - SmoothTransformation = ... # type: Qt.TransformationMode - - class ClipOperation(enum.Enum): - NoClip = ... # type: Qt.ClipOperation - ReplaceClip = ... # type: Qt.ClipOperation - IntersectClip = ... # type: Qt.ClipOperation - - class FillRule(enum.Enum): - OddEvenFill = ... # type: Qt.FillRule - WindingFill = ... # type: Qt.FillRule - - class ShortcutContext(enum.Enum): - WidgetShortcut = ... # type: Qt.ShortcutContext - WindowShortcut = ... # type: Qt.ShortcutContext - ApplicationShortcut = ... # type: Qt.ShortcutContext - WidgetWithChildrenShortcut = ... # type: Qt.ShortcutContext - - class ConnectionType(enum.Enum): - AutoConnection = ... # type: Qt.ConnectionType - DirectConnection = ... # type: Qt.ConnectionType - QueuedConnection = ... # type: Qt.ConnectionType - BlockingQueuedConnection = ... # type: Qt.ConnectionType - UniqueConnection = ... # type: Qt.ConnectionType - SingleShotConnection = ... # type: Qt.ConnectionType - - class Corner(enum.Enum): - TopLeftCorner = ... # type: Qt.Corner - TopRightCorner = ... # type: Qt.Corner - BottomLeftCorner = ... # type: Qt.Corner - BottomRightCorner = ... # type: Qt.Corner - - class CaseSensitivity(enum.Enum): - CaseInsensitive = ... # type: Qt.CaseSensitivity - CaseSensitive = ... # type: Qt.CaseSensitivity - - class ScrollBarPolicy(enum.Enum): - ScrollBarAsNeeded = ... # type: Qt.ScrollBarPolicy - ScrollBarAlwaysOff = ... # type: Qt.ScrollBarPolicy - ScrollBarAlwaysOn = ... # type: Qt.ScrollBarPolicy - - class DayOfWeek(enum.Enum): - Monday = ... # type: Qt.DayOfWeek - Tuesday = ... # type: Qt.DayOfWeek - Wednesday = ... # type: Qt.DayOfWeek - Thursday = ... # type: Qt.DayOfWeek - Friday = ... # type: Qt.DayOfWeek - Saturday = ... # type: Qt.DayOfWeek - Sunday = ... # type: Qt.DayOfWeek - - class TimeSpec(enum.Enum): - LocalTime = ... # type: Qt.TimeSpec - UTC = ... # type: Qt.TimeSpec - OffsetFromUTC = ... # type: Qt.TimeSpec - TimeZone = ... # type: Qt.TimeSpec - - class DateFormat(enum.Enum): - TextDate = ... # type: Qt.DateFormat - ISODate = ... # type: Qt.DateFormat - ISODateWithMs = ... # type: Qt.DateFormat - RFC2822Date = ... # type: Qt.DateFormat - - class ToolBarArea(enum.Flag): - LeftToolBarArea = ... # type: Qt.ToolBarArea - RightToolBarArea = ... # type: Qt.ToolBarArea - TopToolBarArea = ... # type: Qt.ToolBarArea - BottomToolBarArea = ... # type: Qt.ToolBarArea - AllToolBarAreas = ... # type: Qt.ToolBarArea - NoToolBarArea = ... # type: Qt.ToolBarArea - - class TimerType(enum.Enum): - PreciseTimer = ... # type: Qt.TimerType - CoarseTimer = ... # type: Qt.TimerType - VeryCoarseTimer = ... # type: Qt.TimerType - - class DockWidgetArea(enum.Flag): - LeftDockWidgetArea = ... # type: Qt.DockWidgetArea - RightDockWidgetArea = ... # type: Qt.DockWidgetArea - TopDockWidgetArea = ... # type: Qt.DockWidgetArea - BottomDockWidgetArea = ... # type: Qt.DockWidgetArea - AllDockWidgetAreas = ... # type: Qt.DockWidgetArea - NoDockWidgetArea = ... # type: Qt.DockWidgetArea - - class AspectRatioMode(enum.Enum): - IgnoreAspectRatio = ... # type: Qt.AspectRatioMode - KeepAspectRatio = ... # type: Qt.AspectRatioMode - KeepAspectRatioByExpanding = ... # type: Qt.AspectRatioMode - - class TextFormat(enum.Enum): - PlainText = ... # type: Qt.TextFormat - RichText = ... # type: Qt.TextFormat - AutoText = ... # type: Qt.TextFormat - MarkdownText = ... # type: Qt.TextFormat - - class CursorShape(enum.Enum): - ArrowCursor = ... # type: Qt.CursorShape - UpArrowCursor = ... # type: Qt.CursorShape - CrossCursor = ... # type: Qt.CursorShape - WaitCursor = ... # type: Qt.CursorShape - IBeamCursor = ... # type: Qt.CursorShape - SizeVerCursor = ... # type: Qt.CursorShape - SizeHorCursor = ... # type: Qt.CursorShape - SizeBDiagCursor = ... # type: Qt.CursorShape - SizeFDiagCursor = ... # type: Qt.CursorShape - SizeAllCursor = ... # type: Qt.CursorShape - BlankCursor = ... # type: Qt.CursorShape - SplitVCursor = ... # type: Qt.CursorShape - SplitHCursor = ... # type: Qt.CursorShape - PointingHandCursor = ... # type: Qt.CursorShape - ForbiddenCursor = ... # type: Qt.CursorShape - OpenHandCursor = ... # type: Qt.CursorShape - ClosedHandCursor = ... # type: Qt.CursorShape - WhatsThisCursor = ... # type: Qt.CursorShape - BusyCursor = ... # type: Qt.CursorShape - LastCursor = ... # type: Qt.CursorShape - BitmapCursor = ... # type: Qt.CursorShape - CustomCursor = ... # type: Qt.CursorShape - DragCopyCursor = ... # type: Qt.CursorShape - DragMoveCursor = ... # type: Qt.CursorShape - DragLinkCursor = ... # type: Qt.CursorShape - - class UIEffect(enum.Enum): - UI_General = ... # type: Qt.UIEffect - UI_AnimateMenu = ... # type: Qt.UIEffect - UI_FadeMenu = ... # type: Qt.UIEffect - UI_AnimateCombo = ... # type: Qt.UIEffect - UI_AnimateTooltip = ... # type: Qt.UIEffect - UI_FadeTooltip = ... # type: Qt.UIEffect - UI_AnimateToolBox = ... # type: Qt.UIEffect - - class BrushStyle(enum.Enum): - NoBrush = ... # type: Qt.BrushStyle - SolidPattern = ... # type: Qt.BrushStyle - Dense1Pattern = ... # type: Qt.BrushStyle - Dense2Pattern = ... # type: Qt.BrushStyle - Dense3Pattern = ... # type: Qt.BrushStyle - Dense4Pattern = ... # type: Qt.BrushStyle - Dense5Pattern = ... # type: Qt.BrushStyle - Dense6Pattern = ... # type: Qt.BrushStyle - Dense7Pattern = ... # type: Qt.BrushStyle - HorPattern = ... # type: Qt.BrushStyle - VerPattern = ... # type: Qt.BrushStyle - CrossPattern = ... # type: Qt.BrushStyle - BDiagPattern = ... # type: Qt.BrushStyle - FDiagPattern = ... # type: Qt.BrushStyle - DiagCrossPattern = ... # type: Qt.BrushStyle - LinearGradientPattern = ... # type: Qt.BrushStyle - RadialGradientPattern = ... # type: Qt.BrushStyle - ConicalGradientPattern = ... # type: Qt.BrushStyle - TexturePattern = ... # type: Qt.BrushStyle - - class PenJoinStyle(enum.Enum): - MiterJoin = ... # type: Qt.PenJoinStyle - BevelJoin = ... # type: Qt.PenJoinStyle - RoundJoin = ... # type: Qt.PenJoinStyle - MPenJoinStyle = ... # type: Qt.PenJoinStyle - SvgMiterJoin = ... # type: Qt.PenJoinStyle - - class PenCapStyle(enum.Enum): - FlatCap = ... # type: Qt.PenCapStyle - SquareCap = ... # type: Qt.PenCapStyle - RoundCap = ... # type: Qt.PenCapStyle - - class PenStyle(enum.Enum): - NoPen = ... # type: Qt.PenStyle - SolidLine = ... # type: Qt.PenStyle - DashLine = ... # type: Qt.PenStyle - DotLine = ... # type: Qt.PenStyle - DashDotLine = ... # type: Qt.PenStyle - DashDotDotLine = ... # type: Qt.PenStyle - CustomDashLine = ... # type: Qt.PenStyle - - class ArrowType(enum.Enum): - NoArrow = ... # type: Qt.ArrowType - UpArrow = ... # type: Qt.ArrowType - DownArrow = ... # type: Qt.ArrowType - LeftArrow = ... # type: Qt.ArrowType - RightArrow = ... # type: Qt.ArrowType - - class Key(enum.IntEnum): - Key_Escape = ... # type: Qt.Key - Key_Tab = ... # type: Qt.Key - Key_Backtab = ... # type: Qt.Key - Key_Backspace = ... # type: Qt.Key - Key_Return = ... # type: Qt.Key - Key_Enter = ... # type: Qt.Key - Key_Insert = ... # type: Qt.Key - Key_Delete = ... # type: Qt.Key - Key_Pause = ... # type: Qt.Key - Key_Print = ... # type: Qt.Key - Key_SysReq = ... # type: Qt.Key - Key_Clear = ... # type: Qt.Key - Key_Home = ... # type: Qt.Key - Key_End = ... # type: Qt.Key - Key_Left = ... # type: Qt.Key - Key_Up = ... # type: Qt.Key - Key_Right = ... # type: Qt.Key - Key_Down = ... # type: Qt.Key - Key_PageUp = ... # type: Qt.Key - Key_PageDown = ... # type: Qt.Key - Key_Shift = ... # type: Qt.Key - Key_Control = ... # type: Qt.Key - Key_Meta = ... # type: Qt.Key - Key_Alt = ... # type: Qt.Key - Key_CapsLock = ... # type: Qt.Key - Key_NumLock = ... # type: Qt.Key - Key_ScrollLock = ... # type: Qt.Key - Key_F1 = ... # type: Qt.Key - Key_F2 = ... # type: Qt.Key - Key_F3 = ... # type: Qt.Key - Key_F4 = ... # type: Qt.Key - Key_F5 = ... # type: Qt.Key - Key_F6 = ... # type: Qt.Key - Key_F7 = ... # type: Qt.Key - Key_F8 = ... # type: Qt.Key - Key_F9 = ... # type: Qt.Key - Key_F10 = ... # type: Qt.Key - Key_F11 = ... # type: Qt.Key - Key_F12 = ... # type: Qt.Key - Key_F13 = ... # type: Qt.Key - Key_F14 = ... # type: Qt.Key - Key_F15 = ... # type: Qt.Key - Key_F16 = ... # type: Qt.Key - Key_F17 = ... # type: Qt.Key - Key_F18 = ... # type: Qt.Key - Key_F19 = ... # type: Qt.Key - Key_F20 = ... # type: Qt.Key - Key_F21 = ... # type: Qt.Key - Key_F22 = ... # type: Qt.Key - Key_F23 = ... # type: Qt.Key - Key_F24 = ... # type: Qt.Key - Key_F25 = ... # type: Qt.Key - Key_F26 = ... # type: Qt.Key - Key_F27 = ... # type: Qt.Key - Key_F28 = ... # type: Qt.Key - Key_F29 = ... # type: Qt.Key - Key_F30 = ... # type: Qt.Key - Key_F31 = ... # type: Qt.Key - Key_F32 = ... # type: Qt.Key - Key_F33 = ... # type: Qt.Key - Key_F34 = ... # type: Qt.Key - Key_F35 = ... # type: Qt.Key - Key_Super_L = ... # type: Qt.Key - Key_Super_R = ... # type: Qt.Key - Key_Menu = ... # type: Qt.Key - Key_Hyper_L = ... # type: Qt.Key - Key_Hyper_R = ... # type: Qt.Key - Key_Help = ... # type: Qt.Key - Key_Direction_L = ... # type: Qt.Key - Key_Direction_R = ... # type: Qt.Key - Key_Space = ... # type: Qt.Key - Key_Any = ... # type: Qt.Key - Key_Exclam = ... # type: Qt.Key - Key_QuoteDbl = ... # type: Qt.Key - Key_NumberSign = ... # type: Qt.Key - Key_Dollar = ... # type: Qt.Key - Key_Percent = ... # type: Qt.Key - Key_Ampersand = ... # type: Qt.Key - Key_Apostrophe = ... # type: Qt.Key - Key_ParenLeft = ... # type: Qt.Key - Key_ParenRight = ... # type: Qt.Key - Key_Asterisk = ... # type: Qt.Key - Key_Plus = ... # type: Qt.Key - Key_Comma = ... # type: Qt.Key - Key_Minus = ... # type: Qt.Key - Key_Period = ... # type: Qt.Key - Key_Slash = ... # type: Qt.Key - Key_0 = ... # type: Qt.Key - Key_1 = ... # type: Qt.Key - Key_2 = ... # type: Qt.Key - Key_3 = ... # type: Qt.Key - Key_4 = ... # type: Qt.Key - Key_5 = ... # type: Qt.Key - Key_6 = ... # type: Qt.Key - Key_7 = ... # type: Qt.Key - Key_8 = ... # type: Qt.Key - Key_9 = ... # type: Qt.Key - Key_Colon = ... # type: Qt.Key - Key_Semicolon = ... # type: Qt.Key - Key_Less = ... # type: Qt.Key - Key_Equal = ... # type: Qt.Key - Key_Greater = ... # type: Qt.Key - Key_Question = ... # type: Qt.Key - Key_At = ... # type: Qt.Key - Key_A = ... # type: Qt.Key - Key_B = ... # type: Qt.Key - Key_C = ... # type: Qt.Key - Key_D = ... # type: Qt.Key - Key_E = ... # type: Qt.Key - Key_F = ... # type: Qt.Key - Key_G = ... # type: Qt.Key - Key_H = ... # type: Qt.Key - Key_I = ... # type: Qt.Key - Key_J = ... # type: Qt.Key - Key_K = ... # type: Qt.Key - Key_L = ... # type: Qt.Key - Key_M = ... # type: Qt.Key - Key_N = ... # type: Qt.Key - Key_O = ... # type: Qt.Key - Key_P = ... # type: Qt.Key - Key_Q = ... # type: Qt.Key - Key_R = ... # type: Qt.Key - Key_S = ... # type: Qt.Key - Key_T = ... # type: Qt.Key - Key_U = ... # type: Qt.Key - Key_V = ... # type: Qt.Key - Key_W = ... # type: Qt.Key - Key_X = ... # type: Qt.Key - Key_Y = ... # type: Qt.Key - Key_Z = ... # type: Qt.Key - Key_BracketLeft = ... # type: Qt.Key - Key_Backslash = ... # type: Qt.Key - Key_BracketRight = ... # type: Qt.Key - Key_AsciiCircum = ... # type: Qt.Key - Key_Underscore = ... # type: Qt.Key - Key_QuoteLeft = ... # type: Qt.Key - Key_BraceLeft = ... # type: Qt.Key - Key_Bar = ... # type: Qt.Key - Key_BraceRight = ... # type: Qt.Key - Key_AsciiTilde = ... # type: Qt.Key - Key_nobreakspace = ... # type: Qt.Key - Key_exclamdown = ... # type: Qt.Key - Key_cent = ... # type: Qt.Key - Key_sterling = ... # type: Qt.Key - Key_currency = ... # type: Qt.Key - Key_yen = ... # type: Qt.Key - Key_brokenbar = ... # type: Qt.Key - Key_section = ... # type: Qt.Key - Key_diaeresis = ... # type: Qt.Key - Key_copyright = ... # type: Qt.Key - Key_ordfeminine = ... # type: Qt.Key - Key_guillemotleft = ... # type: Qt.Key - Key_notsign = ... # type: Qt.Key - Key_hyphen = ... # type: Qt.Key - Key_registered = ... # type: Qt.Key - Key_macron = ... # type: Qt.Key - Key_degree = ... # type: Qt.Key - Key_plusminus = ... # type: Qt.Key - Key_twosuperior = ... # type: Qt.Key - Key_threesuperior = ... # type: Qt.Key - Key_acute = ... # type: Qt.Key - Key_mu = ... # type: Qt.Key - Key_paragraph = ... # type: Qt.Key - Key_periodcentered = ... # type: Qt.Key - Key_cedilla = ... # type: Qt.Key - Key_onesuperior = ... # type: Qt.Key - Key_masculine = ... # type: Qt.Key - Key_guillemotright = ... # type: Qt.Key - Key_onequarter = ... # type: Qt.Key - Key_onehalf = ... # type: Qt.Key - Key_threequarters = ... # type: Qt.Key - Key_questiondown = ... # type: Qt.Key - Key_Agrave = ... # type: Qt.Key - Key_Aacute = ... # type: Qt.Key - Key_Acircumflex = ... # type: Qt.Key - Key_Atilde = ... # type: Qt.Key - Key_Adiaeresis = ... # type: Qt.Key - Key_Aring = ... # type: Qt.Key - Key_AE = ... # type: Qt.Key - Key_Ccedilla = ... # type: Qt.Key - Key_Egrave = ... # type: Qt.Key - Key_Eacute = ... # type: Qt.Key - Key_Ecircumflex = ... # type: Qt.Key - Key_Ediaeresis = ... # type: Qt.Key - Key_Igrave = ... # type: Qt.Key - Key_Iacute = ... # type: Qt.Key - Key_Icircumflex = ... # type: Qt.Key - Key_Idiaeresis = ... # type: Qt.Key - Key_ETH = ... # type: Qt.Key - Key_Ntilde = ... # type: Qt.Key - Key_Ograve = ... # type: Qt.Key - Key_Oacute = ... # type: Qt.Key - Key_Ocircumflex = ... # type: Qt.Key - Key_Otilde = ... # type: Qt.Key - Key_Odiaeresis = ... # type: Qt.Key - Key_multiply = ... # type: Qt.Key - Key_Ooblique = ... # type: Qt.Key - Key_Ugrave = ... # type: Qt.Key - Key_Uacute = ... # type: Qt.Key - Key_Ucircumflex = ... # type: Qt.Key - Key_Udiaeresis = ... # type: Qt.Key - Key_Yacute = ... # type: Qt.Key - Key_THORN = ... # type: Qt.Key - Key_ssharp = ... # type: Qt.Key - Key_division = ... # type: Qt.Key - Key_ydiaeresis = ... # type: Qt.Key - Key_AltGr = ... # type: Qt.Key - Key_Multi_key = ... # type: Qt.Key - Key_Codeinput = ... # type: Qt.Key - Key_SingleCandidate = ... # type: Qt.Key - Key_MultipleCandidate = ... # type: Qt.Key - Key_PreviousCandidate = ... # type: Qt.Key - Key_Mode_switch = ... # type: Qt.Key - Key_Kanji = ... # type: Qt.Key - Key_Muhenkan = ... # type: Qt.Key - Key_Henkan = ... # type: Qt.Key - Key_Romaji = ... # type: Qt.Key - Key_Hiragana = ... # type: Qt.Key - Key_Katakana = ... # type: Qt.Key - Key_Hiragana_Katakana = ... # type: Qt.Key - Key_Zenkaku = ... # type: Qt.Key - Key_Hankaku = ... # type: Qt.Key - Key_Zenkaku_Hankaku = ... # type: Qt.Key - Key_Touroku = ... # type: Qt.Key - Key_Massyo = ... # type: Qt.Key - Key_Kana_Lock = ... # type: Qt.Key - Key_Kana_Shift = ... # type: Qt.Key - Key_Eisu_Shift = ... # type: Qt.Key - Key_Eisu_toggle = ... # type: Qt.Key - Key_Hangul = ... # type: Qt.Key - Key_Hangul_Start = ... # type: Qt.Key - Key_Hangul_End = ... # type: Qt.Key - Key_Hangul_Hanja = ... # type: Qt.Key - Key_Hangul_Jamo = ... # type: Qt.Key - Key_Hangul_Romaja = ... # type: Qt.Key - Key_Hangul_Jeonja = ... # type: Qt.Key - Key_Hangul_Banja = ... # type: Qt.Key - Key_Hangul_PreHanja = ... # type: Qt.Key - Key_Hangul_PostHanja = ... # type: Qt.Key - Key_Hangul_Special = ... # type: Qt.Key - Key_Dead_Grave = ... # type: Qt.Key - Key_Dead_Acute = ... # type: Qt.Key - Key_Dead_Circumflex = ... # type: Qt.Key - Key_Dead_Tilde = ... # type: Qt.Key - Key_Dead_Macron = ... # type: Qt.Key - Key_Dead_Breve = ... # type: Qt.Key - Key_Dead_Abovedot = ... # type: Qt.Key - Key_Dead_Diaeresis = ... # type: Qt.Key - Key_Dead_Abovering = ... # type: Qt.Key - Key_Dead_Doubleacute = ... # type: Qt.Key - Key_Dead_Caron = ... # type: Qt.Key - Key_Dead_Cedilla = ... # type: Qt.Key - Key_Dead_Ogonek = ... # type: Qt.Key - Key_Dead_Iota = ... # type: Qt.Key - Key_Dead_Voiced_Sound = ... # type: Qt.Key - Key_Dead_Semivoiced_Sound = ... # type: Qt.Key - Key_Dead_Belowdot = ... # type: Qt.Key - Key_Dead_Hook = ... # type: Qt.Key - Key_Dead_Horn = ... # type: Qt.Key - Key_Back = ... # type: Qt.Key - Key_Forward = ... # type: Qt.Key - Key_Stop = ... # type: Qt.Key - Key_Refresh = ... # type: Qt.Key - Key_VolumeDown = ... # type: Qt.Key - Key_VolumeMute = ... # type: Qt.Key - Key_VolumeUp = ... # type: Qt.Key - Key_BassBoost = ... # type: Qt.Key - Key_BassUp = ... # type: Qt.Key - Key_BassDown = ... # type: Qt.Key - Key_TrebleUp = ... # type: Qt.Key - Key_TrebleDown = ... # type: Qt.Key - Key_MediaPlay = ... # type: Qt.Key - Key_MediaStop = ... # type: Qt.Key - Key_MediaPrevious = ... # type: Qt.Key - Key_MediaNext = ... # type: Qt.Key - Key_MediaRecord = ... # type: Qt.Key - Key_HomePage = ... # type: Qt.Key - Key_Favorites = ... # type: Qt.Key - Key_Search = ... # type: Qt.Key - Key_Standby = ... # type: Qt.Key - Key_OpenUrl = ... # type: Qt.Key - Key_LaunchMail = ... # type: Qt.Key - Key_LaunchMedia = ... # type: Qt.Key - Key_Launch0 = ... # type: Qt.Key - Key_Launch1 = ... # type: Qt.Key - Key_Launch2 = ... # type: Qt.Key - Key_Launch3 = ... # type: Qt.Key - Key_Launch4 = ... # type: Qt.Key - Key_Launch5 = ... # type: Qt.Key - Key_Launch6 = ... # type: Qt.Key - Key_Launch7 = ... # type: Qt.Key - Key_Launch8 = ... # type: Qt.Key - Key_Launch9 = ... # type: Qt.Key - Key_LaunchA = ... # type: Qt.Key - Key_LaunchB = ... # type: Qt.Key - Key_LaunchC = ... # type: Qt.Key - Key_LaunchD = ... # type: Qt.Key - Key_LaunchE = ... # type: Qt.Key - Key_LaunchF = ... # type: Qt.Key - Key_MediaLast = ... # type: Qt.Key - Key_Select = ... # type: Qt.Key - Key_Yes = ... # type: Qt.Key - Key_No = ... # type: Qt.Key - Key_Context1 = ... # type: Qt.Key - Key_Context2 = ... # type: Qt.Key - Key_Context3 = ... # type: Qt.Key - Key_Context4 = ... # type: Qt.Key - Key_Call = ... # type: Qt.Key - Key_Hangup = ... # type: Qt.Key - Key_Flip = ... # type: Qt.Key - Key_unknown = ... # type: Qt.Key - Key_Execute = ... # type: Qt.Key - Key_Printer = ... # type: Qt.Key - Key_Play = ... # type: Qt.Key - Key_Sleep = ... # type: Qt.Key - Key_Zoom = ... # type: Qt.Key - Key_Cancel = ... # type: Qt.Key - Key_MonBrightnessUp = ... # type: Qt.Key - Key_MonBrightnessDown = ... # type: Qt.Key - Key_KeyboardLightOnOff = ... # type: Qt.Key - Key_KeyboardBrightnessUp = ... # type: Qt.Key - Key_KeyboardBrightnessDown = ... # type: Qt.Key - Key_PowerOff = ... # type: Qt.Key - Key_WakeUp = ... # type: Qt.Key - Key_Eject = ... # type: Qt.Key - Key_ScreenSaver = ... # type: Qt.Key - Key_WWW = ... # type: Qt.Key - Key_Memo = ... # type: Qt.Key - Key_LightBulb = ... # type: Qt.Key - Key_Shop = ... # type: Qt.Key - Key_History = ... # type: Qt.Key - Key_AddFavorite = ... # type: Qt.Key - Key_HotLinks = ... # type: Qt.Key - Key_BrightnessAdjust = ... # type: Qt.Key - Key_Finance = ... # type: Qt.Key - Key_Community = ... # type: Qt.Key - Key_AudioRewind = ... # type: Qt.Key - Key_BackForward = ... # type: Qt.Key - Key_ApplicationLeft = ... # type: Qt.Key - Key_ApplicationRight = ... # type: Qt.Key - Key_Book = ... # type: Qt.Key - Key_CD = ... # type: Qt.Key - Key_Calculator = ... # type: Qt.Key - Key_ToDoList = ... # type: Qt.Key - Key_ClearGrab = ... # type: Qt.Key - Key_Close = ... # type: Qt.Key - Key_Copy = ... # type: Qt.Key - Key_Cut = ... # type: Qt.Key - Key_Display = ... # type: Qt.Key - Key_DOS = ... # type: Qt.Key - Key_Documents = ... # type: Qt.Key - Key_Excel = ... # type: Qt.Key - Key_Explorer = ... # type: Qt.Key - Key_Game = ... # type: Qt.Key - Key_Go = ... # type: Qt.Key - Key_iTouch = ... # type: Qt.Key - Key_LogOff = ... # type: Qt.Key - Key_Market = ... # type: Qt.Key - Key_Meeting = ... # type: Qt.Key - Key_MenuKB = ... # type: Qt.Key - Key_MenuPB = ... # type: Qt.Key - Key_MySites = ... # type: Qt.Key - Key_News = ... # type: Qt.Key - Key_OfficeHome = ... # type: Qt.Key - Key_Option = ... # type: Qt.Key - Key_Paste = ... # type: Qt.Key - Key_Phone = ... # type: Qt.Key - Key_Calendar = ... # type: Qt.Key - Key_Reply = ... # type: Qt.Key - Key_Reload = ... # type: Qt.Key - Key_RotateWindows = ... # type: Qt.Key - Key_RotationPB = ... # type: Qt.Key - Key_RotationKB = ... # type: Qt.Key - Key_Save = ... # type: Qt.Key - Key_Send = ... # type: Qt.Key - Key_Spell = ... # type: Qt.Key - Key_SplitScreen = ... # type: Qt.Key - Key_Support = ... # type: Qt.Key - Key_TaskPane = ... # type: Qt.Key - Key_Terminal = ... # type: Qt.Key - Key_Tools = ... # type: Qt.Key - Key_Travel = ... # type: Qt.Key - Key_Video = ... # type: Qt.Key - Key_Word = ... # type: Qt.Key - Key_Xfer = ... # type: Qt.Key - Key_ZoomIn = ... # type: Qt.Key - Key_ZoomOut = ... # type: Qt.Key - Key_Away = ... # type: Qt.Key - Key_Messenger = ... # type: Qt.Key - Key_WebCam = ... # type: Qt.Key - Key_MailForward = ... # type: Qt.Key - Key_Pictures = ... # type: Qt.Key - Key_Music = ... # type: Qt.Key - Key_Battery = ... # type: Qt.Key - Key_Bluetooth = ... # type: Qt.Key - Key_WLAN = ... # type: Qt.Key - Key_UWB = ... # type: Qt.Key - Key_AudioForward = ... # type: Qt.Key - Key_AudioRepeat = ... # type: Qt.Key - Key_AudioRandomPlay = ... # type: Qt.Key - Key_Subtitle = ... # type: Qt.Key - Key_AudioCycleTrack = ... # type: Qt.Key - Key_Time = ... # type: Qt.Key - Key_Hibernate = ... # type: Qt.Key - Key_View = ... # type: Qt.Key - Key_TopMenu = ... # type: Qt.Key - Key_PowerDown = ... # type: Qt.Key - Key_Suspend = ... # type: Qt.Key - Key_ContrastAdjust = ... # type: Qt.Key - Key_MediaPause = ... # type: Qt.Key - Key_MediaTogglePlayPause = ... # type: Qt.Key - Key_LaunchG = ... # type: Qt.Key - Key_LaunchH = ... # type: Qt.Key - Key_ToggleCallHangup = ... # type: Qt.Key - Key_VoiceDial = ... # type: Qt.Key - Key_LastNumberRedial = ... # type: Qt.Key - Key_Camera = ... # type: Qt.Key - Key_CameraFocus = ... # type: Qt.Key - Key_TouchpadToggle = ... # type: Qt.Key - Key_TouchpadOn = ... # type: Qt.Key - Key_TouchpadOff = ... # type: Qt.Key - Key_MicMute = ... # type: Qt.Key - Key_Red = ... # type: Qt.Key - Key_Green = ... # type: Qt.Key - Key_Yellow = ... # type: Qt.Key - Key_Blue = ... # type: Qt.Key - Key_ChannelUp = ... # type: Qt.Key - Key_ChannelDown = ... # type: Qt.Key - Key_Guide = ... # type: Qt.Key - Key_Info = ... # type: Qt.Key - Key_Settings = ... # type: Qt.Key - Key_Exit = ... # type: Qt.Key - Key_MicVolumeUp = ... # type: Qt.Key - Key_MicVolumeDown = ... # type: Qt.Key - Key_New = ... # type: Qt.Key - Key_Open = ... # type: Qt.Key - Key_Find = ... # type: Qt.Key - Key_Undo = ... # type: Qt.Key - Key_Redo = ... # type: Qt.Key - Key_Dead_Stroke = ... # type: Qt.Key - Key_Dead_Abovecomma = ... # type: Qt.Key - Key_Dead_Abovereversedcomma = ... # type: Qt.Key - Key_Dead_Doublegrave = ... # type: Qt.Key - Key_Dead_Belowring = ... # type: Qt.Key - Key_Dead_Belowmacron = ... # type: Qt.Key - Key_Dead_Belowcircumflex = ... # type: Qt.Key - Key_Dead_Belowtilde = ... # type: Qt.Key - Key_Dead_Belowbreve = ... # type: Qt.Key - Key_Dead_Belowdiaeresis = ... # type: Qt.Key - Key_Dead_Invertedbreve = ... # type: Qt.Key - Key_Dead_Belowcomma = ... # type: Qt.Key - Key_Dead_Currency = ... # type: Qt.Key - Key_Dead_a = ... # type: Qt.Key - Key_Dead_A = ... # type: Qt.Key - Key_Dead_e = ... # type: Qt.Key - Key_Dead_E = ... # type: Qt.Key - Key_Dead_i = ... # type: Qt.Key - Key_Dead_I = ... # type: Qt.Key - Key_Dead_o = ... # type: Qt.Key - Key_Dead_O = ... # type: Qt.Key - Key_Dead_u = ... # type: Qt.Key - Key_Dead_U = ... # type: Qt.Key - Key_Dead_Small_Schwa = ... # type: Qt.Key - Key_Dead_Capital_Schwa = ... # type: Qt.Key - Key_Dead_Greek = ... # type: Qt.Key - Key_Dead_Lowline = ... # type: Qt.Key - Key_Dead_Aboveverticalline = ... # type: Qt.Key - Key_Dead_Belowverticalline = ... # type: Qt.Key - Key_Dead_Longsolidusoverlay = ... # type: Qt.Key - Key_micro = ... # type: Qt.Key - - class BGMode(enum.Enum): - TransparentMode = ... # type: Qt.BGMode - OpaqueMode = ... # type: Qt.BGMode - - class ImageConversionFlag(enum.Flag): - AutoColor = ... # type: Qt.ImageConversionFlag - ColorOnly = ... # type: Qt.ImageConversionFlag - MonoOnly = ... # type: Qt.ImageConversionFlag - ThresholdAlphaDither = ... # type: Qt.ImageConversionFlag - OrderedAlphaDither = ... # type: Qt.ImageConversionFlag - DiffuseAlphaDither = ... # type: Qt.ImageConversionFlag - DiffuseDither = ... # type: Qt.ImageConversionFlag - OrderedDither = ... # type: Qt.ImageConversionFlag - ThresholdDither = ... # type: Qt.ImageConversionFlag - AutoDither = ... # type: Qt.ImageConversionFlag - PreferDither = ... # type: Qt.ImageConversionFlag - AvoidDither = ... # type: Qt.ImageConversionFlag - NoOpaqueDetection = ... # type: Qt.ImageConversionFlag - NoFormatConversion = ... # type: Qt.ImageConversionFlag - - class WidgetAttribute(enum.Enum): - WA_Disabled = ... # type: Qt.WidgetAttribute - WA_UnderMouse = ... # type: Qt.WidgetAttribute - WA_MouseTracking = ... # type: Qt.WidgetAttribute - WA_OpaquePaintEvent = ... # type: Qt.WidgetAttribute - WA_StaticContents = ... # type: Qt.WidgetAttribute - WA_LaidOut = ... # type: Qt.WidgetAttribute - WA_PaintOnScreen = ... # type: Qt.WidgetAttribute - WA_NoSystemBackground = ... # type: Qt.WidgetAttribute - WA_UpdatesDisabled = ... # type: Qt.WidgetAttribute - WA_Mapped = ... # type: Qt.WidgetAttribute - WA_InputMethodEnabled = ... # type: Qt.WidgetAttribute - WA_WState_Visible = ... # type: Qt.WidgetAttribute - WA_WState_Hidden = ... # type: Qt.WidgetAttribute - WA_ForceDisabled = ... # type: Qt.WidgetAttribute - WA_KeyCompression = ... # type: Qt.WidgetAttribute - WA_PendingMoveEvent = ... # type: Qt.WidgetAttribute - WA_PendingResizeEvent = ... # type: Qt.WidgetAttribute - WA_SetPalette = ... # type: Qt.WidgetAttribute - WA_SetFont = ... # type: Qt.WidgetAttribute - WA_SetCursor = ... # type: Qt.WidgetAttribute - WA_NoChildEventsFromChildren = ... # type: Qt.WidgetAttribute - WA_WindowModified = ... # type: Qt.WidgetAttribute - WA_Resized = ... # type: Qt.WidgetAttribute - WA_Moved = ... # type: Qt.WidgetAttribute - WA_PendingUpdate = ... # type: Qt.WidgetAttribute - WA_InvalidSize = ... # type: Qt.WidgetAttribute - WA_CustomWhatsThis = ... # type: Qt.WidgetAttribute - WA_LayoutOnEntireRect = ... # type: Qt.WidgetAttribute - WA_OutsideWSRange = ... # type: Qt.WidgetAttribute - WA_GrabbedShortcut = ... # type: Qt.WidgetAttribute - WA_TransparentForMouseEvents = ... # type: Qt.WidgetAttribute - WA_PaintUnclipped = ... # type: Qt.WidgetAttribute - WA_SetWindowIcon = ... # type: Qt.WidgetAttribute - WA_NoMouseReplay = ... # type: Qt.WidgetAttribute - WA_DeleteOnClose = ... # type: Qt.WidgetAttribute - WA_RightToLeft = ... # type: Qt.WidgetAttribute - WA_SetLayoutDirection = ... # type: Qt.WidgetAttribute - WA_NoChildEventsForParent = ... # type: Qt.WidgetAttribute - WA_ForceUpdatesDisabled = ... # type: Qt.WidgetAttribute - WA_WState_Created = ... # type: Qt.WidgetAttribute - WA_WState_CompressKeys = ... # type: Qt.WidgetAttribute - WA_WState_InPaintEvent = ... # type: Qt.WidgetAttribute - WA_WState_Reparented = ... # type: Qt.WidgetAttribute - WA_WState_ConfigPending = ... # type: Qt.WidgetAttribute - WA_WState_Polished = ... # type: Qt.WidgetAttribute - WA_WState_OwnSizePolicy = ... # type: Qt.WidgetAttribute - WA_WState_ExplicitShowHide = ... # type: Qt.WidgetAttribute - WA_MouseNoMask = ... # type: Qt.WidgetAttribute - WA_NoMousePropagation = ... # type: Qt.WidgetAttribute - WA_Hover = ... # type: Qt.WidgetAttribute - WA_InputMethodTransparent = ... # type: Qt.WidgetAttribute - WA_QuitOnClose = ... # type: Qt.WidgetAttribute - WA_KeyboardFocusChange = ... # type: Qt.WidgetAttribute - WA_AcceptDrops = ... # type: Qt.WidgetAttribute - WA_WindowPropagation = ... # type: Qt.WidgetAttribute - WA_NoX11EventCompression = ... # type: Qt.WidgetAttribute - WA_TintedBackground = ... # type: Qt.WidgetAttribute - WA_X11OpenGLOverlay = ... # type: Qt.WidgetAttribute - WA_AttributeCount = ... # type: Qt.WidgetAttribute - WA_AlwaysShowToolTips = ... # type: Qt.WidgetAttribute - WA_MacOpaqueSizeGrip = ... # type: Qt.WidgetAttribute - WA_SetStyle = ... # type: Qt.WidgetAttribute - WA_SetLocale = ... # type: Qt.WidgetAttribute - WA_MacShowFocusRect = ... # type: Qt.WidgetAttribute - WA_MacNormalSize = ... # type: Qt.WidgetAttribute - WA_MacSmallSize = ... # type: Qt.WidgetAttribute - WA_MacMiniSize = ... # type: Qt.WidgetAttribute - WA_LayoutUsesWidgetRect = ... # type: Qt.WidgetAttribute - WA_StyledBackground = ... # type: Qt.WidgetAttribute - WA_MacAlwaysShowToolWindow = ... # type: Qt.WidgetAttribute - WA_StyleSheet = ... # type: Qt.WidgetAttribute - WA_ShowWithoutActivating = ... # type: Qt.WidgetAttribute - WA_NativeWindow = ... # type: Qt.WidgetAttribute - WA_DontCreateNativeAncestors = ... # type: Qt.WidgetAttribute - WA_DontShowOnScreen = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeDesktop = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeDock = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeToolBar = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeMenu = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeUtility = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeSplash = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeDialog = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeDropDownMenu = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypePopupMenu = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeToolTip = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeNotification = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeCombo = ... # type: Qt.WidgetAttribute - WA_X11NetWmWindowTypeDND = ... # type: Qt.WidgetAttribute - WA_TranslucentBackground = ... # type: Qt.WidgetAttribute - WA_AcceptTouchEvents = ... # type: Qt.WidgetAttribute - WA_TouchPadAcceptSingleTouchEvents = ... # type: Qt.WidgetAttribute - WA_X11DoNotAcceptFocus = ... # type: Qt.WidgetAttribute - WA_AlwaysStackOnTop = ... # type: Qt.WidgetAttribute - WA_TabletTracking = ... # type: Qt.WidgetAttribute - WA_ContentsMarginsRespectsSafeArea = ... # type: Qt.WidgetAttribute - WA_StyleSheetTarget = ... # type: Qt.WidgetAttribute - - class WindowState(enum.Flag): - WindowNoState = ... # type: Qt.WindowState - WindowMinimized = ... # type: Qt.WindowState - WindowMaximized = ... # type: Qt.WindowState - WindowFullScreen = ... # type: Qt.WindowState - WindowActive = ... # type: Qt.WindowState - - class WindowType(enum.IntFlag): - Widget = ... # type: Qt.WindowType - Window = ... # type: Qt.WindowType - Dialog = ... # type: Qt.WindowType - Sheet = ... # type: Qt.WindowType - Drawer = ... # type: Qt.WindowType - Popup = ... # type: Qt.WindowType - Tool = ... # type: Qt.WindowType - ToolTip = ... # type: Qt.WindowType - SplashScreen = ... # type: Qt.WindowType - Desktop = ... # type: Qt.WindowType - SubWindow = ... # type: Qt.WindowType - WindowType_Mask = ... # type: Qt.WindowType - MSWindowsFixedSizeDialogHint = ... # type: Qt.WindowType - MSWindowsOwnDC = ... # type: Qt.WindowType - X11BypassWindowManagerHint = ... # type: Qt.WindowType - FramelessWindowHint = ... # type: Qt.WindowType - CustomizeWindowHint = ... # type: Qt.WindowType - WindowTitleHint = ... # type: Qt.WindowType - WindowSystemMenuHint = ... # type: Qt.WindowType - WindowMinimizeButtonHint = ... # type: Qt.WindowType - WindowMaximizeButtonHint = ... # type: Qt.WindowType - WindowMinMaxButtonsHint = ... # type: Qt.WindowType - WindowContextHelpButtonHint = ... # type: Qt.WindowType - WindowShadeButtonHint = ... # type: Qt.WindowType - WindowStaysOnTopHint = ... # type: Qt.WindowType - WindowStaysOnBottomHint = ... # type: Qt.WindowType - WindowCloseButtonHint = ... # type: Qt.WindowType - MacWindowToolBarButtonHint = ... # type: Qt.WindowType - BypassGraphicsProxyWidget = ... # type: Qt.WindowType - WindowTransparentForInput = ... # type: Qt.WindowType - WindowOverridesSystemGestures = ... # type: Qt.WindowType - WindowDoesNotAcceptFocus = ... # type: Qt.WindowType - NoDropShadowWindowHint = ... # type: Qt.WindowType - WindowFullscreenButtonHint = ... # type: Qt.WindowType - ForeignWindow = ... # type: Qt.WindowType - BypassWindowManagerHint = ... # type: Qt.WindowType - CoverWindow = ... # type: Qt.WindowType - MaximizeUsingFullscreenGeometryHint = ... # type: Qt.WindowType - - class TextElideMode(enum.Enum): - ElideLeft = ... # type: Qt.TextElideMode - ElideRight = ... # type: Qt.TextElideMode - ElideMiddle = ... # type: Qt.TextElideMode - ElideNone = ... # type: Qt.TextElideMode - - class TextFlag(enum.IntFlag): - TextSingleLine = ... # type: Qt.TextFlag - TextDontClip = ... # type: Qt.TextFlag - TextExpandTabs = ... # type: Qt.TextFlag - TextShowMnemonic = ... # type: Qt.TextFlag - TextWordWrap = ... # type: Qt.TextFlag - TextWrapAnywhere = ... # type: Qt.TextFlag - TextDontPrint = ... # type: Qt.TextFlag - TextIncludeTrailingSpaces = ... # type: Qt.TextFlag - TextHideMnemonic = ... # type: Qt.TextFlag - TextJustificationForced = ... # type: Qt.TextFlag - - class AlignmentFlag(enum.IntFlag): - AlignLeft = ... # type: Qt.AlignmentFlag - AlignLeading = ... # type: Qt.AlignmentFlag - AlignRight = ... # type: Qt.AlignmentFlag - AlignTrailing = ... # type: Qt.AlignmentFlag - AlignHCenter = ... # type: Qt.AlignmentFlag - AlignJustify = ... # type: Qt.AlignmentFlag - AlignAbsolute = ... # type: Qt.AlignmentFlag - AlignHorizontal_Mask = ... # type: Qt.AlignmentFlag - AlignTop = ... # type: Qt.AlignmentFlag - AlignBottom = ... # type: Qt.AlignmentFlag - AlignVCenter = ... # type: Qt.AlignmentFlag - AlignVertical_Mask = ... # type: Qt.AlignmentFlag - AlignCenter = ... # type: Qt.AlignmentFlag - AlignBaseline = ... # type: Qt.AlignmentFlag - - class SortOrder(enum.Enum): - AscendingOrder = ... # type: Qt.SortOrder - DescendingOrder = ... # type: Qt.SortOrder - - class FocusPolicy(enum.IntFlag): - NoFocus = ... # type: Qt.FocusPolicy - TabFocus = ... # type: Qt.FocusPolicy - ClickFocus = ... # type: Qt.FocusPolicy - StrongFocus = ... # type: Qt.FocusPolicy - WheelFocus = ... # type: Qt.FocusPolicy - - class Orientation(enum.Flag): - Horizontal = ... # type: Qt.Orientation - Vertical = ... # type: Qt.Orientation - - class MouseButton(enum.Flag): - NoButton = ... # type: Qt.MouseButton - AllButtons = ... # type: Qt.MouseButton - LeftButton = ... # type: Qt.MouseButton - RightButton = ... # type: Qt.MouseButton - MiddleButton = ... # type: Qt.MouseButton - XButton1 = ... # type: Qt.MouseButton - XButton2 = ... # type: Qt.MouseButton - BackButton = ... # type: Qt.MouseButton - ExtraButton1 = ... # type: Qt.MouseButton - ForwardButton = ... # type: Qt.MouseButton - ExtraButton2 = ... # type: Qt.MouseButton - TaskButton = ... # type: Qt.MouseButton - ExtraButton3 = ... # type: Qt.MouseButton - ExtraButton4 = ... # type: Qt.MouseButton - ExtraButton5 = ... # type: Qt.MouseButton - ExtraButton6 = ... # type: Qt.MouseButton - ExtraButton7 = ... # type: Qt.MouseButton - ExtraButton8 = ... # type: Qt.MouseButton - ExtraButton9 = ... # type: Qt.MouseButton - ExtraButton10 = ... # type: Qt.MouseButton - ExtraButton11 = ... # type: Qt.MouseButton - ExtraButton12 = ... # type: Qt.MouseButton - ExtraButton13 = ... # type: Qt.MouseButton - ExtraButton14 = ... # type: Qt.MouseButton - ExtraButton15 = ... # type: Qt.MouseButton - ExtraButton16 = ... # type: Qt.MouseButton - ExtraButton17 = ... # type: Qt.MouseButton - ExtraButton18 = ... # type: Qt.MouseButton - ExtraButton19 = ... # type: Qt.MouseButton - ExtraButton20 = ... # type: Qt.MouseButton - ExtraButton21 = ... # type: Qt.MouseButton - ExtraButton22 = ... # type: Qt.MouseButton - ExtraButton23 = ... # type: Qt.MouseButton - ExtraButton24 = ... # type: Qt.MouseButton - - class Modifier(enum.Flag): - META = ... # type: Qt.Modifier - SHIFT = ... # type: Qt.Modifier - CTRL = ... # type: Qt.Modifier - ALT = ... # type: Qt.Modifier - MODIFIER_MASK = ... # type: Qt.Modifier - - class KeyboardModifier(enum.Flag): - NoModifier = ... # type: Qt.KeyboardModifier - ShiftModifier = ... # type: Qt.KeyboardModifier - ControlModifier = ... # type: Qt.KeyboardModifier - AltModifier = ... # type: Qt.KeyboardModifier - MetaModifier = ... # type: Qt.KeyboardModifier - KeypadModifier = ... # type: Qt.KeyboardModifier - GroupSwitchModifier = ... # type: Qt.KeyboardModifier - KeyboardModifierMask = ... # type: Qt.KeyboardModifier - - class GlobalColor(enum.Enum): - color0 = ... # type: Qt.GlobalColor - color1 = ... # type: Qt.GlobalColor - black = ... # type: Qt.GlobalColor - white = ... # type: Qt.GlobalColor - darkGray = ... # type: Qt.GlobalColor - gray = ... # type: Qt.GlobalColor - lightGray = ... # type: Qt.GlobalColor - red = ... # type: Qt.GlobalColor - green = ... # type: Qt.GlobalColor - blue = ... # type: Qt.GlobalColor - cyan = ... # type: Qt.GlobalColor - magenta = ... # type: Qt.GlobalColor - yellow = ... # type: Qt.GlobalColor - darkRed = ... # type: Qt.GlobalColor - darkGreen = ... # type: Qt.GlobalColor - darkBlue = ... # type: Qt.GlobalColor - darkCyan = ... # type: Qt.GlobalColor - darkMagenta = ... # type: Qt.GlobalColor - darkYellow = ... # type: Qt.GlobalColor - transparent = ... # type: Qt.GlobalColor - - def ws(self, s: 'QTextStream') -> 'QTextStream': ... - def bom(self, s: 'QTextStream') -> 'QTextStream': ... - def reset(self, s: 'QTextStream') -> 'QTextStream': ... - def flush(self, s: 'QTextStream') -> 'QTextStream': ... - def endl(self, s: 'QTextStream') -> 'QTextStream': ... - def center(self, s: 'QTextStream') -> 'QTextStream': ... - def right(self, s: 'QTextStream') -> 'QTextStream': ... - def left(self, s: 'QTextStream') -> 'QTextStream': ... - def scientific(self, s: 'QTextStream') -> 'QTextStream': ... - def fixed(self, s: 'QTextStream') -> 'QTextStream': ... - def lowercasedigits(self, s: 'QTextStream') -> 'QTextStream': ... - def lowercasebase(self, s: 'QTextStream') -> 'QTextStream': ... - def uppercasedigits(self, s: 'QTextStream') -> 'QTextStream': ... - def uppercasebase(self, s: 'QTextStream') -> 'QTextStream': ... - def noforcepoint(self, s: 'QTextStream') -> 'QTextStream': ... - def noforcesign(self, s: 'QTextStream') -> 'QTextStream': ... - def noshowbase(self, s: 'QTextStream') -> 'QTextStream': ... - def forcepoint(self, s: 'QTextStream') -> 'QTextStream': ... - def forcesign(self, s: 'QTextStream') -> 'QTextStream': ... - def showbase(self, s: 'QTextStream') -> 'QTextStream': ... - def hex(self, s: 'QTextStream') -> 'QTextStream': ... - def dec(self, s: 'QTextStream') -> 'QTextStream': ... - def oct(self, s: 'QTextStream') -> 'QTextStream': ... - def bin(self, s: 'QTextStream') -> 'QTextStream': ... - - -class QKeyCombination(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, key: Qt.Key = ...) -> None: ... - @typing.overload - def __init__(self, modifiers: Qt.Modifier, key: Qt.Key = ...) -> None: ... - @typing.overload - def __init__(self, modifiers: Qt.KeyboardModifier, key: Qt.Key = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QKeyCombination') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def toCombined(self) -> int: ... - @staticmethod - def fromCombined(combined: int) -> 'QKeyCombination': ... - def key(self) -> Qt.Key: ... - def keyboardModifiers(self) -> Qt.KeyboardModifier: ... - - -class QObject(PyQt6.sip.wrapper): - - staticMetaObject = ... # type: 'QMetaObject' - - def __init__(self, parent: typing.Optional['QObject'] = ...) -> None: ... - - def isQuickItemType(self) -> bool: ... - @typing.overload - @staticmethod - def disconnect(a0: 'QMetaObject.Connection') -> bool: ... - @typing.overload - def disconnect(self) -> None: ... - def isSignalConnected(self, signal: 'QMetaMethod') -> bool: ... - def senderSignalIndex(self) -> int: ... - def disconnectNotify(self, signal: 'QMetaMethod') -> None: ... - def connectNotify(self, signal: 'QMetaMethod') -> None: ... - def customEvent(self, a0: typing.Optional['QEvent']) -> None: ... - def childEvent(self, a0: typing.Optional['QChildEvent']) -> None: ... - def timerEvent(self, a0: typing.Optional['QTimerEvent']) -> None: ... - def receivers(self, signal: PYQT_SIGNAL) -> int: ... - def sender(self) -> typing.Optional['QObject']: ... - def deleteLater(self) -> None: ... - def inherits(self, classname: typing.Optional[str]) -> bool: ... - def parent(self) -> typing.Optional['QObject']: ... - objectNameChanged: typing.ClassVar[pyqtSignal] - destroyed: typing.ClassVar[pyqtSignal] - def property(self, name: typing.Optional[str]) -> typing.Any: ... - def setProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... - def dynamicPropertyNames(self) -> typing.List['QByteArray']: ... - def dumpObjectTree(self) -> None: ... - def dumpObjectInfo(self) -> None: ... - def removeEventFilter(self, a0: typing.Optional['QObject']) -> None: ... - def installEventFilter(self, a0: typing.Optional['QObject']) -> None: ... - def setParent(self, a0: typing.Optional['QObject']) -> None: ... - def children(self) -> typing.List['QObject']: ... - def killTimer(self, id: int) -> None: ... - def startTimer(self, interval: int, timerType: Qt.TimerType = ...) -> int: ... - def moveToThread(self, thread: typing.Optional['QThread']) -> None: ... - def thread(self) -> typing.Optional['QThread']: ... - def blockSignals(self, b: bool) -> bool: ... - def signalsBlocked(self) -> bool: ... - def isWindowType(self) -> bool: ... - def isWidgetType(self) -> bool: ... - def setObjectName(self, name: typing.Union[typing.Union['QByteArray', bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def objectName(self) -> str: ... - @typing.overload - def findChildren(self, type: typing.Type[QObjectT], name: typing.Optional[str] = ..., options: Qt.FindChildOption = ...) -> typing.List[QObjectT]: ... - @typing.overload - def findChildren(self, types: typing.Tuple[typing.Type[QObjectT], ...], name: typing.Optional[str] = ..., options: Qt.FindChildOption = ...) -> typing.List[QObjectT]: ... - @typing.overload - def findChildren(self, type: typing.Type[QObjectT], re: 'QRegularExpression', options: Qt.FindChildOption = ...) -> typing.List[QObjectT]: ... - @typing.overload - def findChildren(self, types: typing.Tuple[typing.Type[QObjectT], ...], re: 'QRegularExpression', options: Qt.FindChildOption = ...) -> typing.List[QObjectT]: ... - @typing.overload - def findChild(self, type: typing.Type[QObjectT], name: typing.Optional[str] = ..., options: Qt.FindChildOption = ...) -> QObjectT: ... - @typing.overload - def findChild(self, types: typing.Tuple[typing.Type[QObjectT], ...], name: typing.Optional[str] = ..., options: Qt.FindChildOption = ...) -> QObjectT: ... - @staticmethod - def tr(sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... - def eventFilter(self, a0: typing.Optional['QObject'], a1: typing.Optional['QEvent']) -> bool: ... - def event(self, a0: typing.Optional['QEvent']) -> bool: ... - def pyqtConfigure(self, a0: typing.Any) -> None: ... - def metaObject(self) -> typing.Optional['QMetaObject']: ... - - -class QAbstractAnimation(QObject): - - class DeletionPolicy(enum.Enum): - KeepWhenStopped = ... # type: QAbstractAnimation.DeletionPolicy - DeleteWhenStopped = ... # type: QAbstractAnimation.DeletionPolicy - - class State(enum.Enum): - Stopped = ... # type: QAbstractAnimation.State - Paused = ... # type: QAbstractAnimation.State - Running = ... # type: QAbstractAnimation.State - - class Direction(enum.Enum): - Forward = ... # type: QAbstractAnimation.Direction - Backward = ... # type: QAbstractAnimation.Direction - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def updateDirection(self, direction: 'QAbstractAnimation.Direction') -> None: ... - def updateState(self, newState: 'QAbstractAnimation.State', oldState: 'QAbstractAnimation.State') -> None: ... - def updateCurrentTime(self, currentTime: int) -> None: ... - def event(self, event: typing.Optional['QEvent']) -> bool: ... - def setCurrentTime(self, msecs: int) -> None: ... - def stop(self) -> None: ... - def setPaused(self, a0: bool) -> None: ... - def resume(self) -> None: ... - def pause(self) -> None: ... - def start(self, policy: 'QAbstractAnimation.DeletionPolicy' = ...) -> None: ... - directionChanged: typing.ClassVar[pyqtSignal] - currentLoopChanged: typing.ClassVar[pyqtSignal] - stateChanged: typing.ClassVar[pyqtSignal] - finished: typing.ClassVar[pyqtSignal] - def totalDuration(self) -> int: ... - def duration(self) -> int: ... - def currentLoop(self) -> int: ... - def setLoopCount(self, loopCount: int) -> None: ... - def loopCount(self) -> int: ... - def currentLoopTime(self) -> int: ... - def currentTime(self) -> int: ... - def setDirection(self, direction: 'QAbstractAnimation.Direction') -> None: ... - def direction(self) -> 'QAbstractAnimation.Direction': ... - def group(self) -> typing.Optional['QAnimationGroup']: ... - def state(self) -> 'QAbstractAnimation.State': ... - - -class QAbstractEventDispatcher(QObject): - - class TimerInfo(PyQt6.sip.simplewrapper): - - interval = ... # type: int - timerId = ... # type: int - timerType = ... # type: Qt.TimerType - - @typing.overload - def __init__(self, id: int, i: int, t: Qt.TimerType) -> None: ... - @typing.overload - def __init__(self, a0: 'QAbstractEventDispatcher.TimerInfo') -> None: ... - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - awake: typing.ClassVar[pyqtSignal] - aboutToBlock: typing.ClassVar[pyqtSignal] - def filterNativeEvent(self, eventType: typing.Union['QByteArray', bytes, bytearray, memoryview], message: typing.Optional[PyQt6.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[PyQt6.sip.voidptr]]: ... - def removeNativeEventFilter(self, filterObj: typing.Optional['QAbstractNativeEventFilter']) -> None: ... - def installNativeEventFilter(self, filterObj: typing.Optional['QAbstractNativeEventFilter']) -> None: ... - def remainingTime(self, timerId: int) -> int: ... - def closingDown(self) -> None: ... - def startingUp(self) -> None: ... - def interrupt(self) -> None: ... - def wakeUp(self) -> None: ... - def registeredTimers(self, object: typing.Optional[QObject]) -> typing.List['QAbstractEventDispatcher.TimerInfo']: ... - def unregisterTimers(self, object: typing.Optional[QObject]) -> bool: ... - def unregisterTimer(self, timerId: int) -> bool: ... - @typing.overload - def registerTimer(self, interval: int, timerType: Qt.TimerType, object: typing.Optional[QObject]) -> int: ... - @typing.overload - def registerTimer(self, timerId: int, interval: int, timerType: Qt.TimerType, object: typing.Optional[QObject]) -> None: ... - def processEvents(self, flags: 'QEventLoop.ProcessEventsFlag') -> bool: ... - @staticmethod - def instance(thread: typing.Optional['QThread'] = ...) -> typing.Optional['QAbstractEventDispatcher']: ... - - -class QModelIndex(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QModelIndex') -> None: ... - @typing.overload - def __init__(self, a0: 'QPersistentModelIndex') -> None: ... - - def __ge__(self, other: 'QModelIndex') -> bool: ... - def __hash__(self) -> int: ... - def __ne__(self, other: object): ... - def __lt__(self, other: 'QModelIndex') -> bool: ... - def __eq__(self, other: object): ... - def siblingAtRow(self, row: int) -> 'QModelIndex': ... - def siblingAtColumn(self, column: int) -> 'QModelIndex': ... - def sibling(self, arow: int, acolumn: int) -> 'QModelIndex': ... - def parent(self) -> 'QModelIndex': ... - def isValid(self) -> bool: ... - def model(self) -> typing.Optional['QAbstractItemModel']: ... - def internalId(self) -> int: ... - def internalPointer(self) -> typing.Any: ... - def flags(self) -> Qt.ItemFlag: ... - def data(self, role: int = ...) -> typing.Any: ... - def column(self) -> int: ... - def row(self) -> int: ... - - -class QPersistentModelIndex(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, index: QModelIndex) -> None: ... - @typing.overload - def __init__(self, other: 'QPersistentModelIndex') -> None: ... - - def __ge__(self, other: 'QPersistentModelIndex') -> bool: ... - def __hash__(self) -> int: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __lt__(self, other: 'QPersistentModelIndex') -> bool: ... - def swap(self, other: 'QPersistentModelIndex') -> None: ... - def isValid(self) -> bool: ... - def model(self) -> typing.Optional['QAbstractItemModel']: ... - def sibling(self, row: int, column: int) -> QModelIndex: ... - def parent(self) -> QModelIndex: ... - def flags(self) -> Qt.ItemFlag: ... - def data(self, role: int = ...) -> typing.Any: ... - def column(self) -> int: ... - def row(self) -> int: ... - - -class QAbstractItemModel(QObject): - - class CheckIndexOption(enum.Flag): - NoOption = ... # type: QAbstractItemModel.CheckIndexOption - IndexIsValid = ... # type: QAbstractItemModel.CheckIndexOption - DoNotUseParent = ... # type: QAbstractItemModel.CheckIndexOption - ParentIsInvalid = ... # type: QAbstractItemModel.CheckIndexOption - - class LayoutChangeHint(enum.Enum): - NoLayoutChangeHint = ... # type: QAbstractItemModel.LayoutChangeHint - VerticalSortHint = ... # type: QAbstractItemModel.LayoutChangeHint - HorizontalSortHint = ... # type: QAbstractItemModel.LayoutChangeHint - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def multiData(self, index: QModelIndex, roleDataSpan: 'QModelRoleDataSpan') -> None: ... - def clearItemData(self, index: QModelIndex) -> bool: ... - def checkIndex(self, index: QModelIndex, options: 'QAbstractItemModel.CheckIndexOption' = ...) -> bool: ... - def moveColumn(self, sourceParent: QModelIndex, sourceColumn: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def moveRow(self, sourceParent: QModelIndex, sourceRow: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def resetInternalData(self) -> None: ... - def endResetModel(self) -> None: ... - def beginResetModel(self) -> None: ... - def endMoveColumns(self) -> None: ... - def beginMoveColumns(self, sourceParent: QModelIndex, sourceFirst: int, sourceLast: int, destinationParent: QModelIndex, destinationColumn: int) -> bool: ... - def endMoveRows(self) -> None: ... - def beginMoveRows(self, sourceParent: QModelIndex, sourceFirst: int, sourceLast: int, destinationParent: QModelIndex, destinationRow: int) -> bool: ... - columnsMoved: typing.ClassVar[pyqtSignal] - columnsAboutToBeMoved: typing.ClassVar[pyqtSignal] - rowsMoved: typing.ClassVar[pyqtSignal] - rowsAboutToBeMoved: typing.ClassVar[pyqtSignal] - def createIndex(self, row: int, column: int, object: typing.Any = ...) -> QModelIndex: ... - def roleNames(self) -> typing.Dict[int, 'QByteArray']: ... - def supportedDragActions(self) -> Qt.DropAction: ... - def removeColumn(self, column: int, parent: QModelIndex = ...) -> bool: ... - def removeRow(self, row: int, parent: QModelIndex = ...) -> bool: ... - def insertColumn(self, column: int, parent: QModelIndex = ...) -> bool: ... - def insertRow(self, row: int, parent: QModelIndex = ...) -> bool: ... - def changePersistentIndexList(self, from_: typing.Iterable[QModelIndex], to: typing.Iterable[QModelIndex]) -> None: ... - def changePersistentIndex(self, from_: QModelIndex, to: QModelIndex) -> None: ... - def persistentIndexList(self) -> typing.List[QModelIndex]: ... - def endRemoveColumns(self) -> None: ... - def beginRemoveColumns(self, parent: QModelIndex, first: int, last: int) -> None: ... - def endInsertColumns(self) -> None: ... - def beginInsertColumns(self, parent: QModelIndex, first: int, last: int) -> None: ... - def endRemoveRows(self) -> None: ... - def beginRemoveRows(self, parent: QModelIndex, first: int, last: int) -> None: ... - def endInsertRows(self) -> None: ... - def beginInsertRows(self, parent: QModelIndex, first: int, last: int) -> None: ... - def decodeData(self, row: int, column: int, parent: QModelIndex, stream: 'QDataStream') -> bool: ... - def encodeData(self, indexes: typing.Iterable[QModelIndex], stream: 'QDataStream') -> None: ... - def revert(self) -> None: ... - def submit(self) -> bool: ... - modelReset: typing.ClassVar[pyqtSignal] - modelAboutToBeReset: typing.ClassVar[pyqtSignal] - columnsRemoved: typing.ClassVar[pyqtSignal] - columnsAboutToBeRemoved: typing.ClassVar[pyqtSignal] - columnsInserted: typing.ClassVar[pyqtSignal] - columnsAboutToBeInserted: typing.ClassVar[pyqtSignal] - rowsRemoved: typing.ClassVar[pyqtSignal] - rowsAboutToBeRemoved: typing.ClassVar[pyqtSignal] - rowsInserted: typing.ClassVar[pyqtSignal] - rowsAboutToBeInserted: typing.ClassVar[pyqtSignal] - layoutChanged: typing.ClassVar[pyqtSignal] - layoutAboutToBeChanged: typing.ClassVar[pyqtSignal] - headerDataChanged: typing.ClassVar[pyqtSignal] - dataChanged: typing.ClassVar[pyqtSignal] - def span(self, index: QModelIndex) -> 'QSize': ... - def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: Qt.MatchFlag = ...) -> typing.List[QModelIndex]: ... - def buddy(self, index: QModelIndex) -> QModelIndex: ... - def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def canFetchMore(self, parent: QModelIndex) -> bool: ... - def fetchMore(self, parent: QModelIndex) -> None: ... - def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def supportedDropActions(self) -> Qt.DropAction: ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... - def mimeTypes(self) -> typing.List[str]: ... - def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... - def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... - def hasChildren(self, parent: QModelIndex = ...) -> bool: ... - def columnCount(self, parent: QModelIndex = ...) -> int: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - @typing.overload - def parent(self, child: QModelIndex) -> QModelIndex: ... - @typing.overload - def parent(self) -> typing.Optional[QObject]: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - def hasIndex(self, row: int, column: int, parent: QModelIndex = ...) -> bool: ... - - -class QAbstractTableModel(QAbstractItemModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def parent(self) -> typing.Optional[QObject]: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - - -class QAbstractListModel(QAbstractItemModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def parent(self) -> typing.Optional[QObject]: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def index(self, row: int, column: int = ..., parent: QModelIndex = ...) -> QModelIndex: ... - - -class QModelRoleData(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, role: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QModelRoleData') -> None: ... - - def clearData(self) -> None: ... - def setData(self, data: typing.Any) -> None: ... - def data(self) -> typing.Any: ... - def role(self) -> int: ... - - -class QModelRoleDataSpan(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, modelRoleData: QModelRoleData) -> None: ... - @typing.overload - def __init__(self, modelRoleData: typing.Iterable[QModelRoleData]) -> None: ... - @typing.overload - def __init__(self, a0: 'QModelRoleDataSpan') -> None: ... - - def dataForRole(self, role: int) -> typing.Optional[typing.Any]: ... - def __getitem__(self, index: int) -> QModelRoleData: ... - def end(self) -> typing.Optional[QModelRoleData]: ... - def begin(self) -> typing.Optional[QModelRoleData]: ... - def data(self) -> typing.Optional[QModelRoleData]: ... - def __len__(self) -> int: ... - def length(self) -> int: ... - def size(self) -> int: ... - - -class QAbstractNativeEventFilter(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def nativeEventFilter(self, eventType: typing.Union['QByteArray', bytes, bytearray, memoryview], message: typing.Optional[PyQt6.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[PyQt6.sip.voidptr]]: ... - - -class QAbstractProxyModel(QAbstractItemModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def roleNames(self) -> typing.Dict[int, 'QByteArray']: ... - def clearItemData(self, index: QModelIndex) -> bool: ... - def supportedDragActions(self) -> Qt.DropAction: ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - sourceModelChanged: typing.ClassVar[pyqtSignal] - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def supportedDropActions(self) -> Qt.DropAction: ... - def mimeTypes(self) -> typing.List[str]: ... - def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... - def hasChildren(self, parent: QModelIndex = ...) -> bool: ... - def span(self, index: QModelIndex) -> 'QSize': ... - def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... - def fetchMore(self, parent: QModelIndex) -> None: ... - def canFetchMore(self, parent: QModelIndex) -> bool: ... - def buddy(self, index: QModelIndex) -> QModelIndex: ... - def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... - def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, proxyIndex: QModelIndex, role: int = ...) -> typing.Any: ... - def revert(self) -> None: ... - def submit(self) -> bool: ... - def mapSelectionFromSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... - def mapSelectionToSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... - def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... - def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... - def sourceModel(self) -> typing.Optional[QAbstractItemModel]: ... - def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - - -class QAnimationGroup(QAbstractAnimation): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def event(self, event: typing.Optional['QEvent']) -> bool: ... - def clear(self) -> None: ... - def takeAnimation(self, index: int) -> typing.Optional[QAbstractAnimation]: ... - def removeAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... - def insertAnimation(self, index: int, animation: typing.Optional[QAbstractAnimation]) -> None: ... - def addAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... - def indexOfAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> int: ... - def animationCount(self) -> int: ... - def animationAt(self, index: int) -> typing.Optional[QAbstractAnimation]: ... - - -class QBasicTimer(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def swap(self, other: 'QBasicTimer') -> None: ... - def stop(self) -> None: ... - @typing.overload - def start(self, msec: int, timerType: Qt.TimerType, obj: typing.Optional[QObject]) -> None: ... - @typing.overload - def start(self, msec: int, obj: typing.Optional[QObject]) -> None: ... - def timerId(self) -> int: ... - def isActive(self) -> bool: ... - - -class QBitArray(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, size: int, value: bool = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QBitArray') -> None: ... - - def __or__(self, a0: 'QBitArray') -> 'QBitArray': ... - def __and__(self, a0: 'QBitArray') -> 'QBitArray': ... - def __xor__(self, a0: 'QBitArray') -> 'QBitArray': ... - def toUInt32(self, endianness: 'QSysInfo.Endian') -> typing.Tuple[int, typing.Optional[bool]]: ... - @staticmethod - def fromBits(data: typing.Optional[bytes], len: int) -> 'QBitArray': ... - def bits(self) -> bytes: ... - def swap(self, other: 'QBitArray') -> None: ... - def __hash__(self) -> int: ... - def at(self, i: int) -> bool: ... - def __getitem__(self, i: int) -> bool: ... - def toggleBit(self, i: int) -> bool: ... - def clearBit(self, i: int) -> None: ... - @typing.overload - def setBit(self, i: int) -> None: ... - @typing.overload - def setBit(self, i: int, val: bool) -> None: ... - def testBit(self, i: int) -> bool: ... - def truncate(self, pos: int) -> None: ... - @typing.overload - def fill(self, val: bool, first: int, last: int) -> None: ... - @typing.overload - def fill(self, val: bool, size: int = ...) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __ixor__(self, a0: 'QBitArray') -> 'QBitArray': ... - def __ior__(self, a0: 'QBitArray') -> 'QBitArray': ... - def __iand__(self, a0: 'QBitArray') -> 'QBitArray': ... - def clear(self) -> None: ... - def isDetached(self) -> bool: ... - def detach(self) -> None: ... - def resize(self, size: int) -> None: ... - def isNull(self) -> bool: ... - def isEmpty(self) -> bool: ... - def __len__(self) -> int: ... - @typing.overload - def count(self) -> int: ... - @typing.overload - def count(self, on: bool) -> int: ... - def size(self) -> int: ... - - -class QIODeviceBase(PyQt6.sip.simplewrapper): - - class OpenModeFlag(enum.Flag): - NotOpen = ... # type: QIODeviceBase.OpenModeFlag - ReadOnly = ... # type: QIODeviceBase.OpenModeFlag - WriteOnly = ... # type: QIODeviceBase.OpenModeFlag - ReadWrite = ... # type: QIODeviceBase.OpenModeFlag - Append = ... # type: QIODeviceBase.OpenModeFlag - Truncate = ... # type: QIODeviceBase.OpenModeFlag - Text = ... # type: QIODeviceBase.OpenModeFlag - Unbuffered = ... # type: QIODeviceBase.OpenModeFlag - NewOnly = ... # type: QIODeviceBase.OpenModeFlag - ExistingOnly = ... # type: QIODeviceBase.OpenModeFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QIODeviceBase') -> None: ... - - -class QIODevice(QObject, QIODeviceBase): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QObject]) -> None: ... - - def setErrorString(self, errorString: typing.Optional[str]) -> None: ... - def setOpenMode(self, openMode: QIODeviceBase.OpenModeFlag) -> None: ... - def skipData(self, maxSize: int) -> int: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readLineData(self, maxlen: int) -> bytes: ... - def readData(self, maxlen: int) -> bytes: ... - readyRead: typing.ClassVar[pyqtSignal] - readChannelFinished: typing.ClassVar[pyqtSignal] - channelReadyRead: typing.ClassVar[pyqtSignal] - channelBytesWritten: typing.ClassVar[pyqtSignal] - bytesWritten: typing.ClassVar[pyqtSignal] - aboutToClose: typing.ClassVar[pyqtSignal] - def errorString(self) -> str: ... - def getChar(self) -> typing.Tuple[bool, typing.Optional[bytes]]: ... - def putChar(self, c: bytes) -> bool: ... - def ungetChar(self, c: bytes) -> None: ... - def waitForBytesWritten(self, msecs: int) -> bool: ... - def waitForReadyRead(self, msecs: int) -> bool: ... - def skip(self, maxSize: int) -> int: ... - def peek(self, maxlen: int) -> bytes: ... - def write(self, a0: PyQt6.sip.Buffer) -> int: ... - def isTransactionStarted(self) -> bool: ... - def rollbackTransaction(self) -> None: ... - def commitTransaction(self) -> None: ... - def startTransaction(self) -> None: ... - def canReadLine(self) -> bool: ... - def readAll(self) -> 'QByteArray': ... - @typing.overload - def readLine(self, maxlen: int) -> bytes: ... - @typing.overload - def readLine(self) -> 'QByteArray': ... - def read(self, maxlen: int) -> bytes: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def reset(self) -> bool: ... - def atEnd(self) -> bool: ... - def seek(self, pos: int) -> bool: ... - def size(self) -> int: ... - def pos(self) -> int: ... - def close(self) -> None: ... - def open(self, mode: QIODeviceBase.OpenModeFlag) -> bool: ... - def setCurrentWriteChannel(self, channel: int) -> None: ... - def currentWriteChannel(self) -> int: ... - def setCurrentReadChannel(self, channel: int) -> None: ... - def currentReadChannel(self) -> int: ... - def writeChannelCount(self) -> int: ... - def readChannelCount(self) -> int: ... - def isSequential(self) -> bool: ... - def isWritable(self) -> bool: ... - def isReadable(self) -> bool: ... - def isOpen(self) -> bool: ... - def isTextModeEnabled(self) -> bool: ... - def setTextModeEnabled(self, enabled: bool) -> None: ... - def openMode(self) -> QIODeviceBase.OpenModeFlag: ... - - -class QBuffer(QIODevice): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, byteArray: typing.Optional['QByteArray'], parent: typing.Optional[QObject] = ...) -> None: ... - - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readData(self, maxlen: int) -> bytes: ... - def canReadLine(self) -> bool: ... - def atEnd(self) -> bool: ... - def seek(self, off: int) -> bool: ... - def pos(self) -> int: ... - def size(self) -> int: ... - def close(self) -> None: ... - def open(self, openMode: QIODeviceBase.OpenModeFlag) -> bool: ... - @typing.overload - def setData(self, data: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def setData(self, data: typing.Optional[PyQt6.sip.array[bytes]]) -> None: ... - def setBuffer(self, a: typing.Optional['QByteArray']) -> None: ... - def data(self) -> 'QByteArray': ... - def buffer(self) -> 'QByteArray': ... - - -class QByteArray(PyQt6.sip.simplewrapper): - - class Base64DecodingStatus(enum.Enum): - Ok = ... # type: QByteArray.Base64DecodingStatus - IllegalInputLength = ... # type: QByteArray.Base64DecodingStatus - IllegalCharacter = ... # type: QByteArray.Base64DecodingStatus - IllegalPadding = ... # type: QByteArray.Base64DecodingStatus - - class Base64Option(enum.Flag): - Base64Encoding = ... # type: QByteArray.Base64Option - Base64UrlEncoding = ... # type: QByteArray.Base64Option - KeepTrailingEquals = ... # type: QByteArray.Base64Option - OmitTrailingEquals = ... # type: QByteArray.Base64Option - IgnoreBase64DecodingErrors = ... # type: QByteArray.Base64Option - AbortOnBase64DecodingErrors = ... # type: QByteArray.Base64Option - - class FromBase64Result(PyQt6.sip.simplewrapper): - - decoded = ... # type: typing.Union['QByteArray', bytes, bytearray, memoryview] - decodingStatus = ... # type: 'QByteArray.Base64DecodingStatus' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QByteArray.FromBase64Result') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def __int__(self) -> bool: ... - def swap(self, other: 'QByteArray.FromBase64Result') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, size: int, c: bytes) -> None: ... - @typing.overload - def __init__(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> None: ... - - def __add__(self, a2: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - def assign(self, v: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - def removeLast(self) -> 'QByteArray': ... - def removeFirst(self) -> 'QByteArray': ... - def removeAt(self, pos: int) -> 'QByteArray': ... - def percentDecoded(self, percent: str = ...) -> 'QByteArray': ... - def isValidUtf8(self) -> bool: ... - @typing.overload - def sliced(self, pos: int) -> 'QByteArray': ... - @typing.overload - def sliced(self, pos: int, n: int) -> 'QByteArray': ... - @staticmethod - def fromBase64Encoding(base64: typing.Union['QByteArray', bytes, bytearray, memoryview], options: 'QByteArray.Base64Option' = ...) -> 'QByteArray.FromBase64Result': ... - def isLower(self) -> bool: ... - def isUpper(self) -> bool: ... - def compare(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview], cs: Qt.CaseSensitivity = ...) -> int: ... - def chopped(self, len: int) -> 'QByteArray': ... - def swap(self, other: 'QByteArray') -> None: ... - def repeated(self, times: int) -> 'QByteArray': ... - @staticmethod - def fromPercentEncoding(input: typing.Union['QByteArray', bytes, bytearray, memoryview], percent: str = ...) -> 'QByteArray': ... - def toPercentEncoding(self, exclude: typing.Union['QByteArray', bytes, bytearray, memoryview] = ..., include: typing.Union['QByteArray', bytes, bytearray, memoryview] = ..., percent: str = ...) -> 'QByteArray': ... - def toHex(self, separator: bytes = ...) -> 'QByteArray': ... - def contains(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - def push_front(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> None: ... - def push_back(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> None: ... - def squeeze(self) -> None: ... - def reserve(self, size: int) -> None: ... - def capacity(self) -> int: ... - def data(self) -> bytes: ... - def isEmpty(self) -> bool: ... - def __imul__(self, m: int) -> 'QByteArray': ... - def __mul__(self, m: int) -> 'QByteArray': ... - def __repr__(self) -> str: ... - def __str__(self) -> str: ... - def __hash__(self) -> int: ... - def __contains__(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> int: ... - @typing.overload - def __getitem__(self, i: int) -> bytes: ... - @typing.overload - def __getitem__(self, slice: slice) -> 'QByteArray': ... - def at(self, i: int) -> bytes: ... - def __len__(self) -> int: ... - def size(self) -> int: ... - def isNull(self) -> bool: ... - def length(self) -> int: ... - @staticmethod - def fromHex(hexEncoded: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - @staticmethod - def fromBase64(base64: typing.Union['QByteArray', bytes, bytearray, memoryview], options: 'QByteArray.Base64Option' = ...) -> 'QByteArray': ... - @typing.overload - @staticmethod - def number(n: float, format: str = ..., precision: int = ...) -> 'QByteArray': ... - @typing.overload - @staticmethod - def number(n: int, base: int = ...) -> 'QByteArray': ... - @typing.overload - def setNum(self, n: float, format: str = ..., precision: int = ...) -> 'QByteArray': ... - @typing.overload - def setNum(self, n: int, base: int = ...) -> 'QByteArray': ... - def toBase64(self, options: 'QByteArray.Base64Option' = ...) -> 'QByteArray': ... - def toDouble(self) -> typing.Tuple[float, typing.Optional[bool]]: ... - def toFloat(self) -> typing.Tuple[float, typing.Optional[bool]]: ... - def toULongLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toLongLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toULong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toUInt(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toInt(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toUShort(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toShort(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - @typing.overload - def __ge__(self, s2: typing.Optional[str]) -> bool: ... - @typing.overload - def __ge__(self, a2: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def __le__(self, s2: typing.Optional[str]) -> bool: ... - @typing.overload - def __le__(self, a2: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def __gt__(self, s2: typing.Optional[str]) -> bool: ... - @typing.overload - def __gt__(self, a2: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def __lt__(self, s2: typing.Optional[str]) -> bool: ... - @typing.overload - def __lt__(self, a2: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __iadd__(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - def split(self, sep: bytes) -> typing.List['QByteArray']: ... - @typing.overload - def replace(self, before: typing.Union['QByteArray', bytes, bytearray, memoryview], after: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - @typing.overload - def replace(self, index: int, len: int, s: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - def remove(self, index: int, len: int) -> 'QByteArray': ... - @typing.overload - def insert(self, i: int, data: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - @typing.overload - def insert(self, i: int, count: int, c: bytes) -> 'QByteArray': ... - @typing.overload - def append(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - @typing.overload - def append(self, count: int, c: bytes) -> 'QByteArray': ... - @typing.overload - def prepend(self, a: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> 'QByteArray': ... - @typing.overload - def prepend(self, count: int, c: bytes) -> 'QByteArray': ... - def rightJustified(self, width: int, fill: bytes = ..., truncate: bool = ...) -> 'QByteArray': ... - def leftJustified(self, width: int, fill: bytes = ..., truncate: bool = ...) -> 'QByteArray': ... - def simplified(self) -> 'QByteArray': ... - def trimmed(self) -> 'QByteArray': ... - def toUpper(self) -> 'QByteArray': ... - def toLower(self) -> 'QByteArray': ... - def chop(self, n: int) -> None: ... - def truncate(self, pos: int) -> None: ... - def endsWith(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - def startsWith(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> bool: ... - def last(self, n: int) -> 'QByteArray': ... - def first(self, n: int) -> 'QByteArray': ... - def mid(self, index: int, length: int = ...) -> 'QByteArray': ... - def right(self, len: int) -> 'QByteArray': ... - def left(self, len: int) -> 'QByteArray': ... - @typing.overload - def count(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview]) -> int: ... - @typing.overload - def count(self) -> int: ... - def lastIndexOf(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview], from_: int = ...) -> int: ... - def indexOf(self, bv: typing.Union['QByteArray', bytes, bytearray, memoryview], from_: int = ...) -> int: ... - def clear(self) -> None: ... - def fill(self, c: bytes, size: int = ...) -> 'QByteArray': ... - @typing.overload - def resize(self, size: int) -> None: ... - @typing.overload - def resize(self, size: int, c: str) -> None: ... - - -class QByteArrayMatcher(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, pattern: typing.Optional[bytes], length: int = ...) -> None: ... - @typing.overload - def __init__(self, pattern: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QByteArrayMatcher') -> None: ... - - def pattern(self) -> QByteArray: ... - @typing.overload - def indexIn(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview], from_: int = ...) -> int: ... - @typing.overload - def indexIn(self, str: typing.Optional[bytes], len: int, from_: int = ...) -> int: ... - def setPattern(self, pattern: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QCalendar(PyQt6.sip.simplewrapper): - - class System(enum.Enum): - Gregorian = ... # type: QCalendar.System - Julian = ... # type: QCalendar.System - Milankovic = ... # type: QCalendar.System - Jalali = ... # type: QCalendar.System - IslamicCivil = ... # type: QCalendar.System - - Unspecified = ... # type: int - - class YearMonthDay(PyQt6.sip.simplewrapper): - - day = ... # type: int - month = ... # type: int - year = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, year: int, month: int = ..., day: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QCalendar.YearMonthDay') -> None: ... - - def isValid(self) -> bool: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, system: 'QCalendar.System') -> None: ... - @typing.overload - def __init__(self, name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def __init__(self, a0: 'QCalendar') -> None: ... - - def matchCenturyToWeekday(self, parts: 'QCalendar.YearMonthDay', dow: int) -> 'QDate': ... - @staticmethod - def availableCalendars() -> typing.List[str]: ... - def dateTimeToString(self, format: str, datetime: typing.Union['QDateTime', datetime.datetime], dateOnly: typing.Union['QDate', datetime.date], timeOnly: typing.Union['QTime', datetime.time], locale: 'QLocale') -> str: ... - def standaloneWeekDayName(self, locale: 'QLocale', day: int, format: 'QLocale.FormatType' = ...) -> str: ... - def weekDayName(self, locale: 'QLocale', day: int, format: 'QLocale.FormatType' = ...) -> str: ... - def standaloneMonthName(self, locale: 'QLocale', month: int, year: int = ..., format: 'QLocale.FormatType' = ...) -> str: ... - def monthName(self, locale: 'QLocale', month: int, year: int = ..., format: 'QLocale.FormatType' = ...) -> str: ... - def dayOfWeek(self, date: typing.Union['QDate', datetime.date]) -> int: ... - def partsFromDate(self, date: typing.Union['QDate', datetime.date]) -> 'QCalendar.YearMonthDay': ... - @typing.overload - def dateFromParts(self, year: int, month: int, day: int) -> 'QDate': ... - @typing.overload - def dateFromParts(self, parts: 'QCalendar.YearMonthDay') -> 'QDate': ... - def name(self) -> str: ... - def maximumMonthsInYear(self) -> int: ... - def minimumDaysInMonth(self) -> int: ... - def maximumDaysInMonth(self) -> int: ... - def hasYearZero(self) -> bool: ... - def isProleptic(self) -> bool: ... - def isSolar(self) -> bool: ... - def isLuniSolar(self) -> bool: ... - def isLunar(self) -> bool: ... - def isGregorian(self) -> bool: ... - def isLeapYear(self, year: int) -> bool: ... - def isDateValid(self, year: int, month: int, day: int) -> bool: ... - def monthsInYear(self, year: int) -> int: ... - def daysInYear(self, year: int) -> int: ... - def daysInMonth(self, month: int, year: int = ...) -> int: ... - - -class QCborError(PyQt6.sip.simplewrapper): - - class Code(enum.Enum): - UnknownError = ... # type: QCborError.Code - AdvancePastEnd = ... # type: QCborError.Code - InputOutputError = ... # type: QCborError.Code - GarbageAtEnd = ... # type: QCborError.Code - EndOfFile = ... # type: QCborError.Code - UnexpectedBreak = ... # type: QCborError.Code - UnknownType = ... # type: QCborError.Code - IllegalType = ... # type: QCborError.Code - IllegalNumber = ... # type: QCborError.Code - IllegalSimpleType = ... # type: QCborError.Code - InvalidUtf8String = ... # type: QCborError.Code - DataTooLarge = ... # type: QCborError.Code - NestingTooDeep = ... # type: QCborError.Code - UnsupportedType = ... # type: QCborError.Code - NoError = ... # type: QCborError.Code - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QCborError') -> None: ... - - def toString(self) -> str: ... - def code(self) -> 'QCborError.Code': ... - - -class QCborStreamReader(PyQt6.sip.simplewrapper): - - class StringResultCode(enum.Enum): - EndOfString = ... # type: QCborStreamReader.StringResultCode - Ok = ... # type: QCborStreamReader.StringResultCode - Error = ... # type: QCborStreamReader.StringResultCode - - class Type(enum.Enum): - UnsignedInteger = ... # type: QCborStreamReader.Type - NegativeInteger = ... # type: QCborStreamReader.Type - ByteString = ... # type: QCborStreamReader.Type - ByteArray = ... # type: QCborStreamReader.Type - TextString = ... # type: QCborStreamReader.Type - String = ... # type: QCborStreamReader.Type - Array = ... # type: QCborStreamReader.Type - Map = ... # type: QCborStreamReader.Type - Tag = ... # type: QCborStreamReader.Type - SimpleType = ... # type: QCborStreamReader.Type - HalfFloat = ... # type: QCborStreamReader.Type - Float16 = ... # type: QCborStreamReader.Type - Float = ... # type: QCborStreamReader.Type - Double = ... # type: QCborStreamReader.Type - Invalid = ... # type: QCborStreamReader.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QIODevice]) -> None: ... - - def readAllByteArray(self) -> QByteArray: ... - def readAllUtf8String(self) -> QByteArray: ... - def readAllString(self) -> str: ... - def readAndAppendToByteArray(self, dst: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def readAndAppendToUtf8String(self, dst: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def readAndAppendToString(self, dst: typing.Optional[str]) -> bool: ... - def toInteger(self) -> int: ... - def toDouble(self) -> float: ... - def toSimpleType(self) -> QCborSimpleType: ... - def toUnsignedInteger(self) -> int: ... - def toBool(self) -> bool: ... - def readUtf8String(self) -> typing.Tuple[QByteArray, 'QCborStreamReader.StringResultCode']: ... - def readByteArray(self) -> typing.Tuple[QByteArray, 'QCborStreamReader.StringResultCode']: ... - def readString(self) -> typing.Tuple[str, 'QCborStreamReader.StringResultCode']: ... - def leaveContainer(self) -> bool: ... - def enterContainer(self) -> bool: ... - def isContainer(self) -> bool: ... - def __len__(self) -> int: ... - def length(self) -> int: ... - def isLengthKnown(self) -> bool: ... - def isUndefined(self) -> bool: ... - def isNull(self) -> bool: ... - def isBool(self) -> bool: ... - def isTrue(self) -> bool: ... - def isFalse(self) -> bool: ... - def isInvalid(self) -> bool: ... - def isDouble(self) -> bool: ... - def isFloat(self) -> bool: ... - def isFloat16(self) -> bool: ... - @typing.overload - def isSimpleType(self) -> bool: ... - @typing.overload - def isSimpleType(self, st: QCborSimpleType) -> bool: ... - def isTag(self) -> bool: ... - def isMap(self) -> bool: ... - def isArray(self) -> bool: ... - def isString(self) -> bool: ... - def isByteArray(self) -> bool: ... - def isInteger(self) -> bool: ... - def isNegativeInteger(self) -> bool: ... - def isUnsignedInteger(self) -> bool: ... - def type(self) -> 'QCborStreamReader.Type': ... - def next(self, maxRecursion: int = ...) -> bool: ... - def hasNext(self) -> bool: ... - def parentContainerType(self) -> 'QCborStreamReader.Type': ... - def containerDepth(self) -> int: ... - def isValid(self) -> bool: ... - def currentOffset(self) -> int: ... - def lastError(self) -> QCborError: ... - def reset(self) -> None: ... - def clear(self) -> None: ... - def reparse(self) -> None: ... - def addData(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - def device(self) -> typing.Optional[QIODevice]: ... - def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... - - -class QCborStreamWriter(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, device: typing.Optional[QIODevice]) -> None: ... - @typing.overload - def __init__(self, data: typing.Optional[QByteArray]) -> None: ... - - def endMap(self) -> bool: ... - @typing.overload - def startMap(self) -> None: ... - @typing.overload - def startMap(self, count: int) -> None: ... - def endArray(self) -> bool: ... - @typing.overload - def startArray(self) -> None: ... - @typing.overload - def startArray(self, count: int) -> None: ... - def appendUndefined(self) -> None: ... - def appendNull(self) -> None: ... - @typing.overload - def append(self, ba: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def append(self, str: str) -> None: ... - @typing.overload - def append(self, tag: QCborKnownTags) -> None: ... - @typing.overload - def append(self, st: QCborSimpleType) -> None: ... - @typing.overload - def append(self, b: bool) -> None: ... - @typing.overload - def append(self, d: float) -> None: ... - @typing.overload - def append(self, a0: int) -> None: ... - def device(self) -> typing.Optional[QIODevice]: ... - def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... - - -class QCollatorSortKey(PyQt6.sip.simplewrapper): - - def __init__(self, other: 'QCollatorSortKey') -> None: ... - - def __ge__(self, rhs: 'QCollatorSortKey') -> bool: ... - def __lt__(self, rhs: 'QCollatorSortKey') -> bool: ... - def compare(self, key: 'QCollatorSortKey') -> int: ... - def swap(self, other: 'QCollatorSortKey') -> None: ... - - -class QCollator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, locale: 'QLocale') -> None: ... - @typing.overload - def __init__(self, a0: 'QCollator') -> None: ... - - @staticmethod - def defaultSortKey(key: str) -> QCollatorSortKey: ... - @staticmethod - def defaultCompare(s1: str, s2: str) -> int: ... - def sortKey(self, string: typing.Optional[str]) -> QCollatorSortKey: ... - def compare(self, s1: typing.Optional[str], s2: typing.Optional[str]) -> int: ... - def ignorePunctuation(self) -> bool: ... - def setIgnorePunctuation(self, on: bool) -> None: ... - def numericMode(self) -> bool: ... - def setNumericMode(self, on: bool) -> None: ... - def setCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... - def caseSensitivity(self) -> Qt.CaseSensitivity: ... - def locale(self) -> 'QLocale': ... - def setLocale(self, locale: 'QLocale') -> None: ... - def swap(self, other: 'QCollator') -> None: ... - - -class QCommandLineOption(PyQt6.sip.simplewrapper): - - class Flag(enum.Flag): - HiddenFromHelp = ... # type: QCommandLineOption.Flag - ShortOptionStyle = ... # type: QCommandLineOption.Flag - - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, names: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], description: typing.Optional[str], valueName: typing.Optional[str] = ..., defaultValue: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, names: typing.Iterable[typing.Optional[str]], description: typing.Optional[str], valueName: typing.Optional[str] = ..., defaultValue: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QCommandLineOption') -> None: ... - - def setFlags(self, aflags: 'QCommandLineOption.Flag') -> None: ... - def flags(self) -> 'QCommandLineOption.Flag': ... - def defaultValues(self) -> typing.List[str]: ... - def setDefaultValues(self, defaultValues: typing.Iterable[typing.Optional[str]]) -> None: ... - def setDefaultValue(self, defaultValue: typing.Optional[str]) -> None: ... - def description(self) -> str: ... - def setDescription(self, description: typing.Optional[str]) -> None: ... - def valueName(self) -> str: ... - def setValueName(self, name: typing.Optional[str]) -> None: ... - def names(self) -> typing.List[str]: ... - def swap(self, other: 'QCommandLineOption') -> None: ... - - -class QCommandLineParser(PyQt6.sip.simplewrapper): - - class OptionsAfterPositionalArgumentsMode(enum.Enum): - ParseAsOptions = ... # type: QCommandLineParser.OptionsAfterPositionalArgumentsMode - ParseAsPositionalArguments = ... # type: QCommandLineParser.OptionsAfterPositionalArgumentsMode - - class SingleDashWordOptionMode(enum.Enum): - ParseAsCompactedShortOptions = ... # type: QCommandLineParser.SingleDashWordOptionMode - ParseAsLongOptions = ... # type: QCommandLineParser.SingleDashWordOptionMode - - def __init__(self) -> None: ... - - def setOptionsAfterPositionalArgumentsMode(self, mode: 'QCommandLineParser.OptionsAfterPositionalArgumentsMode') -> None: ... - def showVersion(self) -> None: ... - def addOptions(self, options: typing.Iterable[QCommandLineOption]) -> bool: ... - def helpText(self) -> str: ... - def showHelp(self, exitCode: int = ...) -> None: ... - def unknownOptionNames(self) -> typing.List[str]: ... - def optionNames(self) -> typing.List[str]: ... - def positionalArguments(self) -> typing.List[str]: ... - @typing.overload - def values(self, name: typing.Optional[str]) -> typing.List[str]: ... - @typing.overload - def values(self, option: QCommandLineOption) -> typing.List[str]: ... - @typing.overload - def value(self, name: typing.Optional[str]) -> str: ... - @typing.overload - def value(self, option: QCommandLineOption) -> str: ... - @typing.overload - def isSet(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def isSet(self, option: QCommandLineOption) -> bool: ... - def errorText(self) -> str: ... - def parse(self, arguments: typing.Iterable[typing.Optional[str]]) -> bool: ... - @typing.overload - def process(self, arguments: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def process(self, app: 'QCoreApplication') -> None: ... - def clearPositionalArguments(self) -> None: ... - def addPositionalArgument(self, name: typing.Optional[str], description: typing.Optional[str], syntax: typing.Optional[str] = ...) -> None: ... - def applicationDescription(self) -> str: ... - def setApplicationDescription(self, description: typing.Optional[str]) -> None: ... - def addHelpOption(self) -> QCommandLineOption: ... - def addVersionOption(self) -> QCommandLineOption: ... - def addOption(self, commandLineOption: QCommandLineOption) -> bool: ... - def setSingleDashWordOptionMode(self, parsingMode: 'QCommandLineParser.SingleDashWordOptionMode') -> None: ... - - -class QConcatenateTablesProxyModel(QAbstractItemModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def sourceModels(self) -> typing.List[QAbstractItemModel]: ... - def span(self, index: QModelIndex) -> 'QSize': ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... - def mimeTypes(self) -> typing.List[str]: ... - def columnCount(self, parent: QModelIndex = ...) -> int: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - def parent(self, index: QModelIndex) -> QModelIndex: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def itemData(self, proxyIndex: QModelIndex) -> typing.Dict[int, typing.Any]: ... - def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... - def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... - def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... - def removeSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - def addSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - - -class QCoreApplication(QObject): - - def __init__(self, argv: typing.List[str]) -> None: ... - - def requestPermission(self, permission: typing.Union['QBluetoothPermission', 'QCalendarPermission', 'QCameraPermission', 'QContactsPermission', 'QLocationPermission', 'QMicrophonePermission'], handler: typing.Callable[[typing.Union['QBluetoothPermission', 'QCalendarPermission', 'QCameraPermission', 'QContactsPermission', 'QLocationPermission', 'QMicrophonePermission']], None]) -> None: ... - def checkPermission(self, permission: typing.Union['QBluetoothPermission', 'QCalendarPermission', 'QCameraPermission', 'QContactsPermission', 'QLocationPermission', 'QMicrophonePermission']) -> Qt.PermissionStatus: ... - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - @staticmethod - def isSetuidAllowed() -> bool: ... - @staticmethod - def setSetuidAllowed(allow: bool) -> None: ... - def removeNativeEventFilter(self, filterObj: typing.Optional[QAbstractNativeEventFilter]) -> None: ... - def installNativeEventFilter(self, filterObj: typing.Optional[QAbstractNativeEventFilter]) -> None: ... - @staticmethod - def setQuitLockEnabled(enabled: bool) -> None: ... - @staticmethod - def isQuitLockEnabled() -> bool: ... - @staticmethod - def setEventDispatcher(eventDispatcher: typing.Optional[QAbstractEventDispatcher]) -> None: ... - @staticmethod - def eventDispatcher() -> typing.Optional[QAbstractEventDispatcher]: ... - @staticmethod - def applicationPid() -> int: ... - @staticmethod - def applicationVersion() -> str: ... - @staticmethod - def setApplicationVersion(version: typing.Optional[str]) -> None: ... - def event(self, a0: typing.Optional['QEvent']) -> bool: ... - aboutToQuit: typing.ClassVar[pyqtSignal] - @staticmethod - def exit(returnCode: int = ...) -> None: ... - @staticmethod - def quit() -> None: ... - @staticmethod - def testAttribute(attribute: Qt.ApplicationAttribute) -> bool: ... - @staticmethod - def setAttribute(attribute: Qt.ApplicationAttribute, on: bool = ...) -> None: ... - @staticmethod - def translate(context: typing.Optional[str], sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... - @staticmethod - def removeTranslator(messageFile: typing.Optional['QTranslator']) -> bool: ... - @staticmethod - def installTranslator(messageFile: typing.Optional['QTranslator']) -> bool: ... - @staticmethod - def removeLibraryPath(a0: typing.Optional[str]) -> None: ... - @staticmethod - def addLibraryPath(a0: typing.Optional[str]) -> None: ... - @staticmethod - def libraryPaths() -> typing.List[str]: ... - @staticmethod - def setLibraryPaths(a0: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def applicationFilePath() -> str: ... - @staticmethod - def applicationDirPath() -> str: ... - @staticmethod - def closingDown() -> bool: ... - @staticmethod - def startingUp() -> bool: ... - def notify(self, a0: typing.Optional[QObject], a1: typing.Optional['QEvent']) -> bool: ... - @staticmethod - def removePostedEvents(receiver: typing.Optional[QObject], eventType: int = ...) -> None: ... - @staticmethod - def sendPostedEvents(receiver: typing.Optional[QObject] = ..., eventType: int = ...) -> None: ... - @staticmethod - def postEvent(receiver: typing.Optional[QObject], event: typing.Optional['QEvent'], priority: int = ...) -> None: ... - @staticmethod - def sendEvent(receiver: typing.Optional[QObject], event: typing.Optional['QEvent']) -> bool: ... - @typing.overload - @staticmethod - def processEvents(flags: 'QEventLoop.ProcessEventsFlag' = ...) -> None: ... - @typing.overload - @staticmethod - def processEvents(flags: 'QEventLoop.ProcessEventsFlag', maxtime: int) -> None: ... - @typing.overload - @staticmethod - def processEvents(flags: 'QEventLoop.ProcessEventsFlag', deadline: 'QDeadlineTimer') -> None: ... - @staticmethod - def exec() -> int: ... - @staticmethod - def instance() -> typing.Optional['QCoreApplication']: ... - @staticmethod - def arguments() -> typing.List[str]: ... - @staticmethod - def applicationName() -> str: ... - @staticmethod - def setApplicationName(application: typing.Optional[str]) -> None: ... - @staticmethod - def organizationName() -> str: ... - @staticmethod - def setOrganizationName(orgName: typing.Optional[str]) -> None: ... - @staticmethod - def organizationDomain() -> str: ... - @staticmethod - def setOrganizationDomain(orgDomain: typing.Optional[str]) -> None: ... - - -class QEvent(PyQt6.sip.wrapper): - - class Type(enum.IntEnum): - None_ = ... # type: QEvent.Type - Timer = ... # type: QEvent.Type - MouseButtonPress = ... # type: QEvent.Type - MouseButtonRelease = ... # type: QEvent.Type - MouseButtonDblClick = ... # type: QEvent.Type - MouseMove = ... # type: QEvent.Type - KeyPress = ... # type: QEvent.Type - KeyRelease = ... # type: QEvent.Type - FocusIn = ... # type: QEvent.Type - FocusOut = ... # type: QEvent.Type - Enter = ... # type: QEvent.Type - Leave = ... # type: QEvent.Type - Paint = ... # type: QEvent.Type - Move = ... # type: QEvent.Type - Resize = ... # type: QEvent.Type - Show = ... # type: QEvent.Type - Hide = ... # type: QEvent.Type - Close = ... # type: QEvent.Type - Quit = ... # type: QEvent.Type - ParentChange = ... # type: QEvent.Type - ParentAboutToChange = ... # type: QEvent.Type - ThreadChange = ... # type: QEvent.Type - WindowActivate = ... # type: QEvent.Type - WindowDeactivate = ... # type: QEvent.Type - ShowToParent = ... # type: QEvent.Type - HideToParent = ... # type: QEvent.Type - Wheel = ... # type: QEvent.Type - WindowTitleChange = ... # type: QEvent.Type - WindowIconChange = ... # type: QEvent.Type - ApplicationWindowIconChange = ... # type: QEvent.Type - ApplicationFontChange = ... # type: QEvent.Type - ApplicationLayoutDirectionChange = ... # type: QEvent.Type - ApplicationPaletteChange = ... # type: QEvent.Type - PaletteChange = ... # type: QEvent.Type - Clipboard = ... # type: QEvent.Type - MetaCall = ... # type: QEvent.Type - SockAct = ... # type: QEvent.Type - WinEventAct = ... # type: QEvent.Type - DeferredDelete = ... # type: QEvent.Type - DragEnter = ... # type: QEvent.Type - DragMove = ... # type: QEvent.Type - DragLeave = ... # type: QEvent.Type - Drop = ... # type: QEvent.Type - ChildAdded = ... # type: QEvent.Type - ChildPolished = ... # type: QEvent.Type - ChildRemoved = ... # type: QEvent.Type - PolishRequest = ... # type: QEvent.Type - Polish = ... # type: QEvent.Type - LayoutRequest = ... # type: QEvent.Type - UpdateRequest = ... # type: QEvent.Type - UpdateLater = ... # type: QEvent.Type - ContextMenu = ... # type: QEvent.Type - InputMethod = ... # type: QEvent.Type - TabletMove = ... # type: QEvent.Type - LocaleChange = ... # type: QEvent.Type - LanguageChange = ... # type: QEvent.Type - LayoutDirectionChange = ... # type: QEvent.Type - TabletPress = ... # type: QEvent.Type - TabletRelease = ... # type: QEvent.Type - OkRequest = ... # type: QEvent.Type - IconDrag = ... # type: QEvent.Type - FontChange = ... # type: QEvent.Type - EnabledChange = ... # type: QEvent.Type - ActivationChange = ... # type: QEvent.Type - StyleChange = ... # type: QEvent.Type - IconTextChange = ... # type: QEvent.Type - ModifiedChange = ... # type: QEvent.Type - MouseTrackingChange = ... # type: QEvent.Type - WindowBlocked = ... # type: QEvent.Type - WindowUnblocked = ... # type: QEvent.Type - WindowStateChange = ... # type: QEvent.Type - ToolTip = ... # type: QEvent.Type - WhatsThis = ... # type: QEvent.Type - StatusTip = ... # type: QEvent.Type - ActionChanged = ... # type: QEvent.Type - ActionAdded = ... # type: QEvent.Type - ActionRemoved = ... # type: QEvent.Type - FileOpen = ... # type: QEvent.Type - Shortcut = ... # type: QEvent.Type - ShortcutOverride = ... # type: QEvent.Type - WhatsThisClicked = ... # type: QEvent.Type - ToolBarChange = ... # type: QEvent.Type - ApplicationActivate = ... # type: QEvent.Type - ApplicationActivated = ... # type: QEvent.Type - ApplicationDeactivate = ... # type: QEvent.Type - ApplicationDeactivated = ... # type: QEvent.Type - QueryWhatsThis = ... # type: QEvent.Type - EnterWhatsThisMode = ... # type: QEvent.Type - LeaveWhatsThisMode = ... # type: QEvent.Type - ZOrderChange = ... # type: QEvent.Type - HoverEnter = ... # type: QEvent.Type - HoverLeave = ... # type: QEvent.Type - HoverMove = ... # type: QEvent.Type - GraphicsSceneMouseMove = ... # type: QEvent.Type - GraphicsSceneMousePress = ... # type: QEvent.Type - GraphicsSceneMouseRelease = ... # type: QEvent.Type - GraphicsSceneMouseDoubleClick = ... # type: QEvent.Type - GraphicsSceneContextMenu = ... # type: QEvent.Type - GraphicsSceneHoverEnter = ... # type: QEvent.Type - GraphicsSceneHoverMove = ... # type: QEvent.Type - GraphicsSceneHoverLeave = ... # type: QEvent.Type - GraphicsSceneHelp = ... # type: QEvent.Type - GraphicsSceneDragEnter = ... # type: QEvent.Type - GraphicsSceneDragMove = ... # type: QEvent.Type - GraphicsSceneDragLeave = ... # type: QEvent.Type - GraphicsSceneDrop = ... # type: QEvent.Type - GraphicsSceneWheel = ... # type: QEvent.Type - GraphicsSceneResize = ... # type: QEvent.Type - GraphicsSceneMove = ... # type: QEvent.Type - KeyboardLayoutChange = ... # type: QEvent.Type - DynamicPropertyChange = ... # type: QEvent.Type - TabletEnterProximity = ... # type: QEvent.Type - TabletLeaveProximity = ... # type: QEvent.Type - NonClientAreaMouseMove = ... # type: QEvent.Type - NonClientAreaMouseButtonPress = ... # type: QEvent.Type - NonClientAreaMouseButtonRelease = ... # type: QEvent.Type - NonClientAreaMouseButtonDblClick = ... # type: QEvent.Type - MacSizeChange = ... # type: QEvent.Type - ContentsRectChange = ... # type: QEvent.Type - CursorChange = ... # type: QEvent.Type - ToolTipChange = ... # type: QEvent.Type - GrabMouse = ... # type: QEvent.Type - UngrabMouse = ... # type: QEvent.Type - GrabKeyboard = ... # type: QEvent.Type - UngrabKeyboard = ... # type: QEvent.Type - StateMachineSignal = ... # type: QEvent.Type - StateMachineWrapped = ... # type: QEvent.Type - TouchBegin = ... # type: QEvent.Type - TouchUpdate = ... # type: QEvent.Type - TouchEnd = ... # type: QEvent.Type - NativeGesture = ... # type: QEvent.Type - RequestSoftwareInputPanel = ... # type: QEvent.Type - CloseSoftwareInputPanel = ... # type: QEvent.Type - WinIdChange = ... # type: QEvent.Type - Gesture = ... # type: QEvent.Type - GestureOverride = ... # type: QEvent.Type - FocusAboutToChange = ... # type: QEvent.Type - ScrollPrepare = ... # type: QEvent.Type - Scroll = ... # type: QEvent.Type - Expose = ... # type: QEvent.Type - InputMethodQuery = ... # type: QEvent.Type - OrientationChange = ... # type: QEvent.Type - TouchCancel = ... # type: QEvent.Type - PlatformPanel = ... # type: QEvent.Type - ApplicationStateChange = ... # type: QEvent.Type - ReadOnlyChange = ... # type: QEvent.Type - PlatformSurface = ... # type: QEvent.Type - TabletTrackingChange = ... # type: QEvent.Type - GraphicsSceneLeave = ... # type: QEvent.Type - EnterEditFocus = ... # type: QEvent.Type - LeaveEditFocus = ... # type: QEvent.Type - DevicePixelRatioChange = ... # type: QEvent.Type - ChildWindowAdded = ... # type: QEvent.Type - ChildWindowRemoved = ... # type: QEvent.Type - ParentWindowAboutToChange = ... # type: QEvent.Type - ParentWindowChange = ... # type: QEvent.Type - User = ... # type: QEvent.Type - MaxUser = ... # type: QEvent.Type - - @typing.overload - def __init__(self, type: 'QEvent.Type') -> None: ... - @typing.overload - def __init__(self, type: int) -> None: ... - - def clone(self) -> typing.Optional['QEvent']: ... - def isSinglePointEvent(self) -> bool: ... - def isPointerEvent(self) -> bool: ... - def isInputEvent(self) -> bool: ... - @staticmethod - def registerEventType(hint: int = ...) -> int: ... - def ignore(self) -> None: ... - def accept(self) -> None: ... - def isAccepted(self) -> bool: ... - def setAccepted(self, accepted: bool) -> None: ... - def spontaneous(self) -> bool: ... - def type(self) -> 'QEvent.Type': ... - - -class QTimerEvent(QEvent): - - def __init__(self, timerId: int) -> None: ... - - def clone(self) -> typing.Optional['QTimerEvent']: ... - def timerId(self) -> int: ... - - -class QChildEvent(QEvent): - - @typing.overload - def __init__(self, type: QEvent.Type, child: typing.Optional[QObject]) -> None: ... - @typing.overload - def __init__(self, type: int, child: typing.Optional[QObject]) -> None: ... - - def clone(self) -> typing.Optional['QChildEvent']: ... - def removed(self) -> bool: ... - def polished(self) -> bool: ... - def added(self) -> bool: ... - def child(self) -> typing.Optional[QObject]: ... - - -class QDynamicPropertyChangeEvent(QEvent): - - def __init__(self, name: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - - def clone(self) -> typing.Optional['QDynamicPropertyChangeEvent']: ... - def propertyName(self) -> QByteArray: ... - - -class QCryptographicHash(PyQt6.sip.simplewrapper): - - class Algorithm(enum.Enum): - Md4 = ... # type: QCryptographicHash.Algorithm - Md5 = ... # type: QCryptographicHash.Algorithm - Sha1 = ... # type: QCryptographicHash.Algorithm - Sha224 = ... # type: QCryptographicHash.Algorithm - Sha256 = ... # type: QCryptographicHash.Algorithm - Sha384 = ... # type: QCryptographicHash.Algorithm - Sha512 = ... # type: QCryptographicHash.Algorithm - Sha3_224 = ... # type: QCryptographicHash.Algorithm - Sha3_256 = ... # type: QCryptographicHash.Algorithm - Sha3_384 = ... # type: QCryptographicHash.Algorithm - Sha3_512 = ... # type: QCryptographicHash.Algorithm - Keccak_224 = ... # type: QCryptographicHash.Algorithm - Keccak_256 = ... # type: QCryptographicHash.Algorithm - Keccak_384 = ... # type: QCryptographicHash.Algorithm - Keccak_512 = ... # type: QCryptographicHash.Algorithm - Blake2b_160 = ... # type: QCryptographicHash.Algorithm - Blake2b_256 = ... # type: QCryptographicHash.Algorithm - Blake2b_384 = ... # type: QCryptographicHash.Algorithm - Blake2b_512 = ... # type: QCryptographicHash.Algorithm - Blake2s_128 = ... # type: QCryptographicHash.Algorithm - Blake2s_160 = ... # type: QCryptographicHash.Algorithm - Blake2s_224 = ... # type: QCryptographicHash.Algorithm - Blake2s_256 = ... # type: QCryptographicHash.Algorithm - - def __init__(self, method: 'QCryptographicHash.Algorithm') -> None: ... - - @staticmethod - def supportsAlgorithm(method: 'QCryptographicHash.Algorithm') -> bool: ... - def algorithm(self) -> 'QCryptographicHash.Algorithm': ... - def swap(self, other: 'QCryptographicHash') -> None: ... - @staticmethod - def hashLength(method: 'QCryptographicHash.Algorithm') -> int: ... - @staticmethod - def hash(data: typing.Union[QByteArray, bytes, bytearray, memoryview], method: 'QCryptographicHash.Algorithm') -> QByteArray: ... - def resultView(self) -> QByteArray: ... - def result(self) -> QByteArray: ... - @typing.overload - def addData(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def addData(self, data: typing.Optional[PyQt6.sip.array[bytes]]) -> None: ... - @typing.overload - def addData(self, device: typing.Optional[QIODevice]) -> bool: ... - def reset(self) -> None: ... - - -class QDataStream(QIODeviceBase): - - class FloatingPointPrecision(enum.Enum): - SinglePrecision = ... # type: QDataStream.FloatingPointPrecision - DoublePrecision = ... # type: QDataStream.FloatingPointPrecision - - class Status(enum.Enum): - Ok = ... # type: QDataStream.Status - ReadPastEnd = ... # type: QDataStream.Status - ReadCorruptData = ... # type: QDataStream.Status - WriteFailed = ... # type: QDataStream.Status - SizeLimitExceeded = ... # type: QDataStream.Status - - class ByteOrder(enum.Enum): - BigEndian = ... # type: QDataStream.ByteOrder - LittleEndian = ... # type: QDataStream.ByteOrder - - class Version(enum.IntEnum): - Qt_1_0 = ... # type: QDataStream.Version - Qt_2_0 = ... # type: QDataStream.Version - Qt_2_1 = ... # type: QDataStream.Version - Qt_3_0 = ... # type: QDataStream.Version - Qt_3_1 = ... # type: QDataStream.Version - Qt_3_3 = ... # type: QDataStream.Version - Qt_4_0 = ... # type: QDataStream.Version - Qt_4_1 = ... # type: QDataStream.Version - Qt_4_2 = ... # type: QDataStream.Version - Qt_4_3 = ... # type: QDataStream.Version - Qt_4_4 = ... # type: QDataStream.Version - Qt_4_5 = ... # type: QDataStream.Version - Qt_4_6 = ... # type: QDataStream.Version - Qt_4_7 = ... # type: QDataStream.Version - Qt_4_8 = ... # type: QDataStream.Version - Qt_4_9 = ... # type: QDataStream.Version - Qt_5_0 = ... # type: QDataStream.Version - Qt_5_1 = ... # type: QDataStream.Version - Qt_5_2 = ... # type: QDataStream.Version - Qt_5_3 = ... # type: QDataStream.Version - Qt_5_4 = ... # type: QDataStream.Version - Qt_5_5 = ... # type: QDataStream.Version - Qt_5_6 = ... # type: QDataStream.Version - Qt_5_7 = ... # type: QDataStream.Version - Qt_5_8 = ... # type: QDataStream.Version - Qt_5_9 = ... # type: QDataStream.Version - Qt_5_10 = ... # type: QDataStream.Version - Qt_5_11 = ... # type: QDataStream.Version - Qt_5_12 = ... # type: QDataStream.Version - Qt_5_13 = ... # type: QDataStream.Version - Qt_5_14 = ... # type: QDataStream.Version - Qt_5_15 = ... # type: QDataStream.Version - Qt_6_0 = ... # type: QDataStream.Version - Qt_6_1 = ... # type: QDataStream.Version - Qt_6_2 = ... # type: QDataStream.Version - Qt_6_3 = ... # type: QDataStream.Version - Qt_6_4 = ... # type: QDataStream.Version - Qt_6_5 = ... # type: QDataStream.Version - Qt_6_6 = ... # type: QDataStream.Version - Qt_6_7 = ... # type: QDataStream.Version - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QIODevice]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QByteArray], flags: QIODeviceBase.OpenModeFlag) -> None: ... - @typing.overload - def __init__(self, a0: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - - @typing.overload - def __lshift__(self, a0: QBitArray) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: QByteArray) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, combination: QKeyCombination) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: typing.Union['QDate', datetime.date]) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: typing.Union['QTime', datetime.time]) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: typing.Union['QDateTime', datetime.datetime]) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QEasingCurve') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QJsonDocument') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: typing.Optional['QJsonValue']) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QLine') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QLineF') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QLocale') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QMargins') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QMarginsF') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QPoint') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QPointF') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QRect') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QRectF') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, re: 'QRegularExpression') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QSize') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QSizeF') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, tz: 'QTimeZone') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, revision: 'QTypeRevision') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QUrl') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, a0: 'QUuid') -> 'QDataStream': ... - @typing.overload - def __lshift__(self, p: typing.Optional['QVariant']) -> 'QDataStream': ... - @typing.overload - def __lshift__(self, version: 'QVersionNumber') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: QBitArray) -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: QByteArray) -> 'QDataStream': ... - @typing.overload - def __rshift__(self, combination: QKeyCombination) -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QDate') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QTime') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QDateTime') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QEasingCurve') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QJsonDocument') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: typing.Optional['QJsonValue']) -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QLine') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QLineF') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QLocale') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QMargins') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QMarginsF') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QPoint') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QPointF') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QRect') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QRectF') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, re: 'QRegularExpression') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QSize') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QSizeF') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, tz: 'QTimeZone') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, revision: 'QTypeRevision') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QUrl') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, a0: 'QUuid') -> 'QDataStream': ... - @typing.overload - def __rshift__(self, p: typing.Optional['QVariant']) -> 'QDataStream': ... - @typing.overload - def __rshift__(self, version: 'QVersionNumber') -> 'QDataStream': ... - def writeQVariantHash(self, qvarhash: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def readQVariantHash(self) -> typing.Dict[str, typing.Any]: ... - def writeQVariantMap(self, qvarmap: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def readQVariantMap(self) -> typing.Dict[str, typing.Any]: ... - def writeQVariantList(self, qvarlst: typing.Iterable[typing.Any]) -> None: ... - def readQVariantList(self) -> typing.List[typing.Any]: ... - def writeQVariant(self, qvar: typing.Any) -> None: ... - def readQVariant(self) -> typing.Any: ... - def writeQStringList(self, qstrlst: typing.Iterable[typing.Optional[str]]) -> None: ... - def readQStringList(self) -> typing.List[str]: ... - def writeQString(self, qstr: typing.Optional[str]) -> None: ... - def readQString(self) -> str: ... - def writeString(self, str: typing.Optional[bytes]) -> None: ... - def writeDouble(self, f: float) -> None: ... - def writeFloat(self, f: float) -> None: ... - def writeBool(self, i: bool) -> None: ... - def writeUInt64(self, i: int) -> None: ... - def writeInt64(self, i: int) -> None: ... - def writeUInt32(self, i: int) -> None: ... - def writeInt32(self, i: int) -> None: ... - def writeUInt16(self, i: int) -> None: ... - def writeInt16(self, i: int) -> None: ... - def writeUInt8(self, i: int) -> None: ... - def writeInt8(self, i: int) -> None: ... - def writeInt(self, i: int) -> None: ... - def readString(self) -> bytes: ... - def readDouble(self) -> float: ... - def readFloat(self) -> float: ... - def readBool(self) -> bool: ... - def readUInt64(self) -> int: ... - def readInt64(self) -> int: ... - def readUInt32(self) -> int: ... - def readInt32(self) -> int: ... - def readUInt16(self) -> int: ... - def readInt16(self) -> int: ... - def readUInt8(self) -> int: ... - def readInt8(self) -> int: ... - def readInt(self) -> int: ... - def abortTransaction(self) -> None: ... - def rollbackTransaction(self) -> None: ... - def commitTransaction(self) -> bool: ... - def startTransaction(self) -> None: ... - def skipRawData(self, len: int) -> int: ... - def writeRawData(self, a0: PyQt6.sip.Buffer) -> int: ... - def writeBytes(self, a0: PyQt6.sip.Buffer) -> 'QDataStream': ... - def readRawData(self, len: int) -> bytes: ... - def readBytes(self) -> bytes: ... - def setVersion(self, a0: int) -> None: ... - def version(self) -> int: ... - def setByteOrder(self, a0: 'QDataStream.ByteOrder') -> None: ... - def byteOrder(self) -> 'QDataStream.ByteOrder': ... - def setFloatingPointPrecision(self, precision: 'QDataStream.FloatingPointPrecision') -> None: ... - def floatingPointPrecision(self) -> 'QDataStream.FloatingPointPrecision': ... - def resetStatus(self) -> None: ... - def setStatus(self, status: 'QDataStream.Status') -> None: ... - def status(self) -> 'QDataStream.Status': ... - def atEnd(self) -> bool: ... - def setDevice(self, a0: typing.Optional[QIODevice]) -> None: ... - def device(self) -> typing.Optional[QIODevice]: ... - - -class QDate(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, y: int, m: int, d: int) -> None: ... - @typing.overload - def __init__(self, y: int, m: int, d: int, cal: QCalendar) -> None: ... - @typing.overload - def __init__(self, a0: 'QDate') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: typing.Union['QDate', datetime.date]) -> bool: ... - def __le__(self, rhs: typing.Union['QDate', datetime.date]) -> bool: ... - def __gt__(self, rhs: typing.Union['QDate', datetime.date]) -> bool: ... - def __ge__(self, rhs: typing.Union['QDate', datetime.date]) -> bool: ... - def daysTo(self, d: typing.Union['QDate', datetime.date]) -> int: ... - @typing.overload - def endOfDay(self, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... - @typing.overload - def endOfDay(self, zone: 'QTimeZone') -> 'QDateTime': ... - @typing.overload - def startOfDay(self, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... - @typing.overload - def startOfDay(self, zone: 'QTimeZone') -> 'QDateTime': ... - def getDate(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def setDate(self, year: int, month: int, date: int) -> bool: ... - @typing.overload - def setDate(self, year: int, month: int, day: int, cal: QCalendar) -> bool: ... - def toJulianDay(self) -> int: ... - @staticmethod - def fromJulianDay(jd: int) -> 'QDate': ... - @staticmethod - def isLeapYear(year: int) -> bool: ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QDate': ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar = ...) -> 'QDate': ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: typing.Optional[str], baseYear: int, cal: QCalendar = ...) -> 'QDate': ... - @staticmethod - def currentDate() -> 'QDate': ... - @typing.overload - def addYears(self, years: int) -> 'QDate': ... - @typing.overload - def addYears(self, years: int, cal: QCalendar) -> 'QDate': ... - @typing.overload - def addMonths(self, months: int) -> 'QDate': ... - @typing.overload - def addMonths(self, months: int, cal: QCalendar) -> 'QDate': ... - def addDays(self, days: int) -> 'QDate': ... - @typing.overload - def toString(self, format: typing.Optional[str], cal: QCalendar = ...) -> str: ... - @typing.overload - def toString(self, format: Qt.DateFormat = ...) -> str: ... - def weekNumber(self) -> typing.Tuple[int, typing.Optional[int]]: ... - @typing.overload - def daysInYear(self) -> int: ... - @typing.overload - def daysInYear(self, cal: QCalendar) -> int: ... - @typing.overload - def daysInMonth(self) -> int: ... - @typing.overload - def daysInMonth(self, cal: QCalendar) -> int: ... - @typing.overload - def dayOfYear(self) -> int: ... - @typing.overload - def dayOfYear(self, cal: QCalendar) -> int: ... - @typing.overload - def dayOfWeek(self) -> int: ... - @typing.overload - def dayOfWeek(self, cal: QCalendar) -> int: ... - @typing.overload - def day(self) -> int: ... - @typing.overload - def day(self, cal: QCalendar) -> int: ... - @typing.overload - def month(self) -> int: ... - @typing.overload - def month(self, cal: QCalendar) -> int: ... - @typing.overload - def year(self) -> int: ... - @typing.overload - def year(self, cal: QCalendar) -> int: ... - @typing.overload - def isValid(self) -> bool: ... - @typing.overload - @staticmethod - def isValid(y: int, m: int, d: int) -> bool: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def toPyDate(self) -> datetime.date: ... - def __hash__(self) -> int: ... - def __repr__(self) -> str: ... - - -class QTime(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, h: int, m: int, second: int = ..., msec: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QTime') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: typing.Union['QTime', datetime.time]) -> bool: ... - def __le__(self, rhs: typing.Union['QTime', datetime.time]) -> bool: ... - def __gt__(self, rhs: typing.Union['QTime', datetime.time]) -> bool: ... - def __ge__(self, rhs: typing.Union['QTime', datetime.time]) -> bool: ... - def msecsTo(self, t: typing.Union['QTime', datetime.time]) -> int: ... - def secsTo(self, t: typing.Union['QTime', datetime.time]) -> int: ... - def msecsSinceStartOfDay(self) -> int: ... - @staticmethod - def fromMSecsSinceStartOfDay(msecs: int) -> 'QTime': ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QTime': ... - @typing.overload - @staticmethod - def fromString(s: typing.Optional[str], format: typing.Optional[str]) -> 'QTime': ... - @staticmethod - def currentTime() -> 'QTime': ... - def addMSecs(self, ms: int) -> 'QTime': ... - def addSecs(self, secs: int) -> 'QTime': ... - def setHMS(self, h: int, m: int, s: int, msec: int = ...) -> bool: ... - @typing.overload - def toString(self, format: Qt.DateFormat = ...) -> str: ... - @typing.overload - def toString(self, format: typing.Optional[str]) -> str: ... - def msec(self) -> int: ... - def second(self) -> int: ... - def minute(self) -> int: ... - def hour(self) -> int: ... - @typing.overload - def isValid(self) -> bool: ... - @typing.overload - @staticmethod - def isValid(h: int, m: int, s: int, msec: int = ...) -> bool: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def toPyTime(self) -> datetime.time: ... - def __hash__(self) -> int: ... - def __repr__(self) -> str: ... - - -class QDateTime(PyQt6.sip.simplewrapper): - - class YearRange(enum.Enum): - First = ... # type: QDateTime.YearRange - Last = ... # type: QDateTime.YearRange - - class TransitionResolution(enum.Enum): - Reject = ... # type: QDateTime.TransitionResolution - RelativeToBefore = ... # type: QDateTime.TransitionResolution - RelativeToAfter = ... # type: QDateTime.TransitionResolution - PreferBefore = ... # type: QDateTime.TransitionResolution - PreferAfter = ... # type: QDateTime.TransitionResolution - PreferStandard = ... # type: QDateTime.TransitionResolution - PreferDaylightSaving = ... # type: QDateTime.TransitionResolution - LegacyBehavior = ... # type: QDateTime.TransitionResolution - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: typing.Union['QDateTime', datetime.datetime]) -> None: ... - @typing.overload - def __init__(self, year: int, month: int, day: int, hour: int, minute: int, second: int = ..., msec: int = ..., timeSpec: int = ...) -> None: ... - @typing.overload - def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], resolve: 'QDateTime.TransitionResolution') -> None: ... - @typing.overload - def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> None: ... - @typing.overload - def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], timeZone: 'QTimeZone', resolve: 'QDateTime.TransitionResolution' = ...) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: typing.Union['QDateTime', datetime.datetime]) -> bool: ... - def __le__(self, rhs: typing.Union['QDateTime', datetime.datetime]) -> bool: ... - def __gt__(self, rhs: typing.Union['QDateTime', datetime.datetime]) -> bool: ... - def __ge__(self, rhs: typing.Union['QDateTime', datetime.datetime]) -> bool: ... - def timeRepresentation(self) -> 'QTimeZone': ... - def setTime(self, time: typing.Union[QTime, datetime.time], resolve: 'QDateTime.TransitionResolution' = ...) -> None: ... - def setDate(self, date: typing.Union[QDate, datetime.date], resolve: 'QDateTime.TransitionResolution' = ...) -> None: ... - @staticmethod - def currentSecsSinceEpoch() -> int: ... - @typing.overload - @staticmethod - def fromSecsSinceEpoch(secs: int, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... - @typing.overload - @staticmethod - def fromSecsSinceEpoch(secs: int, timeZone: 'QTimeZone') -> 'QDateTime': ... - def setSecsSinceEpoch(self, secs: int) -> None: ... - def toSecsSinceEpoch(self) -> int: ... - @typing.overload - @staticmethod - def fromMSecsSinceEpoch(msecs: int, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... - @typing.overload - @staticmethod - def fromMSecsSinceEpoch(msecs: int, timeZone: 'QTimeZone') -> 'QDateTime': ... - def toTimeZone(self, toZone: 'QTimeZone') -> 'QDateTime': ... - def toOffsetFromUtc(self, offsetSeconds: int) -> 'QDateTime': ... - def setTimeZone(self, toZone: 'QTimeZone', resolve: 'QDateTime.TransitionResolution' = ...) -> None: ... - def setOffsetFromUtc(self, offsetSeconds: int) -> None: ... - def isDaylightTime(self) -> bool: ... - def timeZoneAbbreviation(self) -> str: ... - def timeZone(self) -> 'QTimeZone': ... - def offsetFromUtc(self) -> int: ... - def swap(self, other: 'QDateTime') -> None: ... - @staticmethod - def currentMSecsSinceEpoch() -> int: ... - @staticmethod - def currentDateTimeUtc() -> 'QDateTime': ... - def msecsTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... - def setMSecsSinceEpoch(self, msecs: int) -> None: ... - def toMSecsSinceEpoch(self) -> int: ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QDateTime': ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar = ...) -> 'QDateTime': ... - @typing.overload - @staticmethod - def fromString(string: typing.Optional[str], format: typing.Optional[str], baseYear: int, cal: QCalendar = ...) -> 'QDateTime': ... - @typing.overload - @staticmethod - def currentDateTime() -> 'QDateTime': ... - @typing.overload - @staticmethod - def currentDateTime(zone: 'QTimeZone') -> 'QDateTime': ... - def secsTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... - def daysTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... - def toUTC(self) -> 'QDateTime': ... - def toLocalTime(self) -> 'QDateTime': ... - def toTimeSpec(self, spec: Qt.TimeSpec) -> 'QDateTime': ... - def addMSecs(self, msecs: int) -> 'QDateTime': ... - def addSecs(self, secs: int) -> 'QDateTime': ... - def addYears(self, years: int) -> 'QDateTime': ... - def addMonths(self, months: int) -> 'QDateTime': ... - def addDays(self, days: int) -> 'QDateTime': ... - @typing.overload - def toString(self, format: typing.Optional[str], cal: QCalendar = ...) -> str: ... - @typing.overload - def toString(self, format: Qt.DateFormat = ...) -> str: ... - def setTimeSpec(self, spec: Qt.TimeSpec) -> None: ... - def timeSpec(self) -> Qt.TimeSpec: ... - def time(self) -> QTime: ... - def date(self) -> QDate: ... - def isValid(self) -> bool: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def toPyDateTime(self) -> datetime.datetime: ... - def __hash__(self) -> int: ... - def __repr__(self) -> str: ... - - -class QDeadlineTimer(PyQt6.sip.simplewrapper): - - class ForeverConstant(enum.Enum): - Forever = ... # type: QDeadlineTimer.ForeverConstant - - @typing.overload - def __init__(self, type: Qt.TimerType = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QDeadlineTimer.ForeverConstant', type: Qt.TimerType = ...) -> None: ... - @typing.overload - def __init__(self, msecs: int, type: Qt.TimerType = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QDeadlineTimer') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, d2: 'QDeadlineTimer') -> bool: ... - def __le__(self, d2: 'QDeadlineTimer') -> bool: ... - def __gt__(self, d2: 'QDeadlineTimer') -> bool: ... - def __ge__(self, d2: 'QDeadlineTimer') -> bool: ... - def __add__(self, msecs: int) -> 'QDeadlineTimer': ... - def __radd__(self, msecs: int) -> 'QDeadlineTimer': ... - @typing.overload - def __sub__(self, msecs: int) -> 'QDeadlineTimer': ... - @typing.overload - def __sub__(self, dt2: 'QDeadlineTimer') -> int: ... - def __isub__(self, msecs: int) -> 'QDeadlineTimer': ... - def __iadd__(self, msecs: int) -> 'QDeadlineTimer': ... - @staticmethod - def current(type: Qt.TimerType = ...) -> 'QDeadlineTimer': ... - @staticmethod - def addNSecs(dt: 'QDeadlineTimer', nsecs: int) -> 'QDeadlineTimer': ... - def setPreciseDeadline(self, secs: int, nsecs: int = ..., type: Qt.TimerType = ...) -> None: ... - def setDeadline(self, msecs: int, type: Qt.TimerType = ...) -> None: ... - def deadlineNSecs(self) -> int: ... - def deadline(self) -> int: ... - def setPreciseRemainingTime(self, secs: int, nsecs: int = ..., type: Qt.TimerType = ...) -> None: ... - def setRemainingTime(self, msecs: int, type: Qt.TimerType = ...) -> None: ... - def remainingTimeNSecs(self) -> int: ... - def remainingTime(self) -> int: ... - def setTimerType(self, type: Qt.TimerType) -> None: ... - def timerType(self) -> Qt.TimerType: ... - def hasExpired(self) -> bool: ... - def isForever(self) -> bool: ... - def swap(self, other: 'QDeadlineTimer') -> None: ... - - -class QDir(PyQt6.sip.simplewrapper): - - class SortFlag(enum.Flag): - Name = ... # type: QDir.SortFlag - Time = ... # type: QDir.SortFlag - Size = ... # type: QDir.SortFlag - Unsorted = ... # type: QDir.SortFlag - SortByMask = ... # type: QDir.SortFlag - DirsFirst = ... # type: QDir.SortFlag - Reversed = ... # type: QDir.SortFlag - IgnoreCase = ... # type: QDir.SortFlag - DirsLast = ... # type: QDir.SortFlag - LocaleAware = ... # type: QDir.SortFlag - Type = ... # type: QDir.SortFlag - NoSort = ... # type: QDir.SortFlag - - class Filter(enum.Flag): - Dirs = ... # type: QDir.Filter - Files = ... # type: QDir.Filter - Drives = ... # type: QDir.Filter - NoSymLinks = ... # type: QDir.Filter - AllEntries = ... # type: QDir.Filter - TypeMask = ... # type: QDir.Filter - Readable = ... # type: QDir.Filter - Writable = ... # type: QDir.Filter - Executable = ... # type: QDir.Filter - PermissionMask = ... # type: QDir.Filter - Modified = ... # type: QDir.Filter - Hidden = ... # type: QDir.Filter - System = ... # type: QDir.Filter - AccessMask = ... # type: QDir.Filter - AllDirs = ... # type: QDir.Filter - CaseSensitive = ... # type: QDir.Filter - NoDotAndDotDot = ... # type: QDir.Filter - NoFilter = ... # type: QDir.Filter - NoDot = ... # type: QDir.Filter - NoDotDot = ... # type: QDir.Filter - - @typing.overload - def __init__(self, path: typing.Optional[str], nameFilter: typing.Optional[str], sort: 'QDir.SortFlag' = ..., filters: 'QDir.Filter' = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QDir') -> None: ... - @typing.overload - def __init__(self, path: typing.Optional[str] = ...) -> None: ... - - def isEmpty(self, filters: 'QDir.Filter' = ...) -> bool: ... - @staticmethod - def listSeparator() -> str: ... - def swap(self, other: 'QDir') -> None: ... - def removeRecursively(self) -> bool: ... - @staticmethod - def searchPaths(prefix: typing.Optional[str]) -> typing.List[str]: ... - @staticmethod - def addSearchPath(prefix: typing.Optional[str], path: typing.Optional[str]) -> None: ... - @staticmethod - def setSearchPaths(prefix: typing.Optional[str], searchPaths: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def fromNativeSeparators(pathName: typing.Optional[str]) -> str: ... - @staticmethod - def toNativeSeparators(pathName: typing.Optional[str]) -> str: ... - @staticmethod - def cleanPath(path: typing.Optional[str]) -> str: ... - @typing.overload - @staticmethod - def match(filters: typing.Iterable[typing.Optional[str]], fileName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def match(filter: typing.Optional[str], fileName: typing.Optional[str]) -> bool: ... - @staticmethod - def tempPath() -> str: ... - @staticmethod - def temp() -> 'QDir': ... - @staticmethod - def rootPath() -> str: ... - @staticmethod - def root() -> 'QDir': ... - @staticmethod - def homePath() -> str: ... - @staticmethod - def home() -> 'QDir': ... - @staticmethod - def currentPath() -> str: ... - @staticmethod - def current() -> 'QDir': ... - @staticmethod - def setCurrent(path: typing.Optional[str]) -> bool: ... - @staticmethod - def separator() -> str: ... - @staticmethod - def drives() -> typing.List['QFileInfo']: ... - def refresh(self) -> None: ... - def rename(self, oldName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... - def remove(self, fileName: typing.Optional[str]) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def makeAbsolute(self) -> bool: ... - def isAbsolute(self) -> bool: ... - def isRelative(self) -> bool: ... - @staticmethod - def isAbsolutePath(path: typing.Optional[str]) -> bool: ... - @staticmethod - def isRelativePath(path: typing.Optional[str]) -> bool: ... - def isRoot(self) -> bool: ... - @typing.overload - def exists(self) -> bool: ... - @typing.overload - def exists(self, name: typing.Optional[str]) -> bool: ... - def isReadable(self) -> bool: ... - def rmpath(self, dirPath: typing.Optional[str]) -> bool: ... - def mkpath(self, dirPath: typing.Optional[str]) -> bool: ... - def rmdir(self, dirName: typing.Optional[str]) -> bool: ... - @typing.overload - def mkdir(self, dirName: typing.Optional[str], permissions: 'QFileDevice.Permission') -> bool: ... - @typing.overload - def mkdir(self, dirName: typing.Optional[str]) -> bool: ... - @typing.overload - def entryInfoList(self, filters: 'QDir.Filter' = ..., sort: 'QDir.SortFlag' = ...) -> typing.List['QFileInfo']: ... - @typing.overload - def entryInfoList(self, nameFilters: typing.Iterable[typing.Optional[str]], filters: 'QDir.Filter' = ..., sort: 'QDir.SortFlag' = ...) -> typing.List['QFileInfo']: ... - @typing.overload - def entryList(self, filters: 'QDir.Filter' = ..., sort: 'QDir.SortFlag' = ...) -> typing.List[str]: ... - @typing.overload - def entryList(self, nameFilters: typing.Iterable[typing.Optional[str]], filters: 'QDir.Filter' = ..., sort: 'QDir.SortFlag' = ...) -> typing.List[str]: ... - @staticmethod - def nameFiltersFromString(nameFilter: typing.Optional[str]) -> typing.List[str]: ... - def __contains__(self, a0: typing.Optional[str]) -> int: ... - @typing.overload - def __getitem__(self, a0: int) -> str: ... - @typing.overload - def __getitem__(self, a0: slice) -> typing.List[str]: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def setSorting(self, sort: 'QDir.SortFlag') -> None: ... - def sorting(self) -> 'QDir.SortFlag': ... - def setFilter(self, filter: 'QDir.Filter') -> None: ... - def filter(self) -> 'QDir.Filter': ... - def setNameFilters(self, nameFilters: typing.Iterable[typing.Optional[str]]) -> None: ... - def nameFilters(self) -> typing.List[str]: ... - def cdUp(self) -> bool: ... - def cd(self, dirName: typing.Optional[str]) -> bool: ... - def relativeFilePath(self, fileName: typing.Optional[str]) -> str: ... - def absoluteFilePath(self, fileName: typing.Optional[str]) -> str: ... - def filePath(self, fileName: typing.Optional[str]) -> str: ... - def dirName(self) -> str: ... - def canonicalPath(self) -> str: ... - def absolutePath(self) -> str: ... - def path(self) -> str: ... - def setPath(self, path: typing.Optional[str]) -> None: ... - - -class QDirIterator(PyQt6.sip.simplewrapper): - - class IteratorFlag(enum.Flag): - NoIteratorFlags = ... # type: QDirIterator.IteratorFlag - FollowSymlinks = ... # type: QDirIterator.IteratorFlag - Subdirectories = ... # type: QDirIterator.IteratorFlag - - @typing.overload - def __init__(self, dir: QDir, flags: 'QDirIterator.IteratorFlag' = ...) -> None: ... - @typing.overload - def __init__(self, path: typing.Optional[str], flags: 'QDirIterator.IteratorFlag' = ...) -> None: ... - @typing.overload - def __init__(self, path: typing.Optional[str], filter: QDir.Filter, flags: 'QDirIterator.IteratorFlag' = ...) -> None: ... - @typing.overload - def __init__(self, path: typing.Optional[str], nameFilters: typing.Iterable[typing.Optional[str]], filters: QDir.Filter = ..., flags: 'QDirIterator.IteratorFlag' = ...) -> None: ... - - def path(self) -> str: ... - def fileInfo(self) -> 'QFileInfo': ... - def filePath(self) -> str: ... - def fileName(self) -> str: ... - def hasNext(self) -> bool: ... - def nextFileInfo(self) -> 'QFileInfo': ... - def next(self) -> str: ... - - -class QEasingCurve(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - Linear = ... # type: QEasingCurve.Type - InQuad = ... # type: QEasingCurve.Type - OutQuad = ... # type: QEasingCurve.Type - InOutQuad = ... # type: QEasingCurve.Type - OutInQuad = ... # type: QEasingCurve.Type - InCubic = ... # type: QEasingCurve.Type - OutCubic = ... # type: QEasingCurve.Type - InOutCubic = ... # type: QEasingCurve.Type - OutInCubic = ... # type: QEasingCurve.Type - InQuart = ... # type: QEasingCurve.Type - OutQuart = ... # type: QEasingCurve.Type - InOutQuart = ... # type: QEasingCurve.Type - OutInQuart = ... # type: QEasingCurve.Type - InQuint = ... # type: QEasingCurve.Type - OutQuint = ... # type: QEasingCurve.Type - InOutQuint = ... # type: QEasingCurve.Type - OutInQuint = ... # type: QEasingCurve.Type - InSine = ... # type: QEasingCurve.Type - OutSine = ... # type: QEasingCurve.Type - InOutSine = ... # type: QEasingCurve.Type - OutInSine = ... # type: QEasingCurve.Type - InExpo = ... # type: QEasingCurve.Type - OutExpo = ... # type: QEasingCurve.Type - InOutExpo = ... # type: QEasingCurve.Type - OutInExpo = ... # type: QEasingCurve.Type - InCirc = ... # type: QEasingCurve.Type - OutCirc = ... # type: QEasingCurve.Type - InOutCirc = ... # type: QEasingCurve.Type - OutInCirc = ... # type: QEasingCurve.Type - InElastic = ... # type: QEasingCurve.Type - OutElastic = ... # type: QEasingCurve.Type - InOutElastic = ... # type: QEasingCurve.Type - OutInElastic = ... # type: QEasingCurve.Type - InBack = ... # type: QEasingCurve.Type - OutBack = ... # type: QEasingCurve.Type - InOutBack = ... # type: QEasingCurve.Type - OutInBack = ... # type: QEasingCurve.Type - InBounce = ... # type: QEasingCurve.Type - OutBounce = ... # type: QEasingCurve.Type - InOutBounce = ... # type: QEasingCurve.Type - OutInBounce = ... # type: QEasingCurve.Type - InCurve = ... # type: QEasingCurve.Type - OutCurve = ... # type: QEasingCurve.Type - SineCurve = ... # type: QEasingCurve.Type - CosineCurve = ... # type: QEasingCurve.Type - BezierSpline = ... # type: QEasingCurve.Type - TCBSpline = ... # type: QEasingCurve.Type - Custom = ... # type: QEasingCurve.Type - - @typing.overload - def __init__(self, type: 'QEasingCurve.Type' = ...) -> None: ... - @typing.overload - def __init__(self, other: typing.Union['QEasingCurve', 'QEasingCurve.Type']) -> None: ... - - def toCubicSpline(self) -> typing.List['QPointF']: ... - def addTCBSegment(self, nextPoint: 'QPointF', t: float, c: float, b: float) -> None: ... - def addCubicBezierSegment(self, c1: 'QPointF', c2: 'QPointF', endPoint: 'QPointF') -> None: ... - def swap(self, other: 'QEasingCurve') -> None: ... - def valueForProgress(self, progress: float) -> float: ... - def customType(self) -> typing.Callable[[float], float]: ... - def setCustomType(self, func: typing.Callable[[float], float]) -> None: ... - def setType(self, type: 'QEasingCurve.Type') -> None: ... - def type(self) -> 'QEasingCurve.Type': ... - def setOvershoot(self, overshoot: float) -> None: ... - def overshoot(self) -> float: ... - def setPeriod(self, period: float) -> None: ... - def period(self) -> float: ... - def setAmplitude(self, amplitude: float) -> None: ... - def amplitude(self) -> float: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QElapsedTimer(PyQt6.sip.simplewrapper): - - class ClockType(enum.Enum): - SystemTime = ... # type: QElapsedTimer.ClockType - MonotonicClock = ... # type: QElapsedTimer.ClockType - TickCounter = ... # type: QElapsedTimer.ClockType - MachAbsoluteTime = ... # type: QElapsedTimer.ClockType - PerformanceCounter = ... # type: QElapsedTimer.ClockType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QElapsedTimer') -> None: ... - - def __ge__(self, v2: 'QElapsedTimer') -> bool: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, v2: 'QElapsedTimer') -> bool: ... - def nsecsElapsed(self) -> int: ... - def secsTo(self, other: 'QElapsedTimer') -> int: ... - def msecsTo(self, other: 'QElapsedTimer') -> int: ... - def msecsSinceReference(self) -> int: ... - def hasExpired(self, timeout: int) -> bool: ... - def elapsed(self) -> int: ... - def isValid(self) -> bool: ... - def invalidate(self) -> None: ... - def restart(self) -> int: ... - def start(self) -> None: ... - @staticmethod - def isMonotonic() -> bool: ... - @staticmethod - def clockType() -> 'QElapsedTimer.ClockType': ... - - -class QEventLoop(QObject): - - class ProcessEventsFlag(enum.Flag): - AllEvents = ... # type: QEventLoop.ProcessEventsFlag - ExcludeUserInputEvents = ... # type: QEventLoop.ProcessEventsFlag - ExcludeSocketNotifiers = ... # type: QEventLoop.ProcessEventsFlag - WaitForMoreEvents = ... # type: QEventLoop.ProcessEventsFlag - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def event(self, event: typing.Optional[QEvent]) -> bool: ... - def quit(self) -> None: ... - def wakeUp(self) -> None: ... - def isRunning(self) -> bool: ... - def exit(self, returnCode: int = ...) -> None: ... - def exec(self, flags: 'QEventLoop.ProcessEventsFlag' = ...) -> int: ... - @typing.overload - def processEvents(self, flags: 'QEventLoop.ProcessEventsFlag' = ...) -> bool: ... - @typing.overload - def processEvents(self, flags: 'QEventLoop.ProcessEventsFlag', maximumTime: int) -> None: ... - @typing.overload - def processEvents(self, flags: 'QEventLoop.ProcessEventsFlag', deadline: QDeadlineTimer) -> None: ... - - -class QEventLoopLocker(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, loop: typing.Optional[QEventLoop]) -> None: ... - @typing.overload - def __init__(self, thread: typing.Optional['QThread']) -> None: ... - - def swap(self, other: 'QEventLoopLocker') -> None: ... - - -class QFileDevice(QIODevice): - - class MemoryMapFlag(enum.Flag): - NoOptions = ... # type: QFileDevice.MemoryMapFlag - MapPrivateOption = ... # type: QFileDevice.MemoryMapFlag - - class FileTime(enum.Enum): - FileAccessTime = ... # type: QFileDevice.FileTime - FileBirthTime = ... # type: QFileDevice.FileTime - FileMetadataChangeTime = ... # type: QFileDevice.FileTime - FileModificationTime = ... # type: QFileDevice.FileTime - - class FileHandleFlag(enum.Flag): - AutoCloseHandle = ... # type: QFileDevice.FileHandleFlag - DontCloseHandle = ... # type: QFileDevice.FileHandleFlag - - class Permission(enum.Flag): - ReadOwner = ... # type: QFileDevice.Permission - WriteOwner = ... # type: QFileDevice.Permission - ExeOwner = ... # type: QFileDevice.Permission - ReadUser = ... # type: QFileDevice.Permission - WriteUser = ... # type: QFileDevice.Permission - ExeUser = ... # type: QFileDevice.Permission - ReadGroup = ... # type: QFileDevice.Permission - WriteGroup = ... # type: QFileDevice.Permission - ExeGroup = ... # type: QFileDevice.Permission - ReadOther = ... # type: QFileDevice.Permission - WriteOther = ... # type: QFileDevice.Permission - ExeOther = ... # type: QFileDevice.Permission - - class FileError(enum.Enum): - NoError = ... # type: QFileDevice.FileError - ReadError = ... # type: QFileDevice.FileError - WriteError = ... # type: QFileDevice.FileError - FatalError = ... # type: QFileDevice.FileError - ResourceError = ... # type: QFileDevice.FileError - OpenError = ... # type: QFileDevice.FileError - AbortError = ... # type: QFileDevice.FileError - TimeOutError = ... # type: QFileDevice.FileError - UnspecifiedError = ... # type: QFileDevice.FileError - RemoveError = ... # type: QFileDevice.FileError - RenameError = ... # type: QFileDevice.FileError - PositionError = ... # type: QFileDevice.FileError - ResizeError = ... # type: QFileDevice.FileError - PermissionsError = ... # type: QFileDevice.FileError - CopyError = ... # type: QFileDevice.FileError - - def setFileTime(self, newDate: typing.Union[QDateTime, datetime.datetime], fileTime: 'QFileDevice.FileTime') -> bool: ... - def fileTime(self, time: 'QFileDevice.FileTime') -> QDateTime: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readLineData(self, maxlen: int) -> bytes: ... - def readData(self, maxlen: int) -> bytes: ... - def unmap(self, address: typing.Optional[PyQt6.sip.voidptr]) -> bool: ... - def map(self, offset: int, size: int, flags: 'QFileDevice.MemoryMapFlag' = ...) -> typing.Optional[PyQt6.sip.voidptr]: ... - def setPermissions(self, permissionSpec: 'QFileDevice.Permission') -> bool: ... - def permissions(self) -> 'QFileDevice.Permission': ... - def resize(self, sz: int) -> bool: ... - def size(self) -> int: ... - def flush(self) -> bool: ... - def atEnd(self) -> bool: ... - def seek(self, offset: int) -> bool: ... - def pos(self) -> int: ... - def fileName(self) -> str: ... - def handle(self) -> int: ... - def isSequential(self) -> bool: ... - def close(self) -> None: ... - def unsetError(self) -> None: ... - def error(self) -> 'QFileDevice.FileError': ... - - -class QFile(QFileDevice): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QObject]) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... - - @typing.overload - def moveToTrash(self) -> bool: ... - @typing.overload - @staticmethod - def moveToTrash(fileName: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[str]]: ... - @typing.overload - def setPermissions(self, permissionSpec: QFileDevice.Permission) -> bool: ... - @typing.overload - @staticmethod - def setPermissions(filename: typing.Optional[str], permissionSpec: QFileDevice.Permission) -> bool: ... - @typing.overload - def permissions(self) -> QFileDevice.Permission: ... - @typing.overload - @staticmethod - def permissions(filename: typing.Optional[str]) -> QFileDevice.Permission: ... - @typing.overload - def resize(self, sz: int) -> bool: ... - @typing.overload - @staticmethod - def resize(filename: typing.Optional[str], sz: int) -> bool: ... - def size(self) -> int: ... - @typing.overload - def open(self, flags: QIODeviceBase.OpenModeFlag, permissions: QFileDevice.Permission) -> bool: ... - @typing.overload - def open(self, flags: QIODeviceBase.OpenModeFlag) -> bool: ... - @typing.overload - def open(self, fd: int, ioFlags: QIODeviceBase.OpenModeFlag, handleFlags: QFileDevice.FileHandleFlag = ...) -> bool: ... - @typing.overload - def copy(self, newName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def copy(fileName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... - @typing.overload - def link(self, newName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def link(oldname: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... - @typing.overload - def rename(self, newName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def rename(oldName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... - @typing.overload - def remove(self) -> bool: ... - @typing.overload - @staticmethod - def remove(fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def symLinkTarget(self) -> str: ... - @typing.overload - @staticmethod - def symLinkTarget(fileName: typing.Optional[str]) -> str: ... - @typing.overload - def exists(self) -> bool: ... - @typing.overload - @staticmethod - def exists(fileName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def decodeName(localFileName: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> str: ... - @typing.overload - @staticmethod - def decodeName(localFileName: typing.Optional[str]) -> str: ... - @staticmethod - def encodeName(fileName: typing.Optional[str]) -> QByteArray: ... - def setFileName(self, name: typing.Optional[str]) -> None: ... - def fileName(self) -> str: ... - - -class QFileInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, file: QFileDevice) -> None: ... - @typing.overload - def __init__(self, file: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, dir: QDir, file: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, fileinfo: 'QFileInfo') -> None: ... - - def readSymLink(self) -> str: ... - def isAlias(self) -> bool: ... - def junctionTarget(self) -> str: ... - def stat(self) -> None: ... - def isJunction(self) -> bool: ... - def isShortcut(self) -> bool: ... - def isSymbolicLink(self) -> bool: ... - @typing.overload - def fileTime(self, time: QFileDevice.FileTime) -> QDateTime: ... - @typing.overload - def fileTime(self, time: QFileDevice.FileTime, tz: 'QTimeZone') -> QDateTime: ... - @typing.overload - def metadataChangeTime(self) -> QDateTime: ... - @typing.overload - def metadataChangeTime(self, tz: 'QTimeZone') -> QDateTime: ... - @typing.overload - def birthTime(self) -> QDateTime: ... - @typing.overload - def birthTime(self, tz: 'QTimeZone') -> QDateTime: ... - def swap(self, other: 'QFileInfo') -> None: ... - def isNativePath(self) -> bool: ... - def isBundle(self) -> bool: ... - def bundleName(self) -> str: ... - def symLinkTarget(self) -> str: ... - def setCaching(self, on: bool) -> None: ... - def caching(self) -> bool: ... - @typing.overload - def lastRead(self) -> QDateTime: ... - @typing.overload - def lastRead(self, tz: 'QTimeZone') -> QDateTime: ... - @typing.overload - def lastModified(self) -> QDateTime: ... - @typing.overload - def lastModified(self, tz: 'QTimeZone') -> QDateTime: ... - def size(self) -> int: ... - def permissions(self) -> QFileDevice.Permission: ... - def permission(self, permissions: QFileDevice.Permission) -> bool: ... - def groupId(self) -> int: ... - def group(self) -> str: ... - def ownerId(self) -> int: ... - def owner(self) -> str: ... - def isRoot(self) -> bool: ... - def isSymLink(self) -> bool: ... - def isDir(self) -> bool: ... - def isFile(self) -> bool: ... - def makeAbsolute(self) -> bool: ... - def isAbsolute(self) -> bool: ... - def isRelative(self) -> bool: ... - def isHidden(self) -> bool: ... - def isExecutable(self) -> bool: ... - def isWritable(self) -> bool: ... - def isReadable(self) -> bool: ... - def absoluteDir(self) -> QDir: ... - def dir(self) -> QDir: ... - def canonicalPath(self) -> str: ... - def absolutePath(self) -> str: ... - def path(self) -> str: ... - def completeSuffix(self) -> str: ... - def suffix(self) -> str: ... - def completeBaseName(self) -> str: ... - def baseName(self) -> str: ... - def fileName(self) -> str: ... - def canonicalFilePath(self) -> str: ... - def absoluteFilePath(self) -> str: ... - def __fspath__(self) -> typing.Any: ... - def filePath(self) -> str: ... - def refresh(self) -> None: ... - @typing.overload - def exists(self) -> bool: ... - @typing.overload - @staticmethod - def exists(file: typing.Optional[str]) -> bool: ... - @typing.overload - def setFile(self, file: typing.Optional[str]) -> None: ... - @typing.overload - def setFile(self, file: QFileDevice) -> None: ... - @typing.overload - def setFile(self, dir: QDir, file: typing.Optional[str]) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QFileSelector(QObject): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def allSelectors(self) -> typing.List[str]: ... - def setExtraSelectors(self, list: typing.Iterable[typing.Optional[str]]) -> None: ... - def extraSelectors(self) -> typing.List[str]: ... - @typing.overload - def select(self, filePath: typing.Optional[str]) -> str: ... - @typing.overload - def select(self, filePath: 'QUrl') -> 'QUrl': ... - - -class QFileSystemWatcher(QObject): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, paths: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QObject] = ...) -> None: ... - - fileChanged: typing.ClassVar[pyqtSignal] - directoryChanged: typing.ClassVar[pyqtSignal] - def removePaths(self, files: typing.Iterable[typing.Optional[str]]) -> typing.List[str]: ... - def removePath(self, file: typing.Optional[str]) -> bool: ... - def files(self) -> typing.List[str]: ... - def directories(self) -> typing.List[str]: ... - def addPaths(self, files: typing.Iterable[typing.Optional[str]]) -> typing.List[str]: ... - def addPath(self, file: typing.Optional[str]) -> bool: ... - - -class QIdentityProxyModel(QAbstractProxyModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: Qt.MatchFlag = ...) -> typing.List[QModelIndex]: ... - def mapSelectionToSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... - def mapSelectionFromSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... - def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - def parent(self, child: QModelIndex) -> QModelIndex: ... - def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... - def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - def columnCount(self, parent: QModelIndex = ...) -> int: ... - - -class QItemSelectionRange(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, atopLeft: QModelIndex, abottomRight: QModelIndex) -> None: ... - @typing.overload - def __init__(self, index: QModelIndex) -> None: ... - @typing.overload - def __init__(self, a0: 'QItemSelectionRange') -> None: ... - - def swap(self, other: 'QItemSelectionRange') -> None: ... - def isEmpty(self) -> bool: ... - def intersected(self, other: 'QItemSelectionRange') -> 'QItemSelectionRange': ... - def indexes(self) -> typing.List[QModelIndex]: ... - def isValid(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def intersects(self, other: 'QItemSelectionRange') -> bool: ... - @typing.overload - def contains(self, index: QModelIndex) -> bool: ... - @typing.overload - def contains(self, row: int, column: int, parentIndex: QModelIndex) -> bool: ... - def model(self) -> typing.Optional[QAbstractItemModel]: ... - def parent(self) -> QModelIndex: ... - def bottomRight(self) -> QPersistentModelIndex: ... - def topLeft(self) -> QPersistentModelIndex: ... - def height(self) -> int: ... - def width(self) -> int: ... - def right(self) -> int: ... - def bottom(self) -> int: ... - def left(self) -> int: ... - def top(self) -> int: ... - - -class QItemSelectionModel(QObject): - - class SelectionFlag(enum.Flag): - NoUpdate = ... # type: QItemSelectionModel.SelectionFlag - Clear = ... # type: QItemSelectionModel.SelectionFlag - Select = ... # type: QItemSelectionModel.SelectionFlag - Deselect = ... # type: QItemSelectionModel.SelectionFlag - Toggle = ... # type: QItemSelectionModel.SelectionFlag - Current = ... # type: QItemSelectionModel.SelectionFlag - Rows = ... # type: QItemSelectionModel.SelectionFlag - Columns = ... # type: QItemSelectionModel.SelectionFlag - SelectCurrent = ... # type: QItemSelectionModel.SelectionFlag - ToggleCurrent = ... # type: QItemSelectionModel.SelectionFlag - ClearAndSelect = ... # type: QItemSelectionModel.SelectionFlag - - @typing.overload - def __init__(self, model: typing.Optional[QAbstractItemModel] = ...) -> None: ... - @typing.overload - def __init__(self, model: typing.Optional[QAbstractItemModel], parent: typing.Optional[QObject]) -> None: ... - - modelChanged: typing.ClassVar[pyqtSignal] - def setModel(self, model: typing.Optional[QAbstractItemModel]) -> None: ... - def selectedColumns(self, row: int = ...) -> typing.List[QModelIndex]: ... - def selectedRows(self, column: int = ...) -> typing.List[QModelIndex]: ... - def hasSelection(self) -> bool: ... - def emitSelectionChanged(self, newSelection: 'QItemSelection', oldSelection: 'QItemSelection') -> None: ... - currentColumnChanged: typing.ClassVar[pyqtSignal] - currentRowChanged: typing.ClassVar[pyqtSignal] - currentChanged: typing.ClassVar[pyqtSignal] - selectionChanged: typing.ClassVar[pyqtSignal] - def clearCurrentIndex(self) -> None: ... - def setCurrentIndex(self, index: QModelIndex, command: 'QItemSelectionModel.SelectionFlag') -> None: ... - @typing.overload - def select(self, index: QModelIndex, command: 'QItemSelectionModel.SelectionFlag') -> None: ... - @typing.overload - def select(self, selection: 'QItemSelection', command: 'QItemSelectionModel.SelectionFlag') -> None: ... - def reset(self) -> None: ... - def clearSelection(self) -> None: ... - def clear(self) -> None: ... - def model(self) -> typing.Optional[QAbstractItemModel]: ... - def selection(self) -> 'QItemSelection': ... - def selectedIndexes(self) -> typing.List[QModelIndex]: ... - def columnIntersectsSelection(self, column: int, parent: QModelIndex = ...) -> bool: ... - def rowIntersectsSelection(self, row: int, parent: QModelIndex = ...) -> bool: ... - def isColumnSelected(self, column: int, parent: QModelIndex = ...) -> bool: ... - def isRowSelected(self, row: int, parent: QModelIndex = ...) -> bool: ... - def isSelected(self, index: QModelIndex) -> bool: ... - def currentIndex(self) -> QModelIndex: ... - - -class QItemSelection(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, topLeft: QModelIndex, bottomRight: QModelIndex) -> None: ... - @typing.overload - def __init__(self, a0: 'QItemSelection') -> None: ... - - @typing.overload - def __iadd__(self, other: 'QItemSelection') -> 'QItemSelection': ... - @typing.overload - def __iadd__(self, value: QItemSelectionRange) -> 'QItemSelection': ... - def lastIndexOf(self, value: QItemSelectionRange, from_: int = ...) -> int: ... - def indexOf(self, value: QItemSelectionRange, from_: int = ...) -> int: ... - def last(self) -> QItemSelectionRange: ... - def first(self) -> QItemSelectionRange: ... - def __len__(self) -> int: ... - @typing.overload - def count(self, range: QItemSelectionRange) -> int: ... - @typing.overload - def count(self) -> int: ... - def move(self, from_: int, to: int) -> None: ... - def takeLast(self) -> QItemSelectionRange: ... - def takeFirst(self) -> QItemSelectionRange: ... - def takeAt(self, i: int) -> QItemSelectionRange: ... - def removeAll(self, range: QItemSelectionRange) -> int: ... - def removeAt(self, i: int) -> None: ... - def replace(self, i: int, range: QItemSelectionRange) -> None: ... - def insert(self, i: int, range: QItemSelectionRange) -> None: ... - def prepend(self, range: QItemSelectionRange) -> None: ... - def append(self, range: QItemSelectionRange) -> None: ... - def isEmpty(self) -> bool: ... - def clear(self) -> None: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @typing.overload - def __getitem__(self, i: int) -> QItemSelectionRange: ... - @typing.overload - def __getitem__(self, slice: slice) -> 'QItemSelection': ... - @typing.overload - def __delitem__(self, i: int) -> None: ... - @typing.overload - def __delitem__(self, slice: slice) -> None: ... - @typing.overload - def __setitem__(self, i: int, range: QItemSelectionRange) -> None: ... - @typing.overload - def __setitem__(self, slice: slice, list: 'QItemSelection') -> None: ... - @staticmethod - def split(range: QItemSelectionRange, other: QItemSelectionRange, result: typing.Optional['QItemSelection']) -> None: ... - def merge(self, other: 'QItemSelection', command: QItemSelectionModel.SelectionFlag) -> None: ... - def indexes(self) -> typing.List[QModelIndex]: ... - def __contains__(self, index: QModelIndex) -> int: ... - def contains(self, index: QModelIndex) -> bool: ... - def select(self, topLeft: QModelIndex, bottomRight: QModelIndex) -> None: ... - - -class QJsonParseError(PyQt6.sip.simplewrapper): - - class ParseError(enum.Enum): - NoError = ... # type: QJsonParseError.ParseError - UnterminatedObject = ... # type: QJsonParseError.ParseError - MissingNameSeparator = ... # type: QJsonParseError.ParseError - UnterminatedArray = ... # type: QJsonParseError.ParseError - MissingValueSeparator = ... # type: QJsonParseError.ParseError - IllegalValue = ... # type: QJsonParseError.ParseError - TerminationByNumber = ... # type: QJsonParseError.ParseError - IllegalNumber = ... # type: QJsonParseError.ParseError - IllegalEscapeSequence = ... # type: QJsonParseError.ParseError - IllegalUTF8String = ... # type: QJsonParseError.ParseError - UnterminatedString = ... # type: QJsonParseError.ParseError - MissingObject = ... # type: QJsonParseError.ParseError - DeepNesting = ... # type: QJsonParseError.ParseError - DocumentTooLarge = ... # type: QJsonParseError.ParseError - GarbageAtEnd = ... # type: QJsonParseError.ParseError - - error = ... # type: 'QJsonParseError.ParseError' - offset = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QJsonParseError') -> None: ... - - def errorString(self) -> str: ... - - -class QJsonDocument(PyQt6.sip.simplewrapper): - - class JsonFormat(enum.Enum): - Indented = ... # type: QJsonDocument.JsonFormat - Compact = ... # type: QJsonDocument.JsonFormat - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, object: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... - @typing.overload - def __init__(self, array: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... - @typing.overload - def __init__(self, other: 'QJsonDocument') -> None: ... - - @typing.overload - def __getitem__(self, i: int) -> typing.Optional['QJsonValue']: ... - @typing.overload - def __getitem__(self, key: typing.Optional[str]) -> typing.Optional['QJsonValue']: ... - def swap(self, other: 'QJsonDocument') -> None: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def setArray(self, array: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... - def setObject(self, object: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... - def array(self) -> typing.List['QJsonValue']: ... - def object(self) -> typing.Dict[str, 'QJsonValue']: ... - def isObject(self) -> bool: ... - def isArray(self) -> bool: ... - def isEmpty(self) -> bool: ... - def toJson(self, format: 'QJsonDocument.JsonFormat' = ...) -> QByteArray: ... - @staticmethod - def fromJson(json: typing.Union[QByteArray, bytes, bytearray, memoryview], error: typing.Optional[QJsonParseError] = ...) -> 'QJsonDocument': ... - def toVariant(self) -> typing.Any: ... - @staticmethod - def fromVariant(variant: typing.Any) -> 'QJsonDocument': ... - - -class QJsonValue(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - Null = ... # type: QJsonValue.Type - Bool = ... # type: QJsonValue.Type - Double = ... # type: QJsonValue.Type - String = ... # type: QJsonValue.Type - Array = ... # type: QJsonValue.Type - Object = ... # type: QJsonValue.Type - Undefined = ... # type: QJsonValue.Type - - @typing.overload - def __init__(self, type: 'QJsonValue.Type' = ...) -> None: ... - @typing.overload - def __init__(self, other: typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]) -> None: ... - - def __hash__(self) -> int: ... - @typing.overload - def __getitem__(self, i: int) -> typing.Optional['QJsonValue']: ... - @typing.overload - def __getitem__(self, key: typing.Optional[str]) -> typing.Optional['QJsonValue']: ... - def swap(self, other: typing.Optional['QJsonValue']) -> None: ... - @typing.overload - def toString(self) -> str: ... - @typing.overload - def toString(self, defaultValue: typing.Optional[str]) -> str: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @typing.overload - def toObject(self) -> typing.Dict[str, 'QJsonValue']: ... - @typing.overload - def toObject(self, defaultValue: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> typing.Dict[str, 'QJsonValue']: ... - @typing.overload - def toArray(self) -> typing.List['QJsonValue']: ... - @typing.overload - def toArray(self, defaultValue: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> typing.List['QJsonValue']: ... - def toDouble(self, defaultValue: float = ...) -> float: ... - def toInteger(self, defaultValue: int = ...) -> int: ... - def toInt(self, defaultValue: int = ...) -> int: ... - def toBool(self, defaultValue: bool = ...) -> bool: ... - def isUndefined(self) -> bool: ... - def isObject(self) -> bool: ... - def isArray(self) -> bool: ... - def isString(self) -> bool: ... - def isDouble(self) -> bool: ... - def isBool(self) -> bool: ... - def isNull(self) -> bool: ... - def type(self) -> 'QJsonValue.Type': ... - def toVariant(self) -> typing.Any: ... - @staticmethod - def fromVariant(variant: typing.Any) -> typing.Optional['QJsonValue']: ... - - -class QLibrary(QObject): - - class LoadHint(enum.Flag): - ResolveAllSymbolsHint = ... # type: QLibrary.LoadHint - ExportExternalSymbolsHint = ... # type: QLibrary.LoadHint - LoadArchiveMemberHint = ... # type: QLibrary.LoadHint - PreventUnloadHint = ... # type: QLibrary.LoadHint - DeepBindHint = ... # type: QLibrary.LoadHint - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], verNum: int, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], version: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... - - def setLoadHints(self, hints: 'QLibrary.LoadHint') -> None: ... - @typing.overload - def setFileNameAndVersion(self, fileName: typing.Optional[str], verNum: int) -> None: ... - @typing.overload - def setFileNameAndVersion(self, fileName: typing.Optional[str], version: typing.Optional[str]) -> None: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - @staticmethod - def isLibrary(fileName: typing.Optional[str]) -> bool: ... - def unload(self) -> bool: ... - @typing.overload - def resolve(self, symbol: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - @typing.overload - @staticmethod - def resolve(fileName: typing.Optional[str], symbol: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - @typing.overload - @staticmethod - def resolve(fileName: typing.Optional[str], verNum: int, symbol: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - @typing.overload - @staticmethod - def resolve(fileName: typing.Optional[str], version: typing.Optional[str], symbol: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - def loadHints(self) -> 'QLibrary.LoadHint': ... - def load(self) -> bool: ... - def isLoaded(self) -> bool: ... - def fileName(self) -> str: ... - def errorString(self) -> str: ... - - -class QLibraryInfo(PyQt6.sip.simplewrapper): - - class LibraryPath(enum.Enum): - PrefixPath = ... # type: QLibraryInfo.LibraryPath - DocumentationPath = ... # type: QLibraryInfo.LibraryPath - HeadersPath = ... # type: QLibraryInfo.LibraryPath - LibrariesPath = ... # type: QLibraryInfo.LibraryPath - LibraryExecutablesPath = ... # type: QLibraryInfo.LibraryPath - BinariesPath = ... # type: QLibraryInfo.LibraryPath - PluginsPath = ... # type: QLibraryInfo.LibraryPath - Qml2ImportsPath = ... # type: QLibraryInfo.LibraryPath - ArchDataPath = ... # type: QLibraryInfo.LibraryPath - DataPath = ... # type: QLibraryInfo.LibraryPath - TranslationsPath = ... # type: QLibraryInfo.LibraryPath - ExamplesPath = ... # type: QLibraryInfo.LibraryPath - TestsPath = ... # type: QLibraryInfo.LibraryPath - SettingsPath = ... # type: QLibraryInfo.LibraryPath - QmlImportsPath = ... # type: QLibraryInfo.LibraryPath - - def __init__(self, a0: 'QLibraryInfo') -> None: ... - - @staticmethod - def version() -> 'QVersionNumber': ... - @staticmethod - def path(p: 'QLibraryInfo.LibraryPath') -> str: ... - @staticmethod - def isSharedBuild() -> bool: ... - @staticmethod - def isDebugBuild() -> bool: ... - - -class QLine(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pt1_: 'QPoint', pt2_: 'QPoint') -> None: ... - @typing.overload - def __init__(self, x1pos: int, y1pos: int, x2pos: int, y2pos: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QLine') -> None: ... - - def toLineF(self) -> 'QLineF': ... - def center(self) -> 'QPoint': ... - def setLine(self, aX1: int, aY1: int, aX2: int, aY2: int) -> None: ... - def setPoints(self, aP1: 'QPoint', aP2: 'QPoint') -> None: ... - def setP2(self, aP2: 'QPoint') -> None: ... - def setP1(self, aP1: 'QPoint') -> None: ... - @typing.overload - def translated(self, p: 'QPoint') -> 'QLine': ... - @typing.overload - def translated(self, adx: int, ady: int) -> 'QLine': ... - def __eq__(self, other: object): ... - @typing.overload - def translate(self, point: 'QPoint') -> None: ... - @typing.overload - def translate(self, adx: int, ady: int) -> None: ... - def dy(self) -> int: ... - def dx(self) -> int: ... - def p2(self) -> 'QPoint': ... - def p1(self) -> 'QPoint': ... - def y2(self) -> int: ... - def x2(self) -> int: ... - def y1(self) -> int: ... - def x1(self) -> int: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - def __ne__(self, other: object): ... - - -class QLineF(PyQt6.sip.simplewrapper): - - class IntersectionType(enum.Enum): - NoIntersection = ... # type: QLineF.IntersectionType - BoundedIntersection = ... # type: QLineF.IntersectionType - UnboundedIntersection = ... # type: QLineF.IntersectionType - - @typing.overload - def __init__(self, line: QLine) -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, apt1: 'QPointF', apt2: 'QPointF') -> None: ... - @typing.overload - def __init__(self, x1pos: float, y1pos: float, x2pos: float, y2pos: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QLineF') -> None: ... - - def center(self) -> 'QPointF': ... - def setLine(self, aX1: float, aY1: float, aX2: float, aY2: float) -> None: ... - def setPoints(self, aP1: 'QPointF', aP2: 'QPointF') -> None: ... - def setP2(self, aP2: 'QPointF') -> None: ... - def setP1(self, aP1: 'QPointF') -> None: ... - @typing.overload - def translated(self, p: 'QPointF') -> 'QLineF': ... - @typing.overload - def translated(self, adx: float, ady: float) -> 'QLineF': ... - def angleTo(self, l: 'QLineF') -> float: ... - def setAngle(self, angle: float) -> None: ... - def angle(self) -> float: ... - @staticmethod - def fromPolar(length: float, angle: float) -> 'QLineF': ... - def __eq__(self, other: object): ... - def toLine(self) -> QLine: ... - def pointAt(self, t: float) -> 'QPointF': ... - def setLength(self, len: float) -> None: ... - @typing.overload - def translate(self, point: 'QPointF') -> None: ... - @typing.overload - def translate(self, adx: float, ady: float) -> None: ... - def normalVector(self) -> 'QLineF': ... - def dy(self) -> float: ... - def dx(self) -> float: ... - def p2(self) -> 'QPointF': ... - def p1(self) -> 'QPointF': ... - def y2(self) -> float: ... - def x2(self) -> float: ... - def y1(self) -> float: ... - def x1(self) -> float: ... - def __repr__(self) -> str: ... - def __ne__(self, other: object): ... - def intersects(self, l: 'QLineF') -> typing.Tuple['QLineF.IntersectionType', typing.Optional['QPointF']]: ... - def unitVector(self) -> 'QLineF': ... - def length(self) -> float: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - - -class QLocale(PyQt6.sip.simplewrapper): - - class LanguageCodeType(enum.IntFlag): - ISO639Part1 = ... # type: QLocale.LanguageCodeType - ISO639Part2B = ... # type: QLocale.LanguageCodeType - ISO639Part2T = ... # type: QLocale.LanguageCodeType - ISO639Part3 = ... # type: QLocale.LanguageCodeType - LegacyLanguageCode = ... # type: QLocale.LanguageCodeType - ISO639Part2 = ... # type: QLocale.LanguageCodeType - ISO639Alpha2 = ... # type: QLocale.LanguageCodeType - ISO639Alpha3 = ... # type: QLocale.LanguageCodeType - ISO639 = ... # type: QLocale.LanguageCodeType - AnyLanguageCode = ... # type: QLocale.LanguageCodeType - - class DataSizeFormat(enum.Flag): - DataSizeIecFormat = ... # type: QLocale.DataSizeFormat - DataSizeTraditionalFormat = ... # type: QLocale.DataSizeFormat - DataSizeSIFormat = ... # type: QLocale.DataSizeFormat - - class FloatingPointPrecisionOption(enum.IntEnum): - FloatingPointShortest = ... # type: QLocale.FloatingPointPrecisionOption - - class QuotationStyle(enum.Enum): - StandardQuotation = ... # type: QLocale.QuotationStyle - AlternateQuotation = ... # type: QLocale.QuotationStyle - - class CurrencySymbolFormat(enum.Enum): - CurrencyIsoCode = ... # type: QLocale.CurrencySymbolFormat - CurrencySymbol = ... # type: QLocale.CurrencySymbolFormat - CurrencyDisplayName = ... # type: QLocale.CurrencySymbolFormat - - class Script(enum.Enum): - AnyScript = ... # type: QLocale.Script - ArabicScript = ... # type: QLocale.Script - CyrillicScript = ... # type: QLocale.Script - DeseretScript = ... # type: QLocale.Script - GurmukhiScript = ... # type: QLocale.Script - SimplifiedHanScript = ... # type: QLocale.Script - TraditionalHanScript = ... # type: QLocale.Script - LatinScript = ... # type: QLocale.Script - MongolianScript = ... # type: QLocale.Script - TifinaghScript = ... # type: QLocale.Script - SimplifiedChineseScript = ... # type: QLocale.Script - TraditionalChineseScript = ... # type: QLocale.Script - ArmenianScript = ... # type: QLocale.Script - BengaliScript = ... # type: QLocale.Script - CherokeeScript = ... # type: QLocale.Script - DevanagariScript = ... # type: QLocale.Script - EthiopicScript = ... # type: QLocale.Script - GeorgianScript = ... # type: QLocale.Script - GreekScript = ... # type: QLocale.Script - GujaratiScript = ... # type: QLocale.Script - HebrewScript = ... # type: QLocale.Script - JapaneseScript = ... # type: QLocale.Script - KhmerScript = ... # type: QLocale.Script - KannadaScript = ... # type: QLocale.Script - KoreanScript = ... # type: QLocale.Script - LaoScript = ... # type: QLocale.Script - MalayalamScript = ... # type: QLocale.Script - MyanmarScript = ... # type: QLocale.Script - OriyaScript = ... # type: QLocale.Script - TamilScript = ... # type: QLocale.Script - TeluguScript = ... # type: QLocale.Script - ThaanaScript = ... # type: QLocale.Script - ThaiScript = ... # type: QLocale.Script - TibetanScript = ... # type: QLocale.Script - SinhalaScript = ... # type: QLocale.Script - SyriacScript = ... # type: QLocale.Script - YiScript = ... # type: QLocale.Script - VaiScript = ... # type: QLocale.Script - AvestanScript = ... # type: QLocale.Script - BalineseScript = ... # type: QLocale.Script - BamumScript = ... # type: QLocale.Script - BatakScript = ... # type: QLocale.Script - BopomofoScript = ... # type: QLocale.Script - BrahmiScript = ... # type: QLocale.Script - BugineseScript = ... # type: QLocale.Script - BuhidScript = ... # type: QLocale.Script - CanadianAboriginalScript = ... # type: QLocale.Script - CarianScript = ... # type: QLocale.Script - ChakmaScript = ... # type: QLocale.Script - ChamScript = ... # type: QLocale.Script - CopticScript = ... # type: QLocale.Script - CypriotScript = ... # type: QLocale.Script - EgyptianHieroglyphsScript = ... # type: QLocale.Script - FraserScript = ... # type: QLocale.Script - GlagoliticScript = ... # type: QLocale.Script - GothicScript = ... # type: QLocale.Script - HanScript = ... # type: QLocale.Script - HangulScript = ... # type: QLocale.Script - HanunooScript = ... # type: QLocale.Script - ImperialAramaicScript = ... # type: QLocale.Script - InscriptionalPahlaviScript = ... # type: QLocale.Script - InscriptionalParthianScript = ... # type: QLocale.Script - JavaneseScript = ... # type: QLocale.Script - KaithiScript = ... # type: QLocale.Script - KatakanaScript = ... # type: QLocale.Script - KayahLiScript = ... # type: QLocale.Script - KharoshthiScript = ... # type: QLocale.Script - LannaScript = ... # type: QLocale.Script - LepchaScript = ... # type: QLocale.Script - LimbuScript = ... # type: QLocale.Script - LinearBScript = ... # type: QLocale.Script - LycianScript = ... # type: QLocale.Script - LydianScript = ... # type: QLocale.Script - MandaeanScript = ... # type: QLocale.Script - MeiteiMayekScript = ... # type: QLocale.Script - MeroiticScript = ... # type: QLocale.Script - MeroiticCursiveScript = ... # type: QLocale.Script - NkoScript = ... # type: QLocale.Script - NewTaiLueScript = ... # type: QLocale.Script - OghamScript = ... # type: QLocale.Script - OlChikiScript = ... # type: QLocale.Script - OldItalicScript = ... # type: QLocale.Script - OldPersianScript = ... # type: QLocale.Script - OldSouthArabianScript = ... # type: QLocale.Script - OrkhonScript = ... # type: QLocale.Script - OsmanyaScript = ... # type: QLocale.Script - PhagsPaScript = ... # type: QLocale.Script - PhoenicianScript = ... # type: QLocale.Script - PollardPhoneticScript = ... # type: QLocale.Script - RejangScript = ... # type: QLocale.Script - RunicScript = ... # type: QLocale.Script - SamaritanScript = ... # type: QLocale.Script - SaurashtraScript = ... # type: QLocale.Script - SharadaScript = ... # type: QLocale.Script - ShavianScript = ... # type: QLocale.Script - SoraSompengScript = ... # type: QLocale.Script - CuneiformScript = ... # type: QLocale.Script - SundaneseScript = ... # type: QLocale.Script - SylotiNagriScript = ... # type: QLocale.Script - TagalogScript = ... # type: QLocale.Script - TagbanwaScript = ... # type: QLocale.Script - TaiLeScript = ... # type: QLocale.Script - TaiVietScript = ... # type: QLocale.Script - TakriScript = ... # type: QLocale.Script - UgariticScript = ... # type: QLocale.Script - BrailleScript = ... # type: QLocale.Script - HiraganaScript = ... # type: QLocale.Script - CaucasianAlbanianScript = ... # type: QLocale.Script - BassaVahScript = ... # type: QLocale.Script - DuployanScript = ... # type: QLocale.Script - ElbasanScript = ... # type: QLocale.Script - GranthaScript = ... # type: QLocale.Script - PahawhHmongScript = ... # type: QLocale.Script - KhojkiScript = ... # type: QLocale.Script - LinearAScript = ... # type: QLocale.Script - MahajaniScript = ... # type: QLocale.Script - ManichaeanScript = ... # type: QLocale.Script - MendeKikakuiScript = ... # type: QLocale.Script - ModiScript = ... # type: QLocale.Script - MroScript = ... # type: QLocale.Script - OldNorthArabianScript = ... # type: QLocale.Script - NabataeanScript = ... # type: QLocale.Script - PalmyreneScript = ... # type: QLocale.Script - PauCinHauScript = ... # type: QLocale.Script - OldPermicScript = ... # type: QLocale.Script - PsalterPahlaviScript = ... # type: QLocale.Script - SiddhamScript = ... # type: QLocale.Script - KhudawadiScript = ... # type: QLocale.Script - TirhutaScript = ... # type: QLocale.Script - VarangKshitiScript = ... # type: QLocale.Script - AhomScript = ... # type: QLocale.Script - AnatolianHieroglyphsScript = ... # type: QLocale.Script - HatranScript = ... # type: QLocale.Script - MultaniScript = ... # type: QLocale.Script - OldHungarianScript = ... # type: QLocale.Script - SignWritingScript = ... # type: QLocale.Script - AdlamScript = ... # type: QLocale.Script - BhaiksukiScript = ... # type: QLocale.Script - MarchenScript = ... # type: QLocale.Script - NewaScript = ... # type: QLocale.Script - OsageScript = ... # type: QLocale.Script - TangutScript = ... # type: QLocale.Script - HanWithBopomofoScript = ... # type: QLocale.Script - JamoScript = ... # type: QLocale.Script - BanglaScript = ... # type: QLocale.Script - MendeScript = ... # type: QLocale.Script - OdiaScript = ... # type: QLocale.Script - HanifiScript = ... # type: QLocale.Script - - class MeasurementSystem(enum.Enum): - MetricSystem = ... # type: QLocale.MeasurementSystem - ImperialSystem = ... # type: QLocale.MeasurementSystem - ImperialUSSystem = ... # type: QLocale.MeasurementSystem - ImperialUKSystem = ... # type: QLocale.MeasurementSystem - - class FormatType(enum.Enum): - LongFormat = ... # type: QLocale.FormatType - ShortFormat = ... # type: QLocale.FormatType - NarrowFormat = ... # type: QLocale.FormatType - - class TagSeparator(enum.Enum): - Dash = ... # type: QLocale.TagSeparator - Underscore = ... # type: QLocale.TagSeparator - - class NumberOption(enum.Flag): - OmitGroupSeparator = ... # type: QLocale.NumberOption - RejectGroupSeparator = ... # type: QLocale.NumberOption - DefaultNumberOptions = ... # type: QLocale.NumberOption - OmitLeadingZeroInExponent = ... # type: QLocale.NumberOption - RejectLeadingZeroInExponent = ... # type: QLocale.NumberOption - IncludeTrailingZeroesAfterDot = ... # type: QLocale.NumberOption - RejectTrailingZeroesAfterDot = ... # type: QLocale.NumberOption - - class Country(enum.Enum): - AnyCountry = ... # type: QLocale.Country - AnyTerritory = ... # type: QLocale.Country - Afghanistan = ... # type: QLocale.Country - Albania = ... # type: QLocale.Country - Algeria = ... # type: QLocale.Country - AmericanSamoa = ... # type: QLocale.Country - Andorra = ... # type: QLocale.Country - Angola = ... # type: QLocale.Country - Anguilla = ... # type: QLocale.Country - Antarctica = ... # type: QLocale.Country - AntiguaAndBarbuda = ... # type: QLocale.Country - Argentina = ... # type: QLocale.Country - Armenia = ... # type: QLocale.Country - Aruba = ... # type: QLocale.Country - Australia = ... # type: QLocale.Country - Austria = ... # type: QLocale.Country - Azerbaijan = ... # type: QLocale.Country - Bahamas = ... # type: QLocale.Country - Bahrain = ... # type: QLocale.Country - Bangladesh = ... # type: QLocale.Country - Barbados = ... # type: QLocale.Country - Belarus = ... # type: QLocale.Country - Belgium = ... # type: QLocale.Country - Belize = ... # type: QLocale.Country - Benin = ... # type: QLocale.Country - Bermuda = ... # type: QLocale.Country - Bhutan = ... # type: QLocale.Country - Bolivia = ... # type: QLocale.Country - BosniaAndHerzegowina = ... # type: QLocale.Country - Botswana = ... # type: QLocale.Country - BouvetIsland = ... # type: QLocale.Country - Brazil = ... # type: QLocale.Country - BritishIndianOceanTerritory = ... # type: QLocale.Country - Bulgaria = ... # type: QLocale.Country - BurkinaFaso = ... # type: QLocale.Country - Burundi = ... # type: QLocale.Country - Cambodia = ... # type: QLocale.Country - Cameroon = ... # type: QLocale.Country - Canada = ... # type: QLocale.Country - CapeVerde = ... # type: QLocale.Country - CaymanIslands = ... # type: QLocale.Country - CentralAfricanRepublic = ... # type: QLocale.Country - Chad = ... # type: QLocale.Country - Chile = ... # type: QLocale.Country - China = ... # type: QLocale.Country - ChristmasIsland = ... # type: QLocale.Country - CocosIslands = ... # type: QLocale.Country - Colombia = ... # type: QLocale.Country - Comoros = ... # type: QLocale.Country - DemocraticRepublicOfCongo = ... # type: QLocale.Country - PeoplesRepublicOfCongo = ... # type: QLocale.Country - CookIslands = ... # type: QLocale.Country - CostaRica = ... # type: QLocale.Country - IvoryCoast = ... # type: QLocale.Country - Croatia = ... # type: QLocale.Country - Cuba = ... # type: QLocale.Country - Cyprus = ... # type: QLocale.Country - CzechRepublic = ... # type: QLocale.Country - Denmark = ... # type: QLocale.Country - Djibouti = ... # type: QLocale.Country - Dominica = ... # type: QLocale.Country - DominicanRepublic = ... # type: QLocale.Country - EastTimor = ... # type: QLocale.Country - Ecuador = ... # type: QLocale.Country - Egypt = ... # type: QLocale.Country - ElSalvador = ... # type: QLocale.Country - EquatorialGuinea = ... # type: QLocale.Country - Eritrea = ... # type: QLocale.Country - Estonia = ... # type: QLocale.Country - Ethiopia = ... # type: QLocale.Country - FalklandIslands = ... # type: QLocale.Country - FaroeIslands = ... # type: QLocale.Country - Finland = ... # type: QLocale.Country - France = ... # type: QLocale.Country - FrenchGuiana = ... # type: QLocale.Country - FrenchPolynesia = ... # type: QLocale.Country - FrenchSouthernTerritories = ... # type: QLocale.Country - Gabon = ... # type: QLocale.Country - Gambia = ... # type: QLocale.Country - Georgia = ... # type: QLocale.Country - Germany = ... # type: QLocale.Country - Ghana = ... # type: QLocale.Country - Gibraltar = ... # type: QLocale.Country - Greece = ... # type: QLocale.Country - Greenland = ... # type: QLocale.Country - Grenada = ... # type: QLocale.Country - Guadeloupe = ... # type: QLocale.Country - Guam = ... # type: QLocale.Country - Guatemala = ... # type: QLocale.Country - Guinea = ... # type: QLocale.Country - GuineaBissau = ... # type: QLocale.Country - Guyana = ... # type: QLocale.Country - Haiti = ... # type: QLocale.Country - HeardAndMcDonaldIslands = ... # type: QLocale.Country - Honduras = ... # type: QLocale.Country - HongKong = ... # type: QLocale.Country - Hungary = ... # type: QLocale.Country - Iceland = ... # type: QLocale.Country - India = ... # type: QLocale.Country - Indonesia = ... # type: QLocale.Country - Iran = ... # type: QLocale.Country - Iraq = ... # type: QLocale.Country - Ireland = ... # type: QLocale.Country - Israel = ... # type: QLocale.Country - Italy = ... # type: QLocale.Country - Jamaica = ... # type: QLocale.Country - Japan = ... # type: QLocale.Country - Jordan = ... # type: QLocale.Country - Kazakhstan = ... # type: QLocale.Country - Kenya = ... # type: QLocale.Country - Kiribati = ... # type: QLocale.Country - DemocraticRepublicOfKorea = ... # type: QLocale.Country - RepublicOfKorea = ... # type: QLocale.Country - Kuwait = ... # type: QLocale.Country - Kyrgyzstan = ... # type: QLocale.Country - Latvia = ... # type: QLocale.Country - Lebanon = ... # type: QLocale.Country - Lesotho = ... # type: QLocale.Country - Liberia = ... # type: QLocale.Country - Liechtenstein = ... # type: QLocale.Country - Lithuania = ... # type: QLocale.Country - Luxembourg = ... # type: QLocale.Country - Macau = ... # type: QLocale.Country - Macedonia = ... # type: QLocale.Country - Madagascar = ... # type: QLocale.Country - Malawi = ... # type: QLocale.Country - Malaysia = ... # type: QLocale.Country - Maldives = ... # type: QLocale.Country - Mali = ... # type: QLocale.Country - Malta = ... # type: QLocale.Country - MarshallIslands = ... # type: QLocale.Country - Martinique = ... # type: QLocale.Country - Mauritania = ... # type: QLocale.Country - Mauritius = ... # type: QLocale.Country - Mayotte = ... # type: QLocale.Country - Mexico = ... # type: QLocale.Country - Micronesia = ... # type: QLocale.Country - Moldova = ... # type: QLocale.Country - Monaco = ... # type: QLocale.Country - Mongolia = ... # type: QLocale.Country - Montserrat = ... # type: QLocale.Country - Morocco = ... # type: QLocale.Country - Mozambique = ... # type: QLocale.Country - Myanmar = ... # type: QLocale.Country - Namibia = ... # type: QLocale.Country - NauruCountry = ... # type: QLocale.Country - Nepal = ... # type: QLocale.Country - Netherlands = ... # type: QLocale.Country - NewCaledonia = ... # type: QLocale.Country - NewZealand = ... # type: QLocale.Country - Nicaragua = ... # type: QLocale.Country - Niger = ... # type: QLocale.Country - Nigeria = ... # type: QLocale.Country - Niue = ... # type: QLocale.Country - NorfolkIsland = ... # type: QLocale.Country - NorthernMarianaIslands = ... # type: QLocale.Country - Norway = ... # type: QLocale.Country - Oman = ... # type: QLocale.Country - Pakistan = ... # type: QLocale.Country - Palau = ... # type: QLocale.Country - Panama = ... # type: QLocale.Country - PapuaNewGuinea = ... # type: QLocale.Country - Paraguay = ... # type: QLocale.Country - Peru = ... # type: QLocale.Country - Philippines = ... # type: QLocale.Country - Pitcairn = ... # type: QLocale.Country - Poland = ... # type: QLocale.Country - Portugal = ... # type: QLocale.Country - PuertoRico = ... # type: QLocale.Country - Qatar = ... # type: QLocale.Country - Reunion = ... # type: QLocale.Country - Romania = ... # type: QLocale.Country - RussianFederation = ... # type: QLocale.Country - Rwanda = ... # type: QLocale.Country - SaintKittsAndNevis = ... # type: QLocale.Country - Samoa = ... # type: QLocale.Country - SanMarino = ... # type: QLocale.Country - SaoTomeAndPrincipe = ... # type: QLocale.Country - SaudiArabia = ... # type: QLocale.Country - Senegal = ... # type: QLocale.Country - Seychelles = ... # type: QLocale.Country - SierraLeone = ... # type: QLocale.Country - Singapore = ... # type: QLocale.Country - Slovakia = ... # type: QLocale.Country - Slovenia = ... # type: QLocale.Country - SolomonIslands = ... # type: QLocale.Country - Somalia = ... # type: QLocale.Country - SouthAfrica = ... # type: QLocale.Country - SouthGeorgiaAndTheSouthSandwichIslands = ... # type: QLocale.Country - Spain = ... # type: QLocale.Country - SriLanka = ... # type: QLocale.Country - Sudan = ... # type: QLocale.Country - Suriname = ... # type: QLocale.Country - SvalbardAndJanMayenIslands = ... # type: QLocale.Country - Swaziland = ... # type: QLocale.Country - Sweden = ... # type: QLocale.Country - Switzerland = ... # type: QLocale.Country - SyrianArabRepublic = ... # type: QLocale.Country - Taiwan = ... # type: QLocale.Country - Tajikistan = ... # type: QLocale.Country - Tanzania = ... # type: QLocale.Country - Thailand = ... # type: QLocale.Country - Togo = ... # type: QLocale.Country - TrinidadAndTobago = ... # type: QLocale.Country - Tunisia = ... # type: QLocale.Country - Turkey = ... # type: QLocale.Country - Turkmenistan = ... # type: QLocale.Country - TurksAndCaicosIslands = ... # type: QLocale.Country - Uganda = ... # type: QLocale.Country - Ukraine = ... # type: QLocale.Country - UnitedArabEmirates = ... # type: QLocale.Country - UnitedKingdom = ... # type: QLocale.Country - UnitedStates = ... # type: QLocale.Country - UnitedStatesMinorOutlyingIslands = ... # type: QLocale.Country - Uruguay = ... # type: QLocale.Country - Uzbekistan = ... # type: QLocale.Country - Vanuatu = ... # type: QLocale.Country - VaticanCityState = ... # type: QLocale.Country - Venezuela = ... # type: QLocale.Country - BritishVirginIslands = ... # type: QLocale.Country - WallisAndFutunaIslands = ... # type: QLocale.Country - WesternSahara = ... # type: QLocale.Country - Yemen = ... # type: QLocale.Country - Zambia = ... # type: QLocale.Country - Zimbabwe = ... # type: QLocale.Country - Montenegro = ... # type: QLocale.Country - Serbia = ... # type: QLocale.Country - SaintBarthelemy = ... # type: QLocale.Country - SaintMartin = ... # type: QLocale.Country - LatinAmericaAndTheCaribbean = ... # type: QLocale.Country - LastCountry = ... # type: QLocale.Country - Brunei = ... # type: QLocale.Country - CongoKinshasa = ... # type: QLocale.Country - CongoBrazzaville = ... # type: QLocale.Country - Fiji = ... # type: QLocale.Country - Guernsey = ... # type: QLocale.Country - NorthKorea = ... # type: QLocale.Country - SouthKorea = ... # type: QLocale.Country - Laos = ... # type: QLocale.Country - Libya = ... # type: QLocale.Country - CuraSao = ... # type: QLocale.Country - PalestinianTerritories = ... # type: QLocale.Country - Russia = ... # type: QLocale.Country - SaintLucia = ... # type: QLocale.Country - SaintVincentAndTheGrenadines = ... # type: QLocale.Country - SaintHelena = ... # type: QLocale.Country - SaintPierreAndMiquelon = ... # type: QLocale.Country - Syria = ... # type: QLocale.Country - Tonga = ... # type: QLocale.Country - Vietnam = ... # type: QLocale.Country - UnitedStatesVirginIslands = ... # type: QLocale.Country - CanaryIslands = ... # type: QLocale.Country - ClippertonIsland = ... # type: QLocale.Country - AscensionIsland = ... # type: QLocale.Country - AlandIslands = ... # type: QLocale.Country - DiegoGarcia = ... # type: QLocale.Country - CeutaAndMelilla = ... # type: QLocale.Country - IsleOfMan = ... # type: QLocale.Country - Jersey = ... # type: QLocale.Country - TristanDaCunha = ... # type: QLocale.Country - SouthSudan = ... # type: QLocale.Country - Bonaire = ... # type: QLocale.Country - SintMaarten = ... # type: QLocale.Country - Kosovo = ... # type: QLocale.Country - TokelauCountry = ... # type: QLocale.Country - TuvaluCountry = ... # type: QLocale.Country - EuropeanUnion = ... # type: QLocale.Country - OutlyingOceania = ... # type: QLocale.Country - LatinAmerica = ... # type: QLocale.Country - World = ... # type: QLocale.Country - Europe = ... # type: QLocale.Country - BosniaAndHerzegovina = ... # type: QLocale.Country - CaribbeanNetherlands = ... # type: QLocale.Country - Curacao = ... # type: QLocale.Country - Czechia = ... # type: QLocale.Country - Eswatini = ... # type: QLocale.Country - Macao = ... # type: QLocale.Country - SaintVincentAndGrenadines = ... # type: QLocale.Country - SouthGeorgiaAndSouthSandwichIslands = ... # type: QLocale.Country - SvalbardAndJanMayen = ... # type: QLocale.Country - TimorLeste = ... # type: QLocale.Country - UnitedStatesOutlyingIslands = ... # type: QLocale.Country - VaticanCity = ... # type: QLocale.Country - WallisAndFutuna = ... # type: QLocale.Country - NauruTerritory = ... # type: QLocale.Country - TokelauTerritory = ... # type: QLocale.Country - TuvaluTerritory = ... # type: QLocale.Country - - class Language(enum.Enum): - C = ... # type: QLocale.Language - Abkhazian = ... # type: QLocale.Language - Afan = ... # type: QLocale.Language - Afar = ... # type: QLocale.Language - Afrikaans = ... # type: QLocale.Language - Albanian = ... # type: QLocale.Language - Amharic = ... # type: QLocale.Language - Arabic = ... # type: QLocale.Language - Armenian = ... # type: QLocale.Language - Assamese = ... # type: QLocale.Language - Aymara = ... # type: QLocale.Language - Azerbaijani = ... # type: QLocale.Language - Bashkir = ... # type: QLocale.Language - Basque = ... # type: QLocale.Language - Bengali = ... # type: QLocale.Language - Bhutani = ... # type: QLocale.Language - Bislama = ... # type: QLocale.Language - Breton = ... # type: QLocale.Language - Bulgarian = ... # type: QLocale.Language - Burmese = ... # type: QLocale.Language - Byelorussian = ... # type: QLocale.Language - Cambodian = ... # type: QLocale.Language - Catalan = ... # type: QLocale.Language - Chinese = ... # type: QLocale.Language - Corsican = ... # type: QLocale.Language - Croatian = ... # type: QLocale.Language - Czech = ... # type: QLocale.Language - Danish = ... # type: QLocale.Language - Dutch = ... # type: QLocale.Language - English = ... # type: QLocale.Language - Esperanto = ... # type: QLocale.Language - Estonian = ... # type: QLocale.Language - Faroese = ... # type: QLocale.Language - Finnish = ... # type: QLocale.Language - French = ... # type: QLocale.Language - Frisian = ... # type: QLocale.Language - Gaelic = ... # type: QLocale.Language - Galician = ... # type: QLocale.Language - Georgian = ... # type: QLocale.Language - German = ... # type: QLocale.Language - Greek = ... # type: QLocale.Language - Greenlandic = ... # type: QLocale.Language - Guarani = ... # type: QLocale.Language - Gujarati = ... # type: QLocale.Language - Hausa = ... # type: QLocale.Language - Hebrew = ... # type: QLocale.Language - Hindi = ... # type: QLocale.Language - Hungarian = ... # type: QLocale.Language - Icelandic = ... # type: QLocale.Language - Indonesian = ... # type: QLocale.Language - Interlingua = ... # type: QLocale.Language - Interlingue = ... # type: QLocale.Language - Inuktitut = ... # type: QLocale.Language - Inupiak = ... # type: QLocale.Language - Irish = ... # type: QLocale.Language - Italian = ... # type: QLocale.Language - Japanese = ... # type: QLocale.Language - Javanese = ... # type: QLocale.Language - Kannada = ... # type: QLocale.Language - Kashmiri = ... # type: QLocale.Language - Kazakh = ... # type: QLocale.Language - Kinyarwanda = ... # type: QLocale.Language - Kirghiz = ... # type: QLocale.Language - Korean = ... # type: QLocale.Language - Kurdish = ... # type: QLocale.Language - Kurundi = ... # type: QLocale.Language - Latin = ... # type: QLocale.Language - Latvian = ... # type: QLocale.Language - Lingala = ... # type: QLocale.Language - Lithuanian = ... # type: QLocale.Language - Macedonian = ... # type: QLocale.Language - Malagasy = ... # type: QLocale.Language - Malay = ... # type: QLocale.Language - Malayalam = ... # type: QLocale.Language - Maltese = ... # type: QLocale.Language - Maori = ... # type: QLocale.Language - Marathi = ... # type: QLocale.Language - Mongolian = ... # type: QLocale.Language - NauruLanguage = ... # type: QLocale.Language - Nepali = ... # type: QLocale.Language - Occitan = ... # type: QLocale.Language - Oriya = ... # type: QLocale.Language - Pashto = ... # type: QLocale.Language - Persian = ... # type: QLocale.Language - Polish = ... # type: QLocale.Language - Portuguese = ... # type: QLocale.Language - Punjabi = ... # type: QLocale.Language - Quechua = ... # type: QLocale.Language - RhaetoRomance = ... # type: QLocale.Language - Romanian = ... # type: QLocale.Language - Russian = ... # type: QLocale.Language - Samoan = ... # type: QLocale.Language - Sanskrit = ... # type: QLocale.Language - Serbian = ... # type: QLocale.Language - Shona = ... # type: QLocale.Language - Sindhi = ... # type: QLocale.Language - Slovak = ... # type: QLocale.Language - Slovenian = ... # type: QLocale.Language - Somali = ... # type: QLocale.Language - Spanish = ... # type: QLocale.Language - Sundanese = ... # type: QLocale.Language - Swahili = ... # type: QLocale.Language - Swedish = ... # type: QLocale.Language - Tajik = ... # type: QLocale.Language - Tamil = ... # type: QLocale.Language - Tatar = ... # type: QLocale.Language - Telugu = ... # type: QLocale.Language - Thai = ... # type: QLocale.Language - Tibetan = ... # type: QLocale.Language - Tigrinya = ... # type: QLocale.Language - Tsonga = ... # type: QLocale.Language - Turkish = ... # type: QLocale.Language - Turkmen = ... # type: QLocale.Language - Uigur = ... # type: QLocale.Language - Ukrainian = ... # type: QLocale.Language - Urdu = ... # type: QLocale.Language - Uzbek = ... # type: QLocale.Language - Vietnamese = ... # type: QLocale.Language - Volapuk = ... # type: QLocale.Language - Welsh = ... # type: QLocale.Language - Wolof = ... # type: QLocale.Language - Xhosa = ... # type: QLocale.Language - Yiddish = ... # type: QLocale.Language - Yoruba = ... # type: QLocale.Language - Zhuang = ... # type: QLocale.Language - Zulu = ... # type: QLocale.Language - Bosnian = ... # type: QLocale.Language - Divehi = ... # type: QLocale.Language - Manx = ... # type: QLocale.Language - Cornish = ... # type: QLocale.Language - LastLanguage = ... # type: QLocale.Language - NorwegianBokmal = ... # type: QLocale.Language - NorwegianNynorsk = ... # type: QLocale.Language - Akan = ... # type: QLocale.Language - Konkani = ... # type: QLocale.Language - Ga = ... # type: QLocale.Language - Igbo = ... # type: QLocale.Language - Kamba = ... # type: QLocale.Language - Syriac = ... # type: QLocale.Language - Blin = ... # type: QLocale.Language - Geez = ... # type: QLocale.Language - Koro = ... # type: QLocale.Language - Sidamo = ... # type: QLocale.Language - Atsam = ... # type: QLocale.Language - Tigre = ... # type: QLocale.Language - Jju = ... # type: QLocale.Language - Friulian = ... # type: QLocale.Language - Venda = ... # type: QLocale.Language - Ewe = ... # type: QLocale.Language - Walamo = ... # type: QLocale.Language - Hawaiian = ... # type: QLocale.Language - Tyap = ... # type: QLocale.Language - Chewa = ... # type: QLocale.Language - Filipino = ... # type: QLocale.Language - SwissGerman = ... # type: QLocale.Language - SichuanYi = ... # type: QLocale.Language - Kpelle = ... # type: QLocale.Language - LowGerman = ... # type: QLocale.Language - SouthNdebele = ... # type: QLocale.Language - NorthernSotho = ... # type: QLocale.Language - NorthernSami = ... # type: QLocale.Language - Taroko = ... # type: QLocale.Language - Gusii = ... # type: QLocale.Language - Taita = ... # type: QLocale.Language - Fulah = ... # type: QLocale.Language - Kikuyu = ... # type: QLocale.Language - Samburu = ... # type: QLocale.Language - Sena = ... # type: QLocale.Language - NorthNdebele = ... # type: QLocale.Language - Rombo = ... # type: QLocale.Language - Tachelhit = ... # type: QLocale.Language - Kabyle = ... # type: QLocale.Language - Nyankole = ... # type: QLocale.Language - Bena = ... # type: QLocale.Language - Vunjo = ... # type: QLocale.Language - Bambara = ... # type: QLocale.Language - Embu = ... # type: QLocale.Language - Cherokee = ... # type: QLocale.Language - Morisyen = ... # type: QLocale.Language - Makonde = ... # type: QLocale.Language - Langi = ... # type: QLocale.Language - Ganda = ... # type: QLocale.Language - Bemba = ... # type: QLocale.Language - Kabuverdianu = ... # type: QLocale.Language - Meru = ... # type: QLocale.Language - Kalenjin = ... # type: QLocale.Language - Nama = ... # type: QLocale.Language - Machame = ... # type: QLocale.Language - Colognian = ... # type: QLocale.Language - Masai = ... # type: QLocale.Language - Soga = ... # type: QLocale.Language - Luyia = ... # type: QLocale.Language - Asu = ... # type: QLocale.Language - Teso = ... # type: QLocale.Language - Saho = ... # type: QLocale.Language - KoyraChiini = ... # type: QLocale.Language - Rwa = ... # type: QLocale.Language - Luo = ... # type: QLocale.Language - Chiga = ... # type: QLocale.Language - CentralMoroccoTamazight = ... # type: QLocale.Language - KoyraboroSenni = ... # type: QLocale.Language - Shambala = ... # type: QLocale.Language - AnyLanguage = ... # type: QLocale.Language - Rundi = ... # type: QLocale.Language - Bodo = ... # type: QLocale.Language - Aghem = ... # type: QLocale.Language - Basaa = ... # type: QLocale.Language - Zarma = ... # type: QLocale.Language - Duala = ... # type: QLocale.Language - JolaFonyi = ... # type: QLocale.Language - Ewondo = ... # type: QLocale.Language - Bafia = ... # type: QLocale.Language - LubaKatanga = ... # type: QLocale.Language - MakhuwaMeetto = ... # type: QLocale.Language - Mundang = ... # type: QLocale.Language - Kwasio = ... # type: QLocale.Language - Nuer = ... # type: QLocale.Language - Sakha = ... # type: QLocale.Language - Sangu = ... # type: QLocale.Language - Tasawaq = ... # type: QLocale.Language - Vai = ... # type: QLocale.Language - Walser = ... # type: QLocale.Language - Yangben = ... # type: QLocale.Language - Oromo = ... # type: QLocale.Language - Dzongkha = ... # type: QLocale.Language - Belarusian = ... # type: QLocale.Language - Khmer = ... # type: QLocale.Language - Fijian = ... # type: QLocale.Language - WesternFrisian = ... # type: QLocale.Language - Lao = ... # type: QLocale.Language - Marshallese = ... # type: QLocale.Language - Romansh = ... # type: QLocale.Language - Sango = ... # type: QLocale.Language - Ossetic = ... # type: QLocale.Language - SouthernSotho = ... # type: QLocale.Language - Tswana = ... # type: QLocale.Language - Sinhala = ... # type: QLocale.Language - Swati = ... # type: QLocale.Language - Sardinian = ... # type: QLocale.Language - Tongan = ... # type: QLocale.Language - Tahitian = ... # type: QLocale.Language - Nyanja = ... # type: QLocale.Language - Avaric = ... # type: QLocale.Language - Chamorro = ... # type: QLocale.Language - Chechen = ... # type: QLocale.Language - Church = ... # type: QLocale.Language - Chuvash = ... # type: QLocale.Language - Cree = ... # type: QLocale.Language - Haitian = ... # type: QLocale.Language - Herero = ... # type: QLocale.Language - HiriMotu = ... # type: QLocale.Language - Kanuri = ... # type: QLocale.Language - Komi = ... # type: QLocale.Language - Kongo = ... # type: QLocale.Language - Kwanyama = ... # type: QLocale.Language - Limburgish = ... # type: QLocale.Language - Luxembourgish = ... # type: QLocale.Language - Navaho = ... # type: QLocale.Language - Ndonga = ... # type: QLocale.Language - Ojibwa = ... # type: QLocale.Language - Pali = ... # type: QLocale.Language - Walloon = ... # type: QLocale.Language - Avestan = ... # type: QLocale.Language - Asturian = ... # type: QLocale.Language - Ngomba = ... # type: QLocale.Language - Kako = ... # type: QLocale.Language - Meta = ... # type: QLocale.Language - Ngiemboon = ... # type: QLocale.Language - Uighur = ... # type: QLocale.Language - Aragonese = ... # type: QLocale.Language - Akkadian = ... # type: QLocale.Language - AncientEgyptian = ... # type: QLocale.Language - AncientGreek = ... # type: QLocale.Language - Aramaic = ... # type: QLocale.Language - Balinese = ... # type: QLocale.Language - Bamun = ... # type: QLocale.Language - BatakToba = ... # type: QLocale.Language - Buginese = ... # type: QLocale.Language - Chakma = ... # type: QLocale.Language - Coptic = ... # type: QLocale.Language - Dogri = ... # type: QLocale.Language - Gothic = ... # type: QLocale.Language - Ingush = ... # type: QLocale.Language - Mandingo = ... # type: QLocale.Language - Manipuri = ... # type: QLocale.Language - OldIrish = ... # type: QLocale.Language - OldNorse = ... # type: QLocale.Language - OldPersian = ... # type: QLocale.Language - Pahlavi = ... # type: QLocale.Language - Phoenician = ... # type: QLocale.Language - Santali = ... # type: QLocale.Language - Saurashtra = ... # type: QLocale.Language - TaiDam = ... # type: QLocale.Language - Ugaritic = ... # type: QLocale.Language - Akoose = ... # type: QLocale.Language - Lakota = ... # type: QLocale.Language - StandardMoroccanTamazight = ... # type: QLocale.Language - Mapuche = ... # type: QLocale.Language - CentralKurdish = ... # type: QLocale.Language - LowerSorbian = ... # type: QLocale.Language - UpperSorbian = ... # type: QLocale.Language - Kenyang = ... # type: QLocale.Language - Mohawk = ... # type: QLocale.Language - Nko = ... # type: QLocale.Language - Prussian = ... # type: QLocale.Language - Kiche = ... # type: QLocale.Language - SouthernSami = ... # type: QLocale.Language - LuleSami = ... # type: QLocale.Language - InariSami = ... # type: QLocale.Language - SkoltSami = ... # type: QLocale.Language - Warlpiri = ... # type: QLocale.Language - Mende = ... # type: QLocale.Language - Lezghian = ... # type: QLocale.Language - Maithili = ... # type: QLocale.Language - AmericanSignLanguage = ... # type: QLocale.Language - Bhojpuri = ... # type: QLocale.Language - LiteraryChinese = ... # type: QLocale.Language - Mazanderani = ... # type: QLocale.Language - Newari = ... # type: QLocale.Language - NorthernLuri = ... # type: QLocale.Language - Palauan = ... # type: QLocale.Language - Papiamento = ... # type: QLocale.Language - TokelauLanguage = ... # type: QLocale.Language - TokPisin = ... # type: QLocale.Language - TuvaluLanguage = ... # type: QLocale.Language - Cantonese = ... # type: QLocale.Language - Osage = ... # type: QLocale.Language - Ido = ... # type: QLocale.Language - Lojban = ... # type: QLocale.Language - Sicilian = ... # type: QLocale.Language - SouthernKurdish = ... # type: QLocale.Language - WesternBalochi = ... # type: QLocale.Language - Cebuano = ... # type: QLocale.Language - Erzya = ... # type: QLocale.Language - Chickasaw = ... # type: QLocale.Language - Muscogee = ... # type: QLocale.Language - Silesian = ... # type: QLocale.Language - NigerianPidgin = ... # type: QLocale.Language - Bangla = ... # type: QLocale.Language - CentralAtlasTamazight = ... # type: QLocale.Language - Inupiaq = ... # type: QLocale.Language - Kalaallisut = ... # type: QLocale.Language - Kuanyama = ... # type: QLocale.Language - Kyrgyz = ... # type: QLocale.Language - Navajo = ... # type: QLocale.Language - Odia = ... # type: QLocale.Language - Uyghur = ... # type: QLocale.Language - Wolaytta = ... # type: QLocale.Language - Kaingang = ... # type: QLocale.Language - Nheengatu = ... # type: QLocale.Language - Haryanvi = ... # type: QLocale.Language - NorthernFrisian = ... # type: QLocale.Language - Rajasthani = ... # type: QLocale.Language - Moksha = ... # type: QLocale.Language - TokiPona = ... # type: QLocale.Language - Pijin = ... # type: QLocale.Language - Obolo = ... # type: QLocale.Language - Baluchi = ... # type: QLocale.Language - Ligurian = ... # type: QLocale.Language - Rohingya = ... # type: QLocale.Language - Torwali = ... # type: QLocale.Language - Anii = ... # type: QLocale.Language - Kangri = ... # type: QLocale.Language - Venetian = ... # type: QLocale.Language - - DefaultTwoDigitBaseYear = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, language: 'QLocale.Language', country: 'QLocale.Country' = ...) -> None: ... - @typing.overload - def __init__(self, language: 'QLocale.Language', script: 'QLocale.Script', country: 'QLocale.Country') -> None: ... - @typing.overload - def __init__(self, other: 'QLocale') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @staticmethod - def territoryToString(territory: 'QLocale.Country') -> str: ... - @staticmethod - def codeToTerritory(territoryCode: str) -> 'QLocale.Country': ... - @staticmethod - def territoryToCode(territory: 'QLocale.Country') -> str: ... - def nativeTerritoryName(self) -> str: ... - def territory(self) -> 'QLocale.Country': ... - @staticmethod - def codeToScript(scriptCode: str) -> 'QLocale.Script': ... - @staticmethod - def scriptToCode(script: 'QLocale.Script') -> str: ... - @staticmethod - def codeToCountry(countryCode: str) -> 'QLocale.Country': ... - @staticmethod - def countryToCode(country: 'QLocale.Country') -> str: ... - @staticmethod - def codeToLanguage(languageCode: str, codeTypes: 'QLocale.LanguageCodeType' = ...) -> 'QLocale.Language': ... - @staticmethod - def languageToCode(language: 'QLocale.Language', codeTypes: 'QLocale.LanguageCodeType' = ...) -> str: ... - def collation(self) -> 'QLocale': ... - def toULong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def formattedDataSize(self, bytes: int, precision: int = ..., format: 'QLocale.DataSizeFormat' = ...) -> str: ... - def swap(self, other: 'QLocale') -> None: ... - def __hash__(self) -> int: ... - def createSeparatedList(self, list: typing.Iterable[typing.Optional[str]]) -> str: ... - def quoteString(self, str: str, style: 'QLocale.QuotationStyle' = ...) -> str: ... - @staticmethod - def matchingLocales(language: 'QLocale.Language', script: 'QLocale.Script', territory: 'QLocale.Country') -> typing.List['QLocale']: ... - @staticmethod - def scriptToString(script: 'QLocale.Script') -> str: ... - def uiLanguages(self, separator: 'QLocale.TagSeparator' = ...) -> typing.List[str]: ... - @typing.overload - def toCurrencyString(self, a0: float, symbol: typing.Optional[str] = ..., precision: int = ...) -> str: ... - @typing.overload - def toCurrencyString(self, value: int, symbol: typing.Optional[str] = ...) -> str: ... - def currencySymbol(self, format: 'QLocale.CurrencySymbolFormat' = ...) -> str: ... - def toLower(self, str: typing.Optional[str]) -> str: ... - def toUpper(self, str: typing.Optional[str]) -> str: ... - def weekdays(self) -> typing.List[Qt.DayOfWeek]: ... - def firstDayOfWeek(self) -> Qt.DayOfWeek: ... - def nativeCountryName(self) -> str: ... - def nativeLanguageName(self) -> str: ... - def bcp47Name(self, separator: 'QLocale.TagSeparator' = ...) -> str: ... - def script(self) -> 'QLocale.Script': ... - def textDirection(self) -> Qt.LayoutDirection: ... - def pmText(self) -> str: ... - def amText(self) -> str: ... - def standaloneDayName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... - def standaloneMonthName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... - def positiveSign(self) -> str: ... - def measurementSystem(self) -> 'QLocale.MeasurementSystem': ... - def numberOptions(self) -> 'QLocale.NumberOption': ... - def setNumberOptions(self, options: 'QLocale.NumberOption') -> None: ... - def dayName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... - def monthName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... - def exponential(self) -> str: ... - def negativeSign(self) -> str: ... - def zeroDigit(self) -> str: ... - def percent(self) -> str: ... - def groupSeparator(self) -> str: ... - def decimalPoint(self) -> str: ... - @typing.overload - def toDateTime(self, string: typing.Optional[str], format: typing.Optional[str], baseYear: int = ...) -> QDateTime: ... - @typing.overload - def toDateTime(self, string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar, baseYear: int = ...) -> QDateTime: ... - @typing.overload - def toDateTime(self, string: typing.Optional[str], format: 'QLocale.FormatType', cal: QCalendar, baseYear: int = ...) -> QDateTime: ... - @typing.overload - def toDateTime(self, string: typing.Optional[str], format: 'QLocale.FormatType' = ..., baseYear: int = ...) -> QDateTime: ... - @typing.overload - def toTime(self, string: typing.Optional[str], format: 'QLocale.FormatType' = ...) -> QTime: ... - @typing.overload - def toTime(self, string: typing.Optional[str], format: typing.Optional[str]) -> QTime: ... - @typing.overload - def toDate(self, string: typing.Optional[str], format: typing.Optional[str], baseYear: int = ...) -> QDate: ... - @typing.overload - def toDate(self, string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar, baseYear: int = ...) -> QDate: ... - @typing.overload - def toDate(self, string: typing.Optional[str], format: 'QLocale.FormatType', cal: QCalendar, baseYear: int = ...) -> QDate: ... - @typing.overload - def toDate(self, string: typing.Optional[str], a1: 'QLocale.FormatType' = ..., baseYear: int = ...) -> QDate: ... - def dateTimeFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... - def timeFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... - def dateFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... - @staticmethod - def system() -> 'QLocale': ... - @staticmethod - def c() -> 'QLocale': ... - @staticmethod - def setDefault(locale: 'QLocale') -> None: ... - @staticmethod - def countryToString(country: 'QLocale.Country') -> str: ... - @staticmethod - def languageToString(language: 'QLocale.Language') -> str: ... - @typing.overload - def toString(self, date: typing.Union[QDate, datetime.date], format: 'QLocale.FormatType', cal: QCalendar) -> str: ... - @typing.overload - def toString(self, date: typing.Union[QDate, datetime.date], formatStr: str, cal: QCalendar) -> str: ... - @typing.overload - def toString(self, date: typing.Union[QDate, datetime.date], format: 'QLocale.FormatType' = ...) -> str: ... - @typing.overload - def toString(self, date: typing.Union[QDate, datetime.date], formatStr: str) -> str: ... - @typing.overload - def toString(self, time: typing.Union[QTime, datetime.time], format: 'QLocale.FormatType' = ...) -> str: ... - @typing.overload - def toString(self, time: typing.Union[QTime, datetime.time], formatStr: str) -> str: ... - @typing.overload - def toString(self, i: float, format: str = ..., precision: int = ...) -> str: ... - @typing.overload - def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: 'QLocale.FormatType', cal: QCalendar) -> str: ... - @typing.overload - def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: typing.Optional[str]) -> str: ... - @typing.overload - def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], formatStr: typing.Optional[str], cal: QCalendar) -> str: ... - @typing.overload - def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: 'QLocale.FormatType' = ...) -> str: ... - @typing.overload - def toString(self, i: int) -> str: ... - def toDouble(self, s: typing.Optional[str]) -> typing.Tuple[float, typing.Optional[bool]]: ... - def toFloat(self, s: typing.Optional[str]) -> typing.Tuple[float, typing.Optional[bool]]: ... - def toULongLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toLongLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toUInt(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toInt(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toUShort(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def toShort(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def name(self, separator: 'QLocale.TagSeparator' = ...) -> str: ... - def country(self) -> 'QLocale.Country': ... - def language(self) -> 'QLocale.Language': ... - - -class QLockFile(PyQt6.sip.simplewrapper): - - class LockError(enum.Enum): - NoError = ... # type: QLockFile.LockError - LockFailedError = ... # type: QLockFile.LockError - PermissionError = ... # type: QLockFile.LockError - UnknownError = ... # type: QLockFile.LockError - - def __init__(self, fileName: typing.Optional[str]) -> None: ... - - def fileName(self) -> str: ... - def error(self) -> 'QLockFile.LockError': ... - def removeStaleLockFile(self) -> bool: ... - def getLockInfo(self) -> typing.Tuple[bool, typing.Optional[int], typing.Optional[str], typing.Optional[str]]: ... - def isLocked(self) -> bool: ... - def staleLockTime(self) -> int: ... - def setStaleLockTime(self, a0: int) -> None: ... - def unlock(self) -> None: ... - def tryLock(self, timeout: int = ...) -> bool: ... - def lock(self) -> bool: ... - - -class QMessageLogContext(PyQt6.sip.simplewrapper): - - category = ... # type: str - file = ... # type: str - function = ... # type: str - line = ... # type: int - - -class QMessageLogger(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, file: typing.Optional[str], line: int, function: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, file: typing.Optional[str], line: int, function: typing.Optional[str], category: typing.Optional[str]) -> None: ... - - @typing.overload - def fatal(self, msg: typing.Optional[str]) -> None: ... - @typing.overload - def fatal(self, cat: 'QLoggingCategory', msg: typing.Optional[str]) -> None: ... - @typing.overload - def critical(self, msg: typing.Optional[str]) -> None: ... - @typing.overload - def critical(self, cat: 'QLoggingCategory', msg: typing.Optional[str]) -> None: ... - @typing.overload - def warning(self, msg: typing.Optional[str]) -> None: ... - @typing.overload - def warning(self, cat: 'QLoggingCategory', msg: typing.Optional[str]) -> None: ... - @typing.overload - def info(self, msg: typing.Optional[str]) -> None: ... - @typing.overload - def info(self, cat: 'QLoggingCategory', msg: typing.Optional[str]) -> None: ... - @typing.overload - def debug(self, msg: typing.Optional[str]) -> None: ... - @typing.overload - def debug(self, cat: 'QLoggingCategory', msg: typing.Optional[str]) -> None: ... - - -class QLoggingCategory(PyQt6.sip.simplewrapper): - - def __init__(self, category: typing.Optional[str], severityLevel: QtMsgType = ...) -> None: ... - - @staticmethod - def setFilterRules(rules: typing.Optional[str]) -> None: ... - @staticmethod - def defaultCategory() -> typing.Optional['QLoggingCategory']: ... - def __call__(self) -> 'QLoggingCategory': ... - def categoryName(self) -> typing.Optional[str]: ... - def isCriticalEnabled(self) -> bool: ... - def isWarningEnabled(self) -> bool: ... - def isInfoEnabled(self) -> bool: ... - def isDebugEnabled(self) -> bool: ... - def setEnabled(self, type: QtMsgType, enable: bool) -> None: ... - def isEnabled(self, type: QtMsgType) -> bool: ... - - -class QMargins(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, aleft: int, atop: int, aright: int, abottom: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QMargins') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __or__(self, m2: 'QMargins') -> 'QMargins': ... - @typing.overload - def __add__(self, m2: 'QMargins') -> 'QMargins': ... - @typing.overload - def __add__(self, rhs: int) -> 'QMargins': ... - @typing.overload - def __add__(self, rectangle: 'QRect') -> 'QRect': ... - def __radd__(self, lhs: int) -> 'QMargins': ... - @typing.overload - def __sub__(self, m2: 'QMargins') -> 'QMargins': ... - @typing.overload - def __sub__(self, rhs: int) -> 'QMargins': ... - @typing.overload - def __mul__(self, factor: int) -> 'QMargins': ... - @typing.overload - def __mul__(self, factor: float) -> 'QMargins': ... - @typing.overload - def __truediv__(self, divisor: int) -> 'QMargins': ... - @typing.overload - def __truediv__(self, divisor: float) -> 'QMargins': ... - def __pos__(self) -> 'QMargins': ... - def __neg__(self) -> 'QMargins': ... - def toMarginsF(self) -> 'QMarginsF': ... - @typing.overload - def __itruediv__(self, divisor: int) -> 'QMargins': ... - @typing.overload - def __itruediv__(self, divisor: float) -> 'QMargins': ... - @typing.overload - def __imul__(self, factor: int) -> 'QMargins': ... - @typing.overload - def __imul__(self, factor: float) -> 'QMargins': ... - @typing.overload - def __isub__(self, margins: 'QMargins') -> 'QMargins': ... - @typing.overload - def __isub__(self, margin: int) -> 'QMargins': ... - @typing.overload - def __iadd__(self, margins: 'QMargins') -> 'QMargins': ... - @typing.overload - def __iadd__(self, margin: int) -> 'QMargins': ... - def setBottom(self, abottom: int) -> None: ... - def setRight(self, aright: int) -> None: ... - def setTop(self, atop: int) -> None: ... - def setLeft(self, aleft: int) -> None: ... - def bottom(self) -> int: ... - def right(self) -> int: ... - def top(self) -> int: ... - def left(self) -> int: ... - def isNull(self) -> bool: ... - - -class QMarginsF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, aleft: float, atop: float, aright: float, abottom: float) -> None: ... - @typing.overload - def __init__(self, margins: QMargins) -> None: ... - @typing.overload - def __init__(self, a0: 'QMarginsF') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __or__(self, m2: 'QMarginsF') -> 'QMarginsF': ... - @typing.overload - def __add__(self, rhs: 'QMarginsF') -> 'QMarginsF': ... - @typing.overload - def __add__(self, rhs: float) -> 'QMarginsF': ... - @typing.overload - def __add__(self, rhs: 'QRectF') -> 'QRectF': ... - def __radd__(self, lhs: float) -> 'QMarginsF': ... - @typing.overload - def __sub__(self, rhs: 'QMarginsF') -> 'QMarginsF': ... - @typing.overload - def __sub__(self, rhs: float) -> 'QMarginsF': ... - def __mul__(self, rhs: float) -> 'QMarginsF': ... - def __rmul__(self, lhs: float) -> 'QMarginsF': ... - def __truediv__(self, divisor: float) -> 'QMarginsF': ... - def __pos__(self) -> 'QMarginsF': ... - def __neg__(self) -> 'QMarginsF': ... - def toMargins(self) -> QMargins: ... - def __itruediv__(self, divisor: float) -> 'QMarginsF': ... - def __imul__(self, factor: float) -> 'QMarginsF': ... - @typing.overload - def __isub__(self, margins: 'QMarginsF') -> 'QMarginsF': ... - @typing.overload - def __isub__(self, subtrahend: float) -> 'QMarginsF': ... - @typing.overload - def __iadd__(self, margins: 'QMarginsF') -> 'QMarginsF': ... - @typing.overload - def __iadd__(self, addend: float) -> 'QMarginsF': ... - def setBottom(self, abottom: float) -> None: ... - def setRight(self, aright: float) -> None: ... - def setTop(self, atop: float) -> None: ... - def setLeft(self, aleft: float) -> None: ... - def bottom(self) -> float: ... - def right(self) -> float: ... - def top(self) -> float: ... - def left(self) -> float: ... - def isNull(self) -> bool: ... - - -class QMessageAuthenticationCode(PyQt6.sip.simplewrapper): - - def __init__(self, method: QCryptographicHash.Algorithm, key: typing.Union[QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - - def swap(self, other: 'QMessageAuthenticationCode') -> None: ... - @staticmethod - def hash(message: typing.Union[QByteArray, bytes, bytearray, memoryview], key: typing.Union[QByteArray, bytes, bytearray, memoryview], method: QCryptographicHash.Algorithm) -> QByteArray: ... - def result(self) -> QByteArray: ... - @typing.overload - def addData(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def addData(self, device: typing.Optional[QIODevice]) -> bool: ... - def setKey(self, key: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - def reset(self) -> None: ... - - -class QMetaMethod(PyQt6.sip.simplewrapper): - - class MethodType(enum.Enum): - Method = ... # type: QMetaMethod.MethodType - Signal = ... # type: QMetaMethod.MethodType - Slot = ... # type: QMetaMethod.MethodType - Constructor = ... # type: QMetaMethod.MethodType - - class Access(enum.Enum): - Private = ... # type: QMetaMethod.Access - Protected = ... # type: QMetaMethod.Access - Public = ... # type: QMetaMethod.Access - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMetaMethod') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def isConst(self) -> bool: ... - def relativeMethodIndex(self) -> int: ... - def parameterTypeName(self, index: int) -> QByteArray: ... - def parameterMetaType(self, index: int) -> 'QMetaType': ... - def returnMetaType(self) -> 'QMetaType': ... - def parameterType(self, index: int) -> int: ... - def parameterCount(self) -> int: ... - def returnType(self) -> int: ... - def name(self) -> QByteArray: ... - def methodSignature(self) -> QByteArray: ... - def isValid(self) -> bool: ... - def revision(self) -> int: ... - def methodIndex(self) -> int: ... - @typing.overload - def invoke(self, object: typing.Optional[QObject], value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - def invoke(self, object: typing.Optional[QObject], connectionType: Qt.ConnectionType, value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - def invoke(self, object: typing.Optional[QObject], returnValue: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - def invoke(self, object: typing.Optional[QObject], connectionType: Qt.ConnectionType, returnValue: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - def methodType(self) -> 'QMetaMethod.MethodType': ... - def access(self) -> 'QMetaMethod.Access': ... - def tag(self) -> typing.Optional[str]: ... - def parameterNames(self) -> typing.List[QByteArray]: ... - def parameterTypes(self) -> typing.List[QByteArray]: ... - def typeName(self) -> typing.Optional[str]: ... - - -class QMetaEnum(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMetaEnum') -> None: ... - - def metaType(self) -> 'QMetaType': ... - def enumName(self) -> typing.Optional[str]: ... - def isScoped(self) -> bool: ... - def isValid(self) -> bool: ... - def valueToKeys(self, value: int) -> QByteArray: ... - def keysToValue(self, keys: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def valueToKey(self, value: int) -> typing.Optional[str]: ... - def keyToValue(self, key: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... - def scope(self) -> typing.Optional[str]: ... - def value(self, index: int) -> int: ... - def key(self, index: int) -> typing.Optional[str]: ... - def keyCount(self) -> int: ... - def isFlag(self) -> bool: ... - def name(self) -> typing.Optional[str]: ... - - -class QMetaProperty(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMetaProperty') -> None: ... - - def typeId(self) -> int: ... - def isBindable(self) -> bool: ... - def metaType(self) -> 'QMetaType': ... - def isRequired(self) -> bool: ... - def relativePropertyIndex(self) -> int: ... - def revision(self) -> int: ... - def isFinal(self) -> bool: ... - def isConstant(self) -> bool: ... - def propertyIndex(self) -> int: ... - def notifySignalIndex(self) -> int: ... - def notifySignal(self) -> QMetaMethod: ... - def hasNotifySignal(self) -> bool: ... - def userType(self) -> int: ... - def isUser(self) -> bool: ... - def isResettable(self) -> bool: ... - def isValid(self) -> bool: ... - def hasStdCppSet(self) -> bool: ... - def reset(self, obj: typing.Optional[QObject]) -> bool: ... - def write(self, obj: typing.Optional[QObject], value: typing.Any) -> bool: ... - def read(self, obj: typing.Optional[QObject]) -> typing.Any: ... - def enumerator(self) -> QMetaEnum: ... - def isEnumType(self) -> bool: ... - def isFlagType(self) -> bool: ... - def isStored(self) -> bool: ... - def isScriptable(self) -> bool: ... - def isDesignable(self) -> bool: ... - def isWritable(self) -> bool: ... - def isReadable(self) -> bool: ... - def typeName(self) -> typing.Optional[str]: ... - def name(self) -> typing.Optional[str]: ... - - -class QMetaClassInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMetaClassInfo') -> None: ... - - def value(self) -> typing.Optional[str]: ... - def name(self) -> typing.Optional[str]: ... - - -class QMetaType(PyQt6.sip.simplewrapper): - - class TypeFlag(enum.Flag): - NeedsConstruction = ... # type: QMetaType.TypeFlag - NeedsDestruction = ... # type: QMetaType.TypeFlag - PointerToQObject = ... # type: QMetaType.TypeFlag - IsEnumeration = ... # type: QMetaType.TypeFlag - IsUnsignedEnumeration = ... # type: QMetaType.TypeFlag - IsPointer = ... # type: QMetaType.TypeFlag - RelocatableType = ... # type: QMetaType.TypeFlag - IsQmlList = ... # type: QMetaType.TypeFlag - IsConst = ... # type: QMetaType.TypeFlag - NeedsCopyConstruction = ... # type: QMetaType.TypeFlag - NeedsMoveConstruction = ... # type: QMetaType.TypeFlag - - class Type(enum.Enum): - UnknownType = ... # type: QMetaType.Type - Void = ... # type: QMetaType.Type - Bool = ... # type: QMetaType.Type - Int = ... # type: QMetaType.Type - UInt = ... # type: QMetaType.Type - LongLong = ... # type: QMetaType.Type - ULongLong = ... # type: QMetaType.Type - Double = ... # type: QMetaType.Type - QChar = ... # type: QMetaType.Type - QVariantMap = ... # type: QMetaType.Type - QVariantList = ... # type: QMetaType.Type - QVariantHash = ... # type: QMetaType.Type - QString = ... # type: QMetaType.Type - QStringList = ... # type: QMetaType.Type - QByteArray = ... # type: QMetaType.Type - QBitArray = ... # type: QMetaType.Type - QDate = ... # type: QMetaType.Type - QTime = ... # type: QMetaType.Type - QDateTime = ... # type: QMetaType.Type - QUrl = ... # type: QMetaType.Type - QLocale = ... # type: QMetaType.Type - QRect = ... # type: QMetaType.Type - QRectF = ... # type: QMetaType.Type - QSize = ... # type: QMetaType.Type - QSizeF = ... # type: QMetaType.Type - QLine = ... # type: QMetaType.Type - QLineF = ... # type: QMetaType.Type - QPoint = ... # type: QMetaType.Type - QPointF = ... # type: QMetaType.Type - LastCoreType = ... # type: QMetaType.Type - FirstGuiType = ... # type: QMetaType.Type - QFont = ... # type: QMetaType.Type - QPixmap = ... # type: QMetaType.Type - QBrush = ... # type: QMetaType.Type - QColor = ... # type: QMetaType.Type - QPalette = ... # type: QMetaType.Type - QIcon = ... # type: QMetaType.Type - QImage = ... # type: QMetaType.Type - QPolygon = ... # type: QMetaType.Type - QRegion = ... # type: QMetaType.Type - QBitmap = ... # type: QMetaType.Type - QCursor = ... # type: QMetaType.Type - QSizePolicy = ... # type: QMetaType.Type - QKeySequence = ... # type: QMetaType.Type - QPen = ... # type: QMetaType.Type - QTextLength = ... # type: QMetaType.Type - QTextFormat = ... # type: QMetaType.Type - QTransform = ... # type: QMetaType.Type - VoidStar = ... # type: QMetaType.Type - Long = ... # type: QMetaType.Type - Short = ... # type: QMetaType.Type - Char = ... # type: QMetaType.Type - Char16 = ... # type: QMetaType.Type - Char32 = ... # type: QMetaType.Type - ULong = ... # type: QMetaType.Type - UShort = ... # type: QMetaType.Type - UChar = ... # type: QMetaType.Type - Float = ... # type: QMetaType.Type - Float16 = ... # type: QMetaType.Type - QObjectStar = ... # type: QMetaType.Type - QMatrix4x4 = ... # type: QMetaType.Type - QVector2D = ... # type: QMetaType.Type - QVector3D = ... # type: QMetaType.Type - QVector4D = ... # type: QMetaType.Type - QQuaternion = ... # type: QMetaType.Type - QEasingCurve = ... # type: QMetaType.Type - QVariant = ... # type: QMetaType.Type - QUuid = ... # type: QMetaType.Type - QModelIndex = ... # type: QMetaType.Type - QPolygonF = ... # type: QMetaType.Type - SChar = ... # type: QMetaType.Type - QRegularExpression = ... # type: QMetaType.Type - QJsonValue = ... # type: QMetaType.Type - QJsonObject = ... # type: QMetaType.Type - QJsonArray = ... # type: QMetaType.Type - QJsonDocument = ... # type: QMetaType.Type - QByteArrayList = ... # type: QMetaType.Type - QPersistentModelIndex = ... # type: QMetaType.Type - QCborSimpleType = ... # type: QMetaType.Type - QCborValue = ... # type: QMetaType.Type - QCborArray = ... # type: QMetaType.Type - QCborMap = ... # type: QMetaType.Type - QColorSpace = ... # type: QMetaType.Type - QVariantPair = ... # type: QMetaType.Type - User = ... # type: QMetaType.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, type: int) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def underlyingType(self) -> 'QMetaType': ... - def isDestructible(self) -> bool: ... - def isMoveConstructible(self) -> bool: ... - def isCopyConstructible(self) -> bool: ... - def isDefaultConstructible(self) -> bool: ... - def registerType(self) -> None: ... - def __hash__(self) -> int: ... - @staticmethod - def canView(fromType: 'QMetaType', toType: 'QMetaType') -> bool: ... - @staticmethod - def canConvert(fromType: 'QMetaType', toType: 'QMetaType') -> bool: ... - @staticmethod - def fromName(name: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QMetaType': ... - def isOrdered(self) -> bool: ... - def isEqualityComparable(self) -> bool: ... - def alignOf(self) -> int: ... - def name(self) -> typing.Optional[bytes]: ... - def hasRegisteredDebugStreamOperator(self) -> bool: ... - def hasRegisteredDataStreamOperators(self) -> bool: ... - def id(self) -> int: ... - def isValid(self) -> bool: ... - def flags(self) -> 'QMetaType.TypeFlag': ... - def sizeOf(self) -> int: ... - @typing.overload - @staticmethod - def isRegistered(type: int) -> bool: ... - @typing.overload - def isRegistered(self) -> bool: ... - - -class QMimeData(QObject): - - def __init__(self) -> None: ... - - def retrieveData(self, mimetype: typing.Optional[str], preferredType: QMetaType) -> typing.Any: ... - def removeFormat(self, mimetype: typing.Optional[str]) -> None: ... - def clear(self) -> None: ... - def formats(self) -> typing.List[str]: ... - def hasFormat(self, mimetype: typing.Optional[str]) -> bool: ... - def setData(self, mimetype: typing.Optional[str], data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - def data(self, mimetype: typing.Optional[str]) -> QByteArray: ... - def hasColor(self) -> bool: ... - def setColorData(self, color: typing.Any) -> None: ... - def colorData(self) -> typing.Any: ... - def hasImage(self) -> bool: ... - def setImageData(self, image: typing.Any) -> None: ... - def imageData(self) -> typing.Any: ... - def hasHtml(self) -> bool: ... - def setHtml(self, html: typing.Optional[str]) -> None: ... - def html(self) -> str: ... - def hasText(self) -> bool: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def text(self) -> str: ... - def hasUrls(self) -> bool: ... - def setUrls(self, urls: typing.Iterable['QUrl']) -> None: ... - def urls(self) -> typing.List['QUrl']: ... - - -class QMimeDatabase(PyQt6.sip.simplewrapper): - - class MatchMode(enum.Enum): - MatchDefault = ... # type: QMimeDatabase.MatchMode - MatchExtension = ... # type: QMimeDatabase.MatchMode - MatchContent = ... # type: QMimeDatabase.MatchMode - - def __init__(self) -> None: ... - - def allMimeTypes(self) -> typing.List['QMimeType']: ... - def suffixForFileName(self, fileName: typing.Optional[str]) -> str: ... - @typing.overload - def mimeTypeForFileNameAndData(self, fileName: typing.Optional[str], device: typing.Optional[QIODevice]) -> 'QMimeType': ... - @typing.overload - def mimeTypeForFileNameAndData(self, fileName: typing.Optional[str], data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QMimeType': ... - def mimeTypeForUrl(self, url: 'QUrl') -> 'QMimeType': ... - @typing.overload - def mimeTypeForData(self, data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QMimeType': ... - @typing.overload - def mimeTypeForData(self, device: typing.Optional[QIODevice]) -> 'QMimeType': ... - def mimeTypesForFileName(self, fileName: typing.Optional[str]) -> typing.List['QMimeType']: ... - @typing.overload - def mimeTypeForFile(self, fileName: typing.Optional[str], mode: 'QMimeDatabase.MatchMode' = ...) -> 'QMimeType': ... - @typing.overload - def mimeTypeForFile(self, fileInfo: QFileInfo, mode: 'QMimeDatabase.MatchMode' = ...) -> 'QMimeType': ... - def mimeTypeForName(self, nameOrAlias: typing.Optional[str]) -> 'QMimeType': ... - - -class QMimeType(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMimeType') -> None: ... - - def __hash__(self) -> int: ... - def filterString(self) -> str: ... - def inherits(self, mimeTypeName: typing.Optional[str]) -> bool: ... - def preferredSuffix(self) -> str: ... - def suffixes(self) -> typing.List[str]: ... - def aliases(self) -> typing.List[str]: ... - def allAncestors(self) -> typing.List[str]: ... - def parentMimeTypes(self) -> typing.List[str]: ... - def globPatterns(self) -> typing.List[str]: ... - def iconName(self) -> str: ... - def genericIconName(self) -> str: ... - def comment(self) -> str: ... - def name(self) -> str: ... - def isDefault(self) -> bool: ... - def isValid(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def swap(self, other: 'QMimeType') -> None: ... - - -class QMutex(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def unlock(self) -> None: ... - @typing.overload - def tryLock(self) -> bool: ... - @typing.overload - def tryLock(self, timeout: QDeadlineTimer) -> bool: ... - @typing.overload - def tryLock(self, timeout: int) -> bool: ... - def lock(self) -> None: ... - - -class QRecursiveMutex(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def unlock(self) -> None: ... - @typing.overload - def tryLock(self, a0: QDeadlineTimer) -> bool: ... - @typing.overload - def tryLock(self, timeout: int = ...) -> bool: ... - def lock(self) -> None: ... - - -class QSignalBlocker(PyQt6.sip.simplewrapper): - - def __init__(self, o: typing.Optional[QObject]) -> None: ... - - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - def unblock(self) -> None: ... - def reblock(self) -> None: ... - def dismiss(self) -> None: ... - - -class QObjectCleanupHandler(QObject): - - def __init__(self) -> None: ... - - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def remove(self, object: typing.Optional[QObject]) -> None: ... - def add(self, object: typing.Optional[QObject]) -> typing.Optional[QObject]: ... - - -class QMetaObject(PyQt6.sip.simplewrapper): - - class Connection(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMetaObject.Connection') -> None: ... - - def swap(self, o: 'QMetaObject.Connection') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMetaObject') -> None: ... - - def inherits(self, metaObject: typing.Optional['QMetaObject']) -> bool: ... - def constructor(self, index: int) -> QMetaMethod: ... - def indexOfConstructor(self, constructor: typing.Optional[str]) -> int: ... - def constructorCount(self) -> int: ... - def newInstance(self, value0: 'QGenericArgument', value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Optional[QObject]: ... - @typing.overload - @staticmethod - def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], a2: Qt.ConnectionType, ret: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - @staticmethod - def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], ret: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - @staticmethod - def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], type: Qt.ConnectionType, value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @typing.overload - @staticmethod - def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... - @staticmethod - def normalizedType(type: typing.Optional[str]) -> QByteArray: ... - @staticmethod - def normalizedSignature(method: typing.Optional[str]) -> QByteArray: ... - @staticmethod - def connectSlotsByName(o: typing.Optional[QObject]) -> None: ... - @typing.overload - @staticmethod - def checkConnectArgs(signal: typing.Optional[str], method: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def checkConnectArgs(signal: QMetaMethod, method: QMetaMethod) -> bool: ... - def classInfo(self, index: int) -> QMetaClassInfo: ... - def property(self, index: int) -> QMetaProperty: ... - def enumerator(self, index: int) -> QMetaEnum: ... - def method(self, index: int) -> QMetaMethod: ... - def indexOfClassInfo(self, name: typing.Optional[str]) -> int: ... - def indexOfProperty(self, name: typing.Optional[str]) -> int: ... - def indexOfEnumerator(self, name: typing.Optional[str]) -> int: ... - def indexOfSlot(self, slot: typing.Optional[str]) -> int: ... - def indexOfSignal(self, signal: typing.Optional[str]) -> int: ... - def indexOfMethod(self, method: typing.Optional[str]) -> int: ... - def classInfoCount(self) -> int: ... - def propertyCount(self) -> int: ... - def enumeratorCount(self) -> int: ... - def methodCount(self) -> int: ... - def classInfoOffset(self) -> int: ... - def propertyOffset(self) -> int: ... - def enumeratorOffset(self) -> int: ... - def methodOffset(self) -> int: ... - def userProperty(self) -> QMetaProperty: ... - def superClass(self) -> typing.Optional['QMetaObject']: ... - def className(self) -> typing.Optional[str]: ... - def metaType(self) -> QMetaType: ... - - -class QGenericArgument(PyQt6.sip.simplewrapper): ... - - -class QGenericReturnArgument(PyQt6.sip.simplewrapper): ... - - -class QOperatingSystemVersionBase(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QOperatingSystemVersionBase') -> None: ... - - def __lt__(self, rhs: 'QOperatingSystemVersionBase') -> bool: ... - def __le__(self, rhs: 'QOperatingSystemVersionBase') -> bool: ... - def __gt__(self, rhs: 'QOperatingSystemVersionBase') -> bool: ... - def __ge__(self, rhs: 'QOperatingSystemVersionBase') -> bool: ... - def name(self) -> str: ... - def segmentCount(self) -> int: ... - def microVersion(self) -> int: ... - def minorVersion(self) -> int: ... - def majorVersion(self) -> int: ... - def version(self) -> 'QVersionNumber': ... - - -class QOperatingSystemVersion(QOperatingSystemVersionBase): - - class OSType(enum.Enum): - Unknown = ... # type: QOperatingSystemVersion.OSType - Windows = ... # type: QOperatingSystemVersion.OSType - MacOS = ... # type: QOperatingSystemVersion.OSType - IOS = ... # type: QOperatingSystemVersion.OSType - TvOS = ... # type: QOperatingSystemVersion.OSType - WatchOS = ... # type: QOperatingSystemVersion.OSType - Android = ... # type: QOperatingSystemVersion.OSType - - Android10 = ... # type: 'QOperatingSystemVersion' - Android11 = ... # type: 'QOperatingSystemVersion' - Android12 = ... # type: QOperatingSystemVersionBase - Android12L = ... # type: QOperatingSystemVersionBase - Android13 = ... # type: QOperatingSystemVersionBase - AndroidJellyBean = ... # type: 'QOperatingSystemVersion' - AndroidJellyBean_MR1 = ... # type: 'QOperatingSystemVersion' - AndroidJellyBean_MR2 = ... # type: 'QOperatingSystemVersion' - AndroidKitKat = ... # type: 'QOperatingSystemVersion' - AndroidLollipop = ... # type: 'QOperatingSystemVersion' - AndroidLollipop_MR1 = ... # type: 'QOperatingSystemVersion' - AndroidMarshmallow = ... # type: 'QOperatingSystemVersion' - AndroidNougat = ... # type: 'QOperatingSystemVersion' - AndroidNougat_MR1 = ... # type: 'QOperatingSystemVersion' - AndroidOreo = ... # type: 'QOperatingSystemVersion' - AndroidOreo_MR1 = ... # type: 'QOperatingSystemVersion' - AndroidPie = ... # type: 'QOperatingSystemVersion' - MacOSBigSur = ... # type: 'QOperatingSystemVersion' - MacOSCatalina = ... # type: 'QOperatingSystemVersion' - MacOSHighSierra = ... # type: 'QOperatingSystemVersion' - MacOSMojave = ... # type: 'QOperatingSystemVersion' - MacOSMonterey = ... # type: 'QOperatingSystemVersion' - MacOSSierra = ... # type: 'QOperatingSystemVersion' - MacOSSonoma = ... # type: QOperatingSystemVersionBase - MacOSVentura = ... # type: QOperatingSystemVersionBase - OSXElCapitan = ... # type: 'QOperatingSystemVersion' - OSXMavericks = ... # type: 'QOperatingSystemVersion' - OSXYosemite = ... # type: 'QOperatingSystemVersion' - Windows10 = ... # type: 'QOperatingSystemVersion' - Windows10_1809 = ... # type: QOperatingSystemVersionBase - Windows10_1903 = ... # type: QOperatingSystemVersionBase - Windows10_1909 = ... # type: QOperatingSystemVersionBase - Windows10_2004 = ... # type: QOperatingSystemVersionBase - Windows10_20H2 = ... # type: QOperatingSystemVersionBase - Windows10_21H1 = ... # type: QOperatingSystemVersionBase - Windows10_21H2 = ... # type: QOperatingSystemVersionBase - Windows10_22H2 = ... # type: QOperatingSystemVersionBase - Windows11 = ... # type: QOperatingSystemVersionBase - Windows11_21H2 = ... # type: QOperatingSystemVersionBase - Windows11_22H2 = ... # type: QOperatingSystemVersionBase - Windows7 = ... # type: 'QOperatingSystemVersion' - Windows8 = ... # type: 'QOperatingSystemVersion' - Windows8_1 = ... # type: 'QOperatingSystemVersion' - - @typing.overload - def __init__(self, osType: 'QOperatingSystemVersion.OSType', vmajor: int, vminor: int = ..., vmicro: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QOperatingSystemVersion') -> None: ... - - def type(self) -> 'QOperatingSystemVersion.OSType': ... - @staticmethod - def currentType() -> 'QOperatingSystemVersion.OSType': ... - @staticmethod - def current() -> 'QOperatingSystemVersion': ... - - -class QParallelAnimationGroup(QAnimationGroup): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def updateDirection(self, direction: QAbstractAnimation.Direction) -> None: ... - def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... - def updateCurrentTime(self, currentTime: int) -> None: ... - def event(self, event: typing.Optional[QEvent]) -> bool: ... - def duration(self) -> int: ... - - -class QPauseAnimation(QAbstractAnimation): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, msecs: int, parent: typing.Optional[QObject] = ...) -> None: ... - - def updateCurrentTime(self, a0: int) -> None: ... - def event(self, e: typing.Optional[QEvent]) -> bool: ... - def setDuration(self, msecs: int) -> None: ... - def duration(self) -> int: ... - - -class QPermission(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPermission') -> None: ... - - def value(self) -> typing.Any: ... - def type(self) -> QMetaType: ... - def status(self) -> Qt.PermissionStatus: ... - - -class QLocationPermission(PyQt6.sip.simplewrapper): - - class Availability(enum.Enum): - WhenInUse = ... # type: QLocationPermission.Availability - Always = ... # type: QLocationPermission.Availability - - class Accuracy(enum.Enum): - Approximate = ... # type: QLocationPermission.Accuracy - Precise = ... # type: QLocationPermission.Accuracy - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QLocationPermission') -> None: ... - - def availability(self) -> 'QLocationPermission.Availability': ... - def setAvailability(self, availability: 'QLocationPermission.Availability') -> None: ... - def accuracy(self) -> 'QLocationPermission.Accuracy': ... - def setAccuracy(self, accuracy: 'QLocationPermission.Accuracy') -> None: ... - - -class QCalendarPermission(PyQt6.sip.simplewrapper): - - class AccessMode(enum.Enum): - ReadOnly = ... # type: QCalendarPermission.AccessMode - ReadWrite = ... # type: QCalendarPermission.AccessMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCalendarPermission') -> None: ... - - def accessMode(self) -> 'QCalendarPermission.AccessMode': ... - def setAccessMode(self, mode: 'QCalendarPermission.AccessMode') -> None: ... - - -class QContactsPermission(PyQt6.sip.simplewrapper): - - class AccessMode(enum.Enum): - ReadOnly = ... # type: QContactsPermission.AccessMode - ReadWrite = ... # type: QContactsPermission.AccessMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QContactsPermission') -> None: ... - - def accessMode(self) -> 'QContactsPermission.AccessMode': ... - def setAccessMode(self, mode: 'QContactsPermission.AccessMode') -> None: ... - - -class QCameraPermission(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCameraPermission') -> None: ... - - -class QMicrophonePermission(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMicrophonePermission') -> None: ... - - -class QBluetoothPermission(PyQt6.sip.simplewrapper): - - class CommunicationMode(enum.Enum): - Access = ... # type: QBluetoothPermission.CommunicationMode - Advertise = ... # type: QBluetoothPermission.CommunicationMode - Default = ... # type: QBluetoothPermission.CommunicationMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QBluetoothPermission') -> None: ... - - def communicationModes(self) -> 'QBluetoothPermission.CommunicationMode': ... - def setCommunicationModes(self, modes: 'QBluetoothPermission.CommunicationMode') -> None: ... - - -class QVariantAnimation(QAbstractAnimation): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def interpolated(self, from_: typing.Any, to: typing.Any, progress: float) -> typing.Any: ... - def updateCurrentValue(self, value: typing.Any) -> None: ... - def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... - def updateCurrentTime(self, a0: int) -> None: ... - def event(self, event: typing.Optional[QEvent]) -> bool: ... - valueChanged: typing.ClassVar[pyqtSignal] - def setEasingCurve(self, easing: typing.Union[QEasingCurve, QEasingCurve.Type]) -> None: ... - def easingCurve(self) -> QEasingCurve: ... - def setDuration(self, msecs: int) -> None: ... - def duration(self) -> int: ... - def currentValue(self) -> typing.Any: ... - def setKeyValues(self, values: typing.Iterable[typing.Tuple[float, typing.Any]]) -> None: ... - def keyValues(self) -> typing.List[typing.Tuple[float, typing.Any]]: ... - def setKeyValueAt(self, step: float, value: typing.Any) -> None: ... - def keyValueAt(self, step: float) -> typing.Any: ... - def setEndValue(self, value: typing.Any) -> None: ... - def endValue(self) -> typing.Any: ... - def setStartValue(self, value: typing.Any) -> None: ... - def startValue(self) -> typing.Any: ... - - -class QPropertyAnimation(QVariantAnimation): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, target: typing.Optional[QObject], propertyName: typing.Union[QByteArray, bytes, bytearray, memoryview], parent: typing.Optional[QObject] = ...) -> None: ... - - def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... - def updateCurrentValue(self, value: typing.Any) -> None: ... - def event(self, event: typing.Optional[QEvent]) -> bool: ... - def setPropertyName(self, propertyName: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - def propertyName(self) -> QByteArray: ... - def setTargetObject(self, target: typing.Optional[QObject]) -> None: ... - def targetObject(self) -> typing.Optional[QObject]: ... - - -class QPluginLoader(QObject): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... - - def loadHints(self) -> QLibrary.LoadHint: ... - def setLoadHints(self, loadHints: QLibrary.LoadHint) -> None: ... - def errorString(self) -> str: ... - def fileName(self) -> str: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def isLoaded(self) -> bool: ... - def unload(self) -> bool: ... - def load(self) -> bool: ... - @staticmethod - def staticInstances() -> typing.List[QObject]: ... - def instance(self) -> typing.Optional[QObject]: ... - - -class QPoint(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, xpos: int, ypos: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QPoint') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, p2: 'QPoint') -> 'QPoint': ... - def __sub__(self, p2: 'QPoint') -> 'QPoint': ... - @typing.overload - def __mul__(self, factor: int) -> 'QPoint': ... - @typing.overload - def __mul__(self, factor: float) -> 'QPoint': ... - @typing.overload - def __rmul__(self, factor: int) -> 'QPoint': ... - @typing.overload - def __rmul__(self, factor: float) -> 'QPoint': ... - def __truediv__(self, c: float) -> 'QPoint': ... - def __pos__(self) -> 'QPoint': ... - def __neg__(self) -> 'QPoint': ... - def toPointF(self) -> 'QPointF': ... - def transposed(self) -> 'QPoint': ... - @staticmethod - def dotProduct(p1: 'QPoint', p2: 'QPoint') -> int: ... - def __itruediv__(self, c: float) -> 'QPoint': ... - @typing.overload - def __imul__(self, c: int) -> 'QPoint': ... - @typing.overload - def __imul__(self, c: float) -> 'QPoint': ... - def __isub__(self, p: 'QPoint') -> 'QPoint': ... - def __iadd__(self, p: 'QPoint') -> 'QPoint': ... - def setY(self, ypos: int) -> None: ... - def setX(self, xpos: int) -> None: ... - def y(self) -> int: ... - def x(self) -> int: ... - def __hash__(self) -> int: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - def manhattanLength(self) -> int: ... - - -class QPointF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, xpos: float, ypos: float) -> None: ... - @typing.overload - def __init__(self, p: QPoint) -> None: ... - @typing.overload - def __init__(self, a0: 'QPointF') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, p2: 'QPointF') -> 'QPointF': ... - def __sub__(self, p2: 'QPointF') -> 'QPointF': ... - def __mul__(self, c: float) -> 'QPointF': ... - def __rmul__(self, c: float) -> 'QPointF': ... - def __truediv__(self, divisor: float) -> 'QPointF': ... - def __pos__(self) -> 'QPointF': ... - def __neg__(self) -> 'QPointF': ... - def transposed(self) -> 'QPointF': ... - @staticmethod - def dotProduct(p1: 'QPointF', p2: 'QPointF') -> float: ... - def manhattanLength(self) -> float: ... - def toPoint(self) -> QPoint: ... - def __itruediv__(self, c: float) -> 'QPointF': ... - def __imul__(self, c: float) -> 'QPointF': ... - def __isub__(self, p: 'QPointF') -> 'QPointF': ... - def __iadd__(self, p: 'QPointF') -> 'QPointF': ... - def setY(self, ypos: float) -> None: ... - def setX(self, xpos: float) -> None: ... - def y(self) -> float: ... - def x(self) -> float: ... - def __bool__(self) -> int: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - - -class QProcess(QIODevice): - - class UnixProcessFlag(enum.Enum): - ResetSignalHandlers = ... # type: QProcess.UnixProcessFlag - IgnoreSigPipe = ... # type: QProcess.UnixProcessFlag - CloseFileDescriptors = ... # type: QProcess.UnixProcessFlag - UseVFork = ... # type: QProcess.UnixProcessFlag - CreateNewSession = ... # type: QProcess.UnixProcessFlag - DisconnectControllingTerminal = ... # type: QProcess.UnixProcessFlag - ResetIds = ... # type: QProcess.UnixProcessFlag - - class InputChannelMode(enum.Enum): - ManagedInputChannel = ... # type: QProcess.InputChannelMode - ForwardedInputChannel = ... # type: QProcess.InputChannelMode - - class ProcessChannelMode(enum.Enum): - SeparateChannels = ... # type: QProcess.ProcessChannelMode - MergedChannels = ... # type: QProcess.ProcessChannelMode - ForwardedChannels = ... # type: QProcess.ProcessChannelMode - ForwardedOutputChannel = ... # type: QProcess.ProcessChannelMode - ForwardedErrorChannel = ... # type: QProcess.ProcessChannelMode - - class ProcessChannel(enum.Enum): - StandardOutput = ... # type: QProcess.ProcessChannel - StandardError = ... # type: QProcess.ProcessChannel - - class ProcessState(enum.Enum): - NotRunning = ... # type: QProcess.ProcessState - Starting = ... # type: QProcess.ProcessState - Running = ... # type: QProcess.ProcessState - - class ProcessError(enum.Enum): - FailedToStart = ... # type: QProcess.ProcessError - Crashed = ... # type: QProcess.ProcessError - Timedout = ... # type: QProcess.ProcessError - ReadError = ... # type: QProcess.ProcessError - WriteError = ... # type: QProcess.ProcessError - UnknownError = ... # type: QProcess.ProcessError - - class ExitStatus(enum.Enum): - NormalExit = ... # type: QProcess.ExitStatus - CrashExit = ... # type: QProcess.ExitStatus - - class UnixProcessParameters(PyQt6.sip.simplewrapper): - - flags = ... # type: 'QProcess.UnixProcessFlag' - lowestFileDescriptorToClose = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QProcess.UnixProcessParameters') -> None: ... - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - @typing.overload - def setUnixProcessParameters(self, flagsOnly: 'QProcess.UnixProcessFlag') -> None: ... - @typing.overload - def setUnixProcessParameters(self, params: 'QProcess.UnixProcessParameters') -> None: ... - def unixProcessParameters(self) -> 'QProcess.UnixProcessParameters': ... - def processId(self) -> int: ... - @staticmethod - def nullDevice() -> str: ... - def setInputChannelMode(self, mode: 'QProcess.InputChannelMode') -> None: ... - def inputChannelMode(self) -> 'QProcess.InputChannelMode': ... - def open(self, mode: QIODeviceBase.OpenModeFlag = ...) -> bool: ... - def setArguments(self, arguments: typing.Iterable[typing.Optional[str]]) -> None: ... - def arguments(self) -> typing.List[str]: ... - def setProgram(self, program: typing.Optional[str]) -> None: ... - def program(self) -> str: ... - def processEnvironment(self) -> 'QProcessEnvironment': ... - def setProcessEnvironment(self, environment: 'QProcessEnvironment') -> None: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readData(self, maxlen: int) -> bytes: ... - def setProcessState(self, state: 'QProcess.ProcessState') -> None: ... - errorOccurred: typing.ClassVar[pyqtSignal] - readyReadStandardError: typing.ClassVar[pyqtSignal] - readyReadStandardOutput: typing.ClassVar[pyqtSignal] - stateChanged: typing.ClassVar[pyqtSignal] - finished: typing.ClassVar[pyqtSignal] - started: typing.ClassVar[pyqtSignal] - def kill(self) -> None: ... - def terminate(self) -> None: ... - def setStandardOutputProcess(self, destination: typing.Optional['QProcess']) -> None: ... - def setStandardErrorFile(self, fileName: typing.Optional[str], mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - def setStandardOutputFile(self, fileName: typing.Optional[str], mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - def setStandardInputFile(self, fileName: typing.Optional[str]) -> None: ... - def setProcessChannelMode(self, mode: 'QProcess.ProcessChannelMode') -> None: ... - def processChannelMode(self) -> 'QProcess.ProcessChannelMode': ... - @staticmethod - def systemEnvironment() -> typing.List[str]: ... - @typing.overload - @staticmethod - def startDetached(program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]] = ..., workingDirectory: typing.Optional[str] = ...) -> typing.Tuple[bool, typing.Optional[int]]: ... - @typing.overload - def startDetached(self) -> typing.Tuple[bool, typing.Optional[int]]: ... - @staticmethod - def execute(program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]] = ...) -> int: ... - def close(self) -> None: ... - def isSequential(self) -> bool: ... - def bytesToWrite(self) -> int: ... - def exitStatus(self) -> 'QProcess.ExitStatus': ... - def exitCode(self) -> int: ... - def readAllStandardError(self) -> QByteArray: ... - def readAllStandardOutput(self) -> QByteArray: ... - def waitForFinished(self, msecs: int = ...) -> bool: ... - def waitForBytesWritten(self, msecs: int = ...) -> bool: ... - def waitForReadyRead(self, msecs: int = ...) -> bool: ... - def waitForStarted(self, msecs: int = ...) -> bool: ... - def state(self) -> 'QProcess.ProcessState': ... - def error(self) -> 'QProcess.ProcessError': ... - def setWorkingDirectory(self, dir: typing.Optional[str]) -> None: ... - def workingDirectory(self) -> str: ... - def closeWriteChannel(self) -> None: ... - def closeReadChannel(self, channel: 'QProcess.ProcessChannel') -> None: ... - def setReadChannel(self, channel: 'QProcess.ProcessChannel') -> None: ... - def readChannel(self) -> 'QProcess.ProcessChannel': ... - def startCommand(self, command: typing.Optional[str], mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def start(self, program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]] = ..., mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def start(self, mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - - -class QProcessEnvironment(PyQt6.sip.simplewrapper): - - class Initialization(enum.Enum): - InheritFromParent = ... # type: QProcessEnvironment.Initialization - - @typing.overload - def __init__(self, a0: 'QProcessEnvironment.Initialization') -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QProcessEnvironment') -> None: ... - - def inheritsFromParent(self) -> bool: ... - def swap(self, other: 'QProcessEnvironment') -> None: ... - def keys(self) -> typing.List[str]: ... - @staticmethod - def systemEnvironment() -> 'QProcessEnvironment': ... - def toStringList(self) -> typing.List[str]: ... - def value(self, name: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... - def remove(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def insert(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def insert(self, e: 'QProcessEnvironment') -> None: ... - def contains(self, name: typing.Optional[str]) -> bool: ... - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QRandomGenerator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, seed: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QRandomGenerator') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @staticmethod - def securelySeeded() -> 'QRandomGenerator': ... - @staticmethod - def global_() -> typing.Optional['QRandomGenerator']: ... - @staticmethod - def system() -> typing.Optional['QRandomGenerator']: ... - @staticmethod - def max() -> int: ... - @staticmethod - def min() -> int: ... - def discard(self, z: int) -> None: ... - def seed(self, seed: int = ...) -> None: ... - def __call__(self) -> int: ... - @typing.overload - def bounded(self, highest: float) -> float: ... - @typing.overload - def bounded(self, lowest: int, highest: int) -> int: ... - @typing.overload - def bounded(self, highest: int) -> int: ... - def generateDouble(self) -> float: ... - def generate64(self) -> int: ... - def generate(self) -> int: ... - - -class QReadWriteLock(PyQt6.sip.simplewrapper): - - class RecursionMode(enum.Enum): - NonRecursive = ... # type: QReadWriteLock.RecursionMode - Recursive = ... # type: QReadWriteLock.RecursionMode - - def __init__(self, recursionMode: 'QReadWriteLock.RecursionMode' = ...) -> None: ... - - def unlock(self) -> None: ... - @typing.overload - def tryLockForWrite(self, timeout: QDeadlineTimer = ...) -> bool: ... - @typing.overload - def tryLockForWrite(self, timeout: int) -> bool: ... - def lockForWrite(self) -> None: ... - @typing.overload - def tryLockForRead(self, timeout: QDeadlineTimer = ...) -> bool: ... - @typing.overload - def tryLockForRead(self, timeout: int) -> bool: ... - def lockForRead(self) -> None: ... - - -class QReadLocker(PyQt6.sip.simplewrapper): - - def __init__(self, areadWriteLock: typing.Optional[QReadWriteLock]) -> None: ... - - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - def readWriteLock(self) -> typing.Optional[QReadWriteLock]: ... - def relock(self) -> None: ... - def unlock(self) -> None: ... - - -class QWriteLocker(PyQt6.sip.simplewrapper): - - def __init__(self, areadWriteLock: typing.Optional[QReadWriteLock]) -> None: ... - - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - def readWriteLock(self) -> typing.Optional[QReadWriteLock]: ... - def relock(self) -> None: ... - def unlock(self) -> None: ... - - -class QRect(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, aleft: int, atop: int, awidth: int, aheight: int) -> None: ... - @typing.overload - def __init__(self, atopLeft: QPoint, abottomRight: QPoint) -> None: ... - @typing.overload - def __init__(self, atopLeft: QPoint, asize: 'QSize') -> None: ... - @typing.overload - def __init__(self, a0: 'QRect') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, margins: QMargins) -> 'QRect': ... - def __sub__(self, rhs: QMargins) -> 'QRect': ... - def toRectF(self) -> 'QRectF': ... - @staticmethod - def span(p1: QPoint, p2: QPoint) -> 'QRect': ... - def transposed(self) -> 'QRect': ... - def __isub__(self, margins: QMargins) -> 'QRect': ... - def __iadd__(self, margins: QMargins) -> 'QRect': ... - def marginsRemoved(self, margins: QMargins) -> 'QRect': ... - def marginsAdded(self, margins: QMargins) -> 'QRect': ... - def united(self, r: 'QRect') -> 'QRect': ... - def intersected(self, other: 'QRect') -> 'QRect': ... - def __iand__(self, r: 'QRect') -> 'QRect': ... - def __ior__(self, r: 'QRect') -> 'QRect': ... - def setSize(self, s: 'QSize') -> None: ... - def setHeight(self, h: int) -> None: ... - def setWidth(self, w: int) -> None: ... - def adjust(self, dx1: int, dy1: int, dx2: int, dy2: int) -> None: ... - def adjusted(self, xp1: int, yp1: int, xp2: int, yp2: int) -> 'QRect': ... - def setCoords(self, xp1: int, yp1: int, xp2: int, yp2: int) -> None: ... - def getCoords(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def setRect(self, ax: int, ay: int, aw: int, ah: int) -> None: ... - def getRect(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def moveBottomLeft(self, p: QPoint) -> None: ... - def moveTopRight(self, p: QPoint) -> None: ... - def moveBottomRight(self, p: QPoint) -> None: ... - def moveTopLeft(self, p: QPoint) -> None: ... - def moveBottom(self, pos: int) -> None: ... - def moveRight(self, pos: int) -> None: ... - def moveTop(self, pos: int) -> None: ... - def moveLeft(self, pos: int) -> None: ... - @typing.overload - def moveTo(self, ax: int, ay: int) -> None: ... - @typing.overload - def moveTo(self, p: QPoint) -> None: ... - @typing.overload - def translated(self, dx: int, dy: int) -> 'QRect': ... - @typing.overload - def translated(self, p: QPoint) -> 'QRect': ... - @typing.overload - def translate(self, dx: int, dy: int) -> None: ... - @typing.overload - def translate(self, p: QPoint) -> None: ... - def size(self) -> 'QSize': ... - def height(self) -> int: ... - def width(self) -> int: ... - def center(self) -> QPoint: ... - def bottomLeft(self) -> QPoint: ... - def topRight(self) -> QPoint: ... - def bottomRight(self) -> QPoint: ... - def topLeft(self) -> QPoint: ... - def setY(self, ay: int) -> None: ... - def setX(self, ax: int) -> None: ... - def setBottomLeft(self, p: QPoint) -> None: ... - def setTopRight(self, p: QPoint) -> None: ... - def setBottomRight(self, p: QPoint) -> None: ... - def setTopLeft(self, p: QPoint) -> None: ... - def setBottom(self, pos: int) -> None: ... - def setRight(self, pos: int) -> None: ... - def setTop(self, pos: int) -> None: ... - def setLeft(self, pos: int) -> None: ... - def y(self) -> int: ... - def x(self) -> int: ... - def bottom(self) -> int: ... - def right(self) -> int: ... - def top(self) -> int: ... - def left(self) -> int: ... - def __hash__(self) -> int: ... - def __bool__(self) -> int: ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - def intersects(self, r: 'QRect') -> bool: ... - @typing.overload - def __contains__(self, p: QPoint) -> int: ... - @typing.overload - def __contains__(self, r: 'QRect') -> int: ... - @typing.overload - def contains(self, point: QPoint, proper: bool = ...) -> bool: ... - @typing.overload - def contains(self, rectangle: 'QRect', proper: bool = ...) -> bool: ... - @typing.overload - def contains(self, ax: int, ay: int, aproper: bool) -> bool: ... - @typing.overload - def contains(self, ax: int, ay: int) -> bool: ... - def __and__(self, r: 'QRect') -> 'QRect': ... - def __or__(self, r: 'QRect') -> 'QRect': ... - def moveCenter(self, p: QPoint) -> None: ... - def normalized(self) -> 'QRect': ... - - -class QRectF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, atopLeft: QPointF, asize: 'QSizeF') -> None: ... - @typing.overload - def __init__(self, atopLeft: QPointF, abottomRight: QPointF) -> None: ... - @typing.overload - def __init__(self, aleft: float, atop: float, awidth: float, aheight: float) -> None: ... - @typing.overload - def __init__(self, r: QRect) -> None: ... - @typing.overload - def __init__(self, a0: 'QRectF') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, rhs: QMarginsF) -> 'QRectF': ... - def __sub__(self, rhs: QMarginsF) -> 'QRectF': ... - def transposed(self) -> 'QRectF': ... - def __isub__(self, margins: QMarginsF) -> 'QRectF': ... - def __iadd__(self, margins: QMarginsF) -> 'QRectF': ... - def marginsRemoved(self, margins: QMarginsF) -> 'QRectF': ... - def marginsAdded(self, margins: QMarginsF) -> 'QRectF': ... - def toRect(self) -> QRect: ... - def toAlignedRect(self) -> QRect: ... - def united(self, r: 'QRectF') -> 'QRectF': ... - def intersected(self, r: 'QRectF') -> 'QRectF': ... - def __iand__(self, r: 'QRectF') -> 'QRectF': ... - def __ior__(self, r: 'QRectF') -> 'QRectF': ... - def setSize(self, s: 'QSizeF') -> None: ... - def setHeight(self, ah: float) -> None: ... - def setWidth(self, aw: float) -> None: ... - def adjusted(self, xp1: float, yp1: float, xp2: float, yp2: float) -> 'QRectF': ... - def adjust(self, xp1: float, yp1: float, xp2: float, yp2: float) -> None: ... - def setCoords(self, xp1: float, yp1: float, xp2: float, yp2: float) -> None: ... - def getCoords(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def setRect(self, ax: float, ay: float, aaw: float, aah: float) -> None: ... - def getRect(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - @typing.overload - def translated(self, dx: float, dy: float) -> 'QRectF': ... - @typing.overload - def translated(self, p: QPointF) -> 'QRectF': ... - @typing.overload - def moveTo(self, ax: float, ay: float) -> None: ... - @typing.overload - def moveTo(self, p: QPointF) -> None: ... - @typing.overload - def translate(self, dx: float, dy: float) -> None: ... - @typing.overload - def translate(self, p: QPointF) -> None: ... - def size(self) -> 'QSizeF': ... - def height(self) -> float: ... - def width(self) -> float: ... - def moveCenter(self, p: QPointF) -> None: ... - def moveBottomRight(self, p: QPointF) -> None: ... - def moveBottomLeft(self, p: QPointF) -> None: ... - def moveTopRight(self, p: QPointF) -> None: ... - def moveTopLeft(self, p: QPointF) -> None: ... - def moveBottom(self, pos: float) -> None: ... - def moveRight(self, pos: float) -> None: ... - def moveTop(self, pos: float) -> None: ... - def moveLeft(self, pos: float) -> None: ... - def center(self) -> QPointF: ... - def setBottomRight(self, p: QPointF) -> None: ... - def setBottomLeft(self, p: QPointF) -> None: ... - def setTopRight(self, p: QPointF) -> None: ... - def setTopLeft(self, p: QPointF) -> None: ... - def setBottom(self, pos: float) -> None: ... - def setTop(self, pos: float) -> None: ... - def setRight(self, pos: float) -> None: ... - def setLeft(self, pos: float) -> None: ... - def y(self) -> float: ... - def x(self) -> float: ... - def __bool__(self) -> int: ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - def isNull(self) -> bool: ... - def intersects(self, r: 'QRectF') -> bool: ... - @typing.overload - def __contains__(self, p: QPointF) -> int: ... - @typing.overload - def __contains__(self, r: 'QRectF') -> int: ... - @typing.overload - def contains(self, p: QPointF) -> bool: ... - @typing.overload - def contains(self, r: 'QRectF') -> bool: ... - @typing.overload - def contains(self, ax: float, ay: float) -> bool: ... - def __and__(self, r: 'QRectF') -> 'QRectF': ... - def __or__(self, r: 'QRectF') -> 'QRectF': ... - def bottomLeft(self) -> QPointF: ... - def topRight(self) -> QPointF: ... - def bottomRight(self) -> QPointF: ... - def topLeft(self) -> QPointF: ... - def setY(self, pos: float) -> None: ... - def setX(self, pos: float) -> None: ... - def bottom(self) -> float: ... - def right(self) -> float: ... - def top(self) -> float: ... - def left(self) -> float: ... - def normalized(self) -> 'QRectF': ... - def __repr__(self) -> str: ... - - -class QRegularExpression(PyQt6.sip.simplewrapper): - - class WildcardConversionOption(enum.Flag): - DefaultWildcardConversion = ... # type: QRegularExpression.WildcardConversionOption - UnanchoredWildcardConversion = ... # type: QRegularExpression.WildcardConversionOption - NonPathWildcardConversion = ... # type: QRegularExpression.WildcardConversionOption - - class MatchOption(enum.Flag): - NoMatchOption = ... # type: QRegularExpression.MatchOption - AnchorAtOffsetMatchOption = ... # type: QRegularExpression.MatchOption - DontCheckSubjectStringMatchOption = ... # type: QRegularExpression.MatchOption - - class MatchType(enum.Enum): - NormalMatch = ... # type: QRegularExpression.MatchType - PartialPreferCompleteMatch = ... # type: QRegularExpression.MatchType - PartialPreferFirstMatch = ... # type: QRegularExpression.MatchType - NoMatch = ... # type: QRegularExpression.MatchType - - class PatternOption(enum.Flag): - NoPatternOption = ... # type: QRegularExpression.PatternOption - CaseInsensitiveOption = ... # type: QRegularExpression.PatternOption - DotMatchesEverythingOption = ... # type: QRegularExpression.PatternOption - MultilineOption = ... # type: QRegularExpression.PatternOption - ExtendedPatternSyntaxOption = ... # type: QRegularExpression.PatternOption - InvertedGreedinessOption = ... # type: QRegularExpression.PatternOption - DontCaptureOption = ... # type: QRegularExpression.PatternOption - UseUnicodePropertiesOption = ... # type: QRegularExpression.PatternOption - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pattern: typing.Optional[str], options: 'QRegularExpression.PatternOption' = ...) -> None: ... - @typing.overload - def __init__(self, re: 'QRegularExpression') -> None: ... - - @staticmethod - def fromWildcard(pattern: str, cs: Qt.CaseSensitivity = ..., options: 'QRegularExpression.WildcardConversionOption' = ...) -> 'QRegularExpression': ... - @staticmethod - def anchoredPattern(expression: typing.Optional[str]) -> str: ... - @staticmethod - def wildcardToRegularExpression(str: str, options: 'QRegularExpression.WildcardConversionOption' = ...) -> str: ... - def __hash__(self) -> int: ... - def optimize(self) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def namedCaptureGroups(self) -> typing.List[str]: ... - @staticmethod - def escape(str: typing.Optional[str]) -> str: ... - def globalMatchView(self, subjectView: str, offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: 'QRegularExpression.MatchOption' = ...) -> 'QRegularExpressionMatchIterator': ... - def globalMatch(self, subject: typing.Optional[str], offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: 'QRegularExpression.MatchOption' = ...) -> 'QRegularExpressionMatchIterator': ... - def matchView(self, subjectView: str, offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: 'QRegularExpression.MatchOption' = ...) -> 'QRegularExpressionMatch': ... - def match(self, subject: typing.Optional[str], offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: 'QRegularExpression.MatchOption' = ...) -> 'QRegularExpressionMatch': ... - def captureCount(self) -> int: ... - def errorString(self) -> str: ... - def patternErrorOffset(self) -> int: ... - def isValid(self) -> bool: ... - def setPattern(self, pattern: typing.Optional[str]) -> None: ... - def pattern(self) -> str: ... - def swap(self, re: 'QRegularExpression') -> None: ... - def __repr__(self) -> str: ... - def setPatternOptions(self, options: 'QRegularExpression.PatternOption') -> None: ... - def patternOptions(self) -> 'QRegularExpression.PatternOption': ... - - -class QRegularExpressionMatch(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, match: 'QRegularExpressionMatch') -> None: ... - - @typing.overload - def hasCaptured(self, nth: int) -> bool: ... - @typing.overload - def hasCaptured(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def capturedEnd(self, name: str) -> int: ... - @typing.overload - def capturedEnd(self, nth: int = ...) -> int: ... - @typing.overload - def capturedLength(self, name: str) -> int: ... - @typing.overload - def capturedLength(self, nth: int = ...) -> int: ... - @typing.overload - def capturedStart(self, name: str) -> int: ... - @typing.overload - def capturedStart(self, nth: int = ...) -> int: ... - def capturedTexts(self) -> typing.List[str]: ... - @typing.overload - def captured(self, nth: int = ...) -> str: ... - @typing.overload - def captured(self, name: typing.Optional[str]) -> str: ... - def lastCapturedIndex(self) -> int: ... - def isValid(self) -> bool: ... - def hasPartialMatch(self) -> bool: ... - def hasMatch(self) -> bool: ... - def matchOptions(self) -> QRegularExpression.MatchOption: ... - def matchType(self) -> QRegularExpression.MatchType: ... - def regularExpression(self) -> QRegularExpression: ... - def swap(self, match: 'QRegularExpressionMatch') -> None: ... - - -class QRegularExpressionMatchIterator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, iterator: 'QRegularExpressionMatchIterator') -> None: ... - - def matchOptions(self) -> QRegularExpression.MatchOption: ... - def matchType(self) -> QRegularExpression.MatchType: ... - def regularExpression(self) -> QRegularExpression: ... - def peekNext(self) -> QRegularExpressionMatch: ... - def next(self) -> QRegularExpressionMatch: ... - def hasNext(self) -> bool: ... - def isValid(self) -> bool: ... - def swap(self, iterator: 'QRegularExpressionMatchIterator') -> None: ... - - -class QResource(PyQt6.sip.simplewrapper): - - class Compression(enum.Enum): - NoCompression = ... # type: QResource.Compression - ZlibCompression = ... # type: QResource.Compression - ZstdCompression = ... # type: QResource.Compression - - def __init__(self, fileName: typing.Optional[str] = ..., locale: QLocale = ...) -> None: ... - - def uncompressedData(self) -> QByteArray: ... - def uncompressedSize(self) -> int: ... - def compressionAlgorithm(self) -> 'QResource.Compression': ... - def lastModified(self) -> QDateTime: ... - def isFile(self) -> bool: ... - def isDir(self) -> bool: ... - def children(self) -> typing.List[str]: ... - @staticmethod - def unregisterResourceData(rccData: typing.Optional[bytes], mapRoot: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def unregisterResource(rccFileName: typing.Optional[str], mapRoot: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def registerResourceData(rccData: typing.Optional[bytes], mapRoot: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def registerResource(rccFileName: typing.Optional[str], mapRoot: typing.Optional[str] = ...) -> bool: ... - def size(self) -> int: ... - def setLocale(self, locale: QLocale) -> None: ... - def setFileName(self, file: typing.Optional[str]) -> None: ... - def locale(self) -> QLocale: ... - def isValid(self) -> bool: ... - def fileName(self) -> str: ... - def data(self) -> bytes: ... - def absoluteFilePath(self) -> str: ... - - -class QRunnable(PyQt6.sip.wrapper): - - def __init__(self) -> None: ... - - @staticmethod - def create(functionToRun: typing.Callable[[], None]) -> typing.Optional['QRunnable']: ... - def setAutoDelete(self, _autoDelete: bool) -> None: ... - def autoDelete(self) -> bool: ... - def run(self) -> None: ... - - -class QSaveFile(QFileDevice): - - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... - - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def directWriteFallback(self) -> bool: ... - def setDirectWriteFallback(self, enabled: bool) -> None: ... - def cancelWriting(self) -> None: ... - def commit(self) -> bool: ... - def open(self, flags: QIODeviceBase.OpenModeFlag) -> bool: ... - def setFileName(self, name: typing.Optional[str]) -> None: ... - def fileName(self) -> str: ... - - -class QSemaphore(PyQt6.sip.simplewrapper): - - def __init__(self, n: int = ...) -> None: ... - - def available(self) -> int: ... - def release(self, n: int = ...) -> None: ... - @typing.overload - def tryAcquire(self, n: int = ...) -> bool: ... - @typing.overload - def tryAcquire(self, n: int, timeout: QDeadlineTimer) -> bool: ... - @typing.overload - def tryAcquire(self, n: int, timeout: int) -> bool: ... - def acquire(self, n: int = ...) -> None: ... - - -class QSemaphoreReleaser(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, sem: typing.Optional[QSemaphore], n: int = ...) -> None: ... - - def cancel(self) -> typing.Optional[QSemaphore]: ... - def semaphore(self) -> typing.Optional[QSemaphore]: ... - def swap(self, other: 'QSemaphoreReleaser') -> None: ... - - -class QSequentialAnimationGroup(QAnimationGroup): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def updateDirection(self, direction: QAbstractAnimation.Direction) -> None: ... - def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... - def updateCurrentTime(self, a0: int) -> None: ... - def event(self, event: typing.Optional[QEvent]) -> bool: ... - currentAnimationChanged: typing.ClassVar[pyqtSignal] - def duration(self) -> int: ... - def currentAnimation(self) -> typing.Optional[QAbstractAnimation]: ... - def insertPause(self, index: int, msecs: int) -> typing.Optional[QPauseAnimation]: ... - def addPause(self, msecs: int) -> typing.Optional[QPauseAnimation]: ... - - -class QSettings(QObject): - - class Scope(enum.Enum): - UserScope = ... # type: QSettings.Scope - SystemScope = ... # type: QSettings.Scope - - class Format(enum.Enum): - NativeFormat = ... # type: QSettings.Format - IniFormat = ... # type: QSettings.Format - InvalidFormat = ... # type: QSettings.Format - - class Status(enum.Enum): - NoError = ... # type: QSettings.Status - AccessError = ... # type: QSettings.Status - FormatError = ... # type: QSettings.Status - - @typing.overload - def __init__(self, organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, scope: 'QSettings.Scope', organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, format: 'QSettings.Format', scope: 'QSettings.Scope', organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: 'QSettings.Format', parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, scope: 'QSettings.Scope', parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def event(self, event: typing.Optional[QEvent]) -> bool: ... - def setAtomicSyncRequired(self, enable: bool) -> None: ... - def isAtomicSyncRequired(self) -> bool: ... - @staticmethod - def defaultFormat() -> 'QSettings.Format': ... - @staticmethod - def setDefaultFormat(format: 'QSettings.Format') -> None: ... - def applicationName(self) -> str: ... - def organizationName(self) -> str: ... - def scope(self) -> 'QSettings.Scope': ... - def format(self) -> 'QSettings.Format': ... - @staticmethod - def setPath(format: 'QSettings.Format', scope: 'QSettings.Scope', path: typing.Optional[str]) -> None: ... - def fileName(self) -> str: ... - def fallbacksEnabled(self) -> bool: ... - def setFallbacksEnabled(self, b: bool) -> None: ... - def contains(self, key: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - def remove(self, key: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def value(self, key: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], defaultValue: typing.Any = ..., type: type = ...) -> typing.Any: ... - def setValue(self, key: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], value: typing.Any) -> None: ... - def isWritable(self) -> bool: ... - def childGroups(self) -> typing.List[str]: ... - def childKeys(self) -> typing.List[str]: ... - def allKeys(self) -> typing.List[str]: ... - def setArrayIndex(self, i: int) -> None: ... - def endArray(self) -> None: ... - def beginWriteArray(self, prefix: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], size: int = ...) -> None: ... - def beginReadArray(self, prefix: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> int: ... - def group(self) -> str: ... - def endGroup(self) -> None: ... - def beginGroup(self, prefix: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def status(self) -> 'QSettings.Status': ... - def sync(self) -> None: ... - def clear(self) -> None: ... - - -class QSharedMemory(QObject): - - class SharedMemoryError(enum.Enum): - NoError = ... # type: QSharedMemory.SharedMemoryError - PermissionDenied = ... # type: QSharedMemory.SharedMemoryError - InvalidSize = ... # type: QSharedMemory.SharedMemoryError - KeyError = ... # type: QSharedMemory.SharedMemoryError - AlreadyExists = ... # type: QSharedMemory.SharedMemoryError - NotFound = ... # type: QSharedMemory.SharedMemoryError - LockError = ... # type: QSharedMemory.SharedMemoryError - OutOfResources = ... # type: QSharedMemory.SharedMemoryError - UnknownError = ... # type: QSharedMemory.SharedMemoryError - - class AccessMode(enum.Enum): - ReadOnly = ... # type: QSharedMemory.AccessMode - ReadWrite = ... # type: QSharedMemory.AccessMode - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, key: 'QNativeIpcKey', parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, key: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... - - @staticmethod - def legacyNativeKey(key: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> 'QNativeIpcKey': ... - @staticmethod - def platformSafeKey(key: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> 'QNativeIpcKey': ... - @staticmethod - def isKeyTypeSupported(type: 'QNativeIpcKey.Type') -> bool: ... - def nativeIpcKey(self) -> 'QNativeIpcKey': ... - def nativeKey(self) -> str: ... - @typing.overload - def setNativeKey(self, key: 'QNativeIpcKey') -> None: ... - @typing.overload - def setNativeKey(self, key: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> None: ... - def errorString(self) -> str: ... - def error(self) -> 'QSharedMemory.SharedMemoryError': ... - def unlock(self) -> bool: ... - def lock(self) -> bool: ... - def constData(self) -> PyQt6.sip.voidptr: ... - def data(self) -> PyQt6.sip.voidptr: ... - def detach(self) -> bool: ... - def isAttached(self) -> bool: ... - def attach(self, mode: 'QSharedMemory.AccessMode' = ...) -> bool: ... - def size(self) -> int: ... - def create(self, size: int, mode: 'QSharedMemory.AccessMode' = ...) -> bool: ... - def key(self) -> str: ... - def setKey(self, key: typing.Optional[str]) -> None: ... - - -class QSignalMapper(QObject): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - @typing.overload - def map(self) -> None: ... - @typing.overload - def map(self, sender: typing.Optional[QObject]) -> None: ... - mappedObject: typing.ClassVar[pyqtSignal] - mappedString: typing.ClassVar[pyqtSignal] - mappedInt: typing.ClassVar[pyqtSignal] - @typing.overload - def mapping(self, id: int) -> typing.Optional[QObject]: ... - @typing.overload - def mapping(self, text: typing.Optional[str]) -> typing.Optional[QObject]: ... - @typing.overload - def mapping(self, object: typing.Optional[QObject]) -> typing.Optional[QObject]: ... - def removeMappings(self, sender: typing.Optional[QObject]) -> None: ... - @typing.overload - def setMapping(self, sender: typing.Optional[QObject], id: int) -> None: ... - @typing.overload - def setMapping(self, sender: typing.Optional[QObject], text: typing.Optional[str]) -> None: ... - @typing.overload - def setMapping(self, sender: typing.Optional[QObject], object: typing.Optional[QObject]) -> None: ... - - -class QSize(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, w: int, h: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QSize') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, s2: 'QSize') -> 'QSize': ... - def __sub__(self, s2: 'QSize') -> 'QSize': ... - def __mul__(self, c: float) -> 'QSize': ... - def __rmul__(self, c: float) -> 'QSize': ... - def __truediv__(self, c: float) -> 'QSize': ... - def toSizeF(self) -> 'QSizeF': ... - def shrunkBy(self, m: QMargins) -> 'QSize': ... - def grownBy(self, m: QMargins) -> 'QSize': ... - def transposed(self) -> 'QSize': ... - @typing.overload - def scaled(self, s: 'QSize', mode: Qt.AspectRatioMode) -> 'QSize': ... - @typing.overload - def scaled(self, w: int, h: int, mode: Qt.AspectRatioMode) -> 'QSize': ... - def boundedTo(self, otherSize: 'QSize') -> 'QSize': ... - def expandedTo(self, otherSize: 'QSize') -> 'QSize': ... - def __itruediv__(self, c: float) -> 'QSize': ... - def __imul__(self, c: float) -> 'QSize': ... - def __isub__(self, s: 'QSize') -> 'QSize': ... - def __iadd__(self, s: 'QSize') -> 'QSize': ... - def setHeight(self, h: int) -> None: ... - def setWidth(self, w: int) -> None: ... - def height(self) -> int: ... - def width(self) -> int: ... - def __hash__(self) -> int: ... - def __bool__(self) -> int: ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - @typing.overload - def scale(self, s: 'QSize', mode: Qt.AspectRatioMode) -> None: ... - @typing.overload - def scale(self, w: int, h: int, mode: Qt.AspectRatioMode) -> None: ... - def transpose(self) -> None: ... - - -class QSizeF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, sz: QSize) -> None: ... - @typing.overload - def __init__(self, w: float, h: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QSizeF') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, s2: 'QSizeF') -> 'QSizeF': ... - def __sub__(self, s2: 'QSizeF') -> 'QSizeF': ... - def __mul__(self, c: float) -> 'QSizeF': ... - def __rmul__(self, c: float) -> 'QSizeF': ... - def __truediv__(self, c: float) -> 'QSizeF': ... - def shrunkBy(self, m: QMarginsF) -> 'QSizeF': ... - def grownBy(self, m: QMarginsF) -> 'QSizeF': ... - def transposed(self) -> 'QSizeF': ... - @typing.overload - def scaled(self, s: 'QSizeF', mode: Qt.AspectRatioMode) -> 'QSizeF': ... - @typing.overload - def scaled(self, w: float, h: float, mode: Qt.AspectRatioMode) -> 'QSizeF': ... - def toSize(self) -> QSize: ... - def boundedTo(self, otherSize: 'QSizeF') -> 'QSizeF': ... - def expandedTo(self, otherSize: 'QSizeF') -> 'QSizeF': ... - def __itruediv__(self, c: float) -> 'QSizeF': ... - def __imul__(self, c: float) -> 'QSizeF': ... - def __isub__(self, s: 'QSizeF') -> 'QSizeF': ... - def __iadd__(self, s: 'QSizeF') -> 'QSizeF': ... - def setHeight(self, h: float) -> None: ... - def setWidth(self, w: float) -> None: ... - def height(self) -> float: ... - def width(self) -> float: ... - def __bool__(self) -> int: ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - @typing.overload - def scale(self, s: 'QSizeF', mode: Qt.AspectRatioMode) -> None: ... - @typing.overload - def scale(self, w: float, h: float, mode: Qt.AspectRatioMode) -> None: ... - def transpose(self) -> None: ... - - -class QSocketNotifier(QObject): - - class Type(enum.Enum): - Read = ... # type: QSocketNotifier.Type - Write = ... # type: QSocketNotifier.Type - Exception = ... # type: QSocketNotifier.Type - - @typing.overload - def __init__(self, a0: 'QSocketNotifier.Type', parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, socket: PyQt6.sip.voidptr, a1: 'QSocketNotifier.Type', parent: typing.Optional[QObject] = ...) -> None: ... - - def event(self, a0: typing.Optional[QEvent]) -> bool: ... - activated: typing.ClassVar[pyqtSignal] - def isValid(self) -> bool: ... - def setSocket(self, socket: PyQt6.sip.voidptr) -> None: ... - def setEnabled(self, a0: bool) -> None: ... - def isEnabled(self) -> bool: ... - def type(self) -> 'QSocketNotifier.Type': ... - def socket(self) -> PyQt6.sip.voidptr: ... - - -class QSortFilterProxyModel(QAbstractProxyModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - autoAcceptChildRowsChanged: typing.ClassVar[pyqtSignal] - def invalidateColumnsFilter(self) -> None: ... - def invalidateRowsFilter(self) -> None: ... - def setAutoAcceptChildRows(self, accept: bool) -> None: ... - def autoAcceptChildRows(self) -> bool: ... - recursiveFilteringEnabledChanged: typing.ClassVar[pyqtSignal] - filterRoleChanged: typing.ClassVar[pyqtSignal] - sortRoleChanged: typing.ClassVar[pyqtSignal] - sortLocaleAwareChanged: typing.ClassVar[pyqtSignal] - sortCaseSensitivityChanged: typing.ClassVar[pyqtSignal] - filterCaseSensitivityChanged: typing.ClassVar[pyqtSignal] - dynamicSortFilterChanged: typing.ClassVar[pyqtSignal] - def invalidateFilter(self) -> None: ... - def setRecursiveFilteringEnabled(self, recursive: bool) -> None: ... - def isRecursiveFilteringEnabled(self) -> bool: ... - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def setSortLocaleAware(self, on: bool) -> None: ... - def isSortLocaleAware(self) -> bool: ... - def supportedDropActions(self) -> Qt.DropAction: ... - def mimeTypes(self) -> typing.List[str]: ... - def setFilterRole(self, role: int) -> None: ... - def filterRole(self) -> int: ... - def sortOrder(self) -> Qt.SortOrder: ... - def sortColumn(self) -> int: ... - def setSortRole(self, role: int) -> None: ... - def sortRole(self) -> int: ... - def setDynamicSortFilter(self, enable: bool) -> None: ... - def dynamicSortFilter(self) -> bool: ... - def setSortCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... - def sortCaseSensitivity(self) -> Qt.CaseSensitivity: ... - def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... - def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: Qt.MatchFlag = ...) -> typing.List[QModelIndex]: ... - def span(self, index: QModelIndex) -> QSize: ... - def buddy(self, index: QModelIndex) -> QModelIndex: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def canFetchMore(self, parent: QModelIndex) -> bool: ... - def fetchMore(self, parent: QModelIndex) -> None: ... - def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def dropMimeData(self, data: typing.Optional[QMimeData], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... - def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional[QMimeData]: ... - def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... - def hasChildren(self, parent: QModelIndex = ...) -> bool: ... - def columnCount(self, parent: QModelIndex = ...) -> int: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - @typing.overload - def parent(self, child: QModelIndex) -> QModelIndex: ... - @typing.overload - def parent(self) -> typing.Optional[QObject]: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - def lessThan(self, left: QModelIndex, right: QModelIndex) -> bool: ... - def filterAcceptsColumn(self, source_column: int, source_parent: QModelIndex) -> bool: ... - def filterAcceptsRow(self, source_row: int, source_parent: QModelIndex) -> bool: ... - def setFilterWildcard(self, pattern: typing.Optional[str]) -> None: ... - @typing.overload - def setFilterRegularExpression(self, regularExpression: QRegularExpression) -> None: ... - @typing.overload - def setFilterRegularExpression(self, pattern: typing.Optional[str]) -> None: ... - def setFilterFixedString(self, pattern: typing.Optional[str]) -> None: ... - def invalidate(self) -> None: ... - def setFilterCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... - def filterCaseSensitivity(self) -> Qt.CaseSensitivity: ... - def setFilterKeyColumn(self, column: int) -> None: ... - def filterKeyColumn(self) -> int: ... - def filterRegularExpression(self) -> QRegularExpression: ... - def mapSelectionFromSource(self, sourceSelection: QItemSelection) -> QItemSelection: ... - def mapSelectionToSource(self, proxySelection: QItemSelection) -> QItemSelection: ... - def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... - def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... - def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - - -class QStandardPaths(PyQt6.sip.simplewrapper): - - class LocateOption(enum.Flag): - LocateFile = ... # type: QStandardPaths.LocateOption - LocateDirectory = ... # type: QStandardPaths.LocateOption - - class StandardLocation(enum.Enum): - DesktopLocation = ... # type: QStandardPaths.StandardLocation - DocumentsLocation = ... # type: QStandardPaths.StandardLocation - FontsLocation = ... # type: QStandardPaths.StandardLocation - ApplicationsLocation = ... # type: QStandardPaths.StandardLocation - MusicLocation = ... # type: QStandardPaths.StandardLocation - MoviesLocation = ... # type: QStandardPaths.StandardLocation - PicturesLocation = ... # type: QStandardPaths.StandardLocation - TempLocation = ... # type: QStandardPaths.StandardLocation - HomeLocation = ... # type: QStandardPaths.StandardLocation - CacheLocation = ... # type: QStandardPaths.StandardLocation - GenericDataLocation = ... # type: QStandardPaths.StandardLocation - RuntimeLocation = ... # type: QStandardPaths.StandardLocation - ConfigLocation = ... # type: QStandardPaths.StandardLocation - DownloadLocation = ... # type: QStandardPaths.StandardLocation - GenericCacheLocation = ... # type: QStandardPaths.StandardLocation - GenericConfigLocation = ... # type: QStandardPaths.StandardLocation - AppDataLocation = ... # type: QStandardPaths.StandardLocation - AppLocalDataLocation = ... # type: QStandardPaths.StandardLocation - AppConfigLocation = ... # type: QStandardPaths.StandardLocation - PublicShareLocation = ... # type: QStandardPaths.StandardLocation - TemplatesLocation = ... # type: QStandardPaths.StandardLocation - StateLocation = ... # type: QStandardPaths.StandardLocation - GenericStateLocation = ... # type: QStandardPaths.StandardLocation - - def __init__(self, a0: 'QStandardPaths') -> None: ... - - @staticmethod - def setTestModeEnabled(testMode: bool) -> None: ... - @staticmethod - def findExecutable(executableName: typing.Optional[str], paths: typing.Iterable[typing.Optional[str]] = ...) -> str: ... - @staticmethod - def displayName(type: 'QStandardPaths.StandardLocation') -> str: ... - @staticmethod - def locateAll(type: 'QStandardPaths.StandardLocation', fileName: typing.Optional[str], options: 'QStandardPaths.LocateOption' = ...) -> typing.List[str]: ... - @staticmethod - def locate(type: 'QStandardPaths.StandardLocation', fileName: typing.Optional[str], options: 'QStandardPaths.LocateOption' = ...) -> str: ... - @staticmethod - def standardLocations(type: 'QStandardPaths.StandardLocation') -> typing.List[str]: ... - @staticmethod - def writableLocation(type: 'QStandardPaths.StandardLocation') -> str: ... - - -class QStorageInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, path: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, dir: QDir) -> None: ... - @typing.overload - def __init__(self, other: 'QStorageInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def subvolume(self) -> QByteArray: ... - def blockSize(self) -> int: ... - def isRoot(self) -> bool: ... - @staticmethod - def root() -> 'QStorageInfo': ... - @staticmethod - def mountedVolumes() -> typing.List['QStorageInfo']: ... - def refresh(self) -> None: ... - def isValid(self) -> bool: ... - def isReady(self) -> bool: ... - def isReadOnly(self) -> bool: ... - def bytesAvailable(self) -> int: ... - def bytesFree(self) -> int: ... - def bytesTotal(self) -> int: ... - def displayName(self) -> str: ... - def name(self) -> str: ... - def fileSystemType(self) -> QByteArray: ... - def device(self) -> QByteArray: ... - def rootPath(self) -> str: ... - def setPath(self, path: typing.Optional[str]) -> None: ... - def swap(self, other: 'QStorageInfo') -> None: ... - - -class QStringConverterBase(PyQt6.sip.simplewrapper): - - class Flag(enum.Flag): - Default = ... # type: QStringConverterBase.Flag - Stateless = ... # type: QStringConverterBase.Flag - ConvertInvalidToNull = ... # type: QStringConverterBase.Flag - WriteBom = ... # type: QStringConverterBase.Flag - ConvertInitialBom = ... # type: QStringConverterBase.Flag - UsesIcu = ... # type: QStringConverterBase.Flag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QStringConverterBase') -> None: ... - - -class QStringConverter(QStringConverterBase): - - class Encoding(enum.Enum): - Utf8 = ... # type: QStringConverter.Encoding - Utf16 = ... # type: QStringConverter.Encoding - Utf16LE = ... # type: QStringConverter.Encoding - Utf16BE = ... # type: QStringConverter.Encoding - Utf32 = ... # type: QStringConverter.Encoding - Utf32LE = ... # type: QStringConverter.Encoding - Utf32BE = ... # type: QStringConverter.Encoding - Latin1 = ... # type: QStringConverter.Encoding - System = ... # type: QStringConverter.Encoding - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, encoding: 'QStringConverter.Encoding', f: QStringConverterBase.Flag) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], f: QStringConverterBase.Flag) -> None: ... - - @staticmethod - def availableCodecs() -> typing.List[str]: ... - @staticmethod - def nameForEncoding(e: 'QStringConverter.Encoding') -> typing.Optional[str]: ... - def name(self) -> typing.Optional[str]: ... - def hasError(self) -> bool: ... - def resetState(self) -> None: ... - def isValid(self) -> bool: ... - - -class QStringEncoder(QStringConverter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, encoding: QStringConverter.Encoding, flags: QStringConverterBase.Flag = ...) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], flags: QStringConverterBase.Flag = ...) -> None: ... - - def encode(self, in_: str) -> QByteArray: ... - def __call__(self, in_: str) -> QByteArray: ... - - -class QStringDecoder(QStringConverter): - - @typing.overload - def __init__(self, encoding: QStringConverter.Encoding, flags: QStringConverterBase.Flag = ...) -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], flags: QStringConverterBase.Flag = ...) -> None: ... - - @staticmethod - def decoderForHtml(data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QStringDecoder': ... - def decode(self, ba: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> str: ... - def __call__(self, ba: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> str: ... - - -class QStringListModel(QAbstractListModel): - - @typing.overload - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - @typing.overload - def __init__(self, strings: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QObject] = ...) -> None: ... - - def clearItemData(self, index: QModelIndex) -> bool: ... - def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... - def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... - def supportedDropActions(self) -> Qt.DropAction: ... - def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... - def setStringList(self, strings: typing.Iterable[typing.Optional[str]]) -> None: ... - def stringList(self) -> typing.List[str]: ... - def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def flags(self, index: QModelIndex) -> Qt.ItemFlag: ... - def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - - -class QSysInfo(PyQt6.sip.simplewrapper): - - class Endian(enum.Enum): - BigEndian = ... # type: QSysInfo.Endian - LittleEndian = ... # type: QSysInfo.Endian - ByteOrder = ... # type: QSysInfo.Endian - - class Sizes(enum.Enum): - WordSize = ... # type: QSysInfo.Sizes - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSysInfo') -> None: ... - - @staticmethod - def bootUniqueId() -> QByteArray: ... - @staticmethod - def machineUniqueId() -> QByteArray: ... - @staticmethod - def machineHostName() -> str: ... - @staticmethod - def prettyProductName() -> str: ... - @staticmethod - def productVersion() -> str: ... - @staticmethod - def productType() -> str: ... - @staticmethod - def kernelVersion() -> str: ... - @staticmethod - def kernelType() -> str: ... - @staticmethod - def buildAbi() -> str: ... - @staticmethod - def currentCpuArchitecture() -> str: ... - @staticmethod - def buildCpuArchitecture() -> str: ... - - -class QSystemSemaphore(PyQt6.sip.simplewrapper): - - class SystemSemaphoreError(enum.Enum): - NoError = ... # type: QSystemSemaphore.SystemSemaphoreError - PermissionDenied = ... # type: QSystemSemaphore.SystemSemaphoreError - KeyError = ... # type: QSystemSemaphore.SystemSemaphoreError - AlreadyExists = ... # type: QSystemSemaphore.SystemSemaphoreError - NotFound = ... # type: QSystemSemaphore.SystemSemaphoreError - OutOfResources = ... # type: QSystemSemaphore.SystemSemaphoreError - UnknownError = ... # type: QSystemSemaphore.SystemSemaphoreError - - class AccessMode(enum.Enum): - Open = ... # type: QSystemSemaphore.AccessMode - Create = ... # type: QSystemSemaphore.AccessMode - - @typing.overload - def __init__(self, key: 'QNativeIpcKey', initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... - @typing.overload - def __init__(self, key: typing.Optional[str], initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... - - @staticmethod - def legacyNativeKey(key: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> 'QNativeIpcKey': ... - @staticmethod - def platformSafeKey(key: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> 'QNativeIpcKey': ... - @staticmethod - def isKeyTypeSupported(type: 'QNativeIpcKey.Type') -> bool: ... - def nativeIpcKey(self) -> 'QNativeIpcKey': ... - @typing.overload - def setNativeKey(self, key: 'QNativeIpcKey', initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... - @typing.overload - def setNativeKey(self, key: typing.Optional[str], initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ..., type: 'QNativeIpcKey.Type' = ...) -> None: ... - def errorString(self) -> str: ... - def error(self) -> 'QSystemSemaphore.SystemSemaphoreError': ... - def release(self, n: int = ...) -> bool: ... - def acquire(self) -> bool: ... - def key(self) -> str: ... - def setKey(self, key: typing.Optional[str], initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... - - -class QTemporaryDir(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, templateName: typing.Optional[str]) -> None: ... - - def swap(self, other: 'QTemporaryDir') -> None: ... - def filePath(self, fileName: typing.Optional[str]) -> str: ... - def errorString(self) -> str: ... - def path(self) -> str: ... - def remove(self) -> bool: ... - def setAutoRemove(self, b: bool) -> None: ... - def autoRemove(self) -> bool: ... - def isValid(self) -> bool: ... - - -class QTemporaryFile(QFile): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, templateName: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QObject]) -> None: ... - @typing.overload - def __init__(self, templateName: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... - - def rename(self, newName: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def createNativeFile(fileName: typing.Optional[str]) -> typing.Optional['QTemporaryFile']: ... - @typing.overload - @staticmethod - def createNativeFile(file: QFile) -> typing.Optional['QTemporaryFile']: ... - def setFileTemplate(self, name: typing.Optional[str]) -> None: ... - def fileTemplate(self) -> str: ... - def fileName(self) -> str: ... - @typing.overload - def open(self) -> bool: ... - @typing.overload - def open(self, flags: QIODeviceBase.OpenModeFlag) -> bool: ... - def setAutoRemove(self, b: bool) -> None: ... - def autoRemove(self) -> bool: ... - - -class QTextBoundaryFinder(PyQt6.sip.simplewrapper): - - class BoundaryType(enum.Enum): - Grapheme = ... # type: QTextBoundaryFinder.BoundaryType - Word = ... # type: QTextBoundaryFinder.BoundaryType - Line = ... # type: QTextBoundaryFinder.BoundaryType - Sentence = ... # type: QTextBoundaryFinder.BoundaryType - - class BoundaryReason(enum.Flag): - NotAtBoundary = ... # type: QTextBoundaryFinder.BoundaryReason - SoftHyphen = ... # type: QTextBoundaryFinder.BoundaryReason - BreakOpportunity = ... # type: QTextBoundaryFinder.BoundaryReason - StartOfItem = ... # type: QTextBoundaryFinder.BoundaryReason - EndOfItem = ... # type: QTextBoundaryFinder.BoundaryReason - MandatoryBreak = ... # type: QTextBoundaryFinder.BoundaryReason - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QTextBoundaryFinder') -> None: ... - @typing.overload - def __init__(self, type: 'QTextBoundaryFinder.BoundaryType', string: typing.Optional[str]) -> None: ... - - def boundaryReasons(self) -> 'QTextBoundaryFinder.BoundaryReason': ... - def isAtBoundary(self) -> bool: ... - def toPreviousBoundary(self) -> int: ... - def toNextBoundary(self) -> int: ... - def setPosition(self, position: int) -> None: ... - def position(self) -> int: ... - def toEnd(self) -> None: ... - def toStart(self) -> None: ... - def string(self) -> str: ... - def type(self) -> 'QTextBoundaryFinder.BoundaryType': ... - def isValid(self) -> bool: ... - - -class QTextStream(QIODeviceBase): - - class NumberFlag(enum.Flag): - ShowBase = ... # type: QTextStream.NumberFlag - ForcePoint = ... # type: QTextStream.NumberFlag - ForceSign = ... # type: QTextStream.NumberFlag - UppercaseBase = ... # type: QTextStream.NumberFlag - UppercaseDigits = ... # type: QTextStream.NumberFlag - - class Status(enum.Enum): - Ok = ... # type: QTextStream.Status - ReadPastEnd = ... # type: QTextStream.Status - ReadCorruptData = ... # type: QTextStream.Status - WriteFailed = ... # type: QTextStream.Status - - class FieldAlignment(enum.Enum): - AlignLeft = ... # type: QTextStream.FieldAlignment - AlignRight = ... # type: QTextStream.FieldAlignment - AlignCenter = ... # type: QTextStream.FieldAlignment - AlignAccountingStyle = ... # type: QTextStream.FieldAlignment - - class RealNumberNotation(enum.Enum): - SmartNotation = ... # type: QTextStream.RealNumberNotation - FixedNotation = ... # type: QTextStream.RealNumberNotation - ScientificNotation = ... # type: QTextStream.RealNumberNotation - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QIODevice]) -> None: ... - @typing.overload - def __init__(self, array: typing.Optional[QByteArray], mode: QIODeviceBase.OpenModeFlag = ...) -> None: ... - - @typing.overload - def __lshift__(self, s: str) -> 'QTextStream': ... - @typing.overload - def __lshift__(self, array: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QTextStream': ... - @typing.overload - def __lshift__(self, f: float) -> 'QTextStream': ... - @typing.overload - def __lshift__(self, i: int) -> 'QTextStream': ... - @typing.overload - def __lshift__(self, m: 'QTextStreamManipulator') -> 'QTextStream': ... - def __rshift__(self, array: QByteArray) -> 'QTextStream': ... - def realNumberPrecision(self) -> int: ... - def setRealNumberPrecision(self, precision: int) -> None: ... - def realNumberNotation(self) -> 'QTextStream.RealNumberNotation': ... - def setRealNumberNotation(self, notation: 'QTextStream.RealNumberNotation') -> None: ... - def integerBase(self) -> int: ... - def setIntegerBase(self, base: int) -> None: ... - def numberFlags(self) -> 'QTextStream.NumberFlag': ... - def setNumberFlags(self, flags: 'QTextStream.NumberFlag') -> None: ... - def fieldWidth(self) -> int: ... - def setFieldWidth(self, width: int) -> None: ... - def padChar(self) -> str: ... - def setPadChar(self, ch: str) -> None: ... - def fieldAlignment(self) -> 'QTextStream.FieldAlignment': ... - def setFieldAlignment(self, alignment: 'QTextStream.FieldAlignment') -> None: ... - def read(self, maxlen: int) -> str: ... - def readAll(self) -> str: ... - def readLine(self, maxLength: int = ...) -> str: ... - def skipWhiteSpace(self) -> None: ... - def pos(self) -> int: ... - def seek(self, pos: int) -> bool: ... - def flush(self) -> None: ... - def reset(self) -> None: ... - def atEnd(self) -> bool: ... - def resetStatus(self) -> None: ... - def setStatus(self, status: 'QTextStream.Status') -> None: ... - def status(self) -> 'QTextStream.Status': ... - def device(self) -> typing.Optional[QIODevice]: ... - def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... - def locale(self) -> QLocale: ... - def setLocale(self, locale: QLocale) -> None: ... - def generateByteOrderMark(self) -> bool: ... - def setGenerateByteOrderMark(self, generate: bool) -> None: ... - def autoDetectUnicode(self) -> bool: ... - def setAutoDetectUnicode(self, enabled: bool) -> None: ... - def encoding(self) -> QStringConverter.Encoding: ... - def setEncoding(self, encoding: QStringConverter.Encoding) -> None: ... - - -class QTextStreamManipulator(PyQt6.sip.simplewrapper): ... - - -class QThread(QObject): - - class Priority(enum.Enum): - IdlePriority = ... # type: QThread.Priority - LowestPriority = ... # type: QThread.Priority - LowPriority = ... # type: QThread.Priority - NormalPriority = ... # type: QThread.Priority - HighPriority = ... # type: QThread.Priority - HighestPriority = ... # type: QThread.Priority - TimeCriticalPriority = ... # type: QThread.Priority - InheritPriority = ... # type: QThread.Priority - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def loopLevel(self) -> int: ... - def isInterruptionRequested(self) -> bool: ... - def requestInterruption(self) -> None: ... - def setEventDispatcher(self, eventDispatcher: typing.Optional[QAbstractEventDispatcher]) -> None: ... - def eventDispatcher(self) -> typing.Optional[QAbstractEventDispatcher]: ... - @staticmethod - def usleep(a0: int) -> None: ... - @staticmethod - def msleep(a0: int) -> None: ... - @staticmethod - def sleep(a0: int) -> None: ... - def event(self, event: typing.Optional[QEvent]) -> bool: ... - @staticmethod - def setTerminationEnabled(enabled: bool = ...) -> None: ... - def exec(self) -> int: ... - def run(self) -> None: ... - finished: typing.ClassVar[pyqtSignal] - started: typing.ClassVar[pyqtSignal] - @typing.overload - def wait(self, deadline: QDeadlineTimer = ...) -> bool: ... - @typing.overload - def wait(self, time: int) -> bool: ... - def quit(self) -> None: ... - def terminate(self) -> None: ... - def start(self, priority: 'QThread.Priority' = ...) -> None: ... - def exit(self, returnCode: int = ...) -> None: ... - def stackSize(self) -> int: ... - def setStackSize(self, stackSize: int) -> None: ... - def priority(self) -> 'QThread.Priority': ... - def setPriority(self, priority: 'QThread.Priority') -> None: ... - def isRunning(self) -> bool: ... - def isFinished(self) -> bool: ... - @staticmethod - def yieldCurrentThread() -> None: ... - @staticmethod - def idealThreadCount() -> int: ... - @staticmethod - def currentThreadId() -> typing.Optional[PyQt6.sip.voidptr]: ... - @staticmethod - def currentThread() -> typing.Optional['QThread']: ... - - -class QThreadPool(QObject): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - @typing.overload - def startOnReservedThread(self, runnable: typing.Optional[QRunnable]) -> None: ... - @typing.overload - def startOnReservedThread(self, functionToRun: typing.Callable[[], None]) -> None: ... - def threadPriority(self) -> QThread.Priority: ... - def setThreadPriority(self, priority: QThread.Priority) -> None: ... - def contains(self, thread: typing.Optional[QThread]) -> bool: ... - def stackSize(self) -> int: ... - def setStackSize(self, stackSize: int) -> None: ... - def clear(self) -> None: ... - def waitForDone(self, msecs: int = ...) -> bool: ... - def releaseThread(self) -> None: ... - def reserveThread(self) -> None: ... - def activeThreadCount(self) -> int: ... - def setMaxThreadCount(self, maxThreadCount: int) -> None: ... - def maxThreadCount(self) -> int: ... - def setExpiryTimeout(self, expiryTimeout: int) -> None: ... - def expiryTimeout(self) -> int: ... - def tryTake(self, runnable: typing.Optional[QRunnable]) -> bool: ... - @typing.overload - def tryStart(self, runnable: typing.Optional[QRunnable]) -> bool: ... - @typing.overload - def tryStart(self, functionToRun: typing.Callable[[], None]) -> bool: ... - @typing.overload - def start(self, runnable: typing.Optional[QRunnable], priority: int = ...) -> None: ... - @typing.overload - def start(self, functionToRun: typing.Callable[[], None], priority: int = ...) -> None: ... - @staticmethod - def globalInstance() -> typing.Optional['QThreadPool']: ... - - -class QTimeLine(QObject): - - class State(enum.Enum): - NotRunning = ... # type: QTimeLine.State - Paused = ... # type: QTimeLine.State - Running = ... # type: QTimeLine.State - - class Direction(enum.Enum): - Forward = ... # type: QTimeLine.Direction - Backward = ... # type: QTimeLine.Direction - - def __init__(self, duration: int = ..., parent: typing.Optional[QObject] = ...) -> None: ... - - def setEasingCurve(self, curve: typing.Union[QEasingCurve, QEasingCurve.Type]) -> None: ... - def easingCurve(self) -> QEasingCurve: ... - def timerEvent(self, event: typing.Optional[QTimerEvent]) -> None: ... - valueChanged: typing.ClassVar[pyqtSignal] - stateChanged: typing.ClassVar[pyqtSignal] - frameChanged: typing.ClassVar[pyqtSignal] - finished: typing.ClassVar[pyqtSignal] - def toggleDirection(self) -> None: ... - def stop(self) -> None: ... - def start(self) -> None: ... - def setPaused(self, paused: bool) -> None: ... - def setCurrentTime(self, msec: int) -> None: ... - def resume(self) -> None: ... - def valueForTime(self, msec: int) -> float: ... - def frameForTime(self, msec: int) -> int: ... - def currentValue(self) -> float: ... - def currentFrame(self) -> int: ... - def currentTime(self) -> int: ... - def setUpdateInterval(self, interval: int) -> None: ... - def updateInterval(self) -> int: ... - def setFrameRange(self, startFrame: int, endFrame: int) -> None: ... - def setEndFrame(self, frame: int) -> None: ... - def endFrame(self) -> int: ... - def setStartFrame(self, frame: int) -> None: ... - def startFrame(self) -> int: ... - def setDuration(self, duration: int) -> None: ... - def duration(self) -> int: ... - def setDirection(self, direction: 'QTimeLine.Direction') -> None: ... - def direction(self) -> 'QTimeLine.Direction': ... - def setLoopCount(self, count: int) -> None: ... - def loopCount(self) -> int: ... - def state(self) -> 'QTimeLine.State': ... - - -class QTimer(QObject): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def remainingTime(self) -> int: ... - def timerType(self) -> Qt.TimerType: ... - def setTimerType(self, atype: Qt.TimerType) -> None: ... - def timerEvent(self, a0: typing.Optional[QTimerEvent]) -> None: ... - timeout: typing.ClassVar[pyqtSignal] - def stop(self) -> None: ... - @typing.overload - def start(self, msec: int) -> None: ... - @typing.overload - def start(self) -> None: ... - @typing.overload - @staticmethod - def singleShot(msec: int, slot: PYQT_SLOT) -> None: ... - @typing.overload - @staticmethod - def singleShot(msec: int, timerType: Qt.TimerType, slot: PYQT_SLOT) -> None: ... - def setSingleShot(self, asingleShot: bool) -> None: ... - def isSingleShot(self) -> bool: ... - def interval(self) -> int: ... - def setInterval(self, msec: int) -> None: ... - def timerId(self) -> int: ... - def isActive(self) -> bool: ... - - -class QTimeZone(PyQt6.sip.simplewrapper): - - class Initialization(enum.Enum): - LocalTime = ... # type: QTimeZone.Initialization - UTC = ... # type: QTimeZone.Initialization - - class NameType(enum.Enum): - DefaultName = ... # type: QTimeZone.NameType - LongName = ... # type: QTimeZone.NameType - ShortName = ... # type: QTimeZone.NameType - OffsetName = ... # type: QTimeZone.NameType - - class TimeType(enum.Enum): - StandardTime = ... # type: QTimeZone.TimeType - DaylightTime = ... # type: QTimeZone.TimeType - GenericTime = ... # type: QTimeZone.TimeType - - class OffsetData(PyQt6.sip.simplewrapper): - - abbreviation = ... # type: typing.Optional[str] - atUtc = ... # type: typing.Union[QDateTime, datetime.datetime] - daylightTimeOffset = ... # type: int - offsetFromUtc = ... # type: int - standardTimeOffset = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTimeZone.OffsetData') -> None: ... - - MaxUtcOffsetSecs = ... # type: int - MinUtcOffsetSecs = ... # type: int - - @typing.overload - def __init__(self, spec: 'QTimeZone.Initialization') -> None: ... - @typing.overload - def __init__(self, zoneId: typing.Union[QByteArray, bytes, bytearray, memoryview], offsetSeconds: int, name: typing.Optional[str], abbreviation: typing.Optional[str], territory: QLocale.Country = ..., comment: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, ianaId: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self, offsetSeconds: int) -> None: ... - @typing.overload - def __init__(self, other: 'QTimeZone') -> None: ... - @typing.overload - def __init__(self) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def asBackendZone(self) -> 'QTimeZone': ... - @typing.overload - def isUtcOrFixedOffset(self) -> bool: ... - @typing.overload - @staticmethod - def isUtcOrFixedOffset(spec: Qt.TimeSpec) -> bool: ... - def fixedSecondsAheadOfUtc(self) -> int: ... - def timeSpec(self) -> Qt.TimeSpec: ... - @staticmethod - def fromSecondsAheadOfUtc(offset: int) -> 'QTimeZone': ... - @staticmethod - def utc() -> 'QTimeZone': ... - @staticmethod - def systemTimeZone() -> 'QTimeZone': ... - @typing.overload - @staticmethod - def windowsIdToIanaIds(windowsId: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> typing.List[QByteArray]: ... - @typing.overload - @staticmethod - def windowsIdToIanaIds(windowsId: typing.Union[QByteArray, bytes, bytearray, memoryview], territory: QLocale.Country) -> typing.List[QByteArray]: ... - @typing.overload - @staticmethod - def windowsIdToDefaultIanaId(windowsId: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> QByteArray: ... - @typing.overload - @staticmethod - def windowsIdToDefaultIanaId(windowsId: typing.Union[QByteArray, bytes, bytearray, memoryview], territory: QLocale.Country) -> QByteArray: ... - @staticmethod - def ianaIdToWindowsId(ianaId: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> QByteArray: ... - @typing.overload - @staticmethod - def availableTimeZoneIds(territory: QLocale.Country) -> typing.List[QByteArray]: ... - @typing.overload - @staticmethod - def availableTimeZoneIds(offsetSeconds: int) -> typing.List[QByteArray]: ... - @typing.overload - @staticmethod - def availableTimeZoneIds() -> typing.List[QByteArray]: ... - @staticmethod - def isTimeZoneIdAvailable(ianaId: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @staticmethod - def systemTimeZoneId() -> QByteArray: ... - def transitions(self, fromDateTime: typing.Union[QDateTime, datetime.datetime], toDateTime: typing.Union[QDateTime, datetime.datetime]) -> typing.List['QTimeZone.OffsetData']: ... - def previousTransition(self, beforeDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... - def nextTransition(self, afterDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... - def hasTransitions(self) -> bool: ... - def offsetData(self, forDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... - def isDaylightTime(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> bool: ... - def hasDaylightTime(self) -> bool: ... - def daylightTimeOffset(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... - def standardTimeOffset(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... - def offsetFromUtc(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... - def abbreviation(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> str: ... - @typing.overload - def displayName(self, atDateTime: typing.Union[QDateTime, datetime.datetime], nameType: 'QTimeZone.NameType' = ..., locale: QLocale = ...) -> str: ... - @typing.overload - def displayName(self, timeType: 'QTimeZone.TimeType', nameType: 'QTimeZone.NameType' = ..., locale: QLocale = ...) -> str: ... - def comment(self) -> str: ... - def territory(self) -> QLocale.Country: ... - def country(self) -> QLocale.Country: ... - def id(self) -> QByteArray: ... - def isValid(self) -> bool: ... - def swap(self, other: 'QTimeZone') -> None: ... - - -class QNativeIpcKey(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - SystemV = ... # type: QNativeIpcKey.Type - PosixRealtime = ... # type: QNativeIpcKey.Type - Windows = ... # type: QNativeIpcKey.Type - - DefaultTypeForOs = ... # type: 'QNativeIpcKey.Type' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, type: 'QNativeIpcKey.Type') -> None: ... - @typing.overload - def __init__(self, k: typing.Optional[str], type: 'QNativeIpcKey.Type' = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QNativeIpcKey') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - @staticmethod - def fromString(string: typing.Optional[str]) -> 'QNativeIpcKey': ... - def toString(self) -> str: ... - def setNativeKey(self, newKey: typing.Optional[str]) -> None: ... - def nativeKey(self) -> str: ... - def setType(self, type: 'QNativeIpcKey.Type') -> None: ... - def type(self) -> 'QNativeIpcKey.Type': ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - def swap(self, other: 'QNativeIpcKey') -> None: ... - @staticmethod - def legacyDefaultTypeForOs() -> 'QNativeIpcKey.Type': ... - - -class QTranslator(QObject): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def filePath(self) -> str: ... - def language(self) -> str: ... - def loadFromData(self, data: typing.Optional[PyQt6.sip.array[bytes]], directory: typing.Optional[str] = ...) -> bool: ... - @typing.overload - def load(self, fileName: typing.Optional[str], directory: typing.Optional[str] = ..., searchDelimiters: typing.Optional[str] = ..., suffix: typing.Optional[str] = ...) -> bool: ... - @typing.overload - def load(self, locale: QLocale, fileName: typing.Optional[str], prefix: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., suffix: typing.Optional[str] = ...) -> bool: ... - def isEmpty(self) -> bool: ... - def translate(self, context: typing.Optional[str], sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... - - -class QTransposeProxyModel(QAbstractProxyModel): - - def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... - - def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... - def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... - def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... - def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... - def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... - def parent(self, index: QModelIndex) -> QModelIndex: ... - def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... - def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... - def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... - def span(self, index: QModelIndex) -> QSize: ... - def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... - def columnCount(self, parent: QModelIndex = ...) -> int: ... - def rowCount(self, parent: QModelIndex = ...) -> int: ... - def setSourceModel(self, newSourceModel: typing.Optional[QAbstractItemModel]) -> None: ... - - -class QTypeRevision(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTypeRevision') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QTypeRevision') -> bool: ... - def __le__(self, rhs: 'QTypeRevision') -> bool: ... - def __gt__(self, rhs: 'QTypeRevision') -> bool: ... - def __ge__(self, rhs: 'QTypeRevision') -> bool: ... - @staticmethod - def zero() -> 'QTypeRevision': ... - @staticmethod - def fromEncodedVersion(value: int) -> 'QTypeRevision': ... - def __hash__(self) -> int: ... - def toEncodedVersion(self) -> int: ... - def isValid(self) -> bool: ... - def minorVersion(self) -> int: ... - def hasMinorVersion(self) -> bool: ... - def majorVersion(self) -> int: ... - def hasMajorVersion(self) -> bool: ... - - -class QUrl(PyQt6.sip.simplewrapper): - - class AceProcessingOption(enum.Flag): - IgnoreIDNWhitelist = ... # type: QUrl.AceProcessingOption - AceTransitionalProcessing = ... # type: QUrl.AceProcessingOption - - class UserInputResolutionOption(enum.Flag): - DefaultResolution = ... # type: QUrl.UserInputResolutionOption - AssumeLocalFile = ... # type: QUrl.UserInputResolutionOption - - class ComponentFormattingOption(enum.IntFlag): - PrettyDecoded = ... # type: QUrl.ComponentFormattingOption - EncodeSpaces = ... # type: QUrl.ComponentFormattingOption - EncodeUnicode = ... # type: QUrl.ComponentFormattingOption - EncodeDelimiters = ... # type: QUrl.ComponentFormattingOption - EncodeReserved = ... # type: QUrl.ComponentFormattingOption - DecodeReserved = ... # type: QUrl.ComponentFormattingOption - FullyEncoded = ... # type: QUrl.ComponentFormattingOption - FullyDecoded = ... # type: QUrl.ComponentFormattingOption - - class UrlFormattingOption(enum.IntFlag): - None_ = ... # type: QUrl.UrlFormattingOption - RemoveScheme = ... # type: QUrl.UrlFormattingOption - RemovePassword = ... # type: QUrl.UrlFormattingOption - RemoveUserInfo = ... # type: QUrl.UrlFormattingOption - RemovePort = ... # type: QUrl.UrlFormattingOption - RemoveAuthority = ... # type: QUrl.UrlFormattingOption - RemovePath = ... # type: QUrl.UrlFormattingOption - RemoveQuery = ... # type: QUrl.UrlFormattingOption - RemoveFragment = ... # type: QUrl.UrlFormattingOption - PreferLocalFile = ... # type: QUrl.UrlFormattingOption - StripTrailingSlash = ... # type: QUrl.UrlFormattingOption - RemoveFilename = ... # type: QUrl.UrlFormattingOption - NormalizePathSegments = ... # type: QUrl.UrlFormattingOption - - class ParsingMode(enum.Enum): - TolerantMode = ... # type: QUrl.ParsingMode - StrictMode = ... # type: QUrl.ParsingMode - DecodedMode = ... # type: QUrl.ParsingMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, url: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - @typing.overload - def __init__(self, copy: 'QUrl') -> None: ... - - def __ge__(self, url: 'QUrl') -> bool: ... - def matches(self, url: 'QUrl', options: 'QUrl.UrlFormattingOption') -> bool: ... - def fileName(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def adjusted(self, options: 'QUrl.UrlFormattingOption') -> 'QUrl': ... - @staticmethod - def fromStringList(uris: typing.Iterable[typing.Optional[str]], mode: 'QUrl.ParsingMode' = ...) -> typing.List['QUrl']: ... - @staticmethod - def toStringList(uris: typing.Iterable['QUrl'], options: 'QUrl.UrlFormattingOption' = ...) -> typing.List[str]: ... - def query(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - @typing.overload - def setQuery(self, query: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - @typing.overload - def setQuery(self, query: 'QUrlQuery') -> None: ... - @typing.overload - def toDisplayString(self, options: 'QUrl.UrlFormattingOption' = ...) -> str: ... - @typing.overload - def toDisplayString(self, options: 'QUrl.ComponentFormattingOption') -> str: ... - def isLocalFile(self) -> bool: ... - def swap(self, other: 'QUrl') -> None: ... - @staticmethod - def fromUserInput(userInput: typing.Optional[str], workingDirectory: typing.Optional[str] = ..., options: 'QUrl.UserInputResolutionOption' = ...) -> 'QUrl': ... - @staticmethod - def setIdnWhitelist(a0: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def idnWhitelist() -> typing.List[str]: ... - @staticmethod - def toAce(domain: typing.Optional[str], options: 'QUrl.AceProcessingOption' = ...) -> QByteArray: ... - @staticmethod - def fromAce(domain: typing.Union[QByteArray, bytes, bytearray, memoryview], options: 'QUrl.AceProcessingOption' = ...) -> str: ... - def errorString(self) -> str: ... - def hasFragment(self) -> bool: ... - def hasQuery(self) -> bool: ... - @staticmethod - def toPercentEncoding(input: typing.Optional[str], exclude: typing.Union[QByteArray, bytes, bytearray, memoryview] = ..., include: typing.Union[QByteArray, bytes, bytearray, memoryview] = ...) -> QByteArray: ... - @staticmethod - def fromPercentEncoding(a0: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> str: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __lt__(self, url: 'QUrl') -> bool: ... - def isDetached(self) -> bool: ... - def detach(self) -> None: ... - @staticmethod - def fromEncoded(input: typing.Union[QByteArray, bytes, bytearray, memoryview], mode: 'QUrl.ParsingMode' = ...) -> 'QUrl': ... - @typing.overload - def toEncoded(self, options: 'QUrl.UrlFormattingOption' = ...) -> QByteArray: ... - @typing.overload - def toEncoded(self, options: 'QUrl.ComponentFormattingOption') -> QByteArray: ... - @typing.overload - def toString(self, options: 'QUrl.UrlFormattingOption' = ...) -> str: ... - @typing.overload - def toString(self, options: 'QUrl.ComponentFormattingOption') -> str: ... - def toLocalFile(self) -> str: ... - @staticmethod - def fromLocalFile(localfile: typing.Optional[str]) -> 'QUrl': ... - def isParentOf(self, url: 'QUrl') -> bool: ... - def isRelative(self) -> bool: ... - def resolved(self, relative: 'QUrl') -> 'QUrl': ... - def fragment(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setFragment(self, fragment: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def path(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setPath(self, path: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def port(self, defaultPort: int = ...) -> int: ... - def setPort(self, port: int) -> None: ... - def host(self, a0: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setHost(self, host: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def password(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setPassword(self, password: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def userName(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setUserName(self, userName: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def userInfo(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setUserInfo(self, userInfo: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def authority(self, options: 'QUrl.ComponentFormattingOption' = ...) -> str: ... - def setAuthority(self, authority: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def scheme(self) -> str: ... - def setScheme(self, scheme: typing.Optional[str]) -> None: ... - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def isValid(self) -> bool: ... - def setUrl(self, url: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... - def url(self, options: 'QUrl.UrlFormattingOption' = ...) -> str: ... - def __repr__(self) -> str: ... - def __hash__(self) -> int: ... - - -class QUrlQuery(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, url: QUrl) -> None: ... - @typing.overload - def __init__(self, queryString: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QUrlQuery') -> None: ... - - def __hash__(self) -> int: ... - @staticmethod - def defaultQueryPairDelimiter() -> str: ... - @staticmethod - def defaultQueryValueDelimiter() -> str: ... - def removeAllQueryItems(self, key: typing.Optional[str]) -> None: ... - def allQueryItemValues(self, key: typing.Optional[str], options: QUrl.ComponentFormattingOption = ...) -> typing.List[str]: ... - def queryItemValue(self, key: typing.Optional[str], options: QUrl.ComponentFormattingOption = ...) -> str: ... - def removeQueryItem(self, key: typing.Optional[str]) -> None: ... - def addQueryItem(self, key: typing.Optional[str], value: typing.Optional[str]) -> None: ... - def hasQueryItem(self, key: typing.Optional[str]) -> bool: ... - def queryItems(self, options: QUrl.ComponentFormattingOption = ...) -> typing.List[typing.Tuple[str, str]]: ... - def setQueryItems(self, query: typing.Iterable[typing.Tuple[typing.Optional[str], typing.Optional[str]]]) -> None: ... - def queryPairDelimiter(self) -> str: ... - def queryValueDelimiter(self) -> str: ... - def setQueryDelimiters(self, valueDelimiter: str, pairDelimiter: str) -> None: ... - def toString(self, options: QUrl.ComponentFormattingOption = ...) -> str: ... - def setQuery(self, queryString: typing.Optional[str]) -> None: ... - def query(self, options: QUrl.ComponentFormattingOption = ...) -> str: ... - def clear(self) -> None: ... - def isDetached(self) -> bool: ... - def isEmpty(self) -> bool: ... - def swap(self, other: 'QUrlQuery') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QUuid(PyQt6.sip.simplewrapper): - - class StringFormat(enum.Enum): - WithBraces = ... # type: QUuid.StringFormat - WithoutBraces = ... # type: QUuid.StringFormat - Id128 = ... # type: QUuid.StringFormat - - class Version(enum.Enum): - VerUnknown = ... # type: QUuid.Version - Time = ... # type: QUuid.Version - EmbeddedPOSIX = ... # type: QUuid.Version - Md5 = ... # type: QUuid.Version - Name = ... # type: QUuid.Version - Random = ... # type: QUuid.Version - Sha1 = ... # type: QUuid.Version - - class Variant(enum.Enum): - VarUnknown = ... # type: QUuid.Variant - NCS = ... # type: QUuid.Variant - DCE = ... # type: QUuid.Variant - Microsoft = ... # type: QUuid.Variant - Reserved = ... # type: QUuid.Variant - - class Id128Bytes(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QUuid.Id128Bytes') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, id128: 'QUuid.Id128Bytes', order: QSysInfo.Endian = ...) -> None: ... - @typing.overload - def __init__(self, l: int, w1: int, w2: int, b1: int, b2: int, b3: int, b4: int, b5: int, b6: int, b7: int, b8: int) -> None: ... - @typing.overload - def __init__(self, string: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def __init__(self, a0: 'QUuid') -> None: ... - - def __le__(self, rhs: 'QUuid') -> bool: ... - def __ge__(self, rhs: 'QUuid') -> bool: ... - @staticmethod - def fromString(string: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> 'QUuid': ... - @staticmethod - def fromRfc4122(a0: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QUuid': ... - def toRfc4122(self) -> QByteArray: ... - def toByteArray(self, mode: 'QUuid.StringFormat' = ...) -> QByteArray: ... - def version(self) -> 'QUuid.Version': ... - def variant(self) -> 'QUuid.Variant': ... - @typing.overload - @staticmethod - def createUuidV5(ns: 'QUuid', baseData: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QUuid': ... - @typing.overload - @staticmethod - def createUuidV5(ns: 'QUuid', baseData: typing.Optional[str]) -> 'QUuid': ... - @typing.overload - @staticmethod - def createUuidV3(ns: 'QUuid', baseData: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> 'QUuid': ... - @typing.overload - @staticmethod - def createUuidV3(ns: 'QUuid', baseData: typing.Optional[str]) -> 'QUuid': ... - @staticmethod - def createUuid() -> 'QUuid': ... - def __gt__(self, other: 'QUuid') -> bool: ... - def __lt__(self, other: 'QUuid') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isNull(self) -> bool: ... - def toString(self, mode: 'QUuid.StringFormat' = ...) -> str: ... - def __repr__(self) -> str: ... - def __hash__(self) -> int: ... - - -class QVariant(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, obj: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional['QVariant']) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def typeId(self) -> int: ... - def canView(self, targetType: QMetaType) -> bool: ... - def metaType(self) -> QMetaType: ... - def swap(self, other: typing.Optional['QVariant']) -> None: ... - def save(self, ds: QDataStream) -> None: ... - def load(self, ds: QDataStream) -> None: ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - def isValid(self) -> bool: ... - def convert(self, type: QMetaType) -> bool: ... - def canConvert(self, targetType: QMetaType) -> bool: ... - def typeName(self) -> typing.Optional[str]: ... - def userType(self) -> int: ... - def value(self) -> typing.Any: ... - - -class QVersionNumber(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, seg: typing.Iterable[int]) -> None: ... - @typing.overload - def __init__(self, maj: int) -> None: ... - @typing.overload - def __init__(self, maj: int, min: int) -> None: ... - @typing.overload - def __init__(self, maj: int, min: int, mic: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QVersionNumber') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QVersionNumber') -> bool: ... - def __le__(self, rhs: 'QVersionNumber') -> bool: ... - def __gt__(self, rhs: 'QVersionNumber') -> bool: ... - def __ge__(self, rhs: 'QVersionNumber') -> bool: ... - def __hash__(self) -> int: ... - @staticmethod - def fromString(string: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> typing.Tuple['QVersionNumber', typing.Optional[int]]: ... - def toString(self) -> str: ... - @staticmethod - def commonPrefix(v1: 'QVersionNumber', v2: 'QVersionNumber') -> 'QVersionNumber': ... - @staticmethod - def compare(v1: 'QVersionNumber', v2: 'QVersionNumber') -> int: ... - def isPrefixOf(self, other: 'QVersionNumber') -> bool: ... - def segmentCount(self) -> int: ... - def segmentAt(self, index: int) -> int: ... - def segments(self) -> typing.List[int]: ... - def normalized(self) -> 'QVersionNumber': ... - def microVersion(self) -> int: ... - def minorVersion(self) -> int: ... - def majorVersion(self) -> int: ... - def isNormalized(self) -> bool: ... - def isNull(self) -> bool: ... - - -class QWaitCondition(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def wakeAll(self) -> None: ... - def wakeOne(self) -> None: ... - @typing.overload - def wait(self, lockedMutex: typing.Optional[QMutex], deadline: QDeadlineTimer = ...) -> bool: ... - @typing.overload - def wait(self, lockedMutex: typing.Optional[QMutex], time: int) -> bool: ... - @typing.overload - def wait(self, lockedReadWriteLock: typing.Optional[QReadWriteLock], deadline: QDeadlineTimer = ...) -> bool: ... - @typing.overload - def wait(self, lockedReadWriteLock: typing.Optional[QReadWriteLock], time: int) -> bool: ... - - -class QXmlStreamAttribute(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, qualifiedName: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamAttribute') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isDefault(self) -> bool: ... - def value(self) -> str: ... - def prefix(self) -> str: ... - def qualifiedName(self) -> str: ... - def name(self) -> str: ... - def namespaceUri(self) -> str: ... - - -class QXmlStreamNamespaceDeclaration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, prefix: typing.Optional[str], namespaceUri: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamNamespaceDeclaration') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def namespaceUri(self) -> str: ... - def prefix(self) -> str: ... - - -class QXmlStreamNotationDeclaration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamNotationDeclaration') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def publicId(self) -> str: ... - def systemId(self) -> str: ... - def name(self) -> str: ... - - -class QXmlStreamEntityDeclaration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamEntityDeclaration') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def value(self) -> str: ... - def publicId(self) -> str: ... - def systemId(self) -> str: ... - def notationName(self) -> str: ... - def name(self) -> str: ... - - -class QXmlStreamEntityResolver(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamEntityResolver') -> None: ... - - def resolveUndeclaredEntity(self, name: typing.Optional[str]) -> str: ... - - -class QXmlStreamReader(PyQt6.sip.simplewrapper): - - class Error(enum.Enum): - NoError = ... # type: QXmlStreamReader.Error - UnexpectedElementError = ... # type: QXmlStreamReader.Error - CustomError = ... # type: QXmlStreamReader.Error - NotWellFormedError = ... # type: QXmlStreamReader.Error - PrematureEndOfDocumentError = ... # type: QXmlStreamReader.Error - - class ReadElementTextBehaviour(enum.Enum): - ErrorOnUnexpectedElement = ... # type: QXmlStreamReader.ReadElementTextBehaviour - IncludeChildElements = ... # type: QXmlStreamReader.ReadElementTextBehaviour - SkipChildElements = ... # type: QXmlStreamReader.ReadElementTextBehaviour - - class TokenType(enum.Enum): - NoToken = ... # type: QXmlStreamReader.TokenType - Invalid = ... # type: QXmlStreamReader.TokenType - StartDocument = ... # type: QXmlStreamReader.TokenType - EndDocument = ... # type: QXmlStreamReader.TokenType - StartElement = ... # type: QXmlStreamReader.TokenType - EndElement = ... # type: QXmlStreamReader.TokenType - Characters = ... # type: QXmlStreamReader.TokenType - Comment = ... # type: QXmlStreamReader.TokenType - DTD = ... # type: QXmlStreamReader.TokenType - EntityReference = ... # type: QXmlStreamReader.TokenType - ProcessingInstruction = ... # type: QXmlStreamReader.TokenType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QIODevice]) -> None: ... - @typing.overload - def __init__(self, data: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - - def hasStandaloneDeclaration(self) -> bool: ... - def setEntityExpansionLimit(self, limit: int) -> None: ... - def entityExpansionLimit(self) -> int: ... - def skipCurrentElement(self) -> None: ... - def readNextStartElement(self) -> bool: ... - def entityResolver(self) -> typing.Optional[QXmlStreamEntityResolver]: ... - def setEntityResolver(self, resolver: typing.Optional[QXmlStreamEntityResolver]) -> None: ... - def hasError(self) -> bool: ... - def error(self) -> 'QXmlStreamReader.Error': ... - def errorString(self) -> str: ... - def raiseError(self, message: typing.Optional[str] = ...) -> None: ... - def dtdSystemId(self) -> str: ... - def dtdPublicId(self) -> str: ... - def dtdName(self) -> str: ... - def entityDeclarations(self) -> typing.List[QXmlStreamEntityDeclaration]: ... - def notationDeclarations(self) -> typing.List[QXmlStreamNotationDeclaration]: ... - def addExtraNamespaceDeclarations(self, extraNamespaceDeclaractions: typing.Iterable[QXmlStreamNamespaceDeclaration]) -> None: ... - def addExtraNamespaceDeclaration(self, extraNamespaceDeclaraction: QXmlStreamNamespaceDeclaration) -> None: ... - def namespaceDeclarations(self) -> typing.List[QXmlStreamNamespaceDeclaration]: ... - def text(self) -> str: ... - def processingInstructionData(self) -> str: ... - def processingInstructionTarget(self) -> str: ... - def prefix(self) -> str: ... - def qualifiedName(self) -> str: ... - def namespaceUri(self) -> str: ... - def name(self) -> str: ... - def readElementText(self, behaviour: 'QXmlStreamReader.ReadElementTextBehaviour' = ...) -> str: ... - def attributes(self) -> 'QXmlStreamAttributes': ... - def characterOffset(self) -> int: ... - def columnNumber(self) -> int: ... - def lineNumber(self) -> int: ... - def documentEncoding(self) -> str: ... - def documentVersion(self) -> str: ... - def isStandaloneDocument(self) -> bool: ... - def isProcessingInstruction(self) -> bool: ... - def isEntityReference(self) -> bool: ... - def isDTD(self) -> bool: ... - def isComment(self) -> bool: ... - def isCDATA(self) -> bool: ... - def isWhitespace(self) -> bool: ... - def isCharacters(self) -> bool: ... - def isEndElement(self) -> bool: ... - def isStartElement(self) -> bool: ... - def isEndDocument(self) -> bool: ... - def isStartDocument(self) -> bool: ... - def namespaceProcessing(self) -> bool: ... - def setNamespaceProcessing(self, a0: bool) -> None: ... - def tokenString(self) -> str: ... - def tokenType(self) -> 'QXmlStreamReader.TokenType': ... - def readNext(self) -> 'QXmlStreamReader.TokenType': ... - def atEnd(self) -> bool: ... - def clear(self) -> None: ... - def addData(self, data: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def device(self) -> typing.Optional[QIODevice]: ... - def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... - - -class QXmlStreamWriter(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QIODevice]) -> None: ... - @typing.overload - def __init__(self, array: typing.Optional[typing.Union[QByteArray, bytes, bytearray, memoryview]]) -> None: ... - - def hasError(self) -> bool: ... - def writeCurrentToken(self, reader: QXmlStreamReader) -> None: ... - @typing.overload - def writeStartElement(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeStartElement(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeStartDocument(self, version: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], standalone: bool) -> None: ... - @typing.overload - def writeStartDocument(self, version: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeStartDocument(self) -> None: ... - def writeProcessingInstruction(self, target: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], data: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]] = ...) -> None: ... - def writeDefaultNamespace(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeNamespace(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], prefix: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]] = ...) -> None: ... - def writeEntityReference(self, name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeEndElement(self) -> None: ... - def writeEndDocument(self) -> None: ... - @typing.overload - def writeTextElement(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], text: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeTextElement(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], text: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeEmptyElement(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeEmptyElement(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeDTD(self, dtd: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeComment(self, text: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeCharacters(self, text: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeCDATA(self, text: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def writeAttributes(self, attributes: 'QXmlStreamAttributes') -> None: ... - @typing.overload - def writeAttribute(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], value: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeAttribute(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], value: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def writeAttribute(self, attribute: QXmlStreamAttribute) -> None: ... - def autoFormattingIndent(self) -> int: ... - def setAutoFormattingIndent(self, spaces: int) -> None: ... - def autoFormatting(self) -> bool: ... - def setAutoFormatting(self, a0: bool) -> None: ... - def device(self) -> typing.Optional[QIODevice]: ... - def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... - - -class QXmlStreamAttributes(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QXmlStreamAttributes') -> None: ... - - def __contains__(self, value: QXmlStreamAttribute) -> int: ... - @typing.overload - def __delitem__(self, i: int) -> None: ... - @typing.overload - def __delitem__(self, slice: slice) -> None: ... - @typing.overload - def __setitem__(self, i: int, value: QXmlStreamAttribute) -> None: ... - @typing.overload - def __setitem__(self, slice: slice, list: 'QXmlStreamAttributes') -> None: ... - @typing.overload - def __getitem__(self, i: int) -> QXmlStreamAttribute: ... - @typing.overload - def __getitem__(self, slice: slice) -> 'QXmlStreamAttributes': ... - def __eq__(self, other: object): ... - @typing.overload - def __iadd__(self, other: 'QXmlStreamAttributes') -> 'QXmlStreamAttributes': ... - @typing.overload - def __iadd__(self, value: QXmlStreamAttribute) -> 'QXmlStreamAttributes': ... - def __ne__(self, other: object): ... - def size(self) -> int: ... - def replace(self, i: int, value: QXmlStreamAttribute) -> None: ... - def resize(self, size: int) -> None: ... - @typing.overload - def remove(self, i: int) -> None: ... - @typing.overload - def remove(self, i: int, count: int) -> None: ... - def prepend(self, value: QXmlStreamAttribute) -> None: ... - def lastIndexOf(self, value: QXmlStreamAttribute, from_: int = ...) -> int: ... - def last(self) -> QXmlStreamAttribute: ... - def isEmpty(self) -> bool: ... - def insert(self, i: int, value: QXmlStreamAttribute) -> None: ... - def indexOf(self, value: QXmlStreamAttribute, from_: int = ...) -> int: ... - def first(self) -> QXmlStreamAttribute: ... - def fill(self, value: QXmlStreamAttribute, size: int = ...) -> None: ... - def data(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def __len__(self) -> int: ... - @typing.overload - def count(self, value: QXmlStreamAttribute) -> int: ... - @typing.overload - def count(self) -> int: ... - def contains(self, value: QXmlStreamAttribute) -> bool: ... - def clear(self) -> None: ... - def at(self, i: int) -> QXmlStreamAttribute: ... - @typing.overload - def hasAttribute(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def hasAttribute(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def append(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def append(self, qualifiedName: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def append(self, value: QXmlStreamAttribute) -> None: ... - @typing.overload - def value(self, namespaceUri: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], name: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> str: ... - @typing.overload - def value(self, qualifiedName: typing.Union[typing.Union[QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> str: ... - - -class QMutexLocker(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, mutex: typing.Optional[QMutex]) -> None: ... - @typing.overload - def __init__(self, mutex: typing.Optional[QRecursiveMutex]) -> None: ... - - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - def relock(self) -> None: ... - def unlock(self) -> None: ... - def mutex(self) -> typing.Union[QMutex, QRecursiveMutex]: ... - - -PYQT_VERSION = ... # type: int -PYQT_VERSION_STR = ... # type: str -QT_VERSION = ... # type: int -QT_VERSION_STR = ... # type: str - - -def qYieldCpu() -> None: ... -def qSetRealNumberPrecision(precision: int) -> QTextStreamManipulator: ... -def qSetPadChar(ch: str) -> QTextStreamManipulator: ... -def qSetFieldWidth(width: int) -> QTextStreamManipulator: ... -def Q_RETURN_ARG(type: typing.Any) -> QGenericReturnArgument: ... -def Q_ARG(type: typing.Any, data: typing.Any) -> QGenericArgument: ... -def QT_TRANSLATE_NOOP(a0: str, a1: str) -> str: ... -def QT_TR_NOOP(a0: str) -> str: ... -def pyqtEnum(a0: enum.Enum = ...) -> None: ... -def pyqtClassInfo(a0: typing.Optional[str], a1: typing.Optional[str]) -> None: ... -def qFuzzyIsNull(d: float) -> bool: ... -def qFuzzyCompare(p1: float, p2: float) -> bool: ... -def qRound64(d: float) -> int: ... -def qRound(d: float) -> int: ... -def qAbs(t: float) -> float: ... -def qFloatDistance(a: float, b: float) -> int: ... -def qQNaN() -> float: ... -def qSNaN() -> float: ... -def qInf() -> float: ... -def qIsNaN(d: float) -> bool: ... -def qIsFinite(d: float) -> bool: ... -def qIsInf(d: float) -> bool: ... -def qFormatLogMessage(type: QtMsgType, context: QMessageLogContext, buf: typing.Optional[str]) -> str: ... -def qSetMessagePattern(messagePattern: typing.Optional[str]) -> None: ... -def qInstallMessageHandler(a0: typing.Optional[typing.Callable[[QtMsgType, QMessageLogContext, typing.Optional[str]], None]]) -> typing.Optional[typing.Callable[[QtMsgType, QMessageLogContext, typing.Optional[str]], None]]: ... -def qWarning(msg: typing.Optional[str]) -> None: ... -def qInfo(msg: typing.Optional[str]) -> None: ... -def qFatal(msg: typing.Optional[str]) -> None: ... -def qDebug(msg: typing.Optional[str]) -> None: ... -def qCritical(msg: typing.Optional[str]) -> None: ... -def pyqtRestoreInputHook() -> None: ... -def pyqtRemoveInputHook() -> None: ... -def qAddPreRoutine(routine: typing.Callable[[], None]) -> None: ... -def qRemovePostRoutine(a0: typing.Callable[..., None]) -> None: ... -def qAddPostRoutine(a0: typing.Callable[..., None]) -> None: ... -def qChecksum(data: typing.Union[QByteArray, bytes, bytearray, memoryview], standard: Qt.ChecksumType = ...) -> int: ... -@typing.overload -def qUncompress(data: typing.Optional[PyQt6.sip.array[bytes]]) -> QByteArray: ... -@typing.overload -def qUncompress(data: typing.Union[QByteArray, bytes, bytearray, memoryview]) -> QByteArray: ... -@typing.overload -def qCompress(data: typing.Optional[PyQt6.sip.array[bytes]], compressionLevel: int = ...) -> QByteArray: ... -@typing.overload -def qCompress(data: typing.Union[QByteArray, bytes, bytearray, memoryview], compressionLevel: int = ...) -> QByteArray: ... -def qVersion() -> typing.Optional[str]: ... -def qEnvironmentVariableIntValue(varName: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... -def qEnvironmentVariableIsSet(varName: typing.Optional[str]) -> bool: ... -def qEnvironmentVariableIsEmpty(varName: typing.Optional[str]) -> bool: ... -@typing.overload -def qEnvironmentVariable(varName: typing.Optional[str], defaultValue: typing.Optional[str]) -> str: ... -@typing.overload -def qEnvironmentVariable(varName: typing.Optional[str]) -> str: ... -def pyqtPickleProtocol() -> typing.Optional[int]: ... -def pyqtSetPickleProtocol(a0: typing.Optional[int]) -> None: ... -def qUnregisterResourceData(a0: int, a1: typing.Optional[bytes], a2: typing.Optional[bytes], a3: typing.Optional[bytes]) -> bool: ... -def qRegisterResourceData(a0: int, a1: typing.Optional[bytes], a2: typing.Optional[bytes], a3: typing.Optional[bytes]) -> bool: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.abi3.so deleted file mode 100644 index c2d0764..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.pyi deleted file mode 100644 index 56ace84..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtDBus.pyi +++ /dev/null @@ -1,492 +0,0 @@ -# The PEP 484 type hints stub file for the QtDBus module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QDBusAbstractAdaptor(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def autoRelaySignals(self) -> bool: ... - def setAutoRelaySignals(self, enable: bool) -> None: ... - - -class QDBusAbstractInterface(QtCore.QObject): - - def __init__(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], connection: 'QDBusConnection', parent: typing.Optional[QtCore.QObject]) -> None: ... - - def isInteractiveAuthorizationAllowed(self) -> bool: ... - def setInteractiveAuthorizationAllowed(self, enable: bool) -> None: ... - def disconnectNotify(self, signal: QtCore.QMetaMethod) -> None: ... - def connectNotify(self, signal: QtCore.QMetaMethod) -> None: ... - def asyncCallWithArgumentList(self, method: typing.Optional[str], args: typing.Iterable[typing.Any]) -> 'QDBusPendingCall': ... - def asyncCall(self, method: typing.Optional[str], *args: typing.Any) -> 'QDBusPendingCall': ... - @typing.overload - def callWithCallback(self, method: typing.Optional[str], args: typing.Iterable[typing.Any], returnMethod: PYQT_SLOT, errorMethod: PYQT_SLOT) -> bool: ... - @typing.overload - def callWithCallback(self, method: typing.Optional[str], args: typing.Iterable[typing.Any], slot: PYQT_SLOT) -> bool: ... - def callWithArgumentList(self, mode: 'QDBus.CallMode', method: typing.Optional[str], args: typing.Iterable[typing.Any]) -> 'QDBusMessage': ... - @typing.overload - def call(self, method: typing.Optional[str], *args: typing.Any) -> 'QDBusMessage': ... - @typing.overload - def call(self, mode: 'QDBus.CallMode', method: typing.Optional[str], *args: typing.Any) -> 'QDBusMessage': ... - def timeout(self) -> int: ... - def setTimeout(self, timeout: int) -> None: ... - def lastError(self) -> 'QDBusError': ... - def interface(self) -> str: ... - def path(self) -> str: ... - def service(self) -> str: ... - def connection(self) -> 'QDBusConnection': ... - def isValid(self) -> bool: ... - - -class QDBusArgument(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusArgument') -> None: ... - @typing.overload - def __init__(self, arg: typing.Any, id: int = ...) -> None: ... - - def swap(self, other: 'QDBusArgument') -> None: ... - def endMapEntry(self) -> None: ... - def beginMapEntry(self) -> None: ... - def endMap(self) -> None: ... - @typing.overload - def beginMap(self, keyMetaType: QtCore.QMetaType, valueMetaType: QtCore.QMetaType) -> None: ... - @typing.overload - def beginMap(self, kid: int, vid: int) -> None: ... - def endArray(self) -> None: ... - @typing.overload - def beginArray(self, elementMetaType: QtCore.QMetaType) -> None: ... - @typing.overload - def beginArray(self, id: int) -> None: ... - def endStructure(self) -> None: ... - def beginStructure(self) -> None: ... - def add(self, arg: typing.Any, id: int = ...) -> None: ... - - -class QDBus(PyQt6.sip.simplewrapper): - - class CallMode(enum.Enum): - NoBlock = ... # type: QDBus.CallMode - Block = ... # type: QDBus.CallMode - BlockWithGui = ... # type: QDBus.CallMode - AutoDetect = ... # type: QDBus.CallMode - - -class QDBusConnection(PyQt6.sip.simplewrapper): - - class ConnectionCapability(enum.Flag): - UnixFileDescriptorPassing = ... # type: QDBusConnection.ConnectionCapability - - class UnregisterMode(enum.Enum): - UnregisterNode = ... # type: QDBusConnection.UnregisterMode - UnregisterTree = ... # type: QDBusConnection.UnregisterMode - - class RegisterOption(enum.Flag): - ExportAdaptors = ... # type: QDBusConnection.RegisterOption - ExportScriptableSlots = ... # type: QDBusConnection.RegisterOption - ExportScriptableSignals = ... # type: QDBusConnection.RegisterOption - ExportScriptableProperties = ... # type: QDBusConnection.RegisterOption - ExportScriptableInvokables = ... # type: QDBusConnection.RegisterOption - ExportScriptableContents = ... # type: QDBusConnection.RegisterOption - ExportNonScriptableSlots = ... # type: QDBusConnection.RegisterOption - ExportNonScriptableSignals = ... # type: QDBusConnection.RegisterOption - ExportNonScriptableProperties = ... # type: QDBusConnection.RegisterOption - ExportNonScriptableInvokables = ... # type: QDBusConnection.RegisterOption - ExportNonScriptableContents = ... # type: QDBusConnection.RegisterOption - ExportAllSlots = ... # type: QDBusConnection.RegisterOption - ExportAllSignals = ... # type: QDBusConnection.RegisterOption - ExportAllProperties = ... # type: QDBusConnection.RegisterOption - ExportAllInvokables = ... # type: QDBusConnection.RegisterOption - ExportAllContents = ... # type: QDBusConnection.RegisterOption - ExportAllSignal = ... # type: QDBusConnection.RegisterOption - ExportChildObjects = ... # type: QDBusConnection.RegisterOption - - class BusType(enum.Enum): - SessionBus = ... # type: QDBusConnection.BusType - SystemBus = ... # type: QDBusConnection.BusType - ActivationBus = ... # type: QDBusConnection.BusType - - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusConnection') -> None: ... - - def swap(self, other: 'QDBusConnection') -> None: ... - @staticmethod - def systemBus() -> 'QDBusConnection': ... - @staticmethod - def sessionBus() -> 'QDBusConnection': ... - @staticmethod - def localMachineId() -> QtCore.QByteArray: ... - @staticmethod - def disconnectFromPeer(name: typing.Optional[str]) -> None: ... - @staticmethod - def disconnectFromBus(name: typing.Optional[str]) -> None: ... - @staticmethod - def connectToPeer(address: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusConnection': ... - @typing.overload - @staticmethod - def connectToBus(type: 'QDBusConnection.BusType', name: typing.Optional[str]) -> 'QDBusConnection': ... - @typing.overload - @staticmethod - def connectToBus(address: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusConnection': ... - def interface(self) -> typing.Optional['QDBusConnectionInterface']: ... - def unregisterService(self, serviceName: typing.Optional[str]) -> bool: ... - def registerService(self, serviceName: typing.Optional[str]) -> bool: ... - def objectRegisteredAt(self, path: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - def unregisterObject(self, path: typing.Optional[str], mode: 'QDBusConnection.UnregisterMode' = ...) -> None: ... - @typing.overload - def registerObject(self, path: typing.Optional[str], object: typing.Optional[QtCore.QObject], options: 'QDBusConnection.RegisterOption' = ...) -> bool: ... - @typing.overload - def registerObject(self, path: typing.Optional[str], interface: typing.Optional[str], object: typing.Optional[QtCore.QObject], options: 'QDBusConnection.RegisterOption' = ...) -> bool: ... - @typing.overload - def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - @typing.overload - def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - @typing.overload - def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], argumentMatch: typing.Iterable[typing.Optional[str]], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - @typing.overload - def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - @typing.overload - def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - @typing.overload - def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], argumentMatch: typing.Iterable[typing.Optional[str]], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... - def asyncCall(self, message: 'QDBusMessage', timeout: int = ...) -> 'QDBusPendingCall': ... - def call(self, message: 'QDBusMessage', mode: QDBus.CallMode = ..., timeout: int = ...) -> 'QDBusMessage': ... - def callWithCallback(self, message: 'QDBusMessage', returnMethod: PYQT_SLOT, errorMethod: PYQT_SLOT, timeout: int = ...) -> bool: ... - def send(self, message: 'QDBusMessage') -> bool: ... - def connectionCapabilities(self) -> 'QDBusConnection.ConnectionCapability': ... - def name(self) -> str: ... - def lastError(self) -> 'QDBusError': ... - def baseService(self) -> str: ... - def isConnected(self) -> bool: ... - - -class QDBusConnectionInterface(QDBusAbstractInterface): - - class RegisterServiceReply(enum.Enum): - ServiceNotRegistered = ... # type: QDBusConnectionInterface.RegisterServiceReply - ServiceRegistered = ... # type: QDBusConnectionInterface.RegisterServiceReply - ServiceQueued = ... # type: QDBusConnectionInterface.RegisterServiceReply - - class ServiceReplacementOptions(enum.Enum): - DontAllowReplacement = ... # type: QDBusConnectionInterface.ServiceReplacementOptions - AllowReplacement = ... # type: QDBusConnectionInterface.ServiceReplacementOptions - - class ServiceQueueOptions(enum.Enum): - DontQueueService = ... # type: QDBusConnectionInterface.ServiceQueueOptions - QueueService = ... # type: QDBusConnectionInterface.ServiceQueueOptions - ReplaceExistingService = ... # type: QDBusConnectionInterface.ServiceQueueOptions - - def disconnectNotify(self, a0: QtCore.QMetaMethod) -> None: ... - def connectNotify(self, a0: QtCore.QMetaMethod) -> None: ... - callWithCallbackFailed: typing.ClassVar[QtCore.pyqtSignal] - serviceOwnerChanged: typing.ClassVar[QtCore.pyqtSignal] - serviceUnregistered: typing.ClassVar[QtCore.pyqtSignal] - serviceRegistered: typing.ClassVar[QtCore.pyqtSignal] - def startService(self, name: typing.Optional[str]) -> QDBusReply: ... - def serviceUid(self, serviceName: typing.Optional[str]) -> QDBusReply: ... - def servicePid(self, serviceName: typing.Optional[str]) -> QDBusReply: ... - def registerService(self, serviceName: typing.Optional[str], qoption: 'QDBusConnectionInterface.ServiceQueueOptions' = ..., roption: 'QDBusConnectionInterface.ServiceReplacementOptions' = ...) -> QDBusReply: ... - def unregisterService(self, serviceName: typing.Optional[str]) -> QDBusReply: ... - def serviceOwner(self, name: typing.Optional[str]) -> QDBusReply: ... - def isServiceRegistered(self, serviceName: typing.Optional[str]) -> QDBusReply: ... - def activatableServiceNames(self) -> QDBusReply: ... - def registeredServiceNames(self) -> QDBusReply: ... - - -class QDBusError(PyQt6.sip.simplewrapper): - - class ErrorType(enum.Enum): - NoError = ... # type: QDBusError.ErrorType - Other = ... # type: QDBusError.ErrorType - Failed = ... # type: QDBusError.ErrorType - NoMemory = ... # type: QDBusError.ErrorType - ServiceUnknown = ... # type: QDBusError.ErrorType - NoReply = ... # type: QDBusError.ErrorType - BadAddress = ... # type: QDBusError.ErrorType - NotSupported = ... # type: QDBusError.ErrorType - LimitsExceeded = ... # type: QDBusError.ErrorType - AccessDenied = ... # type: QDBusError.ErrorType - NoServer = ... # type: QDBusError.ErrorType - Timeout = ... # type: QDBusError.ErrorType - NoNetwork = ... # type: QDBusError.ErrorType - AddressInUse = ... # type: QDBusError.ErrorType - Disconnected = ... # type: QDBusError.ErrorType - InvalidArgs = ... # type: QDBusError.ErrorType - UnknownMethod = ... # type: QDBusError.ErrorType - TimedOut = ... # type: QDBusError.ErrorType - InvalidSignature = ... # type: QDBusError.ErrorType - UnknownInterface = ... # type: QDBusError.ErrorType - InternalError = ... # type: QDBusError.ErrorType - UnknownObject = ... # type: QDBusError.ErrorType - InvalidService = ... # type: QDBusError.ErrorType - InvalidObjectPath = ... # type: QDBusError.ErrorType - InvalidInterface = ... # type: QDBusError.ErrorType - InvalidMember = ... # type: QDBusError.ErrorType - UnknownProperty = ... # type: QDBusError.ErrorType - PropertyReadOnly = ... # type: QDBusError.ErrorType - - def __init__(self, other: 'QDBusError') -> None: ... - - def swap(self, other: 'QDBusError') -> None: ... - @staticmethod - def errorString(error: 'QDBusError.ErrorType') -> str: ... - def isValid(self) -> bool: ... - def message(self) -> str: ... - def name(self) -> str: ... - def type(self) -> 'QDBusError.ErrorType': ... - - -class QDBusObjectPath(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, objectPath: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QDBusObjectPath') -> None: ... - - def __ge__(self, rhs: 'QDBusObjectPath') -> bool: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QDBusObjectPath') -> bool: ... - def swap(self, other: 'QDBusObjectPath') -> None: ... - def __hash__(self) -> int: ... - def setPath(self, objectPath: typing.Optional[str]) -> None: ... - def path(self) -> str: ... - - -class QDBusSignature(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, dBusSignature: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QDBusSignature') -> None: ... - - def __ge__(self, rhs: 'QDBusSignature') -> bool: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QDBusSignature') -> bool: ... - def swap(self, other: 'QDBusSignature') -> None: ... - def __hash__(self) -> int: ... - def setSignature(self, dBusSignature: typing.Optional[str]) -> None: ... - def signature(self) -> str: ... - - -class QDBusVariant(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, dBusVariant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QDBusVariant') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def swap(self, other: 'QDBusVariant') -> None: ... - def setVariant(self, dBusVariant: typing.Any) -> None: ... - def variant(self) -> typing.Any: ... - - -class QDBusInterface(QDBusAbstractInterface): - - def __init__(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str] = ..., connection: QDBusConnection = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - -class QDBusMessage(PyQt6.sip.simplewrapper): - - class MessageType(enum.Enum): - InvalidMessage = ... # type: QDBusMessage.MessageType - MethodCallMessage = ... # type: QDBusMessage.MessageType - ReplyMessage = ... # type: QDBusMessage.MessageType - ErrorMessage = ... # type: QDBusMessage.MessageType - SignalMessage = ... # type: QDBusMessage.MessageType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusMessage') -> None: ... - - def isInteractiveAuthorizationAllowed(self) -> bool: ... - def setInteractiveAuthorizationAllowed(self, enable: bool) -> None: ... - @staticmethod - def createTargetedSignal(service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusMessage': ... - def swap(self, other: 'QDBusMessage') -> None: ... - def __lshift__(self, arg: typing.Any) -> 'QDBusMessage': ... - def arguments(self) -> typing.List[typing.Any]: ... - def setArguments(self, arguments: typing.Iterable[typing.Any]) -> None: ... - def autoStartService(self) -> bool: ... - def setAutoStartService(self, enable: bool) -> None: ... - def isDelayedReply(self) -> bool: ... - def setDelayedReply(self, enable: bool) -> None: ... - def isReplyRequired(self) -> bool: ... - def signature(self) -> str: ... - def type(self) -> 'QDBusMessage.MessageType': ... - def errorMessage(self) -> str: ... - def errorName(self) -> str: ... - def member(self) -> str: ... - def interface(self) -> str: ... - def path(self) -> str: ... - def service(self) -> str: ... - @typing.overload - def createErrorReply(self, name: typing.Optional[str], msg: typing.Optional[str]) -> 'QDBusMessage': ... - @typing.overload - def createErrorReply(self, error: QDBusError) -> 'QDBusMessage': ... - @typing.overload - def createErrorReply(self, type: QDBusError.ErrorType, msg: typing.Optional[str]) -> 'QDBusMessage': ... - @typing.overload - def createReply(self, arguments: typing.Iterable[typing.Any] = ...) -> 'QDBusMessage': ... - @typing.overload - def createReply(self, argument: typing.Any) -> 'QDBusMessage': ... - @typing.overload - @staticmethod - def createError(name: typing.Optional[str], msg: typing.Optional[str]) -> 'QDBusMessage': ... - @typing.overload - @staticmethod - def createError(error: QDBusError) -> 'QDBusMessage': ... - @typing.overload - @staticmethod - def createError(type: QDBusError.ErrorType, msg: typing.Optional[str]) -> 'QDBusMessage': ... - @staticmethod - def createMethodCall(service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], method: typing.Optional[str]) -> 'QDBusMessage': ... - @staticmethod - def createSignal(path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusMessage': ... - - -class QDBusPendingCall(PyQt6.sip.simplewrapper): - - def __init__(self, other: 'QDBusPendingCall') -> None: ... - - def swap(self, other: 'QDBusPendingCall') -> None: ... - @staticmethod - def fromCompletedCall(message: QDBusMessage) -> 'QDBusPendingCall': ... - @staticmethod - def fromError(error: QDBusError) -> 'QDBusPendingCall': ... - - -class QDBusPendingCallWatcher(QtCore.QObject, QDBusPendingCall): - - def __init__(self, call: QDBusPendingCall, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - finished: typing.ClassVar[QtCore.pyqtSignal] - def waitForFinished(self) -> None: ... - def isFinished(self) -> bool: ... - - -class QDBusServiceWatcher(QtCore.QObject): - - class WatchModeFlag(enum.Flag): - WatchForRegistration = ... # type: QDBusServiceWatcher.WatchModeFlag - WatchForUnregistration = ... # type: QDBusServiceWatcher.WatchModeFlag - WatchForOwnerChange = ... # type: QDBusServiceWatcher.WatchModeFlag - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, service: typing.Optional[str], connection: QDBusConnection, watchMode: 'QDBusServiceWatcher.WatchModeFlag' = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - serviceOwnerChanged: typing.ClassVar[QtCore.pyqtSignal] - serviceUnregistered: typing.ClassVar[QtCore.pyqtSignal] - serviceRegistered: typing.ClassVar[QtCore.pyqtSignal] - def setConnection(self, connection: QDBusConnection) -> None: ... - def connection(self) -> QDBusConnection: ... - def setWatchMode(self, mode: 'QDBusServiceWatcher.WatchModeFlag') -> None: ... - def watchMode(self) -> 'QDBusServiceWatcher.WatchModeFlag': ... - def removeWatchedService(self, service: typing.Optional[str]) -> bool: ... - def addWatchedService(self, newService: typing.Optional[str]) -> None: ... - def setWatchedServices(self, services: typing.Iterable[typing.Optional[str]]) -> None: ... - def watchedServices(self) -> typing.List[str]: ... - - -class QDBusUnixFileDescriptor(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, fileDescriptor: int) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusUnixFileDescriptor') -> None: ... - - def swap(self, other: 'QDBusUnixFileDescriptor') -> None: ... - @staticmethod - def isSupported() -> bool: ... - def setFileDescriptor(self, fileDescriptor: int) -> None: ... - def fileDescriptor(self) -> int: ... - def isValid(self) -> bool: ... - - -class QDBusPendingReply(QDBusPendingCall): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusPendingReply') -> None: ... - @typing.overload - def __init__(self, call: QDBusPendingCall) -> None: ... - @typing.overload - def __init__(self, reply: QDBusMessage) -> None: ... - - def value(self, type: typing.Any = ...) -> typing.Any: ... - def waitForFinished(self) -> None: ... - def reply(self) -> QDBusMessage: ... - def isValid(self) -> bool: ... - def isFinished(self) -> bool: ... - def isError(self) -> bool: ... - def error(self) -> QDBusError: ... - def argumentAt(self, index: int) -> typing.Any: ... - - -class QDBusReply(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, reply: QDBusMessage) -> None: ... - @typing.overload - def __init__(self, call: QDBusPendingCall) -> None: ... - @typing.overload - def __init__(self, error: QDBusError) -> None: ... - @typing.overload - def __init__(self, other: 'QDBusReply') -> None: ... - - def value(self, type: typing.Any = ...) -> typing.Any: ... - def isValid(self) -> bool: ... - def error(self) -> QDBusError: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.abi3.so deleted file mode 100644 index 16ff4ab..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.pyi deleted file mode 100644 index 832d1dc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtDesigner.pyi +++ /dev/null @@ -1,449 +0,0 @@ -# The PEP 484 type hints stub file for the QtDesigner module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QDesignerActionEditorInterface(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setFormWindow(self, formWindow: typing.Optional['QDesignerFormWindowInterface']) -> None: ... - def unmanageAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def manageAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def core(self) -> typing.Optional['QDesignerFormEditorInterface']: ... - - -class QAbstractFormBuilder(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def errorString(self) -> str: ... - def workingDirectory(self) -> QtCore.QDir: ... - def setWorkingDirectory(self, directory: QtCore.QDir) -> None: ... - def save(self, dev: typing.Optional[QtCore.QIODevice], widget: typing.Optional[QtWidgets.QWidget]) -> None: ... - def load(self, device: typing.Optional[QtCore.QIODevice], parent: typing.Optional[QtWidgets.QWidget] = ...) -> typing.Optional[QtWidgets.QWidget]: ... - - -class QDesignerFormEditorInterface(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setActionEditor(self, actionEditor: typing.Optional[QDesignerActionEditorInterface]) -> None: ... - def setObjectInspector(self, objectInspector: typing.Optional['QDesignerObjectInspectorInterface']) -> None: ... - def setPropertyEditor(self, propertyEditor: typing.Optional['QDesignerPropertyEditorInterface']) -> None: ... - def setWidgetBox(self, widgetBox: typing.Optional['QDesignerWidgetBoxInterface']) -> None: ... - def actionEditor(self) -> typing.Optional[QDesignerActionEditorInterface]: ... - def formWindowManager(self) -> typing.Optional['QDesignerFormWindowManagerInterface']: ... - def objectInspector(self) -> typing.Optional['QDesignerObjectInspectorInterface']: ... - def propertyEditor(self) -> typing.Optional['QDesignerPropertyEditorInterface']: ... - def widgetBox(self) -> typing.Optional['QDesignerWidgetBoxInterface']: ... - def topLevel(self) -> typing.Optional[QtWidgets.QWidget]: ... - def extensionManager(self) -> typing.Optional['QExtensionManager']: ... - - -class QDesignerFormWindowInterface(QtWidgets.QWidget): - - class FeatureFlag(enum.Flag): - EditFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag - GridFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag - TabOrderFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag - DefaultFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def activateResourceFilePaths(self, paths: typing.Iterable[typing.Optional[str]]) -> typing.Tuple[typing.Optional[int], typing.Optional[str]]: ... - def formContainer(self) -> typing.Optional[QtWidgets.QWidget]: ... - def activeResourceFilePaths(self) -> typing.List[str]: ... - def checkContents(self) -> typing.List[str]: ... - objectRemoved: typing.ClassVar[QtCore.pyqtSignal] - widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] - changed: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - aboutToUnmanageWidget: typing.ClassVar[QtCore.pyqtSignal] - widgetUnmanaged: typing.ClassVar[QtCore.pyqtSignal] - widgetManaged: typing.ClassVar[QtCore.pyqtSignal] - resourceFilesChanged: typing.ClassVar[QtCore.pyqtSignal] - geometryChanged: typing.ClassVar[QtCore.pyqtSignal] - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - featureChanged: typing.ClassVar[QtCore.pyqtSignal] - fileNameChanged: typing.ClassVar[QtCore.pyqtSignal] - mainContainerChanged: typing.ClassVar[QtCore.pyqtSignal] - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def setGrid(self, grid: QtCore.QPoint) -> None: ... - def selectWidget(self, widget: typing.Optional[QtWidgets.QWidget], select: bool = ...) -> None: ... - def clearSelection(self, update: bool = ...) -> None: ... - def setDirty(self, dirty: bool) -> None: ... - def setFeatures(self, f: 'QDesignerFormWindowInterface.FeatureFlag') -> None: ... - def unmanageWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... - def manageWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... - def removeResourceFile(self, path: typing.Optional[str]) -> None: ... - def addResourceFile(self, path: typing.Optional[str]) -> None: ... - def resourceFiles(self) -> typing.List[str]: ... - def emitSelectionChanged(self) -> None: ... - @typing.overload - @staticmethod - def findFormWindow(w: typing.Optional[QtWidgets.QWidget]) -> typing.Optional['QDesignerFormWindowInterface']: ... - @typing.overload - @staticmethod - def findFormWindow(obj: typing.Optional[QtCore.QObject]) -> typing.Optional['QDesignerFormWindowInterface']: ... - def isDirty(self) -> bool: ... - def isManaged(self, widget: typing.Optional[QtWidgets.QWidget]) -> bool: ... - def setMainContainer(self, mainContainer: typing.Optional[QtWidgets.QWidget]) -> None: ... - def mainContainer(self) -> typing.Optional[QtWidgets.QWidget]: ... - def grid(self) -> QtCore.QPoint: ... - def cursor(self) -> typing.Optional['QDesignerFormWindowCursorInterface']: ... - def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... - def setIncludeHints(self, includeHints: typing.Iterable[typing.Optional[str]]) -> None: ... - def includeHints(self) -> typing.List[str]: ... - def setExportMacro(self, exportMacro: typing.Optional[str]) -> None: ... - def exportMacro(self) -> str: ... - def setPixmapFunction(self, pixmapFunction: typing.Optional[str]) -> None: ... - def pixmapFunction(self) -> str: ... - def setLayoutFunction(self, margin: typing.Optional[str], spacing: typing.Optional[str]) -> None: ... - def layoutFunction(self) -> typing.Tuple[typing.Optional[str], typing.Optional[str]]: ... - def setLayoutDefault(self, margin: int, spacing: int) -> None: ... - def layoutDefault(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... - def setComment(self, comment: typing.Optional[str]) -> None: ... - def comment(self) -> str: ... - def setAuthor(self, author: typing.Optional[str]) -> None: ... - def author(self) -> str: ... - def hasFeature(self, f: 'QDesignerFormWindowInterface.FeatureFlag') -> bool: ... - def features(self) -> 'QDesignerFormWindowInterface.FeatureFlag': ... - @typing.overload - def setContents(self, dev: typing.Optional[QtCore.QIODevice], errorMessage: typing.Optional[typing.Optional[str]] = ...) -> bool: ... - @typing.overload - def setContents(self, contents: typing.Optional[str]) -> bool: ... - def contents(self) -> str: ... - def absoluteDir(self) -> QtCore.QDir: ... - def fileName(self) -> str: ... - - -class QDesignerFormWindowCursorInterface(PyQt6.sip.simplewrapper): - - class MoveMode(enum.Enum): - MoveAnchor = ... # type: QDesignerFormWindowCursorInterface.MoveMode - KeepAnchor = ... # type: QDesignerFormWindowCursorInterface.MoveMode - - class MoveOperation(enum.Enum): - NoMove = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Start = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - End = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Next = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Prev = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Left = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Right = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Up = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - Down = ... # type: QDesignerFormWindowCursorInterface.MoveOperation - - def __init__(self) -> None: ... - - def isWidgetSelected(self, widget: typing.Optional[QtWidgets.QWidget]) -> bool: ... - def resetWidgetProperty(self, widget: typing.Optional[QtWidgets.QWidget], name: typing.Optional[str]) -> None: ... - def setWidgetProperty(self, widget: typing.Optional[QtWidgets.QWidget], name: typing.Optional[str], value: typing.Any) -> None: ... - def setProperty(self, name: typing.Optional[str], value: typing.Any) -> None: ... - def selectedWidget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... - def selectedWidgetCount(self) -> int: ... - def hasSelection(self) -> bool: ... - def widget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... - def widgetCount(self) -> int: ... - def current(self) -> typing.Optional[QtWidgets.QWidget]: ... - def setPosition(self, pos: int, mode: 'QDesignerFormWindowCursorInterface.MoveMode' = ...) -> None: ... - def position(self) -> int: ... - def movePosition(self, op: 'QDesignerFormWindowCursorInterface.MoveOperation', mode: 'QDesignerFormWindowCursorInterface.MoveMode' = ...) -> bool: ... - def formWindow(self) -> typing.Optional[QDesignerFormWindowInterface]: ... - - -class QDesignerFormWindowManagerInterface(QtCore.QObject): - - class ActionGroup(enum.Enum): - StyledPreviewActionGroup = ... # type: QDesignerFormWindowManagerInterface.ActionGroup - - class Action(enum.Enum): - CutAction = ... # type: QDesignerFormWindowManagerInterface.Action - CopyAction = ... # type: QDesignerFormWindowManagerInterface.Action - PasteAction = ... # type: QDesignerFormWindowManagerInterface.Action - DeleteAction = ... # type: QDesignerFormWindowManagerInterface.Action - SelectAllAction = ... # type: QDesignerFormWindowManagerInterface.Action - LowerAction = ... # type: QDesignerFormWindowManagerInterface.Action - RaiseAction = ... # type: QDesignerFormWindowManagerInterface.Action - UndoAction = ... # type: QDesignerFormWindowManagerInterface.Action - RedoAction = ... # type: QDesignerFormWindowManagerInterface.Action - HorizontalLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - VerticalLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - SplitHorizontalAction = ... # type: QDesignerFormWindowManagerInterface.Action - SplitVerticalAction = ... # type: QDesignerFormWindowManagerInterface.Action - GridLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - FormLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - BreakLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - AdjustSizeAction = ... # type: QDesignerFormWindowManagerInterface.Action - SimplifyLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action - DefaultPreviewAction = ... # type: QDesignerFormWindowManagerInterface.Action - FormWindowSettingsDialogAction = ... # type: QDesignerFormWindowManagerInterface.Action - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def showPluginDialog(self) -> None: ... - def closeAllPreviews(self) -> None: ... - def showPreview(self) -> None: ... - def actionGroup(self, actionGroup: 'QDesignerFormWindowManagerInterface.ActionGroup') -> typing.Optional[QtGui.QActionGroup]: ... - def action(self, action: 'QDesignerFormWindowManagerInterface.Action') -> typing.Optional[QtGui.QAction]: ... - def setActiveFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... - def removeFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... - def addFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... - formWindowSettingsChanged: typing.ClassVar[QtCore.pyqtSignal] - activeFormWindowChanged: typing.ClassVar[QtCore.pyqtSignal] - formWindowRemoved: typing.ClassVar[QtCore.pyqtSignal] - formWindowAdded: typing.ClassVar[QtCore.pyqtSignal] - def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... - def createFormWindow(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> typing.Optional[QDesignerFormWindowInterface]: ... - def formWindow(self, index: int) -> typing.Optional[QDesignerFormWindowInterface]: ... - def formWindowCount(self) -> int: ... - def activeFormWindow(self) -> typing.Optional[QDesignerFormWindowInterface]: ... - def actionSimplifyLayout(self) -> typing.Optional[QtGui.QAction]: ... - def actionFormLayout(self) -> typing.Optional[QtGui.QAction]: ... - - -class QDesignerObjectInspectorInterface(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... - def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... - - -class QDesignerPropertyEditorInterface(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setReadOnly(self, readOnly: bool) -> None: ... - def setPropertyValue(self, name: typing.Optional[str], value: typing.Any, changed: bool = ...) -> None: ... - def setObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... - propertyChanged: typing.ClassVar[QtCore.pyqtSignal] - def currentPropertyName(self) -> str: ... - def object(self) -> typing.Optional[QtCore.QObject]: ... - def isReadOnly(self) -> bool: ... - def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... - - -class QDesignerWidgetBoxInterface(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def save(self) -> bool: ... - def load(self) -> bool: ... - def fileName(self) -> str: ... - def setFileName(self, file_name: typing.Optional[str]) -> None: ... - - -class QDesignerContainerExtension(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def canRemove(self, index: int) -> bool: ... - def canAddWidget(self) -> bool: ... - def remove(self, index: int) -> None: ... - def insertWidget(self, index: int, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... - def addWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - def currentIndex(self) -> int: ... - def widget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - - -class QDesignerCustomWidgetInterface(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDesignerCustomWidgetInterface') -> None: ... - - def codeTemplate(self) -> str: ... - def domXml(self) -> str: ... - def initialize(self, core: typing.Optional[QDesignerFormEditorInterface]) -> None: ... - def isInitialized(self) -> bool: ... - def createWidget(self, parent: typing.Optional[QtWidgets.QWidget]) -> typing.Optional[QtWidgets.QWidget]: ... - def isContainer(self) -> bool: ... - def icon(self) -> QtGui.QIcon: ... - def includeFile(self) -> str: ... - def whatsThis(self) -> str: ... - def toolTip(self) -> str: ... - def group(self) -> str: ... - def name(self) -> str: ... - - -class QDesignerCustomWidgetCollectionInterface(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDesignerCustomWidgetCollectionInterface') -> None: ... - - def customWidgets(self) -> typing.List[QDesignerCustomWidgetInterface]: ... - - -class QAbstractExtensionFactory(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAbstractExtensionFactory') -> None: ... - - def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - - -class QExtensionFactory(QtCore.QObject, QAbstractExtensionFactory): - - def __init__(self, parent: typing.Optional['QExtensionManager'] = ...) -> None: ... - - def createExtension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional[QtCore.QObject]: ... - def extensionManager(self) -> typing.Optional['QExtensionManager']: ... - def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - - -class QAbstractExtensionManager(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAbstractExtensionManager') -> None: ... - - def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - def unregisterExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str]) -> None: ... - def registerExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str]) -> None: ... - - -class QFormBuilder(QAbstractFormBuilder): - - def __init__(self) -> None: ... - - def customWidgets(self) -> typing.List[QDesignerCustomWidgetInterface]: ... - def setPluginPath(self, pluginPaths: typing.Iterable[typing.Optional[str]]) -> None: ... - def addPluginPath(self, pluginPath: typing.Optional[str]) -> None: ... - def clearPluginPaths(self) -> None: ... - def pluginPaths(self) -> typing.List[str]: ... - - -class QDesignerMemberSheetExtension(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def parameterNames(self, index: int) -> typing.List[QtCore.QByteArray]: ... - def parameterTypes(self, index: int) -> typing.List[QtCore.QByteArray]: ... - def signature(self, index: int) -> str: ... - def declaredInClass(self, index: int) -> str: ... - def inheritedFromWidget(self, index: int) -> bool: ... - def isSlot(self, index: int) -> bool: ... - def isSignal(self, index: int) -> bool: ... - def setVisible(self, index: int, b: bool) -> None: ... - def isVisible(self, index: int) -> bool: ... - def setMemberGroup(self, index: int, group: typing.Optional[str]) -> None: ... - def memberGroup(self, index: int) -> str: ... - def memberName(self, index: int) -> str: ... - def indexOf(self, name: typing.Optional[str]) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - - -class QDesignerPropertySheetExtension(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def isEnabled(self, index: int) -> bool: ... - def setChanged(self, index: int, changed: bool) -> None: ... - def isChanged(self, index: int) -> bool: ... - def setProperty(self, index: int, value: typing.Any) -> None: ... - def property(self, index: int) -> typing.Any: ... - def setAttribute(self, index: int, b: bool) -> None: ... - def isAttribute(self, index: int) -> bool: ... - def setVisible(self, index: int, b: bool) -> None: ... - def isVisible(self, index: int) -> bool: ... - def reset(self, index: int) -> bool: ... - def hasReset(self, index: int) -> bool: ... - def setPropertyGroup(self, index: int, group: typing.Optional[str]) -> None: ... - def propertyGroup(self, index: int) -> str: ... - def propertyName(self, index: int) -> str: ... - def indexOf(self, name: typing.Optional[str]) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - - -class QExtensionManager(QtCore.QObject, QAbstractExtensionManager): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - def unregisterExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str] = ...) -> None: ... - def registerExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str] = ...) -> None: ... - - -class QDesignerTaskMenuExtension(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def preferredEditAction(self) -> typing.Optional[QtGui.QAction]: ... - def taskActions(self) -> typing.List[QtGui.QAction]: ... - - -class QPyDesignerCustomWidgetCollectionPlugin(QtCore.QObject, QDesignerCustomWidgetCollectionInterface): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - -class QPyDesignerCustomWidgetPlugin(QtCore.QObject, QDesignerCustomWidgetInterface): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - -class QPyDesignerMemberSheetExtension(QtCore.QObject, QDesignerMemberSheetExtension): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - -class QPyDesignerPropertySheetExtension(QtCore.QObject, QDesignerPropertySheetExtension): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - -class QPyDesignerTaskMenuExtension(QtCore.QObject, QDesignerTaskMenuExtension): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - -class QPyDesignerContainerExtension(QtCore.QObject, QDesignerContainerExtension): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtGui.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtGui.abi3.so deleted file mode 100644 index 9247c1f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtGui.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtGui.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtGui.pyi deleted file mode 100644 index 14275ad..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtGui.pyi +++ /dev/null @@ -1,8185 +0,0 @@ -# The PEP 484 type hints stub file for the QtGui module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QAbstractFileIconProvider(PyQt6.sip.simplewrapper): - - class Option(enum.Flag): - DontUseCustomDirectoryIcons = ... # type: QAbstractFileIconProvider.Option - - class IconType(enum.Enum): - Computer = ... # type: QAbstractFileIconProvider.IconType - Desktop = ... # type: QAbstractFileIconProvider.IconType - Trashcan = ... # type: QAbstractFileIconProvider.IconType - Network = ... # type: QAbstractFileIconProvider.IconType - Drive = ... # type: QAbstractFileIconProvider.IconType - Folder = ... # type: QAbstractFileIconProvider.IconType - File = ... # type: QAbstractFileIconProvider.IconType - - def __init__(self) -> None: ... - - def options(self) -> 'QAbstractFileIconProvider.Option': ... - def setOptions(self, a0: 'QAbstractFileIconProvider.Option') -> None: ... - def type(self, a0: QtCore.QFileInfo) -> str: ... - @typing.overload - def icon(self, a0: 'QAbstractFileIconProvider.IconType') -> 'QIcon': ... - @typing.overload - def icon(self, a0: QtCore.QFileInfo) -> 'QIcon': ... - - -class QAbstractTextDocumentLayout(QtCore.QObject): - - class Selection(PyQt6.sip.simplewrapper): - - cursor = ... # type: 'QTextCursor' - format = ... # type: 'QTextCharFormat' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAbstractTextDocumentLayout.Selection') -> None: ... - - class PaintContext(PyQt6.sip.simplewrapper): - - clip = ... # type: QtCore.QRectF - cursorPosition = ... # type: int - palette = ... # type: 'QPalette' - selections = ... # type: typing.Iterable['QAbstractTextDocumentLayout.Selection'] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAbstractTextDocumentLayout.PaintContext') -> None: ... - - def __init__(self, doc: typing.Optional['QTextDocument']) -> None: ... - - def blockWithMarkerAt(self, pos: QtCore.QPointF) -> 'QTextBlock': ... - def formatAt(self, pos: QtCore.QPointF) -> 'QTextFormat': ... - def imageAt(self, pos: QtCore.QPointF) -> str: ... - def format(self, pos: int) -> 'QTextCharFormat': ... - def drawInlineObject(self, painter: typing.Optional['QPainter'], rect: QtCore.QRectF, object: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... - def positionInlineObject(self, item: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... - def resizeInlineObject(self, item: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... - def documentChanged(self, from_: int, charsRemoved: int, charsAdded: int) -> None: ... - updateBlock: typing.ClassVar[QtCore.pyqtSignal] - pageCountChanged: typing.ClassVar[QtCore.pyqtSignal] - documentSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - update: typing.ClassVar[QtCore.pyqtSignal] - def handlerForObject(self, objectType: int) -> typing.Optional['QTextObjectInterface']: ... - def unregisterHandler(self, objectType: int, component: typing.Optional[QtCore.QObject] = ...) -> None: ... - def registerHandler(self, objectType: int, component: typing.Optional[QtCore.QObject]) -> None: ... - def document(self) -> typing.Optional['QTextDocument']: ... - def paintDevice(self) -> typing.Optional['QPaintDevice']: ... - def setPaintDevice(self, device: typing.Optional['QPaintDevice']) -> None: ... - def blockBoundingRect(self, block: 'QTextBlock') -> QtCore.QRectF: ... - def frameBoundingRect(self, frame: typing.Optional['QTextFrame']) -> QtCore.QRectF: ... - def documentSize(self) -> QtCore.QSizeF: ... - def pageCount(self) -> int: ... - def anchorAt(self, pos: QtCore.QPointF) -> str: ... - def hitTest(self, point: QtCore.QPointF, accuracy: QtCore.Qt.HitTestAccuracy) -> int: ... - def draw(self, painter: typing.Optional['QPainter'], context: 'QAbstractTextDocumentLayout.PaintContext') -> None: ... - - -class QTextObjectInterface(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextObjectInterface') -> None: ... - - def drawObject(self, painter: typing.Optional['QPainter'], rect: QtCore.QRectF, doc: typing.Optional['QTextDocument'], posInDocument: int, format: 'QTextFormat') -> None: ... - def intrinsicSize(self, doc: typing.Optional['QTextDocument'], posInDocument: int, format: 'QTextFormat') -> QtCore.QSizeF: ... - - -class QAction(QtCore.QObject): - - class Priority(enum.Enum): - LowPriority = ... # type: QAction.Priority - NormalPriority = ... # type: QAction.Priority - HighPriority = ... # type: QAction.Priority - - class MenuRole(enum.Enum): - NoRole = ... # type: QAction.MenuRole - TextHeuristicRole = ... # type: QAction.MenuRole - ApplicationSpecificRole = ... # type: QAction.MenuRole - AboutQtRole = ... # type: QAction.MenuRole - AboutRole = ... # type: QAction.MenuRole - PreferencesRole = ... # type: QAction.MenuRole - QuitRole = ... # type: QAction.MenuRole - - class ActionEvent(enum.Enum): - Trigger = ... # type: QAction.ActionEvent - Hover = ... # type: QAction.ActionEvent - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, icon: 'QIcon', text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - visibleChanged: typing.ClassVar[QtCore.pyqtSignal] - checkableChanged: typing.ClassVar[QtCore.pyqtSignal] - enabledChanged: typing.ClassVar[QtCore.pyqtSignal] - def resetEnabled(self) -> None: ... - def associatedObjects(self) -> typing.List[QtCore.QObject]: ... - def isShortcutVisibleInContextMenu(self) -> bool: ... - def setShortcutVisibleInContextMenu(self, show: bool) -> None: ... - def priority(self) -> 'QAction.Priority': ... - def setPriority(self, priority: 'QAction.Priority') -> None: ... - def isIconVisibleInMenu(self) -> bool: ... - def setIconVisibleInMenu(self, visible: bool) -> None: ... - def setMenu(self, menu: typing.Optional[QMenu]) -> None: ... - def menu(self) -> typing.Optional[QMenu]: ... - def menuRole(self) -> 'QAction.MenuRole': ... - def setMenuRole(self, menuRole: 'QAction.MenuRole') -> None: ... - def autoRepeat(self) -> bool: ... - def setAutoRepeat(self, a0: bool) -> None: ... - def shortcuts(self) -> typing.List['QKeySequence']: ... - @typing.overload - def setShortcuts(self, shortcuts: typing.Iterable[typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]]) -> None: ... - @typing.overload - def setShortcuts(self, a0: 'QKeySequence.StandardKey') -> None: ... - toggled: typing.ClassVar[QtCore.pyqtSignal] - hovered: typing.ClassVar[QtCore.pyqtSignal] - triggered: typing.ClassVar[QtCore.pyqtSignal] - changed: typing.ClassVar[QtCore.pyqtSignal] - def setVisible(self, a0: bool) -> None: ... - def setDisabled(self, b: bool) -> None: ... - def setEnabled(self, a0: bool) -> None: ... - def toggle(self) -> None: ... - def setChecked(self, a0: bool) -> None: ... - def hover(self) -> None: ... - def trigger(self) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def showStatusText(self, object: typing.Optional[QtCore.QObject] = ...) -> bool: ... - def activate(self, event: 'QAction.ActionEvent') -> None: ... - def isVisible(self) -> bool: ... - def isEnabled(self) -> bool: ... - def isChecked(self) -> bool: ... - def setData(self, var: typing.Any) -> None: ... - def data(self) -> typing.Any: ... - def isCheckable(self) -> bool: ... - def setCheckable(self, a0: bool) -> None: ... - def font(self) -> 'QFont': ... - def setFont(self, font: 'QFont') -> None: ... - def shortcutContext(self) -> QtCore.Qt.ShortcutContext: ... - def setShortcutContext(self, context: QtCore.Qt.ShortcutContext) -> None: ... - def shortcut(self) -> 'QKeySequence': ... - def setShortcut(self, shortcut: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> None: ... - def isSeparator(self) -> bool: ... - def setSeparator(self, b: bool) -> None: ... - def whatsThis(self) -> str: ... - def setWhatsThis(self, what: typing.Optional[str]) -> None: ... - def statusTip(self) -> str: ... - def setStatusTip(self, statusTip: typing.Optional[str]) -> None: ... - def toolTip(self) -> str: ... - def setToolTip(self, tip: typing.Optional[str]) -> None: ... - def iconText(self) -> str: ... - def setIconText(self, text: typing.Optional[str]) -> None: ... - def text(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def icon(self) -> 'QIcon': ... - def setIcon(self, icon: 'QIcon') -> None: ... - def actionGroup(self) -> typing.Optional['QActionGroup']: ... - def setActionGroup(self, group: typing.Optional['QActionGroup']) -> None: ... - - -class QActionGroup(QtCore.QObject): - - class ExclusionPolicy(enum.Enum): - None_ = ... # type: QActionGroup.ExclusionPolicy - Exclusive = ... # type: QActionGroup.ExclusionPolicy - ExclusiveOptional = ... # type: QActionGroup.ExclusionPolicy - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - hovered: typing.ClassVar[QtCore.pyqtSignal] - triggered: typing.ClassVar[QtCore.pyqtSignal] - def setExclusionPolicy(self, policy: 'QActionGroup.ExclusionPolicy') -> None: ... - def setExclusive(self, a0: bool) -> None: ... - def setVisible(self, a0: bool) -> None: ... - def setDisabled(self, b: bool) -> None: ... - def setEnabled(self, a0: bool) -> None: ... - def exclusionPolicy(self) -> 'QActionGroup.ExclusionPolicy': ... - def isVisible(self) -> bool: ... - def isEnabled(self) -> bool: ... - def isExclusive(self) -> bool: ... - def checkedAction(self) -> typing.Optional[QAction]: ... - def actions(self) -> typing.List[QAction]: ... - def removeAction(self, a: typing.Optional[QAction]) -> None: ... - @typing.overload - def addAction(self, a: typing.Optional[QAction]) -> typing.Optional[QAction]: ... - @typing.overload - def addAction(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... - @typing.overload - def addAction(self, icon: 'QIcon', text: typing.Optional[str]) -> typing.Optional[QAction]: ... - - -class QBackingStore(PyQt6.sip.simplewrapper): - - def __init__(self, window: typing.Optional['QWindow']) -> None: ... - - def hasStaticContents(self) -> bool: ... - def staticContents(self) -> 'QRegion': ... - def setStaticContents(self, region: 'QRegion') -> None: ... - def endPaint(self) -> None: ... - def beginPaint(self, a0: 'QRegion') -> None: ... - def scroll(self, area: 'QRegion', dx: int, dy: int) -> bool: ... - def size(self) -> QtCore.QSize: ... - def resize(self, size: QtCore.QSize) -> None: ... - def flush(self, region: 'QRegion', window: typing.Optional['QWindow'] = ..., offset: QtCore.QPoint = ...) -> None: ... - def paintDevice(self) -> typing.Optional['QPaintDevice']: ... - def window(self) -> typing.Optional['QWindow']: ... - - -class QPaintDevice(PyQt6.sip.simplewrapper): - - class PaintDeviceMetric(enum.Enum): - PdmWidth = ... # type: QPaintDevice.PaintDeviceMetric - PdmHeight = ... # type: QPaintDevice.PaintDeviceMetric - PdmWidthMM = ... # type: QPaintDevice.PaintDeviceMetric - PdmHeightMM = ... # type: QPaintDevice.PaintDeviceMetric - PdmNumColors = ... # type: QPaintDevice.PaintDeviceMetric - PdmDepth = ... # type: QPaintDevice.PaintDeviceMetric - PdmDpiX = ... # type: QPaintDevice.PaintDeviceMetric - PdmDpiY = ... # type: QPaintDevice.PaintDeviceMetric - PdmPhysicalDpiX = ... # type: QPaintDevice.PaintDeviceMetric - PdmPhysicalDpiY = ... # type: QPaintDevice.PaintDeviceMetric - PdmDevicePixelRatio = ... # type: QPaintDevice.PaintDeviceMetric - PdmDevicePixelRatioScaled = ... # type: QPaintDevice.PaintDeviceMetric - - def __init__(self) -> None: ... - - @staticmethod - def devicePixelRatioFScale() -> float: ... - def devicePixelRatioF(self) -> float: ... - def metric(self, metric: 'QPaintDevice.PaintDeviceMetric') -> int: ... - def devicePixelRatio(self) -> float: ... - def colorCount(self) -> int: ... - def paintingActive(self) -> bool: ... - def depth(self) -> int: ... - def physicalDpiY(self) -> int: ... - def physicalDpiX(self) -> int: ... - def logicalDpiY(self) -> int: ... - def logicalDpiX(self) -> int: ... - def heightMM(self) -> int: ... - def widthMM(self) -> int: ... - def height(self) -> int: ... - def width(self) -> int: ... - def paintEngine(self) -> typing.Optional['QPaintEngine']: ... - - -class QPixmap(QPaintDevice): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, w: int, h: int) -> None: ... - @typing.overload - def __init__(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def __init__(self, xpm: typing.List[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QPixmap') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def deviceIndependentSize(self) -> QtCore.QSizeF: ... - def setDevicePixelRatio(self, scaleFactor: float) -> None: ... - def devicePixelRatio(self) -> float: ... - def swap(self, other: 'QPixmap') -> None: ... - @typing.overload - def scroll(self, dx: int, dy: int, rect: QtCore.QRect) -> typing.Optional['QRegion']: ... - @typing.overload - def scroll(self, dx: int, dy: int, x: int, y: int, width: int, height: int) -> typing.Optional['QRegion']: ... - def cacheKey(self) -> int: ... - @staticmethod - def trueMatrix(m: 'QTransform', w: int, h: int) -> 'QTransform': ... - def transformed(self, transform: 'QTransform', mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... - def metric(self, a0: QPaintDevice.PaintDeviceMetric) -> int: ... - def paintEngine(self) -> typing.Optional['QPaintEngine']: ... - def isQBitmap(self) -> bool: ... - def detach(self) -> None: ... - @typing.overload - def copy(self, rect: QtCore.QRect = ...) -> 'QPixmap': ... - @typing.overload - def copy(self, ax: int, ay: int, awidth: int, aheight: int) -> 'QPixmap': ... - @typing.overload - def save(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... - @typing.overload - def save(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... - @typing.overload - def loadFromData(self, buf: typing.Optional[PyQt6.sip.array[bytes]], format: typing.Optional[str] = ..., flags: QtCore.Qt.ImageConversionFlag = ...) -> bool: ... - @typing.overload - def loadFromData(self, buf: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], format: typing.Optional[str] = ..., flags: QtCore.Qt.ImageConversionFlag = ...) -> bool: ... - def load(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., flags: QtCore.Qt.ImageConversionFlag = ...) -> bool: ... - def convertFromImage(self, img: 'QImage', flags: QtCore.Qt.ImageConversionFlag = ...) -> bool: ... - @staticmethod - def fromImageReader(imageReader: typing.Optional['QImageReader'], flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QPixmap': ... - @staticmethod - def fromImage(image: 'QImage', flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QPixmap': ... - def toImage(self) -> 'QImage': ... - def scaledToHeight(self, height: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... - def scaledToWidth(self, width: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... - @typing.overload - def scaled(self, width: int, height: int, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... - @typing.overload - def scaled(self, size: QtCore.QSize, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... - def createMaskFromColor(self, maskColor: typing.Union['QColor', QtCore.Qt.GlobalColor, int], mode: QtCore.Qt.MaskMode = ...) -> 'QBitmap': ... - def createHeuristicMask(self, clipTight: bool = ...) -> 'QBitmap': ... - def hasAlphaChannel(self) -> bool: ... - def hasAlpha(self) -> bool: ... - def setMask(self, a0: 'QBitmap') -> None: ... - def mask(self) -> 'QBitmap': ... - def fill(self, color: typing.Union['QColor', QtCore.Qt.GlobalColor, int] = ...) -> None: ... - @staticmethod - def defaultDepth() -> int: ... - def depth(self) -> int: ... - def rect(self) -> QtCore.QRect: ... - def size(self) -> QtCore.QSize: ... - def height(self) -> int: ... - def width(self) -> int: ... - def devType(self) -> int: ... - def isNull(self) -> bool: ... - - -class QBitmap(QPixmap): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, w: int, h: int) -> None: ... - @typing.overload - def __init__(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QBitmap') -> None: ... - - def swap(self, other: 'QBitmap') -> None: ... - def transformed(self, matrix: 'QTransform') -> 'QBitmap': ... - @staticmethod - def fromData(size: QtCore.QSize, bits: typing.Optional[bytes], format: 'QImage.Format' = ...) -> 'QBitmap': ... - @staticmethod - def fromPixmap(pixmap: QPixmap) -> 'QBitmap': ... - @staticmethod - def fromImage(image: 'QImage', flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QBitmap': ... - def clear(self) -> None: ... - - -class QColor(PyQt6.sip.simplewrapper): - - class NameFormat(enum.Enum): - HexRgb = ... # type: QColor.NameFormat - HexArgb = ... # type: QColor.NameFormat - - class Spec(enum.Enum): - Invalid = ... # type: QColor.Spec - Rgb = ... # type: QColor.Spec - Hsv = ... # type: QColor.Spec - Cmyk = ... # type: QColor.Spec - Hsl = ... # type: QColor.Spec - ExtendedRgb = ... # type: QColor.Spec - - @typing.overload - def __init__(self, color: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def __init__(self, rgb: int) -> None: ... - @typing.overload - def __init__(self, rgba64: 'QRgba64') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, r: int, g: int, b: int, alpha: int = ...) -> None: ... - @typing.overload - def __init__(self, name: str) -> None: ... - @typing.overload - def __init__(self, a0: 'QColor') -> None: ... - - @staticmethod - def isValidColorName(a0: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @staticmethod - def fromString(name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> 'QColor': ... - def toExtendedRgb(self) -> 'QColor': ... - @typing.overload - @staticmethod - def fromRgba64(r: int, g: int, b: int, alpha: int = ...) -> 'QColor': ... - @typing.overload - @staticmethod - def fromRgba64(rgba: 'QRgba64') -> 'QColor': ... - def setRgba64(self, rgba: 'QRgba64') -> None: ... - def rgba64(self) -> 'QRgba64': ... - @staticmethod - def isValidColor(name: typing.Optional[str]) -> bool: ... - @staticmethod - def fromHslF(h: float, s: float, l: float, alpha: float = ...) -> 'QColor': ... - @staticmethod - def fromHsl(h: int, s: int, l: int, alpha: int = ...) -> 'QColor': ... - def toHsl(self) -> 'QColor': ... - def setHslF(self, h: float, s: float, l: float, alpha: float = ...) -> None: ... - def getHslF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def setHsl(self, h: int, s: int, l: int, alpha: int = ...) -> None: ... - def getHsl(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def lightnessF(self) -> float: ... - def hslSaturationF(self) -> float: ... - def hslHueF(self) -> float: ... - def lightness(self) -> int: ... - def hslSaturation(self) -> int: ... - def hslHue(self) -> int: ... - def hsvSaturationF(self) -> float: ... - def hsvHueF(self) -> float: ... - def hsvSaturation(self) -> int: ... - def hsvHue(self) -> int: ... - def darker(self, factor: int = ...) -> 'QColor': ... - def lighter(self, factor: int = ...) -> 'QColor': ... - def isValid(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def fromCmykF(c: float, m: float, y: float, k: float, alpha: float = ...) -> 'QColor': ... - @staticmethod - def fromCmyk(c: int, m: int, y: int, k: int, alpha: int = ...) -> 'QColor': ... - @staticmethod - def fromHsvF(h: float, s: float, v: float, alpha: float = ...) -> 'QColor': ... - @staticmethod - def fromHsv(h: int, s: int, v: int, alpha: int = ...) -> 'QColor': ... - @staticmethod - def fromRgbF(r: float, g: float, b: float, alpha: float = ...) -> 'QColor': ... - @staticmethod - def fromRgba(rgba: int) -> 'QColor': ... - @typing.overload - @staticmethod - def fromRgb(rgb: int) -> 'QColor': ... - @typing.overload - @staticmethod - def fromRgb(r: int, g: int, b: int, alpha: int = ...) -> 'QColor': ... - def convertTo(self, colorSpec: 'QColor.Spec') -> 'QColor': ... - def toCmyk(self) -> 'QColor': ... - def toHsv(self) -> 'QColor': ... - def toRgb(self) -> 'QColor': ... - def setCmykF(self, c: float, m: float, y: float, k: float, alpha: float = ...) -> None: ... - def getCmykF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def setCmyk(self, c: int, m: int, y: int, k: int, alpha: int = ...) -> None: ... - def getCmyk(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def blackF(self) -> float: ... - def yellowF(self) -> float: ... - def magentaF(self) -> float: ... - def cyanF(self) -> float: ... - def black(self) -> int: ... - def yellow(self) -> int: ... - def magenta(self) -> int: ... - def cyan(self) -> int: ... - def setHsvF(self, h: float, s: float, v: float, alpha: float = ...) -> None: ... - def getHsvF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def setHsv(self, h: int, s: int, v: int, alpha: int = ...) -> None: ... - def getHsv(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def valueF(self) -> float: ... - def saturationF(self) -> float: ... - def hueF(self) -> float: ... - def value(self) -> int: ... - def saturation(self) -> int: ... - def hue(self) -> int: ... - def rgb(self) -> int: ... - def setRgba(self, rgba: int) -> None: ... - def rgba(self) -> int: ... - def setRgbF(self, r: float, g: float, b: float, alpha: float = ...) -> None: ... - def getRgbF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - @typing.overload - def setRgb(self, r: int, g: int, b: int, alpha: int = ...) -> None: ... - @typing.overload - def setRgb(self, rgb: int) -> None: ... - def getRgb(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def setBlueF(self, blue: float) -> None: ... - def setGreenF(self, green: float) -> None: ... - def setRedF(self, red: float) -> None: ... - def blueF(self) -> float: ... - def greenF(self) -> float: ... - def redF(self) -> float: ... - def setBlue(self, blue: int) -> None: ... - def setGreen(self, green: int) -> None: ... - def setRed(self, red: int) -> None: ... - def blue(self) -> int: ... - def green(self) -> int: ... - def red(self) -> int: ... - def setAlphaF(self, alpha: float) -> None: ... - def alphaF(self) -> float: ... - def setAlpha(self, alpha: int) -> None: ... - def alpha(self) -> int: ... - def spec(self) -> 'QColor.Spec': ... - @staticmethod - def colorNames() -> typing.List[str]: ... - def setNamedColor(self, name: str) -> None: ... - def name(self, format: 'QColor.NameFormat' = ...) -> str: ... - - -class QColorConstants(PyQt6.sip.simplewrapper): - - class Svg(PyQt6.sip.simplewrapper): - - aliceblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - antiquewhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - aqua = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - aquamarine = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - azure = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - beige = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - bisque = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - black = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - blanchedalmond = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - blue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - blueviolet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - brown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - burlywood = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - cadetblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - chartreuse = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - chocolate = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - coral = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - cornflowerblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - cornsilk = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - crimson = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - cyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkcyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkgoldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkkhaki = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkmagenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkolivegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkorange = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkorchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darksalmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkslateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkslategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkslategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - darkviolet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - deeppink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - deepskyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - dimgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - dimgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - dodgerblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - firebrick = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - floralwhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - forestgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - fuchsia = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - gainsboro = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - ghostwhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - gold = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - goldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - gray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - green = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - greenyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - grey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - honeydew = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - hotpink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - indianred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - indigo = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - ivory = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - khaki = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lavender = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lavenderblush = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lawngreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lemonchiffon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightcoral = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightcyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightgoldenrodyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightpink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightsalmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightskyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightslategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightslategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightsteelblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lightyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - lime = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - limegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - linen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - magenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - maroon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumaquamarine = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumorchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumpurple = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumslateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumspringgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mediumvioletred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - midnightblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mintcream = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - mistyrose = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - moccasin = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - navajowhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - navy = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - oldlace = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - olive = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - olivedrab = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - orange = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - orangered = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - orchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - palegoldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - palegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - paleturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - palevioletred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - papayawhip = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - peachpuff = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - peru = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - pink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - plum = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - powderblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - purple = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - red = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - rosybrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - royalblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - saddlebrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - salmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - sandybrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - seagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - seashell = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - sienna = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - silver = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - skyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - slateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - slategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - slategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - snow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - springgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - steelblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - tan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - teal = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - thistle = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - tomato = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - turquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - violet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - wheat = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - white = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - whitesmoke = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - yellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - yellowgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - - Black = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Blue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Color0 = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Color1 = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Cyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkBlue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkCyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkGray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkGreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkMagenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkRed = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - DarkYellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Gray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Green = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - LightGray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Magenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Red = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Transparent = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - White = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - Yellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor, int] - - -class QBrush(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, bs: QtCore.Qt.BrushStyle) -> None: ... - @typing.overload - def __init__(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int], style: QtCore.Qt.BrushStyle = ...) -> None: ... - @typing.overload - def __init__(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int], pixmap: QPixmap) -> None: ... - @typing.overload - def __init__(self, pixmap: QPixmap) -> None: ... - @typing.overload - def __init__(self, image: 'QImage') -> None: ... - @typing.overload - def __init__(self, brush: typing.Union['QBrush', typing.Union[QColor, QtCore.Qt.GlobalColor, int], 'QGradient']) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def swap(self, other: 'QBrush') -> None: ... - def transform(self) -> 'QTransform': ... - def setTransform(self, a0: 'QTransform') -> None: ... - def textureImage(self) -> 'QImage': ... - def setTextureImage(self, image: 'QImage') -> None: ... - def color(self) -> QColor: ... - def style(self) -> QtCore.Qt.BrushStyle: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isOpaque(self) -> bool: ... - def gradient(self) -> typing.Optional['QGradient']: ... - @typing.overload - def setColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setColor(self, acolor: QtCore.Qt.GlobalColor) -> None: ... - def setTexture(self, pixmap: QPixmap) -> None: ... - def texture(self) -> QPixmap: ... - def setStyle(self, a0: QtCore.Qt.BrushStyle) -> None: ... - - -class QGradient(PyQt6.sip.simplewrapper): - - class Preset(enum.Enum): - WarmFlame = ... # type: QGradient.Preset - NightFade = ... # type: QGradient.Preset - SpringWarmth = ... # type: QGradient.Preset - JuicyPeach = ... # type: QGradient.Preset - YoungPassion = ... # type: QGradient.Preset - LadyLips = ... # type: QGradient.Preset - SunnyMorning = ... # type: QGradient.Preset - RainyAshville = ... # type: QGradient.Preset - FrozenDreams = ... # type: QGradient.Preset - WinterNeva = ... # type: QGradient.Preset - DustyGrass = ... # type: QGradient.Preset - TemptingAzure = ... # type: QGradient.Preset - HeavyRain = ... # type: QGradient.Preset - AmyCrisp = ... # type: QGradient.Preset - MeanFruit = ... # type: QGradient.Preset - DeepBlue = ... # type: QGradient.Preset - RipeMalinka = ... # type: QGradient.Preset - CloudyKnoxville = ... # type: QGradient.Preset - MalibuBeach = ... # type: QGradient.Preset - NewLife = ... # type: QGradient.Preset - TrueSunset = ... # type: QGradient.Preset - MorpheusDen = ... # type: QGradient.Preset - RareWind = ... # type: QGradient.Preset - NearMoon = ... # type: QGradient.Preset - WildApple = ... # type: QGradient.Preset - SaintPetersburg = ... # type: QGradient.Preset - PlumPlate = ... # type: QGradient.Preset - EverlastingSky = ... # type: QGradient.Preset - HappyFisher = ... # type: QGradient.Preset - Blessing = ... # type: QGradient.Preset - SharpeyeEagle = ... # type: QGradient.Preset - LadogaBottom = ... # type: QGradient.Preset - LemonGate = ... # type: QGradient.Preset - ItmeoBranding = ... # type: QGradient.Preset - ZeusMiracle = ... # type: QGradient.Preset - OldHat = ... # type: QGradient.Preset - StarWine = ... # type: QGradient.Preset - HappyAcid = ... # type: QGradient.Preset - AwesomePine = ... # type: QGradient.Preset - NewYork = ... # type: QGradient.Preset - ShyRainbow = ... # type: QGradient.Preset - MixedHopes = ... # type: QGradient.Preset - FlyHigh = ... # type: QGradient.Preset - StrongBliss = ... # type: QGradient.Preset - FreshMilk = ... # type: QGradient.Preset - SnowAgain = ... # type: QGradient.Preset - FebruaryInk = ... # type: QGradient.Preset - KindSteel = ... # type: QGradient.Preset - SoftGrass = ... # type: QGradient.Preset - GrownEarly = ... # type: QGradient.Preset - SharpBlues = ... # type: QGradient.Preset - ShadyWater = ... # type: QGradient.Preset - DirtyBeauty = ... # type: QGradient.Preset - GreatWhale = ... # type: QGradient.Preset - TeenNotebook = ... # type: QGradient.Preset - PoliteRumors = ... # type: QGradient.Preset - SweetPeriod = ... # type: QGradient.Preset - WideMatrix = ... # type: QGradient.Preset - SoftCherish = ... # type: QGradient.Preset - RedSalvation = ... # type: QGradient.Preset - BurningSpring = ... # type: QGradient.Preset - NightParty = ... # type: QGradient.Preset - SkyGlider = ... # type: QGradient.Preset - HeavenPeach = ... # type: QGradient.Preset - PurpleDivision = ... # type: QGradient.Preset - AquaSplash = ... # type: QGradient.Preset - SpikyNaga = ... # type: QGradient.Preset - LoveKiss = ... # type: QGradient.Preset - CleanMirror = ... # type: QGradient.Preset - PremiumDark = ... # type: QGradient.Preset - ColdEvening = ... # type: QGradient.Preset - CochitiLake = ... # type: QGradient.Preset - SummerGames = ... # type: QGradient.Preset - PassionateBed = ... # type: QGradient.Preset - MountainRock = ... # type: QGradient.Preset - DesertHump = ... # type: QGradient.Preset - JungleDay = ... # type: QGradient.Preset - PhoenixStart = ... # type: QGradient.Preset - OctoberSilence = ... # type: QGradient.Preset - FarawayRiver = ... # type: QGradient.Preset - AlchemistLab = ... # type: QGradient.Preset - OverSun = ... # type: QGradient.Preset - PremiumWhite = ... # type: QGradient.Preset - MarsParty = ... # type: QGradient.Preset - EternalConstance = ... # type: QGradient.Preset - JapanBlush = ... # type: QGradient.Preset - SmilingRain = ... # type: QGradient.Preset - CloudyApple = ... # type: QGradient.Preset - BigMango = ... # type: QGradient.Preset - HealthyWater = ... # type: QGradient.Preset - AmourAmour = ... # type: QGradient.Preset - RiskyConcrete = ... # type: QGradient.Preset - StrongStick = ... # type: QGradient.Preset - ViciousStance = ... # type: QGradient.Preset - PaloAlto = ... # type: QGradient.Preset - HappyMemories = ... # type: QGradient.Preset - MidnightBloom = ... # type: QGradient.Preset - Crystalline = ... # type: QGradient.Preset - PartyBliss = ... # type: QGradient.Preset - ConfidentCloud = ... # type: QGradient.Preset - LeCocktail = ... # type: QGradient.Preset - RiverCity = ... # type: QGradient.Preset - FrozenBerry = ... # type: QGradient.Preset - ChildCare = ... # type: QGradient.Preset - FlyingLemon = ... # type: QGradient.Preset - NewRetrowave = ... # type: QGradient.Preset - HiddenJaguar = ... # type: QGradient.Preset - AboveTheSky = ... # type: QGradient.Preset - Nega = ... # type: QGradient.Preset - DenseWater = ... # type: QGradient.Preset - Seashore = ... # type: QGradient.Preset - MarbleWall = ... # type: QGradient.Preset - CheerfulCaramel = ... # type: QGradient.Preset - NightSky = ... # type: QGradient.Preset - MagicLake = ... # type: QGradient.Preset - YoungGrass = ... # type: QGradient.Preset - ColorfulPeach = ... # type: QGradient.Preset - GentleCare = ... # type: QGradient.Preset - PlumBath = ... # type: QGradient.Preset - HappyUnicorn = ... # type: QGradient.Preset - AfricanField = ... # type: QGradient.Preset - SolidStone = ... # type: QGradient.Preset - OrangeJuice = ... # type: QGradient.Preset - GlassWater = ... # type: QGradient.Preset - NorthMiracle = ... # type: QGradient.Preset - FruitBlend = ... # type: QGradient.Preset - MillenniumPine = ... # type: QGradient.Preset - HighFlight = ... # type: QGradient.Preset - MoleHall = ... # type: QGradient.Preset - SpaceShift = ... # type: QGradient.Preset - ForestInei = ... # type: QGradient.Preset - RoyalGarden = ... # type: QGradient.Preset - RichMetal = ... # type: QGradient.Preset - JuicyCake = ... # type: QGradient.Preset - SmartIndigo = ... # type: QGradient.Preset - SandStrike = ... # type: QGradient.Preset - NorseBeauty = ... # type: QGradient.Preset - AquaGuidance = ... # type: QGradient.Preset - SunVeggie = ... # type: QGradient.Preset - SeaLord = ... # type: QGradient.Preset - BlackSea = ... # type: QGradient.Preset - GrassShampoo = ... # type: QGradient.Preset - LandingAircraft = ... # type: QGradient.Preset - WitchDance = ... # type: QGradient.Preset - SleeplessNight = ... # type: QGradient.Preset - AngelCare = ... # type: QGradient.Preset - CrystalRiver = ... # type: QGradient.Preset - SoftLipstick = ... # type: QGradient.Preset - SaltMountain = ... # type: QGradient.Preset - PerfectWhite = ... # type: QGradient.Preset - FreshOasis = ... # type: QGradient.Preset - StrictNovember = ... # type: QGradient.Preset - MorningSalad = ... # type: QGradient.Preset - DeepRelief = ... # type: QGradient.Preset - SeaStrike = ... # type: QGradient.Preset - NightCall = ... # type: QGradient.Preset - SupremeSky = ... # type: QGradient.Preset - LightBlue = ... # type: QGradient.Preset - MindCrawl = ... # type: QGradient.Preset - LilyMeadow = ... # type: QGradient.Preset - SugarLollipop = ... # type: QGradient.Preset - SweetDessert = ... # type: QGradient.Preset - MagicRay = ... # type: QGradient.Preset - TeenParty = ... # type: QGradient.Preset - FrozenHeat = ... # type: QGradient.Preset - GagarinView = ... # type: QGradient.Preset - FabledSunset = ... # type: QGradient.Preset - PerfectBlue = ... # type: QGradient.Preset - NumPresets = ... # type: QGradient.Preset - - class Spread(enum.Enum): - PadSpread = ... # type: QGradient.Spread - ReflectSpread = ... # type: QGradient.Spread - RepeatSpread = ... # type: QGradient.Spread - - class Type(enum.Enum): - LinearGradient = ... # type: QGradient.Type - RadialGradient = ... # type: QGradient.Type - ConicalGradient = ... # type: QGradient.Type - NoGradient = ... # type: QGradient.Type - - class CoordinateMode(enum.Enum): - LogicalMode = ... # type: QGradient.CoordinateMode - StretchToDeviceMode = ... # type: QGradient.CoordinateMode - ObjectBoundingMode = ... # type: QGradient.CoordinateMode - ObjectMode = ... # type: QGradient.CoordinateMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QGradient.Preset') -> None: ... - @typing.overload - def __init__(self, a0: 'QGradient') -> None: ... - - def setCoordinateMode(self, mode: 'QGradient.CoordinateMode') -> None: ... - def coordinateMode(self) -> 'QGradient.CoordinateMode': ... - def setSpread(self, aspread: 'QGradient.Spread') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def stops(self) -> typing.List[typing.Tuple[float, QColor]]: ... - def setStops(self, stops: typing.Iterable[typing.Tuple[float, typing.Union[QColor, QtCore.Qt.GlobalColor, int]]]) -> None: ... - def setColorAt(self, pos: float, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def spread(self) -> 'QGradient.Spread': ... - def type(self) -> 'QGradient.Type': ... - - -class QLinearGradient(QGradient): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, start: QtCore.QPointF, finalStop: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, xStart: float, yStart: float, xFinalStop: float, yFinalStop: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QLinearGradient') -> None: ... - - @typing.overload - def setFinalStop(self, stop: QtCore.QPointF) -> None: ... - @typing.overload - def setFinalStop(self, x: float, y: float) -> None: ... - @typing.overload - def setStart(self, start: QtCore.QPointF) -> None: ... - @typing.overload - def setStart(self, x: float, y: float) -> None: ... - def finalStop(self) -> QtCore.QPointF: ... - def start(self) -> QtCore.QPointF: ... - - -class QRadialGradient(QGradient): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, center: QtCore.QPointF, radius: float, focalPoint: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, center: QtCore.QPointF, centerRadius: float, focalPoint: QtCore.QPointF, focalRadius: float) -> None: ... - @typing.overload - def __init__(self, center: QtCore.QPointF, radius: float) -> None: ... - @typing.overload - def __init__(self, cx: float, cy: float, radius: float, fx: float, fy: float) -> None: ... - @typing.overload - def __init__(self, cx: float, cy: float, centerRadius: float, fx: float, fy: float, focalRadius: float) -> None: ... - @typing.overload - def __init__(self, cx: float, cy: float, radius: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QRadialGradient') -> None: ... - - def setFocalRadius(self, radius: float) -> None: ... - def focalRadius(self) -> float: ... - def setCenterRadius(self, radius: float) -> None: ... - def centerRadius(self) -> float: ... - def setRadius(self, radius: float) -> None: ... - @typing.overload - def setFocalPoint(self, focalPoint: QtCore.QPointF) -> None: ... - @typing.overload - def setFocalPoint(self, x: float, y: float) -> None: ... - @typing.overload - def setCenter(self, center: QtCore.QPointF) -> None: ... - @typing.overload - def setCenter(self, x: float, y: float) -> None: ... - def radius(self) -> float: ... - def focalPoint(self) -> QtCore.QPointF: ... - def center(self) -> QtCore.QPointF: ... - - -class QConicalGradient(QGradient): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, center: QtCore.QPointF, startAngle: float) -> None: ... - @typing.overload - def __init__(self, cx: float, cy: float, startAngle: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QConicalGradient') -> None: ... - - def setAngle(self, angle: float) -> None: ... - @typing.overload - def setCenter(self, center: QtCore.QPointF) -> None: ... - @typing.overload - def setCenter(self, x: float, y: float) -> None: ... - def angle(self) -> float: ... - def center(self) -> QtCore.QPointF: ... - - -class QClipboard(QtCore.QObject): - - class Mode(enum.Enum): - Clipboard = ... # type: QClipboard.Mode - Selection = ... # type: QClipboard.Mode - FindBuffer = ... # type: QClipboard.Mode - - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - findBufferChanged: typing.ClassVar[QtCore.pyqtSignal] - dataChanged: typing.ClassVar[QtCore.pyqtSignal] - changed: typing.ClassVar[QtCore.pyqtSignal] - def setPixmap(self, a0: QPixmap, mode: 'QClipboard.Mode' = ...) -> None: ... - def setImage(self, a0: 'QImage', mode: 'QClipboard.Mode' = ...) -> None: ... - def pixmap(self, mode: 'QClipboard.Mode' = ...) -> QPixmap: ... - def image(self, mode: 'QClipboard.Mode' = ...) -> 'QImage': ... - def setMimeData(self, data: typing.Optional[QtCore.QMimeData], mode: 'QClipboard.Mode' = ...) -> None: ... - def mimeData(self, mode: 'QClipboard.Mode' = ...) -> typing.Optional[QtCore.QMimeData]: ... - def setText(self, a0: typing.Optional[str], mode: 'QClipboard.Mode' = ...) -> None: ... - @typing.overload - def text(self, mode: 'QClipboard.Mode' = ...) -> str: ... - @typing.overload - def text(self, subtype: typing.Optional[str], mode: 'QClipboard.Mode' = ...) -> typing.Tuple[str, str]: ... - def ownsSelection(self) -> bool: ... - def ownsFindBuffer(self) -> bool: ... - def ownsClipboard(self) -> bool: ... - def supportsSelection(self) -> bool: ... - def supportsFindBuffer(self) -> bool: ... - def clear(self, mode: 'QClipboard.Mode' = ...) -> None: ... - - -class QColorSpace(PyQt6.sip.simplewrapper): - - class TransferFunction(enum.Enum): - Custom = ... # type: QColorSpace.TransferFunction - Linear = ... # type: QColorSpace.TransferFunction - Gamma = ... # type: QColorSpace.TransferFunction - SRgb = ... # type: QColorSpace.TransferFunction - ProPhotoRgb = ... # type: QColorSpace.TransferFunction - - class Primaries(enum.Enum): - Custom = ... # type: QColorSpace.Primaries - SRgb = ... # type: QColorSpace.Primaries - AdobeRgb = ... # type: QColorSpace.Primaries - DciP3D65 = ... # type: QColorSpace.Primaries - ProPhotoRgb = ... # type: QColorSpace.Primaries - - class NamedColorSpace(enum.Enum): - SRgb = ... # type: QColorSpace.NamedColorSpace - SRgbLinear = ... # type: QColorSpace.NamedColorSpace - AdobeRgb = ... # type: QColorSpace.NamedColorSpace - DisplayP3 = ... # type: QColorSpace.NamedColorSpace - ProPhotoRgb = ... # type: QColorSpace.NamedColorSpace - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, namedColorSpace: 'QColorSpace.NamedColorSpace') -> None: ... - @typing.overload - def __init__(self, primaries: 'QColorSpace.Primaries', fun: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... - @typing.overload - def __init__(self, primaries: 'QColorSpace.Primaries', gamma: float) -> None: ... - @typing.overload - def __init__(self, primaries: 'QColorSpace.Primaries', transferFunctionTable: typing.Iterable[int]) -> None: ... - @typing.overload - def __init__(self, whitePoint: QtCore.QPointF, redPoint: QtCore.QPointF, greenPoint: QtCore.QPointF, bluePoint: QtCore.QPointF, fun: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... - @typing.overload - def __init__(self, whitePoint: QtCore.QPointF, redPoint: QtCore.QPointF, greenPoint: QtCore.QPointF, bluePoint: QtCore.QPointF, redTransferFunctionTable: typing.Iterable[int], greenTransferFunctionTable: typing.Iterable[int], blueTransferFunctionTable: typing.Iterable[int]) -> None: ... - @typing.overload - def __init__(self, whitePoint: QtCore.QPointF, redPoint: QtCore.QPointF, greenPoint: QtCore.QPointF, bluePoint: QtCore.QPointF, transferFunctionTable: typing.Iterable[int]) -> None: ... - @typing.overload - def __init__(self, colorSpace: 'QColorSpace') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setDescription(self, description: typing.Optional[str]) -> None: ... - def description(self) -> str: ... - def transformationToColorSpace(self, colorspace: 'QColorSpace') -> 'QColorTransform': ... - def iccProfile(self) -> QtCore.QByteArray: ... - @staticmethod - def fromIccProfile(iccProfile: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> 'QColorSpace': ... - def isValid(self) -> bool: ... - @typing.overload - def setPrimaries(self, primariesId: 'QColorSpace.Primaries') -> None: ... - @typing.overload - def setPrimaries(self, whitePoint: QtCore.QPointF, redPoint: QtCore.QPointF, greenPoint: QtCore.QPointF, bluePoint: QtCore.QPointF) -> None: ... - def withTransferFunctions(self, redTransferFunctionTable: typing.Iterable[int], greenTransferFunctionTable: typing.Iterable[int], blueTransferFunctionTable: typing.Iterable[int]) -> 'QColorSpace': ... - @typing.overload - def withTransferFunction(self, transferFunctionTable: typing.Iterable[int]) -> 'QColorSpace': ... - @typing.overload - def withTransferFunction(self, transferFunction: 'QColorSpace.TransferFunction', gamma: float = ...) -> 'QColorSpace': ... - def setTransferFunctions(self, redTransferFunctionTable: typing.Iterable[int], greenTransferFunctionTable: typing.Iterable[int], blueTransferFunctionTable: typing.Iterable[int]) -> None: ... - @typing.overload - def setTransferFunction(self, transferFunction: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... - @typing.overload - def setTransferFunction(self, transferFunctionTable: typing.Iterable[int]) -> None: ... - def gamma(self) -> float: ... - def transferFunction(self) -> 'QColorSpace.TransferFunction': ... - def primaries(self) -> 'QColorSpace.Primaries': ... - def swap(self, colorSpace: 'QColorSpace') -> None: ... - - -class QColorTransform(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, colorTransform: 'QColorTransform') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def isIdentity(self) -> bool: ... - @typing.overload - def map(self, argb: int) -> int: ... - @typing.overload - def map(self, rgba64: 'QRgba64') -> 'QRgba64': ... - @typing.overload - def map(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> QColor: ... - def swap(self, other: 'QColorTransform') -> None: ... - - -class QCursor(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, bitmap: QBitmap, mask: QBitmap, hotX: int = ..., hotY: int = ...) -> None: ... - @typing.overload - def __init__(self, pixmap: QPixmap, hotX: int = ..., hotY: int = ...) -> None: ... - @typing.overload - def __init__(self, cursor: typing.Union['QCursor', QtCore.Qt.CursorShape]) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: typing.Union['QCursor', QtCore.Qt.CursorShape]) -> None: ... - @typing.overload - @staticmethod - def setPos(x: int, y: int) -> None: ... - @typing.overload - @staticmethod - def setPos(p: QtCore.QPoint) -> None: ... - @typing.overload - @staticmethod - def setPos(screen: typing.Optional['QScreen'], x: int, y: int) -> None: ... - @typing.overload - @staticmethod - def setPos(screen: typing.Optional['QScreen'], p: QtCore.QPoint) -> None: ... - @typing.overload - @staticmethod - def pos() -> QtCore.QPoint: ... - @typing.overload - @staticmethod - def pos(screen: typing.Optional['QScreen']) -> QtCore.QPoint: ... - def hotSpot(self) -> QtCore.QPoint: ... - def pixmap(self) -> QPixmap: ... - def mask(self) -> QBitmap: ... - def bitmap(self) -> QBitmap: ... - def setShape(self, newShape: QtCore.Qt.CursorShape) -> None: ... - def shape(self) -> QtCore.Qt.CursorShape: ... - - -class QDesktopServices(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDesktopServices') -> None: ... - - @staticmethod - def unsetUrlHandler(scheme: typing.Optional[str]) -> None: ... - @typing.overload - @staticmethod - def setUrlHandler(scheme: typing.Optional[str], receiver: typing.Optional[QtCore.QObject], method: typing.Optional[str]) -> None: ... - @typing.overload - @staticmethod - def setUrlHandler(scheme: typing.Optional[str], method: typing.Callable[[QtCore.QUrl], None]) -> None: ... - @staticmethod - def openUrl(url: QtCore.QUrl) -> bool: ... - - -class QDrag(QtCore.QObject): - - def __init__(self, dragSource: typing.Optional[QtCore.QObject]) -> None: ... - - @staticmethod - def cancel() -> None: ... - def defaultAction(self) -> QtCore.Qt.DropAction: ... - def supportedActions(self) -> QtCore.Qt.DropAction: ... - def dragCursor(self, action: QtCore.Qt.DropAction) -> QPixmap: ... - targetChanged: typing.ClassVar[QtCore.pyqtSignal] - actionChanged: typing.ClassVar[QtCore.pyqtSignal] - def setDragCursor(self, cursor: QPixmap, action: QtCore.Qt.DropAction) -> None: ... - def target(self) -> typing.Optional[QtCore.QObject]: ... - def source(self) -> typing.Optional[QtCore.QObject]: ... - def hotSpot(self) -> QtCore.QPoint: ... - def setHotSpot(self, hotspot: QtCore.QPoint) -> None: ... - def pixmap(self) -> QPixmap: ... - def setPixmap(self, a0: QPixmap) -> None: ... - def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... - def setMimeData(self, data: typing.Optional[QtCore.QMimeData]) -> None: ... - @typing.overload - def exec(self, supportedActions: QtCore.Qt.DropAction = ...) -> QtCore.Qt.DropAction: ... - @typing.overload - def exec(self, supportedActions: QtCore.Qt.DropAction, defaultDropAction: QtCore.Qt.DropAction) -> QtCore.Qt.DropAction: ... - - -class QInputEvent(QtCore.QEvent): - - def clone(self) -> typing.Optional['QInputEvent']: ... - def deviceType(self) -> 'QInputDevice.DeviceType': ... - def device(self) -> typing.Optional['QInputDevice']: ... - def timestamp(self) -> int: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - - -class QKeyEvent(QInputEvent): - - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, key: int, modifiers: QtCore.Qt.KeyboardModifier, nativeScanCode: int, nativeVirtualKey: int, nativeModifiers: int, text: typing.Optional[str] = ..., autorep: bool = ..., count: int = ..., device: typing.Optional['QInputDevice'] = ...) -> None: ... - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, key: int, modifiers: QtCore.Qt.KeyboardModifier, text: typing.Optional[str] = ..., autorep: bool = ..., count: int = ...) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def clone(self) -> typing.Optional['QKeyEvent']: ... - def keyCombination(self) -> QtCore.QKeyCombination: ... - def nativeVirtualKey(self) -> int: ... - def nativeScanCode(self) -> int: ... - def nativeModifiers(self) -> int: ... - def matches(self, key: 'QKeySequence.StandardKey') -> bool: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def isAutoRepeat(self) -> bool: ... - def text(self) -> str: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def key(self) -> int: ... - - -class QFocusEvent(QtCore.QEvent): - - def __init__(self, type: QtCore.QEvent.Type, reason: QtCore.Qt.FocusReason = ...) -> None: ... - - def clone(self) -> typing.Optional['QFocusEvent']: ... - def reason(self) -> QtCore.Qt.FocusReason: ... - def lostFocus(self) -> bool: ... - def gotFocus(self) -> bool: ... - - -class QPaintEvent(QtCore.QEvent): - - @typing.overload - def __init__(self, paintRegion: 'QRegion') -> None: ... - @typing.overload - def __init__(self, paintRect: QtCore.QRect) -> None: ... - - def clone(self) -> typing.Optional['QPaintEvent']: ... - def region(self) -> 'QRegion': ... - def rect(self) -> QtCore.QRect: ... - - -class QMoveEvent(QtCore.QEvent): - - def __init__(self, pos: QtCore.QPoint, oldPos: QtCore.QPoint) -> None: ... - - def clone(self) -> typing.Optional['QMoveEvent']: ... - def oldPos(self) -> QtCore.QPoint: ... - def pos(self) -> QtCore.QPoint: ... - - -class QResizeEvent(QtCore.QEvent): - - def __init__(self, size: QtCore.QSize, oldSize: QtCore.QSize) -> None: ... - - def clone(self) -> typing.Optional['QResizeEvent']: ... - def oldSize(self) -> QtCore.QSize: ... - def size(self) -> QtCore.QSize: ... - - -class QCloseEvent(QtCore.QEvent): - - def __init__(self) -> None: ... - - def clone(self) -> typing.Optional['QCloseEvent']: ... - - -class QIconDragEvent(QtCore.QEvent): - - def __init__(self) -> None: ... - - def clone(self) -> typing.Optional['QIconDragEvent']: ... - - -class QShowEvent(QtCore.QEvent): - - def __init__(self) -> None: ... - - def clone(self) -> typing.Optional['QShowEvent']: ... - - -class QHideEvent(QtCore.QEvent): - - def __init__(self) -> None: ... - - def clone(self) -> typing.Optional['QHideEvent']: ... - - -class QContextMenuEvent(QInputEvent): - - class Reason(enum.Enum): - Mouse = ... # type: QContextMenuEvent.Reason - Keyboard = ... # type: QContextMenuEvent.Reason - Other = ... # type: QContextMenuEvent.Reason - - @typing.overload - def __init__(self, reason: 'QContextMenuEvent.Reason', pos: QtCore.QPoint, globalPos: QtCore.QPoint, modifiers: QtCore.Qt.KeyboardModifier = ...) -> None: ... - @typing.overload - def __init__(self, reason: 'QContextMenuEvent.Reason', pos: QtCore.QPoint) -> None: ... - - def clone(self) -> typing.Optional['QContextMenuEvent']: ... - def reason(self) -> 'QContextMenuEvent.Reason': ... - def globalPos(self) -> QtCore.QPoint: ... - def pos(self) -> QtCore.QPoint: ... - def globalY(self) -> int: ... - def globalX(self) -> int: ... - def y(self) -> int: ... - def x(self) -> int: ... - - -class QInputMethodEvent(QtCore.QEvent): - - class AttributeType(enum.Enum): - TextFormat = ... # type: QInputMethodEvent.AttributeType - Cursor = ... # type: QInputMethodEvent.AttributeType - Language = ... # type: QInputMethodEvent.AttributeType - Ruby = ... # type: QInputMethodEvent.AttributeType - Selection = ... # type: QInputMethodEvent.AttributeType - - class Attribute(PyQt6.sip.simplewrapper): - - length = ... # type: int - start = ... # type: int - type = ... # type: 'QInputMethodEvent.AttributeType' - value = ... # type: typing.Any - - @typing.overload - def __init__(self, t: 'QInputMethodEvent.AttributeType', s: int, l: int, val: typing.Any) -> None: ... - @typing.overload - def __init__(self, typ: 'QInputMethodEvent.AttributeType', s: int, l: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QInputMethodEvent.Attribute') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, preeditText: typing.Optional[str], attributes: typing.Iterable['QInputMethodEvent.Attribute']) -> None: ... - - def clone(self) -> typing.Optional['QInputMethodEvent']: ... - def replacementLength(self) -> int: ... - def replacementStart(self) -> int: ... - def commitString(self) -> str: ... - def preeditString(self) -> str: ... - def attributes(self) -> typing.List['QInputMethodEvent.Attribute']: ... - def setCommitString(self, commitString: typing.Optional[str], from_: int = ..., length: int = ...) -> None: ... - - -class QInputMethodQueryEvent(QtCore.QEvent): - - def __init__(self, queries: QtCore.Qt.InputMethodQuery) -> None: ... - - def clone(self) -> typing.Optional['QInputMethodQueryEvent']: ... - def value(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def setValue(self, query: QtCore.Qt.InputMethodQuery, value: typing.Any) -> None: ... - def queries(self) -> QtCore.Qt.InputMethodQuery: ... - - -class QDropEvent(QtCore.QEvent): - - def __init__(self, pos: QtCore.QPointF, actions: QtCore.Qt.DropAction, data: typing.Optional[QtCore.QMimeData], buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, type: QtCore.QEvent.Type = ...) -> None: ... - - def clone(self) -> typing.Optional['QDropEvent']: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def buttons(self) -> QtCore.Qt.MouseButton: ... - def position(self) -> QtCore.QPointF: ... - def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... - def source(self) -> typing.Optional[QtCore.QObject]: ... - def setDropAction(self, action: QtCore.Qt.DropAction) -> None: ... - def dropAction(self) -> QtCore.Qt.DropAction: ... - def acceptProposedAction(self) -> None: ... - def proposedAction(self) -> QtCore.Qt.DropAction: ... - def possibleActions(self) -> QtCore.Qt.DropAction: ... - - -class QDragMoveEvent(QDropEvent): - - def __init__(self, pos: QtCore.QPoint, actions: QtCore.Qt.DropAction, data: typing.Optional[QtCore.QMimeData], buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, type: QtCore.QEvent.Type = ...) -> None: ... - - def clone(self) -> typing.Optional['QDragMoveEvent']: ... - @typing.overload - def ignore(self) -> None: ... - @typing.overload - def ignore(self, r: QtCore.QRect) -> None: ... - @typing.overload - def accept(self) -> None: ... - @typing.overload - def accept(self, r: QtCore.QRect) -> None: ... - def answerRect(self) -> QtCore.QRect: ... - - -class QDragEnterEvent(QDragMoveEvent): - - def __init__(self, pos: QtCore.QPoint, actions: QtCore.Qt.DropAction, data: typing.Optional[QtCore.QMimeData], buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier) -> None: ... - - def clone(self) -> typing.Optional['QDragEnterEvent']: ... - - -class QDragLeaveEvent(QtCore.QEvent): - - def __init__(self) -> None: ... - - def clone(self) -> typing.Optional['QDragLeaveEvent']: ... - - -class QHelpEvent(QtCore.QEvent): - - def __init__(self, type: QtCore.QEvent.Type, pos: QtCore.QPoint, globalPos: QtCore.QPoint) -> None: ... - - def clone(self) -> typing.Optional['QHelpEvent']: ... - def globalPos(self) -> QtCore.QPoint: ... - def pos(self) -> QtCore.QPoint: ... - def globalY(self) -> int: ... - def globalX(self) -> int: ... - def y(self) -> int: ... - def x(self) -> int: ... - - -class QStatusTipEvent(QtCore.QEvent): - - def __init__(self, tip: typing.Optional[str]) -> None: ... - - def clone(self) -> typing.Optional['QStatusTipEvent']: ... - def tip(self) -> str: ... - - -class QWhatsThisClickedEvent(QtCore.QEvent): - - def __init__(self, href: typing.Optional[str]) -> None: ... - - def clone(self) -> typing.Optional['QWhatsThisClickedEvent']: ... - def href(self) -> str: ... - - -class QActionEvent(QtCore.QEvent): - - def __init__(self, type: int, action: typing.Optional[QAction], before: typing.Optional[QAction] = ...) -> None: ... - - def clone(self) -> typing.Optional['QActionEvent']: ... - def before(self) -> typing.Optional[QAction]: ... - def action(self) -> typing.Optional[QAction]: ... - - -class QFileOpenEvent(QtCore.QEvent): - - def clone(self) -> typing.Optional['QFileOpenEvent']: ... - def openFile(self, file: QtCore.QFile, flags: QtCore.QIODeviceBase.OpenModeFlag) -> bool: ... - def url(self) -> QtCore.QUrl: ... - def file(self) -> str: ... - - -class QShortcutEvent(QtCore.QEvent): - - @typing.overload - def __init__(self, key: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int], id: int, ambiguous: bool = ...) -> None: ... - @typing.overload - def __init__(self, key: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int], shortcut: typing.Optional['QShortcut'] = ..., ambiguous: bool = ...) -> None: ... - - def clone(self) -> typing.Optional['QShortcutEvent']: ... - def shortcutId(self) -> int: ... - def key(self) -> 'QKeySequence': ... - def isAmbiguous(self) -> bool: ... - - -class QWindowStateChangeEvent(QtCore.QEvent): - - def clone(self) -> typing.Optional['QWindowStateChangeEvent']: ... - def oldState(self) -> QtCore.Qt.WindowState: ... - - -class QExposeEvent(QtCore.QEvent): - - def __init__(self, rgn: 'QRegion') -> None: ... - - def clone(self) -> typing.Optional['QExposeEvent']: ... - - -class QScrollPrepareEvent(QtCore.QEvent): - - def __init__(self, startPos: QtCore.QPointF) -> None: ... - - def clone(self) -> typing.Optional['QScrollPrepareEvent']: ... - def setContentPos(self, pos: QtCore.QPointF) -> None: ... - def setContentPosRange(self, rect: QtCore.QRectF) -> None: ... - def setViewportSize(self, size: QtCore.QSizeF) -> None: ... - def contentPos(self) -> QtCore.QPointF: ... - def contentPosRange(self) -> QtCore.QRectF: ... - def viewportSize(self) -> QtCore.QSizeF: ... - def startPos(self) -> QtCore.QPointF: ... - - -class QScrollEvent(QtCore.QEvent): - - class ScrollState(enum.Enum): - ScrollStarted = ... # type: QScrollEvent.ScrollState - ScrollUpdated = ... # type: QScrollEvent.ScrollState - ScrollFinished = ... # type: QScrollEvent.ScrollState - - def __init__(self, contentPos: QtCore.QPointF, overshoot: QtCore.QPointF, scrollState: 'QScrollEvent.ScrollState') -> None: ... - - def clone(self) -> typing.Optional['QScrollEvent']: ... - def scrollState(self) -> 'QScrollEvent.ScrollState': ... - def overshootDistance(self) -> QtCore.QPointF: ... - def contentPos(self) -> QtCore.QPointF: ... - - -class QPlatformSurfaceEvent(QtCore.QEvent): - - class SurfaceEventType(enum.Enum): - SurfaceCreated = ... # type: QPlatformSurfaceEvent.SurfaceEventType - SurfaceAboutToBeDestroyed = ... # type: QPlatformSurfaceEvent.SurfaceEventType - - def __init__(self, surfaceEventType: 'QPlatformSurfaceEvent.SurfaceEventType') -> None: ... - - def clone(self) -> typing.Optional['QPlatformSurfaceEvent']: ... - def surfaceEventType(self) -> 'QPlatformSurfaceEvent.SurfaceEventType': ... - - -class QPointerEvent(QInputEvent): - - def clone(self) -> typing.Optional['QPointerEvent']: ... - def setAccepted(self, accepted: bool) -> None: ... - def allPointsAccepted(self) -> bool: ... - def isEndEvent(self) -> bool: ... - def isUpdateEvent(self) -> bool: ... - def isBeginEvent(self) -> bool: ... - def pointById(self, id: int) -> typing.Optional['QEventPoint']: ... - def points(self) -> typing.List['QEventPoint']: ... - def point(self, i: int) -> 'QEventPoint': ... - def pointCount(self) -> int: ... - def pointerType(self) -> 'QPointingDevice.PointerType': ... - def pointingDevice(self) -> typing.Optional['QPointingDevice']: ... - - -class QSinglePointEvent(QPointerEvent): - - def clone(self) -> typing.Optional['QSinglePointEvent']: ... - def setExclusivePointGrabber(self, exclusiveGrabber: typing.Optional[QtCore.QObject]) -> None: ... - def exclusivePointGrabber(self) -> typing.Optional[QtCore.QObject]: ... - def isEndEvent(self) -> bool: ... - def isUpdateEvent(self) -> bool: ... - def isBeginEvent(self) -> bool: ... - def globalPosition(self) -> QtCore.QPointF: ... - def scenePosition(self) -> QtCore.QPointF: ... - def position(self) -> QtCore.QPointF: ... - def buttons(self) -> QtCore.Qt.MouseButton: ... - def button(self) -> QtCore.Qt.MouseButton: ... - - -class QEnterEvent(QSinglePointEvent): - - def __init__(self, localPos: QtCore.QPointF, scenePos: QtCore.QPointF, globalPos: QtCore.QPointF, device: typing.Optional['QPointingDevice'] = ...) -> None: ... - - def clone(self) -> typing.Optional['QEnterEvent']: ... - - -class QMouseEvent(QSinglePointEvent): - - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, localPos: QtCore.QPointF, button: QtCore.Qt.MouseButton, buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, device: typing.Optional['QPointingDevice'] = ...) -> None: ... - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, localPos: QtCore.QPointF, globalPos: QtCore.QPointF, button: QtCore.Qt.MouseButton, buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, device: typing.Optional['QPointingDevice'] = ...) -> None: ... - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, localPos: QtCore.QPointF, scenePos: QtCore.QPointF, globalPos: QtCore.QPointF, button: QtCore.Qt.MouseButton, buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, device: typing.Optional['QPointingDevice'] = ...) -> None: ... - - def clone(self) -> typing.Optional['QMouseEvent']: ... - def flags(self) -> QtCore.Qt.MouseEventFlag: ... - def pos(self) -> QtCore.QPoint: ... - - -class QHoverEvent(QSinglePointEvent): - - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, pos: QtCore.QPointF, globalPos: QtCore.QPointF, oldPos: QtCore.QPointF, modifiers: QtCore.Qt.KeyboardModifier = ..., device: typing.Optional['QPointingDevice'] = ...) -> None: ... - @typing.overload - def __init__(self, type: QtCore.QEvent.Type, pos: QtCore.QPointF, oldPos: QtCore.QPointF, modifiers: QtCore.Qt.KeyboardModifier = ..., device: typing.Optional['QPointingDevice'] = ...) -> None: ... - - def clone(self) -> typing.Optional['QHoverEvent']: ... - def oldPosF(self) -> QtCore.QPointF: ... - def oldPos(self) -> QtCore.QPoint: ... - def isUpdateEvent(self) -> bool: ... - - -class QWheelEvent(QSinglePointEvent): - - def __init__(self, pos: QtCore.QPointF, globalPos: QtCore.QPointF, pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, buttons: QtCore.Qt.MouseButton, modifiers: QtCore.Qt.KeyboardModifier, phase: QtCore.Qt.ScrollPhase, inverted: bool, source: QtCore.Qt.MouseEventSource = ..., device: typing.Optional['QPointingDevice'] = ...) -> None: ... - - def clone(self) -> typing.Optional['QWheelEvent']: ... - def isEndEvent(self) -> bool: ... - def isUpdateEvent(self) -> bool: ... - def isBeginEvent(self) -> bool: ... - def inverted(self) -> bool: ... - def phase(self) -> QtCore.Qt.ScrollPhase: ... - def angleDelta(self) -> QtCore.QPoint: ... - def pixelDelta(self) -> QtCore.QPoint: ... - - -class QTabletEvent(QSinglePointEvent): - - def __init__(self, t: QtCore.QEvent.Type, device: typing.Optional['QPointingDevice'], pos: QtCore.QPointF, globalPos: QtCore.QPointF, pressure: float, xTilt: float, yTilt: float, tangentialPressure: float, rotation: float, z: float, keyState: QtCore.Qt.KeyboardModifier, button: QtCore.Qt.MouseButton, buttons: QtCore.Qt.MouseButton) -> None: ... - - def clone(self) -> typing.Optional['QTabletEvent']: ... - def yTilt(self) -> float: ... - def xTilt(self) -> float: ... - def tangentialPressure(self) -> float: ... - def z(self) -> float: ... - def rotation(self) -> float: ... - def pressure(self) -> float: ... - - -class QNativeGestureEvent(QSinglePointEvent): - - @typing.overload - def __init__(self, type: QtCore.Qt.NativeGestureType, dev: typing.Optional['QPointingDevice'], fingerCount: int, localPos: QtCore.QPointF, scenePos: QtCore.QPointF, globalPos: QtCore.QPointF, value: float, delta: QtCore.QPointF, sequenceId: int = ...) -> None: ... - @typing.overload - def __init__(self, type: QtCore.Qt.NativeGestureType, dev: typing.Optional['QPointingDevice'], localPos: QtCore.QPointF, scenePos: QtCore.QPointF, globalPos: QtCore.QPointF, value: float, sequenceId: int, intArgument: int) -> None: ... - - def delta(self) -> QtCore.QPointF: ... - def fingerCount(self) -> int: ... - def clone(self) -> typing.Optional['QNativeGestureEvent']: ... - def value(self) -> float: ... - def gestureType(self) -> QtCore.Qt.NativeGestureType: ... - - -class QTouchEvent(QPointerEvent): - - def __init__(self, eventType: QtCore.QEvent.Type, device: typing.Optional['QPointingDevice'] = ..., modifiers: QtCore.Qt.KeyboardModifier = ..., touchPoints: typing.Iterable['QEventPoint'] = ...) -> None: ... - - def clone(self) -> typing.Optional['QTouchEvent']: ... - def isEndEvent(self) -> bool: ... - def isUpdateEvent(self) -> bool: ... - def isBeginEvent(self) -> bool: ... - def touchPointStates(self) -> 'QEventPoint.State': ... - def target(self) -> typing.Optional[QtCore.QObject]: ... - - -class QChildWindowEvent(QtCore.QEvent): - - def __init__(self, type: QtCore.QEvent.Type, childWindow: typing.Optional['QWindow']) -> None: ... - - def clone(self) -> typing.Optional['QChildWindowEvent']: ... - def child(self) -> typing.Optional['QWindow']: ... - - -class QEventPoint(PyQt6.sip.simplewrapper): - - class State(enum.Flag): - Unknown = ... # type: QEventPoint.State - Stationary = ... # type: QEventPoint.State - Pressed = ... # type: QEventPoint.State - Updated = ... # type: QEventPoint.State - Released = ... # type: QEventPoint.State - - @typing.overload - def __init__(self, pointId: int, state: 'QEventPoint.State', scenePosition: QtCore.QPointF, globalPosition: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, other: 'QEventPoint') -> None: ... - - def setAccepted(self, accepted: bool = ...) -> None: ... - def isAccepted(self) -> bool: ... - def ellipseDiameters(self) -> QtCore.QSizeF: ... - def rotation(self) -> float: ... - def pressure(self) -> float: ... - def timeHeld(self) -> float: ... - def pressTimestamp(self) -> int: ... - def lastTimestamp(self) -> int: ... - def timestamp(self) -> int: ... - def uniqueId(self) -> 'QPointingDeviceUniqueId': ... - def id(self) -> int: ... - def device(self) -> typing.Optional['QPointingDevice']: ... - def state(self) -> 'QEventPoint.State': ... - def velocity(self) -> 'QVector2D': ... - def normalizedPosition(self) -> QtCore.QPointF: ... - def globalLastPosition(self) -> QtCore.QPointF: ... - def globalGrabPosition(self) -> QtCore.QPointF: ... - def globalPressPosition(self) -> QtCore.QPointF: ... - def globalPosition(self) -> QtCore.QPointF: ... - def sceneLastPosition(self) -> QtCore.QPointF: ... - def sceneGrabPosition(self) -> QtCore.QPointF: ... - def scenePressPosition(self) -> QtCore.QPointF: ... - def scenePosition(self) -> QtCore.QPointF: ... - def lastPosition(self) -> QtCore.QPointF: ... - def grabPosition(self) -> QtCore.QPointF: ... - def pressPosition(self) -> QtCore.QPointF: ... - def position(self) -> QtCore.QPointF: ... - def swap(self, other: 'QEventPoint') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QFileSystemModel(QtCore.QAbstractItemModel): - - class Option(enum.Flag): - DontWatchForChanges = ... # type: QFileSystemModel.Option - DontResolveSymlinks = ... # type: QFileSystemModel.Option - DontUseCustomDirectoryIcons = ... # type: QFileSystemModel.Option - - class Roles(enum.IntEnum): - FileIconRole = ... # type: QFileSystemModel.Roles - FilePathRole = ... # type: QFileSystemModel.Roles - FileNameRole = ... # type: QFileSystemModel.Roles - FilePermissions = ... # type: QFileSystemModel.Roles - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def options(self) -> 'QFileSystemModel.Option': ... - def setOptions(self, options: 'QFileSystemModel.Option') -> None: ... - def testOption(self, option: 'QFileSystemModel.Option') -> bool: ... - def setOption(self, option: 'QFileSystemModel.Option', on: bool = ...) -> None: ... - def sibling(self, row: int, column: int, idx: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - directoryLoaded: typing.ClassVar[QtCore.pyqtSignal] - rootPathChanged: typing.ClassVar[QtCore.pyqtSignal] - fileRenamed: typing.ClassVar[QtCore.pyqtSignal] - def remove(self, index: QtCore.QModelIndex) -> bool: ... - def fileInfo(self, aindex: QtCore.QModelIndex) -> QtCore.QFileInfo: ... - def fileIcon(self, aindex: QtCore.QModelIndex) -> 'QIcon': ... - def fileName(self, aindex: QtCore.QModelIndex) -> str: ... - def rmdir(self, index: QtCore.QModelIndex) -> bool: ... - def permissions(self, index: QtCore.QModelIndex) -> QtCore.QFileDevice.Permission: ... - def mkdir(self, parent: QtCore.QModelIndex, name: typing.Optional[str]) -> QtCore.QModelIndex: ... - @typing.overload - def lastModified(self, index: QtCore.QModelIndex) -> QtCore.QDateTime: ... - @typing.overload - def lastModified(self, index: QtCore.QModelIndex, tz: QtCore.QTimeZone) -> QtCore.QDateTime: ... - def type(self, index: QtCore.QModelIndex) -> str: ... - def size(self, index: QtCore.QModelIndex) -> int: ... - def isDir(self, index: QtCore.QModelIndex) -> bool: ... - def filePath(self, index: QtCore.QModelIndex) -> str: ... - def nameFilters(self) -> typing.List[str]: ... - def setNameFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... - def nameFilterDisables(self) -> bool: ... - def setNameFilterDisables(self, enable: bool) -> None: ... - def isReadOnly(self) -> bool: ... - def setReadOnly(self, enable: bool) -> None: ... - def resolveSymlinks(self) -> bool: ... - def setResolveSymlinks(self, enable: bool) -> None: ... - def filter(self) -> QtCore.QDir.Filter: ... - def setFilter(self, filters: QtCore.QDir.Filter) -> None: ... - def iconProvider(self) -> typing.Optional[QAbstractFileIconProvider]: ... - def setIconProvider(self, provider: typing.Optional[QAbstractFileIconProvider]) -> None: ... - def rootDirectory(self) -> QtCore.QDir: ... - def rootPath(self) -> str: ... - def setRootPath(self, path: typing.Optional[str]) -> QtCore.QModelIndex: ... - def supportedDropActions(self) -> QtCore.Qt.DropAction: ... - def dropMimeData(self, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction, row: int, column: int, parent: QtCore.QModelIndex) -> bool: ... - def mimeData(self, indexes: typing.Iterable[QtCore.QModelIndex]) -> typing.Optional[QtCore.QMimeData]: ... - def mimeTypes(self) -> typing.List[str]: ... - def sort(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... - def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlag: ... - def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - def myComputer(self, role: int = ...) -> typing.Any: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def fetchMore(self, parent: QtCore.QModelIndex) -> None: ... - def canFetchMore(self, parent: QtCore.QModelIndex) -> bool: ... - def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... - def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - @typing.overload - def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... - @typing.overload - def index(self, path: typing.Optional[str], column: int = ...) -> QtCore.QModelIndex: ... - - -class QFont(PyQt6.sip.simplewrapper): - - class HintingPreference(enum.Enum): - PreferDefaultHinting = ... # type: QFont.HintingPreference - PreferNoHinting = ... # type: QFont.HintingPreference - PreferVerticalHinting = ... # type: QFont.HintingPreference - PreferFullHinting = ... # type: QFont.HintingPreference - - class SpacingType(enum.Enum): - PercentageSpacing = ... # type: QFont.SpacingType - AbsoluteSpacing = ... # type: QFont.SpacingType - - class Capitalization(enum.Enum): - MixedCase = ... # type: QFont.Capitalization - AllUppercase = ... # type: QFont.Capitalization - AllLowercase = ... # type: QFont.Capitalization - SmallCaps = ... # type: QFont.Capitalization - Capitalize = ... # type: QFont.Capitalization - - class Stretch(enum.IntEnum): - AnyStretch = ... # type: QFont.Stretch - UltraCondensed = ... # type: QFont.Stretch - ExtraCondensed = ... # type: QFont.Stretch - Condensed = ... # type: QFont.Stretch - SemiCondensed = ... # type: QFont.Stretch - Unstretched = ... # type: QFont.Stretch - SemiExpanded = ... # type: QFont.Stretch - Expanded = ... # type: QFont.Stretch - ExtraExpanded = ... # type: QFont.Stretch - UltraExpanded = ... # type: QFont.Stretch - - class Style(enum.Enum): - StyleNormal = ... # type: QFont.Style - StyleItalic = ... # type: QFont.Style - StyleOblique = ... # type: QFont.Style - - class Weight(enum.IntEnum): - Thin = ... # type: QFont.Weight - ExtraLight = ... # type: QFont.Weight - Light = ... # type: QFont.Weight - Normal = ... # type: QFont.Weight - Medium = ... # type: QFont.Weight - DemiBold = ... # type: QFont.Weight - Bold = ... # type: QFont.Weight - ExtraBold = ... # type: QFont.Weight - Black = ... # type: QFont.Weight - - class StyleStrategy(enum.Flag): - PreferDefault = ... # type: QFont.StyleStrategy - PreferBitmap = ... # type: QFont.StyleStrategy - PreferDevice = ... # type: QFont.StyleStrategy - PreferOutline = ... # type: QFont.StyleStrategy - ForceOutline = ... # type: QFont.StyleStrategy - PreferMatch = ... # type: QFont.StyleStrategy - PreferQuality = ... # type: QFont.StyleStrategy - PreferAntialias = ... # type: QFont.StyleStrategy - NoAntialias = ... # type: QFont.StyleStrategy - NoSubpixelAntialias = ... # type: QFont.StyleStrategy - NoFontMerging = ... # type: QFont.StyleStrategy - PreferNoShaping = ... # type: QFont.StyleStrategy - - class StyleHint(enum.Enum): - Helvetica = ... # type: QFont.StyleHint - SansSerif = ... # type: QFont.StyleHint - Times = ... # type: QFont.StyleHint - Serif = ... # type: QFont.StyleHint - Courier = ... # type: QFont.StyleHint - TypeWriter = ... # type: QFont.StyleHint - OldEnglish = ... # type: QFont.StyleHint - Decorative = ... # type: QFont.StyleHint - System = ... # type: QFont.StyleHint - AnyStyle = ... # type: QFont.StyleHint - Cursive = ... # type: QFont.StyleHint - Monospace = ... # type: QFont.StyleHint - Fantasy = ... # type: QFont.StyleHint - - class Tag(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, view: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def __init__(self, a0: 'QFont.Tag') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __ge__(self, rhs: 'QFont.Tag') -> bool: ... - def __le__(self, rhs: 'QFont.Tag') -> bool: ... - def __gt__(self, rhs: 'QFont.Tag') -> bool: ... - def __lt__(self, rhs: 'QFont.Tag') -> bool: ... - def __hash__(self) -> int: ... - @staticmethod - def fromString(view: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> typing.Optional['QFont.Tag']: ... - @staticmethod - def fromValue(value: int) -> typing.Optional['QFont.Tag']: ... - def toString(self) -> QtCore.QByteArray: ... - def value(self) -> int: ... - def isValid(self) -> bool: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, families: typing.Iterable[typing.Optional[str]], pointSize: int = ..., weight: int = ..., italic: bool = ...) -> None: ... - @typing.overload - def __init__(self, family: typing.Optional[str], pointSize: int = ..., weight: int = ..., italic: bool = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QFont') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def __ge__(self, a0: 'QFont') -> bool: ... - def variableAxisTags(self) -> typing.List['QFont.Tag']: ... - def clearVariableAxes(self) -> None: ... - def variableAxisValue(self, tag: 'QFont.Tag') -> float: ... - def isVariableAxisSet(self, tag: 'QFont.Tag') -> bool: ... - def unsetVariableAxis(self, tag: 'QFont.Tag') -> None: ... - def setVariableAxis(self, tag: 'QFont.Tag', value: float) -> None: ... - def clearFeatures(self) -> None: ... - def featureTags(self) -> typing.List['QFont.Tag']: ... - def isFeatureSet(self, tag: 'QFont.Tag') -> bool: ... - def featureValue(self, tag: 'QFont.Tag') -> int: ... - def unsetFeature(self, tag: 'QFont.Tag') -> None: ... - def setFeature(self, tag: 'QFont.Tag', value: int) -> None: ... - def setFamilies(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... - def families(self) -> typing.List[str]: ... - def __hash__(self) -> int: ... - def swap(self, other: 'QFont') -> None: ... - def hintingPreference(self) -> 'QFont.HintingPreference': ... - def setHintingPreference(self, hintingPreference: 'QFont.HintingPreference') -> None: ... - def setStyleName(self, styleName: typing.Optional[str]) -> None: ... - def styleName(self) -> str: ... - def capitalization(self) -> 'QFont.Capitalization': ... - def setCapitalization(self, a0: 'QFont.Capitalization') -> None: ... - def setWordSpacing(self, spacing: float) -> None: ... - def wordSpacing(self) -> float: ... - def setLetterSpacing(self, type: 'QFont.SpacingType', spacing: float) -> None: ... - def letterSpacingType(self) -> 'QFont.SpacingType': ... - def letterSpacing(self) -> float: ... - def setItalic(self, b: bool) -> None: ... - def italic(self) -> bool: ... - def setBold(self, enable: bool) -> None: ... - def bold(self) -> bool: ... - def resolve(self, a0: 'QFont') -> 'QFont': ... - def defaultFamily(self) -> str: ... - @staticmethod - def cacheStatistics() -> None: ... - @staticmethod - def cleanup() -> None: ... - @staticmethod - def initialize() -> None: ... - @staticmethod - def removeSubstitutions(a0: typing.Optional[str]) -> None: ... - @staticmethod - def insertSubstitutions(a0: typing.Optional[str], a1: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def insertSubstitution(a0: typing.Optional[str], a1: typing.Optional[str]) -> None: ... - @staticmethod - def substitutions() -> typing.List[str]: ... - @staticmethod - def substitutes(a0: typing.Optional[str]) -> typing.List[str]: ... - @staticmethod - def substitute(a0: typing.Optional[str]) -> str: ... - def fromString(self, a0: typing.Optional[str]) -> bool: ... - def toString(self) -> str: ... - def key(self) -> str: ... - def isCopyOf(self, a0: 'QFont') -> bool: ... - def __lt__(self, a0: 'QFont') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def exactMatch(self) -> bool: ... - def setStretch(self, a0: int) -> None: ... - def stretch(self) -> int: ... - def setStyleStrategy(self, s: 'QFont.StyleStrategy') -> None: ... - def setStyleHint(self, hint: 'QFont.StyleHint', strategy: 'QFont.StyleStrategy' = ...) -> None: ... - def styleStrategy(self) -> 'QFont.StyleStrategy': ... - def styleHint(self) -> 'QFont.StyleHint': ... - def setKerning(self, a0: bool) -> None: ... - def kerning(self) -> bool: ... - def setFixedPitch(self, a0: bool) -> None: ... - def fixedPitch(self) -> bool: ... - def setStrikeOut(self, a0: bool) -> None: ... - def strikeOut(self) -> bool: ... - def setOverline(self, a0: bool) -> None: ... - def overline(self) -> bool: ... - def setUnderline(self, a0: bool) -> None: ... - def underline(self) -> bool: ... - def style(self) -> 'QFont.Style': ... - def setStyle(self, style: 'QFont.Style') -> None: ... - def setWeight(self, weight: int) -> None: ... - def weight(self) -> int: ... - def setPixelSize(self, a0: int) -> None: ... - def pixelSize(self) -> int: ... - def setPointSizeF(self, a0: float) -> None: ... - def pointSizeF(self) -> float: ... - def setPointSize(self, a0: int) -> None: ... - def pointSize(self) -> int: ... - def setFamily(self, a0: typing.Optional[str]) -> None: ... - def family(self) -> str: ... - - -class QFontDatabase(PyQt6.sip.simplewrapper): - - class SystemFont(enum.Enum): - GeneralFont = ... # type: QFontDatabase.SystemFont - FixedFont = ... # type: QFontDatabase.SystemFont - TitleFont = ... # type: QFontDatabase.SystemFont - SmallestReadableFont = ... # type: QFontDatabase.SystemFont - - class WritingSystem(enum.Enum): - Any = ... # type: QFontDatabase.WritingSystem - Latin = ... # type: QFontDatabase.WritingSystem - Greek = ... # type: QFontDatabase.WritingSystem - Cyrillic = ... # type: QFontDatabase.WritingSystem - Armenian = ... # type: QFontDatabase.WritingSystem - Hebrew = ... # type: QFontDatabase.WritingSystem - Arabic = ... # type: QFontDatabase.WritingSystem - Syriac = ... # type: QFontDatabase.WritingSystem - Thaana = ... # type: QFontDatabase.WritingSystem - Devanagari = ... # type: QFontDatabase.WritingSystem - Bengali = ... # type: QFontDatabase.WritingSystem - Gurmukhi = ... # type: QFontDatabase.WritingSystem - Gujarati = ... # type: QFontDatabase.WritingSystem - Oriya = ... # type: QFontDatabase.WritingSystem - Tamil = ... # type: QFontDatabase.WritingSystem - Telugu = ... # type: QFontDatabase.WritingSystem - Kannada = ... # type: QFontDatabase.WritingSystem - Malayalam = ... # type: QFontDatabase.WritingSystem - Sinhala = ... # type: QFontDatabase.WritingSystem - Thai = ... # type: QFontDatabase.WritingSystem - Lao = ... # type: QFontDatabase.WritingSystem - Tibetan = ... # type: QFontDatabase.WritingSystem - Myanmar = ... # type: QFontDatabase.WritingSystem - Georgian = ... # type: QFontDatabase.WritingSystem - Khmer = ... # type: QFontDatabase.WritingSystem - SimplifiedChinese = ... # type: QFontDatabase.WritingSystem - TraditionalChinese = ... # type: QFontDatabase.WritingSystem - Japanese = ... # type: QFontDatabase.WritingSystem - Korean = ... # type: QFontDatabase.WritingSystem - Vietnamese = ... # type: QFontDatabase.WritingSystem - Other = ... # type: QFontDatabase.WritingSystem - Symbol = ... # type: QFontDatabase.WritingSystem - Ogham = ... # type: QFontDatabase.WritingSystem - Runic = ... # type: QFontDatabase.WritingSystem - Nko = ... # type: QFontDatabase.WritingSystem - - def __init__(self, a0: 'QFontDatabase') -> None: ... - - @staticmethod - def isPrivateFamily(family: typing.Optional[str]) -> bool: ... - @staticmethod - def systemFont(type: 'QFontDatabase.SystemFont') -> QFont: ... - @staticmethod - def removeAllApplicationFonts() -> bool: ... - @staticmethod - def removeApplicationFont(id: int) -> bool: ... - @staticmethod - def applicationFontFamilies(id: int) -> typing.List[str]: ... - @staticmethod - def addApplicationFontFromData(fontData: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> int: ... - @staticmethod - def addApplicationFont(fileName: typing.Optional[str]) -> int: ... - @staticmethod - def writingSystemSample(writingSystem: 'QFontDatabase.WritingSystem') -> str: ... - @staticmethod - def writingSystemName(writingSystem: 'QFontDatabase.WritingSystem') -> str: ... - @staticmethod - def weight(family: typing.Optional[str], style: typing.Optional[str]) -> int: ... - @staticmethod - def bold(family: typing.Optional[str], style: typing.Optional[str]) -> bool: ... - @staticmethod - def italic(family: typing.Optional[str], style: typing.Optional[str]) -> bool: ... - @staticmethod - def isFixedPitch(family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def isScalable(family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def isSmoothlyScalable(family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def isBitmapScalable(family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def font(family: typing.Optional[str], style: typing.Optional[str], pointSize: int) -> QFont: ... - @typing.overload - @staticmethod - def styleString(fontInfo: 'QFontInfo') -> str: ... - @typing.overload - @staticmethod - def styleString(font: QFont) -> str: ... - @staticmethod - def smoothSizes(family: typing.Optional[str], style: typing.Optional[str]) -> typing.List[int]: ... - @staticmethod - def pointSizes(family: typing.Optional[str], style: typing.Optional[str] = ...) -> typing.List[int]: ... - @staticmethod - def styles(family: typing.Optional[str]) -> typing.List[str]: ... - @staticmethod - def families(writingSystem: 'QFontDatabase.WritingSystem' = ...) -> typing.List[str]: ... - @typing.overload - @staticmethod - def writingSystems(family: typing.Optional[str]) -> typing.List['QFontDatabase.WritingSystem']: ... - @typing.overload - @staticmethod - def writingSystems() -> typing.List['QFontDatabase.WritingSystem']: ... - @staticmethod - def standardSizes() -> typing.List[int]: ... - - -class QFontInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, a0: QFont) -> None: ... - @typing.overload - def __init__(self, a0: 'QFontInfo') -> None: ... - - def swap(self, other: 'QFontInfo') -> None: ... - def styleName(self) -> str: ... - def exactMatch(self) -> bool: ... - def styleHint(self) -> QFont.StyleHint: ... - def fixedPitch(self) -> bool: ... - def bold(self) -> bool: ... - def weight(self) -> int: ... - def style(self) -> QFont.Style: ... - def italic(self) -> bool: ... - def pointSizeF(self) -> float: ... - def pointSize(self) -> int: ... - def pixelSize(self) -> int: ... - def family(self) -> str: ... - - -class QFontMetrics(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, a0: QFont) -> None: ... - @typing.overload - def __init__(self, font: QFont, pd: typing.Optional[QPaintDevice]) -> None: ... - @typing.overload - def __init__(self, a0: 'QFontMetrics') -> None: ... - - def fontDpi(self) -> float: ... - @typing.overload - def horizontalAdvance(self, a0: typing.Optional[str], textOption: 'QTextOption') -> int: ... - @typing.overload - def horizontalAdvance(self, a0: typing.Optional[str], length: int = ...) -> int: ... - def capHeight(self) -> int: ... - def swap(self, other: 'QFontMetrics') -> None: ... - def inFontUcs4(self, character: int) -> bool: ... - @typing.overload - def tightBoundingRect(self, text: typing.Optional[str], textOption: 'QTextOption') -> QtCore.QRect: ... - @typing.overload - def tightBoundingRect(self, text: typing.Optional[str]) -> QtCore.QRect: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def elidedText(self, text: typing.Optional[str], mode: QtCore.Qt.TextElideMode, width: int, flags: int = ...) -> str: ... - def averageCharWidth(self) -> int: ... - def lineWidth(self) -> int: ... - def strikeOutPos(self) -> int: ... - def overlinePos(self) -> int: ... - def underlinePos(self) -> int: ... - def size(self, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QSize: ... - def boundingRectChar(self, a0: str) -> QtCore.QRect: ... - @typing.overload - def boundingRect(self, text: typing.Optional[str], textOption: 'QTextOption') -> QtCore.QRect: ... - @typing.overload - def boundingRect(self, text: typing.Optional[str]) -> QtCore.QRect: ... - @typing.overload - def boundingRect(self, rect: QtCore.QRect, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRect: ... - @typing.overload - def boundingRect(self, x: int, y: int, width: int, height: int, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRect: ... - def rightBearing(self, a0: str) -> int: ... - def leftBearing(self, a0: str) -> int: ... - def inFont(self, a0: str) -> bool: ... - def xHeight(self) -> int: ... - def maxWidth(self) -> int: ... - def minRightBearing(self) -> int: ... - def minLeftBearing(self) -> int: ... - def lineSpacing(self) -> int: ... - def leading(self) -> int: ... - def height(self) -> int: ... - def descent(self) -> int: ... - def ascent(self) -> int: ... - - -class QFontMetricsF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, a0: QFont) -> None: ... - @typing.overload - def __init__(self, font: QFont, pd: typing.Optional[QPaintDevice]) -> None: ... - @typing.overload - def __init__(self, a0: QFontMetrics) -> None: ... - @typing.overload - def __init__(self, a0: 'QFontMetricsF') -> None: ... - - def fontDpi(self) -> float: ... - @typing.overload - def horizontalAdvance(self, string: typing.Optional[str], textOption: 'QTextOption') -> float: ... - @typing.overload - def horizontalAdvance(self, string: typing.Optional[str], length: int = ...) -> float: ... - def capHeight(self) -> float: ... - def swap(self, other: 'QFontMetricsF') -> None: ... - def inFontUcs4(self, character: int) -> bool: ... - @typing.overload - def tightBoundingRect(self, text: typing.Optional[str], textOption: 'QTextOption') -> QtCore.QRectF: ... - @typing.overload - def tightBoundingRect(self, text: typing.Optional[str]) -> QtCore.QRectF: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def elidedText(self, text: typing.Optional[str], mode: QtCore.Qt.TextElideMode, width: float, flags: int = ...) -> str: ... - def averageCharWidth(self) -> float: ... - def lineWidth(self) -> float: ... - def strikeOutPos(self) -> float: ... - def overlinePos(self) -> float: ... - def underlinePos(self) -> float: ... - def size(self, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QSizeF: ... - def boundingRectChar(self, a0: str) -> QtCore.QRectF: ... - @typing.overload - def boundingRect(self, text: typing.Optional[str], textOption: 'QTextOption') -> QtCore.QRectF: ... - @typing.overload - def boundingRect(self, string: typing.Optional[str]) -> QtCore.QRectF: ... - @typing.overload - def boundingRect(self, rect: QtCore.QRectF, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRectF: ... - def rightBearing(self, a0: str) -> float: ... - def leftBearing(self, a0: str) -> float: ... - def inFont(self, a0: str) -> bool: ... - def xHeight(self) -> float: ... - def maxWidth(self) -> float: ... - def minRightBearing(self) -> float: ... - def minLeftBearing(self) -> float: ... - def lineSpacing(self) -> float: ... - def leading(self) -> float: ... - def height(self) -> float: ... - def descent(self) -> float: ... - def ascent(self) -> float: ... - - -class QMatrix4x3(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix4x3') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix4x3': ... - def __imul__(self, a0: float) -> 'QMatrix4x3': ... - def __isub__(self, a0: 'QMatrix4x3') -> 'QMatrix4x3': ... - def __iadd__(self, a0: 'QMatrix4x3') -> 'QMatrix4x3': ... - def transposed(self) -> 'QMatrix3x4': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix4x2(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix4x2') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix4x2': ... - def __imul__(self, a0: float) -> 'QMatrix4x2': ... - def __isub__(self, a0: 'QMatrix4x2') -> 'QMatrix4x2': ... - def __iadd__(self, a0: 'QMatrix4x2') -> 'QMatrix4x2': ... - def transposed(self) -> 'QMatrix2x4': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix3x4(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix3x4') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix3x4': ... - def __imul__(self, a0: float) -> 'QMatrix3x4': ... - def __isub__(self, a0: 'QMatrix3x4') -> 'QMatrix3x4': ... - def __iadd__(self, a0: 'QMatrix3x4') -> 'QMatrix3x4': ... - def transposed(self) -> QMatrix4x3: ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix3x3(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix3x3') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix3x3': ... - def __imul__(self, a0: float) -> 'QMatrix3x3': ... - def __isub__(self, a0: 'QMatrix3x3') -> 'QMatrix3x3': ... - def __iadd__(self, a0: 'QMatrix3x3') -> 'QMatrix3x3': ... - def transposed(self) -> 'QMatrix3x3': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix3x2(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix3x2') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix3x2': ... - def __imul__(self, a0: float) -> 'QMatrix3x2': ... - def __isub__(self, a0: 'QMatrix3x2') -> 'QMatrix3x2': ... - def __iadd__(self, a0: 'QMatrix3x2') -> 'QMatrix3x2': ... - def transposed(self) -> 'QMatrix2x3': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix2x4(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix2x4') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix2x4': ... - def __imul__(self, a0: float) -> 'QMatrix2x4': ... - def __isub__(self, a0: 'QMatrix2x4') -> 'QMatrix2x4': ... - def __iadd__(self, a0: 'QMatrix2x4') -> 'QMatrix2x4': ... - def transposed(self) -> QMatrix4x2: ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix2x3(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix2x3') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix2x3': ... - def __imul__(self, a0: float) -> 'QMatrix2x3': ... - def __isub__(self, a0: 'QMatrix2x3') -> 'QMatrix2x3': ... - def __iadd__(self, a0: 'QMatrix2x3') -> 'QMatrix2x3': ... - def transposed(self) -> QMatrix3x2: ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QMatrix2x2(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QMatrix2x2') -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, a0: float) -> 'QMatrix2x2': ... - def __imul__(self, a0: float) -> 'QMatrix2x2': ... - def __isub__(self, a0: 'QMatrix2x2') -> 'QMatrix2x2': ... - def __iadd__(self, a0: 'QMatrix2x2') -> 'QMatrix2x2': ... - def transposed(self) -> 'QMatrix2x2': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def copyDataTo(self) -> typing.List[float]: ... - def data(self) -> typing.List[float]: ... - def __repr__(self) -> str: ... - - -class QGlyphRun(PyQt6.sip.simplewrapper): - - class GlyphRunFlag(enum.Flag): - Overline = ... # type: QGlyphRun.GlyphRunFlag - Underline = ... # type: QGlyphRun.GlyphRunFlag - StrikeOut = ... # type: QGlyphRun.GlyphRunFlag - RightToLeft = ... # type: QGlyphRun.GlyphRunFlag - SplitLigature = ... # type: QGlyphRun.GlyphRunFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QGlyphRun') -> None: ... - - def sourceString(self) -> str: ... - def setSourceString(self, sourceString: typing.Optional[str]) -> None: ... - def setStringIndexes(self, stringIndexes: typing.Iterable[int]) -> None: ... - def stringIndexes(self) -> typing.List[int]: ... - def swap(self, other: 'QGlyphRun') -> None: ... - def isEmpty(self) -> bool: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setBoundingRect(self, boundingRect: QtCore.QRectF) -> None: ... - def flags(self) -> 'QGlyphRun.GlyphRunFlag': ... - def setFlags(self, flags: 'QGlyphRun.GlyphRunFlag') -> None: ... - def setFlag(self, flag: 'QGlyphRun.GlyphRunFlag', enabled: bool = ...) -> None: ... - def isRightToLeft(self) -> bool: ... - def setRightToLeft(self, on: bool) -> None: ... - def strikeOut(self) -> bool: ... - def setStrikeOut(self, strikeOut: bool) -> None: ... - def underline(self) -> bool: ... - def setUnderline(self, underline: bool) -> None: ... - def overline(self) -> bool: ... - def setOverline(self, overline: bool) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def clear(self) -> None: ... - def setPositions(self, positions: typing.Iterable[QtCore.QPointF]) -> None: ... - def positions(self) -> typing.List[QtCore.QPointF]: ... - def setGlyphIndexes(self, glyphIndexes: typing.Iterable[int]) -> None: ... - def glyphIndexes(self) -> typing.List[int]: ... - def setRawFont(self, rawFont: 'QRawFont') -> None: ... - def rawFont(self) -> 'QRawFont': ... - - -class QGuiApplication(QtCore.QCoreApplication): - - def __init__(self, argv: typing.List[str]) -> None: ... - - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def setBadgeNumber(self, number: int) -> None: ... - @staticmethod - def highDpiScaleFactorRoundingPolicy() -> QtCore.Qt.HighDpiScaleFactorRoundingPolicy: ... - @staticmethod - def setHighDpiScaleFactorRoundingPolicy(policy: QtCore.Qt.HighDpiScaleFactorRoundingPolicy) -> None: ... - @staticmethod - def screenAt(point: QtCore.QPoint) -> typing.Optional['QScreen']: ... - @staticmethod - def desktopFileName() -> str: ... - @staticmethod - def setDesktopFileName(name: typing.Optional[str]) -> None: ... - primaryScreenChanged: typing.ClassVar[QtCore.pyqtSignal] - layoutDirectionChanged: typing.ClassVar[QtCore.pyqtSignal] - screenRemoved: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def windowIcon() -> 'QIcon': ... - @staticmethod - def setWindowIcon(icon: 'QIcon') -> None: ... - @staticmethod - def sync() -> None: ... - @staticmethod - def applicationState() -> QtCore.Qt.ApplicationState: ... - def isSavingSession(self) -> bool: ... - def sessionKey(self) -> str: ... - def sessionId(self) -> str: ... - def isSessionRestored(self) -> bool: ... - def devicePixelRatio(self) -> float: ... - @staticmethod - def inputMethod() -> typing.Optional['QInputMethod']: ... - @staticmethod - def styleHints() -> typing.Optional['QStyleHints']: ... - @staticmethod - def modalWindow() -> typing.Optional['QWindow']: ... - @staticmethod - def applicationDisplayName() -> str: ... - @staticmethod - def setApplicationDisplayName(name: typing.Optional[str]) -> None: ... - applicationDisplayNameChanged: typing.ClassVar[QtCore.pyqtSignal] - applicationStateChanged: typing.ClassVar[QtCore.pyqtSignal] - focusWindowChanged: typing.ClassVar[QtCore.pyqtSignal] - saveStateRequest: typing.ClassVar[QtCore.pyqtSignal] - commitDataRequest: typing.ClassVar[QtCore.pyqtSignal] - focusObjectChanged: typing.ClassVar[QtCore.pyqtSignal] - lastWindowClosed: typing.ClassVar[QtCore.pyqtSignal] - screenAdded: typing.ClassVar[QtCore.pyqtSignal] - fontDatabaseChanged: typing.ClassVar[QtCore.pyqtSignal] - def notify(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - @staticmethod - def exec() -> int: ... - @staticmethod - def quitOnLastWindowClosed() -> bool: ... - @staticmethod - def setQuitOnLastWindowClosed(quit: bool) -> None: ... - @staticmethod - def desktopSettingsAware() -> bool: ... - @staticmethod - def setDesktopSettingsAware(on: bool) -> None: ... - @staticmethod - def isLeftToRight() -> bool: ... - @staticmethod - def isRightToLeft() -> bool: ... - @staticmethod - def layoutDirection() -> QtCore.Qt.LayoutDirection: ... - @staticmethod - def setLayoutDirection(direction: QtCore.Qt.LayoutDirection) -> None: ... - @staticmethod - def mouseButtons() -> QtCore.Qt.MouseButton: ... - @staticmethod - def queryKeyboardModifiers() -> QtCore.Qt.KeyboardModifier: ... - @staticmethod - def keyboardModifiers() -> QtCore.Qt.KeyboardModifier: ... - @staticmethod - def setPalette(pal: 'QPalette') -> None: ... - @staticmethod - def palette() -> 'QPalette': ... - @staticmethod - def clipboard() -> typing.Optional[QClipboard]: ... - @staticmethod - def setFont(a0: QFont) -> None: ... - @staticmethod - def font() -> QFont: ... - @staticmethod - def restoreOverrideCursor() -> None: ... - @staticmethod - def changeOverrideCursor(a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... - @staticmethod - def setOverrideCursor(a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... - @staticmethod - def overrideCursor() -> typing.Optional[QCursor]: ... - @staticmethod - def screens() -> typing.List['QScreen']: ... - @staticmethod - def primaryScreen() -> typing.Optional['QScreen']: ... - @staticmethod - def focusObject() -> typing.Optional[QtCore.QObject]: ... - @staticmethod - def focusWindow() -> typing.Optional['QWindow']: ... - @staticmethod - def platformName() -> str: ... - @staticmethod - def topLevelAt(pos: QtCore.QPoint) -> typing.Optional['QWindow']: ... - @staticmethod - def topLevelWindows() -> typing.List['QWindow']: ... - @staticmethod - def allWindows() -> typing.List['QWindow']: ... - - -class QIcon(PyQt6.sip.wrapper): - - class ThemeIcon(enum.Enum): - AddressBookNew = ... # type: QIcon.ThemeIcon - ApplicationExit = ... # type: QIcon.ThemeIcon - AppointmentNew = ... # type: QIcon.ThemeIcon - CallStart = ... # type: QIcon.ThemeIcon - CallStop = ... # type: QIcon.ThemeIcon - ContactNew = ... # type: QIcon.ThemeIcon - DocumentNew = ... # type: QIcon.ThemeIcon - DocumentOpen = ... # type: QIcon.ThemeIcon - DocumentOpenRecent = ... # type: QIcon.ThemeIcon - DocumentPageSetup = ... # type: QIcon.ThemeIcon - DocumentPrint = ... # type: QIcon.ThemeIcon - DocumentPrintPreview = ... # type: QIcon.ThemeIcon - DocumentProperties = ... # type: QIcon.ThemeIcon - DocumentRevert = ... # type: QIcon.ThemeIcon - DocumentSave = ... # type: QIcon.ThemeIcon - DocumentSaveAs = ... # type: QIcon.ThemeIcon - DocumentSend = ... # type: QIcon.ThemeIcon - EditClear = ... # type: QIcon.ThemeIcon - EditCopy = ... # type: QIcon.ThemeIcon - EditCut = ... # type: QIcon.ThemeIcon - EditDelete = ... # type: QIcon.ThemeIcon - EditFind = ... # type: QIcon.ThemeIcon - EditPaste = ... # type: QIcon.ThemeIcon - EditRedo = ... # type: QIcon.ThemeIcon - EditSelectAll = ... # type: QIcon.ThemeIcon - EditUndo = ... # type: QIcon.ThemeIcon - FolderNew = ... # type: QIcon.ThemeIcon - FormatIndentLess = ... # type: QIcon.ThemeIcon - FormatIndentMore = ... # type: QIcon.ThemeIcon - FormatJustifyCenter = ... # type: QIcon.ThemeIcon - FormatJustifyFill = ... # type: QIcon.ThemeIcon - FormatJustifyLeft = ... # type: QIcon.ThemeIcon - FormatJustifyRight = ... # type: QIcon.ThemeIcon - FormatTextDirectionLtr = ... # type: QIcon.ThemeIcon - FormatTextDirectionRtl = ... # type: QIcon.ThemeIcon - FormatTextBold = ... # type: QIcon.ThemeIcon - FormatTextItalic = ... # type: QIcon.ThemeIcon - FormatTextUnderline = ... # type: QIcon.ThemeIcon - FormatTextStrikethrough = ... # type: QIcon.ThemeIcon - GoDown = ... # type: QIcon.ThemeIcon - GoHome = ... # type: QIcon.ThemeIcon - GoNext = ... # type: QIcon.ThemeIcon - GoPrevious = ... # type: QIcon.ThemeIcon - GoUp = ... # type: QIcon.ThemeIcon - HelpAbout = ... # type: QIcon.ThemeIcon - HelpFaq = ... # type: QIcon.ThemeIcon - InsertImage = ... # type: QIcon.ThemeIcon - InsertLink = ... # type: QIcon.ThemeIcon - InsertText = ... # type: QIcon.ThemeIcon - ListAdd = ... # type: QIcon.ThemeIcon - ListRemove = ... # type: QIcon.ThemeIcon - MailForward = ... # type: QIcon.ThemeIcon - MailMarkImportant = ... # type: QIcon.ThemeIcon - MailMarkRead = ... # type: QIcon.ThemeIcon - MailMarkUnread = ... # type: QIcon.ThemeIcon - MailMessageNew = ... # type: QIcon.ThemeIcon - MailReplyAll = ... # type: QIcon.ThemeIcon - MailReplySender = ... # type: QIcon.ThemeIcon - MailSend = ... # type: QIcon.ThemeIcon - MediaEject = ... # type: QIcon.ThemeIcon - MediaPlaybackPause = ... # type: QIcon.ThemeIcon - MediaPlaybackStart = ... # type: QIcon.ThemeIcon - MediaPlaybackStop = ... # type: QIcon.ThemeIcon - MediaRecord = ... # type: QIcon.ThemeIcon - MediaSeekBackward = ... # type: QIcon.ThemeIcon - MediaSeekForward = ... # type: QIcon.ThemeIcon - MediaSkipBackward = ... # type: QIcon.ThemeIcon - MediaSkipForward = ... # type: QIcon.ThemeIcon - ObjectRotateLeft = ... # type: QIcon.ThemeIcon - ObjectRotateRight = ... # type: QIcon.ThemeIcon - ProcessStop = ... # type: QIcon.ThemeIcon - SystemLockScreen = ... # type: QIcon.ThemeIcon - SystemLogOut = ... # type: QIcon.ThemeIcon - SystemSearch = ... # type: QIcon.ThemeIcon - SystemReboot = ... # type: QIcon.ThemeIcon - SystemShutdown = ... # type: QIcon.ThemeIcon - ToolsCheckSpelling = ... # type: QIcon.ThemeIcon - ViewFullscreen = ... # type: QIcon.ThemeIcon - ViewRefresh = ... # type: QIcon.ThemeIcon - ViewRestore = ... # type: QIcon.ThemeIcon - WindowClose = ... # type: QIcon.ThemeIcon - WindowNew = ... # type: QIcon.ThemeIcon - ZoomFitBest = ... # type: QIcon.ThemeIcon - ZoomIn = ... # type: QIcon.ThemeIcon - ZoomOut = ... # type: QIcon.ThemeIcon - AudioCard = ... # type: QIcon.ThemeIcon - AudioInputMicrophone = ... # type: QIcon.ThemeIcon - Battery = ... # type: QIcon.ThemeIcon - CameraPhoto = ... # type: QIcon.ThemeIcon - CameraVideo = ... # type: QIcon.ThemeIcon - CameraWeb = ... # type: QIcon.ThemeIcon - Computer = ... # type: QIcon.ThemeIcon - DriveHarddisk = ... # type: QIcon.ThemeIcon - DriveOptical = ... # type: QIcon.ThemeIcon - InputGaming = ... # type: QIcon.ThemeIcon - InputKeyboard = ... # type: QIcon.ThemeIcon - InputMouse = ... # type: QIcon.ThemeIcon - InputTablet = ... # type: QIcon.ThemeIcon - MediaFlash = ... # type: QIcon.ThemeIcon - MediaOptical = ... # type: QIcon.ThemeIcon - MediaTape = ... # type: QIcon.ThemeIcon - MultimediaPlayer = ... # type: QIcon.ThemeIcon - NetworkWired = ... # type: QIcon.ThemeIcon - NetworkWireless = ... # type: QIcon.ThemeIcon - Phone = ... # type: QIcon.ThemeIcon - Printer = ... # type: QIcon.ThemeIcon - Scanner = ... # type: QIcon.ThemeIcon - VideoDisplay = ... # type: QIcon.ThemeIcon - AppointmentMissed = ... # type: QIcon.ThemeIcon - AppointmentSoon = ... # type: QIcon.ThemeIcon - AudioVolumeHigh = ... # type: QIcon.ThemeIcon - AudioVolumeLow = ... # type: QIcon.ThemeIcon - AudioVolumeMedium = ... # type: QIcon.ThemeIcon - AudioVolumeMuted = ... # type: QIcon.ThemeIcon - BatteryCaution = ... # type: QIcon.ThemeIcon - BatteryLow = ... # type: QIcon.ThemeIcon - DialogError = ... # type: QIcon.ThemeIcon - DialogInformation = ... # type: QIcon.ThemeIcon - DialogPassword = ... # type: QIcon.ThemeIcon - DialogQuestion = ... # type: QIcon.ThemeIcon - DialogWarning = ... # type: QIcon.ThemeIcon - FolderDragAccept = ... # type: QIcon.ThemeIcon - FolderOpen = ... # type: QIcon.ThemeIcon - FolderVisiting = ... # type: QIcon.ThemeIcon - ImageLoading = ... # type: QIcon.ThemeIcon - ImageMissing = ... # type: QIcon.ThemeIcon - MailAttachment = ... # type: QIcon.ThemeIcon - MailUnread = ... # type: QIcon.ThemeIcon - MailRead = ... # type: QIcon.ThemeIcon - MailReplied = ... # type: QIcon.ThemeIcon - MediaPlaylistRepeat = ... # type: QIcon.ThemeIcon - MediaPlaylistShuffle = ... # type: QIcon.ThemeIcon - NetworkOffline = ... # type: QIcon.ThemeIcon - PrinterPrinting = ... # type: QIcon.ThemeIcon - SecurityHigh = ... # type: QIcon.ThemeIcon - SecurityLow = ... # type: QIcon.ThemeIcon - SoftwareUpdateAvailable = ... # type: QIcon.ThemeIcon - SoftwareUpdateUrgent = ... # type: QIcon.ThemeIcon - SyncError = ... # type: QIcon.ThemeIcon - SyncSynchronizing = ... # type: QIcon.ThemeIcon - UserAvailable = ... # type: QIcon.ThemeIcon - UserOffline = ... # type: QIcon.ThemeIcon - WeatherClear = ... # type: QIcon.ThemeIcon - WeatherClearNight = ... # type: QIcon.ThemeIcon - WeatherFewClouds = ... # type: QIcon.ThemeIcon - WeatherFewCloudsNight = ... # type: QIcon.ThemeIcon - WeatherFog = ... # type: QIcon.ThemeIcon - WeatherShowers = ... # type: QIcon.ThemeIcon - WeatherSnow = ... # type: QIcon.ThemeIcon - WeatherStorm = ... # type: QIcon.ThemeIcon - - class State(enum.Enum): - On = ... # type: QIcon.State - Off = ... # type: QIcon.State - - class Mode(enum.Enum): - Normal = ... # type: QIcon.Mode - Disabled = ... # type: QIcon.Mode - Active = ... # type: QIcon.Mode - Selected = ... # type: QIcon.Mode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pixmap: QPixmap) -> None: ... - @typing.overload - def __init__(self, other: 'QIcon') -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional['QIconEngine']) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - @staticmethod - def setFallbackThemeName(name: typing.Optional[str]) -> None: ... - @staticmethod - def fallbackThemeName() -> str: ... - @staticmethod - def setFallbackSearchPaths(paths: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def fallbackSearchPaths() -> typing.List[str]: ... - def isMask(self) -> bool: ... - def setIsMask(self, isMask: bool) -> None: ... - def swap(self, other: 'QIcon') -> None: ... - def name(self) -> str: ... - @staticmethod - def setThemeName(path: typing.Optional[str]) -> None: ... - @staticmethod - def themeName() -> str: ... - @staticmethod - def setThemeSearchPaths(searchpath: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def themeSearchPaths() -> typing.List[str]: ... - @typing.overload - @staticmethod - def hasThemeIcon(name: typing.Optional[str]) -> bool: ... - @typing.overload - @staticmethod - def hasThemeIcon(icon: 'QIcon.ThemeIcon') -> bool: ... - @typing.overload - @staticmethod - def fromTheme(name: typing.Optional[str]) -> 'QIcon': ... - @typing.overload - @staticmethod - def fromTheme(name: typing.Optional[str], fallback: 'QIcon') -> 'QIcon': ... - @typing.overload - @staticmethod - def fromTheme(icon: 'QIcon.ThemeIcon') -> 'QIcon': ... - @typing.overload - @staticmethod - def fromTheme(icon: 'QIcon.ThemeIcon', fallback: 'QIcon') -> 'QIcon': ... - def cacheKey(self) -> int: ... - def addFile(self, fileName: typing.Optional[str], size: QtCore.QSize = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... - def addPixmap(self, pixmap: QPixmap, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... - def isDetached(self) -> bool: ... - def isNull(self) -> bool: ... - @typing.overload - def paint(self, painter: typing.Optional['QPainter'], rect: QtCore.QRect, alignment: QtCore.Qt.AlignmentFlag = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... - @typing.overload - def paint(self, painter: typing.Optional['QPainter'], x: int, y: int, w: int, h: int, alignment: QtCore.Qt.AlignmentFlag = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... - def availableSizes(self, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> typing.List[QtCore.QSize]: ... - def actualSize(self, size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QtCore.QSize: ... - @typing.overload - def pixmap(self, size: QtCore.QSize, devicePixelRatio: float, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... - @typing.overload - def pixmap(self, size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... - @typing.overload - def pixmap(self, w: int, h: int, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... - @typing.overload - def pixmap(self, extent: int, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... - - -class QIconEngine(PyQt6.sip.wrapper): - - class IconEngineHook(enum.Enum): - IsNullHook = ... # type: QIconEngine.IconEngineHook - ScaledPixmapHook = ... # type: QIconEngine.IconEngineHook - - class ScaledPixmapArgument(PyQt6.sip.simplewrapper): - - mode = ... # type: QIcon.Mode - pixmap = ... # type: QPixmap - scale = ... # type: float - size = ... # type: QtCore.QSize - state = ... # type: QIcon.State - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QIconEngine.ScaledPixmapArgument') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QIconEngine') -> None: ... - - def scaledPixmap(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State, scale: float) -> QPixmap: ... - def isNull(self) -> bool: ... - def iconName(self) -> str: ... - def availableSizes(self, mode: QIcon.Mode = ..., state: QIcon.State = ...) -> typing.List[QtCore.QSize]: ... - def write(self, out: QtCore.QDataStream) -> bool: ... - def read(self, in_: QtCore.QDataStream) -> bool: ... - def clone(self) -> typing.Optional['QIconEngine']: ... - def key(self) -> str: ... - def addFile(self, fileName: typing.Optional[str], size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> None: ... - def addPixmap(self, pixmap: QPixmap, mode: QIcon.Mode, state: QIcon.State) -> None: ... - def pixmap(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> QPixmap: ... - def actualSize(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> QtCore.QSize: ... - def paint(self, painter: typing.Optional['QPainter'], rect: QtCore.QRect, mode: QIcon.Mode, state: QIcon.State) -> None: ... - - -class QImage(QPaintDevice): - - class Format(enum.Enum): - Format_Invalid = ... # type: QImage.Format - Format_Mono = ... # type: QImage.Format - Format_MonoLSB = ... # type: QImage.Format - Format_Indexed8 = ... # type: QImage.Format - Format_RGB32 = ... # type: QImage.Format - Format_ARGB32 = ... # type: QImage.Format - Format_ARGB32_Premultiplied = ... # type: QImage.Format - Format_RGB16 = ... # type: QImage.Format - Format_ARGB8565_Premultiplied = ... # type: QImage.Format - Format_RGB666 = ... # type: QImage.Format - Format_ARGB6666_Premultiplied = ... # type: QImage.Format - Format_RGB555 = ... # type: QImage.Format - Format_ARGB8555_Premultiplied = ... # type: QImage.Format - Format_RGB888 = ... # type: QImage.Format - Format_RGB444 = ... # type: QImage.Format - Format_ARGB4444_Premultiplied = ... # type: QImage.Format - Format_RGBX8888 = ... # type: QImage.Format - Format_RGBA8888 = ... # type: QImage.Format - Format_RGBA8888_Premultiplied = ... # type: QImage.Format - Format_BGR30 = ... # type: QImage.Format - Format_A2BGR30_Premultiplied = ... # type: QImage.Format - Format_RGB30 = ... # type: QImage.Format - Format_A2RGB30_Premultiplied = ... # type: QImage.Format - Format_Alpha8 = ... # type: QImage.Format - Format_Grayscale8 = ... # type: QImage.Format - Format_RGBX64 = ... # type: QImage.Format - Format_RGBA64 = ... # type: QImage.Format - Format_RGBA64_Premultiplied = ... # type: QImage.Format - Format_Grayscale16 = ... # type: QImage.Format - Format_BGR888 = ... # type: QImage.Format - Format_RGBX16FPx4 = ... # type: QImage.Format - Format_RGBA16FPx4 = ... # type: QImage.Format - Format_RGBA16FPx4_Premultiplied = ... # type: QImage.Format - Format_RGBX32FPx4 = ... # type: QImage.Format - Format_RGBA32FPx4 = ... # type: QImage.Format - Format_RGBA32FPx4_Premultiplied = ... # type: QImage.Format - - class InvertMode(enum.Enum): - InvertRgb = ... # type: QImage.InvertMode - InvertRgba = ... # type: QImage.InvertMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSize, format: 'QImage.Format') -> None: ... - @typing.overload - def __init__(self, width: int, height: int, format: 'QImage.Format') -> None: ... - @typing.overload - def __init__(self, data: typing.Optional[bytes], width: int, height: int, format: 'QImage.Format', cleanupFunction: typing.Optional[typing.Callable[..., None]] = ..., cleanupInfo: typing.Optional[typing.Any] = ...) -> None: ... - @typing.overload - def __init__(self, data: typing.Optional[bytes], width: int, height: int, bytesPerLine: int, format: 'QImage.Format', cleanupFunction: typing.Optional[typing.Callable[..., None]] = ..., cleanupInfo: typing.Optional[typing.Any] = ...) -> None: ... - @typing.overload - def __init__(self, xpm: typing.List[str]) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QImage') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def colorTransformed(self, transform: QColorTransform) -> 'QImage': ... - def deviceIndependentSize(self) -> QtCore.QSizeF: ... - def applyColorTransform(self, transform: QColorTransform) -> None: ... - def convertToColorSpace(self, a0: QColorSpace) -> None: ... - def convertedToColorSpace(self, a0: QColorSpace) -> 'QImage': ... - def setColorSpace(self, a0: QColorSpace) -> None: ... - def colorSpace(self) -> QColorSpace: ... - def convertTo(self, f: 'QImage.Format', flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - def convertedTo(self, f: 'QImage.Format', flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QImage': ... - def sizeInBytes(self) -> int: ... - def reinterpretAsFormat(self, f: 'QImage.Format') -> bool: ... - @typing.overload - def setPixelColor(self, x: int, y: int, c: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setPixelColor(self, pt: QtCore.QPoint, c: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def pixelColor(self, x: int, y: int) -> QColor: ... - @typing.overload - def pixelColor(self, pt: QtCore.QPoint) -> QColor: ... - @staticmethod - def toImageFormat(format: 'QPixelFormat') -> 'QImage.Format': ... - @staticmethod - def toPixelFormat(format: 'QImage.Format') -> 'QPixelFormat': ... - def pixelFormat(self) -> 'QPixelFormat': ... - def setDevicePixelRatio(self, scaleFactor: float) -> None: ... - def devicePixelRatio(self) -> float: ... - def swap(self, other: 'QImage') -> None: ... - def bitPlaneCount(self) -> int: ... - def setColorCount(self, a0: int) -> None: ... - def colorCount(self) -> int: ... - def cacheKey(self) -> int: ... - @staticmethod - def trueMatrix(a0: 'QTransform', w: int, h: int) -> 'QTransform': ... - def transformed(self, matrix: 'QTransform', mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... - def createMaskFromColor(self, color: int, mode: QtCore.Qt.MaskMode = ...) -> 'QImage': ... - def setText(self, key: typing.Optional[str], value: typing.Optional[str]) -> None: ... - def text(self, key: typing.Optional[str] = ...) -> str: ... - def textKeys(self) -> typing.List[str]: ... - def setOffset(self, a0: QtCore.QPoint) -> None: ... - def offset(self) -> QtCore.QPoint: ... - def setDotsPerMeterY(self, a0: int) -> None: ... - def setDotsPerMeterX(self, a0: int) -> None: ... - def dotsPerMeterY(self) -> int: ... - def dotsPerMeterX(self) -> int: ... - def paintEngine(self) -> typing.Optional['QPaintEngine']: ... - @typing.overload - @staticmethod - def fromData(data: typing.Optional[PyQt6.sip.array[bytes]], format: typing.Optional[str] = ...) -> 'QImage': ... - @typing.overload - @staticmethod - def fromData(data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], format: typing.Optional[str] = ...) -> 'QImage': ... - @typing.overload - def save(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... - @typing.overload - def save(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... - @typing.overload - def loadFromData(self, data: typing.Optional[PyQt6.sip.array[bytes]], format: typing.Optional[str] = ...) -> bool: ... - @typing.overload - def loadFromData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], format: typing.Optional[str] = ...) -> bool: ... - @typing.overload - def load(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str]) -> bool: ... - @typing.overload - def load(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> bool: ... - def invertPixels(self, mode: 'QImage.InvertMode' = ...) -> None: ... - def rgbSwap(self) -> None: ... - def rgbSwapped(self) -> 'QImage': ... - def mirror(self, horizontal: bool = ..., vertical: bool = ...) -> None: ... - def mirrored(self, horizontal: bool = ..., vertical: bool = ...) -> 'QImage': ... - def scaledToHeight(self, height: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... - def scaledToWidth(self, width: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... - @typing.overload - def scaled(self, width: int, height: int, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... - @typing.overload - def scaled(self, size: QtCore.QSize, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... - def createHeuristicMask(self, clipTight: bool = ...) -> 'QImage': ... - def createAlphaMask(self, flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QImage': ... - def setAlphaChannel(self, alphaChannel: 'QImage') -> None: ... - def hasAlphaChannel(self) -> bool: ... - @typing.overload - def fill(self, pixel: int) -> None: ... - @typing.overload - def fill(self, color: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def fill(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def setColorTable(self, colors: typing.Iterable[int]) -> None: ... - def colorTable(self) -> typing.List[int]: ... - @typing.overload - def setPixel(self, pt: QtCore.QPoint, index_or_rgb: int) -> None: ... - @typing.overload - def setPixel(self, x: int, y: int, index_or_rgb: int) -> None: ... - @typing.overload - def pixel(self, pt: QtCore.QPoint) -> int: ... - @typing.overload - def pixel(self, x: int, y: int) -> int: ... - @typing.overload - def pixelIndex(self, pt: QtCore.QPoint) -> int: ... - @typing.overload - def pixelIndex(self, x: int, y: int) -> int: ... - @typing.overload - def valid(self, pt: QtCore.QPoint) -> bool: ... - @typing.overload - def valid(self, x: int, y: int) -> bool: ... - def bytesPerLine(self) -> int: ... - def constScanLine(self, a0: int) -> typing.Optional[PyQt6.sip.voidptr]: ... - def scanLine(self, a0: int) -> typing.Optional[PyQt6.sip.voidptr]: ... - def constBits(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def bits(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def isGrayscale(self) -> bool: ... - def allGray(self) -> bool: ... - def setColor(self, i: int, c: int) -> None: ... - def color(self, i: int) -> int: ... - def depth(self) -> int: ... - def rect(self) -> QtCore.QRect: ... - def size(self) -> QtCore.QSize: ... - def height(self) -> int: ... - def width(self) -> int: ... - @typing.overload - def convertToFormat(self, f: 'QImage.Format', flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QImage': ... - @typing.overload - def convertToFormat(self, f: 'QImage.Format', colorTable: typing.Iterable[int], flags: QtCore.Qt.ImageConversionFlag = ...) -> 'QImage': ... - def format(self) -> 'QImage.Format': ... - @typing.overload - def copy(self, rect: QtCore.QRect = ...) -> 'QImage': ... - @typing.overload - def copy(self, x: int, y: int, w: int, h: int) -> 'QImage': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isNull(self) -> bool: ... - - -class QImageIOHandler(PyQt6.sip.simplewrapper): - - class Transformation(enum.Flag): - TransformationNone = ... # type: QImageIOHandler.Transformation - TransformationMirror = ... # type: QImageIOHandler.Transformation - TransformationFlip = ... # type: QImageIOHandler.Transformation - TransformationRotate180 = ... # type: QImageIOHandler.Transformation - TransformationRotate90 = ... # type: QImageIOHandler.Transformation - TransformationMirrorAndRotate90 = ... # type: QImageIOHandler.Transformation - TransformationFlipAndRotate90 = ... # type: QImageIOHandler.Transformation - TransformationRotate270 = ... # type: QImageIOHandler.Transformation - - class ImageOption(enum.Enum): - Size = ... # type: QImageIOHandler.ImageOption - ClipRect = ... # type: QImageIOHandler.ImageOption - Description = ... # type: QImageIOHandler.ImageOption - ScaledClipRect = ... # type: QImageIOHandler.ImageOption - ScaledSize = ... # type: QImageIOHandler.ImageOption - CompressionRatio = ... # type: QImageIOHandler.ImageOption - Gamma = ... # type: QImageIOHandler.ImageOption - Quality = ... # type: QImageIOHandler.ImageOption - Name = ... # type: QImageIOHandler.ImageOption - SubType = ... # type: QImageIOHandler.ImageOption - IncrementalReading = ... # type: QImageIOHandler.ImageOption - Endianness = ... # type: QImageIOHandler.ImageOption - Animation = ... # type: QImageIOHandler.ImageOption - BackgroundColor = ... # type: QImageIOHandler.ImageOption - SupportedSubTypes = ... # type: QImageIOHandler.ImageOption - OptimizedWrite = ... # type: QImageIOHandler.ImageOption - ProgressiveScanWrite = ... # type: QImageIOHandler.ImageOption - ImageTransformation = ... # type: QImageIOHandler.ImageOption - - def __init__(self) -> None: ... - - def currentImageRect(self) -> QtCore.QRect: ... - def currentImageNumber(self) -> int: ... - def nextImageDelay(self) -> int: ... - def imageCount(self) -> int: ... - def loopCount(self) -> int: ... - def jumpToImage(self, imageNumber: int) -> bool: ... - def jumpToNextImage(self) -> bool: ... - def supportsOption(self, option: 'QImageIOHandler.ImageOption') -> bool: ... - def setOption(self, option: 'QImageIOHandler.ImageOption', value: typing.Any) -> None: ... - def option(self, option: 'QImageIOHandler.ImageOption') -> typing.Any: ... - def write(self, image: QImage) -> bool: ... - def read(self, image: typing.Optional[QImage]) -> bool: ... - def canRead(self) -> bool: ... - def format(self) -> QtCore.QByteArray: ... - def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - - -class QImageReader(PyQt6.sip.simplewrapper): - - class ImageReaderError(enum.Enum): - UnknownError = ... # type: QImageReader.ImageReaderError - FileNotFoundError = ... # type: QImageReader.ImageReaderError - DeviceError = ... # type: QImageReader.ImageReaderError - UnsupportedFormatError = ... # type: QImageReader.ImageReaderError - InvalidDataError = ... # type: QImageReader.ImageReaderError - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - - @staticmethod - def setAllocationLimit(mbLimit: int) -> None: ... - @staticmethod - def allocationLimit() -> int: ... - @staticmethod - def imageFormatsForMimeType(mimeType: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[QtCore.QByteArray]: ... - def autoTransform(self) -> bool: ... - def setAutoTransform(self, enabled: bool) -> None: ... - def transformation(self) -> QImageIOHandler.Transformation: ... - def supportedSubTypes(self) -> typing.List[QtCore.QByteArray]: ... - def subType(self) -> QtCore.QByteArray: ... - @staticmethod - def supportedMimeTypes() -> typing.List[QtCore.QByteArray]: ... - def decideFormatFromContent(self) -> bool: ... - def setDecideFormatFromContent(self, ignored: bool) -> None: ... - def autoDetectImageFormat(self) -> bool: ... - def setAutoDetectImageFormat(self, enabled: bool) -> None: ... - def supportsOption(self, option: QImageIOHandler.ImageOption) -> bool: ... - def quality(self) -> int: ... - def setQuality(self, quality: int) -> None: ... - def supportsAnimation(self) -> bool: ... - def backgroundColor(self) -> QColor: ... - def setBackgroundColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def text(self, key: typing.Optional[str]) -> str: ... - def textKeys(self) -> typing.List[str]: ... - @staticmethod - def supportedImageFormats() -> typing.List[QtCore.QByteArray]: ... - @typing.overload - @staticmethod - def imageFormat(fileName: typing.Optional[str]) -> QtCore.QByteArray: ... - @typing.overload - @staticmethod - def imageFormat(device: typing.Optional[QtCore.QIODevice]) -> QtCore.QByteArray: ... - @typing.overload - def imageFormat(self) -> QImage.Format: ... - def errorString(self) -> str: ... - def error(self) -> 'QImageReader.ImageReaderError': ... - def currentImageRect(self) -> QtCore.QRect: ... - def currentImageNumber(self) -> int: ... - def nextImageDelay(self) -> int: ... - def imageCount(self) -> int: ... - def loopCount(self) -> int: ... - def jumpToImage(self, imageNumber: int) -> bool: ... - def jumpToNextImage(self) -> bool: ... - @typing.overload - def read(self) -> QImage: ... - @typing.overload - def read(self, image: typing.Optional[QImage]) -> bool: ... - def canRead(self) -> bool: ... - def scaledClipRect(self) -> QtCore.QRect: ... - def setScaledClipRect(self, rect: QtCore.QRect) -> None: ... - def scaledSize(self) -> QtCore.QSize: ... - def setScaledSize(self, size: QtCore.QSize) -> None: ... - def clipRect(self) -> QtCore.QRect: ... - def setClipRect(self, rect: QtCore.QRect) -> None: ... - def size(self) -> QtCore.QSize: ... - def fileName(self) -> str: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def format(self) -> QtCore.QByteArray: ... - def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QImageWriter(PyQt6.sip.simplewrapper): - - class ImageWriterError(enum.Enum): - UnknownError = ... # type: QImageWriter.ImageWriterError - DeviceError = ... # type: QImageWriter.ImageWriterError - UnsupportedFormatError = ... # type: QImageWriter.ImageWriterError - InvalidImageError = ... # type: QImageWriter.ImageWriterError - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - - @staticmethod - def imageFormatsForMimeType(mimeType: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[QtCore.QByteArray]: ... - def setTransformation(self, orientation: QImageIOHandler.Transformation) -> None: ... - def transformation(self) -> QImageIOHandler.Transformation: ... - def progressiveScanWrite(self) -> bool: ... - def setProgressiveScanWrite(self, progressive: bool) -> None: ... - def optimizedWrite(self) -> bool: ... - def setOptimizedWrite(self, optimize: bool) -> None: ... - def supportedSubTypes(self) -> typing.List[QtCore.QByteArray]: ... - def subType(self) -> QtCore.QByteArray: ... - def setSubType(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @staticmethod - def supportedMimeTypes() -> typing.List[QtCore.QByteArray]: ... - def compression(self) -> int: ... - def setCompression(self, compression: int) -> None: ... - def supportsOption(self, option: QImageIOHandler.ImageOption) -> bool: ... - def setText(self, key: typing.Optional[str], text: typing.Optional[str]) -> None: ... - @staticmethod - def supportedImageFormats() -> typing.List[QtCore.QByteArray]: ... - def errorString(self) -> str: ... - def error(self) -> 'QImageWriter.ImageWriterError': ... - def write(self, image: QImage) -> bool: ... - def canWrite(self) -> bool: ... - def quality(self) -> int: ... - def setQuality(self, quality: int) -> None: ... - def fileName(self) -> str: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def format(self) -> QtCore.QByteArray: ... - def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QInputDevice(QtCore.QObject): - - class Capability(enum.Flag): - None_ = ... # type: QInputDevice.Capability - Position = ... # type: QInputDevice.Capability - Area = ... # type: QInputDevice.Capability - Pressure = ... # type: QInputDevice.Capability - Velocity = ... # type: QInputDevice.Capability - NormalizedPosition = ... # type: QInputDevice.Capability - MouseEmulation = ... # type: QInputDevice.Capability - PixelScroll = ... # type: QInputDevice.Capability - Scroll = ... # type: QInputDevice.Capability - Hover = ... # type: QInputDevice.Capability - Rotation = ... # type: QInputDevice.Capability - XTilt = ... # type: QInputDevice.Capability - YTilt = ... # type: QInputDevice.Capability - TangentialPressure = ... # type: QInputDevice.Capability - ZPosition = ... # type: QInputDevice.Capability - All = ... # type: QInputDevice.Capability - - class DeviceType(enum.Flag): - Unknown = ... # type: QInputDevice.DeviceType - Mouse = ... # type: QInputDevice.DeviceType - TouchScreen = ... # type: QInputDevice.DeviceType - TouchPad = ... # type: QInputDevice.DeviceType - Puck = ... # type: QInputDevice.DeviceType - Stylus = ... # type: QInputDevice.DeviceType - Airbrush = ... # type: QInputDevice.DeviceType - Keyboard = ... # type: QInputDevice.DeviceType - AllDevices = ... # type: QInputDevice.DeviceType - - @typing.overload - def __init__(self, name: typing.Optional[str], systemId: int, type: 'QInputDevice.DeviceType', seatName: typing.Optional[str] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def __ne__(self, other: object): ... - @staticmethod - def seatNames() -> typing.List[str]: ... - availableVirtualGeometryChanged: typing.ClassVar[QtCore.pyqtSignal] - def __eq__(self, other: object): ... - @staticmethod - def primaryKeyboard(seatName: typing.Optional[str] = ...) -> typing.Optional['QInputDevice']: ... - @staticmethod - def devices() -> typing.List['QInputDevice']: ... - def availableVirtualGeometry(self) -> QtCore.QRect: ... - def seatName(self) -> str: ... - def systemId(self) -> int: ... - def hasCapability(self, cap: 'QInputDevice.Capability') -> bool: ... - def capabilities(self) -> 'QInputDevice.Capability': ... - def type(self) -> 'QInputDevice.DeviceType': ... - def name(self) -> str: ... - - -class QInputMethod(QtCore.QObject): - - class Action(enum.Enum): - Click = ... # type: QInputMethod.Action - ContextMenu = ... # type: QInputMethod.Action - - inputItemClipRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] - anchorRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] - def inputItemClipRectangle(self) -> QtCore.QRectF: ... - def anchorRectangle(self) -> QtCore.QRectF: ... - inputDirectionChanged: typing.ClassVar[QtCore.pyqtSignal] - localeChanged: typing.ClassVar[QtCore.pyqtSignal] - animatingChanged: typing.ClassVar[QtCore.pyqtSignal] - visibleChanged: typing.ClassVar[QtCore.pyqtSignal] - keyboardRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] - cursorRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] - def invokeAction(self, a: 'QInputMethod.Action', cursorPosition: int) -> None: ... - def commit(self) -> None: ... - def reset(self) -> None: ... - def update(self, queries: QtCore.Qt.InputMethodQuery) -> None: ... - def hide(self) -> None: ... - def show(self) -> None: ... - @staticmethod - def queryFocusObject(query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... - def setInputItemRectangle(self, rect: QtCore.QRectF) -> None: ... - def inputItemRectangle(self) -> QtCore.QRectF: ... - def inputDirection(self) -> QtCore.Qt.LayoutDirection: ... - def locale(self) -> QtCore.QLocale: ... - def isAnimating(self) -> bool: ... - def setVisible(self, visible: bool) -> None: ... - def isVisible(self) -> bool: ... - def keyboardRectangle(self) -> QtCore.QRectF: ... - def cursorRectangle(self) -> QtCore.QRectF: ... - def setInputItemTransform(self, transform: 'QTransform') -> None: ... - def inputItemTransform(self) -> 'QTransform': ... - - -class QKeySequence(PyQt6.sip.simplewrapper): - - class StandardKey(enum.Enum): - UnknownKey = ... # type: QKeySequence.StandardKey - HelpContents = ... # type: QKeySequence.StandardKey - WhatsThis = ... # type: QKeySequence.StandardKey - Open = ... # type: QKeySequence.StandardKey - Close = ... # type: QKeySequence.StandardKey - Save = ... # type: QKeySequence.StandardKey - New = ... # type: QKeySequence.StandardKey - Delete = ... # type: QKeySequence.StandardKey - Cut = ... # type: QKeySequence.StandardKey - Copy = ... # type: QKeySequence.StandardKey - Paste = ... # type: QKeySequence.StandardKey - Undo = ... # type: QKeySequence.StandardKey - Redo = ... # type: QKeySequence.StandardKey - Back = ... # type: QKeySequence.StandardKey - Forward = ... # type: QKeySequence.StandardKey - Refresh = ... # type: QKeySequence.StandardKey - ZoomIn = ... # type: QKeySequence.StandardKey - ZoomOut = ... # type: QKeySequence.StandardKey - Print = ... # type: QKeySequence.StandardKey - AddTab = ... # type: QKeySequence.StandardKey - NextChild = ... # type: QKeySequence.StandardKey - PreviousChild = ... # type: QKeySequence.StandardKey - Find = ... # type: QKeySequence.StandardKey - FindNext = ... # type: QKeySequence.StandardKey - FindPrevious = ... # type: QKeySequence.StandardKey - Replace = ... # type: QKeySequence.StandardKey - SelectAll = ... # type: QKeySequence.StandardKey - Bold = ... # type: QKeySequence.StandardKey - Italic = ... # type: QKeySequence.StandardKey - Underline = ... # type: QKeySequence.StandardKey - MoveToNextChar = ... # type: QKeySequence.StandardKey - MoveToPreviousChar = ... # type: QKeySequence.StandardKey - MoveToNextWord = ... # type: QKeySequence.StandardKey - MoveToPreviousWord = ... # type: QKeySequence.StandardKey - MoveToNextLine = ... # type: QKeySequence.StandardKey - MoveToPreviousLine = ... # type: QKeySequence.StandardKey - MoveToNextPage = ... # type: QKeySequence.StandardKey - MoveToPreviousPage = ... # type: QKeySequence.StandardKey - MoveToStartOfLine = ... # type: QKeySequence.StandardKey - MoveToEndOfLine = ... # type: QKeySequence.StandardKey - MoveToStartOfBlock = ... # type: QKeySequence.StandardKey - MoveToEndOfBlock = ... # type: QKeySequence.StandardKey - MoveToStartOfDocument = ... # type: QKeySequence.StandardKey - MoveToEndOfDocument = ... # type: QKeySequence.StandardKey - SelectNextChar = ... # type: QKeySequence.StandardKey - SelectPreviousChar = ... # type: QKeySequence.StandardKey - SelectNextWord = ... # type: QKeySequence.StandardKey - SelectPreviousWord = ... # type: QKeySequence.StandardKey - SelectNextLine = ... # type: QKeySequence.StandardKey - SelectPreviousLine = ... # type: QKeySequence.StandardKey - SelectNextPage = ... # type: QKeySequence.StandardKey - SelectPreviousPage = ... # type: QKeySequence.StandardKey - SelectStartOfLine = ... # type: QKeySequence.StandardKey - SelectEndOfLine = ... # type: QKeySequence.StandardKey - SelectStartOfBlock = ... # type: QKeySequence.StandardKey - SelectEndOfBlock = ... # type: QKeySequence.StandardKey - SelectStartOfDocument = ... # type: QKeySequence.StandardKey - SelectEndOfDocument = ... # type: QKeySequence.StandardKey - DeleteStartOfWord = ... # type: QKeySequence.StandardKey - DeleteEndOfWord = ... # type: QKeySequence.StandardKey - DeleteEndOfLine = ... # type: QKeySequence.StandardKey - InsertParagraphSeparator = ... # type: QKeySequence.StandardKey - InsertLineSeparator = ... # type: QKeySequence.StandardKey - SaveAs = ... # type: QKeySequence.StandardKey - Preferences = ... # type: QKeySequence.StandardKey - Quit = ... # type: QKeySequence.StandardKey - FullScreen = ... # type: QKeySequence.StandardKey - Deselect = ... # type: QKeySequence.StandardKey - DeleteCompleteLine = ... # type: QKeySequence.StandardKey - Backspace = ... # type: QKeySequence.StandardKey - Cancel = ... # type: QKeySequence.StandardKey - - class SequenceMatch(enum.Enum): - NoMatch = ... # type: QKeySequence.SequenceMatch - PartialMatch = ... # type: QKeySequence.SequenceMatch - ExactMatch = ... # type: QKeySequence.SequenceMatch - - class SequenceFormat(enum.Enum): - NativeText = ... # type: QKeySequence.SequenceFormat - PortableText = ... # type: QKeySequence.SequenceFormat - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, ks: 'QKeySequence') -> None: ... - @typing.overload - def __init__(self, key: 'QKeySequence.StandardKey') -> None: ... - @typing.overload - def __init__(self, key: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> None: ... - @typing.overload - def __init__(self, k1: int, key2: int = ..., key3: int = ..., key4: int = ...) -> None: ... - @typing.overload - def __init__(self, k1: QtCore.QKeyCombination, key2: QtCore.QKeyCombination = ..., key3: QtCore.QKeyCombination = ..., key4: QtCore.QKeyCombination = ...) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def __hash__(self) -> int: ... - @staticmethod - def listToString(list: typing.Iterable[typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]], format: 'QKeySequence.SequenceFormat' = ...) -> str: ... - @staticmethod - def listFromString(str: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> typing.List['QKeySequence']: ... - @staticmethod - def keyBindings(key: 'QKeySequence.StandardKey') -> typing.List['QKeySequence']: ... - @staticmethod - def fromString(str: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> 'QKeySequence': ... - def toString(self, format: 'QKeySequence.SequenceFormat' = ...) -> str: ... - def swap(self, other: 'QKeySequence') -> None: ... - def isDetached(self) -> bool: ... - def __ge__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... - def __le__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... - def __gt__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... - def __lt__(self, ks: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __getitem__(self, i: int) -> QtCore.QKeyCombination: ... - @staticmethod - def mnemonic(text: typing.Optional[str]) -> 'QKeySequence': ... - def matches(self, seq: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> 'QKeySequence.SequenceMatch': ... - def isEmpty(self) -> bool: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - - -class QMatrix4x4(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, values: typing.Sequence[float]) -> None: ... - @typing.overload - def __init__(self, m11: float, m12: float, m13: float, m14: float, m21: float, m22: float, m23: float, m24: float, m31: float, m32: float, m33: float, m34: float, m41: float, m42: float, m43: float, m44: float) -> None: ... - @typing.overload - def __init__(self, transform: 'QTransform') -> None: ... - @typing.overload - def __init__(self, a0: 'QMatrix4x4') -> None: ... - - def __truediv__(self, divisor: float) -> 'QMatrix4x4': ... - def __add__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... - def __sub__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... - @typing.overload - def __mul__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... - @typing.overload - def __mul__(self, point: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def __mul__(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def __mul__(self, factor: float) -> 'QMatrix4x4': ... - @typing.overload - def __mul__(self, vector: 'QVector4D') -> 'QVector4D': ... - @typing.overload - def __mul__(self, vector: 'QVector3D') -> 'QVector3D': ... - def __rmul__(self, factor: float) -> 'QMatrix4x4': ... - def __matmul__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... - def __neg__(self) -> 'QMatrix4x4': ... - def isAffine(self) -> bool: ... - @typing.overload - def viewport(self, left: float, bottom: float, width: float, height: float, nearPlane: float = ..., farPlane: float = ...) -> None: ... - @typing.overload - def viewport(self, rect: QtCore.QRectF) -> None: ... - def mapVector(self, vector: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def map(self, point: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def map(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def map(self, point: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def map(self, point: 'QVector4D') -> 'QVector4D': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __itruediv__(self, divisor: float) -> 'QMatrix4x4': ... - def __imatmul__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... - @typing.overload - def __imul__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... - @typing.overload - def __imul__(self, factor: float) -> 'QMatrix4x4': ... - def __isub__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... - def __iadd__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... - def fill(self, value: float) -> None: ... - def setToIdentity(self) -> None: ... - def isIdentity(self) -> bool: ... - def setRow(self, index: int, value: 'QVector4D') -> None: ... - def row(self, index: int) -> 'QVector4D': ... - def setColumn(self, index: int, value: 'QVector4D') -> None: ... - def column(self, index: int) -> 'QVector4D': ... - def __setitem__(self, a0: typing.Any, a1: float) -> None: ... - def __getitem__(self, a0: typing.Any) -> typing.Any: ... - def optimize(self) -> None: ... - def data(self) -> typing.List[float]: ... - @typing.overload - def mapRect(self, rect: QtCore.QRect) -> QtCore.QRect: ... - @typing.overload - def mapRect(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def toTransform(self) -> 'QTransform': ... - @typing.overload - def toTransform(self, distanceToPlane: float) -> 'QTransform': ... - def copyDataTo(self) -> typing.List[float]: ... - def lookAt(self, eye: 'QVector3D', center: 'QVector3D', up: 'QVector3D') -> None: ... - def perspective(self, angle: float, aspect: float, nearPlane: float, farPlane: float) -> None: ... - def frustum(self, left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) -> None: ... - @typing.overload - def ortho(self, rect: QtCore.QRect) -> None: ... - @typing.overload - def ortho(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def ortho(self, left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) -> None: ... - @typing.overload - def rotate(self, angle: float, vector: 'QVector3D') -> None: ... - @typing.overload - def rotate(self, angle: float, x: float, y: float, z: float = ...) -> None: ... - @typing.overload - def rotate(self, quaternion: 'QQuaternion') -> None: ... - @typing.overload - def translate(self, vector: 'QVector3D') -> None: ... - @typing.overload - def translate(self, x: float, y: float) -> None: ... - @typing.overload - def translate(self, x: float, y: float, z: float) -> None: ... - @typing.overload - def scale(self, vector: 'QVector3D') -> None: ... - @typing.overload - def scale(self, x: float, y: float) -> None: ... - @typing.overload - def scale(self, x: float, y: float, z: float) -> None: ... - @typing.overload - def scale(self, factor: float) -> None: ... - def normalMatrix(self) -> QMatrix3x3: ... - def transposed(self) -> 'QMatrix4x4': ... - def inverted(self) -> typing.Tuple['QMatrix4x4', typing.Optional[bool]]: ... - def determinant(self) -> float: ... - def __repr__(self) -> str: ... - - -class QMovie(QtCore.QObject): - - class CacheMode(enum.Enum): - CacheNone = ... # type: QMovie.CacheMode - CacheAll = ... # type: QMovie.CacheMode - - class MovieState(enum.Enum): - NotRunning = ... # type: QMovie.MovieState - Paused = ... # type: QMovie.MovieState - Running = ... # type: QMovie.MovieState - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def lastErrorString(self) -> str: ... - def lastError(self) -> QImageReader.ImageReaderError: ... - def stop(self) -> None: ... - def setPaused(self, paused: bool) -> None: ... - def jumpToNextFrame(self) -> bool: ... - def start(self) -> None: ... - frameChanged: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - error: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - updated: typing.ClassVar[QtCore.pyqtSignal] - resized: typing.ClassVar[QtCore.pyqtSignal] - started: typing.ClassVar[QtCore.pyqtSignal] - def setCacheMode(self, mode: 'QMovie.CacheMode') -> None: ... - def cacheMode(self) -> 'QMovie.CacheMode': ... - def setScaledSize(self, size: QtCore.QSize) -> None: ... - def scaledSize(self) -> QtCore.QSize: ... - def speed(self) -> int: ... - def setSpeed(self, percentSpeed: int) -> None: ... - def currentFrameNumber(self) -> int: ... - def nextFrameDelay(self) -> int: ... - def frameCount(self) -> int: ... - def loopCount(self) -> int: ... - def jumpToFrame(self, frameNumber: int) -> bool: ... - def isValid(self) -> bool: ... - def currentPixmap(self) -> QPixmap: ... - def currentImage(self) -> QImage: ... - def frameRect(self) -> QtCore.QRect: ... - def state(self) -> 'QMovie.MovieState': ... - def backgroundColor(self) -> QColor: ... - def setBackgroundColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def format(self) -> QtCore.QByteArray: ... - def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def fileName(self) -> str: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - @staticmethod - def supportedFormats() -> typing.List[QtCore.QByteArray]: ... - - -class QSurface(PyQt6.sip.simplewrapper): - - class SurfaceType(enum.Enum): - RasterSurface = ... # type: QSurface.SurfaceType - OpenGLSurface = ... # type: QSurface.SurfaceType - RasterGLSurface = ... # type: QSurface.SurfaceType - OpenVGSurface = ... # type: QSurface.SurfaceType - VulkanSurface = ... # type: QSurface.SurfaceType - MetalSurface = ... # type: QSurface.SurfaceType - Direct3DSurface = ... # type: QSurface.SurfaceType - - class SurfaceClass(enum.Enum): - Window = ... # type: QSurface.SurfaceClass - Offscreen = ... # type: QSurface.SurfaceClass - - @typing.overload - def __init__(self, type: 'QSurface.SurfaceClass') -> None: ... - @typing.overload - def __init__(self, a0: 'QSurface') -> None: ... - - def supportsOpenGL(self) -> bool: ... - def size(self) -> QtCore.QSize: ... - def surfaceType(self) -> 'QSurface.SurfaceType': ... - def format(self) -> 'QSurfaceFormat': ... - def surfaceClass(self) -> 'QSurface.SurfaceClass': ... - - -class QOffscreenSurface(QtCore.QObject, QSurface): - - def __init__(self, screen: typing.Optional['QScreen'] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - screenChanged: typing.ClassVar[QtCore.pyqtSignal] - def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... - def screen(self) -> typing.Optional['QScreen']: ... - def size(self) -> QtCore.QSize: ... - def requestedFormat(self) -> 'QSurfaceFormat': ... - def format(self) -> 'QSurfaceFormat': ... - def setFormat(self, format: 'QSurfaceFormat') -> None: ... - def isValid(self) -> bool: ... - def destroy(self) -> None: ... - def create(self) -> None: ... - def surfaceType(self) -> QSurface.SurfaceType: ... - - -class QOpenGLContextGroup(QtCore.QObject): - - @staticmethod - def currentContextGroup() -> typing.Optional['QOpenGLContextGroup']: ... - def shares(self) -> typing.List['QOpenGLContext']: ... - - -class QOpenGLContext(QtCore.QObject): - - class OpenGLModuleType(enum.Enum): - LibGL = ... # type: QOpenGLContext.OpenGLModuleType - LibGLES = ... # type: QOpenGLContext.OpenGLModuleType - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - @staticmethod - def globalShareContext() -> typing.Optional['QOpenGLContext']: ... - @staticmethod - def supportsThreadedOpenGL() -> bool: ... - def isOpenGLES(self) -> bool: ... - @staticmethod - def openGLModuleType() -> 'QOpenGLContext.OpenGLModuleType': ... - aboutToBeDestroyed: typing.ClassVar[QtCore.pyqtSignal] - def hasExtension(self, extension: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def extensions(self) -> typing.Set[QtCore.QByteArray]: ... - @staticmethod - def areSharing(first: typing.Optional['QOpenGLContext'], second: typing.Optional['QOpenGLContext']) -> bool: ... - @staticmethod - def currentContext() -> typing.Optional['QOpenGLContext']: ... - def surface(self) -> typing.Optional[QSurface]: ... - def getProcAddress(self, procName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.Optional[PyQt6.sip.voidptr]: ... - def swapBuffers(self, surface: typing.Optional[QSurface]) -> None: ... - def doneCurrent(self) -> None: ... - def makeCurrent(self, surface: typing.Optional[QSurface]) -> bool: ... - def defaultFramebufferObject(self) -> int: ... - def screen(self) -> typing.Optional['QScreen']: ... - def shareGroup(self) -> typing.Optional[QOpenGLContextGroup]: ... - def shareContext(self) -> typing.Optional['QOpenGLContext']: ... - def format(self) -> 'QSurfaceFormat': ... - def isValid(self) -> bool: ... - def create(self) -> bool: ... - def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... - def setShareContext(self, shareContext: typing.Optional['QOpenGLContext']) -> None: ... - def setFormat(self, format: 'QSurfaceFormat') -> None: ... - - -class QPagedPaintDevice(QPaintDevice): - - class PdfVersion(enum.Enum): - PdfVersion_1_4 = ... # type: QPagedPaintDevice.PdfVersion - PdfVersion_A1b = ... # type: QPagedPaintDevice.PdfVersion - PdfVersion_1_6 = ... # type: QPagedPaintDevice.PdfVersion - - def pageRanges(self) -> 'QPageRanges': ... - def setPageRanges(self, ranges: 'QPageRanges') -> None: ... - def setPageMargins(self, margins: QtCore.QMarginsF, units: 'QPageLayout.Unit' = ...) -> bool: ... - def setPageOrientation(self, orientation: 'QPageLayout.Orientation') -> bool: ... - def pageLayout(self) -> 'QPageLayout': ... - def setPageLayout(self, pageLayout: 'QPageLayout') -> bool: ... - def setPageSize(self, pageSize: 'QPageSize') -> bool: ... - def newPage(self) -> bool: ... - - -class QPageLayout(PyQt6.sip.simplewrapper): - - class Mode(enum.Enum): - StandardMode = ... # type: QPageLayout.Mode - FullPageMode = ... # type: QPageLayout.Mode - - class Orientation(enum.Enum): - Portrait = ... # type: QPageLayout.Orientation - Landscape = ... # type: QPageLayout.Orientation - - class Unit(enum.Enum): - Millimeter = ... # type: QPageLayout.Unit - Point = ... # type: QPageLayout.Unit - Inch = ... # type: QPageLayout.Unit - Pica = ... # type: QPageLayout.Unit - Didot = ... # type: QPageLayout.Unit - Cicero = ... # type: QPageLayout.Unit - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pageSize: 'QPageSize', orientation: 'QPageLayout.Orientation', margins: QtCore.QMarginsF, units: 'QPageLayout.Unit' = ..., minMargins: QtCore.QMarginsF = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QPageLayout') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def paintRectPixels(self, resolution: int) -> QtCore.QRect: ... - def paintRectPoints(self) -> QtCore.QRect: ... - @typing.overload - def paintRect(self) -> QtCore.QRectF: ... - @typing.overload - def paintRect(self, units: 'QPageLayout.Unit') -> QtCore.QRectF: ... - def fullRectPixels(self, resolution: int) -> QtCore.QRect: ... - def fullRectPoints(self) -> QtCore.QRect: ... - @typing.overload - def fullRect(self) -> QtCore.QRectF: ... - @typing.overload - def fullRect(self, units: 'QPageLayout.Unit') -> QtCore.QRectF: ... - def maximumMargins(self) -> QtCore.QMarginsF: ... - def minimumMargins(self) -> QtCore.QMarginsF: ... - def setMinimumMargins(self, minMargins: QtCore.QMarginsF) -> None: ... - def marginsPixels(self, resolution: int) -> QtCore.QMargins: ... - def marginsPoints(self) -> QtCore.QMargins: ... - @typing.overload - def margins(self) -> QtCore.QMarginsF: ... - @typing.overload - def margins(self, units: 'QPageLayout.Unit') -> QtCore.QMarginsF: ... - def setBottomMargin(self, bottomMargin: float) -> bool: ... - def setTopMargin(self, topMargin: float) -> bool: ... - def setRightMargin(self, rightMargin: float) -> bool: ... - def setLeftMargin(self, leftMargin: float) -> bool: ... - def setMargins(self, margins: QtCore.QMarginsF) -> bool: ... - def units(self) -> 'QPageLayout.Unit': ... - def setUnits(self, units: 'QPageLayout.Unit') -> None: ... - def orientation(self) -> 'QPageLayout.Orientation': ... - def setOrientation(self, orientation: 'QPageLayout.Orientation') -> None: ... - def pageSize(self) -> 'QPageSize': ... - def setPageSize(self, pageSize: 'QPageSize', minMargins: QtCore.QMarginsF = ...) -> None: ... - def mode(self) -> 'QPageLayout.Mode': ... - def setMode(self, mode: 'QPageLayout.Mode') -> None: ... - def isValid(self) -> bool: ... - def isEquivalentTo(self, other: 'QPageLayout') -> bool: ... - def swap(self, other: 'QPageLayout') -> None: ... - - -class QPageRanges(PyQt6.sip.simplewrapper): - - class Range(PyQt6.sip.simplewrapper): - - from_ = ... # type: int - to = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPageRanges.Range') -> None: ... - - def __ge__(self, rhs: 'QPageRanges.Range') -> bool: ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QPageRanges.Range') -> bool: ... - def contains(self, pageNumber: int) -> bool: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QPageRanges') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def lastPage(self) -> int: ... - def firstPage(self) -> int: ... - def isEmpty(self) -> bool: ... - def contains(self, pageNumber: int) -> bool: ... - @staticmethod - def fromString(ranges: typing.Optional[str]) -> 'QPageRanges': ... - def toString(self) -> str: ... - def clear(self) -> None: ... - def toRangeList(self) -> typing.List['QPageRanges.Range']: ... - def addRange(self, from_: int, to: int) -> None: ... - def addPage(self, pageNumber: int) -> None: ... - def swap(self, other: 'QPageRanges') -> None: ... - - -class QPageSize(PyQt6.sip.simplewrapper): - - class SizeMatchPolicy(enum.Enum): - FuzzyMatch = ... # type: QPageSize.SizeMatchPolicy - FuzzyOrientationMatch = ... # type: QPageSize.SizeMatchPolicy - ExactMatch = ... # type: QPageSize.SizeMatchPolicy - - class Unit(enum.Enum): - Millimeter = ... # type: QPageSize.Unit - Point = ... # type: QPageSize.Unit - Inch = ... # type: QPageSize.Unit - Pica = ... # type: QPageSize.Unit - Didot = ... # type: QPageSize.Unit - Cicero = ... # type: QPageSize.Unit - - class PageSizeId(enum.Enum): - A4 = ... # type: QPageSize.PageSizeId - B5 = ... # type: QPageSize.PageSizeId - Letter = ... # type: QPageSize.PageSizeId - Legal = ... # type: QPageSize.PageSizeId - Executive = ... # type: QPageSize.PageSizeId - A0 = ... # type: QPageSize.PageSizeId - A1 = ... # type: QPageSize.PageSizeId - A2 = ... # type: QPageSize.PageSizeId - A3 = ... # type: QPageSize.PageSizeId - A5 = ... # type: QPageSize.PageSizeId - A6 = ... # type: QPageSize.PageSizeId - A7 = ... # type: QPageSize.PageSizeId - A8 = ... # type: QPageSize.PageSizeId - A9 = ... # type: QPageSize.PageSizeId - B0 = ... # type: QPageSize.PageSizeId - B1 = ... # type: QPageSize.PageSizeId - B10 = ... # type: QPageSize.PageSizeId - B2 = ... # type: QPageSize.PageSizeId - B3 = ... # type: QPageSize.PageSizeId - B4 = ... # type: QPageSize.PageSizeId - B6 = ... # type: QPageSize.PageSizeId - B7 = ... # type: QPageSize.PageSizeId - B8 = ... # type: QPageSize.PageSizeId - B9 = ... # type: QPageSize.PageSizeId - C5E = ... # type: QPageSize.PageSizeId - Comm10E = ... # type: QPageSize.PageSizeId - DLE = ... # type: QPageSize.PageSizeId - Folio = ... # type: QPageSize.PageSizeId - Ledger = ... # type: QPageSize.PageSizeId - Tabloid = ... # type: QPageSize.PageSizeId - Custom = ... # type: QPageSize.PageSizeId - A10 = ... # type: QPageSize.PageSizeId - A3Extra = ... # type: QPageSize.PageSizeId - A4Extra = ... # type: QPageSize.PageSizeId - A4Plus = ... # type: QPageSize.PageSizeId - A4Small = ... # type: QPageSize.PageSizeId - A5Extra = ... # type: QPageSize.PageSizeId - B5Extra = ... # type: QPageSize.PageSizeId - JisB0 = ... # type: QPageSize.PageSizeId - JisB1 = ... # type: QPageSize.PageSizeId - JisB2 = ... # type: QPageSize.PageSizeId - JisB3 = ... # type: QPageSize.PageSizeId - JisB4 = ... # type: QPageSize.PageSizeId - JisB5 = ... # type: QPageSize.PageSizeId - JisB6 = ... # type: QPageSize.PageSizeId - JisB7 = ... # type: QPageSize.PageSizeId - JisB8 = ... # type: QPageSize.PageSizeId - JisB9 = ... # type: QPageSize.PageSizeId - JisB10 = ... # type: QPageSize.PageSizeId - AnsiC = ... # type: QPageSize.PageSizeId - AnsiD = ... # type: QPageSize.PageSizeId - AnsiE = ... # type: QPageSize.PageSizeId - LegalExtra = ... # type: QPageSize.PageSizeId - LetterExtra = ... # type: QPageSize.PageSizeId - LetterPlus = ... # type: QPageSize.PageSizeId - LetterSmall = ... # type: QPageSize.PageSizeId - TabloidExtra = ... # type: QPageSize.PageSizeId - ArchA = ... # type: QPageSize.PageSizeId - ArchB = ... # type: QPageSize.PageSizeId - ArchC = ... # type: QPageSize.PageSizeId - ArchD = ... # type: QPageSize.PageSizeId - ArchE = ... # type: QPageSize.PageSizeId - Imperial7x9 = ... # type: QPageSize.PageSizeId - Imperial8x10 = ... # type: QPageSize.PageSizeId - Imperial9x11 = ... # type: QPageSize.PageSizeId - Imperial9x12 = ... # type: QPageSize.PageSizeId - Imperial10x11 = ... # type: QPageSize.PageSizeId - Imperial10x13 = ... # type: QPageSize.PageSizeId - Imperial10x14 = ... # type: QPageSize.PageSizeId - Imperial12x11 = ... # type: QPageSize.PageSizeId - Imperial15x11 = ... # type: QPageSize.PageSizeId - ExecutiveStandard = ... # type: QPageSize.PageSizeId - Note = ... # type: QPageSize.PageSizeId - Quarto = ... # type: QPageSize.PageSizeId - Statement = ... # type: QPageSize.PageSizeId - SuperA = ... # type: QPageSize.PageSizeId - SuperB = ... # type: QPageSize.PageSizeId - Postcard = ... # type: QPageSize.PageSizeId - DoublePostcard = ... # type: QPageSize.PageSizeId - Prc16K = ... # type: QPageSize.PageSizeId - Prc32K = ... # type: QPageSize.PageSizeId - Prc32KBig = ... # type: QPageSize.PageSizeId - FanFoldUS = ... # type: QPageSize.PageSizeId - FanFoldGerman = ... # type: QPageSize.PageSizeId - FanFoldGermanLegal = ... # type: QPageSize.PageSizeId - EnvelopeB4 = ... # type: QPageSize.PageSizeId - EnvelopeB5 = ... # type: QPageSize.PageSizeId - EnvelopeB6 = ... # type: QPageSize.PageSizeId - EnvelopeC0 = ... # type: QPageSize.PageSizeId - EnvelopeC1 = ... # type: QPageSize.PageSizeId - EnvelopeC2 = ... # type: QPageSize.PageSizeId - EnvelopeC3 = ... # type: QPageSize.PageSizeId - EnvelopeC4 = ... # type: QPageSize.PageSizeId - EnvelopeC6 = ... # type: QPageSize.PageSizeId - EnvelopeC65 = ... # type: QPageSize.PageSizeId - EnvelopeC7 = ... # type: QPageSize.PageSizeId - Envelope9 = ... # type: QPageSize.PageSizeId - Envelope11 = ... # type: QPageSize.PageSizeId - Envelope12 = ... # type: QPageSize.PageSizeId - Envelope14 = ... # type: QPageSize.PageSizeId - EnvelopeMonarch = ... # type: QPageSize.PageSizeId - EnvelopePersonal = ... # type: QPageSize.PageSizeId - EnvelopeChou3 = ... # type: QPageSize.PageSizeId - EnvelopeChou4 = ... # type: QPageSize.PageSizeId - EnvelopeInvite = ... # type: QPageSize.PageSizeId - EnvelopeItalian = ... # type: QPageSize.PageSizeId - EnvelopeKaku2 = ... # type: QPageSize.PageSizeId - EnvelopeKaku3 = ... # type: QPageSize.PageSizeId - EnvelopePrc1 = ... # type: QPageSize.PageSizeId - EnvelopePrc2 = ... # type: QPageSize.PageSizeId - EnvelopePrc3 = ... # type: QPageSize.PageSizeId - EnvelopePrc4 = ... # type: QPageSize.PageSizeId - EnvelopePrc5 = ... # type: QPageSize.PageSizeId - EnvelopePrc6 = ... # type: QPageSize.PageSizeId - EnvelopePrc7 = ... # type: QPageSize.PageSizeId - EnvelopePrc8 = ... # type: QPageSize.PageSizeId - EnvelopePrc9 = ... # type: QPageSize.PageSizeId - EnvelopePrc10 = ... # type: QPageSize.PageSizeId - EnvelopeYou4 = ... # type: QPageSize.PageSizeId - AnsiA = ... # type: QPageSize.PageSizeId - AnsiB = ... # type: QPageSize.PageSizeId - EnvelopeC5 = ... # type: QPageSize.PageSizeId - EnvelopeDL = ... # type: QPageSize.PageSizeId - Envelope10 = ... # type: QPageSize.PageSizeId - LastPageSize = ... # type: QPageSize.PageSizeId - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pageSizeId: 'QPageSize.PageSizeId') -> None: ... - @typing.overload - def __init__(self, pointSize: QtCore.QSize, name: typing.Optional[str] = ..., matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSizeF, units: 'QPageSize.Unit', name: typing.Optional[str] = ..., matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QPageSize') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def rectPixels(self, resolution: int) -> QtCore.QRect: ... - def rectPoints(self) -> QtCore.QRect: ... - def rect(self, units: 'QPageSize.Unit') -> QtCore.QRectF: ... - @typing.overload - def sizePixels(self, resolution: int) -> QtCore.QSize: ... - @typing.overload - @staticmethod - def sizePixels(pageSizeId: 'QPageSize.PageSizeId', resolution: int) -> QtCore.QSize: ... - @typing.overload - def sizePoints(self) -> QtCore.QSize: ... - @typing.overload - @staticmethod - def sizePoints(pageSizeId: 'QPageSize.PageSizeId') -> QtCore.QSize: ... - @typing.overload - def size(self, units: 'QPageSize.Unit') -> QtCore.QSizeF: ... - @typing.overload - @staticmethod - def size(pageSizeId: 'QPageSize.PageSizeId', units: 'QPageSize.Unit') -> QtCore.QSizeF: ... - @typing.overload - def definitionUnits(self) -> 'QPageSize.Unit': ... - @typing.overload - @staticmethod - def definitionUnits(pageSizeId: 'QPageSize.PageSizeId') -> 'QPageSize.Unit': ... - @typing.overload - def definitionSize(self) -> QtCore.QSizeF: ... - @typing.overload - @staticmethod - def definitionSize(pageSizeId: 'QPageSize.PageSizeId') -> QtCore.QSizeF: ... - @typing.overload - def windowsId(self) -> int: ... - @typing.overload - @staticmethod - def windowsId(pageSizeId: 'QPageSize.PageSizeId') -> int: ... - @typing.overload - def id(self) -> 'QPageSize.PageSizeId': ... - @typing.overload - @staticmethod - def id(pointSize: QtCore.QSize, matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> 'QPageSize.PageSizeId': ... - @typing.overload - @staticmethod - def id(size: QtCore.QSizeF, units: 'QPageSize.Unit', matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> 'QPageSize.PageSizeId': ... - @typing.overload - @staticmethod - def id(windowsId: int) -> 'QPageSize.PageSizeId': ... - @typing.overload - def name(self) -> str: ... - @typing.overload - @staticmethod - def name(pageSizeId: 'QPageSize.PageSizeId') -> str: ... - @typing.overload - def key(self) -> str: ... - @typing.overload - @staticmethod - def key(pageSizeId: 'QPageSize.PageSizeId') -> str: ... - def isValid(self) -> bool: ... - def isEquivalentTo(self, other: 'QPageSize') -> bool: ... - def swap(self, other: 'QPageSize') -> None: ... - - -class QWindow(QtCore.QObject, QSurface): - - class Visibility(enum.Enum): - Hidden = ... # type: QWindow.Visibility - AutomaticVisibility = ... # type: QWindow.Visibility - Windowed = ... # type: QWindow.Visibility - Minimized = ... # type: QWindow.Visibility - Maximized = ... # type: QWindow.Visibility - FullScreen = ... # type: QWindow.Visibility - - class AncestorMode(enum.Enum): - ExcludeTransients = ... # type: QWindow.AncestorMode - IncludeTransients = ... # type: QWindow.AncestorMode - - @typing.overload - def __init__(self, screen: typing.Optional['QScreen'] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QWindow']) -> None: ... - - def nativeEvent(self, eventType: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], message: typing.Optional[PyQt6.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[PyQt6.sip.voidptr]]: ... - def closeEvent(self, a0: typing.Optional[QCloseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QPaintEvent]) -> None: ... - def startSystemMove(self) -> bool: ... - def startSystemResize(self, edges: QtCore.Qt.Edge) -> bool: ... - def setWindowStates(self, states: QtCore.Qt.WindowState) -> None: ... - def windowStates(self) -> QtCore.Qt.WindowState: ... - def setFlag(self, a0: QtCore.Qt.WindowType, on: bool = ...) -> None: ... - opacityChanged: typing.ClassVar[QtCore.pyqtSignal] - activeChanged: typing.ClassVar[QtCore.pyqtSignal] - visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def fromWinId(id: PyQt6.sip.voidptr) -> typing.Optional['QWindow']: ... - def mask(self) -> 'QRegion': ... - def setMask(self, region: 'QRegion') -> None: ... - def opacity(self) -> float: ... - def setVisibility(self, v: 'QWindow.Visibility') -> None: ... - def visibility(self) -> 'QWindow.Visibility': ... - def tabletEvent(self, a0: typing.Optional[QTabletEvent]) -> None: ... - def touchEvent(self, a0: typing.Optional[QTouchEvent]) -> None: ... - def wheelEvent(self, a0: typing.Optional[QWheelEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QKeyEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def hideEvent(self, a0: typing.Optional[QHideEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QShowEvent]) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QFocusEvent]) -> None: ... - def moveEvent(self, a0: typing.Optional[QMoveEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QResizeEvent]) -> None: ... - def exposeEvent(self, a0: typing.Optional[QExposeEvent]) -> None: ... - windowTitleChanged: typing.ClassVar[QtCore.pyqtSignal] - focusObjectChanged: typing.ClassVar[QtCore.pyqtSignal] - contentOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] - visibleChanged: typing.ClassVar[QtCore.pyqtSignal] - maximumHeightChanged: typing.ClassVar[QtCore.pyqtSignal] - maximumWidthChanged: typing.ClassVar[QtCore.pyqtSignal] - minimumHeightChanged: typing.ClassVar[QtCore.pyqtSignal] - minimumWidthChanged: typing.ClassVar[QtCore.pyqtSignal] - heightChanged: typing.ClassVar[QtCore.pyqtSignal] - widthChanged: typing.ClassVar[QtCore.pyqtSignal] - yChanged: typing.ClassVar[QtCore.pyqtSignal] - xChanged: typing.ClassVar[QtCore.pyqtSignal] - windowStateChanged: typing.ClassVar[QtCore.pyqtSignal] - modalityChanged: typing.ClassVar[QtCore.pyqtSignal] - screenChanged: typing.ClassVar[QtCore.pyqtSignal] - def requestUpdate(self) -> None: ... - def alert(self, msec: int) -> None: ... - def setMaximumHeight(self, h: int) -> None: ... - def setMaximumWidth(self, w: int) -> None: ... - def setMinimumHeight(self, h: int) -> None: ... - def setMinimumWidth(self, w: int) -> None: ... - def setHeight(self, arg: int) -> None: ... - def setWidth(self, arg: int) -> None: ... - def setY(self, arg: int) -> None: ... - def setX(self, arg: int) -> None: ... - def setTitle(self, a0: typing.Optional[str]) -> None: ... - def lower(self) -> None: ... - def raise_(self) -> None: ... - def close(self) -> bool: ... - def showNormal(self) -> None: ... - def showFullScreen(self) -> None: ... - def showMaximized(self) -> None: ... - def showMinimized(self) -> None: ... - def hide(self) -> None: ... - def show(self) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def unsetCursor(self) -> None: ... - def setCursor(self, a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... - def cursor(self) -> QCursor: ... - @typing.overload - def mapFromGlobal(self, pos: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapFromGlobal(self, pos: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToGlobal(self, pos: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapToGlobal(self, pos: QtCore.QPointF) -> QtCore.QPointF: ... - def focusObject(self) -> typing.Optional[QtCore.QObject]: ... - def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... - def screen(self) -> typing.Optional['QScreen']: ... - def setMouseGrabEnabled(self, grab: bool) -> bool: ... - def setKeyboardGrabEnabled(self, grab: bool) -> bool: ... - def destroy(self) -> None: ... - def icon(self) -> QIcon: ... - def setIcon(self, icon: QIcon) -> None: ... - def filePath(self) -> str: ... - def setFilePath(self, filePath: typing.Optional[str]) -> None: ... - @typing.overload - def resize(self, newSize: QtCore.QSize) -> None: ... - @typing.overload - def resize(self, w: int, h: int) -> None: ... - @typing.overload - def setPosition(self, pt: QtCore.QPoint) -> None: ... - @typing.overload - def setPosition(self, posx: int, posy: int) -> None: ... - def position(self) -> QtCore.QPoint: ... - def size(self) -> QtCore.QSize: ... - def y(self) -> int: ... - def x(self) -> int: ... - def height(self) -> int: ... - def width(self) -> int: ... - def setFramePosition(self, point: QtCore.QPoint) -> None: ... - def framePosition(self) -> QtCore.QPoint: ... - def frameGeometry(self) -> QtCore.QRect: ... - def frameMargins(self) -> QtCore.QMargins: ... - def geometry(self) -> QtCore.QRect: ... - @typing.overload - def setGeometry(self, posx: int, posy: int, w: int, h: int) -> None: ... - @typing.overload - def setGeometry(self, rect: QtCore.QRect) -> None: ... - def setSizeIncrement(self, size: QtCore.QSize) -> None: ... - def setBaseSize(self, size: QtCore.QSize) -> None: ... - def setMaximumSize(self, size: QtCore.QSize) -> None: ... - def setMinimumSize(self, size: QtCore.QSize) -> None: ... - def sizeIncrement(self) -> QtCore.QSize: ... - def baseSize(self) -> QtCore.QSize: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def maximumHeight(self) -> int: ... - def maximumWidth(self) -> int: ... - def minimumHeight(self) -> int: ... - def minimumWidth(self) -> int: ... - def isExposed(self) -> bool: ... - def isAncestorOf(self, child: typing.Optional['QWindow'], mode: 'QWindow.AncestorMode' = ...) -> bool: ... - def transientParent(self) -> typing.Optional['QWindow']: ... - def setTransientParent(self, parent: typing.Optional['QWindow']) -> None: ... - def setWindowState(self, state: QtCore.Qt.WindowState) -> None: ... - def windowState(self) -> QtCore.Qt.WindowState: ... - def devicePixelRatio(self) -> float: ... - def contentOrientation(self) -> QtCore.Qt.ScreenOrientation: ... - def reportContentOrientationChange(self, orientation: QtCore.Qt.ScreenOrientation) -> None: ... - def isActive(self) -> bool: ... - def requestActivate(self) -> None: ... - def setOpacity(self, level: float) -> None: ... - def title(self) -> str: ... - def type(self) -> QtCore.Qt.WindowType: ... - def flags(self) -> QtCore.Qt.WindowType: ... - def setFlags(self, flags: QtCore.Qt.WindowType) -> None: ... - def requestedFormat(self) -> 'QSurfaceFormat': ... - def format(self) -> 'QSurfaceFormat': ... - def setFormat(self, format: 'QSurfaceFormat') -> None: ... - def setModality(self, modality: QtCore.Qt.WindowModality) -> None: ... - def modality(self) -> QtCore.Qt.WindowModality: ... - def isModal(self) -> bool: ... - def isTopLevel(self) -> bool: ... - def setParent(self, parent: typing.Optional['QWindow']) -> None: ... - def parent(self, mode: 'QWindow.AncestorMode' = ...) -> typing.Optional['QWindow']: ... - def winId(self) -> PyQt6.sip.voidptr: ... - def create(self) -> None: ... - def isVisible(self) -> bool: ... - def surfaceType(self) -> QSurface.SurfaceType: ... - def setSurfaceType(self, surfaceType: QSurface.SurfaceType) -> None: ... - - -class QPaintDeviceWindow(QWindow, QPaintDevice): - - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def exposeEvent(self, a0: typing.Optional[QExposeEvent]) -> None: ... - def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... - def paintEvent(self, event: typing.Optional[QPaintEvent]) -> None: ... - @typing.overload - def update(self, rect: QtCore.QRect) -> None: ... - @typing.overload - def update(self, region: 'QRegion') -> None: ... - @typing.overload - def update(self) -> None: ... - - -class QTextItem(PyQt6.sip.simplewrapper): - - class RenderFlag(enum.Flag): - RightToLeft = ... # type: QTextItem.RenderFlag - Overline = ... # type: QTextItem.RenderFlag - Underline = ... # type: QTextItem.RenderFlag - StrikeOut = ... # type: QTextItem.RenderFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextItem') -> None: ... - - def font(self) -> QFont: ... - def text(self) -> str: ... - def renderFlags(self) -> 'QTextItem.RenderFlag': ... - def width(self) -> float: ... - def ascent(self) -> float: ... - def descent(self) -> float: ... - - -class QPaintEngine(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - X11 = ... # type: QPaintEngine.Type - Windows = ... # type: QPaintEngine.Type - QuickDraw = ... # type: QPaintEngine.Type - CoreGraphics = ... # type: QPaintEngine.Type - MacPrinter = ... # type: QPaintEngine.Type - QWindowSystem = ... # type: QPaintEngine.Type - OpenGL = ... # type: QPaintEngine.Type - Picture = ... # type: QPaintEngine.Type - SVG = ... # type: QPaintEngine.Type - Raster = ... # type: QPaintEngine.Type - Direct3D = ... # type: QPaintEngine.Type - Pdf = ... # type: QPaintEngine.Type - OpenVG = ... # type: QPaintEngine.Type - OpenGL2 = ... # type: QPaintEngine.Type - PaintBuffer = ... # type: QPaintEngine.Type - Blitter = ... # type: QPaintEngine.Type - Direct2D = ... # type: QPaintEngine.Type - User = ... # type: QPaintEngine.Type - MaxUser = ... # type: QPaintEngine.Type - - class PolygonDrawMode(enum.Enum): - OddEvenMode = ... # type: QPaintEngine.PolygonDrawMode - WindingMode = ... # type: QPaintEngine.PolygonDrawMode - ConvexMode = ... # type: QPaintEngine.PolygonDrawMode - PolylineMode = ... # type: QPaintEngine.PolygonDrawMode - - class DirtyFlag(enum.Flag): - DirtyPen = ... # type: QPaintEngine.DirtyFlag - DirtyBrush = ... # type: QPaintEngine.DirtyFlag - DirtyBrushOrigin = ... # type: QPaintEngine.DirtyFlag - DirtyFont = ... # type: QPaintEngine.DirtyFlag - DirtyBackground = ... # type: QPaintEngine.DirtyFlag - DirtyBackgroundMode = ... # type: QPaintEngine.DirtyFlag - DirtyTransform = ... # type: QPaintEngine.DirtyFlag - DirtyClipRegion = ... # type: QPaintEngine.DirtyFlag - DirtyClipPath = ... # type: QPaintEngine.DirtyFlag - DirtyHints = ... # type: QPaintEngine.DirtyFlag - DirtyCompositionMode = ... # type: QPaintEngine.DirtyFlag - DirtyClipEnabled = ... # type: QPaintEngine.DirtyFlag - DirtyOpacity = ... # type: QPaintEngine.DirtyFlag - AllDirty = ... # type: QPaintEngine.DirtyFlag - - class PaintEngineFeature(enum.Flag): - PrimitiveTransform = ... # type: QPaintEngine.PaintEngineFeature - PatternTransform = ... # type: QPaintEngine.PaintEngineFeature - PixmapTransform = ... # type: QPaintEngine.PaintEngineFeature - PatternBrush = ... # type: QPaintEngine.PaintEngineFeature - LinearGradientFill = ... # type: QPaintEngine.PaintEngineFeature - RadialGradientFill = ... # type: QPaintEngine.PaintEngineFeature - ConicalGradientFill = ... # type: QPaintEngine.PaintEngineFeature - AlphaBlend = ... # type: QPaintEngine.PaintEngineFeature - PorterDuff = ... # type: QPaintEngine.PaintEngineFeature - PainterPaths = ... # type: QPaintEngine.PaintEngineFeature - Antialiasing = ... # type: QPaintEngine.PaintEngineFeature - BrushStroke = ... # type: QPaintEngine.PaintEngineFeature - ConstantOpacity = ... # type: QPaintEngine.PaintEngineFeature - MaskedBrush = ... # type: QPaintEngine.PaintEngineFeature - PaintOutsidePaintEvent = ... # type: QPaintEngine.PaintEngineFeature - PerspectiveTransform = ... # type: QPaintEngine.PaintEngineFeature - BlendModes = ... # type: QPaintEngine.PaintEngineFeature - ObjectBoundingModeGradients = ... # type: QPaintEngine.PaintEngineFeature - RasterOpModes = ... # type: QPaintEngine.PaintEngineFeature - AllFeatures = ... # type: QPaintEngine.PaintEngineFeature - - def __init__(self, features: 'QPaintEngine.PaintEngineFeature' = ...) -> None: ... - - def hasFeature(self, feature: 'QPaintEngine.PaintEngineFeature') -> bool: ... - def painter(self) -> typing.Optional['QPainter']: ... - def type(self) -> 'QPaintEngine.Type': ... - def paintDevice(self) -> typing.Optional[QPaintDevice]: ... - def setPaintDevice(self, device: typing.Optional[QPaintDevice]) -> None: ... - def drawImage(self, r: QtCore.QRectF, pm: QImage, sr: QtCore.QRectF, flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - def drawTiledPixmap(self, r: QtCore.QRectF, pixmap: QPixmap, s: QtCore.QPointF) -> None: ... - def drawTextItem(self, p: QtCore.QPointF, textItem: QTextItem) -> None: ... - def drawPixmap(self, r: QtCore.QRectF, pm: QPixmap, sr: QtCore.QRectF) -> None: ... - @typing.overload - def drawPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]], mode: 'QPaintEngine.PolygonDrawMode') -> None: ... - @typing.overload - def drawPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]], mode: 'QPaintEngine.PolygonDrawMode') -> None: ... - @typing.overload - def drawPoints(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]]) -> None: ... - @typing.overload - def drawPoints(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]]) -> None: ... - def drawPath(self, path: 'QPainterPath') -> None: ... - @typing.overload - def drawEllipse(self, r: QtCore.QRectF) -> None: ... - @typing.overload - def drawEllipse(self, r: QtCore.QRect) -> None: ... - @typing.overload - def drawLines(self, lines: typing.Optional[PyQt6.sip.array[QtCore.QLine]]) -> None: ... - @typing.overload - def drawLines(self, lines: typing.Optional[PyQt6.sip.array[QtCore.QLineF]]) -> None: ... - @typing.overload - def drawRects(self, rects: typing.Optional[PyQt6.sip.array[QtCore.QRect]]) -> None: ... - @typing.overload - def drawRects(self, rects: typing.Optional[PyQt6.sip.array[QtCore.QRectF]]) -> None: ... - def updateState(self, state: 'QPaintEngineState') -> None: ... - def end(self) -> bool: ... - def begin(self, pdev: typing.Optional[QPaintDevice]) -> bool: ... - def setActive(self, newState: bool) -> None: ... - def isActive(self) -> bool: ... - - -class QPaintEngineState(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPaintEngineState') -> None: ... - - def penNeedsResolving(self) -> bool: ... - def brushNeedsResolving(self) -> bool: ... - def transform(self) -> 'QTransform': ... - def painter(self) -> typing.Optional['QPainter']: ... - def compositionMode(self) -> 'QPainter.CompositionMode': ... - def renderHints(self) -> 'QPainter.RenderHint': ... - def isClipEnabled(self) -> bool: ... - def clipPath(self) -> 'QPainterPath': ... - def clipRegion(self) -> 'QRegion': ... - def clipOperation(self) -> QtCore.Qt.ClipOperation: ... - def opacity(self) -> float: ... - def font(self) -> QFont: ... - def backgroundMode(self) -> QtCore.Qt.BGMode: ... - def backgroundBrush(self) -> QBrush: ... - def brushOrigin(self) -> QtCore.QPointF: ... - def brush(self) -> QBrush: ... - def pen(self) -> 'QPen': ... - def state(self) -> QPaintEngine.DirtyFlag: ... - - -class QPainter(PyQt6.sip.simplewrapper): - - class PixmapFragmentHint(enum.Flag): - OpaqueHint = ... # type: QPainter.PixmapFragmentHint - - class CompositionMode(enum.Enum): - CompositionMode_SourceOver = ... # type: QPainter.CompositionMode - CompositionMode_DestinationOver = ... # type: QPainter.CompositionMode - CompositionMode_Clear = ... # type: QPainter.CompositionMode - CompositionMode_Source = ... # type: QPainter.CompositionMode - CompositionMode_Destination = ... # type: QPainter.CompositionMode - CompositionMode_SourceIn = ... # type: QPainter.CompositionMode - CompositionMode_DestinationIn = ... # type: QPainter.CompositionMode - CompositionMode_SourceOut = ... # type: QPainter.CompositionMode - CompositionMode_DestinationOut = ... # type: QPainter.CompositionMode - CompositionMode_SourceAtop = ... # type: QPainter.CompositionMode - CompositionMode_DestinationAtop = ... # type: QPainter.CompositionMode - CompositionMode_Xor = ... # type: QPainter.CompositionMode - CompositionMode_Plus = ... # type: QPainter.CompositionMode - CompositionMode_Multiply = ... # type: QPainter.CompositionMode - CompositionMode_Screen = ... # type: QPainter.CompositionMode - CompositionMode_Overlay = ... # type: QPainter.CompositionMode - CompositionMode_Darken = ... # type: QPainter.CompositionMode - CompositionMode_Lighten = ... # type: QPainter.CompositionMode - CompositionMode_ColorDodge = ... # type: QPainter.CompositionMode - CompositionMode_ColorBurn = ... # type: QPainter.CompositionMode - CompositionMode_HardLight = ... # type: QPainter.CompositionMode - CompositionMode_SoftLight = ... # type: QPainter.CompositionMode - CompositionMode_Difference = ... # type: QPainter.CompositionMode - CompositionMode_Exclusion = ... # type: QPainter.CompositionMode - RasterOp_SourceOrDestination = ... # type: QPainter.CompositionMode - RasterOp_SourceAndDestination = ... # type: QPainter.CompositionMode - RasterOp_SourceXorDestination = ... # type: QPainter.CompositionMode - RasterOp_NotSourceAndNotDestination = ... # type: QPainter.CompositionMode - RasterOp_NotSourceOrNotDestination = ... # type: QPainter.CompositionMode - RasterOp_NotSourceXorDestination = ... # type: QPainter.CompositionMode - RasterOp_NotSource = ... # type: QPainter.CompositionMode - RasterOp_NotSourceAndDestination = ... # type: QPainter.CompositionMode - RasterOp_SourceAndNotDestination = ... # type: QPainter.CompositionMode - RasterOp_NotSourceOrDestination = ... # type: QPainter.CompositionMode - RasterOp_SourceOrNotDestination = ... # type: QPainter.CompositionMode - RasterOp_ClearDestination = ... # type: QPainter.CompositionMode - RasterOp_SetDestination = ... # type: QPainter.CompositionMode - RasterOp_NotDestination = ... # type: QPainter.CompositionMode - - class RenderHint(enum.Flag): - Antialiasing = ... # type: QPainter.RenderHint - TextAntialiasing = ... # type: QPainter.RenderHint - SmoothPixmapTransform = ... # type: QPainter.RenderHint - LosslessImageRendering = ... # type: QPainter.RenderHint - VerticalSubpixelPositioning = ... # type: QPainter.RenderHint - NonCosmeticBrushPatterns = ... # type: QPainter.RenderHint - - class PixmapFragment(PyQt6.sip.simplewrapper): - - height = ... # type: float - opacity = ... # type: float - rotation = ... # type: float - scaleX = ... # type: float - scaleY = ... # type: float - sourceLeft = ... # type: float - sourceTop = ... # type: float - width = ... # type: float - x = ... # type: float - y = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPainter.PixmapFragment') -> None: ... - - @staticmethod - def create(pos: QtCore.QPointF, sourceRect: QtCore.QRectF, scaleX: float = ..., scaleY: float = ..., rotation: float = ..., opacity: float = ...) -> 'QPainter.PixmapFragment': ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QPaintDevice]) -> None: ... - - def drawGlyphRun(self, position: QtCore.QPointF, glyphRun: QGlyphRun) -> None: ... - def clipBoundingRect(self) -> QtCore.QRectF: ... - @typing.overload - def drawStaticText(self, topLeftPosition: QtCore.QPointF, staticText: 'QStaticText') -> None: ... - @typing.overload - def drawStaticText(self, p: QtCore.QPoint, staticText: 'QStaticText') -> None: ... - @typing.overload - def drawStaticText(self, x: int, y: int, staticText: 'QStaticText') -> None: ... - def drawPixmapFragments(self, fragments: typing.Optional[PyQt6.sip.array['QPainter.PixmapFragment']], pixmap: QPixmap, hints: 'QPainter.PixmapFragmentHint' = ...) -> None: ... - def endNativePainting(self) -> None: ... - def beginNativePainting(self) -> None: ... - @typing.overload - def drawRoundedRect(self, rect: QtCore.QRectF, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... - @typing.overload - def drawRoundedRect(self, x: int, y: int, w: int, h: int, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... - @typing.overload - def drawRoundedRect(self, rect: QtCore.QRect, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... - def testRenderHint(self, hint: 'QPainter.RenderHint') -> bool: ... - def combinedTransform(self) -> 'QTransform': ... - def worldTransform(self) -> 'QTransform': ... - def setWorldTransform(self, matrix: 'QTransform', combine: bool = ...) -> None: ... - def resetTransform(self) -> None: ... - def deviceTransform(self) -> 'QTransform': ... - def transform(self) -> 'QTransform': ... - def setTransform(self, transform: 'QTransform', combine: bool = ...) -> None: ... - def setWorldMatrixEnabled(self, enabled: bool) -> None: ... - def worldMatrixEnabled(self) -> bool: ... - def setOpacity(self, opacity: float) -> None: ... - def opacity(self) -> float: ... - @typing.overload - def drawImage(self, r: QtCore.QRectF, image: QImage) -> None: ... - @typing.overload - def drawImage(self, targetRect: QtCore.QRectF, image: QImage, sourceRect: QtCore.QRectF, flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def drawImage(self, r: QtCore.QRect, image: QImage) -> None: ... - @typing.overload - def drawImage(self, targetRect: QtCore.QRect, image: QImage, sourceRect: QtCore.QRect, flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def drawImage(self, p: QtCore.QPointF, image: QImage) -> None: ... - @typing.overload - def drawImage(self, p: QtCore.QPointF, image: QImage, sr: QtCore.QRectF, flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def drawImage(self, p: QtCore.QPoint, image: QImage) -> None: ... - @typing.overload - def drawImage(self, p: QtCore.QPoint, image: QImage, sr: QtCore.QRect, flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def drawImage(self, x: int, y: int, image: QImage, sx: int = ..., sy: int = ..., sw: int = ..., sh: int = ..., flags: QtCore.Qt.ImageConversionFlag = ...) -> None: ... - @typing.overload - def drawPoint(self, p: QtCore.QPointF) -> None: ... - @typing.overload - def drawPoint(self, x: int, y: int) -> None: ... - @typing.overload - def drawPoint(self, p: QtCore.QPoint) -> None: ... - @typing.overload - def drawRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def drawRect(self, x: int, y: int, w: int, h: int) -> None: ... - @typing.overload - def drawRect(self, r: QtCore.QRect) -> None: ... - @typing.overload - def drawLine(self, l: QtCore.QLineF) -> None: ... - @typing.overload - def drawLine(self, line: QtCore.QLine) -> None: ... - @typing.overload - def drawLine(self, x1: int, y1: int, x2: int, y2: int) -> None: ... - @typing.overload - def drawLine(self, p1: QtCore.QPoint, p2: QtCore.QPoint) -> None: ... - @typing.overload - def drawLine(self, p1: QtCore.QPointF, p2: QtCore.QPointF) -> None: ... - def paintEngine(self) -> typing.Optional[QPaintEngine]: ... - def setRenderHints(self, hints: 'QPainter.RenderHint', on: bool = ...) -> None: ... - def renderHints(self) -> 'QPainter.RenderHint': ... - def setRenderHint(self, hint: 'QPainter.RenderHint', on: bool = ...) -> None: ... - @typing.overload - def eraseRect(self, a0: QtCore.QRectF) -> None: ... - @typing.overload - def eraseRect(self, rect: QtCore.QRect) -> None: ... - @typing.overload - def eraseRect(self, x: int, y: int, w: int, h: int) -> None: ... - @typing.overload - def fillRect(self, a0: QtCore.QRectF, a1: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def fillRect(self, a0: QtCore.QRect, a1: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def fillRect(self, x: int, y: int, w: int, h: int, b: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def fillRect(self, a0: QtCore.QRectF, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def fillRect(self, a0: QtCore.QRect, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def fillRect(self, x: int, y: int, w: int, h: int, b: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def fillRect(self, x: int, y: int, w: int, h: int, c: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRect, c: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRectF, c: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def fillRect(self, x: int, y: int, w: int, h: int, style: QtCore.Qt.BrushStyle) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRect, style: QtCore.Qt.BrushStyle) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRectF, style: QtCore.Qt.BrushStyle) -> None: ... - @typing.overload - def fillRect(self, x: int, y: int, w: int, h: int, preset: QGradient.Preset) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRect, preset: QGradient.Preset) -> None: ... - @typing.overload - def fillRect(self, r: QtCore.QRectF, preset: QGradient.Preset) -> None: ... - @typing.overload - def boundingRect(self, rect: QtCore.QRectF, flags: int, text: typing.Optional[str]) -> QtCore.QRectF: ... - @typing.overload - def boundingRect(self, rect: QtCore.QRect, flags: int, text: typing.Optional[str]) -> QtCore.QRect: ... - @typing.overload - def boundingRect(self, rectangle: QtCore.QRectF, text: typing.Optional[str], option: 'QTextOption' = ...) -> QtCore.QRectF: ... - @typing.overload - def boundingRect(self, x: int, y: int, w: int, h: int, flags: int, text: typing.Optional[str]) -> QtCore.QRect: ... - @typing.overload - def drawText(self, p: QtCore.QPointF, s: typing.Optional[str]) -> None: ... - @typing.overload - def drawText(self, rectangle: QtCore.QRectF, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRectF]: ... - @typing.overload - def drawText(self, rectangle: QtCore.QRect, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRect]: ... - @typing.overload - def drawText(self, rectangle: QtCore.QRectF, text: typing.Optional[str], option: 'QTextOption' = ...) -> None: ... - @typing.overload - def drawText(self, p: QtCore.QPoint, s: typing.Optional[str]) -> None: ... - @typing.overload - def drawText(self, x: int, y: int, width: int, height: int, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRect]: ... - @typing.overload - def drawText(self, x: int, y: int, s: typing.Optional[str]) -> None: ... - def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... - def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... - @typing.overload - def drawPixmap(self, targetRect: QtCore.QRectF, pixmap: QPixmap, sourceRect: QtCore.QRectF) -> None: ... - @typing.overload - def drawPixmap(self, targetRect: QtCore.QRect, pixmap: QPixmap, sourceRect: QtCore.QRect) -> None: ... - @typing.overload - def drawPixmap(self, p: QtCore.QPointF, pm: QPixmap) -> None: ... - @typing.overload - def drawPixmap(self, p: QtCore.QPoint, pm: QPixmap) -> None: ... - @typing.overload - def drawPixmap(self, r: QtCore.QRect, pm: QPixmap) -> None: ... - @typing.overload - def drawPixmap(self, x: int, y: int, pm: QPixmap) -> None: ... - @typing.overload - def drawPixmap(self, x: int, y: int, w: int, h: int, pm: QPixmap) -> None: ... - @typing.overload - def drawPixmap(self, x: int, y: int, w: int, h: int, pm: QPixmap, sx: int, sy: int, sw: int, sh: int) -> None: ... - @typing.overload - def drawPixmap(self, x: int, y: int, pm: QPixmap, sx: int, sy: int, sw: int, sh: int) -> None: ... - @typing.overload - def drawPixmap(self, p: QtCore.QPointF, pm: QPixmap, sr: QtCore.QRectF) -> None: ... - @typing.overload - def drawPixmap(self, p: QtCore.QPoint, pm: QPixmap, sr: QtCore.QRect) -> None: ... - @typing.overload - def drawPicture(self, p: QtCore.QPointF, picture: 'QPicture') -> None: ... - @typing.overload - def drawPicture(self, x: int, y: int, p: 'QPicture') -> None: ... - @typing.overload - def drawPicture(self, pt: QtCore.QPoint, p: 'QPicture') -> None: ... - @typing.overload - def drawTiledPixmap(self, rectangle: QtCore.QRectF, pixmap: QPixmap, pos: QtCore.QPointF = ...) -> None: ... - @typing.overload - def drawTiledPixmap(self, rectangle: QtCore.QRect, pixmap: QPixmap, pos: QtCore.QPoint = ...) -> None: ... - @typing.overload - def drawTiledPixmap(self, x: int, y: int, width: int, height: int, pixmap: QPixmap, sx: int = ..., sy: int = ...) -> None: ... - @typing.overload - def drawChord(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... - @typing.overload - def drawChord(self, rect: QtCore.QRect, a: int, alen: int) -> None: ... - @typing.overload - def drawChord(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... - @typing.overload - def drawPie(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... - @typing.overload - def drawPie(self, rect: QtCore.QRect, a: int, alen: int) -> None: ... - @typing.overload - def drawPie(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... - @typing.overload - def drawArc(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... - @typing.overload - def drawArc(self, r: QtCore.QRect, a: int, alen: int) -> None: ... - @typing.overload - def drawArc(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... - @typing.overload - def drawConvexPolygon(self, poly: 'QPolygonF') -> None: ... - @typing.overload - def drawConvexPolygon(self, poly: 'QPolygon') -> None: ... - @typing.overload - def drawConvexPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]]) -> None: ... - @typing.overload - def drawConvexPolygon(self, point: typing.Optional[QtCore.QPointF], *args: QtCore.QPointF) -> None: ... - @typing.overload - def drawConvexPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]]) -> None: ... - @typing.overload - def drawConvexPolygon(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... - @typing.overload - def drawPolygon(self, points: 'QPolygonF', fillRule: QtCore.Qt.FillRule = ...) -> None: ... - @typing.overload - def drawPolygon(self, points: 'QPolygon', fillRule: QtCore.Qt.FillRule = ...) -> None: ... - @typing.overload - def drawPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]], fillRule: QtCore.Qt.FillRule = ...) -> None: ... - @typing.overload - def drawPolygon(self, point: typing.Optional[QtCore.QPointF], *args: QtCore.QPointF) -> None: ... - @typing.overload - def drawPolygon(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]], fillRule: QtCore.Qt.FillRule = ...) -> None: ... - @typing.overload - def drawPolygon(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... - @typing.overload - def drawPolyline(self, polyline: 'QPolygonF') -> None: ... - @typing.overload - def drawPolyline(self, polyline: 'QPolygon') -> None: ... - @typing.overload - def drawPolyline(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]]) -> None: ... - @typing.overload - def drawPolyline(self, point: typing.Optional[QtCore.QPointF], *args: QtCore.QPointF) -> None: ... - @typing.overload - def drawPolyline(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]]) -> None: ... - @typing.overload - def drawPolyline(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... - @typing.overload - def drawEllipse(self, r: QtCore.QRectF) -> None: ... - @typing.overload - def drawEllipse(self, r: QtCore.QRect) -> None: ... - @typing.overload - def drawEllipse(self, x: int, y: int, w: int, h: int) -> None: ... - @typing.overload - def drawEllipse(self, center: QtCore.QPointF, rx: float, ry: float) -> None: ... - @typing.overload - def drawEllipse(self, center: QtCore.QPoint, rx: int, ry: int) -> None: ... - @typing.overload - def drawRects(self, rects: typing.Optional[PyQt6.sip.array[QtCore.QRectF]]) -> None: ... - @typing.overload - def drawRects(self, rect: typing.Optional[QtCore.QRectF], *args: QtCore.QRectF) -> None: ... - @typing.overload - def drawRects(self, rects: typing.Optional[PyQt6.sip.array[QtCore.QRect]]) -> None: ... - @typing.overload - def drawRects(self, rect: typing.Optional[QtCore.QRect], *args: QtCore.QRect) -> None: ... - @typing.overload - def drawLines(self, lines: typing.Optional[PyQt6.sip.array[QtCore.QLineF]]) -> None: ... - @typing.overload - def drawLines(self, line: typing.Optional[QtCore.QLineF], *args: QtCore.QLineF) -> None: ... - @typing.overload - def drawLines(self, pointPairs: typing.Optional[PyQt6.sip.array[QtCore.QPointF]]) -> None: ... - @typing.overload - def drawLines(self, pointPair: typing.Optional[QtCore.QPointF], *args: QtCore.QPointF) -> None: ... - @typing.overload - def drawLines(self, lines: typing.Optional[PyQt6.sip.array[QtCore.QLine]]) -> None: ... - @typing.overload - def drawLines(self, line: typing.Optional[QtCore.QLine], *args: QtCore.QLine) -> None: ... - @typing.overload - def drawLines(self, pointPairs: typing.Optional[PyQt6.sip.array[QtCore.QPoint]]) -> None: ... - @typing.overload - def drawLines(self, pointPair: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... - @typing.overload - def drawPoints(self, points: 'QPolygonF') -> None: ... - @typing.overload - def drawPoints(self, points: 'QPolygon') -> None: ... - @typing.overload - def drawPoints(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPointF]]) -> None: ... - @typing.overload - def drawPoints(self, point: typing.Optional[QtCore.QPointF], *args: QtCore.QPointF) -> None: ... - @typing.overload - def drawPoints(self, points: typing.Optional[PyQt6.sip.array[QtCore.QPoint]]) -> None: ... - @typing.overload - def drawPoints(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... - def drawPath(self, path: 'QPainterPath') -> None: ... - def fillPath(self, path: 'QPainterPath', brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def strokePath(self, path: 'QPainterPath', pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - def viewTransformEnabled(self) -> bool: ... - def setViewTransformEnabled(self, enable: bool) -> None: ... - @typing.overload - def setViewport(self, viewport: QtCore.QRect) -> None: ... - @typing.overload - def setViewport(self, x: int, y: int, w: int, h: int) -> None: ... - def viewport(self) -> QtCore.QRect: ... - @typing.overload - def setWindow(self, window: QtCore.QRect) -> None: ... - @typing.overload - def setWindow(self, x: int, y: int, w: int, h: int) -> None: ... - def window(self) -> QtCore.QRect: ... - @typing.overload - def translate(self, offset: QtCore.QPointF) -> None: ... - @typing.overload - def translate(self, dx: float, dy: float) -> None: ... - @typing.overload - def translate(self, offset: QtCore.QPoint) -> None: ... - def rotate(self, a: float) -> None: ... - def shear(self, sh: float, sv: float) -> None: ... - def scale(self, sx: float, sy: float) -> None: ... - def restore(self) -> None: ... - def save(self) -> None: ... - def hasClipping(self) -> bool: ... - def setClipping(self, enable: bool) -> None: ... - def setClipPath(self, path: 'QPainterPath', operation: QtCore.Qt.ClipOperation = ...) -> None: ... - def setClipRegion(self, region: 'QRegion', operation: QtCore.Qt.ClipOperation = ...) -> None: ... - @typing.overload - def setClipRect(self, rectangle: QtCore.QRectF, operation: QtCore.Qt.ClipOperation = ...) -> None: ... - @typing.overload - def setClipRect(self, x: int, y: int, width: int, height: int, operation: QtCore.Qt.ClipOperation = ...) -> None: ... - @typing.overload - def setClipRect(self, rectangle: QtCore.QRect, operation: QtCore.Qt.ClipOperation = ...) -> None: ... - def clipPath(self) -> 'QPainterPath': ... - def clipRegion(self) -> 'QRegion': ... - def background(self) -> QBrush: ... - def setBackground(self, bg: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def setBrushOrigin(self, a0: QtCore.QPointF) -> None: ... - @typing.overload - def setBrushOrigin(self, x: int, y: int) -> None: ... - @typing.overload - def setBrushOrigin(self, p: QtCore.QPoint) -> None: ... - def brushOrigin(self) -> QtCore.QPoint: ... - def backgroundMode(self) -> QtCore.Qt.BGMode: ... - def setBackgroundMode(self, mode: QtCore.Qt.BGMode) -> None: ... - def brush(self) -> QBrush: ... - @typing.overload - def setBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def setBrush(self, style: QtCore.Qt.BrushStyle) -> None: ... - def pen(self) -> 'QPen': ... - @typing.overload - def setPen(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setPen(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - @typing.overload - def setPen(self, style: QtCore.Qt.PenStyle) -> None: ... - def fontInfo(self) -> QFontInfo: ... - def fontMetrics(self) -> QFontMetrics: ... - def setFont(self, f: QFont) -> None: ... - def font(self) -> QFont: ... - def compositionMode(self) -> 'QPainter.CompositionMode': ... - def setCompositionMode(self, mode: 'QPainter.CompositionMode') -> None: ... - def isActive(self) -> bool: ... - def end(self) -> bool: ... - def begin(self, a0: typing.Optional[QPaintDevice]) -> bool: ... - def device(self) -> typing.Optional[QPaintDevice]: ... - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - - -class QPainterPath(PyQt6.sip.simplewrapper): - - class ElementType(enum.Enum): - MoveToElement = ... # type: QPainterPath.ElementType - LineToElement = ... # type: QPainterPath.ElementType - CurveToElement = ... # type: QPainterPath.ElementType - CurveToDataElement = ... # type: QPainterPath.ElementType - - class Element(PyQt6.sip.simplewrapper): - - type = ... # type: 'QPainterPath.ElementType' - x = ... # type: float - y = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPainterPath.Element') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isCurveTo(self) -> bool: ... - def isLineTo(self) -> bool: ... - def isMoveTo(self) -> bool: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, startPoint: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, other: 'QPainterPath') -> None: ... - - def capacity(self) -> int: ... - def reserve(self, size: int) -> None: ... - def clear(self) -> None: ... - def swap(self, other: 'QPainterPath') -> None: ... - @typing.overload - def translated(self, dx: float, dy: float) -> 'QPainterPath': ... - @typing.overload - def translated(self, offset: QtCore.QPointF) -> 'QPainterPath': ... - @typing.overload - def translate(self, dx: float, dy: float) -> None: ... - @typing.overload - def translate(self, offset: QtCore.QPointF) -> None: ... - def __isub__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __iadd__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __ior__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __iand__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __sub__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __add__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __or__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def __and__(self, other: 'QPainterPath') -> 'QPainterPath': ... - def simplified(self) -> 'QPainterPath': ... - @typing.overload - def addRoundedRect(self, rect: QtCore.QRectF, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... - @typing.overload - def addRoundedRect(self, x: float, y: float, w: float, h: float, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... - def subtracted(self, r: 'QPainterPath') -> 'QPainterPath': ... - def intersected(self, r: 'QPainterPath') -> 'QPainterPath': ... - def united(self, r: 'QPainterPath') -> 'QPainterPath': ... - def slopeAtPercent(self, t: float) -> float: ... - def angleAtPercent(self, t: float) -> float: ... - def pointAtPercent(self, t: float) -> QtCore.QPointF: ... - def percentAtLength(self, t: float) -> float: ... - def length(self) -> float: ... - def setElementPositionAt(self, i: int, x: float, y: float) -> None: ... - def elementAt(self, i: int) -> 'QPainterPath.Element': ... - def elementCount(self) -> int: ... - def isEmpty(self) -> bool: ... - @typing.overload - def arcMoveTo(self, rect: QtCore.QRectF, angle: float) -> None: ... - @typing.overload - def arcMoveTo(self, x: float, y: float, w: float, h: float, angle: float) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def toFillPolygon(self, matrix: 'QTransform' = ...) -> 'QPolygonF': ... - def toFillPolygons(self, matrix: 'QTransform' = ...) -> typing.List['QPolygonF']: ... - def toSubpathPolygons(self, matrix: 'QTransform' = ...) -> typing.List['QPolygonF']: ... - def toReversed(self) -> 'QPainterPath': ... - def setFillRule(self, fillRule: QtCore.Qt.FillRule) -> None: ... - def fillRule(self) -> QtCore.Qt.FillRule: ... - def controlPointRect(self) -> QtCore.QRectF: ... - def boundingRect(self) -> QtCore.QRectF: ... - @typing.overload - def intersects(self, rect: QtCore.QRectF) -> bool: ... - @typing.overload - def intersects(self, p: 'QPainterPath') -> bool: ... - @typing.overload - def contains(self, pt: QtCore.QPointF) -> bool: ... - @typing.overload - def contains(self, rect: QtCore.QRectF) -> bool: ... - @typing.overload - def contains(self, p: 'QPainterPath') -> bool: ... - def connectPath(self, path: 'QPainterPath') -> None: ... - def addRegion(self, region: 'QRegion') -> None: ... - def addPath(self, path: 'QPainterPath') -> None: ... - @typing.overload - def addText(self, point: QtCore.QPointF, f: QFont, text: typing.Optional[str]) -> None: ... - @typing.overload - def addText(self, x: float, y: float, f: QFont, text: typing.Optional[str]) -> None: ... - def addPolygon(self, polygon: 'QPolygonF') -> None: ... - @typing.overload - def addEllipse(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def addEllipse(self, x: float, y: float, w: float, h: float) -> None: ... - @typing.overload - def addEllipse(self, center: QtCore.QPointF, rx: float, ry: float) -> None: ... - @typing.overload - def addRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def addRect(self, x: float, y: float, w: float, h: float) -> None: ... - def currentPosition(self) -> QtCore.QPointF: ... - @typing.overload - def quadTo(self, ctrlPt: QtCore.QPointF, endPt: QtCore.QPointF) -> None: ... - @typing.overload - def quadTo(self, ctrlPtx: float, ctrlPty: float, endPtx: float, endPty: float) -> None: ... - @typing.overload - def cubicTo(self, ctrlPt1: QtCore.QPointF, ctrlPt2: QtCore.QPointF, endPt: QtCore.QPointF) -> None: ... - @typing.overload - def cubicTo(self, ctrlPt1x: float, ctrlPt1y: float, ctrlPt2x: float, ctrlPt2y: float, endPtx: float, endPty: float) -> None: ... - @typing.overload - def arcTo(self, rect: QtCore.QRectF, startAngle: float, arcLength: float) -> None: ... - @typing.overload - def arcTo(self, x: float, y: float, w: float, h: float, startAngle: float, arcLenght: float) -> None: ... - @typing.overload - def lineTo(self, p: QtCore.QPointF) -> None: ... - @typing.overload - def lineTo(self, x: float, y: float) -> None: ... - @typing.overload - def moveTo(self, p: QtCore.QPointF) -> None: ... - @typing.overload - def moveTo(self, x: float, y: float) -> None: ... - def closeSubpath(self) -> None: ... - - -class QPainterPathStroker(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - - def dashOffset(self) -> float: ... - def setDashOffset(self, offset: float) -> None: ... - def createStroke(self, path: QPainterPath) -> QPainterPath: ... - def dashPattern(self) -> typing.List[float]: ... - @typing.overload - def setDashPattern(self, a0: QtCore.Qt.PenStyle) -> None: ... - @typing.overload - def setDashPattern(self, dashPattern: typing.Iterable[float]) -> None: ... - def curveThreshold(self) -> float: ... - def setCurveThreshold(self, threshold: float) -> None: ... - def miterLimit(self) -> float: ... - def setMiterLimit(self, length: float) -> None: ... - def joinStyle(self) -> QtCore.Qt.PenJoinStyle: ... - def setJoinStyle(self, style: QtCore.Qt.PenJoinStyle) -> None: ... - def capStyle(self) -> QtCore.Qt.PenCapStyle: ... - def setCapStyle(self, style: QtCore.Qt.PenCapStyle) -> None: ... - def width(self) -> float: ... - def setWidth(self, width: float) -> None: ... - - -class QPalette(PyQt6.sip.simplewrapper): - - class ColorRole(enum.Enum): - WindowText = ... # type: QPalette.ColorRole - Button = ... # type: QPalette.ColorRole - Light = ... # type: QPalette.ColorRole - Midlight = ... # type: QPalette.ColorRole - Dark = ... # type: QPalette.ColorRole - Mid = ... # type: QPalette.ColorRole - Text = ... # type: QPalette.ColorRole - BrightText = ... # type: QPalette.ColorRole - ButtonText = ... # type: QPalette.ColorRole - Base = ... # type: QPalette.ColorRole - Window = ... # type: QPalette.ColorRole - Shadow = ... # type: QPalette.ColorRole - Highlight = ... # type: QPalette.ColorRole - HighlightedText = ... # type: QPalette.ColorRole - Link = ... # type: QPalette.ColorRole - LinkVisited = ... # type: QPalette.ColorRole - AlternateBase = ... # type: QPalette.ColorRole - ToolTipBase = ... # type: QPalette.ColorRole - ToolTipText = ... # type: QPalette.ColorRole - PlaceholderText = ... # type: QPalette.ColorRole - Accent = ... # type: QPalette.ColorRole - NoRole = ... # type: QPalette.ColorRole - NColorRoles = ... # type: QPalette.ColorRole - - class ColorGroup(enum.Enum): - Active = ... # type: QPalette.ColorGroup - Disabled = ... # type: QPalette.ColorGroup - Inactive = ... # type: QPalette.ColorGroup - NColorGroups = ... # type: QPalette.ColorGroup - Current = ... # type: QPalette.ColorGroup - All = ... # type: QPalette.ColorGroup - Normal = ... # type: QPalette.ColorGroup - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, button: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def __init__(self, button: QtCore.Qt.GlobalColor) -> None: ... - @typing.overload - def __init__(self, button: typing.Union[QColor, QtCore.Qt.GlobalColor, int], background: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def __init__(self, foreground: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], button: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], light: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], dark: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], mid: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], bright_text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], base: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], background: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def __init__(self, palette: 'QPalette') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def accent(self) -> QBrush: ... - def swap(self, other: 'QPalette') -> None: ... - def cacheKey(self) -> int: ... - def isBrushSet(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> bool: ... - @typing.overload - def setColor(self, acg: 'QPalette.ColorGroup', acr: 'QPalette.ColorRole', acolor: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setColor(self, acr: 'QPalette.ColorRole', acolor: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def resolve(self, a0: 'QPalette') -> 'QPalette': ... - def isCopyOf(self, p: 'QPalette') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def placeholderText(self) -> QBrush: ... - def toolTipText(self) -> QBrush: ... - def toolTipBase(self) -> QBrush: ... - def linkVisited(self) -> QBrush: ... - def link(self) -> QBrush: ... - def highlightedText(self) -> QBrush: ... - def highlight(self) -> QBrush: ... - def shadow(self) -> QBrush: ... - def buttonText(self) -> QBrush: ... - def brightText(self) -> QBrush: ... - def midlight(self) -> QBrush: ... - def window(self) -> QBrush: ... - def alternateBase(self) -> QBrush: ... - def base(self) -> QBrush: ... - def text(self) -> QBrush: ... - def mid(self) -> QBrush: ... - def dark(self) -> QBrush: ... - def light(self) -> QBrush: ... - def button(self) -> QBrush: ... - def windowText(self) -> QBrush: ... - def isEqual(self, cr1: 'QPalette.ColorGroup', cr2: 'QPalette.ColorGroup') -> bool: ... - def setColorGroup(self, cr: 'QPalette.ColorGroup', foreground: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], button: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], light: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], dark: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], mid: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], bright_text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], base: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], background: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def setBrush(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole', brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def setBrush(self, acr: 'QPalette.ColorRole', abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - @typing.overload - def brush(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> QBrush: ... - @typing.overload - def brush(self, cr: 'QPalette.ColorRole') -> QBrush: ... - @typing.overload - def color(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> QColor: ... - @typing.overload - def color(self, cr: 'QPalette.ColorRole') -> QColor: ... - def setCurrentColorGroup(self, cg: 'QPalette.ColorGroup') -> None: ... - def currentColorGroup(self) -> 'QPalette.ColorGroup': ... - - -class QPdfWriter(QtCore.QObject, QPagedPaintDevice): - - @typing.overload - def __init__(self, filename: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - - def addFileAttachment(self, fileName: typing.Optional[str], data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], mimeType: typing.Optional[str] = ...) -> None: ... - def documentXmpMetadata(self) -> QtCore.QByteArray: ... - def setDocumentXmpMetadata(self, xmpMetadata: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def pdfVersion(self) -> QPagedPaintDevice.PdfVersion: ... - def setPdfVersion(self, version: QPagedPaintDevice.PdfVersion) -> None: ... - def resolution(self) -> int: ... - def setResolution(self, resolution: int) -> None: ... - def metric(self, id: QPaintDevice.PaintDeviceMetric) -> int: ... - def paintEngine(self) -> typing.Optional[QPaintEngine]: ... - def newPage(self) -> bool: ... - def setCreator(self, creator: typing.Optional[str]) -> None: ... - def creator(self) -> str: ... - def setTitle(self, title: typing.Optional[str]) -> None: ... - def title(self) -> str: ... - - -class QPen(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: QtCore.Qt.PenStyle) -> None: ... - @typing.overload - def __init__(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient], width: float, style: QtCore.Qt.PenStyle = ..., cap: QtCore.Qt.PenCapStyle = ..., join: QtCore.Qt.PenJoinStyle = ...) -> None: ... - @typing.overload - def __init__(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def swap(self, other: 'QPen') -> None: ... - def setCosmetic(self, cosmetic: bool) -> None: ... - def isCosmetic(self) -> bool: ... - def setDashOffset(self, doffset: float) -> None: ... - def dashOffset(self) -> float: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def setMiterLimit(self, limit: float) -> None: ... - def miterLimit(self) -> float: ... - def setDashPattern(self, pattern: typing.Iterable[float]) -> None: ... - def dashPattern(self) -> typing.List[float]: ... - def setJoinStyle(self, pcs: QtCore.Qt.PenJoinStyle) -> None: ... - def joinStyle(self) -> QtCore.Qt.PenJoinStyle: ... - def setCapStyle(self, pcs: QtCore.Qt.PenCapStyle) -> None: ... - def capStyle(self) -> QtCore.Qt.PenCapStyle: ... - def isSolid(self) -> bool: ... - def setBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def brush(self) -> QBrush: ... - def setColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def color(self) -> QColor: ... - def setWidth(self, width: int) -> None: ... - def width(self) -> int: ... - def setWidthF(self, width: float) -> None: ... - def widthF(self) -> float: ... - def setStyle(self, a0: QtCore.Qt.PenStyle) -> None: ... - def style(self) -> QtCore.Qt.PenStyle: ... - - -class QPicture(QPaintDevice): - - @typing.overload - def __init__(self, formatVersion: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QPicture') -> None: ... - - def swap(self, other: 'QPicture') -> None: ... - def metric(self, m: QPaintDevice.PaintDeviceMetric) -> int: ... - def paintEngine(self) -> typing.Optional[QPaintEngine]: ... - def isDetached(self) -> bool: ... - def detach(self) -> None: ... - def setBoundingRect(self, r: QtCore.QRect) -> None: ... - def boundingRect(self) -> QtCore.QRect: ... - @typing.overload - def save(self, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def save(self, dev: typing.Optional[QtCore.QIODevice]) -> bool: ... - @typing.overload - def load(self, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def load(self, dev: typing.Optional[QtCore.QIODevice]) -> bool: ... - def play(self, p: typing.Optional[QPainter]) -> bool: ... - def setData(self, data: typing.Optional[PyQt6.sip.array[bytes]]) -> None: ... - def data(self) -> typing.Optional[bytes]: ... - def size(self) -> int: ... - def devType(self) -> int: ... - def isNull(self) -> bool: ... - - -class QPixelFormat(PyQt6.sip.simplewrapper): - - class ByteOrder(enum.Enum): - LittleEndian = ... # type: QPixelFormat.ByteOrder - BigEndian = ... # type: QPixelFormat.ByteOrder - CurrentSystemEndian = ... # type: QPixelFormat.ByteOrder - - class YUVLayout(enum.Enum): - YUV444 = ... # type: QPixelFormat.YUVLayout - YUV422 = ... # type: QPixelFormat.YUVLayout - YUV411 = ... # type: QPixelFormat.YUVLayout - YUV420P = ... # type: QPixelFormat.YUVLayout - YUV420SP = ... # type: QPixelFormat.YUVLayout - YV12 = ... # type: QPixelFormat.YUVLayout - UYVY = ... # type: QPixelFormat.YUVLayout - YUYV = ... # type: QPixelFormat.YUVLayout - NV12 = ... # type: QPixelFormat.YUVLayout - NV21 = ... # type: QPixelFormat.YUVLayout - IMC1 = ... # type: QPixelFormat.YUVLayout - IMC2 = ... # type: QPixelFormat.YUVLayout - IMC3 = ... # type: QPixelFormat.YUVLayout - IMC4 = ... # type: QPixelFormat.YUVLayout - Y8 = ... # type: QPixelFormat.YUVLayout - Y16 = ... # type: QPixelFormat.YUVLayout - - class TypeInterpretation(enum.Enum): - UnsignedInteger = ... # type: QPixelFormat.TypeInterpretation - UnsignedShort = ... # type: QPixelFormat.TypeInterpretation - UnsignedByte = ... # type: QPixelFormat.TypeInterpretation - FloatingPoint = ... # type: QPixelFormat.TypeInterpretation - - class AlphaPremultiplied(enum.Enum): - NotPremultiplied = ... # type: QPixelFormat.AlphaPremultiplied - Premultiplied = ... # type: QPixelFormat.AlphaPremultiplied - - class AlphaPosition(enum.Enum): - AtBeginning = ... # type: QPixelFormat.AlphaPosition - AtEnd = ... # type: QPixelFormat.AlphaPosition - - class AlphaUsage(enum.Enum): - UsesAlpha = ... # type: QPixelFormat.AlphaUsage - IgnoresAlpha = ... # type: QPixelFormat.AlphaUsage - - class ColorModel(enum.Enum): - RGB = ... # type: QPixelFormat.ColorModel - BGR = ... # type: QPixelFormat.ColorModel - Indexed = ... # type: QPixelFormat.ColorModel - Grayscale = ... # type: QPixelFormat.ColorModel - CMYK = ... # type: QPixelFormat.ColorModel - HSL = ... # type: QPixelFormat.ColorModel - HSV = ... # type: QPixelFormat.ColorModel - YUV = ... # type: QPixelFormat.ColorModel - Alpha = ... # type: QPixelFormat.ColorModel - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, mdl: 'QPixelFormat.ColorModel', firstSize: int, secondSize: int, thirdSize: int, fourthSize: int, fifthSize: int, alfa: int, usage: 'QPixelFormat.AlphaUsage', position: 'QPixelFormat.AlphaPosition', premult: 'QPixelFormat.AlphaPremultiplied', typeInterp: 'QPixelFormat.TypeInterpretation', byteOrder: 'QPixelFormat.ByteOrder' = ..., subEnum: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QPixelFormat') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def subEnum(self) -> int: ... - def yuvLayout(self) -> 'QPixelFormat.YUVLayout': ... - def byteOrder(self) -> 'QPixelFormat.ByteOrder': ... - def typeInterpretation(self) -> 'QPixelFormat.TypeInterpretation': ... - def premultiplied(self) -> 'QPixelFormat.AlphaPremultiplied': ... - def alphaPosition(self) -> 'QPixelFormat.AlphaPosition': ... - def alphaUsage(self) -> 'QPixelFormat.AlphaUsage': ... - def bitsPerPixel(self) -> int: ... - def alphaSize(self) -> int: ... - def brightnessSize(self) -> int: ... - def lightnessSize(self) -> int: ... - def saturationSize(self) -> int: ... - def hueSize(self) -> int: ... - def blackSize(self) -> int: ... - def yellowSize(self) -> int: ... - def magentaSize(self) -> int: ... - def cyanSize(self) -> int: ... - def blueSize(self) -> int: ... - def greenSize(self) -> int: ... - def redSize(self) -> int: ... - def channelCount(self) -> int: ... - def colorModel(self) -> 'QPixelFormat.ColorModel': ... - - -class QPixmapCache(PyQt6.sip.simplewrapper): - - class Key(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QPixmapCache.Key') -> None: ... - - def __hash__(self) -> int: ... - def isValid(self) -> bool: ... - def swap(self, other: 'QPixmapCache.Key') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPixmapCache') -> None: ... - - @staticmethod - def setCacheLimit(a0: int) -> None: ... - @staticmethod - def replace(key: 'QPixmapCache.Key', pixmap: QPixmap) -> bool: ... - @typing.overload - @staticmethod - def remove(key: typing.Optional[str]) -> None: ... - @typing.overload - @staticmethod - def remove(key: 'QPixmapCache.Key') -> None: ... - @typing.overload - @staticmethod - def insert(key: typing.Optional[str], a1: QPixmap) -> bool: ... - @typing.overload - @staticmethod - def insert(pixmap: QPixmap) -> 'QPixmapCache.Key': ... - @typing.overload - @staticmethod - def find(key: typing.Optional[str]) -> QPixmap: ... - @typing.overload - @staticmethod - def find(key: 'QPixmapCache.Key') -> QPixmap: ... - @staticmethod - def clear() -> None: ... - @staticmethod - def cacheLimit() -> int: ... - - -class QPointingDeviceUniqueId(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPointingDeviceUniqueId') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def numericId(self) -> int: ... - def isValid(self) -> bool: ... - @staticmethod - def fromNumericId(id: int) -> 'QPointingDeviceUniqueId': ... - - -class QPointingDevice(QInputDevice): - - class PointerType(enum.Flag): - Unknown = ... # type: QPointingDevice.PointerType - Generic = ... # type: QPointingDevice.PointerType - Finger = ... # type: QPointingDevice.PointerType - Pen = ... # type: QPointingDevice.PointerType - Eraser = ... # type: QPointingDevice.PointerType - Cursor = ... # type: QPointingDevice.PointerType - AllPointerTypes = ... # type: QPointingDevice.PointerType - - @typing.overload - def __init__(self, name: typing.Optional[str], systemId: int, devType: QInputDevice.DeviceType, pType: 'QPointingDevice.PointerType', caps: QInputDevice.Capability, maxPoints: int, buttonCount: int, seatName: typing.Optional[str] = ..., uniqueId: QPointingDeviceUniqueId = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def primaryPointingDevice(seatName: typing.Optional[str] = ...) -> typing.Optional['QPointingDevice']: ... - def uniqueId(self) -> QPointingDeviceUniqueId: ... - def buttonCount(self) -> int: ... - def maximumPoints(self) -> int: ... - def pointerType(self) -> 'QPointingDevice.PointerType': ... - - -class QPolygon(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, r: QtCore.QRect, closed: bool = ...) -> None: ... - @typing.overload - def __init__(self, v: typing.Iterable[QtCore.QPoint]) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QPolygon') -> None: ... - - def __mul__(self, m: 'QTransform') -> 'QPolygon': ... - def toPolygonF(self) -> 'QPolygonF': ... - def __contains__(self, value: QtCore.QPoint) -> int: ... - @typing.overload - def __delitem__(self, i: int) -> None: ... - @typing.overload - def __delitem__(self, slice: slice) -> None: ... - @typing.overload - def __setitem__(self, i: int, value: QtCore.QPoint) -> None: ... - @typing.overload - def __setitem__(self, slice: slice, list: 'QPolygon') -> None: ... - @typing.overload - def __getitem__(self, i: int) -> QtCore.QPoint: ... - @typing.overload - def __getitem__(self, slice: slice) -> 'QPolygon': ... - def __lshift__(self, value: QtCore.QPoint) -> typing.Any: ... - def __eq__(self, other: object): ... - @typing.overload - def __iadd__(self, other: 'QPolygon') -> 'QPolygon': ... - @typing.overload - def __iadd__(self, value: QtCore.QPoint) -> 'QPolygon': ... - def __add__(self, other: 'QPolygon') -> 'QPolygon': ... - def __ne__(self, other: object): ... - @typing.overload - def value(self, i: int) -> QtCore.QPoint: ... - @typing.overload - def value(self, i: int, defaultValue: QtCore.QPoint) -> QtCore.QPoint: ... - def size(self) -> int: ... - def resize(self, size: int) -> None: ... - def replace(self, i: int, value: QtCore.QPoint) -> None: ... - @typing.overload - def remove(self, i: int) -> None: ... - @typing.overload - def remove(self, i: int, count: int) -> None: ... - def prepend(self, value: QtCore.QPoint) -> None: ... - def mid(self, pos: int, length: int = ...) -> 'QPolygon': ... - def lastIndexOf(self, value: QtCore.QPoint, from_: int = ...) -> int: ... - def last(self) -> QtCore.QPoint: ... - def isEmpty(self) -> bool: ... - def insert(self, i: int, value: QtCore.QPoint) -> None: ... - def indexOf(self, value: QtCore.QPoint, from_: int = ...) -> int: ... - def first(self) -> QtCore.QPoint: ... - def fill(self, value: QtCore.QPoint, size: int = ...) -> None: ... - def data(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def __len__(self) -> int: ... - @typing.overload - def count(self, value: QtCore.QPoint) -> int: ... - @typing.overload - def count(self) -> int: ... - def contains(self, value: QtCore.QPoint) -> bool: ... - def clear(self) -> None: ... - def at(self, i: int) -> QtCore.QPoint: ... - def append(self, value: QtCore.QPoint) -> None: ... - def intersects(self, r: 'QPolygon') -> bool: ... - def subtracted(self, r: 'QPolygon') -> 'QPolygon': ... - def intersected(self, r: 'QPolygon') -> 'QPolygon': ... - def united(self, r: 'QPolygon') -> 'QPolygon': ... - def containsPoint(self, pt: QtCore.QPoint, fillRule: QtCore.Qt.FillRule) -> bool: ... - @typing.overload - def putPoints(self, index: int, firstx: int, firsty: int, *args: int) -> None: ... - @typing.overload - def putPoints(self, index: int, nPoints: int, fromPolygon: 'QPolygon', from_: int = ...) -> None: ... - def setPoints(self, firstx: int, firsty: int, *args: int) -> None: ... - @typing.overload - def setPoint(self, index: int, x: int, y: int) -> None: ... - @typing.overload - def setPoint(self, index: int, p: QtCore.QPoint) -> None: ... - def point(self, i: int) -> QtCore.QPoint: ... - def boundingRect(self) -> QtCore.QRect: ... - @typing.overload - def translated(self, dx: int, dy: int) -> 'QPolygon': ... - @typing.overload - def translated(self, offset: QtCore.QPoint) -> 'QPolygon': ... - @typing.overload - def translate(self, dx: int, dy: int) -> None: ... - @typing.overload - def translate(self, offset: QtCore.QPoint) -> None: ... - def swap(self, other: 'QPolygon') -> None: ... - - -class QPolygonF(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, v: typing.Iterable[QtCore.QPointF]) -> None: ... - @typing.overload - def __init__(self, r: QtCore.QRectF) -> None: ... - @typing.overload - def __init__(self, a: QPolygon) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QPolygonF') -> None: ... - - def __mul__(self, m: 'QTransform') -> 'QPolygonF': ... - def __contains__(self, value: QtCore.QPointF) -> int: ... - @typing.overload - def __delitem__(self, i: int) -> None: ... - @typing.overload - def __delitem__(self, slice: slice) -> None: ... - @typing.overload - def __setitem__(self, i: int, value: QtCore.QPointF) -> None: ... - @typing.overload - def __setitem__(self, slice: slice, list: 'QPolygonF') -> None: ... - @typing.overload - def __getitem__(self, i: int) -> QtCore.QPointF: ... - @typing.overload - def __getitem__(self, slice: slice) -> 'QPolygonF': ... - def __lshift__(self, value: QtCore.QPointF) -> typing.Any: ... - def __eq__(self, other: object): ... - @typing.overload - def __iadd__(self, other: 'QPolygonF') -> 'QPolygonF': ... - @typing.overload - def __iadd__(self, value: QtCore.QPointF) -> 'QPolygonF': ... - def __add__(self, other: 'QPolygonF') -> 'QPolygonF': ... - def __ne__(self, other: object): ... - @typing.overload - def value(self, i: int) -> QtCore.QPointF: ... - @typing.overload - def value(self, i: int, defaultValue: QtCore.QPointF) -> QtCore.QPointF: ... - def size(self) -> int: ... - def resize(self, size: int) -> None: ... - def replace(self, i: int, value: QtCore.QPointF) -> None: ... - @typing.overload - def remove(self, i: int) -> None: ... - @typing.overload - def remove(self, i: int, count: int) -> None: ... - def prepend(self, value: QtCore.QPointF) -> None: ... - def mid(self, pos: int, length: int = ...) -> 'QPolygonF': ... - def lastIndexOf(self, value: QtCore.QPointF, from_: int = ...) -> int: ... - def last(self) -> QtCore.QPointF: ... - def isEmpty(self) -> bool: ... - def insert(self, i: int, value: QtCore.QPointF) -> None: ... - def indexOf(self, value: QtCore.QPointF, from_: int = ...) -> int: ... - def first(self) -> QtCore.QPointF: ... - def fill(self, value: QtCore.QPointF, size: int = ...) -> None: ... - def data(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def __len__(self) -> int: ... - @typing.overload - def count(self, value: QtCore.QPointF) -> int: ... - @typing.overload - def count(self) -> int: ... - def contains(self, value: QtCore.QPointF) -> bool: ... - def clear(self) -> None: ... - def at(self, i: int) -> QtCore.QPointF: ... - def append(self, value: QtCore.QPointF) -> None: ... - def intersects(self, r: 'QPolygonF') -> bool: ... - def subtracted(self, r: 'QPolygonF') -> 'QPolygonF': ... - def intersected(self, r: 'QPolygonF') -> 'QPolygonF': ... - def united(self, r: 'QPolygonF') -> 'QPolygonF': ... - def containsPoint(self, pt: QtCore.QPointF, fillRule: QtCore.Qt.FillRule) -> bool: ... - def boundingRect(self) -> QtCore.QRectF: ... - def isClosed(self) -> bool: ... - def toPolygon(self) -> QPolygon: ... - @typing.overload - def translated(self, dx: float, dy: float) -> 'QPolygonF': ... - @typing.overload - def translated(self, offset: QtCore.QPointF) -> 'QPolygonF': ... - @typing.overload - def translate(self, dx: float, dy: float) -> None: ... - @typing.overload - def translate(self, offset: QtCore.QPointF) -> None: ... - def swap(self, other: 'QPolygonF') -> None: ... - - -class QQuaternion(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, aScalar: float, xpos: float, ypos: float, zpos: float) -> None: ... - @typing.overload - def __init__(self, aScalar: float, aVector: 'QVector3D') -> None: ... - @typing.overload - def __init__(self, aVector: 'QVector4D') -> None: ... - @typing.overload - def __init__(self, a0: 'QQuaternion') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __truediv__(self, divisor: float) -> 'QQuaternion': ... - def __add__(self, q2: 'QQuaternion') -> 'QQuaternion': ... - def __sub__(self, q2: 'QQuaternion') -> 'QQuaternion': ... - @typing.overload - def __mul__(self, q2: 'QQuaternion') -> 'QQuaternion': ... - @typing.overload - def __mul__(self, factor: float) -> 'QQuaternion': ... - @typing.overload - def __mul__(self, vec: 'QVector3D') -> 'QVector3D': ... - def __rmul__(self, factor: float) -> 'QQuaternion': ... - def __neg__(self) -> 'QQuaternion': ... - def toEulerAngles(self) -> 'QVector3D': ... - def conjugated(self) -> 'QQuaternion': ... - def inverted(self) -> 'QQuaternion': ... - @staticmethod - def dotProduct(q1: 'QQuaternion', q2: 'QQuaternion') -> float: ... - @staticmethod - def rotationTo(from_: 'QVector3D', to: 'QVector3D') -> 'QQuaternion': ... - @staticmethod - def fromDirection(direction: 'QVector3D', up: 'QVector3D') -> 'QQuaternion': ... - @staticmethod - def fromAxes(xAxis: 'QVector3D', yAxis: 'QVector3D', zAxis: 'QVector3D') -> 'QQuaternion': ... - def getAxes(self) -> typing.Tuple[typing.Optional['QVector3D'], typing.Optional['QVector3D'], typing.Optional['QVector3D']]: ... - @staticmethod - def fromRotationMatrix(rot3x3: QMatrix3x3) -> 'QQuaternion': ... - def toRotationMatrix(self) -> QMatrix3x3: ... - @typing.overload - @staticmethod - def fromEulerAngles(pitch: float, yaw: float, roll: float) -> 'QQuaternion': ... - @typing.overload - @staticmethod - def fromEulerAngles(eulerAngles: 'QVector3D') -> 'QQuaternion': ... - def getEulerAngles(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def getAxisAndAngle(self) -> typing.Tuple[typing.Optional['QVector3D'], typing.Optional[float]]: ... - def toVector4D(self) -> 'QVector4D': ... - def vector(self) -> 'QVector3D': ... - @typing.overload - def setVector(self, aVector: 'QVector3D') -> None: ... - @typing.overload - def setVector(self, aX: float, aY: float, aZ: float) -> None: ... - def __itruediv__(self, divisor: float) -> 'QQuaternion': ... - @typing.overload - def __imul__(self, factor: float) -> 'QQuaternion': ... - @typing.overload - def __imul__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... - def __isub__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... - def __iadd__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... - def setScalar(self, aScalar: float) -> None: ... - def setZ(self, aZ: float) -> None: ... - def setY(self, aY: float) -> None: ... - def setX(self, aX: float) -> None: ... - def scalar(self) -> float: ... - def z(self) -> float: ... - def y(self) -> float: ... - def x(self) -> float: ... - def isIdentity(self) -> bool: ... - def isNull(self) -> bool: ... - @staticmethod - def nlerp(q1: 'QQuaternion', q2: 'QQuaternion', t: float) -> 'QQuaternion': ... - @staticmethod - def slerp(q1: 'QQuaternion', q2: 'QQuaternion', t: float) -> 'QQuaternion': ... - @typing.overload - @staticmethod - def fromAxisAndAngle(axis: 'QVector3D', angle: float) -> 'QQuaternion': ... - @typing.overload - @staticmethod - def fromAxisAndAngle(x: float, y: float, z: float, angle: float) -> 'QQuaternion': ... - def rotatedVector(self, vector: 'QVector3D') -> 'QVector3D': ... - def normalize(self) -> None: ... - def normalized(self) -> 'QQuaternion': ... - def lengthSquared(self) -> float: ... - def length(self) -> float: ... - def __repr__(self) -> str: ... - - -class QRasterWindow(QPaintDeviceWindow): - - def __init__(self, parent: typing.Optional[QWindow] = ...) -> None: ... - - def resizeEvent(self, event: typing.Optional[QResizeEvent]) -> None: ... - def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... - - -class QRawFont(PyQt6.sip.simplewrapper): - - class LayoutFlag(enum.Flag): - SeparateAdvances = ... # type: QRawFont.LayoutFlag - KernedAdvances = ... # type: QRawFont.LayoutFlag - UseDesignMetrics = ... # type: QRawFont.LayoutFlag - - class AntialiasingType(enum.Enum): - PixelAntialiasing = ... # type: QRawFont.AntialiasingType - SubPixelAntialiasing = ... # type: QRawFont.AntialiasingType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], pixelSize: float, hintingPreference: QFont.HintingPreference = ...) -> None: ... - @typing.overload - def __init__(self, fontData: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], pixelSize: float, hintingPreference: QFont.HintingPreference = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QRawFont') -> None: ... - - def __hash__(self) -> int: ... - def capHeight(self) -> float: ... - def swap(self, other: 'QRawFont') -> None: ... - def underlinePosition(self) -> float: ... - def lineThickness(self) -> float: ... - def boundingRect(self, glyphIndex: int) -> QtCore.QRectF: ... - @staticmethod - def fromFont(font: QFont, writingSystem: QFontDatabase.WritingSystem = ...) -> 'QRawFont': ... - @typing.overload - def fontTable(self, tagName: typing.Optional[str]) -> QtCore.QByteArray: ... - @typing.overload - def fontTable(self, tag: QFont.Tag) -> QtCore.QByteArray: ... - def supportedWritingSystems(self) -> typing.List[QFontDatabase.WritingSystem]: ... - @typing.overload - def supportsCharacter(self, ucs4: int) -> bool: ... - @typing.overload - def supportsCharacter(self, character: str) -> bool: ... - def loadFromData(self, fontData: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], pixelSize: float, hintingPreference: QFont.HintingPreference) -> None: ... - def loadFromFile(self, fileName: typing.Optional[str], pixelSize: float, hintingPreference: QFont.HintingPreference) -> None: ... - def unitsPerEm(self) -> float: ... - def maxCharWidth(self) -> float: ... - def averageCharWidth(self) -> float: ... - def xHeight(self) -> float: ... - def leading(self) -> float: ... - def descent(self) -> float: ... - def ascent(self) -> float: ... - def hintingPreference(self) -> QFont.HintingPreference: ... - def pixelSize(self) -> float: ... - def setPixelSize(self, pixelSize: float) -> None: ... - def pathForGlyph(self, glyphIndex: int) -> QPainterPath: ... - def alphaMapForGlyph(self, glyphIndex: int, antialiasingType: 'QRawFont.AntialiasingType' = ..., transform: 'QTransform' = ...) -> QImage: ... - @typing.overload - def advancesForGlyphIndexes(self, glyphIndexes: typing.Iterable[int], layoutFlags: 'QRawFont.LayoutFlag') -> typing.List[QtCore.QPointF]: ... - @typing.overload - def advancesForGlyphIndexes(self, glyphIndexes: typing.Iterable[int]) -> typing.List[QtCore.QPointF]: ... - def glyphIndexesForString(self, text: typing.Optional[str]) -> typing.List[int]: ... - def weight(self) -> int: ... - def style(self) -> QFont.Style: ... - def styleName(self) -> str: ... - def familyName(self) -> str: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isValid(self) -> bool: ... - - -class QRegion(PyQt6.sip.simplewrapper): - - class RegionType(enum.Enum): - Rectangle = ... # type: QRegion.RegionType - Ellipse = ... # type: QRegion.RegionType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: int, y: int, w: int, h: int, type: 'QRegion.RegionType' = ...) -> None: ... - @typing.overload - def __init__(self, r: QtCore.QRect, type: 'QRegion.RegionType' = ...) -> None: ... - @typing.overload - def __init__(self, a: QPolygon, fillRule: QtCore.Qt.FillRule = ...) -> None: ... - @typing.overload - def __init__(self, bitmap: QBitmap) -> None: ... - @typing.overload - def __init__(self, region: 'QRegion') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def __mul__(self, m: 'QTransform') -> 'QRegion': ... - def isNull(self) -> bool: ... - def swap(self, other: 'QRegion') -> None: ... - def rectCount(self) -> int: ... - @typing.overload - def intersects(self, r: 'QRegion') -> bool: ... - @typing.overload - def intersects(self, r: QtCore.QRect) -> bool: ... - def xored(self, r: 'QRegion') -> 'QRegion': ... - def subtracted(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def intersected(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def intersected(self, r: QtCore.QRect) -> 'QRegion': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __ixor__(self, r: 'QRegion') -> 'QRegion': ... - def __isub__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __iand__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __iand__(self, r: QtCore.QRect) -> 'QRegion': ... - @typing.overload - def __iadd__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __iadd__(self, r: QtCore.QRect) -> 'QRegion': ... - def __ior__(self, r: 'QRegion') -> 'QRegion': ... - def __xor__(self, r: 'QRegion') -> 'QRegion': ... - def __sub__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __and__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __and__(self, r: QtCore.QRect) -> 'QRegion': ... - @typing.overload - def __add__(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def __add__(self, r: QtCore.QRect) -> 'QRegion': ... - def setRects(self, a0: typing.Iterable[QtCore.QRect]) -> None: ... - def __or__(self, r: 'QRegion') -> 'QRegion': ... - def boundingRect(self) -> QtCore.QRect: ... - @typing.overload - def united(self, r: 'QRegion') -> 'QRegion': ... - @typing.overload - def united(self, r: QtCore.QRect) -> 'QRegion': ... - @typing.overload - def translated(self, dx: int, dy: int) -> 'QRegion': ... - @typing.overload - def translated(self, p: QtCore.QPoint) -> 'QRegion': ... - @typing.overload - def translate(self, dx: int, dy: int) -> None: ... - @typing.overload - def translate(self, p: QtCore.QPoint) -> None: ... - @typing.overload - def __contains__(self, p: QtCore.QPoint) -> int: ... - @typing.overload - def __contains__(self, r: QtCore.QRect) -> int: ... - @typing.overload - def contains(self, p: QtCore.QPoint) -> bool: ... - @typing.overload - def contains(self, r: QtCore.QRect) -> bool: ... - def __bool__(self) -> int: ... - def isEmpty(self) -> bool: ... - - -class QRgba64(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QRgba64') -> None: ... - - def __int__(self) -> int: ... - def unpremultiplied(self) -> 'QRgba64': ... - def premultiplied(self) -> 'QRgba64': ... - def toRgb16(self) -> int: ... - def toArgb32(self) -> int: ... - def alpha8(self) -> int: ... - def blue8(self) -> int: ... - def green8(self) -> int: ... - def red8(self) -> int: ... - def setAlpha(self, _alpha: int) -> None: ... - def setBlue(self, _blue: int) -> None: ... - def setGreen(self, _green: int) -> None: ... - def setRed(self, _red: int) -> None: ... - def alpha(self) -> int: ... - def blue(self) -> int: ... - def green(self) -> int: ... - def red(self) -> int: ... - def isTransparent(self) -> bool: ... - def isOpaque(self) -> bool: ... - @staticmethod - def fromArgb32(rgb: int) -> 'QRgba64': ... - @staticmethod - def fromRgba(red: int, green: int, blue: int, alpha: int) -> 'QRgba64': ... - @typing.overload - @staticmethod - def fromRgba64(c: int) -> 'QRgba64': ... - @typing.overload - @staticmethod - def fromRgba64(red: int, green: int, blue: int, alpha: int) -> 'QRgba64': ... - - -class QScreen(QtCore.QObject): - - def virtualSiblingAt(self, point: QtCore.QPoint) -> typing.Optional['QScreen']: ... - def serialNumber(self) -> str: ... - def model(self) -> str: ... - def manufacturer(self) -> str: ... - availableGeometryChanged: typing.ClassVar[QtCore.pyqtSignal] - virtualGeometryChanged: typing.ClassVar[QtCore.pyqtSignal] - physicalSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - refreshRateChanged: typing.ClassVar[QtCore.pyqtSignal] - orientationChanged: typing.ClassVar[QtCore.pyqtSignal] - primaryOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] - logicalDotsPerInchChanged: typing.ClassVar[QtCore.pyqtSignal] - physicalDotsPerInchChanged: typing.ClassVar[QtCore.pyqtSignal] - geometryChanged: typing.ClassVar[QtCore.pyqtSignal] - def devicePixelRatio(self) -> float: ... - def refreshRate(self) -> float: ... - def grabWindow(self, window: PyQt6.sip.voidptr = ..., x: int = ..., y: int = ..., width: int = ..., height: int = ...) -> QPixmap: ... - def isLandscape(self, orientation: QtCore.Qt.ScreenOrientation) -> bool: ... - def isPortrait(self, orientation: QtCore.Qt.ScreenOrientation) -> bool: ... - def mapBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation, rect: QtCore.QRect) -> QtCore.QRect: ... - def transformBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation, target: QtCore.QRect) -> 'QTransform': ... - def angleBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation) -> int: ... - def orientation(self) -> QtCore.Qt.ScreenOrientation: ... - def primaryOrientation(self) -> QtCore.Qt.ScreenOrientation: ... - def nativeOrientation(self) -> QtCore.Qt.ScreenOrientation: ... - def availableVirtualGeometry(self) -> QtCore.QRect: ... - def availableVirtualSize(self) -> QtCore.QSize: ... - def virtualGeometry(self) -> QtCore.QRect: ... - def virtualSize(self) -> QtCore.QSize: ... - def virtualSiblings(self) -> typing.List['QScreen']: ... - def availableGeometry(self) -> QtCore.QRect: ... - def availableSize(self) -> QtCore.QSize: ... - def logicalDotsPerInch(self) -> float: ... - def logicalDotsPerInchY(self) -> float: ... - def logicalDotsPerInchX(self) -> float: ... - def physicalDotsPerInch(self) -> float: ... - def physicalDotsPerInchY(self) -> float: ... - def physicalDotsPerInchX(self) -> float: ... - def physicalSize(self) -> QtCore.QSizeF: ... - def geometry(self) -> QtCore.QRect: ... - def size(self) -> QtCore.QSize: ... - def depth(self) -> int: ... - def name(self) -> str: ... - - -class QSessionManager(QtCore.QObject): - - class RestartHint(enum.Enum): - RestartIfRunning = ... # type: QSessionManager.RestartHint - RestartAnyway = ... # type: QSessionManager.RestartHint - RestartImmediately = ... # type: QSessionManager.RestartHint - RestartNever = ... # type: QSessionManager.RestartHint - - def requestPhase2(self) -> None: ... - def isPhase2(self) -> bool: ... - @typing.overload - def setManagerProperty(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def setManagerProperty(self, name: typing.Optional[str], value: typing.Iterable[typing.Optional[str]]) -> None: ... - def discardCommand(self) -> typing.List[str]: ... - def setDiscardCommand(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... - def restartCommand(self) -> typing.List[str]: ... - def setRestartCommand(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... - def restartHint(self) -> 'QSessionManager.RestartHint': ... - def setRestartHint(self, a0: 'QSessionManager.RestartHint') -> None: ... - def cancel(self) -> None: ... - def release(self) -> None: ... - def allowsErrorInteraction(self) -> bool: ... - def allowsInteraction(self) -> bool: ... - def sessionKey(self) -> str: ... - def sessionId(self) -> str: ... - - -class QShortcut(QtCore.QObject): - - @typing.overload - def __init__(self, key: QKeySequence.StandardKey, parent: typing.Optional[QtCore.QObject], member: PYQT_SLOT = ..., ambiguousMember: PYQT_SLOT = ..., context: QtCore.Qt.ShortcutContext = ...) -> None: ... - @typing.overload - def __init__(self, key: typing.Union[QKeySequence, QKeySequence.StandardKey, typing.Optional[str], int], parent: typing.Optional[QtCore.QObject], member: PYQT_SLOT = ..., ambiguousMember: PYQT_SLOT = ..., context: QtCore.Qt.ShortcutContext = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def keys(self) -> typing.List[QKeySequence]: ... - @typing.overload - def setKeys(self, keys: typing.Iterable[typing.Union[QKeySequence, QKeySequence.StandardKey, typing.Optional[str], int]]) -> None: ... - @typing.overload - def setKeys(self, key: QKeySequence.StandardKey) -> None: ... - activatedAmbiguously: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - def autoRepeat(self) -> bool: ... - def setAutoRepeat(self, on: bool) -> None: ... - def whatsThis(self) -> str: ... - def setWhatsThis(self, text: typing.Optional[str]) -> None: ... - def context(self) -> QtCore.Qt.ShortcutContext: ... - def setContext(self, context: QtCore.Qt.ShortcutContext) -> None: ... - def isEnabled(self) -> bool: ... - def setEnabled(self, enable: bool) -> None: ... - def key(self) -> QKeySequence: ... - def setKey(self, key: typing.Union[QKeySequence, QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... - - -class QStandardItemModel(QtCore.QAbstractItemModel): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, rows: int, columns: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - itemChanged: typing.ClassVar[QtCore.pyqtSignal] - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def clearItemData(self, index: QtCore.QModelIndex) -> bool: ... - def setItemRoleNames(self, roleNames: typing.Dict[int, typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]]) -> None: ... - def dropMimeData(self, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction, row: int, column: int, parent: QtCore.QModelIndex) -> bool: ... - def mimeData(self, indexes: typing.Iterable[QtCore.QModelIndex]) -> typing.Optional[QtCore.QMimeData]: ... - def mimeTypes(self) -> typing.List[str]: ... - def setSortRole(self, role: int) -> None: ... - def sortRole(self) -> int: ... - def findItems(self, text: typing.Optional[str], flags: QtCore.Qt.MatchFlag = ..., column: int = ...) -> typing.List['QStandardItem']: ... - def setItemPrototype(self, item: typing.Optional['QStandardItem']) -> None: ... - def itemPrototype(self) -> typing.Optional['QStandardItem']: ... - def takeVerticalHeaderItem(self, row: int) -> typing.Optional['QStandardItem']: ... - def takeHorizontalHeaderItem(self, column: int) -> typing.Optional['QStandardItem']: ... - def takeColumn(self, column: int) -> typing.List['QStandardItem']: ... - def takeRow(self, row: int) -> typing.List['QStandardItem']: ... - def takeItem(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... - @typing.overload - def insertColumn(self, column: int, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def insertColumn(self, column: int, parent: QtCore.QModelIndex = ...) -> bool: ... - @typing.overload - def insertRow(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def insertRow(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... - @typing.overload - def insertRow(self, row: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def appendColumn(self, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def appendRow(self, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def appendRow(self, aitem: typing.Optional['QStandardItem']) -> None: ... - def setColumnCount(self, columns: int) -> None: ... - def setRowCount(self, rows: int) -> None: ... - def setVerticalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - def setHorizontalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - def setVerticalHeaderItem(self, row: int, item: typing.Optional['QStandardItem']) -> None: ... - def verticalHeaderItem(self, row: int) -> typing.Optional['QStandardItem']: ... - def setHorizontalHeaderItem(self, column: int, item: typing.Optional['QStandardItem']) -> None: ... - def horizontalHeaderItem(self, column: int) -> typing.Optional['QStandardItem']: ... - def invisibleRootItem(self) -> typing.Optional['QStandardItem']: ... - @typing.overload - def setItem(self, row: int, column: int, item: typing.Optional['QStandardItem']) -> None: ... - @typing.overload - def setItem(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... - def item(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... - def indexFromItem(self, item: typing.Optional['QStandardItem']) -> QtCore.QModelIndex: ... - def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional['QStandardItem']: ... - def sort(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... - def setItemData(self, index: QtCore.QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... - def itemData(self, index: QtCore.QModelIndex) -> typing.Dict[int, typing.Any]: ... - def supportedDropActions(self) -> QtCore.Qt.DropAction: ... - def clear(self) -> None: ... - def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlag: ... - def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def removeRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def insertRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def setHeaderData(self, section: int, orientation: QtCore.Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - @typing.overload - def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - @typing.overload - def parent(self) -> typing.Optional[QtCore.QObject]: ... - def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... - - -class QStandardItem(PyQt6.sip.wrapper): - - class ItemType(enum.Enum): - Type = ... # type: QStandardItem.ItemType - UserType = ... # type: QStandardItem.ItemType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, icon: QIcon, text: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, rows: int, columns: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QStandardItem') -> None: ... - - def __ge__(self, other: 'QStandardItem') -> bool: ... - def clearData(self) -> None: ... - def setUserTristate(self, tristate: bool) -> None: ... - def isUserTristate(self) -> bool: ... - def setAutoTristate(self, tristate: bool) -> None: ... - def isAutoTristate(self) -> bool: ... - def emitDataChanged(self) -> None: ... - def appendRows(self, items: typing.Iterable['QStandardItem']) -> None: ... - def appendColumn(self, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def appendRow(self, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def appendRow(self, aitem: typing.Optional['QStandardItem']) -> None: ... - def setAccessibleDescription(self, aaccessibleDescription: typing.Optional[str]) -> None: ... - def setAccessibleText(self, aaccessibleText: typing.Optional[str]) -> None: ... - def setCheckState(self, acheckState: QtCore.Qt.CheckState) -> None: ... - def setForeground(self, abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def setBackground(self, abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def setTextAlignment(self, atextAlignment: QtCore.Qt.AlignmentFlag) -> None: ... - def setFont(self, afont: QFont) -> None: ... - def setSizeHint(self, asizeHint: QtCore.QSize) -> None: ... - def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... - def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... - def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... - def setIcon(self, aicon: QIcon) -> None: ... - def setText(self, atext: typing.Optional[str]) -> None: ... - def __lt__(self, other: 'QStandardItem') -> bool: ... - def write(self, out: QtCore.QDataStream) -> None: ... - def read(self, in_: QtCore.QDataStream) -> None: ... - def type(self) -> int: ... - def clone(self) -> typing.Optional['QStandardItem']: ... - def sortChildren(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... - def takeColumn(self, column: int) -> typing.List['QStandardItem']: ... - def takeRow(self, row: int) -> typing.List['QStandardItem']: ... - def takeChild(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... - def removeColumns(self, column: int, count: int) -> None: ... - def removeRows(self, row: int, count: int) -> None: ... - def removeColumn(self, column: int) -> None: ... - def removeRow(self, row: int) -> None: ... - def insertColumns(self, column: int, count: int) -> None: ... - def insertColumn(self, column: int, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def insertRows(self, row: int, count: int) -> None: ... - @typing.overload - def insertRows(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def insertRow(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... - @typing.overload - def insertRow(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... - @typing.overload - def setChild(self, row: int, column: int, item: typing.Optional['QStandardItem']) -> None: ... - @typing.overload - def setChild(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... - def child(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... - def hasChildren(self) -> bool: ... - def setColumnCount(self, columns: int) -> None: ... - def columnCount(self) -> int: ... - def setRowCount(self, rows: int) -> None: ... - def rowCount(self) -> int: ... - def model(self) -> typing.Optional[QStandardItemModel]: ... - def index(self) -> QtCore.QModelIndex: ... - def column(self) -> int: ... - def row(self) -> int: ... - def parent(self) -> typing.Optional['QStandardItem']: ... - def setDropEnabled(self, dropEnabled: bool) -> None: ... - def isDropEnabled(self) -> bool: ... - def setDragEnabled(self, dragEnabled: bool) -> None: ... - def isDragEnabled(self) -> bool: ... - def setCheckable(self, checkable: bool) -> None: ... - def isCheckable(self) -> bool: ... - def setSelectable(self, selectable: bool) -> None: ... - def isSelectable(self) -> bool: ... - def setEditable(self, editable: bool) -> None: ... - def isEditable(self) -> bool: ... - def setEnabled(self, enabled: bool) -> None: ... - def isEnabled(self) -> bool: ... - def setFlags(self, flags: QtCore.Qt.ItemFlag) -> None: ... - def flags(self) -> QtCore.Qt.ItemFlag: ... - def accessibleDescription(self) -> str: ... - def accessibleText(self) -> str: ... - def checkState(self) -> QtCore.Qt.CheckState: ... - def foreground(self) -> QBrush: ... - def background(self) -> QBrush: ... - def textAlignment(self) -> QtCore.Qt.AlignmentFlag: ... - def font(self) -> QFont: ... - def sizeHint(self) -> QtCore.QSize: ... - def whatsThis(self) -> str: ... - def statusTip(self) -> str: ... - def toolTip(self) -> str: ... - def icon(self) -> QIcon: ... - def text(self) -> str: ... - def setData(self, value: typing.Any, role: int = ...) -> None: ... - def data(self, role: int = ...) -> typing.Any: ... - - -class QStaticText(PyQt6.sip.simplewrapper): - - class PerformanceHint(enum.Enum): - ModerateCaching = ... # type: QStaticText.PerformanceHint - AggressiveCaching = ... # type: QStaticText.PerformanceHint - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QStaticText') -> None: ... - - def swap(self, other: 'QStaticText') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def performanceHint(self) -> 'QStaticText.PerformanceHint': ... - def setPerformanceHint(self, performanceHint: 'QStaticText.PerformanceHint') -> None: ... - def prepare(self, matrix: 'QTransform' = ..., font: QFont = ...) -> None: ... - def size(self) -> QtCore.QSizeF: ... - def textOption(self) -> 'QTextOption': ... - def setTextOption(self, textOption: 'QTextOption') -> None: ... - def textWidth(self) -> float: ... - def setTextWidth(self, textWidth: float) -> None: ... - def textFormat(self) -> QtCore.Qt.TextFormat: ... - def setTextFormat(self, textFormat: QtCore.Qt.TextFormat) -> None: ... - def text(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - - -class QStyleHints(QtCore.QObject): - - colorSchemeChanged: typing.ClassVar[QtCore.pyqtSignal] - def colorScheme(self) -> QtCore.Qt.ColorScheme: ... - def keyboardAutoRepeatRateF(self) -> float: ... - def touchDoubleTapDistance(self) -> int: ... - def mouseDoubleClickDistance(self) -> int: ... - showShortcutsInContextMenusChanged: typing.ClassVar[QtCore.pyqtSignal] - def setShowShortcutsInContextMenus(self, showShortcutsInContextMenus: bool) -> None: ... - mouseQuickSelectionThresholdChanged: typing.ClassVar[QtCore.pyqtSignal] - def mouseQuickSelectionThreshold(self) -> int: ... - def showShortcutsInContextMenus(self) -> bool: ... - wheelScrollLinesChanged: typing.ClassVar[QtCore.pyqtSignal] - def wheelScrollLines(self) -> int: ... - useHoverEffectsChanged: typing.ClassVar[QtCore.pyqtSignal] - def setUseHoverEffects(self, useHoverEffects: bool) -> None: ... - def useHoverEffects(self) -> bool: ... - def showIsMaximized(self) -> bool: ... - tabFocusBehaviorChanged: typing.ClassVar[QtCore.pyqtSignal] - mousePressAndHoldIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] - startDragTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - startDragDistanceChanged: typing.ClassVar[QtCore.pyqtSignal] - mouseDoubleClickIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] - keyboardInputIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] - cursorFlashTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - def singleClickActivation(self) -> bool: ... - def tabFocusBehavior(self) -> QtCore.Qt.TabFocusBehavior: ... - def mousePressAndHoldInterval(self) -> int: ... - def setFocusOnTouchRelease(self) -> bool: ... - def passwordMaskCharacter(self) -> str: ... - def useRtlExtensions(self) -> bool: ... - def fontSmoothingGamma(self) -> float: ... - def passwordMaskDelay(self) -> int: ... - def showIsFullScreen(self) -> bool: ... - def cursorFlashTime(self) -> int: ... - def keyboardAutoRepeatRate(self) -> int: ... - def keyboardInputInterval(self) -> int: ... - def startDragVelocity(self) -> int: ... - def startDragTime(self) -> int: ... - def startDragDistance(self) -> int: ... - def mouseDoubleClickInterval(self) -> int: ... - - -class QSurfaceFormat(PyQt6.sip.simplewrapper): - - class OpenGLContextProfile(enum.Enum): - NoProfile = ... # type: QSurfaceFormat.OpenGLContextProfile - CoreProfile = ... # type: QSurfaceFormat.OpenGLContextProfile - CompatibilityProfile = ... # type: QSurfaceFormat.OpenGLContextProfile - - class RenderableType(enum.Enum): - DefaultRenderableType = ... # type: QSurfaceFormat.RenderableType - OpenGL = ... # type: QSurfaceFormat.RenderableType - OpenGLES = ... # type: QSurfaceFormat.RenderableType - OpenVG = ... # type: QSurfaceFormat.RenderableType - - class SwapBehavior(enum.Enum): - DefaultSwapBehavior = ... # type: QSurfaceFormat.SwapBehavior - SingleBuffer = ... # type: QSurfaceFormat.SwapBehavior - DoubleBuffer = ... # type: QSurfaceFormat.SwapBehavior - TripleBuffer = ... # type: QSurfaceFormat.SwapBehavior - - class FormatOption(enum.Flag): - StereoBuffers = ... # type: QSurfaceFormat.FormatOption - DebugContext = ... # type: QSurfaceFormat.FormatOption - DeprecatedFunctions = ... # type: QSurfaceFormat.FormatOption - ResetNotification = ... # type: QSurfaceFormat.FormatOption - ProtectedContent = ... # type: QSurfaceFormat.FormatOption - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, options: 'QSurfaceFormat.FormatOption') -> None: ... - @typing.overload - def __init__(self, other: 'QSurfaceFormat') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setColorSpace(self, colorSpace: QColorSpace) -> None: ... - def colorSpace(self) -> QColorSpace: ... - @staticmethod - def defaultFormat() -> 'QSurfaceFormat': ... - @staticmethod - def setDefaultFormat(format: 'QSurfaceFormat') -> None: ... - def setSwapInterval(self, interval: int) -> None: ... - def swapInterval(self) -> int: ... - def options(self) -> 'QSurfaceFormat.FormatOption': ... - def testOption(self, option: 'QSurfaceFormat.FormatOption') -> bool: ... - def setOption(self, option: 'QSurfaceFormat.FormatOption', on: bool = ...) -> None: ... - def setOptions(self, options: 'QSurfaceFormat.FormatOption') -> None: ... - def setVersion(self, major: int, minor: int) -> None: ... - def version(self) -> typing.Tuple[int, int]: ... - def stereo(self) -> bool: ... - def setStereo(self, enable: bool) -> None: ... - def minorVersion(self) -> int: ... - def setMinorVersion(self, minorVersion: int) -> None: ... - def majorVersion(self) -> int: ... - def setMajorVersion(self, majorVersion: int) -> None: ... - def renderableType(self) -> 'QSurfaceFormat.RenderableType': ... - def setRenderableType(self, type: 'QSurfaceFormat.RenderableType') -> None: ... - def profile(self) -> 'QSurfaceFormat.OpenGLContextProfile': ... - def setProfile(self, profile: 'QSurfaceFormat.OpenGLContextProfile') -> None: ... - def hasAlpha(self) -> bool: ... - def swapBehavior(self) -> 'QSurfaceFormat.SwapBehavior': ... - def setSwapBehavior(self, behavior: 'QSurfaceFormat.SwapBehavior') -> None: ... - def samples(self) -> int: ... - def setSamples(self, numSamples: int) -> None: ... - def alphaBufferSize(self) -> int: ... - def setAlphaBufferSize(self, size: int) -> None: ... - def blueBufferSize(self) -> int: ... - def setBlueBufferSize(self, size: int) -> None: ... - def greenBufferSize(self) -> int: ... - def setGreenBufferSize(self, size: int) -> None: ... - def redBufferSize(self) -> int: ... - def setRedBufferSize(self, size: int) -> None: ... - def stencilBufferSize(self) -> int: ... - def setStencilBufferSize(self, size: int) -> None: ... - def depthBufferSize(self) -> int: ... - def setDepthBufferSize(self, size: int) -> None: ... - - -class QSyntaxHighlighter(QtCore.QObject): - - @typing.overload - def __init__(self, parent: typing.Optional['QTextDocument']) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def currentBlock(self) -> 'QTextBlock': ... - def currentBlockUserData(self) -> typing.Optional['QTextBlockUserData']: ... - def setCurrentBlockUserData(self, data: typing.Optional['QTextBlockUserData']) -> None: ... - def setCurrentBlockState(self, newState: int) -> None: ... - def currentBlockState(self) -> int: ... - def previousBlockState(self) -> int: ... - def format(self, pos: int) -> 'QTextCharFormat': ... - @typing.overload - def setFormat(self, start: int, count: int, format: 'QTextCharFormat') -> None: ... - @typing.overload - def setFormat(self, start: int, count: int, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setFormat(self, start: int, count: int, font: QFont) -> None: ... - def highlightBlock(self, text: typing.Optional[str]) -> None: ... - def rehighlightBlock(self, block: 'QTextBlock') -> None: ... - def rehighlight(self) -> None: ... - def document(self) -> typing.Optional['QTextDocument']: ... - def setDocument(self, doc: typing.Optional['QTextDocument']) -> None: ... - - -class QTextCursor(PyQt6.sip.simplewrapper): - - class SelectionType(enum.Enum): - WordUnderCursor = ... # type: QTextCursor.SelectionType - LineUnderCursor = ... # type: QTextCursor.SelectionType - BlockUnderCursor = ... # type: QTextCursor.SelectionType - Document = ... # type: QTextCursor.SelectionType - - class MoveOperation(enum.Enum): - NoMove = ... # type: QTextCursor.MoveOperation - Start = ... # type: QTextCursor.MoveOperation - Up = ... # type: QTextCursor.MoveOperation - StartOfLine = ... # type: QTextCursor.MoveOperation - StartOfBlock = ... # type: QTextCursor.MoveOperation - StartOfWord = ... # type: QTextCursor.MoveOperation - PreviousBlock = ... # type: QTextCursor.MoveOperation - PreviousCharacter = ... # type: QTextCursor.MoveOperation - PreviousWord = ... # type: QTextCursor.MoveOperation - Left = ... # type: QTextCursor.MoveOperation - WordLeft = ... # type: QTextCursor.MoveOperation - End = ... # type: QTextCursor.MoveOperation - Down = ... # type: QTextCursor.MoveOperation - EndOfLine = ... # type: QTextCursor.MoveOperation - EndOfWord = ... # type: QTextCursor.MoveOperation - EndOfBlock = ... # type: QTextCursor.MoveOperation - NextBlock = ... # type: QTextCursor.MoveOperation - NextCharacter = ... # type: QTextCursor.MoveOperation - NextWord = ... # type: QTextCursor.MoveOperation - Right = ... # type: QTextCursor.MoveOperation - WordRight = ... # type: QTextCursor.MoveOperation - NextCell = ... # type: QTextCursor.MoveOperation - PreviousCell = ... # type: QTextCursor.MoveOperation - NextRow = ... # type: QTextCursor.MoveOperation - PreviousRow = ... # type: QTextCursor.MoveOperation - - class MoveMode(enum.Enum): - MoveAnchor = ... # type: QTextCursor.MoveMode - KeepAnchor = ... # type: QTextCursor.MoveMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, document: typing.Optional['QTextDocument']) -> None: ... - @typing.overload - def __init__(self, frame: typing.Optional['QTextFrame']) -> None: ... - @typing.overload - def __init__(self, block: 'QTextBlock') -> None: ... - @typing.overload - def __init__(self, cursor: 'QTextCursor') -> None: ... - - def insertMarkdown(self, markdown: typing.Optional[str], features: 'QTextDocument.MarkdownFeature' = ...) -> None: ... - def swap(self, other: 'QTextCursor') -> None: ... - def keepPositionOnInsert(self) -> bool: ... - def setKeepPositionOnInsert(self, b: bool) -> None: ... - def verticalMovementX(self) -> int: ... - def setVerticalMovementX(self, x: int) -> None: ... - def positionInBlock(self) -> int: ... - def document(self) -> typing.Optional['QTextDocument']: ... - def setVisualNavigation(self, b: bool) -> None: ... - def visualNavigation(self) -> bool: ... - def isCopyOf(self, other: 'QTextCursor') -> bool: ... - def __gt__(self, rhs: 'QTextCursor') -> bool: ... - def __ge__(self, rhs: 'QTextCursor') -> bool: ... - def __eq__(self, other: object): ... - def __le__(self, rhs: 'QTextCursor') -> bool: ... - def __lt__(self, rhs: 'QTextCursor') -> bool: ... - def __ne__(self, other: object): ... - def columnNumber(self) -> int: ... - def blockNumber(self) -> int: ... - def endEditBlock(self) -> None: ... - def joinPreviousEditBlock(self) -> None: ... - def beginEditBlock(self) -> None: ... - @typing.overload - def insertImage(self, format: 'QTextImageFormat') -> None: ... - @typing.overload - def insertImage(self, format: 'QTextImageFormat', alignment: 'QTextFrameFormat.Position') -> None: ... - @typing.overload - def insertImage(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def insertImage(self, image: QImage, name: typing.Optional[str] = ...) -> None: ... - def insertHtml(self, html: typing.Optional[str]) -> None: ... - def insertFragment(self, fragment: 'QTextDocumentFragment') -> None: ... - def currentFrame(self) -> typing.Optional['QTextFrame']: ... - def insertFrame(self, format: 'QTextFrameFormat') -> typing.Optional['QTextFrame']: ... - def currentTable(self) -> typing.Optional['QTextTable']: ... - @typing.overload - def insertTable(self, rows: int, cols: int, format: 'QTextTableFormat') -> typing.Optional['QTextTable']: ... - @typing.overload - def insertTable(self, rows: int, cols: int) -> typing.Optional['QTextTable']: ... - def currentList(self) -> typing.Optional['QTextList']: ... - @typing.overload - def createList(self, format: 'QTextListFormat') -> typing.Optional['QTextList']: ... - @typing.overload - def createList(self, style: 'QTextListFormat.Style') -> typing.Optional['QTextList']: ... - @typing.overload - def insertList(self, format: 'QTextListFormat') -> typing.Optional['QTextList']: ... - @typing.overload - def insertList(self, style: 'QTextListFormat.Style') -> typing.Optional['QTextList']: ... - @typing.overload - def insertBlock(self) -> None: ... - @typing.overload - def insertBlock(self, format: 'QTextBlockFormat') -> None: ... - @typing.overload - def insertBlock(self, format: 'QTextBlockFormat', charFormat: 'QTextCharFormat') -> None: ... - def atEnd(self) -> bool: ... - def atStart(self) -> bool: ... - def atBlockEnd(self) -> bool: ... - def atBlockStart(self) -> bool: ... - def mergeBlockCharFormat(self, modifier: 'QTextCharFormat') -> None: ... - def setBlockCharFormat(self, format: 'QTextCharFormat') -> None: ... - def blockCharFormat(self) -> 'QTextCharFormat': ... - def mergeBlockFormat(self, modifier: 'QTextBlockFormat') -> None: ... - def setBlockFormat(self, format: 'QTextBlockFormat') -> None: ... - def blockFormat(self) -> 'QTextBlockFormat': ... - def mergeCharFormat(self, modifier: 'QTextCharFormat') -> None: ... - def setCharFormat(self, format: 'QTextCharFormat') -> None: ... - def charFormat(self) -> 'QTextCharFormat': ... - def block(self) -> 'QTextBlock': ... - def selectedTableCells(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def selection(self) -> 'QTextDocumentFragment': ... - def selectedText(self) -> str: ... - def selectionEnd(self) -> int: ... - def selectionStart(self) -> int: ... - def clearSelection(self) -> None: ... - def removeSelectedText(self) -> None: ... - def hasComplexSelection(self) -> bool: ... - def hasSelection(self) -> bool: ... - def select(self, selection: 'QTextCursor.SelectionType') -> None: ... - def deletePreviousChar(self) -> None: ... - def deleteChar(self) -> None: ... - def movePosition(self, op: 'QTextCursor.MoveOperation', mode: 'QTextCursor.MoveMode' = ..., n: int = ...) -> bool: ... - @typing.overload - def insertText(self, text: typing.Optional[str]) -> None: ... - @typing.overload - def insertText(self, text: typing.Optional[str], format: 'QTextCharFormat') -> None: ... - def anchor(self) -> int: ... - def position(self) -> int: ... - def setPosition(self, pos: int, mode: 'QTextCursor.MoveMode' = ...) -> None: ... - def isNull(self) -> bool: ... - - -class QTextDocument(QtCore.QObject): - - class MarkdownFeature(enum.Flag): - MarkdownNoHTML = ... # type: QTextDocument.MarkdownFeature - MarkdownDialectCommonMark = ... # type: QTextDocument.MarkdownFeature - MarkdownDialectGitHub = ... # type: QTextDocument.MarkdownFeature - - class Stacks(enum.Enum): - UndoStack = ... # type: QTextDocument.Stacks - RedoStack = ... # type: QTextDocument.Stacks - UndoAndRedoStacks = ... # type: QTextDocument.Stacks - - class ResourceType(enum.IntEnum): - UnknownResource = ... # type: QTextDocument.ResourceType - HtmlResource = ... # type: QTextDocument.ResourceType - ImageResource = ... # type: QTextDocument.ResourceType - StyleSheetResource = ... # type: QTextDocument.ResourceType - MarkdownResource = ... # type: QTextDocument.ResourceType - UserResource = ... # type: QTextDocument.ResourceType - - class FindFlag(enum.Flag): - FindBackward = ... # type: QTextDocument.FindFlag - FindCaseSensitively = ... # type: QTextDocument.FindFlag - FindWholeWords = ... # type: QTextDocument.FindFlag - - class MetaInformation(enum.Enum): - DocumentTitle = ... # type: QTextDocument.MetaInformation - DocumentUrl = ... # type: QTextDocument.MetaInformation - CssMedia = ... # type: QTextDocument.MetaInformation - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def isLayoutEnabled(self) -> bool: ... - def setLayoutEnabled(self, b: bool) -> None: ... - @staticmethod - def setDefaultResourceProvider(provider: typing.Callable[[QtCore.QUrl], typing.Any]) -> None: ... - @staticmethod - def defaultResourceProvider() -> typing.Callable[[QtCore.QUrl], typing.Any]: ... - def setResourceProvider(self, provider: typing.Callable[[QtCore.QUrl], typing.Any]) -> None: ... - def resourceProvider(self) -> typing.Callable[[QtCore.QUrl], typing.Any]: ... - def baselineOffset(self) -> float: ... - def setBaselineOffset(self, baseline: float) -> None: ... - def subScriptBaseline(self) -> float: ... - def setSubScriptBaseline(self, baseline: float) -> None: ... - def superScriptBaseline(self) -> float: ... - def setSuperScriptBaseline(self, baseline: float) -> None: ... - def setMarkdown(self, markdown: typing.Optional[str], features: 'QTextDocument.MarkdownFeature' = ...) -> None: ... - def toMarkdown(self, features: 'QTextDocument.MarkdownFeature' = ...) -> str: ... - def toRawText(self) -> str: ... - baseUrlChanged: typing.ClassVar[QtCore.pyqtSignal] - def setBaseUrl(self, url: QtCore.QUrl) -> None: ... - def baseUrl(self) -> QtCore.QUrl: ... - def setDefaultCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... - def defaultCursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... - def clearUndoRedoStacks(self, stacks: 'QTextDocument.Stacks' = ...) -> None: ... - def availableRedoSteps(self) -> int: ... - def availableUndoSteps(self) -> int: ... - def characterCount(self) -> int: ... - def lineCount(self) -> int: ... - def setDocumentMargin(self, margin: float) -> None: ... - def documentMargin(self) -> float: ... - def characterAt(self, pos: int) -> str: ... - documentLayoutChanged: typing.ClassVar[QtCore.pyqtSignal] - undoCommandAdded: typing.ClassVar[QtCore.pyqtSignal] - def setIndentWidth(self, width: float) -> None: ... - def indentWidth(self) -> float: ... - def lastBlock(self) -> 'QTextBlock': ... - def firstBlock(self) -> 'QTextBlock': ... - def findBlockByLineNumber(self, blockNumber: int) -> 'QTextBlock': ... - def findBlockByNumber(self, blockNumber: int) -> 'QTextBlock': ... - def revision(self) -> int: ... - def setDefaultTextOption(self, option: 'QTextOption') -> None: ... - def defaultTextOption(self) -> 'QTextOption': ... - def setMaximumBlockCount(self, maximum: int) -> None: ... - def maximumBlockCount(self) -> int: ... - def defaultStyleSheet(self) -> str: ... - def setDefaultStyleSheet(self, sheet: typing.Optional[str]) -> None: ... - def blockCount(self) -> int: ... - def size(self) -> QtCore.QSizeF: ... - def adjustSize(self) -> None: ... - def idealWidth(self) -> float: ... - def textWidth(self) -> float: ... - def setTextWidth(self, width: float) -> None: ... - def drawContents(self, p: typing.Optional[QPainter], rect: QtCore.QRectF = ...) -> None: ... - def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... - def createObject(self, f: 'QTextFormat') -> typing.Optional['QTextObject']: ... - def setModified(self, on: bool = ...) -> None: ... - @typing.overload - def redo(self) -> None: ... - @typing.overload - def redo(self, cursor: typing.Optional[QTextCursor]) -> None: ... - @typing.overload - def undo(self) -> None: ... - @typing.overload - def undo(self, cursor: typing.Optional[QTextCursor]) -> None: ... - undoAvailable: typing.ClassVar[QtCore.pyqtSignal] - redoAvailable: typing.ClassVar[QtCore.pyqtSignal] - modificationChanged: typing.ClassVar[QtCore.pyqtSignal] - cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] - contentsChanged: typing.ClassVar[QtCore.pyqtSignal] - contentsChange: typing.ClassVar[QtCore.pyqtSignal] - blockCountChanged: typing.ClassVar[QtCore.pyqtSignal] - def useDesignMetrics(self) -> bool: ... - def setUseDesignMetrics(self, b: bool) -> None: ... - def markContentsDirty(self, from_: int, length: int) -> None: ... - def allFormats(self) -> typing.List['QTextFormat']: ... - def addResource(self, type: int, name: QtCore.QUrl, resource: typing.Any) -> None: ... - def resource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... - def print(self, printer: typing.Optional[QPagedPaintDevice]) -> None: ... - def isModified(self) -> bool: ... - def pageCount(self) -> int: ... - def defaultFont(self) -> QFont: ... - def setDefaultFont(self, font: QFont) -> None: ... - def pageSize(self) -> QtCore.QSizeF: ... - def setPageSize(self, size: QtCore.QSizeF) -> None: ... - def end(self) -> 'QTextBlock': ... - def begin(self) -> 'QTextBlock': ... - def findBlock(self, pos: int) -> 'QTextBlock': ... - def objectForFormat(self, a0: 'QTextFormat') -> typing.Optional['QTextObject']: ... - def object(self, objectIndex: int) -> typing.Optional['QTextObject']: ... - def rootFrame(self) -> typing.Optional['QTextFrame']: ... - @typing.overload - def find(self, expr: QtCore.QRegularExpression, cursor: QTextCursor, options: 'QTextDocument.FindFlag' = ...) -> QTextCursor: ... - @typing.overload - def find(self, expr: QtCore.QRegularExpression, position: int = ..., options: 'QTextDocument.FindFlag' = ...) -> QTextCursor: ... - @typing.overload - def find(self, subString: typing.Optional[str], cursor: QTextCursor, options: 'QTextDocument.FindFlag' = ...) -> QTextCursor: ... - @typing.overload - def find(self, subString: typing.Optional[str], position: int = ..., options: 'QTextDocument.FindFlag' = ...) -> QTextCursor: ... - def setPlainText(self, text: typing.Optional[str]) -> None: ... - def toPlainText(self) -> str: ... - def setHtml(self, html: typing.Optional[str]) -> None: ... - def toHtml(self) -> str: ... - def metaInformation(self, info: 'QTextDocument.MetaInformation') -> str: ... - def setMetaInformation(self, info: 'QTextDocument.MetaInformation', a1: typing.Optional[str]) -> None: ... - def documentLayout(self) -> typing.Optional[QAbstractTextDocumentLayout]: ... - def setDocumentLayout(self, layout: typing.Optional[QAbstractTextDocumentLayout]) -> None: ... - def isRedoAvailable(self) -> bool: ... - def isUndoAvailable(self) -> bool: ... - def isUndoRedoEnabled(self) -> bool: ... - def setUndoRedoEnabled(self, enable: bool) -> None: ... - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def clone(self, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QTextDocument']: ... - - -class QTextDocumentFragment(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, document: typing.Optional[QTextDocument]) -> None: ... - @typing.overload - def __init__(self, range: QTextCursor) -> None: ... - @typing.overload - def __init__(self, rhs: 'QTextDocumentFragment') -> None: ... - - @staticmethod - def fromMarkdown(markdown: typing.Optional[str], features: QTextDocument.MarkdownFeature = ...) -> 'QTextDocumentFragment': ... - def toMarkdown(self, features: QTextDocument.MarkdownFeature = ...) -> str: ... - def toRawText(self) -> str: ... - @staticmethod - def fromHtml(html: typing.Optional[str], resourceProvider: typing.Optional[QTextDocument] = ...) -> 'QTextDocumentFragment': ... - @staticmethod - def fromPlainText(plainText: typing.Optional[str]) -> 'QTextDocumentFragment': ... - def toHtml(self) -> str: ... - def toPlainText(self) -> str: ... - def isEmpty(self) -> bool: ... - - -class QTextDocumentWriter(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - - @staticmethod - def supportedDocumentFormats() -> typing.List[QtCore.QByteArray]: ... - @typing.overload - def write(self, document: typing.Optional[QTextDocument]) -> bool: ... - @typing.overload - def write(self, fragment: QTextDocumentFragment) -> bool: ... - def fileName(self) -> str: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def format(self) -> QtCore.QByteArray: ... - def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QTextLength(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - VariableLength = ... # type: QTextLength.Type - FixedLength = ... # type: QTextLength.Type - PercentageLength = ... # type: QTextLength.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, atype: 'QTextLength.Type', avalue: float) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextLength') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def rawValue(self) -> float: ... - def value(self, maximumLength: float) -> float: ... - def type(self) -> 'QTextLength.Type': ... - - -class QTextFormat(PyQt6.sip.simplewrapper): - - class Property(enum.IntEnum): - ObjectIndex = ... # type: QTextFormat.Property - CssFloat = ... # type: QTextFormat.Property - LayoutDirection = ... # type: QTextFormat.Property - OutlinePen = ... # type: QTextFormat.Property - BackgroundBrush = ... # type: QTextFormat.Property - ForegroundBrush = ... # type: QTextFormat.Property - BlockAlignment = ... # type: QTextFormat.Property - BlockTopMargin = ... # type: QTextFormat.Property - BlockBottomMargin = ... # type: QTextFormat.Property - BlockLeftMargin = ... # type: QTextFormat.Property - BlockRightMargin = ... # type: QTextFormat.Property - TextIndent = ... # type: QTextFormat.Property - BlockIndent = ... # type: QTextFormat.Property - BlockNonBreakableLines = ... # type: QTextFormat.Property - BlockTrailingHorizontalRulerWidth = ... # type: QTextFormat.Property - FontPointSize = ... # type: QTextFormat.Property - FontSizeAdjustment = ... # type: QTextFormat.Property - FontSizeIncrement = ... # type: QTextFormat.Property - FontWeight = ... # type: QTextFormat.Property - FontItalic = ... # type: QTextFormat.Property - FontUnderline = ... # type: QTextFormat.Property - FontOverline = ... # type: QTextFormat.Property - FontStrikeOut = ... # type: QTextFormat.Property - FontFixedPitch = ... # type: QTextFormat.Property - FontPixelSize = ... # type: QTextFormat.Property - TextUnderlineColor = ... # type: QTextFormat.Property - TextVerticalAlignment = ... # type: QTextFormat.Property - TextOutline = ... # type: QTextFormat.Property - IsAnchor = ... # type: QTextFormat.Property - AnchorHref = ... # type: QTextFormat.Property - AnchorName = ... # type: QTextFormat.Property - ObjectType = ... # type: QTextFormat.Property - ListStyle = ... # type: QTextFormat.Property - ListIndent = ... # type: QTextFormat.Property - FrameBorder = ... # type: QTextFormat.Property - FrameMargin = ... # type: QTextFormat.Property - FramePadding = ... # type: QTextFormat.Property - FrameWidth = ... # type: QTextFormat.Property - FrameHeight = ... # type: QTextFormat.Property - TableColumns = ... # type: QTextFormat.Property - TableColumnWidthConstraints = ... # type: QTextFormat.Property - TableCellSpacing = ... # type: QTextFormat.Property - TableCellPadding = ... # type: QTextFormat.Property - TableCellRowSpan = ... # type: QTextFormat.Property - TableCellColumnSpan = ... # type: QTextFormat.Property - ImageName = ... # type: QTextFormat.Property - ImageWidth = ... # type: QTextFormat.Property - ImageHeight = ... # type: QTextFormat.Property - TextUnderlineStyle = ... # type: QTextFormat.Property - TableHeaderRowCount = ... # type: QTextFormat.Property - FullWidthSelection = ... # type: QTextFormat.Property - PageBreakPolicy = ... # type: QTextFormat.Property - TextToolTip = ... # type: QTextFormat.Property - FrameTopMargin = ... # type: QTextFormat.Property - FrameBottomMargin = ... # type: QTextFormat.Property - FrameLeftMargin = ... # type: QTextFormat.Property - FrameRightMargin = ... # type: QTextFormat.Property - FrameBorderBrush = ... # type: QTextFormat.Property - FrameBorderStyle = ... # type: QTextFormat.Property - BackgroundImageUrl = ... # type: QTextFormat.Property - TabPositions = ... # type: QTextFormat.Property - FirstFontProperty = ... # type: QTextFormat.Property - FontCapitalization = ... # type: QTextFormat.Property - FontLetterSpacing = ... # type: QTextFormat.Property - FontWordSpacing = ... # type: QTextFormat.Property - LastFontProperty = ... # type: QTextFormat.Property - TableCellTopPadding = ... # type: QTextFormat.Property - TableCellBottomPadding = ... # type: QTextFormat.Property - TableCellLeftPadding = ... # type: QTextFormat.Property - TableCellRightPadding = ... # type: QTextFormat.Property - FontStyleHint = ... # type: QTextFormat.Property - FontStyleStrategy = ... # type: QTextFormat.Property - FontKerning = ... # type: QTextFormat.Property - LineHeight = ... # type: QTextFormat.Property - LineHeightType = ... # type: QTextFormat.Property - FontHintingPreference = ... # type: QTextFormat.Property - ListNumberPrefix = ... # type: QTextFormat.Property - ListNumberSuffix = ... # type: QTextFormat.Property - FontStretch = ... # type: QTextFormat.Property - FontLetterSpacingType = ... # type: QTextFormat.Property - HeadingLevel = ... # type: QTextFormat.Property - ImageQuality = ... # type: QTextFormat.Property - FontFamilies = ... # type: QTextFormat.Property - FontStyleName = ... # type: QTextFormat.Property - BlockQuoteLevel = ... # type: QTextFormat.Property - BlockCodeLanguage = ... # type: QTextFormat.Property - BlockCodeFence = ... # type: QTextFormat.Property - BlockMarker = ... # type: QTextFormat.Property - TableBorderCollapse = ... # type: QTextFormat.Property - TableCellTopBorder = ... # type: QTextFormat.Property - TableCellBottomBorder = ... # type: QTextFormat.Property - TableCellLeftBorder = ... # type: QTextFormat.Property - TableCellRightBorder = ... # type: QTextFormat.Property - TableCellTopBorderStyle = ... # type: QTextFormat.Property - TableCellBottomBorderStyle = ... # type: QTextFormat.Property - TableCellLeftBorderStyle = ... # type: QTextFormat.Property - TableCellRightBorderStyle = ... # type: QTextFormat.Property - TableCellTopBorderBrush = ... # type: QTextFormat.Property - TableCellBottomBorderBrush = ... # type: QTextFormat.Property - TableCellLeftBorderBrush = ... # type: QTextFormat.Property - TableCellRightBorderBrush = ... # type: QTextFormat.Property - ImageTitle = ... # type: QTextFormat.Property - ImageAltText = ... # type: QTextFormat.Property - TextSuperScriptBaseline = ... # type: QTextFormat.Property - TextSubScriptBaseline = ... # type: QTextFormat.Property - TextBaselineOffset = ... # type: QTextFormat.Property - OldFontLetterSpacingType = ... # type: QTextFormat.Property - OldFontStretch = ... # type: QTextFormat.Property - OldTextUnderlineColor = ... # type: QTextFormat.Property - OldFontFamily = ... # type: QTextFormat.Property - ListStart = ... # type: QTextFormat.Property - UserProperty = ... # type: QTextFormat.Property - - class PageBreakFlag(enum.Flag): - PageBreak_Auto = ... # type: QTextFormat.PageBreakFlag - PageBreak_AlwaysBefore = ... # type: QTextFormat.PageBreakFlag - PageBreak_AlwaysAfter = ... # type: QTextFormat.PageBreakFlag - - class ObjectTypes(enum.IntEnum): - NoObject = ... # type: QTextFormat.ObjectTypes - ImageObject = ... # type: QTextFormat.ObjectTypes - TableObject = ... # type: QTextFormat.ObjectTypes - TableCellObject = ... # type: QTextFormat.ObjectTypes - UserObject = ... # type: QTextFormat.ObjectTypes - - class FormatType(enum.IntEnum): - InvalidFormat = ... # type: QTextFormat.FormatType - BlockFormat = ... # type: QTextFormat.FormatType - CharFormat = ... # type: QTextFormat.FormatType - ListFormat = ... # type: QTextFormat.FormatType - FrameFormat = ... # type: QTextFormat.FormatType - UserFormat = ... # type: QTextFormat.FormatType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, type: int) -> None: ... - @typing.overload - def __init__(self, rhs: 'QTextFormat') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - - def isEmpty(self) -> bool: ... - def swap(self, other: 'QTextFormat') -> None: ... - def toTableCellFormat(self) -> 'QTextTableCellFormat': ... - def isTableCellFormat(self) -> bool: ... - def propertyCount(self) -> int: ... - def setObjectType(self, atype: int) -> None: ... - def clearForeground(self) -> None: ... - def foreground(self) -> QBrush: ... - def setForeground(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def clearBackground(self) -> None: ... - def background(self) -> QBrush: ... - def setBackground(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... - def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def toImageFormat(self) -> 'QTextImageFormat': ... - def toFrameFormat(self) -> 'QTextFrameFormat': ... - def toTableFormat(self) -> 'QTextTableFormat': ... - def toListFormat(self) -> 'QTextListFormat': ... - def toCharFormat(self) -> 'QTextCharFormat': ... - def toBlockFormat(self) -> 'QTextBlockFormat': ... - def isTableFormat(self) -> bool: ... - def isImageFormat(self) -> bool: ... - def isFrameFormat(self) -> bool: ... - def isListFormat(self) -> bool: ... - def isBlockFormat(self) -> bool: ... - def isCharFormat(self) -> bool: ... - def objectType(self) -> int: ... - def properties(self) -> typing.Dict[int, typing.Any]: ... - def lengthVectorProperty(self, propertyId: int) -> typing.List[QTextLength]: ... - def lengthProperty(self, propertyId: int) -> QTextLength: ... - def brushProperty(self, propertyId: int) -> QBrush: ... - def penProperty(self, propertyId: int) -> QPen: ... - def colorProperty(self, propertyId: int) -> QColor: ... - def stringProperty(self, propertyId: int) -> str: ... - def doubleProperty(self, propertyId: int) -> float: ... - def intProperty(self, propertyId: int) -> int: ... - def boolProperty(self, propertyId: int) -> bool: ... - def hasProperty(self, propertyId: int) -> bool: ... - def clearProperty(self, propertyId: int) -> None: ... - @typing.overload - def setProperty(self, propertyId: int, lengths: typing.Iterable[QTextLength]) -> None: ... - @typing.overload - def setProperty(self, propertyId: int, value: typing.Any) -> None: ... - def property(self, propertyId: int) -> typing.Any: ... - def setObjectIndex(self, object: int) -> None: ... - def objectIndex(self) -> int: ... - def type(self) -> int: ... - def isValid(self) -> bool: ... - def merge(self, other: 'QTextFormat') -> None: ... - - -class QTextCharFormat(QTextFormat): - - class FontPropertiesInheritanceBehavior(enum.Enum): - FontPropertiesSpecifiedOnly = ... # type: QTextCharFormat.FontPropertiesInheritanceBehavior - FontPropertiesAll = ... # type: QTextCharFormat.FontPropertiesInheritanceBehavior - - class UnderlineStyle(enum.Enum): - NoUnderline = ... # type: QTextCharFormat.UnderlineStyle - SingleUnderline = ... # type: QTextCharFormat.UnderlineStyle - DashUnderline = ... # type: QTextCharFormat.UnderlineStyle - DotLine = ... # type: QTextCharFormat.UnderlineStyle - DashDotLine = ... # type: QTextCharFormat.UnderlineStyle - DashDotDotLine = ... # type: QTextCharFormat.UnderlineStyle - WaveUnderline = ... # type: QTextCharFormat.UnderlineStyle - SpellCheckUnderline = ... # type: QTextCharFormat.UnderlineStyle - - class VerticalAlignment(enum.Enum): - AlignNormal = ... # type: QTextCharFormat.VerticalAlignment - AlignSuperScript = ... # type: QTextCharFormat.VerticalAlignment - AlignSubScript = ... # type: QTextCharFormat.VerticalAlignment - AlignMiddle = ... # type: QTextCharFormat.VerticalAlignment - AlignTop = ... # type: QTextCharFormat.VerticalAlignment - AlignBottom = ... # type: QTextCharFormat.VerticalAlignment - AlignBaseline = ... # type: QTextCharFormat.VerticalAlignment - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextCharFormat') -> None: ... - - def baselineOffset(self) -> float: ... - def setBaselineOffset(self, baseline: float) -> None: ... - def subScriptBaseline(self) -> float: ... - def setSubScriptBaseline(self, baseline: float) -> None: ... - def superScriptBaseline(self) -> float: ... - def setSuperScriptBaseline(self, baseline: float) -> None: ... - def fontStyleName(self) -> typing.Any: ... - def setFontStyleName(self, styleName: typing.Optional[str]) -> None: ... - def fontFamilies(self) -> typing.Any: ... - def setFontFamilies(self, families: typing.Iterable[typing.Optional[str]]) -> None: ... - def fontLetterSpacingType(self) -> QFont.SpacingType: ... - def setFontLetterSpacingType(self, letterSpacingType: QFont.SpacingType) -> None: ... - def setFontStretch(self, factor: int) -> None: ... - def fontStretch(self) -> int: ... - def fontHintingPreference(self) -> QFont.HintingPreference: ... - def setFontHintingPreference(self, hintingPreference: QFont.HintingPreference) -> None: ... - def fontKerning(self) -> bool: ... - def setFontKerning(self, enable: bool) -> None: ... - def fontStyleStrategy(self) -> QFont.StyleStrategy: ... - def fontStyleHint(self) -> QFont.StyleHint: ... - def setFontStyleStrategy(self, strategy: QFont.StyleStrategy) -> None: ... - def setFontStyleHint(self, hint: QFont.StyleHint, strategy: QFont.StyleStrategy = ...) -> None: ... - def fontWordSpacing(self) -> float: ... - def setFontWordSpacing(self, spacing: float) -> None: ... - def fontLetterSpacing(self) -> float: ... - def setFontLetterSpacing(self, spacing: float) -> None: ... - def fontCapitalization(self) -> QFont.Capitalization: ... - def setFontCapitalization(self, capitalization: QFont.Capitalization) -> None: ... - def anchorNames(self) -> typing.List[str]: ... - def setAnchorNames(self, names: typing.Iterable[typing.Optional[str]]) -> None: ... - def toolTip(self) -> str: ... - def setToolTip(self, tip: typing.Optional[str]) -> None: ... - def underlineStyle(self) -> 'QTextCharFormat.UnderlineStyle': ... - def setUnderlineStyle(self, style: 'QTextCharFormat.UnderlineStyle') -> None: ... - def textOutline(self) -> QPen: ... - def setTextOutline(self, pen: typing.Union[QPen, typing.Union[QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - def setTableCellColumnSpan(self, atableCellColumnSpan: int) -> None: ... - def setTableCellRowSpan(self, atableCellRowSpan: int) -> None: ... - def tableCellColumnSpan(self) -> int: ... - def tableCellRowSpan(self) -> int: ... - def anchorHref(self) -> str: ... - def setAnchorHref(self, value: typing.Optional[str]) -> None: ... - def isAnchor(self) -> bool: ... - def setAnchor(self, anchor: bool) -> None: ... - def verticalAlignment(self) -> 'QTextCharFormat.VerticalAlignment': ... - def setVerticalAlignment(self, alignment: 'QTextCharFormat.VerticalAlignment') -> None: ... - def fontFixedPitch(self) -> bool: ... - def setFontFixedPitch(self, fixedPitch: bool) -> None: ... - def underlineColor(self) -> QColor: ... - def setUnderlineColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def fontStrikeOut(self) -> bool: ... - def setFontStrikeOut(self, strikeOut: bool) -> None: ... - def fontOverline(self) -> bool: ... - def setFontOverline(self, overline: bool) -> None: ... - def fontUnderline(self) -> bool: ... - def setFontUnderline(self, underline: bool) -> None: ... - def fontItalic(self) -> bool: ... - def setFontItalic(self, italic: bool) -> None: ... - def fontWeight(self) -> int: ... - def setFontWeight(self, weight: int) -> None: ... - def fontPointSize(self) -> float: ... - def setFontPointSize(self, size: float) -> None: ... - def fontFamily(self) -> str: ... - def setFontFamily(self, family: typing.Optional[str]) -> None: ... - def font(self) -> QFont: ... - def setFont(self, font: QFont, behavior: 'QTextCharFormat.FontPropertiesInheritanceBehavior' = ...) -> None: ... - def isValid(self) -> bool: ... - - -class QTextBlockFormat(QTextFormat): - - class MarkerType(enum.Enum): - NoMarker = ... # type: QTextBlockFormat.MarkerType - Unchecked = ... # type: QTextBlockFormat.MarkerType - Checked = ... # type: QTextBlockFormat.MarkerType - - class LineHeightTypes(enum.Enum): - SingleHeight = ... # type: QTextBlockFormat.LineHeightTypes - ProportionalHeight = ... # type: QTextBlockFormat.LineHeightTypes - FixedHeight = ... # type: QTextBlockFormat.LineHeightTypes - MinimumHeight = ... # type: QTextBlockFormat.LineHeightTypes - LineDistanceHeight = ... # type: QTextBlockFormat.LineHeightTypes - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextBlockFormat') -> None: ... - - def marker(self) -> 'QTextBlockFormat.MarkerType': ... - def setMarker(self, marker: 'QTextBlockFormat.MarkerType') -> None: ... - def headingLevel(self) -> int: ... - def setHeadingLevel(self, alevel: int) -> None: ... - def lineHeightType(self) -> int: ... - @typing.overload - def lineHeight(self) -> float: ... - @typing.overload - def lineHeight(self, scriptLineHeight: float, scaling: float = ...) -> float: ... - def setLineHeight(self, height: float, heightType: int) -> None: ... - def tabPositions(self) -> typing.List['QTextOption.Tab']: ... - def setTabPositions(self, tabs: typing.Iterable['QTextOption.Tab']) -> None: ... - def pageBreakPolicy(self) -> QTextFormat.PageBreakFlag: ... - def setPageBreakPolicy(self, flags: QTextFormat.PageBreakFlag) -> None: ... - def setIndent(self, aindent: int) -> None: ... - def setAlignment(self, aalignment: QtCore.Qt.AlignmentFlag) -> None: ... - def nonBreakableLines(self) -> bool: ... - def setNonBreakableLines(self, b: bool) -> None: ... - def indent(self) -> int: ... - def textIndent(self) -> float: ... - def setTextIndent(self, margin: float) -> None: ... - def rightMargin(self) -> float: ... - def setRightMargin(self, margin: float) -> None: ... - def leftMargin(self) -> float: ... - def setLeftMargin(self, margin: float) -> None: ... - def bottomMargin(self) -> float: ... - def setBottomMargin(self, margin: float) -> None: ... - def topMargin(self) -> float: ... - def setTopMargin(self, margin: float) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def isValid(self) -> bool: ... - - -class QTextListFormat(QTextFormat): - - class Style(enum.Enum): - ListDisc = ... # type: QTextListFormat.Style - ListCircle = ... # type: QTextListFormat.Style - ListSquare = ... # type: QTextListFormat.Style - ListDecimal = ... # type: QTextListFormat.Style - ListLowerAlpha = ... # type: QTextListFormat.Style - ListUpperAlpha = ... # type: QTextListFormat.Style - ListLowerRoman = ... # type: QTextListFormat.Style - ListUpperRoman = ... # type: QTextListFormat.Style - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextListFormat') -> None: ... - - def start(self) -> int: ... - def setStart(self, indent: int) -> None: ... - def setNumberSuffix(self, ns: typing.Optional[str]) -> None: ... - def setNumberPrefix(self, np: typing.Optional[str]) -> None: ... - def numberSuffix(self) -> str: ... - def numberPrefix(self) -> str: ... - def setIndent(self, aindent: int) -> None: ... - def setStyle(self, astyle: 'QTextListFormat.Style') -> None: ... - def indent(self) -> int: ... - def style(self) -> 'QTextListFormat.Style': ... - def isValid(self) -> bool: ... - - -class QTextImageFormat(QTextCharFormat): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextImageFormat') -> None: ... - - def setQuality(self, quality: int = ...) -> None: ... - def setHeight(self, aheight: float) -> None: ... - def setWidth(self, awidth: float) -> None: ... - def setName(self, aname: typing.Optional[str]) -> None: ... - def quality(self) -> int: ... - def height(self) -> float: ... - def width(self) -> float: ... - def name(self) -> str: ... - def isValid(self) -> bool: ... - - -class QTextFrameFormat(QTextFormat): - - class BorderStyle(enum.Enum): - BorderStyle_None = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Dotted = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Dashed = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Solid = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Double = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_DotDash = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_DotDotDash = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Groove = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Ridge = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Inset = ... # type: QTextFrameFormat.BorderStyle - BorderStyle_Outset = ... # type: QTextFrameFormat.BorderStyle - - class Position(enum.Enum): - InFlow = ... # type: QTextFrameFormat.Position - FloatLeft = ... # type: QTextFrameFormat.Position - FloatRight = ... # type: QTextFrameFormat.Position - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextFrameFormat') -> None: ... - - def setRightMargin(self, amargin: float) -> None: ... - def setLeftMargin(self, amargin: float) -> None: ... - def setBottomMargin(self, amargin: float) -> None: ... - def setTopMargin(self, amargin: float) -> None: ... - def rightMargin(self) -> float: ... - def leftMargin(self) -> float: ... - def bottomMargin(self) -> float: ... - def topMargin(self) -> float: ... - def borderStyle(self) -> 'QTextFrameFormat.BorderStyle': ... - def setBorderStyle(self, style: 'QTextFrameFormat.BorderStyle') -> None: ... - def borderBrush(self) -> QBrush: ... - def setBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def pageBreakPolicy(self) -> QTextFormat.PageBreakFlag: ... - def setPageBreakPolicy(self, flags: QTextFormat.PageBreakFlag) -> None: ... - @typing.overload - def setHeight(self, aheight: float) -> None: ... - @typing.overload - def setHeight(self, aheight: QTextLength) -> None: ... - def setPadding(self, apadding: float) -> None: ... - def setMargin(self, amargin: float) -> None: ... - def setBorder(self, aborder: float) -> None: ... - def height(self) -> QTextLength: ... - def width(self) -> QTextLength: ... - @typing.overload - def setWidth(self, length: QTextLength) -> None: ... - @typing.overload - def setWidth(self, awidth: float) -> None: ... - def padding(self) -> float: ... - def margin(self) -> float: ... - def border(self) -> float: ... - def position(self) -> 'QTextFrameFormat.Position': ... - def setPosition(self, f: 'QTextFrameFormat.Position') -> None: ... - def isValid(self) -> bool: ... - - -class QTextTableFormat(QTextFrameFormat): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextTableFormat') -> None: ... - - def borderCollapse(self) -> bool: ... - def setBorderCollapse(self, borderCollapse: bool) -> None: ... - def headerRowCount(self) -> int: ... - def setHeaderRowCount(self, count: int) -> None: ... - def setAlignment(self, aalignment: QtCore.Qt.AlignmentFlag) -> None: ... - def setCellPadding(self, apadding: float) -> None: ... - def setColumns(self, acolumns: int) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def cellPadding(self) -> float: ... - def setCellSpacing(self, spacing: float) -> None: ... - def cellSpacing(self) -> float: ... - def clearColumnWidthConstraints(self) -> None: ... - def columnWidthConstraints(self) -> typing.List[QTextLength]: ... - def setColumnWidthConstraints(self, constraints: typing.Iterable[QTextLength]) -> None: ... - def columns(self) -> int: ... - def isValid(self) -> bool: ... - - -class QTextTableCellFormat(QTextCharFormat): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextTableCellFormat') -> None: ... - - def setBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def rightBorderBrush(self) -> QBrush: ... - def setRightBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def leftBorderBrush(self) -> QBrush: ... - def setLeftBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def bottomBorderBrush(self) -> QBrush: ... - def setBottomBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def topBorderBrush(self) -> QBrush: ... - def setTopBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor, int], QGradient]) -> None: ... - def setBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... - def rightBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... - def setRightBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... - def leftBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... - def setLeftBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... - def bottomBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... - def setBottomBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... - def topBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... - def setTopBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... - def setBorder(self, width: float) -> None: ... - def rightBorder(self) -> float: ... - def setRightBorder(self, width: float) -> None: ... - def leftBorder(self) -> float: ... - def setLeftBorder(self, width: float) -> None: ... - def bottomBorder(self) -> float: ... - def setBottomBorder(self, width: float) -> None: ... - def topBorder(self) -> float: ... - def setTopBorder(self, width: float) -> None: ... - def setPadding(self, padding: float) -> None: ... - def rightPadding(self) -> float: ... - def setRightPadding(self, padding: float) -> None: ... - def leftPadding(self) -> float: ... - def setLeftPadding(self, padding: float) -> None: ... - def bottomPadding(self) -> float: ... - def setBottomPadding(self, padding: float) -> None: ... - def topPadding(self) -> float: ... - def setTopPadding(self, padding: float) -> None: ... - def isValid(self) -> bool: ... - - -class QTextInlineObject(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextInlineObject') -> None: ... - - def format(self) -> QTextFormat: ... - def formatIndex(self) -> int: ... - def textPosition(self) -> int: ... - def setDescent(self, d: float) -> None: ... - def setAscent(self, a: float) -> None: ... - def setWidth(self, w: float) -> None: ... - def textDirection(self) -> QtCore.Qt.LayoutDirection: ... - def height(self) -> float: ... - def descent(self) -> float: ... - def ascent(self) -> float: ... - def width(self) -> float: ... - def rect(self) -> QtCore.QRectF: ... - def isValid(self) -> bool: ... - - -class QTextLayout(PyQt6.sip.simplewrapper): - - class GlyphRunRetrievalFlag(enum.Enum): - RetrieveGlyphIndexes = ... # type: QTextLayout.GlyphRunRetrievalFlag - RetrieveGlyphPositions = ... # type: QTextLayout.GlyphRunRetrievalFlag - RetrieveStringIndexes = ... # type: QTextLayout.GlyphRunRetrievalFlag - RetrieveString = ... # type: QTextLayout.GlyphRunRetrievalFlag - RetrieveAll = ... # type: QTextLayout.GlyphRunRetrievalFlag - - class CursorMode(enum.Enum): - SkipCharacters = ... # type: QTextLayout.CursorMode - SkipWords = ... # type: QTextLayout.CursorMode - - class FormatRange(PyQt6.sip.simplewrapper): - - format = ... # type: QTextCharFormat - length = ... # type: int - start = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextLayout.FormatRange') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], font: QFont, paintdevice: typing.Optional[QPaintDevice] = ...) -> None: ... - @typing.overload - def __init__(self, b: 'QTextBlock') -> None: ... - - def clearFormats(self) -> None: ... - def formats(self) -> typing.List['QTextLayout.FormatRange']: ... - def setFormats(self, overrides: typing.Iterable['QTextLayout.FormatRange']) -> None: ... - @typing.overload - def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... - @typing.overload - def glyphRuns(self, from_: int, length: int, flags: 'QTextLayout.GlyphRunRetrievalFlag') -> typing.List[QGlyphRun]: ... - def rightCursorPosition(self, oldPos: int) -> int: ... - def leftCursorPosition(self, oldPos: int) -> int: ... - def cursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... - def setCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... - def clearLayout(self) -> None: ... - def maximumWidth(self) -> float: ... - def minimumWidth(self) -> float: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setPosition(self, p: QtCore.QPointF) -> None: ... - def position(self) -> QtCore.QPointF: ... - @typing.overload - def drawCursor(self, p: typing.Optional[QPainter], pos: QtCore.QPointF, cursorPosition: int) -> None: ... - @typing.overload - def drawCursor(self, p: typing.Optional[QPainter], pos: QtCore.QPointF, cursorPosition: int, width: int) -> None: ... - def draw(self, p: typing.Optional[QPainter], pos: QtCore.QPointF, selections: typing.Iterable['QTextLayout.FormatRange'] = ..., clip: QtCore.QRectF = ...) -> None: ... - def previousCursorPosition(self, oldPos: int, mode: 'QTextLayout.CursorMode' = ...) -> int: ... - def nextCursorPosition(self, oldPos: int, mode: 'QTextLayout.CursorMode' = ...) -> int: ... - def isValidCursorPosition(self, pos: int) -> bool: ... - def lineForTextPosition(self, pos: int) -> 'QTextLine': ... - def lineAt(self, i: int) -> 'QTextLine': ... - def lineCount(self) -> int: ... - def createLine(self) -> 'QTextLine': ... - def endLayout(self) -> None: ... - def beginLayout(self) -> None: ... - def cacheEnabled(self) -> bool: ... - def setCacheEnabled(self, enable: bool) -> None: ... - def preeditAreaText(self) -> str: ... - def preeditAreaPosition(self) -> int: ... - def setPreeditArea(self, position: int, text: typing.Optional[str]) -> None: ... - def textOption(self) -> 'QTextOption': ... - def setTextOption(self, option: 'QTextOption') -> None: ... - def text(self) -> str: ... - def setText(self, string: typing.Optional[str]) -> None: ... - def font(self) -> QFont: ... - def setFont(self, f: QFont) -> None: ... - - -class QTextLine(PyQt6.sip.simplewrapper): - - class CursorPosition(enum.Enum): - CursorBetweenCharacters = ... # type: QTextLine.CursorPosition - CursorOnCharacter = ... # type: QTextLine.CursorPosition - - class Edge(enum.Enum): - Leading = ... # type: QTextLine.Edge - Trailing = ... # type: QTextLine.Edge - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextLine') -> None: ... - - @typing.overload - def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... - @typing.overload - def glyphRuns(self, from_: int, length: int, flags: QTextLayout.GlyphRunRetrievalFlag) -> typing.List[QGlyphRun]: ... - def horizontalAdvance(self) -> float: ... - def leadingIncluded(self) -> bool: ... - def setLeadingIncluded(self, included: bool) -> None: ... - def leading(self) -> float: ... - def position(self) -> QtCore.QPointF: ... - def draw(self, painter: typing.Optional[QPainter], position: QtCore.QPointF) -> None: ... - def lineNumber(self) -> int: ... - def textLength(self) -> int: ... - def textStart(self) -> int: ... - def setPosition(self, pos: QtCore.QPointF) -> None: ... - @typing.overload - def setNumColumns(self, columns: int) -> None: ... - @typing.overload - def setNumColumns(self, columns: int, alignmentWidth: float) -> None: ... - def setLineWidth(self, width: float) -> None: ... - def xToCursor(self, x: float, edge: 'QTextLine.CursorPosition' = ...) -> int: ... - def cursorToX(self, cursorPos: typing.Optional[int], edge: 'QTextLine.Edge' = ...) -> typing.Tuple[float, typing.Optional[int]]: ... - def naturalTextRect(self) -> QtCore.QRectF: ... - def naturalTextWidth(self) -> float: ... - def height(self) -> float: ... - def descent(self) -> float: ... - def ascent(self) -> float: ... - def width(self) -> float: ... - def y(self) -> float: ... - def x(self) -> float: ... - def rect(self) -> QtCore.QRectF: ... - def isValid(self) -> bool: ... - - -class QTextObject(QtCore.QObject): - - def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... - - def objectIndex(self) -> int: ... - def document(self) -> typing.Optional[QTextDocument]: ... - def formatIndex(self) -> int: ... - def format(self) -> QTextFormat: ... - def setFormat(self, format: QTextFormat) -> None: ... - - -class QTextBlockGroup(QTextObject): - - def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... - - def blockList(self) -> typing.List['QTextBlock']: ... - def blockFormatChanged(self, block: 'QTextBlock') -> None: ... - def blockRemoved(self, block: 'QTextBlock') -> None: ... - def blockInserted(self, block: 'QTextBlock') -> None: ... - - -class QTextList(QTextBlockGroup): - - def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... - - def setFormat(self, aformat: QTextListFormat) -> None: ... - def format(self) -> QTextListFormat: ... - def add(self, block: 'QTextBlock') -> None: ... - def remove(self, a0: 'QTextBlock') -> None: ... - def removeItem(self, i: int) -> None: ... - def itemText(self, a0: 'QTextBlock') -> str: ... - def itemNumber(self, a0: 'QTextBlock') -> int: ... - def item(self, i: int) -> 'QTextBlock': ... - def __len__(self) -> int: ... - def count(self) -> int: ... - - -class QTextFrame(QTextObject): - - class iterator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextFrame.iterator') -> None: ... - - def __isub__(self, a0: int) -> 'QTextFrame.iterator': ... - def __iadd__(self, a0: int) -> 'QTextFrame.iterator': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def atEnd(self) -> bool: ... - def currentBlock(self) -> 'QTextBlock': ... - def currentFrame(self) -> typing.Optional['QTextFrame']: ... - def parentFrame(self) -> typing.Optional['QTextFrame']: ... - - def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... - - def setFrameFormat(self, aformat: QTextFrameFormat) -> None: ... - def end(self) -> 'QTextFrame.iterator': ... - def begin(self) -> 'QTextFrame.iterator': ... - def parentFrame(self) -> typing.Optional['QTextFrame']: ... - def childFrames(self) -> typing.List['QTextFrame']: ... - def lastPosition(self) -> int: ... - def firstPosition(self) -> int: ... - def lastCursorPosition(self) -> QTextCursor: ... - def firstCursorPosition(self) -> QTextCursor: ... - def frameFormat(self) -> QTextFrameFormat: ... - - -class QTextBlock(PyQt6.sip.wrapper): - - class iterator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextBlock.iterator') -> None: ... - - def __isub__(self, a0: int) -> 'QTextBlock.iterator': ... - def __iadd__(self, a0: int) -> 'QTextBlock.iterator': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def atEnd(self) -> bool: ... - def fragment(self) -> 'QTextFragment': ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, o: 'QTextBlock') -> None: ... - - def __ge__(self, o: 'QTextBlock') -> bool: ... - def textFormats(self) -> typing.List[QTextLayout.FormatRange]: ... - def textDirection(self) -> QtCore.Qt.LayoutDirection: ... - def lineCount(self) -> int: ... - def setLineCount(self, count: int) -> None: ... - def firstLineNumber(self) -> int: ... - def blockNumber(self) -> int: ... - def setVisible(self, visible: bool) -> None: ... - def isVisible(self) -> bool: ... - def setRevision(self, rev: int) -> None: ... - def revision(self) -> int: ... - def clearLayout(self) -> None: ... - def setUserState(self, state: int) -> None: ... - def userState(self) -> int: ... - def setUserData(self, data: typing.Optional['QTextBlockUserData']) -> None: ... - def userData(self) -> typing.Optional['QTextBlockUserData']: ... - def previous(self) -> 'QTextBlock': ... - def next(self) -> 'QTextBlock': ... - def end(self) -> 'QTextBlock.iterator': ... - def begin(self) -> 'QTextBlock.iterator': ... - def textList(self) -> typing.Optional[QTextList]: ... - def document(self) -> typing.Optional[QTextDocument]: ... - def text(self) -> str: ... - def charFormatIndex(self) -> int: ... - def charFormat(self) -> QTextCharFormat: ... - def blockFormatIndex(self) -> int: ... - def blockFormat(self) -> QTextBlockFormat: ... - def layout(self) -> typing.Optional[QTextLayout]: ... - def contains(self, position: int) -> bool: ... - def length(self) -> int: ... - def position(self) -> int: ... - def __lt__(self, o: 'QTextBlock') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isValid(self) -> bool: ... - - -class QTextFragment(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, o: 'QTextFragment') -> None: ... - - def __ge__(self, o: 'QTextFragment') -> bool: ... - def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... - def text(self) -> str: ... - def charFormatIndex(self) -> int: ... - def charFormat(self) -> QTextCharFormat: ... - def contains(self, position: int) -> bool: ... - def length(self) -> int: ... - def position(self) -> int: ... - def __lt__(self, o: 'QTextFragment') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isValid(self) -> bool: ... - - -class QTextBlockUserData(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextBlockUserData') -> None: ... - - -class QTextOption(PyQt6.sip.simplewrapper): - - class TabType(enum.Enum): - LeftTab = ... # type: QTextOption.TabType - RightTab = ... # type: QTextOption.TabType - CenterTab = ... # type: QTextOption.TabType - DelimiterTab = ... # type: QTextOption.TabType - - class Flag(enum.Flag): - IncludeTrailingSpaces = ... # type: QTextOption.Flag - ShowTabsAndSpaces = ... # type: QTextOption.Flag - ShowLineAndParagraphSeparators = ... # type: QTextOption.Flag - AddSpaceForLineAndParagraphSeparators = ... # type: QTextOption.Flag - SuppressColors = ... # type: QTextOption.Flag - ShowDocumentTerminator = ... # type: QTextOption.Flag - - class WrapMode(enum.Enum): - NoWrap = ... # type: QTextOption.WrapMode - WordWrap = ... # type: QTextOption.WrapMode - ManualWrap = ... # type: QTextOption.WrapMode - WrapAnywhere = ... # type: QTextOption.WrapMode - WrapAtWordBoundaryOrAnywhere = ... # type: QTextOption.WrapMode - - class Tab(PyQt6.sip.simplewrapper): - - delimiter = ... # type: str - position = ... # type: float - type = ... # type: 'QTextOption.TabType' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, pos: float, tabType: 'QTextOption.TabType', delim: str = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextOption.Tab') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - @typing.overload - def __init__(self, o: 'QTextOption') -> None: ... - - def tabStopDistance(self) -> float: ... - def setTabStopDistance(self, tabStopDistance: float) -> None: ... - def tabs(self) -> typing.List['QTextOption.Tab']: ... - def setTabs(self, tabStops: typing.Iterable['QTextOption.Tab']) -> None: ... - def setFlags(self, flags: 'QTextOption.Flag') -> None: ... - def setAlignment(self, aalignment: QtCore.Qt.AlignmentFlag) -> None: ... - def useDesignMetrics(self) -> bool: ... - def setUseDesignMetrics(self, b: bool) -> None: ... - def tabArray(self) -> typing.List[float]: ... - def setTabArray(self, tabStops: typing.Iterable[float]) -> None: ... - def flags(self) -> 'QTextOption.Flag': ... - def wrapMode(self) -> 'QTextOption.WrapMode': ... - def setWrapMode(self, wrap: 'QTextOption.WrapMode') -> None: ... - def textDirection(self) -> QtCore.Qt.LayoutDirection: ... - def setTextDirection(self, aDirection: QtCore.Qt.LayoutDirection) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - - -class QTextTableCell(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, o: 'QTextTableCell') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def tableCellFormatIndex(self) -> int: ... - def lastCursorPosition(self) -> QTextCursor: ... - def firstCursorPosition(self) -> QTextCursor: ... - def isValid(self) -> bool: ... - def columnSpan(self) -> int: ... - def rowSpan(self) -> int: ... - def column(self) -> int: ... - def row(self) -> int: ... - def setFormat(self, format: QTextCharFormat) -> None: ... - def format(self) -> QTextCharFormat: ... - - -class QTextTable(QTextFrame): - - def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... - - def appendColumns(self, count: int) -> None: ... - def appendRows(self, count: int) -> None: ... - def setFormat(self, aformat: QTextTableFormat) -> None: ... - def format(self) -> QTextTableFormat: ... - def rowEnd(self, c: QTextCursor) -> QTextCursor: ... - def rowStart(self, c: QTextCursor) -> QTextCursor: ... - @typing.overload - def cellAt(self, row: int, col: int) -> QTextTableCell: ... - @typing.overload - def cellAt(self, position: int) -> QTextTableCell: ... - @typing.overload - def cellAt(self, c: QTextCursor) -> QTextTableCell: ... - def columns(self) -> int: ... - def rows(self) -> int: ... - def splitCell(self, row: int, col: int, numRows: int, numCols: int) -> None: ... - @typing.overload - def mergeCells(self, row: int, col: int, numRows: int, numCols: int) -> None: ... - @typing.overload - def mergeCells(self, cursor: QTextCursor) -> None: ... - def removeColumns(self, pos: int, num: int) -> None: ... - def removeRows(self, pos: int, num: int) -> None: ... - def insertColumns(self, pos: int, num: int) -> None: ... - def insertRows(self, pos: int, num: int) -> None: ... - def resize(self, rows: int, cols: int) -> None: ... - - -class QTransform(PyQt6.sip.simplewrapper): - - class TransformationType(enum.Enum): - TxNone = ... # type: QTransform.TransformationType - TxTranslate = ... # type: QTransform.TransformationType - TxScale = ... # type: QTransform.TransformationType - TxRotate = ... # type: QTransform.TransformationType - TxShear = ... # type: QTransform.TransformationType - TxProject = ... # type: QTransform.TransformationType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, h11: float, h12: float, h13: float, h21: float, h22: float, h23: float, h31: float, h32: float, h33: float) -> None: ... - @typing.overload - def __init__(self, h11: float, h12: float, h13: float, h21: float, h22: float, h23: float) -> None: ... - @typing.overload - def __init__(self, other: 'QTransform') -> None: ... - - def __truediv__(self, n: float) -> 'QTransform': ... - def __add__(self, n: float) -> 'QTransform': ... - def __sub__(self, n: float) -> 'QTransform': ... - def __hash__(self) -> int: ... - def __isub__(self, num: float) -> 'QTransform': ... - def __iadd__(self, num: float) -> 'QTransform': ... - def __itruediv__(self, div: float) -> 'QTransform': ... - @staticmethod - def fromScale(dx: float, dy: float) -> 'QTransform': ... - @staticmethod - def fromTranslate(dx: float, dy: float) -> 'QTransform': ... - def dy(self) -> float: ... - def dx(self) -> float: ... - def m33(self) -> float: ... - def m32(self) -> float: ... - def m31(self) -> float: ... - def m23(self) -> float: ... - def m22(self) -> float: ... - def m21(self) -> float: ... - def m13(self) -> float: ... - def m12(self) -> float: ... - def m11(self) -> float: ... - def determinant(self) -> float: ... - def isTranslating(self) -> bool: ... - def isRotating(self) -> bool: ... - def isScaling(self) -> bool: ... - def isInvertible(self) -> bool: ... - def isIdentity(self) -> bool: ... - def isAffine(self) -> bool: ... - @typing.overload - def mapRect(self, a0: QtCore.QRect) -> QtCore.QRect: ... - @typing.overload - def mapRect(self, a0: QtCore.QRectF) -> QtCore.QRectF: ... - def mapToPolygon(self, r: QtCore.QRect) -> QPolygon: ... - @typing.overload - def map(self, x: int, y: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def map(self, x: float, y: float) -> typing.Tuple[typing.Optional[float], typing.Optional[float]]: ... - @typing.overload - def map(self, p: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def map(self, p: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def map(self, l: QtCore.QLine) -> QtCore.QLine: ... - @typing.overload - def map(self, l: QtCore.QLineF) -> QtCore.QLineF: ... - @typing.overload - def map(self, a: QPolygonF) -> QPolygonF: ... - @typing.overload - def map(self, a: QPolygon) -> QPolygon: ... - @typing.overload - def map(self, r: QRegion) -> QRegion: ... - @typing.overload - def map(self, p: QPainterPath) -> QPainterPath: ... - def reset(self) -> None: ... - def __matmul__(self, o: 'QTransform') -> 'QTransform': ... - @typing.overload - def __mul__(self, o: 'QTransform') -> 'QTransform': ... - @typing.overload - def __mul__(self, n: float) -> 'QTransform': ... - def __imatmul__(self, a0: 'QTransform') -> 'QTransform': ... - @typing.overload - def __imul__(self, a0: 'QTransform') -> 'QTransform': ... - @typing.overload - def __imul__(self, num: float) -> 'QTransform': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def quadToQuad(one: QPolygonF, two: QPolygonF, result: 'QTransform') -> bool: ... - @staticmethod - def quadToSquare(quad: QPolygonF, result: 'QTransform') -> bool: ... - @staticmethod - def squareToQuad(square: QPolygonF, result: 'QTransform') -> bool: ... - @typing.overload - def rotateRadians(self, angle: float, axis: QtCore.Qt.Axis = ...) -> 'QTransform': ... - @typing.overload - def rotateRadians(self, a: float, axis: QtCore.Qt.Axis, distanceToPlane: float) -> 'QTransform': ... - @typing.overload - def rotate(self, angle: float, axis: QtCore.Qt.Axis = ...) -> 'QTransform': ... - @typing.overload - def rotate(self, a: float, axis: QtCore.Qt.Axis, distanceToPlane: float) -> 'QTransform': ... - def shear(self, sh: float, sv: float) -> 'QTransform': ... - def scale(self, sx: float, sy: float) -> 'QTransform': ... - def translate(self, dx: float, dy: float) -> 'QTransform': ... - def transposed(self) -> 'QTransform': ... - def adjoint(self) -> 'QTransform': ... - def inverted(self) -> typing.Tuple['QTransform', typing.Optional[bool]]: ... - def setMatrix(self, m11: float, m12: float, m13: float, m21: float, m22: float, m23: float, m31: float, m32: float, m33: float) -> None: ... - def type(self) -> 'QTransform.TransformationType': ... - - -class QUndoGroup(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - undoTextChanged: typing.ClassVar[QtCore.pyqtSignal] - redoTextChanged: typing.ClassVar[QtCore.pyqtSignal] - indexChanged: typing.ClassVar[QtCore.pyqtSignal] - cleanChanged: typing.ClassVar[QtCore.pyqtSignal] - canUndoChanged: typing.ClassVar[QtCore.pyqtSignal] - canRedoChanged: typing.ClassVar[QtCore.pyqtSignal] - activeStackChanged: typing.ClassVar[QtCore.pyqtSignal] - def undo(self) -> None: ... - def setActiveStack(self, stack: typing.Optional['QUndoStack']) -> None: ... - def redo(self) -> None: ... - def isClean(self) -> bool: ... - def redoText(self) -> str: ... - def undoText(self) -> str: ... - def canRedo(self) -> bool: ... - def canUndo(self) -> bool: ... - def createUndoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... - def createRedoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... - def activeStack(self) -> typing.Optional['QUndoStack']: ... - def stacks(self) -> typing.List['QUndoStack']: ... - def removeStack(self, stack: typing.Optional['QUndoStack']) -> None: ... - def addStack(self, stack: typing.Optional['QUndoStack']) -> None: ... - - -class QUndoCommand(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self, parent: typing.Optional['QUndoCommand'] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional['QUndoCommand'] = ...) -> None: ... - - def setObsolete(self, obsolete: bool) -> None: ... - def isObsolete(self) -> bool: ... - def actionText(self) -> str: ... - def child(self, index: int) -> typing.Optional['QUndoCommand']: ... - def childCount(self) -> int: ... - def undo(self) -> None: ... - def text(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def redo(self) -> None: ... - def mergeWith(self, other: typing.Optional['QUndoCommand']) -> bool: ... - def id(self) -> int: ... - - -class QUndoStack(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def command(self, index: int) -> typing.Optional[QUndoCommand]: ... - def undoLimit(self) -> int: ... - def setUndoLimit(self, limit: int) -> None: ... - undoTextChanged: typing.ClassVar[QtCore.pyqtSignal] - redoTextChanged: typing.ClassVar[QtCore.pyqtSignal] - indexChanged: typing.ClassVar[QtCore.pyqtSignal] - cleanChanged: typing.ClassVar[QtCore.pyqtSignal] - canUndoChanged: typing.ClassVar[QtCore.pyqtSignal] - canRedoChanged: typing.ClassVar[QtCore.pyqtSignal] - def resetClean(self) -> None: ... - def undo(self) -> None: ... - def setIndex(self, idx: int) -> None: ... - def setClean(self) -> None: ... - def setActive(self, active: bool = ...) -> None: ... - def redo(self) -> None: ... - def endMacro(self) -> None: ... - def beginMacro(self, text: typing.Optional[str]) -> None: ... - def cleanIndex(self) -> int: ... - def isClean(self) -> bool: ... - def isActive(self) -> bool: ... - def createRedoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... - def createUndoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... - def text(self, idx: int) -> str: ... - def index(self) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def redoText(self) -> str: ... - def undoText(self) -> str: ... - def canRedo(self) -> bool: ... - def canUndo(self) -> bool: ... - def push(self, cmd: typing.Optional[QUndoCommand]) -> None: ... - def clear(self) -> None: ... - - -class QValidator(QtCore.QObject): - - class State(enum.Enum): - Invalid = ... # type: QValidator.State - Intermediate = ... # type: QValidator.State - Acceptable = ... # type: QValidator.State - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - changed: typing.ClassVar[QtCore.pyqtSignal] - def locale(self) -> QtCore.QLocale: ... - def setLocale(self, locale: QtCore.QLocale) -> None: ... - def fixup(self, a0: typing.Optional[str]) -> str: ... - def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple['QValidator.State', str, int]: ... - - -class QIntValidator(QValidator): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, bottom: int, top: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def top(self) -> int: ... - def bottom(self) -> int: ... - def setRange(self, bottom: int, top: int) -> None: ... - def setTop(self, a0: int) -> None: ... - def setBottom(self, a0: int) -> None: ... - def fixup(self, input: typing.Optional[str]) -> str: ... - def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple[QValidator.State, str, int]: ... - - -class QDoubleValidator(QValidator): - - class Notation(enum.Enum): - StandardNotation = ... # type: QDoubleValidator.Notation - ScientificNotation = ... # type: QDoubleValidator.Notation - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, bottom: float, top: float, decimals: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def fixup(self, input: typing.Optional[str]) -> None: ... - def notation(self) -> 'QDoubleValidator.Notation': ... - def setNotation(self, a0: 'QDoubleValidator.Notation') -> None: ... - def decimals(self) -> int: ... - def top(self) -> float: ... - def bottom(self) -> float: ... - def setDecimals(self, a0: int) -> None: ... - def setTop(self, a0: float) -> None: ... - def setBottom(self, a0: float) -> None: ... - def setRange(self, bottom: float, top: float, decimals: int = ...) -> None: ... - def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple[QValidator.State, str, int]: ... - - -class QRegularExpressionValidator(QValidator): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, re: QtCore.QRegularExpression, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setRegularExpression(self, re: QtCore.QRegularExpression) -> None: ... - def regularExpression(self) -> QtCore.QRegularExpression: ... - def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QValidator.State, str, int]: ... - - -class QVector2D(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, xpos: float, ypos: float) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPoint) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, vector: 'QVector3D') -> None: ... - @typing.overload - def __init__(self, vector: 'QVector4D') -> None: ... - @typing.overload - def __init__(self, a0: 'QVector2D') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @typing.overload - def __truediv__(self, divisor: 'QVector2D') -> 'QVector2D': ... - @typing.overload - def __truediv__(self, divisor: float) -> 'QVector2D': ... - def __add__(self, v2: 'QVector2D') -> 'QVector2D': ... - def __sub__(self, v2: 'QVector2D') -> 'QVector2D': ... - @typing.overload - def __mul__(self, v2: 'QVector2D') -> 'QVector2D': ... - @typing.overload - def __mul__(self, factor: float) -> 'QVector2D': ... - def __rmul__(self, factor: float) -> 'QVector2D': ... - def __neg__(self) -> 'QVector2D': ... - def toPointF(self) -> QtCore.QPointF: ... - def toPoint(self) -> QtCore.QPoint: ... - def toVector4D(self) -> 'QVector4D': ... - def toVector3D(self) -> 'QVector3D': ... - @staticmethod - def dotProduct(v1: 'QVector2D', v2: 'QVector2D') -> float: ... - @typing.overload - def __itruediv__(self, divisor: float) -> 'QVector2D': ... - @typing.overload - def __itruediv__(self, vector: 'QVector2D') -> 'QVector2D': ... - @typing.overload - def __imul__(self, factor: float) -> 'QVector2D': ... - @typing.overload - def __imul__(self, vector: 'QVector2D') -> 'QVector2D': ... - def __isub__(self, vector: 'QVector2D') -> 'QVector2D': ... - def __iadd__(self, vector: 'QVector2D') -> 'QVector2D': ... - def distanceToLine(self, point: 'QVector2D', direction: 'QVector2D') -> float: ... - def distanceToPoint(self, point: 'QVector2D') -> float: ... - def normalize(self) -> None: ... - def normalized(self) -> 'QVector2D': ... - def lengthSquared(self) -> float: ... - def length(self) -> float: ... - def __getitem__(self, i: int) -> float: ... - def setY(self, y: float) -> None: ... - def setX(self, x: float) -> None: ... - def y(self) -> float: ... - def x(self) -> float: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - - -class QVector3D(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, xpos: float, ypos: float, zpos: float) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPoint) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, vector: QVector2D, zpos: float) -> None: ... - @typing.overload - def __init__(self, vector: QVector2D) -> None: ... - @typing.overload - def __init__(self, vector: 'QVector4D') -> None: ... - @typing.overload - def __init__(self, a0: 'QVector3D') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @typing.overload - def __truediv__(self, divisor: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def __truediv__(self, divisor: float) -> 'QVector3D': ... - def __add__(self, v2: 'QVector3D') -> 'QVector3D': ... - def __sub__(self, v2: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def __mul__(self, matrix: QMatrix4x4) -> 'QVector3D': ... - @typing.overload - def __mul__(self, v2: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def __mul__(self, factor: float) -> 'QVector3D': ... - def __rmul__(self, factor: float) -> 'QVector3D': ... - def __neg__(self) -> 'QVector3D': ... - def toPointF(self) -> QtCore.QPointF: ... - def toPoint(self) -> QtCore.QPoint: ... - def toVector4D(self) -> 'QVector4D': ... - def toVector2D(self) -> QVector2D: ... - def distanceToLine(self, point: 'QVector3D', direction: 'QVector3D') -> float: ... - @typing.overload - def distanceToPlane(self, plane: 'QVector3D', normal: 'QVector3D') -> float: ... - @typing.overload - def distanceToPlane(self, plane1: 'QVector3D', plane2: 'QVector3D', plane3: 'QVector3D') -> float: ... - def distanceToPoint(self, point: 'QVector3D') -> float: ... - def unproject(self, modelView: QMatrix4x4, projection: QMatrix4x4, viewport: QtCore.QRect) -> 'QVector3D': ... - def project(self, modelView: QMatrix4x4, projection: QMatrix4x4, viewport: QtCore.QRect) -> 'QVector3D': ... - @typing.overload - @staticmethod - def normal(v1: 'QVector3D', v2: 'QVector3D') -> 'QVector3D': ... - @typing.overload - @staticmethod - def normal(v1: 'QVector3D', v2: 'QVector3D', v3: 'QVector3D') -> 'QVector3D': ... - @staticmethod - def crossProduct(v1: 'QVector3D', v2: 'QVector3D') -> 'QVector3D': ... - @staticmethod - def dotProduct(v1: 'QVector3D', v2: 'QVector3D') -> float: ... - @typing.overload - def __itruediv__(self, divisor: float) -> 'QVector3D': ... - @typing.overload - def __itruediv__(self, vector: 'QVector3D') -> 'QVector3D': ... - @typing.overload - def __imul__(self, factor: float) -> 'QVector3D': ... - @typing.overload - def __imul__(self, vector: 'QVector3D') -> 'QVector3D': ... - def __isub__(self, vector: 'QVector3D') -> 'QVector3D': ... - def __iadd__(self, vector: 'QVector3D') -> 'QVector3D': ... - def normalize(self) -> None: ... - def normalized(self) -> 'QVector3D': ... - def lengthSquared(self) -> float: ... - def length(self) -> float: ... - def __getitem__(self, i: int) -> float: ... - def setZ(self, z: float) -> None: ... - def setY(self, y: float) -> None: ... - def setX(self, x: float) -> None: ... - def z(self) -> float: ... - def y(self) -> float: ... - def x(self) -> float: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - - -class QVector4D(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, xpos: float, ypos: float, zpos: float, wpos: float) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPoint) -> None: ... - @typing.overload - def __init__(self, point: QtCore.QPointF) -> None: ... - @typing.overload - def __init__(self, vector: QVector2D) -> None: ... - @typing.overload - def __init__(self, vector: QVector2D, zpos: float, wpos: float) -> None: ... - @typing.overload - def __init__(self, vector: QVector3D) -> None: ... - @typing.overload - def __init__(self, vector: QVector3D, wpos: float) -> None: ... - @typing.overload - def __init__(self, a0: 'QVector4D') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @typing.overload - def __truediv__(self, divisor: 'QVector4D') -> 'QVector4D': ... - @typing.overload - def __truediv__(self, divisor: float) -> 'QVector4D': ... - def __add__(self, v2: 'QVector4D') -> 'QVector4D': ... - def __sub__(self, v2: 'QVector4D') -> 'QVector4D': ... - @typing.overload - def __mul__(self, matrix: QMatrix4x4) -> 'QVector4D': ... - @typing.overload - def __mul__(self, v2: 'QVector4D') -> 'QVector4D': ... - @typing.overload - def __mul__(self, factor: float) -> 'QVector4D': ... - def __rmul__(self, factor: float) -> 'QVector4D': ... - def __neg__(self) -> 'QVector4D': ... - def toPointF(self) -> QtCore.QPointF: ... - def toPoint(self) -> QtCore.QPoint: ... - def toVector3DAffine(self) -> QVector3D: ... - def toVector3D(self) -> QVector3D: ... - def toVector2DAffine(self) -> QVector2D: ... - def toVector2D(self) -> QVector2D: ... - @staticmethod - def dotProduct(v1: 'QVector4D', v2: 'QVector4D') -> float: ... - @typing.overload - def __itruediv__(self, divisor: float) -> 'QVector4D': ... - @typing.overload - def __itruediv__(self, vector: 'QVector4D') -> 'QVector4D': ... - @typing.overload - def __imul__(self, factor: float) -> 'QVector4D': ... - @typing.overload - def __imul__(self, vector: 'QVector4D') -> 'QVector4D': ... - def __isub__(self, vector: 'QVector4D') -> 'QVector4D': ... - def __iadd__(self, vector: 'QVector4D') -> 'QVector4D': ... - def normalize(self) -> None: ... - def normalized(self) -> 'QVector4D': ... - def lengthSquared(self) -> float: ... - def length(self) -> float: ... - def __getitem__(self, i: int) -> float: ... - def setW(self, w: float) -> None: ... - def setZ(self, z: float) -> None: ... - def setY(self, y: float) -> None: ... - def setX(self, x: float) -> None: ... - def w(self) -> float: ... - def z(self) -> float: ... - def y(self) -> float: ... - def x(self) -> float: ... - def isNull(self) -> bool: ... - def __repr__(self) -> str: ... - - -@typing.overload -def qGray(r: int, g: int, b: int) -> int: ... -@typing.overload -def qGray(rgb: int) -> int: ... -def qRgba(r: int, g: int, b: int, a: int) -> int: ... -def qRgb(r: int, g: int, b: int) -> int: ... -@typing.overload -def qAlpha(rgb: QRgba64) -> int: ... -@typing.overload -def qAlpha(rgb: int) -> int: ... -@typing.overload -def qBlue(rgb: QRgba64) -> int: ... -@typing.overload -def qBlue(rgb: int) -> int: ... -@typing.overload -def qGreen(rgb: QRgba64) -> int: ... -@typing.overload -def qGreen(rgb: int) -> int: ... -@typing.overload -def qRed(rgb: QRgba64) -> int: ... -@typing.overload -def qRed(rgb: int) -> int: ... -@typing.overload -def qUnpremultiply(c: QRgba64) -> QRgba64: ... -@typing.overload -def qUnpremultiply(p: int) -> int: ... -@typing.overload -def qPremultiply(c: QRgba64) -> QRgba64: ... -@typing.overload -def qPremultiply(x: int) -> int: ... -@typing.overload -def qRgba64(r: int, g: int, b: int, a: int) -> QRgba64: ... -@typing.overload -def qRgba64(c: int) -> QRgba64: ... -def qPixelFormatAlpha(channelSize: int, typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -def qPixelFormatYuv(layout: QPixelFormat.YUVLayout, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., premultiplied: QPixelFormat.AlphaPremultiplied = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ..., byteOrder: QPixelFormat.ByteOrder = ...) -> QPixelFormat: ... -def qPixelFormatHsv(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -def qPixelFormatHsl(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -def qPixelFormatCmyk(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -def qPixelFormatGrayscale(channelSize: int, typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -def qPixelFormatRgba(red: int, green: int, blue: int, alfa: int, usage: QPixelFormat.AlphaUsage, position: QPixelFormat.AlphaPosition, premultiplied: QPixelFormat.AlphaPremultiplied = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... -@typing.overload -def qFuzzyCompare(m1: QMatrix4x4, m2: QMatrix4x4) -> bool: ... -@typing.overload -def qFuzzyCompare(q1: QQuaternion, q2: QQuaternion) -> bool: ... -@typing.overload -def qFuzzyCompare(t1: QTransform, t2: QTransform) -> bool: ... -@typing.overload -def qFuzzyCompare(v1: QVector4D, v2: QVector4D) -> bool: ... -@typing.overload -def qFuzzyCompare(v1: QVector3D, v2: QVector3D) -> bool: ... -@typing.overload -def qFuzzyCompare(v1: QVector2D, v2: QVector2D) -> bool: ... -def qt_set_sequence_auto_mnemonic(b: bool) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.abi3.so deleted file mode 100644 index 1f1ab63..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.pyi deleted file mode 100644 index dcdb1f9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtHelp.pyi +++ /dev/null @@ -1,283 +0,0 @@ -# The PEP 484 type hints stub file for the QtHelp module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QCompressedHelpInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCompressedHelpInfo') -> None: ... - - def isNull(self) -> bool: ... - @staticmethod - def fromCompressedHelpFile(documentationFileName: typing.Optional[str]) -> 'QCompressedHelpInfo': ... - def version(self) -> QtCore.QVersionNumber: ... - def component(self) -> str: ... - def namespaceName(self) -> str: ... - def swap(self, other: 'QCompressedHelpInfo') -> None: ... - - -class QHelpContentItem(PyQt6.sip.simplewrapper): - - def childPosition(self, child: typing.Optional['QHelpContentItem']) -> int: ... - def parent(self) -> typing.Optional['QHelpContentItem']: ... - def row(self) -> int: ... - def url(self) -> QtCore.QUrl: ... - def title(self) -> str: ... - def childCount(self) -> int: ... - def child(self, row: int) -> typing.Optional['QHelpContentItem']: ... - - -class QHelpContentModel(QtCore.QAbstractItemModel): - - contentsCreated: typing.ClassVar[QtCore.pyqtSignal] - contentsCreationStarted: typing.ClassVar[QtCore.pyqtSignal] - def isCreatingContents(self) -> bool: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def parent(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... - def data(self, index: QtCore.QModelIndex, role: int) -> typing.Any: ... - def contentItemAt(self, index: QtCore.QModelIndex) -> typing.Optional[QHelpContentItem]: ... - def createContents(self, customFilterName: typing.Optional[str]) -> None: ... - - -class QHelpContentWidget(QtWidgets.QTreeView): - - linkActivated: typing.ClassVar[QtCore.pyqtSignal] - def indexOf(self, link: QtCore.QUrl) -> QtCore.QModelIndex: ... - - -class QHelpEngineCore(QtCore.QObject): - - def __init__(self, collectionFile: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setReadOnly(self, enable: bool) -> None: ... - def isReadOnly(self) -> bool: ... - @typing.overload - def documentsForKeyword(self, keyword: typing.Optional[str]) -> typing.List['QHelpLink']: ... - @typing.overload - def documentsForKeyword(self, keyword: typing.Optional[str], filterName: typing.Optional[str]) -> typing.List['QHelpLink']: ... - @typing.overload - def documentsForIdentifier(self, id: typing.Optional[str]) -> typing.List['QHelpLink']: ... - @typing.overload - def documentsForIdentifier(self, id: typing.Optional[str], filterName: typing.Optional[str]) -> typing.List['QHelpLink']: ... - def usesFilterEngine(self) -> bool: ... - def setUsesFilterEngine(self, uses: bool) -> None: ... - def files(self, namespaceName: typing.Optional[str], filterName: typing.Optional[str], extensionFilter: typing.Optional[str] = ...) -> typing.List[QtCore.QUrl]: ... - def filterEngine(self) -> typing.Optional['QHelpFilterEngine']: ... - warning: typing.ClassVar[QtCore.pyqtSignal] - setupFinished: typing.ClassVar[QtCore.pyqtSignal] - setupStarted: typing.ClassVar[QtCore.pyqtSignal] - def setAutoSaveFilter(self, save: bool) -> None: ... - def autoSaveFilter(self) -> bool: ... - def error(self) -> str: ... - @staticmethod - def metaData(documentationFileName: typing.Optional[str], name: typing.Optional[str]) -> typing.Any: ... - def setCustomValue(self, key: typing.Optional[str], value: typing.Any) -> bool: ... - def customValue(self, key: typing.Optional[str], defaultValue: typing.Any = ...) -> typing.Any: ... - def removeCustomValue(self, key: typing.Optional[str]) -> bool: ... - def fileData(self, url: QtCore.QUrl) -> QtCore.QByteArray: ... - def findFile(self, url: QtCore.QUrl) -> QtCore.QUrl: ... - def registeredDocumentations(self) -> typing.List[str]: ... - def documentationFileName(self, namespaceName: typing.Optional[str]) -> str: ... - def unregisterDocumentation(self, namespaceName: typing.Optional[str]) -> bool: ... - def registerDocumentation(self, documentationFileName: typing.Optional[str]) -> bool: ... - @staticmethod - def namespaceName(documentationFileName: typing.Optional[str]) -> str: ... - def copyCollectionFile(self, fileName: typing.Optional[str]) -> bool: ... - def setCollectionFile(self, fileName: typing.Optional[str]) -> None: ... - def collectionFile(self) -> str: ... - def setupData(self) -> bool: ... - - -class QHelpEngine(QHelpEngineCore): - - def __init__(self, collectionFile: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def searchEngine(self) -> typing.Optional['QHelpSearchEngine']: ... - def indexWidget(self) -> typing.Optional['QHelpIndexWidget']: ... - def contentWidget(self) -> typing.Optional[QHelpContentWidget]: ... - def indexModel(self) -> typing.Optional['QHelpIndexModel']: ... - def contentModel(self) -> typing.Optional[QHelpContentModel]: ... - - -class QHelpFilterData(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHelpFilterData') -> None: ... - - def __ne__(self, other: object): ... - def versions(self) -> typing.List[QtCore.QVersionNumber]: ... - def components(self) -> typing.List[str]: ... - def setVersions(self, versions: typing.Iterable[QtCore.QVersionNumber]) -> None: ... - def setComponents(self, components: typing.Iterable[typing.Optional[str]]) -> None: ... - def swap(self, other: 'QHelpFilterData') -> None: ... - def __eq__(self, other: object): ... - - -class QHelpFilterEngine(QtCore.QObject): - - @typing.overload - def indices(self) -> typing.List[str]: ... - @typing.overload - def indices(self, filterName: typing.Optional[str]) -> typing.List[str]: ... - def availableVersions(self) -> typing.List[QtCore.QVersionNumber]: ... - filterActivated: typing.ClassVar[QtCore.pyqtSignal] - def namespacesForFilter(self, filterName: typing.Optional[str]) -> typing.List[str]: ... - def removeFilter(self, filterName: typing.Optional[str]) -> bool: ... - def setFilterData(self, filterName: typing.Optional[str], filterData: QHelpFilterData) -> bool: ... - def filterData(self, filterName: typing.Optional[str]) -> QHelpFilterData: ... - def availableComponents(self) -> typing.List[str]: ... - def setActiveFilter(self, filterName: typing.Optional[str]) -> bool: ... - def activeFilter(self) -> str: ... - def filters(self) -> typing.List[str]: ... - def namespaceToVersion(self) -> typing.Dict[str, QtCore.QVersionNumber]: ... - def namespaceToComponent(self) -> typing.Dict[str, str]: ... - - -class QHelpFilterSettingsWidget(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def applySettings(self, filterEngine: typing.Optional[QHelpFilterEngine]) -> bool: ... - def readSettings(self, filterEngine: typing.Optional[QHelpFilterEngine]) -> None: ... - def setAvailableVersions(self, versions: typing.Iterable[QtCore.QVersionNumber]) -> None: ... - def setAvailableComponents(self, components: typing.Iterable[typing.Optional[str]]) -> None: ... - - -class QHelpIndexModel(QtCore.QStringListModel): - - indexCreated: typing.ClassVar[QtCore.pyqtSignal] - indexCreationStarted: typing.ClassVar[QtCore.pyqtSignal] - def isCreatingIndex(self) -> bool: ... - def filter(self, filter: typing.Optional[str], wildcard: typing.Optional[str] = ...) -> QtCore.QModelIndex: ... - def createIndex(self, customFilterName: typing.Optional[str]) -> None: ... - def helpEngine(self) -> typing.Optional[QHelpEngineCore]: ... - - -class QHelpIndexWidget(QtWidgets.QListView): - - documentsActivated: typing.ClassVar[QtCore.pyqtSignal] - documentActivated: typing.ClassVar[QtCore.pyqtSignal] - def activateCurrentItem(self) -> None: ... - def filterIndices(self, filter: typing.Optional[str], wildcard: typing.Optional[str] = ...) -> None: ... - - -class QHelpLink(PyQt6.sip.simplewrapper): - - title = ... # type: typing.Optional[str] - url = ... # type: QtCore.QUrl - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QHelpLink') -> None: ... - - -class QHelpSearchQuery(PyQt6.sip.simplewrapper): - - class FieldName(enum.Enum): - DEFAULT = ... # type: QHelpSearchQuery.FieldName - FUZZY = ... # type: QHelpSearchQuery.FieldName - WITHOUT = ... # type: QHelpSearchQuery.FieldName - PHRASE = ... # type: QHelpSearchQuery.FieldName - ALL = ... # type: QHelpSearchQuery.FieldName - ATLEAST = ... # type: QHelpSearchQuery.FieldName - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, field: 'QHelpSearchQuery.FieldName', wordList: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def __init__(self, a0: 'QHelpSearchQuery') -> None: ... - - -class QHelpSearchEngine(QtCore.QObject): - - def __init__(self, helpEngine: typing.Optional[QHelpEngineCore], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def search(self, searchInput: typing.Optional[str]) -> None: ... - def searchInput(self) -> str: ... - def searchResults(self, start: int, end: int) -> typing.List['QHelpSearchResult']: ... - def searchResultCount(self) -> int: ... - searchingFinished: typing.ClassVar[QtCore.pyqtSignal] - searchingStarted: typing.ClassVar[QtCore.pyqtSignal] - indexingFinished: typing.ClassVar[QtCore.pyqtSignal] - indexingStarted: typing.ClassVar[QtCore.pyqtSignal] - def cancelSearching(self) -> None: ... - def cancelIndexing(self) -> None: ... - def reindexDocumentation(self) -> None: ... - def resultWidget(self) -> typing.Optional['QHelpSearchResultWidget']: ... - def queryWidget(self) -> typing.Optional['QHelpSearchQueryWidget']: ... - - -class QHelpSearchResult(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHelpSearchResult') -> None: ... - @typing.overload - def __init__(self, url: QtCore.QUrl, title: typing.Optional[str], snippet: typing.Optional[str]) -> None: ... - - def snippet(self) -> str: ... - def url(self) -> QtCore.QUrl: ... - def title(self) -> str: ... - - -class QHelpSearchQueryWidget(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def setSearchInput(self, searchInput: typing.Optional[str]) -> None: ... - def searchInput(self) -> str: ... - def setCompactMode(self, on: bool) -> None: ... - def isCompactMode(self) -> bool: ... - search: typing.ClassVar[QtCore.pyqtSignal] - def collapseExtendedSearch(self) -> None: ... - def expandExtendedSearch(self) -> None: ... - - -class QHelpSearchResultWidget(QtWidgets.QWidget): - - requestShowLink: typing.ClassVar[QtCore.pyqtSignal] - def linkAt(self, point: QtCore.QPoint) -> QtCore.QUrl: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.abi3.so deleted file mode 100644 index 26b1316..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.pyi deleted file mode 100644 index fc29106..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimedia.pyi +++ /dev/null @@ -1,1320 +0,0 @@ -# The PEP 484 type hints stub file for the QtMultimedia module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QtVideo(PyQt6.sip.simplewrapper): - - class Rotation(enum.Enum): - None_ = ... # type: QtVideo.Rotation - Clockwise90 = ... # type: QtVideo.Rotation - Clockwise180 = ... # type: QtVideo.Rotation - Clockwise270 = ... # type: QtVideo.Rotation - - -class QAudio(PyQt6.sip.simplewrapper): - - class VolumeScale(enum.Enum): - LinearVolumeScale = ... # type: QAudio.VolumeScale - CubicVolumeScale = ... # type: QAudio.VolumeScale - LogarithmicVolumeScale = ... # type: QAudio.VolumeScale - DecibelVolumeScale = ... # type: QAudio.VolumeScale - - class State(enum.Enum): - ActiveState = ... # type: QAudio.State - SuspendedState = ... # type: QAudio.State - StoppedState = ... # type: QAudio.State - IdleState = ... # type: QAudio.State - - class Error(enum.Enum): - NoError = ... # type: QAudio.Error - OpenError = ... # type: QAudio.Error - IOError = ... # type: QAudio.Error - UnderrunError = ... # type: QAudio.Error - FatalError = ... # type: QAudio.Error - - def convertVolume(self, volume: float, from_: 'QAudio.VolumeScale', to: 'QAudio.VolumeScale') -> float: ... - - -class QAudioBuffer(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], format: 'QAudioFormat', startTime: int = ...) -> None: ... - @typing.overload - def __init__(self, numFrames: int, format: 'QAudioFormat', startTime: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QAudioBuffer') -> None: ... - - def data(self) -> PyQt6.sip.voidptr: ... - def constData(self) -> PyQt6.sip.voidptr: ... - def detach(self) -> None: ... - def swap(self, other: 'QAudioBuffer') -> None: ... - def startTime(self) -> int: ... - def duration(self) -> int: ... - def byteCount(self) -> int: ... - def sampleCount(self) -> int: ... - def frameCount(self) -> int: ... - def format(self) -> 'QAudioFormat': ... - def isValid(self) -> bool: ... - - -class QAudioDecoder(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QAudioDecoder.Error - ResourceError = ... # type: QAudioDecoder.Error - FormatError = ... # type: QAudioDecoder.Error - AccessDeniedError = ... # type: QAudioDecoder.Error - NotSupportedError = ... # type: QAudioDecoder.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - formatChanged: typing.ClassVar[QtCore.pyqtSignal] - durationChanged: typing.ClassVar[QtCore.pyqtSignal] - positionChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - isDecodingChanged: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - bufferReady: typing.ClassVar[QtCore.pyqtSignal] - bufferAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def start(self) -> None: ... - def setAudioFormat(self, format: 'QAudioFormat') -> None: ... - def audioFormat(self) -> 'QAudioFormat': ... - def duration(self) -> int: ... - def position(self) -> int: ... - def bufferAvailable(self) -> bool: ... - def read(self) -> QAudioBuffer: ... - def errorString(self) -> str: ... - error: typing.ClassVar[QtCore.pyqtSignal] - def setSourceDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def sourceDevice(self) -> typing.Optional[QtCore.QIODevice]: ... - def setSource(self, fileName: QtCore.QUrl) -> None: ... - def source(self) -> QtCore.QUrl: ... - def isDecoding(self) -> bool: ... - def isSupported(self) -> bool: ... - - -class QAudioDevice(PyQt6.sip.simplewrapper): - - class Mode(enum.Enum): - Null = ... # type: QAudioDevice.Mode - Input = ... # type: QAudioDevice.Mode - Output = ... # type: QAudioDevice.Mode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QAudioDevice') -> None: ... - - def channelConfiguration(self) -> 'QAudioFormat.ChannelConfig': ... - def supportedSampleFormats(self) -> typing.List['QAudioFormat.SampleFormat']: ... - def maximumChannelCount(self) -> int: ... - def minimumChannelCount(self) -> int: ... - def maximumSampleRate(self) -> int: ... - def minimumSampleRate(self) -> int: ... - def preferredFormat(self) -> 'QAudioFormat': ... - def isFormatSupported(self, format: 'QAudioFormat') -> bool: ... - def mode(self) -> 'QAudioDevice.Mode': ... - def isDefault(self) -> bool: ... - def description(self) -> str: ... - def id(self) -> QtCore.QByteArray: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def swap(self, other: 'QAudioDevice') -> None: ... - - -class QAudioFormat(PyQt6.sip.simplewrapper): - - class SampleFormat(enum.Enum): - Unknown = ... # type: QAudioFormat.SampleFormat - UInt8 = ... # type: QAudioFormat.SampleFormat - Int16 = ... # type: QAudioFormat.SampleFormat - Int32 = ... # type: QAudioFormat.SampleFormat - Float = ... # type: QAudioFormat.SampleFormat - - class ChannelConfig(enum.Enum): - ChannelConfigUnknown = ... # type: QAudioFormat.ChannelConfig - ChannelConfigMono = ... # type: QAudioFormat.ChannelConfig - ChannelConfigStereo = ... # type: QAudioFormat.ChannelConfig - ChannelConfig2Dot1 = ... # type: QAudioFormat.ChannelConfig - ChannelConfigSurround5Dot0 = ... # type: QAudioFormat.ChannelConfig - ChannelConfigSurround5Dot1 = ... # type: QAudioFormat.ChannelConfig - ChannelConfigSurround7Dot0 = ... # type: QAudioFormat.ChannelConfig - ChannelConfigSurround7Dot1 = ... # type: QAudioFormat.ChannelConfig - ChannelConfig3Dot0 = ... # type: QAudioFormat.ChannelConfig - ChannelConfig3Dot1 = ... # type: QAudioFormat.ChannelConfig - - class AudioChannelPosition(enum.Enum): - UnknownPosition = ... # type: QAudioFormat.AudioChannelPosition - FrontLeft = ... # type: QAudioFormat.AudioChannelPosition - FrontRight = ... # type: QAudioFormat.AudioChannelPosition - FrontCenter = ... # type: QAudioFormat.AudioChannelPosition - LFE = ... # type: QAudioFormat.AudioChannelPosition - BackLeft = ... # type: QAudioFormat.AudioChannelPosition - BackRight = ... # type: QAudioFormat.AudioChannelPosition - FrontLeftOfCenter = ... # type: QAudioFormat.AudioChannelPosition - FrontRightOfCenter = ... # type: QAudioFormat.AudioChannelPosition - BackCenter = ... # type: QAudioFormat.AudioChannelPosition - LFE2 = ... # type: QAudioFormat.AudioChannelPosition - SideLeft = ... # type: QAudioFormat.AudioChannelPosition - SideRight = ... # type: QAudioFormat.AudioChannelPosition - TopFrontLeft = ... # type: QAudioFormat.AudioChannelPosition - TopFrontRight = ... # type: QAudioFormat.AudioChannelPosition - TopFrontCenter = ... # type: QAudioFormat.AudioChannelPosition - TopCenter = ... # type: QAudioFormat.AudioChannelPosition - TopBackLeft = ... # type: QAudioFormat.AudioChannelPosition - TopBackRight = ... # type: QAudioFormat.AudioChannelPosition - TopSideLeft = ... # type: QAudioFormat.AudioChannelPosition - TopSideRight = ... # type: QAudioFormat.AudioChannelPosition - TopBackCenter = ... # type: QAudioFormat.AudioChannelPosition - BottomFrontCenter = ... # type: QAudioFormat.AudioChannelPosition - BottomFrontLeft = ... # type: QAudioFormat.AudioChannelPosition - BottomFrontRight = ... # type: QAudioFormat.AudioChannelPosition - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAudioFormat') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @staticmethod - def defaultChannelConfigForChannelCount(channelCount: int) -> 'QAudioFormat.ChannelConfig': ... - def normalizedSampleValue(self, sample: typing.Optional[PyQt6.sip.voidptr]) -> float: ... - def bytesPerSample(self) -> int: ... - def sampleFormat(self) -> 'QAudioFormat.SampleFormat': ... - def setSampleFormat(self, f: 'QAudioFormat.SampleFormat') -> None: ... - def channelOffset(self, channel: 'QAudioFormat.AudioChannelPosition') -> int: ... - def channelConfig(self) -> 'QAudioFormat.ChannelConfig': ... - def setChannelConfig(self, config: 'QAudioFormat.ChannelConfig') -> None: ... - def bytesPerFrame(self) -> int: ... - def durationForFrames(self, frameCount: int) -> int: ... - def framesForDuration(self, duration: int) -> int: ... - def framesForBytes(self, byteCount: int) -> int: ... - def bytesForFrames(self, frameCount: int) -> int: ... - def durationForBytes(self, byteCount: int) -> int: ... - def bytesForDuration(self, duration: int) -> int: ... - def channelCount(self) -> int: ... - def setChannelCount(self, channelCount: int) -> None: ... - def sampleRate(self) -> int: ... - def setSampleRate(self, sampleRate: int) -> None: ... - def isValid(self) -> bool: ... - - -class QAudioInput(QtCore.QObject): - - @typing.overload - def __init__(self, deviceInfo: QAudioDevice, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - mutedChanged: typing.ClassVar[QtCore.pyqtSignal] - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - deviceChanged: typing.ClassVar[QtCore.pyqtSignal] - def setVolume(self, volume: float) -> None: ... - def setMuted(self, muted: bool) -> None: ... - def setDevice(self, device: QAudioDevice) -> None: ... - def isMuted(self) -> bool: ... - def volume(self) -> float: ... - def device(self) -> QAudioDevice: ... - - -class QAudioOutput(QtCore.QObject): - - @typing.overload - def __init__(self, device: QAudioDevice, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - mutedChanged: typing.ClassVar[QtCore.pyqtSignal] - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - deviceChanged: typing.ClassVar[QtCore.pyqtSignal] - def setMuted(self, muted: bool) -> None: ... - def setVolume(self, volume: float) -> None: ... - def setDevice(self, device: QAudioDevice) -> None: ... - def isMuted(self) -> bool: ... - def device(self) -> QAudioDevice: ... - def volume(self) -> float: ... - - -class QAudioSink(QtCore.QObject): - - @typing.overload - def __init__(self, audioDeviceInfo: QAudioDevice, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def volume(self) -> float: ... - def setVolume(self, a0: float) -> None: ... - def state(self) -> QAudio.State: ... - def error(self) -> QAudio.Error: ... - def elapsedUSecs(self) -> int: ... - def processedUSecs(self) -> int: ... - def bytesFree(self) -> int: ... - def bufferSize(self) -> int: ... - def setBufferSize(self, bytes: int) -> None: ... - def resume(self) -> None: ... - def suspend(self) -> None: ... - def reset(self) -> None: ... - def stop(self) -> None: ... - @typing.overload - def start(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - @typing.overload - def start(self) -> typing.Optional[QtCore.QIODevice]: ... - def format(self) -> QAudioFormat: ... - - -class QAudioSource(QtCore.QObject): - - @typing.overload - def __init__(self, audioDeviceInfo: QAudioDevice, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def state(self) -> QAudio.State: ... - def error(self) -> QAudio.Error: ... - def elapsedUSecs(self) -> int: ... - def processedUSecs(self) -> int: ... - def volume(self) -> float: ... - def setVolume(self, volume: float) -> None: ... - def bytesAvailable(self) -> int: ... - def bufferSize(self) -> int: ... - def setBufferSize(self, bytes: int) -> None: ... - def resume(self) -> None: ... - def suspend(self) -> None: ... - def reset(self) -> None: ... - def stop(self) -> None: ... - @typing.overload - def start(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - @typing.overload - def start(self) -> typing.Optional[QtCore.QIODevice]: ... - def format(self) -> QAudioFormat: ... - - -class QCamera(QtCore.QObject): - - class Feature(enum.Enum): - ColorTemperature = ... # type: QCamera.Feature - ExposureCompensation = ... # type: QCamera.Feature - IsoSensitivity = ... # type: QCamera.Feature - ManualExposureTime = ... # type: QCamera.Feature - CustomFocusPoint = ... # type: QCamera.Feature - FocusDistance = ... # type: QCamera.Feature - - class WhiteBalanceMode(enum.Enum): - WhiteBalanceAuto = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceManual = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceSunlight = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceCloudy = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceShade = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceTungsten = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceFluorescent = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceFlash = ... # type: QCamera.WhiteBalanceMode - WhiteBalanceSunset = ... # type: QCamera.WhiteBalanceMode - - class ExposureMode(enum.Enum): - ExposureAuto = ... # type: QCamera.ExposureMode - ExposureManual = ... # type: QCamera.ExposureMode - ExposurePortrait = ... # type: QCamera.ExposureMode - ExposureNight = ... # type: QCamera.ExposureMode - ExposureSports = ... # type: QCamera.ExposureMode - ExposureSnow = ... # type: QCamera.ExposureMode - ExposureBeach = ... # type: QCamera.ExposureMode - ExposureAction = ... # type: QCamera.ExposureMode - ExposureLandscape = ... # type: QCamera.ExposureMode - ExposureNightPortrait = ... # type: QCamera.ExposureMode - ExposureTheatre = ... # type: QCamera.ExposureMode - ExposureSunset = ... # type: QCamera.ExposureMode - ExposureSteadyPhoto = ... # type: QCamera.ExposureMode - ExposureFireworks = ... # type: QCamera.ExposureMode - ExposureParty = ... # type: QCamera.ExposureMode - ExposureCandlelight = ... # type: QCamera.ExposureMode - ExposureBarcode = ... # type: QCamera.ExposureMode - - class TorchMode(enum.Enum): - TorchOff = ... # type: QCamera.TorchMode - TorchOn = ... # type: QCamera.TorchMode - TorchAuto = ... # type: QCamera.TorchMode - - class FlashMode(enum.Enum): - FlashOff = ... # type: QCamera.FlashMode - FlashOn = ... # type: QCamera.FlashMode - FlashAuto = ... # type: QCamera.FlashMode - - class FocusMode(enum.Enum): - FocusModeAuto = ... # type: QCamera.FocusMode - FocusModeAutoNear = ... # type: QCamera.FocusMode - FocusModeAutoFar = ... # type: QCamera.FocusMode - FocusModeHyperfocal = ... # type: QCamera.FocusMode - FocusModeInfinity = ... # type: QCamera.FocusMode - FocusModeManual = ... # type: QCamera.FocusMode - - class Error(enum.Enum): - NoError = ... # type: QCamera.Error - CameraError = ... # type: QCamera.Error - - @typing.overload - def __init__(self, cameraDevice: 'QCameraDevice', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, position: 'QCameraDevice.Position', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - manualIsoSensitivityChanged: typing.ClassVar[QtCore.pyqtSignal] - manualExposureTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - focusPointChanged: typing.ClassVar[QtCore.pyqtSignal] - colorTemperatureChanged: typing.ClassVar[QtCore.pyqtSignal] - whiteBalanceModeChanged: typing.ClassVar[QtCore.pyqtSignal] - exposureModeChanged: typing.ClassVar[QtCore.pyqtSignal] - exposureCompensationChanged: typing.ClassVar[QtCore.pyqtSignal] - isoSensitivityChanged: typing.ClassVar[QtCore.pyqtSignal] - exposureTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - torchModeChanged: typing.ClassVar[QtCore.pyqtSignal] - flashModeChanged: typing.ClassVar[QtCore.pyqtSignal] - flashReady: typing.ClassVar[QtCore.pyqtSignal] - customFocusPointChanged: typing.ClassVar[QtCore.pyqtSignal] - focusDistanceChanged: typing.ClassVar[QtCore.pyqtSignal] - maximumZoomFactorChanged: typing.ClassVar[QtCore.pyqtSignal] - minimumZoomFactorChanged: typing.ClassVar[QtCore.pyqtSignal] - zoomFactorChanged: typing.ClassVar[QtCore.pyqtSignal] - focusModeChanged: typing.ClassVar[QtCore.pyqtSignal] - supportedFeaturesChanged: typing.ClassVar[QtCore.pyqtSignal] - cameraFormatChanged: typing.ClassVar[QtCore.pyqtSignal] - cameraDeviceChanged: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - activeChanged: typing.ClassVar[QtCore.pyqtSignal] - def setColorTemperature(self, colorTemperature: int) -> None: ... - def setWhiteBalanceMode(self, mode: 'QCamera.WhiteBalanceMode') -> None: ... - def setAutoExposureTime(self) -> None: ... - def setManualExposureTime(self, seconds: float) -> None: ... - def setAutoIsoSensitivity(self) -> None: ... - def setManualIsoSensitivity(self, iso: int) -> None: ... - def setExposureCompensation(self, ev: float) -> None: ... - def setExposureMode(self, mode: 'QCamera.ExposureMode') -> None: ... - def setTorchMode(self, mode: 'QCamera.TorchMode') -> None: ... - def setFlashMode(self, mode: 'QCamera.FlashMode') -> None: ... - def zoomTo(self, zoom: float, rate: float) -> None: ... - def stop(self) -> None: ... - def start(self) -> None: ... - def setActive(self, active: bool) -> None: ... - def colorTemperature(self) -> int: ... - def isWhiteBalanceModeSupported(self, mode: 'QCamera.WhiteBalanceMode') -> bool: ... - def whiteBalanceMode(self) -> 'QCamera.WhiteBalanceMode': ... - def maximumExposureTime(self) -> float: ... - def minimumExposureTime(self) -> float: ... - def maximumIsoSensitivity(self) -> int: ... - def minimumIsoSensitivity(self) -> int: ... - def manualExposureTime(self) -> float: ... - def exposureTime(self) -> float: ... - def manualIsoSensitivity(self) -> int: ... - def isoSensitivity(self) -> int: ... - def exposureCompensation(self) -> float: ... - def isExposureModeSupported(self, mode: 'QCamera.ExposureMode') -> bool: ... - def exposureMode(self) -> 'QCamera.ExposureMode': ... - def isTorchModeSupported(self, mode: 'QCamera.TorchMode') -> bool: ... - def torchMode(self) -> 'QCamera.TorchMode': ... - def isFlashReady(self) -> bool: ... - def isFlashModeSupported(self, mode: 'QCamera.FlashMode') -> bool: ... - def flashMode(self) -> 'QCamera.FlashMode': ... - def setZoomFactor(self, factor: float) -> None: ... - def zoomFactor(self) -> float: ... - def maximumZoomFactor(self) -> float: ... - def minimumZoomFactor(self) -> float: ... - def focusDistance(self) -> float: ... - def setFocusDistance(self, d: float) -> None: ... - def setCustomFocusPoint(self, point: QtCore.QPointF) -> None: ... - def customFocusPoint(self) -> QtCore.QPointF: ... - def focusPoint(self) -> QtCore.QPointF: ... - def isFocusModeSupported(self, mode: 'QCamera.FocusMode') -> bool: ... - def setFocusMode(self, mode: 'QCamera.FocusMode') -> None: ... - def focusMode(self) -> 'QCamera.FocusMode': ... - def supportedFeatures(self) -> 'QCamera.Feature': ... - def errorString(self) -> str: ... - def error(self) -> 'QCamera.Error': ... - def setCameraFormat(self, format: 'QCameraFormat') -> None: ... - def cameraFormat(self) -> 'QCameraFormat': ... - def setCameraDevice(self, cameraDevice: 'QCameraDevice') -> None: ... - def cameraDevice(self) -> 'QCameraDevice': ... - def captureSession(self) -> typing.Optional['QMediaCaptureSession']: ... - def isActive(self) -> bool: ... - def isAvailable(self) -> bool: ... - - -class QCameraFormat(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCameraFormat') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isNull(self) -> bool: ... - def maxFrameRate(self) -> float: ... - def minFrameRate(self) -> float: ... - def resolution(self) -> QtCore.QSize: ... - def pixelFormat(self) -> 'QVideoFrameFormat.PixelFormat': ... - - -class QCameraDevice(PyQt6.sip.simplewrapper): - - class Position(enum.Enum): - UnspecifiedPosition = ... # type: QCameraDevice.Position - BackFace = ... # type: QCameraDevice.Position - FrontFace = ... # type: QCameraDevice.Position - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCameraDevice') -> None: ... - - def correctionAngle(self) -> QtVideo.Rotation: ... - def videoFormats(self) -> typing.List[QCameraFormat]: ... - def photoResolutions(self) -> typing.List[QtCore.QSize]: ... - def position(self) -> 'QCameraDevice.Position': ... - def isDefault(self) -> bool: ... - def description(self) -> str: ... - def id(self) -> QtCore.QByteArray: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QCapturableWindow(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QCapturableWindow') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def description(self) -> str: ... - def isValid(self) -> bool: ... - def swap(self, other: 'QCapturableWindow') -> None: ... - - -class QImageCapture(QtCore.QObject): - - class FileFormat(enum.Enum): - UnspecifiedFormat = ... # type: QImageCapture.FileFormat - JPEG = ... # type: QImageCapture.FileFormat - PNG = ... # type: QImageCapture.FileFormat - WebP = ... # type: QImageCapture.FileFormat - Tiff = ... # type: QImageCapture.FileFormat - - class Quality(enum.Enum): - VeryLowQuality = ... # type: QImageCapture.Quality - LowQuality = ... # type: QImageCapture.Quality - NormalQuality = ... # type: QImageCapture.Quality - HighQuality = ... # type: QImageCapture.Quality - VeryHighQuality = ... # type: QImageCapture.Quality - - class Error(enum.Enum): - NoError = ... # type: QImageCapture.Error - NotReadyError = ... # type: QImageCapture.Error - ResourceError = ... # type: QImageCapture.Error - OutOfSpaceError = ... # type: QImageCapture.Error - NotSupportedFeatureError = ... # type: QImageCapture.Error - FormatError = ... # type: QImageCapture.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - imageSaved: typing.ClassVar[QtCore.pyqtSignal] - imageAvailable: typing.ClassVar[QtCore.pyqtSignal] - imageCaptured: typing.ClassVar[QtCore.pyqtSignal] - imageExposed: typing.ClassVar[QtCore.pyqtSignal] - resolutionChanged: typing.ClassVar[QtCore.pyqtSignal] - qualityChanged: typing.ClassVar[QtCore.pyqtSignal] - fileFormatChanged: typing.ClassVar[QtCore.pyqtSignal] - metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] - readyForCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - def capture(self) -> int: ... - def captureToFile(self, location: typing.Optional[str] = ...) -> int: ... - def addMetaData(self, metaData: 'QMediaMetaData') -> None: ... - def setMetaData(self, metaData: 'QMediaMetaData') -> None: ... - def metaData(self) -> 'QMediaMetaData': ... - def setQuality(self, quality: 'QImageCapture.Quality') -> None: ... - def quality(self) -> 'QImageCapture.Quality': ... - @typing.overload - def setResolution(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def setResolution(self, width: int, height: int) -> None: ... - def resolution(self) -> QtCore.QSize: ... - @staticmethod - def fileFormatDescription(c: 'QImageCapture.FileFormat') -> str: ... - @staticmethod - def fileFormatName(c: 'QImageCapture.FileFormat') -> str: ... - @staticmethod - def supportedFormats() -> typing.List['QImageCapture.FileFormat']: ... - def setFileFormat(self, format: 'QImageCapture.FileFormat') -> None: ... - def fileFormat(self) -> 'QImageCapture.FileFormat': ... - def isReadyForCapture(self) -> bool: ... - def errorString(self) -> str: ... - def error(self) -> 'QImageCapture.Error': ... - def captureSession(self) -> typing.Optional['QMediaCaptureSession']: ... - def isAvailable(self) -> bool: ... - - -class QMediaCaptureSession(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - windowCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] - def setWindowCapture(self, windowCapture: typing.Optional['QWindowCapture']) -> None: ... - def windowCapture(self) -> typing.Optional['QWindowCapture']: ... - screenCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] - def setScreenCapture(self, screenCapture: typing.Optional['QScreenCapture']) -> None: ... - def screenCapture(self) -> typing.Optional['QScreenCapture']: ... - audioOutputChanged: typing.ClassVar[QtCore.pyqtSignal] - videoOutputChanged: typing.ClassVar[QtCore.pyqtSignal] - recorderChanged: typing.ClassVar[QtCore.pyqtSignal] - imageCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] - cameraChanged: typing.ClassVar[QtCore.pyqtSignal] - audioInputChanged: typing.ClassVar[QtCore.pyqtSignal] - def audioOutput(self) -> typing.Optional[QAudioOutput]: ... - def setAudioOutput(self, output: typing.Optional[QAudioOutput]) -> None: ... - def videoSink(self) -> typing.Optional['QVideoSink']: ... - def setVideoSink(self, sink: typing.Optional['QVideoSink']) -> None: ... - def videoOutput(self) -> typing.Optional[QtCore.QObject]: ... - def setVideoOutput(self, output: typing.Optional[QtCore.QObject]) -> None: ... - def setRecorder(self, recorder: typing.Optional['QMediaRecorder']) -> None: ... - def recorder(self) -> typing.Optional['QMediaRecorder']: ... - def setImageCapture(self, imageCapture: typing.Optional[QImageCapture]) -> None: ... - def imageCapture(self) -> typing.Optional[QImageCapture]: ... - def setCamera(self, camera: typing.Optional[QCamera]) -> None: ... - def camera(self) -> typing.Optional[QCamera]: ... - def setAudioInput(self, device: typing.Optional[QAudioInput]) -> None: ... - def audioInput(self) -> typing.Optional[QAudioInput]: ... - - -class QMediaDevices(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - videoInputsChanged: typing.ClassVar[QtCore.pyqtSignal] - audioOutputsChanged: typing.ClassVar[QtCore.pyqtSignal] - audioInputsChanged: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def defaultVideoInput() -> QCameraDevice: ... - @staticmethod - def defaultAudioOutput() -> QAudioDevice: ... - @staticmethod - def defaultAudioInput() -> QAudioDevice: ... - @staticmethod - def videoInputs() -> typing.List[QCameraDevice]: ... - @staticmethod - def audioOutputs() -> typing.List[QAudioDevice]: ... - @staticmethod - def audioInputs() -> typing.List[QAudioDevice]: ... - - -class QMediaFormat(PyQt6.sip.simplewrapper): - - class ResolveFlags(enum.Enum): - NoFlags = ... # type: QMediaFormat.ResolveFlags - RequiresVideo = ... # type: QMediaFormat.ResolveFlags - - class ConversionMode(enum.Enum): - Encode = ... # type: QMediaFormat.ConversionMode - Decode = ... # type: QMediaFormat.ConversionMode - - class VideoCodec(enum.Enum): - Unspecified = ... # type: QMediaFormat.VideoCodec - MPEG1 = ... # type: QMediaFormat.VideoCodec - MPEG2 = ... # type: QMediaFormat.VideoCodec - MPEG4 = ... # type: QMediaFormat.VideoCodec - H264 = ... # type: QMediaFormat.VideoCodec - H265 = ... # type: QMediaFormat.VideoCodec - VP8 = ... # type: QMediaFormat.VideoCodec - VP9 = ... # type: QMediaFormat.VideoCodec - AV1 = ... # type: QMediaFormat.VideoCodec - Theora = ... # type: QMediaFormat.VideoCodec - WMV = ... # type: QMediaFormat.VideoCodec - MotionJPEG = ... # type: QMediaFormat.VideoCodec - - class AudioCodec(enum.Enum): - Unspecified = ... # type: QMediaFormat.AudioCodec - MP3 = ... # type: QMediaFormat.AudioCodec - AAC = ... # type: QMediaFormat.AudioCodec - AC3 = ... # type: QMediaFormat.AudioCodec - EAC3 = ... # type: QMediaFormat.AudioCodec - FLAC = ... # type: QMediaFormat.AudioCodec - DolbyTrueHD = ... # type: QMediaFormat.AudioCodec - Opus = ... # type: QMediaFormat.AudioCodec - Vorbis = ... # type: QMediaFormat.AudioCodec - Wave = ... # type: QMediaFormat.AudioCodec - WMA = ... # type: QMediaFormat.AudioCodec - ALAC = ... # type: QMediaFormat.AudioCodec - - class FileFormat(enum.Enum): - UnspecifiedFormat = ... # type: QMediaFormat.FileFormat - WMV = ... # type: QMediaFormat.FileFormat - AVI = ... # type: QMediaFormat.FileFormat - Matroska = ... # type: QMediaFormat.FileFormat - MPEG4 = ... # type: QMediaFormat.FileFormat - Ogg = ... # type: QMediaFormat.FileFormat - QuickTime = ... # type: QMediaFormat.FileFormat - WebM = ... # type: QMediaFormat.FileFormat - Mpeg4Audio = ... # type: QMediaFormat.FileFormat - AAC = ... # type: QMediaFormat.FileFormat - WMA = ... # type: QMediaFormat.FileFormat - MP3 = ... # type: QMediaFormat.FileFormat - FLAC = ... # type: QMediaFormat.FileFormat - Wave = ... # type: QMediaFormat.FileFormat - - @typing.overload - def __init__(self, format: 'QMediaFormat.FileFormat' = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QMediaFormat') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def resolveForEncoding(self, flags: 'QMediaFormat.ResolveFlags') -> None: ... - @staticmethod - def videoCodecDescription(c: 'QMediaFormat.VideoCodec') -> str: ... - @staticmethod - def audioCodecDescription(c: 'QMediaFormat.AudioCodec') -> str: ... - @staticmethod - def fileFormatDescription(c: 'QMediaFormat.FileFormat') -> str: ... - @staticmethod - def videoCodecName(c: 'QMediaFormat.VideoCodec') -> str: ... - @staticmethod - def audioCodecName(c: 'QMediaFormat.AudioCodec') -> str: ... - @staticmethod - def fileFormatName(c: 'QMediaFormat.FileFormat') -> str: ... - def supportedAudioCodecs(self, m: 'QMediaFormat.ConversionMode') -> typing.List['QMediaFormat.AudioCodec']: ... - def supportedVideoCodecs(self, m: 'QMediaFormat.ConversionMode') -> typing.List['QMediaFormat.VideoCodec']: ... - def supportedFileFormats(self, m: 'QMediaFormat.ConversionMode') -> typing.List['QMediaFormat.FileFormat']: ... - def mimeType(self) -> QtCore.QMimeType: ... - def isSupported(self, mode: 'QMediaFormat.ConversionMode') -> bool: ... - def audioCodec(self) -> 'QMediaFormat.AudioCodec': ... - def setAudioCodec(self, codec: 'QMediaFormat.AudioCodec') -> None: ... - def videoCodec(self) -> 'QMediaFormat.VideoCodec': ... - def setVideoCodec(self, codec: 'QMediaFormat.VideoCodec') -> None: ... - def setFileFormat(self, f: 'QMediaFormat.FileFormat') -> None: ... - def fileFormat(self) -> 'QMediaFormat.FileFormat': ... - def swap(self, other: 'QMediaFormat') -> None: ... - - -class QMediaMetaData(PyQt6.sip.simplewrapper): - - class Key(enum.Enum): - Title = ... # type: QMediaMetaData.Key - Author = ... # type: QMediaMetaData.Key - Comment = ... # type: QMediaMetaData.Key - Description = ... # type: QMediaMetaData.Key - Genre = ... # type: QMediaMetaData.Key - Date = ... # type: QMediaMetaData.Key - Language = ... # type: QMediaMetaData.Key - Publisher = ... # type: QMediaMetaData.Key - Copyright = ... # type: QMediaMetaData.Key - Url = ... # type: QMediaMetaData.Key - Duration = ... # type: QMediaMetaData.Key - MediaType = ... # type: QMediaMetaData.Key - FileFormat = ... # type: QMediaMetaData.Key - AudioBitRate = ... # type: QMediaMetaData.Key - AudioCodec = ... # type: QMediaMetaData.Key - VideoBitRate = ... # type: QMediaMetaData.Key - VideoCodec = ... # type: QMediaMetaData.Key - VideoFrameRate = ... # type: QMediaMetaData.Key - AlbumTitle = ... # type: QMediaMetaData.Key - AlbumArtist = ... # type: QMediaMetaData.Key - ContributingArtist = ... # type: QMediaMetaData.Key - TrackNumber = ... # type: QMediaMetaData.Key - Composer = ... # type: QMediaMetaData.Key - LeadPerformer = ... # type: QMediaMetaData.Key - ThumbnailImage = ... # type: QMediaMetaData.Key - CoverArtImage = ... # type: QMediaMetaData.Key - Orientation = ... # type: QMediaMetaData.Key - Resolution = ... # type: QMediaMetaData.Key - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMediaMetaData') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - @staticmethod - def keyType(key: 'QMediaMetaData.Key') -> QtCore.QMetaType: ... - @staticmethod - def metaDataKeyToString(k: 'QMediaMetaData.Key') -> str: ... - def stringValue(self, k: 'QMediaMetaData.Key') -> str: ... - def keys(self) -> typing.List['QMediaMetaData.Key']: ... - def insert(self, k: 'QMediaMetaData.Key', value: typing.Any) -> None: ... - def value(self, k: 'QMediaMetaData.Key') -> typing.Any: ... - - -class QMediaPlayer(QtCore.QObject): - - class Loops(enum.IntEnum): - Infinite = ... # type: QMediaPlayer.Loops - Once = ... # type: QMediaPlayer.Loops - - class Error(enum.Enum): - NoError = ... # type: QMediaPlayer.Error - ResourceError = ... # type: QMediaPlayer.Error - FormatError = ... # type: QMediaPlayer.Error - NetworkError = ... # type: QMediaPlayer.Error - AccessDeniedError = ... # type: QMediaPlayer.Error - - class MediaStatus(enum.Enum): - NoMedia = ... # type: QMediaPlayer.MediaStatus - LoadingMedia = ... # type: QMediaPlayer.MediaStatus - LoadedMedia = ... # type: QMediaPlayer.MediaStatus - StalledMedia = ... # type: QMediaPlayer.MediaStatus - BufferingMedia = ... # type: QMediaPlayer.MediaStatus - BufferedMedia = ... # type: QMediaPlayer.MediaStatus - EndOfMedia = ... # type: QMediaPlayer.MediaStatus - InvalidMedia = ... # type: QMediaPlayer.MediaStatus - - class PlaybackState(enum.Enum): - StoppedState = ... # type: QMediaPlayer.PlaybackState - PlayingState = ... # type: QMediaPlayer.PlaybackState - PausedState = ... # type: QMediaPlayer.PlaybackState - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - playingChanged: typing.ClassVar[QtCore.pyqtSignal] - def isPlaying(self) -> bool: ... - loopsChanged: typing.ClassVar[QtCore.pyqtSignal] - def setLoops(self, loops: int) -> None: ... - def loops(self) -> int: ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - activeTracksChanged: typing.ClassVar[QtCore.pyqtSignal] - tracksChanged: typing.ClassVar[QtCore.pyqtSignal] - audioOutputChanged: typing.ClassVar[QtCore.pyqtSignal] - videoOutputChanged: typing.ClassVar[QtCore.pyqtSignal] - metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] - playbackRateChanged: typing.ClassVar[QtCore.pyqtSignal] - seekableChanged: typing.ClassVar[QtCore.pyqtSignal] - bufferProgressChanged: typing.ClassVar[QtCore.pyqtSignal] - hasVideoChanged: typing.ClassVar[QtCore.pyqtSignal] - hasAudioChanged: typing.ClassVar[QtCore.pyqtSignal] - positionChanged: typing.ClassVar[QtCore.pyqtSignal] - durationChanged: typing.ClassVar[QtCore.pyqtSignal] - mediaStatusChanged: typing.ClassVar[QtCore.pyqtSignal] - playbackStateChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - def setSourceDevice(self, device: typing.Optional[QtCore.QIODevice], sourceUrl: QtCore.QUrl = ...) -> None: ... - def setSource(self, source: QtCore.QUrl) -> None: ... - def setPlaybackRate(self, rate: float) -> None: ... - def setPosition(self, position: int) -> None: ... - def stop(self) -> None: ... - def pause(self) -> None: ... - def play(self) -> None: ... - def metaData(self) -> QMediaMetaData: ... - def isAvailable(self) -> bool: ... - def errorString(self) -> str: ... - def error(self) -> 'QMediaPlayer.Error': ... - def playbackRate(self) -> float: ... - def isSeekable(self) -> bool: ... - def bufferedTimeRange(self) -> 'QMediaTimeRange': ... - def bufferProgress(self) -> float: ... - def hasVideo(self) -> bool: ... - def hasAudio(self) -> bool: ... - def position(self) -> int: ... - def duration(self) -> int: ... - def mediaStatus(self) -> 'QMediaPlayer.MediaStatus': ... - def playbackState(self) -> 'QMediaPlayer.PlaybackState': ... - def sourceDevice(self) -> typing.Optional[QtCore.QIODevice]: ... - def source(self) -> QtCore.QUrl: ... - def videoSink(self) -> typing.Optional['QVideoSink']: ... - def setVideoSink(self, sink: typing.Optional['QVideoSink']) -> None: ... - def videoOutput(self) -> typing.Optional[QtCore.QObject]: ... - def setVideoOutput(self, a0: typing.Optional[QtCore.QObject]) -> None: ... - def audioOutput(self) -> typing.Optional[QAudioOutput]: ... - def setAudioOutput(self, output: typing.Optional[QAudioOutput]) -> None: ... - def setActiveSubtitleTrack(self, index: int) -> None: ... - def setActiveVideoTrack(self, index: int) -> None: ... - def setActiveAudioTrack(self, index: int) -> None: ... - def activeSubtitleTrack(self) -> int: ... - def activeVideoTrack(self) -> int: ... - def activeAudioTrack(self) -> int: ... - def subtitleTracks(self) -> typing.List[QMediaMetaData]: ... - def videoTracks(self) -> typing.List[QMediaMetaData]: ... - def audioTracks(self) -> typing.List[QMediaMetaData]: ... - - -class QMediaRecorder(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QMediaRecorder.Error - ResourceError = ... # type: QMediaRecorder.Error - FormatError = ... # type: QMediaRecorder.Error - OutOfSpaceError = ... # type: QMediaRecorder.Error - LocationNotWritable = ... # type: QMediaRecorder.Error - - class RecorderState(enum.Enum): - StoppedState = ... # type: QMediaRecorder.RecorderState - RecordingState = ... # type: QMediaRecorder.RecorderState - PausedState = ... # type: QMediaRecorder.RecorderState - - class EncodingMode(enum.Enum): - ConstantQualityEncoding = ... # type: QMediaRecorder.EncodingMode - ConstantBitRateEncoding = ... # type: QMediaRecorder.EncodingMode - AverageBitRateEncoding = ... # type: QMediaRecorder.EncodingMode - TwoPassEncoding = ... # type: QMediaRecorder.EncodingMode - - class Quality(enum.Enum): - VeryLowQuality = ... # type: QMediaRecorder.Quality - LowQuality = ... # type: QMediaRecorder.Quality - NormalQuality = ... # type: QMediaRecorder.Quality - HighQuality = ... # type: QMediaRecorder.Quality - VeryHighQuality = ... # type: QMediaRecorder.Quality - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - audioSampleRateChanged: typing.ClassVar[QtCore.pyqtSignal] - audioChannelCountChanged: typing.ClassVar[QtCore.pyqtSignal] - audioBitRateChanged: typing.ClassVar[QtCore.pyqtSignal] - videoBitRateChanged: typing.ClassVar[QtCore.pyqtSignal] - videoFrameRateChanged: typing.ClassVar[QtCore.pyqtSignal] - videoResolutionChanged: typing.ClassVar[QtCore.pyqtSignal] - qualityChanged: typing.ClassVar[QtCore.pyqtSignal] - encodingModeChanged: typing.ClassVar[QtCore.pyqtSignal] - mediaFormatChanged: typing.ClassVar[QtCore.pyqtSignal] - metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - actualLocationChanged: typing.ClassVar[QtCore.pyqtSignal] - durationChanged: typing.ClassVar[QtCore.pyqtSignal] - recorderStateChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def pause(self) -> None: ... - def record(self) -> None: ... - def captureSession(self) -> typing.Optional[QMediaCaptureSession]: ... - def setMetaData(self, metaData: QMediaMetaData) -> None: ... - def metaData(self) -> QMediaMetaData: ... - def setAudioSampleRate(self, sampleRate: int) -> None: ... - def audioSampleRate(self) -> int: ... - def setAudioChannelCount(self, channels: int) -> None: ... - def audioChannelCount(self) -> int: ... - def setAudioBitRate(self, bitRate: int) -> None: ... - def audioBitRate(self) -> int: ... - def setVideoBitRate(self, bitRate: int) -> None: ... - def videoBitRate(self) -> int: ... - def setVideoFrameRate(self, frameRate: float) -> None: ... - def videoFrameRate(self) -> float: ... - @typing.overload - def setVideoResolution(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def setVideoResolution(self, width: int, height: int) -> None: ... - def videoResolution(self) -> QtCore.QSize: ... - def setQuality(self, quality: 'QMediaRecorder.Quality') -> None: ... - def quality(self) -> 'QMediaRecorder.Quality': ... - def setEncodingMode(self, a0: 'QMediaRecorder.EncodingMode') -> None: ... - def encodingMode(self) -> 'QMediaRecorder.EncodingMode': ... - def setMediaFormat(self, format: QMediaFormat) -> None: ... - def mediaFormat(self) -> QMediaFormat: ... - def duration(self) -> int: ... - def errorString(self) -> str: ... - def error(self) -> 'QMediaRecorder.Error': ... - def recorderState(self) -> 'QMediaRecorder.RecorderState': ... - def actualLocation(self) -> QtCore.QUrl: ... - def setOutputLocation(self, location: QtCore.QUrl) -> None: ... - def outputLocation(self) -> QtCore.QUrl: ... - def isAvailable(self) -> bool: ... - - -class QMediaTimeRange(PyQt6.sip.simplewrapper): - - class Interval(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, start: int, end: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QMediaTimeRange.Interval') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def translated(self, offset: int) -> 'QMediaTimeRange.Interval': ... - def normalized(self) -> 'QMediaTimeRange.Interval': ... - def isNormal(self) -> bool: ... - def contains(self, time: int) -> bool: ... - def end(self) -> int: ... - def start(self) -> int: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMediaTimeRange.Interval') -> None: ... - @typing.overload - def __init__(self, start: int, end: int) -> None: ... - @typing.overload - def __init__(self, range: 'QMediaTimeRange') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __add__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... - def __sub__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... - def clear(self) -> None: ... - @typing.overload - def __isub__(self, a0: 'QMediaTimeRange.Interval') -> 'QMediaTimeRange': ... - @typing.overload - def __isub__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... - @typing.overload - def __iadd__(self, a0: 'QMediaTimeRange.Interval') -> 'QMediaTimeRange': ... - @typing.overload - def __iadd__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... - def removeTimeRange(self, a0: 'QMediaTimeRange') -> None: ... - @typing.overload - def removeInterval(self, interval: 'QMediaTimeRange.Interval') -> None: ... - @typing.overload - def removeInterval(self, start: int, end: int) -> None: ... - def addTimeRange(self, a0: 'QMediaTimeRange') -> None: ... - @typing.overload - def addInterval(self, interval: 'QMediaTimeRange.Interval') -> None: ... - @typing.overload - def addInterval(self, start: int, end: int) -> None: ... - def contains(self, time: int) -> bool: ... - def isContinuous(self) -> bool: ... - def isEmpty(self) -> bool: ... - def intervals(self) -> typing.List['QMediaTimeRange.Interval']: ... - def latestTime(self) -> int: ... - def earliestTime(self) -> int: ... - - -class QScreenCapture(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QScreenCapture.Error - InternalError = ... # type: QScreenCapture.Error - CapturingNotSupported = ... # type: QScreenCapture.Error - CaptureFailed = ... # type: QScreenCapture.Error - NotFound = ... # type: QScreenCapture.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - screenChanged: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - activeChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def start(self) -> None: ... - def setActive(self, active: bool) -> None: ... - def errorString(self) -> str: ... - def error(self) -> 'QScreenCapture.Error': ... - def isActive(self) -> bool: ... - def screen(self) -> typing.Optional[QtGui.QScreen]: ... - def setScreen(self, screen: typing.Optional[QtGui.QScreen]) -> None: ... - def captureSession(self) -> typing.Optional[QMediaCaptureSession]: ... - - -class QSoundEffect(QtCore.QObject): - - class Status(enum.Enum): - Null = ... # type: QSoundEffect.Status - Loading = ... # type: QSoundEffect.Status - Ready = ... # type: QSoundEffect.Status - Error = ... # type: QSoundEffect.Status - - class Loop(enum.Enum): - Infinite = ... # type: QSoundEffect.Loop - - @typing.overload - def __init__(self, audioDevice: QAudioDevice, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - playingChanged: typing.ClassVar[QtCore.pyqtSignal] - loadedChanged: typing.ClassVar[QtCore.pyqtSignal] - mutedChanged: typing.ClassVar[QtCore.pyqtSignal] - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - loopsRemainingChanged: typing.ClassVar[QtCore.pyqtSignal] - loopCountChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - audioDeviceChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def play(self) -> None: ... - def status(self) -> 'QSoundEffect.Status': ... - def isPlaying(self) -> bool: ... - def isLoaded(self) -> bool: ... - def setMuted(self, muted: bool) -> None: ... - def isMuted(self) -> bool: ... - def setVolume(self, volume: float) -> None: ... - def volume(self) -> float: ... - def setLoopCount(self, loopCount: int) -> None: ... - def loopsRemaining(self) -> int: ... - def loopCount(self) -> int: ... - def setSource(self, url: QtCore.QUrl) -> None: ... - def source(self) -> QtCore.QUrl: ... - def setAudioDevice(self, device: QAudioDevice) -> None: ... - def audioDevice(self) -> QAudioDevice: ... - @staticmethod - def supportedMimeTypes() -> typing.List[str]: ... - - -class QVideoFrame(PyQt6.sip.simplewrapper): - - class RotationAngle(enum.Enum): - Rotation0 = ... # type: QVideoFrame.RotationAngle - Rotation90 = ... # type: QVideoFrame.RotationAngle - Rotation180 = ... # type: QVideoFrame.RotationAngle - Rotation270 = ... # type: QVideoFrame.RotationAngle - - class MapMode(enum.Enum): - NotMapped = ... # type: QVideoFrame.MapMode - ReadOnly = ... # type: QVideoFrame.MapMode - WriteOnly = ... # type: QVideoFrame.MapMode - ReadWrite = ... # type: QVideoFrame.MapMode - - class HandleType(enum.Enum): - NoHandle = ... # type: QVideoFrame.HandleType - RhiTextureHandle = ... # type: QVideoFrame.HandleType - - class PaintOptions(PyQt6.sip.simplewrapper): - - class PaintFlag(enum.Flag): - DontDrawSubtitles = ... # type: QVideoFrame.PaintOptions.PaintFlag - - aspectRatioMode = ... # type: QtCore.Qt.AspectRatioMode - backgroundColor = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] - paintFlags = ... # type: 'QVideoFrame.PaintOptions.PaintFlag' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QVideoFrame.PaintOptions') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, format: 'QVideoFrameFormat') -> None: ... - @typing.overload - def __init__(self, other: 'QVideoFrame') -> None: ... - - def rotation(self) -> QtVideo.Rotation: ... - def setRotation(self, angle: QtVideo.Rotation) -> None: ... - def mirrored(self) -> bool: ... - def setMirrored(self, a0: bool) -> None: ... - def rotationAngle(self) -> 'QVideoFrame.RotationAngle': ... - def setRotationAngle(self, a0: 'QVideoFrame.RotationAngle') -> None: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF, options: 'QVideoFrame.PaintOptions') -> None: ... - def setSubtitleText(self, text: typing.Optional[str]) -> None: ... - def subtitleText(self) -> str: ... - def toImage(self) -> QtGui.QImage: ... - def surfaceFormat(self) -> 'QVideoFrameFormat': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def planeCount(self) -> int: ... - def setEndTime(self, time: int) -> None: ... - def endTime(self) -> int: ... - def setStartTime(self, time: int) -> None: ... - def startTime(self) -> int: ... - def mappedBytes(self, plane: int) -> int: ... - def bits(self, plane: int) -> typing.Optional[PyQt6.sip.voidptr]: ... - def bytesPerLine(self, plane: int) -> int: ... - def unmap(self) -> None: ... - def map(self, mode: 'QVideoFrame.MapMode') -> bool: ... - def mapMode(self) -> 'QVideoFrame.MapMode': ... - def isWritable(self) -> bool: ... - def isReadable(self) -> bool: ... - def isMapped(self) -> bool: ... - def height(self) -> int: ... - def width(self) -> int: ... - def size(self) -> QtCore.QSize: ... - def handleType(self) -> 'QVideoFrame.HandleType': ... - def pixelFormat(self) -> 'QVideoFrameFormat.PixelFormat': ... - def isValid(self) -> bool: ... - - -class QVideoFrameFormat(PyQt6.sip.simplewrapper): - - class ColorRange(enum.Enum): - ColorRange_Unknown = ... # type: QVideoFrameFormat.ColorRange - ColorRange_Video = ... # type: QVideoFrameFormat.ColorRange - ColorRange_Full = ... # type: QVideoFrameFormat.ColorRange - - class ColorTransfer(enum.Enum): - ColorTransfer_Unknown = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_BT709 = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_BT601 = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_Linear = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_Gamma22 = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_Gamma28 = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_ST2084 = ... # type: QVideoFrameFormat.ColorTransfer - ColorTransfer_STD_B67 = ... # type: QVideoFrameFormat.ColorTransfer - - class ColorSpace(enum.Enum): - ColorSpace_Undefined = ... # type: QVideoFrameFormat.ColorSpace - ColorSpace_BT601 = ... # type: QVideoFrameFormat.ColorSpace - ColorSpace_BT709 = ... # type: QVideoFrameFormat.ColorSpace - ColorSpace_AdobeRgb = ... # type: QVideoFrameFormat.ColorSpace - ColorSpace_BT2020 = ... # type: QVideoFrameFormat.ColorSpace - - class YCbCrColorSpace(enum.Enum): - YCbCr_Undefined = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_BT601 = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_BT709 = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_xvYCC601 = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_xvYCC709 = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_JPEG = ... # type: QVideoFrameFormat.YCbCrColorSpace - YCbCr_BT2020 = ... # type: QVideoFrameFormat.YCbCrColorSpace - - class Direction(enum.Enum): - TopToBottom = ... # type: QVideoFrameFormat.Direction - BottomToTop = ... # type: QVideoFrameFormat.Direction - - class PixelFormat(enum.Enum): - Format_Invalid = ... # type: QVideoFrameFormat.PixelFormat - Format_YUV420P = ... # type: QVideoFrameFormat.PixelFormat - Format_YUV422P = ... # type: QVideoFrameFormat.PixelFormat - Format_YUV420P10 = ... # type: QVideoFrameFormat.PixelFormat - Format_YV12 = ... # type: QVideoFrameFormat.PixelFormat - Format_UYVY = ... # type: QVideoFrameFormat.PixelFormat - Format_YUYV = ... # type: QVideoFrameFormat.PixelFormat - Format_NV12 = ... # type: QVideoFrameFormat.PixelFormat - Format_NV21 = ... # type: QVideoFrameFormat.PixelFormat - Format_IMC1 = ... # type: QVideoFrameFormat.PixelFormat - Format_IMC2 = ... # type: QVideoFrameFormat.PixelFormat - Format_IMC3 = ... # type: QVideoFrameFormat.PixelFormat - Format_IMC4 = ... # type: QVideoFrameFormat.PixelFormat - Format_Y8 = ... # type: QVideoFrameFormat.PixelFormat - Format_Y16 = ... # type: QVideoFrameFormat.PixelFormat - Format_P010 = ... # type: QVideoFrameFormat.PixelFormat - Format_P016 = ... # type: QVideoFrameFormat.PixelFormat - Format_Jpeg = ... # type: QVideoFrameFormat.PixelFormat - Format_SamplerExternalOES = ... # type: QVideoFrameFormat.PixelFormat - Format_ARGB8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_ARGB8888_Premultiplied = ... # type: QVideoFrameFormat.PixelFormat - Format_XRGB8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_BGRA8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_BGRA8888_Premultiplied = ... # type: QVideoFrameFormat.PixelFormat - Format_BGRX8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_ABGR8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_XBGR8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_RGBA8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_RGBX8888 = ... # type: QVideoFrameFormat.PixelFormat - Format_AYUV = ... # type: QVideoFrameFormat.PixelFormat - Format_AYUV_Premultiplied = ... # type: QVideoFrameFormat.PixelFormat - Format_SamplerRect = ... # type: QVideoFrameFormat.PixelFormat - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSize, pixelFormat: 'QVideoFrameFormat.PixelFormat') -> None: ... - @typing.overload - def __init__(self, format: 'QVideoFrameFormat') -> None: ... - - def setColorRange(self, range: 'QVideoFrameFormat.ColorRange') -> None: ... - def colorRange(self) -> 'QVideoFrameFormat.ColorRange': ... - def setColorTransfer(self, colorTransfer: 'QVideoFrameFormat.ColorTransfer') -> None: ... - def colorTransfer(self) -> 'QVideoFrameFormat.ColorTransfer': ... - def setColorSpace(self, colorSpace: 'QVideoFrameFormat.ColorSpace') -> None: ... - def colorSpace(self) -> 'QVideoFrameFormat.ColorSpace': ... - @staticmethod - def pixelFormatToString(pixelFormat: 'QVideoFrameFormat.PixelFormat') -> str: ... - @staticmethod - def imageFormatFromPixelFormat(format: 'QVideoFrameFormat.PixelFormat') -> QtGui.QImage.Format: ... - @staticmethod - def pixelFormatFromImageFormat(format: QtGui.QImage.Format) -> 'QVideoFrameFormat.PixelFormat': ... - def setMirrored(self, mirrored: bool) -> None: ... - def isMirrored(self) -> bool: ... - def setYCbCrColorSpace(self, colorSpace: 'QVideoFrameFormat.YCbCrColorSpace') -> None: ... - def yCbCrColorSpace(self) -> 'QVideoFrameFormat.YCbCrColorSpace': ... - def setFrameRate(self, rate: float) -> None: ... - def frameRate(self) -> float: ... - def setScanLineDirection(self, direction: 'QVideoFrameFormat.Direction') -> None: ... - def scanLineDirection(self) -> 'QVideoFrameFormat.Direction': ... - def setViewport(self, viewport: QtCore.QRect) -> None: ... - def viewport(self) -> QtCore.QRect: ... - def planeCount(self) -> int: ... - def frameHeight(self) -> int: ... - def frameWidth(self) -> int: ... - @typing.overload - def setFrameSize(self, size: QtCore.QSize) -> None: ... - @typing.overload - def setFrameSize(self, width: int, height: int) -> None: ... - def frameSize(self) -> QtCore.QSize: ... - def pixelFormat(self) -> 'QVideoFrameFormat.PixelFormat': ... - def isValid(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QVideoSink(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - videoSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - subtitleTextChanged: typing.ClassVar[QtCore.pyqtSignal] - videoFrameChanged: typing.ClassVar[QtCore.pyqtSignal] - def videoFrame(self) -> QVideoFrame: ... - def setVideoFrame(self, frame: QVideoFrame) -> None: ... - def setSubtitleText(self, subtitle: typing.Optional[str]) -> None: ... - def subtitleText(self) -> str: ... - def videoSize(self) -> QtCore.QSize: ... - - -class QWindowCapture(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QWindowCapture.Error - InternalError = ... # type: QWindowCapture.Error - CapturingNotSupported = ... # type: QWindowCapture.Error - CaptureFailed = ... # type: QWindowCapture.Error - NotFound = ... # type: QWindowCapture.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - errorChanged: typing.ClassVar[QtCore.pyqtSignal] - windowChanged: typing.ClassVar[QtCore.pyqtSignal] - activeChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def start(self) -> None: ... - def setActive(self, active: bool) -> None: ... - def errorString(self) -> str: ... - def error(self) -> 'QWindowCapture.Error': ... - def isActive(self) -> bool: ... - def window(self) -> QCapturableWindow: ... - def setWindow(self, window: QCapturableWindow) -> None: ... - @staticmethod - def capturableWindows() -> typing.List[QCapturableWindow]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.abi3.so deleted file mode 100644 index bcd179d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.pyi deleted file mode 100644 index 0e8a4ba..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtMultimediaWidgets.pyi +++ /dev/null @@ -1,77 +0,0 @@ -# The PEP 484 type hints stub file for the QtMultimediaWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork -from PyQt6 import QtMultimedia -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QGraphicsVideoItem(QtWidgets.QGraphicsObject): - - def __init__(self, parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... - - def itemChange(self, change: QtWidgets.QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - nativeSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - def type(self) -> int: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional[QtWidgets.QStyleOptionGraphicsItem], widget: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - def boundingRect(self) -> QtCore.QRectF: ... - def nativeSize(self) -> QtCore.QSizeF: ... - def setSize(self, size: QtCore.QSizeF) -> None: ... - def size(self) -> QtCore.QSizeF: ... - def setOffset(self, offset: QtCore.QPointF) -> None: ... - def offset(self) -> QtCore.QPointF: ... - def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... - def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... - def videoSink(self) -> typing.Optional[QtMultimedia.QVideoSink]: ... - - -class QVideoWidget(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def moveEvent(self, event: typing.Optional[QtGui.QMoveEvent]) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - aspectRatioModeChanged: typing.ClassVar[QtCore.pyqtSignal] - fullScreenChanged: typing.ClassVar[QtCore.pyqtSignal] - def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... - def setFullScreen(self, fullScreen: bool) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def isFullScreen(self) -> bool: ... - def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... - def videoSink(self) -> typing.Optional[QtMultimedia.QVideoSink]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.abi3.so deleted file mode 100644 index 8c7cd6b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.pyi deleted file mode 100644 index c396770..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtNetwork.pyi +++ /dev/null @@ -1,2229 +0,0 @@ -# The PEP 484 type hints stub file for the QtNetwork module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QOcspRevocationReason(enum.Enum): - None_ = ... # type: QOcspRevocationReason - Unspecified = ... # type: QOcspRevocationReason - KeyCompromise = ... # type: QOcspRevocationReason - CACompromise = ... # type: QOcspRevocationReason - AffiliationChanged = ... # type: QOcspRevocationReason - Superseded = ... # type: QOcspRevocationReason - CessationOfOperation = ... # type: QOcspRevocationReason - CertificateHold = ... # type: QOcspRevocationReason - RemoveFromCRL = ... # type: QOcspRevocationReason - - -class QOcspCertificateStatus(enum.Enum): - Good = ... # type: QOcspCertificateStatus - Revoked = ... # type: QOcspCertificateStatus - Unknown = ... # type: QOcspCertificateStatus - - -class QNetworkCacheMetaData(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkCacheMetaData') -> None: ... - - def swap(self, other: 'QNetworkCacheMetaData') -> None: ... - def setAttributes(self, attributes: typing.Dict['QNetworkRequest.Attribute', typing.Any]) -> None: ... - def attributes(self) -> typing.Dict['QNetworkRequest.Attribute', typing.Any]: ... - def setSaveToDisk(self, allow: bool) -> None: ... - def saveToDisk(self) -> bool: ... - def setExpirationDate(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def expirationDate(self) -> QtCore.QDateTime: ... - def setLastModified(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def lastModified(self) -> QtCore.QDateTime: ... - def setRawHeaders(self, headers: typing.Iterable[typing.Tuple[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]]]) -> None: ... - def rawHeaders(self) -> typing.List[typing.Tuple[QtCore.QByteArray, QtCore.QByteArray]]: ... - def setUrl(self, url: QtCore.QUrl) -> None: ... - def url(self) -> QtCore.QUrl: ... - def isValid(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QAbstractNetworkCache(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def clear(self) -> None: ... - def insert(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def prepare(self, metaData: QNetworkCacheMetaData) -> typing.Optional[QtCore.QIODevice]: ... - def cacheSize(self) -> int: ... - def remove(self, url: QtCore.QUrl) -> bool: ... - def data(self, url: QtCore.QUrl) -> typing.Optional[QtCore.QIODevice]: ... - def updateMetaData(self, metaData: QNetworkCacheMetaData) -> None: ... - def metaData(self, url: QtCore.QUrl) -> QNetworkCacheMetaData: ... - - -class QAbstractSocket(QtCore.QIODevice): - - class PauseMode(enum.Flag): - PauseNever = ... # type: QAbstractSocket.PauseMode - PauseOnSslErrors = ... # type: QAbstractSocket.PauseMode - - class BindFlag(enum.Flag): - DefaultForPlatform = ... # type: QAbstractSocket.BindFlag - ShareAddress = ... # type: QAbstractSocket.BindFlag - DontShareAddress = ... # type: QAbstractSocket.BindFlag - ReuseAddressHint = ... # type: QAbstractSocket.BindFlag - - class SocketOption(enum.Enum): - LowDelayOption = ... # type: QAbstractSocket.SocketOption - KeepAliveOption = ... # type: QAbstractSocket.SocketOption - MulticastTtlOption = ... # type: QAbstractSocket.SocketOption - MulticastLoopbackOption = ... # type: QAbstractSocket.SocketOption - TypeOfServiceOption = ... # type: QAbstractSocket.SocketOption - SendBufferSizeSocketOption = ... # type: QAbstractSocket.SocketOption - ReceiveBufferSizeSocketOption = ... # type: QAbstractSocket.SocketOption - PathMtuSocketOption = ... # type: QAbstractSocket.SocketOption - - class SocketState(enum.Enum): - UnconnectedState = ... # type: QAbstractSocket.SocketState - HostLookupState = ... # type: QAbstractSocket.SocketState - ConnectingState = ... # type: QAbstractSocket.SocketState - ConnectedState = ... # type: QAbstractSocket.SocketState - BoundState = ... # type: QAbstractSocket.SocketState - ListeningState = ... # type: QAbstractSocket.SocketState - ClosingState = ... # type: QAbstractSocket.SocketState - - class SocketError(enum.Enum): - ConnectionRefusedError = ... # type: QAbstractSocket.SocketError - RemoteHostClosedError = ... # type: QAbstractSocket.SocketError - HostNotFoundError = ... # type: QAbstractSocket.SocketError - SocketAccessError = ... # type: QAbstractSocket.SocketError - SocketResourceError = ... # type: QAbstractSocket.SocketError - SocketTimeoutError = ... # type: QAbstractSocket.SocketError - DatagramTooLargeError = ... # type: QAbstractSocket.SocketError - NetworkError = ... # type: QAbstractSocket.SocketError - AddressInUseError = ... # type: QAbstractSocket.SocketError - SocketAddressNotAvailableError = ... # type: QAbstractSocket.SocketError - UnsupportedSocketOperationError = ... # type: QAbstractSocket.SocketError - UnfinishedSocketOperationError = ... # type: QAbstractSocket.SocketError - ProxyAuthenticationRequiredError = ... # type: QAbstractSocket.SocketError - SslHandshakeFailedError = ... # type: QAbstractSocket.SocketError - ProxyConnectionRefusedError = ... # type: QAbstractSocket.SocketError - ProxyConnectionClosedError = ... # type: QAbstractSocket.SocketError - ProxyConnectionTimeoutError = ... # type: QAbstractSocket.SocketError - ProxyNotFoundError = ... # type: QAbstractSocket.SocketError - ProxyProtocolError = ... # type: QAbstractSocket.SocketError - OperationError = ... # type: QAbstractSocket.SocketError - SslInternalError = ... # type: QAbstractSocket.SocketError - SslInvalidUserDataError = ... # type: QAbstractSocket.SocketError - TemporaryError = ... # type: QAbstractSocket.SocketError - UnknownSocketError = ... # type: QAbstractSocket.SocketError - - class NetworkLayerProtocol(enum.Enum): - IPv4Protocol = ... # type: QAbstractSocket.NetworkLayerProtocol - IPv6Protocol = ... # type: QAbstractSocket.NetworkLayerProtocol - AnyIPProtocol = ... # type: QAbstractSocket.NetworkLayerProtocol - UnknownNetworkLayerProtocol = ... # type: QAbstractSocket.NetworkLayerProtocol - - class SocketType(enum.Enum): - TcpSocket = ... # type: QAbstractSocket.SocketType - UdpSocket = ... # type: QAbstractSocket.SocketType - SctpSocket = ... # type: QAbstractSocket.SocketType - UnknownSocketType = ... # type: QAbstractSocket.SocketType - - def __init__(self, socketType: 'QAbstractSocket.SocketType', parent: typing.Optional[QtCore.QObject]) -> None: ... - - def setProtocolTag(self, tag: typing.Optional[str]) -> None: ... - def protocolTag(self) -> str: ... - @typing.overload - def bind(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int = ..., mode: 'QAbstractSocket.BindFlag' = ...) -> bool: ... - @typing.overload - def bind(self, port: int = ..., mode: 'QAbstractSocket.BindFlag' = ...) -> bool: ... - def setPauseMode(self, pauseMode: 'QAbstractSocket.PauseMode') -> None: ... - def pauseMode(self) -> 'QAbstractSocket.PauseMode': ... - def resume(self) -> None: ... - def socketOption(self, option: 'QAbstractSocket.SocketOption') -> typing.Any: ... - def setSocketOption(self, option: 'QAbstractSocket.SocketOption', value: typing.Any) -> None: ... - def setPeerName(self, name: typing.Optional[str]) -> None: ... - def setPeerAddress(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... - def setPeerPort(self, port: int) -> None: ... - def setLocalAddress(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... - def setLocalPort(self, port: int) -> None: ... - def setSocketError(self, socketError: 'QAbstractSocket.SocketError') -> None: ... - def setSocketState(self, state: 'QAbstractSocket.SocketState') -> None: ... - def skipData(self, maxSize: int) -> int: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readLineData(self, maxlen: int) -> bytes: ... - def readData(self, maxlen: int) -> bytes: ... - proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - connected: typing.ClassVar[QtCore.pyqtSignal] - hostFound: typing.ClassVar[QtCore.pyqtSignal] - def proxy(self) -> 'QNetworkProxy': ... - def setProxy(self, networkProxy: 'QNetworkProxy') -> None: ... - def waitForDisconnected(self, msecs: int = ...) -> bool: ... - def waitForBytesWritten(self, msecs: int = ...) -> bool: ... - def waitForReadyRead(self, msecs: int = ...) -> bool: ... - def waitForConnected(self, msecs: int = ...) -> bool: ... - def flush(self) -> bool: ... - def isSequential(self) -> bool: ... - def close(self) -> None: ... - def error(self) -> 'QAbstractSocket.SocketError': ... - def state(self) -> 'QAbstractSocket.SocketState': ... - def socketType(self) -> 'QAbstractSocket.SocketType': ... - def socketDescriptor(self) -> PyQt6.sip.voidptr: ... - def setSocketDescriptor(self, socketDescriptor: PyQt6.sip.voidptr, state: 'QAbstractSocket.SocketState' = ..., mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> bool: ... - def abort(self) -> None: ... - def setReadBufferSize(self, size: int) -> None: ... - def readBufferSize(self) -> int: ... - def peerName(self) -> str: ... - def peerAddress(self) -> 'QHostAddress': ... - def peerPort(self) -> int: ... - def localAddress(self) -> 'QHostAddress': ... - def localPort(self) -> int: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def isValid(self) -> bool: ... - def disconnectFromHost(self) -> None: ... - @typing.overload - def connectToHost(self, hostName: typing.Optional[str], port: int, mode: QtCore.QIODeviceBase.OpenModeFlag = ..., protocol: 'QAbstractSocket.NetworkLayerProtocol' = ...) -> None: ... - @typing.overload - def connectToHost(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int, mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - - -class QAuthenticator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QAuthenticator') -> None: ... - - def setOption(self, opt: typing.Optional[str], value: typing.Any) -> None: ... - def options(self) -> typing.Dict[str, typing.Any]: ... - def option(self, opt: typing.Optional[str]) -> typing.Any: ... - def isNull(self) -> bool: ... - def realm(self) -> str: ... - def setPassword(self, password: typing.Optional[str]) -> None: ... - def password(self) -> str: ... - def setUser(self, user: typing.Optional[str]) -> None: ... - def user(self) -> str: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QDnsDomainNameRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDnsDomainNameRecord') -> None: ... - - def value(self) -> str: ... - def timeToLive(self) -> int: ... - def name(self) -> str: ... - def swap(self, other: 'QDnsDomainNameRecord') -> None: ... - - -class QDnsHostAddressRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDnsHostAddressRecord') -> None: ... - - def value(self) -> 'QHostAddress': ... - def timeToLive(self) -> int: ... - def name(self) -> str: ... - def swap(self, other: 'QDnsHostAddressRecord') -> None: ... - - -class QDnsMailExchangeRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDnsMailExchangeRecord') -> None: ... - - def timeToLive(self) -> int: ... - def preference(self) -> int: ... - def name(self) -> str: ... - def exchange(self) -> str: ... - def swap(self, other: 'QDnsMailExchangeRecord') -> None: ... - - -class QDnsServiceRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDnsServiceRecord') -> None: ... - - def weight(self) -> int: ... - def timeToLive(self) -> int: ... - def target(self) -> str: ... - def priority(self) -> int: ... - def port(self) -> int: ... - def name(self) -> str: ... - def swap(self, other: 'QDnsServiceRecord') -> None: ... - - -class QDnsTextRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QDnsTextRecord') -> None: ... - - def values(self) -> typing.List[QtCore.QByteArray]: ... - def timeToLive(self) -> int: ... - def name(self) -> str: ... - def swap(self, other: 'QDnsTextRecord') -> None: ... - - -class QDnsLookup(QtCore.QObject): - - class Type(enum.Enum): - A = ... # type: QDnsLookup.Type - AAAA = ... # type: QDnsLookup.Type - ANY = ... # type: QDnsLookup.Type - CNAME = ... # type: QDnsLookup.Type - MX = ... # type: QDnsLookup.Type - NS = ... # type: QDnsLookup.Type - PTR = ... # type: QDnsLookup.Type - SRV = ... # type: QDnsLookup.Type - TXT = ... # type: QDnsLookup.Type - - class Error(enum.Enum): - NoError = ... # type: QDnsLookup.Error - ResolverError = ... # type: QDnsLookup.Error - OperationCancelledError = ... # type: QDnsLookup.Error - InvalidRequestError = ... # type: QDnsLookup.Error - InvalidReplyError = ... # type: QDnsLookup.Error - ServerFailureError = ... # type: QDnsLookup.Error - ServerRefusedError = ... # type: QDnsLookup.Error - NotFoundError = ... # type: QDnsLookup.Error - TimeoutError = ... # type: QDnsLookup.Error - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, type: 'QDnsLookup.Type', name: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, type: 'QDnsLookup.Type', name: typing.Optional[str], nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, type: 'QDnsLookup.Type', name: typing.Optional[str], nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - nameserverPortChanged: typing.ClassVar[QtCore.pyqtSignal] - def setNameserverPort(self, port: int) -> None: ... - def nameserverPort(self) -> int: ... - nameserverChanged: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def setNameserver(self, nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... - @typing.overload - def setNameserver(self, nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int) -> None: ... - def nameserver(self) -> 'QHostAddress': ... - typeChanged: typing.ClassVar[QtCore.pyqtSignal] - nameChanged: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - def lookup(self) -> None: ... - def abort(self) -> None: ... - def textRecords(self) -> typing.List[QDnsTextRecord]: ... - def serviceRecords(self) -> typing.List[QDnsServiceRecord]: ... - def pointerRecords(self) -> typing.List[QDnsDomainNameRecord]: ... - def nameServerRecords(self) -> typing.List[QDnsDomainNameRecord]: ... - def mailExchangeRecords(self) -> typing.List[QDnsMailExchangeRecord]: ... - def hostAddressRecords(self) -> typing.List[QDnsHostAddressRecord]: ... - def canonicalNameRecords(self) -> typing.List[QDnsDomainNameRecord]: ... - def setType(self, a0: 'QDnsLookup.Type') -> None: ... - def type(self) -> 'QDnsLookup.Type': ... - def setName(self, name: typing.Optional[str]) -> None: ... - def name(self) -> str: ... - def isFinished(self) -> bool: ... - def errorString(self) -> str: ... - def error(self) -> 'QDnsLookup.Error': ... - - -class QHostAddress(PyQt6.sip.simplewrapper): - - class ConversionModeFlag(enum.Flag): - ConvertV4MappedToIPv4 = ... # type: QHostAddress.ConversionModeFlag - ConvertV4CompatToIPv4 = ... # type: QHostAddress.ConversionModeFlag - ConvertUnspecifiedAddress = ... # type: QHostAddress.ConversionModeFlag - ConvertLocalHost = ... # type: QHostAddress.ConversionModeFlag - TolerantConversion = ... # type: QHostAddress.ConversionModeFlag - StrictConversion = ... # type: QHostAddress.ConversionModeFlag - - class SpecialAddress(enum.Enum): - Null = ... # type: QHostAddress.SpecialAddress - Broadcast = ... # type: QHostAddress.SpecialAddress - LocalHost = ... # type: QHostAddress.SpecialAddress - LocalHostIPv6 = ... # type: QHostAddress.SpecialAddress - AnyIPv4 = ... # type: QHostAddress.SpecialAddress - AnyIPv6 = ... # type: QHostAddress.SpecialAddress - Any = ... # type: QHostAddress.SpecialAddress - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, address: 'QHostAddress.SpecialAddress') -> None: ... - @typing.overload - def __init__(self, ip4Addr: int) -> None: ... - @typing.overload - def __init__(self, address: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, ip6Addr: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... - @typing.overload - def __init__(self, copy: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... - - def isPrivateUse(self) -> bool: ... - def isBroadcast(self) -> bool: ... - def isUniqueLocalUnicast(self) -> bool: ... - def isSiteLocal(self) -> bool: ... - def isLinkLocal(self) -> bool: ... - def isGlobal(self) -> bool: ... - def isEqual(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], mode: 'QHostAddress.ConversionModeFlag' = ...) -> bool: ... - def isMulticast(self) -> bool: ... - def swap(self, other: 'QHostAddress') -> None: ... - @staticmethod - def parseSubnet(subnet: typing.Optional[str]) -> typing.Tuple['QHostAddress', int]: ... - def isLoopback(self) -> bool: ... - @typing.overload - def isInSubnet(self, subnet: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], netmask: int) -> bool: ... - @typing.overload - def isInSubnet(self, subnet: typing.Tuple[typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], int]) -> bool: ... - def __hash__(self) -> int: ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def setScopeId(self, id: typing.Optional[str]) -> None: ... - def scopeId(self) -> str: ... - def toString(self) -> str: ... - def toIPv6Address(self) -> typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]: ... - def toIPv4Address(self) -> typing.Tuple[int, typing.Optional[bool]]: ... - def protocol(self) -> QAbstractSocket.NetworkLayerProtocol: ... - @typing.overload - def setAddress(self, address: 'QHostAddress.SpecialAddress') -> None: ... - @typing.overload - def setAddress(self, ip4Addr: int) -> None: ... - @typing.overload - def setAddress(self, address: typing.Optional[str]) -> bool: ... - @typing.overload - def setAddress(self, ip6Addr: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... - - -class QHostInfo(PyQt6.sip.simplewrapper): - - class HostInfoError(enum.Enum): - NoError = ... # type: QHostInfo.HostInfoError - HostNotFound = ... # type: QHostInfo.HostInfoError - UnknownError = ... # type: QHostInfo.HostInfoError - - @typing.overload - def __init__(self, id: int = ...) -> None: ... - @typing.overload - def __init__(self, d: 'QHostInfo') -> None: ... - - def swap(self, other: 'QHostInfo') -> None: ... - @staticmethod - def localDomainName() -> str: ... - @staticmethod - def localHostName() -> str: ... - @staticmethod - def fromName(name: typing.Optional[str]) -> 'QHostInfo': ... - @staticmethod - def abortHostLookup(lookupId: int) -> None: ... - @staticmethod - def lookupHost(name: typing.Optional[str], slot: PYQT_SLOT) -> int: ... - def lookupId(self) -> int: ... - def setLookupId(self, id: int) -> None: ... - def setErrorString(self, errorString: typing.Optional[str]) -> None: ... - def errorString(self) -> str: ... - def setError(self, error: 'QHostInfo.HostInfoError') -> None: ... - def error(self) -> 'QHostInfo.HostInfoError': ... - def setAddresses(self, addresses: typing.Iterable[typing.Union[QHostAddress, QHostAddress.SpecialAddress]]) -> None: ... - def addresses(self) -> typing.List[QHostAddress]: ... - def setHostName(self, name: typing.Optional[str]) -> None: ... - def hostName(self) -> str: ... - - -class QHstsPolicy(PyQt6.sip.simplewrapper): - - class PolicyFlag(enum.Flag): - IncludeSubDomains = ... # type: QHstsPolicy.PolicyFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime], flags: 'QHstsPolicy.PolicyFlag', host: typing.Optional[str], mode: QtCore.QUrl.ParsingMode = ...) -> None: ... - @typing.overload - def __init__(self, rhs: 'QHstsPolicy') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def isExpired(self) -> bool: ... - def includesSubDomains(self) -> bool: ... - def setIncludesSubDomains(self, include: bool) -> None: ... - def expiry(self) -> QtCore.QDateTime: ... - def setExpiry(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def host(self, options: QtCore.QUrl.ComponentFormattingOption = ...) -> str: ... - def setHost(self, host: typing.Optional[str], mode: QtCore.QUrl.ParsingMode = ...) -> None: ... - def swap(self, other: 'QHstsPolicy') -> None: ... - - -class QHttp1Configuration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHttp1Configuration') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def swap(self, other: 'QHttp1Configuration') -> None: ... - def numberOfConnectionsPerHost(self) -> int: ... - def setNumberOfConnectionsPerHost(self, amount: int) -> None: ... - - -class QHttp2Configuration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHttp2Configuration') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def swap(self, other: 'QHttp2Configuration') -> None: ... - def maxFrameSize(self) -> int: ... - def setMaxFrameSize(self, size: int) -> bool: ... - def streamReceiveWindowSize(self) -> int: ... - def setStreamReceiveWindowSize(self, size: int) -> bool: ... - def sessionReceiveWindowSize(self) -> int: ... - def setSessionReceiveWindowSize(self, size: int) -> bool: ... - def huffmanCompressionEnabled(self) -> bool: ... - def setHuffmanCompressionEnabled(self, enable: bool) -> None: ... - def serverPushEnabled(self) -> bool: ... - def setServerPushEnabled(self, enable: bool) -> None: ... - - -class QHttpHeaders(PyQt6.sip.simplewrapper): - - class WellKnownHeader(enum.Enum): - AIM = ... # type: QHttpHeaders.WellKnownHeader - Accept = ... # type: QHttpHeaders.WellKnownHeader - AcceptAdditions = ... # type: QHttpHeaders.WellKnownHeader - AcceptCH = ... # type: QHttpHeaders.WellKnownHeader - AcceptDatetime = ... # type: QHttpHeaders.WellKnownHeader - AcceptEncoding = ... # type: QHttpHeaders.WellKnownHeader - AcceptFeatures = ... # type: QHttpHeaders.WellKnownHeader - AcceptLanguage = ... # type: QHttpHeaders.WellKnownHeader - AcceptPatch = ... # type: QHttpHeaders.WellKnownHeader - AcceptPost = ... # type: QHttpHeaders.WellKnownHeader - AcceptRanges = ... # type: QHttpHeaders.WellKnownHeader - AcceptSignature = ... # type: QHttpHeaders.WellKnownHeader - AccessControlAllowCredentials = ... # type: QHttpHeaders.WellKnownHeader - AccessControlAllowHeaders = ... # type: QHttpHeaders.WellKnownHeader - AccessControlAllowMethods = ... # type: QHttpHeaders.WellKnownHeader - AccessControlAllowOrigin = ... # type: QHttpHeaders.WellKnownHeader - AccessControlExposeHeaders = ... # type: QHttpHeaders.WellKnownHeader - AccessControlMaxAge = ... # type: QHttpHeaders.WellKnownHeader - AccessControlRequestHeaders = ... # type: QHttpHeaders.WellKnownHeader - AccessControlRequestMethod = ... # type: QHttpHeaders.WellKnownHeader - Age = ... # type: QHttpHeaders.WellKnownHeader - Allow = ... # type: QHttpHeaders.WellKnownHeader - ALPN = ... # type: QHttpHeaders.WellKnownHeader - AltSvc = ... # type: QHttpHeaders.WellKnownHeader - AltUsed = ... # type: QHttpHeaders.WellKnownHeader - Alternates = ... # type: QHttpHeaders.WellKnownHeader - ApplyToRedirectRef = ... # type: QHttpHeaders.WellKnownHeader - AuthenticationControl = ... # type: QHttpHeaders.WellKnownHeader - AuthenticationInfo = ... # type: QHttpHeaders.WellKnownHeader - Authorization = ... # type: QHttpHeaders.WellKnownHeader - CacheControl = ... # type: QHttpHeaders.WellKnownHeader - CacheStatus = ... # type: QHttpHeaders.WellKnownHeader - CalManagedID = ... # type: QHttpHeaders.WellKnownHeader - CalDAVTimezones = ... # type: QHttpHeaders.WellKnownHeader - CapsuleProtocol = ... # type: QHttpHeaders.WellKnownHeader - CDNCacheControl = ... # type: QHttpHeaders.WellKnownHeader - CDNLoop = ... # type: QHttpHeaders.WellKnownHeader - CertNotAfter = ... # type: QHttpHeaders.WellKnownHeader - CertNotBefore = ... # type: QHttpHeaders.WellKnownHeader - ClearSiteData = ... # type: QHttpHeaders.WellKnownHeader - ClientCert = ... # type: QHttpHeaders.WellKnownHeader - ClientCertChain = ... # type: QHttpHeaders.WellKnownHeader - Close = ... # type: QHttpHeaders.WellKnownHeader - Connection = ... # type: QHttpHeaders.WellKnownHeader - ContentDigest = ... # type: QHttpHeaders.WellKnownHeader - ContentDisposition = ... # type: QHttpHeaders.WellKnownHeader - ContentEncoding = ... # type: QHttpHeaders.WellKnownHeader - ContentID = ... # type: QHttpHeaders.WellKnownHeader - ContentLanguage = ... # type: QHttpHeaders.WellKnownHeader - ContentLength = ... # type: QHttpHeaders.WellKnownHeader - ContentLocation = ... # type: QHttpHeaders.WellKnownHeader - ContentRange = ... # type: QHttpHeaders.WellKnownHeader - ContentSecurityPolicy = ... # type: QHttpHeaders.WellKnownHeader - ContentSecurityPolicyReportOnly = ... # type: QHttpHeaders.WellKnownHeader - ContentType = ... # type: QHttpHeaders.WellKnownHeader - Cookie = ... # type: QHttpHeaders.WellKnownHeader - CrossOriginEmbedderPolicy = ... # type: QHttpHeaders.WellKnownHeader - CrossOriginEmbedderPolicyReportOnly = ... # type: QHttpHeaders.WellKnownHeader - CrossOriginOpenerPolicy = ... # type: QHttpHeaders.WellKnownHeader - CrossOriginOpenerPolicyReportOnly = ... # type: QHttpHeaders.WellKnownHeader - CrossOriginResourcePolicy = ... # type: QHttpHeaders.WellKnownHeader - DASL = ... # type: QHttpHeaders.WellKnownHeader - Date = ... # type: QHttpHeaders.WellKnownHeader - DAV = ... # type: QHttpHeaders.WellKnownHeader - DeltaBase = ... # type: QHttpHeaders.WellKnownHeader - Depth = ... # type: QHttpHeaders.WellKnownHeader - Destination = ... # type: QHttpHeaders.WellKnownHeader - DifferentialID = ... # type: QHttpHeaders.WellKnownHeader - DPoP = ... # type: QHttpHeaders.WellKnownHeader - DPoPNonce = ... # type: QHttpHeaders.WellKnownHeader - EarlyData = ... # type: QHttpHeaders.WellKnownHeader - ETag = ... # type: QHttpHeaders.WellKnownHeader - Expect = ... # type: QHttpHeaders.WellKnownHeader - ExpectCT = ... # type: QHttpHeaders.WellKnownHeader - Expires = ... # type: QHttpHeaders.WellKnownHeader - Forwarded = ... # type: QHttpHeaders.WellKnownHeader - From = ... # type: QHttpHeaders.WellKnownHeader - Hobareg = ... # type: QHttpHeaders.WellKnownHeader - Host = ... # type: QHttpHeaders.WellKnownHeader - If = ... # type: QHttpHeaders.WellKnownHeader - IfMatch = ... # type: QHttpHeaders.WellKnownHeader - IfModifiedSince = ... # type: QHttpHeaders.WellKnownHeader - IfNoneMatch = ... # type: QHttpHeaders.WellKnownHeader - IfRange = ... # type: QHttpHeaders.WellKnownHeader - IfScheduleTagMatch = ... # type: QHttpHeaders.WellKnownHeader - IfUnmodifiedSince = ... # type: QHttpHeaders.WellKnownHeader - IM = ... # type: QHttpHeaders.WellKnownHeader - IncludeReferredTokenBindingID = ... # type: QHttpHeaders.WellKnownHeader - KeepAlive = ... # type: QHttpHeaders.WellKnownHeader - Label = ... # type: QHttpHeaders.WellKnownHeader - LastEventID = ... # type: QHttpHeaders.WellKnownHeader - LastModified = ... # type: QHttpHeaders.WellKnownHeader - Link = ... # type: QHttpHeaders.WellKnownHeader - Location = ... # type: QHttpHeaders.WellKnownHeader - LockToken = ... # type: QHttpHeaders.WellKnownHeader - MaxForwards = ... # type: QHttpHeaders.WellKnownHeader - MementoDatetime = ... # type: QHttpHeaders.WellKnownHeader - Meter = ... # type: QHttpHeaders.WellKnownHeader - MIMEVersion = ... # type: QHttpHeaders.WellKnownHeader - Negotiate = ... # type: QHttpHeaders.WellKnownHeader - NEL = ... # type: QHttpHeaders.WellKnownHeader - ODataEntityId = ... # type: QHttpHeaders.WellKnownHeader - ODataIsolation = ... # type: QHttpHeaders.WellKnownHeader - ODataMaxVersion = ... # type: QHttpHeaders.WellKnownHeader - ODataVersion = ... # type: QHttpHeaders.WellKnownHeader - OptionalWWWAuthenticate = ... # type: QHttpHeaders.WellKnownHeader - OrderingType = ... # type: QHttpHeaders.WellKnownHeader - Origin = ... # type: QHttpHeaders.WellKnownHeader - OriginAgentCluster = ... # type: QHttpHeaders.WellKnownHeader - OSCORE = ... # type: QHttpHeaders.WellKnownHeader - OSLCCoreVersion = ... # type: QHttpHeaders.WellKnownHeader - Overwrite = ... # type: QHttpHeaders.WellKnownHeader - PingFrom = ... # type: QHttpHeaders.WellKnownHeader - PingTo = ... # type: QHttpHeaders.WellKnownHeader - Position = ... # type: QHttpHeaders.WellKnownHeader - Prefer = ... # type: QHttpHeaders.WellKnownHeader - PreferenceApplied = ... # type: QHttpHeaders.WellKnownHeader - Priority = ... # type: QHttpHeaders.WellKnownHeader - ProxyAuthenticate = ... # type: QHttpHeaders.WellKnownHeader - ProxyAuthenticationInfo = ... # type: QHttpHeaders.WellKnownHeader - ProxyAuthorization = ... # type: QHttpHeaders.WellKnownHeader - ProxyStatus = ... # type: QHttpHeaders.WellKnownHeader - PublicKeyPins = ... # type: QHttpHeaders.WellKnownHeader - PublicKeyPinsReportOnly = ... # type: QHttpHeaders.WellKnownHeader - Range = ... # type: QHttpHeaders.WellKnownHeader - RedirectRef = ... # type: QHttpHeaders.WellKnownHeader - Referer = ... # type: QHttpHeaders.WellKnownHeader - Refresh = ... # type: QHttpHeaders.WellKnownHeader - ReplayNonce = ... # type: QHttpHeaders.WellKnownHeader - ReprDigest = ... # type: QHttpHeaders.WellKnownHeader - RetryAfter = ... # type: QHttpHeaders.WellKnownHeader - ScheduleReply = ... # type: QHttpHeaders.WellKnownHeader - ScheduleTag = ... # type: QHttpHeaders.WellKnownHeader - SecPurpose = ... # type: QHttpHeaders.WellKnownHeader - SecTokenBinding = ... # type: QHttpHeaders.WellKnownHeader - SecWebSocketAccept = ... # type: QHttpHeaders.WellKnownHeader - SecWebSocketExtensions = ... # type: QHttpHeaders.WellKnownHeader - SecWebSocketKey = ... # type: QHttpHeaders.WellKnownHeader - SecWebSocketProtocol = ... # type: QHttpHeaders.WellKnownHeader - SecWebSocketVersion = ... # type: QHttpHeaders.WellKnownHeader - Server = ... # type: QHttpHeaders.WellKnownHeader - ServerTiming = ... # type: QHttpHeaders.WellKnownHeader - SetCookie = ... # type: QHttpHeaders.WellKnownHeader - Signature = ... # type: QHttpHeaders.WellKnownHeader - SignatureInput = ... # type: QHttpHeaders.WellKnownHeader - SLUG = ... # type: QHttpHeaders.WellKnownHeader - SoapAction = ... # type: QHttpHeaders.WellKnownHeader - StatusURI = ... # type: QHttpHeaders.WellKnownHeader - StrictTransportSecurity = ... # type: QHttpHeaders.WellKnownHeader - Sunset = ... # type: QHttpHeaders.WellKnownHeader - SurrogateCapability = ... # type: QHttpHeaders.WellKnownHeader - SurrogateControl = ... # type: QHttpHeaders.WellKnownHeader - TCN = ... # type: QHttpHeaders.WellKnownHeader - TE = ... # type: QHttpHeaders.WellKnownHeader - Timeout = ... # type: QHttpHeaders.WellKnownHeader - Topic = ... # type: QHttpHeaders.WellKnownHeader - Traceparent = ... # type: QHttpHeaders.WellKnownHeader - Tracestate = ... # type: QHttpHeaders.WellKnownHeader - Trailer = ... # type: QHttpHeaders.WellKnownHeader - TransferEncoding = ... # type: QHttpHeaders.WellKnownHeader - TTL = ... # type: QHttpHeaders.WellKnownHeader - Upgrade = ... # type: QHttpHeaders.WellKnownHeader - Urgency = ... # type: QHttpHeaders.WellKnownHeader - UserAgent = ... # type: QHttpHeaders.WellKnownHeader - VariantVary = ... # type: QHttpHeaders.WellKnownHeader - Vary = ... # type: QHttpHeaders.WellKnownHeader - Via = ... # type: QHttpHeaders.WellKnownHeader - WantContentDigest = ... # type: QHttpHeaders.WellKnownHeader - WantReprDigest = ... # type: QHttpHeaders.WellKnownHeader - WWWAuthenticate = ... # type: QHttpHeaders.WellKnownHeader - XContentTypeOptions = ... # type: QHttpHeaders.WellKnownHeader - XFrameOptions = ... # type: QHttpHeaders.WellKnownHeader - AcceptCharset = ... # type: QHttpHeaders.WellKnownHeader - CPEPInfo = ... # type: QHttpHeaders.WellKnownHeader - Pragma = ... # type: QHttpHeaders.WellKnownHeader - ProtocolInfo = ... # type: QHttpHeaders.WellKnownHeader - ProtocolQuery = ... # type: QHttpHeaders.WellKnownHeader - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHttpHeaders') -> None: ... - - def toListOfPairs(self) -> typing.List[typing.Tuple[QtCore.QByteArray, QtCore.QByteArray]]: ... - @staticmethod - def fromListOfPairs(headers: typing.Iterable[typing.Tuple[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]]]) -> 'QHttpHeaders': ... - @staticmethod - def wellKnownHeaderName(name: 'QHttpHeaders.WellKnownHeader') -> QtCore.QByteArray: ... - def isEmpty(self) -> bool: ... - def reserve(self, size: int) -> None: ... - def size(self) -> int: ... - @typing.overload - def combinedValue(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> QtCore.QByteArray: ... - @typing.overload - def combinedValue(self, name: 'QHttpHeaders.WellKnownHeader') -> QtCore.QByteArray: ... - def nameAt(self, i: int) -> str: ... - def valueAt(self, i: int) -> QtCore.QByteArray: ... - @typing.overload - def values(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> typing.List[QtCore.QByteArray]: ... - @typing.overload - def values(self, name: 'QHttpHeaders.WellKnownHeader') -> typing.List[QtCore.QByteArray]: ... - @typing.overload - def value(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], defaultValue: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> QtCore.QByteArray: ... - @typing.overload - def value(self, name: 'QHttpHeaders.WellKnownHeader', defaultValue: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> QtCore.QByteArray: ... - def removeAt(self, i: int) -> None: ... - @typing.overload - def removeAll(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - @typing.overload - def removeAll(self, name: 'QHttpHeaders.WellKnownHeader') -> None: ... - def clear(self) -> None: ... - @typing.overload - def contains(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def contains(self, name: 'QHttpHeaders.WellKnownHeader') -> bool: ... - @typing.overload - def replace(self, i: int, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], newValue: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def replace(self, i: int, name: 'QHttpHeaders.WellKnownHeader', newValue: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def insert(self, i: int, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], value: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def insert(self, i: int, name: 'QHttpHeaders.WellKnownHeader', value: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def append(self, name: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], value: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - @typing.overload - def append(self, name: 'QHttpHeaders.WellKnownHeader', value: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - def swap(self, other: 'QHttpHeaders') -> None: ... - - -class QHttpPart(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QHttpPart') -> None: ... - - def swap(self, other: 'QHttpPart') -> None: ... - def setBodyDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def setBody(self, body: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], headerValue: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QHttpMultiPart(QtCore.QObject): - - class ContentType(enum.Enum): - MixedType = ... # type: QHttpMultiPart.ContentType - RelatedType = ... # type: QHttpMultiPart.ContentType - FormDataType = ... # type: QHttpMultiPart.ContentType - AlternativeType = ... # type: QHttpMultiPart.ContentType - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, contentType: 'QHttpMultiPart.ContentType', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setBoundary(self, boundary: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def boundary(self) -> QtCore.QByteArray: ... - def setContentType(self, contentType: 'QHttpMultiPart.ContentType') -> None: ... - def append(self, httpPart: QHttpPart) -> None: ... - - -class QLocalServer(QtCore.QObject): - - class SocketOption(enum.Flag): - UserAccessOption = ... # type: QLocalServer.SocketOption - GroupAccessOption = ... # type: QLocalServer.SocketOption - OtherAccessOption = ... # type: QLocalServer.SocketOption - WorldAccessOption = ... # type: QLocalServer.SocketOption - AbstractNamespaceOption = ... # type: QLocalServer.SocketOption - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def listenBacklogSize(self) -> int: ... - def setListenBacklogSize(self, size: int) -> None: ... - def socketDescriptor(self) -> PyQt6.sip.voidptr: ... - def socketOptions(self) -> 'QLocalServer.SocketOption': ... - def setSocketOptions(self, options: 'QLocalServer.SocketOption') -> None: ... - def incomingConnection(self, socketDescriptor: PyQt6.sip.voidptr) -> None: ... - newConnection: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def removeServer(name: typing.Optional[str]) -> bool: ... - def waitForNewConnection(self, msecs: int = ...) -> typing.Tuple[bool, typing.Optional[bool]]: ... - def setMaxPendingConnections(self, numConnections: int) -> None: ... - def serverError(self) -> QAbstractSocket.SocketError: ... - def fullServerName(self) -> str: ... - def serverName(self) -> str: ... - def nextPendingConnection(self) -> typing.Optional['QLocalSocket']: ... - def maxPendingConnections(self) -> int: ... - @typing.overload - def listen(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def listen(self, socketDescriptor: PyQt6.sip.voidptr) -> bool: ... - def isListening(self) -> bool: ... - def hasPendingConnections(self) -> bool: ... - def errorString(self) -> str: ... - def close(self) -> None: ... - - -class QLocalSocket(QtCore.QIODevice): - - class SocketOption(enum.Flag): - NoOptions = ... # type: QLocalSocket.SocketOption - AbstractNamespaceOption = ... # type: QLocalSocket.SocketOption - - class LocalSocketState(enum.Enum): - UnconnectedState = ... # type: QLocalSocket.LocalSocketState - ConnectingState = ... # type: QLocalSocket.LocalSocketState - ConnectedState = ... # type: QLocalSocket.LocalSocketState - ClosingState = ... # type: QLocalSocket.LocalSocketState - - class LocalSocketError(enum.Enum): - ConnectionRefusedError = ... # type: QLocalSocket.LocalSocketError - PeerClosedError = ... # type: QLocalSocket.LocalSocketError - ServerNotFoundError = ... # type: QLocalSocket.LocalSocketError - SocketAccessError = ... # type: QLocalSocket.LocalSocketError - SocketResourceError = ... # type: QLocalSocket.LocalSocketError - SocketTimeoutError = ... # type: QLocalSocket.LocalSocketError - DatagramTooLargeError = ... # type: QLocalSocket.LocalSocketError - ConnectionError = ... # type: QLocalSocket.LocalSocketError - UnsupportedSocketOperationError = ... # type: QLocalSocket.LocalSocketError - OperationError = ... # type: QLocalSocket.LocalSocketError - UnknownSocketError = ... # type: QLocalSocket.LocalSocketError - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def readLineData(self, maxlen: int) -> bytes: ... - def socketOptions(self) -> 'QLocalSocket.SocketOption': ... - def setSocketOptions(self, option: 'QLocalSocket.SocketOption') -> None: ... - def skipData(self, maxSize: int) -> int: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readData(self, maxlen: int) -> bytes: ... - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - connected: typing.ClassVar[QtCore.pyqtSignal] - def waitForReadyRead(self, msecs: int = ...) -> bool: ... - def waitForDisconnected(self, msecs: int = ...) -> bool: ... - def waitForConnected(self, msecs: int = ...) -> bool: ... - def waitForBytesWritten(self, msecs: int = ...) -> bool: ... - def state(self) -> 'QLocalSocket.LocalSocketState': ... - def socketDescriptor(self) -> PyQt6.sip.voidptr: ... - def setSocketDescriptor(self, socketDescriptor: PyQt6.sip.voidptr, state: 'QLocalSocket.LocalSocketState' = ..., mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> bool: ... - def setReadBufferSize(self, size: int) -> None: ... - def readBufferSize(self) -> int: ... - def isValid(self) -> bool: ... - def flush(self) -> bool: ... - def error(self) -> 'QLocalSocket.LocalSocketError': ... - def close(self) -> None: ... - def canReadLine(self) -> bool: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def isSequential(self) -> bool: ... - def abort(self) -> None: ... - def fullServerName(self) -> str: ... - def setServerName(self, name: typing.Optional[str]) -> None: ... - def serverName(self) -> str: ... - def open(self, mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> bool: ... - def disconnectFromServer(self) -> None: ... - @typing.overload - def connectToServer(self, name: typing.Optional[str], mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - @typing.overload - def connectToServer(self, mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> None: ... - - -class QNetworkAccessManager(QtCore.QObject): - - class Operation(enum.Enum): - HeadOperation = ... # type: QNetworkAccessManager.Operation - GetOperation = ... # type: QNetworkAccessManager.Operation - PutOperation = ... # type: QNetworkAccessManager.Operation - PostOperation = ... # type: QNetworkAccessManager.Operation - DeleteOperation = ... # type: QNetworkAccessManager.Operation - CustomOperation = ... # type: QNetworkAccessManager.Operation - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setTransferTimeout(self, timeout: int = ...) -> None: ... - def transferTimeout(self) -> int: ... - def setAutoDeleteReplies(self, autoDelete: bool) -> None: ... - def autoDeleteReplies(self) -> bool: ... - def isStrictTransportSecurityStoreEnabled(self) -> bool: ... - def enableStrictTransportSecurityStore(self, enabled: bool, storeDir: typing.Optional[str] = ...) -> None: ... - def redirectPolicy(self) -> 'QNetworkRequest.RedirectPolicy': ... - def setRedirectPolicy(self, policy: 'QNetworkRequest.RedirectPolicy') -> None: ... - def strictTransportSecurityHosts(self) -> typing.List[QHstsPolicy]: ... - def addStrictTransportSecurityHosts(self, knownHosts: typing.Iterable[QHstsPolicy]) -> None: ... - def isStrictTransportSecurityEnabled(self) -> bool: ... - def setStrictTransportSecurityEnabled(self, enabled: bool) -> None: ... - def clearConnectionCache(self) -> None: ... - def supportedSchemesImplementation(self) -> typing.List[str]: ... - def connectToHost(self, hostName: typing.Optional[str], port: int = ...) -> None: ... - @typing.overload - def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int = ..., sslConfiguration: 'QSslConfiguration' = ...) -> None: ... - @typing.overload - def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, sslConfiguration: 'QSslConfiguration', peerName: typing.Optional[str]) -> None: ... - def supportedSchemes(self) -> typing.List[str]: ... - def clearAccessCache(self) -> None: ... - @typing.overload - def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], data: typing.Optional[QtCore.QIODevice] = ...) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... - def deleteResource(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... - def setCache(self, cache: typing.Optional[QAbstractNetworkCache]) -> None: ... - def cache(self) -> typing.Optional[QAbstractNetworkCache]: ... - def setProxyFactory(self, factory: typing.Optional['QNetworkProxyFactory']) -> None: ... - def proxyFactory(self) -> typing.Optional['QNetworkProxyFactory']: ... - def createRequest(self, op: 'QNetworkAccessManager.Operation', request: 'QNetworkRequest', device: typing.Optional[QtCore.QIODevice] = ...) -> 'QNetworkReply': ... - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - encrypted: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - authenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def put(self, request: 'QNetworkRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def put(self, request: 'QNetworkRequest', data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def put(self, request: 'QNetworkRequest', multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def post(self, request: 'QNetworkRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def post(self, request: 'QNetworkRequest', data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def post(self, request: 'QNetworkRequest', multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def get(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... - @typing.overload - def get(self, request: 'QNetworkRequest', data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.Optional['QNetworkReply']: ... - @typing.overload - def get(self, request: 'QNetworkRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QNetworkReply']: ... - def head(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... - def setCookieJar(self, cookieJar: typing.Optional['QNetworkCookieJar']) -> None: ... - def cookieJar(self) -> typing.Optional['QNetworkCookieJar']: ... - def setProxy(self, proxy: 'QNetworkProxy') -> None: ... - def proxy(self) -> 'QNetworkProxy': ... - - -class QNetworkCookie(PyQt6.sip.simplewrapper): - - class SameSite(enum.Enum): - Default = ... # type: QNetworkCookie.SameSite - None_ = ... # type: QNetworkCookie.SameSite - Lax = ... # type: QNetworkCookie.SameSite - Strict = ... # type: QNetworkCookie.SameSite - - class RawForm(enum.Enum): - NameAndValueOnly = ... # type: QNetworkCookie.RawForm - Full = ... # type: QNetworkCookie.RawForm - - @typing.overload - def __init__(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ..., value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkCookie') -> None: ... - - def setSameSitePolicy(self, sameSite: 'QNetworkCookie.SameSite') -> None: ... - def sameSitePolicy(self) -> 'QNetworkCookie.SameSite': ... - def normalize(self, url: QtCore.QUrl) -> None: ... - def hasSameIdentifier(self, other: 'QNetworkCookie') -> bool: ... - def swap(self, other: 'QNetworkCookie') -> None: ... - def setHttpOnly(self, enable: bool) -> None: ... - def isHttpOnly(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def parseCookies(cookieString: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List['QNetworkCookie']: ... - def toRawForm(self, form: 'QNetworkCookie.RawForm' = ...) -> QtCore.QByteArray: ... - def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def value(self) -> QtCore.QByteArray: ... - def setName(self, cookieName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def name(self) -> QtCore.QByteArray: ... - def setPath(self, path: typing.Optional[str]) -> None: ... - def path(self) -> str: ... - def setDomain(self, domain: typing.Optional[str]) -> None: ... - def domain(self) -> str: ... - def setExpirationDate(self, date: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def expirationDate(self) -> QtCore.QDateTime: ... - def isSessionCookie(self) -> bool: ... - def setSecure(self, enable: bool) -> None: ... - def isSecure(self) -> bool: ... - - -class QNetworkCookieJar(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def validateCookie(self, cookie: QNetworkCookie, url: QtCore.QUrl) -> bool: ... - def allCookies(self) -> typing.List[QNetworkCookie]: ... - def setAllCookies(self, cookieList: typing.Iterable[QNetworkCookie]) -> None: ... - def deleteCookie(self, cookie: QNetworkCookie) -> bool: ... - def updateCookie(self, cookie: QNetworkCookie) -> bool: ... - def insertCookie(self, cookie: QNetworkCookie) -> bool: ... - def setCookiesFromUrl(self, cookieList: typing.Iterable[QNetworkCookie], url: QtCore.QUrl) -> bool: ... - def cookiesForUrl(self, url: QtCore.QUrl) -> typing.List[QNetworkCookie]: ... - - -class QNetworkDatagram(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], destinationAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress] = ..., port: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkDatagram') -> None: ... - - def makeReply(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> 'QNetworkDatagram': ... - def setData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def data(self) -> QtCore.QByteArray: ... - def setHopLimit(self, count: int) -> None: ... - def hopLimit(self) -> int: ... - def setDestination(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int) -> None: ... - def setSender(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int = ...) -> None: ... - def destinationPort(self) -> int: ... - def senderPort(self) -> int: ... - def destinationAddress(self) -> QHostAddress: ... - def senderAddress(self) -> QHostAddress: ... - def setInterfaceIndex(self, index: int) -> None: ... - def interfaceIndex(self) -> int: ... - def isNull(self) -> bool: ... - def isValid(self) -> bool: ... - def clear(self) -> None: ... - def swap(self, other: 'QNetworkDatagram') -> None: ... - - -class QNetworkDiskCache(QAbstractNetworkCache): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def expire(self) -> int: ... - def clear(self) -> None: ... - def fileMetaData(self, fileName: typing.Optional[str]) -> QNetworkCacheMetaData: ... - def insert(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - def prepare(self, metaData: QNetworkCacheMetaData) -> typing.Optional[QtCore.QIODevice]: ... - def remove(self, url: QtCore.QUrl) -> bool: ... - def data(self, url: QtCore.QUrl) -> typing.Optional[QtCore.QIODevice]: ... - def updateMetaData(self, metaData: QNetworkCacheMetaData) -> None: ... - def metaData(self, url: QtCore.QUrl) -> QNetworkCacheMetaData: ... - def cacheSize(self) -> int: ... - def setMaximumCacheSize(self, size: int) -> None: ... - def maximumCacheSize(self) -> int: ... - def setCacheDirectory(self, cacheDir: typing.Optional[str]) -> None: ... - def cacheDirectory(self) -> str: ... - - -class QNetworkInformation(QtCore.QObject): - - class TransportMedium(enum.Enum): - Unknown = ... # type: QNetworkInformation.TransportMedium - Ethernet = ... # type: QNetworkInformation.TransportMedium - Cellular = ... # type: QNetworkInformation.TransportMedium - WiFi = ... # type: QNetworkInformation.TransportMedium - Bluetooth = ... # type: QNetworkInformation.TransportMedium - - class Feature(enum.Enum): - Reachability = ... # type: QNetworkInformation.Feature - CaptivePortal = ... # type: QNetworkInformation.Feature - TransportMedium = ... # type: QNetworkInformation.Feature - Metered = ... # type: QNetworkInformation.Feature - - class Reachability(enum.Enum): - Unknown = ... # type: QNetworkInformation.Reachability - Disconnected = ... # type: QNetworkInformation.Reachability - Local = ... # type: QNetworkInformation.Reachability - Site = ... # type: QNetworkInformation.Reachability - Online = ... # type: QNetworkInformation.Reachability - - @staticmethod - def loadBackendByFeatures(features: 'QNetworkInformation.Feature') -> bool: ... - @staticmethod - def loadBackendByName(backend: str) -> bool: ... - isMeteredChanged: typing.ClassVar[QtCore.pyqtSignal] - transportMediumChanged: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def loadDefaultBackend() -> bool: ... - def supportedFeatures(self) -> 'QNetworkInformation.Feature': ... - def isMetered(self) -> bool: ... - def transportMedium(self) -> 'QNetworkInformation.TransportMedium': ... - isBehindCaptivePortalChanged: typing.ClassVar[QtCore.pyqtSignal] - def isBehindCaptivePortal(self) -> bool: ... - reachabilityChanged: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def instance() -> typing.Optional['QNetworkInformation']: ... - @staticmethod - def availableBackends() -> typing.List[str]: ... - @typing.overload - @staticmethod - def load(backend: str) -> bool: ... - @typing.overload - @staticmethod - def load(features: 'QNetworkInformation.Feature') -> bool: ... - def supports(self, features: 'QNetworkInformation.Feature') -> bool: ... - def backendName(self) -> str: ... - def reachability(self) -> 'QNetworkInformation.Reachability': ... - - -class QNetworkAddressEntry(PyQt6.sip.simplewrapper): - - class DnsEligibilityStatus(enum.Enum): - DnsEligibilityUnknown = ... # type: QNetworkAddressEntry.DnsEligibilityStatus - DnsIneligible = ... # type: QNetworkAddressEntry.DnsEligibilityStatus - DnsEligible = ... # type: QNetworkAddressEntry.DnsEligibilityStatus - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkAddressEntry') -> None: ... - - def isTemporary(self) -> bool: ... - def isPermanent(self) -> bool: ... - def clearAddressLifetime(self) -> None: ... - def setAddressLifetime(self, preferred: QtCore.QDeadlineTimer, validity: QtCore.QDeadlineTimer) -> None: ... - def validityLifetime(self) -> QtCore.QDeadlineTimer: ... - def preferredLifetime(self) -> QtCore.QDeadlineTimer: ... - def isLifetimeKnown(self) -> bool: ... - def setDnsEligibility(self, status: 'QNetworkAddressEntry.DnsEligibilityStatus') -> None: ... - def dnsEligibility(self) -> 'QNetworkAddressEntry.DnsEligibilityStatus': ... - def swap(self, other: 'QNetworkAddressEntry') -> None: ... - def setPrefixLength(self, length: int) -> None: ... - def prefixLength(self) -> int: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def setBroadcast(self, newBroadcast: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... - def broadcast(self) -> QHostAddress: ... - def setNetmask(self, newNetmask: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... - def netmask(self) -> QHostAddress: ... - def setIp(self, newIp: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... - def ip(self) -> QHostAddress: ... - - -class QNetworkInterface(PyQt6.sip.simplewrapper): - - class InterfaceType(enum.Enum): - Unknown = ... # type: QNetworkInterface.InterfaceType - Loopback = ... # type: QNetworkInterface.InterfaceType - Virtual = ... # type: QNetworkInterface.InterfaceType - Ethernet = ... # type: QNetworkInterface.InterfaceType - Slip = ... # type: QNetworkInterface.InterfaceType - CanBus = ... # type: QNetworkInterface.InterfaceType - Ppp = ... # type: QNetworkInterface.InterfaceType - Fddi = ... # type: QNetworkInterface.InterfaceType - Wifi = ... # type: QNetworkInterface.InterfaceType - Ieee80211 = ... # type: QNetworkInterface.InterfaceType - Phonet = ... # type: QNetworkInterface.InterfaceType - Ieee802154 = ... # type: QNetworkInterface.InterfaceType - SixLoWPAN = ... # type: QNetworkInterface.InterfaceType - Ieee80216 = ... # type: QNetworkInterface.InterfaceType - Ieee1394 = ... # type: QNetworkInterface.InterfaceType - - class InterfaceFlag(enum.Flag): - IsUp = ... # type: QNetworkInterface.InterfaceFlag - IsRunning = ... # type: QNetworkInterface.InterfaceFlag - CanBroadcast = ... # type: QNetworkInterface.InterfaceFlag - IsLoopBack = ... # type: QNetworkInterface.InterfaceFlag - IsPointToPoint = ... # type: QNetworkInterface.InterfaceFlag - CanMulticast = ... # type: QNetworkInterface.InterfaceFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkInterface') -> None: ... - - def maximumTransmissionUnit(self) -> int: ... - def type(self) -> 'QNetworkInterface.InterfaceType': ... - @staticmethod - def interfaceNameFromIndex(index: int) -> str: ... - @staticmethod - def interfaceIndexFromName(name: typing.Optional[str]) -> int: ... - def swap(self, other: 'QNetworkInterface') -> None: ... - def humanReadableName(self) -> str: ... - def index(self) -> int: ... - @staticmethod - def allAddresses() -> typing.List[QHostAddress]: ... - @staticmethod - def allInterfaces() -> typing.List['QNetworkInterface']: ... - @staticmethod - def interfaceFromIndex(index: int) -> 'QNetworkInterface': ... - @staticmethod - def interfaceFromName(name: typing.Optional[str]) -> 'QNetworkInterface': ... - def addressEntries(self) -> typing.List[QNetworkAddressEntry]: ... - def hardwareAddress(self) -> str: ... - def flags(self) -> 'QNetworkInterface.InterfaceFlag': ... - def name(self) -> str: ... - def isValid(self) -> bool: ... - - -class QNetworkProxy(PyQt6.sip.simplewrapper): - - class Capability(enum.Flag): - TunnelingCapability = ... # type: QNetworkProxy.Capability - ListeningCapability = ... # type: QNetworkProxy.Capability - UdpTunnelingCapability = ... # type: QNetworkProxy.Capability - CachingCapability = ... # type: QNetworkProxy.Capability - HostNameLookupCapability = ... # type: QNetworkProxy.Capability - SctpTunnelingCapability = ... # type: QNetworkProxy.Capability - SctpListeningCapability = ... # type: QNetworkProxy.Capability - - class ProxyType(enum.Enum): - DefaultProxy = ... # type: QNetworkProxy.ProxyType - Socks5Proxy = ... # type: QNetworkProxy.ProxyType - NoProxy = ... # type: QNetworkProxy.ProxyType - HttpProxy = ... # type: QNetworkProxy.ProxyType - HttpCachingProxy = ... # type: QNetworkProxy.ProxyType - FtpCachingProxy = ... # type: QNetworkProxy.ProxyType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, type: 'QNetworkProxy.ProxyType', hostName: typing.Optional[str] = ..., port: int = ..., user: typing.Optional[str] = ..., password: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkProxy') -> None: ... - - def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def rawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> QtCore.QByteArray: ... - def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... - def hasRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... - def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... - def swap(self, other: 'QNetworkProxy') -> None: ... - def capabilities(self) -> 'QNetworkProxy.Capability': ... - def setCapabilities(self, capab: 'QNetworkProxy.Capability') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isTransparentProxy(self) -> bool: ... - def isCachingProxy(self) -> bool: ... - @staticmethod - def applicationProxy() -> 'QNetworkProxy': ... - @staticmethod - def setApplicationProxy(proxy: 'QNetworkProxy') -> None: ... - def port(self) -> int: ... - def setPort(self, port: int) -> None: ... - def hostName(self) -> str: ... - def setHostName(self, hostName: typing.Optional[str]) -> None: ... - def password(self) -> str: ... - def setPassword(self, password: typing.Optional[str]) -> None: ... - def user(self) -> str: ... - def setUser(self, userName: typing.Optional[str]) -> None: ... - def type(self) -> 'QNetworkProxy.ProxyType': ... - def setType(self, type: 'QNetworkProxy.ProxyType') -> None: ... - - -class QNetworkProxyQuery(PyQt6.sip.simplewrapper): - - class QueryType(enum.Enum): - TcpSocket = ... # type: QNetworkProxyQuery.QueryType - UdpSocket = ... # type: QNetworkProxyQuery.QueryType - TcpServer = ... # type: QNetworkProxyQuery.QueryType - UrlRequest = ... # type: QNetworkProxyQuery.QueryType - SctpSocket = ... # type: QNetworkProxyQuery.QueryType - SctpServer = ... # type: QNetworkProxyQuery.QueryType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, requestUrl: QtCore.QUrl, type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... - @typing.overload - def __init__(self, hostname: typing.Optional[str], port: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... - @typing.overload - def __init__(self, bindPort: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkProxyQuery') -> None: ... - - def swap(self, other: 'QNetworkProxyQuery') -> None: ... - def setUrl(self, url: QtCore.QUrl) -> None: ... - def url(self) -> QtCore.QUrl: ... - def setProtocolTag(self, protocolTag: typing.Optional[str]) -> None: ... - def protocolTag(self) -> str: ... - def setLocalPort(self, port: int) -> None: ... - def localPort(self) -> int: ... - def setPeerHostName(self, hostname: typing.Optional[str]) -> None: ... - def peerHostName(self) -> str: ... - def setPeerPort(self, port: int) -> None: ... - def peerPort(self) -> int: ... - def setQueryType(self, type: 'QNetworkProxyQuery.QueryType') -> None: ... - def queryType(self) -> 'QNetworkProxyQuery.QueryType': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QNetworkProxyFactory(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QNetworkProxyFactory') -> None: ... - - @staticmethod - def usesSystemConfiguration() -> bool: ... - @staticmethod - def setUseSystemConfiguration(enable: bool) -> None: ... - @staticmethod - def systemProxyForQuery(query: QNetworkProxyQuery = ...) -> typing.List[QNetworkProxy]: ... - @staticmethod - def proxyForQuery(query: QNetworkProxyQuery) -> typing.List[QNetworkProxy]: ... - @staticmethod - def setApplicationProxyFactory(factory: typing.Optional['QNetworkProxyFactory']) -> None: ... - def queryProxy(self, query: QNetworkProxyQuery = ...) -> typing.List[QNetworkProxy]: ... - - -class QNetworkReply(QtCore.QIODevice): - - class NetworkError(enum.Enum): - NoError = ... # type: QNetworkReply.NetworkError - ConnectionRefusedError = ... # type: QNetworkReply.NetworkError - RemoteHostClosedError = ... # type: QNetworkReply.NetworkError - HostNotFoundError = ... # type: QNetworkReply.NetworkError - TimeoutError = ... # type: QNetworkReply.NetworkError - OperationCanceledError = ... # type: QNetworkReply.NetworkError - SslHandshakeFailedError = ... # type: QNetworkReply.NetworkError - UnknownNetworkError = ... # type: QNetworkReply.NetworkError - ProxyConnectionRefusedError = ... # type: QNetworkReply.NetworkError - ProxyConnectionClosedError = ... # type: QNetworkReply.NetworkError - ProxyNotFoundError = ... # type: QNetworkReply.NetworkError - ProxyTimeoutError = ... # type: QNetworkReply.NetworkError - ProxyAuthenticationRequiredError = ... # type: QNetworkReply.NetworkError - UnknownProxyError = ... # type: QNetworkReply.NetworkError - ContentAccessDenied = ... # type: QNetworkReply.NetworkError - ContentOperationNotPermittedError = ... # type: QNetworkReply.NetworkError - ContentNotFoundError = ... # type: QNetworkReply.NetworkError - AuthenticationRequiredError = ... # type: QNetworkReply.NetworkError - UnknownContentError = ... # type: QNetworkReply.NetworkError - ProtocolUnknownError = ... # type: QNetworkReply.NetworkError - ProtocolInvalidOperationError = ... # type: QNetworkReply.NetworkError - ProtocolFailure = ... # type: QNetworkReply.NetworkError - ContentReSendError = ... # type: QNetworkReply.NetworkError - TemporaryNetworkFailureError = ... # type: QNetworkReply.NetworkError - NetworkSessionFailedError = ... # type: QNetworkReply.NetworkError - BackgroundRequestNotAllowedError = ... # type: QNetworkReply.NetworkError - ContentConflictError = ... # type: QNetworkReply.NetworkError - ContentGoneError = ... # type: QNetworkReply.NetworkError - InternalServerError = ... # type: QNetworkReply.NetworkError - OperationNotImplementedError = ... # type: QNetworkReply.NetworkError - ServiceUnavailableError = ... # type: QNetworkReply.NetworkError - UnknownServerError = ... # type: QNetworkReply.NetworkError - TooManyRedirectsError = ... # type: QNetworkReply.NetworkError - InsecureRedirectError = ... # type: QNetworkReply.NetworkError - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - requestSent: typing.ClassVar[QtCore.pyqtSignal] - socketStartedConnecting: typing.ClassVar[QtCore.pyqtSignal] - def ignoreSslErrorsImplementation(self, a0: typing.Iterable['QSslError']) -> None: ... - def setSslConfigurationImplementation(self, a0: 'QSslConfiguration') -> None: ... - def sslConfigurationImplementation(self, a0: 'QSslConfiguration') -> None: ... - def rawHeaderPairs(self) -> typing.List[typing.Tuple[QtCore.QByteArray, QtCore.QByteArray]]: ... - def isRunning(self) -> bool: ... - def isFinished(self) -> bool: ... - def setFinished(self, finished: bool) -> None: ... - def setAttribute(self, code: 'QNetworkRequest.Attribute', value: typing.Any) -> None: ... - def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... - def setUrl(self, url: QtCore.QUrl) -> None: ... - def setError(self, errorCode: 'QNetworkReply.NetworkError', errorString: typing.Optional[str]) -> None: ... - def setRequest(self, request: 'QNetworkRequest') -> None: ... - def setOperation(self, operation: QNetworkAccessManager.Operation) -> None: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - redirectAllowed: typing.ClassVar[QtCore.pyqtSignal] - redirected: typing.ClassVar[QtCore.pyqtSignal] - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - downloadProgress: typing.ClassVar[QtCore.pyqtSignal] - uploadProgress: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - encrypted: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def ignoreSslErrors(self) -> None: ... - @typing.overload - def ignoreSslErrors(self, errors: typing.Iterable['QSslError']) -> None: ... - def setSslConfiguration(self, configuration: 'QSslConfiguration') -> None: ... - def sslConfiguration(self) -> 'QSslConfiguration': ... - def attribute(self, code: 'QNetworkRequest.Attribute') -> typing.Any: ... - def rawHeader(self, headerName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> QtCore.QByteArray: ... - def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... - def hasRawHeader(self, headerName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... - def url(self) -> QtCore.QUrl: ... - def error(self) -> 'QNetworkReply.NetworkError': ... - def request(self) -> 'QNetworkRequest': ... - def operation(self) -> QNetworkAccessManager.Operation: ... - def manager(self) -> typing.Optional[QNetworkAccessManager]: ... - def setReadBufferSize(self, size: int) -> None: ... - def readBufferSize(self) -> int: ... - def isSequential(self) -> bool: ... - def close(self) -> None: ... - def abort(self) -> None: ... - - -class QNetworkRequest(PyQt6.sip.simplewrapper): - - class TransferTimeoutConstant(enum.Enum): - DefaultTransferTimeoutConstant = ... # type: QNetworkRequest.TransferTimeoutConstant - - class RedirectPolicy(enum.Enum): - ManualRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy - NoLessSafeRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy - SameOriginRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy - UserVerifiedRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy - - class Priority(enum.Enum): - HighPriority = ... # type: QNetworkRequest.Priority - NormalPriority = ... # type: QNetworkRequest.Priority - LowPriority = ... # type: QNetworkRequest.Priority - - class LoadControl(enum.Enum): - Automatic = ... # type: QNetworkRequest.LoadControl - Manual = ... # type: QNetworkRequest.LoadControl - - class CacheLoadControl(enum.Enum): - AlwaysNetwork = ... # type: QNetworkRequest.CacheLoadControl - PreferNetwork = ... # type: QNetworkRequest.CacheLoadControl - PreferCache = ... # type: QNetworkRequest.CacheLoadControl - AlwaysCache = ... # type: QNetworkRequest.CacheLoadControl - - class Attribute(enum.Enum): - HttpStatusCodeAttribute = ... # type: QNetworkRequest.Attribute - HttpReasonPhraseAttribute = ... # type: QNetworkRequest.Attribute - RedirectionTargetAttribute = ... # type: QNetworkRequest.Attribute - ConnectionEncryptedAttribute = ... # type: QNetworkRequest.Attribute - CacheLoadControlAttribute = ... # type: QNetworkRequest.Attribute - CacheSaveControlAttribute = ... # type: QNetworkRequest.Attribute - SourceIsFromCacheAttribute = ... # type: QNetworkRequest.Attribute - DoNotBufferUploadDataAttribute = ... # type: QNetworkRequest.Attribute - HttpPipeliningAllowedAttribute = ... # type: QNetworkRequest.Attribute - HttpPipeliningWasUsedAttribute = ... # type: QNetworkRequest.Attribute - CustomVerbAttribute = ... # type: QNetworkRequest.Attribute - CookieLoadControlAttribute = ... # type: QNetworkRequest.Attribute - AuthenticationReuseAttribute = ... # type: QNetworkRequest.Attribute - CookieSaveControlAttribute = ... # type: QNetworkRequest.Attribute - BackgroundRequestAttribute = ... # type: QNetworkRequest.Attribute - EmitAllUploadProgressSignalsAttribute = ... # type: QNetworkRequest.Attribute - Http2AllowedAttribute = ... # type: QNetworkRequest.Attribute - Http2WasUsedAttribute = ... # type: QNetworkRequest.Attribute - OriginalContentLengthAttribute = ... # type: QNetworkRequest.Attribute - RedirectPolicyAttribute = ... # type: QNetworkRequest.Attribute - Http2DirectAttribute = ... # type: QNetworkRequest.Attribute - AutoDeleteReplyOnFinishAttribute = ... # type: QNetworkRequest.Attribute - ConnectionCacheExpiryTimeoutSecondsAttribute = ... # type: QNetworkRequest.Attribute - Http2CleartextAllowedAttribute = ... # type: QNetworkRequest.Attribute - UseCredentialsAttribute = ... # type: QNetworkRequest.Attribute - User = ... # type: QNetworkRequest.Attribute - UserMax = ... # type: QNetworkRequest.Attribute - - class KnownHeaders(enum.Enum): - ContentTypeHeader = ... # type: QNetworkRequest.KnownHeaders - ContentLengthHeader = ... # type: QNetworkRequest.KnownHeaders - LocationHeader = ... # type: QNetworkRequest.KnownHeaders - LastModifiedHeader = ... # type: QNetworkRequest.KnownHeaders - CookieHeader = ... # type: QNetworkRequest.KnownHeaders - SetCookieHeader = ... # type: QNetworkRequest.KnownHeaders - ContentDispositionHeader = ... # type: QNetworkRequest.KnownHeaders - UserAgentHeader = ... # type: QNetworkRequest.KnownHeaders - ServerHeader = ... # type: QNetworkRequest.KnownHeaders - IfModifiedSinceHeader = ... # type: QNetworkRequest.KnownHeaders - ETagHeader = ... # type: QNetworkRequest.KnownHeaders - IfMatchHeader = ... # type: QNetworkRequest.KnownHeaders - IfNoneMatchHeader = ... # type: QNetworkRequest.KnownHeaders - - @typing.overload - def __init__(self, url: QtCore.QUrl) -> None: ... - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNetworkRequest') -> None: ... - - def setDecompressedSafetyCheckThreshold(self, threshold: int) -> None: ... - def decompressedSafetyCheckThreshold(self) -> int: ... - def setTransferTimeout(self, timeout: int = ...) -> None: ... - def transferTimeout(self) -> int: ... - def setHttp2Configuration(self, configuration: QHttp2Configuration) -> None: ... - def setHttp1Configuration(self, configuration: QHttp1Configuration) -> None: ... - def http2Configuration(self) -> QHttp2Configuration: ... - def http1Configuration(self) -> QHttp1Configuration: ... - def setPeerVerifyName(self, peerName: typing.Optional[str]) -> None: ... - def peerVerifyName(self) -> str: ... - def setMaximumRedirectsAllowed(self, maximumRedirectsAllowed: int) -> None: ... - def maximumRedirectsAllowed(self) -> int: ... - def swap(self, other: 'QNetworkRequest') -> None: ... - def setPriority(self, priority: 'QNetworkRequest.Priority') -> None: ... - def priority(self) -> 'QNetworkRequest.Priority': ... - def originatingObject(self) -> typing.Optional[QtCore.QObject]: ... - def setOriginatingObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def setSslConfiguration(self, configuration: 'QSslConfiguration') -> None: ... - def sslConfiguration(self) -> 'QSslConfiguration': ... - def setAttribute(self, code: 'QNetworkRequest.Attribute', value: typing.Any) -> None: ... - def attribute(self, code: 'QNetworkRequest.Attribute', defaultValue: typing.Any = ...) -> typing.Any: ... - def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], value: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def rawHeader(self, headerName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> QtCore.QByteArray: ... - def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... - def hasRawHeader(self, headerName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> bool: ... - def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... - def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... - def setUrl(self, url: QtCore.QUrl) -> None: ... - def url(self) -> QtCore.QUrl: ... - - -class QOcspResponse(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QOcspResponse') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def swap(self, other: 'QOcspResponse') -> None: ... - def subject(self) -> 'QSslCertificate': ... - def responder(self) -> 'QSslCertificate': ... - def revocationReason(self) -> QOcspRevocationReason: ... - def certificateStatus(self) -> QOcspCertificateStatus: ... - - -class QPasswordDigestor(PyQt6.sip.simplewrapper): - - def deriveKeyPbkdf2(self, algorithm: QtCore.QCryptographicHash.Algorithm, password: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], salt: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], iterations: int, dkLen: int) -> QtCore.QByteArray: ... - def deriveKeyPbkdf1(self, algorithm: QtCore.QCryptographicHash.Algorithm, password: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], salt: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], iterations: int, dkLen: int) -> QtCore.QByteArray: ... - - -class QSsl(PyQt6.sip.simplewrapper): - - class SupportedFeature(enum.Enum): - CertificateVerification = ... # type: QSsl.SupportedFeature - ClientSideAlpn = ... # type: QSsl.SupportedFeature - ServerSideAlpn = ... # type: QSsl.SupportedFeature - Ocsp = ... # type: QSsl.SupportedFeature - Psk = ... # type: QSsl.SupportedFeature - SessionTicket = ... # type: QSsl.SupportedFeature - Alerts = ... # type: QSsl.SupportedFeature - - class ImplementedClass(enum.Enum): - Key = ... # type: QSsl.ImplementedClass - Certificate = ... # type: QSsl.ImplementedClass - Socket = ... # type: QSsl.ImplementedClass - DiffieHellman = ... # type: QSsl.ImplementedClass - EllipticCurve = ... # type: QSsl.ImplementedClass - Dtls = ... # type: QSsl.ImplementedClass - DtlsCookie = ... # type: QSsl.ImplementedClass - - class AlertType(enum.Enum): - CloseNotify = ... # type: QSsl.AlertType - UnexpectedMessage = ... # type: QSsl.AlertType - BadRecordMac = ... # type: QSsl.AlertType - RecordOverflow = ... # type: QSsl.AlertType - DecompressionFailure = ... # type: QSsl.AlertType - HandshakeFailure = ... # type: QSsl.AlertType - NoCertificate = ... # type: QSsl.AlertType - BadCertificate = ... # type: QSsl.AlertType - UnsupportedCertificate = ... # type: QSsl.AlertType - CertificateRevoked = ... # type: QSsl.AlertType - CertificateExpired = ... # type: QSsl.AlertType - CertificateUnknown = ... # type: QSsl.AlertType - IllegalParameter = ... # type: QSsl.AlertType - UnknownCa = ... # type: QSsl.AlertType - AccessDenied = ... # type: QSsl.AlertType - DecodeError = ... # type: QSsl.AlertType - DecryptError = ... # type: QSsl.AlertType - ExportRestriction = ... # type: QSsl.AlertType - ProtocolVersion = ... # type: QSsl.AlertType - InsufficientSecurity = ... # type: QSsl.AlertType - InternalError = ... # type: QSsl.AlertType - InappropriateFallback = ... # type: QSsl.AlertType - UserCancelled = ... # type: QSsl.AlertType - NoRenegotiation = ... # type: QSsl.AlertType - MissingExtension = ... # type: QSsl.AlertType - UnsupportedExtension = ... # type: QSsl.AlertType - CertificateUnobtainable = ... # type: QSsl.AlertType - UnrecognizedName = ... # type: QSsl.AlertType - BadCertificateStatusResponse = ... # type: QSsl.AlertType - BadCertificateHashValue = ... # type: QSsl.AlertType - UnknownPskIdentity = ... # type: QSsl.AlertType - CertificateRequired = ... # type: QSsl.AlertType - NoApplicationProtocol = ... # type: QSsl.AlertType - UnknownAlertMessage = ... # type: QSsl.AlertType - - class AlertLevel(enum.Enum): - Warning = ... # type: QSsl.AlertLevel - Fatal = ... # type: QSsl.AlertLevel - Unknown = ... # type: QSsl.AlertLevel - - class SslOption(enum.Flag): - SslOptionDisableEmptyFragments = ... # type: QSsl.SslOption - SslOptionDisableSessionTickets = ... # type: QSsl.SslOption - SslOptionDisableCompression = ... # type: QSsl.SslOption - SslOptionDisableServerNameIndication = ... # type: QSsl.SslOption - SslOptionDisableLegacyRenegotiation = ... # type: QSsl.SslOption - SslOptionDisableSessionSharing = ... # type: QSsl.SslOption - SslOptionDisableSessionPersistence = ... # type: QSsl.SslOption - SslOptionDisableServerCipherPreference = ... # type: QSsl.SslOption - - class SslProtocol(enum.Enum): - UnknownProtocol = ... # type: QSsl.SslProtocol - TlsV1_0 = ... # type: QSsl.SslProtocol - TlsV1_0OrLater = ... # type: QSsl.SslProtocol - TlsV1_1 = ... # type: QSsl.SslProtocol - TlsV1_1OrLater = ... # type: QSsl.SslProtocol - TlsV1_2 = ... # type: QSsl.SslProtocol - TlsV1_2OrLater = ... # type: QSsl.SslProtocol - AnyProtocol = ... # type: QSsl.SslProtocol - SecureProtocols = ... # type: QSsl.SslProtocol - DtlsV1_0 = ... # type: QSsl.SslProtocol - DtlsV1_0OrLater = ... # type: QSsl.SslProtocol - DtlsV1_2 = ... # type: QSsl.SslProtocol - DtlsV1_2OrLater = ... # type: QSsl.SslProtocol - TlsV1_3 = ... # type: QSsl.SslProtocol - TlsV1_3OrLater = ... # type: QSsl.SslProtocol - - class AlternativeNameEntryType(enum.Enum): - EmailEntry = ... # type: QSsl.AlternativeNameEntryType - DnsEntry = ... # type: QSsl.AlternativeNameEntryType - IpAddressEntry = ... # type: QSsl.AlternativeNameEntryType - - class KeyAlgorithm(enum.Enum): - Opaque = ... # type: QSsl.KeyAlgorithm - Rsa = ... # type: QSsl.KeyAlgorithm - Dsa = ... # type: QSsl.KeyAlgorithm - Ec = ... # type: QSsl.KeyAlgorithm - Dh = ... # type: QSsl.KeyAlgorithm - - class EncodingFormat(enum.Enum): - Pem = ... # type: QSsl.EncodingFormat - Der = ... # type: QSsl.EncodingFormat - - class KeyType(enum.Enum): - PrivateKey = ... # type: QSsl.KeyType - PublicKey = ... # type: QSsl.KeyType - - -class QSslCertificate(PyQt6.sip.simplewrapper): - - class PatternSyntax(enum.Enum): - RegularExpression = ... # type: QSslCertificate.PatternSyntax - Wildcard = ... # type: QSslCertificate.PatternSyntax - FixedString = ... # type: QSslCertificate.PatternSyntax - - class SubjectInfo(enum.Enum): - Organization = ... # type: QSslCertificate.SubjectInfo - CommonName = ... # type: QSslCertificate.SubjectInfo - LocalityName = ... # type: QSslCertificate.SubjectInfo - OrganizationalUnitName = ... # type: QSslCertificate.SubjectInfo - CountryName = ... # type: QSslCertificate.SubjectInfo - StateOrProvinceName = ... # type: QSslCertificate.SubjectInfo - DistinguishedNameQualifier = ... # type: QSslCertificate.SubjectInfo - SerialNumber = ... # type: QSslCertificate.SubjectInfo - EmailAddress = ... # type: QSslCertificate.SubjectInfo - - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], format: QSsl.EncodingFormat = ...) -> None: ... - @typing.overload - def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ..., format: QSsl.EncodingFormat = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QSslCertificate') -> None: ... - - def subjectDisplayName(self) -> str: ... - def issuerDisplayName(self) -> str: ... - @staticmethod - def importPkcs12(device: typing.Optional[QtCore.QIODevice], key: typing.Optional['QSslKey'], certificate: typing.Optional['QSslCertificate'], caCertificates: typing.Optional[typing.Iterable['QSslCertificate']] = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> bool: ... - def __hash__(self) -> int: ... - def isSelfSigned(self) -> bool: ... - @staticmethod - def verify(certificateChain: typing.Iterable['QSslCertificate'], hostName: typing.Optional[str] = ...) -> typing.List['QSslError']: ... - def toText(self) -> str: ... - def extensions(self) -> typing.List['QSslCertificateExtension']: ... - def issuerInfoAttributes(self) -> typing.List[QtCore.QByteArray]: ... - def subjectInfoAttributes(self) -> typing.List[QtCore.QByteArray]: ... - def isBlacklisted(self) -> bool: ... - def swap(self, other: 'QSslCertificate') -> None: ... - def handle(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - @staticmethod - def fromData(data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], format: QSsl.EncodingFormat = ...) -> typing.List['QSslCertificate']: ... - @staticmethod - def fromDevice(device: typing.Optional[QtCore.QIODevice], format: QSsl.EncodingFormat = ...) -> typing.List['QSslCertificate']: ... - @staticmethod - def fromPath(path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: 'QSslCertificate.PatternSyntax' = ...) -> typing.List['QSslCertificate']: ... - def toDer(self) -> QtCore.QByteArray: ... - def toPem(self) -> QtCore.QByteArray: ... - def publicKey(self) -> 'QSslKey': ... - def expiryDate(self) -> QtCore.QDateTime: ... - def effectiveDate(self) -> QtCore.QDateTime: ... - def subjectAlternativeNames(self) -> typing.Dict[QSsl.AlternativeNameEntryType, typing.List[str]]: ... - @typing.overload - def subjectInfo(self, info: 'QSslCertificate.SubjectInfo') -> typing.List[str]: ... - @typing.overload - def subjectInfo(self, attribute: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[str]: ... - @typing.overload - def issuerInfo(self, info: 'QSslCertificate.SubjectInfo') -> typing.List[str]: ... - @typing.overload - def issuerInfo(self, attribute: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[str]: ... - def digest(self, algorithm: QtCore.QCryptographicHash.Algorithm = ...) -> QtCore.QByteArray: ... - def serialNumber(self) -> QtCore.QByteArray: ... - def version(self) -> QtCore.QByteArray: ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QSslCertificateExtension(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QSslCertificateExtension') -> None: ... - - def isSupported(self) -> bool: ... - def isCritical(self) -> bool: ... - def value(self) -> typing.Any: ... - def name(self) -> str: ... - def oid(self) -> str: ... - def swap(self, other: 'QSslCertificateExtension') -> None: ... - - -class QSslCipher(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], protocol: QSsl.SslProtocol) -> None: ... - @typing.overload - def __init__(self, other: 'QSslCipher') -> None: ... - - def swap(self, other: 'QSslCipher') -> None: ... - def protocol(self) -> QSsl.SslProtocol: ... - def protocolString(self) -> str: ... - def encryptionMethod(self) -> str: ... - def authenticationMethod(self) -> str: ... - def keyExchangeMethod(self) -> str: ... - def usedBits(self) -> int: ... - def supportedBits(self) -> int: ... - def name(self) -> str: ... - def isNull(self) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QSslConfiguration(PyQt6.sip.simplewrapper): - - class NextProtocolNegotiationStatus(enum.Enum): - NextProtocolNegotiationNone = ... # type: QSslConfiguration.NextProtocolNegotiationStatus - NextProtocolNegotiationNegotiated = ... # type: QSslConfiguration.NextProtocolNegotiationStatus - NextProtocolNegotiationUnsupported = ... # type: QSslConfiguration.NextProtocolNegotiationStatus - - NextProtocolHttp1_1 = ... # type: bytes - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QSslConfiguration') -> None: ... - - @staticmethod - def setDefaultDtlsConfiguration(configuration: 'QSslConfiguration') -> None: ... - @staticmethod - def defaultDtlsConfiguration() -> 'QSslConfiguration': ... - def setDtlsCookieVerificationEnabled(self, enable: bool) -> None: ... - def dtlsCookieVerificationEnabled(self) -> bool: ... - def setMissingCertificateIsFatal(self, cannotRecover: bool) -> None: ... - def missingCertificateIsFatal(self) -> bool: ... - def setHandshakeMustInterruptOnError(self, interrupt: bool) -> None: ... - def handshakeMustInterruptOnError(self) -> bool: ... - @typing.overload - def addCaCertificates(self, path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: QSslCertificate.PatternSyntax = ...) -> bool: ... - @typing.overload - def addCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... - def addCaCertificate(self, certificate: QSslCertificate) -> None: ... - def ocspStaplingEnabled(self) -> bool: ... - def setOcspStaplingEnabled(self, enable: bool) -> None: ... - def setBackendConfiguration(self, backendConfiguration: typing.Dict[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Any] = ...) -> None: ... - def setBackendConfigurationOption(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], value: typing.Any) -> None: ... - def backendConfiguration(self) -> typing.Dict[QtCore.QByteArray, typing.Any]: ... - def setDiffieHellmanParameters(self, dhparams: 'QSslDiffieHellmanParameters') -> None: ... - def diffieHellmanParameters(self) -> 'QSslDiffieHellmanParameters': ... - def setPreSharedKeyIdentityHint(self, hint: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def preSharedKeyIdentityHint(self) -> QtCore.QByteArray: ... - def ephemeralServerKey(self) -> 'QSslKey': ... - @staticmethod - def supportedEllipticCurves() -> typing.List['QSslEllipticCurve']: ... - def setEllipticCurves(self, curves: typing.Iterable['QSslEllipticCurve']) -> None: ... - def ellipticCurves(self) -> typing.List['QSslEllipticCurve']: ... - @staticmethod - def systemCaCertificates() -> typing.List[QSslCertificate]: ... - @staticmethod - def supportedCiphers() -> typing.List[QSslCipher]: ... - def sessionProtocol(self) -> QSsl.SslProtocol: ... - def nextProtocolNegotiationStatus(self) -> 'QSslConfiguration.NextProtocolNegotiationStatus': ... - def nextNegotiatedProtocol(self) -> QtCore.QByteArray: ... - def allowedNextProtocols(self) -> typing.List[QtCore.QByteArray]: ... - def setAllowedNextProtocols(self, protocols: typing.Iterable[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]]) -> None: ... - def sessionTicketLifeTimeHint(self) -> int: ... - def setSessionTicket(self, sessionTicket: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def sessionTicket(self) -> QtCore.QByteArray: ... - def setLocalCertificateChain(self, localChain: typing.Iterable[QSslCertificate]) -> None: ... - def localCertificateChain(self) -> typing.List[QSslCertificate]: ... - def swap(self, other: 'QSslConfiguration') -> None: ... - def testSslOption(self, option: QSsl.SslOption) -> bool: ... - def setSslOption(self, option: QSsl.SslOption, on: bool) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def setDefaultConfiguration(configuration: 'QSslConfiguration') -> None: ... - @staticmethod - def defaultConfiguration() -> 'QSslConfiguration': ... - def setCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... - def caCertificates(self) -> typing.List[QSslCertificate]: ... - @typing.overload - def setCiphers(self, ciphers: typing.Optional[str]) -> None: ... - @typing.overload - def setCiphers(self, ciphers: typing.Iterable[QSslCipher]) -> None: ... - def ciphers(self) -> typing.List[QSslCipher]: ... - def setPrivateKey(self, key: 'QSslKey') -> None: ... - def privateKey(self) -> 'QSslKey': ... - def sessionCipher(self) -> QSslCipher: ... - def peerCertificateChain(self) -> typing.List[QSslCertificate]: ... - def peerCertificate(self) -> QSslCertificate: ... - def setLocalCertificate(self, certificate: QSslCertificate) -> None: ... - def localCertificate(self) -> QSslCertificate: ... - def setPeerVerifyDepth(self, depth: int) -> None: ... - def peerVerifyDepth(self) -> int: ... - def setPeerVerifyMode(self, mode: 'QSslSocket.PeerVerifyMode') -> None: ... - def peerVerifyMode(self) -> 'QSslSocket.PeerVerifyMode': ... - def setProtocol(self, protocol: QSsl.SslProtocol) -> None: ... - def protocol(self) -> QSsl.SslProtocol: ... - def isNull(self) -> bool: ... - - -class QSslDiffieHellmanParameters(PyQt6.sip.simplewrapper): - - class Error(enum.Enum): - NoError = ... # type: QSslDiffieHellmanParameters.Error - InvalidInputDataError = ... # type: QSslDiffieHellmanParameters.Error - UnsafeParametersError = ... # type: QSslDiffieHellmanParameters.Error - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QSslDiffieHellmanParameters') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def errorString(self) -> str: ... - def error(self) -> 'QSslDiffieHellmanParameters.Error': ... - def isValid(self) -> bool: ... - def isEmpty(self) -> bool: ... - @typing.overload - @staticmethod - def fromEncoded(encoded: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], encoding: QSsl.EncodingFormat = ...) -> 'QSslDiffieHellmanParameters': ... - @typing.overload - @staticmethod - def fromEncoded(device: typing.Optional[QtCore.QIODevice], encoding: QSsl.EncodingFormat = ...) -> 'QSslDiffieHellmanParameters': ... - @staticmethod - def defaultParameters() -> 'QSslDiffieHellmanParameters': ... - def swap(self, other: 'QSslDiffieHellmanParameters') -> None: ... - - -class QSslEllipticCurve(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSslEllipticCurve') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def isTlsNamedCurve(self) -> bool: ... - def isValid(self) -> bool: ... - def longName(self) -> str: ... - def shortName(self) -> str: ... - @staticmethod - def fromLongName(name: typing.Optional[str]) -> 'QSslEllipticCurve': ... - @staticmethod - def fromShortName(name: typing.Optional[str]) -> 'QSslEllipticCurve': ... - - -class QSslError(PyQt6.sip.simplewrapper): - - class SslError(enum.Enum): - UnspecifiedError = ... # type: QSslError.SslError - NoError = ... # type: QSslError.SslError - UnableToGetIssuerCertificate = ... # type: QSslError.SslError - UnableToDecryptCertificateSignature = ... # type: QSslError.SslError - UnableToDecodeIssuerPublicKey = ... # type: QSslError.SslError - CertificateSignatureFailed = ... # type: QSslError.SslError - CertificateNotYetValid = ... # type: QSslError.SslError - CertificateExpired = ... # type: QSslError.SslError - InvalidNotBeforeField = ... # type: QSslError.SslError - InvalidNotAfterField = ... # type: QSslError.SslError - SelfSignedCertificate = ... # type: QSslError.SslError - SelfSignedCertificateInChain = ... # type: QSslError.SslError - UnableToGetLocalIssuerCertificate = ... # type: QSslError.SslError - UnableToVerifyFirstCertificate = ... # type: QSslError.SslError - CertificateRevoked = ... # type: QSslError.SslError - InvalidCaCertificate = ... # type: QSslError.SslError - PathLengthExceeded = ... # type: QSslError.SslError - InvalidPurpose = ... # type: QSslError.SslError - CertificateUntrusted = ... # type: QSslError.SslError - CertificateRejected = ... # type: QSslError.SslError - SubjectIssuerMismatch = ... # type: QSslError.SslError - AuthorityIssuerSerialNumberMismatch = ... # type: QSslError.SslError - NoPeerCertificate = ... # type: QSslError.SslError - HostNameMismatch = ... # type: QSslError.SslError - NoSslSupport = ... # type: QSslError.SslError - CertificateBlacklisted = ... # type: QSslError.SslError - CertificateStatusUnknown = ... # type: QSslError.SslError - OcspNoResponseFound = ... # type: QSslError.SslError - OcspMalformedRequest = ... # type: QSslError.SslError - OcspMalformedResponse = ... # type: QSslError.SslError - OcspInternalError = ... # type: QSslError.SslError - OcspTryLater = ... # type: QSslError.SslError - OcspSigRequred = ... # type: QSslError.SslError - OcspUnauthorized = ... # type: QSslError.SslError - OcspResponseCannotBeTrusted = ... # type: QSslError.SslError - OcspResponseCertIdUnknown = ... # type: QSslError.SslError - OcspResponseExpired = ... # type: QSslError.SslError - OcspStatusUnknown = ... # type: QSslError.SslError - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, error: 'QSslError.SslError') -> None: ... - @typing.overload - def __init__(self, error: 'QSslError.SslError', certificate: QSslCertificate) -> None: ... - @typing.overload - def __init__(self, other: 'QSslError') -> None: ... - - def __hash__(self) -> int: ... - def swap(self, other: 'QSslError') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def certificate(self) -> QSslCertificate: ... - def errorString(self) -> str: ... - def error(self) -> 'QSslError.SslError': ... - - -class QSslKey(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, encoded: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], algorithm: QSsl.KeyAlgorithm, encoding: QSsl.EncodingFormat = ..., type: QSsl.KeyType = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - @typing.overload - def __init__(self, device: typing.Optional[QtCore.QIODevice], algorithm: QSsl.KeyAlgorithm, encoding: QSsl.EncodingFormat = ..., type: QSsl.KeyType = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - @typing.overload - def __init__(self, handle: typing.Optional[PyQt6.sip.voidptr], type: QSsl.KeyType = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QSslKey') -> None: ... - - def swap(self, other: 'QSslKey') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def handle(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def toDer(self, passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> QtCore.QByteArray: ... - def toPem(self, passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> QtCore.QByteArray: ... - def algorithm(self) -> QSsl.KeyAlgorithm: ... - def type(self) -> QSsl.KeyType: ... - def length(self) -> int: ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - - -class QSslPreSharedKeyAuthenticator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, authenticator: 'QSslPreSharedKeyAuthenticator') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def maximumPreSharedKeyLength(self) -> int: ... - def preSharedKey(self) -> QtCore.QByteArray: ... - def setPreSharedKey(self, preSharedKey: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def maximumIdentityLength(self) -> int: ... - def identity(self) -> QtCore.QByteArray: ... - def setIdentity(self, identity: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def identityHint(self) -> QtCore.QByteArray: ... - def swap(self, authenticator: 'QSslPreSharedKeyAuthenticator') -> None: ... - - -class QTcpServer(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - pendingConnectionAvailable: typing.ClassVar[QtCore.pyqtSignal] - def listenBacklogSize(self) -> int: ... - def setListenBacklogSize(self, size: int) -> None: ... - acceptError: typing.ClassVar[QtCore.pyqtSignal] - newConnection: typing.ClassVar[QtCore.pyqtSignal] - def addPendingConnection(self, socket: typing.Optional['QTcpSocket']) -> None: ... - def incomingConnection(self, handle: PyQt6.sip.voidptr) -> None: ... - def resumeAccepting(self) -> None: ... - def pauseAccepting(self) -> None: ... - def proxy(self) -> QNetworkProxy: ... - def setProxy(self, networkProxy: QNetworkProxy) -> None: ... - def errorString(self) -> str: ... - def serverError(self) -> QAbstractSocket.SocketError: ... - def nextPendingConnection(self) -> typing.Optional['QTcpSocket']: ... - def hasPendingConnections(self) -> bool: ... - def waitForNewConnection(self, msecs: int = ...) -> typing.Tuple[bool, typing.Optional[bool]]: ... - def setSocketDescriptor(self, socketDescriptor: PyQt6.sip.voidptr) -> bool: ... - def socketDescriptor(self) -> PyQt6.sip.voidptr: ... - def serverAddress(self) -> QHostAddress: ... - def serverPort(self) -> int: ... - def maxPendingConnections(self) -> int: ... - def setMaxPendingConnections(self, numConnections: int) -> None: ... - def isListening(self) -> bool: ... - def close(self) -> None: ... - def listen(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress] = ..., port: int = ...) -> bool: ... - - -class QSslServer(QTcpServer): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def incomingConnection(self, socket: PyQt6.sip.voidptr) -> None: ... - startedEncryptionHandshake: typing.ClassVar[QtCore.pyqtSignal] - handshakeInterruptedOnError: typing.ClassVar[QtCore.pyqtSignal] - alertReceived: typing.ClassVar[QtCore.pyqtSignal] - alertSent: typing.ClassVar[QtCore.pyqtSignal] - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - def handshakeTimeout(self) -> int: ... - def setHandshakeTimeout(self, timeout: int) -> None: ... - def sslConfiguration(self) -> QSslConfiguration: ... - def setSslConfiguration(self, sslConfiguration: QSslConfiguration) -> None: ... - - -class QTcpSocket(QAbstractSocket): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - -class QSslSocket(QTcpSocket): - - class PeerVerifyMode(enum.Enum): - VerifyNone = ... # type: QSslSocket.PeerVerifyMode - QueryPeer = ... # type: QSslSocket.PeerVerifyMode - VerifyPeer = ... # type: QSslSocket.PeerVerifyMode - AutoVerifyPeer = ... # type: QSslSocket.PeerVerifyMode - - class SslMode(enum.Enum): - UnencryptedMode = ... # type: QSslSocket.SslMode - SslClientMode = ... # type: QSslSocket.SslMode - SslServerMode = ... # type: QSslSocket.SslMode - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - @staticmethod - def isFeatureSupported(feat: QSsl.SupportedFeature, backendName: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def supportedFeatures(backendName: typing.Optional[str] = ...) -> typing.List[QSsl.SupportedFeature]: ... - @staticmethod - def isClassImplemented(cl: QSsl.ImplementedClass, backendName: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def implementedClasses(backendName: typing.Optional[str] = ...) -> typing.List[QSsl.ImplementedClass]: ... - @staticmethod - def isProtocolSupported(protocol: QSsl.SslProtocol, backendName: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def supportedProtocols(backendName: typing.Optional[str] = ...) -> typing.List[QSsl.SslProtocol]: ... - @staticmethod - def setActiveBackend(backendName: typing.Optional[str]) -> bool: ... - @staticmethod - def activeBackend() -> str: ... - @staticmethod - def availableBackends() -> typing.List[str]: ... - handshakeInterruptedOnError: typing.ClassVar[QtCore.pyqtSignal] - alertReceived: typing.ClassVar[QtCore.pyqtSignal] - alertSent: typing.ClassVar[QtCore.pyqtSignal] - def continueInterruptedHandshake(self) -> None: ... - def sslHandshakeErrors(self) -> typing.List[QSslError]: ... - def ocspResponses(self) -> typing.List[QOcspResponse]: ... - @staticmethod - def sslLibraryBuildVersionString() -> str: ... - @staticmethod - def sslLibraryBuildVersionNumber() -> int: ... - def sessionProtocol(self) -> QSsl.SslProtocol: ... - def localCertificateChain(self) -> typing.List[QSslCertificate]: ... - def setLocalCertificateChain(self, localChain: typing.Iterable[QSslCertificate]) -> None: ... - @staticmethod - def sslLibraryVersionString() -> str: ... - @staticmethod - def sslLibraryVersionNumber() -> int: ... - def disconnectFromHost(self) -> None: ... - def connectToHost(self, hostName: typing.Optional[str], port: int, mode: QtCore.QIODeviceBase.OpenModeFlag = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... - def resume(self) -> None: ... - def setPeerVerifyName(self, hostName: typing.Optional[str]) -> None: ... - def peerVerifyName(self) -> str: ... - def socketOption(self, option: QAbstractSocket.SocketOption) -> typing.Any: ... - def setSocketOption(self, option: QAbstractSocket.SocketOption, value: typing.Any) -> None: ... - newSessionTicketReceived: typing.ClassVar[QtCore.pyqtSignal] - encryptedBytesWritten: typing.ClassVar[QtCore.pyqtSignal] - peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] - def setSslConfiguration(self, config: QSslConfiguration) -> None: ... - def sslConfiguration(self) -> QSslConfiguration: ... - def encryptedBytesToWrite(self) -> int: ... - def encryptedBytesAvailable(self) -> int: ... - def setReadBufferSize(self, size: int) -> None: ... - def setPeerVerifyDepth(self, depth: int) -> None: ... - def peerVerifyDepth(self) -> int: ... - def setPeerVerifyMode(self, mode: 'QSslSocket.PeerVerifyMode') -> None: ... - def peerVerifyMode(self) -> 'QSslSocket.PeerVerifyMode': ... - def skipData(self, maxSize: int) -> int: ... - def writeData(self, a0: PyQt6.sip.Buffer) -> int: ... - def readData(self, maxlen: int) -> bytes: ... - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - modeChanged: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - encrypted: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def ignoreSslErrors(self) -> None: ... - @typing.overload - def ignoreSslErrors(self, errors: typing.Iterable[QSslError]) -> None: ... - def startServerEncryption(self) -> None: ... - def startClientEncryption(self) -> None: ... - @staticmethod - def supportsSsl() -> bool: ... - def waitForDisconnected(self, msecs: int = ...) -> bool: ... - def waitForBytesWritten(self, msecs: int = ...) -> bool: ... - def waitForReadyRead(self, msecs: int = ...) -> bool: ... - def waitForEncrypted(self, msecs: int = ...) -> bool: ... - def waitForConnected(self, msecs: int = ...) -> bool: ... - def privateKey(self) -> QSslKey: ... - @typing.overload - def setPrivateKey(self, key: QSslKey) -> None: ... - @typing.overload - def setPrivateKey(self, fileName: typing.Optional[str], algorithm: QSsl.KeyAlgorithm = ..., format: QSsl.EncodingFormat = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - def sessionCipher(self) -> QSslCipher: ... - def peerCertificateChain(self) -> typing.List[QSslCertificate]: ... - def peerCertificate(self) -> QSslCertificate: ... - def localCertificate(self) -> QSslCertificate: ... - @typing.overload - def setLocalCertificate(self, certificate: QSslCertificate) -> None: ... - @typing.overload - def setLocalCertificate(self, path: typing.Optional[str], format: QSsl.EncodingFormat = ...) -> None: ... - def atEnd(self) -> bool: ... - def close(self) -> None: ... - def canReadLine(self) -> bool: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def setProtocol(self, protocol: QSsl.SslProtocol) -> None: ... - def protocol(self) -> QSsl.SslProtocol: ... - def isEncrypted(self) -> bool: ... - def mode(self) -> 'QSslSocket.SslMode': ... - def setSocketDescriptor(self, socketDescriptor: PyQt6.sip.voidptr, state: QAbstractSocket.SocketState = ..., mode: QtCore.QIODeviceBase.OpenModeFlag = ...) -> bool: ... - @typing.overload - def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, mode: QtCore.QIODeviceBase.OpenModeFlag = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... - @typing.overload - def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, sslPeerName: typing.Optional[str], mode: QtCore.QIODeviceBase.OpenModeFlag = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... - - -class QUdpSocket(QAbstractSocket): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setMulticastInterface(self, iface: QNetworkInterface) -> None: ... - def multicastInterface(self) -> QNetworkInterface: ... - @typing.overload - def leaveMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> bool: ... - @typing.overload - def leaveMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress], iface: QNetworkInterface) -> bool: ... - @typing.overload - def joinMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> bool: ... - @typing.overload - def joinMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress], iface: QNetworkInterface) -> bool: ... - @typing.overload - def writeDatagram(self, a0: PyQt6.sip.Buffer, a1: typing.Union[QHostAddress, QHostAddress.SpecialAddress], a2: int) -> int: ... - @typing.overload - def writeDatagram(self, datagram: QNetworkDatagram) -> int: ... - def receiveDatagram(self, maxSize: int = ...) -> QNetworkDatagram: ... - def readDatagram(self, maxlen: int) -> typing.Tuple[bytes, typing.Optional[QHostAddress], typing.Optional[int]]: ... - def pendingDatagramSize(self) -> int: ... - def hasPendingDatagrams(self) -> bool: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.abi3.so deleted file mode 100644 index 329832e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.pyi deleted file mode 100644 index 368de98..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtNfc.pyi +++ /dev/null @@ -1,313 +0,0 @@ -# The PEP 484 type hints stub file for the QtNfc module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QNdefFilter(PyQt6.sip.simplewrapper): - - class Record(PyQt6.sip.simplewrapper): - - maximum = ... # type: int - minimum = ... # type: int - type = ... # type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] - typeNameFormat = ... # type: 'QNdefRecord.TypeNameFormat' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QNdefFilter.Record') -> None: ... - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNdefFilter') -> None: ... - - def match(self, message: 'QNdefMessage') -> bool: ... - def recordAt(self, i: int) -> 'QNdefFilter.Record': ... - def __len__(self) -> int: ... - def recordCount(self) -> int: ... - @typing.overload - def appendRecord(self, record: 'QNdefFilter.Record') -> bool: ... - @typing.overload - def appendRecord(self, typeNameFormat: 'QNdefRecord.TypeNameFormat', type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], min: int = ..., max: int = ...) -> bool: ... - def orderMatch(self) -> bool: ... - def setOrderMatch(self, on: bool) -> None: ... - def clear(self) -> None: ... - - -class QNdefMessage(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, record: 'QNdefRecord') -> None: ... - @typing.overload - def __init__(self, message: 'QNdefMessage') -> None: ... - @typing.overload - def __init__(self, records: typing.Iterable['QNdefRecord']) -> None: ... - - def __ne__(self, other: object): ... - @staticmethod - def fromByteArray(message: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> 'QNdefMessage': ... - def __delitem__(self, i: int) -> None: ... - def __setitem__(self, i: int, value: 'QNdefRecord') -> None: ... - def __getitem__(self, i: int) -> 'QNdefRecord': ... - def __len__(self) -> int: ... - def toByteArray(self) -> QtCore.QByteArray: ... - def __eq__(self, other: object): ... - - -class QNdefRecord(PyQt6.sip.simplewrapper): - - class TypeNameFormat(enum.Enum): - Empty = ... # type: QNdefRecord.TypeNameFormat - NfcRtd = ... # type: QNdefRecord.TypeNameFormat - Mime = ... # type: QNdefRecord.TypeNameFormat - Uri = ... # type: QNdefRecord.TypeNameFormat - ExternalRtd = ... # type: QNdefRecord.TypeNameFormat - Unknown = ... # type: QNdefRecord.TypeNameFormat - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNdefRecord') -> None: ... - - def __hash__(self) -> int: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def payload(self) -> QtCore.QByteArray: ... - def setPayload(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def id(self) -> QtCore.QByteArray: ... - def setId(self, id: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def type(self) -> QtCore.QByteArray: ... - def setType(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def typeNameFormat(self) -> 'QNdefRecord.TypeNameFormat': ... - def setTypeNameFormat(self, typeNameFormat: 'QNdefRecord.TypeNameFormat') -> None: ... - - -class QNdefNfcIconRecord(QNdefRecord): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: QNdefRecord) -> None: ... - @typing.overload - def __init__(self, a0: 'QNdefNfcIconRecord') -> None: ... - - def data(self) -> QtCore.QByteArray: ... - def setData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QNdefNfcSmartPosterRecord(QNdefRecord): - - class Action(enum.Enum): - UnspecifiedAction = ... # type: QNdefNfcSmartPosterRecord.Action - DoAction = ... # type: QNdefNfcSmartPosterRecord.Action - SaveAction = ... # type: QNdefNfcSmartPosterRecord.Action - EditAction = ... # type: QNdefNfcSmartPosterRecord.Action - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNdefNfcSmartPosterRecord') -> None: ... - @typing.overload - def __init__(self, other: QNdefRecord) -> None: ... - - def setTypeInfo(self, type: typing.Optional[str]) -> None: ... - def typeInfo(self) -> str: ... - def setSize(self, size: int) -> None: ... - def size(self) -> int: ... - def setIcons(self, icons: typing.Iterable[QNdefNfcIconRecord]) -> None: ... - @typing.overload - def removeIcon(self, icon: QNdefNfcIconRecord) -> bool: ... - @typing.overload - def removeIcon(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def addIcon(self, icon: QNdefNfcIconRecord) -> None: ... - @typing.overload - def addIcon(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def iconRecords(self) -> typing.List[QNdefNfcIconRecord]: ... - def iconRecord(self, index: int) -> QNdefNfcIconRecord: ... - def icon(self, mimetype: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> QtCore.QByteArray: ... - def iconCount(self) -> int: ... - def setAction(self, act: 'QNdefNfcSmartPosterRecord.Action') -> None: ... - def action(self) -> 'QNdefNfcSmartPosterRecord.Action': ... - @typing.overload - def setUri(self, url: 'QNdefNfcUriRecord') -> None: ... - @typing.overload - def setUri(self, url: QtCore.QUrl) -> None: ... - def uriRecord(self) -> 'QNdefNfcUriRecord': ... - def uri(self) -> QtCore.QUrl: ... - def setTitles(self, titles: typing.Iterable['QNdefNfcTextRecord']) -> None: ... - @typing.overload - def removeTitle(self, text: 'QNdefNfcTextRecord') -> bool: ... - @typing.overload - def removeTitle(self, locale: typing.Optional[str]) -> bool: ... - @typing.overload - def addTitle(self, text: 'QNdefNfcTextRecord') -> bool: ... - @typing.overload - def addTitle(self, text: typing.Optional[str], locale: typing.Optional[str], encoding: 'QNdefNfcTextRecord.Encoding') -> bool: ... - def titleRecords(self) -> typing.List['QNdefNfcTextRecord']: ... - def titleRecord(self, index: int) -> 'QNdefNfcTextRecord': ... - def title(self, locale: typing.Optional[str] = ...) -> str: ... - def titleCount(self) -> int: ... - def hasTypeInfo(self) -> bool: ... - def hasSize(self) -> bool: ... - def hasIcon(self, mimetype: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> bool: ... - def hasAction(self) -> bool: ... - def hasTitle(self, locale: typing.Optional[str] = ...) -> bool: ... - def setPayload(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - - -class QNdefNfcTextRecord(QNdefRecord): - - class Encoding(enum.Enum): - Utf8 = ... # type: QNdefNfcTextRecord.Encoding - Utf16 = ... # type: QNdefNfcTextRecord.Encoding - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: QNdefRecord) -> None: ... - @typing.overload - def __init__(self, a0: 'QNdefNfcTextRecord') -> None: ... - - def setEncoding(self, encoding: 'QNdefNfcTextRecord.Encoding') -> None: ... - def encoding(self) -> 'QNdefNfcTextRecord.Encoding': ... - def setText(self, text: typing.Optional[str]) -> None: ... - def text(self) -> str: ... - def setLocale(self, locale: typing.Optional[str]) -> None: ... - def locale(self) -> str: ... - - -class QNdefNfcUriRecord(QNdefRecord): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: QNdefRecord) -> None: ... - @typing.overload - def __init__(self, a0: 'QNdefNfcUriRecord') -> None: ... - - def setUri(self, uri: QtCore.QUrl) -> None: ... - def uri(self) -> QtCore.QUrl: ... - - -class QNearFieldManager(QtCore.QObject): - - class AdapterState(enum.Enum): - Offline = ... # type: QNearFieldManager.AdapterState - TurningOn = ... # type: QNearFieldManager.AdapterState - Online = ... # type: QNearFieldManager.AdapterState - TurningOff = ... # type: QNearFieldManager.AdapterState - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setUserInformation(self, message: typing.Optional[str]) -> None: ... - def isEnabled(self) -> bool: ... - adapterStateChanged: typing.ClassVar[QtCore.pyqtSignal] - def isSupported(self, accessMethod: 'QNearFieldTarget.AccessMethod' = ...) -> bool: ... - targetDetectionStopped: typing.ClassVar[QtCore.pyqtSignal] - targetLost: typing.ClassVar[QtCore.pyqtSignal] - targetDetected: typing.ClassVar[QtCore.pyqtSignal] - def stopTargetDetection(self, errorMessage: typing.Optional[str] = ...) -> None: ... - def startTargetDetection(self, accessMethod: 'QNearFieldTarget.AccessMethod') -> bool: ... - - -class QNearFieldTarget(QtCore.QObject): - - class Error(enum.Enum): - NoError = ... # type: QNearFieldTarget.Error - UnknownError = ... # type: QNearFieldTarget.Error - UnsupportedError = ... # type: QNearFieldTarget.Error - TargetOutOfRangeError = ... # type: QNearFieldTarget.Error - NoResponseError = ... # type: QNearFieldTarget.Error - ChecksumMismatchError = ... # type: QNearFieldTarget.Error - InvalidParametersError = ... # type: QNearFieldTarget.Error - NdefReadError = ... # type: QNearFieldTarget.Error - NdefWriteError = ... # type: QNearFieldTarget.Error - CommandError = ... # type: QNearFieldTarget.Error - ConnectionError = ... # type: QNearFieldTarget.Error - TimeoutError = ... # type: QNearFieldTarget.Error - - class AccessMethod(enum.Flag): - UnknownAccess = ... # type: QNearFieldTarget.AccessMethod - NdefAccess = ... # type: QNearFieldTarget.AccessMethod - TagTypeSpecificAccess = ... # type: QNearFieldTarget.AccessMethod - AnyAccess = ... # type: QNearFieldTarget.AccessMethod - - class Type(enum.Enum): - ProprietaryTag = ... # type: QNearFieldTarget.Type - NfcTagType1 = ... # type: QNearFieldTarget.Type - NfcTagType2 = ... # type: QNearFieldTarget.Type - NfcTagType3 = ... # type: QNearFieldTarget.Type - NfcTagType4 = ... # type: QNearFieldTarget.Type - NfcTagType4A = ... # type: QNearFieldTarget.Type - NfcTagType4B = ... # type: QNearFieldTarget.Type - MifareTag = ... # type: QNearFieldTarget.Type - - class RequestId(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QNearFieldTarget.RequestId') -> None: ... - - def __ge__(self, other: 'QNearFieldTarget.RequestId') -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def __lt__(self, other: 'QNearFieldTarget.RequestId') -> bool: ... - def refCount(self) -> int: ... - def isValid(self) -> bool: ... - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def maxCommandLength(self) -> int: ... - def disconnect(self) -> bool: ... - error: typing.ClassVar[QtCore.pyqtSignal] - requestCompleted: typing.ClassVar[QtCore.pyqtSignal] - ndefMessageRead: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - def requestResponse(self, id: 'QNearFieldTarget.RequestId') -> typing.Any: ... - def waitForRequestCompleted(self, id: 'QNearFieldTarget.RequestId', msecs: int = ...) -> bool: ... - def sendCommand(self, command: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> 'QNearFieldTarget.RequestId': ... - def writeNdefMessages(self, messages: typing.Iterable[QNdefMessage]) -> 'QNearFieldTarget.RequestId': ... - def readNdefMessages(self) -> 'QNearFieldTarget.RequestId': ... - def hasNdefMessage(self) -> bool: ... - def accessMethods(self) -> 'QNearFieldTarget.AccessMethod': ... - def type(self) -> 'QNearFieldTarget.Type': ... - def uid(self) -> QtCore.QByteArray: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.abi3.so deleted file mode 100644 index 18b855d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.pyi deleted file mode 100644 index 53524e8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGL.pyi +++ /dev/null @@ -1,2470 +0,0 @@ -# The PEP 484 type hints stub file for the QtOpenGL module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - -# Convenient aliases for complicated OpenGL types. -PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], - PyQt6.sip.Buffer, None] -PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], - typing.Sequence[float], PyQt6.sip.Buffer, int, None] -PYQT_SHADER_ATTRIBUTE_ARRAY = typing.Union[typing.Sequence[QtGui.QVector2D], - typing.Sequence[QtGui.QVector3D], typing.Sequence[QtGui.QVector4D], - typing.Sequence[typing.Sequence[float]]] -PYQT_SHADER_UNIFORM_VALUE_ARRAY = typing.Union[ - typing.Sequence[QtGui.QVector2D], typing.Sequence[QtGui.QVector3D], - typing.Sequence[QtGui.QVector4D], typing.Sequence[QtGui.QMatrix2x2], - typing.Sequence[QtGui.QMatrix2x3], typing.Sequence[QtGui.QMatrix2x4], - typing.Sequence[QtGui.QMatrix3x2], typing.Sequence[QtGui.QMatrix3x3], - typing.Sequence[QtGui.QMatrix3x4], typing.Sequence[QtGui.QMatrix4x2], - typing.Sequence[QtGui.QMatrix4x3], typing.Sequence[QtGui.QMatrix4x4], - typing.Sequence[typing.Sequence[float]]] - - -class QOpenGLBuffer(PyQt6.sip.simplewrapper): - - class RangeAccessFlag(enum.Flag): - RangeRead = ... # type: QOpenGLBuffer.RangeAccessFlag - RangeWrite = ... # type: QOpenGLBuffer.RangeAccessFlag - RangeInvalidate = ... # type: QOpenGLBuffer.RangeAccessFlag - RangeInvalidateBuffer = ... # type: QOpenGLBuffer.RangeAccessFlag - RangeFlushExplicit = ... # type: QOpenGLBuffer.RangeAccessFlag - RangeUnsynchronized = ... # type: QOpenGLBuffer.RangeAccessFlag - - class Access(enum.Enum): - ReadOnly = ... # type: QOpenGLBuffer.Access - WriteOnly = ... # type: QOpenGLBuffer.Access - ReadWrite = ... # type: QOpenGLBuffer.Access - - class UsagePattern(enum.Enum): - StreamDraw = ... # type: QOpenGLBuffer.UsagePattern - StreamRead = ... # type: QOpenGLBuffer.UsagePattern - StreamCopy = ... # type: QOpenGLBuffer.UsagePattern - StaticDraw = ... # type: QOpenGLBuffer.UsagePattern - StaticRead = ... # type: QOpenGLBuffer.UsagePattern - StaticCopy = ... # type: QOpenGLBuffer.UsagePattern - DynamicDraw = ... # type: QOpenGLBuffer.UsagePattern - DynamicRead = ... # type: QOpenGLBuffer.UsagePattern - DynamicCopy = ... # type: QOpenGLBuffer.UsagePattern - - class Type(enum.Enum): - VertexBuffer = ... # type: QOpenGLBuffer.Type - IndexBuffer = ... # type: QOpenGLBuffer.Type - PixelPackBuffer = ... # type: QOpenGLBuffer.Type - PixelUnpackBuffer = ... # type: QOpenGLBuffer.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, type: 'QOpenGLBuffer.Type') -> None: ... - @typing.overload - def __init__(self, other: 'QOpenGLBuffer') -> None: ... - - def swap(self, other: 'QOpenGLBuffer') -> None: ... - def mapRange(self, offset: int, count: int, access: 'QOpenGLBuffer.RangeAccessFlag') -> typing.Optional[PyQt6.sip.voidptr]: ... - def unmap(self) -> bool: ... - def map(self, access: 'QOpenGLBuffer.Access') -> typing.Optional[PyQt6.sip.voidptr]: ... - @typing.overload - def allocate(self, data: typing.Optional[PyQt6.sip.voidptr], count: int) -> None: ... - @typing.overload - def allocate(self, count: int) -> None: ... - def write(self, offset: int, data: typing.Optional[PyQt6.sip.voidptr], count: int) -> None: ... - def read(self, offset: int, data: typing.Optional[PyQt6.sip.voidptr], count: int) -> bool: ... - def __len__(self) -> int: ... - def size(self) -> int: ... - def bufferId(self) -> int: ... - @typing.overload - def release(self) -> None: ... - @typing.overload - @staticmethod - def release(type: 'QOpenGLBuffer.Type') -> None: ... - def bind(self) -> bool: ... - def destroy(self) -> None: ... - def isCreated(self) -> bool: ... - def create(self) -> bool: ... - def setUsagePattern(self, value: 'QOpenGLBuffer.UsagePattern') -> None: ... - def usagePattern(self) -> 'QOpenGLBuffer.UsagePattern': ... - def type(self) -> 'QOpenGLBuffer.Type': ... - - -class QOpenGLDebugMessage(PyQt6.sip.simplewrapper): - - class Severity(enum.Flag): - InvalidSeverity = ... # type: QOpenGLDebugMessage.Severity - HighSeverity = ... # type: QOpenGLDebugMessage.Severity - MediumSeverity = ... # type: QOpenGLDebugMessage.Severity - LowSeverity = ... # type: QOpenGLDebugMessage.Severity - NotificationSeverity = ... # type: QOpenGLDebugMessage.Severity - AnySeverity = ... # type: QOpenGLDebugMessage.Severity - - class Type(enum.Flag): - InvalidType = ... # type: QOpenGLDebugMessage.Type - ErrorType = ... # type: QOpenGLDebugMessage.Type - DeprecatedBehaviorType = ... # type: QOpenGLDebugMessage.Type - UndefinedBehaviorType = ... # type: QOpenGLDebugMessage.Type - PortabilityType = ... # type: QOpenGLDebugMessage.Type - PerformanceType = ... # type: QOpenGLDebugMessage.Type - OtherType = ... # type: QOpenGLDebugMessage.Type - MarkerType = ... # type: QOpenGLDebugMessage.Type - GroupPushType = ... # type: QOpenGLDebugMessage.Type - GroupPopType = ... # type: QOpenGLDebugMessage.Type - AnyType = ... # type: QOpenGLDebugMessage.Type - - class Source(enum.Flag): - InvalidSource = ... # type: QOpenGLDebugMessage.Source - APISource = ... # type: QOpenGLDebugMessage.Source - WindowSystemSource = ... # type: QOpenGLDebugMessage.Source - ShaderCompilerSource = ... # type: QOpenGLDebugMessage.Source - ThirdPartySource = ... # type: QOpenGLDebugMessage.Source - ApplicationSource = ... # type: QOpenGLDebugMessage.Source - OtherSource = ... # type: QOpenGLDebugMessage.Source - AnySource = ... # type: QOpenGLDebugMessage.Source - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, debugMessage: 'QOpenGLDebugMessage') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - @staticmethod - def createThirdPartyMessage(text: typing.Optional[str], id: int = ..., severity: 'QOpenGLDebugMessage.Severity' = ..., type: 'QOpenGLDebugMessage.Type' = ...) -> 'QOpenGLDebugMessage': ... - @staticmethod - def createApplicationMessage(text: typing.Optional[str], id: int = ..., severity: 'QOpenGLDebugMessage.Severity' = ..., type: 'QOpenGLDebugMessage.Type' = ...) -> 'QOpenGLDebugMessage': ... - def message(self) -> str: ... - def id(self) -> int: ... - def severity(self) -> 'QOpenGLDebugMessage.Severity': ... - def type(self) -> 'QOpenGLDebugMessage.Type': ... - def source(self) -> 'QOpenGLDebugMessage.Source': ... - def swap(self, debugMessage: 'QOpenGLDebugMessage') -> None: ... - - -class QOpenGLDebugLogger(QtCore.QObject): - - class LoggingMode(enum.Enum): - AsynchronousLogging = ... # type: QOpenGLDebugLogger.LoggingMode - SynchronousLogging = ... # type: QOpenGLDebugLogger.LoggingMode - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - messageLogged: typing.ClassVar[QtCore.pyqtSignal] - def stopLogging(self) -> None: ... - def startLogging(self, loggingMode: 'QOpenGLDebugLogger.LoggingMode' = ...) -> None: ... - def logMessage(self, debugMessage: QOpenGLDebugMessage) -> None: ... - def loggedMessages(self) -> typing.List[QOpenGLDebugMessage]: ... - @typing.overload - def disableMessages(self, sources: QOpenGLDebugMessage.Source = ..., types: QOpenGLDebugMessage.Type = ..., severities: QOpenGLDebugMessage.Severity = ...) -> None: ... - @typing.overload - def disableMessages(self, ids: typing.Iterable[int], sources: QOpenGLDebugMessage.Source = ..., types: QOpenGLDebugMessage.Type = ...) -> None: ... - @typing.overload - def enableMessages(self, sources: QOpenGLDebugMessage.Source = ..., types: QOpenGLDebugMessage.Type = ..., severities: QOpenGLDebugMessage.Severity = ...) -> None: ... - @typing.overload - def enableMessages(self, ids: typing.Iterable[int], sources: QOpenGLDebugMessage.Source = ..., types: QOpenGLDebugMessage.Type = ...) -> None: ... - def popGroup(self) -> None: ... - def pushGroup(self, name: typing.Optional[str], id: int = ..., source: QOpenGLDebugMessage.Source = ...) -> None: ... - def maximumMessageLength(self) -> int: ... - def loggingMode(self) -> 'QOpenGLDebugLogger.LoggingMode': ... - def isLogging(self) -> bool: ... - def initialize(self) -> bool: ... - - -class QOpenGLFramebufferObject(PyQt6.sip.simplewrapper): - - class FramebufferRestorePolicy(enum.Enum): - DontRestoreFramebufferBinding = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy - RestoreFramebufferBindingToDefault = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy - RestoreFrameBufferBinding = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy - - class Attachment(enum.Enum): - NoAttachment = ... # type: QOpenGLFramebufferObject.Attachment - CombinedDepthStencil = ... # type: QOpenGLFramebufferObject.Attachment - Depth = ... # type: QOpenGLFramebufferObject.Attachment - - @typing.overload - def __init__(self, size: QtCore.QSize, target: int = ...) -> None: ... - @typing.overload - def __init__(self, width: int, height: int, target: int = ...) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSize, attachment: 'QOpenGLFramebufferObject.Attachment', target: int = ..., internal_format: int = ...) -> None: ... - @typing.overload - def __init__(self, width: int, height: int, attachment: 'QOpenGLFramebufferObject.Attachment', target: int = ..., internal_format: int = ...) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSize, format: 'QOpenGLFramebufferObjectFormat') -> None: ... - @typing.overload - def __init__(self, width: int, height: int, format: 'QOpenGLFramebufferObjectFormat') -> None: ... - - def sizes(self) -> typing.List[QtCore.QSize]: ... - @typing.overload - def addColorAttachment(self, size: QtCore.QSize, internal_format: int = ...) -> None: ... - @typing.overload - def addColorAttachment(self, width: int, height: int, internal_format: int = ...) -> None: ... - @typing.overload - def takeTexture(self) -> int: ... - @typing.overload - def takeTexture(self, colorAttachmentIndex: int) -> int: ... - @typing.overload - @staticmethod - def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int = ..., filter: int = ...) -> None: ... - @typing.overload - @staticmethod - def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], source: typing.Optional['QOpenGLFramebufferObject'], buffers: int = ..., filter: int = ...) -> None: ... - @typing.overload - @staticmethod - def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int, filter: int, readColorAttachmentIndex: int, drawColorAttachmentIndex: int) -> None: ... - @typing.overload - @staticmethod - def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int, filter: int, readColorAttachmentIndex: int, drawColorAttachmentIndex: int, restorePolicy: 'QOpenGLFramebufferObject.FramebufferRestorePolicy') -> None: ... - @staticmethod - def hasOpenGLFramebufferBlit() -> bool: ... - @staticmethod - def hasOpenGLFramebufferObjects() -> bool: ... - @staticmethod - def bindDefault() -> bool: ... - def handle(self) -> int: ... - def setAttachment(self, attachment: 'QOpenGLFramebufferObject.Attachment') -> None: ... - def attachment(self) -> 'QOpenGLFramebufferObject.Attachment': ... - @typing.overload - def toImage(self, flipped: bool = ...) -> QtGui.QImage: ... - @typing.overload - def toImage(self, flipped: bool, colorAttachmentIndex: int) -> QtGui.QImage: ... - def size(self) -> QtCore.QSize: ... - def textures(self) -> typing.List[int]: ... - def texture(self) -> int: ... - def height(self) -> int: ... - def width(self) -> int: ... - def release(self) -> bool: ... - def bind(self) -> bool: ... - def isBound(self) -> bool: ... - def isValid(self) -> bool: ... - def format(self) -> 'QOpenGLFramebufferObjectFormat': ... - - -class QOpenGLFramebufferObjectFormat(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QOpenGLFramebufferObjectFormat') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def internalTextureFormat(self) -> int: ... - def setInternalTextureFormat(self, internalTextureFormat: int) -> None: ... - def textureTarget(self) -> int: ... - def setTextureTarget(self, target: int) -> None: ... - def attachment(self) -> QOpenGLFramebufferObject.Attachment: ... - def setAttachment(self, attachment: QOpenGLFramebufferObject.Attachment) -> None: ... - def mipmap(self) -> bool: ... - def setMipmap(self, enabled: bool) -> None: ... - def samples(self) -> int: ... - def setSamples(self, samples: int) -> None: ... - - -class QOpenGLPaintDevice(QtGui.QPaintDevice): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, size: QtCore.QSize) -> None: ... - @typing.overload - def __init__(self, width: int, height: int) -> None: ... - - def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def setDevicePixelRatio(self, devicePixelRatio: float) -> None: ... - def ensureActiveTarget(self) -> None: ... - def paintFlipped(self) -> bool: ... - def setPaintFlipped(self, flipped: bool) -> None: ... - def setDotsPerMeterY(self, a0: float) -> None: ... - def setDotsPerMeterX(self, a0: float) -> None: ... - def dotsPerMeterY(self) -> float: ... - def dotsPerMeterX(self) -> float: ... - def setSize(self, size: QtCore.QSize) -> None: ... - def size(self) -> QtCore.QSize: ... - def context(self) -> typing.Optional[QtGui.QOpenGLContext]: ... - def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... - - -class QOpenGLPixelTransferOptions(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QOpenGLPixelTransferOptions') -> None: ... - - def isSwapBytesEnabled(self) -> bool: ... - def setSwapBytesEnabled(self, swapBytes: bool) -> None: ... - def isLeastSignificantBitFirst(self) -> bool: ... - def setLeastSignificantByteFirst(self, lsbFirst: bool) -> None: ... - def rowLength(self) -> int: ... - def setRowLength(self, rowLength: int) -> None: ... - def imageHeight(self) -> int: ... - def setImageHeight(self, imageHeight: int) -> None: ... - def skipPixels(self) -> int: ... - def setSkipPixels(self, skipPixels: int) -> None: ... - def skipRows(self) -> int: ... - def setSkipRows(self, skipRows: int) -> None: ... - def skipImages(self) -> int: ... - def setSkipImages(self, skipImages: int) -> None: ... - def alignment(self) -> int: ... - def setAlignment(self, alignment: int) -> None: ... - def swap(self, other: 'QOpenGLPixelTransferOptions') -> None: ... - - -class QOpenGLShader(QtCore.QObject): - - class ShaderTypeBit(enum.Flag): - Vertex = ... # type: QOpenGLShader.ShaderTypeBit - Fragment = ... # type: QOpenGLShader.ShaderTypeBit - Geometry = ... # type: QOpenGLShader.ShaderTypeBit - TessellationControl = ... # type: QOpenGLShader.ShaderTypeBit - TessellationEvaluation = ... # type: QOpenGLShader.ShaderTypeBit - Compute = ... # type: QOpenGLShader.ShaderTypeBit - - def __init__(self, type: 'QOpenGLShader.ShaderTypeBit', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - @staticmethod - def hasOpenGLShaders(type: 'QOpenGLShader.ShaderTypeBit', context: typing.Optional[QtGui.QOpenGLContext] = ...) -> bool: ... - def shaderId(self) -> int: ... - def log(self) -> str: ... - def isCompiled(self) -> bool: ... - def sourceCode(self) -> QtCore.QByteArray: ... - def compileSourceFile(self, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def compileSourceCode(self, source: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def compileSourceCode(self, source: typing.Optional[str]) -> bool: ... - def shaderType(self) -> 'QOpenGLShader.ShaderTypeBit': ... - - -class QOpenGLShaderProgram(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def addCacheableShaderFromSourceFile(self, type: QOpenGLShader.ShaderTypeBit, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def addCacheableShaderFromSourceCode(self, type: QOpenGLShader.ShaderTypeBit, source: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def addCacheableShaderFromSourceCode(self, type: QOpenGLShader.ShaderTypeBit, source: typing.Optional[str]) -> bool: ... - def create(self) -> bool: ... - def defaultInnerTessellationLevels(self) -> typing.List[float]: ... - def setDefaultInnerTessellationLevels(self, levels: typing.Iterable[float]) -> None: ... - def defaultOuterTessellationLevels(self) -> typing.List[float]: ... - def setDefaultOuterTessellationLevels(self, levels: typing.Iterable[float]) -> None: ... - def patchVertexCount(self) -> int: ... - def setPatchVertexCount(self, count: int) -> None: ... - def maxGeometryOutputVertices(self) -> int: ... - @staticmethod - def hasOpenGLShaderPrograms(context: typing.Optional[QtGui.QOpenGLContext] = ...) -> bool: ... - @typing.overload - def setUniformValueArray(self, location: int, values: PYQT_SHADER_UNIFORM_VALUE_ARRAY) -> None: ... - @typing.overload - def setUniformValueArray(self, name: typing.Optional[str], values: PYQT_SHADER_UNIFORM_VALUE_ARRAY) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: int) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: float) -> None: ... - @typing.overload - def setUniformValue(self, location: int, x: float, y: float) -> None: ... - @typing.overload - def setUniformValue(self, location: int, x: float, y: float, z: float) -> None: ... - @typing.overload - def setUniformValue(self, location: int, x: float, y: float, z: float, w: float) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QVector2D) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QVector3D) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QVector4D) -> None: ... - @typing.overload - def setUniformValue(self, location: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setUniformValue(self, location: int, point: QtCore.QPoint) -> None: ... - @typing.overload - def setUniformValue(self, location: int, point: QtCore.QPointF) -> None: ... - @typing.overload - def setUniformValue(self, location: int, size: QtCore.QSize) -> None: ... - @typing.overload - def setUniformValue(self, location: int, size: QtCore.QSizeF) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix2x2) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix2x3) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix2x4) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix3x2) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix3x3) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix3x4) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix4x2) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix4x3) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QMatrix4x4) -> None: ... - @typing.overload - def setUniformValue(self, location: int, value: QtGui.QTransform) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: int) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: float) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], x: float, y: float) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], x: float, y: float, z: float) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], x: float, y: float, z: float, w: float) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QVector2D) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QVector3D) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QVector4D) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], point: QtCore.QPoint) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], point: QtCore.QPointF) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], size: QtCore.QSize) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], size: QtCore.QSizeF) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix2x2) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix2x3) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix2x4) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix3x2) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix3x3) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix3x4) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix4x2) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix4x3) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QMatrix4x4) -> None: ... - @typing.overload - def setUniformValue(self, name: typing.Optional[str], value: QtGui.QTransform) -> None: ... - @typing.overload - def uniformLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> int: ... - @typing.overload - def uniformLocation(self, name: typing.Optional[str]) -> int: ... - @typing.overload - def disableAttributeArray(self, location: int) -> None: ... - @typing.overload - def disableAttributeArray(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def enableAttributeArray(self, location: int) -> None: ... - @typing.overload - def enableAttributeArray(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def setAttributeBuffer(self, location: int, type: int, offset: int, tupleSize: int, stride: int = ...) -> None: ... - @typing.overload - def setAttributeBuffer(self, name: typing.Optional[str], type: int, offset: int, tupleSize: int, stride: int = ...) -> None: ... - @typing.overload - def setAttributeArray(self, location: int, values: PYQT_SHADER_ATTRIBUTE_ARRAY) -> None: ... - @typing.overload - def setAttributeArray(self, name: typing.Optional[str], values: PYQT_SHADER_ATTRIBUTE_ARRAY) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, value: float) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, x: float, y: float) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, x: float, y: float, z: float) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, x: float, y: float, z: float, w: float) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, value: QtGui.QVector2D) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, value: QtGui.QVector3D) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, value: QtGui.QVector4D) -> None: ... - @typing.overload - def setAttributeValue(self, location: int, value: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], value: float) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], x: float, y: float) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], x: float, y: float, z: float) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], x: float, y: float, z: float, w: float) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], value: QtGui.QVector2D) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], value: QtGui.QVector3D) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], value: QtGui.QVector4D) -> None: ... - @typing.overload - def setAttributeValue(self, name: typing.Optional[str], value: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def attributeLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> int: ... - @typing.overload - def attributeLocation(self, name: typing.Optional[str]) -> int: ... - @typing.overload - def bindAttributeLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], location: int) -> None: ... - @typing.overload - def bindAttributeLocation(self, name: typing.Optional[str], location: int) -> None: ... - def programId(self) -> int: ... - def release(self) -> None: ... - def bind(self) -> bool: ... - def log(self) -> str: ... - def isLinked(self) -> bool: ... - def link(self) -> bool: ... - def removeAllShaders(self) -> None: ... - def addShaderFromSourceFile(self, type: QOpenGLShader.ShaderTypeBit, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def addShaderFromSourceCode(self, type: QOpenGLShader.ShaderTypeBit, source: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def addShaderFromSourceCode(self, type: QOpenGLShader.ShaderTypeBit, source: typing.Optional[str]) -> bool: ... - def shaders(self) -> typing.List[QOpenGLShader]: ... - def removeShader(self, shader: typing.Optional[QOpenGLShader]) -> None: ... - def addShader(self, shader: typing.Optional[QOpenGLShader]) -> bool: ... - - -class QOpenGLTexture(PyQt6.sip.simplewrapper): - - class ComparisonMode(enum.Enum): - CompareRefToTexture = ... # type: QOpenGLTexture.ComparisonMode - CompareNone = ... # type: QOpenGLTexture.ComparisonMode - - class ComparisonFunction(enum.Enum): - CompareLessEqual = ... # type: QOpenGLTexture.ComparisonFunction - CompareGreaterEqual = ... # type: QOpenGLTexture.ComparisonFunction - CompareLess = ... # type: QOpenGLTexture.ComparisonFunction - CompareGreater = ... # type: QOpenGLTexture.ComparisonFunction - CompareEqual = ... # type: QOpenGLTexture.ComparisonFunction - CommpareNotEqual = ... # type: QOpenGLTexture.ComparisonFunction - CompareAlways = ... # type: QOpenGLTexture.ComparisonFunction - CompareNever = ... # type: QOpenGLTexture.ComparisonFunction - CompareNotEqual = ... # type: QOpenGLTexture.ComparisonFunction - - class CoordinateDirection(enum.Enum): - DirectionS = ... # type: QOpenGLTexture.CoordinateDirection - DirectionT = ... # type: QOpenGLTexture.CoordinateDirection - DirectionR = ... # type: QOpenGLTexture.CoordinateDirection - - class WrapMode(enum.Enum): - Repeat = ... # type: QOpenGLTexture.WrapMode - MirroredRepeat = ... # type: QOpenGLTexture.WrapMode - ClampToEdge = ... # type: QOpenGLTexture.WrapMode - ClampToBorder = ... # type: QOpenGLTexture.WrapMode - - class Filter(enum.Enum): - Nearest = ... # type: QOpenGLTexture.Filter - Linear = ... # type: QOpenGLTexture.Filter - NearestMipMapNearest = ... # type: QOpenGLTexture.Filter - NearestMipMapLinear = ... # type: QOpenGLTexture.Filter - LinearMipMapNearest = ... # type: QOpenGLTexture.Filter - LinearMipMapLinear = ... # type: QOpenGLTexture.Filter - - class DepthStencilMode(enum.Enum): - DepthMode = ... # type: QOpenGLTexture.DepthStencilMode - StencilMode = ... # type: QOpenGLTexture.DepthStencilMode - - class SwizzleValue(enum.Enum): - RedValue = ... # type: QOpenGLTexture.SwizzleValue - GreenValue = ... # type: QOpenGLTexture.SwizzleValue - BlueValue = ... # type: QOpenGLTexture.SwizzleValue - AlphaValue = ... # type: QOpenGLTexture.SwizzleValue - ZeroValue = ... # type: QOpenGLTexture.SwizzleValue - OneValue = ... # type: QOpenGLTexture.SwizzleValue - - class SwizzleComponent(enum.Enum): - SwizzleRed = ... # type: QOpenGLTexture.SwizzleComponent - SwizzleGreen = ... # type: QOpenGLTexture.SwizzleComponent - SwizzleBlue = ... # type: QOpenGLTexture.SwizzleComponent - SwizzleAlpha = ... # type: QOpenGLTexture.SwizzleComponent - - class Feature(enum.Flag): - ImmutableStorage = ... # type: QOpenGLTexture.Feature - ImmutableMultisampleStorage = ... # type: QOpenGLTexture.Feature - TextureRectangle = ... # type: QOpenGLTexture.Feature - TextureArrays = ... # type: QOpenGLTexture.Feature - Texture3D = ... # type: QOpenGLTexture.Feature - TextureMultisample = ... # type: QOpenGLTexture.Feature - TextureBuffer = ... # type: QOpenGLTexture.Feature - TextureCubeMapArrays = ... # type: QOpenGLTexture.Feature - Swizzle = ... # type: QOpenGLTexture.Feature - StencilTexturing = ... # type: QOpenGLTexture.Feature - AnisotropicFiltering = ... # type: QOpenGLTexture.Feature - NPOTTextures = ... # type: QOpenGLTexture.Feature - NPOTTextureRepeat = ... # type: QOpenGLTexture.Feature - Texture1D = ... # type: QOpenGLTexture.Feature - TextureComparisonOperators = ... # type: QOpenGLTexture.Feature - TextureMipMapLevel = ... # type: QOpenGLTexture.Feature - - class PixelType(enum.Enum): - NoPixelType = ... # type: QOpenGLTexture.PixelType - Int8 = ... # type: QOpenGLTexture.PixelType - UInt8 = ... # type: QOpenGLTexture.PixelType - Int16 = ... # type: QOpenGLTexture.PixelType - UInt16 = ... # type: QOpenGLTexture.PixelType - Int32 = ... # type: QOpenGLTexture.PixelType - UInt32 = ... # type: QOpenGLTexture.PixelType - Float16 = ... # type: QOpenGLTexture.PixelType - Float16OES = ... # type: QOpenGLTexture.PixelType - Float32 = ... # type: QOpenGLTexture.PixelType - UInt32_RGB9_E5 = ... # type: QOpenGLTexture.PixelType - UInt32_RG11B10F = ... # type: QOpenGLTexture.PixelType - UInt8_RG3B2 = ... # type: QOpenGLTexture.PixelType - UInt8_RG3B2_Rev = ... # type: QOpenGLTexture.PixelType - UInt16_RGB5A1 = ... # type: QOpenGLTexture.PixelType - UInt16_RGB5A1_Rev = ... # type: QOpenGLTexture.PixelType - UInt16_R5G6B5 = ... # type: QOpenGLTexture.PixelType - UInt16_R5G6B5_Rev = ... # type: QOpenGLTexture.PixelType - UInt16_RGBA4 = ... # type: QOpenGLTexture.PixelType - UInt16_RGBA4_Rev = ... # type: QOpenGLTexture.PixelType - UInt32_RGB10A2 = ... # type: QOpenGLTexture.PixelType - UInt32_RGB10A2_Rev = ... # type: QOpenGLTexture.PixelType - UInt32_RGBA8 = ... # type: QOpenGLTexture.PixelType - UInt32_RGBA8_Rev = ... # type: QOpenGLTexture.PixelType - UInt32_D24S8 = ... # type: QOpenGLTexture.PixelType - Float32_D32_UInt32_S8_X24 = ... # type: QOpenGLTexture.PixelType - - class PixelFormat(enum.Enum): - NoSourceFormat = ... # type: QOpenGLTexture.PixelFormat - Red = ... # type: QOpenGLTexture.PixelFormat - RG = ... # type: QOpenGLTexture.PixelFormat - RGB = ... # type: QOpenGLTexture.PixelFormat - BGR = ... # type: QOpenGLTexture.PixelFormat - RGBA = ... # type: QOpenGLTexture.PixelFormat - BGRA = ... # type: QOpenGLTexture.PixelFormat - Red_Integer = ... # type: QOpenGLTexture.PixelFormat - RG_Integer = ... # type: QOpenGLTexture.PixelFormat - RGB_Integer = ... # type: QOpenGLTexture.PixelFormat - BGR_Integer = ... # type: QOpenGLTexture.PixelFormat - RGBA_Integer = ... # type: QOpenGLTexture.PixelFormat - BGRA_Integer = ... # type: QOpenGLTexture.PixelFormat - Depth = ... # type: QOpenGLTexture.PixelFormat - DepthStencil = ... # type: QOpenGLTexture.PixelFormat - Alpha = ... # type: QOpenGLTexture.PixelFormat - Luminance = ... # type: QOpenGLTexture.PixelFormat - LuminanceAlpha = ... # type: QOpenGLTexture.PixelFormat - Stencil = ... # type: QOpenGLTexture.PixelFormat - - class CubeMapFace(enum.Enum): - CubeMapPositiveX = ... # type: QOpenGLTexture.CubeMapFace - CubeMapNegativeX = ... # type: QOpenGLTexture.CubeMapFace - CubeMapPositiveY = ... # type: QOpenGLTexture.CubeMapFace - CubeMapNegativeY = ... # type: QOpenGLTexture.CubeMapFace - CubeMapPositiveZ = ... # type: QOpenGLTexture.CubeMapFace - CubeMapNegativeZ = ... # type: QOpenGLTexture.CubeMapFace - - class TextureFormat(enum.Enum): - NoFormat = ... # type: QOpenGLTexture.TextureFormat - R8_UNorm = ... # type: QOpenGLTexture.TextureFormat - RG8_UNorm = ... # type: QOpenGLTexture.TextureFormat - RGB8_UNorm = ... # type: QOpenGLTexture.TextureFormat - RGBA8_UNorm = ... # type: QOpenGLTexture.TextureFormat - R16_UNorm = ... # type: QOpenGLTexture.TextureFormat - RG16_UNorm = ... # type: QOpenGLTexture.TextureFormat - RGB16_UNorm = ... # type: QOpenGLTexture.TextureFormat - RGBA16_UNorm = ... # type: QOpenGLTexture.TextureFormat - R8_SNorm = ... # type: QOpenGLTexture.TextureFormat - RG8_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGB8_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGBA8_SNorm = ... # type: QOpenGLTexture.TextureFormat - R16_SNorm = ... # type: QOpenGLTexture.TextureFormat - RG16_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGB16_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGBA16_SNorm = ... # type: QOpenGLTexture.TextureFormat - R8U = ... # type: QOpenGLTexture.TextureFormat - RG8U = ... # type: QOpenGLTexture.TextureFormat - RGB8U = ... # type: QOpenGLTexture.TextureFormat - RGBA8U = ... # type: QOpenGLTexture.TextureFormat - R16U = ... # type: QOpenGLTexture.TextureFormat - RG16U = ... # type: QOpenGLTexture.TextureFormat - RGB16U = ... # type: QOpenGLTexture.TextureFormat - RGBA16U = ... # type: QOpenGLTexture.TextureFormat - R32U = ... # type: QOpenGLTexture.TextureFormat - RG32U = ... # type: QOpenGLTexture.TextureFormat - RGB32U = ... # type: QOpenGLTexture.TextureFormat - RGBA32U = ... # type: QOpenGLTexture.TextureFormat - R8I = ... # type: QOpenGLTexture.TextureFormat - RG8I = ... # type: QOpenGLTexture.TextureFormat - RGB8I = ... # type: QOpenGLTexture.TextureFormat - RGBA8I = ... # type: QOpenGLTexture.TextureFormat - R16I = ... # type: QOpenGLTexture.TextureFormat - RG16I = ... # type: QOpenGLTexture.TextureFormat - RGB16I = ... # type: QOpenGLTexture.TextureFormat - RGBA16I = ... # type: QOpenGLTexture.TextureFormat - R32I = ... # type: QOpenGLTexture.TextureFormat - RG32I = ... # type: QOpenGLTexture.TextureFormat - RGB32I = ... # type: QOpenGLTexture.TextureFormat - RGBA32I = ... # type: QOpenGLTexture.TextureFormat - R16F = ... # type: QOpenGLTexture.TextureFormat - RG16F = ... # type: QOpenGLTexture.TextureFormat - RGB16F = ... # type: QOpenGLTexture.TextureFormat - RGBA16F = ... # type: QOpenGLTexture.TextureFormat - R32F = ... # type: QOpenGLTexture.TextureFormat - RG32F = ... # type: QOpenGLTexture.TextureFormat - RGB32F = ... # type: QOpenGLTexture.TextureFormat - RGBA32F = ... # type: QOpenGLTexture.TextureFormat - RGB9E5 = ... # type: QOpenGLTexture.TextureFormat - RG11B10F = ... # type: QOpenGLTexture.TextureFormat - RG3B2 = ... # type: QOpenGLTexture.TextureFormat - R5G6B5 = ... # type: QOpenGLTexture.TextureFormat - RGB5A1 = ... # type: QOpenGLTexture.TextureFormat - RGBA4 = ... # type: QOpenGLTexture.TextureFormat - RGB10A2 = ... # type: QOpenGLTexture.TextureFormat - D16 = ... # type: QOpenGLTexture.TextureFormat - D24 = ... # type: QOpenGLTexture.TextureFormat - D24S8 = ... # type: QOpenGLTexture.TextureFormat - D32 = ... # type: QOpenGLTexture.TextureFormat - D32F = ... # type: QOpenGLTexture.TextureFormat - D32FS8X24 = ... # type: QOpenGLTexture.TextureFormat - RGB_DXT1 = ... # type: QOpenGLTexture.TextureFormat - RGBA_DXT1 = ... # type: QOpenGLTexture.TextureFormat - RGBA_DXT3 = ... # type: QOpenGLTexture.TextureFormat - RGBA_DXT5 = ... # type: QOpenGLTexture.TextureFormat - R_ATI1N_UNorm = ... # type: QOpenGLTexture.TextureFormat - R_ATI1N_SNorm = ... # type: QOpenGLTexture.TextureFormat - RG_ATI2N_UNorm = ... # type: QOpenGLTexture.TextureFormat - RG_ATI2N_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGB_BP_UNSIGNED_FLOAT = ... # type: QOpenGLTexture.TextureFormat - RGB_BP_SIGNED_FLOAT = ... # type: QOpenGLTexture.TextureFormat - RGB_BP_UNorm = ... # type: QOpenGLTexture.TextureFormat - SRGB8 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8 = ... # type: QOpenGLTexture.TextureFormat - SRGB_DXT1 = ... # type: QOpenGLTexture.TextureFormat - SRGB_Alpha_DXT1 = ... # type: QOpenGLTexture.TextureFormat - SRGB_Alpha_DXT3 = ... # type: QOpenGLTexture.TextureFormat - SRGB_Alpha_DXT5 = ... # type: QOpenGLTexture.TextureFormat - SRGB_BP_UNorm = ... # type: QOpenGLTexture.TextureFormat - DepthFormat = ... # type: QOpenGLTexture.TextureFormat - AlphaFormat = ... # type: QOpenGLTexture.TextureFormat - RGBFormat = ... # type: QOpenGLTexture.TextureFormat - RGBAFormat = ... # type: QOpenGLTexture.TextureFormat - LuminanceFormat = ... # type: QOpenGLTexture.TextureFormat - LuminanceAlphaFormat = ... # type: QOpenGLTexture.TextureFormat - S8 = ... # type: QOpenGLTexture.TextureFormat - R11_EAC_UNorm = ... # type: QOpenGLTexture.TextureFormat - R11_EAC_SNorm = ... # type: QOpenGLTexture.TextureFormat - RG11_EAC_UNorm = ... # type: QOpenGLTexture.TextureFormat - RG11_EAC_SNorm = ... # type: QOpenGLTexture.TextureFormat - RGB8_ETC2 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_ETC2 = ... # type: QOpenGLTexture.TextureFormat - RGB8_PunchThrough_Alpha1_ETC2 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_PunchThrough_Alpha1_ETC2 = ... # type: QOpenGLTexture.TextureFormat - RGBA8_ETC2_EAC = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ETC2_EAC = ... # type: QOpenGLTexture.TextureFormat - RGB8_ETC1 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_4x4 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_5x4 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_5x5 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_6x5 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_6x6 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_8x5 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_8x6 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_8x8 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_10x5 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_10x6 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_10x8 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_10x10 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_12x10 = ... # type: QOpenGLTexture.TextureFormat - RGBA_ASTC_12x12 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_4x4 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_5x4 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_5x5 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_6x5 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_6x6 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_8x5 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_8x6 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_8x8 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_10x5 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_10x6 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_10x8 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_10x10 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_12x10 = ... # type: QOpenGLTexture.TextureFormat - SRGB8_Alpha8_ASTC_12x12 = ... # type: QOpenGLTexture.TextureFormat - - class TextureUnitReset(enum.Enum): - ResetTextureUnit = ... # type: QOpenGLTexture.TextureUnitReset - DontResetTextureUnit = ... # type: QOpenGLTexture.TextureUnitReset - - class MipMapGeneration(enum.Enum): - GenerateMipMaps = ... # type: QOpenGLTexture.MipMapGeneration - DontGenerateMipMaps = ... # type: QOpenGLTexture.MipMapGeneration - - class BindingTarget(enum.Enum): - BindingTarget1D = ... # type: QOpenGLTexture.BindingTarget - BindingTarget1DArray = ... # type: QOpenGLTexture.BindingTarget - BindingTarget2D = ... # type: QOpenGLTexture.BindingTarget - BindingTarget2DArray = ... # type: QOpenGLTexture.BindingTarget - BindingTarget3D = ... # type: QOpenGLTexture.BindingTarget - BindingTargetCubeMap = ... # type: QOpenGLTexture.BindingTarget - BindingTargetCubeMapArray = ... # type: QOpenGLTexture.BindingTarget - BindingTarget2DMultisample = ... # type: QOpenGLTexture.BindingTarget - BindingTarget2DMultisampleArray = ... # type: QOpenGLTexture.BindingTarget - BindingTargetRectangle = ... # type: QOpenGLTexture.BindingTarget - BindingTargetBuffer = ... # type: QOpenGLTexture.BindingTarget - - class Target(enum.Enum): - Target1D = ... # type: QOpenGLTexture.Target - Target1DArray = ... # type: QOpenGLTexture.Target - Target2D = ... # type: QOpenGLTexture.Target - Target2DArray = ... # type: QOpenGLTexture.Target - Target3D = ... # type: QOpenGLTexture.Target - TargetCubeMap = ... # type: QOpenGLTexture.Target - TargetCubeMapArray = ... # type: QOpenGLTexture.Target - Target2DMultisample = ... # type: QOpenGLTexture.Target - Target2DMultisampleArray = ... # type: QOpenGLTexture.Target - TargetRectangle = ... # type: QOpenGLTexture.Target - TargetBuffer = ... # type: QOpenGLTexture.Target - - @typing.overload - def __init__(self, target: 'QOpenGLTexture.Target') -> None: ... - @typing.overload - def __init__(self, image: QtGui.QImage, genMipMaps: 'QOpenGLTexture.MipMapGeneration' = ...) -> None: ... - - def comparisonMode(self) -> 'QOpenGLTexture.ComparisonMode': ... - def setComparisonMode(self, mode: 'QOpenGLTexture.ComparisonMode') -> None: ... - def comparisonFunction(self) -> 'QOpenGLTexture.ComparisonFunction': ... - def setComparisonFunction(self, function: 'QOpenGLTexture.ComparisonFunction') -> None: ... - def isFixedSamplePositions(self) -> bool: ... - def setFixedSamplePositions(self, fixed: bool) -> None: ... - def samples(self) -> int: ... - def setSamples(self, samples: int) -> None: ... - def target(self) -> 'QOpenGLTexture.Target': ... - def levelofDetailBias(self) -> float: ... - def setLevelofDetailBias(self, bias: float) -> None: ... - def levelOfDetailRange(self) -> typing.Tuple[float, float]: ... - def setLevelOfDetailRange(self, min: float, max: float) -> None: ... - def maximumLevelOfDetail(self) -> float: ... - def setMaximumLevelOfDetail(self, value: float) -> None: ... - def minimumLevelOfDetail(self) -> float: ... - def setMinimumLevelOfDetail(self, value: float) -> None: ... - def borderColor(self) -> QtGui.QColor: ... - def setBorderColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def wrapMode(self, direction: 'QOpenGLTexture.CoordinateDirection') -> 'QOpenGLTexture.WrapMode': ... - @typing.overload - def setWrapMode(self, mode: 'QOpenGLTexture.WrapMode') -> None: ... - @typing.overload - def setWrapMode(self, direction: 'QOpenGLTexture.CoordinateDirection', mode: 'QOpenGLTexture.WrapMode') -> None: ... - def maximumAnisotropy(self) -> float: ... - def setMaximumAnisotropy(self, anisotropy: float) -> None: ... - def minMagFilters(self) -> typing.Tuple['QOpenGLTexture.Filter', 'QOpenGLTexture.Filter']: ... - def setMinMagFilters(self, minificationFilter: 'QOpenGLTexture.Filter', magnificationFilter: 'QOpenGLTexture.Filter') -> None: ... - def magnificationFilter(self) -> 'QOpenGLTexture.Filter': ... - def setMagnificationFilter(self, filter: 'QOpenGLTexture.Filter') -> None: ... - def minificationFilter(self) -> 'QOpenGLTexture.Filter': ... - def setMinificationFilter(self, filter: 'QOpenGLTexture.Filter') -> None: ... - def depthStencilMode(self) -> 'QOpenGLTexture.DepthStencilMode': ... - def setDepthStencilMode(self, mode: 'QOpenGLTexture.DepthStencilMode') -> None: ... - def swizzleMask(self, component: 'QOpenGLTexture.SwizzleComponent') -> 'QOpenGLTexture.SwizzleValue': ... - @typing.overload - def setSwizzleMask(self, component: 'QOpenGLTexture.SwizzleComponent', value: 'QOpenGLTexture.SwizzleValue') -> None: ... - @typing.overload - def setSwizzleMask(self, r: 'QOpenGLTexture.SwizzleValue', g: 'QOpenGLTexture.SwizzleValue', b: 'QOpenGLTexture.SwizzleValue', a: 'QOpenGLTexture.SwizzleValue') -> None: ... - @typing.overload - def generateMipMaps(self) -> None: ... - @typing.overload - def generateMipMaps(self, baseLevel: int, resetBaseLevel: bool = ...) -> None: ... - def isAutoMipMapGenerationEnabled(self) -> bool: ... - def setAutoMipMapGenerationEnabled(self, enabled: bool) -> None: ... - def mipLevelRange(self) -> typing.Tuple[int, int]: ... - def setMipLevelRange(self, baseLevel: int, maxLevel: int) -> None: ... - def mipMaxLevel(self) -> int: ... - def setMipMaxLevel(self, maxLevel: int) -> None: ... - def mipBaseLevel(self) -> int: ... - def setMipBaseLevel(self, baseLevel: int) -> None: ... - @staticmethod - def hasFeature(feature: 'QOpenGLTexture.Feature') -> bool: ... - @typing.overload - def setCompressedData(self, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', dataSize: int, data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setCompressedData(self, mipLevel: int, layer: int, dataSize: int, data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setCompressedData(self, mipLevel: int, dataSize: int, data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setCompressedData(self, dataSize: int, data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setCompressedData(self, mipLevel: int, layer: int, layerCount: int, cubeFace: 'QOpenGLTexture.CubeMapFace', dataSize: int, data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, mipLevel: int, layer: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, mipLevel: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, image: QtGui.QImage, genMipMaps: 'QOpenGLTexture.MipMapGeneration' = ...) -> None: ... - @typing.overload - def setData(self, mipLevel: int, layer: int, layerCount: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - @typing.overload - def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', layerCount: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt6.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... - def isTextureView(self) -> bool: ... - def createTextureView(self, target: 'QOpenGLTexture.Target', viewFormat: 'QOpenGLTexture.TextureFormat', minimumMipmapLevel: int, maximumMipmapLevel: int, minimumLayer: int, maximumLayer: int) -> typing.Optional['QOpenGLTexture']: ... - def isStorageAllocated(self) -> bool: ... - @typing.overload - def allocateStorage(self) -> None: ... - @typing.overload - def allocateStorage(self, pixelFormat: 'QOpenGLTexture.PixelFormat', pixelType: 'QOpenGLTexture.PixelType') -> None: ... - def faces(self) -> int: ... - def layers(self) -> int: ... - def setLayers(self, layers: int) -> None: ... - def maximumMipLevels(self) -> int: ... - def mipLevels(self) -> int: ... - def setMipLevels(self, levels: int) -> None: ... - def depth(self) -> int: ... - def height(self) -> int: ... - def width(self) -> int: ... - def setSize(self, width: int, height: int = ..., depth: int = ...) -> None: ... - def format(self) -> 'QOpenGLTexture.TextureFormat': ... - def setFormat(self, format: 'QOpenGLTexture.TextureFormat') -> None: ... - @typing.overload - @staticmethod - def boundTextureId(target: 'QOpenGLTexture.BindingTarget') -> int: ... - @typing.overload - @staticmethod - def boundTextureId(unit: int, target: 'QOpenGLTexture.BindingTarget') -> int: ... - @typing.overload - def isBound(self) -> bool: ... - @typing.overload - def isBound(self, unit: int) -> bool: ... - @typing.overload - def release(self) -> None: ... - @typing.overload - def release(self, unit: int, reset: 'QOpenGLTexture.TextureUnitReset' = ...) -> None: ... - @typing.overload - def bind(self) -> None: ... - @typing.overload - def bind(self, unit: int, reset: 'QOpenGLTexture.TextureUnitReset' = ...) -> None: ... - def textureId(self) -> int: ... - def isCreated(self) -> bool: ... - def destroy(self) -> None: ... - def create(self) -> bool: ... - - -class QOpenGLTextureBlitter(PyQt6.sip.simplewrapper): - - class Origin(enum.Enum): - OriginBottomLeft = ... # type: QOpenGLTextureBlitter.Origin - OriginTopLeft = ... # type: QOpenGLTextureBlitter.Origin - - def __init__(self) -> None: ... - - def supportsRectangleTarget(self) -> bool: ... - @staticmethod - def sourceTransform(subTexture: QtCore.QRectF, textureSize: QtCore.QSize, origin: 'QOpenGLTextureBlitter.Origin') -> QtGui.QMatrix3x3: ... - @staticmethod - def targetTransform(target: QtCore.QRectF, viewport: QtCore.QRect) -> QtGui.QMatrix4x4: ... - @typing.overload - def blit(self, texture: int, targetTransform: QtGui.QMatrix4x4, sourceOrigin: 'QOpenGLTextureBlitter.Origin') -> None: ... - @typing.overload - def blit(self, texture: int, targetTransform: QtGui.QMatrix4x4, sourceTransform: QtGui.QMatrix3x3) -> None: ... - def setOpacity(self, opacity: float) -> None: ... - def setRedBlueSwizzle(self, swizzle: bool) -> None: ... - def release(self) -> None: ... - def bind(self, target: int = ...) -> None: ... - def supportsExternalOESTarget(self) -> bool: ... - def destroy(self) -> None: ... - def isCreated(self) -> bool: ... - def create(self) -> bool: ... - - -class QOpenGLTimerQuery(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def waitForResult(self) -> int: ... - def isResultAvailable(self) -> bool: ... - def recordTimestamp(self) -> None: ... - def waitForTimestamp(self) -> int: ... - def end(self) -> None: ... - def begin(self) -> None: ... - def objectId(self) -> int: ... - def isCreated(self) -> bool: ... - def destroy(self) -> None: ... - def create(self) -> bool: ... - - -class QOpenGLTimeMonitor(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reset(self) -> None: ... - def waitForIntervals(self) -> typing.List[int]: ... - def waitForSamples(self) -> typing.List[int]: ... - def isResultAvailable(self) -> bool: ... - def recordSample(self) -> int: ... - def objectIds(self) -> typing.List[int]: ... - def isCreated(self) -> bool: ... - def destroy(self) -> None: ... - def create(self) -> bool: ... - def sampleCount(self) -> int: ... - def setSampleCount(self, sampleCount: int) -> None: ... - - -class QAbstractOpenGLFunctions(PyQt6.sip.wrapper): ... - - -class QOpenGLVersionFunctionsFactory(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QOpenGLVersionFunctionsFactory') -> None: ... - - @staticmethod - def get(versionProfile: 'QOpenGLVersionProfile' = ..., context: typing.Optional[QtGui.QOpenGLContext] = ...) -> QAbstractOpenGLFunctions: ... - - -class QOpenGLVertexArrayObject(QtCore.QObject): - - class Binder(PyQt6.sip.simplewrapper): - - def __init__(self, v: typing.Optional['QOpenGLVertexArrayObject']) -> None: ... - - def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... - def __enter__(self) -> typing.Any: ... - def rebind(self) -> None: ... - def release(self) -> None: ... - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def release(self) -> None: ... - def bind(self) -> None: ... - def objectId(self) -> int: ... - def isCreated(self) -> bool: ... - def destroy(self) -> None: ... - def create(self) -> bool: ... - - -class QOpenGLWindow(QtGui.QPaintDeviceWindow): - - class UpdateBehavior(enum.Enum): - NoPartialUpdate = ... # type: QOpenGLWindow.UpdateBehavior - PartialUpdateBlit = ... # type: QOpenGLWindow.UpdateBehavior - PartialUpdateBlend = ... # type: QOpenGLWindow.UpdateBehavior - - @typing.overload - def __init__(self, updateBehavior: 'QOpenGLWindow.UpdateBehavior' = ..., parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - @typing.overload - def __init__(self, shareContext: typing.Optional[QtGui.QOpenGLContext], updateBehavior: 'QOpenGLWindow.UpdateBehavior' = ..., parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - - def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def paintOverGL(self) -> None: ... - def paintUnderGL(self) -> None: ... - def paintGL(self) -> None: ... - def resizeGL(self, w: int, h: int) -> None: ... - def initializeGL(self) -> None: ... - frameSwapped: typing.ClassVar[QtCore.pyqtSignal] - def shareContext(self) -> typing.Optional[QtGui.QOpenGLContext]: ... - def grabFramebuffer(self) -> QtGui.QImage: ... - def defaultFramebufferObject(self) -> int: ... - def context(self) -> typing.Optional[QtGui.QOpenGLContext]: ... - def doneCurrent(self) -> None: ... - def makeCurrent(self) -> None: ... - def isValid(self) -> bool: ... - def updateBehavior(self) -> 'QOpenGLWindow.UpdateBehavior': ... - - -class QOpenGLFunctions_2_0(QAbstractOpenGLFunctions): - - def __init__(self) -> None: ... - - def glVertexAttrib1d(self, index: int, x: float) -> None: ... - def glVertexAttrib1dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib1f(self, index: int, x: float) -> None: ... - def glVertexAttrib1fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib1s(self, index: int, x: int) -> None: ... - def glVertexAttrib1sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2d(self, index: int, x: float, y: float) -> None: ... - def glVertexAttrib2dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2f(self, index: int, x: float, y: float) -> None: ... - def glVertexAttrib2fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2s(self, index: int, x: int, y: int) -> None: ... - def glVertexAttrib2sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3d(self, index: int, x: float, y: float, z: float) -> None: ... - def glVertexAttrib3dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3f(self, index: int, x: float, y: float, z: float) -> None: ... - def glVertexAttrib3fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3s(self, index: int, x: int, y: int, z: int) -> None: ... - def glVertexAttrib3sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nbv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Niv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nsv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nub(self, index: int, x: int, y: int, z: int, w: int) -> None: ... - def glVertexAttrib4Nubv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nuiv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nusv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4bv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4d(self, index: int, x: float, y: float, z: float, w: float) -> None: ... - def glVertexAttrib4dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4f(self, index: int, x: float, y: float, z: float, w: float) -> None: ... - def glVertexAttrib4fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4iv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4s(self, index: int, x: int, y: int, z: int, w: int) -> None: ... - def glVertexAttrib4sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4ubv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4uiv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4usv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordf(self, coord: float) -> None: ... - def glFogCoordfv(self, coord: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordd(self, coord: float) -> None: ... - def glFogCoorddv(self, coord: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3b(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3d(self, red: float, green: float, blue: float) -> None: ... - def glSecondaryColor3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3f(self, red: float, green: float, blue: float) -> None: ... - def glSecondaryColor3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3i(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3s(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3ub(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3ui(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3us(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColorPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2d(self, x: float, y: float) -> None: ... - def glWindowPos2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2f(self, x: float, y: float) -> None: ... - def glWindowPos2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2i(self, x: int, y: int) -> None: ... - def glWindowPos2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2s(self, x: int, y: int) -> None: ... - def glWindowPos2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3d(self, x: float, y: float, z: float) -> None: ... - def glWindowPos3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3f(self, x: float, y: float, z: float) -> None: ... - def glWindowPos3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3i(self, x: int, y: int, z: int) -> None: ... - def glWindowPos3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3s(self, x: int, y: int, z: int) -> None: ... - def glWindowPos3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glClientActiveTexture(self, texture: int) -> None: ... - def glMultiTexCoord1d(self, target: int, s: float) -> None: ... - def glMultiTexCoord1dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1f(self, target: int, s: float) -> None: ... - def glMultiTexCoord1fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1i(self, target: int, s: int) -> None: ... - def glMultiTexCoord1iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1s(self, target: int, s: int) -> None: ... - def glMultiTexCoord1sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2d(self, target: int, s: float, t: float) -> None: ... - def glMultiTexCoord2dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2f(self, target: int, s: float, t: float) -> None: ... - def glMultiTexCoord2fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2i(self, target: int, s: int, t: int) -> None: ... - def glMultiTexCoord2iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2s(self, target: int, s: int, t: int) -> None: ... - def glMultiTexCoord2sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3d(self, target: int, s: float, t: float, r: float) -> None: ... - def glMultiTexCoord3dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3f(self, target: int, s: float, t: float, r: float) -> None: ... - def glMultiTexCoord3fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3i(self, target: int, s: int, t: int, r: int) -> None: ... - def glMultiTexCoord3iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3s(self, target: int, s: int, t: int, r: int) -> None: ... - def glMultiTexCoord3sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4d(self, target: int, s: float, t: float, r: float, q: float) -> None: ... - def glMultiTexCoord4dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4f(self, target: int, s: float, t: float, r: float, q: float) -> None: ... - def glMultiTexCoord4fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4i(self, target: int, s: int, t: int, r: int, q: int) -> None: ... - def glMultiTexCoord4iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4s(self, target: int, s: int, t: int, r: int, q: int) -> None: ... - def glMultiTexCoord4sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadTransposeMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadTransposeMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultTransposeMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultTransposeMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTable(self, target: int, internalformat: int, width: int, format: int, type: int, table: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTableParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTableParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyColorTable(self, target: int, internalformat: int, x: int, y: int, width: int) -> None: ... - def glGetColorTableParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetColorTableParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glColorSubTable(self, target: int, start: int, count: int, format: int, type: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyColorSubTable(self, target: int, start: int, x: int, y: int, width: int) -> None: ... - def glConvolutionFilter1D(self, target: int, internalformat: int, width: int, format: int, type: int, image: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionFilter2D(self, target: int, internalformat: int, width: int, height: int, format: int, type: int, image: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionParameterf(self, target: int, pname: int, params: float) -> None: ... - def glConvolutionParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionParameteri(self, target: int, pname: int, params: int) -> None: ... - def glConvolutionParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyConvolutionFilter1D(self, target: int, internalformat: int, x: int, y: int, width: int) -> None: ... - def glCopyConvolutionFilter2D(self, target: int, internalformat: int, x: int, y: int, width: int, height: int) -> None: ... - def glGetConvolutionParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetConvolutionParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glHistogram(self, target: int, width: int, internalformat: int, sink: int) -> None: ... - def glMinmax(self, target: int, internalformat: int, sink: int) -> None: ... - def glResetHistogram(self, target: int) -> None: ... - def glResetMinmax(self, target: int) -> None: ... - def glArrayElement(self, i: int) -> None: ... - def glColorPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glDisableClientState(self, array: int) -> None: ... - def glEdgeFlagPointer(self, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glEnableClientState(self, array: int) -> None: ... - def glIndexPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glNormalPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glTexCoordPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glVertexPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glPopClientAttrib(self) -> None: ... - def glPushClientAttrib(self, mask: int) -> None: ... - def glNewList(self, list: int, mode: int) -> None: ... - def glEndList(self) -> None: ... - def glCallList(self, list: int) -> None: ... - def glDeleteLists(self, list: int, range: int) -> None: ... - def glGenLists(self, range: int) -> int: ... - def glListBase(self, base: int) -> None: ... - def glBegin(self, mode: int) -> None: ... - def glBitmap(self, width: int, height: int, xorig: float, yorig: float, xmove: float, ymove: float, bitmap: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3b(self, red: int, green: int, blue: int) -> None: ... - def glColor3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3d(self, red: float, green: float, blue: float) -> None: ... - def glColor3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3f(self, red: float, green: float, blue: float) -> None: ... - def glColor3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3i(self, red: int, green: int, blue: int) -> None: ... - def glColor3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3s(self, red: int, green: int, blue: int) -> None: ... - def glColor3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3ub(self, red: int, green: int, blue: int) -> None: ... - def glColor3ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3ui(self, red: int, green: int, blue: int) -> None: ... - def glColor3uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3us(self, red: int, green: int, blue: int) -> None: ... - def glColor3usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4b(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4d(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glColor4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4f(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glColor4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4i(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4s(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4ub(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4ui(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4us(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glEdgeFlag(self, flag: int) -> None: ... - def glEdgeFlagv(self, flag: PYQT_OPENGL_ARRAY) -> None: ... - def glEnd(self) -> None: ... - def glIndexd(self, c: float) -> None: ... - def glIndexdv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexf(self, c: float) -> None: ... - def glIndexfv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexi(self, c: int) -> None: ... - def glIndexiv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexs(self, c: int) -> None: ... - def glIndexsv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3b(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3d(self, nx: float, ny: float, nz: float) -> None: ... - def glNormal3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3f(self, nx: float, ny: float, nz: float) -> None: ... - def glNormal3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3i(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3s(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2d(self, x: float, y: float) -> None: ... - def glRasterPos2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2f(self, x: float, y: float) -> None: ... - def glRasterPos2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2i(self, x: int, y: int) -> None: ... - def glRasterPos2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2s(self, x: int, y: int) -> None: ... - def glRasterPos2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3d(self, x: float, y: float, z: float) -> None: ... - def glRasterPos3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3f(self, x: float, y: float, z: float) -> None: ... - def glRasterPos3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3i(self, x: int, y: int, z: int) -> None: ... - def glRasterPos3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3s(self, x: int, y: int, z: int) -> None: ... - def glRasterPos3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4d(self, x: float, y: float, z: float, w: float) -> None: ... - def glRasterPos4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4f(self, x: float, y: float, z: float, w: float) -> None: ... - def glRasterPos4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4i(self, x: int, y: int, z: int, w: int) -> None: ... - def glRasterPos4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4s(self, x: int, y: int, z: int, w: int) -> None: ... - def glRasterPos4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRectd(self, x1: float, y1: float, x2: float, y2: float) -> None: ... - def glRectf(self, x1: float, y1: float, x2: float, y2: float) -> None: ... - def glRecti(self, x1: int, y1: int, x2: int, y2: int) -> None: ... - def glRects(self, x1: int, y1: int, x2: int, y2: int) -> None: ... - def glTexCoord1d(self, s: float) -> None: ... - def glTexCoord1dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1f(self, s: float) -> None: ... - def glTexCoord1fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1i(self, s: int) -> None: ... - def glTexCoord1iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1s(self, s: int) -> None: ... - def glTexCoord1sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2d(self, s: float, t: float) -> None: ... - def glTexCoord2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2f(self, s: float, t: float) -> None: ... - def glTexCoord2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2i(self, s: int, t: int) -> None: ... - def glTexCoord2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2s(self, s: int, t: int) -> None: ... - def glTexCoord2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3d(self, s: float, t: float, r: float) -> None: ... - def glTexCoord3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3f(self, s: float, t: float, r: float) -> None: ... - def glTexCoord3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3i(self, s: int, t: int, r: int) -> None: ... - def glTexCoord3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3s(self, s: int, t: int, r: int) -> None: ... - def glTexCoord3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4d(self, s: float, t: float, r: float, q: float) -> None: ... - def glTexCoord4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4f(self, s: float, t: float, r: float, q: float) -> None: ... - def glTexCoord4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4i(self, s: int, t: int, r: int, q: int) -> None: ... - def glTexCoord4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4s(self, s: int, t: int, r: int, q: int) -> None: ... - def glTexCoord4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2d(self, x: float, y: float) -> None: ... - def glVertex2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2f(self, x: float, y: float) -> None: ... - def glVertex2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2i(self, x: int, y: int) -> None: ... - def glVertex2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2s(self, x: int, y: int) -> None: ... - def glVertex2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3d(self, x: float, y: float, z: float) -> None: ... - def glVertex3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3f(self, x: float, y: float, z: float) -> None: ... - def glVertex3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3i(self, x: int, y: int, z: int) -> None: ... - def glVertex3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3s(self, x: int, y: int, z: int) -> None: ... - def glVertex3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4d(self, x: float, y: float, z: float, w: float) -> None: ... - def glVertex4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4f(self, x: float, y: float, z: float, w: float) -> None: ... - def glVertex4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4i(self, x: int, y: int, z: int, w: int) -> None: ... - def glVertex4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4s(self, x: int, y: int, z: int, w: int) -> None: ... - def glVertex4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glClipPlane(self, plane: int, equation: PYQT_OPENGL_ARRAY) -> None: ... - def glColorMaterial(self, face: int, mode: int) -> None: ... - def glFogf(self, pname: int, param: float) -> None: ... - def glFogfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glFogi(self, pname: int, param: int) -> None: ... - def glFogiv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightf(self, light: int, pname: int, param: float) -> None: ... - def glLightfv(self, light: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLighti(self, light: int, pname: int, param: int) -> None: ... - def glLightiv(self, light: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightModelf(self, pname: int, param: float) -> None: ... - def glLightModelfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightModeli(self, pname: int, param: int) -> None: ... - def glLightModeliv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLineStipple(self, factor: int, pattern: int) -> None: ... - def glMaterialf(self, face: int, pname: int, param: float) -> None: ... - def glMaterialfv(self, face: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glMateriali(self, face: int, pname: int, param: int) -> None: ... - def glMaterialiv(self, face: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glPolygonStipple(self, mask: PYQT_OPENGL_ARRAY) -> None: ... - def glShadeModel(self, mode: int) -> None: ... - def glTexEnvf(self, target: int, pname: int, param: float) -> None: ... - def glTexEnvfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexEnvi(self, target: int, pname: int, param: int) -> None: ... - def glTexEnviv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGend(self, coord: int, pname: int, param: float) -> None: ... - def glTexGendv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGenf(self, coord: int, pname: int, param: float) -> None: ... - def glTexGenfv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGeni(self, coord: int, pname: int, param: int) -> None: ... - def glTexGeniv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glRenderMode(self, mode: int) -> int: ... - def glInitNames(self) -> None: ... - def glLoadName(self, name: int) -> None: ... - def glPassThrough(self, token: float) -> None: ... - def glPopName(self) -> None: ... - def glPushName(self, name: int) -> None: ... - def glClearAccum(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glClearIndex(self, c: float) -> None: ... - def glIndexMask(self, mask: int) -> None: ... - def glAccum(self, op: int, value: float) -> None: ... - def glPopAttrib(self) -> None: ... - def glPushAttrib(self, mask: int) -> None: ... - def glMap1d(self, target: int, u1: float, u2: float, stride: int, order: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap1f(self, target: int, u1: float, u2: float, stride: int, order: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap2d(self, target: int, u1: float, u2: float, ustride: int, uorder: int, v1: float, v2: float, vstride: int, vorder: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap2f(self, target: int, u1: float, u2: float, ustride: int, uorder: int, v1: float, v2: float, vstride: int, vorder: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMapGrid1d(self, un: int, u1: float, u2: float) -> None: ... - def glMapGrid1f(self, un: int, u1: float, u2: float) -> None: ... - def glMapGrid2d(self, un: int, u1: float, u2: float, vn: int, v1: float, v2: float) -> None: ... - def glMapGrid2f(self, un: int, u1: float, u2: float, vn: int, v1: float, v2: float) -> None: ... - def glEvalCoord1d(self, u: float) -> None: ... - def glEvalCoord1dv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord1f(self, u: float) -> None: ... - def glEvalCoord1fv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord2d(self, u: float, v: float) -> None: ... - def glEvalCoord2dv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord2f(self, u: float, v: float) -> None: ... - def glEvalCoord2fv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalMesh1(self, mode: int, i1: int, i2: int) -> None: ... - def glEvalPoint1(self, i: int) -> None: ... - def glEvalMesh2(self, mode: int, i1: int, i2: int, j1: int, j2: int) -> None: ... - def glEvalPoint2(self, i: int, j: int) -> None: ... - def glAlphaFunc(self, func: int, ref: float) -> None: ... - def glPixelZoom(self, xfactor: float, yfactor: float) -> None: ... - def glPixelTransferf(self, pname: int, param: float) -> None: ... - def glPixelTransferi(self, pname: int, param: int) -> None: ... - def glPixelMapfv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glPixelMapuiv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glPixelMapusv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyPixels(self, x: int, y: int, width: int, height: int, type: int) -> None: ... - def glDrawPixels(self, width: int, height: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glGetClipPlane(self, plane: int) -> typing.Optional[typing.Tuple[float, float, float, float]]: ... - def glGetLightfv(self, light: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float], typing.Tuple[float, float, float, float]]]: ... - def glGetLightiv(self, light: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int], typing.Tuple[int, int, int, int]]]: ... - def glGetMaterialfv(self, face: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float], typing.Tuple[float, float, float, float]]]: ... - def glGetMaterialiv(self, face: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int], typing.Tuple[int, int, int, int]]]: ... - def glGetTexEnvfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexEnviv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glGetTexGendv(self, coord: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexGenfv(self, coord: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexGeniv(self, coord: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glIsList(self, list: int) -> int: ... - def glFrustum(self, left: float, right: float, bottom: float, top: float, zNear: float, zFar: float) -> None: ... - def glLoadIdentity(self) -> None: ... - def glLoadMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMatrixMode(self, mode: int) -> None: ... - def glMultMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glOrtho(self, left: float, right: float, bottom: float, top: float, zNear: float, zFar: float) -> None: ... - def glPopMatrix(self) -> None: ... - def glPushMatrix(self) -> None: ... - def glRotated(self, angle: float, x: float, y: float, z: float) -> None: ... - def glRotatef(self, angle: float, x: float, y: float, z: float) -> None: ... - def glScaled(self, x: float, y: float, z: float) -> None: ... - def glScalef(self, x: float, y: float, z: float) -> None: ... - def glTranslated(self, x: float, y: float, z: float) -> None: ... - def glTranslatef(self, x: float, y: float, z: float) -> None: ... - def glBlendEquationSeparate(self, modeRGB: int, modeAlpha: int) -> None: ... - def glDrawBuffers(self, n: int, bufs: PYQT_OPENGL_ARRAY) -> None: ... - def glStencilOpSeparate(self, face: int, sfail: int, dpfail: int, dppass: int) -> None: ... - def glStencilFuncSeparate(self, face: int, func: int, ref: int, mask: int) -> None: ... - def glStencilMaskSeparate(self, face: int, mask: int) -> None: ... - def glAttachShader(self, program: int, shader: int) -> None: ... - def glBindAttribLocation(self, program: int, index: int, name: typing.Optional[str]) -> None: ... - def glCompileShader(self, shader: int) -> None: ... - def glCreateProgram(self) -> int: ... - def glCreateShader(self, type: int) -> int: ... - def glDeleteProgram(self, program: int) -> None: ... - def glDeleteShader(self, shader: int) -> None: ... - def glDetachShader(self, program: int, shader: int) -> None: ... - def glDisableVertexAttribArray(self, index: int) -> None: ... - def glEnableVertexAttribArray(self, index: int) -> None: ... - def glGetActiveAttrib(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetActiveUniform(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetAttachedShaders(self, program: int) -> typing.Tuple[int, ...]: ... - def glGetAttribLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetProgramiv(self, program: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int]]]: ... - def glGetProgramInfoLog(self, program: int) -> bytes: ... - def glGetShaderiv(self, shader: int, pname: int) -> typing.Optional[int]: ... - def glGetShaderInfoLog(self, shader: int) -> bytes: ... - def glGetShaderSource(self, shader: int) -> bytes: ... - def glGetUniformLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetVertexAttribdv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribfv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribiv(self, index: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glIsProgram(self, program: int) -> int: ... - def glIsShader(self, shader: int) -> int: ... - def glLinkProgram(self, program: int) -> None: ... - def glUseProgram(self, program: int) -> None: ... - def glUniform1f(self, location: int, v0: float) -> None: ... - def glUniform2f(self, location: int, v0: float, v1: float) -> None: ... - def glUniform3f(self, location: int, v0: float, v1: float, v2: float) -> None: ... - def glUniform4f(self, location: int, v0: float, v1: float, v2: float, v3: float) -> None: ... - def glUniform1i(self, location: int, v0: int) -> None: ... - def glUniform2i(self, location: int, v0: int, v1: int) -> None: ... - def glUniform3i(self, location: int, v0: int, v1: int, v2: int) -> None: ... - def glUniform4i(self, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glUniform1fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform1iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix2fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix3fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix4fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glValidateProgram(self, program: int) -> None: ... - def glVertexAttribPointer(self, index: int, size: int, type: int, normalized: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glGenQueries(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glDeleteQueries(self, n: int, ids: PYQT_OPENGL_ARRAY) -> None: ... - def glIsQuery(self, id: int) -> int: ... - def glBeginQuery(self, target: int, id: int) -> None: ... - def glEndQuery(self, target: int) -> None: ... - def glGetQueryiv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBindBuffer(self, target: int, buffer: int) -> None: ... - def glDeleteBuffers(self, n: int, buffers: PYQT_OPENGL_ARRAY) -> None: ... - def glGenBuffers(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsBuffer(self, buffer: int) -> int: ... - def glBufferData(self, target: int, size: int, data: PYQT_OPENGL_ARRAY, usage: int) -> None: ... - def glBufferSubData(self, target: int, offset: int, size: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glUnmapBuffer(self, target: int) -> int: ... - def glGetBufferParameteriv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBlendFuncSeparate(self, sfactorRGB: int, dfactorRGB: int, sfactorAlpha: int, dfactorAlpha: int) -> None: ... - def glPointParameterf(self, pname: int, param: float) -> None: ... - def glPointParameterfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glPointParameteri(self, pname: int, param: int) -> None: ... - def glPointParameteriv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glActiveTexture(self, texture: int) -> None: ... - def glSampleCoverage(self, value: float, invert: int) -> None: ... - def glCompressedTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glBlendColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glBlendEquation(self, mode: int) -> None: ... - def glDrawRangeElements(self, mode: int, start: int, end: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glDrawArrays(self, mode: int, first: int, count: int) -> None: ... - def glDrawElements(self, mode: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glPolygonOffset(self, factor: float, units: float) -> None: ... - def glCopyTexImage1D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, border: int) -> None: ... - def glCopyTexImage2D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, height: int, border: int) -> None: ... - def glCopyTexSubImage1D(self, target: int, level: int, xoffset: int, x: int, y: int, width: int) -> None: ... - def glCopyTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glBindTexture(self, target: int, texture: int) -> None: ... - def glDeleteTextures(self, n: int, textures: PYQT_OPENGL_ARRAY) -> None: ... - def glGenTextures(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsTexture(self, texture: int) -> int: ... - def glIndexub(self, c: int) -> None: ... - def glIndexubv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glCullFace(self, mode: int) -> None: ... - def glFrontFace(self, mode: int) -> None: ... - def glHint(self, target: int, mode: int) -> None: ... - def glLineWidth(self, width: float) -> None: ... - def glPointSize(self, size: float) -> None: ... - def glPolygonMode(self, face: int, mode: int) -> None: ... - def glScissor(self, x: int, y: int, width: int, height: int) -> None: ... - def glTexParameterf(self, target: int, pname: int, param: float) -> None: ... - def glTexParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexParameteri(self, target: int, pname: int, param: int) -> None: ... - def glTexParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glDrawBuffer(self, mode: int) -> None: ... - def glClear(self, mask: int) -> None: ... - def glClearColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glClearStencil(self, s: int) -> None: ... - def glClearDepth(self, depth: float) -> None: ... - def glStencilMask(self, mask: int) -> None: ... - def glColorMask(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glDepthMask(self, flag: int) -> None: ... - def glDisable(self, cap: int) -> None: ... - def glEnable(self, cap: int) -> None: ... - def glFinish(self) -> None: ... - def glFlush(self) -> None: ... - def glBlendFunc(self, sfactor: int, dfactor: int) -> None: ... - def glLogicOp(self, opcode: int) -> None: ... - def glStencilFunc(self, func: int, ref: int, mask: int) -> None: ... - def glStencilOp(self, fail: int, zfail: int, zpass: int) -> None: ... - def glDepthFunc(self, func: int) -> None: ... - def glPixelStoref(self, pname: int, param: float) -> None: ... - def glPixelStorei(self, pname: int, param: int) -> None: ... - def glReadBuffer(self, mode: int) -> None: ... - def glReadPixels(self, x: int, y: int, width: int, height: int, format: int, type: int) -> typing.Union[typing.Tuple[float, ...], typing.Tuple[int, ...]]: ... - def glGetBooleanv(self, pname: int) -> typing.Optional[typing.Union[bool, typing.Tuple[bool, ...]]]: ... - def glGetDoublev(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetError(self) -> int: ... - def glGetFloatv(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetIntegerv(self, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glGetString(self, name: int) -> typing.Optional[str]: ... - def glGetTexParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glGetTexLevelParameterfv(self, target: int, level: int, pname: int) -> typing.Optional[float]: ... - def glGetTexLevelParameteriv(self, target: int, level: int, pname: int) -> typing.Optional[int]: ... - def glIsEnabled(self, cap: int) -> int: ... - def glDepthRange(self, nearVal: float, farVal: float) -> None: ... - def glViewport(self, x: int, y: int, width: int, height: int) -> None: ... - def initializeOpenGLFunctions(self) -> bool: ... - - -class QOpenGLFunctions_2_1(QAbstractOpenGLFunctions): - - def __init__(self) -> None: ... - - def glVertexAttrib1d(self, index: int, x: float) -> None: ... - def glVertexAttrib1dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib1f(self, index: int, x: float) -> None: ... - def glVertexAttrib1fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib1s(self, index: int, x: int) -> None: ... - def glVertexAttrib1sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2d(self, index: int, x: float, y: float) -> None: ... - def glVertexAttrib2dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2f(self, index: int, x: float, y: float) -> None: ... - def glVertexAttrib2fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib2s(self, index: int, x: int, y: int) -> None: ... - def glVertexAttrib2sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3d(self, index: int, x: float, y: float, z: float) -> None: ... - def glVertexAttrib3dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3f(self, index: int, x: float, y: float, z: float) -> None: ... - def glVertexAttrib3fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib3s(self, index: int, x: int, y: int, z: int) -> None: ... - def glVertexAttrib3sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nbv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Niv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nsv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nub(self, index: int, x: int, y: int, z: int, w: int) -> None: ... - def glVertexAttrib4Nubv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nuiv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4Nusv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4bv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4d(self, index: int, x: float, y: float, z: float, w: float) -> None: ... - def glVertexAttrib4dv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4f(self, index: int, x: float, y: float, z: float, w: float) -> None: ... - def glVertexAttrib4fv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4iv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4s(self, index: int, x: int, y: int, z: int, w: int) -> None: ... - def glVertexAttrib4sv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4ubv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4uiv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertexAttrib4usv(self, index: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordf(self, coord: float) -> None: ... - def glFogCoordfv(self, coord: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordd(self, coord: float) -> None: ... - def glFogCoorddv(self, coord: PYQT_OPENGL_ARRAY) -> None: ... - def glFogCoordPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3b(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3d(self, red: float, green: float, blue: float) -> None: ... - def glSecondaryColor3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3f(self, red: float, green: float, blue: float) -> None: ... - def glSecondaryColor3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3i(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3s(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3ub(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3ui(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColor3us(self, red: int, green: int, blue: int) -> None: ... - def glSecondaryColor3usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glSecondaryColorPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2d(self, x: float, y: float) -> None: ... - def glWindowPos2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2f(self, x: float, y: float) -> None: ... - def glWindowPos2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2i(self, x: int, y: int) -> None: ... - def glWindowPos2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos2s(self, x: int, y: int) -> None: ... - def glWindowPos2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3d(self, x: float, y: float, z: float) -> None: ... - def glWindowPos3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3f(self, x: float, y: float, z: float) -> None: ... - def glWindowPos3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3i(self, x: int, y: int, z: int) -> None: ... - def glWindowPos3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glWindowPos3s(self, x: int, y: int, z: int) -> None: ... - def glWindowPos3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glClientActiveTexture(self, texture: int) -> None: ... - def glMultiTexCoord1d(self, target: int, s: float) -> None: ... - def glMultiTexCoord1dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1f(self, target: int, s: float) -> None: ... - def glMultiTexCoord1fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1i(self, target: int, s: int) -> None: ... - def glMultiTexCoord1iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord1s(self, target: int, s: int) -> None: ... - def glMultiTexCoord1sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2d(self, target: int, s: float, t: float) -> None: ... - def glMultiTexCoord2dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2f(self, target: int, s: float, t: float) -> None: ... - def glMultiTexCoord2fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2i(self, target: int, s: int, t: int) -> None: ... - def glMultiTexCoord2iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord2s(self, target: int, s: int, t: int) -> None: ... - def glMultiTexCoord2sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3d(self, target: int, s: float, t: float, r: float) -> None: ... - def glMultiTexCoord3dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3f(self, target: int, s: float, t: float, r: float) -> None: ... - def glMultiTexCoord3fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3i(self, target: int, s: int, t: int, r: int) -> None: ... - def glMultiTexCoord3iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord3s(self, target: int, s: int, t: int, r: int) -> None: ... - def glMultiTexCoord3sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4d(self, target: int, s: float, t: float, r: float, q: float) -> None: ... - def glMultiTexCoord4dv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4f(self, target: int, s: float, t: float, r: float, q: float) -> None: ... - def glMultiTexCoord4fv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4i(self, target: int, s: int, t: int, r: int, q: int) -> None: ... - def glMultiTexCoord4iv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glMultiTexCoord4s(self, target: int, s: int, t: int, r: int, q: int) -> None: ... - def glMultiTexCoord4sv(self, target: int, v: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadTransposeMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadTransposeMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultTransposeMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultTransposeMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTable(self, target: int, internalformat: int, width: int, format: int, type: int, table: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTableParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glColorTableParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyColorTable(self, target: int, internalformat: int, x: int, y: int, width: int) -> None: ... - def glGetColorTableParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetColorTableParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glColorSubTable(self, target: int, start: int, count: int, format: int, type: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyColorSubTable(self, target: int, start: int, x: int, y: int, width: int) -> None: ... - def glConvolutionFilter1D(self, target: int, internalformat: int, width: int, format: int, type: int, image: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionFilter2D(self, target: int, internalformat: int, width: int, height: int, format: int, type: int, image: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionParameterf(self, target: int, pname: int, params: float) -> None: ... - def glConvolutionParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glConvolutionParameteri(self, target: int, pname: int, params: int) -> None: ... - def glConvolutionParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyConvolutionFilter1D(self, target: int, internalformat: int, x: int, y: int, width: int) -> None: ... - def glCopyConvolutionFilter2D(self, target: int, internalformat: int, x: int, y: int, width: int, height: int) -> None: ... - def glGetConvolutionParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetConvolutionParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glHistogram(self, target: int, width: int, internalformat: int, sink: int) -> None: ... - def glMinmax(self, target: int, internalformat: int, sink: int) -> None: ... - def glResetHistogram(self, target: int) -> None: ... - def glResetMinmax(self, target: int) -> None: ... - def glArrayElement(self, i: int) -> None: ... - def glColorPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glDisableClientState(self, array: int) -> None: ... - def glEdgeFlagPointer(self, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glEnableClientState(self, array: int) -> None: ... - def glIndexPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glNormalPointer(self, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glTexCoordPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glVertexPointer(self, size: int, type: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glPopClientAttrib(self) -> None: ... - def glPushClientAttrib(self, mask: int) -> None: ... - def glNewList(self, list: int, mode: int) -> None: ... - def glEndList(self) -> None: ... - def glCallList(self, list: int) -> None: ... - def glDeleteLists(self, list: int, range: int) -> None: ... - def glGenLists(self, range: int) -> int: ... - def glListBase(self, base: int) -> None: ... - def glBegin(self, mode: int) -> None: ... - def glBitmap(self, width: int, height: int, xorig: float, yorig: float, xmove: float, ymove: float, bitmap: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3b(self, red: int, green: int, blue: int) -> None: ... - def glColor3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3d(self, red: float, green: float, blue: float) -> None: ... - def glColor3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3f(self, red: float, green: float, blue: float) -> None: ... - def glColor3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3i(self, red: int, green: int, blue: int) -> None: ... - def glColor3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3s(self, red: int, green: int, blue: int) -> None: ... - def glColor3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3ub(self, red: int, green: int, blue: int) -> None: ... - def glColor3ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3ui(self, red: int, green: int, blue: int) -> None: ... - def glColor3uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor3us(self, red: int, green: int, blue: int) -> None: ... - def glColor3usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4b(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4d(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glColor4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4f(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glColor4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4i(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4s(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4ub(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4ubv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4ui(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4uiv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glColor4us(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glColor4usv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glEdgeFlag(self, flag: int) -> None: ... - def glEdgeFlagv(self, flag: PYQT_OPENGL_ARRAY) -> None: ... - def glEnd(self) -> None: ... - def glIndexd(self, c: float) -> None: ... - def glIndexdv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexf(self, c: float) -> None: ... - def glIndexfv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexi(self, c: int) -> None: ... - def glIndexiv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glIndexs(self, c: int) -> None: ... - def glIndexsv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3b(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3bv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3d(self, nx: float, ny: float, nz: float) -> None: ... - def glNormal3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3f(self, nx: float, ny: float, nz: float) -> None: ... - def glNormal3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3i(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glNormal3s(self, nx: int, ny: int, nz: int) -> None: ... - def glNormal3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2d(self, x: float, y: float) -> None: ... - def glRasterPos2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2f(self, x: float, y: float) -> None: ... - def glRasterPos2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2i(self, x: int, y: int) -> None: ... - def glRasterPos2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos2s(self, x: int, y: int) -> None: ... - def glRasterPos2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3d(self, x: float, y: float, z: float) -> None: ... - def glRasterPos3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3f(self, x: float, y: float, z: float) -> None: ... - def glRasterPos3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3i(self, x: int, y: int, z: int) -> None: ... - def glRasterPos3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos3s(self, x: int, y: int, z: int) -> None: ... - def glRasterPos3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4d(self, x: float, y: float, z: float, w: float) -> None: ... - def glRasterPos4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4f(self, x: float, y: float, z: float, w: float) -> None: ... - def glRasterPos4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4i(self, x: int, y: int, z: int, w: int) -> None: ... - def glRasterPos4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRasterPos4s(self, x: int, y: int, z: int, w: int) -> None: ... - def glRasterPos4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glRectd(self, x1: float, y1: float, x2: float, y2: float) -> None: ... - def glRectf(self, x1: float, y1: float, x2: float, y2: float) -> None: ... - def glRecti(self, x1: int, y1: int, x2: int, y2: int) -> None: ... - def glRects(self, x1: int, y1: int, x2: int, y2: int) -> None: ... - def glTexCoord1d(self, s: float) -> None: ... - def glTexCoord1dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1f(self, s: float) -> None: ... - def glTexCoord1fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1i(self, s: int) -> None: ... - def glTexCoord1iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord1s(self, s: int) -> None: ... - def glTexCoord1sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2d(self, s: float, t: float) -> None: ... - def glTexCoord2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2f(self, s: float, t: float) -> None: ... - def glTexCoord2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2i(self, s: int, t: int) -> None: ... - def glTexCoord2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord2s(self, s: int, t: int) -> None: ... - def glTexCoord2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3d(self, s: float, t: float, r: float) -> None: ... - def glTexCoord3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3f(self, s: float, t: float, r: float) -> None: ... - def glTexCoord3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3i(self, s: int, t: int, r: int) -> None: ... - def glTexCoord3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord3s(self, s: int, t: int, r: int) -> None: ... - def glTexCoord3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4d(self, s: float, t: float, r: float, q: float) -> None: ... - def glTexCoord4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4f(self, s: float, t: float, r: float, q: float) -> None: ... - def glTexCoord4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4i(self, s: int, t: int, r: int, q: int) -> None: ... - def glTexCoord4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glTexCoord4s(self, s: int, t: int, r: int, q: int) -> None: ... - def glTexCoord4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2d(self, x: float, y: float) -> None: ... - def glVertex2dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2f(self, x: float, y: float) -> None: ... - def glVertex2fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2i(self, x: int, y: int) -> None: ... - def glVertex2iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex2s(self, x: int, y: int) -> None: ... - def glVertex2sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3d(self, x: float, y: float, z: float) -> None: ... - def glVertex3dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3f(self, x: float, y: float, z: float) -> None: ... - def glVertex3fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3i(self, x: int, y: int, z: int) -> None: ... - def glVertex3iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex3s(self, x: int, y: int, z: int) -> None: ... - def glVertex3sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4d(self, x: float, y: float, z: float, w: float) -> None: ... - def glVertex4dv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4f(self, x: float, y: float, z: float, w: float) -> None: ... - def glVertex4fv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4i(self, x: int, y: int, z: int, w: int) -> None: ... - def glVertex4iv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glVertex4s(self, x: int, y: int, z: int, w: int) -> None: ... - def glVertex4sv(self, v: PYQT_OPENGL_ARRAY) -> None: ... - def glClipPlane(self, plane: int, equation: PYQT_OPENGL_ARRAY) -> None: ... - def glColorMaterial(self, face: int, mode: int) -> None: ... - def glFogf(self, pname: int, param: float) -> None: ... - def glFogfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glFogi(self, pname: int, param: int) -> None: ... - def glFogiv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightf(self, light: int, pname: int, param: float) -> None: ... - def glLightfv(self, light: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLighti(self, light: int, pname: int, param: int) -> None: ... - def glLightiv(self, light: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightModelf(self, pname: int, param: float) -> None: ... - def glLightModelfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLightModeli(self, pname: int, param: int) -> None: ... - def glLightModeliv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glLineStipple(self, factor: int, pattern: int) -> None: ... - def glMaterialf(self, face: int, pname: int, param: float) -> None: ... - def glMaterialfv(self, face: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glMateriali(self, face: int, pname: int, param: int) -> None: ... - def glMaterialiv(self, face: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glPolygonStipple(self, mask: PYQT_OPENGL_ARRAY) -> None: ... - def glShadeModel(self, mode: int) -> None: ... - def glTexEnvf(self, target: int, pname: int, param: float) -> None: ... - def glTexEnvfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexEnvi(self, target: int, pname: int, param: int) -> None: ... - def glTexEnviv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGend(self, coord: int, pname: int, param: float) -> None: ... - def glTexGendv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGenf(self, coord: int, pname: int, param: float) -> None: ... - def glTexGenfv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexGeni(self, coord: int, pname: int, param: int) -> None: ... - def glTexGeniv(self, coord: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glRenderMode(self, mode: int) -> int: ... - def glInitNames(self) -> None: ... - def glLoadName(self, name: int) -> None: ... - def glPassThrough(self, token: float) -> None: ... - def glPopName(self) -> None: ... - def glPushName(self, name: int) -> None: ... - def glClearAccum(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glClearIndex(self, c: float) -> None: ... - def glIndexMask(self, mask: int) -> None: ... - def glAccum(self, op: int, value: float) -> None: ... - def glPopAttrib(self) -> None: ... - def glPushAttrib(self, mask: int) -> None: ... - def glMap1d(self, target: int, u1: float, u2: float, stride: int, order: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap1f(self, target: int, u1: float, u2: float, stride: int, order: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap2d(self, target: int, u1: float, u2: float, ustride: int, uorder: int, v1: float, v2: float, vstride: int, vorder: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMap2f(self, target: int, u1: float, u2: float, ustride: int, uorder: int, v1: float, v2: float, vstride: int, vorder: int, points: PYQT_OPENGL_ARRAY) -> None: ... - def glMapGrid1d(self, un: int, u1: float, u2: float) -> None: ... - def glMapGrid1f(self, un: int, u1: float, u2: float) -> None: ... - def glMapGrid2d(self, un: int, u1: float, u2: float, vn: int, v1: float, v2: float) -> None: ... - def glMapGrid2f(self, un: int, u1: float, u2: float, vn: int, v1: float, v2: float) -> None: ... - def glEvalCoord1d(self, u: float) -> None: ... - def glEvalCoord1dv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord1f(self, u: float) -> None: ... - def glEvalCoord1fv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord2d(self, u: float, v: float) -> None: ... - def glEvalCoord2dv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalCoord2f(self, u: float, v: float) -> None: ... - def glEvalCoord2fv(self, u: PYQT_OPENGL_ARRAY) -> None: ... - def glEvalMesh1(self, mode: int, i1: int, i2: int) -> None: ... - def glEvalPoint1(self, i: int) -> None: ... - def glEvalMesh2(self, mode: int, i1: int, i2: int, j1: int, j2: int) -> None: ... - def glEvalPoint2(self, i: int, j: int) -> None: ... - def glAlphaFunc(self, func: int, ref: float) -> None: ... - def glPixelZoom(self, xfactor: float, yfactor: float) -> None: ... - def glPixelTransferf(self, pname: int, param: float) -> None: ... - def glPixelTransferi(self, pname: int, param: int) -> None: ... - def glPixelMapfv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glPixelMapuiv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glPixelMapusv(self, map: int, mapsize: int, values: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyPixels(self, x: int, y: int, width: int, height: int, type: int) -> None: ... - def glDrawPixels(self, width: int, height: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glGetClipPlane(self, plane: int) -> typing.Optional[typing.Tuple[float, float, float, float]]: ... - def glGetLightfv(self, light: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float], typing.Tuple[float, float, float, float]]]: ... - def glGetLightiv(self, light: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int], typing.Tuple[int, int, int, int]]]: ... - def glGetMaterialfv(self, face: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float], typing.Tuple[float, float, float, float]]]: ... - def glGetMaterialiv(self, face: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int], typing.Tuple[int, int, int, int]]]: ... - def glGetTexEnvfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexEnviv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glGetTexGendv(self, coord: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexGenfv(self, coord: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexGeniv(self, coord: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glIsList(self, list: int) -> int: ... - def glFrustum(self, left: float, right: float, bottom: float, top: float, zNear: float, zFar: float) -> None: ... - def glLoadIdentity(self) -> None: ... - def glLoadMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glLoadMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMatrixMode(self, mode: int) -> None: ... - def glMultMatrixf(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glMultMatrixd(self, m: PYQT_OPENGL_ARRAY) -> None: ... - def glOrtho(self, left: float, right: float, bottom: float, top: float, zNear: float, zFar: float) -> None: ... - def glPopMatrix(self) -> None: ... - def glPushMatrix(self) -> None: ... - def glRotated(self, angle: float, x: float, y: float, z: float) -> None: ... - def glRotatef(self, angle: float, x: float, y: float, z: float) -> None: ... - def glScaled(self, x: float, y: float, z: float) -> None: ... - def glScalef(self, x: float, y: float, z: float) -> None: ... - def glTranslated(self, x: float, y: float, z: float) -> None: ... - def glTranslatef(self, x: float, y: float, z: float) -> None: ... - def glBlendEquationSeparate(self, modeRGB: int, modeAlpha: int) -> None: ... - def glDrawBuffers(self, n: int, bufs: PYQT_OPENGL_ARRAY) -> None: ... - def glStencilOpSeparate(self, face: int, sfail: int, dpfail: int, dppass: int) -> None: ... - def glStencilFuncSeparate(self, face: int, func: int, ref: int, mask: int) -> None: ... - def glStencilMaskSeparate(self, face: int, mask: int) -> None: ... - def glAttachShader(self, program: int, shader: int) -> None: ... - def glBindAttribLocation(self, program: int, index: int, name: typing.Optional[str]) -> None: ... - def glCompileShader(self, shader: int) -> None: ... - def glCreateProgram(self) -> int: ... - def glCreateShader(self, type: int) -> int: ... - def glDeleteProgram(self, program: int) -> None: ... - def glDeleteShader(self, shader: int) -> None: ... - def glDetachShader(self, program: int, shader: int) -> None: ... - def glDisableVertexAttribArray(self, index: int) -> None: ... - def glEnableVertexAttribArray(self, index: int) -> None: ... - def glGetActiveAttrib(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetActiveUniform(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetAttachedShaders(self, program: int) -> typing.Tuple[int, ...]: ... - def glGetAttribLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetProgramiv(self, program: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int]]]: ... - def glGetProgramInfoLog(self, program: int) -> bytes: ... - def glGetShaderiv(self, shader: int, pname: int) -> typing.Optional[int]: ... - def glGetShaderInfoLog(self, shader: int) -> bytes: ... - def glGetShaderSource(self, shader: int) -> bytes: ... - def glGetUniformLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetVertexAttribdv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribfv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribiv(self, index: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glIsProgram(self, program: int) -> int: ... - def glIsShader(self, shader: int) -> int: ... - def glLinkProgram(self, program: int) -> None: ... - def glUseProgram(self, program: int) -> None: ... - def glUniform1f(self, location: int, v0: float) -> None: ... - def glUniform2f(self, location: int, v0: float, v1: float) -> None: ... - def glUniform3f(self, location: int, v0: float, v1: float, v2: float) -> None: ... - def glUniform4f(self, location: int, v0: float, v1: float, v2: float, v3: float) -> None: ... - def glUniform1i(self, location: int, v0: int) -> None: ... - def glUniform2i(self, location: int, v0: int, v1: int) -> None: ... - def glUniform3i(self, location: int, v0: int, v1: int, v2: int) -> None: ... - def glUniform4i(self, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glUniform1fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform1iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix2fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix3fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix4fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glValidateProgram(self, program: int) -> None: ... - def glVertexAttribPointer(self, index: int, size: int, type: int, normalized: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glGenQueries(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glDeleteQueries(self, n: int, ids: PYQT_OPENGL_ARRAY) -> None: ... - def glIsQuery(self, id: int) -> int: ... - def glBeginQuery(self, target: int, id: int) -> None: ... - def glEndQuery(self, target: int) -> None: ... - def glGetQueryiv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBindBuffer(self, target: int, buffer: int) -> None: ... - def glDeleteBuffers(self, n: int, buffers: PYQT_OPENGL_ARRAY) -> None: ... - def glGenBuffers(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsBuffer(self, buffer: int) -> int: ... - def glBufferData(self, target: int, size: int, data: PYQT_OPENGL_ARRAY, usage: int) -> None: ... - def glBufferSubData(self, target: int, offset: int, size: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glUnmapBuffer(self, target: int) -> int: ... - def glGetBufferParameteriv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBlendFuncSeparate(self, sfactorRGB: int, dfactorRGB: int, sfactorAlpha: int, dfactorAlpha: int) -> None: ... - def glPointParameterf(self, pname: int, param: float) -> None: ... - def glPointParameterfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glPointParameteri(self, pname: int, param: int) -> None: ... - def glPointParameteriv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glActiveTexture(self, texture: int) -> None: ... - def glSampleCoverage(self, value: float, invert: int) -> None: ... - def glCompressedTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glBlendColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glBlendEquation(self, mode: int) -> None: ... - def glDrawRangeElements(self, mode: int, start: int, end: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glDrawArrays(self, mode: int, first: int, count: int) -> None: ... - def glDrawElements(self, mode: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glPolygonOffset(self, factor: float, units: float) -> None: ... - def glCopyTexImage1D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, border: int) -> None: ... - def glCopyTexImage2D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, height: int, border: int) -> None: ... - def glCopyTexSubImage1D(self, target: int, level: int, xoffset: int, x: int, y: int, width: int) -> None: ... - def glCopyTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glBindTexture(self, target: int, texture: int) -> None: ... - def glDeleteTextures(self, n: int, textures: PYQT_OPENGL_ARRAY) -> None: ... - def glGenTextures(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsTexture(self, texture: int) -> int: ... - def glIndexub(self, c: int) -> None: ... - def glIndexubv(self, c: PYQT_OPENGL_ARRAY) -> None: ... - def glCullFace(self, mode: int) -> None: ... - def glFrontFace(self, mode: int) -> None: ... - def glHint(self, target: int, mode: int) -> None: ... - def glLineWidth(self, width: float) -> None: ... - def glPointSize(self, size: float) -> None: ... - def glPolygonMode(self, face: int, mode: int) -> None: ... - def glScissor(self, x: int, y: int, width: int, height: int) -> None: ... - def glTexParameterf(self, target: int, pname: int, param: float) -> None: ... - def glTexParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexParameteri(self, target: int, pname: int, param: int) -> None: ... - def glTexParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glDrawBuffer(self, mode: int) -> None: ... - def glClear(self, mask: int) -> None: ... - def glClearColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glClearStencil(self, s: int) -> None: ... - def glClearDepth(self, depth: float) -> None: ... - def glStencilMask(self, mask: int) -> None: ... - def glColorMask(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glDepthMask(self, flag: int) -> None: ... - def glDisable(self, cap: int) -> None: ... - def glEnable(self, cap: int) -> None: ... - def glFinish(self) -> None: ... - def glFlush(self) -> None: ... - def glBlendFunc(self, sfactor: int, dfactor: int) -> None: ... - def glLogicOp(self, opcode: int) -> None: ... - def glStencilFunc(self, func: int, ref: int, mask: int) -> None: ... - def glStencilOp(self, fail: int, zfail: int, zpass: int) -> None: ... - def glDepthFunc(self, func: int) -> None: ... - def glPixelStoref(self, pname: int, param: float) -> None: ... - def glPixelStorei(self, pname: int, param: int) -> None: ... - def glReadBuffer(self, mode: int) -> None: ... - def glReadPixels(self, x: int, y: int, width: int, height: int, format: int, type: int) -> typing.Union[typing.Tuple[float, ...], typing.Tuple[int, ...]]: ... - def glGetBooleanv(self, pname: int) -> typing.Optional[typing.Union[bool, typing.Tuple[bool, ...]]]: ... - def glGetDoublev(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetError(self) -> int: ... - def glGetFloatv(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetIntegerv(self, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glGetString(self, name: int) -> typing.Optional[str]: ... - def glGetTexParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glGetTexLevelParameterfv(self, target: int, level: int, pname: int) -> typing.Optional[float]: ... - def glGetTexLevelParameteriv(self, target: int, level: int, pname: int) -> typing.Optional[int]: ... - def glIsEnabled(self, cap: int) -> int: ... - def glDepthRange(self, nearVal: float, farVal: float) -> None: ... - def glViewport(self, x: int, y: int, width: int, height: int) -> None: ... - def initializeOpenGLFunctions(self) -> bool: ... - - -class QOpenGLFunctions_4_1_Core(QAbstractOpenGLFunctions): - - def __init__(self) -> None: ... - - def glReleaseShaderCompiler(self) -> None: ... - def glDepthRangef(self, n: float, f: float) -> None: ... - def glClearDepthf(self, dd: float) -> None: ... - def glProgramParameteri(self, program: int, pname: int, value: int) -> None: ... - def glUseProgramStages(self, pipeline: int, stages: int, program: int) -> None: ... - def glActiveShaderProgram(self, pipeline: int, program: int) -> None: ... - def glBindProgramPipeline(self, pipeline: int) -> None: ... - def glIsProgramPipeline(self, pipeline: int) -> int: ... - def glProgramUniform1i(self, program: int, location: int, v0: int) -> None: ... - def glProgramUniform1f(self, program: int, location: int, v0: float) -> None: ... - def glProgramUniform1d(self, program: int, location: int, v0: float) -> None: ... - def glProgramUniform1ui(self, program: int, location: int, v0: int) -> None: ... - def glProgramUniform2i(self, program: int, location: int, v0: int, v1: int) -> None: ... - def glProgramUniform2f(self, program: int, location: int, v0: float, v1: float) -> None: ... - def glProgramUniform2d(self, program: int, location: int, v0: float, v1: float) -> None: ... - def glProgramUniform2ui(self, program: int, location: int, v0: int, v1: int) -> None: ... - def glProgramUniform3i(self, program: int, location: int, v0: int, v1: int, v2: int) -> None: ... - def glProgramUniform3f(self, program: int, location: int, v0: float, v1: float, v2: float) -> None: ... - def glProgramUniform3d(self, program: int, location: int, v0: float, v1: float, v2: float) -> None: ... - def glProgramUniform3ui(self, program: int, location: int, v0: int, v1: int, v2: int) -> None: ... - def glProgramUniform4i(self, program: int, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glProgramUniform4f(self, program: int, location: int, v0: float, v1: float, v2: float, v3: float) -> None: ... - def glProgramUniform4d(self, program: int, location: int, v0: float, v1: float, v2: float, v3: float) -> None: ... - def glProgramUniform4ui(self, program: int, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glValidateProgramPipeline(self, pipeline: int) -> None: ... - def glVertexAttribL1d(self, index: int, x: float) -> None: ... - def glVertexAttribL2d(self, index: int, x: float, y: float) -> None: ... - def glVertexAttribL3d(self, index: int, x: float, y: float, z: float) -> None: ... - def glVertexAttribL4d(self, index: int, x: float, y: float, z: float, w: float) -> None: ... - def glViewportIndexedf(self, index: int, x: float, y: float, w: float, h: float) -> None: ... - def glScissorIndexed(self, index: int, left: int, bottom: int, width: int, height: int) -> None: ... - def glDepthRangeIndexed(self, index: int, n: float, f: float) -> None: ... - def glMinSampleShading(self, value: float) -> None: ... - def glBlendEquationi(self, buf: int, mode: int) -> None: ... - def glBlendEquationSeparatei(self, buf: int, modeRGB: int, modeAlpha: int) -> None: ... - def glBlendFunci(self, buf: int, src: int, dst: int) -> None: ... - def glBlendFuncSeparatei(self, buf: int, srcRGB: int, dstRGB: int, srcAlpha: int, dstAlpha: int) -> None: ... - def glUniform1d(self, location: int, x: float) -> None: ... - def glUniform2d(self, location: int, x: float, y: float) -> None: ... - def glUniform3d(self, location: int, x: float, y: float, z: float) -> None: ... - def glUniform4d(self, location: int, x: float, y: float, z: float, w: float) -> None: ... - def glPatchParameteri(self, pname: int, value: int) -> None: ... - def glBindTransformFeedback(self, target: int, id: int) -> None: ... - def glIsTransformFeedback(self, id: int) -> int: ... - def glPauseTransformFeedback(self) -> None: ... - def glResumeTransformFeedback(self) -> None: ... - def glDrawTransformFeedback(self, mode: int, id: int) -> None: ... - def glDrawTransformFeedbackStream(self, mode: int, id: int, stream: int) -> None: ... - def glBeginQueryIndexed(self, target: int, index: int, id: int) -> None: ... - def glEndQueryIndexed(self, target: int, index: int) -> None: ... - def glVertexAttribDivisor(self, index: int, divisor: int) -> None: ... - def glIsSampler(self, sampler: int) -> int: ... - def glBindSampler(self, unit: int, sampler: int) -> None: ... - def glSamplerParameteri(self, sampler: int, pname: int, param: int) -> None: ... - def glSamplerParameterf(self, sampler: int, pname: int, param: float) -> None: ... - def glQueryCounter(self, id: int, target: int) -> None: ... - def glVertexAttribP1ui(self, index: int, type: int, normalized: int, value: int) -> None: ... - def glVertexAttribP2ui(self, index: int, type: int, normalized: int, value: int) -> None: ... - def glVertexAttribP3ui(self, index: int, type: int, normalized: int, value: int) -> None: ... - def glVertexAttribP4ui(self, index: int, type: int, normalized: int, value: int) -> None: ... - def glFramebufferTexture(self, target: int, attachment: int, texture: int, level: int) -> None: ... - def glProvokingVertex(self, mode: int) -> None: ... - def glTexImage2DMultisample(self, target: int, samples: int, internalformat: int, width: int, height: int, fixedsamplelocations: int) -> None: ... - def glTexImage3DMultisample(self, target: int, samples: int, internalformat: int, width: int, height: int, depth: int, fixedsamplelocations: int) -> None: ... - def glSampleMaski(self, index: int, mask: int) -> None: ... - def glDrawArraysInstanced(self, mode: int, first: int, count: int, instancecount: int) -> None: ... - def glTexBuffer(self, target: int, internalformat: int, buffer: int) -> None: ... - def glPrimitiveRestartIndex(self, index: int) -> None: ... - def glUniformBlockBinding(self, program: int, uniformBlockIndex: int, uniformBlockBinding: int) -> None: ... - def glColorMaski(self, index: int, r: int, g: int, b: int, a: int) -> None: ... - def glEnablei(self, target: int, index: int) -> None: ... - def glDisablei(self, target: int, index: int) -> None: ... - def glIsEnabledi(self, target: int, index: int) -> int: ... - def glBeginTransformFeedback(self, primitiveMode: int) -> None: ... - def glEndTransformFeedback(self) -> None: ... - def glBindBufferBase(self, target: int, index: int, buffer: int) -> None: ... - def glClampColor(self, target: int, clamp: int) -> None: ... - def glBeginConditionalRender(self, id: int, mode: int) -> None: ... - def glEndConditionalRender(self) -> None: ... - def glUniform1ui(self, location: int, v0: int) -> None: ... - def glUniform2ui(self, location: int, v0: int, v1: int) -> None: ... - def glUniform3ui(self, location: int, v0: int, v1: int, v2: int) -> None: ... - def glUniform4ui(self, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glClearBufferfi(self, buffer: int, drawbuffer: int, depth: float, stencil: int) -> None: ... - def glIsRenderbuffer(self, renderbuffer: int) -> int: ... - def glBindRenderbuffer(self, target: int, renderbuffer: int) -> None: ... - def glRenderbufferStorage(self, target: int, internalformat: int, width: int, height: int) -> None: ... - def glIsFramebuffer(self, framebuffer: int) -> int: ... - def glBindFramebuffer(self, target: int, framebuffer: int) -> None: ... - def glCheckFramebufferStatus(self, target: int) -> int: ... - def glFramebufferTexture1D(self, target: int, attachment: int, textarget: int, texture: int, level: int) -> None: ... - def glFramebufferTexture2D(self, target: int, attachment: int, textarget: int, texture: int, level: int) -> None: ... - def glFramebufferTexture3D(self, target: int, attachment: int, textarget: int, texture: int, level: int, zoffset: int) -> None: ... - def glFramebufferRenderbuffer(self, target: int, attachment: int, renderbuffertarget: int, renderbuffer: int) -> None: ... - def glGenerateMipmap(self, target: int) -> None: ... - def glBlitFramebuffer(self, srcX0: int, srcY0: int, srcX1: int, srcY1: int, dstX0: int, dstY0: int, dstX1: int, dstY1: int, mask: int, filter: int) -> None: ... - def glRenderbufferStorageMultisample(self, target: int, samples: int, internalformat: int, width: int, height: int) -> None: ... - def glFramebufferTextureLayer(self, target: int, attachment: int, texture: int, level: int, layer: int) -> None: ... - def glBindVertexArray(self, array: int) -> None: ... - def glIsVertexArray(self, array: int) -> int: ... - def glBlendEquationSeparate(self, modeRGB: int, modeAlpha: int) -> None: ... - def glDrawBuffers(self, n: int, bufs: PYQT_OPENGL_ARRAY) -> None: ... - def glStencilOpSeparate(self, face: int, sfail: int, dpfail: int, dppass: int) -> None: ... - def glStencilFuncSeparate(self, face: int, func: int, ref: int, mask: int) -> None: ... - def glStencilMaskSeparate(self, face: int, mask: int) -> None: ... - def glAttachShader(self, program: int, shader: int) -> None: ... - def glBindAttribLocation(self, program: int, index: int, name: typing.Optional[str]) -> None: ... - def glCompileShader(self, shader: int) -> None: ... - def glCreateProgram(self) -> int: ... - def glCreateShader(self, type: int) -> int: ... - def glDeleteProgram(self, program: int) -> None: ... - def glDeleteShader(self, shader: int) -> None: ... - def glDetachShader(self, program: int, shader: int) -> None: ... - def glDisableVertexAttribArray(self, index: int) -> None: ... - def glEnableVertexAttribArray(self, index: int) -> None: ... - def glGetActiveAttrib(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetActiveUniform(self, program: int, index: int) -> typing.Tuple[str, int, int]: ... - def glGetAttachedShaders(self, program: int) -> typing.Tuple[int, ...]: ... - def glGetAttribLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetProgramiv(self, program: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int]]]: ... - def glGetProgramInfoLog(self, program: int) -> bytes: ... - def glGetShaderiv(self, shader: int, pname: int) -> typing.Optional[int]: ... - def glGetShaderInfoLog(self, shader: int) -> bytes: ... - def glGetShaderSource(self, shader: int) -> bytes: ... - def glGetUniformLocation(self, program: int, name: typing.Optional[str]) -> int: ... - def glGetVertexAttribdv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribfv(self, index: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetVertexAttribiv(self, index: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glIsProgram(self, program: int) -> int: ... - def glIsShader(self, shader: int) -> int: ... - def glLinkProgram(self, program: int) -> None: ... - def glUseProgram(self, program: int) -> None: ... - def glUniform1f(self, location: int, v0: float) -> None: ... - def glUniform2f(self, location: int, v0: float, v1: float) -> None: ... - def glUniform3f(self, location: int, v0: float, v1: float, v2: float) -> None: ... - def glUniform4f(self, location: int, v0: float, v1: float, v2: float, v3: float) -> None: ... - def glUniform1i(self, location: int, v0: int) -> None: ... - def glUniform2i(self, location: int, v0: int, v1: int) -> None: ... - def glUniform3i(self, location: int, v0: int, v1: int, v2: int) -> None: ... - def glUniform4i(self, location: int, v0: int, v1: int, v2: int, v3: int) -> None: ... - def glUniform1fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4fv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform1iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform2iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform3iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniform4iv(self, location: int, count: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix2fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix3fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glUniformMatrix4fv(self, location: int, count: int, transpose: int, value: PYQT_OPENGL_ARRAY) -> None: ... - def glValidateProgram(self, program: int) -> None: ... - def glVertexAttribPointer(self, index: int, size: int, type: int, normalized: int, stride: int, pointer: PYQT_OPENGL_BOUND_ARRAY) -> None: ... - def glGenQueries(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glDeleteQueries(self, n: int, ids: PYQT_OPENGL_ARRAY) -> None: ... - def glIsQuery(self, id: int) -> int: ... - def glBeginQuery(self, target: int, id: int) -> None: ... - def glEndQuery(self, target: int) -> None: ... - def glGetQueryiv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBindBuffer(self, target: int, buffer: int) -> None: ... - def glDeleteBuffers(self, n: int, buffers: PYQT_OPENGL_ARRAY) -> None: ... - def glGenBuffers(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsBuffer(self, buffer: int) -> int: ... - def glBufferData(self, target: int, size: int, data: PYQT_OPENGL_ARRAY, usage: int) -> None: ... - def glBufferSubData(self, target: int, offset: int, size: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glUnmapBuffer(self, target: int) -> int: ... - def glGetBufferParameteriv(self, target: int, pname: int) -> typing.Optional[int]: ... - def glBlendFuncSeparate(self, sfactorRGB: int, dfactorRGB: int, sfactorAlpha: int, dfactorAlpha: int) -> None: ... - def glPointParameterf(self, pname: int, param: float) -> None: ... - def glPointParameterfv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glPointParameteri(self, pname: int, param: int) -> None: ... - def glPointParameteriv(self, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glActiveTexture(self, texture: int) -> None: ... - def glSampleCoverage(self, value: float, invert: int) -> None: ... - def glCompressedTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glCompressedTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, imageSize: int, data: PYQT_OPENGL_ARRAY) -> None: ... - def glBlendColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glBlendEquation(self, mode: int) -> None: ... - def glDrawRangeElements(self, mode: int, start: int, end: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage3D(self, target: int, level: int, internalformat: int, width: int, height: int, depth: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, width: int, height: int, depth: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glCopyTexSubImage3D(self, target: int, level: int, xoffset: int, yoffset: int, zoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glDrawArrays(self, mode: int, first: int, count: int) -> None: ... - def glDrawElements(self, mode: int, count: int, type: int, indices: PYQT_OPENGL_ARRAY) -> None: ... - def glPolygonOffset(self, factor: float, units: float) -> None: ... - def glCopyTexImage1D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, border: int) -> None: ... - def glCopyTexImage2D(self, target: int, level: int, internalformat: int, x: int, y: int, width: int, height: int, border: int) -> None: ... - def glCopyTexSubImage1D(self, target: int, level: int, xoffset: int, x: int, y: int, width: int) -> None: ... - def glCopyTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, x: int, y: int, width: int, height: int) -> None: ... - def glTexSubImage1D(self, target: int, level: int, xoffset: int, width: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexSubImage2D(self, target: int, level: int, xoffset: int, yoffset: int, width: int, height: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glBindTexture(self, target: int, texture: int) -> None: ... - def glDeleteTextures(self, n: int, textures: PYQT_OPENGL_ARRAY) -> None: ... - def glGenTextures(self, n: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glIsTexture(self, texture: int) -> int: ... - def glCullFace(self, mode: int) -> None: ... - def glFrontFace(self, mode: int) -> None: ... - def glHint(self, target: int, mode: int) -> None: ... - def glLineWidth(self, width: float) -> None: ... - def glPointSize(self, size: float) -> None: ... - def glPolygonMode(self, face: int, mode: int) -> None: ... - def glScissor(self, x: int, y: int, width: int, height: int) -> None: ... - def glTexParameterf(self, target: int, pname: int, param: float) -> None: ... - def glTexParameterfv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexParameteri(self, target: int, pname: int, param: int) -> None: ... - def glTexParameteriv(self, target: int, pname: int, params: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage1D(self, target: int, level: int, internalformat: int, width: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glTexImage2D(self, target: int, level: int, internalformat: int, width: int, height: int, border: int, format: int, type: int, pixels: PYQT_OPENGL_ARRAY) -> None: ... - def glDrawBuffer(self, mode: int) -> None: ... - def glClear(self, mask: int) -> None: ... - def glClearColor(self, red: float, green: float, blue: float, alpha: float) -> None: ... - def glClearStencil(self, s: int) -> None: ... - def glClearDepth(self, depth: float) -> None: ... - def glStencilMask(self, mask: int) -> None: ... - def glColorMask(self, red: int, green: int, blue: int, alpha: int) -> None: ... - def glDepthMask(self, flag: int) -> None: ... - def glDisable(self, cap: int) -> None: ... - def glEnable(self, cap: int) -> None: ... - def glFinish(self) -> None: ... - def glFlush(self) -> None: ... - def glBlendFunc(self, sfactor: int, dfactor: int) -> None: ... - def glLogicOp(self, opcode: int) -> None: ... - def glStencilFunc(self, func: int, ref: int, mask: int) -> None: ... - def glStencilOp(self, fail: int, zfail: int, zpass: int) -> None: ... - def glDepthFunc(self, func: int) -> None: ... - def glPixelStoref(self, pname: int, param: float) -> None: ... - def glPixelStorei(self, pname: int, param: int) -> None: ... - def glReadBuffer(self, mode: int) -> None: ... - def glReadPixels(self, x: int, y: int, width: int, height: int, format: int, type: int) -> typing.Union[typing.Tuple[float, ...], typing.Tuple[int, ...]]: ... - def glGetBooleanv(self, pname: int) -> typing.Optional[typing.Union[bool, typing.Tuple[bool, ...]]]: ... - def glGetDoublev(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetError(self) -> int: ... - def glGetFloatv(self, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, ...]]]: ... - def glGetIntegerv(self, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, ...]]]: ... - def glGetString(self, name: int) -> typing.Optional[str]: ... - def glGetTexParameterfv(self, target: int, pname: int) -> typing.Optional[typing.Union[float, typing.Tuple[float, float, float, float]]]: ... - def glGetTexParameteriv(self, target: int, pname: int) -> typing.Optional[typing.Union[int, typing.Tuple[int, int, int, int]]]: ... - def glGetTexLevelParameterfv(self, target: int, level: int, pname: int) -> typing.Optional[float]: ... - def glGetTexLevelParameteriv(self, target: int, level: int, pname: int) -> typing.Optional[int]: ... - def glIsEnabled(self, cap: int) -> int: ... - def glDepthRange(self, nearVal: float, farVal: float) -> None: ... - def glViewport(self, x: int, y: int, width: int, height: int) -> None: ... - def initializeOpenGLFunctions(self) -> bool: ... - - -class QOpenGLVersionProfile(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, format: QtGui.QSurfaceFormat) -> None: ... - @typing.overload - def __init__(self, other: 'QOpenGLVersionProfile') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def isValid(self) -> bool: ... - def isLegacyVersion(self) -> bool: ... - def hasProfiles(self) -> bool: ... - def setProfile(self, profile: QtGui.QSurfaceFormat.OpenGLContextProfile) -> None: ... - def profile(self) -> QtGui.QSurfaceFormat.OpenGLContextProfile: ... - def setVersion(self, majorVersion: int, minorVersion: int) -> None: ... - def version(self) -> typing.Tuple[int, int]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.abi3.so deleted file mode 100644 index f49466e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.pyi deleted file mode 100644 index 6f0a6b7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtOpenGLWidgets.pyi +++ /dev/null @@ -1,86 +0,0 @@ -# The PEP 484 type hints stub file for the QtOpenGLWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtOpenGL -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QOpenGLWidget(QtWidgets.QWidget): - - class TargetBuffer(enum.Enum): - LeftBuffer = ... # type: QOpenGLWidget.TargetBuffer - RightBuffer = ... # type: QOpenGLWidget.TargetBuffer - - class UpdateBehavior(enum.Enum): - NoPartialUpdate = ... # type: QOpenGLWidget.UpdateBehavior - PartialUpdate = ... # type: QOpenGLWidget.UpdateBehavior - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def currentTargetBuffer(self) -> 'QOpenGLWidget.TargetBuffer': ... - def setTextureFormat(self, texFormat: int) -> None: ... - def textureFormat(self) -> int: ... - def updateBehavior(self) -> 'QOpenGLWidget.UpdateBehavior': ... - def setUpdateBehavior(self, updateBehavior: 'QOpenGLWidget.UpdateBehavior') -> None: ... - def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... - def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def paintGL(self) -> None: ... - def resizeGL(self, w: int, h: int) -> None: ... - def initializeGL(self) -> None: ... - resized: typing.ClassVar[QtCore.pyqtSignal] - aboutToResize: typing.ClassVar[QtCore.pyqtSignal] - frameSwapped: typing.ClassVar[QtCore.pyqtSignal] - aboutToCompose: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def grabFramebuffer(self) -> QtGui.QImage: ... - @typing.overload - def grabFramebuffer(self, targetBuffer: 'QOpenGLWidget.TargetBuffer') -> QtGui.QImage: ... - @typing.overload - def defaultFramebufferObject(self) -> int: ... - @typing.overload - def defaultFramebufferObject(self, targetBuffer: 'QOpenGLWidget.TargetBuffer') -> int: ... - def context(self) -> typing.Optional[QtGui.QOpenGLContext]: ... - def doneCurrent(self) -> None: ... - @typing.overload - def makeCurrent(self) -> None: ... - @typing.overload - def makeCurrent(self, targetBuffer: 'QOpenGLWidget.TargetBuffer') -> None: ... - def isValid(self) -> bool: ... - def format(self) -> QtGui.QSurfaceFormat: ... - def setFormat(self, format: QtGui.QSurfaceFormat) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.abi3.so deleted file mode 100644 index 2243bb8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.pyi deleted file mode 100644 index 3dd85e4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtPdf.pyi +++ /dev/null @@ -1,277 +0,0 @@ -# The PEP 484 type hints stub file for the QtPdf module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QPdfBookmarkModel(QtCore.QAbstractItemModel): - - class Role(enum.IntEnum): - Title = ... # type: QPdfBookmarkModel.Role - Level = ... # type: QPdfBookmarkModel.Role - Page = ... # type: QPdfBookmarkModel.Role - Location = ... # type: QPdfBookmarkModel.Role - Zoom = ... # type: QPdfBookmarkModel.Role - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def parent(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... - def data(self, index: QtCore.QModelIndex, role: int) -> typing.Any: ... - def setDocument(self, document: typing.Optional['QPdfDocument']) -> None: ... - def document(self) -> typing.Optional['QPdfDocument']: ... - - -class QPdfDocument(QtCore.QObject): - - class PageModelRole(enum.IntEnum): - Label = ... # type: QPdfDocument.PageModelRole - PointSize = ... # type: QPdfDocument.PageModelRole - - class MetaDataField(enum.Enum): - Title = ... # type: QPdfDocument.MetaDataField - Subject = ... # type: QPdfDocument.MetaDataField - Author = ... # type: QPdfDocument.MetaDataField - Keywords = ... # type: QPdfDocument.MetaDataField - Producer = ... # type: QPdfDocument.MetaDataField - Creator = ... # type: QPdfDocument.MetaDataField - CreationDate = ... # type: QPdfDocument.MetaDataField - ModificationDate = ... # type: QPdfDocument.MetaDataField - - class Error(enum.Enum): - None_ = ... # type: QPdfDocument.Error - Unknown = ... # type: QPdfDocument.Error - DataNotYetAvailable = ... # type: QPdfDocument.Error - FileNotFound = ... # type: QPdfDocument.Error - InvalidFileFormat = ... # type: QPdfDocument.Error - IncorrectPassword = ... # type: QPdfDocument.Error - UnsupportedSecurityScheme = ... # type: QPdfDocument.Error - - class Status(enum.Enum): - Null = ... # type: QPdfDocument.Status - Loading = ... # type: QPdfDocument.Status - Ready = ... # type: QPdfDocument.Status - Unloading = ... # type: QPdfDocument.Status - Error = ... # type: QPdfDocument.Status - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - pageModelChanged: typing.ClassVar[QtCore.pyqtSignal] - pageCountChanged: typing.ClassVar[QtCore.pyqtSignal] - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - passwordChanged: typing.ClassVar[QtCore.pyqtSignal] - def pageIndexForLabel(self, label: typing.Optional[str]) -> int: ... - def getAllText(self, page: int) -> 'QPdfSelection': ... - def getSelectionAtIndex(self, page: int, startIndex: int, maxLength: int) -> 'QPdfSelection': ... - def getSelection(self, page: int, start: QtCore.QPointF, end: QtCore.QPointF) -> 'QPdfSelection': ... - def render(self, page: int, imageSize: QtCore.QSize, options: 'QPdfDocumentRenderOptions' = ...) -> QtGui.QImage: ... - def pageModel(self) -> typing.Optional[QtCore.QAbstractListModel]: ... - def pageLabel(self, page: int) -> str: ... - def pagePointSize(self, page: int) -> QtCore.QSizeF: ... - def pageCount(self) -> int: ... - def close(self) -> None: ... - def error(self) -> 'QPdfDocument.Error': ... - def metaData(self, field: 'QPdfDocument.MetaDataField') -> typing.Any: ... - def password(self) -> str: ... - def setPassword(self, password: typing.Optional[str]) -> None: ... - def status(self) -> 'QPdfDocument.Status': ... - @typing.overload - def load(self, fileName: typing.Optional[str]) -> 'QPdfDocument.Error': ... - @typing.overload - def load(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... - - -class QPdfDocumentRenderOptions(PyQt6.sip.simplewrapper): - - class RenderFlag(enum.Enum): - None_ = ... # type: QPdfDocumentRenderOptions.RenderFlag - Annotations = ... # type: QPdfDocumentRenderOptions.RenderFlag - OptimizedForLcd = ... # type: QPdfDocumentRenderOptions.RenderFlag - Grayscale = ... # type: QPdfDocumentRenderOptions.RenderFlag - ForceHalftone = ... # type: QPdfDocumentRenderOptions.RenderFlag - TextAliased = ... # type: QPdfDocumentRenderOptions.RenderFlag - ImageAliased = ... # type: QPdfDocumentRenderOptions.RenderFlag - PathAliased = ... # type: QPdfDocumentRenderOptions.RenderFlag - - class Rotation(enum.Enum): - None_ = ... # type: QPdfDocumentRenderOptions.Rotation - Clockwise90 = ... # type: QPdfDocumentRenderOptions.Rotation - Clockwise180 = ... # type: QPdfDocumentRenderOptions.Rotation - Clockwise270 = ... # type: QPdfDocumentRenderOptions.Rotation - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPdfDocumentRenderOptions') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setScaledSize(self, s: QtCore.QSize) -> None: ... - def scaledSize(self) -> QtCore.QSize: ... - def setScaledClipRect(self, r: QtCore.QRect) -> None: ... - def scaledClipRect(self) -> QtCore.QRect: ... - def setRenderFlags(self, r: 'QPdfDocumentRenderOptions.RenderFlag') -> None: ... - def renderFlags(self) -> 'QPdfDocumentRenderOptions.RenderFlag': ... - def setRotation(self, r: 'QPdfDocumentRenderOptions.Rotation') -> None: ... - def rotation(self) -> 'QPdfDocumentRenderOptions.Rotation': ... - - -class QPdfLink(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QPdfLink') -> None: ... - - def copyToClipboard(self, mode: QtGui.QClipboard.Mode = ...) -> None: ... - def toString(self) -> str: ... - def rectangles(self) -> typing.List[QtCore.QRectF]: ... - def contextAfter(self) -> str: ... - def contextBefore(self) -> str: ... - def url(self) -> QtCore.QUrl: ... - def zoom(self) -> float: ... - def location(self) -> QtCore.QPointF: ... - def page(self) -> int: ... - def isValid(self) -> bool: ... - def swap(self, other: 'QPdfLink') -> None: ... - - -class QPdfLinkModel(QtCore.QAbstractListModel): - - class Role(enum.Enum): - Link = ... # type: QPdfLinkModel.Role - Rectangle = ... # type: QPdfLinkModel.Role - Url = ... # type: QPdfLinkModel.Role - Page = ... # type: QPdfLinkModel.Role - Location = ... # type: QPdfLinkModel.Role - Zoom = ... # type: QPdfLinkModel.Role - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - pageChanged: typing.ClassVar[QtCore.pyqtSignal] - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setPage(self, page: int) -> None: ... - def setDocument(self, document: typing.Optional[QPdfDocument]) -> None: ... - def linkAt(self, point: QtCore.QPointF) -> QPdfLink: ... - def page(self) -> int: ... - def data(self, index: QtCore.QModelIndex, role: int) -> typing.Any: ... - def rowCount(self, parent: QtCore.QModelIndex) -> int: ... - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def document(self) -> typing.Optional[QPdfDocument]: ... - - -class QPdfPageNavigator(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - jumped: typing.ClassVar[QtCore.pyqtSignal] - forwardAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] - backAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] - currentZoomChanged: typing.ClassVar[QtCore.pyqtSignal] - currentLocationChanged: typing.ClassVar[QtCore.pyqtSignal] - currentPageChanged: typing.ClassVar[QtCore.pyqtSignal] - def back(self) -> None: ... - def forward(self) -> None: ... - def update(self, page: int, location: QtCore.QPointF, zoom: float) -> None: ... - @typing.overload - def jump(self, destination: QPdfLink) -> None: ... - @typing.overload - def jump(self, page: int, location: QtCore.QPointF, zoom: float = ...) -> None: ... - def clear(self) -> None: ... - def forwardAvailable(self) -> bool: ... - def backAvailable(self) -> bool: ... - def currentZoom(self) -> float: ... - def currentLocation(self) -> QtCore.QPointF: ... - def currentPage(self) -> int: ... - - -class QPdfPageRenderer(QtCore.QObject): - - class RenderMode(enum.Enum): - MultiThreaded = ... # type: QPdfPageRenderer.RenderMode - SingleThreaded = ... # type: QPdfPageRenderer.RenderMode - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - renderModeChanged: typing.ClassVar[QtCore.pyqtSignal] - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def requestPage(self, pageNumber: int, imageSize: QtCore.QSize, options: QPdfDocumentRenderOptions = ...) -> int: ... - def setDocument(self, document: typing.Optional[QPdfDocument]) -> None: ... - def document(self) -> typing.Optional[QPdfDocument]: ... - def setRenderMode(self, mode: 'QPdfPageRenderer.RenderMode') -> None: ... - def renderMode(self) -> 'QPdfPageRenderer.RenderMode': ... - - -class QPdfSearchModel(QtCore.QAbstractListModel): - - class Role(enum.IntEnum): - Page = ... # type: QPdfSearchModel.Role - IndexOnPage = ... # type: QPdfSearchModel.Role - Location = ... # type: QPdfSearchModel.Role - ContextBefore = ... # type: QPdfSearchModel.Role - ContextAfter = ... # type: QPdfSearchModel.Role - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - searchStringChanged: typing.ClassVar[QtCore.pyqtSignal] - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setDocument(self, document: typing.Optional[QPdfDocument]) -> None: ... - def setSearchString(self, searchString: typing.Optional[str]) -> None: ... - def data(self, index: QtCore.QModelIndex, role: int) -> typing.Any: ... - def rowCount(self, parent: QtCore.QModelIndex) -> int: ... - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def searchString(self) -> str: ... - def document(self) -> typing.Optional[QPdfDocument]: ... - def resultAtIndex(self, index: int) -> QPdfLink: ... - def resultsOnPage(self, page: int) -> typing.List[QPdfLink]: ... - - -class QPdfSelection(PyQt6.sip.simplewrapper): - - def __init__(self, other: 'QPdfSelection') -> None: ... - - def copyToClipboard(self, mode: QtGui.QClipboard.Mode = ...) -> None: ... - def endIndex(self) -> int: ... - def startIndex(self) -> int: ... - def boundingRectangle(self) -> QtCore.QRectF: ... - def text(self) -> str: ... - def bounds(self) -> typing.List[QtGui.QPolygonF]: ... - def isValid(self) -> bool: ... - def swap(self, other: 'QPdfSelection') -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.abi3.so deleted file mode 100644 index b4266a6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.pyi deleted file mode 100644 index 98524e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtPdfWidgets.pyi +++ /dev/null @@ -1,98 +0,0 @@ -# The PEP 484 type hints stub file for the QtPdfWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtPdf -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QPdfPageSelector(QtWidgets.QWidget): - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget]) -> None: ... - - currentPageLabelChanged: typing.ClassVar[QtCore.pyqtSignal] - currentPageChanged: typing.ClassVar[QtCore.pyqtSignal] - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentPage(self, index: int) -> None: ... - def currentPageLabel(self) -> str: ... - def currentPage(self) -> int: ... - def document(self) -> typing.Optional[QtPdf.QPdfDocument]: ... - def setDocument(self, document: typing.Optional[QtPdf.QPdfDocument]) -> None: ... - - -class QPdfView(QtWidgets.QAbstractScrollArea): - - class ZoomMode(enum.Enum): - Custom = ... # type: QPdfView.ZoomMode - FitToWidth = ... # type: QPdfView.ZoomMode - FitInView = ... # type: QPdfView.ZoomMode - - class PageMode(enum.Enum): - SinglePage = ... # type: QPdfView.PageMode - MultiPage = ... # type: QPdfView.PageMode - - def __init__(self, parent: typing.Optional[QtWidgets.QWidget]) -> None: ... - - def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - currentSearchResultIndexChanged: typing.ClassVar[QtCore.pyqtSignal] - searchModelChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentSearchResultIndex(self, currentResult: int) -> None: ... - def currentSearchResultIndex(self) -> int: ... - def setSearchModel(self, searchModel: typing.Optional[QtPdf.QPdfSearchModel]) -> None: ... - def searchModel(self) -> typing.Optional[QtPdf.QPdfSearchModel]: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - documentMarginsChanged: typing.ClassVar[QtCore.pyqtSignal] - pageSpacingChanged: typing.ClassVar[QtCore.pyqtSignal] - zoomFactorChanged: typing.ClassVar[QtCore.pyqtSignal] - zoomModeChanged: typing.ClassVar[QtCore.pyqtSignal] - pageModeChanged: typing.ClassVar[QtCore.pyqtSignal] - documentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setZoomFactor(self, factor: float) -> None: ... - def setZoomMode(self, mode: 'QPdfView.ZoomMode') -> None: ... - def setPageMode(self, mode: 'QPdfView.PageMode') -> None: ... - def setDocumentMargins(self, margins: QtCore.QMargins) -> None: ... - def documentMargins(self) -> QtCore.QMargins: ... - def setPageSpacing(self, spacing: int) -> None: ... - def pageSpacing(self) -> int: ... - def zoomFactor(self) -> float: ... - def zoomMode(self) -> 'QPdfView.ZoomMode': ... - def pageMode(self) -> 'QPdfView.PageMode': ... - def pageNavigator(self) -> typing.Optional[QtPdf.QPdfPageNavigator]: ... - def document(self) -> typing.Optional[QtPdf.QPdfDocument]: ... - def setDocument(self, document: typing.Optional[QtPdf.QPdfDocument]) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.abi3.so deleted file mode 100644 index a04dc18..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.pyi deleted file mode 100644 index c7fc473..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtPositioning.pyi +++ /dev/null @@ -1,568 +0,0 @@ -# The PEP 484 type hints stub file for the QtPositioning module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QGeoAddress(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoAddress') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def setStreetNumber(self, streetNumber: typing.Optional[str]) -> None: ... - def streetNumber(self) -> str: ... - def swap(self, other: 'QGeoAddress') -> None: ... - def isTextGenerated(self) -> bool: ... - def clear(self) -> None: ... - def isEmpty(self) -> bool: ... - def setStreet(self, street: typing.Optional[str]) -> None: ... - def street(self) -> str: ... - def setPostalCode(self, postalCode: typing.Optional[str]) -> None: ... - def postalCode(self) -> str: ... - def setDistrict(self, district: typing.Optional[str]) -> None: ... - def district(self) -> str: ... - def setCity(self, city: typing.Optional[str]) -> None: ... - def city(self) -> str: ... - def setCounty(self, county: typing.Optional[str]) -> None: ... - def county(self) -> str: ... - def setState(self, state: typing.Optional[str]) -> None: ... - def state(self) -> str: ... - def setCountryCode(self, countryCode: typing.Optional[str]) -> None: ... - def countryCode(self) -> str: ... - def setCountry(self, country: typing.Optional[str]) -> None: ... - def country(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def text(self) -> str: ... - - -class QGeoAreaMonitorInfo(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self, name: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoAreaMonitorInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def swap(self, other: 'QGeoAreaMonitorInfo') -> None: ... - def setNotificationParameters(self, parameters: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def notificationParameters(self) -> typing.Dict[str, typing.Any]: ... - def setPersistent(self, isPersistent: bool) -> None: ... - def isPersistent(self) -> bool: ... - def setExpiration(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def expiration(self) -> QtCore.QDateTime: ... - def setArea(self, newShape: 'QGeoShape') -> None: ... - def area(self) -> 'QGeoShape': ... - def isValid(self) -> bool: ... - def identifier(self) -> str: ... - def setName(self, name: typing.Optional[str]) -> None: ... - def name(self) -> str: ... - - -class QGeoAreaMonitorSource(QtCore.QObject): - - class AreaMonitorFeature(enum.Flag): - PersistentAreaMonitorFeature = ... # type: QGeoAreaMonitorSource.AreaMonitorFeature - AnyAreaMonitorFeature = ... # type: QGeoAreaMonitorSource.AreaMonitorFeature - - class Error(enum.Enum): - AccessError = ... # type: QGeoAreaMonitorSource.Error - InsufficientPositionInfo = ... # type: QGeoAreaMonitorSource.Error - UnknownSourceError = ... # type: QGeoAreaMonitorSource.Error - NoError = ... # type: QGeoAreaMonitorSource.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def backendProperty(self, name: typing.Optional[str]) -> typing.Any: ... - def setBackendProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - monitorExpired: typing.ClassVar[QtCore.pyqtSignal] - areaExited: typing.ClassVar[QtCore.pyqtSignal] - areaEntered: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def activeMonitors(self) -> typing.List[QGeoAreaMonitorInfo]: ... - @typing.overload - def activeMonitors(self, lookupArea: 'QGeoShape') -> typing.List[QGeoAreaMonitorInfo]: ... - def requestUpdate(self, monitor: QGeoAreaMonitorInfo, signal: typing.Optional[str]) -> bool: ... - def stopMonitoring(self, monitor: QGeoAreaMonitorInfo) -> bool: ... - def startMonitoring(self, monitor: QGeoAreaMonitorInfo) -> bool: ... - def supportedAreaMonitorFeatures(self) -> 'QGeoAreaMonitorSource.AreaMonitorFeature': ... - def error(self) -> 'QGeoAreaMonitorSource.Error': ... - def sourceName(self) -> str: ... - def positionInfoSource(self) -> typing.Optional['QGeoPositionInfoSource']: ... - def setPositionInfoSource(self, source: typing.Optional['QGeoPositionInfoSource']) -> None: ... - @staticmethod - def availableSources() -> typing.List[str]: ... - @staticmethod - def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoAreaMonitorSource']: ... - @staticmethod - def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoAreaMonitorSource']: ... - - -class QGeoShape(PyQt6.sip.wrapper): - - class ShapeType(enum.Enum): - UnknownType = ... # type: QGeoShape.ShapeType - RectangleType = ... # type: QGeoShape.ShapeType - CircleType = ... # type: QGeoShape.ShapeType - PathType = ... # type: QGeoShape.ShapeType - PolygonType = ... # type: QGeoShape.ShapeType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoShape') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def boundingGeoRectangle(self) -> 'QGeoRectangle': ... - def toString(self) -> str: ... - def center(self) -> 'QGeoCoordinate': ... - def contains(self, coordinate: 'QGeoCoordinate') -> bool: ... - def isEmpty(self) -> bool: ... - def isValid(self) -> bool: ... - def type(self) -> 'QGeoShape.ShapeType': ... - - -class QGeoCircle(QGeoShape): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, center: 'QGeoCoordinate', radius: float = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoCircle') -> None: ... - @typing.overload - def __init__(self, other: QGeoShape) -> None: ... - - def extendCircle(self, coordinate: 'QGeoCoordinate') -> None: ... - def toString(self) -> str: ... - def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoCircle': ... - def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... - def radius(self) -> float: ... - def setRadius(self, radius: float) -> None: ... - def center(self) -> 'QGeoCoordinate': ... - def setCenter(self, center: 'QGeoCoordinate') -> None: ... - - -class QGeoCoordinate(PyQt6.sip.wrapper): - - class CoordinateFormat(enum.Enum): - Degrees = ... # type: QGeoCoordinate.CoordinateFormat - DegreesWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat - DegreesMinutes = ... # type: QGeoCoordinate.CoordinateFormat - DegreesMinutesWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat - DegreesMinutesSeconds = ... # type: QGeoCoordinate.CoordinateFormat - DegreesMinutesSecondsWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat - - class CoordinateType(enum.Enum): - InvalidCoordinate = ... # type: QGeoCoordinate.CoordinateType - Coordinate2D = ... # type: QGeoCoordinate.CoordinateType - Coordinate3D = ... # type: QGeoCoordinate.CoordinateType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, latitude: float, longitude: float) -> None: ... - @typing.overload - def __init__(self, latitude: float, longitude: float, altitude: float) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoCoordinate') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def swap(self, other: 'QGeoCoordinate') -> None: ... - def toString(self, format: 'QGeoCoordinate.CoordinateFormat' = ...) -> str: ... - def atDistanceAndAzimuth(self, distance: float, azimuth: float, distanceUp: float = ...) -> 'QGeoCoordinate': ... - def azimuthTo(self, other: 'QGeoCoordinate') -> float: ... - def distanceTo(self, other: 'QGeoCoordinate') -> float: ... - def altitude(self) -> float: ... - def setAltitude(self, altitude: float) -> None: ... - def longitude(self) -> float: ... - def setLongitude(self, longitude: float) -> None: ... - def latitude(self) -> float: ... - def setLatitude(self, latitude: float) -> None: ... - def type(self) -> 'QGeoCoordinate.CoordinateType': ... - def isValid(self) -> bool: ... - - -class QGeoLocation(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoLocation') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def setBoundingShape(self, shape: QGeoShape) -> None: ... - def boundingShape(self) -> QGeoShape: ... - def swap(self, other: 'QGeoLocation') -> None: ... - def setExtendedAttributes(self, data: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def extendedAttributes(self) -> typing.Dict[str, typing.Any]: ... - def isEmpty(self) -> bool: ... - def setCoordinate(self, position: QGeoCoordinate) -> None: ... - def coordinate(self) -> QGeoCoordinate: ... - def setAddress(self, address: QGeoAddress) -> None: ... - def address(self) -> QGeoAddress: ... - - -class QGeoPath(QGeoShape): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, path: typing.Iterable[QGeoCoordinate], width: float = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoPath') -> None: ... - @typing.overload - def __init__(self, other: QGeoShape) -> None: ... - - def clearPath(self) -> None: ... - def size(self) -> int: ... - def toString(self) -> str: ... - @typing.overload - def removeCoordinate(self, coordinate: QGeoCoordinate) -> None: ... - @typing.overload - def removeCoordinate(self, index: int) -> None: ... - def containsCoordinate(self, coordinate: QGeoCoordinate) -> bool: ... - def coordinateAt(self, index: int) -> QGeoCoordinate: ... - def replaceCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... - def insertCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... - def addCoordinate(self, coordinate: QGeoCoordinate) -> None: ... - def length(self, indexFrom: int = ..., indexTo: int = ...) -> float: ... - def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoPath': ... - def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... - def width(self) -> float: ... - def setWidth(self, width: float) -> None: ... - def path(self) -> typing.List[QGeoCoordinate]: ... - def setPath(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... - - -class QGeoPolygon(QGeoShape): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoPolygon') -> None: ... - @typing.overload - def __init__(self, other: QGeoShape) -> None: ... - - def perimeter(self) -> typing.List[QGeoCoordinate]: ... - def setPerimeter(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... - def holesCount(self) -> int: ... - def removeHole(self, index: int) -> None: ... - def holePath(self, index: int) -> typing.List[QGeoCoordinate]: ... - def hole(self, index: int) -> typing.List[typing.Any]: ... - @typing.overload - def addHole(self, holePath: typing.Iterable[QGeoCoordinate]) -> None: ... - @typing.overload - def addHole(self, holePath: typing.Any) -> None: ... - def toString(self) -> str: ... - @typing.overload - def removeCoordinate(self, coordinate: QGeoCoordinate) -> None: ... - @typing.overload - def removeCoordinate(self, index: int) -> None: ... - def containsCoordinate(self, coordinate: QGeoCoordinate) -> bool: ... - def coordinateAt(self, index: int) -> QGeoCoordinate: ... - def replaceCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... - def insertCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... - def addCoordinate(self, coordinate: QGeoCoordinate) -> None: ... - def size(self) -> int: ... - def length(self, indexFrom: int = ..., indexTo: int = ...) -> float: ... - def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoPolygon': ... - def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... - - -class QGeoPositionInfo(PyQt6.sip.wrapper): - - class Attribute(enum.Enum): - Direction = ... # type: QGeoPositionInfo.Attribute - GroundSpeed = ... # type: QGeoPositionInfo.Attribute - VerticalSpeed = ... # type: QGeoPositionInfo.Attribute - MagneticVariation = ... # type: QGeoPositionInfo.Attribute - HorizontalAccuracy = ... # type: QGeoPositionInfo.Attribute - VerticalAccuracy = ... # type: QGeoPositionInfo.Attribute - DirectionAccuracy = ... # type: QGeoPositionInfo.Attribute - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, coordinate: QGeoCoordinate, updateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoPositionInfo') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __hash__(self) -> int: ... - def swap(self, other: 'QGeoPositionInfo') -> None: ... - def hasAttribute(self, attribute: 'QGeoPositionInfo.Attribute') -> bool: ... - def removeAttribute(self, attribute: 'QGeoPositionInfo.Attribute') -> None: ... - def attribute(self, attribute: 'QGeoPositionInfo.Attribute') -> float: ... - def setAttribute(self, attribute: 'QGeoPositionInfo.Attribute', value: float) -> None: ... - def coordinate(self) -> QGeoCoordinate: ... - def setCoordinate(self, coordinate: QGeoCoordinate) -> None: ... - def timestamp(self) -> QtCore.QDateTime: ... - def setTimestamp(self, timestamp: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def isValid(self) -> bool: ... - - -class QGeoPositionInfoSource(QtCore.QObject): - - class PositioningMethod(enum.Flag): - NoPositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod - SatellitePositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod - NonSatellitePositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod - AllPositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod - - class Error(enum.Enum): - AccessError = ... # type: QGeoPositionInfoSource.Error - ClosedError = ... # type: QGeoPositionInfoSource.Error - UnknownSourceError = ... # type: QGeoPositionInfoSource.Error - UpdateTimeoutError = ... # type: QGeoPositionInfoSource.Error - NoError = ... # type: QGeoPositionInfoSource.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def backendProperty(self, name: typing.Optional[str]) -> typing.Any: ... - def setBackendProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - supportedPositioningMethodsChanged: typing.ClassVar[QtCore.pyqtSignal] - positionUpdated: typing.ClassVar[QtCore.pyqtSignal] - def requestUpdate(self, timeout: int = ...) -> None: ... - def stopUpdates(self) -> None: ... - def startUpdates(self) -> None: ... - def error(self) -> 'QGeoPositionInfoSource.Error': ... - @staticmethod - def availableSources() -> typing.List[str]: ... - @typing.overload - @staticmethod - def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... - @typing.overload - @staticmethod - def createSource(sourceName: typing.Optional[str], parameters: typing.Dict[typing.Optional[str], typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... - @typing.overload - @staticmethod - def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... - @typing.overload - @staticmethod - def createDefaultSource(parameters: typing.Dict[typing.Optional[str], typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... - def sourceName(self) -> str: ... - def minimumUpdateInterval(self) -> int: ... - def supportedPositioningMethods(self) -> 'QGeoPositionInfoSource.PositioningMethod': ... - def lastKnownPosition(self, fromSatellitePositioningMethodsOnly: bool = ...) -> QGeoPositionInfo: ... - def preferredPositioningMethods(self) -> 'QGeoPositionInfoSource.PositioningMethod': ... - def setPreferredPositioningMethods(self, methods: 'QGeoPositionInfoSource.PositioningMethod') -> None: ... - def updateInterval(self) -> int: ... - def setUpdateInterval(self, msec: int) -> None: ... - - -class QGeoRectangle(QGeoShape): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, center: QGeoCoordinate, degreesWidth: float, degreesHeight: float) -> None: ... - @typing.overload - def __init__(self, topLeft: QGeoCoordinate, bottomRight: QGeoCoordinate) -> None: ... - @typing.overload - def __init__(self, coordinates: typing.Iterable[QGeoCoordinate]) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoRectangle') -> None: ... - @typing.overload - def __init__(self, other: QGeoShape) -> None: ... - - def extendRectangle(self, coordinate: QGeoCoordinate) -> None: ... - def toString(self) -> str: ... - def __or__(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... - def __ior__(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... - def united(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... - def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoRectangle': ... - def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... - def intersects(self, rectangle: 'QGeoRectangle') -> bool: ... - def contains(self, rectangle: 'QGeoRectangle') -> bool: ... - def height(self) -> float: ... - def setHeight(self, degreesHeight: float) -> None: ... - def width(self) -> float: ... - def setWidth(self, degreesWidth: float) -> None: ... - def center(self) -> QGeoCoordinate: ... - def setCenter(self, center: QGeoCoordinate) -> None: ... - def bottomRight(self) -> QGeoCoordinate: ... - def setBottomRight(self, bottomRight: QGeoCoordinate) -> None: ... - def bottomLeft(self) -> QGeoCoordinate: ... - def setBottomLeft(self, bottomLeft: QGeoCoordinate) -> None: ... - def topRight(self) -> QGeoCoordinate: ... - def setTopRight(self, topRight: QGeoCoordinate) -> None: ... - def topLeft(self) -> QGeoCoordinate: ... - def setTopLeft(self, topLeft: QGeoCoordinate) -> None: ... - - -class QGeoSatelliteInfo(PyQt6.sip.wrapper): - - class SatelliteSystem(enum.Enum): - Undefined = ... # type: QGeoSatelliteInfo.SatelliteSystem - GPS = ... # type: QGeoSatelliteInfo.SatelliteSystem - GLONASS = ... # type: QGeoSatelliteInfo.SatelliteSystem - GALILEO = ... # type: QGeoSatelliteInfo.SatelliteSystem - BEIDOU = ... # type: QGeoSatelliteInfo.SatelliteSystem - QZSS = ... # type: QGeoSatelliteInfo.SatelliteSystem - Multiple = ... # type: QGeoSatelliteInfo.SatelliteSystem - CustomType = ... # type: QGeoSatelliteInfo.SatelliteSystem - - class Attribute(enum.Enum): - Elevation = ... # type: QGeoSatelliteInfo.Attribute - Azimuth = ... # type: QGeoSatelliteInfo.Attribute - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QGeoSatelliteInfo') -> None: ... - - def __hash__(self) -> int: ... - def swap(self, other: 'QGeoSatelliteInfo') -> None: ... - def hasAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> bool: ... - def removeAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> None: ... - def attribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> float: ... - def setAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute', value: float) -> None: ... - def signalStrength(self) -> int: ... - def setSignalStrength(self, signalStrength: int) -> None: ... - def satelliteIdentifier(self) -> int: ... - def setSatelliteIdentifier(self, satId: int) -> None: ... - def satelliteSystem(self) -> 'QGeoSatelliteInfo.SatelliteSystem': ... - def setSatelliteSystem(self, system: 'QGeoSatelliteInfo.SatelliteSystem') -> None: ... - - -class QGeoSatelliteInfoSource(QtCore.QObject): - - class Error(enum.Enum): - AccessError = ... # type: QGeoSatelliteInfoSource.Error - ClosedError = ... # type: QGeoSatelliteInfoSource.Error - NoError = ... # type: QGeoSatelliteInfoSource.Error - UnknownSourceError = ... # type: QGeoSatelliteInfoSource.Error - UpdateTimeoutError = ... # type: QGeoSatelliteInfoSource.Error - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def backendProperty(self, name: typing.Optional[str]) -> typing.Any: ... - def setBackendProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - satellitesInUseUpdated: typing.ClassVar[QtCore.pyqtSignal] - satellitesInViewUpdated: typing.ClassVar[QtCore.pyqtSignal] - def requestUpdate(self, timeout: int = ...) -> None: ... - def stopUpdates(self) -> None: ... - def startUpdates(self) -> None: ... - def error(self) -> 'QGeoSatelliteInfoSource.Error': ... - def minimumUpdateInterval(self) -> int: ... - def updateInterval(self) -> int: ... - def setUpdateInterval(self, msec: int) -> None: ... - def sourceName(self) -> str: ... - @staticmethod - def availableSources() -> typing.List[str]: ... - @typing.overload - @staticmethod - def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... - @typing.overload - @staticmethod - def createSource(sourceName: typing.Optional[str], parameters: typing.Dict[typing.Optional[str], typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... - @typing.overload - @staticmethod - def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... - @typing.overload - @staticmethod - def createDefaultSource(parameters: typing.Dict[typing.Optional[str], typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... - - -class QNmeaPositionInfoSource(QGeoPositionInfoSource): - - class UpdateMode(enum.Enum): - RealTimeMode = ... # type: QNmeaPositionInfoSource.UpdateMode - SimulationMode = ... # type: QNmeaPositionInfoSource.UpdateMode - - def __init__(self, updateMode: 'QNmeaPositionInfoSource.UpdateMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def userEquivalentRangeError(self) -> float: ... - def setUserEquivalentRangeError(self, uere: float) -> None: ... - def parsePosInfoFromNmeaData(self, data: typing.Optional[bytes], size: int, posInfo: typing.Optional[QGeoPositionInfo]) -> typing.Tuple[bool, typing.Optional[bool]]: ... - def requestUpdate(self, timeout: int = ...) -> None: ... - def stopUpdates(self) -> None: ... - def startUpdates(self) -> None: ... - def error(self) -> QGeoPositionInfoSource.Error: ... - def minimumUpdateInterval(self) -> int: ... - def supportedPositioningMethods(self) -> QGeoPositionInfoSource.PositioningMethod: ... - def lastKnownPosition(self, fromSatellitePositioningMethodsOnly: bool = ...) -> QGeoPositionInfo: ... - def setUpdateInterval(self, msec: int) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, source: typing.Optional[QtCore.QIODevice]) -> None: ... - def updateMode(self) -> 'QNmeaPositionInfoSource.UpdateMode': ... - - -class QNmeaSatelliteInfoSource(QGeoSatelliteInfoSource): - - class SatelliteInfoParseStatus(enum.Enum): - NotParsed = ... # type: QNmeaSatelliteInfoSource.SatelliteInfoParseStatus - PartiallyParsed = ... # type: QNmeaSatelliteInfoSource.SatelliteInfoParseStatus - FullyParsed = ... # type: QNmeaSatelliteInfoSource.SatelliteInfoParseStatus - - class UpdateMode(enum.Enum): - RealTimeMode = ... # type: QNmeaSatelliteInfoSource.UpdateMode - SimulationMode = ... # type: QNmeaSatelliteInfoSource.UpdateMode - - SimulationUpdateInterval = ... # type: typing.Optional[str] - - def __init__(self, mode: 'QNmeaSatelliteInfoSource.UpdateMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def parseSatelliteInfoFromNmea(self, data: typing.Optional[bytes], size: int, infos: typing.Iterable[QGeoSatelliteInfo]) -> typing.Tuple['QNmeaSatelliteInfoSource.SatelliteInfoParseStatus', QGeoSatelliteInfo.SatelliteSystem]: ... - def parseSatellitesInUseFromNmea(self, data: typing.Optional[bytes], size: int, pnrsInUse: typing.Iterable[int]) -> QGeoSatelliteInfo.SatelliteSystem: ... - def requestUpdate(self, timeout: int = ...) -> None: ... - def stopUpdates(self) -> None: ... - def startUpdates(self) -> None: ... - def backendProperty(self, name: typing.Optional[str]) -> typing.Any: ... - def setBackendProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... - def error(self) -> QGeoSatelliteInfoSource.Error: ... - def minimumUpdateInterval(self) -> int: ... - def setUpdateInterval(self, msec: int) -> None: ... - def device(self) -> typing.Optional[QtCore.QIODevice]: ... - def setDevice(self, source: typing.Optional[QtCore.QIODevice]) -> None: ... - def updateMode(self) -> 'QNmeaSatelliteInfoSource.UpdateMode': ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.abi3.so deleted file mode 100644 index 22ff02e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.pyi deleted file mode 100644 index 44638f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtPrintSupport.pyi +++ /dev/null @@ -1,378 +0,0 @@ -# The PEP 484 type hints stub file for the QtPrintSupport module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QAbstractPrintDialog(QtWidgets.QDialog): - - class PrintDialogOption(enum.Flag): - PrintToFile = ... # type: QAbstractPrintDialog.PrintDialogOption - PrintSelection = ... # type: QAbstractPrintDialog.PrintDialogOption - PrintPageRange = ... # type: QAbstractPrintDialog.PrintDialogOption - PrintCollateCopies = ... # type: QAbstractPrintDialog.PrintDialogOption - PrintShowPageSize = ... # type: QAbstractPrintDialog.PrintDialogOption - PrintCurrentPage = ... # type: QAbstractPrintDialog.PrintDialogOption - - class PrintRange(enum.Enum): - AllPages = ... # type: QAbstractPrintDialog.PrintRange - Selection = ... # type: QAbstractPrintDialog.PrintRange - PageRange = ... # type: QAbstractPrintDialog.PrintRange - CurrentPage = ... # type: QAbstractPrintDialog.PrintRange - - def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def setOptionTabs(self, tabs: typing.Iterable[QtWidgets.QWidget]) -> None: ... - def printer(self) -> typing.Optional['QPrinter']: ... - def toPage(self) -> int: ... - def fromPage(self) -> int: ... - def setFromTo(self, fromPage: int, toPage: int) -> None: ... - def maxPage(self) -> int: ... - def minPage(self) -> int: ... - def setMinMax(self, min: int, max: int) -> None: ... - def printRange(self) -> 'QAbstractPrintDialog.PrintRange': ... - def setPrintRange(self, range: 'QAbstractPrintDialog.PrintRange') -> None: ... - - -class QPageSetupDialog(QtWidgets.QDialog): - - @typing.overload - def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def printer(self) -> typing.Optional['QPrinter']: ... - def done(self, result: int) -> None: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def exec(self) -> int: ... - def setVisible(self, visible: bool) -> None: ... - - -class QPrintDialog(QAbstractPrintDialog): - - @typing.overload - def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - accepted: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def options(self) -> QAbstractPrintDialog.PrintDialogOption: ... - def setOptions(self, options: QAbstractPrintDialog.PrintDialogOption) -> None: ... - def testOption(self, option: QAbstractPrintDialog.PrintDialogOption) -> bool: ... - def setOption(self, option: QAbstractPrintDialog.PrintDialogOption, on: bool = ...) -> None: ... - def done(self, result: int) -> None: ... - def accept(self) -> None: ... - def exec(self) -> int: ... - - -class QPrintEngine(PyQt6.sip.simplewrapper): - - class PrintEnginePropertyKey(enum.Enum): - PPK_CollateCopies = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_ColorMode = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_Creator = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_DocumentName = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_FullPage = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_NumberOfCopies = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_Orientation = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_OutputFileName = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PageOrder = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PageRect = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PageSize = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PaperRect = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PaperSource = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PrinterName = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PrinterProgram = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_Resolution = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_SelectionOption = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_SupportedResolutions = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_WindowsPageSize = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_FontEmbedding = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_Duplex = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PaperSources = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_CustomPaperSize = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PageMargins = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PaperSize = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_CopyCount = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_SupportsMultipleCopies = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_PaperName = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_QPageSize = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_QPageMargins = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_QPageLayout = ... # type: QPrintEngine.PrintEnginePropertyKey - PPK_CustomBase = ... # type: QPrintEngine.PrintEnginePropertyKey - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPrintEngine') -> None: ... - - def printerState(self) -> 'QPrinter.PrinterState': ... - def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def abort(self) -> bool: ... - def newPage(self) -> bool: ... - def property(self, key: 'QPrintEngine.PrintEnginePropertyKey') -> typing.Any: ... - def setProperty(self, key: 'QPrintEngine.PrintEnginePropertyKey', value: typing.Any) -> None: ... - - -class QPrinter(QtGui.QPagedPaintDevice): - - class DuplexMode(enum.Enum): - DuplexNone = ... # type: QPrinter.DuplexMode - DuplexAuto = ... # type: QPrinter.DuplexMode - DuplexLongSide = ... # type: QPrinter.DuplexMode - DuplexShortSide = ... # type: QPrinter.DuplexMode - - class Unit(enum.Enum): - Millimeter = ... # type: QPrinter.Unit - Point = ... # type: QPrinter.Unit - Inch = ... # type: QPrinter.Unit - Pica = ... # type: QPrinter.Unit - Didot = ... # type: QPrinter.Unit - Cicero = ... # type: QPrinter.Unit - DevicePixel = ... # type: QPrinter.Unit - - class PrintRange(enum.Enum): - AllPages = ... # type: QPrinter.PrintRange - Selection = ... # type: QPrinter.PrintRange - PageRange = ... # type: QPrinter.PrintRange - CurrentPage = ... # type: QPrinter.PrintRange - - class OutputFormat(enum.Enum): - NativeFormat = ... # type: QPrinter.OutputFormat - PdfFormat = ... # type: QPrinter.OutputFormat - - class PrinterState(enum.Enum): - Idle = ... # type: QPrinter.PrinterState - Active = ... # type: QPrinter.PrinterState - Aborted = ... # type: QPrinter.PrinterState - Error = ... # type: QPrinter.PrinterState - - class PaperSource(enum.Enum): - OnlyOne = ... # type: QPrinter.PaperSource - Lower = ... # type: QPrinter.PaperSource - Middle = ... # type: QPrinter.PaperSource - Manual = ... # type: QPrinter.PaperSource - Envelope = ... # type: QPrinter.PaperSource - EnvelopeManual = ... # type: QPrinter.PaperSource - Auto = ... # type: QPrinter.PaperSource - Tractor = ... # type: QPrinter.PaperSource - SmallFormat = ... # type: QPrinter.PaperSource - LargeFormat = ... # type: QPrinter.PaperSource - LargeCapacity = ... # type: QPrinter.PaperSource - Cassette = ... # type: QPrinter.PaperSource - FormSource = ... # type: QPrinter.PaperSource - MaxPageSource = ... # type: QPrinter.PaperSource - Upper = ... # type: QPrinter.PaperSource - CustomSource = ... # type: QPrinter.PaperSource - LastPaperSource = ... # type: QPrinter.PaperSource - - class ColorMode(enum.Enum): - GrayScale = ... # type: QPrinter.ColorMode - Color = ... # type: QPrinter.ColorMode - - class PageOrder(enum.Enum): - FirstPageFirst = ... # type: QPrinter.PageOrder - LastPageFirst = ... # type: QPrinter.PageOrder - - class PrinterMode(enum.Enum): - ScreenResolution = ... # type: QPrinter.PrinterMode - PrinterResolution = ... # type: QPrinter.PrinterMode - HighResolution = ... # type: QPrinter.PrinterMode - - @typing.overload - def __init__(self, mode: 'QPrinter.PrinterMode' = ...) -> None: ... - @typing.overload - def __init__(self, printer: 'QPrinterInfo', mode: 'QPrinter.PrinterMode' = ...) -> None: ... - - def pdfVersion(self) -> QtGui.QPagedPaintDevice.PdfVersion: ... - def setPdfVersion(self, version: QtGui.QPagedPaintDevice.PdfVersion) -> None: ... - def setEngines(self, printEngine: typing.Optional[QPrintEngine], paintEngine: typing.Optional[QtGui.QPaintEngine]) -> None: ... - def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def printRange(self) -> 'QPrinter.PrintRange': ... - def setPrintRange(self, range: 'QPrinter.PrintRange') -> None: ... - def toPage(self) -> int: ... - def fromPage(self) -> int: ... - def setFromTo(self, fromPage: int, toPage: int) -> None: ... - def printEngine(self) -> typing.Optional[QPrintEngine]: ... - def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... - def printerState(self) -> 'QPrinter.PrinterState': ... - def abort(self) -> bool: ... - def newPage(self) -> bool: ... - def setPrinterSelectionOption(self, a0: typing.Optional[str]) -> None: ... - def printerSelectionOption(self) -> str: ... - def pageRect(self, a0: 'QPrinter.Unit') -> QtCore.QRectF: ... - def paperRect(self, a0: 'QPrinter.Unit') -> QtCore.QRectF: ... - def fontEmbeddingEnabled(self) -> bool: ... - def setFontEmbeddingEnabled(self, enable: bool) -> None: ... - def supportedResolutions(self) -> typing.List[int]: ... - def duplex(self) -> 'QPrinter.DuplexMode': ... - def setDuplex(self, duplex: 'QPrinter.DuplexMode') -> None: ... - def paperSource(self) -> 'QPrinter.PaperSource': ... - def setPaperSource(self, a0: 'QPrinter.PaperSource') -> None: ... - def supportsMultipleCopies(self) -> bool: ... - def copyCount(self) -> int: ... - def setCopyCount(self, a0: int) -> None: ... - def fullPage(self) -> bool: ... - def setFullPage(self, a0: bool) -> None: ... - def collateCopies(self) -> bool: ... - def setCollateCopies(self, collate: bool) -> None: ... - def colorMode(self) -> 'QPrinter.ColorMode': ... - def setColorMode(self, a0: 'QPrinter.ColorMode') -> None: ... - def resolution(self) -> int: ... - def setResolution(self, a0: int) -> None: ... - def pageOrder(self) -> 'QPrinter.PageOrder': ... - def setPageOrder(self, a0: 'QPrinter.PageOrder') -> None: ... - def creator(self) -> str: ... - def setCreator(self, a0: typing.Optional[str]) -> None: ... - def docName(self) -> str: ... - def setDocName(self, a0: typing.Optional[str]) -> None: ... - def printProgram(self) -> str: ... - def setPrintProgram(self, a0: typing.Optional[str]) -> None: ... - def outputFileName(self) -> str: ... - def setOutputFileName(self, a0: typing.Optional[str]) -> None: ... - def isValid(self) -> bool: ... - def printerName(self) -> str: ... - def setPrinterName(self, a0: typing.Optional[str]) -> None: ... - def outputFormat(self) -> 'QPrinter.OutputFormat': ... - def setOutputFormat(self, format: 'QPrinter.OutputFormat') -> None: ... - - -class QPrinterInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, src: 'QPrinterInfo') -> None: ... - @typing.overload - def __init__(self, printer: QPrinter) -> None: ... - - def supportedColorModes(self) -> typing.List[QPrinter.ColorMode]: ... - def defaultColorMode(self) -> QPrinter.ColorMode: ... - def supportedDuplexModes(self) -> typing.List[QPrinter.DuplexMode]: ... - def defaultDuplexMode(self) -> QPrinter.DuplexMode: ... - @staticmethod - def defaultPrinterName() -> str: ... - @staticmethod - def availablePrinterNames() -> typing.List[str]: ... - def supportedResolutions(self) -> typing.List[int]: ... - def maximumPhysicalPageSize(self) -> QtGui.QPageSize: ... - def minimumPhysicalPageSize(self) -> QtGui.QPageSize: ... - def supportsCustomPageSizes(self) -> bool: ... - def defaultPageSize(self) -> QtGui.QPageSize: ... - def supportedPageSizes(self) -> typing.List[QtGui.QPageSize]: ... - def state(self) -> QPrinter.PrinterState: ... - def isRemote(self) -> bool: ... - @staticmethod - def printerInfo(printerName: typing.Optional[str]) -> 'QPrinterInfo': ... - def makeAndModel(self) -> str: ... - def location(self) -> str: ... - def description(self) -> str: ... - @staticmethod - def defaultPrinter() -> 'QPrinterInfo': ... - @staticmethod - def availablePrinters() -> typing.List['QPrinterInfo']: ... - def isDefault(self) -> bool: ... - def isNull(self) -> bool: ... - def printerName(self) -> str: ... - - -class QPrintPreviewDialog(QtWidgets.QDialog): - - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, printer: typing.Optional[QPrinter], parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - paintRequested: typing.ClassVar[QtCore.pyqtSignal] - def done(self, result: int) -> None: ... - def printer(self) -> typing.Optional[QPrinter]: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def setVisible(self, visible: bool) -> None: ... - - -class QPrintPreviewWidget(QtWidgets.QWidget): - - class ZoomMode(enum.Enum): - CustomZoom = ... # type: QPrintPreviewWidget.ZoomMode - FitToWidth = ... # type: QPrintPreviewWidget.ZoomMode - FitInView = ... # type: QPrintPreviewWidget.ZoomMode - - class ViewMode(enum.Enum): - SinglePageView = ... # type: QPrintPreviewWidget.ViewMode - FacingPagesView = ... # type: QPrintPreviewWidget.ViewMode - AllPagesView = ... # type: QPrintPreviewWidget.ViewMode - - @typing.overload - def __init__(self, printer: typing.Optional[QPrinter], parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def pageCount(self) -> int: ... - previewChanged: typing.ClassVar[QtCore.pyqtSignal] - paintRequested: typing.ClassVar[QtCore.pyqtSignal] - def updatePreview(self) -> None: ... - def setAllPagesViewMode(self) -> None: ... - def setFacingPagesViewMode(self) -> None: ... - def setSinglePageViewMode(self) -> None: ... - def setPortraitOrientation(self) -> None: ... - def setLandscapeOrientation(self) -> None: ... - def fitInView(self) -> None: ... - def fitToWidth(self) -> None: ... - def setCurrentPage(self, pageNumber: int) -> None: ... - def setZoomMode(self, zoomMode: 'QPrintPreviewWidget.ZoomMode') -> None: ... - def setViewMode(self, viewMode: 'QPrintPreviewWidget.ViewMode') -> None: ... - def setOrientation(self, orientation: QtGui.QPageLayout.Orientation) -> None: ... - def setZoomFactor(self, zoomFactor: float) -> None: ... - def zoomOut(self, factor: float = ...) -> None: ... - def zoomIn(self, factor: float = ...) -> None: ... - def print(self) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def currentPage(self) -> int: ... - def zoomMode(self) -> 'QPrintPreviewWidget.ZoomMode': ... - def viewMode(self) -> 'QPrintPreviewWidget.ViewMode': ... - def orientation(self) -> QtGui.QPageLayout.Orientation: ... - def zoomFactor(self) -> float: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQml.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtQml.abi3.so deleted file mode 100644 index 4c5b505..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtQml.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQml.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtQml.pyi deleted file mode 100644 index 73fbfa7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtQml.pyi +++ /dev/null @@ -1,843 +0,0 @@ -# The PEP 484 type hints stub file for the QtQml module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtNetwork - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QJSEngine(QtCore.QObject): - - class ObjectOwnership(enum.Enum): - CppOwnership = ... # type: QJSEngine.ObjectOwnership - JavaScriptOwnership = ... # type: QJSEngine.ObjectOwnership - - class Extension(enum.Flag): - TranslationExtension = ... # type: QJSEngine.Extension - ConsoleExtension = ... # type: QJSEngine.Extension - GarbageCollectionExtension = ... # type: QJSEngine.Extension - AllExtensions = ... # type: QJSEngine.Extension - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def toPrimitiveValue(self, value: typing.Any) -> 'QJSPrimitiveValue': ... - def toManagedValue(self, value: typing.Any) -> 'QJSManagedValue': ... - def toScriptValue(self, value: typing.Any) -> 'QJSValue': ... - def newSymbol(self, name: typing.Optional[str]) -> 'QJSValue': ... - def registerModule(self, moduleName: typing.Optional[str], value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> bool: ... - uiLanguageChanged: typing.ClassVar[QtCore.pyqtSignal] - def catchError(self) -> 'QJSValue': ... - def hasError(self) -> bool: ... - @staticmethod - def objectOwnership(a0: typing.Optional[QtCore.QObject]) -> 'QJSEngine.ObjectOwnership': ... - @staticmethod - def setObjectOwnership(a0: typing.Optional[QtCore.QObject], a1: 'QJSEngine.ObjectOwnership') -> None: ... - def setUiLanguage(self, language: typing.Optional[str]) -> None: ... - def uiLanguage(self) -> str: ... - def isInterrupted(self) -> bool: ... - def setInterrupted(self, interrupted: bool) -> None: ... - @typing.overload - def throwError(self, message: typing.Optional[str]) -> None: ... - @typing.overload - def throwError(self, error: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - @typing.overload - def throwError(self, errorType: 'QJSValue.ErrorType', message: typing.Optional[str] = ...) -> None: ... - def newErrorObject(self, errorType: 'QJSValue.ErrorType', message: typing.Optional[str] = ...) -> 'QJSValue': ... - def importModule(self, fileName: typing.Optional[str]) -> 'QJSValue': ... - def newQMetaObject(self, metaObject: typing.Optional[QtCore.QMetaObject]) -> 'QJSValue': ... - def installExtensions(self, extensions: 'QJSEngine.Extension', object: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]] = ...) -> None: ... - def collectGarbage(self) -> None: ... - def newQObject(self, object: typing.Optional[QtCore.QObject]) -> 'QJSValue': ... - def newArray(self, length: int = ...) -> 'QJSValue': ... - def newObject(self) -> 'QJSValue': ... - def evaluate(self, program: typing.Optional[str], fileName: typing.Optional[str] = ..., lineNumber: int = ..., exceptionStackTrace: typing.List[str] = ...) -> 'QJSValue': ... - def globalObject(self) -> 'QJSValue': ... - - -class QJSManagedValue(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - Undefined = ... # type: QJSManagedValue.Type - Boolean = ... # type: QJSManagedValue.Type - Number = ... # type: QJSManagedValue.Type - String = ... # type: QJSManagedValue.Type - Object = ... # type: QJSManagedValue.Type - Symbol = ... # type: QJSManagedValue.Type - Function = ... # type: QJSManagedValue.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]], engine: typing.Optional[QJSEngine]) -> None: ... - @typing.overload - def __init__(self, value: 'QJSPrimitiveValue', engine: typing.Optional[QJSEngine]) -> None: ... - @typing.overload - def __init__(self, string: typing.Optional[str], engine: typing.Optional[QJSEngine]) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any, engine: typing.Optional[QJSEngine]) -> None: ... - - def callAsConstructor(self, arguments: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - def callWithInstance(self, instance: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]], arguments: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - def call(self, arguments: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - @typing.overload - def deleteProperty(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def deleteProperty(self, arrayIndex: int) -> bool: ... - @typing.overload - def setProperty(self, name: typing.Optional[str], value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - @typing.overload - def setProperty(self, arrayIndex: int, value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - @typing.overload - def property(self, name: typing.Optional[str]) -> 'QJSValue': ... - @typing.overload - def property(self, arrayIndex: int) -> 'QJSValue': ... - @typing.overload - def hasOwnProperty(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def hasOwnProperty(self, arrayIndex: int) -> bool: ... - @typing.overload - def hasProperty(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def hasProperty(self, arrayIndex: int) -> bool: ... - def toDateTime(self) -> QtCore.QDateTime: ... - def toQMetaObject(self) -> typing.Optional[QtCore.QMetaObject]: ... - def toQObject(self) -> typing.Optional[QtCore.QObject]: ... - def toUrl(self) -> QtCore.QUrl: ... - def toRegularExpression(self) -> QtCore.QRegularExpression: ... - def toInteger(self) -> int: ... - def toVariant(self) -> typing.Any: ... - def toJSValue(self) -> 'QJSValue': ... - def toPrimitive(self) -> 'QJSPrimitiveValue': ... - def toBoolean(self) -> bool: ... - def toNumber(self) -> float: ... - def toString(self) -> str: ... - def isError(self) -> bool: ... - def isDate(self) -> bool: ... - def isQMetaObject(self) -> bool: ... - def isQObject(self) -> bool: ... - def isVariant(self) -> bool: ... - def isUrl(self) -> bool: ... - def isArray(self) -> bool: ... - def isRegularExpression(self) -> bool: ... - def isNull(self) -> bool: ... - def isInteger(self) -> bool: ... - def isFunction(self) -> bool: ... - def isSymbol(self) -> bool: ... - def isObject(self) -> bool: ... - def isString(self) -> bool: ... - def isNumber(self) -> bool: ... - def isBoolean(self) -> bool: ... - def isUndefined(self) -> bool: ... - def type(self) -> 'QJSManagedValue.Type': ... - def setPrototype(self, prototype: 'QJSManagedValue') -> None: ... - def prototype(self) -> 'QJSManagedValue': ... - def engine(self) -> typing.Optional[QJSEngine]: ... - def strictlyEquals(self, other: 'QJSManagedValue') -> bool: ... - def equals(self, other: 'QJSManagedValue') -> bool: ... - - -class QJSPrimitiveUndefined(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QJSPrimitiveUndefined') -> None: ... - - -class QJSPrimitiveNull(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QJSPrimitiveNull') -> None: ... - - -class QJSPrimitiveValue(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - Undefined = ... # type: QJSPrimitiveValue.Type - Null = ... # type: QJSPrimitiveValue.Type - Boolean = ... # type: QJSPrimitiveValue.Type - Integer = ... # type: QJSPrimitiveValue.Type - Double = ... # type: QJSPrimitiveValue.Type - String = ... # type: QJSPrimitiveValue.Type - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, undefined: QJSPrimitiveUndefined) -> None: ... - @typing.overload - def __init__(self, null: QJSPrimitiveNull) -> None: ... - @typing.overload - def __init__(self, value: bool) -> None: ... - @typing.overload - def __init__(self, value: int) -> None: ... - @typing.overload - def __init__(self, value: float) -> None: ... - @typing.overload - def __init__(self, string: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QJSPrimitiveValue') -> None: ... - - def __add__(self, rhs: 'QJSPrimitiveValue') -> 'QJSPrimitiveValue': ... - def __sub__(self, rhs: 'QJSPrimitiveValue') -> 'QJSPrimitiveValue': ... - def __mul__(self, rhs: 'QJSPrimitiveValue') -> 'QJSPrimitiveValue': ... - def __truediv__(self, rhs: 'QJSPrimitiveValue') -> 'QJSPrimitiveValue': ... - def __mod__(self, rhs: 'QJSPrimitiveValue') -> 'QJSPrimitiveValue': ... - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def __lt__(self, rhs: 'QJSPrimitiveValue') -> bool: ... - def __gt__(self, rhs: 'QJSPrimitiveValue') -> bool: ... - def __le__(self, rhs: 'QJSPrimitiveValue') -> bool: ... - def __ge__(self, rhs: 'QJSPrimitiveValue') -> bool: ... - def data(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def metaType(self) -> QtCore.QMetaType: ... - def __neg__(self) -> 'QJSPrimitiveValue': ... - def __pos__(self) -> 'QJSPrimitiveValue': ... - def equals(self, other: 'QJSPrimitiveValue') -> bool: ... - def strictlyEquals(self, other: 'QJSPrimitiveValue') -> bool: ... - def toString(self) -> str: ... - def toDouble(self) -> float: ... - def toInteger(self) -> int: ... - def toBoolean(self) -> bool: ... - def type(self) -> 'QJSPrimitiveValue.Type': ... - - -class QJSValue(PyQt6.sip.simplewrapper): - - class ErrorType(enum.Enum): - GenericError = ... # type: QJSValue.ErrorType - EvalError = ... # type: QJSValue.ErrorType - RangeError = ... # type: QJSValue.ErrorType - ReferenceError = ... # type: QJSValue.ErrorType - SyntaxError = ... # type: QJSValue.ErrorType - TypeError = ... # type: QJSValue.ErrorType - URIError = ... # type: QJSValue.ErrorType - - class ObjectConversionBehavior(enum.Enum): - ConvertJSObjects = ... # type: QJSValue.ObjectConversionBehavior - RetainJSObjects = ... # type: QJSValue.ObjectConversionBehavior - - class SpecialValue(enum.Enum): - NullValue = ... # type: QJSValue.SpecialValue - UndefinedValue = ... # type: QJSValue.SpecialValue - - @typing.overload - def __init__(self, value: 'QJSValue.SpecialValue' = ...) -> None: ... - @typing.overload - def __init__(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - - def errorType(self) -> 'QJSValue.ErrorType': ... - def callAsConstructor(self, args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - def callWithInstance(self, instance: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]], args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - def call(self, args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... - def isCallable(self) -> bool: ... - def deleteProperty(self, name: typing.Optional[str]) -> bool: ... - def hasOwnProperty(self, name: typing.Optional[str]) -> bool: ... - def hasProperty(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def setProperty(self, name: typing.Optional[str], value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - @typing.overload - def setProperty(self, arrayIndex: int, value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - @typing.overload - def property(self, name: typing.Optional[str]) -> 'QJSValue': ... - @typing.overload - def property(self, arrayIndex: int) -> 'QJSValue': ... - def setPrototype(self, prototype: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... - def prototype(self) -> 'QJSValue': ... - def strictlyEquals(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> bool: ... - def equals(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> bool: ... - def toDateTime(self) -> QtCore.QDateTime: ... - def toQObject(self) -> typing.Optional[QtCore.QObject]: ... - def toPrimitive(self) -> QJSPrimitiveValue: ... - @typing.overload - def toVariant(self) -> typing.Any: ... - @typing.overload - def toVariant(self, behavior: 'QJSValue.ObjectConversionBehavior') -> typing.Any: ... - def toBool(self) -> bool: ... - def toUInt(self) -> int: ... - def toInt(self) -> int: ... - def toNumber(self) -> float: ... - def toString(self) -> str: ... - def isUrl(self) -> bool: ... - def isError(self) -> bool: ... - def isArray(self) -> bool: ... - def isRegExp(self) -> bool: ... - def isDate(self) -> bool: ... - def isObject(self) -> bool: ... - def isQObject(self) -> bool: ... - def isVariant(self) -> bool: ... - def isUndefined(self) -> bool: ... - def isString(self) -> bool: ... - def isNull(self) -> bool: ... - def isNumber(self) -> bool: ... - def isBool(self) -> bool: ... - - -class QJSValueIterator(PyQt6.sip.simplewrapper): - - def __init__(self, value: typing.Union[QJSValue, QJSValue.SpecialValue, bool, int, float, typing.Optional[str]]) -> None: ... - - def value(self) -> QJSValue: ... - def name(self) -> str: ... - def next(self) -> bool: ... - def hasNext(self) -> bool: ... - - -class QQmlAbstractUrlInterceptor(PyQt6.sip.simplewrapper): - - class DataType(enum.Enum): - QmlFile = ... # type: QQmlAbstractUrlInterceptor.DataType - JavaScriptFile = ... # type: QQmlAbstractUrlInterceptor.DataType - QmldirFile = ... # type: QQmlAbstractUrlInterceptor.DataType - UrlString = ... # type: QQmlAbstractUrlInterceptor.DataType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlAbstractUrlInterceptor') -> None: ... - - def intercept(self, path: QtCore.QUrl, type: 'QQmlAbstractUrlInterceptor.DataType') -> QtCore.QUrl: ... - - -class QQmlEngine(QJSEngine): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def markCurrentFunctionAsTranslationBinding(self) -> None: ... - offlineStoragePathChanged: typing.ClassVar[QtCore.pyqtSignal] - def clearSingletons(self) -> None: ... - def urlInterceptors(self) -> typing.List[QQmlAbstractUrlInterceptor]: ... - def interceptUrl(self, url: QtCore.QUrl, type: QQmlAbstractUrlInterceptor.DataType) -> QtCore.QUrl: ... - def removeUrlInterceptor(self, urlInterceptor: typing.Optional[QQmlAbstractUrlInterceptor]) -> None: ... - def addUrlInterceptor(self, urlInterceptor: typing.Optional[QQmlAbstractUrlInterceptor]) -> None: ... - @typing.overload - def singletonInstance(self, qmlTypeId: int) -> QtCore.QObject: ... - @typing.overload - def singletonInstance(self, moduleName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> QtCore.QObject: ... - def offlineStorageDatabaseFilePath(self, databaseName: typing.Optional[str]) -> str: ... - exit: typing.ClassVar[QtCore.pyqtSignal] - warnings: typing.ClassVar[QtCore.pyqtSignal] - quit: typing.ClassVar[QtCore.pyqtSignal] - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def retranslate(self) -> None: ... - @staticmethod - def setContextForObject(a0: typing.Optional[QtCore.QObject], a1: typing.Optional['QQmlContext']) -> None: ... - @staticmethod - def contextForObject(a0: typing.Optional[QtCore.QObject]) -> typing.Optional['QQmlContext']: ... - def setOutputWarningsToStandardError(self, a0: bool) -> None: ... - def outputWarningsToStandardError(self) -> bool: ... - def setBaseUrl(self, a0: QtCore.QUrl) -> None: ... - def baseUrl(self) -> QtCore.QUrl: ... - def offlineStoragePath(self) -> str: ... - def setOfflineStoragePath(self, dir: typing.Optional[str]) -> None: ... - def incubationController(self) -> typing.Optional['QQmlIncubationController']: ... - def setIncubationController(self, a0: typing.Optional['QQmlIncubationController']) -> None: ... - def removeImageProvider(self, id: typing.Optional[str]) -> None: ... - def imageProvider(self, id: typing.Optional[str]) -> typing.Optional['QQmlImageProviderBase']: ... - def addImageProvider(self, id: typing.Optional[str], a1: typing.Optional['QQmlImageProviderBase']) -> None: ... - def networkAccessManager(self) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... - def networkAccessManagerFactory(self) -> typing.Optional['QQmlNetworkAccessManagerFactory']: ... - def setNetworkAccessManagerFactory(self, a0: typing.Optional['QQmlNetworkAccessManagerFactory']) -> None: ... - def importPlugin(self, filePath: typing.Optional[str], uri: typing.Optional[str], errors: typing.Optional[typing.Iterable['QQmlError']]) -> bool: ... - def addPluginPath(self, dir: typing.Optional[str]) -> None: ... - def setPluginPathList(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... - def pluginPathList(self) -> typing.List[str]: ... - def addImportPath(self, dir: typing.Optional[str]) -> None: ... - def setImportPathList(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... - def importPathList(self) -> typing.List[str]: ... - def trimComponentCache(self) -> None: ... - def clearComponentCache(self) -> None: ... - def rootContext(self) -> typing.Optional['QQmlContext']: ... - - -class QQmlApplicationEngine(QQmlEngine): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, url: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, filePath: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - objectCreationFailed: typing.ClassVar[QtCore.pyqtSignal] - objectCreated: typing.ClassVar[QtCore.pyqtSignal] - def loadFromModule(self, uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def setInitialProperties(self, initialProperties: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def setExtraFileSelectors(self, extraFileSelectors: typing.Iterable[typing.Optional[str]]) -> None: ... - def loadData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], url: QtCore.QUrl = ...) -> None: ... - @typing.overload - def load(self, url: QtCore.QUrl) -> None: ... - @typing.overload - def load(self, filePath: typing.Optional[str]) -> None: ... - def rootObjects(self) -> typing.List[QtCore.QObject]: ... - - -class QQmlComponent(QtCore.QObject): - - class Status(enum.Enum): - Null = ... # type: QQmlComponent.Status - Ready = ... # type: QQmlComponent.Status - Loading = ... # type: QQmlComponent.Status - Error = ... # type: QQmlComponent.Status - - class CompilationMode(enum.Enum): - PreferSynchronous = ... # type: QQmlComponent.CompilationMode - Asynchronous = ... # type: QQmlComponent.CompilationMode - - @typing.overload - def __init__(self, a0: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QQmlEngine], fileName: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QQmlEngine], fileName: typing.Optional[str], mode: 'QQmlComponent.CompilationMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QQmlEngine], url: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QQmlEngine], url: QtCore.QUrl, mode: 'QQmlComponent.CompilationMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional[QQmlEngine], uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional[QQmlEngine], uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], mode: 'QQmlComponent.CompilationMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setInitialProperties(self, component: typing.Optional[QtCore.QObject], properties: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def engine(self) -> typing.Optional[QQmlEngine]: ... - progressChanged: typing.ClassVar[QtCore.pyqtSignal] - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - def loadFromModule(self, uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], mode: 'QQmlComponent.CompilationMode' = ...) -> None: ... - def setData(self, a0: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], baseUrl: QtCore.QUrl) -> None: ... - @typing.overload - def loadUrl(self, url: QtCore.QUrl) -> None: ... - @typing.overload - def loadUrl(self, url: QtCore.QUrl, mode: 'QQmlComponent.CompilationMode') -> None: ... - def creationContext(self) -> typing.Optional['QQmlContext']: ... - def completeCreate(self) -> None: ... - def beginCreate(self, a0: typing.Optional['QQmlContext']) -> typing.Optional[QtCore.QObject]: ... - def createWithInitialProperties(self, initialProperties: typing.Dict[typing.Optional[str], typing.Any], context: typing.Optional['QQmlContext'] = ...) -> typing.Optional[QtCore.QObject]: ... - @typing.overload - def create(self, context: typing.Optional['QQmlContext'] = ...) -> typing.Optional[QtCore.QObject]: ... - @typing.overload - def create(self, a0: 'QQmlIncubator', context: typing.Optional['QQmlContext'] = ..., forContext: typing.Optional['QQmlContext'] = ...) -> None: ... - def url(self) -> QtCore.QUrl: ... - def progress(self) -> float: ... - def errors(self) -> typing.List['QQmlError']: ... - def isLoading(self) -> bool: ... - def isError(self) -> bool: ... - def isReady(self) -> bool: ... - def isNull(self) -> bool: ... - def isBound(self) -> bool: ... - def status(self) -> 'QQmlComponent.Status': ... - - -class QQmlContext(QtCore.QObject): - - class PropertyPair(PyQt6.sip.simplewrapper): - - name = ... # type: typing.Optional[str] - value = ... # type: typing.Any - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlContext.PropertyPair') -> None: ... - - @typing.overload - def __init__(self, engine: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parentContext: typing.Optional['QQmlContext'], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def objectForName(self, a0: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... - def setContextProperties(self, properties: typing.Iterable['QQmlContext.PropertyPair']) -> None: ... - def baseUrl(self) -> QtCore.QUrl: ... - def setBaseUrl(self, a0: QtCore.QUrl) -> None: ... - def resolvedUrl(self, a0: QtCore.QUrl) -> QtCore.QUrl: ... - def nameForObject(self, a0: typing.Optional[QtCore.QObject]) -> str: ... - @typing.overload - def setContextProperty(self, a0: typing.Optional[str], a1: typing.Optional[QtCore.QObject]) -> None: ... - @typing.overload - def setContextProperty(self, a0: typing.Optional[str], a1: typing.Any) -> None: ... - def contextProperty(self, a0: typing.Optional[str]) -> typing.Any: ... - def setContextObject(self, a0: typing.Optional[QtCore.QObject]) -> None: ... - def contextObject(self) -> typing.Optional[QtCore.QObject]: ... - def parentContext(self) -> typing.Optional['QQmlContext']: ... - def engine(self) -> typing.Optional[QQmlEngine]: ... - def isValid(self) -> bool: ... - - -class QQmlImageProviderBase(QtCore.QObject): - - class Flag(enum.Flag): - ForceAsynchronousImageLoading = ... # type: QQmlImageProviderBase.Flag - - class ImageType(enum.Enum): - Image = ... # type: QQmlImageProviderBase.ImageType - Pixmap = ... # type: QQmlImageProviderBase.ImageType - Texture = ... # type: QQmlImageProviderBase.ImageType - ImageResponse = ... # type: QQmlImageProviderBase.ImageType - - def flags(self) -> 'QQmlImageProviderBase.Flag': ... - def imageType(self) -> 'QQmlImageProviderBase.ImageType': ... - - -class QQmlError(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlError') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def swap(self, other: 'QQmlError') -> None: ... - def setMessageType(self, messageType: QtCore.QtMsgType) -> None: ... - def messageType(self) -> QtCore.QtMsgType: ... - def setObject(self, a0: typing.Optional[QtCore.QObject]) -> None: ... - def object(self) -> typing.Optional[QtCore.QObject]: ... - def toString(self) -> str: ... - def setColumn(self, a0: int) -> None: ... - def column(self) -> int: ... - def setLine(self, a0: int) -> None: ... - def line(self) -> int: ... - def setDescription(self, a0: typing.Optional[str]) -> None: ... - def description(self) -> str: ... - def setUrl(self, a0: QtCore.QUrl) -> None: ... - def url(self) -> QtCore.QUrl: ... - def isValid(self) -> bool: ... - - -class QQmlExpression(QtCore.QObject): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QQmlContext], a1: typing.Optional[QtCore.QObject], a2: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlScriptString', context: typing.Optional[QQmlContext] = ..., scope: typing.Optional[QtCore.QObject] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def evaluate(self) -> typing.Tuple[typing.Any, typing.Optional[bool]]: ... - def error(self) -> QQmlError: ... - def clearError(self) -> None: ... - def hasError(self) -> bool: ... - def scopeObject(self) -> typing.Optional[QtCore.QObject]: ... - def setSourceLocation(self, fileName: typing.Optional[str], line: int, column: int = ...) -> None: ... - def columnNumber(self) -> int: ... - def lineNumber(self) -> int: ... - def sourceFile(self) -> str: ... - def setNotifyOnValueChanged(self, a0: bool) -> None: ... - def notifyOnValueChanged(self) -> bool: ... - def setExpression(self, a0: typing.Optional[str]) -> None: ... - def expression(self) -> str: ... - def context(self) -> typing.Optional[QQmlContext]: ... - def engine(self) -> typing.Optional[QQmlEngine]: ... - - -class QQmlExtensionPlugin(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def unregisterTypes(self) -> None: ... - def baseUrl(self) -> QtCore.QUrl: ... - def registerTypes(self, uri: typing.Optional[str]) -> None: ... - - -class QQmlEngineExtensionPlugin(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def initializeEngine(self, engine: typing.Optional[QQmlEngine], uri: typing.Optional[str]) -> None: ... - - -class QQmlFileSelector(QtCore.QObject): - - def __init__(self, engine: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def selector(self) -> typing.Optional[QtCore.QFileSelector]: ... - def setExtraSelectors(self, strings: typing.Iterable[typing.Optional[str]]) -> None: ... - def setSelector(self, selector: typing.Optional[QtCore.QFileSelector]) -> None: ... - - -class QQmlIncubator(PyQt6.sip.simplewrapper): - - class Status(enum.Enum): - Null = ... # type: QQmlIncubator.Status - Ready = ... # type: QQmlIncubator.Status - Loading = ... # type: QQmlIncubator.Status - Error = ... # type: QQmlIncubator.Status - - class IncubationMode(enum.Enum): - Asynchronous = ... # type: QQmlIncubator.IncubationMode - AsynchronousIfNested = ... # type: QQmlIncubator.IncubationMode - Synchronous = ... # type: QQmlIncubator.IncubationMode - - def __init__(self, mode: 'QQmlIncubator.IncubationMode' = ...) -> None: ... - - def setInitialState(self, a0: typing.Optional[QtCore.QObject]) -> None: ... - def statusChanged(self, a0: 'QQmlIncubator.Status') -> None: ... - def setInitialProperties(self, initialProperties: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def object(self) -> typing.Optional[QtCore.QObject]: ... - def status(self) -> 'QQmlIncubator.Status': ... - def incubationMode(self) -> 'QQmlIncubator.IncubationMode': ... - def errors(self) -> typing.List[QQmlError]: ... - def isLoading(self) -> bool: ... - def isError(self) -> bool: ... - def isReady(self) -> bool: ... - def isNull(self) -> bool: ... - def forceCompletion(self) -> None: ... - def clear(self) -> None: ... - - -class QQmlIncubationController(PyQt6.sip.simplewrapper): - - def __init__(self) -> None: ... - - def incubatingObjectCountChanged(self, a0: int) -> None: ... - def incubateFor(self, msecs: int) -> None: ... - def incubatingObjectCount(self) -> int: ... - def engine(self) -> typing.Optional[QQmlEngine]: ... - - -class QQmlListReference(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], property: typing.Optional[str], engine: typing.Optional[QQmlEngine] = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlListReference') -> None: ... - @typing.overload - def __init__(self, variant: typing.Any, engine: typing.Optional[QQmlEngine] = ...) -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def removeLast(self) -> bool: ... - def replace(self, a0: int, a1: typing.Optional[QtCore.QObject]) -> bool: ... - def canRemoveLast(self) -> bool: ... - def canReplace(self) -> bool: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def clear(self) -> bool: ... - def at(self, a0: int) -> typing.Optional[QtCore.QObject]: ... - def append(self, a0: typing.Optional[QtCore.QObject]) -> bool: ... - def isReadable(self) -> bool: ... - def isManipulable(self) -> bool: ... - def canCount(self) -> bool: ... - def canClear(self) -> bool: ... - def canAt(self) -> bool: ... - def canAppend(self) -> bool: ... - def listElementType(self) -> typing.Optional[QtCore.QMetaObject]: ... - def object(self) -> typing.Optional[QtCore.QObject]: ... - def isValid(self) -> bool: ... - - -class QQmlNetworkAccessManagerFactory(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlNetworkAccessManagerFactory') -> None: ... - - def create(self, parent: typing.Optional[QtCore.QObject]) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... - - -class QQmlParserStatus(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlParserStatus') -> None: ... - - def componentComplete(self) -> None: ... - def classBegin(self) -> None: ... - - -class QQmlProperty(PyQt6.sip.simplewrapper): - - class Type(enum.Enum): - Invalid = ... # type: QQmlProperty.Type - Property = ... # type: QQmlProperty.Type - SignalProperty = ... # type: QQmlProperty.Type - - class PropertyTypeCategory(enum.Enum): - InvalidCategory = ... # type: QQmlProperty.PropertyTypeCategory - List = ... # type: QQmlProperty.PropertyTypeCategory - Object = ... # type: QQmlProperty.PropertyTypeCategory - Normal = ... # type: QQmlProperty.PropertyTypeCategory - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QQmlContext]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QQmlEngine]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlContext]) -> None: ... - @typing.overload - def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlEngine]) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlProperty') -> None: ... - - def __ne__(self, other: object): ... - def swap(self, other: 'QQmlProperty') -> None: ... - def method(self) -> QtCore.QMetaMethod: ... - def property(self) -> QtCore.QMetaProperty: ... - def index(self) -> int: ... - def object(self) -> typing.Optional[QtCore.QObject]: ... - def isResettable(self) -> bool: ... - def isDesignable(self) -> bool: ... - def isWritable(self) -> bool: ... - @typing.overload - def connectNotifySignal(self, slot: PYQT_SLOT) -> bool: ... - @typing.overload - def connectNotifySignal(self, dest: typing.Optional[QtCore.QObject], method: int) -> bool: ... - def needsNotifySignal(self) -> bool: ... - def hasNotifySignal(self) -> bool: ... - def reset(self) -> bool: ... - @typing.overload - def write(self, a0: typing.Any) -> bool: ... - @typing.overload - @staticmethod - def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any) -> bool: ... - @typing.overload - @staticmethod - def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any, a3: typing.Optional[QQmlContext]) -> bool: ... - @typing.overload - @staticmethod - def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any, a3: typing.Optional[QQmlEngine]) -> bool: ... - @typing.overload - def read(self) -> typing.Any: ... - @typing.overload - @staticmethod - def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str]) -> typing.Any: ... - @typing.overload - @staticmethod - def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlContext]) -> typing.Any: ... - @typing.overload - @staticmethod - def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlEngine]) -> typing.Any: ... - def name(self) -> str: ... - def propertyMetaType(self) -> QtCore.QMetaType: ... - def propertyTypeName(self) -> typing.Optional[str]: ... - def propertyTypeCategory(self) -> 'QQmlProperty.PropertyTypeCategory': ... - def propertyType(self) -> int: ... - def isBindable(self) -> bool: ... - def isSignalProperty(self) -> bool: ... - def isProperty(self) -> bool: ... - def isValid(self) -> bool: ... - def type(self) -> 'QQmlProperty.Type': ... - def __eq__(self, other: object): ... - def __hash__(self) -> int: ... - - -class QQmlPropertyMap(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def updateValue(self, key: typing.Optional[str], input: typing.Any) -> typing.Any: ... - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def __getitem__(self, key: typing.Optional[str]) -> typing.Any: ... - def contains(self, key: typing.Optional[str]) -> bool: ... - def isEmpty(self) -> bool: ... - def __len__(self) -> int: ... - def size(self) -> int: ... - def count(self) -> int: ... - def keys(self) -> typing.List[str]: ... - def clear(self, key: typing.Optional[str]) -> None: ... - def freeze(self) -> None: ... - @typing.overload - def insert(self, values: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - @typing.overload - def insert(self, key: typing.Optional[str], value: typing.Any) -> None: ... - def value(self, key: typing.Optional[str]) -> typing.Any: ... - - -class QQmlPropertyValueSource(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlPropertyValueSource') -> None: ... - - def setTarget(self, a0: QQmlProperty) -> None: ... - - -class QQmlScriptString(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQmlScriptString') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def booleanLiteral(self) -> typing.Tuple[bool, typing.Optional[bool]]: ... - def numberLiteral(self) -> typing.Tuple[float, typing.Optional[bool]]: ... - def stringLiteral(self) -> str: ... - def isNullLiteral(self) -> bool: ... - def isUndefinedLiteral(self) -> bool: ... - def isEmpty(self) -> bool: ... - - -def qmlAttachedPropertiesObject(a0: type, object: typing.Optional[QtCore.QObject], create: bool = ...) -> typing.Optional[QtCore.QObject]: ... -def qmlRegisterUncreatableType(a0: type, uri: typing.Optional[str], major: int, minor: int, reason: typing.Optional[str], qmlName: typing.Optional[str] = ...) -> int: ... -def qmlRegisterAnonymousType(a0: type, uri: typing.Optional[str], major: int) -> int: ... -def qmlRegisterSingletonInstance(uri: typing.Optional[str], major: int, minor: int, typeName: typing.Optional[str], cppObject: typing.Optional[QtCore.QObject]) -> int: ... -def qmlRegisterRevision(a0: type, uri: typing.Optional[str], major: int, minor: int, attachedProperties: type = ...) -> int: ... -def qjsEngine(a0: typing.Optional[QtCore.QObject]) -> typing.Optional[QJSEngine]: ... -def qmlEngine(a0: typing.Optional[QtCore.QObject]) -> typing.Optional[QQmlEngine]: ... -def qmlContext(a0: typing.Optional[QtCore.QObject]) -> typing.Optional[QQmlContext]: ... -def qmlTypeId(uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str]) -> int: ... -@typing.overload -def qmlRegisterType(url: QtCore.QUrl, uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str]) -> int: ... -@typing.overload -def qmlRegisterType(a0: type, uri: typing.Optional[str], major: int, minor: int, name: typing.Optional[str] = ..., attachedProperties: type = ...) -> int: ... -@typing.overload -def qmlRegisterSingletonType(url: QtCore.QUrl, uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str]) -> int: ... -@typing.overload -def qmlRegisterSingletonType(a0: type, uri: typing.Optional[str], major: int, minor: int, factory: typing.Callable[[QQmlEngine, QJSEngine], typing.Any], name: typing.Optional[str] = ...) -> int: ... -def qmlRegisterModule(uri: typing.Optional[str], versionMajor: int, versionMinor: int) -> None: ... -def qmlProtectModule(uri: typing.Optional[str], majVersion: int) -> bool: ... -def qmlRegisterUncreatableMetaObject(staticMetaObject: QtCore.QMetaObject, uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str], reason: typing.Optional[str]) -> int: ... -def qmlRegisterTypeNotAvailable(uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str], message: typing.Optional[str]) -> int: ... -def qmlClearTypeRegistrations() -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.abi3.so deleted file mode 100644 index 8d84202..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.pyi deleted file mode 100644 index 01dba7f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick.pyi +++ /dev/null @@ -1,1400 +0,0 @@ -# The PEP 484 type hints stub file for the QtQuick module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork -from PyQt6 import QtQml - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QQuickItem(QtCore.QObject, QtQml.QQmlParserStatus): - - class TransformOrigin(enum.Enum): - TopLeft = ... # type: QQuickItem.TransformOrigin - Top = ... # type: QQuickItem.TransformOrigin - TopRight = ... # type: QQuickItem.TransformOrigin - Left = ... # type: QQuickItem.TransformOrigin - Center = ... # type: QQuickItem.TransformOrigin - Right = ... # type: QQuickItem.TransformOrigin - BottomLeft = ... # type: QQuickItem.TransformOrigin - Bottom = ... # type: QQuickItem.TransformOrigin - BottomRight = ... # type: QQuickItem.TransformOrigin - - class ItemChange(enum.Enum): - ItemChildAddedChange = ... # type: QQuickItem.ItemChange - ItemChildRemovedChange = ... # type: QQuickItem.ItemChange - ItemSceneChange = ... # type: QQuickItem.ItemChange - ItemVisibleHasChanged = ... # type: QQuickItem.ItemChange - ItemParentHasChanged = ... # type: QQuickItem.ItemChange - ItemOpacityHasChanged = ... # type: QQuickItem.ItemChange - ItemActiveFocusHasChanged = ... # type: QQuickItem.ItemChange - ItemRotationHasChanged = ... # type: QQuickItem.ItemChange - ItemAntialiasingHasChanged = ... # type: QQuickItem.ItemChange - ItemDevicePixelRatioHasChanged = ... # type: QQuickItem.ItemChange - ItemEnabledHasChanged = ... # type: QQuickItem.ItemChange - - class Flag(enum.Flag): - ItemClipsChildrenToShape = ... # type: QQuickItem.Flag - ItemAcceptsInputMethod = ... # type: QQuickItem.Flag - ItemIsFocusScope = ... # type: QQuickItem.Flag - ItemHasContents = ... # type: QQuickItem.Flag - ItemAcceptsDrops = ... # type: QQuickItem.Flag - ItemIsViewport = ... # type: QQuickItem.Flag - ItemObservesViewport = ... # type: QQuickItem.Flag - - class ItemChangeData(PyQt6.sip.simplewrapper): - - boolValue = ... # type: bool - item = ... # type: 'QQuickItem' - realValue = ... # type: float - window = ... # type: 'QQuickWindow' - - @typing.overload - def __init__(self, v: typing.Optional['QQuickItem']) -> None: ... - @typing.overload - def __init__(self, v: typing.Optional['QQuickWindow']) -> None: ... - @typing.overload - def __init__(self, v: float) -> None: ... - @typing.overload - def __init__(self, v: bool) -> None: ... - @typing.overload - def __init__(self, a0: 'QQuickItem.ItemChangeData') -> None: ... - - class UpdatePaintNodeData(PyQt6.sip.simplewrapper): - - transformNode = ... # type: 'QSGTransformNode' - - def __init__(self, a0: 'QQuickItem.UpdatePaintNodeData') -> None: ... - - def __init__(self, parent: typing.Optional['QQuickItem'] = ...) -> None: ... - - focusPolicyChanged: typing.ClassVar[QtCore.pyqtSignal] - def setFocusPolicy(self, policy: QtCore.Qt.FocusPolicy) -> None: ... - def focusPolicy(self) -> QtCore.Qt.FocusPolicy: ... - def dumpItemTree(self) -> None: ... - def ensurePolished(self) -> None: ... - def viewportItem(self) -> typing.Optional['QQuickItem']: ... - containmentMaskChanged: typing.ClassVar[QtCore.pyqtSignal] - def setContainmentMask(self, mask: typing.Optional[QtCore.QObject]) -> None: ... - def containmentMask(self) -> typing.Optional[QtCore.QObject]: ... - def setAcceptTouchEvents(self, accept: bool) -> None: ... - def acceptTouchEvents(self) -> bool: ... - def size(self) -> QtCore.QSizeF: ... - def mapFromGlobal(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - def mapToGlobal(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - def isAncestorOf(self, child: typing.Optional['QQuickItem']) -> bool: ... - def grabToImage(self, targetSize: QtCore.QSize = ...) -> typing.Optional['QQuickItemGrabResult']: ... - def resetAntialiasing(self) -> None: ... - windowChanged: typing.ClassVar[QtCore.pyqtSignal] - activeFocusOnTabChanged: typing.ClassVar[QtCore.pyqtSignal] - def nextItemInFocusChain(self, forward: bool = ...) -> typing.Optional['QQuickItem']: ... - def setActiveFocusOnTab(self, a0: bool) -> None: ... - def activeFocusOnTab(self) -> bool: ... - def updatePolish(self) -> None: ... - def releaseResources(self) -> None: ... - def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional['QQuickItem.UpdatePaintNodeData']) -> typing.Optional['QSGNode']: ... - def geometryChange(self, newGeometry: QtCore.QRectF, oldGeometry: QtCore.QRectF) -> None: ... - def childMouseEventFilter(self, a0: typing.Optional['QQuickItem'], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def hoverLeaveEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... - def hoverMoveEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... - def hoverEnterEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... - def touchEvent(self, event: typing.Optional[QtGui.QTouchEvent]) -> None: ... - def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def touchUngrabEvent(self) -> None: ... - def mouseUngrabEvent(self) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def componentComplete(self) -> None: ... - def classBegin(self) -> None: ... - def heightValid(self) -> bool: ... - def widthValid(self) -> bool: ... - def updateInputMethod(self, queries: QtCore.Qt.InputMethodQuery = ...) -> None: ... - def itemChange(self, a0: 'QQuickItem.ItemChange', a1: 'QQuickItem.ItemChangeData') -> None: ... - def isComponentComplete(self) -> bool: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - implicitHeightChanged: typing.ClassVar[QtCore.pyqtSignal] - implicitWidthChanged: typing.ClassVar[QtCore.pyqtSignal] - zChanged: typing.ClassVar[QtCore.pyqtSignal] - heightChanged: typing.ClassVar[QtCore.pyqtSignal] - widthChanged: typing.ClassVar[QtCore.pyqtSignal] - yChanged: typing.ClassVar[QtCore.pyqtSignal] - xChanged: typing.ClassVar[QtCore.pyqtSignal] - scaleChanged: typing.ClassVar[QtCore.pyqtSignal] - rotationChanged: typing.ClassVar[QtCore.pyqtSignal] - visibleChanged: typing.ClassVar[QtCore.pyqtSignal] - enabledChanged: typing.ClassVar[QtCore.pyqtSignal] - opacityChanged: typing.ClassVar[QtCore.pyqtSignal] - clipChanged: typing.ClassVar[QtCore.pyqtSignal] - antialiasingChanged: typing.ClassVar[QtCore.pyqtSignal] - smoothChanged: typing.ClassVar[QtCore.pyqtSignal] - transformOriginChanged: typing.ClassVar[QtCore.pyqtSignal] - parentChanged: typing.ClassVar[QtCore.pyqtSignal] - activeFocusChanged: typing.ClassVar[QtCore.pyqtSignal] - focusChanged: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - baselineOffsetChanged: typing.ClassVar[QtCore.pyqtSignal] - childrenRectChanged: typing.ClassVar[QtCore.pyqtSignal] - def update(self) -> None: ... - def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... - def isTextureProvider(self) -> bool: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def childAt(self, x: float, y: float) -> typing.Optional['QQuickItem']: ... - @typing.overload - def forceActiveFocus(self) -> None: ... - @typing.overload - def forceActiveFocus(self, reason: QtCore.Qt.FocusReason) -> None: ... - def polish(self) -> None: ... - def mapRectFromScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - def mapRectFromItem(self, item: typing.Optional['QQuickItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... - def mapFromScene(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - def mapFromItem(self, item: typing.Optional['QQuickItem'], point: QtCore.QPointF) -> QtCore.QPointF: ... - def mapRectToScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - def mapRectToItem(self, item: typing.Optional['QQuickItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... - def mapToScene(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - def mapToItem(self, item: typing.Optional['QQuickItem'], point: QtCore.QPointF) -> QtCore.QPointF: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def setKeepTouchGrab(self, a0: bool) -> None: ... - def keepTouchGrab(self) -> bool: ... - def ungrabTouchPoints(self) -> None: ... - def grabTouchPoints(self, ids: typing.Iterable[int]) -> None: ... - def setFiltersChildMouseEvents(self, filter: bool) -> None: ... - def filtersChildMouseEvents(self) -> bool: ... - def setKeepMouseGrab(self, a0: bool) -> None: ... - def keepMouseGrab(self) -> bool: ... - def ungrabMouse(self) -> None: ... - def grabMouse(self) -> None: ... - def unsetCursor(self) -> None: ... - def setCursor(self, cursor: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... - def cursor(self) -> QtGui.QCursor: ... - def setAcceptHoverEvents(self, enabled: bool) -> None: ... - def acceptHoverEvents(self) -> bool: ... - def setAcceptedMouseButtons(self, buttons: QtCore.Qt.MouseButton) -> None: ... - def acceptedMouseButtons(self) -> QtCore.Qt.MouseButton: ... - def scopedFocusItem(self) -> typing.Optional['QQuickItem']: ... - def isFocusScope(self) -> bool: ... - @typing.overload - def setFocus(self, a0: bool) -> None: ... - @typing.overload - def setFocus(self, focus: bool, reason: QtCore.Qt.FocusReason) -> None: ... - def hasFocus(self) -> bool: ... - def hasActiveFocus(self) -> bool: ... - def setFlags(self, flags: 'QQuickItem.Flag') -> None: ... - def setFlag(self, flag: 'QQuickItem.Flag', enabled: bool = ...) -> None: ... - def flags(self) -> 'QQuickItem.Flag': ... - def setAntialiasing(self, a0: bool) -> None: ... - def antialiasing(self) -> bool: ... - def setSmooth(self, a0: bool) -> None: ... - def smooth(self) -> bool: ... - def setEnabled(self, a0: bool) -> None: ... - def isEnabled(self) -> bool: ... - def setVisible(self, a0: bool) -> None: ... - def isVisible(self) -> bool: ... - def setOpacity(self, a0: float) -> None: ... - def opacity(self) -> float: ... - def setScale(self, a0: float) -> None: ... - def scale(self) -> float: ... - def setRotation(self, a0: float) -> None: ... - def rotation(self) -> float: ... - def setZ(self, a0: float) -> None: ... - def z(self) -> float: ... - def setTransformOrigin(self, a0: 'QQuickItem.TransformOrigin') -> None: ... - def transformOrigin(self) -> 'QQuickItem.TransformOrigin': ... - def setSize(self, size: QtCore.QSizeF) -> None: ... - def implicitHeight(self) -> float: ... - def setImplicitHeight(self, a0: float) -> None: ... - def resetHeight(self) -> None: ... - def setHeight(self, a0: float) -> None: ... - def height(self) -> float: ... - def implicitWidth(self) -> float: ... - def setImplicitWidth(self, a0: float) -> None: ... - def resetWidth(self) -> None: ... - def setWidth(self, a0: float) -> None: ... - def width(self) -> float: ... - def setY(self, a0: float) -> None: ... - def setX(self, a0: float) -> None: ... - def y(self) -> float: ... - def x(self) -> float: ... - def setBaselineOffset(self, a0: float) -> None: ... - def baselineOffset(self) -> float: ... - def setState(self, a0: typing.Optional[str]) -> None: ... - def state(self) -> str: ... - def setClip(self, a0: bool) -> None: ... - def clip(self) -> bool: ... - def childItems(self) -> typing.List['QQuickItem']: ... - def childrenRect(self) -> QtCore.QRectF: ... - def stackAfter(self, a0: typing.Optional['QQuickItem']) -> None: ... - def stackBefore(self, a0: typing.Optional['QQuickItem']) -> None: ... - def setParentItem(self, parent: typing.Optional['QQuickItem']) -> None: ... - def parentItem(self) -> typing.Optional['QQuickItem']: ... - def window(self) -> typing.Optional['QQuickWindow']: ... - - -class QQuickFramebufferObject(QQuickItem): - - class Renderer(PyQt6.sip.wrapper): - - try: - from PyQt6.QtOpenGL import QOpenGLFramebufferObject - except ImportError: - pass - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQuickFramebufferObject.Renderer') -> None: ... - - def invalidateFramebufferObject(self) -> None: ... - def update(self) -> None: ... - def framebufferObject(self) -> typing.Optional[QOpenGLFramebufferObject]: ... - def synchronize(self, a0: typing.Optional['QQuickFramebufferObject']) -> None: ... - def createFramebufferObject(self, size: QtCore.QSize) -> typing.Optional[QOpenGLFramebufferObject]: ... - def render(self) -> None: ... - - def __init__(self, parent: typing.Optional[QQuickItem] = ...) -> None: ... - - mirrorVerticallyChanged: typing.ClassVar[QtCore.pyqtSignal] - def setMirrorVertically(self, enable: bool) -> None: ... - def mirrorVertically(self) -> bool: ... - def releaseResources(self) -> None: ... - def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... - def isTextureProvider(self) -> bool: ... - textureFollowsItemSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional[QQuickItem.UpdatePaintNodeData]) -> typing.Optional['QSGNode']: ... - def geometryChange(self, newGeometry: QtCore.QRectF, oldGeometry: QtCore.QRectF) -> None: ... - def createRenderer(self) -> typing.Optional['QQuickFramebufferObject.Renderer']: ... - def setTextureFollowsItemSize(self, follows: bool) -> None: ... - def textureFollowsItemSize(self) -> bool: ... - - -class QQuickGraphicsConfiguration(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QQuickGraphicsConfiguration') -> None: ... - - def timestampsEnabled(self) -> bool: ... - def setTimestamps(self, enable: bool) -> None: ... - def pipelineCacheLoadFile(self) -> str: ... - def setPipelineCacheLoadFile(self, filename: typing.Optional[str]) -> None: ... - def pipelineCacheSaveFile(self) -> str: ... - def setPipelineCacheSaveFile(self, filename: typing.Optional[str]) -> None: ... - def isAutomaticPipelineCacheEnabled(self) -> bool: ... - def setAutomaticPipelineCache(self, enable: bool) -> None: ... - def prefersSoftwareDevice(self) -> bool: ... - def setPreferSoftwareDevice(self, enable: bool) -> None: ... - def isDebugMarkersEnabled(self) -> bool: ... - def setDebugMarkers(self, enable: bool) -> None: ... - def isDebugLayerEnabled(self) -> bool: ... - def setDebugLayer(self, enable: bool) -> None: ... - @staticmethod - def preferredInstanceExtensions() -> typing.List[QtCore.QByteArray]: ... - def isDepthBufferEnabledFor2D(self) -> bool: ... - def setDepthBufferFor2D(self, enable: bool) -> None: ... - def deviceExtensions(self) -> typing.List[QtCore.QByteArray]: ... - def setDeviceExtensions(self, extensions: typing.Iterable[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]]) -> None: ... - - -class QQuickGraphicsDevice(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QQuickGraphicsDevice') -> None: ... - - @staticmethod - def fromOpenGLContext(context: typing.Optional[QtGui.QOpenGLContext]) -> 'QQuickGraphicsDevice': ... - def isNull(self) -> bool: ... - - -class QQuickTextureFactory(QtCore.QObject): - - def __init__(self) -> None: ... - - @staticmethod - def textureFactoryForImage(image: QtGui.QImage) -> typing.Optional['QQuickTextureFactory']: ... - def image(self) -> QtGui.QImage: ... - def textureByteCount(self) -> int: ... - def textureSize(self) -> QtCore.QSize: ... - def createTexture(self, window: typing.Optional['QQuickWindow']) -> typing.Optional['QSGTexture']: ... - - -class QQuickImageProvider(QtQml.QQmlImageProviderBase): - - def __init__(self, type: QtQml.QQmlImageProviderBase.ImageType, flags: QtQml.QQmlImageProviderBase.Flag = ...) -> None: ... - - def requestTexture(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[typing.Optional[QQuickTextureFactory], typing.Optional[QtCore.QSize]]: ... - def requestPixmap(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[QtGui.QPixmap, typing.Optional[QtCore.QSize]]: ... - def requestImage(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[QtGui.QImage, typing.Optional[QtCore.QSize]]: ... - def flags(self) -> QtQml.QQmlImageProviderBase.Flag: ... - def imageType(self) -> QtQml.QQmlImageProviderBase.ImageType: ... - - -class QQuickImageResponse(QtCore.QObject): - - def __init__(self) -> None: ... - - finished: typing.ClassVar[QtCore.pyqtSignal] - def cancel(self) -> None: ... - def errorString(self) -> str: ... - def textureFactory(self) -> typing.Optional[QQuickTextureFactory]: ... - - -class QQuickAsyncImageProvider(QQuickImageProvider): - - def __init__(self) -> None: ... - - def requestImageResponse(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Optional[QQuickImageResponse]: ... - - -class QQuickItemGrabResult(QtCore.QObject): - - ready: typing.ClassVar[QtCore.pyqtSignal] - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - @typing.overload - def saveToFile(self, fileName: typing.Optional[str]) -> bool: ... - @typing.overload - def saveToFile(self, fileName: QtCore.QUrl) -> bool: ... - def url(self) -> QtCore.QUrl: ... - def image(self) -> QtGui.QImage: ... - - -class QQuickPaintedItem(QQuickItem): - - class PerformanceHint(enum.Flag): - FastFBOResizing = ... # type: QQuickPaintedItem.PerformanceHint - - class RenderTarget(enum.Enum): - Image = ... # type: QQuickPaintedItem.RenderTarget - FramebufferObject = ... # type: QQuickPaintedItem.RenderTarget - InvertedYFramebufferObject = ... # type: QQuickPaintedItem.RenderTarget - - def __init__(self, parent: typing.Optional[QQuickItem] = ...) -> None: ... - - textureSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - def setTextureSize(self, size: QtCore.QSize) -> None: ... - def textureSize(self) -> QtCore.QSize: ... - def itemChange(self, a0: QQuickItem.ItemChange, a1: QQuickItem.ItemChangeData) -> None: ... - def releaseResources(self) -> None: ... - def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... - def isTextureProvider(self) -> bool: ... - def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional[QQuickItem.UpdatePaintNodeData]) -> typing.Optional['QSGNode']: ... - renderTargetChanged: typing.ClassVar[QtCore.pyqtSignal] - contentsScaleChanged: typing.ClassVar[QtCore.pyqtSignal] - contentsSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - fillColorChanged: typing.ClassVar[QtCore.pyqtSignal] - def paint(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - def setRenderTarget(self, target: 'QQuickPaintedItem.RenderTarget') -> None: ... - def renderTarget(self) -> 'QQuickPaintedItem.RenderTarget': ... - def setFillColor(self, a0: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def fillColor(self) -> QtGui.QColor: ... - def setContentsScale(self, a0: float) -> None: ... - def contentsScale(self) -> float: ... - def resetContentsSize(self) -> None: ... - def setContentsSize(self, a0: QtCore.QSize) -> None: ... - def contentsSize(self) -> QtCore.QSize: ... - def contentsBoundingRect(self) -> QtCore.QRectF: ... - def setPerformanceHints(self, hints: 'QQuickPaintedItem.PerformanceHint') -> None: ... - def setPerformanceHint(self, hint: 'QQuickPaintedItem.PerformanceHint', enabled: bool = ...) -> None: ... - def performanceHints(self) -> 'QQuickPaintedItem.PerformanceHint': ... - def setMipmap(self, enable: bool) -> None: ... - def mipmap(self) -> bool: ... - def setAntialiasing(self, enable: bool) -> None: ... - def antialiasing(self) -> bool: ... - def setOpaquePainting(self, opaque: bool) -> None: ... - def opaquePainting(self) -> bool: ... - def update(self, rect: QtCore.QRect = ...) -> None: ... - - -class QQuickRenderControl(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def window(self) -> typing.Optional['QQuickWindow']: ... - def endFrame(self) -> None: ... - def beginFrame(self) -> None: ... - def samples(self) -> int: ... - def setSamples(self, sampleCount: int) -> None: ... - sceneChanged: typing.ClassVar[QtCore.pyqtSignal] - renderRequested: typing.ClassVar[QtCore.pyqtSignal] - def prepareThread(self, targetThread: typing.Optional[QtCore.QThread]) -> None: ... - def renderWindow(self, offset: typing.Optional[QtCore.QPoint]) -> typing.Optional[QtGui.QWindow]: ... - @staticmethod - def renderWindowFor(win: typing.Optional['QQuickWindow'], offset: typing.Optional[QtCore.QPoint] = ...) -> typing.Optional[QtGui.QWindow]: ... - def sync(self) -> bool: ... - def render(self) -> None: ... - def polishItems(self) -> None: ... - def invalidate(self) -> None: ... - def initialize(self) -> bool: ... - - -class QQuickRenderTarget(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QQuickRenderTarget') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setMirrorVertically(self, enable: bool) -> None: ... - def mirrorVertically(self) -> bool: ... - def setDevicePixelRatio(self, ratio: float) -> None: ... - def devicePixelRatio(self) -> float: ... - @staticmethod - def fromPaintDevice(device: typing.Optional[QtGui.QPaintDevice]) -> 'QQuickRenderTarget': ... - @staticmethod - def fromOpenGLRenderBuffer(renderbufferId: int, pixelSize: QtCore.QSize, sampleCount: int = ...) -> 'QQuickRenderTarget': ... - @typing.overload - @staticmethod - def fromOpenGLTexture(textureId: int, pixelSize: QtCore.QSize, sampleCount: int = ...) -> 'QQuickRenderTarget': ... - @typing.overload - @staticmethod - def fromOpenGLTexture(textureId: int, format: int, pixelSize: QtCore.QSize, sampleCount: int = ...) -> 'QQuickRenderTarget': ... - def isNull(self) -> bool: ... - - -class QQuickTextDocument(QtCore.QObject): - - class Status(enum.Enum): - Null = ... # type: QQuickTextDocument.Status - Loading = ... # type: QQuickTextDocument.Status - Loaded = ... # type: QQuickTextDocument.Status - Saving = ... # type: QQuickTextDocument.Status - Saved = ... # type: QQuickTextDocument.Status - ReadError = ... # type: QQuickTextDocument.Status - WriteError = ... # type: QQuickTextDocument.Status - NonLocalFileError = ... # type: QQuickTextDocument.Status - - def __init__(self, parent: typing.Optional[QQuickItem]) -> None: ... - - errorStringChanged: typing.ClassVar[QtCore.pyqtSignal] - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - modifiedChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - textDocumentChanged: typing.ClassVar[QtCore.pyqtSignal] - def errorString(self) -> str: ... - def status(self) -> 'QQuickTextDocument.Status': ... - def saveAs(self, url: QtCore.QUrl) -> None: ... - def save(self) -> None: ... - def setTextDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... - def setModified(self, modified: bool) -> None: ... - def isModified(self) -> bool: ... - def setSource(self, url: QtCore.QUrl) -> None: ... - def source(self) -> QtCore.QUrl: ... - def textDocument(self) -> typing.Optional[QtGui.QTextDocument]: ... - - -class QQuickWindow(QtGui.QWindow): - - class TextRenderType(enum.Enum): - QtTextRendering = ... # type: QQuickWindow.TextRenderType - NativeTextRendering = ... # type: QQuickWindow.TextRenderType - CurveTextRendering = ... # type: QQuickWindow.TextRenderType - - class RenderStage(enum.Enum): - BeforeSynchronizingStage = ... # type: QQuickWindow.RenderStage - AfterSynchronizingStage = ... # type: QQuickWindow.RenderStage - BeforeRenderingStage = ... # type: QQuickWindow.RenderStage - AfterRenderingStage = ... # type: QQuickWindow.RenderStage - AfterSwapStage = ... # type: QQuickWindow.RenderStage - NoStage = ... # type: QQuickWindow.RenderStage - - class SceneGraphError(enum.Enum): - ContextNotAvailable = ... # type: QQuickWindow.SceneGraphError - - class CreateTextureOption(enum.Flag): - TextureHasAlphaChannel = ... # type: QQuickWindow.CreateTextureOption - TextureHasMipmaps = ... # type: QQuickWindow.CreateTextureOption - TextureOwnsGLTexture = ... # type: QQuickWindow.CreateTextureOption - TextureCanUseAtlas = ... # type: QQuickWindow.CreateTextureOption - TextureIsOpaque = ... # type: QQuickWindow.CreateTextureOption - - def __init__(self, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - - def graphicsConfiguration(self) -> QQuickGraphicsConfiguration: ... - def setGraphicsConfiguration(self, config: QQuickGraphicsConfiguration) -> None: ... - def graphicsDevice(self) -> QQuickGraphicsDevice: ... - def setGraphicsDevice(self, device: QQuickGraphicsDevice) -> None: ... - @staticmethod - def graphicsApi() -> 'QSGRendererInterface.GraphicsApi': ... - @staticmethod - def setGraphicsApi(api: 'QSGRendererInterface.GraphicsApi') -> None: ... - def isPersistentGraphics(self) -> bool: ... - def setPersistentGraphics(self, persistent: bool) -> None: ... - afterFrameEnd: typing.ClassVar[QtCore.pyqtSignal] - beforeFrameBegin: typing.ClassVar[QtCore.pyqtSignal] - afterRenderPassRecording: typing.ClassVar[QtCore.pyqtSignal] - beforeRenderPassRecording: typing.ClassVar[QtCore.pyqtSignal] - def endExternalCommands(self) -> None: ... - def beginExternalCommands(self) -> None: ... - @staticmethod - def setTextRenderType(renderType: 'QQuickWindow.TextRenderType') -> None: ... - @staticmethod - def textRenderType() -> 'QQuickWindow.TextRenderType': ... - @staticmethod - def sceneGraphBackend() -> str: ... - def createImageNode(self) -> typing.Optional['QSGImageNode']: ... - def createRectangleNode(self) -> typing.Optional['QSGRectangleNode']: ... - @staticmethod - def setSceneGraphBackend(backend: typing.Optional[str]) -> None: ... - def rendererInterface(self) -> typing.Optional['QSGRendererInterface']: ... - def isSceneGraphInitialized(self) -> bool: ... - def effectiveDevicePixelRatio(self) -> float: ... - def scheduleRenderJob(self, job: typing.Optional[QtCore.QRunnable], schedule: 'QQuickWindow.RenderStage') -> None: ... - sceneGraphError: typing.ClassVar[QtCore.pyqtSignal] - sceneGraphAboutToStop: typing.ClassVar[QtCore.pyqtSignal] - afterAnimating: typing.ClassVar[QtCore.pyqtSignal] - afterSynchronizing: typing.ClassVar[QtCore.pyqtSignal] - activeFocusItemChanged: typing.ClassVar[QtCore.pyqtSignal] - closing: typing.ClassVar[QtCore.pyqtSignal] - @staticmethod - def setDefaultAlphaBuffer(useAlpha: bool) -> None: ... - @staticmethod - def hasDefaultAlphaBuffer() -> bool: ... - def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def tabletEvent(self, a0: typing.Optional[QtGui.QTabletEvent]) -> None: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def exposeEvent(self, a0: typing.Optional[QtGui.QExposeEvent]) -> None: ... - def releaseResources(self) -> None: ... - def update(self) -> None: ... - colorChanged: typing.ClassVar[QtCore.pyqtSignal] - afterRendering: typing.ClassVar[QtCore.pyqtSignal] - beforeRendering: typing.ClassVar[QtCore.pyqtSignal] - beforeSynchronizing: typing.ClassVar[QtCore.pyqtSignal] - sceneGraphInvalidated: typing.ClassVar[QtCore.pyqtSignal] - sceneGraphInitialized: typing.ClassVar[QtCore.pyqtSignal] - frameSwapped: typing.ClassVar[QtCore.pyqtSignal] - def isPersistentSceneGraph(self) -> bool: ... - def setPersistentSceneGraph(self, persistent: bool) -> None: ... - def color(self) -> QtGui.QColor: ... - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def createTextureFromImage(self, image: QtGui.QImage) -> typing.Optional['QSGTexture']: ... - @typing.overload - def createTextureFromImage(self, image: QtGui.QImage, options: 'QQuickWindow.CreateTextureOption') -> typing.Optional['QSGTexture']: ... - def createTextNode(self) -> typing.Optional['QSGTextNode']: ... - def incubationController(self) -> typing.Optional[QtQml.QQmlIncubationController]: ... - def renderTarget(self) -> QQuickRenderTarget: ... - def setRenderTarget(self, target: QQuickRenderTarget) -> None: ... - def grabWindow(self) -> QtGui.QImage: ... - def mouseGrabberItem(self) -> typing.Optional[QQuickItem]: ... - def focusObject(self) -> typing.Optional[QtCore.QObject]: ... - def activeFocusItem(self) -> typing.Optional[QQuickItem]: ... - def contentItem(self) -> typing.Optional[QQuickItem]: ... - - -class QQuickView(QQuickWindow): - - class Status(enum.Enum): - Null = ... # type: QQuickView.Status - Ready = ... # type: QQuickView.Status - Loading = ... # type: QQuickView.Status - Error = ... # type: QQuickView.Status - - class ResizeMode(enum.Enum): - SizeViewToRootObject = ... # type: QQuickView.ResizeMode - SizeRootObjectToView = ... # type: QQuickView.ResizeMode - - @typing.overload - def __init__(self, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional[QtQml.QQmlEngine], parent: typing.Optional[QtGui.QWindow]) -> None: ... - @typing.overload - def __init__(self, source: QtCore.QUrl, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - @typing.overload - def __init__(self, uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... - - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - def loadFromModule(self, uri: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], typeName: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]]) -> None: ... - def setInitialProperties(self, initialProperties: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... - def setSource(self, a0: QtCore.QUrl) -> None: ... - def initialSize(self) -> QtCore.QSize: ... - def errors(self) -> typing.List[QtQml.QQmlError]: ... - def status(self) -> 'QQuickView.Status': ... - def setResizeMode(self, a0: 'QQuickView.ResizeMode') -> None: ... - def resizeMode(self) -> 'QQuickView.ResizeMode': ... - def rootObject(self) -> typing.Optional[QQuickItem]: ... - def rootContext(self) -> typing.Optional[QtQml.QQmlContext]: ... - def engine(self) -> typing.Optional[QtQml.QQmlEngine]: ... - def source(self) -> QtCore.QUrl: ... - - -class QQuickCloseEvent(PyQt6.sip.simplewrapper): ... - - -class QSGMaterial(PyQt6.sip.wrapper): - - class Flag(enum.Flag): - Blending = ... # type: QSGMaterial.Flag - RequiresDeterminant = ... # type: QSGMaterial.Flag - RequiresFullMatrixExceptTranslate = ... # type: QSGMaterial.Flag - RequiresFullMatrix = ... # type: QSGMaterial.Flag - NoBatching = ... # type: QSGMaterial.Flag - CustomCompileStep = ... # type: QSGMaterial.Flag - - def __init__(self) -> None: ... - - def setFlag(self, flags: 'QSGMaterial.Flag', enabled: bool = ...) -> None: ... - def flags(self) -> 'QSGMaterial.Flag': ... - def compare(self, other: typing.Optional['QSGMaterial']) -> int: ... - def createShader(self, renderMode: 'QSGRendererInterface.RenderMode') -> typing.Optional['QSGMaterialShader']: ... - def type(self) -> typing.Optional['QSGMaterialType']: ... - - -class QSGFlatColorMaterial(QSGMaterial): - - def __init__(self) -> None: ... - - def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... - def color(self) -> QtGui.QColor: ... - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def createShader(self, renderMode: 'QSGRendererInterface.RenderMode') -> typing.Optional['QSGMaterialShader']: ... - def type(self) -> typing.Optional['QSGMaterialType']: ... - - -class QSGGeometry(PyQt6.sip.wrapper): - - class Type(enum.Enum): - ByteType = ... # type: QSGGeometry.Type - UnsignedByteType = ... # type: QSGGeometry.Type - ShortType = ... # type: QSGGeometry.Type - UnsignedShortType = ... # type: QSGGeometry.Type - IntType = ... # type: QSGGeometry.Type - UnsignedIntType = ... # type: QSGGeometry.Type - FloatType = ... # type: QSGGeometry.Type - Bytes2Type = ... # type: QSGGeometry.Type - Bytes3Type = ... # type: QSGGeometry.Type - Bytes4Type = ... # type: QSGGeometry.Type - DoubleType = ... # type: QSGGeometry.Type - - class DrawingMode(enum.IntEnum): - DrawPoints = ... # type: QSGGeometry.DrawingMode - DrawLines = ... # type: QSGGeometry.DrawingMode - DrawLineLoop = ... # type: QSGGeometry.DrawingMode - DrawLineStrip = ... # type: QSGGeometry.DrawingMode - DrawTriangles = ... # type: QSGGeometry.DrawingMode - DrawTriangleStrip = ... # type: QSGGeometry.DrawingMode - DrawTriangleFan = ... # type: QSGGeometry.DrawingMode - - class AttributeType(enum.Enum): - UnknownAttribute = ... # type: QSGGeometry.AttributeType - PositionAttribute = ... # type: QSGGeometry.AttributeType - ColorAttribute = ... # type: QSGGeometry.AttributeType - TexCoordAttribute = ... # type: QSGGeometry.AttributeType - TexCoord1Attribute = ... # type: QSGGeometry.AttributeType - TexCoord2Attribute = ... # type: QSGGeometry.AttributeType - - class DataPattern(enum.Enum): - AlwaysUploadPattern = ... # type: QSGGeometry.DataPattern - StreamPattern = ... # type: QSGGeometry.DataPattern - DynamicPattern = ... # type: QSGGeometry.DataPattern - StaticPattern = ... # type: QSGGeometry.DataPattern - - class Attribute(PyQt6.sip.simplewrapper): - - attributeType = ... # type: 'QSGGeometry.AttributeType' - isVertexCoordinate = ... # type: int - position = ... # type: int - tupleSize = ... # type: int - type = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGGeometry.Attribute') -> None: ... - - @staticmethod - def createWithAttributeType(pos: int, tupleSize: int, primitiveType: int, attributeType: 'QSGGeometry.AttributeType') -> 'QSGGeometry.Attribute': ... - @staticmethod - def create(pos: int, tupleSize: int, primitiveType: int, isPosition: bool = ...) -> 'QSGGeometry.Attribute': ... - - class AttributeSet(PyQt6.sip.simplewrapper): - - attributes = ... # type: PyQt6.sip.array - count = ... # type: int - stride = ... # type: int - - def __init__(self, attributes: typing.Iterable['QSGGeometry.Attribute'], stride: int = ...) -> None: ... - - class Point2D(PyQt6.sip.simplewrapper): - - x = ... # type: float - y = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGGeometry.Point2D') -> None: ... - - def set(self, nx: float, ny: float) -> None: ... - - class TexturedPoint2D(PyQt6.sip.simplewrapper): - - tx = ... # type: float - ty = ... # type: float - x = ... # type: float - y = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGGeometry.TexturedPoint2D') -> None: ... - - def set(self, nx: float, ny: float, ntx: float, nty: float) -> None: ... - - class ColoredPoint2D(PyQt6.sip.simplewrapper): - - a = ... # type: int - b = ... # type: int - g = ... # type: int - r = ... # type: int - x = ... # type: float - y = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGGeometry.ColoredPoint2D') -> None: ... - - def set(self, nx: float, ny: float, nr: int, ng: int, nb: int, na: int) -> None: ... - - def __init__(self, attribs: 'QSGGeometry.AttributeSet', vertexCount: int, indexCount: int = ..., indexType: int = ...) -> None: ... - - @staticmethod - def updateColoredRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF) -> None: ... - def sizeOfIndex(self) -> int: ... - def vertexDataAsColoredPoint2D(self) -> PyQt6.sip.array: ... - def vertexDataAsTexturedPoint2D(self) -> PyQt6.sip.array: ... - def vertexDataAsPoint2D(self) -> PyQt6.sip.array: ... - def indexDataAsUShort(self) -> PyQt6.sip.array: ... - def indexDataAsUInt(self) -> PyQt6.sip.array: ... - def setLineWidth(self, w: float) -> None: ... - def lineWidth(self) -> float: ... - def markVertexDataDirty(self) -> None: ... - def markIndexDataDirty(self) -> None: ... - def vertexDataPattern(self) -> 'QSGGeometry.DataPattern': ... - def setVertexDataPattern(self, p: 'QSGGeometry.DataPattern') -> None: ... - def indexDataPattern(self) -> 'QSGGeometry.DataPattern': ... - def setIndexDataPattern(self, p: 'QSGGeometry.DataPattern') -> None: ... - @staticmethod - def updateTexturedRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF, sourceRect: QtCore.QRectF) -> None: ... - @staticmethod - def updateRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF) -> None: ... - def sizeOfVertex(self) -> int: ... - def attributes(self) -> PyQt6.sip.array: ... - def attributeCount(self) -> int: ... - def indexData(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def indexCount(self) -> int: ... - def indexType(self) -> int: ... - def vertexData(self) -> typing.Optional[PyQt6.sip.voidptr]: ... - def vertexCount(self) -> int: ... - def allocate(self, vertexCount: int, indexCount: int = ...) -> None: ... - def drawingMode(self) -> int: ... - def setDrawingMode(self, mode: int) -> None: ... - @staticmethod - def defaultAttributes_ColoredPoint2D() -> 'QSGGeometry.AttributeSet': ... - @staticmethod - def defaultAttributes_TexturedPoint2D() -> 'QSGGeometry.AttributeSet': ... - @staticmethod - def defaultAttributes_Point2D() -> 'QSGGeometry.AttributeSet': ... - - -class QSGNode(PyQt6.sip.wrapper): - - class DirtyStateBit(enum.Flag): - DirtyMatrix = ... # type: QSGNode.DirtyStateBit - DirtyNodeAdded = ... # type: QSGNode.DirtyStateBit - DirtyNodeRemoved = ... # type: QSGNode.DirtyStateBit - DirtyGeometry = ... # type: QSGNode.DirtyStateBit - DirtyMaterial = ... # type: QSGNode.DirtyStateBit - DirtyOpacity = ... # type: QSGNode.DirtyStateBit - - class Flag(enum.Flag): - OwnedByParent = ... # type: QSGNode.Flag - UsePreprocess = ... # type: QSGNode.Flag - OwnsGeometry = ... # type: QSGNode.Flag - OwnsMaterial = ... # type: QSGNode.Flag - OwnsOpaqueMaterial = ... # type: QSGNode.Flag - - class NodeType(enum.Enum): - BasicNodeType = ... # type: QSGNode.NodeType - GeometryNodeType = ... # type: QSGNode.NodeType - TransformNodeType = ... # type: QSGNode.NodeType - ClipNodeType = ... # type: QSGNode.NodeType - OpacityNodeType = ... # type: QSGNode.NodeType - - def __init__(self) -> None: ... - - def preprocess(self) -> None: ... - def setFlags(self, a0: 'QSGNode.Flag', enabled: bool = ...) -> None: ... - def setFlag(self, a0: 'QSGNode.Flag', enabled: bool = ...) -> None: ... - def flags(self) -> 'QSGNode.Flag': ... - def isSubtreeBlocked(self) -> bool: ... - def markDirty(self, bits: 'QSGNode.DirtyStateBit') -> None: ... - def type(self) -> 'QSGNode.NodeType': ... - def previousSibling(self) -> typing.Optional['QSGNode']: ... - def nextSibling(self) -> typing.Optional['QSGNode']: ... - def lastChild(self) -> typing.Optional['QSGNode']: ... - def firstChild(self) -> typing.Optional['QSGNode']: ... - def childAtIndex(self, i: int) -> typing.Optional['QSGNode']: ... - def __len__(self) -> int: ... - def childCount(self) -> int: ... - def insertChildNodeAfter(self, node: typing.Optional['QSGNode'], after: typing.Optional['QSGNode']) -> None: ... - def insertChildNodeBefore(self, node: typing.Optional['QSGNode'], before: typing.Optional['QSGNode']) -> None: ... - def appendChildNode(self, node: typing.Optional['QSGNode']) -> None: ... - def prependChildNode(self, node: typing.Optional['QSGNode']) -> None: ... - def removeAllChildNodes(self) -> None: ... - def removeChildNode(self, node: typing.Optional['QSGNode']) -> None: ... - def parent(self) -> typing.Optional['QSGNode']: ... - - -class QSGBasicGeometryNode(QSGNode): - - def geometry(self) -> typing.Optional[QSGGeometry]: ... - def setGeometry(self, geometry: typing.Optional[QSGGeometry]) -> None: ... - - -class QSGGeometryNode(QSGBasicGeometryNode): - - def __init__(self) -> None: ... - - def opaqueMaterial(self) -> typing.Optional[QSGMaterial]: ... - def setOpaqueMaterial(self, material: typing.Optional[QSGMaterial]) -> None: ... - def material(self) -> typing.Optional[QSGMaterial]: ... - def setMaterial(self, material: typing.Optional[QSGMaterial]) -> None: ... - - -class QSGImageNode(QSGGeometryNode): - - class TextureCoordinatesTransformFlag(enum.Flag): - NoTransform = ... # type: QSGImageNode.TextureCoordinatesTransformFlag - MirrorHorizontally = ... # type: QSGImageNode.TextureCoordinatesTransformFlag - MirrorVertically = ... # type: QSGImageNode.TextureCoordinatesTransformFlag - - def anisotropyLevel(self) -> 'QSGTexture.AnisotropyLevel': ... - def setAnisotropyLevel(self, level: 'QSGTexture.AnisotropyLevel') -> None: ... - @staticmethod - def rebuildGeometry(g: typing.Optional[QSGGeometry], texture: typing.Optional['QSGTexture'], rect: QtCore.QRectF, sourceRect: QtCore.QRectF, texCoordMode: 'QSGImageNode.TextureCoordinatesTransformFlag') -> None: ... - def ownsTexture(self) -> bool: ... - def setOwnsTexture(self, owns: bool) -> None: ... - def textureCoordinatesTransform(self) -> 'QSGImageNode.TextureCoordinatesTransformFlag': ... - def setTextureCoordinatesTransform(self, mode: 'QSGImageNode.TextureCoordinatesTransformFlag') -> None: ... - def mipmapFiltering(self) -> 'QSGTexture.Filtering': ... - def setMipmapFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... - def filtering(self) -> 'QSGTexture.Filtering': ... - def setFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... - def texture(self) -> typing.Optional['QSGTexture']: ... - def setTexture(self, texture: typing.Optional['QSGTexture']) -> None: ... - def sourceRect(self) -> QtCore.QRectF: ... - @typing.overload - def setSourceRect(self, r: QtCore.QRectF) -> None: ... - @typing.overload - def setSourceRect(self, x: float, y: float, w: float, h: float) -> None: ... - def rect(self) -> QtCore.QRectF: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, x: float, y: float, w: float, h: float) -> None: ... - - -class QSGMaterialShader(PyQt6.sip.simplewrapper): - - class Stage(enum.Enum): - VertexStage = ... # type: QSGMaterialShader.Stage - FragmentStage = ... # type: QSGMaterialShader.Stage - - class Flag(enum.Flag): - UpdatesGraphicsPipelineState = ... # type: QSGMaterialShader.Flag - - class RenderState(PyQt6.sip.simplewrapper): - - class DirtyState(enum.Flag): - DirtyMatrix = ... # type: QSGMaterialShader.RenderState.DirtyState - DirtyOpacity = ... # type: QSGMaterialShader.RenderState.DirtyState - DirtyCachedMaterialData = ... # type: QSGMaterialShader.RenderState.DirtyState - DirtyAll = ... # type: QSGMaterialShader.RenderState.DirtyState - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGMaterialShader.RenderState') -> None: ... - - def uniformData(self) -> typing.Optional[QtCore.QByteArray]: ... - def devicePixelRatio(self) -> float: ... - def determinant(self) -> float: ... - def deviceRect(self) -> QtCore.QRect: ... - def viewportRect(self) -> QtCore.QRect: ... - def projectionMatrix(self) -> QtGui.QMatrix4x4: ... - def modelViewMatrix(self) -> QtGui.QMatrix4x4: ... - def combinedMatrix(self) -> QtGui.QMatrix4x4: ... - def opacity(self) -> float: ... - def isOpacityDirty(self) -> bool: ... - def isMatrixDirty(self) -> bool: ... - def dirtyStates(self) -> 'QSGMaterialShader.RenderState.DirtyState': ... - - class GraphicsPipelineState(PyQt6.sip.simplewrapper): - - class PolygonMode(enum.Enum): - Fill = ... # type: QSGMaterialShader.GraphicsPipelineState.PolygonMode - Line = ... # type: QSGMaterialShader.GraphicsPipelineState.PolygonMode - - class CullMode(enum.Enum): - CullNone = ... # type: QSGMaterialShader.GraphicsPipelineState.CullMode - CullFront = ... # type: QSGMaterialShader.GraphicsPipelineState.CullMode - CullBack = ... # type: QSGMaterialShader.GraphicsPipelineState.CullMode - - class ColorMaskComponent(enum.Flag): - R = ... # type: QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent - G = ... # type: QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent - B = ... # type: QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent - A = ... # type: QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent - - class BlendFactor(enum.Enum): - Zero = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - One = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - SrcColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusSrcColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - DstColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusDstColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - SrcAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusSrcAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - DstAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusDstAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - ConstantColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusConstantColor = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - ConstantAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusConstantAlpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - SrcAlphaSaturate = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - Src1Color = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusSrc1Color = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - Src1Alpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - OneMinusSrc1Alpha = ... # type: QSGMaterialShader.GraphicsPipelineState.BlendFactor - - blendConstant = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] - blendEnable = ... # type: bool - colorWrite = ... # type: 'QSGMaterialShader.GraphicsPipelineState.ColorMaskComponent' - cullMode = ... # type: 'QSGMaterialShader.GraphicsPipelineState.CullMode' - dstAlpha = ... # type: 'QSGMaterialShader.GraphicsPipelineState.BlendFactor' - dstColor = ... # type: 'QSGMaterialShader.GraphicsPipelineState.BlendFactor' - polygonMode = ... # type: 'QSGMaterialShader.GraphicsPipelineState.PolygonMode' - separateBlendFactors = ... # type: bool - srcAlpha = ... # type: 'QSGMaterialShader.GraphicsPipelineState.BlendFactor' - srcColor = ... # type: 'QSGMaterialShader.GraphicsPipelineState.BlendFactor' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGMaterialShader.GraphicsPipelineState') -> None: ... - - def __init__(self) -> None: ... - - def setShaderFileName(self, stage: 'QSGMaterialShader.Stage', filename: typing.Optional[str]) -> None: ... - def combinedImageSamplerCount(self, binding: int) -> int: ... - def setFlags(self, flags: 'QSGMaterialShader.Flag') -> None: ... - def setFlag(self, flags: 'QSGMaterialShader.Flag', on: bool = ...) -> None: ... - def flags(self) -> 'QSGMaterialShader.Flag': ... - def updateGraphicsPipelineState(self, state: 'QSGMaterialShader.RenderState', ps: typing.Optional['QSGMaterialShader.GraphicsPipelineState'], newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> bool: ... - def updateSampledImage(self, state: 'QSGMaterialShader.RenderState', binding: int, newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> typing.Optional['QSGTexture']: ... - def updateUniformData(self, state: 'QSGMaterialShader.RenderState', newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> bool: ... - - -class QSGMaterialType(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSGMaterialType') -> None: ... - - -class QSGClipNode(QSGBasicGeometryNode): - - def __init__(self) -> None: ... - - def clipRect(self) -> QtCore.QRectF: ... - def setClipRect(self, a0: QtCore.QRectF) -> None: ... - def isRectangular(self) -> bool: ... - def setIsRectangular(self, rectHint: bool) -> None: ... - - -class QSGTransformNode(QSGNode): - - def __init__(self) -> None: ... - - def matrix(self) -> QtGui.QMatrix4x4: ... - def setMatrix(self, matrix: QtGui.QMatrix4x4) -> None: ... - - -class QSGOpacityNode(QSGNode): - - def __init__(self) -> None: ... - - def opacity(self) -> float: ... - def setOpacity(self, opacity: float) -> None: ... - - -class QSGRectangleNode(QSGGeometryNode): - - def color(self) -> QtGui.QColor: ... - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def rect(self) -> QtCore.QRectF: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, x: float, y: float, w: float, h: float) -> None: ... - - -class QSGRendererInterface(PyQt6.sip.simplewrapper): - - class RenderMode(enum.Enum): - RenderMode2D = ... # type: QSGRendererInterface.RenderMode - RenderMode2DNoDepthBuffer = ... # type: QSGRendererInterface.RenderMode - RenderMode3D = ... # type: QSGRendererInterface.RenderMode - - class ShaderSourceType(enum.Flag): - ShaderSourceString = ... # type: QSGRendererInterface.ShaderSourceType - ShaderSourceFile = ... # type: QSGRendererInterface.ShaderSourceType - ShaderByteCode = ... # type: QSGRendererInterface.ShaderSourceType - - class ShaderCompilationType(enum.Flag): - RuntimeCompilation = ... # type: QSGRendererInterface.ShaderCompilationType - OfflineCompilation = ... # type: QSGRendererInterface.ShaderCompilationType - - class ShaderType(enum.Enum): - UnknownShadingLanguage = ... # type: QSGRendererInterface.ShaderType - GLSL = ... # type: QSGRendererInterface.ShaderType - HLSL = ... # type: QSGRendererInterface.ShaderType - RhiShader = ... # type: QSGRendererInterface.ShaderType - - class Resource(enum.Enum): - DeviceResource = ... # type: QSGRendererInterface.Resource - CommandQueueResource = ... # type: QSGRendererInterface.Resource - CommandListResource = ... # type: QSGRendererInterface.Resource - PainterResource = ... # type: QSGRendererInterface.Resource - RhiResource = ... # type: QSGRendererInterface.Resource - PhysicalDeviceResource = ... # type: QSGRendererInterface.Resource - OpenGLContextResource = ... # type: QSGRendererInterface.Resource - DeviceContextResource = ... # type: QSGRendererInterface.Resource - CommandEncoderResource = ... # type: QSGRendererInterface.Resource - VulkanInstanceResource = ... # type: QSGRendererInterface.Resource - RenderPassResource = ... # type: QSGRendererInterface.Resource - RhiSwapchainResource = ... # type: QSGRendererInterface.Resource - RhiRedirectCommandBuffer = ... # type: QSGRendererInterface.Resource - RhiRedirectRenderTarget = ... # type: QSGRendererInterface.Resource - RedirectPaintDevice = ... # type: QSGRendererInterface.Resource - GraphicsQueueFamilyIndexResource = ... # type: QSGRendererInterface.Resource - GraphicsQueueIndexResource = ... # type: QSGRendererInterface.Resource - - class GraphicsApi(enum.Enum): - Unknown = ... # type: QSGRendererInterface.GraphicsApi - Software = ... # type: QSGRendererInterface.GraphicsApi - OpenGL = ... # type: QSGRendererInterface.GraphicsApi - OpenVG = ... # type: QSGRendererInterface.GraphicsApi - OpenGLRhi = ... # type: QSGRendererInterface.GraphicsApi - Direct3D11Rhi = ... # type: QSGRendererInterface.GraphicsApi - VulkanRhi = ... # type: QSGRendererInterface.GraphicsApi - MetalRhi = ... # type: QSGRendererInterface.GraphicsApi - NullRhi = ... # type: QSGRendererInterface.GraphicsApi - Direct3D11 = ... # type: QSGRendererInterface.GraphicsApi - Vulkan = ... # type: QSGRendererInterface.GraphicsApi - Metal = ... # type: QSGRendererInterface.GraphicsApi - Direct3D12 = ... # type: QSGRendererInterface.GraphicsApi - Null = ... # type: QSGRendererInterface.GraphicsApi - - @staticmethod - def isApiRhiBased(api: 'QSGRendererInterface.GraphicsApi') -> bool: ... - def shaderSourceType(self) -> 'QSGRendererInterface.ShaderSourceType': ... - def shaderCompilationType(self) -> 'QSGRendererInterface.ShaderCompilationType': ... - def shaderType(self) -> 'QSGRendererInterface.ShaderType': ... - @typing.overload - def getResource(self, window: typing.Optional[QQuickWindow], resource: 'QSGRendererInterface.Resource') -> typing.Optional[PyQt6.sip.voidptr]: ... - @typing.overload - def getResource(self, window: typing.Optional[QQuickWindow], resource: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - def graphicsApi(self) -> 'QSGRendererInterface.GraphicsApi': ... - - -class QSGRenderNode(QSGNode): - - class RenderingFlag(enum.Flag): - BoundedRectRendering = ... # type: QSGRenderNode.RenderingFlag - DepthAwareRendering = ... # type: QSGRenderNode.RenderingFlag - OpaqueRendering = ... # type: QSGRenderNode.RenderingFlag - - class StateFlag(enum.Flag): - DepthState = ... # type: QSGRenderNode.StateFlag - StencilState = ... # type: QSGRenderNode.StateFlag - ScissorState = ... # type: QSGRenderNode.StateFlag - ColorState = ... # type: QSGRenderNode.StateFlag - BlendState = ... # type: QSGRenderNode.StateFlag - CullState = ... # type: QSGRenderNode.StateFlag - ViewportState = ... # type: QSGRenderNode.StateFlag - RenderTargetState = ... # type: QSGRenderNode.StateFlag - - class RenderState(PyQt6.sip.simplewrapper): - - def get(self, state: typing.Optional[str]) -> typing.Optional[PyQt6.sip.voidptr]: ... - def clipRegion(self) -> typing.Optional[QtGui.QRegion]: ... - def stencilEnabled(self) -> bool: ... - def stencilValue(self) -> int: ... - def scissorEnabled(self) -> bool: ... - def scissorRect(self) -> QtCore.QRect: ... - def projectionMatrix(self) -> typing.Optional[QtGui.QMatrix4x4]: ... - - def __init__(self) -> None: ... - - def projectionMatrix(self) -> typing.Optional[QtGui.QMatrix4x4]: ... - def prepare(self) -> None: ... - def inheritedOpacity(self) -> float: ... - def clipList(self) -> typing.Optional[QSGClipNode]: ... - def matrix(self) -> typing.Optional[QtGui.QMatrix4x4]: ... - def rect(self) -> QtCore.QRectF: ... - def flags(self) -> 'QSGRenderNode.RenderingFlag': ... - def releaseResources(self) -> None: ... - def render(self, state: typing.Optional['QSGRenderNode.RenderState']) -> None: ... - def changedStates(self) -> 'QSGRenderNode.StateFlag': ... - - -class QSGSimpleRectNode(QSGGeometryNode): - - @typing.overload - def __init__(self, rect: QtCore.QRectF, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @typing.overload - def __init__(self) -> None: ... - - def color(self) -> QtGui.QColor: ... - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def rect(self) -> QtCore.QRectF: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, x: float, y: float, w: float, h: float) -> None: ... - - -class QSGSimpleTextureNode(QSGGeometryNode): - - class TextureCoordinatesTransformFlag(enum.Flag): - NoTransform = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag - MirrorHorizontally = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag - MirrorVertically = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag - - def __init__(self) -> None: ... - - def sourceRect(self) -> QtCore.QRectF: ... - @typing.overload - def setSourceRect(self, r: QtCore.QRectF) -> None: ... - @typing.overload - def setSourceRect(self, x: float, y: float, w: float, h: float) -> None: ... - def ownsTexture(self) -> bool: ... - def setOwnsTexture(self, owns: bool) -> None: ... - def textureCoordinatesTransform(self) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag': ... - def setTextureCoordinatesTransform(self, mode: 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag') -> None: ... - def filtering(self) -> 'QSGTexture.Filtering': ... - def setFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... - def texture(self) -> typing.Optional['QSGTexture']: ... - def setTexture(self, texture: typing.Optional['QSGTexture']) -> None: ... - def rect(self) -> QtCore.QRectF: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, x: float, y: float, w: float, h: float) -> None: ... - - -class QSGTextNode(QSGTransformNode): - - class TextStyle(enum.Enum): - Normal = ... # type: QSGTextNode.TextStyle - Outline = ... # type: QSGTextNode.TextStyle - Raised = ... # type: QSGTextNode.TextStyle - Sunken = ... # type: QSGTextNode.TextStyle - - class RenderType(enum.Enum): - QtRendering = ... # type: QSGTextNode.RenderType - NativeRendering = ... # type: QSGTextNode.RenderType - CurveRendering = ... # type: QSGTextNode.RenderType - - def viewport(self) -> QtCore.QRectF: ... - def setViewport(self, viewport: QtCore.QRectF) -> None: ... - def clear(self) -> None: ... - def filtering(self) -> 'QSGTexture.Filtering': ... - def setFiltering(self, a0: 'QSGTexture.Filtering') -> None: ... - def renderTypeQuality(self) -> int: ... - def setRenderTypeQuality(self, renderTypeQuality: int) -> None: ... - def renderType(self) -> 'QSGTextNode.RenderType': ... - def setRenderType(self, renderType: 'QSGTextNode.RenderType') -> None: ... - def selectionTextColor(self) -> QtGui.QColor: ... - def setSelectionTextColor(self, selectionTextColor: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def selectionColor(self) -> QtGui.QColor: ... - def setSelectionColor(self, selectionColor: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def linkColor(self) -> QtGui.QColor: ... - def setLinkColor(self, linkColor: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def styleColor(self) -> QtGui.QColor: ... - def setStyleColor(self, styleColor: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def textStyle(self) -> 'QSGTextNode.TextStyle': ... - def setTextStyle(self, textStyle: 'QSGTextNode.TextStyle') -> None: ... - def color(self) -> QtGui.QColor: ... - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def addTextLayout(self, position: QtCore.QPointF, layout: typing.Optional[QtGui.QTextLayout], selectionStart: int = ..., selectionCount: int = ..., lineStart: int = ..., lineCount: int = ...) -> None: ... - def addTextDocument(self, position: QtCore.QPointF, document: typing.Optional[QtGui.QTextDocument], selectionStart: int = ..., selectionCount: int = ...) -> None: ... - - -class QSGTexture(QtCore.QObject): - - class AnisotropyLevel(enum.Enum): - AnisotropyNone = ... # type: QSGTexture.AnisotropyLevel - Anisotropy2x = ... # type: QSGTexture.AnisotropyLevel - Anisotropy4x = ... # type: QSGTexture.AnisotropyLevel - Anisotropy8x = ... # type: QSGTexture.AnisotropyLevel - Anisotropy16x = ... # type: QSGTexture.AnisotropyLevel - - class Filtering(enum.Enum): - None_ = ... # type: QSGTexture.Filtering - Nearest = ... # type: QSGTexture.Filtering - Linear = ... # type: QSGTexture.Filtering - - class WrapMode(enum.Enum): - Repeat = ... # type: QSGTexture.WrapMode - ClampToEdge = ... # type: QSGTexture.WrapMode - MirroredRepeat = ... # type: QSGTexture.WrapMode - - def __init__(self) -> None: ... - - def comparisonKey(self) -> int: ... - def anisotropyLevel(self) -> 'QSGTexture.AnisotropyLevel': ... - def setAnisotropyLevel(self, level: 'QSGTexture.AnisotropyLevel') -> None: ... - def convertToNormalizedSourceRect(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - def verticalWrapMode(self) -> 'QSGTexture.WrapMode': ... - def setVerticalWrapMode(self, vwrap: 'QSGTexture.WrapMode') -> None: ... - def horizontalWrapMode(self) -> 'QSGTexture.WrapMode': ... - def setHorizontalWrapMode(self, hwrap: 'QSGTexture.WrapMode') -> None: ... - def filtering(self) -> 'QSGTexture.Filtering': ... - def setFiltering(self, filter: 'QSGTexture.Filtering') -> None: ... - def mipmapFiltering(self) -> 'QSGTexture.Filtering': ... - def setMipmapFiltering(self, filter: 'QSGTexture.Filtering') -> None: ... - def isAtlasTexture(self) -> bool: ... - def normalizedTextureSubRect(self) -> QtCore.QRectF: ... - def hasMipmaps(self) -> bool: ... - def hasAlphaChannel(self) -> bool: ... - def textureSize(self) -> QtCore.QSize: ... - - -class QSGDynamicTexture(QSGTexture): - - def __init__(self) -> None: ... - - def updateTexture(self) -> bool: ... - - -class QNativeInterface(PyQt6.sip.simplewrapper): - - class QSGOpenGLTexture(PyQt6.sip.simplewrapper): - - @staticmethod - def fromNative(textureId: int, window: typing.Optional[QQuickWindow], size: QtCore.QSize, options: QQuickWindow.CreateTextureOption = ...) -> typing.Optional[QSGTexture]: ... - def nativeTexture(self) -> int: ... - - -class QSGOpaqueTextureMaterial(QSGMaterial): - - def __init__(self) -> None: ... - - def anisotropyLevel(self) -> QSGTexture.AnisotropyLevel: ... - def setAnisotropyLevel(self, level: QSGTexture.AnisotropyLevel) -> None: ... - def verticalWrapMode(self) -> QSGTexture.WrapMode: ... - def setVerticalWrapMode(self, mode: QSGTexture.WrapMode) -> None: ... - def horizontalWrapMode(self) -> QSGTexture.WrapMode: ... - def setHorizontalWrapMode(self, mode: QSGTexture.WrapMode) -> None: ... - def filtering(self) -> QSGTexture.Filtering: ... - def setFiltering(self, filtering: QSGTexture.Filtering) -> None: ... - def mipmapFiltering(self) -> QSGTexture.Filtering: ... - def setMipmapFiltering(self, filtering: QSGTexture.Filtering) -> None: ... - def texture(self) -> typing.Optional[QSGTexture]: ... - def setTexture(self, texture: typing.Optional[QSGTexture]) -> None: ... - def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... - def createShader(self, renderMode: QSGRendererInterface.RenderMode) -> typing.Optional[QSGMaterialShader]: ... - def type(self) -> typing.Optional[QSGMaterialType]: ... - - -class QSGTextureMaterial(QSGOpaqueTextureMaterial): - - def __init__(self) -> None: ... - - def createShader(self, renderMode: QSGRendererInterface.RenderMode) -> typing.Optional[QSGMaterialShader]: ... - def type(self) -> typing.Optional[QSGMaterialType]: ... - - -class QSGTextureProvider(QtCore.QObject): - - def __init__(self) -> None: ... - - textureChanged: typing.ClassVar[QtCore.pyqtSignal] - def texture(self) -> typing.Optional[QSGTexture]: ... - - -class QSGVertexColorMaterial(QSGMaterial): - - def __init__(self) -> None: ... - - def createShader(self, renderMode: QSGRendererInterface.RenderMode) -> typing.Optional[QSGMaterialShader]: ... - def type(self) -> typing.Optional[QSGMaterialType]: ... - def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.abi3.so deleted file mode 100644 index c91e8fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.pyi deleted file mode 100644 index 62e575a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtQuick3D.pyi +++ /dev/null @@ -1,220 +0,0 @@ -# The PEP 484 type hints stub file for the QtQuick3D module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork -from PyQt6 import QtQml - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QQuick3D(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQuick3D') -> None: ... - - @staticmethod - def idealSurfaceFormat(samples: int = ...) -> QtGui.QSurfaceFormat: ... - - -class QQuick3DObject(QtCore.QObject, QtQml.QQmlParserStatus): - - def __init__(self, parent: typing.Optional['QQuick3DObject'] = ...) -> None: ... - - def componentComplete(self) -> None: ... - def classBegin(self) -> None: ... - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def setParentItem(self, parentItem: typing.Optional['QQuick3DObject']) -> None: ... - def parentItem(self) -> typing.Optional['QQuick3DObject']: ... - def setState(self, state: typing.Optional[str]) -> None: ... - def state(self) -> str: ... - - -class QQuick3DGeometry(QQuick3DObject): - - class PrimitiveType(enum.Enum): - Points = ... # type: QQuick3DGeometry.PrimitiveType - LineStrip = ... # type: QQuick3DGeometry.PrimitiveType - Lines = ... # type: QQuick3DGeometry.PrimitiveType - TriangleStrip = ... # type: QQuick3DGeometry.PrimitiveType - TriangleFan = ... # type: QQuick3DGeometry.PrimitiveType - Triangles = ... # type: QQuick3DGeometry.PrimitiveType - - class Attribute(PyQt6.sip.simplewrapper): - - class ComponentType(enum.Enum): - U16Type = ... # type: QQuick3DGeometry.Attribute.ComponentType - U32Type = ... # type: QQuick3DGeometry.Attribute.ComponentType - F32Type = ... # type: QQuick3DGeometry.Attribute.ComponentType - I32Type = ... # type: QQuick3DGeometry.Attribute.ComponentType - - class Semantic(enum.Enum): - IndexSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - PositionSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - NormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TexCoordSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TangentSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - BinormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - JointSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - WeightSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - ColorSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TargetPositionSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TargetNormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TargetTangentSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TargetBinormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TexCoord1Semantic = ... # type: QQuick3DGeometry.Attribute.Semantic - TexCoord0Semantic = ... # type: QQuick3DGeometry.Attribute.Semantic - - componentType = ... # type: 'QQuick3DGeometry.Attribute.ComponentType' - offset = ... # type: int - semantic = ... # type: 'QQuick3DGeometry.Attribute.Semantic' - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQuick3DGeometry.Attribute') -> None: ... - - class TargetAttribute(PyQt6.sip.simplewrapper): - - attr = ... # type: 'QQuick3DGeometry.Attribute' - stride = ... # type: int - targetId = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QQuick3DGeometry.TargetAttribute') -> None: ... - - def __init__(self, parent: typing.Optional[QQuick3DObject] = ...) -> None: ... - - @typing.overload - def addTargetAttribute(self, att: 'QQuick3DGeometry.TargetAttribute') -> None: ... - @typing.overload - def addTargetAttribute(self, targetId: int, semantic: 'QQuick3DGeometry.Attribute.Semantic', offset: int, stride: int = ...) -> None: ... - def targetAttributeCount(self) -> int: ... - def targetAttribute(self, index: int) -> 'QQuick3DGeometry.TargetAttribute': ... - @typing.overload - def setTargetData(self, offset: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def setTargetData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def targetData(self) -> QtCore.QByteArray: ... - def addSubset(self, offset: int, count: int, boundsMin: QtGui.QVector3D, boundsMax: QtGui.QVector3D, name: typing.Optional[str] = ...) -> None: ... - def subsetName(self, subset: int) -> str: ... - def subsetOffset(self, subset: int) -> int: ... - def subsetBoundsMax(self, subset: int) -> QtGui.QVector3D: ... - def subsetBoundsMin(self, subset: int) -> QtGui.QVector3D: ... - @typing.overload - def subsetCount(self, subset: int) -> int: ... - @typing.overload - def subsetCount(self) -> int: ... - def indexData(self) -> QtCore.QByteArray: ... - def vertexData(self) -> QtCore.QByteArray: ... - def clear(self) -> None: ... - @typing.overload - def addAttribute(self, semantic: 'QQuick3DGeometry.Attribute.Semantic', offset: int, componentType: 'QQuick3DGeometry.Attribute.ComponentType') -> None: ... - @typing.overload - def addAttribute(self, att: 'QQuick3DGeometry.Attribute') -> None: ... - def setPrimitiveType(self, type: 'QQuick3DGeometry.PrimitiveType') -> None: ... - def setBounds(self, min: QtGui.QVector3D, max: QtGui.QVector3D) -> None: ... - def setStride(self, stride: int) -> None: ... - @typing.overload - def setIndexData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def setIndexData(self, offset: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def setVertexData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - @typing.overload - def setVertexData(self, offset: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def stride(self) -> int: ... - def boundsMax(self) -> QtGui.QVector3D: ... - def boundsMin(self) -> QtGui.QVector3D: ... - def primitiveType(self) -> 'QQuick3DGeometry.PrimitiveType': ... - def attribute(self, index: int) -> 'QQuick3DGeometry.Attribute': ... - def attributeCount(self) -> int: ... - - -class QQuick3DTextureData(QQuick3DObject): - - class Format(enum.Enum): - None_ = ... # type: QQuick3DTextureData.Format - RGBA8 = ... # type: QQuick3DTextureData.Format - RGBA16F = ... # type: QQuick3DTextureData.Format - RGBA32F = ... # type: QQuick3DTextureData.Format - RGBE8 = ... # type: QQuick3DTextureData.Format - R8 = ... # type: QQuick3DTextureData.Format - R16 = ... # type: QQuick3DTextureData.Format - R16F = ... # type: QQuick3DTextureData.Format - R32F = ... # type: QQuick3DTextureData.Format - BC1 = ... # type: QQuick3DTextureData.Format - BC2 = ... # type: QQuick3DTextureData.Format - BC3 = ... # type: QQuick3DTextureData.Format - BC4 = ... # type: QQuick3DTextureData.Format - BC5 = ... # type: QQuick3DTextureData.Format - BC6H = ... # type: QQuick3DTextureData.Format - BC7 = ... # type: QQuick3DTextureData.Format - DXT1_RGBA = ... # type: QQuick3DTextureData.Format - DXT1_RGB = ... # type: QQuick3DTextureData.Format - DXT3_RGBA = ... # type: QQuick3DTextureData.Format - DXT5_RGBA = ... # type: QQuick3DTextureData.Format - ETC2_RGB8 = ... # type: QQuick3DTextureData.Format - ETC2_RGB8A1 = ... # type: QQuick3DTextureData.Format - ETC2_RGBA8 = ... # type: QQuick3DTextureData.Format - ASTC_4x4 = ... # type: QQuick3DTextureData.Format - ASTC_5x4 = ... # type: QQuick3DTextureData.Format - ASTC_5x5 = ... # type: QQuick3DTextureData.Format - ASTC_6x5 = ... # type: QQuick3DTextureData.Format - ASTC_6x6 = ... # type: QQuick3DTextureData.Format - ASTC_8x5 = ... # type: QQuick3DTextureData.Format - ASTC_8x6 = ... # type: QQuick3DTextureData.Format - ASTC_8x8 = ... # type: QQuick3DTextureData.Format - ASTC_10x5 = ... # type: QQuick3DTextureData.Format - ASTC_10x6 = ... # type: QQuick3DTextureData.Format - ASTC_10x8 = ... # type: QQuick3DTextureData.Format - ASTC_10x10 = ... # type: QQuick3DTextureData.Format - ASTC_12x10 = ... # type: QQuick3DTextureData.Format - ASTC_12x12 = ... # type: QQuick3DTextureData.Format - - def __init__(self, parent: typing.Optional[QQuick3DObject] = ...) -> None: ... - - def setDepth(self, depth: int) -> None: ... - def depth(self) -> int: ... - def setHasTransparency(self, hasTransparency: bool) -> None: ... - def hasTransparency(self) -> bool: ... - def setFormat(self, format: 'QQuick3DTextureData.Format') -> None: ... - def format(self) -> 'QQuick3DTextureData.Format': ... - def setSize(self, size: QtCore.QSize) -> None: ... - def size(self) -> QtCore.QSize: ... - def setTextureData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def textureData(self) -> QtCore.QByteArray: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.abi3.so deleted file mode 100644 index 59b4630..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.pyi deleted file mode 100644 index a4dceb2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtQuickWidgets.pyi +++ /dev/null @@ -1,99 +0,0 @@ -# The PEP 484 type hints stub file for the QtQuickWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork -from PyQt6 import QtQml -from PyQt6 import QtQuick -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QQuickWidget(QtWidgets.QWidget): - - class Status(enum.Enum): - Null = ... # type: QQuickWidget.Status - Ready = ... # type: QQuickWidget.Status - Loading = ... # type: QQuickWidget.Status - Error = ... # type: QQuickWidget.Status - - class ResizeMode(enum.Enum): - SizeViewToRootObject = ... # type: QQuickWidget.ResizeMode - SizeRootObjectToView = ... # type: QQuickWidget.ResizeMode - - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional[QtQml.QQmlEngine], parent: typing.Optional[QtWidgets.QWidget]) -> None: ... - @typing.overload - def __init__(self, source: QtCore.QUrl, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def focusNextPrevChild(self, next: bool) -> bool: ... - def quickWindow(self) -> typing.Optional[QtQuick.QQuickWindow]: ... - def setClearColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def grabFramebuffer(self) -> QtGui.QImage: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - sceneGraphError: typing.ClassVar[QtCore.pyqtSignal] - statusChanged: typing.ClassVar[QtCore.pyqtSignal] - def setSource(self, a0: QtCore.QUrl) -> None: ... - def format(self) -> QtGui.QSurfaceFormat: ... - def setFormat(self, format: QtGui.QSurfaceFormat) -> None: ... - def initialSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def errors(self) -> typing.List[QtQml.QQmlError]: ... - def status(self) -> 'QQuickWidget.Status': ... - def setResizeMode(self, a0: 'QQuickWidget.ResizeMode') -> None: ... - def resizeMode(self) -> 'QQuickWidget.ResizeMode': ... - def rootObject(self) -> typing.Optional[QtQuick.QQuickItem]: ... - def rootContext(self) -> typing.Optional[QtQml.QQmlContext]: ... - def engine(self) -> typing.Optional[QtQml.QQmlEngine]: ... - def source(self) -> QtCore.QUrl: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.abi3.so deleted file mode 100644 index 8516a63..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.pyi deleted file mode 100644 index 452fb12..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtRemoteObjects.pyi +++ /dev/null @@ -1,202 +0,0 @@ -# The PEP 484 type hints stub file for the QtRemoteObjects module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtNetwork - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QRemoteObjectSourceLocationInfo(PyQt6.sip.simplewrapper): - - hostUrl = ... # type: QtCore.QUrl - typeName = ... # type: typing.Optional[str] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, typeName_: typing.Optional[str], hostUrl_: QtCore.QUrl) -> None: ... - @typing.overload - def __init__(self, a0: 'QRemoteObjectSourceLocationInfo') -> None: ... - - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QtRemoteObjects(PyQt6.sip.simplewrapper): - - class InitialAction(enum.Enum): - FetchRootSize = ... # type: QtRemoteObjects.InitialAction - PrefetchData = ... # type: QtRemoteObjects.InitialAction - - -class QAbstractItemModelReplica(QtCore.QAbstractItemModel): - - initialized: typing.ClassVar[QtCore.pyqtSignal] - def setRootCacheSize(self, rootCacheSize: int) -> None: ... - def rootCacheSize(self) -> int: ... - def hasData(self, index: QtCore.QModelIndex, role: int) -> bool: ... - def isInitialized(self) -> bool: ... - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def availableRoles(self) -> typing.List[int]: ... - def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlag: ... - def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int) -> typing.Any: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... - def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... - def parent(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - def selectionModel(self) -> typing.Optional[QtCore.QItemSelectionModel]: ... - - -class QRemoteObjectReplica(QtCore.QObject): - - class State(enum.Enum): - Uninitialized = ... # type: QRemoteObjectReplica.State - Default = ... # type: QRemoteObjectReplica.State - Valid = ... # type: QRemoteObjectReplica.State - Suspect = ... # type: QRemoteObjectReplica.State - SignatureMismatch = ... # type: QRemoteObjectReplica.State - - notified: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - initialized: typing.ClassVar[QtCore.pyqtSignal] - def setNode(self, node: typing.Optional['QRemoteObjectNode']) -> None: ... - def node(self) -> typing.Optional['QRemoteObjectNode']: ... - def state(self) -> 'QRemoteObjectReplica.State': ... - def isInitialized(self) -> bool: ... - def waitForSource(self, timeout: int = ...) -> bool: ... - def isReplicaValid(self) -> bool: ... - - -class QRemoteObjectDynamicReplica(QRemoteObjectReplica): ... - - -class QRemoteObjectAbstractPersistedStore(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def restoreProperties(self, repName: typing.Optional[str], repSig: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[typing.Any]: ... - def saveProperties(self, repName: typing.Optional[str], repSig: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], values: typing.Iterable[typing.Any]) -> None: ... - - -class QRemoteObjectNode(QtCore.QObject): - - class ErrorCode(enum.Enum): - NoError = ... # type: QRemoteObjectNode.ErrorCode - RegistryNotAcquired = ... # type: QRemoteObjectNode.ErrorCode - RegistryAlreadyHosted = ... # type: QRemoteObjectNode.ErrorCode - NodeIsNoServer = ... # type: QRemoteObjectNode.ErrorCode - ServerAlreadyCreated = ... # type: QRemoteObjectNode.ErrorCode - UnintendedRegistryHosting = ... # type: QRemoteObjectNode.ErrorCode - OperationNotValidOnClientNode = ... # type: QRemoteObjectNode.ErrorCode - SourceNotRegistered = ... # type: QRemoteObjectNode.ErrorCode - MissingObjectName = ... # type: QRemoteObjectNode.ErrorCode - HostUrlInvalid = ... # type: QRemoteObjectNode.ErrorCode - ProtocolMismatch = ... # type: QRemoteObjectNode.ErrorCode - ListenFailed = ... # type: QRemoteObjectNode.ErrorCode - SocketAccessError = ... # type: QRemoteObjectNode.ErrorCode - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, registryAddress: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - heartbeatIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] - error: typing.ClassVar[QtCore.pyqtSignal] - remoteObjectRemoved: typing.ClassVar[QtCore.pyqtSignal] - remoteObjectAdded: typing.ClassVar[QtCore.pyqtSignal] - def setHeartbeatInterval(self, interval: int) -> None: ... - def heartbeatInterval(self) -> int: ... - def lastError(self) -> 'QRemoteObjectNode.ErrorCode': ... - def setPersistedStore(self, persistedStore: typing.Optional[QRemoteObjectAbstractPersistedStore]) -> None: ... - def persistedStore(self) -> typing.Optional[QRemoteObjectAbstractPersistedStore]: ... - def registry(self) -> typing.Optional['QRemoteObjectRegistry']: ... - def waitForRegistry(self, timeout: int = ...) -> bool: ... - def setRegistryUrl(self, registryAddress: QtCore.QUrl) -> bool: ... - def registryUrl(self) -> QtCore.QUrl: ... - def acquireModel(self, name: typing.Optional[str], action: QtRemoteObjects.InitialAction = ..., rolesHint: typing.Iterable[int] = ...) -> typing.Optional[QAbstractItemModelReplica]: ... - def acquireDynamic(self, name: typing.Optional[str]) -> typing.Optional[QRemoteObjectDynamicReplica]: ... - def instances(self, typeName: str) -> typing.List[str]: ... - def setName(self, name: typing.Optional[str]) -> None: ... - def addClientSideConnection(self, ioDevice: typing.Optional[QtCore.QIODevice]) -> None: ... - def connectToNode(self, address: QtCore.QUrl) -> bool: ... - - -class QRemoteObjectHostBase(QRemoteObjectNode): - - class AllowedSchemas(enum.Enum): - BuiltInSchemasOnly = ... # type: QRemoteObjectHostBase.AllowedSchemas - AllowExternalRegistration = ... # type: QRemoteObjectHostBase.AllowedSchemas - - def reverseProxy(self) -> bool: ... - def proxy(self, registryUrl: QtCore.QUrl, hostUrl: QtCore.QUrl = ...) -> bool: ... - def addHostSideConnection(self, ioDevice: typing.Optional[QtCore.QIODevice]) -> None: ... - def disableRemoting(self, remoteObject: typing.Optional[QtCore.QObject]) -> bool: ... - @typing.overload - def enableRemoting(self, object: typing.Optional[QtCore.QObject], name: typing.Optional[str] = ...) -> bool: ... - @typing.overload - def enableRemoting(self, model: typing.Optional[QtCore.QAbstractItemModel], name: typing.Optional[str], roles: typing.Iterable[int], selectionModel: typing.Optional[QtCore.QItemSelectionModel] = ...) -> bool: ... - def setName(self, name: typing.Optional[str]) -> None: ... - - -class QRemoteObjectHost(QRemoteObjectHostBase): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, address: QtCore.QUrl, registryAddress: QtCore.QUrl = ..., allowedSchemas: QRemoteObjectHostBase.AllowedSchemas = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, address: QtCore.QUrl, parent: typing.Optional[QtCore.QObject]) -> None: ... - - @staticmethod - def setLocalServerOptions(options: QtNetwork.QLocalServer.SocketOption) -> None: ... - hostUrlChanged: typing.ClassVar[QtCore.pyqtSignal] - def setHostUrl(self, hostAddress: QtCore.QUrl, allowedSchemas: QRemoteObjectHostBase.AllowedSchemas = ...) -> bool: ... - def hostUrl(self) -> QtCore.QUrl: ... - - -class QRemoteObjectRegistryHost(QRemoteObjectHostBase): - - def __init__(self, registryAddress: QtCore.QUrl = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setRegistryUrl(self, registryUrl: QtCore.QUrl) -> bool: ... - - -class QRemoteObjectRegistry(QRemoteObjectReplica): - - remoteObjectRemoved: typing.ClassVar[QtCore.pyqtSignal] - remoteObjectAdded: typing.ClassVar[QtCore.pyqtSignal] - def sourceLocations(self) -> typing.Dict[str, QRemoteObjectSourceLocationInfo]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.abi3.so deleted file mode 100644 index 19720da..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.pyi deleted file mode 100644 index 9d18e53..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSensors.pyi +++ /dev/null @@ -1,597 +0,0 @@ -# The PEP 484 type hints stub file for the QtSensors module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QSensorReading(QtCore.QObject): - - def value(self, index: int) -> typing.Any: ... - def valueCount(self) -> int: ... - def setTimestamp(self, timestamp: int) -> None: ... - def timestamp(self) -> int: ... - - -class QAccelerometerReading(QSensorReading): - - def setZ(self, z: float) -> None: ... - def z(self) -> float: ... - def setY(self, y: float) -> None: ... - def y(self) -> float: ... - def setX(self, x: float) -> None: ... - def x(self) -> float: ... - - -class QSensorFilter(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSensorFilter') -> None: ... - - def filter(self, reading: typing.Optional[QSensorReading]) -> bool: ... - - -class QAccelerometerFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAccelerometerFilter') -> None: ... - - def filter(self, reading: typing.Optional[QAccelerometerReading]) -> bool: ... - - -class QSensor(QtCore.QObject): - - class AxesOrientationMode(enum.Enum): - FixedOrientation = ... # type: QSensor.AxesOrientationMode - AutomaticOrientation = ... # type: QSensor.AxesOrientationMode - UserOrientation = ... # type: QSensor.AxesOrientationMode - - class Feature(enum.Enum): - Buffering = ... # type: QSensor.Feature - AlwaysOn = ... # type: QSensor.Feature - GeoValues = ... # type: QSensor.Feature - FieldOfView = ... # type: QSensor.Feature - AccelerationMode = ... # type: QSensor.Feature - SkipDuplicates = ... # type: QSensor.Feature - AxesOrientation = ... # type: QSensor.Feature - PressureSensorTemperature = ... # type: QSensor.Feature - - def __init__(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - identifierChanged: typing.ClassVar[QtCore.pyqtSignal] - bufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - efficientBufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - maxBufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - userOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] - currentOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] - axesOrientationModeChanged: typing.ClassVar[QtCore.pyqtSignal] - skipDuplicatesChanged: typing.ClassVar[QtCore.pyqtSignal] - dataRateChanged: typing.ClassVar[QtCore.pyqtSignal] - alwaysOnChanged: typing.ClassVar[QtCore.pyqtSignal] - availableSensorsChanged: typing.ClassVar[QtCore.pyqtSignal] - sensorError: typing.ClassVar[QtCore.pyqtSignal] - readingChanged: typing.ClassVar[QtCore.pyqtSignal] - activeChanged: typing.ClassVar[QtCore.pyqtSignal] - busyChanged: typing.ClassVar[QtCore.pyqtSignal] - def stop(self) -> None: ... - def start(self) -> bool: ... - def setBufferSize(self, bufferSize: int) -> None: ... - def bufferSize(self) -> int: ... - def setEfficientBufferSize(self, efficientBufferSize: int) -> None: ... - def efficientBufferSize(self) -> int: ... - def setMaxBufferSize(self, maxBufferSize: int) -> None: ... - def maxBufferSize(self) -> int: ... - def setUserOrientation(self, userOrientation: int) -> None: ... - def userOrientation(self) -> int: ... - def setCurrentOrientation(self, currentOrientation: int) -> None: ... - def currentOrientation(self) -> int: ... - def setAxesOrientationMode(self, axesOrientationMode: 'QSensor.AxesOrientationMode') -> None: ... - def axesOrientationMode(self) -> 'QSensor.AxesOrientationMode': ... - def isFeatureSupported(self, feature: 'QSensor.Feature') -> bool: ... - @staticmethod - def defaultSensorForType(type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> QtCore.QByteArray: ... - @staticmethod - def sensorsForType(type: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> typing.List[QtCore.QByteArray]: ... - @staticmethod - def sensorTypes() -> typing.List[QtCore.QByteArray]: ... - def reading(self) -> typing.Optional[QSensorReading]: ... - def filters(self) -> typing.List[QSensorFilter]: ... - def removeFilter(self, filter: typing.Optional[QSensorFilter]) -> None: ... - def addFilter(self, filter: typing.Optional[QSensorFilter]) -> None: ... - def error(self) -> int: ... - def description(self) -> str: ... - def setOutputRange(self, index: int) -> None: ... - def outputRange(self) -> int: ... - def outputRanges(self) -> typing.List['qoutputrange']: ... - def setDataRate(self, rate: int) -> None: ... - def dataRate(self) -> int: ... - def availableDataRates(self) -> typing.List[typing.Tuple[int, int]]: ... - def setSkipDuplicates(self, skipDuplicates: bool) -> None: ... - def skipDuplicates(self) -> bool: ... - def setAlwaysOn(self, alwaysOn: bool) -> None: ... - def isAlwaysOn(self) -> bool: ... - def isActive(self) -> bool: ... - def setActive(self, active: bool) -> None: ... - def isBusy(self) -> bool: ... - def isConnectedToBackend(self) -> bool: ... - def connectToBackend(self) -> bool: ... - def type(self) -> QtCore.QByteArray: ... - def setIdentifier(self, identifier: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def identifier(self) -> QtCore.QByteArray: ... - - -class QAccelerometer(QSensor): - - class AccelerationMode(enum.Enum): - Combined = ... # type: QAccelerometer.AccelerationMode - Gravity = ... # type: QAccelerometer.AccelerationMode - User = ... # type: QAccelerometer.AccelerationMode - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - accelerationModeChanged: typing.ClassVar[QtCore.pyqtSignal] - def reading(self) -> typing.Optional[QAccelerometerReading]: ... - def setAccelerationMode(self, accelerationMode: 'QAccelerometer.AccelerationMode') -> None: ... - def accelerationMode(self) -> 'QAccelerometer.AccelerationMode': ... - - -class QAmbientLightReading(QSensorReading): - - class LightLevel(enum.Enum): - Undefined = ... # type: QAmbientLightReading.LightLevel - Dark = ... # type: QAmbientLightReading.LightLevel - Twilight = ... # type: QAmbientLightReading.LightLevel - Light = ... # type: QAmbientLightReading.LightLevel - Bright = ... # type: QAmbientLightReading.LightLevel - Sunny = ... # type: QAmbientLightReading.LightLevel - - def setLightLevel(self, lightLevel: 'QAmbientLightReading.LightLevel') -> None: ... - def lightLevel(self) -> 'QAmbientLightReading.LightLevel': ... - - -class QAmbientLightFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAmbientLightFilter') -> None: ... - - def filter(self, reading: typing.Optional[QAmbientLightReading]) -> bool: ... - - -class QAmbientLightSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QAmbientLightReading]: ... - - -class QAmbientTemperatureReading(QSensorReading): - - def setTemperature(self, temperature: float) -> None: ... - def temperature(self) -> float: ... - - -class QAmbientTemperatureFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QAmbientTemperatureFilter') -> None: ... - - def filter(self, reading: typing.Optional[QAmbientTemperatureReading]) -> bool: ... - - -class QAmbientTemperatureSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QAmbientTemperatureReading]: ... - - -class QCompassReading(QSensorReading): - - def setCalibrationLevel(self, calibrationLevel: float) -> None: ... - def calibrationLevel(self) -> float: ... - def setAzimuth(self, azimuth: float) -> None: ... - def azimuth(self) -> float: ... - - -class QCompassFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QCompassFilter') -> None: ... - - def filter(self, reading: typing.Optional[QCompassReading]) -> bool: ... - - -class QCompass(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QCompassReading]: ... - - -class QGyroscopeReading(QSensorReading): - - def setZ(self, z: float) -> None: ... - def z(self) -> float: ... - def setY(self, y: float) -> None: ... - def y(self) -> float: ... - def setX(self, x: float) -> None: ... - def x(self) -> float: ... - - -class QGyroscopeFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QGyroscopeFilter') -> None: ... - - def filter(self, reading: typing.Optional[QGyroscopeReading]) -> bool: ... - - -class QGyroscope(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QGyroscopeReading]: ... - - -class QHumidityReading(QSensorReading): - - def setAbsoluteHumidity(self, value: float) -> None: ... - def absoluteHumidity(self) -> float: ... - def setRelativeHumidity(self, percent: float) -> None: ... - def relativeHumidity(self) -> float: ... - - -class QHumidityFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QHumidityFilter') -> None: ... - - def filter(self, reading: typing.Optional[QHumidityReading]) -> bool: ... - - -class QHumiditySensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QHumidityReading]: ... - - -class QIRProximityReading(QSensorReading): - - def setReflectance(self, reflectance: float) -> None: ... - def reflectance(self) -> float: ... - - -class QIRProximityFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QIRProximityFilter') -> None: ... - - def filter(self, reading: typing.Optional[QIRProximityReading]) -> bool: ... - - -class QIRProximitySensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QIRProximityReading]: ... - - -class QLidReading(QSensorReading): - - frontLidChanged: typing.ClassVar[QtCore.pyqtSignal] - backLidChanged: typing.ClassVar[QtCore.pyqtSignal] - def setFrontLidClosed(self, closed: bool) -> None: ... - def frontLidClosed(self) -> bool: ... - def setBackLidClosed(self, closed: bool) -> None: ... - def backLidClosed(self) -> bool: ... - - -class QLidFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QLidFilter') -> None: ... - - def filter(self, reading: typing.Optional[QLidReading]) -> bool: ... - - -class QLidSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QLidReading]: ... - - -class QLightReading(QSensorReading): - - def setLux(self, lux: float) -> None: ... - def lux(self) -> float: ... - - -class QLightFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QLightFilter') -> None: ... - - def filter(self, reading: typing.Optional[QLightReading]) -> bool: ... - - -class QLightSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - fieldOfViewChanged: typing.ClassVar[QtCore.pyqtSignal] - def setFieldOfView(self, fieldOfView: float) -> None: ... - def fieldOfView(self) -> float: ... - def reading(self) -> typing.Optional[QLightReading]: ... - - -class QMagnetometerReading(QSensorReading): - - def setCalibrationLevel(self, calibrationLevel: float) -> None: ... - def calibrationLevel(self) -> float: ... - def setZ(self, z: float) -> None: ... - def z(self) -> float: ... - def setY(self, y: float) -> None: ... - def y(self) -> float: ... - def setX(self, x: float) -> None: ... - def x(self) -> float: ... - - -class QMagnetometerFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QMagnetometerFilter') -> None: ... - - def filter(self, reading: typing.Optional[QMagnetometerReading]) -> bool: ... - - -class QMagnetometer(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - returnGeoValuesChanged: typing.ClassVar[QtCore.pyqtSignal] - def setReturnGeoValues(self, returnGeoValues: bool) -> None: ... - def returnGeoValues(self) -> bool: ... - def reading(self) -> typing.Optional[QMagnetometerReading]: ... - - -class QOrientationReading(QSensorReading): - - class Orientation(enum.Enum): - Undefined = ... # type: QOrientationReading.Orientation - TopUp = ... # type: QOrientationReading.Orientation - TopDown = ... # type: QOrientationReading.Orientation - LeftUp = ... # type: QOrientationReading.Orientation - RightUp = ... # type: QOrientationReading.Orientation - FaceUp = ... # type: QOrientationReading.Orientation - FaceDown = ... # type: QOrientationReading.Orientation - - def setOrientation(self, orientation: 'QOrientationReading.Orientation') -> None: ... - def orientation(self) -> 'QOrientationReading.Orientation': ... - - -class QOrientationFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QOrientationFilter') -> None: ... - - def filter(self, reading: typing.Optional[QOrientationReading]) -> bool: ... - - -class QOrientationSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QOrientationReading]: ... - - -class QPressureReading(QSensorReading): - - def setTemperature(self, temperature: float) -> None: ... - def temperature(self) -> float: ... - def setPressure(self, pressure: float) -> None: ... - def pressure(self) -> float: ... - - -class QPressureFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QPressureFilter') -> None: ... - - def filter(self, reading: typing.Optional[QPressureReading]) -> bool: ... - - -class QPressureSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QPressureReading]: ... - - -class QProximityReading(QSensorReading): - - def setClose(self, close: bool) -> None: ... - def close(self) -> bool: ... - - -class QProximityFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QProximityFilter') -> None: ... - - def filter(self, reading: typing.Optional[QProximityReading]) -> bool: ... - - -class QProximitySensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def reading(self) -> typing.Optional[QProximityReading]: ... - - -class QRotationReading(QSensorReading): - - def setFromEuler(self, x: float, y: float, z: float) -> None: ... - def z(self) -> float: ... - def y(self) -> float: ... - def x(self) -> float: ... - - -class QRotationFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QRotationFilter') -> None: ... - - def filter(self, reading: typing.Optional[QRotationReading]) -> bool: ... - - -class QRotationSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - hasZChanged: typing.ClassVar[QtCore.pyqtSignal] - def setHasZ(self, hasZ: bool) -> None: ... - def hasZ(self) -> bool: ... - def reading(self) -> typing.Optional[QRotationReading]: ... - - -class qoutputrange(PyQt6.sip.simplewrapper): - - accuracy = ... # type: float - maximum = ... # type: float - minimum = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'qoutputrange') -> None: ... - - -class QTapReading(QSensorReading): - - class TapDirection(enum.Enum): - Undefined = ... # type: QTapReading.TapDirection - X = ... # type: QTapReading.TapDirection - Y = ... # type: QTapReading.TapDirection - Z = ... # type: QTapReading.TapDirection - X_Pos = ... # type: QTapReading.TapDirection - Y_Pos = ... # type: QTapReading.TapDirection - Z_Pos = ... # type: QTapReading.TapDirection - X_Neg = ... # type: QTapReading.TapDirection - Y_Neg = ... # type: QTapReading.TapDirection - Z_Neg = ... # type: QTapReading.TapDirection - X_Both = ... # type: QTapReading.TapDirection - Y_Both = ... # type: QTapReading.TapDirection - Z_Both = ... # type: QTapReading.TapDirection - - def setDoubleTap(self, doubleTap: bool) -> None: ... - def isDoubleTap(self) -> bool: ... - def setTapDirection(self, tapDirection: 'QTapReading.TapDirection') -> None: ... - def tapDirection(self) -> 'QTapReading.TapDirection': ... - - -class QTapFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTapFilter') -> None: ... - - def filter(self, reading: typing.Optional[QTapReading]) -> bool: ... - - -class QTapSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - returnDoubleTapEventsChanged: typing.ClassVar[QtCore.pyqtSignal] - def setReturnDoubleTapEvents(self, returnDoubleTapEvents: bool) -> None: ... - def returnDoubleTapEvents(self) -> bool: ... - def reading(self) -> typing.Optional[QTapReading]: ... - - -class QTiltReading(QSensorReading): - - def setXRotation(self, x: float) -> None: ... - def xRotation(self) -> float: ... - def setYRotation(self, y: float) -> None: ... - def yRotation(self) -> float: ... - - -class QTiltFilter(QSensorFilter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTiltFilter') -> None: ... - - def filter(self, reading: typing.Optional[QTiltReading]) -> bool: ... - - -class QTiltSensor(QSensor): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def calibrate(self) -> None: ... - def reading(self) -> typing.Optional[QTiltReading]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.abi3.so deleted file mode 100644 index 71f7f5b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.pyi deleted file mode 100644 index ec4e67c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSerialPort.pyi +++ /dev/null @@ -1,183 +0,0 @@ -# The PEP 484 type hints stub file for the QtSerialPort module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QSerialPort(QtCore.QIODevice): - - class SerialPortError(enum.Enum): - NoError = ... # type: QSerialPort.SerialPortError - DeviceNotFoundError = ... # type: QSerialPort.SerialPortError - PermissionError = ... # type: QSerialPort.SerialPortError - OpenError = ... # type: QSerialPort.SerialPortError - WriteError = ... # type: QSerialPort.SerialPortError - ReadError = ... # type: QSerialPort.SerialPortError - ResourceError = ... # type: QSerialPort.SerialPortError - UnsupportedOperationError = ... # type: QSerialPort.SerialPortError - TimeoutError = ... # type: QSerialPort.SerialPortError - NotOpenError = ... # type: QSerialPort.SerialPortError - UnknownError = ... # type: QSerialPort.SerialPortError - - class PinoutSignal(enum.Flag): - NoSignal = ... # type: QSerialPort.PinoutSignal - DataTerminalReadySignal = ... # type: QSerialPort.PinoutSignal - DataCarrierDetectSignal = ... # type: QSerialPort.PinoutSignal - DataSetReadySignal = ... # type: QSerialPort.PinoutSignal - RingIndicatorSignal = ... # type: QSerialPort.PinoutSignal - RequestToSendSignal = ... # type: QSerialPort.PinoutSignal - ClearToSendSignal = ... # type: QSerialPort.PinoutSignal - SecondaryTransmittedDataSignal = ... # type: QSerialPort.PinoutSignal - SecondaryReceivedDataSignal = ... # type: QSerialPort.PinoutSignal - - class FlowControl(enum.Enum): - NoFlowControl = ... # type: QSerialPort.FlowControl - HardwareControl = ... # type: QSerialPort.FlowControl - SoftwareControl = ... # type: QSerialPort.FlowControl - - class StopBits(enum.Enum): - OneStop = ... # type: QSerialPort.StopBits - OneAndHalfStop = ... # type: QSerialPort.StopBits - TwoStop = ... # type: QSerialPort.StopBits - - class Parity(enum.Enum): - NoParity = ... # type: QSerialPort.Parity - EvenParity = ... # type: QSerialPort.Parity - OddParity = ... # type: QSerialPort.Parity - SpaceParity = ... # type: QSerialPort.Parity - MarkParity = ... # type: QSerialPort.Parity - - class DataBits(enum.Enum): - Data5 = ... # type: QSerialPort.DataBits - Data6 = ... # type: QSerialPort.DataBits - Data7 = ... # type: QSerialPort.DataBits - Data8 = ... # type: QSerialPort.DataBits - - class BaudRate(enum.Enum): - Baud1200 = ... # type: QSerialPort.BaudRate - Baud2400 = ... # type: QSerialPort.BaudRate - Baud4800 = ... # type: QSerialPort.BaudRate - Baud9600 = ... # type: QSerialPort.BaudRate - Baud19200 = ... # type: QSerialPort.BaudRate - Baud38400 = ... # type: QSerialPort.BaudRate - Baud57600 = ... # type: QSerialPort.BaudRate - Baud115200 = ... # type: QSerialPort.BaudRate - - class Direction(enum.Flag): - Input = ... # type: QSerialPort.Direction - Output = ... # type: QSerialPort.Direction - AllDirections = ... # type: QSerialPort.Direction - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, info: 'QSerialPortInfo', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - breakEnabledChanged: typing.ClassVar[QtCore.pyqtSignal] - def isBreakEnabled(self) -> bool: ... - def handle(self) -> int: ... - def writeData(self, data: typing.Optional[PyQt6.sip.array[bytes]]) -> int: ... - def readLineData(self, maxlen: int) -> bytes: ... - def readData(self, maxlen: int) -> bytes: ... - requestToSendChanged: typing.ClassVar[QtCore.pyqtSignal] - dataTerminalReadyChanged: typing.ClassVar[QtCore.pyqtSignal] - flowControlChanged: typing.ClassVar[QtCore.pyqtSignal] - stopBitsChanged: typing.ClassVar[QtCore.pyqtSignal] - parityChanged: typing.ClassVar[QtCore.pyqtSignal] - dataBitsChanged: typing.ClassVar[QtCore.pyqtSignal] - baudRateChanged: typing.ClassVar[QtCore.pyqtSignal] - def setBreakEnabled(self, enabled: bool = ...) -> bool: ... - def waitForBytesWritten(self, msecs: int = ...) -> bool: ... - def waitForReadyRead(self, msecs: int = ...) -> bool: ... - def canReadLine(self) -> bool: ... - def bytesToWrite(self) -> int: ... - def bytesAvailable(self) -> int: ... - def isSequential(self) -> bool: ... - def setReadBufferSize(self, size: int) -> None: ... - def readBufferSize(self) -> int: ... - def clearError(self) -> None: ... - def error(self) -> 'QSerialPort.SerialPortError': ... - def clear(self, dir: 'QSerialPort.Direction' = ...) -> bool: ... - def flush(self) -> bool: ... - def pinoutSignals(self) -> 'QSerialPort.PinoutSignal': ... - def isRequestToSend(self) -> bool: ... - def setRequestToSend(self, set: bool) -> bool: ... - def isDataTerminalReady(self) -> bool: ... - def setDataTerminalReady(self, set: bool) -> bool: ... - def flowControl(self) -> 'QSerialPort.FlowControl': ... - def setFlowControl(self, flow: 'QSerialPort.FlowControl') -> bool: ... - def stopBits(self) -> 'QSerialPort.StopBits': ... - def setStopBits(self, stopBits: 'QSerialPort.StopBits') -> bool: ... - def parity(self) -> 'QSerialPort.Parity': ... - def setParity(self, parity: 'QSerialPort.Parity') -> bool: ... - def dataBits(self) -> 'QSerialPort.DataBits': ... - def setDataBits(self, dataBits: 'QSerialPort.DataBits') -> bool: ... - def baudRate(self, dir: 'QSerialPort.Direction' = ...) -> int: ... - def setBaudRate(self, baudRate: int, dir: 'QSerialPort.Direction' = ...) -> bool: ... - def close(self) -> None: ... - def open(self, mode: QtCore.QIODeviceBase.OpenModeFlag) -> bool: ... - def setPort(self, info: 'QSerialPortInfo') -> None: ... - def portName(self) -> str: ... - def setPortName(self, name: typing.Optional[str]) -> None: ... - - -class QSerialPortInfo(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, port: QSerialPort) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QSerialPortInfo') -> None: ... - - def serialNumber(self) -> str: ... - def isNull(self) -> bool: ... - @staticmethod - def availablePorts() -> typing.List['QSerialPortInfo']: ... - @staticmethod - def standardBaudRates() -> typing.List[int]: ... - def hasProductIdentifier(self) -> bool: ... - def hasVendorIdentifier(self) -> bool: ... - def productIdentifier(self) -> int: ... - def vendorIdentifier(self) -> int: ... - def manufacturer(self) -> str: ... - def description(self) -> str: ... - def systemLocation(self) -> str: ... - def portName(self) -> str: ... - def swap(self, other: 'QSerialPortInfo') -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.abi3.so deleted file mode 100644 index d2498dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.pyi deleted file mode 100644 index 76f2b2d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSpatialAudio.pyi +++ /dev/null @@ -1,241 +0,0 @@ -# The PEP 484 type hints stub file for the QtSpatialAudio module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtNetwork -from PyQt6 import QtMultimedia - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QAmbientSound(QtCore.QObject): - - class Loops(enum.Enum): - Infinite = ... # type: QAmbientSound.Loops - Once = ... # type: QAmbientSound.Loops - - def __init__(self, engine: typing.Optional['QAudioEngine']) -> None: ... - - def stop(self) -> None: ... - def pause(self) -> None: ... - def play(self) -> None: ... - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - autoPlayChanged: typing.ClassVar[QtCore.pyqtSignal] - loopsChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - def engine(self) -> typing.Optional['QAudioEngine']: ... - def volume(self) -> float: ... - def setVolume(self, volume: float) -> None: ... - def setAutoPlay(self, autoPlay: bool) -> None: ... - def autoPlay(self) -> bool: ... - def setLoops(self, loops: int) -> None: ... - def loops(self) -> int: ... - def source(self) -> QtCore.QUrl: ... - def setSource(self, url: QtCore.QUrl) -> None: ... - - -class QAudioEngine(QtCore.QObject): - - class OutputMode(enum.Enum): - Surround = ... # type: QAudioEngine.OutputMode - Stereo = ... # type: QAudioEngine.OutputMode - Headphone = ... # type: QAudioEngine.OutputMode - - DistanceScaleCentimeter = ... # type: float - DistanceScaleMeter = ... # type: float - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - @typing.overload - def __init__(self, sampleRate: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def resume(self) -> None: ... - def pause(self) -> None: ... - def stop(self) -> None: ... - def start(self) -> None: ... - distanceScaleChanged: typing.ClassVar[QtCore.pyqtSignal] - pausedChanged: typing.ClassVar[QtCore.pyqtSignal] - masterVolumeChanged: typing.ClassVar[QtCore.pyqtSignal] - outputDeviceChanged: typing.ClassVar[QtCore.pyqtSignal] - outputModeChanged: typing.ClassVar[QtCore.pyqtSignal] - def distanceScale(self) -> float: ... - def setDistanceScale(self, scale: float) -> None: ... - def roomEffectsEnabled(self) -> bool: ... - def setRoomEffectsEnabled(self, enabled: bool) -> None: ... - def paused(self) -> bool: ... - def setPaused(self, paused: bool) -> None: ... - def masterVolume(self) -> float: ... - def setMasterVolume(self, volume: float) -> None: ... - def outputDevice(self) -> QtMultimedia.QAudioDevice: ... - def setOutputDevice(self, device: QtMultimedia.QAudioDevice) -> None: ... - def sampleRate(self) -> int: ... - def outputMode(self) -> 'QAudioEngine.OutputMode': ... - def setOutputMode(self, mode: 'QAudioEngine.OutputMode') -> None: ... - - -class QAudioListener(QtCore.QObject): - - def __init__(self, engine: typing.Optional[QAudioEngine]) -> None: ... - - def engine(self) -> typing.Optional[QAudioEngine]: ... - def rotation(self) -> QtGui.QQuaternion: ... - def setRotation(self, q: QtGui.QQuaternion) -> None: ... - def position(self) -> QtGui.QVector3D: ... - def setPosition(self, pos: QtGui.QVector3D) -> None: ... - - -class QAudioRoom(QtCore.QObject): - - class Wall(enum.Enum): - LeftWall = ... # type: QAudioRoom.Wall - RightWall = ... # type: QAudioRoom.Wall - Floor = ... # type: QAudioRoom.Wall - Ceiling = ... # type: QAudioRoom.Wall - FrontWall = ... # type: QAudioRoom.Wall - BackWall = ... # type: QAudioRoom.Wall - - class Material(enum.Enum): - Transparent = ... # type: QAudioRoom.Material - AcousticCeilingTiles = ... # type: QAudioRoom.Material - BrickBare = ... # type: QAudioRoom.Material - BrickPainted = ... # type: QAudioRoom.Material - ConcreteBlockCoarse = ... # type: QAudioRoom.Material - ConcreteBlockPainted = ... # type: QAudioRoom.Material - CurtainHeavy = ... # type: QAudioRoom.Material - FiberGlassInsulation = ... # type: QAudioRoom.Material - GlassThin = ... # type: QAudioRoom.Material - GlassThick = ... # type: QAudioRoom.Material - Grass = ... # type: QAudioRoom.Material - LinoleumOnConcrete = ... # type: QAudioRoom.Material - Marble = ... # type: QAudioRoom.Material - Metal = ... # type: QAudioRoom.Material - ParquetOnConcrete = ... # type: QAudioRoom.Material - PlasterRough = ... # type: QAudioRoom.Material - PlasterSmooth = ... # type: QAudioRoom.Material - PlywoodPanel = ... # type: QAudioRoom.Material - PolishedConcreteOrTile = ... # type: QAudioRoom.Material - Sheetrock = ... # type: QAudioRoom.Material - WaterOrIceSurface = ... # type: QAudioRoom.Material - WoodCeiling = ... # type: QAudioRoom.Material - WoodPanel = ... # type: QAudioRoom.Material - UniformMaterial = ... # type: QAudioRoom.Material - - def __init__(self, engine: typing.Optional[QAudioEngine]) -> None: ... - - reverbBrightnessChanged: typing.ClassVar[QtCore.pyqtSignal] - reverbTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - reverbGainChanged: typing.ClassVar[QtCore.pyqtSignal] - reflectionGainChanged: typing.ClassVar[QtCore.pyqtSignal] - wallsChanged: typing.ClassVar[QtCore.pyqtSignal] - rotationChanged: typing.ClassVar[QtCore.pyqtSignal] - dimensionsChanged: typing.ClassVar[QtCore.pyqtSignal] - positionChanged: typing.ClassVar[QtCore.pyqtSignal] - def reverbBrightness(self) -> float: ... - def setReverbBrightness(self, factor: float) -> None: ... - def reverbTime(self) -> float: ... - def setReverbTime(self, factor: float) -> None: ... - def reverbGain(self) -> float: ... - def setReverbGain(self, factor: float) -> None: ... - def reflectionGain(self) -> float: ... - def setReflectionGain(self, factor: float) -> None: ... - def wallMaterial(self, wall: 'QAudioRoom.Wall') -> 'QAudioRoom.Material': ... - def setWallMaterial(self, wall: 'QAudioRoom.Wall', material: 'QAudioRoom.Material') -> None: ... - def rotation(self) -> QtGui.QQuaternion: ... - def setRotation(self, q: QtGui.QQuaternion) -> None: ... - def dimensions(self) -> QtGui.QVector3D: ... - def setDimensions(self, dim: QtGui.QVector3D) -> None: ... - def position(self) -> QtGui.QVector3D: ... - def setPosition(self, pos: QtGui.QVector3D) -> None: ... - - -class QSpatialSound(QtCore.QObject): - - class Loops(enum.Enum): - Infinite = ... # type: QSpatialSound.Loops - Once = ... # type: QSpatialSound.Loops - - class DistanceModel(enum.Enum): - Logarithmic = ... # type: QSpatialSound.DistanceModel - Linear = ... # type: QSpatialSound.DistanceModel - ManualAttenuation = ... # type: QSpatialSound.DistanceModel - - def __init__(self, engine: typing.Optional[QAudioEngine]) -> None: ... - - def stop(self) -> None: ... - def pause(self) -> None: ... - def play(self) -> None: ... - nearFieldGainChanged: typing.ClassVar[QtCore.pyqtSignal] - directivityOrderChanged: typing.ClassVar[QtCore.pyqtSignal] - directivityChanged: typing.ClassVar[QtCore.pyqtSignal] - occlusionIntensityChanged: typing.ClassVar[QtCore.pyqtSignal] - manualAttenuationChanged: typing.ClassVar[QtCore.pyqtSignal] - distanceCutoffChanged: typing.ClassVar[QtCore.pyqtSignal] - sizeChanged: typing.ClassVar[QtCore.pyqtSignal] - distanceModelChanged: typing.ClassVar[QtCore.pyqtSignal] - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - rotationChanged: typing.ClassVar[QtCore.pyqtSignal] - positionChanged: typing.ClassVar[QtCore.pyqtSignal] - autoPlayChanged: typing.ClassVar[QtCore.pyqtSignal] - loopsChanged: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - def engine(self) -> typing.Optional[QAudioEngine]: ... - def nearFieldGain(self) -> float: ... - def setNearFieldGain(self, gain: float) -> None: ... - def directivityOrder(self) -> float: ... - def setDirectivityOrder(self, alpha: float) -> None: ... - def directivity(self) -> float: ... - def setDirectivity(self, alpha: float) -> None: ... - def occlusionIntensity(self) -> float: ... - def setOcclusionIntensity(self, occlusion: float) -> None: ... - def manualAttenuation(self) -> float: ... - def setManualAttenuation(self, attenuation: float) -> None: ... - def distanceCutoff(self) -> float: ... - def setDistanceCutoff(self, cutoff: float) -> None: ... - def size(self) -> float: ... - def setSize(self, size: float) -> None: ... - def distanceModel(self) -> 'QSpatialSound.DistanceModel': ... - def setDistanceModel(self, model: 'QSpatialSound.DistanceModel') -> None: ... - def volume(self) -> float: ... - def setVolume(self, volume: float) -> None: ... - def rotation(self) -> QtGui.QQuaternion: ... - def setRotation(self, q: QtGui.QQuaternion) -> None: ... - def position(self) -> QtGui.QVector3D: ... - def setPosition(self, pos: QtGui.QVector3D) -> None: ... - def setAutoPlay(self, autoPlay: bool) -> None: ... - def autoPlay(self) -> bool: ... - def setLoops(self, loops: int) -> None: ... - def loops(self) -> int: ... - def source(self) -> QtCore.QUrl: ... - def setSource(self, url: QtCore.QUrl) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSql.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSql.abi3.so deleted file mode 100644 index 485fde4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSql.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSql.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSql.pyi deleted file mode 100644 index 584f037..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSql.pyi +++ /dev/null @@ -1,652 +0,0 @@ -# The PEP 484 type hints stub file for the QtSql module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QSqlDriverCreatorBase(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QSqlDriverCreatorBase') -> None: ... - - def createObject(self) -> typing.Optional['QSqlDriver']: ... - - -class QSqlDatabase(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlDatabase') -> None: ... - @typing.overload - def __init__(self, type: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, driver: typing.Optional['QSqlDriver']) -> None: ... - - def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... - def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... - @staticmethod - def isDriverAvailable(name: typing.Optional[str]) -> bool: ... - @staticmethod - def registerSqlDriver(name: typing.Optional[str], creator: typing.Optional[QSqlDriverCreatorBase]) -> None: ... - @staticmethod - def connectionNames() -> typing.List[str]: ... - @staticmethod - def drivers() -> typing.List[str]: ... - @staticmethod - def contains(connectionName: typing.Optional[str] = ...) -> bool: ... - @staticmethod - def removeDatabase(connectionName: typing.Optional[str]) -> None: ... - @staticmethod - def database(connectionName: typing.Optional[str] = ..., open: bool = ...) -> 'QSqlDatabase': ... - @typing.overload - @staticmethod - def cloneDatabase(other: 'QSqlDatabase', connectionName: typing.Optional[str]) -> 'QSqlDatabase': ... - @typing.overload - @staticmethod - def cloneDatabase(other: typing.Optional[str], connectionName: typing.Optional[str]) -> 'QSqlDatabase': ... - @typing.overload - @staticmethod - def addDatabase(type: typing.Optional[str], connectionName: typing.Optional[str] = ...) -> 'QSqlDatabase': ... - @typing.overload - @staticmethod - def addDatabase(driver: typing.Optional['QSqlDriver'], connectionName: typing.Optional[str] = ...) -> 'QSqlDatabase': ... - def driver(self) -> typing.Optional['QSqlDriver']: ... - def connectionName(self) -> str: ... - def connectOptions(self) -> str: ... - def port(self) -> int: ... - def driverName(self) -> str: ... - def hostName(self) -> str: ... - def password(self) -> str: ... - def userName(self) -> str: ... - def databaseName(self) -> str: ... - def setConnectOptions(self, options: typing.Optional[str] = ...) -> None: ... - def setPort(self, p: int) -> None: ... - def setHostName(self, host: typing.Optional[str]) -> None: ... - def setPassword(self, password: typing.Optional[str]) -> None: ... - def setUserName(self, name: typing.Optional[str]) -> None: ... - def setDatabaseName(self, name: typing.Optional[str]) -> None: ... - def rollback(self) -> bool: ... - def commit(self) -> bool: ... - def transaction(self) -> bool: ... - def isValid(self) -> bool: ... - def lastError(self) -> 'QSqlError': ... - def exec(self, query: typing.Optional[str] = ...) -> 'QSqlQuery': ... - def record(self, tablename: typing.Optional[str]) -> 'QSqlRecord': ... - def primaryIndex(self, tablename: typing.Optional[str]) -> 'QSqlIndex': ... - def tables(self, type: 'QSql.TableType' = ...) -> typing.List[str]: ... - def isOpenError(self) -> bool: ... - def isOpen(self) -> bool: ... - def close(self) -> None: ... - @typing.overload - def open(self) -> bool: ... - @typing.overload - def open(self, user: typing.Optional[str], password: typing.Optional[str]) -> bool: ... - - -class QSqlDriver(QtCore.QObject): - - class DbmsType(enum.Enum): - UnknownDbms = ... # type: QSqlDriver.DbmsType - MSSqlServer = ... # type: QSqlDriver.DbmsType - MySqlServer = ... # type: QSqlDriver.DbmsType - PostgreSQL = ... # type: QSqlDriver.DbmsType - Oracle = ... # type: QSqlDriver.DbmsType - Sybase = ... # type: QSqlDriver.DbmsType - SQLite = ... # type: QSqlDriver.DbmsType - Interbase = ... # type: QSqlDriver.DbmsType - DB2 = ... # type: QSqlDriver.DbmsType - MimerSQL = ... # type: QSqlDriver.DbmsType - - class NotificationSource(enum.Enum): - UnknownSource = ... # type: QSqlDriver.NotificationSource - SelfSource = ... # type: QSqlDriver.NotificationSource - OtherSource = ... # type: QSqlDriver.NotificationSource - - class IdentifierType(enum.Enum): - FieldName = ... # type: QSqlDriver.IdentifierType - TableName = ... # type: QSqlDriver.IdentifierType - - class StatementType(enum.Enum): - WhereStatement = ... # type: QSqlDriver.StatementType - SelectStatement = ... # type: QSqlDriver.StatementType - UpdateStatement = ... # type: QSqlDriver.StatementType - InsertStatement = ... # type: QSqlDriver.StatementType - DeleteStatement = ... # type: QSqlDriver.StatementType - - class DriverFeature(enum.Enum): - Transactions = ... # type: QSqlDriver.DriverFeature - QuerySize = ... # type: QSqlDriver.DriverFeature - BLOB = ... # type: QSqlDriver.DriverFeature - Unicode = ... # type: QSqlDriver.DriverFeature - PreparedQueries = ... # type: QSqlDriver.DriverFeature - NamedPlaceholders = ... # type: QSqlDriver.DriverFeature - PositionalPlaceholders = ... # type: QSqlDriver.DriverFeature - LastInsertId = ... # type: QSqlDriver.DriverFeature - BatchOperations = ... # type: QSqlDriver.DriverFeature - SimpleLocking = ... # type: QSqlDriver.DriverFeature - LowPrecisionNumbers = ... # type: QSqlDriver.DriverFeature - EventNotifications = ... # type: QSqlDriver.DriverFeature - FinishQuery = ... # type: QSqlDriver.DriverFeature - MultipleResultSets = ... # type: QSqlDriver.DriverFeature - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def maximumIdentifierLength(self, type: 'QSqlDriver.IdentifierType') -> int: ... - def dbmsType(self) -> 'QSqlDriver.DbmsType': ... - def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... - def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... - def stripDelimiters(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> str: ... - def isIdentifierEscaped(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> bool: ... - notification: typing.ClassVar[QtCore.pyqtSignal] - def subscribedToNotifications(self) -> typing.List[str]: ... - def unsubscribeFromNotification(self, name: typing.Optional[str]) -> bool: ... - def subscribeToNotification(self, name: typing.Optional[str]) -> bool: ... - def setLastError(self, e: 'QSqlError') -> None: ... - def setOpenError(self, e: bool) -> None: ... - def setOpen(self, o: bool) -> None: ... - def open(self, db: typing.Optional[str], user: typing.Optional[str] = ..., password: typing.Optional[str] = ..., host: typing.Optional[str] = ..., port: int = ..., options: typing.Optional[str] = ...) -> bool: ... - def createResult(self) -> typing.Optional['QSqlResult']: ... - def close(self) -> None: ... - def hasFeature(self, f: 'QSqlDriver.DriverFeature') -> bool: ... - def handle(self) -> typing.Any: ... - def lastError(self) -> 'QSqlError': ... - def sqlStatement(self, type: 'QSqlDriver.StatementType', tableName: typing.Optional[str], rec: 'QSqlRecord', preparedStatement: bool) -> str: ... - def escapeIdentifier(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> str: ... - def formatValue(self, field: 'QSqlField', trimStrings: bool = ...) -> str: ... - def record(self, tableName: typing.Optional[str]) -> 'QSqlRecord': ... - def primaryIndex(self, tableName: typing.Optional[str]) -> 'QSqlIndex': ... - def tables(self, tableType: 'QSql.TableType') -> typing.List[str]: ... - def rollbackTransaction(self) -> bool: ... - def commitTransaction(self) -> bool: ... - def beginTransaction(self) -> bool: ... - def isOpenError(self) -> bool: ... - def isOpen(self) -> bool: ... - - -class QSqlError(PyQt6.sip.simplewrapper): - - class ErrorType(enum.Enum): - NoError = ... # type: QSqlError.ErrorType - ConnectionError = ... # type: QSqlError.ErrorType - StatementError = ... # type: QSqlError.ErrorType - TransactionError = ... # type: QSqlError.ErrorType - UnknownError = ... # type: QSqlError.ErrorType - - @typing.overload - def __init__(self, driverText: typing.Optional[str] = ..., databaseText: typing.Optional[str] = ..., type: 'QSqlError.ErrorType' = ..., errorCode: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlError') -> None: ... - - def swap(self, other: 'QSqlError') -> None: ... - def nativeErrorCode(self) -> str: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def isValid(self) -> bool: ... - def text(self) -> str: ... - def type(self) -> 'QSqlError.ErrorType': ... - def databaseText(self) -> str: ... - def driverText(self) -> str: ... - - -class QSqlField(PyQt6.sip.simplewrapper): - - class RequiredStatus(enum.Enum): - Unknown = ... # type: QSqlField.RequiredStatus - Optional = ... # type: QSqlField.RequiredStatus - Required = ... # type: QSqlField.RequiredStatus - - @typing.overload - def __init__(self, fieldName: typing.Optional[str] = ..., type: QtCore.QMetaType = ..., tableName: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlField') -> None: ... - - def swap(self, other: 'QSqlField') -> None: ... - def setMetaType(self, type: QtCore.QMetaType) -> None: ... - def metaType(self) -> QtCore.QMetaType: ... - def tableName(self) -> str: ... - def setTableName(self, tableName: typing.Optional[str]) -> None: ... - def isValid(self) -> bool: ... - def isGenerated(self) -> bool: ... - def typeID(self) -> int: ... - def defaultValue(self) -> typing.Any: ... - def precision(self) -> int: ... - def length(self) -> int: ... - def requiredStatus(self) -> 'QSqlField.RequiredStatus': ... - def setAutoValue(self, autoVal: bool) -> None: ... - def setGenerated(self, gen: bool) -> None: ... - def setSqlType(self, type: int) -> None: ... - def setDefaultValue(self, value: typing.Any) -> None: ... - def setPrecision(self, precision: int) -> None: ... - def setLength(self, fieldLength: int) -> None: ... - def setRequired(self, required: bool) -> None: ... - def setRequiredStatus(self, status: 'QSqlField.RequiredStatus') -> None: ... - def isAutoValue(self) -> bool: ... - def clear(self) -> None: ... - def isReadOnly(self) -> bool: ... - def setReadOnly(self, readOnly: bool) -> None: ... - def isNull(self) -> bool: ... - def name(self) -> str: ... - def setName(self, name: typing.Optional[str]) -> None: ... - def value(self) -> typing.Any: ... - def setValue(self, value: typing.Any) -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QSqlRecord(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlRecord') -> None: ... - - def swap(self, other: 'QSqlRecord') -> None: ... - def keyValues(self, keyFields: 'QSqlRecord') -> 'QSqlRecord': ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def clearValues(self) -> None: ... - def clear(self) -> None: ... - def contains(self, name: typing.Optional[str]) -> bool: ... - def isEmpty(self) -> bool: ... - def remove(self, pos: int) -> None: ... - def insert(self, pos: int, field: QSqlField) -> None: ... - def replace(self, pos: int, field: QSqlField) -> None: ... - def append(self, field: QSqlField) -> None: ... - @typing.overload - def setGenerated(self, name: typing.Optional[str], generated: bool) -> None: ... - @typing.overload - def setGenerated(self, i: int, generated: bool) -> None: ... - @typing.overload - def isGenerated(self, i: int) -> bool: ... - @typing.overload - def isGenerated(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def field(self, i: int) -> QSqlField: ... - @typing.overload - def field(self, name: typing.Optional[str]) -> QSqlField: ... - def fieldName(self, i: int) -> str: ... - def indexOf(self, name: typing.Optional[str]) -> int: ... - @typing.overload - def isNull(self, i: int) -> bool: ... - @typing.overload - def isNull(self, name: typing.Optional[str]) -> bool: ... - @typing.overload - def setNull(self, i: int) -> None: ... - @typing.overload - def setNull(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def setValue(self, i: int, val: typing.Any) -> None: ... - @typing.overload - def setValue(self, name: typing.Optional[str], val: typing.Any) -> None: ... - @typing.overload - def value(self, i: int) -> typing.Any: ... - @typing.overload - def value(self, name: typing.Optional[str]) -> typing.Any: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QSqlIndex(QSqlRecord): - - @typing.overload - def __init__(self, cursorName: typing.Optional[str] = ..., name: typing.Optional[str] = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlIndex') -> None: ... - - def swap(self, other: 'QSqlIndex') -> None: ... - def setDescending(self, i: int, desc: bool) -> None: ... - def isDescending(self, i: int) -> bool: ... - @typing.overload - def append(self, field: QSqlField) -> None: ... - @typing.overload - def append(self, field: QSqlField, desc: bool) -> None: ... - def name(self) -> str: ... - def setName(self, name: typing.Optional[str]) -> None: ... - def cursorName(self) -> str: ... - def setCursorName(self, cursorName: typing.Optional[str]) -> None: ... - - -class QSqlQuery(PyQt6.sip.simplewrapper): - - class BatchExecutionMode(enum.Enum): - ValuesAsRows = ... # type: QSqlQuery.BatchExecutionMode - ValuesAsColumns = ... # type: QSqlQuery.BatchExecutionMode - - @typing.overload - def __init__(self, db: QSqlDatabase) -> None: ... - @typing.overload - def __init__(self, query: typing.Optional[str] = ..., db: QSqlDatabase = ...) -> None: ... - @typing.overload - def __init__(self, r: typing.Optional['QSqlResult']) -> None: ... - @typing.overload - def __init__(self, other: 'QSqlQuery') -> None: ... - - def isPositionalBindingEnabled(self) -> bool: ... - def setPositionalBindingEnabled(self, enable: bool) -> None: ... - def boundValueName(self, pos: int) -> str: ... - def boundValueNames(self) -> typing.List[str]: ... - def swap(self, other: 'QSqlQuery') -> None: ... - def nextResult(self) -> bool: ... - def finish(self) -> None: ... - def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... - def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... - def lastInsertId(self) -> typing.Any: ... - def executedQuery(self) -> str: ... - def boundValues(self) -> typing.List[typing.Any]: ... - @typing.overload - def boundValue(self, placeholder: typing.Optional[str]) -> typing.Any: ... - @typing.overload - def boundValue(self, pos: int) -> typing.Any: ... - def addBindValue(self, val: typing.Any, type: 'QSql.ParamTypeFlag' = ...) -> None: ... - @typing.overload - def bindValue(self, placeholder: typing.Optional[str], val: typing.Any, type: 'QSql.ParamTypeFlag' = ...) -> None: ... - @typing.overload - def bindValue(self, pos: int, val: typing.Any, type: 'QSql.ParamTypeFlag' = ...) -> None: ... - def prepare(self, query: typing.Optional[str]) -> bool: ... - def execBatch(self, mode: 'QSqlQuery.BatchExecutionMode' = ...) -> bool: ... - def clear(self) -> None: ... - def last(self) -> bool: ... - def first(self) -> bool: ... - def previous(self) -> bool: ... - def next(self) -> bool: ... - def seek(self, index: int, relative: bool = ...) -> bool: ... - @typing.overload - def value(self, i: int) -> typing.Any: ... - @typing.overload - def value(self, name: typing.Optional[str]) -> typing.Any: ... - @typing.overload - def exec(self, query: typing.Optional[str]) -> bool: ... - @typing.overload - def exec(self) -> bool: ... - def setForwardOnly(self, forward: bool) -> None: ... - def record(self) -> QSqlRecord: ... - def isForwardOnly(self) -> bool: ... - def result(self) -> typing.Optional['QSqlResult']: ... - def driver(self) -> typing.Optional[QSqlDriver]: ... - def size(self) -> int: ... - def isSelect(self) -> bool: ... - def lastError(self) -> QSqlError: ... - def numRowsAffected(self) -> int: ... - def lastQuery(self) -> str: ... - def at(self) -> int: ... - @typing.overload - def isNull(self, field: int) -> bool: ... - @typing.overload - def isNull(self, name: typing.Optional[str]) -> bool: ... - def isActive(self) -> bool: ... - def isValid(self) -> bool: ... - - -class QSqlQueryModel(QtCore.QAbstractTableModel): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... - def endRemoveColumns(self) -> None: ... - def beginRemoveColumns(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... - def endInsertColumns(self) -> None: ... - def beginInsertColumns(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... - def endRemoveRows(self) -> None: ... - def beginRemoveRows(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... - def endInsertRows(self) -> None: ... - def beginInsertRows(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... - def endResetModel(self) -> None: ... - def beginResetModel(self) -> None: ... - def setLastError(self, error: QSqlError) -> None: ... - def indexInQuery(self, item: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def queryChange(self) -> None: ... - def canFetchMore(self, parent: QtCore.QModelIndex = ...) -> bool: ... - def fetchMore(self, parent: QtCore.QModelIndex = ...) -> None: ... - def lastError(self) -> QSqlError: ... - def clear(self) -> None: ... - def query(self) -> QSqlQuery: ... - @typing.overload - def setQuery(self, query: QSqlQuery) -> None: ... - @typing.overload - def setQuery(self, query: typing.Optional[str], db: QSqlDatabase = ...) -> None: ... - def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def insertColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def setHeaderData(self, section: int, orientation: QtCore.Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... - def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... - def data(self, item: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - @typing.overload - def record(self) -> QSqlRecord: ... - @typing.overload - def record(self, row: int) -> QSqlRecord: ... - def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - - -class QSqlRelationalDelegate(QtWidgets.QStyledItemDelegate): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setModelData(self, editor: typing.Optional[QtWidgets.QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... - def setEditorData(self, editor: typing.Optional[QtWidgets.QWidget], index: QtCore.QModelIndex) -> None: ... - def createEditor(self, parent: typing.Optional[QtWidgets.QWidget], option: QtWidgets.QStyleOptionViewItem, index: QtCore.QModelIndex) -> typing.Optional[QtWidgets.QWidget]: ... - - -class QSqlRelation(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, aTableName: typing.Optional[str], indexCol: typing.Optional[str], displayCol: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, a0: 'QSqlRelation') -> None: ... - - def swap(self, other: 'QSqlRelation') -> None: ... - def isValid(self) -> bool: ... - def displayColumn(self) -> str: ... - def indexColumn(self) -> str: ... - def tableName(self) -> str: ... - - -class QSqlTableModel(QSqlQueryModel): - - class EditStrategy(enum.Enum): - OnFieldChange = ... # type: QSqlTableModel.EditStrategy - OnRowChange = ... # type: QSqlTableModel.EditStrategy - OnManualSubmit = ... # type: QSqlTableModel.EditStrategy - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ..., db: QSqlDatabase = ...) -> None: ... - - def clearItemData(self, index: QtCore.QModelIndex) -> bool: ... - @typing.overload - def record(self) -> QSqlRecord: ... - @typing.overload - def record(self, row: int) -> QSqlRecord: ... - def selectRow(self, row: int) -> bool: ... - def primaryValues(self, row: int) -> QSqlRecord: ... - def indexInQuery(self, item: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def setPrimaryKey(self, key: QSqlIndex) -> None: ... - def selectStatement(self) -> str: ... - def orderByClause(self) -> str: ... - def deleteRowFromTable(self, row: int) -> bool: ... - def insertRowIntoTable(self, values: QSqlRecord) -> bool: ... - def updateRowInTable(self, row: int, values: QSqlRecord) -> bool: ... - beforeDelete: typing.ClassVar[QtCore.pyqtSignal] - beforeUpdate: typing.ClassVar[QtCore.pyqtSignal] - beforeInsert: typing.ClassVar[QtCore.pyqtSignal] - primeInsert: typing.ClassVar[QtCore.pyqtSignal] - def revertAll(self) -> None: ... - def submitAll(self) -> bool: ... - def revert(self) -> None: ... - def submit(self) -> bool: ... - def revertRow(self, row: int) -> None: ... - def setRecord(self, row: int, record: QSqlRecord) -> bool: ... - def insertRecord(self, row: int, record: QSqlRecord) -> bool: ... - def insertRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def removeRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... - def setFilter(self, filter: typing.Optional[str]) -> None: ... - def filter(self) -> str: ... - def setSort(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def sort(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def fieldIndex(self, fieldName: typing.Optional[str]) -> int: ... - def database(self) -> QSqlDatabase: ... - def primaryKey(self) -> QSqlIndex: ... - def editStrategy(self) -> 'QSqlTableModel.EditStrategy': ... - def setEditStrategy(self, strategy: 'QSqlTableModel.EditStrategy') -> None: ... - def clear(self) -> None: ... - @typing.overload - def isDirty(self, index: QtCore.QModelIndex) -> bool: ... - @typing.overload - def isDirty(self) -> bool: ... - def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... - def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, idx: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlag: ... - def tableName(self) -> str: ... - def setTable(self, tableName: typing.Optional[str]) -> None: ... - def select(self) -> bool: ... - - -class QSqlRelationalTableModel(QSqlTableModel): - - class JoinMode(enum.Enum): - InnerJoin = ... # type: QSqlRelationalTableModel.JoinMode - LeftJoin = ... # type: QSqlRelationalTableModel.JoinMode - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ..., db: QSqlDatabase = ...) -> None: ... - - def setJoinMode(self, joinMode: 'QSqlRelationalTableModel.JoinMode') -> None: ... - def insertRowIntoTable(self, values: QSqlRecord) -> bool: ... - def orderByClause(self) -> str: ... - def updateRowInTable(self, row: int, values: QSqlRecord) -> bool: ... - def selectStatement(self) -> str: ... - def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... - def revertRow(self, row: int) -> None: ... - def relationModel(self, column: int) -> typing.Optional[QSqlTableModel]: ... - def relation(self, column: int) -> QSqlRelation: ... - def setRelation(self, column: int, relation: QSqlRelation) -> None: ... - def setTable(self, tableName: typing.Optional[str]) -> None: ... - def select(self) -> bool: ... - def clear(self) -> None: ... - def setData(self, item: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... - def data(self, item: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... - - -class QSqlResult(PyQt6.sip.wrapper): - - class BindingSyntax(enum.Enum): - PositionalBinding = ... # type: QSqlResult.BindingSyntax - NamedBinding = ... # type: QSqlResult.BindingSyntax - - def __init__(self, db: typing.Optional[QSqlDriver]) -> None: ... - - def isPositionalBindingEnabled(self) -> bool: ... - def setPositionalBindingEnabled(self, enable: bool) -> None: ... - def boundValueNames(self) -> typing.List[str]: ... - def lastInsertId(self) -> typing.Any: ... - def record(self) -> QSqlRecord: ... - def numRowsAffected(self) -> int: ... - def size(self) -> int: ... - def fetchLast(self) -> bool: ... - def fetchFirst(self) -> bool: ... - def fetchPrevious(self) -> bool: ... - def fetchNext(self) -> bool: ... - def fetch(self, i: int) -> bool: ... - def reset(self, sqlquery: typing.Optional[str]) -> bool: ... - def isNull(self, i: int) -> bool: ... - def data(self, i: int) -> typing.Any: ... - def bindingSyntax(self) -> 'QSqlResult.BindingSyntax': ... - def hasOutValues(self) -> bool: ... - def clear(self) -> None: ... - def boundValueName(self, pos: int) -> str: ... - def executedQuery(self) -> str: ... - def boundValues(self) -> typing.List[typing.Any]: ... - def boundValueCount(self) -> int: ... - @typing.overload - def bindValueType(self, placeholder: typing.Optional[str]) -> 'QSql.ParamTypeFlag': ... - @typing.overload - def bindValueType(self, pos: int) -> 'QSql.ParamTypeFlag': ... - @typing.overload - def boundValue(self, placeholder: typing.Optional[str]) -> typing.Any: ... - @typing.overload - def boundValue(self, pos: int) -> typing.Any: ... - def addBindValue(self, val: typing.Any, type: 'QSql.ParamTypeFlag') -> None: ... - @typing.overload - def bindValue(self, pos: int, val: typing.Any, type: 'QSql.ParamTypeFlag') -> None: ... - @typing.overload - def bindValue(self, placeholder: typing.Optional[str], val: typing.Any, type: 'QSql.ParamTypeFlag') -> None: ... - def savePrepare(self, sqlquery: typing.Optional[str]) -> bool: ... - def prepare(self, query: typing.Optional[str]) -> bool: ... - def exec(self) -> bool: ... - def setForwardOnly(self, forward: bool) -> None: ... - def setSelect(self, s: bool) -> None: ... - def setQuery(self, query: typing.Optional[str]) -> None: ... - def setLastError(self, e: QSqlError) -> None: ... - def setActive(self, a: bool) -> None: ... - def setAt(self, at: int) -> None: ... - def driver(self) -> typing.Optional[QSqlDriver]: ... - def isForwardOnly(self) -> bool: ... - def isSelect(self) -> bool: ... - def isActive(self) -> bool: ... - def isValid(self) -> bool: ... - def lastError(self) -> QSqlError: ... - def lastQuery(self) -> str: ... - def at(self) -> int: ... - def handle(self) -> typing.Any: ... - - -class QSql(PyQt6.sip.simplewrapper): - - class NumericalPrecisionPolicy(enum.Enum): - LowPrecisionInt32 = ... # type: QSql.NumericalPrecisionPolicy - LowPrecisionInt64 = ... # type: QSql.NumericalPrecisionPolicy - LowPrecisionDouble = ... # type: QSql.NumericalPrecisionPolicy - HighPrecision = ... # type: QSql.NumericalPrecisionPolicy - - class TableType(enum.Enum): - Tables = ... # type: QSql.TableType - SystemTables = ... # type: QSql.TableType - Views = ... # type: QSql.TableType - AllTables = ... # type: QSql.TableType - - class ParamTypeFlag(enum.Flag): - In = ... # type: QSql.ParamTypeFlag - Out = ... # type: QSql.ParamTypeFlag - InOut = ... # type: QSql.ParamTypeFlag - Binary = ... # type: QSql.ParamTypeFlag - - class Location(enum.Enum): - BeforeFirstRow = ... # type: QSql.Location - AfterLastRow = ... # type: QSql.Location diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.abi3.so deleted file mode 100644 index 2e5d082..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.pyi deleted file mode 100644 index 8a1cb84..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSvg.pyi +++ /dev/null @@ -1,126 +0,0 @@ -# The PEP 484 type hints stub file for the QtSvg module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QtSvg(PyQt6.sip.simplewrapper): - - class Option(enum.Enum): - NoOption = ... # type: QtSvg.Option - Tiny12FeaturesOnly = ... # type: QtSvg.Option - - -class QSvgGenerator(QtGui.QPaintDevice): - - class SvgVersion(enum.Enum): - SvgTiny12 = ... # type: QSvgGenerator.SvgVersion - Svg11 = ... # type: QSvgGenerator.SvgVersion - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, version: 'QSvgGenerator.SvgVersion') -> None: ... - - def svgVersion(self) -> 'QSvgGenerator.SvgVersion': ... - def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... - @typing.overload - def setViewBox(self, viewBox: QtCore.QRect) -> None: ... - @typing.overload - def setViewBox(self, viewBox: QtCore.QRectF) -> None: ... - def viewBoxF(self) -> QtCore.QRectF: ... - def viewBox(self) -> QtCore.QRect: ... - def setDescription(self, description: typing.Optional[str]) -> None: ... - def description(self) -> str: ... - def setTitle(self, title: typing.Optional[str]) -> None: ... - def title(self) -> str: ... - def setResolution(self, resolution: int) -> None: ... - def resolution(self) -> int: ... - def setOutputDevice(self, outputDevice: typing.Optional[QtCore.QIODevice]) -> None: ... - def outputDevice(self) -> typing.Optional[QtCore.QIODevice]: ... - def setFileName(self, fileName: typing.Optional[str]) -> None: ... - def fileName(self) -> str: ... - def setSize(self, size: QtCore.QSize) -> None: ... - def size(self) -> QtCore.QSize: ... - - -class QSvgRenderer(QtCore.QObject): - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, filename: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, contents: typing.Optional[QtCore.QXmlStreamReader], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setAnimationEnabled(self, enable: bool) -> None: ... - def isAnimationEnabled(self) -> bool: ... - def setOptions(self, flags: QtSvg.Option) -> None: ... - def options(self) -> QtSvg.Option: ... - def transformForElement(self, id: typing.Optional[str]) -> QtGui.QTransform: ... - def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... - def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... - repaintNeeded: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def render(self, p: typing.Optional[QtGui.QPainter]) -> None: ... - @typing.overload - def render(self, p: typing.Optional[QtGui.QPainter], bounds: QtCore.QRectF) -> None: ... - @typing.overload - def render(self, painter: typing.Optional[QtGui.QPainter], elementId: typing.Optional[str], bounds: QtCore.QRectF = ...) -> None: ... - @typing.overload - def load(self, filename: typing.Optional[str]) -> bool: ... - @typing.overload - def load(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - @typing.overload - def load(self, contents: typing.Optional[QtCore.QXmlStreamReader]) -> bool: ... - def animationDuration(self) -> int: ... - def setCurrentFrame(self, a0: int) -> None: ... - def currentFrame(self) -> int: ... - def setFramesPerSecond(self, num: int) -> None: ... - def framesPerSecond(self) -> int: ... - def boundsOnElement(self, id: typing.Optional[str]) -> QtCore.QRectF: ... - def animated(self) -> bool: ... - @typing.overload - def setViewBox(self, viewbox: QtCore.QRect) -> None: ... - @typing.overload - def setViewBox(self, viewbox: QtCore.QRectF) -> None: ... - def viewBoxF(self) -> QtCore.QRectF: ... - def viewBox(self) -> QtCore.QRect: ... - def elementExists(self, id: typing.Optional[str]) -> bool: ... - def defaultSize(self) -> QtCore.QSize: ... - def isValid(self) -> bool: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.abi3.so deleted file mode 100644 index e37104a..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.pyi deleted file mode 100644 index 4381db8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtSvgWidgets.pyi +++ /dev/null @@ -1,73 +0,0 @@ -# The PEP 484 type hints stub file for the QtSvgWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtSvg -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QGraphicsSvgItem(QtWidgets.QGraphicsObject): - - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional[QtWidgets.QStyleOptionGraphicsItem], widget: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - def boundingRect(self) -> QtCore.QRectF: ... - def maximumCacheSize(self) -> QtCore.QSize: ... - def setMaximumCacheSize(self, size: QtCore.QSize) -> None: ... - def elementId(self) -> str: ... - def setElementId(self, id: typing.Optional[str]) -> None: ... - def renderer(self) -> typing.Optional[QtSvg.QSvgRenderer]: ... - def setSharedRenderer(self, renderer: typing.Optional[QtSvg.QSvgRenderer]) -> None: ... - - -class QSvgWidget(QtWidgets.QWidget): - - @typing.overload - def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, file: typing.Optional[str], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... - - def setOptions(self, options: QtSvg.QtSvg.Option) -> None: ... - def options(self) -> QtSvg.QtSvg.Option: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - @typing.overload - def load(self, file: typing.Optional[str]) -> None: ... - @typing.overload - def load(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def renderer(self) -> typing.Optional[QtSvg.QSvgRenderer]: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtTest.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtTest.abi3.so deleted file mode 100644 index 9235049..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtTest.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtTest.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtTest.pyi deleted file mode 100644 index b9155fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtTest.pyi +++ /dev/null @@ -1,151 +0,0 @@ -# The PEP 484 type hints stub file for the QtTest module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui -from PyQt6 import QtWidgets - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QAbstractItemModelTester(QtCore.QObject): - - class FailureReportingMode(enum.Enum): - QtTest = ... # type: QAbstractItemModelTester.FailureReportingMode - Warning = ... # type: QAbstractItemModelTester.FailureReportingMode - Fatal = ... # type: QAbstractItemModelTester.FailureReportingMode - - @typing.overload - def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], mode: 'QAbstractItemModelTester.FailureReportingMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setUseFetchMore(self, value: bool) -> None: ... - def failureReportingMode(self) -> 'QAbstractItemModelTester.FailureReportingMode': ... - def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - - -class QSignalSpy(QtCore.QObject): - - @typing.overload - def __init__(self, signal: QtCore.pyqtBoundSignal) -> None: ... - @typing.overload - def __init__(self, obj: typing.Optional[QtCore.QObject], signal: QtCore.QMetaMethod) -> None: ... - - def __delitem__(self, i: int) -> None: ... - def __setitem__(self, i: int, value: typing.Iterable[typing.Any]) -> None: ... - def __getitem__(self, i: int) -> typing.List[typing.Any]: ... - def __len__(self) -> int: ... - def wait(self, timeout: int = ...) -> bool: ... - def signal(self) -> QtCore.QByteArray: ... - def isValid(self) -> bool: ... - - -class QTest(PyQt6.sip.simplewrapper): - - class KeyAction(enum.Enum): - Press = ... # type: QTest.KeyAction - Release = ... # type: QTest.KeyAction - Click = ... # type: QTest.KeyAction - Shortcut = ... # type: QTest.KeyAction - - @typing.overload - def qWaitForWindowExposed(self, window: typing.Optional[QtGui.QWindow], timeout: int = ...) -> bool: ... - @typing.overload - def qWaitForWindowExposed(self, widget: typing.Optional[QtWidgets.QWidget], timeout: int = ...) -> bool: ... - @typing.overload - def qWaitForWindowActive(self, window: typing.Optional[QtGui.QWindow], timeout: int = ...) -> bool: ... - @typing.overload - def qWaitForWindowActive(self, widget: typing.Optional[QtWidgets.QWidget], timeout: int = ...) -> bool: ... - def qWait(self, ms: int) -> None: ... - @typing.overload - def mouseRelease(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseRelease(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mousePress(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mousePress(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseMove(self, widget: typing.Optional[QtWidgets.QWidget], pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseMove(self, window: typing.Optional[QtGui.QWindow], pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseDClick(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseDClick(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseClick(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def mouseClick(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: QtCore.Qt.KeyboardModifier = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... - @typing.overload - def sendKeyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], code: QtCore.Qt.Key, ascii: str, modifier: QtCore.Qt.KeyboardModifier, delay: int = ...) -> None: ... - @typing.overload - def sendKeyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], code: QtCore.Qt.Key, text: typing.Optional[str], modifier: QtCore.Qt.KeyboardModifier, delay: int = ...) -> None: ... - def simulateEvent(self, widget: typing.Optional[QtWidgets.QWidget], press: bool, code: int, modifier: QtCore.Qt.KeyboardModifier, text: typing.Optional[str], repeat: bool, delay: int = ...) -> None: ... - @typing.overload - def keySequence(self, widget: typing.Optional[QtWidgets.QWidget], keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... - @typing.overload - def keySequence(self, window: typing.Optional[QtGui.QWindow], keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... - @typing.overload - def keyRelease(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyRelease(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyRelease(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyRelease(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyPress(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyPress(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyPress(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyPress(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], ascii: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyEvent(self, action: 'QTest.KeyAction', window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyEvent(self, action: 'QTest.KeyAction', window: typing.Optional[QtGui.QWindow], ascii: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - def keyClicks(self, widget: typing.Optional[QtWidgets.QWidget], sequence: typing.Optional[str], modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyClick(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyClick(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyClick(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... - @typing.overload - def keyClick(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: QtCore.Qt.KeyboardModifier = ..., delay: int = ...) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.abi3.so deleted file mode 100644 index 104f294..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.pyi deleted file mode 100644 index aa72d9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtTextToSpeech.pyi +++ /dev/null @@ -1,142 +0,0 @@ -# The PEP 484 type hints stub file for the QtTextToSpeech module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QTextToSpeech(QtCore.QObject): - - class Capability(enum.Enum): - None_ = ... # type: QTextToSpeech.Capability - Speak = ... # type: QTextToSpeech.Capability - PauseResume = ... # type: QTextToSpeech.Capability - WordByWordProgress = ... # type: QTextToSpeech.Capability - Synthesize = ... # type: QTextToSpeech.Capability - - class State(enum.Enum): - Ready = ... # type: QTextToSpeech.State - Speaking = ... # type: QTextToSpeech.State - Paused = ... # type: QTextToSpeech.State - Error = ... # type: QTextToSpeech.State - Synthesizing = ... # type: QTextToSpeech.State - - class ErrorReason(enum.Enum): - NoError = ... # type: QTextToSpeech.ErrorReason - Initialization = ... # type: QTextToSpeech.ErrorReason - Configuration = ... # type: QTextToSpeech.ErrorReason - Input = ... # type: QTextToSpeech.ErrorReason - Playback = ... # type: QTextToSpeech.ErrorReason - - class BoundaryHint(enum.Enum): - Default = ... # type: QTextToSpeech.BoundaryHint - Immediate = ... # type: QTextToSpeech.BoundaryHint - Word = ... # type: QTextToSpeech.BoundaryHint - Sentence = ... # type: QTextToSpeech.BoundaryHint - Utterance = ... # type: QTextToSpeech.BoundaryHint - - @typing.overload - def __init__(self, engine: typing.Optional[str], params: typing.Dict[typing.Optional[str], typing.Any], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, engine: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - aboutToSynthesize: typing.ClassVar[QtCore.pyqtSignal] - sayingWord: typing.ClassVar[QtCore.pyqtSignal] - def enqueue(self, text: typing.Optional[str]) -> int: ... - def engineCapabilities(self) -> 'QTextToSpeech.Capability': ... - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - engineChanged: typing.ClassVar[QtCore.pyqtSignal] - voiceChanged: typing.ClassVar[QtCore.pyqtSignal] - volumeChanged: typing.ClassVar[QtCore.pyqtSignal] - pitchChanged: typing.ClassVar[QtCore.pyqtSignal] - rateChanged: typing.ClassVar[QtCore.pyqtSignal] - localeChanged: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def setVoice(self, voice: 'QVoice') -> None: ... - def setVolume(self, volume: float) -> None: ... - def setPitch(self, pitch: float) -> None: ... - def setRate(self, rate: float) -> None: ... - def setLocale(self, locale: QtCore.QLocale) -> None: ... - def resume(self) -> None: ... - def pause(self, boundaryHint: 'QTextToSpeech.BoundaryHint' = ...) -> None: ... - def stop(self, boundaryHint: 'QTextToSpeech.BoundaryHint' = ...) -> None: ... - def say(self, text: typing.Optional[str]) -> None: ... - @staticmethod - def availableEngines() -> typing.List[str]: ... - def volume(self) -> float: ... - def pitch(self) -> float: ... - def rate(self) -> float: ... - def availableVoices(self) -> typing.List['QVoice']: ... - def voice(self) -> 'QVoice': ... - def locale(self) -> QtCore.QLocale: ... - def availableLocales(self) -> typing.List[QtCore.QLocale]: ... - def state(self) -> 'QTextToSpeech.State': ... - def errorString(self) -> str: ... - def errorReason(self) -> 'QTextToSpeech.ErrorReason': ... - def engine(self) -> str: ... - def setEngine(self, engine: typing.Optional[str], params: typing.Dict[typing.Optional[str], typing.Any] = ...) -> bool: ... - - -class QVoice(PyQt6.sip.simplewrapper): - - class Age(enum.Enum): - Child = ... # type: QVoice.Age - Teenager = ... # type: QVoice.Age - Adult = ... # type: QVoice.Age - Senior = ... # type: QVoice.Age - Other = ... # type: QVoice.Age - - class Gender(enum.Enum): - Male = ... # type: QVoice.Gender - Female = ... # type: QVoice.Gender - Unknown = ... # type: QVoice.Gender - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QVoice') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def language(self) -> QtCore.QLocale.Language: ... - def locale(self) -> QtCore.QLocale: ... - def swap(self, other: 'QVoice') -> None: ... - @staticmethod - def ageName(age: 'QVoice.Age') -> str: ... - @staticmethod - def genderName(gender: 'QVoice.Gender') -> str: ... - def age(self) -> 'QVoice.Age': ... - def gender(self) -> 'QVoice.Gender': ... - def name(self) -> str: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.abi3.so deleted file mode 100644 index c63eb6d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.pyi deleted file mode 100644 index 38a1cbf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtWebChannel.pyi +++ /dev/null @@ -1,59 +0,0 @@ -# The PEP 484 type hints stub file for the QtWebChannel module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QWebChannel(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - blockUpdatesChanged: typing.ClassVar[QtCore.pyqtSignal] - def disconnectFrom(self, transport: typing.Optional['QWebChannelAbstractTransport']) -> None: ... - def connectTo(self, transport: typing.Optional['QWebChannelAbstractTransport']) -> None: ... - def setPropertyUpdateInterval(self, ms: int) -> None: ... - def propertyUpdateInterval(self) -> int: ... - def setBlockUpdates(self, block: bool) -> None: ... - def blockUpdates(self) -> bool: ... - def deregisterObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... - def registerObject(self, id: typing.Optional[str], object: typing.Optional[QtCore.QObject]) -> None: ... - def registeredObjects(self) -> typing.Dict[str, QtCore.QObject]: ... - def registerObjects(self, objects: typing.Dict[typing.Optional[str], QtCore.QObject]) -> None: ... - - -class QWebChannelAbstractTransport(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - messageReceived: typing.ClassVar[QtCore.pyqtSignal] - def sendMessage(self, message: typing.Dict[typing.Optional[str], typing.Union[QtCore.QJsonValue, QtCore.QJsonValue.Type, typing.Iterable[QtCore.QJsonValue], typing.Dict[typing.Optional[str], QtCore.QJsonValue], bool, int, float, None, typing.Optional[str]]]) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.abi3.so deleted file mode 100644 index 09f669c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.pyi deleted file mode 100644 index 74e3e57..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtWebSockets.pyi +++ /dev/null @@ -1,234 +0,0 @@ -# The PEP 484 type hints stub file for the QtWebSockets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtNetwork - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QMaskGenerator(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def nextMask(self) -> int: ... - def seed(self) -> bool: ... - - -class QWebSocket(QtCore.QObject): - - def __init__(self, origin: typing.Optional[str] = ..., version: 'QWebSocketProtocol.Version' = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - authenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - errorOccurred: typing.ClassVar[QtCore.pyqtSignal] - def subprotocol(self) -> str: ... - def handshakeOptions(self) -> 'QWebSocketHandshakeOptions': ... - handshakeInterruptedOnError: typing.ClassVar[QtCore.pyqtSignal] - alertReceived: typing.ClassVar[QtCore.pyqtSignal] - alertSent: typing.ClassVar[QtCore.pyqtSignal] - peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] - def continueInterruptedHandshake(self) -> None: ... - @staticmethod - def maxOutgoingFrameSize() -> int: ... - def outgoingFrameSize(self) -> int: ... - def setOutgoingFrameSize(self, outgoingFrameSize: int) -> None: ... - @staticmethod - def maxIncomingFrameSize() -> int: ... - @staticmethod - def maxIncomingMessageSize() -> int: ... - def maxAllowedIncomingMessageSize(self) -> int: ... - def setMaxAllowedIncomingMessageSize(self, maxAllowedIncomingMessageSize: int) -> None: ... - def maxAllowedIncomingFrameSize(self) -> int: ... - def setMaxAllowedIncomingFrameSize(self, maxAllowedIncomingFrameSize: int) -> None: ... - def bytesToWrite(self) -> int: ... - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - bytesWritten: typing.ClassVar[QtCore.pyqtSignal] - pong: typing.ClassVar[QtCore.pyqtSignal] - binaryMessageReceived: typing.ClassVar[QtCore.pyqtSignal] - textMessageReceived: typing.ClassVar[QtCore.pyqtSignal] - binaryFrameReceived: typing.ClassVar[QtCore.pyqtSignal] - textFrameReceived: typing.ClassVar[QtCore.pyqtSignal] - readChannelFinished: typing.ClassVar[QtCore.pyqtSignal] - proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - disconnected: typing.ClassVar[QtCore.pyqtSignal] - connected: typing.ClassVar[QtCore.pyqtSignal] - aboutToClose: typing.ClassVar[QtCore.pyqtSignal] - def ping(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview] = ...) -> None: ... - @typing.overload - def open(self, request: QtNetwork.QNetworkRequest, options: 'QWebSocketHandshakeOptions') -> None: ... - @typing.overload - def open(self, url: QtCore.QUrl, options: 'QWebSocketHandshakeOptions') -> None: ... - @typing.overload - def open(self, url: QtCore.QUrl) -> None: ... - @typing.overload - def open(self, request: QtNetwork.QNetworkRequest) -> None: ... - def close(self, closeCode: 'QWebSocketProtocol.CloseCode' = ..., reason: typing.Optional[str] = ...) -> None: ... - def request(self) -> QtNetwork.QNetworkRequest: ... - def sslConfiguration(self) -> QtNetwork.QSslConfiguration: ... - def setSslConfiguration(self, sslConfiguration: QtNetwork.QSslConfiguration) -> None: ... - @typing.overload - def ignoreSslErrors(self, errors: typing.Iterable[QtNetwork.QSslError]) -> None: ... - @typing.overload - def ignoreSslErrors(self) -> None: ... - def sendBinaryMessage(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> int: ... - def sendTextMessage(self, message: typing.Optional[str]) -> int: ... - def closeReason(self) -> str: ... - def closeCode(self) -> 'QWebSocketProtocol.CloseCode': ... - def origin(self) -> str: ... - def requestUrl(self) -> QtCore.QUrl: ... - def resourceName(self) -> str: ... - def version(self) -> 'QWebSocketProtocol.Version': ... - def state(self) -> QtNetwork.QAbstractSocket.SocketState: ... - def setPauseMode(self, pauseMode: QtNetwork.QAbstractSocket.PauseMode) -> None: ... - def resume(self) -> None: ... - def setReadBufferSize(self, size: int) -> None: ... - def readBufferSize(self) -> int: ... - def maskGenerator(self) -> typing.Optional[QMaskGenerator]: ... - def setMaskGenerator(self, maskGenerator: typing.Optional[QMaskGenerator]) -> None: ... - def setProxy(self, networkProxy: QtNetwork.QNetworkProxy) -> None: ... - def proxy(self) -> QtNetwork.QNetworkProxy: ... - def peerPort(self) -> int: ... - def peerName(self) -> str: ... - def peerAddress(self) -> QtNetwork.QHostAddress: ... - def pauseMode(self) -> QtNetwork.QAbstractSocket.PauseMode: ... - def localPort(self) -> int: ... - def localAddress(self) -> QtNetwork.QHostAddress: ... - def isValid(self) -> bool: ... - def flush(self) -> bool: ... - def errorString(self) -> str: ... - error: typing.ClassVar[QtCore.pyqtSignal] - def abort(self) -> None: ... - - -class QWebSocketCorsAuthenticator(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self, origin: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, other: 'QWebSocketCorsAuthenticator') -> None: ... - - def allowed(self) -> bool: ... - def setAllowed(self, allowed: bool) -> None: ... - def origin(self) -> str: ... - def swap(self, other: 'QWebSocketCorsAuthenticator') -> None: ... - - -class QWebSocketHandshakeOptions(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QWebSocketHandshakeOptions') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def setSubprotocols(self, protocols: typing.Iterable[typing.Optional[str]]) -> None: ... - def subprotocols(self) -> typing.List[str]: ... - def swap(self, other: 'QWebSocketHandshakeOptions') -> None: ... - - -class QWebSocketProtocol(PyQt6.sip.simplewrapper): - - class CloseCode(enum.Enum): - CloseCodeNormal = ... # type: QWebSocketProtocol.CloseCode - CloseCodeGoingAway = ... # type: QWebSocketProtocol.CloseCode - CloseCodeProtocolError = ... # type: QWebSocketProtocol.CloseCode - CloseCodeDatatypeNotSupported = ... # type: QWebSocketProtocol.CloseCode - CloseCodeReserved1004 = ... # type: QWebSocketProtocol.CloseCode - CloseCodeMissingStatusCode = ... # type: QWebSocketProtocol.CloseCode - CloseCodeAbnormalDisconnection = ... # type: QWebSocketProtocol.CloseCode - CloseCodeWrongDatatype = ... # type: QWebSocketProtocol.CloseCode - CloseCodePolicyViolated = ... # type: QWebSocketProtocol.CloseCode - CloseCodeTooMuchData = ... # type: QWebSocketProtocol.CloseCode - CloseCodeMissingExtension = ... # type: QWebSocketProtocol.CloseCode - CloseCodeBadOperation = ... # type: QWebSocketProtocol.CloseCode - CloseCodeTlsHandshakeFailed = ... # type: QWebSocketProtocol.CloseCode - - class Version(enum.Enum): - VersionUnknown = ... # type: QWebSocketProtocol.Version - Version0 = ... # type: QWebSocketProtocol.Version - Version4 = ... # type: QWebSocketProtocol.Version - Version5 = ... # type: QWebSocketProtocol.Version - Version6 = ... # type: QWebSocketProtocol.Version - Version7 = ... # type: QWebSocketProtocol.Version - Version8 = ... # type: QWebSocketProtocol.Version - Version13 = ... # type: QWebSocketProtocol.Version - VersionLatest = ... # type: QWebSocketProtocol.Version - - -class QWebSocketServer(QtCore.QObject): - - class SslMode(enum.Enum): - SecureMode = ... # type: QWebSocketServer.SslMode - NonSecureMode = ... # type: QWebSocketServer.SslMode - - def __init__(self, serverName: typing.Optional[str], secureMode: 'QWebSocketServer.SslMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def supportedSubprotocols(self) -> typing.List[str]: ... - def setSupportedSubprotocols(self, protocols: typing.Iterable[typing.Optional[str]]) -> None: ... - def handshakeTimeoutMS(self) -> int: ... - def setHandshakeTimeout(self, msec: int) -> None: ... - preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - closed: typing.ClassVar[QtCore.pyqtSignal] - sslErrors: typing.ClassVar[QtCore.pyqtSignal] - peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] - newConnection: typing.ClassVar[QtCore.pyqtSignal] - originAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] - serverError: typing.ClassVar[QtCore.pyqtSignal] - acceptError: typing.ClassVar[QtCore.pyqtSignal] - def handleConnection(self, socket: typing.Optional[QtNetwork.QTcpSocket]) -> None: ... - def serverUrl(self) -> QtCore.QUrl: ... - def supportedVersions(self) -> typing.List[QWebSocketProtocol.Version]: ... - def sslConfiguration(self) -> QtNetwork.QSslConfiguration: ... - def setSslConfiguration(self, sslConfiguration: QtNetwork.QSslConfiguration) -> None: ... - def proxy(self) -> QtNetwork.QNetworkProxy: ... - def setProxy(self, networkProxy: QtNetwork.QNetworkProxy) -> None: ... - def serverName(self) -> str: ... - def setServerName(self, serverName: typing.Optional[str]) -> None: ... - def resumeAccepting(self) -> None: ... - def pauseAccepting(self) -> None: ... - def errorString(self) -> str: ... - def error(self) -> QWebSocketProtocol.CloseCode: ... - def nextPendingConnection(self) -> typing.Optional[QWebSocket]: ... - def hasPendingConnections(self) -> bool: ... - def socketDescriptor(self) -> PyQt6.sip.voidptr: ... - def setSocketDescriptor(self, socketDescriptor: PyQt6.sip.voidptr) -> bool: ... - def secureMode(self) -> 'QWebSocketServer.SslMode': ... - def serverAddress(self) -> QtNetwork.QHostAddress: ... - def serverPort(self) -> int: ... - def maxPendingConnections(self) -> int: ... - def setMaxPendingConnections(self, numConnections: int) -> None: ... - def isListening(self) -> bool: ... - def close(self) -> None: ... - def listen(self, address: typing.Union[QtNetwork.QHostAddress, QtNetwork.QHostAddress.SpecialAddress] = ..., port: int = ...) -> bool: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so deleted file mode 100644 index b26ee69..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.pyi deleted file mode 100644 index 3b9c002..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtWidgets.pyi +++ /dev/null @@ -1,8851 +0,0 @@ -# The PEP 484 type hints stub file for the QtWidgets module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore -from PyQt6 import QtGui - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QWidget(QtCore.QObject, QtGui.QPaintDevice): - - class RenderFlag(enum.Flag): - DrawWindowBackground = ... # type: QWidget.RenderFlag - DrawChildren = ... # type: QWidget.RenderFlag - IgnoreMask = ... # type: QWidget.RenderFlag - - def __init__(self, parent: typing.Optional['QWidget'] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setScreen(self, a0: typing.Optional[QtGui.QScreen]) -> None: ... - def screen(self) -> typing.Optional[QtGui.QScreen]: ... - def setWindowFlag(self, a0: QtCore.Qt.WindowType, on: bool = ...) -> None: ... - def hasTabletTracking(self) -> bool: ... - def setTabletTracking(self, enable: bool) -> None: ... - windowIconTextChanged: typing.ClassVar[QtCore.pyqtSignal] - windowIconChanged: typing.ClassVar[QtCore.pyqtSignal] - windowTitleChanged: typing.ClassVar[QtCore.pyqtSignal] - def toolTipDuration(self) -> int: ... - def setToolTipDuration(self, msec: int) -> None: ... - def initPainter(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - def sharedPainter(self) -> typing.Optional[QtGui.QPainter]: ... - def nativeEvent(self, eventType: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], message: typing.Optional[PyQt6.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[PyQt6.sip.voidptr]]: ... - def windowHandle(self) -> typing.Optional[QtGui.QWindow]: ... - @staticmethod - def createWindowContainer(window: typing.Optional[QtGui.QWindow], parent: typing.Optional['QWidget'] = ..., flags: QtCore.Qt.WindowType = ...) -> 'QWidget': ... - def grab(self, rectangle: QtCore.QRect = ...) -> QtGui.QPixmap: ... - def hasHeightForWidth(self) -> bool: ... - def setInputMethodHints(self, hints: QtCore.Qt.InputMethodHint) -> None: ... - def inputMethodHints(self) -> QtCore.Qt.InputMethodHint: ... - def previousInFocusChain(self) -> typing.Optional['QWidget']: ... - def contentsMargins(self) -> QtCore.QMargins: ... - def ungrabGesture(self, type: QtCore.Qt.GestureType) -> None: ... - def grabGesture(self, type: QtCore.Qt.GestureType, flags: QtCore.Qt.GestureFlag = ...) -> None: ... - def setGraphicsEffect(self, effect: typing.Optional['QGraphicsEffect']) -> None: ... - def graphicsEffect(self) -> typing.Optional['QGraphicsEffect']: ... - def graphicsProxyWidget(self) -> typing.Optional['QGraphicsProxyWidget']: ... - def windowFilePath(self) -> str: ... - def setWindowFilePath(self, filePath: typing.Optional[str]) -> None: ... - def nativeParentWidget(self) -> typing.Optional['QWidget']: ... - def effectiveWinId(self) -> PyQt6.sip.voidptr: ... - def unsetLocale(self) -> None: ... - def locale(self) -> QtCore.QLocale: ... - def setLocale(self, locale: QtCore.QLocale) -> None: ... - @typing.overload - def render(self, target: typing.Optional[QtGui.QPaintDevice], targetOffset: QtCore.QPoint = ..., sourceRegion: QtGui.QRegion = ..., flags: 'QWidget.RenderFlag' = ...) -> None: ... - @typing.overload - def render(self, painter: typing.Optional[QtGui.QPainter], targetOffset: QtCore.QPoint = ..., sourceRegion: QtGui.QRegion = ..., flags: 'QWidget.RenderFlag' = ...) -> None: ... - def restoreGeometry(self, geometry: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def saveGeometry(self) -> QtCore.QByteArray: ... - def setShortcutAutoRepeat(self, id: int, enabled: bool = ...) -> None: ... - def styleSheet(self) -> str: ... - def setStyleSheet(self, styleSheet: typing.Optional[str]) -> None: ... - def setAutoFillBackground(self, enabled: bool) -> None: ... - def autoFillBackground(self) -> bool: ... - def setWindowModality(self, windowModality: QtCore.Qt.WindowModality) -> None: ... - def windowModality(self) -> QtCore.Qt.WindowModality: ... - def testAttribute(self, attribute: QtCore.Qt.WidgetAttribute) -> bool: ... - def parentWidget(self) -> typing.Optional['QWidget']: ... - def height(self) -> int: ... - def width(self) -> int: ... - def size(self) -> QtCore.QSize: ... - def geometry(self) -> QtCore.QRect: ... - def rect(self) -> QtCore.QRect: ... - def isHidden(self) -> bool: ... - def isVisible(self) -> bool: ... - def updatesEnabled(self) -> bool: ... - def underMouse(self) -> bool: ... - def hasMouseTracking(self) -> bool: ... - def setMouseTracking(self, enable: bool) -> None: ... - def fontInfo(self) -> QtGui.QFontInfo: ... - def fontMetrics(self) -> QtGui.QFontMetrics: ... - def font(self) -> QtGui.QFont: ... - def maximumHeight(self) -> int: ... - def maximumWidth(self) -> int: ... - def minimumHeight(self) -> int: ... - def minimumWidth(self) -> int: ... - def isModal(self) -> bool: ... - def isEnabled(self) -> bool: ... - def isWindow(self) -> bool: ... - def winId(self) -> PyQt6.sip.voidptr: ... - def windowFlags(self) -> QtCore.Qt.WindowType: ... - def windowType(self) -> QtCore.Qt.WindowType: ... - def focusPreviousChild(self) -> bool: ... - def focusNextChild(self) -> bool: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def destroy(self, destroyWindow: bool = ..., destroySubWindows: bool = ...) -> None: ... - def create(self, window: PyQt6.sip.voidptr = ..., initializeWindow: bool = ..., destroyOldWindow: bool = ...) -> None: ... - def updateMicroFocus(self, query: QtCore.Qt.InputMethodQuery = ...) -> None: ... - def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... - def tabletEvent(self, a0: typing.Optional[QtGui.QTabletEvent]) -> None: ... - def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def moveEvent(self, a0: typing.Optional[QtGui.QMoveEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def enterEvent(self, event: typing.Optional[QtGui.QEnterEvent]) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - customContextMenuRequested: typing.ClassVar[QtCore.pyqtSignal] - def isAncestorOf(self, child: typing.Optional['QWidget']) -> bool: ... - def ensurePolished(self) -> None: ... - def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... - def setAttribute(self, attribute: QtCore.Qt.WidgetAttribute, on: bool = ...) -> None: ... - @typing.overload - def childAt(self, p: QtCore.QPoint) -> typing.Optional['QWidget']: ... - @typing.overload - def childAt(self, ax: int, ay: int) -> typing.Optional['QWidget']: ... - @staticmethod - def find(a0: PyQt6.sip.voidptr) -> typing.Optional['QWidget']: ... - def overrideWindowFlags(self, type: QtCore.Qt.WindowType) -> None: ... - def setWindowFlags(self, type: QtCore.Qt.WindowType) -> None: ... - def actions(self) -> typing.List[QtGui.QAction]: ... - def removeAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def insertActions(self, before: typing.Optional[QtGui.QAction], actions: typing.Iterable[QtGui.QAction]) -> None: ... - def insertAction(self, before: typing.Optional[QtGui.QAction], action: typing.Optional[QtGui.QAction]) -> None: ... - def addActions(self, actions: typing.Iterable[QtGui.QAction]) -> None: ... - @typing.overload - def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str], slot: PYQT_SLOT, type: QtCore.Qt.ConnectionType = ...) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str], shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str], shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], slot: PYQT_SLOT, type: QtCore.Qt.ConnectionType = ...) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, text: typing.Optional[str], shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, text: typing.Optional[str], slot: PYQT_SLOT, type: QtCore.Qt.ConnectionType = ...) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, text: typing.Optional[str], shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], slot: PYQT_SLOT, type: QtCore.Qt.ConnectionType = ...) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def setAcceptDrops(self, on: bool) -> None: ... - def acceptDrops(self) -> bool: ... - def nextInFocusChain(self) -> typing.Optional['QWidget']: ... - def focusWidget(self) -> typing.Optional['QWidget']: ... - @typing.overload - def scroll(self, dx: int, dy: int) -> None: ... - @typing.overload - def scroll(self, dx: int, dy: int, a2: QtCore.QRect) -> None: ... - @typing.overload - def setParent(self, parent: typing.Optional['QWidget']) -> None: ... - @typing.overload - def setParent(self, parent: typing.Optional['QWidget'], f: QtCore.Qt.WindowType) -> None: ... - def updateGeometry(self) -> None: ... - def setLayout(self, a0: typing.Optional['QLayout']) -> None: ... - def layout(self) -> typing.Optional['QLayout']: ... - def contentsRect(self) -> QtCore.QRect: ... - @typing.overload - def setContentsMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... - @typing.overload - def setContentsMargins(self, margins: QtCore.QMargins) -> None: ... - def visibleRegion(self) -> QtGui.QRegion: ... - def heightForWidth(self, a0: int) -> int: ... - @typing.overload - def setSizePolicy(self, a0: 'QSizePolicy') -> None: ... - @typing.overload - def setSizePolicy(self, hor: 'QSizePolicy.Policy', ver: 'QSizePolicy.Policy') -> None: ... - def sizePolicy(self) -> 'QSizePolicy': ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def overrideWindowState(self, state: QtCore.Qt.WindowState) -> None: ... - def setWindowState(self, state: QtCore.Qt.WindowState) -> None: ... - def windowState(self) -> QtCore.Qt.WindowState: ... - def isFullScreen(self) -> bool: ... - def isMaximized(self) -> bool: ... - def isMinimized(self) -> bool: ... - def isVisibleTo(self, a0: typing.Optional['QWidget']) -> bool: ... - def adjustSize(self) -> None: ... - @typing.overload - def setGeometry(self, a0: QtCore.QRect) -> None: ... - @typing.overload - def setGeometry(self, ax: int, ay: int, aw: int, ah: int) -> None: ... - @typing.overload - def resize(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def resize(self, w: int, h: int) -> None: ... - @typing.overload - def move(self, a0: QtCore.QPoint) -> None: ... - @typing.overload - def move(self, ax: int, ay: int) -> None: ... - def stackUnder(self, a0: typing.Optional['QWidget']) -> None: ... - def lower(self) -> None: ... - def raise_(self) -> None: ... - def close(self) -> bool: ... - def showNormal(self) -> None: ... - def showFullScreen(self) -> None: ... - def showMaximized(self) -> None: ... - def showMinimized(self) -> None: ... - def hide(self) -> None: ... - def show(self) -> None: ... - def setHidden(self, hidden: bool) -> None: ... - def setVisible(self, visible: bool) -> None: ... - @typing.overload - def repaint(self) -> None: ... - @typing.overload - def repaint(self, x: int, y: int, w: int, h: int) -> None: ... - @typing.overload - def repaint(self, a0: QtCore.QRect) -> None: ... - @typing.overload - def repaint(self, a0: QtGui.QRegion) -> None: ... - @typing.overload - def update(self) -> None: ... - @typing.overload - def update(self, a0: QtCore.QRect) -> None: ... - @typing.overload - def update(self, a0: QtGui.QRegion) -> None: ... - @typing.overload - def update(self, ax: int, ay: int, aw: int, ah: int) -> None: ... - def setUpdatesEnabled(self, enable: bool) -> None: ... - @staticmethod - def keyboardGrabber() -> typing.Optional['QWidget']: ... - @staticmethod - def mouseGrabber() -> typing.Optional['QWidget']: ... - def setShortcutEnabled(self, id: int, enabled: bool = ...) -> None: ... - def releaseShortcut(self, id: int) -> None: ... - def grabShortcut(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], context: QtCore.Qt.ShortcutContext = ...) -> int: ... - def releaseKeyboard(self) -> None: ... - def grabKeyboard(self) -> None: ... - def releaseMouse(self) -> None: ... - @typing.overload - def grabMouse(self) -> None: ... - @typing.overload - def grabMouse(self, a0: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... - def setContextMenuPolicy(self, policy: QtCore.Qt.ContextMenuPolicy) -> None: ... - def contextMenuPolicy(self) -> QtCore.Qt.ContextMenuPolicy: ... - def focusProxy(self) -> typing.Optional['QWidget']: ... - def setFocusProxy(self, a0: typing.Optional['QWidget']) -> None: ... - @staticmethod - def setTabOrder(a0: typing.Optional['QWidget'], a1: typing.Optional['QWidget']) -> None: ... - def hasFocus(self) -> bool: ... - def setFocusPolicy(self, policy: QtCore.Qt.FocusPolicy) -> None: ... - def focusPolicy(self) -> QtCore.Qt.FocusPolicy: ... - def clearFocus(self) -> None: ... - def activateWindow(self) -> None: ... - def isActiveWindow(self) -> bool: ... - @typing.overload - def setFocus(self) -> None: ... - @typing.overload - def setFocus(self, reason: QtCore.Qt.FocusReason) -> None: ... - def isLeftToRight(self) -> bool: ... - def isRightToLeft(self) -> bool: ... - def unsetLayoutDirection(self) -> None: ... - def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... - def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... - def setAccessibleDescription(self, description: typing.Optional[str]) -> None: ... - def accessibleDescription(self) -> str: ... - def setAccessibleName(self, name: typing.Optional[str]) -> None: ... - def accessibleName(self) -> str: ... - def whatsThis(self) -> str: ... - def setWhatsThis(self, a0: typing.Optional[str]) -> None: ... - def statusTip(self) -> str: ... - def setStatusTip(self, a0: typing.Optional[str]) -> None: ... - def toolTip(self) -> str: ... - def setToolTip(self, a0: typing.Optional[str]) -> None: ... - def isWindowModified(self) -> bool: ... - def windowOpacity(self) -> float: ... - def setWindowOpacity(self, level: float) -> None: ... - def windowRole(self) -> str: ... - def setWindowRole(self, a0: typing.Optional[str]) -> None: ... - def windowIconText(self) -> str: ... - def setWindowIconText(self, a0: typing.Optional[str]) -> None: ... - def windowIcon(self) -> QtGui.QIcon: ... - def setWindowIcon(self, icon: QtGui.QIcon) -> None: ... - def windowTitle(self) -> str: ... - def setWindowTitle(self, a0: typing.Optional[str]) -> None: ... - def clearMask(self) -> None: ... - def mask(self) -> QtGui.QRegion: ... - @typing.overload - def setMask(self, a0: QtGui.QBitmap) -> None: ... - @typing.overload - def setMask(self, a0: QtGui.QRegion) -> None: ... - def unsetCursor(self) -> None: ... - def setCursor(self, a0: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... - def cursor(self) -> QtGui.QCursor: ... - def setFont(self, a0: QtGui.QFont) -> None: ... - def foregroundRole(self) -> QtGui.QPalette.ColorRole: ... - def setForegroundRole(self, a0: QtGui.QPalette.ColorRole) -> None: ... - def backgroundRole(self) -> QtGui.QPalette.ColorRole: ... - def setBackgroundRole(self, a0: QtGui.QPalette.ColorRole) -> None: ... - def setPalette(self, a0: QtGui.QPalette) -> None: ... - def palette(self) -> QtGui.QPalette: ... - def window(self) -> typing.Optional['QWidget']: ... - @typing.overload - def mapFrom(self, a0: typing.Optional['QWidget'], a1: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapFrom(self, a0: typing.Optional['QWidget'], a1: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapTo(self, a0: typing.Optional['QWidget'], a1: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapTo(self, a0: typing.Optional['QWidget'], a1: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapFromParent(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapFromParent(self, a0: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToParent(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapToParent(self, a0: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapFromGlobal(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapFromGlobal(self, a0: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToGlobal(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... - @typing.overload - def mapToGlobal(self, a0: QtCore.QPointF) -> QtCore.QPointF: ... - def setFixedHeight(self, h: int) -> None: ... - def setFixedWidth(self, w: int) -> None: ... - @typing.overload - def setFixedSize(self, a0: QtCore.QSize) -> None: ... - @typing.overload - def setFixedSize(self, w: int, h: int) -> None: ... - @typing.overload - def setBaseSize(self, basew: int, baseh: int) -> None: ... - @typing.overload - def setBaseSize(self, s: QtCore.QSize) -> None: ... - def baseSize(self) -> QtCore.QSize: ... - @typing.overload - def setSizeIncrement(self, w: int, h: int) -> None: ... - @typing.overload - def setSizeIncrement(self, s: QtCore.QSize) -> None: ... - def sizeIncrement(self) -> QtCore.QSize: ... - def setMaximumHeight(self, maxh: int) -> None: ... - def setMaximumWidth(self, maxw: int) -> None: ... - def setMinimumHeight(self, minh: int) -> None: ... - def setMinimumWidth(self, minw: int) -> None: ... - @typing.overload - def setMaximumSize(self, maxw: int, maxh: int) -> None: ... - @typing.overload - def setMaximumSize(self, s: QtCore.QSize) -> None: ... - @typing.overload - def setMinimumSize(self, minw: int, minh: int) -> None: ... - @typing.overload - def setMinimumSize(self, s: QtCore.QSize) -> None: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def childrenRegion(self) -> QtGui.QRegion: ... - def childrenRect(self) -> QtCore.QRect: ... - def frameSize(self) -> QtCore.QSize: ... - def pos(self) -> QtCore.QPoint: ... - def y(self) -> int: ... - def x(self) -> int: ... - def normalGeometry(self) -> QtCore.QRect: ... - def frameGeometry(self) -> QtCore.QRect: ... - def setWindowModified(self, a0: bool) -> None: ... - def setDisabled(self, a0: bool) -> None: ... - def setEnabled(self, a0: bool) -> None: ... - def isEnabledTo(self, a0: typing.Optional['QWidget']) -> bool: ... - def setStyle(self, a0: typing.Optional['QStyle']) -> None: ... - def style(self) -> typing.Optional['QStyle']: ... - def devType(self) -> int: ... - - -class QAbstractButton(QWidget): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def nextCheckState(self) -> None: ... - def checkStateSet(self) -> None: ... - def hitButton(self, pos: QtCore.QPoint) -> bool: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - toggled: typing.ClassVar[QtCore.pyqtSignal] - clicked: typing.ClassVar[QtCore.pyqtSignal] - released: typing.ClassVar[QtCore.pyqtSignal] - pressed: typing.ClassVar[QtCore.pyqtSignal] - def setChecked(self, a0: bool) -> None: ... - def toggle(self) -> None: ... - def click(self) -> None: ... - def animateClick(self) -> None: ... - def setIconSize(self, size: QtCore.QSize) -> None: ... - def group(self) -> typing.Optional['QButtonGroup']: ... - def autoExclusive(self) -> bool: ... - def setAutoExclusive(self, a0: bool) -> None: ... - def autoRepeat(self) -> bool: ... - def setAutoRepeat(self, a0: bool) -> None: ... - def isDown(self) -> bool: ... - def setDown(self, a0: bool) -> None: ... - def isChecked(self) -> bool: ... - def isCheckable(self) -> bool: ... - def setCheckable(self, a0: bool) -> None: ... - def shortcut(self) -> QtGui.QKeySequence: ... - def setShortcut(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - def icon(self) -> QtGui.QIcon: ... - def setIcon(self, icon: QtGui.QIcon) -> None: ... - def text(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def autoRepeatInterval(self) -> int: ... - def setAutoRepeatInterval(self, a0: int) -> None: ... - def autoRepeatDelay(self) -> int: ... - def setAutoRepeatDelay(self, a0: int) -> None: ... - - -class QAbstractItemDelegate(QtCore.QObject): - - class EndEditHint(enum.Enum): - NoHint = ... # type: QAbstractItemDelegate.EndEditHint - EditNextItem = ... # type: QAbstractItemDelegate.EndEditHint - EditPreviousItem = ... # type: QAbstractItemDelegate.EndEditHint - SubmitModelCache = ... # type: QAbstractItemDelegate.EndEditHint - RevertModelCache = ... # type: QAbstractItemDelegate.EndEditHint - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - sizeHintChanged: typing.ClassVar[QtCore.pyqtSignal] - closeEditor: typing.ClassVar[QtCore.pyqtSignal] - commitData: typing.ClassVar[QtCore.pyqtSignal] - def helpEvent(self, event: typing.Optional[QtGui.QHelpEvent], view: typing.Optional['QAbstractItemView'], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... - def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... - def destroyEditor(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... - def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... - def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... - def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... - def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - - -class QFrame(QWidget): - - class StyleMask(enum.Enum): - Shadow_Mask = ... # type: QFrame.StyleMask - Shape_Mask = ... # type: QFrame.StyleMask - - class Shape(enum.IntEnum): - NoFrame = ... # type: QFrame.Shape - Box = ... # type: QFrame.Shape - Panel = ... # type: QFrame.Shape - WinPanel = ... # type: QFrame.Shape - HLine = ... # type: QFrame.Shape - VLine = ... # type: QFrame.Shape - StyledPanel = ... # type: QFrame.Shape - - class Shadow(enum.IntEnum): - Plain = ... # type: QFrame.Shadow - Raised = ... # type: QFrame.Shadow - Sunken = ... # type: QFrame.Shadow - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def initStyleOption(self, option: typing.Optional['QStyleOptionFrame']) -> None: ... - def drawFrame(self, a0: typing.Optional[QtGui.QPainter]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def setFrameRect(self, a0: QtCore.QRect) -> None: ... - def frameRect(self) -> QtCore.QRect: ... - def setMidLineWidth(self, a0: int) -> None: ... - def midLineWidth(self) -> int: ... - def setLineWidth(self, a0: int) -> None: ... - def lineWidth(self) -> int: ... - def setFrameShadow(self, a0: 'QFrame.Shadow') -> None: ... - def frameShadow(self) -> 'QFrame.Shadow': ... - def setFrameShape(self, a0: 'QFrame.Shape') -> None: ... - def frameShape(self) -> 'QFrame.Shape': ... - def sizeHint(self) -> QtCore.QSize: ... - def frameWidth(self) -> int: ... - def setFrameStyle(self, a0: int) -> None: ... - def frameStyle(self) -> int: ... - - -class QAbstractScrollArea(QFrame): - - class SizeAdjustPolicy(enum.Enum): - AdjustIgnored = ... # type: QAbstractScrollArea.SizeAdjustPolicy - AdjustToContentsOnFirstShow = ... # type: QAbstractScrollArea.SizeAdjustPolicy - AdjustToContents = ... # type: QAbstractScrollArea.SizeAdjustPolicy - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setSizeAdjustPolicy(self, policy: 'QAbstractScrollArea.SizeAdjustPolicy') -> None: ... - def sizeAdjustPolicy(self) -> 'QAbstractScrollArea.SizeAdjustPolicy': ... - def setupViewport(self, viewport: typing.Optional[QWidget]) -> None: ... - def setViewport(self, widget: typing.Optional[QWidget]) -> None: ... - def scrollBarWidgets(self, alignment: QtCore.Qt.AlignmentFlag) -> typing.List[QWidget]: ... - def addScrollBarWidget(self, widget: typing.Optional[QWidget], alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def setCornerWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def cornerWidget(self) -> typing.Optional[QWidget]: ... - def setHorizontalScrollBar(self, scrollbar: typing.Optional['QScrollBar']) -> None: ... - def setVerticalScrollBar(self, scrollbar: typing.Optional['QScrollBar']) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def viewportEvent(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def viewportSizeHint(self) -> QtCore.QSize: ... - def viewportMargins(self) -> QtCore.QMargins: ... - @typing.overload - def setViewportMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... - @typing.overload - def setViewportMargins(self, margins: QtCore.QMargins) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def maximumViewportSize(self) -> QtCore.QSize: ... - def viewport(self) -> typing.Optional[QWidget]: ... - def horizontalScrollBar(self) -> typing.Optional['QScrollBar']: ... - def setHorizontalScrollBarPolicy(self, a0: QtCore.Qt.ScrollBarPolicy) -> None: ... - def horizontalScrollBarPolicy(self) -> QtCore.Qt.ScrollBarPolicy: ... - def verticalScrollBar(self) -> typing.Optional['QScrollBar']: ... - def setVerticalScrollBarPolicy(self, a0: QtCore.Qt.ScrollBarPolicy) -> None: ... - def verticalScrollBarPolicy(self) -> QtCore.Qt.ScrollBarPolicy: ... - - -class QAbstractItemView(QAbstractScrollArea): - - class DropIndicatorPosition(enum.Enum): - OnItem = ... # type: QAbstractItemView.DropIndicatorPosition - AboveItem = ... # type: QAbstractItemView.DropIndicatorPosition - BelowItem = ... # type: QAbstractItemView.DropIndicatorPosition - OnViewport = ... # type: QAbstractItemView.DropIndicatorPosition - - class State(enum.Enum): - NoState = ... # type: QAbstractItemView.State - DraggingState = ... # type: QAbstractItemView.State - DragSelectingState = ... # type: QAbstractItemView.State - EditingState = ... # type: QAbstractItemView.State - ExpandingState = ... # type: QAbstractItemView.State - CollapsingState = ... # type: QAbstractItemView.State - AnimatingState = ... # type: QAbstractItemView.State - - class CursorAction(enum.Enum): - MoveUp = ... # type: QAbstractItemView.CursorAction - MoveDown = ... # type: QAbstractItemView.CursorAction - MoveLeft = ... # type: QAbstractItemView.CursorAction - MoveRight = ... # type: QAbstractItemView.CursorAction - MoveHome = ... # type: QAbstractItemView.CursorAction - MoveEnd = ... # type: QAbstractItemView.CursorAction - MovePageUp = ... # type: QAbstractItemView.CursorAction - MovePageDown = ... # type: QAbstractItemView.CursorAction - MoveNext = ... # type: QAbstractItemView.CursorAction - MovePrevious = ... # type: QAbstractItemView.CursorAction - - class SelectionMode(enum.Enum): - NoSelection = ... # type: QAbstractItemView.SelectionMode - SingleSelection = ... # type: QAbstractItemView.SelectionMode - MultiSelection = ... # type: QAbstractItemView.SelectionMode - ExtendedSelection = ... # type: QAbstractItemView.SelectionMode - ContiguousSelection = ... # type: QAbstractItemView.SelectionMode - - class SelectionBehavior(enum.Enum): - SelectItems = ... # type: QAbstractItemView.SelectionBehavior - SelectRows = ... # type: QAbstractItemView.SelectionBehavior - SelectColumns = ... # type: QAbstractItemView.SelectionBehavior - - class ScrollMode(enum.Enum): - ScrollPerItem = ... # type: QAbstractItemView.ScrollMode - ScrollPerPixel = ... # type: QAbstractItemView.ScrollMode - - class ScrollHint(enum.Enum): - EnsureVisible = ... # type: QAbstractItemView.ScrollHint - PositionAtTop = ... # type: QAbstractItemView.ScrollHint - PositionAtBottom = ... # type: QAbstractItemView.ScrollHint - PositionAtCenter = ... # type: QAbstractItemView.ScrollHint - - class EditTrigger(enum.Flag): - NoEditTriggers = ... # type: QAbstractItemView.EditTrigger - CurrentChanged = ... # type: QAbstractItemView.EditTrigger - DoubleClicked = ... # type: QAbstractItemView.EditTrigger - SelectedClicked = ... # type: QAbstractItemView.EditTrigger - EditKeyPressed = ... # type: QAbstractItemView.EditTrigger - AnyKeyPressed = ... # type: QAbstractItemView.EditTrigger - AllEditTriggers = ... # type: QAbstractItemView.EditTrigger - - class DragDropMode(enum.Enum): - NoDragDrop = ... # type: QAbstractItemView.DragDropMode - DragOnly = ... # type: QAbstractItemView.DragDropMode - DropOnly = ... # type: QAbstractItemView.DragDropMode - DragDrop = ... # type: QAbstractItemView.DragDropMode - InternalMove = ... # type: QAbstractItemView.DragDropMode - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def initViewItemOption(self, option: typing.Optional['QStyleOptionViewItem']) -> None: ... - def isPersistentEditorOpen(self, index: QtCore.QModelIndex) -> bool: ... - def resetHorizontalScrollMode(self) -> None: ... - def resetVerticalScrollMode(self) -> None: ... - def defaultDropAction(self) -> QtCore.Qt.DropAction: ... - def setDefaultDropAction(self, dropAction: QtCore.Qt.DropAction) -> None: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def viewportSizeHint(self) -> QtCore.QSize: ... - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def autoScrollMargin(self) -> int: ... - def setAutoScrollMargin(self, margin: int) -> None: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def itemDelegateForIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QAbstractItemDelegate]: ... - def itemDelegateForColumn(self, column: int) -> typing.Optional[QAbstractItemDelegate]: ... - def setItemDelegateForColumn(self, column: int, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def itemDelegateForRow(self, row: int) -> typing.Optional[QAbstractItemDelegate]: ... - def setItemDelegateForRow(self, row: int, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def dragDropMode(self) -> 'QAbstractItemView.DragDropMode': ... - def setDragDropMode(self, behavior: 'QAbstractItemView.DragDropMode') -> None: ... - def dragDropOverwriteMode(self) -> bool: ... - def setDragDropOverwriteMode(self, overwrite: bool) -> None: ... - def horizontalScrollMode(self) -> 'QAbstractItemView.ScrollMode': ... - def setHorizontalScrollMode(self, mode: 'QAbstractItemView.ScrollMode') -> None: ... - def verticalScrollMode(self) -> 'QAbstractItemView.ScrollMode': ... - def setVerticalScrollMode(self, mode: 'QAbstractItemView.ScrollMode') -> None: ... - def dropIndicatorPosition(self) -> 'QAbstractItemView.DropIndicatorPosition': ... - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def viewportEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def dirtyRegionOffset(self) -> QtCore.QPoint: ... - def setDirtyRegion(self, region: QtGui.QRegion) -> None: ... - def scrollDirtyRegion(self, dx: int, dy: int) -> None: ... - def executeDelayedItemsLayout(self) -> None: ... - def scheduleDelayedItemsLayout(self) -> None: ... - def setState(self, state: 'QAbstractItemView.State') -> None: ... - def state(self) -> 'QAbstractItemView.State': ... - def startDrag(self, supportedActions: QtCore.Qt.DropAction) -> None: ... - def selectionCommand(self, index: QtCore.QModelIndex, event: typing.Optional[QtCore.QEvent] = ...) -> QtCore.QItemSelectionModel.SelectionFlag: ... - def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def moveCursor(self, cursorAction: 'QAbstractItemView.CursorAction', modifiers: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - viewportEntered: typing.ClassVar[QtCore.pyqtSignal] - entered: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - doubleClicked: typing.ClassVar[QtCore.pyqtSignal] - clicked: typing.ClassVar[QtCore.pyqtSignal] - pressed: typing.ClassVar[QtCore.pyqtSignal] - def editorDestroyed(self, editor: typing.Optional[QtCore.QObject]) -> None: ... - def commitData(self, editor: typing.Optional[QWidget]) -> None: ... - def closeEditor(self, editor: typing.Optional[QWidget], hint: QAbstractItemDelegate.EndEditHint) -> None: ... - def horizontalScrollbarValueChanged(self, value: int) -> None: ... - def verticalScrollbarValueChanged(self, value: int) -> None: ... - def horizontalScrollbarAction(self, action: int) -> None: ... - def verticalScrollbarAction(self, action: int) -> None: ... - def updateGeometries(self) -> None: ... - def updateEditorGeometries(self) -> None: ... - def updateEditorData(self) -> None: ... - def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... - def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... - def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... - @typing.overload - def update(self) -> None: ... - @typing.overload - def update(self, index: QtCore.QModelIndex) -> None: ... - def scrollToBottom(self) -> None: ... - def scrollToTop(self) -> None: ... - def setCurrentIndex(self, index: QtCore.QModelIndex) -> None: ... - def clearSelection(self) -> None: ... - @typing.overload - def edit(self, index: QtCore.QModelIndex) -> None: ... - @typing.overload - def edit(self, index: QtCore.QModelIndex, trigger: 'QAbstractItemView.EditTrigger', event: typing.Optional[QtCore.QEvent]) -> bool: ... - def selectAll(self) -> None: ... - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def reset(self) -> None: ... - def indexWidget(self, index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... - def setIndexWidget(self, index: QtCore.QModelIndex, widget: typing.Optional[QWidget]) -> None: ... - def closePersistentEditor(self, index: QtCore.QModelIndex) -> None: ... - def openPersistentEditor(self, index: QtCore.QModelIndex) -> None: ... - def sizeHintForColumn(self, column: int) -> int: ... - def sizeHintForRow(self, row: int) -> int: ... - def sizeHintForIndex(self, index: QtCore.QModelIndex) -> QtCore.QSize: ... - def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: 'QAbstractItemView.ScrollHint' = ...) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def keyboardSearch(self, search: typing.Optional[str]) -> None: ... - def textElideMode(self) -> QtCore.Qt.TextElideMode: ... - def setTextElideMode(self, mode: QtCore.Qt.TextElideMode) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - def setIconSize(self, size: QtCore.QSize) -> None: ... - def alternatingRowColors(self) -> bool: ... - def setAlternatingRowColors(self, enable: bool) -> None: ... - def dragEnabled(self) -> bool: ... - def setDragEnabled(self, enable: bool) -> None: ... - def showDropIndicator(self) -> bool: ... - def setDropIndicatorShown(self, enable: bool) -> None: ... - def tabKeyNavigation(self) -> bool: ... - def setTabKeyNavigation(self, enable: bool) -> None: ... - def hasAutoScroll(self) -> bool: ... - def setAutoScroll(self, enable: bool) -> None: ... - def editTriggers(self) -> 'QAbstractItemView.EditTrigger': ... - def setEditTriggers(self, triggers: 'QAbstractItemView.EditTrigger') -> None: ... - def rootIndex(self) -> QtCore.QModelIndex: ... - def currentIndex(self) -> QtCore.QModelIndex: ... - def selectionBehavior(self) -> 'QAbstractItemView.SelectionBehavior': ... - def setSelectionBehavior(self, behavior: 'QAbstractItemView.SelectionBehavior') -> None: ... - def selectionMode(self) -> 'QAbstractItemView.SelectionMode': ... - def setSelectionMode(self, mode: 'QAbstractItemView.SelectionMode') -> None: ... - def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... - def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def selectionModel(self) -> typing.Optional[QtCore.QItemSelectionModel]: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - - -class QAbstractSlider(QWidget): - - class SliderChange(enum.Enum): - SliderRangeChange = ... # type: QAbstractSlider.SliderChange - SliderOrientationChange = ... # type: QAbstractSlider.SliderChange - SliderStepsChange = ... # type: QAbstractSlider.SliderChange - SliderValueChange = ... # type: QAbstractSlider.SliderChange - - class SliderAction(enum.Enum): - SliderNoAction = ... # type: QAbstractSlider.SliderAction - SliderSingleStepAdd = ... # type: QAbstractSlider.SliderAction - SliderSingleStepSub = ... # type: QAbstractSlider.SliderAction - SliderPageStepAdd = ... # type: QAbstractSlider.SliderAction - SliderPageStepSub = ... # type: QAbstractSlider.SliderAction - SliderToMinimum = ... # type: QAbstractSlider.SliderAction - SliderToMaximum = ... # type: QAbstractSlider.SliderAction - SliderMove = ... # type: QAbstractSlider.SliderAction - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def sliderChange(self, change: 'QAbstractSlider.SliderChange') -> None: ... - def repeatAction(self) -> 'QAbstractSlider.SliderAction': ... - def setRepeatAction(self, action: 'QAbstractSlider.SliderAction', thresholdTime: int = ..., repeatTime: int = ...) -> None: ... - actionTriggered: typing.ClassVar[QtCore.pyqtSignal] - rangeChanged: typing.ClassVar[QtCore.pyqtSignal] - sliderReleased: typing.ClassVar[QtCore.pyqtSignal] - sliderMoved: typing.ClassVar[QtCore.pyqtSignal] - sliderPressed: typing.ClassVar[QtCore.pyqtSignal] - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... - def setValue(self, a0: int) -> None: ... - def triggerAction(self, action: 'QAbstractSlider.SliderAction') -> None: ... - def value(self) -> int: ... - def invertedControls(self) -> bool: ... - def setInvertedControls(self, a0: bool) -> None: ... - def invertedAppearance(self) -> bool: ... - def setInvertedAppearance(self, a0: bool) -> None: ... - def sliderPosition(self) -> int: ... - def setSliderPosition(self, a0: int) -> None: ... - def isSliderDown(self) -> bool: ... - def setSliderDown(self, a0: bool) -> None: ... - def hasTracking(self) -> bool: ... - def setTracking(self, enable: bool) -> None: ... - def pageStep(self) -> int: ... - def setPageStep(self, a0: int) -> None: ... - def singleStep(self) -> int: ... - def setSingleStep(self, a0: int) -> None: ... - def setRange(self, min: int, max: int) -> None: ... - def maximum(self) -> int: ... - def setMaximum(self, a0: int) -> None: ... - def minimum(self) -> int: ... - def setMinimum(self, a0: int) -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - - -class QAbstractSpinBox(QWidget): - - class StepType(enum.Enum): - DefaultStepType = ... # type: QAbstractSpinBox.StepType - AdaptiveDecimalStepType = ... # type: QAbstractSpinBox.StepType - - class CorrectionMode(enum.Enum): - CorrectToPreviousValue = ... # type: QAbstractSpinBox.CorrectionMode - CorrectToNearestValue = ... # type: QAbstractSpinBox.CorrectionMode - - class ButtonSymbols(enum.Enum): - UpDownArrows = ... # type: QAbstractSpinBox.ButtonSymbols - PlusMinus = ... # type: QAbstractSpinBox.ButtonSymbols - NoButtons = ... # type: QAbstractSpinBox.ButtonSymbols - - class StepEnabledFlag(enum.Flag): - StepNone = ... # type: QAbstractSpinBox.StepEnabledFlag - StepUpEnabled = ... # type: QAbstractSpinBox.StepEnabledFlag - StepDownEnabled = ... # type: QAbstractSpinBox.StepEnabledFlag - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def isGroupSeparatorShown(self) -> bool: ... - def setGroupSeparatorShown(self, shown: bool) -> None: ... - def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def keyboardTracking(self) -> bool: ... - def setKeyboardTracking(self, kt: bool) -> None: ... - def isAccelerated(self) -> bool: ... - def setAccelerated(self, on: bool) -> None: ... - def hasAcceptableInput(self) -> bool: ... - def correctionMode(self) -> 'QAbstractSpinBox.CorrectionMode': ... - def setCorrectionMode(self, cm: 'QAbstractSpinBox.CorrectionMode') -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionSpinBox']) -> None: ... - def stepEnabled(self) -> 'QAbstractSpinBox.StepEnabledFlag': ... - def setLineEdit(self, e: typing.Optional['QLineEdit']) -> None: ... - def lineEdit(self) -> typing.Optional['QLineEdit']: ... - def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def hideEvent(self, e: typing.Optional[QtGui.QHideEvent]) -> None: ... - def closeEvent(self, e: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - editingFinished: typing.ClassVar[QtCore.pyqtSignal] - def clear(self) -> None: ... - def selectAll(self) -> None: ... - def stepDown(self) -> None: ... - def stepUp(self) -> None: ... - def stepBy(self, steps: int) -> None: ... - def fixup(self, input: typing.Optional[str]) -> str: ... - def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def interpretText(self) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def hasFrame(self) -> bool: ... - def setFrame(self, a0: bool) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setAlignment(self, flag: QtCore.Qt.AlignmentFlag) -> None: ... - def isReadOnly(self) -> bool: ... - def setReadOnly(self, r: bool) -> None: ... - def setWrapping(self, w: bool) -> None: ... - def wrapping(self) -> bool: ... - def setSpecialValueText(self, s: typing.Optional[str]) -> None: ... - def specialValueText(self) -> str: ... - def text(self) -> str: ... - def setButtonSymbols(self, bs: 'QAbstractSpinBox.ButtonSymbols') -> None: ... - def buttonSymbols(self) -> 'QAbstractSpinBox.ButtonSymbols': ... - - -class QApplication(QtGui.QGuiApplication): - - def __init__(self, argv: typing.List[str]) -> None: ... - - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def setStyleSheet(self, sheet: typing.Optional[str]) -> None: ... - def setAutoSipEnabled(self, enabled: bool) -> None: ... - @staticmethod - def closeAllWindows() -> None: ... - @staticmethod - def aboutQt() -> None: ... - focusChanged: typing.ClassVar[QtCore.pyqtSignal] - def styleSheet(self) -> str: ... - def autoSipEnabled(self) -> bool: ... - def notify(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - @staticmethod - def exec() -> int: ... - @staticmethod - def setEffectEnabled(a0: QtCore.Qt.UIEffect, enabled: bool = ...) -> None: ... - @staticmethod - def isEffectEnabled(a0: QtCore.Qt.UIEffect) -> bool: ... - @staticmethod - def startDragDistance() -> int: ... - @staticmethod - def setStartDragDistance(l: int) -> None: ... - @staticmethod - def startDragTime() -> int: ... - @staticmethod - def setStartDragTime(ms: int) -> None: ... - @staticmethod - def wheelScrollLines() -> int: ... - @staticmethod - def setWheelScrollLines(a0: int) -> None: ... - @staticmethod - def keyboardInputInterval() -> int: ... - @staticmethod - def setKeyboardInputInterval(a0: int) -> None: ... - @staticmethod - def doubleClickInterval() -> int: ... - @staticmethod - def setDoubleClickInterval(a0: int) -> None: ... - @staticmethod - def cursorFlashTime() -> int: ... - @staticmethod - def setCursorFlashTime(a0: int) -> None: ... - @staticmethod - def alert(widget: typing.Optional[QWidget], msecs: int = ...) -> None: ... - @staticmethod - def beep() -> None: ... - @typing.overload - @staticmethod - def topLevelAt(p: QtCore.QPoint) -> typing.Optional[QWidget]: ... - @typing.overload - @staticmethod - def topLevelAt(x: int, y: int) -> typing.Optional[QWidget]: ... - @typing.overload - @staticmethod - def widgetAt(p: QtCore.QPoint) -> typing.Optional[QWidget]: ... - @typing.overload - @staticmethod - def widgetAt(x: int, y: int) -> typing.Optional[QWidget]: ... - @staticmethod - def setActiveWindow(act: typing.Optional[QWidget]) -> None: ... - @staticmethod - def activeWindow() -> typing.Optional[QWidget]: ... - @staticmethod - def focusWidget() -> typing.Optional[QWidget]: ... - @staticmethod - def activeModalWidget() -> typing.Optional[QWidget]: ... - @staticmethod - def activePopupWidget() -> typing.Optional[QWidget]: ... - @staticmethod - def topLevelWidgets() -> typing.List[QWidget]: ... - @staticmethod - def allWidgets() -> typing.List[QWidget]: ... - @staticmethod - def setFont(a0: QtGui.QFont, className: typing.Optional[str] = ...) -> None: ... - @typing.overload - @staticmethod - def font() -> QtGui.QFont: ... - @typing.overload - @staticmethod - def font(a0: typing.Optional[QWidget]) -> QtGui.QFont: ... - @typing.overload - @staticmethod - def font(className: typing.Optional[str]) -> QtGui.QFont: ... - @staticmethod - def setPalette(a0: QtGui.QPalette, className: typing.Optional[str] = ...) -> None: ... - @typing.overload - @staticmethod - def palette() -> QtGui.QPalette: ... - @typing.overload - @staticmethod - def palette(a0: typing.Optional[QWidget]) -> QtGui.QPalette: ... - @typing.overload - @staticmethod - def palette(className: typing.Optional[str]) -> QtGui.QPalette: ... - @typing.overload - @staticmethod - def setStyle(a0: typing.Optional['QStyle']) -> None: ... - @typing.overload - @staticmethod - def setStyle(a0: typing.Optional[str]) -> typing.Optional['QStyle']: ... - @staticmethod - def style() -> typing.Optional['QStyle']: ... - - -class QLayoutItem(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QLayoutItem') -> None: ... - - def controlTypes(self) -> 'QSizePolicy.ControlType': ... - def setAlignment(self, a: QtCore.Qt.AlignmentFlag) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def spacerItem(self) -> typing.Optional['QSpacerItem']: ... - def layout(self) -> typing.Optional['QLayout']: ... - def widget(self) -> typing.Optional[QWidget]: ... - def invalidate(self) -> None: ... - def minimumHeightForWidth(self, a0: int) -> int: ... - def heightForWidth(self, a0: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def isEmpty(self) -> bool: ... - def geometry(self) -> QtCore.QRect: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QLayout(QtCore.QObject, QLayoutItem): - - class SizeConstraint(enum.Enum): - SetDefaultConstraint = ... # type: QLayout.SizeConstraint - SetNoConstraint = ... # type: QLayout.SizeConstraint - SetMinimumSize = ... # type: QLayout.SizeConstraint - SetFixedSize = ... # type: QLayout.SizeConstraint - SetMaximumSize = ... # type: QLayout.SizeConstraint - SetMinAndMaxSize = ... # type: QLayout.SizeConstraint - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def unsetContentsMargins(self) -> None: ... - def replaceWidget(self, from_: typing.Optional[QWidget], to: typing.Optional[QWidget], options: QtCore.Qt.FindChildOption = ...) -> typing.Optional[QLayoutItem]: ... - def controlTypes(self) -> 'QSizePolicy.ControlType': ... - def contentsMargins(self) -> QtCore.QMargins: ... - def contentsRect(self) -> QtCore.QRect: ... - def getContentsMargins(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def setContentsMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... - @typing.overload - def setContentsMargins(self, margins: QtCore.QMargins) -> None: ... - def alignmentRect(self, a0: QtCore.QRect) -> QtCore.QRect: ... - def addChildWidget(self, w: typing.Optional[QWidget]) -> None: ... - def addChildLayout(self, l: typing.Optional['QLayout']) -> None: ... - def childEvent(self, e: typing.Optional[QtCore.QChildEvent]) -> None: ... - def widgetEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - @staticmethod - def closestAcceptableSize(w: typing.Optional[QWidget], s: QtCore.QSize) -> QtCore.QSize: ... - def isEnabled(self) -> bool: ... - def setEnabled(self, a0: bool) -> None: ... - def layout(self) -> typing.Optional['QLayout']: ... - def totalSizeHint(self) -> QtCore.QSize: ... - def totalMaximumSize(self) -> QtCore.QSize: ... - def totalMinimumSize(self) -> QtCore.QSize: ... - def totalHeightForWidth(self, w: int) -> int: ... - def isEmpty(self) -> bool: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - @typing.overload - def indexOf(self, a0: typing.Optional[QWidget]) -> int: ... - @typing.overload - def indexOf(self, a0: typing.Optional[QLayoutItem]) -> int: ... - def takeAt(self, index: int) -> typing.Optional[QLayoutItem]: ... - def itemAt(self, index: int) -> typing.Optional[QLayoutItem]: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def removeItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... - def removeWidget(self, w: typing.Optional[QWidget]) -> None: ... - def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... - def addWidget(self, w: typing.Optional[QWidget]) -> None: ... - def update(self) -> None: ... - def activate(self) -> bool: ... - def geometry(self) -> QtCore.QRect: ... - def invalidate(self) -> None: ... - def parentWidget(self) -> typing.Optional[QWidget]: ... - def menuBar(self) -> typing.Optional[QWidget]: ... - def setMenuBar(self, w: typing.Optional[QWidget]) -> None: ... - def sizeConstraint(self) -> 'QLayout.SizeConstraint': ... - def setSizeConstraint(self, a0: 'QLayout.SizeConstraint') -> None: ... - @typing.overload - def setAlignment(self, w: typing.Optional[QWidget], alignment: QtCore.Qt.AlignmentFlag) -> bool: ... - @typing.overload - def setAlignment(self, l: typing.Optional['QLayout'], alignment: QtCore.Qt.AlignmentFlag) -> bool: ... - @typing.overload - def setAlignment(self, a0: QtCore.Qt.AlignmentFlag) -> None: ... - def setSpacing(self, a0: int) -> None: ... - def spacing(self) -> int: ... - - -class QBoxLayout(QLayout): - - class Direction(enum.Enum): - LeftToRight = ... # type: QBoxLayout.Direction - RightToLeft = ... # type: QBoxLayout.Direction - TopToBottom = ... # type: QBoxLayout.Direction - BottomToTop = ... # type: QBoxLayout.Direction - Down = ... # type: QBoxLayout.Direction - Up = ... # type: QBoxLayout.Direction - - def __init__(self, direction: 'QBoxLayout.Direction', parent: typing.Optional[QWidget] = ...) -> None: ... - - def insertItem(self, index: int, a1: typing.Optional[QLayoutItem]) -> None: ... - def stretch(self, index: int) -> int: ... - def setStretch(self, index: int, stretch: int) -> None: ... - def insertSpacerItem(self, index: int, spacerItem: typing.Optional['QSpacerItem']) -> None: ... - def addSpacerItem(self, spacerItem: typing.Optional['QSpacerItem']) -> None: ... - def setSpacing(self, spacing: int) -> None: ... - def spacing(self) -> int: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def count(self) -> int: ... - def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def invalidate(self) -> None: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def minimumHeightForWidth(self, a0: int) -> int: ... - def heightForWidth(self, a0: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - @typing.overload - def setStretchFactor(self, w: typing.Optional[QWidget], stretch: int) -> bool: ... - @typing.overload - def setStretchFactor(self, l: typing.Optional[QLayout], stretch: int) -> bool: ... - def insertLayout(self, index: int, layout: typing.Optional[QLayout], stretch: int = ...) -> None: ... - def insertWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ..., alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - def insertStretch(self, index: int, stretch: int = ...) -> None: ... - def insertSpacing(self, index: int, size: int) -> None: ... - def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... - def addStrut(self, a0: int) -> None: ... - def addLayout(self, layout: typing.Optional[QLayout], stretch: int = ...) -> None: ... - def addWidget(self, a0: typing.Optional[QWidget], stretch: int = ..., alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - def addStretch(self, stretch: int = ...) -> None: ... - def addSpacing(self, size: int) -> None: ... - def setDirection(self, a0: 'QBoxLayout.Direction') -> None: ... - def direction(self) -> 'QBoxLayout.Direction': ... - - -class QHBoxLayout(QBoxLayout): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget]) -> None: ... - - -class QVBoxLayout(QBoxLayout): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget]) -> None: ... - - -class QButtonGroup(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - idToggled: typing.ClassVar[QtCore.pyqtSignal] - idReleased: typing.ClassVar[QtCore.pyqtSignal] - idPressed: typing.ClassVar[QtCore.pyqtSignal] - idClicked: typing.ClassVar[QtCore.pyqtSignal] - buttonToggled: typing.ClassVar[QtCore.pyqtSignal] - buttonReleased: typing.ClassVar[QtCore.pyqtSignal] - buttonPressed: typing.ClassVar[QtCore.pyqtSignal] - buttonClicked: typing.ClassVar[QtCore.pyqtSignal] - def checkedId(self) -> int: ... - def id(self, button: typing.Optional[QAbstractButton]) -> int: ... - def setId(self, button: typing.Optional[QAbstractButton], id: int) -> None: ... - def checkedButton(self) -> typing.Optional[QAbstractButton]: ... - def button(self, id: int) -> typing.Optional[QAbstractButton]: ... - def buttons(self) -> typing.List[QAbstractButton]: ... - def removeButton(self, a0: typing.Optional[QAbstractButton]) -> None: ... - def addButton(self, a0: typing.Optional[QAbstractButton], id: int = ...) -> None: ... - def exclusive(self) -> bool: ... - def setExclusive(self, a0: bool) -> None: ... - - -class QCalendarWidget(QWidget): - - class SelectionMode(enum.Enum): - NoSelection = ... # type: QCalendarWidget.SelectionMode - SingleSelection = ... # type: QCalendarWidget.SelectionMode - - class VerticalHeaderFormat(enum.Enum): - NoVerticalHeader = ... # type: QCalendarWidget.VerticalHeaderFormat - ISOWeekNumbers = ... # type: QCalendarWidget.VerticalHeaderFormat - - class HorizontalHeaderFormat(enum.Enum): - NoHorizontalHeader = ... # type: QCalendarWidget.HorizontalHeaderFormat - SingleLetterDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat - ShortDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat - LongDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def clearMaximumDate(self) -> None: ... - def clearMinimumDate(self) -> None: ... - def setCalendar(self, calendar: QtCore.QCalendar) -> None: ... - def calendar(self) -> QtCore.QCalendar: ... - def setNavigationBarVisible(self, visible: bool) -> None: ... - def setDateEditAcceptDelay(self, delay: int) -> None: ... - def dateEditAcceptDelay(self) -> int: ... - def setDateEditEnabled(self, enable: bool) -> None: ... - def isDateEditEnabled(self) -> bool: ... - def isNavigationBarVisible(self) -> bool: ... - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - currentPageChanged: typing.ClassVar[QtCore.pyqtSignal] - clicked: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - def showToday(self) -> None: ... - def showSelectedDate(self) -> None: ... - def showPreviousYear(self) -> None: ... - def showPreviousMonth(self) -> None: ... - def showNextYear(self) -> None: ... - def showNextMonth(self) -> None: ... - def setSelectedDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def setDateRange(self, min: typing.Union[QtCore.QDate, datetime.date], max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def setCurrentPage(self, year: int, month: int) -> None: ... - def paintCell(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def eventFilter(self, watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def updateCells(self) -> None: ... - def updateCell(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def setDateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date], format: QtGui.QTextCharFormat) -> None: ... - @typing.overload - def dateTextFormat(self) -> typing.Dict[QtCore.QDate, QtGui.QTextCharFormat]: ... - @typing.overload - def dateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date]) -> QtGui.QTextCharFormat: ... - def setWeekdayTextFormat(self, dayOfWeek: QtCore.Qt.DayOfWeek, format: QtGui.QTextCharFormat) -> None: ... - def weekdayTextFormat(self, dayOfWeek: QtCore.Qt.DayOfWeek) -> QtGui.QTextCharFormat: ... - def setHeaderTextFormat(self, format: QtGui.QTextCharFormat) -> None: ... - def headerTextFormat(self) -> QtGui.QTextCharFormat: ... - def setVerticalHeaderFormat(self, format: 'QCalendarWidget.VerticalHeaderFormat') -> None: ... - def verticalHeaderFormat(self) -> 'QCalendarWidget.VerticalHeaderFormat': ... - def setHorizontalHeaderFormat(self, format: 'QCalendarWidget.HorizontalHeaderFormat') -> None: ... - def horizontalHeaderFormat(self) -> 'QCalendarWidget.HorizontalHeaderFormat': ... - def setSelectionMode(self, mode: 'QCalendarWidget.SelectionMode') -> None: ... - def selectionMode(self) -> 'QCalendarWidget.SelectionMode': ... - def setGridVisible(self, show: bool) -> None: ... - def isGridVisible(self) -> bool: ... - def setFirstDayOfWeek(self, dayOfWeek: QtCore.Qt.DayOfWeek) -> None: ... - def firstDayOfWeek(self) -> QtCore.Qt.DayOfWeek: ... - def setMaximumDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def maximumDate(self) -> QtCore.QDate: ... - def setMinimumDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def minimumDate(self) -> QtCore.QDate: ... - def monthShown(self) -> int: ... - def yearShown(self) -> int: ... - def selectedDate(self) -> QtCore.QDate: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QCheckBox(QAbstractButton): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def initStyleOption(self, option: typing.Optional['QStyleOptionButton']) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def nextCheckState(self) -> None: ... - def checkStateSet(self) -> None: ... - def hitButton(self, pos: QtCore.QPoint) -> bool: ... - checkStateChanged: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def minimumSizeHint(self) -> QtCore.QSize: ... - def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... - def checkState(self) -> QtCore.Qt.CheckState: ... - def isTristate(self) -> bool: ... - def setTristate(self, on: bool = ...) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QDialog(QWidget): - - class DialogCode(enum.IntEnum): - Rejected = ... # type: QDialog.DialogCode - Accepted = ... # type: QDialog.DialogCode - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - rejected: typing.ClassVar[QtCore.pyqtSignal] - finished: typing.ClassVar[QtCore.pyqtSignal] - accepted: typing.ClassVar[QtCore.pyqtSignal] - def open(self) -> None: ... - def reject(self) -> None: ... - def accept(self) -> None: ... - def done(self, a0: int) -> None: ... - def exec(self) -> int: ... - def setResult(self, r: int) -> None: ... - def setModal(self, modal: bool) -> None: ... - def isSizeGripEnabled(self) -> bool: ... - def setSizeGripEnabled(self, a0: bool) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def setVisible(self, visible: bool) -> None: ... - def result(self) -> int: ... - - -class QColorDialog(QDialog): - - class ColorDialogOption(enum.Flag): - ShowAlphaChannel = ... # type: QColorDialog.ColorDialogOption - NoButtons = ... # type: QColorDialog.ColorDialogOption - DontUseNativeDialog = ... # type: QColorDialog.ColorDialogOption - NoEyeDropperButton = ... # type: QColorDialog.ColorDialogOption - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, initial: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setVisible(self, visible: bool) -> None: ... - def options(self) -> 'QColorDialog.ColorDialogOption': ... - def setOptions(self, options: 'QColorDialog.ColorDialogOption') -> None: ... - def testOption(self, option: 'QColorDialog.ColorDialogOption') -> bool: ... - def setOption(self, option: 'QColorDialog.ColorDialogOption', on: bool = ...) -> None: ... - def selectedColor(self) -> QtGui.QColor: ... - def currentColor(self) -> QtGui.QColor: ... - def setCurrentColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def done(self, result: int) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - currentColorChanged: typing.ClassVar[QtCore.pyqtSignal] - colorSelected: typing.ClassVar[QtCore.pyqtSignal] - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - @staticmethod - def setStandardColor(index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @staticmethod - def standardColor(index: int) -> QtGui.QColor: ... - @staticmethod - def setCustomColor(index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - @staticmethod - def customColor(index: int) -> QtGui.QColor: ... - @staticmethod - def customCount() -> int: ... - @staticmethod - def getColor(initial: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] = ..., parent: typing.Optional[QWidget] = ..., title: typing.Optional[str] = ..., options: 'QColorDialog.ColorDialogOption' = ...) -> QtGui.QColor: ... - - -class QColumnView(QAbstractItemView): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... - def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def initializeColumn(self, column: typing.Optional[QAbstractItemView]) -> None: ... - def createColumn(self, rootIndex: QtCore.QModelIndex) -> typing.Optional[QAbstractItemView]: ... - updatePreviewWidget: typing.ClassVar[QtCore.pyqtSignal] - def selectAll(self) -> None: ... - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def sizeHint(self) -> QtCore.QSize: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def indexAt(self, point: QtCore.QPoint) -> QtCore.QModelIndex: ... - def setResizeGripsVisible(self, visible: bool) -> None: ... - def setPreviewWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def setColumnWidths(self, list: typing.Iterable[int]) -> None: ... - def resizeGripsVisible(self) -> bool: ... - def previewWidget(self) -> typing.Optional[QWidget]: ... - def columnWidths(self) -> typing.List[int]: ... - - -class QComboBox(QWidget): - - class SizeAdjustPolicy(enum.Enum): - AdjustToContents = ... # type: QComboBox.SizeAdjustPolicy - AdjustToContentsOnFirstShow = ... # type: QComboBox.SizeAdjustPolicy - AdjustToMinimumContentsLengthWithIcon = ... # type: QComboBox.SizeAdjustPolicy - - class InsertPolicy(enum.Enum): - NoInsert = ... # type: QComboBox.InsertPolicy - InsertAtTop = ... # type: QComboBox.InsertPolicy - InsertAtCurrent = ... # type: QComboBox.InsertPolicy - InsertAtBottom = ... # type: QComboBox.InsertPolicy - InsertAfterCurrent = ... # type: QComboBox.InsertPolicy - InsertBeforeCurrent = ... # type: QComboBox.InsertPolicy - InsertAlphabetically = ... # type: QComboBox.InsertPolicy - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def placeholderText(self) -> str: ... - def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... - textHighlighted: typing.ClassVar[QtCore.pyqtSignal] - textActivated: typing.ClassVar[QtCore.pyqtSignal] - def currentData(self, role: int = ...) -> typing.Any: ... - @typing.overload - def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - @typing.overload - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def hideEvent(self, e: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionComboBox']) -> None: ... - highlighted: typing.ClassVar[QtCore.pyqtSignal] - currentTextChanged: typing.ClassVar[QtCore.pyqtSignal] - currentIndexChanged: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - editTextChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentText(self, text: typing.Optional[str]) -> None: ... - def setEditText(self, text: typing.Optional[str]) -> None: ... - def clearEditText(self) -> None: ... - def clear(self) -> None: ... - def insertSeparator(self, index: int) -> None: ... - def completer(self) -> typing.Optional['QCompleter']: ... - def setCompleter(self, c: typing.Optional['QCompleter']) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def hidePopup(self) -> None: ... - def showPopup(self) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def setView(self, itemView: typing.Optional[QAbstractItemView]) -> None: ... - def view(self) -> typing.Optional[QAbstractItemView]: ... - def setItemData(self, index: int, value: typing.Any, role: int = ...) -> None: ... - def setItemIcon(self, index: int, icon: QtGui.QIcon) -> None: ... - def setItemText(self, index: int, text: typing.Optional[str]) -> None: ... - def removeItem(self, index: int) -> None: ... - def insertItems(self, index: int, texts: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def insertItem(self, index: int, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... - @typing.overload - def insertItem(self, index: int, icon: QtGui.QIcon, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... - @typing.overload - def addItem(self, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... - @typing.overload - def addItem(self, icon: QtGui.QIcon, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... - def addItems(self, texts: typing.Iterable[typing.Optional[str]]) -> None: ... - def itemData(self, index: int, role: int = ...) -> typing.Any: ... - def itemIcon(self, index: int) -> QtGui.QIcon: ... - def itemText(self, index: int) -> str: ... - def currentText(self) -> str: ... - def setCurrentIndex(self, index: int) -> None: ... - def currentIndex(self) -> int: ... - def setModelColumn(self, visibleColumn: int) -> None: ... - def modelColumn(self) -> int: ... - def setRootModelIndex(self, index: QtCore.QModelIndex) -> None: ... - def rootModelIndex(self) -> QtCore.QModelIndex: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... - def validator(self) -> typing.Optional[QtGui.QValidator]: ... - def setValidator(self, v: typing.Optional[QtGui.QValidator]) -> None: ... - def lineEdit(self) -> typing.Optional['QLineEdit']: ... - def setLineEdit(self, edit: typing.Optional['QLineEdit']) -> None: ... - def setEditable(self, editable: bool) -> None: ... - def isEditable(self) -> bool: ... - def setIconSize(self, size: QtCore.QSize) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - def setMinimumContentsLength(self, characters: int) -> None: ... - def minimumContentsLength(self) -> int: ... - def setSizeAdjustPolicy(self, policy: 'QComboBox.SizeAdjustPolicy') -> None: ... - def sizeAdjustPolicy(self) -> 'QComboBox.SizeAdjustPolicy': ... - def setInsertPolicy(self, policy: 'QComboBox.InsertPolicy') -> None: ... - def insertPolicy(self) -> 'QComboBox.InsertPolicy': ... - def findData(self, data: typing.Any, role: int = ..., flags: QtCore.Qt.MatchFlag = ...) -> int: ... - def findText(self, text: typing.Optional[str], flags: QtCore.Qt.MatchFlag = ...) -> int: ... - def hasFrame(self) -> bool: ... - def setFrame(self, a0: bool) -> None: ... - def setDuplicatesEnabled(self, enable: bool) -> None: ... - def duplicatesEnabled(self) -> bool: ... - def maxCount(self) -> int: ... - def setMaxCount(self, max: int) -> None: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def setMaxVisibleItems(self, maxItems: int) -> None: ... - def maxVisibleItems(self) -> int: ... - - -class QPushButton(QAbstractButton): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def hitButton(self, pos: QtCore.QPoint) -> bool: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionButton']) -> None: ... - def showMenu(self) -> None: ... - def isFlat(self) -> bool: ... - def setFlat(self, a0: bool) -> None: ... - def menu(self) -> typing.Optional['QMenu']: ... - def setMenu(self, menu: typing.Optional['QMenu']) -> None: ... - def setDefault(self, a0: bool) -> None: ... - def isDefault(self) -> bool: ... - def setAutoDefault(self, a0: bool) -> None: ... - def autoDefault(self) -> bool: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QCommandLinkButton(QPushButton): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], description: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionButton']) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def heightForWidth(self, a0: int) -> int: ... - def sizeHint(self) -> QtCore.QSize: ... - def setDescription(self, description: typing.Optional[str]) -> None: ... - def description(self) -> str: ... - - -class QStyle(QtCore.QObject): - - class RequestSoftwareInputPanel(enum.Enum): - RSIP_OnMouseClickAndAlreadyFocused = ... # type: QStyle.RequestSoftwareInputPanel - RSIP_OnMouseClick = ... # type: QStyle.RequestSoftwareInputPanel - - class StandardPixmap(enum.IntEnum): - SP_TitleBarMenuButton = ... # type: QStyle.StandardPixmap - SP_TitleBarMinButton = ... # type: QStyle.StandardPixmap - SP_TitleBarMaxButton = ... # type: QStyle.StandardPixmap - SP_TitleBarCloseButton = ... # type: QStyle.StandardPixmap - SP_TitleBarNormalButton = ... # type: QStyle.StandardPixmap - SP_TitleBarShadeButton = ... # type: QStyle.StandardPixmap - SP_TitleBarUnshadeButton = ... # type: QStyle.StandardPixmap - SP_TitleBarContextHelpButton = ... # type: QStyle.StandardPixmap - SP_DockWidgetCloseButton = ... # type: QStyle.StandardPixmap - SP_MessageBoxInformation = ... # type: QStyle.StandardPixmap - SP_MessageBoxWarning = ... # type: QStyle.StandardPixmap - SP_MessageBoxCritical = ... # type: QStyle.StandardPixmap - SP_MessageBoxQuestion = ... # type: QStyle.StandardPixmap - SP_DesktopIcon = ... # type: QStyle.StandardPixmap - SP_TrashIcon = ... # type: QStyle.StandardPixmap - SP_ComputerIcon = ... # type: QStyle.StandardPixmap - SP_DriveFDIcon = ... # type: QStyle.StandardPixmap - SP_DriveHDIcon = ... # type: QStyle.StandardPixmap - SP_DriveCDIcon = ... # type: QStyle.StandardPixmap - SP_DriveDVDIcon = ... # type: QStyle.StandardPixmap - SP_DriveNetIcon = ... # type: QStyle.StandardPixmap - SP_DirOpenIcon = ... # type: QStyle.StandardPixmap - SP_DirClosedIcon = ... # type: QStyle.StandardPixmap - SP_DirLinkIcon = ... # type: QStyle.StandardPixmap - SP_FileIcon = ... # type: QStyle.StandardPixmap - SP_FileLinkIcon = ... # type: QStyle.StandardPixmap - SP_ToolBarHorizontalExtensionButton = ... # type: QStyle.StandardPixmap - SP_ToolBarVerticalExtensionButton = ... # type: QStyle.StandardPixmap - SP_FileDialogStart = ... # type: QStyle.StandardPixmap - SP_FileDialogEnd = ... # type: QStyle.StandardPixmap - SP_FileDialogToParent = ... # type: QStyle.StandardPixmap - SP_FileDialogNewFolder = ... # type: QStyle.StandardPixmap - SP_FileDialogDetailedView = ... # type: QStyle.StandardPixmap - SP_FileDialogInfoView = ... # type: QStyle.StandardPixmap - SP_FileDialogContentsView = ... # type: QStyle.StandardPixmap - SP_FileDialogListView = ... # type: QStyle.StandardPixmap - SP_FileDialogBack = ... # type: QStyle.StandardPixmap - SP_DirIcon = ... # type: QStyle.StandardPixmap - SP_DialogOkButton = ... # type: QStyle.StandardPixmap - SP_DialogCancelButton = ... # type: QStyle.StandardPixmap - SP_DialogHelpButton = ... # type: QStyle.StandardPixmap - SP_DialogOpenButton = ... # type: QStyle.StandardPixmap - SP_DialogSaveButton = ... # type: QStyle.StandardPixmap - SP_DialogCloseButton = ... # type: QStyle.StandardPixmap - SP_DialogApplyButton = ... # type: QStyle.StandardPixmap - SP_DialogResetButton = ... # type: QStyle.StandardPixmap - SP_DialogDiscardButton = ... # type: QStyle.StandardPixmap - SP_DialogYesButton = ... # type: QStyle.StandardPixmap - SP_DialogNoButton = ... # type: QStyle.StandardPixmap - SP_ArrowUp = ... # type: QStyle.StandardPixmap - SP_ArrowDown = ... # type: QStyle.StandardPixmap - SP_ArrowLeft = ... # type: QStyle.StandardPixmap - SP_ArrowRight = ... # type: QStyle.StandardPixmap - SP_ArrowBack = ... # type: QStyle.StandardPixmap - SP_ArrowForward = ... # type: QStyle.StandardPixmap - SP_DirHomeIcon = ... # type: QStyle.StandardPixmap - SP_CommandLink = ... # type: QStyle.StandardPixmap - SP_VistaShield = ... # type: QStyle.StandardPixmap - SP_BrowserReload = ... # type: QStyle.StandardPixmap - SP_BrowserStop = ... # type: QStyle.StandardPixmap - SP_MediaPlay = ... # type: QStyle.StandardPixmap - SP_MediaStop = ... # type: QStyle.StandardPixmap - SP_MediaPause = ... # type: QStyle.StandardPixmap - SP_MediaSkipForward = ... # type: QStyle.StandardPixmap - SP_MediaSkipBackward = ... # type: QStyle.StandardPixmap - SP_MediaSeekForward = ... # type: QStyle.StandardPixmap - SP_MediaSeekBackward = ... # type: QStyle.StandardPixmap - SP_MediaVolume = ... # type: QStyle.StandardPixmap - SP_MediaVolumeMuted = ... # type: QStyle.StandardPixmap - SP_DirLinkOpenIcon = ... # type: QStyle.StandardPixmap - SP_LineEditClearButton = ... # type: QStyle.StandardPixmap - SP_DialogYesToAllButton = ... # type: QStyle.StandardPixmap - SP_DialogNoToAllButton = ... # type: QStyle.StandardPixmap - SP_DialogSaveAllButton = ... # type: QStyle.StandardPixmap - SP_DialogAbortButton = ... # type: QStyle.StandardPixmap - SP_DialogRetryButton = ... # type: QStyle.StandardPixmap - SP_DialogIgnoreButton = ... # type: QStyle.StandardPixmap - SP_RestoreDefaultsButton = ... # type: QStyle.StandardPixmap - SP_TabCloseButton = ... # type: QStyle.StandardPixmap - SP_CustomBase = ... # type: QStyle.StandardPixmap - - class StyleHint(enum.IntEnum): - SH_EtchDisabledText = ... # type: QStyle.StyleHint - SH_DitherDisabledText = ... # type: QStyle.StyleHint - SH_ScrollBar_MiddleClickAbsolutePosition = ... # type: QStyle.StyleHint - SH_ScrollBar_ScrollWhenPointerLeavesControl = ... # type: QStyle.StyleHint - SH_TabBar_SelectMouseType = ... # type: QStyle.StyleHint - SH_TabBar_Alignment = ... # type: QStyle.StyleHint - SH_Header_ArrowAlignment = ... # type: QStyle.StyleHint - SH_Slider_SnapToValue = ... # type: QStyle.StyleHint - SH_Slider_SloppyKeyEvents = ... # type: QStyle.StyleHint - SH_ProgressDialog_CenterCancelButton = ... # type: QStyle.StyleHint - SH_ProgressDialog_TextLabelAlignment = ... # type: QStyle.StyleHint - SH_PrintDialog_RightAlignButtons = ... # type: QStyle.StyleHint - SH_MainWindow_SpaceBelowMenuBar = ... # type: QStyle.StyleHint - SH_FontDialog_SelectAssociatedText = ... # type: QStyle.StyleHint - SH_Menu_AllowActiveAndDisabled = ... # type: QStyle.StyleHint - SH_Menu_SpaceActivatesItem = ... # type: QStyle.StyleHint - SH_Menu_SubMenuPopupDelay = ... # type: QStyle.StyleHint - SH_ScrollView_FrameOnlyAroundContents = ... # type: QStyle.StyleHint - SH_MenuBar_AltKeyNavigation = ... # type: QStyle.StyleHint - SH_ComboBox_ListMouseTracking = ... # type: QStyle.StyleHint - SH_Menu_MouseTracking = ... # type: QStyle.StyleHint - SH_MenuBar_MouseTracking = ... # type: QStyle.StyleHint - SH_ItemView_ChangeHighlightOnFocus = ... # type: QStyle.StyleHint - SH_Widget_ShareActivation = ... # type: QStyle.StyleHint - SH_Workspace_FillSpaceOnMaximize = ... # type: QStyle.StyleHint - SH_ComboBox_Popup = ... # type: QStyle.StyleHint - SH_TitleBar_NoBorder = ... # type: QStyle.StyleHint - SH_BlinkCursorWhenTextSelected = ... # type: QStyle.StyleHint - SH_RichText_FullWidthSelection = ... # type: QStyle.StyleHint - SH_Menu_Scrollable = ... # type: QStyle.StyleHint - SH_GroupBox_TextLabelVerticalAlignment = ... # type: QStyle.StyleHint - SH_GroupBox_TextLabelColor = ... # type: QStyle.StyleHint - SH_Menu_SloppySubMenus = ... # type: QStyle.StyleHint - SH_Table_GridLineColor = ... # type: QStyle.StyleHint - SH_LineEdit_PasswordCharacter = ... # type: QStyle.StyleHint - SH_DialogButtons_DefaultButton = ... # type: QStyle.StyleHint - SH_ToolBox_SelectedPageTitleBold = ... # type: QStyle.StyleHint - SH_TabBar_PreferNoArrows = ... # type: QStyle.StyleHint - SH_ScrollBar_LeftClickAbsolutePosition = ... # type: QStyle.StyleHint - SH_UnderlineShortcut = ... # type: QStyle.StyleHint - SH_SpinBox_AnimateButton = ... # type: QStyle.StyleHint - SH_SpinBox_KeyPressAutoRepeatRate = ... # type: QStyle.StyleHint - SH_SpinBox_ClickAutoRepeatRate = ... # type: QStyle.StyleHint - SH_Menu_FillScreenWithScroll = ... # type: QStyle.StyleHint - SH_ToolTipLabel_Opacity = ... # type: QStyle.StyleHint - SH_DrawMenuBarSeparator = ... # type: QStyle.StyleHint - SH_TitleBar_ModifyNotification = ... # type: QStyle.StyleHint - SH_Button_FocusPolicy = ... # type: QStyle.StyleHint - SH_MessageBox_UseBorderForButtonSpacing = ... # type: QStyle.StyleHint - SH_TitleBar_AutoRaise = ... # type: QStyle.StyleHint - SH_ToolButton_PopupDelay = ... # type: QStyle.StyleHint - SH_FocusFrame_Mask = ... # type: QStyle.StyleHint - SH_RubberBand_Mask = ... # type: QStyle.StyleHint - SH_WindowFrame_Mask = ... # type: QStyle.StyleHint - SH_SpinControls_DisableOnBounds = ... # type: QStyle.StyleHint - SH_Dial_BackgroundRole = ... # type: QStyle.StyleHint - SH_ComboBox_LayoutDirection = ... # type: QStyle.StyleHint - SH_ItemView_EllipsisLocation = ... # type: QStyle.StyleHint - SH_ItemView_ShowDecorationSelected = ... # type: QStyle.StyleHint - SH_ItemView_ActivateItemOnSingleClick = ... # type: QStyle.StyleHint - SH_ScrollBar_ContextMenu = ... # type: QStyle.StyleHint - SH_ScrollBar_RollBetweenButtons = ... # type: QStyle.StyleHint - SH_Slider_StopMouseOverSlider = ... # type: QStyle.StyleHint - SH_Slider_AbsoluteSetButtons = ... # type: QStyle.StyleHint - SH_Slider_PageSetButtons = ... # type: QStyle.StyleHint - SH_Menu_KeyboardSearch = ... # type: QStyle.StyleHint - SH_TabBar_ElideMode = ... # type: QStyle.StyleHint - SH_DialogButtonLayout = ... # type: QStyle.StyleHint - SH_ComboBox_PopupFrameStyle = ... # type: QStyle.StyleHint - SH_MessageBox_TextInteractionFlags = ... # type: QStyle.StyleHint - SH_DialogButtonBox_ButtonsHaveIcons = ... # type: QStyle.StyleHint - SH_MessageBox_CenterButtons = ... # type: QStyle.StyleHint - SH_Menu_SelectionWrap = ... # type: QStyle.StyleHint - SH_ItemView_MovementWithoutUpdatingSelection = ... # type: QStyle.StyleHint - SH_ToolTip_Mask = ... # type: QStyle.StyleHint - SH_FocusFrame_AboveWidget = ... # type: QStyle.StyleHint - SH_TextControl_FocusIndicatorTextCharFormat = ... # type: QStyle.StyleHint - SH_WizardStyle = ... # type: QStyle.StyleHint - SH_ItemView_ArrowKeysNavigateIntoChildren = ... # type: QStyle.StyleHint - SH_Menu_Mask = ... # type: QStyle.StyleHint - SH_Menu_FlashTriggeredItem = ... # type: QStyle.StyleHint - SH_Menu_FadeOutOnHide = ... # type: QStyle.StyleHint - SH_SpinBox_ClickAutoRepeatThreshold = ... # type: QStyle.StyleHint - SH_ItemView_PaintAlternatingRowColorsForEmptyArea = ... # type: QStyle.StyleHint - SH_FormLayoutWrapPolicy = ... # type: QStyle.StyleHint - SH_TabWidget_DefaultTabPosition = ... # type: QStyle.StyleHint - SH_ToolBar_Movable = ... # type: QStyle.StyleHint - SH_FormLayoutFieldGrowthPolicy = ... # type: QStyle.StyleHint - SH_FormLayoutFormAlignment = ... # type: QStyle.StyleHint - SH_FormLayoutLabelAlignment = ... # type: QStyle.StyleHint - SH_ItemView_DrawDelegateFrame = ... # type: QStyle.StyleHint - SH_TabBar_CloseButtonPosition = ... # type: QStyle.StyleHint - SH_DockWidget_ButtonsHaveFrame = ... # type: QStyle.StyleHint - SH_ToolButtonStyle = ... # type: QStyle.StyleHint - SH_RequestSoftwareInputPanel = ... # type: QStyle.StyleHint - SH_ListViewExpand_SelectMouseType = ... # type: QStyle.StyleHint - SH_ScrollBar_Transient = ... # type: QStyle.StyleHint - SH_Menu_SupportsSections = ... # type: QStyle.StyleHint - SH_ToolTip_WakeUpDelay = ... # type: QStyle.StyleHint - SH_ToolTip_FallAsleepDelay = ... # type: QStyle.StyleHint - SH_Widget_Animate = ... # type: QStyle.StyleHint - SH_Splitter_OpaqueResize = ... # type: QStyle.StyleHint - SH_LineEdit_PasswordMaskDelay = ... # type: QStyle.StyleHint - SH_TabBar_ChangeCurrentDelay = ... # type: QStyle.StyleHint - SH_Menu_SubMenuUniDirection = ... # type: QStyle.StyleHint - SH_Menu_SubMenuUniDirectionFailCount = ... # type: QStyle.StyleHint - SH_Menu_SubMenuSloppySelectOtherActions = ... # type: QStyle.StyleHint - SH_Menu_SubMenuSloppyCloseTimeout = ... # type: QStyle.StyleHint - SH_Menu_SubMenuResetWhenReenteringParent = ... # type: QStyle.StyleHint - SH_Menu_SubMenuDontStartSloppyOnLeave = ... # type: QStyle.StyleHint - SH_ItemView_ScrollMode = ... # type: QStyle.StyleHint - SH_TitleBar_ShowToolTipsOnButtons = ... # type: QStyle.StyleHint - SH_Widget_Animation_Duration = ... # type: QStyle.StyleHint - SH_ComboBox_AllowWheelScrolling = ... # type: QStyle.StyleHint - SH_SpinBox_ButtonsInsideFrame = ... # type: QStyle.StyleHint - SH_SpinBox_StepModifier = ... # type: QStyle.StyleHint - SH_TabBar_AllowWheelScrolling = ... # type: QStyle.StyleHint - SH_Table_AlwaysDrawLeftTopGridLines = ... # type: QStyle.StyleHint - SH_SpinBox_SelectOnStep = ... # type: QStyle.StyleHint - SH_CustomBase = ... # type: QStyle.StyleHint - - class ContentsType(enum.IntEnum): - CT_PushButton = ... # type: QStyle.ContentsType - CT_CheckBox = ... # type: QStyle.ContentsType - CT_RadioButton = ... # type: QStyle.ContentsType - CT_ToolButton = ... # type: QStyle.ContentsType - CT_ComboBox = ... # type: QStyle.ContentsType - CT_Splitter = ... # type: QStyle.ContentsType - CT_ProgressBar = ... # type: QStyle.ContentsType - CT_MenuItem = ... # type: QStyle.ContentsType - CT_MenuBarItem = ... # type: QStyle.ContentsType - CT_MenuBar = ... # type: QStyle.ContentsType - CT_Menu = ... # type: QStyle.ContentsType - CT_TabBarTab = ... # type: QStyle.ContentsType - CT_Slider = ... # type: QStyle.ContentsType - CT_ScrollBar = ... # type: QStyle.ContentsType - CT_LineEdit = ... # type: QStyle.ContentsType - CT_SpinBox = ... # type: QStyle.ContentsType - CT_SizeGrip = ... # type: QStyle.ContentsType - CT_TabWidget = ... # type: QStyle.ContentsType - CT_DialogButtons = ... # type: QStyle.ContentsType - CT_HeaderSection = ... # type: QStyle.ContentsType - CT_GroupBox = ... # type: QStyle.ContentsType - CT_MdiControls = ... # type: QStyle.ContentsType - CT_ItemViewItem = ... # type: QStyle.ContentsType - CT_CustomBase = ... # type: QStyle.ContentsType - - class PixelMetric(enum.IntEnum): - PM_ButtonMargin = ... # type: QStyle.PixelMetric - PM_ButtonDefaultIndicator = ... # type: QStyle.PixelMetric - PM_MenuButtonIndicator = ... # type: QStyle.PixelMetric - PM_ButtonShiftHorizontal = ... # type: QStyle.PixelMetric - PM_ButtonShiftVertical = ... # type: QStyle.PixelMetric - PM_DefaultFrameWidth = ... # type: QStyle.PixelMetric - PM_SpinBoxFrameWidth = ... # type: QStyle.PixelMetric - PM_ComboBoxFrameWidth = ... # type: QStyle.PixelMetric - PM_MaximumDragDistance = ... # type: QStyle.PixelMetric - PM_ScrollBarExtent = ... # type: QStyle.PixelMetric - PM_ScrollBarSliderMin = ... # type: QStyle.PixelMetric - PM_SliderThickness = ... # type: QStyle.PixelMetric - PM_SliderControlThickness = ... # type: QStyle.PixelMetric - PM_SliderLength = ... # type: QStyle.PixelMetric - PM_SliderTickmarkOffset = ... # type: QStyle.PixelMetric - PM_SliderSpaceAvailable = ... # type: QStyle.PixelMetric - PM_DockWidgetSeparatorExtent = ... # type: QStyle.PixelMetric - PM_DockWidgetHandleExtent = ... # type: QStyle.PixelMetric - PM_DockWidgetFrameWidth = ... # type: QStyle.PixelMetric - PM_TabBarTabOverlap = ... # type: QStyle.PixelMetric - PM_TabBarTabHSpace = ... # type: QStyle.PixelMetric - PM_TabBarTabVSpace = ... # type: QStyle.PixelMetric - PM_TabBarBaseHeight = ... # type: QStyle.PixelMetric - PM_TabBarBaseOverlap = ... # type: QStyle.PixelMetric - PM_ProgressBarChunkWidth = ... # type: QStyle.PixelMetric - PM_SplitterWidth = ... # type: QStyle.PixelMetric - PM_TitleBarHeight = ... # type: QStyle.PixelMetric - PM_MenuScrollerHeight = ... # type: QStyle.PixelMetric - PM_MenuHMargin = ... # type: QStyle.PixelMetric - PM_MenuVMargin = ... # type: QStyle.PixelMetric - PM_MenuPanelWidth = ... # type: QStyle.PixelMetric - PM_MenuTearoffHeight = ... # type: QStyle.PixelMetric - PM_MenuDesktopFrameWidth = ... # type: QStyle.PixelMetric - PM_MenuBarPanelWidth = ... # type: QStyle.PixelMetric - PM_MenuBarItemSpacing = ... # type: QStyle.PixelMetric - PM_MenuBarVMargin = ... # type: QStyle.PixelMetric - PM_MenuBarHMargin = ... # type: QStyle.PixelMetric - PM_IndicatorWidth = ... # type: QStyle.PixelMetric - PM_IndicatorHeight = ... # type: QStyle.PixelMetric - PM_ExclusiveIndicatorWidth = ... # type: QStyle.PixelMetric - PM_ExclusiveIndicatorHeight = ... # type: QStyle.PixelMetric - PM_DialogButtonsSeparator = ... # type: QStyle.PixelMetric - PM_DialogButtonsButtonWidth = ... # type: QStyle.PixelMetric - PM_DialogButtonsButtonHeight = ... # type: QStyle.PixelMetric - PM_MdiSubWindowFrameWidth = ... # type: QStyle.PixelMetric - PM_MdiSubWindowMinimizedWidth = ... # type: QStyle.PixelMetric - PM_HeaderMargin = ... # type: QStyle.PixelMetric - PM_HeaderMarkSize = ... # type: QStyle.PixelMetric - PM_HeaderGripMargin = ... # type: QStyle.PixelMetric - PM_TabBarTabShiftHorizontal = ... # type: QStyle.PixelMetric - PM_TabBarTabShiftVertical = ... # type: QStyle.PixelMetric - PM_TabBarScrollButtonWidth = ... # type: QStyle.PixelMetric - PM_ToolBarFrameWidth = ... # type: QStyle.PixelMetric - PM_ToolBarHandleExtent = ... # type: QStyle.PixelMetric - PM_ToolBarItemSpacing = ... # type: QStyle.PixelMetric - PM_ToolBarItemMargin = ... # type: QStyle.PixelMetric - PM_ToolBarSeparatorExtent = ... # type: QStyle.PixelMetric - PM_ToolBarExtensionExtent = ... # type: QStyle.PixelMetric - PM_SpinBoxSliderHeight = ... # type: QStyle.PixelMetric - PM_ToolBarIconSize = ... # type: QStyle.PixelMetric - PM_ListViewIconSize = ... # type: QStyle.PixelMetric - PM_IconViewIconSize = ... # type: QStyle.PixelMetric - PM_SmallIconSize = ... # type: QStyle.PixelMetric - PM_LargeIconSize = ... # type: QStyle.PixelMetric - PM_FocusFrameVMargin = ... # type: QStyle.PixelMetric - PM_FocusFrameHMargin = ... # type: QStyle.PixelMetric - PM_ToolTipLabelFrameWidth = ... # type: QStyle.PixelMetric - PM_CheckBoxLabelSpacing = ... # type: QStyle.PixelMetric - PM_TabBarIconSize = ... # type: QStyle.PixelMetric - PM_SizeGripSize = ... # type: QStyle.PixelMetric - PM_DockWidgetTitleMargin = ... # type: QStyle.PixelMetric - PM_MessageBoxIconSize = ... # type: QStyle.PixelMetric - PM_ButtonIconSize = ... # type: QStyle.PixelMetric - PM_DockWidgetTitleBarButtonMargin = ... # type: QStyle.PixelMetric - PM_RadioButtonLabelSpacing = ... # type: QStyle.PixelMetric - PM_LayoutLeftMargin = ... # type: QStyle.PixelMetric - PM_LayoutTopMargin = ... # type: QStyle.PixelMetric - PM_LayoutRightMargin = ... # type: QStyle.PixelMetric - PM_LayoutBottomMargin = ... # type: QStyle.PixelMetric - PM_LayoutHorizontalSpacing = ... # type: QStyle.PixelMetric - PM_LayoutVerticalSpacing = ... # type: QStyle.PixelMetric - PM_TabBar_ScrollButtonOverlap = ... # type: QStyle.PixelMetric - PM_TextCursorWidth = ... # type: QStyle.PixelMetric - PM_TabCloseIndicatorWidth = ... # type: QStyle.PixelMetric - PM_TabCloseIndicatorHeight = ... # type: QStyle.PixelMetric - PM_ScrollView_ScrollBarSpacing = ... # type: QStyle.PixelMetric - PM_SubMenuOverlap = ... # type: QStyle.PixelMetric - PM_ScrollView_ScrollBarOverlap = ... # type: QStyle.PixelMetric - PM_TreeViewIndentation = ... # type: QStyle.PixelMetric - PM_HeaderDefaultSectionSizeHorizontal = ... # type: QStyle.PixelMetric - PM_HeaderDefaultSectionSizeVertical = ... # type: QStyle.PixelMetric - PM_TitleBarButtonIconSize = ... # type: QStyle.PixelMetric - PM_TitleBarButtonSize = ... # type: QStyle.PixelMetric - PM_LineEditIconSize = ... # type: QStyle.PixelMetric - PM_LineEditIconMargin = ... # type: QStyle.PixelMetric - PM_CustomBase = ... # type: QStyle.PixelMetric - - class SubControl(enum.Flag): - SC_None = ... # type: QStyle.SubControl - SC_ScrollBarAddLine = ... # type: QStyle.SubControl - SC_ScrollBarSubLine = ... # type: QStyle.SubControl - SC_ScrollBarAddPage = ... # type: QStyle.SubControl - SC_ScrollBarSubPage = ... # type: QStyle.SubControl - SC_ScrollBarFirst = ... # type: QStyle.SubControl - SC_ScrollBarLast = ... # type: QStyle.SubControl - SC_ScrollBarSlider = ... # type: QStyle.SubControl - SC_ScrollBarGroove = ... # type: QStyle.SubControl - SC_SpinBoxUp = ... # type: QStyle.SubControl - SC_SpinBoxDown = ... # type: QStyle.SubControl - SC_SpinBoxFrame = ... # type: QStyle.SubControl - SC_SpinBoxEditField = ... # type: QStyle.SubControl - SC_ComboBoxFrame = ... # type: QStyle.SubControl - SC_ComboBoxEditField = ... # type: QStyle.SubControl - SC_ComboBoxArrow = ... # type: QStyle.SubControl - SC_ComboBoxListBoxPopup = ... # type: QStyle.SubControl - SC_SliderGroove = ... # type: QStyle.SubControl - SC_SliderHandle = ... # type: QStyle.SubControl - SC_SliderTickmarks = ... # type: QStyle.SubControl - SC_ToolButton = ... # type: QStyle.SubControl - SC_ToolButtonMenu = ... # type: QStyle.SubControl - SC_TitleBarSysMenu = ... # type: QStyle.SubControl - SC_TitleBarMinButton = ... # type: QStyle.SubControl - SC_TitleBarMaxButton = ... # type: QStyle.SubControl - SC_TitleBarCloseButton = ... # type: QStyle.SubControl - SC_TitleBarNormalButton = ... # type: QStyle.SubControl - SC_TitleBarShadeButton = ... # type: QStyle.SubControl - SC_TitleBarUnshadeButton = ... # type: QStyle.SubControl - SC_TitleBarContextHelpButton = ... # type: QStyle.SubControl - SC_TitleBarLabel = ... # type: QStyle.SubControl - SC_DialGroove = ... # type: QStyle.SubControl - SC_DialHandle = ... # type: QStyle.SubControl - SC_DialTickmarks = ... # type: QStyle.SubControl - SC_GroupBoxCheckBox = ... # type: QStyle.SubControl - SC_GroupBoxLabel = ... # type: QStyle.SubControl - SC_GroupBoxContents = ... # type: QStyle.SubControl - SC_GroupBoxFrame = ... # type: QStyle.SubControl - SC_MdiMinButton = ... # type: QStyle.SubControl - SC_MdiNormalButton = ... # type: QStyle.SubControl - SC_MdiCloseButton = ... # type: QStyle.SubControl - SC_CustomBase = ... # type: QStyle.SubControl - SC_All = ... # type: QStyle.SubControl - - class ComplexControl(enum.IntEnum): - CC_SpinBox = ... # type: QStyle.ComplexControl - CC_ComboBox = ... # type: QStyle.ComplexControl - CC_ScrollBar = ... # type: QStyle.ComplexControl - CC_Slider = ... # type: QStyle.ComplexControl - CC_ToolButton = ... # type: QStyle.ComplexControl - CC_TitleBar = ... # type: QStyle.ComplexControl - CC_Dial = ... # type: QStyle.ComplexControl - CC_GroupBox = ... # type: QStyle.ComplexControl - CC_MdiControls = ... # type: QStyle.ComplexControl - CC_CustomBase = ... # type: QStyle.ComplexControl - - class SubElement(enum.IntEnum): - SE_PushButtonContents = ... # type: QStyle.SubElement - SE_PushButtonFocusRect = ... # type: QStyle.SubElement - SE_CheckBoxIndicator = ... # type: QStyle.SubElement - SE_CheckBoxContents = ... # type: QStyle.SubElement - SE_CheckBoxFocusRect = ... # type: QStyle.SubElement - SE_CheckBoxClickRect = ... # type: QStyle.SubElement - SE_RadioButtonIndicator = ... # type: QStyle.SubElement - SE_RadioButtonContents = ... # type: QStyle.SubElement - SE_RadioButtonFocusRect = ... # type: QStyle.SubElement - SE_RadioButtonClickRect = ... # type: QStyle.SubElement - SE_ComboBoxFocusRect = ... # type: QStyle.SubElement - SE_SliderFocusRect = ... # type: QStyle.SubElement - SE_ProgressBarGroove = ... # type: QStyle.SubElement - SE_ProgressBarContents = ... # type: QStyle.SubElement - SE_ProgressBarLabel = ... # type: QStyle.SubElement - SE_ToolBoxTabContents = ... # type: QStyle.SubElement - SE_HeaderLabel = ... # type: QStyle.SubElement - SE_HeaderArrow = ... # type: QStyle.SubElement - SE_TabWidgetTabBar = ... # type: QStyle.SubElement - SE_TabWidgetTabPane = ... # type: QStyle.SubElement - SE_TabWidgetTabContents = ... # type: QStyle.SubElement - SE_TabWidgetLeftCorner = ... # type: QStyle.SubElement - SE_TabWidgetRightCorner = ... # type: QStyle.SubElement - SE_TabBarTearIndicator = ... # type: QStyle.SubElement - SE_TreeViewDisclosureItem = ... # type: QStyle.SubElement - SE_LineEditContents = ... # type: QStyle.SubElement - SE_FrameContents = ... # type: QStyle.SubElement - SE_DockWidgetCloseButton = ... # type: QStyle.SubElement - SE_DockWidgetFloatButton = ... # type: QStyle.SubElement - SE_DockWidgetTitleBarText = ... # type: QStyle.SubElement - SE_DockWidgetIcon = ... # type: QStyle.SubElement - SE_CheckBoxLayoutItem = ... # type: QStyle.SubElement - SE_ComboBoxLayoutItem = ... # type: QStyle.SubElement - SE_DateTimeEditLayoutItem = ... # type: QStyle.SubElement - SE_LabelLayoutItem = ... # type: QStyle.SubElement - SE_ProgressBarLayoutItem = ... # type: QStyle.SubElement - SE_PushButtonLayoutItem = ... # type: QStyle.SubElement - SE_RadioButtonLayoutItem = ... # type: QStyle.SubElement - SE_SliderLayoutItem = ... # type: QStyle.SubElement - SE_SpinBoxLayoutItem = ... # type: QStyle.SubElement - SE_ToolButtonLayoutItem = ... # type: QStyle.SubElement - SE_FrameLayoutItem = ... # type: QStyle.SubElement - SE_GroupBoxLayoutItem = ... # type: QStyle.SubElement - SE_TabWidgetLayoutItem = ... # type: QStyle.SubElement - SE_ItemViewItemCheckIndicator = ... # type: QStyle.SubElement - SE_ItemViewItemDecoration = ... # type: QStyle.SubElement - SE_ItemViewItemText = ... # type: QStyle.SubElement - SE_ItemViewItemFocusRect = ... # type: QStyle.SubElement - SE_TabBarTabLeftButton = ... # type: QStyle.SubElement - SE_TabBarTabRightButton = ... # type: QStyle.SubElement - SE_TabBarTabText = ... # type: QStyle.SubElement - SE_ShapedFrameContents = ... # type: QStyle.SubElement - SE_ToolBarHandle = ... # type: QStyle.SubElement - SE_TabBarTearIndicatorLeft = ... # type: QStyle.SubElement - SE_TabBarScrollLeftButton = ... # type: QStyle.SubElement - SE_TabBarScrollRightButton = ... # type: QStyle.SubElement - SE_TabBarTearIndicatorRight = ... # type: QStyle.SubElement - SE_PushButtonBevel = ... # type: QStyle.SubElement - SE_CustomBase = ... # type: QStyle.SubElement - - class ControlElement(enum.IntEnum): - CE_PushButton = ... # type: QStyle.ControlElement - CE_PushButtonBevel = ... # type: QStyle.ControlElement - CE_PushButtonLabel = ... # type: QStyle.ControlElement - CE_CheckBox = ... # type: QStyle.ControlElement - CE_CheckBoxLabel = ... # type: QStyle.ControlElement - CE_RadioButton = ... # type: QStyle.ControlElement - CE_RadioButtonLabel = ... # type: QStyle.ControlElement - CE_TabBarTab = ... # type: QStyle.ControlElement - CE_TabBarTabShape = ... # type: QStyle.ControlElement - CE_TabBarTabLabel = ... # type: QStyle.ControlElement - CE_ProgressBar = ... # type: QStyle.ControlElement - CE_ProgressBarGroove = ... # type: QStyle.ControlElement - CE_ProgressBarContents = ... # type: QStyle.ControlElement - CE_ProgressBarLabel = ... # type: QStyle.ControlElement - CE_MenuItem = ... # type: QStyle.ControlElement - CE_MenuScroller = ... # type: QStyle.ControlElement - CE_MenuVMargin = ... # type: QStyle.ControlElement - CE_MenuHMargin = ... # type: QStyle.ControlElement - CE_MenuTearoff = ... # type: QStyle.ControlElement - CE_MenuEmptyArea = ... # type: QStyle.ControlElement - CE_MenuBarItem = ... # type: QStyle.ControlElement - CE_MenuBarEmptyArea = ... # type: QStyle.ControlElement - CE_ToolButtonLabel = ... # type: QStyle.ControlElement - CE_Header = ... # type: QStyle.ControlElement - CE_HeaderSection = ... # type: QStyle.ControlElement - CE_HeaderLabel = ... # type: QStyle.ControlElement - CE_ToolBoxTab = ... # type: QStyle.ControlElement - CE_SizeGrip = ... # type: QStyle.ControlElement - CE_Splitter = ... # type: QStyle.ControlElement - CE_RubberBand = ... # type: QStyle.ControlElement - CE_DockWidgetTitle = ... # type: QStyle.ControlElement - CE_ScrollBarAddLine = ... # type: QStyle.ControlElement - CE_ScrollBarSubLine = ... # type: QStyle.ControlElement - CE_ScrollBarAddPage = ... # type: QStyle.ControlElement - CE_ScrollBarSubPage = ... # type: QStyle.ControlElement - CE_ScrollBarSlider = ... # type: QStyle.ControlElement - CE_ScrollBarFirst = ... # type: QStyle.ControlElement - CE_ScrollBarLast = ... # type: QStyle.ControlElement - CE_FocusFrame = ... # type: QStyle.ControlElement - CE_ComboBoxLabel = ... # type: QStyle.ControlElement - CE_ToolBar = ... # type: QStyle.ControlElement - CE_ToolBoxTabShape = ... # type: QStyle.ControlElement - CE_ToolBoxTabLabel = ... # type: QStyle.ControlElement - CE_HeaderEmptyArea = ... # type: QStyle.ControlElement - CE_ColumnViewGrip = ... # type: QStyle.ControlElement - CE_ItemViewItem = ... # type: QStyle.ControlElement - CE_ShapedFrame = ... # type: QStyle.ControlElement - CE_CustomBase = ... # type: QStyle.ControlElement - - class PrimitiveElement(enum.IntEnum): - PE_Frame = ... # type: QStyle.PrimitiveElement - PE_FrameDefaultButton = ... # type: QStyle.PrimitiveElement - PE_FrameDockWidget = ... # type: QStyle.PrimitiveElement - PE_FrameFocusRect = ... # type: QStyle.PrimitiveElement - PE_FrameGroupBox = ... # type: QStyle.PrimitiveElement - PE_FrameLineEdit = ... # type: QStyle.PrimitiveElement - PE_FrameMenu = ... # type: QStyle.PrimitiveElement - PE_FrameTabWidget = ... # type: QStyle.PrimitiveElement - PE_FrameWindow = ... # type: QStyle.PrimitiveElement - PE_FrameButtonBevel = ... # type: QStyle.PrimitiveElement - PE_FrameButtonTool = ... # type: QStyle.PrimitiveElement - PE_FrameTabBarBase = ... # type: QStyle.PrimitiveElement - PE_PanelButtonCommand = ... # type: QStyle.PrimitiveElement - PE_PanelButtonBevel = ... # type: QStyle.PrimitiveElement - PE_PanelButtonTool = ... # type: QStyle.PrimitiveElement - PE_PanelMenuBar = ... # type: QStyle.PrimitiveElement - PE_PanelToolBar = ... # type: QStyle.PrimitiveElement - PE_PanelLineEdit = ... # type: QStyle.PrimitiveElement - PE_IndicatorArrowDown = ... # type: QStyle.PrimitiveElement - PE_IndicatorArrowLeft = ... # type: QStyle.PrimitiveElement - PE_IndicatorArrowRight = ... # type: QStyle.PrimitiveElement - PE_IndicatorArrowUp = ... # type: QStyle.PrimitiveElement - PE_IndicatorBranch = ... # type: QStyle.PrimitiveElement - PE_IndicatorButtonDropDown = ... # type: QStyle.PrimitiveElement - PE_IndicatorCheckBox = ... # type: QStyle.PrimitiveElement - PE_IndicatorDockWidgetResizeHandle = ... # type: QStyle.PrimitiveElement - PE_IndicatorHeaderArrow = ... # type: QStyle.PrimitiveElement - PE_IndicatorMenuCheckMark = ... # type: QStyle.PrimitiveElement - PE_IndicatorProgressChunk = ... # type: QStyle.PrimitiveElement - PE_IndicatorRadioButton = ... # type: QStyle.PrimitiveElement - PE_IndicatorSpinDown = ... # type: QStyle.PrimitiveElement - PE_IndicatorSpinMinus = ... # type: QStyle.PrimitiveElement - PE_IndicatorSpinPlus = ... # type: QStyle.PrimitiveElement - PE_IndicatorSpinUp = ... # type: QStyle.PrimitiveElement - PE_IndicatorToolBarHandle = ... # type: QStyle.PrimitiveElement - PE_IndicatorToolBarSeparator = ... # type: QStyle.PrimitiveElement - PE_PanelTipLabel = ... # type: QStyle.PrimitiveElement - PE_IndicatorTabTear = ... # type: QStyle.PrimitiveElement - PE_PanelScrollAreaCorner = ... # type: QStyle.PrimitiveElement - PE_Widget = ... # type: QStyle.PrimitiveElement - PE_IndicatorColumnViewArrow = ... # type: QStyle.PrimitiveElement - PE_FrameStatusBarItem = ... # type: QStyle.PrimitiveElement - PE_IndicatorItemViewItemCheck = ... # type: QStyle.PrimitiveElement - PE_IndicatorItemViewItemDrop = ... # type: QStyle.PrimitiveElement - PE_PanelItemViewItem = ... # type: QStyle.PrimitiveElement - PE_PanelItemViewRow = ... # type: QStyle.PrimitiveElement - PE_PanelStatusBar = ... # type: QStyle.PrimitiveElement - PE_IndicatorTabClose = ... # type: QStyle.PrimitiveElement - PE_PanelMenu = ... # type: QStyle.PrimitiveElement - PE_IndicatorTabTearLeft = ... # type: QStyle.PrimitiveElement - PE_IndicatorTabTearRight = ... # type: QStyle.PrimitiveElement - PE_CustomBase = ... # type: QStyle.PrimitiveElement - - class StateFlag(enum.Flag): - State_None = ... # type: QStyle.StateFlag - State_Enabled = ... # type: QStyle.StateFlag - State_Raised = ... # type: QStyle.StateFlag - State_Sunken = ... # type: QStyle.StateFlag - State_Off = ... # type: QStyle.StateFlag - State_NoChange = ... # type: QStyle.StateFlag - State_On = ... # type: QStyle.StateFlag - State_DownArrow = ... # type: QStyle.StateFlag - State_Horizontal = ... # type: QStyle.StateFlag - State_HasFocus = ... # type: QStyle.StateFlag - State_Top = ... # type: QStyle.StateFlag - State_Bottom = ... # type: QStyle.StateFlag - State_FocusAtBorder = ... # type: QStyle.StateFlag - State_AutoRaise = ... # type: QStyle.StateFlag - State_MouseOver = ... # type: QStyle.StateFlag - State_UpArrow = ... # type: QStyle.StateFlag - State_Selected = ... # type: QStyle.StateFlag - State_Active = ... # type: QStyle.StateFlag - State_Open = ... # type: QStyle.StateFlag - State_Children = ... # type: QStyle.StateFlag - State_Item = ... # type: QStyle.StateFlag - State_Sibling = ... # type: QStyle.StateFlag - State_Editing = ... # type: QStyle.StateFlag - State_KeyboardFocusChange = ... # type: QStyle.StateFlag - State_ReadOnly = ... # type: QStyle.StateFlag - State_Window = ... # type: QStyle.StateFlag - State_Small = ... # type: QStyle.StateFlag - State_Mini = ... # type: QStyle.StateFlag - - def __init__(self) -> None: ... - - def name(self) -> str: ... - def proxy(self) -> typing.Optional['QStyle']: ... - def combinedLayoutSpacing(self, controls1: 'QSizePolicy.ControlType', controls2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - @staticmethod - def alignedRect(direction: QtCore.Qt.LayoutDirection, alignment: QtCore.Qt.AlignmentFlag, size: QtCore.QSize, rectangle: QtCore.QRect) -> QtCore.QRect: ... - @staticmethod - def visualAlignment(direction: QtCore.Qt.LayoutDirection, alignment: QtCore.Qt.AlignmentFlag) -> QtCore.Qt.AlignmentFlag: ... - @staticmethod - def sliderValueFromPosition(min: int, max: int, position: int, span: int, upsideDown: bool = ...) -> int: ... - @staticmethod - def sliderPositionFromValue(min: int, max: int, logicalValue: int, span: int, upsideDown: bool = ...) -> int: ... - @staticmethod - def visualPos(direction: QtCore.Qt.LayoutDirection, boundingRect: QtCore.QRect, logicalPos: QtCore.QPoint) -> QtCore.QPoint: ... - @staticmethod - def visualRect(direction: QtCore.Qt.LayoutDirection, boundingRect: QtCore.QRect, logicalRect: QtCore.QRect) -> QtCore.QRect: ... - def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... - def standardIcon(self, standardIcon: 'QStyle.StandardPixmap', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... - def standardPixmap(self, standardPixmap: 'QStyle.StandardPixmap', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... - def styleHint(self, stylehint: 'QStyle.StyleHint', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... - def sizeFromContents(self, ct: 'QStyle.ContentsType', opt: typing.Optional['QStyleOption'], contentsSize: QtCore.QSize, widget: typing.Optional[QWidget] = ...) -> QtCore.QSize: ... - def pixelMetric(self, metric: 'QStyle.PixelMetric', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def subControlRect(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], sc: 'QStyle.SubControl', widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... - def hitTestComplexControl(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], pt: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> 'QStyle.SubControl': ... - def drawComplexControl(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def subElementRect(self, subElement: 'QStyle.SubElement', option: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... - def drawControl(self, element: 'QStyle.ControlElement', opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def drawPrimitive(self, pe: 'QStyle.PrimitiveElement', opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def standardPalette(self) -> QtGui.QPalette: ... - def drawItemPixmap(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, alignment: int, pixmap: QtGui.QPixmap) -> None: ... - def drawItemText(self, painter: typing.Optional[QtGui.QPainter], rectangle: QtCore.QRect, alignment: int, palette: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... - def itemPixmapRect(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> QtCore.QRect: ... - def itemTextRect(self, fm: QtGui.QFontMetrics, r: QtCore.QRect, flags: int, enabled: bool, text: typing.Optional[str]) -> QtCore.QRect: ... - @typing.overload - def unpolish(self, a0: typing.Optional[QWidget]) -> None: ... - @typing.overload - def unpolish(self, a0: typing.Optional[QApplication]) -> None: ... - @typing.overload - def polish(self, a0: typing.Optional[QWidget]) -> None: ... - @typing.overload - def polish(self, a0: typing.Optional[QApplication]) -> None: ... - @typing.overload - def polish(self, a0: QtGui.QPalette) -> QtGui.QPalette: ... - - -class QCommonStyle(QStyle): - - def __init__(self) -> None: ... - - def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def standardIcon(self, standardIcon: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... - def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... - def standardPixmap(self, sp: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... - def styleHint(self, sh: QStyle.StyleHint, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... - def pixelMetric(self, m: QStyle.PixelMetric, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def sizeFromContents(self, ct: QStyle.ContentsType, opt: typing.Optional['QStyleOption'], contentsSize: QtCore.QSize, widget: typing.Optional[QWidget] = ...) -> QtCore.QSize: ... - def subControlRect(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], sc: QStyle.SubControl, widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... - def hitTestComplexControl(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], pt: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> QStyle.SubControl: ... - def drawComplexControl(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def subElementRect(self, r: QStyle.SubElement, opt: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... - def drawControl(self, element: QStyle.ControlElement, opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def drawPrimitive(self, pe: QStyle.PrimitiveElement, opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def unpolish(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def unpolish(self, application: typing.Optional[QApplication]) -> None: ... - @typing.overload - def polish(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def polish(self, app: typing.Optional[QApplication]) -> None: ... - @typing.overload - def polish(self, a0: QtGui.QPalette) -> QtGui.QPalette: ... - - -class QCompleter(QtCore.QObject): - - class ModelSorting(enum.Enum): - UnsortedModel = ... # type: QCompleter.ModelSorting - CaseSensitivelySortedModel = ... # type: QCompleter.ModelSorting - CaseInsensitivelySortedModel = ... # type: QCompleter.ModelSorting - - class CompletionMode(enum.Enum): - PopupCompletion = ... # type: QCompleter.CompletionMode - UnfilteredPopupCompletion = ... # type: QCompleter.CompletionMode - InlineCompletion = ... # type: QCompleter.CompletionMode - - @typing.overload - def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, list: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def filterMode(self) -> QtCore.Qt.MatchFlag: ... - def setFilterMode(self, filterMode: QtCore.Qt.MatchFlag) -> None: ... - def setMaxVisibleItems(self, maxItems: int) -> None: ... - def maxVisibleItems(self) -> int: ... - highlighted: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def eventFilter(self, o: typing.Optional[QtCore.QObject], e: typing.Optional[QtCore.QEvent]) -> bool: ... - def setWrapAround(self, wrap: bool) -> None: ... - def setCompletionPrefix(self, prefix: typing.Optional[str]) -> None: ... - def complete(self, rect: QtCore.QRect = ...) -> None: ... - def wrapAround(self) -> bool: ... - def splitPath(self, path: typing.Optional[str]) -> typing.List[str]: ... - def pathFromIndex(self, index: QtCore.QModelIndex) -> str: ... - def completionPrefix(self) -> str: ... - def completionModel(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - def currentCompletion(self) -> str: ... - def currentIndex(self) -> QtCore.QModelIndex: ... - def currentRow(self) -> int: ... - def setCurrentRow(self, row: int) -> bool: ... - def completionCount(self) -> int: ... - def completionRole(self) -> int: ... - def setCompletionRole(self, role: int) -> None: ... - def completionColumn(self) -> int: ... - def setCompletionColumn(self, column: int) -> None: ... - def modelSorting(self) -> 'QCompleter.ModelSorting': ... - def setModelSorting(self, sorting: 'QCompleter.ModelSorting') -> None: ... - def caseSensitivity(self) -> QtCore.Qt.CaseSensitivity: ... - def setCaseSensitivity(self, caseSensitivity: QtCore.Qt.CaseSensitivity) -> None: ... - def setPopup(self, popup: typing.Optional[QAbstractItemView]) -> None: ... - def popup(self) -> typing.Optional[QAbstractItemView]: ... - def completionMode(self) -> 'QCompleter.CompletionMode': ... - def setCompletionMode(self, mode: 'QCompleter.CompletionMode') -> None: ... - def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - def setModel(self, c: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - def widget(self) -> typing.Optional[QWidget]: ... - def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... - - -class QDataWidgetMapper(QtCore.QObject): - - class SubmitPolicy(enum.Enum): - AutoSubmit = ... # type: QDataWidgetMapper.SubmitPolicy - ManualSubmit = ... # type: QDataWidgetMapper.SubmitPolicy - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - currentIndexChanged: typing.ClassVar[QtCore.pyqtSignal] - def toPrevious(self) -> None: ... - def toNext(self) -> None: ... - def toLast(self) -> None: ... - def toFirst(self) -> None: ... - def submit(self) -> bool: ... - def setCurrentModelIndex(self, index: QtCore.QModelIndex) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - def revert(self) -> None: ... - def currentIndex(self) -> int: ... - def clearMapping(self) -> None: ... - def mappedWidgetAt(self, section: int) -> typing.Optional[QWidget]: ... - def mappedSection(self, widget: typing.Optional[QWidget]) -> int: ... - def mappedPropertyName(self, widget: typing.Optional[QWidget]) -> QtCore.QByteArray: ... - def removeMapping(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def addMapping(self, widget: typing.Optional[QWidget], section: int) -> None: ... - @typing.overload - def addMapping(self, widget: typing.Optional[QWidget], section: int, propertyName: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> None: ... - def submitPolicy(self) -> 'QDataWidgetMapper.SubmitPolicy': ... - def setSubmitPolicy(self, policy: 'QDataWidgetMapper.SubmitPolicy') -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, aOrientation: QtCore.Qt.Orientation) -> None: ... - def rootIndex(self) -> QtCore.QModelIndex: ... - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... - def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - - -class QDateTimeEdit(QAbstractSpinBox): - - class Section(enum.Flag): - NoSection = ... # type: QDateTimeEdit.Section - AmPmSection = ... # type: QDateTimeEdit.Section - MSecSection = ... # type: QDateTimeEdit.Section - SecondSection = ... # type: QDateTimeEdit.Section - MinuteSection = ... # type: QDateTimeEdit.Section - HourSection = ... # type: QDateTimeEdit.Section - DaySection = ... # type: QDateTimeEdit.Section - MonthSection = ... # type: QDateTimeEdit.Section - YearSection = ... # type: QDateTimeEdit.Section - TimeSections_Mask = ... # type: QDateTimeEdit.Section - DateSections_Mask = ... # type: QDateTimeEdit.Section - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, datetime: typing.Union[QtCore.QDateTime, datetime.datetime], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, d: typing.Union[QtCore.QDate, datetime.date], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, t: typing.Union[QtCore.QTime, datetime.time], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setTimeZone(self, zone: QtCore.QTimeZone) -> None: ... - def timeZone(self) -> QtCore.QTimeZone: ... - def setCalendar(self, calendar: QtCore.QCalendar) -> None: ... - def calendar(self) -> QtCore.QCalendar: ... - def setTimeSpec(self, spec: QtCore.Qt.TimeSpec) -> None: ... - def timeSpec(self) -> QtCore.Qt.TimeSpec: ... - def setCalendarWidget(self, calendarWidget: typing.Optional[QCalendarWidget]) -> None: ... - def calendarWidget(self) -> typing.Optional[QCalendarWidget]: ... - def setDateTimeRange(self, min: typing.Union[QtCore.QDateTime, datetime.datetime], max: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def setMaximumDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def clearMaximumDateTime(self) -> None: ... - def maximumDateTime(self) -> QtCore.QDateTime: ... - def setMinimumDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - def clearMinimumDateTime(self) -> None: ... - def minimumDateTime(self) -> QtCore.QDateTime: ... - def stepEnabled(self) -> QAbstractSpinBox.StepEnabledFlag: ... - def textFromDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> str: ... - def dateTimeFromText(self, text: typing.Optional[str]) -> QtCore.QDateTime: ... - def fixup(self, input: typing.Optional[str]) -> str: ... - def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionSpinBox']) -> None: ... - def setTime(self, time: typing.Union[QtCore.QTime, datetime.time]) -> None: ... - def setDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def setDateTime(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... - dateChanged: typing.ClassVar[QtCore.pyqtSignal] - timeChanged: typing.ClassVar[QtCore.pyqtSignal] - dateTimeChanged: typing.ClassVar[QtCore.pyqtSignal] - def sectionCount(self) -> int: ... - def setCurrentSectionIndex(self, index: int) -> None: ... - def currentSectionIndex(self) -> int: ... - def sectionAt(self, index: int) -> 'QDateTimeEdit.Section': ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def stepBy(self, steps: int) -> None: ... - def clear(self) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def setSelectedSection(self, section: 'QDateTimeEdit.Section') -> None: ... - def setCalendarPopup(self, enable: bool) -> None: ... - def calendarPopup(self) -> bool: ... - def setDisplayFormat(self, format: typing.Optional[str]) -> None: ... - def displayFormat(self) -> str: ... - def sectionText(self, s: 'QDateTimeEdit.Section') -> str: ... - def setCurrentSection(self, section: 'QDateTimeEdit.Section') -> None: ... - def currentSection(self) -> 'QDateTimeEdit.Section': ... - def displayedSections(self) -> 'QDateTimeEdit.Section': ... - def setTimeRange(self, min: typing.Union[QtCore.QTime, datetime.time], max: typing.Union[QtCore.QTime, datetime.time]) -> None: ... - def clearMaximumTime(self) -> None: ... - def setMaximumTime(self, max: typing.Union[QtCore.QTime, datetime.time]) -> None: ... - def maximumTime(self) -> QtCore.QTime: ... - def clearMinimumTime(self) -> None: ... - def setMinimumTime(self, min: typing.Union[QtCore.QTime, datetime.time]) -> None: ... - def minimumTime(self) -> QtCore.QTime: ... - def setDateRange(self, min: typing.Union[QtCore.QDate, datetime.date], max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def clearMaximumDate(self) -> None: ... - def setMaximumDate(self, max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def maximumDate(self) -> QtCore.QDate: ... - def clearMinimumDate(self) -> None: ... - def setMinimumDate(self, min: typing.Union[QtCore.QDate, datetime.date]) -> None: ... - def minimumDate(self) -> QtCore.QDate: ... - def time(self) -> QtCore.QTime: ... - def date(self) -> QtCore.QDate: ... - def dateTime(self) -> QtCore.QDateTime: ... - - -class QTimeEdit(QDateTimeEdit): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, time: typing.Union[QtCore.QTime, datetime.time], parent: typing.Optional[QWidget] = ...) -> None: ... - - -class QDateEdit(QDateTimeEdit): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, date: typing.Union[QtCore.QDate, datetime.date], parent: typing.Optional[QWidget] = ...) -> None: ... - - -class QDial(QAbstractSlider): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def sliderChange(self, change: QAbstractSlider.SliderChange) -> None: ... - def mouseMoveEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, pe: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, re: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... - def setWrapping(self, on: bool) -> None: ... - def setNotchesVisible(self, visible: bool) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def notchesVisible(self) -> bool: ... - def notchTarget(self) -> float: ... - def setNotchTarget(self, target: float) -> None: ... - def notchSize(self) -> int: ... - def wrapping(self) -> bool: ... - - -class QDialogButtonBox(QWidget): - - class StandardButton(enum.Flag): - NoButton = ... # type: QDialogButtonBox.StandardButton - Ok = ... # type: QDialogButtonBox.StandardButton - Save = ... # type: QDialogButtonBox.StandardButton - SaveAll = ... # type: QDialogButtonBox.StandardButton - Open = ... # type: QDialogButtonBox.StandardButton - Yes = ... # type: QDialogButtonBox.StandardButton - YesToAll = ... # type: QDialogButtonBox.StandardButton - No = ... # type: QDialogButtonBox.StandardButton - NoToAll = ... # type: QDialogButtonBox.StandardButton - Abort = ... # type: QDialogButtonBox.StandardButton - Retry = ... # type: QDialogButtonBox.StandardButton - Ignore = ... # type: QDialogButtonBox.StandardButton - Close = ... # type: QDialogButtonBox.StandardButton - Cancel = ... # type: QDialogButtonBox.StandardButton - Discard = ... # type: QDialogButtonBox.StandardButton - Help = ... # type: QDialogButtonBox.StandardButton - Apply = ... # type: QDialogButtonBox.StandardButton - Reset = ... # type: QDialogButtonBox.StandardButton - RestoreDefaults = ... # type: QDialogButtonBox.StandardButton - - class ButtonRole(enum.Enum): - InvalidRole = ... # type: QDialogButtonBox.ButtonRole - AcceptRole = ... # type: QDialogButtonBox.ButtonRole - RejectRole = ... # type: QDialogButtonBox.ButtonRole - DestructiveRole = ... # type: QDialogButtonBox.ButtonRole - ActionRole = ... # type: QDialogButtonBox.ButtonRole - HelpRole = ... # type: QDialogButtonBox.ButtonRole - YesRole = ... # type: QDialogButtonBox.ButtonRole - NoRole = ... # type: QDialogButtonBox.ButtonRole - ResetRole = ... # type: QDialogButtonBox.ButtonRole - ApplyRole = ... # type: QDialogButtonBox.ButtonRole - - class ButtonLayout(enum.Enum): - WinLayout = ... # type: QDialogButtonBox.ButtonLayout - MacLayout = ... # type: QDialogButtonBox.ButtonLayout - KdeLayout = ... # type: QDialogButtonBox.ButtonLayout - GnomeLayout = ... # type: QDialogButtonBox.ButtonLayout - AndroidLayout = ... # type: QDialogButtonBox.ButtonLayout - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, buttons: 'QDialogButtonBox.StandardButton', parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, buttons: 'QDialogButtonBox.StandardButton', orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - rejected: typing.ClassVar[QtCore.pyqtSignal] - helpRequested: typing.ClassVar[QtCore.pyqtSignal] - clicked: typing.ClassVar[QtCore.pyqtSignal] - accepted: typing.ClassVar[QtCore.pyqtSignal] - def centerButtons(self) -> bool: ... - def setCenterButtons(self, center: bool) -> None: ... - def button(self, which: 'QDialogButtonBox.StandardButton') -> typing.Optional[QPushButton]: ... - def standardButton(self, button: typing.Optional[QAbstractButton]) -> 'QDialogButtonBox.StandardButton': ... - def standardButtons(self) -> 'QDialogButtonBox.StandardButton': ... - def setStandardButtons(self, buttons: 'QDialogButtonBox.StandardButton') -> None: ... - def buttonRole(self, button: typing.Optional[QAbstractButton]) -> 'QDialogButtonBox.ButtonRole': ... - def buttons(self) -> typing.List[QAbstractButton]: ... - def clear(self) -> None: ... - def removeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... - @typing.overload - def addButton(self, button: typing.Optional[QAbstractButton], role: 'QDialogButtonBox.ButtonRole') -> None: ... - @typing.overload - def addButton(self, text: typing.Optional[str], role: 'QDialogButtonBox.ButtonRole') -> typing.Optional[QPushButton]: ... - @typing.overload - def addButton(self, button: 'QDialogButtonBox.StandardButton') -> typing.Optional[QPushButton]: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... - - -class QDockWidget(QWidget): - - class DockWidgetFeature(enum.Flag): - DockWidgetClosable = ... # type: QDockWidget.DockWidgetFeature - DockWidgetMovable = ... # type: QDockWidget.DockWidgetFeature - DockWidgetFloatable = ... # type: QDockWidget.DockWidgetFeature - DockWidgetVerticalTitleBar = ... # type: QDockWidget.DockWidgetFeature - NoDockWidgetFeatures = ... # type: QDockWidget.DockWidgetFeature - - @typing.overload - def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def closeEvent(self, event: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionDockWidget']) -> None: ... - visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] - dockLocationChanged: typing.ClassVar[QtCore.pyqtSignal] - allowedAreasChanged: typing.ClassVar[QtCore.pyqtSignal] - topLevelChanged: typing.ClassVar[QtCore.pyqtSignal] - featuresChanged: typing.ClassVar[QtCore.pyqtSignal] - def titleBarWidget(self) -> typing.Optional[QWidget]: ... - def setTitleBarWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def toggleViewAction(self) -> typing.Optional[QtGui.QAction]: ... - def isAreaAllowed(self, area: QtCore.Qt.DockWidgetArea) -> bool: ... - def allowedAreas(self) -> QtCore.Qt.DockWidgetArea: ... - def setAllowedAreas(self, areas: QtCore.Qt.DockWidgetArea) -> None: ... - def isFloating(self) -> bool: ... - def setFloating(self, floating: bool) -> None: ... - def features(self) -> 'QDockWidget.DockWidgetFeature': ... - def setFeatures(self, features: 'QDockWidget.DockWidgetFeature') -> None: ... - def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def widget(self) -> typing.Optional[QWidget]: ... - - -class QErrorMessage(QDialog): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def done(self, a0: int) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - @typing.overload - def showMessage(self, message: typing.Optional[str]) -> None: ... - @typing.overload - def showMessage(self, message: typing.Optional[str], type: typing.Optional[str]) -> None: ... - @staticmethod - def qtHandler() -> typing.Optional['QErrorMessage']: ... - - -class QFileDialog(QDialog): - - class Option(enum.Flag): - ShowDirsOnly = ... # type: QFileDialog.Option - DontResolveSymlinks = ... # type: QFileDialog.Option - DontConfirmOverwrite = ... # type: QFileDialog.Option - DontUseNativeDialog = ... # type: QFileDialog.Option - ReadOnly = ... # type: QFileDialog.Option - HideNameFilterDetails = ... # type: QFileDialog.Option - DontUseCustomDirectoryIcons = ... # type: QFileDialog.Option - - class DialogLabel(enum.Enum): - LookIn = ... # type: QFileDialog.DialogLabel - FileName = ... # type: QFileDialog.DialogLabel - FileType = ... # type: QFileDialog.DialogLabel - Accept = ... # type: QFileDialog.DialogLabel - Reject = ... # type: QFileDialog.DialogLabel - - class AcceptMode(enum.Enum): - AcceptOpen = ... # type: QFileDialog.AcceptMode - AcceptSave = ... # type: QFileDialog.AcceptMode - - class FileMode(enum.Enum): - AnyFile = ... # type: QFileDialog.FileMode - ExistingFile = ... # type: QFileDialog.FileMode - Directory = ... # type: QFileDialog.FileMode - ExistingFiles = ... # type: QFileDialog.FileMode - - class ViewMode(enum.Enum): - Detail = ... # type: QFileDialog.ViewMode - List = ... # type: QFileDialog.ViewMode - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget], f: QtCore.Qt.WindowType) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ...) -> None: ... - - @typing.overload - @staticmethod - def saveFileContent(fileContent: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], fileNameHint: typing.Optional[str] = ...) -> None: ... - @typing.overload - @staticmethod - def saveFileContent(fileContent: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], fileNameHint: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - def selectedMimeTypeFilter(self) -> str: ... - def supportedSchemes(self) -> typing.List[str]: ... - def setSupportedSchemes(self, schemes: typing.Iterable[typing.Optional[str]]) -> None: ... - @staticmethod - def getSaveFileUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[QtCore.QUrl, str]: ... - @staticmethod - def getOpenFileUrls(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[typing.List[QtCore.QUrl], str]: ... - @staticmethod - def getOpenFileUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[QtCore.QUrl, str]: ... - directoryUrlEntered: typing.ClassVar[QtCore.pyqtSignal] - currentUrlChanged: typing.ClassVar[QtCore.pyqtSignal] - urlsSelected: typing.ClassVar[QtCore.pyqtSignal] - urlSelected: typing.ClassVar[QtCore.pyqtSignal] - def selectMimeTypeFilter(self, filter: typing.Optional[str]) -> None: ... - def mimeTypeFilters(self) -> typing.List[str]: ... - def setMimeTypeFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... - def selectedUrls(self) -> typing.List[QtCore.QUrl]: ... - def selectUrl(self, url: QtCore.QUrl) -> None: ... - def directoryUrl(self) -> QtCore.QUrl: ... - def setDirectoryUrl(self, directory: QtCore.QUrl) -> None: ... - def setVisible(self, visible: bool) -> None: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def options(self) -> 'QFileDialog.Option': ... - def setOptions(self, options: 'QFileDialog.Option') -> None: ... - def testOption(self, option: 'QFileDialog.Option') -> bool: ... - def setOption(self, option: 'QFileDialog.Option', on: bool = ...) -> None: ... - def setFilter(self, filters: QtCore.QDir.Filter) -> None: ... - def filter(self) -> QtCore.QDir.Filter: ... - def selectedNameFilter(self) -> str: ... - def selectNameFilter(self, filter: typing.Optional[str]) -> None: ... - def nameFilters(self) -> typing.List[str]: ... - def setNameFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... - def setNameFilter(self, filter: typing.Optional[str]) -> None: ... - def proxyModel(self) -> typing.Optional[QtCore.QAbstractProxyModel]: ... - def setProxyModel(self, model: typing.Optional[QtCore.QAbstractProxyModel]) -> None: ... - def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def saveState(self) -> QtCore.QByteArray: ... - def sidebarUrls(self) -> typing.List[QtCore.QUrl]: ... - def setSidebarUrls(self, urls: typing.Iterable[QtCore.QUrl]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def accept(self) -> None: ... - def done(self, result: int) -> None: ... - @staticmethod - def getSaveFileName(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ...) -> typing.Tuple[str, str]: ... - @staticmethod - def getOpenFileNames(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ...) -> typing.Tuple[typing.List[str], str]: ... - @staticmethod - def getOpenFileName(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ...) -> typing.Tuple[str, str]: ... - @staticmethod - def getExistingDirectoryUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., options: 'QFileDialog.Option' = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> QtCore.QUrl: ... - @staticmethod - def getExistingDirectory(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., options: 'QFileDialog.Option' = ...) -> str: ... - fileSelected: typing.ClassVar[QtCore.pyqtSignal] - filterSelected: typing.ClassVar[QtCore.pyqtSignal] - filesSelected: typing.ClassVar[QtCore.pyqtSignal] - directoryEntered: typing.ClassVar[QtCore.pyqtSignal] - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - def labelText(self, label: 'QFileDialog.DialogLabel') -> str: ... - def setLabelText(self, label: 'QFileDialog.DialogLabel', text: typing.Optional[str]) -> None: ... - def iconProvider(self) -> typing.Optional[QtGui.QAbstractFileIconProvider]: ... - def setIconProvider(self, provider: typing.Optional[QtGui.QAbstractFileIconProvider]) -> None: ... - def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... - def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... - def history(self) -> typing.List[str]: ... - def setHistory(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... - def defaultSuffix(self) -> str: ... - def setDefaultSuffix(self, suffix: typing.Optional[str]) -> None: ... - def acceptMode(self) -> 'QFileDialog.AcceptMode': ... - def setAcceptMode(self, mode: 'QFileDialog.AcceptMode') -> None: ... - def fileMode(self) -> 'QFileDialog.FileMode': ... - def setFileMode(self, mode: 'QFileDialog.FileMode') -> None: ... - def viewMode(self) -> 'QFileDialog.ViewMode': ... - def setViewMode(self, mode: 'QFileDialog.ViewMode') -> None: ... - def selectedFiles(self) -> typing.List[str]: ... - def selectFile(self, filename: typing.Optional[str]) -> None: ... - def directory(self) -> QtCore.QDir: ... - @typing.overload - def setDirectory(self, directory: typing.Optional[str]) -> None: ... - @typing.overload - def setDirectory(self, adirectory: QtCore.QDir) -> None: ... - - -class QFileIconProvider(QtGui.QAbstractFileIconProvider): - - def __init__(self) -> None: ... - - @typing.overload - def icon(self, type: QtGui.QAbstractFileIconProvider.IconType) -> QtGui.QIcon: ... - @typing.overload - def icon(self, info: QtCore.QFileInfo) -> QtGui.QIcon: ... - - -class QFocusFrame(QWidget): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOption']) -> None: ... - def widget(self) -> typing.Optional[QWidget]: ... - def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... - - -class QFontComboBox(QComboBox): - - class FontFilter(enum.Flag): - AllFonts = ... # type: QFontComboBox.FontFilter - ScalableFonts = ... # type: QFontComboBox.FontFilter - NonScalableFonts = ... # type: QFontComboBox.FontFilter - MonospacedFonts = ... # type: QFontComboBox.FontFilter - ProportionalFonts = ... # type: QFontComboBox.FontFilter - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def displayFont(self, fontFamily: typing.Optional[str]) -> typing.Optional[QtGui.QFont]: ... - def setDisplayFont(self, fontFamily: typing.Optional[str], font: QtGui.QFont) -> None: ... - def sampleTextForFont(self, fontFamily: typing.Optional[str]) -> str: ... - def setSampleTextForFont(self, fontFamily: typing.Optional[str], sampleText: typing.Optional[str]) -> None: ... - def sampleTextForSystem(self, writingSystem: QtGui.QFontDatabase.WritingSystem) -> str: ... - def setSampleTextForSystem(self, writingSystem: QtGui.QFontDatabase.WritingSystem, sampleText: typing.Optional[str]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - currentFontChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentFont(self, f: QtGui.QFont) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def currentFont(self) -> QtGui.QFont: ... - def setFontFilters(self, filters: 'QFontComboBox.FontFilter') -> None: ... - def writingSystem(self) -> QtGui.QFontDatabase.WritingSystem: ... - def setWritingSystem(self, a0: QtGui.QFontDatabase.WritingSystem) -> None: ... - def fontFilters(self) -> 'QFontComboBox.FontFilter': ... - - -class QFontDialog(QDialog): - - class FontDialogOption(enum.Flag): - NoButtons = ... # type: QFontDialog.FontDialogOption - DontUseNativeDialog = ... # type: QFontDialog.FontDialogOption - ScalableFonts = ... # type: QFontDialog.FontDialogOption - NonScalableFonts = ... # type: QFontDialog.FontDialogOption - MonospacedFonts = ... # type: QFontDialog.FontDialogOption - ProportionalFonts = ... # type: QFontDialog.FontDialogOption - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, initial: QtGui.QFont, parent: typing.Optional[QWidget] = ...) -> None: ... - - fontSelected: typing.ClassVar[QtCore.pyqtSignal] - currentFontChanged: typing.ClassVar[QtCore.pyqtSignal] - def setVisible(self, visible: bool) -> None: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def options(self) -> 'QFontDialog.FontDialogOption': ... - def setOptions(self, options: 'QFontDialog.FontDialogOption') -> None: ... - def testOption(self, option: 'QFontDialog.FontDialogOption') -> bool: ... - def setOption(self, option: 'QFontDialog.FontDialogOption', on: bool = ...) -> None: ... - def selectedFont(self) -> QtGui.QFont: ... - def currentFont(self) -> QtGui.QFont: ... - def setCurrentFont(self, font: QtGui.QFont) -> None: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def done(self, result: int) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - @typing.overload - @staticmethod - def getFont(initial: QtGui.QFont, parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., options: 'QFontDialog.FontDialogOption' = ...) -> typing.Tuple[QtGui.QFont, typing.Optional[bool]]: ... - @typing.overload - @staticmethod - def getFont(parent: typing.Optional[QWidget] = ...) -> typing.Tuple[QtGui.QFont, typing.Optional[bool]]: ... - - -class QFormLayout(QLayout): - - class ItemRole(enum.Enum): - LabelRole = ... # type: QFormLayout.ItemRole - FieldRole = ... # type: QFormLayout.ItemRole - SpanningRole = ... # type: QFormLayout.ItemRole - - class RowWrapPolicy(enum.Enum): - DontWrapRows = ... # type: QFormLayout.RowWrapPolicy - WrapLongRows = ... # type: QFormLayout.RowWrapPolicy - WrapAllRows = ... # type: QFormLayout.RowWrapPolicy - - class FieldGrowthPolicy(enum.Enum): - FieldsStayAtSizeHint = ... # type: QFormLayout.FieldGrowthPolicy - ExpandingFieldsGrow = ... # type: QFormLayout.FieldGrowthPolicy - AllNonFixedFieldsGrow = ... # type: QFormLayout.FieldGrowthPolicy - - class TakeRowResult(PyQt6.sip.simplewrapper): - - fieldItem = ... # type: QLayoutItem - labelItem = ... # type: QLayoutItem - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QFormLayout.TakeRowResult') -> None: ... - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - @typing.overload - def isRowVisible(self, layout: typing.Optional[QLayout]) -> bool: ... - @typing.overload - def isRowVisible(self, widget: typing.Optional[QWidget]) -> bool: ... - @typing.overload - def isRowVisible(self, row: int) -> bool: ... - @typing.overload - def setRowVisible(self, layout: typing.Optional[QLayout], on: bool) -> None: ... - @typing.overload - def setRowVisible(self, widget: typing.Optional[QWidget], on: bool) -> None: ... - @typing.overload - def setRowVisible(self, row: int, on: bool) -> None: ... - @typing.overload - def takeRow(self, row: int) -> 'QFormLayout.TakeRowResult': ... - @typing.overload - def takeRow(self, widget: typing.Optional[QWidget]) -> 'QFormLayout.TakeRowResult': ... - @typing.overload - def takeRow(self, layout: typing.Optional[QLayout]) -> 'QFormLayout.TakeRowResult': ... - @typing.overload - def removeRow(self, row: int) -> None: ... - @typing.overload - def removeRow(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def removeRow(self, layout: typing.Optional[QLayout]) -> None: ... - def rowCount(self) -> int: ... - def count(self) -> int: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def heightForWidth(self, width: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def invalidate(self) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def setGeometry(self, rect: QtCore.QRect) -> None: ... - def takeAt(self, index: int) -> typing.Optional[QLayoutItem]: ... - def addItem(self, item: typing.Optional[QLayoutItem]) -> None: ... - @typing.overload - def labelForField(self, field: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - @typing.overload - def labelForField(self, field: typing.Optional[QLayout]) -> typing.Optional[QWidget]: ... - def getLayoutPosition(self, layout: typing.Optional[QLayout]) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... - def getWidgetPosition(self, widget: typing.Optional[QWidget]) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... - def getItemPosition(self, index: int) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... - @typing.overload - def itemAt(self, row: int, role: 'QFormLayout.ItemRole') -> typing.Optional[QLayoutItem]: ... - @typing.overload - def itemAt(self, index: int) -> typing.Optional[QLayoutItem]: ... - def setLayout(self, row: int, role: 'QFormLayout.ItemRole', layout: typing.Optional[QLayout]) -> None: ... - def setWidget(self, row: int, role: 'QFormLayout.ItemRole', widget: typing.Optional[QWidget]) -> None: ... - def setItem(self, row: int, role: 'QFormLayout.ItemRole', item: typing.Optional[QLayoutItem]) -> None: ... - @typing.overload - def insertRow(self, row: int, label: typing.Optional[QWidget], field: typing.Optional[QWidget]) -> None: ... - @typing.overload - def insertRow(self, row: int, label: typing.Optional[QWidget], field: typing.Optional[QLayout]) -> None: ... - @typing.overload - def insertRow(self, row: int, labelText: typing.Optional[str], field: typing.Optional[QWidget]) -> None: ... - @typing.overload - def insertRow(self, row: int, labelText: typing.Optional[str], field: typing.Optional[QLayout]) -> None: ... - @typing.overload - def insertRow(self, row: int, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def insertRow(self, row: int, layout: typing.Optional[QLayout]) -> None: ... - @typing.overload - def addRow(self, label: typing.Optional[QWidget], field: typing.Optional[QWidget]) -> None: ... - @typing.overload - def addRow(self, label: typing.Optional[QWidget], field: typing.Optional[QLayout]) -> None: ... - @typing.overload - def addRow(self, labelText: typing.Optional[str], field: typing.Optional[QWidget]) -> None: ... - @typing.overload - def addRow(self, labelText: typing.Optional[str], field: typing.Optional[QLayout]) -> None: ... - @typing.overload - def addRow(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def addRow(self, layout: typing.Optional[QLayout]) -> None: ... - def setSpacing(self, a0: int) -> None: ... - def spacing(self) -> int: ... - def verticalSpacing(self) -> int: ... - def setVerticalSpacing(self, spacing: int) -> None: ... - def horizontalSpacing(self) -> int: ... - def setHorizontalSpacing(self, spacing: int) -> None: ... - def formAlignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setFormAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def labelAlignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setLabelAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def rowWrapPolicy(self) -> 'QFormLayout.RowWrapPolicy': ... - def setRowWrapPolicy(self, policy: 'QFormLayout.RowWrapPolicy') -> None: ... - def fieldGrowthPolicy(self) -> 'QFormLayout.FieldGrowthPolicy': ... - def setFieldGrowthPolicy(self, policy: 'QFormLayout.FieldGrowthPolicy') -> None: ... - - -class QGesture(QtCore.QObject): - - class GestureCancelPolicy(enum.Enum): - CancelNone = ... # type: QGesture.GestureCancelPolicy - CancelAllInContext = ... # type: QGesture.GestureCancelPolicy - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def gestureCancelPolicy(self) -> 'QGesture.GestureCancelPolicy': ... - def setGestureCancelPolicy(self, policy: 'QGesture.GestureCancelPolicy') -> None: ... - def unsetHotSpot(self) -> None: ... - def hasHotSpot(self) -> bool: ... - def setHotSpot(self, value: QtCore.QPointF) -> None: ... - def hotSpot(self) -> QtCore.QPointF: ... - def state(self) -> QtCore.Qt.GestureState: ... - def gestureType(self) -> QtCore.Qt.GestureType: ... - - -class QPanGesture(QGesture): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setAcceleration(self, value: float) -> None: ... - def setOffset(self, value: QtCore.QPointF) -> None: ... - def setLastOffset(self, value: QtCore.QPointF) -> None: ... - def acceleration(self) -> float: ... - def delta(self) -> QtCore.QPointF: ... - def offset(self) -> QtCore.QPointF: ... - def lastOffset(self) -> QtCore.QPointF: ... - - -class QPinchGesture(QGesture): - - class ChangeFlag(enum.Flag): - ScaleFactorChanged = ... # type: QPinchGesture.ChangeFlag - RotationAngleChanged = ... # type: QPinchGesture.ChangeFlag - CenterPointChanged = ... # type: QPinchGesture.ChangeFlag - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setRotationAngle(self, value: float) -> None: ... - def setLastRotationAngle(self, value: float) -> None: ... - def setTotalRotationAngle(self, value: float) -> None: ... - def rotationAngle(self) -> float: ... - def lastRotationAngle(self) -> float: ... - def totalRotationAngle(self) -> float: ... - def setScaleFactor(self, value: float) -> None: ... - def setLastScaleFactor(self, value: float) -> None: ... - def setTotalScaleFactor(self, value: float) -> None: ... - def scaleFactor(self) -> float: ... - def lastScaleFactor(self) -> float: ... - def totalScaleFactor(self) -> float: ... - def setCenterPoint(self, value: QtCore.QPointF) -> None: ... - def setLastCenterPoint(self, value: QtCore.QPointF) -> None: ... - def setStartCenterPoint(self, value: QtCore.QPointF) -> None: ... - def centerPoint(self) -> QtCore.QPointF: ... - def lastCenterPoint(self) -> QtCore.QPointF: ... - def startCenterPoint(self) -> QtCore.QPointF: ... - def setChangeFlags(self, value: 'QPinchGesture.ChangeFlag') -> None: ... - def changeFlags(self) -> 'QPinchGesture.ChangeFlag': ... - def setTotalChangeFlags(self, value: 'QPinchGesture.ChangeFlag') -> None: ... - def totalChangeFlags(self) -> 'QPinchGesture.ChangeFlag': ... - - -class QSwipeGesture(QGesture): - - class SwipeDirection(enum.Enum): - NoDirection = ... # type: QSwipeGesture.SwipeDirection - Left = ... # type: QSwipeGesture.SwipeDirection - Right = ... # type: QSwipeGesture.SwipeDirection - Up = ... # type: QSwipeGesture.SwipeDirection - Down = ... # type: QSwipeGesture.SwipeDirection - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setSwipeAngle(self, value: float) -> None: ... - def swipeAngle(self) -> float: ... - def verticalDirection(self) -> 'QSwipeGesture.SwipeDirection': ... - def horizontalDirection(self) -> 'QSwipeGesture.SwipeDirection': ... - - -class QTapGesture(QGesture): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setPosition(self, pos: QtCore.QPointF) -> None: ... - def position(self) -> QtCore.QPointF: ... - - -class QTapAndHoldGesture(QGesture): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - @staticmethod - def timeout() -> int: ... - @staticmethod - def setTimeout(msecs: int) -> None: ... - def setPosition(self, pos: QtCore.QPointF) -> None: ... - def position(self) -> QtCore.QPointF: ... - - -class QGestureEvent(QtCore.QEvent): - - @typing.overload - def __init__(self, gestures: typing.Iterable[QGesture]) -> None: ... - @typing.overload - def __init__(self, a0: 'QGestureEvent') -> None: ... - - def mapToGraphicsScene(self, gesturePoint: QtCore.QPointF) -> QtCore.QPointF: ... - def widget(self) -> typing.Optional[QWidget]: ... - @typing.overload - def ignore(self) -> None: ... - @typing.overload - def ignore(self, a0: typing.Optional[QGesture]) -> None: ... - @typing.overload - def ignore(self, a0: QtCore.Qt.GestureType) -> None: ... - @typing.overload - def accept(self) -> None: ... - @typing.overload - def accept(self, a0: typing.Optional[QGesture]) -> None: ... - @typing.overload - def accept(self, a0: QtCore.Qt.GestureType) -> None: ... - @typing.overload - def isAccepted(self) -> bool: ... - @typing.overload - def isAccepted(self, a0: typing.Optional[QGesture]) -> bool: ... - @typing.overload - def isAccepted(self, a0: QtCore.Qt.GestureType) -> bool: ... - @typing.overload - def setAccepted(self, accepted: bool) -> None: ... - @typing.overload - def setAccepted(self, a0: typing.Optional[QGesture], a1: bool) -> None: ... - @typing.overload - def setAccepted(self, a0: QtCore.Qt.GestureType, a1: bool) -> None: ... - def canceledGestures(self) -> typing.List[QGesture]: ... - def activeGestures(self) -> typing.List[QGesture]: ... - def gesture(self, type: QtCore.Qt.GestureType) -> typing.Optional[QGesture]: ... - def gestures(self) -> typing.List[QGesture]: ... - - -class QGestureRecognizer(PyQt6.sip.wrapper): - - class ResultFlag(enum.Flag): - Ignore = ... # type: QGestureRecognizer.ResultFlag - MayBeGesture = ... # type: QGestureRecognizer.ResultFlag - TriggerGesture = ... # type: QGestureRecognizer.ResultFlag - FinishGesture = ... # type: QGestureRecognizer.ResultFlag - CancelGesture = ... # type: QGestureRecognizer.ResultFlag - ConsumeEventHint = ... # type: QGestureRecognizer.ResultFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QGestureRecognizer') -> None: ... - - @staticmethod - def unregisterRecognizer(type: QtCore.Qt.GestureType) -> None: ... - @staticmethod - def registerRecognizer(recognizer: typing.Optional['QGestureRecognizer']) -> QtCore.Qt.GestureType: ... - def reset(self, state: typing.Optional[QGesture]) -> None: ... - def recognize(self, state: typing.Optional[QGesture], watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> 'QGestureRecognizer.ResultFlag': ... - def create(self, target: typing.Optional[QtCore.QObject]) -> typing.Optional[QGesture]: ... - - -class QGraphicsAnchor(QtCore.QObject): - - def sizePolicy(self) -> 'QSizePolicy.Policy': ... - def setSizePolicy(self, policy: 'QSizePolicy.Policy') -> None: ... - def spacing(self) -> float: ... - def unsetSpacing(self) -> None: ... - def setSpacing(self, spacing: float) -> None: ... - - -class QGraphicsLayoutItem(PyQt6.sip.wrapper): - - def __init__(self, parent: typing.Optional['QGraphicsLayoutItem'] = ..., isLayout: bool = ...) -> None: ... - - def setOwnedByLayout(self, ownedByLayout: bool) -> None: ... - def setGraphicsItem(self, item: typing.Optional['QGraphicsItem']) -> None: ... - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def isEmpty(self) -> bool: ... - def ownedByLayout(self) -> bool: ... - def graphicsItem(self) -> typing.Optional['QGraphicsItem']: ... - def maximumHeight(self) -> float: ... - def maximumWidth(self) -> float: ... - def preferredHeight(self) -> float: ... - def preferredWidth(self) -> float: ... - def minimumHeight(self) -> float: ... - def minimumWidth(self) -> float: ... - def isLayout(self) -> bool: ... - def setParentLayoutItem(self, parent: typing.Optional['QGraphicsLayoutItem']) -> None: ... - def parentLayoutItem(self) -> typing.Optional['QGraphicsLayoutItem']: ... - def updateGeometry(self) -> None: ... - def effectiveSizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def contentsRect(self) -> QtCore.QRectF: ... - def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def geometry(self) -> QtCore.QRectF: ... - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - def setMaximumHeight(self, height: float) -> None: ... - def setMaximumWidth(self, width: float) -> None: ... - def maximumSize(self) -> QtCore.QSizeF: ... - @typing.overload - def setMaximumSize(self, size: QtCore.QSizeF) -> None: ... - @typing.overload - def setMaximumSize(self, aw: float, ah: float) -> None: ... - def setPreferredHeight(self, height: float) -> None: ... - def setPreferredWidth(self, width: float) -> None: ... - def preferredSize(self) -> QtCore.QSizeF: ... - @typing.overload - def setPreferredSize(self, size: QtCore.QSizeF) -> None: ... - @typing.overload - def setPreferredSize(self, aw: float, ah: float) -> None: ... - def setMinimumHeight(self, height: float) -> None: ... - def setMinimumWidth(self, width: float) -> None: ... - def minimumSize(self) -> QtCore.QSizeF: ... - @typing.overload - def setMinimumSize(self, size: QtCore.QSizeF) -> None: ... - @typing.overload - def setMinimumSize(self, aw: float, ah: float) -> None: ... - def sizePolicy(self) -> 'QSizePolicy': ... - @typing.overload - def setSizePolicy(self, policy: 'QSizePolicy') -> None: ... - @typing.overload - def setSizePolicy(self, hPolicy: 'QSizePolicy.Policy', vPolicy: 'QSizePolicy.Policy', controlType: 'QSizePolicy.ControlType' = ...) -> None: ... - - -class QGraphicsLayout(QGraphicsLayoutItem): - - def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... - - def addChildLayoutItem(self, layoutItem: typing.Optional[QGraphicsLayoutItem]) -> None: ... - def updateGeometry(self) -> None: ... - def removeAt(self, index: int) -> None: ... - def itemAt(self, i: int) -> typing.Optional[QGraphicsLayoutItem]: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def widgetEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def invalidate(self) -> None: ... - def isActivated(self) -> bool: ... - def activate(self) -> None: ... - def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - def setContentsMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... - - -class QGraphicsAnchorLayout(QGraphicsLayout): - - def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... - - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def invalidate(self) -> None: ... - def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... - def count(self) -> int: ... - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - def removeAt(self, index: int) -> None: ... - def verticalSpacing(self) -> float: ... - def horizontalSpacing(self) -> float: ... - def setSpacing(self, spacing: float) -> None: ... - def setVerticalSpacing(self, spacing: float) -> None: ... - def setHorizontalSpacing(self, spacing: float) -> None: ... - def addAnchors(self, firstItem: typing.Optional[QGraphicsLayoutItem], secondItem: typing.Optional[QGraphicsLayoutItem], orientations: QtCore.Qt.Orientation = ...) -> None: ... - def addCornerAnchors(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstCorner: QtCore.Qt.Corner, secondItem: typing.Optional[QGraphicsLayoutItem], secondCorner: QtCore.Qt.Corner) -> None: ... - def anchor(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstEdge: QtCore.Qt.AnchorPoint, secondItem: typing.Optional[QGraphicsLayoutItem], secondEdge: QtCore.Qt.AnchorPoint) -> typing.Optional[QGraphicsAnchor]: ... - def addAnchor(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstEdge: QtCore.Qt.AnchorPoint, secondItem: typing.Optional[QGraphicsLayoutItem], secondEdge: QtCore.Qt.AnchorPoint) -> typing.Optional[QGraphicsAnchor]: ... - - -class QGraphicsEffect(QtCore.QObject): - - class PixmapPadMode(enum.Enum): - NoPad = ... # type: QGraphicsEffect.PixmapPadMode - PadToTransparentBorder = ... # type: QGraphicsEffect.PixmapPadMode - PadToEffectiveBoundingRect = ... # type: QGraphicsEffect.PixmapPadMode - - class ChangeFlag(enum.Flag): - SourceAttached = ... # type: QGraphicsEffect.ChangeFlag - SourceDetached = ... # type: QGraphicsEffect.ChangeFlag - SourceBoundingRectChanged = ... # type: QGraphicsEffect.ChangeFlag - SourceInvalidated = ... # type: QGraphicsEffect.ChangeFlag - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def sourcePixmap(self, system: QtCore.Qt.CoordinateSystem = ..., mode: 'QGraphicsEffect.PixmapPadMode' = ...) -> typing.Tuple[QtGui.QPixmap, typing.Optional[QtCore.QPoint]]: ... - def drawSource(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - def sourceBoundingRect(self, system: QtCore.Qt.CoordinateSystem = ...) -> QtCore.QRectF: ... - def sourceIsPixmap(self) -> bool: ... - def updateBoundingRect(self) -> None: ... - def sourceChanged(self, flags: 'QGraphicsEffect.ChangeFlag') -> None: ... - def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - enabledChanged: typing.ClassVar[QtCore.pyqtSignal] - def update(self) -> None: ... - def setEnabled(self, enable: bool) -> None: ... - def isEnabled(self) -> bool: ... - def boundingRect(self) -> QtCore.QRectF: ... - def boundingRectFor(self, sourceRect: QtCore.QRectF) -> QtCore.QRectF: ... - - -class QGraphicsColorizeEffect(QGraphicsEffect): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - strengthChanged: typing.ClassVar[QtCore.pyqtSignal] - colorChanged: typing.ClassVar[QtCore.pyqtSignal] - def setStrength(self, strength: float) -> None: ... - def setColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def strength(self) -> float: ... - def color(self) -> QtGui.QColor: ... - - -class QGraphicsBlurEffect(QGraphicsEffect): - - class BlurHint(enum.Flag): - PerformanceHint = ... # type: QGraphicsBlurEffect.BlurHint - QualityHint = ... # type: QGraphicsBlurEffect.BlurHint - AnimationHint = ... # type: QGraphicsBlurEffect.BlurHint - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - blurHintsChanged: typing.ClassVar[QtCore.pyqtSignal] - blurRadiusChanged: typing.ClassVar[QtCore.pyqtSignal] - def setBlurHints(self, hints: 'QGraphicsBlurEffect.BlurHint') -> None: ... - def setBlurRadius(self, blurRadius: float) -> None: ... - def blurHints(self) -> 'QGraphicsBlurEffect.BlurHint': ... - def blurRadius(self) -> float: ... - def boundingRectFor(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - - -class QGraphicsDropShadowEffect(QGraphicsEffect): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - colorChanged: typing.ClassVar[QtCore.pyqtSignal] - blurRadiusChanged: typing.ClassVar[QtCore.pyqtSignal] - offsetChanged: typing.ClassVar[QtCore.pyqtSignal] - def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def setBlurRadius(self, blurRadius: float) -> None: ... - def setYOffset(self, dy: float) -> None: ... - def setXOffset(self, dx: float) -> None: ... - @typing.overload - def setOffset(self, ofs: QtCore.QPointF) -> None: ... - @typing.overload - def setOffset(self, dx: float, dy: float) -> None: ... - @typing.overload - def setOffset(self, d: float) -> None: ... - def color(self) -> QtGui.QColor: ... - def blurRadius(self) -> float: ... - def yOffset(self) -> float: ... - def xOffset(self) -> float: ... - def offset(self) -> QtCore.QPointF: ... - def boundingRectFor(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - - -class QGraphicsOpacityEffect(QGraphicsEffect): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - opacityMaskChanged: typing.ClassVar[QtCore.pyqtSignal] - opacityChanged: typing.ClassVar[QtCore.pyqtSignal] - def setOpacityMask(self, mask: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def setOpacity(self, opacity: float) -> None: ... - def opacityMask(self) -> QtGui.QBrush: ... - def opacity(self) -> float: ... - - -class QGraphicsGridLayout(QGraphicsLayout): - - def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... - - def removeItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - def invalidate(self) -> None: ... - def removeAt(self, index: int) -> None: ... - def count(self) -> int: ... - @typing.overload - def itemAt(self, row: int, column: int) -> typing.Optional[QGraphicsLayoutItem]: ... - @typing.overload - def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... - def columnCount(self) -> int: ... - def rowCount(self) -> int: ... - def alignment(self, item: typing.Optional[QGraphicsLayoutItem]) -> QtCore.Qt.AlignmentFlag: ... - def setAlignment(self, item: typing.Optional[QGraphicsLayoutItem], alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def columnAlignment(self, column: int) -> QtCore.Qt.AlignmentFlag: ... - def setColumnAlignment(self, column: int, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def rowAlignment(self, row: int) -> QtCore.Qt.AlignmentFlag: ... - def setRowAlignment(self, row: int, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def setColumnFixedWidth(self, column: int, width: float) -> None: ... - def columnMaximumWidth(self, column: int) -> float: ... - def setColumnMaximumWidth(self, column: int, width: float) -> None: ... - def columnPreferredWidth(self, column: int) -> float: ... - def setColumnPreferredWidth(self, column: int, width: float) -> None: ... - def columnMinimumWidth(self, column: int) -> float: ... - def setColumnMinimumWidth(self, column: int, width: float) -> None: ... - def setRowFixedHeight(self, row: int, height: float) -> None: ... - def rowMaximumHeight(self, row: int) -> float: ... - def setRowMaximumHeight(self, row: int, height: float) -> None: ... - def rowPreferredHeight(self, row: int) -> float: ... - def setRowPreferredHeight(self, row: int, height: float) -> None: ... - def rowMinimumHeight(self, row: int) -> float: ... - def setRowMinimumHeight(self, row: int, height: float) -> None: ... - def columnStretchFactor(self, column: int) -> int: ... - def setColumnStretchFactor(self, column: int, stretch: int) -> None: ... - def rowStretchFactor(self, row: int) -> int: ... - def setRowStretchFactor(self, row: int, stretch: int) -> None: ... - def columnSpacing(self, column: int) -> float: ... - def setColumnSpacing(self, column: int, spacing: float) -> None: ... - def rowSpacing(self, row: int) -> float: ... - def setRowSpacing(self, row: int, spacing: float) -> None: ... - def setSpacing(self, spacing: float) -> None: ... - def verticalSpacing(self) -> float: ... - def setVerticalSpacing(self, spacing: float) -> None: ... - def horizontalSpacing(self) -> float: ... - def setHorizontalSpacing(self, spacing: float) -> None: ... - @typing.overload - def addItem(self, item: typing.Optional[QGraphicsLayoutItem], row: int, column: int, rowSpan: int, columnSpan: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def addItem(self, item: typing.Optional[QGraphicsLayoutItem], row: int, column: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - - -class QGraphicsItem(PyQt6.sip.wrapper): - - class PanelModality(enum.Enum): - NonModal = ... # type: QGraphicsItem.PanelModality - PanelModal = ... # type: QGraphicsItem.PanelModality - SceneModal = ... # type: QGraphicsItem.PanelModality - - class GraphicsItemFlag(enum.Flag): - ItemIsMovable = ... # type: QGraphicsItem.GraphicsItemFlag - ItemIsSelectable = ... # type: QGraphicsItem.GraphicsItemFlag - ItemIsFocusable = ... # type: QGraphicsItem.GraphicsItemFlag - ItemClipsToShape = ... # type: QGraphicsItem.GraphicsItemFlag - ItemClipsChildrenToShape = ... # type: QGraphicsItem.GraphicsItemFlag - ItemIgnoresTransformations = ... # type: QGraphicsItem.GraphicsItemFlag - ItemIgnoresParentOpacity = ... # type: QGraphicsItem.GraphicsItemFlag - ItemDoesntPropagateOpacityToChildren = ... # type: QGraphicsItem.GraphicsItemFlag - ItemStacksBehindParent = ... # type: QGraphicsItem.GraphicsItemFlag - ItemUsesExtendedStyleOption = ... # type: QGraphicsItem.GraphicsItemFlag - ItemHasNoContents = ... # type: QGraphicsItem.GraphicsItemFlag - ItemSendsGeometryChanges = ... # type: QGraphicsItem.GraphicsItemFlag - ItemAcceptsInputMethod = ... # type: QGraphicsItem.GraphicsItemFlag - ItemNegativeZStacksBehindParent = ... # type: QGraphicsItem.GraphicsItemFlag - ItemIsPanel = ... # type: QGraphicsItem.GraphicsItemFlag - ItemSendsScenePositionChanges = ... # type: QGraphicsItem.GraphicsItemFlag - ItemContainsChildrenInShape = ... # type: QGraphicsItem.GraphicsItemFlag - - class GraphicsItemChange(enum.Enum): - ItemPositionChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemVisibleChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemEnabledChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemSelectedChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemParentChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemChildAddedChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemChildRemovedChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemTransformChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemPositionHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemTransformHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemSceneChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemVisibleHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemEnabledHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemSelectedHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemParentHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemSceneHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemCursorChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemCursorHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemToolTipChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemToolTipHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemFlagsChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemFlagsHaveChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemZValueChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemZValueHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemOpacityChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemOpacityHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemScenePositionHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemRotationChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemRotationHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemScaleChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemScaleHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - ItemTransformOriginPointChange = ... # type: QGraphicsItem.GraphicsItemChange - ItemTransformOriginPointHasChanged = ... # type: QGraphicsItem.GraphicsItemChange - - class CacheMode(enum.Enum): - NoCache = ... # type: QGraphicsItem.CacheMode - ItemCoordinateCache = ... # type: QGraphicsItem.CacheMode - DeviceCoordinateCache = ... # type: QGraphicsItem.CacheMode - - Type = ... # type: int - UserType = ... # type: int - - def __init__(self, parent: typing.Optional['QGraphicsItem'] = ...) -> None: ... - - def updateMicroFocus(self) -> None: ... - def setInputMethodHints(self, hints: QtCore.Qt.InputMethodHint) -> None: ... - def inputMethodHints(self) -> QtCore.Qt.InputMethodHint: ... - def stackBefore(self, sibling: typing.Optional['QGraphicsItem']) -> None: ... - @typing.overload - def setTransformOriginPoint(self, origin: QtCore.QPointF) -> None: ... - @typing.overload - def setTransformOriginPoint(self, ax: float, ay: float) -> None: ... - def transformOriginPoint(self) -> QtCore.QPointF: ... - def setTransformations(self, transformations: typing.Iterable['QGraphicsTransform']) -> None: ... - def transformations(self) -> typing.List['QGraphicsTransform']: ... - def scale(self) -> float: ... - def setScale(self, scale: float) -> None: ... - def rotation(self) -> float: ... - def setRotation(self, angle: float) -> None: ... - def setY(self, y: float) -> None: ... - def setX(self, x: float) -> None: ... - def focusItem(self) -> typing.Optional['QGraphicsItem']: ... - def setFocusProxy(self, item: typing.Optional['QGraphicsItem']) -> None: ... - def focusProxy(self) -> typing.Optional['QGraphicsItem']: ... - def setActive(self, active: bool) -> None: ... - def isActive(self) -> bool: ... - def setFiltersChildEvents(self, enabled: bool) -> None: ... - def filtersChildEvents(self) -> bool: ... - def setAcceptTouchEvents(self, enabled: bool) -> None: ... - def acceptTouchEvents(self) -> bool: ... - def setGraphicsEffect(self, effect: typing.Optional[QGraphicsEffect]) -> None: ... - def graphicsEffect(self) -> typing.Optional[QGraphicsEffect]: ... - def isBlockedByModalPanel(self) -> typing.Tuple[bool, typing.Optional['QGraphicsItem']]: ... - def setPanelModality(self, panelModality: 'QGraphicsItem.PanelModality') -> None: ... - def panelModality(self) -> 'QGraphicsItem.PanelModality': ... - def toGraphicsObject(self) -> typing.Optional['QGraphicsObject']: ... - def isPanel(self) -> bool: ... - def panel(self) -> typing.Optional['QGraphicsItem']: ... - def parentObject(self) -> typing.Optional['QGraphicsObject']: ... - @typing.overload - def mapRectFromScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectFromScene(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - @typing.overload - def mapRectFromParent(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectFromParent(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - @typing.overload - def mapRectFromItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - @typing.overload - def mapRectToScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectToScene(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - @typing.overload - def mapRectToParent(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectToParent(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - @typing.overload - def mapRectToItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... - @typing.overload - def mapRectToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... - def clipPath(self) -> QtGui.QPainterPath: ... - def isClipped(self) -> bool: ... - def itemTransform(self, other: typing.Optional['QGraphicsItem']) -> typing.Tuple[QtGui.QTransform, typing.Optional[bool]]: ... - def setOpacity(self, opacity: float) -> None: ... - def effectiveOpacity(self) -> float: ... - def opacity(self) -> float: ... - def isUnderMouse(self) -> bool: ... - def commonAncestorItem(self, other: typing.Optional['QGraphicsItem']) -> typing.Optional['QGraphicsItem']: ... - def scroll(self, dx: float, dy: float, rect: QtCore.QRectF = ...) -> None: ... - def setBoundingRegionGranularity(self, granularity: float) -> None: ... - def boundingRegionGranularity(self) -> float: ... - def boundingRegion(self, itemToDeviceTransform: QtGui.QTransform) -> QtGui.QRegion: ... - def ungrabKeyboard(self) -> None: ... - def grabKeyboard(self) -> None: ... - def ungrabMouse(self) -> None: ... - def grabMouse(self) -> None: ... - def setAcceptHoverEvents(self, enabled: bool) -> None: ... - def acceptHoverEvents(self) -> bool: ... - def isVisibleTo(self, parent: typing.Optional['QGraphicsItem']) -> bool: ... - def setCacheMode(self, mode: 'QGraphicsItem.CacheMode', logicalCacheSize: QtCore.QSize = ...) -> None: ... - def cacheMode(self) -> 'QGraphicsItem.CacheMode': ... - def isWindow(self) -> bool: ... - def isWidget(self) -> bool: ... - def childItems(self) -> typing.List['QGraphicsItem']: ... - def window(self) -> typing.Optional['QGraphicsWidget']: ... - def topLevelWidget(self) -> typing.Optional['QGraphicsWidget']: ... - def parentWidget(self) -> typing.Optional['QGraphicsWidget']: ... - @typing.overload - def isObscured(self, rect: QtCore.QRectF = ...) -> bool: ... - @typing.overload - def isObscured(self, ax: float, ay: float, w: float, h: float) -> bool: ... - def resetTransform(self) -> None: ... - def setTransform(self, matrix: QtGui.QTransform, combine: bool = ...) -> None: ... - def deviceTransform(self, viewportTransform: QtGui.QTransform) -> QtGui.QTransform: ... - def sceneTransform(self) -> QtGui.QTransform: ... - def transform(self) -> QtGui.QTransform: ... - def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... - def sceneEventFilter(self, watched: typing.Optional['QGraphicsItem'], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def prepareGeometryChange(self) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def itemChange(self, change: 'QGraphicsItem.GraphicsItemChange', value: typing.Any) -> typing.Any: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... - def removeSceneEventFilter(self, filterItem: typing.Optional['QGraphicsItem']) -> None: ... - def installSceneEventFilter(self, filterItem: typing.Optional['QGraphicsItem']) -> None: ... - def type(self) -> int: ... - def setData(self, key: int, value: typing.Any) -> None: ... - def data(self, key: int) -> typing.Any: ... - def isAncestorOf(self, child: typing.Optional['QGraphicsItem']) -> bool: ... - @typing.overload - def mapFromScene(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapFromScene(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapFromScene(self, ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapFromScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromParent(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapFromParent(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromParent(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromParent(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapFromParent(self, ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapFromParent(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def mapToScene(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToScene(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapToScene(self, ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapToScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def mapToParent(self, point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToParent(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToParent(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToParent(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapToParent(self, ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapToParent(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], point: QtCore.QPointF) -> QtCore.QPointF: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float) -> QtCore.QPointF: ... - @typing.overload - def mapToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... - @typing.overload - def update(self, rect: QtCore.QRectF = ...) -> None: ... - @typing.overload - def update(self, ax: float, ay: float, width: float, height: float) -> None: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional['QGraphicsItem']) -> bool: ... - def collidingItems(self, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List['QGraphicsItem']: ... - def collidesWithPath(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ...) -> bool: ... - def collidesWithItem(self, other: typing.Optional['QGraphicsItem'], mode: QtCore.Qt.ItemSelectionMode = ...) -> bool: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def sceneBoundingRect(self) -> QtCore.QRectF: ... - def childrenBoundingRect(self) -> QtCore.QRectF: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setZValue(self, z: float) -> None: ... - def zValue(self) -> float: ... - def advance(self, phase: int) -> None: ... - @typing.overload - def ensureVisible(self, rect: QtCore.QRectF = ..., xMargin: int = ..., yMargin: int = ...) -> None: ... - @typing.overload - def ensureVisible(self, x: float, y: float, w: float, h: float, xMargin: int = ..., yMargin: int = ...) -> None: ... - def moveBy(self, dx: float, dy: float) -> None: ... - @typing.overload - def setPos(self, pos: QtCore.QPointF) -> None: ... - @typing.overload - def setPos(self, ax: float, ay: float) -> None: ... - def scenePos(self) -> QtCore.QPointF: ... - def y(self) -> float: ... - def x(self) -> float: ... - def pos(self) -> QtCore.QPointF: ... - def clearFocus(self) -> None: ... - def setFocus(self, focusReason: QtCore.Qt.FocusReason = ...) -> None: ... - def hasFocus(self) -> bool: ... - def setAcceptedMouseButtons(self, buttons: QtCore.Qt.MouseButton) -> None: ... - def acceptedMouseButtons(self) -> QtCore.Qt.MouseButton: ... - def setAcceptDrops(self, on: bool) -> None: ... - def acceptDrops(self) -> bool: ... - def setSelected(self, selected: bool) -> None: ... - def isSelected(self) -> bool: ... - def setEnabled(self, enabled: bool) -> None: ... - def isEnabled(self) -> bool: ... - def show(self) -> None: ... - def hide(self) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def isVisible(self) -> bool: ... - def unsetCursor(self) -> None: ... - def hasCursor(self) -> bool: ... - def setCursor(self, cursor: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... - def cursor(self) -> QtGui.QCursor: ... - def setToolTip(self, toolTip: typing.Optional[str]) -> None: ... - def toolTip(self) -> str: ... - def setFlags(self, flags: 'QGraphicsItem.GraphicsItemFlag') -> None: ... - def setFlag(self, flag: 'QGraphicsItem.GraphicsItemFlag', enabled: bool = ...) -> None: ... - def flags(self) -> 'QGraphicsItem.GraphicsItemFlag': ... - def setGroup(self, group: typing.Optional['QGraphicsItemGroup']) -> None: ... - def group(self) -> typing.Optional['QGraphicsItemGroup']: ... - def setParentItem(self, parent: typing.Optional['QGraphicsItem']) -> None: ... - def topLevelItem(self) -> typing.Optional['QGraphicsItem']: ... - def parentItem(self) -> typing.Optional['QGraphicsItem']: ... - def scene(self) -> typing.Optional['QGraphicsScene']: ... - - -class QAbstractGraphicsShapeItem(QGraphicsItem): - - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def setBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def brush(self) -> QtGui.QBrush: ... - def setPen(self, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - def pen(self) -> QtGui.QPen: ... - - -class QGraphicsPathItem(QAbstractGraphicsShapeItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, path: QtGui.QPainterPath, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setPath(self, path: QtGui.QPainterPath) -> None: ... - def path(self) -> QtGui.QPainterPath: ... - - -class QGraphicsRectItem(QAbstractGraphicsShapeItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, rect: QtCore.QRectF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, x: float, y: float, w: float, h: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, ax: float, ay: float, w: float, h: float) -> None: ... - def rect(self) -> QtCore.QRectF: ... - - -class QGraphicsEllipseItem(QAbstractGraphicsShapeItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, rect: QtCore.QRectF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, x: float, y: float, w: float, h: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setSpanAngle(self, angle: int) -> None: ... - def spanAngle(self) -> int: ... - def setStartAngle(self, angle: int) -> None: ... - def startAngle(self) -> int: ... - @typing.overload - def setRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setRect(self, ax: float, ay: float, w: float, h: float) -> None: ... - def rect(self) -> QtCore.QRectF: ... - - -class QGraphicsPolygonItem(QAbstractGraphicsShapeItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, polygon: QtGui.QPolygonF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def setFillRule(self, rule: QtCore.Qt.FillRule) -> None: ... - def fillRule(self) -> QtCore.Qt.FillRule: ... - def setPolygon(self, polygon: QtGui.QPolygonF) -> None: ... - def polygon(self) -> QtGui.QPolygonF: ... - - -class QGraphicsLineItem(QGraphicsItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, line: QtCore.QLineF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, x1: float, y1: float, x2: float, y2: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - @typing.overload - def setLine(self, line: QtCore.QLineF) -> None: ... - @typing.overload - def setLine(self, x1: float, y1: float, x2: float, y2: float) -> None: ... - def line(self) -> QtCore.QLineF: ... - def setPen(self, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]]) -> None: ... - def pen(self) -> QtGui.QPen: ... - - -class QGraphicsPixmapItem(QGraphicsItem): - - class ShapeMode(enum.Enum): - MaskShape = ... # type: QGraphicsPixmapItem.ShapeMode - BoundingRectShape = ... # type: QGraphicsPixmapItem.ShapeMode - HeuristicMaskShape = ... # type: QGraphicsPixmapItem.ShapeMode - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, pixmap: QtGui.QPixmap, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def setShapeMode(self, mode: 'QGraphicsPixmapItem.ShapeMode') -> None: ... - def shapeMode(self) -> 'QGraphicsPixmapItem.ShapeMode': ... - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - @typing.overload - def setOffset(self, offset: QtCore.QPointF) -> None: ... - @typing.overload - def setOffset(self, ax: float, ay: float) -> None: ... - def offset(self) -> QtCore.QPointF: ... - def setTransformationMode(self, mode: QtCore.Qt.TransformationMode) -> None: ... - def transformationMode(self) -> QtCore.Qt.TransformationMode: ... - def setPixmap(self, pixmap: QtGui.QPixmap) -> None: ... - def pixmap(self) -> QtGui.QPixmap: ... - - -class QGraphicsSimpleTextItem(QAbstractGraphicsShapeItem): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def font(self) -> QtGui.QFont: ... - def setFont(self, font: QtGui.QFont) -> None: ... - def text(self) -> str: ... - def setText(self, text: typing.Optional[str]) -> None: ... - - -class QGraphicsItemGroup(QGraphicsItem): - - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def boundingRect(self) -> QtCore.QRectF: ... - def removeFromGroup(self, item: typing.Optional[QGraphicsItem]) -> None: ... - def addToGroup(self, item: typing.Optional[QGraphicsItem]) -> None: ... - - -class QGraphicsObject(QtCore.QObject, QGraphicsItem): - - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def event(self, ev: typing.Optional[QtCore.QEvent]) -> bool: ... - def updateMicroFocus(self) -> None: ... - scaleChanged: typing.ClassVar[QtCore.pyqtSignal] - rotationChanged: typing.ClassVar[QtCore.pyqtSignal] - zChanged: typing.ClassVar[QtCore.pyqtSignal] - yChanged: typing.ClassVar[QtCore.pyqtSignal] - xChanged: typing.ClassVar[QtCore.pyqtSignal] - enabledChanged: typing.ClassVar[QtCore.pyqtSignal] - visibleChanged: typing.ClassVar[QtCore.pyqtSignal] - opacityChanged: typing.ClassVar[QtCore.pyqtSignal] - parentChanged: typing.ClassVar[QtCore.pyqtSignal] - def ungrabGesture(self, type: QtCore.Qt.GestureType) -> None: ... - def grabGesture(self, type: QtCore.Qt.GestureType, flags: QtCore.Qt.GestureFlag = ...) -> None: ... - - -class QGraphicsTextItem(QGraphicsObject): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QGraphicsItem] = ...) -> None: ... - - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - linkHovered: typing.ClassVar[QtCore.pyqtSignal] - linkActivated: typing.ClassVar[QtCore.pyqtSignal] - def textCursor(self) -> QtGui.QTextCursor: ... - def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... - def openExternalLinks(self) -> bool: ... - def setOpenExternalLinks(self, open: bool) -> None: ... - def tabChangesFocus(self) -> bool: ... - def setTabChangesFocus(self, b: bool) -> None: ... - def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlag: ... - def setTextInteractionFlags(self, flags: QtCore.Qt.TextInteractionFlag) -> None: ... - def document(self) -> typing.Optional[QtGui.QTextDocument]: ... - def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... - def adjustSize(self) -> None: ... - def textWidth(self) -> float: ... - def setTextWidth(self, width: float) -> None: ... - def type(self) -> int: ... - def opaqueArea(self) -> QtGui.QPainterPath: ... - def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... - def contains(self, point: QtCore.QPointF) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def defaultTextColor(self) -> QtGui.QColor: ... - def setDefaultTextColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def setFont(self, font: QtGui.QFont) -> None: ... - def font(self) -> QtGui.QFont: ... - def setPlainText(self, text: typing.Optional[str]) -> None: ... - def toPlainText(self) -> str: ... - def setHtml(self, html: typing.Optional[str]) -> None: ... - def toHtml(self) -> str: ... - - -class QGraphicsLinearLayout(QGraphicsLayout): - - @typing.overload - def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... - @typing.overload - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... - - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def invalidate(self) -> None: ... - def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... - def count(self) -> int: ... - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - def alignment(self, item: typing.Optional[QGraphicsLayoutItem]) -> QtCore.Qt.AlignmentFlag: ... - def setAlignment(self, item: typing.Optional[QGraphicsLayoutItem], alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def stretchFactor(self, item: typing.Optional[QGraphicsLayoutItem]) -> int: ... - def setStretchFactor(self, item: typing.Optional[QGraphicsLayoutItem], stretch: int) -> None: ... - def itemSpacing(self, index: int) -> float: ... - def setItemSpacing(self, index: int, spacing: float) -> None: ... - def spacing(self) -> float: ... - def setSpacing(self, spacing: float) -> None: ... - def removeAt(self, index: int) -> None: ... - def removeItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... - def insertStretch(self, index: int, stretch: int = ...) -> None: ... - def insertItem(self, index: int, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... - def addStretch(self, stretch: int = ...) -> None: ... - def addItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... - - -class QGraphicsWidget(QGraphicsObject, QGraphicsLayoutItem): - - def __init__(self, parent: typing.Optional[QGraphicsItem] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - geometryChanged: typing.ClassVar[QtCore.pyqtSignal] - def setAutoFillBackground(self, enabled: bool) -> None: ... - def autoFillBackground(self) -> bool: ... - def ungrabKeyboardEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def grabKeyboardEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def ungrabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def grabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... - def resizeEvent(self, event: typing.Optional['QGraphicsSceneResizeEvent']) -> None: ... - def polishEvent(self) -> None: ... - def moveEvent(self, event: typing.Optional['QGraphicsSceneMoveEvent']) -> None: ... - def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def closeEvent(self, event: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def windowFrameSectionAt(self, pos: QtCore.QPointF) -> QtCore.Qt.WindowFrameSection: ... - def windowFrameEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def itemChange(self, change: QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... - def updateGeometry(self) -> None: ... - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def initStyleOption(self, option: typing.Optional['QStyleOption']) -> None: ... - def close(self) -> bool: ... - def shape(self) -> QtGui.QPainterPath: ... - def boundingRect(self) -> QtCore.QRectF: ... - def paintWindowFrame(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... - def type(self) -> int: ... - def testAttribute(self, attribute: QtCore.Qt.WidgetAttribute) -> bool: ... - def setAttribute(self, attribute: QtCore.Qt.WidgetAttribute, on: bool = ...) -> None: ... - def actions(self) -> typing.List[QtGui.QAction]: ... - def removeAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def insertActions(self, before: typing.Optional[QtGui.QAction], actions: typing.Iterable[QtGui.QAction]) -> None: ... - def insertAction(self, before: typing.Optional[QtGui.QAction], action: typing.Optional[QtGui.QAction]) -> None: ... - def addActions(self, actions: typing.Iterable[QtGui.QAction]) -> None: ... - def addAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def setShortcutAutoRepeat(self, id: int, enabled: bool = ...) -> None: ... - def setShortcutEnabled(self, id: int, enabled: bool = ...) -> None: ... - def releaseShortcut(self, id: int) -> None: ... - def grabShortcut(self, sequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], context: QtCore.Qt.ShortcutContext = ...) -> int: ... - def focusWidget(self) -> typing.Optional['QGraphicsWidget']: ... - @staticmethod - def setTabOrder(first: typing.Optional['QGraphicsWidget'], second: typing.Optional['QGraphicsWidget']) -> None: ... - def setFocusPolicy(self, policy: QtCore.Qt.FocusPolicy) -> None: ... - def focusPolicy(self) -> QtCore.Qt.FocusPolicy: ... - def windowTitle(self) -> str: ... - def setWindowTitle(self, title: typing.Optional[str]) -> None: ... - def isActiveWindow(self) -> bool: ... - def setWindowFlags(self, wFlags: QtCore.Qt.WindowType) -> None: ... - def windowType(self) -> QtCore.Qt.WindowType: ... - def windowFlags(self) -> QtCore.Qt.WindowType: ... - def windowFrameRect(self) -> QtCore.QRectF: ... - def windowFrameGeometry(self) -> QtCore.QRectF: ... - def unsetWindowFrameMargins(self) -> None: ... - def getWindowFrameMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - @typing.overload - def setWindowFrameMargins(self, margins: QtCore.QMarginsF) -> None: ... - @typing.overload - def setWindowFrameMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... - def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... - @typing.overload - def setContentsMargins(self, margins: QtCore.QMarginsF) -> None: ... - @typing.overload - def setContentsMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... - def rect(self) -> QtCore.QRectF: ... - @typing.overload - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setGeometry(self, ax: float, ay: float, aw: float, ah: float) -> None: ... - def size(self) -> QtCore.QSizeF: ... - @typing.overload - def resize(self, size: QtCore.QSizeF) -> None: ... - @typing.overload - def resize(self, w: float, h: float) -> None: ... - def setPalette(self, palette: QtGui.QPalette) -> None: ... - def palette(self) -> QtGui.QPalette: ... - def setFont(self, font: QtGui.QFont) -> None: ... - def font(self) -> QtGui.QFont: ... - def setStyle(self, style: typing.Optional[QStyle]) -> None: ... - def style(self) -> typing.Optional[QStyle]: ... - def unsetLayoutDirection(self) -> None: ... - def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... - def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... - def adjustSize(self) -> None: ... - def setLayout(self, layout: typing.Optional[QGraphicsLayout]) -> None: ... - def layout(self) -> typing.Optional[QGraphicsLayout]: ... - - -class QGraphicsProxyWidget(QGraphicsWidget): - - def __init__(self, parent: typing.Optional[QGraphicsItem] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def newProxyWidget(self, a0: typing.Optional[QWidget]) -> typing.Optional['QGraphicsProxyWidget']: ... - def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def resizeEvent(self, event: typing.Optional['QGraphicsSceneResizeEvent']) -> None: ... - def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def ungrabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def grabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... - def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... - def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def itemChange(self, change: QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... - def createProxyForChildWidget(self, child: typing.Optional[QWidget]) -> typing.Optional['QGraphicsProxyWidget']: ... - def type(self) -> int: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... - def setGeometry(self, rect: QtCore.QRectF) -> None: ... - def subWidgetRect(self, widget: typing.Optional[QWidget]) -> QtCore.QRectF: ... - def widget(self) -> typing.Optional[QWidget]: ... - def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... - - -class QGraphicsScene(QtCore.QObject): - - class SceneLayer(enum.Flag): - ItemLayer = ... # type: QGraphicsScene.SceneLayer - BackgroundLayer = ... # type: QGraphicsScene.SceneLayer - ForegroundLayer = ... # type: QGraphicsScene.SceneLayer - AllLayers = ... # type: QGraphicsScene.SceneLayer - - class ItemIndexMethod(enum.Enum): - BspTreeIndex = ... # type: QGraphicsScene.ItemIndexMethod - NoIndex = ... # type: QGraphicsScene.ItemIndexMethod - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, sceneRect: QtCore.QRectF, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, x: float, y: float, width: float, height: float, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def setFocusOnTouch(self, enabled: bool) -> None: ... - def focusOnTouch(self) -> bool: ... - focusItemChanged: typing.ClassVar[QtCore.pyqtSignal] - def setMinimumRenderSize(self, minSize: float) -> None: ... - def minimumRenderSize(self) -> float: ... - def sendEvent(self, item: typing.Optional[QGraphicsItem], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def setActivePanel(self, item: typing.Optional[QGraphicsItem]) -> None: ... - def activePanel(self) -> typing.Optional[QGraphicsItem]: ... - def isActive(self) -> bool: ... - @typing.overload - def itemAt(self, pos: QtCore.QPointF, deviceTransform: QtGui.QTransform) -> typing.Optional[QGraphicsItem]: ... - @typing.overload - def itemAt(self, x: float, y: float, deviceTransform: QtGui.QTransform) -> typing.Optional[QGraphicsItem]: ... - def stickyFocus(self) -> bool: ... - def setStickyFocus(self, enabled: bool) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def eventFilter(self, watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def setActiveWindow(self, widget: typing.Optional[QGraphicsWidget]) -> None: ... - def activeWindow(self) -> typing.Optional[QGraphicsWidget]: ... - def setPalette(self, palette: QtGui.QPalette) -> None: ... - def palette(self) -> QtGui.QPalette: ... - def setFont(self, font: QtGui.QFont) -> None: ... - def font(self) -> QtGui.QFont: ... - def setStyle(self, style: typing.Optional[QStyle]) -> None: ... - def style(self) -> typing.Optional[QStyle]: ... - def addWidget(self, widget: typing.Optional[QWidget], flags: QtCore.Qt.WindowType = ...) -> typing.Optional[QGraphicsProxyWidget]: ... - def selectionArea(self) -> QtGui.QPainterPath: ... - def setBspTreeDepth(self, depth: int) -> None: ... - def bspTreeDepth(self) -> int: ... - def drawForeground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... - def drawBackground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def helpEvent(self, event: typing.Optional['QGraphicsSceneHelpEvent']) -> None: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... - def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - sceneRectChanged: typing.ClassVar[QtCore.pyqtSignal] - changed: typing.ClassVar[QtCore.pyqtSignal] - def clear(self) -> None: ... - @typing.overload - def invalidate(self, rect: QtCore.QRectF = ..., layers: 'QGraphicsScene.SceneLayer' = ...) -> None: ... - @typing.overload - def invalidate(self, x: float, y: float, w: float, h: float, layers: 'QGraphicsScene.SceneLayer' = ...) -> None: ... - @typing.overload - def update(self, rect: QtCore.QRectF = ...) -> None: ... - @typing.overload - def update(self, x: float, y: float, w: float, h: float) -> None: ... - def advance(self) -> None: ... - def views(self) -> typing.List['QGraphicsView']: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - def setForegroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def foregroundBrush(self) -> QtGui.QBrush: ... - def setBackgroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def backgroundBrush(self) -> QtGui.QBrush: ... - def mouseGrabberItem(self) -> typing.Optional[QGraphicsItem]: ... - def clearFocus(self) -> None: ... - def setFocus(self, focusReason: QtCore.Qt.FocusReason = ...) -> None: ... - def hasFocus(self) -> bool: ... - def setFocusItem(self, item: typing.Optional[QGraphicsItem], focusReason: QtCore.Qt.FocusReason = ...) -> None: ... - def focusItem(self) -> typing.Optional[QGraphicsItem]: ... - def removeItem(self, item: typing.Optional[QGraphicsItem]) -> None: ... - def addText(self, text: typing.Optional[str], font: QtGui.QFont = ...) -> typing.Optional[QGraphicsTextItem]: ... - def addSimpleText(self, text: typing.Optional[str], font: QtGui.QFont = ...) -> typing.Optional[QGraphicsSimpleTextItem]: ... - @typing.overload - def addRect(self, rect: QtCore.QRectF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsRectItem]: ... - @typing.overload - def addRect(self, x: float, y: float, w: float, h: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsRectItem]: ... - def addPolygon(self, polygon: QtGui.QPolygonF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsPolygonItem]: ... - def addPixmap(self, pixmap: QtGui.QPixmap) -> typing.Optional[QGraphicsPixmapItem]: ... - def addPath(self, path: QtGui.QPainterPath, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsPathItem]: ... - @typing.overload - def addLine(self, line: QtCore.QLineF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ...) -> typing.Optional[QGraphicsLineItem]: ... - @typing.overload - def addLine(self, x1: float, y1: float, x2: float, y2: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ...) -> typing.Optional[QGraphicsLineItem]: ... - @typing.overload - def addEllipse(self, rect: QtCore.QRectF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsEllipseItem]: ... - @typing.overload - def addEllipse(self, x: float, y: float, w: float, h: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsEllipseItem]: ... - def addItem(self, item: typing.Optional[QGraphicsItem]) -> None: ... - def destroyItemGroup(self, group: typing.Optional[QGraphicsItemGroup]) -> None: ... - def createItemGroup(self, items: typing.Iterable[QGraphicsItem]) -> typing.Optional[QGraphicsItemGroup]: ... - def clearSelection(self) -> None: ... - @typing.overload - def setSelectionArea(self, path: QtGui.QPainterPath, deviceTransform: QtGui.QTransform) -> None: ... - @typing.overload - def setSelectionArea(self, path: QtGui.QPainterPath, selectionOperation: QtCore.Qt.ItemSelectionOperation = ..., mode: QtCore.Qt.ItemSelectionMode = ..., deviceTransform: QtGui.QTransform = ...) -> None: ... - def selectedItems(self) -> typing.List[QGraphicsItem]: ... - def collidingItems(self, item: typing.Optional[QGraphicsItem], mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, order: QtCore.Qt.SortOrder = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, pos: QtCore.QPointF, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, rect: QtCore.QRectF, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, polygon: QtGui.QPolygonF, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, x: float, y: float, w: float, h: float, mode: QtCore.Qt.ItemSelectionMode, order: QtCore.Qt.SortOrder, deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... - def itemsBoundingRect(self) -> QtCore.QRectF: ... - def setItemIndexMethod(self, method: 'QGraphicsScene.ItemIndexMethod') -> None: ... - def itemIndexMethod(self) -> 'QGraphicsScene.ItemIndexMethod': ... - def render(self, painter: typing.Optional[QtGui.QPainter], target: QtCore.QRectF = ..., source: QtCore.QRectF = ..., mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... - @typing.overload - def setSceneRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setSceneRect(self, x: float, y: float, w: float, h: float) -> None: ... - def height(self) -> float: ... - def width(self) -> float: ... - def sceneRect(self) -> QtCore.QRectF: ... - - -class QGraphicsSceneEvent(QtCore.QEvent): - - def timestamp(self) -> int: ... - def widget(self) -> typing.Optional[QWidget]: ... - - -class QGraphicsSceneMouseEvent(QGraphicsSceneEvent): - - def flags(self) -> QtCore.Qt.MouseEventFlag: ... - def source(self) -> QtCore.Qt.MouseEventSource: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def button(self) -> QtCore.Qt.MouseButton: ... - def buttons(self) -> QtCore.Qt.MouseButton: ... - def lastScreenPos(self) -> QtCore.QPoint: ... - def lastScenePos(self) -> QtCore.QPointF: ... - def lastPos(self) -> QtCore.QPointF: ... - def buttonDownScreenPos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPoint: ... - def buttonDownScenePos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPointF: ... - def buttonDownPos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPointF: ... - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - def pos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneWheelEvent(QGraphicsSceneEvent): - - def isInverted(self) -> bool: ... - def pixelDelta(self) -> QtCore.QPoint: ... - def phase(self) -> QtCore.Qt.ScrollPhase: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def delta(self) -> int: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def buttons(self) -> QtCore.Qt.MouseButton: ... - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - def pos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneContextMenuEvent(QGraphicsSceneEvent): - - class Reason(enum.Enum): - Mouse = ... # type: QGraphicsSceneContextMenuEvent.Reason - Keyboard = ... # type: QGraphicsSceneContextMenuEvent.Reason - Other = ... # type: QGraphicsSceneContextMenuEvent.Reason - - def reason(self) -> 'QGraphicsSceneContextMenuEvent.Reason': ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - def pos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneHoverEvent(QGraphicsSceneEvent): - - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def lastScreenPos(self) -> QtCore.QPoint: ... - def lastScenePos(self) -> QtCore.QPointF: ... - def lastPos(self) -> QtCore.QPointF: ... - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - def pos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneHelpEvent(QGraphicsSceneEvent): - - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneDragDropEvent(QGraphicsSceneEvent): - - def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... - def source(self) -> typing.Optional[QWidget]: ... - def setDropAction(self, action: QtCore.Qt.DropAction) -> None: ... - def dropAction(self) -> QtCore.Qt.DropAction: ... - def acceptProposedAction(self) -> None: ... - def proposedAction(self) -> QtCore.Qt.DropAction: ... - def possibleActions(self) -> QtCore.Qt.DropAction: ... - def modifiers(self) -> QtCore.Qt.KeyboardModifier: ... - def buttons(self) -> QtCore.Qt.MouseButton: ... - def screenPos(self) -> QtCore.QPoint: ... - def scenePos(self) -> QtCore.QPointF: ... - def pos(self) -> QtCore.QPointF: ... - - -class QGraphicsSceneResizeEvent(QGraphicsSceneEvent): - - def __init__(self) -> None: ... - - def newSize(self) -> QtCore.QSizeF: ... - def oldSize(self) -> QtCore.QSizeF: ... - - -class QGraphicsSceneMoveEvent(QGraphicsSceneEvent): - - def __init__(self) -> None: ... - - def newPos(self) -> QtCore.QPointF: ... - def oldPos(self) -> QtCore.QPointF: ... - - -class QGraphicsTransform(QtCore.QObject): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def update(self) -> None: ... - def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... - - -class QGraphicsScale(QGraphicsTransform): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - zScaleChanged: typing.ClassVar[QtCore.pyqtSignal] - yScaleChanged: typing.ClassVar[QtCore.pyqtSignal] - xScaleChanged: typing.ClassVar[QtCore.pyqtSignal] - scaleChanged: typing.ClassVar[QtCore.pyqtSignal] - originChanged: typing.ClassVar[QtCore.pyqtSignal] - def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... - def setZScale(self, a0: float) -> None: ... - def zScale(self) -> float: ... - def setYScale(self, a0: float) -> None: ... - def yScale(self) -> float: ... - def setXScale(self, a0: float) -> None: ... - def xScale(self) -> float: ... - def setOrigin(self, point: QtGui.QVector3D) -> None: ... - def origin(self) -> QtGui.QVector3D: ... - - -class QGraphicsRotation(QGraphicsTransform): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - axisChanged: typing.ClassVar[QtCore.pyqtSignal] - angleChanged: typing.ClassVar[QtCore.pyqtSignal] - originChanged: typing.ClassVar[QtCore.pyqtSignal] - def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... - @typing.overload - def setAxis(self, axis: QtGui.QVector3D) -> None: ... - @typing.overload - def setAxis(self, axis: QtCore.Qt.Axis) -> None: ... - def axis(self) -> QtGui.QVector3D: ... - def setAngle(self, a0: float) -> None: ... - def angle(self) -> float: ... - def setOrigin(self, point: QtGui.QVector3D) -> None: ... - def origin(self) -> QtGui.QVector3D: ... - - -class QGraphicsView(QAbstractScrollArea): - - class OptimizationFlag(enum.Flag): - DontSavePainterState = ... # type: QGraphicsView.OptimizationFlag - DontAdjustForAntialiasing = ... # type: QGraphicsView.OptimizationFlag - - class ViewportUpdateMode(enum.Enum): - FullViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode - MinimalViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode - SmartViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode - BoundingRectViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode - NoViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode - - class ViewportAnchor(enum.Enum): - NoAnchor = ... # type: QGraphicsView.ViewportAnchor - AnchorViewCenter = ... # type: QGraphicsView.ViewportAnchor - AnchorUnderMouse = ... # type: QGraphicsView.ViewportAnchor - - class DragMode(enum.Enum): - NoDrag = ... # type: QGraphicsView.DragMode - ScrollHandDrag = ... # type: QGraphicsView.DragMode - RubberBandDrag = ... # type: QGraphicsView.DragMode - - class CacheModeFlag(enum.Flag): - CacheNone = ... # type: QGraphicsView.CacheModeFlag - CacheBackground = ... # type: QGraphicsView.CacheModeFlag - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, scene: typing.Optional[QGraphicsScene], parent: typing.Optional[QWidget] = ...) -> None: ... - - rubberBandChanged: typing.ClassVar[QtCore.pyqtSignal] - def rubberBandRect(self) -> QtCore.QRect: ... - def isTransformed(self) -> bool: ... - def resetTransform(self) -> None: ... - def setTransform(self, matrix: QtGui.QTransform, combine: bool = ...) -> None: ... - def viewportTransform(self) -> QtGui.QTransform: ... - def transform(self) -> QtGui.QTransform: ... - def setRubberBandSelectionMode(self, mode: QtCore.Qt.ItemSelectionMode) -> None: ... - def rubberBandSelectionMode(self) -> QtCore.Qt.ItemSelectionMode: ... - def setOptimizationFlags(self, flags: 'QGraphicsView.OptimizationFlag') -> None: ... - def setOptimizationFlag(self, flag: 'QGraphicsView.OptimizationFlag', enabled: bool = ...) -> None: ... - def optimizationFlags(self) -> 'QGraphicsView.OptimizationFlag': ... - def setViewportUpdateMode(self, mode: 'QGraphicsView.ViewportUpdateMode') -> None: ... - def viewportUpdateMode(self) -> 'QGraphicsView.ViewportUpdateMode': ... - def drawForeground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... - def drawBackground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... - def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragMoveEvent(self, event: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragLeaveEvent(self, event: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragEnterEvent(self, event: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def contextMenuEvent(self, event: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def setupViewport(self, widget: typing.Optional[QWidget]) -> None: ... - def updateSceneRect(self, rect: QtCore.QRectF) -> None: ... - def updateScene(self, rects: typing.Iterable[QtCore.QRectF]) -> None: ... - def invalidateScene(self, rect: QtCore.QRectF = ..., layers: QGraphicsScene.SceneLayer = ...) -> None: ... - def setForegroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def foregroundBrush(self) -> QtGui.QBrush: ... - def setBackgroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def backgroundBrush(self) -> QtGui.QBrush: ... - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - @typing.overload - def mapFromScene(self, point: QtCore.QPointF) -> QtCore.QPoint: ... - @typing.overload - def mapFromScene(self, rect: QtCore.QRectF) -> QtGui.QPolygon: ... - @typing.overload - def mapFromScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygon: ... - @typing.overload - def mapFromScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapFromScene(self, ax: float, ay: float) -> QtCore.QPoint: ... - @typing.overload - def mapFromScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygon: ... - @typing.overload - def mapToScene(self, point: QtCore.QPoint) -> QtCore.QPointF: ... - @typing.overload - def mapToScene(self, rect: QtCore.QRect) -> QtGui.QPolygonF: ... - @typing.overload - def mapToScene(self, polygon: QtGui.QPolygon) -> QtGui.QPolygonF: ... - @typing.overload - def mapToScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... - @typing.overload - def mapToScene(self, ax: int, ay: int) -> QtCore.QPointF: ... - @typing.overload - def mapToScene(self, ax: int, ay: int, w: int, h: int) -> QtGui.QPolygonF: ... - @typing.overload - def itemAt(self, pos: QtCore.QPoint) -> typing.Optional[QGraphicsItem]: ... - @typing.overload - def itemAt(self, ax: int, ay: int) -> typing.Optional[QGraphicsItem]: ... - @typing.overload - def items(self) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, pos: QtCore.QPoint) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, x: int, y: int) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, x: int, y: int, w: int, h: int, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, rect: QtCore.QRect, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, polygon: QtGui.QPolygon, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... - @typing.overload - def items(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... - def render(self, painter: typing.Optional[QtGui.QPainter], target: QtCore.QRectF = ..., source: QtCore.QRect = ..., mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... - @typing.overload - def fitInView(self, rect: QtCore.QRectF, mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... - @typing.overload - def fitInView(self, item: typing.Optional[QGraphicsItem], mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... - @typing.overload - def fitInView(self, x: float, y: float, w: float, h: float, mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... - @typing.overload - def ensureVisible(self, rect: QtCore.QRectF, xMargin: int = ..., yMargin: int = ...) -> None: ... - @typing.overload - def ensureVisible(self, item: typing.Optional[QGraphicsItem], xMargin: int = ..., yMargin: int = ...) -> None: ... - @typing.overload - def ensureVisible(self, x: float, y: float, w: float, h: float, xMargin: int = ..., yMargin: int = ...) -> None: ... - @typing.overload - def centerOn(self, pos: QtCore.QPointF) -> None: ... - @typing.overload - def centerOn(self, item: typing.Optional[QGraphicsItem]) -> None: ... - @typing.overload - def centerOn(self, ax: float, ay: float) -> None: ... - def translate(self, dx: float, dy: float) -> None: ... - def shear(self, sh: float, sv: float) -> None: ... - def scale(self, sx: float, sy: float) -> None: ... - def rotate(self, angle: float) -> None: ... - @typing.overload - def setSceneRect(self, rect: QtCore.QRectF) -> None: ... - @typing.overload - def setSceneRect(self, ax: float, ay: float, aw: float, ah: float) -> None: ... - def sceneRect(self) -> QtCore.QRectF: ... - def setScene(self, scene: typing.Optional[QGraphicsScene]) -> None: ... - def scene(self) -> typing.Optional[QGraphicsScene]: ... - def setInteractive(self, allowed: bool) -> None: ... - def isInteractive(self) -> bool: ... - def resetCachedContent(self) -> None: ... - def setCacheMode(self, mode: 'QGraphicsView.CacheModeFlag') -> None: ... - def cacheMode(self) -> 'QGraphicsView.CacheModeFlag': ... - def setDragMode(self, mode: 'QGraphicsView.DragMode') -> None: ... - def dragMode(self) -> 'QGraphicsView.DragMode': ... - def setResizeAnchor(self, anchor: 'QGraphicsView.ViewportAnchor') -> None: ... - def resizeAnchor(self) -> 'QGraphicsView.ViewportAnchor': ... - def setTransformationAnchor(self, anchor: 'QGraphicsView.ViewportAnchor') -> None: ... - def transformationAnchor(self) -> 'QGraphicsView.ViewportAnchor': ... - def setAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setRenderHints(self, hints: QtGui.QPainter.RenderHint) -> None: ... - def setRenderHint(self, hint: QtGui.QPainter.RenderHint, on: bool = ...) -> None: ... - def renderHints(self) -> QtGui.QPainter.RenderHint: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QGridLayout(QLayout): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def itemAtPosition(self, row: int, column: int) -> typing.Optional[QLayoutItem]: ... - def spacing(self) -> int: ... - def setSpacing(self, spacing: int) -> None: ... - def verticalSpacing(self) -> int: ... - def setVerticalSpacing(self, spacing: int) -> None: ... - def horizontalSpacing(self) -> int: ... - def setHorizontalSpacing(self, spacing: int) -> None: ... - def getItemPosition(self, idx: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... - def setDefaultPositioning(self, n: int, orient: QtCore.Qt.Orientation) -> None: ... - @typing.overload - def addItem(self, item: typing.Optional[QLayoutItem], row: int, column: int, rowSpan: int = ..., columnSpan: int = ..., alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def count(self) -> int: ... - def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def originCorner(self) -> QtCore.Qt.Corner: ... - def setOriginCorner(self, a0: QtCore.Qt.Corner) -> None: ... - @typing.overload - def addLayout(self, a0: typing.Optional[QLayout], row: int, column: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def addLayout(self, a0: typing.Optional[QLayout], row: int, column: int, rowSpan: int, columnSpan: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def addWidget(self, w: typing.Optional[QWidget]) -> None: ... - @typing.overload - def addWidget(self, a0: typing.Optional[QWidget], row: int, column: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - @typing.overload - def addWidget(self, a0: typing.Optional[QWidget], row: int, column: int, rowSpan: int, columnSpan: int, alignment: QtCore.Qt.AlignmentFlag = ...) -> None: ... - def invalidate(self) -> None: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def minimumHeightForWidth(self, a0: int) -> int: ... - def heightForWidth(self, a0: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def cellRect(self, row: int, column: int) -> QtCore.QRect: ... - def rowCount(self) -> int: ... - def columnCount(self) -> int: ... - def columnMinimumWidth(self, column: int) -> int: ... - def rowMinimumHeight(self, row: int) -> int: ... - def setColumnMinimumWidth(self, column: int, minSize: int) -> None: ... - def setRowMinimumHeight(self, row: int, minSize: int) -> None: ... - def columnStretch(self, column: int) -> int: ... - def rowStretch(self, row: int) -> int: ... - def setColumnStretch(self, column: int, stretch: int) -> None: ... - def setRowStretch(self, row: int, stretch: int) -> None: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QGroupBox(QWidget): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def childEvent(self, a0: typing.Optional[QtCore.QChildEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionGroupBox']) -> None: ... - toggled: typing.ClassVar[QtCore.pyqtSignal] - clicked: typing.ClassVar[QtCore.pyqtSignal] - def setChecked(self, b: bool) -> None: ... - def isChecked(self) -> bool: ... - def setCheckable(self, b: bool) -> None: ... - def isCheckable(self) -> bool: ... - def setFlat(self, b: bool) -> None: ... - def isFlat(self) -> bool: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def setAlignment(self, a0: int) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setTitle(self, a0: typing.Optional[str]) -> None: ... - def title(self) -> str: ... - - -class QHeaderView(QAbstractItemView): - - class ResizeMode(enum.Enum): - Interactive = ... # type: QHeaderView.ResizeMode - Fixed = ... # type: QHeaderView.ResizeMode - Stretch = ... # type: QHeaderView.ResizeMode - ResizeToContents = ... # type: QHeaderView.ResizeMode - Custom = ... # type: QHeaderView.ResizeMode - - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - - sortIndicatorClearableChanged: typing.ClassVar[QtCore.pyqtSignal] - def isSortIndicatorClearable(self) -> bool: ... - def setSortIndicatorClearable(self, clearable: bool) -> None: ... - def isFirstSectionMovable(self) -> bool: ... - def setFirstSectionMovable(self, movable: bool) -> None: ... - def resetDefaultSectionSize(self) -> None: ... - def setMaximumSectionSize(self, size: int) -> None: ... - def maximumSectionSize(self) -> int: ... - def resizeContentsPrecision(self) -> int: ... - def setResizeContentsPrecision(self, precision: int) -> None: ... - def setVisible(self, v: bool) -> None: ... - @typing.overload - def setSectionResizeMode(self, logicalIndex: int, mode: 'QHeaderView.ResizeMode') -> None: ... - @typing.overload - def setSectionResizeMode(self, mode: 'QHeaderView.ResizeMode') -> None: ... - def sectionResizeMode(self, logicalIndex: int) -> 'QHeaderView.ResizeMode': ... - def sectionsClickable(self) -> bool: ... - def setSectionsClickable(self, clickable: bool) -> None: ... - def sectionsMovable(self) -> bool: ... - def setSectionsMovable(self, movable: bool) -> None: ... - def initStyleOptionForIndex(self, option: typing.Optional['QStyleOptionHeader'], logicalIndex: int) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionHeader']) -> None: ... - sortIndicatorChanged: typing.ClassVar[QtCore.pyqtSignal] - sectionEntered: typing.ClassVar[QtCore.pyqtSignal] - def setOffsetToLastSection(self) -> None: ... - def reset(self) -> None: ... - def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def saveState(self) -> QtCore.QByteArray: ... - def setMinimumSectionSize(self, size: int) -> None: ... - def minimumSectionSize(self) -> int: ... - def setCascadingSectionResizes(self, enable: bool) -> None: ... - def cascadingSectionResizes(self) -> bool: ... - def swapSections(self, first: int, second: int) -> None: ... - def sectionsHidden(self) -> bool: ... - def setDefaultAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def defaultAlignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setDefaultSectionSize(self, size: int) -> None: ... - def defaultSectionSize(self) -> int: ... - def hiddenSectionCount(self) -> int: ... - def showSection(self, alogicalIndex: int) -> None: ... - def hideSection(self, alogicalIndex: int) -> None: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, flags: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def moveCursor(self, a0: QAbstractItemView.CursorAction, a1: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def updateGeometries(self) -> None: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def sectionSizeFromContents(self, logicalIndex: int) -> QtCore.QSize: ... - def paintSection(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, logicalIndex: int) -> None: ... - def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def viewportEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def currentChanged(self, current: QtCore.QModelIndex, old: QtCore.QModelIndex) -> None: ... - @typing.overload - def initializeSections(self) -> None: ... - @typing.overload - def initializeSections(self, start: int, end: int) -> None: ... - def initialize(self) -> None: ... - def sectionsAboutToBeRemoved(self, parent: QtCore.QModelIndex, logicalFirst: int, logicalLast: int) -> None: ... - def sectionsInserted(self, parent: QtCore.QModelIndex, logicalFirst: int, logicalLast: int) -> None: ... - @typing.overload - def resizeSections(self) -> None: ... - @typing.overload - def resizeSections(self, mode: 'QHeaderView.ResizeMode') -> None: ... - def updateSection(self, logicalIndex: int) -> None: ... - sectionHandleDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - sectionCountChanged: typing.ClassVar[QtCore.pyqtSignal] - sectionDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - sectionClicked: typing.ClassVar[QtCore.pyqtSignal] - sectionPressed: typing.ClassVar[QtCore.pyqtSignal] - sectionResized: typing.ClassVar[QtCore.pyqtSignal] - sectionMoved: typing.ClassVar[QtCore.pyqtSignal] - geometriesChanged: typing.ClassVar[QtCore.pyqtSignal] - def setOffsetToSectionPosition(self, visualIndex: int) -> None: ... - def headerDataChanged(self, orientation: QtCore.Qt.Orientation, logicalFirst: int, logicalLast: int) -> None: ... - def setOffset(self, offset: int) -> None: ... - def sectionsMoved(self) -> bool: ... - def setStretchLastSection(self, stretch: bool) -> None: ... - def stretchLastSection(self) -> bool: ... - def sortIndicatorOrder(self) -> QtCore.Qt.SortOrder: ... - def sortIndicatorSection(self) -> int: ... - def setSortIndicator(self, logicalIndex: int, order: QtCore.Qt.SortOrder) -> None: ... - def isSortIndicatorShown(self) -> bool: ... - def setSortIndicatorShown(self, show: bool) -> None: ... - def stretchSectionCount(self) -> int: ... - def highlightSections(self) -> bool: ... - def setHighlightSections(self, highlight: bool) -> None: ... - def logicalIndex(self, visualIndex: int) -> int: ... - def visualIndex(self, logicalIndex: int) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def setSectionHidden(self, logicalIndex: int, hide: bool) -> None: ... - def isSectionHidden(self, logicalIndex: int) -> bool: ... - def resizeSection(self, logicalIndex: int, size: int) -> None: ... - def moveSection(self, from_: int, to: int) -> None: ... - def sectionViewportPosition(self, logicalIndex: int) -> int: ... - def sectionPosition(self, logicalIndex: int) -> int: ... - def sectionSize(self, logicalIndex: int) -> int: ... - @typing.overload - def logicalIndexAt(self, position: int) -> int: ... - @typing.overload - def logicalIndexAt(self, ax: int, ay: int) -> int: ... - @typing.overload - def logicalIndexAt(self, apos: QtCore.QPoint) -> int: ... - def visualIndexAt(self, position: int) -> int: ... - def sectionSizeHint(self, logicalIndex: int) -> int: ... - def sizeHint(self) -> QtCore.QSize: ... - def length(self) -> int: ... - def offset(self) -> int: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - - -class QInputDialog(QDialog): - - class InputMode(enum.Enum): - TextInput = ... # type: QInputDialog.InputMode - IntInput = ... # type: QInputDialog.InputMode - DoubleInput = ... # type: QInputDialog.InputMode - - class InputDialogOption(enum.Flag): - NoButtons = ... # type: QInputDialog.InputDialogOption - UseListViewForComboBoxItems = ... # type: QInputDialog.InputDialogOption - UsePlainTextEditForTextInput = ... # type: QInputDialog.InputDialogOption - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def doubleStep(self) -> float: ... - def setDoubleStep(self, step: float) -> None: ... - doubleValueSelected: typing.ClassVar[QtCore.pyqtSignal] - doubleValueChanged: typing.ClassVar[QtCore.pyqtSignal] - intValueSelected: typing.ClassVar[QtCore.pyqtSignal] - intValueChanged: typing.ClassVar[QtCore.pyqtSignal] - textValueSelected: typing.ClassVar[QtCore.pyqtSignal] - textValueChanged: typing.ClassVar[QtCore.pyqtSignal] - def done(self, result: int) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def cancelButtonText(self) -> str: ... - def setCancelButtonText(self, text: typing.Optional[str]) -> None: ... - def okButtonText(self) -> str: ... - def setOkButtonText(self, text: typing.Optional[str]) -> None: ... - def doubleDecimals(self) -> int: ... - def setDoubleDecimals(self, decimals: int) -> None: ... - def setDoubleRange(self, min: float, max: float) -> None: ... - def doubleMaximum(self) -> float: ... - def setDoubleMaximum(self, max: float) -> None: ... - def doubleMinimum(self) -> float: ... - def setDoubleMinimum(self, min: float) -> None: ... - def doubleValue(self) -> float: ... - def setDoubleValue(self, value: float) -> None: ... - def intStep(self) -> int: ... - def setIntStep(self, step: int) -> None: ... - def setIntRange(self, min: int, max: int) -> None: ... - def intMaximum(self) -> int: ... - def setIntMaximum(self, max: int) -> None: ... - def intMinimum(self) -> int: ... - def setIntMinimum(self, min: int) -> None: ... - def intValue(self) -> int: ... - def setIntValue(self, value: int) -> None: ... - def comboBoxItems(self) -> typing.List[str]: ... - def setComboBoxItems(self, items: typing.Iterable[typing.Optional[str]]) -> None: ... - def isComboBoxEditable(self) -> bool: ... - def setComboBoxEditable(self, editable: bool) -> None: ... - def textEchoMode(self) -> 'QLineEdit.EchoMode': ... - def setTextEchoMode(self, mode: 'QLineEdit.EchoMode') -> None: ... - def textValue(self) -> str: ... - def setTextValue(self, text: typing.Optional[str]) -> None: ... - def options(self) -> 'QInputDialog.InputDialogOption': ... - def setOptions(self, options: 'QInputDialog.InputDialogOption') -> None: ... - def testOption(self, option: 'QInputDialog.InputDialogOption') -> bool: ... - def setOption(self, option: 'QInputDialog.InputDialogOption', on: bool = ...) -> None: ... - def labelText(self) -> str: ... - def setLabelText(self, text: typing.Optional[str]) -> None: ... - def inputMode(self) -> 'QInputDialog.InputMode': ... - def setInputMode(self, mode: 'QInputDialog.InputMode') -> None: ... - @staticmethod - def getMultiLineText(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], text: typing.Optional[str] = ..., flags: QtCore.Qt.WindowType = ..., inputMethodHints: QtCore.Qt.InputMethodHint = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... - @staticmethod - def getItem(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], items: typing.Iterable[typing.Optional[str]], current: int = ..., editable: bool = ..., flags: QtCore.Qt.WindowType = ..., inputMethodHints: QtCore.Qt.InputMethodHint = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... - @staticmethod - def getDouble(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], value: float = ..., min: float = ..., max: float = ..., decimals: int = ..., flags: QtCore.Qt.WindowType = ..., step: float = ...) -> typing.Tuple[float, typing.Optional[bool]]: ... - @staticmethod - def getInt(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], value: int = ..., min: int = ..., max: int = ..., step: int = ..., flags: QtCore.Qt.WindowType = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... - @staticmethod - def getText(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], echo: 'QLineEdit.EchoMode' = ..., text: typing.Optional[str] = ..., flags: QtCore.Qt.WindowType = ..., inputMethodHints: QtCore.Qt.InputMethodHint = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... - - -class QItemDelegate(QAbstractItemDelegate): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def drawFocus(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect) -> None: ... - def drawDisplay(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, text: typing.Optional[str]) -> None: ... - def drawDecoration(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, pixmap: QtGui.QPixmap) -> None: ... - def drawCheck(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, state: QtCore.Qt.CheckState) -> None: ... - def drawBackground(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - def setClipping(self, clip: bool) -> None: ... - def hasClipping(self) -> bool: ... - def setItemEditorFactory(self, factory: typing.Optional['QItemEditorFactory']) -> None: ... - def itemEditorFactory(self) -> typing.Optional['QItemEditorFactory']: ... - def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... - def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... - def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... - def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - - -class QItemEditorCreatorBase(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QItemEditorCreatorBase') -> None: ... - - def valuePropertyName(self) -> QtCore.QByteArray: ... - def createWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - - -class QItemEditorFactory(PyQt6.sip.wrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QItemEditorFactory') -> None: ... - - @staticmethod - def setDefaultFactory(factory: typing.Optional['QItemEditorFactory']) -> None: ... - @staticmethod - def defaultFactory() -> typing.Optional['QItemEditorFactory']: ... - def registerEditor(self, userType: int, creator: typing.Optional[QItemEditorCreatorBase]) -> None: ... - def valuePropertyName(self, userType: int) -> QtCore.QByteArray: ... - def createEditor(self, userType: int, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - - -class QKeySequenceEdit(QWidget): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setMaximumSequenceLength(self, count: int) -> None: ... - def finishingKeyCombinations(self) -> typing.List[QtCore.QKeyCombination]: ... - def setFinishingKeyCombinations(self, finishingKeyCombinations: typing.Iterable[QtCore.QKeyCombination]) -> None: ... - def maximumSequenceLength(self) -> int: ... - def isClearButtonEnabled(self) -> bool: ... - def setClearButtonEnabled(self, enable: bool) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - keySequenceChanged: typing.ClassVar[QtCore.pyqtSignal] - editingFinished: typing.ClassVar[QtCore.pyqtSignal] - def clear(self) -> None: ... - def setKeySequence(self, keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... - def keySequence(self) -> QtGui.QKeySequence: ... - - -class QLabel(QFrame): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setResourceProvider(self, provider: typing.Callable[[QtCore.QUrl], typing.Any]) -> None: ... - def resourceProvider(self) -> typing.Callable[[QtCore.QUrl], typing.Any]: ... - def selectionStart(self) -> int: ... - def selectedText(self) -> str: ... - def hasSelectedText(self) -> bool: ... - def setSelection(self, a0: int, a1: int) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusOutEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def contextMenuEvent(self, ev: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - linkHovered: typing.ClassVar[QtCore.pyqtSignal] - linkActivated: typing.ClassVar[QtCore.pyqtSignal] - def setText(self, a0: typing.Optional[str]) -> None: ... - def setPixmap(self, a0: QtGui.QPixmap) -> None: ... - def setPicture(self, a0: QtGui.QPicture) -> None: ... - @typing.overload - def setNum(self, a0: float) -> None: ... - @typing.overload - def setNum(self, a0: int) -> None: ... - def setMovie(self, movie: typing.Optional[QtGui.QMovie]) -> None: ... - def clear(self) -> None: ... - def setOpenExternalLinks(self, open: bool) -> None: ... - def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlag: ... - def setTextInteractionFlags(self, flags: QtCore.Qt.TextInteractionFlag) -> None: ... - def openExternalLinks(self) -> bool: ... - def heightForWidth(self, a0: int) -> int: ... - def buddy(self) -> typing.Optional[QWidget]: ... - def setBuddy(self, a0: typing.Optional[QWidget]) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def setScaledContents(self, a0: bool) -> None: ... - def hasScaledContents(self) -> bool: ... - def setMargin(self, a0: int) -> None: ... - def margin(self) -> int: ... - def setIndent(self, a0: int) -> None: ... - def indent(self) -> int: ... - def wordWrap(self) -> bool: ... - def setWordWrap(self, on: bool) -> None: ... - def setAlignment(self, a0: QtCore.Qt.AlignmentFlag) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setTextFormat(self, a0: QtCore.Qt.TextFormat) -> None: ... - def textFormat(self) -> QtCore.Qt.TextFormat: ... - def movie(self) -> typing.Optional[QtGui.QMovie]: ... - def picture(self) -> QtGui.QPicture: ... - def pixmap(self) -> QtGui.QPixmap: ... - def text(self) -> str: ... - - -class QSpacerItem(QLayoutItem): - - @typing.overload - def __init__(self, w: int, h: int, hPolicy: 'QSizePolicy.Policy' = ..., vPolicy: 'QSizePolicy.Policy' = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QSpacerItem') -> None: ... - - def sizePolicy(self) -> 'QSizePolicy': ... - def spacerItem(self) -> typing.Optional['QSpacerItem']: ... - def geometry(self) -> QtCore.QRect: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def isEmpty(self) -> bool: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def changeSize(self, w: int, h: int, hPolicy: 'QSizePolicy.Policy' = ..., vPolicy: 'QSizePolicy.Policy' = ...) -> None: ... - - -class QWidgetItem(QLayoutItem): - - def __init__(self, w: typing.Optional[QWidget]) -> None: ... - - def minimumHeightForWidth(self, a0: int) -> int: ... - def controlTypes(self) -> 'QSizePolicy.ControlType': ... - def heightForWidth(self, a0: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def widget(self) -> typing.Optional[QWidget]: ... - def geometry(self) -> QtCore.QRect: ... - def setGeometry(self, a0: QtCore.QRect) -> None: ... - def isEmpty(self) -> bool: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def maximumSize(self) -> QtCore.QSize: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QLCDNumber(QFrame): - - class SegmentStyle(enum.Enum): - Outline = ... # type: QLCDNumber.SegmentStyle - Filled = ... # type: QLCDNumber.SegmentStyle - Flat = ... # type: QLCDNumber.SegmentStyle - - class Mode(enum.Enum): - Hex = ... # type: QLCDNumber.Mode - Dec = ... # type: QLCDNumber.Mode - Oct = ... # type: QLCDNumber.Mode - Bin = ... # type: QLCDNumber.Mode - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, numDigits: int, parent: typing.Optional[QWidget] = ...) -> None: ... - - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - overflow: typing.ClassVar[QtCore.pyqtSignal] - def setSmallDecimalPoint(self, a0: bool) -> None: ... - def setBinMode(self) -> None: ... - def setOctMode(self) -> None: ... - def setDecMode(self) -> None: ... - def setHexMode(self) -> None: ... - @typing.overload - def display(self, str: typing.Optional[str]) -> None: ... - @typing.overload - def display(self, num: float) -> None: ... - @typing.overload - def display(self, num: int) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def intValue(self) -> int: ... - def value(self) -> float: ... - def setSegmentStyle(self, a0: 'QLCDNumber.SegmentStyle') -> None: ... - def segmentStyle(self) -> 'QLCDNumber.SegmentStyle': ... - def setMode(self, a0: 'QLCDNumber.Mode') -> None: ... - def mode(self) -> 'QLCDNumber.Mode': ... - @typing.overload - def checkOverflow(self, num: float) -> bool: ... - @typing.overload - def checkOverflow(self, num: int) -> bool: ... - def setNumDigits(self, nDigits: int) -> None: ... - def setDigitCount(self, nDigits: int) -> None: ... - def digitCount(self) -> int: ... - def smallDecimalPoint(self) -> bool: ... - - -class QLineEdit(QWidget): - - class ActionPosition(enum.Enum): - LeadingPosition = ... # type: QLineEdit.ActionPosition - TrailingPosition = ... # type: QLineEdit.ActionPosition - - class EchoMode(enum.Enum): - Normal = ... # type: QLineEdit.EchoMode - NoEcho = ... # type: QLineEdit.EchoMode - Password = ... # type: QLineEdit.EchoMode - PasswordEchoOnEdit = ... # type: QLineEdit.EchoMode - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, contents: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - inputRejected: typing.ClassVar[QtCore.pyqtSignal] - def selectionLength(self) -> int: ... - def selectionEnd(self) -> int: ... - @typing.overload - def addAction(self, a0: typing.Optional[QtGui.QAction]) -> None: ... - @typing.overload - def addAction(self, action: typing.Optional[QtGui.QAction], position: 'QLineEdit.ActionPosition') -> None: ... - @typing.overload - def addAction(self, icon: QtGui.QIcon, position: 'QLineEdit.ActionPosition') -> typing.Optional[QtGui.QAction]: ... - def isClearButtonEnabled(self) -> bool: ... - def setClearButtonEnabled(self, enable: bool) -> None: ... - def cursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... - def setCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... - def setPlaceholderText(self, a0: typing.Optional[str]) -> None: ... - def placeholderText(self) -> str: ... - def textMargins(self) -> QtCore.QMargins: ... - @typing.overload - def setTextMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... - @typing.overload - def setTextMargins(self, margins: QtCore.QMargins) -> None: ... - def completer(self) -> typing.Optional[QCompleter]: ... - def setCompleter(self, completer: typing.Optional[QCompleter]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - @typing.overload - def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - @typing.overload - def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... - def cursorRect(self) -> QtCore.QRect: ... - def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionFrame']) -> None: ... - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - editingFinished: typing.ClassVar[QtCore.pyqtSignal] - returnPressed: typing.ClassVar[QtCore.pyqtSignal] - cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] - textEdited: typing.ClassVar[QtCore.pyqtSignal] - textChanged: typing.ClassVar[QtCore.pyqtSignal] - def createStandardContextMenu(self) -> typing.Optional['QMenu']: ... - def insert(self, a0: typing.Optional[str]) -> None: ... - def deselect(self) -> None: ... - def paste(self) -> None: ... - def copy(self) -> None: ... - def cut(self) -> None: ... - def redo(self) -> None: ... - def undo(self) -> None: ... - def selectAll(self) -> None: ... - def clear(self) -> None: ... - def setText(self, a0: typing.Optional[str]) -> None: ... - def hasAcceptableInput(self) -> bool: ... - def setInputMask(self, inputMask: typing.Optional[str]) -> None: ... - def inputMask(self) -> str: ... - def dragEnabled(self) -> bool: ... - def setDragEnabled(self, b: bool) -> None: ... - def isRedoAvailable(self) -> bool: ... - def isUndoAvailable(self) -> bool: ... - def selectionStart(self) -> int: ... - def selectedText(self) -> str: ... - def hasSelectedText(self) -> bool: ... - def setSelection(self, a0: int, a1: int) -> None: ... - def setModified(self, a0: bool) -> None: ... - def isModified(self) -> bool: ... - def end(self, mark: bool) -> None: ... - def home(self, mark: bool) -> None: ... - def del_(self) -> None: ... - def backspace(self) -> None: ... - def cursorWordBackward(self, mark: bool) -> None: ... - def cursorWordForward(self, mark: bool) -> None: ... - def cursorBackward(self, mark: bool, steps: int = ...) -> None: ... - def cursorForward(self, mark: bool, steps: int = ...) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setAlignment(self, flag: QtCore.Qt.AlignmentFlag) -> None: ... - def cursorPositionAt(self, pos: QtCore.QPoint) -> int: ... - def setCursorPosition(self, a0: int) -> None: ... - def cursorPosition(self) -> int: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def validator(self) -> typing.Optional[QtGui.QValidator]: ... - def setValidator(self, a0: typing.Optional[QtGui.QValidator]) -> None: ... - def setReadOnly(self, a0: bool) -> None: ... - def isReadOnly(self) -> bool: ... - def setEchoMode(self, a0: 'QLineEdit.EchoMode') -> None: ... - def echoMode(self) -> 'QLineEdit.EchoMode': ... - def hasFrame(self) -> bool: ... - def setFrame(self, a0: bool) -> None: ... - def setMaxLength(self, a0: int) -> None: ... - def maxLength(self) -> int: ... - def displayText(self) -> str: ... - def text(self) -> str: ... - - -class QListView(QAbstractItemView): - - class ViewMode(enum.Enum): - ListMode = ... # type: QListView.ViewMode - IconMode = ... # type: QListView.ViewMode - - class LayoutMode(enum.Enum): - SinglePass = ... # type: QListView.LayoutMode - Batched = ... # type: QListView.LayoutMode - - class ResizeMode(enum.Enum): - Fixed = ... # type: QListView.ResizeMode - Adjust = ... # type: QListView.ResizeMode - - class Flow(enum.Enum): - LeftToRight = ... # type: QListView.Flow - TopToBottom = ... # type: QListView.Flow - - class Movement(enum.Enum): - Static = ... # type: QListView.Movement - Free = ... # type: QListView.Movement - Snap = ... # type: QListView.Movement - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def itemAlignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setItemAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def initViewItemOption(self, option: typing.Optional['QStyleOptionViewItem']) -> None: ... - def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... - def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... - def isSelectionRectVisible(self) -> bool: ... - def setSelectionRectVisible(self, show: bool) -> None: ... - def wordWrap(self) -> bool: ... - def setWordWrap(self, on: bool) -> None: ... - def batchSize(self) -> int: ... - def setBatchSize(self, batchSize: int) -> None: ... - def viewportSizeHint(self) -> QtCore.QSize: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def updateGeometries(self) -> None: ... - def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def setPositionForIndex(self, position: QtCore.QPoint, index: QtCore.QModelIndex) -> None: ... - def rectForIndex(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def startDrag(self, supportedActions: QtCore.Qt.DropAction) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - indexesMoved: typing.ClassVar[QtCore.pyqtSignal] - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def reset(self) -> None: ... - def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def uniformItemSizes(self) -> bool: ... - def setUniformItemSizes(self, enable: bool) -> None: ... - def modelColumn(self) -> int: ... - def setModelColumn(self, column: int) -> None: ... - def setRowHidden(self, row: int, hide: bool) -> None: ... - def isRowHidden(self, row: int) -> bool: ... - def clearPropertyFlags(self) -> None: ... - def viewMode(self) -> 'QListView.ViewMode': ... - def setViewMode(self, mode: 'QListView.ViewMode') -> None: ... - def gridSize(self) -> QtCore.QSize: ... - def setGridSize(self, size: QtCore.QSize) -> None: ... - def spacing(self) -> int: ... - def setSpacing(self, space: int) -> None: ... - def layoutMode(self) -> 'QListView.LayoutMode': ... - def setLayoutMode(self, mode: 'QListView.LayoutMode') -> None: ... - def resizeMode(self) -> 'QListView.ResizeMode': ... - def setResizeMode(self, mode: 'QListView.ResizeMode') -> None: ... - def isWrapping(self) -> bool: ... - def setWrapping(self, enable: bool) -> None: ... - def flow(self) -> 'QListView.Flow': ... - def setFlow(self, flow: 'QListView.Flow') -> None: ... - def movement(self) -> 'QListView.Movement': ... - def setMovement(self, movement: 'QListView.Movement') -> None: ... - - -class QListWidgetItem(PyQt6.sip.wrapper): - - class ItemType(enum.IntEnum): - Type = ... # type: QListWidgetItem.ItemType - UserType = ... # type: QListWidgetItem.ItemType - - @typing.overload - def __init__(self, parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QListWidgetItem') -> None: ... - - def __ge__(self, other: 'QListWidgetItem') -> bool: ... - def isHidden(self) -> bool: ... - def setHidden(self, ahide: bool) -> None: ... - def isSelected(self) -> bool: ... - def setSelected(self, aselect: bool) -> None: ... - def setForeground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def foreground(self) -> QtGui.QBrush: ... - def setBackground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def background(self) -> QtGui.QBrush: ... - def setFont(self, afont: QtGui.QFont) -> None: ... - def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... - def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... - def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... - def setIcon(self, aicon: QtGui.QIcon) -> None: ... - def setText(self, atext: typing.Optional[str]) -> None: ... - def setFlags(self, aflags: QtCore.Qt.ItemFlag) -> None: ... - def type(self) -> int: ... - def write(self, out: QtCore.QDataStream) -> None: ... - def read(self, in_: QtCore.QDataStream) -> None: ... - def __lt__(self, other: 'QListWidgetItem') -> bool: ... - def setData(self, role: int, value: typing.Any) -> None: ... - def data(self, role: int) -> typing.Any: ... - def setSizeHint(self, size: QtCore.QSize) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... - def checkState(self) -> QtCore.Qt.CheckState: ... - @typing.overload - def setTextAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - @typing.overload - def setTextAlignment(self, alignment: int) -> None: ... - def textAlignment(self) -> int: ... - def font(self) -> QtGui.QFont: ... - def whatsThis(self) -> str: ... - def toolTip(self) -> str: ... - def statusTip(self) -> str: ... - def icon(self) -> QtGui.QIcon: ... - def text(self) -> str: ... - def flags(self) -> QtCore.Qt.ItemFlag: ... - def listWidget(self) -> typing.Optional['QListWidget']: ... - def clone(self) -> typing.Optional['QListWidgetItem']: ... - - -class QListWidget(QListView): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def isPersistentEditorOpen(self, item: typing.Optional[QListWidgetItem]) -> bool: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def removeItemWidget(self, aItem: typing.Optional[QListWidgetItem]) -> None: ... - def isSortingEnabled(self) -> bool: ... - def setSortingEnabled(self, enable: bool) -> None: ... - def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QListWidgetItem]: ... - def indexFromItem(self, item: typing.Optional[QListWidgetItem]) -> QtCore.QModelIndex: ... - def items(self, data: typing.Optional[QtCore.QMimeData]) -> typing.List[QListWidgetItem]: ... - def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def supportedDropActions(self) -> QtCore.Qt.DropAction: ... - def dropMimeData(self, index: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... - def mimeData(self, items: typing.Iterable[QListWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... - def mimeTypes(self) -> typing.List[str]: ... - itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] - currentRowChanged: typing.ClassVar[QtCore.pyqtSignal] - currentTextChanged: typing.ClassVar[QtCore.pyqtSignal] - currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemEntered: typing.ClassVar[QtCore.pyqtSignal] - itemActivated: typing.ClassVar[QtCore.pyqtSignal] - itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - itemClicked: typing.ClassVar[QtCore.pyqtSignal] - itemPressed: typing.ClassVar[QtCore.pyqtSignal] - def scrollToItem(self, item: typing.Optional[QListWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def clear(self) -> None: ... - def findItems(self, text: typing.Optional[str], flags: QtCore.Qt.MatchFlag) -> typing.List[QListWidgetItem]: ... - def selectedItems(self) -> typing.List[QListWidgetItem]: ... - def closePersistentEditor(self, item: typing.Optional[QListWidgetItem]) -> None: ... - def openPersistentEditor(self, item: typing.Optional[QListWidgetItem]) -> None: ... - def editItem(self, item: typing.Optional[QListWidgetItem]) -> None: ... - def sortItems(self, order: QtCore.Qt.SortOrder = ...) -> None: ... - def visualItemRect(self, item: typing.Optional[QListWidgetItem]) -> QtCore.QRect: ... - def setItemWidget(self, item: typing.Optional[QListWidgetItem], widget: typing.Optional[QWidget]) -> None: ... - def itemWidget(self, item: typing.Optional[QListWidgetItem]) -> typing.Optional[QWidget]: ... - @typing.overload - def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QListWidgetItem]: ... - @typing.overload - def itemAt(self, ax: int, ay: int) -> typing.Optional[QListWidgetItem]: ... - @typing.overload - def setCurrentRow(self, row: int) -> None: ... - @typing.overload - def setCurrentRow(self, row: int, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def currentRow(self) -> int: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QListWidgetItem]) -> None: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QListWidgetItem], command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def currentItem(self) -> typing.Optional[QListWidgetItem]: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def takeItem(self, row: int) -> typing.Optional[QListWidgetItem]: ... - def addItems(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def addItem(self, aitem: typing.Optional[QListWidgetItem]) -> None: ... - @typing.overload - def addItem(self, label: typing.Optional[str]) -> None: ... - def insertItems(self, row: int, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - @typing.overload - def insertItem(self, row: int, item: typing.Optional[QListWidgetItem]) -> None: ... - @typing.overload - def insertItem(self, row: int, label: typing.Optional[str]) -> None: ... - def row(self, item: typing.Optional[QListWidgetItem]) -> int: ... - def item(self, row: int) -> typing.Optional[QListWidgetItem]: ... - - -class QMainWindow(QWidget): - - class DockOption(enum.Flag): - AnimatedDocks = ... # type: QMainWindow.DockOption - AllowNestedDocks = ... # type: QMainWindow.DockOption - AllowTabbedDocks = ... # type: QMainWindow.DockOption - ForceTabbedDocks = ... # type: QMainWindow.DockOption - VerticalTabs = ... # type: QMainWindow.DockOption - GroupedDragging = ... # type: QMainWindow.DockOption - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def resizeDocks(self, docks: typing.Iterable[QDockWidget], sizes: typing.Iterable[int], orientation: QtCore.Qt.Orientation) -> None: ... - def takeCentralWidget(self) -> typing.Optional[QWidget]: ... - def tabifiedDockWidgets(self, dockwidget: typing.Optional[QDockWidget]) -> typing.List[QDockWidget]: ... - def setTabPosition(self, areas: QtCore.Qt.DockWidgetArea, tabPosition: 'QTabWidget.TabPosition') -> None: ... - def tabPosition(self, area: QtCore.Qt.DockWidgetArea) -> 'QTabWidget.TabPosition': ... - def setTabShape(self, tabShape: 'QTabWidget.TabShape') -> None: ... - def tabShape(self) -> 'QTabWidget.TabShape': ... - def setDocumentMode(self, enabled: bool) -> None: ... - def documentMode(self) -> bool: ... - def restoreDockWidget(self, dockwidget: typing.Optional[QDockWidget]) -> bool: ... - def unifiedTitleAndToolBarOnMac(self) -> bool: ... - def setUnifiedTitleAndToolBarOnMac(self, set: bool) -> None: ... - def toolBarBreak(self, toolbar: typing.Optional['QToolBar']) -> bool: ... - def removeToolBarBreak(self, before: typing.Optional['QToolBar']) -> None: ... - def dockOptions(self) -> 'QMainWindow.DockOption': ... - def setDockOptions(self, options: 'QMainWindow.DockOption') -> None: ... - def tabifyDockWidget(self, first: typing.Optional[QDockWidget], second: typing.Optional[QDockWidget]) -> None: ... - def setMenuWidget(self, menubar: typing.Optional[QWidget]) -> None: ... - def menuWidget(self) -> typing.Optional[QWidget]: ... - def isSeparator(self, pos: QtCore.QPoint) -> bool: ... - def isDockNestingEnabled(self) -> bool: ... - def isAnimated(self) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def contextMenuEvent(self, event: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - tabifiedDockWidgetActivated: typing.ClassVar[QtCore.pyqtSignal] - toolButtonStyleChanged: typing.ClassVar[QtCore.pyqtSignal] - iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - def setDockNestingEnabled(self, enabled: bool) -> None: ... - def setAnimated(self, enabled: bool) -> None: ... - def createPopupMenu(self) -> typing.Optional['QMenu']: ... - def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], version: int = ...) -> bool: ... - def saveState(self, version: int = ...) -> QtCore.QByteArray: ... - def dockWidgetArea(self, dockwidget: typing.Optional[QDockWidget]) -> QtCore.Qt.DockWidgetArea: ... - def removeDockWidget(self, dockwidget: typing.Optional[QDockWidget]) -> None: ... - def splitDockWidget(self, after: typing.Optional[QDockWidget], dockwidget: typing.Optional[QDockWidget], orientation: QtCore.Qt.Orientation) -> None: ... - @typing.overload - def addDockWidget(self, area: QtCore.Qt.DockWidgetArea, dockwidget: typing.Optional[QDockWidget]) -> None: ... - @typing.overload - def addDockWidget(self, area: QtCore.Qt.DockWidgetArea, dockwidget: typing.Optional[QDockWidget], orientation: QtCore.Qt.Orientation) -> None: ... - def toolBarArea(self, toolbar: typing.Optional['QToolBar']) -> QtCore.Qt.ToolBarArea: ... - def removeToolBar(self, toolbar: typing.Optional['QToolBar']) -> None: ... - def insertToolBar(self, before: typing.Optional['QToolBar'], toolbar: typing.Optional['QToolBar']) -> None: ... - @typing.overload - def addToolBar(self, area: QtCore.Qt.ToolBarArea, toolbar: typing.Optional['QToolBar']) -> None: ... - @typing.overload - def addToolBar(self, toolbar: typing.Optional['QToolBar']) -> None: ... - @typing.overload - def addToolBar(self, title: typing.Optional[str]) -> typing.Optional['QToolBar']: ... - def insertToolBarBreak(self, before: typing.Optional['QToolBar']) -> None: ... - def addToolBarBreak(self, area: QtCore.Qt.ToolBarArea = ...) -> None: ... - def corner(self, corner: QtCore.Qt.Corner) -> QtCore.Qt.DockWidgetArea: ... - def setCorner(self, corner: QtCore.Qt.Corner, area: QtCore.Qt.DockWidgetArea) -> None: ... - def setCentralWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def centralWidget(self) -> typing.Optional[QWidget]: ... - def setStatusBar(self, statusbar: typing.Optional['QStatusBar']) -> None: ... - def statusBar(self) -> typing.Optional['QStatusBar']: ... - def setMenuBar(self, menubar: typing.Optional['QMenuBar']) -> None: ... - def menuBar(self) -> typing.Optional['QMenuBar']: ... - def setToolButtonStyle(self, toolButtonStyle: QtCore.Qt.ToolButtonStyle) -> None: ... - def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... - def setIconSize(self, iconSize: QtCore.QSize) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - - -class QMdiArea(QAbstractScrollArea): - - class WindowOrder(enum.Enum): - CreationOrder = ... # type: QMdiArea.WindowOrder - StackingOrder = ... # type: QMdiArea.WindowOrder - ActivationHistoryOrder = ... # type: QMdiArea.WindowOrder - - class ViewMode(enum.Enum): - SubWindowView = ... # type: QMdiArea.ViewMode - TabbedView = ... # type: QMdiArea.ViewMode - - class AreaOption(enum.Flag): - DontMaximizeSubWindowOnActivation = ... # type: QMdiArea.AreaOption - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def tabsMovable(self) -> bool: ... - def setTabsMovable(self, movable: bool) -> None: ... - def tabsClosable(self) -> bool: ... - def setTabsClosable(self, closable: bool) -> None: ... - def setDocumentMode(self, enabled: bool) -> None: ... - def documentMode(self) -> bool: ... - def tabPosition(self) -> 'QTabWidget.TabPosition': ... - def setTabPosition(self, position: 'QTabWidget.TabPosition') -> None: ... - def tabShape(self) -> 'QTabWidget.TabShape': ... - def setTabShape(self, shape: 'QTabWidget.TabShape') -> None: ... - def viewMode(self) -> 'QMdiArea.ViewMode': ... - def setViewMode(self, mode: 'QMdiArea.ViewMode') -> None: ... - def setActivationOrder(self, order: 'QMdiArea.WindowOrder') -> None: ... - def activationOrder(self) -> 'QMdiArea.WindowOrder': ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... - def timerEvent(self, timerEvent: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def resizeEvent(self, resizeEvent: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def childEvent(self, childEvent: typing.Optional[QtCore.QChildEvent]) -> None: ... - def paintEvent(self, paintEvent: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def setupViewport(self, viewport: typing.Optional[QWidget]) -> None: ... - def activatePreviousSubWindow(self) -> None: ... - def activateNextSubWindow(self) -> None: ... - def closeAllSubWindows(self) -> None: ... - def closeActiveSubWindow(self) -> None: ... - def cascadeSubWindows(self) -> None: ... - def tileSubWindows(self) -> None: ... - def setActiveSubWindow(self, window: typing.Optional['QMdiSubWindow']) -> None: ... - subWindowActivated: typing.ClassVar[QtCore.pyqtSignal] - def testOption(self, opton: 'QMdiArea.AreaOption') -> bool: ... - def setOption(self, option: 'QMdiArea.AreaOption', on: bool = ...) -> None: ... - def setBackground(self, background: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def background(self) -> QtGui.QBrush: ... - def removeSubWindow(self, widget: typing.Optional[QWidget]) -> None: ... - def currentSubWindow(self) -> typing.Optional['QMdiSubWindow']: ... - def subWindowList(self, order: 'QMdiArea.WindowOrder' = ...) -> typing.List['QMdiSubWindow']: ... - def addSubWindow(self, widget: typing.Optional[QWidget], flags: QtCore.Qt.WindowType = ...) -> typing.Optional['QMdiSubWindow']: ... - def activeSubWindow(self) -> typing.Optional['QMdiSubWindow']: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QMdiSubWindow(QWidget): - - class SubWindowOption(enum.Flag): - RubberBandResize = ... # type: QMdiSubWindow.SubWindowOption - RubberBandMove = ... # type: QMdiSubWindow.SubWindowOption - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def childEvent(self, childEvent: typing.Optional[QtCore.QChildEvent]) -> None: ... - def focusOutEvent(self, focusOutEvent: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, focusInEvent: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def contextMenuEvent(self, contextMenuEvent: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def keyPressEvent(self, keyEvent: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def mouseMoveEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseDoubleClickEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, paintEvent: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def moveEvent(self, moveEvent: typing.Optional[QtGui.QMoveEvent]) -> None: ... - def timerEvent(self, timerEvent: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def resizeEvent(self, resizeEvent: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def leaveEvent(self, leaveEvent: typing.Optional[QtCore.QEvent]) -> None: ... - def closeEvent(self, closeEvent: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def changeEvent(self, changeEvent: typing.Optional[QtCore.QEvent]) -> None: ... - def hideEvent(self, hideEvent: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def showShaded(self) -> None: ... - def showSystemMenu(self) -> None: ... - aboutToActivate: typing.ClassVar[QtCore.pyqtSignal] - windowStateChanged: typing.ClassVar[QtCore.pyqtSignal] - def mdiArea(self) -> typing.Optional[QMdiArea]: ... - def systemMenu(self) -> typing.Optional['QMenu']: ... - def setSystemMenu(self, systemMenu: typing.Optional['QMenu']) -> None: ... - def keyboardPageStep(self) -> int: ... - def setKeyboardPageStep(self, step: int) -> None: ... - def keyboardSingleStep(self) -> int: ... - def setKeyboardSingleStep(self, step: int) -> None: ... - def testOption(self, a0: 'QMdiSubWindow.SubWindowOption') -> bool: ... - def setOption(self, option: 'QMdiSubWindow.SubWindowOption', on: bool = ...) -> None: ... - def isShaded(self) -> bool: ... - def widget(self) -> typing.Optional[QWidget]: ... - def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QMenu(QWidget): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - @staticmethod - def menuInAction(action: typing.Optional[QtGui.QAction]) -> typing.Optional['QMenu']: ... - @typing.overload - def showTearOffMenu(self) -> None: ... - @typing.overload - def showTearOffMenu(self, pos: QtCore.QPoint) -> None: ... - def setToolTipsVisible(self, visible: bool) -> None: ... - def toolTipsVisible(self) -> bool: ... - @typing.overload - def insertSection(self, before: typing.Optional[QtGui.QAction], text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def insertSection(self, before: typing.Optional[QtGui.QAction], icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addSection(self, text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addSection(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QtGui.QAction]: ... - def setSeparatorsCollapsible(self, collapse: bool) -> None: ... - def separatorsCollapsible(self) -> bool: ... - def isEmpty(self) -> bool: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def enterEvent(self, a0: typing.Optional[QtGui.QEnterEvent]) -> None: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionMenuItem'], action: typing.Optional[QtGui.QAction]) -> None: ... - def columnCount(self) -> int: ... - triggered: typing.ClassVar[QtCore.pyqtSignal] - hovered: typing.ClassVar[QtCore.pyqtSignal] - aboutToShow: typing.ClassVar[QtCore.pyqtSignal] - aboutToHide: typing.ClassVar[QtCore.pyqtSignal] - def setNoReplayFor(self, widget: typing.Optional[QWidget]) -> None: ... - def setIcon(self, icon: QtGui.QIcon) -> None: ... - def icon(self) -> QtGui.QIcon: ... - def setTitle(self, title: typing.Optional[str]) -> None: ... - def title(self) -> str: ... - def menuAction(self) -> typing.Optional[QtGui.QAction]: ... - def actionAt(self, a0: QtCore.QPoint) -> typing.Optional[QtGui.QAction]: ... - def actionGeometry(self, a0: typing.Optional[QtGui.QAction]) -> QtCore.QRect: ... - def sizeHint(self) -> QtCore.QSize: ... - @typing.overload - def exec(self) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def exec(self, p: QtCore.QPoint, action: typing.Optional[QtGui.QAction] = ...) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - @staticmethod - def exec(actions: typing.Iterable[QtGui.QAction], pos: QtCore.QPoint, at: typing.Optional[QtGui.QAction] = ..., parent: typing.Optional[QWidget] = ...) -> typing.Optional[QtGui.QAction]: ... - def popup(self, p: QtCore.QPoint, action: typing.Optional[QtGui.QAction] = ...) -> None: ... - def activeAction(self) -> typing.Optional[QtGui.QAction]: ... - def setActiveAction(self, act: typing.Optional[QtGui.QAction]) -> None: ... - def defaultAction(self) -> typing.Optional[QtGui.QAction]: ... - def setDefaultAction(self, a0: typing.Optional[QtGui.QAction]) -> None: ... - def hideTearOffMenu(self) -> None: ... - def isTearOffMenuVisible(self) -> bool: ... - def isTearOffEnabled(self) -> bool: ... - def setTearOffEnabled(self, a0: bool) -> None: ... - def clear(self) -> None: ... - def insertSeparator(self, before: typing.Optional[QtGui.QAction]) -> typing.Optional[QtGui.QAction]: ... - def insertMenu(self, before: typing.Optional[QtGui.QAction], menu: typing.Optional['QMenu']) -> typing.Optional[QtGui.QAction]: ... - def addSeparator(self) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addMenu(self, menu: typing.Optional['QMenu']) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addMenu(self, title: typing.Optional[str]) -> typing.Optional['QMenu']: ... - @typing.overload - def addMenu(self, icon: QtGui.QIcon, title: typing.Optional[str]) -> typing.Optional['QMenu']: ... - - -class QMenuBar(QWidget): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setNativeMenuBar(self, nativeMenuBar: bool) -> None: ... - def isNativeMenuBar(self) -> bool: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionMenuItem'], action: typing.Optional[QtGui.QAction]) -> None: ... - hovered: typing.ClassVar[QtCore.pyqtSignal] - triggered: typing.ClassVar[QtCore.pyqtSignal] - def setVisible(self, visible: bool) -> None: ... - def cornerWidget(self, corner: QtCore.Qt.Corner = ...) -> typing.Optional[QWidget]: ... - def setCornerWidget(self, widget: typing.Optional[QWidget], corner: QtCore.Qt.Corner = ...) -> None: ... - def actionAt(self, a0: QtCore.QPoint) -> typing.Optional[QtGui.QAction]: ... - def actionGeometry(self, a0: typing.Optional[QtGui.QAction]) -> QtCore.QRect: ... - def heightForWidth(self, a0: int) -> int: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def isDefaultUp(self) -> bool: ... - def setDefaultUp(self, a0: bool) -> None: ... - def setActiveAction(self, action: typing.Optional[QtGui.QAction]) -> None: ... - def activeAction(self) -> typing.Optional[QtGui.QAction]: ... - def clear(self) -> None: ... - def insertSeparator(self, before: typing.Optional[QtGui.QAction]) -> typing.Optional[QtGui.QAction]: ... - def insertMenu(self, before: typing.Optional[QtGui.QAction], menu: typing.Optional[QMenu]) -> typing.Optional[QtGui.QAction]: ... - def addSeparator(self) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addMenu(self, menu: typing.Optional[QMenu]) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def addMenu(self, title: typing.Optional[str]) -> typing.Optional[QMenu]: ... - @typing.overload - def addMenu(self, icon: QtGui.QIcon, title: typing.Optional[str]) -> typing.Optional[QMenu]: ... - - -class QMessageBox(QDialog): - - class Option(enum.Enum): - DontUseNativeDialog = ... # type: QMessageBox.Option - - class StandardButton(enum.IntFlag): - NoButton = ... # type: QMessageBox.StandardButton - Ok = ... # type: QMessageBox.StandardButton - Save = ... # type: QMessageBox.StandardButton - SaveAll = ... # type: QMessageBox.StandardButton - Open = ... # type: QMessageBox.StandardButton - Yes = ... # type: QMessageBox.StandardButton - YesToAll = ... # type: QMessageBox.StandardButton - No = ... # type: QMessageBox.StandardButton - NoToAll = ... # type: QMessageBox.StandardButton - Abort = ... # type: QMessageBox.StandardButton - Retry = ... # type: QMessageBox.StandardButton - Ignore = ... # type: QMessageBox.StandardButton - Close = ... # type: QMessageBox.StandardButton - Cancel = ... # type: QMessageBox.StandardButton - Discard = ... # type: QMessageBox.StandardButton - Help = ... # type: QMessageBox.StandardButton - Apply = ... # type: QMessageBox.StandardButton - Reset = ... # type: QMessageBox.StandardButton - RestoreDefaults = ... # type: QMessageBox.StandardButton - FirstButton = ... # type: QMessageBox.StandardButton - LastButton = ... # type: QMessageBox.StandardButton - YesAll = ... # type: QMessageBox.StandardButton - NoAll = ... # type: QMessageBox.StandardButton - Default = ... # type: QMessageBox.StandardButton - Escape = ... # type: QMessageBox.StandardButton - FlagMask = ... # type: QMessageBox.StandardButton - ButtonMask = ... # type: QMessageBox.StandardButton - - class Icon(enum.Enum): - NoIcon = ... # type: QMessageBox.Icon - Information = ... # type: QMessageBox.Icon - Warning = ... # type: QMessageBox.Icon - Critical = ... # type: QMessageBox.Icon - Question = ... # type: QMessageBox.Icon - - class ButtonRole(enum.Enum): - InvalidRole = ... # type: QMessageBox.ButtonRole - AcceptRole = ... # type: QMessageBox.ButtonRole - RejectRole = ... # type: QMessageBox.ButtonRole - DestructiveRole = ... # type: QMessageBox.ButtonRole - ActionRole = ... # type: QMessageBox.ButtonRole - HelpRole = ... # type: QMessageBox.ButtonRole - YesRole = ... # type: QMessageBox.ButtonRole - NoRole = ... # type: QMessageBox.ButtonRole - ResetRole = ... # type: QMessageBox.ButtonRole - ApplyRole = ... # type: QMessageBox.ButtonRole - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, icon: 'QMessageBox.Icon', title: typing.Optional[str], text: typing.Optional[str], buttons: 'QMessageBox.StandardButton' = ..., parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def options(self) -> 'QMessageBox.Option': ... - def setOptions(self, options: 'QMessageBox.Option') -> None: ... - def testOption(self, option: 'QMessageBox.Option') -> bool: ... - def setOption(self, option: 'QMessageBox.Option', on: bool = ...) -> None: ... - def checkBox(self) -> typing.Optional[QCheckBox]: ... - def setCheckBox(self, cb: typing.Optional[QCheckBox]) -> None: ... - def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlag: ... - def setTextInteractionFlags(self, flags: QtCore.Qt.TextInteractionFlag) -> None: ... - buttonClicked: typing.ClassVar[QtCore.pyqtSignal] - def buttonRole(self, button: typing.Optional[QAbstractButton]) -> 'QMessageBox.ButtonRole': ... - def buttons(self) -> typing.List[QAbstractButton]: ... - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def setWindowModality(self, windowModality: QtCore.Qt.WindowModality) -> None: ... - def setWindowTitle(self, title: typing.Optional[str]) -> None: ... - def setDetailedText(self, text: typing.Optional[str]) -> None: ... - def detailedText(self) -> str: ... - def setInformativeText(self, text: typing.Optional[str]) -> None: ... - def informativeText(self) -> str: ... - def clickedButton(self) -> typing.Optional[QAbstractButton]: ... - @typing.overload - def setEscapeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... - @typing.overload - def setEscapeButton(self, button: 'QMessageBox.StandardButton') -> None: ... - def escapeButton(self) -> typing.Optional[QAbstractButton]: ... - @typing.overload - def setDefaultButton(self, button: typing.Optional[QPushButton]) -> None: ... - @typing.overload - def setDefaultButton(self, button: 'QMessageBox.StandardButton') -> None: ... - def defaultButton(self) -> typing.Optional[QPushButton]: ... - def button(self, which: 'QMessageBox.StandardButton') -> typing.Optional[QAbstractButton]: ... - def standardButton(self, button: typing.Optional[QAbstractButton]) -> 'QMessageBox.StandardButton': ... - def standardButtons(self) -> 'QMessageBox.StandardButton': ... - def setStandardButtons(self, buttons: 'QMessageBox.StandardButton') -> None: ... - def removeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... - @typing.overload - def addButton(self, button: typing.Optional[QAbstractButton], role: 'QMessageBox.ButtonRole') -> None: ... - @typing.overload - def addButton(self, text: typing.Optional[str], role: 'QMessageBox.ButtonRole') -> typing.Optional[QPushButton]: ... - @typing.overload - def addButton(self, button: 'QMessageBox.StandardButton') -> typing.Optional[QPushButton]: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - @staticmethod - def standardIcon(icon: 'QMessageBox.Icon') -> QtGui.QPixmap: ... - @staticmethod - def aboutQt(parent: typing.Optional[QWidget], title: typing.Optional[str] = ...) -> None: ... - @staticmethod - def about(parent: typing.Optional[QWidget], caption: typing.Optional[str], text: typing.Optional[str]) -> None: ... - @staticmethod - def critical(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: 'QMessageBox.StandardButton' = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... - @staticmethod - def warning(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: 'QMessageBox.StandardButton' = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... - @staticmethod - def question(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: 'QMessageBox.StandardButton' = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... - @staticmethod - def information(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: 'QMessageBox.StandardButton' = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... - def setTextFormat(self, a0: QtCore.Qt.TextFormat) -> None: ... - def textFormat(self) -> QtCore.Qt.TextFormat: ... - def setIconPixmap(self, a0: QtGui.QPixmap) -> None: ... - def iconPixmap(self) -> QtGui.QPixmap: ... - def setIcon(self, a0: 'QMessageBox.Icon') -> None: ... - def icon(self) -> 'QMessageBox.Icon': ... - def setText(self, a0: typing.Optional[str]) -> None: ... - def text(self) -> str: ... - - -class QPlainTextEdit(QAbstractScrollArea): - - class LineWrapMode(enum.Enum): - NoWrap = ... # type: QPlainTextEdit.LineWrapMode - WidgetWidth = ... # type: QPlainTextEdit.LineWrapMode - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setTabStopDistance(self, distance: float) -> None: ... - def tabStopDistance(self) -> float: ... - def placeholderText(self) -> str: ... - def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... - def zoomOut(self, range: int = ...) -> None: ... - def zoomIn(self, range: int = ...) -> None: ... - def anchorAt(self, pos: QtCore.QPoint) -> str: ... - def getPaintContext(self) -> QtGui.QAbstractTextDocumentLayout.PaintContext: ... - def blockBoundingGeometry(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... - def blockBoundingRect(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... - def contentOffset(self) -> QtCore.QPointF: ... - def firstVisibleBlock(self) -> QtGui.QTextBlock: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def insertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> None: ... - def canInsertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> bool: ... - def createMimeDataFromSelection(self) -> typing.Optional[QtCore.QMimeData]: ... - @typing.overload - def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - @typing.overload - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - modificationChanged: typing.ClassVar[QtCore.pyqtSignal] - blockCountChanged: typing.ClassVar[QtCore.pyqtSignal] - updateRequest: typing.ClassVar[QtCore.pyqtSignal] - cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - copyAvailable: typing.ClassVar[QtCore.pyqtSignal] - redoAvailable: typing.ClassVar[QtCore.pyqtSignal] - undoAvailable: typing.ClassVar[QtCore.pyqtSignal] - textChanged: typing.ClassVar[QtCore.pyqtSignal] - def centerCursor(self) -> None: ... - def appendHtml(self, html: typing.Optional[str]) -> None: ... - def appendPlainText(self, text: typing.Optional[str]) -> None: ... - def insertPlainText(self, text: typing.Optional[str]) -> None: ... - def selectAll(self) -> None: ... - def clear(self) -> None: ... - def redo(self) -> None: ... - def undo(self) -> None: ... - def paste(self) -> None: ... - def copy(self) -> None: ... - def cut(self) -> None: ... - def setPlainText(self, text: typing.Optional[str]) -> None: ... - def blockCount(self) -> int: ... - def print(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... - def canPaste(self) -> bool: ... - def moveCursor(self, operation: QtGui.QTextCursor.MoveOperation, mode: QtGui.QTextCursor.MoveMode = ...) -> None: ... - def extraSelections(self) -> typing.List['QTextEdit.ExtraSelection']: ... - def setExtraSelections(self, selections: typing.Iterable['QTextEdit.ExtraSelection']) -> None: ... - def setCursorWidth(self, width: int) -> None: ... - def cursorWidth(self) -> int: ... - def setOverwriteMode(self, overwrite: bool) -> None: ... - def overwriteMode(self) -> bool: ... - @typing.overload - def cursorRect(self, cursor: QtGui.QTextCursor) -> QtCore.QRect: ... - @typing.overload - def cursorRect(self) -> QtCore.QRect: ... - def cursorForPosition(self, pos: QtCore.QPoint) -> QtGui.QTextCursor: ... - @typing.overload - def createStandardContextMenu(self) -> typing.Optional[QMenu]: ... - @typing.overload - def createStandardContextMenu(self, position: QtCore.QPoint) -> typing.Optional[QMenu]: ... - def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... - def ensureCursorVisible(self) -> None: ... - def toPlainText(self) -> str: ... - @typing.overload - def find(self, exp: typing.Optional[str], options: QtGui.QTextDocument.FindFlag = ...) -> bool: ... - @typing.overload - def find(self, exp: QtCore.QRegularExpression, options: QtGui.QTextDocument.FindFlag = ...) -> bool: ... - def centerOnScroll(self) -> bool: ... - def setCenterOnScroll(self, enabled: bool) -> None: ... - def backgroundVisible(self) -> bool: ... - def setBackgroundVisible(self, visible: bool) -> None: ... - def setWordWrapMode(self, policy: QtGui.QTextOption.WrapMode) -> None: ... - def wordWrapMode(self) -> QtGui.QTextOption.WrapMode: ... - def setLineWrapMode(self, mode: 'QPlainTextEdit.LineWrapMode') -> None: ... - def lineWrapMode(self) -> 'QPlainTextEdit.LineWrapMode': ... - def maximumBlockCount(self) -> int: ... - def setMaximumBlockCount(self, maximum: int) -> None: ... - def setUndoRedoEnabled(self, enable: bool) -> None: ... - def isUndoRedoEnabled(self) -> bool: ... - def documentTitle(self) -> str: ... - def setDocumentTitle(self, title: typing.Optional[str]) -> None: ... - def setTabChangesFocus(self, b: bool) -> None: ... - def tabChangesFocus(self) -> bool: ... - def currentCharFormat(self) -> QtGui.QTextCharFormat: ... - def setCurrentCharFormat(self, format: QtGui.QTextCharFormat) -> None: ... - def mergeCurrentCharFormat(self, modifier: QtGui.QTextCharFormat) -> None: ... - def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlag: ... - def setTextInteractionFlags(self, flags: QtCore.Qt.TextInteractionFlag) -> None: ... - def setReadOnly(self, ro: bool) -> None: ... - def isReadOnly(self) -> bool: ... - def textCursor(self) -> QtGui.QTextCursor: ... - def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... - def document(self) -> typing.Optional[QtGui.QTextDocument]: ... - def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... - - -class QPlainTextDocumentLayout(QtGui.QAbstractTextDocumentLayout): - - def __init__(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... - - def documentChanged(self, from_: int, a1: int, charsAdded: int) -> None: ... - def requestUpdate(self) -> None: ... - def cursorWidth(self) -> int: ... - def setCursorWidth(self, width: int) -> None: ... - def ensureBlockLayout(self, block: QtGui.QTextBlock) -> None: ... - def blockBoundingRect(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... - def frameBoundingRect(self, a0: typing.Optional[QtGui.QTextFrame]) -> QtCore.QRectF: ... - def documentSize(self) -> QtCore.QSizeF: ... - def pageCount(self) -> int: ... - def hitTest(self, a0: QtCore.QPointF, a1: QtCore.Qt.HitTestAccuracy) -> int: ... - def draw(self, a0: typing.Optional[QtGui.QPainter], a1: QtGui.QAbstractTextDocumentLayout.PaintContext) -> None: ... - - -class QProgressBar(QWidget): - - class Direction(enum.Enum): - TopToBottom = ... # type: QProgressBar.Direction - BottomToTop = ... # type: QProgressBar.Direction - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionProgressBar']) -> None: ... - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... - def setValue(self, value: int) -> None: ... - def setMaximum(self, maximum: int) -> None: ... - def setMinimum(self, minimum: int) -> None: ... - def reset(self) -> None: ... - def resetFormat(self) -> None: ... - def format(self) -> str: ... - def setFormat(self, format: typing.Optional[str]) -> None: ... - def setTextDirection(self, textDirection: 'QProgressBar.Direction') -> None: ... - def setInvertedAppearance(self, invert: bool) -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def setAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def isTextVisible(self) -> bool: ... - def setTextVisible(self, visible: bool) -> None: ... - def text(self) -> str: ... - def value(self) -> int: ... - def setRange(self, minimum: int, maximum: int) -> None: ... - def maximum(self) -> int: ... - def minimum(self) -> int: ... - - -class QProgressDialog(QDialog): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, labelText: typing.Optional[str], cancelButtonText: typing.Optional[str], minimum: int, maximum: int, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - @typing.overload - def open(self) -> None: ... - @typing.overload - def open(self, slot: PYQT_SLOT) -> None: ... - def forceShow(self) -> None: ... - def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - canceled: typing.ClassVar[QtCore.pyqtSignal] - def setMinimumDuration(self, ms: int) -> None: ... - def setCancelButtonText(self, a0: typing.Optional[str]) -> None: ... - def setLabelText(self, a0: typing.Optional[str]) -> None: ... - def setValue(self, progress: int) -> None: ... - def setMinimum(self, minimum: int) -> None: ... - def setMaximum(self, maximum: int) -> None: ... - def reset(self) -> None: ... - def cancel(self) -> None: ... - def autoClose(self) -> bool: ... - def setAutoClose(self, b: bool) -> None: ... - def autoReset(self) -> bool: ... - def setAutoReset(self, b: bool) -> None: ... - def minimumDuration(self) -> int: ... - def labelText(self) -> str: ... - def sizeHint(self) -> QtCore.QSize: ... - def value(self) -> int: ... - def setRange(self, minimum: int, maximum: int) -> None: ... - def maximum(self) -> int: ... - def minimum(self) -> int: ... - def wasCanceled(self) -> bool: ... - def setBar(self, bar: typing.Optional[QProgressBar]) -> None: ... - def setCancelButton(self, button: typing.Optional[QPushButton]) -> None: ... - def setLabel(self, label: typing.Optional[QLabel]) -> None: ... - - -class QProxyStyle(QCommonStyle): - - @typing.overload - def __init__(self, style: typing.Optional[QStyle] = ...) -> None: ... - @typing.overload - def __init__(self, key: typing.Optional[str]) -> None: ... - - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - @typing.overload - def unpolish(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def unpolish(self, app: typing.Optional[QApplication]) -> None: ... - @typing.overload - def polish(self, widget: typing.Optional[QWidget]) -> None: ... - @typing.overload - def polish(self, pal: QtGui.QPalette) -> QtGui.QPalette: ... - @typing.overload - def polish(self, app: typing.Optional[QApplication]) -> None: ... - def standardPalette(self) -> QtGui.QPalette: ... - def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... - def standardPixmap(self, standardPixmap: QStyle.StandardPixmap, opt: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... - def standardIcon(self, standardIcon: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... - def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def pixelMetric(self, metric: QStyle.PixelMetric, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... - def styleHint(self, hint: QStyle.StyleHint, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... - def hitTestComplexControl(self, control: QStyle.ComplexControl, option: typing.Optional['QStyleOptionComplex'], pos: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> QStyle.SubControl: ... - def itemPixmapRect(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> QtCore.QRect: ... - def itemTextRect(self, fm: QtGui.QFontMetrics, r: QtCore.QRect, flags: int, enabled: bool, text: typing.Optional[str]) -> QtCore.QRect: ... - def subControlRect(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], sc: QStyle.SubControl, widget: typing.Optional[QWidget]) -> QtCore.QRect: ... - def subElementRect(self, element: QStyle.SubElement, option: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget]) -> QtCore.QRect: ... - def sizeFromContents(self, type: QStyle.ContentsType, option: typing.Optional['QStyleOption'], size: QtCore.QSize, widget: typing.Optional[QWidget]) -> QtCore.QSize: ... - def drawItemPixmap(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, alignment: int, pixmap: QtGui.QPixmap) -> None: ... - def drawItemText(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, flags: int, pal: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... - def drawComplexControl(self, control: QStyle.ComplexControl, option: typing.Optional['QStyleOptionComplex'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def drawControl(self, element: QStyle.ControlElement, option: typing.Optional['QStyleOption'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def drawPrimitive(self, element: QStyle.PrimitiveElement, option: typing.Optional['QStyleOption'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... - def setBaseStyle(self, style: typing.Optional[QStyle]) -> None: ... - def baseStyle(self) -> typing.Optional[QStyle]: ... - - -class QRadioButton(QAbstractButton): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def hitButton(self, a0: QtCore.QPoint) -> bool: ... - def initStyleOption(self, button: typing.Optional['QStyleOptionButton']) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QRubberBand(QWidget): - - class Shape(enum.Enum): - Line = ... # type: QRubberBand.Shape - Rectangle = ... # type: QRubberBand.Shape - - def __init__(self, a0: 'QRubberBand.Shape', parent: typing.Optional[QWidget] = ...) -> None: ... - - def moveEvent(self, a0: typing.Optional[QtGui.QMoveEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionRubberBand']) -> None: ... - @typing.overload - def resize(self, w: int, h: int) -> None: ... - @typing.overload - def resize(self, s: QtCore.QSize) -> None: ... - @typing.overload - def move(self, p: QtCore.QPoint) -> None: ... - @typing.overload - def move(self, ax: int, ay: int) -> None: ... - @typing.overload - def setGeometry(self, r: QtCore.QRect) -> None: ... - @typing.overload - def setGeometry(self, ax: int, ay: int, aw: int, ah: int) -> None: ... - def shape(self) -> 'QRubberBand.Shape': ... - - -class QScrollArea(QAbstractScrollArea): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def viewportSizeHint(self) -> QtCore.QSize: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def ensureWidgetVisible(self, childWidget: typing.Optional[QWidget], xMargin: int = ..., yMargin: int = ...) -> None: ... - def ensureVisible(self, x: int, y: int, xMargin: int = ..., yMargin: int = ...) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def sizeHint(self) -> QtCore.QSize: ... - def setAlignment(self, a0: QtCore.Qt.AlignmentFlag) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def setWidgetResizable(self, resizable: bool) -> None: ... - def widgetResizable(self) -> bool: ... - def takeWidget(self) -> typing.Optional[QWidget]: ... - def setWidget(self, w: typing.Optional[QWidget]) -> None: ... - def widget(self) -> typing.Optional[QWidget]: ... - - -class QScrollBar(QAbstractSlider): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - - def sliderChange(self, change: QAbstractSlider.SliderChange) -> None: ... - def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QScroller(QtCore.QObject): - - class Input(enum.Enum): - InputPress = ... # type: QScroller.Input - InputMove = ... # type: QScroller.Input - InputRelease = ... # type: QScroller.Input - - class ScrollerGestureType(enum.Enum): - TouchGesture = ... # type: QScroller.ScrollerGestureType - LeftMouseButtonGesture = ... # type: QScroller.ScrollerGestureType - RightMouseButtonGesture = ... # type: QScroller.ScrollerGestureType - MiddleMouseButtonGesture = ... # type: QScroller.ScrollerGestureType - - class State(enum.Enum): - Inactive = ... # type: QScroller.State - Pressed = ... # type: QScroller.State - Dragging = ... # type: QScroller.State - Scrolling = ... # type: QScroller.State - - scrollerPropertiesChanged: typing.ClassVar[QtCore.pyqtSignal] - stateChanged: typing.ClassVar[QtCore.pyqtSignal] - def resendPrepareEvent(self) -> None: ... - @typing.overload - def ensureVisible(self, rect: QtCore.QRectF, xmargin: float, ymargin: float) -> None: ... - @typing.overload - def ensureVisible(self, rect: QtCore.QRectF, xmargin: float, ymargin: float, scrollTime: int) -> None: ... - @typing.overload - def scrollTo(self, pos: QtCore.QPointF) -> None: ... - @typing.overload - def scrollTo(self, pos: QtCore.QPointF, scrollTime: int) -> None: ... - def setScrollerProperties(self, prop: 'QScrollerProperties') -> None: ... - @typing.overload - def setSnapPositionsY(self, positions: typing.Iterable[float]) -> None: ... - @typing.overload - def setSnapPositionsY(self, first: float, interval: float) -> None: ... - @typing.overload - def setSnapPositionsX(self, positions: typing.Iterable[float]) -> None: ... - @typing.overload - def setSnapPositionsX(self, first: float, interval: float) -> None: ... - def scrollerProperties(self) -> 'QScrollerProperties': ... - def pixelPerMeter(self) -> QtCore.QPointF: ... - def finalPosition(self) -> QtCore.QPointF: ... - def velocity(self) -> QtCore.QPointF: ... - def stop(self) -> None: ... - def handleInput(self, input: 'QScroller.Input', position: QtCore.QPointF, timestamp: int = ...) -> bool: ... - def state(self) -> 'QScroller.State': ... - def target(self) -> typing.Optional[QtCore.QObject]: ... - @staticmethod - def activeScrollers() -> typing.List['QScroller']: ... - @staticmethod - def ungrabGesture(target: typing.Optional[QtCore.QObject]) -> None: ... - @staticmethod - def grabbedGesture(target: typing.Optional[QtCore.QObject]) -> QtCore.Qt.GestureType: ... - @staticmethod - def grabGesture(target: typing.Optional[QtCore.QObject], scrollGestureType: 'QScroller.ScrollerGestureType' = ...) -> QtCore.Qt.GestureType: ... - @staticmethod - def scroller(target: typing.Optional[QtCore.QObject]) -> typing.Optional['QScroller']: ... - @staticmethod - def hasScroller(target: typing.Optional[QtCore.QObject]) -> bool: ... - - -class QScrollerProperties(PyQt6.sip.simplewrapper): - - class ScrollMetric(enum.Enum): - MousePressEventDelay = ... # type: QScrollerProperties.ScrollMetric - DragStartDistance = ... # type: QScrollerProperties.ScrollMetric - DragVelocitySmoothingFactor = ... # type: QScrollerProperties.ScrollMetric - AxisLockThreshold = ... # type: QScrollerProperties.ScrollMetric - ScrollingCurve = ... # type: QScrollerProperties.ScrollMetric - DecelerationFactor = ... # type: QScrollerProperties.ScrollMetric - MinimumVelocity = ... # type: QScrollerProperties.ScrollMetric - MaximumVelocity = ... # type: QScrollerProperties.ScrollMetric - MaximumClickThroughVelocity = ... # type: QScrollerProperties.ScrollMetric - AcceleratingFlickMaximumTime = ... # type: QScrollerProperties.ScrollMetric - AcceleratingFlickSpeedupFactor = ... # type: QScrollerProperties.ScrollMetric - SnapPositionRatio = ... # type: QScrollerProperties.ScrollMetric - SnapTime = ... # type: QScrollerProperties.ScrollMetric - OvershootDragResistanceFactor = ... # type: QScrollerProperties.ScrollMetric - OvershootDragDistanceFactor = ... # type: QScrollerProperties.ScrollMetric - OvershootScrollDistanceFactor = ... # type: QScrollerProperties.ScrollMetric - OvershootScrollTime = ... # type: QScrollerProperties.ScrollMetric - HorizontalOvershootPolicy = ... # type: QScrollerProperties.ScrollMetric - VerticalOvershootPolicy = ... # type: QScrollerProperties.ScrollMetric - FrameRate = ... # type: QScrollerProperties.ScrollMetric - ScrollMetricCount = ... # type: QScrollerProperties.ScrollMetric - - class FrameRates(enum.Enum): - Standard = ... # type: QScrollerProperties.FrameRates - Fps60 = ... # type: QScrollerProperties.FrameRates - Fps30 = ... # type: QScrollerProperties.FrameRates - Fps20 = ... # type: QScrollerProperties.FrameRates - - class OvershootPolicy(enum.Enum): - OvershootWhenScrollable = ... # type: QScrollerProperties.OvershootPolicy - OvershootAlwaysOff = ... # type: QScrollerProperties.OvershootPolicy - OvershootAlwaysOn = ... # type: QScrollerProperties.OvershootPolicy - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, sp: 'QScrollerProperties') -> None: ... - - def setScrollMetric(self, metric: 'QScrollerProperties.ScrollMetric', value: typing.Any) -> None: ... - def scrollMetric(self, metric: 'QScrollerProperties.ScrollMetric') -> typing.Any: ... - @staticmethod - def unsetDefaultScrollerProperties() -> None: ... - @staticmethod - def setDefaultScrollerProperties(sp: 'QScrollerProperties') -> None: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QSizeGrip(QWidget): - - def __init__(self, parent: typing.Optional[QWidget]) -> None: ... - - def hideEvent(self, hideEvent: typing.Optional[QtGui.QHideEvent]) -> None: ... - def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... - def moveEvent(self, moveEvent: typing.Optional[QtGui.QMoveEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def setVisible(self, a0: bool) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QSizePolicy(PyQt6.sip.simplewrapper): - - class ControlType(enum.Flag): - DefaultType = ... # type: QSizePolicy.ControlType - ButtonBox = ... # type: QSizePolicy.ControlType - CheckBox = ... # type: QSizePolicy.ControlType - ComboBox = ... # type: QSizePolicy.ControlType - Frame = ... # type: QSizePolicy.ControlType - GroupBox = ... # type: QSizePolicy.ControlType - Label = ... # type: QSizePolicy.ControlType - Line = ... # type: QSizePolicy.ControlType - LineEdit = ... # type: QSizePolicy.ControlType - PushButton = ... # type: QSizePolicy.ControlType - RadioButton = ... # type: QSizePolicy.ControlType - Slider = ... # type: QSizePolicy.ControlType - SpinBox = ... # type: QSizePolicy.ControlType - TabWidget = ... # type: QSizePolicy.ControlType - ToolButton = ... # type: QSizePolicy.ControlType - - class Policy(enum.Enum): - Fixed = ... # type: QSizePolicy.Policy - Minimum = ... # type: QSizePolicy.Policy - Maximum = ... # type: QSizePolicy.Policy - Preferred = ... # type: QSizePolicy.Policy - MinimumExpanding = ... # type: QSizePolicy.Policy - Expanding = ... # type: QSizePolicy.Policy - Ignored = ... # type: QSizePolicy.Policy - - class PolicyFlag(enum.IntFlag): - GrowFlag = ... # type: QSizePolicy.PolicyFlag - ExpandFlag = ... # type: QSizePolicy.PolicyFlag - ShrinkFlag = ... # type: QSizePolicy.PolicyFlag - IgnoreFlag = ... # type: QSizePolicy.PolicyFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, horizontal: 'QSizePolicy.Policy', vertical: 'QSizePolicy.Policy', type: 'QSizePolicy.ControlType' = ...) -> None: ... - @typing.overload - def __init__(self, variant: typing.Any) -> None: ... - @typing.overload - def __init__(self, a0: 'QSizePolicy') -> None: ... - - def __hash__(self) -> int: ... - def setRetainSizeWhenHidden(self, retainSize: bool) -> None: ... - def retainSizeWhenHidden(self) -> bool: ... - def hasWidthForHeight(self) -> bool: ... - def setWidthForHeight(self, b: bool) -> None: ... - def setControlType(self, type: 'QSizePolicy.ControlType') -> None: ... - def controlType(self) -> 'QSizePolicy.ControlType': ... - def transposed(self) -> 'QSizePolicy': ... - def transpose(self) -> None: ... - def setVerticalStretch(self, stretchFactor: int) -> None: ... - def setHorizontalStretch(self, stretchFactor: int) -> None: ... - def verticalStretch(self) -> int: ... - def horizontalStretch(self) -> int: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - def hasHeightForWidth(self) -> bool: ... - def setHeightForWidth(self, b: bool) -> None: ... - def expandingDirections(self) -> QtCore.Qt.Orientation: ... - def setVerticalPolicy(self, d: 'QSizePolicy.Policy') -> None: ... - def setHorizontalPolicy(self, d: 'QSizePolicy.Policy') -> None: ... - def verticalPolicy(self) -> 'QSizePolicy.Policy': ... - def horizontalPolicy(self) -> 'QSizePolicy.Policy': ... - - -class QSlider(QAbstractSlider): - - class TickPosition(enum.Enum): - NoTicks = ... # type: QSlider.TickPosition - TicksAbove = ... # type: QSlider.TickPosition - TicksLeft = ... # type: QSlider.TickPosition - TicksBelow = ... # type: QSlider.TickPosition - TicksRight = ... # type: QSlider.TickPosition - TicksBothSides = ... # type: QSlider.TickPosition - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - - def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, ev: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def tickInterval(self) -> int: ... - def setTickInterval(self, ti: int) -> None: ... - def tickPosition(self) -> 'QSlider.TickPosition': ... - def setTickPosition(self, position: 'QSlider.TickPosition') -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QSpinBox(QAbstractSpinBox): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setStepType(self, stepType: QAbstractSpinBox.StepType) -> None: ... - def stepType(self) -> QAbstractSpinBox.StepType: ... - def setDisplayIntegerBase(self, base: int) -> None: ... - def displayIntegerBase(self) -> int: ... - textChanged: typing.ClassVar[QtCore.pyqtSignal] - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def setValue(self, val: int) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def fixup(self, str: typing.Optional[str]) -> str: ... - def textFromValue(self, v: int) -> str: ... - def valueFromText(self, text: typing.Optional[str]) -> int: ... - def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... - def setRange(self, min: int, max: int) -> None: ... - def setMaximum(self, max: int) -> None: ... - def maximum(self) -> int: ... - def setMinimum(self, min: int) -> None: ... - def minimum(self) -> int: ... - def setSingleStep(self, val: int) -> None: ... - def singleStep(self) -> int: ... - def cleanText(self) -> str: ... - def setSuffix(self, s: typing.Optional[str]) -> None: ... - def suffix(self) -> str: ... - def setPrefix(self, p: typing.Optional[str]) -> None: ... - def prefix(self) -> str: ... - def value(self) -> int: ... - - -class QDoubleSpinBox(QAbstractSpinBox): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setStepType(self, stepType: QAbstractSpinBox.StepType) -> None: ... - def stepType(self) -> QAbstractSpinBox.StepType: ... - textChanged: typing.ClassVar[QtCore.pyqtSignal] - valueChanged: typing.ClassVar[QtCore.pyqtSignal] - def setValue(self, val: float) -> None: ... - def fixup(self, str: typing.Optional[str]) -> str: ... - def textFromValue(self, v: float) -> str: ... - def valueFromText(self, text: typing.Optional[str]) -> float: ... - def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... - def setDecimals(self, prec: int) -> None: ... - def decimals(self) -> int: ... - def setRange(self, min: float, max: float) -> None: ... - def setMaximum(self, max: float) -> None: ... - def maximum(self) -> float: ... - def setMinimum(self, min: float) -> None: ... - def minimum(self) -> float: ... - def setSingleStep(self, val: float) -> None: ... - def singleStep(self) -> float: ... - def cleanText(self) -> str: ... - def setSuffix(self, s: typing.Optional[str]) -> None: ... - def suffix(self) -> str: ... - def setPrefix(self, p: typing.Optional[str]) -> None: ... - def prefix(self) -> str: ... - def value(self) -> float: ... - - -class QSplashScreen(QWidget): - - @typing.overload - def __init__(self, pixmap: QtGui.QPixmap = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - @typing.overload - def __init__(self, screen: typing.Optional[QtGui.QScreen], pixmap: QtGui.QPixmap = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def drawContents(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... - messageChanged: typing.ClassVar[QtCore.pyqtSignal] - def clearMessage(self) -> None: ... - def showMessage(self, message: typing.Optional[str], alignment: int = ..., color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] = ...) -> None: ... - def message(self) -> str: ... - def repaint(self) -> None: ... - def finish(self, w: typing.Optional[QWidget]) -> None: ... - def pixmap(self) -> QtGui.QPixmap: ... - def setPixmap(self, pixmap: QtGui.QPixmap) -> None: ... - - -class QSplitter(QFrame): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... - - def closestLegalPosition(self, a0: int, a1: int) -> int: ... - def setRubberBand(self, position: int) -> None: ... - def moveSplitter(self, pos: int, index: int) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def childEvent(self, a0: typing.Optional[QtCore.QChildEvent]) -> None: ... - def createHandle(self) -> typing.Optional['QSplitterHandle']: ... - splitterMoved: typing.ClassVar[QtCore.pyqtSignal] - def replaceWidget(self, index: int, widget: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - def setStretchFactor(self, index: int, stretch: int) -> None: ... - def handle(self, index: int) -> typing.Optional['QSplitterHandle']: ... - def getRange(self, index: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def widget(self, index: int) -> typing.Optional[QWidget]: ... - def indexOf(self, w: typing.Optional[QWidget]) -> int: ... - def setHandleWidth(self, a0: int) -> None: ... - def handleWidth(self) -> int: ... - def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview]) -> bool: ... - def saveState(self) -> QtCore.QByteArray: ... - def setSizes(self, list: typing.Iterable[int]) -> None: ... - def sizes(self) -> typing.List[int]: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def refresh(self) -> None: ... - def opaqueResize(self) -> bool: ... - def setOpaqueResize(self, opaque: bool = ...) -> None: ... - def isCollapsible(self, index: int) -> bool: ... - def setCollapsible(self, index: int, a1: bool) -> None: ... - def childrenCollapsible(self) -> bool: ... - def setChildrenCollapsible(self, a0: bool) -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... - def insertWidget(self, index: int, widget: typing.Optional[QWidget]) -> None: ... - def addWidget(self, widget: typing.Optional[QWidget]) -> None: ... - - -class QSplitterHandle(QWidget): - - def __init__(self, o: QtCore.Qt.Orientation, parent: typing.Optional[QSplitter]) -> None: ... - - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def closestLegalPosition(self, p: int) -> int: ... - def moveSplitter(self, p: int) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def splitter(self) -> typing.Optional[QSplitter]: ... - def opaqueResize(self) -> bool: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, o: QtCore.Qt.Orientation) -> None: ... - - -class QStackedLayout(QLayout): - - class StackingMode(enum.Enum): - StackOne = ... # type: QStackedLayout.StackingMode - StackAll = ... # type: QStackedLayout.StackingMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget]) -> None: ... - @typing.overload - def __init__(self, parentLayout: typing.Optional[QLayout]) -> None: ... - - def heightForWidth(self, width: int) -> int: ... - def hasHeightForWidth(self) -> bool: ... - def setStackingMode(self, stackingMode: 'QStackedLayout.StackingMode') -> None: ... - def stackingMode(self) -> 'QStackedLayout.StackingMode': ... - def setCurrentWidget(self, w: typing.Optional[QWidget]) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] - def setGeometry(self, rect: QtCore.QRect) -> None: ... - def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... - def minimumSize(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def addItem(self, item: typing.Optional[QLayoutItem]) -> None: ... - def count(self) -> int: ... - def widget(self, a0: int) -> typing.Optional[QWidget]: ... - def currentIndex(self) -> int: ... - def currentWidget(self) -> typing.Optional[QWidget]: ... - def insertWidget(self, index: int, w: typing.Optional[QWidget]) -> int: ... - def addWidget(self, w: typing.Optional[QWidget]) -> int: ... - - -class QStackedWidget(QFrame): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentWidget(self, w: typing.Optional[QWidget]) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def widget(self, a0: int) -> typing.Optional[QWidget]: ... - def indexOf(self, a0: typing.Optional[QWidget]) -> int: ... - def currentIndex(self) -> int: ... - def currentWidget(self) -> typing.Optional[QWidget]: ... - def removeWidget(self, w: typing.Optional[QWidget]) -> None: ... - def insertWidget(self, index: int, w: typing.Optional[QWidget]) -> int: ... - def addWidget(self, w: typing.Optional[QWidget]) -> int: ... - - -class QStatusBar(QWidget): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def hideOrShow(self) -> None: ... - def reformat(self) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - messageChanged: typing.ClassVar[QtCore.pyqtSignal] - def clearMessage(self) -> None: ... - def showMessage(self, message: typing.Optional[str], msecs: int = ...) -> None: ... - def insertPermanentWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ...) -> int: ... - def insertWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ...) -> int: ... - def currentMessage(self) -> str: ... - def isSizeGripEnabled(self) -> bool: ... - def setSizeGripEnabled(self, a0: bool) -> None: ... - def removeWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def addPermanentWidget(self, widget: typing.Optional[QWidget], stretch: int = ...) -> None: ... - def addWidget(self, widget: typing.Optional[QWidget], stretch: int = ...) -> None: ... - - -class QStyledItemDelegate(QAbstractItemDelegate): - - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... - def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional['QStyleOptionViewItem'], index: QtCore.QModelIndex) -> None: ... - def displayText(self, value: typing.Any, locale: QtCore.QLocale) -> str: ... - def setItemEditorFactory(self, factory: typing.Optional[QItemEditorFactory]) -> None: ... - def itemEditorFactory(self) -> typing.Optional[QItemEditorFactory]: ... - def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... - def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... - def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... - def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... - def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... - - -class QStyleFactory(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QStyleFactory') -> None: ... - - @staticmethod - def create(a0: typing.Optional[str]) -> typing.Optional[QStyle]: ... - @staticmethod - def keys() -> typing.List[str]: ... - - -class QStyleOption(PyQt6.sip.simplewrapper): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOption.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOption.StyleOptionType - - class OptionType(enum.Enum): - SO_Default = ... # type: QStyleOption.OptionType - SO_FocusRect = ... # type: QStyleOption.OptionType - SO_Button = ... # type: QStyleOption.OptionType - SO_Tab = ... # type: QStyleOption.OptionType - SO_MenuItem = ... # type: QStyleOption.OptionType - SO_Frame = ... # type: QStyleOption.OptionType - SO_ProgressBar = ... # type: QStyleOption.OptionType - SO_ToolBox = ... # type: QStyleOption.OptionType - SO_Header = ... # type: QStyleOption.OptionType - SO_DockWidget = ... # type: QStyleOption.OptionType - SO_ViewItem = ... # type: QStyleOption.OptionType - SO_TabWidgetFrame = ... # type: QStyleOption.OptionType - SO_TabBarBase = ... # type: QStyleOption.OptionType - SO_RubberBand = ... # type: QStyleOption.OptionType - SO_ToolBar = ... # type: QStyleOption.OptionType - SO_Complex = ... # type: QStyleOption.OptionType - SO_Slider = ... # type: QStyleOption.OptionType - SO_SpinBox = ... # type: QStyleOption.OptionType - SO_ToolButton = ... # type: QStyleOption.OptionType - SO_ComboBox = ... # type: QStyleOption.OptionType - SO_TitleBar = ... # type: QStyleOption.OptionType - SO_GroupBox = ... # type: QStyleOption.OptionType - SO_ComplexCustomBase = ... # type: QStyleOption.OptionType - SO_GraphicsItem = ... # type: QStyleOption.OptionType - SO_SizeGrip = ... # type: QStyleOption.OptionType - SO_CustomBase = ... # type: QStyleOption.OptionType - - direction = ... # type: QtCore.Qt.LayoutDirection - fontMetrics = ... # type: QtGui.QFontMetrics - palette = ... # type: QtGui.QPalette - rect = ... # type: QtCore.QRect - state = ... # type: QStyle.StateFlag - styleObject = ... # type: QtCore.QObject - type = ... # type: int - version = ... # type: int - - @typing.overload - def __init__(self, version: int = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOption') -> None: ... - - def initFrom(self, w: typing.Optional[QWidget]) -> None: ... - - -class QStyleOptionFocusRect(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionFocusRect.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionFocusRect.StyleOptionType - - backgroundColor = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionFocusRect') -> None: ... - - -class QStyleOptionFrame(QStyleOption): - - class FrameFeature(enum.Flag): - None_ = ... # type: QStyleOptionFrame.FrameFeature - Flat = ... # type: QStyleOptionFrame.FrameFeature - Rounded = ... # type: QStyleOptionFrame.FrameFeature - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionFrame.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionFrame.StyleOptionType - - features = ... # type: 'QStyleOptionFrame.FrameFeature' - frameShape = ... # type: QFrame.Shape - lineWidth = ... # type: int - midLineWidth = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionFrame') -> None: ... - - -class QStyleOptionTabWidgetFrame(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionTabWidgetFrame.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionTabWidgetFrame.StyleOptionType - - leftCornerWidgetSize = ... # type: QtCore.QSize - lineWidth = ... # type: int - midLineWidth = ... # type: int - rightCornerWidgetSize = ... # type: QtCore.QSize - selectedTabRect = ... # type: QtCore.QRect - shape = ... # type: 'QTabBar.Shape' - tabBarRect = ... # type: QtCore.QRect - tabBarSize = ... # type: QtCore.QSize - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionTabWidgetFrame') -> None: ... - - -class QStyleOptionTabBarBase(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionTabBarBase.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionTabBarBase.StyleOptionType - - documentMode = ... # type: bool - selectedTabRect = ... # type: QtCore.QRect - shape = ... # type: 'QTabBar.Shape' - tabBarRect = ... # type: QtCore.QRect - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionTabBarBase') -> None: ... - - -class QStyleOptionHeader(QStyleOption): - - class SortIndicator(enum.Enum): - None_ = ... # type: QStyleOptionHeader.SortIndicator - SortUp = ... # type: QStyleOptionHeader.SortIndicator - SortDown = ... # type: QStyleOptionHeader.SortIndicator - - class SelectedPosition(enum.Enum): - NotAdjacent = ... # type: QStyleOptionHeader.SelectedPosition - NextIsSelected = ... # type: QStyleOptionHeader.SelectedPosition - PreviousIsSelected = ... # type: QStyleOptionHeader.SelectedPosition - NextAndPreviousAreSelected = ... # type: QStyleOptionHeader.SelectedPosition - - class SectionPosition(enum.Enum): - Beginning = ... # type: QStyleOptionHeader.SectionPosition - Middle = ... # type: QStyleOptionHeader.SectionPosition - End = ... # type: QStyleOptionHeader.SectionPosition - OnlyOneSection = ... # type: QStyleOptionHeader.SectionPosition - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionHeader.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionHeader.StyleOptionType - - icon = ... # type: QtGui.QIcon - iconAlignment = ... # type: QtCore.Qt.AlignmentFlag - orientation = ... # type: QtCore.Qt.Orientation - position = ... # type: 'QStyleOptionHeader.SectionPosition' - section = ... # type: int - selectedPosition = ... # type: 'QStyleOptionHeader.SelectedPosition' - sortIndicator = ... # type: 'QStyleOptionHeader.SortIndicator' - text = ... # type: typing.Optional[str] - textAlignment = ... # type: QtCore.Qt.AlignmentFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionHeader') -> None: ... - - -class QStyleOptionHeaderV2(QStyleOptionHeader): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionHeaderV2.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionHeaderV2.StyleOptionType - - isSectionDragTarget = ... # type: bool - textElideMode = ... # type: QtCore.Qt.TextElideMode - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionHeaderV2') -> None: ... - - -class QStyleOptionButton(QStyleOption): - - class ButtonFeature(enum.Flag): - None_ = ... # type: QStyleOptionButton.ButtonFeature - Flat = ... # type: QStyleOptionButton.ButtonFeature - HasMenu = ... # type: QStyleOptionButton.ButtonFeature - DefaultButton = ... # type: QStyleOptionButton.ButtonFeature - AutoDefaultButton = ... # type: QStyleOptionButton.ButtonFeature - CommandLinkButton = ... # type: QStyleOptionButton.ButtonFeature - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionButton.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionButton.StyleOptionType - - features = ... # type: 'QStyleOptionButton.ButtonFeature' - icon = ... # type: QtGui.QIcon - iconSize = ... # type: QtCore.QSize - text = ... # type: typing.Optional[str] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionButton') -> None: ... - - -class QStyleOptionTab(QStyleOption): - - class TabFeature(enum.Flag): - None_ = ... # type: QStyleOptionTab.TabFeature - HasFrame = ... # type: QStyleOptionTab.TabFeature - - class CornerWidget(enum.Flag): - NoCornerWidgets = ... # type: QStyleOptionTab.CornerWidget - LeftCornerWidget = ... # type: QStyleOptionTab.CornerWidget - RightCornerWidget = ... # type: QStyleOptionTab.CornerWidget - - class SelectedPosition(enum.Enum): - NotAdjacent = ... # type: QStyleOptionTab.SelectedPosition - NextIsSelected = ... # type: QStyleOptionTab.SelectedPosition - PreviousIsSelected = ... # type: QStyleOptionTab.SelectedPosition - - class TabPosition(enum.Enum): - Beginning = ... # type: QStyleOptionTab.TabPosition - Middle = ... # type: QStyleOptionTab.TabPosition - End = ... # type: QStyleOptionTab.TabPosition - OnlyOneTab = ... # type: QStyleOptionTab.TabPosition - Moving = ... # type: QStyleOptionTab.TabPosition - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionTab.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionTab.StyleOptionType - - cornerWidgets = ... # type: 'QStyleOptionTab.CornerWidget' - documentMode = ... # type: bool - features = ... # type: 'QStyleOptionTab.TabFeature' - icon = ... # type: QtGui.QIcon - iconSize = ... # type: QtCore.QSize - leftButtonSize = ... # type: QtCore.QSize - position = ... # type: 'QStyleOptionTab.TabPosition' - rightButtonSize = ... # type: QtCore.QSize - row = ... # type: int - selectedPosition = ... # type: 'QStyleOptionTab.SelectedPosition' - shape = ... # type: 'QTabBar.Shape' - tabIndex = ... # type: int - text = ... # type: typing.Optional[str] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionTab') -> None: ... - - -class QStyleOptionProgressBar(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionProgressBar.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionProgressBar.StyleOptionType - - bottomToTop = ... # type: bool - invertedAppearance = ... # type: bool - maximum = ... # type: int - minimum = ... # type: int - progress = ... # type: int - text = ... # type: typing.Optional[str] - textAlignment = ... # type: QtCore.Qt.AlignmentFlag - textVisible = ... # type: bool - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionProgressBar') -> None: ... - - -class QStyleOptionMenuItem(QStyleOption): - - class CheckType(enum.Enum): - NotCheckable = ... # type: QStyleOptionMenuItem.CheckType - Exclusive = ... # type: QStyleOptionMenuItem.CheckType - NonExclusive = ... # type: QStyleOptionMenuItem.CheckType - - class MenuItemType(enum.Enum): - Normal = ... # type: QStyleOptionMenuItem.MenuItemType - DefaultItem = ... # type: QStyleOptionMenuItem.MenuItemType - Separator = ... # type: QStyleOptionMenuItem.MenuItemType - SubMenu = ... # type: QStyleOptionMenuItem.MenuItemType - Scroller = ... # type: QStyleOptionMenuItem.MenuItemType - TearOff = ... # type: QStyleOptionMenuItem.MenuItemType - Margin = ... # type: QStyleOptionMenuItem.MenuItemType - EmptyArea = ... # type: QStyleOptionMenuItem.MenuItemType - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionMenuItem.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionMenuItem.StyleOptionType - - checkType = ... # type: 'QStyleOptionMenuItem.CheckType' - checked = ... # type: bool - font = ... # type: QtGui.QFont - icon = ... # type: QtGui.QIcon - maxIconWidth = ... # type: int - menuHasCheckableItems = ... # type: bool - menuItemType = ... # type: 'QStyleOptionMenuItem.MenuItemType' - menuRect = ... # type: QtCore.QRect - reservedShortcutWidth = ... # type: int - text = ... # type: typing.Optional[str] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionMenuItem') -> None: ... - - -class QStyleOptionDockWidget(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionDockWidget.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionDockWidget.StyleOptionType - - closable = ... # type: bool - floatable = ... # type: bool - movable = ... # type: bool - title = ... # type: typing.Optional[str] - verticalTitleBar = ... # type: bool - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionDockWidget') -> None: ... - - -class QStyleOptionViewItem(QStyleOption): - - class ViewItemPosition(enum.Enum): - Invalid = ... # type: QStyleOptionViewItem.ViewItemPosition - Beginning = ... # type: QStyleOptionViewItem.ViewItemPosition - Middle = ... # type: QStyleOptionViewItem.ViewItemPosition - End = ... # type: QStyleOptionViewItem.ViewItemPosition - OnlyOne = ... # type: QStyleOptionViewItem.ViewItemPosition - - class ViewItemFeature(enum.Flag): - None_ = ... # type: QStyleOptionViewItem.ViewItemFeature - WrapText = ... # type: QStyleOptionViewItem.ViewItemFeature - Alternate = ... # type: QStyleOptionViewItem.ViewItemFeature - HasCheckIndicator = ... # type: QStyleOptionViewItem.ViewItemFeature - HasDisplay = ... # type: QStyleOptionViewItem.ViewItemFeature - HasDecoration = ... # type: QStyleOptionViewItem.ViewItemFeature - - class Position(enum.Enum): - Left = ... # type: QStyleOptionViewItem.Position - Right = ... # type: QStyleOptionViewItem.Position - Top = ... # type: QStyleOptionViewItem.Position - Bottom = ... # type: QStyleOptionViewItem.Position - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionViewItem.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionViewItem.StyleOptionType - - backgroundBrush = ... # type: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient] - checkState = ... # type: QtCore.Qt.CheckState - decorationAlignment = ... # type: QtCore.Qt.AlignmentFlag - decorationPosition = ... # type: 'QStyleOptionViewItem.Position' - decorationSize = ... # type: QtCore.QSize - displayAlignment = ... # type: QtCore.Qt.AlignmentFlag - features = ... # type: 'QStyleOptionViewItem.ViewItemFeature' - font = ... # type: QtGui.QFont - icon = ... # type: QtGui.QIcon - index = ... # type: QtCore.QModelIndex - locale = ... # type: QtCore.QLocale - showDecorationSelected = ... # type: bool - text = ... # type: typing.Optional[str] - textElideMode = ... # type: QtCore.Qt.TextElideMode - viewItemPosition = ... # type: 'QStyleOptionViewItem.ViewItemPosition' - widget = ... # type: QWidget - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionViewItem') -> None: ... - - -class QStyleOptionToolBox(QStyleOption): - - class SelectedPosition(enum.Enum): - NotAdjacent = ... # type: QStyleOptionToolBox.SelectedPosition - NextIsSelected = ... # type: QStyleOptionToolBox.SelectedPosition - PreviousIsSelected = ... # type: QStyleOptionToolBox.SelectedPosition - - class TabPosition(enum.Enum): - Beginning = ... # type: QStyleOptionToolBox.TabPosition - Middle = ... # type: QStyleOptionToolBox.TabPosition - End = ... # type: QStyleOptionToolBox.TabPosition - OnlyOneTab = ... # type: QStyleOptionToolBox.TabPosition - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionToolBox.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionToolBox.StyleOptionType - - icon = ... # type: QtGui.QIcon - position = ... # type: 'QStyleOptionToolBox.TabPosition' - selectedPosition = ... # type: 'QStyleOptionToolBox.SelectedPosition' - text = ... # type: typing.Optional[str] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionToolBox') -> None: ... - - -class QStyleOptionRubberBand(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionRubberBand.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionRubberBand.StyleOptionType - - opaque = ... # type: bool - shape = ... # type: QRubberBand.Shape - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionRubberBand') -> None: ... - - -class QStyleOptionComplex(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionComplex.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionComplex.StyleOptionType - - activeSubControls = ... # type: QStyle.SubControl - subControls = ... # type: QStyle.SubControl - - @typing.overload - def __init__(self, version: int = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionComplex') -> None: ... - - -class QStyleOptionSlider(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionSlider.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionSlider.StyleOptionType - - dialWrapping = ... # type: bool - keyboardModifiers = ... # type: QtCore.Qt.KeyboardModifier - maximum = ... # type: int - minimum = ... # type: int - notchTarget = ... # type: float - orientation = ... # type: QtCore.Qt.Orientation - pageStep = ... # type: int - singleStep = ... # type: int - sliderPosition = ... # type: int - sliderValue = ... # type: int - tickInterval = ... # type: int - tickPosition = ... # type: QSlider.TickPosition - upsideDown = ... # type: bool - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionSlider') -> None: ... - - -class QStyleOptionSpinBox(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionSpinBox.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionSpinBox.StyleOptionType - - buttonSymbols = ... # type: QAbstractSpinBox.ButtonSymbols - frame = ... # type: bool - stepEnabled = ... # type: QAbstractSpinBox.StepEnabledFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionSpinBox') -> None: ... - - -class QStyleOptionToolButton(QStyleOptionComplex): - - class ToolButtonFeature(enum.Flag): - None_ = ... # type: QStyleOptionToolButton.ToolButtonFeature - Arrow = ... # type: QStyleOptionToolButton.ToolButtonFeature - Menu = ... # type: QStyleOptionToolButton.ToolButtonFeature - PopupDelay = ... # type: QStyleOptionToolButton.ToolButtonFeature - MenuButtonPopup = ... # type: QStyleOptionToolButton.ToolButtonFeature - HasMenu = ... # type: QStyleOptionToolButton.ToolButtonFeature - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionToolButton.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionToolButton.StyleOptionType - - arrowType = ... # type: QtCore.Qt.ArrowType - features = ... # type: 'QStyleOptionToolButton.ToolButtonFeature' - font = ... # type: QtGui.QFont - icon = ... # type: QtGui.QIcon - iconSize = ... # type: QtCore.QSize - pos = ... # type: QtCore.QPoint - text = ... # type: typing.Optional[str] - toolButtonStyle = ... # type: QtCore.Qt.ToolButtonStyle - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionToolButton') -> None: ... - - -class QStyleOptionComboBox(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionComboBox.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionComboBox.StyleOptionType - - currentIcon = ... # type: QtGui.QIcon - currentText = ... # type: typing.Optional[str] - editable = ... # type: bool - frame = ... # type: bool - iconSize = ... # type: QtCore.QSize - popupRect = ... # type: QtCore.QRect - textAlignment = ... # type: QtCore.Qt.AlignmentFlag - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionComboBox') -> None: ... - - -class QStyleOptionTitleBar(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionTitleBar.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionTitleBar.StyleOptionType - - icon = ... # type: QtGui.QIcon - text = ... # type: typing.Optional[str] - titleBarFlags = ... # type: QtCore.Qt.WindowType - titleBarState = ... # type: int - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionTitleBar') -> None: ... - - -class QStyleHintReturn(PyQt6.sip.simplewrapper): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleHintReturn.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleHintReturn.StyleOptionType - - class HintReturnType(enum.Enum): - SH_Default = ... # type: QStyleHintReturn.HintReturnType - SH_Mask = ... # type: QStyleHintReturn.HintReturnType - SH_Variant = ... # type: QStyleHintReturn.HintReturnType - - type = ... # type: int - version = ... # type: int - - @typing.overload - def __init__(self, version: int = ..., type: int = ...) -> None: ... - @typing.overload - def __init__(self, a0: 'QStyleHintReturn') -> None: ... - - -class QStyleHintReturnMask(QStyleHintReturn): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleHintReturnMask.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleHintReturnMask.StyleOptionType - - region = ... # type: QtGui.QRegion - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QStyleHintReturnMask') -> None: ... - - -class QStyleOptionToolBar(QStyleOption): - - class ToolBarFeature(enum.Flag): - None_ = ... # type: QStyleOptionToolBar.ToolBarFeature - Movable = ... # type: QStyleOptionToolBar.ToolBarFeature - - class ToolBarPosition(enum.Enum): - Beginning = ... # type: QStyleOptionToolBar.ToolBarPosition - Middle = ... # type: QStyleOptionToolBar.ToolBarPosition - End = ... # type: QStyleOptionToolBar.ToolBarPosition - OnlyOne = ... # type: QStyleOptionToolBar.ToolBarPosition - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionToolBar.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionToolBar.StyleOptionType - - features = ... # type: 'QStyleOptionToolBar.ToolBarFeature' - lineWidth = ... # type: int - midLineWidth = ... # type: int - positionOfLine = ... # type: 'QStyleOptionToolBar.ToolBarPosition' - positionWithinLine = ... # type: 'QStyleOptionToolBar.ToolBarPosition' - toolBarArea = ... # type: QtCore.Qt.ToolBarArea - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionToolBar') -> None: ... - - -class QStyleOptionGroupBox(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionGroupBox.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionGroupBox.StyleOptionType - - features = ... # type: QStyleOptionFrame.FrameFeature - lineWidth = ... # type: int - midLineWidth = ... # type: int - text = ... # type: typing.Optional[str] - textAlignment = ... # type: QtCore.Qt.AlignmentFlag - textColor = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int] - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionGroupBox') -> None: ... - - -class QStyleOptionSizeGrip(QStyleOptionComplex): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionSizeGrip.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionSizeGrip.StyleOptionType - - corner = ... # type: QtCore.Qt.Corner - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionSizeGrip') -> None: ... - - -class QStyleOptionGraphicsItem(QStyleOption): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleOptionGraphicsItem.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleOptionGraphicsItem.StyleOptionType - - exposedRect = ... # type: QtCore.QRectF - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, other: 'QStyleOptionGraphicsItem') -> None: ... - - @staticmethod - def levelOfDetailFromTransform(worldTransform: QtGui.QTransform) -> float: ... - - -class QStyleHintReturnVariant(QStyleHintReturn): - - class StyleOptionVersion(enum.Enum): - Version = ... # type: QStyleHintReturnVariant.StyleOptionVersion - - class StyleOptionType(enum.Enum): - Type = ... # type: QStyleHintReturnVariant.StyleOptionType - - variant = ... # type: typing.Any - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QStyleHintReturnVariant') -> None: ... - - -class QStylePainter(QtGui.QPainter): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, w: typing.Optional[QWidget]) -> None: ... - @typing.overload - def __init__(self, pd: typing.Optional[QtGui.QPaintDevice], w: typing.Optional[QWidget]) -> None: ... - - def drawItemPixmap(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> None: ... - def drawItemText(self, rect: QtCore.QRect, flags: int, pal: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... - def drawComplexControl(self, cc: QStyle.ComplexControl, opt: QStyleOptionComplex) -> None: ... - def drawControl(self, ce: QStyle.ControlElement, opt: QStyleOption) -> None: ... - def drawPrimitive(self, pe: QStyle.PrimitiveElement, opt: QStyleOption) -> None: ... - def style(self) -> typing.Optional[QStyle]: ... - @typing.overload - def begin(self, w: typing.Optional[QWidget]) -> bool: ... - @typing.overload - def begin(self, pd: typing.Optional[QtGui.QPaintDevice], w: typing.Optional[QWidget]) -> bool: ... - - -class QSystemTrayIcon(QtCore.QObject): - - class MessageIcon(enum.Enum): - NoIcon = ... # type: QSystemTrayIcon.MessageIcon - Information = ... # type: QSystemTrayIcon.MessageIcon - Warning = ... # type: QSystemTrayIcon.MessageIcon - Critical = ... # type: QSystemTrayIcon.MessageIcon - - class ActivationReason(enum.Enum): - Unknown = ... # type: QSystemTrayIcon.ActivationReason - Context = ... # type: QSystemTrayIcon.ActivationReason - DoubleClick = ... # type: QSystemTrayIcon.ActivationReason - Trigger = ... # type: QSystemTrayIcon.ActivationReason - MiddleClick = ... # type: QSystemTrayIcon.ActivationReason - - @typing.overload - def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - @typing.overload - def __init__(self, icon: QtGui.QIcon, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... - - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - messageClicked: typing.ClassVar[QtCore.pyqtSignal] - activated: typing.ClassVar[QtCore.pyqtSignal] - def show(self) -> None: ... - def setVisible(self, visible: bool) -> None: ... - def hide(self) -> None: ... - def isVisible(self) -> bool: ... - @typing.overload - def showMessage(self, title: typing.Optional[str], msg: typing.Optional[str], icon: 'QSystemTrayIcon.MessageIcon' = ..., msecs: int = ...) -> None: ... - @typing.overload - def showMessage(self, title: typing.Optional[str], msg: typing.Optional[str], icon: QtGui.QIcon, msecs: int = ...) -> None: ... - @staticmethod - def supportsMessages() -> bool: ... - @staticmethod - def isSystemTrayAvailable() -> bool: ... - def setToolTip(self, tip: typing.Optional[str]) -> None: ... - def toolTip(self) -> str: ... - def setIcon(self, icon: QtGui.QIcon) -> None: ... - def icon(self) -> QtGui.QIcon: ... - def geometry(self) -> QtCore.QRect: ... - def contextMenu(self) -> typing.Optional[QMenu]: ... - def setContextMenu(self, menu: typing.Optional[QMenu]) -> None: ... - - -class QTabBar(QWidget): - - class SelectionBehavior(enum.Enum): - SelectLeftTab = ... # type: QTabBar.SelectionBehavior - SelectRightTab = ... # type: QTabBar.SelectionBehavior - SelectPreviousTab = ... # type: QTabBar.SelectionBehavior - - class ButtonPosition(enum.Enum): - LeftSide = ... # type: QTabBar.ButtonPosition - RightSide = ... # type: QTabBar.ButtonPosition - - class Shape(enum.Enum): - RoundedNorth = ... # type: QTabBar.Shape - RoundedSouth = ... # type: QTabBar.Shape - RoundedWest = ... # type: QTabBar.Shape - RoundedEast = ... # type: QTabBar.Shape - TriangularNorth = ... # type: QTabBar.Shape - TriangularSouth = ... # type: QTabBar.Shape - TriangularWest = ... # type: QTabBar.Shape - TriangularEast = ... # type: QTabBar.Shape - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setTabVisible(self, index: int, visible: bool) -> None: ... - def isTabVisible(self, index: int) -> bool: ... - def setAccessibleTabName(self, index: int, name: typing.Optional[str]) -> None: ... - def accessibleTabName(self, index: int) -> str: ... - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def setChangeCurrentOnDrag(self, change: bool) -> None: ... - def changeCurrentOnDrag(self) -> bool: ... - def setAutoHide(self, hide: bool) -> None: ... - def autoHide(self) -> bool: ... - tabBarDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - tabBarClicked: typing.ClassVar[QtCore.pyqtSignal] - def minimumTabSizeHint(self, index: int) -> QtCore.QSize: ... - def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... - tabMoved: typing.ClassVar[QtCore.pyqtSignal] - tabCloseRequested: typing.ClassVar[QtCore.pyqtSignal] - def setDocumentMode(self, set: bool) -> None: ... - def documentMode(self) -> bool: ... - def setMovable(self, movable: bool) -> None: ... - def isMovable(self) -> bool: ... - def setExpanding(self, enabled: bool) -> None: ... - def expanding(self) -> bool: ... - def setSelectionBehaviorOnRemove(self, behavior: 'QTabBar.SelectionBehavior') -> None: ... - def selectionBehaviorOnRemove(self) -> 'QTabBar.SelectionBehavior': ... - def tabButton(self, index: int, position: 'QTabBar.ButtonPosition') -> typing.Optional[QWidget]: ... - def setTabButton(self, index: int, position: 'QTabBar.ButtonPosition', widget: typing.Optional[QWidget]) -> None: ... - def setTabsClosable(self, closable: bool) -> None: ... - def tabsClosable(self) -> bool: ... - def moveTab(self, from_: int, to: int) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def tabLayoutChange(self) -> None: ... - def tabRemoved(self, index: int) -> None: ... - def tabInserted(self, index: int) -> None: ... - def tabSizeHint(self, index: int) -> QtCore.QSize: ... - def initStyleOption(self, option: typing.Optional[QStyleOptionTab], tabIndex: int) -> None: ... - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentIndex(self, index: int) -> None: ... - def usesScrollButtons(self) -> bool: ... - def setUsesScrollButtons(self, useButtons: bool) -> None: ... - def setElideMode(self, a0: QtCore.Qt.TextElideMode) -> None: ... - def elideMode(self) -> QtCore.Qt.TextElideMode: ... - def setIconSize(self, size: QtCore.QSize) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - def drawBase(self) -> bool: ... - def setDrawBase(self, drawTheBase: bool) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def currentIndex(self) -> int: ... - def tabRect(self, index: int) -> QtCore.QRect: ... - def tabAt(self, pos: QtCore.QPoint) -> int: ... - def tabData(self, index: int) -> typing.Any: ... - def setTabData(self, index: int, data: typing.Any) -> None: ... - def tabWhatsThis(self, index: int) -> str: ... - def setTabWhatsThis(self, index: int, text: typing.Optional[str]) -> None: ... - def tabToolTip(self, index: int) -> str: ... - def setTabToolTip(self, index: int, tip: typing.Optional[str]) -> None: ... - def setTabIcon(self, index: int, icon: QtGui.QIcon) -> None: ... - def tabIcon(self, index: int) -> QtGui.QIcon: ... - def setTabTextColor(self, index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def tabTextColor(self, index: int) -> QtGui.QColor: ... - def setTabText(self, index: int, text: typing.Optional[str]) -> None: ... - def tabText(self, index: int) -> str: ... - def setTabEnabled(self, index: int, a1: bool) -> None: ... - def isTabEnabled(self, index: int) -> bool: ... - def removeTab(self, index: int) -> None: ... - @typing.overload - def insertTab(self, index: int, text: typing.Optional[str]) -> int: ... - @typing.overload - def insertTab(self, index: int, icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... - @typing.overload - def addTab(self, text: typing.Optional[str]) -> int: ... - @typing.overload - def addTab(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... - def setShape(self, shape: 'QTabBar.Shape') -> None: ... - def shape(self) -> 'QTabBar.Shape': ... - - -class QTableView(QAbstractItemView): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def initViewItemOption(self, option: typing.Optional[QStyleOptionViewItem]) -> None: ... - def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... - def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... - def clearSpans(self) -> None: ... - def isCornerButtonEnabled(self) -> bool: ... - def setCornerButtonEnabled(self, enable: bool) -> None: ... - def wordWrap(self) -> bool: ... - def setWordWrap(self, on: bool) -> None: ... - def sortByColumn(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def columnSpan(self, row: int, column: int) -> int: ... - def rowSpan(self, row: int, column: int) -> int: ... - def setSpan(self, row: int, column: int, rowSpan: int, columnSpan: int) -> None: ... - def isSortingEnabled(self) -> bool: ... - def setSortingEnabled(self, enable: bool) -> None: ... - def viewportSizeHint(self) -> QtCore.QSize: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def horizontalScrollbarAction(self, action: int) -> None: ... - def verticalScrollbarAction(self, action: int) -> None: ... - def sizeHintForColumn(self, column: int) -> int: ... - def sizeHintForRow(self, row: int) -> int: ... - def updateGeometries(self) -> None: ... - def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def columnCountChanged(self, oldCount: int, newCount: int) -> None: ... - def rowCountChanged(self, oldCount: int, newCount: int) -> None: ... - def columnResized(self, column: int, oldWidth: int, newWidth: int) -> None: ... - def rowResized(self, row: int, oldHeight: int, newHeight: int) -> None: ... - def columnMoved(self, column: int, oldIndex: int, newIndex: int) -> None: ... - def rowMoved(self, row: int, oldIndex: int, newIndex: int) -> None: ... - def resizeColumnsToContents(self) -> None: ... - def resizeColumnToContents(self, column: int) -> None: ... - def resizeRowsToContents(self) -> None: ... - def resizeRowToContents(self, row: int) -> None: ... - def showColumn(self, column: int) -> None: ... - def showRow(self, row: int) -> None: ... - def hideColumn(self, column: int) -> None: ... - def hideRow(self, row: int) -> None: ... - def selectColumn(self, column: int) -> None: ... - def selectRow(self, row: int) -> None: ... - def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def setGridStyle(self, style: QtCore.Qt.PenStyle) -> None: ... - def gridStyle(self) -> QtCore.Qt.PenStyle: ... - def setShowGrid(self, show: bool) -> None: ... - def showGrid(self) -> bool: ... - def setColumnHidden(self, column: int, hide: bool) -> None: ... - def isColumnHidden(self, column: int) -> bool: ... - def setRowHidden(self, row: int, hide: bool) -> None: ... - def isRowHidden(self, row: int) -> bool: ... - def columnAt(self, x: int) -> int: ... - def columnWidth(self, column: int) -> int: ... - def setColumnWidth(self, column: int, width: int) -> None: ... - def columnViewportPosition(self, column: int) -> int: ... - def rowAt(self, y: int) -> int: ... - def rowHeight(self, row: int) -> int: ... - def setRowHeight(self, row: int, height: int) -> None: ... - def rowViewportPosition(self, row: int) -> int: ... - def setVerticalHeader(self, header: typing.Optional[QHeaderView]) -> None: ... - def setHorizontalHeader(self, header: typing.Optional[QHeaderView]) -> None: ... - def verticalHeader(self) -> typing.Optional[QHeaderView]: ... - def horizontalHeader(self) -> typing.Optional[QHeaderView]: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - - -class QTableWidgetSelectionRange(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, top: int, left: int, bottom: int, right: int) -> None: ... - @typing.overload - def __init__(self, a0: 'QTableWidgetSelectionRange') -> None: ... - - def __eq__(self, other: object): ... - def __ne__(self, other: object): ... - def columnCount(self) -> int: ... - def rowCount(self) -> int: ... - def rightColumn(self) -> int: ... - def leftColumn(self) -> int: ... - def bottomRow(self) -> int: ... - def topRow(self) -> int: ... - - -class QTableWidgetItem(PyQt6.sip.wrapper): - - class ItemType(enum.IntEnum): - Type = ... # type: QTableWidgetItem.ItemType - UserType = ... # type: QTableWidgetItem.ItemType - - @typing.overload - def __init__(self, type: int = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], type: int = ...) -> None: ... - @typing.overload - def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], type: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QTableWidgetItem') -> None: ... - - def __ge__(self, other: 'QTableWidgetItem') -> bool: ... - def isSelected(self) -> bool: ... - def setSelected(self, aselect: bool) -> None: ... - def column(self) -> int: ... - def row(self) -> int: ... - def setForeground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def foreground(self) -> QtGui.QBrush: ... - def setBackground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def background(self) -> QtGui.QBrush: ... - def setSizeHint(self, size: QtCore.QSize) -> None: ... - def sizeHint(self) -> QtCore.QSize: ... - def setFont(self, afont: QtGui.QFont) -> None: ... - def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... - def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... - def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... - def setIcon(self, aicon: QtGui.QIcon) -> None: ... - def setText(self, atext: typing.Optional[str]) -> None: ... - def setFlags(self, aflags: QtCore.Qt.ItemFlag) -> None: ... - def type(self) -> int: ... - def write(self, out: QtCore.QDataStream) -> None: ... - def read(self, in_: QtCore.QDataStream) -> None: ... - def __lt__(self, other: 'QTableWidgetItem') -> bool: ... - def setData(self, role: int, value: typing.Any) -> None: ... - def data(self, role: int) -> typing.Any: ... - def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... - def checkState(self) -> QtCore.Qt.CheckState: ... - @typing.overload - def setTextAlignment(self, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - @typing.overload - def setTextAlignment(self, alignment: int) -> None: ... - def textAlignment(self) -> int: ... - def font(self) -> QtGui.QFont: ... - def whatsThis(self) -> str: ... - def toolTip(self) -> str: ... - def statusTip(self) -> str: ... - def icon(self) -> QtGui.QIcon: ... - def text(self) -> str: ... - def flags(self) -> QtCore.Qt.ItemFlag: ... - def tableWidget(self) -> typing.Optional['QTableWidget']: ... - def clone(self) -> typing.Optional['QTableWidgetItem']: ... - - -class QTableWidget(QTableView): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, rows: int, columns: int, parent: typing.Optional[QWidget] = ...) -> None: ... - - def isPersistentEditorOpen(self, item: typing.Optional[QTableWidgetItem]) -> bool: ... - def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QTableWidgetItem]: ... - def indexFromItem(self, item: typing.Optional[QTableWidgetItem]) -> QtCore.QModelIndex: ... - def items(self, data: typing.Optional[QtCore.QMimeData]) -> typing.List[QTableWidgetItem]: ... - def supportedDropActions(self) -> QtCore.Qt.DropAction: ... - def dropMimeData(self, row: int, column: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... - def mimeData(self, items: typing.Iterable[QTableWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... - def mimeTypes(self) -> typing.List[str]: ... - currentCellChanged: typing.ClassVar[QtCore.pyqtSignal] - cellChanged: typing.ClassVar[QtCore.pyqtSignal] - cellEntered: typing.ClassVar[QtCore.pyqtSignal] - cellActivated: typing.ClassVar[QtCore.pyqtSignal] - cellDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - cellClicked: typing.ClassVar[QtCore.pyqtSignal] - cellPressed: typing.ClassVar[QtCore.pyqtSignal] - itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] - currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemEntered: typing.ClassVar[QtCore.pyqtSignal] - itemActivated: typing.ClassVar[QtCore.pyqtSignal] - itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - itemClicked: typing.ClassVar[QtCore.pyqtSignal] - itemPressed: typing.ClassVar[QtCore.pyqtSignal] - def clearContents(self) -> None: ... - def clear(self) -> None: ... - def removeColumn(self, column: int) -> None: ... - def removeRow(self, row: int) -> None: ... - def insertColumn(self, column: int) -> None: ... - def insertRow(self, row: int) -> None: ... - def scrollToItem(self, item: typing.Optional[QTableWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def setItemPrototype(self, item: typing.Optional[QTableWidgetItem]) -> None: ... - def itemPrototype(self) -> typing.Optional[QTableWidgetItem]: ... - def visualItemRect(self, item: typing.Optional[QTableWidgetItem]) -> QtCore.QRect: ... - @typing.overload - def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QTableWidgetItem]: ... - @typing.overload - def itemAt(self, ax: int, ay: int) -> typing.Optional[QTableWidgetItem]: ... - def visualColumn(self, logicalColumn: int) -> int: ... - def visualRow(self, logicalRow: int) -> int: ... - def findItems(self, text: typing.Optional[str], flags: QtCore.Qt.MatchFlag) -> typing.List[QTableWidgetItem]: ... - def selectedItems(self) -> typing.List[QTableWidgetItem]: ... - def selectedRanges(self) -> typing.List[QTableWidgetSelectionRange]: ... - def setRangeSelected(self, range: QTableWidgetSelectionRange, select: bool) -> None: ... - def removeCellWidget(self, arow: int, acolumn: int) -> None: ... - def setCellWidget(self, row: int, column: int, widget: typing.Optional[QWidget]) -> None: ... - def cellWidget(self, row: int, column: int) -> typing.Optional[QWidget]: ... - def closePersistentEditor(self, item: typing.Optional[QTableWidgetItem]) -> None: ... - def openPersistentEditor(self, item: typing.Optional[QTableWidgetItem]) -> None: ... - def editItem(self, item: typing.Optional[QTableWidgetItem]) -> None: ... - def isSortingEnabled(self) -> bool: ... - def setSortingEnabled(self, enable: bool) -> None: ... - def sortItems(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... - @typing.overload - def setCurrentCell(self, row: int, column: int) -> None: ... - @typing.overload - def setCurrentCell(self, row: int, column: int, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QTableWidgetItem]) -> None: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QTableWidgetItem], command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def currentItem(self) -> typing.Optional[QTableWidgetItem]: ... - def currentColumn(self) -> int: ... - def currentRow(self) -> int: ... - def setHorizontalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - def setVerticalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - def takeHorizontalHeaderItem(self, column: int) -> typing.Optional[QTableWidgetItem]: ... - def setHorizontalHeaderItem(self, column: int, item: typing.Optional[QTableWidgetItem]) -> None: ... - def horizontalHeaderItem(self, column: int) -> typing.Optional[QTableWidgetItem]: ... - def takeVerticalHeaderItem(self, row: int) -> typing.Optional[QTableWidgetItem]: ... - def setVerticalHeaderItem(self, row: int, item: typing.Optional[QTableWidgetItem]) -> None: ... - def verticalHeaderItem(self, row: int) -> typing.Optional[QTableWidgetItem]: ... - def takeItem(self, row: int, column: int) -> typing.Optional[QTableWidgetItem]: ... - def setItem(self, row: int, column: int, item: typing.Optional[QTableWidgetItem]) -> None: ... - def item(self, row: int, column: int) -> typing.Optional[QTableWidgetItem]: ... - def column(self, item: typing.Optional[QTableWidgetItem]) -> int: ... - def row(self, item: typing.Optional[QTableWidgetItem]) -> int: ... - def columnCount(self) -> int: ... - def setColumnCount(self, columns: int) -> None: ... - def rowCount(self) -> int: ... - def setRowCount(self, rows: int) -> None: ... - - -class QTabWidget(QWidget): - - class TabShape(enum.Enum): - Rounded = ... # type: QTabWidget.TabShape - Triangular = ... # type: QTabWidget.TabShape - - class TabPosition(enum.Enum): - North = ... # type: QTabWidget.TabPosition - South = ... # type: QTabWidget.TabPosition - West = ... # type: QTabWidget.TabPosition - East = ... # type: QTabWidget.TabPosition - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def setTabVisible(self, index: int, visible: bool) -> None: ... - def isTabVisible(self, index: int) -> bool: ... - def setTabBarAutoHide(self, enabled: bool) -> None: ... - def tabBarAutoHide(self) -> bool: ... - tabBarDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - tabBarClicked: typing.ClassVar[QtCore.pyqtSignal] - def hasHeightForWidth(self) -> bool: ... - def heightForWidth(self, width: int) -> int: ... - tabCloseRequested: typing.ClassVar[QtCore.pyqtSignal] - def setDocumentMode(self, set: bool) -> None: ... - def documentMode(self) -> bool: ... - def setMovable(self, movable: bool) -> None: ... - def isMovable(self) -> bool: ... - def setTabsClosable(self, closeable: bool) -> None: ... - def tabsClosable(self) -> bool: ... - def setUsesScrollButtons(self, useButtons: bool) -> None: ... - def usesScrollButtons(self) -> bool: ... - def setIconSize(self, size: QtCore.QSize) -> None: ... - def iconSize(self) -> QtCore.QSize: ... - def setElideMode(self, a0: QtCore.Qt.TextElideMode) -> None: ... - def elideMode(self) -> QtCore.Qt.TextElideMode: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def tabBar(self) -> typing.Optional[QTabBar]: ... - def setTabBar(self, a0: typing.Optional[QTabBar]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def tabRemoved(self, index: int) -> None: ... - def tabInserted(self, index: int) -> None: ... - def initStyleOption(self, option: typing.Optional[QStyleOptionTabWidgetFrame]) -> None: ... - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - def cornerWidget(self, corner: QtCore.Qt.Corner = ...) -> typing.Optional[QWidget]: ... - def setCornerWidget(self, widget: typing.Optional[QWidget], corner: QtCore.Qt.Corner = ...) -> None: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - def setTabShape(self, s: 'QTabWidget.TabShape') -> None: ... - def tabShape(self) -> 'QTabWidget.TabShape': ... - def setTabPosition(self, a0: 'QTabWidget.TabPosition') -> None: ... - def tabPosition(self) -> 'QTabWidget.TabPosition': ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def indexOf(self, widget: typing.Optional[QWidget]) -> int: ... - def widget(self, index: int) -> typing.Optional[QWidget]: ... - def currentWidget(self) -> typing.Optional[QWidget]: ... - def currentIndex(self) -> int: ... - def tabWhatsThis(self, index: int) -> str: ... - def setTabWhatsThis(self, index: int, text: typing.Optional[str]) -> None: ... - def tabToolTip(self, index: int) -> str: ... - def setTabToolTip(self, index: int, tip: typing.Optional[str]) -> None: ... - def setTabIcon(self, index: int, icon: QtGui.QIcon) -> None: ... - def tabIcon(self, index: int) -> QtGui.QIcon: ... - def setTabText(self, index: int, a1: typing.Optional[str]) -> None: ... - def tabText(self, index: int) -> str: ... - def setTabEnabled(self, index: int, a1: bool) -> None: ... - def isTabEnabled(self, index: int) -> bool: ... - def removeTab(self, index: int) -> None: ... - @typing.overload - def insertTab(self, index: int, widget: typing.Optional[QWidget], a2: typing.Optional[str]) -> int: ... - @typing.overload - def insertTab(self, index: int, widget: typing.Optional[QWidget], icon: QtGui.QIcon, label: typing.Optional[str]) -> int: ... - @typing.overload - def addTab(self, widget: typing.Optional[QWidget], a1: typing.Optional[str]) -> int: ... - @typing.overload - def addTab(self, widget: typing.Optional[QWidget], icon: QtGui.QIcon, label: typing.Optional[str]) -> int: ... - def clear(self) -> None: ... - - -class QTextEdit(QAbstractScrollArea): - - class AutoFormattingFlag(enum.Flag): - AutoNone = ... # type: QTextEdit.AutoFormattingFlag - AutoBulletList = ... # type: QTextEdit.AutoFormattingFlag - AutoAll = ... # type: QTextEdit.AutoFormattingFlag - - class LineWrapMode(enum.Enum): - NoWrap = ... # type: QTextEdit.LineWrapMode - WidgetWidth = ... # type: QTextEdit.LineWrapMode - FixedPixelWidth = ... # type: QTextEdit.LineWrapMode - FixedColumnWidth = ... # type: QTextEdit.LineWrapMode - - class ExtraSelection(PyQt6.sip.simplewrapper): - - cursor = ... # type: QtGui.QTextCursor - format = ... # type: QtGui.QTextCharFormat - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QTextEdit.ExtraSelection') -> None: ... - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setMarkdown(self, markdown: typing.Optional[str]) -> None: ... - def toMarkdown(self, features: QtGui.QTextDocument.MarkdownFeature = ...) -> str: ... - def setTabStopDistance(self, distance: float) -> None: ... - def tabStopDistance(self) -> float: ... - def placeholderText(self) -> str: ... - def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... - def setTextBackgroundColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def textBackgroundColor(self) -> QtGui.QColor: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - @typing.overload - def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery) -> typing.Any: ... - @typing.overload - def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... - def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... - def insertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> None: ... - def canInsertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> bool: ... - def createMimeDataFromSelection(self) -> typing.Optional[QtCore.QMimeData]: ... - def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... - def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... - def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... - def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... - def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... - def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... - def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] - selectionChanged: typing.ClassVar[QtCore.pyqtSignal] - copyAvailable: typing.ClassVar[QtCore.pyqtSignal] - currentCharFormatChanged: typing.ClassVar[QtCore.pyqtSignal] - redoAvailable: typing.ClassVar[QtCore.pyqtSignal] - undoAvailable: typing.ClassVar[QtCore.pyqtSignal] - textChanged: typing.ClassVar[QtCore.pyqtSignal] - def zoomOut(self, range: int = ...) -> None: ... - def zoomIn(self, range: int = ...) -> None: ... - def undo(self) -> None: ... - def redo(self) -> None: ... - def scrollToAnchor(self, name: typing.Optional[str]) -> None: ... - def insertHtml(self, text: typing.Optional[str]) -> None: ... - def insertPlainText(self, text: typing.Optional[str]) -> None: ... - def selectAll(self) -> None: ... - def clear(self) -> None: ... - def paste(self) -> None: ... - def copy(self) -> None: ... - def cut(self) -> None: ... - def setHtml(self, text: typing.Optional[str]) -> None: ... - def setPlainText(self, text: typing.Optional[str]) -> None: ... - def setAlignment(self, a: QtCore.Qt.AlignmentFlag) -> None: ... - def setCurrentFont(self, f: QtGui.QFont) -> None: ... - def setTextColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int]) -> None: ... - def setText(self, text: typing.Optional[str]) -> None: ... - def setFontItalic(self, b: bool) -> None: ... - def setFontUnderline(self, b: bool) -> None: ... - def setFontWeight(self, w: int) -> None: ... - def setFontFamily(self, fontFamily: typing.Optional[str]) -> None: ... - def setFontPointSize(self, s: float) -> None: ... - def print(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... - def moveCursor(self, operation: QtGui.QTextCursor.MoveOperation, mode: QtGui.QTextCursor.MoveMode = ...) -> None: ... - def canPaste(self) -> bool: ... - def extraSelections(self) -> typing.List['QTextEdit.ExtraSelection']: ... - def setExtraSelections(self, selections: typing.Iterable['QTextEdit.ExtraSelection']) -> None: ... - def cursorWidth(self) -> int: ... - def setCursorWidth(self, width: int) -> None: ... - def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlag: ... - def setTextInteractionFlags(self, flags: QtCore.Qt.TextInteractionFlag) -> None: ... - def setAcceptRichText(self, accept: bool) -> None: ... - def acceptRichText(self) -> bool: ... - def setOverwriteMode(self, overwrite: bool) -> None: ... - def overwriteMode(self) -> bool: ... - def anchorAt(self, pos: QtCore.QPoint) -> str: ... - @typing.overload - def cursorRect(self, cursor: QtGui.QTextCursor) -> QtCore.QRect: ... - @typing.overload - def cursorRect(self) -> QtCore.QRect: ... - def cursorForPosition(self, pos: QtCore.QPoint) -> QtGui.QTextCursor: ... - @typing.overload - def createStandardContextMenu(self) -> typing.Optional[QMenu]: ... - @typing.overload - def createStandardContextMenu(self, position: QtCore.QPoint) -> typing.Optional[QMenu]: ... - def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... - def ensureCursorVisible(self) -> None: ... - def append(self, text: typing.Optional[str]) -> None: ... - def toHtml(self) -> str: ... - def toPlainText(self) -> str: ... - @typing.overload - def find(self, exp: typing.Optional[str], options: QtGui.QTextDocument.FindFlag = ...) -> bool: ... - @typing.overload - def find(self, exp: QtCore.QRegularExpression, options: QtGui.QTextDocument.FindFlag = ...) -> bool: ... - def setWordWrapMode(self, policy: QtGui.QTextOption.WrapMode) -> None: ... - def wordWrapMode(self) -> QtGui.QTextOption.WrapMode: ... - def setLineWrapColumnOrWidth(self, w: int) -> None: ... - def lineWrapColumnOrWidth(self) -> int: ... - def setLineWrapMode(self, mode: 'QTextEdit.LineWrapMode') -> None: ... - def lineWrapMode(self) -> 'QTextEdit.LineWrapMode': ... - def setUndoRedoEnabled(self, enable: bool) -> None: ... - def isUndoRedoEnabled(self) -> bool: ... - def documentTitle(self) -> str: ... - def setDocumentTitle(self, title: typing.Optional[str]) -> None: ... - def setTabChangesFocus(self, b: bool) -> None: ... - def tabChangesFocus(self) -> bool: ... - def setAutoFormatting(self, features: 'QTextEdit.AutoFormattingFlag') -> None: ... - def autoFormatting(self) -> 'QTextEdit.AutoFormattingFlag': ... - def currentCharFormat(self) -> QtGui.QTextCharFormat: ... - def setCurrentCharFormat(self, format: QtGui.QTextCharFormat) -> None: ... - def mergeCurrentCharFormat(self, modifier: QtGui.QTextCharFormat) -> None: ... - def alignment(self) -> QtCore.Qt.AlignmentFlag: ... - def currentFont(self) -> QtGui.QFont: ... - def textColor(self) -> QtGui.QColor: ... - def fontItalic(self) -> bool: ... - def fontUnderline(self) -> bool: ... - def fontWeight(self) -> int: ... - def fontFamily(self) -> str: ... - def fontPointSize(self) -> float: ... - def setReadOnly(self, ro: bool) -> None: ... - def isReadOnly(self) -> bool: ... - def textCursor(self) -> QtGui.QTextCursor: ... - def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... - def document(self) -> typing.Optional[QtGui.QTextDocument]: ... - def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... - - -class QTextBrowser(QTextEdit): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def doSetSource(self, name: QtCore.QUrl, type: QtGui.QTextDocument.ResourceType = ...) -> None: ... - def sourceType(self) -> QtGui.QTextDocument.ResourceType: ... - historyChanged: typing.ClassVar[QtCore.pyqtSignal] - def forwardHistoryCount(self) -> int: ... - def backwardHistoryCount(self) -> int: ... - def historyUrl(self, a0: int) -> QtCore.QUrl: ... - def historyTitle(self, a0: int) -> str: ... - def setOpenLinks(self, open: bool) -> None: ... - def openLinks(self) -> bool: ... - def setOpenExternalLinks(self, open: bool) -> None: ... - def openExternalLinks(self) -> bool: ... - def clearHistory(self) -> None: ... - def isForwardAvailable(self) -> bool: ... - def isBackwardAvailable(self) -> bool: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def focusNextPrevChild(self, next: bool) -> bool: ... - def focusOutEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... - def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - anchorClicked: typing.ClassVar[QtCore.pyqtSignal] - highlighted: typing.ClassVar[QtCore.pyqtSignal] - sourceChanged: typing.ClassVar[QtCore.pyqtSignal] - forwardAvailable: typing.ClassVar[QtCore.pyqtSignal] - backwardAvailable: typing.ClassVar[QtCore.pyqtSignal] - def reload(self) -> None: ... - def home(self) -> None: ... - def forward(self) -> None: ... - def backward(self) -> None: ... - def setSource(self, name: QtCore.QUrl, type: QtGui.QTextDocument.ResourceType = ...) -> None: ... - def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... - def setSearchPaths(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... - def searchPaths(self) -> typing.List[str]: ... - def source(self) -> QtCore.QUrl: ... - - -class QToolBar(QWidget): - - @typing.overload - def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def isFloating(self) -> bool: ... - def setFloatable(self, floatable: bool) -> None: ... - def isFloatable(self) -> bool: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def actionEvent(self, event: typing.Optional[QtGui.QActionEvent]) -> None: ... - def initStyleOption(self, option: typing.Optional[QStyleOptionToolBar]) -> None: ... - visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] - topLevelChanged: typing.ClassVar[QtCore.pyqtSignal] - toolButtonStyleChanged: typing.ClassVar[QtCore.pyqtSignal] - iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] - orientationChanged: typing.ClassVar[QtCore.pyqtSignal] - allowedAreasChanged: typing.ClassVar[QtCore.pyqtSignal] - movableChanged: typing.ClassVar[QtCore.pyqtSignal] - actionTriggered: typing.ClassVar[QtCore.pyqtSignal] - def setToolButtonStyle(self, toolButtonStyle: QtCore.Qt.ToolButtonStyle) -> None: ... - def setIconSize(self, iconSize: QtCore.QSize) -> None: ... - def widgetForAction(self, action: typing.Optional[QtGui.QAction]) -> typing.Optional[QWidget]: ... - def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... - def iconSize(self) -> QtCore.QSize: ... - def toggleViewAction(self) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def actionAt(self, p: QtCore.QPoint) -> typing.Optional[QtGui.QAction]: ... - @typing.overload - def actionAt(self, ax: int, ay: int) -> typing.Optional[QtGui.QAction]: ... - def actionGeometry(self, action: typing.Optional[QtGui.QAction]) -> QtCore.QRect: ... - def insertWidget(self, before: typing.Optional[QtGui.QAction], widget: typing.Optional[QWidget]) -> typing.Optional[QtGui.QAction]: ... - def addWidget(self, widget: typing.Optional[QWidget]) -> typing.Optional[QtGui.QAction]: ... - def insertSeparator(self, before: typing.Optional[QtGui.QAction]) -> typing.Optional[QtGui.QAction]: ... - def addSeparator(self) -> typing.Optional[QtGui.QAction]: ... - def clear(self) -> None: ... - def orientation(self) -> QtCore.Qt.Orientation: ... - def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... - def isAreaAllowed(self, area: QtCore.Qt.ToolBarArea) -> bool: ... - def allowedAreas(self) -> QtCore.Qt.ToolBarArea: ... - def setAllowedAreas(self, areas: QtCore.Qt.ToolBarArea) -> None: ... - def isMovable(self) -> bool: ... - def setMovable(self, movable: bool) -> None: ... - - -class QToolBox(QFrame): - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def itemRemoved(self, index: int) -> None: ... - def itemInserted(self, index: int) -> None: ... - currentChanged: typing.ClassVar[QtCore.pyqtSignal] - def setCurrentWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def setCurrentIndex(self, index: int) -> None: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def indexOf(self, widget: typing.Optional[QWidget]) -> int: ... - def widget(self, index: int) -> typing.Optional[QWidget]: ... - def currentWidget(self) -> typing.Optional[QWidget]: ... - def currentIndex(self) -> int: ... - def itemToolTip(self, index: int) -> str: ... - def setItemToolTip(self, index: int, toolTip: typing.Optional[str]) -> None: ... - def itemIcon(self, index: int) -> QtGui.QIcon: ... - def setItemIcon(self, index: int, icon: QtGui.QIcon) -> None: ... - def itemText(self, index: int) -> str: ... - def setItemText(self, index: int, text: typing.Optional[str]) -> None: ... - def isItemEnabled(self, index: int) -> bool: ... - def setItemEnabled(self, index: int, enabled: bool) -> None: ... - def removeItem(self, index: int) -> None: ... - @typing.overload - def insertItem(self, index: int, item: typing.Optional[QWidget], text: typing.Optional[str]) -> int: ... - @typing.overload - def insertItem(self, index: int, widget: typing.Optional[QWidget], icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... - @typing.overload - def addItem(self, item: typing.Optional[QWidget], text: typing.Optional[str]) -> int: ... - @typing.overload - def addItem(self, item: typing.Optional[QWidget], iconSet: QtGui.QIcon, text: typing.Optional[str]) -> int: ... - - -class QToolButton(QAbstractButton): - - class ToolButtonPopupMode(enum.Enum): - DelayedPopup = ... # type: QToolButton.ToolButtonPopupMode - MenuButtonPopup = ... # type: QToolButton.ToolButtonPopupMode - InstantPopup = ... # type: QToolButton.ToolButtonPopupMode - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def checkStateSet(self) -> None: ... - def hitButton(self, pos: QtCore.QPoint) -> bool: ... - def nextCheckState(self) -> None: ... - def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... - def enterEvent(self, a0: typing.Optional[QtGui.QEnterEvent]) -> None: ... - def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... - def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def initStyleOption(self, option: typing.Optional[QStyleOptionToolButton]) -> None: ... - triggered: typing.ClassVar[QtCore.pyqtSignal] - def setDefaultAction(self, a0: typing.Optional[QtGui.QAction]) -> None: ... - def setToolButtonStyle(self, style: QtCore.Qt.ToolButtonStyle) -> None: ... - def showMenu(self) -> None: ... - def autoRaise(self) -> bool: ... - def setAutoRaise(self, enable: bool) -> None: ... - def defaultAction(self) -> typing.Optional[QtGui.QAction]: ... - def popupMode(self) -> 'QToolButton.ToolButtonPopupMode': ... - def setPopupMode(self, mode: 'QToolButton.ToolButtonPopupMode') -> None: ... - def menu(self) -> typing.Optional[QMenu]: ... - def setMenu(self, menu: typing.Optional[QMenu]) -> None: ... - def setArrowType(self, type: QtCore.Qt.ArrowType) -> None: ... - def arrowType(self) -> QtCore.Qt.ArrowType: ... - def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... - def minimumSizeHint(self) -> QtCore.QSize: ... - def sizeHint(self) -> QtCore.QSize: ... - - -class QToolTip(PyQt6.sip.simplewrapper): - - def __init__(self, a0: 'QToolTip') -> None: ... - - @staticmethod - def text() -> str: ... - @staticmethod - def isVisible() -> bool: ... - @staticmethod - def setFont(a0: QtGui.QFont) -> None: ... - @staticmethod - def font() -> QtGui.QFont: ... - @staticmethod - def setPalette(a0: QtGui.QPalette) -> None: ... - @staticmethod - def hideText() -> None: ... - @staticmethod - def palette() -> QtGui.QPalette: ... - @staticmethod - def showText(pos: QtCore.QPoint, text: typing.Optional[str], widget: typing.Optional[QWidget] = ..., rect: QtCore.QRect = ..., msecShowTime: int = ...) -> None: ... - - -class QTreeView(QAbstractItemView): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def expandRecursively(self, index: QtCore.QModelIndex, depth: int = ...) -> None: ... - def resetIndentation(self) -> None: ... - def viewportSizeHint(self) -> QtCore.QSize: ... - def treePosition(self) -> int: ... - def setTreePosition(self, logicalIndex: int) -> None: ... - def setHeaderHidden(self, hide: bool) -> None: ... - def isHeaderHidden(self) -> bool: ... - def setExpandsOnDoubleClick(self, enable: bool) -> None: ... - def expandsOnDoubleClick(self) -> bool: ... - def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... - def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... - def rowHeight(self, index: QtCore.QModelIndex) -> int: ... - def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def dragMoveEvent(self, event: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... - def expandToDepth(self, depth: int) -> None: ... - def wordWrap(self) -> bool: ... - def setWordWrap(self, on: bool) -> None: ... - def setFirstColumnSpanned(self, row: int, parent: QtCore.QModelIndex, span: bool) -> None: ... - def isFirstColumnSpanned(self, row: int, parent: QtCore.QModelIndex) -> bool: ... - def setAutoExpandDelay(self, delay: int) -> None: ... - def autoExpandDelay(self) -> int: ... - def sortByColumn(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def allColumnsShowFocus(self) -> bool: ... - def setAllColumnsShowFocus(self, enable: bool) -> None: ... - def isAnimated(self) -> bool: ... - def setAnimated(self, enable: bool) -> None: ... - def isSortingEnabled(self) -> bool: ... - def setSortingEnabled(self, enable: bool) -> None: ... - def setColumnWidth(self, column: int, width: int) -> None: ... - def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... - def horizontalScrollbarAction(self, action: int) -> None: ... - def indexRowSizeHint(self, index: QtCore.QModelIndex) -> int: ... - def sizeHintForColumn(self, column: int) -> int: ... - def updateGeometries(self) -> None: ... - def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... - def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def drawTree(self, painter: typing.Optional[QtGui.QPainter], region: QtGui.QRegion) -> None: ... - def drawBranches(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, index: QtCore.QModelIndex) -> None: ... - def drawRow(self, painter: typing.Optional[QtGui.QPainter], options: QStyleOptionViewItem, index: QtCore.QModelIndex) -> None: ... - def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... - def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... - def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... - def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... - def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... - def setSelection(self, rect: QtCore.QRect, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def verticalOffset(self) -> int: ... - def horizontalOffset(self) -> int: ... - def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: QtCore.Qt.KeyboardModifier) -> QtCore.QModelIndex: ... - def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... - def scrollContentsBy(self, dx: int, dy: int) -> None: ... - def rowsRemoved(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... - def reexpand(self) -> None: ... - def columnMoved(self) -> None: ... - def columnCountChanged(self, oldCount: int, newCount: int) -> None: ... - def columnResized(self, column: int, oldSize: int, newSize: int) -> None: ... - def selectAll(self) -> None: ... - def resizeColumnToContents(self, column: int) -> None: ... - def collapseAll(self) -> None: ... - def collapse(self, index: QtCore.QModelIndex) -> None: ... - def expandAll(self) -> None: ... - def expand(self, index: QtCore.QModelIndex) -> None: ... - def showColumn(self, column: int) -> None: ... - def hideColumn(self, column: int) -> None: ... - def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... - collapsed: typing.ClassVar[QtCore.pyqtSignal] - expanded: typing.ClassVar[QtCore.pyqtSignal] - def reset(self) -> None: ... - def indexBelow(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def indexAbove(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... - def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... - def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... - def keyboardSearch(self, search: typing.Optional[str]) -> None: ... - def setExpanded(self, index: QtCore.QModelIndex, expand: bool) -> None: ... - def isExpanded(self, index: QtCore.QModelIndex) -> bool: ... - def setRowHidden(self, row: int, parent: QtCore.QModelIndex, hide: bool) -> None: ... - def isRowHidden(self, row: int, parent: QtCore.QModelIndex) -> bool: ... - def setColumnHidden(self, column: int, hide: bool) -> None: ... - def isColumnHidden(self, column: int) -> bool: ... - def columnAt(self, x: int) -> int: ... - def columnWidth(self, column: int) -> int: ... - def columnViewportPosition(self, column: int) -> int: ... - def setItemsExpandable(self, enable: bool) -> None: ... - def itemsExpandable(self) -> bool: ... - def setUniformRowHeights(self, uniform: bool) -> None: ... - def uniformRowHeights(self) -> bool: ... - def setRootIsDecorated(self, show: bool) -> None: ... - def rootIsDecorated(self) -> bool: ... - def setIndentation(self, i: int) -> None: ... - def indentation(self) -> int: ... - def setHeader(self, header: typing.Optional[QHeaderView]) -> None: ... - def header(self) -> typing.Optional[QHeaderView]: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... - def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... - - -class QTreeWidgetItem(PyQt6.sip.wrapper): - - class ChildIndicatorPolicy(enum.Enum): - ShowIndicator = ... # type: QTreeWidgetItem.ChildIndicatorPolicy - DontShowIndicator = ... # type: QTreeWidgetItem.ChildIndicatorPolicy - DontShowIndicatorWhenChildless = ... # type: QTreeWidgetItem.ChildIndicatorPolicy - - class ItemType(enum.IntEnum): - Type = ... # type: QTreeWidgetItem.ItemType - UserType = ... # type: QTreeWidgetItem.ItemType - - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidgetItem'], after: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidgetItem'], strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidget'], after: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidget'], strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... - @typing.overload - def __init__(self, parent: typing.Optional['QTreeWidget'], type: int = ...) -> None: ... - @typing.overload - def __init__(self, strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... - @typing.overload - def __init__(self, type: int = ...) -> None: ... - @typing.overload - def __init__(self, other: 'QTreeWidgetItem') -> None: ... - - def __ge__(self, other: 'QTreeWidgetItem') -> bool: ... - def emitDataChanged(self) -> None: ... - def isDisabled(self) -> bool: ... - def setDisabled(self, disabled: bool) -> None: ... - def isFirstColumnSpanned(self) -> bool: ... - def setFirstColumnSpanned(self, aspan: bool) -> None: ... - def removeChild(self, child: typing.Optional['QTreeWidgetItem']) -> None: ... - def childIndicatorPolicy(self) -> 'QTreeWidgetItem.ChildIndicatorPolicy': ... - def setChildIndicatorPolicy(self, policy: 'QTreeWidgetItem.ChildIndicatorPolicy') -> None: ... - def isExpanded(self) -> bool: ... - def setExpanded(self, aexpand: bool) -> None: ... - def isHidden(self) -> bool: ... - def setHidden(self, ahide: bool) -> None: ... - def isSelected(self) -> bool: ... - def setSelected(self, aselect: bool) -> None: ... - def sortChildren(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def setForeground(self, column: int, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def foreground(self, column: int) -> QtGui.QBrush: ... - def setBackground(self, column: int, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]) -> None: ... - def background(self, column: int) -> QtGui.QBrush: ... - def takeChildren(self) -> typing.List['QTreeWidgetItem']: ... - def insertChildren(self, index: int, children: typing.Iterable['QTreeWidgetItem']) -> None: ... - def addChildren(self, children: typing.Iterable['QTreeWidgetItem']) -> None: ... - def setSizeHint(self, column: int, size: QtCore.QSize) -> None: ... - def sizeHint(self, column: int) -> QtCore.QSize: ... - def indexOfChild(self, achild: typing.Optional['QTreeWidgetItem']) -> int: ... - def setFont(self, column: int, afont: QtGui.QFont) -> None: ... - def setWhatsThis(self, column: int, awhatsThis: typing.Optional[str]) -> None: ... - def setToolTip(self, column: int, atoolTip: typing.Optional[str]) -> None: ... - def setStatusTip(self, column: int, astatusTip: typing.Optional[str]) -> None: ... - def setIcon(self, column: int, aicon: QtGui.QIcon) -> None: ... - def setText(self, column: int, atext: typing.Optional[str]) -> None: ... - def setFlags(self, aflags: QtCore.Qt.ItemFlag) -> None: ... - def type(self) -> int: ... - def takeChild(self, index: int) -> typing.Optional['QTreeWidgetItem']: ... - def insertChild(self, index: int, child: typing.Optional['QTreeWidgetItem']) -> None: ... - def addChild(self, child: typing.Optional['QTreeWidgetItem']) -> None: ... - def columnCount(self) -> int: ... - def childCount(self) -> int: ... - def child(self, index: int) -> typing.Optional['QTreeWidgetItem']: ... - def parent(self) -> typing.Optional['QTreeWidgetItem']: ... - def write(self, out: QtCore.QDataStream) -> None: ... - def read(self, in_: QtCore.QDataStream) -> None: ... - def __lt__(self, other: 'QTreeWidgetItem') -> bool: ... - def setData(self, column: int, role: int, value: typing.Any) -> None: ... - def data(self, column: int, role: int) -> typing.Any: ... - def setCheckState(self, column: int, state: QtCore.Qt.CheckState) -> None: ... - def checkState(self, column: int) -> QtCore.Qt.CheckState: ... - @typing.overload - def setTextAlignment(self, column: int, alignment: QtCore.Qt.AlignmentFlag) -> None: ... - @typing.overload - def setTextAlignment(self, column: int, alignment: int) -> None: ... - def textAlignment(self, column: int) -> int: ... - def font(self, column: int) -> QtGui.QFont: ... - def whatsThis(self, column: int) -> str: ... - def toolTip(self, column: int) -> str: ... - def statusTip(self, column: int) -> str: ... - def icon(self, column: int) -> QtGui.QIcon: ... - def text(self, column: int) -> str: ... - def flags(self) -> QtCore.Qt.ItemFlag: ... - def treeWidget(self) -> typing.Optional['QTreeWidget']: ... - def clone(self) -> typing.Optional['QTreeWidgetItem']: ... - - -class QTreeWidget(QTreeView): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def isPersistentEditorOpen(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> bool: ... - def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... - def removeItemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int) -> None: ... - def itemBelow(self, item: typing.Optional[QTreeWidgetItem]) -> typing.Optional[QTreeWidgetItem]: ... - def itemAbove(self, item: typing.Optional[QTreeWidgetItem]) -> typing.Optional[QTreeWidgetItem]: ... - def setHeaderLabel(self, alabel: typing.Optional[str]) -> None: ... - def invisibleRootItem(self) -> typing.Optional[QTreeWidgetItem]: ... - def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... - def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... - def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QTreeWidgetItem]: ... - def indexFromItem(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> QtCore.QModelIndex: ... - def supportedDropActions(self) -> QtCore.Qt.DropAction: ... - def dropMimeData(self, parent: typing.Optional[QTreeWidgetItem], index: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... - def mimeData(self, items: typing.Iterable[QTreeWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... - def mimeTypes(self) -> typing.List[str]: ... - itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] - currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemCollapsed: typing.ClassVar[QtCore.pyqtSignal] - itemExpanded: typing.ClassVar[QtCore.pyqtSignal] - itemChanged: typing.ClassVar[QtCore.pyqtSignal] - itemEntered: typing.ClassVar[QtCore.pyqtSignal] - itemActivated: typing.ClassVar[QtCore.pyqtSignal] - itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] - itemClicked: typing.ClassVar[QtCore.pyqtSignal] - itemPressed: typing.ClassVar[QtCore.pyqtSignal] - def clear(self) -> None: ... - def collapseItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... - def expandItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... - def scrollToItem(self, item: typing.Optional[QTreeWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... - def findItems(self, text: typing.Optional[str], flags: QtCore.Qt.MatchFlag, column: int = ...) -> typing.List[QTreeWidgetItem]: ... - def selectedItems(self) -> typing.List[QTreeWidgetItem]: ... - def setItemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int, widget: typing.Optional[QWidget]) -> None: ... - def itemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int) -> typing.Optional[QWidget]: ... - def closePersistentEditor(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... - def openPersistentEditor(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... - def editItem(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... - def sortItems(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... - def sortColumn(self) -> int: ... - def visualItemRect(self, item: typing.Optional[QTreeWidgetItem]) -> QtCore.QRect: ... - @typing.overload - def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QTreeWidgetItem]: ... - @typing.overload - def itemAt(self, ax: int, ay: int) -> typing.Optional[QTreeWidgetItem]: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem], column: int) -> None: ... - @typing.overload - def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem], column: int, command: QtCore.QItemSelectionModel.SelectionFlag) -> None: ... - def currentColumn(self) -> int: ... - def currentItem(self) -> typing.Optional[QTreeWidgetItem]: ... - def setHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... - def setHeaderItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... - def headerItem(self) -> typing.Optional[QTreeWidgetItem]: ... - def addTopLevelItems(self, items: typing.Iterable[QTreeWidgetItem]) -> None: ... - def insertTopLevelItems(self, index: int, items: typing.Iterable[QTreeWidgetItem]) -> None: ... - def indexOfTopLevelItem(self, item: typing.Optional[QTreeWidgetItem]) -> int: ... - def takeTopLevelItem(self, index: int) -> typing.Optional[QTreeWidgetItem]: ... - def addTopLevelItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... - def insertTopLevelItem(self, index: int, item: typing.Optional[QTreeWidgetItem]) -> None: ... - def topLevelItemCount(self) -> int: ... - def topLevelItem(self, index: int) -> typing.Optional[QTreeWidgetItem]: ... - def setColumnCount(self, columns: int) -> None: ... - def columnCount(self) -> int: ... - - -class QTreeWidgetItemIterator(PyQt6.sip.simplewrapper): - - class IteratorFlag(enum.Flag): - All = ... # type: QTreeWidgetItemIterator.IteratorFlag - Hidden = ... # type: QTreeWidgetItemIterator.IteratorFlag - NotHidden = ... # type: QTreeWidgetItemIterator.IteratorFlag - Selected = ... # type: QTreeWidgetItemIterator.IteratorFlag - Unselected = ... # type: QTreeWidgetItemIterator.IteratorFlag - Selectable = ... # type: QTreeWidgetItemIterator.IteratorFlag - NotSelectable = ... # type: QTreeWidgetItemIterator.IteratorFlag - DragEnabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - DragDisabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - DropEnabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - DropDisabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - HasChildren = ... # type: QTreeWidgetItemIterator.IteratorFlag - NoChildren = ... # type: QTreeWidgetItemIterator.IteratorFlag - Checked = ... # type: QTreeWidgetItemIterator.IteratorFlag - NotChecked = ... # type: QTreeWidgetItemIterator.IteratorFlag - Enabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - Disabled = ... # type: QTreeWidgetItemIterator.IteratorFlag - Editable = ... # type: QTreeWidgetItemIterator.IteratorFlag - NotEditable = ... # type: QTreeWidgetItemIterator.IteratorFlag - UserFlag = ... # type: QTreeWidgetItemIterator.IteratorFlag - - @typing.overload - def __init__(self, item: typing.Optional[QTreeWidgetItem], flags: 'QTreeWidgetItemIterator.IteratorFlag' = ...) -> None: ... - @typing.overload - def __init__(self, widget: typing.Optional[QTreeWidget], flags: 'QTreeWidgetItemIterator.IteratorFlag' = ...) -> None: ... - @typing.overload - def __init__(self, it: 'QTreeWidgetItemIterator') -> None: ... - - def __isub__(self, n: int) -> 'QTreeWidgetItemIterator': ... - def __iadd__(self, n: int) -> 'QTreeWidgetItemIterator': ... - def value(self) -> typing.Optional[QTreeWidgetItem]: ... - - -class QUndoView(QListView): - - @typing.overload - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, stack: typing.Optional[QtGui.QUndoStack], parent: typing.Optional[QWidget] = ...) -> None: ... - @typing.overload - def __init__(self, group: typing.Optional[QtGui.QUndoGroup], parent: typing.Optional[QWidget] = ...) -> None: ... - - def setGroup(self, group: typing.Optional[QtGui.QUndoGroup]) -> None: ... - def setStack(self, stack: typing.Optional[QtGui.QUndoStack]) -> None: ... - def cleanIcon(self) -> QtGui.QIcon: ... - def setCleanIcon(self, icon: QtGui.QIcon) -> None: ... - def emptyLabel(self) -> str: ... - def setEmptyLabel(self, label: typing.Optional[str]) -> None: ... - def group(self) -> typing.Optional[QtGui.QUndoGroup]: ... - def stack(self) -> typing.Optional[QtGui.QUndoStack]: ... - - -class QWhatsThis(PyQt6.sip.simplewrapper): - - def __init__(self, a0: 'QWhatsThis') -> None: ... - - @staticmethod - def createAction(parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional[QtGui.QAction]: ... - @staticmethod - def hideText() -> None: ... - @staticmethod - def showText(pos: QtCore.QPoint, text: typing.Optional[str], widget: typing.Optional[QWidget] = ...) -> None: ... - @staticmethod - def leaveWhatsThisMode() -> None: ... - @staticmethod - def inWhatsThisMode() -> bool: ... - @staticmethod - def enterWhatsThisMode() -> None: ... - - -class QWidgetAction(QtGui.QAction): - - def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... - - def createdWidgets(self) -> typing.List[QWidget]: ... - def deleteWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def createWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... - def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... - def releaseWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def requestWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... - def defaultWidget(self) -> typing.Optional[QWidget]: ... - def setDefaultWidget(self, w: typing.Optional[QWidget]) -> None: ... - - -class QWizard(QDialog): - - class WizardOption(enum.Flag): - IndependentPages = ... # type: QWizard.WizardOption - IgnoreSubTitles = ... # type: QWizard.WizardOption - ExtendedWatermarkPixmap = ... # type: QWizard.WizardOption - NoDefaultButton = ... # type: QWizard.WizardOption - NoBackButtonOnStartPage = ... # type: QWizard.WizardOption - NoBackButtonOnLastPage = ... # type: QWizard.WizardOption - DisabledBackButtonOnLastPage = ... # type: QWizard.WizardOption - HaveNextButtonOnLastPage = ... # type: QWizard.WizardOption - HaveFinishButtonOnEarlyPages = ... # type: QWizard.WizardOption - NoCancelButton = ... # type: QWizard.WizardOption - CancelButtonOnLeft = ... # type: QWizard.WizardOption - HaveHelpButton = ... # type: QWizard.WizardOption - HelpButtonOnRight = ... # type: QWizard.WizardOption - HaveCustomButton1 = ... # type: QWizard.WizardOption - HaveCustomButton2 = ... # type: QWizard.WizardOption - HaveCustomButton3 = ... # type: QWizard.WizardOption - NoCancelButtonOnLastPage = ... # type: QWizard.WizardOption - - class WizardStyle(enum.Enum): - ClassicStyle = ... # type: QWizard.WizardStyle - ModernStyle = ... # type: QWizard.WizardStyle - MacStyle = ... # type: QWizard.WizardStyle - AeroStyle = ... # type: QWizard.WizardStyle - - class WizardPixmap(enum.Enum): - WatermarkPixmap = ... # type: QWizard.WizardPixmap - LogoPixmap = ... # type: QWizard.WizardPixmap - BannerPixmap = ... # type: QWizard.WizardPixmap - BackgroundPixmap = ... # type: QWizard.WizardPixmap - - class WizardButton(enum.Enum): - BackButton = ... # type: QWizard.WizardButton - NextButton = ... # type: QWizard.WizardButton - CommitButton = ... # type: QWizard.WizardButton - FinishButton = ... # type: QWizard.WizardButton - CancelButton = ... # type: QWizard.WizardButton - HelpButton = ... # type: QWizard.WizardButton - CustomButton1 = ... # type: QWizard.WizardButton - CustomButton2 = ... # type: QWizard.WizardButton - CustomButton3 = ... # type: QWizard.WizardButton - Stretch = ... # type: QWizard.WizardButton - - def __init__(self, parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ... - - def setCurrentId(self, id: int) -> None: ... - pageRemoved: typing.ClassVar[QtCore.pyqtSignal] - pageAdded: typing.ClassVar[QtCore.pyqtSignal] - def sideWidget(self) -> typing.Optional[QWidget]: ... - def setSideWidget(self, widget: typing.Optional[QWidget]) -> None: ... - def pageIds(self) -> typing.List[int]: ... - def removePage(self, id: int) -> None: ... - def cleanupPage(self, id: int) -> None: ... - def initializePage(self, id: int) -> None: ... - def done(self, result: int) -> None: ... - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... - def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... - def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... - def restart(self) -> None: ... - def next(self) -> None: ... - def back(self) -> None: ... - customButtonClicked: typing.ClassVar[QtCore.pyqtSignal] - helpRequested: typing.ClassVar[QtCore.pyqtSignal] - currentIdChanged: typing.ClassVar[QtCore.pyqtSignal] - def sizeHint(self) -> QtCore.QSize: ... - def setVisible(self, visible: bool) -> None: ... - def setDefaultProperty(self, className: typing.Optional[str], property: typing.Optional[str], changedSignal: PYQT_SIGNAL) -> None: ... - def pixmap(self, which: 'QWizard.WizardPixmap') -> QtGui.QPixmap: ... - def setPixmap(self, which: 'QWizard.WizardPixmap', pixmap: QtGui.QPixmap) -> None: ... - def subTitleFormat(self) -> QtCore.Qt.TextFormat: ... - def setSubTitleFormat(self, format: QtCore.Qt.TextFormat) -> None: ... - def titleFormat(self) -> QtCore.Qt.TextFormat: ... - def setTitleFormat(self, format: QtCore.Qt.TextFormat) -> None: ... - def button(self, which: 'QWizard.WizardButton') -> typing.Optional[QAbstractButton]: ... - def setButton(self, which: 'QWizard.WizardButton', button: typing.Optional[QAbstractButton]) -> None: ... - def setButtonLayout(self, layout: typing.Iterable['QWizard.WizardButton']) -> None: ... - def buttonText(self, which: 'QWizard.WizardButton') -> str: ... - def setButtonText(self, which: 'QWizard.WizardButton', text: typing.Optional[str]) -> None: ... - def options(self) -> 'QWizard.WizardOption': ... - def setOptions(self, options: 'QWizard.WizardOption') -> None: ... - def testOption(self, option: 'QWizard.WizardOption') -> bool: ... - def setOption(self, option: 'QWizard.WizardOption', on: bool = ...) -> None: ... - def wizardStyle(self) -> 'QWizard.WizardStyle': ... - def setWizardStyle(self, style: 'QWizard.WizardStyle') -> None: ... - def field(self, name: typing.Optional[str]) -> typing.Any: ... - def setField(self, name: typing.Optional[str], value: typing.Any) -> None: ... - def nextId(self) -> int: ... - def validateCurrentPage(self) -> bool: ... - def currentId(self) -> int: ... - def currentPage(self) -> typing.Optional['QWizardPage']: ... - def startId(self) -> int: ... - def setStartId(self, id: int) -> None: ... - def visitedIds(self) -> typing.List[int]: ... - def hasVisitedPage(self, id: int) -> bool: ... - def page(self, id: int) -> typing.Optional['QWizardPage']: ... - def setPage(self, id: int, page: typing.Optional['QWizardPage']) -> None: ... - def addPage(self, page: typing.Optional['QWizardPage']) -> int: ... - - -class QWizardPage(QWidget): - - def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... - - def wizard(self) -> typing.Optional[QWizard]: ... - def registerField(self, name: typing.Optional[str], widget: typing.Optional[QWidget], property: typing.Optional[str] = ..., changedSignal: PYQT_SIGNAL = ...) -> None: ... - def field(self, name: typing.Optional[str]) -> typing.Any: ... - def setField(self, name: typing.Optional[str], value: typing.Any) -> None: ... - completeChanged: typing.ClassVar[QtCore.pyqtSignal] - def nextId(self) -> int: ... - def isComplete(self) -> bool: ... - def validatePage(self) -> bool: ... - def cleanupPage(self) -> None: ... - def initializePage(self) -> None: ... - def buttonText(self, which: QWizard.WizardButton) -> str: ... - def setButtonText(self, which: QWizard.WizardButton, text: typing.Optional[str]) -> None: ... - def isCommitPage(self) -> bool: ... - def setCommitPage(self, commitPage: bool) -> None: ... - def isFinalPage(self) -> bool: ... - def setFinalPage(self, finalPage: bool) -> None: ... - def pixmap(self, which: QWizard.WizardPixmap) -> QtGui.QPixmap: ... - def setPixmap(self, which: QWizard.WizardPixmap, pixmap: QtGui.QPixmap) -> None: ... - def subTitle(self) -> str: ... - def setSubTitle(self, subTitle: typing.Optional[str]) -> None: ... - def title(self) -> str: ... - def setTitle(self, title: typing.Optional[str]) -> None: ... - - -QWIDGETSIZE_MAX = ... # type: int - - -@typing.overload -def qDrawPlainRoundedRect(painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, rx: float, ry: float, lineColor: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawPlainRoundedRect(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, rx: float, ry: float, a7: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -def qDrawBorderPixmap(painter: typing.Optional[QtGui.QPainter], target: QtCore.QRect, margins: QtCore.QMargins, pixmap: QtGui.QPixmap) -> None: ... -@typing.overload -def qDrawPlainRect(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, a5: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawPlainRect(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, a2: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawWinPanel(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawWinPanel(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawWinButton(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawWinButton(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawShadePanel(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawShadePanel(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawShadeRect(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawShadeRect(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, int], QtGui.QGradient]] = ...) -> None: ... -@typing.overload -def qDrawShadeLine(p: typing.Optional[QtGui.QPainter], x1: int, y1: int, x2: int, y2: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ...) -> None: ... -@typing.overload -def qDrawShadeLine(p: typing.Optional[QtGui.QPainter], p1: QtCore.QPoint, p2: QtCore.QPoint, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ...) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtXml.abi3.so b/myenv/lib/python3.12/site-packages/PyQt6/QtXml.abi3.so deleted file mode 100644 index 4fdd812..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/QtXml.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/QtXml.pyi b/myenv/lib/python3.12/site-packages/PyQt6/QtXml.pyi deleted file mode 100644 index b726127..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/QtXml.pyi +++ /dev/null @@ -1,427 +0,0 @@ -# The PEP 484 type hints stub file for the QtXml module. -# -# Generated by SIP 6.8.6 -# -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import enum -import typing - -import PyQt6.sip - -from PyQt6 import QtCore - -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] - - -class QDomImplementation(PyQt6.sip.simplewrapper): - - class InvalidDataPolicy(enum.Enum): - AcceptInvalidChars = ... # type: QDomImplementation.InvalidDataPolicy - DropInvalidChars = ... # type: QDomImplementation.InvalidDataPolicy - ReturnNullNode = ... # type: QDomImplementation.InvalidDataPolicy - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDomImplementation') -> None: ... - - def isNull(self) -> bool: ... - @staticmethod - def setInvalidDataPolicy(policy: 'QDomImplementation.InvalidDataPolicy') -> None: ... - @staticmethod - def invalidDataPolicy() -> 'QDomImplementation.InvalidDataPolicy': ... - def createDocument(self, nsURI: typing.Optional[str], qName: typing.Optional[str], doctype: 'QDomDocumentType') -> 'QDomDocument': ... - def createDocumentType(self, qName: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> 'QDomDocumentType': ... - def hasFeature(self, feature: typing.Optional[str], version: typing.Optional[str]) -> bool: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QDomNode(PyQt6.sip.simplewrapper): - - class EncodingPolicy(enum.Enum): - EncodingFromDocument = ... # type: QDomNode.EncodingPolicy - EncodingFromTextStream = ... # type: QDomNode.EncodingPolicy - - class NodeType(enum.Enum): - ElementNode = ... # type: QDomNode.NodeType - AttributeNode = ... # type: QDomNode.NodeType - TextNode = ... # type: QDomNode.NodeType - CDATASectionNode = ... # type: QDomNode.NodeType - EntityReferenceNode = ... # type: QDomNode.NodeType - EntityNode = ... # type: QDomNode.NodeType - ProcessingInstructionNode = ... # type: QDomNode.NodeType - CommentNode = ... # type: QDomNode.NodeType - DocumentNode = ... # type: QDomNode.NodeType - DocumentTypeNode = ... # type: QDomNode.NodeType - DocumentFragmentNode = ... # type: QDomNode.NodeType - NotationNode = ... # type: QDomNode.NodeType - BaseNode = ... # type: QDomNode.NodeType - CharacterDataNode = ... # type: QDomNode.NodeType - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDomNode') -> None: ... - - def columnNumber(self) -> int: ... - def lineNumber(self) -> int: ... - def nextSiblingElement(self, taName: typing.Optional[str] = ..., namespaceURI: typing.Optional[str] = ...) -> 'QDomElement': ... - def previousSiblingElement(self, tagName: typing.Optional[str] = ..., namespaceURI: typing.Optional[str] = ...) -> 'QDomElement': ... - def lastChildElement(self, tagName: typing.Optional[str] = ..., namespaceURI: typing.Optional[str] = ...) -> 'QDomElement': ... - def firstChildElement(self, tagName: typing.Optional[str] = ..., namespaceURI: typing.Optional[str] = ...) -> 'QDomElement': ... - def save(self, a0: QtCore.QTextStream, a1: int, a2: 'QDomNode.EncodingPolicy' = ...) -> None: ... - def toComment(self) -> 'QDomComment': ... - def toCharacterData(self) -> 'QDomCharacterData': ... - def toProcessingInstruction(self) -> 'QDomProcessingInstruction': ... - def toNotation(self) -> 'QDomNotation': ... - def toEntity(self) -> 'QDomEntity': ... - def toText(self) -> 'QDomText': ... - def toEntityReference(self) -> 'QDomEntityReference': ... - def toElement(self) -> 'QDomElement': ... - def toDocumentType(self) -> 'QDomDocumentType': ... - def toDocument(self) -> 'QDomDocument': ... - def toDocumentFragment(self) -> 'QDomDocumentFragment': ... - def toCDATASection(self) -> 'QDomCDATASection': ... - def toAttr(self) -> 'QDomAttr': ... - def clear(self) -> None: ... - def isNull(self) -> bool: ... - def namedItem(self, name: typing.Optional[str]) -> 'QDomNode': ... - def isComment(self) -> bool: ... - def isCharacterData(self) -> bool: ... - def isProcessingInstruction(self) -> bool: ... - def isNotation(self) -> bool: ... - def isEntity(self) -> bool: ... - def isText(self) -> bool: ... - def isEntityReference(self) -> bool: ... - def isElement(self) -> bool: ... - def isDocumentType(self) -> bool: ... - def isDocument(self) -> bool: ... - def isDocumentFragment(self) -> bool: ... - def isCDATASection(self) -> bool: ... - def isAttr(self) -> bool: ... - def setPrefix(self, pre: typing.Optional[str]) -> None: ... - def prefix(self) -> str: ... - def setNodeValue(self, a0: typing.Optional[str]) -> None: ... - def nodeValue(self) -> str: ... - def hasAttributes(self) -> bool: ... - def localName(self) -> str: ... - def namespaceURI(self) -> str: ... - def ownerDocument(self) -> 'QDomDocument': ... - def attributes(self) -> 'QDomNamedNodeMap': ... - def nextSibling(self) -> 'QDomNode': ... - def previousSibling(self) -> 'QDomNode': ... - def lastChild(self) -> 'QDomNode': ... - def firstChild(self) -> 'QDomNode': ... - def childNodes(self) -> 'QDomNodeList': ... - def parentNode(self) -> 'QDomNode': ... - def nodeType(self) -> 'QDomNode.NodeType': ... - def nodeName(self) -> str: ... - def isSupported(self, feature: typing.Optional[str], version: typing.Optional[str]) -> bool: ... - def normalize(self) -> None: ... - def cloneNode(self, deep: bool = ...) -> 'QDomNode': ... - def hasChildNodes(self) -> bool: ... - def appendChild(self, newChild: 'QDomNode') -> 'QDomNode': ... - def removeChild(self, oldChild: 'QDomNode') -> 'QDomNode': ... - def replaceChild(self, newChild: 'QDomNode', oldChild: 'QDomNode') -> 'QDomNode': ... - def insertAfter(self, newChild: 'QDomNode', refChild: 'QDomNode') -> 'QDomNode': ... - def insertBefore(self, newChild: 'QDomNode', refChild: 'QDomNode') -> 'QDomNode': ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QDomNodeList(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDomNodeList') -> None: ... - - def isEmpty(self) -> bool: ... - def size(self) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def length(self) -> int: ... - def at(self, index: int) -> QDomNode: ... - def item(self, index: int) -> QDomNode: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QDomDocumentType(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomDocumentType') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def internalSubset(self) -> str: ... - def systemId(self) -> str: ... - def publicId(self) -> str: ... - def notations(self) -> 'QDomNamedNodeMap': ... - def entities(self) -> 'QDomNamedNodeMap': ... - def name(self) -> str: ... - - -class QDomDocument(QDomNode): - - class ParseOption(enum.Enum): - Default = ... # type: QDomDocument.ParseOption - UseNamespaceProcessing = ... # type: QDomDocument.ParseOption - PreserveSpacingOnlyNodes = ... # type: QDomDocument.ParseOption - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def __init__(self, doctype: QDomDocumentType) -> None: ... - @typing.overload - def __init__(self, x: 'QDomDocument') -> None: ... - - def toByteArray(self, indent: int = ...) -> QtCore.QByteArray: ... - def toString(self, indent: int = ...) -> str: ... - @typing.overload - def setContent(self, reader: typing.Optional[QtCore.QXmlStreamReader], options: 'QDomDocument.ParseOption' = ...) -> typing.Tuple[bool, str, int, int]: ... - @typing.overload - def setContent(self, device: typing.Optional[QtCore.QIODevice], options: 'QDomDocument.ParseOption' = ...) -> typing.Tuple[bool, str, int, int]: ... - @typing.overload - def setContent(self, data: typing.Union[typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], typing.Optional[str]], options: 'QDomDocument.ParseOption' = ...) -> typing.Tuple[bool, str, int, int]: ... - @typing.overload - def setContent(self, text: typing.Union[QtCore.QByteArray, bytes, bytearray, memoryview], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def setContent(self, text: typing.Optional[str], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def setContent(self, dev: typing.Optional[QtCore.QIODevice], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... - @typing.overload - def setContent(self, reader: typing.Optional[QtCore.QXmlStreamReader], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... - def nodeType(self) -> QDomNode.NodeType: ... - def documentElement(self) -> 'QDomElement': ... - def implementation(self) -> QDomImplementation: ... - def doctype(self) -> QDomDocumentType: ... - def elementById(self, elementId: typing.Optional[str]) -> 'QDomElement': ... - def elementsByTagNameNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNodeList: ... - def createAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str]) -> 'QDomAttr': ... - def createElementNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str]) -> 'QDomElement': ... - def importNode(self, importedNode: QDomNode, deep: bool) -> QDomNode: ... - def elementsByTagName(self, tagname: typing.Optional[str]) -> QDomNodeList: ... - def createEntityReference(self, name: typing.Optional[str]) -> 'QDomEntityReference': ... - def createAttribute(self, name: typing.Optional[str]) -> 'QDomAttr': ... - def createProcessingInstruction(self, target: typing.Optional[str], data: typing.Optional[str]) -> 'QDomProcessingInstruction': ... - def createCDATASection(self, data: typing.Optional[str]) -> 'QDomCDATASection': ... - def createComment(self, data: typing.Optional[str]) -> 'QDomComment': ... - def createTextNode(self, data: typing.Optional[str]) -> 'QDomText': ... - def createDocumentFragment(self) -> 'QDomDocumentFragment': ... - def createElement(self, tagName: typing.Optional[str]) -> 'QDomElement': ... - - -class QDomNamedNodeMap(PyQt6.sip.simplewrapper): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, a0: 'QDomNamedNodeMap') -> None: ... - - def contains(self, name: typing.Optional[str]) -> bool: ... - def isEmpty(self) -> bool: ... - def size(self) -> int: ... - def __len__(self) -> int: ... - def count(self) -> int: ... - def length(self) -> int: ... - def removeNamedItemNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNode: ... - def setNamedItemNS(self, newNode: QDomNode) -> QDomNode: ... - def namedItemNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNode: ... - def item(self, index: int) -> QDomNode: ... - def removeNamedItem(self, name: typing.Optional[str]) -> QDomNode: ... - def setNamedItem(self, newNode: QDomNode) -> QDomNode: ... - def namedItem(self, name: typing.Optional[str]) -> QDomNode: ... - def __ne__(self, other: object): ... - def __eq__(self, other: object): ... - - -class QDomDocumentFragment(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomDocumentFragment') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - - -class QDomCharacterData(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomCharacterData') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def setData(self, a0: typing.Optional[str]) -> None: ... - def data(self) -> str: ... - def length(self) -> int: ... - def replaceData(self, offset: int, count: int, arg: typing.Optional[str]) -> None: ... - def deleteData(self, offset: int, count: int) -> None: ... - def insertData(self, offset: int, arg: typing.Optional[str]) -> None: ... - def appendData(self, arg: typing.Optional[str]) -> None: ... - def substringData(self, offset: int, count: int) -> str: ... - - -class QDomAttr(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomAttr') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def setValue(self, a0: typing.Optional[str]) -> None: ... - def value(self) -> str: ... - def ownerElement(self) -> 'QDomElement': ... - def specified(self) -> bool: ... - def name(self) -> str: ... - - -class QDomElement(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomElement') -> None: ... - - def text(self) -> str: ... - def nodeType(self) -> QDomNode.NodeType: ... - def attributes(self) -> QDomNamedNodeMap: ... - def setTagName(self, name: typing.Optional[str]) -> None: ... - def tagName(self) -> str: ... - def hasAttributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> bool: ... - def elementsByTagNameNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNodeList: ... - def setAttributeNodeNS(self, newAttr: QDomAttr) -> QDomAttr: ... - def attributeNodeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomAttr: ... - def removeAttributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> None: ... - @typing.overload - def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: float) -> None: ... - @typing.overload - def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: int) -> None: ... - def attributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... - def hasAttribute(self, name: typing.Optional[str]) -> bool: ... - def elementsByTagName(self, tagname: typing.Optional[str]) -> QDomNodeList: ... - def removeAttributeNode(self, oldAttr: QDomAttr) -> QDomAttr: ... - def setAttributeNode(self, newAttr: QDomAttr) -> QDomAttr: ... - def attributeNode(self, name: typing.Optional[str]) -> QDomAttr: ... - def removeAttribute(self, name: typing.Optional[str]) -> None: ... - @typing.overload - def setAttribute(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... - @typing.overload - def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... - @typing.overload - def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... - @typing.overload - def setAttribute(self, name: typing.Optional[str], value: float) -> None: ... - @typing.overload - def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... - def attribute(self, name: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... - - -class QDomText(QDomCharacterData): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomText') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def splitText(self, offset: int) -> 'QDomText': ... - - -class QDomComment(QDomCharacterData): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomComment') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - - -class QDomCDATASection(QDomText): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomCDATASection') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - - -class QDomNotation(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomNotation') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def systemId(self) -> str: ... - def publicId(self) -> str: ... - - -class QDomEntity(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomEntity') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def notationName(self) -> str: ... - def systemId(self) -> str: ... - def publicId(self) -> str: ... - - -class QDomEntityReference(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomEntityReference') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - - -class QDomProcessingInstruction(QDomNode): - - @typing.overload - def __init__(self) -> None: ... - @typing.overload - def __init__(self, x: 'QDomProcessingInstruction') -> None: ... - - def nodeType(self) -> QDomNode.NodeType: ... - def setData(self, d: typing.Optional[str]) -> None: ... - def data(self) -> str: ... - def target(self) -> str: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/__init__.py b/myenv/lib/python3.12/site-packages/PyQt6/__init__.py deleted file mode 100644 index df4bfb8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -# Support PyQt6 sub-packages that have been created by setuptools. -__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 924f074..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetooth.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetooth.toml deleted file mode 100644 index c80d30d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetooth.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtBluetooth. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetoothmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetoothmod.sip deleted file mode 100644 index 052c2b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/QtBluetoothmod.sip +++ /dev/null @@ -1,71 +0,0 @@ -// QtBluetoothmod.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtBluetooth, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qbluetooth.sip -%Include qbluetoothaddress.sip -%Include qbluetoothdevicediscoveryagent.sip -%Include qbluetoothdeviceinfo.sip -%Include qbluetoothhostinfo.sip -%Include qbluetoothlocaldevice.sip -%Include qbluetoothserver.sip -%Include qbluetoothservicediscoveryagent.sip -%Include qbluetoothserviceinfo.sip -%Include qbluetoothsocket.sip -%Include qbluetoothuuid.sip -%Include qlowenergyadvertisingdata.sip -%Include qlowenergyadvertisingparameters.sip -%Include qlowenergycharacteristic.sip -%Include qlowenergycharacteristicdata.sip -%Include qlowenergyconnectionparameters.sip -%Include qlowenergycontroller.sip -%Include qlowenergydescriptor.sip -%Include qlowenergydescriptordata.sip -%Include qlowenergyservice.sip -%Include qlowenergyservicedata.sip -%Include qpybluetooth_quint128.sip -%Include qpybluetooth_qlist.sip -%Include qpybluetooth_qmultihash.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetooth.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetooth.sip deleted file mode 100644 index b61e65e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetooth.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qbluetooth.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -namespace QBluetooth -{ -%TypeHeaderCode -#include -%End - - enum class Security /BaseType=Flag/ - { - NoSecurity, - Authorization, - Authentication, - Encryption, - Secure, - }; - - typedef QFlags SecurityFlags; - - enum class AttAccessConstraint /BaseType=Flag/ - { - AttAuthorizationRequired, - AttAuthenticationRequired, - AttEncryptionRequired, - }; - - typedef QFlags AttAccessConstraints; -}; - -%End -%If (Qt_6_2_0 -) -typedef quint16 QLowEnergyHandle; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothaddress.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothaddress.sip deleted file mode 100644 index f072540..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothaddress.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qbluetoothaddress.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothAddress -{ -%TypeHeaderCode -#include -%End - -public: - QBluetoothAddress(); - explicit QBluetoothAddress(quint64 address); - explicit QBluetoothAddress(const QString &address); - QBluetoothAddress(const QBluetoothAddress &other); - ~QBluetoothAddress(); - bool isNull() const; - void clear(); - quint64 toUInt64() const; - QString toString() const; -%If (Qt_6_6_0 -) - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator<(const QBluetoothAddress &a, const QBluetoothAddress &b); -%End -%If (Qt_6_2_0 -) -bool operator==(const QBluetoothAddress &a, const QBluetoothAddress &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QBluetoothAddress &a, const QBluetoothAddress &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip deleted file mode 100644 index 55f3f59..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qbluetoothdevicediscoveryagent.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothDeviceDiscoveryAgent : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - InputOutputError, - PoweredOffError, - InvalidBluetoothAdapterError, - UnsupportedPlatformError, - UnsupportedDiscoveryMethod, - LocationServiceTurnedOffError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End - UnknownError, - }; - - explicit QBluetoothDeviceDiscoveryAgent(QObject *parent /TransferThis/ = 0); - QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0); - virtual ~QBluetoothDeviceDiscoveryAgent(); - bool isActive() const; - QBluetoothDeviceDiscoveryAgent::Error error() const; - QString errorString() const; - QList discoveredDevices() const; - -public slots: - void start(); - void start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods method); - void stop(); - -signals: - void deviceDiscovered(const QBluetoothDeviceInfo &info); - void finished(); - void errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error); - void canceled(); - void deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields); - -public: - enum DiscoveryMethod /BaseType=Flag/ - { - NoMethod, - ClassicMethod, - LowEnergyMethod, - }; - - typedef QFlags DiscoveryMethods; - void setLowEnergyDiscoveryTimeout(int msTimeout); - int lowEnergyDiscoveryTimeout() const; - static QBluetoothDeviceDiscoveryAgent::DiscoveryMethods supportedDiscoveryMethods(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdeviceinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdeviceinfo.sip deleted file mode 100644 index 22cb88e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothdeviceinfo.sip +++ /dev/null @@ -1,245 +0,0 @@ -// qbluetoothdeviceinfo.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothDeviceInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum MajorDeviceClass - { - MiscellaneousDevice, - ComputerDevice, - PhoneDevice, - NetworkDevice, - AudioVideoDevice, - PeripheralDevice, - ImagingDevice, - WearableDevice, - ToyDevice, - HealthDevice, - UncategorizedDevice, - }; - - enum MinorMiscellaneousClass - { - UncategorizedMiscellaneous, - }; - - enum MinorComputerClass - { - UncategorizedComputer, - DesktopComputer, - ServerComputer, - LaptopComputer, - HandheldClamShellComputer, - HandheldComputer, - WearableComputer, - }; - - enum MinorPhoneClass - { - UncategorizedPhone, - CellularPhone, - CordlessPhone, - SmartPhone, - WiredModemOrVoiceGatewayPhone, - CommonIsdnAccessPhone, - }; - - enum MinorNetworkClass - { - NetworkFullService, - NetworkLoadFactorOne, - NetworkLoadFactorTwo, - NetworkLoadFactorThree, - NetworkLoadFactorFour, - NetworkLoadFactorFive, - NetworkLoadFactorSix, - NetworkNoService, - }; - - enum MinorAudioVideoClass - { - UncategorizedAudioVideoDevice, - WearableHeadsetDevice, - HandsFreeDevice, - Microphone, - Loudspeaker, - Headphones, - PortableAudioDevice, - CarAudio, - SetTopBox, - HiFiAudioDevice, - Vcr, - VideoCamera, - Camcorder, - VideoMonitor, - VideoDisplayAndLoudspeaker, - VideoConferencing, - GamingDevice, - }; - - enum MinorPeripheralClass - { - UncategorizedPeripheral, - KeyboardPeripheral, - PointingDevicePeripheral, - KeyboardWithPointingDevicePeripheral, - JoystickPeripheral, - GamepadPeripheral, - RemoteControlPeripheral, - SensingDevicePeripheral, - DigitizerTabletPeripheral, - CardReaderPeripheral, - }; - - enum MinorImagingClass - { - UncategorizedImagingDevice, - ImageDisplay, - ImageCamera, - ImageScanner, - ImagePrinter, - }; - - enum MinorWearableClass - { - UncategorizedWearableDevice, - WearableWristWatch, - WearablePager, - WearableJacket, - WearableHelmet, - WearableGlasses, - }; - - enum MinorToyClass - { - UncategorizedToy, - ToyRobot, - ToyVehicle, - ToyDoll, - ToyController, - ToyGame, - }; - - enum MinorHealthClass - { - UncategorizedHealthDevice, - HealthBloodPressureMonitor, - HealthThermometer, - HealthWeightScale, - HealthGlucoseMeter, - HealthPulseOximeter, - HealthDataDisplay, - HealthStepCounter, - }; - - enum ServiceClass /BaseType=Flag/ - { - NoService, - PositioningService, - NetworkingService, - RenderingService, - CapturingService, - ObjectTransferService, - AudioService, - TelephonyService, - InformationService, - AllServices, - }; - - typedef QFlags ServiceClasses; - QBluetoothDeviceInfo(); - QBluetoothDeviceInfo(const QBluetoothAddress &address, const QString &name, quint32 classOfDevice); - QBluetoothDeviceInfo(const QBluetoothUuid &uuid, const QString &name, quint32 classOfDevice); - QBluetoothDeviceInfo(const QBluetoothDeviceInfo &other); - ~QBluetoothDeviceInfo(); - bool isValid() const; - bool isCached() const; - void setCached(bool cached); - QBluetoothAddress address() const; - QString name() const; - QBluetoothDeviceInfo::ServiceClasses serviceClasses() const; - QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass() const; - quint8 minorDeviceClass() const; - qint16 rssi() const; - void setRssi(qint16 signal); - void setServiceUuids(const QList &uuids); - QList serviceUuids() const; - - enum CoreConfiguration /BaseType=Flag/ - { - UnknownCoreConfiguration, - LowEnergyCoreConfiguration, - BaseRateCoreConfiguration, - BaseRateAndLowEnergyCoreConfiguration, - }; - - typedef QFlags CoreConfigurations; - void setCoreConfigurations(QBluetoothDeviceInfo::CoreConfigurations coreConfigs); - QBluetoothDeviceInfo::CoreConfigurations coreConfigurations() const; - void setDeviceUuid(const QBluetoothUuid &uuid); - QBluetoothUuid deviceUuid() const; - - enum class Field /BaseType=Flag/ - { - None, - RSSI, - ManufacturerData, -%If (Qt_6_3_0 -) - ServiceData, -%End - All, - }; - - typedef QFlags Fields; - QList manufacturerIds() const; - QMultiHash manufacturerData() const; - QByteArray manufacturerData(quint16 manufacturerId) const; - bool setManufacturerData(quint16 manufacturerId, const QByteArray &data); - void setName(const QString &name); -%If (Qt_6_3_0 -) - QList serviceIds() const; -%End -%If (Qt_6_3_0 -) - QMultiHash serviceData() const; -%End -%If (Qt_6_3_0 -) - QByteArray serviceData(const QBluetoothUuid &serviceId) const; -%End -%If (Qt_6_3_0 -) - bool setServiceData(const QBluetoothUuid &serviceId, const QByteArray &data); -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QBluetoothDeviceInfo &a, const QBluetoothDeviceInfo &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QBluetoothDeviceInfo &a, const QBluetoothDeviceInfo &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothhostinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothhostinfo.sip deleted file mode 100644 index c853594..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothhostinfo.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qbluetoothhostinfo.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothHostInfo -{ -%TypeHeaderCode -#include -%End - -public: - QBluetoothHostInfo(); - QBluetoothHostInfo(const QBluetoothHostInfo &other); - ~QBluetoothHostInfo(); - QBluetoothAddress address() const; - void setAddress(const QBluetoothAddress &address); - QString name() const; - void setName(const QString &name); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QBluetoothHostInfo &a, const QBluetoothHostInfo &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QBluetoothHostInfo &a, const QBluetoothHostInfo &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothlocaldevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothlocaldevice.sip deleted file mode 100644 index 5b46394..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothlocaldevice.sip +++ /dev/null @@ -1,79 +0,0 @@ -// qbluetoothlocaldevice.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothLocalDevice : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Pairing - { - Unpaired, - Paired, - AuthorizedPaired, - }; - - enum HostMode - { - HostPoweredOff, - HostConnectable, - HostDiscoverable, - HostDiscoverableLimitedInquiry, - }; - - enum Error - { - NoError, - PairingError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End - UnknownError, - }; - - explicit QBluetoothLocalDevice(QObject *parent /TransferThis/ = 0); - QBluetoothLocalDevice(const QBluetoothAddress &address, QObject *parent /TransferThis/ = 0); - virtual ~QBluetoothLocalDevice(); - bool isValid() const; - void requestPairing(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing); - QBluetoothLocalDevice::Pairing pairingStatus(const QBluetoothAddress &address) const; - void setHostMode(QBluetoothLocalDevice::HostMode mode); - QBluetoothLocalDevice::HostMode hostMode() const; - void powerOn(); - QString name() const; - QBluetoothAddress address() const; - static QList allDevices(); - QList connectedDevices() const; - -signals: - void hostModeStateChanged(QBluetoothLocalDevice::HostMode state); - void pairingFinished(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing); - void errorOccurred(QBluetoothLocalDevice::Error error); - void deviceConnected(const QBluetoothAddress &address); - void deviceDisconnected(const QBluetoothAddress &address); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserver.sip deleted file mode 100644 index e30259a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserver.sip +++ /dev/null @@ -1,101 +0,0 @@ -// qbluetoothserver.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothServer : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QBluetoothDeviceDiscoveryAgent, &sipType_QBluetoothDeviceDiscoveryAgent, -1, 1}, - {sipName_QBluetoothLocalDevice, &sipType_QBluetoothLocalDevice, -1, 2}, - {sipName_QBluetoothServer, &sipType_QBluetoothServer, -1, 3}, - {sipName_QBluetoothServiceDiscoveryAgent, &sipType_QBluetoothServiceDiscoveryAgent, -1, 4}, - {sipName_QBluetoothSocket, &sipType_QBluetoothSocket, -1, 5}, - {sipName_QLowEnergyController, &sipType_QLowEnergyController, -1, 6}, - {sipName_QLowEnergyService, &sipType_QLowEnergyService, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum Error - { - NoError, - UnknownError, - PoweredOffError, - InputOutputError, - ServiceAlreadyRegisteredError, - UnsupportedProtocolError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End - }; - - QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent /TransferThis/ = 0); - virtual ~QBluetoothServer(); - void close() /ReleaseGIL/; - bool listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0) /ReleaseGIL/; - QBluetoothServiceInfo listen(const QBluetoothUuid &uuid, const QString &serviceName = QString()) /ReleaseGIL/; - bool isListening() const; - void setMaxPendingConnections(int numConnections); - int maxPendingConnections() const; - bool hasPendingConnections() const; - QBluetoothSocket *nextPendingConnection() /Factory/; - QBluetoothAddress serverAddress() const; - quint16 serverPort() const; - void setSecurityFlags(QBluetooth::SecurityFlags security); - QBluetooth::SecurityFlags securityFlags() const; - QBluetoothServiceInfo::Protocol serverType() const; - QBluetoothServer::Error error() const; - -signals: - void newConnection(); - void errorOccurred(QBluetoothServer::Error error); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip deleted file mode 100644 index 36cbea6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qbluetoothservicediscoveryagent.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothServiceDiscoveryAgent : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - InputOutputError, - PoweredOffError, - InvalidBluetoothAdapterError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End - UnknownError, - }; - - enum DiscoveryMode - { - MinimalDiscovery, - FullDiscovery, - }; - - explicit QBluetoothServiceDiscoveryAgent(QObject *parent /TransferThis/ = 0); - QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0); - virtual ~QBluetoothServiceDiscoveryAgent(); - bool isActive() const; - QBluetoothServiceDiscoveryAgent::Error error() const; - QString errorString() const; - QList discoveredServices() const; - void setUuidFilter(const QList &uuids); - void setUuidFilter(const QBluetoothUuid &uuid); - QList uuidFilter() const; - bool setRemoteAddress(const QBluetoothAddress &address); - QBluetoothAddress remoteAddress() const; - -public slots: - void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = QBluetoothServiceDiscoveryAgent::MinimalDiscovery); - void stop(); - void clear(); - -signals: - void serviceDiscovered(const QBluetoothServiceInfo &info); - void finished(); - void canceled(); - void errorOccurred(QBluetoothServiceDiscoveryAgent::Error error); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserviceinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserviceinfo.sip deleted file mode 100644 index d0e7903..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothserviceinfo.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qbluetoothserviceinfo.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothServiceInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum AttributeId - { - ServiceRecordHandle, - ServiceClassIds, - ServiceRecordState, - ServiceId, - ProtocolDescriptorList, - BrowseGroupList, - LanguageBaseAttributeIdList, - ServiceInfoTimeToLive, - ServiceAvailability, - BluetoothProfileDescriptorList, - DocumentationUrl, - ClientExecutableUrl, - IconUrl, - AdditionalProtocolDescriptorList, - PrimaryLanguageBase, - ServiceName, - ServiceDescription, - ServiceProvider, - }; - - enum Protocol - { - UnknownProtocol, - L2capProtocol, - RfcommProtocol, - }; - - QBluetoothServiceInfo(); - QBluetoothServiceInfo(const QBluetoothServiceInfo &other); - ~QBluetoothServiceInfo(); - bool isValid() const; - bool isComplete() const; - void setDevice(const QBluetoothDeviceInfo &info); - QBluetoothDeviceInfo device() const; - QVariant attribute(quint16 attributeId) const; - QList attributes() const; - bool contains(quint16 attributeId) const; - void removeAttribute(quint16 attributeId); - QBluetoothServiceInfo::Protocol socketProtocol() const; - int protocolServiceMultiplexer() const; - int serverChannel() const; - QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol) const; - bool isRegistered() const; - bool registerService(const QBluetoothAddress &localAdapter = QBluetoothAddress()); - bool unregisterService(); - void setAttribute(quint16 attributeId, const QBluetoothUuid &value); - void setAttribute(quint16 attributeId, const QBluetoothServiceInfo::Sequence &value); - void setAttribute(quint16 attributeId, const QVariant &value); - void setServiceName(const QString &name); - QString serviceName() const; - void setServiceDescription(const QString &description); - QString serviceDescription() const; - void setServiceProvider(const QString &provider); - QString serviceProvider() const; - void setServiceAvailability(quint8 availability); - quint8 serviceAvailability() const; - void setServiceUuid(const QBluetoothUuid &uuid); - QBluetoothUuid serviceUuid() const; - QList serviceClassUuids() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothsocket.sip deleted file mode 100644 index df02772..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothsocket.sip +++ /dev/null @@ -1,140 +0,0 @@ -// qbluetoothsocket.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothSocket : public QIODevice -{ -%TypeHeaderCode -#include -%End - -public: - enum class SocketState - { - UnconnectedState, - ServiceLookupState, - ConnectingState, - ConnectedState, - BoundState, - ClosingState, - ListeningState, - }; - - enum class SocketError - { - NoSocketError, - UnknownSocketError, - RemoteHostClosedError, - HostNotFoundError, - ServiceNotFoundError, - NetworkError, - UnsupportedProtocolError, - OperationError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End - }; - - QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent /TransferThis/ = 0); - explicit QBluetoothSocket(QObject *parent /TransferThis/ = 0); - virtual ~QBluetoothSocket(); - void abort(); - virtual void close() /ReleaseGIL/; - virtual bool isSequential() const; - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - virtual bool canReadLine() const; - void connectToService(const QBluetoothAddress &address, QBluetoothUuid::ServiceClassUuid uuid, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void disconnectFromService() /ReleaseGIL/; - QString localName() const; - QBluetoothAddress localAddress() const; - quint16 localPort() const; - QString peerName() const; - QBluetoothAddress peerAddress() const; - quint16 peerPort() const; - bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState state = QBluetoothSocket::SocketState::ConnectedState, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - int socketDescriptor() const; - QBluetoothServiceInfo::Protocol socketType() const; - QBluetoothSocket::SocketState state() const; - QBluetoothSocket::SocketError error() const; - QString errorString() const; - -signals: - void connected(); - void disconnected(); - void errorOccurred(QBluetoothSocket::SocketError error); - void stateChanged(QBluetoothSocket::SocketState state); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QBluetoothSocket::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/; - void setSocketState(QBluetoothSocket::SocketState state); - void setSocketError(QBluetoothSocket::SocketError error); - void doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode); - -public: - void setPreferredSecurityFlags(QBluetooth::SecurityFlags flags); - QBluetooth::SecurityFlags preferredSecurityFlags() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothuuid.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothuuid.sip deleted file mode 100644 index d9f8cee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qbluetoothuuid.sip +++ /dev/null @@ -1,360 +0,0 @@ -// qbluetoothuuid.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QBluetoothUuid : public QUuid -{ -%TypeHeaderCode -#include -%End - -public: - enum class ProtocolUuid - { - Sdp, - Udp, - Rfcomm, - Tcp, - TcsBin, - TcsAt, - Att, - Obex, - Ip, - Ftp, - Http, - Wsp, - Bnep, - Upnp, - Hidp, - HardcopyControlChannel, - HardcopyDataChannel, - HardcopyNotification, - Avctp, - Avdtp, - Cmtp, - UdiCPlain, - McapControlChannel, - McapDataChannel, - L2cap, - }; - - enum class ServiceClassUuid - { - ServiceDiscoveryServer, - BrowseGroupDescriptor, - PublicBrowseGroup, - SerialPort, - LANAccessUsingPPP, - DialupNetworking, - IrMCSync, - ObexObjectPush, - OBEXFileTransfer, - IrMCSyncCommand, - Headset, - AudioSource, - AudioSink, - AV_RemoteControlTarget, - AdvancedAudioDistribution, - AV_RemoteControl, - AV_RemoteControlController, - HeadsetAG, - PANU, - NAP, - GN, - DirectPrinting, - ReferencePrinting, - BasicImage, - ImagingResponder, - ImagingAutomaticArchive, - ImagingReferenceObjects, - Handsfree, - HandsfreeAudioGateway, - DirectPrintingReferenceObjectsService, - ReflectedUI, - BasicPrinting, - PrintingStatus, - HumanInterfaceDeviceService, - HardcopyCableReplacement, - HCRPrint, - HCRScan, - SIMAccess, - PhonebookAccessPCE, - PhonebookAccessPSE, - PhonebookAccess, - HeadsetHS, - MessageAccessServer, - MessageNotificationServer, - MessageAccessProfile, - GNSS, - GNSSServer, - Display3D, - Glasses3D, - Synchronization3D, - MPSProfile, - MPSService, - PnPInformation, - GenericNetworking, - GenericFileTransfer, - GenericAudio, - GenericTelephony, - VideoSource, - VideoSink, - VideoDistribution, - HDP, - HDPSource, - HDPSink, - GenericAccess, - GenericAttribute, - ImmediateAlert, - LinkLoss, - TxPower, - CurrentTimeService, - ReferenceTimeUpdateService, - NextDSTChangeService, - Glucose, - HealthThermometer, - DeviceInformation, - HeartRate, - PhoneAlertStatusService, - BatteryService, - BloodPressure, - AlertNotificationService, - HumanInterfaceDevice, - ScanParameters, - RunningSpeedAndCadence, - CyclingSpeedAndCadence, - CyclingPower, - LocationAndNavigation, - EnvironmentalSensing, - BodyComposition, - UserData, - WeightScale, - BondManagement, - ContinuousGlucoseMonitoring, - }; - - enum class CharacteristicType - { - DeviceName, - Appearance, - PeripheralPrivacyFlag, - ReconnectionAddress, - PeripheralPreferredConnectionParameters, - ServiceChanged, - AlertLevel, - TxPowerLevel, - DateTime, - DayOfWeek, - DayDateTime, - ExactTime256, - DSTOffset, - TimeZone, - LocalTimeInformation, - TimeWithDST, - TimeAccuracy, - TimeSource, - ReferenceTimeInformation, - TimeUpdateControlPoint, - TimeUpdateState, - GlucoseMeasurement, - BatteryLevel, - TemperatureMeasurement, - TemperatureType, - IntermediateTemperature, - MeasurementInterval, - BootKeyboardInputReport, - SystemID, - ModelNumberString, - SerialNumberString, - FirmwareRevisionString, - HardwareRevisionString, - SoftwareRevisionString, - ManufacturerNameString, - IEEE1107320601RegulatoryCertificationDataList, - CurrentTime, - MagneticDeclination, - ScanRefresh, - BootKeyboardOutputReport, - BootMouseInputReport, - GlucoseMeasurementContext, - BloodPressureMeasurement, - IntermediateCuffPressure, - HeartRateMeasurement, - BodySensorLocation, - HeartRateControlPoint, - AlertStatus, - RingerControlPoint, - RingerSetting, - AlertCategoryIDBitMask, - AlertCategoryID, - AlertNotificationControlPoint, - UnreadAlertStatus, - NewAlert, - SupportedNewAlertCategory, - SupportedUnreadAlertCategory, - BloodPressureFeature, - HIDInformation, - ReportMap, - HIDControlPoint, - Report, - ProtocolMode, - ScanIntervalWindow, - PnPID, - GlucoseFeature, - RecordAccessControlPoint, - RSCMeasurement, - RSCFeature, - SCControlPoint, - CSCMeasurement, - CSCFeature, - SensorLocation, - CyclingPowerMeasurement, - CyclingPowerVector, - CyclingPowerFeature, - CyclingPowerControlPoint, - LocationAndSpeed, - Navigation, - PositionQuality, - LNFeature, - LNControlPoint, - Elevation, - Pressure, - Temperature, - Humidity, - TrueWindSpeed, - TrueWindDirection, - ApparentWindSpeed, - ApparentWindDirection, - GustFactor, - PollenConcentration, - UVIndex, - Irradiance, - Rainfall, - WindChill, - HeatIndex, - DewPoint, - DescriptorValueChanged, - AerobicHeartRateLowerLimit, - AerobicThreshold, - Age, - AnaerobicHeartRateLowerLimit, - AnaerobicHeartRateUpperLimit, - AnaerobicThreshold, - AerobicHeartRateUpperLimit, - DateOfBirth, - DateOfThresholdAssessment, - EmailAddress, - FatBurnHeartRateLowerLimit, - FatBurnHeartRateUpperLimit, - FirstName, - FiveZoneHeartRateLimits, - Gender, - HeartRateMax, - Height, - HipCircumference, - LastName, - MaximumRecommendedHeartRate, - RestingHeartRate, - SportTypeForAerobicAnaerobicThresholds, - ThreeZoneHeartRateLimits, - TwoZoneHeartRateLimits, - VO2Max, - WaistCircumference, - Weight, - DatabaseChangeIncrement, - UserIndex, - BodyCompositionFeature, - BodyCompositionMeasurement, - WeightMeasurement, - WeightScaleFeature, - UserControlPoint, - MagneticFluxDensity2D, - MagneticFluxDensity3D, - Language, - BarometricPressureTrend, - }; - - enum class DescriptorType - { - UnknownDescriptorType, - CharacteristicExtendedProperties, - CharacteristicUserDescription, - ClientCharacteristicConfiguration, - ServerCharacteristicConfiguration, - CharacteristicPresentationFormat, - CharacteristicAggregateFormat, - ValidRange, - ExternalReportReference, - ReportReference, - EnvironmentalSensingConfiguration, - EnvironmentalSensingMeasurement, - EnvironmentalSensingTriggerSetting, - }; - - QBluetoothUuid(); - QBluetoothUuid(QBluetoothUuid::ProtocolUuid uuid); - QBluetoothUuid(QBluetoothUuid::ServiceClassUuid uuid); - QBluetoothUuid(QBluetoothUuid::CharacteristicType uuid); - QBluetoothUuid(QBluetoothUuid::DescriptorType uuid); - explicit QBluetoothUuid(quint32 uuid); -%If (Qt_6_6_0 -) - QBluetoothUuid(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian); -%End -%If (- Qt_6_6_0) - explicit QBluetoothUuid(quint128 uuid); -%End - explicit QBluetoothUuid(const QString &uuid); - QBluetoothUuid(const QBluetoothUuid &uuid); - QBluetoothUuid(const QUuid &uuid); - ~QBluetoothUuid(); - int minimumSize() const; - quint16 toUInt16(bool *ok = 0) const; - quint32 toUInt32(bool *ok = 0) const; - quint128 toUInt128() const; - static QString serviceClassToString(QBluetoothUuid::ServiceClassUuid uuid); - static QString protocolToString(QBluetoothUuid::ProtocolUuid uuid); - static QString characteristicToString(QBluetoothUuid::CharacteristicType uuid); - static QString descriptorToString(QBluetoothUuid::DescriptorType uuid); -%If (Qt_6_7_0 -) - Py_hash_t __hash__() const; -%MethodCode - // The tp_hash slot (from QUuid) should be inherited. Is this a SIP bug? - sipRes = qHash(*sipCpp); -%End - -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &s, const QBluetoothUuid &uuid) /ReleaseGIL/; -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &s, QBluetoothUuid &uuid /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_2_0 -) -bool operator==(const QBluetoothUuid &a, const QBluetoothUuid &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QBluetoothUuid &a, const QBluetoothUuid &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingdata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingdata.sip deleted file mode 100644 index 086a33f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingdata.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qlowenergyadvertisingdata.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyAdvertisingData -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyAdvertisingData(); - QLowEnergyAdvertisingData(const QLowEnergyAdvertisingData &other); - ~QLowEnergyAdvertisingData(); - void setLocalName(const QString &name); - QString localName() const; - static quint16 invalidManufacturerId(); - void setManufacturerData(quint16 id, const QByteArray &data); - quint16 manufacturerId() const; - QByteArray manufacturerData() const; - void setIncludePowerLevel(bool doInclude); - bool includePowerLevel() const; - - enum Discoverability - { - DiscoverabilityNone, - DiscoverabilityLimited, - DiscoverabilityGeneral, - }; - - void setDiscoverability(QLowEnergyAdvertisingData::Discoverability mode); - QLowEnergyAdvertisingData::Discoverability discoverability() const; - void setServices(const QList &services); - QList services() const; - void setRawData(const QByteArray &data); - QByteArray rawData() const; - void swap(QLowEnergyAdvertisingData &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyAdvertisingData &data1, const QLowEnergyAdvertisingData &data2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyAdvertisingData &data1, const QLowEnergyAdvertisingData &data2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip deleted file mode 100644 index 2f80c0a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qlowenergyadvertisingparameters.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyAdvertisingParameters -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyAdvertisingParameters(); - QLowEnergyAdvertisingParameters(const QLowEnergyAdvertisingParameters &other); - ~QLowEnergyAdvertisingParameters(); - - enum Mode - { - AdvInd, - AdvScanInd, - AdvNonConnInd, - }; - - void setMode(QLowEnergyAdvertisingParameters::Mode mode); - QLowEnergyAdvertisingParameters::Mode mode() const; - - class AddressInfo - { -%TypeHeaderCode -#include -%End - - public: - AddressInfo(const QBluetoothAddress &addr, QLowEnergyController::RemoteAddressType t); - AddressInfo(); - QBluetoothAddress address; - QLowEnergyController::RemoteAddressType type; - }; - - enum FilterPolicy - { - IgnoreWhiteList, - UseWhiteListForScanning, - UseWhiteListForConnecting, - UseWhiteListForScanningAndConnecting, - }; - - void setWhiteList(const QList &whiteList, QLowEnergyAdvertisingParameters::FilterPolicy policy); - QList whiteList() const; - QLowEnergyAdvertisingParameters::FilterPolicy filterPolicy() const; - void setInterval(quint16 minimum, quint16 maximum); - int minimumInterval() const; - int maximumInterval() const; - void swap(QLowEnergyAdvertisingParameters &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyAdvertisingParameters &p1, const QLowEnergyAdvertisingParameters &p2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyAdvertisingParameters &p1, const QLowEnergyAdvertisingParameters &p2); -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyAdvertisingParameters::AddressInfo &ai1, const QLowEnergyAdvertisingParameters::AddressInfo &ai2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyAdvertisingParameters::AddressInfo &a, const QLowEnergyAdvertisingParameters::AddressInfo &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristic.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristic.sip deleted file mode 100644 index 4a49f37..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristic.sip +++ /dev/null @@ -1,68 +0,0 @@ -// qlowenergycharacteristic.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyCharacteristic -{ -%TypeHeaderCode -#include -%End - -public: - enum PropertyType /BaseType=Flag/ - { - Unknown, - Broadcasting, - Read, - WriteNoResponse, - Write, - Notify, - Indicate, - WriteSigned, - ExtendedProperty, - }; - - typedef QFlags PropertyTypes; - QLowEnergyCharacteristic(); - QLowEnergyCharacteristic(const QLowEnergyCharacteristic &other); - ~QLowEnergyCharacteristic(); - QString name() const; - QBluetoothUuid uuid() const; - QByteArray value() const; - QLowEnergyCharacteristic::PropertyTypes properties() const; - QLowEnergyDescriptor descriptor(const QBluetoothUuid &uuid) const; - QList descriptors() const; - bool isValid() const; - QLowEnergyDescriptor clientCharacteristicConfiguration() const; - static const QByteArray CCCDDisable; - static const QByteArray CCCDEnableNotification; - static const QByteArray CCCDEnableIndication; -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyCharacteristic &a, const QLowEnergyCharacteristic &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyCharacteristic &a, const QLowEnergyCharacteristic &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristicdata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristicdata.sip deleted file mode 100644 index 7deb127..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycharacteristicdata.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qlowenergycharacteristicdata.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyCharacteristicData -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyCharacteristicData(); - QLowEnergyCharacteristicData(const QLowEnergyCharacteristicData &other); - ~QLowEnergyCharacteristicData(); - QBluetoothUuid uuid() const; - void setUuid(const QBluetoothUuid &uuid); - QByteArray value() const; - void setValue(const QByteArray &value); - QLowEnergyCharacteristic::PropertyTypes properties() const; - void setProperties(QLowEnergyCharacteristic::PropertyTypes properties); - QList descriptors() const; - void setDescriptors(const QList &descriptors); - void addDescriptor(const QLowEnergyDescriptorData &descriptor); - void setReadConstraints(QBluetooth::AttAccessConstraints constraints); - QBluetooth::AttAccessConstraints readConstraints() const; - void setWriteConstraints(QBluetooth::AttAccessConstraints constraints); - QBluetooth::AttAccessConstraints writeConstraints() const; - void setValueLength(int minimum, int maximum); - int minimumValueLength() const; - int maximumValueLength() const; - bool isValid() const; - void swap(QLowEnergyCharacteristicData &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyCharacteristicData &cd1, const QLowEnergyCharacteristicData &cd2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyCharacteristicData &cd1, const QLowEnergyCharacteristicData &cd2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyconnectionparameters.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyconnectionparameters.sip deleted file mode 100644 index 01429e3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyconnectionparameters.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qlowenergyconnectionparameters.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyConnectionParameters -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyConnectionParameters(); - QLowEnergyConnectionParameters(const QLowEnergyConnectionParameters &other); - ~QLowEnergyConnectionParameters(); - void setIntervalRange(double minimum, double maximum); - double minimumInterval() const; - double maximumInterval() const; - void setLatency(int latency); - int latency() const; - void setSupervisionTimeout(int timeout); - int supervisionTimeout() const; - void swap(QLowEnergyConnectionParameters &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyConnectionParameters &p1, const QLowEnergyConnectionParameters &p2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyConnectionParameters &p1, const QLowEnergyConnectionParameters &p2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycontroller.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycontroller.sip deleted file mode 100644 index 0579b12..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergycontroller.sip +++ /dev/null @@ -1,125 +0,0 @@ -// qlowenergycontroller.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyController : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - UnknownError, - UnknownRemoteDeviceError, - NetworkError, - InvalidBluetoothAdapterError, - ConnectionError, - AdvertisingError, - RemoteHostClosedError, - AuthorizationError, -%If (Qt_6_4_0 -) - MissingPermissionsError, -%End -%If (Qt_6_5_0 -) - RssiReadError, -%End - }; - - enum ControllerState - { - UnconnectedState, - ConnectingState, - ConnectedState, - DiscoveringState, - DiscoveredState, - ClosingState, - AdvertisingState, - }; - - enum RemoteAddressType - { - PublicAddress, - RandomAddress, - }; - - virtual ~QLowEnergyController(); - QBluetoothAddress localAddress() const; - QBluetoothAddress remoteAddress() const; - QLowEnergyController::ControllerState state() const; - QLowEnergyController::RemoteAddressType remoteAddressType() const; - void setRemoteAddressType(QLowEnergyController::RemoteAddressType type); - void connectToDevice(); - void disconnectFromDevice(); - void discoverServices(); - QList services() const; - QLowEnergyService *createServiceObject(const QBluetoothUuid &service, QObject *parent /TransferThis/ = 0) /Factory/; - QLowEnergyController::Error error() const; - QString errorString() const; - QString remoteName() const; - int mtu() const; - -signals: - void connected(); - void disconnected(); - void stateChanged(QLowEnergyController::ControllerState state); - void errorOccurred(QLowEnergyController::Error newError); - void serviceDiscovered(const QBluetoothUuid &newService); - void discoveryFinished(); - void connectionUpdated(const QLowEnergyConnectionParameters ¶meters); - void mtuChanged(int mtu); - -public: - enum Role - { - CentralRole, - PeripheralRole, - }; - - static QLowEnergyController *createCentral(const QBluetoothDeviceInfo &remoteDevice, QObject *parent /TransferThis/ = 0) /Factory/; - static QLowEnergyController *createCentral(const QBluetoothDeviceInfo &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent /TransferThis/ = 0) /Factory/; - static QLowEnergyController *createPeripheral(const QBluetoothAddress &localDevice, QObject *parent /TransferThis/ = 0) /Factory/; - static QLowEnergyController *createPeripheral(QObject *parent /TransferThis/ = 0) /Factory/; - void startAdvertising(const QLowEnergyAdvertisingParameters ¶meters, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData = QLowEnergyAdvertisingData()); - void stopAdvertising(); - QLowEnergyService *addService(const QLowEnergyServiceData &service, QObject *parent /TransferThis/ = 0) /Factory/; - void requestConnectionUpdate(const QLowEnergyConnectionParameters ¶meters); - QLowEnergyController::Role role() const; - QBluetoothUuid remoteDeviceUuid() const; -%If (Qt_6_5_0 -) - void readRssi(); -%End - -signals: -%If (Qt_6_5_0 -) - void rssiRead(qint16 rssi); -%End - -private: - QLowEnergyController(const QBluetoothDeviceInfo &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent = 0); - QLowEnergyController(const QBluetoothAddress &localDevice, QObject *parent = 0); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptor.sip deleted file mode 100644 index cb9da78..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptor.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qlowenergydescriptor.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyDescriptor -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyDescriptor(); - QLowEnergyDescriptor(const QLowEnergyDescriptor &other); - ~QLowEnergyDescriptor(); - bool isValid() const; - QByteArray value() const; - QBluetoothUuid uuid() const; - QString name() const; - QBluetoothUuid::DescriptorType type() const; -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyDescriptor &a, const QLowEnergyDescriptor &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyDescriptor &a, const QLowEnergyDescriptor &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptordata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptordata.sip deleted file mode 100644 index ae204c5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergydescriptordata.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qlowenergydescriptordata.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyDescriptorData -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyDescriptorData(); - QLowEnergyDescriptorData(const QBluetoothUuid &uuid, const QByteArray &value); - QLowEnergyDescriptorData(const QLowEnergyDescriptorData &other); - ~QLowEnergyDescriptorData(); - QByteArray value() const; - void setValue(const QByteArray &value); - QBluetoothUuid uuid() const; - void setUuid(const QBluetoothUuid &uuid); - bool isValid() const; - void setReadPermissions(bool readable, QBluetooth::AttAccessConstraints constraints = QBluetooth::AttAccessConstraints()); - bool isReadable() const; - QBluetooth::AttAccessConstraints readConstraints() const; - void setWritePermissions(bool writable, QBluetooth::AttAccessConstraints constraints = QBluetooth::AttAccessConstraints()); - bool isWritable() const; - QBluetooth::AttAccessConstraints writeConstraints() const; - void swap(QLowEnergyDescriptorData &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyDescriptorData &d1, const QLowEnergyDescriptorData &d12); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyDescriptorData &d1, const QLowEnergyDescriptorData &d2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservice.sip deleted file mode 100644 index d07b1e3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservice.sip +++ /dev/null @@ -1,107 +0,0 @@ -// qlowenergyservice.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyService : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum DiscoveryMode - { - FullDiscovery, - SkipValueDiscovery, - }; - - enum ServiceType /BaseType=Flag/ - { - PrimaryService, - IncludedService, - }; - - typedef QFlags ServiceTypes; - - enum ServiceError - { - NoError, - OperationError, - CharacteristicWriteError, - DescriptorWriteError, - CharacteristicReadError, - DescriptorReadError, - UnknownError, - }; - - enum ServiceState - { - InvalidService, - DiscoveryRequired, - ServiceDiscovered, - LocalService, - RemoteService, - RemoteServiceDiscovering, - RemoteServiceDiscovered, - DiscoveringService, - }; - - enum WriteMode - { - WriteWithResponse, - WriteWithoutResponse, - WriteSigned, - }; - - virtual ~QLowEnergyService(); - QList includedServices() const; - QLowEnergyService::ServiceTypes type() const; - QLowEnergyService::ServiceState state() const; - QLowEnergyCharacteristic characteristic(const QBluetoothUuid &uuid) const; - QList characteristics() const; - QBluetoothUuid serviceUuid() const; - QString serviceName() const; - void discoverDetails(QLowEnergyService::DiscoveryMode mode = QLowEnergyService::FullDiscovery); - QLowEnergyService::ServiceError error() const; - bool contains(const QLowEnergyCharacteristic &characteristic) const; - bool contains(const QLowEnergyDescriptor &descriptor) const; - void writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = QLowEnergyService::WriteWithResponse); - void writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue); - -signals: - void stateChanged(QLowEnergyService::ServiceState newState); - void characteristicChanged(const QLowEnergyCharacteristic &info, const QByteArray &value); - void characteristicWritten(const QLowEnergyCharacteristic &info, const QByteArray &value); - void descriptorWritten(const QLowEnergyDescriptor &info, const QByteArray &value); - void errorOccurred(QLowEnergyService::ServiceError error); - -public: - void readCharacteristic(const QLowEnergyCharacteristic &characteristic); - void readDescriptor(const QLowEnergyDescriptor &descriptor); - -signals: - void characteristicRead(const QLowEnergyCharacteristic &info, const QByteArray &value); - void descriptorRead(const QLowEnergyDescriptor &info, const QByteArray &value); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservicedata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservicedata.sip deleted file mode 100644 index fcc540f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qlowenergyservicedata.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qlowenergyservicedata.sip generated by MetaSIP -// -// This file is part of the QtBluetooth Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLowEnergyServiceData -{ -%TypeHeaderCode -#include -%End - -public: - QLowEnergyServiceData(); - QLowEnergyServiceData(const QLowEnergyServiceData &other); - ~QLowEnergyServiceData(); - - enum ServiceType - { - ServiceTypePrimary, - ServiceTypeSecondary, - }; - - QLowEnergyServiceData::ServiceType type() const; - void setType(QLowEnergyServiceData::ServiceType type); - QBluetoothUuid uuid() const; - void setUuid(const QBluetoothUuid &uuid); - QList includedServices() const; - void setIncludedServices(const QList &services); - void addIncludedService(QLowEnergyService *service); - QList characteristics() const; - void setCharacteristics(const QList &characteristics); - void addCharacteristic(const QLowEnergyCharacteristicData &characteristic); - bool isValid() const; - void swap(QLowEnergyServiceData &other); -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QLowEnergyServiceData &sd1, const QLowEnergyServiceData &sd2); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QLowEnergyServiceData &sd1, const QLowEnergyServiceData &sd2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qlist.sip deleted file mode 100644 index c01610a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qlist.sip +++ /dev/null @@ -1,133 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtBluetooth module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -// QBluetoothServiceInfo::Sequence is actually a sub-class of QList. -// Note that QBluetoothServiceInfo::Alternative is identical and they are both -// syntactic sugar. By ignoring methods using the latter then everything works -// as expected. -%MappedType QBluetoothServiceInfo::Sequence - /TypeHintIn="Iterable[QVariant]", TypeHintOut="List[QVariant]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - QVariant *t = new QVariant(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType_QVariant, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QBluetoothServiceInfo::Sequence *ql = new QBluetoothServiceInfo::Sequence; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - QVariant *t = reinterpret_cast( - sipForceConvertToType(itm, sipType_QVariant, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but '_TYPE_' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType_QVariant, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qmultihash.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qmultihash.sip deleted file mode 100644 index 1806c04..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_qmultihash.sip +++ /dev/null @@ -1,183 +0,0 @@ -// This is the SIP interface definition for the QNultiHash based mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -template -%MappedType QMultiHash - /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QMultiHash::const_iterator it = sipCpp->constBegin(); - QMultiHash::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - PyObject *kobj = PyLong_FromLong(it.key()); - - if (!kobj) - { - Py_DECREF(d); - - return 0; - } - - QList<_TYPE_> values = sipCpp->values(it.key()); - - PyObject *py_values = PyList_New(values.size()); - - if (!py_values) - { - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, py_values); - - Py_DECREF(py_values); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - for (int i = 0; i < values.size(); ++i) - { - _TYPE_ *v = new _TYPE_(values.at(i)); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(d); - - return 0; - } - - PyList_SetItem(py_values, i, vobj); - } - - ++it; - } - - return d; -%End -}; - -%End - - -%If (Qt_6_3_0 -) - -template<_TYPE1_, _TYPE2_> -%MappedType QMultiHash<_TYPE1_, _TYPE2_> - /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QMultiHash<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin(); - QMultiHash<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - _TYPE1_ *k = new _TYPE1_(it.key()); - PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - - return 0; - } - - QList<_TYPE2_> values = sipCpp->values(it.key()); - - PyObject *py_values = PyList_New(values.size()); - - if (!py_values) - { - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, py_values); - - Py_DECREF(py_values); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - for (int i = 0; i < values.size(); ++i) - { - _TYPE2_ *v = new _TYPE2_(values.at(i)); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(d); - - return 0; - } - - PyList_SetItem(py_values, i, vobj); - } - - ++it; - } - - return d; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_quint128.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_quint128.sip deleted file mode 100644 index 7ee99b3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtBluetooth/qpybluetooth_quint128.sip +++ /dev/null @@ -1,131 +0,0 @@ -// This is the SIP interface definition for the quint128 mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -%MappedType quint128 /TypeHint="Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *t = PyTuple_New(16); - - if (!t) - return 0; - -#if defined(QT_SUPPORTS_INT128) - // This was added in Qt v6.6.0. - quint128 value = *sipCpp; -#endif - - for (Py_ssize_t i = 0; i < 16; ++i) - { - // Convert to a Python long to make sure it doesn't get interpreted as - // a signed value. -#if defined(QT_SUPPORTS_INT128) - PyObject *pobj = PyLong_FromUnsignedLong(value & 255); - value >>= 8; -#else - PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->data[i]); -#endif - - if (!pobj) - { - Py_DECREF(t); - - return 0; - } - - PyTuple_SetItem(t, i, pobj); - } - - return t; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 16) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 16 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - quint128 *qv = new quint128; - - for (Py_ssize_t i = 15; i >= 0; --i) - { - PyObject *itm = PySequence_GetItem(sipPy, i); - - if (!itm) - { - delete qv; - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - unsigned long val = PyLong_AsUnsignedLongMask(itm); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "element %zd has type '%s' but 'int' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete qv; - *sipIsErr = 1; - - return 0; - } - -#if defined(QT_SUPPORTS_INT128) - // This was added in Qt v6.6.0. - (*qv) <<= 8; - (*qv) |= (val & 255); -#else - qv->data[i] = val; -#endif - - Py_DECREF(itm); - } - - *sipCppPtr = qv; - - return sipGetState(sipTransferObj); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCore.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCore.toml deleted file mode 100644 index 4c0cd34..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCore.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtCore. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCoremod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCoremod.sip deleted file mode 100644 index caf5e16..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/QtCoremod.sip +++ /dev/null @@ -1,218 +0,0 @@ -// QtCoremod.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt6, keyword_arguments="Optional", use_limited_api=True, py_ssize_t_clean=True) - -%Timeline {Qt_6_0_0 Qt_6_1_0 Qt_6_2_0 Qt_6_3_0 Qt_6_4_0 Qt_6_5_0 Qt_6_6_0 Qt_6_7_0} - -%Platforms {Android iOS Linux macOS WebAssembly Windows} - -%Feature PyQt_Accessibility -%Feature PyQt_SessionManager -%Feature PyQt_SSL -%Feature PyQt_qreal_double -%Feature PyQt_PrintDialog -%Feature PyQt_Printer -%Feature PyQt_PrintPreviewWidget -%Feature PyQt_PrintPreviewDialog -%Feature PyQt_RawFont -%Feature PyQt_OpenGL -%Feature PyQt_OpenGL_ES2 -%Feature PyQt_Process -%Feature PyQt_WebChannel -%Feature PyQt_DTLS -%Feature PyQt_Permissions - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%Plugin PyQt6 - -%DefaultEncoding "ASCII" - -%Include(name=pyqt-internal.sip5, optional=True) -%Include(name=pyqt-gpl.sip5, optional=True) -%Include(name=pyqt-commercial.sip5, optional=True) - -%DefaultSupertype PyQt6.sip.simplewrapper - -int PYQT_VERSION; -const char *PYQT_VERSION_STR; - -%ModuleCode -static int PYQT_VERSION = 0x060701; -static const char *PYQT_VERSION_STR = "6.7.1"; -%End - -%Include qglobal.sip -%Include qtenvironmentvariables.sip -%Include qtversion.sip -%Include qnamespace.sip -%Include qabstractanimation.sip -%Include qabstracteventdispatcher.sip -%Include qabstractitemmodel.sip -%Include qabstractnativeeventfilter.sip -%Include qabstractproxymodel.sip -%Include qanimationgroup.sip -%Include qbasictimer.sip -%Include qbitarray.sip -%Include qbuffer.sip -%Include qbytearray.sip -%Include qbytearrayalgorithms.sip -%Include qbytearraymatcher.sip -%Include qcalendar.sip -%Include qcborcommon.sip -%Include qcborstreamreader.sip -%Include qcborstreamwriter.sip -%Include qcollator.sip -%Include qcommandlineoption.sip -%Include qcommandlineparser.sip -%Include qconcatenatetablesproxymodel.sip -%Include qcoreapplication.sip -%Include qcoreevent.sip -%Include qcryptographichash.sip -%Include qdatastream.sip -%Include qdatetime.sip -%Include qdeadlinetimer.sip -%Include qdir.sip -%Include qdiriterator.sip -%Include qeasingcurve.sip -%Include qelapsedtimer.sip -%Include qeventloop.sip -%Include qfile.sip -%Include qfiledevice.sip -%Include qfileinfo.sip -%Include qfileselector.sip -%Include qfilesystemwatcher.sip -%Include qidentityproxymodel.sip -%Include qiodevice.sip -%Include qiodevicebase.sip -%Include qitemselectionmodel.sip -%Include qjsondocument.sip -%Include qjsonvalue.sip -%Include qlibrary.sip -%Include qlibraryinfo.sip -%Include qline.sip -%Include qlocale.sip -%Include qlockfile.sip -%Include qlogging.sip -%Include qloggingcategory.sip -%Include qmargins.sip -%Include qmessageauthenticationcode.sip -%Include qmetaobject.sip -%Include qmetatype.sip -%Include qmimedata.sip -%Include qmimedatabase.sip -%Include qmimetype.sip -%Include qmutex.sip -%Include qnumeric.sip -%Include qobject.sip -%Include qobjectcleanuphandler.sip -%Include qobjectdefs.sip -%Include qoperatingsystemversion.sip -%Include qparallelanimationgroup.sip -%Include qpauseanimation.sip -%Include qpermissions.sip -%Include qpropertyanimation.sip -%Include qpluginloader.sip -%Include qpoint.sip -%Include qprocess.sip -%Include qrandom.sip -%Include qreadwritelock.sip -%Include qrect.sip -%Include qregularexpression.sip -%Include qresource.sip -%Include qrunnable.sip -%Include qsavefile.sip -%Include qsemaphore.sip -%Include qsequentialanimationgroup.sip -%Include qsettings.sip -%Include qsharedmemory.sip -%Include qsignalmapper.sip -%Include qsize.sip -%Include qsocketnotifier.sip -%Include qsortfilterproxymodel.sip -%Include qstandardpaths.sip -%Include qstorageinfo.sip -%Include qstringconverter_base.sip -%Include qstringconverter.sip -%Include qstringlistmodel.sip -%Include qsysinfo.sip -%Include qsystemsemaphore.sip -%Include qtemporarydir.sip -%Include qtemporaryfile.sip -%Include qtextboundaryfinder.sip -%Include qtextstream.sip -%Include qthread.sip -%Include qthreadpool.sip -%Include qtimeline.sip -%Include qtimer.sip -%Include qtimezone.sip -%Include qtipccommon.sip -%Include qtranslator.sip -%Include qtransposeproxymodel.sip -%Include qtyperevision.sip -%Include qtypes.sip -%Include qurl.sip -%Include qurlquery.sip -%Include quuid.sip -%Include qvariant.sip -%Include qvariantanimation.sip -%Include qversionnumber.sip -%Include qwaitcondition.sip -%Include qxmlstream.sip -%Include qyieldcpu.sip -%Include qpycore_qset.sip -%Include qpycore_qhash.sip -%Include qmutexlocker.sip -%Include qjsonarray.sip -%Include qstringview.sip -%Include qpycore_virtual_error_handler.sip -%Include qpycore_qlist.sip -%Include qflags.sip -%Include qstringlist.sip -%Include qbytearrayview.sip -%Include qchar.sip -%Include qpycore_qmap.sip -%Include qanystringview.sip -%Include qwineventnotifier.sip -%Include qbytearraylist.sip -%Include qjsonobject.sip -%Include qpycore_std_optional.sip -%Include qstring.sip -%Include qpycore_std_pair.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/pyqt-gpl.sip5 b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/pyqt-gpl.sip5 deleted file mode 100644 index ed2326e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/pyqt-gpl.sip5 +++ /dev/null @@ -1 +0,0 @@ -%License(type="gpl") diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractanimation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractanimation.sip deleted file mode 100644 index 0dc4eea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractanimation.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qabstractanimation.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractAnimation : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Direction - { - Forward, - Backward, - }; - - enum State - { - Stopped, - Paused, - Running, - }; - - enum DeletionPolicy - { - KeepWhenStopped, - DeleteWhenStopped, - }; - - QAbstractAnimation(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractAnimation(); - QAbstractAnimation::State state() const; - QAnimationGroup *group() const; - QAbstractAnimation::Direction direction() const; - void setDirection(QAbstractAnimation::Direction direction); - int currentTime() const; - int currentLoopTime() const; - int loopCount() const; - void setLoopCount(int loopCount); - int currentLoop() const; - virtual int duration() const = 0; - int totalDuration() const; - -signals: - void finished(); - void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - void currentLoopChanged(int currentLoop); - void directionChanged(QAbstractAnimation::Direction); - -public slots: - void start(QAbstractAnimation::DeletionPolicy policy = QAbstractAnimation::KeepWhenStopped); - void pause(); - void resume(); - void setPaused(bool); - void stop(); - void setCurrentTime(int msecs); - -protected: - virtual bool event(QEvent *event); - virtual void updateCurrentTime(int currentTime) = 0; - virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - virtual void updateDirection(QAbstractAnimation::Direction direction); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstracteventdispatcher.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstracteventdispatcher.sip deleted file mode 100644 index 94c21be..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstracteventdispatcher.sip +++ /dev/null @@ -1,63 +0,0 @@ -// qabstracteventdispatcher.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractEventDispatcher : public QObject /Abstract/ -{ -%TypeHeaderCode -#include -%End - -public: - struct TimerInfo - { -%TypeHeaderCode -#include -%End - - int timerId; - int interval; - Qt::TimerType timerType; - TimerInfo(int id, int i, Qt::TimerType t); - }; - - explicit QAbstractEventDispatcher(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractEventDispatcher(); - static QAbstractEventDispatcher *instance(QThread *thread = 0); - virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0 /ReleaseGIL/; - int registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object); - virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0; - virtual bool unregisterTimer(int timerId) = 0; - virtual bool unregisterTimers(QObject *object) = 0; - virtual QList registeredTimers(QObject *object) const = 0; - virtual void wakeUp() = 0; - virtual void interrupt() = 0; - virtual void startingUp(); - virtual void closingDown(); - virtual int remainingTime(int timerId) = 0; - void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); - void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); - bool filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result /Out/); - -signals: - void aboutToBlock(); - void awake(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractitemmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractitemmodel.sip deleted file mode 100644 index 76a5bf1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractitemmodel.sip +++ /dev/null @@ -1,357 +0,0 @@ -// qabstractitemmodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QModelIndex -{ -%TypeHeaderCode -#include -%End - -public: - QModelIndex(); - int row() const; - int column() const; - QVariant data(int role = Qt::DisplayRole) const; - Qt::ItemFlags flags() const; - SIP_PYOBJECT internalPointer() const; -%MethodCode - sipRes = reinterpret_cast(sipCpp->internalPointer()); - - if (!sipRes) - sipRes = Py_None; - - Py_INCREF(sipRes); -%End - - SIP_PYOBJECT internalId() const /TypeHint="int"/; -%MethodCode - // Python needs to treat the result as an unsigned value (which may not happen - // on 64 bit systems). Instead we get the real value as it is stored (as a - // void *) and let Python convert that. - sipRes = PyLong_FromVoidPtr(sipCpp->internalPointer()); -%End - - const QAbstractItemModel *model() const; - bool isValid() const; - QModelIndex parent() const; - QModelIndex sibling(int arow, int acolumn) const; - QModelIndex siblingAtColumn(int column) const; - QModelIndex siblingAtRow(int row) const; - bool operator==(const QModelIndex &other) const; - bool operator<(const QModelIndex &other) const; - bool operator!=(const QModelIndex &other) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -class QPersistentModelIndex -{ -%TypeHeaderCode -#include -%End - -public: - QPersistentModelIndex(); - QPersistentModelIndex(const QModelIndex &index); - QPersistentModelIndex(const QPersistentModelIndex &other); - ~QPersistentModelIndex(); - int row() const; - int column() const; - QVariant data(int role = Qt::DisplayRole) const; - Qt::ItemFlags flags() const; - QModelIndex parent() const; - QModelIndex sibling(int row, int column) const; - const QAbstractItemModel *model() const; - bool isValid() const; - void swap(QPersistentModelIndex &other /Constrained/); - operator QModelIndex() const; - bool operator<(const QPersistentModelIndex &other) const; - bool operator==(const QPersistentModelIndex &other) const; - bool operator==(const QModelIndex &other) const; - bool operator!=(const QPersistentModelIndex &other) const; - bool operator!=(const QModelIndex &other) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -typedef QList QModelIndexList; - -class QAbstractItemModel : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum LayoutChangeHint - { - NoLayoutChangeHint, - VerticalSortHint, - HorizontalSortHint, - }; - - explicit QAbstractItemModel(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractItemModel(); - bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0; - virtual QModelIndex parent(const QModelIndex &child) const = 0; - QObject *parent() const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual QMap itemData(const QModelIndex &index) const; - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::DropActions supportedDropActions() const; - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual void fetchMore(const QModelIndex &parent); - virtual bool canFetchMore(const QModelIndex &parent) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - virtual QModelIndex buddy(const QModelIndex &index) const; - virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap)) const; - virtual QSize span(const QModelIndex &index) const; - -signals: - void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList &roles = QList()); - void headerDataChanged(Qt::Orientation orientation, int first, int last); - void layoutAboutToBeChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); - void layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); - void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last); - void rowsInserted(const QModelIndex &parent, int first, int last); - void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); - void rowsRemoved(const QModelIndex &parent, int first, int last); - void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last); - void columnsInserted(const QModelIndex &parent, int first, int last); - void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last); - void columnsRemoved(const QModelIndex &parent, int first, int last); - void modelAboutToBeReset(); - void modelReset(); - -public slots: - virtual bool submit(); - virtual void revert(); - -protected: - void encodeData(const QModelIndexList &indexes, QDataStream &stream) const; - bool decodeData(int row, int column, const QModelIndex &parent, QDataStream &stream); - void beginInsertRows(const QModelIndex &parent, int first, int last); - void endInsertRows(); - void beginRemoveRows(const QModelIndex &parent, int first, int last); - void endRemoveRows(); - void beginInsertColumns(const QModelIndex &parent, int first, int last); - void endInsertColumns(); - void beginRemoveColumns(const QModelIndex &parent, int first, int last); - void endRemoveColumns(); - QModelIndexList persistentIndexList() const; - void changePersistentIndex(const QModelIndex &from, const QModelIndex &to); - void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to); - -public: - bool insertRow(int row, const QModelIndex &parent = QModelIndex()); - bool insertColumn(int column, const QModelIndex &parent = QModelIndex()); - bool removeRow(int row, const QModelIndex &parent = QModelIndex()); - bool removeColumn(int column, const QModelIndex &parent = QModelIndex()); - virtual Qt::DropActions supportedDragActions() const; - virtual QHash roleNames() const; - -protected: - QModelIndex createIndex(int row, int column, SIP_PYOBJECT object = 0) const [QModelIndex (int row, int column, const void *object = 0)]; -%MethodCode - // The Qt API is broken (and won't be fixed as it would break binary - // compatibility) regarding the internal id of a model index on different - // architectures (32 vs 64 bits). We choose to work around the breakage as it - // is fairly subtle and continues to catch people out. Instead of letting Qt - // convert betweed an integer id and a pointer id (the internal format used by - // Qt) we let Python do it. - - void *ptr; - - if (a2) - { - // Try and convert it to a Python long and fallback to the object's - // address if it fails. - ptr = PyLong_AsVoidPtr(a2); - - if (PyErr_Occurred()) - { - PyErr_Clear(); - ptr = a2; - } - } - else - { - ptr = 0; - } - - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = new QModelIndex(sipCpp->createIndex(a0, a1, ptr)); - #else - sipRes = new QModelIndex(sipCpp->sipProtect_createIndex(a0, a1, ptr)); - #endif -%End - -signals: - void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow); - void rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); - void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn); - void columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column); - -protected: - bool beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationRow); - void endMoveRows(); - bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationColumn); - void endMoveColumns(); - void beginResetModel() /ReleaseGIL/; - void endResetModel() /ReleaseGIL/; - -protected slots: - virtual void resetInternalData(); - -public: - virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; - virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); - virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); - bool moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild); - bool moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild); - - enum class CheckIndexOption /BaseType=Flag/ - { - NoOption, - IndexIsValid, - DoNotUseParent, - ParentIsInvalid, - }; - - typedef QFlags CheckIndexOptions; - bool checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = QAbstractItemModel::CheckIndexOption::NoOption) const; - virtual bool clearItemData(const QModelIndex &index); - virtual void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const; -}; - -class QAbstractTableModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractTableModel(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractTableModel(); - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - QObject *parent() const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - -private: - virtual bool hasChildren(const QModelIndex &parent) const; - virtual QModelIndex parent(const QModelIndex &child) const; -}; - -class QAbstractListModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractListModel(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractListModel(); - virtual QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - QObject *parent() const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - -private: - virtual int columnCount(const QModelIndex &parent) const; - virtual bool hasChildren(const QModelIndex &parent) const; - virtual QModelIndex parent(const QModelIndex &child) const; -}; - -class QModelRoleData -{ -%TypeHeaderCode -#include -%End - -public: - explicit QModelRoleData(int role); - int role() const; - const QVariant &data() const; - void setData(const QVariant &data); - void clearData(); -}; - -class QModelRoleDataSpan -{ -%TypeHeaderCode -// The capsule destructor for a QModelRoleData array. -static void qpycore_gc_modelroledata(PyObject *mrd_obj); -%End - -%TypeCode -// The capsule destructor for a QModelRoleData array. -static void qpycore_gc_modelroledata(PyObject *mrd_obj) -{ - delete[] reinterpret_cast* >(PyCapsule_GetPointer(mrd_obj, NULL)); -} -%End - -public: - QModelRoleDataSpan(); - QModelRoleDataSpan(QModelRoleData &modelRoleData); - QModelRoleDataSpan(QList modelRoleData); -%MethodCode - PyObject *a0cap = PyCapsule_New(a0, NULL, qpycore_gc_modelroledata); - - if (a0cap) - { - sipSetUserObject((sipSimpleWrapper *)sipSelf, a0cap); - - sipCpp = new QModelRoleDataSpan(*a0); - } -%End - - qsizetype size() const; - qsizetype length() const /__len__/; - QModelRoleData *data() const; - QModelRoleData *begin() const; - QModelRoleData *end() const; - QModelRoleData &operator[](qsizetype index) const; - QVariant *dataForRole(int role) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractnativeeventfilter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractnativeeventfilter.sip deleted file mode 100644 index 6a47868..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractnativeeventfilter.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qabstractnativeeventfilter.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractNativeEventFilter -{ -%TypeHeaderCode -#include -%End - -public: - QAbstractNativeEventFilter(); - virtual ~QAbstractNativeEventFilter(); - virtual bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result /Out/) = 0; - -private: - QAbstractNativeEventFilter(const QAbstractNativeEventFilter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractproxymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractproxymodel.sip deleted file mode 100644 index 444e856..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qabstractproxymodel.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qabstractproxymodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractProxyModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractProxyModel(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractProxyModel(); - virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); - QAbstractItemModel *sourceModel() const; - virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const = 0; - virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const = 0; - virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const; - virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const; - virtual bool submit(); - virtual void revert(); - virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual QMap itemData(const QModelIndex &index) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual QModelIndex buddy(const QModelIndex &index) const; - virtual bool canFetchMore(const QModelIndex &parent) const; - virtual void fetchMore(const QModelIndex &parent); - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - virtual QSize span(const QModelIndex &index) const; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; - virtual QStringList mimeTypes() const; - virtual Qt::DropActions supportedDropActions() const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - -signals: - void sourceModelChanged(); - -public: - virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::DropActions supportedDragActions() const; - virtual bool clearItemData(const QModelIndex &index); - virtual QHash roleNames() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanimationgroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanimationgroup.sip deleted file mode 100644 index d1d2c24..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanimationgroup.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qanimationgroup.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAnimationGroup : public QAbstractAnimation -{ -%TypeHeaderCode -#include -%End - -public: - QAnimationGroup(QObject *parent /TransferThis/ = 0); - virtual ~QAnimationGroup(); - QAbstractAnimation *animationAt(int index) const; - int animationCount() const; - int indexOfAnimation(QAbstractAnimation *animation) const; - void addAnimation(QAbstractAnimation *animation /Transfer/); - void insertAnimation(int index, QAbstractAnimation *animation /Transfer/); - void removeAnimation(QAbstractAnimation *animation /TransferBack/); - QAbstractAnimation *takeAnimation(int index) /TransferBack/; - void clear(); - -protected: - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanystringview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanystringview.sip deleted file mode 100644 index 3d88e6a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qanystringview.sip +++ /dev/null @@ -1,92 +0,0 @@ -// This is the SIP interface definition for the QAnyStringView mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_4_0 -) - -%MappedType QAnyStringView /AllowNone, TypeHint="Union[QByteArray, QString]",TypeHintValue="''"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -struct PyQtAnyStringState -{ - const sipTypeDef *instance_type; // The instance's generated type. - void *instance; // Either the QByteArray or QString. - int instance_state; // The state of the instance conversion. -}; -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) - return sipCanConvertToType(sipPy, sipType_QString, 0) || - sipCanConvertToType(sipPy, sipType_QByteArray, SIP_NOT_NONE); - -PyQtAnyStringState *state = new PyQtAnyStringState; - -if (sipCanConvertToType(sipPy, sipType_QString, 0)) -{ - QString *qs = reinterpret_cast( - sipConvertToType(sipPy, sipType_QString, sipTransferObj, 0, - &state->instance_state, sipIsErr)); - - if (*sipIsErr) - return 0; - - *sipCppPtr = new QAnyStringView(*qs); - state->instance_type = sipType_QString; - state->instance = qs; -} -else -{ - QByteArray *qba = reinterpret_cast( - sipConvertToType(sipPy, sipType_QByteArray, sipTransferObj, - SIP_NOT_NONE, &state->instance_state, sipIsErr)); - - if (*sipIsErr) - return 0; - - *sipCppPtr = new QAnyStringView(*qba); - state->instance_type = sipType_QByteArray; - state->instance = qba; -} - -*sipUserStatePtr = state; - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode - return qpycore_PyObject_FromQString(sipCpp->toString()); -%End - -%ReleaseCode -delete sipCpp; - -PyQtAnyStringState *state = reinterpret_cast(sipUserState); - -sipReleaseType(state->instance, state->instance_type, state->instance_state); - -delete state; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbasictimer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbasictimer.sip deleted file mode 100644 index 7a8db12..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbasictimer.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qbasictimer.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBasicTimer -{ -%TypeHeaderCode -#include -%End - -public: - QBasicTimer(); - ~QBasicTimer(); - bool isActive() const; - int timerId() const; - void start(int msec, Qt::TimerType timerType, QObject *obj); - void start(int msec, QObject *obj); - void stop(); - void swap(QBasicTimer &other /Constrained/); - -private: - QBasicTimer(const QBasicTimer &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbitarray.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbitarray.sip deleted file mode 100644 index c8522fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbitarray.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qbitarray.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBitArray -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// This is needed by __hash__(). -#include -%End - -public: - QBitArray(); - QBitArray(qsizetype size, bool value = false); - QBitArray(const QBitArray &other); - qsizetype size() const; - qsizetype count() const /__len__/; - qsizetype count(bool on) const; - bool isEmpty() const; - bool isNull() const; - void resize(qsizetype size); - void detach(); - bool isDetached() const; - void clear(); - QBitArray &operator&=(const QBitArray &); - QBitArray &operator|=(const QBitArray &); - QBitArray &operator^=(const QBitArray &); -%If (- Qt_6_7_0) - // This was changed to be a global operator in Qt v6.7 but this isn't supported by SIP v6.8. - QBitArray operator~() const; -%End - bool operator==(const QBitArray &a) const; - bool operator!=(const QBitArray &a) const; - void fill(bool val, qsizetype first, qsizetype last); - bool fill(bool val, qsizetype size = -1); - void truncate(qsizetype pos); - bool testBit(qsizetype i) const; - void setBit(qsizetype i); - void setBit(qsizetype i, bool val); - void clearBit(qsizetype i); - bool toggleBit(qsizetype i); - bool operator[](qsizetype i) const; - bool at(qsizetype i) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - void swap(QBitArray &other /Constrained/); - SIP_PYOBJECT bits() const /TypeHint="bytes"/; -%MethodCode - return PyBytes_FromStringAndSize(sipCpp->bits(), (sipCpp->size() + 7) / 8); -%End - - static QBitArray fromBits(const char *data /Encoding="None"/, Py_ssize_t len) [QBitArray (const char *data, qsizetype len)]; - quint32 toUInt32(QSysInfo::Endian endianness, bool *ok = 0) const; -}; - -QBitArray operator&(const QBitArray &, const QBitArray &); -QBitArray operator|(const QBitArray &, const QBitArray &); -QBitArray operator^(const QBitArray &, const QBitArray &); -QDataStream &operator<<(QDataStream &, const QBitArray &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QBitArray & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbuffer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbuffer.sip deleted file mode 100644 index 662ebcc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbuffer.sip +++ /dev/null @@ -1,114 +0,0 @@ -// qbuffer.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBuffer : public QIODevice -{ -%TypeHeaderCode -#include -%End - -public: - explicit QBuffer(QObject *parent /TransferThis/ = 0); - QBuffer(QByteArray *byteArray /Constrained/, QObject *parent /TransferThis/ = 0); - virtual ~QBuffer(); - QByteArray &buffer(); - const QByteArray &data() const; - void setBuffer(QByteArray *a /Constrained/); - void setData(const QByteArray &data); -%If (- Qt_6_5_0) - void setData(const char *adata /Array/, int alen /ArraySize/); -%End -%If (Qt_6_5_0 -) - void setData(const char *data /Array/, qsizetype len /ArraySize/); -%End - virtual bool open(QIODeviceBase::OpenMode openMode); - virtual void close(); - virtual qint64 size() const; - virtual qint64 pos() const; - virtual bool seek(qint64 off); - virtual bool atEnd() const; - virtual bool canReadLine() const; - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QBuffer::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QBuffer::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearray.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearray.sip deleted file mode 100644 index 265f08e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearray.sip +++ /dev/null @@ -1,455 +0,0 @@ -// qbytearray.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QByteArray /TypeHintIn="Union[QByteArray, bytes, bytearray, memoryview]"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// This is needed by __hash__(). -#include - - -// Convenience function for converting a QByteArray to a Python str object. -static PyObject *QByteArrayToPyStr(QByteArray *ba) -{ - char *data = ba->data(); - - if (data) - // QByteArrays may have embedded '\0's so set the size explicitly. - return PyBytes_FromStringAndSize(data, ba->size()); - - return PyBytes_FromString(""); -} -%End - -%ConvertToTypeCode -// Accept anything that implements the buffer protocol (including QByteArray -// itself). - -if (sipIsErr == NULL) - return sipGetBufferInfo(sipPy, NULL); - - -// If it is already a QByteArray then use it rather than make an unnecessary -// copy of the data. -if (sipCanConvertToType(sipPy, sipType_QByteArray, SIP_NO_CONVERTORS)) -{ - *sipCppPtr = reinterpret_cast( - sipConvertToType(sipPy, sipType_QByteArray, sipTransferObj, - SIP_NO_CONVERTORS, 0, sipIsErr)); - - return 0; -} - -// Create a QByteArray from the data. -sipBufferInfoDef buffer_info; - -if (sipGetBufferInfo(sipPy, &buffer_info) > 0) -{ - // Check that the buffer is compatible with one defined by - // PyBuffer_FillInfo() as used by QByteArray and the standard Python byte - // objects. - if (buffer_info.bi_format == NULL || buffer_info.bi_format[0] == 'B') - { - *sipCppPtr = new QByteArray( - reinterpret_cast(buffer_info.bi_buf), - (qsizetype)buffer_info.bi_len); - - sipReleaseBufferInfo(&buffer_info); - - // We don't support transfer of ownership. - return SIP_TEMPORARY; - } - - PyErr_Format(PyExc_TypeError, "unsupported buffer format '%s'", - buffer_info.bi_format); - - sipReleaseBufferInfo(&buffer_info); -} - -*sipIsErr = 1; - -return 0; -%End - -%BIGetBufferCode - // We may be building against a debug Python build. - - #if defined(Py_LIMITED_API) - Q_UNUSED(sipSelf); - - sipBuffer->bd_buffer = sipCpp->data(); - sipBuffer->bd_length = sipCpp->size(); - sipBuffer->bd_readonly = 0; - - sipRes = 0; - #else - sipRes = PyBuffer_FillInfo(sipBuffer, sipSelf, sipCpp->data(), - sipCpp->size(), 0, sipFlags); - #endif -%End - -%PickleCode - sipRes = Py_BuildValue("(y#)", sipCpp->data(), static_cast(sipCpp->size())); -%End - -public: - QByteArray(); - QByteArray(qsizetype size, char c /Encoding="None"/); - QByteArray(const QByteArray &a); - ~QByteArray(); - void resize(qsizetype size); -%If (Qt_6_4_0 -) - void resize(qsizetype size, char c); -%End - QByteArray &fill(char c /Encoding="None"/, qsizetype size = -1); - void clear(); - qsizetype indexOf(QByteArrayView bv, qsizetype from = 0) const; - // In Qt v6.2 this was replaced by two separate overloads. However we need to keep the optional keyword argument. - qsizetype lastIndexOf(QByteArrayView bv, qsizetype from = -1) const; - qsizetype count(QByteArrayView bv) const; - QByteArray left(qsizetype len) const; - QByteArray right(qsizetype len) const; - QByteArray mid(qsizetype index, qsizetype length = -1) const; - QByteArray first(qsizetype n) const; - QByteArray last(qsizetype n) const; - bool startsWith(QByteArrayView bv) const; - bool endsWith(QByteArrayView bv) const; - void truncate(qsizetype pos); - void chop(qsizetype n); - QByteArray toLower() const; - QByteArray toUpper() const; - QByteArray trimmed() const; - QByteArray simplified() const; - QByteArray leftJustified(qsizetype width, char fill /Encoding="None"/ = ' ', bool truncate = false) const; - QByteArray rightJustified(qsizetype width, char fill /Encoding="None"/ = ' ', bool truncate = false) const; - QByteArray &prepend(QByteArrayView a); - QByteArray &prepend(qsizetype count, char c /Encoding="None"/); - QByteArray &append(QByteArrayView a); - QByteArray &append(qsizetype count, char c /Encoding="None"/); - QByteArray &insert(qsizetype i, QByteArrayView data); - QByteArray &insert(qsizetype i, qsizetype count, char c /Encoding="None"/); - QByteArray &remove(qsizetype index, qsizetype len); - QByteArray &replace(QByteArrayView before, QByteArrayView after); - QByteArray &replace(qsizetype index, qsizetype len, QByteArrayView s); - QList split(char sep /Encoding="None"/) const; - QByteArray &operator+=(QByteArrayView a); - bool operator==(const QString &s2) const; - bool operator!=(const QString &s2) const; - bool operator<(const QString &s2) const; - bool operator>(const QString &s2) const; - bool operator<=(const QString &s2) const; - bool operator>=(const QString &s2) const; - short toShort(bool *ok = 0, int base = 10) const; - ushort toUShort(bool *ok = 0, int base = 10) const; - int toInt(bool *ok = 0, int base = 10) const; - uint toUInt(bool *ok = 0, int base = 10) const; - long toLong(bool *ok = 0, int base = 10) const; - ulong toULong(bool *ok = 0, int base = 10) const; - qlonglong toLongLong(bool *ok = 0, int base = 10) const; - qulonglong toULongLong(bool *ok = 0, int base = 10) const; - float toFloat(bool *ok = 0) const; - double toDouble(bool *ok = 0) const; - QByteArray toBase64(QByteArray::Base64Options options = QByteArray::Base64Encoding) const; - QByteArray &setNum(double n /Constrained/, char format = 'g', int precision = 6); - QByteArray &setNum(SIP_PYOBJECT n /TypeHint="int"/, int base = 10); -%MethodCode - qlonglong val = sipLong_AsLongLong(a0); - - if (!PyErr_Occurred()) - { - sipRes = &sipCpp->setNum(val, a1); - } - else - { - // If it is positive then it might fit an unsigned long long. - - qulonglong uval = sipLong_AsUnsignedLongLong(a0); - - if (!PyErr_Occurred()) - { - sipRes = &sipCpp->setNum(uval, a1); - } - else - { - sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) - ? sipErrorFail : sipErrorContinue); - } - } -%End - - static QByteArray number(double n /Constrained/, char format = 'g', int precision = 6); - static QByteArray number(SIP_PYOBJECT n /TypeHint="int"/, int base = 10); -%MethodCode - qlonglong val = sipLong_AsLongLong(a0); - - if (!PyErr_Occurred()) - { - sipRes = new QByteArray(QByteArray::number(val, a1)); - } - else - { - // If it is positive then it might fit an unsigned long long. - - qulonglong uval = sipLong_AsUnsignedLongLong(a0); - - if (!PyErr_Occurred()) - { - sipRes = new QByteArray(QByteArray::number(uval, a1)); - } - else - { - sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) - ? sipErrorFail : sipErrorContinue); - } - } -%End - - static QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options = QByteArray::Base64Encoding); - static QByteArray fromHex(const QByteArray &hexEncoded); - qsizetype count() const; - qsizetype length() const; - bool isNull() const; - qsizetype size() const /__len__/; - char at(qsizetype i) const /Encoding="None"/; - char operator[](qsizetype i) const /Encoding="None"/; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->size()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = sipCpp->operator[]((qsizetype)idx); -%End - - QByteArray operator[](SIP_PYSLICE slice) const; -%MethodCode - Py_ssize_t start, stop, step, slicelength; - - if (sipConvertFromSliceObject(a0, sipCpp->size(), &start, &stop, &step, &slicelength) < 0) - { - sipIsErr = 1; - } - else - { - sipRes = new QByteArray(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - sipRes->append(sipCpp->at((qsizetype)start)); - start += step; - } - } -%End - - int __contains__(const QByteArrayView bv) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - SIP_PYOBJECT __str__() const /TypeHint="str"/; -%MethodCode - sipRes = QByteArrayToPyStr(sipCpp); - - PyObject *repr = PyObject_Repr(sipRes); - - if (repr) - { - Py_DECREF(sipRes); - sipRes = repr; - } -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QByteArray()"); - } - else - { - PyObject *str = QByteArrayToPyStr(sipCpp); - - if (str) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QByteArray(%R)", str); - - Py_DECREF(str); - } - } -%End - - QByteArray operator*(int m) const; -%MethodCode - sipRes = new QByteArray(); - - while (a0-- > 0) - *sipRes += *sipCpp; -%End - - QByteArray &operator*=(int m); -%MethodCode - QByteArray orig(*sipCpp); - - sipCpp->clear(); - - while (a0-- > 0) - *sipCpp += orig; -%End - - bool isEmpty() const; - SIP_PYOBJECT data() /TypeHint="bytes"/; -%MethodCode - // QByteArrays may contain embedded '\0's so set the size explicitly. - - char *res = sipCpp->data(); - qsizetype len = sipCpp->size(); - - if (res) - { - if ((sipRes = PyBytes_FromStringAndSize(res, (Py_ssize_t)len)) == NULL) - sipIsErr = 1; - } - else - { - Py_INCREF(Py_None); - sipRes = Py_None; - } -%End - - qsizetype capacity() const; - void reserve(qsizetype size); - void squeeze(); - void push_back(QByteArrayView a); - void push_front(QByteArrayView a); - bool contains(QByteArrayView bv) const; - QByteArray toHex(char separator /Encoding="None"/ = '\x00') const; - QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray(), char percent = '%') const; - static QByteArray fromPercentEncoding(const QByteArray &input, char percent = '%'); - QByteArray repeated(qsizetype times) const; - void swap(QByteArray &other /Constrained/); - - enum Base64Option /BaseType=Flag/ - { - Base64Encoding, - Base64UrlEncoding, - KeepTrailingEquals, - OmitTrailingEquals, - IgnoreBase64DecodingErrors, - AbortOnBase64DecodingErrors, - }; - - typedef QFlags Base64Options; - QByteArray chopped(qsizetype len) const; - int compare(QByteArrayView a, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; - bool isUpper() const; - bool isLower() const; - - enum class Base64DecodingStatus - { - Ok, - IllegalInputLength, - IllegalCharacter, - IllegalPadding, - }; - - static QByteArray::FromBase64Result fromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = QByteArray::Base64Encoding); - - class FromBase64Result - { -%TypeHeaderCode -#include -%End - - public: - QByteArray decoded; - QByteArray::Base64DecodingStatus decodingStatus; - void swap(QByteArray::FromBase64Result &other /Constrained/); - operator bool() const; -%MethodCode - // This is required because SIP doesn't handle operator bool() properly. - sipRes = sipCpp->operator bool(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - }; - - QByteArray sliced(qsizetype pos) const; - QByteArray sliced(qsizetype pos, qsizetype n) const; -%If (Qt_6_3_0 -) - bool isValidUtf8() const; -%End -%If (Qt_6_4_0 -) - QByteArray percentDecoded(char percent = '%') const; -%End -%If (Qt_6_5_0 -) - QByteArray &removeAt(qsizetype pos); -%End -%If (Qt_6_5_0 -) - QByteArray &removeFirst(); -%End -%If (Qt_6_5_0 -) - QByteArray &removeLast(); -%End -%If (Qt_6_6_0 -) - QByteArray &assign(QByteArrayView v); -%End -}; - -bool operator==(const QByteArray &a1, const QByteArray &a2); -bool operator!=(const QByteArray &a1, const QByteArray &a2); -bool operator<(const QByteArray &a1, const QByteArray &a2); -bool operator<=(const QByteArray &a1, const QByteArray &a2); -bool operator>(const QByteArray &a1, const QByteArray &a2); -bool operator>=(const QByteArray &a1, const QByteArray &a2); -%If (Qt_6_5_0 -) -QByteArray operator+(const QByteArray &a1, const QByteArray &a2); -%End -%If (- Qt_6_5_0) -const QByteArray operator+(const QByteArray &a1, const QByteArray &a2); -%End -QDataStream &operator<<(QDataStream &, const QByteArray & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QByteArray & /Constrained/) /ReleaseGIL/; -QByteArray qCompress(const uchar *data /Array/, qsizetype nbytes /ArraySize/, int compressionLevel = -1); -QByteArray qCompress(const QByteArray &data, int compressionLevel = -1); -QByteArray qUncompress(const uchar *data /Array/, qsizetype nbytes /ArraySize/); -QByteArray qUncompress(const QByteArray &data); -%If (- Qt_6_2_0) -quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309); -%End -bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs); -bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayalgorithms.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayalgorithms.sip deleted file mode 100644 index 9079bdf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayalgorithms.sip +++ /dev/null @@ -1,31 +0,0 @@ -// qbytearrayalgorithms.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) -%ModuleCode -#include -%End -%End - -%If (Qt_6_2_0 -) -quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraylist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraylist.sip deleted file mode 100644 index b6f6131..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraylist.sip +++ /dev/null @@ -1,124 +0,0 @@ -// This is the SIP interface definition for the QByteArrayList mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QByteArrayList - /TypeHintIn="Iterable[QByteArray]", TypeHintOut="List[QByteArray]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - QByteArray *t = new QByteArray(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType_QByteArray, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QByteArrayList *ql = new QByteArrayList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - QByteArray *t = reinterpret_cast( - sipForceConvertToType(itm, sipType_QByteArray, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'str' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType_QByteArray, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraymatcher.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraymatcher.sip deleted file mode 100644 index a7e686c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearraymatcher.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qbytearraymatcher.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QByteArrayMatcher -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_3_0 -) - QByteArrayMatcher(const char *pattern /Encoding="None"/, qsizetype length = -1); -%End -%If (- Qt_6_3_0) - QByteArrayMatcher(const char *pattern /Encoding="None"/, qsizetype length); -%End -%If (Qt_6_3_0 -) - explicit QByteArrayMatcher(QByteArrayView pattern); -%End -%If (- Qt_6_3_0) -%If (Qt_6_4_0 -) - explicit QByteArrayMatcher(const QByteArray &pattern); -%End -%End - QByteArrayMatcher(); - QByteArrayMatcher(const QByteArrayMatcher &other); - ~QByteArrayMatcher(); - void setPattern(const QByteArray &pattern); -%If (Qt_6_3_0 -) - qsizetype indexIn(QByteArrayView data, qsizetype from = 0) const; -%End -%If (- Qt_6_3_0) - qsizetype indexIn(const QByteArray &ba, qsizetype from = 0) const; -%End - qsizetype indexIn(const char *str /Encoding="None"/, qsizetype len, qsizetype from = 0) const; - QByteArray pattern() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayview.sip deleted file mode 100644 index f0a1738..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qbytearrayview.sip +++ /dev/null @@ -1,79 +0,0 @@ -// This is the SIP interface definition for the QByteArrayView mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QByteArrayView /TypeHint="QByteArray"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) -{ - // Note that we choose to use QByteArray's implementation of the buffer - // protocol. - return sipGetBufferInfo(sipPy, NULL); -} - -sipBufferInfoDef *buffer_info = (sipBufferInfoDef *)sipMalloc( - sizeof (sipBufferInfoDef)); - -if (buffer_info) -{ - if (sipGetBufferInfo(sipPy, buffer_info) > 0) - { - // Check that the buffer is compatible with one defined by - // PyBuffer_FillInfo() as used by QByteArray and the standard Python - // byte objects. - if (buffer_info->bi_format == NULL || buffer_info->bi_format[0] == 'B') - { - *sipCppPtr = new QByteArrayView( - reinterpret_cast( - buffer_info->bi_buf), - (qsizetype)buffer_info->bi_len); - - *sipUserStatePtr = buffer_info; - - // We don't support transfer of ownership. - return SIP_TEMPORARY; - } - - PyErr_Format(PyExc_TypeError, "unsupported buffer format '%s'", - buffer_info->bi_format); - - sipReleaseBufferInfo(buffer_info); - } - - sipFree(buffer_info); -} - -*sipIsErr = 1; - -return 0; -%End - -%ReleaseCode -delete sipCpp; - -sipBufferInfoDef *buffer_info = reinterpret_cast(sipUserState); -sipReleaseBufferInfo(buffer_info); -sipFree(buffer_info); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcalendar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcalendar.sip deleted file mode 100644 index 3507b98..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcalendar.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qcalendar.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCalendar -{ -%TypeHeaderCode -#include -%End - -public: - enum - { - Unspecified, - }; - - struct YearMonthDay - { -%TypeHeaderCode -#include -%End - - YearMonthDay(); - YearMonthDay(int year, int month = 1, int day = 1); - bool isValid() const; - int year; - int month; - int day; - }; - - enum class System - { - Gregorian, - Julian, - Milankovic, - Jalali, - IslamicCivil, - }; - - QCalendar(); - explicit QCalendar(QCalendar::System system); -%If (Qt_6_4_0 -) - explicit QCalendar(QAnyStringView name); -%End -%If (- Qt_6_4_0) - explicit QCalendar(const char *name /Encoding="Latin-1"/) [(QLatin1String name)]; -%MethodCode - // This is currently the only occurence of a QLatin1String argument. - sipCpp = new QCalendar(QLatin1String(a0)); -%End - -%End - int daysInMonth(int month, int year = QCalendar::Unspecified) const; - int daysInYear(int year) const; - int monthsInYear(int year) const; - bool isDateValid(int year, int month, int day) const; - bool isLeapYear(int year) const; - bool isGregorian() const; - bool isLunar() const; - bool isLuniSolar() const; - bool isSolar() const; - bool isProleptic() const; - bool hasYearZero() const; - int maximumDaysInMonth() const; - int minimumDaysInMonth() const; - int maximumMonthsInYear() const; - QString name() const; - QDate dateFromParts(int year, int month, int day) const; - QDate dateFromParts(const QCalendar::YearMonthDay &parts) const; - QCalendar::YearMonthDay partsFromDate(QDate date) const; - int dayOfWeek(QDate date) const; - QString monthName(const QLocale &locale, int month, int year = QCalendar::Unspecified, QLocale::FormatType format = QLocale::LongFormat) const; - QString standaloneMonthName(const QLocale &locale, int month, int year = QCalendar::Unspecified, QLocale::FormatType format = QLocale::LongFormat) const; - QString weekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const; - QString standaloneWeekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const; - QString dateTimeToString(QStringView format, const QDateTime &datetime, QDate dateOnly, QTime timeOnly, const QLocale &locale) const; - static QStringList availableCalendars(); -%If (Qt_6_7_0 -) - QDate matchCenturyToWeekday(const QCalendar::YearMonthDay &parts, int dow) const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborcommon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborcommon.sip deleted file mode 100644 index 1678949..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborcommon.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qcborcommon.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -// // Handwritten implementation of QCborSimpleType. -// Cast-XML has a bug which means that it places this definition in qmetatype.h -// (where it is first declared). - -enum class QCborSimpleType { - False /PyName=False_/, - True /PyName=True_/, - Null, - Undefined -}; - -struct QCborError -{ -%TypeHeaderCode -#include -%End - - enum Code - { - UnknownError, - AdvancePastEnd, - InputOutputError, - GarbageAtEnd, - EndOfFile, - UnexpectedBreak, - UnknownType, - IllegalType, - IllegalNumber, - IllegalSimpleType, - InvalidUtf8String, - DataTooLarge, - NestingTooDeep, - UnsupportedType, - NoError, - }; - -// Error code access -// This class is currently undocumented. Access to the error code is via a -// cast (which SIP doesn't support) or a badly named instance variable. To be -// safe we implement a more Qt-typical solution. -QCborError::Code code() const; -%MethodCode - sipRes = sipCpp->c; -%End - QString toString() const; -}; - -enum class QCborKnownTags -{ - DateTimeString, - UnixTime_t, - PositiveBignum, - NegativeBignum, - Decimal, - Bigfloat, - COSE_Encrypt0, - COSE_Mac0, - COSE_Sign1, - ExpectedBase64url, - ExpectedBase64, - ExpectedBase16, - EncodedCbor, - Url, - Base64url, - Base64, - RegularExpression, - MimeMessage, - Uuid, - COSE_Encrypt, - COSE_Mac, - COSE_Sign, - Signature, -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamreader.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamreader.sip deleted file mode 100644 index 5cd8fd5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamreader.sip +++ /dev/null @@ -1,164 +0,0 @@ -// qcborstreamreader.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCborStreamReader -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - UnsignedInteger, - NegativeInteger, - ByteString, - ByteArray, - TextString, - String, - Array, - Map, - Tag, - SimpleType, - HalfFloat, - Float16, - Float, - Double, - Invalid, - }; - - enum StringResultCode - { - EndOfString, - Ok, - Error, - }; - - QCborStreamReader(); - explicit QCborStreamReader(const QByteArray &data); - explicit QCborStreamReader(QIODevice *device); - ~QCborStreamReader(); - void setDevice(QIODevice *device); - QIODevice *device() const; - void addData(const QByteArray &data); - void reparse(); - void clear(); - void reset(); -%If (Qt_6_7_0 -) - QCborError lastError() const; -%End -%If (- Qt_6_7_0) - QCborError lastError(); -%End - qint64 currentOffset() const; - bool isValid() const; - int containerDepth() const; - QCborStreamReader::Type parentContainerType() const; - bool hasNext() const; - bool next(int maxRecursion = 10000); - QCborStreamReader::Type type() const; - bool isUnsignedInteger() const; - bool isNegativeInteger() const; - bool isInteger() const; - bool isByteArray() const; - bool isString() const; - bool isArray() const; - bool isMap() const; - bool isTag() const; - bool isSimpleType() const; - bool isFloat16() const; - bool isFloat() const; - bool isDouble() const; - bool isInvalid() const; - bool isSimpleType(QCborSimpleType st) const; - bool isFalse() const; - bool isTrue() const; - bool isBool() const; - bool isNull() const; - bool isUndefined() const; - bool isLengthKnown() const; - quint64 length() const /__len__/; - bool isContainer() const; - bool enterContainer(); - bool leaveContainer(); - SIP_PYTUPLE readString() /TypeHint="Tuple[str, QCborStreamReader.StringResultCode]"/; -%MethodCode - QCborStreamReader::StringResult res = sipCpp->readString(); - - QString *qs = new QString; - if (res.status != QCborStreamReader::Error) - *qs = res.data; - - sipRes = sipBuildResult(NULL, "NF", qs, sipType_QString, NULL, res.status, sipType_QCborStreamReader_StringResultCode); -%End - - SIP_PYTUPLE readByteArray() /TypeHint="Tuple[QByteArray, QCborStreamReader.StringResultCode]"/; -%MethodCode - QCborStreamReader::StringResult res = sipCpp->readByteArray(); - - QByteArray *qba = new QByteArray; - if (res.status != QCborStreamReader::Error) - *qba = res.data; - - sipRes = sipBuildResult(NULL, "NF", qba, sipType_QByteArray, NULL, res.status, sipType_QCborStreamReader_StringResultCode); -%End - -%If (Qt_6_7_0 -) - SIP_PYTUPLE readUtf8String() /TypeHint="Tuple[QByteArray, QCborStreamReader.StringResultCode]"/; -%MethodCode - QCborStreamReader::StringResult res = sipCpp->readUtf8String(); - - QByteArray *qba = new QByteArray; - if (res.status != QCborStreamReader::Error) - *qba = res.data; - - sipRes = sipBuildResult(NULL, "NF", qba, sipType_QByteArray, NULL, res.status, sipType_QCborStreamReader_StringResultCode); -%End - -%End - bool toBool() const; - quint64 toUnsignedInteger() const; - QCborSimpleType toSimpleType() const; - double toDouble() const; - qint64 toInteger() const; -%If (Qt_6_7_0 -) - bool readAndAppendToString(QString &dst); -%End -%If (Qt_6_7_0 -) - bool readAndAppendToUtf8String(QByteArray &dst); -%End -%If (Qt_6_7_0 -) - bool readAndAppendToByteArray(QByteArray &dst); -%End -%If (Qt_6_7_0 -) - QString readAllString(); -%End -%If (Qt_6_7_0 -) - QByteArray readAllUtf8String(); -%End -%If (Qt_6_7_0 -) - QByteArray readAllByteArray(); -%End - -private: - QCborStreamReader(const QCborStreamReader &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamwriter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamwriter.sip deleted file mode 100644 index 71dac40..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcborstreamwriter.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qcborstreamwriter.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCborStreamWriter -{ -%TypeHeaderCode -#include -%End - -public: - explicit QCborStreamWriter(QIODevice *device); - explicit QCborStreamWriter(QByteArray *data /Constrained/); - ~QCborStreamWriter(); - void setDevice(QIODevice *device); - QIODevice *device() const; - void append(const QByteArray &ba); - void append(QStringView str); - void append(QCborKnownTags tag); - void append(QCborSimpleType st); - void append(bool b /Constrained/); - void append(double d /Constrained/); - void append(SIP_PYOBJECT /TypeHint="int"/); -%MethodCode - static PyObject *zero = 0; - - if (!zero) - zero = PyLong_FromLong(0); - - if (PyObject_RichCompareBool(a0, zero, Py_LT) > 0) - { - PyErr_Clear(); - qint64 val = sipLong_AsLongLong(a0); - - if (PyErr_Occurred()) - sipError = sipErrorFail; - else - sipCpp->append(val); - } - else - { - PyErr_Clear(); - quint64 val = sipLong_AsUnsignedLongLong(a0); - - if (PyErr_Occurred()) - sipError = sipErrorFail; - else - sipCpp->append(val); - } -%End - - void appendNull(); - void appendUndefined(); - void startArray(); - void startArray(quint64 count); - bool endArray(); - void startMap(); - void startMap(quint64 count); - bool endMap(); - -private: - QCborStreamWriter(const QCborStreamWriter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qchar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qchar.sip deleted file mode 100644 index e2d5e23..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qchar.sip +++ /dev/null @@ -1,51 +0,0 @@ -// This is the SIP interface definition for the QChar mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QChar /TypeHint="str",TypeHintValue="''"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) - return PyUnicode_Check(sipPy); - -// TODO: review replacing with something more efficient. -QString qs = qpycore_PyObject_AsQString(sipPy); - -if (qs.size() != 1) -{ - PyErr_SetString(PyExc_ValueError, "string of length 1 expected"); - *sipIsErr = 1; - return 0; -} - -*sipCppPtr = new QChar(qs.at(0)); - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode - // TODO: replace with... - // return PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, sipCpp, 1); - return qpycore_PyObject_FromQString(QString(*sipCpp)); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcollator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcollator.sip deleted file mode 100644 index 16879a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcollator.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qcollator.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCollatorSortKey -{ -%TypeHeaderCode -#include -%End - -public: - QCollatorSortKey(const QCollatorSortKey &other); - ~QCollatorSortKey(); - void swap(QCollatorSortKey &other /Constrained/); - int compare(const QCollatorSortKey &key) const; - -private: - QCollatorSortKey(); -}; - -bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs); - -class QCollator -{ -%TypeHeaderCode -#include -%End - -public: - QCollator(); - explicit QCollator(const QLocale &locale); - QCollator(const QCollator &); - ~QCollator(); - void swap(QCollator &other /Constrained/); - void setLocale(const QLocale &locale); - QLocale locale() const; - Qt::CaseSensitivity caseSensitivity() const; - void setCaseSensitivity(Qt::CaseSensitivity cs); - void setNumericMode(bool on); - bool numericMode() const; - void setIgnorePunctuation(bool on); - bool ignorePunctuation() const; - int compare(const QString &s1, const QString &s2) const; - QCollatorSortKey sortKey(const QString &string) const; -%If (Qt_6_3_0 -) - static int defaultCompare(QStringView s1, QStringView s2); -%End -%If (Qt_6_3_0 -) - static QCollatorSortKey defaultSortKey(QStringView key); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineoption.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineoption.sip deleted file mode 100644 index be79f3e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineoption.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qcommandlineoption.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCommandLineOption -{ -%TypeHeaderCode -#include -%End - -public: - explicit QCommandLineOption(const QString &name); - explicit QCommandLineOption(const QStringList &names); - QCommandLineOption(const QString &name, const QString &description, const QString &valueName = QString(), const QString &defaultValue = QString()); - QCommandLineOption(const QStringList &names, const QString &description, const QString &valueName = QString(), const QString &defaultValue = QString()); - QCommandLineOption(const QCommandLineOption &other); - ~QCommandLineOption(); - void swap(QCommandLineOption &other /Constrained/); - QStringList names() const; - void setValueName(const QString &name); - QString valueName() const; - void setDescription(const QString &description); - QString description() const; - void setDefaultValue(const QString &defaultValue); - void setDefaultValues(const QStringList &defaultValues); - QStringList defaultValues() const; - - enum Flag /BaseType=Flag/ - { - HiddenFromHelp, - ShortOptionStyle, - }; - - typedef QFlags Flags; - QCommandLineOption::Flags flags() const; - void setFlags(QCommandLineOption::Flags aflags); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineparser.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineparser.sip deleted file mode 100644 index 783d0a3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcommandlineparser.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qcommandlineparser.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCommandLineParser -{ -%TypeHeaderCode -#include -%End - -public: - QCommandLineParser(); - ~QCommandLineParser(); - - enum SingleDashWordOptionMode - { - ParseAsCompactedShortOptions, - ParseAsLongOptions, - }; - - void setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode parsingMode); - bool addOption(const QCommandLineOption &commandLineOption); - QCommandLineOption addVersionOption(); - QCommandLineOption addHelpOption(); - void setApplicationDescription(const QString &description); - QString applicationDescription() const; - void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString()); - void clearPositionalArguments(); - void process(const QStringList &arguments) /ReleaseGIL/; - void process(const QCoreApplication &app) /ReleaseGIL/; - bool parse(const QStringList &arguments); - QString errorText() const; - bool isSet(const QString &name) const; - QString value(const QString &name) const; - QStringList values(const QString &name) const; - bool isSet(const QCommandLineOption &option) const; - QString value(const QCommandLineOption &option) const; - QStringList values(const QCommandLineOption &option) const; - QStringList positionalArguments() const; - QStringList optionNames() const; - QStringList unknownOptionNames() const; - void showHelp(int exitCode = 0) /ReleaseGIL/; - QString helpText() const; - bool addOptions(const QList &options); - void showVersion(); - - enum OptionsAfterPositionalArgumentsMode - { - ParseAsOptions, - ParseAsPositionalArguments, - }; - - void setOptionsAfterPositionalArgumentsMode(QCommandLineParser::OptionsAfterPositionalArgumentsMode mode); - -private: - QCommandLineParser(const QCommandLineParser &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qconcatenatetablesproxymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qconcatenatetablesproxymodel.sip deleted file mode 100644 index f59ad9a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qconcatenatetablesproxymodel.sip +++ /dev/null @@ -1,90 +0,0 @@ -// qconcatenatetablesproxymodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QConcatenateTablesProxyModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QConcatenateTablesProxyModel(QObject *parent /TransferThis/ = 0); - virtual ~QConcatenateTablesProxyModel(); - void addSourceModel(QAbstractItemModel *sourceModel /GetWrapper/); -%MethodCode - // We want to keep a reference to the model but this is in addition to the - // existing ones and does not replace them - so we can't use /KeepReference/. - sipCpp->addSourceModel(a0); - - // Use the user object as a list of the references. - PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); - - if (!user) - { - user = PyList_New(0); - sipSetUserObject((sipSimpleWrapper *)sipSelf, user); - } - - if (user) - PyList_Append(user, a0Wrapper); -%End - - void removeSourceModel(QAbstractItemModel *sourceModel /GetWrapper/); -%MethodCode - // Discard the extra model reference that we took in addSourceModel(). - sipCpp->removeSourceModel(a0); - - // Use the user object as a list of the references. - PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); - - if (user) - { - Py_ssize_t i = 0; - - // Note that we deal with an object appearing in the list more than once. - while (i < PyList_Size(user)) - if (PyList_GetItem(user, i) == a0Wrapper) - PyList_SetSlice(user, i, i + 1, NULL); - else - ++i; - } -%End - - QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QMap itemData(const QModelIndex &proxyIndex) const; - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex parent(const QModelIndex &index) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; - virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual QSize span(const QModelIndex &index) const; - QList sourceModels() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreapplication.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreapplication.sip deleted file mode 100644 index a4fe5a8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreapplication.sip +++ /dev/null @@ -1,410 +0,0 @@ -// qcoreapplication.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QCoreApplication : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QCoreApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = QCoreApplication::ApplicationFlags)]; -%MethodCode - // The Python interface is a list of argument strings that is modified. - - int argc; - char **argv; - - // Convert the list. - if ((argv = pyqt6_from_argv_list(a0, argc)) == NULL) - sipIsErr = 1; - else - { - // Create it now the arguments are right. - static int nargc; - nargc = argc; - - Py_BEGIN_ALLOW_THREADS - sipCpp = new sipQCoreApplication(nargc, argv, QT_VERSION); - Py_END_ALLOW_THREADS - - // Now modify the original list. - pyqt6_update_argv_list(a0, argc, argv); - } -%End - - virtual ~QCoreApplication() /ReleaseGIL/; -%MethodCode - pyqt6_cleanup_qobjects(); -%End - - static void setOrganizationDomain(const QString &orgDomain); - static QString organizationDomain(); - static void setOrganizationName(const QString &orgName); - static QString organizationName(); - static void setApplicationName(const QString &application); - static QString applicationName(); - static QStringList arguments(); - static QCoreApplication *instance(); - static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) /ReleaseGIL/; - static void processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime) /ReleaseGIL/; -%If (Qt_6_7_0 -) - static void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline) /ReleaseGIL/; -%End - static bool sendEvent(QObject *receiver, QEvent *event) /ReleaseGIL/; - static void postEvent(QObject *receiver, QEvent *event /Transfer/, int priority = Qt::NormalEventPriority); - static void sendPostedEvents(QObject *receiver = 0, int eventType = 0) /ReleaseGIL/; - static void removePostedEvents(QObject *receiver, int eventType = 0); - virtual bool notify(QObject *, QEvent *) /ReleaseGIL/; - static bool startingUp(); - static bool closingDown(); - static QString applicationDirPath(); - static QString applicationFilePath(); - static void setLibraryPaths(const QStringList &); - static QStringList libraryPaths(); - static void addLibraryPath(const QString &); - static void removeLibraryPath(const QString &); - static bool installTranslator(QTranslator *messageFile); - static bool removeTranslator(QTranslator *messageFile); - static QString translate(const char *context, const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1); - static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true); - static bool testAttribute(Qt::ApplicationAttribute attribute); - -public slots: - static void quit(); -%If (Qt_6_1_0 -) - static void exit(int returnCode = 0); -%End - -public: -%If (- Qt_6_1_0) - static void exit(int returnCode = 0); -%End - -signals: - void aboutToQuit(); - -protected: - virtual bool event(QEvent *); - -public: - static void setApplicationVersion(const QString &version); - static QString applicationVersion(); - static qint64 applicationPid(); - static QAbstractEventDispatcher *eventDispatcher(); - static void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/); - static bool isQuitLockEnabled(); - static void setQuitLockEnabled(bool enabled); - void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); - void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); - static void setSetuidAllowed(bool allow); - static bool isSetuidAllowed(); - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - // Make sure the QCoreApplication is destroyed. - delete sipCpp; -%End - -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - Qt::PermissionStatus checkPermission(const QPermission &permission); -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - void requestPermission(const QPermission &permission, SIP_PYCALLABLE handler /TypeHint="Callable[[QPermission], None]"/) /ReleaseGIL/; -%MethodCode - // Make sure the callable doesn't get garbage collected until it is invoked. - Py_INCREF(a1); - - Py_BEGIN_ALLOW_THREADS - - sipCpp->requestPermission(*a0, [a1](const QPermission &arg0) { - SIP_BLOCK_THREADS - - PyObject *res; - - res = sipCallMethod(NULL, a1, "N", new QPermission(arg0), sipType_QPermission, NULL); - - Py_DECREF(a1); - - if (!res) - pyqt6_err_print(); - else - Py_DECREF(res); - - SIP_UNBLOCK_THREADS - }); - - Py_END_ALLOW_THREADS -%End - -%End -%End -}; - -void qAddPostRoutine(SIP_PYCALLABLE); -%MethodCode - // Add it to the list of post routines if it already exists. - if (qtcore_PostRoutines != NULL) - { - // See if there is an empty slot. - bool app = true; - - for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) - if (PyList_GetItem(qtcore_PostRoutines, i) == Py_None) - { - Py_INCREF(a0); - PyList_SetItem(qtcore_PostRoutines, i, a0); - - app = false; - - break; - } - - if (app && PyList_Append(qtcore_PostRoutines, a0) < 0) - sipIsErr = 1; - } - else if ((qtcore_PostRoutines = PyList_New(1)) != NULL) - { - Py_INCREF(a0); - PyList_SetItem(qtcore_PostRoutines, 0, a0); - - qAddPostRoutine(qtcore_CallPostRoutines); - } - else - { - sipIsErr = 1; - } -%End - -void qRemovePostRoutine(SIP_PYCALLABLE); -%MethodCode - // Remove it from the list of post routines if it exists. - if (qtcore_PostRoutines != NULL) - for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) - if (PyList_GetItem(qtcore_PostRoutines, i) == a0) - { - Py_INCREF(Py_None); - PyList_SetItem(qtcore_PostRoutines, i, Py_None); - - break; - } -%End - -void qAddPreRoutine(SIP_PYCALLABLE routine /TypeHint="Callable[[], None]"/); -%MethodCode - // Add it to the list of pre routines if it already exists. - if (qtcore_PreRoutines != NULL) - { - if (PyList_Append(qtcore_PreRoutines, a0) < 0) - sipIsErr = 1; - } - else if ((qtcore_PreRoutines = PyList_New(1)) != NULL) - { - Py_INCREF(a0); - PyList_SetItem(qtcore_PreRoutines, 0, a0); - - qAddPreRoutine(qtcore_CallPreRoutines); - } - else - { - sipIsErr = 1; - } -%End - -// Module code needed by qAddPreRoutine, qAddPostRoutine() and qRemovePostRoutine(). -%ModuleCode -// The list of Python pre routines. -static PyObject *qtcore_PreRoutines = NULL; - -// Call all of the registered Python pre routines. -static void qtcore_CallPreRoutines() -{ - for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PreRoutines); ++i) - { - PyObject *pr = PyList_GetItem(qtcore_PreRoutines, i); - - if (pr != Py_None) - { - PyObject *res = PyObject_CallObject(pr, NULL); - - Py_XDECREF(res); - } - } -} - - -// The list of Python post routines. -static PyObject *qtcore_PostRoutines = NULL; - -// Call all of the registered Python post routines. -static void qtcore_CallPostRoutines() -{ - for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) - { - PyObject *pr = PyList_GetItem(qtcore_PostRoutines, i); - - if (pr != Py_None) - { - PyObject *res = PyObject_CallObject(pr, NULL); - - Py_XDECREF(res); - } - } -} -%End -void pyqtRemoveInputHook(); -%MethodCode - // Clear the Python input hook installed when the module was initialised. - PyOS_InputHook = 0; -%End - -void pyqtRestoreInputHook(); -%MethodCode - // Restore the input hook. - PyOS_InputHook = qtcore_input_hook; -%End - -%ModuleCode -#include -#include -#include - -#if defined(Q_OS_WIN) -#include -#include -#else -#include -#endif - -// This is the input hook that will process events while the interpreter is -// waiting for interactive input. -extern "C" {static int qtcore_input_hook();} - -static int qtcore_input_hook() -{ - QCoreApplication *app = QCoreApplication::instance(); - - if (app && app->thread() == QThread::currentThread()) - { - QEventLoop loop; -#if defined(Q_OS_WIN) - QTimer timer; - QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); - - while (!_kbhit()) - { - // The delay is based on feedback from users. - timer.start(35); - loop.exec(); - timer.stop(); - } - - QObject::disconnect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); -#else - QSocketNotifier notifier(0, QSocketNotifier::Read, 0); - QObject::connect(¬ifier, SIGNAL(activated(int)), &loop, SLOT(quit())); - loop.exec(); - QObject::disconnect(¬ifier, SIGNAL(activated(int)), &loop, SLOT(quit())); -#endif - } - - return 0; -} -%End - -%PostInitialisationCode -// Process events from the input hook. -PyOS_InputHook = qtcore_input_hook; -%End - -%ExportedTypeHintCode -# Support for QDate, QDateTime and QTime. -import datetime - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] -%End - -%TypeHintCode -# Support for QDate, QDateTime and QTime. -import datetime - - -# Support for new-style signals and slots. -class pyqtSignal: - - signatures = ... # type: typing.Tuple[str, ...] - - def __init__(self, *types: typing.Any, name: str = ...) -> None: ... - - @typing.overload - def __get__(self, instance: None, owner: typing.Type['QObject']) -> 'pyqtSignal': ... - - @typing.overload - def __get__(self, instance: 'QObject', owner: typing.Type['QObject']) -> 'pyqtBoundSignal': ... - - - -class pyqtBoundSignal: - - signal = ... # type: str - - def __getitem__(self, key: object) -> 'pyqtBoundSignal': ... - - def connect(self, slot: 'PYQT_SLOT') -> 'QMetaObject.Connection': ... - - @typing.overload - def disconnect(self) -> None: ... - - @typing.overload - def disconnect(self, slot: typing.Union['PYQT_SLOT', 'QMetaObject.Connection']) -> None: ... - - def emit(self, *args: typing.Any) -> None: ... - - -FuncT = typing.TypeVar('FuncT', bound=typing.Callable) -def pyqtSlot(*types, name: typing.Optional[str] = ..., result: typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ... - - -# For QObject.findChild() and QObject.findChildren(). -QObjectT = typing.TypeVar('QObjectT', bound=QObject) - - -# Convenient type aliases. -PYQT_SIGNAL = typing.Union[pyqtSignal, pyqtBoundSignal] -PYQT_SLOT = typing.Union[typing.Callable[..., Any], pyqtBoundSignal] -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreevent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreevent.sip deleted file mode 100644 index 8b66fb5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcoreevent.sip +++ /dev/null @@ -1,293 +0,0 @@ -// qcoreevent.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QEvent /NoDefaultCtors,Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QEvent::Timer: - sipType = sipType_QTimerEvent; - break; - - case QEvent::ChildAdded: - case QEvent::ChildPolished: - case QEvent::ChildRemoved: - sipType = sipType_QChildEvent; - break; - - case QEvent::DynamicPropertyChange: - sipType = sipType_QDynamicPropertyChangeEvent; - break; - - default: - sipType = 0; - } -%End - -public: - enum Type /BaseType=IntEnum/ - { - None, - Timer, - MouseButtonPress, - MouseButtonRelease, - MouseButtonDblClick, - MouseMove, - KeyPress, - KeyRelease, - FocusIn, - FocusOut, - Enter, - Leave, - Paint, - Move, - Resize, - Show, - Hide, - Close, - Quit, - ParentChange, - ParentAboutToChange, - ThreadChange, - WindowActivate, - WindowDeactivate, - ShowToParent, - HideToParent, - Wheel, - WindowTitleChange, - WindowIconChange, - ApplicationWindowIconChange, - ApplicationFontChange, - ApplicationLayoutDirectionChange, - ApplicationPaletteChange, - PaletteChange, - Clipboard, - MetaCall, - SockAct, - WinEventAct, - DeferredDelete, - DragEnter, - DragMove, - DragLeave, - Drop, - ChildAdded, - ChildPolished, - ChildRemoved, - PolishRequest, - Polish, - LayoutRequest, - UpdateRequest, - UpdateLater, - ContextMenu, - InputMethod, - TabletMove, - LocaleChange, - LanguageChange, - LayoutDirectionChange, - TabletPress, - TabletRelease, - OkRequest, - IconDrag, - FontChange, - EnabledChange, - ActivationChange, - StyleChange, - IconTextChange, - ModifiedChange, - MouseTrackingChange, - WindowBlocked, - WindowUnblocked, - WindowStateChange, - ToolTip, - WhatsThis, - StatusTip, - ActionChanged, - ActionAdded, - ActionRemoved, - FileOpen, - Shortcut, - ShortcutOverride, - WhatsThisClicked, - ToolBarChange, - ApplicationActivate, - ApplicationActivated, - ApplicationDeactivate, - ApplicationDeactivated, - QueryWhatsThis, - EnterWhatsThisMode, - LeaveWhatsThisMode, - ZOrderChange, - HoverEnter, - HoverLeave, - HoverMove, - GraphicsSceneMouseMove, - GraphicsSceneMousePress, - GraphicsSceneMouseRelease, - GraphicsSceneMouseDoubleClick, - GraphicsSceneContextMenu, - GraphicsSceneHoverEnter, - GraphicsSceneHoverMove, - GraphicsSceneHoverLeave, - GraphicsSceneHelp, - GraphicsSceneDragEnter, - GraphicsSceneDragMove, - GraphicsSceneDragLeave, - GraphicsSceneDrop, - GraphicsSceneWheel, - GraphicsSceneResize, - GraphicsSceneMove, - KeyboardLayoutChange, - DynamicPropertyChange, - TabletEnterProximity, - TabletLeaveProximity, - NonClientAreaMouseMove, - NonClientAreaMouseButtonPress, - NonClientAreaMouseButtonRelease, - NonClientAreaMouseButtonDblClick, - MacSizeChange, - ContentsRectChange, - CursorChange, - ToolTipChange, - GrabMouse, - UngrabMouse, - GrabKeyboard, - UngrabKeyboard, - StateMachineSignal, - StateMachineWrapped, - TouchBegin, - TouchUpdate, - TouchEnd, - NativeGesture, - RequestSoftwareInputPanel, - CloseSoftwareInputPanel, - WinIdChange, - Gesture, - GestureOverride, - FocusAboutToChange, - ScrollPrepare, - Scroll, - Expose, - InputMethodQuery, - OrientationChange, - TouchCancel, - PlatformPanel, - ApplicationStateChange, - ReadOnlyChange, - PlatformSurface, - TabletTrackingChange, - GraphicsSceneLeave, - EnterEditFocus, - LeaveEditFocus, -%If (Qt_6_6_0 -) - DevicePixelRatioChange, -%End -%If (Qt_6_7_0 -) - ChildWindowAdded, -%End -%If (Qt_6_7_0 -) - ChildWindowRemoved, -%End -%If (Qt_6_7_0 -) - ParentWindowAboutToChange, -%End -%If (Qt_6_7_0 -) - ParentWindowChange, -%End - User, - MaxUser, - }; - - explicit QEvent(QEvent::Type type); - QEvent(int type) /Deprecated, NoDerived/; -%MethodCode - // This overload allows an int to be passed as is rather than being wrapped in - // a QEvent.Type. This was usefull before enums supported missing members and - // is now deprecated. - - sipCpp = new sipQEvent(static_cast(a0)); -%End - - virtual ~QEvent(); - QEvent::Type type() const; - bool spontaneous() const; - virtual void setAccepted(bool accepted); - bool isAccepted() const; - void accept(); - void ignore(); - static int registerEventType(int hint = -1); - bool isInputEvent() const; - bool isPointerEvent() const; - bool isSinglePointEvent() const; - virtual QEvent *clone() const /Factory/; -}; - -class QTimerEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTimerEvent(int timerId); - virtual ~QTimerEvent(); - int timerId() const; - virtual QTimerEvent *clone() const /Factory/; -}; - -class QChildEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QChildEvent(QEvent::Type type, QObject *child); - QChildEvent(int type, QObject *child) /NoDerived/; -%MethodCode - sipCpp = new sipQChildEvent(static_cast(a0), a1); -%End - - virtual ~QChildEvent(); - QObject *child() const; - bool added() const; - bool polished() const; - bool removed() const; - virtual QChildEvent *clone() const /Factory/; -}; - -class QDynamicPropertyChangeEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDynamicPropertyChangeEvent(const QByteArray &name); - virtual ~QDynamicPropertyChangeEvent(); - QByteArray propertyName() const; - virtual QDynamicPropertyChangeEvent *clone() const /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcryptographichash.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcryptographichash.sip deleted file mode 100644 index 173c913..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qcryptographichash.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qcryptographichash.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCryptographicHash -{ -%TypeHeaderCode -#include -%End - -public: - enum Algorithm - { - Md4, - Md5, - Sha1, - Sha224, - Sha256, - Sha384, - Sha512, - Sha3_224, - Sha3_256, - Sha3_384, - Sha3_512, - Keccak_224, - Keccak_256, - Keccak_384, - Keccak_512, - Blake2b_160, - Blake2b_256, - Blake2b_384, - Blake2b_512, - Blake2s_128, - Blake2s_160, - Blake2s_224, - Blake2s_256, - }; - - explicit QCryptographicHash(QCryptographicHash::Algorithm method); - ~QCryptographicHash(); - void reset(); -%If (Qt_6_3_0 -) - void addData(QByteArrayView data); -%End -%If (- Qt_6_3_0) - void addData(const QByteArray &data); -%End - void addData(const char *data /Array/, qsizetype length /ArraySize/); - bool addData(QIODevice *device); - QByteArray result() const; -%If (Qt_6_3_0 -) - QByteArrayView resultView() const; -%End -%If (Qt_6_3_0 -) - static QByteArray hash(QByteArrayView data, QCryptographicHash::Algorithm method); -%End -%If (- Qt_6_3_0) - static QByteArray hash(const QByteArray &data, QCryptographicHash::Algorithm method); -%End - static int hashLength(QCryptographicHash::Algorithm method); -%If (Qt_6_5_0 -) - void swap(QCryptographicHash &other /Constrained/); -%End -%If (Qt_6_5_0 -) - QCryptographicHash::Algorithm algorithm() const; -%End -%If (Qt_6_5_0 -) - static bool supportsAlgorithm(QCryptographicHash::Algorithm method); -%End - -private: - QCryptographicHash(const QCryptographicHash &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatastream.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatastream.sip deleted file mode 100644 index 35f15a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatastream.sip +++ /dev/null @@ -1,630 +0,0 @@ -// qdatastream.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDataStream : public QIODeviceBase -{ -%TypeHeaderCode -#include -%End - -public: - enum Version /BaseType=IntEnum/ - { - Qt_1_0, - Qt_2_0, - Qt_2_1, - Qt_3_0, - Qt_3_1, - Qt_3_3, - Qt_4_0, - Qt_4_1, - Qt_4_2, - Qt_4_3, - Qt_4_4, - Qt_4_5, - Qt_4_6, - Qt_4_7, - Qt_4_8, - Qt_4_9, - Qt_5_0, - Qt_5_1, - Qt_5_2, - Qt_5_3, - Qt_5_4, - Qt_5_5, - Qt_5_6, - Qt_5_7, - Qt_5_8, - Qt_5_9, - Qt_5_10, - Qt_5_11, - Qt_5_12, - Qt_5_13, - Qt_5_14, - Qt_5_15, - Qt_6_0, -%If (Qt_6_1_0 -) - Qt_6_1, -%End -%If (Qt_6_2_0 -) - Qt_6_2, -%End -%If (Qt_6_3_0 -) - Qt_6_3, -%End -%If (Qt_6_4_0 -) - Qt_6_4, -%End -%If (Qt_6_5_0 -) - Qt_6_5, -%End -%If (Qt_6_6_0 -) - Qt_6_6, -%End -%If (Qt_6_7_0 -) - Qt_6_7, -%End - }; - - enum ByteOrder - { - BigEndian, - LittleEndian, - }; - - enum Status - { - Ok, - ReadPastEnd, - ReadCorruptData, - WriteFailed, -%If (Qt_6_7_0 -) - SizeLimitExceeded, -%End - }; - - enum FloatingPointPrecision - { - SinglePrecision, - DoublePrecision, - }; - - QDataStream(); - explicit QDataStream(QIODevice *); - QDataStream(QByteArray * /Constrained/, QIODeviceBase::OpenMode flags); - QDataStream(const QByteArray &); - ~QDataStream(); - QIODevice *device() const; - void setDevice(QIODevice *); - bool atEnd() const; - QDataStream::Status status() const; - void setStatus(QDataStream::Status status); - void resetStatus(); - QDataStream::FloatingPointPrecision floatingPointPrecision() const; - void setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision); - QDataStream::ByteOrder byteOrder() const; - void setByteOrder(QDataStream::ByteOrder); - int version() const; - void setVersion(int); -%If (Qt_6_7_0 -) - SIP_PYOBJECT readBytes() /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - char *s; - qint64 l; - - Py_BEGIN_ALLOW_THREADS - sipCpp->readBytes(s, l); - Py_END_ALLOW_THREADS - - if ((sipRes = PyBytes_FromStringAndSize(s, l)) == NULL) - sipIsErr = 1; - - if (s) - delete[] s; -%End - -%End -%If (- Qt_6_7_0) - SIP_PYOBJECT readBytes() /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - char *s; - uint l; - - Py_BEGIN_ALLOW_THREADS - sipCpp->readBytes(s, l); - Py_END_ALLOW_THREADS - - if ((sipRes = PyBytes_FromStringAndSize(s, l)) == NULL) - sipIsErr = 1; - - if (s) - delete[] s; -%End - -%End -%If (Qt_6_7_0 -) - SIP_PYOBJECT readRawData(qint64 len) /Encoding="None",ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->readRawData(s, a0); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - -%End -%If (- Qt_6_7_0) - SIP_PYOBJECT readRawData(int len) /Encoding="None",ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - int len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->readRawData(s, a0); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - -%End -%If (Qt_6_7_0 -) - QDataStream &writeBytes(SIP_PYBUFFER) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = &sipCpp->writeBytes(reinterpret_cast(bi.bi_buf), - bi.bi_len); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%End -%If (- Qt_6_7_0) - QDataStream &writeBytes(SIP_PYBUFFER) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = &sipCpp->writeBytes(reinterpret_cast(bi.bi_buf), - bi.bi_len); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%End -%If (Qt_6_7_0 -) - qint64 writeRawData(SIP_PYBUFFER) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->writeRawData(reinterpret_cast(bi.bi_buf), - bi.bi_len); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%End -%If (- Qt_6_7_0) - int writeRawData(SIP_PYBUFFER) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->writeRawData(reinterpret_cast(bi.bi_buf), - bi.bi_len); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%End -%If (Qt_6_7_0 -) - qint64 skipRawData(qint64 len) /ReleaseGIL/; -%End -%If (- Qt_6_7_0) - int skipRawData(int len) /ReleaseGIL/; -%End - void startTransaction(); - bool commitTransaction(); - void rollbackTransaction(); - void abortTransaction(); -// Extra methods to give explicit control over the simple data types being read and written. -int readInt() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -qint8 readInt8() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -quint8 readUInt8() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -qint16 readInt16() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -quint16 readUInt16() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -qint32 readInt32() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -quint32 readUInt32() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -qint64 readInt64() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -quint64 readUInt64() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -bool readBool() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -float readFloat() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -double readDouble() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp >> sipRes; - Py_END_ALLOW_THREADS -%End - -SIP_PYOBJECT readString() /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Note that this should really be called readCString(). - - char *s; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> s; - Py_END_ALLOW_THREADS - - if (s) - { - sipRes = PyBytes_FromString(s); - delete[] s; - } - else - { - sipRes = Py_None; - Py_INCREF(Py_None); - } -%End - -void writeInt(int i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeInt8(qint8 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeUInt8(quint8 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeInt16(qint16 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeUInt16(quint16 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeInt32(qint32 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeUInt32(quint32 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeInt64(qint64 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeUInt64(quint64 i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeBool(bool i) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeFloat(float f) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeDouble(double f) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -void writeString(const char *str /Encoding="None"/) /ReleaseGIL/; -%MethodCode - // Note that this should really be called writeCString(). - Py_BEGIN_ALLOW_THREADS - *sipCpp << a0; - Py_END_ALLOW_THREADS -%End - -QString readQString() /ReleaseGIL/; -%MethodCode - sipRes = new QString; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQString(const QString &qstr) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -QStringList readQStringList() /ReleaseGIL/; -%MethodCode - sipRes = new QStringList; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQStringList(const QStringList &qstrlst) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -QVariant readQVariant() /ReleaseGIL/; -%MethodCode - sipRes = new QVariant; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQVariant(const QVariant &qvar) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -QVariantList readQVariantList() /ReleaseGIL/; -%MethodCode - sipRes = new QVariantList; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQVariantList(const QVariantList &qvarlst) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -QVariantMap readQVariantMap() /ReleaseGIL/; -%MethodCode - sipRes = new QVariantMap; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQVariantMap(const QVariantMap &qvarmap) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -QVariantHash readQVariantHash() /ReleaseGIL/; -%MethodCode - sipRes = new QVariantHash; - - Py_BEGIN_ALLOW_THREADS - *sipCpp >> *sipRes; - Py_END_ALLOW_THREADS -%End - -void writeQVariantHash(const QVariantHash &qvarhash) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - *sipCpp << *a0; - Py_END_ALLOW_THREADS -%End - -private: - QDataStream(const QDataStream &); -}; - -QDataStream &operator>>(QDataStream &s, QKeyCombination &combination /Constrained/) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &s, QKeyCombination combination) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatetime.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatetime.sip deleted file mode 100644 index 96b253e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdatetime.sip +++ /dev/null @@ -1,583 +0,0 @@ -// qdatetime.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDate /TypeHintIn="Union[QDate, datetime.date]"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -#include -%End - -%ConvertToTypeCode -// Allow a Python date object whenever a QDate is expected. - -if (sipIsErr == NULL) - return (sipGetDate(sipPy, 0) || - sipCanConvertToType(sipPy, sipType_QDate, SIP_NO_CONVERTORS)); - -sipDateDef py_date; - -if (sipGetDate(sipPy, &py_date)) -{ - *sipCppPtr = new QDate(py_date.pd_year, - py_date.pd_month, - py_date.pd_day); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QDate, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -%PickleCode - sipRes = Py_BuildValue("iii", sipCpp->year(), sipCpp->month(), sipCpp->day()); -%End - -public: - QDate(); - QDate(int y, int m, int d); - QDate(int y, int m, int d, QCalendar cal); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QDate()"); - } - else - { - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QDate(%i, %i, %i)", sipCpp->year(), - sipCpp->month(), sipCpp->day()); - } -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(sipCpp->toString(Qt::ISODate)); -%End - - SIP_PYOBJECT toPyDate() const /TypeHint="datetime.date"/; -%MethodCode - // Convert to a Python date object. - sipDateDef py_date; - - py_date.pd_year = sipCpp->year(); - py_date.pd_month = sipCpp->month(); - py_date.pd_day = sipCpp->day(); - - sipRes = sipFromDate(&py_date); -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - bool isValid() const; - int year() const; - int year(QCalendar cal) const; - int month() const; - int month(QCalendar cal) const; - int day() const; - int day(QCalendar cal) const; - int dayOfWeek() const; - int dayOfWeek(QCalendar cal) const; - int dayOfYear() const; - int dayOfYear(QCalendar cal) const; - int daysInMonth() const; - int daysInMonth(QCalendar cal) const; - int daysInYear() const; - int daysInYear(QCalendar cal) const; - int weekNumber(int *yearNumber = 0) const; - // In Qt v6.7 this was replaced by two overloads bu twe need to retain the optional keyword argument. - QString toString(const QString &format, QCalendar cal = QCalendar()) const; - QString toString(Qt::DateFormat format = Qt::TextDate) const; - QDate addDays(qint64 days) const; - QDate addMonths(int months) const; - QDate addMonths(int months, QCalendar cal) const; - QDate addYears(int years) const; - QDate addYears(int years, QCalendar cal) const; - static QDate currentDate(); - static QDate fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); - // Qt v6.7 replaced this with two overloads but we need to retain the optional keyword argument. - static QDate fromString(const QString &string, const QString &format, QCalendar cal = QCalendar()); -%If (Qt_6_7_0 -) - // This replaces two overloads added in Qy v6.7 designed to maintain compatibility regarding optional keyword arguments. - static QDate fromString(const QString &string, const QString &format, int baseYear, QCalendar cal = QCalendar()); -%End - static bool isValid(int y, int m, int d); - static bool isLeapYear(int year); - static QDate fromJulianDay(qint64 jd); - qint64 toJulianDay() const; - bool setDate(int year, int month, int date); - void getDate(int *year, int *month, int *day) const; - // The arguments are marked as deprecated in Qt v6.9. - QDateTime startOfDay(Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) const; - QDateTime startOfDay(const QTimeZone &zone) const; - // The arguments are marked as deprecated in Qt v6.9. - QDateTime endOfDay(Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) const; - QDateTime endOfDay(const QTimeZone &zone) const; - bool setDate(int year, int month, int day, QCalendar cal); - qint64 daysTo(QDate d) const; -}; - -class QTime /TypeHintIn="Union[QTime, datetime.time]"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -#include -%End - -%ConvertToTypeCode -// Allow a Python time object whenever a QTime is expected. - -if (sipIsErr == NULL) - return (sipGetTime(sipPy, 0) || - sipCanConvertToType(sipPy, sipType_QTime, SIP_NO_CONVERTORS)); - -sipTimeDef py_time; - -if (sipGetTime(sipPy, &py_time)) -{ - *sipCppPtr = new QTime(py_time.pt_hour, - py_time.pt_minute, - py_time.pt_second, - py_time.pt_microsecond / 1000); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -%PickleCode - sipRes = Py_BuildValue("iiii", sipCpp->hour(), sipCpp->minute(), sipCpp->second(), sipCpp->msec()); -%End - -public: - QTime(); - QTime(int h, int m, int second = 0, int msec = 0); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QTime()"); - } - else - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QTime(%i, %i", sipCpp->hour(), - sipCpp->minute()); - - if (sipCpp->second() || sipCpp->msec()) - { - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat(", %i", sipCpp->second())); - - if (sipCpp->msec()) - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat(", %i", sipCpp->msec())); - } - - qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); - } -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(sipCpp->toString(Qt::ISODate)); -%End - - SIP_PYOBJECT toPyTime() const /TypeHint="datetime.time"/; -%MethodCode - // Convert to a Python time object. - sipTimeDef py_time; - - py_time.pt_hour = sipCpp->hour(); - py_time.pt_minute = sipCpp->minute(); - py_time.pt_second = sipCpp->second(); - py_time.pt_microsecond = sipCpp->msec() * 1000; - - sipRes = sipFromTime(&py_time); -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - bool isValid() const; - int hour() const; - int minute() const; - int second() const; - int msec() const; - QString toString(Qt::DateFormat format = Qt::TextDate) const; - QString toString(const QString &format) const; - bool setHMS(int h, int m, int s, int msec = 0); - QTime addSecs(int secs) const; - QTime addMSecs(int ms) const; - static QTime currentTime(); - static QTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); - static QTime fromString(const QString &s, const QString &format); - static bool isValid(int h, int m, int s, int msec = 0); - static QTime fromMSecsSinceStartOfDay(int msecs); - int msecsSinceStartOfDay() const; - int secsTo(QTime t) const; - int msecsTo(QTime t) const; -}; - -class QDateTime /TypeHintIn="Union[QDateTime, datetime.datetime]"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -#include -%End - -%ConvertToTypeCode -// Allow a Python datetime object whenever a QDateTime is expected. - -if (sipIsErr == NULL) - return (sipGetDateTime(sipPy, 0, 0) || - sipCanConvertToType(sipPy, sipType_QDateTime, SIP_NO_CONVERTORS)); - -sipDateDef py_date; -sipTimeDef py_time; - -if (sipGetDateTime(sipPy, &py_date, &py_time)) -{ - QDate qdate(py_date.pd_year, - py_date.pd_month, - py_date.pd_day); - - QTime qtime(py_time.pt_hour, - py_time.pt_minute, - py_time.pt_second, - py_time.pt_microsecond / 1000); - - QDateTime *qdt = new QDateTime(qdate, qtime); - - *sipCppPtr = qdt; - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QDateTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -%PickleCode - QDate qd = sipCpp->date(); - QTime qt = sipCpp->time(); - - sipRes = Py_BuildValue("iiiiiiii", qd.year(), qd.month(), qd.day(), - qt.hour(), qt.minute(), qt.second(), qt.msec(), - (int)sipCpp->timeSpec()); -%End - -public: -%If (Qt_6_7_0 -) - - enum class TransitionResolution - { - Reject, - RelativeToBefore, - RelativeToAfter, - PreferBefore, - PreferAfter, - PreferStandard, - PreferDaylightSaving, - LegacyBehavior, - }; - -%End - QDateTime(); - QDateTime(const QDateTime &other); - QDateTime(int year, int month, int day, int hour, int minute, int second = 0, int msec = 0, int timeSpec = 0) /NoDerived/; -%MethodCode - // This ctor is mainly supplied to allow pickling. - QDate qd(a0, a1, a2); - QTime qt(a3, a4, a5, a6); - - sipCpp = new QDateTime(qd, qt, (Qt::TimeSpec)a7); -%End - -%If (Qt_6_7_0 -) - // The resolve argument is not optional so that the overload with deprecated arguments continues to work. - QDateTime(QDate date, QTime time, QDateTime::TransitionResolution resolve) [(QDate date, QTime time, QDateTime::TransitionResolution resolve = QDateTime::TransitionResolution::LegacyBehavior)]; -%End - // The optional arguments are marked as deprecated in Qt v6.9. - QDateTime(QDate date, QTime time, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0); -%If (Qt_6_7_0 -) - QDateTime(QDate date, QTime time, const QTimeZone &timeZone, QDateTime::TransitionResolution resolve = QDateTime::TransitionResolution::LegacyBehavior); -%End -%If (- Qt_6_7_0) - QDateTime(QDate date, QTime time, const QTimeZone &timeZone); -%End - ~QDateTime(); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QDateTime()"); - } - else - { - QDate qd = sipCpp->date(); - QTime qt = sipCpp->time(); - - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QDateTime(%i, %i, %i, %i, %i", - qd.year(), qd.month(), qd.day(), qt.hour(), qt.minute()); - - if (qt.second() || qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) - { - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat(", %i", qt.second())); - - if (qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) - { - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat(", %i", qt.msec())); - - if (sipCpp->timeSpec() != Qt::LocalTime) - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat(", PyQt6.QtCore.Qt.TimeSpec(%i)", - (int)sipCpp->timeSpec())); - } - } - - qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); - } -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(sipCpp->toString(Qt::ISODate)); -%End - - SIP_PYOBJECT toPyDateTime() const /TypeHint="datetime.datetime"/; -%MethodCode - // Convert to a Python datetime object. - sipDateDef py_date; - QDate qd = sipCpp->date(); - - py_date.pd_year = qd.year(); - py_date.pd_month = qd.month(); - py_date.pd_day = qd.day(); - - sipTimeDef py_time; - QTime qt = sipCpp->time(); - - py_time.pt_hour = qt.hour(); - py_time.pt_minute = qt.minute(); - py_time.pt_second = qt.second(); - py_time.pt_microsecond = qt.msec() * 1000; - - sipRes = sipFromDateTime(&py_date, &py_time); -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - bool isValid() const; - QDate date() const; - QTime time() const; - Qt::TimeSpec timeSpec() const; - void setTimeSpec(Qt::TimeSpec spec); - // This was replaced with two overloads in Qt v6.7 but we need the optional keyword argument. - QString toString(const QString &format, QCalendar cal = QCalendar()) const; - QString toString(Qt::DateFormat format = Qt::TextDate) const; - QDateTime addDays(qint64 days) const; - QDateTime addMonths(int months) const; - QDateTime addYears(int years) const; - QDateTime addSecs(qint64 secs) const; - QDateTime addMSecs(qint64 msecs) const; - QDateTime toTimeSpec(Qt::TimeSpec spec) const; - QDateTime toLocalTime() const; - QDateTime toUTC() const; - qint64 daysTo(const QDateTime &) const; - qint64 secsTo(const QDateTime &) const; - static QDateTime currentDateTime(); -%If (Qt_6_5_0 -) - static QDateTime currentDateTime(const QTimeZone &zone); -%End - static QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); - // Qt v6.7 replaced this with two overloads but we need to retain the optional keyword argument. - static QDateTime fromString(const QString &string, const QString &format, QCalendar cal = QCalendar()); -%If (Qt_6_7_0 -) - // This replaces two overloads added in Qy v6.7 designed to maintain compatibility regarding optional keyword arguments. - static QDateTime fromString(const QString &string, const QString &format, int baseYear, QCalendar cal = QCalendar()); -%End - qint64 toMSecsSinceEpoch() const; - void setMSecsSinceEpoch(qint64 msecs); - qint64 msecsTo(const QDateTime &) const; - static QDateTime currentDateTimeUtc(); - static qint64 currentMSecsSinceEpoch(); - void swap(QDateTime &other /Constrained/); - int offsetFromUtc() const; - QTimeZone timeZone() const; - QString timeZoneAbbreviation() const; - bool isDaylightTime() const; - void setOffsetFromUtc(int offsetSeconds); -%If (Qt_6_7_0 -) - void setTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = QDateTime::TransitionResolution::LegacyBehavior); -%End -%If (- Qt_6_7_0) - void setTimeZone(const QTimeZone &toZone); -%End - QDateTime toOffsetFromUtc(int offsetSeconds) const; - QDateTime toTimeZone(const QTimeZone &toZone) const; - // The optional arguments are marked as deprecated in Qt v6.9. - static QDateTime fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0); - static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone); - qint64 toSecsSinceEpoch() const; - void setSecsSinceEpoch(qint64 secs); - // The optional arguments are marked as deprecated in Qt v6.9. - static QDateTime fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0); - static QDateTime fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone); - static qint64 currentSecsSinceEpoch(); - - enum class YearRange - { - First, - Last, - }; - -%If (Qt_6_7_0 -) - void setDate(QDate date, QDateTime::TransitionResolution resolve = QDateTime::TransitionResolution::LegacyBehavior); -%End -%If (- Qt_6_7_0) - void setDate(QDate date); -%End -%If (Qt_6_7_0 -) - void setTime(QTime time, QDateTime::TransitionResolution resolve = QDateTime::TransitionResolution::LegacyBehavior); -%End -%If (- Qt_6_7_0) - void setTime(QTime time); -%End -%If (Qt_6_5_0 -) - QTimeZone timeRepresentation() const; -%End -}; - -QDataStream &operator<<(QDataStream &, QDate) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QDate & /Constrained/) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &, QTime) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QTime & /Constrained/) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &, const QDateTime &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QDateTime & /Constrained/) /ReleaseGIL/; -%If (Qt_6_7_0 -) -bool operator==(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator==(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator==(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator==(QTime lhs, QTime rhs); -%End -bool operator==(const QDateTime &lhs, const QDateTime &rhs); -%If (Qt_6_7_0 -) -bool operator!=(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator!=(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator!=(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator!=(QTime lhs, QTime rhs); -%End -bool operator!=(const QDateTime &lhs, const QDateTime &rhs); -%If (Qt_6_7_0 -) -bool operator<(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator<(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator<(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator<(QTime lhs, QTime rhs); -%End -bool operator<(const QDateTime &lhs, const QDateTime &rhs); -%If (Qt_6_7_0 -) -bool operator<=(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator<=(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator<=(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator<=(QTime lhs, QTime rhs); -%End -bool operator<=(const QDateTime &lhs, const QDateTime &rhs); -%If (Qt_6_7_0 -) -bool operator>(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator>(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator>(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator>(QTime lhs, QTime rhs); -%End -bool operator>(const QDateTime &lhs, const QDateTime &rhs); -%If (Qt_6_7_0 -) -bool operator>=(const QDate &lhs, const QDate &rhs); -%End -%If (- Qt_6_7_0) -bool operator>=(QDate lhs, QDate rhs); -%End -%If (Qt_6_7_0 -) -bool operator>=(const QTime &lhs, const QTime &rhs); -%End -%If (- Qt_6_7_0) -bool operator>=(QTime lhs, QTime rhs); -%End -bool operator>=(const QDateTime &lhs, const QDateTime &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdeadlinetimer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdeadlinetimer.sip deleted file mode 100644 index c4d2630..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdeadlinetimer.sip +++ /dev/null @@ -1,78 +0,0 @@ -// qdeadlinetimer.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDeadlineTimer -{ -%TypeHeaderCode -#include -%End - -public: -%If (- Qt_6_6_0) - - enum ForeverConstant - { - Forever, - }; - -%End -%If (Qt_6_6_0 -) - - enum class ForeverConstant - { - Forever, - }; - -%End - // This was replaced in Qt v6.6 with two overloads but we need the optional keyword argument. - QDeadlineTimer(Qt::TimerType type = Qt::CoarseTimer); - QDeadlineTimer(QDeadlineTimer::ForeverConstant, Qt::TimerType type = Qt::CoarseTimer); - QDeadlineTimer(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer); - void swap(QDeadlineTimer &other /Constrained/); - bool isForever() const; - bool hasExpired() const; - Qt::TimerType timerType() const; - void setTimerType(Qt::TimerType type); - qint64 remainingTime() const; - qint64 remainingTimeNSecs() const; - void setRemainingTime(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer); - void setPreciseRemainingTime(qint64 secs, qint64 nsecs = 0, Qt::TimerType type = Qt::CoarseTimer); - qint64 deadline() const; - qint64 deadlineNSecs() const; - void setDeadline(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer); - void setPreciseDeadline(qint64 secs, qint64 nsecs = 0, Qt::TimerType type = Qt::CoarseTimer); - static QDeadlineTimer addNSecs(QDeadlineTimer dt, qint64 nsecs); - static QDeadlineTimer current(Qt::TimerType type = Qt::CoarseTimer); - QDeadlineTimer &operator+=(qint64 msecs); - QDeadlineTimer &operator-=(qint64 msecs); -}; - -bool operator==(QDeadlineTimer d1, QDeadlineTimer d2); -bool operator!=(QDeadlineTimer d1, QDeadlineTimer d2); -bool operator<(QDeadlineTimer d1, QDeadlineTimer d2); -bool operator<=(QDeadlineTimer d1, QDeadlineTimer d2); -bool operator>(QDeadlineTimer d1, QDeadlineTimer d2); -bool operator>=(QDeadlineTimer d1, QDeadlineTimer d2); -QDeadlineTimer operator+(QDeadlineTimer dt, qint64 msecs); -QDeadlineTimer operator+(qint64 msecs, QDeadlineTimer dt); -QDeadlineTimer operator-(QDeadlineTimer dt, qint64 msecs); -qint64 operator-(QDeadlineTimer dt1, QDeadlineTimer dt2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdir.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdir.sip deleted file mode 100644 index 5b9d9fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdir.sip +++ /dev/null @@ -1,201 +0,0 @@ -// qdir.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDir -{ -%TypeHeaderCode -#include -%End - -public: - enum Filter /BaseType=Flag/ - { - Dirs, - Files, - Drives, - NoSymLinks, - AllEntries, - TypeMask, - Readable, - Writable, - Executable, - PermissionMask, - Modified, - Hidden, - System, - AccessMask, - AllDirs, - CaseSensitive, - NoDotAndDotDot, - NoFilter, - NoDot, - NoDotDot, - }; - - typedef QFlags Filters; - - enum SortFlag /BaseType=Flag/ - { - Name, - Time, - Size, - Unsorted, - SortByMask, - DirsFirst, - Reversed, - IgnoreCase, - DirsLast, - LocaleAware, - Type, - NoSort, - }; - - typedef QFlags SortFlags; - QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = QDir::SortFlags(QDir::Name | QDir::IgnoreCase), QDir::Filters filters = QDir::AllEntries); - QDir(const QDir &); - QDir(const QString &path = QString()); - ~QDir(); - void setPath(const QString &path); - QString path() const; - QString absolutePath() const; - QString canonicalPath() const; - QString dirName() const; - QString filePath(const QString &fileName) const; - QString absoluteFilePath(const QString &fileName) const; - QString relativeFilePath(const QString &fileName) const; - bool cd(const QString &dirName); - bool cdUp(); - QStringList nameFilters() const; - void setNameFilters(const QStringList &nameFilters); - QDir::Filters filter() const; - void setFilter(QDir::Filters filter); - QDir::SortFlags sorting() const; - void setSorting(QDir::SortFlags sort); -%If (Qt_6_5_0 -) - qsizetype count() const /__len__/; -%MethodCode - sipRes = sipCpp->count(Qt::Disambiguated); -%End - -%End -%If (- Qt_6_5_0) - uint count() const /__len__/; -%End -%If (Qt_6_5_0 -) - QString operator[](qsizetype) const; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QString(sipCpp->operator[]((qsizetype)idx)); -%End - -%End -%If (- Qt_6_5_0) - QString operator[](int) const; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QString(sipCpp->operator[]((int)idx)); -%End - -%End - QStringList operator[](SIP_PYSLICE) const; -%MethodCode - Py_ssize_t start, stop, step, slicelength; - - if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) - { - sipIsErr = 1; - } - else - { - sipRes = new QStringList(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipRes) += (*sipCpp)[start]; - start += step; - } - } -%End - - int __contains__(const QString &) const; -%MethodCode - sipRes = bool(sipCpp->entryList().contains(*a0)); -%End - - static QStringList nameFiltersFromString(const QString &nameFilter); - QStringList entryList(QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort) const; - QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort) const; - QFileInfoList entryInfoList(QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort) const; - QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort) const; -%If (Qt_6_3_0 -) - bool mkdir(const QString &dirName, QFileDevice::Permissions permissions) const; -%End - bool mkdir(const QString &dirName) const; - bool rmdir(const QString &dirName) const; - bool mkpath(const QString &dirPath) const; - bool rmpath(const QString &dirPath) const; - bool isReadable() const; - bool exists() const; - bool isRoot() const; - static bool isRelativePath(const QString &path); - static bool isAbsolutePath(const QString &path); - bool isRelative() const; - bool isAbsolute() const; - bool makeAbsolute(); - bool operator==(const QDir &dir) const; - bool operator!=(const QDir &dir) const; - bool remove(const QString &fileName); - bool rename(const QString &oldName, const QString &newName); - bool exists(const QString &name) const; - void refresh() const; - static QFileInfoList drives(); - static QChar separator(); - static bool setCurrent(const QString &path); - static QDir current(); - static QString currentPath(); - static QDir home(); - static QString homePath(); - static QDir root(); - static QString rootPath(); - static QDir temp(); - static QString tempPath(); - static bool match(const QStringList &filters, const QString &fileName); - static bool match(const QString &filter, const QString &fileName); - static QString cleanPath(const QString &path); - static QString toNativeSeparators(const QString &pathName); - static QString fromNativeSeparators(const QString &pathName); - static void setSearchPaths(const QString &prefix, const QStringList &searchPaths); - static void addSearchPath(const QString &prefix, const QString &path); - static QStringList searchPaths(const QString &prefix); - bool removeRecursively(); - void swap(QDir &other /Constrained/); - static QChar listSeparator(); - bool isEmpty(QDir::Filters filters = QDir::Filters(QDir::AllEntries | QDir::NoDotAndDotDot)) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdiriterator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdiriterator.sip deleted file mode 100644 index be9c773..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qdiriterator.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qdiriterator.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDirIterator -{ -%TypeHeaderCode -#include -%End - -public: - enum IteratorFlag /BaseType=Flag/ - { - NoIteratorFlags, - FollowSymlinks, - Subdirectories, - }; - - typedef QFlags IteratorFlags; - QDirIterator(const QDir &dir, QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags); - QDirIterator(const QString &path, QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags); - QDirIterator(const QString &path, QDir::Filters filter, QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags); - QDirIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags); - ~QDirIterator(); - QString next(); -%If (Qt_6_3_0 -) - QFileInfo nextFileInfo(); -%End - bool hasNext() const; - QString fileName() const; - QString filePath() const; - QFileInfo fileInfo() const; - QString path() const; - -private: - QDirIterator(const QDirIterator &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeasingcurve.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeasingcurve.sip deleted file mode 100644 index 127425c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeasingcurve.sip +++ /dev/null @@ -1,288 +0,0 @@ -// qeasingcurve.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QEasingCurve /TypeHintIn="Union[QEasingCurve, QEasingCurve.Type]"/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// The EasingFunction callback doesn't provide a context so we support a fixed -// number of different functions. - -const int ec_nr_custom_types = 10; - -struct ec_custom_type { - PyObject *py_func; - QEasingCurve::EasingFunction func; -}; - -static qreal ec_call(int ec, qreal v); - -static qreal ec_func_0(qreal v) -{ - return ec_call(0, v); -} - -static qreal ec_func_1(qreal v) -{ - return ec_call(1, v); -} - -static qreal ec_func_2(qreal v) -{ - return ec_call(2, v); -} - -static qreal ec_func_3(qreal v) -{ - return ec_call(3, v); -} - -static qreal ec_func_4(qreal v) -{ - return ec_call(4, v); -} - -static qreal ec_func_5(qreal v) -{ - return ec_call(5, v); -} - -static qreal ec_func_6(qreal v) -{ - return ec_call(6, v); -} - -static qreal ec_func_7(qreal v) -{ - return ec_call(7, v); -} - -static qreal ec_func_8(qreal v) -{ - return ec_call(8, v); -} - -static qreal ec_func_9(qreal v) -{ - return ec_call(9, v); -} - -static ec_custom_type ec_custom_types[ec_nr_custom_types] = { - {0, ec_func_0}, - {0, ec_func_1}, - {0, ec_func_2}, - {0, ec_func_3}, - {0, ec_func_4}, - {0, ec_func_5}, - {0, ec_func_6}, - {0, ec_func_7}, - {0, ec_func_8}, - {0, ec_func_9}, -}; - -static qreal ec_call(int ec, qreal v) -{ - PyObject *res_obj; - qreal res = 0.0; - - SIP_BLOCK_THREADS - - res_obj = PyObject_CallFunction(ec_custom_types[ec].py_func, (char *)"(d)", (double)v); - - if (res_obj) - { - PyErr_Clear(); - - res = PyFloat_AsDouble(res_obj); - Py_DECREF(res_obj); - - if (PyErr_Occurred()) - res_obj = 0; - } - - if (!res_obj) - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS - - return res; -} -%End - -%ConvertToTypeCode -// Allow a QEasingCurve::Type whenever a QEasingCurve is expected. - -bool is_ec_type = true; -int ec_type = sipConvertToEnum(sipPy, sipType_QEasingCurve_Type); - -if (PyErr_Occurred()) -{ - PyErr_Clear(); - is_ec_type = false; -} - -if (sipIsErr == NULL) - return (is_ec_type || - sipCanConvertToType(sipPy, sipType_QEasingCurve, SIP_NO_CONVERTORS)); - -if (is_ec_type) -{ - *sipCppPtr = new QEasingCurve(static_cast(ec_type)); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, - sipType_QEasingCurve, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -public: - enum Type - { - Linear, - InQuad, - OutQuad, - InOutQuad, - OutInQuad, - InCubic, - OutCubic, - InOutCubic, - OutInCubic, - InQuart, - OutQuart, - InOutQuart, - OutInQuart, - InQuint, - OutQuint, - InOutQuint, - OutInQuint, - InSine, - OutSine, - InOutSine, - OutInSine, - InExpo, - OutExpo, - InOutExpo, - OutInExpo, - InCirc, - OutCirc, - InOutCirc, - OutInCirc, - InElastic, - OutElastic, - InOutElastic, - OutInElastic, - InBack, - OutBack, - InOutBack, - OutInBack, - InBounce, - OutBounce, - InOutBounce, - OutInBounce, - InCurve, - OutCurve, - SineCurve, - CosineCurve, - BezierSpline, - TCBSpline, - Custom, - }; - - QEasingCurve(QEasingCurve::Type type = QEasingCurve::Linear); - QEasingCurve(const QEasingCurve &other); - ~QEasingCurve(); - bool operator==(const QEasingCurve &other) const; - bool operator!=(const QEasingCurve &other) const; - qreal amplitude() const; - void setAmplitude(qreal amplitude); - qreal period() const; - void setPeriod(qreal period); - qreal overshoot() const; - void setOvershoot(qreal overshoot); - QEasingCurve::Type type() const; - void setType(QEasingCurve::Type type); - void setCustomType(SIP_PYCALLABLE func /TypeHint="Callable[[float], float]"/); -%MethodCode - int i; - ec_custom_type *ct; - - for (i = 0; i < ec_nr_custom_types; ++i) - { - ct = &ec_custom_types[i]; - - if (!ct->py_func || ct->py_func == a0) - break; - } - - if (i == ec_nr_custom_types) - { - PyErr_Format(PyExc_ValueError, "a maximum of %d different easing functions are supported", ec_nr_custom_types); - sipError = sipErrorFail; - } - else - { - if (!ct->py_func) - { - ct->py_func = a0; - Py_INCREF(a0); - } - - sipCpp->setCustomType(ct->func); - } -%End - - SIP_PYCALLABLE customType() const /TypeHint="Callable[[float], float]"/; -%MethodCode - QEasingCurve::EasingFunction func = sipCpp->customType(); - - sipRes = Py_None; - - if (func) - { - for (int i = 0; i < ec_nr_custom_types; ++i) - { - if (ec_custom_types[i].func == func) - { - sipRes = ec_custom_types[i].py_func; - break; - } - } - } - - Py_INCREF(sipRes); -%End - - qreal valueForProgress(qreal progress) const; - void swap(QEasingCurve &other /Constrained/); - void addCubicBezierSegment(const QPointF &c1, const QPointF &c2, const QPointF &endPoint); - void addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b); - QList toCubicSpline() const; -}; - -QDataStream &operator<<(QDataStream &, const QEasingCurve & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QEasingCurve & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qelapsedtimer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qelapsedtimer.sip deleted file mode 100644 index 917bcca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qelapsedtimer.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qelapsedtimer.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QElapsedTimer -{ -%TypeHeaderCode -#include -%End - -public: - QElapsedTimer(); - - enum ClockType - { - SystemTime, - MonotonicClock, - TickCounter, - MachAbsoluteTime, - PerformanceCounter, - }; - - static QElapsedTimer::ClockType clockType(); - static bool isMonotonic(); - void start(); - qint64 restart(); - void invalidate(); - bool isValid() const; - qint64 elapsed() const; - bool hasExpired(qint64 timeout) const; - qint64 msecsSinceReference() const; - qint64 msecsTo(const QElapsedTimer &other) const; - qint64 secsTo(const QElapsedTimer &other) const; - qint64 nsecsElapsed() const; -}; - -bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2); -bool operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs); -bool operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeventloop.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeventloop.sip deleted file mode 100644 index e4ae74f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qeventloop.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qeventloop.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QEventLoop : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QEventLoop(QObject *parent /TransferThis/ = 0); - virtual ~QEventLoop(); - - enum ProcessEventsFlag /BaseType=Flag/ - { - AllEvents, - ExcludeUserInputEvents, - ExcludeSocketNotifiers, - WaitForMoreEvents, - }; - - typedef QFlags ProcessEventsFlags; - bool processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) /ReleaseGIL/; - void processEvents(QEventLoop::ProcessEventsFlags flags, int maximumTime) /ReleaseGIL/; -%If (Qt_6_7_0 -) - void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline) /ReleaseGIL/; -%End - int exec(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - void exit(int returnCode = 0); - bool isRunning() const; - void wakeUp(); - -public slots: - void quit(); - -public: - virtual bool event(QEvent *event); -}; - -class QEventLoopLocker -{ -%TypeHeaderCode -#include -%End - -public: - QEventLoopLocker() /ReleaseGIL/; - explicit QEventLoopLocker(QEventLoop *loop) /ReleaseGIL/; - explicit QEventLoopLocker(QThread *thread) /ReleaseGIL/; - ~QEventLoopLocker(); -%If (Qt_6_7_0 -) - void swap(QEventLoopLocker &other); -%End - -private: - QEventLoopLocker(const QEventLoopLocker &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfile.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfile.sip deleted file mode 100644 index 9cb9a53..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfile.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qfile.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFile : public QFileDevice -{ -%TypeHeaderCode -#include -%End - -public: - QFile(); - QFile(const QString &name); - explicit QFile(QObject *parent /TransferThis/); - QFile(const QString &name, QObject *parent /TransferThis/); - virtual ~QFile(); - virtual QString fileName() const; - void setFileName(const QString &name); - static QByteArray encodeName(const QString &fileName); - static QString decodeName(const QByteArray &localFileName); - static QString decodeName(const char *localFileName /Encoding="ASCII"/); - bool exists() const; - static bool exists(const QString &fileName); - QString symLinkTarget() const; - static QString symLinkTarget(const QString &fileName); - bool remove() /ReleaseGIL/; - static bool remove(const QString &fileName) /ReleaseGIL/; - bool rename(const QString &newName) /ReleaseGIL/; - static bool rename(const QString &oldName, const QString &newName) /ReleaseGIL/; - bool link(const QString &newName) /ReleaseGIL/; - static bool link(const QString &oldname, const QString &newName) /ReleaseGIL/; - bool copy(const QString &newName) /ReleaseGIL/; - static bool copy(const QString &fileName, const QString &newName) /ReleaseGIL/; -%If (Qt_6_3_0 -) - bool open(QIODeviceBase::OpenMode flags, QFileDevice::Permissions permissions) /ReleaseGIL/; -%End - virtual bool open(QIODeviceBase::OpenMode flags) /ReleaseGIL/; - bool open(int fd, QIODeviceBase::OpenMode ioFlags, QFileDevice::FileHandleFlags handleFlags = QFileDevice::DontCloseHandle) /ReleaseGIL/; - virtual qint64 size() const; - virtual bool resize(qint64 sz); - static bool resize(const QString &filename, qint64 sz); - virtual QFileDevice::Permissions permissions() const; - static QFileDevice::Permissions permissions(const QString &filename); - virtual bool setPermissions(QFileDevice::Permissions permissionSpec); - static bool setPermissions(const QString &filename, QFileDevice::Permissions permissionSpec); - bool moveToTrash(); - static bool moveToTrash(const QString &fileName, QString *pathInTrash /Out/ = 0); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfiledevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfiledevice.sip deleted file mode 100644 index 6e37264..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfiledevice.sip +++ /dev/null @@ -1,213 +0,0 @@ -// qfiledevice.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileDevice : public QIODevice /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum FileError - { - NoError, - ReadError, - WriteError, - FatalError, - ResourceError, - OpenError, - AbortError, - TimeOutError, - UnspecifiedError, - RemoveError, - RenameError, - PositionError, - ResizeError, - PermissionsError, - CopyError, - }; - - enum Permission /BaseType=Flag/ - { - ReadOwner, - WriteOwner, - ExeOwner, - ReadUser, - WriteUser, - ExeUser, - ReadGroup, - WriteGroup, - ExeGroup, - ReadOther, - WriteOther, - ExeOther, - }; - - typedef QFlags Permissions; - - enum FileHandleFlag /BaseType=Flag/ - { - AutoCloseHandle, - DontCloseHandle, - }; - - typedef QFlags FileHandleFlags; - virtual ~QFileDevice(); - QFileDevice::FileError error() const; - void unsetError(); - virtual void close() /ReleaseGIL/; - virtual bool isSequential() const; - int handle() const; - virtual QString fileName() const; - virtual qint64 pos() const; - virtual bool seek(qint64 offset) /ReleaseGIL/; - virtual bool atEnd() const; - bool flush() /ReleaseGIL/; - virtual qint64 size() const; - virtual bool resize(qint64 sz); - virtual QFileDevice::Permissions permissions() const; - virtual bool setPermissions(QFileDevice::Permissions permissionSpec); - void *map(qint64 offset, qint64 size /ResultSize/, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions) [uchar * (qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions)]; - bool unmap(void *address) [bool (uchar *address)]; - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QFileDevice::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual SIP_PYOBJECT readLineData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QFileDevice::readLineData(s, a0) : sipCpp->readLineData(s, a0); - #else - len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QFileDevice::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -public: - enum FileTime - { - FileAccessTime, - FileBirthTime, - FileMetadataChangeTime, - FileModificationTime, - }; - - QDateTime fileTime(QFileDevice::FileTime time) const; - bool setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime); - - enum MemoryMapFlag /BaseType=Flag/ - { - NoOptions, - MapPrivateOption, - }; - - typedef QFlags MemoryMapFlags; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileinfo.sip deleted file mode 100644 index 5122e74..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileinfo.sip +++ /dev/null @@ -1,122 +0,0 @@ -// qfileinfo.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileInfo -{ -%TypeHeaderCode -#include -%End - -public: - QFileInfo(); - explicit QFileInfo(const QFileDevice &file); - explicit QFileInfo(const QString &file); - QFileInfo(const QDir &dir, const QString &file); - QFileInfo(const QFileInfo &fileinfo); - ~QFileInfo(); - bool operator==(const QFileInfo &fileinfo) const; - bool operator!=(const QFileInfo &fileinfo) const; - void setFile(const QString &file); - void setFile(const QFileDevice &file); - void setFile(const QDir &dir, const QString &file); - bool exists() const; - void refresh(); - QString filePath() const; - SIP_PYOBJECT __fspath__(); -%MethodCode - sipRes = qpycore_PyObject_FromQString(QDir::toNativeSeparators(sipCpp->filePath())); -%End - - QString absoluteFilePath() const; - QString canonicalFilePath() const; - QString fileName() const; - QString baseName() const; - QString completeBaseName() const; - QString suffix() const; - QString completeSuffix() const; - QString path() const; - QString absolutePath() const; - QString canonicalPath() const; - QDir dir() const; - QDir absoluteDir() const; - bool isReadable() const; - bool isWritable() const; - bool isExecutable() const; - bool isHidden() const; - bool isRelative() const; - bool isAbsolute() const; - bool makeAbsolute(); - bool isFile() const; - bool isDir() const; - bool isSymLink() const; - bool isRoot() const; - QString owner() const; - uint ownerId() const; - QString group() const; - uint groupId() const; - bool permission(QFileDevice::Permissions permissions) const; - QFileDevice::Permissions permissions() const; - qint64 size() const; - QDateTime lastModified() const; -%If (Qt_6_6_0 -) - QDateTime lastModified(const QTimeZone &tz) const; -%End - QDateTime lastRead() const; -%If (Qt_6_6_0 -) - QDateTime lastRead(const QTimeZone &tz) const; -%End - bool caching() const; - void setCaching(bool on); - QString symLinkTarget() const; - QString bundleName() const; - bool isBundle() const; - bool isNativePath() const; - void swap(QFileInfo &other /Constrained/); - static bool exists(const QString &file); - QDateTime birthTime() const; -%If (Qt_6_6_0 -) - QDateTime birthTime(const QTimeZone &tz) const; -%End - QDateTime metadataChangeTime() const; -%If (Qt_6_6_0 -) - QDateTime metadataChangeTime(const QTimeZone &tz) const; -%End - QDateTime fileTime(QFileDevice::FileTime time) const; -%If (Qt_6_6_0 -) - QDateTime fileTime(QFileDevice::FileTime time, const QTimeZone &tz) const; -%End - bool isSymbolicLink() const; - bool isShortcut() const; - bool isJunction() const; - void stat(); -%If (Qt_6_2_0 -) - QString junctionTarget() const; -%End -%If (Qt_6_4_0 -) - bool isAlias() const; -%End -%If (Qt_6_6_0 -) - QString readSymLink() const; -%End -}; - -typedef QList QFileInfoList; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileselector.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileselector.sip deleted file mode 100644 index c88509f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfileselector.sip +++ /dev/null @@ -1,37 +0,0 @@ -// qfileselector.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileSelector : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QFileSelector(QObject *parent /TransferThis/ = 0); - virtual ~QFileSelector(); - QString select(const QString &filePath) const; - QUrl select(const QUrl &filePath) const; - QStringList extraSelectors() const; - void setExtraSelectors(const QStringList &list); - QStringList allSelectors() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfilesystemwatcher.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfilesystemwatcher.sip deleted file mode 100644 index bba6063..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qfilesystemwatcher.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qfilesystemwatcher.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileSystemWatcher : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QFileSystemWatcher(QObject *parent /TransferThis/ = 0); - QFileSystemWatcher(const QStringList &paths, QObject *parent /TransferThis/ = 0); - virtual ~QFileSystemWatcher(); - bool addPath(const QString &file); - QStringList addPaths(const QStringList &files); - QStringList directories() const; - QStringList files() const; - bool removePath(const QString &file); - QStringList removePaths(const QStringList &files); - -signals: - void directoryChanged(const QString &path); - void fileChanged(const QString &path); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qflags.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qflags.sip deleted file mode 100644 index 8d28108..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qflags.sip +++ /dev/null @@ -1,49 +0,0 @@ -// This is the SIP interface definition for the QFlags based mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template -%MappedType QFlags /PyQtFlags=1, TypeHint="ENUM"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -bool is_enm = true; -unsigned enm = (unsigned)sipConvertToEnum(sipPy, sipType_ENUM); - -if (PyErr_Occurred()) -{ - PyErr_Clear(); - is_enm = false; -} - -if (sipIsErr == NULL) - return is_enm; - -*sipCppPtr = new QFlags(static_cast(enm)); - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode -return sipConvertFromEnum(sipCpp->operator::QFlags::Int(), sipType_ENUM); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qglobal.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qglobal.sip deleted file mode 100644 index fb62244..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qglobal.sip +++ /dev/null @@ -1,198 +0,0 @@ -// qglobal.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -const int QT_VERSION; -const char *QT_VERSION_STR; -%If (- Qt_6_5_0) -const char *qVersion(); -%End -%If (- Qt_6_5_0) -typedef signed char qint8 /PyInt/; -%End -%If (- Qt_6_5_0) -typedef unsigned char quint8 /PyInt/; -%End -%If (- Qt_6_5_0) -typedef short qint16; -%End -%If (- Qt_6_5_0) -typedef unsigned short quint16; -%End -%If (- Qt_6_5_0) -typedef int qint32; -%End -%If (- Qt_6_5_0) -typedef unsigned int quint32; -%End -%If (- Qt_6_5_0) -typedef long long qint64; -%End -%If (- Qt_6_5_0) -typedef unsigned long long quint64; -%End -%If (- Qt_6_5_0) -typedef qint64 qlonglong; -%End -%If (- Qt_6_5_0) -typedef quint64 qulonglong; -%End -%If (- Qt_6_5_0) -%If (PyQt_qreal_double) -typedef double qreal; -%End -%End -%If (- Qt_6_5_0) -%If (!PyQt_qreal_double) -typedef float qreal; -%End -%End -%If (- Qt_6_5_0) -typedef unsigned char uchar; -%End -%If (- Qt_6_5_0) -typedef unsigned short ushort; -%End -%If (- Qt_6_5_0) -typedef unsigned int uint; -%End -%If (- Qt_6_5_0) -typedef unsigned long ulong; -%End -%If (- Qt_6_5_0) -typedef long long qsizetype; -%End -%If (- Qt_6_5_0) -double qAbs(const double &t); -%End -%If (- Qt_6_5_0) -int qRound(qreal d); -%End -%If (- Qt_6_5_0) -qint64 qRound64(qreal d); -%End -%If (- Qt_6_5_0) -bool qFuzzyCompare(double p1, double p2); -%End -typedef void *QFunctionPointer; -// Minimal support for the Qt resource system to help porting from PyQt5. -%ModuleCode -QT_BEGIN_NAMESPACE -extern bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); -extern bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); -QT_END_NAMESPACE -%End - -bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); -bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); -// Mapped type for qintptr. -// Map qintptr onto sip.voidptr. This means either an address (on Windows) or -// an integer file descriptor (on everything else) can be used. -%MappedType qintptr /TypeHint="PyQt6.sip.voidptr"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode - qintptr ptr = (qintptr)sipConvertToVoidPtr(sipPy); - - if (!sipIsErr) - return !PyErr_Occurred(); - - // Mapped types deal with pointers, so create one on the heap. - qintptr *heap = new qintptr; - *heap = ptr; - - *sipCppPtr = heap; - - // Make sure the pointer doesn't leak. - return SIP_TEMPORARY; -%End - -%ConvertFromTypeCode - return sipConvertFromVoidPtr((void *)*sipCpp); -%End -}; -// Mapped type for quintptr. -// Map quintptr onto sip.voidptr. This means either an address (on Windows) or -// an integer file descriptor (on everything else) can be used. -%MappedType quintptr /TypeHint="PyQt6.sip.voidptr"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode - quintptr ptr = (quintptr)sipConvertToVoidPtr(sipPy); - - if (!sipIsErr) - return !PyErr_Occurred(); - - // Mapped types deal with pointers, so create one on the heap. - quintptr *heap = new quintptr; - *heap = ptr; - - *sipCppPtr = heap; - - // Make sure the pointer doesn't leak. - return SIP_TEMPORARY; -%End - -%ConvertFromTypeCode - return sipConvertFromVoidPtr((void *)*sipCpp); -%End -}; -// Implementations of pyqt[Set]PickleProtocol(). -void pyqtSetPickleProtocol(SIP_PYOBJECT /TypeHint="Optional[int]"/); -%MethodCode - Py_XDECREF(qpycore_pickle_protocol); - qpycore_pickle_protocol = a0; - Py_INCREF(qpycore_pickle_protocol); -%End - -SIP_PYOBJECT pyqtPickleProtocol() /TypeHint="Optional[int]"/; -%MethodCode - sipRes = qpycore_pickle_protocol; - if (!sipRes) - sipRes = Py_None; - - Py_INCREF(sipRes); -%End -%If (- Qt_6_5_0) -bool qEnvironmentVariableIsEmpty(const char *varName); -%End -%If (- Qt_6_5_0) -bool qEnvironmentVariableIsSet(const char *varName); -%End -%If (- Qt_6_5_0) -QString qEnvironmentVariable(const char *varName); -%End -%If (- Qt_6_5_0) -QString qEnvironmentVariable(const char *varName, const QString &defaultValue); -%End -%If (- Qt_6_5_0) -int qEnvironmentVariableIntValue(const char *varName, bool *ok = 0); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qidentityproxymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qidentityproxymodel.sip deleted file mode 100644 index 8008f4a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qidentityproxymodel.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qidentityproxymodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QIdentityProxyModel : public QAbstractProxyModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QIdentityProxyModel(QObject *parent /TransferThis/ = 0); - virtual ~QIdentityProxyModel(); - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - virtual QModelIndex parent(const QModelIndex &child) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const; - virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const; - virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap)) const; - virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); - virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevice.sip deleted file mode 100644 index c262d8d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevice.sip +++ /dev/null @@ -1,429 +0,0 @@ -// qiodevice.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QIODevice : public QObject, public QIODeviceBase -{ -%TypeHeaderCode -#include -%End - -public: - QIODevice(); - explicit QIODevice(QObject *parent /TransferThis/); - virtual ~QIODevice(); - QIODeviceBase::OpenMode openMode() const; - void setTextModeEnabled(bool enabled); - bool isTextModeEnabled() const; - bool isOpen() const; - bool isReadable() const; - bool isWritable() const; - virtual bool isSequential() const; - int readChannelCount() const; - int writeChannelCount() const; - int currentReadChannel() const; - void setCurrentReadChannel(int channel); - int currentWriteChannel() const; - void setCurrentWriteChannel(int channel); - virtual bool open(QIODeviceBase::OpenMode mode) /ReleaseGIL/; - virtual void close() /ReleaseGIL/; - virtual qint64 pos() const; - virtual qint64 size() const; - virtual bool seek(qint64 pos) /ReleaseGIL/; - virtual bool atEnd() const; - virtual bool reset(); - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - SIP_PYOBJECT read(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->read(s, a0); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - SIP_PYOBJECT readLine(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Return a bytes object or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->readLine(s, a0); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - QByteArray readLine() /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipRes = new QByteArray(sipCpp->readLine()); - Py_END_ALLOW_THREADS -%End - - QByteArray readAll() /ReleaseGIL/; - virtual bool canReadLine() const; - void startTransaction(); - void commitTransaction(); - void rollbackTransaction(); - bool isTransactionStarted() const; - qint64 write(SIP_PYBUFFER) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->write(reinterpret_cast(bi.bi_buf), bi.bi_len); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - SIP_PYOBJECT peek(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->peek(s, a0); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - qint64 skip(qint64 maxSize) /ReleaseGIL/; - virtual bool waitForReadyRead(int msecs) /ReleaseGIL/; - virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/; - void ungetChar(char c /Encoding="None"/); - bool putChar(char c /Encoding="None"/) /ReleaseGIL/; - bool getChar(char *c /Encoding="None",Out/) /ReleaseGIL/; - QString errorString() const; - -signals: - void aboutToClose(); - void bytesWritten(qint64 bytes); - void channelBytesWritten(int channel, qint64 bytes); - void channelReadyRead(int channel); - void readChannelFinished(); - void readyRead(); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) = 0 /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtect_readData(s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - -%VirtualCatcherCode - PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1); - - if (result) - { - PyObject *buf; - - if (sipParseResult(&sipIsErr, sipMethod, result, "$", &buf) == 0) - { - if (buf == Py_None) - { - sipRes = -1L; - } - else - { - sipBufferInfoDef bi; - - if (sipGetBufferInfo(buf, &bi) < 0) - { - sipBadCatcherResult(sipMethod); - sipIsErr = 1; - } - else - { - sipRes = (a1 < bi.bi_len) ? a1 : bi.bi_len; - memcpy(a0, bi.bi_buf, sipRes); - - sipReleaseBufferInfo(&bi); - } - } - - Py_DECREF(buf); - } - - Py_DECREF(result); - } -%End - - virtual SIP_PYOBJECT readLineData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QIODevice::readLineData(s, a0) : sipCpp->readLineData(s, a0); - #else - len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - -%VirtualCatcherCode - PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1); - - if (result) - { - PyObject *buf; - - if (sipParseResult(&sipIsErr, sipMethod, result, "$", &buf) == 0) - { - if (buf == Py_None) - { - sipRes = -1L; - } - else - { - sipBufferInfoDef bi; - - if (sipGetBufferInfo(buf, &bi) < 0) - { - sipBadCatcherResult(sipMethod); - sipIsErr = 1; - } - else - { - sipRes = (a1 < bi.bi_len) ? a1 : bi.bi_len; - memcpy(a0, bi.bi_buf, sipRes); - - sipReleaseBufferInfo(&bi); - } - } - - Py_DECREF(buf); - } - - Py_DECREF(result); - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) = 0 /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtect_writeData(reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%VirtualCatcherCode - PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1); - - if (result) - { - PyObject *buf; - - if (sipParseResult(&sipIsErr, sipMethod, result, "$", &buf) == 0) - { - if (buf == Py_None) - { - sipRes = -1L; - } - else - { - sipBufferInfoDef bi; - - if (sipGetBufferInfo(buf, &bi) < 0) - { - sipBadCatcherResult(sipMethod); - sipIsErr = 1; - } - else - { - if (bi.bi_readonly) - { - sipBadCatcherResult(sipMethod); - sipIsErr = 1; - } - else - { - sipRes = (a1 < bi.bi_len) ? a1 : bi.bi_len; - memcpy(bi.bi_buf, a0, sipRes); - } - - sipReleaseBufferInfo(&bi); - } - } - - Py_DECREF(buf); - } - - Py_DECREF(result); - } -%End - - virtual qint64 skipData(qint64 maxSize) /ReleaseGIL/; - void setOpenMode(QIODeviceBase::OpenMode openMode); - void setErrorString(const QString &errorString); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevicebase.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevicebase.sip deleted file mode 100644 index 0fc27c9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qiodevicebase.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qiodevicebase.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QIODeviceBase -{ -%TypeHeaderCode -#include -%End - -public: - enum OpenModeFlag /BaseType=Flag/ - { - NotOpen, - ReadOnly, - WriteOnly, - ReadWrite, - Append, - Truncate, - Text, - Unbuffered, - NewOnly, - ExistingOnly, - }; - - typedef QFlags OpenMode; - -protected: -%If (Qt_6_3_0 -) - ~QIODeviceBase(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qitemselectionmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qitemselectionmodel.sip deleted file mode 100644 index e89fdd1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qitemselectionmodel.sip +++ /dev/null @@ -1,263 +0,0 @@ -// qitemselectionmodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QItemSelectionRange -{ -%TypeHeaderCode -#include -%End - -public: - QItemSelectionRange(); - QItemSelectionRange(const QModelIndex &atopLeft, const QModelIndex &abottomRight); - explicit QItemSelectionRange(const QModelIndex &index); - int top() const; - int left() const; - int bottom() const; - int right() const; - int width() const; - int height() const; - const QPersistentModelIndex &topLeft() const; - const QPersistentModelIndex &bottomRight() const; - QModelIndex parent() const; - const QAbstractItemModel *model() const; - bool contains(const QModelIndex &index) const; - bool contains(int row, int column, const QModelIndex &parentIndex) const; - bool intersects(const QItemSelectionRange &other) const; - bool operator==(const QItemSelectionRange &other) const; - bool operator!=(const QItemSelectionRange &other) const; - bool isValid() const; - QModelIndexList indexes() const; - QItemSelectionRange intersected(const QItemSelectionRange &other) const; - bool isEmpty() const; - void swap(QItemSelectionRange &other /Constrained/); -}; - -class QItemSelectionModel : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum SelectionFlag /BaseType=Flag/ - { - NoUpdate, - Clear, - Select, - Deselect, - Toggle, - Current, - Rows, - Columns, - SelectCurrent, - ToggleCurrent, - ClearAndSelect, - }; - - typedef QFlags SelectionFlags; - explicit QItemSelectionModel(QAbstractItemModel *model /TransferThis/ = 0); - QItemSelectionModel(QAbstractItemModel *model, QObject *parent /TransferThis/); - virtual ~QItemSelectionModel(); - QModelIndex currentIndex() const; - bool isSelected(const QModelIndex &index) const; - bool isRowSelected(int row, const QModelIndex &parent = QModelIndex()) const; - bool isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) const; - bool rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) const; - bool columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndexList selectedIndexes() const; - const QItemSelection selection() const; - QAbstractItemModel *model(); - -public slots: - virtual void clear(); - void clearSelection(); - virtual void reset(); - virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command); - virtual void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command); - virtual void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command); - virtual void clearCurrentIndex(); - -signals: - void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - void currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous); - void currentColumnChanged(const QModelIndex ¤t, const QModelIndex &previous); - -protected: - void emitSelectionChanged(const QItemSelection &newSelection, const QItemSelection &oldSelection); - -public: - bool hasSelection() const; - QModelIndexList selectedRows(int column = 0) const; - QModelIndexList selectedColumns(int row = 0) const; - void setModel(QAbstractItemModel *model); - -signals: - void modelChanged(QAbstractItemModel *model); -}; - -class QItemSelection -{ -%TypeHeaderCode -#include -%End - -public: - QItemSelection(); - QItemSelection(const QModelIndex &topLeft, const QModelIndex &bottomRight); - void select(const QModelIndex &topLeft, const QModelIndex &bottomRight); - bool contains(const QModelIndex &index) const; - int __contains__(const QModelIndex &index); -%MethodCode - // It looks like you can't assign QBool to int. - sipRes = bool(sipCpp->contains(*a0)); -%End - - QModelIndexList indexes() const; - void merge(const QItemSelection &other, QItemSelectionModel::SelectionFlags command); - static void split(const QItemSelectionRange &range, const QItemSelectionRange &other, QItemSelection *result); - void __setitem__(int i, const QItemSelectionRange &range); -%MethodCode - int len; - - len = sipCpp->count(); - - if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; - else - (*sipCpp)[a0] = *a1; -%End - - void __setitem__(SIP_PYSLICE slice, const QItemSelection &list); -%MethodCode - Py_ssize_t start, stop, step, slicelength; - - if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) - { - sipIsErr = 1; - } - else - { - int vlen = a1->count(); - - if (vlen != slicelength) - { - sipBadLengthForSlice(vlen, slicelength); - sipIsErr = 1; - } - else - { - QItemSelection::const_iterator it = a1->begin(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipCpp)[start] = *it; - start += step; - ++it; - } - } - } -%End - - void __delitem__(int i); -%MethodCode - if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; - else - sipCpp->removeAt(a0); -%End - - void __delitem__(SIP_PYSLICE slice); -%MethodCode - Py_ssize_t start, stop, step, slicelength; - - if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) - { - sipIsErr = 1; - } - else - { - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - sipCpp->removeAt(start); - start += step - 1; - } - } -%End - - QItemSelectionRange operator[](int i); -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QItemSelectionRange(sipCpp->operator[]((int)idx)); -%End - - QItemSelection operator[](SIP_PYSLICE slice); -%MethodCode - Py_ssize_t start, stop, step, slicelength; - - if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) - { - sipIsErr = 1; - } - else - { - sipRes = new QItemSelection(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipRes) += (*sipCpp)[start]; - start += step; - } - } -%End - -// Methods inherited from QList. -bool operator!=(const QItemSelection &other) const; -bool operator==(const QItemSelection &other) const; - -// Keep the following in sync with QStringList (except for mid()). -void clear(); -bool isEmpty() const; -void append(const QItemSelectionRange &range); -void prepend(const QItemSelectionRange &range); -void insert(int i, const QItemSelectionRange &range); -void replace(int i, const QItemSelectionRange &range); -void removeAt(int i); -int removeAll(const QItemSelectionRange &range); -QItemSelectionRange takeAt(int i); -QItemSelectionRange takeFirst(); -QItemSelectionRange takeLast(); -void move(int from, int to); -int count(const QItemSelectionRange &range) const; -int count() const /__len__/; -QItemSelectionRange &first(); -QItemSelectionRange &last(); -int indexOf(const QItemSelectionRange &value, int from = 0) const; -int lastIndexOf(const QItemSelectionRange &value, int from = -1) const; -QItemSelection &operator+=(const QItemSelection &other); -QItemSelection &operator+=(const QItemSelectionRange &value); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonarray.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonarray.sip deleted file mode 100644 index 0bfef82..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonarray.sip +++ /dev/null @@ -1,129 +0,0 @@ -// This is the SIP interface definition for the QJsonArray mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -// Note that we assume any iterable can be converted to a QJsonArray. However, -// because QJsonValue is an iterable and QJsonObject is implemented as a dict -// (which is also an iterable), then any overloads that handle one or more of -// them must be ordered so that QJsonArray is checked last. - -%MappedType QJsonArray - /TypeHintIn="Iterable[QJsonValue]", TypeHintOut="List[QJsonValue]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - QJsonValue *t = new QJsonValue(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType_QJsonValue, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QJsonArray *ql = new QJsonArray; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - QJsonValue *t = reinterpret_cast( - sipForceConvertToType(itm, sipType_QJsonValue, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QJsonValue' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType_QJsonValue, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsondocument.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsondocument.sip deleted file mode 100644 index 8386cde..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsondocument.sip +++ /dev/null @@ -1,92 +0,0 @@ -// qjsondocument.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -struct QJsonParseError -{ -%TypeHeaderCode -#include -%End - - enum ParseError - { - NoError, - UnterminatedObject, - MissingNameSeparator, - UnterminatedArray, - MissingValueSeparator, - IllegalValue, - TerminationByNumber, - IllegalNumber, - IllegalEscapeSequence, - IllegalUTF8String, - UnterminatedString, - MissingObject, - DeepNesting, - DocumentTooLarge, - GarbageAtEnd, - }; - - QString errorString() const; - int offset; - QJsonParseError::ParseError error; -}; - -class QJsonDocument -{ -%TypeHeaderCode -#include -%End - -public: - QJsonDocument(); - explicit QJsonDocument(const QJsonObject &object); - explicit QJsonDocument(const QJsonArray &array); - QJsonDocument(const QJsonDocument &other); - ~QJsonDocument(); - static QJsonDocument fromVariant(const QVariant &variant); - QVariant toVariant() const; - - enum JsonFormat - { - Indented, - Compact, - }; - - static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); - QByteArray toJson(QJsonDocument::JsonFormat format = QJsonDocument::Indented) const; - bool isEmpty() const; - bool isArray() const; - bool isObject() const; - QJsonObject object() const; - QJsonArray array() const; - void setObject(const QJsonObject &object); - void setArray(const QJsonArray &array); - bool operator==(const QJsonDocument &other) const; - bool operator!=(const QJsonDocument &other) const; - bool isNull() const; - void swap(QJsonDocument &other /Constrained/); - const QJsonValue operator[](qsizetype i) const; - const QJsonValue operator[](const QString &key) const; -}; - -QDataStream &operator<<(QDataStream &, const QJsonDocument & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QJsonDocument & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonobject.sip deleted file mode 100644 index 3fed4ae..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonobject.sip +++ /dev/null @@ -1,136 +0,0 @@ -// This is the SIP interface definition for the QJsonObject mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QJsonObject - /TypeHint="Dict[QString, QJsonValue]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QJsonObject::const_iterator it = sipCpp->constBegin(); - QJsonObject::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - QString *k = new QString(it.key()); - PyObject *kobj = sipConvertFromNewType(k, sipType_QString, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - - return 0; - } - - QJsonValue *v = new QJsonValue(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType_QJsonValue, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QJsonObject *jo = new QJsonObject; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int kstate; - QString *k = reinterpret_cast( - sipForceConvertToType(kobj, sipType_QString, sipTransferObj, - SIP_NOT_NONE, &kstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a key has type '%s' but 'str' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete jo; - - return 0; - } - - int vstate; - QJsonValue *v = reinterpret_cast( - sipForceConvertToType(vobj, sipType_QJsonValue, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a value has type '%s' but 'QJsonValue' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - sipReleaseType(k, sipType_QString, kstate); - delete jo; - - return 0; - } - - jo->insert(*k, *v); - - sipReleaseType(v, sipType_QJsonValue, vstate); - sipReleaseType(k, sipType_QString, kstate); - } - - *sipCppPtr = jo; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonvalue.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonvalue.sip deleted file mode 100644 index 7cc02f5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qjsonvalue.sip +++ /dev/null @@ -1,83 +0,0 @@ -// qjsonvalue.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QJsonValue /AllowNone,TypeHintIn="Union[QJsonValue, QJsonValue.Type, QJsonArray, QJsonObject, bool, int, float, None, QString]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (!sipIsErr) - return qpycore_canConvertTo_QJsonValue(sipPy); - -return qpycore_convertTo_QJsonValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr); -%End - -public: - enum Type - { - Null, - Bool, - Double, - String, - Array, - Object, - Undefined, - }; - - QJsonValue(QJsonValue::Type type /Constrained/ = QJsonValue::Null); - QJsonValue(const QJsonValue &other); - ~QJsonValue(); - static QJsonValue fromVariant(const QVariant &variant); - QVariant toVariant() const; - QJsonValue::Type type() const; - bool isNull() const; - bool isBool() const; - bool isDouble() const; - bool isString() const; - bool isArray() const; - bool isObject() const; - bool isUndefined() const; - bool toBool(bool defaultValue = false) const; - int toInt(int defaultValue = 0) const; - qint64 toInteger(qint64 defaultValue = 0) const; - double toDouble(double defaultValue = 0) const; - QJsonArray toArray() const; - QJsonArray toArray(const QJsonArray &defaultValue) const; - QJsonObject toObject() const; - QJsonObject toObject(const QJsonObject &defaultValue) const; - bool operator==(const QJsonValue &other) const; - bool operator!=(const QJsonValue &other) const; - QString toString() const; - QString toString(const QString &defaultValue) const; - void swap(QJsonValue &other /Constrained/); - const QJsonValue operator[](qsizetype i) const; - const QJsonValue operator[](const QString &key) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -QDataStream &operator<<(QDataStream &, const QJsonValue & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QJsonValue & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibrary.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibrary.sip deleted file mode 100644 index 3bc76d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibrary.sip +++ /dev/null @@ -1,60 +0,0 @@ -// qlibrary.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLibrary : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum LoadHint /BaseType=Flag/ - { - ResolveAllSymbolsHint, - ExportExternalSymbolsHint, - LoadArchiveMemberHint, - PreventUnloadHint, - DeepBindHint, - }; - - typedef QFlags LoadHints; - explicit QLibrary(QObject *parent /TransferThis/ = 0); - QLibrary(const QString &fileName, QObject *parent /TransferThis/ = 0); - QLibrary(const QString &fileName, int verNum, QObject *parent /TransferThis/ = 0); - QLibrary(const QString &fileName, const QString &version, QObject *parent /TransferThis/ = 0); - virtual ~QLibrary(); - QString errorString() const; - QString fileName() const; - bool isLoaded() const; - bool load(); - QLibrary::LoadHints loadHints() const; - QFunctionPointer resolve(const char *symbol); - static QFunctionPointer resolve(const QString &fileName, const char *symbol); - static QFunctionPointer resolve(const QString &fileName, int verNum, const char *symbol); - static QFunctionPointer resolve(const QString &fileName, const QString &version, const char *symbol); - bool unload(); - static bool isLibrary(const QString &fileName); - void setFileName(const QString &fileName); - void setFileNameAndVersion(const QString &fileName, int verNum); - void setFileNameAndVersion(const QString &fileName, const QString &version); - void setLoadHints(QLibrary::LoadHints hints); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibraryinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibraryinfo.sip deleted file mode 100644 index 5299237..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlibraryinfo.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qlibraryinfo.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLibraryInfo -{ -%TypeHeaderCode -#include -%End - -public: - static bool isDebugBuild(); -%If (Qt_6_5_0 -) - static bool isSharedBuild(); -%End - static QString path(QLibraryInfo::LibraryPath p) /ReleaseGIL/; - static QVersionNumber version(); - -private: - QLibraryInfo(); - -public: - enum LibraryPath - { - PrefixPath, - DocumentationPath, - HeadersPath, - LibrariesPath, - LibraryExecutablesPath, - BinariesPath, - PluginsPath, - Qml2ImportsPath, - ArchDataPath, - DataPath, - TranslationsPath, - ExamplesPath, - TestsPath, - SettingsPath, -%If (Qt_6_2_0 -) - QmlImportsPath, -%End - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qline.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qline.sip deleted file mode 100644 index 1c4e370..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qline.sip +++ /dev/null @@ -1,171 +0,0 @@ -// qline.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLine -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("iiii", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); -%End - -public: - bool operator!=(const QLine &d) const; - QLine(); - QLine(const QPoint &pt1_, const QPoint &pt2_); - QLine(int x1pos, int y1pos, int x2pos, int y2pos); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QLine()"); - } - else - { - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QLine(%i, %i, %i, %i)", - sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); - } -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - int x1() const; - int y1() const; - int x2() const; - int y2() const; - QPoint p1() const; - QPoint p2() const; - int dx() const; - int dy() const; - void translate(const QPoint &point); - void translate(int adx, int ady); - bool operator==(const QLine &d) const; - QLine translated(const QPoint &p) const; - QLine translated(int adx, int ady) const; - void setP1(const QPoint &aP1); - void setP2(const QPoint &aP2); - void setPoints(const QPoint &aP1, const QPoint &aP2); - void setLine(int aX1, int aY1, int aX2, int aY2); - QPoint center() const; -%If (Qt_6_4_0 -) - QLineF toLineF() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QLine &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QLine & /Constrained/) /ReleaseGIL/; - -class QLineF -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("dddd", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); -%End - -public: - enum IntersectionType - { - NoIntersection, - BoundedIntersection, - UnboundedIntersection, - }; - - QLineF(const QLine &line); - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - qreal length() const; - QLineF unitVector() const; - QLineF::IntersectionType intersects(const QLineF &l, QPointF *intersectionPoint /Out/ = 0) const; - bool operator!=(const QLineF &d) const; - QLineF(); - QLineF(const QPointF &apt1, const QPointF &apt2); - QLineF(qreal x1pos, qreal y1pos, qreal x2pos, qreal y2pos); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QLineF()"); - } - else - { - PyObject *x1 = PyFloat_FromDouble(sipCpp->x1()); - PyObject *y1 = PyFloat_FromDouble(sipCpp->y1()); - PyObject *x2 = PyFloat_FromDouble(sipCpp->x2()); - PyObject *y2 = PyFloat_FromDouble(sipCpp->y2()); - - if (x1 && y1 && x2 && y2) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QLineF(%R, %R, %R, %R)", - x1, y1, x2, y2); - } - - Py_XDECREF(x1); - Py_XDECREF(y1); - Py_XDECREF(x2); - Py_XDECREF(y2); - } -%End - - qreal x1() const; - qreal y1() const; - qreal x2() const; - qreal y2() const; - QPointF p1() const; - QPointF p2() const; - qreal dx() const; - qreal dy() const; - QLineF normalVector() const; - void translate(const QPointF &point); - void translate(qreal adx, qreal ady); - void setLength(qreal len); - QPointF pointAt(qreal t) const; - QLine toLine() const; - bool operator==(const QLineF &d) const; - static QLineF fromPolar(qreal length, qreal angle); - qreal angle() const; - void setAngle(qreal angle); - qreal angleTo(const QLineF &l) const; - QLineF translated(const QPointF &p) const; - QLineF translated(qreal adx, qreal ady) const; - void setP1(const QPointF &aP1); - void setP2(const QPointF &aP2); - void setPoints(const QPointF &aP1, const QPointF &aP2); - void setLine(qreal aX1, qreal aY1, qreal aX2, qreal aY2); - QPointF center() const; -}; - -QDataStream &operator<<(QDataStream &, const QLineF & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QLineF & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlocale.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlocale.sip deleted file mode 100644 index 4054996..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlocale.sip +++ /dev/null @@ -1,1260 +0,0 @@ -// qlocale.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLocale -{ -%TypeHeaderCode -#include -%End - -public: - enum Language - { - C, - Abkhazian, - Afan, - Afar, - Afrikaans, - Albanian, - Amharic, - Arabic, - Armenian, - Assamese, - Aymara, - Azerbaijani, - Bashkir, - Basque, - Bengali, - Bhutani, - Bislama, - Breton, - Bulgarian, - Burmese, - Byelorussian, - Cambodian, - Catalan, - Chinese, - Corsican, - Croatian, - Czech, - Danish, - Dutch, - English, - Esperanto, - Estonian, - Faroese, - Finnish, - French, - Frisian, - Gaelic, - Galician, - Georgian, - German, - Greek, - Greenlandic, - Guarani, - Gujarati, - Hausa, - Hebrew, - Hindi, - Hungarian, - Icelandic, - Indonesian, - Interlingua, - Interlingue, - Inuktitut, - Inupiak, - Irish, - Italian, - Japanese, - Javanese, - Kannada, - Kashmiri, - Kazakh, - Kinyarwanda, - Kirghiz, - Korean, - Kurdish, - Kurundi, - Latin, - Latvian, - Lingala, - Lithuanian, - Macedonian, - Malagasy, - Malay, - Malayalam, - Maltese, - Maori, - Marathi, - Mongolian, - NauruLanguage, - Nepali, - Occitan, - Oriya, - Pashto, - Persian, - Polish, - Portuguese, - Punjabi, - Quechua, - RhaetoRomance, - Romanian, - Russian, - Samoan, - Sanskrit, - Serbian, - Shona, - Sindhi, - Slovak, - Slovenian, - Somali, - Spanish, - Sundanese, - Swahili, - Swedish, - Tajik, - Tamil, - Tatar, - Telugu, - Thai, - Tibetan, - Tigrinya, - Tsonga, - Turkish, - Turkmen, - Uigur, - Ukrainian, - Urdu, - Uzbek, - Vietnamese, - Volapuk, - Welsh, - Wolof, - Xhosa, - Yiddish, - Yoruba, - Zhuang, - Zulu, - Bosnian, - Divehi, - Manx, - Cornish, - LastLanguage, - NorwegianBokmal, - NorwegianNynorsk, - Akan, - Konkani, - Ga, - Igbo, - Kamba, - Syriac, - Blin, - Geez, - Koro, - Sidamo, - Atsam, - Tigre, - Jju, - Friulian, - Venda, - Ewe, - Walamo, - Hawaiian, - Tyap, - Chewa, - Filipino, - SwissGerman, - SichuanYi, - Kpelle, - LowGerman, - SouthNdebele, - NorthernSotho, - NorthernSami, - Taroko, - Gusii, - Taita, - Fulah, - Kikuyu, - Samburu, - Sena, - NorthNdebele, - Rombo, - Tachelhit, - Kabyle, - Nyankole, - Bena, - Vunjo, - Bambara, - Embu, - Cherokee, - Morisyen, - Makonde, - Langi, - Ganda, - Bemba, - Kabuverdianu, - Meru, - Kalenjin, - Nama, - Machame, - Colognian, - Masai, - Soga, - Luyia, - Asu, - Teso, - Saho, - KoyraChiini, - Rwa, - Luo, - Chiga, - CentralMoroccoTamazight, - KoyraboroSenni, - Shambala, - AnyLanguage, - Rundi, - Bodo, - Aghem, - Basaa, - Zarma, - Duala, - JolaFonyi, - Ewondo, - Bafia, - LubaKatanga, - MakhuwaMeetto, - Mundang, - Kwasio, - Nuer, - Sakha, - Sangu, - Tasawaq, - Vai, - Walser, - Yangben, - Oromo, - Dzongkha, - Belarusian, - Khmer, - Fijian, - WesternFrisian, - Lao, - Marshallese, - Romansh, - Sango, - Ossetic, - SouthernSotho, - Tswana, - Sinhala, - Swati, - Sardinian, - Tongan, - Tahitian, - Nyanja, - Avaric, - Chamorro, - Chechen, - Church, - Chuvash, - Cree, - Haitian, - Herero, - HiriMotu, - Kanuri, - Komi, - Kongo, - Kwanyama, - Limburgish, - Luxembourgish, - Navaho, - Ndonga, - Ojibwa, - Pali, - Walloon, - Avestan, - Asturian, - Ngomba, - Kako, - Meta, - Ngiemboon, - Uighur, - Aragonese, - Akkadian, - AncientEgyptian, - AncientGreek, - Aramaic, - Balinese, - Bamun, - BatakToba, - Buginese, - Chakma, - Coptic, - Dogri, - Gothic, - Ingush, - Mandingo, - Manipuri, - OldIrish, - OldNorse, - OldPersian, - Pahlavi, - Phoenician, - Santali, - Saurashtra, - TaiDam, - Ugaritic, - Akoose, - Lakota, - StandardMoroccanTamazight, - Mapuche, - CentralKurdish, - LowerSorbian, - UpperSorbian, - Kenyang, - Mohawk, - Nko, - Prussian, - Kiche, - SouthernSami, - LuleSami, - InariSami, - SkoltSami, - Warlpiri, - Mende, - Lezghian, - Maithili, - AmericanSignLanguage, - Bhojpuri, - LiteraryChinese, - Mazanderani, - Newari, - NorthernLuri, - Palauan, - Papiamento, - TokelauLanguage, - TokPisin, - TuvaluLanguage, - Cantonese, - Osage, - Ido, - Lojban, - Sicilian, - SouthernKurdish, - WesternBalochi, - Cebuano, - Erzya, - Chickasaw, - Muscogee, - Silesian, - NigerianPidgin, - Bangla, - CentralAtlasTamazight, - Inupiaq, - Kalaallisut, - Kuanyama, - Kyrgyz, - Navajo, - Odia, - Uyghur, - Wolaytta, -%If (Qt_6_3_0 -) - Kaingang, -%End -%If (Qt_6_3_0 -) - Nheengatu, -%End -%If (Qt_6_5_0 -) - Haryanvi, -%End -%If (Qt_6_5_0 -) - NorthernFrisian, -%End -%If (Qt_6_5_0 -) - Rajasthani, -%End -%If (Qt_6_5_0 -) - Moksha, -%End -%If (Qt_6_5_0 -) - TokiPona, -%End -%If (Qt_6_5_0 -) - Pijin, -%End -%If (Qt_6_5_0 -) - Obolo, -%End -%If (Qt_6_6_0 -) - Baluchi, -%End -%If (Qt_6_6_0 -) - Ligurian, -%End -%If (Qt_6_6_0 -) - Rohingya, -%End -%If (Qt_6_6_0 -) - Torwali, -%End -%If (Qt_6_7_0 -) - Anii, -%End -%If (Qt_6_7_0 -) - Kangri, -%End -%If (Qt_6_7_0 -) - Venetian, -%End - }; - - enum Country - { - AnyCountry, -%If (Qt_6_2_0 -) - AnyTerritory, -%End - Afghanistan, - Albania, - Algeria, - AmericanSamoa, - Andorra, - Angola, - Anguilla, - Antarctica, - AntiguaAndBarbuda, - Argentina, - Armenia, - Aruba, - Australia, - Austria, - Azerbaijan, - Bahamas, - Bahrain, - Bangladesh, - Barbados, - Belarus, - Belgium, - Belize, - Benin, - Bermuda, - Bhutan, - Bolivia, - BosniaAndHerzegowina, - Botswana, - BouvetIsland, - Brazil, - BritishIndianOceanTerritory, - Bulgaria, - BurkinaFaso, - Burundi, - Cambodia, - Cameroon, - Canada, - CapeVerde, - CaymanIslands, - CentralAfricanRepublic, - Chad, - Chile, - China, - ChristmasIsland, - CocosIslands, - Colombia, - Comoros, - DemocraticRepublicOfCongo, - PeoplesRepublicOfCongo, - CookIslands, - CostaRica, - IvoryCoast, - Croatia, - Cuba, - Cyprus, - CzechRepublic, - Denmark, - Djibouti, - Dominica, - DominicanRepublic, - EastTimor, - Ecuador, - Egypt, - ElSalvador, - EquatorialGuinea, - Eritrea, - Estonia, - Ethiopia, - FalklandIslands, - FaroeIslands, - Finland, - France, - FrenchGuiana, - FrenchPolynesia, - FrenchSouthernTerritories, - Gabon, - Gambia, - Georgia, - Germany, - Ghana, - Gibraltar, - Greece, - Greenland, - Grenada, - Guadeloupe, - Guam, - Guatemala, - Guinea, - GuineaBissau, - Guyana, - Haiti, - HeardAndMcDonaldIslands, - Honduras, - HongKong, - Hungary, - Iceland, - India, - Indonesia, - Iran, - Iraq, - Ireland, - Israel, - Italy, - Jamaica, - Japan, - Jordan, - Kazakhstan, - Kenya, - Kiribati, - DemocraticRepublicOfKorea, - RepublicOfKorea, - Kuwait, - Kyrgyzstan, - Latvia, - Lebanon, - Lesotho, - Liberia, - Liechtenstein, - Lithuania, - Luxembourg, - Macau, - Macedonia, - Madagascar, - Malawi, - Malaysia, - Maldives, - Mali, - Malta, - MarshallIslands, - Martinique, - Mauritania, - Mauritius, - Mayotte, - Mexico, - Micronesia, - Moldova, - Monaco, - Mongolia, - Montserrat, - Morocco, - Mozambique, - Myanmar, - Namibia, - NauruCountry, - Nepal, - Netherlands, - NewCaledonia, - NewZealand, - Nicaragua, - Niger, - Nigeria, - Niue, - NorfolkIsland, - NorthernMarianaIslands, - Norway, - Oman, - Pakistan, - Palau, - Panama, - PapuaNewGuinea, - Paraguay, - Peru, - Philippines, - Pitcairn, - Poland, - Portugal, - PuertoRico, - Qatar, - Reunion, - Romania, - RussianFederation, - Rwanda, - SaintKittsAndNevis, - Samoa, - SanMarino, - SaoTomeAndPrincipe, - SaudiArabia, - Senegal, - Seychelles, - SierraLeone, - Singapore, - Slovakia, - Slovenia, - SolomonIslands, - Somalia, - SouthAfrica, - SouthGeorgiaAndTheSouthSandwichIslands, - Spain, - SriLanka, - Sudan, - Suriname, - SvalbardAndJanMayenIslands, - Swaziland, - Sweden, - Switzerland, - SyrianArabRepublic, - Taiwan, - Tajikistan, - Tanzania, - Thailand, - Togo, - TrinidadAndTobago, - Tunisia, - Turkey, - Turkmenistan, - TurksAndCaicosIslands, - Uganda, - Ukraine, - UnitedArabEmirates, - UnitedKingdom, - UnitedStates, - UnitedStatesMinorOutlyingIslands, - Uruguay, - Uzbekistan, - Vanuatu, - VaticanCityState, - Venezuela, - BritishVirginIslands, - WallisAndFutunaIslands, - WesternSahara, - Yemen, - Zambia, - Zimbabwe, - Montenegro, - Serbia, - SaintBarthelemy, - SaintMartin, - LatinAmericaAndTheCaribbean, - LastCountry, - Brunei, - CongoKinshasa, - CongoBrazzaville, - Fiji, - Guernsey, - NorthKorea, - SouthKorea, - Laos, - Libya, - CuraSao, - PalestinianTerritories, - Russia, - SaintLucia, - SaintVincentAndTheGrenadines, - SaintHelena, - SaintPierreAndMiquelon, - Syria, - Tonga, - Vietnam, - UnitedStatesVirginIslands, - CanaryIslands, - ClippertonIsland, - AscensionIsland, - AlandIslands, - DiegoGarcia, - CeutaAndMelilla, - IsleOfMan, - Jersey, - TristanDaCunha, - SouthSudan, - Bonaire, - SintMaarten, - Kosovo, - TokelauCountry, - TuvaluCountry, - EuropeanUnion, - OutlyingOceania, - LatinAmerica, - World, - Europe, - BosniaAndHerzegovina, - CaribbeanNetherlands, - Curacao, - Czechia, - Eswatini, - Macao, - SaintVincentAndGrenadines, - SouthGeorgiaAndSouthSandwichIslands, - SvalbardAndJanMayen, - TimorLeste, - UnitedStatesOutlyingIslands, - VaticanCity, - WallisAndFutuna, -%If (Qt_6_2_0 -) - NauruTerritory, -%End -%If (Qt_6_2_0 -) - TokelauTerritory, -%End -%If (Qt_6_2_0 -) - TuvaluTerritory, -%End - }; - - enum NumberOption /BaseType=Flag/ - { - OmitGroupSeparator, - RejectGroupSeparator, - DefaultNumberOptions, - OmitLeadingZeroInExponent, - RejectLeadingZeroInExponent, - IncludeTrailingZeroesAfterDot, - RejectTrailingZeroesAfterDot, - }; - -%If (Qt_6_7_0 -) - - enum class TagSeparator - { - Dash, - Underscore, - }; - -%End - typedef QFlags NumberOptions; - QLocale(); - explicit QLocale(const QString &name); - QLocale(QLocale::Language language, QLocale::Country country = QLocale::AnyCountry); - QLocale(QLocale::Language language, QLocale::Script script, QLocale::Country country); - QLocale(const QLocale &other); - ~QLocale(); - QLocale::Language language() const; - QLocale::Country country() const; -%If (Qt_6_7_0 -) - QString name(QLocale::TagSeparator separator = QLocale::TagSeparator::Underscore) const; -%End -%If (- Qt_6_7_0) - QString name() const; -%End - short toShort(const QString &s, bool *ok = 0) const; - ushort toUShort(const QString &s, bool *ok = 0) const; - int toInt(const QString &s, bool *ok = 0) const; - uint toUInt(const QString &s, bool *ok = 0) const; - qlonglong toLongLong(const QString &s, bool *ok = 0) const; - qulonglong toULongLong(const QString &s, bool *ok = 0) const; - float toFloat(const QString &s, bool *ok = 0) const; - double toDouble(const QString &s, bool *ok = 0) const; - QString toString(QDate date, QLocale::FormatType format, QCalendar cal) const; - QString toString(QDate date, QStringView formatStr, QCalendar cal) const; - QString toString(QDate date, QLocale::FormatType format = QLocale::LongFormat) const; - QString toString(QDate date, QStringView formatStr) const; - QString toString(QTime time, QLocale::FormatType format = QLocale::LongFormat) const; - QString toString(QTime time, QStringView formatStr) const; - QString toString(double i /Constrained/, char format = 'g', int precision = 6) const; - static QString languageToString(QLocale::Language language); - static QString countryToString(QLocale::Country country); - static void setDefault(const QLocale &locale); - static QLocale c(); - static QLocale system(); - - enum FormatType - { - LongFormat, - ShortFormat, - NarrowFormat, - }; - - QString toString(const QDateTime &dateTime, QLocale::FormatType format, QCalendar cal) const; - QString toString(const QDateTime &dateTime, const QString &format) const; - QString toString(const QDateTime &dateTime, const QString &formatStr, QCalendar cal) const; -%MethodCode - // QStringView has issues being implemented as a mapped type. - sipRes = new QString(sipCpp->toString(*a0, QStringView(*a1), *a2)); -%End - - QString toString(const QDateTime &dateTime, QLocale::FormatType format = QLocale::LongFormat) const; - QString dateFormat(QLocale::FormatType format = QLocale::LongFormat) const; - QString timeFormat(QLocale::FormatType format = QLocale::LongFormat) const; - QString dateTimeFormat(QLocale::FormatType format = QLocale::LongFormat) const; -%If (Qt_6_7_0 -) - QDate toDate(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDate toDate(const QString &string, const QString &format) const; -%End -%If (Qt_6_7_0 -) - QDate toDate(const QString &string, const QString &format, QCalendar cal, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDate toDate(const QString &string, const QString &format, QCalendar cal) const; -%End -%If (Qt_6_7_0 -) - QDate toDate(const QString &string, QLocale::FormatType format, QCalendar cal, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDate toDate(const QString &string, QLocale::FormatType format, QCalendar cal) const; -%End -%If (Qt_6_7_0 -) - QDate toDate(const QString &string, QLocale::FormatType = QLocale::LongFormat, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDate toDate(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; -%End - QTime toTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; - QTime toTime(const QString &string, const QString &format) const; -%If (Qt_6_7_0 -) - QDateTime toDateTime(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDateTime toDateTime(const QString &string, const QString &format) const; -%End -%If (Qt_6_7_0 -) - QDateTime toDateTime(const QString &string, const QString &format, QCalendar cal, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDateTime toDateTime(const QString &string, const QString &format, QCalendar cal) const; -%End -%If (Qt_6_7_0 -) - QDateTime toDateTime(const QString &string, QLocale::FormatType format, QCalendar cal, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDateTime toDateTime(const QString &string, QLocale::FormatType format, QCalendar cal) const; -%End -%If (Qt_6_7_0 -) - QDateTime toDateTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat, int baseYear = QLocale::DefaultTwoDigitBaseYear) const; -%End -%If (- Qt_6_7_0) - QDateTime toDateTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; -%End - QString decimalPoint() const; - QString groupSeparator() const; - QString percent() const; - QString zeroDigit() const; - QString negativeSign() const; - QString exponential() const; - QString monthName(int, QLocale::FormatType format = QLocale::LongFormat) const; - QString dayName(int, QLocale::FormatType format = QLocale::LongFormat) const; - void setNumberOptions(QLocale::NumberOptions options); - QLocale::NumberOptions numberOptions() const; - - enum MeasurementSystem - { - MetricSystem, - ImperialSystem, - ImperialUSSystem, - ImperialUKSystem, - }; - - QLocale::MeasurementSystem measurementSystem() const; - QString positiveSign() const; - QString standaloneMonthName(int, QLocale::FormatType format = QLocale::LongFormat) const; - QString standaloneDayName(int, QLocale::FormatType format = QLocale::LongFormat) const; - QString amText() const; - QString pmText() const; - Qt::LayoutDirection textDirection() const; - - enum Script - { - AnyScript, - ArabicScript, - CyrillicScript, - DeseretScript, - GurmukhiScript, - SimplifiedHanScript, - TraditionalHanScript, - LatinScript, - MongolianScript, - TifinaghScript, - SimplifiedChineseScript, - TraditionalChineseScript, - ArmenianScript, - BengaliScript, - CherokeeScript, - DevanagariScript, - EthiopicScript, - GeorgianScript, - GreekScript, - GujaratiScript, - HebrewScript, - JapaneseScript, - KhmerScript, - KannadaScript, - KoreanScript, - LaoScript, - MalayalamScript, - MyanmarScript, - OriyaScript, - TamilScript, - TeluguScript, - ThaanaScript, - ThaiScript, - TibetanScript, - SinhalaScript, - SyriacScript, - YiScript, - VaiScript, - AvestanScript, - BalineseScript, - BamumScript, - BatakScript, - BopomofoScript, - BrahmiScript, - BugineseScript, - BuhidScript, - CanadianAboriginalScript, - CarianScript, - ChakmaScript, - ChamScript, - CopticScript, - CypriotScript, - EgyptianHieroglyphsScript, - FraserScript, - GlagoliticScript, - GothicScript, - HanScript, - HangulScript, - HanunooScript, - ImperialAramaicScript, - InscriptionalPahlaviScript, - InscriptionalParthianScript, - JavaneseScript, - KaithiScript, - KatakanaScript, - KayahLiScript, - KharoshthiScript, - LannaScript, - LepchaScript, - LimbuScript, - LinearBScript, - LycianScript, - LydianScript, - MandaeanScript, - MeiteiMayekScript, - MeroiticScript, - MeroiticCursiveScript, - NkoScript, - NewTaiLueScript, - OghamScript, - OlChikiScript, - OldItalicScript, - OldPersianScript, - OldSouthArabianScript, - OrkhonScript, - OsmanyaScript, - PhagsPaScript, - PhoenicianScript, - PollardPhoneticScript, - RejangScript, - RunicScript, - SamaritanScript, - SaurashtraScript, - SharadaScript, - ShavianScript, - SoraSompengScript, - CuneiformScript, - SundaneseScript, - SylotiNagriScript, - TagalogScript, - TagbanwaScript, - TaiLeScript, - TaiVietScript, - TakriScript, - UgariticScript, - BrailleScript, - HiraganaScript, - CaucasianAlbanianScript, - BassaVahScript, - DuployanScript, - ElbasanScript, - GranthaScript, - PahawhHmongScript, - KhojkiScript, - LinearAScript, - MahajaniScript, - ManichaeanScript, - MendeKikakuiScript, - ModiScript, - MroScript, - OldNorthArabianScript, - NabataeanScript, - PalmyreneScript, - PauCinHauScript, - OldPermicScript, - PsalterPahlaviScript, - SiddhamScript, - KhudawadiScript, - TirhutaScript, - VarangKshitiScript, - AhomScript, - AnatolianHieroglyphsScript, - HatranScript, - MultaniScript, - OldHungarianScript, - SignWritingScript, - AdlamScript, - BhaiksukiScript, - MarchenScript, - NewaScript, - OsageScript, - TangutScript, - HanWithBopomofoScript, - JamoScript, - BanglaScript, - MendeScript, - OdiaScript, -%If (Qt_6_6_0 -) - HanifiScript, -%End - }; - - enum CurrencySymbolFormat - { - CurrencyIsoCode, - CurrencySymbol, - CurrencyDisplayName, - }; - - QLocale::Script script() const; -%If (Qt_6_7_0 -) - QString bcp47Name(QLocale::TagSeparator separator = QLocale::TagSeparator::Dash) const; -%End -%If (- Qt_6_7_0) - QString bcp47Name() const; -%End - QString nativeLanguageName() const; - QString nativeCountryName() const; - Qt::DayOfWeek firstDayOfWeek() const; - QList weekdays() const; - QString toUpper(const QString &str) const; - QString toLower(const QString &str) const; - QString currencySymbol(QLocale::CurrencySymbolFormat format = QLocale::CurrencySymbol) const; - QString toCurrencyString(double, const QString &symbol = QString(), int precision = -1) const; -%If (Qt_6_7_0 -) - QStringList uiLanguages(QLocale::TagSeparator separator = QLocale::TagSeparator::Dash) const; -%End -%If (- Qt_6_7_0) - QStringList uiLanguages() const; -%End - static QString scriptToString(QLocale::Script script); -%If (Qt_6_2_0 -) - static QList matchingLocales(QLocale::Language language, QLocale::Script script, QLocale::Territory territory); -%End -%If (- Qt_6_2_0) - static QList matchingLocales(QLocale::Language language, QLocale::Script script, QLocale::Country country); -%End - - enum QuotationStyle - { - StandardQuotation, - AlternateQuotation, - }; - - QString quoteString(QStringView str, QLocale::QuotationStyle style = QLocale::StandardQuotation) const; - QString createSeparatedList(const QStringList &list) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - enum FloatingPointPrecisionOption /BaseType=IntEnum/ - { - FloatingPointShortest, - }; - - void swap(QLocale &other /Constrained/); - QString toString(SIP_PYOBJECT i /TypeHint="int"/) const; -%MethodCode - // Convert a Python int avoiding overflow as much as possible. - - static PyObject *zero = 0; - if (!zero) - zero = PyLong_FromLong(0); - - int rc = PyObject_RichCompareBool(a0, zero, Py_LT); - - PyErr_Clear(); - - if (rc < 0) - { - sipError = sipBadCallableArg(0, a0); - } - else if (rc) - { - long long value = PyLong_AsLongLong(a0); - - if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) - { - sipError = sipBadCallableArg(0, a0); - } - else - { - sipRes = new QString(sipCpp->toString(value)); - } - } - else - { - unsigned long long value = PyLong_AsUnsignedLongLongMask(a0); - - if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) - { - sipError = sipBadCallableArg(0, a0); - } - else - { - sipRes = new QString(sipCpp->toString(value)); - } - } -%End - - QString toCurrencyString(SIP_PYOBJECT value /TypeHint="int"/, const QString &symbol = QString()) const; -%MethodCode - // Convert a Python int avoiding overflow as much as possible. - - static PyObject *zero = 0; - if (!zero) - zero = PyLong_FromLong(0); - - int rc = PyObject_RichCompareBool(a0, zero, Py_LT); - - PyErr_Clear(); - - if (rc < 0) - { - sipError = sipBadCallableArg(0, a0); - } - else if (rc) - { - long long value = PyLong_AsLongLong(a0); - - if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) - { - sipError = sipBadCallableArg(0, a0); - } - else - { - sipRes = new QString(sipCpp->toCurrencyString(value, *a1)); - } - } - else - { - unsigned long long value = PyLong_AsUnsignedLongLongMask(a0); - - if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) - { - sipError = sipBadCallableArg(0, a0); - } - else - { - sipRes = new QString(sipCpp->toCurrencyString(value, *a1)); - } - } -%End - - enum DataSizeFormat /BaseType=Flag/ - { - DataSizeIecFormat, - DataSizeTraditionalFormat, - DataSizeSIFormat, - }; - - typedef QFlags DataSizeFormats; - QString formattedDataSize(qint64 bytes, int precision = 2, QLocale::DataSizeFormats format = QLocale::DataSizeIecFormat) const; - long toLong(const QString &s, bool *ok = 0) const; - ulong toULong(const QString &s, bool *ok = 0) const; - QLocale collation() const; -%If (Qt_6_3_0 -) - static QString languageToCode(QLocale::Language language, QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode); -%End -%If (Qt_6_1_0 - Qt_6_3_0) - static QString languageToCode(QLocale::Language language); -%End -%If (Qt_6_3_0 -) - static QLocale::Language codeToLanguage(QStringView languageCode, QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode); -%End -%If (Qt_6_1_0 - Qt_6_3_0) - static QLocale::Language codeToLanguage(QStringView languageCode); -%End -%If (Qt_6_1_0 -) - static QString countryToCode(QLocale::Country country); -%End -%If (Qt_6_1_0 -) - static QLocale::Country codeToCountry(QStringView countryCode); -%End -%If (Qt_6_1_0 -) - static QString scriptToCode(QLocale::Script script); -%End -%If (Qt_6_1_0 -) - static QLocale::Script codeToScript(QStringView scriptCode); -%End -%If (Qt_6_2_0 -) - typedef QLocale::Country Territory; -%End -%If (Qt_6_2_0 -) - QLocale::Territory territory() const; -%End -%If (Qt_6_2_0 -) - QString nativeTerritoryName() const; -%End -%If (Qt_6_2_0 -) - static QString territoryToCode(QLocale::Territory territory); -%End -%If (Qt_6_2_0 -) - static QLocale::Territory codeToTerritory(QStringView territoryCode); -%End -%If (Qt_6_2_0 -) - static QString territoryToString(QLocale::Territory territory); -%End -%If (Qt_6_3_0 -) - - enum LanguageCodeType /BaseType=IntFlag/ - { - ISO639Part1, - ISO639Part2B, - ISO639Part2T, - ISO639Part3, - LegacyLanguageCode, - ISO639Part2, - ISO639Alpha2, - ISO639Alpha3, - ISO639, - AnyLanguageCode, - }; - -%End -%If (Qt_6_3_0 -) - typedef QFlags LanguageCodeTypes; -%End -%If (Qt_6_7_0 -) - static const int DefaultTwoDigitBaseYear; -%End -}; - -QDataStream &operator<<(QDataStream &, const QLocale &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QLocale & /Constrained/) /ReleaseGIL/; -bool operator==(const QLocale &lhs, const QLocale &rhs); -bool operator!=(const QLocale &lhs, const QLocale &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlockfile.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlockfile.sip deleted file mode 100644 index 794d1d5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlockfile.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qlockfile.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLockFile -{ -%TypeHeaderCode -#include -%End - -public: - QLockFile(const QString &fileName); - ~QLockFile(); - bool lock() /ReleaseGIL/; - bool tryLock(int timeout = 0) /ReleaseGIL/; - void unlock() /ReleaseGIL/; - void setStaleLockTime(int); - int staleLockTime() const; - bool isLocked() const /ReleaseGIL/; - bool getLockInfo(qint64 *pid /Out/, QString *hostname /Out/, QString *appname /Out/) const; - bool removeStaleLockFile() /ReleaseGIL/; - - enum LockError - { - NoError, - LockFailedError, - PermissionError, - UnknownError, - }; - - QLockFile::LockError error() const; - QString fileName() const; - -private: - QLockFile(const QLockFile &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlogging.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlogging.sip deleted file mode 100644 index 79098ee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qlogging.sip +++ /dev/null @@ -1,233 +0,0 @@ -// qlogging.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -enum QtMsgType -{ - QtDebugMsg, - QtWarningMsg, - QtCriticalMsg, - QtFatalMsg, - QtSystemMsg, - QtInfoMsg, -}; - -class QMessageLogContext /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - int line; - const char *file; - const char *function; - const char *category; -}; - -class QMessageLogger -{ -%TypeHeaderCode -#include -%End - -public: - QMessageLogger(); - QMessageLogger(const char *file, int line, const char *function); - QMessageLogger(const char *file, int line, const char *function, const char *category); - void debug(const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->debug("%s", a0); - Py_END_ALLOW_THREADS -%End - - void debug(const QLoggingCategory &cat, const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->debug(*a0, "%s", a1); - Py_END_ALLOW_THREADS -%End - - void info(const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->info("%s", a0); - Py_END_ALLOW_THREADS -%End - - void info(const QLoggingCategory &cat, const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->info(*a0, "%s", a1); - Py_END_ALLOW_THREADS -%End - - void warning(const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->warning("%s", a0); - Py_END_ALLOW_THREADS -%End - - void warning(const QLoggingCategory &cat, const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->warning(*a0, "%s", a1); - Py_END_ALLOW_THREADS -%End - - void critical(const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->critical("%s", a0); - Py_END_ALLOW_THREADS -%End - - void critical(const QLoggingCategory &cat, const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->critical(*a0, "%s", a1); - Py_END_ALLOW_THREADS -%End - - void fatal(const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->fatal("%s", a0); - Py_END_ALLOW_THREADS -%End - -%If (Qt_6_5_0 -) - void fatal(const QLoggingCategory &cat, const char *msg) const /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->fatal(*a0, "%s", a1); - Py_END_ALLOW_THREADS -%End - -%End - -private: - QMessageLogger(const QMessageLogger &); -}; - -void qCritical(const char *msg) /ReleaseGIL/; -%MethodCode - const char *file, *function; - int line = qpycore_current_context(&file, &function); - - Py_BEGIN_ALLOW_THREADS - QMessageLogger(file, line, function).critical("%s", a0); - Py_END_ALLOW_THREADS -%End - -void qDebug(const char *msg) /ReleaseGIL/; -%MethodCode - const char *file, *function; - int line = qpycore_current_context(&file, &function); - - Py_BEGIN_ALLOW_THREADS - QMessageLogger(file, line, function).debug("%s", a0); - Py_END_ALLOW_THREADS -%End - -void qFatal(const char *msg) /ReleaseGIL/; -%MethodCode - const char *file, *function; - int line = qpycore_current_context(&file, &function); - - Py_BEGIN_ALLOW_THREADS - QMessageLogger(file, line, function).fatal("%s", a0); - Py_END_ALLOW_THREADS -%End - -void qInfo(const char *msg) /ReleaseGIL/; -%MethodCode - const char *file, *function; - int line = qpycore_current_context(&file, &function); - - Py_BEGIN_ALLOW_THREADS - QMessageLogger(file, line, function).info("%s", a0); - Py_END_ALLOW_THREADS -%End - -void qWarning(const char *msg) /ReleaseGIL/; -%MethodCode - const char *file, *function; - int line = qpycore_current_context(&file, &function); - - Py_BEGIN_ALLOW_THREADS - QMessageLogger(file, line, function).warning("%s", a0); - Py_END_ALLOW_THREADS -%End - -SIP_PYCALLABLE qInstallMessageHandler(SIP_PYCALLABLE /AllowNone,TypeHint="Optional[Callable[[QtMsgType, QMessageLogContext, QString], None]]"/) /TypeHint="Optional[Callable[[QtMsgType, QMessageLogContext, QString], None]]"/; -%MethodCode - // Treat None as the default handler. - QtMessageHandler old = qInstallMessageHandler((a0 != Py_None) ? qtcore_MessageHandler : 0); - - // If we recognise the old handler, then return it. Otherwise return - // the default handler. This doesn't exactly mimic the Qt behaviour - // but it is probably close enough for the way it will be used. - sipRes = (old == qtcore_MessageHandler) ? qtcore_PyMessageHandler : Py_None; - Py_INCREF(sipRes); - - // Save the new Python handler. - Py_XDECREF(qtcore_PyMessageHandler); - qtcore_PyMessageHandler = a0; - Py_INCREF(qtcore_PyMessageHandler); -%End - -// Module code needed by qInstallMessageHandler(). -%ModuleCode -// The user supplied Python handler. -static PyObject *qtcore_PyMessageHandler = 0; - -// The C++ wrapper around the Python handler. -static void qtcore_MessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) -{ - PyObject *res; - - SIP_BLOCK_THREADS - - res = sipCallMethod(0, qtcore_PyMessageHandler, "FDD", type, sipType_QtMsgType, &context, sipType_QMessageLogContext, NULL, &msg, sipType_QString, NULL); - - Py_XDECREF(res); - - if (res != NULL && res != Py_None) - { - PyErr_SetString(PyExc_TypeError, "invalid result type from PyQt message handler"); - res = NULL; - } - - if (res == NULL) - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS -} -%End -void qSetMessagePattern(const QString &messagePattern); -QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &buf); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qloggingcategory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qloggingcategory.sip deleted file mode 100644 index cc4200e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qloggingcategory.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qloggingcategory.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLoggingCategory -{ -%TypeHeaderCode -#include -%End - -public: - QLoggingCategory(const char *category, QtMsgType severityLevel = QtDebugMsg); - ~QLoggingCategory(); - bool isEnabled(QtMsgType type) const; - void setEnabled(QtMsgType type, bool enable); - bool isDebugEnabled() const; - bool isInfoEnabled() const; - bool isWarningEnabled() const; - bool isCriticalEnabled() const; - const char *categoryName() const; - QLoggingCategory &operator()(); - static QLoggingCategory *defaultCategory(); - static void setFilterRules(const QString &rules); - -private: - QLoggingCategory(const QLoggingCategory &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmargins.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmargins.sip deleted file mode 100644 index 39641bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmargins.sip +++ /dev/null @@ -1,113 +0,0 @@ -// qmargins.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMargins -{ -%TypeHeaderCode -#include -%End - -public: - QMargins(); - QMargins(int aleft, int atop, int aright, int abottom); - bool isNull() const; - int left() const; - int top() const; - int right() const; - int bottom() const; - void setLeft(int aleft); - void setTop(int atop); - void setRight(int aright); - void setBottom(int abottom); - QMargins &operator+=(const QMargins &margins); - QMargins &operator-=(const QMargins &margins); - QMargins &operator*=(int factor /Constrained/); - QMargins &operator/=(int divisor /Constrained/); - QMargins &operator*=(qreal factor); - QMargins &operator/=(qreal divisor); - QMargins &operator+=(int margin); - QMargins &operator-=(int margin); -%If (Qt_6_4_0 -) - QMarginsF toMarginsF() const; -%End -}; - -bool operator==(const QMargins &m1, const QMargins &m2); -bool operator!=(const QMargins &m1, const QMargins &m2); -QDataStream &operator<<(QDataStream &, const QMargins & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMargins & /Constrained/) /ReleaseGIL/; -QMargins operator+(const QMargins &m1, const QMargins &m2); -QMargins operator-(const QMargins &m1, const QMargins &m2); -QMargins operator*(const QMargins &margins, int factor /Constrained/); -QMargins operator*(const QMargins &margins, qreal factor); -QMargins operator/(const QMargins &margins, int divisor /Constrained/); -QMargins operator/(const QMargins &margins, qreal divisor); -QMargins operator+(const QMargins &lhs, int rhs); -QMargins operator+(int lhs, const QMargins &rhs); -QMargins operator-(const QMargins &lhs, int rhs); -QMargins operator+(const QMargins &margins); -QMargins operator-(const QMargins &margins); -QMargins operator|(const QMargins &m1, const QMargins &m2); - -class QMarginsF -{ -%TypeHeaderCode -#include -%End - -public: - QMarginsF(); - QMarginsF(qreal aleft, qreal atop, qreal aright, qreal abottom); - QMarginsF(const QMargins &margins); - bool isNull() const; - qreal left() const; - qreal top() const; - qreal right() const; - qreal bottom() const; - void setLeft(qreal aleft); - void setTop(qreal atop); - void setRight(qreal aright); - void setBottom(qreal abottom); - QMarginsF &operator+=(const QMarginsF &margins); - QMarginsF &operator-=(const QMarginsF &margins); - QMarginsF &operator+=(qreal addend); - QMarginsF &operator-=(qreal subtrahend); - QMarginsF &operator*=(qreal factor); - QMarginsF &operator/=(qreal divisor); - QMargins toMargins() const; -}; - -QDataStream &operator<<(QDataStream &, const QMarginsF & /Constrained/); -QDataStream &operator>>(QDataStream &, QMarginsF & /Constrained/); -bool operator==(const QMarginsF &lhs, const QMarginsF &rhs); -bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs); -QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs); -QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs); -QMarginsF operator+(const QMarginsF &lhs, qreal rhs); -QMarginsF operator+(qreal lhs, const QMarginsF &rhs); -QMarginsF operator-(const QMarginsF &lhs, qreal rhs); -QMarginsF operator*(const QMarginsF &lhs, qreal rhs); -QMarginsF operator*(qreal lhs, const QMarginsF &rhs); -QMarginsF operator/(const QMarginsF &lhs, qreal divisor); -QMarginsF operator+(const QMarginsF &margins); -QMarginsF operator-(const QMarginsF &margins); -QMarginsF operator|(const QMarginsF &m1, const QMarginsF &m2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmessageauthenticationcode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmessageauthenticationcode.sip deleted file mode 100644 index a0e6deb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmessageauthenticationcode.sip +++ /dev/null @@ -1,78 +0,0 @@ -// qmessageauthenticationcode.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMessageAuthenticationCode -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_6_0 -) - QMessageAuthenticationCode(QCryptographicHash::Algorithm method, QByteArrayView key = {}); -%End -%If (- Qt_6_6_0) - QMessageAuthenticationCode(QCryptographicHash::Algorithm method, const QByteArray &key = QByteArray()); -%End - ~QMessageAuthenticationCode(); - void reset(); -%If (Qt_6_6_0 -) - void setKey(QByteArrayView key); -%End -%If (- Qt_6_6_0) - void setKey(const QByteArray &key); -%End -%If (Qt_6_6_0 -) - void addData(QByteArrayView data); -%End -%If (- Qt_6_6_0) - void addData(SIP_PYBUFFER); -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - sipCpp->addData(reinterpret_cast(bi.bi_buf), bi.bi_len); - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -%End - bool addData(QIODevice *device); - QByteArray result() const; -%If (Qt_6_6_0 -) - static QByteArray hash(QByteArrayView message, QByteArrayView key, QCryptographicHash::Algorithm method); -%End -%If (- Qt_6_6_0) - static QByteArray hash(const QByteArray &message, const QByteArray &key, QCryptographicHash::Algorithm method); -%End -%If (Qt_6_6_0 -) - void swap(QMessageAuthenticationCode &other /Constrained/); -%End - -private: - QMessageAuthenticationCode(const QMessageAuthenticationCode &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetaobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetaobject.sip deleted file mode 100644 index 35a4954..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetaobject.sip +++ /dev/null @@ -1,275 +0,0 @@ -// qmetaobject.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMetaMethod -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// Raise an exception when QMetaMethod::invoke() returns false. -static void qtcore_invoke_exception() -{ - PyErr_SetString(PyExc_RuntimeError, "QMetaMethod.invoke() call failed"); -} -%End - -public: - QMetaMethod(); - const char *typeName() const; - QList parameterTypes() const; - QList parameterNames() const; - const char *tag() const; - - enum Access - { - Private, - Protected, - Public, - }; - - QMetaMethod::Access access() const; - - enum MethodType - { - Method, - Signal, - Slot, - Constructor, - }; - - QMetaMethod::MethodType methodType() const; - SIP_PYOBJECT invoke(QObject *object, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()) const; -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10); - Py_END_ALLOW_THREADS - - if (ok) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - qtcore_invoke_exception(); - } -%End - - SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()) const; -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11); - Py_END_ALLOW_THREADS - - if (ok) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - qtcore_invoke_exception(); - } -%End - - SIP_PYOBJECT invoke(QObject *object, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()) const; -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, - *a11); - Py_END_ALLOW_THREADS - - if (ok) - sipRes = qpycore_ReturnValue(a1Wrapper); - else - - qtcore_invoke_exception(); -%End - - SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()) const; -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11, - *a12); - Py_END_ALLOW_THREADS - - if (ok) - sipRes = qpycore_ReturnValue(a2Wrapper); - else - qtcore_invoke_exception(); -%End - - int methodIndex() const; - int revision() const; - bool isValid() const; - QByteArray methodSignature() const; - QByteArray name() const; - int returnType() const; - int parameterCount() const; - int parameterType(int index) const; - QMetaType returnMetaType() const; - QMetaType parameterMetaType(int index) const; - QByteArray parameterTypeName(int index) const; - int relativeMethodIndex() const; -%If (Qt_6_2_0 -) - bool isConst() const; -%End -}; - -class QMetaEnum -{ -%TypeHeaderCode -#include -%End - -public: - QMetaEnum(); - const char *name() const; - bool isFlag() const; - int keyCount() const; - const char *key(int index) const; - int value(int index) const; - const char *scope() const; - int keyToValue(const char *key, bool *ok = 0) const; - const char *valueToKey(int value) const; - int keysToValue(const char *keys, bool *ok = 0) const; - QByteArray valueToKeys(int value) const; - bool isValid() const; - bool isScoped() const; - const char *enumName() const; -%If (Qt_6_6_0 -) - QMetaType metaType() const; -%End -}; - -class QMetaProperty -{ -%TypeHeaderCode -#include -%End - -public: - QMetaProperty(); - const char *name() const; - const char *typeName() const; - bool isReadable() const; - bool isWritable() const; - bool isDesignable() const; - bool isScriptable() const; - bool isStored() const; - bool isFlagType() const; - bool isEnumType() const; - QMetaEnum enumerator() const; - SIP_PYOBJECT read(const QObject *obj) const /TypeHint="Any"/; -%MethodCode - // Make use of the QMetaProperty to provide the extra information to correctly - // handle enums. - sipRes = qpycore_PyObject_FromQVariant(*sipCpp, sipCpp->read(a0)); -%End - - bool write(QObject *obj, const QVariant &value) const; -%MethodCode - // If it looks like we are trying to write an int to an enum then we are - // probably trying to write to an unregistered enum. Converting the int to the - // name of the corresponding key should work (although this isn't a documented - // feature). - - QMetaEnum me = sipCpp->enumerator(); - if (me.isValid() && a1->typeId() == QMetaType::Int) - { - QString key; - - if (me.isFlag()) - { - key = QString(me.valueToKeys(a1->toInt())); - } - else - { - const char *key_s = me.valueToKey(a1->toInt()); - - if (key_s) - { - key = QString(key_s); - } - else - { - PyErr_Format(PyExc_ValueError, "%S is not a valid enum member", a1); - sipIsErr = 1; - } - } - - if (!sipIsErr) - *const_cast(a1) = QVariant(key); - } - - if (!sipIsErr) - sipRes = sipCpp->write(a0, *a1); -%End - - bool reset(QObject *obj) const; - bool hasStdCppSet() const; - bool isValid() const; - bool isResettable() const; - bool isUser() const; - int userType() const; - bool hasNotifySignal() const; - QMetaMethod notifySignal() const; - int notifySignalIndex() const; - int propertyIndex() const; - bool isConstant() const; - bool isFinal() const; - int revision() const; - int relativePropertyIndex() const; - bool isRequired() const; - QMetaType metaType() const; - bool isBindable() const; - int typeId() const; -}; - -class QMetaClassInfo -{ -%TypeHeaderCode -#include -%End - -public: - QMetaClassInfo(); - const char *name() const; - const char *value() const; -}; - -bool operator==(const QMetaMethod &m1, const QMetaMethod &m2); -bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetatype.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetatype.sip deleted file mode 100644 index c063b72..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmetatype.sip +++ /dev/null @@ -1,194 +0,0 @@ -// qmetatype.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMetaType -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - UnknownType, - Void, - Bool, - Int, - UInt, - LongLong, - ULongLong, - Double, - QChar, - QVariantMap, - QVariantList, - QVariantHash, - QString, - QStringList, - QByteArray, - QBitArray, - QDate, - QTime, - QDateTime, - QUrl, - QLocale, - QRect, - QRectF, - QSize, - QSizeF, - QLine, - QLineF, - QPoint, - QPointF, - LastCoreType, - FirstGuiType, - QFont, - QPixmap, - QBrush, - QColor, - QPalette, - QIcon, - QImage, - QPolygon, - QRegion, - QBitmap, - QCursor, - QSizePolicy, - QKeySequence, - QPen, - QTextLength, - QTextFormat, - QTransform, - VoidStar, - Long, - Short, - Char, - Char16, - Char32, - ULong, - UShort, - UChar, - Float, -%If (Qt_6_5_0 -) - Float16, -%End - QObjectStar, - QMatrix4x4, - QVector2D, - QVector3D, - QVector4D, - QQuaternion, - QEasingCurve, - QVariant, - QUuid, - QModelIndex, - QPolygonF, - SChar, - QRegularExpression, - QJsonValue, - QJsonObject, - QJsonArray, - QJsonDocument, - QByteArrayList, - QPersistentModelIndex, - QCborSimpleType, - QCborValue, - QCborArray, - QCborMap, - QColorSpace, - QVariantPair, - User, - }; - - static bool isRegistered(int type); - QMetaType(); - explicit QMetaType(int type); - - enum TypeFlag /BaseType=Flag/ - { - NeedsConstruction, - NeedsDestruction, - PointerToQObject, - IsEnumeration, - IsUnsignedEnumeration, - IsPointer, - RelocatableType, - IsQmlList, -%If (Qt_6_2_0 -) - IsConst, -%End -%If (Qt_6_5_0 -) - NeedsCopyConstruction, -%End -%If (Qt_6_5_0 -) - NeedsMoveConstruction, -%End - }; - - typedef QFlags TypeFlags; - qsizetype sizeOf() const; - QMetaType::TypeFlags flags() const; - bool isValid() const; - bool isRegistered() const; - int id() const; -%If (Qt_6_1_0 -) - bool hasRegisteredDataStreamOperators() const; -%End - bool hasRegisteredDebugStreamOperator() const; - const char *name() const /Encoding="None"/; - qsizetype alignOf() const; - bool isEqualityComparable() const; - bool isOrdered() const; - static QMetaType fromName(QByteArrayView name); - static bool canConvert(QMetaType fromType, QMetaType toType); - static bool canView(QMetaType fromType, QMetaType toType); -%If (Qt_6_4_0 -) - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - -%End -%If (Qt_6_5_0 -) - void registerType() const; -%End -%If (Qt_6_5_0 -) - bool isDefaultConstructible() const; -%End -%If (Qt_6_5_0 -) - bool isCopyConstructible() const; -%End -%If (Qt_6_5_0 -) - bool isMoveConstructible() const; -%End -%If (Qt_6_5_0 -) - bool isDestructible() const; -%End -%If (Qt_6_6_0 -) - QMetaType underlyingType() const; -%End - -private: - QMetaType(const QMetaType &); -}; - -bool operator==(QMetaType a, QMetaType b); -bool operator!=(QMetaType a, QMetaType b); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedata.sip deleted file mode 100644 index 2a2d10b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedata.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qmimedata.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMimeData : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QMimeData(); - virtual ~QMimeData(); - QList urls() const; - void setUrls(const QList &urls); - bool hasUrls() const; - QString text() const; - void setText(const QString &text); - bool hasText() const; - QString html() const; - void setHtml(const QString &html); - bool hasHtml() const; - QVariant imageData() const; - void setImageData(const QVariant &image); - bool hasImage() const; - QVariant colorData() const; - void setColorData(const QVariant &color); - bool hasColor() const; - QByteArray data(const QString &mimetype) const; - void setData(const QString &mimetype, const QByteArray &data); - virtual bool hasFormat(const QString &mimetype) const; - virtual QStringList formats() const; - void clear(); - void removeFormat(const QString &mimetype); - -protected: - virtual QVariant retrieveData(const QString &mimetype, QMetaType preferredType) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedatabase.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedatabase.sip deleted file mode 100644 index 4689e78..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimedatabase.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qmimedatabase.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMimeDatabase -{ -%TypeHeaderCode -#include -%End - -public: - QMimeDatabase(); - ~QMimeDatabase(); - QMimeType mimeTypeForName(const QString &nameOrAlias) const; - - enum MatchMode - { - MatchDefault, - MatchExtension, - MatchContent, - }; - - QMimeType mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const; - QMimeType mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const; - QList mimeTypesForFileName(const QString &fileName) const; - QMimeType mimeTypeForData(const QByteArray &data) const; - QMimeType mimeTypeForData(QIODevice *device) const; - QMimeType mimeTypeForUrl(const QUrl &url) const; - QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const; - QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const; - QString suffixForFileName(const QString &fileName) const; - QList allMimeTypes() const; - -private: - QMimeDatabase(const QMimeDatabase &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimetype.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimetype.sip deleted file mode 100644 index 2bd6913..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmimetype.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qmimetype.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMimeType -{ -%TypeHeaderCode -#include -%End - -public: - QMimeType(); - QMimeType(const QMimeType &other); - ~QMimeType(); - void swap(QMimeType &other /Constrained/); - bool operator==(const QMimeType &other) const; - bool operator!=(const QMimeType &other) const; - bool isValid() const; - bool isDefault() const; - QString name() const; - QString comment() const; - QString genericIconName() const; - QString iconName() const; - QStringList globPatterns() const; - QStringList parentMimeTypes() const; - QStringList allAncestors() const; - QStringList aliases() const; - QStringList suffixes() const; - QString preferredSuffix() const; - bool inherits(const QString &mimeTypeName) const; - QString filterString() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutex.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutex.sip deleted file mode 100644 index 9899695..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutex.sip +++ /dev/null @@ -1,63 +0,0 @@ -// qmutex.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMutex -{ -%TypeHeaderCode -#include -%End - -public: - QMutex(); - ~QMutex(); -// Methods from QBasicMutex. -void lock() /ReleaseGIL/; -bool tryLock() /ReleaseGIL/; -void unlock() /ReleaseGIL/; -%If (Qt_6_6_0 -) - bool tryLock(QDeadlineTimer timeout) /ReleaseGIL/; -%End - bool tryLock(int timeout) /ReleaseGIL/; - -private: - QMutex(const QMutex &); -}; - -class QRecursiveMutex -{ -%TypeHeaderCode -#include -%End - -public: - QRecursiveMutex(); - ~QRecursiveMutex(); - void lock() /ReleaseGIL/; -%If (Qt_6_6_0 -) - bool tryLock(QDeadlineTimer) /ReleaseGIL/ [bool (QDeadlineTimer timer = {})]; -%End - bool tryLock(int timeout = 0) /ReleaseGIL/; - void unlock() /ReleaseGIL/; - -private: - QRecursiveMutex(const QRecursiveMutex &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutexlocker.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutexlocker.sip deleted file mode 100644 index d51de52..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qmutexlocker.sip +++ /dev/null @@ -1,65 +0,0 @@ -// This is the SIP interface definition for the QMutexLocker class. -// -// In Qt6 this is a template so we wrap our own class that implements the Qt5 -// API. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class PyQtMutexLocker /PyName=QMutexLocker/ -{ -%TypeHeaderCode -#include "qpycore_pyqtmutexlocker.h" -%End - -public: - PyQtMutexLocker(QMutex *mutex /GetWrapper/) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp = new PyQtMutexLocker(a0, a0Wrapper); - Py_END_ALLOW_THREADS -%End - - PyQtMutexLocker(QRecursiveMutex *mutex /GetWrapper/) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp = new PyQtMutexLocker(a0, a0Wrapper); - Py_END_ALLOW_THREADS -%End - - ~PyQtMutexLocker(); - - SIP_PYOBJECT mutex() /TypeHint="Union[QMutex, QRecursiveMutex]"/; - void unlock() /ReleaseGIL/; - void relock() /ReleaseGIL/; - - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->unlock(); -%End - -private: - PyQtMutexLocker(const PyQtMutexLocker &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnamespace.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnamespace.sip deleted file mode 100644 index beb2e36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnamespace.sip +++ /dev/null @@ -1,1616 +0,0 @@ -// qnamespace.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace Qt -{ -%TypeHeaderCode -#include -%End - - enum GlobalColor - { - color0, - color1, - black, - white, - darkGray, - gray, - lightGray, - red, - green, - blue, - cyan, - magenta, - yellow, - darkRed, - darkGreen, - darkBlue, - darkCyan, - darkMagenta, - darkYellow, - transparent, - }; - - enum KeyboardModifier /BaseType=Flag/ - { - NoModifier, - ShiftModifier, - ControlModifier, - AltModifier, - MetaModifier, - KeypadModifier, - GroupSwitchModifier, - KeyboardModifierMask, - }; - - typedef QFlags KeyboardModifiers; - - enum Modifier /BaseType=Flag/ - { - META, - SHIFT, - CTRL, - ALT, - MODIFIER_MASK, - }; - - typedef QFlags Modifiers; - - enum MouseButton /BaseType=Flag/ - { - NoButton, - AllButtons, - LeftButton, - RightButton, - MiddleButton, - XButton1, - XButton2, - BackButton, - ExtraButton1, - ForwardButton, - ExtraButton2, - TaskButton, - ExtraButton3, - ExtraButton4, - ExtraButton5, - ExtraButton6, - ExtraButton7, - ExtraButton8, - ExtraButton9, - ExtraButton10, - ExtraButton11, - ExtraButton12, - ExtraButton13, - ExtraButton14, - ExtraButton15, - ExtraButton16, - ExtraButton17, - ExtraButton18, - ExtraButton19, - ExtraButton20, - ExtraButton21, - ExtraButton22, - ExtraButton23, - ExtraButton24, - }; - - typedef QFlags MouseButtons; - - enum Orientation /BaseType=Flag/ - { - Horizontal, - Vertical, - }; - - typedef QFlags Orientations; - - enum FocusPolicy /BaseType=IntFlag/ - { - NoFocus, - TabFocus, - ClickFocus, - StrongFocus, - WheelFocus, - }; - - enum SortOrder - { - AscendingOrder, - DescendingOrder, - }; - - enum AlignmentFlag /BaseType=IntFlag/ - { - AlignLeft, - AlignLeading, - AlignRight, - AlignTrailing, - AlignHCenter, - AlignJustify, - AlignAbsolute, - AlignHorizontal_Mask, - AlignTop, - AlignBottom, - AlignVCenter, - AlignVertical_Mask, - AlignCenter, - AlignBaseline, - }; - - typedef QFlags Alignment; - - enum TextFlag /BaseType=IntFlag/ - { - TextSingleLine, - TextDontClip, - TextExpandTabs, - TextShowMnemonic, - TextWordWrap, - TextWrapAnywhere, - TextDontPrint, - TextIncludeTrailingSpaces, - TextHideMnemonic, - TextJustificationForced, - }; - - enum TextElideMode - { - ElideLeft, - ElideRight, - ElideMiddle, - ElideNone, - }; - - enum WindowType /BaseType=IntFlag/ - { - Widget, - Window, - Dialog, - Sheet, - Drawer, - Popup, - Tool, - ToolTip, - SplashScreen, - Desktop, - SubWindow, - WindowType_Mask, - MSWindowsFixedSizeDialogHint, - MSWindowsOwnDC, - X11BypassWindowManagerHint, - FramelessWindowHint, - CustomizeWindowHint, - WindowTitleHint, - WindowSystemMenuHint, - WindowMinimizeButtonHint, - WindowMaximizeButtonHint, - WindowMinMaxButtonsHint, - WindowContextHelpButtonHint, - WindowShadeButtonHint, - WindowStaysOnTopHint, - WindowStaysOnBottomHint, - WindowCloseButtonHint, - MacWindowToolBarButtonHint, - BypassGraphicsProxyWidget, - WindowTransparentForInput, - WindowOverridesSystemGestures, - WindowDoesNotAcceptFocus, - NoDropShadowWindowHint, - WindowFullscreenButtonHint, - ForeignWindow, - BypassWindowManagerHint, - CoverWindow, - MaximizeUsingFullscreenGeometryHint, - }; - - typedef QFlags WindowFlags; - - enum WindowState /BaseType=Flag/ - { - WindowNoState, - WindowMinimized, - WindowMaximized, - WindowFullScreen, - WindowActive, - }; - - typedef QFlags WindowStates; - - enum WidgetAttribute - { - WA_Disabled, - WA_UnderMouse, - WA_MouseTracking, - WA_OpaquePaintEvent, - WA_StaticContents, - WA_LaidOut, - WA_PaintOnScreen, - WA_NoSystemBackground, - WA_UpdatesDisabled, - WA_Mapped, - WA_InputMethodEnabled, - WA_WState_Visible, - WA_WState_Hidden, - WA_ForceDisabled, - WA_KeyCompression, - WA_PendingMoveEvent, - WA_PendingResizeEvent, - WA_SetPalette, - WA_SetFont, - WA_SetCursor, - WA_NoChildEventsFromChildren, - WA_WindowModified, - WA_Resized, - WA_Moved, - WA_PendingUpdate, - WA_InvalidSize, - WA_CustomWhatsThis, - WA_LayoutOnEntireRect, - WA_OutsideWSRange, - WA_GrabbedShortcut, - WA_TransparentForMouseEvents, - WA_PaintUnclipped, - WA_SetWindowIcon, - WA_NoMouseReplay, - WA_DeleteOnClose, - WA_RightToLeft, - WA_SetLayoutDirection, - WA_NoChildEventsForParent, - WA_ForceUpdatesDisabled, - WA_WState_Created, - WA_WState_CompressKeys, - WA_WState_InPaintEvent, - WA_WState_Reparented, - WA_WState_ConfigPending, - WA_WState_Polished, - WA_WState_OwnSizePolicy, - WA_WState_ExplicitShowHide, - WA_MouseNoMask, - WA_NoMousePropagation, - WA_Hover, - WA_InputMethodTransparent, - WA_QuitOnClose, - WA_KeyboardFocusChange, - WA_AcceptDrops, - WA_WindowPropagation, - WA_NoX11EventCompression, - WA_TintedBackground, - WA_X11OpenGLOverlay, - WA_AttributeCount, - WA_AlwaysShowToolTips, - WA_MacOpaqueSizeGrip, - WA_SetStyle, - WA_SetLocale, - WA_MacShowFocusRect, - WA_MacNormalSize, - WA_MacSmallSize, - WA_MacMiniSize, - WA_LayoutUsesWidgetRect, - WA_StyledBackground, - WA_MacAlwaysShowToolWindow, - WA_StyleSheet, - WA_ShowWithoutActivating, - WA_NativeWindow, - WA_DontCreateNativeAncestors, - WA_DontShowOnScreen, - WA_X11NetWmWindowTypeDesktop, - WA_X11NetWmWindowTypeDock, - WA_X11NetWmWindowTypeToolBar, - WA_X11NetWmWindowTypeMenu, - WA_X11NetWmWindowTypeUtility, - WA_X11NetWmWindowTypeSplash, - WA_X11NetWmWindowTypeDialog, - WA_X11NetWmWindowTypeDropDownMenu, - WA_X11NetWmWindowTypePopupMenu, - WA_X11NetWmWindowTypeToolTip, - WA_X11NetWmWindowTypeNotification, - WA_X11NetWmWindowTypeCombo, - WA_X11NetWmWindowTypeDND, - WA_TranslucentBackground, - WA_AcceptTouchEvents, - WA_TouchPadAcceptSingleTouchEvents, - WA_X11DoNotAcceptFocus, - WA_AlwaysStackOnTop, - WA_TabletTracking, - WA_ContentsMarginsRespectsSafeArea, - WA_StyleSheetTarget, - }; - - enum ImageConversionFlag /BaseType=Flag/ - { - AutoColor, - ColorOnly, - MonoOnly, - ThresholdAlphaDither, - OrderedAlphaDither, - DiffuseAlphaDither, - DiffuseDither, - OrderedDither, - ThresholdDither, - AutoDither, - PreferDither, - AvoidDither, - NoOpaqueDetection, - NoFormatConversion, - }; - - typedef QFlags ImageConversionFlags; - - enum BGMode - { - TransparentMode, - OpaqueMode, - }; - - enum Key /BaseType=IntEnum/ - { - Key_Escape, - Key_Tab, - Key_Backtab, - Key_Backspace, - Key_Return, - Key_Enter, - Key_Insert, - Key_Delete, - Key_Pause, - Key_Print, - Key_SysReq, - Key_Clear, - Key_Home, - Key_End, - Key_Left, - Key_Up, - Key_Right, - Key_Down, - Key_PageUp, - Key_PageDown, - Key_Shift, - Key_Control, - Key_Meta, - Key_Alt, - Key_CapsLock, - Key_NumLock, - Key_ScrollLock, - Key_F1, - Key_F2, - Key_F3, - Key_F4, - Key_F5, - Key_F6, - Key_F7, - Key_F8, - Key_F9, - Key_F10, - Key_F11, - Key_F12, - Key_F13, - Key_F14, - Key_F15, - Key_F16, - Key_F17, - Key_F18, - Key_F19, - Key_F20, - Key_F21, - Key_F22, - Key_F23, - Key_F24, - Key_F25, - Key_F26, - Key_F27, - Key_F28, - Key_F29, - Key_F30, - Key_F31, - Key_F32, - Key_F33, - Key_F34, - Key_F35, - Key_Super_L, - Key_Super_R, - Key_Menu, - Key_Hyper_L, - Key_Hyper_R, - Key_Help, - Key_Direction_L, - Key_Direction_R, - Key_Space, - Key_Any, - Key_Exclam, - Key_QuoteDbl, - Key_NumberSign, - Key_Dollar, - Key_Percent, - Key_Ampersand, - Key_Apostrophe, - Key_ParenLeft, - Key_ParenRight, - Key_Asterisk, - Key_Plus, - Key_Comma, - Key_Minus, - Key_Period, - Key_Slash, - Key_0, - Key_1, - Key_2, - Key_3, - Key_4, - Key_5, - Key_6, - Key_7, - Key_8, - Key_9, - Key_Colon, - Key_Semicolon, - Key_Less, - Key_Equal, - Key_Greater, - Key_Question, - Key_At, - Key_A, - Key_B, - Key_C, - Key_D, - Key_E, - Key_F, - Key_G, - Key_H, - Key_I, - Key_J, - Key_K, - Key_L, - Key_M, - Key_N, - Key_O, - Key_P, - Key_Q, - Key_R, - Key_S, - Key_T, - Key_U, - Key_V, - Key_W, - Key_X, - Key_Y, - Key_Z, - Key_BracketLeft, - Key_Backslash, - Key_BracketRight, - Key_AsciiCircum, - Key_Underscore, - Key_QuoteLeft, - Key_BraceLeft, - Key_Bar, - Key_BraceRight, - Key_AsciiTilde, - Key_nobreakspace, - Key_exclamdown, - Key_cent, - Key_sterling, - Key_currency, - Key_yen, - Key_brokenbar, - Key_section, - Key_diaeresis, - Key_copyright, - Key_ordfeminine, - Key_guillemotleft, - Key_notsign, - Key_hyphen, - Key_registered, - Key_macron, - Key_degree, - Key_plusminus, - Key_twosuperior, - Key_threesuperior, - Key_acute, - Key_mu, - Key_paragraph, - Key_periodcentered, - Key_cedilla, - Key_onesuperior, - Key_masculine, - Key_guillemotright, - Key_onequarter, - Key_onehalf, - Key_threequarters, - Key_questiondown, - Key_Agrave, - Key_Aacute, - Key_Acircumflex, - Key_Atilde, - Key_Adiaeresis, - Key_Aring, - Key_AE, - Key_Ccedilla, - Key_Egrave, - Key_Eacute, - Key_Ecircumflex, - Key_Ediaeresis, - Key_Igrave, - Key_Iacute, - Key_Icircumflex, - Key_Idiaeresis, - Key_ETH, - Key_Ntilde, - Key_Ograve, - Key_Oacute, - Key_Ocircumflex, - Key_Otilde, - Key_Odiaeresis, - Key_multiply, - Key_Ooblique, - Key_Ugrave, - Key_Uacute, - Key_Ucircumflex, - Key_Udiaeresis, - Key_Yacute, - Key_THORN, - Key_ssharp, - Key_division, - Key_ydiaeresis, - Key_AltGr, - Key_Multi_key, - Key_Codeinput, - Key_SingleCandidate, - Key_MultipleCandidate, - Key_PreviousCandidate, - Key_Mode_switch, - Key_Kanji, - Key_Muhenkan, - Key_Henkan, - Key_Romaji, - Key_Hiragana, - Key_Katakana, - Key_Hiragana_Katakana, - Key_Zenkaku, - Key_Hankaku, - Key_Zenkaku_Hankaku, - Key_Touroku, - Key_Massyo, - Key_Kana_Lock, - Key_Kana_Shift, - Key_Eisu_Shift, - Key_Eisu_toggle, - Key_Hangul, - Key_Hangul_Start, - Key_Hangul_End, - Key_Hangul_Hanja, - Key_Hangul_Jamo, - Key_Hangul_Romaja, - Key_Hangul_Jeonja, - Key_Hangul_Banja, - Key_Hangul_PreHanja, - Key_Hangul_PostHanja, - Key_Hangul_Special, - Key_Dead_Grave, - Key_Dead_Acute, - Key_Dead_Circumflex, - Key_Dead_Tilde, - Key_Dead_Macron, - Key_Dead_Breve, - Key_Dead_Abovedot, - Key_Dead_Diaeresis, - Key_Dead_Abovering, - Key_Dead_Doubleacute, - Key_Dead_Caron, - Key_Dead_Cedilla, - Key_Dead_Ogonek, - Key_Dead_Iota, - Key_Dead_Voiced_Sound, - Key_Dead_Semivoiced_Sound, - Key_Dead_Belowdot, - Key_Dead_Hook, - Key_Dead_Horn, - Key_Back, - Key_Forward, - Key_Stop, - Key_Refresh, - Key_VolumeDown, - Key_VolumeMute, - Key_VolumeUp, - Key_BassBoost, - Key_BassUp, - Key_BassDown, - Key_TrebleUp, - Key_TrebleDown, - Key_MediaPlay, - Key_MediaStop, - Key_MediaPrevious, - Key_MediaNext, - Key_MediaRecord, - Key_HomePage, - Key_Favorites, - Key_Search, - Key_Standby, - Key_OpenUrl, - Key_LaunchMail, - Key_LaunchMedia, - Key_Launch0, - Key_Launch1, - Key_Launch2, - Key_Launch3, - Key_Launch4, - Key_Launch5, - Key_Launch6, - Key_Launch7, - Key_Launch8, - Key_Launch9, - Key_LaunchA, - Key_LaunchB, - Key_LaunchC, - Key_LaunchD, - Key_LaunchE, - Key_LaunchF, - Key_MediaLast, - Key_Select, - Key_Yes, - Key_No, - Key_Context1, - Key_Context2, - Key_Context3, - Key_Context4, - Key_Call, - Key_Hangup, - Key_Flip, - Key_unknown, - Key_Execute, - Key_Printer, - Key_Play, - Key_Sleep, - Key_Zoom, - Key_Cancel, - Key_MonBrightnessUp, - Key_MonBrightnessDown, - Key_KeyboardLightOnOff, - Key_KeyboardBrightnessUp, - Key_KeyboardBrightnessDown, - Key_PowerOff, - Key_WakeUp, - Key_Eject, - Key_ScreenSaver, - Key_WWW, - Key_Memo, - Key_LightBulb, - Key_Shop, - Key_History, - Key_AddFavorite, - Key_HotLinks, - Key_BrightnessAdjust, - Key_Finance, - Key_Community, - Key_AudioRewind, - Key_BackForward, - Key_ApplicationLeft, - Key_ApplicationRight, - Key_Book, - Key_CD, - Key_Calculator, - Key_ToDoList, - Key_ClearGrab, - Key_Close, - Key_Copy, - Key_Cut, - Key_Display, - Key_DOS, - Key_Documents, - Key_Excel, - Key_Explorer, - Key_Game, - Key_Go, - Key_iTouch, - Key_LogOff, - Key_Market, - Key_Meeting, - Key_MenuKB, - Key_MenuPB, - Key_MySites, - Key_News, - Key_OfficeHome, - Key_Option, - Key_Paste, - Key_Phone, - Key_Calendar, - Key_Reply, - Key_Reload, - Key_RotateWindows, - Key_RotationPB, - Key_RotationKB, - Key_Save, - Key_Send, - Key_Spell, - Key_SplitScreen, - Key_Support, - Key_TaskPane, - Key_Terminal, - Key_Tools, - Key_Travel, - Key_Video, - Key_Word, - Key_Xfer, - Key_ZoomIn, - Key_ZoomOut, - Key_Away, - Key_Messenger, - Key_WebCam, - Key_MailForward, - Key_Pictures, - Key_Music, - Key_Battery, - Key_Bluetooth, - Key_WLAN, - Key_UWB, - Key_AudioForward, - Key_AudioRepeat, - Key_AudioRandomPlay, - Key_Subtitle, - Key_AudioCycleTrack, - Key_Time, - Key_Hibernate, - Key_View, - Key_TopMenu, - Key_PowerDown, - Key_Suspend, - Key_ContrastAdjust, - Key_MediaPause, - Key_MediaTogglePlayPause, - Key_LaunchG, - Key_LaunchH, - Key_ToggleCallHangup, - Key_VoiceDial, - Key_LastNumberRedial, - Key_Camera, - Key_CameraFocus, - Key_TouchpadToggle, - Key_TouchpadOn, - Key_TouchpadOff, - Key_MicMute, - Key_Red, - Key_Green, - Key_Yellow, - Key_Blue, - Key_ChannelUp, - Key_ChannelDown, - Key_Guide, - Key_Info, - Key_Settings, - Key_Exit, - Key_MicVolumeUp, - Key_MicVolumeDown, - Key_New, - Key_Open, - Key_Find, - Key_Undo, - Key_Redo, - Key_Dead_Stroke, - Key_Dead_Abovecomma, - Key_Dead_Abovereversedcomma, - Key_Dead_Doublegrave, - Key_Dead_Belowring, - Key_Dead_Belowmacron, - Key_Dead_Belowcircumflex, - Key_Dead_Belowtilde, - Key_Dead_Belowbreve, - Key_Dead_Belowdiaeresis, - Key_Dead_Invertedbreve, - Key_Dead_Belowcomma, - Key_Dead_Currency, - Key_Dead_a, - Key_Dead_A, - Key_Dead_e, - Key_Dead_E, - Key_Dead_i, - Key_Dead_I, - Key_Dead_o, - Key_Dead_O, - Key_Dead_u, - Key_Dead_U, - Key_Dead_Small_Schwa, - Key_Dead_Capital_Schwa, - Key_Dead_Greek, - Key_Dead_Lowline, - Key_Dead_Aboveverticalline, - Key_Dead_Belowverticalline, - Key_Dead_Longsolidusoverlay, -%If (Qt_6_7_0 -) - Key_micro, -%End - }; - - enum ArrowType - { - NoArrow, - UpArrow, - DownArrow, - LeftArrow, - RightArrow, - }; - - enum PenStyle - { - NoPen, - SolidLine, - DashLine, - DotLine, - DashDotLine, - DashDotDotLine, - CustomDashLine, - }; - - enum PenCapStyle - { - FlatCap, - SquareCap, - RoundCap, - }; - - enum PenJoinStyle - { - MiterJoin, - BevelJoin, - RoundJoin, - MPenJoinStyle, - SvgMiterJoin, - }; - - enum BrushStyle - { - NoBrush, - SolidPattern, - Dense1Pattern, - Dense2Pattern, - Dense3Pattern, - Dense4Pattern, - Dense5Pattern, - Dense6Pattern, - Dense7Pattern, - HorPattern, - VerPattern, - CrossPattern, - BDiagPattern, - FDiagPattern, - DiagCrossPattern, - LinearGradientPattern, - RadialGradientPattern, - ConicalGradientPattern, - TexturePattern, - }; - - enum UIEffect - { - UI_General, - UI_AnimateMenu, - UI_FadeMenu, - UI_AnimateCombo, - UI_AnimateTooltip, - UI_FadeTooltip, - UI_AnimateToolBox, - }; - - enum CursorShape - { - ArrowCursor, - UpArrowCursor, - CrossCursor, - WaitCursor, - IBeamCursor, - SizeVerCursor, - SizeHorCursor, - SizeBDiagCursor, - SizeFDiagCursor, - SizeAllCursor, - BlankCursor, - SplitVCursor, - SplitHCursor, - PointingHandCursor, - ForbiddenCursor, - OpenHandCursor, - ClosedHandCursor, - WhatsThisCursor, - BusyCursor, - LastCursor, - BitmapCursor, - CustomCursor, - DragCopyCursor, - DragMoveCursor, - DragLinkCursor, - }; - - enum TextFormat - { - PlainText, - RichText, - AutoText, - MarkdownText, - }; - - enum AspectRatioMode - { - IgnoreAspectRatio, - KeepAspectRatio, - KeepAspectRatioByExpanding, - }; - - enum DockWidgetArea /BaseType=Flag/ - { - LeftDockWidgetArea, - RightDockWidgetArea, - TopDockWidgetArea, - BottomDockWidgetArea, - AllDockWidgetAreas, - NoDockWidgetArea, - }; - - typedef QFlags DockWidgetAreas; - - enum TimerType - { - PreciseTimer, - CoarseTimer, - VeryCoarseTimer, - }; - - enum ToolBarArea /BaseType=Flag/ - { - LeftToolBarArea, - RightToolBarArea, - TopToolBarArea, - BottomToolBarArea, - AllToolBarAreas, - NoToolBarArea, - }; - - typedef QFlags ToolBarAreas; - - enum DateFormat - { - TextDate, - ISODate, - ISODateWithMs, - RFC2822Date, - }; - - enum TimeSpec - { - LocalTime, - UTC, - OffsetFromUTC, - TimeZone, - }; - - enum DayOfWeek - { - Monday, - Tuesday, - Wednesday, - Thursday, - Friday, - Saturday, - Sunday, - }; - - enum ScrollBarPolicy - { - ScrollBarAsNeeded, - ScrollBarAlwaysOff, - ScrollBarAlwaysOn, - }; - - enum CaseSensitivity - { - CaseInsensitive, - CaseSensitive, - }; - - enum Corner - { - TopLeftCorner, - TopRightCorner, - BottomLeftCorner, - BottomRightCorner, - }; - - enum ConnectionType - { - AutoConnection, - DirectConnection, - QueuedConnection, - BlockingQueuedConnection, - UniqueConnection, - SingleShotConnection, - }; - - enum ShortcutContext - { - WidgetShortcut, - WindowShortcut, - ApplicationShortcut, - WidgetWithChildrenShortcut, - }; - - enum FillRule - { - OddEvenFill, - WindingFill, - }; - - enum ClipOperation - { - NoClip, - ReplaceClip, - IntersectClip, - }; - - enum TransformationMode - { - FastTransformation, - SmoothTransformation, - }; - - enum FocusReason - { - MouseFocusReason, - TabFocusReason, - BacktabFocusReason, - ActiveWindowFocusReason, - PopupFocusReason, - ShortcutFocusReason, - MenuBarFocusReason, - OtherFocusReason, - NoFocusReason, - }; - - enum ContextMenuPolicy - { - NoContextMenu, - PreventContextMenu, - DefaultContextMenu, - ActionsContextMenu, - CustomContextMenu, - }; - - enum InputMethodQuery /BaseType=Flag/ - { - ImFont, - ImCursorPosition, - ImSurroundingText, - ImCurrentSelection, - ImMaximumTextLength, - ImAnchorPosition, - ImEnabled, - ImCursorRectangle, - ImHints, - ImPreferredLanguage, - ImPlatformData, - ImQueryInput, - ImQueryAll, - ImAbsolutePosition, - ImTextBeforeCursor, - ImTextAfterCursor, - ImEnterKeyType, - ImAnchorRectangle, - ImInputItemClipRectangle, -%If (Qt_6_2_0 -) - ImReadOnly, -%End - }; - - typedef QFlags InputMethodQueries; - - enum ToolButtonStyle - { - ToolButtonIconOnly, - ToolButtonTextOnly, - ToolButtonTextBesideIcon, - ToolButtonTextUnderIcon, - ToolButtonFollowStyle, - }; - - enum LayoutDirection - { - LeftToRight, - RightToLeft, - LayoutDirectionAuto, - }; - - enum DropAction /BaseType=Flag/ - { - CopyAction, - MoveAction, - LinkAction, - ActionMask, - TargetMoveAction, - IgnoreAction, - }; - - typedef QFlags DropActions; - - enum CheckState - { - Unchecked, - PartiallyChecked, - Checked, - }; - - enum ItemDataRole /BaseType=IntEnum/ - { - DisplayRole, - DecorationRole, - EditRole, - ToolTipRole, - StatusTipRole, - WhatsThisRole, - FontRole, - TextAlignmentRole, - BackgroundRole, - ForegroundRole, - CheckStateRole, - AccessibleTextRole, - AccessibleDescriptionRole, - SizeHintRole, - InitialSortOrderRole, - UserRole, - }; - - enum ItemFlag /BaseType=Flag/ - { - NoItemFlags, - ItemIsSelectable, - ItemIsEditable, - ItemIsDragEnabled, - ItemIsDropEnabled, - ItemIsUserCheckable, - ItemIsEnabled, - ItemNeverHasChildren, - ItemIsUserTristate, - ItemIsAutoTristate, - }; - - typedef QFlags ItemFlags; - - enum MatchFlag /BaseType=Flag/ - { - MatchExactly, - MatchFixedString, - MatchContains, - MatchStartsWith, - MatchEndsWith, - MatchWildcard, - MatchCaseSensitive, - MatchWrap, - MatchRecursive, - MatchRegularExpression, - }; - - typedef QFlags MatchFlags; - typedef void *HANDLE; - - enum WindowModality - { - NonModal, - WindowModal, - ApplicationModal, - }; - - enum ApplicationAttribute - { - AA_DontShowIconsInMenus, - AA_NativeWindows, - AA_DontCreateNativeWidgetSiblings, - AA_DontUseNativeMenuBar, - AA_MacDontSwapCtrlAndMeta, - AA_Use96Dpi, - AA_SynthesizeTouchForUnhandledMouseEvents, - AA_SynthesizeMouseForUnhandledTouchEvents, - AA_ForceRasterWidgets, - AA_UseDesktopOpenGL, - AA_UseOpenGLES, - AA_UseSoftwareOpenGL, - AA_ShareOpenGLContexts, - AA_SetPalette, - AA_PluginApplication, - AA_UseStyleSheetPropagationInWidgetStyles, - AA_DontUseNativeDialogs, - AA_SynthesizeMouseForUnhandledTabletEvents, - AA_CompressHighFrequencyEvents, - AA_DontCheckOpenGLContextThreadAffinity, - AA_DisableShaderDiskCache, - AA_DontShowShortcutsInContextMenus, - AA_CompressTabletEvents, - AA_DisableSessionManager, - AA_DisableNativeVirtualKeyboard, -%If (Qt_6_7_0 -) - AA_QtQuickUseDefaultSizePolicy, -%End - }; - - enum ItemSelectionMode - { - ContainsItemShape, - IntersectsItemShape, - ContainsItemBoundingRect, - IntersectsItemBoundingRect, - }; - - enum TextInteractionFlag /BaseType=Flag/ - { - NoTextInteraction, - TextSelectableByMouse, - TextSelectableByKeyboard, - LinksAccessibleByMouse, - LinksAccessibleByKeyboard, - TextEditable, - TextEditorInteraction, - TextBrowserInteraction, - }; - - typedef QFlags TextInteractionFlags; - - enum MaskMode - { - MaskInColor, - MaskOutColor, - }; - - enum Axis - { - XAxis, - YAxis, - ZAxis, - }; - - enum EventPriority - { - HighEventPriority, - NormalEventPriority, - LowEventPriority, - }; - - enum SizeMode - { - AbsoluteSize, - RelativeSize, - }; - - enum SizeHint - { - MinimumSize, - PreferredSize, - MaximumSize, - MinimumDescent, - }; - - enum WindowFrameSection - { - NoSection, - LeftSection, - TopLeftSection, - TopSection, - TopRightSection, - RightSection, - BottomRightSection, - BottomSection, - BottomLeftSection, - TitleBarArea, - }; - - enum TileRule - { - StretchTile, - RepeatTile, - RoundTile, - }; - - enum InputMethodHint /BaseType=Flag/ - { - ImhNone, - ImhHiddenText, - ImhNoAutoUppercase, - ImhPreferNumbers, - ImhPreferUppercase, - ImhPreferLowercase, - ImhNoPredictiveText, - ImhDigitsOnly, - ImhFormattedNumbersOnly, - ImhUppercaseOnly, - ImhLowercaseOnly, - ImhDialableCharactersOnly, - ImhEmailCharactersOnly, - ImhUrlCharactersOnly, - ImhExclusiveInputMask, - ImhSensitiveData, - ImhDate, - ImhTime, - ImhPreferLatin, - ImhLatinOnly, - ImhMultiLine, - ImhNoEditMenu, - ImhNoTextHandles, - }; - - typedef QFlags InputMethodHints; - - enum AnchorPoint - { - AnchorLeft, - AnchorHorizontalCenter, - AnchorRight, - AnchorTop, - AnchorVerticalCenter, - AnchorBottom, - }; - - enum CoordinateSystem - { - DeviceCoordinates, - LogicalCoordinates, - }; - - enum TouchPointState /BaseType=Flag/ - { - TouchPointUnknownState, - TouchPointPressed, - TouchPointMoved, - TouchPointStationary, - TouchPointReleased, - }; - - typedef QFlags TouchPointStates; - - enum GestureState - { - GestureStarted, - GestureUpdated, - GestureFinished, - GestureCanceled, - }; - - enum GestureType /BaseType=IntEnum/ - { - TapGesture, - TapAndHoldGesture, - PanGesture, - PinchGesture, - SwipeGesture, - CustomGesture, - }; - - enum GestureFlag /BaseType=Flag/ - { - DontStartGestureOnChildren, - ReceivePartialGestures, - IgnoredGesturesPropagateToParent, - }; - - typedef QFlags GestureFlags; - - enum NavigationMode - { - NavigationModeNone, - NavigationModeKeypadTabOrder, - NavigationModeKeypadDirectional, - NavigationModeCursorAuto, - NavigationModeCursorForceVisible, - }; - - enum CursorMoveStyle - { - LogicalMoveStyle, - VisualMoveStyle, - }; - - enum ScreenOrientation /BaseType=Flag/ - { - PrimaryOrientation, - PortraitOrientation, - LandscapeOrientation, - InvertedPortraitOrientation, - InvertedLandscapeOrientation, - }; - - typedef QFlags ScreenOrientations; - - enum FindChildOption /BaseType=Flag/ - { - FindDirectChildrenOnly, - FindChildrenRecursively, - }; - - typedef QFlags FindChildOptions; - - enum WhiteSpaceMode - { - WhiteSpaceNormal, - WhiteSpacePre, - WhiteSpaceNoWrap, - WhiteSpaceModeUndefined, - }; - - enum HitTestAccuracy - { - ExactHit, - FuzzyHit, - }; - - enum ApplicationState /BaseType=Flag/ - { - ApplicationSuspended, - ApplicationHidden, - ApplicationInactive, - ApplicationActive, - }; - - typedef QFlags ApplicationStates; - - enum Edge /BaseType=Flag/ - { - TopEdge, - LeftEdge, - RightEdge, - BottomEdge, - }; - - typedef QFlags Edges; - - enum NativeGestureType - { - BeginNativeGesture, - EndNativeGesture, - PanNativeGesture, - ZoomNativeGesture, - SmartZoomNativeGesture, - RotateNativeGesture, - SwipeNativeGesture, - }; - - enum ScrollPhase - { - ScrollBegin, - ScrollUpdate, - ScrollEnd, - NoScrollPhase, - ScrollMomentum, - }; - - enum MouseEventSource - { - MouseEventNotSynthesized, - MouseEventSynthesizedBySystem, - MouseEventSynthesizedByQt, - MouseEventSynthesizedByApplication, - }; - - enum MouseEventFlag /BaseType=Flag/ - { - MouseEventCreatedDoubleClick, - }; - - typedef QFlags MouseEventFlags; - - enum TabFocusBehavior - { - NoTabFocus, - TabFocusTextControls, - TabFocusListControls, - TabFocusAllControls, - }; - - enum ItemSelectionOperation - { - ReplaceSelection, - AddToSelection, - }; - - enum EnterKeyType - { - EnterKeyDefault, - EnterKeyReturn, - EnterKeyDone, - EnterKeyGo, - EnterKeySend, - EnterKeySearch, - EnterKeyNext, - EnterKeyPrevious, - }; - - enum ChecksumType - { - ChecksumIso3309, - ChecksumItuV41, - }; - - enum class HighDpiScaleFactorRoundingPolicy - { - Round, - Ceil, - Floor, - RoundPreferFloor, - PassThrough, - }; - -%If (Qt_6_5_0 -) - - enum class ColorScheme - { - Unknown, - Light, - Dark, - }; - -%End -%If (Qt_6_5_0 -) - - enum class PermissionStatus - { - Undetermined, - Granted, - Denied, - }; - -%End -}; - -class QKeyCombination -{ -%TypeHeaderCode -#include -%End - -public: - QKeyCombination(Qt::Key key = Qt::Key_unknown); - QKeyCombination(Qt::Modifiers modifiers, Qt::Key key = Qt::Key_unknown); - QKeyCombination(Qt::KeyboardModifiers modifiers, Qt::Key key = Qt::Key_unknown); - Qt::KeyboardModifiers keyboardModifiers() const; - Qt::Key key() const; - static QKeyCombination fromCombined(int combined); - int toCombined() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -bool operator==(QKeyCombination lhs, QKeyCombination rhs); -bool operator!=(QKeyCombination lhs, QKeyCombination rhs); -QKeyCombination operator|(Qt::Key key, Qt::KeyboardModifiers modifiers); -%MethodCode - sipRes = new QKeyCombination(*a1, a0); -%End - -QKeyCombination operator|(Qt::Key key, Qt::Modifiers modifiers); -%MethodCode - sipRes = new QKeyCombination(*a1, a0); -%End - -QKeyCombination operator|(Qt::KeyboardModifier modifier, Qt::Key key); -%MethodCode - sipRes = new QKeyCombination(a0, a1); -%End - -Qt::KeyboardModifiers operator|(Qt::KeyboardModifier, Qt::KeyboardModifier); -QKeyCombination operator|(Qt::Modifier modifier, Qt::Key key); -%MethodCode - sipRes = new QKeyCombination(a0, a1); -%End - -Qt::Modifiers operator|(Qt::Modifier, Qt::Modifier); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnumeric.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnumeric.sip deleted file mode 100644 index 0e2fe48..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qnumeric.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qnumeric.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -bool qIsInf(double d); -bool qIsFinite(double d); -bool qIsNaN(double d); -double qInf(); -double qSNaN(); -double qQNaN(); -quint64 qFloatDistance(double a, double b); -%If (Qt_6_5_0 -) -double qAbs(const double &t); -%End -%If (Qt_6_5_0 -) -int qRound(double d); -%End -%If (Qt_6_5_0 -) -qint64 qRound64(double d); -%End -%If (Qt_6_5_0 -) -bool qFuzzyCompare(double p1, double p2); -%End -%If (Qt_6_5_0 -) -bool qFuzzyIsNull(double d); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobject.sip deleted file mode 100644 index 92f9145..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobject.sip +++ /dev/null @@ -1,627 +0,0 @@ -// qobject.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -typedef QList QObjectList; - -class QObject /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// This is needed by the tr() handwritten implementation. -#include - - -// These are the helper functions for QObject::findChild() and -// QObject::findChildren. - -// Wrap the given type in a 1-tuple. -static PyObject *qtcore_type_to_tuple(PyObject *type) -{ - PyObject *tuple = PyTuple_New(1); - - if (tuple) - { - Py_INCREF(type); - PyTuple_SetItem(tuple, 0, type); - } - - return tuple; -} - - -// Check all elements of a given tuple are type objects and return a new -// reference to the tuple if so. -static PyObject *qtcore_check_tuple_types(PyObject *types) -{ - for (Py_ssize_t i = 0; i < PyTuple_Size(types); ++i) - if (!PyObject_TypeCheck(PyTuple_GetItem(types, i), &PyType_Type)) - { - PyErr_SetString(PyExc_TypeError, - "all elements of the types argument must be type objects"); - return 0; - } - - Py_INCREF(types); - return types; -} - - -// Do the main work of finding a child. -static PyObject *qtcore_do_find_child(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) -{ - const QObjectList &children = parent->children(); - int i; - - for (i = 0; i < children.size(); ++i) - { - QObject *obj = children.at(i); - PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); - - if (!pyo) - return 0; - - // Allow for proxies. - QObject *resolved = reinterpret_cast(sipGetAddress((sipSimpleWrapper *)pyo)); - - if (name.isNull() || resolved->objectName() == name) - for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) - if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) - return pyo; - - Py_DECREF(pyo); - } - - if (options == Qt::FindChildrenRecursively) - for (i = 0; i < children.size(); ++i) - { - PyObject *pyo = qtcore_do_find_child(children.at(i), types, name, options); - - if (pyo != Py_None) - return pyo; - - Py_DECREF(pyo); - } - - Py_INCREF(Py_None); - return Py_None; -} - - -// Find a child that is one of a number of types and with an optional name. -static PyObject *qtcore_FindChild(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) -{ - // Check that the types checking was successful. - if (!types) - return 0; - - PyObject *child = qtcore_do_find_child(parent, types, name, options); - - Py_DECREF(types); - - return child; -} - - -// Do the main work of finding the children with a string name. -static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options, PyObject *list) -{ - const QObjectList &children = parent->children(); - int i; - - for (i = 0; i < children.size(); ++i) - { - QObject *obj = children.at(i); - PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); - - if (!pyo) - return false; - - // Allow for proxies. - QObject *resolved = reinterpret_cast(sipGetAddress((sipSimpleWrapper *)pyo)); - - if (name.isNull() || resolved->objectName() == name) - for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) - if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) - if (PyList_Append(list, pyo) < 0) - { - Py_DECREF(pyo); - return false; - } - - Py_DECREF(pyo); - - if (options == Qt::FindChildrenRecursively) - { - bool ok = qtcore_do_find_children(obj, types, name, options, list); - - if (!ok) - return false; - } - } - - return true; -} - - -// Find a child that is one of a number of types and with an optional string -// name. -static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) -{ - // Check that the types checking was successful. - if (!types) - return 0; - - PyObject *list = PyList_New(0); - - if (list) - if (!qtcore_do_find_children(parent, types, name, options, list)) - Py_DECREF(list); - - Py_DECREF(types); - - return list; -} - - -// Do the main work of finding the children with a QRegularExpression name. -static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options, PyObject *list) -{ - const QObjectList &children = parent->children(); - int i; - - for (i = 0; i < children.size(); ++i) - { - QObject *obj = children.at(i); - PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); - - if (!pyo) - return false; - - QRegularExpressionMatch m = re.match(obj->objectName()); - - if (m.hasMatch()) - for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) - if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) - if (PyList_Append(list, pyo) < 0) - { - Py_DECREF(pyo); - return false; - } - - Py_DECREF(pyo); - - if (options == Qt::FindChildrenRecursively) - { - bool ok = qtcore_do_find_children(obj, types, re, options, list); - - if (!ok) - return false; - } - } - - return true; -} - - -// Find a child that is one of a number of types and with an optional -// QRegularExpression name. -static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options) -{ - // Check that the types checking was successful. - if (!types) - return 0; - - PyObject *list = PyList_New(0); - - if (list) - if (!qtcore_do_find_children(parent, types, re, options, list)) - Py_DECREF(list); - - Py_DECREF(types); - - return list; -} -%End - -%FinalisationCode - return qpycore_qobject_finalisation(sipSelf, sipCpp, sipKwds, sipUnused); -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAbstractAnimation, &sipType_QAbstractAnimation, 23, 1}, - {sipName_QAbstractEventDispatcher, &sipType_QAbstractEventDispatcher, -1, 2}, - {sipName_QAbstractItemModel, &sipType_QAbstractItemModel, 29, 3}, - {sipName_QIODevice, &sipType_QIODevice, 37, 4}, - {sipName_QCoreApplication, &sipType_QCoreApplication, -1, 5}, - {sipName_QEventLoop, &sipType_QEventLoop, -1, 6}, - {sipName_QFileSelector, &sipType_QFileSelector, -1, 7}, - {sipName_QFileSystemWatcher, &sipType_QFileSystemWatcher, -1, 8}, - {sipName_QItemSelectionModel, &sipType_QItemSelectionModel, -1, 9}, - {sipName_QLibrary, &sipType_QLibrary, -1, 10}, - {sipName_QMimeData, &sipType_QMimeData, -1, 11}, - {sipName_QObjectCleanupHandler, &sipType_QObjectCleanupHandler, -1, 12}, - {sipName_QPluginLoader, &sipType_QPluginLoader, -1, 13}, - {sipName_QSettings, &sipType_QSettings, -1, 14}, - {sipName_QSharedMemory, &sipType_QSharedMemory, -1, 15}, - {sipName_QSignalMapper, &sipType_QSignalMapper, -1, 16}, - {sipName_QSocketNotifier, &sipType_QSocketNotifier, -1, 17}, - {sipName_QThread, &sipType_QThread, -1, 18}, - {sipName_QThreadPool, &sipType_QThreadPool, -1, 19}, - {sipName_QTimeLine, &sipType_QTimeLine, -1, 20}, - {sipName_QTimer, &sipType_QTimer, -1, 21}, - {sipName_QTranslator, &sipType_QTranslator, -1, 22}, - #if defined(Q_OS_WIN) - {sipName_QWinEventNotifier, &sipType_QWinEventNotifier, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - {sipName_QAnimationGroup, &sipType_QAnimationGroup, 26, 24}, - {sipName_QPauseAnimation, &sipType_QPauseAnimation, -1, 25}, - {sipName_QVariantAnimation, &sipType_QVariantAnimation, 28, -1}, - {sipName_QParallelAnimationGroup, &sipType_QParallelAnimationGroup, -1, 27}, - {sipName_QSequentialAnimationGroup, &sipType_QSequentialAnimationGroup, -1, -1}, - {sipName_QPropertyAnimation, &sipType_QPropertyAnimation, -1, -1}, - {sipName_QAbstractListModel, &sipType_QAbstractListModel, 33, 30}, - {sipName_QAbstractProxyModel, &sipType_QAbstractProxyModel, 34, 31}, - {sipName_QAbstractTableModel, &sipType_QAbstractTableModel, -1, 32}, - {sipName_QConcatenateTablesProxyModel, &sipType_QConcatenateTablesProxyModel, -1, -1}, - {sipName_QStringListModel, &sipType_QStringListModel, -1, -1}, - {sipName_QIdentityProxyModel, &sipType_QIdentityProxyModel, -1, 35}, - {sipName_QSortFilterProxyModel, &sipType_QSortFilterProxyModel, -1, 36}, - {sipName_QTransposeProxyModel, &sipType_QTransposeProxyModel, -1, -1}, - {sipName_QBuffer, &sipType_QBuffer, -1, 38}, - {sipName_QFileDevice, &sipType_QFileDevice, 40, 39}, - #if !defined(QT_NO_PROCESS) - {sipName_QProcess, &sipType_QProcess, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - {sipName_QFile, &sipType_QFile, 42, 41}, - {sipName_QSaveFile, &sipType_QSaveFile, -1, -1}, - {sipName_QTemporaryFile, &sipType_QTemporaryFile, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -%GCTraverseCode - // Traverse any saved slots we might be connected to. - sipRes = qpycore_visitSlotProxies(sipCpp, sipVisit, sipArg); -%End - -%GCClearCode - // Clear any saved slots we might be connected to. - sipRes = qpycore_clearSlotProxies(sipCpp); -%End - -public: - static const QMetaObject staticMetaObject { -%GetCode - sipPy = qpycore_qobject_staticmetaobject(sipPyType); -%End - - }; - const QMetaObject *metaObject() const; - explicit QObject(QObject *parent /TransferThis/ = 0); - virtual ~QObject(); - void pyqtConfigure(SIP_PYOBJECT) /NoArgParser/; -%Docstring -QObject.pyqtConfigure(...) - -Each keyword argument is either the name of a Qt property or a Qt signal. -For properties the property is set to the given value which should be of an -appropriate type. -For signals the signal is connected to the given value which should be a -callable. -%End - -%MethodCode - return qpycore_pyqtconfigure(sipSelf, sipArgs, sipKwds); -%End - - SIP_PYOBJECT __getattr__(const char *name /Encoding="UTF-8"/) const /NoTypeHint/; -%MethodCode - sipRes = qpycore_qobject_getattr(sipCpp, sipSelf, a0); -%End - - virtual bool event(QEvent *); - virtual bool eventFilter(QObject *, QEvent *); - static QString tr(const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1); -%MethodCode - sipRes = new QString(QCoreApplication::translate(sipPyTypeName((PyTypeObject *)sipSelf), a0, a1, a2)); -%End - - SIP_PYOBJECT findChild(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/; -%MethodCode - sipRes = qtcore_FindChild(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYOBJECT findChild(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/; -%MethodCode - sipRes = qtcore_FindChild(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; -%MethodCode - sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; -%MethodCode - sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; -%MethodCode - sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; -%MethodCode - sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); - - if (!sipRes) - sipIsErr = 1; -%End - - QString objectName() const; -%If (Qt_6_4_0 -) - void setObjectName(QAnyStringView name); -%End -%If (- Qt_6_4_0) - void setObjectName(const QString &name); -%End - bool isWidgetType() const; - bool isWindowType() const; - bool signalsBlocked() const; - bool blockSignals(bool b); - QThread *thread() const; - void moveToThread(QThread *thread); - int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer); - void killTimer(int id); - const QObjectList &children() const; - void setParent(QObject * /TransferThis/); - void installEventFilter(QObject *); - void removeEventFilter(QObject *); - void dumpObjectInfo() const; - void dumpObjectTree() const; - QList dynamicPropertyNames() const; - bool setProperty(const char *name, const QVariant &value); - QVariant property(const char *name) const; - -signals: - void destroyed(QObject *object = 0); - void objectNameChanged(const QString &objectName); - -public: - QObject *parent() const; - bool inherits(const char *classname) const; - -public slots: - void deleteLater() /TransferThis/; - -protected: - QObject *sender() const /ReleaseGIL/; -%MethodCode - // sender() must be called without the GIL to avoid possible deadlocks between - // the GIL and Qt's internal thread data mutex. - - Py_BEGIN_ALLOW_THREADS - - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipCpp->sender(); - #else - sipRes = sipCpp->sipProtect_sender(); - #endif - - Py_END_ALLOW_THREADS - - if (!sipRes) - { - typedef QObject *(*qtcore_qobject_sender_t)(); - - static qtcore_qobject_sender_t qtcore_qobject_sender = 0; - - if (!qtcore_qobject_sender) - { - qtcore_qobject_sender = (qtcore_qobject_sender_t)sipImportSymbol("qtcore_qobject_sender"); - Q_ASSERT(qtcore_qobject_sender); - } - - sipRes = qtcore_qobject_sender(); - } -%End - - int receivers(SIP_PYOBJECT signal /TypeHint="PYQT_SIGNAL"/) const [int (const char *signal)]; -%MethodCode - // We need to handle the signal object. Import the helper if it hasn't already - // been done. - typedef sipErrorState (*pyqt6_get_signal_signature_t)(PyObject *, const QObject *, const QByteArray &); - - static pyqt6_get_signal_signature_t pyqt6_get_signal_signature = 0; - - if (!pyqt6_get_signal_signature) - { - pyqt6_get_signal_signature = (pyqt6_get_signal_signature_t)sipImportSymbol("pyqt6_get_signal_signature"); - Q_ASSERT(pyqt6_get_signal_signature); - } - - QByteArray signal_signature; - - #if defined(SIP_PROTECTED_IS_PUBLIC) - if ((sipError = pyqt6_get_signal_signature(a0, sipCpp, signal_signature)) == sipErrorNone) - { - sipRes = sipCpp->receivers(signal_signature.constData()); - } - #else - if ((sipError = pyqt6_get_signal_signature(a0, static_cast(sipCpp), signal_signature)) == sipErrorNone) - { - sipRes = sipCpp->sipProtect_receivers(signal_signature.constData()); - } - #endif - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual void timerEvent(QTimerEvent *); - virtual void childEvent(QChildEvent *); - virtual void customEvent(QEvent *); - virtual void connectNotify(const QMetaMethod &signal); - virtual void disconnectNotify(const QMetaMethod &signal); - int senderSignalIndex() const; - bool isSignalConnected(const QMetaMethod &signal) const; - -public: - static bool disconnect(const QMetaObject::Connection &); - SIP_PYOBJECT disconnect() const /TypeHint=""/; -%MethodCode - sipRes = qpycore_qobject_disconnect(sipCpp); -%End - -%If (Qt_6_4_0 -) - bool isQuickItemType() const; -%End - -private: - QObject(const QObject &); -}; - -SIP_PYOBJECT pyqtClassInfo(const char *, const char *) /NoArgParser, TypeHint=""/; -%MethodCode - return qpycore_pyqtClassInfo(sipArgs, sipKwds); -%End - -SIP_PYOBJECT pyqtEnum(SIP_PYENUM = 0) /TypeHint=""/; -%MethodCode - sipRes = qpycore_pyqtEnum(a0); -%End - -SIP_PYOBJECT pyqtSlot(... types, const char *name = 0, const char *result = 0) /NoArgParser, NoTypeHint/; -%Docstring -@pyqtSlot(*types, name: typing.Optional[str], result: typing.Optional[str]) - -This is a decorator applied to Python methods of a QObject that marks them -as Qt slots. -The non-keyword arguments are the types of the slot arguments and each may -be a Python type object or a string specifying a C++ type. -name is the name of the slot and defaults to the name of the method. -result is type of the value returned by the slot. -%End - -%MethodCode - return qpycore_pyqtslot(sipArgs, sipKwds); -%End - -SIP_PYOBJECT QT_TR_NOOP(SIP_PYOBJECT /TypeHint="str"/) /TypeHint="str"/; -%MethodCode - Py_INCREF(a0); - sipRes = a0; -%End - -SIP_PYOBJECT QT_TRANSLATE_NOOP(SIP_PYOBJECT /TypeHint="str"/, SIP_PYOBJECT /TypeHint="str"/) /TypeHint="str"/; -%MethodCode - Py_INCREF(a1); - sipRes = a1; -%End - -class QSignalBlocker -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSignalBlocker(QObject *o); - ~QSignalBlocker(); -%If (Qt_6_7_0 -) - void dismiss(); -%End - void reblock(); - void unblock(); - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->unblock(); -%End - -private: - QSignalBlocker(const QSignalBlocker &); -}; - -%ModuleHeaderCode -#include "qpycore_api.h" -%End - -%InitialisationCode -qpycore_init(); -%End - -%PostInitialisationCode -qpycore_post_init(sipModuleDict); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectcleanuphandler.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectcleanuphandler.sip deleted file mode 100644 index d876129..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectcleanuphandler.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qobjectcleanuphandler.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QObjectCleanupHandler : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QObjectCleanupHandler(); - virtual ~QObjectCleanupHandler(); - QObject *add(QObject *object); - void remove(QObject *object); - bool isEmpty() const; - void clear(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectdefs.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectdefs.sip deleted file mode 100644 index 3e5cd05..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qobjectdefs.sip +++ /dev/null @@ -1,197 +0,0 @@ -// qobjectdefs.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -struct QMetaObject -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// Raise an exception when QMetaObject::invokeMethod() returns false. -static void qtcore_invokeMethod_exception() -{ - PyErr_SetString(PyExc_RuntimeError, "QMetaObject.invokeMethod() call failed"); -} -%End - -%If (Qt_6_2_0 -) - QMetaType metaType() const; -%End - const char *className() const; - const QMetaObject *superClass() const; - QMetaProperty userProperty() const; - int methodOffset() const; - int enumeratorOffset() const; - int propertyOffset() const; - int classInfoOffset() const; - int methodCount() const; - int enumeratorCount() const; - int propertyCount() const; - int classInfoCount() const; - int indexOfMethod(const char *method) const; - int indexOfSignal(const char *signal) const; - int indexOfSlot(const char *slot) const; - int indexOfEnumerator(const char *name) const; - int indexOfProperty(const char *name) const; - int indexOfClassInfo(const char *name) const; - QMetaMethod method(int index) const; - QMetaEnum enumerator(int index) const; - QMetaProperty property(int index) const; - QMetaClassInfo classInfo(int index) const; - static bool checkConnectArgs(const char *signal, const char *method); - static void connectSlotsByName(QObject *o /GetWrapper/); -%MethodCode - qpycore_qmetaobject_connectslotsbyname(a0, a0Wrapper); - - // Make sure there is no (benign) Python exception. - PyErr_Clear(); -%End - - static QByteArray normalizedSignature(const char *method); - static QByteArray normalizedType(const char *type); - static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()); -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12,*a13); - Py_END_ALLOW_THREADS - - if (ok) - sipRes = qpycore_ReturnValue(a3Wrapper); - else - qtcore_invokeMethod_exception(); -%End - - static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()); -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12); - Py_END_ALLOW_THREADS - - if (ok) - sipRes = qpycore_ReturnValue(a2Wrapper); - else - qtcore_invokeMethod_exception(); -%End - - static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()); -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12); - Py_END_ALLOW_THREADS - - if (ok) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - qtcore_invokeMethod_exception(); - } -%End - - static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericArgument value0 = QGenericArgument(nullptr), QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()); -%MethodCode - // Raise an exception if the call failed. - bool ok; - - Py_BEGIN_ALLOW_THREADS - ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11); - Py_END_ALLOW_THREADS - - if (ok) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - qtcore_invokeMethod_exception(); - } -%End - -%If (Qt_6_5_0 -) - QObject *newInstance(QGenericArgument value0, QGenericArgument value1 = QGenericArgument(), QGenericArgument value2 = QGenericArgument(), QGenericArgument value3 = QGenericArgument(), QGenericArgument value4 = QGenericArgument(), QGenericArgument value5 = QGenericArgument(), QGenericArgument value6 = QGenericArgument(), QGenericArgument value7 = QGenericArgument(), QGenericArgument value8 = QGenericArgument(), QGenericArgument value9 = QGenericArgument()) const; -%End - int constructorCount() const; - int indexOfConstructor(const char *constructor) const; - QMetaMethod constructor(int index) const; - static bool checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method); - bool inherits(const QMetaObject *metaObject) const; - - class Connection - { -%TypeHeaderCode -#include -%End - - public: - Connection(); - Connection(const QMetaObject::Connection &other); - ~Connection(); - void swap(QMetaObject::Connection &o /Constrained/); - }; -}; - -// The support for Q_ARG(), Q_RETURN_ARG() and supporting classes. -class QGenericArgument /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - ~QGenericArgument(); -}; - - -SIP_PYOBJECT Q_ARG(SIP_PYOBJECT type, SIP_PYOBJECT data) /TypeHint="QGenericArgument"/; -%MethodCode - sipRes = qpycore_ArgumentFactory(a0, a1); -%End - - -class QGenericReturnArgument /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - ~QGenericReturnArgument(); -}; - - -SIP_PYOBJECT Q_RETURN_ARG(SIP_PYOBJECT type) /TypeHint="QGenericReturnArgument"/; -%MethodCode - sipRes = qpycore_ReturnFactory(a0); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qoperatingsystemversion.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qoperatingsystemversion.sip deleted file mode 100644 index d72f061..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qoperatingsystemversion.sip +++ /dev/null @@ -1,228 +0,0 @@ -// qoperatingsystemversion.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_3_0 -) - -class QOperatingSystemVersionBase -{ -%TypeHeaderCode -#include -%End - -public: - QVersionNumber version() const; - int majorVersion() const; - int minorVersion() const; - int microVersion() const; - int segmentCount() const; - QString name() const; - -protected: - QOperatingSystemVersionBase(); -}; - -%End -%If (Qt_6_3_0 -) - -class QOperatingSystemVersion : public QOperatingSystemVersionBase -{ -%TypeHeaderCode -#include -%End - -public: - enum OSType - { - Unknown, - Windows, - MacOS, - IOS, - TvOS, - WatchOS, - Android, - }; - - static const QOperatingSystemVersion Windows7; - static const QOperatingSystemVersion Windows8; - static const QOperatingSystemVersion Windows8_1; - static const QOperatingSystemVersion Windows10; - static const QOperatingSystemVersion OSXMavericks; - static const QOperatingSystemVersion OSXYosemite; - static const QOperatingSystemVersion OSXElCapitan; - static const QOperatingSystemVersion MacOSSierra; - static const QOperatingSystemVersion MacOSHighSierra; - static const QOperatingSystemVersion MacOSMojave; - static const QOperatingSystemVersion MacOSCatalina; - static const QOperatingSystemVersion MacOSBigSur; - static const QOperatingSystemVersion MacOSMonterey; -%If (Qt_6_5_0 -) - static const QOperatingSystemVersionBase MacOSVentura; -%End -%If (Qt_6_6_0 -) - static const QOperatingSystemVersionBase MacOSSonoma; -%End - static const QOperatingSystemVersion AndroidJellyBean; - static const QOperatingSystemVersion AndroidJellyBean_MR1; - static const QOperatingSystemVersion AndroidJellyBean_MR2; - static const QOperatingSystemVersion AndroidKitKat; - static const QOperatingSystemVersion AndroidLollipop; - static const QOperatingSystemVersion AndroidLollipop_MR1; - static const QOperatingSystemVersion AndroidMarshmallow; - static const QOperatingSystemVersion AndroidNougat; - static const QOperatingSystemVersion AndroidNougat_MR1; - static const QOperatingSystemVersion AndroidOreo; - static const QOperatingSystemVersion AndroidOreo_MR1; - static const QOperatingSystemVersion AndroidPie; - static const QOperatingSystemVersion Android10; - static const QOperatingSystemVersion Android11; -%If (Qt_6_5_0 -) - static const QOperatingSystemVersionBase Android12; -%End -%If (Qt_6_5_0 -) - static const QOperatingSystemVersionBase Android12L; -%End -%If (Qt_6_5_0 -) - static const QOperatingSystemVersionBase Android13; -%End - static const QOperatingSystemVersionBase Windows10_1809; - static const QOperatingSystemVersionBase Windows10_1903; - static const QOperatingSystemVersionBase Windows10_1909; - static const QOperatingSystemVersionBase Windows10_2004; - static const QOperatingSystemVersionBase Windows10_20H2; - static const QOperatingSystemVersionBase Windows10_21H1; - static const QOperatingSystemVersionBase Windows10_21H2; -%If (Qt_6_5_0 -) - static const QOperatingSystemVersionBase Windows10_22H2; -%End - static const QOperatingSystemVersionBase Windows11; -%If (Qt_6_4_0 -) - static const QOperatingSystemVersionBase Windows11_21H2; -%End -%If (Qt_6_4_0 -) - static const QOperatingSystemVersionBase Windows11_22H2; -%End - QOperatingSystemVersion(QOperatingSystemVersion::OSType osType, int vmajor, int vminor = -1, int vmicro = -1); - static QOperatingSystemVersion current(); - static QOperatingSystemVersion::OSType currentType(); - QOperatingSystemVersion::OSType type() const; - -private: - QOperatingSystemVersion(); -}; - -%End -%If (- Qt_6_3_0) - -class QOperatingSystemVersion -{ -%TypeHeaderCode -#include -%End - -public: - enum OSType - { - Unknown, - Windows, - MacOS, - IOS, - TvOS, - WatchOS, - Android, - }; - - static const QOperatingSystemVersion Windows7; - static const QOperatingSystemVersion Windows8; - static const QOperatingSystemVersion Windows8_1; - static const QOperatingSystemVersion Windows10; - static const QOperatingSystemVersion OSXMavericks; - static const QOperatingSystemVersion OSXYosemite; - static const QOperatingSystemVersion OSXElCapitan; - static const QOperatingSystemVersion MacOSSierra; - static const QOperatingSystemVersion MacOSHighSierra; - static const QOperatingSystemVersion MacOSMojave; - static const QOperatingSystemVersion MacOSCatalina; - static const QOperatingSystemVersion MacOSBigSur; - static const QOperatingSystemVersion AndroidJellyBean; - static const QOperatingSystemVersion AndroidJellyBean_MR1; - static const QOperatingSystemVersion AndroidJellyBean_MR2; - static const QOperatingSystemVersion AndroidKitKat; - static const QOperatingSystemVersion AndroidLollipop; - static const QOperatingSystemVersion AndroidLollipop_MR1; - static const QOperatingSystemVersion AndroidMarshmallow; - static const QOperatingSystemVersion AndroidNougat; - static const QOperatingSystemVersion AndroidNougat_MR1; - static const QOperatingSystemVersion AndroidOreo; -%If (Qt_6_1_0 -) - static const QOperatingSystemVersion AndroidOreo_MR1; -%End -%If (Qt_6_1_0 -) - static const QOperatingSystemVersion AndroidPie; -%End -%If (Qt_6_1_0 -) - static const QOperatingSystemVersion Android11; -%End -%If (Qt_6_1_0 -) - static const QOperatingSystemVersion Android10; -%End - QOperatingSystemVersion(QOperatingSystemVersion::OSType osType, int vmajor, int vminor = -1, int vmicro = -1); - static QOperatingSystemVersion current(); - static QOperatingSystemVersion::OSType currentType(); -%If (Qt_6_1_0 -) - QVersionNumber version() const; -%End - int majorVersion() const; - int minorVersion() const; - int microVersion() const; - int segmentCount() const; - QOperatingSystemVersion::OSType type() const; - QString name() const; - -private: - QOperatingSystemVersion(); -}; - -%End -%If (Qt_6_3_0 -) -bool operator>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs); -%End -%If (- Qt_6_3_0) -bool operator>(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); -%End -%If (Qt_6_3_0 -) -bool operator>=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs); -%End -%If (- Qt_6_3_0) -bool operator>=(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); -%End -%If (Qt_6_3_0 -) -bool operator<(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs); -%End -%If (- Qt_6_3_0) -bool operator<(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); -%End -%If (Qt_6_3_0 -) -bool operator<=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs); -%End -%If (- Qt_6_3_0) -bool operator<=(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qparallelanimationgroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qparallelanimationgroup.sip deleted file mode 100644 index 320e30f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qparallelanimationgroup.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qparallelanimationgroup.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QParallelAnimationGroup : public QAnimationGroup -{ -%TypeHeaderCode -#include -%End - -public: - QParallelAnimationGroup(QObject *parent /TransferThis/ = 0); - virtual ~QParallelAnimationGroup(); - virtual int duration() const; - -protected: - virtual bool event(QEvent *event); - virtual void updateCurrentTime(int currentTime); - virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - virtual void updateDirection(QAbstractAnimation::Direction direction); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpauseanimation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpauseanimation.sip deleted file mode 100644 index d6461fb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpauseanimation.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qpauseanimation.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPauseAnimation : public QAbstractAnimation -{ -%TypeHeaderCode -#include -%End - -public: - QPauseAnimation(QObject *parent /TransferThis/ = 0); - QPauseAnimation(int msecs, QObject *parent /TransferThis/ = 0); - virtual ~QPauseAnimation(); - virtual int duration() const; - void setDuration(int msecs); - -protected: - virtual bool event(QEvent *e); - virtual void updateCurrentTime(int); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpermissions.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpermissions.sip deleted file mode 100644 index d220872..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpermissions.sip +++ /dev/null @@ -1,311 +0,0 @@ -// qpermissions.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QPermission /TypeHintIn="Union[QBluetoothPermission, QCalendarPermission, QCameraPermission, QContactsPermission, QLocationPermission, QMicrophonePermission]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// Note that we don't allow sub-classes of the typed permissions. -const sipTypeDef *td = sipTypeFromPyTypeObject(Py_TYPE(sipPy)); - -if (!sipIsErr) - return (td == sipType_QBluetoothPermission || - td == sipType_QCalendarPermission || - td == sipType_QCameraPermission || - td == sipType_QContactsPermission || - td == sipType_QLocationPermission || - td == sipType_QMicrophonePermission); - -void *cpp = sipConvertToType(sipPy, td, sipTransferObj, SIP_NOT_NONE, NULL, sipIsErr); - -if (*sipIsErr) - return 0; - -if (td == sipType_QBluetoothPermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -else if (td == sipType_QCalendarPermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -else if (td == sipType_QCameraPermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -else if (td == sipType_QContactsPermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -else if (td == sipType_QLocationPermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -else if (td == sipType_QMicrophonePermission) - *sipCppPtr = new QPermission(*reinterpret_cast(cpp)); - -return sipGetState(sipTransferObj); -%End - -public: - QPermission(); - Qt::PermissionStatus status() const; - QMetaType type() const; - SIP_PYOBJECT value() const; -%MethodCode - const sipTypeDef *td = SIP_NULLPTR; - void *perm = SIP_NULLPTR; - QMetaType mt = sipCpp->type(); - - if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QBluetoothPermission(opt_perm.value()); - td = sipType_QBluetoothPermission; - } - } - else if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QCalendarPermission(opt_perm.value()); - td = sipType_QCalendarPermission; - } - } - else if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QCameraPermission(opt_perm.value()); - td = sipType_QCameraPermission; - } - } - else if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QContactsPermission(opt_perm.value()); - td = sipType_QContactsPermission; - } - } - else if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QLocationPermission(opt_perm.value()); - td = sipType_QLocationPermission; - } - } - else if (mt == QMetaType::fromType()) - { - std::optional opt_perm = sipCpp->value(); - - if (opt_perm) - { - perm = new QMicrophonePermission(opt_perm.value()); - td = sipType_QMicrophonePermission; - } - } - - if (perm) - { - sipRes = sipConvertFromNewType(perm, td, SIP_NULLPTR); - } - else - { - sipRes = Py_None; - Py_INCREF(sipRes); - } -%End -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QLocationPermission -{ -%TypeHeaderCode -#include -%End - -public: - QLocationPermission(); - QLocationPermission(const QLocationPermission &other); - ~QLocationPermission(); - - enum Accuracy - { - Approximate, - Precise, - }; - - void setAccuracy(QLocationPermission::Accuracy accuracy); - QLocationPermission::Accuracy accuracy() const; - - enum Availability - { - WhenInUse, - Always, - }; - - void setAvailability(QLocationPermission::Availability availability); - QLocationPermission::Availability availability() const; -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QCalendarPermission -{ -%TypeHeaderCode -#include -%End - -public: - QCalendarPermission(); - QCalendarPermission(const QCalendarPermission &other); - ~QCalendarPermission(); - - enum AccessMode - { - ReadOnly, - ReadWrite, - }; - - void setAccessMode(QCalendarPermission::AccessMode mode); - QCalendarPermission::AccessMode accessMode() const; -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QContactsPermission -{ -%TypeHeaderCode -#include -%End - -public: - QContactsPermission(); - QContactsPermission(const QContactsPermission &other); - ~QContactsPermission(); - - enum AccessMode - { - ReadOnly, - ReadWrite, - }; - - void setAccessMode(QContactsPermission::AccessMode mode); - QContactsPermission::AccessMode accessMode() const; -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QCameraPermission -{ -%TypeHeaderCode -#include -%End - -public: - QCameraPermission(); - QCameraPermission(const QCameraPermission &other); - ~QCameraPermission(); -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QMicrophonePermission -{ -%TypeHeaderCode -#include -%End - -public: - QMicrophonePermission(); - QMicrophonePermission(const QMicrophonePermission &other); - ~QMicrophonePermission(); -}; - -%End -%End -%If (Qt_6_5_0 -) -%If (PyQt_Permissions) - -class QBluetoothPermission -{ -%TypeHeaderCode -#include -%End - -public: - QBluetoothPermission(); - QBluetoothPermission(const QBluetoothPermission &other); - ~QBluetoothPermission(); -%If (Qt_6_6_0 -) - - enum CommunicationMode - { - Access, - Advertise, - Default, - }; - -%End -%If (Qt_6_6_0 -) - typedef QFlags CommunicationModes; -%End -%If (Qt_6_6_0 -) - void setCommunicationModes(QBluetoothPermission::CommunicationModes modes); -%End -%If (Qt_6_6_0 -) - QBluetoothPermission::CommunicationModes communicationModes() const; -%End -}; - -%End -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpluginloader.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpluginloader.sip deleted file mode 100644 index a8acafb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpluginloader.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qpluginloader.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPluginLoader : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPluginLoader(QObject *parent /TransferThis/ = 0); - QPluginLoader(const QString &fileName, QObject *parent /TransferThis/ = 0); - virtual ~QPluginLoader(); - QObject *instance(); - static QObjectList staticInstances(); - bool load(); - bool unload(); - bool isLoaded() const; - void setFileName(const QString &fileName); - QString fileName() const; - QString errorString() const; - void setLoadHints(QLibrary::LoadHints loadHints); - QLibrary::LoadHints loadHints() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpoint.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpoint.sip deleted file mode 100644 index dabacd6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpoint.sip +++ /dev/null @@ -1,154 +0,0 @@ -// qpoint.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPoint -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("ii", sipCpp->x(), sipCpp->y()); -%End - -public: - int manhattanLength() const; - QPoint(); - QPoint(int xpos, int ypos); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QPoint()"); - } - else - { - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QPoint(%i, %i)", sipCpp->x(), sipCpp->y()); - } -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - int x() const; - int y() const; - void setX(int xpos); - void setY(int ypos); - QPoint &operator+=(const QPoint &p); - QPoint &operator-=(const QPoint &p); - QPoint &operator*=(int c /Constrained/); - QPoint &operator*=(double c); - QPoint &operator/=(qreal c); - static int dotProduct(const QPoint &p1, const QPoint &p2); - QPoint transposed() const; -%If (Qt_6_4_0 -) - QPointF toPointF() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QPoint &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPoint & /Constrained/) /ReleaseGIL/; -bool operator==(const QPoint &p1, const QPoint &p2); -bool operator!=(const QPoint &p1, const QPoint &p2); -QPoint operator+(const QPoint &p); -QPoint operator+(const QPoint &p1, const QPoint &p2); -QPoint operator-(const QPoint &p); -QPoint operator-(const QPoint &p1, const QPoint &p2); -QPoint operator*(const QPoint &p, int factor /Constrained/); -QPoint operator*(int factor /Constrained/, const QPoint &p); -QPoint operator*(const QPoint &p, double factor); -QPoint operator*(double factor, const QPoint &p); -QPoint operator/(const QPoint &p, qreal c); - -class QPointF -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("dd", sipCpp->x(), sipCpp->y()); -%End - -public: - QPointF(); - QPointF(qreal xpos, qreal ypos); - QPointF(const QPoint &p); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QPointF()"); - } - else - { - PyObject *x = PyFloat_FromDouble(sipCpp->x()); - PyObject *y = PyFloat_FromDouble(sipCpp->y()); - - if (x && y) - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QPointF(%R, %R)", x, y); - - Py_XDECREF(x); - Py_XDECREF(y); - } -%End - - bool isNull() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isNull(); -%End - - qreal x() const; - qreal y() const; - void setX(qreal xpos); - void setY(qreal ypos); - QPointF &operator+=(const QPointF &p); - QPointF &operator-=(const QPointF &p); - QPointF &operator*=(qreal c); - QPointF &operator/=(qreal c); - QPoint toPoint() const; - qreal manhattanLength() const; - static qreal dotProduct(const QPointF &p1, const QPointF &p2); - QPointF transposed() const; -}; - -QDataStream &operator<<(QDataStream &, const QPointF &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPointF & /Constrained/) /ReleaseGIL/; -bool operator==(const QPointF &p1, const QPointF &p2); -bool operator!=(const QPointF &p1, const QPointF &p2); -QPointF operator+(const QPointF &p); -QPointF operator+(const QPointF &p1, const QPointF &p2); -QPointF operator-(const QPointF &p); -QPointF operator-(const QPointF &p1, const QPointF &p2); -QPointF operator*(const QPointF &p, qreal c); -QPointF operator*(qreal c, const QPointF &p); -QPointF operator/(const QPointF &p, qreal divisor); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qprocess.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qprocess.sip deleted file mode 100644 index c0dd078..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qprocess.sip +++ /dev/null @@ -1,302 +0,0 @@ -// qprocess.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_Process) - -class QProcess : public QIODevice -{ -%TypeHeaderCode -#include -%End - -public: - enum ExitStatus - { - NormalExit, - CrashExit, - }; - - enum ProcessError - { - FailedToStart, - Crashed, - Timedout, - ReadError, - WriteError, - UnknownError, - }; - - enum ProcessState - { - NotRunning, - Starting, - Running, - }; - - enum ProcessChannel - { - StandardOutput, - StandardError, - }; - - enum ProcessChannelMode - { - SeparateChannels, - MergedChannels, - ForwardedChannels, - ForwardedOutputChannel, - ForwardedErrorChannel, - }; - - explicit QProcess(QObject *parent /TransferThis/ = 0); - virtual ~QProcess(); - void start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /HoldGIL/; - void start(QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /HoldGIL/; - void startCommand(const QString &command, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /HoldGIL/; - QProcess::ProcessChannel readChannel() const; - void setReadChannel(QProcess::ProcessChannel channel); - void closeReadChannel(QProcess::ProcessChannel channel); - void closeWriteChannel(); - QString workingDirectory() const; - void setWorkingDirectory(const QString &dir); - QProcess::ProcessError error() const; - QProcess::ProcessState state() const; - bool waitForStarted(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; - bool waitForFinished(int msecs = 30000) /ReleaseGIL/; - QByteArray readAllStandardOutput() /ReleaseGIL/; - QByteArray readAllStandardError() /ReleaseGIL/; - int exitCode() const; - QProcess::ExitStatus exitStatus() const; - virtual qint64 bytesToWrite() const; - virtual bool isSequential() const; - virtual void close(); - static int execute(const QString &program, const QStringList &arguments = {}) /ReleaseGIL/; - static bool startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = 0); - bool startDetached(qint64 *pid = 0); - static QStringList systemEnvironment(); - QProcess::ProcessChannelMode processChannelMode() const; - void setProcessChannelMode(QProcess::ProcessChannelMode mode); - void setStandardInputFile(const QString &fileName); - void setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = QIODeviceBase::Truncate); - void setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = QIODeviceBase::Truncate); - void setStandardOutputProcess(QProcess *destination); - -public slots: - void terminate(); - void kill(); - -signals: - void started(); - void finished(int exitCode, QProcess::ExitStatus exitStatus = QProcess::NormalExit); - void stateChanged(QProcess::ProcessState state); - void readyReadStandardOutput(); - void readyReadStandardError(); - void errorOccurred(QProcess::ProcessError error); - -protected: - void setProcessState(QProcess::ProcessState state); - virtual SIP_PYOBJECT readData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QProcess::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QProcess::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -public: - void setProcessEnvironment(const QProcessEnvironment &environment); - QProcessEnvironment processEnvironment() const; - QString program() const; - void setProgram(const QString &program); - QStringList arguments() const; - void setArguments(const QStringList &arguments); - virtual bool open(QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - - enum InputChannelMode - { - ManagedInputChannel, - ForwardedInputChannel, - }; - - QProcess::InputChannelMode inputChannelMode() const; - void setInputChannelMode(QProcess::InputChannelMode mode); - static QString nullDevice(); - qint64 processId() const; -%If (Qt_6_6_0 -) -%If (Linux || macOS) - - enum class UnixProcessFlag - { - ResetSignalHandlers, - IgnoreSigPipe, - CloseFileDescriptors, - UseVFork, -%If (Qt_6_7_0 -) - CreateNewSession, -%End -%If (Qt_6_7_0 -) - DisconnectControllingTerminal, -%End -%If (Qt_6_7_0 -) - ResetIds, -%End - }; - -%End -%End -%If (Qt_6_6_0 -) -%If (Linux || macOS) - typedef QFlags UnixProcessFlags; -%End -%End -%If (Qt_6_6_0 -) -%If (Linux || macOS) - - struct UnixProcessParameters - { -%TypeHeaderCode -#include -%End - - QProcess::UnixProcessFlags flags; - int lowestFileDescriptorToClose; - }; - -%End -%End -%If (Qt_6_6_0 -) -%If (Linux || macOS) - QProcess::UnixProcessParameters unixProcessParameters() const; -%End -%End -%If (Qt_6_6_0 -) -%If (Linux || macOS) - void setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly); -%End -%End -%If (Qt_6_6_0 -) -%If (Linux || macOS) - void setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms); -%End -%End -}; - -%End -%If (PyQt_Process) - -class QProcessEnvironment -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_3_0 -) - - enum Initialization - { - InheritFromParent, - }; - -%End -%If (Qt_6_3_0 -) - QProcessEnvironment(QProcessEnvironment::Initialization); -%End - QProcessEnvironment(); - QProcessEnvironment(const QProcessEnvironment &other); - ~QProcessEnvironment(); - bool operator==(const QProcessEnvironment &other) const; - bool operator!=(const QProcessEnvironment &other) const; - bool isEmpty() const; - void clear(); - bool contains(const QString &name) const; - void insert(const QString &name, const QString &value); - void insert(const QProcessEnvironment &e); - void remove(const QString &name); - QString value(const QString &name, const QString &defaultValue = QString()) const; - QStringList toStringList() const; - static QProcessEnvironment systemEnvironment(); - QStringList keys() const; - void swap(QProcessEnvironment &other /Constrained/); -%If (Qt_6_3_0 -) - bool inheritsFromParent() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpropertyanimation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpropertyanimation.sip deleted file mode 100644 index 86c0fa4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpropertyanimation.sip +++ /dev/null @@ -1,42 +0,0 @@ -// qpropertyanimation.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPropertyAnimation : public QVariantAnimation -{ -%TypeHeaderCode -#include -%End - -public: - QPropertyAnimation(QObject *parent /TransferThis/ = 0); - QPropertyAnimation(QObject *target /KeepReference=0/, const QByteArray &propertyName, QObject *parent /TransferThis/ = 0); - virtual ~QPropertyAnimation(); - QObject *targetObject() const; - void setTargetObject(QObject *target /KeepReference=0/); - QByteArray propertyName() const; - void setPropertyName(const QByteArray &propertyName); - -protected: - virtual bool event(QEvent *event); - virtual void updateCurrentValue(const QVariant &value); - virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qhash.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qhash.sip deleted file mode 100644 index 54b29da..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qhash.sip +++ /dev/null @@ -1,489 +0,0 @@ -// This is the SIP interface definition for the majority of the QHash based -// mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template<_TYPE1_, _TYPE2_> -%MappedType QHash<_TYPE1_, _TYPE2_> - /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QHash<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin(); - QHash<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - _TYPE1_ *k = new _TYPE1_(it.key()); - PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - - return 0; - } - - _TYPE2_ *v = new _TYPE2_(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QHash<_TYPE1_, _TYPE2_> *qh = new QHash<_TYPE1_, _TYPE2_>; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int kstate; - _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( - sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, - SIP_NOT_NONE, &kstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but '_TYPE1_' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qh; - - return 0; - } - - int vstate; - _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( - sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE2_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qh; - - return 0; - } - - qh->insert(*k, *v); - - sipReleaseType(v, sipType__TYPE2_, vstate); - sipReleaseType(k, sipType__TYPE1_, kstate); - } - - *sipCppPtr = qh; - - return sipGetState(sipTransferObj); -%End -}; - - -// This is only needed for QtWebChannel but is sufficiently generic that we -// include it here. - -template<_TYPE1_, _TYPE2_ *> -%MappedType QHash<_TYPE1_, _TYPE2_ *> - /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - int gc_enabled = sipEnableGC(0); - PyObject *d = PyDict_New(); - - if (d) - { - QHash<_TYPE1_, _TYPE2_ *>::const_iterator it = sipCpp->constBegin(); - QHash<_TYPE1_, _TYPE2_ *>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - _TYPE1_ *k = new _TYPE1_(it.key()); - PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - d = 0; - - break; - } - - _TYPE2_ *v = it.value(); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, - sipTransferObj); - - if (!vobj) - { - Py_DECREF(kobj); - Py_DECREF(d); - d = 0; - - break; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - d = 0; - - break; - } - - ++it; - } - } - - sipEnableGC(gc_enabled); - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QHash<_TYPE1_, _TYPE2_ *> *qh = new QHash<_TYPE1_, _TYPE2_ *>; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int kstate; - _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( - sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, - SIP_NOT_NONE, &kstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but '_TYPE1_' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qh; - - return 0; - } - - _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( - sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, 0, - 0, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE2_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qh; - - return 0; - } - - qh->insert(*k, v); - - sipReleaseType(k, sipType__TYPE1_, kstate); - } - - *sipCppPtr = qh; - - return sipGetState(sipTransferObj); -%End -}; - - -template -%MappedType QHash - /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QHash::const_iterator it = sipCpp->constBegin(); - QHash::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - PyObject *kobj = PyLong_FromLong(it.key()); - - if (!kobj) - { - Py_DECREF(d); - - return 0; - } - - _TYPE_ *v = new _TYPE_(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QHash *qh = new QHash; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int k = sipLong_AsInt(kobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qh; - *sipIsErr = 1; - - return 0; - } - - int vstate; - _TYPE_ *v = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - delete qh; - - return 0; - } - - qh->insert(k, *v); - - sipReleaseType(v, sipType__TYPE_, vstate); - } - - *sipCppPtr = qh; - - return sipGetState(sipTransferObj); -%End -}; - - -template -%MappedType QHash - /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QHash::const_iterator it = sipCpp->constBegin(); - QHash::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - PyObject *kobj = PyLong_FromLong(it.key()); - - if (!kobj) - { - Py_DECREF(d); - - return 0; - } - - _TYPE_ *v = new _TYPE_(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QHash *qh = new QHash; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - quint16 k = sipLong_AsUnsignedShort(kobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qh; - *sipIsErr = 1; - - return 0; - } - - int vstate; - _TYPE_ *v = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - delete qh; - - return 0; - } - - qh->insert(k, *v); - - sipReleaseType(v, sipType__TYPE_, vstate); - } - - *sipCppPtr = qh; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qlist.sip deleted file mode 100644 index c60dbcc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qlist.sip +++ /dev/null @@ -1,1604 +0,0 @@ -// This is the SIP interface definition for the majority of the QList based -// mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template<_TYPE_> -%MappedType QList<_TYPE_> - /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - _TYPE_ *t = new _TYPE_(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList<_TYPE_> *ql = new QList<_TYPE_>; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - _TYPE_ *t = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but '_TYPE_' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType__TYPE_, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -template<_TYPE_> -%MappedType QList<_TYPE_ *> - /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - int gc_enabled = sipEnableGC(0); - PyObject *l = PyList_New(sipCpp->size()); - - if (l) - { - for (int i = 0; i < sipCpp->size(); ++i) - { - _TYPE_ *t = sipCpp->at(i); - - // The explicit (void *) cast allows _TYPE_ to be const. - PyObject *tobj = sipConvertFromType((void *)t, sipType__TYPE_, - sipTransferObj); - - if (!tobj) - { - Py_DECREF(l); - l = 0; - - break; - } - - PyList_SetItem(l, i, tobj); - } - } - - sipEnableGC(gc_enabled); - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList<_TYPE_ *> *ql = new QList<_TYPE_ *>; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - _TYPE_ *t = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0, - 0, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but '_TYPE_' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(t); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -template<_TYPE1_, _TYPE2_> -%MappedType QList > - /TypeHintIn="Iterable[Tuple[_TYPE1_, _TYPE2_]]", - TypeHintOut="List[Tuple[_TYPE1_, _TYPE2_]]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - const std::pair<_TYPE1_, _TYPE2_> &p = sipCpp->at(i); - _TYPE1_ *s1 = new _TYPE1_(p.first); - _TYPE2_ *s2 = new _TYPE2_(p.second); - PyObject *pobj = sipBuildResult(NULL, "(NN)", s1, sipType__TYPE1_, - sipTransferObj, s2, sipType__TYPE2_, sipTransferObj); - - if (!pobj) - { - delete s1; - delete s2; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList > *ql = new QList >; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *seq = PyIter_Next(iter); - - if (!seq) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - Py_ssize_t sub_len; - - if (PySequence_Check(seq) && !PyBytes_Check(sipPy) && !PyUnicode_Check(seq)) - sub_len = PySequence_Size(seq); - else - sub_len = -1; - - if (sub_len != 2) - { - if (sub_len < 0) - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but a 2 element non-string sequence is expected", - i, sipPyTypeName(Py_TYPE(seq))); - else - PyErr_Format(PyExc_TypeError, - "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", - i, sub_len); - - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyObject *itm1 = PySequence_GetItem(seq, 0); - - if (!itm1) - { - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - int state1; - _TYPE1_ *s1 = reinterpret_cast<_TYPE1_ *>( - sipForceConvertToType(itm1, sipType__TYPE1_, sipTransferObj, - SIP_NOT_NONE, &state1, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the first sub-element of index %zd has type '%s' but '_TYPE1_' is expected", - i, sipPyTypeName(Py_TYPE(itm1))); - - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - - return 0; - } - - PyObject *itm2 = PySequence_GetItem(seq, 1); - - if (!itm2) - { - sipReleaseType(s1, sipType__TYPE1_, state1); - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - int state2; - _TYPE2_ *s2 = reinterpret_cast<_TYPE2_ *>( - sipForceConvertToType(itm2, sipType__TYPE2_, sipTransferObj, - SIP_NOT_NONE, &state2, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the second sub-element of index %zd has type '%s' but '_TYPE2_' is expected", - i, sipPyTypeName(Py_TYPE(itm2))); - - Py_DECREF(itm2); - sipReleaseType(s1, sipType__TYPE1_, state1); - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(std::pair<_TYPE1_, _TYPE2_>(*s1, *s2)); - - sipReleaseType(s2, sipType__TYPE2_, state2); - Py_DECREF(itm2); - sipReleaseType(s1, sipType__TYPE1_, state1); - Py_DECREF(itm1); - Py_DECREF(seq); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -template -%MappedType QList > - /TypeHintIn="Iterable[Tuple[float, _TYPE_]]", - TypeHintOut="List[Tuple[float, _TYPE_]]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - const std::pair &p = sipCpp->at(i); - _TYPE_ *s2 = new _TYPE_(p.second); - PyObject *pobj = sipBuildResult(NULL, "(dN)", (double)p.first, s2, - sipType__TYPE_, sipTransferObj); - - if (!pobj) - { - delete s2; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList > *qv = new QList >; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *seq = PyIter_Next(iter); - - if (!seq) - { - if (PyErr_Occurred()) - { - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - Py_ssize_t sub_len; - - if (PySequence_Check(seq) && !PyBytes_Check(sipPy) && !PyUnicode_Check(seq)) - sub_len = PySequence_Size(seq); - else - sub_len = -1; - - if (sub_len != 2) - { - if (sub_len < 0) - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but a 2 element non-string sequence is expected", - i, sipPyTypeName(Py_TYPE(seq))); - else - PyErr_Format(PyExc_TypeError, - "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", - i, sub_len); - - Py_DECREF(seq); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyObject *itm1 = PySequence_GetItem(seq, 0); - - if (!itm1) - { - Py_DECREF(seq); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - qreal s1 = PyFloat_AsDouble(itm1); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the first sub-element of index %zd has type '%s' but 'float' is expected", - i, sipPyTypeName(Py_TYPE(itm1))); - - Py_DECREF(itm1); - Py_DECREF(seq); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyObject *itm2 = PySequence_GetItem(seq, 1); - - if (!itm2) - { - Py_DECREF(itm1); - Py_DECREF(seq); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - int state2; - _TYPE_ *s2 = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(itm2, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &state2, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the second sub-element of index %zd has type '%s' but '_TYPE_' is expected", - i, sipPyTypeName(Py_TYPE(itm2))); - - Py_DECREF(itm2); - Py_DECREF(itm1); - Py_DECREF(seq); - delete qv; - Py_DECREF(iter); - - return 0; - } - - qv->append(std::pair(s1, *s2)); - - sipReleaseType(s2, sipType__TYPE_, state2); - Py_DECREF(itm2); - Py_DECREF(itm1); - Py_DECREF(seq); - } - - Py_DECREF(iter); - - *sipCppPtr = qv; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList > - /TypeHintIn="Iterable[Tuple[int, int]]", - TypeHintOut="List[Tuple[int, int]]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - const std::pair &p = sipCpp->at(i); - PyObject *pobj = Py_BuildValue((char *)"ii", p.first, p.second); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList > *ql = new QList >; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *seq = PyIter_Next(iter); - - if (!seq) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - Py_ssize_t sub_len; - - if (PySequence_Check(seq) && !PyBytes_Check(sipPy) && !PyUnicode_Check(seq)) - sub_len = PySequence_Size(seq); - else - sub_len = -1; - - if (sub_len != 2) - { - if (sub_len < 0) - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but a 2 element non-string sequence is expected", - i, sipPyTypeName(Py_TYPE(seq))); - else - PyErr_Format(PyExc_TypeError, - "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", - i, sub_len); - - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyObject *itm1 = PySequence_GetItem(seq, 0); - - if (!itm1) - { - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - int first = sipLong_AsInt(itm1); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "the first sub-element of index %zd has type '%s' but 'int' is expected", - i, sipPyTypeName(Py_TYPE(itm1))); - - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - PyObject *itm2 = PySequence_GetItem(seq, 1); - - if (!itm2) - { - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - int second = sipLong_AsInt(itm2); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "the second sub-element of index %zd has type '%s' but 'int' is expected", - i, sipPyTypeName(Py_TYPE(itm2))); - - Py_DECREF(itm2); - Py_DECREF(itm1); - Py_DECREF(seq); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(std::pair(first, second)); - - Py_DECREF(itm2); - Py_DECREF(itm1); - Py_DECREF(seq); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *pobj = PyLong_FromLong(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int val = sipLong_AsInt(itm); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'int' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - // Convert to a Python long to make sure it doesn't get interpreted as - // a signed value. - PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *qv = new QList; - - for (;;) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - unsigned int val = sipLong_AsUnsignedInt(itm); - - if (PyErr_Occurred()) - { - Py_DECREF(itm); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - qv->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = qv; - - return sipGetState(sipTransferObj); -%End -}; - - -%If (Qt_6_1_0 -) - -%MappedType QList - /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - // Convert to a Python long to make sure it doesn't get interpreted as - // a signed value. - PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *qv = new QList; - - for (;;) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - unsigned short val = sipLong_AsUnsignedShort(itm); - - if (PyErr_Occurred()) - { - Py_DECREF(itm); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - qv->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = qv; - - return sipGetState(sipTransferObj); -%End -}; - -%End - - -%If (Qt_6_5_0 -) - -%MappedType QList - /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *pobj = PyLong_FromLongLong(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - qsizetype val = PyLong_AsLongLong(itm); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'int' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End - - -%MappedType QList - /TypeHintIn="Iterable[float]", TypeHintOut="List[float]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - double val = PyFloat_AsDouble(itm); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'float' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[float]", TypeHintOut="List[float]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - double val = PyFloat_AsDouble(itm); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'float' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[Qt.DayOfWeek]", TypeHintOut="List[Qt.DayOfWeek]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_Qt_DayOfWeek); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_Qt_DayOfWeek); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'Qt.DayOfWeek' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -// This is an explicit QList implementation that is identical -// to the template above except for the /NoRelease/ annotation. The only use -// of this is in a QModelDataRowSpan ctor where we handle the lifetime of the -// C++ instance returned. An alternative would be to implement a /NoRelease/ -// argument annotation in SIP. -%MappedType QList - /NoRelease, TypeHintIn="Iterable[QModelRoleData]", - TypeHintOut="List[QModelRoleData]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - QModelRoleData *t = new QModelRoleData(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType_QModelRoleData, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - QModelRoleData *t = reinterpret_cast( - sipForceConvertToType(itm, sipType_QModelRoleData, - sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QModelRoleData' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType_QModelRoleData, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qmap.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qmap.sip deleted file mode 100644 index 73fb7c7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qmap.sip +++ /dev/null @@ -1,425 +0,0 @@ -// This is the SIP interface definition for the majority of the QMap and -// QMultiMap based mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template<_TYPE1_, _TYPE2_> -%MappedType QMap<_TYPE1_, _TYPE2_> - /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QMap<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin(); - QMap<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - _TYPE1_ *k = new _TYPE1_(it.key()); - PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - - return 0; - } - - _TYPE2_ *v = new _TYPE2_(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QMap<_TYPE1_, _TYPE2_> *qm = new QMap<_TYPE1_, _TYPE2_>; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int kstate; - _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( - sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, - SIP_NOT_NONE, &kstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but '_TYPE1_' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qm; - - return 0; - } - - int vstate; - _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( - sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE2_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qm; - - return 0; - } - - qm->insert(*k, *v); - - sipReleaseType(v, sipType__TYPE2_, vstate); - sipReleaseType(k, sipType__TYPE1_, kstate); - } - - *sipCppPtr = qm; - - return sipGetState(sipTransferObj); -%End -}; - - -template -%MappedType QMap - /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QMap::const_iterator it = sipCpp->constBegin(); - QMap::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - PyObject *kobj = PyLong_FromLong(it.key()); - - if (!kobj) - { - Py_DECREF(d); - - return 0; - } - - _TYPE_ *v = new _TYPE_(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QMap *qm = new QMap; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int k = sipLong_AsInt(kobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qm; - *sipIsErr = 1; - - return 0; - } - - int vstate; - _TYPE_ *v = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but '_TYPE_' is expected", - sipPyTypeName(Py_TYPE(vobj))); - - delete qm; - - return 0; - } - - qm->insert(k, *v); - - sipReleaseType(v, sipType__TYPE_, vstate); - } - - *sipCppPtr = qm; - - return sipGetState(sipTransferObj); -%End -}; - - -template<_TYPE1_, _TYPE2_> -%MappedType QMultiMap<_TYPE1_, _TYPE2_> - /TypeHintIn="Dict[_TYPE1_, Sequence[_TYPE2_]]", TypeHintOut="Dict[_TYPE1_, List[_TYPE2_]]", TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QList<_TYPE1_> keys = sipCpp->keys(); - QList<_TYPE1_>::const_iterator kit = keys.constBegin(); - QList<_TYPE1_>::const_iterator kit_end = keys.constEnd(); - - while (kit != kit_end) - { - _TYPE1_ *k = new _TYPE1_(*kit); - PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, - sipTransferObj); - - if (!kobj) - { - delete k; - Py_DECREF(d); - - return 0; - } - - // Create a Python list as the dictionary value. - QList<_TYPE2_> values = sipCpp->values(*kit); - PyObject *vobj = PyList_New(values.count()); - - if (!vobj) - { - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - QList<_TYPE2_>::const_iterator vit = values.constBegin(); - QList<_TYPE2_>::const_iterator vit_end = values.constEnd(); - - for (int i = 0; vit != vit_end; ++i) - { - _TYPE2_ *sv = new _TYPE2_(*vit); - PyObject *svobj = sipConvertFromNewType(sv, sipType__TYPE2_, - sipTransferObj); - - if (!svobj) - { - delete sv; - Py_DECREF(vobj); - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - PyList_SetItem(vobj, i, svobj); - - ++vit; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++kit; - } - - return d; -%End - -%ConvertToTypeCode - if (sipIsErr == NULL) - return PyDict_Check(sipPy); - - QMultiMap<_TYPE1_, _TYPE2_> *qm = new QMultiMap<_TYPE1_, _TYPE2_>; - - Py_ssize_t i = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &i, &kobj, &vobj)) - { - int kstate; - - _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>(sipConvertToType(kobj, sipType__TYPE1_, sipTransferObj, SIP_NOT_NONE, &kstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a dict key has type '%s' but '_TYPE1_' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qm; - - return 0; - } - - Py_ssize_t vi = PySequence_Size(vobj); - - if (vi < 0) - { - PyErr_Format(PyExc_TypeError, - "a dict value has type '%s' but a sequence is expected", - sipPyTypeName(Py_TYPE(vobj))); - - *sipIsErr = 1; - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qm; - - return 0; - } - - // We go through the sequence backwards to maintain the Qt semantics of - // later items appearing first. - while (vi--) - { - PyObject *itm_obj = PySequence_GetItem(vobj, vi); - - if (!itm_obj) - { - *sipIsErr = 1; - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qm; - - return 0; - } - - int itm_state; - - _TYPE2_ *itm = reinterpret_cast<_TYPE2_ *>(sipConvertToType(itm_obj, sipType__TYPE2_, sipTransferObj, SIP_NOT_NONE, &itm_state, sipIsErr)); - - Py_DECREF(itm_obj); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "a sequence element has type '%s' but '_TYPE2_' is expected", - sipPyTypeName(Py_TYPE(itm_obj))); - - sipReleaseType(k, sipType__TYPE1_, kstate); - delete qm; - - return 0; - } - - qm->insert(*k, *itm); - sipReleaseType(itm, sipType__TYPE2_, itm_state); - } - - sipReleaseType(k, sipType__TYPE1_, kstate); - } - - *sipCppPtr = qm; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qset.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qset.sip deleted file mode 100644 index ee57958..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_qset.sip +++ /dev/null @@ -1,244 +0,0 @@ -// This is the SIP interface definition for the majority of the QSet based -// mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template<_TYPE_> -%MappedType QSet<_TYPE_> - /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="Set[_TYPE_]", - TypeHintValue="set()"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *s = PySet_New(0); - - if (!s) - return 0; - - QSet<_TYPE_>::const_iterator it = sipCpp->constBegin(); - QSet<_TYPE_>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - _TYPE_ *t = new _TYPE_(*it); - PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(s); - - return 0; - } - - PySet_Add(s, tobj); - - ++it; - } - - return s; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QSet<_TYPE_> *qs = new QSet<_TYPE_>; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete qs; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - _TYPE_ *t = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but '_TYPE_' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete qs; - Py_DECREF(iter); - - return 0; - } - - qs->insert(*t); - - sipReleaseType(t, sipType__TYPE_, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = qs; - - return sipGetState(sipTransferObj); -%End -}; - - -template<_TYPE_> -%MappedType QSet<_TYPE_ *> - /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="Set[_TYPE_]", - TypeHintValue="set()"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - int gc_enabled = sipEnableGC(0); - PyObject *s = PySet_New(0); - - if (s) - { - QSet<_TYPE_ *>::const_iterator it = sipCpp->constBegin(); - QSet<_TYPE_ *>::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - // The explicit (void *) cast allows _TYPE_ to be const. - PyObject *tobj = sipConvertFromType((void *)*it, sipType__TYPE_, - sipTransferObj); - - if (!tobj) - { - Py_DECREF(s); - s = 0; - - break; - } - - PySet_Add(s, tobj); - - ++it; - } - } - - sipEnableGC(gc_enabled); - - return s; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QSet<_TYPE_ *> *qs = new QSet<_TYPE_ *>; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete qs; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - _TYPE_ *t = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0, - 0, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but '_TYPE_' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete qs; - Py_DECREF(iter); - - return 0; - } - - qs->insert(t); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = qs; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_optional.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_optional.sip deleted file mode 100644 index b6c5242..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_optional.sip +++ /dev/null @@ -1,52 +0,0 @@ -// This is the SIP interface definition for the std::optional mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -template<_TYPE_> -%MappedType std::optional<_TYPE_> /TypeHint="Optional[_TYPE_]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - if (!sipCpp->has_value()) - { - Py_INCREF(Py_None); - return Py_None; - } - - _TYPE_ *t = new _TYPE_(sipCpp->value()); - - PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, sipTransferObj); - - if (!tobj) - { - delete t; - - return 0; - } - - return tobj; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_pair.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_pair.sip deleted file mode 100644 index b9a3b82..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_std_pair.sip +++ /dev/null @@ -1,503 +0,0 @@ -// This is the SIP interface definition for the majority of the std::pair based -// mapped types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -template<_TYPE1_, _TYPE2_> -%MappedType std::pair<_TYPE1_, _TYPE2_> /TypeHint="Tuple[_TYPE1_, _TYPE2_]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - _TYPE1_ *first = new _TYPE1_(sipCpp->first); - _TYPE2_ *second = new _TYPE2_(sipCpp->second); - PyObject *t = sipBuildResult(NULL, "(NN)", first, sipType__TYPE1_, - sipTransferObj, second, sipType__TYPE2_, sipTransferObj); - - if (!t) - { - delete first; - delete second; - - return 0; - } - - return t; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - int firststate; - _TYPE1_ *first = reinterpret_cast<_TYPE1_ *>( - sipForceConvertToType(firstobj, sipType__TYPE1_, sipTransferObj, - SIP_NOT_NONE, &firststate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but '_TYPE1_' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - sipReleaseType(first, sipType__TYPE1_, firststate); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - int secondstate; - _TYPE2_ *second = reinterpret_cast<_TYPE2_ *>( - sipForceConvertToType(secondobj, sipType__TYPE2_, sipTransferObj, - SIP_NOT_NONE, &secondstate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but '_TYPE2_' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - sipReleaseType(first, sipType__TYPE1_, firststate); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair<_TYPE1_, _TYPE2_>(*first, *second); - - sipReleaseType(second, sipType__TYPE2_, secondstate); - Py_DECREF(secondobj); - sipReleaseType(first, sipType__TYPE1_, firststate); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; - - -template<_TYPE_> -%MappedType std::pair<_TYPE_, int> /TypeHint="Tuple[_TYPE_, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - _TYPE_ *first = new _TYPE_(sipCpp->first); - PyObject *t = sipBuildResult(NULL, "(Ni)", first, sipType__TYPE_, - sipTransferObj, sipCpp->second); - - if (!t) - { - delete first; - - return 0; - } - - return t; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - int firststate; - _TYPE_ *first = reinterpret_cast<_TYPE_ *>( - sipForceConvertToType(firstobj, sipType__TYPE_, sipTransferObj, - SIP_NOT_NONE, &firststate, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but '_TYPE_' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - sipReleaseType(first, sipType__TYPE_, firststate); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - int second = sipLong_AsInt(secondobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - sipReleaseType(first, sipType__TYPE_, firststate); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair<_TYPE_, int>(*first, second); - - Py_DECREF(secondobj); - sipReleaseType(first, sipType__TYPE_, firststate); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType std::pair /TypeHint="Tuple[int, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - return Py_BuildValue("(ii)", sipCpp->first, sipCpp->second); -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - int first = sipLong_AsInt(firstobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - *sipIsErr = 1; - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - int second = sipLong_AsInt(secondobj); - - if (PyErr_Occurred()) - { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but 'int' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair(first, second); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType std::pair /TypeHint="Tuple[float, float]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - return Py_BuildValue("(ff)", sipCpp->first, sipCpp->second); -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - double first = PyFloat_AsDouble(firstobj); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but 'float' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - *sipIsErr = 1; - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - double second = PyFloat_AsDouble(secondobj); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but 'float' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair(first, second);; - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; - - -%If (Qt_6_2_0 -) - -%MappedType std::pair /TypeHint="Tuple[float, float]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - return Py_BuildValue("(ff)", sipCpp->first, sipCpp->second); -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - double first = PyFloat_AsDouble(firstobj); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but 'float' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - *sipIsErr = 1; - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - PyErr_Clear(); - double second = PyFloat_AsDouble(secondobj); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but 'float' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair(first, second);; - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_virtual_error_handler.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_virtual_error_handler.sip deleted file mode 100644 index bd71cd9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qpycore_virtual_error_handler.sip +++ /dev/null @@ -1,23 +0,0 @@ -// This is the implementation of the PyQt-specific virtual error handler. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%VirtualErrorHandler PyQt6 - pyqt6_err_print(); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrandom.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrandom.sip deleted file mode 100644 index 8468247..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrandom.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qrandom.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRandomGenerator -{ -%TypeHeaderCode -#include -%End - -public: - QRandomGenerator(quint32 seed = 1); - QRandomGenerator(const QRandomGenerator &other); - quint32 generate(); - quint64 generate64(); - double generateDouble(); - double bounded(double highest /Constrained/); - qint64 bounded(qint64 lowest, qint64 highest); - qint64 bounded(qint64 highest); - typedef quint32 result_type; - QRandomGenerator::result_type operator()(); - void seed(quint32 seed = 1); - void discard(unsigned long long z); - static QRandomGenerator::result_type min(); - static QRandomGenerator::result_type max(); - static QRandomGenerator *system(); - static QRandomGenerator *global(); - static QRandomGenerator securelySeeded(); -}; - -bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2); -bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qreadwritelock.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qreadwritelock.sip deleted file mode 100644 index bbadd98..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qreadwritelock.sip +++ /dev/null @@ -1,114 +0,0 @@ -// qreadwritelock.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QReadWriteLock -{ -%TypeHeaderCode -#include -%End - -public: - enum RecursionMode - { - NonRecursive, - Recursive, - }; - - explicit QReadWriteLock(QReadWriteLock::RecursionMode recursionMode = QReadWriteLock::NonRecursive); - ~QReadWriteLock(); - void lockForRead() /ReleaseGIL/; -%If (Qt_6_6_0 -) - bool tryLockForRead(QDeadlineTimer timeout = {}) /ReleaseGIL/; -%End -%If (- Qt_6_6_0) - bool tryLockForRead(); -%End - bool tryLockForRead(int timeout) /ReleaseGIL/; - void lockForWrite() /ReleaseGIL/; -%If (Qt_6_6_0 -) - bool tryLockForWrite(QDeadlineTimer timeout = {}) /ReleaseGIL/; -%End -%If (- Qt_6_6_0) - bool tryLockForWrite(); -%End - bool tryLockForWrite(int timeout) /ReleaseGIL/; - void unlock(); - -private: - QReadWriteLock(const QReadWriteLock &); -}; - -class QReadLocker -{ -%TypeHeaderCode -#include -%End - -public: - QReadLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/; - ~QReadLocker(); - void unlock(); - void relock() /ReleaseGIL/; - QReadWriteLock *readWriteLock() const; - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->unlock(); -%End - -private: - QReadLocker(const QReadLocker &); -}; - -class QWriteLocker -{ -%TypeHeaderCode -#include -%End - -public: - QWriteLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/; - ~QWriteLocker(); - void unlock(); - void relock() /ReleaseGIL/; - QReadWriteLock *readWriteLock() const; - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->unlock(); -%End - -private: - QWriteLocker(const QWriteLocker &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrect.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrect.sip deleted file mode 100644 index f689b95..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrect.sip +++ /dev/null @@ -1,286 +0,0 @@ -// qrect.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRect -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("iiii", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height()); -%End - -public: - QRect(); - QRect normalized() const; - void moveCenter(const QPoint &p); - QRect operator|(const QRect &r) const; - QRect operator&(const QRect &r) const; - bool contains(const QPoint &point, bool proper = false) const; - int __contains__(const QPoint &p) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - bool contains(const QRect &rectangle, bool proper = false) const; - int __contains__(const QRect &r) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - bool intersects(const QRect &r) const; - QRect(int aleft, int atop, int awidth, int aheight); - QRect(const QPoint &atopLeft, const QPoint &abottomRight); - QRect(const QPoint &atopLeft, const QSize &asize); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QRect()"); - } - else - { - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QRect(%i, %i, %i, %i)", sipCpp->left(), - sipCpp->top(), sipCpp->width(), sipCpp->height()); - } -%End - - bool isNull() const; - bool isEmpty() const; - bool isValid() const; - int __bool__() const; -%MethodCode - sipRes = sipCpp->isValid(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - int left() const; - int top() const; - int right() const; - int bottom() const; - int x() const; - int y() const; - void setLeft(int pos); - void setTop(int pos); - void setRight(int pos); - void setBottom(int pos); - void setTopLeft(const QPoint &p); - void setBottomRight(const QPoint &p); - void setTopRight(const QPoint &p); - void setBottomLeft(const QPoint &p); - void setX(int ax); - void setY(int ay); - QPoint topLeft() const; - QPoint bottomRight() const; - QPoint topRight() const; - QPoint bottomLeft() const; - QPoint center() const; - int width() const; - int height() const; - QSize size() const; - void translate(int dx, int dy); - void translate(const QPoint &p); - QRect translated(int dx, int dy) const; - QRect translated(const QPoint &p) const; - void moveTo(int ax, int ay); - void moveTo(const QPoint &p); - void moveLeft(int pos); - void moveTop(int pos); - void moveRight(int pos); - void moveBottom(int pos); - void moveTopLeft(const QPoint &p); - void moveBottomRight(const QPoint &p); - void moveTopRight(const QPoint &p); - void moveBottomLeft(const QPoint &p); - void getRect(int *ax, int *ay, int *aw, int *ah) const; - void setRect(int ax, int ay, int aw, int ah); - void getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const; - void setCoords(int xp1, int yp1, int xp2, int yp2); - QRect adjusted(int xp1, int yp1, int xp2, int yp2) const; - void adjust(int dx1, int dy1, int dx2, int dy2); - void setWidth(int w); - void setHeight(int h); - void setSize(const QSize &s); - bool contains(int ax, int ay, bool aproper) const; - bool contains(int ax, int ay) const; - QRect &operator|=(const QRect &r); - QRect &operator&=(const QRect &r); - QRect intersected(const QRect &other) const; - QRect united(const QRect &r) const; - QRect marginsAdded(const QMargins &margins) const; - QRect marginsRemoved(const QMargins &margins) const; - QRect &operator+=(const QMargins &margins); - QRect &operator-=(const QMargins &margins); - QRect transposed() const; - static QRect span(const QPoint &p1, const QPoint &p2); -%If (Qt_6_4_0 -) - QRectF toRectF() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QRect &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QRect & /Constrained/) /ReleaseGIL/; -bool operator==(const QRect &r1, const QRect &r2); -bool operator!=(const QRect &r1, const QRect &r2); - -class QRectF -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("dddd", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height()); -%End - -public: - QRectF(); - QRectF(const QPointF &atopLeft, const QSizeF &asize); - QRectF(const QPointF &atopLeft, const QPointF &abottomRight); - QRectF(qreal aleft, qreal atop, qreal awidth, qreal aheight); - QRectF(const QRect &r); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QRectF()"); - } - else - { - PyObject *l = PyFloat_FromDouble(sipCpp->left()); - PyObject *t = PyFloat_FromDouble(sipCpp->top()); - PyObject *w = PyFloat_FromDouble(sipCpp->width()); - PyObject *h = PyFloat_FromDouble(sipCpp->height()); - - if (l && t && w && h) - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QRectF(%R, %R, %R, %R)", l, t, w, h); - - Py_XDECREF(l); - Py_XDECREF(t); - Py_XDECREF(w); - Py_XDECREF(h); - } -%End - - QRectF normalized() const; - qreal left() const; - qreal top() const; - qreal right() const; - qreal bottom() const; - void setX(qreal pos); - void setY(qreal pos); - QPointF topLeft() const; - QPointF bottomRight() const; - QPointF topRight() const; - QPointF bottomLeft() const; - QRectF operator|(const QRectF &r) const; - QRectF operator&(const QRectF &r) const; - bool contains(const QPointF &p) const; - int __contains__(const QPointF &p) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - bool contains(const QRectF &r) const; - int __contains__(const QRectF &r) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - bool intersects(const QRectF &r) const; - bool isNull() const; - bool isEmpty() const; - bool isValid() const; - int __bool__() const; -%MethodCode - sipRes = sipCpp->isValid(); -%End - - qreal x() const; - qreal y() const; - void setLeft(qreal pos); - void setRight(qreal pos); - void setTop(qreal pos); - void setBottom(qreal pos); - void setTopLeft(const QPointF &p); - void setTopRight(const QPointF &p); - void setBottomLeft(const QPointF &p); - void setBottomRight(const QPointF &p); - QPointF center() const; - void moveLeft(qreal pos); - void moveTop(qreal pos); - void moveRight(qreal pos); - void moveBottom(qreal pos); - void moveTopLeft(const QPointF &p); - void moveTopRight(const QPointF &p); - void moveBottomLeft(const QPointF &p); - void moveBottomRight(const QPointF &p); - void moveCenter(const QPointF &p); - qreal width() const; - qreal height() const; - QSizeF size() const; - void translate(qreal dx, qreal dy); - void translate(const QPointF &p); - void moveTo(qreal ax, qreal ay); - void moveTo(const QPointF &p); - QRectF translated(qreal dx, qreal dy) const; - QRectF translated(const QPointF &p) const; - void getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const; - void setRect(qreal ax, qreal ay, qreal aaw, qreal aah); - void getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) const; - void setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2); - void adjust(qreal xp1, qreal yp1, qreal xp2, qreal yp2); - QRectF adjusted(qreal xp1, qreal yp1, qreal xp2, qreal yp2) const; - void setWidth(qreal aw); - void setHeight(qreal ah); - void setSize(const QSizeF &s); - bool contains(qreal ax, qreal ay) const; - QRectF &operator|=(const QRectF &r); - QRectF &operator&=(const QRectF &r); - QRectF intersected(const QRectF &r) const; - QRectF united(const QRectF &r) const; - QRect toAlignedRect() const; - QRect toRect() const; - QRectF marginsAdded(const QMarginsF &margins) const; - QRectF marginsRemoved(const QMarginsF &margins) const; - QRectF &operator+=(const QMarginsF &margins); - QRectF &operator-=(const QMarginsF &margins); - QRectF transposed() const; -}; - -QDataStream &operator<<(QDataStream &, const QRectF &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QRectF & /Constrained/) /ReleaseGIL/; -bool operator==(const QRectF &r1, const QRectF &r2); -bool operator!=(const QRectF &r1, const QRectF &r2); -QRect operator+(const QRect &rectangle, const QMargins &margins); -QRect operator+(const QMargins &margins, const QRect &rectangle); -QRect operator-(const QRect &lhs, const QMargins &rhs); -QRectF operator+(const QRectF &lhs, const QMarginsF &rhs); -QRectF operator+(const QMarginsF &lhs, const QRectF &rhs); -QRectF operator-(const QRectF &lhs, const QMarginsF &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qregularexpression.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qregularexpression.sip deleted file mode 100644 index 57b2132..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qregularexpression.sip +++ /dev/null @@ -1,189 +0,0 @@ -// qregularexpression.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRegularExpression -{ -%TypeHeaderCode -#include -%End - -public: - enum PatternOption /BaseType=Flag/ - { - NoPatternOption, - CaseInsensitiveOption, - DotMatchesEverythingOption, - MultilineOption, - ExtendedPatternSyntaxOption, - InvertedGreedinessOption, - DontCaptureOption, - UseUnicodePropertiesOption, - }; - - typedef QFlags PatternOptions; - QRegularExpression::PatternOptions patternOptions() const; - void setPatternOptions(QRegularExpression::PatternOptions options); - QRegularExpression(); - QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = QRegularExpression::NoPatternOption); - QRegularExpression(const QRegularExpression &re); - ~QRegularExpression(); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *uni = qpycore_PyObject_FromQString(sipCpp->pattern()); - - if (uni) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QRegularExpression(%R", uni); - - if (sipCpp->patternOptions() != QRegularExpression::NoPatternOption) - { - qpycore_Unicode_ConcatAndDel(&sipRes, - PyUnicode_FromFormat( - ", PyQt6.QtCore.QRegularExpression.PatternOptions(%i)", - (int)sipCpp->patternOptions())); - } - - qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); - - Py_DECREF(uni); - } - else - { - sipRes = 0; - } -%End - - void swap(QRegularExpression &re /Constrained/); - QString pattern() const; - void setPattern(const QString &pattern); - bool isValid() const; - qsizetype patternErrorOffset() const; - QString errorString() const; - int captureCount() const; - - enum MatchType - { - NormalMatch, - PartialPreferCompleteMatch, - PartialPreferFirstMatch, - NoMatch, - }; - - enum MatchOption /BaseType=Flag/ - { - NoMatchOption, - AnchorAtOffsetMatchOption, - DontCheckSubjectStringMatchOption, - }; - - typedef QFlags MatchOptions; - QRegularExpressionMatch match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; -%If (Qt_6_5_0 -) - QRegularExpressionMatch matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; -%End - QRegularExpressionMatchIterator globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; -%If (Qt_6_5_0 -) - QRegularExpressionMatchIterator globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; -%End - static QString escape(const QString &str); - QStringList namedCaptureGroups() const; - bool operator==(const QRegularExpression &re) const; - bool operator!=(const QRegularExpression &re) const; - void optimize() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - static QString wildcardToRegularExpression(QStringView str, QRegularExpression::WildcardConversionOptions options = QRegularExpression::DefaultWildcardConversion); - static QString anchoredPattern(const QString &expression); - - enum WildcardConversionOption /BaseType=Flag/ - { - DefaultWildcardConversion, - UnanchoredWildcardConversion, -%If (Qt_6_6_0 -) - NonPathWildcardConversion, -%End - }; - - typedef QFlags WildcardConversionOptions; - static QRegularExpression fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = QRegularExpression::DefaultWildcardConversion); -}; - -QDataStream &operator<<(QDataStream &out, const QRegularExpression &re /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QRegularExpression &re /Constrained/) /ReleaseGIL/; - -class QRegularExpressionMatch -{ -%TypeHeaderCode -#include -%End - -public: - QRegularExpressionMatch(); - ~QRegularExpressionMatch(); - QRegularExpressionMatch(const QRegularExpressionMatch &match); - void swap(QRegularExpressionMatch &match /Constrained/); - QRegularExpression regularExpression() const; - QRegularExpression::MatchType matchType() const; - QRegularExpression::MatchOptions matchOptions() const; - bool hasMatch() const; - bool hasPartialMatch() const; - bool isValid() const; - int lastCapturedIndex() const; - QString captured(int nth = 0) const; - QString captured(const QString &name) const; - QStringList capturedTexts() const; - qsizetype capturedStart(QStringView name) const; - qsizetype capturedStart(int nth = 0) const; - qsizetype capturedLength(QStringView name) const; - qsizetype capturedLength(int nth = 0) const; - qsizetype capturedEnd(QStringView name) const; - qsizetype capturedEnd(int nth = 0) const; -%If (Qt_6_3_0 -) - bool hasCaptured(int nth) const; -%End -%If (Qt_6_3_0 -) - bool hasCaptured(const QString &name) const; -%End -}; - -class QRegularExpressionMatchIterator -{ -%TypeHeaderCode -#include -%End - -public: - QRegularExpressionMatchIterator(); - ~QRegularExpressionMatchIterator(); - QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator); - void swap(QRegularExpressionMatchIterator &iterator /Constrained/); - bool isValid() const; - bool hasNext() const; - QRegularExpressionMatch next(); - QRegularExpressionMatch peekNext() const; - QRegularExpression regularExpression() const; - QRegularExpression::MatchType matchType() const; - QRegularExpression::MatchOptions matchOptions() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qresource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qresource.sip deleted file mode 100644 index ef2dddd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qresource.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qresource.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QResource -{ -%TypeHeaderCode -#include -%End - -public: - QResource(const QString &fileName = QString(), const QLocale &locale = QLocale()); - ~QResource(); - QString absoluteFilePath() const; - SIP_PYOBJECT data() const /TypeHint="bytes"/; -%MethodCode - // The data may contain embedded '\0's so set the size explicitly. - - if (sipCpp->data()) - { - if ((sipRes = PyBytes_FromStringAndSize((char *)sipCpp->data(), sipCpp->size())) == NULL) - sipIsErr = 1; - } - else - { - Py_INCREF(Py_None); - sipRes = Py_None; - } -%End - - QString fileName() const; - bool isValid() const; - QLocale locale() const; - void setFileName(const QString &file); - void setLocale(const QLocale &locale); - qint64 size() const; - static bool registerResource(const QString &rccFileName, const QString &mapRoot = QString()); - static bool registerResource(const uchar *rccData, const QString &mapRoot = QString()) /PyName=registerResourceData/; - static bool unregisterResource(const QString &rccFileName, const QString &mapRoot = QString()); - static bool unregisterResource(const uchar *rccData, const QString &mapRoot = QString()) /PyName=unregisterResourceData/; - -protected: - QStringList children() const; - bool isDir() const; - bool isFile() const; - -public: - QDateTime lastModified() const; - - enum Compression - { - NoCompression, - ZlibCompression, - ZstdCompression, - }; - - QResource::Compression compressionAlgorithm() const; - qint64 uncompressedSize() const; - QByteArray uncompressedData() const; - -private: - QResource(const QResource &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrunnable.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrunnable.sip deleted file mode 100644 index 2c6cb43..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qrunnable.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qrunnable.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRunnable /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QRunnable(); - virtual ~QRunnable(); - virtual void run() = 0 /NewThread/; - bool autoDelete() const; - void setAutoDelete(bool _autoDelete); - static QRunnable *create(SIP_PYCALLABLE functionToRun /KeepReference,TypeHint="Callable[[], None]"/) /Factory/; -%MethodCode - sipRes = QRunnable::create([a0]() { - SIP_BLOCK_THREADS - - PyObject *res; - - res = PyObject_CallObject(a0, NULL); - - if (res) - Py_DECREF(res); - else - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS - }); -%End - -private: - QRunnable(const QRunnable &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsavefile.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsavefile.sip deleted file mode 100644 index acef919..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsavefile.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qsavefile.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSaveFile : public QFileDevice -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSaveFile(const QString &name); - explicit QSaveFile(QObject *parent /TransferThis/ = 0); - QSaveFile(const QString &name, QObject *parent /TransferThis/); - virtual ~QSaveFile(); - virtual QString fileName() const; - void setFileName(const QString &name); - virtual bool open(QIODeviceBase::OpenMode flags) /ReleaseGIL/; - bool commit(); - void cancelWriting(); - void setDirectWriteFallback(bool enabled); - bool directWriteFallback() const; - -protected: - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QSaveFile::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - -private: - virtual void close(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsemaphore.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsemaphore.sip deleted file mode 100644 index 58b4401..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsemaphore.sip +++ /dev/null @@ -1,58 +0,0 @@ -// qsemaphore.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSemaphore -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSemaphore(int n = 0); - ~QSemaphore(); - void acquire(int n = 1) /ReleaseGIL/; - bool tryAcquire(int n = 1); -%If (Qt_6_6_0 -) - bool tryAcquire(int n, QDeadlineTimer timeout) /ReleaseGIL/; -%End - bool tryAcquire(int n, int timeout) /ReleaseGIL/; - void release(int n = 1); - int available() const; - -private: - QSemaphore(const QSemaphore &); -}; - -class QSemaphoreReleaser /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QSemaphoreReleaser(); - QSemaphoreReleaser(QSemaphore *sem, int n = 1); - ~QSemaphoreReleaser(); - void swap(QSemaphoreReleaser &other); - QSemaphore *semaphore() const; - QSemaphore *cancel(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsequentialanimationgroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsequentialanimationgroup.sip deleted file mode 100644 index 5888ad3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsequentialanimationgroup.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qsequentialanimationgroup.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSequentialAnimationGroup : public QAnimationGroup -{ -%TypeHeaderCode -#include -%End - -public: - QSequentialAnimationGroup(QObject *parent /TransferThis/ = 0); - virtual ~QSequentialAnimationGroup(); - QPauseAnimation *addPause(int msecs); - QPauseAnimation *insertPause(int index, int msecs); - QAbstractAnimation *currentAnimation() const; - virtual int duration() const; - -signals: - void currentAnimationChanged(QAbstractAnimation *current); - -protected: - virtual bool event(QEvent *event); - virtual void updateCurrentTime(int); - virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - virtual void updateDirection(QAbstractAnimation::Direction direction); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsettings.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsettings.sip deleted file mode 100644 index f014e6c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsettings.sip +++ /dev/null @@ -1,153 +0,0 @@ -// qsettings.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSettings : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Status - { - NoError, - AccessError, - FormatError, - }; - - enum Format - { - NativeFormat, - IniFormat, - InvalidFormat, - }; - - enum Scope - { - UserScope, - SystemScope, - }; - - QSettings(const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSettings(const QString &fileName, QSettings::Format format, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSettings(QSettings::Scope scope, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - explicit QSettings(QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - virtual ~QSettings() /ReleaseGIL/; - void clear() /ReleaseGIL/; - void sync() /ReleaseGIL/; - QSettings::Status status() const; -%If (Qt_6_4_0 -) - void beginGroup(QAnyStringView prefix); -%End -%If (- Qt_6_4_0) - void beginGroup(const QString &prefix); -%End - void endGroup(); - QString group() const; -%If (Qt_6_4_0 -) - int beginReadArray(QAnyStringView prefix); -%End -%If (- Qt_6_4_0) - int beginReadArray(const QString &prefix); -%End -%If (Qt_6_4_0 -) - void beginWriteArray(QAnyStringView prefix, int size = -1); -%End -%If (- Qt_6_4_0) - void beginWriteArray(const QString &prefix, int size = -1); -%End - void endArray(); - void setArrayIndex(int i); - QStringList allKeys() const /ReleaseGIL/; - QStringList childKeys() const /ReleaseGIL/; - QStringList childGroups() const /ReleaseGIL/; - bool isWritable() const; -%If (Qt_6_4_0 -) - void setValue(QAnyStringView key, const QVariant &value) /ReleaseGIL/; -%End -%If (- Qt_6_4_0) - void setValue(const QString &key, const QVariant &value) /ReleaseGIL/; -%End -%If (Qt_6_4_0 -) - SIP_PYOBJECT value(const QAnyStringView &key, const QVariant &defaultValue = QVariant(), SIP_PYOBJECT type /TypeHint="type", TypeHintValue="None"/ = 0) const /ReleaseGIL/; -%MethodCode - QVariant value; - - // QSettings has an internal mutex so release the GIL to avoid the possibility - // of deadlocks. - Py_BEGIN_ALLOW_THREADS - value = sipCpp->value(*a0, *a1); - Py_END_ALLOW_THREADS - - sipRes = pyqt6_from_qvariant_by_type(value, a2); - - sipIsErr = !sipRes; -%End - -%End -%If (- Qt_6_4_0) - SIP_PYOBJECT value(const QString &key, const QVariant &defaultValue = QVariant(), SIP_PYOBJECT type /TypeHint="type", TypeHintValue="None"/ = 0) const /ReleaseGIL/; -%MethodCode - QVariant value; - - // QSettings has an internal mutex so release the GIL to avoid the possibility - // of deadlocks. - Py_BEGIN_ALLOW_THREADS - value = sipCpp->value(*a0, *a1); - Py_END_ALLOW_THREADS - - sipRes = pyqt6_from_qvariant_by_type(value, a2); - - sipIsErr = !sipRes; -%End - -%End -%If (Qt_6_4_0 -) - void remove(QAnyStringView key) /ReleaseGIL/; -%End -%If (- Qt_6_4_0) - void remove(const QString &key) /ReleaseGIL/; -%End -%If (Qt_6_4_0 -) - bool contains(QAnyStringView key) const /ReleaseGIL/; -%End -%If (- Qt_6_4_0) - bool contains(const QString &key) const /ReleaseGIL/; -%End - void setFallbacksEnabled(bool b); - bool fallbacksEnabled() const; - QString fileName() const; - static void setPath(QSettings::Format format, QSettings::Scope scope, const QString &path) /ReleaseGIL/; - QSettings::Format format() const; - QSettings::Scope scope() const; - QString organizationName() const; - QString applicationName() const; - static void setDefaultFormat(QSettings::Format format); - static QSettings::Format defaultFormat(); - bool isAtomicSyncRequired() const; - void setAtomicSyncRequired(bool enable); - -protected: - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsharedmemory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsharedmemory.sip deleted file mode 100644 index 5401cd8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsharedmemory.sip +++ /dev/null @@ -1,98 +0,0 @@ -// qsharedmemory.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSharedMemory : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum AccessMode - { - ReadOnly, - ReadWrite, - }; - - enum SharedMemoryError - { - NoError, - PermissionDenied, - InvalidSize, - KeyError, - AlreadyExists, - NotFound, - LockError, - OutOfResources, - UnknownError, - }; - - QSharedMemory(QObject *parent /TransferThis/ = 0); -%If (Qt_6_6_0 -) - QSharedMemory(const QNativeIpcKey &key, QObject *parent /TransferThis/ = 0); -%End - QSharedMemory(const QString &key, QObject *parent /TransferThis/ = 0); - virtual ~QSharedMemory(); - void setKey(const QString &key); - QString key() const; - bool create(qsizetype size, QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite); - qsizetype size() const; - bool attach(QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite); - bool isAttached() const; - bool detach(); - SIP_PYOBJECT data() /TypeHint="PyQt6.sip.voidptr"/; -%MethodCode - sipRes = sipConvertFromVoidPtrAndSize(sipCpp->data(), sipCpp->size()); -%End - - SIP_PYOBJECT constData() const /TypeHint="PyQt6.sip.voidptr"/; -%MethodCode - sipRes = sipConvertFromConstVoidPtrAndSize(sipCpp->constData(), sipCpp->size()); -%End - - bool lock(); - bool unlock(); - QSharedMemory::SharedMemoryError error() const; - QString errorString() const; -%If (Qt_6_6_0 -) - void setNativeKey(const QNativeIpcKey &key); -%End -%If (Qt_6_6_0 -) - void setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs()); -%End -%If (- Qt_6_6_0) - void setNativeKey(const QString &key); -%End - QString nativeKey() const; -%If (Qt_6_6_0 -) - QNativeIpcKey nativeIpcKey() const; -%End -%If (Qt_6_6_0 -) - static bool isKeyTypeSupported(QNativeIpcKey::Type type); -%End -%If (Qt_6_6_0 -) - static QNativeIpcKey platformSafeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::DefaultTypeForOs); -%End -%If (Qt_6_6_0 -) - static QNativeIpcKey legacyNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs()); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsignalmapper.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsignalmapper.sip deleted file mode 100644 index ca0a433..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsignalmapper.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qsignalmapper.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSignalMapper : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSignalMapper(QObject *parent /TransferThis/ = 0); - virtual ~QSignalMapper(); - void setMapping(QObject *sender, int id); - void setMapping(QObject *sender, const QString &text); - void setMapping(QObject *sender, QObject *object); - void removeMappings(QObject *sender); - QObject *mapping(int id) const; - QObject *mapping(const QString &text) const; - QObject *mapping(QObject *object) const; - -signals: - void mappedInt(int); - void mappedString(const QString &); - void mappedObject(QObject *); - -public slots: - void map(); - void map(QObject *sender); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsize.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsize.sip deleted file mode 100644 index b006fff..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsize.sip +++ /dev/null @@ -1,166 +0,0 @@ -// qsize.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSize -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("ii", sipCpp->width(), sipCpp->height()); -%End - -public: - void transpose(); - void scale(const QSize &s, Qt::AspectRatioMode mode); - QSize(); - QSize(int w, int h); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QSize()"); - } - else - { - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QSize(%i, %i)", sipCpp->width(), sipCpp->height()); - } -%End - - bool isNull() const; - bool isEmpty() const; - bool isValid() const; - int __bool__() const; -%MethodCode - sipRes = sipCpp->isValid(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - int width() const; - int height() const; - void setWidth(int w); - void setHeight(int h); - void scale(int w, int h, Qt::AspectRatioMode mode); - QSize &operator+=(const QSize &s); - QSize &operator-=(const QSize &s); - QSize &operator*=(qreal c); - QSize &operator/=(qreal c); - QSize expandedTo(const QSize &otherSize) const; - QSize boundedTo(const QSize &otherSize) const; - QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const; - QSize scaled(int w, int h, Qt::AspectRatioMode mode) const; - QSize transposed() const; - QSize grownBy(QMargins m) const; - QSize shrunkBy(QMargins m) const; -%If (Qt_6_4_0 -) - QSizeF toSizeF() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QSize &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QSize & /Constrained/) /ReleaseGIL/; -bool operator==(const QSize &s1, const QSize &s2); -bool operator!=(const QSize &s1, const QSize &s2); -QSize operator+(const QSize &s1, const QSize &s2); -QSize operator-(const QSize &s1, const QSize &s2); -QSize operator*(const QSize &s, qreal c); -QSize operator*(qreal c, const QSize &s); -QSize operator/(const QSize &s, qreal c); - -class QSizeF -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("dd", sipCpp->width(), sipCpp->height()); -%End - -public: - void transpose(); - void scale(const QSizeF &s, Qt::AspectRatioMode mode); - QSizeF(); - QSizeF(const QSize &sz); - QSizeF(qreal w, qreal h); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - if (sipCpp->isNull()) - { - sipRes = PyUnicode_FromString("PyQt6.QtCore.QSizeF()"); - } - else - { - PyObject *w = PyFloat_FromDouble(sipCpp->width()); - PyObject *h = PyFloat_FromDouble(sipCpp->height()); - - if (w && h) - sipRes = PyUnicode_FromFormat( - "PyQt6.QtCore.QSizeF(%R, %R)", w, h); - - Py_XDECREF(w); - Py_XDECREF(h); - } -%End - - bool isNull() const; - bool isEmpty() const; - bool isValid() const; - int __bool__() const; -%MethodCode - sipRes = sipCpp->isValid(); -%End - - qreal width() const; - qreal height() const; - void setWidth(qreal w); - void setHeight(qreal h); - void scale(qreal w, qreal h, Qt::AspectRatioMode mode); - QSizeF &operator+=(const QSizeF &s); - QSizeF &operator-=(const QSizeF &s); - QSizeF &operator*=(qreal c); - QSizeF &operator/=(qreal c); - QSizeF expandedTo(const QSizeF &otherSize) const; - QSizeF boundedTo(const QSizeF &otherSize) const; - QSize toSize() const; - QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const; - QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const; - QSizeF transposed() const; - QSizeF grownBy(QMarginsF m) const; - QSizeF shrunkBy(QMarginsF m) const; -}; - -QDataStream &operator<<(QDataStream &, const QSizeF &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QSizeF & /Constrained/) /ReleaseGIL/; -bool operator==(const QSizeF &s1, const QSizeF &s2); -bool operator!=(const QSizeF &s1, const QSizeF &s2); -QSizeF operator+(const QSizeF &s1, const QSizeF &s2); -QSizeF operator-(const QSizeF &s1, const QSizeF &s2); -QSizeF operator*(const QSizeF &s, qreal c); -QSizeF operator*(qreal c, const QSizeF &s); -QSizeF operator/(const QSizeF &s, qreal c); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsocketnotifier.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsocketnotifier.sip deleted file mode 100644 index c0189f8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsocketnotifier.sip +++ /dev/null @@ -1,58 +0,0 @@ -// qsocketnotifier.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSocketNotifier : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - Read, - Write, - Exception, - }; - -%If (Qt_6_1_0 -) - QSocketNotifier(QSocketNotifier::Type, QObject *parent /TransferThis/ = 0); -%End - QSocketNotifier(qintptr socket, QSocketNotifier::Type, QObject *parent /TransferThis/ = 0); - virtual ~QSocketNotifier(); - qintptr socket() const; - QSocketNotifier::Type type() const; - bool isEnabled() const; - void setEnabled(bool); -%If (Qt_6_1_0 -) - void setSocket(qintptr socket); -%End -%If (Qt_6_1_0 -) - bool isValid() const; -%End - -signals: - void activated(int socket); - -protected: - virtual bool event(QEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsortfilterproxymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsortfilterproxymodel.sip deleted file mode 100644 index 3cd852a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsortfilterproxymodel.sip +++ /dev/null @@ -1,119 +0,0 @@ -// qsortfilterproxymodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSortFilterProxyModel : public QAbstractProxyModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSortFilterProxyModel(QObject *parent /TransferThis/ = 0); - virtual ~QSortFilterProxyModel(); - virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); - virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const; - virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const; - QRegularExpression filterRegularExpression() const; - int filterKeyColumn() const; - void setFilterKeyColumn(int column); - Qt::CaseSensitivity filterCaseSensitivity() const; - void setFilterCaseSensitivity(Qt::CaseSensitivity cs); - -public slots: - void invalidate(); - void setFilterFixedString(const QString &pattern); - void setFilterRegularExpression(const QRegularExpression ®ularExpression); - void setFilterRegularExpression(const QString &pattern); - void setFilterWildcard(const QString &pattern); - -protected: - virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; - virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const; - virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; - -public: - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex parent(const QModelIndex &child) const; - QObject *parent() const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual void fetchMore(const QModelIndex &parent); - virtual bool canFetchMore(const QModelIndex &parent) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual QModelIndex buddy(const QModelIndex &index) const; - virtual QSize span(const QModelIndex &index) const; - virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap)) const; - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - Qt::CaseSensitivity sortCaseSensitivity() const; - void setSortCaseSensitivity(Qt::CaseSensitivity cs); - bool dynamicSortFilter() const; - void setDynamicSortFilter(bool enable); - int sortRole() const; - void setSortRole(int role); - int sortColumn() const; - Qt::SortOrder sortOrder() const; - int filterRole() const; - void setFilterRole(int role); - virtual QStringList mimeTypes() const; - virtual Qt::DropActions supportedDropActions() const; - bool isSortLocaleAware() const; - void setSortLocaleAware(bool on); - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - bool isRecursiveFilteringEnabled() const; - void setRecursiveFilteringEnabled(bool recursive); - -protected: - void invalidateFilter(); - -signals: - void dynamicSortFilterChanged(bool dynamicSortFilter); - void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity); - void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity); - void sortLocaleAwareChanged(bool sortLocaleAware); - void sortRoleChanged(int sortRole); - void filterRoleChanged(int filterRole); - void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled); - -public: - bool autoAcceptChildRows() const; - void setAutoAcceptChildRows(bool accept); - -protected: - void invalidateRowsFilter(); - void invalidateColumnsFilter(); - -signals: - void autoAcceptChildRowsChanged(bool autoAcceptChildRows); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstandardpaths.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstandardpaths.sip deleted file mode 100644 index 2c2f634..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstandardpaths.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qstandardpaths.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStandardPaths -{ -%TypeHeaderCode -#include -%End - -public: - enum StandardLocation - { - DesktopLocation, - DocumentsLocation, - FontsLocation, - ApplicationsLocation, - MusicLocation, - MoviesLocation, - PicturesLocation, - TempLocation, - HomeLocation, - CacheLocation, - GenericDataLocation, - RuntimeLocation, - ConfigLocation, - DownloadLocation, - GenericCacheLocation, - GenericConfigLocation, - AppDataLocation, - AppLocalDataLocation, - AppConfigLocation, -%If (Qt_6_4_0 -) - PublicShareLocation, -%End -%If (Qt_6_4_0 -) - TemplatesLocation, -%End -%If (Qt_6_7_0 -) - StateLocation, -%End -%If (Qt_6_7_0 -) - GenericStateLocation, -%End - }; - - static QString writableLocation(QStandardPaths::StandardLocation type); - static QStringList standardLocations(QStandardPaths::StandardLocation type); - - enum LocateOption /BaseType=Flag/ - { - LocateFile, - LocateDirectory, - }; - - typedef QFlags LocateOptions; - static QString locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); - static QStringList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); - static QString displayName(QStandardPaths::StandardLocation type); - static QString findExecutable(const QString &executableName, const QStringList &paths = QStringList()); - static void setTestModeEnabled(bool testMode); - -private: - QStandardPaths(); - ~QStandardPaths(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstorageinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstorageinfo.sip deleted file mode 100644 index bc6f2c7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstorageinfo.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qstorageinfo.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStorageInfo -{ -%TypeHeaderCode -#include -%End - -public: - QStorageInfo(); - explicit QStorageInfo(const QString &path); - explicit QStorageInfo(const QDir &dir); - QStorageInfo(const QStorageInfo &other); - ~QStorageInfo(); - void swap(QStorageInfo &other /Constrained/); - void setPath(const QString &path); - QString rootPath() const; - QByteArray device() const; - QByteArray fileSystemType() const; - QString name() const; - QString displayName() const; - qint64 bytesTotal() const; - qint64 bytesFree() const; - qint64 bytesAvailable() const; - bool isReadOnly() const; - bool isReady() const; - bool isValid() const; - void refresh(); - static QList mountedVolumes(); - static QStorageInfo root(); - bool isRoot() const; - int blockSize() const; - QByteArray subvolume() const; -}; - -bool operator==(const QStorageInfo &first, const QStorageInfo &second); -bool operator!=(const QStorageInfo &first, const QStorageInfo &second); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstring.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstring.sip deleted file mode 100644 index f04f7da..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstring.sip +++ /dev/null @@ -1,47 +0,0 @@ -// This is the SIP interface definition for the QString mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QString /AllowNone, TypeHintIn="Optional[str]", TypeHintOut="str", TypeHintValue="''"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) - return (sipPy == Py_None || PyUnicode_Check(sipPy)); - -if (sipPy == Py_None) -{ - // None is the only way to create a null (as opposed to empty) QString. - *sipCppPtr = new QString(); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = new QString(qpycore_PyObject_AsQString(sipPy)); - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode - return qpycore_PyObject_FromQString(*sipCpp); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter.sip deleted file mode 100644 index 43ffe8f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter.sip +++ /dev/null @@ -1,113 +0,0 @@ -// qstringconverter.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (- Qt_6_4_0) - -class QStringConverterBase -{ -%TypeHeaderCode -#include -%End - -public: - enum class Flag /BaseType=Flag/ - { - Default, - Stateless, - ConvertInvalidToNull, - WriteBom, - ConvertInitialBom, - }; - - typedef QFlags Flags; -}; - -%End -%If (- Qt_6_4_0) - -class QStringConverter : public QStringConverterBase -{ -%TypeHeaderCode -#include -%End - -public: - enum Encoding - { - Utf8, - Utf16, - Utf16LE, - Utf16BE, - Utf32, - Utf32LE, - Utf32BE, - Latin1, - System, - }; - -protected: - QStringConverter(); - QStringConverter(QStringConverter::Encoding encoding, QStringConverterBase::Flags f); - QStringConverter(const char *name, QStringConverterBase::Flags f); - -public: - bool isValid() const; - void resetState(); - bool hasError() const; - const char *name() const; - -private: - QStringConverter(const QStringConverter &); -}; - -%End - -class QStringEncoder : public QStringConverter -{ -%TypeHeaderCode -#include -%End - -public: - QStringEncoder(); - QStringEncoder(QStringConverter::Encoding encoding, QStringConverterBase::Flags flags = QStringConverterBase::Flag::Default); - QStringEncoder(const char *name, QStringConverterBase::Flags flags = QStringConverterBase::Flag::Default); - QByteArray operator()(QStringView in) [QStringEncoder::DecodedData (QStringView in)]; - QByteArray encode(QStringView in) [QStringEncoder::DecodedData (QStringView in)]; -}; - -class QStringDecoder : public QStringConverter -{ -%TypeHeaderCode -#include -%End - -public: - QStringDecoder(QStringConverter::Encoding encoding, QStringConverterBase::Flags flags = QStringConverterBase::Flag::Default); - QStringDecoder(); - QStringDecoder(const char *name, QStringConverterBase::Flags flags = QStringConverterBase::Flag::Default); - QString operator()(QByteArrayView ba) [QStringDecoder::EncodedData (QByteArrayView ba)]; - QString decode(QByteArrayView ba) [QStringDecoder::EncodedData (QByteArrayView ba)]; -%If (Qt_6_4_0 -) - static QStringDecoder decoderForHtml(QByteArrayView data); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter_base.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter_base.sip deleted file mode 100644 index acd7ea2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringconverter_base.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qstringconverter_base.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_4_0 -) - -class QStringConverterBase -{ -%TypeHeaderCode -#include -%End - -public: - enum class Flag /BaseType=Flag/ - { - Default, - Stateless, - ConvertInvalidToNull, - WriteBom, - ConvertInitialBom, - UsesIcu, - }; - - typedef QFlags Flags; - -protected: - ~QStringConverterBase(); -}; - -%End -%If (Qt_6_4_0 -) - -class QStringConverter : public QStringConverterBase -{ -%TypeHeaderCode -#include -%End - -public: - enum Encoding - { - Utf8, - Utf16, - Utf16LE, - Utf16BE, - Utf32, - Utf32LE, - Utf32BE, - Latin1, - System, - }; - -protected: - QStringConverter(); - QStringConverter(QStringConverter::Encoding encoding, QStringConverterBase::Flags f); - QStringConverter(const char *name, QStringConverterBase::Flags f); - ~QStringConverter(); - -public: - bool isValid() const; - void resetState(); - bool hasError() const; - const char *name() const; - static const char *nameForEncoding(QStringConverter::Encoding e); -%If (Qt_6_7_0 -) - static QStringList availableCodecs(); -%End - -private: - QStringConverter(const QStringConverter &); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlist.sip deleted file mode 100644 index 7173233..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlist.sip +++ /dev/null @@ -1,124 +0,0 @@ -// This is the SIP interface definition for the QStringList mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QStringList - /TypeHintIn="Iterable[QString]", TypeHintOut="List[QString]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - QString *t = new QString(sipCpp->at(i)); - PyObject *tobj = sipConvertFromNewType(t, sipType_QString, - sipTransferObj); - - if (!tobj) - { - delete t; - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, tobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QStringList *ql = new QStringList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int state; - QString *t = reinterpret_cast( - sipForceConvertToType(itm, sipType_QString, sipTransferObj, - SIP_NOT_NONE, &state, sipIsErr)); - - if (*sipIsErr) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'str' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - - return 0; - } - - ql->append(*t); - - sipReleaseType(t, sipType_QString, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlistmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlistmodel.sip deleted file mode 100644 index 7e23376..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringlistmodel.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qstringlistmodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStringListModel : public QAbstractListModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStringListModel(QObject *parent /TransferThis/ = 0); - QStringListModel(const QStringList &strings, QObject *parent /TransferThis/ = 0); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - QStringList stringList() const; - void setStringList(const QStringList &strings); - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - virtual Qt::DropActions supportedDropActions() const; - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); - virtual QMap itemData(const QModelIndex &index) const; - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual bool clearItemData(const QModelIndex &index); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringview.sip deleted file mode 100644 index 3bbde4d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qstringview.sip +++ /dev/null @@ -1,48 +0,0 @@ -// This is the SIP interface definition for the QStringView mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QStringView /TypeHint="str",TypeHintValue="''"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) - return PyUnicode_Check(sipPy); - -// TODO: consider creating the view directly from the Python object if it is -// using UTF-16. -QString *qs = new QString(qpycore_PyObject_AsQString(sipPy)); -*sipCppPtr = new QStringView(*qs); -*sipUserStatePtr = qs; - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode - return qpycore_PyObject_FromQString(sipCpp->toString()); -%End - -%ReleaseCode -delete sipCpp; -delete reinterpret_cast(sipUserState); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsysinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsysinfo.sip deleted file mode 100644 index 09f57e8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsysinfo.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qsysinfo.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSysInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum Sizes - { - WordSize, - }; - - enum Endian - { - BigEndian, - LittleEndian, - ByteOrder, - }; - - static QString buildCpuArchitecture(); - static QString currentCpuArchitecture(); - static QString buildAbi(); - static QString kernelType(); - static QString kernelVersion(); - static QString productType(); - static QString productVersion(); - static QString prettyProductName(); - static QString machineHostName(); - static QByteArray machineUniqueId(); - static QByteArray bootUniqueId(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsystemsemaphore.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsystemsemaphore.sip deleted file mode 100644 index 20f97e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qsystemsemaphore.sip +++ /dev/null @@ -1,79 +0,0 @@ -// qsystemsemaphore.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSystemSemaphore -{ -%TypeHeaderCode -#include -%End - -public: - enum AccessMode - { - Open, - Create, - }; - - enum SystemSemaphoreError - { - NoError, - PermissionDenied, - KeyError, - AlreadyExists, - NotFound, - OutOfResources, - UnknownError, - }; - -%If (Qt_6_6_0 -) - QSystemSemaphore(const QNativeIpcKey &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); -%End - QSystemSemaphore(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); - ~QSystemSemaphore(); - void setKey(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); - QString key() const; - bool acquire(); - bool release(int n = 1); - QSystemSemaphore::SystemSemaphoreError error() const; - QString errorString() const; -%If (Qt_6_6_0 -) - void setNativeKey(const QNativeIpcKey &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); -%End -%If (Qt_6_6_0 -) - void setNativeKey(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs()); -%End -%If (Qt_6_6_0 -) - QNativeIpcKey nativeIpcKey() const; -%End -%If (Qt_6_6_0 -) - static bool isKeyTypeSupported(QNativeIpcKey::Type type); -%End -%If (Qt_6_6_0 -) - static QNativeIpcKey platformSafeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::DefaultTypeForOs); -%End -%If (Qt_6_6_0 -) - static QNativeIpcKey legacyNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs()); -%End - -private: - QSystemSemaphore(const QSystemSemaphore &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporarydir.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporarydir.sip deleted file mode 100644 index c6b0f3f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporarydir.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qtemporarydir.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTemporaryDir -{ -%TypeHeaderCode -#include -%End - -public: - QTemporaryDir(); - explicit QTemporaryDir(const QString &templateName); - ~QTemporaryDir(); - bool isValid() const; - bool autoRemove() const; - void setAutoRemove(bool b); - bool remove(); - QString path() const; - QString errorString() const; - QString filePath(const QString &fileName) const; -%If (Qt_6_4_0 -) - void swap(QTemporaryDir &other); -%End - -private: - QTemporaryDir(const QTemporaryDir &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporaryfile.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporaryfile.sip deleted file mode 100644 index f734f40..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtemporaryfile.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qtemporaryfile.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTemporaryFile : public QFile -{ -%TypeHeaderCode -#include -%End - -public: - QTemporaryFile(); - explicit QTemporaryFile(const QString &templateName); - explicit QTemporaryFile(QObject *parent /TransferThis/); - QTemporaryFile(const QString &templateName, QObject *parent /TransferThis/); - virtual ~QTemporaryFile(); - bool autoRemove() const; - void setAutoRemove(bool b); - bool open() /ReleaseGIL/; - virtual QString fileName() const; - QString fileTemplate() const; - void setFileTemplate(const QString &name); - static QTemporaryFile *createNativeFile(const QString &fileName) /Factory,ReleaseGIL/; - static QTemporaryFile *createNativeFile(QFile &file) /Factory,ReleaseGIL/; - bool rename(const QString &newName); - -protected: - virtual bool open(QIODeviceBase::OpenMode flags) /ReleaseGIL/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtenvironmentvariables.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtenvironmentvariables.sip deleted file mode 100644 index 593da35..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtenvironmentvariables.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qtenvironmentvariables.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) -%ModuleCode -#include -%End -%End - -%If (Qt_6_5_0 -) -QString qEnvironmentVariable(const char *varName, const QString &defaultValue); -%End -%If (Qt_6_5_0 -) -QString qEnvironmentVariable(const char *varName); -%End -%If (Qt_6_5_0 -) -bool qEnvironmentVariableIsEmpty(const char *varName); -%End -%If (Qt_6_5_0 -) -bool qEnvironmentVariableIsSet(const char *varName); -%End -%If (Qt_6_5_0 -) -int qEnvironmentVariableIntValue(const char *varName, bool *ok = 0); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextboundaryfinder.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextboundaryfinder.sip deleted file mode 100644 index 8eb890d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextboundaryfinder.sip +++ /dev/null @@ -1,65 +0,0 @@ -// qtextboundaryfinder.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextBoundaryFinder -{ -%TypeHeaderCode -#include -%End - -public: - enum BoundaryReason /BaseType=Flag/ - { - NotAtBoundary, - SoftHyphen, - BreakOpportunity, - StartOfItem, - EndOfItem, - MandatoryBreak, - }; - - typedef QFlags BoundaryReasons; - - enum BoundaryType - { - Grapheme, - Word, - Line, - Sentence, - }; - - QTextBoundaryFinder(); - QTextBoundaryFinder(const QTextBoundaryFinder &other); - QTextBoundaryFinder(QTextBoundaryFinder::BoundaryType type, const QString &string); - ~QTextBoundaryFinder(); - bool isValid() const; - QTextBoundaryFinder::BoundaryType type() const; - QString string() const; - void toStart(); - void toEnd(); - qsizetype position() const; - void setPosition(qsizetype position); - qsizetype toNextBoundary(); - qsizetype toPreviousBoundary(); - bool isAtBoundary() const; - QTextBoundaryFinder::BoundaryReasons boundaryReasons() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextstream.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextstream.sip deleted file mode 100644 index ccbd8ea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtextstream.sip +++ /dev/null @@ -1,177 +0,0 @@ -// qtextstream.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QTextStream : public QIODeviceBase -{ -%TypeHeaderCode -#include -%End - -public: - enum RealNumberNotation - { - SmartNotation, - FixedNotation, - ScientificNotation, - }; - - enum FieldAlignment - { - AlignLeft, - AlignRight, - AlignCenter, - AlignAccountingStyle, - }; - - enum Status - { - Ok, - ReadPastEnd, - ReadCorruptData, - WriteFailed, - }; - - enum NumberFlag /BaseType=Flag/ - { - ShowBase, - ForcePoint, - ForceSign, - UppercaseBase, - UppercaseDigits, - }; - - typedef QFlags NumberFlags; - QTextStream(); - explicit QTextStream(QIODevice *device); - QTextStream(QByteArray *array /Constrained/, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - virtual ~QTextStream(); - void setEncoding(QStringConverter::Encoding encoding); - QStringConverter::Encoding encoding() const; - void setAutoDetectUnicode(bool enabled); - bool autoDetectUnicode() const; - void setGenerateByteOrderMark(bool generate); - bool generateByteOrderMark() const; - void setLocale(const QLocale &locale); - QLocale locale() const; - void setDevice(QIODevice *device); - QIODevice *device() const; - QTextStream::Status status() const; - void setStatus(QTextStream::Status status); - void resetStatus(); - bool atEnd() const; - void reset(); - void flush() /ReleaseGIL/; - bool seek(qint64 pos); - qint64 pos() const; - void skipWhiteSpace(); - QString readLine(qint64 maxLength = 0) /ReleaseGIL/; - QString readAll() /ReleaseGIL/; - QString read(qint64 maxlen) /ReleaseGIL/; - void setFieldAlignment(QTextStream::FieldAlignment alignment); - QTextStream::FieldAlignment fieldAlignment() const; - void setPadChar(QChar ch); - QChar padChar() const; - void setFieldWidth(int width); - int fieldWidth() const; - void setNumberFlags(QTextStream::NumberFlags flags); - QTextStream::NumberFlags numberFlags() const; - void setIntegerBase(int base); - int integerBase() const; - void setRealNumberNotation(QTextStream::RealNumberNotation notation); - QTextStream::RealNumberNotation realNumberNotation() const; - void setRealNumberPrecision(int precision); - int realNumberPrecision() const; - QTextStream &operator>>(QByteArray &array /Constrained/); - QTextStream &operator<<(QStringView s); - QTextStream &operator<<(const QByteArray &array); - QTextStream &operator<<(double f /Constrained/); - QTextStream &operator<<(SIP_PYOBJECT i /TypeHint="int"/); -%MethodCode - qlonglong val = sipLong_AsLongLong(a1); - - if (!PyErr_Occurred()) - { - sipRes = &(*a0 << val); - } - else - { - // If it is positive then it might fit an unsigned long long. - - qulonglong uval = sipLong_AsUnsignedLongLong(a1); - - if (!PyErr_Occurred()) - { - sipRes = &(*a0 << uval); - } - else - { - sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) - ? sipErrorFail : sipErrorContinue); - } - } -%End - -private: - QTextStream(const QTextStream &); -}; - -class QTextStreamManipulator; -QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m); -QTextStreamManipulator qSetFieldWidth(int width); -QTextStreamManipulator qSetPadChar(QChar ch); -QTextStreamManipulator qSetRealNumberPrecision(int precision); - -namespace Qt -{ -%TypeHeaderCode -#include -%End - - QTextStream &bin(QTextStream &s); - QTextStream &oct(QTextStream &s); - QTextStream &dec(QTextStream &s); - QTextStream &hex(QTextStream &s); - QTextStream &showbase(QTextStream &s); - QTextStream &forcesign(QTextStream &s); - QTextStream &forcepoint(QTextStream &s); - QTextStream &noshowbase(QTextStream &s); - QTextStream &noforcesign(QTextStream &s); - QTextStream &noforcepoint(QTextStream &s); - QTextStream &uppercasebase(QTextStream &s); - QTextStream &uppercasedigits(QTextStream &s); - QTextStream &lowercasebase(QTextStream &s); - QTextStream &lowercasedigits(QTextStream &s); - QTextStream &fixed(QTextStream &s); - QTextStream &scientific(QTextStream &s); - QTextStream &left(QTextStream &s); - QTextStream &right(QTextStream &s); - QTextStream ¢er(QTextStream &s); - QTextStream &endl(QTextStream &s); - QTextStream &flush(QTextStream &s); - QTextStream &reset(QTextStream &s); - QTextStream &bom(QTextStream &s); - QTextStream &ws(QTextStream &s); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthread.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthread.sip deleted file mode 100644 index aa89cbe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthread.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qthread.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QThread : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - static QThread *currentThread(); - static Qt::HANDLE currentThreadId(); - static int idealThreadCount(); - static void yieldCurrentThread() /ReleaseGIL/; - explicit QThread(QObject *parent /TransferThis/ = 0); - virtual ~QThread(); - - enum Priority - { - IdlePriority, - LowestPriority, - LowPriority, - NormalPriority, - HighPriority, - HighestPriority, - TimeCriticalPriority, - InheritPriority, - }; - - bool isFinished() const; - bool isRunning() const; - void setPriority(QThread::Priority priority); - QThread::Priority priority() const; - void setStackSize(uint stackSize); - uint stackSize() const; - void exit(int returnCode = 0) /ReleaseGIL/; - -public slots: - void start(QThread::Priority priority = QThread::InheritPriority) /ReleaseGIL/; - void terminate(); - void quit(); - -public: - bool wait(QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever)) /ReleaseGIL/; - bool wait(unsigned long time) /ReleaseGIL/; - -signals: - void started(); - void finished(); - -protected: - virtual void run() /NewThread,ReleaseGIL/; - int exec() /ReleaseGIL/; - static void setTerminationEnabled(bool enabled = true); - -public: - virtual bool event(QEvent *event); - static void sleep(unsigned long) /ReleaseGIL/; - static void msleep(unsigned long) /ReleaseGIL/; - static void usleep(unsigned long) /ReleaseGIL/; - QAbstractEventDispatcher *eventDispatcher() const; - void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/); - void requestInterruption(); - bool isInterruptionRequested() const; - int loopLevel() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthreadpool.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthreadpool.sip deleted file mode 100644 index a34c3ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qthreadpool.sip +++ /dev/null @@ -1,177 +0,0 @@ -// qthreadpool.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QThreadPool : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QThreadPool(QObject *parent /TransferThis/ = 0); - virtual ~QThreadPool() /ReleaseGIL/; - static QThreadPool *globalInstance() /KeepReference/; - void start(QRunnable *runnable /GetWrapper/, int priority = 0) /ReleaseGIL/; -%MethodCode - // We have to handle the object ownership manually. - if (a0->autoDelete()) - sipTransferTo(a0Wrapper, sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipCpp->start(a0, a1); - Py_END_ALLOW_THREADS -%End - - void start(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/, int priority = 0) /ReleaseGIL/; -%MethodCode - Py_INCREF(a0); - - Py_BEGIN_ALLOW_THREADS - - sipCpp->start([a0]() { - SIP_BLOCK_THREADS - - PyObject *res; - - res = PyObject_CallObject(a0, NULL); - - Py_DECREF(a0); - - if (res) - Py_DECREF(res); - else - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS - }, a1); - - Py_END_ALLOW_THREADS -%End - - bool tryStart(QRunnable *runnable /GetWrapper/) /ReleaseGIL/; -%MethodCode - // We have to handle the object ownership manually. - if (a0->autoDelete()) - sipTransferTo(a0Wrapper, sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->tryStart(a0); - Py_END_ALLOW_THREADS -%End - - bool tryStart(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/) /ReleaseGIL/; -%MethodCode - Py_INCREF(a0); - - Py_BEGIN_ALLOW_THREADS - - sipRes = sipCpp->tryStart([a0]() { - SIP_BLOCK_THREADS - - PyObject *res; - - res = PyObject_CallObject(a0, NULL); - - Py_DECREF(a0); - - if (res) - Py_DECREF(res); - else - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS - }); - - Py_END_ALLOW_THREADS -%End - - bool tryTake(QRunnable *runnable /GetWrapper/) /ReleaseGIL/; -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->tryTake(a0); - Py_END_ALLOW_THREADS - - // We have to handle the object ownership manually. - if (sipRes) - sipTransferBack(a0Wrapper); -%End - - int expiryTimeout() const; - void setExpiryTimeout(int expiryTimeout); - int maxThreadCount() const; - void setMaxThreadCount(int maxThreadCount) /ReleaseGIL/; - int activeThreadCount() const /ReleaseGIL/; - void reserveThread() /ReleaseGIL/; - void releaseThread() /ReleaseGIL/; - bool waitForDone(int msecs = -1) /ReleaseGIL/; - void clear() /ReleaseGIL/; - void setStackSize(uint stackSize); - uint stackSize() const; - bool contains(const QThread *thread) const; -%If (Qt_6_2_0 -) - void setThreadPriority(QThread::Priority priority); -%End -%If (Qt_6_2_0 -) - QThread::Priority threadPriority() const; -%End -%If (Qt_6_3_0 -) - void startOnReservedThread(QRunnable *runnable /GetWrapper/) /ReleaseGIL/; -%MethodCode - // We have to handle the object ownership manually. - if (a0->autoDelete()) - sipTransferTo(a0Wrapper, sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipCpp->startOnReservedThread(a0); - Py_END_ALLOW_THREADS -%End - -%End -%If (Qt_6_3_0 -) - void startOnReservedThread(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/) /ReleaseGIL/; -%MethodCode - Py_INCREF(a0); - - Py_BEGIN_ALLOW_THREADS - - sipCpp->startOnReservedThread([a0]() { - SIP_BLOCK_THREADS - - PyObject *res; - - res = PyObject_CallObject(a0, NULL); - - Py_DECREF(a0); - - if (res) - Py_DECREF(res); - else - pyqt6_err_print(); - - SIP_UNBLOCK_THREADS - }); - - Py_END_ALLOW_THREADS -%End - -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimeline.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimeline.sip deleted file mode 100644 index d175335..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimeline.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qtimeline.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTimeLine : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Direction - { - Forward, - Backward, - }; - - enum State - { - NotRunning, - Paused, - Running, - }; - - QTimeLine(int duration = 1000, QObject *parent /TransferThis/ = 0); - virtual ~QTimeLine(); - QTimeLine::State state() const; - int loopCount() const; - void setLoopCount(int count); - QTimeLine::Direction direction() const; - void setDirection(QTimeLine::Direction direction); - int duration() const; - void setDuration(int duration); - int startFrame() const; - void setStartFrame(int frame); - int endFrame() const; - void setEndFrame(int frame); - void setFrameRange(int startFrame, int endFrame); - int updateInterval() const; - void setUpdateInterval(int interval); - int currentTime() const; - int currentFrame() const; - qreal currentValue() const; - int frameForTime(int msec) const; - virtual qreal valueForTime(int msec) const; - -public slots: - void resume(); - void setCurrentTime(int msec); - void setPaused(bool paused); - void start(); - void stop(); - void toggleDirection(); - -signals: - void finished(); - void frameChanged(int); - void stateChanged(QTimeLine::State newState); - void valueChanged(qreal x); - -protected: - virtual void timerEvent(QTimerEvent *event); - -public: - QEasingCurve easingCurve() const; - void setEasingCurve(const QEasingCurve &curve); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimer.sip deleted file mode 100644 index e284097..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimer.sip +++ /dev/null @@ -1,83 +0,0 @@ -// qtimer.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTimer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTimer(QObject *parent /TransferThis/ = 0); - virtual ~QTimer(); - bool isActive() const; - int timerId() const; - void setInterval(int msec); - int interval() const; - bool isSingleShot() const; - void setSingleShot(bool asingleShot); - static void singleShot(int msec, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_get_connection_parts(a1, 0, "()", true, &receiver, slot_signature)) == sipErrorNone) - { - QTimer::singleShot(a0, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - - static void singleShot(int msec, Qt::TimerType timerType, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_get_connection_parts(a2, 0, "()", true, &receiver, slot_signature)) == sipErrorNone) - { - QTimer::singleShot(a0, a1, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - -public slots: - void start(int msec); - void start(); - void stop(); - -signals: - void timeout(); - -protected: - virtual void timerEvent(QTimerEvent *); - -public: - void setTimerType(Qt::TimerType atype); - Qt::TimerType timerType() const; - int remainingTime() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimezone.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimezone.sip deleted file mode 100644 index f60d98f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtimezone.sip +++ /dev/null @@ -1,169 +0,0 @@ -// qtimezone.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTimeZone -{ -%TypeHeaderCode -#include -%End - -public: - enum TimeType - { - StandardTime, - DaylightTime, - GenericTime, - }; - - enum NameType - { - DefaultName, - LongName, - ShortName, - OffsetName, - }; - - struct OffsetData - { -%TypeHeaderCode -#include -%End - - QString abbreviation; - QDateTime atUtc; - int offsetFromUtc; - int standardTimeOffset; - int daylightTimeOffset; - }; - - typedef QList OffsetDataList; -%If (Qt_6_5_0 -) - QTimeZone(QTimeZone::Initialization spec); -%End -%If (Qt_6_2_0 -) - QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Territory territory = QLocale::AnyTerritory, const QString &comment = QString()); -%End -%If (- Qt_6_2_0) - QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Country country = QLocale::AnyCountry, const QString &comment = QString()); -%End - explicit QTimeZone(const QByteArray &ianaId); - explicit QTimeZone(int offsetSeconds); - QTimeZone(const QTimeZone &other); - QTimeZone(); - ~QTimeZone(); - void swap(QTimeZone &other /Constrained/); -%If (- Qt_6_7_0) - bool operator==(const QTimeZone &other) const; -%End -%If (- Qt_6_7_0) - bool operator!=(const QTimeZone &other) const; -%End - bool isValid() const; - QByteArray id() const; - QLocale::Country country() const; -%If (Qt_6_2_0 -) - QLocale::Territory territory() const; -%End - QString comment() const; - QString displayName(const QDateTime &atDateTime, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const; - QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const; - QString abbreviation(const QDateTime &atDateTime) const; - int offsetFromUtc(const QDateTime &atDateTime) const; - int standardTimeOffset(const QDateTime &atDateTime) const; - int daylightTimeOffset(const QDateTime &atDateTime) const; - bool hasDaylightTime() const; - bool isDaylightTime(const QDateTime &atDateTime) const; - QTimeZone::OffsetData offsetData(const QDateTime &forDateTime) const; - bool hasTransitions() const; - QTimeZone::OffsetData nextTransition(const QDateTime &afterDateTime) const; - QTimeZone::OffsetData previousTransition(const QDateTime &beforeDateTime) const; - QTimeZone::OffsetDataList transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const; - static QByteArray systemTimeZoneId(); - static bool isTimeZoneIdAvailable(const QByteArray &ianaId); -%If (Qt_6_2_0 -) - static QList availableTimeZoneIds(QLocale::Territory territory /Constrained/); -%End -%If (- Qt_6_2_0) - static QList availableTimeZoneIds(QLocale::Country country /Constrained/); -%End - static QList availableTimeZoneIds(int offsetSeconds); - static QList availableTimeZoneIds(); - static QByteArray ianaIdToWindowsId(const QByteArray &ianaId); - static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId); -%If (Qt_6_2_0 -) - static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Territory territory); -%End -%If (- Qt_6_2_0) - static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Country country); -%End - static QList windowsIdToIanaIds(const QByteArray &windowsId); -%If (Qt_6_2_0 -) - static QList windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Territory territory); -%End -%If (- Qt_6_2_0) - static QList windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Country country); -%End - static QTimeZone systemTimeZone(); - static QTimeZone utc(); -%If (Qt_6_5_0 -) - - enum Initialization - { - LocalTime, - UTC, - }; - -%End -%If (Qt_6_5_0 -) - static QTimeZone fromSecondsAheadOfUtc(int offset); -%End -%If (Qt_6_5_0 -) - Qt::TimeSpec timeSpec() const; -%End -%If (Qt_6_5_0 -) - int fixedSecondsAheadOfUtc() const; -%End -%If (Qt_6_5_0 -) - bool isUtcOrFixedOffset() const; -%End -%If (Qt_6_5_0 -) - static bool isUtcOrFixedOffset(Qt::TimeSpec spec); -%End -%If (Qt_6_5_0 -) - QTimeZone asBackendZone() const; -%End -%If (Qt_6_6_0 -) - static const int MinUtcOffsetSecs; -%End -%If (Qt_6_6_0 -) - static const int MaxUtcOffsetSecs; -%End -}; - -QDataStream &operator<<(QDataStream &ds, const QTimeZone &tz) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &ds, QTimeZone &tz /Constrained/) /ReleaseGIL/; -%If (Qt_6_7_0 -) -bool operator==(const QTimeZone &lhs, const QTimeZone &rhs); -%End -%If (Qt_6_7_0 -) -bool operator!=(const QTimeZone &lhs, const QTimeZone &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtipccommon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtipccommon.sip deleted file mode 100644 index 7c1dceb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtipccommon.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qtipccommon.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_6_0 -) - -class QNativeIpcKey -{ -%TypeHeaderCode -#include -%End - -public: - enum class Type - { - SystemV, - PosixRealtime, - Windows, - }; - - static const QNativeIpcKey::Type DefaultTypeForOs; - static QNativeIpcKey::Type legacyDefaultTypeForOs(); - QNativeIpcKey(); - explicit QNativeIpcKey(QNativeIpcKey::Type type); - QNativeIpcKey(const QString &k, QNativeIpcKey::Type type = QNativeIpcKey::DefaultTypeForOs); - QNativeIpcKey(const QNativeIpcKey &other); - ~QNativeIpcKey(); - void swap(QNativeIpcKey &other /Constrained/); - bool isEmpty() const; - bool isValid() const; - QNativeIpcKey::Type type() const; - void setType(QNativeIpcKey::Type type); - QString nativeKey() const; - void setNativeKey(const QString &newKey); - QString toString() const; - static QNativeIpcKey fromString(const QString &string); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_6_0 -) -bool operator==(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs); -%End -%If (Qt_6_6_0 -) -bool operator!=(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtranslator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtranslator.sip deleted file mode 100644 index 2c609b4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtranslator.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qtranslator.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTranslator : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTranslator(QObject *parent /TransferThis/ = 0); - virtual ~QTranslator(); - virtual QString translate(const char *context, const char *sourceText, const char *disambiguation = 0, int n = -1) const; - virtual bool isEmpty() const; - bool load(const QString &fileName, const QString &directory = QString(), const QString &searchDelimiters = QString(), const QString &suffix = QString()) /ReleaseGIL/; - bool load(const QLocale &locale, const QString &fileName, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) /ReleaseGIL/; - bool load(const uchar *data /Array/, int len /ArraySize/, const QString &directory = QString()) /PyName=loadFromData,ReleaseGIL/; - QString language() const; - QString filePath() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtransposeproxymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtransposeproxymodel.sip deleted file mode 100644 index ff8435e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtransposeproxymodel.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qtransposeproxymodel.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTransposeProxyModel : public QAbstractProxyModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTransposeProxyModel(QObject *parent /TransferThis/ = 0); - virtual ~QTransposeProxyModel(); - virtual void setSourceModel(QAbstractItemModel *newSourceModel /KeepReference/); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual QSize span(const QModelIndex &index) const; - virtual QMap itemData(const QModelIndex &index) const; - virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - virtual QModelIndex parent(const QModelIndex &index) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtversion.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtversion.sip deleted file mode 100644 index 937a664..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtversion.sip +++ /dev/null @@ -1,31 +0,0 @@ -// qtversion.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) -%ModuleCode -#include -%End -%End - -%If (Qt_6_5_0 -) -const char *qVersion(); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtyperevision.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtyperevision.sip deleted file mode 100644 index 94a7816..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtyperevision.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qtyperevision.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -class QTypeRevision -{ -%TypeHeaderCode -#include -%End - -public: - QTypeRevision(); - bool hasMajorVersion() const; - quint8 majorVersion() const; - bool hasMinorVersion() const; - quint8 minorVersion() const; - bool isValid() const; - unsigned short toEncodedVersion() const; -%MethodCode - sipRes = sipCpp->toEncodedVersion(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - static QTypeRevision fromEncodedVersion(int value); - static QTypeRevision zero(); -}; - -%End -%If (Qt_6_7_0 -) -bool operator==(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -bool operator!=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -bool operator<(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -bool operator>(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -bool operator<=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -bool operator>=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (Qt_6_7_0 -) -QDataStream &operator<<(QDataStream &out, const QTypeRevision &revision) /ReleaseGIL/; -%End -%If (Qt_6_7_0 -) -QDataStream &operator>>(QDataStream &in, QTypeRevision &revision /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtypes.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtypes.sip deleted file mode 100644 index ec91245..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qtypes.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qtypes.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) -typedef unsigned char uchar; -%End -%If (Qt_6_5_0 -) -typedef unsigned short ushort; -%End -%If (Qt_6_5_0 -) -typedef unsigned int uint; -%End -%If (Qt_6_5_0 -) -typedef unsigned long ulong; -%End -%If (Qt_6_5_0 -) -typedef signed char qint8 /PyInt/; -%End -%If (Qt_6_5_0 -) -typedef unsigned char quint8 /PyInt/; -%End -%If (Qt_6_5_0 -) -typedef short qint16; -%End -%If (Qt_6_5_0 -) -typedef unsigned short quint16; -%End -%If (Qt_6_5_0 -) -typedef int qint32; -%End -%If (Qt_6_5_0 -) -typedef unsigned int quint32; -%End -%If (Qt_6_5_0 -) -typedef long long qint64; -%End -%If (Qt_6_5_0 -) -typedef unsigned long long quint64; -%End -%If (Qt_6_5_0 -) -typedef qint64 qlonglong; -%End -%If (Qt_6_5_0 -) -typedef quint64 qulonglong; -%End -%If (Qt_6_5_0 -) -%If (PyQt_qreal_double) -typedef double qreal; -%End -%End -%If (Qt_6_5_0 -) -%If (!PyQt_qreal_double) -typedef float qreal; -%End -%End -%If (Qt_6_5_0 -) -typedef long long qsizetype; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurl.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurl.sip deleted file mode 100644 index 0936ffb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurl.sip +++ /dev/null @@ -1,192 +0,0 @@ -// qurl.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUrl -{ -%TypeHeaderCode -#include -%End - -%TypeCode -#include -%End - -public: - enum ParsingMode - { - TolerantMode, - StrictMode, - DecodedMode, - }; - - QUrl(); - QUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode); - QUrl(const QUrl ©); - ~QUrl(); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString()); - - if (uni) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QUrl(%R)", uni); - - Py_DECREF(uni); - } -%End - - enum UrlFormattingOption /BaseType=IntFlag/ - { - None, - RemoveScheme, - RemovePassword, - RemoveUserInfo, - RemovePort, - RemoveAuthority, - RemovePath, - RemoveQuery, - RemoveFragment, - PreferLocalFile, - StripTrailingSlash, - RemoveFilename, - NormalizePathSegments, - }; - - typedef QFlags FormattingOptions; - - enum ComponentFormattingOption /BaseType=IntFlag/ - { - PrettyDecoded, - EncodeSpaces, - EncodeUnicode, - EncodeDelimiters, - EncodeReserved, - DecodeReserved, - FullyEncoded, - FullyDecoded, - }; - - typedef QFlags ComponentFormattingOptions; - QString url(QUrl::FormattingOptions options = QUrl::FormattingOptions(QUrl::PrettyDecoded)) const; - void setUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode); - bool isValid() const; - bool isEmpty() const; - void clear(); - void setScheme(const QString &scheme); - QString scheme() const; - void setAuthority(const QString &authority, QUrl::ParsingMode mode = QUrl::TolerantMode); - QString authority(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - void setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = QUrl::TolerantMode); - QString userInfo(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - void setUserName(const QString &userName, QUrl::ParsingMode mode = QUrl::DecodedMode); - QString userName(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; - void setPassword(const QString &password, QUrl::ParsingMode mode = QUrl::DecodedMode); - QString password(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; - void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); - QString host(QUrl::ComponentFormattingOptions = QUrl::FullyDecoded) const; - void setPort(int port); - int port(int defaultPort = -1) const; - void setPath(const QString &path, QUrl::ParsingMode mode = QUrl::DecodedMode); - QString path(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; - void setFragment(const QString &fragment, QUrl::ParsingMode mode = QUrl::TolerantMode); - QString fragment(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - QUrl resolved(const QUrl &relative) const; - bool isRelative() const; - bool isParentOf(const QUrl &url) const; - static QUrl fromLocalFile(const QString &localfile); - QString toLocalFile() const; - QString toString(QUrl::FormattingOptions options = QUrl::FormattingOptions(QUrl::PrettyDecoded)) const; - QString toString(QUrl::ComponentFormattingOptions options) const; - QByteArray toEncoded(QUrl::FormattingOptions options = QUrl::FullyEncoded) const; - QByteArray toEncoded(QUrl::ComponentFormattingOptions options) const; -%If (Qt_6_7_0 -) - static QUrl fromEncoded(QByteArrayView input, QUrl::ParsingMode mode = QUrl::TolerantMode); -%End -%If (- Qt_6_7_0) - static QUrl fromEncoded(const QByteArray &u, QUrl::ParsingMode mode = QUrl::TolerantMode); -%End - void detach(); - bool isDetached() const; - bool operator<(const QUrl &url) const; - bool operator==(const QUrl &url) const; - bool operator!=(const QUrl &url) const; - static QString fromPercentEncoding(const QByteArray &); - static QByteArray toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray()); - bool hasQuery() const; - bool hasFragment() const; - QString errorString() const; -%If (Qt_6_3_0 -) - static QString fromAce(const QByteArray &domain, QUrl::AceProcessingOptions options = {}); -%End -%If (- Qt_6_3_0) - static QString fromAce(const QByteArray &); -%End -%If (Qt_6_3_0 -) - static QByteArray toAce(const QString &domain, QUrl::AceProcessingOptions options = {}); -%End -%If (- Qt_6_3_0) - static QByteArray toAce(const QString &); -%End - static QStringList idnWhitelist(); - static void setIdnWhitelist(const QStringList &); - static QUrl fromUserInput(const QString &userInput, const QString &workingDirectory = QString(), QUrl::UserInputResolutionOptions options = QUrl::DefaultResolution); - void swap(QUrl &other /Constrained/); - bool isLocalFile() const; - QString toDisplayString(QUrl::FormattingOptions options = QUrl::FormattingOptions(QUrl::PrettyDecoded)) const; - QString toDisplayString(QUrl::ComponentFormattingOptions options) const; - void setQuery(const QString &query, QUrl::ParsingMode mode = QUrl::TolerantMode); - void setQuery(const QUrlQuery &query); - QString query(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - static QStringList toStringList(const QList &uris, QUrl::FormattingOptions options = QUrl::FormattingOptions(QUrl::PrettyDecoded)); - static QList fromStringList(const QStringList &uris, QUrl::ParsingMode mode = QUrl::TolerantMode); - QUrl adjusted(QUrl::FormattingOptions options) const; - QString fileName(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; - bool matches(const QUrl &url, QUrl::FormattingOptions options) const; - - enum UserInputResolutionOption /BaseType=Flag/ - { - DefaultResolution, - AssumeLocalFile, - }; - - typedef QFlags UserInputResolutionOptions; -%If (Qt_6_3_0 -) - - enum AceProcessingOption /BaseType=Flag/ - { - IgnoreIDNWhitelist, - AceTransitionalProcessing, - }; - -%End -%If (Qt_6_3_0 -) - typedef QFlags AceProcessingOptions; -%End -}; - -QDataStream &operator<<(QDataStream &, const QUrl &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QUrl & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurlquery.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurlquery.sip deleted file mode 100644 index 39d370c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qurlquery.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qurlquery.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUrlQuery -{ -%TypeHeaderCode -#include -%End - -public: - QUrlQuery(); - explicit QUrlQuery(const QUrl &url); - explicit QUrlQuery(const QString &queryString); - QUrlQuery(const QUrlQuery &other); - ~QUrlQuery(); - bool operator==(const QUrlQuery &other) const; - bool operator!=(const QUrlQuery &other) const; - void swap(QUrlQuery &other /Constrained/); - bool isEmpty() const; - bool isDetached() const; - void clear(); - QString query(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - void setQuery(const QString &queryString); - QString toString(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - void setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter); - QChar queryValueDelimiter() const; - QChar queryPairDelimiter() const; - void setQueryItems(const QList> &query); - QList> queryItems(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - bool hasQueryItem(const QString &key) const; - void addQueryItem(const QString &key, const QString &value); - void removeQueryItem(const QString &key); - QString queryItemValue(const QString &key, QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - QStringList allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; - void removeAllQueryItems(const QString &key); - static QChar defaultQueryValueDelimiter(); -%MethodCode - sipRes = new QChar(QUrlQuery::defaultQueryValueDelimiter()); -%End - - static QChar defaultQueryPairDelimiter(); -%MethodCode - sipRes = new QChar(QUrlQuery::defaultQueryPairDelimiter()); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/quuid.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/quuid.sip deleted file mode 100644 index 1ca202b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/quuid.sip +++ /dev/null @@ -1,130 +0,0 @@ -// quuid.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUuid -{ -%TypeHeaderCode -#include -%End - -public: - enum Variant - { - VarUnknown, - NCS, - DCE, - Microsoft, - Reserved, - }; - - enum Version - { - VerUnknown, - Time, - EmbeddedPOSIX, - Md5, - Name, - Random, - Sha1, - }; - - enum StringFormat - { - WithBraces, - WithoutBraces, - Id128, - }; - - QUuid(); -%If (Qt_6_6_0 -) - QUuid(QUuid::Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian); -%End - QUuid(uint l, ushort w1, ushort w2, uchar b1 /PyInt/, uchar b2 /PyInt/, uchar b3 /PyInt/, uchar b4 /PyInt/, uchar b5 /PyInt/, uchar b6 /PyInt/, uchar b7 /PyInt/, uchar b8 /PyInt/); -%If (Qt_6_4_0 -) - explicit QUuid(QAnyStringView string); -%End -%If (- Qt_6_4_0) - explicit QUuid(const QString &); -%End -%If (- Qt_6_4_0) - explicit QUuid(const QByteArray &); -%End - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString()); - - if (uni) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtCore.QUuid(%R)", uni); - - Py_DECREF(uni); - } -%End - - QString toString(QUuid::StringFormat mode = QUuid::WithBraces) const; - bool isNull() const; - bool operator==(const QUuid &orig) const; - bool operator!=(const QUuid &orig) const; - bool operator<(const QUuid &other) const; - bool operator>(const QUuid &other) const; - static QUuid createUuid(); - static QUuid createUuidV3(const QUuid &ns, const QByteArray &baseData); - static QUuid createUuidV5(const QUuid &ns, const QByteArray &baseData); - static QUuid createUuidV3(const QUuid &ns, const QString &baseData); - static QUuid createUuidV5(const QUuid &ns, const QString &baseData); - QUuid::Variant variant() const; - QUuid::Version version() const; - QByteArray toByteArray(QUuid::StringFormat mode = QUuid::WithBraces) const; - QByteArray toRfc4122() const; -%If (Qt_6_3_0 -) - static QUuid fromRfc4122(QByteArrayView); -%End -%If (- Qt_6_3_0) - static QUuid fromRfc4122(const QByteArray &); -%End -%If (Qt_6_4_0 -) - static QUuid fromString(QAnyStringView string); -%End -%If (- Qt_6_4_0) - static QUuid fromString(QStringView string); -%End -%If (Qt_6_6_0 -) - - struct Id128Bytes - { -%TypeHeaderCode -#include -%End - }; - -%End -}; - -QDataStream &operator<<(QDataStream &, const QUuid & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QUuid & /Constrained/) /ReleaseGIL/; -bool operator<=(const QUuid &lhs, const QUuid &rhs); -bool operator>=(const QUuid &lhs, const QUuid &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariant.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariant.sip deleted file mode 100644 index 4a62247..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariant.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qvariant.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QVariant /AllowNone,TypeHint="Any",TypeHintValue="None"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (sipIsErr == NULL) - // We can convert everything to a QVariant. - return 1; - -// If it is already a QVariant then just return it. -if (Py_TYPE(sipPy) == sipTypeAsPyTypeObject(sipType_QVariant)) -{ - *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, - sipType_QVariant, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - - return 0; -} - -// Convert it to a QVariant. -QVariant var = qpycore_PyObject_AsQVariant(sipPy, sipIsErr); - -if (*sipIsErr) - return 0; - -*sipCppPtr = new QVariant(var); - -return sipGetState(sipTransferObj); -%End - -%ConvertFromTypeCode -return qpycore_PyObject_FromQVariant(*sipCpp); -%End - -public: - QVariant(); - QVariant(SIP_PYOBJECT obj); -%MethodCode - int is_err = 0; - QVariant var = qpycore_PyObject_AsQVariant(a0, &is_err); - - if (is_err) - sipCpp = 0; - else - sipCpp = new QVariant(var); -%End - - ~QVariant(); - SIP_PYOBJECT value() const; -%MethodCode - sipRes = qpycore_PyObject_FromQVariant(*sipCpp); -%End - - int userType() const; - const char *typeName() const; - bool canConvert(QMetaType targetType) const; - bool convert(QMetaType type); - bool isValid() const; - bool isNull() const; - void clear(); - void load(QDataStream &ds) /ReleaseGIL/; - void save(QDataStream &ds) const /ReleaseGIL/; - void swap(QVariant &other /Constrained/); - QMetaType metaType() const; - bool canView(QMetaType targetType) const; - int typeId() const; -}; - -QDataStream &operator>>(QDataStream &s, QVariant &p /Constrained/) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &s, const QVariant &p /Constrained/) /ReleaseGIL/; -bool operator==(const QVariant &a, const QVariant &b); -bool operator!=(const QVariant &a, const QVariant &b); -typedef QHash QVariantHash /TypeHint="Dict[QString, QVariant]"/; -typedef QList QVariantList /TypeHint="List[QVariant]"/; -typedef QMap QVariantMap /TypeHint="Dict[QString, QVariant]"/; -typedef std::pair QVariantPair /TypeHint="Tuple[QVariant, QVariant]"/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariantanimation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariantanimation.sip deleted file mode 100644 index 8bdaf36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qvariantanimation.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qvariantanimation.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QVariantAnimation : public QAbstractAnimation -{ -%TypeHeaderCode -#include -%End - -public: - typedef QList > KeyValues; - QVariantAnimation(QObject *parent /TransferThis/ = 0); - virtual ~QVariantAnimation(); - QVariant startValue() const; - void setStartValue(const QVariant &value); - QVariant endValue() const; - void setEndValue(const QVariant &value); - QVariant keyValueAt(qreal step) const; - void setKeyValueAt(qreal step, const QVariant &value); - QVariantAnimation::KeyValues keyValues() const; - void setKeyValues(const QVariantAnimation::KeyValues &values); - QVariant currentValue() const; - virtual int duration() const; - void setDuration(int msecs); - QEasingCurve easingCurve() const; - void setEasingCurve(const QEasingCurve &easing); - -signals: - void valueChanged(const QVariant &value); - -protected: - virtual bool event(QEvent *event); - virtual void updateCurrentTime(int); - virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - virtual void updateCurrentValue(const QVariant &value); - virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qversionnumber.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qversionnumber.sip deleted file mode 100644 index 12961af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qversionnumber.sip +++ /dev/null @@ -1,131 +0,0 @@ -// qversionnumber.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QVersionNumber -{ -%TypeHeaderCode -#include -%End - -public: - QVersionNumber(); - explicit QVersionNumber(const QList &seg); - explicit QVersionNumber(int maj); - QVersionNumber(int maj, int min); - QVersionNumber(int maj, int min, int mic); - bool isNull() const; - bool isNormalized() const; - int majorVersion() const; - int minorVersion() const; - int microVersion() const; - QVersionNumber normalized() const; - QList segments() const; -%If (Qt_6_4_0 -) - int segmentAt(qsizetype index) const; -%End -%If (- Qt_6_4_0) - int segmentAt(int index) const; -%End -%If (Qt_6_4_0 -) - qsizetype segmentCount() const; -%End -%If (- Qt_6_4_0) - int segmentCount() const; -%End - bool isPrefixOf(const QVersionNumber &other) const; - static int compare(const QVersionNumber &v1, const QVersionNumber &v2); - static QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2); - QString toString() const; -%If (Qt_6_4_0 -) - static QVersionNumber fromString(QAnyStringView string, qsizetype *suffixIndex = 0); -%End -%If (- Qt_6_4_0) - static QVersionNumber fromString(const QString &string, int *suffixIndex = 0); -%End - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -bool operator>(const QVersionNumber &lhs, const QVersionNumber &rhs); -bool operator>=(const QVersionNumber &lhs, const QVersionNumber &rhs); -bool operator<(const QVersionNumber &lhs, const QVersionNumber &rhs); -bool operator<=(const QVersionNumber &lhs, const QVersionNumber &rhs); -bool operator==(const QVersionNumber &lhs, const QVersionNumber &rhs); -bool operator!=(const QVersionNumber &lhs, const QVersionNumber &rhs); -QDataStream &operator<<(QDataStream &out, const QVersionNumber &version) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QVersionNumber &version /Constrained/) /ReleaseGIL/; -%If (- Qt_6_7_0) - -class QTypeRevision -{ -%TypeHeaderCode -#include -%End - -public: - QTypeRevision(); - bool hasMajorVersion() const; - quint8 majorVersion() const; - bool hasMinorVersion() const; - quint8 minorVersion() const; - bool isValid() const; - unsigned short toEncodedVersion() const; -%MethodCode - sipRes = sipCpp->toEncodedVersion(); -%End - - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - static QTypeRevision fromEncodedVersion(int value); - static QTypeRevision zero(); -}; - -%End -%If (- Qt_6_7_0) -bool operator>(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -bool operator>=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -bool operator<(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -bool operator<=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -bool operator==(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -bool operator!=(QTypeRevision lhs, QTypeRevision rhs); -%End -%If (- Qt_6_7_0) -QDataStream &operator<<(QDataStream &out, const QTypeRevision &revision) /ReleaseGIL/; -%End -%If (- Qt_6_7_0) -QDataStream &operator>>(QDataStream &in, QTypeRevision &revision /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwaitcondition.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwaitcondition.sip deleted file mode 100644 index 66602f7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwaitcondition.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qwaitcondition.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QWaitCondition -{ -%TypeHeaderCode -#include -%End - -public: - QWaitCondition(); - ~QWaitCondition(); - bool wait(QMutex *lockedMutex, QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever)) /ReleaseGIL/; - bool wait(QMutex *lockedMutex, unsigned long time) /ReleaseGIL/; - bool wait(QReadWriteLock *lockedReadWriteLock, QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever)) /ReleaseGIL/; - bool wait(QReadWriteLock *lockedReadWriteLock, unsigned long time) /ReleaseGIL/; - void wakeOne(); - void wakeAll(); - -private: - QWaitCondition(const QWaitCondition &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwineventnotifier.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwineventnotifier.sip deleted file mode 100644 index 2409c57..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qwineventnotifier.sip +++ /dev/null @@ -1,54 +0,0 @@ -// This is the SIP specification of the QWinEventNotifier class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Windows) - -// This hack is for the activated() signal. -typedef Qt::HANDLE HANDLE; - -class QWinEventNotifier: QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWinEventNotifier(QObject *parent /TransferThis/ = 0); - explicit QWinEventNotifier(Qt::HANDLE hEvent, QObject *parent /TransferThis/ = 0); - ~QWinEventNotifier(); - - Qt::HANDLE handle() const; - bool isEnabled() const; - void setHandle(Qt::HANDLE hEvent); - -public slots: - void setEnabled(bool enable); - -signals: - void activated(HANDLE hEvent); - -protected: - bool event(QEvent *e); - -private: - QWinEventNotifier(const QWinEventNotifier &); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qxmlstream.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qxmlstream.sip deleted file mode 100644 index 02eaca5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qxmlstream.sip +++ /dev/null @@ -1,560 +0,0 @@ -// qxmlstream.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QXmlStreamAttribute -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamAttribute(); - QXmlStreamAttribute(const QString &qualifiedName, const QString &value); - QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value); - QStringView namespaceUri() const; - QStringView name() const; - QStringView qualifiedName() const; - QStringView prefix() const; - QStringView value() const; - bool isDefault() const; - bool operator==(const QXmlStreamAttribute &other) const; - bool operator!=(const QXmlStreamAttribute &other) const; -}; - -class QXmlStreamNamespaceDeclaration -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamNamespaceDeclaration(); - QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri); - QStringView prefix() const; - QStringView namespaceUri() const; - bool operator==(const QXmlStreamNamespaceDeclaration &other) const; - bool operator!=(const QXmlStreamNamespaceDeclaration &other) const; -}; - -typedef QList QXmlStreamNamespaceDeclarations; - -class QXmlStreamNotationDeclaration -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamNotationDeclaration(); - QStringView name() const; - QStringView systemId() const; - QStringView publicId() const; - bool operator==(const QXmlStreamNotationDeclaration &other) const; - bool operator!=(const QXmlStreamNotationDeclaration &other) const; -}; - -typedef QList QXmlStreamNotationDeclarations; - -class QXmlStreamEntityDeclaration -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamEntityDeclaration(); - QStringView name() const; - QStringView notationName() const; - QStringView systemId() const; - QStringView publicId() const; - QStringView value() const; - bool operator==(const QXmlStreamEntityDeclaration &other) const; - bool operator!=(const QXmlStreamEntityDeclaration &other) const; -}; - -typedef QList QXmlStreamEntityDeclarations; - -class QXmlStreamEntityResolver -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QXmlStreamEntityResolver(); - virtual QString resolveUndeclaredEntity(const QString &name); -}; - -class QXmlStreamReader -{ -%TypeHeaderCode -#include -%End - -public: - enum TokenType - { - NoToken, - Invalid, - StartDocument, - EndDocument, - StartElement, - EndElement, - Characters, - Comment, - DTD, - EntityReference, - ProcessingInstruction, - }; - - QXmlStreamReader(); - explicit QXmlStreamReader(QIODevice *device); -%If (Qt_6_5_0 -) - explicit QXmlStreamReader(QAnyStringView data); -%End -%If (- Qt_6_5_0) - explicit QXmlStreamReader(const QByteArray &data); -%End -%If (- Qt_6_5_0) - explicit QXmlStreamReader(const QString &data); -%End - ~QXmlStreamReader(); - void setDevice(QIODevice *device); - QIODevice *device() const; -%If (Qt_6_5_0 -) - void addData(QAnyStringView data); -%End -%If (- Qt_6_5_0) - void addData(const QByteArray &data); -%End -%If (- Qt_6_5_0) - void addData(const QString &data); -%End - void clear(); - bool atEnd() const; - QXmlStreamReader::TokenType readNext(); - QXmlStreamReader::TokenType tokenType() const; - QString tokenString() const; - void setNamespaceProcessing(bool); - bool namespaceProcessing() const; - bool isStartDocument() const; - bool isEndDocument() const; - bool isStartElement() const; - bool isEndElement() const; - bool isCharacters() const; - bool isWhitespace() const; - bool isCDATA() const; - bool isComment() const; - bool isDTD() const; - bool isEntityReference() const; - bool isProcessingInstruction() const; - bool isStandaloneDocument() const; - QStringView documentVersion() const; - QStringView documentEncoding() const; - qint64 lineNumber() const; - qint64 columnNumber() const; - qint64 characterOffset() const; - QXmlStreamAttributes attributes() const; - - enum ReadElementTextBehaviour - { - ErrorOnUnexpectedElement, - IncludeChildElements, - SkipChildElements, - }; - - QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = QXmlStreamReader::ErrorOnUnexpectedElement); - QStringView name() const; - QStringView namespaceUri() const; - QStringView qualifiedName() const; - QStringView prefix() const; - QStringView processingInstructionTarget() const; - QStringView processingInstructionData() const; - QStringView text() const; - QXmlStreamNamespaceDeclarations namespaceDeclarations() const; - void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction); - void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions); - QXmlStreamNotationDeclarations notationDeclarations() const; - QXmlStreamEntityDeclarations entityDeclarations() const; - QStringView dtdName() const; - QStringView dtdPublicId() const; - QStringView dtdSystemId() const; - - enum Error - { - NoError, - UnexpectedElementError, - CustomError, - NotWellFormedError, - PrematureEndOfDocumentError, - }; - - void raiseError(const QString &message = QString()); - QString errorString() const; - QXmlStreamReader::Error error() const; - bool hasError() const; - void setEntityResolver(QXmlStreamEntityResolver *resolver /KeepReference/); - QXmlStreamEntityResolver *entityResolver() const; - bool readNextStartElement(); - void skipCurrentElement(); - int entityExpansionLimit() const; - void setEntityExpansionLimit(int limit); -%If (Qt_6_6_0 -) - bool hasStandaloneDeclaration() const; -%End - -private: - QXmlStreamReader(const QXmlStreamReader &); -}; - -class QXmlStreamWriter -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamWriter(); - explicit QXmlStreamWriter(QIODevice *device); - explicit QXmlStreamWriter(QByteArray *array); - ~QXmlStreamWriter(); - void setDevice(QIODevice *device); - QIODevice *device() const; - void setAutoFormatting(bool); - bool autoFormatting() const; - void setAutoFormattingIndent(int spaces); - int autoFormattingIndent() const; -%If (Qt_6_5_0 -) - void writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value); -%End -%If (Qt_6_5_0 -) - void writeAttribute(QAnyStringView qualifiedName, QAnyStringView value); -%End -%If (- Qt_6_5_0) - void writeAttribute(const QString &qualifiedName, const QString &value); -%End -%If (- Qt_6_5_0) - void writeAttribute(const QString &namespaceUri, const QString &name, const QString &value); -%End - void writeAttribute(const QXmlStreamAttribute &attribute); - void writeAttributes(const QXmlStreamAttributes &attributes); -%If (Qt_6_5_0 -) - void writeCDATA(QAnyStringView text); -%End -%If (- Qt_6_5_0) - void writeCDATA(const QString &text); -%End -%If (Qt_6_5_0 -) - void writeCharacters(QAnyStringView text); -%End -%If (- Qt_6_5_0) - void writeCharacters(const QString &text); -%End -%If (Qt_6_5_0 -) - void writeComment(QAnyStringView text); -%End -%If (- Qt_6_5_0) - void writeComment(const QString &text); -%End -%If (Qt_6_5_0 -) - void writeDTD(QAnyStringView dtd); -%End -%If (- Qt_6_5_0) - void writeDTD(const QString &dtd); -%End -%If (Qt_6_5_0 -) - void writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name); -%End -%If (Qt_6_5_0 -) - void writeEmptyElement(QAnyStringView qualifiedName); -%End -%If (- Qt_6_5_0) - void writeEmptyElement(const QString &qualifiedName); -%End -%If (- Qt_6_5_0) - void writeEmptyElement(const QString &namespaceUri, const QString &name); -%End -%If (Qt_6_5_0 -) - void writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text); -%End -%If (Qt_6_5_0 -) - void writeTextElement(QAnyStringView qualifiedName, QAnyStringView text); -%End -%If (- Qt_6_5_0) - void writeTextElement(const QString &qualifiedName, const QString &text); -%End -%If (- Qt_6_5_0) - void writeTextElement(const QString &namespaceUri, const QString &name, const QString &text); -%End - void writeEndDocument(); - void writeEndElement(); -%If (Qt_6_5_0 -) - void writeEntityReference(QAnyStringView name); -%End -%If (- Qt_6_5_0) - void writeEntityReference(const QString &name); -%End -%If (Qt_6_5_0 -) - void writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {}); -%End -%If (- Qt_6_5_0) - void writeNamespace(const QString &namespaceUri, const QString &prefix = QString()); -%End -%If (Qt_6_5_0 -) - void writeDefaultNamespace(QAnyStringView namespaceUri); -%End -%If (- Qt_6_5_0) - void writeDefaultNamespace(const QString &namespaceUri); -%End -%If (Qt_6_5_0 -) - void writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {}); -%End -%If (- Qt_6_5_0) - void writeProcessingInstruction(const QString &target, const QString &data = QString()); -%End -%If (Qt_6_5_0 -) - void writeStartDocument(QAnyStringView version, bool standalone); -%End -%If (Qt_6_5_0 -) - void writeStartDocument(QAnyStringView version); -%End - void writeStartDocument(); -%If (- Qt_6_5_0) - void writeStartDocument(const QString &version); -%End -%If (- Qt_6_5_0) - void writeStartDocument(const QString &version, bool standalone); -%End -%If (Qt_6_5_0 -) - void writeStartElement(QAnyStringView namespaceUri, QAnyStringView name); -%End -%If (Qt_6_5_0 -) - void writeStartElement(QAnyStringView qualifiedName); -%End -%If (- Qt_6_5_0) - void writeStartElement(const QString &qualifiedName); -%End -%If (- Qt_6_5_0) - void writeStartElement(const QString &namespaceUri, const QString &name); -%End - void writeCurrentToken(const QXmlStreamReader &reader); - bool hasError() const; - -private: - QXmlStreamWriter(const QXmlStreamWriter &); -}; - -class QXmlStreamAttributes -{ -%TypeHeaderCode -#include -%End - -public: - QXmlStreamAttributes(); -%If (Qt_6_6_0 -) - QStringView value(QAnyStringView namespaceUri, QAnyStringView name) const; -%End -%If (- Qt_6_6_0) - QStringView value(const QString &namespaceUri, const QString &name) const; -%End -%If (Qt_6_6_0 -) - QStringView value(QAnyStringView qualifiedName) const; -%End -%If (- Qt_6_6_0) - QStringView value(const QString &qualifiedName) const; -%End - void append(const QString &namespaceUri, const QString &name, const QString &value); - void append(const QString &qualifiedName, const QString &value); -%If (Qt_6_6_0 -) - bool hasAttribute(QAnyStringView namespaceUri, QAnyStringView name) const; -%End -%If (- Qt_6_6_0) - bool hasAttribute(const QString &namespaceUri, const QString &name) const; -%End -%If (Qt_6_6_0 -) - bool hasAttribute(QAnyStringView qualifiedName) const; -%End -%If (- Qt_6_6_0) - bool hasAttribute(const QString &qualifiedName) const; -%End -// Methods inherited from QList and Python special methods. -// Keep in sync with QPolygon and QPolygonF. - - -void append(const QXmlStreamAttribute &value); - -const QXmlStreamAttribute &at(int i) const; -void clear(); -bool contains(const QXmlStreamAttribute &value) const; -int count(const QXmlStreamAttribute &value) const; -int count() const /__len__/; -void *data(); - -// Note the Qt return value is discarded as it would require handwritten code -// and seems pretty useless. -void fill(const QXmlStreamAttribute &value, int size = -1); - -QXmlStreamAttribute &first(); -int indexOf(const QXmlStreamAttribute &value, int from = 0) const; -void insert(int i, const QXmlStreamAttribute &value); -bool isEmpty() const; -QXmlStreamAttribute &last(); -int lastIndexOf(const QXmlStreamAttribute &value, int from = -1) const; - -// Note the Qt return type is QList. We can't do the -// usual trick because there is no QXmlStreamAttributes ctor that takes a -// QList argument. We could use handwritten code but we -// don't bother. -//QXmlStreamAttributes mid(int pos, int length = -1) const; - -void prepend(const QXmlStreamAttribute &value); -void remove(int i); -void remove(int i, int count); -void resize(qsizetype size); -void replace(int i, const QXmlStreamAttribute &value); -int size() const; - -// These are hidden by other implementations in QXmlStreamAttributes. -//QXmlStreamAttribute value(int i) const; -//QXmlStreamAttribute value(int i, const QXmlStreamAttribute &defaultValue) const; - -bool operator!=(const QXmlStreamAttributes &other) const; - -// Note the Qt return type is QList. We can't do the -// usual trick because there is no QXmlStreamAttributes ctor that takes a -// QList argument. We could use handwritten code but we -// don't bother. -//QXmlStreamAttributes operator+(const QXmlStreamAttributes &other) const; - -QXmlStreamAttributes &operator+=(const QXmlStreamAttributes &other); -QXmlStreamAttributes &operator+=(const QXmlStreamAttribute &value); - -bool operator==(const QXmlStreamAttributes &other) const; - -QXmlStreamAttribute &operator[](int i); -%MethodCode -Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - -if (idx < 0) - sipIsErr = 1; -else - sipRes = &sipCpp->operator[]((int)idx); -%End - -// Some additional Python special methods. - -void __setitem__(int i, const QXmlStreamAttribute &value); -%MethodCode -int len; - -len = sipCpp->count(); - -if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; -else - (*sipCpp)[a0] = *a1; -%End - -void __setitem__(SIP_PYSLICE slice, const QXmlStreamAttributes &list); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - int vlen = a1->count(); - - if (vlen != slicelength) - { - sipBadLengthForSlice(vlen, slicelength); - sipIsErr = 1; - } - else - { - QList::const_iterator it = a1->begin(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipCpp)[start] = *it; - start += step; - ++it; - } - } -} -%End - -void __delitem__(int i); -%MethodCode -if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; -else - sipCpp->remove(a0); -%End - -void __delitem__(SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - sipCpp->remove(start); - start += step - 1; - } -} -%End - -QXmlStreamAttributes operator[](SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - sipRes = new QXmlStreamAttributes(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipRes) += (*sipCpp)[start]; - start += step; - } -} -%End - -int __contains__(const QXmlStreamAttribute &value); -%MethodCode -// It looks like you can't assign QBool to int. -sipRes = bool(sipCpp->contains(*a0)); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qyieldcpu.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qyieldcpu.sip deleted file mode 100644 index d9a8892..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtCore/qyieldcpu.sip +++ /dev/null @@ -1,31 +0,0 @@ -// qyieldcpu.sip generated by MetaSIP -// -// This file is part of the QtCore Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) -%ModuleCode -#include -%End -%End - -%If (Qt_6_7_0 -) -void qYieldCpu(); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBus.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBus.toml deleted file mode 100644 index ced0c27..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBus.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtDBus. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBusmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBusmod.sip deleted file mode 100644 index 727e898..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/QtDBusmod.sip +++ /dev/null @@ -1,61 +0,0 @@ -// QtDBusmod.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtDBus, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qdbusabstractadaptor.sip -%Include qdbusabstractinterface.sip -%Include qdbusargument.sip -%Include qdbusconnection.sip -%Include qdbusconnectioninterface.sip -%Include qdbuserror.sip -%Include qdbusextratypes.sip -%Include qdbusinterface.sip -%Include qdbusmessage.sip -%Include qdbuspendingcall.sip -%Include qdbusservicewatcher.sip -%Include qdbusunixfiledescriptor.sip -%Include qpydbuspendingreply.sip -%Include qpydbusreply.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractadaptor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractadaptor.sip deleted file mode 100644 index 737174c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractadaptor.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qdbusabstractadaptor.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusAbstractAdaptor : public QObject -{ -%TypeHeaderCode -#include -%End - -protected: - explicit QDBusAbstractAdaptor(QObject *parent /TransferThis/); - -public: - virtual ~QDBusAbstractAdaptor(); - -protected: - void setAutoRelaySignals(bool enable); - bool autoRelaySignals() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractinterface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractinterface.sip deleted file mode 100644 index 947c85a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusabstractinterface.sip +++ /dev/null @@ -1,232 +0,0 @@ -// qdbusabstractinterface.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusAbstractInterface : QObject -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// Convert a Python tuple to a list of QVarients. -static QList QtDBus_marshal(PyObject *py_args, int *is_err) -{ - QList cpp_args; - Py_ssize_t nr_args = PyTuple_Size(py_args); - - for (Py_ssize_t i = 0; i < nr_args; ++i) - { - int state; - void *var; - - var = sipForceConvertToType(PyTuple_GetItem(py_args, i), sipType_QVariant, NULL, - 0, &state, is_err); - - if (*is_err) - break; - - cpp_args.append(*reinterpret_cast(var)); - sipReleaseType(var, sipType_QVariant, state); - } - - return cpp_args; -} -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QDBusPendingCallWatcher, &sipType_QDBusPendingCallWatcher, -1, 1}, - {sipName_QDBusAbstractAdaptor, &sipType_QDBusAbstractAdaptor, -1, 2}, - {sipName_QDBusAbstractInterface, &sipType_QDBusAbstractInterface, 4, 3}, - {sipName_QDBusServiceWatcher, &sipType_QDBusServiceWatcher, -1, -1}, - {sipName_QDBusConnectionInterface, &sipType_QDBusConnectionInterface, -1, 5}, - {sipName_QDBusInterface, &sipType_QDBusInterface, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - virtual ~QDBusAbstractInterface(); - bool isValid() const; - QDBusConnection connection() const; - QString service() const; - QString path() const; - QString interface() const; - QDBusError lastError() const; - void setTimeout(int timeout); - int timeout() const; - QDBusMessage call(const QString &method, ...); -%MethodCode - QList args; - - args = QtDBus_marshal(a1, &sipIsErr); - - if (!sipIsErr) - { - Py_BEGIN_ALLOW_THREADS - sipRes = new QDBusMessage(sipCpp->callWithArgumentList(QDBus::AutoDetect, *a0, args)); - Py_END_ALLOW_THREADS - } -%End - - QDBusMessage call(QDBus::CallMode mode, const QString &method, ...); -%MethodCode - QList args; - - args = QtDBus_marshal(a2, &sipIsErr); - - if (!sipIsErr) - { - Py_BEGIN_ALLOW_THREADS - sipRes = new QDBusMessage(sipCpp->callWithArgumentList(a0, *a1, args)); - Py_END_ALLOW_THREADS - } -%End - - QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList &args) /ReleaseGIL/; - bool callWithCallback(const QString &method, const QList &args, SIP_PYOBJECT returnMethod /TypeHint="PYQT_SLOT"/, SIP_PYOBJECT errorMethod /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray return_slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a2, &receiver, return_slot)) == sipErrorNone) - { - QObject *error_receiver; - QByteArray error_slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a3, &error_receiver, error_slot)) == sipErrorNone) - { - if (receiver == error_receiver) - { - sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, return_slot.constData(), error_slot.constData()); - } - else - { - PyErr_SetString(PyExc_ValueError, - "the return and error methods must be bound to the same QObject instance"); - sipError = sipErrorFail; - } - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(3, a3); - } - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - - bool callWithCallback(const QString &method, QList &args, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a2, &receiver, slot)) == sipErrorNone) - { - sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, slot.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - - QDBusPendingCall asyncCall(const QString &method, ...); -%MethodCode - QList args; - - args = QtDBus_marshal(a1, &sipIsErr); - - if (!sipIsErr) - { - Py_BEGIN_ALLOW_THREADS - sipRes = new QDBusPendingCall(sipCpp->asyncCallWithArgumentList(*a0, args)); - Py_END_ALLOW_THREADS - } -%End - - QDBusPendingCall asyncCallWithArgumentList(const QString &method, const QList &args); - -protected: - QDBusAbstractInterface(const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent /TransferThis/); - virtual void connectNotify(const QMetaMethod &signal); - virtual void disconnectNotify(const QMetaMethod &signal); - -public: -%If (Qt_6_7_0 -) - void setInteractiveAuthorizationAllowed(bool enable); -%End -%If (Qt_6_7_0 -) - bool isInteractiveAuthorizationAllowed() const; -%End -}; - -%ModuleHeaderCode -#include "qpydbus_api.h" - -// Imports from QtCore. -typedef PyObject *(*pyqt6_qtdbus_from_qvariant_by_type_t)(QVariant &, PyObject *); -extern pyqt6_qtdbus_from_qvariant_by_type_t pyqt6_qtdbus_from_qvariant_by_type; - -typedef sipErrorState (*pyqt6_qtdbus_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &); -extern pyqt6_qtdbus_get_pyqtslot_parts_t pyqt6_qtdbus_get_pyqtslot_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtdbus_from_qvariant_by_type_t pyqt6_qtdbus_from_qvariant_by_type; -pyqt6_qtdbus_get_pyqtslot_parts_t pyqt6_qtdbus_get_pyqtslot_parts; -%End - -%PostInitialisationCode -qpydbus_post_init(); - -// Imports from QtCore. -pyqt6_qtdbus_from_qvariant_by_type = (pyqt6_qtdbus_from_qvariant_by_type_t)sipImportSymbol("pyqt6_from_qvariant_by_type"); -Q_ASSERT(pyqt6_qtdbus_from_qvariant_by_type); - -pyqt6_qtdbus_get_pyqtslot_parts = (pyqt6_qtdbus_get_pyqtslot_parts_t)sipImportSymbol("pyqt6_get_pyqtslot_parts"); -Q_ASSERT(pyqt6_qtdbus_get_pyqtslot_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusargument.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusargument.sip deleted file mode 100644 index e5f9bb9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusargument.sip +++ /dev/null @@ -1,175 +0,0 @@ -// qdbusargument.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusArgument -{ -%TypeHeaderCode -#include -%End - -%TypeCode -#include - - -static PyObject *qdbusargument_add(QDBusArgument *arg, PyObject *obj, int mtype) -{ - int iserr = 0; - - if (PyLong_CheckExact(obj)) - { - if (mtype == QMetaType::UChar || mtype == QMetaType::UShort || mtype == QMetaType::UInt || mtype == QMetaType::ULongLong) - { - // Handle the unsigned values. - unsigned long long v = PyLong_AsUnsignedLongLongMask(obj); - - switch (mtype) - { - case QMetaType::UChar: - *arg << (uchar)v; - break; - - case QMetaType::UShort: - *arg << (ushort)v; - break; - - case QMetaType::UInt: - *arg << (uint)v; - break; - - case QMetaType::ULongLong: - *arg << (qulonglong)v; - break; - } - } - else if (mtype == QMetaType::Short || mtype == QMetaType::Int || mtype == QMetaType::LongLong) - { - // Handle the signed values. - long long v = PyLong_AsLongLong(obj); - - switch (mtype) - { - case QMetaType::Short: - *arg << (short)v; - break; - - case QMetaType::Int: - *arg << (int)v; - break; - - case QMetaType::LongLong: - *arg << (qlonglong)v; - break; - } - } - else - { - PyErr_Format(PyExc_ValueError, - "%d is an invalid QMetaType::Type for an integer object", - mtype); - iserr = 1; - } - } - else if (mtype == QMetaType::QStringList) - { - // A QStringList has to be handled explicitly to prevent it being seen - // as a vialiant list. - - int value_state; - - QStringList *qsl = reinterpret_cast( - sipForceConvertToType(obj, sipType_QStringList, 0, - SIP_NOT_NONE, &value_state, &iserr)); - - if (!iserr) - { - arg->beginArray(QMetaType::QString); - - for (int i = 0; i < qsl->count(); ++i) - *arg << qsl->at(i); - - arg->endArray(); - - sipReleaseType(qsl, sipType_QStringList, value_state); - } - } - else - { - int value_state; - - QVariant *qv = reinterpret_cast( - sipForceConvertToType(obj, sipType_QVariant, 0, SIP_NOT_NONE, - &value_state, &iserr)); - - if (!iserr) - { - // This is an internal method. If it proves to be a problem then we - // will have to handle each type explicitly. - arg->appendVariant(*qv); - sipReleaseType(qv, sipType_QVariant, value_state); - } - } - - if (iserr) - return 0; - - Py_INCREF(Py_None); - return Py_None; -} -%End - -public: - QDBusArgument(); - QDBusArgument(const QDBusArgument &other); - QDBusArgument(SIP_PYOBJECT arg, int id = QMetaType::Int); -%MethodCode - sipCpp = new QDBusArgument(); - PyObject *res = qdbusargument_add(sipCpp, a0, a1); - - if (res) - { - Py_DECREF(res); - } - else - { - delete sipCpp; - sipCpp = 0; - } -%End - - ~QDBusArgument(); - SIP_PYOBJECT add(SIP_PYOBJECT arg, int id = QMetaType::Int) /TypeHint=""/; -%MethodCode - sipRes = qdbusargument_add(sipCpp, a0, a1); -%End - - void beginStructure(); - void endStructure(); - void beginArray(QMetaType elementMetaType); - void beginArray(int id); - void endArray(); - void beginMap(QMetaType keyMetaType, QMetaType valueMetaType); - void beginMap(int kid, int vid); - void endMap(); - void beginMapEntry(); - void endMapEntry(); - void swap(QDBusArgument &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnection.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnection.sip deleted file mode 100644 index 5e64637..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnection.sip +++ /dev/null @@ -1,251 +0,0 @@ -// qdbusconnection.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QDBus -{ -%TypeHeaderCode -#include -%End - - enum CallMode - { - NoBlock, - Block, - BlockWithGui, - AutoDetect, - }; -}; - -class QDBusConnection -{ -%TypeHeaderCode -#include -%End - -public: - enum BusType - { - SessionBus, - SystemBus, - ActivationBus, - }; - - enum RegisterOption /BaseType=Flag/ - { - ExportAdaptors, - ExportScriptableSlots, - ExportScriptableSignals, - ExportScriptableProperties, - ExportScriptableInvokables, - ExportScriptableContents, - ExportNonScriptableSlots, - ExportNonScriptableSignals, - ExportNonScriptableProperties, - ExportNonScriptableInvokables, - ExportNonScriptableContents, - ExportAllSlots, - ExportAllSignals, - ExportAllProperties, - ExportAllInvokables, - ExportAllContents, - ExportAllSignal, - ExportChildObjects, - }; - - typedef QFlags RegisterOptions; - - enum UnregisterMode - { - UnregisterNode, - UnregisterTree, - }; - - enum ConnectionCapability /BaseType=Flag/ - { - UnixFileDescriptorPassing, - }; - - typedef QFlags ConnectionCapabilities; - explicit QDBusConnection(const QString &name); - QDBusConnection(const QDBusConnection &other); - ~QDBusConnection(); - bool isConnected() const; - QString baseService() const; - QDBusError lastError() const; - QString name() const; - QDBusConnection::ConnectionCapabilities connectionCapabilities() const; - bool send(const QDBusMessage &message) const; - bool callWithCallback(const QDBusMessage &message, SIP_PYOBJECT returnMethod /TypeHint="PYQT_SLOT"/, SIP_PYOBJECT errorMethod /TypeHint="PYQT_SLOT"/, int timeout = -1) const; -%MethodCode - QObject *receiver; - QByteArray return_slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a1, &receiver, return_slot)) == sipErrorNone) - { - QObject *error_receiver; - QByteArray error_slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a2, &error_receiver, error_slot)) == sipErrorNone) - { - if (receiver == error_receiver) - { - sipRes = sipCpp->callWithCallback(*a0, receiver, return_slot.constData(), error_slot.constData(), a3); - } - else - { - PyErr_SetString(PyExc_ValueError, - "the return and error methods must be bound to the same QObject instance"); - sipError = sipErrorFail; - } - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - - QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const /ReleaseGIL/; - QDBusPendingCall asyncCall(const QDBusMessage &message, int timeout = -1) const; - bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(4, a4); - } -%End - - bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(5, a5); - } -%End - - bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(6, a6); - } -%End - - bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(4, a4); - } -%End - - bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(5, a5); - } -%End - - bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData()); - Py_END_ALLOW_THREADS - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(6, a6); - } -%End - - bool registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = QDBusConnection::ExportAdaptors); - bool registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = QDBusConnection::ExportAdaptors); - void unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = QDBusConnection::UnregisterNode); - QObject *objectRegisteredAt(const QString &path) const; - bool registerService(const QString &serviceName); - bool unregisterService(const QString &serviceName); - QDBusConnectionInterface *interface() const; - static QDBusConnection connectToBus(QDBusConnection::BusType type, const QString &name) /ReleaseGIL/; - static QDBusConnection connectToBus(const QString &address, const QString &name) /ReleaseGIL/; - static QDBusConnection connectToPeer(const QString &address, const QString &name) /ReleaseGIL/; - static void disconnectFromBus(const QString &name) /ReleaseGIL/; - static void disconnectFromPeer(const QString &name) /ReleaseGIL/; - static QByteArray localMachineId(); - static QDBusConnection sessionBus(); - static QDBusConnection systemBus(); - void swap(QDBusConnection &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnectioninterface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnectioninterface.sip deleted file mode 100644 index 3bb8691..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusconnectioninterface.sip +++ /dev/null @@ -1,72 +0,0 @@ -// qdbusconnectioninterface.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusConnectionInterface : public QDBusAbstractInterface -{ -%TypeHeaderCode -#include -%End - - QDBusConnectionInterface(const QDBusConnection &connection, QObject *parent /TransferThis/); - virtual ~QDBusConnectionInterface(); - -public: - enum ServiceQueueOptions - { - DontQueueService, - QueueService, - ReplaceExistingService, - }; - - enum ServiceReplacementOptions - { - DontAllowReplacement, - AllowReplacement, - }; - - enum RegisterServiceReply - { - ServiceNotRegistered, - ServiceRegistered, - ServiceQueued, - }; - - QDBusReply registeredServiceNames() const /ReleaseGIL/; - QDBusReply activatableServiceNames() const /ReleaseGIL/; - QDBusReply isServiceRegistered(const QString &serviceName) const /ReleaseGIL/; - QDBusReply serviceOwner(const QString &name) const /ReleaseGIL/; - QDBusReply unregisterService(const QString &serviceName) /ReleaseGIL/; - QDBusReply registerService(const QString &serviceName, QDBusConnectionInterface::ServiceQueueOptions qoption = QDBusConnectionInterface::DontQueueService, QDBusConnectionInterface::ServiceReplacementOptions roption = QDBusConnectionInterface::DontAllowReplacement) /ReleaseGIL/; - QDBusReply servicePid(const QString &serviceName) const /ReleaseGIL/; - QDBusReply serviceUid(const QString &serviceName) const /ReleaseGIL/; - QDBusReply startService(const QString &name) /ReleaseGIL/; - -signals: - void serviceRegistered(const QString &service); - void serviceUnregistered(const QString &service); - void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); - void callWithCallbackFailed(const QDBusError &error, const QDBusMessage &call); - -protected: - virtual void connectNotify(const QMetaMethod &); - virtual void disconnectNotify(const QMetaMethod &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuserror.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuserror.sip deleted file mode 100644 index 9f5bf84..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuserror.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qdbuserror.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusError -{ -%TypeHeaderCode -#include -%End - -public: - enum ErrorType - { - NoError, - Other, - Failed, - NoMemory, - ServiceUnknown, - NoReply, - BadAddress, - NotSupported, - LimitsExceeded, - AccessDenied, - NoServer, - Timeout, - NoNetwork, - AddressInUse, - Disconnected, - InvalidArgs, - UnknownMethod, - TimedOut, - InvalidSignature, - UnknownInterface, - InternalError, - UnknownObject, - InvalidService, - InvalidObjectPath, - InvalidInterface, - InvalidMember, - UnknownProperty, - PropertyReadOnly, - }; - - QDBusError(const QDBusError &other); - QDBusError::ErrorType type() const; - QString name() const; - QString message() const; - bool isValid() const; - static QString errorString(QDBusError::ErrorType error); - void swap(QDBusError &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusextratypes.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusextratypes.sip deleted file mode 100644 index 3a3033d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusextratypes.sip +++ /dev/null @@ -1,83 +0,0 @@ -// qdbusextratypes.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusObjectPath -{ -%TypeHeaderCode -#include -%End - -public: - QDBusObjectPath(); - explicit QDBusObjectPath(const QString &objectPath); - QString path() const; - void setPath(const QString &objectPath); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp, 0); -%End - - void swap(QDBusObjectPath &other /Constrained/); -}; - -bool operator==(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); -bool operator!=(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); -bool operator<(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); - -class QDBusSignature -{ -%TypeHeaderCode -#include -%End - -public: - QDBusSignature(); - explicit QDBusSignature(const QString &dBusSignature); - QString signature() const; - void setSignature(const QString &dBusSignature); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp, 0); -%End - - void swap(QDBusSignature &other /Constrained/); -}; - -bool operator==(const QDBusSignature &lhs, const QDBusSignature &rhs); -bool operator!=(const QDBusSignature &lhs, const QDBusSignature &rhs); -bool operator<(const QDBusSignature &lhs, const QDBusSignature &rhs); - -class QDBusVariant -{ -%TypeHeaderCode -#include -%End - -public: - QDBusVariant(); - explicit QDBusVariant(const QVariant &dBusVariant); - QVariant variant() const; - void setVariant(const QVariant &dBusVariant); - void swap(QDBusVariant &other /Constrained/); -}; - -bool operator==(const QDBusVariant &v1, const QDBusVariant &v2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusinterface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusinterface.sip deleted file mode 100644 index 0f928df..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusinterface.sip +++ /dev/null @@ -1,32 +0,0 @@ -// qdbusinterface.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusInterface : public QDBusAbstractInterface -{ -%TypeHeaderCode -#include -%End - -public: - QDBusInterface(const QString &service, const QString &path, const QString &interface = QString(), const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent /TransferThis/ = 0); - virtual ~QDBusInterface(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusmessage.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusmessage.sip deleted file mode 100644 index 041b5c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusmessage.sip +++ /dev/null @@ -1,72 +0,0 @@ -// qdbusmessage.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusMessage -{ -%TypeHeaderCode -#include -%End - -public: - enum MessageType - { - InvalidMessage, - MethodCallMessage, - ReplyMessage, - ErrorMessage, - SignalMessage, - }; - - QDBusMessage(); - QDBusMessage(const QDBusMessage &other); - ~QDBusMessage(); - static QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name); - static QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method); - static QDBusMessage createError(const QString &name, const QString &msg); - static QDBusMessage createError(const QDBusError &error); - static QDBusMessage createError(QDBusError::ErrorType type, const QString &msg); - QDBusMessage createReply(const QList &arguments = QList()) const; - QDBusMessage createReply(const QVariant &argument) const; - QDBusMessage createErrorReply(const QString &name, const QString &msg) const; - QDBusMessage createErrorReply(const QDBusError &error) const; - QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const; - QString service() const; - QString path() const; - QString interface() const; - QString member() const; - QString errorName() const; - QString errorMessage() const; - QDBusMessage::MessageType type() const; - QString signature() const; - bool isReplyRequired() const; - void setDelayedReply(bool enable) const; - bool isDelayedReply() const; - void setAutoStartService(bool enable); - bool autoStartService() const; - void setArguments(const QList &arguments); - QList arguments() const; - QDBusMessage &operator<<(const QVariant &arg); - void swap(QDBusMessage &other /Constrained/); - static QDBusMessage createTargetedSignal(const QString &service, const QString &path, const QString &interface, const QString &name); - void setInteractiveAuthorizationAllowed(bool enable); - bool isInteractiveAuthorizationAllowed() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuspendingcall.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuspendingcall.sip deleted file mode 100644 index 80f4040..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbuspendingcall.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qdbuspendingcall.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusPendingCall -{ -%TypeHeaderCode -#include -%End - -public: - QDBusPendingCall(const QDBusPendingCall &other); - ~QDBusPendingCall(); - static QDBusPendingCall fromError(const QDBusError &error); - static QDBusPendingCall fromCompletedCall(const QDBusMessage &message); - void swap(QDBusPendingCall &other /Constrained/); - -private: - QDBusPendingCall(); -}; - -class QDBusPendingCallWatcher : public QObject, public QDBusPendingCall -{ -%TypeHeaderCode -#include -%End - -public: - QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent /TransferThis/ = 0); - virtual ~QDBusPendingCallWatcher(); - bool isFinished() const; - void waitForFinished() /ReleaseGIL/; - -signals: - void finished(QDBusPendingCallWatcher *watcher = 0); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusservicewatcher.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusservicewatcher.sip deleted file mode 100644 index b58a024..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusservicewatcher.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qdbusservicewatcher.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusServiceWatcher : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum WatchModeFlag /BaseType=Flag/ - { - WatchForRegistration, - WatchForUnregistration, - WatchForOwnerChange, - }; - - typedef QFlags WatchMode; - explicit QDBusServiceWatcher(QObject *parent /TransferThis/ = 0); - QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, QDBusServiceWatcher::WatchMode watchMode = QDBusServiceWatcher::WatchForOwnerChange, QObject *parent /TransferThis/ = 0); - virtual ~QDBusServiceWatcher(); - QStringList watchedServices() const; - void setWatchedServices(const QStringList &services); - void addWatchedService(const QString &newService); - bool removeWatchedService(const QString &service); - QDBusServiceWatcher::WatchMode watchMode() const; - void setWatchMode(QDBusServiceWatcher::WatchMode mode); - QDBusConnection connection() const; - void setConnection(const QDBusConnection &connection); - -signals: - void serviceRegistered(const QString &service); - void serviceUnregistered(const QString &service); - void serviceOwnerChanged(const QString &service, const QString &oldOwner, const QString &newOwner); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusunixfiledescriptor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusunixfiledescriptor.sip deleted file mode 100644 index 53bc18c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qdbusunixfiledescriptor.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qdbusunixfiledescriptor.sip generated by MetaSIP -// -// This file is part of the QtDBus Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDBusUnixFileDescriptor -{ -%TypeHeaderCode -#include -%End - -public: - QDBusUnixFileDescriptor(); - explicit QDBusUnixFileDescriptor(int fileDescriptor); - QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other); - ~QDBusUnixFileDescriptor(); - bool isValid() const; - int fileDescriptor() const; - void setFileDescriptor(int fileDescriptor); - static bool isSupported(); - void swap(QDBusUnixFileDescriptor &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbuspendingreply.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbuspendingreply.sip deleted file mode 100644 index 583d147..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbuspendingreply.sip +++ /dev/null @@ -1,44 +0,0 @@ -// This is the SIP specification of the QPyDBusPendingReply class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDBusPendingReply : QDBusPendingCall /PyName=QDBusPendingReply/ -{ -%TypeHeaderCode -#include -%End - -public: - QPyDBusPendingReply(); - QPyDBusPendingReply(const QPyDBusPendingReply &other); - QPyDBusPendingReply(const QDBusPendingCall &call); - QPyDBusPendingReply(const QDBusMessage &reply); - - // The /ReleaseGIL/ annotation is needed because QDBusPendingCall has an - // internal mutex. - QVariant argumentAt(int index) const /ReleaseGIL/; - QDBusError error() const /ReleaseGIL/; - bool isError() const /ReleaseGIL/; - bool isFinished() const /ReleaseGIL/; - bool isValid() const /ReleaseGIL/; - QDBusMessage reply() const /ReleaseGIL/; - void waitForFinished() /ReleaseGIL/; - - SIP_PYOBJECT value(SIP_PYOBJECT type /TypeHintValue="None"/ = 0) const /HoldGIL/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbusreply.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbusreply.sip deleted file mode 100644 index 645d934..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDBus/qpydbusreply.sip +++ /dev/null @@ -1,238 +0,0 @@ -// This is the SIP specification of the QPyDBusReply class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDBusReply /PyName=QDBusReply/ -{ -%TypeHeaderCode -#include -%End - -public: - QPyDBusReply(const QDBusMessage &reply) /HoldGIL/; - QPyDBusReply(const QDBusPendingCall &call) /HoldGIL/; - QPyDBusReply(const QDBusError &error); - QPyDBusReply(const QPyDBusReply &other) /HoldGIL/; - ~QPyDBusReply() /HoldGIL/; - - const QDBusError &error() const /HoldGIL/; - bool isValid() const /HoldGIL/; - SIP_PYOBJECT value(SIP_PYOBJECT type /TypeHintValue="None"/ = 0) const /HoldGIL/; -}; - - -template -%MappedType QDBusReply /TypeHint="QDBusReply"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *value_obj; - - if (sipCpp->isValid()) - { - // Convert the value to a Python object. - TYPE *value = new TYPE(sipCpp->value()); - - if ((value_obj = sipConvertFromNewType(value, sipType_TYPE, NULL)) == NULL) - { - delete value; - return NULL; - } - } - else - { - value_obj = 0; - } - - QPyDBusReply *reply = new QPyDBusReply(value_obj, - sipCpp->isValid(), sipCpp->error()); - - PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); - - if (reply_obj == NULL) - { - delete reply; - return NULL; - } - - return reply_obj; -%End - -%ConvertToTypeCode - // We never create a QDBusReply from Python. - return 0; -%End -}; - - -%MappedType QDBusReply /TypeHint="QDBusReply"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - Py_INCREF(Py_None); - QPyDBusReply *reply = new QPyDBusReply(Py_None, - sipCpp->isValid(), sipCpp->error()); - - PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); - - if (reply_obj == NULL) - { - delete reply; - return NULL; - } - - return reply_obj; -%End - -%ConvertToTypeCode - // We never create a QDBusReply from Python. - return 0; -%End -}; - - -%MappedType QDBusReply /TypeHint="QDBusReply"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *value_obj; - - if (sipCpp->isValid()) - { - if ((value_obj = PyBool_FromLong(sipCpp->value())) == NULL) - return NULL; - } - else - { - value_obj = 0; - } - - QPyDBusReply *reply = new QPyDBusReply(value_obj, - sipCpp->isValid(), sipCpp->error()); - - PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); - - if (reply_obj == NULL) - { - delete reply; - return NULL; - } - - return reply_obj; -%End - -%ConvertToTypeCode - // We never create a QDBusReply from Python. - return 0; -%End -}; - - -%MappedType QDBusReply /TypeHint="QDBusReply"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *value_obj; - - if (sipCpp->isValid()) - { - if ((value_obj = PyLong_FromUnsignedLong(sipCpp->value())) == NULL) - return NULL; - } - else - { - value_obj = 0; - } - - QPyDBusReply *reply = new QPyDBusReply(value_obj, - sipCpp->isValid(), sipCpp->error()); - - PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); - - if (reply_obj == NULL) - { - delete reply; - return NULL; - } - - return reply_obj; -%End - -%ConvertToTypeCode - // We never create a QDBusReply from Python. - return 0; -%End -}; - - -%MappedType QDBusReply /TypeHint="QDBusReply"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *value_obj; - - if (sipCpp->isValid()) - { - if ((value_obj = sipConvertFromEnum(sipCpp->value(), sipType_QDBusConnectionInterface_RegisterServiceReply)) == NULL) - return NULL; - } - else - { - value_obj = 0; - } - - QPyDBusReply *reply = new QPyDBusReply(value_obj, - sipCpp->isValid(), sipCpp->error()); - - PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); - - if (reply_obj == NULL) - { - delete reply; - return NULL; - } - - return reply_obj; -%End - -%ConvertToTypeCode - // We never create a QDBusReply from Python. - return 0; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesigner.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesigner.toml deleted file mode 100644 index 5783037..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesigner.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtDesigner. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesignermod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesignermod.sip deleted file mode 100644 index a914264..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/QtDesignermod.sip +++ /dev/null @@ -1,73 +0,0 @@ -// QtDesignermod.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtDesigner, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include abstractactioneditor.sip -%Include abstractformbuilder.sip -%Include abstractformeditor.sip -%Include abstractformwindow.sip -%Include abstractformwindowcursor.sip -%Include abstractformwindowmanager.sip -%Include abstractobjectinspector.sip -%Include abstractpropertyeditor.sip -%Include abstractwidgetbox.sip -%Include container.sip -%Include customwidget.sip -%Include default_extensionfactory.sip -%Include extension.sip -%Include formbuilder.sip -%Include membersheet.sip -%Include propertysheet.sip -%Include qextensionmanager.sip -%Include taskmenu.sip -%Include qpydesignercustomwidgetcollectionplugin.sip -%Include qpydesignercustomwidgetplugin.sip -%Include qpydesignermembersheetextension.sip -%Include qpydesignerpropertysheetextension.sip -%Include qpydesignertaskmenuextension.sip -%Include qpydesignercontainerextension.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractactioneditor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractactioneditor.sip deleted file mode 100644 index 233ba6e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractactioneditor.sip +++ /dev/null @@ -1,38 +0,0 @@ -// abstractactioneditor.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerActionEditorInterface : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerActionEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = {}); - virtual ~QDesignerActionEditorInterface(); - virtual QDesignerFormEditorInterface *core() const; - virtual void manageAction(QAction *action) = 0; - virtual void unmanageAction(QAction *action) = 0; - -public slots: - virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformbuilder.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformbuilder.sip deleted file mode 100644 index 933798a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformbuilder.sip +++ /dev/null @@ -1,40 +0,0 @@ -// abstractformbuilder.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractFormBuilder -{ -%TypeHeaderCode -#include -%End - -public: - QAbstractFormBuilder(); - virtual ~QAbstractFormBuilder(); - virtual QWidget *load(QIODevice *device, QWidget *parent /TransferThis/ = 0) /Factory/; - virtual void save(QIODevice *dev, QWidget *widget); - void setWorkingDirectory(const QDir &directory); - QDir workingDirectory() const; - QString errorString() const; - -private: - QAbstractFormBuilder(const QAbstractFormBuilder &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformeditor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformeditor.sip deleted file mode 100644 index a6e600b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformeditor.sip +++ /dev/null @@ -1,46 +0,0 @@ -// abstractformeditor.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerFormEditorInterface : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDesignerFormEditorInterface(QObject *parent /TransferThis/ = 0); - virtual ~QDesignerFormEditorInterface(); - QExtensionManager *extensionManager() const; - QWidget *topLevel() const; - QDesignerWidgetBoxInterface *widgetBox() const; - QDesignerPropertyEditorInterface *propertyEditor() const; - QDesignerObjectInspectorInterface *objectInspector() const; - QDesignerFormWindowManagerInterface *formWindowManager() const; - QDesignerActionEditorInterface *actionEditor() const; - void setWidgetBox(QDesignerWidgetBoxInterface *widgetBox /KeepReference/); - void setPropertyEditor(QDesignerPropertyEditorInterface *propertyEditor /KeepReference/); - void setObjectInspector(QDesignerObjectInspectorInterface *objectInspector /KeepReference/); - void setActionEditor(QDesignerActionEditorInterface *actionEditor /KeepReference/); - -private: - QDesignerFormEditorInterface(const QDesignerFormEditorInterface &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindow.sip deleted file mode 100644 index 426cfc5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindow.sip +++ /dev/null @@ -1,106 +0,0 @@ -// abstractformwindow.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerFormWindowInterface : public QWidget /Abstract/ -{ -%TypeHeaderCode -#include -%End - -public: - enum FeatureFlag /BaseType=Flag/ - { - EditFeature, - GridFeature, - TabOrderFeature, - DefaultFeature, - }; - - typedef QFlags Feature; - QDesignerFormWindowInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = {}); - virtual ~QDesignerFormWindowInterface(); - virtual QString fileName() const = 0; - virtual QDir absoluteDir() const = 0; - virtual QString contents() const = 0; - virtual bool setContents(QIODevice *dev, QString *errorMessage = 0) = 0; - virtual QDesignerFormWindowInterface::Feature features() const = 0; - virtual bool hasFeature(QDesignerFormWindowInterface::Feature f) const = 0; - virtual QString author() const = 0; - virtual void setAuthor(const QString &author) = 0; - virtual QString comment() const = 0; - virtual void setComment(const QString &comment) = 0; - virtual void layoutDefault(int *margin, int *spacing) = 0; - virtual void setLayoutDefault(int margin, int spacing) = 0; - virtual void layoutFunction(QString *margin /Out/, QString *spacing /Out/) = 0; - virtual void setLayoutFunction(const QString &margin, const QString &spacing) = 0; - virtual QString pixmapFunction() const = 0; - virtual void setPixmapFunction(const QString &pixmapFunction) = 0; - virtual QString exportMacro() const = 0; - virtual void setExportMacro(const QString &exportMacro) = 0; - virtual QStringList includeHints() const = 0; - virtual void setIncludeHints(const QStringList &includeHints) = 0; - virtual QDesignerFormEditorInterface *core() const; - virtual QDesignerFormWindowCursorInterface *cursor() const = 0; - virtual QPoint grid() const = 0; - virtual QWidget *mainContainer() const = 0; - virtual void setMainContainer(QWidget *mainContainer /KeepReference/) = 0; - virtual bool isManaged(QWidget *widget) const = 0; - virtual bool isDirty() const = 0; - static QDesignerFormWindowInterface *findFormWindow(QWidget *w); - static QDesignerFormWindowInterface *findFormWindow(QObject *obj); - virtual void emitSelectionChanged() = 0; - virtual QStringList resourceFiles() const = 0; - virtual void addResourceFile(const QString &path) = 0; - virtual void removeResourceFile(const QString &path) = 0; - -public slots: - virtual void manageWidget(QWidget *widget) = 0; - virtual void unmanageWidget(QWidget *widget) = 0; - virtual void setFeatures(QDesignerFormWindowInterface::Feature f) = 0; - virtual void setDirty(bool dirty) = 0; - virtual void clearSelection(bool update = true) = 0; - virtual void selectWidget(QWidget *widget, bool select = true) = 0; - virtual void setGrid(const QPoint &grid) = 0; - virtual void setFileName(const QString &fileName) = 0; - virtual bool setContents(const QString &contents) = 0; - -signals: - void mainContainerChanged(QWidget *mainContainer); - void fileNameChanged(const QString &fileName); - void featureChanged(QDesignerFormWindowInterface::Feature f /ScopesStripped=1/); - void selectionChanged(); - void geometryChanged(); - void resourceFilesChanged(); - void widgetManaged(QWidget *widget); - void widgetUnmanaged(QWidget *widget); - void aboutToUnmanageWidget(QWidget *widget); - void activated(QWidget *widget); - void changed(); - void widgetRemoved(QWidget *w); - void objectRemoved(QObject *o); - -public: - virtual QStringList checkContents() const = 0; - QStringList activeResourceFilePaths() const; - virtual QWidget *formContainer() const = 0; - void activateResourceFilePaths(const QStringList &paths, int *errorCount = 0, QString *errorMessages /Out/ = 0); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowcursor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowcursor.sip deleted file mode 100644 index deb4076..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowcursor.sip +++ /dev/null @@ -1,68 +0,0 @@ -// abstractformwindowcursor.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerFormWindowCursorInterface -{ -%TypeHeaderCode -#include -%End - -public: - enum MoveOperation - { - NoMove, - Start, - End, - Next, - Prev, - Left, - Right, - Up, - Down, - }; - - enum MoveMode - { - MoveAnchor, - KeepAnchor, - }; - - QDesignerFormWindowCursorInterface(); - virtual ~QDesignerFormWindowCursorInterface(); - virtual QDesignerFormWindowInterface *formWindow() const = 0; - virtual bool movePosition(QDesignerFormWindowCursorInterface::MoveOperation op, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0; - virtual int position() const = 0; - virtual void setPosition(int pos, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0; - virtual QWidget *current() const = 0; - virtual int widgetCount() const = 0; - virtual QWidget *widget(int index) const = 0; - virtual bool hasSelection() const = 0; - virtual int selectedWidgetCount() const = 0; - virtual QWidget *selectedWidget(int index) const = 0; - virtual void setProperty(const QString &name, const QVariant &value) = 0; - virtual void setWidgetProperty(QWidget *widget, const QString &name, const QVariant &value) = 0; - virtual void resetWidgetProperty(QWidget *widget, const QString &name) = 0; - bool isWidgetSelected(QWidget *widget) const; - -private: - QDesignerFormWindowCursorInterface(const QDesignerFormWindowCursorInterface &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowmanager.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowmanager.sip deleted file mode 100644 index e4103d3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractformwindowmanager.sip +++ /dev/null @@ -1,88 +0,0 @@ -// abstractformwindowmanager.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerFormWindowManagerInterface : public QObject /Abstract/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDesignerFormWindowManagerInterface(QObject *parent /TransferThis/ = 0); - virtual ~QDesignerFormWindowManagerInterface(); - QAction *actionFormLayout() const /Transfer/; - QAction *actionSimplifyLayout() const /Transfer/; - virtual QDesignerFormWindowInterface *activeFormWindow() const = 0; - virtual int formWindowCount() const = 0; - virtual QDesignerFormWindowInterface *formWindow(int index) const = 0 /Transfer/; - virtual QDesignerFormWindowInterface *createFormWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()) = 0; - virtual QDesignerFormEditorInterface *core() const = 0; - -signals: - void formWindowAdded(QDesignerFormWindowInterface *formWindow); - void formWindowRemoved(QDesignerFormWindowInterface *formWindow); - void activeFormWindowChanged(QDesignerFormWindowInterface *formWindow); - void formWindowSettingsChanged(QDesignerFormWindowInterface *fw); - -public slots: - virtual void addFormWindow(QDesignerFormWindowInterface *formWindow) = 0; - virtual void removeFormWindow(QDesignerFormWindowInterface *formWindow) = 0; - virtual void setActiveFormWindow(QDesignerFormWindowInterface *formWindow) = 0; - -public: - enum Action - { - CutAction, - CopyAction, - PasteAction, - DeleteAction, - SelectAllAction, - LowerAction, - RaiseAction, - UndoAction, - RedoAction, - HorizontalLayoutAction, - VerticalLayoutAction, - SplitHorizontalAction, - SplitVerticalAction, - GridLayoutAction, - FormLayoutAction, - BreakLayoutAction, - AdjustSizeAction, - SimplifyLayoutAction, - DefaultPreviewAction, - FormWindowSettingsDialogAction, - }; - - enum ActionGroup - { - StyledPreviewActionGroup, - }; - - virtual QAction *action(QDesignerFormWindowManagerInterface::Action action) const = 0 /Transfer/; - virtual QActionGroup *actionGroup(QDesignerFormWindowManagerInterface::ActionGroup actionGroup) const = 0 /Transfer/; - -public slots: - virtual void showPreview() = 0; - virtual void closeAllPreviews() = 0; - virtual void showPluginDialog() = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractobjectinspector.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractobjectinspector.sip deleted file mode 100644 index bac1593..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractobjectinspector.sip +++ /dev/null @@ -1,36 +0,0 @@ -// abstractobjectinspector.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerObjectInspectorInterface : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerObjectInspectorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = {}); - virtual ~QDesignerObjectInspectorInterface(); - virtual QDesignerFormEditorInterface *core() const; - -public slots: - virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractpropertyeditor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractpropertyeditor.sip deleted file mode 100644 index 41ba6c2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractpropertyeditor.sip +++ /dev/null @@ -1,44 +0,0 @@ -// abstractpropertyeditor.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerPropertyEditorInterface : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerPropertyEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = {}); - virtual ~QDesignerPropertyEditorInterface(); - virtual QDesignerFormEditorInterface *core() const; - virtual bool isReadOnly() const = 0; - virtual QObject *object() const = 0; - virtual QString currentPropertyName() const = 0; - -signals: - void propertyChanged(const QString &name, const QVariant &value); - -public slots: - virtual void setObject(QObject *object /KeepReference/) = 0; - virtual void setPropertyValue(const QString &name, const QVariant &value, bool changed = true) = 0; - virtual void setReadOnly(bool readOnly) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractwidgetbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractwidgetbox.sip deleted file mode 100644 index 218595a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/abstractwidgetbox.sip +++ /dev/null @@ -1,36 +0,0 @@ -// abstractwidgetbox.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerWidgetBoxInterface : public QWidget /Abstract/ -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerWidgetBoxInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QDesignerWidgetBoxInterface(); - virtual void setFileName(const QString &file_name) = 0; - virtual QString fileName() const = 0; - virtual bool load() = 0; - virtual bool save() = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/container.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/container.sip deleted file mode 100644 index d65f6c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/container.sip +++ /dev/null @@ -1,44 +0,0 @@ -// container.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerContainerExtension -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerContainerExtension(); - virtual ~QDesignerContainerExtension(); - virtual int count() const = 0 /__len__/; - virtual QWidget *widget(int index) const = 0; - virtual int currentIndex() const = 0; - virtual void setCurrentIndex(int index) = 0; - virtual void addWidget(QWidget *widget) = 0; - virtual void insertWidget(int index, QWidget *widget) = 0; - virtual void remove(int index) = 0; - virtual bool canAddWidget() const = 0; - virtual bool canRemove(int index) const = 0; - -private: - QDesignerContainerExtension(const QDesignerContainerExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/customwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/customwidget.sip deleted file mode 100644 index eaf642f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/customwidget.sip +++ /dev/null @@ -1,54 +0,0 @@ -// customwidget.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerCustomWidgetInterface -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QDesignerCustomWidgetInterface(); - virtual QString name() const = 0; - virtual QString group() const = 0; - virtual QString toolTip() const = 0; - virtual QString whatsThis() const = 0; - virtual QString includeFile() const = 0; - virtual QIcon icon() const = 0; - virtual bool isContainer() const = 0; - virtual QWidget *createWidget(QWidget *parent /TransferThis/) = 0 /Factory/; - virtual bool isInitialized() const; - virtual void initialize(QDesignerFormEditorInterface *core); - virtual QString domXml() const; - virtual QString codeTemplate() const; -}; - -class QDesignerCustomWidgetCollectionInterface -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QDesignerCustomWidgetCollectionInterface(); - virtual QList customWidgets() const = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/default_extensionfactory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/default_extensionfactory.sip deleted file mode 100644 index f53acc8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/default_extensionfactory.sip +++ /dev/null @@ -1,36 +0,0 @@ -// default_extensionfactory.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QExtensionFactory : public QObject, public QAbstractExtensionFactory -{ -%TypeHeaderCode -#include -%End - -public: - explicit QExtensionFactory(QExtensionManager *parent /TransferThis/ = 0); - virtual QObject *extension(QObject *object, const QString &iid) const; - QExtensionManager *extensionManager() const; - -protected: - virtual QObject *createExtension(QObject *object, const QString &iid, QObject *parent /TransferThis/) const /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/extension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/extension.sip deleted file mode 100644 index eeed4cd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/extension.sip +++ /dev/null @@ -1,45 +0,0 @@ -// extension.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractExtensionFactory -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QAbstractExtensionFactory(); - virtual QObject *extension(QObject *object, const QString &iid) const = 0; -}; - -class QAbstractExtensionManager -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QAbstractExtensionManager(); - virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0; - virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0; - virtual QObject *extension(QObject *object, const QString &iid) const = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/formbuilder.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/formbuilder.sip deleted file mode 100644 index 97160d5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/formbuilder.sip +++ /dev/null @@ -1,37 +0,0 @@ -// formbuilder.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFormBuilder : public QAbstractFormBuilder -{ -%TypeHeaderCode -#include -%End - -public: - QFormBuilder(); - virtual ~QFormBuilder(); - QStringList pluginPaths() const; - void clearPluginPaths(); - void addPluginPath(const QString &pluginPath); - void setPluginPath(const QStringList &pluginPaths); - QList customWidgets() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/membersheet.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/membersheet.sip deleted file mode 100644 index 3f4b07a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/membersheet.sip +++ /dev/null @@ -1,49 +0,0 @@ -// membersheet.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerMemberSheetExtension -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerMemberSheetExtension(); - virtual ~QDesignerMemberSheetExtension(); - virtual int count() const = 0 /__len__/; - virtual int indexOf(const QString &name) const = 0; - virtual QString memberName(int index) const = 0; - virtual QString memberGroup(int index) const = 0; - virtual void setMemberGroup(int index, const QString &group) = 0; - virtual bool isVisible(int index) const = 0; - virtual void setVisible(int index, bool b) = 0; - virtual bool isSignal(int index) const = 0; - virtual bool isSlot(int index) const = 0; - virtual bool inheritedFromWidget(int index) const = 0; - virtual QString declaredInClass(int index) const = 0; - virtual QString signature(int index) const = 0; - virtual QList parameterTypes(int index) const = 0; - virtual QList parameterNames(int index) const = 0; - -private: - QDesignerMemberSheetExtension(const QDesignerMemberSheetExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/propertysheet.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/propertysheet.sip deleted file mode 100644 index d2e365f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/propertysheet.sip +++ /dev/null @@ -1,51 +0,0 @@ -// propertysheet.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerPropertySheetExtension -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerPropertySheetExtension(); - virtual ~QDesignerPropertySheetExtension(); - virtual int count() const = 0 /__len__/; - virtual int indexOf(const QString &name) const = 0; - virtual QString propertyName(int index) const = 0; - virtual QString propertyGroup(int index) const = 0; - virtual void setPropertyGroup(int index, const QString &group) = 0; - virtual bool hasReset(int index) const = 0; - virtual bool reset(int index) = 0; - virtual bool isVisible(int index) const = 0; - virtual void setVisible(int index, bool b) = 0; - virtual bool isAttribute(int index) const = 0; - virtual void setAttribute(int index, bool b) = 0; - virtual QVariant property(int index) const = 0; - virtual void setProperty(int index, const QVariant &value) = 0; - virtual bool isChanged(int index) const = 0; - virtual void setChanged(int index, bool changed) = 0; - virtual bool isEnabled(int index) const = 0; - -private: - QDesignerPropertySheetExtension(const QDesignerPropertySheetExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qextensionmanager.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qextensionmanager.sip deleted file mode 100644 index 8b08ac1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qextensionmanager.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qextensionmanager.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QExtensionManager : public QObject, public QAbstractExtensionManager -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QPyDesignerCustomWidgetPlugin, &sipType_QPyDesignerCustomWidgetPlugin, -1, 1}, - {sipName_QExtensionFactory, &sipType_QExtensionFactory, -1, 2}, - {sipName_QPyDesignerMemberSheetExtension, &sipType_QPyDesignerMemberSheetExtension, -1, 3}, - {sipName_QDesignerFormEditorInterface, &sipType_QDesignerFormEditorInterface, -1, 4}, - {sipName_QDesignerWidgetBoxInterface, &sipType_QDesignerWidgetBoxInterface, -1, 5}, - {sipName_QDesignerFormWindowInterface, &sipType_QDesignerFormWindowInterface, -1, 6}, - {sipName_QDesignerActionEditorInterface, &sipType_QDesignerActionEditorInterface, -1, 7}, - {sipName_QPyDesignerContainerExtension, &sipType_QPyDesignerContainerExtension, -1, 8}, - {sipName_QDesignerPropertyEditorInterface, &sipType_QDesignerPropertyEditorInterface, -1, 9}, - {sipName_QDesignerFormWindowManagerInterface, &sipType_QDesignerFormWindowManagerInterface, -1, 10}, - {sipName_QPyDesignerTaskMenuExtension, &sipType_QPyDesignerTaskMenuExtension, -1, 11}, - {sipName_QPyDesignerPropertySheetExtension, &sipType_QPyDesignerPropertySheetExtension, -1, 12}, - {sipName_QDesignerObjectInspectorInterface, &sipType_QDesignerObjectInspectorInterface, -1, 13}, - {sipName_QPyDesignerCustomWidgetCollectionPlugin, &sipType_QPyDesignerCustomWidgetCollectionPlugin, -1, 14}, - {sipName_QExtensionManager, &sipType_QExtensionManager, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - explicit QExtensionManager(QObject *parent /TransferThis/ = 0); - virtual ~QExtensionManager(); - virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()); - virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()); - virtual QObject *extension(QObject *object, const QString &iid) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercontainerextension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercontainerextension.sip deleted file mode 100644 index 92ec52c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercontainerextension.sip +++ /dev/null @@ -1,32 +0,0 @@ -// This is the SIP specification of the QPyDesignerContainerExtension class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerContainerExtension : QObject, QDesignerContainerExtension -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerContainerExtension(QObject *parent /TransferThis/); - -private: - QPyDesignerContainerExtension(const QPyDesignerContainerExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip deleted file mode 100644 index 9d2e429..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip +++ /dev/null @@ -1,33 +0,0 @@ -// This is the SIP specification of the QPyDesignerCustomWidgetCollectionPlugin -// class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerCustomWidgetCollectionPlugin : QObject, QDesignerCustomWidgetCollectionInterface -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerCustomWidgetCollectionPlugin(QObject *parent /TransferThis/ = 0); - -private: - QPyDesignerCustomWidgetCollectionPlugin(const QPyDesignerCustomWidgetCollectionPlugin &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip deleted file mode 100644 index 34148e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip +++ /dev/null @@ -1,32 +0,0 @@ -// This is the SIP specification of the QPyDesignerCustomWidgetPlugin class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerCustomWidgetPlugin : QObject, QDesignerCustomWidgetInterface -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerCustomWidgetPlugin(QObject *parent /TransferThis/ = 0); - -private: - QPyDesignerCustomWidgetPlugin(const QPyDesignerCustomWidgetPlugin &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignermembersheetextension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignermembersheetextension.sip deleted file mode 100644 index 98fcb0f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignermembersheetextension.sip +++ /dev/null @@ -1,32 +0,0 @@ -// This is the SIP specification of the QPyDesignerMemberSheetExtension class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerMemberSheetExtension : QObject, QDesignerMemberSheetExtension -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerMemberSheetExtension(QObject *parent /TransferThis/); - -private: - QPyDesignerMemberSheetExtension(const QPyDesignerMemberSheetExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignerpropertysheetextension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignerpropertysheetextension.sip deleted file mode 100644 index eefca47..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignerpropertysheetextension.sip +++ /dev/null @@ -1,33 +0,0 @@ -// This is the SIP specification of the QPyDesignerPropertySheetExtension -// class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerPropertySheetExtension : QObject, QDesignerPropertySheetExtension -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerPropertySheetExtension(QObject *parent /TransferThis/); - -private: - QPyDesignerPropertySheetExtension(const QPyDesignerPropertySheetExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignertaskmenuextension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignertaskmenuextension.sip deleted file mode 100644 index de4f6d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/qpydesignertaskmenuextension.sip +++ /dev/null @@ -1,32 +0,0 @@ -// This is the SIP specification of the QPyDesignerTaskMenuExtension class. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPyDesignerTaskMenuExtension : QObject, QDesignerTaskMenuExtension -{ -%TypeHeaderCode -#include -%End - -public: - QPyDesignerTaskMenuExtension(QObject *parent /TransferThis/); - -private: - QPyDesignerTaskMenuExtension(const QPyDesignerTaskMenuExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/taskmenu.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/taskmenu.sip deleted file mode 100644 index 3d09db0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtDesigner/taskmenu.sip +++ /dev/null @@ -1,37 +0,0 @@ -// taskmenu.sip generated by MetaSIP -// -// This file is part of the QtDesigner Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesignerTaskMenuExtension -{ -%TypeHeaderCode -#include -%End - -public: - QDesignerTaskMenuExtension(); - virtual ~QDesignerTaskMenuExtension(); - virtual QList taskActions() const = 0; - virtual QAction *preferredEditAction() const; - -private: - QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGui.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGui.toml deleted file mode 100644 index f434e99..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGui.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtGui. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGuimod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGuimod.sip deleted file mode 100644 index 1238cb9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/QtGuimod.sip +++ /dev/null @@ -1,137 +0,0 @@ -// QtGuimod.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtGui, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qabstractfileiconprovider.sip -%Include qabstracttextdocumentlayout.sip -%Include qaction.sip -%Include qactiongroup.sip -%Include qbackingstore.sip -%Include qbitmap.sip -%Include qcolor.sip -%Include qbrush.sip -%Include qclipboard.sip -%Include qcolorspace.sip -%Include qcolortransform.sip -%Include qcursor.sip -%Include qdesktopservices.sip -%Include qdrag.sip -%Include qevent.sip -%Include qeventpoint.sip -%Include qfilesystemmodel.sip -%Include qfont.sip -%Include qfontdatabase.sip -%Include qfontinfo.sip -%Include qfontmetrics.sip -%Include qgenericmatrix.sip -%Include qglyphrun.sip -%Include qguiapplication.sip -%Include qicon.sip -%Include qiconengine.sip -%Include qimage.sip -%Include qimageiohandler.sip -%Include qimagereader.sip -%Include qimagewriter.sip -%Include qinputdevice.sip -%Include qinputmethod.sip -%Include qkeysequence.sip -%Include qmatrix4x4.sip -%Include qmovie.sip -%Include qoffscreensurface.sip -%Include qopenglcontext.sip -%Include qpagedpaintdevice.sip -%Include qpagelayout.sip -%Include qpageranges.sip -%Include qpagesize.sip -%Include qpaintdevice.sip -%Include qpaintdevicewindow.sip -%Include qpaintengine.sip -%Include qpainter.sip -%Include qpainterpath.sip -%Include qpalette.sip -%Include qpdfwriter.sip -%Include qpen.sip -%Include qpicture.sip -%Include qpixelformat.sip -%Include qpixmap.sip -%Include qpixmapcache.sip -%Include qpointingdevice.sip -%Include qpolygon.sip -%Include qquaternion.sip -%Include qrasterwindow.sip -%Include qrawfont.sip -%Include qregion.sip -%Include qrgba64.sip -%Include qrgb.sip -%Include qscreen.sip -%Include qsessionmanager.sip -%Include qshortcut.sip -%Include qstandarditemmodel.sip -%Include qstatictext.sip -%Include qstylehints.sip -%Include qsurface.sip -%Include qsurfaceformat.sip -%Include qsyntaxhighlighter.sip -%Include qtextcursor.sip -%Include qtextdocument.sip -%Include qtextdocumentfragment.sip -%Include qtextdocumentwriter.sip -%Include qtextformat.sip -%Include qtextlayout.sip -%Include qtextlist.sip -%Include qtextobject.sip -%Include qtextoption.sip -%Include qtexttable.sip -%Include qtransform.sip -%Include qundogroup.sip -%Include qundostack.sip -%Include qutimimeconverter.sip -%Include qvalidator.sip -%Include qvectornd.sip -%Include qwindow.sip -%Include qwindowdefs.sip -%Include opengl_types.sip -%Include qpygui_qlist.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/opengl_types.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/opengl_types.sip deleted file mode 100644 index 8212c22..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/opengl_types.sip +++ /dev/null @@ -1,43 +0,0 @@ -// This implements the typedefs for the OpenGL data types. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_OpenGL) - -typedef char GLchar; -typedef qint8 GLbyte; -typedef quint8 GLubyte; -typedef quint8 GLboolean; -typedef qint16 GLshort; -typedef quint16 GLushort; -typedef qint32 GLint; -typedef qint32 GLsizei; -typedef quint32 GLuint; -typedef quint32 GLenum; -typedef quint32 GLbitfield; -%If (!PyQt_OpenGL_ES2) -typedef quint64 GLuint64; // This is in OpenGL ES v3. -typedef double GLdouble; -%End -typedef float GLfloat; -typedef float GLclampf; -typedef long GLintptr; -typedef long GLsizeiptr; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstractfileiconprovider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstractfileiconprovider.sip deleted file mode 100644 index 15d46e3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstractfileiconprovider.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qabstractfileiconprovider.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractFileIconProvider -{ -%TypeHeaderCode -#include -%End - -public: - enum IconType - { - Computer, - Desktop, - Trashcan, - Network, - Drive, - Folder, - File, - }; - - enum Option /BaseType=Flag/ - { - DontUseCustomDirectoryIcons, - }; - - typedef QFlags Options; - QAbstractFileIconProvider(); - virtual ~QAbstractFileIconProvider(); - virtual QIcon icon(QAbstractFileIconProvider::IconType) const; - virtual QIcon icon(const QFileInfo &) const; - virtual QString type(const QFileInfo &) const; - virtual void setOptions(QAbstractFileIconProvider::Options); - virtual QAbstractFileIconProvider::Options options() const; - -private: - QAbstractFileIconProvider(const QAbstractFileIconProvider &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstracttextdocumentlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstracttextdocumentlayout.sip deleted file mode 100644 index 58d8718..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qabstracttextdocumentlayout.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qabstracttextdocumentlayout.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractTextDocumentLayout : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractTextDocumentLayout(QTextDocument *doc); - virtual ~QAbstractTextDocumentLayout(); - - struct Selection - { -%TypeHeaderCode -#include -%End - - QTextCursor cursor; - QTextCharFormat format; - }; - - struct PaintContext - { -%TypeHeaderCode -#include -%End - - PaintContext(); - int cursorPosition; - QPalette palette; - QRectF clip; - QList selections; - }; - - virtual void draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0; - virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0; - QString anchorAt(const QPointF &pos) const; - virtual int pageCount() const = 0; - virtual QSizeF documentSize() const = 0; - virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0; - virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0; - void setPaintDevice(QPaintDevice *device); - QPaintDevice *paintDevice() const; - QTextDocument *document() const; - void registerHandler(int objectType, QObject *component); - void unregisterHandler(int objectType, QObject *component = 0); - QTextObjectInterface *handlerForObject(int objectType) const; - -signals: - void update(const QRectF &rect = QRectF(0., 0., 1.0E+9, 1.0E+9)); - void documentSizeChanged(const QSizeF &newSize); - void pageCountChanged(int newPages); - void updateBlock(const QTextBlock &block); - -protected: - virtual void documentChanged(int from, int charsRemoved, int charsAdded) = 0; - virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format); - virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format); - virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format); - QTextCharFormat format(int pos); - -public: - QString imageAt(const QPointF &pos) const; - QTextFormat formatAt(const QPointF &pos) const; - QTextBlock blockWithMarkerAt(const QPointF &pos) const; -}; - -class QTextObjectInterface /Mixin,PyQtInterface="org.qt-project.Qt.QTextObjectInterface"/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QTextObjectInterface(); - virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; - virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qaction.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qaction.sip deleted file mode 100644 index 73feec6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qaction.sip +++ /dev/null @@ -1,154 +0,0 @@ -// qaction.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMenu /External/; - -class QAction : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAction(QObject *parent /TransferThis/ = 0); - QAction(const QString &text, QObject *parent /TransferThis/ = 0); - QAction(const QIcon &icon, const QString &text, QObject *parent /TransferThis/ = 0); - virtual ~QAction(); - void setActionGroup(QActionGroup *group /KeepReference/); - QActionGroup *actionGroup() const; - void setIcon(const QIcon &icon); - QIcon icon() const; - void setText(const QString &text); - QString text() const; - void setIconText(const QString &text); - QString iconText() const; - void setToolTip(const QString &tip); - QString toolTip() const; - void setStatusTip(const QString &statusTip); - QString statusTip() const; - void setWhatsThis(const QString &what); - QString whatsThis() const; - void setSeparator(bool b); - bool isSeparator() const; - void setShortcut(const QKeySequence &shortcut); - QKeySequence shortcut() const; - void setShortcutContext(Qt::ShortcutContext context); - Qt::ShortcutContext shortcutContext() const; - void setFont(const QFont &font); - QFont font() const; - void setCheckable(bool); - bool isCheckable() const; - QVariant data() const; - void setData(const QVariant &var); - bool isChecked() const; - bool isEnabled() const; - bool isVisible() const; - - enum ActionEvent - { - Trigger, - Hover, - }; - - void activate(QAction::ActionEvent event); - bool showStatusText(QObject *object = 0); - -protected: - virtual bool event(QEvent *); - -public slots: - void trigger(); - void hover(); - void setChecked(bool); - void toggle(); - void setEnabled(bool); - void setDisabled(bool b); - void setVisible(bool); - -signals: - void changed(); - void triggered(bool checked = false); - void hovered(); - void toggled(bool); - -public: - enum MenuRole - { - NoRole, - TextHeuristicRole, - ApplicationSpecificRole, - AboutQtRole, - AboutRole, - PreferencesRole, - QuitRole, - }; - - void setShortcuts(const QList &shortcuts); - void setShortcuts(QKeySequence::StandardKey); - QList shortcuts() const; - void setAutoRepeat(bool); - bool autoRepeat() const; - void setMenuRole(QAction::MenuRole menuRole); - QAction::MenuRole menuRole() const; - QMenu *menu() const; -%MethodCode - typedef QMenu *(*pyqt6_qtgui_qaction_menu_t)(const QAction *); - - pyqt6_qtgui_qaction_menu_t pyqt6_qtgui_qaction_menu = (pyqt6_qtgui_qaction_menu_t)sipImportSymbol("pyqt6_qaction_menu"); - - sipRes = (pyqt6_qtgui_qaction_menu ? pyqt6_qtgui_qaction_menu(sipCpp) : SIP_NULLPTR); -%End - - void setMenu(QMenu *menu); -%MethodCode - typedef void *(*pyqt6_qtgui_qaction_set_menu_t)(QAction *, QMenu *); - - pyqt6_qtgui_qaction_set_menu_t pyqt6_qtgui_qaction_set_menu = (pyqt6_qtgui_qaction_set_menu_t)sipImportSymbol("pyqt6_qaction_set_menu"); - - if (pyqt6_qtgui_qaction_set_menu) - pyqt6_qtgui_qaction_set_menu(sipCpp, a0); -%End - - void setIconVisibleInMenu(bool visible); - bool isIconVisibleInMenu() const; - - enum Priority - { - LowPriority, - NormalPriority, - HighPriority, - }; - - void setPriority(QAction::Priority priority); - QAction::Priority priority() const; - void setShortcutVisibleInContextMenu(bool show); - bool isShortcutVisibleInContextMenu() const; - QList associatedObjects() const; - -public slots: - void resetEnabled(); - -signals: - void enabledChanged(bool enabled); - void checkableChanged(bool checkable); - void visibleChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qactiongroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qactiongroup.sip deleted file mode 100644 index fd969d9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qactiongroup.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qactiongroup.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QActionGroup : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QActionGroup(QObject *parent /TransferThis/); - virtual ~QActionGroup(); - QAction *addAction(QAction *a /Transfer/); - QAction *addAction(const QString &text) /Transfer/; - QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; - void removeAction(QAction *a /TransferBack/); - QList actions() const; - QAction *checkedAction() const; - bool isExclusive() const; - bool isEnabled() const; - bool isVisible() const; - - enum class ExclusionPolicy - { - None, - Exclusive, - ExclusiveOptional, - }; - - QActionGroup::ExclusionPolicy exclusionPolicy() const; - -public slots: - void setEnabled(bool); - void setDisabled(bool b); - void setVisible(bool); - void setExclusive(bool); - void setExclusionPolicy(QActionGroup::ExclusionPolicy policy); - -signals: - void triggered(QAction *); - void hovered(QAction *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbackingstore.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbackingstore.sip deleted file mode 100644 index 36ef444..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbackingstore.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qbackingstore.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBackingStore /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QBackingStore(QWindow *window); - ~QBackingStore(); - QWindow *window() const; - QPaintDevice *paintDevice(); - void flush(const QRegion ®ion, QWindow *window = 0, const QPoint &offset = QPoint()); - void resize(const QSize &size); - QSize size() const; - bool scroll(const QRegion &area, int dx, int dy); - void beginPaint(const QRegion &); - void endPaint(); - void setStaticContents(const QRegion ®ion); - QRegion staticContents() const; - bool hasStaticContents() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbitmap.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbitmap.sip deleted file mode 100644 index d3c71e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbitmap.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qbitmap.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBitmap : public QPixmap -{ -%TypeHeaderCode -#include -%End - -public: - QBitmap(); - QBitmap(int w, int h); - explicit QBitmap(const QSize &); - QBitmap(const QString &fileName, const char *format = 0); - QBitmap(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new sipQBitmap(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - -%If (Qt_6_3_0 -) - virtual ~QBitmap(); -%End - void clear(); - static QBitmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor); - static QBitmap fromPixmap(const QPixmap &pixmap); - static QBitmap fromData(const QSize &size, const uchar *bits, QImage::Format format = QImage::Format_MonoLSB); - QBitmap transformed(const QTransform &matrix) const; - void swap(QBitmap &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbrush.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbrush.sip deleted file mode 100644 index 7a71fbd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qbrush.sip +++ /dev/null @@ -1,422 +0,0 @@ -// qbrush.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBrush /TypeHintIn="Union[QBrush, QColor, QGradient]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// SIP doesn't support automatic type convertors so we explicitly allow a -// QColor or a QGradient to be used whenever a QBrush is expected. Note that -// SIP must process QColor before QBrush so that the former's QVariant cast -// operator is applied before the latter's. - -if (sipIsErr == NULL) - return (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS) || - sipCanConvertToType(sipPy, sipType_QColor, 0) || - sipCanConvertToType(sipPy, sipType_QGradient, 0)); - -if (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS)) -{ - *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QBrush, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - - return 0; -} - -int state; - -if (sipCanConvertToType(sipPy, sipType_QColor, 0)) -{ - QColor *c = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr)); - - if (*sipIsErr) - { - sipReleaseType(c, sipType_QColor, state); - return 0; - } - - *sipCppPtr = new QBrush(*c); - - sipReleaseType(c, sipType_QColor, state); - - return sipGetState(sipTransferObj); -} - -QGradient *g = reinterpret_cast(sipConvertToType(sipPy, sipType_QGradient, 0, 0, &state, sipIsErr)); - -if (*sipIsErr) -{ - sipReleaseType(g, sipType_QGradient, state); - return 0; -} - -*sipCppPtr = new QBrush(*g); - -sipReleaseType(g, sipType_QGradient, state); - -return sipGetState(sipTransferObj); -%End - -public: - QBrush(); - QBrush(Qt::BrushStyle bs); - QBrush(const QColor &color, Qt::BrushStyle style = Qt::SolidPattern); - QBrush(const QColor &color, const QPixmap &pixmap); - QBrush(const QPixmap &pixmap); - QBrush(const QImage &image); - QBrush(const QBrush &brush); - QBrush(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QBrush(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QBrush(); - void setStyle(Qt::BrushStyle); - QPixmap texture() const; - void setTexture(const QPixmap &pixmap); - void setColor(const QColor &color); - const QGradient *gradient() const; - bool isOpaque() const; - bool operator==(const QBrush &b) const; - bool operator!=(const QBrush &b) const; - void setColor(Qt::GlobalColor acolor); - Qt::BrushStyle style() const; - const QColor &color() const; - void setTextureImage(const QImage &image); - QImage textureImage() const; - void setTransform(const QTransform &); - QTransform transform() const; - void swap(QBrush &other /Constrained/); -}; - -QDataStream &operator>>(QDataStream &, QBrush & /Constrained/) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &, const QBrush & /Constrained/) /ReleaseGIL/; -typedef QList> QGradientStops; - -class QGradient -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QGradient::ConicalGradient: - sipType = sipType_QConicalGradient; - break; - - case QGradient::LinearGradient: - sipType = sipType_QLinearGradient; - break; - - case QGradient::RadialGradient: - sipType = sipType_QRadialGradient; - break; - - default: - sipType = 0; - } -%End - -public: - enum CoordinateMode - { - LogicalMode, - StretchToDeviceMode, - ObjectBoundingMode, - ObjectMode, - }; - - enum Type - { - LinearGradient, - RadialGradient, - ConicalGradient, - NoGradient, - }; - - enum Spread - { - PadSpread, - ReflectSpread, - RepeatSpread, - }; - - enum Preset - { - WarmFlame, - NightFade, - SpringWarmth, - JuicyPeach, - YoungPassion, - LadyLips, - SunnyMorning, - RainyAshville, - FrozenDreams, - WinterNeva, - DustyGrass, - TemptingAzure, - HeavyRain, - AmyCrisp, - MeanFruit, - DeepBlue, - RipeMalinka, - CloudyKnoxville, - MalibuBeach, - NewLife, - TrueSunset, - MorpheusDen, - RareWind, - NearMoon, - WildApple, - SaintPetersburg, - PlumPlate, - EverlastingSky, - HappyFisher, - Blessing, - SharpeyeEagle, - LadogaBottom, - LemonGate, - ItmeoBranding, - ZeusMiracle, - OldHat, - StarWine, - HappyAcid, - AwesomePine, - NewYork, - ShyRainbow, - MixedHopes, - FlyHigh, - StrongBliss, - FreshMilk, - SnowAgain, - FebruaryInk, - KindSteel, - SoftGrass, - GrownEarly, - SharpBlues, - ShadyWater, - DirtyBeauty, - GreatWhale, - TeenNotebook, - PoliteRumors, - SweetPeriod, - WideMatrix, - SoftCherish, - RedSalvation, - BurningSpring, - NightParty, - SkyGlider, - HeavenPeach, - PurpleDivision, - AquaSplash, - SpikyNaga, - LoveKiss, - CleanMirror, - PremiumDark, - ColdEvening, - CochitiLake, - SummerGames, - PassionateBed, - MountainRock, - DesertHump, - JungleDay, - PhoenixStart, - OctoberSilence, - FarawayRiver, - AlchemistLab, - OverSun, - PremiumWhite, - MarsParty, - EternalConstance, - JapanBlush, - SmilingRain, - CloudyApple, - BigMango, - HealthyWater, - AmourAmour, - RiskyConcrete, - StrongStick, - ViciousStance, - PaloAlto, - HappyMemories, - MidnightBloom, - Crystalline, - PartyBliss, - ConfidentCloud, - LeCocktail, - RiverCity, - FrozenBerry, - ChildCare, - FlyingLemon, - NewRetrowave, - HiddenJaguar, - AboveTheSky, - Nega, - DenseWater, - Seashore, - MarbleWall, - CheerfulCaramel, - NightSky, - MagicLake, - YoungGrass, - ColorfulPeach, - GentleCare, - PlumBath, - HappyUnicorn, - AfricanField, - SolidStone, - OrangeJuice, - GlassWater, - NorthMiracle, - FruitBlend, - MillenniumPine, - HighFlight, - MoleHall, - SpaceShift, - ForestInei, - RoyalGarden, - RichMetal, - JuicyCake, - SmartIndigo, - SandStrike, - NorseBeauty, - AquaGuidance, - SunVeggie, - SeaLord, - BlackSea, - GrassShampoo, - LandingAircraft, - WitchDance, - SleeplessNight, - AngelCare, - CrystalRiver, - SoftLipstick, - SaltMountain, - PerfectWhite, - FreshOasis, - StrictNovember, - MorningSalad, - DeepRelief, - SeaStrike, - NightCall, - SupremeSky, - LightBlue, - MindCrawl, - LilyMeadow, - SugarLollipop, - SweetDessert, - MagicRay, - TeenParty, - FrozenHeat, - GagarinView, - FabledSunset, - PerfectBlue, - NumPresets, - }; - - QGradient(); - QGradient(QGradient::Preset); - ~QGradient(); - QGradient::Type type() const; - QGradient::Spread spread() const; - void setColorAt(qreal pos, const QColor &color); - void setStops(const QGradientStops &stops); - QGradientStops stops() const; - bool operator==(const QGradient &gradient) const; - bool operator!=(const QGradient &other) const; - void setSpread(QGradient::Spread aspread); - QGradient::CoordinateMode coordinateMode() const; - void setCoordinateMode(QGradient::CoordinateMode mode); -}; - -class QLinearGradient : public QGradient -{ -%TypeHeaderCode -#include -%End - -public: - QLinearGradient(); - QLinearGradient(const QPointF &start, const QPointF &finalStop); - QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop); - ~QLinearGradient(); - QPointF start() const; - QPointF finalStop() const; - void setStart(const QPointF &start); - void setStart(qreal x, qreal y); - void setFinalStop(const QPointF &stop); - void setFinalStop(qreal x, qreal y); -}; - -class QRadialGradient : public QGradient -{ -%TypeHeaderCode -#include -%End - -public: - QRadialGradient(); - QRadialGradient(const QPointF ¢er, qreal radius, const QPointF &focalPoint); - QRadialGradient(const QPointF ¢er, qreal centerRadius, const QPointF &focalPoint, qreal focalRadius); - QRadialGradient(const QPointF ¢er, qreal radius); - QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy); - QRadialGradient(qreal cx, qreal cy, qreal centerRadius, qreal fx, qreal fy, qreal focalRadius); - QRadialGradient(qreal cx, qreal cy, qreal radius); - ~QRadialGradient(); - QPointF center() const; - QPointF focalPoint() const; - qreal radius() const; - void setCenter(const QPointF ¢er); - void setCenter(qreal x, qreal y); - void setFocalPoint(const QPointF &focalPoint); - void setFocalPoint(qreal x, qreal y); - void setRadius(qreal radius); - qreal centerRadius() const; - void setCenterRadius(qreal radius); - qreal focalRadius() const; - void setFocalRadius(qreal radius); -}; - -class QConicalGradient : public QGradient -{ -%TypeHeaderCode -#include -%End - -public: - QConicalGradient(); - QConicalGradient(const QPointF ¢er, qreal startAngle); - QConicalGradient(qreal cx, qreal cy, qreal startAngle); - ~QConicalGradient(); - QPointF center() const; - qreal angle() const; - void setCenter(const QPointF ¢er); - void setCenter(qreal x, qreal y); - void setAngle(qreal angle); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qclipboard.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qclipboard.sip deleted file mode 100644 index 8f365fe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qclipboard.sip +++ /dev/null @@ -1,92 +0,0 @@ -// qclipboard.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QClipboard : public QObject -{ -%TypeHeaderCode -#include -%End - - explicit QClipboard(QObject *parent /TransferThis/); - virtual ~QClipboard(); - -public: - enum Mode - { - Clipboard, - Selection, - FindBuffer, - }; - - void clear(QClipboard::Mode mode = QClipboard::Clipboard); - bool supportsFindBuffer() const; - bool supportsSelection() const; - bool ownsClipboard() const; - bool ownsFindBuffer() const; - bool ownsSelection() const; - QString text(QClipboard::Mode mode = QClipboard::Clipboard) const; - SIP_PYTUPLE text(const QString &subtype, QClipboard::Mode mode = QClipboard::Clipboard) const /TypeHint="Tuple[QString, QString]"/; -%MethodCode - QString *text; - QString *subtype = new QString(*a0); - - Py_BEGIN_ALLOW_THREADS - text = new QString(sipCpp->text(*subtype, a1)); - Py_END_ALLOW_THREADS - - PyObject *text_obj = sipConvertFromNewType(text, sipType_QString, NULL); - PyObject *subtype_obj = sipConvertFromNewType(subtype, sipType_QString, NULL); - - if (text_obj && subtype_obj) - sipRes = PyTuple_Pack(2, text_obj, subtype_obj); - - Py_XDECREF(text_obj); - Py_XDECREF(subtype_obj); -%End - - void setText(const QString &, QClipboard::Mode mode = QClipboard::Clipboard); - const QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) const; - void setMimeData(QMimeData *data /GetWrapper/, QClipboard::Mode mode = QClipboard::Clipboard); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->setMimeData(a0, a1); - Py_END_ALLOW_THREADS - - // Transfer ownership to C++ and make sure the Python object stays alive by - // giving it a reference to itself. The cycle will be broken by QMimeData's - // virtual dtor. The reason we don't do the obvious and just use /Transfer/ is - // that the QClipboard Python object we would transfer ownership to is likely - // to be garbage collected immediately afterwards. - sipTransferTo(a0Wrapper, a0Wrapper); -%End - - QImage image(QClipboard::Mode mode = QClipboard::Clipboard) const; - QPixmap pixmap(QClipboard::Mode mode = QClipboard::Clipboard) const; - void setImage(const QImage &, QClipboard::Mode mode = QClipboard::Clipboard); - void setPixmap(const QPixmap &, QClipboard::Mode mode = QClipboard::Clipboard); - -signals: - void changed(QClipboard::Mode mode); - void dataChanged(); - void findBufferChanged(); - void selectionChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolor.sip deleted file mode 100644 index 7bf7173..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolor.sip +++ /dev/null @@ -1,397 +0,0 @@ -// qcolor.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QColor /TypeHintIn="Union[QColor, Qt.GlobalColor, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// SIP doesn't support automatic type convertors so we explicitly allow a -// Qt::GlobalColor or an (unsigned) int to be used whenever a QColor is -// expected. Note that SIP must process QColor before QBrush so that the -// former's QVariant cast operator is applied before the latter's. - -if (PyLong_Check(sipPy)) -{ - if (sipIsErr == NULL) - return 1; - - unsigned long argb = PyLong_AsUnsignedLong(sipPy); - - if (PyErr_Occurred()) - { - PyErr_Clear(); - *sipIsErr = 1; - return 0; - } - - *sipCppPtr = new QColor(static_cast(argb)); - - return sipGetState(sipTransferObj); -} - -bool is_global_color = true; -int global_color = sipConvertToEnum(sipPy, sipType_Qt_GlobalColor); - -if (PyErr_Occurred()) -{ - PyErr_Clear(); - is_global_color = false; -} - -if (sipIsErr == NULL) - return (is_global_color || - sipCanConvertToType(sipPy, sipType_QColor, SIP_NO_CONVERTORS)); - -if (is_global_color) -{ - *sipCppPtr = new QColor(static_cast(global_color)); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -%PickleCode - sipRes = Py_BuildValue("iiii", sipCpp->red(), sipCpp->green(), sipCpp->blue(), sipCpp->alpha()); -%End - -public: - enum Spec - { - Invalid, - Rgb, - Hsv, - Cmyk, - Hsl, - ExtendedRgb, - }; - - QColor(Qt::GlobalColor color); - QColor(QRgb rgb); - QColor(QRgba64 rgba64); - QColor(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QColor(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - QString name(QColor::NameFormat format = QColor::HexRgb) const; - void setNamedColor(QStringView name); - static QStringList colorNames(); - QColor::Spec spec() const; - int alpha() const; - void setAlpha(int alpha); - float alphaF() const; - void setAlphaF(float alpha); - int red() const; - int green() const; - int blue() const; - void setRed(int red); - void setGreen(int green); - void setBlue(int blue); - float redF() const; - float greenF() const; - float blueF() const; - void setRedF(float red); - void setGreenF(float green); - void setBlueF(float blue); - void getRgb(int *r, int *g, int *b, int *alpha = 0) const; - void setRgb(int r, int g, int b, int alpha = 255); - void getRgbF(float *r, float *g, float *b, float *alpha = 0) const; - void setRgbF(float r, float g, float b, float alpha = 1.); - QRgb rgba() const; - void setRgba(QRgb rgba); - QRgb rgb() const; - void setRgb(QRgb rgb); - int hue() const; - int saturation() const; - int value() const; - float hueF() const; - float saturationF() const; - float valueF() const; - void getHsv(int *h, int *s, int *v, int *alpha = 0) const; - void setHsv(int h, int s, int v, int alpha = 255); - void getHsvF(float *h, float *s, float *v, float *alpha = 0) const; - void setHsvF(float h, float s, float v, float alpha = 1.); - int cyan() const; - int magenta() const; - int yellow() const; - int black() const; - float cyanF() const; - float magentaF() const; - float yellowF() const; - float blackF() const; - void getCmyk(int *c, int *m, int *y, int *k, int *alpha = 0) const; - void setCmyk(int c, int m, int y, int k, int alpha = 255); - void getCmykF(float *c, float *m, float *y, float *k, float *alpha = 0) const; - void setCmykF(float c, float m, float y, float k, float alpha = 1.); - QColor toRgb() const; - QColor toHsv() const; - QColor toCmyk() const; - QColor convertTo(QColor::Spec colorSpec) const; - static QColor fromRgb(QRgb rgb); - static QColor fromRgba(QRgb rgba); - static QColor fromRgb(int r, int g, int b, int alpha = 255); - static QColor fromRgbF(float r, float g, float b, float alpha = 1.); - static QColor fromHsv(int h, int s, int v, int alpha = 255); - static QColor fromHsvF(float h, float s, float v, float alpha = 1.); - static QColor fromCmyk(int c, int m, int y, int k, int alpha = 255); - static QColor fromCmykF(float c, float m, float y, float k, float alpha = 1.); - bool operator==(const QColor &c) const; - bool operator!=(const QColor &c) const; - QColor(); - QColor(int r, int g, int b, int alpha = 255); - explicit QColor(QStringView name); - bool isValid() const; - QColor lighter(int factor = 150) const; - QColor darker(int factor = 200) const; - int hsvHue() const; - int hsvSaturation() const; - float hsvHueF() const; - float hsvSaturationF() const; - int hslHue() const; - int hslSaturation() const; - int lightness() const; - float hslHueF() const; - float hslSaturationF() const; - float lightnessF() const; - void getHsl(int *h, int *s, int *l, int *alpha = 0) const; - void setHsl(int h, int s, int l, int alpha = 255); - void getHslF(float *h, float *s, float *l, float *alpha = 0) const; - void setHslF(float h, float s, float l, float alpha = 1.); - QColor toHsl() const; - static QColor fromHsl(int h, int s, int l, int alpha = 255); - static QColor fromHslF(float h, float s, float l, float alpha = 1.); - static bool isValidColor(const QString &name); - - enum NameFormat - { - HexRgb, - HexArgb, - }; - - QRgba64 rgba64() const; - void setRgba64(QRgba64 rgba); - static QColor fromRgba64(ushort r, ushort g, ushort b, ushort alpha = USHRT_MAX); - static QColor fromRgba64(QRgba64 rgba); - QColor toExtendedRgb() const; -%If (Qt_6_4_0 -) - static QColor fromString(QAnyStringView name); -%End -%If (Qt_6_4_0 -) - static bool isValidColorName(QAnyStringView); -%End -}; - -QDataStream &operator<<(QDataStream &, const QColor &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QColor & /Constrained/) /ReleaseGIL/; - -namespace QColorConstants -{ -%TypeHeaderCode -#include -%End - - const QColor Color0; - const QColor Color1; - const QColor Black; - const QColor White; - const QColor DarkGray; - const QColor Gray; - const QColor LightGray; - const QColor Red; - const QColor Green; - const QColor Blue; - const QColor Cyan; - const QColor Magenta; - const QColor Yellow; - const QColor DarkRed; - const QColor DarkGreen; - const QColor DarkBlue; - const QColor DarkCyan; - const QColor DarkMagenta; - const QColor DarkYellow; - const QColor Transparent; - - namespace Svg - { -%TypeHeaderCode -#include -%End - - const QColor aliceblue; - const QColor antiquewhite; - const QColor aqua; - const QColor aquamarine; - const QColor azure; - const QColor beige; - const QColor bisque; - const QColor black; - const QColor blanchedalmond; - const QColor blue; - const QColor blueviolet; - const QColor brown; - const QColor burlywood; - const QColor cadetblue; - const QColor chartreuse; - const QColor chocolate; - const QColor coral; - const QColor cornflowerblue; - const QColor cornsilk; - const QColor crimson; - const QColor cyan; - const QColor darkblue; - const QColor darkcyan; - const QColor darkgoldenrod; - const QColor darkgray; - const QColor darkgreen; - const QColor darkgrey; - const QColor darkkhaki; - const QColor darkmagenta; - const QColor darkolivegreen; - const QColor darkorange; - const QColor darkorchid; - const QColor darkred; - const QColor darksalmon; - const QColor darkseagreen; - const QColor darkslateblue; - const QColor darkslategray; - const QColor darkslategrey; - const QColor darkturquoise; - const QColor darkviolet; - const QColor deeppink; - const QColor deepskyblue; - const QColor dimgray; - const QColor dimgrey; - const QColor dodgerblue; - const QColor firebrick; - const QColor floralwhite; - const QColor forestgreen; - const QColor fuchsia; - const QColor gainsboro; - const QColor ghostwhite; - const QColor gold; - const QColor goldenrod; - const QColor gray; - const QColor green; - const QColor greenyellow; - const QColor grey; - const QColor honeydew; - const QColor hotpink; - const QColor indianred; - const QColor indigo; - const QColor ivory; - const QColor khaki; - const QColor lavender; - const QColor lavenderblush; - const QColor lawngreen; - const QColor lemonchiffon; - const QColor lightblue; - const QColor lightcoral; - const QColor lightcyan; - const QColor lightgoldenrodyellow; - const QColor lightgray; - const QColor lightgreen; - const QColor lightgrey; - const QColor lightpink; - const QColor lightsalmon; - const QColor lightseagreen; - const QColor lightskyblue; - const QColor lightslategray; - const QColor lightslategrey; - const QColor lightsteelblue; - const QColor lightyellow; - const QColor lime; - const QColor limegreen; - const QColor linen; - const QColor magenta; - const QColor maroon; - const QColor mediumaquamarine; - const QColor mediumblue; - const QColor mediumorchid; - const QColor mediumpurple; - const QColor mediumseagreen; - const QColor mediumslateblue; - const QColor mediumspringgreen; - const QColor mediumturquoise; - const QColor mediumvioletred; - const QColor midnightblue; - const QColor mintcream; - const QColor mistyrose; - const QColor moccasin; - const QColor navajowhite; - const QColor navy; - const QColor oldlace; - const QColor olive; - const QColor olivedrab; - const QColor orange; - const QColor orangered; - const QColor orchid; - const QColor palegoldenrod; - const QColor palegreen; - const QColor paleturquoise; - const QColor palevioletred; - const QColor papayawhip; - const QColor peachpuff; - const QColor peru; - const QColor pink; - const QColor plum; - const QColor powderblue; - const QColor purple; - const QColor red; - const QColor rosybrown; - const QColor royalblue; - const QColor saddlebrown; - const QColor salmon; - const QColor sandybrown; - const QColor seagreen; - const QColor seashell; - const QColor sienna; - const QColor silver; - const QColor skyblue; - const QColor slateblue; - const QColor slategray; - const QColor slategrey; - const QColor snow; - const QColor springgreen; - const QColor steelblue; - const QColor tan; - const QColor teal; - const QColor thistle; - const QColor tomato; - const QColor turquoise; - const QColor violet; - const QColor wheat; - const QColor white; - const QColor whitesmoke; - const QColor yellow; - const QColor yellowgreen; - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolorspace.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolorspace.sip deleted file mode 100644 index a4660e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolorspace.sip +++ /dev/null @@ -1,108 +0,0 @@ -// qcolorspace.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QColorSpace -{ -%TypeHeaderCode -#include -%End - -public: - enum NamedColorSpace - { - SRgb, - SRgbLinear, - AdobeRgb, - DisplayP3, - ProPhotoRgb, - }; - - enum class Primaries - { - Custom, - SRgb, - AdobeRgb, - DciP3D65, - ProPhotoRgb, - }; - - enum class TransferFunction - { - Custom, - Linear, - Gamma, - SRgb, - ProPhotoRgb, - }; - - QColorSpace(); - QColorSpace(QColorSpace::NamedColorSpace namedColorSpace); - QColorSpace(QColorSpace::Primaries primaries, QColorSpace::TransferFunction fun, float gamma = 0.F); - QColorSpace(QColorSpace::Primaries primaries, float gamma); -%If (Qt_6_1_0 -) - QColorSpace(QColorSpace::Primaries primaries, const QList &transferFunctionTable); -%End - QColorSpace(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint, QColorSpace::TransferFunction fun, float gamma = 0.F); -%If (Qt_6_1_0 -) - QColorSpace(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint, const QList &redTransferFunctionTable, const QList &greenTransferFunctionTable, const QList &blueTransferFunctionTable); -%End -%If (Qt_6_1_0 -) - QColorSpace(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint, const QList &transferFunctionTable); -%End - QColorSpace(const QColorSpace &colorSpace); - ~QColorSpace(); - void swap(QColorSpace &colorSpace /Constrained/); - QColorSpace::Primaries primaries() const; - QColorSpace::TransferFunction transferFunction() const; - float gamma() const; - void setTransferFunction(QColorSpace::TransferFunction transferFunction, float gamma = 0.F); -%If (Qt_6_1_0 -) - void setTransferFunction(const QList &transferFunctionTable); -%End -%If (Qt_6_1_0 -) - void setTransferFunctions(const QList &redTransferFunctionTable, const QList &greenTransferFunctionTable, const QList &blueTransferFunctionTable); -%End -%If (Qt_6_1_0 -) - QColorSpace withTransferFunction(const QList &transferFunctionTable) const; -%End - QColorSpace withTransferFunction(QColorSpace::TransferFunction transferFunction, float gamma = 0.F) const; -%If (Qt_6_1_0 -) - QColorSpace withTransferFunctions(const QList &redTransferFunctionTable, const QList &greenTransferFunctionTable, const QList &blueTransferFunctionTable) const; -%End - void setPrimaries(QColorSpace::Primaries primariesId); - void setPrimaries(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint); - bool isValid() const; - static QColorSpace fromIccProfile(const QByteArray &iccProfile); - QByteArray iccProfile() const; - QColorTransform transformationToColorSpace(const QColorSpace &colorspace) const; -%If (Qt_6_2_0 -) - QString description() const; -%End -%If (Qt_6_2_0 -) - void setDescription(const QString &description); -%End -}; - -bool operator==(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2); -bool operator!=(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2); -QDataStream &operator<<(QDataStream &, const QColorSpace & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QColorSpace & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolortransform.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolortransform.sip deleted file mode 100644 index f557703..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcolortransform.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qcolortransform.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QColorTransform -{ -%TypeHeaderCode -#include -%End - -public: - QColorTransform(); - QColorTransform(const QColorTransform &colorTransform); - ~QColorTransform(); - void swap(QColorTransform &other /Constrained/); - QRgb map(QRgb argb) const; - QRgba64 map(QRgba64 rgba64) const; - QColor map(const QColor &color) const; -%If (Qt_6_4_0 -) - bool isIdentity() const; -%End -}; - -%If (Qt_6_4_0 -) -bool operator==(const QColorTransform &ct1, const QColorTransform &ct2); -%End -%If (Qt_6_4_0 -) -bool operator!=(const QColorTransform &ct1, const QColorTransform &ct2); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcursor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcursor.sip deleted file mode 100644 index fbf87c0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qcursor.sip +++ /dev/null @@ -1,90 +0,0 @@ -// qcursor.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCursor /TypeHintIn="Union[QCursor, Qt.CursorShape]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// SIP doesn't support automatic type convertors so we explicitly allow a -// Qt::CursorShape to be used whenever a QCursor is expected. - -bool is_cursor_shape = true; -int cursor_shape = sipConvertToEnum(sipPy, sipType_Qt_CursorShape); - -if (PyErr_Occurred()) -{ - PyErr_Clear(); - is_cursor_shape = false; -} - -if (sipIsErr == NULL) - return (is_cursor_shape || - sipCanConvertToType(sipPy, sipType_QCursor, SIP_NO_CONVERTORS)); - -if (is_cursor_shape) -{ - *sipCppPtr = new QCursor(static_cast(cursor_shape)); - - return sipGetState(sipTransferObj); -} - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QCursor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -public: - QCursor(); - QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1); - QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1); - QCursor(const QCursor &cursor); - QCursor(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QCursor(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QCursor(); - Qt::CursorShape shape() const; - void setShape(Qt::CursorShape newShape); - QBitmap bitmap() const; - QBitmap mask() const; - QPixmap pixmap() const; - QPoint hotSpot() const; - static QPoint pos(); - static void setPos(int x, int y); - static void setPos(const QPoint &p); - static QPoint pos(const QScreen *screen); - static void setPos(QScreen *screen, int x, int y); - static void setPos(QScreen *screen, const QPoint &p); - void swap(QCursor &other); -}; - -QDataStream &operator<<(QDataStream &outS, const QCursor &cursor) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &inS, QCursor &cursor /Constrained/) /ReleaseGIL/; -bool operator==(const QCursor &lhs, const QCursor &rhs); -bool operator!=(const QCursor &lhs, const QCursor &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdesktopservices.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdesktopservices.sip deleted file mode 100644 index a06d3a0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdesktopservices.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qdesktopservices.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDesktopServices -{ -%TypeHeaderCode -#include -%End - -public: - static bool openUrl(const QUrl &url) /ReleaseGIL/; - static void setUrlHandler(const QString &scheme, QObject *receiver, const char *method); - static void setUrlHandler(const QString &scheme, SIP_PYCALLABLE method /TypeHint="Callable[[QUrl], None]"/); -%MethodCode - // Allow a callable that must be a slot of a QObject, although we never tell - // the user if it isn't. - sipMethodDef pm; - - if (sipGetMethod(a1, &pm)) - { - int iserr = 0; - QObject *receiver = reinterpret_cast(sipForceConvertToType( - pm.pm_self, sipType_QObject, NULL, SIP_NOT_NONE, NULL, &iserr)); - - if (!iserr) - { - PyObject *f_name_obj = PyObject_GetAttrString(pm.pm_function, "__name__"); - - if (f_name_obj) - { - // We only want a borrowed reference. - Py_DECREF(f_name_obj); - - const char *f_name = sipString_AsASCIIString(&f_name_obj); - - if (f_name) - { - QDesktopServices::setUrlHandler(*a0, receiver, f_name); - - Py_DECREF(f_name_obj); - } - } - } - } -%End - - static void unsetUrlHandler(const QString &scheme); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdrag.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdrag.sip deleted file mode 100644 index a546e8b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qdrag.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qdrag.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDrag : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDrag(QObject *dragSource /TransferThis/); - virtual ~QDrag(); - Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction) /ReleaseGIL/; - Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) /ReleaseGIL/; - void setMimeData(QMimeData *data /Transfer/); - QMimeData *mimeData() const; - void setPixmap(const QPixmap &); - QPixmap pixmap() const; - void setHotSpot(const QPoint &hotspot); - QPoint hotSpot() const; - QObject *source() const; - QObject *target() const; - void setDragCursor(const QPixmap &cursor, Qt::DropAction action); - -signals: - void actionChanged(Qt::DropAction action); - void targetChanged(QObject *newTarget); - -public: - QPixmap dragCursor(Qt::DropAction action) const; - Qt::DropActions supportedActions() const; - Qt::DropAction defaultAction() const; -%If (Android || Linux || WebAssembly || Windows) - static void cancel(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qevent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qevent.sip deleted file mode 100644 index 2a6ea88..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qevent.sip +++ /dev/null @@ -1,874 +0,0 @@ -// qevent.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QInputEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QEvent::ActionAdded: - case QEvent::ActionChanged: - case QEvent::ActionRemoved: - sipType = sipType_QActionEvent; - break; - - case QEvent::Close: - sipType = sipType_QCloseEvent; - break; - - case QEvent::ContextMenu: - sipType = sipType_QContextMenuEvent; - break; - - case QEvent::DragEnter: - sipType = sipType_QDragEnterEvent; - break; - - case QEvent::DragLeave: - sipType = sipType_QDragLeaveEvent; - break; - - case QEvent::DragMove: - sipType = sipType_QDragMoveEvent; - break; - - case QEvent::Drop: - sipType = sipType_QDropEvent; - break; - - case QEvent::Enter: - sipType = sipType_QEnterEvent; - break; - - case QEvent::FileOpen: - sipType = sipType_QFileOpenEvent; - break; - - case QEvent::FocusIn: - case QEvent::FocusOut: - sipType = sipType_QFocusEvent; - break; - - case QEvent::Hide: - sipType = sipType_QHideEvent; - break; - - case QEvent::HoverEnter: - case QEvent::HoverLeave: - case QEvent::HoverMove: - sipType = sipType_QHoverEvent; - break; - - case QEvent::IconDrag: - sipType = sipType_QIconDragEvent; - break; - - case QEvent::InputMethod: - sipType = sipType_QInputMethodEvent; - break; - - case QEvent::KeyPress: - case QEvent::KeyRelease: - case QEvent::ShortcutOverride: - sipType = sipType_QKeyEvent; - break; - - case QEvent::MouseButtonDblClick: - case QEvent::MouseButtonPress: - case QEvent::MouseButtonRelease: - case QEvent::MouseMove: - sipType = sipType_QMouseEvent; - break; - - case QEvent::Move: - sipType = sipType_QMoveEvent; - break; - - case QEvent::Paint: - sipType = sipType_QPaintEvent; - break; - - case QEvent::Resize: - sipType = sipType_QResizeEvent; - break; - - case QEvent::Shortcut: - sipType = sipType_QShortcutEvent; - break; - - case QEvent::Show: - sipType = sipType_QShowEvent; - break; - - case QEvent::StatusTip: - sipType = sipType_QStatusTipEvent; - break; - - case QEvent::TabletMove: - case QEvent::TabletPress: - case QEvent::TabletRelease: - case QEvent::TabletEnterProximity: - case QEvent::TabletLeaveProximity: - sipType = sipType_QTabletEvent; - break; - - case QEvent::ToolTip: - case QEvent::WhatsThis: - sipType = sipType_QHelpEvent; - break; - - case QEvent::WhatsThisClicked: - sipType = sipType_QWhatsThisClickedEvent; - break; - - case QEvent::Wheel: - sipType = sipType_QWheelEvent; - break; - - case QEvent::WindowStateChange: - sipType = sipType_QWindowStateChangeEvent; - break; - - case QEvent::TouchBegin: - case QEvent::TouchUpdate: - case QEvent::TouchEnd: - case QEvent::TouchCancel: - sipType = sipType_QTouchEvent; - break; - - case QEvent::InputMethodQuery: - sipType = sipType_QInputMethodQueryEvent; - break; - - case QEvent::Expose: - sipType = sipType_QExposeEvent; - break; - - case QEvent::ScrollPrepare: - sipType = sipType_QScrollPrepareEvent; - break; - - case QEvent::Scroll: - sipType = sipType_QScrollEvent; - break; - - case QEvent::NativeGesture: - sipType = sipType_QNativeGestureEvent; - break; - - case QEvent::PlatformSurface: - sipType = sipType_QPlatformSurfaceEvent; - break; - - #if QT_VERSION >= 0x060700 - case QEvent::ChildWindowAdded: - case QEvent::ChildWindowRemoved: - sipType = sipType_QChildWindowEvent; - break; - #endif - - default: - sipType = 0; - } -%End - -public: - virtual ~QInputEvent(); - Qt::KeyboardModifiers modifiers() const; - quint64 timestamp() const; - const QInputDevice *device() const; - QInputDevice::DeviceType deviceType() const; - virtual QInputEvent *clone() const /Factory/; - -private: - QInputEvent(const QInputEvent &); -}; - -class QKeyEvent : public QInputEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, const QString &text = QString(), bool autorep = false, quint16 count = 1, const QInputDevice *device = QInputDevice::primaryKeyboard()); - QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text = QString(), bool autorep = false, quint16 count = 1); - virtual ~QKeyEvent(); - int key() const; - Qt::KeyboardModifiers modifiers() const; - QString text() const; - bool isAutoRepeat() const; - int count() const /__len__/; - bool matches(QKeySequence::StandardKey key) const; - quint32 nativeModifiers() const; - quint32 nativeScanCode() const; - quint32 nativeVirtualKey() const; - QKeyCombination keyCombination() const; - virtual QKeyEvent *clone() const /Factory/; -}; - -bool operator==(QKeyEvent *e, QKeySequence::StandardKey key); -bool operator==(QKeySequence::StandardKey key, QKeyEvent *e); - -class QFocusEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QFocusEvent(QEvent::Type type, Qt::FocusReason reason = Qt::OtherFocusReason); - virtual ~QFocusEvent(); - bool gotFocus() const; - bool lostFocus() const; - Qt::FocusReason reason() const; - virtual QFocusEvent *clone() const /Factory/; -}; - -class QPaintEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPaintEvent(const QRegion &paintRegion); - explicit QPaintEvent(const QRect &paintRect); - virtual ~QPaintEvent(); - const QRect &rect() const; - const QRegion ®ion() const; - virtual QPaintEvent *clone() const /Factory/; -}; - -class QMoveEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QMoveEvent(const QPoint &pos, const QPoint &oldPos); - virtual ~QMoveEvent(); - const QPoint &pos() const; - const QPoint &oldPos() const; - virtual QMoveEvent *clone() const /Factory/; -}; - -class QResizeEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QResizeEvent(const QSize &size, const QSize &oldSize); - virtual ~QResizeEvent(); - const QSize &size() const; - const QSize &oldSize() const; - virtual QResizeEvent *clone() const /Factory/; -}; - -class QCloseEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QCloseEvent(); - virtual ~QCloseEvent(); -%If (Qt_6_4_0 -) - virtual QCloseEvent *clone() const /Factory/; -%End -}; - -class QIconDragEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QIconDragEvent(); - virtual ~QIconDragEvent(); -%If (Qt_6_4_0 -) - virtual QIconDragEvent *clone() const /Factory/; -%End -}; - -class QShowEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QShowEvent(); - virtual ~QShowEvent(); -%If (Qt_6_4_0 -) - virtual QShowEvent *clone() const /Factory/; -%End -}; - -class QHideEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QHideEvent(); - virtual ~QHideEvent(); -%If (Qt_6_4_0 -) - virtual QHideEvent *clone() const /Factory/; -%End -}; - -class QContextMenuEvent : public QInputEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Reason - { - Mouse, - Keyboard, - Other, - }; - - QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier); - QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos); - virtual ~QContextMenuEvent(); - int x() const; - int y() const; - int globalX() const; - int globalY() const; - const QPoint &pos() const; - const QPoint &globalPos() const; - QContextMenuEvent::Reason reason() const; - virtual QContextMenuEvent *clone() const /Factory/; -}; - -class QInputMethodEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum AttributeType - { - TextFormat, - Cursor, - Language, - Ruby, - Selection, - }; - - class Attribute - { -%TypeHeaderCode -#include -%End - - public: - Attribute(QInputMethodEvent::AttributeType t, int s, int l, QVariant val); - Attribute(QInputMethodEvent::AttributeType typ, int s, int l); - QInputMethodEvent::AttributeType type; - int start; - int length; - QVariant value; - }; - - QInputMethodEvent(); - QInputMethodEvent(const QString &preeditText, const QList &attributes); - virtual ~QInputMethodEvent(); - void setCommitString(const QString &commitString, int from = 0, int length = 0); - const QList &attributes() const; - const QString &preeditString() const; - const QString &commitString() const; - int replacementStart() const; - int replacementLength() const; - virtual QInputMethodEvent *clone() const /Factory/; -}; - -bool operator==(const QInputMethodEvent::Attribute &lhs, const QInputMethodEvent::Attribute &rhs); -bool operator!=(const QInputMethodEvent::Attribute &lhs, const QInputMethodEvent::Attribute &rhs); - -class QInputMethodQueryEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QInputMethodQueryEvent(Qt::InputMethodQueries queries); - virtual ~QInputMethodQueryEvent(); - Qt::InputMethodQueries queries() const; - void setValue(Qt::InputMethodQuery query, const QVariant &value); - QVariant value(Qt::InputMethodQuery query) const; - virtual QInputMethodQueryEvent *clone() const /Factory/; -}; - -class QDropEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QDropEvent(const QPointF &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::Drop); - virtual ~QDropEvent(); - Qt::DropActions possibleActions() const; - Qt::DropAction proposedAction() const; - void acceptProposedAction(); - Qt::DropAction dropAction() const; - void setDropAction(Qt::DropAction action); - QObject *source() const; - const QMimeData *mimeData() const; - QPointF position() const; - Qt::MouseButtons buttons() const; - Qt::KeyboardModifiers modifiers() const; - virtual QDropEvent *clone() const /Factory/; -}; - -class QDragMoveEvent : public QDropEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::DragMove); - virtual ~QDragMoveEvent(); - QRect answerRect() const; - void accept(); - void ignore(); - void accept(const QRect &r); - void ignore(const QRect &r); - virtual QDragMoveEvent *clone() const /Factory/; -}; - -class QDragEnterEvent : public QDragMoveEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QDragEnterEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); - virtual ~QDragEnterEvent(); -%If (Qt_6_4_0 -) - virtual QDragEnterEvent *clone() const /Factory/; -%End -}; - -class QDragLeaveEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QDragLeaveEvent(); - virtual ~QDragLeaveEvent(); -%If (Qt_6_4_0 -) - virtual QDragLeaveEvent *clone() const /Factory/; -%End -}; - -class QHelpEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QHelpEvent(QEvent::Type type, const QPoint &pos, const QPoint &globalPos); - virtual ~QHelpEvent(); - int x() const; - int y() const; - int globalX() const; - int globalY() const; - const QPoint &pos() const; - const QPoint &globalPos() const; - virtual QHelpEvent *clone() const /Factory/; -}; - -class QStatusTipEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStatusTipEvent(const QString &tip); - virtual ~QStatusTipEvent(); - QString tip() const; - virtual QStatusTipEvent *clone() const /Factory/; -}; - -class QWhatsThisClickedEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWhatsThisClickedEvent(const QString &href); - virtual ~QWhatsThisClickedEvent(); - QString href() const; - virtual QWhatsThisClickedEvent *clone() const /Factory/; -}; - -class QActionEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QActionEvent(int type, QAction *action, QAction *before = 0); - virtual ~QActionEvent(); - QAction *action() const; - QAction *before() const; - virtual QActionEvent *clone() const /Factory/; -}; - -class QFileOpenEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QFileOpenEvent(); - QString file() const; - QUrl url() const; - bool openFile(QFile &file, QIODeviceBase::OpenMode flags) const /ReleaseGIL/; - virtual QFileOpenEvent *clone() const /Factory/; - -private: - QFileOpenEvent(const QFileOpenEvent &); -}; - -class QShortcutEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QShortcutEvent(const QKeySequence &key, int id, bool ambiguous = false); -%If (Qt_6_5_0 -) - QShortcutEvent(const QKeySequence &key, const QShortcut *shortcut = 0, bool ambiguous = false); -%End - virtual ~QShortcutEvent(); - bool isAmbiguous() const; - const QKeySequence &key() const; - int shortcutId() const; - virtual QShortcutEvent *clone() const /Factory/; -}; - -class QWindowStateChangeEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QWindowStateChangeEvent(); - Qt::WindowStates oldState() const; - virtual QWindowStateChangeEvent *clone() const /Factory/; - -private: - QWindowStateChangeEvent(const QWindowStateChangeEvent &); -}; - -class QExposeEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QExposeEvent(const QRegion &rgn); - virtual ~QExposeEvent(); - virtual QExposeEvent *clone() const /Factory/; -}; - -class QScrollPrepareEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QScrollPrepareEvent(const QPointF &startPos); - virtual ~QScrollPrepareEvent(); - QPointF startPos() const; - QSizeF viewportSize() const; - QRectF contentPosRange() const; - QPointF contentPos() const; - void setViewportSize(const QSizeF &size); - void setContentPosRange(const QRectF &rect); - void setContentPos(const QPointF &pos); - virtual QScrollPrepareEvent *clone() const /Factory/; -}; - -class QScrollEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum ScrollState - { - ScrollStarted, - ScrollUpdated, - ScrollFinished, - }; - - QScrollEvent(const QPointF &contentPos, const QPointF &overshoot, QScrollEvent::ScrollState scrollState); - virtual ~QScrollEvent(); - QPointF contentPos() const; - QPointF overshootDistance() const; - QScrollEvent::ScrollState scrollState() const; - virtual QScrollEvent *clone() const /Factory/; -}; - -class QPlatformSurfaceEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum SurfaceEventType - { - SurfaceCreated, - SurfaceAboutToBeDestroyed, - }; - - explicit QPlatformSurfaceEvent(QPlatformSurfaceEvent::SurfaceEventType surfaceEventType); - virtual ~QPlatformSurfaceEvent(); - QPlatformSurfaceEvent::SurfaceEventType surfaceEventType() const; - virtual QPlatformSurfaceEvent *clone() const /Factory/; -}; - -class QPointerEvent : public QInputEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QPointerEvent(); - const QPointingDevice *pointingDevice() const; - QPointingDevice::PointerType pointerType() const; - qsizetype pointCount() const; - QEventPoint &point(qsizetype i); - const QList &points() const; - QEventPoint *pointById(int id); - virtual bool isBeginEvent() const; - virtual bool isUpdateEvent() const; - virtual bool isEndEvent() const; - bool allPointsAccepted() const; - virtual void setAccepted(bool accepted); - virtual QPointerEvent *clone() const /Factory/; - -private: - QPointerEvent(const QPointerEvent &); -}; - -class QSinglePointEvent : public QPointerEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_4_0 -) - virtual ~QSinglePointEvent(); -%End - Qt::MouseButton button() const; - Qt::MouseButtons buttons() const; - QPointF position() const; - QPointF scenePosition() const; - QPointF globalPosition() const; - virtual bool isBeginEvent() const; - virtual bool isUpdateEvent() const; - virtual bool isEndEvent() const; - QObject *exclusivePointGrabber() const; - void setExclusivePointGrabber(QObject *exclusiveGrabber); - virtual QSinglePointEvent *clone() const /Factory/; - -private: - QSinglePointEvent(const QSinglePointEvent &); -}; - -class QEnterEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QEnterEvent(const QPointF &localPos, const QPointF &scenePos, const QPointF &globalPos, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - virtual ~QEnterEvent(); - virtual QEnterEvent *clone() const /Factory/; -}; - -class QMouseEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QMouseEvent(QEvent::Type type, const QPointF &localPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &scenePos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - virtual ~QMouseEvent(); - QPoint pos() const; - Qt::MouseEventFlags flags() const; - virtual QMouseEvent *clone() const /Factory/; -}; - -class QHoverEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_3_0 -) - QHoverEvent(QEvent::Type type, const QPointF &pos, const QPointF &globalPos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); -%End - QHoverEvent(QEvent::Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - virtual ~QHoverEvent(); - virtual bool isUpdateEvent() const; - QPoint oldPos() const; - QPointF oldPosF() const; - virtual QHoverEvent *clone() const /Factory/; -}; - -class QWheelEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()); - virtual ~QWheelEvent(); - QPoint pixelDelta() const; - QPoint angleDelta() const; - Qt::ScrollPhase phase() const; - bool inverted() const; - virtual bool isBeginEvent() const; - virtual bool isUpdateEvent() const; - virtual bool isEndEvent() const; - virtual QWheelEvent *clone() const /Factory/; -}; - -class QTabletEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QTabletEvent(QEvent::Type t, const QPointingDevice *device, const QPointF &pos, const QPointF &globalPos, qreal pressure, float xTilt, float yTilt, float tangentialPressure, qreal rotation, float z, Qt::KeyboardModifiers keyState, Qt::MouseButton button, Qt::MouseButtons buttons); - virtual ~QTabletEvent(); - qreal pressure() const; - qreal rotation() const; - qreal z() const; - qreal tangentialPressure() const; - qreal xTilt() const; - qreal yTilt() const; - virtual QTabletEvent *clone() const /Factory/; -}; - -class QNativeGestureEvent : public QSinglePointEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_2_0 -) - QNativeGestureEvent(Qt::NativeGestureType type, const QPointingDevice *dev, int fingerCount, const QPointF &localPos, const QPointF &scenePos, const QPointF &globalPos, qreal value, const QPointF &delta, quint64 sequenceId = UINT64_MAX); -%End - QNativeGestureEvent(Qt::NativeGestureType type, const QPointingDevice *dev, const QPointF &localPos, const QPointF &scenePos, const QPointF &globalPos, qreal value, quint64 sequenceId, quint64 intArgument); - virtual ~QNativeGestureEvent(); - Qt::NativeGestureType gestureType() const; - qreal value() const; - virtual QNativeGestureEvent *clone() const /Factory/; -%If (Qt_6_2_0 -) - int fingerCount() const; -%End -%If (Qt_6_2_0 -) - QPointF delta() const; -%End -}; - -class QTouchEvent : public QPointerEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = 0, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList &touchPoints = {}); - virtual ~QTouchEvent(); - QObject *target() const; - QEventPoint::States touchPointStates() const; - virtual bool isBeginEvent() const; - virtual bool isUpdateEvent() const; - virtual bool isEndEvent() const; - virtual QTouchEvent *clone() const /Factory/; -}; - -%If (Qt_6_7_0 -) - -class QChildWindowEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QChildWindowEvent(QEvent::Type type, QWindow *childWindow); - virtual ~QChildWindowEvent(); - QWindow *child() const; - virtual QChildWindowEvent *clone() const /Factory/; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qeventpoint.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qeventpoint.sip deleted file mode 100644 index 6d895a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qeventpoint.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qeventpoint.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QEventPoint -{ -%TypeHeaderCode -#include -%End - -public: - enum State /BaseType=Flag/ - { - Unknown, - Stationary, - Pressed, - Updated, - Released, - }; - - typedef QFlags States; - QEventPoint(int pointId, QEventPoint::State state, const QPointF &scenePosition, const QPointF &globalPosition); - QEventPoint(const QEventPoint &other); - bool operator==(const QEventPoint &other) const; - bool operator!=(const QEventPoint &other) const; - ~QEventPoint(); - void swap(QEventPoint &other /Constrained/); - QPointF position() const; - QPointF pressPosition() const; - QPointF grabPosition() const; - QPointF lastPosition() const; - QPointF scenePosition() const; - QPointF scenePressPosition() const; - QPointF sceneGrabPosition() const; - QPointF sceneLastPosition() const; - QPointF globalPosition() const; - QPointF globalPressPosition() const; - QPointF globalGrabPosition() const; - QPointF globalLastPosition() const; - QPointF normalizedPosition() const; - QVector2D velocity() const; - QEventPoint::State state() const; - const QPointingDevice *device() const; - int id() const; - QPointingDeviceUniqueId uniqueId() const; - ulong timestamp() const; - ulong lastTimestamp() const; - ulong pressTimestamp() const; - qreal timeHeld() const; - qreal pressure() const; - qreal rotation() const; - QSizeF ellipseDiameters() const; - bool isAccepted() const; - void setAccepted(bool accepted = true); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfilesystemmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfilesystemmodel.sip deleted file mode 100644 index 704b4ee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfilesystemmodel.sip +++ /dev/null @@ -1,114 +0,0 @@ -// qfilesystemmodel.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileSystemModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - enum Roles /BaseType=IntEnum/ - { - FileIconRole, - FilePathRole, - FileNameRole, - FilePermissions, - }; - - explicit QFileSystemModel(QObject *parent /TransferThis/ = 0); - virtual ~QFileSystemModel(); - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex index(const QString &path, int column = 0) const; - virtual QModelIndex parent(const QModelIndex &child) const; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual bool canFetchMore(const QModelIndex &parent) const; - virtual void fetchMore(const QModelIndex &parent); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - QVariant myComputer(int role = Qt::DisplayRole) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::DropActions supportedDropActions() const; - QModelIndex setRootPath(const QString &path); - QString rootPath() const; - QDir rootDirectory() const; - void setIconProvider(QAbstractFileIconProvider *provider /KeepReference/); - QAbstractFileIconProvider *iconProvider() const; - void setFilter(QDir::Filters filters); - QDir::Filters filter() const; - void setResolveSymlinks(bool enable); - bool resolveSymlinks() const; - void setReadOnly(bool enable); - bool isReadOnly() const; - void setNameFilterDisables(bool enable); - bool nameFilterDisables() const; - void setNameFilters(const QStringList &filters); - QStringList nameFilters() const; - QString filePath(const QModelIndex &index) const; - bool isDir(const QModelIndex &index) const; - qint64 size(const QModelIndex &index) const; - QString type(const QModelIndex &index) const; - QDateTime lastModified(const QModelIndex &index) const; -%If (Qt_6_6_0 -) - QDateTime lastModified(const QModelIndex &index, const QTimeZone &tz) const; -%End - QModelIndex mkdir(const QModelIndex &parent, const QString &name); - QFileDevice::Permissions permissions(const QModelIndex &index) const; - bool rmdir(const QModelIndex &index); - QString fileName(const QModelIndex &aindex) const; - QIcon fileIcon(const QModelIndex &aindex) const; - QFileInfo fileInfo(const QModelIndex &aindex) const; - bool remove(const QModelIndex &index); - -signals: - void fileRenamed(const QString &path, const QString &oldName, const QString &newName); - void rootPathChanged(const QString &newPath); - void directoryLoaded(const QString &path); - -protected: - virtual bool event(QEvent *event); - virtual void timerEvent(QTimerEvent *event); - -public: - virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; - - enum Option /BaseType=Flag/ - { - DontWatchForChanges, - DontResolveSymlinks, - DontUseCustomDirectoryIcons, - }; - - typedef QFlags Options; - void setOption(QFileSystemModel::Option option, bool on = true); - bool testOption(QFileSystemModel::Option option) const; - void setOptions(QFileSystemModel::Options options); - QFileSystemModel::Options options() const; - virtual QHash roleNames() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfont.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfont.sip deleted file mode 100644 index d7d95af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfont.sip +++ /dev/null @@ -1,333 +0,0 @@ -// qfont.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFont -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleHint - { - Helvetica, - SansSerif, - Times, - Serif, - Courier, - TypeWriter, - OldEnglish, - Decorative, - System, - AnyStyle, - Cursive, - Monospace, - Fantasy, - }; - - enum StyleStrategy /BaseType=Flag/ - { - PreferDefault, - PreferBitmap, - PreferDevice, - PreferOutline, - ForceOutline, - PreferMatch, - PreferQuality, - PreferAntialias, - NoAntialias, - NoSubpixelAntialias, - NoFontMerging, - PreferNoShaping, - }; - - enum Weight /BaseType=IntEnum/ - { - Thin, - ExtraLight, - Light, - Normal, - Medium, - DemiBold, - Bold, - ExtraBold, - Black, - }; - - enum Style - { - StyleNormal, - StyleItalic, - StyleOblique, - }; - - enum Stretch /BaseType=IntEnum/ - { - AnyStretch, - UltraCondensed, - ExtraCondensed, - Condensed, - SemiCondensed, - Unstretched, - SemiExpanded, - Expanded, - ExtraExpanded, - UltraExpanded, - }; - - QFont(); -%If (Qt_6_1_0 -) - QFont(const QStringList &families, int pointSize = -1, int weight = -1, bool italic = false); -%End - QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false); - QFont(const QFont &); - QFont(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QFont(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QFont(); - QString family() const; - void setFamily(const QString &); - int pointSize() const; - void setPointSize(int); - qreal pointSizeF() const; - void setPointSizeF(qreal); - int pixelSize() const; - void setPixelSize(int); - int weight() const [QFont::Weight ()]; - void setWeight(int weight); -%MethodCode - sipCpp->setWeight(QFont::Weight(a0)); -%End - - void setStyle(QFont::Style style); - QFont::Style style() const; - bool underline() const; - void setUnderline(bool); - bool overline() const; - void setOverline(bool); - bool strikeOut() const; - void setStrikeOut(bool); - bool fixedPitch() const; - void setFixedPitch(bool); - bool kerning() const; - void setKerning(bool); - QFont::StyleHint styleHint() const; - QFont::StyleStrategy styleStrategy() const; - void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault); - void setStyleStrategy(QFont::StyleStrategy s); - int stretch() const; - void setStretch(int); - bool exactMatch() const; - bool operator==(const QFont &) const; - bool operator!=(const QFont &) const; - bool operator<(const QFont &) const; - bool isCopyOf(const QFont &) const; - QString key() const; - QString toString() const; - bool fromString(const QString &); - static QString substitute(const QString &); - static QStringList substitutes(const QString &); - static QStringList substitutions(); - static void insertSubstitution(const QString &, const QString &); - static void insertSubstitutions(const QString &, const QStringList &); - static void removeSubstitutions(const QString &); - static void initialize(); - static void cleanup(); - static void cacheStatistics(); - QString defaultFamily() const; - QFont resolve(const QFont &) const; - bool bold() const; - void setBold(bool enable); - bool italic() const; - void setItalic(bool b); - - enum Capitalization - { - MixedCase, - AllUppercase, - AllLowercase, - SmallCaps, - Capitalize, - }; - - enum SpacingType - { - PercentageSpacing, - AbsoluteSpacing, - }; - - qreal letterSpacing() const; - QFont::SpacingType letterSpacingType() const; - void setLetterSpacing(QFont::SpacingType type, qreal spacing); - qreal wordSpacing() const; - void setWordSpacing(qreal spacing); - void setCapitalization(QFont::Capitalization); - QFont::Capitalization capitalization() const; - - enum HintingPreference - { - PreferDefaultHinting, - PreferNoHinting, - PreferVerticalHinting, - PreferFullHinting, - }; - - QString styleName() const; - void setStyleName(const QString &styleName); - void setHintingPreference(QFont::HintingPreference hintingPreference); - QFont::HintingPreference hintingPreference() const; - void swap(QFont &other /Constrained/); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - QStringList families() const; - void setFamilies(const QStringList &); -%If (Qt_6_7_0 -) - void setFeature(QFont::Tag tag, quint32 value); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - void setFeature(quint32 tag, quint32 value); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - void setFeature(const char *feature /Encoding="None"/, quint32 value); -%End -%If (Qt_6_7_0 -) - void unsetFeature(QFont::Tag tag); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - void unsetFeature(const char *feature /Encoding="None"/); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - void unsetFeature(quint32 tag); -%End -%If (Qt_6_7_0 -) - quint32 featureValue(QFont::Tag tag) const; -%End -%If (Qt_6_6_0 - Qt_6_7_0) - quint32 featureValue(quint32 tag) const; -%End -%If (Qt_6_7_0 -) - bool isFeatureSet(QFont::Tag tag) const; -%End -%If (Qt_6_6_0 - Qt_6_7_0) - bool isFeatureSet(quint32 tag) const; -%End -%If (Qt_6_7_0 -) - QList featureTags() const; -%End -%If (Qt_6_6_0 - Qt_6_7_0) - QList featureTags() const; -%End -%If (Qt_6_6_0 -) - void clearFeatures(); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - static QByteArray tagToString(quint32 tag); -%End -%If (Qt_6_6_0 - Qt_6_7_0) - static quint32 stringToTag(const char *tagString /Encoding="None"/); -%End -%If (Qt_6_7_0 -) - - struct Tag - { -%TypeHeaderCode -#include -%End - - Tag(); - Tag(QAnyStringView view); -%MethodCode - // This is the easiest way to implement this ctor. - std::optional<::QFont::Tag> opt_tag = ::QFont::Tag::fromString(*a0); - - if (opt_tag.has_value()) - sipCpp = new ::QFont::Tag(opt_tag.value()); - else - sipCpp = new ::QFont::Tag; -%End - - bool isValid() const; - quint32 value() const; - QByteArray toString() const; - static std::optional fromValue(quint32 value); - static std::optional fromString(QAnyStringView view); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - }; - -%End -%If (Qt_6_7_0 -) - void setVariableAxis(QFont::Tag tag, float value); -%End -%If (Qt_6_7_0 -) - void unsetVariableAxis(QFont::Tag tag); -%End -%If (Qt_6_7_0 -) - bool isVariableAxisSet(QFont::Tag tag) const; -%End -%If (Qt_6_7_0 -) - float variableAxisValue(QFont::Tag tag) const; -%End -%If (Qt_6_7_0 -) - void clearVariableAxes(); -%End -%If (Qt_6_7_0 -) - QList variableAxisTags() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QFont &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QFont & /Constrained/) /ReleaseGIL/; -%If (Qt_6_7_0 -) -QDataStream &operator<<(QDataStream &, QFont::Tag) /ReleaseGIL/; -%End -%If (Qt_6_7_0 -) -QDataStream &operator>>(QDataStream &, QFont::Tag & /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_7_0 -) -bool operator>=(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End -%If (Qt_6_7_0 -) -bool operator<=(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End -%If (Qt_6_7_0 -) -bool operator>(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End -%If (Qt_6_7_0 -) -bool operator<(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End -%If (Qt_6_7_0 -) -bool operator!=(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End -%If (Qt_6_7_0 -) -bool operator==(const QFont::Tag &lhs, const QFont::Tag &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontdatabase.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontdatabase.sip deleted file mode 100644 index 0f6b017..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontdatabase.sip +++ /dev/null @@ -1,107 +0,0 @@ -// qfontdatabase.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFontDatabase -{ -%TypeHeaderCode -#include -%End - -public: - enum WritingSystem - { - Any, - Latin, - Greek, - Cyrillic, - Armenian, - Hebrew, - Arabic, - Syriac, - Thaana, - Devanagari, - Bengali, - Gurmukhi, - Gujarati, - Oriya, - Tamil, - Telugu, - Kannada, - Malayalam, - Sinhala, - Thai, - Lao, - Tibetan, - Myanmar, - Georgian, - Khmer, - SimplifiedChinese, - TraditionalChinese, - Japanese, - Korean, - Vietnamese, - Other, - Symbol, - Ogham, - Runic, - Nko, - }; - - static QList standardSizes(); - static QList writingSystems(const QString &family); - static QList writingSystems(); - static QStringList families(QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any); - static QStringList styles(const QString &family); - static QList pointSizes(const QString &family, const QString &style = QString()); - static QList smoothSizes(const QString &family, const QString &style); - static QString styleString(const QFontInfo &fontInfo); - static QString styleString(const QFont &font); - static QFont font(const QString &family, const QString &style, int pointSize); - static bool isBitmapScalable(const QString &family, const QString &style = QString()); - static bool isSmoothlyScalable(const QString &family, const QString &style = QString()); - static bool isScalable(const QString &family, const QString &style = QString()); - static bool isFixedPitch(const QString &family, const QString &style = QString()); - static bool italic(const QString &family, const QString &style); - static bool bold(const QString &family, const QString &style); - static int weight(const QString &family, const QString &style); - static QString writingSystemName(QFontDatabase::WritingSystem writingSystem); - static QString writingSystemSample(QFontDatabase::WritingSystem writingSystem); - static int addApplicationFont(const QString &fileName); - static int addApplicationFontFromData(const QByteArray &fontData); - static QStringList applicationFontFamilies(int id); - static bool removeApplicationFont(int id); - static bool removeAllApplicationFonts(); - - enum SystemFont - { - GeneralFont, - FixedFont, - TitleFont, - SmallestReadableFont, - }; - - static QFont systemFont(QFontDatabase::SystemFont type); - static bool isPrivateFamily(const QString &family); - -private: - QFontDatabase(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontinfo.sip deleted file mode 100644 index f91a7fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontinfo.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qfontinfo.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFontInfo -{ -%TypeHeaderCode -#include -%End - -public: - QFontInfo(const QFont &); - QFontInfo(const QFontInfo &); - ~QFontInfo(); - QString family() const; - int pixelSize() const; - int pointSize() const; - qreal pointSizeF() const; - bool italic() const; - QFont::Style style() const; - int weight() const; - bool bold() const; - bool fixedPitch() const; - QFont::StyleHint styleHint() const; - bool exactMatch() const; - QString styleName() const; - void swap(QFontInfo &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontmetrics.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontmetrics.sip deleted file mode 100644 index 784837d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qfontmetrics.sip +++ /dev/null @@ -1,197 +0,0 @@ -// qfontmetrics.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFontMetrics -{ -%TypeHeaderCode -#include -%End - -public: - explicit QFontMetrics(const QFont &); - QFontMetrics(const QFont &font, const QPaintDevice *pd); - QFontMetrics(const QFontMetrics &); - ~QFontMetrics(); - int ascent() const; - int descent() const; - int height() const; - int leading() const; - int lineSpacing() const; - int minLeftBearing() const; - int minRightBearing() const; - int maxWidth() const; - int xHeight() const; - bool inFont(QChar) const; - int leftBearing(QChar) const; - int rightBearing(QChar) const; -%If (Qt_6_3_0 -) - QRect boundingRect(const QString &text, const QTextOption &textOption) const; -%End - QRect boundingRect(QChar) const /PyName=boundingRectChar/; - QRect boundingRect(const QString &text) const; - QRect boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; -%MethodCode - int *tabarray = qtgui_tabarray(a4); - - sipRes = new QRect(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray)); - - if (!tabarray) - delete[] tabarray; -%End - - QRect boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; -%MethodCode - int *tabarray = qtgui_tabarray(a7); - - sipRes = new QRect(sipCpp->boundingRect(a0, a1, a2, a3, a4, *a5, a6, tabarray)); - - if (!tabarray) - delete[] tabarray; -%End - - QSize size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; -%MethodCode - int *tabarray = qtgui_tabarray(a3); - - sipRes = new QSize(sipCpp->size(a0, *a1, a2, tabarray)); - - if (!tabarray) - delete[] tabarray; -%End - - int underlinePos() const; - int overlinePos() const; - int strikeOutPos() const; - int lineWidth() const; - int averageCharWidth() const; - QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const; - bool operator==(const QFontMetrics &other) const; - bool operator!=(const QFontMetrics &other) const; -%If (Qt_6_3_0 -) - QRect tightBoundingRect(const QString &text, const QTextOption &textOption) const; -%End - QRect tightBoundingRect(const QString &text) const; - bool inFontUcs4(uint character) const; - void swap(QFontMetrics &other /Constrained/); - int capHeight() const; -%If (Qt_6_3_0 -) - int horizontalAdvance(const QString &, const QTextOption &textOption) const; -%End - int horizontalAdvance(const QString &, int length = -1) const; - qreal fontDpi() const; -}; - -class QFontMetricsF -{ -%TypeHeaderCode -#include -%End - -public: - explicit QFontMetricsF(const QFont &); - QFontMetricsF(const QFont &font, const QPaintDevice *pd); - QFontMetricsF(const QFontMetrics &); - QFontMetricsF(const QFontMetricsF &); - ~QFontMetricsF(); - qreal ascent() const; - qreal descent() const; - qreal height() const; - qreal leading() const; - qreal lineSpacing() const; - qreal minLeftBearing() const; - qreal minRightBearing() const; - qreal maxWidth() const; - qreal xHeight() const; - bool inFont(QChar) const; - qreal leftBearing(QChar) const; - qreal rightBearing(QChar) const; -%If (Qt_6_3_0 -) - QRectF boundingRect(const QString &text, const QTextOption &textOption) const; -%End - QRectF boundingRect(QChar) const /PyName=boundingRectChar/; - QRectF boundingRect(const QString &string) const; - QRectF boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; -%MethodCode - int *tabarray = qtgui_tabarray(a4); - - sipRes = new QRectF(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray)); - - if (!tabarray) - delete[] tabarray; -%End - - QSizeF size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; -%MethodCode - int *tabarray = qtgui_tabarray(a3); - - sipRes = new QSizeF(sipCpp->size(a0, *a1, a2, tabarray)); - - if (!tabarray) - delete[] tabarray; -%End - - qreal underlinePos() const; - qreal overlinePos() const; - qreal strikeOutPos() const; - qreal lineWidth() const; - qreal averageCharWidth() const; - QString elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const; - bool operator==(const QFontMetricsF &other) const; - bool operator!=(const QFontMetricsF &other) const; -%If (Qt_6_3_0 -) - QRectF tightBoundingRect(const QString &text, const QTextOption &textOption) const; -%End - QRectF tightBoundingRect(const QString &text) const; - bool inFontUcs4(uint character) const; - void swap(QFontMetricsF &other /Constrained/); - qreal capHeight() const; -%If (Qt_6_3_0 -) - qreal horizontalAdvance(const QString &string, const QTextOption &textOption) const; -%End - qreal horizontalAdvance(const QString &string, int length = -1) const; - qreal fontDpi() const; -}; - -%ModuleHeaderCode -// Used by QFontMetrics and QFontMetricsF. -int *qtgui_tabarray(PyObject *l); -%End - -%ModuleCode -// Convert an optional Python list to a 0 terminated array of integers on the -// heap. -int *qtgui_tabarray(PyObject *l) -{ - if (!l || l == Py_None) - return 0; - - int *arr = new int[PyList_Size(l) + 1]; - Py_ssize_t i; - - for (i = 0; i < PyList_Size(l); ++i) - arr[i] = PyLong_AsLong(PyList_GetItem(l, i)); - - arr[i] = 0; - - return arr; -} -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qgenericmatrix.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qgenericmatrix.sip deleted file mode 100644 index df468d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qgenericmatrix.sip +++ /dev/null @@ -1,942 +0,0 @@ -// qgenericmatrix.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -// The implementation of QMatrix4x3. -class QMatrix4x3 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[12]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddddddddd", - (double)data[0], (double)data[1], (double)data[2], - (double)data[3], (double)data[4], (double)data[5], - (double)data[6], (double)data[7], (double)data[8], - (double)data[9], (double)data[10], (double)data[11]); -%End - -public: - QMatrix4x3(); - QMatrix4x3(const QMatrix4x3 &other); - explicit QMatrix4x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[12]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone) - sipCpp = new QMatrix4x3(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[12]; - PYQT_FLOAT data[12]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 12; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix4x3(" - "%R, %R, %R, " - "%R, %R, %R, " - "%R, %R, %R, " - "%R, %R, %R)", - m[0], m[1], m[2], - m[3], m[4], m[5], - m[6], m[7], m[8], - m[9], m[10], m[11]); - } - - for (i = 0; i < 12; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[12]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(12, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix3x4 transposed() const; - - QMatrix4x3 &operator+=(const QMatrix4x3 &); - QMatrix4x3 &operator-=(const QMatrix4x3 &); - QMatrix4x3 &operator*=(float); - QMatrix4x3 &operator/=(float); - - bool operator==(const QMatrix4x3 &) const; - bool operator!=(const QMatrix4x3 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix4x3 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix4x3 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix4x2. -class QMatrix4x2 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[8]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddddd", - (double)data[0], (double)data[1], - (double)data[2], (double)data[3], - (double)data[4], (double)data[5], - (double)data[6], (double)data[7]); -%End - -public: - QMatrix4x2(); - QMatrix4x2(const QMatrix4x2 &other); - explicit QMatrix4x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[8]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone) - sipCpp = new QMatrix4x2(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[8]; - PYQT_FLOAT data[8]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 8; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix4x2(" - "%R, %R, " - "%R, %R, " - "%R, %R, " - "%R, %R)", - m[0], m[1], - m[2], m[3], - m[4], m[5], - m[6], m[7]); - } - - for (i = 0; i < 8; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[8]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(8, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix2x4 transposed() const; - - QMatrix4x2 &operator+=(const QMatrix4x2 &); - QMatrix4x2 &operator-=(const QMatrix4x2 &); - QMatrix4x2 &operator*=(float); - QMatrix4x2 &operator/=(float); - - bool operator==(const QMatrix4x2 &) const; - bool operator!=(const QMatrix4x2 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix4x2 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix4x2 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix3x4. -class QMatrix3x4 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[12]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddddddddd", - (double)data[0], (double)data[1], (double)data[2], - (double)data[3], (double)data[4], (double)data[5], - (double)data[6], (double)data[7], (double)data[8], - (double)data[9], (double)data[10], (double)data[11]); -%End - -public: - QMatrix3x4(); - QMatrix3x4(const QMatrix3x4 &other); - explicit QMatrix3x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[12]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone) - sipCpp = new QMatrix3x4(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[12]; - PYQT_FLOAT data[12]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 12; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix3x4(" - "%R, %R, %R, " - "%R, %R, %R, " - "%R, %R, %R, " - "%R, %R, %R)", - m[0], m[1], m[2], - m[3], m[4], m[5], - m[6], m[7], m[8], - m[9], m[10], m[11]); - } - - for (i = 0; i < 12; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[12]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(12, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix4x3 transposed() const; - - QMatrix3x4 &operator+=(const QMatrix3x4 &); - QMatrix3x4 &operator-=(const QMatrix3x4 &); - QMatrix3x4 &operator*=(float); - QMatrix3x4 &operator/=(float); - - bool operator==(const QMatrix3x4 &) const; - bool operator!=(const QMatrix3x4 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix3x4 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix3x4 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix3x3. -class QMatrix3x3 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[9]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("ddddddddd", - (double)data[0], (double)data[1], (double)data[2], - (double)data[3], (double)data[4], (double)data[5], - (double)data[6], (double)data[7], (double)data[8]); -%End - -public: - QMatrix3x3(); - QMatrix3x3(const QMatrix3x3 &other); - explicit QMatrix3x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[9]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 9, values)) == sipErrorNone) - sipCpp = new QMatrix3x3(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[9]; - PYQT_FLOAT data[9]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 9; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix3x3(" - "%R, %R, %R, " - "%R, %R, %R, " - "%R, %R, %R)", - m[0], m[1], m[2], - m[3], m[4], m[5], - m[6], m[7], m[8]); - } - - for (i = 0; i < 9; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(9, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[9]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(9, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix3x3 transposed() const; - - QMatrix3x3 &operator+=(const QMatrix3x3 &); - QMatrix3x3 &operator-=(const QMatrix3x3 &); - QMatrix3x3 &operator*=(float); - QMatrix3x3 &operator/=(float); - - bool operator==(const QMatrix3x3 &) const; - bool operator!=(const QMatrix3x3 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix3x3 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix3x3 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix3x2. -class QMatrix3x2 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[6]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddd", - (double)data[0], (double)data[1], - (double)data[2], (double)data[3], - (double)data[4], (double)data[5]); -%End - -public: - QMatrix3x2(); - QMatrix3x2(const QMatrix3x2 &other); - explicit QMatrix3x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[6]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone) - sipCpp = new QMatrix3x2(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[6]; - PYQT_FLOAT data[6]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 6; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix3x2(" - "%R, %R, " - "%R, %R, " - "%R, %R)", - m[0], m[1], - m[2], m[3], - m[4], m[5]); - } - - for (i = 0; i < 6; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[6]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(6, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix2x3 transposed() const; - - QMatrix3x2 &operator+=(const QMatrix3x2 &); - QMatrix3x2 &operator-=(const QMatrix3x2 &); - QMatrix3x2 &operator*=(float); - QMatrix3x2 &operator/=(float); - - bool operator==(const QMatrix3x2 &) const; - bool operator!=(const QMatrix3x2 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix3x2 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix3x2 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix2x4. -class QMatrix2x4 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[8]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddddd", - (double)data[0], (double)data[1], (double)data[2], (double)data[3], - (double)data[4], (double)data[5], (double)data[6], (double)data[7]); -%End - -public: - QMatrix2x4(); - QMatrix2x4(const QMatrix2x4 &other); - explicit QMatrix2x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[8]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone) - sipCpp = new QMatrix2x4(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[8]; - PYQT_FLOAT data[8]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 8; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix2x4(" - "%R, %R, %R, %R, " - "%R, %R, %R, %R)", - m[0], m[1], m[2], m[3], - m[4], m[5], m[6], m[7]); - } - - for (i = 0; i < 8; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[8]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(8, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix4x2 transposed() const; - - QMatrix2x4 &operator+=(const QMatrix2x4 &); - QMatrix2x4 &operator-=(const QMatrix2x4 &); - QMatrix2x4 &operator*=(float); - QMatrix2x4 &operator/=(float); - - bool operator==(const QMatrix2x4 &) const; - bool operator!=(const QMatrix2x4 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix2x4 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix2x4 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix2x3. -class QMatrix2x3 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[6]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddd", - (double)data[0], (double)data[1], (double)data[2], - (double)data[3], (double)data[4], (double)data[5]); -%End - -public: - QMatrix2x3(); - QMatrix2x3(const QMatrix2x3 &other); - explicit QMatrix2x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[6]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone) - sipCpp = new QMatrix2x3(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[6]; - PYQT_FLOAT data[6]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 6; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix2x3(" - "%R, %R, %R, " - "%R, %R, %R)", - m[0], m[1], m[2], - m[3], m[4], m[5]); - } - - for (i = 0; i < 6; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[6]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(6, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix3x2 transposed() const; - - QMatrix2x3 &operator+=(const QMatrix2x3 &); - QMatrix2x3 &operator-=(const QMatrix2x3 &); - QMatrix2x3 &operator*=(float); - QMatrix2x3 &operator/=(float); - - bool operator==(const QMatrix2x3 &) const; - bool operator!=(const QMatrix2x3 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix2x3 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix2x3 & /Constrained/) /ReleaseGIL/; -// The implementation of QMatrix2x2. -class QMatrix2x2 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[4]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddd", - (double)data[0], (double)data[1], - (double)data[2], (double)data[3]); -%End - -public: - QMatrix2x2(); - QMatrix2x2(const QMatrix2x2 &other); - explicit QMatrix2x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); -%MethodCode - PYQT_FLOAT values[4]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 4, values)) == sipErrorNone) - sipCpp = new QMatrix2x2(values); -%End - - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[4]; - PYQT_FLOAT data[4]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 4; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix2x2(" - "%R, %R, " - "%R, %R)", - m[0], m[1], - m[2], m[3]); - } - - for (i = 0; i < 4; ++i) - Py_XDECREF(m[i]); -%End - - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(4, sipCpp->constData(), &sipRes); -%End - - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - PYQT_FLOAT values[4]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(4, values, &sipRes); -%End - - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, float); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - bool isIdentity() const; - void setToIdentity(); - - void fill(float value); - - QMatrix2x2 transposed() const; - - QMatrix2x2 &operator+=(const QMatrix2x2 &); - QMatrix2x2 &operator-=(const QMatrix2x2 &); - QMatrix2x2 &operator*=(float); - QMatrix2x2 &operator/=(float); - - bool operator==(const QMatrix2x2 &) const; - bool operator!=(const QMatrix2x2 &) const; -}; - -QDataStream &operator<<(QDataStream &, const QMatrix2x2 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix2x2 & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qglyphrun.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qglyphrun.sip deleted file mode 100644 index c52868e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qglyphrun.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qglyphrun.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_RawFont) - -class QGlyphRun -{ -%TypeHeaderCode -#include -%End - -public: - QGlyphRun(); - QGlyphRun(const QGlyphRun &other); - ~QGlyphRun(); - QRawFont rawFont() const; - void setRawFont(const QRawFont &rawFont); - QList glyphIndexes() const; - void setGlyphIndexes(const QList &glyphIndexes); - QList positions() const; - void setPositions(const QList &positions); - void clear(); - bool operator==(const QGlyphRun &other) const; - bool operator!=(const QGlyphRun &other) const; - void setOverline(bool overline); - bool overline() const; - void setUnderline(bool underline); - bool underline() const; - void setStrikeOut(bool strikeOut); - bool strikeOut() const; - - enum GlyphRunFlag /BaseType=Flag/ - { - Overline, - Underline, - StrikeOut, - RightToLeft, - SplitLigature, - }; - - typedef QFlags GlyphRunFlags; - void setRightToLeft(bool on); - bool isRightToLeft() const; - void setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true); - void setFlags(QGlyphRun::GlyphRunFlags flags); - QGlyphRun::GlyphRunFlags flags() const; - void setBoundingRect(const QRectF &boundingRect); - QRectF boundingRect() const; - bool isEmpty() const; - void swap(QGlyphRun &other /Constrained/); -%If (Qt_6_5_0 -) - QList stringIndexes() const; -%End -%If (Qt_6_5_0 -) - void setStringIndexes(const QList &stringIndexes); -%End -%If (Qt_6_5_0 -) - void setSourceString(const QString &sourceString); -%End -%If (Qt_6_5_0 -) - QString sourceString() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qguiapplication.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qguiapplication.sip deleted file mode 100644 index 2c3a9b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qguiapplication.sip +++ /dev/null @@ -1,261 +0,0 @@ -// qguiapplication.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGuiApplication : public QCoreApplication -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAbstractTextDocumentLayout, &sipType_QAbstractTextDocumentLayout, -1, 1}, - {sipName_QAction, &sipType_QAction, -1, 2}, - {sipName_QActionGroup, &sipType_QActionGroup, -1, 3}, - {sipName_QClipboard, &sipType_QClipboard, -1, 4}, - {sipName_QValidator, &sipType_QValidator, 26, 5}, - {sipName_QDrag, &sipType_QDrag, -1, 6}, - {sipName_QFileSystemModel, &sipType_QFileSystemModel, -1, 7}, - {sipName_QGuiApplication, &sipType_QGuiApplication, -1, 8}, - {sipName_QInputDevice, &sipType_QInputDevice, 29, 9}, - {sipName_QInputMethod, &sipType_QInputMethod, -1, 10}, - {sipName_QMovie, &sipType_QMovie, -1, 11}, - {sipName_QOffscreenSurface, &sipType_QOffscreenSurface, -1, 12}, - #if defined(SIP_FEATURE_PyQt_OpenGL) - {sipName_QOpenGLContext, &sipType_QOpenGLContext, -1, 13}, - #else - {0, 0, -1, 13}, - #endif - #if defined(SIP_FEATURE_PyQt_OpenGL) - {sipName_QOpenGLContextGroup, &sipType_QOpenGLContextGroup, -1, 14}, - #else - {0, 0, -1, 14}, - #endif - {sipName_QWindow, &sipType_QWindow, 30, 15}, - {sipName_QPdfWriter, &sipType_QPdfWriter, -1, 16}, - {sipName_QScreen, &sipType_QScreen, -1, 17}, - #if defined(SIP_FEATURE_PyQt_SessionManager) - {sipName_QSessionManager, &sipType_QSessionManager, -1, 18}, - #else - {0, 0, -1, 18}, - #endif - {sipName_QShortcut, &sipType_QShortcut, -1, 19}, - {sipName_QStandardItemModel, &sipType_QStandardItemModel, -1, 20}, - {sipName_QStyleHints, &sipType_QStyleHints, -1, 21}, - {sipName_QSyntaxHighlighter, &sipType_QSyntaxHighlighter, -1, 22}, - {sipName_QTextObject, &sipType_QTextObject, 32, 23}, - {sipName_QTextDocument, &sipType_QTextDocument, -1, 24}, - {sipName_QUndoGroup, &sipType_QUndoGroup, -1, 25}, - {sipName_QUndoStack, &sipType_QUndoStack, -1, -1}, - {sipName_QDoubleValidator, &sipType_QDoubleValidator, -1, 27}, - {sipName_QIntValidator, &sipType_QIntValidator, -1, 28}, - {sipName_QRegularExpressionValidator, &sipType_QRegularExpressionValidator, -1, -1}, - {sipName_QPointingDevice, &sipType_QPointingDevice, -1, -1}, - {sipName_QPaintDeviceWindow, &sipType_QPaintDeviceWindow, 31, -1}, - {sipName_QRasterWindow, &sipType_QRasterWindow, -1, -1}, - {sipName_QTextBlockGroup, &sipType_QTextBlockGroup, 34, 33}, - {sipName_QTextFrame, &sipType_QTextFrame, 35, -1}, - {sipName_QTextList, &sipType_QTextList, -1, -1}, - {sipName_QTextTable, &sipType_QTextTable, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QGuiApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = QCoreApplication::ApplicationFlags)]; -%MethodCode - // The Python interface is a list of argument strings that is modified. - - int argc; - char **argv; - - // Convert the list. - if ((argv = pyqt6_qtgui_from_argv_list(a0, argc)) == NULL) - sipIsErr = 1; - else - { - // Create it now the arguments are right. - static int nargc; - nargc = argc; - - Py_BEGIN_ALLOW_THREADS - sipCpp = new sipQGuiApplication(nargc, argv, QT_VERSION); - Py_END_ALLOW_THREADS - - // Now modify the original list. - pyqt6_qtgui_update_argv_list(a0, argc, argv); - } -%End - - virtual ~QGuiApplication() /ReleaseGIL/; -%MethodCode - pyqt6_qtgui_cleanup_qobjects(); -%End - - static QWindowList allWindows(); - static QWindowList topLevelWindows(); - static QWindow *topLevelAt(const QPoint &pos); - static QString platformName(); - static QWindow *focusWindow(); - static QObject *focusObject(); - static QScreen *primaryScreen(); - static QList screens(); - static QCursor *overrideCursor(); - static void setOverrideCursor(const QCursor &); - static void changeOverrideCursor(const QCursor &); - static void restoreOverrideCursor(); - static QFont font(); - static void setFont(const QFont &); - static QClipboard *clipboard(); - static QPalette palette(); - static void setPalette(const QPalette &pal); - static Qt::KeyboardModifiers keyboardModifiers(); - static Qt::KeyboardModifiers queryKeyboardModifiers(); - static Qt::MouseButtons mouseButtons(); - static void setLayoutDirection(Qt::LayoutDirection direction); - static Qt::LayoutDirection layoutDirection(); - static bool isRightToLeft(); - static bool isLeftToRight(); - static void setDesktopSettingsAware(bool on); - static bool desktopSettingsAware(); - static void setQuitOnLastWindowClosed(bool quit); - static bool quitOnLastWindowClosed(); - static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - virtual bool notify(QObject *, QEvent *); - -signals: - void fontDatabaseChanged(); - void screenAdded(QScreen *screen); - void lastWindowClosed(); - void focusObjectChanged(QObject *focusObject); -%If (PyQt_SessionManager) - void commitDataRequest(QSessionManager &sessionManager); -%End -%If (PyQt_SessionManager) - void saveStateRequest(QSessionManager &sessionManager); -%End - void focusWindowChanged(QWindow *focusWindow); - void applicationStateChanged(Qt::ApplicationState state); - void applicationDisplayNameChanged(); - -public: - static void setApplicationDisplayName(const QString &name); - static QString applicationDisplayName(); - static QWindow *modalWindow(); - static QStyleHints *styleHints(); - static QInputMethod *inputMethod(); - qreal devicePixelRatio() const; -%If (PyQt_SessionManager) - bool isSessionRestored() const; -%End -%If (PyQt_SessionManager) - QString sessionId() const; -%End -%If (PyQt_SessionManager) - QString sessionKey() const; -%End -%If (PyQt_SessionManager) - bool isSavingSession() const; -%End - static Qt::ApplicationState applicationState(); - static void sync(); - static void setWindowIcon(const QIcon &icon); - static QIcon windowIcon(); - -signals: - void screenRemoved(QScreen *screen); - void layoutDirectionChanged(Qt::LayoutDirection direction); - void primaryScreenChanged(QScreen *screen); - -public: - static void setDesktopFileName(const QString &name); - static QString desktopFileName(); - static QScreen *screenAt(const QPoint &point); - static void setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy policy); - static Qt::HighDpiScaleFactorRoundingPolicy highDpiScaleFactorRoundingPolicy(); -%If (Qt_6_5_0 -) - void setBadgeNumber(qint64 number); -%End - -protected: - virtual bool event(QEvent *); -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef void (*pyqt6_qtgui_cleanup_qobjects_t)(); -extern pyqt6_qtgui_cleanup_qobjects_t pyqt6_qtgui_cleanup_qobjects; - -typedef char **(*pyqt6_qtgui_from_argv_list_t)(PyObject *, int &); -extern pyqt6_qtgui_from_argv_list_t pyqt6_qtgui_from_argv_list; - -typedef void (*pyqt6_qtgui_update_argv_list_t)(PyObject *, int, char **); -extern pyqt6_qtgui_update_argv_list_t pyqt6_qtgui_update_argv_list; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtgui_cleanup_qobjects_t pyqt6_qtgui_cleanup_qobjects; -pyqt6_qtgui_from_argv_list_t pyqt6_qtgui_from_argv_list; -pyqt6_qtgui_update_argv_list_t pyqt6_qtgui_update_argv_list; - -// Forward declarations not in any header files but are part of the API. -void qt_set_sequence_auto_mnemonic(bool enable); -%End - -%InitialisationCode -// Export our own helpers. -sipExportSymbol("qtgui_wrap_ancestors", (void *)qtgui_wrap_ancestors); -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtgui_cleanup_qobjects = (pyqt6_qtgui_cleanup_qobjects_t)sipImportSymbol("pyqt6_cleanup_qobjects"); -Q_ASSERT(pyqt6_qtgui_cleanup_qobjects); - -pyqt6_qtgui_from_argv_list = (pyqt6_qtgui_from_argv_list_t)sipImportSymbol("pyqt6_from_argv_list"); -Q_ASSERT(pyqt6_qtgui_from_argv_list); - -pyqt6_qtgui_update_argv_list = (pyqt6_qtgui_update_argv_list_t)sipImportSymbol("pyqt6_update_argv_list"); -Q_ASSERT(pyqt6_qtgui_update_argv_list); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qicon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qicon.sip deleted file mode 100644 index 2d15fb0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qicon.sip +++ /dev/null @@ -1,265 +0,0 @@ -// qicon.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QIcon /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Mode - { - Normal, - Disabled, - Active, - Selected, - }; - - enum State - { - On, - Off, - }; - -%If (Qt_6_7_0 -) - - enum class ThemeIcon - { - AddressBookNew, - ApplicationExit, - AppointmentNew, - CallStart, - CallStop, - ContactNew, - DocumentNew, - DocumentOpen, - DocumentOpenRecent, - DocumentPageSetup, - DocumentPrint, - DocumentPrintPreview, - DocumentProperties, - DocumentRevert, - DocumentSave, - DocumentSaveAs, - DocumentSend, - EditClear, - EditCopy, - EditCut, - EditDelete, - EditFind, - EditPaste, - EditRedo, - EditSelectAll, - EditUndo, - FolderNew, - FormatIndentLess, - FormatIndentMore, - FormatJustifyCenter, - FormatJustifyFill, - FormatJustifyLeft, - FormatJustifyRight, - FormatTextDirectionLtr, - FormatTextDirectionRtl, - FormatTextBold, - FormatTextItalic, - FormatTextUnderline, - FormatTextStrikethrough, - GoDown, - GoHome, - GoNext, - GoPrevious, - GoUp, - HelpAbout, - HelpFaq, - InsertImage, - InsertLink, - InsertText, - ListAdd, - ListRemove, - MailForward, - MailMarkImportant, - MailMarkRead, - MailMarkUnread, - MailMessageNew, - MailReplyAll, - MailReplySender, - MailSend, - MediaEject, - MediaPlaybackPause, - MediaPlaybackStart, - MediaPlaybackStop, - MediaRecord, - MediaSeekBackward, - MediaSeekForward, - MediaSkipBackward, - MediaSkipForward, - ObjectRotateLeft, - ObjectRotateRight, - ProcessStop, - SystemLockScreen, - SystemLogOut, - SystemSearch, - SystemReboot, - SystemShutdown, - ToolsCheckSpelling, - ViewFullscreen, - ViewRefresh, - ViewRestore, - WindowClose, - WindowNew, - ZoomFitBest, - ZoomIn, - ZoomOut, - AudioCard, - AudioInputMicrophone, - Battery, - CameraPhoto, - CameraVideo, - CameraWeb, - Computer, - DriveHarddisk, - DriveOptical, - InputGaming, - InputKeyboard, - InputMouse, - InputTablet, - MediaFlash, - MediaOptical, - MediaTape, - MultimediaPlayer, - NetworkWired, - NetworkWireless, - Phone, - Printer, - Scanner, - VideoDisplay, - AppointmentMissed, - AppointmentSoon, - AudioVolumeHigh, - AudioVolumeLow, - AudioVolumeMedium, - AudioVolumeMuted, - BatteryCaution, - BatteryLow, - DialogError, - DialogInformation, - DialogPassword, - DialogQuestion, - DialogWarning, - FolderDragAccept, - FolderOpen, - FolderVisiting, - ImageLoading, - ImageMissing, - MailAttachment, - MailUnread, - MailRead, - MailReplied, - MediaPlaylistRepeat, - MediaPlaylistShuffle, - NetworkOffline, - PrinterPrinting, - SecurityHigh, - SecurityLow, - SoftwareUpdateAvailable, - SoftwareUpdateUrgent, - SyncError, - SyncSynchronizing, - UserAvailable, - UserOffline, - WeatherClear, - WeatherClearNight, - WeatherFewClouds, - WeatherFewCloudsNight, - WeatherFog, - WeatherShowers, - WeatherSnow, - WeatherStorm, - }; - -%End - QIcon(); - QIcon(const QPixmap &pixmap); - QIcon(const QIcon &other); - explicit QIcon(const QString &fileName); - explicit QIcon(QIconEngine *engine /GetWrapper/); -%MethodCode - sipCpp = new QIcon(a0); - - // The QIconEngine is implicitly shared by copies of the QIcon and is destroyed - // by C++ when the last copy is destroyed. Therefore we need to transfer - // ownership but not to associate it with this QIcon. The Python object will - // get tidied up when the virtual dtor gets called. - sipTransferTo(a0Wrapper, Py_None); -%End - - QIcon(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QIcon(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QIcon(); - QPixmap pixmap(const QSize &size, qreal devicePixelRatio, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - QPixmap pixmap(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - QPixmap pixmap(int w, int h, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - QPixmap pixmap(int extent, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - QSize actualSize(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - void paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - void paint(QPainter *painter, int x, int y, int w, int h, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; - bool isNull() const; - bool isDetached() const; - void addPixmap(const QPixmap &pixmap, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); - void addFile(const QString &fileName, const QSize &size = QSize(), QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); - qint64 cacheKey() const; - static QIcon fromTheme(const QString &name); - static QIcon fromTheme(const QString &name, const QIcon &fallback); -%If (Qt_6_7_0 -) - static QIcon fromTheme(QIcon::ThemeIcon icon); -%End -%If (Qt_6_7_0 -) - static QIcon fromTheme(QIcon::ThemeIcon icon, const QIcon &fallback); -%End - static bool hasThemeIcon(const QString &name); -%If (Qt_6_7_0 -) - static bool hasThemeIcon(QIcon::ThemeIcon icon); -%End - static QStringList themeSearchPaths(); - static void setThemeSearchPaths(const QStringList &searchpath); - static QString themeName(); - static void setThemeName(const QString &path); - QString name() const; - void swap(QIcon &other /Constrained/); - void setIsMask(bool isMask); - bool isMask() const; - static QStringList fallbackSearchPaths(); - static void setFallbackSearchPaths(const QStringList &paths); - static QString fallbackThemeName(); - static void setFallbackThemeName(const QString &name); -}; - -QDataStream &operator<<(QDataStream &, const QIcon &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QIcon & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qiconengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qiconengine.sip deleted file mode 100644 index c862cfa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qiconengine.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qiconengine.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QIconEngine /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QIconEngine(); - -protected: - QIconEngine(const QIconEngine &other); - -public: - virtual ~QIconEngine(); - virtual void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) = 0; - virtual QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); - virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); - virtual void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state); - virtual void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state); - virtual QString key() const; - virtual QIconEngine *clone() const = 0 /Factory/; - virtual bool read(QDataStream &in); - virtual bool write(QDataStream &out) const; - - enum IconEngineHook - { - IsNullHook, - ScaledPixmapHook, - }; - - virtual QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); - virtual QString iconName(); - virtual bool isNull(); - virtual QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale); - - struct ScaledPixmapArgument - { -%TypeHeaderCode -#include -%End - - QSize size; - QIcon::Mode mode; - QIcon::State state; - qreal scale; - QPixmap pixmap; - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimage.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimage.sip deleted file mode 100644 index 0f6fec7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimage.sip +++ /dev/null @@ -1,398 +0,0 @@ -// qimage.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Windows) -typedef struct HBITMAP__ *HBITMAP; -%End -%If (Windows) -typedef struct HICON__ *HICON; -%End - -class QImage : public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// The C++ closure that is passed to the QImage ctor. -struct QtGui_QImage_closure -{ - PyObject *py_cleanup; - PyObject *py_closure; -}; - - -// Return the optional C++ closure for a QImage ctor. -static QtGui_QImage_closure *QtGui_QImage_buffer(PyObject *py_cleanup, - PyObject *py_closure) -{ - // The cleanup callable or nullptr if there isn't one. - if (py_cleanup == Py_None) - py_cleanup = nullptr; - - if (!py_cleanup) - return nullptr; - - QtGui_QImage_closure *closure = new QtGui_QImage_closure; - - Py_INCREF(py_cleanup); - - if (!py_closure) - py_closure = Py_None; - - Py_INCREF(py_closure); - - closure->py_cleanup = py_cleanup; - closure->py_closure = py_closure; - - return closure; -} - - -// The cleanup function for a QImage ctor. -static void QtGui_QImage_cleanup(void *c) -{ - SIP_BLOCK_THREADS - - QtGui_QImage_closure *closure = reinterpret_cast(c); - bool is_exception = false; - - PyObject *res = PyObject_CallFunctionObjArgs(closure->py_cleanup, - closure->py_closure, SIP_NULLPTR); - - Py_DECREF(closure->py_closure); - Py_DECREF(closure->py_cleanup); - - if (res) - Py_DECREF(res); - else - is_exception = true; - - delete closure; - - if (is_exception) - pyqt6_qtgui_err_print(); - - SIP_UNBLOCK_THREADS -} -%End - -public: - enum InvertMode - { - InvertRgb, - InvertRgba, - }; - - enum Format - { - Format_Invalid, - Format_Mono, - Format_MonoLSB, - Format_Indexed8, - Format_RGB32, - Format_ARGB32, - Format_ARGB32_Premultiplied, - Format_RGB16, - Format_ARGB8565_Premultiplied, - Format_RGB666, - Format_ARGB6666_Premultiplied, - Format_RGB555, - Format_ARGB8555_Premultiplied, - Format_RGB888, - Format_RGB444, - Format_ARGB4444_Premultiplied, - Format_RGBX8888, - Format_RGBA8888, - Format_RGBA8888_Premultiplied, - Format_BGR30, - Format_A2BGR30_Premultiplied, - Format_RGB30, - Format_A2RGB30_Premultiplied, - Format_Alpha8, - Format_Grayscale8, - Format_RGBX64, - Format_RGBA64, - Format_RGBA64_Premultiplied, - Format_Grayscale16, - Format_BGR888, -%If (Qt_6_2_0 -) - Format_RGBX16FPx4, -%End -%If (Qt_6_2_0 -) - Format_RGBA16FPx4, -%End -%If (Qt_6_2_0 -) - Format_RGBA16FPx4_Premultiplied, -%End -%If (Qt_6_2_0 -) - Format_RGBX32FPx4, -%End -%If (Qt_6_2_0 -) - Format_RGBA32FPx4, -%End -%If (Qt_6_2_0 -) - Format_RGBA32FPx4_Premultiplied, -%End - }; - - QImage(); - QImage(const QSize &size, QImage::Format format); - QImage(int width, int height, QImage::Format format); - QImage(const uchar *data /KeepReference/, int width, int height, QImage::Format format, SIP_PYCALLABLE cleanupFunction /AllowNone/ = 0, SIP_PYOBJECT cleanupInfo /AllowNone/ = 0) [(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0)]; -%MethodCode - QtGui_QImage_closure *closure = QtGui_QImage_buffer(a4, a5); - - sipCpp = new sipQImage(a0, a1, a2, a3, - (closure ? QtGui_QImage_cleanup : nullptr), closure); -%End - - QImage(const uchar *data /KeepReference/, int width, int height, qsizetype bytesPerLine, QImage::Format format, SIP_PYCALLABLE cleanupFunction /AllowNone/ = 0, SIP_PYOBJECT cleanupInfo /AllowNone/ = 0) [(const uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0)]; -%MethodCode - QtGui_QImage_closure *closure = QtGui_QImage_buffer(a5, a6); - - sipCpp = new sipQImage(a0, a1, a2, a3, a4, - (closure ? QtGui_QImage_cleanup : nullptr), closure); -%End - - QImage(void *data /KeepReference/, int width, int height, QImage::Format format, SIP_PYCALLABLE cleanupFunction /AllowNone/ = 0, SIP_PYOBJECT cleanupInfo /AllowNone/ = 0) /NoTypeHint/ [(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0)]; -%MethodCode - QtGui_QImage_closure *closure = QtGui_QImage_buffer(a4, a5); - - sipCpp = new sipQImage(reinterpret_cast(a0), a1, a2, a3, - (closure ? QtGui_QImage_cleanup : nullptr), closure); -%End - - QImage(void *data /KeepReference/, int width, int height, qsizetype bytesPerLine, QImage::Format format, SIP_PYCALLABLE cleanupFunction /AllowNone/ = 0, SIP_PYOBJECT cleanupInfo /AllowNone/ = 0) /NoTypeHint/ [(uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0)]; -%MethodCode - QtGui_QImage_closure *closure = QtGui_QImage_buffer(a5, a6); - - sipCpp = new sipQImage(reinterpret_cast(a0), a1, a2, a3, a4, - (closure ? QtGui_QImage_cleanup : nullptr), closure); -%End - - explicit QImage(SIP_PYLIST xpm /TypeHint="List[str]"/) [(const char * const *xpm)]; -%MethodCode - // The Python interface is a list of ASCII strings that make up the image. - - const char **str = QtGui_ListToArray(a0); - - if (str) - { - sipCpp = new sipQImage(str); - QtGui_DeleteArray(str); - } - else - sipIsErr = 1; -%End - - QImage(const QString &fileName, const char *format = 0) /ReleaseGIL/; - QImage(const QImage &); - QImage(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new sipQImage(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - virtual ~QImage(); - bool isNull() const; - bool operator==(const QImage &) const; - bool operator!=(const QImage &) const; - QImage copy(const QRect &rect = QRect()) const; - QImage copy(int x, int y, int w, int h) const; - QImage::Format format() const; - QImage convertToFormat(QImage::Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const; - QImage convertToFormat(QImage::Format f, const QList &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const; -%If (Windows) - HBITMAP toHBITMAP() const; -%End -%If (Windows) - static QImage fromHBITMAP(HBITMAP hbitmap); -%End -%If (Windows) - HICON toHICON(const QImage &mask = {}) const; -%End -%If (Windows) - static QImage fromHICON(HICON hicon); -%End - int width() const; - int height() const; - QSize size() const; - QRect rect() const; - int depth() const; - QRgb color(int i) const; - void setColor(int i, QRgb c); - bool allGray() const; - bool isGrayscale() const; - void *bits() [uchar * ()]; - const void *constBits() const [const uchar * ()]; - void *scanLine(int) [uchar * (int)]; - const void *constScanLine(int) const [const uchar * (int)]; - qsizetype bytesPerLine() const; - bool valid(const QPoint &pt) const; - bool valid(int x, int y) const; - int pixelIndex(const QPoint &pt) const; - int pixelIndex(int x, int y) const; - QRgb pixel(const QPoint &pt) const; - QRgb pixel(int x, int y) const; - void setPixel(const QPoint &pt, uint index_or_rgb); - void setPixel(int x, int y, uint index_or_rgb); - QList colorTable() const; - void setColorTable(const QList &colors); - void fill(uint pixel); - void fill(Qt::GlobalColor color /Constrained/); - void fill(const QColor &color); - bool hasAlphaChannel() const; - void setAlphaChannel(const QImage &alphaChannel); - QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const; - QImage createHeuristicMask(bool clipTight = true) const; - QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; - QImage scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; - QImage scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const; - QImage scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const; - QImage mirrored(bool horizontal = false, bool vertical = true) const; - void mirror(bool horizontal = false, bool vertical = true); - QImage rgbSwapped() const; - void rgbSwap(); - void invertPixels(QImage::InvertMode mode = QImage::InvertRgb); - bool load(QIODevice *device, const char *format) /ReleaseGIL/; - bool load(const QString &fileName, const char *format = 0) /ReleaseGIL/; - bool loadFromData(const uchar *data /Array/, int len /ArraySize/, const char *format = 0); - bool loadFromData(const QByteArray &data, const char *format = 0); - bool save(const QString &fileName, const char *format = 0, int quality = -1) const /ReleaseGIL/; - bool save(QIODevice *device, const char *format = 0, int quality = -1) const /ReleaseGIL/; - static QImage fromData(const uchar *data /Array/, int size /ArraySize/, const char *format = 0); - static QImage fromData(const QByteArray &data, const char *format = 0); - virtual QPaintEngine *paintEngine() const; - int dotsPerMeterX() const; - int dotsPerMeterY() const; - void setDotsPerMeterX(int); - void setDotsPerMeterY(int); - QPoint offset() const; - void setOffset(const QPoint &); - QStringList textKeys() const; - QString text(const QString &key = QString()) const; - void setText(const QString &key, const QString &value); - QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const; - QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const; - static QTransform trueMatrix(const QTransform &, int w, int h); - qint64 cacheKey() const; - int colorCount() const; - void setColorCount(int); - int bitPlaneCount() const; - void swap(QImage &other /Constrained/); - qreal devicePixelRatio() const; - void setDevicePixelRatio(qreal scaleFactor); - QPixelFormat pixelFormat() const; - static QPixelFormat toPixelFormat(QImage::Format format); - static QImage::Format toImageFormat(QPixelFormat format); - QColor pixelColor(int x, int y) const; - QColor pixelColor(const QPoint &pt) const; - void setPixelColor(int x, int y, const QColor &c); - void setPixelColor(const QPoint &pt, const QColor &c); - bool reinterpretAsFormat(QImage::Format f); - qsizetype sizeInBytes() const; - QImage convertedTo(QImage::Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const; - void convertTo(QImage::Format f, Qt::ImageConversionFlags flags = Qt::AutoColor); - QColorSpace colorSpace() const; - void setColorSpace(const QColorSpace &); - QImage convertedToColorSpace(const QColorSpace &) const; - void convertToColorSpace(const QColorSpace &); - void applyColorTransform(const QColorTransform &transform); -%If (Qt_6_2_0 -) - QSizeF deviceIndependentSize() const; -%End -%If (Qt_6_4_0 -) - QImage colorTransformed(const QColorTransform &transform) const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QImage &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QImage & /Constrained/) /ReleaseGIL/; - -%ModuleHeaderCode -// Helpers for QImage and QPixmap ctors. -const char **QtGui_ListToArray(PyObject *lst); -void QtGui_DeleteArray(const char **arr); - -// Imports from QtCore. -typedef void (*pyqt6_qtgui_err_print_t)(); -extern pyqt6_qtgui_err_print_t pyqt6_qtgui_err_print; -%End - -%ModuleCode -// Convert a list of strings to an array of ASCII strings on the heap. Used by -// QImage and QPixmap. -const char **QtGui_ListToArray(PyObject *lst) -{ - Py_ssize_t nstr = PyList_Size(lst); - const char **arr = new const char *[nstr + 1]; - - for (Py_ssize_t i = 0; i < nstr; ++i) - { - PyObject *ascii_obj = PyList_GetItem(lst, i); - const char *ascii = sipString_AsASCIIString(&ascii_obj); - - if (!ascii) - { - while (i-- > 0) - delete[] arr[i]; - - delete[] arr; - - return 0; - } - - // Copy the string. - arr[i] = qstrdup(ascii); - - Py_DECREF(ascii_obj); - } - - // The sentinal. - arr[nstr] = 0; - - return arr; -} - - -// Return a string array created by QtGui_ListToArray() to the heap. -void QtGui_DeleteArray(const char **arr) -{ - for (Py_ssize_t i = 0; arr[i]; ++i) - delete[] arr[i]; - - delete[] arr; -} - -// Imports from QtCore. -pyqt6_qtgui_err_print_t pyqt6_qtgui_err_print; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtgui_err_print = (pyqt6_qtgui_err_print_t)sipImportSymbol("pyqt6_err_print"); -Q_ASSERT(pyqt6_qtgui_err_print); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimageiohandler.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimageiohandler.sip deleted file mode 100644 index e3d4bf5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimageiohandler.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qimageiohandler.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QImageIOHandler -{ -%TypeHeaderCode -#include -%End - -public: - enum ImageOption - { - Size, - ClipRect, - Description, - ScaledClipRect, - ScaledSize, - CompressionRatio, - Gamma, - Quality, - Name, - SubType, - IncrementalReading, - Endianness, - Animation, - BackgroundColor, - SupportedSubTypes, - OptimizedWrite, - ProgressiveScanWrite, - ImageTransformation, - }; - - QImageIOHandler(); - virtual ~QImageIOHandler(); - void setDevice(QIODevice *device); - QIODevice *device() const; - void setFormat(const QByteArray &format); - QByteArray format() const; - virtual bool canRead() const = 0; - virtual bool read(QImage *image) = 0; - virtual bool write(const QImage &image); - virtual QVariant option(QImageIOHandler::ImageOption option) const; - virtual void setOption(QImageIOHandler::ImageOption option, const QVariant &value); - virtual bool supportsOption(QImageIOHandler::ImageOption option) const; - virtual bool jumpToNextImage(); - virtual bool jumpToImage(int imageNumber); - virtual int loopCount() const; - virtual int imageCount() const; - virtual int nextImageDelay() const; - virtual int currentImageNumber() const; - virtual QRect currentImageRect() const; - - enum Transformation /BaseType=Flag/ - { - TransformationNone, - TransformationMirror, - TransformationFlip, - TransformationRotate180, - TransformationRotate90, - TransformationMirrorAndRotate90, - TransformationFlipAndRotate90, - TransformationRotate270, - }; - - typedef QFlags Transformations; - -private: - QImageIOHandler(const QImageIOHandler &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagereader.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagereader.sip deleted file mode 100644 index 5ae6cfa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagereader.sip +++ /dev/null @@ -1,96 +0,0 @@ -// qimagereader.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QImageReader -{ -%TypeHeaderCode -#include -%End - -public: - enum ImageReaderError - { - UnknownError, - FileNotFoundError, - DeviceError, - UnsupportedFormatError, - InvalidDataError, - }; - - QImageReader(); - QImageReader(QIODevice *device, const QByteArray &format = QByteArray()); - QImageReader(const QString &fileName, const QByteArray &format = QByteArray()); - ~QImageReader(); - void setFormat(const QByteArray &format); - QByteArray format() const; - void setDevice(QIODevice *device); - QIODevice *device() const; - void setFileName(const QString &fileName); - QString fileName() const; - QSize size() const; - void setClipRect(const QRect &rect); - QRect clipRect() const; - void setScaledSize(const QSize &size); - QSize scaledSize() const; - void setScaledClipRect(const QRect &rect); - QRect scaledClipRect() const; - bool canRead() const; - QImage read() /ReleaseGIL/; - bool read(QImage *image) /ReleaseGIL/; - bool jumpToNextImage(); - bool jumpToImage(int imageNumber); - int loopCount() const; - int imageCount() const; - int nextImageDelay() const; - int currentImageNumber() const; - QRect currentImageRect() const; - QImageReader::ImageReaderError error() const; - QString errorString() const; - static QByteArray imageFormat(const QString &fileName); - static QByteArray imageFormat(QIODevice *device); - static QList supportedImageFormats(); - QStringList textKeys() const; - QString text(const QString &key) const; - void setBackgroundColor(const QColor &color); - QColor backgroundColor() const; - bool supportsAnimation() const; - void setQuality(int quality); - int quality() const; - bool supportsOption(QImageIOHandler::ImageOption option) const; - void setAutoDetectImageFormat(bool enabled); - bool autoDetectImageFormat() const; - QImage::Format imageFormat() const; - void setDecideFormatFromContent(bool ignored); - bool decideFormatFromContent() const; - static QList supportedMimeTypes(); - QByteArray subType() const; - QList supportedSubTypes() const; - QImageIOHandler::Transformations transformation() const; - void setAutoTransform(bool enabled); - bool autoTransform() const; - static QList imageFormatsForMimeType(const QByteArray &mimeType); - static int allocationLimit(); - static void setAllocationLimit(int mbLimit); - -private: - QImageReader(const QImageReader &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagewriter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagewriter.sip deleted file mode 100644 index 905ad19..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qimagewriter.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qimagewriter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QImageWriter -{ -%TypeHeaderCode -#include -%End - -public: - enum ImageWriterError - { - UnknownError, - DeviceError, - UnsupportedFormatError, - InvalidImageError, - }; - - QImageWriter(); - QImageWriter(QIODevice *device, const QByteArray &format); - QImageWriter(const QString &fileName, const QByteArray &format = QByteArray()); - ~QImageWriter(); - void setFormat(const QByteArray &format); - QByteArray format() const; - void setDevice(QIODevice *device); - QIODevice *device() const; - void setFileName(const QString &fileName); - QString fileName() const; - void setQuality(int quality); - int quality() const; - bool canWrite() const; - bool write(const QImage &image) /ReleaseGIL/; - QImageWriter::ImageWriterError error() const; - QString errorString() const; - static QList supportedImageFormats(); - void setText(const QString &key, const QString &text); - bool supportsOption(QImageIOHandler::ImageOption option) const; - void setCompression(int compression); - int compression() const; - static QList supportedMimeTypes(); - void setSubType(const QByteArray &type); - QByteArray subType() const; - QList supportedSubTypes() const; - void setOptimizedWrite(bool optimize); - bool optimizedWrite() const; - void setProgressiveScanWrite(bool progressive); - bool progressiveScanWrite() const; - QImageIOHandler::Transformations transformation() const; - void setTransformation(QImageIOHandler::Transformations orientation); - static QList imageFormatsForMimeType(const QByteArray &mimeType); - -private: - QImageWriter(const QImageWriter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputdevice.sip deleted file mode 100644 index c1f3b7a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputdevice.sip +++ /dev/null @@ -1,89 +0,0 @@ -// qinputdevice.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QInputDevice : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum class DeviceType /BaseType=Flag/ - { - Unknown, - Mouse, - TouchScreen, - TouchPad, - Puck, - Stylus, - Airbrush, - Keyboard, - AllDevices, - }; - - typedef QFlags DeviceTypes; - - enum class Capability /BaseType=Flag/ - { - None, - Position, - Area, - Pressure, - Velocity, - NormalizedPosition, - MouseEmulation, -%If (Qt_6_2_0 -) - PixelScroll, -%End - Scroll, - Hover, - Rotation, - XTilt, - YTilt, - TangentialPressure, - ZPosition, - All, - }; - - typedef QFlags Capabilities; - QInputDevice(const QString &name, qint64 systemId, QInputDevice::DeviceType type, const QString &seatName = QString(), QObject *parent /TransferThis/ = 0); - QInputDevice(QObject *parent /TransferThis/ = 0); - virtual ~QInputDevice(); - QString name() const; - QInputDevice::DeviceType type() const; - QInputDevice::Capabilities capabilities() const; - bool hasCapability(QInputDevice::Capability cap) const; - qint64 systemId() const; - QString seatName() const; - QRect availableVirtualGeometry() const; - static QList devices(); - static const QInputDevice *primaryKeyboard(const QString &seatName = QString()); - bool operator==(const QInputDevice &other) const; - -signals: - void availableVirtualGeometryChanged(QRect area); - -public: -%If (Qt_6_3_0 -) - static QStringList seatNames(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputmethod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputmethod.sip deleted file mode 100644 index 2c45345..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qinputmethod.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qinputmethod.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QInputMethod : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QTransform inputItemTransform() const; - void setInputItemTransform(const QTransform &transform); - QRectF cursorRectangle() const; - QRectF keyboardRectangle() const; - - enum Action - { - Click, - ContextMenu, - }; - - bool isVisible() const; - void setVisible(bool visible); - bool isAnimating() const; - QLocale locale() const; - Qt::LayoutDirection inputDirection() const; - QRectF inputItemRectangle() const; - void setInputItemRectangle(const QRectF &rect); - static QVariant queryFocusObject(Qt::InputMethodQuery query, const QVariant &argument); - -public slots: - void show(); - void hide(); - void update(Qt::InputMethodQueries queries); - void reset(); - void commit(); - void invokeAction(QInputMethod::Action a, int cursorPosition); - -signals: - void cursorRectangleChanged(); - void keyboardRectangleChanged(); - void visibleChanged(); - void animatingChanged(); - void localeChanged(); - void inputDirectionChanged(Qt::LayoutDirection newDirection); - -public: - QRectF anchorRectangle() const; - QRectF inputItemClipRectangle() const; - -signals: - void anchorRectangleChanged(); - void inputItemClipRectangleChanged(); - -private: - QInputMethod(); - virtual ~QInputMethod(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qkeysequence.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qkeysequence.sip deleted file mode 100644 index be30e4f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qkeysequence.sip +++ /dev/null @@ -1,239 +0,0 @@ -// qkeysequence.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QKeySequence /TypeHintIn="Union[QKeySequence, QKeySequence.StandardKey, QString, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// Allow a StandardKey, QString or an integer whenever a QKeySequence is -// expected. - -if (sipIsErr == NULL) -{ - if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS)) - return 1; - - PyErr_Clear(); - sipConvertToEnum(sipPy, sipType_QKeySequence_StandardKey); - if (!PyErr_Occurred()) - return 1; - - if (sipCanConvertToType(sipPy, sipType_QString, 0)) - return 1; - - PyErr_Clear(); - PyLong_AsLong(sipPy); - - return !PyErr_Occurred(); -} - -if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS)) -{ - *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QKeySequence, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - - return 0; -} - -PyErr_Clear(); -int skey = sipConvertToEnum(sipPy, sipType_QKeySequence_StandardKey); - -if (!PyErr_Occurred()) -{ - *sipCppPtr = new QKeySequence(static_cast(skey)); - - return sipGetState(sipTransferObj); -} - -PyErr_Clear(); - -if (sipCanConvertToType(sipPy, sipType_QString, 0)) -{ - int state; - QString *qs = reinterpret_cast(sipConvertToType(sipPy, sipType_QString, 0, 0, &state, sipIsErr)); - - if (*sipIsErr) - { - sipReleaseType(qs, sipType_QString, state); - return 0; - } - - *sipCppPtr = new QKeySequence(*qs); - - sipReleaseType(qs, sipType_QString, state); - - return sipGetState(sipTransferObj); -} - -int key = PyLong_AsLong(sipPy); - -*sipCppPtr = new QKeySequence(key); - -return sipGetState(sipTransferObj); -%End - -%PickleCode - sipRes = Py_BuildValue("iiii", sipCpp->operator[](0), sipCpp->operator[](1), sipCpp->operator[](2), sipCpp->operator[](3)); -%End - -public: - enum SequenceFormat - { - NativeText, - PortableText, - }; - - enum SequenceMatch - { - NoMatch, - PartialMatch, - ExactMatch, - }; - - enum StandardKey - { - UnknownKey, - HelpContents, - WhatsThis, - Open, - Close, - Save, - New, - Delete, - Cut, - Copy, - Paste, - Undo, - Redo, - Back, - Forward, - Refresh, - ZoomIn, - ZoomOut, - Print, - AddTab, - NextChild, - PreviousChild, - Find, - FindNext, - FindPrevious, - Replace, - SelectAll, - Bold, - Italic, - Underline, - MoveToNextChar, - MoveToPreviousChar, - MoveToNextWord, - MoveToPreviousWord, - MoveToNextLine, - MoveToPreviousLine, - MoveToNextPage, - MoveToPreviousPage, - MoveToStartOfLine, - MoveToEndOfLine, - MoveToStartOfBlock, - MoveToEndOfBlock, - MoveToStartOfDocument, - MoveToEndOfDocument, - SelectNextChar, - SelectPreviousChar, - SelectNextWord, - SelectPreviousWord, - SelectNextLine, - SelectPreviousLine, - SelectNextPage, - SelectPreviousPage, - SelectStartOfLine, - SelectEndOfLine, - SelectStartOfBlock, - SelectEndOfBlock, - SelectStartOfDocument, - SelectEndOfDocument, - DeleteStartOfWord, - DeleteEndOfWord, - DeleteEndOfLine, - InsertParagraphSeparator, - InsertLineSeparator, - SaveAs, - Preferences, - Quit, - FullScreen, - Deselect, - DeleteCompleteLine, - Backspace, - Cancel, - }; - - QKeySequence(); - QKeySequence(const QKeySequence &ks /Constrained/); - QKeySequence(QKeySequence::StandardKey key); - QKeySequence(const QString &key, QKeySequence::SequenceFormat format = QKeySequence::NativeText); - QKeySequence(int k1, int key2 = 0, int key3 = 0, int key4 = 0); - QKeySequence(QKeyCombination k1, QKeyCombination key2 = QKeyCombination::fromCombined(0), QKeyCombination key3 = QKeyCombination::fromCombined(0), QKeyCombination key4 = QKeyCombination::fromCombined(0)); - QKeySequence(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QKeySequence(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QKeySequence(); - int count() const /__len__/; - bool isEmpty() const; - QKeySequence::SequenceMatch matches(const QKeySequence &seq) const; - static QKeySequence mnemonic(const QString &text); - QKeyCombination operator[](int i) const; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QKeyCombination(sipCpp->operator[]((uint)idx)); -%End - - bool operator==(const QKeySequence &other) const; - bool operator!=(const QKeySequence &other) const; - bool operator<(const QKeySequence &ks) const; - bool operator>(const QKeySequence &other) const; - bool operator<=(const QKeySequence &other) const; - bool operator>=(const QKeySequence &other) const; - bool isDetached() const; - void swap(QKeySequence &other /Constrained/); - QString toString(QKeySequence::SequenceFormat format = QKeySequence::PortableText) const; - static QKeySequence fromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText); - static QList keyBindings(QKeySequence::StandardKey key); - static QList listFromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText); - static QString listToString(const QList &list, QKeySequence::SequenceFormat format = QKeySequence::PortableText); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -QDataStream &operator<<(QDataStream &in, const QKeySequence &ks) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &out, QKeySequence &ks /Constrained/) /ReleaseGIL/; -void qt_set_sequence_auto_mnemonic(bool b); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmatrix4x4.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmatrix4x4.sip deleted file mode 100644 index 8519c52..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmatrix4x4.sip +++ /dev/null @@ -1,296 +0,0 @@ -// qmatrix4x4.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QMatrix4x4 -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PYQT_FLOAT data[16]; - - // We want the data in row-major order. - sipCpp->copyDataTo(data); - - sipRes = Py_BuildValue("dddddddddddddddd", - (double)data[0], (double)data[1], (double)data[2], (double)data[3], - (double)data[4], (double)data[5], (double)data[6], (double)data[7], - (double)data[8], (double)data[9], (double)data[10], (double)data[11], - (double)data[12], (double)data[13], (double)data[14], (double)data[15]); -%End - -public: - QMatrix4x4(); - explicit QMatrix4x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/) [(const float *values)]; -%MethodCode - float values[16]; - - if ((sipError = qtgui_matrixDataFromSequence(a0, 16, values)) == sipErrorNone) - sipCpp = new QMatrix4x4(values); -%End - - QMatrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44); - QMatrix4x4(const QTransform &transform); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - bool bad = false; - int i; - PyObject *m[16]; - PYQT_FLOAT data[16]; - - // The raw data is in column-major order but we want row-major order. - sipCpp->copyDataTo(data); - - for (i = 0; i < 16; ++i) - { - m[i] = PyFloat_FromDouble(data[i]); - - if (!m[i]) - bad = true; - } - - if (!bad) - { - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QMatrix4x4(" - "%R, %R, %R, %R, " - "%R, %R, %R, %R, " - "%R, %R, %R, %R, " - "%R, %R, %R, %R)", - m[0], m[1], m[2], m[3], - m[4], m[5], m[6], m[7], - m[8], m[9], m[10], m[11], - m[12], m[13], m[14], m[15]); - } - - for (i = 0; i < 16; ++i) - Py_XDECREF(m[i]); -%End - - double determinant() const; - QMatrix4x4 inverted(bool *invertible = 0) const; - QMatrix4x4 transposed() const; - QMatrix3x3 normalMatrix() const; - void scale(const QVector3D &vector); - void scale(float x, float y); - void scale(float x, float y, float z); - void scale(float factor); - void translate(const QVector3D &vector); - void translate(float x, float y); - void translate(float x, float y, float z); - void rotate(float angle, const QVector3D &vector); - void rotate(float angle, float x, float y, float z = 0.F); - void rotate(const QQuaternion &quaternion); - void ortho(const QRect &rect); - void ortho(const QRectF &rect); - void ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane); - void frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane); - void perspective(float angle, float aspect, float nearPlane, float farPlane); - void lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up); - SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; -%MethodCode - float values[16]; - - sipCpp->copyDataTo(values); - sipError = qtgui_matrixDataAsList(16, values, &sipRes); -%End - - QTransform toTransform() const; - QTransform toTransform(float distanceToPlane) const; - QRect mapRect(const QRect &rect) const; - QRectF mapRect(const QRectF &rect) const; - SIP_PYLIST data() /TypeHint="List[float]"/; -%MethodCode - sipError = qtgui_matrixDataAsList(16, sipCpp->constData(), &sipRes); -%End - - void optimize(); - SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone) - { - sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); - - if (!sipRes) - sipError = sipErrorFail; - } -%End - - void __setitem__(SIP_PYOBJECT, qreal); -%MethodCode - int row, column; - - if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone) - sipCpp->operator()(row, column) = a1; -%End - - QVector4D column(int index) const; - void setColumn(int index, const QVector4D &value); - QVector4D row(int index) const; - void setRow(int index, const QVector4D &value); - bool isIdentity() const; - void setToIdentity(); - void fill(float value); - QMatrix4x4 &operator+=(const QMatrix4x4 &other); - QMatrix4x4 &operator-=(const QMatrix4x4 &other); - QMatrix4x4 &operator*=(const QMatrix4x4 &other) /__imatmul__/; - QMatrix4x4 &operator*=(float factor); - QMatrix4x4 &operator/=(float divisor); - bool operator==(const QMatrix4x4 &other) const; - bool operator!=(const QMatrix4x4 &other) const; - QPoint map(const QPoint &point) const; - QPointF map(const QPointF &point) const; - QVector3D map(const QVector3D &point) const; - QVector3D mapVector(const QVector3D &vector) const; - QVector4D map(const QVector4D &point) const; - void viewport(float left, float bottom, float width, float height, float nearPlane = 0.F, float farPlane = 1.F); - void viewport(const QRectF &rect); - bool isAffine() const; -}; - -QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor); -QMatrix4x4 operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2); -QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2); -QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2) /__matmul__/; -QPoint operator*(const QPoint &point, const QMatrix4x4 &matrix); -QPointF operator*(const QPointF &point, const QMatrix4x4 &matrix); -QPoint operator*(const QMatrix4x4 &matrix, const QPoint &point); -QPointF operator*(const QMatrix4x4 &matrix, const QPointF &point); -QMatrix4x4 operator-(const QMatrix4x4 &matrix); -QMatrix4x4 operator*(float factor, const QMatrix4x4 &matrix); -QMatrix4x4 operator*(const QMatrix4x4 &matrix, float factor); -bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2); -QDataStream &operator<<(QDataStream &, const QMatrix4x4 &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QMatrix4x4 & /Constrained/) /ReleaseGIL/; - -%ModuleHeaderCode -// Helpers for the matrix classes. -typedef float PYQT_FLOAT; - -sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows, - int nr_columns, int *row, int *column); -sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values, - PYQT_FLOAT *values); -sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values, - PyObject **list); -%End - -%ModuleCode -// Convert a Python object to a row and column. -sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows, - int nr_columns, int *row, int *column) -{ - sipErrorState es = sipErrorContinue; - - if (PyTuple_Check(tup) && PyArg_ParseTuple(tup, "ii", row, column)) - if (*row >= 0 && *row < nr_rows && *column >= 0 && *column < nr_columns) - es = sipErrorNone; - - if (es == sipErrorContinue) - PyErr_Format(PyExc_IndexError, "an index must be a row in the range 0 to %d and a column in the range 0 to %d", nr_rows - 1, nr_columns - 1); - - return es; -} - - -// Convert a Python object to an array of qreals. -sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values, - PYQT_FLOAT *values) -{ - sipErrorState es; - - if (PySequence_Size(seq) == nr_values) - { - es = sipErrorNone; - - for (int i = 0; i < nr_values; ++i) - { - PyObject *value = PySequence_GetItem(seq, i); - - if (!value) - { - es = sipErrorFail; - break; - } - - PyErr_Clear(); - - double d = PyFloat_AsDouble(value); - - if (PyErr_Occurred()) - { - Py_DECREF(value); - es = sipErrorContinue; - break; - } - - Py_DECREF(value); - - *values++ = d; - } - } - else - { - es = sipErrorContinue; - } - - if (es == sipErrorContinue) - PyErr_Format(PyExc_TypeError, "a sequence of %d floats is expected", - nr_values); - - return es; -} - - -// Convert an array of qreals to a Python list. -sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values, - PyObject **list) -{ - PyObject *l = PyList_New(nr_values); - - if (!l) - return sipErrorFail; - - for (int i = 0; i < nr_values; ++i) - { - PyObject *value = PyFloat_FromDouble(*values++); - - if (!value) - { - Py_DECREF(l); - return sipErrorFail; - } - - PyList_SetItem(l, i, value); - } - - *list = l; - - return sipErrorNone; -} -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmovie.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmovie.sip deleted file mode 100644 index cfedbdb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qmovie.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qmovie.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMovie : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum MovieState - { - NotRunning, - Paused, - Running, - }; - - enum CacheMode - { - CacheNone, - CacheAll, - }; - - explicit QMovie(QObject *parent /TransferThis/ = 0); - QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0); - QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0); - virtual ~QMovie(); - static QList supportedFormats(); - void setDevice(QIODevice *device); - QIODevice *device() const; - void setFileName(const QString &fileName); - QString fileName() const; - void setFormat(const QByteArray &format); - QByteArray format() const; - void setBackgroundColor(const QColor &color); - QColor backgroundColor() const; - QMovie::MovieState state() const; - QRect frameRect() const; - QImage currentImage() const; - QPixmap currentPixmap() const; - bool isValid() const; - bool jumpToFrame(int frameNumber); - int loopCount() const; - int frameCount() const; - int nextFrameDelay() const; - int currentFrameNumber() const; - void setSpeed(int percentSpeed); - int speed() const; - QSize scaledSize(); - void setScaledSize(const QSize &size); - QMovie::CacheMode cacheMode() const; - void setCacheMode(QMovie::CacheMode mode); - -signals: - void started(); - void resized(const QSize &size); - void updated(const QRect &rect); - void stateChanged(QMovie::MovieState state); - void error(QImageReader::ImageReaderError error); - void finished(); - void frameChanged(int frameNumber); - -public slots: - void start(); - bool jumpToNextFrame(); - void setPaused(bool paused); - void stop(); - -public: - QImageReader::ImageReaderError lastError() const; - QString lastErrorString() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qoffscreensurface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qoffscreensurface.sip deleted file mode 100644 index 4797e61..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qoffscreensurface.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qoffscreensurface.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOffscreenSurface : public QObject, public QSurface -{ -%TypeHeaderCode -#include -%End - -public: - QOffscreenSurface(QScreen *screen = 0, QObject *parent /TransferThis/ = 0); - virtual ~QOffscreenSurface(); - virtual QSurface::SurfaceType surfaceType() const; - void create(); - void destroy(); - bool isValid() const; - void setFormat(const QSurfaceFormat &format); - virtual QSurfaceFormat format() const; - QSurfaceFormat requestedFormat() const; - virtual QSize size() const; - QScreen *screen() const; - void setScreen(QScreen *screen); - -signals: - void screenChanged(QScreen *screen); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qopenglcontext.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qopenglcontext.sip deleted file mode 100644 index 559aa2d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qopenglcontext.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qopenglcontext.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_OpenGL) - -class QOpenGLContextGroup : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QOpenGLContextGroup(); - QList shares() const; - static QOpenGLContextGroup *currentContextGroup(); - -private: - QOpenGLContextGroup(); -}; - -%End -%If (PyQt_OpenGL) - -class QOpenGLContext : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOpenGLContext(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLContext(); - void setFormat(const QSurfaceFormat &format); - void setShareContext(QOpenGLContext *shareContext); - void setScreen(QScreen *screen); - bool create(); - bool isValid() const; - QSurfaceFormat format() const; - QOpenGLContext *shareContext() const; - QOpenGLContextGroup *shareGroup() const; - QScreen *screen() const; - GLuint defaultFramebufferObject() const; - bool makeCurrent(QSurface *surface); - void doneCurrent(); - void swapBuffers(QSurface *surface); - QFunctionPointer getProcAddress(const QByteArray &procName) const; - QSurface *surface() const; - static QOpenGLContext *currentContext(); - static bool areSharing(QOpenGLContext *first, QOpenGLContext *second); - QSet extensions() const; - bool hasExtension(const QByteArray &extension) const; - -signals: - void aboutToBeDestroyed(); - -public: - enum OpenGLModuleType - { - LibGL, - LibGLES, - }; - - static QOpenGLContext::OpenGLModuleType openGLModuleType(); - bool isOpenGLES() const; - static bool supportsThreadedOpenGL(); - static QOpenGLContext *globalShareContext(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagedpaintdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagedpaintdevice.sip deleted file mode 100644 index aaf08bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagedpaintdevice.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qpagedpaintdevice.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPagedPaintDevice : public QPaintDevice /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QPagedPaintDevice(); - virtual bool newPage() = 0; - - enum PdfVersion - { - PdfVersion_1_4, - PdfVersion_A1b, - PdfVersion_1_6, - }; - - virtual bool setPageSize(const QPageSize &pageSize); - virtual bool setPageLayout(const QPageLayout &pageLayout); - QPageLayout pageLayout() const; - virtual bool setPageOrientation(QPageLayout::Orientation orientation); - virtual bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Millimeter); - virtual void setPageRanges(const QPageRanges &ranges); - QPageRanges pageRanges() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagelayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagelayout.sip deleted file mode 100644 index a06177d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagelayout.sip +++ /dev/null @@ -1,90 +0,0 @@ -// qpagelayout.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPageLayout -{ -%TypeHeaderCode -#include -%End - -public: - enum Unit - { - Millimeter, - Point, - Inch, - Pica, - Didot, - Cicero, - }; - - enum Orientation - { - Portrait, - Landscape, - }; - - enum Mode - { - StandardMode, - FullPageMode, - }; - - QPageLayout(); - QPageLayout(const QPageSize &pageSize, QPageLayout::Orientation orientation, const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Point, const QMarginsF &minMargins = QMarginsF(0, 0, 0, 0)); - QPageLayout(const QPageLayout &other); - ~QPageLayout(); - void swap(QPageLayout &other /Constrained/); - bool isEquivalentTo(const QPageLayout &other) const; - bool isValid() const; - void setMode(QPageLayout::Mode mode); - QPageLayout::Mode mode() const; - void setPageSize(const QPageSize &pageSize, const QMarginsF &minMargins = QMarginsF(0, 0, 0, 0)); - QPageSize pageSize() const; - void setOrientation(QPageLayout::Orientation orientation); - QPageLayout::Orientation orientation() const; - void setUnits(QPageLayout::Unit units); - QPageLayout::Unit units() const; - bool setMargins(const QMarginsF &margins); - bool setLeftMargin(qreal leftMargin); - bool setRightMargin(qreal rightMargin); - bool setTopMargin(qreal topMargin); - bool setBottomMargin(qreal bottomMargin); - QMarginsF margins() const; - QMarginsF margins(QPageLayout::Unit units) const; - QMargins marginsPoints() const; - QMargins marginsPixels(int resolution) const; - void setMinimumMargins(const QMarginsF &minMargins); - QMarginsF minimumMargins() const; - QMarginsF maximumMargins() const; - QRectF fullRect() const; - QRectF fullRect(QPageLayout::Unit units) const; - QRect fullRectPoints() const; - QRect fullRectPixels(int resolution) const; - QRectF paintRect() const; - QRectF paintRect(QPageLayout::Unit units) const; - QRect paintRectPoints() const; - QRect paintRectPixels(int resolution) const; -}; - -bool operator==(const QPageLayout &lhs, const QPageLayout &rhs); -bool operator!=(const QPageLayout &lhs, const QPageLayout &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpageranges.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpageranges.sip deleted file mode 100644 index 3152ff4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpageranges.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qpageranges.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPageRanges -{ -%TypeHeaderCode -#include -%End - -public: - QPageRanges(); - QPageRanges(const QPageRanges &other); - ~QPageRanges(); - void swap(QPageRanges &other /Constrained/); - - struct Range - { -%TypeHeaderCode -#include -%End - - int from; - int to; - bool contains(int pageNumber) const; - }; - - void addPage(int pageNumber); - void addRange(int from, int to); - QList toRangeList() const; - void clear(); - QString toString() const; - static QPageRanges fromString(const QString &ranges); - bool contains(int pageNumber) const; - bool isEmpty() const; - int firstPage() const; - int lastPage() const; -}; - -bool operator==(QPageRanges::Range lhs, QPageRanges::Range rhs); -bool operator==(const QPageRanges &lhs, const QPageRanges &rhs); -bool operator!=(QPageRanges::Range lhs, QPageRanges::Range rhs); -bool operator!=(const QPageRanges &lhs, const QPageRanges &rhs); -bool operator<(QPageRanges::Range lhs, QPageRanges::Range rhs); -QDataStream &operator<<(QDataStream &, const QPageRanges &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPageRanges & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagesize.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagesize.sip deleted file mode 100644 index f6fca7d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpagesize.sip +++ /dev/null @@ -1,216 +0,0 @@ -// qpagesize.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPageSize -{ -%TypeHeaderCode -#include -%End - -public: - enum PageSizeId - { - A4, - B5, - Letter, - Legal, - Executive, - A0, - A1, - A2, - A3, - A5, - A6, - A7, - A8, - A9, - B0, - B1, - B10, - B2, - B3, - B4, - B6, - B7, - B8, - B9, - C5E, - Comm10E, - DLE, - Folio, - Ledger, - Tabloid, - Custom, - A10, - A3Extra, - A4Extra, - A4Plus, - A4Small, - A5Extra, - B5Extra, - JisB0, - JisB1, - JisB2, - JisB3, - JisB4, - JisB5, - JisB6, - JisB7, - JisB8, - JisB9, - JisB10, - AnsiC, - AnsiD, - AnsiE, - LegalExtra, - LetterExtra, - LetterPlus, - LetterSmall, - TabloidExtra, - ArchA, - ArchB, - ArchC, - ArchD, - ArchE, - Imperial7x9, - Imperial8x10, - Imperial9x11, - Imperial9x12, - Imperial10x11, - Imperial10x13, - Imperial10x14, - Imperial12x11, - Imperial15x11, - ExecutiveStandard, - Note, - Quarto, - Statement, - SuperA, - SuperB, - Postcard, - DoublePostcard, - Prc16K, - Prc32K, - Prc32KBig, - FanFoldUS, - FanFoldGerman, - FanFoldGermanLegal, - EnvelopeB4, - EnvelopeB5, - EnvelopeB6, - EnvelopeC0, - EnvelopeC1, - EnvelopeC2, - EnvelopeC3, - EnvelopeC4, - EnvelopeC6, - EnvelopeC65, - EnvelopeC7, - Envelope9, - Envelope11, - Envelope12, - Envelope14, - EnvelopeMonarch, - EnvelopePersonal, - EnvelopeChou3, - EnvelopeChou4, - EnvelopeInvite, - EnvelopeItalian, - EnvelopeKaku2, - EnvelopeKaku3, - EnvelopePrc1, - EnvelopePrc2, - EnvelopePrc3, - EnvelopePrc4, - EnvelopePrc5, - EnvelopePrc6, - EnvelopePrc7, - EnvelopePrc8, - EnvelopePrc9, - EnvelopePrc10, - EnvelopeYou4, - AnsiA, - AnsiB, - EnvelopeC5, - EnvelopeDL, - Envelope10, - LastPageSize, - }; - - enum Unit - { - Millimeter, - Point, - Inch, - Pica, - Didot, - Cicero, - }; - - enum SizeMatchPolicy - { - FuzzyMatch, - FuzzyOrientationMatch, - ExactMatch, - }; - - QPageSize(); -%If (Qt_6_2_0 -) - QPageSize(QPageSize::PageSizeId pageSizeId); -%End -%If (- Qt_6_2_0) - explicit QPageSize(QPageSize::PageSizeId pageSizeId); -%End - QPageSize(const QSize &pointSize, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); - QPageSize(const QSizeF &size, QPageSize::Unit units, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); - QPageSize(const QPageSize &other); - ~QPageSize(); - void swap(QPageSize &other /Constrained/); - bool isEquivalentTo(const QPageSize &other) const; - bool isValid() const; - QString key() const; - QString name() const; - QPageSize::PageSizeId id() const; - int windowsId() const; - QSizeF definitionSize() const; - QPageSize::Unit definitionUnits() const; - QSizeF size(QPageSize::Unit units) const; - QSize sizePoints() const; - QSize sizePixels(int resolution) const; - QRectF rect(QPageSize::Unit units) const; - QRect rectPoints() const; - QRect rectPixels(int resolution) const; - static QString key(QPageSize::PageSizeId pageSizeId); - static QString name(QPageSize::PageSizeId pageSizeId); - static QPageSize::PageSizeId id(const QSize &pointSize, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); - static QPageSize::PageSizeId id(const QSizeF &size, QPageSize::Unit units, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); - static QPageSize::PageSizeId id(int windowsId); - static int windowsId(QPageSize::PageSizeId pageSizeId); - static QSizeF definitionSize(QPageSize::PageSizeId pageSizeId); - static QPageSize::Unit definitionUnits(QPageSize::PageSizeId pageSizeId); - static QSizeF size(QPageSize::PageSizeId pageSizeId, QPageSize::Unit units); - static QSize sizePoints(QPageSize::PageSizeId pageSizeId); - static QSize sizePixels(QPageSize::PageSizeId pageSizeId, int resolution); -}; - -bool operator==(const QPageSize &lhs, const QPageSize &rhs); -bool operator!=(const QPageSize &lhs, const QPageSize &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevice.sip deleted file mode 100644 index e1017b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevice.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qpaintdevice.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - enum PaintDeviceMetric - { - PdmWidth, - PdmHeight, - PdmWidthMM, - PdmHeightMM, - PdmNumColors, - PdmDepth, - PdmDpiX, - PdmDpiY, - PdmPhysicalDpiX, - PdmPhysicalDpiY, - PdmDevicePixelRatio, - PdmDevicePixelRatioScaled, - }; - - virtual ~QPaintDevice(); - virtual QPaintEngine *paintEngine() const = 0; - int width() const; - int height() const; - int widthMM() const; - int heightMM() const; - int logicalDpiX() const; - int logicalDpiY() const; - int physicalDpiX() const; - int physicalDpiY() const; - int depth() const; - bool paintingActive() const; - int colorCount() const; - qreal devicePixelRatio() const; - -protected: - QPaintDevice(); - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; - -public: - qreal devicePixelRatioF() const; - static qreal devicePixelRatioFScale(); - -private: - QPaintDevice(const QPaintDevice &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevicewindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevicewindow.sip deleted file mode 100644 index f94ee0f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintdevicewindow.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qpaintdevicewindow.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPaintDeviceWindow : public QWindow, public QPaintDevice /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - void update(const QRect &rect); - void update(const QRegion ®ion); - -public slots: - void update(); - -protected: - virtual void paintEvent(QPaintEvent *event); - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; - virtual void exposeEvent(QExposeEvent *); - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintengine.sip deleted file mode 100644 index 5464571..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpaintengine.sip +++ /dev/null @@ -1,189 +0,0 @@ -// qpaintengine.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextItem -{ -%TypeHeaderCode -#include -%End - -public: - enum RenderFlag /BaseType=Flag/ - { - RightToLeft, - Overline, - Underline, - StrikeOut, - }; - - typedef QFlags RenderFlags; - qreal descent() const; - qreal ascent() const; - qreal width() const; - QTextItem::RenderFlags renderFlags() const; - QString text() const; - QFont font() const; -}; - -class QPaintEngine -{ -%TypeHeaderCode -#include -%End - -public: - enum PaintEngineFeature /BaseType=Flag/ - { - PrimitiveTransform, - PatternTransform, - PixmapTransform, - PatternBrush, - LinearGradientFill, - RadialGradientFill, - ConicalGradientFill, - AlphaBlend, - PorterDuff, - PainterPaths, - Antialiasing, - BrushStroke, - ConstantOpacity, - MaskedBrush, - PaintOutsidePaintEvent, - PerspectiveTransform, - BlendModes, - ObjectBoundingModeGradients, - RasterOpModes, - AllFeatures, - }; - - typedef QFlags PaintEngineFeatures; - - enum DirtyFlag /BaseType=Flag/ - { - DirtyPen, - DirtyBrush, - DirtyBrushOrigin, - DirtyFont, - DirtyBackground, - DirtyBackgroundMode, - DirtyTransform, - DirtyClipRegion, - DirtyClipPath, - DirtyHints, - DirtyCompositionMode, - DirtyClipEnabled, - DirtyOpacity, - AllDirty, - }; - - typedef QFlags DirtyFlags; - - enum PolygonDrawMode - { - OddEvenMode, - WindingMode, - ConvexMode, - PolylineMode, - }; - - explicit QPaintEngine(QPaintEngine::PaintEngineFeatures features = QPaintEngine::PaintEngineFeatures()); - virtual ~QPaintEngine(); - bool isActive() const; - void setActive(bool newState); - virtual bool begin(QPaintDevice *pdev) = 0; - virtual bool end() = 0; - virtual void updateState(const QPaintEngineState &state /NoCopy/) = 0; - virtual void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/); - virtual void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/); - virtual void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/); - virtual void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/); - virtual void drawEllipse(const QRectF &r); - virtual void drawEllipse(const QRect &r); - virtual void drawPath(const QPainterPath &path); - virtual void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/); - virtual void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/); - virtual void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode); - virtual void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode); - virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0; - virtual void drawTextItem(const QPointF &p, const QTextItem &textItem /NoCopy/); - virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s); - virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor); - void setPaintDevice(QPaintDevice *device); - QPaintDevice *paintDevice() const; - - enum Type - { - X11, - Windows, - QuickDraw, - CoreGraphics, - MacPrinter, - QWindowSystem, - OpenGL, - Picture, - SVG, - Raster, - Direct3D, - Pdf, - OpenVG, - OpenGL2, - PaintBuffer, - Blitter, - Direct2D, - User, - MaxUser, - }; - - virtual QPaintEngine::Type type() const = 0; - QPainter *painter() const; - bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const; - -private: - QPaintEngine(const QPaintEngine &); -}; - -class QPaintEngineState -{ -%TypeHeaderCode -#include -%End - -public: - QPaintEngine::DirtyFlags state() const; - QPen pen() const; - QBrush brush() const; - QPointF brushOrigin() const; - QBrush backgroundBrush() const; - Qt::BGMode backgroundMode() const; - QFont font() const; - qreal opacity() const; - Qt::ClipOperation clipOperation() const; - QRegion clipRegion() const; - QPainterPath clipPath() const; - bool isClipEnabled() const; - QPainter::RenderHints renderHints() const; - QPainter::CompositionMode compositionMode() const; - QPainter *painter() const; - QTransform transform() const; - bool brushNeedsResolving() const; - bool penNeedsResolving() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainter.sip deleted file mode 100644 index 9ad2273..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainter.sip +++ /dev/null @@ -1,554 +0,0 @@ -// qpainter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPainter -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// Return an array on the heap of class instances extracted from a set of -// Python arguments. -template -static TYPE *qtgui_inst_array(const TYPE *first, PyObject *t, sipTypeDef *td) -{ - TYPE *arr = new TYPE[1 + PyTuple_Size(t)]; - - arr[0] = *first; - - for (Py_ssize_t i = 0; i < PyTuple_Size(t); ++i) - { - int iserr = 0, state; - TYPE *itm; - - itm = reinterpret_cast(sipForceConvertToType(PyTuple_GetItem(t, i), td, 0, SIP_NOT_NONE, &state, &iserr)); - - if (iserr) - { - sipReleaseType(itm, td, state); - - PyErr_Format(PyExc_TypeError, "each argument must be an instance of %s", sipPyTypeName(sipTypeAsPyTypeObject(td))); - - delete[] arr; - return 0; - } - - arr[1 + i] = *itm; - - sipReleaseType(itm, td, state); - } - - return arr; -} -%End - -public: - enum RenderHint /BaseType=Flag/ - { - Antialiasing, - TextAntialiasing, - SmoothPixmapTransform, - LosslessImageRendering, -%If (Qt_6_1_0 -) - VerticalSubpixelPositioning, -%End -%If (Qt_6_4_0 -) - NonCosmeticBrushPatterns, -%End - }; - - typedef QFlags RenderHints; - QPainter(); - explicit QPainter(QPaintDevice *); - ~QPainter(); - SIP_PYOBJECT __enter__(); -%MethodCode - // Check a device was passed. - if (sipCpp->isActive()) - { - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); - } - else - { - PyErr_SetString(PyExc_ValueError, "QPainter must be created with a device"); - sipRes = 0; - } -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->end(); -%End - - QPaintDevice *device() const; - bool begin(QPaintDevice *); - bool end(); - bool isActive() const; - - enum CompositionMode - { - CompositionMode_SourceOver, - CompositionMode_DestinationOver, - CompositionMode_Clear, - CompositionMode_Source, - CompositionMode_Destination, - CompositionMode_SourceIn, - CompositionMode_DestinationIn, - CompositionMode_SourceOut, - CompositionMode_DestinationOut, - CompositionMode_SourceAtop, - CompositionMode_DestinationAtop, - CompositionMode_Xor, - CompositionMode_Plus, - CompositionMode_Multiply, - CompositionMode_Screen, - CompositionMode_Overlay, - CompositionMode_Darken, - CompositionMode_Lighten, - CompositionMode_ColorDodge, - CompositionMode_ColorBurn, - CompositionMode_HardLight, - CompositionMode_SoftLight, - CompositionMode_Difference, - CompositionMode_Exclusion, - RasterOp_SourceOrDestination, - RasterOp_SourceAndDestination, - RasterOp_SourceXorDestination, - RasterOp_NotSourceAndNotDestination, - RasterOp_NotSourceOrNotDestination, - RasterOp_NotSourceXorDestination, - RasterOp_NotSource, - RasterOp_NotSourceAndDestination, - RasterOp_SourceAndNotDestination, - RasterOp_NotSourceOrDestination, - RasterOp_SourceOrNotDestination, - RasterOp_ClearDestination, - RasterOp_SetDestination, - RasterOp_NotDestination, - }; - - void setCompositionMode(QPainter::CompositionMode mode); - QPainter::CompositionMode compositionMode() const; - const QFont &font() const; - void setFont(const QFont &f); - QFontMetrics fontMetrics() const; - QFontInfo fontInfo() const; - void setPen(const QColor &color); - void setPen(const QPen &pen); - void setPen(Qt::PenStyle style); - const QPen &pen() const; - void setBrush(const QBrush &brush); - void setBrush(Qt::BrushStyle style); - const QBrush &brush() const; - void setBackgroundMode(Qt::BGMode mode); - Qt::BGMode backgroundMode() const; - QPoint brushOrigin() const; - void setBrushOrigin(const QPointF &); - void setBackground(const QBrush &bg); - const QBrush &background() const; - QRegion clipRegion() const; - QPainterPath clipPath() const; - void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip); - void setClipRegion(const QRegion ®ion, Qt::ClipOperation operation = Qt::ReplaceClip); - void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip); - void setClipping(bool enable); - bool hasClipping() const; - void save(); - void restore(); - void scale(qreal sx, qreal sy); - void shear(qreal sh, qreal sv); - void rotate(qreal a); - void translate(const QPointF &offset); - QRect window() const; - void setWindow(const QRect &window); - QRect viewport() const; - void setViewport(const QRect &viewport); - void setViewTransformEnabled(bool enable); - bool viewTransformEnabled() const; - void strokePath(const QPainterPath &path, const QPen &pen); - void fillPath(const QPainterPath &path, const QBrush &brush); - void drawPath(const QPainterPath &path); - void drawPoints(const QPolygonF &points); - void drawPoints(const QPolygon &points); - void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/); - void drawPoints(const QPointF *point, ... /TypeHint="QPointF"/); -%MethodCode - QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); - - if (points) - { - sipCpp->drawPoints(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/); - void drawPoints(const QPoint *point, ... /TypeHint="QPoint"/); -%MethodCode - QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); - - if (points) - { - sipCpp->drawPoints(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/); - void drawLines(const QLineF *line, ... /TypeHint="QLineF"/); -%MethodCode - QLineF *lines = qtgui_inst_array(a0, a1, sipType_QLineF); - - if (lines) - { - sipCpp->drawLines(lines, 1 + PyTuple_Size(a1)); - delete[] lines; - } - else - sipIsErr = 1; -%End - - void drawLines(const QPointF *pointPairs /Array/, int lineCount /ArraySize/); -%MethodCode - sipCpp->drawLines(a0, a1 / 2); -%End - - void drawLines(const QPointF *pointPair, ... /TypeHint="QPointF"/); -%MethodCode - QPointF *pairs = qtgui_inst_array(a0, a1, sipType_QPointF); - - if (pairs) - { - sipCpp->drawLines(pairs, (1 + PyTuple_Size(a1)) / 2); - delete[] pairs; - } - else - sipIsErr = 1; -%End - - void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/); - void drawLines(const QLine *line, ... /TypeHint="QLine"/); -%MethodCode - QLine *lines = qtgui_inst_array(a0, a1, sipType_QLine); - - if (lines) - { - sipCpp->drawLines(lines, 1 + PyTuple_Size(a1)); - delete[] lines; - } - else - sipIsErr = 1; -%End - - void drawLines(const QPoint *pointPairs /Array/, int lineCount /ArraySize/); -%MethodCode - sipCpp->drawLines(a0, a1 / 2); -%End - - void drawLines(const QPoint *pointPair, ... /TypeHint="QPoint"/); -%MethodCode - QPoint *pairs = qtgui_inst_array(a0, a1, sipType_QPoint); - - if (pairs) - { - sipCpp->drawLines(pairs, (1 + PyTuple_Size(a1)) / 2); - delete[] pairs; - } - else - sipIsErr = 1; -%End - - void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/); - void drawRects(const QRectF *rect, ... /TypeHint="QRectF"/); -%MethodCode - QRectF *rects = qtgui_inst_array(a0, a1, sipType_QRectF); - - if (rects) - { - sipCpp->drawRects(rects, 1 + PyTuple_Size(a1)); - delete[] rects; - } - else - sipIsErr = 1; -%End - - void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/); - void drawRects(const QRect *rect, ... /TypeHint="QRect"/); -%MethodCode - QRect *rects = qtgui_inst_array(a0, a1, sipType_QRect); - - if (rects) - { - sipCpp->drawRects(rects, 1 + PyTuple_Size(a1)); - delete[] rects; - } - else - sipIsErr = 1; -%End - - void drawEllipse(const QRectF &r); - void drawEllipse(const QRect &r); - void drawPolyline(const QPolygonF &polyline); - void drawPolyline(const QPolygon &polyline); - void drawPolyline(const QPointF *points /Array/, int pointCount /ArraySize/); - void drawPolyline(const QPointF *point, ... /TypeHint="QPointF"/); -%MethodCode - QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); - - if (points) - { - sipCpp->drawPolyline(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawPolyline(const QPoint *points /Array/, int pointCount /ArraySize/); - void drawPolyline(const QPoint *point, ... /TypeHint="QPoint"/); -%MethodCode - QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); - - if (points) - { - sipCpp->drawPolyline(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill); - void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill); - void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill); - void drawPolygon(const QPointF *point, ... /TypeHint="QPointF"/); -%MethodCode - QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); - - if (points) - { - sipCpp->drawPolygon(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill); - void drawPolygon(const QPoint *point, ... /TypeHint="QPoint"/); -%MethodCode - QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); - - if (points) - { - sipCpp->drawPolygon(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawConvexPolygon(const QPolygonF &poly); - void drawConvexPolygon(const QPolygon &poly); - void drawConvexPolygon(const QPointF *points /Array/, int pointCount /ArraySize/); - void drawConvexPolygon(const QPointF *point, ... /TypeHint="QPointF"/); -%MethodCode - QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); - - if (points) - { - sipCpp->drawConvexPolygon(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawConvexPolygon(const QPoint *points /Array/, int pointCount /ArraySize/); - void drawConvexPolygon(const QPoint *point, ... /TypeHint="QPoint"/); -%MethodCode - QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); - - if (points) - { - sipCpp->drawConvexPolygon(points, 1 + PyTuple_Size(a1)); - delete[] points; - } - else - sipIsErr = 1; -%End - - void drawArc(const QRectF &rect, int a, int alen); - void drawPie(const QRectF &rect, int a, int alen); - void drawChord(const QRectF &rect, int a, int alen); - void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &pos = QPointF()); - void drawPicture(const QPointF &p, const QPicture &picture); - void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect); - void setLayoutDirection(Qt::LayoutDirection direction); - Qt::LayoutDirection layoutDirection() const; - void drawText(const QPointF &p, const QString &s); - void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect /Out/ = 0); - void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect /Out/ = 0); - void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption()); - QRectF boundingRect(const QRectF &rect, int flags, const QString &text); - QRect boundingRect(const QRect &rect, int flags, const QString &text); - QRectF boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption()); - void fillRect(const QRectF &, const QBrush &); - void fillRect(const QRect &, const QBrush &); - void eraseRect(const QRectF &); - void setRenderHint(QPainter::RenderHint hint, bool on = true); - QPainter::RenderHints renderHints() const; - void setRenderHints(QPainter::RenderHints hints, bool on = true); - QPaintEngine *paintEngine() const; - void drawLine(const QLineF &l); - void drawLine(const QLine &line); - void drawLine(int x1, int y1, int x2, int y2); - void drawLine(const QPoint &p1, const QPoint &p2); - void drawLine(const QPointF &p1, const QPointF &p2); - void drawRect(const QRectF &rect); - void drawRect(int x, int y, int w, int h); - void drawRect(const QRect &r); - void drawPoint(const QPointF &p); - void drawPoint(int x, int y); - void drawPoint(const QPoint &p); - void drawEllipse(int x, int y, int w, int h); - void drawArc(const QRect &r, int a, int alen); - void drawArc(int x, int y, int w, int h, int a, int alen); - void drawPie(const QRect &rect, int a, int alen); - void drawPie(int x, int y, int w, int h, int a, int alen); - void drawChord(const QRect &rect, int a, int alen); - void drawChord(int x, int y, int w, int h, int a, int alen); - void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip); - void setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip); - void eraseRect(const QRect &rect); - void eraseRect(int x, int y, int w, int h); - void fillRect(int x, int y, int w, int h, const QBrush &b); - void setBrushOrigin(int x, int y); - void setBrushOrigin(const QPoint &p); - void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &pos = QPoint()); - void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0); - void drawPixmap(const QRect &targetRect, const QPixmap &pixmap, const QRect &sourceRect); - void drawPixmap(const QPointF &p, const QPixmap &pm); - void drawPixmap(const QPoint &p, const QPixmap &pm); - void drawPixmap(const QRect &r, const QPixmap &pm); - void drawPixmap(int x, int y, const QPixmap &pm); - void drawPixmap(int x, int y, int w, int h, const QPixmap &pm); - void drawPixmap(int x, int y, int w, int h, const QPixmap &pm, int sx, int sy, int sw, int sh); - void drawPixmap(int x, int y, const QPixmap &pm, int sx, int sy, int sw, int sh); - void drawPixmap(const QPointF &p, const QPixmap &pm, const QRectF &sr); - void drawPixmap(const QPoint &p, const QPixmap &pm, const QRect &sr); - void drawImage(const QRectF &r, const QImage &image); - void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect, Qt::ImageConversionFlags flags = Qt::AutoColor); - void drawImage(const QRect &r, const QImage &image); - void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect, Qt::ImageConversionFlags flags = Qt::AutoColor); - void drawImage(const QPointF &p, const QImage &image); - void drawImage(const QPointF &p, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor); - void drawImage(const QPoint &p, const QImage &image); - void drawImage(const QPoint &p, const QImage &image, const QRect &sr, Qt::ImageConversionFlags flags = Qt::AutoColor); - void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor); - void drawText(const QPoint &p, const QString &s); - void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect /Out/ = 0); - void drawText(int x, int y, const QString &s); - QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text); - qreal opacity() const; - void setOpacity(qreal opacity); - void translate(qreal dx, qreal dy); - void translate(const QPoint &offset); - void setViewport(int x, int y, int w, int h); - void setWindow(int x, int y, int w, int h); - bool worldMatrixEnabled() const; - void setWorldMatrixEnabled(bool enabled); - void drawPicture(int x, int y, const QPicture &p); - void drawPicture(const QPoint &pt, const QPicture &p); - void setTransform(const QTransform &transform, bool combine = false); - const QTransform &transform() const; - const QTransform &deviceTransform() const; - void resetTransform(); - void setWorldTransform(const QTransform &matrix, bool combine = false); - const QTransform &worldTransform() const; - QTransform combinedTransform() const; - bool testRenderHint(QPainter::RenderHint hint) const; - void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); - void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); - void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); - void drawEllipse(const QPointF ¢er, qreal rx, qreal ry); - void drawEllipse(const QPoint ¢er, int rx, int ry); - void fillRect(const QRectF &, const QColor &color); - void fillRect(const QRect &, const QColor &color); - void fillRect(int x, int y, int w, int h, const QColor &b); - void fillRect(int x, int y, int w, int h, Qt::GlobalColor c); - void fillRect(const QRect &r, Qt::GlobalColor c); - void fillRect(const QRectF &r, Qt::GlobalColor c); - void fillRect(int x, int y, int w, int h, Qt::BrushStyle style); - void fillRect(const QRect &r, Qt::BrushStyle style); - void fillRect(const QRectF &r, Qt::BrushStyle style); - void beginNativePainting(); - void endNativePainting(); - - class PixmapFragment - { -%TypeHeaderCode -#include -%End - - public: - qreal x; - qreal y; - qreal sourceLeft; - qreal sourceTop; - qreal width; - qreal height; - qreal scaleX; - qreal scaleY; - qreal rotation; - qreal opacity; - static QPainter::PixmapFragment create(const QPointF &pos, const QRectF &sourceRect, qreal scaleX = 1, qreal scaleY = 1, qreal rotation = 0, qreal opacity = 1) /Factory/; - }; - - enum PixmapFragmentHint /BaseType=Flag/ - { - OpaqueHint, - }; - - typedef QFlags PixmapFragmentHints; - void drawPixmapFragments(const QPainter::PixmapFragment *fragments /Array/, int fragmentCount /ArraySize/, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = QPainter::PixmapFragmentHints()); - void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText); - void drawStaticText(const QPoint &p, const QStaticText &staticText); - void drawStaticText(int x, int y, const QStaticText &staticText); - QRectF clipBoundingRect() const; -%If (PyQt_RawFont) - void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphRun); -%End - void fillRect(int x, int y, int w, int h, QGradient::Preset preset); - void fillRect(const QRect &r, QGradient::Preset preset); - void fillRect(const QRectF &r, QGradient::Preset preset); - -private: - QPainter(const QPainter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainterpath.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainterpath.sip deleted file mode 100644 index 509caf3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpainterpath.sip +++ /dev/null @@ -1,165 +0,0 @@ -// qpainterpath.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPainterPath -{ -%TypeHeaderCode -#include -%End - -public: - enum ElementType - { - MoveToElement, - LineToElement, - CurveToElement, - CurveToDataElement, - }; - - class Element - { -%TypeHeaderCode -#include -%End - - public: - qreal x; - qreal y; - QPainterPath::ElementType type; - bool isMoveTo() const; - bool isLineTo() const; - bool isCurveTo() const; - bool operator==(const QPainterPath::Element &e) const; - bool operator!=(const QPainterPath::Element &e) const; - operator QPointF() const; - }; - - QPainterPath(); - explicit QPainterPath(const QPointF &startPoint); - QPainterPath(const QPainterPath &other); - ~QPainterPath(); - void closeSubpath(); - void moveTo(const QPointF &p); - void lineTo(const QPointF &p); - void arcTo(const QRectF &rect, qreal startAngle, qreal arcLength); - void cubicTo(const QPointF &ctrlPt1, const QPointF &ctrlPt2, const QPointF &endPt); - void quadTo(const QPointF &ctrlPt, const QPointF &endPt); - QPointF currentPosition() const; - void addRect(const QRectF &rect); - void addEllipse(const QRectF &rect); - void addPolygon(const QPolygonF &polygon); - void addText(const QPointF &point, const QFont &f, const QString &text); - void addPath(const QPainterPath &path); - void addRegion(const QRegion ®ion); - void connectPath(const QPainterPath &path); - bool contains(const QPointF &pt) const; - bool contains(const QRectF &rect) const; - bool intersects(const QRectF &rect) const; - QRectF boundingRect() const; - QRectF controlPointRect() const; - Qt::FillRule fillRule() const; - void setFillRule(Qt::FillRule fillRule); - QPainterPath toReversed() const; - QList toSubpathPolygons(const QTransform &matrix = QTransform()) const; - QList toFillPolygons(const QTransform &matrix = QTransform()) const; - QPolygonF toFillPolygon(const QTransform &matrix = QTransform()) const; - bool operator==(const QPainterPath &other) const; - bool operator!=(const QPainterPath &other) const; - void moveTo(qreal x, qreal y); - void arcMoveTo(const QRectF &rect, qreal angle); - void arcMoveTo(qreal x, qreal y, qreal w, qreal h, qreal angle); - void arcTo(qreal x, qreal y, qreal w, qreal h, qreal startAngle, qreal arcLenght); - void lineTo(qreal x, qreal y); - void cubicTo(qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty); - void quadTo(qreal ctrlPtx, qreal ctrlPty, qreal endPtx, qreal endPty); - void addEllipse(qreal x, qreal y, qreal w, qreal h); - void addRect(qreal x, qreal y, qreal w, qreal h); - void addText(qreal x, qreal y, const QFont &f, const QString &text); - bool isEmpty() const; - int elementCount() const; - QPainterPath::Element elementAt(int i) const; - void setElementPositionAt(int i, qreal x, qreal y); - qreal length() const; - qreal percentAtLength(qreal t) const; - QPointF pointAtPercent(qreal t) const; - qreal angleAtPercent(qreal t) const; - qreal slopeAtPercent(qreal t) const; - bool intersects(const QPainterPath &p) const; - bool contains(const QPainterPath &p) const; - QPainterPath united(const QPainterPath &r) const; - QPainterPath intersected(const QPainterPath &r) const; - QPainterPath subtracted(const QPainterPath &r) const; - void addRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); - void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); - void addEllipse(const QPointF ¢er, qreal rx, qreal ry); - QPainterPath simplified() const; - QPainterPath operator&(const QPainterPath &other) const; - QPainterPath operator|(const QPainterPath &other) const; - QPainterPath operator+(const QPainterPath &other) const; - QPainterPath operator-(const QPainterPath &other) const; - QPainterPath &operator&=(const QPainterPath &other); - QPainterPath &operator|=(const QPainterPath &other); - QPainterPath &operator+=(const QPainterPath &other); - QPainterPath &operator-=(const QPainterPath &other); - void translate(qreal dx, qreal dy); - QPainterPath translated(qreal dx, qreal dy) const; - void translate(const QPointF &offset); - QPainterPath translated(const QPointF &offset) const; - void swap(QPainterPath &other /Constrained/); - void clear(); - void reserve(int size); - int capacity() const; -}; - -QDataStream &operator<<(QDataStream &, const QPainterPath &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPainterPath & /Constrained/) /ReleaseGIL/; - -class QPainterPathStroker -{ -%TypeHeaderCode -#include -%End - -public: - QPainterPathStroker(); - explicit QPainterPathStroker(const QPen &pen); - ~QPainterPathStroker(); - void setWidth(qreal width); - qreal width() const; - void setCapStyle(Qt::PenCapStyle style); - Qt::PenCapStyle capStyle() const; - void setJoinStyle(Qt::PenJoinStyle style); - Qt::PenJoinStyle joinStyle() const; - void setMiterLimit(qreal length); - qreal miterLimit() const; - void setCurveThreshold(qreal threshold); - qreal curveThreshold() const; - void setDashPattern(Qt::PenStyle); - void setDashPattern(const QList &dashPattern); - QList dashPattern() const; - QPainterPath createStroke(const QPainterPath &path) const; - void setDashOffset(qreal offset); - qreal dashOffset() const; - -private: - QPainterPathStroker(const QPainterPathStroker &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpalette.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpalette.sip deleted file mode 100644 index 4ad302c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpalette.sip +++ /dev/null @@ -1,131 +0,0 @@ -// qpalette.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPalette -{ -%TypeHeaderCode -#include -%End - -public: - QPalette(); - QPalette(const QColor &button); - QPalette(Qt::GlobalColor button); - QPalette(const QColor &button, const QColor &background); - QPalette(const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background); - QPalette(const QPalette &palette); - QPalette(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QPalette(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QPalette(); - - enum ColorGroup - { - Active, - Disabled, - Inactive, - NColorGroups, - Current, - All, - Normal, - }; - - enum ColorRole - { - WindowText, - Button, - Light, - Midlight, - Dark, - Mid, - Text, - BrightText, - ButtonText, - Base, - Window, - Shadow, - Highlight, - HighlightedText, - Link, - LinkVisited, - AlternateBase, - ToolTipBase, - ToolTipText, - PlaceholderText, -%If (Qt_6_6_0 -) - Accent, -%End - NoRole, - NColorRoles, - }; - - QPalette::ColorGroup currentColorGroup() const; - void setCurrentColorGroup(QPalette::ColorGroup cg); - const QColor &color(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; - const QBrush &brush(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; - void setBrush(QPalette::ColorGroup cg, QPalette::ColorRole cr, const QBrush &brush); - void setColorGroup(QPalette::ColorGroup cr, const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background); - bool isEqual(QPalette::ColorGroup cr1, QPalette::ColorGroup cr2) const; - const QColor &color(QPalette::ColorRole cr) const; - const QBrush &brush(QPalette::ColorRole cr) const; - const QBrush &windowText() const; - const QBrush &button() const; - const QBrush &light() const; - const QBrush &dark() const; - const QBrush &mid() const; - const QBrush &text() const; - const QBrush &base() const; - const QBrush &alternateBase() const; - const QBrush &window() const; - const QBrush &midlight() const; - const QBrush &brightText() const; - const QBrush &buttonText() const; - const QBrush &shadow() const; - const QBrush &highlight() const; - const QBrush &highlightedText() const; - const QBrush &link() const; - const QBrush &linkVisited() const; - const QBrush &toolTipBase() const; - const QBrush &toolTipText() const; - const QBrush &placeholderText() const; - bool operator==(const QPalette &p) const; - bool operator!=(const QPalette &p) const; - bool isCopyOf(const QPalette &p) const; - QPalette resolve(const QPalette &) const; - void setColor(QPalette::ColorGroup acg, QPalette::ColorRole acr, const QColor &acolor); - void setColor(QPalette::ColorRole acr, const QColor &acolor); - void setBrush(QPalette::ColorRole acr, const QBrush &abrush); - bool isBrushSet(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; - qint64 cacheKey() const; - void swap(QPalette &other /Constrained/); -%If (Qt_6_6_0 -) - const QBrush &accent() const; -%End -}; - -QDataStream &operator<<(QDataStream &s, const QPalette &p) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &ds, QPalette &p /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpdfwriter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpdfwriter.sip deleted file mode 100644 index 30134fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpdfwriter.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qpdfwriter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfWriter : public QObject, public QPagedPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPdfWriter(const QString &filename); - explicit QPdfWriter(QIODevice *device); - virtual ~QPdfWriter(); - QString title() const; - void setTitle(const QString &title); - QString creator() const; - void setCreator(const QString &creator); - virtual bool newPage(); - -protected: - virtual QPaintEngine *paintEngine() const; - virtual int metric(QPaintDevice::PaintDeviceMetric id) const; - -public: - void setResolution(int resolution); - int resolution() const; - void setPdfVersion(QPagedPaintDevice::PdfVersion version); - QPagedPaintDevice::PdfVersion pdfVersion() const; - void setDocumentXmpMetadata(const QByteArray &xmpMetadata); - QByteArray documentXmpMetadata() const; - void addFileAttachment(const QString &fileName, const QByteArray &data, const QString &mimeType = QString()); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpen.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpen.sip deleted file mode 100644 index 6b13ced..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpen.sip +++ /dev/null @@ -1,103 +0,0 @@ -// qpen.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPen /TypeHintIn="Union[QPen, QColor]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// SIP doesn't support automatic type convertors so we explicitly allow a -// QColor to be used whenever a QPen is expected. - -if (sipIsErr == NULL) - return (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS) || - sipCanConvertToType(sipPy, sipType_QColor, 0)); - -if (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS)) -{ - *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QPen, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - - return 0; -} - -int state; -QColor *c = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr)); - -if (*sipIsErr) -{ - sipReleaseType(c, sipType_QColor, state); - return 0; -} - -*sipCppPtr = new QPen(*c); - -sipReleaseType(c, sipType_QColor, state); - -return sipGetState(sipTransferObj); -%End - -public: - QPen(); - QPen(Qt::PenStyle); - QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin); - QPen(const QPen &pen); - QPen(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QPen(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QPen(); - Qt::PenStyle style() const; - void setStyle(Qt::PenStyle); - qreal widthF() const; - void setWidthF(qreal width); - int width() const; - void setWidth(int width); - QColor color() const; - void setColor(const QColor &color); - QBrush brush() const; - void setBrush(const QBrush &brush); - bool isSolid() const; - Qt::PenCapStyle capStyle() const; - void setCapStyle(Qt::PenCapStyle pcs); - Qt::PenJoinStyle joinStyle() const; - void setJoinStyle(Qt::PenJoinStyle pcs); - QList dashPattern() const; - void setDashPattern(const QList &pattern); - qreal miterLimit() const; - void setMiterLimit(qreal limit); - bool operator==(const QPen &p) const; - bool operator!=(const QPen &p) const; - qreal dashOffset() const; - void setDashOffset(qreal doffset); - bool isCosmetic() const; - void setCosmetic(bool cosmetic); - void swap(QPen &other /Constrained/); -}; - -QDataStream &operator<<(QDataStream &, const QPen &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPen & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpicture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpicture.sip deleted file mode 100644 index 6f030b9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpicture.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qpicture.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPicture : public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPicture(int formatVersion = -1); - QPicture(const QPicture &); - virtual ~QPicture(); - bool isNull() const; - virtual int devType() const; - uint size() const; - const char *data() const /Encoding="None"/; - virtual void setData(const char *data /Array/, uint size /ArraySize/); - bool play(QPainter *p); - bool load(const QString &fileName) /ReleaseGIL/; - bool load(QIODevice *dev) /ReleaseGIL/; - bool save(const QString &fileName) /ReleaseGIL/; - bool save(QIODevice *dev) /ReleaseGIL/; - QRect boundingRect() const; - void setBoundingRect(const QRect &r); - void detach(); - bool isDetached() const; - virtual QPaintEngine *paintEngine() const; - -protected: - virtual int metric(QPaintDevice::PaintDeviceMetric m) const; - -public: - void swap(QPicture &other /Constrained/); -}; - -QDataStream &operator<<(QDataStream &in, const QPicture &p) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QPicture &p /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixelformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixelformat.sip deleted file mode 100644 index 68ca677..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixelformat.sip +++ /dev/null @@ -1,134 +0,0 @@ -// qpixelformat.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QPixelFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum ColorModel - { - RGB, - BGR, - Indexed, - Grayscale, - CMYK, - HSL, - HSV, - YUV, - Alpha, - }; - - enum AlphaUsage - { - UsesAlpha, - IgnoresAlpha, - }; - - enum AlphaPosition - { - AtBeginning, - AtEnd, - }; - - enum AlphaPremultiplied - { - NotPremultiplied, - Premultiplied, - }; - - enum TypeInterpretation - { - UnsignedInteger, - UnsignedShort, - UnsignedByte, - FloatingPoint, - }; - - enum YUVLayout - { - YUV444, - YUV422, - YUV411, - YUV420P, - YUV420SP, - YV12, - UYVY, - YUYV, - NV12, - NV21, - IMC1, - IMC2, - IMC3, - IMC4, - Y8, - Y16, - }; - - enum ByteOrder - { - LittleEndian, - BigEndian, - CurrentSystemEndian, - }; - - QPixelFormat(); - QPixelFormat(QPixelFormat::ColorModel mdl, uchar firstSize /PyInt/, uchar secondSize /PyInt/, uchar thirdSize /PyInt/, uchar fourthSize /PyInt/, uchar fifthSize /PyInt/, uchar alfa /PyInt/, QPixelFormat::AlphaUsage usage, QPixelFormat::AlphaPosition position, QPixelFormat::AlphaPremultiplied premult, QPixelFormat::TypeInterpretation typeInterp, QPixelFormat::ByteOrder byteOrder = QPixelFormat::CurrentSystemEndian, uchar subEnum /PyInt/ = 0); - QPixelFormat::ColorModel colorModel() const; - uchar channelCount() const /PyInt/; - uchar redSize() const /PyInt/; - uchar greenSize() const /PyInt/; - uchar blueSize() const /PyInt/; - uchar cyanSize() const /PyInt/; - uchar magentaSize() const /PyInt/; - uchar yellowSize() const /PyInt/; - uchar blackSize() const /PyInt/; - uchar hueSize() const /PyInt/; - uchar saturationSize() const /PyInt/; - uchar lightnessSize() const /PyInt/; - uchar brightnessSize() const /PyInt/; - uchar alphaSize() const /PyInt/; - uchar bitsPerPixel() const /PyInt/; - QPixelFormat::AlphaUsage alphaUsage() const; - QPixelFormat::AlphaPosition alphaPosition() const; - QPixelFormat::AlphaPremultiplied premultiplied() const; - QPixelFormat::TypeInterpretation typeInterpretation() const; - QPixelFormat::ByteOrder byteOrder() const; - QPixelFormat::YUVLayout yuvLayout() const; - uchar subEnum() const /PyInt/; -}; - -bool operator==(QPixelFormat fmt1, QPixelFormat fmt2); -bool operator!=(QPixelFormat fmt1, QPixelFormat fmt2); -QPixelFormat qPixelFormatRgba(uchar red /PyInt/, uchar green /PyInt/, uchar blue /PyInt/, uchar alfa /PyInt/, QPixelFormat::AlphaUsage usage, QPixelFormat::AlphaPosition position, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); -QPixelFormat qPixelFormatGrayscale(uchar channelSize /PyInt/, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); -QPixelFormat qPixelFormatCmyk(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); -QPixelFormat qPixelFormatHsl(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint); -QPixelFormat qPixelFormatHsv(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint); -QPixelFormat qPixelFormatYuv(QPixelFormat::YUVLayout layout, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedByte, QPixelFormat::ByteOrder byteOrder = QPixelFormat::LittleEndian); -QPixelFormat qPixelFormatAlpha(uchar channelSize /PyInt/, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmap.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmap.sip deleted file mode 100644 index d91c33c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmap.sip +++ /dev/null @@ -1,111 +0,0 @@ -// qpixmap.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPixmap : public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - QPixmap(); - QPixmap(int w, int h); - explicit QPixmap(const QSize &); - QPixmap(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); - explicit QPixmap(SIP_PYLIST xpm /TypeHint="List[str]"/) [(const char * const *xpm)]; -%MethodCode - // The Python interface is a list of ASCII strings that make up the image. - - const char **str = QtGui_ListToArray(a0); - - if (str) - { - sipCpp = new sipQPixmap(str); - QtGui_DeleteArray(str); - } - else - sipIsErr = 1; -%End - - QPixmap(const QPixmap &); - QPixmap(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new sipQPixmap(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - virtual ~QPixmap(); - bool isNull() const; - virtual int devType() const; - int width() const; - int height() const; - QSize size() const; - QRect rect() const; - int depth() const; - static int defaultDepth(); - void fill(const QColor &color = Qt::white); - QBitmap mask() const; - void setMask(const QBitmap &); - bool hasAlpha() const; - bool hasAlphaChannel() const; - QBitmap createHeuristicMask(bool clipTight = true) const; - QBitmap createMaskFromColor(const QColor &maskColor, Qt::MaskMode mode = Qt::MaskInColor) const; - QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; - QPixmap scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; - QPixmap scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const; - QPixmap scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const; - QImage toImage() const; - static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor); - static QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags = Qt::AutoColor); - bool convertFromImage(const QImage &img, Qt::ImageConversionFlags flags = Qt::AutoColor); - bool load(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); - bool loadFromData(const uchar *buf /Array/, uint len /ArraySize/, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); - bool loadFromData(const QByteArray &buf, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); - bool save(const QString &fileName, const char *format = 0, int quality = -1) const; - bool save(QIODevice *device, const char *format = 0, int quality = -1) const; - QPixmap copy(const QRect &rect = QRect()) const; - void detach(); - bool isQBitmap() const; - virtual QPaintEngine *paintEngine() const; - -protected: - virtual int metric(QPaintDevice::PaintDeviceMetric) const; - -public: - QPixmap copy(int ax, int ay, int awidth, int aheight) const; - QPixmap transformed(const QTransform &transform, Qt::TransformationMode mode = Qt::FastTransformation) const; - static QTransform trueMatrix(const QTransform &m, int w, int h); - qint64 cacheKey() const; - void scroll(int dx, int dy, const QRect &rect, QRegion *exposed /Out/ = 0); - void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed /Out/ = 0); - void swap(QPixmap &other /Constrained/); - qreal devicePixelRatio() const; - void setDevicePixelRatio(qreal scaleFactor); -%If (Qt_6_2_0 -) - QSizeF deviceIndependentSize() const; -%End -}; - -QDataStream &operator<<(QDataStream &, const QPixmap &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QPixmap & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmapcache.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmapcache.sip deleted file mode 100644 index b7b9321..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpixmapcache.sip +++ /dev/null @@ -1,83 +0,0 @@ -// qpixmapcache.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPixmapCache -{ -%TypeHeaderCode -#include -%End - -public: - class Key - { -%TypeHeaderCode -#include -%End - - public: - Key(); - Key(const QPixmapCache::Key &other); - ~Key(); - bool operator==(const QPixmapCache::Key &key) const; - bool operator!=(const QPixmapCache::Key &key) const; - void swap(QPixmapCache::Key &other /Constrained/); - bool isValid() const; -%If (Qt_6_6_0 -) - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - -%End - }; - - static int cacheLimit(); - static void clear(); - static QPixmap find(const QString &key); -%MethodCode - sipRes = new QPixmap; - - if (!QPixmapCache::find(*a0, sipRes)) - { - delete sipRes; - sipRes = 0; - } -%End - - static QPixmap find(const QPixmapCache::Key &key); -%MethodCode - sipRes = new QPixmap; - - if (!QPixmapCache::find(*a0, sipRes)) - { - delete sipRes; - sipRes = 0; - } -%End - - static bool insert(const QString &key, const QPixmap &); - static QPixmapCache::Key insert(const QPixmap &pixmap); - static void remove(const QString &key); - static void remove(const QPixmapCache::Key &key); - static bool replace(const QPixmapCache::Key &key, const QPixmap &pixmap); - static void setCacheLimit(int); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpointingdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpointingdevice.sip deleted file mode 100644 index e2bd522..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpointingdevice.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qpointingdevice.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPointingDeviceUniqueId -{ -%TypeHeaderCode -#include -%End - -public: - QPointingDeviceUniqueId(); - static QPointingDeviceUniqueId fromNumericId(qint64 id); - bool isValid() const; - qint64 numericId() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -bool operator==(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs); -bool operator!=(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs); - -class QPointingDevice : public QInputDevice -{ -%TypeHeaderCode -#include -%End - -public: - enum class PointerType /BaseType=Flag/ - { - Unknown, - Generic, - Finger, - Pen, - Eraser, - Cursor, - AllPointerTypes, - }; - - typedef QFlags PointerTypes; - QPointingDevice(const QString &name, qint64 systemId, QInputDevice::DeviceType devType, QPointingDevice::PointerType pType, QInputDevice::Capabilities caps, int maxPoints, int buttonCount, const QString &seatName = QString(), QPointingDeviceUniqueId uniqueId = QPointingDeviceUniqueId(), QObject *parent /TransferThis/ = 0); - QPointingDevice(QObject *parent /TransferThis/ = 0); - virtual ~QPointingDevice(); - QPointingDevice::PointerType pointerType() const; - int maximumPoints() const; - int buttonCount() const; - QPointingDeviceUniqueId uniqueId() const; - static const QPointingDevice *primaryPointingDevice(const QString &seatName = QString()); - bool operator==(const QPointingDevice &other) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpolygon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpolygon.sip deleted file mode 100644 index 939f3cc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpolygon.sip +++ /dev/null @@ -1,461 +0,0 @@ -// qpolygon.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPolygon -{ -%TypeHeaderCode -#include -%End - -%PickleCode - PyObject *pl = PyList_New(sipCpp->count() * 2); - - for (int p = 0, i = 0; i < sipCpp->count(); ++i, p += 2) - { - int x, y; - - sipCpp->point(i, &x, &y); - - PyList_SetItem(pl, p, PyLong_FromLong(x)); - PyList_SetItem(pl, p + 1, PyLong_FromLong(y)); - } - - sipRes = Py_BuildValue("(N)", pl); -%End - -public: - QPolygon(); - QPolygon(const QRect &r, bool closed = false); - QPolygon(const QList &v); - QPolygon(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QPolygon(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - void swap(QPolygon &other /Constrained/); - void translate(int dx, int dy); - void translate(const QPoint &offset); - QPolygon translated(int dx, int dy) const; - QPolygon translated(const QPoint &offset) const; - QRect boundingRect() const; - QPoint point(int i) const; - void setPoint(int index, int x, int y); - void setPoint(int index, const QPoint &p); - void setPoints(int firstx, int firsty, ... /TypeHint="int"/); -%MethodCode - // Accept at least one pair of integer coordinates. - int nPoints = 1 + ((PyTuple_Size(a2) + 1) >> 1); - - int *points = new int[nPoints * 2]; - - points[0] = a0; - points[1] = a1; - - for (Py_ssize_t i = 0; i < PyTuple_Size(a2); ++i) - points[2 + i] = PyLong_AsLong(PyTuple_GetItem(a2, i)); - - sipCpp->setPoints(nPoints, points); - - delete[] points; -%End - - void putPoints(int index, int firstx, int firsty, ... /TypeHint="int"/); -%MethodCode - // Accept at least one pair of integer coordinates. - int nPoints = 1 + ((PyTuple_Size(a3) + 1) >> 1); - - int *points = new int[nPoints * 2]; - - points[0] = a1; - points[1] = a2; - - for (Py_ssize_t i = 0; i < PyTuple_Size(a3); ++i) - points[2 + i] = PyLong_AsLong(PyTuple_GetItem(a3, i)); - - sipCpp->putPoints(a0, nPoints, points); - - delete[] points; -%End - - void putPoints(int index, int nPoints, const QPolygon &fromPolygon, int from = 0); - bool containsPoint(const QPoint &pt, Qt::FillRule fillRule) const; - QPolygon united(const QPolygon &r) const; - QPolygon intersected(const QPolygon &r) const; - QPolygon subtracted(const QPolygon &r) const; - bool intersects(const QPolygon &r) const; -// Methods inherited from QList and Python special methods. -// Keep in sync with QPolygonF and QXmlStreamAttributes. - -void append(const QPoint &value); -const QPoint &at(int i) const; -void clear(); -bool contains(const QPoint &value) const; -int count(const QPoint &value) const; -int count() const /__len__/; -void *data(); - -// Note the Qt return value is discarded as it would require handwritten code -// and seems pretty useless. -void fill(const QPoint &value, int size = -1); - -QPoint &first(); -int indexOf(const QPoint &value, int from = 0) const; -void insert(int i, const QPoint &value); -bool isEmpty() const; -QPoint &last(); -int lastIndexOf(const QPoint &value, int from = -1) const; - -// Note the Qt return type is QList. -QPolygon mid(int pos, int length = -1) const; - -void prepend(const QPoint &value); -void remove(int i); -void remove(int i, int count); -void replace(int i, const QPoint &value); -void resize(qsizetype size); -int size() const; -QPoint value(int i) const; -QPoint value(int i, const QPoint &defaultValue) const; -bool operator!=(const QPolygon &other) const; - -// Note the Qt return type is QList. -QPolygon operator+(const QPolygon &other) const; - -QPolygon &operator+=(const QPolygon &other); -QPolygon &operator+=(const QPoint &value); -bool operator==(const QPolygon &other) const; - -SIP_PYOBJECT operator<<(const QPoint &value); -%MethodCode - *a0 << *a1; - - sipRes = sipArg0; - Py_INCREF(sipRes); -%End - -QPoint &operator[](int i); -%MethodCode -Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - -if (idx < 0) - sipIsErr = 1; -else - sipRes = &sipCpp->operator[]((int)idx); -%End - -// Some additional Python special methods. - -void __setitem__(int i, const QPoint &value); -%MethodCode -int len; - -len = sipCpp->count(); - -if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; -else - (*sipCpp)[a0] = *a1; -%End - -void __setitem__(SIP_PYSLICE slice, const QPolygon &list); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - int vlen = a1->count(); - - if (vlen != slicelength) - { - sipBadLengthForSlice(vlen, slicelength); - sipIsErr = 1; - } - else - { - QList::const_iterator it = a1->begin(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipCpp)[start] = *it; - start += step; - ++it; - } - } -} -%End - -void __delitem__(int i); -%MethodCode -if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; -else - sipCpp->remove(a0); -%End - -void __delitem__(SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - sipCpp->remove(start); - start += step - 1; - } -} -%End - -QPolygon operator[](SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - sipRes = new QPolygon(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipRes) += (*sipCpp)[start]; - start += step; - } -} -%End - -int __contains__(const QPoint &value); -%MethodCode -sipRes = bool(sipCpp->contains(*a0)); -%End -%If (Qt_6_4_0 -) - QPolygonF toPolygonF() const; -%End -}; - -QDataStream &operator<<(QDataStream &stream, const QPolygon &polygon) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &stream, QPolygon &polygon /Constrained/) /ReleaseGIL/; - -class QPolygonF -{ -%TypeHeaderCode -#include -%End - -public: - QPolygonF(); - QPolygonF(const QList &v); - QPolygonF(const QRectF &r); - QPolygonF(const QPolygon &a); - QPolygonF(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QPolygonF(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - void swap(QPolygonF &other /Constrained/); - void translate(qreal dx, qreal dy); - void translate(const QPointF &offset); - QPolygonF translated(qreal dx, qreal dy) const; - QPolygonF translated(const QPointF &offset) const; - QPolygon toPolygon() const; - bool isClosed() const; - QRectF boundingRect() const; - bool containsPoint(const QPointF &pt, Qt::FillRule fillRule) const; - QPolygonF united(const QPolygonF &r) const; - QPolygonF intersected(const QPolygonF &r) const; - QPolygonF subtracted(const QPolygonF &r) const; - bool intersects(const QPolygonF &r) const; -// Methods inherited from QList and Python special methods. -// Keep in sync with QPolygon and QXmlStreamAttributes. - -void append(const QPointF &value); -const QPointF &at(int i) const; -void clear(); -bool contains(const QPointF &value) const; -int count(const QPointF &value) const; -int count() const /__len__/; -void *data(); - -// Note the Qt return value is discarded as it would require handwritten code -// and seems pretty useless. -void fill(const QPointF &value, int size = -1); - -QPointF &first(); -int indexOf(const QPointF &value, int from = 0) const; -void insert(int i, const QPointF &value); -bool isEmpty() const; -QPointF &last(); -int lastIndexOf(const QPointF &value, int from = -1) const; - -// Note the Qt return type is QList. -QPolygonF mid(int pos, int length = -1) const; - -void prepend(const QPointF &value); -void remove(int i); -void remove(int i, int count); -void replace(int i, const QPointF &value); -void resize(qsizetype size); -int size() const; -QPointF value(int i) const; -QPointF value(int i, const QPointF &defaultValue) const; -bool operator!=(const QPolygonF &other) const; - -// Note the Qt return type is QList. -QPolygonF operator+(const QPolygonF &other) const; - -QPolygonF &operator+=(const QPolygonF &other); -QPolygonF &operator+=(const QPointF &value); -bool operator==(const QPolygonF &other) const; - -SIP_PYOBJECT operator<<(const QPointF &value); -%MethodCode - *a0 << *a1; - - sipRes = sipArg0; - Py_INCREF(sipRes); -%End - -QPointF &operator[](int i); -%MethodCode -Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - -if (idx < 0) - sipIsErr = 1; -else - sipRes = &sipCpp->operator[]((int)idx); -%End - -// Some additional Python special methods. - -void __setitem__(int i, const QPointF &value); -%MethodCode -int len; - -len = sipCpp->count(); - -if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; -else - (*sipCpp)[a0] = *a1; -%End - -void __setitem__(SIP_PYSLICE slice, const QPolygonF &list); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - int vlen = a1->count(); - - if (vlen != slicelength) - { - sipBadLengthForSlice(vlen, slicelength); - sipIsErr = 1; - } - else - { - QList::const_iterator it = a1->begin(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipCpp)[start] = *it; - start += step; - ++it; - } - } -} -%End - -void __delitem__(int i); -%MethodCode -if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; -else - sipCpp->remove(a0); -%End - -void __delitem__(SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - sipCpp->remove(start); - start += step - 1; - } -} -%End - -QPolygonF operator[](SIP_PYSLICE slice); -%MethodCode -Py_ssize_t start, stop, step, slicelength; - -if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) -{ - sipIsErr = 1; -} -else -{ - sipRes = new QPolygonF(); - - for (Py_ssize_t i = 0; i < slicelength; ++i) - { - (*sipRes) += (*sipCpp)[start]; - start += step; - } -} -%End - -int __contains__(const QPointF &value); -%MethodCode -sipRes = bool(sipCpp->contains(*a0)); -%End -}; - -QDataStream &operator<<(QDataStream &stream, const QPolygonF &array) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &stream, QPolygonF &array /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpygui_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpygui_qlist.sip deleted file mode 100644 index 6c82336..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qpygui_qlist.sip +++ /dev/null @@ -1,102 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtGui module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QList - /TypeHintIn="Sequence[QFontDatabase.WritingSystem]", - TypeHintOut="List[QFontDatabase.WritingSystem]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QFontDatabase_WritingSystem); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len < 0) - return 0; - - QList *ql = new QList; - - for (Py_ssize_t i = 0; i < len; ++i) - { - PyObject *itm = PySequence_GetItem(sipPy, i); - - if (!itm) - { - delete ql; - *sipIsErr = 1; - - return 0; - } - - int v = sipConvertToEnum(itm, sipType_QFontDatabase_WritingSystem); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "element %zd has type '%s' but 'QFontDatabase.WritingSystem' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qquaternion.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qquaternion.sip deleted file mode 100644 index 4d0204a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qquaternion.sip +++ /dev/null @@ -1,152 +0,0 @@ -// qquaternion.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QQuaternion -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("dddd", (double)sipCpp->scalar(), - (double)sipCpp->x(), (double)sipCpp->y(), (double)sipCpp->z()); -%End - -public: - QQuaternion(); - QQuaternion(float aScalar, float xpos, float ypos, float zpos); - QQuaternion(float aScalar, const QVector3D &aVector); - explicit QQuaternion(const QVector4D &aVector); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *scalar = PyFloat_FromDouble(sipCpp->scalar()); - PyObject *x = PyFloat_FromDouble(sipCpp->x()); - PyObject *y = PyFloat_FromDouble(sipCpp->y()); - PyObject *z = PyFloat_FromDouble(sipCpp->z()); - - if (scalar && x && y && z) - sipRes = PyUnicode_FromFormat( - "PyQt6.QtGui.QQuaternion(%R, %R, %R, %R)", scalar, - x, y, z); - - Py_XDECREF(scalar); - Py_XDECREF(x); - Py_XDECREF(y); - Py_XDECREF(z); -%End - - float length() const; - float lengthSquared() const; - QQuaternion normalized() const; - void normalize(); - QVector3D rotatedVector(const QVector3D &vector) const; - static QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle); - static QQuaternion fromAxisAndAngle(float x, float y, float z, float angle); - static QQuaternion slerp(const QQuaternion &q1, const QQuaternion &q2, float t); - static QQuaternion nlerp(const QQuaternion &q1, const QQuaternion &q2, float t); - bool isNull() const; - bool isIdentity() const; - float x() const; - float y() const; - float z() const; - float scalar() const; - void setX(float aX); - void setY(float aY); - void setZ(float aZ); - void setScalar(float aScalar); - QQuaternion &operator+=(const QQuaternion &quaternion); - QQuaternion &operator-=(const QQuaternion &quaternion); - QQuaternion &operator*=(float factor); - QQuaternion &operator*=(const QQuaternion &quaternion); - QQuaternion &operator/=(float divisor); - void setVector(const QVector3D &aVector); - QVector3D vector() const; - void setVector(float aX, float aY, float aZ); - QVector4D toVector4D() const; - void getAxisAndAngle(QVector3D *axis /Out/, float *angle) const; - void getEulerAngles(float *pitch, float *yaw, float *roll) const; - static QQuaternion fromEulerAngles(float pitch, float yaw, float roll); - QMatrix3x3 toRotationMatrix() const; - static QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3); - void getAxes(QVector3D *xAxis /Out/, QVector3D *yAxis /Out/, QVector3D *zAxis /Out/) const; - static QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis); - static QQuaternion fromDirection(const QVector3D &direction, const QVector3D &up); - static QQuaternion rotationTo(const QVector3D &from, const QVector3D &to); - static float dotProduct(const QQuaternion &q1, const QQuaternion &q2); - QQuaternion inverted() const; - QQuaternion conjugated() const; - QVector3D toEulerAngles() const; - static QQuaternion fromEulerAngles(const QVector3D &eulerAngles); -}; - -bool operator==(const QQuaternion &q1, const QQuaternion &q2); -bool operator!=(const QQuaternion &q1, const QQuaternion &q2); -%If (Qt_6_7_0 -) -QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (- Qt_6_7_0) -const QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (Qt_6_7_0 -) -QQuaternion operator*(const QQuaternion &quaternion, float factor); -%End -%If (- Qt_6_7_0) -const QQuaternion operator*(const QQuaternion &quaternion, float factor); -%End -%If (Qt_6_7_0 -) -QQuaternion operator*(float factor, const QQuaternion &quaternion); -%End -%If (- Qt_6_7_0) -const QQuaternion operator*(float factor, const QQuaternion &quaternion); -%End -QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec); -%If (Qt_6_7_0 -) -QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (- Qt_6_7_0) -const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (Qt_6_7_0 -) -QQuaternion operator-(const QQuaternion &quaternion); -%End -%If (- Qt_6_7_0) -const QQuaternion operator-(const QQuaternion &quaternion); -%End -%If (Qt_6_7_0 -) -QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (- Qt_6_7_0) -const QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2); -%End -%If (Qt_6_7_0 -) -QQuaternion operator/(const QQuaternion &quaternion, float divisor); -%End -%If (- Qt_6_7_0) -const QQuaternion operator/(const QQuaternion &quaternion, float divisor); -%End -bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2); -QDataStream &operator<<(QDataStream &, const QQuaternion &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QQuaternion & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrasterwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrasterwindow.sip deleted file mode 100644 index 2b61af2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrasterwindow.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qrasterwindow.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRasterWindow : public QPaintDeviceWindow -{ -%TypeHeaderCode -#include -%End - -public: - explicit QRasterWindow(QWindow *parent /TransferThis/ = 0); - virtual ~QRasterWindow(); - -protected: - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; -%If (Qt_6_7_0 -) - virtual void resizeEvent(QResizeEvent *event); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrawfont.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrawfont.sip deleted file mode 100644 index 86dcae2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrawfont.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qrawfont.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_RawFont) - -class QRawFont -{ -%TypeHeaderCode -#include -%End - -public: - enum AntialiasingType - { - PixelAntialiasing, - SubPixelAntialiasing, - }; - - QRawFont(); - QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting); - QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting); - QRawFont(const QRawFont &other); - ~QRawFont(); - bool isValid() const; - bool operator==(const QRawFont &other) const; - bool operator!=(const QRawFont &other) const; - QString familyName() const; - QString styleName() const; - QFont::Style style() const; - int weight() const; - QList glyphIndexesForString(const QString &text) const; - QList advancesForGlyphIndexes(const QList &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const; - QList advancesForGlyphIndexes(const QList &glyphIndexes) const; - QImage alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = QRawFont::SubPixelAntialiasing, const QTransform &transform = QTransform()) const; - QPainterPath pathForGlyph(quint32 glyphIndex) const; - void setPixelSize(qreal pixelSize); - qreal pixelSize() const; - QFont::HintingPreference hintingPreference() const; - qreal ascent() const; - qreal descent() const; - qreal leading() const; - qreal xHeight() const; - qreal averageCharWidth() const; - qreal maxCharWidth() const; - qreal unitsPerEm() const; - void loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/; - void loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/; - bool supportsCharacter(uint ucs4) const; - bool supportsCharacter(QChar character) const; - QList supportedWritingSystems() const; - QByteArray fontTable(const char *tagName) const; -%If (Qt_6_7_0 -) - QByteArray fontTable(QFont::Tag tag) const; -%End - static QRawFont fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any); - QRectF boundingRect(quint32 glyphIndex) const; - qreal lineThickness() const; - qreal underlinePosition() const; - void swap(QRawFont &other /Constrained/); - - enum LayoutFlag /BaseType=Flag/ - { - SeparateAdvances, - KernedAdvances, - UseDesignMetrics, - }; - - typedef QFlags LayoutFlags; - qreal capHeight() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qregion.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qregion.sip deleted file mode 100644 index 05b02ae..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qregion.sip +++ /dev/null @@ -1,112 +0,0 @@ -// qregion.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRegion -{ -%TypeHeaderCode -#include -%End - -public: - enum RegionType - { - Rectangle, - Ellipse, - }; - - QRegion(); - QRegion(int x, int y, int w, int h, QRegion::RegionType type = QRegion::Rectangle); - QRegion(const QRect &r, QRegion::RegionType type = QRegion::Rectangle); - QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill); - QRegion(const QBitmap &bitmap); - QRegion(const QRegion ®ion); - QRegion(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QRegion(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QRegion(); - bool isEmpty() const; - int __bool__() const; -%MethodCode - sipRes = !sipCpp->isEmpty(); -%End - - bool contains(const QPoint &p) const; - int __contains__(const QPoint &p) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - bool contains(const QRect &r) const; - int __contains__(const QRect &r) const; -%MethodCode - sipRes = sipCpp->contains(*a0); -%End - - void translate(int dx, int dy); - void translate(const QPoint &p); - QRegion translated(int dx, int dy) const; - QRegion translated(const QPoint &p) const; - QRegion united(const QRegion &r) const; - QRegion united(const QRect &r) const; - QRect boundingRect() const; - QRegion operator|(const QRegion &r) const; - void setRects(const QList &); -%MethodCode - if (a0->size()) - sipCpp->setRects(a0->data(), a0->size()); - else - sipCpp->setRects(0, 0); -%End - - QRegion operator+(const QRegion &r) const; - QRegion operator+(const QRect &r) const; - QRegion operator&(const QRegion &r) const; - QRegion operator&(const QRect &r) const; - QRegion operator-(const QRegion &r) const; - QRegion operator^(const QRegion &r) const; - QRegion &operator|=(const QRegion &r); - QRegion &operator+=(const QRegion &r); - QRegion &operator+=(const QRect &r); - QRegion &operator&=(const QRegion &r); - QRegion &operator&=(const QRect &r); - QRegion &operator-=(const QRegion &r); - QRegion &operator^=(const QRegion &r); - bool operator==(const QRegion &r) const; - bool operator!=(const QRegion &r) const; - QRegion intersected(const QRegion &r) const; - QRegion intersected(const QRect &r) const; - QRegion subtracted(const QRegion &r) const; - QRegion xored(const QRegion &r) const; - bool intersects(const QRegion &r) const; - bool intersects(const QRect &r) const; - int rectCount() const; - void swap(QRegion &other /Constrained/); - bool isNull() const; -}; - -QDataStream &operator<<(QDataStream &, const QRegion &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QRegion & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgb.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgb.sip deleted file mode 100644 index 949f52a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgb.sip +++ /dev/null @@ -1,37 +0,0 @@ -// qrgb.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -typedef unsigned int QRgb; -int qRed(QRgb rgb); -int qGreen(QRgb rgb); -int qBlue(QRgb rgb); -int qAlpha(QRgb rgb); -QRgb qRgb(int r, int g, int b); -QRgb qRgba(int r, int g, int b, int a); -int qGray(int r, int g, int b); -int qGray(QRgb rgb); -QRgb qPremultiply(QRgb x); -QRgb qUnpremultiply(QRgb p); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgba64.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgba64.sip deleted file mode 100644 index bd2aa15..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qrgba64.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qrgba64.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QRgba64 -{ -%TypeHeaderCode -#include -%End - -public: - QRgba64(); - static QRgba64 fromRgba64(quint64 c); - static QRgba64 fromRgba64(quint16 red, quint16 green, quint16 blue, quint16 alpha); - static QRgba64 fromRgba(quint8 red, quint8 green, quint8 blue, quint8 alpha); - static QRgba64 fromArgb32(uint rgb); - bool isOpaque() const; - bool isTransparent() const; - quint16 red() const; - quint16 green() const; - quint16 blue() const; - quint16 alpha() const; - void setRed(quint16 _red); - void setGreen(quint16 _green); - void setBlue(quint16 _blue); - void setAlpha(quint16 _alpha); - quint8 red8() const; - quint8 green8() const; - quint8 blue8() const; - quint8 alpha8() const; - uint toArgb32() const; - ushort toRgb16() const; - QRgba64 premultiplied() const; - QRgba64 unpremultiplied() const; - operator quint64() const; -}; - -QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a); -QRgba64 qRgba64(quint64 c); -QRgba64 qPremultiply(QRgba64 c); -QRgba64 qUnpremultiply(QRgba64 c); -uint qRed(QRgba64 rgb); -uint qGreen(QRgba64 rgb); -uint qBlue(QRgba64 rgb); -uint qAlpha(QRgba64 rgb); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qscreen.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qscreen.sip deleted file mode 100644 index 99f374c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qscreen.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qscreen.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QScreen : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QScreen(); - QString name() const; - int depth() const; - QSize size() const; - QRect geometry() const; - QSizeF physicalSize() const; - qreal physicalDotsPerInchX() const; - qreal physicalDotsPerInchY() const; - qreal physicalDotsPerInch() const; - qreal logicalDotsPerInchX() const; - qreal logicalDotsPerInchY() const; - qreal logicalDotsPerInch() const; - QSize availableSize() const; - QRect availableGeometry() const; - QList virtualSiblings() const; - QSize virtualSize() const; - QRect virtualGeometry() const; - QSize availableVirtualSize() const; - QRect availableVirtualGeometry() const; - Qt::ScreenOrientation nativeOrientation() const; - Qt::ScreenOrientation primaryOrientation() const; - Qt::ScreenOrientation orientation() const; - int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) const; - QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target) const; - QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect) const; - bool isPortrait(Qt::ScreenOrientation orientation) const; - bool isLandscape(Qt::ScreenOrientation orientation) const; - QPixmap grabWindow(WId window = 0, int x = 0, int y = 0, int width = -1, int height = -1); - qreal refreshRate() const; - qreal devicePixelRatio() const; - -signals: - void geometryChanged(const QRect &geometry); - void physicalDotsPerInchChanged(qreal dpi); - void logicalDotsPerInchChanged(qreal dpi); - void primaryOrientationChanged(Qt::ScreenOrientation orientation); - void orientationChanged(Qt::ScreenOrientation orientation); - void refreshRateChanged(qreal refreshRate); - void physicalSizeChanged(const QSizeF &size); - void virtualGeometryChanged(const QRect &rect); - void availableGeometryChanged(const QRect &geometry); - -public: - QString manufacturer() const; - QString model() const; - QString serialNumber() const; - QScreen *virtualSiblingAt(QPoint point); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsessionmanager.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsessionmanager.sip deleted file mode 100644 index bd3e528..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsessionmanager.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qsessionmanager.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SessionManager) - -class QSessionManager : public QObject -{ -%TypeHeaderCode -#include -%End - - QSessionManager(QGuiApplication *app /TransferThis/, QString &id, QString &key); - virtual ~QSessionManager(); - -public: - QString sessionId() const; - QString sessionKey() const; - bool allowsInteraction(); - bool allowsErrorInteraction(); - void release(); - void cancel(); - - enum RestartHint - { - RestartIfRunning, - RestartAnyway, - RestartImmediately, - RestartNever, - }; - - void setRestartHint(QSessionManager::RestartHint); - QSessionManager::RestartHint restartHint() const; - void setRestartCommand(const QStringList &); - QStringList restartCommand() const; - void setDiscardCommand(const QStringList &); - QStringList discardCommand() const; - void setManagerProperty(const QString &name, const QString &value); - void setManagerProperty(const QString &name, const QStringList &value); - bool isPhase2() const; - void requestPhase2(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qshortcut.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qshortcut.sip deleted file mode 100644 index d8431e5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qshortcut.sip +++ /dev/null @@ -1,171 +0,0 @@ -// qshortcut.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QShortcut : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QShortcut(QKeySequence::StandardKey key, QObject *parent /TransferThis/, SIP_PYOBJECT member /TypeHint="PYQT_SLOT"/ = 0, SIP_PYOBJECT ambiguousMember /TypeHint="PYQT_SLOT"/ = 0, Qt::ShortcutContext context = Qt::WindowShortcut) [(QKeySequence::StandardKey key, QObject *parent, const char *member = 0, const char *ambiguousMember = 0, Qt::ShortcutContext context = Qt::WindowShortcut)]; -%MethodCode - // Construct the shortcut without any connections. - Py_BEGIN_ALLOW_THREADS - sipCpp = new sipQShortcut(a0, a1, 0, 0, a4); - Py_END_ALLOW_THREADS - - if (a2) - { - QObject *rx2; - QByteArray member2; - - if ((sipError = pyqt6_qtgui_get_connection_parts(a2, sipCpp, "()", false, &rx2, member2)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - QObject::connect(sipCpp, SIGNAL(activated()), rx2, - member2.constData()); - Py_END_ALLOW_THREADS - } - else - { - delete sipCpp; - - if (sipError == sipErrorContinue) - sipError = sipBadCallableArg(2, a2); - } - } - - if (a3) - { - QObject *rx3; - QByteArray member3; - - if ((sipError = pyqt6_qtgui_get_connection_parts(a3, sipCpp, "()", false, &rx3, member3)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - QObject::connect(sipCpp, SIGNAL(activatedAmbiguously()), rx3, - member3.constData()); - Py_END_ALLOW_THREADS - } - else - { - delete sipCpp; - - if (sipError == sipErrorContinue) - sipError = sipBadCallableArg(3, a3); - } - } -%End - - QShortcut(const QKeySequence &key, QObject *parent /TransferThis/, SIP_PYOBJECT member /TypeHint="PYQT_SLOT"/ = 0, SIP_PYOBJECT ambiguousMember /TypeHint="PYQT_SLOT"/ = 0, Qt::ShortcutContext context = Qt::WindowShortcut) [(const QKeySequence &key, QObject *parent, const char *member = 0, const char *ambiguousMember = 0, Qt::ShortcutContext context = Qt::WindowShortcut)]; -%MethodCode - // Construct the shortcut without any connections. - Py_BEGIN_ALLOW_THREADS - sipCpp = new sipQShortcut(*a0, a1, 0, 0, a4); - Py_END_ALLOW_THREADS - - if (a2) - { - QObject *rx2; - QByteArray member2; - - if ((sipError = pyqt6_qtgui_get_connection_parts(a2, sipCpp, "()", false, &rx2, member2)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - QObject::connect(sipCpp, SIGNAL(activated()), rx2, - member2.constData()); - Py_END_ALLOW_THREADS - } - else - { - delete sipCpp; - - if (sipError == sipErrorContinue) - sipError = sipBadCallableArg(2, a2); - } - } - - if (a3) - { - QObject *rx3; - QByteArray member3; - - if ((sipError = pyqt6_qtgui_get_connection_parts(a3, sipCpp, "()", false, &rx3, member3)) == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - QObject::connect(sipCpp, SIGNAL(activatedAmbiguously()), rx3, - member3.constData()); - Py_END_ALLOW_THREADS - } - else - { - delete sipCpp; - - if (sipError == sipErrorContinue) - sipError = sipBadCallableArg(3, a3); - } - } -%End - - explicit QShortcut(QObject *parent /TransferThis/); - virtual ~QShortcut(); - void setKey(const QKeySequence &key); - QKeySequence key() const; - void setEnabled(bool enable); - bool isEnabled() const; - void setContext(Qt::ShortcutContext context); - Qt::ShortcutContext context() const; - void setWhatsThis(const QString &text); - QString whatsThis() const; - void setAutoRepeat(bool on); - bool autoRepeat() const; - -signals: - void activated(); - void activatedAmbiguously(); - -public: - void setKeys(const QList &keys); - void setKeys(QKeySequence::StandardKey key); - QList keys() const; - -protected: - virtual bool event(QEvent *e); -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qtgui_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); -extern pyqt6_qtgui_get_connection_parts_t pyqt6_qtgui_get_connection_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtgui_get_connection_parts_t pyqt6_qtgui_get_connection_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtgui_get_connection_parts = (pyqt6_qtgui_get_connection_parts_t)sipImportSymbol("pyqt6_get_connection_parts"); -Q_ASSERT(pyqt6_qtgui_get_connection_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstandarditemmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstandarditemmodel.sip deleted file mode 100644 index 06f5310..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstandarditemmodel.sip +++ /dev/null @@ -1,207 +0,0 @@ -// qstandarditemmodel.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStandardItemModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStandardItemModel(QObject *parent /TransferThis/ = 0); - QStandardItemModel(int rows, int columns, QObject *parent /TransferThis/ = 0); - virtual ~QStandardItemModel(); - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex parent(const QModelIndex &child) const; - QObject *parent() const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - void clear(); - virtual Qt::DropActions supportedDropActions() const; - virtual QMap itemData(const QModelIndex &index) const; - virtual bool setItemData(const QModelIndex &index, const QMap &roles); - virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); - QStandardItem *itemFromIndex(const QModelIndex &index) const; - QModelIndex indexFromItem(const QStandardItem *item) const; - QStandardItem *item(int row, int column = 0) const; - void setItem(int row, int column, QStandardItem *item /Transfer/); - void setItem(int arow, QStandardItem *aitem /Transfer/); - QStandardItem *invisibleRootItem() const /Transfer/; - QStandardItem *horizontalHeaderItem(int column) const; - void setHorizontalHeaderItem(int column, QStandardItem *item /Transfer/); - QStandardItem *verticalHeaderItem(int row) const; - void setVerticalHeaderItem(int row, QStandardItem *item /Transfer/); - void setHorizontalHeaderLabels(const QStringList &labels); - void setVerticalHeaderLabels(const QStringList &labels); - void setRowCount(int rows); - void setColumnCount(int columns); - void appendRow(const QList &items /Transfer/); - void appendColumn(const QList &items /Transfer/); - void insertRow(int row, const QList &items /Transfer/); - void insertColumn(int column, const QList &items /Transfer/); - QStandardItem *takeItem(int row, int column = 0) /TransferBack/; - QList takeRow(int row) /TransferBack/; - QList takeColumn(int column) /TransferBack/; - QStandardItem *takeHorizontalHeaderItem(int column) /TransferBack/; - QStandardItem *takeVerticalHeaderItem(int row) /TransferBack/; - const QStandardItem *itemPrototype() const; - void setItemPrototype(const QStandardItem *item /Transfer/); - QList findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const; - int sortRole() const; - void setSortRole(int role); - void appendRow(QStandardItem *aitem /Transfer/); - void insertRow(int arow, QStandardItem *aitem /Transfer/); - bool insertRow(int row, const QModelIndex &parent = QModelIndex()); - bool insertColumn(int column, const QModelIndex &parent = QModelIndex()); - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - void setItemRoleNames(const QHash &roleNames); - virtual bool clearItemData(const QModelIndex &index); - virtual QHash roleNames() const; - -signals: - void itemChanged(QStandardItem *item); -}; - -class QStandardItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QStandardItem(); - explicit QStandardItem(const QString &text); - QStandardItem(const QIcon &icon, const QString &text); - QStandardItem(int rows, int columns = 1); - virtual ~QStandardItem(); - virtual QVariant data(int role = Qt::UserRole + 1) const; - virtual void setData(const QVariant &value, int role = Qt::UserRole + 1); - QString text() const; - QIcon icon() const; - QString toolTip() const; - QString statusTip() const; - QString whatsThis() const; - QSize sizeHint() const; - QFont font() const; - Qt::Alignment textAlignment() const; - QBrush background() const; - QBrush foreground() const; - Qt::CheckState checkState() const; - QString accessibleText() const; - QString accessibleDescription() const; - Qt::ItemFlags flags() const; - void setFlags(Qt::ItemFlags flags); - bool isEnabled() const; - void setEnabled(bool enabled); - bool isEditable() const; - void setEditable(bool editable); - bool isSelectable() const; - void setSelectable(bool selectable); - bool isCheckable() const; - void setCheckable(bool checkable); - bool isDragEnabled() const; - void setDragEnabled(bool dragEnabled); - bool isDropEnabled() const; - void setDropEnabled(bool dropEnabled); - QStandardItem *parent() const; - int row() const; - int column() const; - QModelIndex index() const; - QStandardItemModel *model() const; - int rowCount() const; - void setRowCount(int rows); - int columnCount() const; - void setColumnCount(int columns); - bool hasChildren() const; - QStandardItem *child(int row, int column = 0) const; - void setChild(int row, int column, QStandardItem *item /Transfer/); - void setChild(int arow, QStandardItem *aitem /Transfer/); - void insertRow(int row, const QList &items /Transfer/); - void insertRow(int arow, QStandardItem *aitem /Transfer/); - void insertRows(int row, int count); - void insertColumn(int column, const QList &items /Transfer/); - void insertColumns(int column, int count); - void removeRow(int row); - void removeColumn(int column); - void removeRows(int row, int count); - void removeColumns(int column, int count); - QStandardItem *takeChild(int row, int column = 0) /TransferBack/; - QList takeRow(int row) /TransferBack/; - QList takeColumn(int column) /TransferBack/; - void sortChildren(int column, Qt::SortOrder order = Qt::AscendingOrder); - virtual QStandardItem *clone() const /Factory/; - - enum ItemType - { - Type, - UserType, - }; - - virtual int type() const; - virtual void read(QDataStream &in); - virtual void write(QDataStream &out) const; - virtual bool operator<(const QStandardItem &other /NoCopy/) const; - void setText(const QString &atext); - void setIcon(const QIcon &aicon); - void setToolTip(const QString &atoolTip); - void setStatusTip(const QString &astatusTip); - void setWhatsThis(const QString &awhatsThis); - void setSizeHint(const QSize &asizeHint); - void setFont(const QFont &afont); - void setTextAlignment(Qt::Alignment atextAlignment); - void setBackground(const QBrush &abrush); - void setForeground(const QBrush &abrush); - void setCheckState(Qt::CheckState acheckState); - void setAccessibleText(const QString &aaccessibleText); - void setAccessibleDescription(const QString &aaccessibleDescription); - void appendRow(const QList &items /Transfer/); - void appendRow(QStandardItem *aitem /Transfer/); - void appendColumn(const QList &items /Transfer/); - void insertRows(int row, const QList &items /Transfer/); - void appendRows(const QList &items /Transfer/); - -protected: - QStandardItem(const QStandardItem &other); - void emitDataChanged(); - -public: - bool isAutoTristate() const; - void setAutoTristate(bool tristate); - bool isUserTristate() const; - void setUserTristate(bool tristate); - void clearData(); -}; - -QDataStream &operator<<(QDataStream &out, const QStandardItem &item) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QStandardItem &item /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstatictext.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstatictext.sip deleted file mode 100644 index 65a4cfa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstatictext.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qstatictext.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStaticText -{ -%TypeHeaderCode -#include -%End - -public: - enum PerformanceHint - { - ModerateCaching, - AggressiveCaching, - }; - - QStaticText(); - explicit QStaticText(const QString &text); - QStaticText(const QStaticText &other); - ~QStaticText(); - void setText(const QString &text); - QString text() const; - void setTextFormat(Qt::TextFormat textFormat); - Qt::TextFormat textFormat() const; - void setTextWidth(qreal textWidth); - qreal textWidth() const; - void setTextOption(const QTextOption &textOption); - QTextOption textOption() const; - QSizeF size() const; - void prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont()); - void setPerformanceHint(QStaticText::PerformanceHint performanceHint); - QStaticText::PerformanceHint performanceHint() const; - bool operator==(const QStaticText &) const; - bool operator!=(const QStaticText &) const; - void swap(QStaticText &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstylehints.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstylehints.sip deleted file mode 100644 index 43a24fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qstylehints.sip +++ /dev/null @@ -1,100 +0,0 @@ -// qstylehints.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStyleHints : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - int mouseDoubleClickInterval() const; - int startDragDistance() const; - int startDragTime() const; - int startDragVelocity() const; - int keyboardInputInterval() const; - int keyboardAutoRepeatRate() const; - int cursorFlashTime() const; - bool showIsFullScreen() const; - int passwordMaskDelay() const; - qreal fontSmoothingGamma() const; - bool useRtlExtensions() const; - QChar passwordMaskCharacter() const; - bool setFocusOnTouchRelease() const; - int mousePressAndHoldInterval() const; - Qt::TabFocusBehavior tabFocusBehavior() const; - bool singleClickActivation() const; - -signals: - void cursorFlashTimeChanged(int cursorFlashTime); - void keyboardInputIntervalChanged(int keyboardInputInterval); - void mouseDoubleClickIntervalChanged(int mouseDoubleClickInterval); - void startDragDistanceChanged(int startDragDistance); - void startDragTimeChanged(int startDragTime); - void mousePressAndHoldIntervalChanged(int mousePressAndHoldInterval); - void tabFocusBehaviorChanged(Qt::TabFocusBehavior tabFocusBehavior); - -public: - bool showIsMaximized() const; - bool useHoverEffects() const; - void setUseHoverEffects(bool useHoverEffects); - -signals: - void useHoverEffectsChanged(bool useHoverEffects); - -public: - int wheelScrollLines() const; - -signals: - void wheelScrollLinesChanged(int scrollLines); - -public: - bool showShortcutsInContextMenus() const; - int mouseQuickSelectionThreshold() const; - -signals: - void mouseQuickSelectionThresholdChanged(int threshold); - -public: - void setShowShortcutsInContextMenus(bool showShortcutsInContextMenus); - -signals: - void showShortcutsInContextMenusChanged(bool); - -public: - int mouseDoubleClickDistance() const; - int touchDoubleTapDistance() const; -%If (Qt_6_5_0 -) - qreal keyboardAutoRepeatRateF() const; -%End -%If (Qt_6_5_0 -) - Qt::ColorScheme colorScheme() const; -%End - -signals: -%If (Qt_6_5_0 -) - void colorSchemeChanged(Qt::ColorScheme colorScheme); -%End - -private: - QStyleHints(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurface.sip deleted file mode 100644 index bb9ae9c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurface.sip +++ /dev/null @@ -1,58 +0,0 @@ -// qsurface.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSurface /Abstract/ -{ -%TypeHeaderCode -#include -%End - -public: - enum SurfaceClass - { - Window, - Offscreen, - }; - - enum SurfaceType - { - RasterSurface, - OpenGLSurface, - RasterGLSurface, - OpenVGSurface, - VulkanSurface, - MetalSurface, -%If (Qt_6_1_0 -) - Direct3DSurface, -%End - }; - - virtual ~QSurface(); - QSurface::SurfaceClass surfaceClass() const; - virtual QSurfaceFormat format() const = 0; - virtual QSurface::SurfaceType surfaceType() const = 0; - virtual QSize size() const = 0; - bool supportsOpenGL() const; - -protected: - explicit QSurface(QSurface::SurfaceClass type); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurfaceformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurfaceformat.sip deleted file mode 100644 index 1367720..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsurfaceformat.sip +++ /dev/null @@ -1,112 +0,0 @@ -// qsurfaceformat.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSurfaceFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum FormatOption /BaseType=Flag/ - { - StereoBuffers, - DebugContext, - DeprecatedFunctions, - ResetNotification, -%If (Qt_6_2_0 -) - ProtectedContent, -%End - }; - - typedef QFlags FormatOptions; - - enum SwapBehavior - { - DefaultSwapBehavior, - SingleBuffer, - DoubleBuffer, - TripleBuffer, - }; - - enum RenderableType - { - DefaultRenderableType, - OpenGL, - OpenGLES, - OpenVG, - }; - - enum OpenGLContextProfile - { - NoProfile, - CoreProfile, - CompatibilityProfile, - }; - - QSurfaceFormat(); - QSurfaceFormat(QSurfaceFormat::FormatOptions options); - QSurfaceFormat(const QSurfaceFormat &other); - ~QSurfaceFormat(); - void setDepthBufferSize(int size); - int depthBufferSize() const; - void setStencilBufferSize(int size); - int stencilBufferSize() const; - void setRedBufferSize(int size); - int redBufferSize() const; - void setGreenBufferSize(int size); - int greenBufferSize() const; - void setBlueBufferSize(int size); - int blueBufferSize() const; - void setAlphaBufferSize(int size); - int alphaBufferSize() const; - void setSamples(int numSamples); - int samples() const; - void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior); - QSurfaceFormat::SwapBehavior swapBehavior() const; - bool hasAlpha() const; - void setProfile(QSurfaceFormat::OpenGLContextProfile profile); - QSurfaceFormat::OpenGLContextProfile profile() const; - void setRenderableType(QSurfaceFormat::RenderableType type); - QSurfaceFormat::RenderableType renderableType() const; - void setMajorVersion(int majorVersion); - int majorVersion() const; - void setMinorVersion(int minorVersion); - int minorVersion() const; - void setStereo(bool enable); - bool stereo() const; - std::pair version() const; - void setVersion(int major, int minor); - void setOptions(QSurfaceFormat::FormatOptions options); - void setOption(QSurfaceFormat::FormatOption option, bool on = true); - bool testOption(QSurfaceFormat::FormatOption option) const; - QSurfaceFormat::FormatOptions options() const; - int swapInterval() const; - void setSwapInterval(int interval); - static void setDefaultFormat(const QSurfaceFormat &format); - static QSurfaceFormat defaultFormat(); - const QColorSpace &colorSpace() const; - void setColorSpace(const QColorSpace &colorSpace); -}; - -bool operator==(const QSurfaceFormat &, const QSurfaceFormat &); -bool operator!=(const QSurfaceFormat &, const QSurfaceFormat &); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsyntaxhighlighter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsyntaxhighlighter.sip deleted file mode 100644 index 2dff596..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qsyntaxhighlighter.sip +++ /dev/null @@ -1,89 +0,0 @@ -// qsyntaxhighlighter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSyntaxHighlighter : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSyntaxHighlighter(QTextDocument *parent /TransferThis/); - explicit QSyntaxHighlighter(QObject *parent /TransferThis/); - virtual ~QSyntaxHighlighter(); - void setDocument(QTextDocument *doc /KeepReference/); - QTextDocument *document() const; - -public slots: - void rehighlight(); - void rehighlightBlock(const QTextBlock &block); - -protected: - virtual void highlightBlock(const QString &text) = 0; - void setFormat(int start, int count, const QTextCharFormat &format); - void setFormat(int start, int count, const QColor &color); - void setFormat(int start, int count, const QFont &font); - QTextCharFormat format(int pos) const; - int previousBlockState() const; - int currentBlockState() const; - void setCurrentBlockState(int newState); - void setCurrentBlockUserData(QTextBlockUserData *data /GetWrapper/); -%MethodCode - // Ownership of the user data is with the document not the syntax highlighter. - - typedef PyObject *(*helper_func)(QObject *, const sipTypeDef *); - - static helper_func helper = 0; - - if (!helper) - { - helper = (helper_func)sipImportSymbol("qtgui_wrap_ancestors"); - Q_ASSERT(helper); - } - - QTextDocument *td = sipCpp->document(); - - if (td) - { - PyObject *py_td = helper(td, sipType_QTextDocument); - - if (!py_td) - { - sipIsErr = 1; - } - else - { - sipTransferTo(a0Wrapper, py_td); - Py_DECREF(py_td); - } - } - - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipCpp->setCurrentBlockUserData(a0); - #else - sipCpp->sipProtect_setCurrentBlockUserData(a0); - #endif -%End - - QTextBlockUserData *currentBlockUserData() const; - QTextBlock currentBlock() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextcursor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextcursor.sip deleted file mode 100644 index 41d7fdb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextcursor.sip +++ /dev/null @@ -1,158 +0,0 @@ -// qtextcursor.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextCursor -{ -%TypeHeaderCode -#include -%End - -public: - QTextCursor(); - explicit QTextCursor(QTextDocument *document); - explicit QTextCursor(QTextFrame *frame); - explicit QTextCursor(const QTextBlock &block); - QTextCursor(const QTextCursor &cursor); - ~QTextCursor(); - bool isNull() const; - - enum MoveMode - { - MoveAnchor, - KeepAnchor, - }; - - void setPosition(int pos, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); - int position() const; - int anchor() const; - void insertText(const QString &text); - void insertText(const QString &text, const QTextCharFormat &format); - - enum MoveOperation - { - NoMove, - Start, - Up, - StartOfLine, - StartOfBlock, - StartOfWord, - PreviousBlock, - PreviousCharacter, - PreviousWord, - Left, - WordLeft, - End, - Down, - EndOfLine, - EndOfWord, - EndOfBlock, - NextBlock, - NextCharacter, - NextWord, - Right, - WordRight, - NextCell, - PreviousCell, - NextRow, - PreviousRow, - }; - - bool movePosition(QTextCursor::MoveOperation op, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor, int n = 1); - void deleteChar(); - void deletePreviousChar(); - - enum SelectionType - { - WordUnderCursor, - LineUnderCursor, - BlockUnderCursor, - Document, - }; - - void select(QTextCursor::SelectionType selection); - bool hasSelection() const; - bool hasComplexSelection() const; - void removeSelectedText(); - void clearSelection(); - int selectionStart() const; - int selectionEnd() const; - QString selectedText() const; - QTextDocumentFragment selection() const; - void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns) const; - QTextBlock block() const; - QTextCharFormat charFormat() const; - void setCharFormat(const QTextCharFormat &format); - void mergeCharFormat(const QTextCharFormat &modifier); - QTextBlockFormat blockFormat() const; - void setBlockFormat(const QTextBlockFormat &format); - void mergeBlockFormat(const QTextBlockFormat &modifier); - QTextCharFormat blockCharFormat() const; - void setBlockCharFormat(const QTextCharFormat &format); - void mergeBlockCharFormat(const QTextCharFormat &modifier); - bool atBlockStart() const; - bool atBlockEnd() const; - bool atStart() const; - bool atEnd() const; - void insertBlock(); - void insertBlock(const QTextBlockFormat &format); - void insertBlock(const QTextBlockFormat &format, const QTextCharFormat &charFormat); - QTextList *insertList(const QTextListFormat &format); - QTextList *insertList(QTextListFormat::Style style); - QTextList *createList(const QTextListFormat &format); - QTextList *createList(QTextListFormat::Style style); - QTextList *currentList() const; - QTextTable *insertTable(int rows, int cols, const QTextTableFormat &format); - QTextTable *insertTable(int rows, int cols); - QTextTable *currentTable() const; - QTextFrame *insertFrame(const QTextFrameFormat &format); - QTextFrame *currentFrame() const; - void insertFragment(const QTextDocumentFragment &fragment); - void insertHtml(const QString &html); - void insertImage(const QTextImageFormat &format); - void insertImage(const QTextImageFormat &format, QTextFrameFormat::Position alignment); - void insertImage(const QString &name); - void insertImage(const QImage &image, const QString &name = QString()); - void beginEditBlock(); - void joinPreviousEditBlock(); - void endEditBlock(); - int blockNumber() const; - int columnNumber() const; - bool operator!=(const QTextCursor &rhs) const; - bool operator<(const QTextCursor &rhs) const; - bool operator<=(const QTextCursor &rhs) const; - bool operator==(const QTextCursor &rhs) const; - bool operator>=(const QTextCursor &rhs) const; - bool operator>(const QTextCursor &rhs) const; - bool isCopyOf(const QTextCursor &other) const; - bool visualNavigation() const; - void setVisualNavigation(bool b); - QTextDocument *document() const; - int positionInBlock() const; - void setVerticalMovementX(int x); - int verticalMovementX() const; - void setKeepPositionOnInsert(bool b); - bool keepPositionOnInsert() const; - void swap(QTextCursor &other /Constrained/); -%If (Qt_6_4_0 -) - void insertMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocument.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocument.sip deleted file mode 100644 index 6a40a5f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocument.sip +++ /dev/null @@ -1,385 +0,0 @@ -// qtextdocument.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace Qt -{ -%TypeHeaderCode -#include -%End - -%If (Qt_6_7_0 -) - bool mightBeRichText(QAnyStringView); -%End -%If (- Qt_6_7_0) - bool mightBeRichText(const QString &); -%End - QString convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode = Qt::WhiteSpacePre); -}; - -class QTextDocument : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTextDocument(QObject *parent /TransferThis/ = 0); - QTextDocument(const QString &text, QObject *parent /TransferThis/ = 0); - virtual ~QTextDocument(); - QTextDocument *clone(QObject *parent /TransferThis/ = 0) const /Factory/; - bool isEmpty() const; - virtual void clear(); - void setUndoRedoEnabled(bool enable); - bool isUndoRedoEnabled() const; - bool isUndoAvailable() const; - bool isRedoAvailable() const; - void setDocumentLayout(QAbstractTextDocumentLayout *layout /Transfer/); - QAbstractTextDocumentLayout *documentLayout() const; - - enum MetaInformation - { - DocumentTitle, - DocumentUrl, -%If (Qt_6_3_0 -) - CssMedia, -%End - }; - - void setMetaInformation(QTextDocument::MetaInformation info, const QString &); - QString metaInformation(QTextDocument::MetaInformation info) const; - QString toHtml() const; - void setHtml(const QString &html); - QString toPlainText() const; - void setPlainText(const QString &text); - - enum FindFlag /BaseType=Flag/ - { - FindBackward, - FindCaseSensitively, - FindWholeWords, - }; - - typedef QFlags FindFlags; - QTextCursor find(const QRegularExpression &expr, const QTextCursor &cursor, QTextDocument::FindFlags options = QTextDocument::FindFlags()) const; - QTextCursor find(const QRegularExpression &expr, int position = 0, QTextDocument::FindFlags options = QTextDocument::FindFlags()) const; - QTextCursor find(const QString &subString, const QTextCursor &cursor, QTextDocument::FindFlags options = QTextDocument::FindFlags()) const; - QTextCursor find(const QString &subString, int position = 0, QTextDocument::FindFlags options = QTextDocument::FindFlags()) const; - QTextFrame *rootFrame() const; - QTextObject *object(int objectIndex) const; - QTextObject *objectForFormat(const QTextFormat &) const; - QTextBlock findBlock(int pos) const; - QTextBlock begin() const; - QTextBlock end() const; - void setPageSize(const QSizeF &size); - QSizeF pageSize() const; - void setDefaultFont(const QFont &font); - QFont defaultFont() const; - int pageCount() const; - bool isModified() const; -%If (PyQt_Printer) - void print(QPagedPaintDevice *printer) const; -%End - - enum ResourceType /BaseType=IntEnum/ - { - UnknownResource, - HtmlResource, - ImageResource, - StyleSheetResource, - MarkdownResource, - UserResource, - }; - - QVariant resource(int type, const QUrl &name) const; - void addResource(int type, const QUrl &name, const QVariant &resource); - QList allFormats() const; - void markContentsDirty(int from, int length); - void setUseDesignMetrics(bool b); - bool useDesignMetrics() const; - -signals: - void blockCountChanged(int newBlockCount); - void contentsChange(int from, int charsRemoves, int charsAdded); - void contentsChanged(); - void cursorPositionChanged(const QTextCursor &cursor); - void modificationChanged(bool m); - void redoAvailable(bool); - void undoAvailable(bool); - -public slots: - void undo(); - void redo(); - void setModified(bool on = true); - -protected: - virtual QTextObject *createObject(const QTextFormat &f) /Factory/; - virtual QVariant loadResource(int type, const QUrl &name); - -public: - void drawContents(QPainter *p, const QRectF &rect = QRectF()); - void setTextWidth(qreal width); - qreal textWidth() const; - qreal idealWidth() const; - void adjustSize(); - QSizeF size() const; - int blockCount() const; - void setDefaultStyleSheet(const QString &sheet); - QString defaultStyleSheet() const; - void undo(QTextCursor *cursor); - void redo(QTextCursor *cursor); - int maximumBlockCount() const; - void setMaximumBlockCount(int maximum); - QTextOption defaultTextOption() const; - void setDefaultTextOption(const QTextOption &option); - int revision() const; - QTextBlock findBlockByNumber(int blockNumber) const; - QTextBlock findBlockByLineNumber(int blockNumber) const; - QTextBlock firstBlock() const; - QTextBlock lastBlock() const; - qreal indentWidth() const; - void setIndentWidth(qreal width); - -signals: - void undoCommandAdded(); - void documentLayoutChanged(); - -public: - QChar characterAt(int pos) const; - qreal documentMargin() const; - void setDocumentMargin(qreal margin); - int lineCount() const; - int characterCount() const; - int availableUndoSteps() const; - int availableRedoSteps() const; - - enum Stacks - { - UndoStack, - RedoStack, - UndoAndRedoStacks, - }; - - void clearUndoRedoStacks(QTextDocument::Stacks stacks = QTextDocument::UndoAndRedoStacks); - Qt::CursorMoveStyle defaultCursorMoveStyle() const; - void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style); - QUrl baseUrl() const; - void setBaseUrl(const QUrl &url); - -signals: - void baseUrlChanged(const QUrl &url); - -public: - QString toRawText() const; - - enum MarkdownFeature /BaseType=Flag/ - { - MarkdownNoHTML, - MarkdownDialectCommonMark, - MarkdownDialectGitHub, - }; - - typedef QFlags MarkdownFeatures; - QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; - void setMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub); - void setSuperScriptBaseline(qreal baseline); - qreal superScriptBaseline() const; - void setSubScriptBaseline(qreal baseline); - qreal subScriptBaseline() const; - void setBaselineOffset(qreal baseline); - qreal baselineOffset() const; -%If (Qt_6_1_0 -) - SIP_PYCALLABLE resourceProvider() const /TypeHint="Callable[[QUrl], QVariant]"/; -%MethodCode - if (sipCpp->resourceProvider()) - sipRes = sipGetUserObject((sipSimpleWrapper *)sipSelf); - else - sipRes = SIP_NULLPTR; - - if (!sipRes) - sipRes = Py_None; - - Py_INCREF(sipRes); -%End - -%End -%If (Qt_6_1_0 -) - void setResourceProvider(SIP_PYCALLABLE provider /TypeHint="Callable[[QUrl], QVariant]"/); -%MethodCode - // Remove any existing callable. - Py_XDECREF(sipGetUserObject((sipSimpleWrapper *)sipSelf)); - - if (a0 == Py_None) - { - sipSetUserObject((sipSimpleWrapper *)sipSelf, SIP_NULLPTR); - sipCpp->setResourceProvider(SIP_NULLPTR); - } - else - { - // Save the callable so that resourceProvider() can return it. - Py_INCREF(a0); - sipSetUserObject((sipSimpleWrapper *)sipSelf, a0); - - Py_BEGIN_ALLOW_THREADS - - sipCpp->setResourceProvider([a0] (const QUrl &arg) { - QUrl *arg_heap = new QUrl(arg); - QVariant qv; - int is_err = 1; - - SIP_BLOCK_THREADS - - PyObject *arg_obj = sipConvertFromNewType(arg_heap, sipType_QUrl, NULL); - - if (arg_obj) - { - PyObject *res_obj = PyObject_CallFunctionObjArgs(a0, arg_obj, NULL); - - Py_DECREF(arg_obj); - - if (res_obj) - { - is_err = 0; - - QVariant *res = reinterpret_cast( - sipConvertToType(res_obj, sipType_QVariant, NULL, 0, - NULL, &is_err)); - - if (!is_err) - { - qv = *res; - delete res; - } - } - } - else - { - delete arg_heap; - } - - if (is_err) - { - pyqt6_qtgui_err_print(); - } - - SIP_UNBLOCK_THREADS - - return qv; - }); - - Py_END_ALLOW_THREADS - } -%End - -%End -%If (Qt_6_1_0 -) - static SIP_PYCALLABLE defaultResourceProvider() /TypeHint="Callable[[QUrl], QVariant]"/; -%MethodCode - if (QTextDocument::defaultResourceProvider()) - sipRes = (PyObject *)sipGetTypeUserData((sipWrapperType *)sipTypeAsPyTypeObject(sipType_QTextDocument)); - else - sipRes = SIP_NULLPTR; - - if (!sipRes) - sipRes = Py_None; - - Py_INCREF(sipRes); -%End - -%End -%If (Qt_6_1_0 -) - static void setDefaultResourceProvider(SIP_PYCALLABLE provider /TypeHint="Callable[[QUrl], QVariant]"/); -%MethodCode - sipWrapperType *wt = (sipWrapperType *)sipTypeAsPyTypeObject(sipType_QTextDocument); - - // Remove any existing callable. - Py_XDECREF((PyObject *)sipGetTypeUserData(wt)); - - if (a0 == Py_None) - { - sipSetTypeUserData(wt, SIP_NULLPTR); - QTextDocument::setDefaultResourceProvider(SIP_NULLPTR); - } - else - { - // Save the callable so that defaultResourceProvider() can return it. - Py_INCREF(a0); - sipSetTypeUserData(wt, a0); - - Py_BEGIN_ALLOW_THREADS - - QTextDocument::setDefaultResourceProvider([a0] (const QUrl &arg) { - QUrl *arg_heap = new QUrl(arg); - QVariant qv; - int is_err = 1; - - SIP_BLOCK_THREADS - - PyObject *arg_obj = sipConvertFromNewType(arg_heap, sipType_QUrl, NULL); - - if (arg_obj) - { - PyObject *res_obj = PyObject_CallFunctionObjArgs(a0, arg_obj, NULL); - - Py_DECREF(arg_obj); - - if (res_obj) - { - is_err = 0; - - QVariant *res = reinterpret_cast( - sipConvertToType(res_obj, sipType_QVariant, NULL, 0, - NULL, &is_err)); - - if (!is_err) - { - qv = *res; - delete res; - } - } - } - else - { - delete arg_heap; - } - - if (is_err) - { - pyqt6_qtgui_err_print(); - } - - SIP_UNBLOCK_THREADS - - return qv; - }); - - Py_END_ALLOW_THREADS - } -%End - -%End -%If (Qt_6_4_0 -) - void setLayoutEnabled(bool b); -%End -%If (Qt_6_4_0 -) - bool isLayoutEnabled() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentfragment.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentfragment.sip deleted file mode 100644 index 56da789..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentfragment.sip +++ /dev/null @@ -1,49 +0,0 @@ -// qtextdocumentfragment.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextDocumentFragment -{ -%TypeHeaderCode -#include -%End - -public: - QTextDocumentFragment(); - explicit QTextDocumentFragment(const QTextDocument *document); - explicit QTextDocumentFragment(const QTextCursor &range); - QTextDocumentFragment(const QTextDocumentFragment &rhs); - ~QTextDocumentFragment(); - bool isEmpty() const; - QString toPlainText() const; - QString toHtml() const; - static QTextDocumentFragment fromPlainText(const QString &plainText); - static QTextDocumentFragment fromHtml(const QString &html, const QTextDocument *resourceProvider = 0); -%If (Qt_6_4_0 -) - QString toRawText() const; -%End -%If (Qt_6_4_0 -) - QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; -%End -%If (Qt_6_4_0 -) - static QTextDocumentFragment fromMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentwriter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentwriter.sip deleted file mode 100644 index 0e04aac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextdocumentwriter.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qtextdocumentwriter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextDocumentWriter -{ -%TypeHeaderCode -#include -%End - -public: - QTextDocumentWriter(); - QTextDocumentWriter(QIODevice *device, const QByteArray &format); - QTextDocumentWriter(const QString &fileName, const QByteArray &format = QByteArray()); - ~QTextDocumentWriter(); - void setFormat(const QByteArray &format); - QByteArray format() const; - void setDevice(QIODevice *device); - QIODevice *device() const; - void setFileName(const QString &fileName); - QString fileName() const; - bool write(const QTextDocument *document); - bool write(const QTextDocumentFragment &fragment); - static QList supportedDocumentFormats(); - -private: - QTextDocumentWriter(const QTextDocumentWriter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextformat.sip deleted file mode 100644 index 10806f4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextformat.sip +++ /dev/null @@ -1,663 +0,0 @@ -// qtextformat.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextLength -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - VariableLength, - FixedLength, - PercentageLength, - }; - - QTextLength(); - QTextLength::Type type() const; - QTextLength(QTextLength::Type atype, qreal avalue); - qreal value(qreal maximumLength) const; - qreal rawValue() const; - bool operator==(const QTextLength &other) const; - bool operator!=(const QTextLength &other) const; - QTextLength(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QTextLength(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End -}; - -%If (Qt_6_3_0 -) -QDataStream &operator<<(QDataStream &, const QTextTableCellFormat &) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator<<(QDataStream &, const QTextFrameFormat &) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator<<(QDataStream &, const QTextListFormat &) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator<<(QDataStream &, const QTextBlockFormat &) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator<<(QDataStream &, const QTextCharFormat &) /ReleaseGIL/; -%End -QDataStream &operator<<(QDataStream &, const QTextLength &) /ReleaseGIL/; -%If (Qt_6_3_0 -) -QDataStream &operator>>(QDataStream &, QTextTableCellFormat & /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator>>(QDataStream &, QTextFrameFormat & /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator>>(QDataStream &, QTextListFormat & /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator>>(QDataStream &, QTextBlockFormat & /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_3_0 -) -QDataStream &operator>>(QDataStream &, QTextCharFormat & /Constrained/) /ReleaseGIL/; -%End -QDataStream &operator>>(QDataStream &, QTextLength & /Constrained/) /ReleaseGIL/; - -class QTextFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum FormatType /BaseType=IntEnum/ - { - InvalidFormat, - BlockFormat, - CharFormat, - ListFormat, - FrameFormat, - UserFormat, - }; - - enum ObjectTypes /BaseType=IntEnum/ - { - NoObject, - ImageObject, - TableObject, - TableCellObject, - UserObject, - }; - - enum PageBreakFlag /BaseType=Flag/ - { - PageBreak_Auto, - PageBreak_AlwaysBefore, - PageBreak_AlwaysAfter, - }; - - typedef QFlags PageBreakFlags; - - enum Property /BaseType=IntEnum/ - { - ObjectIndex, - CssFloat, - LayoutDirection, - OutlinePen, - BackgroundBrush, - ForegroundBrush, - BlockAlignment, - BlockTopMargin, - BlockBottomMargin, - BlockLeftMargin, - BlockRightMargin, - TextIndent, - BlockIndent, - BlockNonBreakableLines, - BlockTrailingHorizontalRulerWidth, - FontPointSize, - FontSizeAdjustment, - FontSizeIncrement, - FontWeight, - FontItalic, - FontUnderline, - FontOverline, - FontStrikeOut, - FontFixedPitch, - FontPixelSize, - TextUnderlineColor, - TextVerticalAlignment, - TextOutline, - IsAnchor, - AnchorHref, - AnchorName, - ObjectType, - ListStyle, - ListIndent, - FrameBorder, - FrameMargin, - FramePadding, - FrameWidth, - FrameHeight, - TableColumns, - TableColumnWidthConstraints, - TableCellSpacing, - TableCellPadding, - TableCellRowSpan, - TableCellColumnSpan, - ImageName, - ImageWidth, - ImageHeight, - TextUnderlineStyle, - TableHeaderRowCount, - FullWidthSelection, - PageBreakPolicy, - TextToolTip, - FrameTopMargin, - FrameBottomMargin, - FrameLeftMargin, - FrameRightMargin, - FrameBorderBrush, - FrameBorderStyle, - BackgroundImageUrl, - TabPositions, - FirstFontProperty, - FontCapitalization, - FontLetterSpacing, - FontWordSpacing, - LastFontProperty, - TableCellTopPadding, - TableCellBottomPadding, - TableCellLeftPadding, - TableCellRightPadding, - FontStyleHint, - FontStyleStrategy, - FontKerning, - LineHeight, - LineHeightType, - FontHintingPreference, - ListNumberPrefix, - ListNumberSuffix, - FontStretch, - FontLetterSpacingType, - HeadingLevel, - ImageQuality, - FontFamilies, - FontStyleName, - BlockQuoteLevel, - BlockCodeLanguage, - BlockCodeFence, - BlockMarker, - TableBorderCollapse, - TableCellTopBorder, - TableCellBottomBorder, - TableCellLeftBorder, - TableCellRightBorder, - TableCellTopBorderStyle, - TableCellBottomBorderStyle, - TableCellLeftBorderStyle, - TableCellRightBorderStyle, - TableCellTopBorderBrush, - TableCellBottomBorderBrush, - TableCellLeftBorderBrush, - TableCellRightBorderBrush, - ImageTitle, - ImageAltText, - TextSuperScriptBaseline, - TextSubScriptBaseline, - TextBaselineOffset, - OldFontLetterSpacingType, - OldFontStretch, - OldTextUnderlineColor, -%If (Qt_6_4_0 -) - OldFontFamily, -%End -%If (Qt_6_6_0 -) - ListStart, -%End - UserProperty, - }; - - QTextFormat(); - explicit QTextFormat(int type); - QTextFormat(const QTextFormat &rhs); - QTextFormat(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QTextFormat(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - ~QTextFormat(); - void merge(const QTextFormat &other); - bool isValid() const; - int type() const; - int objectIndex() const; - void setObjectIndex(int object); - QVariant property(int propertyId) const; - void setProperty(int propertyId, const QList &lengths); - void setProperty(int propertyId, const QVariant &value); - void clearProperty(int propertyId); - bool hasProperty(int propertyId) const; - bool boolProperty(int propertyId) const; - int intProperty(int propertyId) const; - qreal doubleProperty(int propertyId) const; - QString stringProperty(int propertyId) const; - QColor colorProperty(int propertyId) const; - QPen penProperty(int propertyId) const; - QBrush brushProperty(int propertyId) const; - QTextLength lengthProperty(int propertyId) const; - QList lengthVectorProperty(int propertyId) const; - QMap properties() const; - int objectType() const; - bool isCharFormat() const; - bool isBlockFormat() const; - bool isListFormat() const; - bool isFrameFormat() const; - bool isImageFormat() const; - bool isTableFormat() const; - QTextBlockFormat toBlockFormat() const; - QTextCharFormat toCharFormat() const; - QTextListFormat toListFormat() const; - QTextTableFormat toTableFormat() const; - QTextFrameFormat toFrameFormat() const; - QTextImageFormat toImageFormat() const; - bool operator==(const QTextFormat &rhs) const; - bool operator!=(const QTextFormat &rhs) const; - void setLayoutDirection(Qt::LayoutDirection direction); - Qt::LayoutDirection layoutDirection() const; - void setBackground(const QBrush &brush); - QBrush background() const; - void clearBackground(); - void setForeground(const QBrush &brush); - QBrush foreground() const; - void clearForeground(); - void setObjectType(int atype); - int propertyCount() const; - bool isTableCellFormat() const; - QTextTableCellFormat toTableCellFormat() const; - void swap(QTextFormat &other /Constrained/); - bool isEmpty() const; -}; - -QDataStream &operator<<(QDataStream &, const QTextFormat &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QTextFormat & /Constrained/) /ReleaseGIL/; - -class QTextCharFormat : public QTextFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum VerticalAlignment - { - AlignNormal, - AlignSuperScript, - AlignSubScript, - AlignMiddle, - AlignTop, - AlignBottom, - AlignBaseline, - }; - - QTextCharFormat(); - bool isValid() const; - void setFont(const QFont &font, QTextCharFormat::FontPropertiesInheritanceBehavior behavior = QTextCharFormat::FontPropertiesAll); - QFont font() const; - void setFontFamily(const QString &family); - QString fontFamily() const; - void setFontPointSize(qreal size); - qreal fontPointSize() const; - void setFontWeight(int weight); - int fontWeight() const; - void setFontItalic(bool italic); - bool fontItalic() const; - void setFontUnderline(bool underline); - bool fontUnderline() const; - void setFontOverline(bool overline); - bool fontOverline() const; - void setFontStrikeOut(bool strikeOut); - bool fontStrikeOut() const; - void setUnderlineColor(const QColor &color); - QColor underlineColor() const; - void setFontFixedPitch(bool fixedPitch); - bool fontFixedPitch() const; - void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment); - QTextCharFormat::VerticalAlignment verticalAlignment() const; - void setAnchor(bool anchor); - bool isAnchor() const; - void setAnchorHref(const QString &value); - QString anchorHref() const; - int tableCellRowSpan() const; - int tableCellColumnSpan() const; - void setTableCellRowSpan(int atableCellRowSpan); - void setTableCellColumnSpan(int atableCellColumnSpan); - void setTextOutline(const QPen &pen); - QPen textOutline() const; - - enum UnderlineStyle - { - NoUnderline, - SingleUnderline, - DashUnderline, - DotLine, - DashDotLine, - DashDotDotLine, - WaveUnderline, - SpellCheckUnderline, - }; - - void setUnderlineStyle(QTextCharFormat::UnderlineStyle style); - QTextCharFormat::UnderlineStyle underlineStyle() const; - void setToolTip(const QString &tip); - QString toolTip() const; - void setAnchorNames(const QStringList &names); - QStringList anchorNames() const; - void setFontCapitalization(QFont::Capitalization capitalization); - QFont::Capitalization fontCapitalization() const; - void setFontLetterSpacing(qreal spacing); - qreal fontLetterSpacing() const; - void setFontWordSpacing(qreal spacing); - qreal fontWordSpacing() const; - void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault); - void setFontStyleStrategy(QFont::StyleStrategy strategy); - QFont::StyleHint fontStyleHint() const; - QFont::StyleStrategy fontStyleStrategy() const; - void setFontKerning(bool enable); - bool fontKerning() const; - void setFontHintingPreference(QFont::HintingPreference hintingPreference); - QFont::HintingPreference fontHintingPreference() const; - int fontStretch() const; - void setFontStretch(int factor); - void setFontLetterSpacingType(QFont::SpacingType letterSpacingType); - QFont::SpacingType fontLetterSpacingType() const; - - enum FontPropertiesInheritanceBehavior - { - FontPropertiesSpecifiedOnly, - FontPropertiesAll, - }; - - void setFontFamilies(const QStringList &families); - QVariant fontFamilies() const; - void setFontStyleName(const QString &styleName); - QVariant fontStyleName() const; - void setSuperScriptBaseline(qreal baseline); - qreal superScriptBaseline() const; - void setSubScriptBaseline(qreal baseline); - qreal subScriptBaseline() const; - void setBaselineOffset(qreal baseline); - qreal baselineOffset() const; -}; - -class QTextBlockFormat : public QTextFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextBlockFormat(); - bool isValid() const; - Qt::Alignment alignment() const; - void setTopMargin(qreal margin); - qreal topMargin() const; - void setBottomMargin(qreal margin); - qreal bottomMargin() const; - void setLeftMargin(qreal margin); - qreal leftMargin() const; - void setRightMargin(qreal margin); - qreal rightMargin() const; - void setTextIndent(qreal margin); - qreal textIndent() const; - int indent() const; - void setNonBreakableLines(bool b); - bool nonBreakableLines() const; - void setAlignment(Qt::Alignment aalignment); - void setIndent(int aindent); - void setPageBreakPolicy(QTextFormat::PageBreakFlags flags); - QTextFormat::PageBreakFlags pageBreakPolicy() const; - void setTabPositions(const QList &tabs); - QList tabPositions() const; - - enum LineHeightTypes - { - SingleHeight, - ProportionalHeight, - FixedHeight, - MinimumHeight, - LineDistanceHeight, - }; - - void setLineHeight(qreal height, int heightType); - qreal lineHeight() const; - qreal lineHeight(qreal scriptLineHeight, qreal scaling = 1.) const; - int lineHeightType() const; - void setHeadingLevel(int alevel); - int headingLevel() const; - - enum class MarkerType - { - NoMarker, - Unchecked, - Checked, - }; - - void setMarker(QTextBlockFormat::MarkerType marker); - QTextBlockFormat::MarkerType marker() const; -}; - -class QTextListFormat : public QTextFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextListFormat(); - bool isValid() const; - - enum Style - { - ListDisc, - ListCircle, - ListSquare, - ListDecimal, - ListLowerAlpha, - ListUpperAlpha, - ListLowerRoman, - ListUpperRoman, - }; - - QTextListFormat::Style style() const; - int indent() const; - void setStyle(QTextListFormat::Style astyle); - void setIndent(int aindent); - QString numberPrefix() const; - QString numberSuffix() const; - void setNumberPrefix(const QString &np); - void setNumberSuffix(const QString &ns); -%If (Qt_6_6_0 -) - void setStart(int indent); -%End -%If (Qt_6_6_0 -) - int start() const; -%End -}; - -class QTextImageFormat : public QTextCharFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextImageFormat(); - bool isValid() const; - QString name() const; - qreal width() const; - qreal height() const; - int quality() const; - void setName(const QString &aname); - void setWidth(qreal awidth); - void setHeight(qreal aheight); - void setQuality(int quality = 100); -}; - -class QTextFrameFormat : public QTextFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextFrameFormat(); - bool isValid() const; - - enum Position - { - InFlow, - FloatLeft, - FloatRight, - }; - - void setPosition(QTextFrameFormat::Position f); - QTextFrameFormat::Position position() const; - qreal border() const; - qreal margin() const; - qreal padding() const; - void setWidth(const QTextLength &length); - QTextLength width() const; - QTextLength height() const; - void setBorder(qreal aborder); - void setMargin(qreal amargin); - void setPadding(qreal apadding); - void setWidth(qreal awidth); - void setHeight(qreal aheight); - void setHeight(const QTextLength &aheight); - void setPageBreakPolicy(QTextFormat::PageBreakFlags flags); - QTextFormat::PageBreakFlags pageBreakPolicy() const; - - enum BorderStyle - { - BorderStyle_None, - BorderStyle_Dotted, - BorderStyle_Dashed, - BorderStyle_Solid, - BorderStyle_Double, - BorderStyle_DotDash, - BorderStyle_DotDotDash, - BorderStyle_Groove, - BorderStyle_Ridge, - BorderStyle_Inset, - BorderStyle_Outset, - }; - - void setBorderBrush(const QBrush &brush); - QBrush borderBrush() const; - void setBorderStyle(QTextFrameFormat::BorderStyle style); - QTextFrameFormat::BorderStyle borderStyle() const; - qreal topMargin() const; - qreal bottomMargin() const; - qreal leftMargin() const; - qreal rightMargin() const; - void setTopMargin(qreal amargin); - void setBottomMargin(qreal amargin); - void setLeftMargin(qreal amargin); - void setRightMargin(qreal amargin); -}; - -class QTextTableFormat : public QTextFrameFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextTableFormat(); - bool isValid() const; - int columns() const; - void setColumnWidthConstraints(const QList &constraints); - QList columnWidthConstraints() const; - void clearColumnWidthConstraints(); - qreal cellSpacing() const; - void setCellSpacing(qreal spacing); - qreal cellPadding() const; - Qt::Alignment alignment() const; - void setColumns(int acolumns); - void setCellPadding(qreal apadding); - void setAlignment(Qt::Alignment aalignment); - void setHeaderRowCount(int count); - int headerRowCount() const; - void setBorderCollapse(bool borderCollapse); - bool borderCollapse() const; -}; - -class QTextTableCellFormat : public QTextCharFormat -{ -%TypeHeaderCode -#include -%End - -public: - QTextTableCellFormat(); - bool isValid() const; - void setTopPadding(qreal padding); - qreal topPadding() const; - void setBottomPadding(qreal padding); - qreal bottomPadding() const; - void setLeftPadding(qreal padding); - qreal leftPadding() const; - void setRightPadding(qreal padding); - qreal rightPadding() const; - void setPadding(qreal padding); - void setTopBorder(qreal width); - qreal topBorder() const; - void setBottomBorder(qreal width); - qreal bottomBorder() const; - void setLeftBorder(qreal width); - qreal leftBorder() const; - void setRightBorder(qreal width); - qreal rightBorder() const; - void setBorder(qreal width); - void setTopBorderStyle(QTextFrameFormat::BorderStyle style); - QTextFrameFormat::BorderStyle topBorderStyle() const; - void setBottomBorderStyle(QTextFrameFormat::BorderStyle style); - QTextFrameFormat::BorderStyle bottomBorderStyle() const; - void setLeftBorderStyle(QTextFrameFormat::BorderStyle style); - QTextFrameFormat::BorderStyle leftBorderStyle() const; - void setRightBorderStyle(QTextFrameFormat::BorderStyle style); - QTextFrameFormat::BorderStyle rightBorderStyle() const; - void setBorderStyle(QTextFrameFormat::BorderStyle style); - void setTopBorderBrush(const QBrush &brush); - QBrush topBorderBrush() const; - void setBottomBorderBrush(const QBrush &brush); - QBrush bottomBorderBrush() const; - void setLeftBorderBrush(const QBrush &brush); - QBrush leftBorderBrush() const; - void setRightBorderBrush(const QBrush &brush); - QBrush rightBorderBrush() const; - void setBorderBrush(const QBrush &brush); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlayout.sip deleted file mode 100644 index d7d4cc4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlayout.sip +++ /dev/null @@ -1,195 +0,0 @@ -// qtextlayout.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextInlineObject -{ -%TypeHeaderCode -#include -%End - -public: - bool isValid() const; - QRectF rect() const; - qreal width() const; - qreal ascent() const; - qreal descent() const; - qreal height() const; - Qt::LayoutDirection textDirection() const; - void setWidth(qreal w); - void setAscent(qreal a); - void setDescent(qreal d); - int textPosition() const; - int formatIndex() const; - QTextFormat format() const; -}; - -class QTextLayout -{ -%TypeHeaderCode -#include -%End - -public: - QTextLayout(); - QTextLayout(const QString &text); - QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = 0); - QTextLayout(const QTextBlock &b); - ~QTextLayout(); - void setFont(const QFont &f); - QFont font() const; - void setText(const QString &string); - QString text() const; - void setTextOption(const QTextOption &option); - const QTextOption &textOption() const; - void setPreeditArea(int position, const QString &text); - int preeditAreaPosition() const; - QString preeditAreaText() const; - - struct FormatRange - { -%TypeHeaderCode -#include -%End - - int start; - int length; - QTextCharFormat format; - }; - - void setCacheEnabled(bool enable); - bool cacheEnabled() const; - void beginLayout(); - void endLayout(); - QTextLine createLine(); - int lineCount() const; - QTextLine lineAt(int i) const; - QTextLine lineForTextPosition(int pos) const; - - enum CursorMode - { - SkipCharacters, - SkipWords, - }; - - bool isValidCursorPosition(int pos) const; - int nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const; - int previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const; - void draw(QPainter *p, const QPointF &pos, const QList &selections = QList(), const QRectF &clip = QRectF()) const; - void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition) const; - void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition, int width) const; - QPointF position() const; - void setPosition(const QPointF &p); - QRectF boundingRect() const; - qreal minimumWidth() const; - qreal maximumWidth() const; - void clearLayout(); - void setCursorMoveStyle(Qt::CursorMoveStyle style); - Qt::CursorMoveStyle cursorMoveStyle() const; - int leftCursorPosition(int oldPos) const; - int rightCursorPosition(int oldPos) const; -%If (PyQt_RawFont) - QList glyphRuns(int from = -1, int length = -1) const; -%End -%If (Qt_6_5_0 -) - QList glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags flags) const; -%End - void setFormats(const QList &overrides); - QList formats() const; - void clearFormats(); - -private: - QTextLayout(const QTextLayout &); - -public: -%If (Qt_6_5_0 -) - - enum GlyphRunRetrievalFlag - { - RetrieveGlyphIndexes, - RetrieveGlyphPositions, - RetrieveStringIndexes, - RetrieveString, - RetrieveAll, - }; - -%End -%If (Qt_6_5_0 -) - typedef QFlags GlyphRunRetrievalFlags; -%End -}; - -class QTextLine -{ -%TypeHeaderCode -#include -%End - -public: - QTextLine(); - bool isValid() const; - QRectF rect() const; - qreal x() const; - qreal y() const; - qreal width() const; - qreal ascent() const; - qreal descent() const; - qreal height() const; - qreal naturalTextWidth() const; - QRectF naturalTextRect() const; - - enum Edge - { - Leading, - Trailing, - }; - - enum CursorPosition - { - CursorBetweenCharacters, - CursorOnCharacter, - }; - - qreal cursorToX(int *cursorPos /In,Out/, QTextLine::Edge edge = QTextLine::Leading) const; - int xToCursor(qreal x, QTextLine::CursorPosition edge = QTextLine::CursorBetweenCharacters) const; - void setLineWidth(qreal width); - void setNumColumns(int columns); - void setNumColumns(int columns, qreal alignmentWidth); - void setPosition(const QPointF &pos); - int textStart() const; - int textLength() const; - int lineNumber() const; - void draw(QPainter *painter, const QPointF &position) const; - QPointF position() const; - qreal leading() const; - void setLeadingIncluded(bool included); - bool leadingIncluded() const; - qreal horizontalAdvance() const; -%If (PyQt_RawFont) - QList glyphRuns(int from = -1, int length = -1) const; -%End -%If (Qt_6_5_0 -) - QList glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags flags) const; -%End -}; - -bool operator==(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs); -bool operator!=(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlist.sip deleted file mode 100644 index be7eb29..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextlist.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qtextlist.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextList : public QTextBlockGroup -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTextList(QTextDocument *doc); - virtual ~QTextList(); - int count() const /__len__/; - QTextBlock item(int i) const; - int itemNumber(const QTextBlock &) const; - QString itemText(const QTextBlock &) const; - void removeItem(int i); - void remove(const QTextBlock &); - void add(const QTextBlock &block); - QTextListFormat format() const; - void setFormat(const QTextListFormat &aformat); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextobject.sip deleted file mode 100644 index 9d3c59e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextobject.sip +++ /dev/null @@ -1,292 +0,0 @@ -// qtextobject.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextObject : public QObject -{ -%TypeHeaderCode -#include -%End - -protected: - explicit QTextObject(QTextDocument *doc); - virtual ~QTextObject(); - void setFormat(const QTextFormat &format); - -public: - QTextFormat format() const; - int formatIndex() const; - QTextDocument *document() const; - int objectIndex() const; -}; - -class QTextBlockGroup : public QTextObject -{ -%TypeHeaderCode -#include -%End - -protected: - explicit QTextBlockGroup(QTextDocument *doc); - virtual ~QTextBlockGroup(); - virtual void blockInserted(const QTextBlock &block); - virtual void blockRemoved(const QTextBlock &block); - virtual void blockFormatChanged(const QTextBlock &block); - QList blockList() const; -}; - -class QTextFrame : public QTextObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTextFrame(QTextDocument *doc); - virtual ~QTextFrame(); - QTextFrameFormat frameFormat() const; - QTextCursor firstCursorPosition() const; - QTextCursor lastCursorPosition() const; - int firstPosition() const; - int lastPosition() const; - QList childFrames() const; - QTextFrame *parentFrame() const; - - class iterator - { -%TypeHeaderCode -#include -%End - - public: - iterator(); - QTextFrame *parentFrame() const; - QTextFrame *currentFrame() const; - QTextBlock currentBlock() const; - bool atEnd() const; - bool operator==(const QTextFrame::iterator &o) const; - bool operator!=(const QTextFrame::iterator &o) const; - QTextFrame::iterator &operator+=(int); -%MethodCode - if (a0 > 0) - while (a0--) - (*sipCpp)++; - else if (a0 < 0) - while (a0++) - (*sipCpp)--; -%End - - QTextFrame::iterator &operator-=(int); -%MethodCode - if (a0 > 0) - while (a0--) - (*sipCpp)--; - else if (a0 < 0) - while (a0++) - (*sipCpp)++; -%End - }; - - typedef QTextFrame::iterator Iterator; - QTextFrame::iterator begin() const; - QTextFrame::iterator end() const; - void setFrameFormat(const QTextFrameFormat &aformat); -}; - -class QTextBlock /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QTextBlock(); - QTextBlock(const QTextBlock &o); - bool isValid() const; - bool operator==(const QTextBlock &o) const; - bool operator!=(const QTextBlock &o) const; - bool operator<(const QTextBlock &o) const; - int position() const; - int length() const; - bool contains(int position) const; - QTextLayout *layout() const; - QTextBlockFormat blockFormat() const; - int blockFormatIndex() const; - QTextCharFormat charFormat() const; - int charFormatIndex() const; - QString text() const; - const QTextDocument *document() const; - QTextList *textList() const; - - class iterator - { -%TypeHeaderCode -#include -%End - - public: - iterator(); - QTextFragment fragment() const; - bool atEnd() const; - bool operator==(const QTextBlock::iterator &o) const; - bool operator!=(const QTextBlock::iterator &o) const; - QTextBlock::iterator &operator+=(int); -%MethodCode - if (a0 > 0) - while (a0--) - (*sipCpp)++; - else if (a0 < 0) - while (a0++) - (*sipCpp)--; -%End - - QTextBlock::iterator &operator-=(int); -%MethodCode - if (a0 > 0) - while (a0--) - (*sipCpp)--; - else if (a0 < 0) - while (a0++) - (*sipCpp)++; -%End - }; - - typedef QTextBlock::iterator Iterator; - QTextBlock::iterator begin() const; - QTextBlock::iterator end() const; - QTextBlock next() const; - QTextBlock previous() const; - QTextBlockUserData *userData() const; - void setUserData(QTextBlockUserData *data /GetWrapper/); -%MethodCode - // Ownership of the user data is with the document not the text block. - const QTextDocument *td = sipCpp->document(); - - if (td) - { - PyObject *py_td = qtgui_wrap_ancestors(const_cast(td), - sipType_QTextDocument); - - if (!py_td) - { - sipIsErr = 1; - } - else - { - sipTransferTo(a0Wrapper, py_td); - Py_DECREF(py_td); - } - } - - sipCpp->setUserData(a0); -%End - - int userState() const; - void setUserState(int state); - void clearLayout(); - int revision() const; - void setRevision(int rev); - bool isVisible() const; - void setVisible(bool visible); - int blockNumber() const; - int firstLineNumber() const; - void setLineCount(int count); - int lineCount() const; - Qt::LayoutDirection textDirection() const; - QList textFormats() const; -}; - -class QTextFragment -{ -%TypeHeaderCode -#include -%End - -public: - QTextFragment(); - QTextFragment(const QTextFragment &o); - bool isValid() const; - bool operator==(const QTextFragment &o) const; - bool operator!=(const QTextFragment &o) const; - bool operator<(const QTextFragment &o) const; - int position() const; - int length() const; - bool contains(int position) const; - QTextCharFormat charFormat() const; - int charFormatIndex() const; - QString text() const; -%If (PyQt_RawFont) - QList glyphRuns(int from = -1, int length = -1) const; -%End -}; - -class QTextBlockUserData /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QTextBlockUserData(); -}; - -%ModuleHeaderCode -PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td); -%End - -%ModuleCode -// Wrap a QObject and ensure that it's ancestors are all wrapped with the -// correct ownerships. -static PyObject *qtgui_wrap_ancestors_worker(QObject *obj) -{ - if (!obj) - { - Py_INCREF(Py_None); - return Py_None; - } - - PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent()); - - if (!py_parent) - return 0; - - PyObject *py_obj = sipConvertFromType(obj, sipType_QObject, - (py_parent != Py_None ? py_parent : 0)); - - Py_DECREF(py_parent); - return py_obj; -} - -PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td) -{ - PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent()); - - if (!py_parent) - return 0; - - PyObject *py_obj = sipConvertFromType(obj, td, - (py_parent != Py_None ? py_parent : 0)); - - Py_DECREF(py_parent); - - return py_obj; -} -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextoption.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextoption.sip deleted file mode 100644 index d5ed764..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtextoption.sip +++ /dev/null @@ -1,96 +0,0 @@ -// qtextoption.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextOption -{ -%TypeHeaderCode -#include -%End - -public: - QTextOption(); - QTextOption(Qt::Alignment alignment); - ~QTextOption(); - QTextOption(const QTextOption &o); - Qt::Alignment alignment() const; - void setTextDirection(Qt::LayoutDirection aDirection); - Qt::LayoutDirection textDirection() const; - - enum WrapMode - { - NoWrap, - WordWrap, - ManualWrap, - WrapAnywhere, - WrapAtWordBoundaryOrAnywhere, - }; - - void setWrapMode(QTextOption::WrapMode wrap); - QTextOption::WrapMode wrapMode() const; - - enum Flag /BaseType=Flag/ - { - IncludeTrailingSpaces, - ShowTabsAndSpaces, - ShowLineAndParagraphSeparators, - AddSpaceForLineAndParagraphSeparators, - SuppressColors, - ShowDocumentTerminator, - }; - - typedef QFlags Flags; - QTextOption::Flags flags() const; - void setTabArray(const QList &tabStops); - QList tabArray() const; - void setUseDesignMetrics(bool b); - bool useDesignMetrics() const; - void setAlignment(Qt::Alignment aalignment); - void setFlags(QTextOption::Flags flags); - - enum TabType - { - LeftTab, - RightTab, - CenterTab, - DelimiterTab, - }; - - struct Tab - { -%TypeHeaderCode -#include -%End - - Tab(); - Tab(qreal pos, QTextOption::TabType tabType, QChar delim = QChar()); - bool operator==(const QTextOption::Tab &other) const; - bool operator!=(const QTextOption::Tab &other) const; - qreal position; - QTextOption::TabType type; - QChar delimiter; - }; - - void setTabs(const QList &tabStops); - QList tabs() const; - void setTabStopDistance(qreal tabStopDistance); - qreal tabStopDistance() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtexttable.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtexttable.sip deleted file mode 100644 index a343dfb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtexttable.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qtexttable.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextTableCell -{ -%TypeHeaderCode -#include -%End - -public: - QTextTableCell(); - ~QTextTableCell(); - QTextTableCell(const QTextTableCell &o); - QTextCharFormat format() const; - void setFormat(const QTextCharFormat &format); - int row() const; - int column() const; - int rowSpan() const; - int columnSpan() const; - bool isValid() const; - QTextCursor firstCursorPosition() const; - QTextCursor lastCursorPosition() const; - int tableCellFormatIndex() const; - bool operator==(const QTextTableCell &other) const; - bool operator!=(const QTextTableCell &other) const; -}; - -class QTextTable : public QTextFrame -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTextTable(QTextDocument *doc); - virtual ~QTextTable(); - void resize(int rows, int cols); - void insertRows(int pos, int num); - void insertColumns(int pos, int num); - void removeRows(int pos, int num); - void removeColumns(int pos, int num); - void mergeCells(int row, int col, int numRows, int numCols); - void mergeCells(const QTextCursor &cursor); - void splitCell(int row, int col, int numRows, int numCols); - int rows() const; - int columns() const; - QTextTableCell cellAt(int row, int col) const; - QTextTableCell cellAt(int position) const; - QTextTableCell cellAt(const QTextCursor &c) const; - QTextCursor rowStart(const QTextCursor &c) const; - QTextCursor rowEnd(const QTextCursor &c) const; - QTextTableFormat format() const; - void setFormat(const QTextTableFormat &aformat); - void appendRows(int count); - void appendColumns(int count); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtransform.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtransform.sip deleted file mode 100644 index 0309502..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qtransform.sip +++ /dev/null @@ -1,132 +0,0 @@ -// qtransform.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QTransform -{ -%TypeHeaderCode -#include -%End - -%PickleCode - sipRes = Py_BuildValue("ddddddddd", sipCpp->m11(), sipCpp->m12(), sipCpp->m13(), sipCpp->m21(), sipCpp->m22(), sipCpp->m23(), sipCpp->m31(), sipCpp->m32(), sipCpp->m33()); -%End - -public: - enum TransformationType - { - TxNone, - TxTranslate, - TxScale, - TxRotate, - TxShear, - TxProject, - }; - - QTransform(); - QTransform(qreal h11, qreal h12, qreal h13, qreal h21, qreal h22, qreal h23, qreal h31, qreal h32, qreal h33); - QTransform(qreal h11, qreal h12, qreal h13, qreal h21, qreal h22, qreal h23); - QTransform(const QTransform &other); - QTransform::TransformationType type() const; - void setMatrix(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33); - QTransform inverted(bool *invertible = 0) const; - QTransform adjoint() const; - QTransform transposed() const; - QTransform &translate(qreal dx, qreal dy); - QTransform &scale(qreal sx, qreal sy); - QTransform &shear(qreal sh, qreal sv); - QTransform &rotate(qreal angle, Qt::Axis axis = Qt::ZAxis); -%If (Qt_6_5_0 -) - QTransform &rotate(qreal a, Qt::Axis axis, qreal distanceToPlane); -%End - QTransform &rotateRadians(qreal angle, Qt::Axis axis = Qt::ZAxis); -%If (Qt_6_5_0 -) - QTransform &rotateRadians(qreal a, Qt::Axis axis, qreal distanceToPlane); -%End - static bool squareToQuad(const QPolygonF &square, QTransform &result); - static bool quadToSquare(const QPolygonF &quad, QTransform &result); - static bool quadToQuad(const QPolygonF &one, const QPolygonF &two, QTransform &result); - bool operator==(const QTransform &) const; - bool operator!=(const QTransform &) const; - QTransform &operator*=(const QTransform &) /__imatmul__/; - QTransform operator*(const QTransform &o) const /__matmul__/; - void reset(); - void map(int x /Constrained/, int y /Constrained/, int *tx, int *ty) const; - void map(qreal x, qreal y, qreal *tx, qreal *ty) const; - QPoint map(const QPoint &p) const; - QPointF map(const QPointF &p) const; - QLine map(const QLine &l) const; - QLineF map(const QLineF &l) const; - QPolygonF map(const QPolygonF &a) const; - QPolygon map(const QPolygon &a) const; - QRegion map(const QRegion &r) const; - QPainterPath map(const QPainterPath &p) const; - QPolygon mapToPolygon(const QRect &r) const; - QRect mapRect(const QRect &) const; - QRectF mapRect(const QRectF &) const; - bool isAffine() const; - bool isIdentity() const; - bool isInvertible() const; - bool isScaling() const; - bool isRotating() const; - bool isTranslating() const; - qreal determinant() const; - qreal m11() const; - qreal m12() const; - qreal m13() const; - qreal m21() const; - qreal m22() const; - qreal m23() const; - qreal m31() const; - qreal m32() const; - qreal m33() const; - qreal dx() const; - qreal dy() const; - static QTransform fromTranslate(qreal dx, qreal dy); - static QTransform fromScale(qreal dx, qreal dy); - QTransform &operator*=(qreal num); - QTransform &operator/=(qreal div); - QTransform &operator+=(qreal num); - QTransform &operator-=(qreal num); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -QDataStream &operator<<(QDataStream &, const QTransform &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QTransform & /Constrained/) /ReleaseGIL/; -QPoint operator*(const QPoint &p, const QTransform &m); -QPointF operator*(const QPointF &p, const QTransform &m); -QLineF operator*(const QLineF &l, const QTransform &m); -QLine operator*(const QLine &l, const QTransform &m); -QPolygon operator*(const QPolygon &a, const QTransform &m); -QPolygonF operator*(const QPolygonF &a, const QTransform &m); -QRegion operator*(const QRegion &r, const QTransform &m); -QTransform operator*(const QTransform &a, qreal n); -QTransform operator/(const QTransform &a, qreal n); -QTransform operator+(const QTransform &a, qreal n); -QTransform operator-(const QTransform &a, qreal n); -bool qFuzzyCompare(const QTransform &t1, const QTransform &t2); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundogroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundogroup.sip deleted file mode 100644 index cbf6c32..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundogroup.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qundogroup.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUndoGroup : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QUndoGroup(QObject *parent /TransferThis/ = 0); - virtual ~QUndoGroup(); - void addStack(QUndoStack *stack); - void removeStack(QUndoStack *stack); - QList stacks() const; - QUndoStack *activeStack() const; - QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; - QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; - bool canUndo() const; - bool canRedo() const; - QString undoText() const; - QString redoText() const; - bool isClean() const; - -public slots: - void redo(); - void setActiveStack(QUndoStack *stack); - void undo(); - -signals: - void activeStackChanged(QUndoStack *stack); - void canRedoChanged(bool canRedo); - void canUndoChanged(bool canUndo); - void cleanChanged(bool clean); - void indexChanged(int idx); - void redoTextChanged(const QString &redoText); - void undoTextChanged(const QString &undoText); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundostack.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundostack.sip deleted file mode 100644 index 03773f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qundostack.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qundostack.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUndoCommand /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QUndoCommand(QUndoCommand *parent /TransferThis/ = 0); - QUndoCommand(const QString &text, QUndoCommand *parent /TransferThis/ = 0); - virtual ~QUndoCommand(); - virtual int id() const; - virtual bool mergeWith(const QUndoCommand *other); - virtual void redo(); - void setText(const QString &text); - QString text() const; - virtual void undo(); - int childCount() const; - const QUndoCommand *child(int index) const; - QString actionText() const; - bool isObsolete() const; - void setObsolete(bool obsolete); - -private: - QUndoCommand(const QUndoCommand &); -}; - -class QUndoStack : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QUndoStack(QObject *parent /TransferThis/ = 0); - virtual ~QUndoStack(); - void clear(); - void push(QUndoCommand *cmd /Transfer/); - bool canUndo() const; - bool canRedo() const; - QString undoText() const; - QString redoText() const; - int count() const /__len__/; - int index() const; - QString text(int idx) const; - QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; - QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; - bool isActive() const; - bool isClean() const; - int cleanIndex() const; - void beginMacro(const QString &text); - void endMacro(); - -public slots: - void redo(); - void setActive(bool active = true); - void setClean(); - void setIndex(int idx); - void undo(); - void resetClean(); - -signals: - void canRedoChanged(bool canRedo); - void canUndoChanged(bool canUndo); - void cleanChanged(bool clean); - void indexChanged(int idx); - void redoTextChanged(const QString &redoText); - void undoTextChanged(const QString &undoText); - -public: - void setUndoLimit(int limit); - int undoLimit() const; - const QUndoCommand *command(int index) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qutimimeconverter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qutimimeconverter.sip deleted file mode 100644 index 63e2cd7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qutimimeconverter.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qutimimeconverter.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) -%If (macOS) - -class QUtiMimeConverter -{ -%TypeHeaderCode -#include -%End - -public: - QUtiMimeConverter(); - virtual ~QUtiMimeConverter(); - bool canConvert(const QString &mime, const QString &uti) const; - virtual QList convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const = 0; - virtual QString utiForMime(const QString &mime) const = 0; - virtual QString mimeForUti(const QString &uti) const = 0; - virtual QVariant convertToMime(const QString &mime, const QList &data, const QString &uti) const = 0; - virtual int count(const QMimeData *mimeData) const; - -private: - QUtiMimeConverter(const QUtiMimeConverter &); -}; - -%End -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvalidator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvalidator.sip deleted file mode 100644 index b427b7c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvalidator.sip +++ /dev/null @@ -1,113 +0,0 @@ -// qvalidator.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QValidator : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QValidator(QObject *parent /TransferThis/ = 0); - virtual ~QValidator(); - - enum State - { - Invalid, - Intermediate, - Acceptable, - }; - - virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const = 0; - virtual void fixup(QString & /In,Out/) const; - void setLocale(const QLocale &locale); - QLocale locale() const; - -signals: - void changed(); -}; - -class QIntValidator : public QValidator -{ -%TypeHeaderCode -#include -%End - -public: - explicit QIntValidator(QObject *parent /TransferThis/ = 0); - QIntValidator(int bottom, int top, QObject *parent /TransferThis/ = 0); - virtual ~QIntValidator(); - virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const; - virtual void fixup(QString &input /In,Out/) const; - void setBottom(int); - void setTop(int); - void setRange(int bottom, int top); - int bottom() const; - int top() const; -}; - -class QDoubleValidator : public QValidator -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDoubleValidator(QObject *parent /TransferThis/ = 0); - QDoubleValidator(double bottom, double top, int decimals, QObject *parent /TransferThis/ = 0); - virtual ~QDoubleValidator(); - virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const; - void setRange(double bottom, double top, int decimals = 0); - void setBottom(double); - void setTop(double); - void setDecimals(int); - double bottom() const; - double top() const; - int decimals() const; - - enum Notation - { - StandardNotation, - ScientificNotation, - }; - - void setNotation(QDoubleValidator::Notation); - QDoubleValidator::Notation notation() const; -%If (Qt_6_3_0 -) - virtual void fixup(QString &input) const; -%End -}; - -class QRegularExpressionValidator : public QValidator -{ -%TypeHeaderCode -#include -%End - -public: - explicit QRegularExpressionValidator(QObject *parent /TransferThis/ = 0); - QRegularExpressionValidator(const QRegularExpression &re, QObject *parent /TransferThis/ = 0); - virtual ~QRegularExpressionValidator(); - virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; - QRegularExpression regularExpression() const; - void setRegularExpression(const QRegularExpression &re); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvectornd.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvectornd.sip deleted file mode 100644 index 5461116..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qvectornd.sip +++ /dev/null @@ -1,259 +0,0 @@ -// qvectornd.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QVector2D -{ -%TypeHeaderCode -#include -%End - -public: - QVector2D(); - QVector2D(float xpos, float ypos); - explicit QVector2D(QPoint point); - explicit QVector2D(QPointF point); - explicit QVector2D(QVector3D vector); - explicit QVector2D(QVector4D vector); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *x = PyFloat_FromDouble(sipCpp->x()); - PyObject *y = PyFloat_FromDouble(sipCpp->y()); - - if (x && y) - sipRes = PyUnicode_FromFormat("PyQt6.QtGui.QVector2D(%R, %R)", - x, y); - - Py_XDECREF(x); - Py_XDECREF(y); -%End - - bool isNull() const; - float x() const; - float y() const; - void setX(float x); - void setY(float y); - float operator[](int i) const; - float length() const; - float lengthSquared() const; - QVector2D normalized() const; - void normalize(); - float distanceToPoint(QVector2D point) const; - float distanceToLine(QVector2D point, QVector2D direction) const; - QVector2D &operator+=(QVector2D vector); - QVector2D &operator-=(QVector2D vector); - QVector2D &operator*=(float factor); - QVector2D &operator*=(QVector2D vector); - QVector2D &operator/=(float divisor); - QVector2D &operator/=(QVector2D vector); - static float dotProduct(QVector2D v1, QVector2D v2); - QVector3D toVector3D() const; - QVector4D toVector4D() const; - QPoint toPoint() const; - QPointF toPointF() const; -}; - -class QVector3D -{ -%TypeHeaderCode -#include -%End - -public: - QVector3D(); - QVector3D(float xpos, float ypos, float zpos); - explicit QVector3D(QPoint point); - explicit QVector3D(QPointF point); - QVector3D(QVector2D vector, float zpos); -%If (Qt_6_1_0 -) - explicit QVector3D(QVector2D vector); -%End -%If (- Qt_6_1_0) - QVector3D(QVector2D vector); -%End - explicit QVector3D(QVector4D vector); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *x = PyFloat_FromDouble(sipCpp->x()); - PyObject *y = PyFloat_FromDouble(sipCpp->y()); - PyObject *z = PyFloat_FromDouble(sipCpp->z()); - - if (x && y && z) - sipRes = PyUnicode_FromFormat( - "PyQt6.QtGui.QVector3D(%R, %R, %R)", x, y, z); - - Py_XDECREF(x); - Py_XDECREF(y); - Py_XDECREF(z); -%End - - bool isNull() const; - float x() const; - float y() const; - float z() const; - void setX(float x); - void setY(float y); - void setZ(float z); - float operator[](int i) const; - float length() const; - float lengthSquared() const; - QVector3D normalized() const; - void normalize(); - QVector3D &operator+=(QVector3D vector); - QVector3D &operator-=(QVector3D vector); - QVector3D &operator*=(float factor); - QVector3D &operator*=(QVector3D vector); - QVector3D &operator/=(float divisor); - QVector3D &operator/=(QVector3D vector); - static float dotProduct(QVector3D v1, QVector3D v2); - static QVector3D crossProduct(QVector3D v1, QVector3D v2); - static QVector3D normal(QVector3D v1, QVector3D v2); - static QVector3D normal(QVector3D v1, QVector3D v2, QVector3D v3); - QVector3D project(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const; - QVector3D unproject(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const; - float distanceToPoint(QVector3D point) const; - float distanceToPlane(QVector3D plane, QVector3D normal) const; - float distanceToPlane(QVector3D plane1, QVector3D plane2, QVector3D plane3) const; - float distanceToLine(QVector3D point, QVector3D direction) const; - QVector2D toVector2D() const; - QVector4D toVector4D() const; - QPoint toPoint() const; - QPointF toPointF() const; -}; - -class QVector4D -{ -%TypeHeaderCode -#include -%End - -public: - QVector4D(); - QVector4D(float xpos, float ypos, float zpos, float wpos); - explicit QVector4D(QPoint point); - explicit QVector4D(QPointF point); -%If (Qt_6_1_0 -) - explicit QVector4D(QVector2D vector); -%End -%If (- Qt_6_1_0) - QVector4D(QVector2D vector); -%End - QVector4D(QVector2D vector, float zpos, float wpos); -%If (Qt_6_1_0 -) - explicit QVector4D(QVector3D vector); -%End -%If (- Qt_6_1_0) - QVector4D(QVector3D vector); -%End - QVector4D(QVector3D vector, float wpos); - SIP_PYOBJECT __repr__() const /TypeHint="str"/; -%MethodCode - PyObject *x = PyFloat_FromDouble(sipCpp->x()); - PyObject *y = PyFloat_FromDouble(sipCpp->y()); - PyObject *z = PyFloat_FromDouble(sipCpp->z()); - PyObject *w = PyFloat_FromDouble(sipCpp->w()); - - if (x && y && z && w) - sipRes = PyUnicode_FromFormat( - "PyQt6.QtGui.QVector4D(%R, %R, %R, %R)", x, y, z, w); - - Py_XDECREF(x); - Py_XDECREF(y); - Py_XDECREF(z); - Py_XDECREF(w); -%End - - bool isNull() const; - float x() const; - float y() const; - float z() const; - float w() const; - void setX(float x); - void setY(float y); - void setZ(float z); - void setW(float w); - float operator[](int i) const; - float length() const; - float lengthSquared() const; - QVector4D normalized() const; - void normalize(); - QVector4D &operator+=(QVector4D vector); - QVector4D &operator-=(QVector4D vector); - QVector4D &operator*=(float factor); - QVector4D &operator*=(QVector4D vector); - QVector4D &operator/=(float divisor); - QVector4D &operator/=(QVector4D vector); - static float dotProduct(QVector4D v1, QVector4D v2); - QVector2D toVector2D() const; - QVector2D toVector2DAffine() const; - QVector3D toVector3D() const; - QVector3D toVector3DAffine() const; - QPoint toPoint() const; - QPointF toPointF() const; -}; - -bool operator==(QVector4D v1, QVector4D v2); -bool operator==(QVector3D v1, QVector3D v2); -bool operator==(QVector2D v1, QVector2D v2); -bool operator!=(QVector4D v1, QVector4D v2); -bool operator!=(QVector3D v1, QVector3D v2); -bool operator!=(QVector2D v1, QVector2D v2); -QVector4D operator+(QVector4D v1, QVector4D v2); -QVector3D operator+(QVector3D v1, QVector3D v2); -QVector2D operator+(QVector2D v1, QVector2D v2); -QVector4D operator-(QVector4D vector); -QVector4D operator-(QVector4D v1, QVector4D v2); -QVector3D operator-(QVector3D vector); -QVector3D operator-(QVector3D v1, QVector3D v2); -QVector2D operator-(QVector2D vector); -QVector2D operator-(QVector2D v1, QVector2D v2); -QVector4D operator*(const QMatrix4x4 &matrix, const QVector4D &vector); -QVector4D operator*(const QVector4D &vector, const QMatrix4x4 &matrix); -QVector4D operator*(QVector4D v1, QVector4D v2); -QVector4D operator*(QVector4D vector, float factor); -QVector4D operator*(float factor, QVector4D vector); -QVector3D operator*(const QMatrix4x4 &matrix, const QVector3D &vector); -QVector3D operator*(const QVector3D &vector, const QMatrix4x4 &matrix); -QVector3D operator*(QVector3D v1, QVector3D v2); -QVector3D operator*(QVector3D vector, float factor); -QVector3D operator*(float factor, QVector3D vector); -QVector2D operator*(QVector2D v1, QVector2D v2); -QVector2D operator*(QVector2D vector, float factor); -QVector2D operator*(float factor, QVector2D vector); -QVector4D operator/(QVector4D vector, QVector4D divisor); -QVector4D operator/(QVector4D vector, float divisor); -QVector3D operator/(QVector3D vector, QVector3D divisor); -QVector3D operator/(QVector3D vector, float divisor); -QVector2D operator/(QVector2D vector, QVector2D divisor); -QVector2D operator/(QVector2D vector, float divisor); -bool qFuzzyCompare(QVector4D v1, QVector4D v2); -bool qFuzzyCompare(QVector3D v1, QVector3D v2); -bool qFuzzyCompare(QVector2D v1, QVector2D v2); -QDataStream &operator<<(QDataStream &, QVector4D) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &, QVector3D) /ReleaseGIL/; -QDataStream &operator<<(QDataStream &, QVector2D) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QVector4D & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QVector3D & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QVector2D & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindow.sip deleted file mode 100644 index b21738d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindow.sip +++ /dev/null @@ -1,216 +0,0 @@ -// qwindow.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QWindow : public QObject, public QSurface -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWindow(QScreen *screen = 0); - explicit QWindow(QWindow *parent /TransferThis/); - virtual ~QWindow(); - void setSurfaceType(QSurface::SurfaceType surfaceType); - virtual QSurface::SurfaceType surfaceType() const; - bool isVisible() const; - void create(); - WId winId() const; - QWindow *parent(QWindow::AncestorMode mode = QWindow::ExcludeTransients) const; - void setParent(QWindow *parent /Transfer/); - bool isTopLevel() const; - bool isModal() const; - Qt::WindowModality modality() const; - void setModality(Qt::WindowModality modality); - void setFormat(const QSurfaceFormat &format); - virtual QSurfaceFormat format() const; - QSurfaceFormat requestedFormat() const; - void setFlags(Qt::WindowFlags flags); - Qt::WindowFlags flags() const; - Qt::WindowType type() const; - QString title() const; - void setOpacity(qreal level); - -public slots: - void requestActivate(); - -public: - bool isActive() const; - void reportContentOrientationChange(Qt::ScreenOrientation orientation); - Qt::ScreenOrientation contentOrientation() const; - qreal devicePixelRatio() const; - Qt::WindowState windowState() const; - void setWindowState(Qt::WindowState state); - void setTransientParent(QWindow *parent); - QWindow *transientParent() const; - - enum AncestorMode - { - ExcludeTransients, - IncludeTransients, - }; - - bool isAncestorOf(const QWindow *child, QWindow::AncestorMode mode = QWindow::IncludeTransients) const; - bool isExposed() const; - int minimumWidth() const; - int minimumHeight() const; - int maximumWidth() const; - int maximumHeight() const; - QSize minimumSize() const; - QSize maximumSize() const; - QSize baseSize() const; - QSize sizeIncrement() const; - void setMinimumSize(const QSize &size); - void setMaximumSize(const QSize &size); - void setBaseSize(const QSize &size); - void setSizeIncrement(const QSize &size); - void setGeometry(int posx, int posy, int w, int h); - void setGeometry(const QRect &rect); - QRect geometry() const; - QMargins frameMargins() const; - QRect frameGeometry() const; - QPoint framePosition() const; - void setFramePosition(const QPoint &point); - int width() const; - int height() const; - int x() const; - int y() const; - virtual QSize size() const; - QPoint position() const; - void setPosition(const QPoint &pt); - void setPosition(int posx, int posy); - void resize(const QSize &newSize); - void resize(int w, int h); - void setFilePath(const QString &filePath); - QString filePath() const; - void setIcon(const QIcon &icon); - QIcon icon() const; - void destroy(); - bool setKeyboardGrabEnabled(bool grab); - bool setMouseGrabEnabled(bool grab); - QScreen *screen() const; - void setScreen(QScreen *screen); - virtual QObject *focusObject() const; - QPoint mapToGlobal(const QPoint &pos) const; - QPointF mapToGlobal(const QPointF &pos) const; - QPoint mapFromGlobal(const QPoint &pos) const; - QPointF mapFromGlobal(const QPointF &pos) const; - QCursor cursor() const; - void setCursor(const QCursor &); - void unsetCursor(); - -public slots: - void setVisible(bool visible); - void show() /ReleaseGIL/; - void hide(); - void showMinimized() /ReleaseGIL/; - void showMaximized() /ReleaseGIL/; - void showFullScreen() /ReleaseGIL/; - void showNormal() /ReleaseGIL/; - bool close(); - void raise(); - void lower(); - void setTitle(const QString &); - void setX(int arg); - void setY(int arg); - void setWidth(int arg); - void setHeight(int arg); - void setMinimumWidth(int w); - void setMinimumHeight(int h); - void setMaximumWidth(int w); - void setMaximumHeight(int h); - void alert(int msec); - void requestUpdate(); - -signals: - void screenChanged(QScreen *screen); - void modalityChanged(Qt::WindowModality modality); - void windowStateChanged(Qt::WindowState windowState); - void xChanged(int arg); - void yChanged(int arg); - void widthChanged(int arg); - void heightChanged(int arg); - void minimumWidthChanged(int arg); - void minimumHeightChanged(int arg); - void maximumWidthChanged(int arg); - void maximumHeightChanged(int arg); - void visibleChanged(bool arg); - void contentOrientationChanged(Qt::ScreenOrientation orientation); - void focusObjectChanged(QObject *object); - void windowTitleChanged(const QString &title); - -protected: - virtual void exposeEvent(QExposeEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void moveEvent(QMoveEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual void showEvent(QShowEvent *); - virtual void hideEvent(QHideEvent *); - virtual bool event(QEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void touchEvent(QTouchEvent *); - virtual void tabletEvent(QTabletEvent *); - -public: - enum Visibility - { - Hidden, - AutomaticVisibility, - Windowed, - Minimized, - Maximized, - FullScreen, - }; - - QWindow::Visibility visibility() const; - void setVisibility(QWindow::Visibility v); - qreal opacity() const; - void setMask(const QRegion ®ion); - QRegion mask() const; - static QWindow *fromWinId(WId id); - -signals: - void visibilityChanged(QWindow::Visibility visibility); - void activeChanged(); - void opacityChanged(qreal opacity); - -public: - void setFlag(Qt::WindowType, bool on = true); - Qt::WindowStates windowStates() const; - void setWindowStates(Qt::WindowStates states); - -public slots: - bool startSystemResize(Qt::Edges edges); - bool startSystemMove(); - -protected: - virtual void paintEvent(QPaintEvent *); - virtual void closeEvent(QCloseEvent *); - virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result /Out/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindowdefs.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindowdefs.sip deleted file mode 100644 index b8d0230..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtGui/qwindowdefs.sip +++ /dev/null @@ -1,24 +0,0 @@ -// qwindowdefs.sip generated by MetaSIP -// -// This file is part of the QtGui Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -typedef QList QWindowList; -typedef quintptr WId; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelp.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelp.toml deleted file mode 100644 index 4b51662..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelp.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtHelp. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelpmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelpmod.sip deleted file mode 100644 index 12494cf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/QtHelpmod.sip +++ /dev/null @@ -1,61 +0,0 @@ -// QtHelpmod.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtHelp, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qcompressedhelpinfo.sip -%Include qhelpcontentwidget.sip -%Include qhelpengine.sip -%Include qhelpenginecore.sip -%Include qhelpfilterdata.sip -%Include qhelpfilterengine.sip -%Include qhelpfiltersettingswidget.sip -%Include qhelpindexwidget.sip -%Include qhelplink.sip -%Include qhelpsearchengine.sip -%Include qhelpsearchquerywidget.sip -%Include qhelpsearchresultwidget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qcompressedhelpinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qcompressedhelpinfo.sip deleted file mode 100644 index 813289a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qcompressedhelpinfo.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qcompressedhelpinfo.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCompressedHelpInfo -{ -%TypeHeaderCode -#include -%End - -public: - QCompressedHelpInfo(); - QCompressedHelpInfo(const QCompressedHelpInfo &other); - ~QCompressedHelpInfo(); - void swap(QCompressedHelpInfo &other); - QString namespaceName() const; - QString component() const; - QVersionNumber version() const; - static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName); - bool isNull() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpcontentwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpcontentwidget.sip deleted file mode 100644 index 9b58427..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpcontentwidget.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qhelpcontentwidget.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpContentItem /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - ~QHelpContentItem(); - QHelpContentItem *child(int row) const; - int childCount() const; - QString title() const; - QUrl url() const; - int row() const; - QHelpContentItem *parent() const; - int childPosition(QHelpContentItem *child) const; -}; - -class QHelpContentModel : public QAbstractItemModel /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QHelpContentModel(); - void createContents(const QString &customFilterName); - QHelpContentItem *contentItemAt(const QModelIndex &index) const; - virtual QVariant data(const QModelIndex &index, int role) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex parent(const QModelIndex &index) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - bool isCreatingContents() const; - -signals: - void contentsCreationStarted(); - void contentsCreated(); -}; - -class QHelpContentWidget : public QTreeView -{ -%TypeHeaderCode -#include -%End - -public: - QModelIndex indexOf(const QUrl &link); - -signals: - void linkActivated(const QUrl &link); - -private: - QHelpContentWidget(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpengine.sip deleted file mode 100644 index 7368507..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpengine.sip +++ /dev/null @@ -1,37 +0,0 @@ -// qhelpengine.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpEngine : public QHelpEngineCore -{ -%TypeHeaderCode -#include -%End - -public: - QHelpEngine(const QString &collectionFile, QObject *parent /TransferThis/ = 0); - virtual ~QHelpEngine(); - QHelpContentModel *contentModel() const; - QHelpIndexModel *indexModel() const; - QHelpContentWidget *contentWidget(); - QHelpIndexWidget *indexWidget(); - QHelpSearchEngine *searchEngine(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpenginecore.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpenginecore.sip deleted file mode 100644 index 4de389b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpenginecore.sip +++ /dev/null @@ -1,105 +0,0 @@ -// qhelpenginecore.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpEngineCore : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QHelpContentModel, &sipType_QHelpContentModel, -1, 1}, - {sipName_QHelpContentWidget, &sipType_QHelpContentWidget, -1, 2}, - {sipName_QHelpEngineCore, &sipType_QHelpEngineCore, 10, 3}, - {sipName_QHelpFilterEngine, &sipType_QHelpFilterEngine, -1, 4}, - {sipName_QHelpFilterSettingsWidget, &sipType_QHelpFilterSettingsWidget, -1, 5}, - {sipName_QHelpIndexModel, &sipType_QHelpIndexModel, -1, 6}, - {sipName_QHelpIndexWidget, &sipType_QHelpIndexWidget, -1, 7}, - {sipName_QHelpSearchEngine, &sipType_QHelpSearchEngine, -1, 8}, - {sipName_QHelpSearchQueryWidget, &sipType_QHelpSearchQueryWidget, -1, 9}, - {sipName_QHelpSearchResultWidget, &sipType_QHelpSearchResultWidget, -1, -1}, - {sipName_QHelpEngine, &sipType_QHelpEngine, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QHelpEngineCore(const QString &collectionFile, QObject *parent /TransferThis/ = 0); - virtual ~QHelpEngineCore(); - bool setupData(); - QString collectionFile() const; - void setCollectionFile(const QString &fileName); - bool copyCollectionFile(const QString &fileName); - static QString namespaceName(const QString &documentationFileName); - bool registerDocumentation(const QString &documentationFileName); - bool unregisterDocumentation(const QString &namespaceName); - QString documentationFileName(const QString &namespaceName); - QStringList registeredDocumentations() const; - QUrl findFile(const QUrl &url) const; - QByteArray fileData(const QUrl &url) const; - bool removeCustomValue(const QString &key); - QVariant customValue(const QString &key, const QVariant &defaultValue = QVariant()) const; - bool setCustomValue(const QString &key, const QVariant &value); - static QVariant metaData(const QString &documentationFileName, const QString &name); - QString error() const; - bool autoSaveFilter() const; - void setAutoSaveFilter(bool save); - -signals: - void setupStarted(); - void setupFinished(); - void warning(const QString &msg); - -public: - QHelpFilterEngine *filterEngine() const; - QList files(const QString namespaceName, const QString &filterName, const QString &extensionFilter = QString()); - void setUsesFilterEngine(bool uses); - bool usesFilterEngine() const; - QList documentsForIdentifier(const QString &id) const; - QList documentsForIdentifier(const QString &id, const QString &filterName) const; - QList documentsForKeyword(const QString &keyword) const; - QList documentsForKeyword(const QString &keyword, const QString &filterName) const; - bool isReadOnly() const; - void setReadOnly(bool enable); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterdata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterdata.sip deleted file mode 100644 index fd726ae..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterdata.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qhelpfilterdata.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpFilterData -{ -%TypeHeaderCode -#include -%End - -public: - QHelpFilterData(); - QHelpFilterData(const QHelpFilterData &other); - ~QHelpFilterData(); - bool operator==(const QHelpFilterData &other) const; - void swap(QHelpFilterData &other); - void setComponents(const QStringList &components); - void setVersions(const QList &versions); - QStringList components() const; - QList versions() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterengine.sip deleted file mode 100644 index 850a43e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfilterengine.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qhelpfilterengine.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpFilterEngine : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QMap namespaceToComponent() const; - QMap namespaceToVersion() const; - QStringList filters() const; - QString activeFilter() const; - bool setActiveFilter(const QString &filterName); - QStringList availableComponents() const; - QHelpFilterData filterData(const QString &filterName) const; - bool setFilterData(const QString &filterName, const QHelpFilterData &filterData); - bool removeFilter(const QString &filterName); - QStringList namespacesForFilter(const QString &filterName) const; - -signals: - void filterActivated(const QString &newFilter); - -protected: - virtual ~QHelpFilterEngine(); - -public: - QList availableVersions() const; - QStringList indices() const; - QStringList indices(const QString &filterName) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfiltersettingswidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfiltersettingswidget.sip deleted file mode 100644 index 0ff4271..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpfiltersettingswidget.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qhelpfiltersettingswidget.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpFilterSettingsWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QHelpFilterSettingsWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QHelpFilterSettingsWidget(); - void setAvailableComponents(const QStringList &components); - void setAvailableVersions(const QList &versions); - void readSettings(const QHelpFilterEngine *filterEngine); - bool applySettings(QHelpFilterEngine *filterEngine) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpindexwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpindexwidget.sip deleted file mode 100644 index eba0605..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpindexwidget.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qhelpindexwidget.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpIndexModel : public QStringListModel /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QHelpEngineCore *helpEngine() const; - void createIndex(const QString &customFilterName); - QModelIndex filter(const QString &filter, const QString &wildcard = QString()); - bool isCreatingIndex() const; - -signals: - void indexCreationStarted(); - void indexCreated(); - -private: - virtual ~QHelpIndexModel(); -}; - -class QHelpIndexWidget : public QListView -{ -%TypeHeaderCode -#include -%End - -public slots: - void filterIndices(const QString &filter, const QString &wildcard = QString()); - void activateCurrentItem(); - -signals: - void documentActivated(const QHelpLink &document, const QString &keyword); - void documentsActivated(const QList &documents, const QString &keyword); - -private: - QHelpIndexWidget(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelplink.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelplink.sip deleted file mode 100644 index 537d69c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelplink.sip +++ /dev/null @@ -1,31 +0,0 @@ -// qhelplink.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -struct QHelpLink -{ -%TypeHeaderCode -#include -%End - - QUrl url; - QString title; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchengine.sip deleted file mode 100644 index 2c3136a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchengine.sip +++ /dev/null @@ -1,90 +0,0 @@ -// qhelpsearchengine.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpSearchQuery -{ -%TypeHeaderCode -#include -%End - -public: - enum FieldName - { - DEFAULT, - FUZZY, - WITHOUT, - PHRASE, - ALL, - ATLEAST, - }; - - QHelpSearchQuery(); - QHelpSearchQuery(QHelpSearchQuery::FieldName field, const QStringList &wordList); -}; - -class QHelpSearchEngine : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent /TransferThis/ = 0); - virtual ~QHelpSearchEngine(); - QHelpSearchQueryWidget *queryWidget(); - QHelpSearchResultWidget *resultWidget(); - -public slots: - void reindexDocumentation(); - void cancelIndexing(); - void cancelSearching(); - -signals: - void indexingStarted(); - void indexingFinished(); - void searchingStarted(); - void searchingFinished(int hits); - -public: - int searchResultCount() const; - QList searchResults(int start, int end) const; - QString searchInput() const; - -public slots: - void search(const QString &searchInput); -}; - -class QHelpSearchResult -{ -%TypeHeaderCode -#include -%End - -public: - QHelpSearchResult(); - QHelpSearchResult(const QHelpSearchResult &other); - QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet); - ~QHelpSearchResult(); - QString title() const; - QUrl url() const; - QString snippet() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchquerywidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchquerywidget.sip deleted file mode 100644 index ef770b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchquerywidget.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qhelpsearchquerywidget.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpSearchQueryWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QHelpSearchQueryWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QHelpSearchQueryWidget(); - void expandExtendedSearch(); - void collapseExtendedSearch(); - -signals: - void search(); - -private: - virtual void focusInEvent(QFocusEvent *focusEvent); - virtual void changeEvent(QEvent *event); - -public: - bool isCompactMode() const; - void setCompactMode(bool on); - QString searchInput() const; - void setSearchInput(const QString &searchInput); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchresultwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchresultwidget.sip deleted file mode 100644 index 3c1cd74..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtHelp/qhelpsearchresultwidget.sip +++ /dev/null @@ -1,35 +0,0 @@ -// qhelpsearchresultwidget.sip generated by MetaSIP -// -// This file is part of the QtHelp Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHelpSearchResultWidget : public QWidget /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QHelpSearchResultWidget(); - QUrl linkAt(const QPoint &point); - -signals: - void requestShowLink(const QUrl &url); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimedia.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimedia.toml deleted file mode 100644 index aa0e3f1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimedia.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtMultimedia. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimediamod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimediamod.sip deleted file mode 100644 index 5d42ee7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/QtMultimediamod.sip +++ /dev/null @@ -1,77 +0,0 @@ -// QtMultimediamod.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtMultimedia, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtNetwork/QtNetworkmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qtvideo.sip -%Include qaudio.sip -%Include qaudiobuffer.sip -%Include qaudiodecoder.sip -%Include qaudiodevice.sip -%Include qaudioformat.sip -%Include qaudioinput.sip -%Include qaudiooutput.sip -%Include qaudiosink.sip -%Include qaudiosource.sip -%Include qcamera.sip -%Include qcameradevice.sip -%Include qcapturablewindow.sip -%Include qimagecapture.sip -%Include qmediacapturesession.sip -%Include qmediadevices.sip -%Include qmediaformat.sip -%Include qmediametadata.sip -%Include qmediaplayer.sip -%Include qmediarecorder.sip -%Include qmediatimerange.sip -%Include qscreencapture.sip -%Include qsoundeffect.sip -%Include qvideoframe.sip -%Include qvideoframeformat.sip -%Include qvideosink.sip -%Include qwindowcapture.sip -%Include qpymultimedia_qlist.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudio.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudio.sip deleted file mode 100644 index c800a92..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudio.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qaudio.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) -// Deprecated (and aliased to QtAudio) in Qt v6.7 but retained for compatibility. -// We also ignore any methods that refer to QtAudio. - -namespace QAudio -{ -%TypeHeaderCode -#include -%End - - enum Error - { - NoError, - OpenError, - IOError, - UnderrunError, - FatalError, - }; - - enum State - { - ActiveState, - SuspendedState, - StoppedState, - IdleState, - }; - - enum VolumeScale - { - LinearVolumeScale, - CubicVolumeScale, - LogarithmicVolumeScale, - DecibelVolumeScale, - }; - - float convertVolume(float volume, QAudio::VolumeScale from, QAudio::VolumeScale to); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiobuffer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiobuffer.sip deleted file mode 100644 index be4fa3b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiobuffer.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qaudiobuffer.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioBuffer -{ -%TypeHeaderCode -#include -%End - -public: - QAudioBuffer(); - QAudioBuffer(const QByteArray &data, const QAudioFormat &format, qint64 startTime = -1); - QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime = -1); - QAudioBuffer(const QAudioBuffer &other); - ~QAudioBuffer(); - bool isValid() const; - QAudioFormat format() const; - qsizetype frameCount() const; - qsizetype sampleCount() const; - qsizetype byteCount() const; - qint64 duration() const; - qint64 startTime() const; - void swap(QAudioBuffer &other /Constrained/); - void detach(); - SIP_PYOBJECT constData() const /TypeHint="PyQt6.sip.voidptr"/; -%MethodCode - sipRes = sipConvertFromConstVoidPtrAndSize(sipCpp->constData(), - sipCpp->byteCount()); -%End - - SIP_PYOBJECT data() /TypeHint="PyQt6.sip.voidptr"/; -%MethodCode - sipRes = sipConvertFromVoidPtrAndSize(sipCpp->data(), - sipCpp->byteCount()); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodecoder.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodecoder.sip deleted file mode 100644 index dfc6466..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodecoder.sip +++ /dev/null @@ -1,74 +0,0 @@ -// qaudiodecoder.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioDecoder : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - ResourceError, - FormatError, - AccessDeniedError, - NotSupportedError, - }; - - explicit QAudioDecoder(QObject *parent /TransferThis/ = 0); - virtual ~QAudioDecoder(); - bool isSupported() const; - bool isDecoding() const; - QUrl source() const; - void setSource(const QUrl &fileName); - QIODevice *sourceDevice() const; - void setSourceDevice(QIODevice *device); - QAudioDecoder::Error error() const; - QString errorString() const; - QAudioBuffer read() const /ReleaseGIL/; - bool bufferAvailable() const; - qint64 position() const; - qint64 duration() const; - QAudioFormat audioFormat() const; - void setAudioFormat(const QAudioFormat &format); - -public slots: - void start(); - void stop(); - -signals: - void bufferAvailableChanged(bool); - void bufferReady(); - void finished(); - void isDecodingChanged(bool); - void error(QAudioDecoder::Error error); - void sourceChanged(); - void positionChanged(qint64 position); - void durationChanged(qint64 duration); - void formatChanged(const QAudioFormat &format); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodevice.sip deleted file mode 100644 index f3bdf14..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiodevice.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qaudiodevice.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioDevice -{ -%TypeHeaderCode -#include -%End - -public: - enum Mode - { - Null, - Input, - Output, - }; - - QAudioDevice(); - QAudioDevice(const QAudioDevice &other); - ~QAudioDevice(); - void swap(QAudioDevice &other /Constrained/); - bool operator==(const QAudioDevice &other) const; - bool operator!=(const QAudioDevice &other) const; - bool isNull() const; - QByteArray id() const; - QString description() const; - bool isDefault() const; - QAudioDevice::Mode mode() const; - bool isFormatSupported(const QAudioFormat &format) const; - QAudioFormat preferredFormat() const; - int minimumSampleRate() const; - int maximumSampleRate() const; - int minimumChannelCount() const; - int maximumChannelCount() const; - QList supportedSampleFormats() const; -%If (Qt_6_4_0 -) - QAudioFormat::ChannelConfig channelConfiguration() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioformat.sip deleted file mode 100644 index 9eca9b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioformat.sip +++ /dev/null @@ -1,118 +0,0 @@ -// qaudioformat.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum AudioChannelPosition - { - UnknownPosition, - FrontLeft, - FrontRight, - FrontCenter, - LFE, - BackLeft, - BackRight, - FrontLeftOfCenter, - FrontRightOfCenter, - BackCenter, - LFE2, - SideLeft, - SideRight, - TopFrontLeft, - TopFrontRight, - TopFrontCenter, - TopCenter, - TopBackLeft, - TopBackRight, - TopSideLeft, - TopSideRight, - TopBackCenter, - BottomFrontCenter, - BottomFrontLeft, - BottomFrontRight, - }; - - enum ChannelConfig - { - ChannelConfigUnknown, - ChannelConfigMono, - ChannelConfigStereo, - ChannelConfig2Dot1, - ChannelConfigSurround5Dot0, - ChannelConfigSurround5Dot1, - ChannelConfigSurround7Dot0, - ChannelConfigSurround7Dot1, -%If (Qt_6_4_0 -) - ChannelConfig3Dot0, -%End -%If (Qt_6_4_0 -) - ChannelConfig3Dot1, -%End - }; - - enum SampleFormat - { - Unknown, - UInt8, - Int16, - Int32, - Float, - }; - - bool isValid() const; - void setSampleRate(int sampleRate); - int sampleRate() const; - void setChannelCount(int channelCount); - int channelCount() const; - qint32 bytesForDuration(qint64 duration) const; - qint64 durationForBytes(qint32 byteCount) const; - qint32 bytesForFrames(qint32 frameCount) const; - qint32 framesForBytes(qint32 byteCount) const; - qint32 framesForDuration(qint64 duration) const; - qint64 durationForFrames(qint32 frameCount) const; - int bytesPerFrame() const; - void setChannelConfig(QAudioFormat::ChannelConfig config); - QAudioFormat::ChannelConfig channelConfig() const; - int channelOffset(QAudioFormat::AudioChannelPosition channel) const; - void setSampleFormat(QAudioFormat::SampleFormat f); - QAudioFormat::SampleFormat sampleFormat() const; - int bytesPerSample() const; - float normalizedSampleValue(const void *sample) const; -%If (Qt_6_4_0 -) - static QAudioFormat::ChannelConfig defaultChannelConfigForChannelCount(int channelCount); -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QAudioFormat &a, const QAudioFormat &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QAudioFormat &a, const QAudioFormat &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioinput.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioinput.sip deleted file mode 100644 index 3144c8f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudioinput.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qaudioinput.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioInput : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QAudioInput(const QAudioDevice &deviceInfo, QObject *parent /TransferThis/ = 0); - explicit QAudioInput(QObject *parent /TransferThis/ = 0); - virtual ~QAudioInput(); - QAudioDevice device() const; - float volume() const; - bool isMuted() const; - -public slots: - void setDevice(const QAudioDevice &device); - void setMuted(bool muted); - void setVolume(float volume); - -signals: - void deviceChanged(); - void volumeChanged(float volume); - void mutedChanged(bool muted); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiooutput.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiooutput.sip deleted file mode 100644 index e286d76..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiooutput.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qaudiooutput.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioOutput : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QAudioOutput(const QAudioDevice &device, QObject *parent /TransferThis/ = 0); - explicit QAudioOutput(QObject *parent /TransferThis/ = 0); - virtual ~QAudioOutput(); - float volume() const; - QAudioDevice device() const; - bool isMuted() const; - -public slots: - void setDevice(const QAudioDevice &device); - void setVolume(float volume); - void setMuted(bool muted); - -signals: - void deviceChanged(); - void volumeChanged(float volume); - void mutedChanged(bool muted); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosink.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosink.sip deleted file mode 100644 index 08bc58c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosink.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qaudiosink.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioSink : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QAudioSink(const QAudioDevice &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); - QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); - virtual ~QAudioSink(); - QAudioFormat format() const; - void start(QIODevice *device); - QIODevice *start(); - void stop(); - void reset(); - void suspend(); - void resume(); - void setBufferSize(qsizetype bytes); - qsizetype bufferSize() const; - qsizetype bytesFree() const; - qint64 processedUSecs() const; - qint64 elapsedUSecs() const; - QAudio::Error error() const; - QAudio::State state() const; - void setVolume(qreal); - qreal volume() const; - -signals: - void stateChanged(QAudio::State state); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosource.sip deleted file mode 100644 index 8cddede..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qaudiosource.sip +++ /dev/null @@ -1,56 +0,0 @@ -// qaudiosource.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAudioSource : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QAudioSource(const QAudioDevice &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); - QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); - virtual ~QAudioSource(); - QAudioFormat format() const; - void start(QIODevice *device); - QIODevice *start(); - void stop(); - void reset(); - void suspend(); - void resume(); - void setBufferSize(qsizetype bytes); - qsizetype bufferSize() const; - qsizetype bytesAvailable() const; - void setVolume(qreal volume); - qreal volume() const; - qint64 processedUSecs() const; - qint64 elapsedUSecs() const; - QAudio::Error error() const; - QAudio::State state() const; - -signals: - void stateChanged(QAudio::State state); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcamera.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcamera.sip deleted file mode 100644 index 639a3de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcamera.sip +++ /dev/null @@ -1,246 +0,0 @@ -// qcamera.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QCamera : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAudioDecoder, &sipType_QAudioDecoder, -1, 1}, - {sipName_QAudioInput, &sipType_QAudioInput, -1, 2}, - {sipName_QAudioOutput, &sipType_QAudioOutput, -1, 3}, - {sipName_QAudioSink, &sipType_QAudioSink, -1, 4}, - {sipName_QAudioSource, &sipType_QAudioSource, -1, 5}, - {sipName_QCamera, &sipType_QCamera, -1, 6}, - {sipName_QImageCapture, &sipType_QImageCapture, -1, 7}, - {sipName_QMediaCaptureSession, &sipType_QMediaCaptureSession, -1, 8}, - {sipName_QMediaDevices, &sipType_QMediaDevices, -1, 9}, - {sipName_QMediaPlayer, &sipType_QMediaPlayer, -1, 10}, - {sipName_QMediaRecorder, &sipType_QMediaRecorder, -1, 11}, - #if QT_VERSION >= 0x060500 - {sipName_QScreenCapture, &sipType_QScreenCapture, -1, 12}, - #else - {0, 0, -1, 12}, - #endif - {sipName_QSoundEffect, &sipType_QSoundEffect, -1, 13}, - {sipName_QVideoSink, &sipType_QVideoSink, -1, 14}, - #if QT_VERSION >= 0x060600 - {sipName_QWindowCapture, &sipType_QWindowCapture, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum Error - { - NoError, - CameraError, - }; - - enum FocusMode - { - FocusModeAuto, - FocusModeAutoNear, - FocusModeAutoFar, - FocusModeHyperfocal, - FocusModeInfinity, - FocusModeManual, - }; - - enum FlashMode - { - FlashOff, - FlashOn, - FlashAuto, - }; - - enum TorchMode - { - TorchOff, - TorchOn, - TorchAuto, - }; - - enum ExposureMode - { - ExposureAuto, - ExposureManual, - ExposurePortrait, - ExposureNight, - ExposureSports, - ExposureSnow, - ExposureBeach, - ExposureAction, - ExposureLandscape, - ExposureNightPortrait, - ExposureTheatre, - ExposureSunset, - ExposureSteadyPhoto, - ExposureFireworks, - ExposureParty, - ExposureCandlelight, - ExposureBarcode, - }; - - enum WhiteBalanceMode - { - WhiteBalanceAuto, - WhiteBalanceManual, - WhiteBalanceSunlight, - WhiteBalanceCloudy, - WhiteBalanceShade, - WhiteBalanceTungsten, - WhiteBalanceFluorescent, - WhiteBalanceFlash, - WhiteBalanceSunset, - }; - - enum class Feature - { - ColorTemperature, - ExposureCompensation, - IsoSensitivity, - ManualExposureTime, - CustomFocusPoint, - FocusDistance, - }; - - typedef QFlags Features; - QCamera(const QCameraDevice &cameraDevice, QObject *parent /TransferThis/ = 0); - QCamera(QCameraDevice::Position position, QObject *parent /TransferThis/ = 0); - explicit QCamera(QObject *parent /TransferThis/ = 0); - virtual ~QCamera(); - bool isAvailable() const; - bool isActive() const; - QMediaCaptureSession *captureSession() const; - QCameraDevice cameraDevice() const; - void setCameraDevice(const QCameraDevice &cameraDevice); - QCameraFormat cameraFormat() const; - void setCameraFormat(const QCameraFormat &format); - QCamera::Error error() const; - QString errorString() const; - QCamera::Features supportedFeatures() const; - QCamera::FocusMode focusMode() const; - void setFocusMode(QCamera::FocusMode mode); - bool isFocusModeSupported(QCamera::FocusMode mode) const; - QPointF focusPoint() const; - QPointF customFocusPoint() const; - void setCustomFocusPoint(const QPointF &point); - void setFocusDistance(float d); - float focusDistance() const; - float minimumZoomFactor() const; - float maximumZoomFactor() const; - float zoomFactor() const; - void setZoomFactor(float factor); - QCamera::FlashMode flashMode() const; - bool isFlashModeSupported(QCamera::FlashMode mode) const; - bool isFlashReady() const; - QCamera::TorchMode torchMode() const; - bool isTorchModeSupported(QCamera::TorchMode mode) const; - QCamera::ExposureMode exposureMode() const; - bool isExposureModeSupported(QCamera::ExposureMode mode) const; - float exposureCompensation() const; - int isoSensitivity() const; - int manualIsoSensitivity() const; - float exposureTime() const; - float manualExposureTime() const; - int minimumIsoSensitivity() const; - int maximumIsoSensitivity() const; - float minimumExposureTime() const; - float maximumExposureTime() const; - QCamera::WhiteBalanceMode whiteBalanceMode() const; - bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const; - int colorTemperature() const; - -public slots: - void setActive(bool active); - void start(); - void stop(); - void zoomTo(float zoom, float rate); - void setFlashMode(QCamera::FlashMode mode); - void setTorchMode(QCamera::TorchMode mode); - void setExposureMode(QCamera::ExposureMode mode); - void setExposureCompensation(float ev); - void setManualIsoSensitivity(int iso); - void setAutoIsoSensitivity(); - void setManualExposureTime(float seconds); - void setAutoExposureTime(); - void setWhiteBalanceMode(QCamera::WhiteBalanceMode mode); - void setColorTemperature(int colorTemperature); - -signals: - void activeChanged(bool); - void errorChanged(); - void errorOccurred(QCamera::Error error, const QString &errorString); - void cameraDeviceChanged(); - void cameraFormatChanged(); - void supportedFeaturesChanged(); - void focusModeChanged(); - void zoomFactorChanged(float); - void minimumZoomFactorChanged(float); - void maximumZoomFactorChanged(float); - void focusDistanceChanged(float); - void customFocusPointChanged(); - void flashReady(bool); - void flashModeChanged(); - void torchModeChanged(); - void exposureTimeChanged(float speed); - void isoSensitivityChanged(int); - void exposureCompensationChanged(float); - void exposureModeChanged(); - void whiteBalanceModeChanged() const; - void colorTemperatureChanged() const; - void focusPointChanged(); - void manualExposureTimeChanged(float speed); - void manualIsoSensitivityChanged(int); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcameradevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcameradevice.sip deleted file mode 100644 index 8e30f10..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcameradevice.sip +++ /dev/null @@ -1,79 +0,0 @@ -// qcameradevice.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QCameraFormat -{ -%TypeHeaderCode -#include -%End - -public: - QCameraFormat(); - QCameraFormat(const QCameraFormat &other); - ~QCameraFormat(); - QVideoFrameFormat::PixelFormat pixelFormat() const; - QSize resolution() const; - float minFrameRate() const; - float maxFrameRate() const; - bool isNull() const; - bool operator==(const QCameraFormat &other) const; - bool operator!=(const QCameraFormat &other) const; -}; - -%End -%If (Qt_6_2_0 -) - -class QCameraDevice -{ -%TypeHeaderCode -#include -%End - -public: - QCameraDevice(); - QCameraDevice(const QCameraDevice &other); - ~QCameraDevice(); - bool operator==(const QCameraDevice &other) const; - bool operator!=(const QCameraDevice &other) const; - bool isNull() const; - QByteArray id() const; - QString description() const; - bool isDefault() const; - - enum Position - { - UnspecifiedPosition, - BackFace, - FrontFace, - }; - - QCameraDevice::Position position() const; - QList photoResolutions() const; - QList videoFormats() const; -%If (Qt_6_7_0 -) - QtVideo::Rotation correctionAngle() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcapturablewindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcapturablewindow.sip deleted file mode 100644 index 306010a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qcapturablewindow.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qcapturablewindow.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_6_0 -) - -class QCapturableWindow -{ -%TypeHeaderCode -#include -%End - -public: - QCapturableWindow(); - ~QCapturableWindow(); - QCapturableWindow(const QCapturableWindow &other); - void swap(QCapturableWindow &other /Constrained/); - bool isValid() const; - QString description() const; -}; - -%End -%If (Qt_6_6_0 -) -bool operator==(const QCapturableWindow &lhs, const QCapturableWindow &rhs); -%End -%If (Qt_6_6_0 -) -bool operator!=(const QCapturableWindow &lhs, const QCapturableWindow &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qimagecapture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qimagecapture.sip deleted file mode 100644 index 595a19f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qimagecapture.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qimagecapture.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QImageCapture : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - NotReadyError, - ResourceError, - OutOfSpaceError, - NotSupportedFeatureError, - FormatError, - }; - - enum Quality - { - VeryLowQuality, - LowQuality, - NormalQuality, - HighQuality, - VeryHighQuality, - }; - - enum FileFormat - { - UnspecifiedFormat, - JPEG, - PNG, - WebP, - Tiff, - }; - - explicit QImageCapture(QObject *parent /TransferThis/ = 0); - virtual ~QImageCapture(); - bool isAvailable() const; - QMediaCaptureSession *captureSession() const; - QImageCapture::Error error() const; - QString errorString() const; - bool isReadyForCapture() const; - QImageCapture::FileFormat fileFormat() const; - void setFileFormat(QImageCapture::FileFormat format); - static QList supportedFormats(); - static QString fileFormatName(QImageCapture::FileFormat c); - static QString fileFormatDescription(QImageCapture::FileFormat c); - QSize resolution() const; - void setResolution(const QSize &); - void setResolution(int width, int height); - QImageCapture::Quality quality() const; - void setQuality(QImageCapture::Quality quality); - QMediaMetaData metaData() const; - void setMetaData(const QMediaMetaData &metaData); - void addMetaData(const QMediaMetaData &metaData); - -public slots: - int captureToFile(const QString &location = QString()); - int capture(); - -signals: - void errorChanged(); - void errorOccurred(int id, QImageCapture::Error error, const QString &errorString); - void readyForCaptureChanged(bool ready); - void metaDataChanged(); - void fileFormatChanged(); - void qualityChanged(); - void resolutionChanged(); - void imageExposed(int id); - void imageCaptured(int id, const QImage &preview); - void imageAvailable(int id, const QVideoFrame &frame); - void imageSaved(int id, const QString &fileName); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediacapturesession.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediacapturesession.sip deleted file mode 100644 index 2b2bd27..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediacapturesession.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qmediacapturesession.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaCaptureSession : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QMediaCaptureSession(QObject *parent /TransferThis/ = 0); - virtual ~QMediaCaptureSession(); - QAudioInput *audioInput() const; - void setAudioInput(QAudioInput *device); - QCamera *camera() const; - void setCamera(QCamera *camera); - QImageCapture *imageCapture(); - void setImageCapture(QImageCapture *imageCapture); - QMediaRecorder *recorder(); - void setRecorder(QMediaRecorder *recorder); - void setVideoOutput(QObject *output); - QObject *videoOutput() const; - void setVideoSink(QVideoSink *sink); - QVideoSink *videoSink() const; - void setAudioOutput(QAudioOutput *output); - QAudioOutput *audioOutput() const; - -signals: - void audioInputChanged(); - void cameraChanged(); - void imageCaptureChanged(); - void recorderChanged(); - void videoOutputChanged(); - void audioOutputChanged(); - -public: -%If (Qt_6_5_0 -) - QScreenCapture *screenCapture(); -%End -%If (Qt_6_5_0 -) - void setScreenCapture(QScreenCapture *screenCapture); -%End - -signals: -%If (Qt_6_5_0 -) - void screenCaptureChanged(); -%End - -public: -%If (Qt_6_6_0 -) - QWindowCapture *windowCapture(); -%End -%If (Qt_6_6_0 -) - void setWindowCapture(QWindowCapture *windowCapture); -%End - -signals: -%If (Qt_6_6_0 -) - void windowCaptureChanged(); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediadevices.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediadevices.sip deleted file mode 100644 index 67ad5b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediadevices.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qmediadevices.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaDevices : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QMediaDevices(QObject *parent /TransferThis/ = 0); - virtual ~QMediaDevices(); - static QList audioInputs(); - static QList audioOutputs(); - static QList videoInputs(); - static QAudioDevice defaultAudioInput(); - static QAudioDevice defaultAudioOutput(); - static QCameraDevice defaultVideoInput(); - -signals: - void audioInputsChanged(); - void audioOutputsChanged(); - void videoInputsChanged(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaformat.sip deleted file mode 100644 index a67f726..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaformat.sip +++ /dev/null @@ -1,120 +0,0 @@ -// qmediaformat.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum FileFormat - { - UnspecifiedFormat, - WMV, - AVI, - Matroska, - MPEG4, - Ogg, - QuickTime, - WebM, - Mpeg4Audio, - AAC, - WMA, - MP3, - FLAC, - Wave, - }; - - enum class AudioCodec - { - Unspecified, - MP3, - AAC, - AC3, - EAC3, - FLAC, - DolbyTrueHD, - Opus, - Vorbis, - Wave, - WMA, - ALAC, - }; - - enum class VideoCodec - { - Unspecified, - MPEG1, - MPEG2, - MPEG4, - H264, - H265, - VP8, - VP9, - AV1, - Theora, - WMV, - MotionJPEG, - }; - - enum ConversionMode - { - Encode, - Decode, - }; - - enum ResolveFlags - { - NoFlags, - RequiresVideo, - }; - - QMediaFormat(QMediaFormat::FileFormat format = QMediaFormat::UnspecifiedFormat); - QMediaFormat(const QMediaFormat &other); - ~QMediaFormat(); - void swap(QMediaFormat &other /Constrained/); - QMediaFormat::FileFormat fileFormat() const; - void setFileFormat(QMediaFormat::FileFormat f); - void setVideoCodec(QMediaFormat::VideoCodec codec); - QMediaFormat::VideoCodec videoCodec() const; - void setAudioCodec(QMediaFormat::AudioCodec codec); - QMediaFormat::AudioCodec audioCodec() const; - bool isSupported(QMediaFormat::ConversionMode mode) const; - QMimeType mimeType() const; - QList supportedFileFormats(QMediaFormat::ConversionMode m); - QList supportedVideoCodecs(QMediaFormat::ConversionMode m); - QList supportedAudioCodecs(QMediaFormat::ConversionMode m); - static QString fileFormatName(QMediaFormat::FileFormat c); - static QString audioCodecName(QMediaFormat::AudioCodec c); - static QString videoCodecName(QMediaFormat::VideoCodec c); - static QString fileFormatDescription(QMediaFormat::FileFormat c); - static QString audioCodecDescription(QMediaFormat::AudioCodec c); - static QString videoCodecDescription(QMediaFormat::VideoCodec c); - void resolveForEncoding(QMediaFormat::ResolveFlags flags); - bool operator==(const QMediaFormat &other) const; - bool operator!=(const QMediaFormat &other) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediametadata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediametadata.sip deleted file mode 100644 index 8fd3611..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediametadata.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qmediametadata.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaMetaData -{ -%TypeHeaderCode -#include -%End - -public: - enum Key - { - Title, - Author, - Comment, - Description, - Genre, - Date, - Language, - Publisher, - Copyright, - Url, - Duration, - MediaType, - FileFormat, - AudioBitRate, - AudioCodec, - VideoBitRate, - VideoCodec, - VideoFrameRate, - AlbumTitle, - AlbumArtist, - ContributingArtist, - TrackNumber, - Composer, - LeadPerformer, - ThumbnailImage, - CoverArtImage, - Orientation, - Resolution, - }; - - QVariant value(QMediaMetaData::Key k) const; - void insert(QMediaMetaData::Key k, const QVariant &value); - QList keys() const; - QString stringValue(QMediaMetaData::Key k) const; - static QString metaDataKeyToString(QMediaMetaData::Key k); - -protected: -%If (Qt_6_4_0 -) - static QMetaType keyType(QMediaMetaData::Key key); -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QMediaMetaData &a, const QMediaMetaData &b); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QMediaMetaData &a, const QMediaMetaData &b); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaplayer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaplayer.sip deleted file mode 100644 index ee58de2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediaplayer.sip +++ /dev/null @@ -1,146 +0,0 @@ -// qmediaplayer.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaPlayer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum PlaybackState - { - StoppedState, - PlayingState, - PausedState, - }; - - enum MediaStatus - { - NoMedia, - LoadingMedia, - LoadedMedia, - StalledMedia, - BufferingMedia, - BufferedMedia, - EndOfMedia, - InvalidMedia, - }; - - enum Error - { - NoError, - ResourceError, - FormatError, - NetworkError, - AccessDeniedError, - }; - - explicit QMediaPlayer(QObject *parent /TransferThis/ = 0); - virtual ~QMediaPlayer(); - QList audioTracks() const; - QList videoTracks() const; - QList subtitleTracks() const; - int activeAudioTrack() const; - int activeVideoTrack() const; - int activeSubtitleTrack() const; - void setActiveAudioTrack(int index); - void setActiveVideoTrack(int index); - void setActiveSubtitleTrack(int index); - void setAudioOutput(QAudioOutput *output); - QAudioOutput *audioOutput() const; - void setVideoOutput(QObject *); - QObject *videoOutput() const; - void setVideoSink(QVideoSink *sink); - QVideoSink *videoSink() const; - QUrl source() const; - const QIODevice *sourceDevice() const; - QMediaPlayer::PlaybackState playbackState() const; - QMediaPlayer::MediaStatus mediaStatus() const; - qint64 duration() const; - qint64 position() const; - bool hasAudio() const; - bool hasVideo() const; - float bufferProgress() const; - QMediaTimeRange bufferedTimeRange() const; - bool isSeekable() const; - qreal playbackRate() const; - QMediaPlayer::Error error() const; - QString errorString() const; - bool isAvailable() const; - QMediaMetaData metaData() const; - -public slots: - void play(); - void pause(); - void stop(); - void setPosition(qint64 position); - void setPlaybackRate(qreal rate); - void setSource(const QUrl &source) /ReleaseGIL/; - void setSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl()) /ReleaseGIL/; - -signals: - void sourceChanged(const QUrl &media); - void playbackStateChanged(QMediaPlayer::PlaybackState newState); - void mediaStatusChanged(QMediaPlayer::MediaStatus status); - void durationChanged(qint64 duration); - void positionChanged(qint64 position); - void hasAudioChanged(bool available); - void hasVideoChanged(bool videoAvailable); - void bufferProgressChanged(float progress); - void seekableChanged(bool seekable); - void playbackRateChanged(qreal rate); - void metaDataChanged(); - void videoOutputChanged(); - void audioOutputChanged(); - void tracksChanged(); - void activeTracksChanged(); - void errorChanged(); - void errorOccurred(QMediaPlayer::Error error, const QString &errorString); - -public: - enum Loops /BaseType=IntEnum/ - { - Infinite, - Once, - }; - - int loops() const; - void setLoops(int loops); - -signals: - void loopsChanged(); - -public: -%If (Qt_6_5_0 -) - bool isPlaying() const; -%End - -signals: -%If (Qt_6_5_0 -) - void playingChanged(bool playing); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediarecorder.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediarecorder.sip deleted file mode 100644 index 33fb874..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediarecorder.sip +++ /dev/null @@ -1,121 +0,0 @@ -// qmediarecorder.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaRecorder : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Quality - { - VeryLowQuality, - LowQuality, - NormalQuality, - HighQuality, - VeryHighQuality, - }; - - enum EncodingMode - { - ConstantQualityEncoding, - ConstantBitRateEncoding, - AverageBitRateEncoding, - TwoPassEncoding, - }; - - enum RecorderState - { - StoppedState, - RecordingState, - PausedState, - }; - - enum Error - { - NoError, - ResourceError, - FormatError, - OutOfSpaceError, - LocationNotWritable, - }; - - QMediaRecorder(QObject *parent /TransferThis/ = 0); - virtual ~QMediaRecorder(); - bool isAvailable() const; - QUrl outputLocation() const; - void setOutputLocation(const QUrl &location); - QUrl actualLocation() const; - QMediaRecorder::RecorderState recorderState() const; - QMediaRecorder::Error error() const; - QString errorString() const; - qint64 duration() const; - QMediaFormat mediaFormat() const; - void setMediaFormat(const QMediaFormat &format); - QMediaRecorder::EncodingMode encodingMode() const; - void setEncodingMode(QMediaRecorder::EncodingMode); - QMediaRecorder::Quality quality() const; - void setQuality(QMediaRecorder::Quality quality); - QSize videoResolution() const; - void setVideoResolution(const QSize &); - void setVideoResolution(int width, int height); - qreal videoFrameRate() const; - void setVideoFrameRate(qreal frameRate); - int videoBitRate() const; - void setVideoBitRate(int bitRate); - int audioBitRate() const; - void setAudioBitRate(int bitRate); - int audioChannelCount() const; - void setAudioChannelCount(int channels); - int audioSampleRate() const; - void setAudioSampleRate(int sampleRate); - QMediaMetaData metaData() const; - void setMetaData(const QMediaMetaData &metaData); - QMediaCaptureSession *captureSession() const; - -public slots: - void record(); - void pause(); - void stop(); - -signals: - void recorderStateChanged(QMediaRecorder::RecorderState state /ScopesStripped=1/); - void durationChanged(qint64 duration); - void actualLocationChanged(const QUrl &location); - void errorOccurred(QMediaRecorder::Error error /ScopesStripped=1/, const QString &errorString); - void errorChanged(); - void metaDataChanged(); - void mediaFormatChanged(); - void encodingModeChanged(); - void qualityChanged(); - void videoResolutionChanged(); - void videoFrameRateChanged(); - void videoBitRateChanged(); - void audioBitRateChanged(); - void audioChannelCountChanged(); - void audioSampleRateChanged(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediatimerange.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediatimerange.sip deleted file mode 100644 index c4a0572..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qmediatimerange.sip +++ /dev/null @@ -1,89 +0,0 @@ -// qmediatimerange.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMediaTimeRange -{ -%TypeHeaderCode -#include -%End - -public: - QMediaTimeRange(); - QMediaTimeRange(const QMediaTimeRange::Interval &); - QMediaTimeRange(qint64 start, qint64 end); - QMediaTimeRange(const QMediaTimeRange &range); - ~QMediaTimeRange(); - qint64 earliestTime() const; - qint64 latestTime() const; - QList intervals() const; - bool isEmpty() const; - bool isContinuous() const; - bool contains(qint64 time) const; - void addInterval(const QMediaTimeRange::Interval &interval); - void addInterval(qint64 start, qint64 end); - void addTimeRange(const QMediaTimeRange &); - void removeInterval(const QMediaTimeRange::Interval &interval); - void removeInterval(qint64 start, qint64 end); - void removeTimeRange(const QMediaTimeRange &); - QMediaTimeRange &operator+=(const QMediaTimeRange::Interval &); - QMediaTimeRange &operator+=(const QMediaTimeRange &); - QMediaTimeRange &operator-=(const QMediaTimeRange::Interval &); - QMediaTimeRange &operator-=(const QMediaTimeRange &); - void clear(); - - struct Interval - { -%TypeHeaderCode -#include -%End - - Interval(qint64 start, qint64 end); - qint64 start() const; - qint64 end() const; - bool contains(qint64 time) const; - bool isNormal() const; - QMediaTimeRange::Interval normalized() const; - QMediaTimeRange::Interval translated(qint64 offset) const; - }; -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QMediaTimeRange &, const QMediaTimeRange &); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QMediaTimeRange &, const QMediaTimeRange &); -%End -%If (Qt_6_2_0 -) -QMediaTimeRange operator+(const QMediaTimeRange &, const QMediaTimeRange &); -%End -%If (Qt_6_2_0 -) -QMediaTimeRange operator-(const QMediaTimeRange &, const QMediaTimeRange &); -%End -%If (Qt_6_2_0 -) -bool operator==(QMediaTimeRange::Interval lhs, QMediaTimeRange::Interval rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(QMediaTimeRange::Interval lhs, QMediaTimeRange::Interval rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qpymultimedia_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qpymultimedia_qlist.sip deleted file mode 100644 index 2d33b4e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qpymultimedia_qlist.sip +++ /dev/null @@ -1,530 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtMultimedia module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - - -%MappedType QList - /TypeHintIn="Iterable[QAudioFormat.SampleFormat]", - TypeHintOut="List[QAudioFormat.SampleFormat]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QAudioFormat_SampleFormat); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QAudioFormat_SampleFormat); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QAudioFormat.SampleFormat' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[QImageCapture.FileFormat]", - TypeHintOut="List[QImageCapture.FileFormat]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QImageCapture_FileFormat); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QImageCapture_FileFormat); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QImageCapture.FileFormat' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[QMediaFormat.FileFormat]", - TypeHintOut="List[QMediaFormat.FileFormat]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QMediaFormat_FileFormat); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QMediaFormat_FileFormat); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QMediaFormat.FileFormat' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[QMediaFormat.AudioCodec]", - TypeHintOut="List[QMediaFormat.AudioCodec]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(static_cast(sipCpp->at(i)), - sipType_QMediaFormat_AudioCodec); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QMediaFormat_AudioCodec); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QMediaFormat.AudioCodec' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%MappedType QList - /TypeHintIn="Iterable[QMediaFormat.VideoCodec]", - TypeHintOut="List[QMediaFormat.VideoCodec]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(static_cast(sipCpp->at(i)), - sipType_QMediaFormat_VideoCodec); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QMediaFormat_VideoCodec); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QMediaFormat.VideoCodec' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qscreencapture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qscreencapture.sip deleted file mode 100644 index 6dfb648..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qscreencapture.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qscreencapture.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QScreenCapture : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - InternalError, - CapturingNotSupported, - CaptureFailed, - NotFound, - }; - - explicit QScreenCapture(QObject *parent /TransferThis/ = 0); - virtual ~QScreenCapture(); - QMediaCaptureSession *captureSession() const; - void setScreen(QScreen *screen); - QScreen *screen() const; - bool isActive() const; - QScreenCapture::Error error() const; - QString errorString() const; - -public slots: - void setActive(bool active); - void start(); - void stop(); - -signals: - void activeChanged(bool); - void errorChanged(); - void screenChanged(QScreen *); - void errorOccurred(QScreenCapture::Error error, const QString &errorString); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qsoundeffect.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qsoundeffect.sip deleted file mode 100644 index 32def5f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qsoundeffect.sip +++ /dev/null @@ -1,80 +0,0 @@ -// qsoundeffect.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QSoundEffect : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Loop - { - Infinite, - }; - - enum Status - { - Null, - Loading, - Ready, - Error, - }; - - QSoundEffect(const QAudioDevice &audioDevice, QObject *parent /TransferThis/ = 0); - explicit QSoundEffect(QObject *parent /TransferThis/ = 0); - virtual ~QSoundEffect(); - static QStringList supportedMimeTypes(); - QAudioDevice audioDevice(); - void setAudioDevice(const QAudioDevice &device); - QUrl source() const; - void setSource(const QUrl &url); - int loopCount() const; - int loopsRemaining() const; - void setLoopCount(int loopCount); - float volume() const; - void setVolume(float volume); - bool isMuted() const; - void setMuted(bool muted); - bool isLoaded() const; - bool isPlaying() const; - QSoundEffect::Status status() const; - -public slots: - void play(); - void stop(); - -signals: - void audioDeviceChanged(); - void sourceChanged(); - void loopCountChanged(); - void loopsRemainingChanged(); - void volumeChanged(); - void mutedChanged(); - void loadedChanged(); - void playingChanged(); - void statusChanged(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qtvideo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qtvideo.sip deleted file mode 100644 index 306a2e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qtvideo.sip +++ /dev/null @@ -1,40 +0,0 @@ -// qtvideo.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -namespace QtVideo -{ -%TypeHeaderCode -#include -%End - - enum class Rotation - { - None, - Clockwise90, - Clockwise180, - Clockwise270, - }; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframe.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframe.sip deleted file mode 100644 index b165608..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframe.sip +++ /dev/null @@ -1,128 +0,0 @@ -// qvideoframe.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QVideoFrame -{ -%TypeHeaderCode -#include -%End - -public: - QVideoFrame(); - QVideoFrame(const QVideoFrameFormat &format); - QVideoFrame(const QVideoFrame &other); - ~QVideoFrame(); - - enum HandleType - { - NoHandle, - RhiTextureHandle, - }; - - enum MapMode - { - NotMapped, - ReadOnly, - WriteOnly, - ReadWrite, - }; - - bool isValid() const; - QVideoFrameFormat::PixelFormat pixelFormat() const; - QVideoFrame::HandleType handleType() const; - QSize size() const; - int width() const; - int height() const; - bool isMapped() const; - bool isReadable() const; - bool isWritable() const; - QVideoFrame::MapMode mapMode() const; - bool map(QVideoFrame::MapMode mode); - void unmap(); - int bytesPerLine(int plane) const; - void *bits(int plane) [uchar * (int plane)]; - int mappedBytes(int plane) const; - qint64 startTime() const; - void setStartTime(qint64 time); - qint64 endTime() const; - void setEndTime(qint64 time); - int planeCount() const; - bool operator==(const QVideoFrame &other) const; - bool operator!=(const QVideoFrame &other) const; - QVideoFrameFormat surfaceFormat() const; - QImage toImage() const; - - struct PaintOptions - { -%TypeHeaderCode -#include -%End - - QColor backgroundColor; - Qt::AspectRatioMode aspectRatioMode; - - enum PaintFlag /BaseType=Flag/ - { - DontDrawSubtitles, - }; - - typedef QFlags PaintFlags; - QVideoFrame::PaintOptions::PaintFlags paintFlags; - }; - - QString subtitleText() const; - void setSubtitleText(const QString &text); - void paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options); -%If (Qt_6_3_0 -) - - enum RotationAngle - { - Rotation0, - Rotation90, - Rotation180, - Rotation270, - }; - -%End -%If (Qt_6_3_0 -) - void setRotationAngle(QVideoFrame::RotationAngle); -%End -%If (Qt_6_3_0 -) - QVideoFrame::RotationAngle rotationAngle() const; -%End -%If (Qt_6_3_0 -) - void setMirrored(bool); -%End -%If (Qt_6_3_0 -) - bool mirrored() const; -%End -%If (Qt_6_7_0 -) - void setRotation(QtVideo::Rotation angle); -%End -%If (Qt_6_7_0 -) - QtVideo::Rotation rotation() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframeformat.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframeformat.sip deleted file mode 100644 index 078c3aa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideoframeformat.sip +++ /dev/null @@ -1,175 +0,0 @@ -// qvideoframeformat.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QVideoFrameFormat -{ -%TypeHeaderCode -#include -%End - -public: - enum PixelFormat - { - Format_Invalid, - Format_YUV420P, - Format_YUV422P, -%If (Qt_6_4_0 -) - Format_YUV420P10, -%End - Format_YV12, - Format_UYVY, - Format_YUYV, - Format_NV12, - Format_NV21, - Format_IMC1, - Format_IMC2, - Format_IMC3, - Format_IMC4, - Format_Y8, - Format_Y16, - Format_P010, - Format_P016, - Format_Jpeg, - Format_SamplerExternalOES, - Format_ARGB8888, - Format_ARGB8888_Premultiplied, - Format_XRGB8888, - Format_BGRA8888, - Format_BGRA8888_Premultiplied, - Format_BGRX8888, - Format_ABGR8888, - Format_XBGR8888, - Format_RGBA8888, - Format_RGBX8888, - Format_AYUV, - Format_AYUV_Premultiplied, - Format_SamplerRect, - }; - - enum Direction - { - TopToBottom, - BottomToTop, - }; - - enum YCbCrColorSpace - { - YCbCr_Undefined, - YCbCr_BT601, - YCbCr_BT709, - YCbCr_xvYCC601, - YCbCr_xvYCC709, - YCbCr_JPEG, -%If (Qt_6_3_0 -) - YCbCr_BT2020, -%End - }; - - QVideoFrameFormat(); - QVideoFrameFormat(const QSize &size, QVideoFrameFormat::PixelFormat pixelFormat); - QVideoFrameFormat(const QVideoFrameFormat &format); - ~QVideoFrameFormat(); - bool operator==(const QVideoFrameFormat &format) const; - bool operator!=(const QVideoFrameFormat &format) const; - bool isValid() const; - QVideoFrameFormat::PixelFormat pixelFormat() const; - QSize frameSize() const; - void setFrameSize(const QSize &size); - void setFrameSize(int width, int height); - int frameWidth() const; - int frameHeight() const; - int planeCount() const; - QRect viewport() const; - void setViewport(const QRect &viewport); - QVideoFrameFormat::Direction scanLineDirection() const; - void setScanLineDirection(QVideoFrameFormat::Direction direction); - qreal frameRate() const; - void setFrameRate(qreal rate); - QVideoFrameFormat::YCbCrColorSpace yCbCrColorSpace() const; - void setYCbCrColorSpace(QVideoFrameFormat::YCbCrColorSpace colorSpace); - bool isMirrored() const; - void setMirrored(bool mirrored); - static QVideoFrameFormat::PixelFormat pixelFormatFromImageFormat(QImage::Format format); - static QImage::Format imageFormatFromPixelFormat(QVideoFrameFormat::PixelFormat format); -%If (Qt_6_2_0 -) - static QString pixelFormatToString(QVideoFrameFormat::PixelFormat pixelFormat); -%End -%If (Qt_6_4_0 -) - - enum ColorSpace - { - ColorSpace_Undefined, - ColorSpace_BT601, - ColorSpace_BT709, - ColorSpace_AdobeRgb, - ColorSpace_BT2020, - }; - -%End -%If (Qt_6_4_0 -) - - enum ColorTransfer - { - ColorTransfer_Unknown, - ColorTransfer_BT709, - ColorTransfer_BT601, - ColorTransfer_Linear, - ColorTransfer_Gamma22, - ColorTransfer_Gamma28, - ColorTransfer_ST2084, - ColorTransfer_STD_B67, - }; - -%End -%If (Qt_6_4_0 -) - - enum ColorRange - { - ColorRange_Unknown, - ColorRange_Video, - ColorRange_Full, - }; - -%End -%If (Qt_6_4_0 -) - QVideoFrameFormat::ColorSpace colorSpace() const; -%End -%If (Qt_6_4_0 -) - void setColorSpace(QVideoFrameFormat::ColorSpace colorSpace); -%End -%If (Qt_6_4_0 -) - QVideoFrameFormat::ColorTransfer colorTransfer() const; -%End -%If (Qt_6_4_0 -) - void setColorTransfer(QVideoFrameFormat::ColorTransfer colorTransfer); -%End -%If (Qt_6_4_0 -) - QVideoFrameFormat::ColorRange colorRange() const; -%End -%If (Qt_6_4_0 -) - void setColorRange(QVideoFrameFormat::ColorRange range); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideosink.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideosink.sip deleted file mode 100644 index 6ef9ce5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qvideosink.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qvideosink.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QVideoSink : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QVideoSink(QObject *parent /TransferThis/ = 0); - virtual ~QVideoSink(); - QSize videoSize() const; - QString subtitleText() const; - void setSubtitleText(const QString &subtitle); - void setVideoFrame(const QVideoFrame &frame); - QVideoFrame videoFrame() const; - -signals: - void videoFrameChanged(const QVideoFrame &frame) const; - void subtitleTextChanged(const QString &subtitleText) const; - void videoSizeChanged(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qwindowcapture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qwindowcapture.sip deleted file mode 100644 index 06219b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimedia/qwindowcapture.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qwindowcapture.sip generated by MetaSIP -// -// This file is part of the QtMultimedia Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_6_0 -) - -class QWindowCapture : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - InternalError, - CapturingNotSupported, - CaptureFailed, - NotFound, - }; - - explicit QWindowCapture(QObject *parent /TransferThis/ = 0); - virtual ~QWindowCapture(); - static QList capturableWindows(); - void setWindow(QCapturableWindow window); - QCapturableWindow window() const; - bool isActive() const; - QWindowCapture::Error error() const; - QString errorString() const; - -public slots: - void setActive(bool active); - void start(); - void stop(); - -signals: - void activeChanged(bool); - void windowChanged(QCapturableWindow window); - void errorChanged(); - void errorOccurred(QWindowCapture::Error error, const QString &errorString); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml deleted file mode 100644 index e5f2334..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtMultimediaWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip deleted file mode 100644 index 618ab06..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip +++ /dev/null @@ -1,51 +0,0 @@ -// QtMultimediaWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtMultimediaWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtMultimediaWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtMultimedia/QtMultimediamod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qgraphicsvideoitem.sip -%Include qvideowidget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip deleted file mode 100644 index 0bbbe87..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qgraphicsvideoitem.sip generated by MetaSIP -// -// This file is part of the QtMultimediaWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGraphicsVideoItem : public QGraphicsObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsVideoItem(QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsVideoItem(); - QVideoSink *videoSink() const; - Qt::AspectRatioMode aspectRatioMode() const; - void setAspectRatioMode(Qt::AspectRatioMode mode); - QPointF offset() const; - void setOffset(const QPointF &offset); - QSizeF size() const; - void setSize(const QSizeF &size); - QSizeF nativeSize() const; - virtual QRectF boundingRect() const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual int type() const; - -signals: - void nativeSizeChanged(const QSizeF &size); - -protected: - virtual void timerEvent(QTimerEvent *event); - virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); -}; - -%End - -%ModuleCode -// This is needed by the %ConvertToSubClassCode. -#include -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qvideowidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qvideowidget.sip deleted file mode 100644 index c82c92e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtMultimediaWidgets/qvideowidget.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qvideowidget.sip generated by MetaSIP -// -// This file is part of the QtMultimediaWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QVideoWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QGraphicsVideoItem, &sipType_QGraphicsVideoItem, -1, 1}, - {sipName_QVideoWidget, &sipType_QVideoWidget, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - explicit QVideoWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QVideoWidget(); - QVideoSink *videoSink() const; - Qt::AspectRatioMode aspectRatioMode() const; - bool isFullScreen() const; - virtual QSize sizeHint() const; - -public slots: - void setFullScreen(bool fullScreen); - void setAspectRatioMode(Qt::AspectRatioMode mode); - -signals: - void fullScreenChanged(bool fullScreen); - void aspectRatioModeChanged(Qt::AspectRatioMode mode); - -protected: - virtual bool event(QEvent *event); - virtual void showEvent(QShowEvent *event); - virtual void hideEvent(QHideEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void moveEvent(QMoveEvent *event); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetwork.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetwork.toml deleted file mode 100644 index f8f2a3b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetwork.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtNetwork. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetworkmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetworkmod.sip deleted file mode 100644 index babec79..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/QtNetworkmod.sip +++ /dev/null @@ -1,90 +0,0 @@ -// QtNetworkmod.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtNetwork, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qabstractnetworkcache.sip -%Include qabstractsocket.sip -%Include qauthenticator.sip -%Include qdnslookup.sip -%Include qhostaddress.sip -%Include qhostinfo.sip -%Include qhstspolicy.sip -%Include qhttp1configuration.sip -%Include qhttp2configuration.sip -%Include qhttpheaders.sip -%Include qhttpmultipart.sip -%Include qlocalserver.sip -%Include qlocalsocket.sip -%Include qnetworkaccessmanager.sip -%Include qnetworkcookie.sip -%Include qnetworkcookiejar.sip -%Include qnetworkdatagram.sip -%Include qnetworkdiskcache.sip -%Include qnetworkinformation.sip -%Include qnetworkinterface.sip -%Include qnetworkproxy.sip -%Include qnetworkreply.sip -%Include qnetworkrequest.sip -%Include qocspresponse.sip -%Include qpassworddigestor.sip -%Include qssl.sip -%Include qsslcertificate.sip -%Include qsslcertificateextension.sip -%Include qsslcipher.sip -%Include qsslconfiguration.sip -%Include qssldiffiehellmanparameters.sip -%Include qsslellipticcurve.sip -%Include qsslerror.sip -%Include qsslkey.sip -%Include qsslpresharedkeyauthenticator.sip -%Include qsslserver.sip -%Include qsslsocket.sip -%Include qtcpserver.sip -%Include qtcpsocket.sip -%Include qudpsocket.sip -%Include qpynetwork_qlist.sip -%Include qpynetwork_qhash.sip -%Include qpynetwork_qmap.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractnetworkcache.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractnetworkcache.sip deleted file mode 100644 index d2e4712..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractnetworkcache.sip +++ /dev/null @@ -1,78 +0,0 @@ -// qabstractnetworkcache.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkCacheMetaData -{ -%TypeHeaderCode -#include -%End - - typedef QList> RawHeaderList; - typedef QHash AttributesMap; - -public: - QNetworkCacheMetaData(); - QNetworkCacheMetaData(const QNetworkCacheMetaData &other); - ~QNetworkCacheMetaData(); - bool operator==(const QNetworkCacheMetaData &other) const; - bool operator!=(const QNetworkCacheMetaData &other) const; - bool isValid() const; - QUrl url() const; - void setUrl(const QUrl &url); - QNetworkCacheMetaData::RawHeaderList rawHeaders() const; - void setRawHeaders(const QNetworkCacheMetaData::RawHeaderList &headers); - QDateTime lastModified() const; - void setLastModified(const QDateTime &dateTime); - QDateTime expirationDate() const; - void setExpirationDate(const QDateTime &dateTime); - bool saveToDisk() const; - void setSaveToDisk(bool allow); - QNetworkCacheMetaData::AttributesMap attributes() const; - void setAttributes(const QNetworkCacheMetaData::AttributesMap &attributes); - void swap(QNetworkCacheMetaData &other /Constrained/); -}; - -QDataStream &operator<<(QDataStream &, const QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/; - -class QAbstractNetworkCache : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QAbstractNetworkCache(); - virtual QNetworkCacheMetaData metaData(const QUrl &url) = 0; - virtual void updateMetaData(const QNetworkCacheMetaData &metaData) = 0; - virtual QIODevice *data(const QUrl &url) = 0 /Factory/; - virtual bool remove(const QUrl &url) = 0; - virtual qint64 cacheSize() const = 0; - virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) = 0; - virtual void insert(QIODevice *device) = 0; - -public slots: - virtual void clear() = 0; - -protected: - explicit QAbstractNetworkCache(QObject *parent /TransferThis/ = 0); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractsocket.sip deleted file mode 100644 index ae8109c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qabstractsocket.sip +++ /dev/null @@ -1,330 +0,0 @@ -// qabstractsocket.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractSocket : public QIODevice -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAbstractNetworkCache, &sipType_QAbstractNetworkCache, 11, 1}, - {sipName_QAbstractSocket, &sipType_QAbstractSocket, 12, 2}, - {sipName_QDnsLookup, &sipType_QDnsLookup, -1, 3}, - {sipName_QHttpMultiPart, &sipType_QHttpMultiPart, -1, 4}, - {sipName_QLocalServer, &sipType_QLocalServer, -1, 5}, - {sipName_QLocalSocket, &sipType_QLocalSocket, -1, 6}, - {sipName_QNetworkAccessManager, &sipType_QNetworkAccessManager, -1, 7}, - {sipName_QNetworkCookieJar, &sipType_QNetworkCookieJar, -1, 8}, - #if QT_VERSION >= 0x060100 - {sipName_QNetworkInformation, &sipType_QNetworkInformation, -1, 9}, - #else - {0, 0, -1, 9}, - #endif - {sipName_QNetworkReply, &sipType_QNetworkReply, -1, 10}, - {sipName_QTcpServer, &sipType_QTcpServer, 15, -1}, - {sipName_QNetworkDiskCache, &sipType_QNetworkDiskCache, -1, -1}, - {sipName_QTcpSocket, &sipType_QTcpSocket, 14, 13}, - {sipName_QUdpSocket, &sipType_QUdpSocket, -1, -1}, - #if defined(SIP_FEATURE_PyQt_SSL) - {sipName_QSslSocket, &sipType_QSslSocket, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - #if QT_VERSION >= 0x060400 && defined(SIP_FEATURE_PyQt_SSL) - {sipName_QSslServer, &sipType_QSslServer, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum SocketType - { - TcpSocket, - UdpSocket, - SctpSocket, - UnknownSocketType, - }; - - enum NetworkLayerProtocol - { - IPv4Protocol, - IPv6Protocol, - AnyIPProtocol, - UnknownNetworkLayerProtocol, - }; - - enum SocketError - { - ConnectionRefusedError, - RemoteHostClosedError, - HostNotFoundError, - SocketAccessError, - SocketResourceError, - SocketTimeoutError, - DatagramTooLargeError, - NetworkError, - AddressInUseError, - SocketAddressNotAvailableError, - UnsupportedSocketOperationError, - UnfinishedSocketOperationError, - ProxyAuthenticationRequiredError, - SslHandshakeFailedError, - ProxyConnectionRefusedError, - ProxyConnectionClosedError, - ProxyConnectionTimeoutError, - ProxyNotFoundError, - ProxyProtocolError, - OperationError, - SslInternalError, - SslInvalidUserDataError, - TemporaryError, - UnknownSocketError, - }; - - enum SocketState - { - UnconnectedState, - HostLookupState, - ConnectingState, - ConnectedState, - BoundState, - ListeningState, - ClosingState, - }; - - QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent /TransferThis/); - virtual ~QAbstractSocket(); - virtual void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; - void connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - virtual void disconnectFromHost() /ReleaseGIL/; - bool isValid() const; - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - quint16 localPort() const; - QHostAddress localAddress() const; - quint16 peerPort() const; - QHostAddress peerAddress() const; - QString peerName() const; - qint64 readBufferSize() const; - virtual void setReadBufferSize(qint64 size); - void abort(); - virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - virtual qintptr socketDescriptor() const; - QAbstractSocket::SocketType socketType() const; - QAbstractSocket::SocketState state() const; - QAbstractSocket::SocketError error() const; - virtual void close(); - virtual bool isSequential() const; - bool flush() /ReleaseGIL/; - virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; - void setProxy(const QNetworkProxy &networkProxy); - QNetworkProxy proxy() const; - -signals: - void hostFound(); - void connected(); - void disconnected(); - void stateChanged(QAbstractSocket::SocketState); - void errorOccurred(QAbstractSocket::SocketError); - void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QAbstractSocket::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QAbstractSocket::readLineData(s, a0) : sipCpp->readLineData(s, a0); - #else - len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QAbstractSocket::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - virtual qint64 skipData(qint64 maxSize) /ReleaseGIL/; - void setSocketState(QAbstractSocket::SocketState state); - void setSocketError(QAbstractSocket::SocketError socketError); - void setLocalPort(quint16 port); - void setLocalAddress(const QHostAddress &address); - void setPeerPort(quint16 port); - void setPeerAddress(const QHostAddress &address); - void setPeerName(const QString &name); - -public: - enum SocketOption - { - LowDelayOption, - KeepAliveOption, - MulticastTtlOption, - MulticastLoopbackOption, - TypeOfServiceOption, - SendBufferSizeSocketOption, - ReceiveBufferSizeSocketOption, - PathMtuSocketOption, - }; - - virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value); - virtual QVariant socketOption(QAbstractSocket::SocketOption option); - - enum BindFlag /BaseType=Flag/ - { - DefaultForPlatform, - ShareAddress, - DontShareAddress, - ReuseAddressHint, - }; - - typedef QFlags BindMode; - - enum PauseMode /BaseType=Flag/ - { - PauseNever, - PauseOnSslErrors, - }; - - typedef QFlags PauseModes; - virtual void resume() /ReleaseGIL/; - QAbstractSocket::PauseModes pauseMode() const; - void setPauseMode(QAbstractSocket::PauseModes pauseMode); - virtual bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = QAbstractSocket::DefaultForPlatform); - bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = QAbstractSocket::DefaultForPlatform); - QString protocolTag() const; - void setProtocolTag(const QString &tag); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qauthenticator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qauthenticator.sip deleted file mode 100644 index b3bd109..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qauthenticator.sip +++ /dev/null @@ -1,44 +0,0 @@ -// qauthenticator.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAuthenticator -{ -%TypeHeaderCode -#include -%End - -public: - QAuthenticator(); - QAuthenticator(const QAuthenticator &other); - ~QAuthenticator(); - bool operator==(const QAuthenticator &other) const; - bool operator!=(const QAuthenticator &other) const; - QString user() const; - void setUser(const QString &user); - QString password() const; - void setPassword(const QString &password); - QString realm() const; - bool isNull() const; - QVariant option(const QString &opt) const; - QVariantHash options() const; - void setOption(const QString &opt, const QVariant &value); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qdnslookup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qdnslookup.sip deleted file mode 100644 index 4fb8208..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qdnslookup.sip +++ /dev/null @@ -1,195 +0,0 @@ -// qdnslookup.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDnsDomainNameRecord -{ -%TypeHeaderCode -#include -%End - -public: - QDnsDomainNameRecord(); - QDnsDomainNameRecord(const QDnsDomainNameRecord &other); - ~QDnsDomainNameRecord(); - void swap(QDnsDomainNameRecord &other /Constrained/); - QString name() const; - quint32 timeToLive() const; - QString value() const; -}; - -class QDnsHostAddressRecord -{ -%TypeHeaderCode -#include -%End - -public: - QDnsHostAddressRecord(); - QDnsHostAddressRecord(const QDnsHostAddressRecord &other); - ~QDnsHostAddressRecord(); - void swap(QDnsHostAddressRecord &other /Constrained/); - QString name() const; - quint32 timeToLive() const; - QHostAddress value() const; -}; - -class QDnsMailExchangeRecord -{ -%TypeHeaderCode -#include -%End - -public: - QDnsMailExchangeRecord(); - QDnsMailExchangeRecord(const QDnsMailExchangeRecord &other); - ~QDnsMailExchangeRecord(); - void swap(QDnsMailExchangeRecord &other /Constrained/); - QString exchange() const; - QString name() const; - quint16 preference() const; - quint32 timeToLive() const; -}; - -class QDnsServiceRecord -{ -%TypeHeaderCode -#include -%End - -public: - QDnsServiceRecord(); - QDnsServiceRecord(const QDnsServiceRecord &other); - ~QDnsServiceRecord(); - void swap(QDnsServiceRecord &other /Constrained/); - QString name() const; - quint16 port() const; - quint16 priority() const; - QString target() const; - quint32 timeToLive() const; - quint16 weight() const; -}; - -class QDnsTextRecord -{ -%TypeHeaderCode -#include -%End - -public: - QDnsTextRecord(); - QDnsTextRecord(const QDnsTextRecord &other); - ~QDnsTextRecord(); - void swap(QDnsTextRecord &other /Constrained/); - QString name() const; - quint32 timeToLive() const; - QList values() const; -}; - -class QDnsLookup : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - ResolverError, - OperationCancelledError, - InvalidRequestError, - InvalidReplyError, - ServerFailureError, - ServerRefusedError, - NotFoundError, -%If (Qt_6_6_0 -) - TimeoutError, -%End - }; - - enum Type - { - A, - AAAA, - ANY, - CNAME, - MX, - NS, - PTR, - SRV, - TXT, - }; - - explicit QDnsLookup(QObject *parent /TransferThis/ = 0); - QDnsLookup(QDnsLookup::Type type, const QString &name, QObject *parent /TransferThis/ = 0); - QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, QObject *parent /TransferThis/ = 0); -%If (Qt_6_6_0 -) - QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, quint16 port, QObject *parent /TransferThis/ = 0); -%End - virtual ~QDnsLookup(); - QDnsLookup::Error error() const; - QString errorString() const; - bool isFinished() const; - QString name() const; - void setName(const QString &name); - QDnsLookup::Type type() const; - void setType(QDnsLookup::Type); - QList canonicalNameRecords() const; - QList hostAddressRecords() const; - QList mailExchangeRecords() const; - QList nameServerRecords() const; - QList pointerRecords() const; - QList serviceRecords() const; - QList textRecords() const; - -public slots: - void abort() /ReleaseGIL/; - void lookup() /ReleaseGIL/; - -signals: - void finished(); - void nameChanged(const QString &name); - void typeChanged(QDnsLookup::Type type /ScopesStripped=1/); - -public: - QHostAddress nameserver() const; - void setNameserver(const QHostAddress &nameserver); -%If (Qt_6_6_0 -) - void setNameserver(const QHostAddress &nameserver, quint16 port); -%End - -signals: - void nameserverChanged(const QHostAddress &nameserver); - -public: -%If (Qt_6_6_0 -) - quint16 nameserverPort() const; -%End -%If (Qt_6_6_0 -) - void setNameserverPort(quint16 port); -%End - -signals: -%If (Qt_6_6_0 -) - void nameserverPortChanged(quint16 port); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostaddress.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostaddress.sip deleted file mode 100644 index 0364861..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostaddress.sip +++ /dev/null @@ -1,192 +0,0 @@ -// qhostaddress.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHostAddress /TypeHintIn="Union[QHostAddress, QHostAddress.SpecialAddress]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -// SIP doesn't support automatic type convertors so we explicitly allow a -// QHostAddress::SpecialAddress to be used whenever a QHostAddress is expected. - -bool is_special_address = true; -int special_address = sipConvertToEnum(sipPy, sipType_QHostAddress_SpecialAddress); - -if (PyErr_Occurred()) -{ - PyErr_Clear(); - is_special_address = false; -} - -if (sipIsErr == NULL) - return (is_special_address || - sipCanConvertToType(sipPy, sipType_QHostAddress, SIP_NO_CONVERTORS)); - -if (is_special_address) -{ - *sipCppPtr = new QHostAddress(static_cast(special_address)); - - return sipGetState(sipTransferObj); -} - - -*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QHostAddress, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); - -return 0; -%End - -public: - enum SpecialAddress - { - Null, - Broadcast, - LocalHost, - LocalHostIPv6, - AnyIPv4, - AnyIPv6, - Any, - }; - - QHostAddress(); - QHostAddress(QHostAddress::SpecialAddress address /Constrained/); - explicit QHostAddress(quint32 ip4Addr); - explicit QHostAddress(const QString &address); - explicit QHostAddress(const Q_IPV6ADDR &ip6Addr); - QHostAddress(const QHostAddress ©); - ~QHostAddress(); - void setAddress(QHostAddress::SpecialAddress address /Constrained/); - void setAddress(quint32 ip4Addr); - bool setAddress(const QString &address); - void setAddress(const Q_IPV6ADDR &ip6Addr); - QAbstractSocket::NetworkLayerProtocol protocol() const; - quint32 toIPv4Address(bool *ok = 0) const; - Q_IPV6ADDR toIPv6Address() const; - QString toString() const; - QString scopeId() const; - void setScopeId(const QString &id); - bool operator==(const QHostAddress &address) const; - bool operator==(QHostAddress::SpecialAddress address) const; - bool operator!=(const QHostAddress &address) const; - bool operator!=(QHostAddress::SpecialAddress address) const; - bool isNull() const; - void clear(); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - bool isInSubnet(const QHostAddress &subnet, int netmask) const; - bool isInSubnet(const std::pair &subnet) const; - bool isLoopback() const; - static std::pair parseSubnet(const QString &subnet); - void swap(QHostAddress &other /Constrained/); - bool isMulticast() const; - - enum ConversionModeFlag /BaseType=Flag/ - { - ConvertV4MappedToIPv4, - ConvertV4CompatToIPv4, - ConvertUnspecifiedAddress, - ConvertLocalHost, - TolerantConversion, - StrictConversion, - }; - - typedef QFlags ConversionMode; - bool isEqual(const QHostAddress &address, QHostAddress::ConversionMode mode = QHostAddress::TolerantConversion) const; - bool isGlobal() const; - bool isLinkLocal() const; - bool isSiteLocal() const; - bool isUniqueLocalUnicast() const; - bool isBroadcast() const; -%If (Qt_6_6_0 -) - bool isPrivateUse() const; -%End -}; - -bool operator==(QHostAddress::SpecialAddress address1, const QHostAddress &address2); -bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs); -QDataStream &operator<<(QDataStream &, const QHostAddress &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QHostAddress &) /ReleaseGIL/; -// Q_IPV6ADDR is implemented as a Python 16-tuple of ints. -%MappedType Q_IPV6ADDR /TypeHint="Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - // Create the tuple. - PyObject *t; - - if ((t = PyTuple_New(16)) == NULL) - return NULL; - - // Set the tuple elements. - for (int i = 0; i < 16; ++i) - { - PyObject *pobj; - - if ((pobj = PyLong_FromLong((*sipCpp)[i])) == NULL) - { - Py_DECREF(t); - - return NULL; - } - - PyTuple_SetItem(t, i, pobj); - } - - return t; -%End - -%ConvertToTypeCode - // Check the type if that is all that is required. - if (sipIsErr == NULL) - return (PySequence_Check(sipPy) && PySequence_Size(sipPy) == 16); - - Q_IPV6ADDR *qa = new Q_IPV6ADDR; - - for (Py_ssize_t i = 0; i < 16; ++i) - { - PyObject *itm = PySequence_GetItem(sipPy, i); - - if (!itm) - { - delete qa; - *sipIsErr = 1; - - return 0; - } - - (*qa)[i] = PyLong_AsLong(itm); - - Py_DECREF(itm); - } - - *sipCppPtr = qa; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostinfo.sip deleted file mode 100644 index 91dde3f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhostinfo.sip +++ /dev/null @@ -1,87 +0,0 @@ -// qhostinfo.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHostInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum HostInfoError - { - NoError, - HostNotFound, - UnknownError, - }; - - explicit QHostInfo(int id = -1); - QHostInfo(const QHostInfo &d); - ~QHostInfo(); - QString hostName() const; - void setHostName(const QString &name); - QList addresses() const; - void setAddresses(const QList &addresses); - QHostInfo::HostInfoError error() const; - void setError(QHostInfo::HostInfoError error); - QString errorString() const; - void setErrorString(const QString &errorString); - void setLookupId(int id); - int lookupId() const; - static int lookupHost(const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtnetwork_get_connection_parts(a1, 0, "(QHostInfo)", true, &receiver, slot_signature)) == sipErrorNone) - { - QHostInfo::lookupHost(*a0, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - - static void abortHostLookup(int lookupId); - static QHostInfo fromName(const QString &name); - static QString localHostName(); - static QString localDomainName(); - void swap(QHostInfo &other /Constrained/); -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qtnetwork_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); -extern pyqt6_qtnetwork_get_connection_parts_t pyqt6_qtnetwork_get_connection_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtnetwork_get_connection_parts_t pyqt6_qtnetwork_get_connection_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtnetwork_get_connection_parts = (pyqt6_qtnetwork_get_connection_parts_t)sipImportSymbol("pyqt6_get_connection_parts"); -Q_ASSERT(pyqt6_qtnetwork_get_connection_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhstspolicy.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhstspolicy.sip deleted file mode 100644 index b2ead76..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhstspolicy.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qhstspolicy.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHstsPolicy -{ -%TypeHeaderCode -#include -%End - -public: - enum PolicyFlag /BaseType=Flag/ - { - IncludeSubDomains, - }; - - typedef QFlags PolicyFlags; - QHstsPolicy(); - QHstsPolicy(const QDateTime &expiry, QHstsPolicy::PolicyFlags flags, const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); - QHstsPolicy(const QHstsPolicy &rhs); - ~QHstsPolicy(); - void swap(QHstsPolicy &other); - void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); - QString host(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; - void setExpiry(const QDateTime &expiry); - QDateTime expiry() const; - void setIncludesSubDomains(bool include); - bool includesSubDomains() const; - bool isExpired() const; -}; - -bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs); -bool operator!=(const QHstsPolicy &lhs, const QHstsPolicy &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp1configuration.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp1configuration.sip deleted file mode 100644 index 7e0c77e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp1configuration.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qhttp1configuration.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QHttp1Configuration -{ -%TypeHeaderCode -#include -%End - -public: - QHttp1Configuration(); - QHttp1Configuration(const QHttp1Configuration &other); - ~QHttp1Configuration(); - void setNumberOfConnectionsPerHost(qsizetype amount); - qsizetype numberOfConnectionsPerHost() const; - void swap(QHttp1Configuration &other); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_5_0 -) -bool operator==(const QHttp1Configuration &lhs, const QHttp1Configuration &rhs); -%End -%If (Qt_6_5_0 -) -bool operator!=(const QHttp1Configuration &lhs, const QHttp1Configuration &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp2configuration.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp2configuration.sip deleted file mode 100644 index 43caae6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttp2configuration.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qhttp2configuration.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHttp2Configuration -{ -%TypeHeaderCode -#include -%End - -public: - QHttp2Configuration(); - QHttp2Configuration(const QHttp2Configuration &other); - ~QHttp2Configuration(); - void setServerPushEnabled(bool enable); - bool serverPushEnabled() const; - void setHuffmanCompressionEnabled(bool enable); - bool huffmanCompressionEnabled() const; - bool setSessionReceiveWindowSize(unsigned int size); - unsigned int sessionReceiveWindowSize() const; - bool setStreamReceiveWindowSize(unsigned int size); - unsigned int streamReceiveWindowSize() const; - bool setMaxFrameSize(unsigned int size); - unsigned int maxFrameSize() const; - void swap(QHttp2Configuration &other /Constrained/); -}; - -bool operator==(const QHttp2Configuration &lhs, const QHttp2Configuration &rhs); -bool operator!=(const QHttp2Configuration &lhs, const QHttp2Configuration &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpheaders.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpheaders.sip deleted file mode 100644 index 8b10355..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpheaders.sip +++ /dev/null @@ -1,245 +0,0 @@ -// qhttpheaders.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -class QHttpHeaders -{ -%TypeHeaderCode -#include -%End - -public: - enum class WellKnownHeader - { - AIM, - Accept, - AcceptAdditions, - AcceptCH, - AcceptDatetime, - AcceptEncoding, - AcceptFeatures, - AcceptLanguage, - AcceptPatch, - AcceptPost, - AcceptRanges, - AcceptSignature, - AccessControlAllowCredentials, - AccessControlAllowHeaders, - AccessControlAllowMethods, - AccessControlAllowOrigin, - AccessControlExposeHeaders, - AccessControlMaxAge, - AccessControlRequestHeaders, - AccessControlRequestMethod, - Age, - Allow, - ALPN, - AltSvc, - AltUsed, - Alternates, - ApplyToRedirectRef, - AuthenticationControl, - AuthenticationInfo, - Authorization, - CacheControl, - CacheStatus, - CalManagedID, - CalDAVTimezones, - CapsuleProtocol, - CDNCacheControl, - CDNLoop, - CertNotAfter, - CertNotBefore, - ClearSiteData, - ClientCert, - ClientCertChain, - Close, - Connection, - ContentDigest, - ContentDisposition, - ContentEncoding, - ContentID, - ContentLanguage, - ContentLength, - ContentLocation, - ContentRange, - ContentSecurityPolicy, - ContentSecurityPolicyReportOnly, - ContentType, - Cookie, - CrossOriginEmbedderPolicy, - CrossOriginEmbedderPolicyReportOnly, - CrossOriginOpenerPolicy, - CrossOriginOpenerPolicyReportOnly, - CrossOriginResourcePolicy, - DASL, - Date, - DAV, - DeltaBase, - Depth, - Destination, - DifferentialID, - DPoP, - DPoPNonce, - EarlyData, - ETag, - Expect, - ExpectCT, - Expires, - Forwarded, - From, - Hobareg, - Host, - If, - IfMatch, - IfModifiedSince, - IfNoneMatch, - IfRange, - IfScheduleTagMatch, - IfUnmodifiedSince, - IM, - IncludeReferredTokenBindingID, - KeepAlive, - Label, - LastEventID, - LastModified, - Link, - Location, - LockToken, - MaxForwards, - MementoDatetime, - Meter, - MIMEVersion, - Negotiate, - NEL, - ODataEntityId, - ODataIsolation, - ODataMaxVersion, - ODataVersion, - OptionalWWWAuthenticate, - OrderingType, - Origin, - OriginAgentCluster, - OSCORE, - OSLCCoreVersion, - Overwrite, - PingFrom, - PingTo, - Position, - Prefer, - PreferenceApplied, - Priority, - ProxyAuthenticate, - ProxyAuthenticationInfo, - ProxyAuthorization, - ProxyStatus, - PublicKeyPins, - PublicKeyPinsReportOnly, - Range, - RedirectRef, - Referer, - Refresh, - ReplayNonce, - ReprDigest, - RetryAfter, - ScheduleReply, - ScheduleTag, - SecPurpose, - SecTokenBinding, - SecWebSocketAccept, - SecWebSocketExtensions, - SecWebSocketKey, - SecWebSocketProtocol, - SecWebSocketVersion, - Server, - ServerTiming, - SetCookie, - Signature, - SignatureInput, - SLUG, - SoapAction, - StatusURI, - StrictTransportSecurity, - Sunset, - SurrogateCapability, - SurrogateControl, - TCN, - TE, - Timeout, - Topic, - Traceparent, - Tracestate, - Trailer, - TransferEncoding, - TTL, - Upgrade, - Urgency, - UserAgent, - VariantVary, - Vary, - Via, - WantContentDigest, - WantReprDigest, - WWWAuthenticate, - XContentTypeOptions, - XFrameOptions, - AcceptCharset, - CPEPInfo, - Pragma, - ProtocolInfo, - ProtocolQuery, - }; - - QHttpHeaders(); - QHttpHeaders(const QHttpHeaders &other); - ~QHttpHeaders(); - void swap(QHttpHeaders &other /Constrained/); - bool append(QAnyStringView name, QAnyStringView value); - bool append(QHttpHeaders::WellKnownHeader name, QAnyStringView value); - bool insert(qsizetype i, QAnyStringView name, QAnyStringView value); - bool insert(qsizetype i, QHttpHeaders::WellKnownHeader name, QAnyStringView value); - bool replace(qsizetype i, QAnyStringView name, QAnyStringView newValue); - bool replace(qsizetype i, QHttpHeaders::WellKnownHeader name, QAnyStringView newValue); - bool contains(QAnyStringView name) const; - bool contains(QHttpHeaders::WellKnownHeader name) const; - void clear(); - void removeAll(QAnyStringView name); - void removeAll(QHttpHeaders::WellKnownHeader name); - void removeAt(qsizetype i); - QByteArrayView value(QAnyStringView name, QByteArrayView defaultValue = {}) const; - QByteArrayView value(QHttpHeaders::WellKnownHeader name, QByteArrayView defaultValue = {}) const; - QList values(QAnyStringView name) const; - QList values(QHttpHeaders::WellKnownHeader name) const; - QByteArrayView valueAt(qsizetype i) const; - QString nameAt(qsizetype i) const [QLatin1StringView (qsizetype i)]; - QByteArray combinedValue(QAnyStringView name) const; - QByteArray combinedValue(QHttpHeaders::WellKnownHeader name) const; - qsizetype size() const; - void reserve(qsizetype size); - bool isEmpty() const; - static QByteArrayView wellKnownHeaderName(QHttpHeaders::WellKnownHeader name); - static QHttpHeaders fromListOfPairs(const QList> &headers); - QList> toListOfPairs() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpmultipart.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpmultipart.sip deleted file mode 100644 index ee24c47..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qhttpmultipart.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qhttpmultipart.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHttpPart -{ -%TypeHeaderCode -#include -%End - -public: - QHttpPart(); - QHttpPart(const QHttpPart &other); - ~QHttpPart(); - bool operator==(const QHttpPart &other) const; - bool operator!=(const QHttpPart &other) const; - void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); - void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue); - void setBody(const QByteArray &body); - void setBodyDevice(QIODevice *device); - void swap(QHttpPart &other /Constrained/); -}; - -class QHttpMultiPart : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ContentType - { - MixedType, - RelatedType, - FormDataType, - AlternativeType, - }; - - explicit QHttpMultiPart(QObject *parent /TransferThis/ = 0); - QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent /TransferThis/ = 0); - virtual ~QHttpMultiPart(); - void append(const QHttpPart &httpPart); - void setContentType(QHttpMultiPart::ContentType contentType); - QByteArray boundary() const; - void setBoundary(const QByteArray &boundary); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalserver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalserver.sip deleted file mode 100644 index a4e396a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalserver.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qlocalserver.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLocalServer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QLocalServer(QObject *parent /TransferThis/ = 0); - virtual ~QLocalServer(); - void close(); - QString errorString() const; - virtual bool hasPendingConnections() const; - bool isListening() const; - bool listen(const QString &name); - bool listen(qintptr socketDescriptor); - int maxPendingConnections() const; - virtual QLocalSocket *nextPendingConnection(); - QString serverName() const; - QString fullServerName() const; - QAbstractSocket::SocketError serverError() const; - void setMaxPendingConnections(int numConnections); - bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/; - static bool removeServer(const QString &name); - -signals: - void newConnection(); - -protected: - virtual void incomingConnection(quintptr socketDescriptor); - -public: - enum SocketOption /BaseType=Flag/ - { - UserAccessOption, - GroupAccessOption, - OtherAccessOption, - WorldAccessOption, -%If (Qt_6_2_0 -) - AbstractNamespaceOption, -%End - }; - - typedef QFlags SocketOptions; - void setSocketOptions(QLocalServer::SocketOptions options); - QLocalServer::SocketOptions socketOptions() const; - qintptr socketDescriptor() const; -%If (Qt_6_3_0 -) - void setListenBacklogSize(int size); -%End -%If (Qt_6_3_0 -) - int listenBacklogSize() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalsocket.sip deleted file mode 100644 index ea4abaf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qlocalsocket.sip +++ /dev/null @@ -1,214 +0,0 @@ -// qlocalsocket.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLocalSocket : public QIODevice -{ -%TypeHeaderCode -#include -%End - -public: - enum LocalSocketError - { - ConnectionRefusedError, - PeerClosedError, - ServerNotFoundError, - SocketAccessError, - SocketResourceError, - SocketTimeoutError, - DatagramTooLargeError, - ConnectionError, - UnsupportedSocketOperationError, - OperationError, - UnknownSocketError, - }; - - enum LocalSocketState - { - UnconnectedState, - ConnectingState, - ConnectedState, - ClosingState, - }; - - QLocalSocket(QObject *parent /TransferThis/ = 0); - virtual ~QLocalSocket(); - void connectToServer(const QString &name, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void connectToServer(QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite) /ReleaseGIL/; - void disconnectFromServer() /ReleaseGIL/; - virtual bool open(QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - QString serverName() const; - void setServerName(const QString &name); - QString fullServerName() const; - void abort(); - virtual bool isSequential() const; - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - virtual bool canReadLine() const; - virtual void close(); - QLocalSocket::LocalSocketError error() const; - bool flush(); - bool isValid() const; - qint64 readBufferSize() const; - void setReadBufferSize(qint64 size); - bool setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState state = QLocalSocket::ConnectedState, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - qintptr socketDescriptor() const; - QLocalSocket::LocalSocketState state() const; - virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; - bool waitForConnected(int msecs = 30000) /ReleaseGIL/; - bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; - -signals: - void connected(); - void disconnected(); - void errorOccurred(QLocalSocket::LocalSocketError socketError); - void stateChanged(QLocalSocket::LocalSocketState socketState); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *, qint64)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QLocalSocket::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *, qint64)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QLocalSocket::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - virtual qint64 skipData(qint64 maxSize) /ReleaseGIL/; - -public: -%If (Qt_6_2_0 -) - - enum SocketOption /BaseType=Flag/ - { - NoOptions, - AbstractNamespaceOption, - }; - -%End -%If (Qt_6_2_0 -) - typedef QFlags SocketOptions; -%End -%If (Qt_6_2_0 -) - void setSocketOptions(QLocalSocket::SocketOptions option); -%End -%If (Qt_6_2_0 -) - QLocalSocket::SocketOptions socketOptions() const; -%End - -protected: -%If (Qt_6_3_0 -) - virtual SIP_PYOBJECT readLineData(qint64 maxlen) /ReleaseGIL,TypeHint="bytes"/ [qint64 (char *data, qint64 maxSize)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QLocalSocket::readLineData(s, a0) : sipCpp->readLineData(s, a0); - #else - len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkaccessmanager.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkaccessmanager.sip deleted file mode 100644 index 77c3f28..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkaccessmanager.sip +++ /dev/null @@ -1,115 +0,0 @@ -// qnetworkaccessmanager.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkAccessManager : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Operation - { - HeadOperation, - GetOperation, - PutOperation, - PostOperation, - DeleteOperation, - CustomOperation, - }; - - explicit QNetworkAccessManager(QObject *parent /TransferThis/ = 0); - virtual ~QNetworkAccessManager(); - QNetworkProxy proxy() const; - void setProxy(const QNetworkProxy &proxy); - QNetworkCookieJar *cookieJar() const; - void setCookieJar(QNetworkCookieJar *cookieJar /Transfer/); - QNetworkReply *head(const QNetworkRequest &request); - QNetworkReply *get(const QNetworkRequest &request); -%If (Qt_6_7_0 -) - QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data); -%End -%If (Qt_6_7_0 -) - QNetworkReply *get(const QNetworkRequest &request, QIODevice *data); -%End - QNetworkReply *post(const QNetworkRequest &request, QIODevice *data); - QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data); - QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart); - QNetworkReply *put(const QNetworkRequest &request, QIODevice *data); - QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data); - QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart); - -signals: - void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); - void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); - void finished(QNetworkReply *reply); -%If (PyQt_SSL) - void encrypted(QNetworkReply *reply); -%End -%If (PyQt_SSL) - void sslErrors(QNetworkReply *reply, const QList &errors); -%End -%If (PyQt_SSL) - void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator); -%End - -protected: - virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *device = 0) /AbortOnException,DisallowNone,ReleaseGIL/; - -public: - QNetworkProxyFactory *proxyFactory() const; - void setProxyFactory(QNetworkProxyFactory *factory /Transfer/); - QAbstractNetworkCache *cache() const; - void setCache(QAbstractNetworkCache *cache /Transfer/); - QNetworkReply *deleteResource(const QNetworkRequest &request); - QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = 0); - QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data); - QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart); - void clearAccessCache(); - virtual QStringList supportedSchemes() const; -%If (PyQt_SSL) - void connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()); -%End -%If (PyQt_SSL) - void connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName); -%End - void connectToHost(const QString &hostName, quint16 port = 80); - -protected slots: - QStringList supportedSchemesImplementation() const; - -public: - void clearConnectionCache(); - void setStrictTransportSecurityEnabled(bool enabled); - bool isStrictTransportSecurityEnabled() const; - void addStrictTransportSecurityHosts(const QList &knownHosts); - QList strictTransportSecurityHosts() const; - void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy); - QNetworkRequest::RedirectPolicy redirectPolicy() const; - void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()); - bool isStrictTransportSecurityStoreEnabled() const; - bool autoDeleteReplies() const; - void setAutoDeleteReplies(bool autoDelete); - int transferTimeout() const; - // In Qt v6.7 this was replaced by two overloads but we need the optional keyword argument. - void setTransferTimeout(int timeout = QNetworkRequest::DefaultTransferTimeoutConstant); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookie.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookie.sip deleted file mode 100644 index c875299..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookie.sip +++ /dev/null @@ -1,83 +0,0 @@ -// qnetworkcookie.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkCookie -{ -%TypeHeaderCode -#include -%End - -public: - enum RawForm - { - NameAndValueOnly, - Full, - }; - - QNetworkCookie(const QByteArray &name = QByteArray(), const QByteArray &value = QByteArray()); - QNetworkCookie(const QNetworkCookie &other); - ~QNetworkCookie(); - bool isSecure() const; - void setSecure(bool enable); - bool isSessionCookie() const; - QDateTime expirationDate() const; - void setExpirationDate(const QDateTime &date); - QString domain() const; - void setDomain(const QString &domain); - QString path() const; - void setPath(const QString &path); - QByteArray name() const; - void setName(const QByteArray &cookieName); - QByteArray value() const; - void setValue(const QByteArray &value); - QByteArray toRawForm(QNetworkCookie::RawForm form = QNetworkCookie::Full) const; -%If (Qt_6_7_0 -) - static QList parseCookies(QByteArrayView cookieString); -%End -%If (- Qt_6_7_0) - static QList parseCookies(const QByteArray &cookieString); -%End - bool operator==(const QNetworkCookie &other) const; - bool operator!=(const QNetworkCookie &other) const; - bool isHttpOnly() const; - void setHttpOnly(bool enable); - void swap(QNetworkCookie &other /Constrained/); - bool hasSameIdentifier(const QNetworkCookie &other) const; - void normalize(const QUrl &url); -%If (Qt_6_1_0 -) - - enum class SameSite - { - Default, - None /PyName=None_/, - Lax, - Strict, - }; - -%End -%If (Qt_6_1_0 -) - QNetworkCookie::SameSite sameSitePolicy() const; -%End -%If (Qt_6_1_0 -) - void setSameSitePolicy(QNetworkCookie::SameSite sameSite); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookiejar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookiejar.sip deleted file mode 100644 index 668807a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkcookiejar.sip +++ /dev/null @@ -1,42 +0,0 @@ -// qnetworkcookiejar.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkCookieJar : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QNetworkCookieJar(QObject *parent /TransferThis/ = 0); - virtual ~QNetworkCookieJar(); - virtual QList cookiesForUrl(const QUrl &url) const; - virtual bool setCookiesFromUrl(const QList &cookieList, const QUrl &url); - virtual bool insertCookie(const QNetworkCookie &cookie); - virtual bool updateCookie(const QNetworkCookie &cookie); - virtual bool deleteCookie(const QNetworkCookie &cookie); - -protected: - void setAllCookies(const QList &cookieList); - QList allCookies() const; - virtual bool validateCookie(const QNetworkCookie &cookie, const QUrl &url) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdatagram.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdatagram.sip deleted file mode 100644 index 3c748fd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdatagram.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qnetworkdatagram.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkDatagram -{ -%TypeHeaderCode -#include -%End - -public: - QNetworkDatagram(); - QNetworkDatagram(const QByteArray &data, const QHostAddress &destinationAddress = QHostAddress(), quint16 port = 0); - QNetworkDatagram(const QNetworkDatagram &other); - ~QNetworkDatagram(); - void swap(QNetworkDatagram &other /Constrained/); - void clear(); - bool isValid() const; - bool isNull() const; - uint interfaceIndex() const; - void setInterfaceIndex(uint index); - QHostAddress senderAddress() const; - QHostAddress destinationAddress() const; - int senderPort() const; - int destinationPort() const; - void setSender(const QHostAddress &address, quint16 port = 0); - void setDestination(const QHostAddress &address, quint16 port); - int hopLimit() const; - void setHopLimit(int count); - QByteArray data() const; - void setData(const QByteArray &data); - QNetworkDatagram makeReply(const QByteArray &payload) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdiskcache.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdiskcache.sip deleted file mode 100644 index d783042..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkdiskcache.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qnetworkdiskcache.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkDiskCache : public QAbstractNetworkCache -{ -%TypeHeaderCode -#include -%End - -public: - explicit QNetworkDiskCache(QObject *parent /TransferThis/ = 0); - virtual ~QNetworkDiskCache(); - QString cacheDirectory() const; - void setCacheDirectory(const QString &cacheDir); - qint64 maximumCacheSize() const; - void setMaximumCacheSize(qint64 size); - virtual qint64 cacheSize() const; - virtual QNetworkCacheMetaData metaData(const QUrl &url); - virtual void updateMetaData(const QNetworkCacheMetaData &metaData); - virtual QIODevice *data(const QUrl &url) /Factory/; - virtual bool remove(const QUrl &url); - virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData); - virtual void insert(QIODevice *device); - QNetworkCacheMetaData fileMetaData(const QString &fileName) const; - -public slots: - virtual void clear(); - -protected: - virtual qint64 expire(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinformation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinformation.sip deleted file mode 100644 index 396aed4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinformation.sip +++ /dev/null @@ -1,123 +0,0 @@ -// qnetworkinformation.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_1_0 -) - -class QNetworkInformation : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum class Reachability - { - Unknown, - Disconnected, - Local, - Site, - Online, - }; - - enum class Feature - { - Reachability, -%If (Qt_6_2_0 -) - CaptivePortal, -%End -%If (Qt_6_3_0 -) - TransportMedium, -%End -%If (Qt_6_3_0 -) - Metered, -%End - }; - - typedef QFlags Features; - QNetworkInformation::Reachability reachability() const; - QString backendName() const; - bool supports(QNetworkInformation::Features features) const; - static bool load(QStringView backend); - static bool load(QNetworkInformation::Features features); - static QStringList availableBackends(); - static QNetworkInformation *instance(); - -signals: - void reachabilityChanged(QNetworkInformation::Reachability newReachability /ScopesStripped=1/); - -public: -%If (Qt_6_2_0 -) - bool isBehindCaptivePortal() const; -%End - -signals: -%If (Qt_6_2_0 -) - void isBehindCaptivePortalChanged(bool state); -%End - -public: -%If (Qt_6_3_0 -) - - enum class TransportMedium - { - Unknown, - Ethernet, - Cellular, - WiFi, - Bluetooth, - }; - -%End -%If (Qt_6_3_0 -) - QNetworkInformation::TransportMedium transportMedium() const; -%End -%If (Qt_6_3_0 -) - bool isMetered() const; -%End -%If (Qt_6_3_0 -) - QNetworkInformation::Features supportedFeatures() const; -%End -%If (Qt_6_3_0 -) - static bool loadDefaultBackend(); -%End - -signals: -%If (Qt_6_3_0 -) - void transportMediumChanged(QNetworkInformation::TransportMedium current); -%End -%If (Qt_6_3_0 -) - void isMeteredChanged(bool isMetered); -%End - -public: -%If (Qt_6_4_0 -) - static bool loadBackendByName(QStringView backend); -%End -%If (Qt_6_4_0 -) - static bool loadBackendByFeatures(QNetworkInformation::Features features); -%End - -private: - virtual ~QNetworkInformation(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinterface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinterface.sip deleted file mode 100644 index 8bfda70..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkinterface.sip +++ /dev/null @@ -1,120 +0,0 @@ -// qnetworkinterface.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkAddressEntry -{ -%TypeHeaderCode -#include -%End - -public: - QNetworkAddressEntry(); - QNetworkAddressEntry(const QNetworkAddressEntry &other); - ~QNetworkAddressEntry(); - QHostAddress ip() const; - void setIp(const QHostAddress &newIp); - QHostAddress netmask() const; - void setNetmask(const QHostAddress &newNetmask); - QHostAddress broadcast() const; - void setBroadcast(const QHostAddress &newBroadcast); - bool operator==(const QNetworkAddressEntry &other) const; - bool operator!=(const QNetworkAddressEntry &other) const; - int prefixLength() const; - void setPrefixLength(int length); - void swap(QNetworkAddressEntry &other /Constrained/); - - enum DnsEligibilityStatus - { - DnsEligibilityUnknown, - DnsIneligible, - DnsEligible, - }; - - QNetworkAddressEntry::DnsEligibilityStatus dnsEligibility() const; - void setDnsEligibility(QNetworkAddressEntry::DnsEligibilityStatus status); - bool isLifetimeKnown() const; - QDeadlineTimer preferredLifetime() const; - QDeadlineTimer validityLifetime() const; - void setAddressLifetime(QDeadlineTimer preferred, QDeadlineTimer validity); - void clearAddressLifetime(); - bool isPermanent() const; - bool isTemporary() const; -}; - -class QNetworkInterface -{ -%TypeHeaderCode -#include -%End - -public: - enum InterfaceFlag /BaseType=Flag/ - { - IsUp, - IsRunning, - CanBroadcast, - IsLoopBack, - IsPointToPoint, - CanMulticast, - }; - - typedef QFlags InterfaceFlags; - QNetworkInterface(); - QNetworkInterface(const QNetworkInterface &other); - ~QNetworkInterface(); - bool isValid() const; - QString name() const; - QNetworkInterface::InterfaceFlags flags() const; - QString hardwareAddress() const; - QList addressEntries() const; - static QNetworkInterface interfaceFromName(const QString &name); - static QNetworkInterface interfaceFromIndex(int index); - static QList allInterfaces(); - static QList allAddresses(); - int index() const; - QString humanReadableName() const; - void swap(QNetworkInterface &other /Constrained/); - static int interfaceIndexFromName(const QString &name); - static QString interfaceNameFromIndex(int index); - - enum InterfaceType - { - Unknown, - Loopback, - Virtual, - Ethernet, - Slip, - CanBus, - Ppp, - Fddi, - Wifi, - Ieee80211, - Phonet, - Ieee802154, - SixLoWPAN, - Ieee80216, - Ieee1394, - }; - - QNetworkInterface::InterfaceType type() const; - int maximumTransmissionUnit() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkproxy.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkproxy.sip deleted file mode 100644 index 00c17cb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkproxy.sip +++ /dev/null @@ -1,139 +0,0 @@ -// qnetworkproxy.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkProxy -{ -%TypeHeaderCode -#include -%End - -public: - enum ProxyType - { - DefaultProxy, - Socks5Proxy, - NoProxy, - HttpProxy, - HttpCachingProxy, - FtpCachingProxy, - }; - - QNetworkProxy(); - QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString()); - QNetworkProxy(const QNetworkProxy &other); - ~QNetworkProxy(); - void setType(QNetworkProxy::ProxyType type); - QNetworkProxy::ProxyType type() const; - void setUser(const QString &userName); - QString user() const; - void setPassword(const QString &password); - QString password() const; - void setHostName(const QString &hostName); - QString hostName() const; - void setPort(quint16 port); - quint16 port() const; - static void setApplicationProxy(const QNetworkProxy &proxy); - static QNetworkProxy applicationProxy(); - bool isCachingProxy() const; - bool isTransparentProxy() const; - bool operator==(const QNetworkProxy &other) const; - bool operator!=(const QNetworkProxy &other) const; - - enum Capability /BaseType=Flag/ - { - TunnelingCapability, - ListeningCapability, - UdpTunnelingCapability, - CachingCapability, - HostNameLookupCapability, - SctpTunnelingCapability, - SctpListeningCapability, - }; - - typedef QFlags Capabilities; - void setCapabilities(QNetworkProxy::Capabilities capab); - QNetworkProxy::Capabilities capabilities() const; - void swap(QNetworkProxy &other /Constrained/); - QVariant header(QNetworkRequest::KnownHeaders header) const; - void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); - bool hasRawHeader(const QByteArray &headerName) const; - QList rawHeaderList() const; - QByteArray rawHeader(const QByteArray &headerName) const; - void setRawHeader(const QByteArray &headerName, const QByteArray &value); -}; - -class QNetworkProxyQuery -{ -%TypeHeaderCode -#include -%End - -public: - enum QueryType - { - TcpSocket, - UdpSocket, - TcpServer, - UrlRequest, - SctpSocket, - SctpServer, - }; - - QNetworkProxyQuery(); - QNetworkProxyQuery(const QUrl &requestUrl, QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::UrlRequest); - QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpSocket); - QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpServer); - QNetworkProxyQuery(const QNetworkProxyQuery &other); - ~QNetworkProxyQuery(); - bool operator==(const QNetworkProxyQuery &other) const; - bool operator!=(const QNetworkProxyQuery &other) const; - QNetworkProxyQuery::QueryType queryType() const; - void setQueryType(QNetworkProxyQuery::QueryType type); - int peerPort() const; - void setPeerPort(int port); - QString peerHostName() const; - void setPeerHostName(const QString &hostname); - int localPort() const; - void setLocalPort(int port); - QString protocolTag() const; - void setProtocolTag(const QString &protocolTag); - QUrl url() const; - void setUrl(const QUrl &url); - void swap(QNetworkProxyQuery &other /Constrained/); -}; - -class QNetworkProxyFactory /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QNetworkProxyFactory(); - virtual ~QNetworkProxyFactory(); - virtual QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) = 0; - static void setApplicationProxyFactory(QNetworkProxyFactory *factory /Transfer/); - static QList proxyForQuery(const QNetworkProxyQuery &query); - static QList systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery()); - static void setUseSystemConfiguration(bool enable); - static bool usesSystemConfiguration(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkreply.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkreply.sip deleted file mode 100644 index 2b2c1a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkreply.sip +++ /dev/null @@ -1,185 +0,0 @@ -// qnetworkreply.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkReply : public QIODevice -{ -%TypeHeaderCode -#include -%End - -public: - enum NetworkError - { - NoError, - ConnectionRefusedError, - RemoteHostClosedError, - HostNotFoundError, - TimeoutError, - OperationCanceledError, - SslHandshakeFailedError, - UnknownNetworkError, - ProxyConnectionRefusedError, - ProxyConnectionClosedError, - ProxyNotFoundError, - ProxyTimeoutError, - ProxyAuthenticationRequiredError, - UnknownProxyError, - ContentAccessDenied, - ContentOperationNotPermittedError, - ContentNotFoundError, - AuthenticationRequiredError, - UnknownContentError, - ProtocolUnknownError, - ProtocolInvalidOperationError, - ProtocolFailure, - ContentReSendError, - TemporaryNetworkFailureError, - NetworkSessionFailedError, - BackgroundRequestNotAllowedError, - ContentConflictError, - ContentGoneError, - InternalServerError, - OperationNotImplementedError, - ServiceUnavailableError, - UnknownServerError, - TooManyRedirectsError, - InsecureRedirectError, - }; - - virtual ~QNetworkReply(); - virtual void abort() = 0; - virtual void close(); - virtual bool isSequential() const; - qint64 readBufferSize() const; - virtual void setReadBufferSize(qint64 size); - QNetworkAccessManager *manager() const; - QNetworkAccessManager::Operation operation() const; - QNetworkRequest request() const; - QNetworkReply::NetworkError error() const; - QUrl url() const; - QVariant header(QNetworkRequest::KnownHeaders header) const; -%If (Qt_6_7_0 -) - bool hasRawHeader(QAnyStringView headerName) const; -%End -%If (- Qt_6_7_0) - bool hasRawHeader(const QByteArray &headerName) const; -%End - QList rawHeaderList() const; -%If (Qt_6_7_0 -) - QByteArray rawHeader(QAnyStringView headerName) const; -%End -%If (- Qt_6_7_0) - QByteArray rawHeader(const QByteArray &headerName) const; -%End - QVariant attribute(QNetworkRequest::Attribute code) const; -%If (PyQt_SSL) - QSslConfiguration sslConfiguration() const; -%End -%If (PyQt_SSL) - void setSslConfiguration(const QSslConfiguration &configuration); -%End - -public slots: - virtual void ignoreSslErrors(); - -signals: - void metaDataChanged(); - void finished(); -%If (PyQt_SSL) - void encrypted(); -%End - void errorOccurred(QNetworkReply::NetworkError); -%If (PyQt_SSL) - void sslErrors(const QList &errors); -%End - void uploadProgress(qint64 bytesSent, qint64 bytesTotal); - void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); -%If (PyQt_SSL) - void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); -%End - void redirected(const QUrl &url); - void redirectAllowed(); - -protected: - explicit QNetworkReply(QObject *parent /TransferThis/ = 0); - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QNetworkReply::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - void setOperation(QNetworkAccessManager::Operation operation); - void setRequest(const QNetworkRequest &request); - void setError(QNetworkReply::NetworkError errorCode, const QString &errorString); - void setUrl(const QUrl &url); - void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); - void setRawHeader(const QByteArray &headerName, const QByteArray &value); - void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); - void setFinished(bool finished); - -public: - bool isFinished() const; - bool isRunning() const; -%If (PyQt_SSL) - void ignoreSslErrors(const QList &errors); -%End - typedef std::pair RawHeaderPair; - const QList> &rawHeaderPairs() const; - -protected: -%If (PyQt_SSL) - virtual void sslConfigurationImplementation(QSslConfiguration &) const; -%End -%If (PyQt_SSL) - virtual void setSslConfigurationImplementation(const QSslConfiguration &); -%End -%If (PyQt_SSL) - virtual void ignoreSslErrorsImplementation(const QList &); -%End - -signals: -%If (Qt_6_3_0 -) - void socketStartedConnecting(); -%End -%If (Qt_6_3_0 -) - void requestSent(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkrequest.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkrequest.sip deleted file mode 100644 index ed81b79..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qnetworkrequest.sip +++ /dev/null @@ -1,178 +0,0 @@ -// qnetworkrequest.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QNetworkRequest -{ -%TypeHeaderCode -#include -%End - -public: - enum KnownHeaders - { - ContentTypeHeader, - ContentLengthHeader, - LocationHeader, - LastModifiedHeader, - CookieHeader, - SetCookieHeader, - ContentDispositionHeader, - UserAgentHeader, - ServerHeader, - IfModifiedSinceHeader, - ETagHeader, - IfMatchHeader, - IfNoneMatchHeader, - }; - - enum Attribute - { - HttpStatusCodeAttribute, - HttpReasonPhraseAttribute, - RedirectionTargetAttribute, - ConnectionEncryptedAttribute, - CacheLoadControlAttribute, - CacheSaveControlAttribute, - SourceIsFromCacheAttribute, - DoNotBufferUploadDataAttribute, - HttpPipeliningAllowedAttribute, - HttpPipeliningWasUsedAttribute, - CustomVerbAttribute, - CookieLoadControlAttribute, - AuthenticationReuseAttribute, - CookieSaveControlAttribute, - BackgroundRequestAttribute, - EmitAllUploadProgressSignalsAttribute, - Http2AllowedAttribute, - Http2WasUsedAttribute, - OriginalContentLengthAttribute, - RedirectPolicyAttribute, - Http2DirectAttribute, - AutoDeleteReplyOnFinishAttribute, -%If (Qt_6_3_0 -) - ConnectionCacheExpiryTimeoutSecondsAttribute, -%End -%If (Qt_6_3_0 -) - Http2CleartextAllowedAttribute, -%End -%If (Qt_6_5_0 -) - UseCredentialsAttribute, -%End - User, - UserMax, - }; - - enum CacheLoadControl - { - AlwaysNetwork, - PreferNetwork, - PreferCache, - AlwaysCache, - }; - - enum LoadControl - { - Automatic, - Manual, - }; - - enum Priority - { - HighPriority, - NormalPriority, - LowPriority, - }; - - explicit QNetworkRequest(const QUrl &url); - QNetworkRequest(); - QNetworkRequest(const QNetworkRequest &other); - ~QNetworkRequest(); - QUrl url() const; - void setUrl(const QUrl &url); - QVariant header(QNetworkRequest::KnownHeaders header) const; - void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); -%If (Qt_6_7_0 -) - bool hasRawHeader(QAnyStringView headerName) const; -%End -%If (- Qt_6_7_0) - bool hasRawHeader(const QByteArray &headerName) const; -%End - QList rawHeaderList() const; -%If (Qt_6_7_0 -) - QByteArray rawHeader(QAnyStringView headerName) const; -%End -%If (- Qt_6_7_0) - QByteArray rawHeader(const QByteArray &headerName) const; -%End - void setRawHeader(const QByteArray &headerName, const QByteArray &value); - QVariant attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue = QVariant()) const; - void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); -%If (PyQt_SSL) - QSslConfiguration sslConfiguration() const; -%End -%If (PyQt_SSL) - void setSslConfiguration(const QSslConfiguration &configuration); -%End - bool operator==(const QNetworkRequest &other) const; - bool operator!=(const QNetworkRequest &other) const; - void setOriginatingObject(QObject *object /KeepReference/); - QObject *originatingObject() const; - QNetworkRequest::Priority priority() const; - void setPriority(QNetworkRequest::Priority priority); - void swap(QNetworkRequest &other /Constrained/); - int maximumRedirectsAllowed() const; - void setMaximumRedirectsAllowed(int maximumRedirectsAllowed); - - enum RedirectPolicy - { - ManualRedirectPolicy, - NoLessSafeRedirectPolicy, - SameOriginRedirectPolicy, - UserVerifiedRedirectPolicy, - }; - - QString peerVerifyName() const; - void setPeerVerifyName(const QString &peerName); -%If (Qt_6_5_0 -) - QHttp1Configuration http1Configuration() const; -%End - QHttp2Configuration http2Configuration() const; -%If (Qt_6_5_0 -) - void setHttp1Configuration(const QHttp1Configuration &configuration); -%End - void setHttp2Configuration(const QHttp2Configuration &configuration); - - enum TransferTimeoutConstant - { - DefaultTransferTimeoutConstant, - }; - - int transferTimeout() const; - // In Qt v6.7 this was replaced by two overloads but we need the optional keyword argument. - void setTransferTimeout(int timeout = QNetworkRequest::DefaultTransferTimeoutConstant); -%If (Qt_6_2_0 -) - qint64 decompressedSafetyCheckThreshold() const; -%End -%If (Qt_6_2_0 -) - void setDecompressedSafetyCheckThreshold(qint64 threshold); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qocspresponse.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qocspresponse.sip deleted file mode 100644 index 505d449..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qocspresponse.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qocspresponse.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) -%ModuleCode -#include -%End -%End - -%If (PyQt_SSL) - -enum class QOcspCertificateStatus -{ - Good, - Revoked, - Unknown, -}; - -%End -%If (PyQt_SSL) - -enum class QOcspRevocationReason -{ - None, - Unspecified, - KeyCompromise, - CACompromise, - AffiliationChanged, - Superseded, - CessationOfOperation, - CertificateHold, - RemoveFromCRL, -}; - -%End -%If (PyQt_SSL) - -class QOcspResponse -{ -%TypeHeaderCode -#include -%End - -public: - QOcspResponse(); - QOcspResponse(const QOcspResponse &other); - ~QOcspResponse(); - QOcspCertificateStatus certificateStatus() const; - QOcspRevocationReason revocationReason() const; - QSslCertificate responder() const; - QSslCertificate subject() const; - void swap(QOcspResponse &other); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (PyQt_SSL) -bool operator==(const QOcspResponse &lhs, const QOcspResponse &rhs); -%End -%If (PyQt_SSL) -bool operator!=(const QOcspResponse &lhs, const QOcspResponse &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpassworddigestor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpassworddigestor.sip deleted file mode 100644 index 145d11a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpassworddigestor.sip +++ /dev/null @@ -1,35 +0,0 @@ -// qpassworddigestor.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -namespace QPasswordDigestor -{ -%TypeHeaderCode -#include -%End - - QByteArray deriveKeyPbkdf1(QCryptographicHash::Algorithm algorithm, const QByteArray &password, const QByteArray &salt, int iterations, quint64 dkLen); - QByteArray deriveKeyPbkdf2(QCryptographicHash::Algorithm algorithm, const QByteArray &password, const QByteArray &salt, int iterations, quint64 dkLen); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qhash.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qhash.sip deleted file mode 100644 index c92cdef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qhash.sip +++ /dev/null @@ -1,132 +0,0 @@ -// This is the SIP interface definition for the QHash based mapped types -// specific to the QtNetwork module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QHash - /TypeHint="Dict[QNetworkRequest.Attribute, QVariant]", - TypeHintValue="{}"/ -{ -%TypeHeaderCode -#include -#include -#include -%End - -%ConvertFromTypeCode - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QHash::const_iterator it = sipCpp->constBegin(); - QHash::const_iterator end = sipCpp->constEnd(); - - while (it != end) - { - PyObject *kobj = sipConvertFromEnum(it.key(), - sipType_QNetworkRequest_Attribute); - - if (!kobj) - { - Py_DECREF(d); - - return 0; - } - - QVariant *v = new QVariant(it.value()); - PyObject *vobj = sipConvertFromNewType(v, sipType_QVariant, - sipTransferObj); - - if (!vobj) - { - delete v; - Py_DECREF(kobj); - Py_DECREF(d); - - return 0; - } - - int rc = PyDict_SetItem(d, kobj, vobj); - - Py_DECREF(vobj); - Py_DECREF(kobj); - - if (rc < 0) - { - Py_DECREF(d); - - return 0; - } - - ++it; - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - QHash *qh = new QHash; - - Py_ssize_t pos = 0; - PyObject *kobj, *vobj; - - while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) - { - int k = sipConvertToEnum(kobj, sipType_QNetworkRequest_Attribute); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "a key has type '%s' but 'QNetworkRequest.Attribute' is expected", - sipPyTypeName(Py_TYPE(kobj))); - - delete qh; - *sipIsErr = 1; - - return 0; - } - - int vstate; - QVariant *v = reinterpret_cast( - sipForceConvertToType(vobj, sipType_QVariant, sipTransferObj, - SIP_NOT_NONE, &vstate, sipIsErr)); - - if (*sipIsErr) - { - // Any error must be internal, so leave the exception as it is. - - delete qh; - - return 0; - } - - qh->insert(static_cast(k), *v); - - sipReleaseType(v, sipType_QVariant, vstate); - } - - *sipCppPtr = qh; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qlist.sip deleted file mode 100644 index 2d53d6c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qlist.sip +++ /dev/null @@ -1,349 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtNetwork module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_1_0 -) - -%If (PyQt_SSL) - -%MappedType QList - /TypeHintIn="Iterable[QSsl.SslProtocol]", - TypeHintOut="List[QSsl.SslProtocol]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QSsl_SslProtocol); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QSsl_SslProtocol); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QSsl.SslProtocol' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End - -%End - - -%If (Qt_6_1_0 -) - -%If (PyQt_SSL) - -%MappedType QList - /TypeHintIn="Iterable[QSsl.ImplementedClass]", - TypeHintOut="List[QSsl.ImplementedClass]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(static_cast(sipCpp->at(i)), - sipType_QSsl_ImplementedClass); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QSsl_ImplementedClass); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QSsl.ImplementedClass' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End - -%End - - -%If (Qt_6_1_0 -) - -%If (PyQt_SSL) - -%MappedType QList - /TypeHintIn="Iterable[QSsl.SupportedFeature]", - TypeHintOut="List[QSsl.SupportedFeature]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(static_cast(sipCpp->at(i)), - sipType_QSsl_SupportedFeature); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QSsl_SupportedFeature); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QSsl.SupportedFeature' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qmap.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qmap.sip deleted file mode 100644 index e386d82..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qpynetwork_qmap.sip +++ /dev/null @@ -1,208 +0,0 @@ -// This is the SIP interface definition for the QMap and QMultiMap based mapped -// types specific to the QtNetwork module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -%MappedType QMultiMap - /TypeHintOut="Dict[QSsl.AlternativeNameEntryType, List[QString]]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - // Get the enum member objects that are the dictionary keys. - static PyObject *email_entry = 0; - - if (!email_entry) - { - email_entry = sipConvertFromEnum(static_cast(QSsl::EmailEntry), - sipType_QSsl_AlternativeNameEntryType); - if (!email_entry) - return 0; - } - - static PyObject *dns_entry = 0; - - if (!dns_entry) - { - dns_entry = sipConvertFromEnum(static_cast(QSsl::DnsEntry), - sipType_QSsl_AlternativeNameEntryType); - if (!dns_entry) - return 0; - } - - static PyObject *ip_address_entry = 0; - - if (!ip_address_entry) - { - ip_address_entry = sipConvertFromEnum( - static_cast(QSsl::IpAddressEntry), - sipType_QSsl_AlternativeNameEntryType); - if (!ip_address_entry) - return 0; - } - - // Create the dictionary. - PyObject *d = PyDict_New(); - - if (!d) - return 0; - - QList vl; - - // Handle the Qssl::EmailEntry key. - vl = sipCpp->values(QSsl::EmailEntry); - - if (!vl.isEmpty()) - { - PyObject *vlobj = PyList_New(vl.count()); - - if (!vlobj) - { - Py_DECREF(d); - return 0; - } - - int rc = PyDict_SetItem(d, email_entry, vlobj); - - Py_DECREF(vlobj); - - if (rc < 0) - { - Py_DECREF(d); - return 0; - } - - for (int i = 0; i < vl.count(); ++i) - { - QString *s = new QString(vl.at(i)); - PyObject *vobj = sipConvertFromNewType(s, sipType_QString, - sipTransferObj); - - if (!vobj) - { - delete s; - Py_DECREF(d); - return 0; - } - - PyList_SetItem(vlobj, i, vobj); - } - } - - // Handle the Qssl::DnsEntry key. - vl = sipCpp->values(QSsl::DnsEntry); - - if (!vl.isEmpty()) - { - PyObject *vlobj = PyList_New(vl.count()); - - if (!vlobj) - { - Py_DECREF(d); - return 0; - } - - int rc = PyDict_SetItem(d, dns_entry, vlobj); - - Py_DECREF(vlobj); - - if (rc < 0) - { - Py_DECREF(d); - return 0; - } - - for (int i = 0; i < vl.count(); ++i) - { - QString *s = new QString(vl.at(i)); - PyObject *vobj = sipConvertFromNewType(s, sipType_QString, - sipTransferObj); - - if (!vobj) - { - delete s; - Py_DECREF(d); - return 0; - } - - PyList_SetItem(vlobj, i, vobj); - } - } - - // Handle the Qssl::IpAddressEntry key. - vl = sipCpp->values(QSsl::IpAddressEntry); - - if (!vl.isEmpty()) - { - PyObject *vlobj = PyList_New(vl.count()); - - if (!vlobj) - { - Py_DECREF(d); - return 0; - } - - int rc = PyDict_SetItem(d, ip_address_entry, vlobj); - - Py_DECREF(vlobj); - - if (rc < 0) - { - Py_DECREF(d); - return 0; - } - - for (int i = 0; i < vl.count(); ++i) - { - QString *s = new QString(vl.at(i)); - PyObject *vobj = sipConvertFromNewType(s, sipType_QString, - sipTransferObj); - - if (!vobj) - { - delete s; - Py_DECREF(d); - return 0; - } - - PyList_SetItem(vlobj, i, vobj); - } - } - - return d; -%End - -%ConvertToTypeCode - if (!sipIsErr) - return PyDict_Check(sipPy); - - PyErr_SetString(PyExc_NotImplementedError, - "converting to QMultiMap is unsupported"); - - return 0; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssl.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssl.sip deleted file mode 100644 index 2f85f31..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssl.sip +++ /dev/null @@ -1,169 +0,0 @@ -// qssl.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -namespace QSsl -{ -%TypeHeaderCode -#include -%End - - enum KeyType - { - PrivateKey, - PublicKey, - }; - - enum EncodingFormat - { - Pem, - Der, - }; - - enum KeyAlgorithm - { - Opaque, - Rsa, - Dsa, - Ec, - Dh, - }; - - enum AlternativeNameEntryType - { - EmailEntry, - DnsEntry, - IpAddressEntry, - }; - - enum SslProtocol - { - UnknownProtocol, - TlsV1_0, - TlsV1_0OrLater, - TlsV1_1, - TlsV1_1OrLater, - TlsV1_2, - TlsV1_2OrLater, - AnyProtocol, - SecureProtocols, - DtlsV1_0, - DtlsV1_0OrLater, - DtlsV1_2, - DtlsV1_2OrLater, - TlsV1_3, - TlsV1_3OrLater, - }; - - enum SslOption /BaseType=Flag/ - { - SslOptionDisableEmptyFragments, - SslOptionDisableSessionTickets, - SslOptionDisableCompression, - SslOptionDisableServerNameIndication, - SslOptionDisableLegacyRenegotiation, - SslOptionDisableSessionSharing, - SslOptionDisableSessionPersistence, - SslOptionDisableServerCipherPreference, - }; - - typedef QFlags SslOptions; - - enum class AlertLevel - { - Warning, - Fatal, - Unknown, - }; - - enum class AlertType - { - CloseNotify, - UnexpectedMessage, - BadRecordMac, - RecordOverflow, - DecompressionFailure, - HandshakeFailure, - NoCertificate, - BadCertificate, - UnsupportedCertificate, - CertificateRevoked, - CertificateExpired, - CertificateUnknown, - IllegalParameter, - UnknownCa, - AccessDenied, - DecodeError, - DecryptError, - ExportRestriction, - ProtocolVersion, - InsufficientSecurity, - InternalError, - InappropriateFallback, - UserCancelled, - NoRenegotiation, - MissingExtension, - UnsupportedExtension, - CertificateUnobtainable, - UnrecognizedName, - BadCertificateStatusResponse, - BadCertificateHashValue, - UnknownPskIdentity, - CertificateRequired, - NoApplicationProtocol, - UnknownAlertMessage, - }; - -%If (Qt_6_1_0 -) - - enum class ImplementedClass - { - Key, - Certificate, - Socket, - DiffieHellman, - EllipticCurve, - Dtls, -%If (Qt_6_2_0 -) - DtlsCookie, -%End - }; - -%End -%If (Qt_6_1_0 -) - - enum class SupportedFeature - { - CertificateVerification, - ClientSideAlpn, - ServerSideAlpn, - Ocsp, - Psk, - SessionTicket, - Alerts, - }; - -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificate.sip deleted file mode 100644 index 1b575ad..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificate.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qsslcertificate.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslCertificate -{ -%TypeHeaderCode -#include -%End - -public: - enum SubjectInfo - { - Organization, - CommonName, - LocalityName, - OrganizationalUnitName, - CountryName, - StateOrProvinceName, - DistinguishedNameQualifier, - SerialNumber, - EmailAddress, - }; - - QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem) /ReleaseGIL/; - QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem); - QSslCertificate(const QSslCertificate &other); - ~QSslCertificate(); - bool operator==(const QSslCertificate &other) const; - bool operator!=(const QSslCertificate &other) const; - bool isNull() const; - void clear(); - QByteArray version() const; - QByteArray serialNumber() const; - QByteArray digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const; - QStringList issuerInfo(QSslCertificate::SubjectInfo info) const; - QStringList issuerInfo(const QByteArray &attribute) const; - QStringList subjectInfo(QSslCertificate::SubjectInfo info) const; - QStringList subjectInfo(const QByteArray &attribute) const; - QMultiMap subjectAlternativeNames() const; - QDateTime effectiveDate() const; - QDateTime expiryDate() const; - QSslKey publicKey() const; - QByteArray toPem() const; - QByteArray toDer() const; - static QList fromPath(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString); - static QList fromDevice(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem); - static QList fromData(const QByteArray &data, QSsl::EncodingFormat format = QSsl::Pem); - Qt::HANDLE handle() const; - void swap(QSslCertificate &other /Constrained/); - bool isBlacklisted() const; - QList subjectInfoAttributes() const; - QList issuerInfoAttributes() const; - QList extensions() const; - QString toText() const; - static QList verify(const QList &certificateChain, const QString &hostName = QString()); - bool isSelfSigned() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - static bool importPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *certificate, QList *caCertificates = 0, const QByteArray &passPhrase = QByteArray()) /ReleaseGIL/; - QString issuerDisplayName() const; - QString subjectDisplayName() const; - - enum class PatternSyntax - { - RegularExpression, - Wildcard, - FixedString, - }; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificateextension.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificateextension.sip deleted file mode 100644 index 9f2aa05..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcertificateextension.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qsslcertificateextension.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslCertificateExtension -{ -%TypeHeaderCode -#include -%End - -public: - QSslCertificateExtension(); - QSslCertificateExtension(const QSslCertificateExtension &other); - ~QSslCertificateExtension(); - void swap(QSslCertificateExtension &other /Constrained/); - QString oid() const; - QString name() const; - QVariant value() const; - bool isCritical() const; - bool isSupported() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcipher.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcipher.sip deleted file mode 100644 index 1c9d730..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslcipher.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qsslcipher.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslCipher -{ -%TypeHeaderCode -#include -%End - -public: - QSslCipher(); - explicit QSslCipher(const QString &name); - QSslCipher(const QString &name, QSsl::SslProtocol protocol); - QSslCipher(const QSslCipher &other); - ~QSslCipher(); - bool operator==(const QSslCipher &other) const; - bool operator!=(const QSslCipher &other) const; - bool isNull() const; - QString name() const; - int supportedBits() const; - int usedBits() const; - QString keyExchangeMethod() const; - QString authenticationMethod() const; - QString encryptionMethod() const; - QString protocolString() const; - QSsl::SslProtocol protocol() const; - void swap(QSslCipher &other /Constrained/); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslconfiguration.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslconfiguration.sip deleted file mode 100644 index b3936db..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslconfiguration.sip +++ /dev/null @@ -1,124 +0,0 @@ -// qsslconfiguration.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslConfiguration -{ -%TypeHeaderCode -#include -%End - -public: - QSslConfiguration(); - QSslConfiguration(const QSslConfiguration &other); - ~QSslConfiguration(); - bool isNull() const; - QSsl::SslProtocol protocol() const; - void setProtocol(QSsl::SslProtocol protocol); - QSslSocket::PeerVerifyMode peerVerifyMode() const; - void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode); - int peerVerifyDepth() const; - void setPeerVerifyDepth(int depth); - QSslCertificate localCertificate() const; - void setLocalCertificate(const QSslCertificate &certificate); - QSslCertificate peerCertificate() const; - QList peerCertificateChain() const; - QSslCipher sessionCipher() const; - QSslKey privateKey() const; - void setPrivateKey(const QSslKey &key); - QList ciphers() const; - void setCiphers(const QString &ciphers); - void setCiphers(const QList &ciphers); - QList caCertificates() const; - void setCaCertificates(const QList &certificates); - static QSslConfiguration defaultConfiguration(); - static void setDefaultConfiguration(const QSslConfiguration &configuration); - bool operator==(const QSslConfiguration &other) const; - bool operator!=(const QSslConfiguration &other) const; - void setSslOption(QSsl::SslOption option, bool on); - bool testSslOption(QSsl::SslOption option) const; - void swap(QSslConfiguration &other /Constrained/); - QList localCertificateChain() const; - void setLocalCertificateChain(const QList &localChain); - QByteArray sessionTicket() const; - void setSessionTicket(const QByteArray &sessionTicket); - int sessionTicketLifeTimeHint() const; - - enum NextProtocolNegotiationStatus - { - NextProtocolNegotiationNone, - NextProtocolNegotiationNegotiated, - NextProtocolNegotiationUnsupported, - }; - - void setAllowedNextProtocols(const QList &protocols); - QList allowedNextProtocols() const; - QByteArray nextNegotiatedProtocol() const; - QSslConfiguration::NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const; - QSsl::SslProtocol sessionProtocol() const; - static QList supportedCiphers(); - static QList systemCaCertificates(); - QList ellipticCurves() const; - void setEllipticCurves(const QList &curves); - static QList supportedEllipticCurves(); - QSslKey ephemeralServerKey() const; - QByteArray preSharedKeyIdentityHint() const; - void setPreSharedKeyIdentityHint(const QByteArray &hint); - QSslDiffieHellmanParameters diffieHellmanParameters() const; - void setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams); - QMap backendConfiguration() const; - void setBackendConfigurationOption(const QByteArray &name, const QVariant &value); - void setBackendConfiguration(const QMap &backendConfiguration = QMap()); - void setOcspStaplingEnabled(bool enable); - bool ocspStaplingEnabled() const; - void addCaCertificate(const QSslCertificate &certificate); - bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString); - void addCaCertificates(const QList &certificates); - bool handshakeMustInterruptOnError() const; - void setHandshakeMustInterruptOnError(bool interrupt); - bool missingCertificateIsFatal() const; - void setMissingCertificateIsFatal(bool cannotRecover); - static const char *NextProtocolHttp1_1 /Encoding="None",NoSetter/; -%If (Qt_6_3_0 -) -%If (PyQt_DTLS) - bool dtlsCookieVerificationEnabled() const; -%End -%End -%If (Qt_6_3_0 -) -%If (PyQt_DTLS) - void setDtlsCookieVerificationEnabled(bool enable); -%End -%End -%If (Qt_6_3_0 -) -%If (PyQt_DTLS) - static QSslConfiguration defaultDtlsConfiguration(); -%End -%End -%If (Qt_6_3_0 -) -%If (PyQt_DTLS) - static void setDefaultDtlsConfiguration(const QSslConfiguration &configuration); -%End -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssldiffiehellmanparameters.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssldiffiehellmanparameters.sip deleted file mode 100644 index 17d205a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qssldiffiehellmanparameters.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qssldiffiehellmanparameters.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslDiffieHellmanParameters -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - NoError, - InvalidInputDataError, - UnsafeParametersError, - }; - - QSslDiffieHellmanParameters(); - QSslDiffieHellmanParameters(const QSslDiffieHellmanParameters &other); - ~QSslDiffieHellmanParameters(); - void swap(QSslDiffieHellmanParameters &other /Constrained/); - static QSslDiffieHellmanParameters defaultParameters(); - static QSslDiffieHellmanParameters fromEncoded(const QByteArray &encoded, QSsl::EncodingFormat encoding = QSsl::Pem); - static QSslDiffieHellmanParameters fromEncoded(QIODevice *device, QSsl::EncodingFormat encoding = QSsl::Pem); - bool isEmpty() const; - bool isValid() const; - QSslDiffieHellmanParameters::Error error() const; - QString errorString() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (PyQt_SSL) -bool operator==(const QSslDiffieHellmanParameters &lhs, const QSslDiffieHellmanParameters &rhs); -%End -%If (PyQt_SSL) -bool operator!=(const QSslDiffieHellmanParameters &lhs, const QSslDiffieHellmanParameters &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslellipticcurve.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslellipticcurve.sip deleted file mode 100644 index 3203043..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslellipticcurve.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qsslellipticcurve.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslEllipticCurve -{ -%TypeHeaderCode -#include -%End - -public: - QSslEllipticCurve(); - static QSslEllipticCurve fromShortName(const QString &name); - static QSslEllipticCurve fromLongName(const QString &name); - QString shortName() const; - QString longName() const; - bool isValid() const; - bool isTlsNamedCurve() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (PyQt_SSL) -bool operator==(QSslEllipticCurve lhs, QSslEllipticCurve rhs); -%End -%If (PyQt_SSL) -bool operator!=(QSslEllipticCurve lhs, QSslEllipticCurve rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslerror.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslerror.sip deleted file mode 100644 index 20d7ba1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslerror.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qsslerror.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslError -{ -%TypeHeaderCode -#include -%End - -public: - enum SslError - { - UnspecifiedError, - NoError, - UnableToGetIssuerCertificate, - UnableToDecryptCertificateSignature, - UnableToDecodeIssuerPublicKey, - CertificateSignatureFailed, - CertificateNotYetValid, - CertificateExpired, - InvalidNotBeforeField, - InvalidNotAfterField, - SelfSignedCertificate, - SelfSignedCertificateInChain, - UnableToGetLocalIssuerCertificate, - UnableToVerifyFirstCertificate, - CertificateRevoked, - InvalidCaCertificate, - PathLengthExceeded, - InvalidPurpose, - CertificateUntrusted, - CertificateRejected, - SubjectIssuerMismatch, - AuthorityIssuerSerialNumberMismatch, - NoPeerCertificate, - HostNameMismatch, - NoSslSupport, - CertificateBlacklisted, - CertificateStatusUnknown, - OcspNoResponseFound, - OcspMalformedRequest, - OcspMalformedResponse, - OcspInternalError, - OcspTryLater, - OcspSigRequred, - OcspUnauthorized, - OcspResponseCannotBeTrusted, - OcspResponseCertIdUnknown, - OcspResponseExpired, - OcspStatusUnknown, - }; - - QSslError(); - explicit QSslError(QSslError::SslError error); - QSslError(QSslError::SslError error, const QSslCertificate &certificate); - QSslError(const QSslError &other); - ~QSslError(); - QSslError::SslError error() const; - QString errorString() const; - QSslCertificate certificate() const; - bool operator==(const QSslError &other) const; - bool operator!=(const QSslError &other) const; - void swap(QSslError &other /Constrained/); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslkey.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslkey.sip deleted file mode 100644 index adf08c9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslkey.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qsslkey.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslKey -{ -%TypeHeaderCode -#include -%End - -public: - QSslKey(); - QSslKey(const QByteArray &encoded, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray()); - QSslKey(QIODevice *device, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray()); - QSslKey(Qt::HANDLE handle, QSsl::KeyType type = QSsl::PrivateKey); - QSslKey(const QSslKey &other); - ~QSslKey(); - bool isNull() const; - void clear(); - int length() const; - QSsl::KeyType type() const; - QSsl::KeyAlgorithm algorithm() const; - QByteArray toPem(const QByteArray &passPhrase = QByteArray()) const; - QByteArray toDer(const QByteArray &passPhrase = QByteArray()) const; - Qt::HANDLE handle() const; - bool operator==(const QSslKey &key) const; - bool operator!=(const QSslKey &key) const; - void swap(QSslKey &other /Constrained/); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip deleted file mode 100644 index 4baf281..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qsslpresharedkeyauthenticator.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslPreSharedKeyAuthenticator -{ -%TypeHeaderCode -#include -%End - -public: - QSslPreSharedKeyAuthenticator(); - QSslPreSharedKeyAuthenticator(const QSslPreSharedKeyAuthenticator &authenticator); - ~QSslPreSharedKeyAuthenticator(); - void swap(QSslPreSharedKeyAuthenticator &authenticator /Constrained/); - QByteArray identityHint() const; - void setIdentity(const QByteArray &identity); - QByteArray identity() const; - int maximumIdentityLength() const; - void setPreSharedKey(const QByteArray &preSharedKey); - QByteArray preSharedKey() const; - int maximumPreSharedKeyLength() const; -}; - -%End -%If (PyQt_SSL) -bool operator==(const QSslPreSharedKeyAuthenticator &lhs, const QSslPreSharedKeyAuthenticator &rhs); -%End -%If (PyQt_SSL) -bool operator!=(const QSslPreSharedKeyAuthenticator &lhs, const QSslPreSharedKeyAuthenticator &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslserver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslserver.sip deleted file mode 100644 index 99f0a40..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslserver.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qsslserver.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_4_0 -) -%If (PyQt_SSL) - -class QSslServer : public QTcpServer -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSslServer(QObject *parent /TransferThis/ = 0); - virtual ~QSslServer(); - void setSslConfiguration(const QSslConfiguration &sslConfiguration); - QSslConfiguration sslConfiguration() const; - void setHandshakeTimeout(int timeout); - int handshakeTimeout() const; - -signals: - void sslErrors(QSslSocket *socket, const QList &errors); - void peerVerifyError(QSslSocket *socket, const QSslError &error); - void errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError error); - void preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator); - void alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); - void alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); - void handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error); - void startedEncryptionHandshake(QSslSocket *socket); - -protected: - virtual void incomingConnection(qintptr socket); -}; - -%End -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslsocket.sip deleted file mode 100644 index 2bce80a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qsslsocket.sip +++ /dev/null @@ -1,225 +0,0 @@ -// qsslsocket.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_SSL) - -class QSslSocket : public QTcpSocket -{ -%TypeHeaderCode -#include -%End - -public: - enum SslMode - { - UnencryptedMode, - SslClientMode, - SslServerMode, - }; - - explicit QSslSocket(QObject *parent /TransferThis/ = 0); - virtual ~QSslSocket(); - void connectToHostEncrypted(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; - void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; - virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite); - QSslSocket::SslMode mode() const; - bool isEncrypted() const; - QSsl::SslProtocol protocol() const; - void setProtocol(QSsl::SslProtocol protocol); - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - virtual bool canReadLine() const; - virtual void close(); - virtual bool atEnd() const; - void setLocalCertificate(const QSslCertificate &certificate); - void setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem); - QSslCertificate localCertificate() const; - QSslCertificate peerCertificate() const; - QList peerCertificateChain() const; - QSslCipher sessionCipher() const; - void setPrivateKey(const QSslKey &key); - void setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray()); - QSslKey privateKey() const; - virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/; - bool waitForEncrypted(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; - static bool supportsSsl(); - -public slots: - void startClientEncryption(); - void startServerEncryption(); - void ignoreSslErrors(); - -signals: - void encrypted(); - void sslErrors(const QList &errors); - void modeChanged(QSslSocket::SslMode newMode); - void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QSslSocket::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(SIP_PYBUFFER) /ReleaseGIL/ [qint64 (const char *data, qint64 len)]; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = sipSelfWasArg ? - sipCpp->QSslSocket::writeData(reinterpret_cast(bi.bi_buf), bi.bi_len) : - sipCpp->writeData(reinterpret_cast(bi.bi_buf), bi.bi_len); - #else - sipRes = sipCpp->sipProtectVirt_writeData(sipSelfWasArg, reinterpret_cast(bi.bi_buf), - bi.bi_len); - #endif - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - virtual qint64 skipData(qint64 maxSize) /ReleaseGIL/; - -public: - enum PeerVerifyMode - { - VerifyNone, - QueryPeer, - VerifyPeer, - AutoVerifyPeer, - }; - - QSslSocket::PeerVerifyMode peerVerifyMode() const; - void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode); - int peerVerifyDepth() const; - void setPeerVerifyDepth(int depth); - virtual void setReadBufferSize(qint64 size); - qint64 encryptedBytesAvailable() const; - qint64 encryptedBytesToWrite() const; - QSslConfiguration sslConfiguration() const; - void setSslConfiguration(const QSslConfiguration &config); - -signals: - void peerVerifyError(const QSslError &error); - void encryptedBytesWritten(qint64 totalBytes); - void newSessionTicketReceived(); - -public: - virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value); - virtual QVariant socketOption(QAbstractSocket::SocketOption option); - void ignoreSslErrors(const QList &errors); - QString peerVerifyName() const; - void setPeerVerifyName(const QString &hostName); - virtual void resume() /ReleaseGIL/; - virtual void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode mode = QIODeviceBase::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; - virtual void disconnectFromHost() /ReleaseGIL/; - static long sslLibraryVersionNumber(); - static QString sslLibraryVersionString(); - void setLocalCertificateChain(const QList &localChain); - QList localCertificateChain() const; - QSsl::SslProtocol sessionProtocol() const; - static long sslLibraryBuildVersionNumber(); - static QString sslLibraryBuildVersionString(); - QList ocspResponses() const; - QList sslHandshakeErrors() const; - void continueInterruptedHandshake(); - -signals: - void alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); - void alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); - void handshakeInterruptedOnError(const QSslError &error); - -public: -%If (Qt_6_1_0 -) - static QList availableBackends(); -%End -%If (Qt_6_1_0 -) - static QString activeBackend(); -%End -%If (Qt_6_1_0 -) - static bool setActiveBackend(const QString &backendName); -%End -%If (Qt_6_1_0 -) - static QList supportedProtocols(const QString &backendName = {}); -%End -%If (Qt_6_1_0 -) - static bool isProtocolSupported(QSsl::SslProtocol protocol, const QString &backendName = {}); -%End -%If (Qt_6_1_0 -) - static QList implementedClasses(const QString &backendName = {}); -%End -%If (Qt_6_1_0 -) - static bool isClassImplemented(QSsl::ImplementedClass cl, const QString &backendName = {}); -%End -%If (Qt_6_1_0 -) - static QList supportedFeatures(const QString &backendName = {}); -%End -%If (Qt_6_1_0 -) - static bool isFeatureSupported(QSsl::SupportedFeature feat, const QString &backendName = {}); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpserver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpserver.sip deleted file mode 100644 index 74ad5d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpserver.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qtcpserver.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTcpServer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTcpServer(QObject *parent /TransferThis/ = 0); - virtual ~QTcpServer(); - bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0); - void close(); - bool isListening() const; - void setMaxPendingConnections(int numConnections); - int maxPendingConnections() const; - quint16 serverPort() const; - QHostAddress serverAddress() const; - qintptr socketDescriptor() const; - bool setSocketDescriptor(qintptr socketDescriptor); - bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/; - virtual bool hasPendingConnections() const; - virtual QTcpSocket *nextPendingConnection(); - QAbstractSocket::SocketError serverError() const; - QString errorString() const; - void setProxy(const QNetworkProxy &networkProxy); - QNetworkProxy proxy() const; - void pauseAccepting(); - void resumeAccepting(); - -protected: - virtual void incomingConnection(qintptr handle); - void addPendingConnection(QTcpSocket *socket); - -signals: - void newConnection(); - void acceptError(QAbstractSocket::SocketError socketError); - -public: -%If (Qt_6_3_0 -) - void setListenBacklogSize(int size); -%End -%If (Qt_6_3_0 -) - int listenBacklogSize() const; -%End - -signals: -%If (Qt_6_4_0 -) - void pendingConnectionAvailable(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpsocket.sip deleted file mode 100644 index d65c2da..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qtcpsocket.sip +++ /dev/null @@ -1,32 +0,0 @@ -// qtcpsocket.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTcpSocket : public QAbstractSocket -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTcpSocket(QObject *parent /TransferThis/ = 0); - virtual ~QTcpSocket(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qudpsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qudpsocket.sip deleted file mode 100644 index 183a55d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNetwork/qudpsocket.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qudpsocket.sip generated by MetaSIP -// -// This file is part of the QtNetwork Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUdpSocket : public QAbstractSocket -{ -%TypeHeaderCode -#include -%End - -public: - explicit QUdpSocket(QObject *parent /TransferThis/ = 0); - virtual ~QUdpSocket(); - bool hasPendingDatagrams() const; - qint64 pendingDatagramSize() const; - SIP_PYOBJECT readDatagram(qint64 maxlen, QHostAddress *host /Out/ = 0, quint16 *port = 0) /TypeHint="bytes",ReleaseGIL/; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - len = sipCpp->readDatagram(s, a0, a1, &a2); - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - QNetworkDatagram receiveDatagram(qint64 maxSize = -1) /ReleaseGIL/; - qint64 writeDatagram(SIP_PYBUFFER, const QHostAddress &, quint16) /ReleaseGIL/; -%MethodCode - sipBufferInfoDef bi; - - if (sipGetBufferInfo(a0, &bi) > 0) - { - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->writeDatagram(reinterpret_cast(bi.bi_buf), - bi.bi_len, *a1, a2); - Py_END_ALLOW_THREADS - - sipReleaseBufferInfo(&bi); - } - else - { - sipIsErr = 1; - } -%End - - qint64 writeDatagram(const QNetworkDatagram &datagram) /ReleaseGIL/; - bool joinMulticastGroup(const QHostAddress &groupAddress); - bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); - bool leaveMulticastGroup(const QHostAddress &groupAddress); - bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); - QNetworkInterface multicastInterface() const; - void setMulticastInterface(const QNetworkInterface &iface); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfc.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfc.toml deleted file mode 100644 index 1c3b01f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfc.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtNfc. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfcmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfcmod.sip deleted file mode 100644 index b54388c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/QtNfcmod.sip +++ /dev/null @@ -1,55 +0,0 @@ -// QtNfcmod.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtNfc, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qndeffilter.sip -%Include qndefmessage.sip -%Include qndefnfcsmartposterrecord.sip -%Include qndefnfctextrecord.sip -%Include qndefnfcurirecord.sip -%Include qndefrecord.sip -%Include qnearfieldmanager.sip -%Include qnearfieldtarget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndeffilter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndeffilter.sip deleted file mode 100644 index 5962e20..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndeffilter.sip +++ /dev/null @@ -1,58 +0,0 @@ -// qndeffilter.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefFilter -{ -%TypeHeaderCode -#include -%End - -public: - QNdefFilter(); - QNdefFilter(const QNdefFilter &other); - ~QNdefFilter(); - void clear(); - void setOrderMatch(bool on); - bool orderMatch() const; - - struct Record - { -%TypeHeaderCode -#include -%End - - QNdefRecord::TypeNameFormat typeNameFormat; - QByteArray type; - unsigned int minimum; - unsigned int maximum; - }; - - bool appendRecord(const QNdefFilter::Record &record); - bool appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1); - qsizetype recordCount() const /__len__/; - QNdefFilter::Record recordAt(qsizetype i) const; - bool match(const QNdefMessage &message) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefmessage.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefmessage.sip deleted file mode 100644 index 27fe984..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefmessage.sip +++ /dev/null @@ -1,74 +0,0 @@ -// qndefmessage.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefMessage -{ -%TypeHeaderCode -#include -%End - -public: - QNdefMessage(); - explicit QNdefMessage(const QNdefRecord &record); - QNdefMessage(const QNdefMessage &message); - QNdefMessage(const QList &records); - bool operator==(const QNdefMessage &other) const; - QByteArray toByteArray() const; - Py_ssize_t __len__() const; -%MethodCode - sipRes = sipCpp->count(); -%End - - QNdefRecord __getitem__(int i) const; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QNdefRecord(sipCpp->at((int)idx)); -%End - - void __setitem__(int i, const QNdefRecord &value); -%MethodCode - int len = sipCpp->count(); - - if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; - else - (*sipCpp)[a0] = *a1; -%End - - void __delitem__(int i); -%MethodCode - if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; - else - sipCpp->removeAt(a0); -%End - - static QNdefMessage fromByteArray(const QByteArray &message); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcsmartposterrecord.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcsmartposterrecord.sip deleted file mode 100644 index 2e98b44..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcsmartposterrecord.sip +++ /dev/null @@ -1,96 +0,0 @@ -// qndefnfcsmartposterrecord.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefNfcIconRecord : public QNdefRecord -{ -%TypeHeaderCode -#include -%End - -public: - QNdefNfcIconRecord(); - QNdefNfcIconRecord(const QNdefRecord &other); - void setData(const QByteArray &data); - QByteArray data() const; -}; - -%End -%If (Qt_6_2_0 -) - -class QNdefNfcSmartPosterRecord : public QNdefRecord -{ -%TypeHeaderCode -#include -%End - -public: - enum Action - { - UnspecifiedAction, - DoAction, - SaveAction, - EditAction, - }; - - QNdefNfcSmartPosterRecord(); - QNdefNfcSmartPosterRecord(const QNdefNfcSmartPosterRecord &other); - QNdefNfcSmartPosterRecord(const QNdefRecord &other); - ~QNdefNfcSmartPosterRecord(); - void setPayload(const QByteArray &payload); - bool hasTitle(const QString &locale = QString()) const; - bool hasAction() const; - bool hasIcon(const QByteArray &mimetype = QByteArray()) const; - bool hasSize() const; - bool hasTypeInfo() const; - qsizetype titleCount() const; - QString title(const QString &locale = QString()) const; - QNdefNfcTextRecord titleRecord(qsizetype index) const; - QList titleRecords() const; - bool addTitle(const QNdefNfcTextRecord &text); - bool addTitle(const QString &text, const QString &locale, QNdefNfcTextRecord::Encoding encoding); - bool removeTitle(const QNdefNfcTextRecord &text); - bool removeTitle(const QString &locale); - void setTitles(const QList &titles); - QUrl uri() const; - QNdefNfcUriRecord uriRecord() const; - void setUri(const QNdefNfcUriRecord &url); - void setUri(const QUrl &url); - QNdefNfcSmartPosterRecord::Action action() const; - void setAction(QNdefNfcSmartPosterRecord::Action act); - qsizetype iconCount() const; - QByteArray icon(const QByteArray &mimetype = QByteArray()) const; - QNdefNfcIconRecord iconRecord(qsizetype index) const; - QList iconRecords() const; - void addIcon(const QNdefNfcIconRecord &icon); - void addIcon(const QByteArray &type, const QByteArray &data); - bool removeIcon(const QNdefNfcIconRecord &icon); - bool removeIcon(const QByteArray &type); - void setIcons(const QList &icons); - quint32 size() const; - void setSize(quint32 size); - QString typeInfo() const; - void setTypeInfo(const QString &type); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfctextrecord.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfctextrecord.sip deleted file mode 100644 index 5b8c7b3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfctextrecord.sip +++ /dev/null @@ -1,49 +0,0 @@ -// qndefnfctextrecord.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefNfcTextRecord : public QNdefRecord -{ -%TypeHeaderCode -#include -%End - -public: - QNdefNfcTextRecord(); - QNdefNfcTextRecord(const QNdefRecord &other); - QString locale() const; - void setLocale(const QString &locale); - QString text() const; - void setText(const QString text); - - enum Encoding - { - Utf8, - Utf16, - }; - - QNdefNfcTextRecord::Encoding encoding() const; - void setEncoding(QNdefNfcTextRecord::Encoding encoding); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcurirecord.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcurirecord.sip deleted file mode 100644 index 01648bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefnfcurirecord.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qndefnfcurirecord.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefNfcUriRecord : public QNdefRecord -{ -%TypeHeaderCode -#include -%End - -public: - QNdefNfcUriRecord(); - QNdefNfcUriRecord(const QNdefRecord &other); - QUrl uri() const; - void setUri(const QUrl &uri); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefrecord.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefrecord.sip deleted file mode 100644 index 27c6f2a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qndefrecord.sip +++ /dev/null @@ -1,93 +0,0 @@ -// qndefrecord.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNdefRecord -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - QByteArray ndef_type = sipCpp->type(); - - switch (sipCpp->typeNameFormat()) - { - case QNdefRecord::NfcRtd: - if (ndef_type == "Sp") - sipType = sipType_QNdefNfcSmartPosterRecord; - else if (ndef_type == "T") - sipType = sipType_QNdefNfcTextRecord; - else if (ndef_type == "U") - sipType = sipType_QNdefNfcUriRecord; - else - sipType = 0; - - break; - - case QNdefRecord::Mime: - if (ndef_type == "") - sipType = sipType_QNdefNfcIconRecord; - else - sipType = 0; - - break; - - default: - sipType = 0; - } -%End - -public: - enum TypeNameFormat - { - Empty, - NfcRtd, - Mime, - Uri, - ExternalRtd, - Unknown, - }; - - QNdefRecord(); - QNdefRecord(const QNdefRecord &other); - ~QNdefRecord(); - void setTypeNameFormat(QNdefRecord::TypeNameFormat typeNameFormat); - QNdefRecord::TypeNameFormat typeNameFormat() const; - void setType(const QByteArray &type); - QByteArray type() const; - void setId(const QByteArray &id); - QByteArray id() const; - void setPayload(const QByteArray &payload); - QByteArray payload() const; - bool isEmpty() const; - void clear(); - bool operator==(const QNdefRecord &other) const; - bool operator!=(const QNdefRecord &other) const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldmanager.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldmanager.sip deleted file mode 100644 index 114959e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldmanager.sip +++ /dev/null @@ -1,107 +0,0 @@ -// qnearfieldmanager.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNearFieldManager : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QNearFieldManager, &sipType_QNearFieldManager, -1, 1}, - {sipName_QNearFieldTarget, &sipType_QNearFieldTarget, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - explicit QNearFieldManager(QObject *parent /TransferThis/ = 0); - virtual ~QNearFieldManager(); - bool startTargetDetection(QNearFieldTarget::AccessMethod accessMethod); - void stopTargetDetection(const QString &errorMessage = QString()); - -signals: - void targetDetected(QNearFieldTarget *target); - void targetLost(QNearFieldTarget *target); - void targetDetectionStopped(); - -public: - enum class AdapterState - { - Offline, - TurningOn, - Online, - TurningOff, - }; - - bool isSupported(QNearFieldTarget::AccessMethod accessMethod = QNearFieldTarget::AnyAccess) const; - -signals: - void adapterStateChanged(QNearFieldManager::AdapterState state); - -public: - bool isEnabled() const; - void setUserInformation(const QString &message); -}; - -%End - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qtnfc_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &); -extern pyqt6_qtnfc_get_pyqtslot_parts_t pyqt6_qtnfc_get_pyqtslot_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtnfc_get_pyqtslot_parts_t pyqt6_qtnfc_get_pyqtslot_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtnfc_get_pyqtslot_parts = (pyqt6_qtnfc_get_pyqtslot_parts_t)sipImportSymbol("pyqt6_get_pyqtslot_parts"); -Q_ASSERT(pyqt6_qtnfc_get_pyqtslot_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldtarget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldtarget.sip deleted file mode 100644 index 6a29961..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtNfc/qnearfieldtarget.sip +++ /dev/null @@ -1,110 +0,0 @@ -// qnearfieldtarget.sip generated by MetaSIP -// -// This file is part of the QtNfc Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNearFieldTarget : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - ProprietaryTag, - NfcTagType1, - NfcTagType2, - NfcTagType3, - NfcTagType4, - NfcTagType4A, - NfcTagType4B, - MifareTag, - }; - - enum AccessMethod /BaseType=Flag/ - { - UnknownAccess, - NdefAccess, - TagTypeSpecificAccess, - AnyAccess, - }; - - typedef QFlags AccessMethods; - - enum Error - { - NoError, - UnknownError, - UnsupportedError, - TargetOutOfRangeError, - NoResponseError, - ChecksumMismatchError, - InvalidParametersError, - NdefReadError, - NdefWriteError, - CommandError, - ConnectionError, - TimeoutError, - }; - - class RequestId - { -%TypeHeaderCode -#include -%End - - public: - RequestId(); - RequestId(const QNearFieldTarget::RequestId &other); - ~RequestId(); - bool isValid() const; - int refCount() const; - bool operator<(const QNearFieldTarget::RequestId &other) const; - bool operator==(const QNearFieldTarget::RequestId &other) const; - bool operator!=(const QNearFieldTarget::RequestId &other) const; - }; - - explicit QNearFieldTarget(QObject *parent /TransferThis/ = 0); - virtual ~QNearFieldTarget(); - QByteArray uid() const; - QNearFieldTarget::Type type() const; - QNearFieldTarget::AccessMethods accessMethods() const; - bool hasNdefMessage(); - QNearFieldTarget::RequestId readNdefMessages(); - QNearFieldTarget::RequestId writeNdefMessages(const QList &messages); - QNearFieldTarget::RequestId sendCommand(const QByteArray &command); - bool waitForRequestCompleted(const QNearFieldTarget::RequestId &id, int msecs = 5000) /ReleaseGIL/; - QVariant requestResponse(const QNearFieldTarget::RequestId &id) const; - -signals: - void disconnected(); - void ndefMessageRead(const QNdefMessage &message); - void requestCompleted(const QNearFieldTarget::RequestId &id); - void error(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id); - -public: - bool disconnect(); - int maxCommandLength() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGL.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGL.toml deleted file mode 100644 index 9d7d737..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGL.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtOpenGL. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGLmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGLmod.sip deleted file mode 100644 index 7070815..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/QtOpenGLmod.sip +++ /dev/null @@ -1,68 +0,0 @@ -// QtOpenGLmod.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtOpenGL, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qopenglbuffer.sip -%Include qopengldebug.sip -%Include qopenglframebufferobject.sip -%Include qopenglpaintdevice.sip -%Include qopenglpixeltransferoptions.sip -%Include qopenglshaderprogram.sip -%Include qopengltexture.sip -%Include qopengltextureblitter.sip -%Include qopengltimerquery.sip -%Include qopenglversionfunctions.sip -%Include qopenglversionfunctionsfactory.sip -%Include qopenglvertexarrayobject.sip -%Include qopenglwindow.sip -%Include qopenglfunctions_2_0.sip -%Include qopenglfunctions_2_1.sip -%Include qopenglfunctions_4_1_core.sip -%Include qopenglfunctions_es2.sip -%Include qopenglversionprofile.sip -%Include qpyopengl_qlist.sip -%Include qpyopengl_std_pair.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglbuffer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglbuffer.sip deleted file mode 100644 index 0cf5039..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglbuffer.sip +++ /dev/null @@ -1,96 +0,0 @@ -// qopenglbuffer.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLBuffer -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - VertexBuffer, - IndexBuffer, - PixelPackBuffer, - PixelUnpackBuffer, - }; - - QOpenGLBuffer(); - explicit QOpenGLBuffer(QOpenGLBuffer::Type type); - QOpenGLBuffer(const QOpenGLBuffer &other); - ~QOpenGLBuffer(); - - enum UsagePattern - { - StreamDraw, - StreamRead, - StreamCopy, - StaticDraw, - StaticRead, - StaticCopy, - DynamicDraw, - DynamicRead, - DynamicCopy, - }; - - enum Access - { - ReadOnly, - WriteOnly, - ReadWrite, - }; - - QOpenGLBuffer::Type type() const; - QOpenGLBuffer::UsagePattern usagePattern() const; - void setUsagePattern(QOpenGLBuffer::UsagePattern value); - bool create(); - bool isCreated() const; - void destroy(); - bool bind(); - void release(); - static void release(QOpenGLBuffer::Type type); - GLuint bufferId() const; - int size() const /__len__/; - bool read(int offset, void *data, int count); - void write(int offset, const void *data, int count); - void allocate(const void *data, int count); - void allocate(int count); - void *map(QOpenGLBuffer::Access access); - bool unmap(); - - enum RangeAccessFlag /BaseType=Flag/ - { - RangeRead, - RangeWrite, - RangeInvalidate, - RangeInvalidateBuffer, - RangeFlushExplicit, - RangeUnsynchronized, - }; - - typedef QFlags RangeAccessFlags; - void *mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access); -%If (Qt_6_5_0 -) - void swap(QOpenGLBuffer &other); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengldebug.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengldebug.sip deleted file mode 100644 index 474e86c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengldebug.sip +++ /dev/null @@ -1,163 +0,0 @@ -// qopengldebug.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLDebugMessage -{ -%TypeHeaderCode -#include -%End - -public: - enum Source /BaseType=Flag/ - { - InvalidSource, - APISource, - WindowSystemSource, - ShaderCompilerSource, - ThirdPartySource, - ApplicationSource, - OtherSource, - AnySource, - }; - - typedef QFlags Sources; - - enum Type /BaseType=Flag/ - { - InvalidType, - ErrorType, - DeprecatedBehaviorType, - UndefinedBehaviorType, - PortabilityType, - PerformanceType, - OtherType, - MarkerType, - GroupPushType, - GroupPopType, - AnyType, - }; - - typedef QFlags Types; - - enum Severity /BaseType=Flag/ - { - InvalidSeverity, - HighSeverity, - MediumSeverity, - LowSeverity, - NotificationSeverity, - AnySeverity, - }; - - typedef QFlags Severities; - QOpenGLDebugMessage(); - QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage); - ~QOpenGLDebugMessage(); - void swap(QOpenGLDebugMessage &debugMessage /Constrained/); - QOpenGLDebugMessage::Source source() const; - QOpenGLDebugMessage::Type type() const; - QOpenGLDebugMessage::Severity severity() const; - GLuint id() const; - QString message() const; - static QOpenGLDebugMessage createApplicationMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType); - static QOpenGLDebugMessage createThirdPartyMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType); - bool operator==(const QOpenGLDebugMessage &debugMessage) const; - bool operator!=(const QOpenGLDebugMessage &debugMessage) const; -}; - -class QOpenGLDebugLogger : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QOpenGLDebugLogger, &sipType_QOpenGLDebugLogger, -1, 1}, - {sipName_QOpenGLShader, &sipType_QOpenGLShader, -1, 2}, - {sipName_QOpenGLShaderProgram, &sipType_QOpenGLShaderProgram, -1, 3}, - #if !defined(SIP_FEATURE_PyQt_OpenGL_ES2) - {sipName_QOpenGLTimeMonitor, &sipType_QOpenGLTimeMonitor, -1, 4}, - #else - {0, 0, -1, 4}, - #endif - #if !defined(SIP_FEATURE_PyQt_OpenGL_ES2) - {sipName_QOpenGLTimerQuery, &sipType_QOpenGLTimerQuery, -1, 5}, - #else - {0, 0, -1, 5}, - #endif - {sipName_QOpenGLVertexArrayObject, &sipType_QOpenGLVertexArrayObject, -1, 6}, - {sipName_QOpenGLWindow, &sipType_QOpenGLWindow, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum LoggingMode - { - AsynchronousLogging, - SynchronousLogging, - }; - - explicit QOpenGLDebugLogger(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLDebugLogger(); - bool initialize(); - bool isLogging() const; - QOpenGLDebugLogger::LoggingMode loggingMode() const; - qint64 maximumMessageLength() const; - void pushGroup(const QString &name, GLuint id = 0, QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource); - void popGroup(); - void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity); - void enableMessages(const QList &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType); - void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity); - void disableMessages(const QList &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType); - QList loggedMessages() const; - -public slots: - void logMessage(const QOpenGLDebugMessage &debugMessage); - void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode = QOpenGLDebugLogger::AsynchronousLogging); - void stopLogging(); - -signals: - void messageLogged(const QOpenGLDebugMessage &debugMessage); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglframebufferobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglframebufferobject.sip deleted file mode 100644 index 209bd76..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglframebufferobject.sip +++ /dev/null @@ -1,115 +0,0 @@ -// qopenglframebufferobject.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLFramebufferObject -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// The defaults are different for desktop OpenGL and OpenGL/ES so pretend the -// latter is the former. -#if defined(QT_OPENGL_ES) -#undef GL_RGBA8 -#define GL_RGBA8 GL_RGBA -#endif -%End - -public: - enum Attachment - { - NoAttachment, - CombinedDepthStencil, - Depth, - }; - - QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D); - QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D); - QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8); - QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8); - QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format); - QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format); - virtual ~QOpenGLFramebufferObject(); - QOpenGLFramebufferObjectFormat format() const; - bool isValid() const; - bool isBound() const; - bool bind(); - bool release(); - int width() const; - int height() const; - GLuint texture() const; - QList textures() const; - QSize size() const; - QImage toImage(bool flipped = true) const; - QImage toImage(bool flipped, int colorAttachmentIndex) const; - QOpenGLFramebufferObject::Attachment attachment() const; - void setAttachment(QOpenGLFramebufferObject::Attachment attachment); - GLuint handle() const; - static bool bindDefault(); - static bool hasOpenGLFramebufferObjects(); - static bool hasOpenGLFramebufferBlit(); - - enum FramebufferRestorePolicy - { - DontRestoreFramebufferBinding, - RestoreFramebufferBindingToDefault, - RestoreFrameBufferBinding, - }; - - static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); - static void blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); - static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex); - static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy); - GLuint takeTexture(); - GLuint takeTexture(int colorAttachmentIndex); - void addColorAttachment(const QSize &size, GLenum internal_format = 0); - void addColorAttachment(int width, int height, GLenum internal_format = 0); - QList sizes() const; - -private: - QOpenGLFramebufferObject(const QOpenGLFramebufferObject &); -}; - -class QOpenGLFramebufferObjectFormat -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLFramebufferObjectFormat(); - QOpenGLFramebufferObjectFormat(const QOpenGLFramebufferObjectFormat &other); - ~QOpenGLFramebufferObjectFormat(); - void setSamples(int samples); - int samples() const; - void setMipmap(bool enabled); - bool mipmap() const; - void setAttachment(QOpenGLFramebufferObject::Attachment attachment); - QOpenGLFramebufferObject::Attachment attachment() const; - void setTextureTarget(GLenum target); - GLenum textureTarget() const; - void setInternalTextureFormat(GLenum internalTextureFormat); - GLenum internalTextureFormat() const; - bool operator==(const QOpenGLFramebufferObjectFormat &other) const; - bool operator!=(const QOpenGLFramebufferObjectFormat &other) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_0.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_0.sip deleted file mode 100644 index 29f4925..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_0.sip +++ /dev/null @@ -1,2919 +0,0 @@ -// qopenglfunctions_2_0.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (!PyQt_OpenGL_ES2) - -class QOpenGLFunctions_2_0 : public QAbstractOpenGLFunctions -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLFunctions_2_0(); - bool initializeOpenGLFunctions(); - void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); - void glDepthRange(GLdouble nearVal, GLdouble farVal); - GLboolean glIsEnabled(GLenum cap); - void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="int"/); -%MethodCode - GLint params[1]; - - sipCpp->glGetTexLevelParameteriv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLint(&sipIsErr, params, 1); -%End - - void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="float"/); -%MethodCode - GLfloat params[1]; - - sipCpp->glGetTexLevelParameterfv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLfloat(&sipIsErr, params, 1); -%End - - void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - const char *glGetString(GLenum name); -%MethodCode - sipRes = reinterpret_cast(sipCpp->glGetString(a0)); -%End - - void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLint fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLint[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetIntegerv(a0, params); - a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLfloat fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLfloat[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetFloatv(a0, params); - a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - GLenum glGetError(); - void glGetDoublev(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLdouble fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLdouble[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetDoublev(a0, params); - a1 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[bool, Tuple[bool, ...]]"/); -%MethodCode - GLboolean fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLboolean[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetBooleanv(a0, params); - a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - SIP_PYOBJECT glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type) /TypeHint="Union[Tuple[float, ...], Tuple[int, ...]]"/; -%MethodCode - int components; - - switch (a4) - { - case GL_BGR: - case GL_RGB: - { - components = 3; - break; - } - - case GL_BGRA: - case GL_RGBA: - { - components = 4; - break; - } - - case GL_RED: - case GL_GREEN: - case GL_BLUE: - case GL_ALPHA: - case GL_DEPTH_COMPONENT: - case GL_STENCIL_INDEX: - case GL_DEPTH_STENCIL: - { - components = 1; - break; - } - - default: - components = 0; - } - - Py_ssize_t length = components * a2 * a3; - - switch (a5) - { - case GL_FLOAT: - { - GLfloat *data = new GLfloat[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLfloat(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_INT: - { - GLint *data = new GLint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_UNSIGNED_INT: - case GL_UNSIGNED_INT_8_8_8_8: - case GL_UNSIGNED_INT_8_8_8_8_REV: - case GL_UNSIGNED_INT_10_10_10_2: - case GL_UNSIGNED_INT_2_10_10_10_REV: - case GL_UNSIGNED_INT_24_8: - case GL_UNSIGNED_INT_10F_11F_11F_REV: - case GL_UNSIGNED_INT_5_9_9_9_REV: - { - GLuint *data = new GLuint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLuint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_5_6_5_REV: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_4_4_4_4_REV: - case GL_UNSIGNED_SHORT_5_5_5_1: - case GL_UNSIGNED_SHORT_1_5_5_5_REV: - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_BYTE_3_3_2: - case GL_UNSIGNED_BYTE_2_3_3_REV: - case GL_HALF_FLOAT: - case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: - default: - sipIsErr = 1; - PyErr_SetString(PyExc_ValueError, "pixel data format not supported"); - } -%End - - void glReadBuffer(GLenum mode); - void glPixelStorei(GLenum pname, GLint param); - void glPixelStoref(GLenum pname, GLfloat param); - void glDepthFunc(GLenum func); - void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); - void glStencilFunc(GLenum func, GLint ref, GLuint mask); - void glLogicOp(GLenum opcode); - void glBlendFunc(GLenum sfactor, GLenum dfactor); - void glFlush(); - void glFinish(); - void glEnable(GLenum cap); - void glDisable(GLenum cap); - void glDepthMask(GLboolean flag); - void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - void glStencilMask(GLuint mask); - void glClearDepth(GLdouble depth); - void glClearStencil(GLint s); - void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glClear(GLbitfield mask); - void glDrawBuffer(GLenum mode); - void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, a6, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage1D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameteriv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameteri(GLenum target, GLenum pname, GLint param); - void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameterfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameterf(GLenum target, GLenum pname, GLfloat param); - void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); - void glPolygonMode(GLenum face, GLenum mode); - void glPointSize(GLfloat size); - void glLineWidth(GLfloat width); - void glHint(GLenum target, GLenum mode); - void glFrontFace(GLenum mode); - void glCullFace(GLenum mode); - void glIndexubv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexubv(reinterpret_cast(array)); -%End - - void glIndexub(GLubyte c); - GLboolean glIsTexture(GLuint texture); - void glGenTextures(GLsizei n, SIP_PYOBJECT *textures /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenTextures(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteTextures(a0, reinterpret_cast(array)); -%End - - void glBindTexture(GLenum target, GLuint texture); - void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); - void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); - void glPolygonOffset(GLfloat factor, GLfloat units); - void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawElements(a0, a1, a2, array); -%End - - void glDrawArrays(GLenum mode, GLint first, GLsizei count); - void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, a9, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, array); -%End - - void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, a8, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, array); -%End - - void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawRangeElements(a0, a1, a2, a3, a4, array); -%End - - void glBlendEquation(GLenum mode); - void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, - array); -%End - - void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glSampleCoverage(GLfloat value, GLboolean invert); - void glActiveTexture(GLenum texture); - void glPointParameteriv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameteriv(a0, reinterpret_cast(array)); -%End - - void glPointParameteri(GLenum pname, GLint param); - void glPointParameterfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameterfv(a0, reinterpret_cast(array)); -%End - - void glPointParameterf(GLenum pname, GLfloat param); - void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params); - GLboolean glUnmapBuffer(GLenum target); - void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array; - - if (a3 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferSubData(a0, a1, a2, array); -%End - - void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/, GLenum usage); -%MethodCode - const GLvoid *array; - - if (a2 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferData(a0, a1, array, a3); -%End - - GLboolean glIsBuffer(GLuint buffer); - void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenBuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteBuffers(a0, reinterpret_cast(array)); -%End - - void glBindBuffer(GLenum target, GLuint buffer); - void glGetQueryiv(GLenum target, GLenum pname, GLint *params); - void glEndQuery(GLenum target); - void glBeginQuery(GLenum target, GLuint id); - GLboolean glIsQuery(GLuint id); - void glDeleteQueries(GLsizei n, SIP_PYOBJECT ids /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteQueries(a0, reinterpret_cast(array)); -%End - - void glGenQueries(GLsizei n, SIP_PYOBJECT *ids /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenQueries(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf, - "VertexAttribPointer", a0); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array); -%End - - void glValidateProgram(GLuint program); - void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix4fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix3fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix2fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2); - void glUniform2i(GLint location, GLint v0, GLint v1); - void glUniform1i(GLint location, GLint v0); - void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - void glUniform2f(GLint location, GLfloat v0, GLfloat v1); - void glUniform1f(GLint location, GLfloat v0); - void glUseProgram(GLuint program); - void glLinkProgram(GLuint program); - GLboolean glIsShader(GLuint shader); - GLboolean glIsProgram(GLuint program); - void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribdv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLdouble params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribdv(a0, a1, params); - - a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); -%End - - GLint glGetUniformLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetShaderSource(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *source = new GLchar[bufsize]; - - sipCpp->glGetShaderSource(a0, bufsize, 0, source); - sipRes = PyBytes_FromString(source); - - delete[] source; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetShaderiv(GLuint shader, GLenum pname, GLint *params); - SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int]]"/); -%MethodCode - GLint params[3]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_COMPUTE_LOCAL_WORK_SIZE) - case GL_COMPUTE_LOCAL_WORK_SIZE: - nr_params = 3; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetProgramiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - GLint glGetAttribLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetAttachedShaders(GLuint program) /TypeHint="Tuple[int, ...]"/; -%MethodCode - GLint nr_shaders; - - sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders); - - if (nr_shaders < 1) - { - sipRes = PyTuple_New(0); - } - else - { - GLuint *shaders = new GLuint[nr_shaders]; - - sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders); - - sipRes = PyTuple_New(nr_shaders); - - if (sipRes) - { - for (GLint i = 0; i < nr_shaders; ++i) - { - PyObject *itm = PyLong_FromLong(shaders[i]); - - if (!itm) - { - Py_DECREF(sipRes); - sipRes = 0; - break; - } - - PyTuple_SetItem(sipRes, i, itm); - } - } - - delete[] shaders; - } - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - void glEnableVertexAttribArray(GLuint index); - void glDisableVertexAttribArray(GLuint index); - void glDetachShader(GLuint program, GLuint shader); - void glDeleteShader(GLuint shader); - void glDeleteProgram(GLuint program); - GLuint glCreateShader(GLenum type); - GLuint glCreateProgram(); - void glCompileShader(GLuint shader); - void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name); - void glAttachShader(GLuint program, GLuint shader); - void glStencilMaskSeparate(GLenum face, GLuint mask); - void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); - void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - void glDrawBuffers(GLsizei n, SIP_PYOBJECT bufs /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawBuffers(a0, reinterpret_cast(array)); -%End - - void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); - void glTranslatef(GLfloat x, GLfloat y, GLfloat z); - void glTranslated(GLdouble x, GLdouble y, GLdouble z); - void glScalef(GLfloat x, GLfloat y, GLfloat z); - void glScaled(GLdouble x, GLdouble y, GLdouble z); - void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); - void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); - void glPushMatrix(); - void glPopMatrix(); - void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); - void glMultMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultMatrixd(reinterpret_cast(array)); -%End - - void glMultMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultMatrixf(reinterpret_cast(array)); -%End - - void glMatrixMode(GLenum mode); - void glLoadMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadMatrixd(reinterpret_cast(array)); -%End - - void glLoadMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadMatrixf(reinterpret_cast(array)); -%End - - void glLoadIdentity(); - void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); - GLboolean glIsList(GLuint list); - void glGetTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGeniv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGenfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLdouble params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGendv(a0, a1, params); - - a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); -%End - - void glGetTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_TEXTURE_ENV_COLOR: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexEnviv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_TEXTURE_ENV_COLOR: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexEnvfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int], Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_SHININESS: - nr_params = 1; - break; - - case GL_COLOR_INDEXES: - nr_params = 3; - break; - - default: - nr_params = 4; - } - - sipCpp->glGetMaterialiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float], Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_SHININESS: - nr_params = 1; - break; - - case GL_COLOR_INDEXES: - nr_params = 3; - break; - - default: - nr_params = 4; - } - - sipCpp->glGetMaterialfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetLightiv(GLenum light, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int], Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_POSITION: - nr_params = 4; - break; - - case GL_SPOT_DIRECTION: - nr_params = 3; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetLightiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetLightfv(GLenum light, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float], Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_POSITION: - nr_params = 4; - break; - - case GL_SPOT_DIRECTION: - nr_params = 3; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetLightfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetClipPlane(GLenum plane, SIP_PYOBJECT *equation /TypeHint="Tuple[float, float, float, float]"/); -%MethodCode - GLdouble params[4]; - - sipCpp->glGetClipPlane(a0, params); - - a1 = qpyopengl_from_GLdouble(&sipIsErr, params, 4); -%End - - void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a4, a3, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawPixels(a0, a1, a2, a3, array); -%End - - void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); - void glPixelMapusv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapusv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelMapuiv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapuiv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelMapfv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapfv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelTransferi(GLenum pname, GLint param); - void glPixelTransferf(GLenum pname, GLfloat param); - void glPixelZoom(GLfloat xfactor, GLfloat yfactor); - void glAlphaFunc(GLenum func, GLfloat ref); - void glEvalPoint2(GLint i, GLint j); - void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); - void glEvalPoint1(GLint i); - void glEvalMesh1(GLenum mode, GLint i1, GLint i2); - void glEvalCoord2fv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord2fv(reinterpret_cast(array)); -%End - - void glEvalCoord2f(GLfloat u, GLfloat v); - void glEvalCoord2dv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord2dv(reinterpret_cast(array)); -%End - - void glEvalCoord2d(GLdouble u, GLdouble v); - void glEvalCoord1fv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord1fv(reinterpret_cast(array)); -%End - - void glEvalCoord1f(GLfloat u); - void glEvalCoord1dv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord1dv(reinterpret_cast(array)); -%End - - void glEvalCoord1d(GLdouble u); - void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); - void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); - void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2); - void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2); - void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap2f(a0, a1, a2, a3, a4, a5, a6, a7, a8, - reinterpret_cast(array)); -%End - - void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap2d(a0, a1, a2, a3, a4, a5, a6, a7, a8, - reinterpret_cast(array)); -%End - - void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap1f(a0, a1, a2, a3, a4, - reinterpret_cast(array)); -%End - - void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap1d(a0, a1, a2, a3, a4, - reinterpret_cast(array)); -%End - - void glPushAttrib(GLbitfield mask); - void glPopAttrib(); - void glAccum(GLenum op, GLfloat value); - void glIndexMask(GLuint mask); - void glClearIndex(GLfloat c); - void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glPushName(GLuint name); - void glPopName(); - void glPassThrough(GLfloat token); - void glLoadName(GLuint name); - void glInitNames(); - GLint glRenderMode(GLenum mode); - void glTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGeniv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGeni(GLenum coord, GLenum pname, GLint param); - void glTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGenfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGenf(GLenum coord, GLenum pname, GLfloat param); - void glTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGendv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGend(GLenum coord, GLenum pname, GLdouble param); - void glTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexEnviv(a0, a1, reinterpret_cast(array)); -%End - - void glTexEnvi(GLenum target, GLenum pname, GLint param); - void glTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexEnvfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexEnvf(GLenum target, GLenum pname, GLfloat param); - void glShadeModel(GLenum mode); - void glPolygonStipple(SIP_PYOBJECT mask /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPolygonStipple(reinterpret_cast(array)); -%End - - void glMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMaterialiv(a0, a1, reinterpret_cast(array)); -%End - - void glMateriali(GLenum face, GLenum pname, GLint param); - void glMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMaterialfv(a0, a1, reinterpret_cast(array)); -%End - - void glMaterialf(GLenum face, GLenum pname, GLfloat param); - void glLineStipple(GLint factor, GLushort pattern); - void glLightModeliv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightModeliv(a0, reinterpret_cast(array)); -%End - - void glLightModeli(GLenum pname, GLint param); - void glLightModelfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightModelfv(a0, reinterpret_cast(array)); -%End - - void glLightModelf(GLenum pname, GLfloat param); - void glLightiv(GLenum light, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightiv(a0, a1, reinterpret_cast(array)); -%End - - void glLighti(GLenum light, GLenum pname, GLint param); - void glLightfv(GLenum light, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightfv(a0, a1, reinterpret_cast(array)); -%End - - void glLightf(GLenum light, GLenum pname, GLfloat param); - void glFogiv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogiv(a0, reinterpret_cast(array)); -%End - - void glFogi(GLenum pname, GLint param); - void glFogfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogfv(a0, reinterpret_cast(array)); -%End - - void glFogf(GLenum pname, GLfloat param); - void glColorMaterial(GLenum face, GLenum mode); - void glClipPlane(GLenum plane, SIP_PYOBJECT equation /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glClipPlane(a0, reinterpret_cast(array)); -%End - - void glVertex4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4sv(reinterpret_cast(array)); -%End - - void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); - void glVertex4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4iv(reinterpret_cast(array)); -%End - - void glVertex4i(GLint x, GLint y, GLint z, GLint w); - void glVertex4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4fv(reinterpret_cast(array)); -%End - - void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glVertex4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4dv(reinterpret_cast(array)); -%End - - void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glVertex3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3sv(reinterpret_cast(array)); -%End - - void glVertex3s(GLshort x, GLshort y, GLshort z); - void glVertex3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3iv(reinterpret_cast(array)); -%End - - void glVertex3i(GLint x, GLint y, GLint z); - void glVertex3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3fv(reinterpret_cast(array)); -%End - - void glVertex3f(GLfloat x, GLfloat y, GLfloat z); - void glVertex3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3dv(reinterpret_cast(array)); -%End - - void glVertex3d(GLdouble x, GLdouble y, GLdouble z); - void glVertex2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2sv(reinterpret_cast(array)); -%End - - void glVertex2s(GLshort x, GLshort y); - void glVertex2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2iv(reinterpret_cast(array)); -%End - - void glVertex2i(GLint x, GLint y); - void glVertex2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2fv(reinterpret_cast(array)); -%End - - void glVertex2f(GLfloat x, GLfloat y); - void glVertex2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2dv(reinterpret_cast(array)); -%End - - void glVertex2d(GLdouble x, GLdouble y); - void glTexCoord4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4sv(reinterpret_cast(array)); -%End - - void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q); - void glTexCoord4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4iv(reinterpret_cast(array)); -%End - - void glTexCoord4i(GLint s, GLint t, GLint r, GLint q); - void glTexCoord4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4fv(reinterpret_cast(array)); -%End - - void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void glTexCoord4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4dv(reinterpret_cast(array)); -%End - - void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void glTexCoord3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3sv(reinterpret_cast(array)); -%End - - void glTexCoord3s(GLshort s, GLshort t, GLshort r); - void glTexCoord3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3iv(reinterpret_cast(array)); -%End - - void glTexCoord3i(GLint s, GLint t, GLint r); - void glTexCoord3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3fv(reinterpret_cast(array)); -%End - - void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r); - void glTexCoord3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3dv(reinterpret_cast(array)); -%End - - void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r); - void glTexCoord2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2sv(reinterpret_cast(array)); -%End - - void glTexCoord2s(GLshort s, GLshort t); - void glTexCoord2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2iv(reinterpret_cast(array)); -%End - - void glTexCoord2i(GLint s, GLint t); - void glTexCoord2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2fv(reinterpret_cast(array)); -%End - - void glTexCoord2f(GLfloat s, GLfloat t); - void glTexCoord2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2dv(reinterpret_cast(array)); -%End - - void glTexCoord2d(GLdouble s, GLdouble t); - void glTexCoord1sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1sv(reinterpret_cast(array)); -%End - - void glTexCoord1s(GLshort s); - void glTexCoord1iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1iv(reinterpret_cast(array)); -%End - - void glTexCoord1i(GLint s); - void glTexCoord1fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1fv(reinterpret_cast(array)); -%End - - void glTexCoord1f(GLfloat s); - void glTexCoord1dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1dv(reinterpret_cast(array)); -%End - - void glTexCoord1d(GLdouble s); - void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2); - void glRecti(GLint x1, GLint y1, GLint x2, GLint y2); - void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); - void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); - void glRasterPos4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4sv(reinterpret_cast(array)); -%End - - void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w); - void glRasterPos4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4iv(reinterpret_cast(array)); -%End - - void glRasterPos4i(GLint x, GLint y, GLint z, GLint w); - void glRasterPos4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4fv(reinterpret_cast(array)); -%End - - void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glRasterPos4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4dv(reinterpret_cast(array)); -%End - - void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glRasterPos3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3sv(reinterpret_cast(array)); -%End - - void glRasterPos3s(GLshort x, GLshort y, GLshort z); - void glRasterPos3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3iv(reinterpret_cast(array)); -%End - - void glRasterPos3i(GLint x, GLint y, GLint z); - void glRasterPos3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3fv(reinterpret_cast(array)); -%End - - void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); - void glRasterPos3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3dv(reinterpret_cast(array)); -%End - - void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); - void glRasterPos2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2sv(reinterpret_cast(array)); -%End - - void glRasterPos2s(GLshort x, GLshort y); - void glRasterPos2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2iv(reinterpret_cast(array)); -%End - - void glRasterPos2i(GLint x, GLint y); - void glRasterPos2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2fv(reinterpret_cast(array)); -%End - - void glRasterPos2f(GLfloat x, GLfloat y); - void glRasterPos2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2dv(reinterpret_cast(array)); -%End - - void glRasterPos2d(GLdouble x, GLdouble y); - void glNormal3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3sv(reinterpret_cast(array)); -%End - - void glNormal3s(GLshort nx, GLshort ny, GLshort nz); - void glNormal3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3iv(reinterpret_cast(array)); -%End - - void glNormal3i(GLint nx, GLint ny, GLint nz); - void glNormal3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3fv(reinterpret_cast(array)); -%End - - void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); - void glNormal3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3dv(reinterpret_cast(array)); -%End - - void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz); - void glNormal3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3bv(reinterpret_cast(array)); -%End - - void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz); - void glIndexsv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexsv(reinterpret_cast(array)); -%End - - void glIndexs(GLshort c); - void glIndexiv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexiv(reinterpret_cast(array)); -%End - - void glIndexi(GLint c); - void glIndexfv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexfv(reinterpret_cast(array)); -%End - - void glIndexf(GLfloat c); - void glIndexdv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexdv(reinterpret_cast(array)); -%End - - void glIndexd(GLdouble c); - void glEnd(); - void glEdgeFlagv(SIP_PYOBJECT flag /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEdgeFlagv(reinterpret_cast(array)); -%End - - void glEdgeFlag(GLboolean flag); - void glColor4usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4usv(reinterpret_cast(array)); -%End - - void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha); - void glColor4uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4uiv(reinterpret_cast(array)); -%End - - void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha); - void glColor4ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4ubv(reinterpret_cast(array)); -%End - - void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); - void glColor4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4sv(reinterpret_cast(array)); -%End - - void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha); - void glColor4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4iv(reinterpret_cast(array)); -%End - - void glColor4i(GLint red, GLint green, GLint blue, GLint alpha); - void glColor4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4fv(reinterpret_cast(array)); -%End - - void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glColor4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4dv(reinterpret_cast(array)); -%End - - void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); - void glColor4bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4bv(reinterpret_cast(array)); -%End - - void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); - void glColor3usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3usv(reinterpret_cast(array)); -%End - - void glColor3us(GLushort red, GLushort green, GLushort blue); - void glColor3uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3uiv(reinterpret_cast(array)); -%End - - void glColor3ui(GLuint red, GLuint green, GLuint blue); - void glColor3ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3ubv(reinterpret_cast(array)); -%End - - void glColor3ub(GLubyte red, GLubyte green, GLubyte blue); - void glColor3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3sv(reinterpret_cast(array)); -%End - - void glColor3s(GLshort red, GLshort green, GLshort blue); - void glColor3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3iv(reinterpret_cast(array)); -%End - - void glColor3i(GLint red, GLint green, GLint blue); - void glColor3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3fv(reinterpret_cast(array)); -%End - - void glColor3f(GLfloat red, GLfloat green, GLfloat blue); - void glColor3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3dv(reinterpret_cast(array)); -%End - - void glColor3d(GLdouble red, GLdouble green, GLdouble blue); - void glColor3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3bv(reinterpret_cast(array)); -%End - - void glColor3b(GLbyte red, GLbyte green, GLbyte blue); - void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, SIP_PYOBJECT bitmap /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBitmap(a0, a1, a2, a3, a4, a5, - reinterpret_cast(array)); -%End - - void glBegin(GLenum mode); - void glListBase(GLuint base); - GLuint glGenLists(GLsizei range); - void glDeleteLists(GLuint list, GLsizei range); - void glCallList(GLuint list); - void glEndList(); - void glNewList(GLuint list, GLenum mode); - void glPushClientAttrib(GLbitfield mask); - void glPopClientAttrib(); - void glVertexPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "VertexPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glVertexPointer(a0, a1, a2, array); -%End - - void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "TexCoordPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glTexCoordPointer(a0, a1, a2, array); -%End - - void glNormalPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf, - "NormalPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glNormalPointer(a0, a1, array); -%End - - void glIndexPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf, - "IndexPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glIndexPointer(a0, a1, array); -%End - - void glEnableClientState(GLenum array); - void glEdgeFlagPointer(GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a1, - GL_UNSIGNED_BYTE, sipSelf, "EdgeFlagPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glEdgeFlagPointer(a0, array); -%End - - void glDisableClientState(GLenum array); - void glColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "ColorPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glColorPointer(a0, a1, a2, array); -%End - - void glArrayElement(GLint i); - void glResetMinmax(GLenum target); - void glResetHistogram(GLenum target); - void glMinmax(GLenum target, GLenum internalformat, GLboolean sink); - void glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); - void glGetConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CONVOLUTION_BORDER_COLOR: - case GL_CONVOLUTION_FILTER_SCALE: - case GL_CONVOLUTION_FILTER_BIAS: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetConvolutionParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CONVOLUTION_BORDER_COLOR: - case GL_CONVOLUTION_FILTER_SCALE: - case GL_CONVOLUTION_FILTER_BIAS: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetConvolutionParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); - void glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void glConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionParameteriv(a0, a1, - reinterpret_cast(array)); -%End - - void glConvolutionParameteri(GLenum target, GLenum pname, GLint params); - void glConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionParameterfv(a0, a1, - reinterpret_cast(array)); -%End - - void glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params); - void glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT image /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionFilter2D(a0, a1, a2, a3, a4, a5, array); -%End - - void glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT image /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionFilter1D(a0, a1, a2, a3, a4, array); -%End - - void glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - void glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorSubTable(a0, a1, a2, a3, a4, array); -%End - - void glGetColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_COLOR_TABLE: - case GL_POST_CONVOLUTION_COLOR_TABLE: - case GL_POST_COLOR_MATRIX_COLOR_TABLE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetColorTableParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_COLOR_TABLE: - case GL_POST_CONVOLUTION_COLOR_TABLE: - case GL_POST_COLOR_MATRIX_COLOR_TABLE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetColorTableParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void glColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTableParameteriv(a0, a1, - reinterpret_cast(array)); -%End - - void glColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTableParameterfv(a0, a1, - reinterpret_cast(array)); -%End - - void glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT table /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTable(a0, a1, a2, a3, a4, array); -%End - - void glMultTransposeMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultTransposeMatrixd(reinterpret_cast(array)); -%End - - void glMultTransposeMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultTransposeMatrixf(reinterpret_cast(array)); -%End - - void glLoadTransposeMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadTransposeMatrixd(reinterpret_cast(array)); -%End - - void glLoadTransposeMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadTransposeMatrixf(reinterpret_cast(array)); -%End - - void glMultiTexCoord4sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); - void glMultiTexCoord4iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q); - void glMultiTexCoord4fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void glMultiTexCoord4dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void glMultiTexCoord3sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r); - void glMultiTexCoord3iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r); - void glMultiTexCoord3fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r); - void glMultiTexCoord3dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r); - void glMultiTexCoord2sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t); - void glMultiTexCoord2iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2i(GLenum target, GLint s, GLint t); - void glMultiTexCoord2fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t); - void glMultiTexCoord2dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t); - void glMultiTexCoord1sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1s(GLenum target, GLshort s); - void glMultiTexCoord1iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1i(GLenum target, GLint s); - void glMultiTexCoord1fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1f(GLenum target, GLfloat s); - void glMultiTexCoord1dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1d(GLenum target, GLdouble s); - void glClientActiveTexture(GLenum texture); - void glWindowPos3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3sv(reinterpret_cast(array)); -%End - - void glWindowPos3s(GLshort x, GLshort y, GLshort z); - void glWindowPos3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3iv(reinterpret_cast(array)); -%End - - void glWindowPos3i(GLint x, GLint y, GLint z); - void glWindowPos3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3fv(reinterpret_cast(array)); -%End - - void glWindowPos3f(GLfloat x, GLfloat y, GLfloat z); - void glWindowPos3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3dv(reinterpret_cast(array)); -%End - - void glWindowPos3d(GLdouble x, GLdouble y, GLdouble z); - void glWindowPos2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2sv(reinterpret_cast(array)); -%End - - void glWindowPos2s(GLshort x, GLshort y); - void glWindowPos2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2iv(reinterpret_cast(array)); -%End - - void glWindowPos2i(GLint x, GLint y); - void glWindowPos2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2fv(reinterpret_cast(array)); -%End - - void glWindowPos2f(GLfloat x, GLfloat y); - void glWindowPos2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2dv(reinterpret_cast(array)); -%End - - void glWindowPos2d(GLdouble x, GLdouble y); - void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a1, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColorPointer(a0, a1, a2, array); -%End - - void glSecondaryColor3usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3usv(reinterpret_cast(array)); -%End - - void glSecondaryColor3us(GLushort red, GLushort green, GLushort blue); - void glSecondaryColor3uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3uiv(reinterpret_cast(array)); -%End - - void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue); - void glSecondaryColor3ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3ubv(reinterpret_cast(array)); -%End - - void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue); - void glSecondaryColor3sv(SIP_PYBUFFER v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3sv(reinterpret_cast(array)); -%End - - void glSecondaryColor3s(GLshort red, GLshort green, GLshort blue); - void glSecondaryColor3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3iv(reinterpret_cast(array)); -%End - - void glSecondaryColor3i(GLint red, GLint green, GLint blue); - void glSecondaryColor3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3fv(reinterpret_cast(array)); -%End - - void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue); - void glSecondaryColor3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3dv(reinterpret_cast(array)); -%End - - void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue); - void glSecondaryColor3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3bv(reinterpret_cast(array)); -%End - - void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue); - void glFogCoordPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, a0, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoordPointer(a0, a1, array); -%End - - void glFogCoorddv(SIP_PYOBJECT coord /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoorddv(reinterpret_cast(array)); -%End - - void glFogCoordd(GLdouble coord); - void glFogCoordfv(SIP_PYOBJECT coord /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoordfv(reinterpret_cast(array)); -%End - - void glFogCoordf(GLfloat coord); - void glVertexAttrib4usv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4usv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4uiv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4uiv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4ubv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4ubv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); - void glVertexAttrib4iv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4iv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glVertexAttrib4dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glVertexAttrib4bv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4bv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nusv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nusv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nuiv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nuiv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nubv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nubv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); - void glVertexAttrib4Nsv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nsv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Niv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Niv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nbv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nbv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z); - void glVertexAttrib3fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z); - void glVertexAttrib3dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z); - void glVertexAttrib2sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2s(GLuint index, GLshort x, GLshort y); - void glVertexAttrib2fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y); - void glVertexAttrib2dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y); - void glVertexAttrib1sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1s(GLuint index, GLshort x); - void glVertexAttrib1fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1f(GLuint index, GLfloat x); - void glVertexAttrib1dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1d(GLuint index, GLdouble x); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_1.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_1.sip deleted file mode 100644 index 6c5f985..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_2_1.sip +++ /dev/null @@ -1,2920 +0,0 @@ -// qopenglfunctions_2_1.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (!PyQt_OpenGL_ES2) - -class QOpenGLFunctions_2_1 : public QAbstractOpenGLFunctions -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLFunctions_2_1(); - virtual ~QOpenGLFunctions_2_1(); - virtual bool initializeOpenGLFunctions(); - void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); - void glDepthRange(GLdouble nearVal, GLdouble farVal); - GLboolean glIsEnabled(GLenum cap); - void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="int"/); -%MethodCode - GLint params[1]; - - sipCpp->glGetTexLevelParameteriv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLint(&sipIsErr, params, 1); -%End - - void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="float"/); -%MethodCode - GLfloat params[1]; - - sipCpp->glGetTexLevelParameterfv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLfloat(&sipIsErr, params, 1); -%End - - void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - const char *glGetString(GLenum name); -%MethodCode - sipRes = reinterpret_cast(sipCpp->glGetString(a0)); -%End - - void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLint fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLint[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetIntegerv(a0, params); - a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLfloat fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLfloat[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetFloatv(a0, params); - a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - GLenum glGetError(); - void glGetDoublev(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLdouble fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLdouble[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetDoublev(a0, params); - a1 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[bool, Tuple[bool, ...]]"/); -%MethodCode - GLboolean fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLboolean[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetBooleanv(a0, params); - a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - SIP_PYOBJECT glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type) /TypeHint="Union[Tuple[float, ...], Tuple[int, ...]]"/; -%MethodCode - int components; - - switch (a4) - { - case GL_BGR: - case GL_RGB: - { - components = 3; - break; - } - - case GL_BGRA: - case GL_RGBA: - { - components = 4; - break; - } - - case GL_RED: - case GL_GREEN: - case GL_BLUE: - case GL_ALPHA: - case GL_DEPTH_COMPONENT: - case GL_STENCIL_INDEX: - case GL_DEPTH_STENCIL: - { - components = 1; - break; - } - - default: - components = 0; - } - - Py_ssize_t length = components * a2 * a3; - - switch (a5) - { - case GL_FLOAT: - { - GLfloat *data = new GLfloat[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLfloat(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_INT: - { - GLint *data = new GLint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_UNSIGNED_INT: - case GL_UNSIGNED_INT_8_8_8_8: - case GL_UNSIGNED_INT_8_8_8_8_REV: - case GL_UNSIGNED_INT_10_10_10_2: - case GL_UNSIGNED_INT_2_10_10_10_REV: - case GL_UNSIGNED_INT_24_8: - case GL_UNSIGNED_INT_10F_11F_11F_REV: - case GL_UNSIGNED_INT_5_9_9_9_REV: - { - GLuint *data = new GLuint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLuint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_5_6_5_REV: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_4_4_4_4_REV: - case GL_UNSIGNED_SHORT_5_5_5_1: - case GL_UNSIGNED_SHORT_1_5_5_5_REV: - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_BYTE_3_3_2: - case GL_UNSIGNED_BYTE_2_3_3_REV: - case GL_HALF_FLOAT: - case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: - default: - sipIsErr = 1; - PyErr_SetString(PyExc_ValueError, "pixel data format not supported"); - } -%End - - void glReadBuffer(GLenum mode); - void glPixelStorei(GLenum pname, GLint param); - void glPixelStoref(GLenum pname, GLfloat param); - void glDepthFunc(GLenum func); - void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); - void glStencilFunc(GLenum func, GLint ref, GLuint mask); - void glLogicOp(GLenum opcode); - void glBlendFunc(GLenum sfactor, GLenum dfactor); - void glFlush(); - void glFinish(); - void glEnable(GLenum cap); - void glDisable(GLenum cap); - void glDepthMask(GLboolean flag); - void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - void glStencilMask(GLuint mask); - void glClearDepth(GLdouble depth); - void glClearStencil(GLint s); - void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glClear(GLbitfield mask); - void glDrawBuffer(GLenum mode); - void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, a6, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage1D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameteriv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameteri(GLenum target, GLenum pname, GLint param); - void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameterfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameterf(GLenum target, GLenum pname, GLfloat param); - void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); - void glPolygonMode(GLenum face, GLenum mode); - void glPointSize(GLfloat size); - void glLineWidth(GLfloat width); - void glHint(GLenum target, GLenum mode); - void glFrontFace(GLenum mode); - void glCullFace(GLenum mode); - void glIndexubv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexubv(reinterpret_cast(array)); -%End - - void glIndexub(GLubyte c); - GLboolean glIsTexture(GLuint texture); - void glGenTextures(GLsizei n, SIP_PYOBJECT *textures /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenTextures(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteTextures(a0, reinterpret_cast(array)); -%End - - void glBindTexture(GLenum target, GLuint texture); - void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); - void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); - void glPolygonOffset(GLfloat factor, GLfloat units); - void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawElements(a0, a1, a2, array); -%End - - void glDrawArrays(GLenum mode, GLint first, GLsizei count); - void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, a9, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, array); -%End - - void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, a8, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, array); -%End - - void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawRangeElements(a0, a1, a2, a3, a4, array); -%End - - void glBlendEquation(GLenum mode); - void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, - array); -%End - - void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glSampleCoverage(GLfloat value, GLboolean invert); - void glActiveTexture(GLenum texture); - void glPointParameteriv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameteriv(a0, reinterpret_cast(array)); -%End - - void glPointParameteri(GLenum pname, GLint param); - void glPointParameterfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameterfv(a0, reinterpret_cast(array)); -%End - - void glPointParameterf(GLenum pname, GLfloat param); - void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params); - GLboolean glUnmapBuffer(GLenum target); - void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array; - - if (a3 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferSubData(a0, a1, a2, array); -%End - - void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/, GLenum usage); -%MethodCode - const GLvoid *array; - - if (a2 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferData(a0, a1, array, a3); -%End - - GLboolean glIsBuffer(GLuint buffer); - void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenBuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteBuffers(a0, reinterpret_cast(array)); -%End - - void glBindBuffer(GLenum target, GLuint buffer); - void glGetQueryiv(GLenum target, GLenum pname, GLint *params); - void glEndQuery(GLenum target); - void glBeginQuery(GLenum target, GLuint id); - GLboolean glIsQuery(GLuint id); - void glDeleteQueries(GLsizei n, SIP_PYOBJECT ids /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteQueries(a0, reinterpret_cast(array)); -%End - - void glGenQueries(GLsizei n, SIP_PYOBJECT *ids /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenQueries(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf, - "VertexAttribPointer", a0); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array); -%End - - void glValidateProgram(GLuint program); - void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix4fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix3fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix2fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2); - void glUniform2i(GLint location, GLint v0, GLint v1); - void glUniform1i(GLint location, GLint v0); - void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - void glUniform2f(GLint location, GLfloat v0, GLfloat v1); - void glUniform1f(GLint location, GLfloat v0); - void glUseProgram(GLuint program); - void glLinkProgram(GLuint program); - GLboolean glIsShader(GLuint shader); - GLboolean glIsProgram(GLuint program); - void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribdv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLdouble params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribdv(a0, a1, params); - - a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); -%End - - GLint glGetUniformLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetShaderSource(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *source = new GLchar[bufsize]; - - sipCpp->glGetShaderSource(a0, bufsize, 0, source); - sipRes = PyBytes_FromString(source); - - delete[] source; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetShaderiv(GLuint shader, GLenum pname, GLint *params); - SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int]]"/); -%MethodCode - GLint params[3]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_COMPUTE_LOCAL_WORK_SIZE) - case GL_COMPUTE_LOCAL_WORK_SIZE: - nr_params = 3; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetProgramiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - GLint glGetAttribLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetAttachedShaders(GLuint program) /TypeHint="Tuple[int, ...]"/; -%MethodCode - GLint nr_shaders; - - sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders); - - if (nr_shaders < 1) - { - sipRes = PyTuple_New(0); - } - else - { - GLuint *shaders = new GLuint[nr_shaders]; - - sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders); - - sipRes = PyTuple_New(nr_shaders); - - if (sipRes) - { - for (GLint i = 0; i < nr_shaders; ++i) - { - PyObject *itm = PyLong_FromLong(shaders[i]); - - if (!itm) - { - Py_DECREF(sipRes); - sipRes = 0; - break; - } - - PyTuple_SetItem(sipRes, i, itm); - } - } - - delete[] shaders; - } - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - void glEnableVertexAttribArray(GLuint index); - void glDisableVertexAttribArray(GLuint index); - void glDetachShader(GLuint program, GLuint shader); - void glDeleteShader(GLuint shader); - void glDeleteProgram(GLuint program); - GLuint glCreateShader(GLenum type); - GLuint glCreateProgram(); - void glCompileShader(GLuint shader); - void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name); - void glAttachShader(GLuint program, GLuint shader); - void glStencilMaskSeparate(GLenum face, GLuint mask); - void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); - void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - void glDrawBuffers(GLsizei n, SIP_PYOBJECT bufs /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawBuffers(a0, reinterpret_cast(array)); -%End - - void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); - void glTranslatef(GLfloat x, GLfloat y, GLfloat z); - void glTranslated(GLdouble x, GLdouble y, GLdouble z); - void glScalef(GLfloat x, GLfloat y, GLfloat z); - void glScaled(GLdouble x, GLdouble y, GLdouble z); - void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); - void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); - void glPushMatrix(); - void glPopMatrix(); - void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); - void glMultMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultMatrixd(reinterpret_cast(array)); -%End - - void glMultMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultMatrixf(reinterpret_cast(array)); -%End - - void glMatrixMode(GLenum mode); - void glLoadMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadMatrixd(reinterpret_cast(array)); -%End - - void glLoadMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadMatrixf(reinterpret_cast(array)); -%End - - void glLoadIdentity(); - void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); - GLboolean glIsList(GLuint list); - void glGetTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGeniv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGenfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLdouble params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_OBJECT_PLANE: - case GL_EYE_PLANE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexGendv(a0, a1, params); - - a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); -%End - - void glGetTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_TEXTURE_ENV_COLOR: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexEnviv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_TEXTURE_ENV_COLOR: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetTexEnvfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int], Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_SHININESS: - nr_params = 1; - break; - - case GL_COLOR_INDEXES: - nr_params = 3; - break; - - default: - nr_params = 4; - } - - sipCpp->glGetMaterialiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float], Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_SHININESS: - nr_params = 1; - break; - - case GL_COLOR_INDEXES: - nr_params = 3; - break; - - default: - nr_params = 4; - } - - sipCpp->glGetMaterialfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetLightiv(GLenum light, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int], Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_POSITION: - nr_params = 4; - break; - - case GL_SPOT_DIRECTION: - nr_params = 3; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetLightiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetLightfv(GLenum light, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float], Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_POSITION: - nr_params = 4; - break; - - case GL_SPOT_DIRECTION: - nr_params = 3; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetLightfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetClipPlane(GLenum plane, SIP_PYOBJECT *equation /TypeHint="Tuple[float, float, float, float]"/); -%MethodCode - GLdouble params[4]; - - sipCpp->glGetClipPlane(a0, params); - - a1 = qpyopengl_from_GLdouble(&sipIsErr, params, 4); -%End - - void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a4, a3, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawPixels(a0, a1, a2, a3, array); -%End - - void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); - void glPixelMapusv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapusv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelMapuiv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapuiv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelMapfv(GLenum map, GLint mapsize, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPixelMapfv(a0, a1, reinterpret_cast(array)); -%End - - void glPixelTransferi(GLenum pname, GLint param); - void glPixelTransferf(GLenum pname, GLfloat param); - void glPixelZoom(GLfloat xfactor, GLfloat yfactor); - void glAlphaFunc(GLenum func, GLfloat ref); - void glEvalPoint2(GLint i, GLint j); - void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); - void glEvalPoint1(GLint i); - void glEvalMesh1(GLenum mode, GLint i1, GLint i2); - void glEvalCoord2fv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord2fv(reinterpret_cast(array)); -%End - - void glEvalCoord2f(GLfloat u, GLfloat v); - void glEvalCoord2dv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord2dv(reinterpret_cast(array)); -%End - - void glEvalCoord2d(GLdouble u, GLdouble v); - void glEvalCoord1fv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord1fv(reinterpret_cast(array)); -%End - - void glEvalCoord1f(GLfloat u); - void glEvalCoord1dv(SIP_PYOBJECT u /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEvalCoord1dv(reinterpret_cast(array)); -%End - - void glEvalCoord1d(GLdouble u); - void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); - void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); - void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2); - void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2); - void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap2f(a0, a1, a2, a3, a4, a5, a6, a7, a8, - reinterpret_cast(array)); -%End - - void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap2d(a0, a1, a2, a3, a4, a5, a6, a7, a8, - reinterpret_cast(array)); -%End - - void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap1f(a0, a1, a2, a3, a4, - reinterpret_cast(array)); -%End - - void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, SIP_PYOBJECT points /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMap1d(a0, a1, a2, a3, a4, - reinterpret_cast(array)); -%End - - void glPushAttrib(GLbitfield mask); - void glPopAttrib(); - void glAccum(GLenum op, GLfloat value); - void glIndexMask(GLuint mask); - void glClearIndex(GLfloat c); - void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glPushName(GLuint name); - void glPopName(); - void glPassThrough(GLfloat token); - void glLoadName(GLuint name); - void glInitNames(); - GLint glRenderMode(GLenum mode); - void glTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGeniv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGeni(GLenum coord, GLenum pname, GLint param); - void glTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGenfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGenf(GLenum coord, GLenum pname, GLfloat param); - void glTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexGendv(a0, a1, reinterpret_cast(array)); -%End - - void glTexGend(GLenum coord, GLenum pname, GLdouble param); - void glTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexEnviv(a0, a1, reinterpret_cast(array)); -%End - - void glTexEnvi(GLenum target, GLenum pname, GLint param); - void glTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexEnvfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexEnvf(GLenum target, GLenum pname, GLfloat param); - void glShadeModel(GLenum mode); - void glPolygonStipple(SIP_PYOBJECT mask /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPolygonStipple(reinterpret_cast(array)); -%End - - void glMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMaterialiv(a0, a1, reinterpret_cast(array)); -%End - - void glMateriali(GLenum face, GLenum pname, GLint param); - void glMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMaterialfv(a0, a1, reinterpret_cast(array)); -%End - - void glMaterialf(GLenum face, GLenum pname, GLfloat param); - void glLineStipple(GLint factor, GLushort pattern); - void glLightModeliv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightModeliv(a0, reinterpret_cast(array)); -%End - - void glLightModeli(GLenum pname, GLint param); - void glLightModelfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightModelfv(a0, reinterpret_cast(array)); -%End - - void glLightModelf(GLenum pname, GLfloat param); - void glLightiv(GLenum light, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightiv(a0, a1, reinterpret_cast(array)); -%End - - void glLighti(GLenum light, GLenum pname, GLint param); - void glLightfv(GLenum light, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLightfv(a0, a1, reinterpret_cast(array)); -%End - - void glLightf(GLenum light, GLenum pname, GLfloat param); - void glFogiv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogiv(a0, reinterpret_cast(array)); -%End - - void glFogi(GLenum pname, GLint param); - void glFogfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogfv(a0, reinterpret_cast(array)); -%End - - void glFogf(GLenum pname, GLfloat param); - void glColorMaterial(GLenum face, GLenum mode); - void glClipPlane(GLenum plane, SIP_PYOBJECT equation /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glClipPlane(a0, reinterpret_cast(array)); -%End - - void glVertex4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4sv(reinterpret_cast(array)); -%End - - void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); - void glVertex4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4iv(reinterpret_cast(array)); -%End - - void glVertex4i(GLint x, GLint y, GLint z, GLint w); - void glVertex4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4fv(reinterpret_cast(array)); -%End - - void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glVertex4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex4dv(reinterpret_cast(array)); -%End - - void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glVertex3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3sv(reinterpret_cast(array)); -%End - - void glVertex3s(GLshort x, GLshort y, GLshort z); - void glVertex3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3iv(reinterpret_cast(array)); -%End - - void glVertex3i(GLint x, GLint y, GLint z); - void glVertex3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3fv(reinterpret_cast(array)); -%End - - void glVertex3f(GLfloat x, GLfloat y, GLfloat z); - void glVertex3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex3dv(reinterpret_cast(array)); -%End - - void glVertex3d(GLdouble x, GLdouble y, GLdouble z); - void glVertex2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2sv(reinterpret_cast(array)); -%End - - void glVertex2s(GLshort x, GLshort y); - void glVertex2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2iv(reinterpret_cast(array)); -%End - - void glVertex2i(GLint x, GLint y); - void glVertex2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2fv(reinterpret_cast(array)); -%End - - void glVertex2f(GLfloat x, GLfloat y); - void glVertex2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertex2dv(reinterpret_cast(array)); -%End - - void glVertex2d(GLdouble x, GLdouble y); - void glTexCoord4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4sv(reinterpret_cast(array)); -%End - - void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q); - void glTexCoord4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4iv(reinterpret_cast(array)); -%End - - void glTexCoord4i(GLint s, GLint t, GLint r, GLint q); - void glTexCoord4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4fv(reinterpret_cast(array)); -%End - - void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void glTexCoord4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord4dv(reinterpret_cast(array)); -%End - - void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void glTexCoord3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3sv(reinterpret_cast(array)); -%End - - void glTexCoord3s(GLshort s, GLshort t, GLshort r); - void glTexCoord3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3iv(reinterpret_cast(array)); -%End - - void glTexCoord3i(GLint s, GLint t, GLint r); - void glTexCoord3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3fv(reinterpret_cast(array)); -%End - - void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r); - void glTexCoord3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord3dv(reinterpret_cast(array)); -%End - - void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r); - void glTexCoord2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2sv(reinterpret_cast(array)); -%End - - void glTexCoord2s(GLshort s, GLshort t); - void glTexCoord2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2iv(reinterpret_cast(array)); -%End - - void glTexCoord2i(GLint s, GLint t); - void glTexCoord2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2fv(reinterpret_cast(array)); -%End - - void glTexCoord2f(GLfloat s, GLfloat t); - void glTexCoord2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord2dv(reinterpret_cast(array)); -%End - - void glTexCoord2d(GLdouble s, GLdouble t); - void glTexCoord1sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1sv(reinterpret_cast(array)); -%End - - void glTexCoord1s(GLshort s); - void glTexCoord1iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1iv(reinterpret_cast(array)); -%End - - void glTexCoord1i(GLint s); - void glTexCoord1fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1fv(reinterpret_cast(array)); -%End - - void glTexCoord1f(GLfloat s); - void glTexCoord1dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexCoord1dv(reinterpret_cast(array)); -%End - - void glTexCoord1d(GLdouble s); - void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2); - void glRecti(GLint x1, GLint y1, GLint x2, GLint y2); - void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); - void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); - void glRasterPos4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4sv(reinterpret_cast(array)); -%End - - void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w); - void glRasterPos4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4iv(reinterpret_cast(array)); -%End - - void glRasterPos4i(GLint x, GLint y, GLint z, GLint w); - void glRasterPos4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4fv(reinterpret_cast(array)); -%End - - void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glRasterPos4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos4dv(reinterpret_cast(array)); -%End - - void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glRasterPos3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3sv(reinterpret_cast(array)); -%End - - void glRasterPos3s(GLshort x, GLshort y, GLshort z); - void glRasterPos3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3iv(reinterpret_cast(array)); -%End - - void glRasterPos3i(GLint x, GLint y, GLint z); - void glRasterPos3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3fv(reinterpret_cast(array)); -%End - - void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); - void glRasterPos3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos3dv(reinterpret_cast(array)); -%End - - void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); - void glRasterPos2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2sv(reinterpret_cast(array)); -%End - - void glRasterPos2s(GLshort x, GLshort y); - void glRasterPos2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2iv(reinterpret_cast(array)); -%End - - void glRasterPos2i(GLint x, GLint y); - void glRasterPos2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2fv(reinterpret_cast(array)); -%End - - void glRasterPos2f(GLfloat x, GLfloat y); - void glRasterPos2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glRasterPos2dv(reinterpret_cast(array)); -%End - - void glRasterPos2d(GLdouble x, GLdouble y); - void glNormal3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3sv(reinterpret_cast(array)); -%End - - void glNormal3s(GLshort nx, GLshort ny, GLshort nz); - void glNormal3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3iv(reinterpret_cast(array)); -%End - - void glNormal3i(GLint nx, GLint ny, GLint nz); - void glNormal3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3fv(reinterpret_cast(array)); -%End - - void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); - void glNormal3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3dv(reinterpret_cast(array)); -%End - - void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz); - void glNormal3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glNormal3bv(reinterpret_cast(array)); -%End - - void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz); - void glIndexsv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexsv(reinterpret_cast(array)); -%End - - void glIndexs(GLshort c); - void glIndexiv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexiv(reinterpret_cast(array)); -%End - - void glIndexi(GLint c); - void glIndexfv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexfv(reinterpret_cast(array)); -%End - - void glIndexf(GLfloat c); - void glIndexdv(SIP_PYOBJECT c /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glIndexdv(reinterpret_cast(array)); -%End - - void glIndexd(GLdouble c); - void glEnd(); - void glEdgeFlagv(SIP_PYOBJECT flag /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glEdgeFlagv(reinterpret_cast(array)); -%End - - void glEdgeFlag(GLboolean flag); - void glColor4usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4usv(reinterpret_cast(array)); -%End - - void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha); - void glColor4uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4uiv(reinterpret_cast(array)); -%End - - void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha); - void glColor4ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4ubv(reinterpret_cast(array)); -%End - - void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); - void glColor4sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4sv(reinterpret_cast(array)); -%End - - void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha); - void glColor4iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4iv(reinterpret_cast(array)); -%End - - void glColor4i(GLint red, GLint green, GLint blue, GLint alpha); - void glColor4fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4fv(reinterpret_cast(array)); -%End - - void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glColor4dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4dv(reinterpret_cast(array)); -%End - - void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); - void glColor4bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor4bv(reinterpret_cast(array)); -%End - - void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); - void glColor3usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3usv(reinterpret_cast(array)); -%End - - void glColor3us(GLushort red, GLushort green, GLushort blue); - void glColor3uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3uiv(reinterpret_cast(array)); -%End - - void glColor3ui(GLuint red, GLuint green, GLuint blue); - void glColor3ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3ubv(reinterpret_cast(array)); -%End - - void glColor3ub(GLubyte red, GLubyte green, GLubyte blue); - void glColor3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3sv(reinterpret_cast(array)); -%End - - void glColor3s(GLshort red, GLshort green, GLshort blue); - void glColor3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3iv(reinterpret_cast(array)); -%End - - void glColor3i(GLint red, GLint green, GLint blue); - void glColor3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3fv(reinterpret_cast(array)); -%End - - void glColor3f(GLfloat red, GLfloat green, GLfloat blue); - void glColor3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3dv(reinterpret_cast(array)); -%End - - void glColor3d(GLdouble red, GLdouble green, GLdouble blue); - void glColor3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColor3bv(reinterpret_cast(array)); -%End - - void glColor3b(GLbyte red, GLbyte green, GLbyte blue); - void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, SIP_PYOBJECT bitmap /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBitmap(a0, a1, a2, a3, a4, a5, - reinterpret_cast(array)); -%End - - void glBegin(GLenum mode); - void glListBase(GLuint base); - GLuint glGenLists(GLsizei range); - void glDeleteLists(GLuint list, GLsizei range); - void glCallList(GLuint list); - void glEndList(); - void glNewList(GLuint list, GLenum mode); - void glPushClientAttrib(GLbitfield mask); - void glPopClientAttrib(); - void glVertexPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "VertexPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glVertexPointer(a0, a1, a2, array); -%End - - void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "TexCoordPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glTexCoordPointer(a0, a1, a2, array); -%End - - void glNormalPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf, - "NormalPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glNormalPointer(a0, a1, array); -%End - - void glIndexPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf, - "IndexPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glIndexPointer(a0, a1, array); -%End - - void glEnableClientState(GLenum array); - void glEdgeFlagPointer(GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a1, - GL_UNSIGNED_BYTE, sipSelf, "EdgeFlagPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glEdgeFlagPointer(a0, array); -%End - - void glDisableClientState(GLenum array); - void glColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf, - "ColorPointer", 0); - - if (sipError == sipErrorNone) - sipCpp->glColorPointer(a0, a1, a2, array); -%End - - void glArrayElement(GLint i); - void glResetMinmax(GLenum target); - void glResetHistogram(GLenum target); - void glMinmax(GLenum target, GLenum internalformat, GLboolean sink); - void glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); - void glGetConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CONVOLUTION_BORDER_COLOR: - case GL_CONVOLUTION_FILTER_SCALE: - case GL_CONVOLUTION_FILTER_BIAS: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetConvolutionParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CONVOLUTION_BORDER_COLOR: - case GL_CONVOLUTION_FILTER_SCALE: - case GL_CONVOLUTION_FILTER_BIAS: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetConvolutionParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); - void glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void glConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionParameteriv(a0, a1, - reinterpret_cast(array)); -%End - - void glConvolutionParameteri(GLenum target, GLenum pname, GLint params); - void glConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionParameterfv(a0, a1, - reinterpret_cast(array)); -%End - - void glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params); - void glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT image /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionFilter2D(a0, a1, a2, a3, a4, a5, array); -%End - - void glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT image /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glConvolutionFilter1D(a0, a1, a2, a3, a4, array); -%End - - void glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - void glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorSubTable(a0, a1, a2, a3, a4, array); -%End - - void glGetColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_COLOR_TABLE: - case GL_POST_CONVOLUTION_COLOR_TABLE: - case GL_POST_COLOR_MATRIX_COLOR_TABLE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetColorTableParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_COLOR_TABLE: - case GL_POST_CONVOLUTION_COLOR_TABLE: - case GL_POST_COLOR_MATRIX_COLOR_TABLE: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetColorTableParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void glColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTableParameteriv(a0, a1, - reinterpret_cast(array)); -%End - - void glColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTableParameterfv(a0, a1, - reinterpret_cast(array)); -%End - - void glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT table /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glColorTable(a0, a1, a2, a3, a4, array); -%End - - void glMultTransposeMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultTransposeMatrixd(reinterpret_cast(array)); -%End - - void glMultTransposeMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultTransposeMatrixf(reinterpret_cast(array)); -%End - - void glLoadTransposeMatrixd(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadTransposeMatrixd(reinterpret_cast(array)); -%End - - void glLoadTransposeMatrixf(SIP_PYOBJECT m /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glLoadTransposeMatrixf(reinterpret_cast(array)); -%End - - void glMultiTexCoord4sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); - void glMultiTexCoord4iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q); - void glMultiTexCoord4fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void glMultiTexCoord4dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord4dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void glMultiTexCoord3sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r); - void glMultiTexCoord3iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r); - void glMultiTexCoord3fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r); - void glMultiTexCoord3dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord3dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r); - void glMultiTexCoord2sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t); - void glMultiTexCoord2iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2i(GLenum target, GLint s, GLint t); - void glMultiTexCoord2fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t); - void glMultiTexCoord2dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord2dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t); - void glMultiTexCoord1sv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1sv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1s(GLenum target, GLshort s); - void glMultiTexCoord1iv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1iv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1i(GLenum target, GLint s); - void glMultiTexCoord1fv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1fv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1f(GLenum target, GLfloat s); - void glMultiTexCoord1dv(GLenum target, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glMultiTexCoord1dv(a0, reinterpret_cast(array)); -%End - - void glMultiTexCoord1d(GLenum target, GLdouble s); - void glClientActiveTexture(GLenum texture); - void glWindowPos3sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3sv(reinterpret_cast(array)); -%End - - void glWindowPos3s(GLshort x, GLshort y, GLshort z); - void glWindowPos3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3iv(reinterpret_cast(array)); -%End - - void glWindowPos3i(GLint x, GLint y, GLint z); - void glWindowPos3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3fv(reinterpret_cast(array)); -%End - - void glWindowPos3f(GLfloat x, GLfloat y, GLfloat z); - void glWindowPos3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos3dv(reinterpret_cast(array)); -%End - - void glWindowPos3d(GLdouble x, GLdouble y, GLdouble z); - void glWindowPos2sv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2sv(reinterpret_cast(array)); -%End - - void glWindowPos2s(GLshort x, GLshort y); - void glWindowPos2iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2iv(reinterpret_cast(array)); -%End - - void glWindowPos2i(GLint x, GLint y); - void glWindowPos2fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2fv(reinterpret_cast(array)); -%End - - void glWindowPos2f(GLfloat x, GLfloat y); - void glWindowPos2dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glWindowPos2dv(reinterpret_cast(array)); -%End - - void glWindowPos2d(GLdouble x, GLdouble y); - void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a1, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColorPointer(a0, a1, a2, array); -%End - - void glSecondaryColor3usv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3usv(reinterpret_cast(array)); -%End - - void glSecondaryColor3us(GLushort red, GLushort green, GLushort blue); - void glSecondaryColor3uiv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3uiv(reinterpret_cast(array)); -%End - - void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue); - void glSecondaryColor3ubv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3ubv(reinterpret_cast(array)); -%End - - void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue); - void glSecondaryColor3sv(SIP_PYBUFFER v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3sv(reinterpret_cast(array)); -%End - - void glSecondaryColor3s(GLshort red, GLshort green, GLshort blue); - void glSecondaryColor3iv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3iv(reinterpret_cast(array)); -%End - - void glSecondaryColor3i(GLint red, GLint green, GLint blue); - void glSecondaryColor3fv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3fv(reinterpret_cast(array)); -%End - - void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue); - void glSecondaryColor3dv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3dv(reinterpret_cast(array)); -%End - - void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue); - void glSecondaryColor3bv(SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glSecondaryColor3bv(reinterpret_cast(array)); -%End - - void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue); - void glFogCoordPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, a0, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoordPointer(a0, a1, array); -%End - - void glFogCoorddv(SIP_PYOBJECT coord /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoorddv(reinterpret_cast(array)); -%End - - void glFogCoordd(GLdouble coord); - void glFogCoordfv(SIP_PYOBJECT coord /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glFogCoordfv(reinterpret_cast(array)); -%End - - void glFogCoordf(GLfloat coord); - void glVertexAttrib4usv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4usv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4uiv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4uiv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4ubv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4ubv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); - void glVertexAttrib4iv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4iv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glVertexAttrib4dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glVertexAttrib4bv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4bv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nusv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nusv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nuiv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nuiv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nubv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nubv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); - void glVertexAttrib4Nsv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nsv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Niv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Niv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4Nbv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4Nbv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z); - void glVertexAttrib3fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z); - void glVertexAttrib3dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z); - void glVertexAttrib2sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2s(GLuint index, GLshort x, GLshort y); - void glVertexAttrib2fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y); - void glVertexAttrib2dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y); - void glVertexAttrib1sv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1sv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1s(GLuint index, GLshort x); - void glVertexAttrib1fv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1f(GLuint index, GLfloat x); - void glVertexAttrib1dv(GLuint index, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1dv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib1d(GLuint index, GLdouble x); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_4_1_core.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_4_1_core.sip deleted file mode 100644 index f4614a5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_4_1_core.sip +++ /dev/null @@ -1,1074 +0,0 @@ -// qopenglfunctions_4_1_core.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (!PyQt_OpenGL_ES2) - -class QOpenGLFunctions_4_1_Core : public QAbstractOpenGLFunctions -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLFunctions_4_1_Core(); - virtual ~QOpenGLFunctions_4_1_Core(); - virtual bool initializeOpenGLFunctions(); - void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); - void glDepthRange(GLdouble nearVal, GLdouble farVal); - GLboolean glIsEnabled(GLenum cap); - void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="int"/); -%MethodCode - GLint params[1]; - - sipCpp->glGetTexLevelParameteriv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLint(&sipIsErr, params, 1); -%End - - void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /TypeHint="float"/); -%MethodCode - GLfloat params[1]; - - sipCpp->glGetTexLevelParameterfv(a0, a1, a2, params); - - a3 = qpyopengl_from_GLfloat(&sipIsErr, params, 1); -%End - - void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - const char *glGetString(GLenum name); -%MethodCode - sipRes = reinterpret_cast(sipCpp->glGetString(a0)); -%End - - void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLint fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLint[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetIntegerv(a0, params); - a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLfloat fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLfloat[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetFloatv(a0, params); - a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - GLenum glGetError(); - void glGetDoublev(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLdouble fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLdouble[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetDoublev(a0, params); - a1 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[bool, Tuple[bool, ...]]"/); -%MethodCode - GLboolean fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLboolean[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetBooleanv(a0, params); - a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - SIP_PYOBJECT glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type) /TypeHint="Union[Tuple[float, ...], Tuple[int, ...]]"/; -%MethodCode - int components; - - switch (a4) - { - case GL_BGR: - case GL_RGB: - { - components = 3; - break; - } - - case GL_BGRA: - case GL_RGBA: - { - components = 4; - break; - } - - case GL_RED: - case GL_GREEN: - case GL_BLUE: - case GL_ALPHA: - case GL_DEPTH_COMPONENT: - case GL_STENCIL_INDEX: - case GL_DEPTH_STENCIL: - { - components = 1; - break; - } - - default: - components = 0; - } - - Py_ssize_t length = components * a2 * a3; - - switch (a5) - { - case GL_FLOAT: - { - GLfloat *data = new GLfloat[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLfloat(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_INT: - { - GLint *data = new GLint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_UNSIGNED_INT: - case GL_UNSIGNED_INT_8_8_8_8: - case GL_UNSIGNED_INT_8_8_8_8_REV: - case GL_UNSIGNED_INT_10_10_10_2: - case GL_UNSIGNED_INT_2_10_10_10_REV: - case GL_UNSIGNED_INT_24_8: - case GL_UNSIGNED_INT_10F_11F_11F_REV: - case GL_UNSIGNED_INT_5_9_9_9_REV: - { - GLuint *data = new GLuint[length]; - - sipCpp->glReadPixels(a0, a1, a2, a3, a4, a5, data); - sipRes = qpyopengl_from_GLuint(&sipIsErr, data, length); - delete [] data; - - break; - } - - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_5_6_5_REV: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_4_4_4_4_REV: - case GL_UNSIGNED_SHORT_5_5_5_1: - case GL_UNSIGNED_SHORT_1_5_5_5_REV: - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_BYTE_3_3_2: - case GL_UNSIGNED_BYTE_2_3_3_REV: - case GL_HALF_FLOAT: - case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: - default: - sipIsErr = 1; - PyErr_SetString(PyExc_ValueError, "pixel data format not supported"); - } -%End - - void glReadBuffer(GLenum mode); - void glPixelStorei(GLenum pname, GLint param); - void glPixelStoref(GLenum pname, GLfloat param); - void glDepthFunc(GLenum func); - void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); - void glStencilFunc(GLenum func, GLint ref, GLuint mask); - void glLogicOp(GLenum opcode); - void glBlendFunc(GLenum sfactor, GLenum dfactor); - void glFlush(); - void glFinish(); - void glEnable(GLenum cap); - void glDisable(GLenum cap); - void glDepthMask(GLboolean flag); - void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - void glStencilMask(GLuint mask); - void glClearDepth(GLdouble depth); - void glClearStencil(GLint s); - void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glClear(GLbitfield mask); - void glDrawBuffer(GLenum mode); - void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, a6, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage1D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameteriv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameteri(GLenum target, GLenum pname, GLint param); - void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameterfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameterf(GLenum target, GLenum pname, GLfloat param); - void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); - void glPolygonMode(GLenum face, GLenum mode); - void glPointSize(GLfloat size); - void glLineWidth(GLfloat width); - void glHint(GLenum target, GLenum mode); - void glFrontFace(GLenum mode); - void glCullFace(GLenum mode); - GLboolean glIsTexture(GLuint texture); - void glGenTextures(GLsizei n, SIP_PYOBJECT *textures /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenTextures(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteTextures(a0, reinterpret_cast(array)); -%End - - void glBindTexture(GLenum target, GLuint texture); - void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); - void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); - void glPolygonOffset(GLfloat factor, GLfloat units); - void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawElements(a0, a1, a2, array); -%End - - void glDrawArrays(GLenum mode, GLint first, GLsizei count); - void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, a9, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, array); -%End - - void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a9, a8, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, array); -%End - - void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawRangeElements(a0, a1, a2, a3, a4, array); -%End - - void glBlendEquation(GLenum mode); - void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a10, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, - array); -%End - - void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage1D(a0, a1, a2, a3, a4, a5, array); -%End - - void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glSampleCoverage(GLfloat value, GLboolean invert); - void glActiveTexture(GLenum texture); - void glPointParameteriv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameteriv(a0, reinterpret_cast(array)); -%End - - void glPointParameteri(GLenum pname, GLint param); - void glPointParameterfv(GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glPointParameterfv(a0, reinterpret_cast(array)); -%End - - void glPointParameterf(GLenum pname, GLfloat param); - void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params); - GLboolean glUnmapBuffer(GLenum target); - void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array; - - if (a3 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferSubData(a0, a1, a2, array); -%End - - void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/, GLenum usage); -%MethodCode - const GLvoid *array; - - if (a2 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferData(a0, a1, array, a3); -%End - - GLboolean glIsBuffer(GLuint buffer); - void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenBuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteBuffers(a0, reinterpret_cast(array)); -%End - - void glBindBuffer(GLenum target, GLuint buffer); - void glGetQueryiv(GLenum target, GLenum pname, GLint *params); - void glEndQuery(GLenum target); - void glBeginQuery(GLenum target, GLuint id); - GLboolean glIsQuery(GLuint id); - void glDeleteQueries(GLsizei n, SIP_PYOBJECT ids /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteQueries(a0, reinterpret_cast(array)); -%End - - void glGenQueries(GLsizei n, SIP_PYOBJECT *ids /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenQueries(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT pointer /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf, - "VertexAttribPointer", a0); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array); -%End - - void glValidateProgram(GLuint program); - void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix4fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix3fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix2fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2); - void glUniform2i(GLint location, GLint v0, GLint v1); - void glUniform1i(GLint location, GLint v0); - void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - void glUniform2f(GLint location, GLfloat v0, GLfloat v1); - void glUniform1f(GLint location, GLfloat v0); - void glUseProgram(GLuint program); - void glLinkProgram(GLuint program); - GLboolean glIsShader(GLuint shader); - GLboolean glIsProgram(GLuint program); - void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribdv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLdouble params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribdv(a0, a1, params); - - a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params); -%End - - GLint glGetUniformLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetShaderSource(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *source = new GLchar[bufsize]; - - sipCpp->glGetShaderSource(a0, bufsize, 0, source); - sipRes = PyBytes_FromString(source); - - delete[] source; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetShaderiv(GLuint shader, GLenum pname, GLint *params); - SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int]]"/); -%MethodCode - GLint params[3]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_COMPUTE_LOCAL_WORK_SIZE) - case GL_COMPUTE_LOCAL_WORK_SIZE: - nr_params = 3; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetProgramiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - GLint glGetAttribLocation(GLuint program, const GLchar *name); - SIP_PYOBJECT glGetAttachedShaders(GLuint program) /TypeHint="Tuple[int, ...]"/; -%MethodCode - GLint nr_shaders; - - sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders); - - if (nr_shaders < 1) - { - sipRes = PyTuple_New(0); - } - else - { - GLuint *shaders = new GLuint[nr_shaders]; - - sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders); - - sipRes = PyTuple_New(nr_shaders); - - if (sipRes) - { - for (GLint i = 0; i < nr_shaders; ++i) - { - PyObject *itm = PyLong_FromLong(shaders[i]); - - if (!itm) - { - Py_DECREF(sipRes); - sipRes = 0; - break; - } - - PyTuple_SetItem(sipRes, i, itm); - } - } - - delete[] shaders; - } - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - void glEnableVertexAttribArray(GLuint index); - void glDisableVertexAttribArray(GLuint index); - void glDetachShader(GLuint program, GLuint shader); - void glDeleteShader(GLuint shader); - void glDeleteProgram(GLuint program); - GLuint glCreateShader(GLenum type); - GLuint glCreateProgram(); - void glCompileShader(GLuint shader); - void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name); - void glAttachShader(GLuint program, GLuint shader); - void glStencilMaskSeparate(GLenum face, GLuint mask); - void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); - void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - void glDrawBuffers(GLsizei n, SIP_PYOBJECT bufs /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawBuffers(a0, reinterpret_cast(array)); -%End - - void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); - GLboolean glIsVertexArray(GLuint array); - void glBindVertexArray(GLuint array); - void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); - void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - void glGenerateMipmap(GLenum target); - void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - void glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); - void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - void glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - GLenum glCheckFramebufferStatus(GLenum target); - void glBindFramebuffer(GLenum target, GLuint framebuffer); - GLboolean glIsFramebuffer(GLuint framebuffer); - void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - void glBindRenderbuffer(GLenum target, GLuint renderbuffer); - GLboolean glIsRenderbuffer(GLuint renderbuffer); - void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); - void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); - void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2); - void glUniform2ui(GLint location, GLuint v0, GLuint v1); - void glUniform1ui(GLint location, GLuint v0); - void glEndConditionalRender(); - void glBeginConditionalRender(GLuint id, GLenum mode); - void glClampColor(GLenum target, GLenum clamp); - void glBindBufferBase(GLenum target, GLuint index, GLuint buffer); - void glEndTransformFeedback(); - void glBeginTransformFeedback(GLenum primitiveMode); - GLboolean glIsEnabledi(GLenum target, GLuint index); - void glDisablei(GLenum target, GLuint index); - void glEnablei(GLenum target, GLuint index); - void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); - void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); - void glPrimitiveRestartIndex(GLuint index); - void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer); - void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); - void glSampleMaski(GLuint index, GLbitfield mask); - void glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); - void glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); - void glProvokingVertex(GLenum mode); - void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level); - void glVertexAttribP4ui(GLuint index, GLenum type, GLboolean normalized, GLuint value); - void glVertexAttribP3ui(GLuint index, GLenum type, GLboolean normalized, GLuint value); - void glVertexAttribP2ui(GLuint index, GLenum type, GLboolean normalized, GLuint value); - void glVertexAttribP1ui(GLuint index, GLenum type, GLboolean normalized, GLuint value); - void glQueryCounter(GLuint id, GLenum target); - void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param); - void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param); - void glBindSampler(GLuint unit, GLuint sampler); - GLboolean glIsSampler(GLuint sampler); - void glVertexAttribDivisor(GLuint index, GLuint divisor); - void glEndQueryIndexed(GLenum target, GLuint index); - void glBeginQueryIndexed(GLenum target, GLuint index, GLuint id); - void glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream); - void glDrawTransformFeedback(GLenum mode, GLuint id); - void glResumeTransformFeedback(); - void glPauseTransformFeedback(); - GLboolean glIsTransformFeedback(GLuint id); - void glBindTransformFeedback(GLenum target, GLuint id); - void glPatchParameteri(GLenum pname, GLint value); - void glUniform4d(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glUniform3d(GLint location, GLdouble x, GLdouble y, GLdouble z); - void glUniform2d(GLint location, GLdouble x, GLdouble y); - void glUniform1d(GLint location, GLdouble x); - void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); - void glBlendFunci(GLuint buf, GLenum src, GLenum dst); - void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha); - void glBlendEquationi(GLuint buf, GLenum mode); - void glMinSampleShading(GLfloat value); - void glDepthRangeIndexed(GLuint index, GLdouble n, GLdouble f); - void glScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); - void glViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); - void glVertexAttribL4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void glVertexAttribL3d(GLuint index, GLdouble x, GLdouble y, GLdouble z); - void glVertexAttribL2d(GLuint index, GLdouble x, GLdouble y); - void glVertexAttribL1d(GLuint index, GLdouble x); - void glValidateProgramPipeline(GLuint pipeline); - void glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); - void glProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); - void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - void glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); - void glProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); - void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); - void glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1); - void glProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1); - void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1); - void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1); - void glProgramUniform1ui(GLuint program, GLint location, GLuint v0); - void glProgramUniform1d(GLuint program, GLint location, GLdouble v0); - void glProgramUniform1f(GLuint program, GLint location, GLfloat v0); - void glProgramUniform1i(GLuint program, GLint location, GLint v0); - GLboolean glIsProgramPipeline(GLuint pipeline); - void glBindProgramPipeline(GLuint pipeline); - void glActiveShaderProgram(GLuint pipeline, GLuint program); - void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program); - void glProgramParameteri(GLuint program, GLenum pname, GLint value); - void glClearDepthf(GLfloat dd); - void glDepthRangef(GLfloat n, GLfloat f); - void glReleaseShaderCompiler(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_es2.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_es2.sip deleted file mode 100644 index d23b5db..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglfunctions_es2.sip +++ /dev/null @@ -1,815 +0,0 @@ -// qopenglfunctions_es2.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_OpenGL_ES2) - -class QOpenGLFunctions_ES2 : public QAbstractOpenGLFunctions -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLFunctions_ES2(); - bool initializeOpenGLFunctions(); - void glActiveTexture(GLenum texture); - void glAttachShader(GLuint program, GLuint shader); - void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name); - void glBindBuffer(GLenum target, GLuint buffer); - void glBindFramebuffer(GLenum target, GLuint framebuffer); - void glBindRenderbuffer(GLenum target, GLuint renderbuffer); - void glBindTexture(GLenum target, GLuint texture); - void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - void glBlendEquation(GLenum mode); - void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); - void glBlendFunc(GLenum sfactor, GLenum dfactor); - void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); - void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/, GLenum usage); -%MethodCode - const GLvoid *array; - - if (a2 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferData(a0, a1, array, a3); -%End - - void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array; - - if (a3 == Py_None) - array = 0; - else - array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glBufferSubData(a0, a1, a2, array); -%End - - GLenum glCheckFramebufferStatus(GLenum target); - void glClear(GLbitfield mask); - void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - void glClearDepthf(GLclampf depth); - void glClearStencil(GLint s); - void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - void glCompileShader(GLuint shader); - void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array); -%End - - void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - GLuint glCreateProgram(); - GLuint glCreateShader(GLenum type); - void glCullFace(GLenum mode); - void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteBuffers(a0, reinterpret_cast(array)); -%End - - void glDeleteFramebuffers(GLsizei n, SIP_PYOBJECT framebuffers); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteFramebuffers(a0, reinterpret_cast(array)); -%End - - void glDeleteProgram(GLuint program); - void glDeleteRenderbuffers(GLsizei n, SIP_PYOBJECT renderbuffers); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteRenderbuffers(a0, reinterpret_cast(array)); -%End - - void glDeleteShader(GLuint shader); - void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT, - sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDeleteTextures(a0, reinterpret_cast(array)); -%End - - void glDepthFunc(GLenum func); - void glDepthMask(GLboolean flag); - void glDepthRangef(GLclampf zNear, GLclampf zFar); - void glDetachShader(GLuint program, GLuint shader); - void glDisable(GLenum cap); - void glDisableVertexAttribArray(GLuint index); - void glDrawArrays(GLenum mode, GLint first, GLsizei count); - void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glDrawElements(a0, a1, a2, array); -%End - - void glEnable(GLenum cap); - void glEnableVertexAttribArray(GLuint index); - void glFinish(); - void glFlush(); - void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - void glFrontFace(GLenum mode); - void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenBuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glGenerateMipmap(GLenum target); - void glGenFramebuffers(GLsizei n, SIP_PYOBJECT framebuffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenFramebuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glGenRenderbuffers(GLsizei n, SIP_PYOBJECT *renderbuffers /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenRenderbuffers(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - void glGenTextures(GLsizei n, SIP_PYOBJECT textures /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLuint *params = new GLuint[a0]; - - sipCpp->glGenTextures(a0, params); - - a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0); - - delete[] params; -%End - - SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /TypeHint="Tuple[str, int, int]"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize); - - GLchar *name = new GLchar[bufsize]; - GLint size; - GLenum type; - - sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name); - - sipRes = Py_BuildValue("siI", name, size, type); - - if (!sipRes) - sipIsErr = 1; - - delete[] name; -%End - - SIP_PYOBJECT glGetAttachedShaders(GLuint program) /TypeHint="Tuple[int, ...]"/; -%MethodCode - GLint nr_shaders; - - sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders); - - if (nr_shaders < 1) - { - sipRes = PyTuple_New(0); - } - else - { - GLuint *shaders = new GLuint[nr_shaders]; - - sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders); - - sipRes = PyTuple_New(nr_shaders); - - if (sipRes) - { - for (GLint i = 0; i < nr_shaders; ++i) - { - PyObject *itm = PyLong_FromLong(shaders[i]); - - if (!itm) - { - Py_DECREF(sipRes); - sipRes = 0; - break; - } - - PyTuple_SetItem(sipRes, i, itm); - } - } - - delete[] shaders; - } - - if (!sipRes) - sipIsErr = 1; -%End - - int glGetAttribLocation(GLuint program, const GLchar *name); - void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[bool, Tuple[bool, ...]]"/); -%MethodCode - GLboolean fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLboolean[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetBooleanv(a0, params); - a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params); - GLenum glGetError(); - void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, ...]]"/); -%MethodCode - GLfloat fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLfloat[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetFloatv(a0, params); - a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params); - void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, ...]]"/); -%MethodCode - GLint fixed_params[16], *params; - GLint nr_params; - GLenum query; - - nr_params = qpyopengl_get(a0, &query); - - if (nr_params == 0) - { - sipCpp->glGetIntegerv(query, &nr_params); - params = new GLint[nr_params]; - } - else - { - params = fixed_params; - } - - sipCpp->glGetIntegerv(a0, params); - a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); - - if (params != fixed_params) - delete[] params; -%End - - void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int]]"/); -%MethodCode - GLint params[3]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_COMPUTE_LOCAL_WORK_SIZE) - case GL_COMPUTE_LOCAL_WORK_SIZE: - nr_params = 3; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetProgramiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params); - void glGetShaderiv(GLuint shader, GLenum pname, GLint *params); - SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *log = new GLchar[bufsize]; - - sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log); - sipRes = PyBytes_FromString(log); - - delete[] log; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - SIP_PYOBJECT glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype) /TypeHint="Tuple[Tuple[int, int], int]"/; -%MethodCode - GLint range[2], precision; - - sipCpp->glGetShaderPrecisionFormat(a0, a1, range, &precision); - - sipRes = Py_BuildValue("(ii)i", (int)range[0], (int)range[1], (int)precision); - - if (!sipRes) - sipIsErr = 1; -%End - - SIP_PYOBJECT glGetShaderSource(GLuint shader) /TypeHint="bytes"/; -%MethodCode - GLint bufsize; - - sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize); - - if (bufsize > 0) - { - GLchar *source = new GLchar[bufsize]; - - sipCpp->glGetShaderSource(a0, bufsize, 0, source); - sipRes = PyBytes_FromString(source); - - delete[] source; - } - else - { - sipRes = PyBytes_FromString(""); - } -%End - - const char *glGetString(GLenum name); -%MethodCode - sipRes = reinterpret_cast(sipCpp->glGetString(a0)); -%End - - void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameterfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_BORDER_COLOR) - #if defined(GL_TEXTURE_SWIZZLE_RGBA) - case GL_TEXTURE_SWIZZLE_RGBA: - #endif - #if defined(GL_TEXTURE_BORDER_COLOR) - case GL_TEXTURE_BORDER_COLOR: - #endif - nr_params = 4; - break; - #endif - - default: - nr_params = 1; - } - - sipCpp->glGetTexParameteriv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - int glGetUniformLocation(GLuint program, const GLchar *name); - void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[float, Tuple[float, float, float, float]]"/); -%MethodCode - GLfloat params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribfv(a0, a1, params); - - a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params); -%End - - void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /TypeHint="Union[int, Tuple[int, int, int, int]]"/); -%MethodCode - GLint params[4]; - Py_ssize_t nr_params; - - switch (a1) - { - case GL_CURRENT_VERTEX_ATTRIB: - nr_params = 4; - break; - - default: - nr_params = 1; - } - - sipCpp->glGetVertexAttribiv(a0, a1, params); - - a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params); -%End - - void glHint(GLenum target, GLenum mode); - GLboolean glIsBuffer(GLuint buffer); - GLboolean glIsEnabled(GLenum cap); - GLboolean glIsFramebuffer(GLuint framebuffer); - GLboolean glIsProgram(GLuint program); - GLboolean glIsRenderbuffer(GLuint renderbuffer); - GLboolean glIsShader(GLuint shader); - GLboolean glIsTexture(GLuint texture); - void glLineWidth(GLfloat width); - void glLinkProgram(GLuint program); - void glPixelStorei(GLenum pname, GLint param); - void glPolygonOffset(GLfloat factor, GLfloat units); - SIP_PYOBJECT glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type) /TypeHint="Union[Tuple[float, ...], Tuple[int, ...]]"/; -%MethodCode - int components; - - switch (a4) - { - case GL_RGB: - { - components = 3; - break; - } - - case GL_RGBA: - { - components = 4; - break; - } - - case GL_ALPHA: - { - components = 1; - break; - } - - default: - components = 0; - } - - Py_ssize_t length = components * a2 * a3; - - switch (a5) - { - // TODO: Implement array convertors for these formats. - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_5_5_5_1: - case GL_UNSIGNED_BYTE: - default: - sipIsErr = 1; - PyErr_SetString(PyExc_ValueError, "pixel data format not supported"); - } -%End - - void glReleaseShaderCompiler(); - void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - void glSampleCoverage(GLclampf value, GLboolean invert); - void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); - void glStencilFunc(GLenum func, GLint ref, GLuint mask); - void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); - void glStencilMask(GLuint mask); - void glStencilMaskSeparate(GLenum face, GLuint mask); - void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); - void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); - void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glTexParameterf(GLenum target, GLenum pname, GLfloat param); - void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameterfv(a0, a1, reinterpret_cast(array)); -%End - - void glTexParameteri(GLenum target, GLenum pname, GLint param); - void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexParameteriv(a0, a1, reinterpret_cast(array)); -%End - - void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array); -%End - - void glUniform1f(GLint location, GLfloat x); - void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform1i(GLint location, GLint x); - void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform1iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2f(GLint location, GLfloat x, GLfloat y); - void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform2i(GLint location, GLint x, GLint y); - void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform2iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z); - void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform3i(GLint location, GLint x, GLint y, GLint z); - void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform3iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4fv(a0, a1, reinterpret_cast(array)); -%End - - void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w); - void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT v /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniform4iv(a0, a1, reinterpret_cast(array)); -%End - - void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix2fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix3fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glUniformMatrix4fv(a0, a1, a2, - reinterpret_cast(array)); -%End - - void glUseProgram(GLuint program); - void glValidateProgram(GLuint program); - void glVertexAttrib1f(GLuint indx, GLfloat x); - void glVertexAttrib1fv(GLuint indx, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib1fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y); - void glVertexAttrib2fv(GLuint indx, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib2fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z); - void glVertexAttrib3fv(GLuint indx, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib3fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void glVertexAttrib4fv(GLuint indx, SIP_PYOBJECT values /TypeHint="PYQT_OPENGL_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttrib4fv(a0, reinterpret_cast(array)); -%End - - void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT ptr /TypeHint="PYQT_OPENGL_BOUND_ARRAY"/); -%MethodCode - const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf, - "VertexAttribPointer", a0); - - if (sipError == sipErrorNone) - sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array); -%End - - void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpaintdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpaintdevice.sip deleted file mode 100644 index 88d520d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpaintdevice.sip +++ /dev/null @@ -1,49 +0,0 @@ -// qopenglpaintdevice.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLPaintDevice : public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLPaintDevice(); - explicit QOpenGLPaintDevice(const QSize &size); - QOpenGLPaintDevice(int width, int height); - virtual ~QOpenGLPaintDevice(); - virtual QPaintEngine *paintEngine() const; - QOpenGLContext *context() const; - QSize size() const; - void setSize(const QSize &size); - qreal dotsPerMeterX() const; - qreal dotsPerMeterY() const; - void setDotsPerMeterX(qreal); - void setDotsPerMeterY(qreal); - void setPaintFlipped(bool flipped); - bool paintFlipped() const; - virtual void ensureActiveTarget(); - void setDevicePixelRatio(qreal devicePixelRatio); - -protected: - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpixeltransferoptions.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpixeltransferoptions.sip deleted file mode 100644 index cf21da8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglpixeltransferoptions.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qopenglpixeltransferoptions.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLPixelTransferOptions -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLPixelTransferOptions(); - QOpenGLPixelTransferOptions(const QOpenGLPixelTransferOptions &); - ~QOpenGLPixelTransferOptions(); - void swap(QOpenGLPixelTransferOptions &other /Constrained/); - void setAlignment(int alignment); - int alignment() const; - void setSkipImages(int skipImages); - int skipImages() const; - void setSkipRows(int skipRows); - int skipRows() const; - void setSkipPixels(int skipPixels); - int skipPixels() const; - void setImageHeight(int imageHeight); - int imageHeight() const; - void setRowLength(int rowLength); - int rowLength() const; - void setLeastSignificantByteFirst(bool lsbFirst); - bool isLeastSignificantBitFirst() const; - void setSwapBytesEnabled(bool swapBytes); - bool isSwapBytesEnabled() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglshaderprogram.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglshaderprogram.sip deleted file mode 100644 index 132adde..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglshaderprogram.sip +++ /dev/null @@ -1,319 +0,0 @@ -// qopenglshaderprogram.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLShader : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ShaderTypeBit /BaseType=Flag/ - { - Vertex, - Fragment, - Geometry, - TessellationControl, - TessellationEvaluation, - Compute, - }; - - typedef QFlags ShaderType; - QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLShader(); - QOpenGLShader::ShaderType shaderType() const; - bool compileSourceCode(const QByteArray &source); - bool compileSourceCode(const QString &source); - bool compileSourceFile(const QString &fileName); - QByteArray sourceCode() const; - bool isCompiled() const; - QString log() const; - GLuint shaderId() const; - static bool hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context = 0); -}; - -class QOpenGLShaderProgram : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOpenGLShaderProgram(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLShaderProgram(); - bool addShader(QOpenGLShader *shader); - void removeShader(QOpenGLShader *shader); - QList shaders() const; - bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source); - bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source); - bool addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName); - void removeAllShaders(); - virtual bool link(); - bool isLinked() const; - QString log() const; - bool bind(); - void release(); - GLuint programId() const; - void bindAttributeLocation(const QByteArray &name, int location); - void bindAttributeLocation(const QString &name, int location); - int attributeLocation(const QByteArray &name) const; - int attributeLocation(const QString &name) const; - void setAttributeValue(int location, GLfloat value); - void setAttributeValue(int location, GLfloat x, GLfloat y); - void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z); - void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void setAttributeValue(int location, const QVector2D &value); - void setAttributeValue(int location, const QVector3D &value); - void setAttributeValue(int location, const QVector4D &value); - void setAttributeValue(int location, const QColor &value); - void setAttributeValue(const char *name, GLfloat value); - void setAttributeValue(const char *name, GLfloat x, GLfloat y); - void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z); - void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void setAttributeValue(const char *name, const QVector2D &value); - void setAttributeValue(const char *name, const QVector3D &value); - void setAttributeValue(const char *name, const QVector4D &value); - void setAttributeValue(const char *name, const QColor &value); - void setAttributeArray(int location, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_ATTRIBUTE_ARRAY"/); -%MethodCode - const GLfloat *values; - int tsize; - - values = qpyopengl_attribute_array(a1, sipSelf, PyLong_FromLong(a0), &tsize, - &sipError); - - if (values) - sipCpp->setAttributeArray(a0, values, tsize); -%End - - void setAttributeArray(const char *name, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_ATTRIBUTE_ARRAY"/); -%MethodCode - const GLfloat *values; - int tsize; - - values = qpyopengl_attribute_array(a1, sipSelf, PyBytes_FromString(a0), - &tsize, &sipError); - - if (values) - sipCpp->setAttributeArray(a0, values, tsize); -%End - - void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0); - void setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0); - void enableAttributeArray(int location); - void enableAttributeArray(const char *name); - void disableAttributeArray(int location); - void disableAttributeArray(const char *name); - int uniformLocation(const QByteArray &name) const; - int uniformLocation(const QString &name) const; - void setUniformValue(int location, GLint value /Constrained/); - void setUniformValue(int location, GLfloat value /Constrained/); - void setUniformValue(int location, GLfloat x, GLfloat y); - void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z); - void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void setUniformValue(int location, const QVector2D &value); - void setUniformValue(int location, const QVector3D &value); - void setUniformValue(int location, const QVector4D &value); - void setUniformValue(int location, const QColor &color); - void setUniformValue(int location, const QPoint &point); - void setUniformValue(int location, const QPointF &point); - void setUniformValue(int location, const QSize &size); - void setUniformValue(int location, const QSizeF &size); - void setUniformValue(int location, const QMatrix2x2 &value); - void setUniformValue(int location, const QMatrix2x3 &value); - void setUniformValue(int location, const QMatrix2x4 &value); - void setUniformValue(int location, const QMatrix3x2 &value); - void setUniformValue(int location, const QMatrix3x3 &value); - void setUniformValue(int location, const QMatrix3x4 &value); - void setUniformValue(int location, const QMatrix4x2 &value); - void setUniformValue(int location, const QMatrix4x3 &value); - void setUniformValue(int location, const QMatrix4x4 &value); - void setUniformValue(int location, const QTransform &value); - void setUniformValue(const char *name, GLint value /Constrained/); - void setUniformValue(const char *name, GLfloat value /Constrained/); - void setUniformValue(const char *name, GLfloat x, GLfloat y); - void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z); - void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void setUniformValue(const char *name, const QVector2D &value); - void setUniformValue(const char *name, const QVector3D &value); - void setUniformValue(const char *name, const QVector4D &value); - void setUniformValue(const char *name, const QColor &color); - void setUniformValue(const char *name, const QPoint &point); - void setUniformValue(const char *name, const QPointF &point); - void setUniformValue(const char *name, const QSize &size); - void setUniformValue(const char *name, const QSizeF &size); - void setUniformValue(const char *name, const QMatrix2x2 &value); - void setUniformValue(const char *name, const QMatrix2x3 &value); - void setUniformValue(const char *name, const QMatrix2x4 &value); - void setUniformValue(const char *name, const QMatrix3x2 &value); - void setUniformValue(const char *name, const QMatrix3x3 &value); - void setUniformValue(const char *name, const QMatrix3x4 &value); - void setUniformValue(const char *name, const QMatrix4x2 &value); - void setUniformValue(const char *name, const QMatrix4x3 &value); - void setUniformValue(const char *name, const QMatrix4x4 &value); - void setUniformValue(const char *name, const QTransform &value); - void setUniformValueArray(int location, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_UNIFORM_VALUE_ARRAY"/); -%MethodCode - const void *values; - const sipTypeDef *array_type; - int array_len, tsize; - - values = qpyopengl_uniform_value_array(a1, sipSelf, PyLong_FromLong(a0), - &array_type, &array_len, &tsize, &sipError); - - if (values) - { - if (array_type == sipType_QVector2D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QVector3D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QVector4D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len, tsize); - } -%End - - void setUniformValueArray(const char *name, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_UNIFORM_VALUE_ARRAY"/); -%MethodCode - const void *values; - const sipTypeDef *array_type; - int array_len, tsize; - - values = qpyopengl_uniform_value_array(a1, sipSelf, PyBytes_FromString(a0), - &array_type, &array_len, &tsize, &sipError); - - if (values) - { - if (array_type == sipType_QVector2D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QVector3D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QVector4D) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix2x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix3x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x2) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x3) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else if (array_type == sipType_QMatrix4x4) - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len); - else - sipCpp->setUniformValueArray(a0, - reinterpret_cast(values), array_len, tsize); - } -%End - - static bool hasOpenGLShaderPrograms(QOpenGLContext *context = 0); - int maxGeometryOutputVertices() const; - void setPatchVertexCount(int count); - int patchVertexCount() const; - void setDefaultOuterTessellationLevels(const QList &levels); - QList defaultOuterTessellationLevels() const; - void setDefaultInnerTessellationLevels(const QList &levels); - QList defaultInnerTessellationLevels() const; - bool create(); - bool addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source); - bool addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source); - bool addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName); -}; - -%ModuleHeaderCode -#include "qpyopengl_api.h" -%End - -%InitialisationCode -qpyopengl_init(); -%End - -%TypeHintCode -# Convenient aliases for complicated OpenGL types. -PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], - PyQt6.sip.Buffer, None] -PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], - typing.Sequence[float], PyQt6.sip.Buffer, int, None] -PYQT_SHADER_ATTRIBUTE_ARRAY = typing.Union[typing.Sequence[QtGui.QVector2D], - typing.Sequence[QtGui.QVector3D], typing.Sequence[QtGui.QVector4D], - typing.Sequence[typing.Sequence[float]]] -PYQT_SHADER_UNIFORM_VALUE_ARRAY = typing.Union[ - typing.Sequence[QtGui.QVector2D], typing.Sequence[QtGui.QVector3D], - typing.Sequence[QtGui.QVector4D], typing.Sequence[QtGui.QMatrix2x2], - typing.Sequence[QtGui.QMatrix2x3], typing.Sequence[QtGui.QMatrix2x4], - typing.Sequence[QtGui.QMatrix3x2], typing.Sequence[QtGui.QMatrix3x3], - typing.Sequence[QtGui.QMatrix3x4], typing.Sequence[QtGui.QMatrix4x2], - typing.Sequence[QtGui.QMatrix4x3], typing.Sequence[QtGui.QMatrix4x4], - typing.Sequence[typing.Sequence[float]]] -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltexture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltexture.sip deleted file mode 100644 index 06b1032..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltexture.sip +++ /dev/null @@ -1,462 +0,0 @@ -// qopengltexture.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLTexture -{ -%TypeHeaderCode -#include -%End - -public: - enum Target - { - Target1D, - Target1DArray, - Target2D, - Target2DArray, - Target3D, - TargetCubeMap, - TargetCubeMapArray, - Target2DMultisample, - Target2DMultisampleArray, - TargetRectangle, - TargetBuffer, - }; - - enum BindingTarget - { - BindingTarget1D, - BindingTarget1DArray, - BindingTarget2D, - BindingTarget2DArray, - BindingTarget3D, - BindingTargetCubeMap, - BindingTargetCubeMapArray, - BindingTarget2DMultisample, - BindingTarget2DMultisampleArray, - BindingTargetRectangle, - BindingTargetBuffer, - }; - - enum MipMapGeneration - { - GenerateMipMaps, - DontGenerateMipMaps, - }; - - enum TextureUnitReset - { - ResetTextureUnit, - DontResetTextureUnit, - }; - - explicit QOpenGLTexture(QOpenGLTexture::Target target); - QOpenGLTexture(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps); - ~QOpenGLTexture(); - bool create(); - void destroy(); - bool isCreated() const; - GLuint textureId() const; - void bind(); - void bind(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit); - void release(); - void release(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit); - bool isBound() const; - bool isBound(uint unit); - static GLuint boundTextureId(QOpenGLTexture::BindingTarget target); - static GLuint boundTextureId(uint unit, QOpenGLTexture::BindingTarget target); - - enum TextureFormat - { - NoFormat, - R8_UNorm, - RG8_UNorm, - RGB8_UNorm, - RGBA8_UNorm, - R16_UNorm, - RG16_UNorm, - RGB16_UNorm, - RGBA16_UNorm, - R8_SNorm, - RG8_SNorm, - RGB8_SNorm, - RGBA8_SNorm, - R16_SNorm, - RG16_SNorm, - RGB16_SNorm, - RGBA16_SNorm, - R8U, - RG8U, - RGB8U, - RGBA8U, - R16U, - RG16U, - RGB16U, - RGBA16U, - R32U, - RG32U, - RGB32U, - RGBA32U, - R8I, - RG8I, - RGB8I, - RGBA8I, - R16I, - RG16I, - RGB16I, - RGBA16I, - R32I, - RG32I, - RGB32I, - RGBA32I, - R16F, - RG16F, - RGB16F, - RGBA16F, - R32F, - RG32F, - RGB32F, - RGBA32F, - RGB9E5, - RG11B10F, - RG3B2, - R5G6B5, - RGB5A1, - RGBA4, - RGB10A2, - D16, - D24, - D24S8, - D32, - D32F, - D32FS8X24, - RGB_DXT1, - RGBA_DXT1, - RGBA_DXT3, - RGBA_DXT5, - R_ATI1N_UNorm, - R_ATI1N_SNorm, - RG_ATI2N_UNorm, - RG_ATI2N_SNorm, - RGB_BP_UNSIGNED_FLOAT, - RGB_BP_SIGNED_FLOAT, - RGB_BP_UNorm, - SRGB8, - SRGB8_Alpha8, - SRGB_DXT1, - SRGB_Alpha_DXT1, - SRGB_Alpha_DXT3, - SRGB_Alpha_DXT5, - SRGB_BP_UNorm, - DepthFormat, - AlphaFormat, - RGBFormat, - RGBAFormat, - LuminanceFormat, - LuminanceAlphaFormat, - S8, - R11_EAC_UNorm, - R11_EAC_SNorm, - RG11_EAC_UNorm, - RG11_EAC_SNorm, - RGB8_ETC2, - SRGB8_ETC2, - RGB8_PunchThrough_Alpha1_ETC2, - SRGB8_PunchThrough_Alpha1_ETC2, - RGBA8_ETC2_EAC, - SRGB8_Alpha8_ETC2_EAC, - RGB8_ETC1, - RGBA_ASTC_4x4, - RGBA_ASTC_5x4, - RGBA_ASTC_5x5, - RGBA_ASTC_6x5, - RGBA_ASTC_6x6, - RGBA_ASTC_8x5, - RGBA_ASTC_8x6, - RGBA_ASTC_8x8, - RGBA_ASTC_10x5, - RGBA_ASTC_10x6, - RGBA_ASTC_10x8, - RGBA_ASTC_10x10, - RGBA_ASTC_12x10, - RGBA_ASTC_12x12, - SRGB8_Alpha8_ASTC_4x4, - SRGB8_Alpha8_ASTC_5x4, - SRGB8_Alpha8_ASTC_5x5, - SRGB8_Alpha8_ASTC_6x5, - SRGB8_Alpha8_ASTC_6x6, - SRGB8_Alpha8_ASTC_8x5, - SRGB8_Alpha8_ASTC_8x6, - SRGB8_Alpha8_ASTC_8x8, - SRGB8_Alpha8_ASTC_10x5, - SRGB8_Alpha8_ASTC_10x6, - SRGB8_Alpha8_ASTC_10x8, - SRGB8_Alpha8_ASTC_10x10, - SRGB8_Alpha8_ASTC_12x10, - SRGB8_Alpha8_ASTC_12x12, - }; - - void setFormat(QOpenGLTexture::TextureFormat format); - QOpenGLTexture::TextureFormat format() const; - void setSize(int width, int height = 1, int depth = 1); - int width() const; - int height() const; - int depth() const; - void setMipLevels(int levels); - int mipLevels() const; - int maximumMipLevels() const; - void setLayers(int layers); - int layers() const; - int faces() const; - void allocateStorage(); - void allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType); - bool isStorageAllocated() const; - QOpenGLTexture *createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer) const /Factory/; - bool isTextureView() const; - - enum CubeMapFace - { - CubeMapPositiveX, - CubeMapNegativeX, - CubeMapPositiveY, - CubeMapNegativeY, - CubeMapPositiveZ, - CubeMapNegativeZ, - }; - - enum PixelFormat - { - NoSourceFormat, - Red, - RG, - RGB, - BGR, - RGBA, - BGRA, - Red_Integer, - RG_Integer, - RGB_Integer, - BGR_Integer, - RGBA_Integer, - BGRA_Integer, - Depth, - DepthStencil, - Alpha, - Luminance, - LuminanceAlpha, - Stencil, - }; - - enum PixelType - { - NoPixelType, - Int8, - UInt8, - Int16, - UInt16, - Int32, - UInt32, - Float16, - Float16OES, - Float32, - UInt32_RGB9_E5, - UInt32_RG11B10F, - UInt8_RG3B2, - UInt8_RG3B2_Rev, - UInt16_RGB5A1, - UInt16_RGB5A1_Rev, - UInt16_R5G6B5, - UInt16_R5G6B5_Rev, - UInt16_RGBA4, - UInt16_RGBA4_Rev, - UInt32_RGB10A2, - UInt32_RGB10A2_Rev, - UInt32_RGBA8, - UInt32_RGBA8_Rev, - UInt32_D24S8, - Float32_D32_UInt32_S8_X24, - }; - - void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps); - void setCompressedData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setCompressedData(int mipLevel, int layer, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setCompressedData(int mipLevel, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setCompressedData(int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - - enum Feature /BaseType=Flag/ - { - ImmutableStorage, - ImmutableMultisampleStorage, - TextureRectangle, - TextureArrays, - Texture3D, - TextureMultisample, - TextureBuffer, - TextureCubeMapArrays, - Swizzle, - StencilTexturing, - AnisotropicFiltering, - NPOTTextures, - NPOTTextureRepeat, - Texture1D, - TextureComparisonOperators, - TextureMipMapLevel, - }; - - typedef QFlags Features; - static bool hasFeature(QOpenGLTexture::Feature feature); - void setMipBaseLevel(int baseLevel); - int mipBaseLevel() const; - void setMipMaxLevel(int maxLevel); - int mipMaxLevel() const; - void setMipLevelRange(int baseLevel, int maxLevel); - std::pair mipLevelRange() const; - void setAutoMipMapGenerationEnabled(bool enabled); - bool isAutoMipMapGenerationEnabled() const; - void generateMipMaps(); - void generateMipMaps(int baseLevel, bool resetBaseLevel = true); - - enum SwizzleComponent - { - SwizzleRed, - SwizzleGreen, - SwizzleBlue, - SwizzleAlpha, - }; - - enum SwizzleValue - { - RedValue, - GreenValue, - BlueValue, - AlphaValue, - ZeroValue, - OneValue, - }; - - void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value); - void setSwizzleMask(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a); - QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component) const; - - enum DepthStencilMode - { - DepthMode, - StencilMode, - }; - - void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode); - QOpenGLTexture::DepthStencilMode depthStencilMode() const; - - enum Filter - { - Nearest, - Linear, - NearestMipMapNearest, - NearestMipMapLinear, - LinearMipMapNearest, - LinearMipMapLinear, - }; - - void setMinificationFilter(QOpenGLTexture::Filter filter); - QOpenGLTexture::Filter minificationFilter() const; - void setMagnificationFilter(QOpenGLTexture::Filter filter); - QOpenGLTexture::Filter magnificationFilter() const; - void setMinMagFilters(QOpenGLTexture::Filter minificationFilter, QOpenGLTexture::Filter magnificationFilter); - std::pair minMagFilters() const; - void setMaximumAnisotropy(float anisotropy); - float maximumAnisotropy() const; - - enum WrapMode - { - Repeat, - MirroredRepeat, - ClampToEdge, - ClampToBorder, - }; - - enum CoordinateDirection - { - DirectionS, - DirectionT, - DirectionR, - }; - - void setWrapMode(QOpenGLTexture::WrapMode mode); - void setWrapMode(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode); - QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction) const; - void setBorderColor(const QColor &color); - QColor borderColor() const; - void setMinimumLevelOfDetail(float value); - float minimumLevelOfDetail() const; - void setMaximumLevelOfDetail(float value); - float maximumLevelOfDetail() const; - void setLevelOfDetailRange(float min, float max); - std::pair levelOfDetailRange() const; - void setLevelofDetailBias(float bias); - float levelofDetailBias() const; - QOpenGLTexture::Target target() const; - void setSamples(int samples); - int samples() const; - void setFixedSamplePositions(bool fixed); - bool isFixedSamplePositions() const; - - enum ComparisonFunction - { - CompareLessEqual, - CompareGreaterEqual, - CompareLess, - CompareGreater, - CompareEqual, - CommpareNotEqual, - CompareAlways, - CompareNever, -%If (Qt_6_1_0 -) - CompareNotEqual, -%End - }; - - void setComparisonFunction(QOpenGLTexture::ComparisonFunction function); - QOpenGLTexture::ComparisonFunction comparisonFunction() const; - - enum ComparisonMode - { - CompareRefToTexture, - CompareNone, - }; - - void setComparisonMode(QOpenGLTexture::ComparisonMode mode); - QOpenGLTexture::ComparisonMode comparisonMode() const; - void setData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setCompressedData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int layerCount, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); - -private: - QOpenGLTexture(const QOpenGLTexture &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltextureblitter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltextureblitter.sip deleted file mode 100644 index 80e1d45..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltextureblitter.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qopengltextureblitter.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLTextureBlitter -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLTextureBlitter(); - ~QOpenGLTextureBlitter(); - - enum Origin - { - OriginBottomLeft, - OriginTopLeft, - }; - - bool create(); - bool isCreated() const; - void destroy(); - bool supportsExternalOESTarget() const; - void bind(GLenum target = GL_TEXTURE_2D); - void release(); - void setRedBlueSwizzle(bool swizzle); - void setOpacity(float opacity); - void blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin); - void blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform); - static QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport); - static QMatrix3x3 sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin); -%If (Qt_6_3_0 -) - bool supportsRectangleTarget() const; -%End - -private: - QOpenGLTextureBlitter(const QOpenGLTextureBlitter &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltimerquery.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltimerquery.sip deleted file mode 100644 index db52739..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopengltimerquery.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qopengltimerquery.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (!PyQt_OpenGL_ES2) - -class QOpenGLTimerQuery : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOpenGLTimerQuery(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLTimerQuery(); - bool create(); - void destroy(); - bool isCreated() const; - GLuint objectId() const; - void begin(); - void end(); - GLuint64 waitForTimestamp() const /ReleaseGIL/; - void recordTimestamp(); - bool isResultAvailable() const; - GLuint64 waitForResult() const /ReleaseGIL/; -}; - -%End -%If (!PyQt_OpenGL_ES2) - -class QOpenGLTimeMonitor : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOpenGLTimeMonitor(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLTimeMonitor(); - void setSampleCount(int sampleCount); - int sampleCount() const; - bool create(); - void destroy(); - bool isCreated() const; - QList objectIds() const; - int recordSample(); - bool isResultAvailable() const; - QList waitForSamples() const /ReleaseGIL/; - QList waitForIntervals() const /ReleaseGIL/; - void reset(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctions.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctions.sip deleted file mode 100644 index de07f19..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctions.sip +++ /dev/null @@ -1,30 +0,0 @@ -// qopenglversionfunctions.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractOpenGLFunctions /NoDefaultCtors,Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - - QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctionsfactory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctionsfactory.sip deleted file mode 100644 index 040bd46..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionfunctionsfactory.sip +++ /dev/null @@ -1,34 +0,0 @@ -// qopenglversionfunctionsfactory.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLVersionFunctionsFactory -{ -%TypeHeaderCode -#include -%End - -public: - static SIP_PYOBJECT get(const QOpenGLVersionProfile &versionProfile = QOpenGLVersionProfile(), QOpenGLContext *context /GetWrapper/ = 0) /TypeHint="QAbstractOpenGLFunctions"/; -%MethodCode - sipRes = qpyopengl_version_functions(*a0, a1, a1Wrapper); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionprofile.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionprofile.sip deleted file mode 100644 index 89f50bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglversionprofile.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qopenglversionprofile.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLVersionProfile -{ -%TypeHeaderCode -#include -%End - -public: - QOpenGLVersionProfile(); - explicit QOpenGLVersionProfile(const QSurfaceFormat &format); - QOpenGLVersionProfile(const QOpenGLVersionProfile &other); - ~QOpenGLVersionProfile(); - std::pair version() const; - void setVersion(int majorVersion, int minorVersion); - QSurfaceFormat::OpenGLContextProfile profile() const; - void setProfile(QSurfaceFormat::OpenGLContextProfile profile); - bool hasProfiles() const; - bool isLegacyVersion() const; - bool isValid() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -bool operator==(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs); -bool operator!=(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglvertexarrayobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglvertexarrayobject.sip deleted file mode 100644 index 4681d94..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglvertexarrayobject.sip +++ /dev/null @@ -1,65 +0,0 @@ -// qopenglvertexarrayobject.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLVertexArrayObject : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOpenGLVertexArrayObject(QObject *parent /TransferThis/ = 0); - virtual ~QOpenGLVertexArrayObject(); - bool create(); - void destroy(); - bool isCreated() const; - GLuint objectId() const; - void bind(); - void release(); - - class Binder - { -%TypeHeaderCode -#include -%End - - public: - Binder(QOpenGLVertexArrayObject *v); - ~Binder(); - void release(); - void rebind(); - SIP_PYOBJECT __enter__(); -%MethodCode - // Just return a reference to self. - sipRes = sipSelf; - Py_INCREF(sipRes); -%End - - void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); -%MethodCode - sipCpp->release(); -%End - - private: - Binder(const QOpenGLVertexArrayObject::Binder &); - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglwindow.sip deleted file mode 100644 index 2d1587b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qopenglwindow.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qopenglwindow.sip generated by MetaSIP -// -// This file is part of the QtOpenGL Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLWindow : public QPaintDeviceWindow -{ -%TypeHeaderCode -#include -%End - -public: - enum UpdateBehavior - { - NoPartialUpdate, - PartialUpdateBlit, - PartialUpdateBlend, - }; - - QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior = QOpenGLWindow::NoPartialUpdate, QWindow *parent /TransferThis/ = 0); - QOpenGLWindow(QOpenGLContext *shareContext, QOpenGLWindow::UpdateBehavior updateBehavior = QOpenGLWindow::NoPartialUpdate, QWindow *parent /TransferThis/ = 0); - virtual ~QOpenGLWindow(); - QOpenGLWindow::UpdateBehavior updateBehavior() const; - bool isValid() const; - void makeCurrent(); - void doneCurrent(); - QOpenGLContext *context() const; - GLuint defaultFramebufferObject() const; - QImage grabFramebuffer(); - QOpenGLContext *shareContext() const; - -signals: - void frameSwapped(); - -protected: - virtual void initializeGL(); - virtual void resizeGL(int w, int h); - virtual void paintGL(); - virtual void paintUnderGL(); - virtual void paintOverGL(); - virtual void paintEvent(QPaintEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_qlist.sip deleted file mode 100644 index 4e66581..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_qlist.sip +++ /dev/null @@ -1,129 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtOpenGL module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (!PyQt_OpenGL_ES2) - - -%MappedType QList - /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", - TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - // Convert to a Python long to make sure it doesn't get interpreted as - // a signed value. - PyObject *pobj = PyLong_FromUnsignedLongLong(sipCpp->value(i)); - - if (!pobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, pobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *qv = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - PyErr_Clear(); - unsigned long long val = PyLong_AsUnsignedLongLongMask(itm); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'int' is expected", i, - sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete qv; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - qv->append(val); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = qv; - - return sipGetState(sipTransferObj); -%End -}; - - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_std_pair.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_std_pair.sip deleted file mode 100644 index a7b6a1a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGL/qpyopengl_std_pair.sip +++ /dev/null @@ -1,111 +0,0 @@ -// This is the SIP interface definition for the std::pair based mapped types -// specific to the QtGui module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType std::pair - /TypeHint="Tuple[QOpenGLTexture.Filter, QOpenGLTexture.Filter]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - return sipBuildResult(NULL, "(FF)", sipCpp->first, - sipType_QOpenGLTexture_Filter, sipCpp->second, - sipType_QOpenGLTexture_Filter); -%End - -%ConvertToTypeCode - if (!sipIsErr) - return (PySequence_Check(sipPy) && !PyUnicode_Check(sipPy)); - - Py_ssize_t len = PySequence_Size(sipPy); - - if (len != 2) - { - // A negative length should only be an internal error so let the - // original exception stand. - if (len >= 0) - PyErr_Format(PyExc_TypeError, - "sequence has %zd elements but 2 elements are expected", - len); - - *sipIsErr = 1; - - return 0; - } - - PyObject *firstobj = PySequence_GetItem(sipPy, 0); - - if (!firstobj) - { - *sipIsErr = 1; - - return 0; - } - - int firstv = sipConvertToEnum(firstobj, sipType_QOpenGLTexture_Filter); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the first element has type '%s' but 'QOpenGLTexture.Filter' is expected", - sipPyTypeName(Py_TYPE(firstobj))); - - *sipIsErr = 1; - - return 0; - } - - PyObject *secondobj = PySequence_GetItem(sipPy, 1); - - if (!secondobj) - { - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - int secondv = sipConvertToEnum(secondobj, sipType_QOpenGLTexture_Filter); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "the second element has type '%s' but 'QOpenGLTexture.Filter' is expected", - sipPyTypeName(Py_TYPE(secondobj))); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - *sipIsErr = 1; - - return 0; - } - - *sipCppPtr = new std::pair( - static_cast(firstv), - static_cast(secondv)); - - Py_DECREF(secondobj); - Py_DECREF(firstobj); - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgets.toml deleted file mode 100644 index 1755b9d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtOpenGLWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgetsmod.sip deleted file mode 100644 index 4889b94..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/QtOpenGLWidgetsmod.sip +++ /dev/null @@ -1,51 +0,0 @@ -// QtOpenGLWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtOpenGLWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtOpenGLWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtOpenGL/QtOpenGLmod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qopenglwidget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/qopenglwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/qopenglwidget.sip deleted file mode 100644 index 27dfc37..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtOpenGLWidgets/qopenglwidget.sip +++ /dev/null @@ -1,117 +0,0 @@ -// qopenglwidget.sip generated by MetaSIP -// -// This file is part of the QtOpenGLWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QOpenGLWidget, &sipType_QOpenGLWidget, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QOpenGLWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QOpenGLWidget(); - void setFormat(const QSurfaceFormat &format); - QSurfaceFormat format() const; - bool isValid() const; - void makeCurrent(); -%If (Qt_6_5_0 -) - void makeCurrent(QOpenGLWidget::TargetBuffer targetBuffer); -%End - void doneCurrent(); - QOpenGLContext *context() const; - GLuint defaultFramebufferObject() const; -%If (Qt_6_5_0 -) - GLuint defaultFramebufferObject(QOpenGLWidget::TargetBuffer targetBuffer) const; -%End - QImage grabFramebuffer(); -%If (Qt_6_5_0 -) - QImage grabFramebuffer(QOpenGLWidget::TargetBuffer targetBuffer); -%End - -signals: - void aboutToCompose(); - void frameSwapped(); - void aboutToResize(); - void resized(); - -protected: - virtual void initializeGL(); - virtual void resizeGL(int w, int h); - virtual void paintGL(); - virtual void paintEvent(QPaintEvent *e); - virtual void resizeEvent(QResizeEvent *e); - virtual bool event(QEvent *e); - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; - virtual QPaintEngine *paintEngine() const; - -public: - enum UpdateBehavior - { - NoPartialUpdate, - PartialUpdate, - }; - - void setUpdateBehavior(QOpenGLWidget::UpdateBehavior updateBehavior); - QOpenGLWidget::UpdateBehavior updateBehavior() const; - GLenum textureFormat() const; - void setTextureFormat(GLenum texFormat); -%If (Qt_6_5_0 -) - - enum TargetBuffer - { - LeftBuffer, - RightBuffer, - }; - -%End -%If (Qt_6_5_0 -) - QOpenGLWidget::TargetBuffer currentTargetBuffer() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdf.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdf.toml deleted file mode 100644 index 7a5e54f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdf.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtPdf. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdfmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdfmod.sip deleted file mode 100644 index 79c6341..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/QtPdfmod.sip +++ /dev/null @@ -1,57 +0,0 @@ -// QtPdfmod.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtPdf, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qpdfbookmarkmodel.sip -%Include qpdfdocument.sip -%Include qpdfdocumentrenderoptions.sip -%Include qpdflink.sip -%Include qpdflinkmodel.sip -%Include qpdfpagenavigator.sip -%Include qpdfpagerenderer.sip -%Include qpdfsearchmodel.sip -%Include qpdfselection.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfbookmarkmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfbookmarkmodel.sip deleted file mode 100644 index 9d1ccbb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfbookmarkmodel.sip +++ /dev/null @@ -1,52 +0,0 @@ -// qpdfbookmarkmodel.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfBookmarkModel : public QAbstractItemModel -{ -%TypeHeaderCode -#include -%End - -public: - enum class Role /BaseType=IntEnum/ - { - Title, - Level, - Page, - Location, - Zoom, - }; - - explicit QPdfBookmarkModel(QObject *parent /TransferThis/); - virtual ~QPdfBookmarkModel(); - QPdfDocument *document() const; - void setDocument(QPdfDocument *document); - virtual QVariant data(const QModelIndex &index, int role) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex parent(const QModelIndex &index) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QHash roleNames() const; - -signals: - void documentChanged(QPdfDocument *document); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocument.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocument.sip deleted file mode 100644 index f81b64b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocument.sip +++ /dev/null @@ -1,132 +0,0 @@ -// qpdfdocument.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfDocument : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QPdfBookmarkModel, &sipType_QPdfBookmarkModel, -1, 1}, - {sipName_QPdfDocument, &sipType_QPdfDocument, -1, 2}, - #if QT_VERSION >= 0x060600 - {sipName_QPdfLinkModel, &sipType_QPdfLinkModel, -1, 3}, - #else - {0, 0, -1, 3}, - #endif - {sipName_QPdfPageNavigator, &sipType_QPdfPageNavigator, -1, 4}, - {sipName_QPdfPageRenderer, &sipType_QPdfPageRenderer, -1, 5}, - {sipName_QPdfSearchModel, &sipType_QPdfSearchModel, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum class Status - { - Null, - Loading, - Ready, - Unloading, - Error, - }; - - enum class Error - { - None, - Unknown, - DataNotYetAvailable, - FileNotFound, - InvalidFileFormat, - IncorrectPassword, - UnsupportedSecurityScheme, - }; - - enum class MetaDataField - { - Title, - Subject, - Author, - Keywords, - Producer, - Creator, - CreationDate, - ModificationDate, - }; - - enum class PageModelRole /BaseType=IntEnum/ - { - Label, - PointSize, - }; - - explicit QPdfDocument(QObject *parent /TransferThis/); - virtual ~QPdfDocument(); - QPdfDocument::Error load(const QString &fileName) /ReleaseGIL/; - void load(QIODevice *device) /ReleaseGIL/; - QPdfDocument::Status status() const; - void setPassword(const QString &password); - QString password() const; - QVariant metaData(QPdfDocument::MetaDataField field) const; - QPdfDocument::Error error() const; - void close(); - int pageCount() const; - QSizeF pagePointSize(int page) const; - QString pageLabel(int page); - QAbstractListModel *pageModel(); - QImage render(int page, QSize imageSize, QPdfDocumentRenderOptions options = QPdfDocumentRenderOptions()); - QPdfSelection getSelection(int page, QPointF start, QPointF end); - QPdfSelection getSelectionAtIndex(int page, int startIndex, int maxLength); - QPdfSelection getAllText(int page); -%If (Qt_6_6_0 -) - int pageIndexForLabel(const QString &label); -%End - -signals: - void passwordChanged(); - void statusChanged(QPdfDocument::Status status); - void pageCountChanged(int pageCount); - void pageModelChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocumentrenderoptions.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocumentrenderoptions.sip deleted file mode 100644 index f129d8c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfdocumentrenderoptions.sip +++ /dev/null @@ -1,63 +0,0 @@ -// qpdfdocumentrenderoptions.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfDocumentRenderOptions -{ -%TypeHeaderCode -#include -%End - -public: - enum class Rotation - { - None, - Clockwise90, - Clockwise180, - Clockwise270, - }; - - enum class RenderFlag - { - None, - Annotations, - OptimizedForLcd, - Grayscale, - ForceHalftone, - TextAliased, - ImageAliased, - PathAliased, - }; - - typedef QFlags RenderFlags; - QPdfDocumentRenderOptions(); - QPdfDocumentRenderOptions::Rotation rotation() const; - void setRotation(QPdfDocumentRenderOptions::Rotation r); - QPdfDocumentRenderOptions::RenderFlags renderFlags() const; - void setRenderFlags(QPdfDocumentRenderOptions::RenderFlags r); - QRect scaledClipRect() const; - void setScaledClipRect(const QRect &r); - QSize scaledSize() const; - void setScaledSize(const QSize &s); -}; - -bool operator==(const QPdfDocumentRenderOptions &lhs, const QPdfDocumentRenderOptions &rhs); -bool operator!=(const QPdfDocumentRenderOptions &lhs, const QPdfDocumentRenderOptions &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflink.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflink.sip deleted file mode 100644 index 59e5036..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflink.sip +++ /dev/null @@ -1,44 +0,0 @@ -// qpdflink.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfLink -{ -%TypeHeaderCode -#include -%End - -public: - QPdfLink(); - QPdfLink(const QPdfLink &other); - ~QPdfLink(); - void swap(QPdfLink &other); - bool isValid() const; - int page() const; - QPointF location() const; - qreal zoom() const; - QUrl url() const; - QString contextBefore() const; - QString contextAfter() const; - QList rectangles() const; - QString toString() const; - void copyToClipboard(QClipboard::Mode mode = QClipboard::Clipboard) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflinkmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflinkmodel.sip deleted file mode 100644 index 4f10c4b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdflinkmodel.sip +++ /dev/null @@ -1,60 +0,0 @@ -// qpdflinkmodel.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_6_0 -) - -class QPdfLinkModel : public QAbstractListModel -{ -%TypeHeaderCode -#include -%End - -public: - enum class Role - { - Link, - Rectangle, - Url, - Page, - Location, - Zoom, - }; - - explicit QPdfLinkModel(QObject *parent /TransferThis/ = 0); - virtual ~QPdfLinkModel(); - QPdfDocument *document() const; - virtual QHash roleNames() const; - virtual int rowCount(const QModelIndex &parent) const; - virtual QVariant data(const QModelIndex &index, int role) const; - int page() const; - QPdfLink linkAt(QPointF point) const; - -public slots: - void setDocument(QPdfDocument *document); - void setPage(int page); - -signals: - void documentChanged(); - void pageChanged(int page); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagenavigator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagenavigator.sip deleted file mode 100644 index 8c03ce4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagenavigator.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qpdfpagenavigator.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfPageNavigator : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPdfPageNavigator(QObject *parent /TransferThis/); - virtual ~QPdfPageNavigator(); - int currentPage() const; - QPointF currentLocation() const; - qreal currentZoom() const; - bool backAvailable() const; - bool forwardAvailable() const; - -public slots: - void clear(); - void jump(QPdfLink destination); - void jump(int page, const QPointF &location, qreal zoom = 0); - void update(int page, const QPointF &location, qreal zoom); - void forward(); - void back(); - -signals: - void currentPageChanged(int page); - void currentLocationChanged(QPointF location); - void currentZoomChanged(qreal zoom); - void backAvailableChanged(bool available); - void forwardAvailableChanged(bool available); - void jumped(QPdfLink current); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagerenderer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagerenderer.sip deleted file mode 100644 index 678b8c9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfpagerenderer.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qpdfpagerenderer.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfPageRenderer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum class RenderMode - { - MultiThreaded, - SingleThreaded, - }; - - explicit QPdfPageRenderer(QObject *parent /TransferThis/); - virtual ~QPdfPageRenderer(); - QPdfPageRenderer::RenderMode renderMode() const; - void setRenderMode(QPdfPageRenderer::RenderMode mode); - QPdfDocument *document() const; - void setDocument(QPdfDocument *document); - quint64 requestPage(int pageNumber, QSize imageSize, QPdfDocumentRenderOptions options = QPdfDocumentRenderOptions()); - -signals: - void documentChanged(QPdfDocument *document); - void renderModeChanged(QPdfPageRenderer::RenderMode renderMode); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfsearchmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfsearchmodel.sip deleted file mode 100644 index 5f1b633..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfsearchmodel.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qpdfsearchmodel.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfSearchModel : public QAbstractListModel -{ -%TypeHeaderCode -#include -%End - -public: - enum class Role /BaseType=IntEnum/ - { - Page, - IndexOnPage, - Location, - ContextBefore, - ContextAfter, - }; - - explicit QPdfSearchModel(QObject *parent /TransferThis/); - virtual ~QPdfSearchModel(); - QList resultsOnPage(int page) const; - QPdfLink resultAtIndex(int index) const; - QPdfDocument *document() const; - QString searchString() const; - virtual QHash roleNames() const; - virtual int rowCount(const QModelIndex &parent) const; - virtual QVariant data(const QModelIndex &index, int role) const; - -public slots: - void setSearchString(const QString &searchString); - void setDocument(QPdfDocument *document); - -signals: - void documentChanged(); - void searchStringChanged(); - -protected: - virtual void timerEvent(QTimerEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfselection.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfselection.sip deleted file mode 100644 index 2fcdb1e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdf/qpdfselection.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qpdfselection.sip generated by MetaSIP -// -// This file is part of the QtPdf Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfSelection -{ -%TypeHeaderCode -#include -%End - -public: - QPdfSelection(const QPdfSelection &other); - ~QPdfSelection(); - void swap(QPdfSelection &other); - bool isValid() const; - QList bounds() const; - QString text() const; - QRectF boundingRectangle() const; - int startIndex() const; - int endIndex() const; - void copyToClipboard(QClipboard::Mode mode = QClipboard::Clipboard) const; - -private: - QPdfSelection(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgets.toml deleted file mode 100644 index dfcccb5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtPdfWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgetsmod.sip deleted file mode 100644 index 27dc6d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/QtPdfWidgetsmod.sip +++ /dev/null @@ -1,51 +0,0 @@ -// QtPdfWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtPdfWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtPdfWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtPdf/QtPdfmod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qpdfpageselector.sip -%Include qpdfview.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfpageselector.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfpageselector.sip deleted file mode 100644 index cb61f59..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfpageselector.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qpdfpageselector.sip generated by MetaSIP -// -// This file is part of the QtPdfWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_6_0 -) - -class QPdfPageSelector : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPdfPageSelector(QWidget *parent /TransferThis/); - virtual ~QPdfPageSelector(); - void setDocument(QPdfDocument *document); - QPdfDocument *document() const; - int currentPage() const; - QString currentPageLabel() const; - -public slots: - void setCurrentPage(int index); - -signals: - void documentChanged(QPdfDocument *document); - void currentPageChanged(int index); - void currentPageLabelChanged(const QString &label); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfview.sip deleted file mode 100644 index 810d4e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPdfWidgets/qpdfview.sip +++ /dev/null @@ -1,141 +0,0 @@ -// qpdfview.sip generated by MetaSIP -// -// This file is part of the QtPdfWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPdfView : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - #if QT_VERSION >= 0x060600 - {sipName_QPdfPageSelector, &sipType_QPdfPageSelector, -1, 1}, - #else - {0, 0, -1, 1}, - #endif - {sipName_QPdfView, &sipType_QPdfView, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum class PageMode - { - SinglePage, - MultiPage, - }; - - enum class ZoomMode - { - Custom, - FitToWidth, - FitInView, - }; - - explicit QPdfView(QWidget *parent /TransferThis/); - virtual ~QPdfView(); - void setDocument(QPdfDocument *document); - QPdfDocument *document() const; - QPdfPageNavigator *pageNavigator() const; - QPdfView::PageMode pageMode() const; - QPdfView::ZoomMode zoomMode() const; - qreal zoomFactor() const; - int pageSpacing() const; - void setPageSpacing(int spacing); - QMargins documentMargins() const; - void setDocumentMargins(QMargins margins); - -public slots: - void setPageMode(QPdfView::PageMode mode); - void setZoomMode(QPdfView::ZoomMode mode); - void setZoomFactor(qreal factor); - -signals: - void documentChanged(QPdfDocument *document); - void pageModeChanged(QPdfView::PageMode pageMode); - void zoomModeChanged(QPdfView::ZoomMode zoomMode); - void zoomFactorChanged(qreal zoomFactor); - void pageSpacingChanged(int pageSpacing); - void documentMarginsChanged(QMargins documentMargins); - -protected: - virtual void paintEvent(QPaintEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void scrollContentsBy(int dx, int dy); - -public: -%If (Qt_6_6_0 -) - QPdfSearchModel *searchModel() const; -%End -%If (Qt_6_6_0 -) - void setSearchModel(QPdfSearchModel *searchModel /KeepReference/); -%End -%If (Qt_6_6_0 -) - int currentSearchResultIndex() const; -%End - -public slots: -%If (Qt_6_6_0 -) - void setCurrentSearchResultIndex(int currentResult); -%End - -signals: -%If (Qt_6_6_0 -) - void searchModelChanged(QPdfSearchModel *searchModel); -%End -%If (Qt_6_6_0 -) - void currentSearchResultIndexChanged(int currentResult); -%End - -protected: -%If (Qt_6_6_0 -) - virtual void mousePressEvent(QMouseEvent *event); -%End -%If (Qt_6_6_0 -) - virtual void mouseMoveEvent(QMouseEvent *event); -%End -%If (Qt_6_6_0 -) - virtual void mouseReleaseEvent(QMouseEvent *event); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioning.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioning.toml deleted file mode 100644 index 8cbf742..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioning.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtPositioning. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioningmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioningmod.sip deleted file mode 100644 index ea727b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/QtPositioningmod.sip +++ /dev/null @@ -1,61 +0,0 @@ -// QtPositioningmod.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtPositioning, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%Include qgeoaddress.sip -%Include qgeoareamonitorinfo.sip -%Include qgeoareamonitorsource.sip -%Include qgeocircle.sip -%Include qgeocoordinate.sip -%Include qgeolocation.sip -%Include qgeopath.sip -%Include qgeopolygon.sip -%Include qgeopositioninfo.sip -%Include qgeopositioninfosource.sip -%Include qgeorectangle.sip -%Include qgeosatelliteinfo.sip -%Include qgeosatelliteinfosource.sip -%Include qgeoshape.sip -%Include qnmeapositioninfosource.sip -%Include qnmeasatelliteinfosource.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoaddress.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoaddress.sip deleted file mode 100644 index 11feeb7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoaddress.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qgeoaddress.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoAddress -{ -%TypeHeaderCode -#include -%End - -public: - QGeoAddress(); - QGeoAddress(const QGeoAddress &other); - ~QGeoAddress(); - QString text() const; - void setText(const QString &text); - QString country() const; - void setCountry(const QString &country); - QString countryCode() const; - void setCountryCode(const QString &countryCode); - QString state() const; - void setState(const QString &state); - QString county() const; - void setCounty(const QString &county); - QString city() const; - void setCity(const QString &city); - QString district() const; - void setDistrict(const QString &district); - QString postalCode() const; - void setPostalCode(const QString &postalCode); - QString street() const; - void setStreet(const QString &street); - bool isEmpty() const; - void clear(); - bool isTextGenerated() const; - void swap(QGeoAddress &other /Constrained/); - QString streetNumber() const; - void setStreetNumber(const QString &streetNumber); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoAddress &lhs, const QGeoAddress &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoAddress &lhs, const QGeoAddress &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorinfo.sip deleted file mode 100644 index 49cc73e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorinfo.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qgeoareamonitorinfo.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoAreaMonitorInfo -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGeoAreaMonitorInfo(const QString &name = QString()); - QGeoAreaMonitorInfo(const QGeoAreaMonitorInfo &other); - ~QGeoAreaMonitorInfo(); - QString name() const; - void setName(const QString &name); - QString identifier() const; - bool isValid() const; - QGeoShape area() const; - void setArea(const QGeoShape &newShape); - QDateTime expiration() const; - void setExpiration(const QDateTime &expiry); - bool isPersistent() const; - void setPersistent(bool isPersistent); - QVariantMap notificationParameters() const; - void setNotificationParameters(const QVariantMap ¶meters); - void swap(QGeoAreaMonitorInfo &other); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &, const QGeoAreaMonitorInfo &); -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &, QGeoAreaMonitorInfo & /Constrained/); -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoAreaMonitorInfo &lhs, const QGeoAreaMonitorInfo &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoAreaMonitorInfo &lhs, const QGeoAreaMonitorInfo &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorsource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorsource.sip deleted file mode 100644 index 9487014..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoareamonitorsource.sip +++ /dev/null @@ -1,74 +0,0 @@ -// qgeoareamonitorsource.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoAreaMonitorSource : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - AccessError, - InsufficientPositionInfo, - UnknownSourceError, - NoError, - }; - - enum AreaMonitorFeature /BaseType=Flag/ - { - PersistentAreaMonitorFeature, - AnyAreaMonitorFeature, - }; - - typedef QFlags AreaMonitorFeatures; - explicit QGeoAreaMonitorSource(QObject *parent /TransferThis/); - virtual ~QGeoAreaMonitorSource(); - static QGeoAreaMonitorSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; - static QGeoAreaMonitorSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; - static QStringList availableSources(); - virtual void setPositionInfoSource(QGeoPositionInfoSource *source /Transfer/); - virtual QGeoPositionInfoSource *positionInfoSource() const; - QString sourceName() const; - virtual QGeoAreaMonitorSource::Error error() const = 0; - virtual QGeoAreaMonitorSource::AreaMonitorFeatures supportedAreaMonitorFeatures() const = 0; - virtual bool startMonitoring(const QGeoAreaMonitorInfo &monitor) = 0; - virtual bool stopMonitoring(const QGeoAreaMonitorInfo &monitor) = 0; - virtual bool requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0; - virtual QList activeMonitors() const = 0; - virtual QList activeMonitors(const QGeoShape &lookupArea) const = 0; - -signals: - void areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update); - void areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update); - void monitorExpired(const QGeoAreaMonitorInfo &monitor); - void errorOccurred(QGeoAreaMonitorSource::Error error); - -public: - virtual bool setBackendProperty(const QString &name, const QVariant &value); - virtual QVariant backendProperty(const QString &name) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocircle.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocircle.sip deleted file mode 100644 index e8be652..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocircle.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qgeocircle.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoCircle : public QGeoShape -{ -%TypeHeaderCode -#include -%End - -public: - QGeoCircle(); - QGeoCircle(const QGeoCoordinate ¢er, qreal radius = -1.); - QGeoCircle(const QGeoCircle &other); - QGeoCircle(const QGeoShape &other); - ~QGeoCircle(); - void setCenter(const QGeoCoordinate ¢er); - QGeoCoordinate center() const; - void setRadius(qreal radius); - qreal radius() const; - void translate(double degreesLatitude, double degreesLongitude); - QGeoCircle translated(double degreesLatitude, double degreesLongitude) const; - QString toString() const; - void extendCircle(const QGeoCoordinate &coordinate); -}; - -%End -%If (Qt_6_5_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoCircle &circle) /ReleaseGIL/; -%End -%If (Qt_6_5_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoCircle &circle /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocoordinate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocoordinate.sip deleted file mode 100644 index dd9250f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeocoordinate.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qgeocoordinate.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoCoordinate -{ -%TypeHeaderCode -#include -%End - -public: - enum CoordinateType - { - InvalidCoordinate, - Coordinate2D, - Coordinate3D, - }; - - enum CoordinateFormat - { - Degrees, - DegreesWithHemisphere, - DegreesMinutes, - DegreesMinutesWithHemisphere, - DegreesMinutesSeconds, - DegreesMinutesSecondsWithHemisphere, - }; - - QGeoCoordinate(); - QGeoCoordinate(double latitude, double longitude); - QGeoCoordinate(double latitude, double longitude, double altitude); - QGeoCoordinate(const QGeoCoordinate &other); - ~QGeoCoordinate(); - bool isValid() const; - QGeoCoordinate::CoordinateType type() const; - void setLatitude(double latitude); - double latitude() const; - void setLongitude(double longitude); - double longitude() const; - void setAltitude(double altitude); - double altitude() const; - qreal distanceTo(const QGeoCoordinate &other) const; - qreal azimuthTo(const QGeoCoordinate &other) const; - QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp = 0.) const; - QString toString(QGeoCoordinate::CoordinateFormat format = QGeoCoordinate::DegreesMinutesSecondsWithHemisphere) const; - void swap(QGeoCoordinate &other /Constrained/); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoCoordinate &coordinate); -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoCoordinate &coordinate /Constrained/); -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoCoordinate &lhs, const QGeoCoordinate &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoCoordinate &lhs, const QGeoCoordinate &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeolocation.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeolocation.sip deleted file mode 100644 index 0d60e7f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeolocation.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qgeolocation.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoLocation -{ -%TypeHeaderCode -#include -%End - -public: - QGeoLocation(); - QGeoLocation(const QGeoLocation &other); - ~QGeoLocation(); - QGeoAddress address() const; - void setAddress(const QGeoAddress &address); - QGeoCoordinate coordinate() const; - void setCoordinate(const QGeoCoordinate &position); - bool isEmpty() const; - QVariantMap extendedAttributes() const; - void setExtendedAttributes(const QVariantMap &data); - void swap(QGeoLocation &other /Constrained/); - QGeoShape boundingShape() const; - void setBoundingShape(const QGeoShape &shape); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoLocation &lhs, const QGeoLocation &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoLocation &lhs, const QGeoLocation &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopath.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopath.sip deleted file mode 100644 index 88de03e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopath.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qgeopath.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoPath : public QGeoShape -{ -%TypeHeaderCode -#include -%End - -public: - QGeoPath(); - QGeoPath(const QList &path, const qreal &width = 0.); - QGeoPath(const QGeoPath &other); - QGeoPath(const QGeoShape &other); - ~QGeoPath(); - void setPath(const QList &path); - const QList &path() const; - void setWidth(const qreal &width); - qreal width() const; - void translate(double degreesLatitude, double degreesLongitude); - QGeoPath translated(double degreesLatitude, double degreesLongitude) const; - double length(qsizetype indexFrom = 0, qsizetype indexTo = -1) const; - void addCoordinate(const QGeoCoordinate &coordinate); - void insertCoordinate(qsizetype index, const QGeoCoordinate &coordinate); - void replaceCoordinate(qsizetype index, const QGeoCoordinate &coordinate); - QGeoCoordinate coordinateAt(qsizetype index) const; - bool containsCoordinate(const QGeoCoordinate &coordinate) const; - void removeCoordinate(const QGeoCoordinate &coordinate); - void removeCoordinate(qsizetype index); - QString toString() const; - qsizetype size() const; - void clearPath(); -}; - -%End -%If (Qt_6_5_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoPath &path) /ReleaseGIL/; -%End -%If (Qt_6_5_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoPath &path /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopolygon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopolygon.sip deleted file mode 100644 index cf7cc8c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopolygon.sip +++ /dev/null @@ -1,65 +0,0 @@ -// qgeopolygon.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoPolygon : public QGeoShape -{ -%TypeHeaderCode -#include -%End - -public: - QGeoPolygon(); - QGeoPolygon(const QList &path); - QGeoPolygon(const QGeoPolygon &other); - QGeoPolygon(const QGeoShape &other); - ~QGeoPolygon(); - void translate(double degreesLatitude, double degreesLongitude); - QGeoPolygon translated(double degreesLatitude, double degreesLongitude) const; - double length(qsizetype indexFrom = 0, qsizetype indexTo = -1) const; - qsizetype size() const; - void addCoordinate(const QGeoCoordinate &coordinate); - void insertCoordinate(qsizetype index, const QGeoCoordinate &coordinate); - void replaceCoordinate(qsizetype index, const QGeoCoordinate &coordinate); - QGeoCoordinate coordinateAt(qsizetype index) const; - bool containsCoordinate(const QGeoCoordinate &coordinate) const; - void removeCoordinate(const QGeoCoordinate &coordinate); - void removeCoordinate(qsizetype index); - QString toString() const; - void addHole(const QList &holePath); - void addHole(const QVariant &holePath); - const QVariantList hole(qsizetype index) const; - const QList holePath(qsizetype index) const; - void removeHole(qsizetype index); - qsizetype holesCount() const; - void setPerimeter(const QList &path); - const QList &perimeter() const; -}; - -%End -%If (Qt_6_5_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoPolygon &polygon) /ReleaseGIL/; -%End -%If (Qt_6_5_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoPolygon &polygon /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfo.sip deleted file mode 100644 index 4cdbd0f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfo.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qgeopositioninfo.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoPositionInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum Attribute - { - Direction, - GroundSpeed, - VerticalSpeed, - MagneticVariation, - HorizontalAccuracy, - VerticalAccuracy, -%If (Qt_6_3_0 -) - DirectionAccuracy, -%End - }; - - QGeoPositionInfo(); - QGeoPositionInfo(const QGeoCoordinate &coordinate, const QDateTime &updateTime); - QGeoPositionInfo(const QGeoPositionInfo &other); - ~QGeoPositionInfo(); - bool isValid() const; - void setTimestamp(const QDateTime ×tamp); - QDateTime timestamp() const; - void setCoordinate(const QGeoCoordinate &coordinate); - QGeoCoordinate coordinate() const; - void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value); - qreal attribute(QGeoPositionInfo::Attribute attribute) const; - void removeAttribute(QGeoPositionInfo::Attribute attribute); - bool hasAttribute(QGeoPositionInfo::Attribute attribute) const; - void swap(QGeoPositionInfo &other /Constrained/); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &info); -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &info /Constrained/); -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoPositionInfo &lhs, const QGeoPositionInfo &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoPositionInfo &lhs, const QGeoPositionInfo &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfosource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfosource.sip deleted file mode 100644 index 7514ce4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeopositioninfosource.sip +++ /dev/null @@ -1,114 +0,0 @@ -// qgeopositioninfosource.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoPositionInfoSource : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QGeoAreaMonitorSource, &sipType_QGeoAreaMonitorSource, -1, 1}, - {sipName_QGeoPositionInfoSource, &sipType_QGeoPositionInfoSource, 3, 2}, - {sipName_QGeoSatelliteInfoSource, &sipType_QGeoSatelliteInfoSource, 4, -1}, - {sipName_QNmeaPositionInfoSource, &sipType_QNmeaPositionInfoSource, -1, -1}, - {sipName_QNmeaSatelliteInfoSource, &sipType_QNmeaSatelliteInfoSource, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum Error - { - AccessError, - ClosedError, - UnknownSourceError, - UpdateTimeoutError, - NoError, - }; - - enum PositioningMethod /BaseType=Flag/ - { - NoPositioningMethods, - SatellitePositioningMethods, - NonSatellitePositioningMethods, - AllPositioningMethods, - }; - - typedef QFlags PositioningMethods; - explicit QGeoPositionInfoSource(QObject *parent /TransferThis/); - virtual ~QGeoPositionInfoSource(); - virtual void setUpdateInterval(int msec); - int updateInterval() const; - virtual void setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods); - QGeoPositionInfoSource::PositioningMethods preferredPositioningMethods() const; - virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const = 0; - virtual QGeoPositionInfoSource::PositioningMethods supportedPositioningMethods() const = 0; - virtual int minimumUpdateInterval() const = 0; - QString sourceName() const; - static QGeoPositionInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; - static QGeoPositionInfoSource *createDefaultSource(const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; - static QGeoPositionInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; - static QGeoPositionInfoSource *createSource(const QString &sourceName, const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; - static QStringList availableSources(); - virtual QGeoPositionInfoSource::Error error() const = 0; - -public slots: - virtual void startUpdates() = 0; - virtual void stopUpdates() = 0; - virtual void requestUpdate(int timeout = 0) = 0; - -signals: - void positionUpdated(const QGeoPositionInfo &update); - void supportedPositioningMethodsChanged(); - void errorOccurred(QGeoPositionInfoSource::Error); - -public: - virtual bool setBackendProperty(const QString &name, const QVariant &value); - virtual QVariant backendProperty(const QString &name) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeorectangle.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeorectangle.sip deleted file mode 100644 index a64e7b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeorectangle.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qgeorectangle.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoRectangle : public QGeoShape -{ -%TypeHeaderCode -#include -%End - -public: - QGeoRectangle(); - QGeoRectangle(const QGeoCoordinate ¢er, double degreesWidth, double degreesHeight); - QGeoRectangle(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight); - QGeoRectangle(const QList &coordinates); - QGeoRectangle(const QGeoRectangle &other); - QGeoRectangle(const QGeoShape &other); - ~QGeoRectangle(); - void setTopLeft(const QGeoCoordinate &topLeft); - QGeoCoordinate topLeft() const; - void setTopRight(const QGeoCoordinate &topRight); - QGeoCoordinate topRight() const; - void setBottomLeft(const QGeoCoordinate &bottomLeft); - QGeoCoordinate bottomLeft() const; - void setBottomRight(const QGeoCoordinate &bottomRight); - QGeoCoordinate bottomRight() const; - void setCenter(const QGeoCoordinate ¢er); - QGeoCoordinate center() const; - void setWidth(double degreesWidth); - double width() const; - void setHeight(double degreesHeight); - double height() const; - bool contains(const QGeoRectangle &rectangle) const; - bool intersects(const QGeoRectangle &rectangle) const; - void translate(double degreesLatitude, double degreesLongitude); - QGeoRectangle translated(double degreesLatitude, double degreesLongitude) const; - QGeoRectangle united(const QGeoRectangle &rectangle) const; - QGeoRectangle &operator|=(const QGeoRectangle &rectangle); - QGeoRectangle operator|(const QGeoRectangle &rectangle) const; - QString toString() const; - void extendRectangle(const QGeoCoordinate &coordinate); -}; - -%End -%If (Qt_6_5_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoRectangle &rectangle) /ReleaseGIL/; -%End -%If (Qt_6_5_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoRectangle &rectangle /Constrained/) /ReleaseGIL/; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfo.sip deleted file mode 100644 index 32b13ac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfo.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qgeosatelliteinfo.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoSatelliteInfo -{ -%TypeHeaderCode -#include -%End - -public: - enum Attribute - { - Elevation, - Azimuth, - }; - - enum SatelliteSystem - { - Undefined, - GPS, - GLONASS, - GALILEO, - BEIDOU, - QZSS, - Multiple, - CustomType, - }; - - QGeoSatelliteInfo(); - QGeoSatelliteInfo(const QGeoSatelliteInfo &other); - ~QGeoSatelliteInfo(); - void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system); - QGeoSatelliteInfo::SatelliteSystem satelliteSystem() const; - void setSatelliteIdentifier(int satId); - int satelliteIdentifier() const; - void setSignalStrength(int signalStrength); - int signalStrength() const; - void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value); - qreal attribute(QGeoSatelliteInfo::Attribute attribute) const; - void removeAttribute(QGeoSatelliteInfo::Attribute attribute); - bool hasAttribute(QGeoSatelliteInfo::Attribute attribute) const; - void swap(QGeoSatelliteInfo &other /Constrained/); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoSatelliteInfo &info); -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoSatelliteInfo &info /Constrained/); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfosource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfosource.sip deleted file mode 100644 index 53391b7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeosatelliteinfosource.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qgeosatelliteinfosource.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoSatelliteInfoSource : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Error - { - AccessError, - ClosedError, - NoError, - UnknownSourceError, - UpdateTimeoutError, - }; - - explicit QGeoSatelliteInfoSource(QObject *parent /TransferThis/); - virtual ~QGeoSatelliteInfoSource(); - static QGeoSatelliteInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; - static QGeoSatelliteInfoSource *createDefaultSource(const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; - static QGeoSatelliteInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; - static QGeoSatelliteInfoSource *createSource(const QString &sourceName, const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; - static QStringList availableSources(); - QString sourceName() const; - virtual void setUpdateInterval(int msec); - int updateInterval() const; - virtual int minimumUpdateInterval() const = 0; - virtual QGeoSatelliteInfoSource::Error error() const = 0; - -public slots: - virtual void startUpdates() = 0; - virtual void stopUpdates() = 0; - virtual void requestUpdate(int timeout = 0) = 0; - -signals: - void satellitesInViewUpdated(const QList &satellites); - void satellitesInUseUpdated(const QList &satellites); - void errorOccurred(QGeoSatelliteInfoSource::Error); - -public: - virtual bool setBackendProperty(const QString &name, const QVariant &value); - virtual QVariant backendProperty(const QString &name) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoshape.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoshape.sip deleted file mode 100644 index 514bbc2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qgeoshape.sip +++ /dev/null @@ -1,94 +0,0 @@ -// qgeoshape.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGeoShape -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QGeoShape::CircleType: - sipType = sipType_QGeoCircle; - break; - - case QGeoShape::RectangleType: - sipType = sipType_QGeoRectangle; - break; - - case QGeoShape::PathType: - sipType = sipType_QGeoPath; - break; - - case QGeoShape::PolygonType: - sipType = sipType_QGeoPolygon; - break; - - default: - sipType = 0; - } -%End - -public: - QGeoShape(); - QGeoShape(const QGeoShape &other); - ~QGeoShape(); - - enum ShapeType - { - UnknownType, - RectangleType, - CircleType, - PathType, - PolygonType, - }; - - QGeoShape::ShapeType type() const; - bool isValid() const; - bool isEmpty() const; - bool contains(const QGeoCoordinate &coordinate) const; - QGeoCoordinate center() const; - QString toString() const; - QGeoRectangle boundingGeoRectangle() const; - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &stream, const QGeoShape &shape); -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &stream, QGeoShape &shape /Constrained/); -%End -%If (Qt_6_2_0 -) -bool operator==(const QGeoShape &lhs, const QGeoShape &rhs); -%End -%If (Qt_6_2_0 -) -bool operator!=(const QGeoShape &lhs, const QGeoShape &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeapositioninfosource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeapositioninfosource.sip deleted file mode 100644 index b3643ec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeapositioninfosource.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qnmeapositioninfosource.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNmeaPositionInfoSource : public QGeoPositionInfoSource -{ -%TypeHeaderCode -#include -%End - -public: - enum UpdateMode - { - RealTimeMode, - SimulationMode, - }; - - QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode updateMode, QObject *parent /TransferThis/ = 0); - virtual ~QNmeaPositionInfoSource(); - QNmeaPositionInfoSource::UpdateMode updateMode() const; - void setDevice(QIODevice *source); - QIODevice *device() const; - virtual void setUpdateInterval(int msec); - virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const; - virtual QGeoPositionInfoSource::PositioningMethods supportedPositioningMethods() const; - virtual int minimumUpdateInterval() const; - virtual QGeoPositionInfoSource::Error error() const; - -public slots: - virtual void startUpdates(); - virtual void stopUpdates(); - virtual void requestUpdate(int timeout = 0); - -protected: - virtual bool parsePosInfoFromNmeaData(const char *data /Encoding="None"/, int size, QGeoPositionInfo *posInfo, bool *hasFix); - -public: - void setUserEquivalentRangeError(double uere); - double userEquivalentRangeError() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeasatelliteinfosource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeasatelliteinfosource.sip deleted file mode 100644 index 87a6054..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPositioning/qnmeasatelliteinfosource.sip +++ /dev/null @@ -1,68 +0,0 @@ -// qnmeasatelliteinfosource.sip generated by MetaSIP -// -// This file is part of the QtPositioning Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QNmeaSatelliteInfoSource : public QGeoSatelliteInfoSource -{ -%TypeHeaderCode -#include -%End - -public: - enum class UpdateMode - { - RealTimeMode, - SimulationMode, - }; - - static QString SimulationUpdateInterval; - QNmeaSatelliteInfoSource(QNmeaSatelliteInfoSource::UpdateMode mode, QObject *parent /TransferThis/ = 0); - virtual ~QNmeaSatelliteInfoSource(); - QNmeaSatelliteInfoSource::UpdateMode updateMode() const; - void setDevice(QIODevice *source); - QIODevice *device() const; - virtual void setUpdateInterval(int msec); - virtual int minimumUpdateInterval() const; - virtual QGeoSatelliteInfoSource::Error error() const; - virtual bool setBackendProperty(const QString &name, const QVariant &value); - virtual QVariant backendProperty(const QString &name) const; - -public slots: - virtual void startUpdates(); - virtual void stopUpdates(); - virtual void requestUpdate(int timeout = 0); - -protected: - virtual QGeoSatelliteInfo::SatelliteSystem parseSatellitesInUseFromNmea(const char *data /Encoding="None"/, int size, QList &pnrsInUse); - - enum SatelliteInfoParseStatus - { - NotParsed, - PartiallyParsed, - FullyParsed, - }; - - virtual QNmeaSatelliteInfoSource::SatelliteInfoParseStatus parseSatelliteInfoFromNmea(const char *data /Encoding="None"/, int size, QList &infos, QGeoSatelliteInfo::SatelliteSystem &system); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupport.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupport.toml deleted file mode 100644 index da4b634..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupport.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtPrintSupport. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupportmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupportmod.sip deleted file mode 100644 index cac875c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/QtPrintSupportmod.sip +++ /dev/null @@ -1,58 +0,0 @@ -// QtPrintSupportmod.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtPrintSupport, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qabstractprintdialog.sip -%Include qpagesetupdialog.sip -%Include qprintdialog.sip -%Include qprintengine.sip -%Include qprinter.sip -%Include qprinterinfo.sip -%Include qprintpreviewdialog.sip -%Include qprintpreviewwidget.sip -%Include qpyprintsupport_qlist.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qabstractprintdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qabstractprintdialog.sip deleted file mode 100644 index 464c661..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qabstractprintdialog.sip +++ /dev/null @@ -1,134 +0,0 @@ -// qabstractprintdialog.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_PrintDialog) - -class QAbstractPrintDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - #if defined(SIP_FEATURE_PyQt_PrintDialog) - {sipName_QPageSetupDialog, &sipType_QPageSetupDialog, -1, 1}, - #else - {0, 0, -1, 1}, - #endif - #if defined(SIP_FEATURE_PyQt_PrintPreviewWidget) - {sipName_QPrintPreviewWidget, &sipType_QPrintPreviewWidget, -1, 2}, - #else - {0, 0, -1, 2}, - #endif - #if defined(SIP_FEATURE_PyQt_PrintPreviewDialog) - {sipName_QPrintPreviewDialog, &sipType_QPrintPreviewDialog, -1, 3}, - #else - {0, 0, -1, 3}, - #endif - #if defined(SIP_FEATURE_PyQt_Printer) - {sipName_QAbstractPrintDialog, &sipType_QAbstractPrintDialog, 4, -1}, - #else - {0, 0, 4, -1}, - #endif - #if defined(SIP_FEATURE_PyQt_PrintDialog) - {sipName_QPrintDialog, &sipType_QPrintDialog, -1, -1}, - #else - {0, 0, -1, -1}, - #endif - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum PrintRange - { - AllPages, - Selection, - PageRange, - CurrentPage, - }; - - enum PrintDialogOption /BaseType=Flag/ - { - PrintToFile, - PrintSelection, - PrintPageRange, - PrintCollateCopies, - PrintShowPageSize, - PrintCurrentPage, - }; - - typedef QFlags PrintDialogOptions; - QAbstractPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractPrintDialog(); - void setPrintRange(QAbstractPrintDialog::PrintRange range); - QAbstractPrintDialog::PrintRange printRange() const; - void setMinMax(int min, int max); - int minPage() const; - int maxPage() const; - void setFromTo(int fromPage, int toPage); - int fromPage() const; - int toPage() const; - QPrinter *printer() const; - void setOptionTabs(const QList &tabs); -}; - -%End - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qtprintsupport_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); -extern pyqt6_qtprintsupport_get_connection_parts_t pyqt6_qtprintsupport_get_connection_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtprintsupport_get_connection_parts_t pyqt6_qtprintsupport_get_connection_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtprintsupport_get_connection_parts = (pyqt6_qtprintsupport_get_connection_parts_t)sipImportSymbol("pyqt6_get_connection_parts"); -Q_ASSERT(pyqt6_qtprintsupport_get_connection_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpagesetupdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpagesetupdialog.sip deleted file mode 100644 index b31627b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpagesetupdialog.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qpagesetupdialog.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_PrintDialog) - -class QPageSetupDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - QPageSetupDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); - explicit QPageSetupDialog(QWidget *parent /TransferThis/ = 0); - virtual ~QPageSetupDialog(); - virtual void setVisible(bool visible); - virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; -%MethodCode - // Transfer ownership back to Python (a modal dialog will probably have the - // main window as it's parent). This means the Qt dialog will be deleted when - // the Python wrapper is garbage collected. Although this is a little - // inconsistent, it saves having to code it explicitly to avoid the memory - // leak. - sipTransferBack(sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipRes = sipSelfWasArg ? sipCpp->QPageSetupDialog::exec() - : sipCpp->exec(); - Py_END_ALLOW_THREADS -%End - - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual void done(int result); - QPrinter *printer(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintdialog.sip deleted file mode 100644 index c66e9cb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintdialog.sip +++ /dev/null @@ -1,80 +0,0 @@ -// qprintdialog.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_PrintDialog) - -class QPrintDialog : public QAbstractPrintDialog -{ -%TypeHeaderCode -#include -%End - -public: - QPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); - explicit QPrintDialog(QWidget *parent /TransferThis/ = 0); - virtual ~QPrintDialog(); - virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; -%MethodCode - // Transfer ownership back to Python (a modal dialog will probably have the - // main window as it's parent). This means the Qt dialog will be deleted when - // the Python wrapper is garbage collected. Although this is a little - // inconsistent, it saves having to code it explicitly to avoid the memory - // leak. - sipTransferBack(sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipRes = sipSelfWasArg ? sipCpp->QPrintDialog::exec() - : sipCpp->exec(); - Py_END_ALLOW_THREADS -%End - -%If (Android || Linux || WebAssembly) - virtual void accept(); -%End - virtual void done(int result); - void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on = true); - bool testOption(QAbstractPrintDialog::PrintDialogOption option) const; - void setOptions(QAbstractPrintDialog::PrintDialogOptions options); - QAbstractPrintDialog::PrintDialogOptions options() const; - virtual void setVisible(bool visible); - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - -signals: - void accepted(); - void accepted(QPrinter *printer); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintengine.sip deleted file mode 100644 index 42f072d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintengine.sip +++ /dev/null @@ -1,78 +0,0 @@ -// qprintengine.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_Printer) - -class QPrintEngine -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QPrintEngine(); - - enum PrintEnginePropertyKey - { - PPK_CollateCopies, - PPK_ColorMode, - PPK_Creator, - PPK_DocumentName, - PPK_FullPage, - PPK_NumberOfCopies, - PPK_Orientation, - PPK_OutputFileName, - PPK_PageOrder, - PPK_PageRect, - PPK_PageSize, - PPK_PaperRect, - PPK_PaperSource, - PPK_PrinterName, - PPK_PrinterProgram, - PPK_Resolution, - PPK_SelectionOption, - PPK_SupportedResolutions, - PPK_WindowsPageSize, - PPK_FontEmbedding, - PPK_Duplex, - PPK_PaperSources, - PPK_CustomPaperSize, - PPK_PageMargins, - PPK_PaperSize, - PPK_CopyCount, - PPK_SupportsMultipleCopies, - PPK_PaperName, - PPK_QPageSize, - PPK_QPageMargins, - PPK_QPageLayout, - PPK_CustomBase, - }; - - virtual void setProperty(QPrintEngine::PrintEnginePropertyKey key, const QVariant &value) = 0; - virtual QVariant property(QPrintEngine::PrintEnginePropertyKey key) const = 0; - virtual bool newPage() = 0; - virtual bool abort() = 0; - virtual int metric(QPaintDevice::PaintDeviceMetric) const = 0; - virtual QPrinter::PrinterState printerState() const = 0; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinter.sip deleted file mode 100644 index ee45d7d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinter.sip +++ /dev/null @@ -1,178 +0,0 @@ -// qprinter.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_Printer) - -class QPrinter : public QPagedPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - enum PrinterMode - { - ScreenResolution, - PrinterResolution, - HighResolution, - }; - - explicit QPrinter(QPrinter::PrinterMode mode = QPrinter::ScreenResolution); - QPrinter(const QPrinterInfo &printer, QPrinter::PrinterMode mode = QPrinter::ScreenResolution); - virtual ~QPrinter(); - - enum PageOrder - { - FirstPageFirst, - LastPageFirst, - }; - - enum ColorMode - { - GrayScale, - Color, - }; - - enum PaperSource - { - OnlyOne, - Lower, - Middle, - Manual, - Envelope, - EnvelopeManual, - Auto, - Tractor, - SmallFormat, - LargeFormat, - LargeCapacity, - Cassette, - FormSource, - MaxPageSource, - Upper, - CustomSource, - LastPaperSource, - }; - - enum PrinterState - { - Idle, - Active, - Aborted, - Error, - }; - - enum OutputFormat - { - NativeFormat, - PdfFormat, - }; - - enum PrintRange - { - AllPages, - Selection, - PageRange, - CurrentPage, - }; - - enum Unit - { - Millimeter, - Point, - Inch, - Pica, - Didot, - Cicero, - DevicePixel, - }; - - enum DuplexMode - { - DuplexNone, - DuplexAuto, - DuplexLongSide, - DuplexShortSide, - }; - - void setOutputFormat(QPrinter::OutputFormat format); - QPrinter::OutputFormat outputFormat() const; - void setPrinterName(const QString &); - QString printerName() const; - bool isValid() const; - void setOutputFileName(const QString &); - QString outputFileName() const; - void setPrintProgram(const QString &); - QString printProgram() const; - void setDocName(const QString &); - QString docName() const; - void setCreator(const QString &); - QString creator() const; - void setPageOrder(QPrinter::PageOrder); - QPrinter::PageOrder pageOrder() const; - void setResolution(int); - int resolution() const; - void setColorMode(QPrinter::ColorMode); - QPrinter::ColorMode colorMode() const; - void setCollateCopies(bool collate); - bool collateCopies() const; - void setFullPage(bool); - bool fullPage() const; - void setCopyCount(int); - int copyCount() const; - bool supportsMultipleCopies() const; - void setPaperSource(QPrinter::PaperSource); - QPrinter::PaperSource paperSource() const; - void setDuplex(QPrinter::DuplexMode duplex); - QPrinter::DuplexMode duplex() const; - QList supportedResolutions() const; - void setFontEmbeddingEnabled(bool enable); - bool fontEmbeddingEnabled() const; - QRectF paperRect(QPrinter::Unit) const; - QRectF pageRect(QPrinter::Unit) const; -%If (Android || Linux || iOS || macOS || WebAssembly) - QString printerSelectionOption() const; -%End -%If (Android || Linux || iOS || macOS || WebAssembly) - void setPrinterSelectionOption(const QString &); -%End - virtual bool newPage(); - bool abort(); - QPrinter::PrinterState printerState() const; - virtual QPaintEngine *paintEngine() const; - QPrintEngine *printEngine() const; - void setFromTo(int fromPage, int toPage); - int fromPage() const; - int toPage() const; - void setPrintRange(QPrinter::PrintRange range); - QPrinter::PrintRange printRange() const; - -protected: - virtual int metric(QPaintDevice::PaintDeviceMetric) const; - void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); - -public: - void setPdfVersion(QPagedPaintDevice::PdfVersion version); - QPagedPaintDevice::PdfVersion pdfVersion() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinterinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinterinfo.sip deleted file mode 100644 index 13bfd9d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprinterinfo.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qprinterinfo.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_Printer) - -class QPrinterInfo -{ -%TypeHeaderCode -#include -%End - -public: - QPrinterInfo(); - QPrinterInfo(const QPrinterInfo &src); - explicit QPrinterInfo(const QPrinter &printer); - ~QPrinterInfo(); - QString printerName() const; - bool isNull() const; - bool isDefault() const; - static QList availablePrinters(); - static QPrinterInfo defaultPrinter(); - QString description() const; - QString location() const; - QString makeAndModel() const; - static QPrinterInfo printerInfo(const QString &printerName); - bool isRemote() const; - QPrinter::PrinterState state() const; - QList supportedPageSizes() const; - QPageSize defaultPageSize() const; - bool supportsCustomPageSizes() const; - QPageSize minimumPhysicalPageSize() const; - QPageSize maximumPhysicalPageSize() const; - QList supportedResolutions() const; - static QStringList availablePrinterNames(); - static QString defaultPrinterName(); - QPrinter::DuplexMode defaultDuplexMode() const; - QList supportedDuplexModes() const; - QPrinter::ColorMode defaultColorMode() const; - QList supportedColorModes() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewdialog.sip deleted file mode 100644 index 7c89cb8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewdialog.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qprintpreviewdialog.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_PrintPreviewDialog) - -class QPrintPreviewDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - QPrintPreviewDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - QPrintPreviewDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QPrintPreviewDialog(); - virtual void setVisible(bool visible); - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - QPrinter *printer(); - virtual void done(int result); - -signals: - void paintRequested(QPrinter *printer); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewwidget.sip deleted file mode 100644 index 0be54ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qprintpreviewwidget.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qprintpreviewwidget.sip generated by MetaSIP -// -// This file is part of the QtPrintSupport Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_PrintPreviewWidget) - -class QPrintPreviewWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum ViewMode - { - SinglePageView, - FacingPagesView, - AllPagesView, - }; - - enum ZoomMode - { - CustomZoom, - FitToWidth, - FitInView, - }; - - QPrintPreviewWidget(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - QPrintPreviewWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QPrintPreviewWidget(); - qreal zoomFactor() const; - QPageLayout::Orientation orientation() const; - QPrintPreviewWidget::ViewMode viewMode() const; - QPrintPreviewWidget::ZoomMode zoomMode() const; - int currentPage() const; - -public slots: - virtual void setVisible(bool visible); - void print(); - void zoomIn(qreal factor = 1.1); - void zoomOut(qreal factor = 1.1); - void setZoomFactor(qreal zoomFactor); - void setOrientation(QPageLayout::Orientation orientation); - void setViewMode(QPrintPreviewWidget::ViewMode viewMode); - void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode); - void setCurrentPage(int pageNumber); - void fitToWidth(); - void fitInView(); - void setLandscapeOrientation(); - void setPortraitOrientation(); - void setSinglePageViewMode(); - void setFacingPagesViewMode(); - void setAllPagesViewMode(); - void updatePreview(); - -signals: - void paintRequested(QPrinter *printer); - void previewChanged(); - -public: - int pageCount() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpyprintsupport_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpyprintsupport_qlist.sip deleted file mode 100644 index 5a75610..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtPrintSupport/qpyprintsupport_qlist.sip +++ /dev/null @@ -1,229 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtPrintSupport module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (PyQt_Printer) - -%MappedType QList - /TypeHintIn="Iterable[QPrinter.DuplexMode]", - TypeHintOut="List[QPrinter.DuplexMode]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QPrinter_DuplexMode); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QPrinter_DuplexMode); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QPrinter.DuplexMode' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End - - -%If (PyQt_Printer) - -%MappedType QList - /TypeHintIn="Iterable[QPrinter.ColorMode]", - TypeHintOut="List[QPrinter.ColorMode]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QPrinter_ColorMode); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QPrinter_ColorMode); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QPrinter.ColorMode' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQml.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQml.toml deleted file mode 100644 index 1dd51f0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQml.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtQml. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQmlmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQmlmod.sip deleted file mode 100644 index e4a0eec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/QtQmlmod.sip +++ /dev/null @@ -1,74 +0,0 @@ -// QtQmlmod.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtQml, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtNetwork/QtNetworkmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qqml.sip -%Include qjsengine.sip -%Include qjsmanagedvalue.sip -%Include qjsprimitivevalue.sip -%Include qjsvalue.sip -%Include qjsvalueiterator.sip -%Include qqmlabstracturlinterceptor.sip -%Include qqmlapplicationengine.sip -%Include qqmlcomponent.sip -%Include qqmlcontext.sip -%Include qqmlengine.sip -%Include qqmlerror.sip -%Include qqmlexpression.sip -%Include qqmlextensionplugin.sip -%Include qqmlfileselector.sip -%Include qqmlincubator.sip -%Include qqmllist.sip -%Include qqmlnetworkaccessmanagerfactory.sip -%Include qqmlparserstatus.sip -%Include qqmlproperty.sip -%Include qqmlpropertymap.sip -%Include qqmlpropertyvaluesource.sip -%Include qqmlscriptstring.sip -%Include qmlregistertype.sip -%Include qpyqmllistproperty.sip -%Include qmlattachedpropertiesobject.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsengine.sip deleted file mode 100644 index 6d0f4dd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsengine.sip +++ /dev/null @@ -1,208 +0,0 @@ -// qjsengine.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -class QJSEngine : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QJSEngine, &sipType_QJSEngine, 9, 1}, - {sipName_QQmlComponent, &sipType_QQmlComponent, -1, 2}, - {sipName_QQmlContext, &sipType_QQmlContext, -1, 3}, - {sipName_QQmlEngineExtensionPlugin, &sipType_QQmlEngineExtensionPlugin, -1, 4}, - {sipName_QQmlExpression, &sipType_QQmlExpression, -1, 5}, - {sipName_QQmlExtensionPlugin, &sipType_QQmlExtensionPlugin, -1, 6}, - {sipName_QQmlFileSelector, &sipType_QQmlFileSelector, -1, 7}, - {sipName_QQmlImageProviderBase, &sipType_QQmlImageProviderBase, -1, 8}, - {sipName_QQmlPropertyMap, &sipType_QQmlPropertyMap, -1, -1}, - {sipName_QQmlEngine, &sipType_QQmlEngine, 10, -1}, - {sipName_QQmlApplicationEngine, &sipType_QQmlApplicationEngine, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QJSEngine(); - explicit QJSEngine(QObject *parent /TransferThis/); - virtual ~QJSEngine(); - QJSValue globalObject() const; - QJSValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, SIP_PYLIST exceptionStackTrace /AllowNone,TypeHint="List[str]"/ = 0) /ReleaseGIL/; -%MethodCode - QStringList *st; - - st = (a3 ? new QStringList() : SIP_NULLPTR); - - Py_BEGIN_ALLOW_THREADS - sipRes = new QJSValue(sipCpp->evaluate(*a0, *a1, a2, st)); - Py_END_ALLOW_THREADS - - if (st) - { - for (qsizetype i = 0; i < st->size(); ++i) - { - QString *s = new QString(st->at(i)); - PyObject *s_obj = sipConvertFromNewType(s, sipType_QString, SIP_NULLPTR); - - if (s_obj) - { - if (PyList_Append(a3, s_obj) < 0) - { - Py_DECREF(s_obj); - sipIsErr = 1; - break; - } - - Py_DECREF(s_obj); - } - else - { - delete s; - sipIsErr = 1; - break; - } - } - - if (sipIsErr) - { - delete sipRes; - sipRes = SIP_NULLPTR; - } - - delete st; - } -%End - - QJSValue newObject(); - QJSValue newArray(uint length = 0); - QJSValue newQObject(QObject *object /Transfer/); - void collectGarbage(); - - enum Extension /BaseType=Flag/ - { - TranslationExtension, - ConsoleExtension, - GarbageCollectionExtension, - AllExtensions, - }; - - typedef QFlags Extensions; - void installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue()); - QJSValue newQMetaObject(const QMetaObject *metaObject); - QJSValue importModule(const QString &fileName); - QJSValue newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString()); - void throwError(const QString &message); -%If (Qt_6_1_0 -) - void throwError(const QJSValue &error); -%End - void throwError(QJSValue::ErrorType errorType, const QString &message = QString()); - void setInterrupted(bool interrupted); - bool isInterrupted() const; - QString uiLanguage() const; - void setUiLanguage(const QString &language); - - enum ObjectOwnership - { - CppOwnership, - JavaScriptOwnership, - }; - - static void setObjectOwnership(QObject * /GetWrapper/, QJSEngine::ObjectOwnership); -%MethodCode - QJSEngine::ObjectOwnership old = QJSEngine::objectOwnership(a0); - - QJSEngine::setObjectOwnership(a0, a1); - - if (old != a1 && !a0->parent()) - { - if (old == QJSEngine::CppOwnership) - sipTransferTo(a0Wrapper, Py_None); - else - sipTransferBack(a0Wrapper); - } -%End - - static QJSEngine::ObjectOwnership objectOwnership(QObject *); -%If (Qt_6_1_0 -) - bool hasError() const; -%End -%If (Qt_6_1_0 -) - QJSValue catchError(); -%End - -signals: - void uiLanguageChanged(); - -public: -%If (Qt_6_2_0 -) - bool registerModule(const QString &moduleName, const QJSValue &value); -%End -%If (Qt_6_2_0 -) - QJSValue newSymbol(const QString &name); -%End -%If (Qt_6_5_0 -) - QJSValue toScriptValue(const QVariant &value); -%End -%If (Qt_6_5_0 -) - QJSManagedValue toManagedValue(const QVariant &value); -%End -%If (Qt_6_5_0 -) - QJSPrimitiveValue toPrimitiveValue(const QVariant &value); -%End -}; - -QJSEngine *qjsEngine(const QObject *); - -%ModuleHeaderCode -#include "qpyqml_api.h" -%End - -%PostInitialisationCode -qpyqml_post_init(sipModuleDict); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsmanagedvalue.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsmanagedvalue.sip deleted file mode 100644 index 6cffa79..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsmanagedvalue.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qjsmanagedvalue.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_1_0 -) - -class QJSManagedValue /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - Undefined, - Boolean, - Number, - String, - Object, - Symbol, - Function, - }; - - QJSManagedValue(); - QJSManagedValue(QJSValue value, QJSEngine *engine); - QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine); - QJSManagedValue(const QString &string, QJSEngine *engine); - QJSManagedValue(const QVariant &variant, QJSEngine *engine); - ~QJSManagedValue(); - bool equals(const QJSManagedValue &other) const; - bool strictlyEquals(const QJSManagedValue &other) const; - QJSEngine *engine() const; - QJSManagedValue prototype() const; - void setPrototype(const QJSManagedValue &prototype); - QJSManagedValue::Type type() const; - bool isUndefined() const; - bool isBoolean() const; - bool isNumber() const; - bool isString() const; - bool isObject() const; - bool isSymbol() const; - bool isFunction() const; - bool isInteger() const; - bool isNull() const; - bool isRegularExpression() const; - bool isArray() const; - bool isUrl() const; - bool isVariant() const; - bool isQObject() const; - bool isQMetaObject() const; - bool isDate() const; - bool isError() const; - QString toString() const; - double toNumber() const; - bool toBoolean() const; - QJSPrimitiveValue toPrimitive() const; - QJSValue toJSValue() const; - QVariant toVariant() const; - int toInteger() const; - QRegularExpression toRegularExpression() const; - QUrl toUrl() const; - QObject *toQObject() const; - const QMetaObject *toQMetaObject() const; - QDateTime toDateTime() const; - bool hasProperty(const QString &name) const; - bool hasOwnProperty(const QString &name) const; - QJSValue property(const QString &name) const; - void setProperty(const QString &name, const QJSValue &value); - bool deleteProperty(const QString &name); - bool hasProperty(quint32 arrayIndex) const; - bool hasOwnProperty(quint32 arrayIndex) const; - QJSValue property(quint32 arrayIndex) const; - void setProperty(quint32 arrayIndex, const QJSValue &value); - bool deleteProperty(quint32 arrayIndex); - QJSValue call(const QJSValueList &arguments = {}) const; - QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const; - QJSValue callAsConstructor(const QJSValueList &arguments = {}) const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsprimitivevalue.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsprimitivevalue.sip deleted file mode 100644 index 01b3602..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsprimitivevalue.sip +++ /dev/null @@ -1,123 +0,0 @@ -// qjsprimitivevalue.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_1_0 -) - -struct QJSPrimitiveUndefined -{ -%TypeHeaderCode -#include -%End -}; - -%End -%If (Qt_6_1_0 -) - -struct QJSPrimitiveNull -{ -%TypeHeaderCode -#include -%End -}; - -%End -%If (Qt_6_1_0 -) - -class QJSPrimitiveValue -{ -%TypeHeaderCode -#include -%End - -public: - enum Type - { - Undefined, - Null, - Boolean, - Integer, - Double, - String, - }; - - QJSPrimitiveValue(); - QJSPrimitiveValue(QJSPrimitiveUndefined undefined); - QJSPrimitiveValue(QJSPrimitiveNull null); - QJSPrimitiveValue(bool value /Constrained/); - QJSPrimitiveValue(int value /Constrained/); - QJSPrimitiveValue(double value /Constrained/); - QJSPrimitiveValue(QString string); - QJSPrimitiveValue::Type type() const; - bool toBoolean() const; - int toInteger() const; - double toDouble() const; - QString toString() const; - bool strictlyEquals(const QJSPrimitiveValue &other) const; - bool equals(const QJSPrimitiveValue &other) const; -%If (Qt_6_2_0 -) - QJSPrimitiveValue operator+(); -%End -%If (Qt_6_2_0 -) - QJSPrimitiveValue operator-(); -%End -%If (Qt_6_6_0 -) - QMetaType metaType() const; -%End -%If (Qt_6_6_0 -) - void *data(); -%End -}; - -%End -%If (Qt_6_1_0 -) -QJSPrimitiveValue operator+(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -QJSPrimitiveValue operator-(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -QJSPrimitiveValue operator*(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -QJSPrimitiveValue operator/(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -QJSPrimitiveValue operator%(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator==(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator!=(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator<(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator>(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator<=(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End -%If (Qt_6_1_0 -) -bool operator>=(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalue.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalue.sip deleted file mode 100644 index 7977787..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalue.sip +++ /dev/null @@ -1,117 +0,0 @@ -// qjsvalue.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -typedef QList QJSValueList; - -class QJSValue /TypeHintIn="Union[QJSValue, QJSValue.SpecialValue, bool, int, float, QString]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToTypeCode -if (!sipIsErr) - return qpyqml_canConvertTo_QJSValue(sipPy); - -return qpyqml_convertTo_QJSValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr); -%End - -public: - enum SpecialValue - { - NullValue, - UndefinedValue, - }; - -%If (Qt_6_1_0 -) - - enum ObjectConversionBehavior - { - ConvertJSObjects, - RetainJSObjects, - }; - -%End - QJSValue(QJSValue::SpecialValue value /Constrained/ = QJSValue::UndefinedValue); - QJSValue(const QJSValue &other); - ~QJSValue(); - bool isBool() const; - bool isNumber() const; - bool isNull() const; - bool isString() const; - bool isUndefined() const; - bool isVariant() const; - bool isQObject() const; - bool isObject() const; - bool isDate() const; - bool isRegExp() const; - bool isArray() const; - bool isError() const; -%If (Qt_6_2_0 -) - bool isUrl() const; -%End - QString toString() const; - double toNumber() const; - qint32 toInt() const; - quint32 toUInt() const; - bool toBool() const; - QVariant toVariant() const; -%If (Qt_6_1_0 -) - QVariant toVariant(QJSValue::ObjectConversionBehavior behavior) const; -%End -%If (Qt_6_1_0 -) - QJSPrimitiveValue toPrimitive() const; -%End - QObject *toQObject() const; - QDateTime toDateTime() const; - bool equals(const QJSValue &other) const; - bool strictlyEquals(const QJSValue &other) const; - QJSValue prototype() const; - void setPrototype(const QJSValue &prototype); - QJSValue property(const QString &name) const; - void setProperty(const QString &name, const QJSValue &value); - bool hasProperty(const QString &name) const; - bool hasOwnProperty(const QString &name) const; - QJSValue property(quint32 arrayIndex) const; - void setProperty(quint32 arrayIndex, const QJSValue &value); - bool deleteProperty(const QString &name); - bool isCallable() const; - QJSValue call(const QJSValueList &args = QJSValueList()) const; - QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()) const; - QJSValue callAsConstructor(const QJSValueList &args = QJSValueList()) const; - - enum ErrorType - { - GenericError, - EvalError, - RangeError, - ReferenceError, - SyntaxError, - TypeError, - URIError, - }; - - QJSValue::ErrorType errorType() const; -}; - -QDataStream &operator<<(QDataStream &, const QJSValue &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QJSValue & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalueiterator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalueiterator.sip deleted file mode 100644 index 7f90ea5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qjsvalueiterator.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qjsvalueiterator.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QJSValueIterator -{ -%TypeHeaderCode -#include -%End - -public: - QJSValueIterator(const QJSValue &value); - ~QJSValueIterator(); - bool hasNext() const; - bool next(); - QString name() const; - QJSValue value() const; - -private: - QJSValueIterator(const QJSValueIterator &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlattachedpropertiesobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlattachedpropertiesobject.sip deleted file mode 100644 index 82985bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlattachedpropertiesobject.sip +++ /dev/null @@ -1,42 +0,0 @@ -// This is the SIP specification of the qmlAttachedPropertiesObject() function. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleHeaderCode -#include -%End - - -QObject *qmlAttachedPropertiesObject(SIP_PYTYPE, QObject *object, - bool create = true); -%MethodCode - QObject *proxy = qpyqml_find_proxy_for(a1); - - if (!proxy) - { - sipError = sipErrorFail; - } - else - { - const QMetaObject *mo = pyqt6_qtqml_get_qmetaobject((PyTypeObject *)a0); - - sipRes = qmlAttachedPropertiesObject(proxy, - qmlAttachedPropertiesFunction(nullptr, mo), a2); - } -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlregistertype.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlregistertype.sip deleted file mode 100644 index c590961..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qmlregistertype.sip +++ /dev/null @@ -1,82 +0,0 @@ -// This is the SIP specification of the template versions of qmlRegisterType() -// and related functions. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleHeaderCode -#include -%End - - -%ModuleCode -// Imports from QtCore. -pyqt6_qtqml_get_qmetaobject_t pyqt6_qtqml_get_qmetaobject; -%End - - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtqml_get_qmetaobject = (pyqt6_qtqml_get_qmetaobject_t)sipImportSymbol( - "pyqt6_get_qmetaobject"); -Q_ASSERT(pyqt6_qtqml_get_qmetaobject); -%End - - -int qmlRegisterRevision(SIP_PYTYPE, const char *uri, int major, int minor, - SIP_PYTYPE attachedProperties = 0); -%MethodCode - if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a1, a2, a3, nullptr, (PyTypeObject *)a4)) < 0) - sipError = sipErrorFail; -%End - - -int qmlRegisterSingletonInstance(const char *uri, int major, int minor, - const char *typeName, QObject *cppObject); - - -int qmlRegisterSingletonType(SIP_PYTYPE, const char *uri, int major, int minor, - SIP_PYCALLABLE factory /TypeHint="Callable[[QQmlEngine, QJSEngine], Any]"/, - const char *name = 0); -%MethodCode - if ((sipRes = qpyqml_register_singleton_type((PyTypeObject *)a0, a1, a2, a3, a5, a4)) < 0) - sipError = sipErrorFail; -%End - - -int qmlRegisterType(SIP_PYTYPE, const char *uri, int major, int minor, - const char *name = 0, SIP_PYTYPE attachedProperties = 0); -%MethodCode - if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a1, a2, a3, a4, (PyTypeObject *)a5)) < 0) - sipError = sipErrorFail; -%End - - -int qmlRegisterAnonymousType(SIP_PYTYPE, const char *uri, int major); -%MethodCode - if ((sipRes = qpyqml_register_anonymous_type((PyTypeObject *)a0, a1, a2)) < 0) - sipError = sipErrorFail; -%End - - -int qmlRegisterUncreatableType(SIP_PYTYPE, const char *uri, int major, - int minor, const QString &reason, const char *qmlName = 0); -%MethodCode - if ((sipRes = qpyqml_register_uncreatable_type((PyTypeObject *)a0, a1, a2, a3, a5, *a4)) < 0) - sipError = sipErrorFail; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qpyqmllistproperty.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qpyqmllistproperty.sip deleted file mode 100644 index 7b319ed..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qpyqmllistproperty.sip +++ /dev/null @@ -1,40 +0,0 @@ -// This is the SIP specification of the QQmlListProperty mapped type. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QQmlListProperty /TypeHint="QQmlListProperty"/ -{ -%TypeHeaderCode -#include "qpyqmllistpropertywrapper.h" -%End - -%ConvertFromTypeCode - return qpyqml_QQmlListPropertyWrapper_New(sipCpp, 0); -%End - -%ConvertToTypeCode - if (sipIsErr == NULL) - return PyObject_IsInstance(sipPy, (PyObject *)qpyqml_QQmlListPropertyWrapper_TypeObject); - - *sipCppPtr = ((qpyqml_QQmlListPropertyWrapper *)sipPy)->qml_list_property; - - // It isn't a temporary copy. - return 0; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqml.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqml.sip deleted file mode 100644 index 67f3f3b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqml.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qqml.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -void qmlClearTypeRegistrations(); -int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message); -int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason); -bool qmlProtectModule(const char *uri, int majVersion); -void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor); -int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName); -int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName); -int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName); -QQmlContext *qmlContext(const QObject *); -QQmlEngine *qmlEngine(const QObject *); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlabstracturlinterceptor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlabstracturlinterceptor.sip deleted file mode 100644 index a3efcb0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlabstracturlinterceptor.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qqmlabstracturlinterceptor.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlAbstractUrlInterceptor -{ -%TypeHeaderCode -#include -%End - -public: - enum DataType - { - QmlFile, - JavaScriptFile, - QmldirFile, - UrlString, - }; - - QQmlAbstractUrlInterceptor(); - virtual ~QQmlAbstractUrlInterceptor(); - virtual QUrl intercept(const QUrl &path, QQmlAbstractUrlInterceptor::DataType type) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlapplicationengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlapplicationengine.sip deleted file mode 100644 index d9e4641..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlapplicationengine.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qqmlapplicationengine.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlApplicationEngine : public QQmlEngine -{ -%TypeHeaderCode -#include -%End - -public: - QQmlApplicationEngine(QObject *parent /TransferThis/ = 0); - QQmlApplicationEngine(const QUrl &url, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QQmlApplicationEngine(const QString &filePath, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; -%If (Qt_6_5_0 -) - QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent /TransferThis/ = 0); -%End - virtual ~QQmlApplicationEngine(); - QList rootObjects() const; - -public slots: - void load(const QUrl &url) /ReleaseGIL/; - void load(const QString &filePath) /ReleaseGIL/; - void loadData(const QByteArray &data, const QUrl &url = QUrl()) /ReleaseGIL/; - void setExtraFileSelectors(const QStringList &extraFileSelectors); - void setInitialProperties(const QVariantMap &initialProperties); -%If (Qt_6_5_0 -) - void loadFromModule(QAnyStringView uri, QAnyStringView typeName); -%End - -signals: - void objectCreated(QObject *object, const QUrl &url); -%If (Qt_6_4_0 -) - void objectCreationFailed(const QUrl &url); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcomponent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcomponent.sip deleted file mode 100644 index 68d818f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcomponent.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qqmlcomponent.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlComponent : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum CompilationMode - { - PreferSynchronous, - Asynchronous, - }; - - QQmlComponent(QQmlEngine *, QObject *parent /TransferThis/ = 0); - QQmlComponent(QQmlEngine *, const QString &fileName, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QQmlComponent(QQmlEngine *, const QString &fileName, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QQmlComponent(QQmlEngine *, const QUrl &url, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QQmlComponent(QQmlEngine *, const QUrl &url, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; -%If (Qt_6_5_0 -) - QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; -%End -%If (Qt_6_5_0 -) - QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; -%End - QQmlComponent(QObject *parent /TransferThis/ = 0); - virtual ~QQmlComponent(); - - enum Status - { - Null, - Ready, - Loading, - Error, - }; - - QQmlComponent::Status status() const; -%If (Qt_6_5_0 -) - bool isBound() const; -%End - bool isNull() const; - bool isReady() const; - bool isError() const; - bool isLoading() const; - QList errors() const; - qreal progress() const; - QUrl url() const; - virtual QObject *create(QQmlContext *context = 0) /TransferBack/; - QObject *createWithInitialProperties(const QVariantMap &initialProperties, QQmlContext *context = 0) /TransferBack/; - virtual QObject *beginCreate(QQmlContext *) /TransferBack/; - virtual void completeCreate(); - void create(QQmlIncubator &, QQmlContext *context = 0, QQmlContext *forContext = 0); - QQmlContext *creationContext() const; - -public slots: - void loadUrl(const QUrl &url) /ReleaseGIL/; - void loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode) /ReleaseGIL/; - void setData(const QByteArray &, const QUrl &baseUrl); -%If (Qt_6_5_0 -) - void loadFromModule(QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode = QQmlComponent::PreferSynchronous); -%End - -signals: - void statusChanged(QQmlComponent::Status); - void progressChanged(qreal); - -public: - QQmlEngine *engine() const; - void setInitialProperties(QObject *component, const QVariantMap &properties); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcontext.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcontext.sip deleted file mode 100644 index d1d10cc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlcontext.sip +++ /dev/null @@ -1,60 +0,0 @@ -// qqmlcontext.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlContext : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QQmlContext(QQmlEngine *engine, QObject *parent /TransferThis/ = 0); - QQmlContext(QQmlContext *parentContext, QObject *parent /TransferThis/ = 0); - virtual ~QQmlContext(); - bool isValid() const; - QQmlEngine *engine() const; - QQmlContext *parentContext() const; - QObject *contextObject() const; - void setContextObject(QObject *); - QVariant contextProperty(const QString &) const; - void setContextProperty(const QString &, QObject *); - void setContextProperty(const QString &, const QVariant &); - QString nameForObject(const QObject *) const; - QUrl resolvedUrl(const QUrl &) const; - void setBaseUrl(const QUrl &); - QUrl baseUrl() const; - - struct PropertyPair - { -%TypeHeaderCode -#include -%End - - QString name; - QVariant value; - }; - - void setContextProperties(const QList &properties); -%If (Qt_6_2_0 -) - QObject *objectForName(const QString &) const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlengine.sip deleted file mode 100644 index 8226282..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlengine.sip +++ /dev/null @@ -1,189 +0,0 @@ -// qqmlengine.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlEngine : public QJSEngine -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQmlEngine(QObject *parent /TransferThis/ = 0); - virtual ~QQmlEngine(); - QQmlContext *rootContext() const; - void clearComponentCache(); - void trimComponentCache(); - QStringList importPathList() const; - void setImportPathList(const QStringList &paths); - void addImportPath(const QString &dir); - QStringList pluginPathList() const; - void setPluginPathList(const QStringList &paths); - void addPluginPath(const QString &dir); - bool importPlugin(const QString &filePath, const QString &uri, QList *errors /GetWrapper/); -%MethodCode - int orig_size = (a2 ? a2->size() : 0); - - sipRes = sipCpp->importPlugin(*a0, *a1, a2); - - if (a2) - { - for (int i = a2->size(); i > orig_size; --i) - { - QQmlError *new_error = new QQmlError(a2->at(i - orig_size - 1)); - PyObject *new_error_obj = sipConvertFromNewType(new_error, sipType_QQmlError, 0); - - if (!new_error_obj) - { - delete new_error; - sipError = sipErrorFail; - break; - } - - if (PyList_Insert(a2Wrapper, 0, new_error_obj) < 0) - { - Py_DECREF(new_error_obj); - sipError = sipErrorFail; - break; - } - - Py_DECREF(new_error_obj); - } - } -%End - - void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory * /KeepReference/); - QQmlNetworkAccessManagerFactory *networkAccessManagerFactory() const; - QNetworkAccessManager *networkAccessManager() const; - void addImageProvider(const QString &id, QQmlImageProviderBase * /Transfer/); - QQmlImageProviderBase *imageProvider(const QString &id) const; - void removeImageProvider(const QString &id); - void setIncubationController(QQmlIncubationController * /KeepReference/); - QQmlIncubationController *incubationController() const; - void setOfflineStoragePath(const QString &dir); - QString offlineStoragePath() const; - QUrl baseUrl() const; - void setBaseUrl(const QUrl &); - bool outputWarningsToStandardError() const; - void setOutputWarningsToStandardError(bool); - static QQmlContext *contextForObject(const QObject *); - static void setContextForObject(QObject *, QQmlContext *); - -public slots: - void retranslate(); - -protected: - virtual bool event(QEvent *); - -signals: - void quit(); - void warnings(const QList &warnings); - void exit(int retCode); - -public: - QString offlineStorageDatabaseFilePath(const QString &databaseName) const; - SIP_PYOBJECT singletonInstance(int qmlTypeId) /TypeHint="QObject"/; -%MethodCode - QJSValue instance = sipCpp->singletonInstance(a0); - - if (instance.isQObject()) - { - sipRes = sipConvertFromType(instance.toQObject(), sipType_QObject, NULL); - - if (!sipRes) - sipError = sipErrorFail; - } - else - { - sipRes = Py_None; - Py_INCREF(sipRes); - } -%End - -%If (Qt_6_5_0 -) - SIP_PYOBJECT singletonInstance(QAnyStringView moduleName, QAnyStringView typeName) /TypeHint="QObject"/; -%MethodCode - QJSValue instance = sipCpp->singletonInstance(*a0, *a1); - - if (instance.isQObject()) - { - sipRes = sipConvertFromType(instance.toQObject(), sipType_QObject, NULL); - - if (!sipRes) - sipError = sipErrorFail; - } - else - { - sipRes = Py_None; - Py_INCREF(sipRes); - } -%End - -%End - void addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor); - void removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor); - QUrl interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) const; -%If (Qt_6_2_0 -) - QList urlInterceptors() const; -%End -%If (Qt_6_3_0 -) - void clearSingletons(); -%End - -signals: -%If (Qt_6_5_0 -) - void offlineStoragePathChanged(); -%End - -public: -%If (Qt_6_6_0 -) - void markCurrentFunctionAsTranslationBinding(); -%End -}; - -class QQmlImageProviderBase : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ImageType - { - Image, - Pixmap, - Texture, - ImageResponse, - }; - - enum Flag /BaseType=Flag/ - { - ForceAsynchronousImageLoading, - }; - - typedef QFlags Flags; - virtual ~QQmlImageProviderBase(); - virtual QQmlImageProviderBase::ImageType imageType() const = 0; - virtual QQmlImageProviderBase::Flags flags() const = 0; - -private: - QQmlImageProviderBase(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlerror.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlerror.sip deleted file mode 100644 index 1ddb3d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlerror.sip +++ /dev/null @@ -1,52 +0,0 @@ -// qqmlerror.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlError -{ -%TypeHeaderCode -#include -%End - -public: - QQmlError(); - QQmlError(const QQmlError &); - ~QQmlError(); - bool isValid() const; - QUrl url() const; - void setUrl(const QUrl &); - QString description() const; - void setDescription(const QString &); - int line() const; - void setLine(int); - int column() const; - void setColumn(int); - QString toString() const; - QObject *object() const; - void setObject(QObject *); - QtMsgType messageType() const; - void setMessageType(QtMsgType messageType); -%If (Qt_6_4_0 -) - void swap(QQmlError &other); -%End -}; - -bool operator==(const QQmlError &a, const QQmlError &b); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlexpression.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlexpression.sip deleted file mode 100644 index f41083b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlexpression.sip +++ /dev/null @@ -1,52 +0,0 @@ -// qqmlexpression.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlExpression : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QQmlExpression(); - QQmlExpression(QQmlContext *, QObject *, const QString &, QObject *parent /TransferThis/ = 0); - QQmlExpression(const QQmlScriptString &, QQmlContext *context = 0, QObject *scope = 0, QObject *parent /TransferThis/ = 0); - virtual ~QQmlExpression(); - QQmlEngine *engine() const; - QQmlContext *context() const; - QString expression() const; - void setExpression(const QString &); - bool notifyOnValueChanged() const; - void setNotifyOnValueChanged(bool); - QString sourceFile() const; - int lineNumber() const; - int columnNumber() const; - void setSourceLocation(const QString &fileName, int line, int column = 0); - QObject *scopeObject() const; - bool hasError() const; - void clearError(); - QQmlError error() const; - QVariant evaluate(bool *valueIsUndefined = 0) /ReleaseGIL/; - -signals: - void valueChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlextensionplugin.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlextensionplugin.sip deleted file mode 100644 index a3ac3d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlextensionplugin.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qqmlextensionplugin.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlExtensionPlugin : QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0); - virtual ~QQmlExtensionPlugin(); - virtual void registerTypes(const char *uri) = 0; - QUrl baseUrl() const; - virtual void unregisterTypes(); -}; - -class QQmlEngineExtensionPlugin : QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQmlEngineExtensionPlugin(QObject *parent /TransferThis/ = 0); - virtual ~QQmlEngineExtensionPlugin(); - virtual void initializeEngine(QQmlEngine *engine, const char *uri); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlfileselector.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlfileselector.sip deleted file mode 100644 index 0edf1a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlfileselector.sip +++ /dev/null @@ -1,35 +0,0 @@ -// qqmlfileselector.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlFileSelector : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QQmlFileSelector(QQmlEngine *engine, QObject *parent /TransferThis/ = 0); - virtual ~QQmlFileSelector(); - void setSelector(QFileSelector *selector); - void setExtraSelectors(const QStringList &strings); - QFileSelector *selector() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlincubator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlincubator.sip deleted file mode 100644 index 74283a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlincubator.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qqmlincubator.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlIncubator -{ -%TypeHeaderCode -#include -%End - -public: - enum IncubationMode - { - Asynchronous, - AsynchronousIfNested, - Synchronous, - }; - - enum Status - { - Null, - Ready, - Loading, - Error, - }; - - QQmlIncubator(QQmlIncubator::IncubationMode mode = QQmlIncubator::Asynchronous); - virtual ~QQmlIncubator(); - void clear(); - void forceCompletion(); - bool isNull() const; - bool isReady() const; - bool isError() const; - bool isLoading() const; - QList errors() const; - QQmlIncubator::IncubationMode incubationMode() const; - QQmlIncubator::Status status() const; - QObject *object() const /Factory/; - void setInitialProperties(const QVariantMap &initialProperties); - -protected: - virtual void statusChanged(QQmlIncubator::Status); - virtual void setInitialState(QObject *); - -private: - QQmlIncubator(const QQmlIncubator &); -}; - -class QQmlIncubationController -{ -%TypeHeaderCode -#include -%End - -public: - QQmlIncubationController(); - virtual ~QQmlIncubationController(); - QQmlEngine *engine() const; - int incubatingObjectCount() const; - void incubateFor(int msecs) /ReleaseGIL/; - -protected: - virtual void incubatingObjectCountChanged(int); - -private: - QQmlIncubationController(const QQmlIncubationController &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmllist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmllist.sip deleted file mode 100644 index d3e1297..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmllist.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qqmllist.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlListReference -{ -%TypeHeaderCode -#include -%End - -public: - QQmlListReference(); - QQmlListReference(QObject *, const char *property, QQmlEngine *engine = 0); - QQmlListReference(const QQmlListReference &); -%If (Qt_6_1_0 -) - QQmlListReference(const QVariant &variant, QQmlEngine *engine = 0); -%End - ~QQmlListReference(); - bool isValid() const; - QObject *object() const; - const QMetaObject *listElementType() const; - bool canAppend() const; - bool canAt() const; - bool canClear() const; - bool canCount() const; - bool isManipulable() const; - bool isReadable() const; - bool append(QObject *) const; - QObject *at(qsizetype) const; - bool clear() const; - qsizetype count() const /__len__/; - bool canReplace() const; - bool canRemoveLast() const; - bool replace(qsizetype, QObject *) const; - bool removeLast() const; - bool operator==(const QQmlListReference &other) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip deleted file mode 100644 index 5008b43..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip +++ /dev/null @@ -1,32 +0,0 @@ -// qqmlnetworkaccessmanagerfactory.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlNetworkAccessManagerFactory -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QQmlNetworkAccessManagerFactory(); - virtual QNetworkAccessManager *create(QObject *parent) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlparserstatus.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlparserstatus.sip deleted file mode 100644 index 07bb895..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlparserstatus.sip +++ /dev/null @@ -1,34 +0,0 @@ -// qqmlparserstatus.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlParserStatus /Mixin,PyQtInterface="org.qt-project.Qt.QQmlParserStatus"/ -{ -%TypeHeaderCode -#include -%End - -public: - QQmlParserStatus(); - virtual ~QQmlParserStatus(); - virtual void classBegin() = 0; - virtual void componentComplete() = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlproperty.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlproperty.sip deleted file mode 100644 index f530597..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlproperty.sip +++ /dev/null @@ -1,130 +0,0 @@ -// qqmlproperty.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlProperty -{ -%TypeHeaderCode -#include -%End - -public: - enum PropertyTypeCategory - { - InvalidCategory, - List, - Object, - Normal, - }; - - enum Type - { - Invalid, - Property, - SignalProperty, - }; - - QQmlProperty(); - QQmlProperty(QObject *); - QQmlProperty(QObject *, QQmlContext *); - QQmlProperty(QObject *, QQmlEngine *); - QQmlProperty(QObject *, const QString &); - QQmlProperty(QObject *, const QString &, QQmlContext *); - QQmlProperty(QObject *, const QString &, QQmlEngine *); - QQmlProperty(const QQmlProperty &); - ~QQmlProperty(); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End - - bool operator==(const QQmlProperty &) const; - QQmlProperty::Type type() const; - bool isValid() const; - bool isProperty() const; - bool isSignalProperty() const; -%If (Qt_6_2_0 -) - bool isBindable() const; -%End - int propertyType() const; - QQmlProperty::PropertyTypeCategory propertyTypeCategory() const; - const char *propertyTypeName() const; -%If (Qt_6_1_0 -) - QMetaType propertyMetaType() const; -%End - QString name() const; - QVariant read() const; - static QVariant read(const QObject *, const QString &); - static QVariant read(const QObject *, const QString &, QQmlContext *); - static QVariant read(const QObject *, const QString &, QQmlEngine *); - bool write(const QVariant &) const; - static bool write(QObject *, const QString &, const QVariant &); - static bool write(QObject *, const QString &, const QVariant &, QQmlContext *); - static bool write(QObject *, const QString &, const QVariant &, QQmlEngine *); - bool reset() const; - bool hasNotifySignal() const; - bool needsNotifySignal() const; - bool connectNotifySignal(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) const; -%MethodCode - QObject *receiver; - QByteArray slot; - - if ((sipError = pyqt6_qtqml_get_connection_parts(a0, 0, "()", false, &receiver, slot)) == sipErrorNone) - { - sipRes = sipCpp->connectNotifySignal(receiver, slot.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - bool connectNotifySignal(QObject *dest, int method) const; - bool isWritable() const; - bool isDesignable() const; - bool isResettable() const; - QObject *object() const; - int index() const; - QMetaProperty property() const; - QMetaMethod method() const; -%If (Qt_6_3_0 -) - void swap(QQmlProperty &other); -%End -}; - -typedef QList QQmlProperties; - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qtqml_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); -extern pyqt6_qtqml_get_connection_parts_t pyqt6_qtqml_get_connection_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtqml_get_connection_parts_t pyqt6_qtqml_get_connection_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtqml_get_connection_parts = (pyqt6_qtqml_get_connection_parts_t)sipImportSymbol("pyqt6_get_connection_parts"); -Q_ASSERT(pyqt6_qtqml_get_connection_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertymap.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertymap.sip deleted file mode 100644 index f06ea0e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertymap.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qqmlpropertymap.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlPropertyMap : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQmlPropertyMap(QObject *parent /TransferThis/ = 0); - virtual ~QQmlPropertyMap(); - QVariant value(const QString &key) const; -%If (Qt_6_1_0 -) - void insert(const QVariantHash &values); -%End - void insert(const QString &key, const QVariant &value); -%If (Qt_6_1_0 -) - void freeze(); -%End - void clear(const QString &key); - QStringList keys() const; - int count() const; - int size() const /__len__/; - bool isEmpty() const; - bool contains(const QString &key) const; - QVariant operator[](const QString &key) const; - -signals: - void valueChanged(const QString &key, const QVariant &value); - -protected: - virtual QVariant updateValue(const QString &key, const QVariant &input); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertyvaluesource.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertyvaluesource.sip deleted file mode 100644 index c32420e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlpropertyvaluesource.sip +++ /dev/null @@ -1,33 +0,0 @@ -// qqmlpropertyvaluesource.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlPropertyValueSource /Mixin,PyQtInterface="org.qt-project.Qt.QQmlPropertyValueSource"/ -{ -%TypeHeaderCode -#include -%End - -public: - QQmlPropertyValueSource(); - virtual ~QQmlPropertyValueSource(); - virtual void setTarget(const QQmlProperty &) = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlscriptstring.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlscriptstring.sip deleted file mode 100644 index ea1071d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQml/qqmlscriptstring.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qqmlscriptstring.sip generated by MetaSIP -// -// This file is part of the QtQml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQmlScriptString -{ -%TypeHeaderCode -#include -%End - -public: - QQmlScriptString(); - QQmlScriptString(const QQmlScriptString &); - ~QQmlScriptString(); - bool isEmpty() const; - bool isUndefinedLiteral() const; - bool isNullLiteral() const; - QString stringLiteral() const; - qreal numberLiteral(bool *ok) const; - bool booleanLiteral(bool *ok) const; - bool operator==(const QQmlScriptString &) const; - bool operator!=(const QQmlScriptString &) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuick.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuick.toml deleted file mode 100644 index f9f81d5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuick.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtQuick. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuickmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuickmod.sip deleted file mode 100644 index ddf516e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/QtQuickmod.sip +++ /dev/null @@ -1,79 +0,0 @@ -// QtQuickmod.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtQuick, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtQml/QtQmlmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qquickframebufferobject.sip -%Include qquickgraphicsconfiguration.sip -%Include qquickgraphicsdevice.sip -%Include qquickimageprovider.sip -%Include qquickitem.sip -%Include qquickitemgrabresult.sip -%Include qquickpainteditem.sip -%Include qquickrendercontrol.sip -%Include qquickrendertarget.sip -%Include qquicktextdocument.sip -%Include qquickview.sip -%Include qquickwindow.sip -%Include qsgflatcolormaterial.sip -%Include qsggeometry.sip -%Include qsgimagenode.sip -%Include qsgmaterial.sip -%Include qsgmaterialshader.sip -%Include qsgmaterialtype.sip -%Include qsgnode.sip -%Include qsgrectanglenode.sip -%Include qsgrendererinterface.sip -%Include qsgrendernode.sip -%Include qsgsimplerectnode.sip -%Include qsgsimpletexturenode.sip -%Include qsgtextnode.sip -%Include qsgtexture.sip -%Include qsgtexture_platform.sip -%Include qsgtexturematerial.sip -%Include qsgtextureprovider.sip -%Include qsgvertexcolormaterial.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickframebufferobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickframebufferobject.sip deleted file mode 100644 index cb1431c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickframebufferobject.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qquickframebufferobject.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QOpenGLFramebufferObject /External/; - -class QQuickFramebufferObject : public QQuickItem /ExportDerived/ -{ -%TypeHeaderCode -#include -%End - -public: - class Renderer /Supertype=PyQt6.sip.wrapper/ - { -%TypeHintCode -try: - from PyQt6.QtOpenGL import QOpenGLFramebufferObject -except ImportError: - pass -%End - -%TypeHeaderCode -#include -%End - - protected: - Renderer(); - virtual ~Renderer(); - virtual void render() = 0; -%If (PyQt_OpenGL) - virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size); -%End - virtual void synchronize(QQuickFramebufferObject *); -%If (PyQt_OpenGL) - QOpenGLFramebufferObject *framebufferObject() const; -%End - void update(); - void invalidateFramebufferObject(); - }; - - QQuickFramebufferObject(QQuickItem *parent /TransferThis/ = 0); - bool textureFollowsItemSize() const; - void setTextureFollowsItemSize(bool follows); - virtual QQuickFramebufferObject::Renderer *createRenderer() const = 0 /Factory/; - -protected: - virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry); - virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); - -signals: - void textureFollowsItemSizeChanged(bool); - -public: - virtual bool isTextureProvider() const; - virtual QSGTextureProvider *textureProvider() const; - virtual void releaseResources(); - bool mirrorVertically() const; - void setMirrorVertically(bool enable); - -signals: - void mirrorVerticallyChanged(bool); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsconfiguration.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsconfiguration.sip deleted file mode 100644 index dc5ea7a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsconfiguration.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qquickgraphicsconfiguration.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickGraphicsConfiguration -{ -%TypeHeaderCode -#include -%End - -public: - QQuickGraphicsConfiguration(); - QQuickGraphicsConfiguration(const QQuickGraphicsConfiguration &other); - ~QQuickGraphicsConfiguration(); - void setDeviceExtensions(const QByteArrayList &extensions); - QByteArrayList deviceExtensions() const; - void setDepthBufferFor2D(bool enable); - bool isDepthBufferEnabledFor2D() const; -%If (Qt_6_1_0 -) - static QByteArrayList preferredInstanceExtensions(); -%End -%If (Qt_6_5_0 -) - void setDebugLayer(bool enable); -%End -%If (Qt_6_5_0 -) - bool isDebugLayerEnabled() const; -%End -%If (Qt_6_5_0 -) - void setDebugMarkers(bool enable); -%End -%If (Qt_6_5_0 -) - bool isDebugMarkersEnabled() const; -%End -%If (Qt_6_5_0 -) - void setPreferSoftwareDevice(bool enable); -%End -%If (Qt_6_5_0 -) - bool prefersSoftwareDevice() const; -%End -%If (Qt_6_5_0 -) - void setAutomaticPipelineCache(bool enable); -%End -%If (Qt_6_5_0 -) - bool isAutomaticPipelineCacheEnabled() const; -%End -%If (Qt_6_5_0 -) - void setPipelineCacheSaveFile(const QString &filename); -%End -%If (Qt_6_5_0 -) - QString pipelineCacheSaveFile() const; -%End -%If (Qt_6_5_0 -) - void setPipelineCacheLoadFile(const QString &filename); -%End -%If (Qt_6_5_0 -) - QString pipelineCacheLoadFile() const; -%End -%If (Qt_6_6_0 -) - void setTimestamps(bool enable); -%End -%If (Qt_6_6_0 -) - bool timestampsEnabled() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsdevice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsdevice.sip deleted file mode 100644 index 46c8054..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickgraphicsdevice.sip +++ /dev/null @@ -1,37 +0,0 @@ -// qquickgraphicsdevice.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickGraphicsDevice -{ -%TypeHeaderCode -#include -%End - -public: - QQuickGraphicsDevice(); - ~QQuickGraphicsDevice(); - QQuickGraphicsDevice(const QQuickGraphicsDevice &other); - bool isNull() const; -%If (PyQt_OpenGL) - static QQuickGraphicsDevice fromOpenGLContext(QOpenGLContext *context); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickimageprovider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickimageprovider.sip deleted file mode 100644 index dca49d7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickimageprovider.sip +++ /dev/null @@ -1,84 +0,0 @@ -// qquickimageprovider.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickTextureFactory : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QQuickTextureFactory(); - virtual ~QQuickTextureFactory(); - virtual QSGTexture *createTexture(QQuickWindow *window) const = 0 /Factory/; - virtual QSize textureSize() const = 0; - virtual int textureByteCount() const = 0; - virtual QImage image() const; - static QQuickTextureFactory *textureFactoryForImage(const QImage &image) /Factory/; -}; - -class QQuickImageProvider : public QQmlImageProviderBase -{ -%TypeHeaderCode -#include -%End - -public: - QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = QQmlImageProviderBase::Flags()); - virtual ~QQuickImageProvider(); - virtual QQmlImageProviderBase::ImageType imageType() const; - virtual QQmlImageProviderBase::Flags flags() const; - virtual QImage requestImage(const QString &id, QSize *size /Out/, const QSize &requestedSize); - virtual QPixmap requestPixmap(const QString &id, QSize *size /Out/, const QSize &requestedSize); - virtual QQuickTextureFactory *requestTexture(const QString &id, QSize *size /Out/, const QSize &requestedSize) /Factory/; -}; - -class QQuickImageResponse : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QQuickImageResponse(); - virtual ~QQuickImageResponse(); - virtual QQuickTextureFactory *textureFactory() const = 0 /Factory/; - virtual QString errorString() const; - -public slots: - virtual void cancel(); - -signals: - void finished(); -}; - -class QQuickAsyncImageProvider : public QQuickImageProvider -{ -%TypeHeaderCode -#include -%End - -public: - QQuickAsyncImageProvider(); - virtual ~QQuickAsyncImageProvider(); - virtual QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) = 0 /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitem.sip deleted file mode 100644 index 0a643cc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitem.sip +++ /dev/null @@ -1,331 +0,0 @@ -// qquickitem.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickItem : public QObject, public QQmlParserStatus /ExportDerived/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Flag /BaseType=Flag/ - { - ItemClipsChildrenToShape, - ItemAcceptsInputMethod, - ItemIsFocusScope, - ItemHasContents, - ItemAcceptsDrops, -%If (Qt_6_3_0 -) - ItemIsViewport, -%End -%If (Qt_6_3_0 -) - ItemObservesViewport, -%End - }; - - typedef QFlags Flags; - - enum ItemChange - { - ItemChildAddedChange, - ItemChildRemovedChange, - ItemSceneChange, - ItemVisibleHasChanged, - ItemParentHasChanged, - ItemOpacityHasChanged, - ItemActiveFocusHasChanged, - ItemRotationHasChanged, - ItemAntialiasingHasChanged, - ItemDevicePixelRatioHasChanged, - ItemEnabledHasChanged, - }; - - struct ItemChangeData - { -%TypeHeaderCode -#include -%End - - ItemChangeData(QQuickItem *v); - ItemChangeData(QQuickWindow *v); - ItemChangeData(qreal v /Constrained/); - ItemChangeData(bool v /Constrained/); - QQuickItem *item; - QQuickWindow *window; - qreal realValue; - bool boolValue; - }; - - enum TransformOrigin - { - TopLeft, - Top, - TopRight, - Left, - Center, - Right, - BottomLeft, - Bottom, - BottomRight, - }; - - explicit QQuickItem(QQuickItem *parent /TransferThis/ = 0); - virtual ~QQuickItem(); - QQuickWindow *window() const; - QQuickItem *parentItem() const; - void setParentItem(QQuickItem *parent); - void stackBefore(const QQuickItem *); - void stackAfter(const QQuickItem *); - QRectF childrenRect(); - QList childItems() const; - bool clip() const; - void setClip(bool); - QString state() const; - void setState(const QString &); - qreal baselineOffset() const; - void setBaselineOffset(qreal); - qreal x() const; - qreal y() const; - void setX(qreal); - void setY(qreal); - qreal width() const; - void setWidth(qreal); - void resetWidth(); - void setImplicitWidth(qreal); - qreal implicitWidth() const; - qreal height() const; - void setHeight(qreal); - void resetHeight(); - void setImplicitHeight(qreal); - qreal implicitHeight() const; - void setSize(const QSizeF &size); - QQuickItem::TransformOrigin transformOrigin() const; - void setTransformOrigin(QQuickItem::TransformOrigin); - qreal z() const; - void setZ(qreal); - qreal rotation() const; - void setRotation(qreal); - qreal scale() const; - void setScale(qreal); - qreal opacity() const; - void setOpacity(qreal); - bool isVisible() const; - void setVisible(bool); - bool isEnabled() const; - void setEnabled(bool); - bool smooth() const; - void setSmooth(bool); - bool antialiasing() const; - void setAntialiasing(bool); - QQuickItem::Flags flags() const; - void setFlag(QQuickItem::Flag flag, bool enabled = true); - void setFlags(QQuickItem::Flags flags); - bool hasActiveFocus() const; - bool hasFocus() const; - void setFocus(bool); - bool isFocusScope() const; - QQuickItem *scopedFocusItem() const; - Qt::MouseButtons acceptedMouseButtons() const; - void setAcceptedMouseButtons(Qt::MouseButtons buttons); - bool acceptHoverEvents() const; - void setAcceptHoverEvents(bool enabled); - QCursor cursor() const; - void setCursor(const QCursor &cursor); - void unsetCursor(); - void grabMouse(); - void ungrabMouse(); - bool keepMouseGrab() const; - void setKeepMouseGrab(bool); - bool filtersChildMouseEvents() const; - void setFiltersChildMouseEvents(bool filter); - void grabTouchPoints(const QList &ids); - void ungrabTouchPoints(); - bool keepTouchGrab() const; - void setKeepTouchGrab(bool); - virtual bool contains(const QPointF &point) const; - QPointF mapToItem(const QQuickItem *item, const QPointF &point) const; - QPointF mapToScene(const QPointF &point) const; - QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const; - QRectF mapRectToScene(const QRectF &rect) const; - QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const; - QPointF mapFromScene(const QPointF &point) const; - QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const; - QRectF mapRectFromScene(const QRectF &rect) const; - void polish(); - void forceActiveFocus(); - QQuickItem *childAt(qreal x, qreal y) const; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - - struct UpdatePaintNodeData - { -%TypeHeaderCode -#include -%End - - QSGTransformNode *transformNode; - - private: - UpdatePaintNodeData(); - }; - - virtual bool isTextureProvider() const; - virtual QSGTextureProvider *textureProvider() const; - -public slots: - void update() /ReleaseGIL/; - -signals: - void childrenRectChanged(const QRectF &); - void baselineOffsetChanged(qreal); - void stateChanged(const QString &); - void focusChanged(bool); - void activeFocusChanged(bool); - void parentChanged(QQuickItem *); - void transformOriginChanged(QQuickItem::TransformOrigin); - void smoothChanged(bool); - void antialiasingChanged(bool); - void clipChanged(bool); - void opacityChanged(); - void enabledChanged(); - void visibleChanged(); - void rotationChanged(); - void scaleChanged(); - void xChanged(); - void yChanged(); - void widthChanged(); - void heightChanged(); - void zChanged(); - void implicitWidthChanged(); - void implicitHeightChanged(); - -protected: - virtual bool event(QEvent *); - bool isComponentComplete() const; - virtual void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &); - void updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput); - bool widthValid() const; - bool heightValid() const; - virtual void classBegin(); - virtual void componentComplete(); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void inputMethodEvent(QInputMethodEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual void mousePressEvent(QMouseEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *event); - virtual void mouseUngrabEvent(); - virtual void touchUngrabEvent(); - virtual void wheelEvent(QWheelEvent *event); - virtual void touchEvent(QTouchEvent *event); - virtual void hoverEnterEvent(QHoverEvent *event); - virtual void hoverMoveEvent(QHoverEvent *event); - virtual void hoverLeaveEvent(QHoverEvent *event); - virtual void dragEnterEvent(QDragEnterEvent *); - virtual void dragMoveEvent(QDragMoveEvent *); - virtual void dragLeaveEvent(QDragLeaveEvent *); - virtual void dropEvent(QDropEvent *); - virtual bool childMouseEventFilter(QQuickItem *, QEvent *); - virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry); - virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); -%VirtualCatcherCode - PyObject *res; - - res = sipCallMethod(&sipIsErr, sipMethod, "DD", - a0, sipType_QSGNode, NULL, - a1, sipType_QQuickItem_UpdatePaintNodeData, NULL); - - if (res) - { - sipParseResult(&sipIsErr, sipMethod, res, "H0", sipType_QSGNode, &sipRes); - - if (!sipIsErr && sipRes && (sipRes->flags() & QSGNode::OwnedByParent)) - sipTransferTo(res, (PyObject *)sipPySelf); - - Py_DECREF(res); - } -%End - - virtual void releaseResources(); - virtual void updatePolish(); - -public: - bool activeFocusOnTab() const; - void setActiveFocusOnTab(bool); - void setFocus(bool focus, Qt::FocusReason reason); - void forceActiveFocus(Qt::FocusReason reason); - QQuickItem *nextItemInFocusChain(bool forward = true); - -signals: - void activeFocusOnTabChanged(bool); - void windowChanged(QQuickWindow *window); - -public: - void resetAntialiasing(); - QQuickItemGrabResult *grabToImage(const QSize &targetSize = QSize()) /Factory/; -%MethodCode - QSharedPointer *grab; - - Py_BEGIN_ALLOW_THREADS - // This will leak but there seems to be no way to detach the object. - grab = new QSharedPointer(sipCpp->grabToImage(*a0)); - Py_END_ALLOW_THREADS - - sipRes = grab->data(); -%End - - bool isAncestorOf(const QQuickItem *child) const; - QPointF mapToGlobal(const QPointF &point) const; - QPointF mapFromGlobal(const QPointF &point) const; - QSizeF size() const; - bool acceptTouchEvents() const; - void setAcceptTouchEvents(bool accept); - QObject *containmentMask() const; - void setContainmentMask(QObject *mask /KeepReference/); - -signals: - void containmentMaskChanged(); - -public: -%If (Qt_6_3_0 -) - QQuickItem *viewportItem() const; -%End -%If (Qt_6_3_0 -) - void ensurePolished(); -%End -%If (Qt_6_3_0 -) - void dumpItemTree() const; -%End -%If (Qt_6_7_0 -) - Qt::FocusPolicy focusPolicy() const; -%End -%If (Qt_6_7_0 -) - void setFocusPolicy(Qt::FocusPolicy policy); -%End - -signals: -%If (Qt_6_7_0 -) - void focusPolicyChanged(Qt::FocusPolicy); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitemgrabresult.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitemgrabresult.sip deleted file mode 100644 index 10acbc3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickitemgrabresult.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qquickitemgrabresult.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickItemGrabResult : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QImage image() const; - QUrl url() const; - bool saveToFile(const QString &fileName) const; -%If (Qt_6_2_0 -) - bool saveToFile(const QUrl &fileName) const; -%End - -protected: - virtual bool event(QEvent *); - -signals: - void ready(); - -private: - QQuickItemGrabResult(QObject *parent = 0); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickpainteditem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickpainteditem.sip deleted file mode 100644 index f81f024..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickpainteditem.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qquickpainteditem.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickPaintedItem : public QQuickItem /ExportDerived/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQuickPaintedItem(QQuickItem *parent /TransferThis/ = 0); - virtual ~QQuickPaintedItem(); - - enum RenderTarget - { - Image, - FramebufferObject, - InvertedYFramebufferObject, - }; - - enum PerformanceHint /BaseType=Flag/ - { - FastFBOResizing, - }; - - typedef QFlags PerformanceHints; - void update(const QRect &rect = QRect()); - bool opaquePainting() const; - void setOpaquePainting(bool opaque); - bool antialiasing() const; - void setAntialiasing(bool enable); - bool mipmap() const; - void setMipmap(bool enable); - QQuickPaintedItem::PerformanceHints performanceHints() const; - void setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true); - void setPerformanceHints(QQuickPaintedItem::PerformanceHints hints); - QRectF contentsBoundingRect() const; - QSize contentsSize() const; - void setContentsSize(const QSize &); - void resetContentsSize(); - qreal contentsScale() const; - void setContentsScale(qreal); - QColor fillColor() const; - void setFillColor(const QColor &); - QQuickPaintedItem::RenderTarget renderTarget() const; - void setRenderTarget(QQuickPaintedItem::RenderTarget target); - virtual void paint(QPainter *painter) = 0; - -signals: - void fillColorChanged(); - void contentsSizeChanged(); - void contentsScaleChanged(); - void renderTargetChanged(); - -protected: - virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); - -public: - virtual bool isTextureProvider() const; - virtual QSGTextureProvider *textureProvider() const; - -protected: - virtual void releaseResources(); - virtual void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &); - -public: - QSize textureSize() const; - void setTextureSize(const QSize &size); - -signals: - void textureSizeChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendercontrol.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendercontrol.sip deleted file mode 100644 index 9d82734..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendercontrol.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qquickrendercontrol.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickRenderControl : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQuickRenderControl(QObject *parent /TransferThis/ = 0); - virtual ~QQuickRenderControl(); - bool initialize(); - void invalidate(); - void polishItems(); - void render(); - bool sync(); - static QWindow *renderWindowFor(QQuickWindow *win, QPoint *offset = 0); - virtual QWindow *renderWindow(QPoint *offset); - void prepareThread(QThread *targetThread); - -signals: - void renderRequested(); - void sceneChanged(); - -public: - void setSamples(int sampleCount); - int samples() const; - void beginFrame(); - void endFrame(); - QQuickWindow *window() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendertarget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendertarget.sip deleted file mode 100644 index fee6306..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickrendertarget.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qquickrendertarget.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickRenderTarget -{ -%TypeHeaderCode -#include -%End - -public: - QQuickRenderTarget(); - ~QQuickRenderTarget(); - QQuickRenderTarget(const QQuickRenderTarget &other); - bool isNull() const; -%If (PyQt_OpenGL) - static QQuickRenderTarget fromOpenGLTexture(uint textureId, const QSize &pixelSize, int sampleCount = 1); -%End -%If (Qt_6_4_0 -) - static QQuickRenderTarget fromOpenGLTexture(uint textureId, uint format, const QSize &pixelSize, int sampleCount = 1); -%End -%If (Qt_6_2_0 -) - static QQuickRenderTarget fromOpenGLRenderBuffer(uint renderbufferId, const QSize &pixelSize, int sampleCount = 1); -%End -%If (Qt_6_4_0 -) - static QQuickRenderTarget fromPaintDevice(QPaintDevice *device); -%End -%If (Qt_6_3_0 -) - qreal devicePixelRatio() const; -%End -%If (Qt_6_3_0 -) - void setDevicePixelRatio(qreal ratio); -%End -%If (Qt_6_4_0 -) - bool mirrorVertically() const; -%End -%If (Qt_6_4_0 -) - void setMirrorVertically(bool enable); -%End -}; - -bool operator==(const QQuickRenderTarget &lhs, const QQuickRenderTarget &rhs); -bool operator!=(const QQuickRenderTarget &lhs, const QQuickRenderTarget &rhs); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquicktextdocument.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquicktextdocument.sip deleted file mode 100644 index dfb3259..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquicktextdocument.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qquicktextdocument.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickTextDocument : public QObject -{ -%TypeHeaderCode -#include -%End - -public: -%If (Qt_6_7_0 -) - - enum class Status - { - Null, - Loading, - Loaded, - Saving, - Saved, - ReadError, - WriteError, - NonLocalFileError, - }; - -%End - QQuickTextDocument(QQuickItem *parent /TransferThis/); - QTextDocument *textDocument() const; -%If (Qt_6_7_0 -) - QUrl source() const; -%End -%If (Qt_6_7_0 -) - void setSource(const QUrl &url); -%End -%If (Qt_6_7_0 -) - bool isModified() const; -%End -%If (Qt_6_7_0 -) - void setModified(bool modified); -%End -%If (Qt_6_7_0 -) - void setTextDocument(QTextDocument *document); -%End -%If (Qt_6_7_0 -) - void save() /ReleaseGIL/; -%End -%If (Qt_6_7_0 -) - void saveAs(const QUrl &url) /ReleaseGIL/; -%End -%If (Qt_6_7_0 -) - QQuickTextDocument::Status status() const; -%End -%If (Qt_6_7_0 -) - QString errorString() const; -%End - -signals: -%If (Qt_6_7_0 -) - void textDocumentChanged(); -%End -%If (Qt_6_7_0 -) - void sourceChanged(); -%End -%If (Qt_6_7_0 -) - void modifiedChanged(); -%End -%If (Qt_6_7_0 -) - void statusChanged(); -%End -%If (Qt_6_7_0 -) - void errorStringChanged(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickview.sip deleted file mode 100644 index 437262d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickview.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qquickview.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickView : public QQuickWindow /ExportDerived/ -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQuickView(QWindow *parent /TransferThis/ = 0); - QQuickView(QQmlEngine *engine, QWindow *parent /TransferThis/); - QQuickView(const QUrl &source, QWindow *parent /TransferThis/ = 0); -%If (Qt_6_7_0 -) - QQuickView(QAnyStringView uri, QAnyStringView typeName, QWindow *parent /TransferThis/ = 0); -%End - virtual ~QQuickView() /ReleaseGIL/; - QUrl source() const; - QQmlEngine *engine() const; - QQmlContext *rootContext() const; - QQuickItem *rootObject() const; - - enum ResizeMode - { - SizeViewToRootObject, - SizeRootObjectToView, - }; - - QQuickView::ResizeMode resizeMode() const; - void setResizeMode(QQuickView::ResizeMode); - - enum Status - { - Null, - Ready, - Loading, - Error, - }; - - QQuickView::Status status() const; - QList errors() const; - QSize initialSize() const; - -public slots: - void setSource(const QUrl &) /ReleaseGIL/; - void setInitialProperties(const QVariantMap &initialProperties); -%If (Qt_6_7_0 -) - void loadFromModule(QAnyStringView uri, QAnyStringView typeName); -%End - -signals: - void statusChanged(QQuickView::Status); - -protected: - virtual void resizeEvent(QResizeEvent *); - virtual void timerEvent(QTimerEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickwindow.sip deleted file mode 100644 index ad1eb9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qquickwindow.sip +++ /dev/null @@ -1,212 +0,0 @@ -// qquickwindow.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickWindow : public QWindow /ExportDerived/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QQuickImageProvider, &sipType_QQuickImageProvider, 10, 1}, - {sipName_QQuickItem, &sipType_QQuickItem, 11, 2}, - {sipName_QQuickImageResponse, &sipType_QQuickImageResponse, -1, 3}, - {sipName_QQuickItemGrabResult, &sipType_QQuickItemGrabResult, -1, 4}, - {sipName_QQuickRenderControl, &sipType_QQuickRenderControl, -1, 5}, - {sipName_QQuickTextDocument, &sipType_QQuickTextDocument, -1, 6}, - {sipName_QQuickTextureFactory, &sipType_QQuickTextureFactory, -1, 7}, - {sipName_QQuickWindow, &sipType_QQuickWindow, 13, 8}, - {sipName_QSGTexture, &sipType_QSGTexture, 14, 9}, - {sipName_QSGTextureProvider, &sipType_QSGTextureProvider, -1, -1}, - {sipName_QQuickAsyncImageProvider, &sipType_QQuickAsyncImageProvider, -1, -1}, - {sipName_QQuickFramebufferObject, &sipType_QQuickFramebufferObject, -1, 12}, - {sipName_QQuickPaintedItem, &sipType_QQuickPaintedItem, -1, -1}, - {sipName_QQuickView, &sipType_QQuickView, -1, -1}, - {sipName_QSGDynamicTexture, &sipType_QSGDynamicTexture, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum CreateTextureOption /BaseType=Flag/ - { - TextureHasAlphaChannel, - TextureHasMipmaps, - TextureOwnsGLTexture, - TextureCanUseAtlas, - TextureIsOpaque, - }; - - typedef QFlags CreateTextureOptions; - explicit QQuickWindow(QWindow *parent /TransferThis/ = 0); - virtual ~QQuickWindow() /ReleaseGIL/; - QQuickItem *contentItem() const; - QQuickItem *activeFocusItem() const; - virtual QObject *focusObject() const; - QQuickItem *mouseGrabberItem() const; - QImage grabWindow() /ReleaseGIL/; - void setRenderTarget(const QQuickRenderTarget &target); - QQuickRenderTarget renderTarget() const; - QQmlIncubationController *incubationController() const; -%If (Qt_6_7_0 -) - QSGTextNode *createTextNode() const /Factory/; -%End - QSGTexture *createTextureFromImage(const QImage &image) const /Factory/; - QSGTexture *createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const /Factory/; - void setColor(const QColor &color); - QColor color() const; - void setPersistentSceneGraph(bool persistent); - bool isPersistentSceneGraph() const; - -signals: - void frameSwapped(); - void sceneGraphInitialized(); - void sceneGraphInvalidated(); - void beforeSynchronizing(); - void beforeRendering(); - void afterRendering(); - void colorChanged(const QColor &); - -public slots: - void update(); - void releaseResources(); - -protected: - virtual void exposeEvent(QExposeEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void showEvent(QShowEvent *); - virtual void hideEvent(QHideEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual bool event(QEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void tabletEvent(QTabletEvent *); - virtual void closeEvent(QCloseEvent *); - -public: - static bool hasDefaultAlphaBuffer(); - static void setDefaultAlphaBuffer(bool useAlpha); - -signals: - void closing(QQuickCloseEvent *close); - void activeFocusItemChanged(); - -public: - enum SceneGraphError - { - ContextNotAvailable, - }; - -signals: - void afterSynchronizing(); - void afterAnimating(); - void sceneGraphAboutToStop(); - void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message); - -public: - enum RenderStage - { - BeforeSynchronizingStage, - AfterSynchronizingStage, - BeforeRenderingStage, - AfterRenderingStage, - AfterSwapStage, - NoStage, - }; - - void scheduleRenderJob(QRunnable *job /Transfer/, QQuickWindow::RenderStage schedule) /ReleaseGIL/; - qreal effectiveDevicePixelRatio() const; - bool isSceneGraphInitialized() const; - QSGRendererInterface *rendererInterface() const; - static void setSceneGraphBackend(const QString &backend); - QSGRectangleNode *createRectangleNode() const /Factory/; - QSGImageNode *createImageNode() const /Factory/; - static QString sceneGraphBackend(); - - enum TextRenderType - { - QtTextRendering, - NativeTextRendering, -%If (Qt_6_7_0 -) - CurveTextRendering, -%End - }; - - static QQuickWindow::TextRenderType textRenderType(); - static void setTextRenderType(QQuickWindow::TextRenderType renderType); - void beginExternalCommands(); - void endExternalCommands(); - -signals: - void beforeRenderPassRecording(); - void afterRenderPassRecording(); - void beforeFrameBegin(); - void afterFrameEnd(); - -public: - void setPersistentGraphics(bool persistent); - bool isPersistentGraphics() const; - static void setGraphicsApi(QSGRendererInterface::GraphicsApi api); - static QSGRendererInterface::GraphicsApi graphicsApi(); - void setGraphicsDevice(const QQuickGraphicsDevice &device); - QQuickGraphicsDevice graphicsDevice() const; - void setGraphicsConfiguration(const QQuickGraphicsConfiguration &config); - QQuickGraphicsConfiguration graphicsConfiguration() const; -}; - -class QQuickCloseEvent; - -%ModuleHeaderCode -#include "qpyquick_api.h" -%End - -%PostInitialisationCode -qpyquick_post_init(); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgflatcolormaterial.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgflatcolormaterial.sip deleted file mode 100644 index a7a760b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgflatcolormaterial.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qsgflatcolormaterial.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGFlatColorMaterial : public QSGMaterial -{ -%TypeHeaderCode -#include -%End - -public: - QSGFlatColorMaterial(); - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const /Factory/; - void setColor(const QColor &color); - const QColor &color() const; - virtual int compare(const QSGMaterial *other) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsggeometry.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsggeometry.sip deleted file mode 100644 index e559fd7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsggeometry.sip +++ /dev/null @@ -1,355 +0,0 @@ -// qsggeometry.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGGeometry /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - struct Attribute - { -%TypeHeaderCode -#include -%End - - int position; - int tupleSize; - int type; - uint isVertexCoordinate; - QSGGeometry::AttributeType attributeType; - static QSGGeometry::Attribute create(int pos, int tupleSize, int primitiveType, bool isPosition = false) /Factory/; - static QSGGeometry::Attribute createWithAttributeType(int pos, int tupleSize, int primitiveType, QSGGeometry::AttributeType attributeType) /Factory/; - }; - - struct AttributeSet /NoDefaultCtors/ - { -%TypeHeaderCode -#include -#include -%End - - AttributeSet(SIP_PYOBJECT attributes /TypeHint="Iterable[QSGGeometry.Attribute]"/, int stride = 0); -%MethodCode - PyObject *iter = PyObject_GetIter(a0); - - if (!iter || PyUnicode_Check(a0)) - { - Py_XDECREF(iter); - PyErr_SetString(PyExc_TypeError, "iterable object expected"); - sipError = sipErrorContinue; - } - else - { - QList attrs; - int stride = 0; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - sipError = sipErrorFail; - - break; - } - - int state, is_err = 0; - QSGGeometry::Attribute *attr; - - attr = reinterpret_cast( - sipForceConvertToType(itm, sipType_QSGGeometry_Attribute, 0, - SIP_NOT_NONE, &state, &is_err)); - - if (is_err) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QSGGeometry.Attribute' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - sipError = sipErrorFail; - - break; - } - - // Calculate the stride if there no explicit one. - if (a1 <= 0) - { - int size; - - switch (attr->type) - { - case QSGGeometry::ByteType: - size = sizeof (qint8); - break; - - case QSGGeometry::DoubleType: - size = sizeof (double); - break; - - case QSGGeometry::FloatType: - size = sizeof (float); - break; - - case QSGGeometry::IntType: - size = sizeof (qint32); - break; - - default: - size = 0; - } - - if (!size) - { - PyErr_Format(PyExc_TypeError, - "index %zd has an unsupported primitive type", - i); - - sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); - Py_DECREF(itm); - sipError = sipErrorFail; - - break; - } - - stride += attr->tupleSize * size; - } - - attrs.append(*attr); - - sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); - Py_DECREF(itm); - } - - Py_DECREF(iter); - - if (sipError == sipErrorNone) - { - if (attrs.isEmpty()) - { - PyErr_SetString(PyExc_TypeError, "no attributes defined"); - sipError = sipErrorFail; - } - else - { - PyObject *bytes = PyBytes_FromStringAndSize( - reinterpret_cast(attrs.data()), - sizeof (QSGGeometry::Attribute) * attrs.size()); - - if (!bytes) - { - sipError = sipErrorFail; - } - else - { - sipCpp = new QSGGeometry::AttributeSet; - - sipCpp->count = attrs.size(); - sipCpp->stride = (a1 > 0 ? a1 : stride); - sipCpp->attributes = reinterpret_cast( - PyBytes_AsString(bytes)); - - sipSetUserObject(sipSelf, bytes); - } - } - } - } -%End - - int count; - int stride; - const QSGGeometry::Attribute *attributes /TypeHint="PyQt6.sip.array[QSGGeometry.Attribute]"/ { -%GetCode - sipPy = sipConvertToTypedArray((void *)sipCpp->attributes, - sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), - sipCpp->count, SIP_READ_ONLY); -%End - -%SetCode - sipErr = 1; - PyErr_SetString(PyExc_ValueError, "array is read-only"); -%End - - }; - }; - - struct Point2D - { -%TypeHeaderCode -#include -%End - - float x; - float y; - void set(float nx, float ny); - }; - - struct TexturedPoint2D - { -%TypeHeaderCode -#include -%End - - float x; - float y; - float tx; - float ty; - void set(float nx, float ny, float ntx, float nty); - }; - - struct ColoredPoint2D - { -%TypeHeaderCode -#include -%End - - float x; - float y; - unsigned char r /PyInt/; - unsigned char g /PyInt/; - unsigned char b /PyInt/; - unsigned char a /PyInt/; - void set(float nx, float ny, uchar nr /PyInt/, uchar ng /PyInt/, uchar nb /PyInt/, uchar na /PyInt/); - }; - - static const QSGGeometry::AttributeSet &defaultAttributes_Point2D() /NoCopy/; - static const QSGGeometry::AttributeSet &defaultAttributes_TexturedPoint2D() /NoCopy/; - static const QSGGeometry::AttributeSet &defaultAttributes_ColoredPoint2D() /NoCopy/; - - enum DataPattern - { - AlwaysUploadPattern, - StreamPattern, - DynamicPattern, - StaticPattern, - }; - - QSGGeometry(const QSGGeometry::AttributeSet &attribs /KeepReference/, int vertexCount, int indexCount = 0, int indexType = QSGGeometry::UnsignedShortType); - virtual ~QSGGeometry(); - void setDrawingMode(unsigned int mode); - unsigned int drawingMode() const; - void allocate(int vertexCount, int indexCount = 0); - int vertexCount() const; - void *vertexData(); - int indexType() const; - int indexCount() const; - void *indexData(); - int attributeCount() const; - SIP_PYOBJECT attributes() const /TypeHint="PyQt6.sip.array[QSGGeometry.Attribute]"/; -%MethodCode - sipRes = sipConvertToTypedArray((void *)sipCpp->attributes(), - sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), - sipCpp->attributeCount(), SIP_READ_ONLY); -%End - - int sizeOfVertex() const; - static void updateRectGeometry(QSGGeometry *g, const QRectF &rect); - static void updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &sourceRect); - void setIndexDataPattern(QSGGeometry::DataPattern p); - QSGGeometry::DataPattern indexDataPattern() const; - void setVertexDataPattern(QSGGeometry::DataPattern p); - QSGGeometry::DataPattern vertexDataPattern() const; - void markIndexDataDirty(); - void markVertexDataDirty(); - float lineWidth() const; - void setLineWidth(float w); - SIP_PYOBJECT indexDataAsUInt() /TypeHint="PyQt6.sip.array[int]"/; -%MethodCode - sipRes = sipConvertToArray(sipCpp->indexDataAsUInt(), "I", - sipCpp->indexCount(), 0); -%End - - SIP_PYOBJECT indexDataAsUShort() /TypeHint="PyQt6.sip.array[int]"/; -%MethodCode - sipRes = sipConvertToArray(sipCpp->indexDataAsUShort(), "H", - sipCpp->indexCount(), 0); -%End - - SIP_PYOBJECT vertexDataAsPoint2D() /TypeHint="PyQt6.sip.array[QSGGeometry.Point2D]"/; -%MethodCode - sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsPoint2D(), - sipType_QSGGeometry_Point2D, "ff", sizeof (QSGGeometry::Point2D), - sipCpp->vertexCount(), 0); -%End - - SIP_PYOBJECT vertexDataAsTexturedPoint2D() /TypeHint="PyQt6.sip.array[QSGGeometry.TexturedPoint2D]"/; -%MethodCode - sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsTexturedPoint2D(), - sipType_QSGGeometry_TexturedPoint2D, "ffff", - sizeof (QSGGeometry::TexturedPoint2D), sipCpp->vertexCount(), 0); -%End - - SIP_PYOBJECT vertexDataAsColoredPoint2D() /TypeHint="PyQt6.sip.array[QSGGeometry.ColoredPoint2D]"/; -%MethodCode - sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsColoredPoint2D(), - sipType_QSGGeometry_ColoredPoint2D, "ffbbbb", - sizeof (QSGGeometry::ColoredPoint2D), sipCpp->vertexCount(), 0); -%End - - int sizeOfIndex() const; - - enum AttributeType - { - UnknownAttribute, - PositionAttribute, - ColorAttribute, - TexCoordAttribute, - TexCoord1Attribute, - TexCoord2Attribute, - }; - - enum DrawingMode /BaseType=IntEnum/ - { - DrawPoints, - DrawLines, - DrawLineLoop, - DrawLineStrip, - DrawTriangles, - DrawTriangleStrip, - DrawTriangleFan, - }; - - enum Type - { - ByteType, - UnsignedByteType, - ShortType, - UnsignedShortType, - IntType, - UnsignedIntType, - FloatType, - Bytes2Type, - Bytes3Type, - Bytes4Type, - DoubleType, - }; - - static void updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect); - -private: - QSGGeometry(const QSGGeometry &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgimagenode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgimagenode.sip deleted file mode 100644 index 7876322..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgimagenode.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qsgimagenode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGImageNode : public QSGGeometryNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSGImageNode(); - virtual void setRect(const QRectF &rect) = 0; - void setRect(qreal x, qreal y, qreal w, qreal h); - virtual QRectF rect() const = 0; - virtual void setSourceRect(const QRectF &r) = 0; - void setSourceRect(qreal x, qreal y, qreal w, qreal h); - virtual QRectF sourceRect() const = 0; - virtual void setTexture(QSGTexture *texture /GetWrapper/) = 0; -%MethodCode - sipCpp->setTexture(a0); - - if (sipCpp->ownsTexture()) - sipTransferTo(a0Wrapper, sipSelf); -%End - - virtual QSGTexture *texture() const = 0; - virtual void setFiltering(QSGTexture::Filtering filtering) = 0; - virtual QSGTexture::Filtering filtering() const = 0; - virtual void setMipmapFiltering(QSGTexture::Filtering filtering) = 0; - virtual QSGTexture::Filtering mipmapFiltering() const = 0; - - enum TextureCoordinatesTransformFlag /BaseType=Flag/ - { - NoTransform, - MirrorHorizontally, - MirrorVertically, - }; - - typedef QFlags TextureCoordinatesTransformMode; - virtual void setTextureCoordinatesTransform(QSGImageNode::TextureCoordinatesTransformMode mode) = 0; - virtual QSGImageNode::TextureCoordinatesTransformMode textureCoordinatesTransform() const = 0; - virtual void setOwnsTexture(bool owns) = 0; - virtual bool ownsTexture() const = 0; - static void rebuildGeometry(QSGGeometry *g, QSGTexture *texture, const QRectF &rect, QRectF sourceRect, QSGImageNode::TextureCoordinatesTransformMode texCoordMode); - virtual void setAnisotropyLevel(QSGTexture::AnisotropyLevel level) = 0; - virtual QSGTexture::AnisotropyLevel anisotropyLevel() const = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterial.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterial.sip deleted file mode 100644 index 05dc5d6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterial.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qsgmaterial.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGMaterial /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Flag /BaseType=Flag/ - { - Blending, - RequiresDeterminant, - RequiresFullMatrixExceptTranslate, - RequiresFullMatrix, -%If (Qt_6_3_0 -) - NoBatching, -%End - CustomCompileStep, - }; - - typedef QFlags Flags; - QSGMaterial(); - virtual ~QSGMaterial(); - virtual QSGMaterialType *type() const = 0; - virtual QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const = 0 /Factory/; - virtual int compare(const QSGMaterial *other) const; - QSGMaterial::Flags flags() const; - void setFlag(QSGMaterial::Flags flags, bool enabled = true); - -private: - QSGMaterial(const QSGMaterial &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialshader.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialshader.sip deleted file mode 100644 index 8bc1b7a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialshader.sip +++ /dev/null @@ -1,165 +0,0 @@ -// qsgmaterialshader.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGMaterialShader -{ -%TypeHeaderCode -#include -%End - -public: - class RenderState - { -%TypeHeaderCode -#include -%End - - public: - enum DirtyState /BaseType=Flag/ - { - DirtyMatrix, - DirtyOpacity, - DirtyCachedMaterialData, - DirtyAll, - }; - - typedef QFlags DirtyStates; - QSGMaterialShader::RenderState::DirtyStates dirtyStates() const; - bool isMatrixDirty() const; - bool isOpacityDirty() const; - float opacity() const; - QMatrix4x4 combinedMatrix() const; - QMatrix4x4 modelViewMatrix() const; - QMatrix4x4 projectionMatrix() const; - QRect viewportRect() const; - QRect deviceRect() const; - float determinant() const; - float devicePixelRatio() const; - QByteArray *uniformData(); - }; - - struct GraphicsPipelineState - { -%TypeHeaderCode -#include -%End - - enum BlendFactor - { - Zero, - One, - SrcColor, - OneMinusSrcColor, - DstColor, - OneMinusDstColor, - SrcAlpha, - OneMinusSrcAlpha, - DstAlpha, - OneMinusDstAlpha, - ConstantColor, - OneMinusConstantColor, - ConstantAlpha, - OneMinusConstantAlpha, - SrcAlphaSaturate, - Src1Color, - OneMinusSrc1Color, - Src1Alpha, - OneMinusSrc1Alpha, - }; - - enum ColorMaskComponent /BaseType=Flag/ - { - R, - G, - B, - A, - }; - - typedef QFlags ColorMask; - - enum CullMode - { - CullNone, - CullFront, - CullBack, - }; - -%If (Qt_6_4_0 -) - - enum PolygonMode - { - Fill, - Line, - }; - -%End - QColor blendConstant; - bool blendEnable; - QSGMaterialShader::GraphicsPipelineState::ColorMask colorWrite; - QSGMaterialShader::GraphicsPipelineState::CullMode cullMode; -%If (Qt_6_5_0 -) - QSGMaterialShader::GraphicsPipelineState::BlendFactor dstAlpha; -%End - QSGMaterialShader::GraphicsPipelineState::BlendFactor dstColor; -%If (Qt_6_4_0 -) - QSGMaterialShader::GraphicsPipelineState::PolygonMode polygonMode; -%End -%If (Qt_6_5_0 -) - bool separateBlendFactors; -%End -%If (Qt_6_5_0 -) - QSGMaterialShader::GraphicsPipelineState::BlendFactor srcAlpha; -%End - QSGMaterialShader::GraphicsPipelineState::BlendFactor srcColor; - }; - - enum Flag /BaseType=Flag/ - { - UpdatesGraphicsPipelineState, - }; - - typedef QFlags Flags; - - enum Stage - { - VertexStage, - FragmentStage, - }; - - QSGMaterialShader(); - virtual ~QSGMaterialShader(); - virtual bool updateUniformData(QSGMaterialShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); - virtual void updateSampledImage(QSGMaterialShader::RenderState &state, int binding, QSGTexture **texture /Out/, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); - virtual bool updateGraphicsPipelineState(QSGMaterialShader::RenderState &state, QSGMaterialShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); - QSGMaterialShader::Flags flags() const; - void setFlag(QSGMaterialShader::Flags flags, bool on = true); - void setFlags(QSGMaterialShader::Flags flags); -%If (Qt_6_4_0 -) - int combinedImageSamplerCount(int binding) const; -%End - -protected: - void setShaderFileName(QSGMaterialShader::Stage stage, const QString &filename); - -private: - QSGMaterialShader(const QSGMaterialShader &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialtype.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialtype.sip deleted file mode 100644 index 11ded79..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgmaterialtype.sip +++ /dev/null @@ -1,28 +0,0 @@ -// qsgmaterialtype.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -struct QSGMaterialType -{ -%TypeHeaderCode -#include -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgnode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgnode.sip deleted file mode 100644 index bbe2f9c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgnode.sip +++ /dev/null @@ -1,335 +0,0 @@ -// qsgnode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGNode /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -%TypeCode -static sipErrorState qsgnode_handle_flags(QSGNode *node, PyObject *self, QSGNode::Flags old_flags) -{ - QSGNode::Flags new_flags = node->flags(); - - if (node->parent()) - { - if ((old_flags & QSGNode::OwnedByParent) != (new_flags & QSGNode::OwnedByParent)) - { - if (old_flags & QSGNode::OwnedByParent) - { - sipTransferBack(self); - } - else - { - PyObject *parent = sipConvertFromType(node->parent(), sipType_QSGNode, 0); - - if (!parent) - return sipErrorFail; - - sipTransferTo(self, parent); - Py_DECREF(parent); - } - } - } - - QSGNode::NodeType ntype = node->type(); - - if (ntype == QSGNode::BasicNodeType || ntype == QSGNode::GeometryNodeType || ntype == QSGNode::ClipNodeType) - { - QSGBasicGeometryNode *bg_node = (QSGBasicGeometryNode *)node; - - if (bg_node->geometry()) - { - if ((old_flags & QSGNode::OwnsGeometry) != (new_flags & QSGNode::OwnsGeometry)) - { - PyObject *geom = sipConvertFromType(bg_node->geometry(), sipType_QSGGeometry, 0); - - if (!geom) - return sipErrorFail; - - if (old_flags & QSGNode::OwnsGeometry) - sipTransferBack(geom); - else - sipTransferTo(geom, self); - - Py_DECREF(geom); - } - } - } - - if (ntype == QSGNode::GeometryNodeType) - { - QSGGeometryNode *g_node = (QSGGeometryNode *)node; - - if (g_node->material()) - { - if ((old_flags & QSGNode::OwnsMaterial) != (new_flags & QSGNode::OwnsMaterial)) - { - PyObject *mat = sipConvertFromType(g_node->material(), sipType_QSGMaterial, 0); - - if (!mat) - return sipErrorFail; - - if (old_flags & QSGNode::OwnsMaterial) - sipTransferBack(mat); - else - sipTransferTo(mat, self); - - Py_DECREF(mat); - } - } - - if (g_node->opaqueMaterial()) - { - if ((old_flags & QSGNode::OwnsOpaqueMaterial) != (new_flags & QSGNode::OwnsOpaqueMaterial)) - { - PyObject *omat = sipConvertFromType(g_node->opaqueMaterial(), sipType_QSGMaterial, 0); - - if (!omat) - return sipErrorFail; - - if (old_flags & QSGNode::OwnsOpaqueMaterial) - sipTransferBack(omat); - else - sipTransferTo(omat, self); - - Py_DECREF(omat); - } - } - } - - return sipErrorNone; -} -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QSGNode::BasicNodeType: - sipType = sipType_QSGBasicGeometryNode; - break; - - case QSGNode::GeometryNodeType: - sipType = sipType_QSGGeometryNode; - break; - - case QSGNode::TransformNodeType: - sipType = sipType_QSGClipNode; - break; - - case QSGNode::ClipNodeType: - sipType = sipType_QSGTransformNode; - break; - - case QSGNode::OpacityNodeType: - sipType = sipType_QSGOpacityNode; - break; - - default: - sipType = 0; - } -%End - -public: - enum NodeType - { - BasicNodeType, - GeometryNodeType, - TransformNodeType, - ClipNodeType, - OpacityNodeType, - }; - - enum Flag /BaseType=Flag/ - { - OwnedByParent, - UsePreprocess, - OwnsGeometry, - OwnsMaterial, - OwnsOpaqueMaterial, - }; - - typedef QFlags Flags; - - enum DirtyStateBit /BaseType=Flag/ - { - DirtyMatrix, - DirtyNodeAdded, - DirtyNodeRemoved, - DirtyGeometry, - DirtyMaterial, - DirtyOpacity, - }; - - typedef QFlags DirtyState; - QSGNode(); - virtual ~QSGNode(); - QSGNode *parent() const; - void removeChildNode(QSGNode *node); - void removeAllChildNodes(); - void prependChildNode(QSGNode *node /GetWrapper/); -%MethodCode - sipCpp->prependChildNode(a0); - - if (a0->flags() & QSGNode::OwnedByParent) - sipTransferTo(a0Wrapper, sipSelf); -%End - - void appendChildNode(QSGNode *node /GetWrapper/); -%MethodCode - sipCpp->appendChildNode(a0); - - if (a0->flags() & QSGNode::OwnedByParent) - sipTransferTo(a0Wrapper, sipSelf); -%End - - void insertChildNodeBefore(QSGNode *node /GetWrapper/, QSGNode *before); -%MethodCode - sipCpp->insertChildNodeBefore(a0, a1); - - if (a0->flags() & QSGNode::OwnedByParent) - sipTransferTo(a0Wrapper, sipSelf); -%End - - void insertChildNodeAfter(QSGNode *node /GetWrapper/, QSGNode *after); -%MethodCode - sipCpp->insertChildNodeAfter(a0, a1); - - if (a0->flags() & QSGNode::OwnedByParent) - sipTransferTo(a0Wrapper, sipSelf); -%End - - int childCount() const /__len__/; - QSGNode *childAtIndex(int i) const; - QSGNode *firstChild() const; - QSGNode *lastChild() const; - QSGNode *nextSibling() const; - QSGNode *previousSibling() const; - QSGNode::NodeType type() const; - void markDirty(QSGNode::DirtyState bits); - virtual bool isSubtreeBlocked() const; - QSGNode::Flags flags() const; - void setFlag(QSGNode::Flag, bool enabled = true); -%MethodCode - QSGNode::Flags old_flags = sipCpp->flags(); - - sipCpp->setFlag(a0, a1); - - sipError = qsgnode_handle_flags(sipCpp, sipSelf, old_flags); -%End - - void setFlags(QSGNode::Flags, bool enabled = true); - virtual void preprocess(); - -private: - QSGNode(const QSGNode &); -}; - -class QSGBasicGeometryNode : public QSGNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSGBasicGeometryNode(); - void setGeometry(QSGGeometry *geometry /GetWrapper/); -%MethodCode - sipCpp->setGeometry(a0); - - if (sipCpp->flags() & QSGNode::OwnsGeometry) - sipTransferTo(a0Wrapper, sipSelf); -%End - - QSGGeometry *geometry(); -}; - -class QSGGeometryNode : public QSGBasicGeometryNode -{ -%TypeHeaderCode -#include -%End - -public: - QSGGeometryNode(); - virtual ~QSGGeometryNode(); - void setMaterial(QSGMaterial *material /GetWrapper/); -%MethodCode - sipCpp->setMaterial(a0); - - if (sipCpp->flags() & QSGNode::OwnsMaterial) - sipTransferTo(a0Wrapper, sipSelf); -%End - - QSGMaterial *material() const; - void setOpaqueMaterial(QSGMaterial *material /GetWrapper/); -%MethodCode - sipCpp->setOpaqueMaterial(a0); - - if (sipCpp->flags() & QSGNode::OwnsOpaqueMaterial) - sipTransferTo(a0Wrapper, sipSelf); -%End - - QSGMaterial *opaqueMaterial() const; -}; - -class QSGClipNode : public QSGBasicGeometryNode -{ -%TypeHeaderCode -#include -%End - -public: - QSGClipNode(); - virtual ~QSGClipNode(); - void setIsRectangular(bool rectHint); - bool isRectangular() const; - void setClipRect(const QRectF &); - QRectF clipRect() const; -}; - -class QSGTransformNode : public QSGNode -{ -%TypeHeaderCode -#include -%End - -public: - QSGTransformNode(); - virtual ~QSGTransformNode(); - void setMatrix(const QMatrix4x4 &matrix); - const QMatrix4x4 &matrix() const; -}; - -class QSGOpacityNode : public QSGNode -{ -%TypeHeaderCode -#include -%End - -public: - QSGOpacityNode(); - virtual ~QSGOpacityNode(); - void setOpacity(qreal opacity); - qreal opacity() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrectanglenode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrectanglenode.sip deleted file mode 100644 index 70f5208..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrectanglenode.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qsgrectanglenode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGRectangleNode : public QSGGeometryNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSGRectangleNode(); - virtual void setRect(const QRectF &rect) = 0; - void setRect(qreal x, qreal y, qreal w, qreal h); - virtual QRectF rect() const = 0; - virtual void setColor(const QColor &color) = 0; - virtual QColor color() const = 0; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendererinterface.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendererinterface.sip deleted file mode 100644 index aabf428..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendererinterface.sip +++ /dev/null @@ -1,116 +0,0 @@ -// qsgrendererinterface.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGRendererInterface /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum GraphicsApi - { - Unknown, - Software, - OpenGL, - OpenVG, - OpenGLRhi, - Direct3D11Rhi, - VulkanRhi, - MetalRhi, - NullRhi, - Direct3D11, - Vulkan, - Metal, -%If (Qt_6_6_0 -) - Direct3D12, -%End - Null, - }; - - enum Resource - { - DeviceResource, - CommandQueueResource, - CommandListResource, - PainterResource, - RhiResource, - PhysicalDeviceResource, - OpenGLContextResource, - DeviceContextResource, - CommandEncoderResource, - VulkanInstanceResource, - RenderPassResource, - RhiSwapchainResource, - RhiRedirectCommandBuffer, - RhiRedirectRenderTarget, -%If (Qt_6_4_0 -) - RedirectPaintDevice, -%End -%If (Qt_6_6_0 -) - GraphicsQueueFamilyIndexResource, -%End -%If (Qt_6_6_0 -) - GraphicsQueueIndexResource, -%End - }; - - enum ShaderType - { - UnknownShadingLanguage, - GLSL, - HLSL, - RhiShader, - }; - - enum ShaderCompilationType /BaseType=Flag/ - { - RuntimeCompilation, - OfflineCompilation, - }; - - typedef QFlags ShaderCompilationTypes; - - enum ShaderSourceType /BaseType=Flag/ - { - ShaderSourceString, - ShaderSourceFile, - ShaderByteCode, - }; - - typedef QFlags ShaderSourceTypes; - virtual ~QSGRendererInterface(); - virtual QSGRendererInterface::GraphicsApi graphicsApi() const = 0; - virtual void *getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const; - virtual void *getResource(QQuickWindow *window, const char *resource) const; - virtual QSGRendererInterface::ShaderType shaderType() const = 0; - virtual QSGRendererInterface::ShaderCompilationTypes shaderCompilationType() const = 0; - virtual QSGRendererInterface::ShaderSourceTypes shaderSourceType() const = 0; - static bool isApiRhiBased(QSGRendererInterface::GraphicsApi api); - - enum RenderMode - { - RenderMode2D, - RenderMode2DNoDepthBuffer, - RenderMode3D, - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendernode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendernode.sip deleted file mode 100644 index e5d87b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgrendernode.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qsgrendernode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGRenderNode : public QSGNode -{ -%TypeHeaderCode -#include -%End - -public: - enum StateFlag /BaseType=Flag/ - { - DepthState, - StencilState, - ScissorState, - ColorState, - BlendState, - CullState, - ViewportState, - RenderTargetState, - }; - - typedef QFlags StateFlags; - - enum RenderingFlag /BaseType=Flag/ - { - BoundedRectRendering, - DepthAwareRendering, - OpaqueRendering, - }; - - typedef QFlags RenderingFlags; - - struct RenderState /NoDefaultCtors/ - { -%TypeHeaderCode -#include -%End - - virtual ~RenderState(); - virtual const QMatrix4x4 *projectionMatrix() const = 0; - virtual QRect scissorRect() const = 0; - virtual bool scissorEnabled() const = 0; - virtual int stencilValue() const = 0; - virtual bool stencilEnabled() const = 0; - virtual const QRegion *clipRegion() const = 0; - virtual void *get(const char *state) const; - }; - - virtual ~QSGRenderNode(); - virtual QSGRenderNode::StateFlags changedStates() const; - virtual void render(const QSGRenderNode::RenderState *state) = 0; - virtual void releaseResources(); - virtual QSGRenderNode::RenderingFlags flags() const; - virtual QRectF rect() const; - const QMatrix4x4 *matrix() const; - const QSGClipNode *clipList() const; - qreal inheritedOpacity() const; - virtual void prepare(); -%If (Qt_6_5_0 -) - const QMatrix4x4 *projectionMatrix() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimplerectnode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimplerectnode.sip deleted file mode 100644 index a3e5821..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimplerectnode.sip +++ /dev/null @@ -1,37 +0,0 @@ -// qsgsimplerectnode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGSimpleRectNode : public QSGGeometryNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QSGSimpleRectNode(const QRectF &rect, const QColor &color); - QSGSimpleRectNode(); - void setRect(const QRectF &rect); - void setRect(qreal x, qreal y, qreal w, qreal h); - QRectF rect() const; - void setColor(const QColor &color); - QColor color() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimpletexturenode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimpletexturenode.sip deleted file mode 100644 index 0f2afe8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgsimpletexturenode.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qsgsimpletexturenode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGSimpleTextureNode : public QSGGeometryNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - QSGSimpleTextureNode(); - virtual ~QSGSimpleTextureNode(); - void setRect(const QRectF &rect); - void setRect(qreal x, qreal y, qreal w, qreal h); - QRectF rect() const; - void setTexture(QSGTexture *texture); - QSGTexture *texture() const; - void setFiltering(QSGTexture::Filtering filtering); - QSGTexture::Filtering filtering() const; - - enum TextureCoordinatesTransformFlag /BaseType=Flag/ - { - NoTransform, - MirrorHorizontally, - MirrorVertically, - }; - - typedef QFlags TextureCoordinatesTransformMode; - void setTextureCoordinatesTransform(QSGSimpleTextureNode::TextureCoordinatesTransformMode mode); - QSGSimpleTextureNode::TextureCoordinatesTransformMode textureCoordinatesTransform() const; - void setOwnsTexture(bool owns); - bool ownsTexture() const; - void setSourceRect(const QRectF &r); - void setSourceRect(qreal x, qreal y, qreal w, qreal h); - QRectF sourceRect() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextnode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextnode.sip deleted file mode 100644 index 3613680..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextnode.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qsgtextnode.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -class QSGTextNode : public QSGTransformNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum RenderType - { - QtRendering, - NativeRendering, - CurveRendering, - }; - - enum TextStyle - { - Normal, - Outline, - Raised, - Sunken, - }; - - virtual ~QSGTextNode(); - void addTextDocument(QPointF position, QTextDocument *document, int selectionStart = -1, int selectionCount = -1); - void addTextLayout(QPointF position, QTextLayout *layout, int selectionStart = -1, int selectionCount = -1, int lineStart = 0, int lineCount = -1); - virtual void setColor(QColor color) = 0; - virtual QColor color() const = 0; - virtual void setTextStyle(QSGTextNode::TextStyle textStyle) = 0; - virtual QSGTextNode::TextStyle textStyle() = 0; - virtual void setStyleColor(QColor styleColor) = 0; - virtual QColor styleColor() const = 0; - virtual void setLinkColor(QColor linkColor) = 0; - virtual QColor linkColor() const = 0; - virtual void setSelectionColor(QColor selectionColor) = 0; - virtual QColor selectionColor() const = 0; - virtual void setSelectionTextColor(QColor selectionTextColor) = 0; - virtual QColor selectionTextColor() const = 0; - virtual void setRenderType(QSGTextNode::RenderType renderType) = 0; - virtual QSGTextNode::RenderType renderType() const = 0; - virtual void setRenderTypeQuality(int renderTypeQuality) = 0; - virtual int renderTypeQuality() const = 0; - virtual void setFiltering(QSGTexture::Filtering) = 0; - virtual QSGTexture::Filtering filtering() const = 0; - virtual void clear() = 0; - virtual void setViewport(const QRectF &viewport) = 0; - virtual QRectF viewport() const = 0; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture.sip deleted file mode 100644 index 37da894..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qsgtexture.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGTexture : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QSGTexture(); - virtual ~QSGTexture(); - - enum WrapMode - { - Repeat, - ClampToEdge, - MirroredRepeat, - }; - - enum Filtering - { - None, - Nearest, - Linear, - }; - - virtual QSize textureSize() const = 0; - virtual bool hasAlphaChannel() const = 0; - virtual bool hasMipmaps() const = 0; - virtual QRectF normalizedTextureSubRect() const; - virtual bool isAtlasTexture() const; - void setMipmapFiltering(QSGTexture::Filtering filter); - QSGTexture::Filtering mipmapFiltering() const; - void setFiltering(QSGTexture::Filtering filter); - QSGTexture::Filtering filtering() const; - void setHorizontalWrapMode(QSGTexture::WrapMode hwrap); - QSGTexture::WrapMode horizontalWrapMode() const; - void setVerticalWrapMode(QSGTexture::WrapMode vwrap); - QSGTexture::WrapMode verticalWrapMode() const; - QRectF convertToNormalizedSourceRect(const QRectF &rect) const; - - enum AnisotropyLevel - { - AnisotropyNone, - Anisotropy2x, - Anisotropy4x, - Anisotropy8x, - Anisotropy16x, - }; - - void setAnisotropyLevel(QSGTexture::AnisotropyLevel level); - QSGTexture::AnisotropyLevel anisotropyLevel() const; - virtual qint64 comparisonKey() const = 0; -}; - -class QSGDynamicTexture : public QSGTexture -{ -%TypeHeaderCode -#include -%End - -public: - QSGDynamicTexture(); - virtual bool updateTexture() = 0; -%If (Qt_6_4_0 -) - virtual ~QSGDynamicTexture(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture_platform.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture_platform.sip deleted file mode 100644 index 3177372..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexture_platform.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qsgtexture_platform.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QNativeInterface -{ -%TypeHeaderCode -#include -%End - -%If (PyQt_OpenGL) - - struct QSGOpenGLTexture /NoDefaultCtors/ - { -%TypeHeaderCode -#include -%End - - protected: - virtual ~QSGOpenGLTexture(); - - public: - virtual GLuint nativeTexture() const = 0; - static QSGTexture *fromNative(GLuint textureId, QQuickWindow *window, const QSize &size, QQuickWindow::CreateTextureOptions options = {}); - }; - -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexturematerial.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexturematerial.sip deleted file mode 100644 index fe19df8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtexturematerial.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qsgtexturematerial.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGOpaqueTextureMaterial : public QSGMaterial -{ -%TypeHeaderCode -#include -%End - -public: - QSGOpaqueTextureMaterial(); - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const /Factory/; - virtual int compare(const QSGMaterial *other) const; - void setTexture(QSGTexture *texture); - QSGTexture *texture() const; - void setMipmapFiltering(QSGTexture::Filtering filtering); - QSGTexture::Filtering mipmapFiltering() const; - void setFiltering(QSGTexture::Filtering filtering); - QSGTexture::Filtering filtering() const; - void setHorizontalWrapMode(QSGTexture::WrapMode mode); - QSGTexture::WrapMode horizontalWrapMode() const; - void setVerticalWrapMode(QSGTexture::WrapMode mode); - QSGTexture::WrapMode verticalWrapMode() const; - void setAnisotropyLevel(QSGTexture::AnisotropyLevel level); - QSGTexture::AnisotropyLevel anisotropyLevel() const; -}; - -class QSGTextureMaterial : public QSGOpaqueTextureMaterial -{ -%TypeHeaderCode -#include -%End - -public: - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextureprovider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextureprovider.sip deleted file mode 100644 index ba83861..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgtextureprovider.sip +++ /dev/null @@ -1,34 +0,0 @@ -// qsgtextureprovider.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGTextureProvider : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - virtual QSGTexture *texture() const = 0 /Factory/; - -signals: - void textureChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgvertexcolormaterial.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgvertexcolormaterial.sip deleted file mode 100644 index ca889b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick/qsgvertexcolormaterial.sip +++ /dev/null @@ -1,36 +0,0 @@ -// qsgvertexcolormaterial.sip generated by MetaSIP -// -// This file is part of the QtQuick Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSGVertexColorMaterial : public QSGMaterial -{ -%TypeHeaderCode -#include -%End - -public: - QSGVertexColorMaterial(); - virtual int compare(const QSGMaterial *other) const; - -protected: - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3D.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3D.toml deleted file mode 100644 index 48b4970..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3D.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtQuick3D. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3Dmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3Dmod.sip deleted file mode 100644 index 8a279db..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/QtQuick3Dmod.sip +++ /dev/null @@ -1,53 +0,0 @@ -// QtQuick3Dmod.sip generated by MetaSIP -// -// This file is part of the QtQuick3D Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtQuick3D, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtQml/QtQmlmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qquick3d.sip -%Include qquick3dgeometry.sip -%Include qquick3dobject.sip -%Include qquick3dtexturedata.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3d.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3d.sip deleted file mode 100644 index 9e950ce..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3d.sip +++ /dev/null @@ -1,31 +0,0 @@ -// qquick3d.sip generated by MetaSIP -// -// This file is part of the QtQuick3D Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuick3D -{ -%TypeHeaderCode -#include -%End - -public: - static QSurfaceFormat idealSurfaceFormat(int samples = -1); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dgeometry.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dgeometry.sip deleted file mode 100644 index cc6b3b2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dgeometry.sip +++ /dev/null @@ -1,167 +0,0 @@ -// qquick3dgeometry.sip generated by MetaSIP -// -// This file is part of the QtQuick3D Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuick3DGeometry : public QQuick3DObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QQuick3DGeometry(QQuick3DObject *parent /TransferThis/ = 0); - virtual ~QQuick3DGeometry(); - - enum class PrimitiveType - { - Points, - LineStrip, - Lines, - TriangleStrip, - TriangleFan, - Triangles, - }; - - struct Attribute - { -%TypeHeaderCode -#include -%End - - enum Semantic - { - IndexSemantic, - PositionSemantic, - NormalSemantic, - TexCoordSemantic, - TangentSemantic, - BinormalSemantic, - JointSemantic, - WeightSemantic, - ColorSemantic, -%If (Qt_6_1_0 -) - TargetPositionSemantic, -%End -%If (Qt_6_1_0 -) - TargetNormalSemantic, -%End -%If (Qt_6_1_0 -) - TargetTangentSemantic, -%End -%If (Qt_6_1_0 -) - TargetBinormalSemantic, -%End -%If (Qt_6_1_0 -) - TexCoord1Semantic, -%End -%If (Qt_6_1_0 -) - TexCoord0Semantic, -%End - }; - - enum ComponentType - { - U16Type, - U32Type, - F32Type, - I32Type, - }; - - QQuick3DGeometry::Attribute::Semantic semantic; - int offset; - QQuick3DGeometry::Attribute::ComponentType componentType; - }; - - int attributeCount() const; - QQuick3DGeometry::Attribute attribute(int index) const; - QQuick3DGeometry::PrimitiveType primitiveType() const; - QVector3D boundsMin() const; - QVector3D boundsMax() const; - int stride() const; - void setVertexData(const QByteArray &data); - void setVertexData(int offset, const QByteArray &data); - void setIndexData(const QByteArray &data); - void setIndexData(int offset, const QByteArray &data); - void setStride(int stride); - void setBounds(const QVector3D &min, const QVector3D &max); - void setPrimitiveType(QQuick3DGeometry::PrimitiveType type); - void addAttribute(QQuick3DGeometry::Attribute::Semantic semantic, int offset, QQuick3DGeometry::Attribute::ComponentType componentType); - void addAttribute(const QQuick3DGeometry::Attribute &att); - void clear(); - QByteArray vertexData() const; - QByteArray indexData() const; -%If (Qt_6_3_0 -) - int subsetCount(int subset) const; -%End -%If (Qt_6_3_0 -) - int subsetCount() const; -%End -%If (Qt_6_3_0 -) - QVector3D subsetBoundsMin(int subset) const; -%End -%If (Qt_6_3_0 -) - QVector3D subsetBoundsMax(int subset) const; -%End -%If (Qt_6_3_0 -) - int subsetOffset(int subset) const; -%End -%If (Qt_6_3_0 -) - QString subsetName(int subset) const; -%End -%If (Qt_6_3_0 -) - void addSubset(int offset, int count, const QVector3D &boundsMin, const QVector3D &boundsMax, const QString &name = {}); -%End -%If (Qt_6_6_0 -) - - struct TargetAttribute - { -%TypeHeaderCode -#include -%End - - quint32 targetId; - QQuick3DGeometry::Attribute attr; - int stride; - }; - -%End -%If (Qt_6_6_0 -) - QByteArray targetData() const; -%End -%If (Qt_6_6_0 -) - void setTargetData(int offset, const QByteArray &data); -%End -%If (Qt_6_6_0 -) - void setTargetData(const QByteArray &data); -%End -%If (Qt_6_6_0 -) - QQuick3DGeometry::TargetAttribute targetAttribute(int index) const; -%End -%If (Qt_6_6_0 -) - int targetAttributeCount() const; -%End -%If (Qt_6_6_0 -) - void addTargetAttribute(const QQuick3DGeometry::TargetAttribute &att); -%End -%If (Qt_6_6_0 -) - void addTargetAttribute(quint32 targetId, QQuick3DGeometry::Attribute::Semantic semantic, int offset, int stride = 0); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dobject.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dobject.sip deleted file mode 100644 index 8b17fc0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dobject.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qquick3dobject.sip generated by MetaSIP -// -// This file is part of the QtQuick3D Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuick3DObject : public QObject, public QQmlParserStatus /Abstract/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QQuick3DObject, &sipType_QQuick3DObject, 1, -1}, - {sipName_QQuick3DGeometry, &sipType_QQuick3DGeometry, -1, 2}, - {sipName_QQuick3DTextureData, &sipType_QQuick3DTextureData, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - explicit QQuick3DObject(QQuick3DObject *parent /TransferThis/ = 0); - virtual ~QQuick3DObject(); - QString state() const; - void setState(const QString &state); - QQuick3DObject *parentItem() const; - -public slots: - void setParentItem(QQuick3DObject *parentItem); - -signals: - void stateChanged(); - -protected: - virtual void classBegin(); - virtual void componentComplete(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dtexturedata.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dtexturedata.sip deleted file mode 100644 index 78a704d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuick3D/qquick3dtexturedata.sip +++ /dev/null @@ -1,87 +0,0 @@ -// qquick3dtexturedata.sip generated by MetaSIP -// -// This file is part of the QtQuick3D Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuick3DTextureData : public QQuick3DObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Format - { - None /PyName=None_/, - RGBA8, - RGBA16F, - RGBA32F, - RGBE8, - R8, - R16, - R16F, - R32F, - BC1, - BC2, - BC3, - BC4, - BC5, - BC6H, - BC7, - DXT1_RGBA, - DXT1_RGB, - DXT3_RGBA, - DXT5_RGBA, - ETC2_RGB8, - ETC2_RGB8A1, - ETC2_RGBA8, - ASTC_4x4, - ASTC_5x4, - ASTC_5x5, - ASTC_6x5, - ASTC_6x6, - ASTC_8x5, - ASTC_8x6, - ASTC_8x8, - ASTC_10x5, - ASTC_10x6, - ASTC_10x8, - ASTC_10x10, - ASTC_12x10, - ASTC_12x12, - }; - - QQuick3DTextureData(QQuick3DObject *parent /TransferThis/ = 0); - virtual ~QQuick3DTextureData(); - const QByteArray textureData() const; - void setTextureData(const QByteArray &data); - QSize size() const; - void setSize(const QSize &size); - QQuick3DTextureData::Format format() const; - void setFormat(QQuick3DTextureData::Format format); - bool hasTransparency() const; - void setHasTransparency(bool hasTransparency); -%If (Qt_6_6_0 -) - int depth() const; -%End -%If (Qt_6_6_0 -) - void setDepth(int depth); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgets.toml deleted file mode 100644 index ff07a8a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtQuickWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip deleted file mode 100644 index b0c10ee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip +++ /dev/null @@ -1,52 +0,0 @@ -// QtQuickWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtQuickWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtQuickWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtQml/QtQmlmod.sip -%Import QtQuick/QtQuickmod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qquickwidget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/qquickwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/qquickwidget.sip deleted file mode 100644 index 9bf85e0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtQuickWidgets/qquickwidget.sip +++ /dev/null @@ -1,102 +0,0 @@ -// qquickwidget.sip generated by MetaSIP -// -// This file is part of the QtQuickWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QQuickWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - sipType = (sipCpp->inherits(sipName_QQuickWidget) ? sipType_QQuickWidget : 0); -%End - -public: - explicit QQuickWidget(QWidget *parent /TransferThis/ = 0); - QQuickWidget(QQmlEngine *engine, QWidget *parent /TransferThis/); - QQuickWidget(const QUrl &source, QWidget *parent /TransferThis/ = 0); - virtual ~QQuickWidget(); - QUrl source() const; - QQmlEngine *engine() const; - QQmlContext *rootContext() const; - QQuickItem *rootObject() const; - - enum ResizeMode - { - SizeViewToRootObject, - SizeRootObjectToView, - }; - - QQuickWidget::ResizeMode resizeMode() const; - void setResizeMode(QQuickWidget::ResizeMode); - - enum Status - { - Null, - Ready, - Loading, - Error, - }; - - QQuickWidget::Status status() const; - QList errors() const; - virtual QSize sizeHint() const; - QSize initialSize() const; - void setFormat(const QSurfaceFormat &format); - QSurfaceFormat format() const; - -public slots: - void setSource(const QUrl &) /ReleaseGIL/; - -signals: - void statusChanged(QQuickWidget::Status); - void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message); - -protected: - virtual void resizeEvent(QResizeEvent *); - virtual void timerEvent(QTimerEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void showEvent(QShowEvent *); - virtual void hideEvent(QHideEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual bool event(QEvent *); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void dragEnterEvent(QDragEnterEvent *); - virtual void dragMoveEvent(QDragMoveEvent *); - virtual void dragLeaveEvent(QDragLeaveEvent *); - virtual void dropEvent(QDropEvent *); - virtual void paintEvent(QPaintEvent *event); - -public: - QImage grabFramebuffer() const; - void setClearColor(const QColor &color); - QQuickWindow *quickWindow() const; - -protected: - virtual bool focusNextPrevChild(bool next); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjects.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjects.toml deleted file mode 100644 index 0a6f24b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjects.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtRemoteObjects. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip deleted file mode 100644 index c984ab0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip +++ /dev/null @@ -1,54 +0,0 @@ -// QtRemoteObjectsmod.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtRemoteObjects, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtNetwork/QtNetworkmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qtremoteobjectglobal.sip -%Include qremoteobjectabstractitemmodelreplica.sip -%Include qremoteobjectdynamicreplica.sip -%Include qremoteobjectnode.sip -%Include qremoteobjectregistry.sip -%Include qremoteobjectreplica.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip deleted file mode 100644 index c202579..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qremoteobjectabstractitemmodelreplica.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAbstractItemModelReplica : public QAbstractItemModel /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QAbstractItemModelReplica(); - QItemSelectionModel *selectionModel() const; - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QModelIndex parent(const QModelIndex &index) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - QList availableRoles() const; - virtual QHash roleNames() const; - bool isInitialized() const; - bool hasData(const QModelIndex &index, int role) const; - size_t rootCacheSize() const; - void setRootCacheSize(size_t rootCacheSize); - -signals: - void initialized(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip deleted file mode 100644 index 4502563..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qremoteobjectdynamicreplica.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QRemoteObjectDynamicReplica : public QRemoteObjectReplica -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QRemoteObjectDynamicReplica(); - -private: - QRemoteObjectDynamicReplica(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectnode.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectnode.sip deleted file mode 100644 index aeadaa1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectnode.sip +++ /dev/null @@ -1,199 +0,0 @@ -// qremoteobjectnode.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QRemoteObjectAbstractPersistedStore : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QRemoteObjectAbstractPersistedStore(QObject *parent /TransferThis/ = 0); - virtual ~QRemoteObjectAbstractPersistedStore(); - virtual void saveProperties(const QString &repName, const QByteArray &repSig, const QVariantList &values) = 0; - virtual QVariantList restoreProperties(const QString &repName, const QByteArray &repSig) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QRemoteObjectNode : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAbstractItemModelReplica, &sipType_QAbstractItemModelReplica, -1, 1}, - {sipName_QRemoteObjectAbstractPersistedStore, &sipType_QRemoteObjectAbstractPersistedStore, -1, 2}, - {sipName_QRemoteObjectReplica, &sipType_QRemoteObjectReplica, 4, 3}, - {sipName_QRemoteObjectNode, &sipType_QRemoteObjectNode, 6, -1}, - {sipName_QRemoteObjectDynamicReplica, &sipType_QRemoteObjectDynamicReplica, -1, 5}, - {sipName_QRemoteObjectRegistry, &sipType_QRemoteObjectRegistry, -1, -1}, - {sipName_QRemoteObjectHostBase, &sipType_QRemoteObjectHostBase, 7, -1}, - {sipName_QRemoteObjectHost, &sipType_QRemoteObjectHost, -1, 8}, - {sipName_QRemoteObjectRegistryHost, &sipType_QRemoteObjectRegistryHost, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum ErrorCode - { - NoError, - RegistryNotAcquired, - RegistryAlreadyHosted, - NodeIsNoServer, - ServerAlreadyCreated, - UnintendedRegistryHosting, - OperationNotValidOnClientNode, - SourceNotRegistered, - MissingObjectName, - HostUrlInvalid, - ProtocolMismatch, - ListenFailed, -%If (Qt_6_7_0 -) - SocketAccessError, -%End - }; - - QRemoteObjectNode(QObject *parent /TransferThis/ = 0); - QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent /TransferThis/ = 0); - virtual ~QRemoteObjectNode(); - bool connectToNode(const QUrl &address); - void addClientSideConnection(QIODevice *ioDevice); - virtual void setName(const QString &name); - QStringList instances(QStringView typeName) const; - QRemoteObjectDynamicReplica *acquireDynamic(const QString &name) /Factory/; - QAbstractItemModelReplica *acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList &rolesHint = {}); - QUrl registryUrl() const; - virtual bool setRegistryUrl(const QUrl ®istryAddress); - bool waitForRegistry(int timeout = 30000) /ReleaseGIL/; - const QRemoteObjectRegistry *registry() const; - QRemoteObjectAbstractPersistedStore *persistedStore() const; - void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore); - QRemoteObjectNode::ErrorCode lastError() const; - int heartbeatInterval() const; - void setHeartbeatInterval(int interval); - -signals: - void remoteObjectAdded(const QRemoteObjectSourceLocation &); - void remoteObjectRemoved(const QRemoteObjectSourceLocation &); - void error(QRemoteObjectNode::ErrorCode errorCode); - void heartbeatIntervalChanged(int heartbeatInterval); - -protected: - virtual void timerEvent(QTimerEvent *); -}; - -%End -%If (Qt_6_2_0 -) - -class QRemoteObjectHostBase : public QRemoteObjectNode /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum AllowedSchemas - { - BuiltInSchemasOnly, - AllowExternalRegistration, - }; - - virtual ~QRemoteObjectHostBase(); - virtual void setName(const QString &name); - bool enableRemoting(QObject *object, const QString &name = QString()); - bool enableRemoting(QAbstractItemModel *model, const QString &name, const QList roles, QItemSelectionModel *selectionModel = 0); - bool disableRemoting(QObject *remoteObject); - void addHostSideConnection(QIODevice *ioDevice); - bool proxy(const QUrl ®istryUrl, const QUrl &hostUrl /TypeHintValue="QUrl()"/ = {}); - bool reverseProxy(); -}; - -%End -%If (Qt_6_2_0 -) - -class QRemoteObjectHost : public QRemoteObjectHostBase -{ -%TypeHeaderCode -#include -%End - -public: - QRemoteObjectHost(QObject *parent /TransferThis/ = 0); - QRemoteObjectHost(const QUrl &address, const QUrl ®istryAddress = QUrl(), QRemoteObjectHostBase::AllowedSchemas allowedSchemas = QRemoteObjectHostBase::BuiltInSchemasOnly, QObject *parent /TransferThis/ = 0); - QRemoteObjectHost(const QUrl &address, QObject *parent /TransferThis/); - virtual ~QRemoteObjectHost(); - virtual QUrl hostUrl() const; - virtual bool setHostUrl(const QUrl &hostAddress, QRemoteObjectHostBase::AllowedSchemas allowedSchemas = QRemoteObjectHostBase::BuiltInSchemasOnly); - -signals: - void hostUrlChanged(); - -public: -%If (Qt_6_7_0 -) - static void setLocalServerOptions(QLocalServer::SocketOptions options); -%End -}; - -%End -%If (Qt_6_2_0 -) - -class QRemoteObjectRegistryHost : public QRemoteObjectHostBase -{ -%TypeHeaderCode -#include -%End - -public: - QRemoteObjectRegistryHost(const QUrl ®istryAddress = QUrl(), QObject *parent /TransferThis/ = 0); - virtual ~QRemoteObjectRegistryHost(); - virtual bool setRegistryUrl(const QUrl ®istryUrl); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectregistry.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectregistry.sip deleted file mode 100644 index d842d8f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectregistry.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qremoteobjectregistry.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QRemoteObjectRegistry : public QRemoteObjectReplica -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QRemoteObjectRegistry(); - QRemoteObjectSourceLocations sourceLocations() const; - -signals: - void remoteObjectAdded(const QRemoteObjectSourceLocation &entry); - void remoteObjectRemoved(const QRemoteObjectSourceLocation &entry); - -private: - explicit QRemoteObjectRegistry(QObject *parent = 0); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectreplica.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectreplica.sip deleted file mode 100644 index 9b65518..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qremoteobjectreplica.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qremoteobjectreplica.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QRemoteObjectReplica : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum State - { - Uninitialized, - Default, - Valid, - Suspect, - SignatureMismatch, - }; - - virtual ~QRemoteObjectReplica(); - bool isReplicaValid() const; - bool waitForSource(int timeout = 30000) /ReleaseGIL/; - bool isInitialized() const; - QRemoteObjectReplica::State state() const; - QRemoteObjectNode *node() const; - virtual void setNode(QRemoteObjectNode *node); - -signals: - void initialized(); - void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState); - void notified(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qtremoteobjectglobal.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qtremoteobjectglobal.sip deleted file mode 100644 index 852bccd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtRemoteObjects/qtremoteobjectglobal.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qtremoteobjectglobal.sip generated by MetaSIP -// -// This file is part of the QtRemoteObjects Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -struct QRemoteObjectSourceLocationInfo -{ -%TypeHeaderCode -#include -%End - - QRemoteObjectSourceLocationInfo(); - QRemoteObjectSourceLocationInfo(const QString &typeName_, const QUrl &hostUrl_); - bool operator==(const QRemoteObjectSourceLocationInfo &other) const; - bool operator!=(const QRemoteObjectSourceLocationInfo &other) const; - QString typeName; - QUrl hostUrl; -}; - -%End -%If (Qt_6_2_0 -) -QDataStream &operator<<(QDataStream &stream, const QRemoteObjectSourceLocationInfo &info) /ReleaseGIL/; -%End -%If (Qt_6_2_0 -) -QDataStream &operator>>(QDataStream &stream, QRemoteObjectSourceLocationInfo &info /Constrained/) /ReleaseGIL/; -%End -%If (Qt_6_2_0 -) -typedef std::pair QRemoteObjectSourceLocation; -%End -%If (Qt_6_2_0 -) -typedef QHash QRemoteObjectSourceLocations; -%End -%If (Qt_6_2_0 -) - -namespace QtRemoteObjects /PyQtNoQMetaObject/ -{ -%TypeHeaderCode -#include -%End - - enum InitialAction - { - FetchRootSize, - PrefetchData, - }; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensors.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensors.toml deleted file mode 100644 index cde4cc9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensors.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSensors. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensorsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensorsmod.sip deleted file mode 100644 index ce8d418..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/QtSensorsmod.sip +++ /dev/null @@ -1,64 +0,0 @@ -// QtSensorsmod.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSensors, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qaccelerometer.sip -%Include qambientlightsensor.sip -%Include qambienttemperaturesensor.sip -%Include qcompass.sip -%Include qgyroscope.sip -%Include qhumiditysensor.sip -%Include qirproximitysensor.sip -%Include qlidsensor.sip -%Include qlightsensor.sip -%Include qmagnetometer.sip -%Include qorientationsensor.sip -%Include qpressuresensor.sip -%Include qproximitysensor.sip -%Include qrotationsensor.sip -%Include qsensor.sip -%Include qtapsensor.sip -%Include qtiltsensor.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qaccelerometer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qaccelerometer.sip deleted file mode 100644 index d2a3d77..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qaccelerometer.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qaccelerometer.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAccelerometerReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal x() const; - void setX(qreal x); - qreal y() const; - void setY(qreal y); - qreal z() const; - void setZ(qreal z); -}; - -%End -%If (Qt_6_2_0 -) - -class QAccelerometerFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QAccelerometerReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QAccelerometer : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAccelerometer(QObject *parent /TransferThis/ = 0); - virtual ~QAccelerometer(); - - enum AccelerationMode - { - Combined, - Gravity, - User, - }; - - QAccelerometer::AccelerationMode accelerationMode() const; - void setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode); - QAccelerometerReading *reading() const; - -signals: - void accelerationModeChanged(QAccelerometer::AccelerationMode accelerationMode /ScopesStripped=1/); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambientlightsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambientlightsensor.sip deleted file mode 100644 index 56bbfeb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambientlightsensor.sip +++ /dev/null @@ -1,74 +0,0 @@ -// qambientlightsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAmbientLightReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum LightLevel - { - Undefined, - Dark, - Twilight, - Light, - Bright, - Sunny, - }; - - QAmbientLightReading::LightLevel lightLevel() const; - void setLightLevel(QAmbientLightReading::LightLevel lightLevel); -}; - -%End -%If (Qt_6_2_0 -) - -class QAmbientLightFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QAmbientLightReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QAmbientLightSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAmbientLightSensor(QObject *parent /TransferThis/ = 0); - virtual ~QAmbientLightSensor(); - QAmbientLightReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambienttemperaturesensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambienttemperaturesensor.sip deleted file mode 100644 index cc23c65..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qambienttemperaturesensor.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qambienttemperaturesensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QAmbientTemperatureReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal temperature() const; - void setTemperature(qreal temperature); -}; - -%End -%If (Qt_6_2_0 -) - -class QAmbientTemperatureFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QAmbientTemperatureReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QAmbientTemperatureSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAmbientTemperatureSensor(QObject *parent /TransferThis/ = 0); - virtual ~QAmbientTemperatureSensor(); - QAmbientTemperatureReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qcompass.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qcompass.sip deleted file mode 100644 index 0877c9a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qcompass.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qcompass.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QCompassReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal azimuth() const; - void setAzimuth(qreal azimuth); - qreal calibrationLevel() const; - void setCalibrationLevel(qreal calibrationLevel); -}; - -%End -%If (Qt_6_2_0 -) - -class QCompassFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QCompassReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QCompass : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QCompass(QObject *parent /TransferThis/ = 0); - virtual ~QCompass(); - QCompassReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qgyroscope.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qgyroscope.sip deleted file mode 100644 index 6d92033..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qgyroscope.sip +++ /dev/null @@ -1,68 +0,0 @@ -// qgyroscope.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QGyroscopeReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal x() const; - void setX(qreal x); - qreal y() const; - void setY(qreal y); - qreal z() const; - void setZ(qreal z); -}; - -%End -%If (Qt_6_2_0 -) - -class QGyroscopeFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QGyroscopeReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QGyroscope : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGyroscope(QObject *parent /TransferThis/ = 0); - virtual ~QGyroscope(); - QGyroscopeReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qhumiditysensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qhumiditysensor.sip deleted file mode 100644 index d606456..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qhumiditysensor.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qhumiditysensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QHumidityReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal relativeHumidity() const; - void setRelativeHumidity(qreal percent); - qreal absoluteHumidity() const; - void setAbsoluteHumidity(qreal value); -}; - -%End -%If (Qt_6_2_0 -) - -class QHumidityFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QHumidityReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QHumiditySensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QHumiditySensor(QObject *parent /TransferThis/ = 0); - virtual ~QHumiditySensor(); - QHumidityReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qirproximitysensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qirproximitysensor.sip deleted file mode 100644 index 1dd9bf2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qirproximitysensor.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qirproximitysensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QIRProximityReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal reflectance() const; - void setReflectance(qreal reflectance); -}; - -%End -%If (Qt_6_2_0 -) - -class QIRProximityFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QIRProximityReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QIRProximitySensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QIRProximitySensor(QObject *parent /TransferThis/ = 0); - virtual ~QIRProximitySensor(); - QIRProximityReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlidsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlidsensor.sip deleted file mode 100644 index d1cbbec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlidsensor.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qlidsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLidReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - bool backLidClosed() const; - void setBackLidClosed(bool closed); - bool frontLidClosed() const; - void setFrontLidClosed(bool closed); - -signals: - void backLidChanged(bool closed); - void frontLidChanged(bool closed); -}; - -%End -%If (Qt_6_2_0 -) - -class QLidFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QLidReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QLidSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QLidSensor(QObject *parent /TransferThis/ = 0); - virtual ~QLidSensor(); - QLidReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlightsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlightsensor.sip deleted file mode 100644 index d4b9042..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qlightsensor.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qlightsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QLightReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal lux() const; - void setLux(qreal lux); -}; - -%End -%If (Qt_6_2_0 -) - -class QLightFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QLightReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QLightSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QLightSensor(QObject *parent /TransferThis/ = 0); - virtual ~QLightSensor(); - QLightReading *reading() const; - qreal fieldOfView() const; - void setFieldOfView(qreal fieldOfView); - -signals: - void fieldOfViewChanged(qreal fieldOfView); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qmagnetometer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qmagnetometer.sip deleted file mode 100644 index e0d3fb1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qmagnetometer.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qmagnetometer.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMagnetometerReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal x() const; - void setX(qreal x); - qreal y() const; - void setY(qreal y); - qreal z() const; - void setZ(qreal z); - qreal calibrationLevel() const; - void setCalibrationLevel(qreal calibrationLevel); -}; - -%End -%If (Qt_6_2_0 -) - -class QMagnetometerFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QMagnetometerReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QMagnetometer : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QMagnetometer(QObject *parent /TransferThis/ = 0); - virtual ~QMagnetometer(); - QMagnetometerReading *reading() const; - bool returnGeoValues() const; - void setReturnGeoValues(bool returnGeoValues); - -signals: - void returnGeoValuesChanged(bool returnGeoValues); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qorientationsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qorientationsensor.sip deleted file mode 100644 index 22eb670..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qorientationsensor.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qorientationsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QOrientationReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Orientation - { - Undefined, - TopUp, - TopDown, - LeftUp, - RightUp, - FaceUp, - FaceDown, - }; - - QOrientationReading::Orientation orientation() const; - void setOrientation(QOrientationReading::Orientation orientation); -}; - -%End -%If (Qt_6_2_0 -) - -class QOrientationFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QOrientationReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QOrientationSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QOrientationSensor(QObject *parent /TransferThis/ = 0); - virtual ~QOrientationSensor(); - QOrientationReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qpressuresensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qpressuresensor.sip deleted file mode 100644 index b9f9df5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qpressuresensor.sip +++ /dev/null @@ -1,66 +0,0 @@ -// qpressuresensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QPressureReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal pressure() const; - void setPressure(qreal pressure); - qreal temperature() const; - void setTemperature(qreal temperature); -}; - -%End -%If (Qt_6_2_0 -) - -class QPressureFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QPressureReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QPressureSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPressureSensor(QObject *parent /TransferThis/ = 0); - virtual ~QPressureSensor(); - QPressureReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qproximitysensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qproximitysensor.sip deleted file mode 100644 index 6c1aabd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qproximitysensor.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qproximitysensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QProximityReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - bool close() const; - void setClose(bool close); -}; - -%End -%If (Qt_6_2_0 -) - -class QProximityFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QProximityReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QProximitySensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QProximitySensor(QObject *parent /TransferThis/ = 0); - virtual ~QProximitySensor(); - QProximityReading *reading() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qrotationsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qrotationsensor.sip deleted file mode 100644 index 0a15665..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qrotationsensor.sip +++ /dev/null @@ -1,71 +0,0 @@ -// qrotationsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QRotationReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal x() const; - qreal y() const; - qreal z() const; - void setFromEuler(qreal x, qreal y, qreal z); -}; - -%End -%If (Qt_6_2_0 -) - -class QRotationFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QRotationReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QRotationSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QRotationSensor(QObject *parent /TransferThis/ = 0); - virtual ~QRotationSensor(); - QRotationReading *reading() const; - bool hasZ() const; - void setHasZ(bool hasZ); - -signals: - void hasZChanged(bool hasZ); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qsensor.sip deleted file mode 100644 index b09cdca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qsensor.sip +++ /dev/null @@ -1,234 +0,0 @@ -// qsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -struct qoutputrange -{ -%TypeHeaderCode -#include -%End - - qreal minimum; - qreal maximum; - qreal accuracy; -}; - -%End -%If (Qt_6_2_0 -) -typedef QList qoutputrangelist; -%End -%If (Qt_6_2_0 -) - -class QSensorReading : public QObject /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSensorReading(); - quint64 timestamp() const; - void setTimestamp(quint64 timestamp); - int valueCount() const; - QVariant value(int index) const; -}; - -%End -%If (Qt_6_2_0 -) - -class QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QSensorReading *reading) = 0; - -protected: - QSensorFilter(); - virtual ~QSensorFilter(); -}; - -%End -%If (Qt_6_2_0 -) - -class QSensor : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QSensor, &sipType_QSensor, 2, 1}, - {sipName_QSensorReading, &sipType_QSensorReading, 18, -1}, - {sipName_QAccelerometer, &sipType_QAccelerometer, -1, 3}, - {sipName_QAmbientLightSensor, &sipType_QAmbientLightSensor, -1, 4}, - {sipName_QAmbientTemperatureSensor, &sipType_QAmbientTemperatureSensor, -1, 5}, - {sipName_QCompass, &sipType_QCompass, -1, 6}, - {sipName_QGyroscope, &sipType_QGyroscope, -1, 7}, - {sipName_QHumiditySensor, &sipType_QHumiditySensor, -1, 8}, - {sipName_QIRProximitySensor, &sipType_QIRProximitySensor, -1, 9}, - {sipName_QLidSensor, &sipType_QLidSensor, -1, 10}, - {sipName_QLightSensor, &sipType_QLightSensor, -1, 11}, - {sipName_QMagnetometer, &sipType_QMagnetometer, -1, 12}, - {sipName_QOrientationSensor, &sipType_QOrientationSensor, -1, 13}, - {sipName_QPressureSensor, &sipType_QPressureSensor, -1, 14}, - {sipName_QProximitySensor, &sipType_QProximitySensor, -1, 15}, - {sipName_QRotationSensor, &sipType_QRotationSensor, -1, 16}, - {sipName_QTapSensor, &sipType_QTapSensor, -1, 17}, - {sipName_QTiltSensor, &sipType_QTiltSensor, -1, -1}, - {sipName_QAccelerometerReading, &sipType_QAccelerometerReading, -1, 19}, - {sipName_QAmbientLightReading, &sipType_QAmbientLightReading, -1, 20}, - {sipName_QAmbientTemperatureReading, &sipType_QAmbientTemperatureReading, -1, 21}, - {sipName_QCompassReading, &sipType_QCompassReading, -1, 22}, - {sipName_QGyroscopeReading, &sipType_QGyroscopeReading, -1, 23}, - {sipName_QHumidityReading, &sipType_QHumidityReading, -1, 24}, - {sipName_QIRProximityReading, &sipType_QIRProximityReading, -1, 25}, - {sipName_QLidReading, &sipType_QLidReading, -1, 26}, - {sipName_QLightReading, &sipType_QLightReading, -1, 27}, - {sipName_QMagnetometerReading, &sipType_QMagnetometerReading, -1, 28}, - {sipName_QOrientationReading, &sipType_QOrientationReading, -1, 29}, - {sipName_QPressureReading, &sipType_QPressureReading, -1, 30}, - {sipName_QProximityReading, &sipType_QProximityReading, -1, 31}, - {sipName_QRotationReading, &sipType_QRotationReading, -1, 32}, - {sipName_QTapReading, &sipType_QTapReading, -1, 33}, - {sipName_QTiltReading, &sipType_QTiltReading, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum Feature - { - Buffering, - AlwaysOn, - GeoValues, - FieldOfView, - AccelerationMode, - SkipDuplicates, - AxesOrientation, - PressureSensorTemperature, - }; - - enum AxesOrientationMode - { - FixedOrientation, - AutomaticOrientation, - UserOrientation, - }; - - QSensor(const QByteArray &type, QObject *parent /TransferThis/ = 0); - virtual ~QSensor(); - QByteArray identifier() const; - void setIdentifier(const QByteArray &identifier); - QByteArray type() const; - bool connectToBackend(); - bool isConnectedToBackend() const; - bool isBusy() const; - void setActive(bool active); - bool isActive() const; - bool isAlwaysOn() const; - void setAlwaysOn(bool alwaysOn); - bool skipDuplicates() const; - void setSkipDuplicates(bool skipDuplicates); - qrangelist availableDataRates() const; - int dataRate() const; - void setDataRate(int rate); - qoutputrangelist outputRanges() const; - int outputRange() const; - void setOutputRange(int index); - QString description() const; - int error() const; - void addFilter(QSensorFilter *filter); - void removeFilter(QSensorFilter *filter); - QList filters() const; - QSensorReading *reading() const; - static QList sensorTypes(); - static QList sensorsForType(const QByteArray &type); - static QByteArray defaultSensorForType(const QByteArray &type); - bool isFeatureSupported(QSensor::Feature feature) const; - QSensor::AxesOrientationMode axesOrientationMode() const; - void setAxesOrientationMode(QSensor::AxesOrientationMode axesOrientationMode); - int currentOrientation() const; - void setCurrentOrientation(int currentOrientation); - int userOrientation() const; - void setUserOrientation(int userOrientation); - int maxBufferSize() const; - void setMaxBufferSize(int maxBufferSize); - int efficientBufferSize() const; - void setEfficientBufferSize(int efficientBufferSize); - int bufferSize() const; - void setBufferSize(int bufferSize); - -public slots: - bool start(); - void stop(); - -signals: - void busyChanged(); - void activeChanged(); - void readingChanged(); - void sensorError(int error); - void availableSensorsChanged(); - void alwaysOnChanged(); - void dataRateChanged(); - void skipDuplicatesChanged(bool skipDuplicates); - void axesOrientationModeChanged(QSensor::AxesOrientationMode axesOrientationMode /ScopesStripped=1/); - void currentOrientationChanged(int currentOrientation); - void userOrientationChanged(int userOrientation); - void maxBufferSizeChanged(int maxBufferSize); - void efficientBufferSizeChanged(int efficientBufferSize); - void bufferSizeChanged(int bufferSize); - void identifierChanged(); -}; - -%End -%If (Qt_6_2_0 -) -typedef std::pair qrange; -%End -%If (Qt_6_2_0 -) -typedef QList> qrangelist; -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtapsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtapsensor.sip deleted file mode 100644 index 89177f2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtapsensor.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qtapsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QTapReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum TapDirection - { - Undefined, - X, - Y, - Z, - X_Pos, - Y_Pos, - Z_Pos, - X_Neg, - Y_Neg, - Z_Neg, - X_Both, - Y_Both, - Z_Both, - }; - - QTapReading::TapDirection tapDirection() const; - void setTapDirection(QTapReading::TapDirection tapDirection); - bool isDoubleTap() const; - void setDoubleTap(bool doubleTap); -}; - -%End -%If (Qt_6_2_0 -) - -class QTapFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QTapReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QTapSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTapSensor(QObject *parent /TransferThis/ = 0); - virtual ~QTapSensor(); - QTapReading *reading() const; - bool returnDoubleTapEvents() const; - void setReturnDoubleTapEvents(bool returnDoubleTapEvents); - -signals: - void returnDoubleTapEventsChanged(bool returnDoubleTapEvents); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtiltsensor.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtiltsensor.sip deleted file mode 100644 index 34bf3b9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSensors/qtiltsensor.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qtiltsensor.sip generated by MetaSIP -// -// This file is part of the QtSensors Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QTiltReading : public QSensorReading /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - qreal yRotation() const; - void setYRotation(qreal y); - qreal xRotation() const; - void setXRotation(qreal x); -}; - -%End -%If (Qt_6_2_0 -) - -class QTiltFilter : public QSensorFilter -{ -%TypeHeaderCode -#include -%End - -public: - virtual bool filter(QTiltReading *reading) = 0; -}; - -%End -%If (Qt_6_2_0 -) - -class QTiltSensor : public QSensor -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTiltSensor(QObject *parent /TransferThis/ = 0); - virtual ~QTiltSensor(); - QTiltReading *reading() const; - void calibrate(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPort.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPort.toml deleted file mode 100644 index 15e0823..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPort.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSerialPort. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPortmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPortmod.sip deleted file mode 100644 index f1c6fe6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/QtSerialPortmod.sip +++ /dev/null @@ -1,49 +0,0 @@ -// QtSerialPortmod.sip generated by MetaSIP -// -// This file is part of the QtSerialPort Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSerialPort, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qserialport.sip -%Include qserialportinfo.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialport.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialport.sip deleted file mode 100644 index 4eb4173..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialport.sip +++ /dev/null @@ -1,282 +0,0 @@ -// qserialport.sip generated by MetaSIP -// -// This file is part of the QtSerialPort Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QSerialPort : public QIODevice -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QSerialPort, &sipType_QSerialPort, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum Direction /BaseType=Flag/ - { - Input, - Output, - AllDirections, - }; - - typedef QFlags Directions; - - enum BaudRate - { - Baud1200, - Baud2400, - Baud4800, - Baud9600, - Baud19200, - Baud38400, - Baud57600, - Baud115200, - }; - - enum DataBits - { - Data5, - Data6, - Data7, - Data8, - }; - - enum Parity - { - NoParity, - EvenParity, - OddParity, - SpaceParity, - MarkParity, - }; - - enum StopBits - { - OneStop, - OneAndHalfStop, - TwoStop, - }; - - enum FlowControl - { - NoFlowControl, - HardwareControl, - SoftwareControl, - }; - - enum PinoutSignal /BaseType=Flag/ - { - NoSignal, - DataTerminalReadySignal, - DataCarrierDetectSignal, - DataSetReadySignal, - RingIndicatorSignal, - RequestToSendSignal, - ClearToSendSignal, - SecondaryTransmittedDataSignal, - SecondaryReceivedDataSignal, - }; - - typedef QFlags PinoutSignals; - - enum SerialPortError - { - NoError, - DeviceNotFoundError, - PermissionError, - OpenError, - WriteError, - ReadError, - ResourceError, - UnsupportedOperationError, - TimeoutError, - NotOpenError, - UnknownError, - }; - - explicit QSerialPort(QObject *parent /TransferThis/ = 0); - QSerialPort(const QString &name, QObject *parent /TransferThis/ = 0); - QSerialPort(const QSerialPortInfo &info, QObject *parent /TransferThis/ = 0); - virtual ~QSerialPort(); - void setPortName(const QString &name); - QString portName() const; - void setPort(const QSerialPortInfo &info); - virtual bool open(QIODeviceBase::OpenMode mode) /ReleaseGIL/; - virtual void close() /ReleaseGIL/; - bool setBaudRate(qint32 baudRate, QSerialPort::Directions dir = QSerialPort::AllDirections); - qint32 baudRate(QSerialPort::Directions dir = QSerialPort::AllDirections) const; - bool setDataBits(QSerialPort::DataBits dataBits); - QSerialPort::DataBits dataBits() const; - bool setParity(QSerialPort::Parity parity); - QSerialPort::Parity parity() const; - bool setStopBits(QSerialPort::StopBits stopBits); - QSerialPort::StopBits stopBits() const; - bool setFlowControl(QSerialPort::FlowControl flow); - QSerialPort::FlowControl flowControl() const; - bool setDataTerminalReady(bool set); - bool isDataTerminalReady(); - bool setRequestToSend(bool set); - bool isRequestToSend(); - QSerialPort::PinoutSignals pinoutSignals(); - bool flush() /ReleaseGIL/; - bool clear(QSerialPort::Directions dir = QSerialPort::AllDirections); - QSerialPort::SerialPortError error() const; - void clearError(); - qint64 readBufferSize() const; - void setReadBufferSize(qint64 size); - virtual bool isSequential() const; - virtual qint64 bytesAvailable() const; - virtual qint64 bytesToWrite() const; - virtual bool canReadLine() const; - virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; - virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; - bool setBreakEnabled(bool enabled = true); - -signals: - void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions); - void dataBitsChanged(QSerialPort::DataBits dataBits); - void parityChanged(QSerialPort::Parity parity); - void stopBitsChanged(QSerialPort::StopBits stopBits); - void flowControlChanged(QSerialPort::FlowControl flow); - void dataTerminalReadyChanged(bool set); - void requestToSendChanged(bool set); - -protected: - virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QSerialPort::readData(s, a0) : sipCpp->readData(s, a0); - #else - len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="bytes",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; -%MethodCode - // Return the data read or None if there was an error. - if (a0 < 0) - { - PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); - sipIsErr = 1; - } - else - { - char *s = new char[a0]; - qint64 len; - - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - len = sipSelfWasArg ? sipCpp->QSerialPort::readLineData(s, a0) : sipCpp->readLineData(s, a0); - #else - len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); - #endif - Py_END_ALLOW_THREADS - - if (len < 0) - { - Py_INCREF(Py_None); - sipRes = Py_None; - } - else - { - sipRes = PyBytes_FromStringAndSize(s, len); - - if (!sipRes) - sipIsErr = 1; - } - - delete[] s; - } -%End - - virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/; - -public: -%If (Windows) - void *handle() const; -%End -%If (Android || Linux || iOS || macOS || WebAssembly) - int handle() const; -%End - bool isBreakEnabled() const; - -signals: - void breakEnabledChanged(bool set); - void errorOccurred(QSerialPort::SerialPortError error); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialportinfo.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialportinfo.sip deleted file mode 100644 index d0d7968..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSerialPort/qserialportinfo.sip +++ /dev/null @@ -1,52 +0,0 @@ -// qserialportinfo.sip generated by MetaSIP -// -// This file is part of the QtSerialPort Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QSerialPortInfo -{ -%TypeHeaderCode -#include -%End - -public: - QSerialPortInfo(); - explicit QSerialPortInfo(const QSerialPort &port); - explicit QSerialPortInfo(const QString &name); - QSerialPortInfo(const QSerialPortInfo &other); - ~QSerialPortInfo(); - void swap(QSerialPortInfo &other /Constrained/); - QString portName() const; - QString systemLocation() const; - QString description() const; - QString manufacturer() const; - quint16 vendorIdentifier() const; - quint16 productIdentifier() const; - bool hasVendorIdentifier() const; - bool hasProductIdentifier() const; - static QList standardBaudRates(); - static QList availablePorts(); - bool isNull() const; - QString serialNumber() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudio.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudio.toml deleted file mode 100644 index da26fb4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudio.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSpatialAudio. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudiomod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudiomod.sip deleted file mode 100644 index 8b31f9b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/QtSpatialAudiomod.sip +++ /dev/null @@ -1,53 +0,0 @@ -// QtSpatialAudiomod.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSpatialAudio, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtMultimedia/QtMultimediamod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qambientsound.sip -%Include qaudioengine.sip -%Include qaudiolistener.sip -%Include qaudioroom.sip -%Include qspatialsound.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qambientsound.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qambientsound.sip deleted file mode 100644 index 31b5854..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qambientsound.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qambientsound.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QAmbientSound : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Loops - { - Infinite, - Once, - }; - - explicit QAmbientSound(QAudioEngine *engine); - virtual ~QAmbientSound(); - void setSource(const QUrl &url); - QUrl source() const; - int loops() const; - void setLoops(int loops); - bool autoPlay() const; - void setAutoPlay(bool autoPlay); - void setVolume(float volume); - float volume() const; - QAudioEngine *engine() const; - -signals: - void sourceChanged(); - void loopsChanged(); - void autoPlayChanged(); - void volumeChanged(); - -public slots: - void play(); - void pause(); - void stop(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioengine.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioengine.sip deleted file mode 100644 index 5b99a75..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioengine.sip +++ /dev/null @@ -1,105 +0,0 @@ -// qaudioengine.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QAudioEngine : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QAmbientSound, &sipType_QAmbientSound, -1, 1}, - {sipName_QAudioEngine, &sipType_QAudioEngine, -1, 2}, - {sipName_QAudioListener, &sipType_QAudioListener, -1, 3}, - {sipName_QAudioRoom, &sipType_QAudioRoom, -1, 4}, - {sipName_QSpatialSound, &sipType_QSpatialSound, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum OutputMode - { - Surround, - Stereo, - Headphone, - }; - - QAudioEngine(); - explicit QAudioEngine(QObject *parent /TransferThis/); - QAudioEngine(int sampleRate, QObject *parent /TransferThis/ = 0); - virtual ~QAudioEngine(); - void setOutputMode(QAudioEngine::OutputMode mode); - QAudioEngine::OutputMode outputMode() const; - int sampleRate() const; - void setOutputDevice(const QAudioDevice &device); - QAudioDevice outputDevice() const; - void setMasterVolume(float volume); - float masterVolume() const; - void setPaused(bool paused); - bool paused() const; - void setRoomEffectsEnabled(bool enabled); - bool roomEffectsEnabled() const; - static const float DistanceScaleCentimeter; - static const float DistanceScaleMeter; - void setDistanceScale(float scale); - float distanceScale() const; - -signals: - void outputModeChanged(); - void outputDeviceChanged(); - void masterVolumeChanged(); - void pausedChanged(); - void distanceScaleChanged(); - -public slots: - void start(); - void stop(); - void pause(); - void resume(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudiolistener.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudiolistener.sip deleted file mode 100644 index 138c790..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudiolistener.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qaudiolistener.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QAudioListener : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAudioListener(QAudioEngine *engine); - virtual ~QAudioListener(); - void setPosition(QVector3D pos); - QVector3D position() const; - void setRotation(const QQuaternion &q); - QQuaternion rotation() const; - QAudioEngine *engine() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioroom.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioroom.sip deleted file mode 100644 index a25deef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qaudioroom.sip +++ /dev/null @@ -1,100 +0,0 @@ -// qaudioroom.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QAudioRoom : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum Material - { - Transparent, - AcousticCeilingTiles, - BrickBare, - BrickPainted, - ConcreteBlockCoarse, - ConcreteBlockPainted, - CurtainHeavy, - FiberGlassInsulation, - GlassThin, - GlassThick, - Grass, - LinoleumOnConcrete, - Marble, - Metal, - ParquetOnConcrete, - PlasterRough, - PlasterSmooth, - PlywoodPanel, - PolishedConcreteOrTile, - Sheetrock, - WaterOrIceSurface, - WoodCeiling, - WoodPanel, - UniformMaterial, - }; - - enum Wall - { - LeftWall, - RightWall, - Floor, - Ceiling, - FrontWall, - BackWall, - }; - - explicit QAudioRoom(QAudioEngine *engine); - virtual ~QAudioRoom(); - void setPosition(QVector3D pos); - QVector3D position() const; - void setDimensions(QVector3D dim); - QVector3D dimensions() const; - void setRotation(const QQuaternion &q); - QQuaternion rotation() const; - void setWallMaterial(QAudioRoom::Wall wall, QAudioRoom::Material material); - QAudioRoom::Material wallMaterial(QAudioRoom::Wall wall) const; - void setReflectionGain(float factor); - float reflectionGain() const; - void setReverbGain(float factor); - float reverbGain() const; - void setReverbTime(float factor); - float reverbTime() const; - void setReverbBrightness(float factor); - float reverbBrightness() const; - -signals: - void positionChanged(); - void dimensionsChanged(); - void rotationChanged(); - void wallsChanged(); - void reflectionGainChanged(); - void reverbGainChanged(); - void reverbTimeChanged(); - void reverbBrightnessChanged(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qspatialsound.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qspatialsound.sip deleted file mode 100644 index 4c3ce66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSpatialAudio/qspatialsound.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qspatialsound.sip generated by MetaSIP -// -// This file is part of the QtSpatialAudio Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_5_0 -) - -class QSpatialSound : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum class DistanceModel - { - Logarithmic, - Linear, - ManualAttenuation, - }; - - enum Loops - { - Infinite, - Once, - }; - - explicit QSpatialSound(QAudioEngine *engine); - virtual ~QSpatialSound(); - void setSource(const QUrl &url); - QUrl source() const; - int loops() const; - void setLoops(int loops); - bool autoPlay() const; - void setAutoPlay(bool autoPlay); - void setPosition(QVector3D pos); - QVector3D position() const; - void setRotation(const QQuaternion &q); - QQuaternion rotation() const; - void setVolume(float volume); - float volume() const; - void setDistanceModel(QSpatialSound::DistanceModel model); - QSpatialSound::DistanceModel distanceModel() const; - void setSize(float size); - float size() const; - void setDistanceCutoff(float cutoff); - float distanceCutoff() const; - void setManualAttenuation(float attenuation); - float manualAttenuation() const; - void setOcclusionIntensity(float occlusion); - float occlusionIntensity() const; - void setDirectivity(float alpha); - float directivity() const; - void setDirectivityOrder(float alpha); - float directivityOrder() const; - void setNearFieldGain(float gain); - float nearFieldGain() const; - QAudioEngine *engine() const; - -signals: - void sourceChanged(); - void loopsChanged(); - void autoPlayChanged(); - void positionChanged(); - void rotationChanged(); - void volumeChanged(); - void distanceModelChanged(); - void sizeChanged(); - void distanceCutoffChanged(); - void manualAttenuationChanged(); - void occlusionIntensityChanged(); - void directivityChanged(); - void directivityOrderChanged(); - void nearFieldGainChanged(); - -public slots: - void play(); - void pause(); - void stop(); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSql.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSql.toml deleted file mode 100644 index dcb4fe2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSql.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSql. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSqlmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSqlmod.sip deleted file mode 100644 index 628f2a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/QtSqlmod.sip +++ /dev/null @@ -1,61 +0,0 @@ -// QtSqlmod.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSql, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qsqldatabase.sip -%Include qsqldriver.sip -%Include qsqlerror.sip -%Include qsqlfield.sip -%Include qsqlindex.sip -%Include qsqlquery.sip -%Include qsqlquerymodel.sip -%Include qsqlrecord.sip -%Include qsqlrelationaldelegate.sip -%Include qsqlrelationaltablemodel.sip -%Include qsqlresult.sip -%Include qsqltablemodel.sip -%Include qtsqlglobal.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldatabase.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldatabase.sip deleted file mode 100644 index 917e26c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldatabase.sip +++ /dev/null @@ -1,92 +0,0 @@ -// qsqldatabase.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlDriverCreatorBase /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSqlDriverCreatorBase(); - virtual QSqlDriver *createObject() const = 0 /Factory/; -}; - -class QSqlDatabase -{ -%TypeHeaderCode -#include -%End - -public: - QSqlDatabase(); - QSqlDatabase(const QSqlDatabase &other); - ~QSqlDatabase(); - bool open() /ReleaseGIL/; - bool open(const QString &user, const QString &password) /ReleaseGIL/; - void close(); - bool isOpen() const; - bool isOpenError() const; - QStringList tables(QSql::TableType type = QSql::Tables) const; - QSqlIndex primaryIndex(const QString &tablename) const; - QSqlRecord record(const QString &tablename) const; - QSqlQuery exec(const QString &query = QString()) const /ReleaseGIL/; - QSqlError lastError() const; - bool isValid() const; - bool transaction() /ReleaseGIL/; - bool commit() /ReleaseGIL/; - bool rollback() /ReleaseGIL/; - void setDatabaseName(const QString &name); - void setUserName(const QString &name); - void setPassword(const QString &password); - void setHostName(const QString &host); - void setPort(int p); - void setConnectOptions(const QString &options = QString()); - QString databaseName() const; - QString userName() const; - QString password() const; - QString hostName() const; - QString driverName() const; - int port() const; - QString connectOptions() const; - QString connectionName() const; - QSqlDriver *driver() const; - static QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); - static QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); - static QSqlDatabase cloneDatabase(const QSqlDatabase &other, const QString &connectionName); - static QSqlDatabase cloneDatabase(const QString &other, const QString &connectionName); - static QSqlDatabase database(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection), bool open = true); - static void removeDatabase(const QString &connectionName); - static bool contains(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); - static QStringList drivers(); - static QStringList connectionNames(); - static void registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator /Transfer/); - static bool isDriverAvailable(const QString &name); - -protected: - explicit QSqlDatabase(const QString &type); - explicit QSqlDatabase(QSqlDriver *driver); - -public: - void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); - QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldriver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldriver.sip deleted file mode 100644 index a7cf372..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqldriver.sip +++ /dev/null @@ -1,159 +0,0 @@ -// qsqldriver.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlDriver : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QSqlQueryModel, &sipType_QSqlQueryModel, 3, 1}, - {sipName_QSqlRelationalDelegate, &sipType_QSqlRelationalDelegate, -1, 2}, - {sipName_QSqlDriver, &sipType_QSqlDriver, -1, -1}, - {sipName_QSqlTableModel, &sipType_QSqlTableModel, 4, -1}, - {sipName_QSqlRelationalTableModel, &sipType_QSqlRelationalTableModel, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum DriverFeature - { - Transactions, - QuerySize, - BLOB, - Unicode, - PreparedQueries, - NamedPlaceholders, - PositionalPlaceholders, - LastInsertId, - BatchOperations, - SimpleLocking, - LowPrecisionNumbers, - EventNotifications, - FinishQuery, - MultipleResultSets, - }; - - enum StatementType - { - WhereStatement, - SelectStatement, - UpdateStatement, - InsertStatement, - DeleteStatement, - }; - - enum IdentifierType - { - FieldName, - TableName, - }; - - explicit QSqlDriver(QObject *parent /TransferThis/ = 0); - virtual ~QSqlDriver(); - virtual bool isOpen() const; - bool isOpenError() const; - virtual bool beginTransaction() /ReleaseGIL/; - virtual bool commitTransaction() /ReleaseGIL/; - virtual bool rollbackTransaction() /ReleaseGIL/; - virtual QStringList tables(QSql::TableType tableType) const; - virtual QSqlIndex primaryIndex(const QString &tableName) const; - virtual QSqlRecord record(const QString &tableName) const; - virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const; - virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const; - virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const; - QSqlError lastError() const; - virtual QVariant handle() const; - virtual bool hasFeature(QSqlDriver::DriverFeature f) const = 0; - virtual void close() = 0; - virtual QSqlResult *createResult() const = 0 /Factory/; - virtual bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0 /ReleaseGIL/; - -protected: - virtual void setOpen(bool o); - virtual void setOpenError(bool e); - virtual void setLastError(const QSqlError &e); - -public: - virtual bool subscribeToNotification(const QString &name); - virtual bool unsubscribeFromNotification(const QString &name); - virtual QStringList subscribedToNotifications() const; - - enum NotificationSource - { - UnknownSource, - SelfSource, - OtherSource, - }; - -signals: - void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload); - -public: - virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const; - virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const; - void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); - QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; - - enum DbmsType - { - UnknownDbms, - MSSqlServer, - MySqlServer, - PostgreSQL, - Oracle, - Sybase, - SQLite, - Interbase, - DB2, -%If (Qt_6_6_0 -) - MimerSQL, -%End - }; - - QSqlDriver::DbmsType dbmsType() const; - virtual int maximumIdentifierLength(QSqlDriver::IdentifierType type) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlerror.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlerror.sip deleted file mode 100644 index 537d4c6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlerror.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qsqlerror.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlError -{ -%TypeHeaderCode -#include -%End - -public: - enum ErrorType - { - NoError, - ConnectionError, - StatementError, - TransactionError, - UnknownError, - }; - - QSqlError(const QString &driverText = QString(), const QString &databaseText = QString(), QSqlError::ErrorType type = QSqlError::NoError, const QString &errorCode = QString()); - QSqlError(const QSqlError &other); - ~QSqlError(); - QString driverText() const; - QString databaseText() const; - QSqlError::ErrorType type() const; - QString text() const; - bool isValid() const; - bool operator==(const QSqlError &other) const; - bool operator!=(const QSqlError &other) const; - QString nativeErrorCode() const; - void swap(QSqlError &other /Constrained/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlfield.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlfield.sip deleted file mode 100644 index 2d68b5b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlfield.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qsqlfield.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlField -{ -%TypeHeaderCode -#include -%End - -public: - enum RequiredStatus - { - Unknown, - Optional, - Required, - }; - - QSqlField(const QString &fieldName = QString(), QMetaType type = QMetaType(), const QString &tableName = QString()); - QSqlField(const QSqlField &other); - bool operator==(const QSqlField &other) const; - bool operator!=(const QSqlField &other) const; - ~QSqlField(); - void setValue(const QVariant &value); - QVariant value() const; - void setName(const QString &name); - QString name() const; - bool isNull() const; - void setReadOnly(bool readOnly); - bool isReadOnly() const; - void clear(); - bool isAutoValue() const; - void setRequiredStatus(QSqlField::RequiredStatus status); - void setRequired(bool required); - void setLength(int fieldLength); - void setPrecision(int precision); - void setDefaultValue(const QVariant &value); - void setSqlType(int type); - void setGenerated(bool gen); - void setAutoValue(bool autoVal); - QSqlField::RequiredStatus requiredStatus() const; - int length() const; - int precision() const; - QVariant defaultValue() const; - int typeID() const; - bool isGenerated() const; - bool isValid() const; - void setTableName(const QString &tableName); - QString tableName() const; - QMetaType metaType() const; - void setMetaType(QMetaType type); -%If (Qt_6_6_0 -) - void swap(QSqlField &other /Constrained/); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlindex.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlindex.sip deleted file mode 100644 index 9754e57..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlindex.sip +++ /dev/null @@ -1,44 +0,0 @@ -// qsqlindex.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlIndex : public QSqlRecord -{ -%TypeHeaderCode -#include -%End - -public: - QSqlIndex(const QString &cursorName = QString(), const QString &name = QString()); - QSqlIndex(const QSqlIndex &other); - ~QSqlIndex(); - void setCursorName(const QString &cursorName); - QString cursorName() const; - void setName(const QString &name); - QString name() const; - void append(const QSqlField &field); - void append(const QSqlField &field, bool desc); - bool isDescending(int i) const; - void setDescending(int i, bool desc); -%If (Qt_6_6_0 -) - void swap(QSqlIndex &other /Constrained/); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquery.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquery.sip deleted file mode 100644 index fa1e5be..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquery.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qsqlquery.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlQuery -{ -%TypeHeaderCode -#include -%End - -public: - enum BatchExecutionMode - { - ValuesAsRows, - ValuesAsColumns, - }; - - explicit QSqlQuery(const QSqlDatabase &db); - QSqlQuery(const QString &query = QString(), const QSqlDatabase &db = QSqlDatabase()) /ReleaseGIL/; - explicit QSqlQuery(QSqlResult *r); - QSqlQuery(const QSqlQuery &other); - ~QSqlQuery(); - bool isValid() const; - bool isActive() const; - bool isNull(int field) const; - bool isNull(const QString &name) const; - int at() const; - QString lastQuery() const; - int numRowsAffected() const; - QSqlError lastError() const; - bool isSelect() const; - int size() const; - const QSqlDriver *driver() const; - const QSqlResult *result() const; - bool isForwardOnly() const; - QSqlRecord record() const; - void setForwardOnly(bool forward); - bool exec(const QString &query) /ReleaseGIL/; - QVariant value(int i) const; - QVariant value(const QString &name) const; - bool seek(int index, bool relative = false) /ReleaseGIL/; - bool next() /ReleaseGIL/; - bool previous() /ReleaseGIL/; - bool first() /ReleaseGIL/; - bool last() /ReleaseGIL/; - void clear() /ReleaseGIL/; - bool exec() /ReleaseGIL/; - bool execBatch(QSqlQuery::BatchExecutionMode mode = QSqlQuery::ValuesAsRows); - bool prepare(const QString &query) /ReleaseGIL/; - void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type = QSql::In); - void bindValue(int pos, const QVariant &val, QSql::ParamType type = QSql::In); - void addBindValue(const QVariant &val, QSql::ParamType type = QSql::In); - QVariant boundValue(const QString &placeholder) const; - QVariant boundValue(int pos) const; - QVariantList boundValues() const; - QString executedQuery() const; - QVariant lastInsertId() const; - void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); - QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; - void finish(); - bool nextResult(); -%If (Qt_6_2_0 -) - void swap(QSqlQuery &other /Constrained/); -%End -%If (Qt_6_6_0 -) - QStringList boundValueNames() const; -%End -%If (Qt_6_6_0 -) - QString boundValueName(int pos) const; -%End -%If (Qt_6_7_0 -) - void setPositionalBindingEnabled(bool enable); -%End -%If (Qt_6_7_0 -) - bool isPositionalBindingEnabled() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquerymodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquerymodel.sip deleted file mode 100644 index b2308c7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlquerymodel.sip +++ /dev/null @@ -1,75 +0,0 @@ -// qsqlquerymodel.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlQueryModel : public QAbstractTableModel -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSqlQueryModel(QObject *parent /TransferThis/ = 0); - virtual ~QSqlQueryModel(); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - QSqlRecord record() const; - QSqlRecord record(int row) const; - virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); - virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - void setQuery(const QSqlQuery &query); - void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase()); -%If (Qt_6_5_0 -) - const QSqlQuery &query() const; -%MethodCode - sipRes = const_cast(&sipCpp->query(Qt::Disambiguated)); -%End - -%End -%If (- Qt_6_5_0) - QSqlQuery query() const; -%End - virtual void clear(); - QSqlError lastError() const; - virtual void fetchMore(const QModelIndex &parent = QModelIndex()); - virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; - -protected: - virtual void queryChange(); - virtual QModelIndex indexInQuery(const QModelIndex &item) const; - void setLastError(const QSqlError &error); - void beginResetModel(); - void endResetModel(); - void beginInsertRows(const QModelIndex &parent, int first, int last); - void endInsertRows(); - void beginRemoveRows(const QModelIndex &parent, int first, int last); - void endRemoveRows(); - void beginInsertColumns(const QModelIndex &parent, int first, int last); - void endInsertColumns(); - void beginRemoveColumns(const QModelIndex &parent, int first, int last); - void endRemoveColumns(); - -public: - virtual QHash roleNames() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrecord.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrecord.sip deleted file mode 100644 index dc76e70..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrecord.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qsqlrecord.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlRecord -{ -%TypeHeaderCode -#include -%End - -public: - QSqlRecord(); - QSqlRecord(const QSqlRecord &other); - ~QSqlRecord(); - bool operator==(const QSqlRecord &other) const; - bool operator!=(const QSqlRecord &other) const; - QVariant value(int i) const; - QVariant value(const QString &name) const; - void setValue(int i, const QVariant &val); - void setValue(const QString &name, const QVariant &val); - void setNull(int i); - void setNull(const QString &name); - bool isNull(int i) const; - bool isNull(const QString &name) const; - int indexOf(const QString &name) const; - QString fieldName(int i) const; - QSqlField field(int i) const; - QSqlField field(const QString &name) const; - bool isGenerated(int i) const; - bool isGenerated(const QString &name) const; - void setGenerated(const QString &name, bool generated); - void setGenerated(int i, bool generated); - void append(const QSqlField &field); - void replace(int pos, const QSqlField &field); - void insert(int pos, const QSqlField &field); - void remove(int pos); - bool isEmpty() const; - bool contains(const QString &name) const; - void clear(); - void clearValues(); - int count() const /__len__/; - QSqlRecord keyValues(const QSqlRecord &keyFields) const; -%If (Qt_6_6_0 -) - void swap(QSqlRecord &other /Constrained/); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaldelegate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaldelegate.sip deleted file mode 100644 index 2031814..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaldelegate.sip +++ /dev/null @@ -1,35 +0,0 @@ -// qsqlrelationaldelegate.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlRelationalDelegate : public QStyledItemDelegate -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSqlRelationalDelegate(QObject *parent /TransferThis/ = 0); - virtual ~QSqlRelationalDelegate(); - virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; - virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaltablemodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaltablemodel.sip deleted file mode 100644 index 9f653e9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlrelationaltablemodel.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qsqlrelationaltablemodel.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlRelation -{ -%TypeHeaderCode -#include -%End - -public: - QSqlRelation(); - QSqlRelation(const QString &aTableName, const QString &indexCol, const QString &displayCol); - QString tableName() const; - QString indexColumn() const; - QString displayColumn() const; - bool isValid() const; - void swap(QSqlRelation &other /Constrained/); -}; - -class QSqlRelationalTableModel : public QSqlTableModel -{ -%TypeHeaderCode -#include -%End - -public: - QSqlRelationalTableModel(QObject *parent /TransferThis/ = 0, const QSqlDatabase &db = QSqlDatabase()); - virtual ~QSqlRelationalTableModel(); - virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::EditRole); - virtual void clear(); - virtual bool select(); - virtual void setTable(const QString &tableName); - virtual void setRelation(int column, const QSqlRelation &relation); - QSqlRelation relation(int column) const; - virtual QSqlTableModel *relationModel(int column) const; - virtual void revertRow(int row); - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - -protected: - virtual QString selectStatement() const; - virtual bool updateRowInTable(int row, const QSqlRecord &values); - virtual QString orderByClause() const; - virtual bool insertRowIntoTable(const QSqlRecord &values); - -public: - enum JoinMode - { - InnerJoin, - LeftJoin, - }; - - void setJoinMode(QSqlRelationalTableModel::JoinMode joinMode); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlresult.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlresult.sip deleted file mode 100644 index 7d60a66..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqlresult.sip +++ /dev/null @@ -1,109 +0,0 @@ -// qsqlresult.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlResult /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QSqlResult(); - virtual QVariant handle() const; - -protected: - enum BindingSyntax - { - PositionalBinding, - NamedBinding, - }; - - explicit QSqlResult(const QSqlDriver *db); - int at() const; - QString lastQuery() const; - QSqlError lastError() const; - bool isValid() const; - bool isActive() const; - bool isSelect() const; - bool isForwardOnly() const; - const QSqlDriver *driver() const; - virtual void setAt(int at); - virtual void setActive(bool a); - virtual void setLastError(const QSqlError &e); - virtual void setQuery(const QString &query); - virtual void setSelect(bool s); - virtual void setForwardOnly(bool forward); - virtual bool exec() /ReleaseGIL/; - virtual bool prepare(const QString &query) /ReleaseGIL/; - virtual bool savePrepare(const QString &sqlquery); - virtual void bindValue(int pos, const QVariant &val, QSql::ParamType type); - virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type); - void addBindValue(const QVariant &val, QSql::ParamType type); - QVariant boundValue(const QString &placeholder) const; - QVariant boundValue(int pos) const; - QSql::ParamType bindValueType(const QString &placeholder) const; - QSql::ParamType bindValueType(int pos) const; - int boundValueCount() const; -%If (Qt_6_6_0 -) - QVariantList boundValues() const [QVariantList (Qt::Disambiguated_t = Qt::Disambiguated)]; -%MethodCode - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipRes = new ::QVariantList(sipCpp->boundValues()); - #else - sipRes = new ::QVariantList(sipCpp->sipProtect_boundValues(Qt::Disambiguated)); - #endif -%End - -%End -%If (- Qt_6_6_0) - QList &boundValues() const; -%End - QString executedQuery() const; - QString boundValueName(int pos) const; - void clear(); - bool hasOutValues() const; - QSqlResult::BindingSyntax bindingSyntax() const; - virtual QVariant data(int i) = 0; - virtual bool isNull(int i) = 0; - virtual bool reset(const QString &sqlquery) = 0; - virtual bool fetch(int i) = 0 /ReleaseGIL/; - virtual bool fetchNext() /ReleaseGIL/; - virtual bool fetchPrevious() /ReleaseGIL/; - virtual bool fetchFirst() = 0 /ReleaseGIL/; - virtual bool fetchLast() = 0 /ReleaseGIL/; - virtual int size() = 0; - virtual int numRowsAffected() = 0; - virtual QSqlRecord record() const; - virtual QVariant lastInsertId() const; -%If (Qt_6_6_0 -) - QStringList boundValueNames() const; -%End -%If (Qt_6_7_0 -) - void setPositionalBindingEnabled(bool enable); -%End -%If (Qt_6_7_0 -) - bool isPositionalBindingEnabled() const; -%End - -private: - QSqlResult(const QSqlResult &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqltablemodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqltablemodel.sip deleted file mode 100644 index b39b75f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qsqltablemodel.sip +++ /dev/null @@ -1,96 +0,0 @@ -// qsqltablemodel.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSqlTableModel : public QSqlQueryModel -{ -%TypeHeaderCode -#include -%End - -public: - enum EditStrategy - { - OnFieldChange, - OnRowChange, - OnManualSubmit, - }; - - QSqlTableModel(QObject *parent /TransferThis/ = 0, const QSqlDatabase &db = QSqlDatabase()); - virtual ~QSqlTableModel(); - virtual bool select(); - virtual void setTable(const QString &tableName); - QString tableName() const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - bool isDirty(const QModelIndex &index) const; - bool isDirty() const; - virtual void clear(); - virtual void setEditStrategy(QSqlTableModel::EditStrategy strategy); - QSqlTableModel::EditStrategy editStrategy() const; - QSqlIndex primaryKey() const; - QSqlDatabase database() const; - int fieldIndex(const QString &fieldName) const; - virtual void sort(int column, Qt::SortOrder order); - virtual void setSort(int column, Qt::SortOrder order); - QString filter() const; - virtual void setFilter(const QString &filter); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); - virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - bool insertRecord(int row, const QSqlRecord &record); - bool setRecord(int row, const QSqlRecord &record); - virtual void revertRow(int row); - -public slots: - virtual bool submit(); - virtual void revert(); - bool submitAll(); - void revertAll(); - -signals: - void primeInsert(int row, QSqlRecord &record); - void beforeInsert(QSqlRecord &record); - void beforeUpdate(int row, QSqlRecord &record); - void beforeDelete(int row); - -protected: - virtual bool updateRowInTable(int row, const QSqlRecord &values); - virtual bool insertRowIntoTable(const QSqlRecord &values); - virtual bool deleteRowFromTable(int row); - virtual QString orderByClause() const; - virtual QString selectStatement() const; - void setPrimaryKey(const QSqlIndex &key); -%If (- Qt_6_5_0) - void setQuery(const QSqlQuery &query); -%End - virtual QModelIndex indexInQuery(const QModelIndex &item) const; - QSqlRecord primaryValues(int row) const; - -public: - virtual bool selectRow(int row); - QSqlRecord record() const; - QSqlRecord record(int row) const; - virtual bool clearItemData(const QModelIndex &index); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qtsqlglobal.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qtsqlglobal.sip deleted file mode 100644 index 6d3a6ec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSql/qtsqlglobal.sip +++ /dev/null @@ -1,60 +0,0 @@ -// qtsqlglobal.sip generated by MetaSIP -// -// This file is part of the QtSql Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QSql -{ -%TypeHeaderCode -#include -%End - - enum Location - { - BeforeFirstRow, - AfterLastRow, - }; - - enum ParamTypeFlag /BaseType=Flag/ - { - In, - Out, - InOut, - Binary, - }; - - typedef QFlags ParamType; - - enum TableType - { - Tables, - SystemTables, - Views, - AllTables, - }; - - enum NumericalPrecisionPolicy - { - LowPrecisionInt32, - LowPrecisionInt64, - LowPrecisionDouble, - HighPrecision, - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvg.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvg.toml deleted file mode 100644 index 241a2e8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvg.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSvg. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvgmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvgmod.sip deleted file mode 100644 index c66560a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/QtSvgmod.sip +++ /dev/null @@ -1,51 +0,0 @@ -// QtSvgmod.sip generated by MetaSIP -// -// This file is part of the QtSvg Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSvg, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qtsvgglobal.sip -%Include qsvggenerator.sip -%Include qsvgrenderer.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvggenerator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvggenerator.sip deleted file mode 100644 index 884c1dd..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvggenerator.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qsvggenerator.sip generated by MetaSIP -// -// This file is part of the QtSvg Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSvgGenerator : public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -public: - QSvgGenerator(); -%If (Qt_6_5_0 -) - explicit QSvgGenerator(QSvgGenerator::SvgVersion version); -%End - virtual ~QSvgGenerator(); - QSize size() const; - void setSize(const QSize &size); - QString fileName() const; - void setFileName(const QString &fileName); - QIODevice *outputDevice() const; - void setOutputDevice(QIODevice *outputDevice); - int resolution() const; - void setResolution(int resolution); - QString title() const; - void setTitle(const QString &title); - QString description() const; - void setDescription(const QString &description); - QRect viewBox() const; - QRectF viewBoxF() const; - void setViewBox(const QRect &viewBox); - void setViewBox(const QRectF &viewBox); - -protected: - virtual QPaintEngine *paintEngine() const; - virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; - -public: -%If (Qt_6_5_0 -) - - enum class SvgVersion - { - SvgTiny12, - Svg11, - }; - -%End -%If (Qt_6_5_0 -) - QSvgGenerator::SvgVersion svgVersion() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvgrenderer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvgrenderer.sip deleted file mode 100644 index 1b43eaa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qsvgrenderer.sip +++ /dev/null @@ -1,105 +0,0 @@ -// qsvgrenderer.sip generated by MetaSIP -// -// This file is part of the QtSvg Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSvgRenderer : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QSvgRenderer, &sipType_QSvgRenderer, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QSvgRenderer(QObject *parent /TransferThis/ = 0); - QSvgRenderer(const QString &filename, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSvgRenderer(const QByteArray &contents, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - QSvgRenderer(QXmlStreamReader *contents, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; - virtual ~QSvgRenderer(); - bool isValid() const; - QSize defaultSize() const; - bool elementExists(const QString &id) const; - QRect viewBox() const; - QRectF viewBoxF() const; - void setViewBox(const QRect &viewbox); - void setViewBox(const QRectF &viewbox); - bool animated() const; - QRectF boundsOnElement(const QString &id) const; - int framesPerSecond() const; - void setFramesPerSecond(int num); - int currentFrame() const; - void setCurrentFrame(int); - int animationDuration() const; - -public slots: - bool load(const QString &filename) /ReleaseGIL/; - bool load(const QByteArray &contents) /ReleaseGIL/; - bool load(QXmlStreamReader *contents) /ReleaseGIL/; - void render(QPainter *p) /ReleaseGIL/; - void render(QPainter *p, const QRectF &bounds) /ReleaseGIL/; - void render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF()) /ReleaseGIL/; - -signals: - void repaintNeeded(); - -public: - Qt::AspectRatioMode aspectRatioMode() const; - void setAspectRatioMode(Qt::AspectRatioMode mode); - QTransform transformForElement(const QString &id) const; -%If (Qt_6_7_0 -) - QtSvg::Options options() const; -%End -%If (Qt_6_7_0 -) - void setOptions(QtSvg::Options flags); -%End -%If (Qt_6_7_0 -) - bool isAnimationEnabled() const; -%End -%If (Qt_6_7_0 -) - void setAnimationEnabled(bool enable); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qtsvgglobal.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qtsvgglobal.sip deleted file mode 100644 index 304d78a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvg/qtsvgglobal.sip +++ /dev/null @@ -1,40 +0,0 @@ -// qtsvgglobal.sip generated by MetaSIP -// -// This file is part of the QtSvg Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_7_0 -) - -namespace QtSvg -{ -%TypeHeaderCode -#include -%End - - enum Option - { - NoOption, - Tiny12FeaturesOnly, - }; - - typedef QFlags Options; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgets.toml deleted file mode 100644 index 5efbbf2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtSvgWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgetsmod.sip deleted file mode 100644 index 4f0e2f2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/QtSvgWidgetsmod.sip +++ /dev/null @@ -1,52 +0,0 @@ -// QtSvgWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtSvgWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtSvgWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtSvg/QtSvgmod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qgraphicssvgitem.sip -%Include qsvgwidget.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qgraphicssvgitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qgraphicssvgitem.sip deleted file mode 100644 index 592faf2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qgraphicssvgitem.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qgraphicssvgitem.sip generated by MetaSIP -// -// This file is part of the QtSvgWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsSvgItem : public QGraphicsObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - if (sipCpp->type() == 13) - { - // Switch to the QObject convertor. - *sipCppRet = static_cast(sipCpp); - sipType = sipType_QObject; - } - else - { - sipType = 0; - } -%End - -public: - QGraphicsSvgItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsSvgItem(const QString &fileName, QGraphicsItem *parent /TransferThis/ = 0); - void setSharedRenderer(QSvgRenderer *renderer /KeepReference/); - QSvgRenderer *renderer() const; - void setElementId(const QString &id); - QString elementId() const; - void setMaximumCacheSize(const QSize &size); - QSize maximumCacheSize() const; - virtual QRectF boundingRect() const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual int type() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qsvgwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qsvgwidget.sip deleted file mode 100644 index 5fa40f4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtSvgWidgets/qsvgwidget.sip +++ /dev/null @@ -1,79 +0,0 @@ -// qsvgwidget.sip generated by MetaSIP -// -// This file is part of the QtSvgWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSvgWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QGraphicsSvgItem, &sipType_QGraphicsSvgItem, -1, 1}, - {sipName_QSvgWidget, &sipType_QSvgWidget, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QSvgWidget(QWidget *parent /TransferThis/ = 0); - QSvgWidget(const QString &file, QWidget *parent /TransferThis/ = 0); - virtual ~QSvgWidget(); - QSvgRenderer *renderer() const; - virtual QSize sizeHint() const; - -public slots: - void load(const QString &file) /ReleaseGIL/; - void load(const QByteArray &contents); - -protected: - virtual void paintEvent(QPaintEvent *event); - -public: -%If (Qt_6_7_0 -) - QtSvg::Options options() const; -%End -%If (Qt_6_7_0 -) - void setOptions(QtSvg::Options options); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTest.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTest.toml deleted file mode 100644 index e0491e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTest.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtTest. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTestmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTestmod.sip deleted file mode 100644 index 5adacea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/QtTestmod.sip +++ /dev/null @@ -1,54 +0,0 @@ -// QtTestmod.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtTest, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip -%Import QtWidgets/QtWidgetsmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qabstractitemmodeltester.sip -%Include qsignalspy.sip -%Include qtestkeyboard.sip -%Include qtestmouse.sip -%Include qtestsystem.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qabstractitemmodeltester.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qabstractitemmodeltester.sip deleted file mode 100644 index 49d57dc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qabstractitemmodeltester.sip +++ /dev/null @@ -1,47 +0,0 @@ -// qabstractitemmodeltester.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractItemModelTester : public QObject -{ -%TypeHeaderCode -// Qt v5.11.0 needs this. -#include - -#include -%End - -public: - enum class FailureReportingMode - { - QtTest, - Warning, - Fatal, - }; - - QAbstractItemModelTester(QAbstractItemModel *model /KeepReference=1/, QObject *parent /TransferThis/ = 0); - QAbstractItemModelTester(QAbstractItemModel *model /KeepReference=1/, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent /TransferThis/ = 0); - QAbstractItemModel *model() const; - QAbstractItemModelTester::FailureReportingMode failureReportingMode() const; -%If (Qt_6_4_0 -) - void setUseFetchMore(bool value); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qsignalspy.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qsignalspy.sip deleted file mode 100644 index 5b394e2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qsignalspy.sip +++ /dev/null @@ -1,101 +0,0 @@ -// qsignalspy.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSignalSpy : QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - sipType = (sipCpp->inherits("QSignalSpy") ? sipType_QSignalSpy : 0); - - if (!sipType && sipCpp->inherits("QAbstractItemModelTester")) - sipType = sipType_QAbstractItemModelTester; -%End - -public: - QSignalSpy(SIP_PYOBJECT signal /TypeHint="QtCore.pyqtBoundSignal"/) [(const QObject *obj, const char *aSignal)]; -%MethodCode - QObject *sender; - QByteArray signal_signature; - - if ((sipError = pyqt6_qttest_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone) - sipCpp = new sipQSignalSpy(sender, signal_signature.constData()); - else if (sipError == sipErrorContinue) - sipError = sipBadCallableArg(0, a0); -%End - - QSignalSpy(const QObject *obj, const QMetaMethod &signal); - bool isValid() const; - QByteArray signal() const; - bool wait(int timeout = 5000) /ReleaseGIL/; - Py_ssize_t __len__() const; -%MethodCode - sipRes = sipCpp->count(); -%End - - QList __getitem__(int i) const; -%MethodCode - Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); - - if (idx < 0) - sipIsErr = 1; - else - sipRes = new QList(sipCpp->at((int)idx)); -%End - - void __setitem__(int i, const QList &value); -%MethodCode - int len = sipCpp->count(); - - if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) - sipIsErr = 1; - else - (*sipCpp)[a0] = *a1; -%End - - void __delitem__(int i); -%MethodCode - if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) - sipIsErr = 1; - else - sipCpp->removeAt(a0); -%End -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef sipErrorState (*pyqt6_qttest_get_pyqtsignal_parts_t)(PyObject *, QObject **, QByteArray &); -extern pyqt6_qttest_get_pyqtsignal_parts_t pyqt6_qttest_get_pyqtsignal_parts; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qttest_get_pyqtsignal_parts_t pyqt6_qttest_get_pyqtsignal_parts; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qttest_get_pyqtsignal_parts = (pyqt6_qttest_get_pyqtsignal_parts_t)sipImportSymbol("pyqt6_get_pyqtsignal_parts"); -Q_ASSERT(pyqt6_qttest_get_pyqtsignal_parts); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestkeyboard.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestkeyboard.sip deleted file mode 100644 index f0c03fa..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestkeyboard.sip +++ /dev/null @@ -1,59 +0,0 @@ -// qtestkeyboard.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QTest -{ -%TypeHeaderCode -#include -%End - - enum KeyAction - { - Press, - Release, - Click, - Shortcut, - }; - - void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keySequence(QWidget *widget, const QKeySequence &keySequence); - void simulateEvent(QWidget *widget, bool press, int code, Qt::KeyboardModifiers modifier, QString text, bool repeat, int delay = -1); - void sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, char ascii /Encoding="ASCII"/, Qt::KeyboardModifiers modifier, int delay = -1); - void sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, QString text, Qt::KeyboardModifiers modifier, int delay = -1); - void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); - void keySequence(QWindow *window, const QKeySequence &keySequence); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestmouse.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestmouse.sip deleted file mode 100644 index 581f353..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestmouse.sip +++ /dev/null @@ -1,39 +0,0 @@ -// qtestmouse.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QTest -{ -%TypeHeaderCode -#include -%End - - void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1); - void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); - void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestsystem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestsystem.sip deleted file mode 100644 index a85e4e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTest/qtestsystem.sip +++ /dev/null @@ -1,34 +0,0 @@ -// qtestsystem.sip generated by MetaSIP -// -// This file is part of the QtTest Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -namespace QTest -{ -%TypeHeaderCode -#include -%End - - void qWait(int ms) /ReleaseGIL/; - bool qWaitForWindowActive(QWindow *window, int timeout = 5000) /ReleaseGIL/; - bool qWaitForWindowExposed(QWindow *window, int timeout = 5000) /ReleaseGIL/; - bool qWaitForWindowActive(QWidget *widget, int timeout = 5000) /ReleaseGIL/; - bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000) /ReleaseGIL/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeech.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeech.toml deleted file mode 100644 index 1251cba..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeech.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtTextToSpeech. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeechmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeechmod.sip deleted file mode 100644 index 25e20c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/QtTextToSpeechmod.sip +++ /dev/null @@ -1,49 +0,0 @@ -// QtTextToSpeechmod.sip generated by MetaSIP -// -// This file is part of the QtTextToSpeech Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtTextToSpeech, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qtexttospeech.sip -%Include qvoice.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qtexttospeech.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qtexttospeech.sip deleted file mode 100644 index 2c311f7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qtexttospeech.sip +++ /dev/null @@ -1,160 +0,0 @@ -// qtexttospeech.sip generated by MetaSIP -// -// This file is part of the QtTextToSpeech Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextToSpeech : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QTextToSpeech, &sipType_QTextToSpeech, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - enum class BoundaryHint - { - Default, - Immediate, - Word, - Sentence, -%If (Qt_6_6_0 -) - Utterance, -%End - }; - - enum class ErrorReason - { - NoError, - Initialization, - Configuration, - Input, - Playback, - }; - - enum State - { - Ready, - Speaking, - Paused, - Error, -%If (Qt_6_6_0 -) - Synthesizing, -%End - }; - - QTextToSpeech(const QString &engine, const QVariantMap ¶ms, QObject *parent /TransferThis/ = 0); - explicit QTextToSpeech(QObject *parent /TransferThis/ = 0); - QTextToSpeech(const QString &engine, QObject *parent /TransferThis/ = 0); - virtual ~QTextToSpeech(); - bool setEngine(const QString &engine, const QVariantMap ¶ms = QVariantMap()); - QString engine() const; - QTextToSpeech::ErrorReason errorReason() const; - QString errorString() const; - QTextToSpeech::State state() const; - QList availableLocales() const; - QLocale locale() const; - QVoice voice() const; - QList availableVoices() const; - double rate() const; - double pitch() const; - double volume() const; - static QStringList availableEngines(); - -public slots: - void say(const QString &text); - void stop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default); - void pause(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default); - void resume(); - void setLocale(const QLocale &locale); - void setRate(double rate); - void setPitch(double pitch); - void setVolume(double volume); - void setVoice(const QVoice &voice); - -signals: - void stateChanged(QTextToSpeech::State state); - void localeChanged(const QLocale &locale); - void rateChanged(double rate); - void pitchChanged(double pitch); - void volumeChanged(double volume); - void voiceChanged(const QVoice &voice); - void engineChanged(const QString &engine); - void errorOccurred(QTextToSpeech::ErrorReason error, const QString &errorString); - -public: -%If (Qt_6_6_0 -) - - enum class Capability - { - None, - Speak, - PauseResume, - WordByWordProgress, - Synthesize, - }; - -%End -%If (Qt_6_6_0 -) - typedef QFlags Capabilities; -%End -%If (Qt_6_6_0 -) - QTextToSpeech::Capabilities engineCapabilities() const; -%End - -public slots: -%If (Qt_6_6_0 -) - qsizetype enqueue(const QString &text); -%End - -signals: -%If (Qt_6_6_0 -) - void sayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length); -%End -%If (Qt_6_6_0 -) - void aboutToSynthesize(qsizetype id); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qvoice.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qvoice.sip deleted file mode 100644 index 0d3590c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtTextToSpeech/qvoice.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qvoice.sip generated by MetaSIP -// -// This file is part of the QtTextToSpeech Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QVoice -{ -%TypeHeaderCode -#include -%End - -public: - enum Gender - { - Male, - Female, - Unknown, - }; - - enum Age - { - Child, - Teenager, - Adult, - Senior, - Other, - }; - - QVoice(); - QVoice(const QVoice &other); - ~QVoice(); - QString name() const; - QVoice::Gender gender() const; - QVoice::Age age() const; - static QString genderName(QVoice::Gender gender); - static QString ageName(QVoice::Age age); - void swap(QVoice &other); - QLocale locale() const; -%If (Qt_6_6_0 -) - QLocale::Language language() const; -%End -}; - -bool operator==(const QVoice &lhs, const QVoice &rhs); -bool operator!=(const QVoice &lhs, const QVoice &rhs); -QDataStream &operator<<(QDataStream &str, const QVoice &voice); -QDataStream &operator>>(QDataStream &str, QVoice &voice /Constrained/); diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannel.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannel.toml deleted file mode 100644 index 2db4f50..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannel.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtWebChannel. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannelmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannelmod.sip deleted file mode 100644 index 0cd1efe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/QtWebChannelmod.sip +++ /dev/null @@ -1,49 +0,0 @@ -// QtWebChannelmod.sip generated by MetaSIP -// -// This file is part of the QtWebChannel Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtWebChannel, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qwebchannel.sip -%Include qwebchannelabstracttransport.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannel.sip deleted file mode 100644 index 5a49efe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannel.sip +++ /dev/null @@ -1,80 +0,0 @@ -// qwebchannel.sip generated by MetaSIP -// -// This file is part of the QtWebChannel Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QWebChannel : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QWebChannelAbstractTransport, &sipType_QWebChannelAbstractTransport, -1, 1}, - {sipName_QWebChannel, &sipType_QWebChannel, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - explicit QWebChannel(QObject *parent /TransferThis/ = 0); - virtual ~QWebChannel(); - void registerObjects(const QHash &objects); - QHash registeredObjects() const; - void registerObject(const QString &id, QObject *object); - void deregisterObject(QObject *object); - bool blockUpdates() const; - void setBlockUpdates(bool block); - int propertyUpdateInterval() const; - void setPropertyUpdateInterval(int ms); - -public slots: - void connectTo(QWebChannelAbstractTransport *transport); - void disconnectFrom(QWebChannelAbstractTransport *transport); - -signals: - void blockUpdatesChanged(bool block); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannelabstracttransport.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannelabstracttransport.sip deleted file mode 100644 index a8ab0f4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebChannel/qwebchannelabstracttransport.sip +++ /dev/null @@ -1,42 +0,0 @@ -// qwebchannelabstracttransport.sip generated by MetaSIP -// -// This file is part of the QtWebChannel Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QWebChannelAbstractTransport : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWebChannelAbstractTransport(QObject *parent /TransferThis/ = 0); - virtual ~QWebChannelAbstractTransport(); - -public slots: - virtual void sendMessage(const QJsonObject &message) = 0; - -signals: - void messageReceived(const QJsonObject &message, QWebChannelAbstractTransport *transport); -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSockets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSockets.toml deleted file mode 100644 index 7b2c99a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSockets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtWebSockets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSocketsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSocketsmod.sip deleted file mode 100644 index 7ea8c73..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/QtWebSocketsmod.sip +++ /dev/null @@ -1,54 +0,0 @@ -// QtWebSocketsmod.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtWebSockets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtNetwork/QtNetworkmod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qmaskgenerator.sip -%Include qwebsocket.sip -%Include qwebsocketcorsauthenticator.sip -%Include qwebsockethandshakeoptions.sip -%Include qwebsocketprotocol.sip -%Include qwebsocketserver.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qmaskgenerator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qmaskgenerator.sip deleted file mode 100644 index afe8091..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qmaskgenerator.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qmaskgenerator.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QMaskGenerator : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QMaskGenerator(QObject *parent /TransferThis/ = 0); - virtual ~QMaskGenerator(); - virtual bool seed() = 0; - virtual quint32 nextMask() = 0; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocket.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocket.sip deleted file mode 100644 index 2b88f5c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocket.sip +++ /dev/null @@ -1,183 +0,0 @@ -// qwebsocket.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QWebSocket : public QObject -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QWebSocket, &sipType_QWebSocket, -1, 1}, - {sipName_QWebSocketServer, &sipType_QWebSocketServer, -1, 2}, - {sipName_QMaskGenerator, &sipType_QMaskGenerator, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QWebSocket(const QString &origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject *parent /TransferThis/ = 0); - virtual ~QWebSocket(); - void abort(); - QAbstractSocket::SocketError error() const; - QString errorString() const; - bool flush() /ReleaseGIL/; - bool isValid() const; - QHostAddress localAddress() const; - quint16 localPort() const; - QAbstractSocket::PauseModes pauseMode() const; - QHostAddress peerAddress() const; - QString peerName() const; - quint16 peerPort() const; - QNetworkProxy proxy() const; - void setProxy(const QNetworkProxy &networkProxy); - void setMaskGenerator(const QMaskGenerator *maskGenerator /KeepReference/); - const QMaskGenerator *maskGenerator() const; - qint64 readBufferSize() const; - void setReadBufferSize(qint64 size); - void resume() /ReleaseGIL/; - void setPauseMode(QAbstractSocket::PauseModes pauseMode); - QAbstractSocket::SocketState state() const; - QWebSocketProtocol::Version version() const; - QString resourceName() const; - QUrl requestUrl() const; - QString origin() const; - QWebSocketProtocol::CloseCode closeCode() const; - QString closeReason() const; - qint64 sendTextMessage(const QString &message) /ReleaseGIL/; - qint64 sendBinaryMessage(const QByteArray &data) /ReleaseGIL/; -%If (PyQt_SSL) - void ignoreSslErrors(const QList &errors); -%End -%If (PyQt_SSL) - void setSslConfiguration(const QSslConfiguration &sslConfiguration); -%End -%If (PyQt_SSL) - QSslConfiguration sslConfiguration() const; -%End - QNetworkRequest request() const; - -public slots: - void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString()) /ReleaseGIL/; -%If (Qt_6_4_0 -) - void open(const QNetworkRequest &request, const QWebSocketHandshakeOptions &options) /ReleaseGIL/; -%End -%If (Qt_6_4_0 -) - void open(const QUrl &url, const QWebSocketHandshakeOptions &options) /ReleaseGIL/; -%End - void open(const QUrl &url) /ReleaseGIL/; - void open(const QNetworkRequest &request) /ReleaseGIL/; - void ping(const QByteArray &payload = QByteArray()) /ReleaseGIL/; -%If (PyQt_SSL) - void ignoreSslErrors(); -%End - -signals: - void aboutToClose(); - void connected(); - void disconnected(); - void stateChanged(QAbstractSocket::SocketState state); - void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *pAuthenticator); - void readChannelFinished(); - void textFrameReceived(const QString &frame, bool isLastFrame); - void binaryFrameReceived(const QByteArray &frame, bool isLastFrame); - void textMessageReceived(const QString &message); - void binaryMessageReceived(const QByteArray &message); - void error(QAbstractSocket::SocketError error); - void pong(quint64 elapsedTime, const QByteArray &payload); - void bytesWritten(qint64 bytes); -%If (PyQt_SSL) - void sslErrors(const QList &errors); -%End -%If (PyQt_SSL) - void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); -%End - -public: - qint64 bytesToWrite() const; - void setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomingFrameSize); - quint64 maxAllowedIncomingFrameSize() const; - void setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncomingMessageSize); - quint64 maxAllowedIncomingMessageSize() const; - static quint64 maxIncomingMessageSize(); - static quint64 maxIncomingFrameSize(); - void setOutgoingFrameSize(quint64 outgoingFrameSize); - quint64 outgoingFrameSize() const; - static quint64 maxOutgoingFrameSize(); - void continueInterruptedHandshake(); - -signals: -%If (PyQt_SSL) - void peerVerifyError(const QSslError &error); -%End -%If (PyQt_SSL) - void alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); -%End -%If (PyQt_SSL) - void alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description); -%End -%If (PyQt_SSL) - void handshakeInterruptedOnError(const QSslError &error); -%End - -public: -%If (Qt_6_4_0 -) - QWebSocketHandshakeOptions handshakeOptions() const; -%End -%If (Qt_6_4_0 -) - QString subprotocol() const; -%End - -signals: -%If (Qt_6_5_0 -) - void errorOccurred(QAbstractSocket::SocketError error); -%End -%If (Qt_6_6_0 -) - void authenticationRequired(QAuthenticator *authenticator); -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip deleted file mode 100644 index 3e8d876..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qwebsocketcorsauthenticator.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QWebSocketCorsAuthenticator -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWebSocketCorsAuthenticator(const QString &origin); - explicit QWebSocketCorsAuthenticator(const QWebSocketCorsAuthenticator &other); - ~QWebSocketCorsAuthenticator(); - void swap(QWebSocketCorsAuthenticator &other /Constrained/); - QString origin() const; - void setAllowed(bool allowed); - bool allowed() const; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsockethandshakeoptions.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsockethandshakeoptions.sip deleted file mode 100644 index 43c43b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsockethandshakeoptions.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qwebsockethandshakeoptions.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_4_0 -) - -class QWebSocketHandshakeOptions -{ -%TypeHeaderCode -#include -%End - -public: - QWebSocketHandshakeOptions(); - QWebSocketHandshakeOptions(const QWebSocketHandshakeOptions &other); - ~QWebSocketHandshakeOptions(); - void swap(QWebSocketHandshakeOptions &other); - QStringList subprotocols() const; - void setSubprotocols(const QStringList &protocols); -}; - -%End -%If (Qt_6_4_0 -) -bool operator==(const QWebSocketHandshakeOptions &lhs, const QWebSocketHandshakeOptions &rhs); -%End -%If (Qt_6_4_0 -) -bool operator!=(const QWebSocketHandshakeOptions &lhs, const QWebSocketHandshakeOptions &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketprotocol.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketprotocol.sip deleted file mode 100644 index cf745b8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketprotocol.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qwebsocketprotocol.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -namespace QWebSocketProtocol -{ -%TypeHeaderCode -#include -%End - - enum Version - { - VersionUnknown, - Version0, - Version4, - Version5, - Version6, - Version7, - Version8, - Version13, - VersionLatest, - }; - - enum CloseCode - { - CloseCodeNormal, - CloseCodeGoingAway, - CloseCodeProtocolError, - CloseCodeDatatypeNotSupported, - CloseCodeReserved1004, - CloseCodeMissingStatusCode, - CloseCodeAbnormalDisconnection, - CloseCodeWrongDatatype, - CloseCodePolicyViolated, - CloseCodeTooMuchData, - CloseCodeMissingExtension, - CloseCodeBadOperation, - CloseCodeTlsHandshakeFailed, - }; -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketserver.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketserver.sip deleted file mode 100644 index b056c2e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWebSockets/qwebsocketserver.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qwebsocketserver.sip generated by MetaSIP -// -// This file is part of the QtWebSockets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%If (Qt_6_2_0 -) - -class QWebSocketServer : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum SslMode - { -%If (PyQt_SSL) - SecureMode, -%End - NonSecureMode, - }; - - QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent /TransferThis/ = 0); - virtual ~QWebSocketServer(); - bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0); - void close(); - bool isListening() const; - void setMaxPendingConnections(int numConnections); - int maxPendingConnections() const; - quint16 serverPort() const; - QHostAddress serverAddress() const; - QWebSocketServer::SslMode secureMode() const; - bool setSocketDescriptor(qintptr socketDescriptor); - qintptr socketDescriptor() const; - bool hasPendingConnections() const; - virtual QWebSocket *nextPendingConnection() /Factory/; - QWebSocketProtocol::CloseCode error() const; - QString errorString() const; - void pauseAccepting(); - void resumeAccepting(); - void setServerName(const QString &serverName); - QString serverName() const; - void setProxy(const QNetworkProxy &networkProxy); - QNetworkProxy proxy() const; -%If (PyQt_SSL) - void setSslConfiguration(const QSslConfiguration &sslConfiguration); -%End -%If (PyQt_SSL) - QSslConfiguration sslConfiguration() const; -%End - QList supportedVersions() const; - QUrl serverUrl() const; - void handleConnection(QTcpSocket *socket) const; - -signals: - void acceptError(QAbstractSocket::SocketError socketError); - void serverError(QWebSocketProtocol::CloseCode closeCode); - void originAuthenticationRequired(QWebSocketCorsAuthenticator *pAuthenticator); - void newConnection(); -%If (PyQt_SSL) - void peerVerifyError(const QSslError &error); -%End -%If (PyQt_SSL) - void sslErrors(const QList &errors); -%End - void closed(); -%If (PyQt_SSL) - void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); -%End - -public: - void setHandshakeTimeout(int msec); - int handshakeTimeoutMS() const; -%If (Qt_6_4_0 -) - void setSupportedSubprotocols(const QStringList &protocols); -%End -%If (Qt_6_4_0 -) - QStringList supportedSubprotocols() const; -%End -}; - -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgets.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgets.toml deleted file mode 100644 index 17f4773..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgets.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtWidgets. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = ["PyQt_OpenGL_ES2"] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgetsmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgetsmod.sip deleted file mode 100644 index d1a21b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/QtWidgetsmod.sip +++ /dev/null @@ -1,161 +0,0 @@ -// QtWidgetsmod.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtWidgets, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip -%Import QtGui/QtGuimod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qabstractbutton.sip -%Include qabstractitemdelegate.sip -%Include qabstractitemview.sip -%Include qabstractscrollarea.sip -%Include qabstractslider.sip -%Include qabstractspinbox.sip -%Include qapplication.sip -%Include qboxlayout.sip -%Include qbuttongroup.sip -%Include qcalendarwidget.sip -%Include qcheckbox.sip -%Include qcolordialog.sip -%Include qcolumnview.sip -%Include qcombobox.sip -%Include qcommandlinkbutton.sip -%Include qcommonstyle.sip -%Include qcompleter.sip -%Include qdatawidgetmapper.sip -%Include qdatetimeedit.sip -%Include qdial.sip -%Include qdialog.sip -%Include qdialogbuttonbox.sip -%Include qdockwidget.sip -%Include qdrawutil.sip -%Include qerrormessage.sip -%Include qfiledialog.sip -%Include qfileiconprovider.sip -%Include qfocusframe.sip -%Include qfontcombobox.sip -%Include qfontdialog.sip -%Include qformlayout.sip -%Include qframe.sip -%Include qgesture.sip -%Include qgesturerecognizer.sip -%Include qgraphicsanchorlayout.sip -%Include qgraphicseffect.sip -%Include qgraphicsgridlayout.sip -%Include qgraphicsitem.sip -%Include qgraphicslayout.sip -%Include qgraphicslayoutitem.sip -%Include qgraphicslinearlayout.sip -%Include qgraphicsproxywidget.sip -%Include qgraphicsscene.sip -%Include qgraphicssceneevent.sip -%Include qgraphicstransform.sip -%Include qgraphicsview.sip -%Include qgraphicswidget.sip -%Include qgridlayout.sip -%Include qgroupbox.sip -%Include qheaderview.sip -%Include qinputdialog.sip -%Include qitemdelegate.sip -%Include qitemeditorfactory.sip -%Include qkeysequenceedit.sip -%Include qlabel.sip -%Include qlayout.sip -%Include qlayoutitem.sip -%Include qlcdnumber.sip -%Include qlineedit.sip -%Include qlistview.sip -%Include qlistwidget.sip -%Include qmainwindow.sip -%Include qmdiarea.sip -%Include qmdisubwindow.sip -%Include qmenu.sip -%Include qmenubar.sip -%Include qmessagebox.sip -%Include qplaintextedit.sip -%Include qprogressbar.sip -%Include qprogressdialog.sip -%Include qproxystyle.sip -%Include qpushbutton.sip -%Include qradiobutton.sip -%Include qrubberband.sip -%Include qscrollarea.sip -%Include qscrollbar.sip -%Include qscroller.sip -%Include qscrollerproperties.sip -%Include qsizegrip.sip -%Include qsizepolicy.sip -%Include qslider.sip -%Include qspinbox.sip -%Include qsplashscreen.sip -%Include qsplitter.sip -%Include qstackedlayout.sip -%Include qstackedwidget.sip -%Include qstatusbar.sip -%Include qstyle.sip -%Include qstyleditemdelegate.sip -%Include qstylefactory.sip -%Include qstyleoption.sip -%Include qstylepainter.sip -%Include qsystemtrayicon.sip -%Include qtabbar.sip -%Include qtableview.sip -%Include qtablewidget.sip -%Include qtabwidget.sip -%Include qtextbrowser.sip -%Include qtextedit.sip -%Include qtoolbar.sip -%Include qtoolbox.sip -%Include qtoolbutton.sip -%Include qtooltip.sip -%Include qtreeview.sip -%Include qtreewidget.sip -%Include qtreewidgetitemiterator.sip -%Include qundoview.sip -%Include qwhatsthis.sip -%Include qwidget.sip -%Include qwidgetaction.sip -%Include qwizard.sip -%Include qfilesystemmodel.sip -%Include qpywidgets_qlist.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractbutton.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractbutton.sip deleted file mode 100644 index 517450c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractbutton.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qabstractbutton.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractButton : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractButton(QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractButton(); - void setAutoRepeatDelay(int); - int autoRepeatDelay() const; - void setAutoRepeatInterval(int); - int autoRepeatInterval() const; - void setText(const QString &text); - QString text() const; - void setIcon(const QIcon &icon); - QIcon icon() const; - QSize iconSize() const; - void setShortcut(const QKeySequence &key); - QKeySequence shortcut() const; - void setCheckable(bool); - bool isCheckable() const; - bool isChecked() const; - void setDown(bool); - bool isDown() const; - void setAutoRepeat(bool); - bool autoRepeat() const; - void setAutoExclusive(bool); - bool autoExclusive() const; - QButtonGroup *group() const; - -public slots: - void setIconSize(const QSize &size); - void animateClick(); - void click(); - void toggle(); - void setChecked(bool); - -signals: - void pressed(); - void released(); - void clicked(bool checked = false); - void toggled(bool checked); - -protected: - virtual void paintEvent(QPaintEvent *e) = 0; - virtual bool hitButton(const QPoint &pos) const; - virtual void checkStateSet(); - virtual void nextCheckState(); - virtual bool event(QEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void keyReleaseEvent(QKeyEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void changeEvent(QEvent *e); - virtual void timerEvent(QTimerEvent *e); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemdelegate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemdelegate.sip deleted file mode 100644 index 8c0f5b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemdelegate.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qabstractitemdelegate.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractItemDelegate : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum EndEditHint - { - NoHint, - EditNextItem, - EditPreviousItem, - SubmitModelCache, - RevertModelCache, - }; - - explicit QAbstractItemDelegate(QObject *parent /TransferThis/ = 0); - virtual ~QAbstractItemDelegate(); - virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0; - virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0; - virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; - virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; - virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; - virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual void destroyEditor(QWidget *editor, const QModelIndex &index) const; - virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); - virtual bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index); - -signals: - void commitData(QWidget *editor); - void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = QAbstractItemDelegate::NoHint); - void sizeHintChanged(const QModelIndex &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemview.sip deleted file mode 100644 index 255a1ab..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractitemview.sip +++ /dev/null @@ -1,282 +0,0 @@ -// qabstractitemview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractItemView : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - enum DragDropMode - { - NoDragDrop, - DragOnly, - DropOnly, - DragDrop, - InternalMove, - }; - - enum EditTrigger /BaseType=Flag/ - { - NoEditTriggers, - CurrentChanged, - DoubleClicked, - SelectedClicked, - EditKeyPressed, - AnyKeyPressed, - AllEditTriggers, - }; - - typedef QFlags EditTriggers; - - enum ScrollHint - { - EnsureVisible, - PositionAtTop, - PositionAtBottom, - PositionAtCenter, - }; - - enum ScrollMode - { - ScrollPerItem, - ScrollPerPixel, - }; - - enum SelectionBehavior - { - SelectItems, - SelectRows, - SelectColumns, - }; - - enum SelectionMode - { - NoSelection, - SingleSelection, - MultiSelection, - ExtendedSelection, - ContiguousSelection, - }; - - explicit QAbstractItemView(QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractItemView(); - virtual void setModel(QAbstractItemModel *model /KeepReference/); - QAbstractItemModel *model() const; - virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); - QItemSelectionModel *selectionModel() const; - void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemDelegate *itemDelegate() const; - void setSelectionMode(QAbstractItemView::SelectionMode mode); - QAbstractItemView::SelectionMode selectionMode() const; - void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior); - QAbstractItemView::SelectionBehavior selectionBehavior() const; - QModelIndex currentIndex() const; - QModelIndex rootIndex() const; - void setEditTriggers(QAbstractItemView::EditTriggers triggers); - QAbstractItemView::EditTriggers editTriggers() const; - void setAutoScroll(bool enable); - bool hasAutoScroll() const; - void setTabKeyNavigation(bool enable); - bool tabKeyNavigation() const; - void setDropIndicatorShown(bool enable); - bool showDropIndicator() const; - void setDragEnabled(bool enable); - bool dragEnabled() const; - void setAlternatingRowColors(bool enable); - bool alternatingRowColors() const; - void setIconSize(const QSize &size); - QSize iconSize() const; - void setTextElideMode(Qt::TextElideMode mode); - Qt::TextElideMode textElideMode() const; - virtual void keyboardSearch(const QString &search); - virtual QRect visualRect(const QModelIndex &index) const = 0; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible) = 0; - virtual QModelIndex indexAt(const QPoint &p) const = 0; - QSize sizeHintForIndex(const QModelIndex &index) const; - virtual int sizeHintForRow(int row) const; - virtual int sizeHintForColumn(int column) const; - void openPersistentEditor(const QModelIndex &index); - void closePersistentEditor(const QModelIndex &index); - void setIndexWidget(const QModelIndex &index, QWidget *widget /Transfer/); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->indexWidget(*a0); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->setIndexWidget(*a0, a1); - Py_END_ALLOW_THREADS -%End - - QWidget *indexWidget(const QModelIndex &index) const; - -public slots: - virtual void reset(); - virtual void setRootIndex(const QModelIndex &index); - virtual void selectAll(); - void edit(const QModelIndex &index); - void clearSelection(); - void setCurrentIndex(const QModelIndex &index); - void scrollToTop(); - void scrollToBottom(); - void update(); - void update(const QModelIndex &index); - -protected slots: - virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList &roles = QList()); - virtual void rowsInserted(const QModelIndex &parent, int start, int end); - virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); - virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - virtual void updateEditorData(); - virtual void updateEditorGeometries(); - virtual void updateGeometries(); - virtual void verticalScrollbarAction(int action); - virtual void horizontalScrollbarAction(int action); - virtual void verticalScrollbarValueChanged(int value); - virtual void horizontalScrollbarValueChanged(int value); - virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); - virtual void commitData(QWidget *editor); - virtual void editorDestroyed(QObject *editor); - -signals: - void pressed(const QModelIndex &index); - void clicked(const QModelIndex &index); - void doubleClicked(const QModelIndex &index); - void activated(const QModelIndex &index); - void entered(const QModelIndex &index); - void viewportEntered(); - void iconSizeChanged(const QSize &size); - -protected: - enum CursorAction - { - MoveUp, - MoveDown, - MoveLeft, - MoveRight, - MoveHome, - MoveEnd, - MovePageUp, - MovePageDown, - MoveNext, - MovePrevious, - }; - - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) = 0; - virtual int horizontalOffset() const = 0; - virtual int verticalOffset() const = 0; - virtual bool isIndexHidden(const QModelIndex &index) const = 0; - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0; - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0; - virtual QModelIndexList selectedIndexes() const; - virtual bool edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event); - virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *event = 0) const; - virtual void startDrag(Qt::DropActions supportedActions); - - enum State - { - NoState, - DraggingState, - DragSelectingState, - EditingState, - ExpandingState, - CollapsingState, - AnimatingState, - }; - - QAbstractItemView::State state() const; - void setState(QAbstractItemView::State state); - void scheduleDelayedItemsLayout(); - void executeDelayedItemsLayout(); - void scrollDirtyRegion(int dx, int dy); - void setDirtyRegion(const QRegion ®ion); - QPoint dirtyRegionOffset() const; - virtual bool event(QEvent *event); - virtual bool viewportEvent(QEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual void dragEnterEvent(QDragEnterEvent *e); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dragLeaveEvent(QDragLeaveEvent *e); - virtual void dropEvent(QDropEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void resizeEvent(QResizeEvent *e); - virtual void timerEvent(QTimerEvent *e); - - enum DropIndicatorPosition - { - OnItem, - AboveItem, - BelowItem, - OnViewport, - }; - - QAbstractItemView::DropIndicatorPosition dropIndicatorPosition() const; - -public: - void setVerticalScrollMode(QAbstractItemView::ScrollMode mode); - QAbstractItemView::ScrollMode verticalScrollMode() const; - void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode); - QAbstractItemView::ScrollMode horizontalScrollMode() const; - void setDragDropOverwriteMode(bool overwrite); - bool dragDropOverwriteMode() const; - void setDragDropMode(QAbstractItemView::DragDropMode behavior); - QAbstractItemView::DragDropMode dragDropMode() const; - void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemDelegate *itemDelegateForRow(int row) const; - void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemDelegate *itemDelegateForColumn(int column) const; - virtual QAbstractItemDelegate *itemDelegateForIndex(const QModelIndex &index) const; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - void setAutoScrollMargin(int margin); - int autoScrollMargin() const; - -protected: - virtual bool focusNextPrevChild(bool next); - virtual void inputMethodEvent(QInputMethodEvent *event); - virtual QSize viewportSizeHint() const; - virtual bool eventFilter(QObject *object, QEvent *event); - -public: - void setDefaultDropAction(Qt::DropAction dropAction); - Qt::DropAction defaultDropAction() const; - void resetVerticalScrollMode(); - void resetHorizontalScrollMode(); - bool isPersistentEditorOpen(const QModelIndex &index) const; - -protected: - virtual void initViewItemOption(QStyleOptionViewItem *option) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractscrollarea.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractscrollarea.sip deleted file mode 100644 index 71e26df..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractscrollarea.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qabstractscrollarea.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractScrollArea : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractScrollArea(QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractScrollArea(); - Qt::ScrollBarPolicy verticalScrollBarPolicy() const; - void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy); - QScrollBar *verticalScrollBar() const /Transfer/; - Qt::ScrollBarPolicy horizontalScrollBarPolicy() const; - void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy); - QScrollBar *horizontalScrollBar() const /Transfer/; - QWidget *viewport() const /Transfer/; - QSize maximumViewportSize() const; - virtual QSize minimumSizeHint() const; - virtual QSize sizeHint() const; - -protected: - void setViewportMargins(int left, int top, int right, int bottom); - void setViewportMargins(const QMargins &margins); - QMargins viewportMargins() const; - virtual QSize viewportSizeHint() const; - virtual bool event(QEvent *); - virtual bool viewportEvent(QEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void contextMenuEvent(QContextMenuEvent *); - virtual void dragEnterEvent(QDragEnterEvent *); - virtual void dragMoveEvent(QDragMoveEvent *); - virtual void dragLeaveEvent(QDragLeaveEvent *); - virtual void dropEvent(QDropEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual bool eventFilter(QObject *, QEvent *); - virtual void scrollContentsBy(int dx, int dy); - -public: - void setVerticalScrollBar(QScrollBar *scrollbar /Transfer/); - void setHorizontalScrollBar(QScrollBar *scrollbar /Transfer/); - QWidget *cornerWidget() const; - void setCornerWidget(QWidget *widget /Transfer/); - void addScrollBarWidget(QWidget *widget /Transfer/, Qt::Alignment alignment); - QWidgetList scrollBarWidgets(Qt::Alignment alignment) /Transfer/; - void setViewport(QWidget *widget /Transfer/); - virtual void setupViewport(QWidget *viewport); - - enum SizeAdjustPolicy - { - AdjustIgnored, - AdjustToContentsOnFirstShow, - AdjustToContents, - }; - - QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy() const; - void setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy policy); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractslider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractslider.sip deleted file mode 100644 index 54fd220..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractslider.sip +++ /dev/null @@ -1,98 +0,0 @@ -// qabstractslider.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractSlider : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractSlider(QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractSlider(); - Qt::Orientation orientation() const; - void setMinimum(int); - int minimum() const; - void setMaximum(int); - int maximum() const; - void setRange(int min, int max); - void setSingleStep(int); - int singleStep() const; - void setPageStep(int); - int pageStep() const; - void setTracking(bool enable); - bool hasTracking() const; - void setSliderDown(bool); - bool isSliderDown() const; - void setSliderPosition(int); - int sliderPosition() const; - void setInvertedAppearance(bool); - bool invertedAppearance() const; - void setInvertedControls(bool); - bool invertedControls() const; - - enum SliderAction - { - SliderNoAction, - SliderSingleStepAdd, - SliderSingleStepSub, - SliderPageStepAdd, - SliderPageStepSub, - SliderToMinimum, - SliderToMaximum, - SliderMove, - }; - - int value() const; - void triggerAction(QAbstractSlider::SliderAction action); - -public slots: - void setValue(int); - void setOrientation(Qt::Orientation); - -signals: - void valueChanged(int value); - void sliderPressed(); - void sliderMoved(int position); - void sliderReleased(); - void rangeChanged(int min, int max); - void actionTriggered(int action); - -protected: - void setRepeatAction(QAbstractSlider::SliderAction action, int thresholdTime = 500, int repeatTime = 50); - QAbstractSlider::SliderAction repeatAction() const; - - enum SliderChange - { - SliderRangeChange, - SliderOrientationChange, - SliderStepsChange, - SliderValueChange, - }; - - virtual void sliderChange(QAbstractSlider::SliderChange change); - virtual bool event(QEvent *e); - virtual void keyPressEvent(QKeyEvent *ev); - virtual void timerEvent(QTimerEvent *); - virtual void wheelEvent(QWheelEvent *e); - virtual void changeEvent(QEvent *e); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractspinbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractspinbox.sip deleted file mode 100644 index 1c91d6f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qabstractspinbox.sip +++ /dev/null @@ -1,124 +0,0 @@ -// qabstractspinbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QAbstractSpinBox : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractSpinBox(QWidget *parent /TransferThis/ = 0); - virtual ~QAbstractSpinBox(); - - enum StepEnabledFlag /BaseType=Flag/ - { - StepNone, - StepUpEnabled, - StepDownEnabled, - }; - - typedef QFlags StepEnabled; - - enum ButtonSymbols - { - UpDownArrows, - PlusMinus, - NoButtons, - }; - - QAbstractSpinBox::ButtonSymbols buttonSymbols() const; - void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs); - QString text() const; - QString specialValueText() const; - void setSpecialValueText(const QString &s); - bool wrapping() const; - void setWrapping(bool w); - void setReadOnly(bool r); - bool isReadOnly() const; - void setAlignment(Qt::Alignment flag); - Qt::Alignment alignment() const; - void setFrame(bool); - bool hasFrame() const; - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void interpretText(); - virtual bool event(QEvent *event); - virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; - virtual void fixup(QString &input /In,Out/) const; - virtual void stepBy(int steps); - -public slots: - void stepUp(); - void stepDown(); - void selectAll(); - virtual void clear(); - -signals: - void editingFinished(); - -protected: - virtual void resizeEvent(QResizeEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void keyReleaseEvent(QKeyEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void contextMenuEvent(QContextMenuEvent *e); - virtual void changeEvent(QEvent *e); - virtual void closeEvent(QCloseEvent *e); - virtual void hideEvent(QHideEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void timerEvent(QTimerEvent *e); - virtual void paintEvent(QPaintEvent *e); - virtual void showEvent(QShowEvent *e); - QLineEdit *lineEdit() const; - void setLineEdit(QLineEdit *e /Transfer/); - virtual QAbstractSpinBox::StepEnabled stepEnabled() const; - virtual void initStyleOption(QStyleOptionSpinBox *option) const; - -public: - enum CorrectionMode - { - CorrectToPreviousValue, - CorrectToNearestValue, - }; - - void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm); - QAbstractSpinBox::CorrectionMode correctionMode() const; - bool hasAcceptableInput() const; - void setAccelerated(bool on); - bool isAccelerated() const; - void setKeyboardTracking(bool kt); - bool keyboardTracking() const; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; - void setGroupSeparatorShown(bool shown); - bool isGroupSeparatorShown() const; - - enum StepType - { - DefaultStepType, - AdaptiveDecimalStepType, - }; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qapplication.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qapplication.sip deleted file mode 100644 index 6f4acc5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qapplication.sip +++ /dev/null @@ -1,310 +0,0 @@ -// qapplication.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -typedef QList QWidgetList; - -class QApplication : public QGuiApplication -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - static struct class_graph { - const char *name; - sipTypeDef **type; - int yes, no; - } graph[] = { - {sipName_QWidget, &sipType_QWidget, 18, 1}, - {sipName_QAbstractItemDelegate, &sipType_QAbstractItemDelegate, 89, 2}, - {sipName_QApplication, &sipType_QApplication, -1, 3}, - {sipName_QLayout, &sipType_QLayout, 91, 4}, - {sipName_QButtonGroup, &sipType_QButtonGroup, -1, 5}, - {sipName_QStyle, &sipType_QStyle, 97, 6}, - {sipName_QCompleter, &sipType_QCompleter, -1, 7}, - {sipName_QDataWidgetMapper, &sipType_QDataWidgetMapper, -1, 8}, - {sipName_QGesture, &sipType_QGesture, 99, 9}, - {sipName_QGraphicsAnchor, &sipType_QGraphicsAnchor, -1, 10}, - {sipName_QGraphicsEffect, &sipType_QGraphicsEffect, 104, 11}, - {sipName_QGraphicsObject, &sipType_QGraphicsObject, 108, 12}, - {sipName_QGraphicsTransform, &sipType_QGraphicsTransform, 111, 13}, - {sipName_QGraphicsScene, &sipType_QGraphicsScene, -1, 14}, - {sipName_QPlainTextDocumentLayout, &sipType_QPlainTextDocumentLayout, -1, 15}, - {sipName_QScroller, &sipType_QScroller, -1, 16}, - {sipName_QSystemTrayIcon, &sipType_QSystemTrayIcon, -1, 17}, - {sipName_QWidgetAction, &sipType_QWidgetAction, -1, -1}, - {sipName_QAbstractButton, &sipType_QAbstractButton, 45, 19}, - {sipName_QFrame, &sipType_QFrame, 50, 20}, - {sipName_QAbstractSlider, &sipType_QAbstractSlider, 72, 21}, - {sipName_QAbstractSpinBox, &sipType_QAbstractSpinBox, 75, 22}, - {sipName_QCalendarWidget, &sipType_QCalendarWidget, -1, 23}, - {sipName_QDialog, &sipType_QDialog, 80, 24}, - {sipName_QComboBox, &sipType_QComboBox, 88, 25}, - {sipName_QDialogButtonBox, &sipType_QDialogButtonBox, -1, 26}, - {sipName_QDockWidget, &sipType_QDockWidget, -1, 27}, - {sipName_QFocusFrame, &sipType_QFocusFrame, -1, 28}, - {sipName_QGroupBox, &sipType_QGroupBox, -1, 29}, - {sipName_QKeySequenceEdit, &sipType_QKeySequenceEdit, -1, 30}, - {sipName_QLineEdit, &sipType_QLineEdit, -1, 31}, - {sipName_QMainWindow, &sipType_QMainWindow, -1, 32}, - {sipName_QMdiSubWindow, &sipType_QMdiSubWindow, -1, 33}, - {sipName_QMenu, &sipType_QMenu, -1, 34}, - {sipName_QMenuBar, &sipType_QMenuBar, -1, 35}, - {sipName_QProgressBar, &sipType_QProgressBar, -1, 36}, - {sipName_QRubberBand, &sipType_QRubberBand, -1, 37}, - {sipName_QSizeGrip, &sipType_QSizeGrip, -1, 38}, - {sipName_QSplashScreen, &sipType_QSplashScreen, -1, 39}, - {sipName_QSplitterHandle, &sipType_QSplitterHandle, -1, 40}, - {sipName_QStatusBar, &sipType_QStatusBar, -1, 41}, - {sipName_QTabBar, &sipType_QTabBar, -1, 42}, - {sipName_QTabWidget, &sipType_QTabWidget, -1, 43}, - {sipName_QToolBar, &sipType_QToolBar, -1, 44}, - {sipName_QWizardPage, &sipType_QWizardPage, -1, -1}, - {sipName_QCheckBox, &sipType_QCheckBox, -1, 46}, - {sipName_QPushButton, &sipType_QPushButton, 49, 47}, - {sipName_QRadioButton, &sipType_QRadioButton, -1, 48}, - {sipName_QToolButton, &sipType_QToolButton, -1, -1}, - {sipName_QCommandLinkButton, &sipType_QCommandLinkButton, -1, -1}, - {sipName_QAbstractScrollArea, &sipType_QAbstractScrollArea, 56, 51}, - {sipName_QLCDNumber, &sipType_QLCDNumber, -1, 52}, - {sipName_QLabel, &sipType_QLabel, -1, 53}, - {sipName_QSplitter, &sipType_QSplitter, -1, 54}, - {sipName_QStackedWidget, &sipType_QStackedWidget, -1, 55}, - {sipName_QToolBox, &sipType_QToolBox, -1, -1}, - {sipName_QAbstractItemView, &sipType_QAbstractItemView, 62, 57}, - {sipName_QGraphicsView, &sipType_QGraphicsView, -1, 58}, - {sipName_QMdiArea, &sipType_QMdiArea, -1, 59}, - {sipName_QPlainTextEdit, &sipType_QPlainTextEdit, -1, 60}, - {sipName_QScrollArea, &sipType_QScrollArea, -1, 61}, - {sipName_QTextEdit, &sipType_QTextEdit, 71, -1}, - {sipName_QColumnView, &sipType_QColumnView, -1, 63}, - {sipName_QHeaderView, &sipType_QHeaderView, -1, 64}, - {sipName_QListView, &sipType_QListView, 67, 65}, - {sipName_QTableView, &sipType_QTableView, 69, 66}, - {sipName_QTreeView, &sipType_QTreeView, 70, -1}, - {sipName_QListWidget, &sipType_QListWidget, -1, 68}, - {sipName_QUndoView, &sipType_QUndoView, -1, -1}, - {sipName_QTableWidget, &sipType_QTableWidget, -1, -1}, - {sipName_QTreeWidget, &sipType_QTreeWidget, -1, -1}, - {sipName_QTextBrowser, &sipType_QTextBrowser, -1, -1}, - {sipName_QDial, &sipType_QDial, -1, 73}, - {sipName_QScrollBar, &sipType_QScrollBar, -1, 74}, - {sipName_QSlider, &sipType_QSlider, -1, -1}, - {sipName_QDateTimeEdit, &sipType_QDateTimeEdit, 78, 76}, - {sipName_QDoubleSpinBox, &sipType_QDoubleSpinBox, -1, 77}, - {sipName_QSpinBox, &sipType_QSpinBox, -1, -1}, - {sipName_QDateEdit, &sipType_QDateEdit, -1, 79}, - {sipName_QTimeEdit, &sipType_QTimeEdit, -1, -1}, - {sipName_QColorDialog, &sipType_QColorDialog, -1, 81}, - {sipName_QErrorMessage, &sipType_QErrorMessage, -1, 82}, - {sipName_QFileDialog, &sipType_QFileDialog, -1, 83}, - {sipName_QFontDialog, &sipType_QFontDialog, -1, 84}, - {sipName_QInputDialog, &sipType_QInputDialog, -1, 85}, - {sipName_QMessageBox, &sipType_QMessageBox, -1, 86}, - {sipName_QProgressDialog, &sipType_QProgressDialog, -1, 87}, - {sipName_QWizard, &sipType_QWizard, -1, -1}, - {sipName_QFontComboBox, &sipType_QFontComboBox, -1, -1}, - {sipName_QItemDelegate, &sipType_QItemDelegate, -1, 90}, - {sipName_QStyledItemDelegate, &sipType_QStyledItemDelegate, -1, -1}, - {sipName_QBoxLayout, &sipType_QBoxLayout, 95, 92}, - {sipName_QFormLayout, &sipType_QFormLayout, -1, 93}, - {sipName_QGridLayout, &sipType_QGridLayout, -1, 94}, - {sipName_QStackedLayout, &sipType_QStackedLayout, -1, -1}, - {sipName_QHBoxLayout, &sipType_QHBoxLayout, -1, 96}, - {sipName_QVBoxLayout, &sipType_QVBoxLayout, -1, -1}, - {sipName_QCommonStyle, &sipType_QCommonStyle, 98, -1}, - {sipName_QProxyStyle, &sipType_QProxyStyle, -1, -1}, - {sipName_QPanGesture, &sipType_QPanGesture, -1, 100}, - {sipName_QPinchGesture, &sipType_QPinchGesture, -1, 101}, - {sipName_QSwipeGesture, &sipType_QSwipeGesture, -1, 102}, - {sipName_QTapAndHoldGesture, &sipType_QTapAndHoldGesture, -1, 103}, - {sipName_QTapGesture, &sipType_QTapGesture, -1, -1}, - {sipName_QGraphicsBlurEffect, &sipType_QGraphicsBlurEffect, -1, 105}, - {sipName_QGraphicsColorizeEffect, &sipType_QGraphicsColorizeEffect, -1, 106}, - {sipName_QGraphicsDropShadowEffect, &sipType_QGraphicsDropShadowEffect, -1, 107}, - {sipName_QGraphicsOpacityEffect, &sipType_QGraphicsOpacityEffect, -1, -1}, - {sipName_QGraphicsWidget, &sipType_QGraphicsWidget, 110, 109}, - {sipName_QGraphicsTextItem, &sipType_QGraphicsTextItem, -1, -1}, - {sipName_QGraphicsProxyWidget, &sipType_QGraphicsProxyWidget, -1, -1}, - {sipName_QGraphicsRotation, &sipType_QGraphicsRotation, -1, 112}, - {sipName_QGraphicsScale, &sipType_QGraphicsScale, -1, -1}, - }; - - int i = 0; - - sipType = NULL; - - do - { - struct class_graph *cg = &graph[i]; - - if (cg->name != NULL && sipCpp->inherits(cg->name)) - { - sipType = *cg->type; - i = cg->yes; - } - else - i = cg->no; - } - while (i >= 0); -%End - -public: - QApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = QCoreApplication::ApplicationFlags)]; -%MethodCode - // The Python interface is a list of argument strings that is modified. - - int argc; - char **argv; - - // Convert the list. - if ((argv = pyqt6_qtwidgets_from_argv_list(a0, argc)) == NULL) - sipIsErr = 1; - else - { - // Create it now the arguments are right. - static int nargc; - nargc = argc; - - Py_BEGIN_ALLOW_THREADS - sipCpp = new sipQApplication(nargc, argv, QCoreApplication::ApplicationFlags); - Py_END_ALLOW_THREADS - - // Now modify the original list. - pyqt6_qtwidgets_update_argv_list(a0, argc, argv); - } -%End - - virtual ~QApplication() /ReleaseGIL/; -%MethodCode - pyqt6_qtwidgets_cleanup_qobjects(); -%End - - static QStyle *style(); - static void setStyle(QStyle * /Transfer/); - static QStyle *setStyle(const QString &); - static QPalette palette(); - static QPalette palette(const QWidget *); - static QPalette palette(const char *className); - static void setPalette(const QPalette &, const char *className = 0); - static QFont font(); - static QFont font(const QWidget *); - static QFont font(const char *className); - static void setFont(const QFont &, const char *className = 0); - static QWidgetList allWidgets(); - static QWidgetList topLevelWidgets(); - static QWidget *activePopupWidget(); - static QWidget *activeModalWidget(); - static QWidget *focusWidget(); - static QWidget *activeWindow(); - static void setActiveWindow(QWidget *act); - static QWidget *widgetAt(const QPoint &p); - static QWidget *widgetAt(int x, int y); - static QWidget *topLevelAt(const QPoint &p); - static QWidget *topLevelAt(int x, int y); - static void beep(); - static void alert(QWidget *widget, int msecs = 0) /ReleaseGIL/; - static void setCursorFlashTime(int); - static int cursorFlashTime(); - static void setDoubleClickInterval(int); - static int doubleClickInterval(); - static void setKeyboardInputInterval(int); - static int keyboardInputInterval(); - static void setWheelScrollLines(int); - static int wheelScrollLines(); - static void setStartDragTime(int ms); - static int startDragTime(); - static void setStartDragDistance(int l); - static int startDragDistance(); - static bool isEffectEnabled(Qt::UIEffect); - static void setEffectEnabled(Qt::UIEffect, bool enabled = true); - static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - virtual bool notify(QObject *, QEvent *) /ReleaseGIL/; - bool autoSipEnabled() const; - QString styleSheet() const; - -signals: - void focusChanged(QWidget *old, QWidget *now); - -public slots: - static void aboutQt(); - static void closeAllWindows(); - void setAutoSipEnabled(const bool enabled); - void setStyleSheet(const QString &sheet); - -protected: - virtual bool event(QEvent *); -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef void (*pyqt6_qtwidgets_cleanup_qobjects_t)(); -extern pyqt6_qtwidgets_cleanup_qobjects_t pyqt6_qtwidgets_cleanup_qobjects; - -typedef char **(*pyqt6_qtwidgets_from_argv_list_t)(PyObject *, int &); -extern pyqt6_qtwidgets_from_argv_list_t pyqt6_qtwidgets_from_argv_list; - -typedef sipErrorState (*pyqt6_qtwidgets_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); -extern pyqt6_qtwidgets_get_connection_parts_t pyqt6_qtwidgets_get_connection_parts; - -typedef sipErrorState (*pyqt6_qtwidgets_get_signal_signature_t)(PyObject *, QObject *, QByteArray &); -extern pyqt6_qtwidgets_get_signal_signature_t pyqt6_qtwidgets_get_signal_signature; - -typedef void (*pyqt6_qtwidgets_update_argv_list_t)(PyObject *, int, char **); -extern pyqt6_qtwidgets_update_argv_list_t pyqt6_qtwidgets_update_argv_list; - -// This is needed for Qt v5.0.0. -#if defined(B0) -#undef B0 -#endif -%End - -%ModuleCode -#include "qpywidgets_api.h" - -// Imports from QtCore. -pyqt6_qtwidgets_cleanup_qobjects_t pyqt6_qtwidgets_cleanup_qobjects; -pyqt6_qtwidgets_from_argv_list_t pyqt6_qtwidgets_from_argv_list; -pyqt6_qtwidgets_get_connection_parts_t pyqt6_qtwidgets_get_connection_parts; -pyqt6_qtwidgets_get_signal_signature_t pyqt6_qtwidgets_get_signal_signature; -pyqt6_qtwidgets_update_argv_list_t pyqt6_qtwidgets_update_argv_list; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtwidgets_cleanup_qobjects = (pyqt6_qtwidgets_cleanup_qobjects_t)sipImportSymbol("pyqt6_cleanup_qobjects"); -Q_ASSERT(pyqt6_qtwidgets_cleanup_qobjects); - -pyqt6_qtwidgets_from_argv_list = (pyqt6_qtwidgets_from_argv_list_t)sipImportSymbol("pyqt6_from_argv_list"); -Q_ASSERT(pyqt6_qtwidgets_from_argv_list); - -pyqt6_qtwidgets_get_connection_parts = (pyqt6_qtwidgets_get_connection_parts_t)sipImportSymbol("pyqt6_get_connection_parts"); -Q_ASSERT(pyqt6_qtwidgets_get_connection_parts); - -pyqt6_qtwidgets_get_signal_signature = (pyqt6_qtwidgets_get_signal_signature_t)sipImportSymbol("pyqt6_get_signal_signature"); -Q_ASSERT(pyqt6_qtwidgets_get_signal_signature); - -pyqt6_qtwidgets_update_argv_list = (pyqt6_qtwidgets_update_argv_list_t)sipImportSymbol("pyqt6_update_argv_list"); -Q_ASSERT(pyqt6_qtwidgets_update_argv_list); - -qpywidgets_post_init(); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qboxlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qboxlayout.sip deleted file mode 100644 index 7f969e5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qboxlayout.sip +++ /dev/null @@ -1,145 +0,0 @@ -// qboxlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QBoxLayout : public QLayout -{ -%TypeHeaderCode -#include -%End - -public: - enum Direction - { - LeftToRight, - RightToLeft, - TopToBottom, - BottomToTop, - Down, - Up, - }; - - QBoxLayout(QBoxLayout::Direction direction, QWidget *parent /TransferThis/ = 0); - virtual ~QBoxLayout(); - QBoxLayout::Direction direction() const; - void setDirection(QBoxLayout::Direction); - void addSpacing(int size); - void addStretch(int stretch = 0); - void addWidget(QWidget * /GetWrapper/, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->addWidget(a0, a1, *a2); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - void addLayout(QLayout *layout /Transfer/, int stretch = 0); - void addStrut(int); - virtual void addItem(QLayoutItem * /Transfer/); - void insertSpacing(int index, int size); - void insertStretch(int index, int stretch = 0); - void insertWidget(int index, QWidget *widget /GetWrapper/, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->insertWidget(a0, a1, a2, *a3); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a1Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows insertWidget(QWidget()). - sipTransferTo(a1Wrapper, sipSelf); - } -%End - - void insertLayout(int index, QLayout *layout /Transfer/, int stretch = 0); - bool setStretchFactor(QWidget *w, int stretch); - bool setStretchFactor(QLayout *l, int stretch); - virtual QSize sizeHint() const; - virtual QSize minimumSize() const; - virtual QSize maximumSize() const; - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int) const; - virtual int minimumHeightForWidth(int) const; - virtual Qt::Orientations expandingDirections() const; - virtual void invalidate(); - virtual QLayoutItem *itemAt(int) const; - virtual QLayoutItem *takeAt(int) /TransferBack/; - virtual int count() const; - virtual void setGeometry(const QRect &); - virtual int spacing() const; - virtual void setSpacing(int spacing); - void addSpacerItem(QSpacerItem *spacerItem /Transfer/); - void insertSpacerItem(int index, QSpacerItem *spacerItem /Transfer/); - void setStretch(int index, int stretch); - int stretch(int index) const; - void insertItem(int index, QLayoutItem * /Transfer/); -}; - -class QHBoxLayout : public QBoxLayout -{ -%TypeHeaderCode -#include -%End - -public: - QHBoxLayout(); - explicit QHBoxLayout(QWidget *parent /TransferThis/); - virtual ~QHBoxLayout(); -}; - -class QVBoxLayout : public QBoxLayout -{ -%TypeHeaderCode -#include -%End - -public: - QVBoxLayout(); - explicit QVBoxLayout(QWidget *parent /TransferThis/); - virtual ~QVBoxLayout(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qbuttongroup.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qbuttongroup.sip deleted file mode 100644 index 4ec8374..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qbuttongroup.sip +++ /dev/null @@ -1,52 +0,0 @@ -// qbuttongroup.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QButtonGroup : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QButtonGroup(QObject *parent /TransferThis/ = 0); - virtual ~QButtonGroup(); - void setExclusive(bool); - bool exclusive() const; - void addButton(QAbstractButton *, int id = -1); - void removeButton(QAbstractButton *); - QList buttons() const; - QAbstractButton *button(int id) const; - QAbstractButton *checkedButton() const; - void setId(QAbstractButton *button, int id); - int id(QAbstractButton *button) const; - int checkedId() const; - -signals: - void buttonClicked(QAbstractButton *); - void buttonPressed(QAbstractButton *); - void buttonReleased(QAbstractButton *); - void buttonToggled(QAbstractButton *, bool); - void idClicked(int); - void idPressed(int); - void idReleased(int); - void idToggled(int, bool); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcalendarwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcalendarwidget.sip deleted file mode 100644 index ed780f3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcalendarwidget.sip +++ /dev/null @@ -1,125 +0,0 @@ -// qcalendarwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCalendarWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum HorizontalHeaderFormat - { - NoHorizontalHeader, - SingleLetterDayNames, - ShortDayNames, - LongDayNames, - }; - - enum VerticalHeaderFormat - { - NoVerticalHeader, - ISOWeekNumbers, - }; - - enum SelectionMode - { - NoSelection, - SingleSelection, - }; - - explicit QCalendarWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QCalendarWidget(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - QDate selectedDate() const; - int yearShown() const; - int monthShown() const; - QDate minimumDate() const; - void setMinimumDate(QDate date); - QDate maximumDate() const; - void setMaximumDate(QDate date); - Qt::DayOfWeek firstDayOfWeek() const; - void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek); - bool isGridVisible() const; - void setGridVisible(bool show); - QCalendarWidget::SelectionMode selectionMode() const; - void setSelectionMode(QCalendarWidget::SelectionMode mode); - QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const; - void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format); - QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const; - void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format); - QTextCharFormat headerTextFormat() const; - void setHeaderTextFormat(const QTextCharFormat &format); - QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const; - void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format); - QMap dateTextFormat() const; - QTextCharFormat dateTextFormat(QDate date) const; - void setDateTextFormat(QDate date, const QTextCharFormat &format); - -protected: - void updateCell(QDate date); - void updateCells(); - virtual bool event(QEvent *event); - virtual bool eventFilter(QObject *watched, QEvent *event); - virtual void mousePressEvent(QMouseEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - virtual void paintCell(QPainter *painter, const QRect &rect, QDate date) const; - -public slots: - void setCurrentPage(int year, int month); - void setDateRange(QDate min, QDate max); - void setSelectedDate(QDate date); - void showNextMonth(); - void showNextYear(); - void showPreviousMonth(); - void showPreviousYear(); - void showSelectedDate(); - void showToday(); - -signals: - void activated(QDate date); - void clicked(QDate date); - void currentPageChanged(int year, int month); - void selectionChanged(); - -public: - bool isNavigationBarVisible() const; - bool isDateEditEnabled() const; - void setDateEditEnabled(bool enable); - int dateEditAcceptDelay() const; - void setDateEditAcceptDelay(int delay); - -public slots: - void setNavigationBarVisible(bool visible); - -public: - QCalendar calendar() const; - void setCalendar(QCalendar calendar); -%If (Qt_6_6_0 -) - void clearMinimumDate(); -%End -%If (Qt_6_6_0 -) - void clearMaximumDate(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcheckbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcheckbox.sip deleted file mode 100644 index 148eb0b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcheckbox.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qcheckbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCheckBox : public QAbstractButton -{ -%TypeHeaderCode -#include -%End - -public: - explicit QCheckBox(QWidget *parent /TransferThis/ = 0); - QCheckBox(const QString &text, QWidget *parent /TransferThis/ = 0); - virtual ~QCheckBox(); - virtual QSize sizeHint() const; - void setTristate(bool on = true); - bool isTristate() const; - Qt::CheckState checkState() const; - void setCheckState(Qt::CheckState state); - virtual QSize minimumSizeHint() const; - -signals: - void stateChanged(int); -%If (Qt_6_7_0 -) - void checkStateChanged(Qt::CheckState); -%End - -protected: - virtual bool hitButton(const QPoint &pos) const; - virtual void checkStateSet(); - virtual void nextCheckState(); - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void initStyleOption(QStyleOptionButton *option) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolordialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolordialog.sip deleted file mode 100644 index 10a68bb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolordialog.sip +++ /dev/null @@ -1,86 +0,0 @@ -// qcolordialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QColorDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum ColorDialogOption /BaseType=Flag/ - { - ShowAlphaChannel, - NoButtons, - DontUseNativeDialog, -%If (Qt_6_7_0 -) - NoEyeDropperButton, -%End - }; - - typedef QFlags ColorDialogOptions; - explicit QColorDialog(QWidget *parent /TransferThis/ = 0); - QColorDialog(const QColor &initial, QWidget *parent /TransferThis/ = 0); - virtual ~QColorDialog(); - static QColor getColor(const QColor &initial = Qt::white, QWidget *parent = 0, const QString &title = QString(), QColorDialog::ColorDialogOptions options = QColorDialog::ColorDialogOptions()) /ReleaseGIL/; - static int customCount(); - static QColor customColor(int index); - static void setCustomColor(int index, QColor color); - static QColor standardColor(int index); - static void setStandardColor(int index, QColor color); - -public slots: - virtual void open(); - -signals: - void colorSelected(const QColor &color); - void currentColorChanged(const QColor &color); - -protected: - virtual void changeEvent(QEvent *e); - virtual void done(int result); - -public: - void setCurrentColor(const QColor &color); - QColor currentColor() const; - QColor selectedColor() const; - void setOption(QColorDialog::ColorDialogOption option, bool on = true); - bool testOption(QColorDialog::ColorDialogOption option) const; - void setOptions(QColorDialog::ColorDialogOptions options); - QColorDialog::ColorDialogOptions options() const; - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual void setVisible(bool visible); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolumnview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolumnview.sip deleted file mode 100644 index a8a2b20..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcolumnview.sip +++ /dev/null @@ -1,65 +0,0 @@ -// qcolumnview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QColumnView : public QAbstractItemView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QColumnView(QWidget *parent /TransferThis/ = 0); - virtual ~QColumnView(); - QList columnWidths() const; - QWidget *previewWidget() const; - bool resizeGripsVisible() const; - void setColumnWidths(const QList &list); - void setPreviewWidget(QWidget *widget /Transfer/); - void setResizeGripsVisible(bool visible); - virtual QModelIndex indexAt(const QPoint &point) const; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - virtual QSize sizeHint() const; - virtual QRect visualRect(const QModelIndex &index) const; - virtual void setModel(QAbstractItemModel *model /KeepReference/); - virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); - virtual void setRootIndex(const QModelIndex &index); - virtual void selectAll(); - -signals: - void updatePreviewWidget(const QModelIndex &index); - -protected: - virtual QAbstractItemView *createColumn(const QModelIndex &rootIndex); - void initializeColumn(QAbstractItemView *column) const; - virtual bool isIndexHidden(const QModelIndex &index) const; - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); - virtual void resizeEvent(QResizeEvent *event); - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; - virtual int horizontalOffset() const; - virtual int verticalOffset() const; - virtual void scrollContentsBy(int dx, int dy); - virtual void rowsInserted(const QModelIndex &parent, int start, int end); - -protected slots: - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcombobox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcombobox.sip deleted file mode 100644 index 400c711..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcombobox.sip +++ /dev/null @@ -1,154 +0,0 @@ -// qcombobox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QComboBox : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QComboBox(QWidget *parent /TransferThis/ = 0); - virtual ~QComboBox(); - int maxVisibleItems() const; - void setMaxVisibleItems(int maxItems); - int count() const /__len__/; - void setMaxCount(int max); - int maxCount() const; - bool duplicatesEnabled() const; - void setDuplicatesEnabled(bool enable); - void setFrame(bool); - bool hasFrame() const; - int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const; - int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const; - - enum InsertPolicy - { - NoInsert, - InsertAtTop, - InsertAtCurrent, - InsertAtBottom, - InsertAfterCurrent, - InsertBeforeCurrent, - InsertAlphabetically, - }; - - QComboBox::InsertPolicy insertPolicy() const; - void setInsertPolicy(QComboBox::InsertPolicy policy); - - enum SizeAdjustPolicy - { - AdjustToContents, - AdjustToContentsOnFirstShow, - AdjustToMinimumContentsLengthWithIcon, - }; - - QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const; - void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy); - int minimumContentsLength() const; - void setMinimumContentsLength(int characters); - QSize iconSize() const; - void setIconSize(const QSize &size); - bool isEditable() const; - void setEditable(bool editable); - void setLineEdit(QLineEdit *edit /Transfer/); - QLineEdit *lineEdit() const; - void setValidator(const QValidator *v /KeepReference/); - const QValidator *validator() const; - QAbstractItemDelegate *itemDelegate() const; - void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemModel *model() const; - virtual void setModel(QAbstractItemModel *model /KeepReference/); - QModelIndex rootModelIndex() const; - void setRootModelIndex(const QModelIndex &index); - int modelColumn() const; - void setModelColumn(int visibleColumn); - int currentIndex() const; - void setCurrentIndex(int index); - QString currentText() const; - QString itemText(int index) const; - QIcon itemIcon(int index) const; - QVariant itemData(int index, int role = Qt::UserRole) const; - void addItems(const QStringList &texts); - void addItem(const QString &text, const QVariant &userData = QVariant()); - void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); - void insertItem(int index, const QString &text, const QVariant &userData = QVariant()); - void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); - void insertItems(int index, const QStringList &texts); - void removeItem(int index); - void setItemText(int index, const QString &text); - void setItemIcon(int index, const QIcon &icon); - void setItemData(int index, const QVariant &value, int role = Qt::UserRole); - QAbstractItemView *view() const; - void setView(QAbstractItemView *itemView /Transfer/); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - virtual void showPopup(); - virtual void hidePopup(); - virtual bool event(QEvent *event); - void setCompleter(QCompleter *c /KeepReference/); - QCompleter *completer() const; - void insertSeparator(int index); - -public slots: - void clear(); - void clearEditText(); - void setEditText(const QString &text); - void setCurrentText(const QString &text); - -signals: - void editTextChanged(const QString &); - void activated(int index); - void currentIndexChanged(int index); - void currentTextChanged(const QString &); - void highlighted(int index); - -protected: - virtual void initStyleOption(QStyleOptionComboBox *option) const; - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void changeEvent(QEvent *e); - virtual void resizeEvent(QResizeEvent *e); - virtual void paintEvent(QPaintEvent *e); - virtual void showEvent(QShowEvent *e); - virtual void hideEvent(QHideEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void keyReleaseEvent(QKeyEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual void contextMenuEvent(QContextMenuEvent *e); - virtual void inputMethodEvent(QInputMethodEvent *); - -public: - virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; - QVariant currentData(int role = Qt::UserRole) const; - QVariant inputMethodQuery(Qt::InputMethodQuery query, const QVariant &argument) const; - -signals: - void textActivated(const QString &); - void textHighlighted(const QString &); - -public: - void setPlaceholderText(const QString &placeholderText); - QString placeholderText() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommandlinkbutton.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommandlinkbutton.sip deleted file mode 100644 index 16fdba4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommandlinkbutton.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qcommandlinkbutton.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCommandLinkButton : public QPushButton -{ -%TypeHeaderCode -#include -%End - -public: - explicit QCommandLinkButton(QWidget *parent /TransferThis/ = 0); - QCommandLinkButton(const QString &text, QWidget *parent /TransferThis/ = 0); - QCommandLinkButton(const QString &text, const QString &description, QWidget *parent /TransferThis/ = 0); - virtual ~QCommandLinkButton(); - QString description() const; - void setDescription(const QString &description); - virtual QSize sizeHint() const; - virtual int heightForWidth(int) const; - virtual QSize minimumSizeHint() const; -%If (Qt_6_1_0 -) - virtual void initStyleOption(QStyleOptionButton *option) const; -%End - -protected: - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommonstyle.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommonstyle.sip deleted file mode 100644 index e00e60e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcommonstyle.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qcommonstyle.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCommonStyle : public QStyle -{ -%TypeHeaderCode -#include -%End - -public: - QCommonStyle(); - virtual ~QCommonStyle(); - virtual void polish(QWidget *widget); - virtual void unpolish(QWidget *widget); - virtual void polish(QApplication *app); - virtual void unpolish(QApplication *application); - virtual void polish(QPalette & /In,Out/); - virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const; - virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const; - virtual QRect subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const; - virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const; - virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const; - virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const; - virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const; - virtual int pixelMetric(QStyle::PixelMetric m, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual int styleHint(QStyle::StyleHint sh, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; - virtual QPixmap standardPixmap(QStyle::StandardPixmap sp, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const; - virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcompleter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcompleter.sip deleted file mode 100644 index 8c1ec77..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qcompleter.sip +++ /dev/null @@ -1,95 +0,0 @@ -// qcompleter.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QCompleter : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum CompletionMode - { - PopupCompletion, - UnfilteredPopupCompletion, - InlineCompletion, - }; - - enum ModelSorting - { - UnsortedModel, - CaseSensitivelySortedModel, - CaseInsensitivelySortedModel, - }; - - QCompleter(QAbstractItemModel *model, QObject *parent /TransferThis/ = 0); - QCompleter(const QStringList &list, QObject *parent /TransferThis/ = 0); - QCompleter(QObject *parent /TransferThis/ = 0); - virtual ~QCompleter(); - void setWidget(QWidget *widget /Transfer/); - QWidget *widget() const; - void setModel(QAbstractItemModel *c /KeepReference/); - QAbstractItemModel *model() const; - void setCompletionMode(QCompleter::CompletionMode mode); - QCompleter::CompletionMode completionMode() const; - QAbstractItemView *popup() const; - void setPopup(QAbstractItemView *popup /Transfer/); - void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity); - Qt::CaseSensitivity caseSensitivity() const; - void setModelSorting(QCompleter::ModelSorting sorting); - QCompleter::ModelSorting modelSorting() const; - void setCompletionColumn(int column); - int completionColumn() const; - void setCompletionRole(int role); - int completionRole() const; - int completionCount() const; - bool setCurrentRow(int row); - int currentRow() const; - QModelIndex currentIndex() const; - QString currentCompletion() const; - QAbstractItemModel *completionModel() const; - QString completionPrefix() const; - virtual QString pathFromIndex(const QModelIndex &index) const; - virtual QStringList splitPath(const QString &path) const; - bool wrapAround() const; - -public slots: - void complete(const QRect &rect = QRect()); - void setCompletionPrefix(const QString &prefix); - void setWrapAround(bool wrap); - -protected: - virtual bool eventFilter(QObject *o, QEvent *e); - virtual bool event(QEvent *); - -signals: - void activated(const QString &text); - void activated(const QModelIndex &index); - void highlighted(const QString &text); - void highlighted(const QModelIndex &index); - -public: - int maxVisibleItems() const; - void setMaxVisibleItems(int maxItems); - void setFilterMode(Qt::MatchFlags filterMode); - Qt::MatchFlags filterMode() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatawidgetmapper.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatawidgetmapper.sip deleted file mode 100644 index f33af24..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatawidgetmapper.sip +++ /dev/null @@ -1,69 +0,0 @@ -// qdatawidgetmapper.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDataWidgetMapper : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum SubmitPolicy - { - AutoSubmit, - ManualSubmit, - }; - - explicit QDataWidgetMapper(QObject *parent /TransferThis/ = 0); - virtual ~QDataWidgetMapper(); - void setModel(QAbstractItemModel *model /KeepReference/); - QAbstractItemModel *model() const; - void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemDelegate *itemDelegate() const; - void setRootIndex(const QModelIndex &index); - QModelIndex rootIndex() const; - void setOrientation(Qt::Orientation aOrientation); - Qt::Orientation orientation() const; - void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy); - QDataWidgetMapper::SubmitPolicy submitPolicy() const; - void addMapping(QWidget *widget, int section); - void addMapping(QWidget *widget, int section, const QByteArray &propertyName); - void removeMapping(QWidget *widget); - QByteArray mappedPropertyName(QWidget *widget) const; - int mappedSection(QWidget *widget) const; - QWidget *mappedWidgetAt(int section) const; - void clearMapping(); - int currentIndex() const; - -public slots: - void revert(); - virtual void setCurrentIndex(int index); - void setCurrentModelIndex(const QModelIndex &index); - bool submit(); - void toFirst(); - void toLast(); - void toNext(); - void toPrevious(); - -signals: - void currentIndexChanged(int index); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatetimeedit.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatetimeedit.sip deleted file mode 100644 index 7e82407..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdatetimeedit.sip +++ /dev/null @@ -1,154 +0,0 @@ -// qdatetimeedit.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDateTimeEdit : public QAbstractSpinBox -{ -%TypeHeaderCode -#include -%End - -public: - enum Section /BaseType=Flag/ - { - NoSection, - AmPmSection, - MSecSection, - SecondSection, - MinuteSection, - HourSection, - DaySection, - MonthSection, - YearSection, - TimeSections_Mask, - DateSections_Mask, - }; - - typedef QFlags Sections; - explicit QDateTimeEdit(QWidget *parent /TransferThis/ = 0); - QDateTimeEdit(const QDateTime &datetime, QWidget *parent /TransferThis/ = 0); - QDateTimeEdit(QDate d, QWidget *parent /TransferThis/ = 0); - QDateTimeEdit(QTime t, QWidget *parent /TransferThis/ = 0); - virtual ~QDateTimeEdit(); - QDateTime dateTime() const; - QDate date() const; - QTime time() const; - QDate minimumDate() const; - void setMinimumDate(QDate min); - void clearMinimumDate(); - QDate maximumDate() const; - void setMaximumDate(QDate max); - void clearMaximumDate(); - void setDateRange(QDate min, QDate max); - QTime minimumTime() const; - void setMinimumTime(QTime min); - void clearMinimumTime(); - QTime maximumTime() const; - void setMaximumTime(QTime max); - void clearMaximumTime(); - void setTimeRange(QTime min, QTime max); - QDateTimeEdit::Sections displayedSections() const; - QDateTimeEdit::Section currentSection() const; - void setCurrentSection(QDateTimeEdit::Section section); - QString sectionText(QDateTimeEdit::Section s) const; - QString displayFormat() const; - void setDisplayFormat(const QString &format); - bool calendarPopup() const; - void setCalendarPopup(bool enable); - void setSelectedSection(QDateTimeEdit::Section section); - virtual QSize sizeHint() const; - virtual void clear(); - virtual void stepBy(int steps); - virtual bool event(QEvent *e); - QDateTimeEdit::Section sectionAt(int index) const; - int currentSectionIndex() const; - void setCurrentSectionIndex(int index); - int sectionCount() const; - -signals: - void dateTimeChanged(const QDateTime &date); - void timeChanged(QTime time); - void dateChanged(QDate date); - -public slots: - void setDateTime(const QDateTime &dateTime); - void setDate(QDate date); - void setTime(QTime time); - -protected: - virtual void initStyleOption(QStyleOptionSpinBox *option) const; - virtual void keyPressEvent(QKeyEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual bool focusNextPrevChild(bool next); - virtual void mousePressEvent(QMouseEvent *event); - virtual void paintEvent(QPaintEvent *event); - virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; - virtual void fixup(QString &input /In,Out/) const; - virtual QDateTime dateTimeFromText(const QString &text) const; - virtual QString textFromDateTime(const QDateTime &dt) const; - virtual QAbstractSpinBox::StepEnabled stepEnabled() const; - -public: - QDateTime minimumDateTime() const; - void clearMinimumDateTime(); - void setMinimumDateTime(const QDateTime &dt); - QDateTime maximumDateTime() const; - void clearMaximumDateTime(); - void setMaximumDateTime(const QDateTime &dt); - void setDateTimeRange(const QDateTime &min, const QDateTime &max); - QCalendarWidget *calendarWidget() const; - void setCalendarWidget(QCalendarWidget *calendarWidget /Transfer/); - Qt::TimeSpec timeSpec() const; - void setTimeSpec(Qt::TimeSpec spec); - QCalendar calendar() const; - void setCalendar(QCalendar calendar); -%If (Qt_6_7_0 -) - QTimeZone timeZone() const; -%End -%If (Qt_6_7_0 -) - void setTimeZone(const QTimeZone &zone); -%End -}; - -class QTimeEdit : public QDateTimeEdit -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTimeEdit(QWidget *parent /TransferThis/ = 0); - QTimeEdit(QTime time, QWidget *parent /TransferThis/ = 0); - virtual ~QTimeEdit(); -}; - -class QDateEdit : public QDateTimeEdit -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDateEdit(QWidget *parent /TransferThis/ = 0); - QDateEdit(QDate date, QWidget *parent /TransferThis/ = 0); - virtual ~QDateEdit(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdial.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdial.sip deleted file mode 100644 index aa32da2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdial.sip +++ /dev/null @@ -1,53 +0,0 @@ -// qdial.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDial : public QAbstractSlider -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDial(QWidget *parent /TransferThis/ = 0); - virtual ~QDial(); - bool wrapping() const; - int notchSize() const; - void setNotchTarget(double target); - qreal notchTarget() const; - bool notchesVisible() const; - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - -public slots: - void setNotchesVisible(bool visible); - void setWrapping(bool on); - -protected: - virtual void initStyleOption(QStyleOptionSlider *option) const; - virtual bool event(QEvent *e); - virtual void resizeEvent(QResizeEvent *re); - virtual void paintEvent(QPaintEvent *pe); - virtual void mousePressEvent(QMouseEvent *me); - virtual void mouseReleaseEvent(QMouseEvent *me); - virtual void mouseMoveEvent(QMouseEvent *me); - virtual void sliderChange(QAbstractSlider::SliderChange change); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialog.sip deleted file mode 100644 index ca1cbfc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialog.sip +++ /dev/null @@ -1,80 +0,0 @@ -// qdialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDialog : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QDialog(); - - enum DialogCode /BaseType=IntEnum/ - { - Rejected, - Accepted, - }; - - int result() const; - virtual void setVisible(bool visible); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setSizeGripEnabled(bool); - bool isSizeGripEnabled() const; - void setModal(bool modal); - void setResult(int r); - virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; -%MethodCode - // Transfer ownership back to Python (a modal dialog will probably have the - // main window as it's parent). This means the Qt dialog will be deleted when - // the Python wrapper is garbage collected. Although this is a little - // inconsistent, it saves having to code it explicitly to avoid the memory - // leak. - sipTransferBack(sipSelf); - - Py_BEGIN_ALLOW_THREADS - sipRes = sipSelfWasArg ? sipCpp->QDialog::exec() - : sipCpp->exec(); - Py_END_ALLOW_THREADS -%End - -public slots: - virtual void done(int); - virtual void accept(); - virtual void reject(); - virtual void open(); - -signals: - void accepted(); - void finished(int result); - void rejected(); - -protected: - virtual void keyPressEvent(QKeyEvent *); - virtual void closeEvent(QCloseEvent *); - virtual void showEvent(QShowEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void contextMenuEvent(QContextMenuEvent *); - virtual bool eventFilter(QObject *, QEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialogbuttonbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialogbuttonbox.sip deleted file mode 100644 index 3032a6a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdialogbuttonbox.sip +++ /dev/null @@ -1,107 +0,0 @@ -// qdialogbuttonbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDialogButtonBox : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum ButtonLayout - { - WinLayout, - MacLayout, - KdeLayout, - GnomeLayout, - AndroidLayout, - }; - - enum ButtonRole - { - InvalidRole, - AcceptRole, - RejectRole, - DestructiveRole, - ActionRole, - HelpRole, - YesRole, - NoRole, - ResetRole, - ApplyRole, - }; - - enum StandardButton /BaseType=Flag/ - { - NoButton, - Ok, - Save, - SaveAll, - Open, - Yes, - YesToAll, - No, - NoToAll, - Abort, - Retry, - Ignore, - Close, - Cancel, - Discard, - Help, - Apply, - Reset, - RestoreDefaults, - }; - - typedef QFlags StandardButtons; - QDialogButtonBox(QWidget *parent /TransferThis/ = 0); - QDialogButtonBox(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - QDialogButtonBox(QDialogButtonBox::StandardButtons buttons, QWidget *parent /TransferThis/ = 0); - QDialogButtonBox(QDialogButtonBox::StandardButtons buttons, Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - virtual ~QDialogButtonBox(); - void setOrientation(Qt::Orientation orientation); - Qt::Orientation orientation() const; - void addButton(QAbstractButton *button /Transfer/, QDialogButtonBox::ButtonRole role); - QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role) /Transfer/; - QPushButton *addButton(QDialogButtonBox::StandardButton button) /Transfer/; - void removeButton(QAbstractButton *button /TransferBack/); - void clear(); - QList buttons() const; - QDialogButtonBox::ButtonRole buttonRole(QAbstractButton *button) const; - void setStandardButtons(QDialogButtonBox::StandardButtons buttons); - QDialogButtonBox::StandardButtons standardButtons() const; - QDialogButtonBox::StandardButton standardButton(QAbstractButton *button) const; - QPushButton *button(QDialogButtonBox::StandardButton which) const; - void setCenterButtons(bool center); - bool centerButtons() const; - -signals: - void accepted(); - void clicked(QAbstractButton *button); - void helpRequested(); - void rejected(); - -protected: - virtual void changeEvent(QEvent *event); - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdockwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdockwidget.sip deleted file mode 100644 index 158e2f7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdockwidget.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qdockwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDockWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QDockWidget(const QString &title, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - QDockWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QDockWidget(); - QWidget *widget() const; - void setWidget(QWidget *widget /Transfer/); - - enum DockWidgetFeature /BaseType=Flag/ - { - DockWidgetClosable, - DockWidgetMovable, - DockWidgetFloatable, - DockWidgetVerticalTitleBar, - NoDockWidgetFeatures, - }; - - typedef QFlags DockWidgetFeatures; - void setFeatures(QDockWidget::DockWidgetFeatures features); - QDockWidget::DockWidgetFeatures features() const; - void setFloating(bool floating); - bool isFloating() const; - void setAllowedAreas(Qt::DockWidgetAreas areas); - Qt::DockWidgetAreas allowedAreas() const; - bool isAreaAllowed(Qt::DockWidgetArea area) const; - QAction *toggleViewAction() const /Transfer/; - void setTitleBarWidget(QWidget *widget /Transfer/); - QWidget *titleBarWidget() const; - -signals: - void featuresChanged(QDockWidget::DockWidgetFeatures features); - void topLevelChanged(bool topLevel); - void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas); - void dockLocationChanged(Qt::DockWidgetArea area); - void visibilityChanged(bool visible); - -protected: - virtual void initStyleOption(QStyleOptionDockWidget *option) const; - virtual void changeEvent(QEvent *event); - virtual void closeEvent(QCloseEvent *event); - virtual void paintEvent(QPaintEvent *event); - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdrawutil.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdrawutil.sip deleted file mode 100644 index 6f854bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qdrawutil.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qdrawutil.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%ModuleCode -#include -%End - -void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0); -void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0); -void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0); -void qDrawShadeRect(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0); -void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0); -void qDrawShadePanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0); -void qDrawWinButton(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); -void qDrawWinButton(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); -void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); -void qDrawWinPanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); -void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &, int lineWidth = 1, const QBrush *fill = 0); -void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &, int lineWidth = 1, const QBrush *fill = 0); -void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap); -%If (Qt_6_7_0 -) -void qDrawPlainRoundedRect(QPainter *painter, const QRect &rect, qreal rx, qreal ry, const QColor &lineColor, int lineWidth = 1, const QBrush *fill = 0); -%End -%If (Qt_6_7_0 -) -void qDrawPlainRoundedRect(QPainter *p, int x, int y, int w, int h, qreal rx, qreal ry, const QColor &, int lineWidth = 1, const QBrush *fill = 0); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qerrormessage.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qerrormessage.sip deleted file mode 100644 index 5e3880a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qerrormessage.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qerrormessage.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QErrorMessage : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - explicit QErrorMessage(QWidget *parent /TransferThis/ = 0); - virtual ~QErrorMessage(); - static QErrorMessage *qtHandler(); - -public slots: - void showMessage(const QString &message); - void showMessage(const QString &message, const QString &type); - -protected: - virtual void changeEvent(QEvent *e); - virtual void done(int); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfiledialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfiledialog.sip deleted file mode 100644 index 6227775..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfiledialog.sip +++ /dev/null @@ -1,314 +0,0 @@ -// qfiledialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum ViewMode - { - Detail, - List, - }; - - enum FileMode - { - AnyFile, - ExistingFile, - Directory, - ExistingFiles, - }; - - enum AcceptMode - { - AcceptOpen, - AcceptSave, - }; - - enum DialogLabel - { - LookIn, - FileName, - FileType, - Accept, - Reject, - }; - - enum Option /BaseType=Flag/ - { - ShowDirsOnly, - DontResolveSymlinks, - DontConfirmOverwrite, - DontUseNativeDialog, - ReadOnly, - HideNameFilterDetails, - DontUseCustomDirectoryIcons, - }; - - typedef QFlags Options; - QFileDialog(QWidget *parent /TransferThis/, Qt::WindowFlags f); - QFileDialog(QWidget *parent /TransferThis/ = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString()); - virtual ~QFileDialog(); - void setDirectory(const QString &directory); - void setDirectory(const QDir &adirectory); - QDir directory() const; - void selectFile(const QString &filename); - QStringList selectedFiles() const; - void setViewMode(QFileDialog::ViewMode mode); - QFileDialog::ViewMode viewMode() const; - void setFileMode(QFileDialog::FileMode mode); - QFileDialog::FileMode fileMode() const; - void setAcceptMode(QFileDialog::AcceptMode mode); - QFileDialog::AcceptMode acceptMode() const; - void setDefaultSuffix(const QString &suffix); - QString defaultSuffix() const; - void setHistory(const QStringList &paths); - QStringList history() const; - void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); - QAbstractItemDelegate *itemDelegate() const; - void setIconProvider(QAbstractFileIconProvider *provider /KeepReference/); - QAbstractFileIconProvider *iconProvider() const; - void setLabelText(QFileDialog::DialogLabel label, const QString &text); - QString labelText(QFileDialog::DialogLabel label) const; - -signals: - void currentChanged(const QString &path); - void directoryEntered(const QString &directory); - void filesSelected(const QStringList &files); - void filterSelected(const QString &filter); - void fileSelected(const QString &file); - -public: - static QString getExistingDirectory(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), QFileDialog::Options options = QFileDialog::ShowDirsOnly) /ReleaseGIL/; - static QUrl getExistingDirectoryUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), QFileDialog::Options options = QFileDialog::ShowDirsOnly, const QStringList &supportedSchemes = QStringList()) /ReleaseGIL/; - static SIP_PYTUPLE getOpenFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options()) /TypeHint="Tuple[QString, QString]", ReleaseGIL/; -%MethodCode - QString *name; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - name = new QString(QFileDialog::getOpenFileName(a0, *a1, *a2, *a3, filter, *a5)); - - Py_END_ALLOW_THREADS - - PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL); - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (name_obj && filter_obj) - sipRes = PyTuple_Pack(2, name_obj, filter_obj); - - Py_XDECREF(name_obj); - Py_XDECREF(filter_obj); -%End - - static SIP_PYTUPLE getOpenFileNames(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options()) /TypeHint="Tuple[QStringList, QString]", ReleaseGIL/; -%MethodCode - QStringList *names; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - names = new QStringList(QFileDialog::getOpenFileNames(a0, *a1, *a2, *a3, filter, *a5)); - - Py_END_ALLOW_THREADS - - PyObject *names_obj = sipConvertFromNewType(names, sipType_QStringList, NULL); - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (names_obj && filter_obj) - sipRes = PyTuple_Pack(2, names_obj, filter_obj); - - Py_XDECREF(names_obj); - Py_XDECREF(filter_obj); -%End - - static SIP_PYTUPLE getSaveFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options()) /TypeHint="Tuple[QString, QString]", ReleaseGIL/; -%MethodCode - QString *name; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - name = new QString(QFileDialog::getSaveFileName(a0, *a1, *a2, *a3, filter, *a5)); - - Py_END_ALLOW_THREADS - - PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL); - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (name_obj && filter_obj) - sipRes = PyTuple_Pack(2, name_obj, filter_obj); - - Py_XDECREF(name_obj); - Py_XDECREF(filter_obj); -%End - -protected: - virtual void done(int result); - virtual void accept(); - virtual void changeEvent(QEvent *e); - -public: - void setSidebarUrls(const QList &urls); - QList sidebarUrls() const; - QByteArray saveState() const; - bool restoreState(const QByteArray &state); - void setProxyModel(QAbstractProxyModel *model /Transfer/); - QAbstractProxyModel *proxyModel() const; - void setNameFilter(const QString &filter); - void setNameFilters(const QStringList &filters); - QStringList nameFilters() const; - void selectNameFilter(const QString &filter); - QString selectedNameFilter() const; - QDir::Filters filter() const; - void setFilter(QDir::Filters filters); - void setOption(QFileDialog::Option option, bool on = true); - bool testOption(QFileDialog::Option option) const; - void setOptions(QFileDialog::Options options); - QFileDialog::Options options() const; - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual void setVisible(bool visible); - void setDirectoryUrl(const QUrl &directory); - QUrl directoryUrl() const; - void selectUrl(const QUrl &url); - QList selectedUrls() const; - void setMimeTypeFilters(const QStringList &filters); - QStringList mimeTypeFilters() const; - void selectMimeTypeFilter(const QString &filter); - -signals: - void urlSelected(const QUrl &url); - void urlsSelected(const QList &urls); - void currentUrlChanged(const QUrl &url); - void directoryUrlEntered(const QUrl &directory); - -public: - static SIP_PYTUPLE getOpenFileUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options(), const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[QUrl, QString]", ReleaseGIL/; -%MethodCode - QUrl *url; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - url = new QUrl(QFileDialog::getOpenFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6)); - - Py_END_ALLOW_THREADS - - PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (url_obj && filter_obj) - sipRes = PyTuple_Pack(2, url_obj, filter_obj); - - Py_XDECREF(url_obj); - Py_XDECREF(filter_obj); -%End - - static SIP_PYTUPLE getOpenFileUrls(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options(), const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[List[QUrl], QString]", ReleaseGIL/; -%MethodCode - QList url_list; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - url_list = QFileDialog::getOpenFileUrls(a0, *a1, *a2, *a3, filter, *a5, *a6); - - Py_END_ALLOW_THREADS - - PyObject *url_list_obj = PyList_New(url_list.size()); - - if (url_list_obj) - { - for (int i = 0; i < url_list.size(); ++i) - { - QUrl *url = new QUrl(url_list.at(i)); - PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); - - if (!url_obj) - { - delete url; - Py_DECREF(url_list_obj); - url_list_obj = 0; - break; - } - - PyList_SetItem(url_list_obj, i, url_obj); - } - } - - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (url_list_obj && filter_obj) - sipRes = PyTuple_Pack(2, url_list_obj, filter_obj); - - Py_XDECREF(url_list_obj); - Py_XDECREF(filter_obj); -%End - - static SIP_PYTUPLE getSaveFileUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = QFileDialog::Options(), const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[QUrl, QString]", ReleaseGIL/; -%MethodCode - QUrl *url; - QString *filter = new QString(*a4); - - Py_BEGIN_ALLOW_THREADS - - url = new QUrl(QFileDialog::getSaveFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6)); - - Py_END_ALLOW_THREADS - - PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); - PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); - - if (url_obj && filter_obj) - sipRes = PyTuple_Pack(2, url_obj, filter_obj); - - Py_XDECREF(url_obj); - Py_XDECREF(filter_obj); -%End - - void setSupportedSchemes(const QStringList &schemes); - QStringList supportedSchemes() const; - QString selectedMimeTypeFilter() const; - static void saveFileContent(const QByteArray &fileContent, const QString &fileNameHint = QString()) /ReleaseGIL/; -%If (Qt_6_7_0 -) - static void saveFileContent(const QByteArray &fileContent, const QString &fileNameHint, QWidget *parent = 0); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfileiconprovider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfileiconprovider.sip deleted file mode 100644 index 8a04195..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfileiconprovider.sip +++ /dev/null @@ -1,34 +0,0 @@ -// qfileiconprovider.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFileIconProvider : public QAbstractFileIconProvider -{ -%TypeHeaderCode -#include -%End - -public: - QFileIconProvider(); - virtual ~QFileIconProvider(); - virtual QIcon icon(QAbstractFileIconProvider::IconType type) const; - virtual QIcon icon(const QFileInfo &info) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfilesystemmodel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfilesystemmodel.sip deleted file mode 100644 index d031e36..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfilesystemmodel.sip +++ /dev/null @@ -1,21 +0,0 @@ -// qfilesystemmodel.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfocusframe.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfocusframe.sip deleted file mode 100644 index 43cde54..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfocusframe.sip +++ /dev/null @@ -1,40 +0,0 @@ -// qfocusframe.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFocusFrame : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QFocusFrame(QWidget *parent /TransferThis/ = 0); - virtual ~QFocusFrame(); - void setWidget(QWidget *widget); - QWidget *widget() const; - -protected: - virtual void initStyleOption(QStyleOption *option) const; - virtual bool eventFilter(QObject *, QEvent *); - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontcombobox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontcombobox.sip deleted file mode 100644 index 3eea932..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontcombobox.sip +++ /dev/null @@ -1,91 +0,0 @@ -// qfontcombobox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFontComboBox : public QComboBox -{ -%TypeHeaderCode -#include -%End - -public: - enum FontFilter /BaseType=Flag/ - { - AllFonts, - ScalableFonts, - NonScalableFonts, - MonospacedFonts, - ProportionalFonts, - }; - - typedef QFlags FontFilters; - QFontComboBox::FontFilters fontFilters() const; - explicit QFontComboBox(QWidget *parent /TransferThis/ = 0); - virtual ~QFontComboBox(); - void setWritingSystem(QFontDatabase::WritingSystem); - QFontDatabase::WritingSystem writingSystem() const; - void setFontFilters(QFontComboBox::FontFilters filters); - QFont currentFont() const; - virtual QSize sizeHint() const; - -public slots: - void setCurrentFont(const QFont &f); - -signals: - void currentFontChanged(const QFont &f); - -protected: - virtual bool event(QEvent *e); - -public: -%If (Qt_6_3_0 -) - void setSampleTextForSystem(QFontDatabase::WritingSystem writingSystem, const QString &sampleText); -%End -%If (Qt_6_3_0 -) - QString sampleTextForSystem(QFontDatabase::WritingSystem writingSystem) const; -%End -%If (Qt_6_3_0 -) - void setSampleTextForFont(const QString &fontFamily, const QString &sampleText); -%End -%If (Qt_6_3_0 -) - QString sampleTextForFont(const QString &fontFamily) const; -%End -%If (Qt_6_3_0 -) - void setDisplayFont(const QString &fontFamily, const QFont &font); -%End -%If (Qt_6_3_0 -) - SIP_PYOBJECT displayFont(const QString &fontFamily) const /TypeHint="Optional[QFont]"/; -%MethodCode - std::optional f = sipCpp->displayFont(*a0); - - if (f) - { - sipRes = sipConvertFromNewType(new QFont(f.value()), sipType_QFont, NULL); - } - else - { - sipRes = Py_None; - Py_INCREF(sipRes); - } -%End - -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontdialog.sip deleted file mode 100644 index 6b96a84..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qfontdialog.sip +++ /dev/null @@ -1,81 +0,0 @@ -// qfontdialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFontDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum FontDialogOption /BaseType=Flag/ - { - NoButtons, - DontUseNativeDialog, - ScalableFonts, - NonScalableFonts, - MonospacedFonts, - ProportionalFonts, - }; - - typedef QFlags FontDialogOptions; - explicit QFontDialog(QWidget *parent /TransferThis/ = 0); - QFontDialog(const QFont &initial, QWidget *parent /TransferThis/ = 0); - virtual ~QFontDialog(); - static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = 0, const QString &caption = QString(), QFontDialog::FontDialogOptions options = QFontDialog::FontDialogOptions()) /ReleaseGIL/; - static QFont getFont(bool *ok, QWidget *parent = 0) /ReleaseGIL/; - -protected: - virtual void changeEvent(QEvent *e); - virtual void done(int result); - virtual bool eventFilter(QObject *object, QEvent *event); - -public: - void setCurrentFont(const QFont &font); - QFont currentFont() const; - QFont selectedFont() const; - void setOption(QFontDialog::FontDialogOption option, bool on = true); - bool testOption(QFontDialog::FontDialogOption option) const; - void setOptions(QFontDialog::FontDialogOptions options); - QFontDialog::FontDialogOptions options() const; - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual void setVisible(bool visible); - -signals: - void currentFontChanged(const QFont &font); - void fontSelected(const QFont &font); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qformlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qformlayout.sip deleted file mode 100644 index 31e36cc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qformlayout.sip +++ /dev/null @@ -1,135 +0,0 @@ -// qformlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFormLayout : public QLayout -{ -%TypeHeaderCode -#include -%End - -public: - enum FieldGrowthPolicy - { - FieldsStayAtSizeHint, - ExpandingFieldsGrow, - AllNonFixedFieldsGrow, - }; - - enum RowWrapPolicy - { - DontWrapRows, - WrapLongRows, - WrapAllRows, - }; - - enum ItemRole - { - LabelRole, - FieldRole, - SpanningRole, - }; - - explicit QFormLayout(QWidget *parent /TransferThis/ = 0); - virtual ~QFormLayout(); - void setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy policy); - QFormLayout::FieldGrowthPolicy fieldGrowthPolicy() const; - void setRowWrapPolicy(QFormLayout::RowWrapPolicy policy); - QFormLayout::RowWrapPolicy rowWrapPolicy() const; - void setLabelAlignment(Qt::Alignment alignment); - Qt::Alignment labelAlignment() const; - void setFormAlignment(Qt::Alignment alignment); - Qt::Alignment formAlignment() const; - void setHorizontalSpacing(int spacing); - int horizontalSpacing() const; - void setVerticalSpacing(int spacing); - int verticalSpacing() const; - virtual int spacing() const; - virtual void setSpacing(int); - void addRow(QWidget *label /Transfer/, QWidget *field /Transfer/); - void addRow(QWidget *label /Transfer/, QLayout *field /Transfer/); - void addRow(const QString &labelText, QWidget *field /Transfer/); - void addRow(const QString &labelText, QLayout *field /Transfer/); - void addRow(QWidget *widget /Transfer/); - void addRow(QLayout *layout /Transfer/); - void insertRow(int row, QWidget *label /Transfer/, QWidget *field /Transfer/); - void insertRow(int row, QWidget *label /Transfer/, QLayout *field /Transfer/); - void insertRow(int row, const QString &labelText, QWidget *field /Transfer/); - void insertRow(int row, const QString &labelText, QLayout *field /Transfer/); - void insertRow(int row, QWidget *widget /Transfer/); - void insertRow(int row, QLayout *layout /Transfer/); - void setItem(int row, QFormLayout::ItemRole role, QLayoutItem *item /Transfer/); - void setWidget(int row, QFormLayout::ItemRole role, QWidget *widget /Transfer/); - void setLayout(int row, QFormLayout::ItemRole role, QLayout *layout /Transfer/); - QLayoutItem *itemAt(int row, QFormLayout::ItemRole role) const; - void getItemPosition(int index, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; - void getWidgetPosition(QWidget *widget, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; - void getLayoutPosition(QLayout *layout, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; - QWidget *labelForField(QWidget *field) const; - QWidget *labelForField(QLayout *field) const; - virtual void addItem(QLayoutItem *item /Transfer/); - virtual QLayoutItem *itemAt(int index) const; - virtual QLayoutItem *takeAt(int index) /TransferBack/; - virtual void setGeometry(const QRect &rect); - virtual QSize minimumSize() const; - virtual QSize sizeHint() const; - virtual void invalidate(); - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int width) const; - virtual Qt::Orientations expandingDirections() const; - virtual int count() const; - int rowCount() const; - - struct TakeRowResult - { -%TypeHeaderCode -#include -%End - - QLayoutItem *labelItem; - QLayoutItem *fieldItem; - }; - - void removeRow(int row); - void removeRow(QWidget *widget); - void removeRow(QLayout *layout); - QFormLayout::TakeRowResult takeRow(int row); - QFormLayout::TakeRowResult takeRow(QWidget *widget); - QFormLayout::TakeRowResult takeRow(QLayout *layout); -%If (Qt_6_4_0 -) - void setRowVisible(QLayout *layout, bool on); -%End -%If (Qt_6_4_0 -) - void setRowVisible(QWidget *widget, bool on); -%End -%If (Qt_6_4_0 -) - void setRowVisible(int row, bool on); -%End -%If (Qt_6_4_0 -) - bool isRowVisible(QLayout *layout) const; -%End -%If (Qt_6_4_0 -) - bool isRowVisible(QWidget *widget) const; -%End -%If (Qt_6_4_0 -) - bool isRowVisible(int row) const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qframe.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qframe.sip deleted file mode 100644 index 25c614f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qframe.sip +++ /dev/null @@ -1,77 +0,0 @@ -// qframe.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QFrame : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum Shadow /BaseType=IntEnum/ - { - Plain, - Raised, - Sunken, - }; - - enum Shape /BaseType=IntEnum/ - { - NoFrame, - Box, - Panel, - WinPanel, - HLine, - VLine, - StyledPanel, - }; - - enum StyleMask - { - Shadow_Mask, - Shape_Mask, - }; - - QFrame(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QFrame(); - int frameStyle() const; - void setFrameStyle(int); - int frameWidth() const; - virtual QSize sizeHint() const; - QFrame::Shape frameShape() const; - void setFrameShape(QFrame::Shape); - QFrame::Shadow frameShadow() const; - void setFrameShadow(QFrame::Shadow); - int lineWidth() const; - void setLineWidth(int); - int midLineWidth() const; - void setMidLineWidth(int); - QRect frameRect() const; - void setFrameRect(const QRect &); - -protected: - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); - virtual void changeEvent(QEvent *); - void drawFrame(QPainter *); - virtual void initStyleOption(QStyleOptionFrame *option) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesture.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesture.sip deleted file mode 100644 index 7e2421d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesture.sip +++ /dev/null @@ -1,191 +0,0 @@ -// qgesture.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGesture : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGesture(QObject *parent /TransferThis/ = 0); - virtual ~QGesture(); - Qt::GestureType gestureType() const; - Qt::GestureState state() const; - QPointF hotSpot() const; - void setHotSpot(const QPointF &value); - bool hasHotSpot() const; - void unsetHotSpot(); - - enum GestureCancelPolicy - { - CancelNone, - CancelAllInContext, - }; - - void setGestureCancelPolicy(QGesture::GestureCancelPolicy policy); - QGesture::GestureCancelPolicy gestureCancelPolicy() const; -}; - -class QPanGesture : public QGesture -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPanGesture(QObject *parent /TransferThis/ = 0); - virtual ~QPanGesture(); - QPointF lastOffset() const; - QPointF offset() const; - QPointF delta() const; - qreal acceleration() const; - void setLastOffset(const QPointF &value); - void setOffset(const QPointF &value); - void setAcceleration(qreal value); -}; - -class QPinchGesture : public QGesture -{ -%TypeHeaderCode -#include -%End - -public: - enum ChangeFlag /BaseType=Flag/ - { - ScaleFactorChanged, - RotationAngleChanged, - CenterPointChanged, - }; - - typedef QFlags ChangeFlags; - explicit QPinchGesture(QObject *parent /TransferThis/ = 0); - virtual ~QPinchGesture(); - QPinchGesture::ChangeFlags totalChangeFlags() const; - void setTotalChangeFlags(QPinchGesture::ChangeFlags value); - QPinchGesture::ChangeFlags changeFlags() const; - void setChangeFlags(QPinchGesture::ChangeFlags value); - QPointF startCenterPoint() const; - QPointF lastCenterPoint() const; - QPointF centerPoint() const; - void setStartCenterPoint(const QPointF &value); - void setLastCenterPoint(const QPointF &value); - void setCenterPoint(const QPointF &value); - qreal totalScaleFactor() const; - qreal lastScaleFactor() const; - qreal scaleFactor() const; - void setTotalScaleFactor(qreal value); - void setLastScaleFactor(qreal value); - void setScaleFactor(qreal value); - qreal totalRotationAngle() const; - qreal lastRotationAngle() const; - qreal rotationAngle() const; - void setTotalRotationAngle(qreal value); - void setLastRotationAngle(qreal value); - void setRotationAngle(qreal value); -}; - -class QSwipeGesture : public QGesture -{ -%TypeHeaderCode -#include -%End - -public: - enum SwipeDirection - { - NoDirection, - Left, - Right, - Up, - Down, - }; - - explicit QSwipeGesture(QObject *parent /TransferThis/ = 0); - virtual ~QSwipeGesture(); - QSwipeGesture::SwipeDirection horizontalDirection() const; - QSwipeGesture::SwipeDirection verticalDirection() const; - qreal swipeAngle() const; - void setSwipeAngle(qreal value); -}; - -class QTapGesture : public QGesture -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTapGesture(QObject *parent /TransferThis/ = 0); - virtual ~QTapGesture(); - QPointF position() const; - void setPosition(const QPointF &pos); -}; - -class QTapAndHoldGesture : public QGesture -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTapAndHoldGesture(QObject *parent /TransferThis/ = 0); - virtual ~QTapAndHoldGesture(); - QPointF position() const; - void setPosition(const QPointF &pos); - static void setTimeout(int msecs); - static int timeout(); -}; - -class QGestureEvent : public QEvent -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - sipType = ((sipCpp->type() == QEvent::Gesture) ? sipType_QGestureEvent : 0); -%End - -public: - explicit QGestureEvent(const QList &gestures); - virtual ~QGestureEvent(); - QList gestures() const; - QGesture *gesture(Qt::GestureType type) const; - QList activeGestures() const; - QList canceledGestures() const; - void setAccepted(bool accepted); - bool isAccepted() const; - void accept(); - void ignore(); - void setAccepted(QGesture *, bool); - void accept(QGesture *); - void ignore(QGesture *); - bool isAccepted(QGesture *) const; - void setAccepted(Qt::GestureType, bool); - void accept(Qt::GestureType); - void ignore(Qt::GestureType); - bool isAccepted(Qt::GestureType) const; - QWidget *widget() const; - QPointF mapToGraphicsScene(const QPointF &gesturePoint) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesturerecognizer.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesturerecognizer.sip deleted file mode 100644 index 7642487..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgesturerecognizer.sip +++ /dev/null @@ -1,48 +0,0 @@ -// qgesturerecognizer.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGestureRecognizer /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum ResultFlag /BaseType=Flag/ - { - Ignore, - MayBeGesture, - TriggerGesture, - FinishGesture, - CancelGesture, - ConsumeEventHint, - }; - - typedef QFlags Result; - QGestureRecognizer(); - virtual ~QGestureRecognizer(); - virtual QGesture *create(QObject *target) /Factory/; - virtual QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) = 0; - virtual void reset(QGesture *state); - static Qt::GestureType registerRecognizer(QGestureRecognizer *recognizer /Transfer/); - static void unregisterRecognizer(Qt::GestureType type); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsanchorlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsanchorlayout.sip deleted file mode 100644 index e764109..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsanchorlayout.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qgraphicsanchorlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsAnchor : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsAnchor(); - void setSpacing(qreal spacing); - void unsetSpacing(); - qreal spacing() const; - void setSizePolicy(QSizePolicy::Policy policy); - QSizePolicy::Policy sizePolicy() const; - -private: - QGraphicsAnchor(QGraphicsAnchorLayout *parent); -}; - -class QGraphicsAnchorLayout : public QGraphicsLayout -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsAnchorLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); - virtual ~QGraphicsAnchorLayout(); - QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem /Transfer/, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem /Transfer/, Qt::AnchorPoint secondEdge); - QGraphicsAnchor *anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge); - void addCornerAnchors(QGraphicsLayoutItem *firstItem /Transfer/, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Corner secondCorner); - void addAnchors(QGraphicsLayoutItem *firstItem /Transfer/, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical); - void setHorizontalSpacing(qreal spacing); - void setVerticalSpacing(qreal spacing); - void setSpacing(qreal spacing); - qreal horizontalSpacing() const; - qreal verticalSpacing() const; - virtual void removeAt(int index); - virtual void setGeometry(const QRectF &rect); - virtual int count() const; - virtual QGraphicsLayoutItem *itemAt(int index) const; - virtual void invalidate(); - -protected: - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicseffect.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicseffect.sip deleted file mode 100644 index 5e075bc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicseffect.sip +++ /dev/null @@ -1,183 +0,0 @@ -// qgraphicseffect.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsEffect : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ChangeFlag /BaseType=Flag/ - { - SourceAttached, - SourceDetached, - SourceBoundingRectChanged, - SourceInvalidated, - }; - - typedef QFlags ChangeFlags; - - enum PixmapPadMode - { - NoPad, - PadToTransparentBorder, - PadToEffectiveBoundingRect, - }; - - QGraphicsEffect(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsEffect(); - virtual QRectF boundingRectFor(const QRectF &sourceRect) const; - QRectF boundingRect() const; - bool isEnabled() const; - -public slots: - void setEnabled(bool enable); - void update(); - -signals: - void enabledChanged(bool enabled); - -protected: - virtual void draw(QPainter *painter) = 0; - virtual void sourceChanged(QGraphicsEffect::ChangeFlags flags); - void updateBoundingRect(); - bool sourceIsPixmap() const; - QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const; - void drawSource(QPainter *painter); - QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset /Out/ = 0, QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToEffectiveBoundingRect) const; -}; - -class QGraphicsColorizeEffect : public QGraphicsEffect -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsColorizeEffect(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsColorizeEffect(); - QColor color() const; - qreal strength() const; - -public slots: - void setColor(const QColor &c); - void setStrength(qreal strength); - -signals: - void colorChanged(const QColor &color); - void strengthChanged(qreal strength); - -protected: - virtual void draw(QPainter *painter); -}; - -class QGraphicsBlurEffect : public QGraphicsEffect -{ -%TypeHeaderCode -#include -%End - -public: - enum BlurHint /BaseType=Flag/ - { - PerformanceHint, - QualityHint, - AnimationHint, - }; - - typedef QFlags BlurHints; - QGraphicsBlurEffect(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsBlurEffect(); - virtual QRectF boundingRectFor(const QRectF &rect) const; - qreal blurRadius() const; - QGraphicsBlurEffect::BlurHints blurHints() const; - -public slots: - void setBlurRadius(qreal blurRadius); - void setBlurHints(QGraphicsBlurEffect::BlurHints hints); - -signals: - void blurRadiusChanged(qreal blurRadius); - void blurHintsChanged(QGraphicsBlurEffect::BlurHints hints /ScopesStripped=1/); - -protected: - virtual void draw(QPainter *painter); -}; - -class QGraphicsDropShadowEffect : public QGraphicsEffect -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsDropShadowEffect(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsDropShadowEffect(); - virtual QRectF boundingRectFor(const QRectF &rect) const; - QPointF offset() const; - qreal xOffset() const; - qreal yOffset() const; - qreal blurRadius() const; - QColor color() const; - -public slots: - void setOffset(const QPointF &ofs); - void setOffset(qreal dx, qreal dy); - void setOffset(qreal d); - void setXOffset(qreal dx); - void setYOffset(qreal dy); - void setBlurRadius(qreal blurRadius); - void setColor(const QColor &color); - -signals: - void offsetChanged(const QPointF &offset); - void blurRadiusChanged(qreal blurRadius); - void colorChanged(const QColor &color); - -protected: - virtual void draw(QPainter *painter); -}; - -class QGraphicsOpacityEffect : public QGraphicsEffect -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsOpacityEffect(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsOpacityEffect(); - qreal opacity() const; - QBrush opacityMask() const; - -public slots: - void setOpacity(qreal opacity); - void setOpacityMask(const QBrush &mask); - -signals: - void opacityChanged(qreal opacity); - void opacityMaskChanged(const QBrush &mask); - -protected: - virtual void draw(QPainter *painter); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsgridlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsgridlayout.sip deleted file mode 100644 index ae2f29c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsgridlayout.sip +++ /dev/null @@ -1,100 +0,0 @@ -// qgraphicsgridlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsGridLayout : public QGraphicsLayout -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsGridLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); - virtual ~QGraphicsGridLayout(); - void addItem(QGraphicsLayoutItem *item /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); - void addItem(QGraphicsLayoutItem *item /Transfer/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); - void setHorizontalSpacing(qreal spacing); - qreal horizontalSpacing() const; - void setVerticalSpacing(qreal spacing); - qreal verticalSpacing() const; - void setSpacing(qreal spacing); - void setRowSpacing(int row, qreal spacing); - qreal rowSpacing(int row) const; - void setColumnSpacing(int column, qreal spacing); - qreal columnSpacing(int column) const; - void setRowStretchFactor(int row, int stretch); - int rowStretchFactor(int row) const; - void setColumnStretchFactor(int column, int stretch); - int columnStretchFactor(int column) const; - void setRowMinimumHeight(int row, qreal height); - qreal rowMinimumHeight(int row) const; - void setRowPreferredHeight(int row, qreal height); - qreal rowPreferredHeight(int row) const; - void setRowMaximumHeight(int row, qreal height); - qreal rowMaximumHeight(int row) const; - void setRowFixedHeight(int row, qreal height); - void setColumnMinimumWidth(int column, qreal width); - qreal columnMinimumWidth(int column) const; - void setColumnPreferredWidth(int column, qreal width); - qreal columnPreferredWidth(int column) const; - void setColumnMaximumWidth(int column, qreal width); - qreal columnMaximumWidth(int column) const; - void setColumnFixedWidth(int column, qreal width); - void setRowAlignment(int row, Qt::Alignment alignment); - Qt::Alignment rowAlignment(int row) const; - void setColumnAlignment(int column, Qt::Alignment alignment); - Qt::Alignment columnAlignment(int column) const; - void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment); - Qt::Alignment alignment(QGraphicsLayoutItem *item) const; - int rowCount() const; - int columnCount() const; - QGraphicsLayoutItem *itemAt(int row, int column) const; - virtual int count() const; - virtual QGraphicsLayoutItem *itemAt(int index) const; - virtual void removeAt(int index); -%MethodCode - // The ownership of any existing item must be passed back to Python. - QGraphicsLayoutItem *itm; - - if (a0 < sipCpp->count()) - itm = sipCpp->itemAt(a0); - else - itm = 0; - - Py_BEGIN_ALLOW_THREADS - sipSelfWasArg ? sipCpp->QGraphicsGridLayout::removeAt(a0) - : sipCpp->removeAt(a0); - Py_END_ALLOW_THREADS - - if (itm) - { - PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem); - - if (itmo) - sipTransferBack(itmo); - } -%End - - virtual void invalidate(); - virtual void setGeometry(const QRectF &rect); - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; - void removeItem(QGraphicsLayoutItem *item /TransferBack/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsitem.sip deleted file mode 100644 index e14b3b7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsitem.sip +++ /dev/null @@ -1,698 +0,0 @@ -// qgraphicsitem.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case 2: - sipType = sipType_QGraphicsPathItem; - break; - - case 3: - sipType = sipType_QGraphicsRectItem; - break; - - case 4: - sipType = sipType_QGraphicsEllipseItem; - break; - - case 5: - sipType = sipType_QGraphicsPolygonItem; - break; - - case 6: - sipType = sipType_QGraphicsLineItem; - break; - - case 7: - sipType = sipType_QGraphicsPixmapItem; - break; - - case 8: - // Switch to the QObject convertor. - *sipCppRet = static_cast(sipCpp); - sipType = sipType_QObject; - break; - - case 9: - sipType = sipType_QGraphicsSimpleTextItem; - break; - - case 10: - sipType = sipType_QGraphicsItemGroup; - break; - - case 11: - // Switch to the QObject convertor. - *sipCppRet = static_cast(sipCpp); - sipType = sipType_QObject; - break; - - case 12: - // Switch to the QObject convertor. - *sipCppRet = static_cast(sipCpp); - sipType = sipType_QObject; - break; - - default: - sipType = 0; - } -%End - -public: - enum CacheMode - { - NoCache, - ItemCoordinateCache, - DeviceCoordinateCache, - }; - - enum GraphicsItemChange - { - ItemPositionChange, - ItemVisibleChange, - ItemEnabledChange, - ItemSelectedChange, - ItemParentChange, - ItemChildAddedChange, - ItemChildRemovedChange, - ItemTransformChange, - ItemPositionHasChanged, - ItemTransformHasChanged, - ItemSceneChange, - ItemVisibleHasChanged, - ItemEnabledHasChanged, - ItemSelectedHasChanged, - ItemParentHasChanged, - ItemSceneHasChanged, - ItemCursorChange, - ItemCursorHasChanged, - ItemToolTipChange, - ItemToolTipHasChanged, - ItemFlagsChange, - ItemFlagsHaveChanged, - ItemZValueChange, - ItemZValueHasChanged, - ItemOpacityChange, - ItemOpacityHasChanged, - ItemScenePositionHasChanged, - ItemRotationChange, - ItemRotationHasChanged, - ItemScaleChange, - ItemScaleHasChanged, - ItemTransformOriginPointChange, - ItemTransformOriginPointHasChanged, - }; - - enum GraphicsItemFlag /BaseType=Flag/ - { - ItemIsMovable, - ItemIsSelectable, - ItemIsFocusable, - ItemClipsToShape, - ItemClipsChildrenToShape, - ItemIgnoresTransformations, - ItemIgnoresParentOpacity, - ItemDoesntPropagateOpacityToChildren, - ItemStacksBehindParent, - ItemUsesExtendedStyleOption, - ItemHasNoContents, - ItemSendsGeometryChanges, - ItemAcceptsInputMethod, - ItemNegativeZStacksBehindParent, - ItemIsPanel, - ItemSendsScenePositionChanges, - ItemContainsChildrenInShape, - }; - - typedef QFlags GraphicsItemFlags; - static const int Type; - static const int UserType; - explicit QGraphicsItem(QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsItem(); - QGraphicsScene *scene() const; - QGraphicsItem *parentItem() const; - QGraphicsItem *topLevelItem() const; - void setParentItem(QGraphicsItem *parent /TransferThis/); - QGraphicsItemGroup *group() const; - void setGroup(QGraphicsItemGroup *group /KeepReference/); - QGraphicsItem::GraphicsItemFlags flags() const; - void setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true); - void setFlags(QGraphicsItem::GraphicsItemFlags flags); - QString toolTip() const; - void setToolTip(const QString &toolTip); - QCursor cursor() const; - void setCursor(const QCursor &cursor); - bool hasCursor() const; - void unsetCursor(); - bool isVisible() const; - void setVisible(bool visible); - void hide(); - void show(); - bool isEnabled() const; - void setEnabled(bool enabled); - bool isSelected() const; - void setSelected(bool selected); - bool acceptDrops() const; - void setAcceptDrops(bool on); - Qt::MouseButtons acceptedMouseButtons() const; - void setAcceptedMouseButtons(Qt::MouseButtons buttons); - bool hasFocus() const; - void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason); - void clearFocus(); - QPointF pos() const; - qreal x() const; - qreal y() const; - QPointF scenePos() const; - void setPos(const QPointF &pos); - void moveBy(qreal dx, qreal dy); - void ensureVisible(const QRectF &rect = QRectF(), int xMargin = 50, int yMargin = 50); - virtual void advance(int phase); - qreal zValue() const; - void setZValue(qreal z); - virtual QRectF boundingRect() const = 0; - QRectF childrenBoundingRect() const; - QRectF sceneBoundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QList collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0; - void update(const QRectF &rect = QRectF()); - QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const; - QPointF mapToParent(const QPointF &point) const; - QPointF mapToScene(const QPointF &point) const; - QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const; - QPolygonF mapToParent(const QRectF &rect) const; - QPolygonF mapToScene(const QRectF &rect) const; - QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const; - QPolygonF mapToParent(const QPolygonF &polygon) const; - QPolygonF mapToScene(const QPolygonF &polygon) const; - QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const; - QPainterPath mapToParent(const QPainterPath &path) const; - QPainterPath mapToScene(const QPainterPath &path) const; - QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const; - QPointF mapFromParent(const QPointF &point) const; - QPointF mapFromScene(const QPointF &point) const; - QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const; - QPolygonF mapFromParent(const QRectF &rect) const; - QPolygonF mapFromScene(const QRectF &rect) const; - QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const; - QPolygonF mapFromParent(const QPolygonF &polygon) const; - QPolygonF mapFromScene(const QPolygonF &polygon) const; - QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const; - QPainterPath mapFromParent(const QPainterPath &path) const; - QPainterPath mapFromScene(const QPainterPath &path) const; - bool isAncestorOf(const QGraphicsItem *child) const; - QVariant data(int key) const; - void setData(int key, const QVariant &value); - virtual int type() const; - void installSceneEventFilter(QGraphicsItem *filterItem); - void removeSceneEventFilter(QGraphicsItem *filterItem); - -protected: - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); - virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dropEvent(QGraphicsSceneDragDropEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); - virtual void inputMethodEvent(QInputMethodEvent *event); - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void prepareGeometryChange(); - virtual bool sceneEvent(QEvent *event); - virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event); - virtual void wheelEvent(QGraphicsSceneWheelEvent *event); - -public: - void setPos(qreal ax, qreal ay); - void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50); - void update(qreal ax, qreal ay, qreal width, qreal height); - QPointF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const; - QPointF mapToParent(qreal ax, qreal ay) const; - QPointF mapToScene(qreal ax, qreal ay) const; - QPointF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const; - QPointF mapFromParent(qreal ax, qreal ay) const; - QPointF mapFromScene(qreal ax, qreal ay) const; - QTransform transform() const; - QTransform sceneTransform() const; - QTransform deviceTransform(const QTransform &viewportTransform) const; - void setTransform(const QTransform &matrix, bool combine = false); - void resetTransform(); - bool isObscured(const QRectF &rect = QRectF()) const; - bool isObscured(qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapToParent(qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapToScene(qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const; - QPolygonF mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const; - QGraphicsWidget *parentWidget() const; - QGraphicsWidget *topLevelWidget() const; - QGraphicsWidget *window() const; - QList childItems() const; - bool isWidget() const; - bool isWindow() const; - QGraphicsItem::CacheMode cacheMode() const; - void setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()); - bool isVisibleTo(const QGraphicsItem *parent) const; - bool acceptHoverEvents() const; - void setAcceptHoverEvents(bool enabled); - void grabMouse(); - void ungrabMouse(); - void grabKeyboard(); - void ungrabKeyboard(); - QRegion boundingRegion(const QTransform &itemToDeviceTransform) const; - qreal boundingRegionGranularity() const; - void setBoundingRegionGranularity(qreal granularity); - void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()); - QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const; - bool isUnderMouse() const; - qreal opacity() const; - qreal effectiveOpacity() const; - void setOpacity(qreal opacity); - QTransform itemTransform(const QGraphicsItem *other, bool *ok = 0) const; - bool isClipped() const; - QPainterPath clipPath() const; - QRectF mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const; - QRectF mapRectToParent(const QRectF &rect) const; - QRectF mapRectToScene(const QRectF &rect) const; - QRectF mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const; - QRectF mapRectFromParent(const QRectF &rect) const; - QRectF mapRectFromScene(const QRectF &rect) const; - QRectF mapRectToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; - QRectF mapRectToParent(qreal ax, qreal ay, qreal w, qreal h) const; - QRectF mapRectToScene(qreal ax, qreal ay, qreal w, qreal h) const; - QRectF mapRectFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; - QRectF mapRectFromParent(qreal ax, qreal ay, qreal w, qreal h) const; - QRectF mapRectFromScene(qreal ax, qreal ay, qreal w, qreal h) const; - - enum PanelModality - { - NonModal, - PanelModal, - SceneModal, - }; - - QGraphicsObject *parentObject() const; - QGraphicsItem *panel() const; - bool isPanel() const; - QGraphicsObject *toGraphicsObject(); - QGraphicsItem::PanelModality panelModality() const; - void setPanelModality(QGraphicsItem::PanelModality panelModality); - bool isBlockedByModalPanel(QGraphicsItem **blockingPanel /Out/ = 0) const; - QGraphicsEffect *graphicsEffect() const; - void setGraphicsEffect(QGraphicsEffect *effect /Transfer/); - bool acceptTouchEvents() const; - void setAcceptTouchEvents(bool enabled); - bool filtersChildEvents() const; - void setFiltersChildEvents(bool enabled); - bool isActive() const; - void setActive(bool active); - QGraphicsItem *focusProxy() const; - void setFocusProxy(QGraphicsItem *item /KeepReference/); - QGraphicsItem *focusItem() const; - void setX(qreal x); - void setY(qreal y); - void setRotation(qreal angle); - qreal rotation() const; - void setScale(qreal scale); - qreal scale() const; - QList transformations() const; - void setTransformations(const QList &transformations /KeepReference/); - QPointF transformOriginPoint() const; - void setTransformOriginPoint(const QPointF &origin); - void setTransformOriginPoint(qreal ax, qreal ay); - void stackBefore(const QGraphicsItem *sibling); - Qt::InputMethodHints inputMethodHints() const; - void setInputMethodHints(Qt::InputMethodHints hints); - -protected: - void updateMicroFocus(); - -private: - QGraphicsItem(const QGraphicsItem &); -}; - -class QAbstractGraphicsShapeItem : public QGraphicsItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QAbstractGraphicsShapeItem(); - QPen pen() const; - void setPen(const QPen &pen); - QBrush brush() const; - void setBrush(const QBrush &brush); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; -}; - -class QGraphicsPathItem : public QAbstractGraphicsShapeItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsPathItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsPathItem(); - QPainterPath path() const; - void setPath(const QPainterPath &path); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsRectItem : public QAbstractGraphicsShapeItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsRectItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsRectItem(); - QRectF rect() const; - void setRect(const QRectF &rect); - void setRect(qreal ax, qreal ay, qreal w, qreal h); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsEllipseItem : public QAbstractGraphicsShapeItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsEllipseItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsEllipseItem(); - QRectF rect() const; - void setRect(const QRectF &rect); - void setRect(qreal ax, qreal ay, qreal w, qreal h); - int startAngle() const; - void setStartAngle(int angle); - int spanAngle() const; - void setSpanAngle(int angle); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsPolygonItem : public QAbstractGraphicsShapeItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsPolygonItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsPolygonItem(const QPolygonF &polygon, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsPolygonItem(); - QPolygonF polygon() const; - void setPolygon(const QPolygonF &polygon); - Qt::FillRule fillRule() const; - void setFillRule(Qt::FillRule rule); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsLineItem : public QGraphicsItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsLineItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsLineItem(); - QPen pen() const; - void setPen(const QPen &pen); - QLineF line() const; - void setLine(const QLineF &line); - void setLine(qreal x1, qreal y1, qreal x2, qreal y2); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsPixmapItem : public QGraphicsItem -{ -%TypeHeaderCode -#include -%End - -public: - enum ShapeMode - { - MaskShape, - BoundingRectShape, - HeuristicMaskShape, - }; - - explicit QGraphicsPixmapItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsPixmapItem(); - QPixmap pixmap() const; - void setPixmap(const QPixmap &pixmap); - Qt::TransformationMode transformationMode() const; - void setTransformationMode(Qt::TransformationMode mode); - QPointF offset() const; - void setOffset(const QPointF &offset); - void setOffset(qreal ax, qreal ay); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; - QGraphicsPixmapItem::ShapeMode shapeMode() const; - void setShapeMode(QGraphicsPixmapItem::ShapeMode mode); -}; - -class QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsSimpleTextItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsSimpleTextItem(); - void setText(const QString &text); - QString text() const; - void setFont(const QFont &font); - QFont font() const; - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsItemGroup : public QGraphicsItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsItemGroup(QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsItemGroup(); - void addToGroup(QGraphicsItem *item /Transfer/); - void removeFromGroup(QGraphicsItem *item /GetWrapper/); -%MethodCode - sipCpp->removeFromGroup(a0); - - // The item will be passed to the group's parent if there is one. If not, - // transfer ownership back to Python. - if (sipCpp->parentItem()) - sipTransferTo(a0Wrapper, sipGetPyObject(sipCpp->parentItem(), sipType_QGraphicsItem)); - else - sipTransferBack(a0Wrapper); -%End - - virtual QRectF boundingRect() const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; -}; - -class QGraphicsObject : public QObject, public QGraphicsItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsObject(QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsObject(); - void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); - void ungrabGesture(Qt::GestureType type); - -signals: - void parentChanged(); - void opacityChanged(); - void visibleChanged(); - void enabledChanged(); - void xChanged(); - void yChanged(); - void zChanged(); - void rotationChanged(); - void scaleChanged(); - -protected slots: - void updateMicroFocus(); - -protected: - virtual bool event(QEvent *ev); -}; - -class QGraphicsTextItem : public QGraphicsObject -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGraphicsTextItem(QGraphicsItem *parent /TransferThis/ = 0); - QGraphicsTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0); - virtual ~QGraphicsTextItem(); - QString toHtml() const; - void setHtml(const QString &html); - QString toPlainText() const; - void setPlainText(const QString &text); - QFont font() const; - void setFont(const QFont &font); - void setDefaultTextColor(const QColor &c); - QColor defaultTextColor() const; - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual bool contains(const QPointF &point) const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - virtual bool isObscuredBy(const QGraphicsItem *item) const; - virtual QPainterPath opaqueArea() const; - virtual int type() const; - void setTextWidth(qreal width); - qreal textWidth() const; - void adjustSize(); - void setDocument(QTextDocument *document /KeepReference/); - QTextDocument *document() const; - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - Qt::TextInteractionFlags textInteractionFlags() const; - void setTabChangesFocus(bool b); - bool tabChangesFocus() const; - void setOpenExternalLinks(bool open); - bool openExternalLinks() const; - void setTextCursor(const QTextCursor &cursor); - QTextCursor textCursor() const; - -signals: - void linkActivated(const QString &); - void linkHovered(const QString &); - -protected: - virtual bool sceneEvent(QEvent *event); - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dropEvent(QGraphicsSceneDragDropEvent *event); - virtual void inputMethodEvent(QInputMethodEvent *event); - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; -}; - -%ModuleCode -// These are needed by the %ConvertToSubClassCode. -#include -#include -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayout.sip deleted file mode 100644 index 5bc1bdb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayout.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qgraphicslayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsLayout : public QGraphicsLayoutItem -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); - virtual ~QGraphicsLayout(); - void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom); - virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; - void activate(); - bool isActivated() const; - virtual void invalidate(); - virtual void widgetEvent(QEvent *e); - virtual int count() const = 0 /__len__/; - virtual QGraphicsLayoutItem *itemAt(int i) const = 0; - virtual void removeAt(int index) = 0; - virtual void updateGeometry(); - -protected: - void addChildLayoutItem(QGraphicsLayoutItem *layoutItem /Transfer/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayoutitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayoutitem.sip deleted file mode 100644 index f7d1597..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslayoutitem.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qgraphicslayoutitem.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsLayoutItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsLayoutItem(QGraphicsLayoutItem *parent /TransferThis/ = 0, bool isLayout = false); - virtual ~QGraphicsLayoutItem(); - void setSizePolicy(const QSizePolicy &policy); - void setSizePolicy(QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy, QSizePolicy::ControlType controlType = QSizePolicy::DefaultType); - QSizePolicy sizePolicy() const; - void setMinimumSize(const QSizeF &size); - QSizeF minimumSize() const; - void setMinimumWidth(qreal width); - void setMinimumHeight(qreal height); - void setPreferredSize(const QSizeF &size); - QSizeF preferredSize() const; - void setPreferredWidth(qreal width); - void setPreferredHeight(qreal height); - void setMaximumSize(const QSizeF &size); - QSizeF maximumSize() const; - void setMaximumWidth(qreal width); - void setMaximumHeight(qreal height); - virtual void setGeometry(const QRectF &rect); - QRectF geometry() const; - virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; - QRectF contentsRect() const; - QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; - virtual void updateGeometry(); - QGraphicsLayoutItem *parentLayoutItem() const; - void setParentLayoutItem(QGraphicsLayoutItem *parent /TransferThis/); - bool isLayout() const; - void setMinimumSize(qreal aw, qreal ah); - void setPreferredSize(qreal aw, qreal ah); - void setMaximumSize(qreal aw, qreal ah); - qreal minimumWidth() const; - qreal minimumHeight() const; - qreal preferredWidth() const; - qreal preferredHeight() const; - qreal maximumWidth() const; - qreal maximumHeight() const; - QGraphicsItem *graphicsItem() const; - bool ownedByLayout() const; - virtual bool isEmpty() const; - -protected: - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const = 0; - void setGraphicsItem(QGraphicsItem *item); - void setOwnedByLayout(bool ownedByLayout); - -private: - QGraphicsLayoutItem(const QGraphicsLayoutItem &); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslinearlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslinearlayout.sip deleted file mode 100644 index df8c402..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicslinearlayout.sip +++ /dev/null @@ -1,79 +0,0 @@ -// qgraphicslinearlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsLinearLayout : public QGraphicsLayout -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsLinearLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); - QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent /TransferThis/ = 0); - virtual ~QGraphicsLinearLayout(); - void setOrientation(Qt::Orientation orientation); - Qt::Orientation orientation() const; - void addItem(QGraphicsLayoutItem *item /Transfer/); - void addStretch(int stretch = 1); - void insertItem(int index, QGraphicsLayoutItem *item /Transfer/); - void insertStretch(int index, int stretch = 1); - void removeItem(QGraphicsLayoutItem *item /TransferBack/); - virtual void removeAt(int index); -%MethodCode - // The ownership of any existing item must be passed back to Python. - QGraphicsLayoutItem *itm; - - if (a0 < sipCpp->count()) - itm = sipCpp->itemAt(a0); - else - itm = 0; - - Py_BEGIN_ALLOW_THREADS - sipSelfWasArg ? sipCpp->QGraphicsLinearLayout::removeAt(a0) - : sipCpp->removeAt(a0); - Py_END_ALLOW_THREADS - - // The Qt documentation isn't quite correct as ownership isn't always passed - // back to the caller. - if (itm && !itm->parentLayoutItem()) - { - PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem); - - if (itmo) - sipTransferBack(itmo); - } -%End - - void setSpacing(qreal spacing); - qreal spacing() const; - void setItemSpacing(int index, qreal spacing); - qreal itemSpacing(int index) const; - void setStretchFactor(QGraphicsLayoutItem *item, int stretch); - int stretchFactor(QGraphicsLayoutItem *item) const; - void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment); - Qt::Alignment alignment(QGraphicsLayoutItem *item) const; - virtual void setGeometry(const QRectF &rect); - virtual int count() const; - virtual QGraphicsLayoutItem *itemAt(int index) const; - virtual void invalidate(); - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsproxywidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsproxywidget.sip deleted file mode 100644 index 6bd92a9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsproxywidget.sip +++ /dev/null @@ -1,88 +0,0 @@ -// qgraphicsproxywidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsProxyWidget : public QGraphicsWidget -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsProxyWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QGraphicsProxyWidget(); - void setWidget(QWidget *widget /Transfer/); -%MethodCode - // The ownership of any existing widget must be passed back to Python. - QWidget *w = sipCpp->widget(); - - Py_BEGIN_ALLOW_THREADS - sipCpp->setWidget(a0); - Py_END_ALLOW_THREADS - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferBack(wo); - } -%End - - QWidget *widget() const; - QRectF subWidgetRect(const QWidget *widget) const; - virtual void setGeometry(const QRectF &rect); - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - virtual int type() const; - QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child) /Factory/; - -protected: - virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); - virtual bool event(QEvent *event); - virtual bool eventFilter(QObject *object, QEvent *event); - virtual void showEvent(QShowEvent *event); - virtual void hideEvent(QHideEvent *event); - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); - virtual void grabMouseEvent(QEvent *event); - virtual void ungrabMouseEvent(QEvent *event); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); - virtual void wheelEvent(QGraphicsSceneWheelEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual bool focusNextPrevChild(bool next); - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; - virtual void resizeEvent(QGraphicsSceneResizeEvent *event); - virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dropEvent(QGraphicsSceneDragDropEvent *event); - QGraphicsProxyWidget *newProxyWidget(const QWidget *) /Factory/; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - virtual void inputMethodEvent(QInputMethodEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsscene.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsscene.sip deleted file mode 100644 index 719e772..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsscene.sip +++ /dev/null @@ -1,167 +0,0 @@ -// qgraphicsscene.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsScene : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ItemIndexMethod - { - BspTreeIndex, - NoIndex, - }; - - QGraphicsScene(QObject *parent /TransferThis/ = 0); - QGraphicsScene(const QRectF &sceneRect, QObject *parent /TransferThis/ = 0); - QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsScene(); - QRectF sceneRect() const; - qreal width() const; - qreal height() const; - void setSceneRect(const QRectF &rect); - void setSceneRect(qreal x, qreal y, qreal w, qreal h); - void render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio); - QGraphicsScene::ItemIndexMethod itemIndexMethod() const; - void setItemIndexMethod(QGraphicsScene::ItemIndexMethod method); - QRectF itemsBoundingRect() const; - QList items(Qt::SortOrder order = Qt::DescendingOrder) const; - QList items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; - QList items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; - QList items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; - QList items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; - QList items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const; - QList collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QList selectedItems() const; - void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform); - void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()); - void clearSelection(); - QGraphicsItemGroup *createItemGroup(const QList &items /Transfer/); - void destroyItemGroup(QGraphicsItemGroup *group /Transfer/); - void addItem(QGraphicsItem *item /Transfer/); - QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen()); - QGraphicsLineItem *addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen()); - QGraphicsPathItem *addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsPixmapItem *addPixmap(const QPixmap &pixmap); - QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()); - QGraphicsSimpleTextItem *addSimpleText(const QString &text, const QFont &font = QFont()); - QGraphicsTextItem *addText(const QString &text, const QFont &font = QFont()); - void removeItem(QGraphicsItem *item /TransferBack/); - QGraphicsItem *focusItem() const; - void setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason); - bool hasFocus() const; - void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason); - void clearFocus(); - QGraphicsItem *mouseGrabberItem() const; - QBrush backgroundBrush() const; - void setBackgroundBrush(const QBrush &brush); - QBrush foregroundBrush() const; - void setForegroundBrush(const QBrush &brush); - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - QList views() const; - -public slots: - void advance(); - void update(const QRectF &rect = QRectF()); - void invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); - void clear(); - -signals: - void changed(const QList ®ion); - void sceneRectChanged(const QRectF &rect); - void selectionChanged(); - -protected: - virtual bool event(QEvent *event); - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); - virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); - virtual void dropEvent(QGraphicsSceneDragDropEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void helpEvent(QGraphicsSceneHelpEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); - virtual void wheelEvent(QGraphicsSceneWheelEvent *event); - virtual void inputMethodEvent(QInputMethodEvent *event); - virtual void drawBackground(QPainter *painter, const QRectF &rect); - virtual void drawForeground(QPainter *painter, const QRectF &rect); - -public: - enum SceneLayer /BaseType=Flag/ - { - ItemLayer, - BackgroundLayer, - ForegroundLayer, - AllLayers, - }; - - typedef QFlags SceneLayers; - int bspTreeDepth() const; - void setBspTreeDepth(int depth); - QPainterPath selectionArea() const; - void update(qreal x, qreal y, qreal w, qreal h); - QGraphicsProxyWidget *addWidget(QWidget *widget /Transfer/, Qt::WindowFlags flags = Qt::WindowFlags()); - QStyle *style() const; - void setStyle(QStyle *style /Transfer/); - QFont font() const; - void setFont(const QFont &font); - QPalette palette() const; - void setPalette(const QPalette &palette); - QGraphicsWidget *activeWindow() const; - void setActiveWindow(QGraphicsWidget *widget); - -protected: - virtual bool eventFilter(QObject *watched, QEvent *event); - virtual bool focusNextPrevChild(bool next); - -public: - void setStickyFocus(bool enabled); - bool stickyFocus() const; - QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const; - QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const; - bool isActive() const; - QGraphicsItem *activePanel() const; - void setActivePanel(QGraphicsItem *item); - bool sendEvent(QGraphicsItem *item, QEvent *event); - void invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); - qreal minimumRenderSize() const; - void setMinimumRenderSize(qreal minSize); - -signals: - void focusItemChanged(QGraphicsItem *newFocus, QGraphicsItem *oldFocus, Qt::FocusReason reason); - -public: - bool focusOnTouch() const; - void setFocusOnTouch(bool enabled); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicssceneevent.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicssceneevent.sip deleted file mode 100644 index 971c367..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicssceneevent.sip +++ /dev/null @@ -1,235 +0,0 @@ -// qgraphicssceneevent.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsSceneEvent : public QEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type()) - { - case QEvent::GraphicsSceneContextMenu: - sipType = sipType_QGraphicsSceneContextMenuEvent; - break; - - case QEvent::GraphicsSceneDragEnter: - case QEvent::GraphicsSceneDragLeave: - case QEvent::GraphicsSceneDragMove: - case QEvent::GraphicsSceneDrop: - sipType = sipType_QGraphicsSceneDragDropEvent; - break; - - case QEvent::GraphicsSceneHelp: - sipType = sipType_QGraphicsSceneHelpEvent; - break; - - case QEvent::GraphicsSceneHoverEnter: - case QEvent::GraphicsSceneHoverLeave: - case QEvent::GraphicsSceneHoverMove: - sipType = sipType_QGraphicsSceneHoverEvent; - break; - - case QEvent::GraphicsSceneMouseDoubleClick: - case QEvent::GraphicsSceneMouseMove: - case QEvent::GraphicsSceneMousePress: - case QEvent::GraphicsSceneMouseRelease: - sipType = sipType_QGraphicsSceneMouseEvent; - break; - - case QEvent::GraphicsSceneWheel: - sipType = sipType_QGraphicsSceneWheelEvent; - break; - - case QEvent::GraphicsSceneMove: - sipType = sipType_QGraphicsSceneMoveEvent; - break; - - case QEvent::GraphicsSceneResize: - sipType = sipType_QGraphicsSceneResizeEvent; - break; - - default: - sipType = 0; - } -%End - -public: - virtual ~QGraphicsSceneEvent(); - QWidget *widget() const; -%If (Qt_6_2_0 -) - quint64 timestamp() const; -%End - -private: - QGraphicsSceneEvent(const QGraphicsSceneEvent &); -}; - -class QGraphicsSceneMouseEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsSceneMouseEvent(); - QPointF pos() const; - QPointF scenePos() const; - QPoint screenPos() const; - QPointF buttonDownPos(Qt::MouseButton button) const; - QPointF buttonDownScenePos(Qt::MouseButton button) const; - QPoint buttonDownScreenPos(Qt::MouseButton button) const; - QPointF lastPos() const; - QPointF lastScenePos() const; - QPoint lastScreenPos() const; - Qt::MouseButtons buttons() const; - Qt::MouseButton button() const; - Qt::KeyboardModifiers modifiers() const; - Qt::MouseEventSource source() const; - Qt::MouseEventFlags flags() const; -}; - -class QGraphicsSceneWheelEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsSceneWheelEvent(); - QPointF pos() const; - QPointF scenePos() const; - QPoint screenPos() const; - Qt::MouseButtons buttons() const; - Qt::KeyboardModifiers modifiers() const; - int delta() const; - Qt::Orientation orientation() const; -%If (Qt_6_2_0 -) - Qt::ScrollPhase phase() const; -%End -%If (Qt_6_2_0 -) - QPoint pixelDelta() const; -%End -%If (Qt_6_2_0 -) - bool isInverted() const; -%End -}; - -class QGraphicsSceneContextMenuEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - enum Reason - { - Mouse, - Keyboard, - Other, - }; - - virtual ~QGraphicsSceneContextMenuEvent(); - QPointF pos() const; - QPointF scenePos() const; - QPoint screenPos() const; - Qt::KeyboardModifiers modifiers() const; - QGraphicsSceneContextMenuEvent::Reason reason() const; -}; - -class QGraphicsSceneHoverEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsSceneHoverEvent(); - QPointF pos() const; - QPointF scenePos() const; - QPoint screenPos() const; - QPointF lastPos() const; - QPointF lastScenePos() const; - QPoint lastScreenPos() const; - Qt::KeyboardModifiers modifiers() const; -}; - -class QGraphicsSceneHelpEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsSceneHelpEvent(); - QPointF scenePos() const; - QPoint screenPos() const; -}; - -class QGraphicsSceneDragDropEvent : public QGraphicsSceneEvent /NoDefaultCtors/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QGraphicsSceneDragDropEvent(); - QPointF pos() const; - QPointF scenePos() const; - QPoint screenPos() const; - Qt::MouseButtons buttons() const; - Qt::KeyboardModifiers modifiers() const; - Qt::DropActions possibleActions() const; - Qt::DropAction proposedAction() const; - void acceptProposedAction(); - Qt::DropAction dropAction() const; - void setDropAction(Qt::DropAction action); - QWidget *source() const; - const QMimeData *mimeData() const; -}; - -class QGraphicsSceneResizeEvent : public QGraphicsSceneEvent -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsSceneResizeEvent(); - virtual ~QGraphicsSceneResizeEvent(); - QSizeF oldSize() const; - QSizeF newSize() const; -}; - -class QGraphicsSceneMoveEvent : public QGraphicsSceneEvent -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsSceneMoveEvent(); - virtual ~QGraphicsSceneMoveEvent(); - QPointF oldPos() const; - QPointF newPos() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicstransform.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicstransform.sip deleted file mode 100644 index 02a44c8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicstransform.sip +++ /dev/null @@ -1,87 +0,0 @@ -// qgraphicstransform.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsTransform : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsTransform(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsTransform(); - virtual void applyTo(QMatrix4x4 *matrix) const = 0; - -protected slots: - void update(); -}; - -class QGraphicsScale : public QGraphicsTransform -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsScale(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsScale(); - QVector3D origin() const; - void setOrigin(const QVector3D &point); - qreal xScale() const; - void setXScale(qreal); - qreal yScale() const; - void setYScale(qreal); - qreal zScale() const; - void setZScale(qreal); - virtual void applyTo(QMatrix4x4 *matrix) const; - -signals: - void originChanged(); - void scaleChanged(); - void xScaleChanged(); - void yScaleChanged(); - void zScaleChanged(); -}; - -class QGraphicsRotation : public QGraphicsTransform -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsRotation(QObject *parent /TransferThis/ = 0); - virtual ~QGraphicsRotation(); - QVector3D origin() const; - void setOrigin(const QVector3D &point); - qreal angle() const; - void setAngle(qreal); - QVector3D axis() const; - void setAxis(const QVector3D &axis); - void setAxis(Qt::Axis axis); - virtual void applyTo(QMatrix4x4 *matrix) const; - -signals: - void originChanged(); - void angleChanged(); - void axisChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsview.sip deleted file mode 100644 index 622b1f5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicsview.sip +++ /dev/null @@ -1,186 +0,0 @@ -// qgraphicsview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsView : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - enum CacheModeFlag /BaseType=Flag/ - { - CacheNone, - CacheBackground, - }; - - typedef QFlags CacheMode; - - enum DragMode - { - NoDrag, - ScrollHandDrag, - RubberBandDrag, - }; - - enum ViewportAnchor - { - NoAnchor, - AnchorViewCenter, - AnchorUnderMouse, - }; - - QGraphicsView(QWidget *parent /TransferThis/ = 0); - QGraphicsView(QGraphicsScene *scene /KeepReference/, QWidget *parent /TransferThis/ = 0); - virtual ~QGraphicsView(); - virtual QSize sizeHint() const; - QPainter::RenderHints renderHints() const; - void setRenderHint(QPainter::RenderHint hint, bool on = true); - void setRenderHints(QPainter::RenderHints hints); - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment alignment); - QGraphicsView::ViewportAnchor transformationAnchor() const; - void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor); - QGraphicsView::ViewportAnchor resizeAnchor() const; - void setResizeAnchor(QGraphicsView::ViewportAnchor anchor); - QGraphicsView::DragMode dragMode() const; - void setDragMode(QGraphicsView::DragMode mode); - QGraphicsView::CacheMode cacheMode() const; - void setCacheMode(QGraphicsView::CacheMode mode); - void resetCachedContent(); - bool isInteractive() const; - void setInteractive(bool allowed); - QGraphicsScene *scene() const; - void setScene(QGraphicsScene *scene /KeepReference/); - QRectF sceneRect() const; - void setSceneRect(const QRectF &rect); - void rotate(qreal angle); - void scale(qreal sx, qreal sy); - void shear(qreal sh, qreal sv); - void translate(qreal dx, qreal dy); - void centerOn(const QPointF &pos); - void centerOn(const QGraphicsItem *item); - void ensureVisible(const QRectF &rect, int xMargin = 50, int yMargin = 50); - void ensureVisible(const QGraphicsItem *item, int xMargin = 50, int yMargin = 50); - void fitInView(const QRectF &rect, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); - void fitInView(const QGraphicsItem *item, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); - void render(QPainter *painter, const QRectF &target = QRectF(), const QRect &source = QRect(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio); - QList items() const; - QList items(const QPoint &pos) const; - QList items(int x, int y) const; - QList items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QList items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QList items(const QPolygon &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QList items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; - QGraphicsItem *itemAt(const QPoint &pos) const; - QPointF mapToScene(const QPoint &point) const; - QPolygonF mapToScene(const QRect &rect) const; - QPolygonF mapToScene(const QPolygon &polygon) const; - QPainterPath mapToScene(const QPainterPath &path) const; - QPoint mapFromScene(const QPointF &point) const; - QPolygon mapFromScene(const QRectF &rect) const; - QPolygon mapFromScene(const QPolygonF &polygon) const; - QPainterPath mapFromScene(const QPainterPath &path) const; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - QBrush backgroundBrush() const; - void setBackgroundBrush(const QBrush &brush); - QBrush foregroundBrush() const; - void setForegroundBrush(const QBrush &brush); - -public slots: - void invalidateScene(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); - void updateScene(const QList &rects); - void updateSceneRect(const QRectF &rect); - -protected slots: - virtual void setupViewport(QWidget *widget); - -protected: - virtual bool event(QEvent *event); - virtual bool viewportEvent(QEvent *event); - virtual void contextMenuEvent(QContextMenuEvent *event); - virtual void dragEnterEvent(QDragEnterEvent *event); - virtual void dragLeaveEvent(QDragLeaveEvent *event); - virtual void dragMoveEvent(QDragMoveEvent *event); - virtual void dropEvent(QDropEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual bool focusNextPrevChild(bool next); - virtual void keyPressEvent(QKeyEvent *event); - virtual void keyReleaseEvent(QKeyEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *event); - virtual void mousePressEvent(QMouseEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); - virtual void wheelEvent(QWheelEvent *event); - virtual void paintEvent(QPaintEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void scrollContentsBy(int dx, int dy); - virtual void showEvent(QShowEvent *event); - virtual void inputMethodEvent(QInputMethodEvent *event); - virtual void drawBackground(QPainter *painter, const QRectF &rect); - virtual void drawForeground(QPainter *painter, const QRectF &rect); - -public: - void setSceneRect(qreal ax, qreal ay, qreal aw, qreal ah); - void centerOn(qreal ax, qreal ay); - void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50); - void fitInView(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); - QGraphicsItem *itemAt(int ax, int ay) const; - QPointF mapToScene(int ax, int ay) const; - QPolygonF mapToScene(int ax, int ay, int w, int h) const; - QPoint mapFromScene(qreal ax, qreal ay) const; - QPolygon mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const; - - enum ViewportUpdateMode - { - FullViewportUpdate, - MinimalViewportUpdate, - SmartViewportUpdate, - BoundingRectViewportUpdate, - NoViewportUpdate, - }; - - enum OptimizationFlag /BaseType=Flag/ - { - DontSavePainterState, - DontAdjustForAntialiasing, - }; - - typedef QFlags OptimizationFlags; - QGraphicsView::ViewportUpdateMode viewportUpdateMode() const; - void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode); - QGraphicsView::OptimizationFlags optimizationFlags() const; - void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled = true); - void setOptimizationFlags(QGraphicsView::OptimizationFlags flags); - Qt::ItemSelectionMode rubberBandSelectionMode() const; - void setRubberBandSelectionMode(Qt::ItemSelectionMode mode); - QTransform transform() const; - QTransform viewportTransform() const; - void setTransform(const QTransform &matrix, bool combine = false); - void resetTransform(); - bool isTransformed() const; - QRect rubberBandRect() const; - -signals: - void rubberBandChanged(QRect viewportRect, QPointF fromScenePoint, QPointF toScenePoint); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicswidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicswidget.sip deleted file mode 100644 index e9a1982..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgraphicswidget.sip +++ /dev/null @@ -1,122 +0,0 @@ -// qgraphicswidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGraphicsWidget : public QGraphicsObject, public QGraphicsLayoutItem -{ -%TypeHeaderCode -#include -%End - -public: - QGraphicsWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QGraphicsWidget(); - QGraphicsLayout *layout() const; - void setLayout(QGraphicsLayout *layout /Transfer/); - void adjustSize(); - Qt::LayoutDirection layoutDirection() const; - void setLayoutDirection(Qt::LayoutDirection direction); - void unsetLayoutDirection(); - QStyle *style() const; - void setStyle(QStyle *style /KeepReference/); - QFont font() const; - void setFont(const QFont &font); - QPalette palette() const; - void setPalette(const QPalette &palette); - void resize(const QSizeF &size); - void resize(qreal w, qreal h); - QSizeF size() const; - virtual void setGeometry(const QRectF &rect); - QRectF rect() const; - void setContentsMargins(QMarginsF margins); - void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom); - virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; - void setWindowFrameMargins(QMarginsF margins); - void setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom); - void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; - void unsetWindowFrameMargins(); - QRectF windowFrameGeometry() const; - QRectF windowFrameRect() const; - Qt::WindowFlags windowFlags() const; - Qt::WindowType windowType() const; - void setWindowFlags(Qt::WindowFlags wFlags); - bool isActiveWindow() const; - void setWindowTitle(const QString &title); - QString windowTitle() const; - Qt::FocusPolicy focusPolicy() const; - void setFocusPolicy(Qt::FocusPolicy policy); - static void setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second); - QGraphicsWidget *focusWidget() const; - int grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut); - void releaseShortcut(int id); - void setShortcutEnabled(int id, bool enabled = true); - void setShortcutAutoRepeat(int id, bool enabled = true); - void addAction(QAction *action); - void addActions(const QList &actions); - void insertAction(QAction *before, QAction *action); - void insertActions(QAction *before, const QList &actions); - void removeAction(QAction *action); - QList actions() const; - void setAttribute(Qt::WidgetAttribute attribute, bool on = true); - bool testAttribute(Qt::WidgetAttribute attribute) const; - virtual int type() const; - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - virtual QRectF boundingRect() const; - virtual QPainterPath shape() const; - void setGeometry(qreal ax, qreal ay, qreal aw, qreal ah); - -public slots: - bool close(); - -protected: - virtual void initStyleOption(QStyleOption *option) const; - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; - virtual void updateGeometry(); - virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); - virtual bool sceneEvent(QEvent *event); - virtual bool windowFrameEvent(QEvent *e); - virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF &pos) const; - virtual bool event(QEvent *event); - virtual void changeEvent(QEvent *event); - virtual void closeEvent(QCloseEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual bool focusNextPrevChild(bool next); - virtual void focusOutEvent(QFocusEvent *event); - virtual void hideEvent(QHideEvent *event); - virtual void moveEvent(QGraphicsSceneMoveEvent *event); - virtual void polishEvent(); - virtual void resizeEvent(QGraphicsSceneResizeEvent *event); - virtual void showEvent(QShowEvent *event); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual void grabMouseEvent(QEvent *event); - virtual void ungrabMouseEvent(QEvent *event); - virtual void grabKeyboardEvent(QEvent *event); - virtual void ungrabKeyboardEvent(QEvent *event); - -public: - bool autoFillBackground() const; - void setAutoFillBackground(bool enabled); - -signals: - void geometryChanged(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgridlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgridlayout.sip deleted file mode 100644 index e0c554e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgridlayout.sip +++ /dev/null @@ -1,144 +0,0 @@ -// qgridlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGridLayout : public QLayout -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGridLayout(QWidget *parent /TransferThis/ = 0); - virtual ~QGridLayout(); - virtual QSize sizeHint() const; - virtual QSize minimumSize() const; - virtual QSize maximumSize() const; - void setRowStretch(int row, int stretch); - void setColumnStretch(int column, int stretch); - int rowStretch(int row) const; - int columnStretch(int column) const; - void setRowMinimumHeight(int row, int minSize); - void setColumnMinimumWidth(int column, int minSize); - int rowMinimumHeight(int row) const; - int columnMinimumWidth(int column) const; - int columnCount() const; - int rowCount() const; - QRect cellRect(int row, int column) const; - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int) const; - virtual int minimumHeightForWidth(int) const; - virtual Qt::Orientations expandingDirections() const; - virtual void invalidate(); - void addWidget(QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->addWidget(a0); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - void addWidget(QWidget * /GetWrapper/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->addWidget(a0, a1, a2, *a3); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - void addWidget(QWidget * /GetWrapper/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->addWidget(a0, a1, a2, a3, a4, *a5); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - void addLayout(QLayout * /Transfer/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); - void addLayout(QLayout * /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); - void setOriginCorner(Qt::Corner); - Qt::Corner originCorner() const; - virtual QLayoutItem *itemAt(int) const; - virtual QLayoutItem *takeAt(int) /TransferBack/; - virtual int count() const; - virtual void setGeometry(const QRect &); - void addItem(QLayoutItem *item /Transfer/, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment()); - void setDefaultPositioning(int n, Qt::Orientation orient); - void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const; - void setHorizontalSpacing(int spacing); - int horizontalSpacing() const; - void setVerticalSpacing(int spacing); - int verticalSpacing() const; - virtual void setSpacing(int spacing); - virtual int spacing() const; - QLayoutItem *itemAtPosition(int row, int column) const; - -protected: - virtual void addItem(QLayoutItem * /Transfer/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgroupbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgroupbox.sip deleted file mode 100644 index 0199f94..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qgroupbox.sip +++ /dev/null @@ -1,62 +0,0 @@ -// qgroupbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QGroupBox : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QGroupBox(QWidget *parent /TransferThis/ = 0); - QGroupBox(const QString &title, QWidget *parent /TransferThis/ = 0); - virtual ~QGroupBox(); - QString title() const; - void setTitle(const QString &); - Qt::Alignment alignment() const; - void setAlignment(int); - virtual QSize minimumSizeHint() const; - bool isFlat() const; - void setFlat(bool b); - bool isCheckable() const; - void setCheckable(bool b); - bool isChecked() const; - -public slots: - void setChecked(bool b); - -signals: - void clicked(bool checked = false); - void toggled(bool); - -protected: - virtual void initStyleOption(QStyleOptionGroupBox *option) const; - virtual bool event(QEvent *); - virtual void childEvent(QChildEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void changeEvent(QEvent *); - virtual void mousePressEvent(QMouseEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qheaderview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qheaderview.sip deleted file mode 100644 index 14e1994..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qheaderview.sip +++ /dev/null @@ -1,179 +0,0 @@ -// qheaderview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QHeaderView : public QAbstractItemView -{ -%TypeHeaderCode -#include -%End - -public: - enum ResizeMode - { - Interactive, - Fixed, - Stretch, - ResizeToContents, - Custom, - }; - - QHeaderView(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - virtual ~QHeaderView(); - virtual void setModel(QAbstractItemModel *model /KeepReference/); - Qt::Orientation orientation() const; - int offset() const; - int length() const; - virtual QSize sizeHint() const; - int sectionSizeHint(int logicalIndex) const; - int visualIndexAt(int position) const; - int logicalIndexAt(int position) const; - int sectionSize(int logicalIndex) const; - int sectionPosition(int logicalIndex) const; - int sectionViewportPosition(int logicalIndex) const; - void moveSection(int from, int to); - void resizeSection(int logicalIndex, int size); - bool isSectionHidden(int logicalIndex) const; - void setSectionHidden(int logicalIndex, bool hide); - int count() const /__len__/; - int visualIndex(int logicalIndex) const; - int logicalIndex(int visualIndex) const; - void setHighlightSections(bool highlight); - bool highlightSections() const; - int stretchSectionCount() const; - void setSortIndicatorShown(bool show); - bool isSortIndicatorShown() const; - void setSortIndicator(int logicalIndex, Qt::SortOrder order); - int sortIndicatorSection() const; - Qt::SortOrder sortIndicatorOrder() const; - bool stretchLastSection() const; - void setStretchLastSection(bool stretch); - bool sectionsMoved() const; - -public slots: - void setOffset(int offset); - void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast); - void setOffsetToSectionPosition(int visualIndex); - -signals: - void geometriesChanged(); - void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); - void sectionResized(int logicalIndex, int oldSize, int newSize); - void sectionPressed(int logicalIndex); - void sectionClicked(int logicalIndex); - void sectionDoubleClicked(int logicalIndex); - void sectionCountChanged(int oldCount, int newCount); - void sectionHandleDoubleClicked(int logicalIndex); - -protected slots: - void updateSection(int logicalIndex); - void resizeSections(); - void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast); - void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast); - -protected: - void initialize(); - void initializeSections(); - void initializeSections(int start, int end); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &old); - virtual bool event(QEvent *e); - virtual bool viewportEvent(QEvent *e); - virtual void paintEvent(QPaintEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const; - virtual QSize sectionSizeFromContents(int logicalIndex) const; - virtual int horizontalOffset() const; - virtual int verticalOffset() const; - virtual void updateGeometries(); - virtual void scrollContentsBy(int dx, int dy); - virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList &roles = QList()); - virtual void rowsInserted(const QModelIndex &parent, int start, int end); - virtual QRect visualRect(const QModelIndex &index) const; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint); - virtual QModelIndex indexAt(const QPoint &p) const; - virtual bool isIndexHidden(const QModelIndex &index) const; - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction, Qt::KeyboardModifiers); - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags); - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; - -public: - int logicalIndexAt(int ax, int ay) const; - int logicalIndexAt(const QPoint &apos) const; - void hideSection(int alogicalIndex); - void showSection(int alogicalIndex); - void resizeSections(QHeaderView::ResizeMode mode); - int hiddenSectionCount() const; - int defaultSectionSize() const; - void setDefaultSectionSize(int size); - Qt::Alignment defaultAlignment() const; - void setDefaultAlignment(Qt::Alignment alignment); - bool sectionsHidden() const; - void swapSections(int first, int second); - bool cascadingSectionResizes() const; - void setCascadingSectionResizes(bool enable); - int minimumSectionSize() const; - void setMinimumSectionSize(int size); - QByteArray saveState() const; - bool restoreState(const QByteArray &state); - virtual void reset(); - -public slots: - void setOffsetToLastSection(); - -signals: - void sectionEntered(int logicalIndex); - void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); - -protected: - virtual void initStyleOption(QStyleOptionHeader *option) const; - virtual void initStyleOptionForIndex(QStyleOptionHeader *option, int logicalIndex) const; - -public: - void setSectionsMovable(bool movable); - bool sectionsMovable() const; - void setSectionsClickable(bool clickable); - bool sectionsClickable() const; - QHeaderView::ResizeMode sectionResizeMode(int logicalIndex) const; - void setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode); - void setSectionResizeMode(QHeaderView::ResizeMode mode); - virtual void setVisible(bool v); - void setResizeContentsPrecision(int precision); - int resizeContentsPrecision() const; - int maximumSectionSize() const; - void setMaximumSectionSize(int size); - void resetDefaultSectionSize(); - void setFirstSectionMovable(bool movable); - bool isFirstSectionMovable() const; -%If (Qt_6_1_0 -) - void setSortIndicatorClearable(bool clearable); -%End -%If (Qt_6_1_0 -) - bool isSortIndicatorClearable() const; -%End - -signals: -%If (Qt_6_1_0 -) - void sortIndicatorClearableChanged(bool clearable); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qinputdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qinputdialog.sip deleted file mode 100644 index 7b78fee..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qinputdialog.sip +++ /dev/null @@ -1,123 +0,0 @@ -// qinputdialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QInputDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum InputDialogOption /BaseType=Flag/ - { - NoButtons, - UseListViewForComboBoxItems, - UsePlainTextEditForTextInput, - }; - - typedef QFlags InputDialogOptions; - - enum InputMode - { - TextInput, - IntInput, - DoubleInput, - }; - - static QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode echo = QLineEdit::Normal, const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; - static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags()) /ReleaseGIL/; - static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), double step = 1); - static QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; - static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; - QInputDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QInputDialog(); - void setInputMode(QInputDialog::InputMode mode); - QInputDialog::InputMode inputMode() const; - void setLabelText(const QString &text); - QString labelText() const; - void setOption(QInputDialog::InputDialogOption option, bool on = true); - bool testOption(QInputDialog::InputDialogOption option) const; - void setOptions(QInputDialog::InputDialogOptions options); - QInputDialog::InputDialogOptions options() const; - void setTextValue(const QString &text); - QString textValue() const; - void setTextEchoMode(QLineEdit::EchoMode mode); - QLineEdit::EchoMode textEchoMode() const; - void setComboBoxEditable(bool editable); - bool isComboBoxEditable() const; - void setComboBoxItems(const QStringList &items); - QStringList comboBoxItems() const; - void setIntValue(int value); - int intValue() const; - void setIntMinimum(int min); - int intMinimum() const; - void setIntMaximum(int max); - int intMaximum() const; - void setIntRange(int min, int max); - void setIntStep(int step); - int intStep() const; - void setDoubleValue(double value); - double doubleValue() const; - void setDoubleMinimum(double min); - double doubleMinimum() const; - void setDoubleMaximum(double max); - double doubleMaximum() const; - void setDoubleRange(double min, double max); - void setDoubleDecimals(int decimals); - int doubleDecimals() const; - void setOkButtonText(const QString &text); - QString okButtonText() const; - void setCancelButtonText(const QString &text); - QString cancelButtonText() const; - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - virtual QSize minimumSizeHint() const; - virtual QSize sizeHint() const; - virtual void setVisible(bool visible); - virtual void done(int result); - -signals: - void textValueChanged(const QString &text); - void textValueSelected(const QString &text); - void intValueChanged(int value); - void intValueSelected(int value); - void doubleValueChanged(double value); - void doubleValueSelected(double value); - -public: - void setDoubleStep(double step); - double doubleStep() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemdelegate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemdelegate.sip deleted file mode 100644 index 73f6989..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemdelegate.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qitemdelegate.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QItemDelegate : public QAbstractItemDelegate -{ -%TypeHeaderCode -#include -%End - -public: - explicit QItemDelegate(QObject *parent /TransferThis/ = 0); - virtual ~QItemDelegate(); - virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; - virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; - virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; - virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - QItemEditorFactory *itemEditorFactory() const; - void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/); - bool hasClipping() const; - void setClipping(bool clip); - -protected: - void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; - virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, Qt::CheckState state) const; - virtual void drawDecoration(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QPixmap &pixmap) const; - virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QString &text) const; - virtual void drawFocus(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect) const; - virtual bool eventFilter(QObject *object, QEvent *event); - virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemeditorfactory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemeditorfactory.sip deleted file mode 100644 index b4c5a7b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qitemeditorfactory.sip +++ /dev/null @@ -1,49 +0,0 @@ -// qitemeditorfactory.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QItemEditorCreatorBase /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - virtual ~QItemEditorCreatorBase(); - virtual QWidget *createWidget(QWidget *parent /TransferThis/) const = 0 /Factory/; - virtual QByteArray valuePropertyName() const = 0; -}; - -class QItemEditorFactory /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - QItemEditorFactory(); - virtual ~QItemEditorFactory(); - virtual QWidget *createEditor(int userType, QWidget *parent /TransferThis/) const; - virtual QByteArray valuePropertyName(int userType) const; - void registerEditor(int userType, QItemEditorCreatorBase *creator /Transfer/); - static const QItemEditorFactory *defaultFactory(); - static void setDefaultFactory(QItemEditorFactory *factory /Transfer/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qkeysequenceedit.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qkeysequenceedit.sip deleted file mode 100644 index 53739f5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qkeysequenceedit.sip +++ /dev/null @@ -1,73 +0,0 @@ -// qkeysequenceedit.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QKeySequenceEdit : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QKeySequenceEdit(QWidget *parent /TransferThis/ = 0); - QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent /TransferThis/ = 0); - virtual ~QKeySequenceEdit(); - QKeySequence keySequence() const; - -public slots: - void setKeySequence(const QKeySequence &keySequence); - void clear(); - -signals: - void editingFinished(); - void keySequenceChanged(const QKeySequence &keySequence); - -protected: - virtual bool event(QEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void timerEvent(QTimerEvent *); -%If (Qt_6_4_0 -) - virtual void focusOutEvent(QFocusEvent *); -%End - -public: -%If (Qt_6_4_0 -) - void setClearButtonEnabled(bool enable); -%End -%If (Qt_6_4_0 -) - bool isClearButtonEnabled() const; -%End -%If (Qt_6_5_0 -) - qsizetype maximumSequenceLength() const; -%End -%If (Qt_6_5_0 -) - void setFinishingKeyCombinations(const QList &finishingKeyCombinations); -%End -%If (Qt_6_5_0 -) - QList finishingKeyCombinations() const; -%End - -public slots: -%If (Qt_6_5_0 -) - void setMaximumSequenceLength(qsizetype count); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlabel.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlabel.sip deleted file mode 100644 index e1d0147..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlabel.sip +++ /dev/null @@ -1,191 +0,0 @@ -// qlabel.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLabel : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - QLabel(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - QLabel(const QString &text, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QLabel(); - QString text() const; - QPixmap pixmap() const; - QPicture picture() const; - QMovie *movie() const; - Qt::TextFormat textFormat() const; - void setTextFormat(Qt::TextFormat); - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment); - void setWordWrap(bool on); - bool wordWrap() const; - int indent() const; - void setIndent(int); - int margin() const; - void setMargin(int); - bool hasScaledContents() const; - void setScaledContents(bool); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setBuddy(QWidget * /KeepReference/); - QWidget *buddy() const; - virtual int heightForWidth(int) const; - bool openExternalLinks() const; - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - Qt::TextInteractionFlags textInteractionFlags() const; - void setOpenExternalLinks(bool open); - -public slots: - void clear(); - void setMovie(QMovie *movie /KeepReference/); - void setNum(double /Constrained/); - void setNum(int); - void setPicture(const QPicture &); - void setPixmap(const QPixmap &); - void setText(const QString &); - -signals: - void linkActivated(const QString &link); - void linkHovered(const QString &link); - -protected: - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); - virtual void changeEvent(QEvent *); - virtual void keyPressEvent(QKeyEvent *ev); - virtual void mousePressEvent(QMouseEvent *ev); - virtual void mouseMoveEvent(QMouseEvent *ev); - virtual void mouseReleaseEvent(QMouseEvent *ev); - virtual void contextMenuEvent(QContextMenuEvent *ev); - virtual void focusInEvent(QFocusEvent *ev); - virtual void focusOutEvent(QFocusEvent *ev); - virtual bool focusNextPrevChild(bool next); - -public: - void setSelection(int, int); - bool hasSelectedText() const; - QString selectedText() const; - int selectionStart() const; -%If (Qt_6_1_0 -) - SIP_PYCALLABLE resourceProvider() const /TypeHint="Callable[[QUrl], QVariant]"/; -%MethodCode - if (sipCpp->resourceProvider()) - sipRes = sipGetUserObject((sipSimpleWrapper *)sipSelf); - else - sipRes = SIP_NULLPTR; - - if (!sipRes) - sipRes = Py_None; - - Py_INCREF(sipRes); -%End - -%End -%If (Qt_6_1_0 -) - void setResourceProvider(SIP_PYCALLABLE provider /TypeHint="Callable[[QUrl], QVariant]"/); -%MethodCode - // Remove any existing callable. - Py_XDECREF(sipGetUserObject((sipSimpleWrapper *)sipSelf)); - - if (a0 == Py_None) - { - sipSetUserObject((sipSimpleWrapper *)sipSelf, SIP_NULLPTR); - sipCpp->setResourceProvider(SIP_NULLPTR); - } - else - { - // Save the callable so that resourceProvider() can return it. - Py_INCREF(a0); - sipSetUserObject((sipSimpleWrapper *)sipSelf, a0); - - Py_BEGIN_ALLOW_THREADS - - sipCpp->setResourceProvider([a0] (const QUrl &arg) { - QUrl *arg_heap = new QUrl(arg); - QVariant qv; - int is_err = 1; - - SIP_BLOCK_THREADS - - PyObject *arg_obj = sipConvertFromNewType(arg_heap, sipType_QUrl, NULL); - - if (arg_obj) - { - PyObject *res_obj = PyObject_CallFunctionObjArgs(a0, arg_obj, NULL); - - Py_DECREF(arg_obj); - - if (res_obj) - { - is_err = 0; - - QVariant *res = reinterpret_cast( - sipConvertToType(res_obj, sipType_QVariant, NULL, 0, - NULL, &is_err)); - - if (!is_err) - { - qv = *res; - delete res; - } - } - } - else - { - delete arg_heap; - } - - if (is_err) - { - pyqt6_qtwidgets_err_print(); - } - - SIP_UNBLOCK_THREADS - - return qv; - }); - - Py_END_ALLOW_THREADS - } -%End - -%End -}; - -%ModuleHeaderCode -// Imports from QtCore. -typedef void (*pyqt6_qtwidgets_err_print_t)(); -extern pyqt6_qtwidgets_err_print_t pyqt6_qtwidgets_err_print; -%End - -%ModuleCode -// Imports from QtCore. -pyqt6_qtwidgets_err_print_t pyqt6_qtwidgets_err_print; -%End - -%PostInitialisationCode -// Imports from QtCore. -pyqt6_qtwidgets_err_print = (pyqt6_qtwidgets_err_print_t)sipImportSymbol("pyqt6_err_print"); -Q_ASSERT(pyqt6_qtwidgets_err_print); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayout.sip deleted file mode 100644 index 3f5e2f8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayout.sip +++ /dev/null @@ -1,171 +0,0 @@ -// qlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLayout : public QObject, public QLayoutItem -{ -%TypeHeaderCode -#include -%End - -public: - enum SizeConstraint - { - SetDefaultConstraint, - SetNoConstraint, - SetMinimumSize, - SetFixedSize, - SetMaximumSize, - SetMinAndMaxSize, - }; - - explicit QLayout(QWidget *parent /TransferThis/ = 0); - virtual ~QLayout(); - virtual int spacing() const; - virtual void setSpacing(int); - bool setAlignment(QWidget *w, Qt::Alignment alignment); - bool setAlignment(QLayout *l, Qt::Alignment alignment); - void setAlignment(Qt::Alignment); - void setSizeConstraint(QLayout::SizeConstraint); - QLayout::SizeConstraint sizeConstraint() const; - void setMenuBar(QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->setMenuBar(a0); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (a0 && parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows setMenuBar(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - QWidget *menuBar() const; - QWidget *parentWidget() const; - virtual void invalidate(); - virtual QRect geometry() const; - bool activate(); - void update(); - void addWidget(QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->addWidget(a0); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - virtual void addItem(QLayoutItem * /Transfer/) = 0; - void removeWidget(QWidget *w /TransferBack/); - void removeItem(QLayoutItem * /TransferBack/); - virtual Qt::Orientations expandingDirections() const; - virtual QSize minimumSize() const; - virtual QSize maximumSize() const; - virtual void setGeometry(const QRect &); - virtual QLayoutItem *itemAt(int index) const = 0; - virtual QLayoutItem *takeAt(int index) = 0 /TransferBack/; - virtual int indexOf(const QWidget *) const; - virtual int indexOf(const QLayoutItem *) const; - virtual int count() const = 0 /__len__/; - virtual bool isEmpty() const; - int totalHeightForWidth(int w) const; - QSize totalMinimumSize() const; - QSize totalMaximumSize() const; - QSize totalSizeHint() const; - virtual QLayout *layout(); - void setEnabled(bool); - bool isEnabled() const; - static QSize closestAcceptableSize(const QWidget *w, const QSize &s); - -protected: - void widgetEvent(QEvent *); - virtual void childEvent(QChildEvent *e); - void addChildLayout(QLayout *l /Transfer/); - void addChildWidget(QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipCpp->addChildWidget(a0); - #else - sipCpp->sipProtect_addChildWidget(a0); - #endif - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows - // addChildWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - QRect alignmentRect(const QRect &) const; - -public: - void setContentsMargins(int left, int top, int right, int bottom); - void getContentsMargins(int *left, int *top, int *right, int *bottom) const; - QRect contentsRect() const; - void setContentsMargins(const QMargins &margins); - QMargins contentsMargins() const; - virtual QSizePolicy::ControlTypes controlTypes() const; - virtual QLayoutItem *replaceWidget(QWidget *from, QWidget *to /Transfer/, Qt::FindChildOptions options = Qt::FindChildrenRecursively); -%If (Qt_6_1_0 -) - void unsetContentsMargins(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayoutitem.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayoutitem.sip deleted file mode 100644 index b7baeb9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlayoutitem.sip +++ /dev/null @@ -1,117 +0,0 @@ -// qlayoutitem.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLayoutItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - if (sipCpp->widget()) - { - sipType = sipType_QWidgetItem; - } - else if (sipCpp->spacerItem()) - { - sipType = sipType_QSpacerItem; - } - else - { - // Switch to the QObject convertor. - *sipCppRet = sipCpp->layout(); - sipType = sipType_QObject; - } -%End - -public: - explicit QLayoutItem(Qt::Alignment alignment = Qt::Alignment()); - virtual ~QLayoutItem(); - virtual QSize sizeHint() const = 0; - virtual QSize minimumSize() const = 0; - virtual QSize maximumSize() const = 0; - virtual Qt::Orientations expandingDirections() const = 0; - virtual void setGeometry(const QRect &) = 0; - virtual QRect geometry() const = 0; - virtual bool isEmpty() const = 0; - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int) const; - virtual int minimumHeightForWidth(int) const; - virtual void invalidate(); - virtual QWidget *widget() const; - virtual QLayout *layout(); - virtual QSpacerItem *spacerItem(); - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment a); - virtual QSizePolicy::ControlTypes controlTypes() const; -}; - -class QSpacerItem : public QLayoutItem -{ -%TypeHeaderCode -#include -%End - -public: - QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum); - virtual ~QSpacerItem(); - void changeSize(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum); - virtual QSize sizeHint() const; - virtual QSize minimumSize() const; - virtual QSize maximumSize() const; - virtual Qt::Orientations expandingDirections() const; - virtual bool isEmpty() const; - virtual void setGeometry(const QRect &); - virtual QRect geometry() const; - virtual QSpacerItem *spacerItem(); - QSizePolicy sizePolicy() const; -}; - -class QWidgetItem : public QLayoutItem -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWidgetItem(QWidget *w); - virtual ~QWidgetItem(); - virtual QSize sizeHint() const; - virtual QSize minimumSize() const; - virtual QSize maximumSize() const; - virtual Qt::Orientations expandingDirections() const; - virtual bool isEmpty() const; - virtual void setGeometry(const QRect &); - virtual QRect geometry() const; - virtual QWidget *widget() const; - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int) const; - virtual QSizePolicy::ControlTypes controlTypes() const; - -private: - QWidgetItem(const QWidgetItem &); - -public: -%If (Qt_6_2_0 -) - virtual int minimumHeightForWidth(int) const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlcdnumber.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlcdnumber.sip deleted file mode 100644 index ab4ec74..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlcdnumber.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qlcdnumber.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLCDNumber : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - explicit QLCDNumber(QWidget *parent /TransferThis/ = 0); - QLCDNumber(uint numDigits, QWidget *parent /TransferThis/ = 0); - virtual ~QLCDNumber(); - - enum Mode - { - Hex, - Dec, - Oct, - Bin, - }; - - enum SegmentStyle - { - Outline, - Filled, - Flat, - }; - - bool smallDecimalPoint() const; - int digitCount() const; - void setDigitCount(int nDigits); - void setNumDigits(int nDigits); -%MethodCode - // This is implemented for Qt v5 so that .ui files created with Designer for Qt v4 will continue to work. - sipCpp->setDigitCount(a0); -%End - - bool checkOverflow(double num /Constrained/) const; - bool checkOverflow(int num) const; - QLCDNumber::Mode mode() const; - void setMode(QLCDNumber::Mode); - QLCDNumber::SegmentStyle segmentStyle() const; - void setSegmentStyle(QLCDNumber::SegmentStyle); - double value() const; - int intValue() const; - virtual QSize sizeHint() const; - void display(const QString &str); - void display(double num /Constrained/); - void display(int num); - void setHexMode(); - void setDecMode(); - void setOctMode(); - void setBinMode(); - void setSmallDecimalPoint(bool); - -signals: - void overflow(); - -protected: - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlineedit.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlineedit.sip deleted file mode 100644 index 6fff18f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlineedit.sip +++ /dev/null @@ -1,153 +0,0 @@ -// qlineedit.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QLineEdit : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QLineEdit(QWidget *parent /TransferThis/ = 0); - QLineEdit(const QString &contents, QWidget *parent /TransferThis/ = 0); - virtual ~QLineEdit(); - QString text() const; - QString displayText() const; - int maxLength() const; - void setMaxLength(int); - void setFrame(bool); - bool hasFrame() const; - - enum EchoMode - { - Normal, - NoEcho, - Password, - PasswordEchoOnEdit, - }; - - QLineEdit::EchoMode echoMode() const; - void setEchoMode(QLineEdit::EchoMode); - bool isReadOnly() const; - void setReadOnly(bool); - void setValidator(const QValidator * /KeepReference/); - const QValidator *validator() const; - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - int cursorPosition() const; - void setCursorPosition(int); - int cursorPositionAt(const QPoint &pos); - void setAlignment(Qt::Alignment flag); - Qt::Alignment alignment() const; - void cursorForward(bool mark, int steps = 1); - void cursorBackward(bool mark, int steps = 1); - void cursorWordForward(bool mark); - void cursorWordBackward(bool mark); - void backspace(); - void del(); - void home(bool mark); - void end(bool mark); - bool isModified() const; - void setModified(bool); - void setSelection(int, int); - bool hasSelectedText() const; - QString selectedText() const; - int selectionStart() const; - bool isUndoAvailable() const; - bool isRedoAvailable() const; - void setDragEnabled(bool b); - bool dragEnabled() const; - QString inputMask() const; - void setInputMask(const QString &inputMask); - bool hasAcceptableInput() const; - void setText(const QString &); - void clear(); - void selectAll(); - void undo(); - void redo(); - void cut(); - void copy() const; - void paste(); - void deselect(); - void insert(const QString &); - QMenu *createStandardContextMenu() /Factory/; - -signals: - void textChanged(const QString &); - void textEdited(const QString &); - void cursorPositionChanged(int, int); - void returnPressed(); - void editingFinished(); - void selectionChanged(); - -protected: - virtual void initStyleOption(QStyleOptionFrame *option) const; - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void dragEnterEvent(QDragEnterEvent *); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dragLeaveEvent(QDragLeaveEvent *e); - virtual void dropEvent(QDropEvent *); - virtual void changeEvent(QEvent *); - virtual void contextMenuEvent(QContextMenuEvent *); - virtual void inputMethodEvent(QInputMethodEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - QRect cursorRect() const; - -public: - virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; - virtual bool event(QEvent *); - virtual void timerEvent(QTimerEvent *); - void setCompleter(QCompleter *completer /KeepReference/); - QCompleter *completer() const; - void setTextMargins(int left, int top, int right, int bottom); - void setTextMargins(const QMargins &margins); - QMargins textMargins() const; - QString placeholderText() const; - void setPlaceholderText(const QString &); - void setCursorMoveStyle(Qt::CursorMoveStyle style); - Qt::CursorMoveStyle cursorMoveStyle() const; - - enum ActionPosition - { - LeadingPosition, - TrailingPosition, - }; - - void setClearButtonEnabled(bool enable); - bool isClearButtonEnabled() const; - void addAction(QAction *); - void addAction(QAction *action, QLineEdit::ActionPosition position); - QAction *addAction(const QIcon &icon, QLineEdit::ActionPosition position) /Transfer/; - QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const; - int selectionEnd() const; - int selectionLength() const; - -signals: - void inputRejected(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistview.sip deleted file mode 100644 index c9a298f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistview.sip +++ /dev/null @@ -1,139 +0,0 @@ -// qlistview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QListView : public QAbstractItemView -{ -%TypeHeaderCode -#include -%End - -public: - enum Movement - { - Static, - Free, - Snap, - }; - - enum Flow - { - LeftToRight, - TopToBottom, - }; - - enum ResizeMode - { - Fixed, - Adjust, - }; - - enum LayoutMode - { - SinglePass, - Batched, - }; - - enum ViewMode - { - ListMode, - IconMode, - }; - - explicit QListView(QWidget *parent /TransferThis/ = 0); - virtual ~QListView(); - void setMovement(QListView::Movement movement); - QListView::Movement movement() const; - void setFlow(QListView::Flow flow); - QListView::Flow flow() const; - void setWrapping(bool enable); - bool isWrapping() const; - void setResizeMode(QListView::ResizeMode mode); - QListView::ResizeMode resizeMode() const; - void setLayoutMode(QListView::LayoutMode mode); - QListView::LayoutMode layoutMode() const; - void setSpacing(int space); - int spacing() const; - void setGridSize(const QSize &size); - QSize gridSize() const; - void setViewMode(QListView::ViewMode mode); - QListView::ViewMode viewMode() const; - void clearPropertyFlags(); - bool isRowHidden(int row) const; - void setRowHidden(int row, bool hide); - void setModelColumn(int column); - int modelColumn() const; - void setUniformItemSizes(bool enable); - bool uniformItemSizes() const; - virtual QRect visualRect(const QModelIndex &index) const; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - virtual QModelIndex indexAt(const QPoint &p) const; - virtual void reset(); - virtual void setRootIndex(const QModelIndex &index); - -signals: - void indexesMoved(const QModelIndexList &indexes); - -protected: - virtual void scrollContentsBy(int dx, int dy); - virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList &roles = QList()); - virtual void rowsInserted(const QModelIndex &parent, int start, int end); - virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); - virtual bool event(QEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void timerEvent(QTimerEvent *e); - virtual void resizeEvent(QResizeEvent *e); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dragLeaveEvent(QDragLeaveEvent *e); - virtual void dropEvent(QDropEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual void startDrag(Qt::DropActions supportedActions); - virtual void paintEvent(QPaintEvent *e); - virtual int horizontalOffset() const; - virtual int verticalOffset() const; - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); - QRect rectForIndex(const QModelIndex &index) const; - void setPositionForIndex(const QPoint &position, const QModelIndex &index); - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; - virtual QModelIndexList selectedIndexes() const; - virtual void updateGeometries(); - virtual bool isIndexHidden(const QModelIndex &index) const; - virtual QSize viewportSizeHint() const; - -public: - void setBatchSize(int batchSize); - int batchSize() const; - void setWordWrap(bool on); - bool wordWrap() const; - void setSelectionRectVisible(bool show); - bool isSelectionRectVisible() const; - -protected: - virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - virtual void initViewItemOption(QStyleOptionViewItem *option) const; - -public: - void setItemAlignment(Qt::Alignment alignment); - Qt::Alignment itemAlignment() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistwidget.sip deleted file mode 100644 index 9ee681d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qlistwidget.sip +++ /dev/null @@ -1,195 +0,0 @@ -// qlistwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QListWidgetItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum ItemType /BaseType=IntEnum/ - { - Type, - UserType, - }; - - QListWidgetItem(QListWidget *parent /TransferThis/ = 0, int type = QListWidgetItem::Type); - QListWidgetItem(const QString &text, QListWidget *parent /TransferThis/ = 0, int type = QListWidgetItem::Type); - QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent /TransferThis/ = 0, int type = QListWidgetItem::Type); - QListWidgetItem(const QListWidgetItem &other); - virtual ~QListWidgetItem(); - virtual QListWidgetItem *clone() const /Factory/; - QListWidget *listWidget() const; - Qt::ItemFlags flags() const; - QString text() const; - QIcon icon() const; - QString statusTip() const; - QString toolTip() const; - QString whatsThis() const; - QFont font() const; - int textAlignment() const; -%If (Qt_6_4_0 -) - void setTextAlignment(Qt::Alignment alignment); -%End - void setTextAlignment(int alignment); - Qt::CheckState checkState() const; - void setCheckState(Qt::CheckState state); - QSize sizeHint() const; - void setSizeHint(const QSize &size); - virtual QVariant data(int role) const; - virtual void setData(int role, const QVariant &value); - virtual bool operator<(const QListWidgetItem &other /NoCopy/) const; - virtual void read(QDataStream &in) /ReleaseGIL/; - virtual void write(QDataStream &out) const /ReleaseGIL/; - int type() const; - void setFlags(Qt::ItemFlags aflags); - void setText(const QString &atext); - void setIcon(const QIcon &aicon); - void setStatusTip(const QString &astatusTip); - void setToolTip(const QString &atoolTip); - void setWhatsThis(const QString &awhatsThis); - void setFont(const QFont &afont); - QBrush background() const; - void setBackground(const QBrush &brush); - QBrush foreground() const; - void setForeground(const QBrush &brush); - void setSelected(bool aselect); - bool isSelected() const; - void setHidden(bool ahide); - bool isHidden() const; - -private: - QListWidgetItem &operator=(const QListWidgetItem &); -}; - -QDataStream &operator<<(QDataStream &out, const QListWidgetItem &item) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QListWidgetItem &item /Constrained/) /ReleaseGIL/; - -class QListWidget : public QListView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QListWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QListWidget(); - QListWidgetItem *item(int row) const; - int row(const QListWidgetItem *item) const; - void insertItem(int row, QListWidgetItem *item /Transfer/); - void insertItem(int row, const QString &label); - void insertItems(int row, const QStringList &labels); - void addItem(QListWidgetItem *aitem /Transfer/); - void addItem(const QString &label); - void addItems(const QStringList &labels); - QListWidgetItem *takeItem(int row) /TransferBack/; - int count() const /__len__/; - QListWidgetItem *currentItem() const; - void setCurrentItem(QListWidgetItem *item); - void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command); - int currentRow() const; - void setCurrentRow(int row); - void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command); - QListWidgetItem *itemAt(const QPoint &p) const; - QListWidgetItem *itemAt(int ax, int ay) const; - QWidget *itemWidget(QListWidgetItem *item) const; - void setItemWidget(QListWidgetItem *item, QWidget *widget /Transfer/); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->itemWidget(a0); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->setItemWidget(a0, a1); - Py_END_ALLOW_THREADS -%End - - QRect visualItemRect(const QListWidgetItem *item) const; - void sortItems(Qt::SortOrder order = Qt::AscendingOrder); - void editItem(QListWidgetItem *item); - void openPersistentEditor(QListWidgetItem *item); - void closePersistentEditor(QListWidgetItem *item); - QList selectedItems() const; - QList findItems(const QString &text, Qt::MatchFlags flags) const; - -public slots: - void clear(); - void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - -signals: - void itemPressed(QListWidgetItem *item); - void itemClicked(QListWidgetItem *item); - void itemDoubleClicked(QListWidgetItem *item); - void itemActivated(QListWidgetItem *item); - void itemEntered(QListWidgetItem *item); - void itemChanged(QListWidgetItem *item); - void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); - void currentTextChanged(const QString ¤tText); - void currentRowChanged(int currentRow); - void itemSelectionChanged(); - -protected: - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QList &items) const /TransferBack/; - virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action); - virtual Qt::DropActions supportedDropActions() const; - virtual bool event(QEvent *e); - virtual void dropEvent(QDropEvent *event); - -public: - QList items(const QMimeData *data) const; - QModelIndex indexFromItem(const QListWidgetItem *item) const; - QListWidgetItem *itemFromIndex(const QModelIndex &index) const; - void setSortingEnabled(bool enable); - bool isSortingEnabled() const; - void removeItemWidget(QListWidgetItem *aItem); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->itemWidget(a0); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->removeItemWidget(a0); - Py_END_ALLOW_THREADS -%End - - virtual void setSelectionModel(QItemSelectionModel *selectionModel); - bool isPersistentEditorOpen(QListWidgetItem *item) const; - -private: - virtual void setModel(QAbstractItemModel *model /KeepReference/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmainwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmainwindow.sip deleted file mode 100644 index c14b743..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmainwindow.sip +++ /dev/null @@ -1,109 +0,0 @@ -// qmainwindow.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMainWindow : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QMainWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QMainWindow(); - QSize iconSize() const; - void setIconSize(const QSize &iconSize); - Qt::ToolButtonStyle toolButtonStyle() const; - void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle); - QMenuBar *menuBar() const /Transfer/; - void setMenuBar(QMenuBar *menubar /Transfer/); - QStatusBar *statusBar() const /Transfer/; - void setStatusBar(QStatusBar *statusbar /Transfer/); - QWidget *centralWidget() const; - void setCentralWidget(QWidget *widget /Transfer/); - void setCorner(Qt::Corner corner, Qt::DockWidgetArea area); - Qt::DockWidgetArea corner(Qt::Corner corner) const; - void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea); - void insertToolBarBreak(QToolBar *before); - void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar /Transfer/); - void addToolBar(QToolBar *toolbar /Transfer/); - QToolBar *addToolBar(const QString &title) /Transfer/; - void insertToolBar(QToolBar *before, QToolBar *toolbar /Transfer/); - void removeToolBar(QToolBar *toolbar); - Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const; - void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/); - void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation); - void splitDockWidget(QDockWidget *after, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation); - void removeDockWidget(QDockWidget *dockwidget /TransferBack/); - Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const; - QByteArray saveState(int version = 0) const; - bool restoreState(const QByteArray &state, int version = 0); - virtual QMenu *createPopupMenu(); - -public slots: - void setAnimated(bool enabled); - void setDockNestingEnabled(bool enabled); - -signals: - void iconSizeChanged(const QSize &iconSize); - void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); - void tabifiedDockWidgetActivated(QDockWidget *dockWidget); - -protected: - virtual void contextMenuEvent(QContextMenuEvent *event); - virtual bool event(QEvent *event); - -public: - bool isAnimated() const; - bool isDockNestingEnabled() const; - bool isSeparator(const QPoint &pos) const; - QWidget *menuWidget() const; - void setMenuWidget(QWidget *menubar /Transfer/); - void tabifyDockWidget(QDockWidget *first, QDockWidget *second); - - enum DockOption /BaseType=Flag/ - { - AnimatedDocks, - AllowNestedDocks, - AllowTabbedDocks, - ForceTabbedDocks, - VerticalTabs, - GroupedDragging, - }; - - typedef QFlags DockOptions; - void setDockOptions(QMainWindow::DockOptions options); - QMainWindow::DockOptions dockOptions() const; - void removeToolBarBreak(QToolBar *before); - bool toolBarBreak(QToolBar *toolbar) const; - void setUnifiedTitleAndToolBarOnMac(bool set); - bool unifiedTitleAndToolBarOnMac() const; - bool restoreDockWidget(QDockWidget *dockwidget); - bool documentMode() const; - void setDocumentMode(bool enabled); - QTabWidget::TabShape tabShape() const; - void setTabShape(QTabWidget::TabShape tabShape); - QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const; - void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition); - QList tabifiedDockWidgets(QDockWidget *dockwidget) const; - QWidget *takeCentralWidget() /TransferBack/; - void resizeDocks(const QList &docks, const QList &sizes, Qt::Orientation orientation); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdiarea.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdiarea.sip deleted file mode 100644 index 067413c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdiarea.sip +++ /dev/null @@ -1,125 +0,0 @@ -// qmdiarea.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMdiArea : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - enum AreaOption /BaseType=Flag/ - { - DontMaximizeSubWindowOnActivation, - }; - - typedef QFlags AreaOptions; - - enum ViewMode - { - SubWindowView, - TabbedView, - }; - - enum WindowOrder - { - CreationOrder, - StackingOrder, - ActivationHistoryOrder, - }; - - QMdiArea(QWidget *parent /TransferThis/ = 0); - virtual ~QMdiArea(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - QMdiSubWindow *activeSubWindow() const; - QMdiSubWindow *addSubWindow(QWidget *widget /Transfer/, Qt::WindowFlags flags = Qt::WindowFlags()); - QList subWindowList(QMdiArea::WindowOrder order = QMdiArea::CreationOrder) const; - QMdiSubWindow *currentSubWindow() const; - void removeSubWindow(QWidget *widget /GetWrapper/); -%MethodCode - // We need to implement /TransferBack/ on the argument, but it might be the - // QMdiSubWindow that wraps the widget we are really after. - QMdiSubWindow *swin = qobject_cast(a0); - - if (swin) - { - QWidget *w = swin->widget(); - - a0Wrapper = (w ? sipGetPyObject(w, sipType_QWidget) : 0); - } - else - a0Wrapper = 0; - - Py_BEGIN_ALLOW_THREADS - sipCpp->removeSubWindow(a0); - Py_END_ALLOW_THREADS - - if (a0Wrapper) - sipTransferBack(a0Wrapper); -%End - - QBrush background() const; - void setBackground(const QBrush &background); - void setOption(QMdiArea::AreaOption option, bool on = true); - bool testOption(QMdiArea::AreaOption opton) const; - -signals: - void subWindowActivated(QMdiSubWindow *); - -public slots: - void setActiveSubWindow(QMdiSubWindow *window); - void tileSubWindows(); - void cascadeSubWindows(); - void closeActiveSubWindow(); - void closeAllSubWindows(); - void activateNextSubWindow(); - void activatePreviousSubWindow(); - -protected: - virtual void setupViewport(QWidget *viewport); - virtual bool event(QEvent *event); - virtual bool eventFilter(QObject *object, QEvent *event); - virtual void paintEvent(QPaintEvent *paintEvent); - virtual void childEvent(QChildEvent *childEvent); - virtual void resizeEvent(QResizeEvent *resizeEvent); - virtual void timerEvent(QTimerEvent *timerEvent); - virtual void showEvent(QShowEvent *showEvent); - virtual bool viewportEvent(QEvent *event); - virtual void scrollContentsBy(int dx, int dy); - -public: - QMdiArea::WindowOrder activationOrder() const; - void setActivationOrder(QMdiArea::WindowOrder order); - void setViewMode(QMdiArea::ViewMode mode); - QMdiArea::ViewMode viewMode() const; - void setTabShape(QTabWidget::TabShape shape); - QTabWidget::TabShape tabShape() const; - void setTabPosition(QTabWidget::TabPosition position); - QTabWidget::TabPosition tabPosition() const; - bool documentMode() const; - void setDocumentMode(bool enabled); - void setTabsClosable(bool closable); - bool tabsClosable() const; - void setTabsMovable(bool movable); - bool tabsMovable() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdisubwindow.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdisubwindow.sip deleted file mode 100644 index 07835df..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmdisubwindow.sip +++ /dev/null @@ -1,117 +0,0 @@ -// qmdisubwindow.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMdiSubWindow : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum SubWindowOption /BaseType=Flag/ - { - RubberBandResize, - RubberBandMove, - }; - - typedef QFlags SubWindowOptions; - QMdiSubWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QMdiSubWindow(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setWidget(QWidget *widget /Transfer/); -%MethodCode - // We have to implement /TransferBack/ on any existing widget. - QWidget *w = sipCpp->widget(); - - Py_BEGIN_ALLOW_THREADS - sipCpp->setWidget(a0); - Py_END_ALLOW_THREADS - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferBack(wo); - } -%End - - QWidget *widget() const; - bool isShaded() const; - void setOption(QMdiSubWindow::SubWindowOption option, bool on = true); - bool testOption(QMdiSubWindow::SubWindowOption) const; - void setKeyboardSingleStep(int step); - int keyboardSingleStep() const; - void setKeyboardPageStep(int step); - int keyboardPageStep() const; - void setSystemMenu(QMenu *systemMenu /Transfer/); -%MethodCode - // We have to break the parent association on any existing menu. - QMenu *w = sipCpp->systemMenu(); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QMenu); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->setSystemMenu(a0); - Py_END_ALLOW_THREADS -%End - - QMenu *systemMenu() const; - QMdiArea *mdiArea() const; - -signals: - void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState); - void aboutToActivate(); - -public slots: - void showSystemMenu(); - void showShaded(); - -protected: - virtual bool eventFilter(QObject *object, QEvent *event); - virtual bool event(QEvent *event); - virtual void showEvent(QShowEvent *showEvent); - virtual void hideEvent(QHideEvent *hideEvent); - virtual void changeEvent(QEvent *changeEvent); - virtual void closeEvent(QCloseEvent *closeEvent); - virtual void leaveEvent(QEvent *leaveEvent); - virtual void resizeEvent(QResizeEvent *resizeEvent); - virtual void timerEvent(QTimerEvent *timerEvent); - virtual void moveEvent(QMoveEvent *moveEvent); - virtual void paintEvent(QPaintEvent *paintEvent); - virtual void mousePressEvent(QMouseEvent *mouseEvent); - virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent); - virtual void mouseReleaseEvent(QMouseEvent *mouseEvent); - virtual void mouseMoveEvent(QMouseEvent *mouseEvent); - virtual void keyPressEvent(QKeyEvent *keyEvent); - virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent); - virtual void focusInEvent(QFocusEvent *focusInEvent); - virtual void focusOutEvent(QFocusEvent *focusOutEvent); - virtual void childEvent(QChildEvent *childEvent); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenu.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenu.sip deleted file mode 100644 index cc5e4f2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenu.sip +++ /dev/null @@ -1,147 +0,0 @@ -// qmenu.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMenu : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QMenu(QWidget *parent /TransferThis/ = 0); - QMenu(const QString &title, QWidget *parent /TransferThis/ = 0); - virtual ~QMenu(); -%If (- Qt_6_3_0) - void addAction(QAction *); -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text) /Transfer/; -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, const QKeySequence &shortcut = 0) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData(), *a2); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - -%End -%If (- Qt_6_3_0) - QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; -%End -%If (- Qt_6_3_0) - QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, const QKeySequence &shortcut = 0) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData(), *a3); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - -%End - QAction *addMenu(QMenu *menu); - QMenu *addMenu(const QString &title) /Transfer/; - QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/; - QAction *addSeparator() /Transfer/; - QAction *insertMenu(QAction *before, QMenu *menu); - QAction *insertSeparator(QAction *before) /Transfer/; - void clear(); - void setTearOffEnabled(bool); - bool isTearOffEnabled() const; - bool isTearOffMenuVisible() const; - void hideTearOffMenu(); - void setDefaultAction(QAction * /KeepReference/); - QAction *defaultAction() const; - void setActiveAction(QAction *act); - QAction *activeAction() const; - void popup(const QPoint &p, QAction *action = 0); - QAction *exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - QAction *exec(const QPoint &p, QAction *action = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - static QAction *exec(const QList &actions, const QPoint &pos, QAction *at = 0, QWidget *parent = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; - virtual QSize sizeHint() const; - QRect actionGeometry(QAction *) const; - QAction *actionAt(const QPoint &) const; - QAction *menuAction() const; - QString title() const; - void setTitle(const QString &title); - QIcon icon() const; - void setIcon(const QIcon &icon); - void setNoReplayFor(QWidget *widget); - -signals: - void aboutToHide(); - void aboutToShow(); - void hovered(QAction *action); - void triggered(QAction *action); - -protected: - int columnCount() const; - virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const; - virtual void changeEvent(QEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void enterEvent(QEnterEvent *); - virtual void leaveEvent(QEvent *); - virtual void hideEvent(QHideEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void actionEvent(QActionEvent *); - virtual void timerEvent(QTimerEvent *); - virtual bool event(QEvent *); - virtual bool focusNextPrevChild(bool next); - -public: - bool isEmpty() const; - bool separatorsCollapsible() const; - void setSeparatorsCollapsible(bool collapse); - QAction *addSection(const QString &text) /Transfer/; - QAction *addSection(const QIcon &icon, const QString &text) /Transfer/; - QAction *insertSection(QAction *before, const QString &text) /Transfer/; - QAction *insertSection(QAction *before, const QIcon &icon, const QString &text) /Transfer/; - bool toolTipsVisible() const; - void setToolTipsVisible(bool visible); -%If (macOS) - void setAsDockMenu(); -%End - void showTearOffMenu(); - void showTearOffMenu(const QPoint &pos); -%If (Qt_6_3_0 -) - static QMenu *menuInAction(const QAction *action); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenubar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenubar.sip deleted file mode 100644 index e67d9c3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmenubar.sip +++ /dev/null @@ -1,99 +0,0 @@ -// qmenubar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMenuBar : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QMenuBar(QWidget *parent /TransferThis/ = 0); - virtual ~QMenuBar(); -%If (- Qt_6_3_0) - void addAction(QAction *); -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text) /Transfer/; -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - -%End - QAction *addMenu(QMenu *menu); - QMenu *addMenu(const QString &title) /Transfer/; - QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/; - QAction *addSeparator() /Transfer/; - QAction *insertMenu(QAction *before, QMenu *menu); - QAction *insertSeparator(QAction *before) /Transfer/; - void clear(); - QAction *activeAction() const; - void setActiveAction(QAction *action); - void setDefaultUp(bool); - bool isDefaultUp() const; - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - virtual int heightForWidth(int) const; - QRect actionGeometry(QAction *) const; - QAction *actionAt(const QPoint &) const; - void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner); - QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const; - virtual void setVisible(bool visible); - -signals: - void triggered(QAction *action); - void hovered(QAction *action); - -protected: - virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const; - virtual void changeEvent(QEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void leaveEvent(QEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void actionEvent(QActionEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual bool eventFilter(QObject *, QEvent *); - virtual bool event(QEvent *); - virtual void timerEvent(QTimerEvent *); - -public: - bool isNativeMenuBar() const; - void setNativeMenuBar(bool nativeMenuBar); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmessagebox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmessagebox.sip deleted file mode 100644 index 1d25493..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qmessagebox.sip +++ /dev/null @@ -1,185 +0,0 @@ -// qmessagebox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QMessageBox : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum ButtonRole - { - InvalidRole, - AcceptRole, - RejectRole, - DestructiveRole, - ActionRole, - HelpRole, - YesRole, - NoRole, - ResetRole, - ApplyRole, - }; - - enum Icon - { - NoIcon, - Information, - Warning, - Critical, - Question, - }; - - enum StandardButton /BaseType=IntFlag/ - { - NoButton, - Ok, - Save, - SaveAll, - Open, - Yes, - YesToAll, - No, - NoToAll, - Abort, - Retry, - Ignore, - Close, - Cancel, - Discard, - Help, - Apply, - Reset, - RestoreDefaults, - FirstButton, - LastButton, - YesAll, - NoAll, - Default, - Escape, - FlagMask, - ButtonMask, - }; - - typedef QFlags StandardButtons; - typedef QMessageBox::StandardButton Button; - explicit QMessageBox(QWidget *parent /TransferThis/ = 0); - QMessageBox(QMessageBox::Icon icon, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::NoButton, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); - virtual ~QMessageBox(); - QString text() const; - void setText(const QString &); - QMessageBox::Icon icon() const; - void setIcon(QMessageBox::Icon); - QPixmap iconPixmap() const; - void setIconPixmap(const QPixmap &); - Qt::TextFormat textFormat() const; - void setTextFormat(Qt::TextFormat); - static QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; - static QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::StandardButtons(QMessageBox::Yes | QMessageBox::No), QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; - static QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; - static QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; - static void about(QWidget *parent, const QString &caption, const QString &text) /ReleaseGIL/; - static void aboutQt(QWidget *parent, const QString &title = QString()) /ReleaseGIL/; - static QPixmap standardIcon(QMessageBox::Icon icon); - -protected: - virtual bool event(QEvent *e); - virtual void resizeEvent(QResizeEvent *); - virtual void showEvent(QShowEvent *); - virtual void closeEvent(QCloseEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void changeEvent(QEvent *); - -public: - void addButton(QAbstractButton *button /Transfer/, QMessageBox::ButtonRole role); - QPushButton *addButton(const QString &text, QMessageBox::ButtonRole role) /Transfer/; - QPushButton *addButton(QMessageBox::StandardButton button) /Transfer/; - void removeButton(QAbstractButton *button /TransferBack/); - void setStandardButtons(QMessageBox::StandardButtons buttons); - QMessageBox::StandardButtons standardButtons() const; - QMessageBox::StandardButton standardButton(QAbstractButton *button) const; - QAbstractButton *button(QMessageBox::StandardButton which) const; - QPushButton *defaultButton() const; - void setDefaultButton(QPushButton *button /KeepReference/); - void setDefaultButton(QMessageBox::StandardButton button); - QAbstractButton *escapeButton() const; - void setEscapeButton(QAbstractButton *button /KeepReference/); - void setEscapeButton(QMessageBox::StandardButton button); - QAbstractButton *clickedButton() const; - QString informativeText() const; - void setInformativeText(const QString &text); - QString detailedText() const; - void setDetailedText(const QString &text); - void setWindowTitle(const QString &title); - void setWindowModality(Qt::WindowModality windowModality); - virtual void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End - - QList buttons() const; - QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const; - -signals: - void buttonClicked(QAbstractButton *button); - -public: - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - Qt::TextInteractionFlags textInteractionFlags() const; - void setCheckBox(QCheckBox *cb); - QCheckBox *checkBox() const; -%If (Qt_6_6_0 -) - - enum class Option - { - DontUseNativeDialog, - }; - -%End -%If (Qt_6_6_0 -) - typedef QFlags Options; -%End -%If (Qt_6_6_0 -) - void setOption(QMessageBox::Option option, bool on = true); -%End -%If (Qt_6_6_0 -) - bool testOption(QMessageBox::Option option) const; -%End -%If (Qt_6_6_0 -) - void setOptions(QMessageBox::Options options); -%End -%If (Qt_6_6_0 -) - QMessageBox::Options options() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qplaintextedit.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qplaintextedit.sip deleted file mode 100644 index 0cae00c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qplaintextedit.sip +++ /dev/null @@ -1,189 +0,0 @@ -// qplaintextedit.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPlainTextEdit : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - enum LineWrapMode - { - NoWrap, - WidgetWidth, - }; - - explicit QPlainTextEdit(QWidget *parent /TransferThis/ = 0); - QPlainTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0); - virtual ~QPlainTextEdit(); - void setDocument(QTextDocument *document /KeepReference/); - QTextDocument *document() const; - void setTextCursor(const QTextCursor &cursor); - QTextCursor textCursor() const; - bool isReadOnly() const; - void setReadOnly(bool ro); - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - Qt::TextInteractionFlags textInteractionFlags() const; - void mergeCurrentCharFormat(const QTextCharFormat &modifier); - void setCurrentCharFormat(const QTextCharFormat &format); - QTextCharFormat currentCharFormat() const; - bool tabChangesFocus() const; - void setTabChangesFocus(bool b); - void setDocumentTitle(const QString &title); - QString documentTitle() const; - bool isUndoRedoEnabled() const; - void setUndoRedoEnabled(bool enable); - void setMaximumBlockCount(int maximum); - int maximumBlockCount() const; - QPlainTextEdit::LineWrapMode lineWrapMode() const; - void setLineWrapMode(QPlainTextEdit::LineWrapMode mode); - QTextOption::WrapMode wordWrapMode() const; - void setWordWrapMode(QTextOption::WrapMode policy); - void setBackgroundVisible(bool visible); - bool backgroundVisible() const; - void setCenterOnScroll(bool enabled); - bool centerOnScroll() const; - bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); - QString toPlainText() const; - void ensureCursorVisible(); - virtual QVariant loadResource(int type, const QUrl &name); - QMenu *createStandardContextMenu() /Factory/; - QMenu *createStandardContextMenu(const QPoint &position) /Factory/; - QTextCursor cursorForPosition(const QPoint &pos) const; - QRect cursorRect(const QTextCursor &cursor) const; - QRect cursorRect() const; - bool overwriteMode() const; - void setOverwriteMode(bool overwrite); - int cursorWidth() const; - void setCursorWidth(int width); - void setExtraSelections(const QList &selections); - QList extraSelections() const; - void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); - bool canPaste() const; -%If (PyQt_Printer) - void print(QPagedPaintDevice *printer) const; -%End - int blockCount() const; - -public slots: - void setPlainText(const QString &text); - void cut(); - void copy(); - void paste(); - void undo(); - void redo(); - void clear(); - void selectAll(); - void insertPlainText(const QString &text); - void appendPlainText(const QString &text); - void appendHtml(const QString &html); - void centerCursor(); - -signals: - void textChanged(); - void undoAvailable(bool b); - void redoAvailable(bool b); - void copyAvailable(bool b); - void selectionChanged(); - void cursorPositionChanged(); - void updateRequest(const QRect &rect, int dy); - void blockCountChanged(int newBlockCount); - void modificationChanged(bool); - -protected: - virtual bool event(QEvent *e); - virtual void timerEvent(QTimerEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void keyReleaseEvent(QKeyEvent *e); - virtual void resizeEvent(QResizeEvent *e); - virtual void paintEvent(QPaintEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual bool focusNextPrevChild(bool next); - virtual void contextMenuEvent(QContextMenuEvent *e); - virtual void dragEnterEvent(QDragEnterEvent *e); - virtual void dragLeaveEvent(QDragLeaveEvent *e); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dropEvent(QDropEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void showEvent(QShowEvent *); - virtual void changeEvent(QEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual void inputMethodEvent(QInputMethodEvent *); - -public: - virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const; - -protected: - virtual QMimeData *createMimeDataFromSelection() const /Factory/; - virtual bool canInsertFromMimeData(const QMimeData *source) const; - virtual void insertFromMimeData(const QMimeData *source); - virtual void scrollContentsBy(int dx, int dy); - QTextBlock firstVisibleBlock() const; - QPointF contentOffset() const; - QRectF blockBoundingRect(const QTextBlock &block) const; - QRectF blockBoundingGeometry(const QTextBlock &block) const; - QAbstractTextDocumentLayout::PaintContext getPaintContext() const; - -public: - QString anchorAt(const QPoint &pos) const; - -public slots: - void zoomIn(int range = 1); - void zoomOut(int range = 1); - -public: - void setPlaceholderText(const QString &placeholderText); - QString placeholderText() const; - bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); - QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const; - qreal tabStopDistance() const; - void setTabStopDistance(qreal distance); -}; - -class QPlainTextDocumentLayout : public QAbstractTextDocumentLayout -{ -%TypeHeaderCode -#include -%End - -public: - QPlainTextDocumentLayout(QTextDocument *document); - virtual ~QPlainTextDocumentLayout(); - virtual void draw(QPainter *, const QAbstractTextDocumentLayout::PaintContext &); - virtual int hitTest(const QPointF &, Qt::HitTestAccuracy) const; - virtual int pageCount() const; - virtual QSizeF documentSize() const; - virtual QRectF frameBoundingRect(QTextFrame *) const; - virtual QRectF blockBoundingRect(const QTextBlock &block) const; - void ensureBlockLayout(const QTextBlock &block) const; - void setCursorWidth(int width); - int cursorWidth() const; - void requestUpdate(); - -protected: - virtual void documentChanged(int from, int, int charsAdded); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressbar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressbar.sip deleted file mode 100644 index 92b51d0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressbar.sip +++ /dev/null @@ -1,70 +0,0 @@ -// qprogressbar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QProgressBar : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum Direction - { - TopToBottom, - BottomToTop, - }; - - explicit QProgressBar(QWidget *parent /TransferThis/ = 0); - virtual ~QProgressBar(); - int minimum() const; - int maximum() const; - void setRange(int minimum, int maximum); - int value() const; - virtual QString text() const; - void setTextVisible(bool visible); - bool isTextVisible() const; - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment alignment); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - Qt::Orientation orientation() const; - void setInvertedAppearance(bool invert); - void setTextDirection(QProgressBar::Direction textDirection); - void setFormat(const QString &format); - QString format() const; - void resetFormat(); - -public slots: - void reset(); - void setMinimum(int minimum); - void setMaximum(int maximum); - void setValue(int value); - void setOrientation(Qt::Orientation); - -signals: - void valueChanged(int value); - -protected: - virtual void initStyleOption(QStyleOptionProgressBar *option) const; - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressdialog.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressdialog.sip deleted file mode 100644 index 5054ab2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qprogressdialog.sip +++ /dev/null @@ -1,85 +0,0 @@ -// qprogressdialog.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QProgressDialog : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - QProgressDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QProgressDialog(); - void setLabel(QLabel *label /Transfer/); - void setCancelButton(QPushButton *button /Transfer/); - void setBar(QProgressBar *bar /Transfer/); - bool wasCanceled() const; - int minimum() const; - int maximum() const; - void setRange(int minimum, int maximum); - int value() const; - virtual QSize sizeHint() const; - QString labelText() const; - int minimumDuration() const; - void setAutoReset(bool b); - bool autoReset() const; - void setAutoClose(bool b); - bool autoClose() const; - -public slots: - void cancel(); - void reset(); - void setMaximum(int maximum); - void setMinimum(int minimum); - void setValue(int progress); - void setLabelText(const QString &); - void setCancelButtonText(const QString &); - void setMinimumDuration(int ms); - -signals: - void canceled(); - -protected: - virtual void resizeEvent(QResizeEvent *); - virtual void closeEvent(QCloseEvent *); - virtual void changeEvent(QEvent *); - virtual void showEvent(QShowEvent *e); - void forceShow(); - -public: - void open(); - void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipCpp->open(receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(0, a0); - } -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qproxystyle.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qproxystyle.sip deleted file mode 100644 index 716aefe..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qproxystyle.sip +++ /dev/null @@ -1,61 +0,0 @@ -// qproxystyle.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QProxyStyle : public QCommonStyle -{ -%TypeHeaderCode -#include -%End - -public: - QProxyStyle(QStyle *style /Transfer/ = 0); - QProxyStyle(const QString &key); - virtual ~QProxyStyle(); - QStyle *baseStyle() const; - void setBaseStyle(QStyle *style /Transfer/); - virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; - virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; - virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const; - virtual void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; - virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; - virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const; - virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const; - virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const; - virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; - virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; - virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const; - virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; - virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const; - virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const; - virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const; - virtual QPalette standardPalette() const; - virtual void polish(QWidget *widget); - virtual void polish(QPalette &pal /In,Out/); - virtual void polish(QApplication *app); - virtual void unpolish(QWidget *widget); - virtual void unpolish(QApplication *app); - -protected: - virtual bool event(QEvent *e); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpushbutton.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpushbutton.sip deleted file mode 100644 index 0905137..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpushbutton.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qpushbutton.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QPushButton : public QAbstractButton -{ -%TypeHeaderCode -#include -%End - -public: - explicit QPushButton(QWidget *parent /TransferThis/ = 0); - QPushButton(const QString &text, QWidget *parent /TransferThis/ = 0); - QPushButton(const QIcon &icon, const QString &text, QWidget *parent /TransferThis/ = 0); - virtual ~QPushButton(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - bool autoDefault() const; - void setAutoDefault(bool); - bool isDefault() const; - void setDefault(bool); - void setMenu(QMenu *menu /KeepReference/); - QMenu *menu() const; - void setFlat(bool); - bool isFlat() const; - -public slots: - void showMenu(); - -protected: - virtual void initStyleOption(QStyleOptionButton *option) const; - virtual bool event(QEvent *e) /ReleaseGIL/; - virtual void paintEvent(QPaintEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual bool hitButton(const QPoint &pos) const; - virtual void mouseMoveEvent(QMouseEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpywidgets_qlist.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpywidgets_qlist.sip deleted file mode 100644 index 0050449..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qpywidgets_qlist.sip +++ /dev/null @@ -1,120 +0,0 @@ -// This is the SIP interface definition for the QList based mapped types -// specific to the QtWidgets module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%MappedType QList - /TypeHintIn="Iterable[QWizard.WizardButton]", - TypeHintOut="List[QWizard.WizardButton]", TypeHintValue="[]"/ -{ -%TypeHeaderCode -#include -%End - -%ConvertFromTypeCode - PyObject *l = PyList_New(sipCpp->size()); - - if (!l) - return 0; - - for (int i = 0; i < sipCpp->size(); ++i) - { - PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), - sipType_QWizard_WizardButton); - - if (!eobj) - { - Py_DECREF(l); - - return 0; - } - - PyList_SetItem(l, i, eobj); - } - - return l; -%End - -%ConvertToTypeCode - PyObject *iter = PyObject_GetIter(sipPy); - - if (!sipIsErr) - { - PyErr_Clear(); - Py_XDECREF(iter); - - return (iter && !PyBytes_Check(sipPy) && !PyUnicode_Check(sipPy)); - } - - if (!iter) - { - *sipIsErr = 1; - - return 0; - } - - QList *ql = new QList; - - for (Py_ssize_t i = 0; ; ++i) - { - PyErr_Clear(); - PyObject *itm = PyIter_Next(iter); - - if (!itm) - { - if (PyErr_Occurred()) - { - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - break; - } - - int v = sipConvertToEnum(itm, sipType_QWizard_WizardButton); - - if (PyErr_Occurred()) - { - PyErr_Format(PyExc_TypeError, - "index %zd has type '%s' but 'QWizard.WizardButton' is expected", - i, sipPyTypeName(Py_TYPE(itm))); - - Py_DECREF(itm); - delete ql; - Py_DECREF(iter); - *sipIsErr = 1; - - return 0; - } - - ql->append(static_cast(v)); - - Py_DECREF(itm); - } - - Py_DECREF(iter); - - *sipCppPtr = ql; - - return sipGetState(sipTransferObj); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qradiobutton.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qradiobutton.sip deleted file mode 100644 index 658014f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qradiobutton.sip +++ /dev/null @@ -1,42 +0,0 @@ -// qradiobutton.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRadioButton : public QAbstractButton -{ -%TypeHeaderCode -#include -%End - -public: - explicit QRadioButton(QWidget *parent /TransferThis/ = 0); - QRadioButton(const QString &text, QWidget *parent /TransferThis/ = 0); - virtual ~QRadioButton(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - -protected: - virtual void initStyleOption(QStyleOptionButton *button) const; - virtual bool hitButton(const QPoint &) const; - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); - virtual void mouseMoveEvent(QMouseEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qrubberband.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qrubberband.sip deleted file mode 100644 index aea07e8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qrubberband.sip +++ /dev/null @@ -1,54 +0,0 @@ -// qrubberband.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QRubberBand : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - enum Shape - { - Line, - Rectangle, - }; - - QRubberBand(QRubberBand::Shape, QWidget *parent /TransferThis/ = 0); - virtual ~QRubberBand(); - QRubberBand::Shape shape() const; - void setGeometry(const QRect &r); - void setGeometry(int ax, int ay, int aw, int ah); - void move(const QPoint &p); - void move(int ax, int ay); - void resize(int w, int h); - void resize(const QSize &s); - -protected: - virtual void initStyleOption(QStyleOptionRubberBand *option) const; - virtual bool event(QEvent *e); - virtual void paintEvent(QPaintEvent *); - virtual void changeEvent(QEvent *); - virtual void showEvent(QShowEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void moveEvent(QMoveEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollarea.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollarea.sip deleted file mode 100644 index 1577b7d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollarea.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qscrollarea.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QScrollArea : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - explicit QScrollArea(QWidget *parent /TransferThis/ = 0); - virtual ~QScrollArea(); - QWidget *widget() const; - void setWidget(QWidget *w /Transfer/); - QWidget *takeWidget() /TransferBack/; - bool widgetResizable() const; - void setWidgetResizable(bool resizable); - Qt::Alignment alignment() const; - void setAlignment(Qt::Alignment); - virtual QSize sizeHint() const; - virtual bool focusNextPrevChild(bool next); - void ensureVisible(int x, int y, int xMargin = 50, int yMargin = 50); - void ensureWidgetVisible(QWidget *childWidget, int xMargin = 50, int yMargin = 50); - -protected: - virtual bool event(QEvent *); - virtual bool eventFilter(QObject *, QEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void scrollContentsBy(int dx, int dy); - virtual QSize viewportSizeHint() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollbar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollbar.sip deleted file mode 100644 index a2645e7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollbar.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qscrollbar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QScrollBar : public QAbstractSlider -{ -%TypeHeaderCode -#include -%End - -public: - explicit QScrollBar(QWidget *parent /TransferThis/ = 0); - QScrollBar(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - virtual ~QScrollBar(); - virtual QSize sizeHint() const; - virtual bool event(QEvent *event); - -protected: - virtual void initStyleOption(QStyleOptionSlider *option) const; - virtual void paintEvent(QPaintEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void hideEvent(QHideEvent *); - virtual void contextMenuEvent(QContextMenuEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void sliderChange(QAbstractSlider::SliderChange change); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscroller.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscroller.sip deleted file mode 100644 index 09c1499..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscroller.sip +++ /dev/null @@ -1,87 +0,0 @@ -// qscroller.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QScroller : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum State - { - Inactive, - Pressed, - Dragging, - Scrolling, - }; - - enum ScrollerGestureType - { - TouchGesture, - LeftMouseButtonGesture, - RightMouseButtonGesture, - MiddleMouseButtonGesture, - }; - - enum Input - { - InputPress, - InputMove, - InputRelease, - }; - - static bool hasScroller(QObject *target); - static QScroller *scroller(QObject *target); - static Qt::GestureType grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = QScroller::TouchGesture); - static Qt::GestureType grabbedGesture(QObject *target); - static void ungrabGesture(QObject *target); - static QList activeScrollers(); - QObject *target() const; - QScroller::State state() const; - bool handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0); - void stop(); - QPointF velocity() const; - QPointF finalPosition() const; - QPointF pixelPerMeter() const; - QScrollerProperties scrollerProperties() const; - void setSnapPositionsX(const QList &positions); - void setSnapPositionsX(qreal first, qreal interval); - void setSnapPositionsY(const QList &positions); - void setSnapPositionsY(qreal first, qreal interval); - -public slots: - void setScrollerProperties(const QScrollerProperties &prop); - void scrollTo(const QPointF &pos); - void scrollTo(const QPointF &pos, int scrollTime); - void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin); - void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime); - void resendPrepareEvent(); - -signals: - void stateChanged(QScroller::State newstate); - void scrollerPropertiesChanged(const QScrollerProperties &); - -private: - QScroller(QObject *target); - virtual ~QScroller(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollerproperties.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollerproperties.sip deleted file mode 100644 index 6b17e30..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qscrollerproperties.sip +++ /dev/null @@ -1,80 +0,0 @@ -// qscrollerproperties.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QScrollerProperties -{ -%TypeHeaderCode -#include -%End - -public: - QScrollerProperties(); - QScrollerProperties(const QScrollerProperties &sp); - virtual ~QScrollerProperties(); - bool operator==(const QScrollerProperties &sp) const; - bool operator!=(const QScrollerProperties &sp) const; - static void setDefaultScrollerProperties(const QScrollerProperties &sp); - static void unsetDefaultScrollerProperties(); - - enum OvershootPolicy - { - OvershootWhenScrollable, - OvershootAlwaysOff, - OvershootAlwaysOn, - }; - - enum FrameRates - { - Standard, - Fps60, - Fps30, - Fps20, - }; - - enum ScrollMetric - { - MousePressEventDelay, - DragStartDistance, - DragVelocitySmoothingFactor, - AxisLockThreshold, - ScrollingCurve, - DecelerationFactor, - MinimumVelocity, - MaximumVelocity, - MaximumClickThroughVelocity, - AcceleratingFlickMaximumTime, - AcceleratingFlickSpeedupFactor, - SnapPositionRatio, - SnapTime, - OvershootDragResistanceFactor, - OvershootDragDistanceFactor, - OvershootScrollDistanceFactor, - OvershootScrollTime, - HorizontalOvershootPolicy, - VerticalOvershootPolicy, - FrameRate, - ScrollMetricCount, - }; - - QVariant scrollMetric(QScrollerProperties::ScrollMetric metric) const; - void setScrollMetric(QScrollerProperties::ScrollMetric metric, const QVariant &value); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizegrip.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizegrip.sip deleted file mode 100644 index 821c8d8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizegrip.sip +++ /dev/null @@ -1,45 +0,0 @@ -// qsizegrip.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSizeGrip : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSizeGrip(QWidget *parent /TransferThis/); - virtual ~QSizeGrip(); - virtual QSize sizeHint() const; - virtual void setVisible(bool); - -protected: - virtual void paintEvent(QPaintEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *mouseEvent); - virtual void mouseMoveEvent(QMouseEvent *); - virtual bool eventFilter(QObject *, QEvent *); - virtual bool event(QEvent *); - virtual void moveEvent(QMoveEvent *moveEvent); - virtual void showEvent(QShowEvent *showEvent); - virtual void hideEvent(QHideEvent *hideEvent); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizepolicy.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizepolicy.sip deleted file mode 100644 index 10a52af..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsizepolicy.sip +++ /dev/null @@ -1,108 +0,0 @@ -// qsizepolicy.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSizePolicy -{ -%TypeHeaderCode -#include -%End - -public: - enum PolicyFlag /BaseType=IntFlag/ - { - GrowFlag, - ExpandFlag, - ShrinkFlag, - IgnoreFlag, - }; - - enum Policy - { - Fixed, - Minimum, - Maximum, - Preferred, - MinimumExpanding, - Expanding, - Ignored, - }; - - QSizePolicy(); - QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = QSizePolicy::DefaultType); - QSizePolicy(const QVariant &variant /GetWrapper/) /NoDerived/; -%MethodCode - if (a0->canConvert()) - sipCpp = new QSizePolicy(a0->value()); - else - sipError = sipBadCallableArg(0, a0Wrapper); -%End - - QSizePolicy::Policy horizontalPolicy() const; - QSizePolicy::Policy verticalPolicy() const; - void setHorizontalPolicy(QSizePolicy::Policy d); - void setVerticalPolicy(QSizePolicy::Policy d); - Qt::Orientations expandingDirections() const; - void setHeightForWidth(bool b); - bool hasHeightForWidth() const; - bool operator==(const QSizePolicy &s) const; - bool operator!=(const QSizePolicy &s) const; - int horizontalStretch() const; - int verticalStretch() const; - void setHorizontalStretch(int stretchFactor); - void setVerticalStretch(int stretchFactor); - void transpose(); - QSizePolicy transposed() const; - - enum ControlType /BaseType=Flag/ - { - DefaultType, - ButtonBox, - CheckBox, - ComboBox, - Frame, - GroupBox, - Label, - Line, - LineEdit, - PushButton, - RadioButton, - Slider, - SpinBox, - TabWidget, - ToolButton, - }; - - typedef QFlags ControlTypes; - QSizePolicy::ControlType controlType() const; - void setControlType(QSizePolicy::ControlType type); - void setWidthForHeight(bool b); - bool hasWidthForHeight() const; - bool retainSizeWhenHidden() const; - void setRetainSizeWhenHidden(bool retainSize); - Py_hash_t __hash__() const; -%MethodCode - sipRes = qHash(*sipCpp); -%End -}; - -QDataStream &operator<<(QDataStream &, const QSizePolicy &) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &, QSizePolicy & /Constrained/) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qslider.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qslider.sip deleted file mode 100644 index 522990b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qslider.sip +++ /dev/null @@ -1,57 +0,0 @@ -// qslider.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSlider : public QAbstractSlider -{ -%TypeHeaderCode -#include -%End - -public: - enum TickPosition - { - NoTicks, - TicksAbove, - TicksLeft, - TicksBelow, - TicksRight, - TicksBothSides, - }; - - explicit QSlider(QWidget *parent /TransferThis/ = 0); - QSlider(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - virtual ~QSlider(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setTickPosition(QSlider::TickPosition position); - QSlider::TickPosition tickPosition() const; - void setTickInterval(int ti); - int tickInterval() const; - virtual bool event(QEvent *event); - -protected: - virtual void initStyleOption(QStyleOptionSlider *option) const; - virtual void paintEvent(QPaintEvent *ev); - virtual void mousePressEvent(QMouseEvent *ev); - virtual void mouseReleaseEvent(QMouseEvent *ev); - virtual void mouseMoveEvent(QMouseEvent *ev); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qspinbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qspinbox.sip deleted file mode 100644 index 139c6b5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qspinbox.sip +++ /dev/null @@ -1,106 +0,0 @@ -// qspinbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSpinBox : public QAbstractSpinBox -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSpinBox(QWidget *parent /TransferThis/ = 0); - virtual ~QSpinBox(); - int value() const; - QString prefix() const; - void setPrefix(const QString &p); - QString suffix() const; - void setSuffix(const QString &s); - QString cleanText() const; - int singleStep() const; - void setSingleStep(int val); - int minimum() const; - void setMinimum(int min); - int maximum() const; - void setMaximum(int max); - void setRange(int min, int max); - -protected: - virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; - virtual int valueFromText(const QString &text) const; - virtual QString textFromValue(int v) const; - virtual void fixup(QString &str /In,Out/) const; - virtual bool event(QEvent *e); - -public slots: - void setValue(int val); - -signals: - void valueChanged(int); - void textChanged(const QString &); - -public: - int displayIntegerBase() const; - void setDisplayIntegerBase(int base); - QAbstractSpinBox::StepType stepType() const; - void setStepType(QAbstractSpinBox::StepType stepType); -}; - -class QDoubleSpinBox : public QAbstractSpinBox -{ -%TypeHeaderCode -#include -%End - -public: - explicit QDoubleSpinBox(QWidget *parent /TransferThis/ = 0); - virtual ~QDoubleSpinBox(); - double value() const; - QString prefix() const; - void setPrefix(const QString &p); - QString suffix() const; - void setSuffix(const QString &s); - QString cleanText() const; - double singleStep() const; - void setSingleStep(double val); - double minimum() const; - void setMinimum(double min); - double maximum() const; - void setMaximum(double max); - void setRange(double min, double max); - int decimals() const; - void setDecimals(int prec); - virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; - virtual double valueFromText(const QString &text) const; - virtual QString textFromValue(double v) const; - virtual void fixup(QString &str /In,Out/) const; - -public slots: - void setValue(double val); - -signals: - void valueChanged(double); - void textChanged(const QString &); - -public: - QAbstractSpinBox::StepType stepType() const; - void setStepType(QAbstractSpinBox::StepType stepType); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplashscreen.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplashscreen.sip deleted file mode 100644 index 122af19..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplashscreen.sip +++ /dev/null @@ -1,50 +0,0 @@ -// qsplashscreen.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSplashScreen : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags()); - QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QSplashScreen(); - void setPixmap(const QPixmap &pixmap); - const QPixmap pixmap() const; - void finish(QWidget *w); - void repaint(); - QString message() const; - -public slots: - void showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black); - void clearMessage(); - -signals: - void messageChanged(const QString &message); - -protected: - virtual void drawContents(QPainter *painter); - virtual bool event(QEvent *e); - virtual void mousePressEvent(QMouseEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplitter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplitter.sip deleted file mode 100644 index 9c0b91c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsplitter.sip +++ /dev/null @@ -1,98 +0,0 @@ -// qsplitter.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSplitter : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - explicit QSplitter(QWidget *parent /TransferThis/ = 0); - QSplitter(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); - virtual ~QSplitter(); - void addWidget(QWidget *widget /Transfer/); - void insertWidget(int index, QWidget *widget /Transfer/); - void setOrientation(Qt::Orientation); - Qt::Orientation orientation() const; - void setChildrenCollapsible(bool); - bool childrenCollapsible() const; - void setCollapsible(int index, bool); - bool isCollapsible(int index) const; - void setOpaqueResize(bool opaque = true); - bool opaqueResize() const; - void refresh(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - QList sizes() const; - void setSizes(const QList &list); - QByteArray saveState() const; - bool restoreState(const QByteArray &state); - int handleWidth() const; - void setHandleWidth(int); - int indexOf(QWidget *w) const; - QWidget *widget(int index) const; - int count() const /__len__/; - void getRange(int index, int *, int *) const; - QSplitterHandle *handle(int index) const /Transfer/; - void setStretchFactor(int index, int stretch); - QWidget *replaceWidget(int index, QWidget *widget /Transfer/) /TransferBack/; - -signals: - void splitterMoved(int pos, int index); - -protected: - virtual QSplitterHandle *createHandle() /Transfer/; - virtual void childEvent(QChildEvent *); - virtual bool event(QEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void changeEvent(QEvent *); - void moveSplitter(int pos, int index); - void setRubberBand(int position); - int closestLegalPosition(int, int); -}; - -class QSplitterHandle : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QSplitterHandle(Qt::Orientation o, QSplitter *parent /TransferThis/); - virtual ~QSplitterHandle(); - void setOrientation(Qt::Orientation o); - Qt::Orientation orientation() const; - bool opaqueResize() const; - QSplitter *splitter() const; - virtual QSize sizeHint() const; - -protected: - virtual void paintEvent(QPaintEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual bool event(QEvent *); - void moveSplitter(int p); - int closestLegalPosition(int p); - virtual void resizeEvent(QResizeEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedlayout.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedlayout.sip deleted file mode 100644 index 72bcb54..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedlayout.sip +++ /dev/null @@ -1,112 +0,0 @@ -// qstackedlayout.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStackedLayout : public QLayout -{ -%TypeHeaderCode -#include -%End - -public: - enum StackingMode - { - StackOne, - StackAll, - }; - - QStackedLayout(); - explicit QStackedLayout(QWidget *parent /TransferThis/); - explicit QStackedLayout(QLayout *parentLayout /TransferThis/); - virtual ~QStackedLayout(); - int addWidget(QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->addWidget(a0); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a0Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows addWidget(QWidget()). - sipTransferTo(a0Wrapper, sipSelf); - } -%End - - int insertWidget(int index, QWidget *w /GetWrapper/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipRes = sipCpp->insertWidget(a0, a1); - Py_END_ALLOW_THREADS - - // The layout's parent widget (if there is one) will now have ownership. - QWidget *parent = sipCpp->parentWidget(); - - if (parent) - { - PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); - - if (py_parent) - sipTransferTo(a1Wrapper, py_parent); - } - else - { - // For now give the Python ownership to the layout. This maintains - // compatibility with previous versions and allows insertWidget(QWidget()). - sipTransferTo(a1Wrapper, sipSelf); - } -%End - - QWidget *currentWidget() const; - int currentIndex() const; - QWidget *widget(int) const; - virtual int count() const; - virtual void addItem(QLayoutItem *item /Transfer/); - virtual QSize sizeHint() const; - virtual QSize minimumSize() const; - virtual QLayoutItem *itemAt(int) const; - virtual QLayoutItem *takeAt(int) /TransferBack/; - virtual void setGeometry(const QRect &rect); - -signals: - void widgetRemoved(int index); - void currentChanged(int index); - -public slots: - void setCurrentIndex(int index); - void setCurrentWidget(QWidget *w); - -public: - QStackedLayout::StackingMode stackingMode() const; - void setStackingMode(QStackedLayout::StackingMode stackingMode); - virtual bool hasHeightForWidth() const; - virtual int heightForWidth(int width) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedwidget.sip deleted file mode 100644 index b3c06d6..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstackedwidget.sip +++ /dev/null @@ -1,51 +0,0 @@ -// qstackedwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStackedWidget : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStackedWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QStackedWidget(); - int addWidget(QWidget *w /Transfer/); - int insertWidget(int index, QWidget *w /Transfer/); - void removeWidget(QWidget *w); - QWidget *currentWidget() const; - int currentIndex() const; - int indexOf(const QWidget *) const; - QWidget *widget(int) const; - int count() const /__len__/; - -public slots: - void setCurrentIndex(int index); - void setCurrentWidget(QWidget *w); - -signals: - void currentChanged(int); - void widgetRemoved(int index); - -protected: - virtual bool event(QEvent *e); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstatusbar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstatusbar.sip deleted file mode 100644 index 5bcabca..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstatusbar.sip +++ /dev/null @@ -1,55 +0,0 @@ -// qstatusbar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStatusBar : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStatusBar(QWidget *parent /TransferThis/ = 0); - virtual ~QStatusBar(); - void addWidget(QWidget *widget /Transfer/, int stretch = 0); - void addPermanentWidget(QWidget *widget /Transfer/, int stretch = 0); - void removeWidget(QWidget *widget); - void setSizeGripEnabled(bool); - bool isSizeGripEnabled() const; - QString currentMessage() const; - int insertWidget(int index, QWidget *widget /Transfer/, int stretch = 0); - int insertPermanentWidget(int index, QWidget *widget /Transfer/, int stretch = 0); - -public slots: - void showMessage(const QString &message, int msecs = 0); - void clearMessage(); - -signals: - void messageChanged(const QString &text); - -protected: - virtual void paintEvent(QPaintEvent *); - virtual void resizeEvent(QResizeEvent *); - void reformat(); - void hideOrShow(); - virtual bool event(QEvent *); - virtual void showEvent(QShowEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyle.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyle.sip deleted file mode 100644 index 4a69c4f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyle.sip +++ /dev/null @@ -1,696 +0,0 @@ -// qstyle.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStyle : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - QStyle(); - virtual ~QStyle(); - virtual void polish(QWidget *); - virtual void unpolish(QWidget *); - virtual void polish(QApplication *); - virtual void unpolish(QApplication *); - virtual void polish(QPalette & /In,Out/); - virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; - virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; - virtual void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; - virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; - virtual QPalette standardPalette() const; - - enum StateFlag /BaseType=Flag/ - { - State_None, - State_Enabled, - State_Raised, - State_Sunken, - State_Off, - State_NoChange, - State_On, - State_DownArrow, - State_Horizontal, - State_HasFocus, - State_Top, - State_Bottom, - State_FocusAtBorder, - State_AutoRaise, - State_MouseOver, - State_UpArrow, - State_Selected, - State_Active, - State_Open, - State_Children, - State_Item, - State_Sibling, - State_Editing, - State_KeyboardFocusChange, - State_ReadOnly, - State_Window, - State_Small, - State_Mini, - }; - - typedef QFlags State; - - enum PrimitiveElement /BaseType=UIntEnum/ - { - PE_Frame, - PE_FrameDefaultButton, - PE_FrameDockWidget, - PE_FrameFocusRect, - PE_FrameGroupBox, - PE_FrameLineEdit, - PE_FrameMenu, - PE_FrameTabWidget, - PE_FrameWindow, - PE_FrameButtonBevel, - PE_FrameButtonTool, - PE_FrameTabBarBase, - PE_PanelButtonCommand, - PE_PanelButtonBevel, - PE_PanelButtonTool, - PE_PanelMenuBar, - PE_PanelToolBar, - PE_PanelLineEdit, - PE_IndicatorArrowDown, - PE_IndicatorArrowLeft, - PE_IndicatorArrowRight, - PE_IndicatorArrowUp, - PE_IndicatorBranch, - PE_IndicatorButtonDropDown, - PE_IndicatorCheckBox, - PE_IndicatorDockWidgetResizeHandle, - PE_IndicatorHeaderArrow, - PE_IndicatorMenuCheckMark, - PE_IndicatorProgressChunk, - PE_IndicatorRadioButton, - PE_IndicatorSpinDown, - PE_IndicatorSpinMinus, - PE_IndicatorSpinPlus, - PE_IndicatorSpinUp, - PE_IndicatorToolBarHandle, - PE_IndicatorToolBarSeparator, - PE_PanelTipLabel, - PE_IndicatorTabTear, - PE_PanelScrollAreaCorner, - PE_Widget, - PE_IndicatorColumnViewArrow, - PE_FrameStatusBarItem, - PE_IndicatorItemViewItemCheck, - PE_IndicatorItemViewItemDrop, - PE_PanelItemViewItem, - PE_PanelItemViewRow, - PE_PanelStatusBar, - PE_IndicatorTabClose, - PE_PanelMenu, - PE_IndicatorTabTearLeft, - PE_IndicatorTabTearRight, - PE_CustomBase, - }; - - virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0; - - enum ControlElement /BaseType=UIntEnum/ - { - CE_PushButton, - CE_PushButtonBevel, - CE_PushButtonLabel, - CE_CheckBox, - CE_CheckBoxLabel, - CE_RadioButton, - CE_RadioButtonLabel, - CE_TabBarTab, - CE_TabBarTabShape, - CE_TabBarTabLabel, - CE_ProgressBar, - CE_ProgressBarGroove, - CE_ProgressBarContents, - CE_ProgressBarLabel, - CE_MenuItem, - CE_MenuScroller, - CE_MenuVMargin, - CE_MenuHMargin, - CE_MenuTearoff, - CE_MenuEmptyArea, - CE_MenuBarItem, - CE_MenuBarEmptyArea, - CE_ToolButtonLabel, - CE_Header, - CE_HeaderSection, - CE_HeaderLabel, - CE_ToolBoxTab, - CE_SizeGrip, - CE_Splitter, - CE_RubberBand, - CE_DockWidgetTitle, - CE_ScrollBarAddLine, - CE_ScrollBarSubLine, - CE_ScrollBarAddPage, - CE_ScrollBarSubPage, - CE_ScrollBarSlider, - CE_ScrollBarFirst, - CE_ScrollBarLast, - CE_FocusFrame, - CE_ComboBoxLabel, - CE_ToolBar, - CE_ToolBoxTabShape, - CE_ToolBoxTabLabel, - CE_HeaderEmptyArea, - CE_ColumnViewGrip, - CE_ItemViewItem, - CE_ShapedFrame, - CE_CustomBase, - }; - - virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0; - - enum SubElement /BaseType=UIntEnum/ - { - SE_PushButtonContents, - SE_PushButtonFocusRect, - SE_CheckBoxIndicator, - SE_CheckBoxContents, - SE_CheckBoxFocusRect, - SE_CheckBoxClickRect, - SE_RadioButtonIndicator, - SE_RadioButtonContents, - SE_RadioButtonFocusRect, - SE_RadioButtonClickRect, - SE_ComboBoxFocusRect, - SE_SliderFocusRect, - SE_ProgressBarGroove, - SE_ProgressBarContents, - SE_ProgressBarLabel, - SE_ToolBoxTabContents, - SE_HeaderLabel, - SE_HeaderArrow, - SE_TabWidgetTabBar, - SE_TabWidgetTabPane, - SE_TabWidgetTabContents, - SE_TabWidgetLeftCorner, - SE_TabWidgetRightCorner, - SE_TabBarTearIndicator, - SE_TreeViewDisclosureItem, - SE_LineEditContents, - SE_FrameContents, - SE_DockWidgetCloseButton, - SE_DockWidgetFloatButton, - SE_DockWidgetTitleBarText, - SE_DockWidgetIcon, - SE_CheckBoxLayoutItem, - SE_ComboBoxLayoutItem, - SE_DateTimeEditLayoutItem, - SE_LabelLayoutItem, - SE_ProgressBarLayoutItem, - SE_PushButtonLayoutItem, - SE_RadioButtonLayoutItem, - SE_SliderLayoutItem, - SE_SpinBoxLayoutItem, - SE_ToolButtonLayoutItem, - SE_FrameLayoutItem, - SE_GroupBoxLayoutItem, - SE_TabWidgetLayoutItem, - SE_ItemViewItemCheckIndicator, - SE_ItemViewItemDecoration, - SE_ItemViewItemText, - SE_ItemViewItemFocusRect, - SE_TabBarTabLeftButton, - SE_TabBarTabRightButton, - SE_TabBarTabText, - SE_ShapedFrameContents, - SE_ToolBarHandle, - SE_TabBarTearIndicatorLeft, - SE_TabBarScrollLeftButton, - SE_TabBarScrollRightButton, - SE_TabBarTearIndicatorRight, - SE_PushButtonBevel, - SE_CustomBase, - }; - - virtual QRect subElementRect(QStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const = 0; - - enum ComplexControl /BaseType=UIntEnum/ - { - CC_SpinBox, - CC_ComboBox, - CC_ScrollBar, - CC_Slider, - CC_ToolButton, - CC_TitleBar, - CC_Dial, - CC_GroupBox, - CC_MdiControls, - CC_CustomBase, - }; - - enum SubControl /BaseType=Flag/ - { - SC_None, - SC_ScrollBarAddLine, - SC_ScrollBarSubLine, - SC_ScrollBarAddPage, - SC_ScrollBarSubPage, - SC_ScrollBarFirst, - SC_ScrollBarLast, - SC_ScrollBarSlider, - SC_ScrollBarGroove, - SC_SpinBoxUp, - SC_SpinBoxDown, - SC_SpinBoxFrame, - SC_SpinBoxEditField, - SC_ComboBoxFrame, - SC_ComboBoxEditField, - SC_ComboBoxArrow, - SC_ComboBoxListBoxPopup, - SC_SliderGroove, - SC_SliderHandle, - SC_SliderTickmarks, - SC_ToolButton, - SC_ToolButtonMenu, - SC_TitleBarSysMenu, - SC_TitleBarMinButton, - SC_TitleBarMaxButton, - SC_TitleBarCloseButton, - SC_TitleBarNormalButton, - SC_TitleBarShadeButton, - SC_TitleBarUnshadeButton, - SC_TitleBarContextHelpButton, - SC_TitleBarLabel, - SC_DialGroove, - SC_DialHandle, - SC_DialTickmarks, - SC_GroupBoxCheckBox, - SC_GroupBoxLabel, - SC_GroupBoxContents, - SC_GroupBoxFrame, - SC_MdiMinButton, - SC_MdiNormalButton, - SC_MdiCloseButton, - SC_CustomBase, - SC_All, - }; - - typedef QFlags SubControls; - virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const = 0; - virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const = 0; - virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const = 0; - - enum PixelMetric /BaseType=UIntEnum/ - { - PM_ButtonMargin, - PM_ButtonDefaultIndicator, - PM_MenuButtonIndicator, - PM_ButtonShiftHorizontal, - PM_ButtonShiftVertical, - PM_DefaultFrameWidth, - PM_SpinBoxFrameWidth, - PM_ComboBoxFrameWidth, - PM_MaximumDragDistance, - PM_ScrollBarExtent, - PM_ScrollBarSliderMin, - PM_SliderThickness, - PM_SliderControlThickness, - PM_SliderLength, - PM_SliderTickmarkOffset, - PM_SliderSpaceAvailable, - PM_DockWidgetSeparatorExtent, - PM_DockWidgetHandleExtent, - PM_DockWidgetFrameWidth, - PM_TabBarTabOverlap, - PM_TabBarTabHSpace, - PM_TabBarTabVSpace, - PM_TabBarBaseHeight, - PM_TabBarBaseOverlap, - PM_ProgressBarChunkWidth, - PM_SplitterWidth, - PM_TitleBarHeight, - PM_MenuScrollerHeight, - PM_MenuHMargin, - PM_MenuVMargin, - PM_MenuPanelWidth, - PM_MenuTearoffHeight, - PM_MenuDesktopFrameWidth, - PM_MenuBarPanelWidth, - PM_MenuBarItemSpacing, - PM_MenuBarVMargin, - PM_MenuBarHMargin, - PM_IndicatorWidth, - PM_IndicatorHeight, - PM_ExclusiveIndicatorWidth, - PM_ExclusiveIndicatorHeight, - PM_DialogButtonsSeparator, - PM_DialogButtonsButtonWidth, - PM_DialogButtonsButtonHeight, - PM_MdiSubWindowFrameWidth, - PM_MdiSubWindowMinimizedWidth, - PM_HeaderMargin, - PM_HeaderMarkSize, - PM_HeaderGripMargin, - PM_TabBarTabShiftHorizontal, - PM_TabBarTabShiftVertical, - PM_TabBarScrollButtonWidth, - PM_ToolBarFrameWidth, - PM_ToolBarHandleExtent, - PM_ToolBarItemSpacing, - PM_ToolBarItemMargin, - PM_ToolBarSeparatorExtent, - PM_ToolBarExtensionExtent, - PM_SpinBoxSliderHeight, - PM_ToolBarIconSize, - PM_ListViewIconSize, - PM_IconViewIconSize, - PM_SmallIconSize, - PM_LargeIconSize, - PM_FocusFrameVMargin, - PM_FocusFrameHMargin, - PM_ToolTipLabelFrameWidth, - PM_CheckBoxLabelSpacing, - PM_TabBarIconSize, - PM_SizeGripSize, - PM_DockWidgetTitleMargin, - PM_MessageBoxIconSize, - PM_ButtonIconSize, - PM_DockWidgetTitleBarButtonMargin, - PM_RadioButtonLabelSpacing, - PM_LayoutLeftMargin, - PM_LayoutTopMargin, - PM_LayoutRightMargin, - PM_LayoutBottomMargin, - PM_LayoutHorizontalSpacing, - PM_LayoutVerticalSpacing, - PM_TabBar_ScrollButtonOverlap, - PM_TextCursorWidth, - PM_TabCloseIndicatorWidth, - PM_TabCloseIndicatorHeight, - PM_ScrollView_ScrollBarSpacing, - PM_SubMenuOverlap, - PM_ScrollView_ScrollBarOverlap, - PM_TreeViewIndentation, - PM_HeaderDefaultSectionSizeHorizontal, - PM_HeaderDefaultSectionSizeVertical, - PM_TitleBarButtonIconSize, - PM_TitleBarButtonSize, -%If (Qt_6_2_0 -) - PM_LineEditIconSize, -%End -%If (Qt_6_3_0 -) - PM_LineEditIconMargin, -%End - PM_CustomBase, - }; - - virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; - - enum ContentsType /BaseType=UIntEnum/ - { - CT_PushButton, - CT_CheckBox, - CT_RadioButton, - CT_ToolButton, - CT_ComboBox, - CT_Splitter, - CT_ProgressBar, - CT_MenuItem, - CT_MenuBarItem, - CT_MenuBar, - CT_Menu, - CT_TabBarTab, - CT_Slider, - CT_ScrollBar, - CT_LineEdit, - CT_SpinBox, - CT_SizeGrip, - CT_TabWidget, - CT_DialogButtons, - CT_HeaderSection, - CT_GroupBox, - CT_MdiControls, - CT_ItemViewItem, - CT_CustomBase, - }; - - virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const = 0; - - enum StyleHint /BaseType=UIntEnum/ - { - SH_EtchDisabledText, - SH_DitherDisabledText, - SH_ScrollBar_MiddleClickAbsolutePosition, - SH_ScrollBar_ScrollWhenPointerLeavesControl, - SH_TabBar_SelectMouseType, - SH_TabBar_Alignment, - SH_Header_ArrowAlignment, - SH_Slider_SnapToValue, - SH_Slider_SloppyKeyEvents, - SH_ProgressDialog_CenterCancelButton, - SH_ProgressDialog_TextLabelAlignment, - SH_PrintDialog_RightAlignButtons, - SH_MainWindow_SpaceBelowMenuBar, - SH_FontDialog_SelectAssociatedText, - SH_Menu_AllowActiveAndDisabled, - SH_Menu_SpaceActivatesItem, - SH_Menu_SubMenuPopupDelay, - SH_ScrollView_FrameOnlyAroundContents, - SH_MenuBar_AltKeyNavigation, - SH_ComboBox_ListMouseTracking, - SH_Menu_MouseTracking, - SH_MenuBar_MouseTracking, - SH_ItemView_ChangeHighlightOnFocus, - SH_Widget_ShareActivation, - SH_Workspace_FillSpaceOnMaximize, - SH_ComboBox_Popup, - SH_TitleBar_NoBorder, - SH_BlinkCursorWhenTextSelected, - SH_RichText_FullWidthSelection, - SH_Menu_Scrollable, - SH_GroupBox_TextLabelVerticalAlignment, - SH_GroupBox_TextLabelColor, - SH_Menu_SloppySubMenus, - SH_Table_GridLineColor, - SH_LineEdit_PasswordCharacter, - SH_DialogButtons_DefaultButton, - SH_ToolBox_SelectedPageTitleBold, - SH_TabBar_PreferNoArrows, - SH_ScrollBar_LeftClickAbsolutePosition, - SH_UnderlineShortcut, - SH_SpinBox_AnimateButton, - SH_SpinBox_KeyPressAutoRepeatRate, - SH_SpinBox_ClickAutoRepeatRate, - SH_Menu_FillScreenWithScroll, - SH_ToolTipLabel_Opacity, - SH_DrawMenuBarSeparator, - SH_TitleBar_ModifyNotification, - SH_Button_FocusPolicy, - SH_MessageBox_UseBorderForButtonSpacing, - SH_TitleBar_AutoRaise, - SH_ToolButton_PopupDelay, - SH_FocusFrame_Mask, - SH_RubberBand_Mask, - SH_WindowFrame_Mask, - SH_SpinControls_DisableOnBounds, - SH_Dial_BackgroundRole, - SH_ComboBox_LayoutDirection, - SH_ItemView_EllipsisLocation, - SH_ItemView_ShowDecorationSelected, - SH_ItemView_ActivateItemOnSingleClick, - SH_ScrollBar_ContextMenu, - SH_ScrollBar_RollBetweenButtons, - SH_Slider_StopMouseOverSlider, - SH_Slider_AbsoluteSetButtons, - SH_Slider_PageSetButtons, - SH_Menu_KeyboardSearch, - SH_TabBar_ElideMode, - SH_DialogButtonLayout, - SH_ComboBox_PopupFrameStyle, - SH_MessageBox_TextInteractionFlags, - SH_DialogButtonBox_ButtonsHaveIcons, - SH_MessageBox_CenterButtons, - SH_Menu_SelectionWrap, - SH_ItemView_MovementWithoutUpdatingSelection, - SH_ToolTip_Mask, - SH_FocusFrame_AboveWidget, - SH_TextControl_FocusIndicatorTextCharFormat, - SH_WizardStyle, - SH_ItemView_ArrowKeysNavigateIntoChildren, - SH_Menu_Mask, - SH_Menu_FlashTriggeredItem, - SH_Menu_FadeOutOnHide, - SH_SpinBox_ClickAutoRepeatThreshold, - SH_ItemView_PaintAlternatingRowColorsForEmptyArea, - SH_FormLayoutWrapPolicy, - SH_TabWidget_DefaultTabPosition, - SH_ToolBar_Movable, - SH_FormLayoutFieldGrowthPolicy, - SH_FormLayoutFormAlignment, - SH_FormLayoutLabelAlignment, - SH_ItemView_DrawDelegateFrame, - SH_TabBar_CloseButtonPosition, - SH_DockWidget_ButtonsHaveFrame, - SH_ToolButtonStyle, - SH_RequestSoftwareInputPanel, - SH_ListViewExpand_SelectMouseType, - SH_ScrollBar_Transient, - SH_Menu_SupportsSections, - SH_ToolTip_WakeUpDelay, - SH_ToolTip_FallAsleepDelay, - SH_Widget_Animate, - SH_Splitter_OpaqueResize, - SH_LineEdit_PasswordMaskDelay, - SH_TabBar_ChangeCurrentDelay, - SH_Menu_SubMenuUniDirection, - SH_Menu_SubMenuUniDirectionFailCount, - SH_Menu_SubMenuSloppySelectOtherActions, - SH_Menu_SubMenuSloppyCloseTimeout, - SH_Menu_SubMenuResetWhenReenteringParent, - SH_Menu_SubMenuDontStartSloppyOnLeave, - SH_ItemView_ScrollMode, - SH_TitleBar_ShowToolTipsOnButtons, - SH_Widget_Animation_Duration, - SH_ComboBox_AllowWheelScrolling, - SH_SpinBox_ButtonsInsideFrame, - SH_SpinBox_StepModifier, -%If (Qt_6_1_0 -) - SH_TabBar_AllowWheelScrolling, -%End -%If (Qt_6_3_0 -) - SH_Table_AlwaysDrawLeftTopGridLines, -%End -%If (Qt_6_3_0 -) - SH_SpinBox_SelectOnStep, -%End - SH_CustomBase, - }; - - virtual int styleHint(QStyle::StyleHint stylehint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const = 0; - - enum StandardPixmap /BaseType=UIntEnum/ - { - SP_TitleBarMenuButton, - SP_TitleBarMinButton, - SP_TitleBarMaxButton, - SP_TitleBarCloseButton, - SP_TitleBarNormalButton, - SP_TitleBarShadeButton, - SP_TitleBarUnshadeButton, - SP_TitleBarContextHelpButton, - SP_DockWidgetCloseButton, - SP_MessageBoxInformation, - SP_MessageBoxWarning, - SP_MessageBoxCritical, - SP_MessageBoxQuestion, - SP_DesktopIcon, - SP_TrashIcon, - SP_ComputerIcon, - SP_DriveFDIcon, - SP_DriveHDIcon, - SP_DriveCDIcon, - SP_DriveDVDIcon, - SP_DriveNetIcon, - SP_DirOpenIcon, - SP_DirClosedIcon, - SP_DirLinkIcon, - SP_FileIcon, - SP_FileLinkIcon, - SP_ToolBarHorizontalExtensionButton, - SP_ToolBarVerticalExtensionButton, - SP_FileDialogStart, - SP_FileDialogEnd, - SP_FileDialogToParent, - SP_FileDialogNewFolder, - SP_FileDialogDetailedView, - SP_FileDialogInfoView, - SP_FileDialogContentsView, - SP_FileDialogListView, - SP_FileDialogBack, - SP_DirIcon, - SP_DialogOkButton, - SP_DialogCancelButton, - SP_DialogHelpButton, - SP_DialogOpenButton, - SP_DialogSaveButton, - SP_DialogCloseButton, - SP_DialogApplyButton, - SP_DialogResetButton, - SP_DialogDiscardButton, - SP_DialogYesButton, - SP_DialogNoButton, - SP_ArrowUp, - SP_ArrowDown, - SP_ArrowLeft, - SP_ArrowRight, - SP_ArrowBack, - SP_ArrowForward, - SP_DirHomeIcon, - SP_CommandLink, - SP_VistaShield, - SP_BrowserReload, - SP_BrowserStop, - SP_MediaPlay, - SP_MediaStop, - SP_MediaPause, - SP_MediaSkipForward, - SP_MediaSkipBackward, - SP_MediaSeekForward, - SP_MediaSeekBackward, - SP_MediaVolume, - SP_MediaVolumeMuted, - SP_DirLinkOpenIcon, - SP_LineEditClearButton, - SP_DialogYesToAllButton, - SP_DialogNoToAllButton, - SP_DialogSaveAllButton, - SP_DialogAbortButton, - SP_DialogRetryButton, - SP_DialogIgnoreButton, - SP_RestoreDefaultsButton, -%If (Qt_6_3_0 -) - SP_TabCloseButton, -%End - SP_CustomBase, - }; - - virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; - virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; - virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const = 0; - static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect); - static QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos); - static int sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown = false); - static int sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown = false); - static Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment); - static QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle); - virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; - int combinedLayoutSpacing(QSizePolicy::ControlTypes controls1, QSizePolicy::ControlTypes controls2, Qt::Orientation orientation, QStyleOption *option = 0, QWidget *widget = 0) const; - - enum RequestSoftwareInputPanel - { - RSIP_OnMouseClickAndAlreadyFocused, - RSIP_OnMouseClick, - }; - - const QStyle *proxy() const; -%If (Qt_6_1_0 -) - QString name() const; -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleditemdelegate.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleditemdelegate.sip deleted file mode 100644 index 6425224..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleditemdelegate.sip +++ /dev/null @@ -1,46 +0,0 @@ -// qstyleditemdelegate.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStyledItemDelegate : public QAbstractItemDelegate -{ -%TypeHeaderCode -#include -%End - -public: - explicit QStyledItemDelegate(QObject *parent /TransferThis/ = 0); - virtual ~QStyledItemDelegate(); - virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; - virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; - virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; - virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; - QItemEditorFactory *itemEditorFactory() const; - void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/); - virtual QString displayText(const QVariant &value, const QLocale &locale) const; - -protected: - virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; - virtual bool eventFilter(QObject *object, QEvent *event); - virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylefactory.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylefactory.sip deleted file mode 100644 index 7be3f46..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylefactory.sip +++ /dev/null @@ -1,32 +0,0 @@ -// qstylefactory.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStyleFactory -{ -%TypeHeaderCode -#include -%End - -public: - static QStringList keys(); - static QStyle *create(const QString &) /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleoption.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleoption.sip deleted file mode 100644 index fce75e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstyleoption.sip +++ /dev/null @@ -1,1072 +0,0 @@ -// qstyleoption.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStyleOption -{ -%TypeHeaderCode -#include -%End - -%ConvertToSubClassCode - switch (sipCpp->type) - { - case QStyleOption::SO_Button: - sipType = sipType_QStyleOptionButton; - break; - - case QStyleOption::SO_ComboBox: - sipType = sipType_QStyleOptionComboBox; - break; - - case QStyleOption::SO_DockWidget: - sipType = sipType_QStyleOptionDockWidget; - break; - - case QStyleOption::SO_FocusRect: - sipType = sipType_QStyleOptionFocusRect; - break; - - case QStyleOption::SO_Frame: - sipType = sipType_QStyleOptionFrame; - break; - - case QStyleOption::SO_GraphicsItem: - sipType = sipType_QStyleOptionGraphicsItem; - break; - - case QStyleOption::SO_GroupBox: - sipType = sipType_QStyleOptionGroupBox; - break; - - case QStyleOption::SO_Header: - sipType = sipType_QStyleOptionHeader; - break; - - case QStyleOption::SO_MenuItem: - sipType = sipType_QStyleOptionMenuItem; - break; - - case QStyleOption::SO_ProgressBar: - sipType = sipType_QStyleOptionProgressBar; - break; - - case QStyleOption::SO_RubberBand: - sipType = sipType_QStyleOptionRubberBand; - break; - - case QStyleOption::SO_SizeGrip: - sipType = sipType_QStyleOptionSizeGrip; - break; - - case QStyleOption::SO_Slider: - sipType = sipType_QStyleOptionSlider; - break; - - case QStyleOption::SO_SpinBox: - sipType = sipType_QStyleOptionSpinBox; - break; - - case QStyleOption::SO_Tab: - sipType = sipType_QStyleOptionTab; - break; - - case QStyleOption::SO_TabBarBase: - sipType = sipType_QStyleOptionTabBarBase; - break; - - case QStyleOption::SO_TabWidgetFrame: - sipType = sipType_QStyleOptionTabWidgetFrame; - break; - - case QStyleOption::SO_TitleBar: - sipType = sipType_QStyleOptionTitleBar; - break; - - case QStyleOption::SO_ToolBar: - sipType = sipType_QStyleOptionToolBar; - break; - - case QStyleOption::SO_ToolBox: - sipType = sipType_QStyleOptionToolBox; - break; - - case QStyleOption::SO_ToolButton: - sipType = sipType_QStyleOptionToolButton; - break; - - case QStyleOption::SO_ViewItem: - sipType = sipType_QStyleOptionViewItem; - break; - - default: - if ((sipCpp->type & QStyleOption::SO_ComplexCustomBase) == QStyleOption::SO_ComplexCustomBase) - sipType = sipType_QStyleOptionComplex; - else - sipType = 0; - } -%End - -public: - enum OptionType - { - SO_Default, - SO_FocusRect, - SO_Button, - SO_Tab, - SO_MenuItem, - SO_Frame, - SO_ProgressBar, - SO_ToolBox, - SO_Header, - SO_DockWidget, - SO_ViewItem, - SO_TabWidgetFrame, - SO_TabBarBase, - SO_RubberBand, - SO_ToolBar, - SO_Complex, - SO_Slider, - SO_SpinBox, - SO_ToolButton, - SO_ComboBox, - SO_TitleBar, - SO_GroupBox, - SO_ComplexCustomBase, - SO_GraphicsItem, - SO_SizeGrip, - SO_CustomBase, - }; - - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - int version; - int type; - QStyle::State state; - Qt::LayoutDirection direction; - QRect rect; - QFontMetrics fontMetrics; - QPalette palette; - QObject *styleObject; - QStyleOption(int version = QStyleOption::Version, int type = QStyleOption::SO_Default); - QStyleOption(const QStyleOption &other); - ~QStyleOption(); - void initFrom(const QWidget *w); -}; - -class QStyleOptionFocusRect : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QColor backgroundColor; - QStyleOptionFocusRect(); - QStyleOptionFocusRect(const QStyleOptionFocusRect &other); -}; - -class QStyleOptionFrame : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum FrameFeature /BaseType=Flag/ - { - None, - Flat, - Rounded, - }; - - typedef QFlags FrameFeatures; - QStyleOptionFrame::FrameFeatures features; - QFrame::Shape frameShape; - int lineWidth; - int midLineWidth; - QStyleOptionFrame(); - QStyleOptionFrame(const QStyleOptionFrame &other); -}; - -class QStyleOptionTabWidgetFrame : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - int lineWidth; - int midLineWidth; - QTabBar::Shape shape; - QSize tabBarSize; - QSize rightCornerWidgetSize; - QSize leftCornerWidgetSize; - QRect tabBarRect; - QRect selectedTabRect; - QStyleOptionTabWidgetFrame(); - QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other); -}; - -class QStyleOptionTabBarBase : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QTabBar::Shape shape; - QRect tabBarRect; - QRect selectedTabRect; - bool documentMode; - QStyleOptionTabBarBase(); - QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other); -}; - -class QStyleOptionHeader : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum SectionPosition - { - Beginning, - Middle, - End, - OnlyOneSection, - }; - - enum SelectedPosition - { - NotAdjacent, - NextIsSelected, - PreviousIsSelected, - NextAndPreviousAreSelected, - }; - - enum SortIndicator - { - None, - SortUp, - SortDown, - }; - - int section; - QString text; - Qt::Alignment textAlignment; - QIcon icon; - Qt::Alignment iconAlignment; - QStyleOptionHeader::SectionPosition position; - QStyleOptionHeader::SelectedPosition selectedPosition; - QStyleOptionHeader::SortIndicator sortIndicator; - Qt::Orientation orientation; - QStyleOptionHeader(); - QStyleOptionHeader(const QStyleOptionHeader &other); -}; - -%If (Qt_6_1_0 -) - -class QStyleOptionHeaderV2 : public QStyleOptionHeader -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyleOptionHeaderV2(); - QStyleOptionHeaderV2(const QStyleOptionHeaderV2 &other); - Qt::TextElideMode textElideMode; - bool isSectionDragTarget; -}; - -%End - -class QStyleOptionButton : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum ButtonFeature /BaseType=Flag/ - { - None, - Flat, - HasMenu, - DefaultButton, - AutoDefaultButton, - CommandLinkButton, - }; - - typedef QFlags ButtonFeatures; - QStyleOptionButton::ButtonFeatures features; - QString text; - QIcon icon; - QSize iconSize; - QStyleOptionButton(); - QStyleOptionButton(const QStyleOptionButton &other); -}; - -class QStyleOptionTab : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum TabPosition - { - Beginning, - Middle, - End, - OnlyOneTab, -%If (Qt_6_6_0 -) - Moving, -%End - }; - - enum SelectedPosition - { - NotAdjacent, - NextIsSelected, - PreviousIsSelected, - }; - - enum CornerWidget /BaseType=Flag/ - { - NoCornerWidgets, - LeftCornerWidget, - RightCornerWidget, - }; - - typedef QFlags CornerWidgets; - QTabBar::Shape shape; - QString text; - QIcon icon; - int row; - QStyleOptionTab::TabPosition position; - QStyleOptionTab::SelectedPosition selectedPosition; - QStyleOptionTab::CornerWidgets cornerWidgets; - QSize iconSize; - bool documentMode; - QSize leftButtonSize; - QSize rightButtonSize; - - enum TabFeature /BaseType=Flag/ - { - None, - HasFrame, - }; - - typedef QFlags TabFeatures; - QStyleOptionTab::TabFeatures features; - int tabIndex; - QStyleOptionTab(); - QStyleOptionTab(const QStyleOptionTab &other); -}; - -class QStyleOptionProgressBar : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - int minimum; - int maximum; - int progress; - QString text; - Qt::Alignment textAlignment; - bool textVisible; - bool invertedAppearance; - bool bottomToTop; - QStyleOptionProgressBar(); - QStyleOptionProgressBar(const QStyleOptionProgressBar &other); -}; - -class QStyleOptionMenuItem : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum MenuItemType - { - Normal, - DefaultItem, - Separator, - SubMenu, - Scroller, - TearOff, - Margin, - EmptyArea, - }; - - enum CheckType - { - NotCheckable, - Exclusive, - NonExclusive, - }; - - QStyleOptionMenuItem::MenuItemType menuItemType; - QStyleOptionMenuItem::CheckType checkType; - bool checked; - bool menuHasCheckableItems; - QRect menuRect; - QString text; - QIcon icon; - int maxIconWidth; - QFont font; - int reservedShortcutWidth; - QStyleOptionMenuItem(); - QStyleOptionMenuItem(const QStyleOptionMenuItem &other); -}; - -class QStyleOptionDockWidget : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QString title; - bool closable; - bool movable; - bool floatable; - bool verticalTitleBar; - QStyleOptionDockWidget(); - QStyleOptionDockWidget(const QStyleOptionDockWidget &other); -}; - -class QStyleOptionViewItem : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum Position - { - Left, - Right, - Top, - Bottom, - }; - - Qt::Alignment displayAlignment; - Qt::Alignment decorationAlignment; - Qt::TextElideMode textElideMode; - QStyleOptionViewItem::Position decorationPosition; - QSize decorationSize; - QFont font; - bool showDecorationSelected; - - enum ViewItemFeature /BaseType=Flag/ - { - None, - WrapText, - Alternate, - HasCheckIndicator, - HasDisplay, - HasDecoration, - }; - - typedef QFlags ViewItemFeatures; - QStyleOptionViewItem::ViewItemFeatures features; - QLocale locale; - const QWidget *widget; - - enum ViewItemPosition - { - Invalid, - Beginning, - Middle, - End, - OnlyOne, - }; - - QModelIndex index; - Qt::CheckState checkState; - QIcon icon; - QString text; - QStyleOptionViewItem::ViewItemPosition viewItemPosition; - QBrush backgroundBrush; - QStyleOptionViewItem(); - QStyleOptionViewItem(const QStyleOptionViewItem &other); -}; - -class QStyleOptionToolBox : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QString text; - QIcon icon; - - enum TabPosition - { - Beginning, - Middle, - End, - OnlyOneTab, - }; - - enum SelectedPosition - { - NotAdjacent, - NextIsSelected, - PreviousIsSelected, - }; - - QStyleOptionToolBox::TabPosition position; - QStyleOptionToolBox::SelectedPosition selectedPosition; - QStyleOptionToolBox(); - QStyleOptionToolBox(const QStyleOptionToolBox &other); -}; - -class QStyleOptionRubberBand : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QRubberBand::Shape shape; - bool opaque; - QStyleOptionRubberBand(); - QStyleOptionRubberBand(const QStyleOptionRubberBand &other); -}; - -class QStyleOptionComplex : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyle::SubControls subControls; - QStyle::SubControls activeSubControls; - QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = QStyleOption::SO_Complex); - QStyleOptionComplex(const QStyleOptionComplex &other); -}; - -class QStyleOptionSlider : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - Qt::Orientation orientation; - int minimum; - int maximum; - QSlider::TickPosition tickPosition; - int tickInterval; - bool upsideDown; - int sliderPosition; - int sliderValue; - int singleStep; - int pageStep; - qreal notchTarget; - bool dialWrapping; - Qt::KeyboardModifiers keyboardModifiers; - QStyleOptionSlider(); - QStyleOptionSlider(const QStyleOptionSlider &other); -}; - -class QStyleOptionSpinBox : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QAbstractSpinBox::ButtonSymbols buttonSymbols; - QAbstractSpinBox::StepEnabled stepEnabled; - bool frame; - QStyleOptionSpinBox(); - QStyleOptionSpinBox(const QStyleOptionSpinBox &other); -}; - -class QStyleOptionToolButton : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum ToolButtonFeature /BaseType=Flag/ - { - None, - Arrow, - Menu, - PopupDelay, - MenuButtonPopup, - HasMenu, - }; - - typedef QFlags ToolButtonFeatures; - QStyleOptionToolButton::ToolButtonFeatures features; - QIcon icon; - QSize iconSize; - QString text; - Qt::ArrowType arrowType; - Qt::ToolButtonStyle toolButtonStyle; - QPoint pos; - QFont font; - QStyleOptionToolButton(); - QStyleOptionToolButton(const QStyleOptionToolButton &other); -}; - -class QStyleOptionComboBox : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - bool editable; - QRect popupRect; - bool frame; - QString currentText; - QIcon currentIcon; - QSize iconSize; - Qt::Alignment textAlignment; - QStyleOptionComboBox(); - QStyleOptionComboBox(const QStyleOptionComboBox &other); -}; - -class QStyleOptionTitleBar : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QString text; - QIcon icon; - int titleBarState; - Qt::WindowFlags titleBarFlags; - QStyleOptionTitleBar(); - QStyleOptionTitleBar(const QStyleOptionTitleBar &other); -}; - -class QStyleHintReturn -{ -%TypeHeaderCode -#include -%End - -public: - enum HintReturnType - { - SH_Default, - SH_Mask, - SH_Variant, - }; - - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyleHintReturn(int version = QStyleOption::Version, int type = QStyleHintReturn::SH_Default); - ~QStyleHintReturn(); - int version; - int type; -}; - -class QStyleHintReturnMask : public QStyleHintReturn -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyleHintReturnMask(); - ~QStyleHintReturnMask(); - QRegion region; -}; - -class QStyleOptionToolBar : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - enum ToolBarPosition - { - Beginning, - Middle, - End, - OnlyOne, - }; - - enum ToolBarFeature /BaseType=Flag/ - { - None, - Movable, - }; - - typedef QFlags ToolBarFeatures; - QStyleOptionToolBar::ToolBarPosition positionOfLine; - QStyleOptionToolBar::ToolBarPosition positionWithinLine; - Qt::ToolBarArea toolBarArea; - QStyleOptionToolBar::ToolBarFeatures features; - int lineWidth; - int midLineWidth; - QStyleOptionToolBar(); - QStyleOptionToolBar(const QStyleOptionToolBar &other); -}; - -class QStyleOptionGroupBox : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyleOptionFrame::FrameFeatures features; - QString text; - Qt::Alignment textAlignment; - QColor textColor; - int lineWidth; - int midLineWidth; - QStyleOptionGroupBox(); - QStyleOptionGroupBox(const QStyleOptionGroupBox &other); -}; - -class QStyleOptionSizeGrip : public QStyleOptionComplex -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - Qt::Corner corner; - QStyleOptionSizeGrip(); - QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other); -}; - -class QStyleOptionGraphicsItem : public QStyleOption -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QRectF exposedRect; - static qreal levelOfDetailFromTransform(const QTransform &worldTransform); - QStyleOptionGraphicsItem(); - QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other); -}; - -class QStyleHintReturnVariant : public QStyleHintReturn -{ -%TypeHeaderCode -#include -%End - -public: - enum StyleOptionType - { - Type, - }; - - enum StyleOptionVersion - { - Version, - }; - - QStyleHintReturnVariant(); - ~QStyleHintReturnVariant(); - QVariant variant; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylepainter.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylepainter.sip deleted file mode 100644 index 88e40ec..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qstylepainter.sip +++ /dev/null @@ -1,41 +0,0 @@ -// qstylepainter.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QStylePainter : public QPainter -{ -%TypeHeaderCode -#include -%End - -public: - QStylePainter(); - explicit QStylePainter(QWidget *w); - QStylePainter(QPaintDevice *pd, QWidget *w); - bool begin(QWidget *w); - bool begin(QPaintDevice *pd, QWidget *w); - QStyle *style() const; - void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt); - void drawControl(QStyle::ControlElement ce, const QStyleOption &opt); - void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt); - void drawItemText(const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole); - void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsystemtrayicon.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsystemtrayicon.sip deleted file mode 100644 index 36cb0fb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qsystemtrayicon.sip +++ /dev/null @@ -1,78 +0,0 @@ -// qsystemtrayicon.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QSystemTrayIcon : public QObject -{ -%TypeHeaderCode -#include -%End - -public: - enum ActivationReason - { - Unknown, - Context, - DoubleClick, - Trigger, - MiddleClick, - }; - - enum MessageIcon - { - NoIcon, - Information, - Warning, - Critical, - }; - - QSystemTrayIcon(QObject *parent /TransferThis/ = 0); - QSystemTrayIcon(const QIcon &icon, QObject *parent /TransferThis/ = 0); - virtual ~QSystemTrayIcon(); - void setContextMenu(QMenu *menu /KeepReference/); - QMenu *contextMenu() const; - QRect geometry() const; - QIcon icon() const; - void setIcon(const QIcon &icon); - QString toolTip() const; - void setToolTip(const QString &tip); - static bool isSystemTrayAvailable(); - static bool supportsMessages(); - -public slots: - void showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 10000); - void showMessage(const QString &title, const QString &msg, const QIcon &icon, int msecs = 10000); - -public: - bool isVisible() const; - -public slots: - void hide(); - void setVisible(bool visible); - void show(); - -signals: - void activated(QSystemTrayIcon::ActivationReason reason); - void messageClicked(); - -protected: - virtual bool event(QEvent *event); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabbar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabbar.sip deleted file mode 100644 index 94cd959..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabbar.sip +++ /dev/null @@ -1,163 +0,0 @@ -// qtabbar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTabBar : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTabBar(QWidget *parent /TransferThis/ = 0); - virtual ~QTabBar(); - - enum Shape - { - RoundedNorth, - RoundedSouth, - RoundedWest, - RoundedEast, - TriangularNorth, - TriangularSouth, - TriangularWest, - TriangularEast, - }; - - QTabBar::Shape shape() const; - void setShape(QTabBar::Shape shape); - int addTab(const QString &text); - int addTab(const QIcon &icon, const QString &text); - int insertTab(int index, const QString &text); - int insertTab(int index, const QIcon &icon, const QString &text); - void removeTab(int index); - bool isTabEnabled(int index) const; - void setTabEnabled(int index, bool); - QString tabText(int index) const; - void setTabText(int index, const QString &text); - QColor tabTextColor(int index) const; - void setTabTextColor(int index, const QColor &color); - QIcon tabIcon(int index) const; - void setTabIcon(int index, const QIcon &icon); - void setTabToolTip(int index, const QString &tip); - QString tabToolTip(int index) const; - void setTabWhatsThis(int index, const QString &text); - QString tabWhatsThis(int index) const; - void setTabData(int index, const QVariant &data); - QVariant tabData(int index) const; - int tabAt(const QPoint &pos) const; - QRect tabRect(int index) const; - int currentIndex() const; - int count() const /__len__/; - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setDrawBase(bool drawTheBase); - bool drawBase() const; - QSize iconSize() const; - void setIconSize(const QSize &size); - Qt::TextElideMode elideMode() const; - void setElideMode(Qt::TextElideMode); - void setUsesScrollButtons(bool useButtons); - bool usesScrollButtons() const; - -public slots: - void setCurrentIndex(int index); - -signals: - void currentChanged(int index); - -protected: - virtual void initStyleOption(QStyleOptionTab *option, int tabIndex) const; - virtual QSize tabSizeHint(int index) const; - virtual void tabInserted(int index); - virtual void tabRemoved(int index); - virtual void tabLayoutChange(); - virtual bool event(QEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void showEvent(QShowEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void changeEvent(QEvent *); - -public: - enum ButtonPosition - { - LeftSide, - RightSide, - }; - - enum SelectionBehavior - { - SelectLeftTab, - SelectRightTab, - SelectPreviousTab, - }; - - void moveTab(int from, int to); - bool tabsClosable() const; - void setTabsClosable(bool closable); - void setTabButton(int index, QTabBar::ButtonPosition position, QWidget *widget /Transfer/); - QWidget *tabButton(int index, QTabBar::ButtonPosition position) const; - QTabBar::SelectionBehavior selectionBehaviorOnRemove() const; - void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior); - bool expanding() const; - void setExpanding(bool enabled); - bool isMovable() const; - void setMovable(bool movable); - bool documentMode() const; - void setDocumentMode(bool set); - -signals: - void tabCloseRequested(int index); - void tabMoved(int from, int to); - -protected: - virtual void hideEvent(QHideEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *event); - virtual QSize minimumTabSizeHint(int index) const; - -signals: - void tabBarClicked(int index); - void tabBarDoubleClicked(int index); - -public: - bool autoHide() const; - void setAutoHide(bool hide); - bool changeCurrentOnDrag() const; - void setChangeCurrentOnDrag(bool change); - -protected: - virtual void timerEvent(QTimerEvent *event); - -public: -%If (PyQt_Accessibility) - QString accessibleTabName(int index) const; -%End -%If (PyQt_Accessibility) - void setAccessibleTabName(int index, const QString &name); -%End - bool isTabVisible(int index) const; - void setTabVisible(int index, bool visible); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtableview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtableview.sip deleted file mode 100644 index bab4c86..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtableview.sip +++ /dev/null @@ -1,114 +0,0 @@ -// qtableview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTableView : public QAbstractItemView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTableView(QWidget *parent /TransferThis/ = 0); - virtual ~QTableView(); - virtual void setModel(QAbstractItemModel *model /KeepReference/); - virtual void setRootIndex(const QModelIndex &index); - virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); - QHeaderView *horizontalHeader() const; - QHeaderView *verticalHeader() const; - void setHorizontalHeader(QHeaderView *header /Transfer/); - void setVerticalHeader(QHeaderView *header /Transfer/); - int rowViewportPosition(int row) const; - void setRowHeight(int row, int height); - int rowHeight(int row) const; - int rowAt(int y) const; - int columnViewportPosition(int column) const; - void setColumnWidth(int column, int width); - int columnWidth(int column) const; - int columnAt(int x) const; - bool isRowHidden(int row) const; - void setRowHidden(int row, bool hide); - bool isColumnHidden(int column) const; - void setColumnHidden(int column, bool hide); - bool showGrid() const; - void setShowGrid(bool show); - Qt::PenStyle gridStyle() const; - void setGridStyle(Qt::PenStyle style); - virtual QRect visualRect(const QModelIndex &index) const; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - virtual QModelIndex indexAt(const QPoint &p) const; - -public slots: - void selectRow(int row); - void selectColumn(int column); - void hideRow(int row); - void hideColumn(int column); - void showRow(int row); - void showColumn(int column); - void resizeRowToContents(int row); - void resizeRowsToContents(); - void resizeColumnToContents(int column); - void resizeColumnsToContents(); - -protected slots: - void rowMoved(int row, int oldIndex, int newIndex); - void columnMoved(int column, int oldIndex, int newIndex); - void rowResized(int row, int oldHeight, int newHeight); - void columnResized(int column, int oldWidth, int newWidth); - void rowCountChanged(int oldCount, int newCount); - void columnCountChanged(int oldCount, int newCount); - -protected: - virtual void scrollContentsBy(int dx, int dy); - virtual void paintEvent(QPaintEvent *e); - virtual void timerEvent(QTimerEvent *event); - virtual int horizontalOffset() const; - virtual int verticalOffset() const; - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; - virtual QModelIndexList selectedIndexes() const; - virtual void updateGeometries(); - virtual int sizeHintForRow(int row) const; - virtual int sizeHintForColumn(int column) const; - virtual void verticalScrollbarAction(int action); - virtual void horizontalScrollbarAction(int action); - virtual bool isIndexHidden(const QModelIndex &index) const; - virtual QSize viewportSizeHint() const; - -public: - void setSortingEnabled(bool enable); - bool isSortingEnabled() const; - void setSpan(int row, int column, int rowSpan, int columnSpan); - int rowSpan(int row, int column) const; - int columnSpan(int row, int column) const; - void sortByColumn(int column, Qt::SortOrder order); - void setWordWrap(bool on); - bool wordWrap() const; - void setCornerButtonEnabled(bool enable); - bool isCornerButtonEnabled() const; - void clearSpans(); - -protected: - virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - virtual void initViewItemOption(QStyleOptionViewItem *option) const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtablewidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtablewidget.sip deleted file mode 100644 index ea29def..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtablewidget.sip +++ /dev/null @@ -1,247 +0,0 @@ -// qtablewidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTableWidgetSelectionRange -{ -%TypeHeaderCode -#include -%End - -public: - QTableWidgetSelectionRange(); - QTableWidgetSelectionRange(int top, int left, int bottom, int right); - int topRow() const; - int bottomRow() const; - int leftColumn() const; - int rightColumn() const; - int rowCount() const; - int columnCount() const; -}; - -class QTableWidgetItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum ItemType /BaseType=IntEnum/ - { - Type, - UserType, - }; - - explicit QTableWidgetItem(int type = QTableWidgetItem::Type); - QTableWidgetItem(const QString &text, int type = QTableWidgetItem::Type); - QTableWidgetItem(const QIcon &icon, const QString &text, int type = QTableWidgetItem::Type); - QTableWidgetItem(const QTableWidgetItem &other); - virtual ~QTableWidgetItem(); - virtual QTableWidgetItem *clone() const /Factory/; - QTableWidget *tableWidget() const; - Qt::ItemFlags flags() const; - QString text() const; - QIcon icon() const; - QString statusTip() const; - QString toolTip() const; - QString whatsThis() const; - QFont font() const; - int textAlignment() const; -%If (Qt_6_4_0 -) - void setTextAlignment(Qt::Alignment alignment); -%End - void setTextAlignment(int alignment); - Qt::CheckState checkState() const; - void setCheckState(Qt::CheckState state); - virtual QVariant data(int role) const; - virtual void setData(int role, const QVariant &value); - virtual bool operator<(const QTableWidgetItem &other /NoCopy/) const; - virtual void read(QDataStream &in) /ReleaseGIL/; - virtual void write(QDataStream &out) const /ReleaseGIL/; - int type() const; - void setFlags(Qt::ItemFlags aflags); - void setText(const QString &atext); - void setIcon(const QIcon &aicon); - void setStatusTip(const QString &astatusTip); - void setToolTip(const QString &atoolTip); - void setWhatsThis(const QString &awhatsThis); - void setFont(const QFont &afont); - QSize sizeHint() const; - void setSizeHint(const QSize &size); - QBrush background() const; - void setBackground(const QBrush &brush); - QBrush foreground() const; - void setForeground(const QBrush &brush); - int row() const; - int column() const; - void setSelected(bool aselect); - bool isSelected() const; - -private: - QTableWidgetItem &operator=(const QTableWidgetItem &); -}; - -QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item /Constrained/) /ReleaseGIL/; - -class QTableWidget : public QTableView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTableWidget(QWidget *parent /TransferThis/ = 0); - QTableWidget(int rows, int columns, QWidget *parent /TransferThis/ = 0); - virtual ~QTableWidget(); - void setRowCount(int rows); - int rowCount() const; - void setColumnCount(int columns); - int columnCount() const; - int row(const QTableWidgetItem *item) const; - int column(const QTableWidgetItem *item) const; - QTableWidgetItem *item(int row, int column) const; - void setItem(int row, int column, QTableWidgetItem *item /Transfer/); - QTableWidgetItem *takeItem(int row, int column) /TransferBack/; - QTableWidgetItem *verticalHeaderItem(int row) const; - void setVerticalHeaderItem(int row, QTableWidgetItem *item /Transfer/); - QTableWidgetItem *takeVerticalHeaderItem(int row) /TransferBack/; - QTableWidgetItem *horizontalHeaderItem(int column) const; - void setHorizontalHeaderItem(int column, QTableWidgetItem *item /Transfer/); - QTableWidgetItem *takeHorizontalHeaderItem(int column) /TransferBack/; - void setVerticalHeaderLabels(const QStringList &labels); - void setHorizontalHeaderLabels(const QStringList &labels); - int currentRow() const; - int currentColumn() const; - QTableWidgetItem *currentItem() const; - void setCurrentItem(QTableWidgetItem *item); - void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command); - void setCurrentCell(int row, int column); - void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command); - void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder); - void setSortingEnabled(bool enable); - bool isSortingEnabled() const; - void editItem(QTableWidgetItem *item); - void openPersistentEditor(QTableWidgetItem *item); - void closePersistentEditor(QTableWidgetItem *item); - QWidget *cellWidget(int row, int column) const; - void setCellWidget(int row, int column, QWidget *widget /Transfer/); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->cellWidget(a0, a1); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->setCellWidget(a0, a1, a2); - Py_END_ALLOW_THREADS -%End - - void removeCellWidget(int arow, int acolumn); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->cellWidget(a0, a1); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->removeCellWidget(a0, a1); - Py_END_ALLOW_THREADS -%End - - void setRangeSelected(const QTableWidgetSelectionRange &range, bool select); - QList selectedRanges() const; - QList selectedItems() const; - QList findItems(const QString &text, Qt::MatchFlags flags) const; - int visualRow(int logicalRow) const; - int visualColumn(int logicalColumn) const; - QTableWidgetItem *itemAt(const QPoint &p) const; - QTableWidgetItem *itemAt(int ax, int ay) const; - QRect visualItemRect(const QTableWidgetItem *item) const; - const QTableWidgetItem *itemPrototype() const; - void setItemPrototype(const QTableWidgetItem *item /Transfer/); - -public slots: - void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - void insertRow(int row); - void insertColumn(int column); - void removeRow(int row); - void removeColumn(int column); - void clear(); - void clearContents(); - -signals: - void itemPressed(QTableWidgetItem *item); - void itemClicked(QTableWidgetItem *item); - void itemDoubleClicked(QTableWidgetItem *item); - void itemActivated(QTableWidgetItem *item); - void itemEntered(QTableWidgetItem *item); - void itemChanged(QTableWidgetItem *item); - void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous); - void itemSelectionChanged(); - void cellPressed(int row, int column); - void cellClicked(int row, int column); - void cellDoubleClicked(int row, int column); - void cellActivated(int row, int column); - void cellEntered(int row, int column); - void cellChanged(int row, int column); - void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); - -protected: - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QList &items) const /TransferBack/; - virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action); - virtual Qt::DropActions supportedDropActions() const; - -public: - QList items(const QMimeData *data) const; - QModelIndex indexFromItem(const QTableWidgetItem *item) const; - QTableWidgetItem *itemFromIndex(const QModelIndex &index) const; - -protected: - virtual bool event(QEvent *e); - virtual void dropEvent(QDropEvent *event); - -public: - bool isPersistentEditorOpen(QTableWidgetItem *item) const; - -private: - virtual void setModel(QAbstractItemModel *model /KeepReference/); -}; - -%If (Qt_6_3_0 -) -bool operator==(const QTableWidgetSelectionRange &lhs, const QTableWidgetSelectionRange &rhs); -%End -%If (Qt_6_3_0 -) -bool operator!=(const QTableWidgetSelectionRange &lhs, const QTableWidgetSelectionRange &rhs); -%End diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabwidget.sip deleted file mode 100644 index 104b71d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtabwidget.sip +++ /dev/null @@ -1,132 +0,0 @@ -// qtabwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTabWidget : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTabWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QTabWidget(); - void clear(); - int addTab(QWidget *widget /Transfer/, const QString &); - int addTab(QWidget *widget /Transfer/, const QIcon &icon, const QString &label); - int insertTab(int index, QWidget *widget /Transfer/, const QString &); - int insertTab(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &label); - void removeTab(int index); - bool isTabEnabled(int index) const; - void setTabEnabled(int index, bool); - QString tabText(int index) const; - void setTabText(int index, const QString &); - QIcon tabIcon(int index) const; - void setTabIcon(int index, const QIcon &icon); - void setTabToolTip(int index, const QString &tip); - QString tabToolTip(int index) const; - void setTabWhatsThis(int index, const QString &text); - QString tabWhatsThis(int index) const; - int currentIndex() const; - QWidget *currentWidget() const; - QWidget *widget(int index) const; - int indexOf(const QWidget *widget) const; - int count() const /__len__/; - - enum TabPosition - { - North, - South, - West, - East, - }; - - QTabWidget::TabPosition tabPosition() const; - void setTabPosition(QTabWidget::TabPosition); - - enum TabShape - { - Rounded, - Triangular, - }; - - QTabWidget::TabShape tabShape() const; - void setTabShape(QTabWidget::TabShape s); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner); - QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const; - -public slots: - void setCurrentIndex(int index); - void setCurrentWidget(QWidget *widget); - -signals: - void currentChanged(int index); - -protected: - virtual void initStyleOption(QStyleOptionTabWidgetFrame *option) const; - virtual void tabInserted(int index); - virtual void tabRemoved(int index); - virtual bool event(QEvent *); - virtual void showEvent(QShowEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void paintEvent(QPaintEvent *); - void setTabBar(QTabBar * /Transfer/); - -public: - QTabBar *tabBar() const; - -protected: - virtual void changeEvent(QEvent *); - -public: - Qt::TextElideMode elideMode() const; - void setElideMode(Qt::TextElideMode); - QSize iconSize() const; - void setIconSize(const QSize &size); - bool usesScrollButtons() const; - void setUsesScrollButtons(bool useButtons); - bool tabsClosable() const; - void setTabsClosable(bool closeable); - bool isMovable() const; - void setMovable(bool movable); - bool documentMode() const; - void setDocumentMode(bool set); - -signals: - void tabCloseRequested(int index); - -public: - virtual int heightForWidth(int width) const; - virtual bool hasHeightForWidth() const; - -signals: - void tabBarClicked(int index); - void tabBarDoubleClicked(int index); - -public: - bool tabBarAutoHide() const; - void setTabBarAutoHide(bool enabled); - bool isTabVisible(int index) const; - void setTabVisible(int index, bool visible); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextbrowser.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextbrowser.sip deleted file mode 100644 index 7a6c0d2..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextbrowser.sip +++ /dev/null @@ -1,82 +0,0 @@ -// qtextbrowser.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextBrowser : public QTextEdit -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTextBrowser(QWidget *parent /TransferThis/ = 0); - virtual ~QTextBrowser(); - QUrl source() const; - QStringList searchPaths() const; - void setSearchPaths(const QStringList &paths); - virtual QVariant loadResource(int type, const QUrl &name); - -public slots: - void setSource(const QUrl &name, QTextDocument::ResourceType type = QTextDocument::UnknownResource); - virtual void backward(); - virtual void forward(); - virtual void home(); - virtual void reload(); - -signals: - void backwardAvailable(bool); - void forwardAvailable(bool); - void sourceChanged(const QUrl &); - void highlighted(const QUrl &); - void anchorClicked(const QUrl &); - -protected: - virtual bool event(QEvent *e); - virtual void keyPressEvent(QKeyEvent *ev); - virtual void mouseMoveEvent(QMouseEvent *ev); - virtual void mousePressEvent(QMouseEvent *ev); - virtual void mouseReleaseEvent(QMouseEvent *ev); - virtual void focusOutEvent(QFocusEvent *ev); - virtual bool focusNextPrevChild(bool next); - virtual void paintEvent(QPaintEvent *e); - -public: - bool isBackwardAvailable() const; - bool isForwardAvailable() const; - void clearHistory(); - bool openExternalLinks() const; - void setOpenExternalLinks(bool open); - bool openLinks() const; - void setOpenLinks(bool open); - QString historyTitle(int) const; - QUrl historyUrl(int) const; - int backwardHistoryCount() const; - int forwardHistoryCount() const; - -signals: - void historyChanged(); - -public: - QTextDocument::ResourceType sourceType() const; - -protected: - virtual void doSetSource(const QUrl &name, QTextDocument::ResourceType type = QTextDocument::UnknownResource); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextedit.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextedit.sip deleted file mode 100644 index 673d34e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtextedit.sip +++ /dev/null @@ -1,202 +0,0 @@ -// qtextedit.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTextEdit : public QAbstractScrollArea -{ -%TypeHeaderCode -#include -%End - -public: - struct ExtraSelection - { -%TypeHeaderCode -#include -%End - - QTextCursor cursor; - QTextCharFormat format; - }; - - enum LineWrapMode - { - NoWrap, - WidgetWidth, - FixedPixelWidth, - FixedColumnWidth, - }; - - enum AutoFormattingFlag /BaseType=Flag/ - { - AutoNone, - AutoBulletList, - AutoAll, - }; - - typedef QFlags AutoFormatting; - explicit QTextEdit(QWidget *parent /TransferThis/ = 0); - QTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0); - virtual ~QTextEdit(); - void setDocument(QTextDocument *document /KeepReference/); - QTextDocument *document() const; - void setTextCursor(const QTextCursor &cursor); - QTextCursor textCursor() const; - bool isReadOnly() const; - void setReadOnly(bool ro); - qreal fontPointSize() const; - QString fontFamily() const; - int fontWeight() const; - bool fontUnderline() const; - bool fontItalic() const; - QColor textColor() const; - QFont currentFont() const; - Qt::Alignment alignment() const; - void mergeCurrentCharFormat(const QTextCharFormat &modifier); - void setCurrentCharFormat(const QTextCharFormat &format); - QTextCharFormat currentCharFormat() const; - QTextEdit::AutoFormatting autoFormatting() const; - void setAutoFormatting(QTextEdit::AutoFormatting features); - bool tabChangesFocus() const; - void setTabChangesFocus(bool b); - void setDocumentTitle(const QString &title); - QString documentTitle() const; - bool isUndoRedoEnabled() const; - void setUndoRedoEnabled(bool enable); - QTextEdit::LineWrapMode lineWrapMode() const; - void setLineWrapMode(QTextEdit::LineWrapMode mode); - int lineWrapColumnOrWidth() const; - void setLineWrapColumnOrWidth(int w); - QTextOption::WrapMode wordWrapMode() const; - void setWordWrapMode(QTextOption::WrapMode policy); - bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); - QString toPlainText() const; - QString toHtml() const; - void append(const QString &text); - void ensureCursorVisible(); - virtual QVariant loadResource(int type, const QUrl &name); - QMenu *createStandardContextMenu() /Factory/; - QMenu *createStandardContextMenu(const QPoint &position) /Factory/; - QTextCursor cursorForPosition(const QPoint &pos) const; - QRect cursorRect(const QTextCursor &cursor) const; - QRect cursorRect() const; - QString anchorAt(const QPoint &pos) const; - bool overwriteMode() const; - void setOverwriteMode(bool overwrite); - bool acceptRichText() const; - void setAcceptRichText(bool accept); - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - Qt::TextInteractionFlags textInteractionFlags() const; - void setCursorWidth(int width); - int cursorWidth() const; - void setExtraSelections(const QList &selections); - QList extraSelections() const; - bool canPaste() const; - void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); -%If (PyQt_Printer) - void print(QPagedPaintDevice *printer) const; -%End - -public slots: - void setFontPointSize(qreal s); - void setFontFamily(const QString &fontFamily); - void setFontWeight(int w); - void setFontUnderline(bool b); - void setFontItalic(bool b); - void setText(const QString &text); - void setTextColor(const QColor &c); - void setCurrentFont(const QFont &f); - void setAlignment(Qt::Alignment a); - void setPlainText(const QString &text); - void setHtml(const QString &text); - void cut(); - void copy(); - void paste(); - void clear(); - void selectAll(); - void insertPlainText(const QString &text); - void insertHtml(const QString &text); - void scrollToAnchor(const QString &name); - void redo(); - void undo(); - void zoomIn(int range = 1); - void zoomOut(int range = 1); - -signals: - void textChanged(); - void undoAvailable(bool b); - void redoAvailable(bool b); - void currentCharFormatChanged(const QTextCharFormat &format); - void copyAvailable(bool b); - void selectionChanged(); - void cursorPositionChanged(); - -protected: - virtual bool event(QEvent *e); - virtual void timerEvent(QTimerEvent *e); - virtual void keyPressEvent(QKeyEvent *e); - virtual void keyReleaseEvent(QKeyEvent *e); - virtual void resizeEvent(QResizeEvent *); - virtual void paintEvent(QPaintEvent *e); - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - virtual void mouseReleaseEvent(QMouseEvent *e); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual bool focusNextPrevChild(bool next); - virtual void contextMenuEvent(QContextMenuEvent *e); - virtual void dragEnterEvent(QDragEnterEvent *e); - virtual void dragLeaveEvent(QDragLeaveEvent *e); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dropEvent(QDropEvent *e); - virtual void focusInEvent(QFocusEvent *e); - virtual void focusOutEvent(QFocusEvent *e); - virtual void showEvent(QShowEvent *); - virtual void changeEvent(QEvent *e); - virtual void wheelEvent(QWheelEvent *e); - virtual QMimeData *createMimeDataFromSelection() const /Factory/; - virtual bool canInsertFromMimeData(const QMimeData *source) const; - virtual void insertFromMimeData(const QMimeData *source); - virtual void inputMethodEvent(QInputMethodEvent *); - -public: - virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const; - -protected: - virtual void scrollContentsBy(int dx, int dy); - -public: - QColor textBackgroundColor() const; - -public slots: - void setTextBackgroundColor(const QColor &c); - -public: - void setPlaceholderText(const QString &placeholderText); - QString placeholderText() const; - bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); - QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const; - qreal tabStopDistance() const; - void setTabStopDistance(qreal distance); - QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; - -public slots: - void setMarkdown(const QString &markdown); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbar.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbar.sip deleted file mode 100644 index ed59c72..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbar.sip +++ /dev/null @@ -1,121 +0,0 @@ -// qtoolbar.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QToolBar : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - QToolBar(const QString &title, QWidget *parent /TransferThis/ = 0); - explicit QToolBar(QWidget *parent /TransferThis/ = 0); - virtual ~QToolBar(); - void setMovable(bool movable); - bool isMovable() const; - void setAllowedAreas(Qt::ToolBarAreas areas); - Qt::ToolBarAreas allowedAreas() const; - bool isAreaAllowed(Qt::ToolBarArea area) const; - void setOrientation(Qt::Orientation orientation); - Qt::Orientation orientation() const; - void clear(); -%If (- Qt_6_3_0) - void addAction(QAction *); -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text) /Transfer/; -%End -%If (- Qt_6_3_0) - QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; -%End -%If (- Qt_6_3_0) - QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - -%End -%If (- Qt_6_3_0) - QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - -%End - QAction *addSeparator() /Transfer/; - QAction *insertSeparator(QAction *before) /Transfer/; - QAction *addWidget(QWidget *widget /Transfer/) /Transfer/; - QAction *insertWidget(QAction *before, QWidget *widget /Transfer/) /Transfer/; - QRect actionGeometry(QAction *action) const; - QAction *actionAt(const QPoint &p) const; - QAction *actionAt(int ax, int ay) const; - QAction *toggleViewAction() const; - QSize iconSize() const; - Qt::ToolButtonStyle toolButtonStyle() const; - QWidget *widgetForAction(QAction *action) const; - -public slots: - void setIconSize(const QSize &iconSize); - void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle); - -signals: - void actionTriggered(QAction *action); - void movableChanged(bool movable); - void allowedAreasChanged(Qt::ToolBarAreas allowedAreas); - void orientationChanged(Qt::Orientation orientation); - void iconSizeChanged(const QSize &iconSize); - void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); - void topLevelChanged(bool topLevel); - void visibilityChanged(bool visible); - -protected: - virtual void initStyleOption(QStyleOptionToolBar *option) const; - virtual void actionEvent(QActionEvent *event); - virtual void changeEvent(QEvent *event); - virtual void paintEvent(QPaintEvent *event); - virtual bool event(QEvent *event); - -public: - bool isFloatable() const; - void setFloatable(bool floatable); - bool isFloating() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbox.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbox.sip deleted file mode 100644 index 1e3ee29..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbox.sip +++ /dev/null @@ -1,64 +0,0 @@ -// qtoolbox.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QToolBox : public QFrame -{ -%TypeHeaderCode -#include -%End - -public: - QToolBox(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QToolBox(); - int addItem(QWidget *item /Transfer/, const QString &text); - int addItem(QWidget *item /Transfer/, const QIcon &iconSet, const QString &text); - int insertItem(int index, QWidget *item /Transfer/, const QString &text); - int insertItem(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &text); - void removeItem(int index); - void setItemEnabled(int index, bool enabled); - bool isItemEnabled(int index) const; - void setItemText(int index, const QString &text); - QString itemText(int index) const; - void setItemIcon(int index, const QIcon &icon); - QIcon itemIcon(int index) const; - void setItemToolTip(int index, const QString &toolTip); - QString itemToolTip(int index) const; - int currentIndex() const; - QWidget *currentWidget() const; - QWidget *widget(int index) const; - int indexOf(const QWidget *widget) const; - int count() const /__len__/; - -public slots: - void setCurrentIndex(int index); - void setCurrentWidget(QWidget *widget); - -signals: - void currentChanged(int index); - -protected: - virtual void itemInserted(int index); - virtual void itemRemoved(int index); - virtual bool event(QEvent *e); - virtual void showEvent(QShowEvent *e); - virtual void changeEvent(QEvent *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbutton.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbutton.sip deleted file mode 100644 index cb67ada..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtoolbutton.sip +++ /dev/null @@ -1,76 +0,0 @@ -// qtoolbutton.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QToolButton : public QAbstractButton -{ -%TypeHeaderCode -#include -%End - -public: - enum ToolButtonPopupMode - { - DelayedPopup, - MenuButtonPopup, - InstantPopup, - }; - - explicit QToolButton(QWidget *parent /TransferThis/ = 0); - virtual ~QToolButton(); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - Qt::ToolButtonStyle toolButtonStyle() const; - Qt::ArrowType arrowType() const; - void setArrowType(Qt::ArrowType type); - void setMenu(QMenu *menu /KeepReference/); - QMenu *menu() const; - void setPopupMode(QToolButton::ToolButtonPopupMode mode); - QToolButton::ToolButtonPopupMode popupMode() const; - QAction *defaultAction() const; - void setAutoRaise(bool enable); - bool autoRaise() const; - -public slots: - void showMenu(); - void setToolButtonStyle(Qt::ToolButtonStyle style); - void setDefaultAction(QAction * /KeepReference/); - -signals: - void triggered(QAction *); - -protected: - virtual void initStyleOption(QStyleOptionToolButton *option) const; - virtual bool event(QEvent *e); - virtual void mousePressEvent(QMouseEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void actionEvent(QActionEvent *); - virtual void enterEvent(QEnterEvent *); - virtual void leaveEvent(QEvent *); - virtual void timerEvent(QTimerEvent *); - virtual void changeEvent(QEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void nextCheckState(); - virtual bool hitButton(const QPoint &pos) const; -%If (Qt_6_2_0 -) - virtual void checkStateSet(); -%End -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtooltip.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtooltip.sip deleted file mode 100644 index afc5f02..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtooltip.sip +++ /dev/null @@ -1,40 +0,0 @@ -// qtooltip.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QToolTip -{ -%TypeHeaderCode -#include -%End - - QToolTip(); - -public: - static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0, const QRect &rect = {}, int msecShowTime = -1); - static QPalette palette(); - static void hideText(); - static void setPalette(const QPalette &); - static QFont font(); - static void setFont(const QFont &); - static bool isVisible(); - static QString text(); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreeview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreeview.sip deleted file mode 100644 index 22779bc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreeview.sip +++ /dev/null @@ -1,155 +0,0 @@ -// qtreeview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTreeView : public QAbstractItemView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTreeView(QWidget *parent /TransferThis/ = 0); - virtual ~QTreeView(); - virtual void setModel(QAbstractItemModel *model /KeepReference/); - virtual void setRootIndex(const QModelIndex &index); - virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); - QHeaderView *header() const; - void setHeader(QHeaderView *header /Transfer/); - int indentation() const; - void setIndentation(int i); - bool rootIsDecorated() const; - void setRootIsDecorated(bool show); - bool uniformRowHeights() const; - void setUniformRowHeights(bool uniform); - bool itemsExpandable() const; - void setItemsExpandable(bool enable); - int columnViewportPosition(int column) const; - int columnWidth(int column) const; - int columnAt(int x) const; - bool isColumnHidden(int column) const; - void setColumnHidden(int column, bool hide); - bool isRowHidden(int row, const QModelIndex &parent) const; - void setRowHidden(int row, const QModelIndex &parent, bool hide); - bool isExpanded(const QModelIndex &index) const; - void setExpanded(const QModelIndex &index, bool expand); - virtual void keyboardSearch(const QString &search); - virtual QRect visualRect(const QModelIndex &index) const; - virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - virtual QModelIndex indexAt(const QPoint &p) const; - QModelIndex indexAbove(const QModelIndex &index) const; - QModelIndex indexBelow(const QModelIndex &index) const; - virtual void reset(); - -signals: - void expanded(const QModelIndex &index); - void collapsed(const QModelIndex &index); - -public: - virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList &roles = QList()); - -public slots: - void hideColumn(int column); - void showColumn(int column); - void expand(const QModelIndex &index); - void expandAll(); - void collapse(const QModelIndex &index); - void collapseAll(); - void resizeColumnToContents(int column); - virtual void selectAll(); - -protected slots: - void columnResized(int column, int oldSize, int newSize); - void columnCountChanged(int oldCount, int newCount); - void columnMoved(); - void reexpand(); - void rowsRemoved(const QModelIndex &parent, int first, int last); - -protected: - virtual void scrollContentsBy(int dx, int dy); - virtual void rowsInserted(const QModelIndex &parent, int start, int end); - virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); - virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); - virtual int horizontalOffset() const; - virtual int verticalOffset() const; - virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); - virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; - virtual QModelIndexList selectedIndexes() const; - virtual void changeEvent(QEvent *event); - virtual void paintEvent(QPaintEvent *e); - virtual void timerEvent(QTimerEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); - virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &options /NoCopy/, const QModelIndex &index) const; - virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; - void drawTree(QPainter *painter, const QRegion ®ion) const; - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual void keyPressEvent(QKeyEvent *event); - virtual void updateGeometries(); - virtual int sizeHintForColumn(int column) const; - int indexRowSizeHint(const QModelIndex &index) const; - virtual void horizontalScrollbarAction(int action); - virtual bool isIndexHidden(const QModelIndex &index) const; - -public: - void setColumnWidth(int column, int width); - void setSortingEnabled(bool enable); - bool isSortingEnabled() const; - void setAnimated(bool enable); - bool isAnimated() const; - void setAllColumnsShowFocus(bool enable); - bool allColumnsShowFocus() const; - void sortByColumn(int column, Qt::SortOrder order); - int autoExpandDelay() const; - void setAutoExpandDelay(int delay); - bool isFirstColumnSpanned(int row, const QModelIndex &parent) const; - void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span); - void setWordWrap(bool on); - bool wordWrap() const; - -public slots: - void expandToDepth(int depth); - -protected: - virtual void dragMoveEvent(QDragMoveEvent *event); - virtual bool viewportEvent(QEvent *event); - int rowHeight(const QModelIndex &index) const; - virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - -public: - bool expandsOnDoubleClick() const; - void setExpandsOnDoubleClick(bool enable); - bool isHeaderHidden() const; - void setHeaderHidden(bool hide); - void setTreePosition(int logicalIndex); - int treePosition() const; - -protected: - virtual QSize viewportSizeHint() const; - -public: - void resetIndentation(); - -public slots: - void expandRecursively(const QModelIndex &index, int depth = -1); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidget.sip deleted file mode 100644 index 66136d1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidget.sip +++ /dev/null @@ -1,246 +0,0 @@ -// qtreewidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTreeWidgetItem /Supertype=PyQt6.sip.wrapper/ -{ -%TypeHeaderCode -#include -%End - -public: - enum ItemType /BaseType=IntEnum/ - { - Type, - UserType, - }; - - QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, QTreeWidgetItem *after, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, const QStringList &strings, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(QTreeWidget *parent /TransferThis/, QTreeWidgetItem *after, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(QTreeWidget *parent /TransferThis/, const QStringList &strings, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(QTreeWidget *parent /TransferThis/, int type = QTreeWidgetItem::Type); - QTreeWidgetItem(const QStringList &strings, int type = QTreeWidgetItem::Type); - explicit QTreeWidgetItem(int type = QTreeWidgetItem::Type); - QTreeWidgetItem(const QTreeWidgetItem &other); - virtual ~QTreeWidgetItem(); - virtual QTreeWidgetItem *clone() const /Factory/; - QTreeWidget *treeWidget() const; - Qt::ItemFlags flags() const; - QString text(int column) const; - QIcon icon(int column) const; - QString statusTip(int column) const; - QString toolTip(int column) const; - QString whatsThis(int column) const; - QFont font(int column) const; - int textAlignment(int column) const; -%If (Qt_6_4_0 -) - void setTextAlignment(int column, Qt::Alignment alignment); -%End - void setTextAlignment(int column, int alignment); - Qt::CheckState checkState(int column) const; - void setCheckState(int column, Qt::CheckState state); - virtual QVariant data(int column, int role) const; - virtual void setData(int column, int role, const QVariant &value); - virtual bool operator<(const QTreeWidgetItem &other /NoCopy/) const; - virtual void read(QDataStream &in) /ReleaseGIL/; - virtual void write(QDataStream &out) const /ReleaseGIL/; - QTreeWidgetItem *parent() const; - QTreeWidgetItem *child(int index) const; - int childCount() const; - int columnCount() const; - void addChild(QTreeWidgetItem *child /Transfer/); - void insertChild(int index, QTreeWidgetItem *child /Transfer/); - QTreeWidgetItem *takeChild(int index) /TransferBack/; - int type() const; - void setFlags(Qt::ItemFlags aflags); - void setText(int column, const QString &atext); - void setIcon(int column, const QIcon &aicon); - void setStatusTip(int column, const QString &astatusTip); - void setToolTip(int column, const QString &atoolTip); - void setWhatsThis(int column, const QString &awhatsThis); - void setFont(int column, const QFont &afont); - int indexOfChild(QTreeWidgetItem *achild) const; - QSize sizeHint(int column) const; - void setSizeHint(int column, const QSize &size); - void addChildren(const QList &children /Transfer/); - void insertChildren(int index, const QList &children /Transfer/); - QList takeChildren() /TransferBack/; - QBrush background(int column) const; - void setBackground(int column, const QBrush &brush); - QBrush foreground(int column) const; - void setForeground(int column, const QBrush &brush); - void sortChildren(int column, Qt::SortOrder order); - void setSelected(bool aselect); - bool isSelected() const; - void setHidden(bool ahide); - bool isHidden() const; - void setExpanded(bool aexpand); - bool isExpanded() const; - - enum ChildIndicatorPolicy - { - ShowIndicator, - DontShowIndicator, - DontShowIndicatorWhenChildless, - }; - - void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy); - QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const; - void removeChild(QTreeWidgetItem *child /TransferBack/); - void setFirstColumnSpanned(bool aspan); - bool isFirstColumnSpanned() const; - void setDisabled(bool disabled); - bool isDisabled() const; - -protected: - void emitDataChanged(); - -private: - QTreeWidgetItem &operator=(const QTreeWidgetItem &); -}; - -QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item) /ReleaseGIL/; -QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item /Constrained/) /ReleaseGIL/; - -class QTreeWidget : public QTreeView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QTreeWidget(QWidget *parent /TransferThis/ = 0); - virtual ~QTreeWidget(); - int columnCount() const; - void setColumnCount(int columns); - QTreeWidgetItem *topLevelItem(int index) const; - int topLevelItemCount() const; - void insertTopLevelItem(int index, QTreeWidgetItem *item /Transfer/); - void addTopLevelItem(QTreeWidgetItem *item /Transfer/); - QTreeWidgetItem *takeTopLevelItem(int index) /TransferBack/; - int indexOfTopLevelItem(QTreeWidgetItem *item) const; - void insertTopLevelItems(int index, const QList &items /Transfer/); - void addTopLevelItems(const QList &items /Transfer/); - QTreeWidgetItem *headerItem() const; - void setHeaderItem(QTreeWidgetItem *item /Transfer/); - void setHeaderLabels(const QStringList &labels); - QTreeWidgetItem *currentItem() const; - int currentColumn() const; - void setCurrentItem(QTreeWidgetItem *item); - void setCurrentItem(QTreeWidgetItem *item, int column); - void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command); - QTreeWidgetItem *itemAt(const QPoint &p) const; - QTreeWidgetItem *itemAt(int ax, int ay) const; - QRect visualItemRect(const QTreeWidgetItem *item) const; - int sortColumn() const; - void sortItems(int column, Qt::SortOrder order); - void editItem(QTreeWidgetItem *item, int column = 0); - void openPersistentEditor(QTreeWidgetItem *item, int column = 0); - void closePersistentEditor(QTreeWidgetItem *item, int column = 0); - QWidget *itemWidget(QTreeWidgetItem *item, int column) const; - void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget /Transfer/); -%MethodCode - // We have to break the association with any existing widget. Note that I'm - // not sure this is really necessary as it should get tidied up when Qt - // destroys any current widget, except (possibly) when the widget wasn't - // created from PyQt. See also removeItemWidget(), QListWidget and - // QTableWidget. - QWidget *w = sipCpp->itemWidget(a0, a1); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->setItemWidget(a0, a1, a2); - Py_END_ALLOW_THREADS -%End - - QList selectedItems() const; - QList findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const; - -public slots: - void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); - void expandItem(const QTreeWidgetItem *item); - void collapseItem(const QTreeWidgetItem *item); - void clear(); - -signals: - void itemPressed(QTreeWidgetItem *item, int column); - void itemClicked(QTreeWidgetItem *item, int column); - void itemDoubleClicked(QTreeWidgetItem *item, int column); - void itemActivated(QTreeWidgetItem *item, int column); - void itemEntered(QTreeWidgetItem *item, int column); - void itemChanged(QTreeWidgetItem *item, int column); - void itemExpanded(QTreeWidgetItem *item); - void itemCollapsed(QTreeWidgetItem *item); - void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); - void itemSelectionChanged(); - -protected: - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QList &items) const /TransferBack/; - virtual bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action); - virtual Qt::DropActions supportedDropActions() const; - -public: - QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const; - QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const; - -protected: - virtual bool event(QEvent *e); - virtual void dropEvent(QDropEvent *event); - -public: - QTreeWidgetItem *invisibleRootItem() const /Transfer/; - void setHeaderLabel(const QString &alabel); - QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const; - QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const; - void removeItemWidget(QTreeWidgetItem *item, int column); -%MethodCode - // We have to break the association with any existing widget. - QWidget *w = sipCpp->itemWidget(a0, a1); - - if (w) - { - PyObject *wo = sipGetPyObject(w, sipType_QWidget); - - if (wo) - sipTransferTo(wo, 0); - } - - Py_BEGIN_ALLOW_THREADS - sipCpp->removeItemWidget(a0, a1); - Py_END_ALLOW_THREADS -%End - - virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); - bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const; - -private: - virtual void setModel(QAbstractItemModel *model /KeepReference/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidgetitemiterator.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidgetitemiterator.sip deleted file mode 100644 index 850a428..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qtreewidgetitemiterator.sip +++ /dev/null @@ -1,67 +0,0 @@ -// qtreewidgetitemiterator.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QTreeWidgetItemIterator -{ -%TypeHeaderCode -#include -%End - -public: - enum IteratorFlag /BaseType=Flag/ - { - All, - Hidden, - NotHidden, - Selected, - Unselected, - Selectable, - NotSelectable, - DragEnabled, - DragDisabled, - DropEnabled, - DropDisabled, - HasChildren, - NoChildren, - Checked, - NotChecked, - Enabled, - Disabled, - Editable, - NotEditable, - UserFlag, - }; - - typedef QFlags IteratorFlags; - QTreeWidgetItemIterator(QTreeWidgetItem *item, QTreeWidgetItemIterator::IteratorFlags flags = QTreeWidgetItemIterator::All); - QTreeWidgetItemIterator(QTreeWidget *widget, QTreeWidgetItemIterator::IteratorFlags flags = QTreeWidgetItemIterator::All); - QTreeWidgetItemIterator(const QTreeWidgetItemIterator &it); - ~QTreeWidgetItemIterator(); - QTreeWidgetItem *value() const; -%MethodCode - // SIP doesn't support operator* so this is a thin wrapper around it. - sipRes = sipCpp->operator*(); -%End - - QTreeWidgetItemIterator &operator+=(int n); - QTreeWidgetItemIterator &operator-=(int n); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qundoview.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qundoview.sip deleted file mode 100644 index f4161e0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qundoview.sip +++ /dev/null @@ -1,44 +0,0 @@ -// qundoview.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QUndoView : public QListView -{ -%TypeHeaderCode -#include -%End - -public: - explicit QUndoView(QWidget *parent /TransferThis/ = 0); - QUndoView(QUndoStack *stack, QWidget *parent /TransferThis/ = 0); - QUndoView(QUndoGroup *group, QWidget *parent /TransferThis/ = 0); - virtual ~QUndoView(); - QUndoStack *stack() const; - QUndoGroup *group() const; - void setEmptyLabel(const QString &label); - QString emptyLabel() const; - void setCleanIcon(const QIcon &icon); - QIcon cleanIcon() const; - -public slots: - void setStack(QUndoStack *stack /KeepReference/); - void setGroup(QUndoGroup *group /KeepReference/); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwhatsthis.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwhatsthis.sip deleted file mode 100644 index 8c561ef..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwhatsthis.sip +++ /dev/null @@ -1,38 +0,0 @@ -// qwhatsthis.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QWhatsThis -{ -%TypeHeaderCode -#include -%End - - QWhatsThis(); - -public: - static void enterWhatsThisMode(); - static bool inWhatsThisMode(); - static void leaveWhatsThisMode(); - static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0); - static void hideText(); - static QAction *createAction(QObject *parent /TransferThis/ = 0) /Factory/; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidget.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidget.sip deleted file mode 100644 index b11f8ea..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidget.sip +++ /dev/null @@ -1,515 +0,0 @@ -// qwidget.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -const int QWIDGETSIZE_MAX; - -class QWidget : public QObject, public QPaintDevice -{ -%TypeHeaderCode -#include -%End - -%TypeCode -// Transfer the ownership of a single widget to a parent. -static void qtgui_TransferWidget(QWidget *w, PyObject *py_parent) -{ - PyObject *py_w = sipGetPyObject(w, sipType_QWidget); - - if (py_w) - sipTransferTo(py_w, py_parent); -} - - -// Transfer ownership of all widgets in a layout to their new parent. -static void qtwidgets_TransferLayoutWidgets(QLayout *lay, PyObject *pw) -{ - int n = lay->count(); - - for (int i = 0; i < n; ++i) - { - QLayoutItem *item = lay->itemAt(i); - QWidget *w = item->widget(); - - if (w) - { - qtgui_TransferWidget(w, pw); - } - else - { - QLayout *l = item->layout(); - - if (l) - qtwidgets_TransferLayoutWidgets(l, pw); - } - } - - QWidget *mb = lay->menuBar(); - - if (mb) - qtgui_TransferWidget(mb, pw); -} -%End - -public: - QWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QWidget(); - virtual int devType() const; - QStyle *style() const; - void setStyle(QStyle * /KeepReference/); - bool isEnabledTo(const QWidget *) const; - -public slots: - void setEnabled(bool); - void setDisabled(bool); - void setWindowModified(bool); - -public: - QRect frameGeometry() const; - QRect normalGeometry() const; - int x() const; - int y() const; - QPoint pos() const; - QSize frameSize() const; - QRect childrenRect() const; - QRegion childrenRegion() const; - QSize minimumSize() const; - QSize maximumSize() const; - void setMinimumSize(int minw, int minh); - void setMaximumSize(int maxw, int maxh); - void setMinimumWidth(int minw); - void setMinimumHeight(int minh); - void setMaximumWidth(int maxw); - void setMaximumHeight(int maxh); - QSize sizeIncrement() const; - void setSizeIncrement(int w, int h); - QSize baseSize() const; - void setBaseSize(int basew, int baseh); - void setFixedSize(const QSize &); - void setFixedSize(int w, int h); - void setFixedWidth(int w); - void setFixedHeight(int h); - QPoint mapToGlobal(const QPoint &) const; - QPointF mapToGlobal(const QPointF &) const; - QPoint mapFromGlobal(const QPoint &) const; - QPointF mapFromGlobal(const QPointF &) const; - QPoint mapToParent(const QPoint &) const; - QPointF mapToParent(const QPointF &) const; - QPoint mapFromParent(const QPoint &) const; - QPointF mapFromParent(const QPointF &) const; - QPoint mapTo(const QWidget *, const QPoint &) const; - QPointF mapTo(const QWidget *, const QPointF &) const; - QPoint mapFrom(const QWidget *, const QPoint &) const; - QPointF mapFrom(const QWidget *, const QPointF &) const; - QWidget *window() const; - const QPalette &palette() const; - void setPalette(const QPalette &); - void setBackgroundRole(QPalette::ColorRole); - QPalette::ColorRole backgroundRole() const; - void setForegroundRole(QPalette::ColorRole); - QPalette::ColorRole foregroundRole() const; - void setFont(const QFont &); - QCursor cursor() const; - void setCursor(const QCursor &); - void unsetCursor(); - void setMask(const QBitmap &); - void setMask(const QRegion &); - QRegion mask() const; - void clearMask(); - void setWindowTitle(const QString &); - QString windowTitle() const; - void setWindowIcon(const QIcon &icon); - QIcon windowIcon() const; - void setWindowIconText(const QString &); - QString windowIconText() const; - void setWindowRole(const QString &); - QString windowRole() const; - void setWindowOpacity(qreal level); - qreal windowOpacity() const; - bool isWindowModified() const; - void setToolTip(const QString &); - QString toolTip() const; - void setStatusTip(const QString &); - QString statusTip() const; - void setWhatsThis(const QString &); - QString whatsThis() const; -%If (PyQt_Accessibility) - QString accessibleName() const; -%End -%If (PyQt_Accessibility) - void setAccessibleName(const QString &name); -%End -%If (PyQt_Accessibility) - QString accessibleDescription() const; -%End -%If (PyQt_Accessibility) - void setAccessibleDescription(const QString &description); -%End - void setLayoutDirection(Qt::LayoutDirection direction); - Qt::LayoutDirection layoutDirection() const; - void unsetLayoutDirection(); - bool isRightToLeft() const; - bool isLeftToRight() const; - -public slots: - void setFocus(); - -public: - bool isActiveWindow() const; - void activateWindow(); - void clearFocus(); - void setFocus(Qt::FocusReason reason); - Qt::FocusPolicy focusPolicy() const; - void setFocusPolicy(Qt::FocusPolicy policy); - bool hasFocus() const; - static void setTabOrder(QWidget *, QWidget *); - void setFocusProxy(QWidget * /KeepReference/); - QWidget *focusProxy() const; - Qt::ContextMenuPolicy contextMenuPolicy() const; - void setContextMenuPolicy(Qt::ContextMenuPolicy policy); - void grabMouse(); - void grabMouse(const QCursor &); - void releaseMouse(); - void grabKeyboard(); - void releaseKeyboard(); - int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut); - void releaseShortcut(int id); - void setShortcutEnabled(int id, bool enabled = true); - static QWidget *mouseGrabber(); - static QWidget *keyboardGrabber(); - void setUpdatesEnabled(bool enable); - -public slots: - void update(); - void repaint(); - -public: - void update(const QRect &); - void update(const QRegion &); - void repaint(int x, int y, int w, int h); - void repaint(const QRect &); - void repaint(const QRegion &); - -public slots: - virtual void setVisible(bool visible); - void setHidden(bool hidden); - void show(); - void hide(); - void showMinimized(); - void showMaximized(); - void showFullScreen(); - void showNormal(); - bool close(); - void raise(); - void lower(); - -public: - void stackUnder(QWidget *); - void move(const QPoint &); - void resize(const QSize &); - void setGeometry(const QRect &); - void adjustSize(); - bool isVisibleTo(const QWidget *) const; - bool isMinimized() const; - bool isMaximized() const; - bool isFullScreen() const; - Qt::WindowStates windowState() const; - void setWindowState(Qt::WindowStates state); - void overrideWindowState(Qt::WindowStates state); - virtual QSize sizeHint() const; - virtual QSize minimumSizeHint() const; - QSizePolicy sizePolicy() const; - void setSizePolicy(QSizePolicy); - virtual int heightForWidth(int) const; - QRegion visibleRegion() const; - void setContentsMargins(int left, int top, int right, int bottom); - QRect contentsRect() const; - QLayout *layout() const; - void setLayout(QLayout * /Transfer/); -%MethodCode - Py_BEGIN_ALLOW_THREADS - sipCpp->setLayout(a0); - Py_END_ALLOW_THREADS - - // Internally Qt has reparented all of the widgets in the layout, so we need - // to update the ownership hierachy. - qtwidgets_TransferLayoutWidgets(a0, sipSelf); -%End - - void updateGeometry(); - void setParent(QWidget *parent /TransferThis/); - void setParent(QWidget *parent /TransferThis/, Qt::WindowFlags f); - void scroll(int dx, int dy); - void scroll(int dx, int dy, const QRect &); - QWidget *focusWidget() const; - QWidget *nextInFocusChain() const; - bool acceptDrops() const; - void setAcceptDrops(bool on); -%If (Qt_6_3_0 -) - QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, Qt::ConnectionType type = Qt::AutoConnection) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData(), a3); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut) /Transfer/; -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, Qt::ConnectionType type = Qt::AutoConnection) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a3, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, *a1, *a2, receiver, slot_signature.constData(), a4); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(3, a3); - } -%End - -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QString &text) /Transfer/; -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QString &text, const QKeySequence &shortcut) /Transfer/; -%End -%If (Qt_6_3_0 -) - QAction *addAction(QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, Qt::ConnectionType type = Qt::AutoConnection) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData(), a2); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(1, a1); - } -%End - -%End -%If (Qt_6_3_0 -) - QAction *addAction(const QString &text, const QKeySequence &shortcut, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, Qt::ConnectionType type = Qt::AutoConnection) /Transfer/; -%MethodCode - QObject *receiver; - QByteArray slot_signature; - - if ((sipError = pyqt6_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) - { - sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData(), a3); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - -%End - void addAction(QAction *action); - void addActions(const QList &actions); - void insertAction(QAction *before, QAction *action); - void insertActions(QAction *before, const QList &actions); - void removeAction(QAction *action); - QList actions() const; - void setWindowFlags(Qt::WindowFlags type); - void overrideWindowFlags(Qt::WindowFlags type); - static QWidget *find(WId); - QWidget *childAt(const QPoint &p) const; - void setAttribute(Qt::WidgetAttribute attribute, bool on = true); - virtual QPaintEngine *paintEngine() const; - void ensurePolished() const; - bool isAncestorOf(const QWidget *child) const; - -signals: - void customContextMenuRequested(const QPoint &pos); - -protected: - virtual bool event(QEvent *); - virtual void mousePressEvent(QMouseEvent *); - virtual void mouseReleaseEvent(QMouseEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void mouseMoveEvent(QMouseEvent *); - virtual void wheelEvent(QWheelEvent *); - virtual void keyPressEvent(QKeyEvent *); - virtual void keyReleaseEvent(QKeyEvent *); - virtual void focusInEvent(QFocusEvent *); - virtual void focusOutEvent(QFocusEvent *); - virtual void enterEvent(QEnterEvent *event); - virtual void leaveEvent(QEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void moveEvent(QMoveEvent *); - virtual void resizeEvent(QResizeEvent *); - virtual void closeEvent(QCloseEvent *); - virtual void contextMenuEvent(QContextMenuEvent *); - virtual void tabletEvent(QTabletEvent *); - virtual void actionEvent(QActionEvent *); - virtual void dragEnterEvent(QDragEnterEvent *); - virtual void dragMoveEvent(QDragMoveEvent *); - virtual void dragLeaveEvent(QDragLeaveEvent *); - virtual void dropEvent(QDropEvent *); - virtual void showEvent(QShowEvent *); - virtual void hideEvent(QHideEvent *); - virtual void changeEvent(QEvent *); - virtual int metric(QPaintDevice::PaintDeviceMetric) const; - virtual void inputMethodEvent(QInputMethodEvent *); - -public: - virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; - -protected: - void updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll); - void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true); - void destroy(bool destroyWindow = true, bool destroySubWindows = true); - virtual bool focusNextPrevChild(bool next); - bool focusNextChild(); - bool focusPreviousChild(); - -public: - QWidget *childAt(int ax, int ay) const; - Qt::WindowType windowType() const; - Qt::WindowFlags windowFlags() const; - WId winId() const; - bool isWindow() const; - bool isEnabled() const; - bool isModal() const; - int minimumWidth() const; - int minimumHeight() const; - int maximumWidth() const; - int maximumHeight() const; - void setMinimumSize(const QSize &s); - void setMaximumSize(const QSize &s); - void setSizeIncrement(const QSize &s); - void setBaseSize(const QSize &s); - const QFont &font() const; - QFontMetrics fontMetrics() const; - QFontInfo fontInfo() const; - void setMouseTracking(bool enable); - bool hasMouseTracking() const; - bool underMouse() const; - bool updatesEnabled() const; - void update(int ax, int ay, int aw, int ah); - bool isVisible() const; - bool isHidden() const; - void move(int ax, int ay); - void resize(int w, int h); - void setGeometry(int ax, int ay, int aw, int ah); - QRect rect() const; - const QRect &geometry() const; - QSize size() const; - int width() const; - int height() const; - QWidget *parentWidget() const; - void setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver); - bool testAttribute(Qt::WidgetAttribute attribute) const; - Qt::WindowModality windowModality() const; - void setWindowModality(Qt::WindowModality windowModality); - bool autoFillBackground() const; - void setAutoFillBackground(bool enabled); - void setStyleSheet(const QString &styleSheet); - QString styleSheet() const; - void setShortcutAutoRepeat(int id, bool enabled = true); - QByteArray saveGeometry() const; - bool restoreGeometry(const QByteArray &geometry); - - enum RenderFlag /BaseType=Flag/ - { - DrawWindowBackground, - DrawChildren, - IgnoreMask, - }; - - typedef QFlags RenderFlags; - void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags flags = QWidget::RenderFlags(QWidget::DrawWindowBackground | QWidget::DrawChildren)); - void render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags flags = QWidget::RenderFlags(QWidget::DrawWindowBackground | QWidget::DrawChildren)); - void setLocale(const QLocale &locale); - QLocale locale() const; - void unsetLocale(); - WId effectiveWinId() const; - QWidget *nativeParentWidget() const; - void setWindowFilePath(const QString &filePath); - QString windowFilePath() const; - QGraphicsProxyWidget *graphicsProxyWidget() const; - QGraphicsEffect *graphicsEffect() const; - void setGraphicsEffect(QGraphicsEffect *effect /Transfer/); - void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); - void ungrabGesture(Qt::GestureType type); - void setContentsMargins(const QMargins &margins); - QMargins contentsMargins() const; - QWidget *previousInFocusChain() const; - Qt::InputMethodHints inputMethodHints() const; - void setInputMethodHints(Qt::InputMethodHints hints); - virtual bool hasHeightForWidth() const; - QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1))); - static SIP_PYOBJECT createWindowContainer(QWindow *window /GetWrapper/, QWidget *parent /GetWrapper/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()) /Factory,TypeHint="QWidget"/; -%MethodCode - // Ownersip issues are complicated so we handle them explicitly. - - QWidget *w = QWidget::createWindowContainer(a0, a1, *a2); - - sipRes = sipConvertFromNewType(w, sipType_QWidget, a1Wrapper); - - if (sipRes) - sipTransferTo(a0Wrapper, sipRes); -%End - - QWindow *windowHandle() const; - -protected: - virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result /Out/); - virtual QPainter *sharedPainter() const; - virtual void initPainter(QPainter *painter) const; - -public: - void setToolTipDuration(int msec); - int toolTipDuration() const; - -signals: - void windowTitleChanged(const QString &title); - void windowIconChanged(const QIcon &icon); - void windowIconTextChanged(const QString &iconText); - -public: - void setTabletTracking(bool enable); - bool hasTabletTracking() const; - void setWindowFlag(Qt::WindowType, bool on = true); - QScreen *screen() const; - void setScreen(QScreen *); -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidgetaction.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidgetaction.sip deleted file mode 100644 index 246c331..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwidgetaction.sip +++ /dev/null @@ -1,43 +0,0 @@ -// qwidgetaction.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QWidgetAction : public QAction -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWidgetAction(QObject *parent /TransferThis/); - virtual ~QWidgetAction(); - void setDefaultWidget(QWidget *w /Transfer/); - QWidget *defaultWidget() const; - QWidget *requestWidget(QWidget *parent); - void releaseWidget(QWidget *widget); - -protected: - virtual bool event(QEvent *); - virtual bool eventFilter(QObject *, QEvent *); - virtual QWidget *createWidget(QWidget *parent); - virtual void deleteWidget(QWidget *widget); - QList createdWidgets() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwizard.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwizard.sip deleted file mode 100644 index ddba704..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtWidgets/qwizard.sip +++ /dev/null @@ -1,238 +0,0 @@ -// qwizard.sip generated by MetaSIP -// -// This file is part of the QtWidgets Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QWizard : public QDialog -{ -%TypeHeaderCode -#include -%End - -public: - enum WizardButton - { - BackButton, - NextButton, - CommitButton, - FinishButton, - CancelButton, - HelpButton, - CustomButton1, - CustomButton2, - CustomButton3, - Stretch, - }; - - enum WizardPixmap - { - WatermarkPixmap, - LogoPixmap, - BannerPixmap, - BackgroundPixmap, - }; - - enum WizardStyle - { - ClassicStyle, - ModernStyle, - MacStyle, - AeroStyle, - }; - - enum WizardOption /BaseType=Flag/ - { - IndependentPages, - IgnoreSubTitles, - ExtendedWatermarkPixmap, - NoDefaultButton, - NoBackButtonOnStartPage, - NoBackButtonOnLastPage, - DisabledBackButtonOnLastPage, - HaveNextButtonOnLastPage, - HaveFinishButtonOnEarlyPages, - NoCancelButton, - CancelButtonOnLeft, - HaveHelpButton, - HelpButtonOnRight, - HaveCustomButton1, - HaveCustomButton2, - HaveCustomButton3, - NoCancelButtonOnLastPage, - }; - - typedef QFlags WizardOptions; - QWizard(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - virtual ~QWizard(); - int addPage(QWizardPage *page /Transfer/); - void setPage(int id, QWizardPage *page /Transfer/); - QWizardPage *page(int id) const; - bool hasVisitedPage(int id) const; - QList visitedIds() const; - void setStartId(int id); - int startId() const; - QWizardPage *currentPage() const; - int currentId() const; - virtual bool validateCurrentPage(); - virtual int nextId() const; - void setField(const QString &name, const QVariant &value); - QVariant field(const QString &name) const; - void setWizardStyle(QWizard::WizardStyle style); - QWizard::WizardStyle wizardStyle() const; - void setOption(QWizard::WizardOption option, bool on = true); - bool testOption(QWizard::WizardOption option) const; - void setOptions(QWizard::WizardOptions options); - QWizard::WizardOptions options() const; - void setButtonText(QWizard::WizardButton which, const QString &text); - QString buttonText(QWizard::WizardButton which) const; - void setButtonLayout(const QList &layout); - void setButton(QWizard::WizardButton which, QAbstractButton *button /Transfer/); - QAbstractButton *button(QWizard::WizardButton which) const /Transfer/; - void setTitleFormat(Qt::TextFormat format); - Qt::TextFormat titleFormat() const; - void setSubTitleFormat(Qt::TextFormat format); - Qt::TextFormat subTitleFormat() const; - void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap); - QPixmap pixmap(QWizard::WizardPixmap which) const; - void setDefaultProperty(const char *className, const char *property, SIP_PYOBJECT changedSignal /TypeHint="PYQT_SIGNAL"/); -%MethodCode - QByteArray signal_signature; - - if ((sipError = pyqt6_qtwidgets_get_signal_signature(a2, 0, signal_signature)) == sipErrorNone) - { - sipCpp->setDefaultProperty(a0, a1, signal_signature.constData()); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(2, a2); - } -%End - - virtual void setVisible(bool visible); - virtual QSize sizeHint() const; - -signals: - void currentIdChanged(int id); - void helpRequested(); - void customButtonClicked(int which); - -public slots: - void back(); - void next(); - void restart(); - -protected: - virtual bool event(QEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void paintEvent(QPaintEvent *event); - virtual void done(int result); - virtual void initializePage(int id); - virtual void cleanupPage(int id); - -public: - void removePage(int id); - QList pageIds() const; - void setSideWidget(QWidget *widget /Transfer/); - QWidget *sideWidget() const; - -signals: - void pageAdded(int id); - void pageRemoved(int id); - -public slots: -%If (Qt_6_4_0 -) - void setCurrentId(int id); -%End -}; - -class QWizardPage : public QWidget -{ -%TypeHeaderCode -#include -%End - -public: - explicit QWizardPage(QWidget *parent /TransferThis/ = 0); - virtual ~QWizardPage(); - void setTitle(const QString &title); - QString title() const; - void setSubTitle(const QString &subTitle); - QString subTitle() const; - void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap); - QPixmap pixmap(QWizard::WizardPixmap which) const; - void setFinalPage(bool finalPage); - bool isFinalPage() const; - void setCommitPage(bool commitPage); - bool isCommitPage() const; - void setButtonText(QWizard::WizardButton which, const QString &text); - QString buttonText(QWizard::WizardButton which) const; - virtual void initializePage(); - virtual void cleanupPage(); - virtual bool validatePage(); - virtual bool isComplete() const; - virtual int nextId() const; - -signals: - void completeChanged(); - -protected: - void setField(const QString &name, const QVariant &value); - QVariant field(const QString &name) const; - void registerField(const QString &name, QWidget *widget, const char *property = 0, SIP_PYOBJECT changedSignal /TypeHint="PYQT_SIGNAL"/ = 0) [void (const QString &name, QWidget *widget, const char *property = 0, const char *changedSignal = 0)]; -%MethodCode - typedef sipErrorState (*pyqt6_get_signal_signature_t)(PyObject *, QObject *, QByteArray &); - - static pyqt6_get_signal_signature_t pyqt6_get_signal_signature = 0; - - if (!pyqt6_get_signal_signature) - { - pyqt6_get_signal_signature = (pyqt6_get_signal_signature_t)sipImportSymbol("pyqt6_get_signal_signature"); - Q_ASSERT(pyqt6_get_signal_signature); - } - - QByteArray signal_signature; - const char *signal = 0; - - if (a3 && a3 != Py_None) - { - if ((sipError = pyqt6_get_signal_signature(a3, a1, signal_signature)) == sipErrorNone) - { - signal = signal_signature.constData(); - } - else if (sipError == sipErrorContinue) - { - sipError = sipBadCallableArg(3, a3); - } - } - - if (sipError == sipErrorNone) - { - Py_BEGIN_ALLOW_THREADS - #if defined(SIP_PROTECTED_IS_PUBLIC) - sipCpp->registerField(*a0, a1, a2, signal); - #else - sipCpp->sipProtect_registerField(*a0, a1, a2, signal); - #endif - Py_END_ALLOW_THREADS - } -%End - - QWizard *wizard() const; -}; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXml.toml b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXml.toml deleted file mode 100644 index cdec528..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXml.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Automatically generated configuration for PyQt6.QtXml. - -sip-version = "6.8.6" -sip-abi-version = "13.8" -module-tags = ["Qt_6_7_0", "Linux"] -module-disabled-features = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXmlmod.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXmlmod.sip deleted file mode 100644 index c6f4dfb..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/QtXmlmod.sip +++ /dev/null @@ -1,48 +0,0 @@ -// QtXmlmod.sip generated by MetaSIP -// -// This file is part of the QtXml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -%Module(name=PyQt6.QtXml, keyword_arguments="Optional", use_limited_api=True) - -%Import QtCore/QtCoremod.sip - -%Copying -Copyright (c) 2024 Riverbank Computing Limited - -This file is part of PyQt6. - -This file may be used under the terms of the GNU General Public License -version 3.0 as published by the Free Software Foundation and appearing in -the file LICENSE included in the packaging of this file. Please review the -following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you do not wish to use this file under the terms of the GPL version 3.0 -then you may purchase a commercial license. For more information contact -info@riverbankcomputing.com. - -This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -%End - -%DefaultSupertype PyQt6.sip.simplewrapper - -%Include qdom.sip diff --git a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/qdom.sip b/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/qdom.sip deleted file mode 100644 index 4fe1e00..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/bindings/QtXml/qdom.sip +++ /dev/null @@ -1,528 +0,0 @@ -// qdom.sip generated by MetaSIP -// -// This file is part of the QtXml Python extension module. -// -// Copyright (c) 2024 Riverbank Computing Limited -// -// This file is part of PyQt6. -// -// This file may be used under the terms of the GNU General Public License -// version 3.0 as published by the Free Software Foundation and appearing in -// the file LICENSE included in the packaging of this file. Please review the -// following information to ensure the GNU General Public License version 3.0 -// requirements will be met: http://www.gnu.org/copyleft/gpl.html. -// -// If you do not wish to use this file under the terms of the GPL version 3.0 -// then you may purchase a commercial license. For more information contact -// info@riverbankcomputing.com. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class QDomImplementation -{ -%TypeHeaderCode -#include -%End - -public: - QDomImplementation(); - QDomImplementation(const QDomImplementation &); - ~QDomImplementation(); - bool operator==(const QDomImplementation &) const; - bool operator!=(const QDomImplementation &) const; - bool hasFeature(const QString &feature, const QString &version) const; - QDomDocumentType createDocumentType(const QString &qName, const QString &publicId, const QString &systemId); - QDomDocument createDocument(const QString &nsURI, const QString &qName, const QDomDocumentType &doctype); - - enum InvalidDataPolicy - { - AcceptInvalidChars, - DropInvalidChars, - ReturnNullNode, - }; - - static QDomImplementation::InvalidDataPolicy invalidDataPolicy(); - static void setInvalidDataPolicy(QDomImplementation::InvalidDataPolicy policy); - bool isNull(); -}; - -class QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - enum NodeType - { - ElementNode, - AttributeNode, - TextNode, - CDATASectionNode, - EntityReferenceNode, - EntityNode, - ProcessingInstructionNode, - CommentNode, - DocumentNode, - DocumentTypeNode, - DocumentFragmentNode, - NotationNode, - BaseNode, - CharacterDataNode, - }; - - enum EncodingPolicy - { - EncodingFromDocument, - EncodingFromTextStream, - }; - - QDomNode(); - QDomNode(const QDomNode &); - ~QDomNode(); - bool operator==(const QDomNode &) const; - bool operator!=(const QDomNode &) const; - QDomNode insertBefore(const QDomNode &newChild, const QDomNode &refChild); - QDomNode insertAfter(const QDomNode &newChild, const QDomNode &refChild); - QDomNode replaceChild(const QDomNode &newChild, const QDomNode &oldChild); - QDomNode removeChild(const QDomNode &oldChild); - QDomNode appendChild(const QDomNode &newChild); - bool hasChildNodes() const; - QDomNode cloneNode(bool deep = true) const; - void normalize(); - bool isSupported(const QString &feature, const QString &version) const; - QString nodeName() const; - QDomNode::NodeType nodeType() const; - QDomNode parentNode() const; - QDomNodeList childNodes() const; - QDomNode firstChild() const; - QDomNode lastChild() const; - QDomNode previousSibling() const; - QDomNode nextSibling() const; - QDomNamedNodeMap attributes() const; - QDomDocument ownerDocument() const; - QString namespaceURI() const; - QString localName() const; - bool hasAttributes() const; - QString nodeValue() const; - void setNodeValue(const QString &); - QString prefix() const; - void setPrefix(const QString &pre); - bool isAttr() const; - bool isCDATASection() const; - bool isDocumentFragment() const; - bool isDocument() const; - bool isDocumentType() const; - bool isElement() const; - bool isEntityReference() const; - bool isText() const; - bool isEntity() const; - bool isNotation() const; - bool isProcessingInstruction() const; - bool isCharacterData() const; - bool isComment() const; - QDomNode namedItem(const QString &name) const; - bool isNull() const; - void clear(); - QDomAttr toAttr() const; - QDomCDATASection toCDATASection() const; - QDomDocumentFragment toDocumentFragment() const; - QDomDocument toDocument() const; - QDomDocumentType toDocumentType() const; - QDomElement toElement() const; - QDomEntityReference toEntityReference() const; - QDomText toText() const; - QDomEntity toEntity() const; - QDomNotation toNotation() const; - QDomProcessingInstruction toProcessingInstruction() const; - QDomCharacterData toCharacterData() const; - QDomComment toComment() const; - void save(QTextStream &, int, QDomNode::EncodingPolicy = QDomNode::EncodingFromDocument) const /ReleaseGIL/; - QDomElement firstChildElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const; - QDomElement lastChildElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const; - QDomElement previousSiblingElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const; - QDomElement nextSiblingElement(const QString &taName = QString(), const QString &namespaceURI = QString()) const; - int lineNumber() const; - int columnNumber() const; -}; - -class QDomNodeList -{ -%TypeHeaderCode -#include -%End - -public: - QDomNodeList(); - QDomNodeList(const QDomNodeList &); - ~QDomNodeList(); - bool operator==(const QDomNodeList &) const; - bool operator!=(const QDomNodeList &) const; - QDomNode item(int index) const; - QDomNode at(int index) const; - int length() const; - int count() const /__len__/; - int size() const; - bool isEmpty() const; -}; - -class QDomDocumentType : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomDocumentType(); - QDomDocumentType(const QDomDocumentType &x); - QString name() const; - QDomNamedNodeMap entities() const; - QDomNamedNodeMap notations() const; - QString publicId() const; - QString systemId() const; - QString internalSubset() const; - QDomNode::NodeType nodeType() const; -}; - -class QDomDocument : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomDocument(); - explicit QDomDocument(const QString &name); - explicit QDomDocument(const QDomDocumentType &doctype); - QDomDocument(const QDomDocument &x); - ~QDomDocument(); - QDomElement createElement(const QString &tagName); - QDomDocumentFragment createDocumentFragment(); - QDomText createTextNode(const QString &data); - QDomComment createComment(const QString &data); - QDomCDATASection createCDATASection(const QString &data); - QDomProcessingInstruction createProcessingInstruction(const QString &target, const QString &data); - QDomAttr createAttribute(const QString &name); - QDomEntityReference createEntityReference(const QString &name); - QDomNodeList elementsByTagName(const QString &tagname) const; - QDomNode importNode(const QDomNode &importedNode, bool deep); - QDomElement createElementNS(const QString &nsURI, const QString &qName); - QDomAttr createAttributeNS(const QString &nsURI, const QString &qName); - QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName); - QDomElement elementById(const QString &elementId); - QDomDocumentType doctype() const; - QDomImplementation implementation() const; - QDomElement documentElement() const; - QDomNode::NodeType nodeType() const; -%If (Qt_6_5_0 -) - - enum class ParseOption - { - Default, - UseNamespaceProcessing, - PreserveSpacingOnlyNodes, - }; - -%End -%If (Qt_6_5_0 -) - typedef QFlags ParseOptions; -%End -%If (Qt_6_5_0 -) - SIP_PYOBJECT setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = QDomDocument::ParseOption::Default) /ReleaseGIL,TypeHint="Tuple [bool, str, int, int]"/; -%MethodCode - QDomDocument::ParseResult pr; - - Py_BEGIN_ALLOW_THREADS - pr = sipCpp->setContent(a0, *a1); - Py_END_ALLOW_THREADS - - return sipBuildResult(NULL, "(bNnn)", - (int)bool(pr), - new QString(pr.errorMessage), sipType_QString, NULL, - (long long)pr.errorLine, - (long long)pr.errorColumn); -%End - -%End -%If (Qt_6_5_0 -) - SIP_PYOBJECT setContent(QIODevice *device, QDomDocument::ParseOptions options = QDomDocument::ParseOption::Default) /ReleaseGIL,TypeHint="Tuple [bool, str, int, int]"/; -%MethodCode - QDomDocument::ParseResult pr; - - Py_BEGIN_ALLOW_THREADS - pr = sipCpp->setContent(a0, *a1); - Py_END_ALLOW_THREADS - - return sipBuildResult(NULL, "(bNnn)", - (int)bool(pr), - new QString(pr.errorMessage), sipType_QString, NULL, - (long long)pr.errorLine, - (long long)pr.errorColumn); -%End - -%End -%If (Qt_6_5_0 -) - SIP_PYOBJECT setContent(QAnyStringView data, QDomDocument::ParseOptions options = QDomDocument::ParseOption::Default) /TypeHint="Tuple [bool, str, int, int]"/; -%MethodCode - QDomDocument::ParseResult pr; - - pr = sipCpp->setContent(*a0, *a1); - - return sipBuildResult(NULL, "(bNnn)", - (int)bool(pr), - new QString(pr.errorMessage), sipType_QString, NULL, - (long long)pr.errorLine, - (long long)pr.errorColumn); -%End - -%End - bool setContent(const QByteArray &text, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); - bool setContent(const QString &text, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); - bool setContent(QIODevice *dev, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; -%If (- Qt_6_5_0) - bool setContent(const QByteArray &text, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); -%End -%If (- Qt_6_5_0) - bool setContent(const QString &text, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); -%End -%If (- Qt_6_5_0) - bool setContent(QIODevice *dev, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; -%End - bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); - QString toString(int indent = 1) const; - QByteArray toByteArray(int indent = 1) const; -}; - -class QDomNamedNodeMap -{ -%TypeHeaderCode -#include -%End - -public: - QDomNamedNodeMap(); - QDomNamedNodeMap(const QDomNamedNodeMap &); - ~QDomNamedNodeMap(); - bool operator==(const QDomNamedNodeMap &) const; - bool operator!=(const QDomNamedNodeMap &) const; - QDomNode namedItem(const QString &name) const; - QDomNode setNamedItem(const QDomNode &newNode); - QDomNode removeNamedItem(const QString &name); - QDomNode item(int index) const; - QDomNode namedItemNS(const QString &nsURI, const QString &localName) const; - QDomNode setNamedItemNS(const QDomNode &newNode); - QDomNode removeNamedItemNS(const QString &nsURI, const QString &localName); - int length() const; - int count() const /__len__/; - int size() const; - bool isEmpty() const; - bool contains(const QString &name) const; -}; - -class QDomDocumentFragment : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomDocumentFragment(); - QDomDocumentFragment(const QDomDocumentFragment &x); - QDomNode::NodeType nodeType() const; -}; - -class QDomCharacterData : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomCharacterData(); - QDomCharacterData(const QDomCharacterData &x); - QString substringData(unsigned long offset, unsigned long count); - void appendData(const QString &arg); - void insertData(unsigned long offset, const QString &arg); - void deleteData(unsigned long offset, unsigned long count); - void replaceData(unsigned long offset, unsigned long count, const QString &arg); - int length() const; - QString data() const; - void setData(const QString &); - QDomNode::NodeType nodeType() const; -}; - -class QDomAttr : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomAttr(); - QDomAttr(const QDomAttr &x); - QString name() const; - bool specified() const; - QDomElement ownerElement() const; - QString value() const; - void setValue(const QString &); - QDomNode::NodeType nodeType() const; -}; - -class QDomElement : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomElement(); - QDomElement(const QDomElement &x); - QString attribute(const QString &name, const QString &defaultValue = QString()) const; - void setAttribute(const QString &name, const QString &value); - void setAttribute(const QString &name, qlonglong value); - void setAttribute(const QString &name, qulonglong value); - void setAttribute(const QString &name, double value /Constrained/); - void setAttribute(const QString &name, int value); - void removeAttribute(const QString &name); - QDomAttr attributeNode(const QString &name); - QDomAttr setAttributeNode(const QDomAttr &newAttr); - QDomAttr removeAttributeNode(const QDomAttr &oldAttr); - QDomNodeList elementsByTagName(const QString &tagname) const; - bool hasAttribute(const QString &name) const; - QString attributeNS(const QString &nsURI, const QString &localName, const QString &defaultValue = QString()) const; - void setAttributeNS(const QString &nsURI, const QString &qName, const QString &value); - void setAttributeNS(const QString &nsURI, const QString &qName, double value /Constrained/); - void setAttributeNS(const QString &nsURI, const QString &qName, SIP_PYOBJECT value /TypeHint="int"/); -%MethodCode - qlonglong val = sipLong_AsLongLong(a2); - - if (!PyErr_Occurred()) - { - sipCpp->setAttributeNS(*a0, *a1, val); - } - else - { - // If it is positive then it might fit an unsigned long long. - - qulonglong uval = sipLong_AsUnsignedLongLong(a2); - - if (!PyErr_Occurred()) - { - sipCpp->setAttributeNS(*a0, *a1, uval); - } - else - { - sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) - ? sipErrorFail : sipErrorContinue); - } - } -%End - - void removeAttributeNS(const QString &nsURI, const QString &localName); - QDomAttr attributeNodeNS(const QString &nsURI, const QString &localName); - QDomAttr setAttributeNodeNS(const QDomAttr &newAttr); - QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName) const; - bool hasAttributeNS(const QString &nsURI, const QString &localName) const; - QString tagName() const; - void setTagName(const QString &name); - QDomNamedNodeMap attributes() const; - QDomNode::NodeType nodeType() const; - QString text() const; -}; - -class QDomText : public QDomCharacterData -{ -%TypeHeaderCode -#include -%End - -public: - QDomText(); - QDomText(const QDomText &x); - QDomText splitText(int offset); - QDomNode::NodeType nodeType() const; -}; - -class QDomComment : public QDomCharacterData -{ -%TypeHeaderCode -#include -%End - -public: - QDomComment(); - QDomComment(const QDomComment &x); - QDomNode::NodeType nodeType() const; -}; - -class QDomCDATASection : public QDomText -{ -%TypeHeaderCode -#include -%End - -public: - QDomCDATASection(); - QDomCDATASection(const QDomCDATASection &x); - QDomNode::NodeType nodeType() const; -}; - -class QDomNotation : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomNotation(); - QDomNotation(const QDomNotation &x); - QString publicId() const; - QString systemId() const; - QDomNode::NodeType nodeType() const; -}; - -class QDomEntity : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomEntity(); - QDomEntity(const QDomEntity &x); - QString publicId() const; - QString systemId() const; - QString notationName() const; - QDomNode::NodeType nodeType() const; -}; - -class QDomEntityReference : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomEntityReference(); - QDomEntityReference(const QDomEntityReference &x); - QDomNode::NodeType nodeType() const; -}; - -class QDomProcessingInstruction : public QDomNode -{ -%TypeHeaderCode -#include -%End - -public: - QDomProcessingInstruction(); - QDomProcessingInstruction(const QDomProcessingInstruction &x); - QString target() const; - QString data() const; - void setData(const QString &d); - QDomNode::NodeType nodeType() const; -}; - -QTextStream &operator<<(QTextStream &, const QDomNode &) /ReleaseGIL/; diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__init__.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__init__.py deleted file mode 100644 index 104597d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -# The public API. -from .lupdate import lupdate diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 152e093..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/designer_source.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/designer_source.cpython-312.pyc deleted file mode 100644 index fa8c59d..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/designer_source.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/lupdate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/lupdate.cpython-312.pyc deleted file mode 100644 index fbb346e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/lupdate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/pylupdate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/pylupdate.cpython-312.pyc deleted file mode 100644 index 5098b22..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/pylupdate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/python_source.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/python_source.cpython-312.pyc deleted file mode 100644 index 5c26d63..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/python_source.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/source_file.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/source_file.cpython-312.pyc deleted file mode 100644 index bc9eaea..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/source_file.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translation_file.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translation_file.cpython-312.pyc deleted file mode 100644 index ceb5663..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translation_file.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translations.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translations.cpython-312.pyc deleted file mode 100644 index 6340ac7..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/translations.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/user.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/user.cpython-312.pyc deleted file mode 100644 index a9d9dcb..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/__pycache__/user.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/designer_source.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/designer_source.py deleted file mode 100644 index 538fa9c..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/designer_source.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -from ..uic import UIFile - -from .source_file import SourceFile -from .translations import Context, Message -from .user import User, UserException - - -class DesignerSource(SourceFile, User): - """ Encapsulate a Designer source file. """ - - def __init__(self, **kwargs): - """ Initialise the object. """ - - super().__init__(**kwargs) - - # Read the source file. - self.progress("Reading {0}...".format(self.filename)) - - try: - ui_file = UIFile(self.filename) - except Exception as e: - raise UserException(str(e)) - - if ui_file.widget is not None: - context = Context(ui_file.class_name) - - # Get each element. Note that we don't support the - # element which seems to provide defaults for the - # attributes of any child elements. - for string_el in ui_file.widget.iter('string'): - if string_el.get('notr', 'false') == 'true': - continue - - # This can be None or an empty string depending on the exact - # XML. - if not string_el.text: - continue - - message = Message(self.filename, 0, string_el.text, - string_el.get('comment', ''), False) - - extra_comment = string_el.get('extracomment') - if extra_comment: - message.embedded_comments.extra_comments.append( - extra_comment) - - context.messages.append(message) - - if context.messages: - self.contexts.append(context) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/lupdate.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/lupdate.py deleted file mode 100644 index 0ae7fdc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/lupdate.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import fnmatch -import os - -from .designer_source import DesignerSource -from .python_source import PythonSource -from .translation_file import TranslationFile -from .user import UserException - - -def lupdate(sources, translation_files, no_obsolete=False, no_summary=True, - verbose=False, excludes=None): - """ Update a sequence of translation (.ts) files from a sequence of Python - source (.py) files, Designer source (.ui) files or directories containing - source files. - """ - - if excludes is None: - excludes = () - - # Read the .ts files. - translations = [TranslationFile(ts, no_obsolete=no_obsolete, - no_summary=no_summary, verbose=verbose) - for ts in translation_files] - - # Read the sources. - source_files = [] - for source in sources: - if os.path.isdir(source): - for dirpath, dirnames, filenames in os.walk(source): - _remove_excludes(dirnames, excludes) - _remove_excludes(filenames, excludes) - - for fn in filenames: - filename = os.path.join(dirpath, fn) - - if filename.endswith('.py'): - source_files.append( - PythonSource(filename=filename, - verbose=verbose)) - - elif filename.endswith('.ui'): - source_files.append( - DesignerSource(filename=filename, - verbose=verbose)) - - elif verbose: - print("Ignoring", filename) - - elif source.endswith('.py'): - source_files.append( - PythonSource(filename=source, verbose=verbose)) - - elif source.endswith('.ui'): - source_files.append( - DesignerSource(filename=source, verbose=verbose)) - - else: - raise UserException( - "{0} must be a directory or a .py or a .ui file".format( - source)) - - # Update each translation for each source. - for t in translations: - for s in source_files: - t.update(s) - - t.write() - - -def _remove_excludes(names, excludes): - """ Remove all implicitly and explicitly excluded names from a list. """ - - for name in list(names): - if name.startswith('.'): - names.remove(name) - else: - for exclude in excludes: - if fnmatch.fnmatch(name, exclude): - names.remove(name) - break diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/pylupdate.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/pylupdate.py deleted file mode 100644 index 60d7f73..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/pylupdate.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import sys - -from .lupdate import lupdate - - -def main(): - """ Update a .ts file from a .py file. """ - - import argparse - - from PyQt6.QtCore import PYQT_VERSION_STR - - from .user import UserException - - # The program name. - PROGRAM_NAME = 'pylupdate6' - - # Parse the command line. - parser = argparse.ArgumentParser(prog=PROGRAM_NAME, - description="Python Language Update Tool") - - parser.add_argument('-V', '--version', action='version', - version=PYQT_VERSION_STR) - parser.add_argument('--exclude', action='append', metavar="PATTERN", - help="exclude matching files when reading a directory") - parser.add_argument('--no-obsolete', '-no-obsolete', action='store_true', - help="remove any obsolete translated messages") - parser.add_argument('--no-summary', action='store_true', - help="suppress the summary") - parser.add_argument('--ts', '-ts', action='append', metavar="FILE", - required=True, - help="a .ts file to update or create") - parser.add_argument('--verbose', action='store_true', - help="show progress messages") - parser.add_argument('file', nargs='+', - help="the .py or .ui file, or directory to be read") - - args = parser.parse_args() - - # Update the translation files. - try: - lupdate(args.file, args.ts, args.no_obsolete, args.no_summary, - args.verbose, args.exclude) - except UserException as e: - print("{0}: {1}".format(PROGRAM_NAME, e), file=sys.stderr) - return 1 - except: - if args.verbose: - import traceback - - traceback.print_exception(*sys.exc_info()) - else: - print("""An unexpected error occurred. -Check that you are using the latest version of {name} and send an error -report to the PyQt mailing list and include the following information: - -- the version of {name} ({version}) -- the .py or .ui file that caused the error (as an attachment) -- the verbose output of {name} (use the --verbose flag when calling - {name})""".format(name=PROGRAM_NAME, version=PYQT_VERSION_STR), - file=sys.stderr) - - return 2 - - return 0 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/python_source.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/python_source.py deleted file mode 100644 index 0618005..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/python_source.py +++ /dev/null @@ -1,361 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import ast -import re -import tokenize - -from .source_file import SourceFile -from .translations import Context, EmbeddedComments, Message -from .user import User, UserException - - -class PythonSource(SourceFile, User): - """ Encapsulate a Python source file. """ - - # The regular expression to extract a PEP 263 encoding. - _PEP_263 = re.compile(rb'^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)') - - def __init__(self, **kwargs): - """ Initialise the object. """ - - super().__init__(**kwargs) - - # Read the source file. - self.progress("Reading {0}...".format(self.filename)) - with open(self.filename, 'rb') as f: - source = f.read() - - # Implement universal newlines. - source = source.replace(b'\r\n', b'\n').replace(b'\r', b'\n') - - # Try and extract a PEP 263 encoding. - encoding = 'UTF-8' - - for line_nr, line in enumerate(source.split(b'\n')): - if line_nr > 1: - break - - match = re.match(self._PEP_263, line) - if match: - encoding = match.group(1).decode('ascii') - break - - # Decode the source according to the encoding. - try: - source = source.decode(encoding) - except LookupError: - raise UserException("Unsupported encoding '{0}'".format(encoding)) - - # Parse the source file. - self.progress("Parsing {0}...".format(self.filename)) - - try: - tree = ast.parse(source, filename=self.filename) - except SyntaxError as e: - raise UserException( - "Invalid syntax at line {0} of {1}:\n{2}".format( - e.lineno, e.filename, e.text.rstrip())) - - # Look for translation contexts and their contents. - visitor = Visitor(self) - visitor.visit(tree) - - # Read the file again as a sequence of tokens so that we see the - # comments. - with open(self.filename, 'rb') as f: - current = None - - for token in tokenize.tokenize(f.readline): - if token.type == tokenize.COMMENT: - # See if it is an embedded comment. - parts = token.string.split(' ', maxsplit=1) - if len(parts) == 2: - if parts[0] == '#:': - if current is None: - current = EmbeddedComments() - - current.extra_comments.append(parts[1]) - elif parts[0] == '#=': - if current is None: - current = EmbeddedComments() - - current.message_id = parts[1] - elif parts[0] == '#~': - parts = parts[1].split(' ', maxsplit=1) - if len(parts) == 1: - parts.append('') - - if current is None: - current = EmbeddedComments() - - current.extras.append(parts) - - elif token.type == tokenize.NL: - continue - - elif current is not None: - # Associate the embedded comment with the line containing - # this token. - line_nr = token.start[0] - - # See if there is a message on that line. - for context in self.contexts: - for message in context.messages: - if message.line_nr == line_nr: - break - else: - message = None - - if message is not None: - message.embedded_comments = current - break - - current = None - - -class Visitor(ast.NodeVisitor): - """ A visitor that extracts translation contexts. """ - - def __init__(self, source): - """ Initialise the visitor. """ - - self._source = source - self._context_stack = [] - - super().__init__() - - def visit_Call(self, node): - """ Visit a call. """ - - # Parse the arguments if a translation function is being called. - call_args = None - - if isinstance(node.func, ast.Attribute): - name = node.func.attr - - elif isinstance(node.func, ast.Name): - name = node.func.id - - if name == 'QT_TR_NOOP': - call_args = self._parse_QT_TR_NOOP(node) - elif name == 'QT_TRANSLATE_NOOP': - call_args = self._parse_QT_TRANSLATE_NOOP(node) - else: - name = '' - - # Allow these to be either methods or functions. - if name == 'tr': - call_args = self._parse_tr(node) - elif name == 'translate': - call_args = self._parse_translate(node) - - # Update the context if the arguments are usable. - if call_args is not None and call_args.source != '': - call_args.context.messages.append( - Message(self._source.filename, node.lineno, - call_args.source, call_args.disambiguation, - (call_args.numerus))) - - self.generic_visit(node) - - def visit_ClassDef(self, node): - """ Visit a class. """ - - try: - name = self._context_stack[-1].name + '.' + node.name - except IndexError: - name = node.name - - self._context_stack.append(Context(name)) - - self.generic_visit(node) - - context = self._context_stack.pop() - - if context.messages: - self._source.contexts.append(context) - - def _get_current_context(self): - """ Return the current Context object if there is one. """ - - return self._context_stack[-1] if self._context_stack else None - - @classmethod - def _get_first_str(cls, args): - """ Get the first of a list of arguments as a str. """ - - # Check that there is at least one argument. - if not args: - return None - - return cls._get_str(args[0]) - - def _get_or_create_context(self, name): - """ Return the Context object for a name, creating it if necessary. """ - - for context in self._source.contexts: - if context.name == name: - return context - - context = Context(name) - self._source.contexts.append(context) - - return context - - @staticmethod - def _get_str(node, allow_none=False): - """ Return the str from a node or None if it wasn't an appropriate - node. - """ - - if isinstance(node, ast.Str): - return node.s - - if isinstance(node, ast.Constant): - if isinstance(node.value, str): - return node.value - - if allow_none and node.value is None: - return '' - - return None - - def _parse_QT_TR_NOOP(self, node): - """ Parse the arguments to QT_TR_NOOP(). """ - - # Ignore unless there is a current context. - context = self._get_current_context() - if context is None: - return None - - call_args = self._parse_noop_without_context(node.args, node.keywords) - if call_args is None: - return None - - call_args.context = context - - return call_args - - def _parse_QT_TRANSLATE_NOOP(self, node): - """ Parse the arguments to QT_TRANSLATE_NOOP(). """ - - # Get the context. - name = self._get_first_str(node.args) - if name is None: - return None - - call_args = self._parse_noop_without_context(node.args[1:], - node.keywords) - if call_args is None: - return None - - call_args.context = self._get_or_create_context(name) - - return call_args - - def _parse_tr(self, node): - """ Parse the arguments to tr(). """ - - # Ignore unless there is a current context. - context = self._get_current_context() - if context is None: - return None - - call_args = self._parse_without_context(node.args, node.keywords) - if call_args is None: - return None - - call_args.context = context - - return call_args - - def _parse_translate(self, node): - """ Parse the arguments to translate(). """ - - # Get the context. - name = self._get_first_str(node.args) - if name is None: - return None - - call_args = self._parse_without_context(node.args[1:], node.keywords) - if call_args is None: - return None - - call_args.context = self._get_or_create_context(name) - - return call_args - - def _parse_without_context(self, args, keywords): - """ Parse arguments for a message source and optional disambiguation - and n. - """ - - # The source is required. - source = self._get_first_str(args) - if source is None: - return None - - if len(args) > 1: - disambiguation = self._get_str(args[1], allow_none=True) - else: - for kw in keywords: - if kw.arg == 'disambiguation': - disambiguation = self._get_str(kw.value, allow_none=True) - break - else: - disambiguation = '' - - # Ignore if the disambiguation is specified but isn't a string. - if disambiguation is None: - return None - - if len(args) > 2: - numerus = True - else: - numerus = 'n' in keywords - - if len(args) > 3: - return None - - return CallArguments(source, disambiguation, numerus) - - def _parse_noop_without_context(self, args, keywords): - """ Parse arguments for a message source. """ - - # There must be exactly one positional argument. - if len(args) != 1 or len(keywords) != 0: - return None - - source = self._get_str(args[0]) - if source is None: - return None - - return CallArguments(source) - - -class CallArguments: - """ Encapsulate the possible arguments of a translation function. """ - - def __init__(self, source, disambiguation='', numerus=False): - """ Initialise the object. """ - - self.context = None - self.source = source - self.disambiguation = disambiguation - self.numerus = numerus diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/source_file.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/source_file.py deleted file mode 100644 index c86b8fc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/source_file.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class SourceFile: - """ The base class for any source file that provides translation contexts. - """ - - def __init__(self, filename, **kwargs): - """ Initialise the object. """ - - super().__init__(**kwargs) - - self.filename = filename - self.contexts = [] diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translation_file.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translation_file.py deleted file mode 100644 index 0caada7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translation_file.py +++ /dev/null @@ -1,413 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import os -from xml.etree import ElementTree - -from .user import User, UserException - - -class TranslationFile(User): - """ Encapsulate a translation file. """ - - def __init__(self, ts_file, no_obsolete, no_summary, **kwargs): - """ Initialise the translation file. """ - - super().__init__(**kwargs) - - if os.path.isfile(ts_file): - self.progress("Reading {0}...".format(ts_file)) - - try: - self._root = ElementTree.parse(ts_file).getroot() - except Exception as e: - raise UserException( - "{}: {}: {}".format(ts_file, - "invalid translation file", str(e))) - else: - self._root = ElementTree.fromstring(_EMPTY_TS) - - self._ts_file = ts_file - self._no_obsolete = no_obsolete - self._no_summary = no_summary - self._updated_contexts = {} - - # Create a dict of contexts keyed by the context name and having the - # list of message elements as the value. - self._contexts = {} - - # Also create a dict of existing translations so that they can be - # re-used. - self._translations = {} - - context_els = [] - for context_el in self._root: - if context_el.tag != 'context': - continue - - context_els.append(context_el) - - name = '' - message_els = [] - - for el in context_el: - if el.tag == 'name': - name = el.text - elif el.tag == 'message': - message_els.append(el) - - if name: - self._contexts[name] = message_els - - for message_el in message_els: - source_el = message_el.find('source') - if source_el is None or not source_el.text: - continue - - translation_el = message_el.find('translation') - if translation_el is None or not translation_el.text: - continue - - self._translations[source_el.text] = translation_el.text - - # Remove the context elements but keep everything else in the root - # (probably set by Linguist). - for context_el in context_els: - self._root.remove(context_el) - - # Clear the summary statistics. - self._nr_new = 0 - self._nr_new_duplicates = 0 - self._nr_new_using_existing_translation = 0 - self._nr_existing = 0 - self._nr_kept_obsolete = 0 - self._nr_discarded_obsolete = 0 - self._nr_discarded_untranslated = 0 - - # Remember all new messages so we can make the summary less confusing - # than it otherwise might be. - self._new_message_els = [] - - def update(self, source): - """ Update the translation file from a SourceFile object. """ - - self.progress( - "Updating {0} from {1}...".format(self._ts_file, - source.filename)) - - for context in source.contexts: - # Get the messages that we already know about for this context. - try: - message_els = self._contexts[context.name] - except KeyError: - message_els = [] - - # Get the messages that have already been updated. - updated_message_els = self._get_updated_message_els(context.name) - - for message in context.messages: - message_el = self._find_message(message, message_els) - - if message_el is not None: - # Move the message to the updated list. - message_els.remove(message_el) - self._add_message_el(message_el, updated_message_els) - else: - # See if this is a new message. If not then we just have - # another location for an existing message. - message_el = self._find_message(message, - updated_message_els) - - if message_el is None: - message_el = self._make_message_el(message) - updated_message_els.append(message_el) - - self.progress( - "Added new message '{0}'".format( - self.pretty(message.source))) - self._nr_new += 1 - else: - self.progress( - "Updated message '{0}'".format( - self.pretty(message.source))) - - # Go through any translations making sure they are not - # 'vanished' which might happen if we have restored a - # previously obsolete message. - for translation_el in message_el.findall('translation'): - if translation_el.get('type') == 'vanished': - if translation_el.text: - del translation_el.attrib['type'] - else: - translation_el.set('type', 'unfinished') - - # Don't count another copy of a new message as an existing - # one. - if message_el in self._new_message_els: - self._nr_new_duplicates += 1 - else: - self._nr_existing += 1 - - message_el.insert(0, self._make_location_el(message)) - - def write(self): - """ Write the translation file back to the filesystem. """ - - # If we are keeping obsolete messages then add them to the updated - # message elements list. - for name, message_els in self._contexts.items(): - updated_message_els = None - - for message_el in message_els: - source = self.pretty(message_el.find('source').text) - - translation_el = message_el.find('translation') - if translation_el is not None and translation_el.text: - if self._no_obsolete: - self.progress( - "Discarded obsolete message '{0}'".format( - source)) - self._nr_discarded_obsolete += 1 - else: - translation_el.set('type', 'vanished') - - if updated_message_els is None: - updated_message_els = self._get_updated_message_els( - name) - - self._add_message_el(message_el, updated_message_els) - - self.progress( - "Kept obsolete message '{0}'".format(source)) - self._nr_kept_obsolete += 1 - else: - self.progress( - "Discarded untranslated message '{0}'".format( - source)) - self._nr_discarded_untranslated += 1 - - # Created the sorted context elements. - for name in sorted(self._updated_contexts.keys()): - context_el = ElementTree.Element('context') - - name_el = ElementTree.Element('name') - name_el.text = name - context_el.append(name_el) - - context_el.extend(self._updated_contexts[name]) - - self._root.append(context_el) - - self.progress("Writing {0}...".format(self._ts_file)) - with open(self._ts_file, 'w', encoding='utf-8', newline='\n') as f: - f.write('\n') - f.write('\n') - - # Python v3.9 and later. - if hasattr(ElementTree, 'indent'): - ElementTree.indent(self._root) - - ElementTree.ElementTree(self._root).write(f, encoding='unicode') - f.write('\n') - - if not self._no_summary: - self._summary() - - @staticmethod - def _add_message_el(message_el, updated_message_els): - """ Add a message element to a list of updated message elements. """ - - # Remove all the location elements. - for location_el in message_el.findall('location'): - message_el.remove(location_el) - - # Add the message to the updated list. - updated_message_els.append(message_el) - - @classmethod - def _find_message(cls, message, message_els): - """ Return the message element for a message from a list. """ - - for message_el in message_els: - source = '' - comment = '' - extra_comment = '' - extras = [] - - # Extract the data from the element. - for el in message_el: - if el.tag == 'source': - source = el.text - elif el.tag == 'comment': - comment = el.text - elif el.tag == 'extracomment': - extra_comment = el.text - elif el.tag.startswith('extra-'): - extras.append([el.tag[6:], el.text]) - - # Compare with the message. - if source != message.source: - continue - - if comment != message.comment: - continue - - if extra_comment != cls._get_message_extra_comments(message): - continue - - if extras != message.embedded_comments.extras: - continue - - return message_el - - return None - - @staticmethod - def _get_message_extra_comments(message): - """ Return a message's extra comments as they appear in a .ts file. """ - - return ' '.join(message.embedded_comments.extra_comments) - - def _get_updated_message_els(self, name): - """ Return the list of updated message elements for a context. """ - - try: - updated_message_els = self._updated_contexts[name] - except KeyError: - updated_message_els = [] - self._updated_contexts[name] = updated_message_els - - return updated_message_els - - def _make_location_el(self, message): - """ Return a 'location' element. """ - - return ElementTree.Element('location', - filename=os.path.relpath(message.filename, - start=os.path.dirname(os.path.abspath(self._ts_file))), - line=str(message.line_nr)) - - def _make_message_el(self, message): - """ Return a 'message' element. """ - - attrs = {} - - if message.embedded_comments.message_id: - attrs['id'] = message.embedded_comments.message_id - - if message.numerus: - attrs['numerus'] = 'yes' - - message_el = ElementTree.Element('message', attrs) - - source_el = ElementTree.Element('source') - source_el.text = message.source - message_el.append(source_el) - - if message.comment: - comment_el = ElementTree.Element('comment') - comment_el.text = message.comment - message_el.append(comment_el) - - if message.embedded_comments.extra_comments: - extracomment_el = ElementTree.Element('extracomment') - extracomment_el.text = self._get_message_extra_comments(message) - message_el.append(extracomment_el) - - translation_el = ElementTree.Element('translation', - type='unfinished') - - # Try and find another message with the same source and use its - # translation if it has one. - translation = self._translations.get(message.source) - if translation: - translation_el.text = translation - - self.progress( - "Reused existing translation for '{0}'".format( - self.pretty(message.source))) - self._nr_new_using_existing_translation += 1 - - if message.numerus: - translation_el.append(ElementTree.Element( - 'numerusform')) - - message_el.append(translation_el) - - for field, value in message.embedded_comments.extras: - el = ElementTree.Element('extra-' + field) - el.text = value - message_el.append(el) - - self._new_message_els.append(message_el) - - return message_el - - def _summary(self): - """ Display the summary of changes to the user. """ - - summary_lines = [] - - # Display a line of the summary and the heading if not already done. - def summary(line): - nonlocal summary_lines - - if not summary_lines: - summary_lines.append( - "Summary of changes to {ts}:".format(ts=self._ts_file)) - - summary_lines.append(" " + line) - - if self._nr_new: - if self._nr_new_duplicates: - summary("{0} new messages were added (and {1} duplicates)".format( - self._nr_new, self._nr_new_duplicates)) - else: - summary("{0} new messages were added".format(self._nr_new)) - - if self._nr_new_using_existing_translation: - summary("{0} messages reused existing translations".format( - self._nr_new_using_existing_translation)) - - if self._nr_existing: - summary("{0} existing messages were found".format( - self._nr_existing)) - - if self._nr_kept_obsolete: - summary("{0} obsolete messages were kept".format( - self._nr_kept_obsolete)) - - if self._nr_discarded_obsolete: - summary("{0} obsolete messages were discarded".format( - self._nr_discarded_obsolete)) - - if self._nr_discarded_untranslated: - summary("{0} untranslated messages were discarded".format( - self._nr_discarded_untranslated)) - - if not summary_lines: - summary_lines.append("{ts} was unchanged".format(ts=self._ts_file)) - - print(os.linesep.join(summary_lines)) - - -# The XML of an empty .ts file. This is what a current lupdate will create -# with an empty C++ source file. -_EMPTY_TS = ''' - -''' diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translations.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translations.py deleted file mode 100644 index 628531d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/translations.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class Context: - """ Encapsulate a message context. """ - - def __init__(self, name): - """ Initialise the context. """ - - self.name = name - self.messages = [] - - -class EmbeddedComments: - """ Encapsulate information for a translator embedded in comments. """ - - def __init__(self): - """ Initialise the object. """ - - self.message_id = '' - self.extra_comments = [] - self.extras = [] - - -class Message: - """ Encapsulate a message. """ - - def __init__(self, filename, line_nr, source, comment, numerus): - """ Initialise the message. """ - - self.filename = filename - self.line_nr = line_nr - self.source = source - self.comment = comment - self.numerus = numerus - self.embedded_comments = EmbeddedComments() diff --git a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/user.py b/myenv/lib/python3.12/site-packages/PyQt6/lupdate/user.py deleted file mode 100644 index 896177d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/lupdate/user.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -class UserException(Exception): - """ Encapsulate an exception ultimate caused by the user. """ - - pass - - -class User: - """ A mixin that provides methods for communicating with the user. """ - - def __init__(self, verbose, **kwargs): - """ Initialise the object. """ - - super().__init__(**kwargs) - - self._verbose = verbose - - @staticmethod - def pretty(text): - """ Returns a pretty-fied version of some text suitable for displaying - to the user. - """ - - return text.replace('\n', '\\n') - - def progress(self, message): - """ Display a progress message. """ - - if self._verbose: - print(message) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/py.typed b/myenv/lib/python3.12/site-packages/PyQt6/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/PyQt6/sip.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/PyQt6/sip.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 538f86f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/sip.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/sip.pyi b/myenv/lib/python3.12/site-packages/PyQt6/sip.pyi deleted file mode 100644 index 9dfe657..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/sip.pyi +++ /dev/null @@ -1,99 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause - -# Copyright (c) 2024 Phil Thompson - - -from typing import Any, Generic, Iterable, overload, Sequence, TypeVar, Union - - -# PEP 484 has no explicit support for the buffer protocol so we just name types -# we know that implement it. -Buffer = Union[bytes, bytearray, memoryview, 'array', 'voidptr'] - - -# Constants. -SIP_VERSION = ... # type: int -SIP_VERSION_STR = ... # type: str - - -# The bases for SIP generated types. -class wrappertype: - def __init__(self, *args, **kwargs) -> None: ... - -class simplewrapper: - def __init__(self, *args, **kwargs) -> None: ... - -class wrapper(simplewrapper): ... - - -# The array type. -_T = TypeVar('_T') - -class array(Sequence[_T], Generic[_T]): - - @overload - def __getitem__(self, key: int) -> _T: ... - @overload - def __getitem__(self, key: slice) -> 'array[_T]': ... - - @overload - def __setitem__(self, key: int, value: _T) -> None: ... - @overload - def __setitem__(self, key: slice, value: Iterable[_T]) -> None: ... - - @overload - def __delitem__(self, key: int) -> None: ... - @overload - def __delitem__(self, key: slice) -> None: ... - - def __len__(self) -> int: ... - - -# The voidptr type. -class voidptr: - - def __init__(self, addr: Union[int, Buffer], size: int = -1, writeable: bool = True) -> None: ... - - def __int__(self) -> int: ... - - @overload - def __getitem__(self, i: int) -> bytes: ... - - @overload - def __getitem__(self, s: slice) -> 'voidptr': ... - - def __len__(self) -> int: ... - - def __setitem__(self, i: Union[int, slice], v: Buffer) -> None: ... - - def asarray(self, size: int = -1) -> array[int]: ... - - # Python doesn't expose the capsule type. - def ascapsule(self) -> Any: ... - - def asstring(self, size: int = -1) -> bytes: ... - - def getsize(self) -> int: ... - - def getwriteable(self) -> bool: ... - - def setsize(self, size: int) -> None: ... - - def setwriteable(self, writeable: bool) -> None: ... - - -# Remaining functions. -def assign(obj: simplewrapper, other: simplewrapper) -> None: ... -def cast(obj: simplewrapper, type: wrappertype) -> simplewrapper: ... -def delete(obj: simplewrapper) -> None: ... -def dump(obj: simplewrapper) -> None: ... -def enableautoconversion(type: wrappertype, enable: bool) -> bool: ... -def isdeleted(obj: simplewrapper) -> bool: ... -def ispycreated(obj: simplewrapper) -> bool: ... -def ispyowned(obj: simplewrapper) -> bool: ... -def setdeleted(obj: simplewrapper) -> None: ... -def settracemask(mask: int) -> None: ... -def transferback(obj: wrapper) -> None: ... -def transferto(obj: wrapper, owner: wrapper) -> None: ... -def unwrapinstance(obj: simplewrapper) -> None: ... -def wrapinstance(addr: int, type: wrappertype) -> simplewrapper: ... diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__init__.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__init__.py deleted file mode 100644 index c19af1a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index cf7e9d3..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/as_string.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/as_string.cpython-312.pyc deleted file mode 100644 index eb3da16..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/as_string.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/compiler.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/compiler.cpython-312.pyc deleted file mode 100644 index bdac5b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/compiler.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/indenter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/indenter.cpython-312.pyc deleted file mode 100644 index 42a7022..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/indenter.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/misc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/misc.cpython-312.pyc deleted file mode 100644 index 7f5b249..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/misc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc deleted file mode 100644 index 9993015..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc deleted file mode 100644 index bfb342b..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc deleted file mode 100644 index 3e60512..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/as_string.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/as_string.py deleted file mode 100644 index e9b2e3d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/as_string.py +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -import re - - -def as_string(obj): - if isinstance(obj, str): - return '"' + _escape(obj) + '"' - - return str(obj) - - -_esc_regex = re.compile(r"(\"|\'|\\)") - -def _escape(text): - # This escapes any escaped single or double quote or backslash. - x = _esc_regex.sub(r"\\\1", text) - - # This replaces any '\n' with an escaped version and a real line break. - return re.sub(r'\n', r'\\n"\n"', x) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/compiler.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/compiler.py deleted file mode 100644 index 757e6bf..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/compiler.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (c) 2023 Riverbank Computing Limited. -# Copyright (c) 2006 Thorsten Marek. -# All right reserved. -# -# This file is part of PyQt. -# -# You may use this file under the terms of the GPL v3 or the revised BSD -# license as follows: -# -# "Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Riverbank Computing Limited nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - -import sys - -from ..properties import Properties -from ..uiparser import UIParser -from . import qtproxies -from .indenter import createCodeIndenter, getIndenter, write_code -from .qobjectcreator import CompilerCreatorPolicy - - -class UICompiler(UIParser): - def __init__(self): - UIParser.__init__(self, qtproxies.QtCore, qtproxies.QtGui, - qtproxies.QtWidgets, CompilerCreatorPolicy()) - - def reset(self): - qtproxies.i18n_strings = [] - UIParser.reset(self) - - def setContext(self, context): - qtproxies.i18n_context = context - - def createToplevelWidget(self, classname, widgetname): - indenter = getIndenter() - indenter.level = 0 - - indenter.write("from PyQt6 import QtCore, QtGui, QtWidgets") - indenter.write("") - - indenter.write("") - indenter.write("class Ui_%s(object):" % self.uiname) - indenter.indent() - indenter.write("def setupUi(self, %s):" % widgetname) - indenter.indent() - w = self.factory.createQtObject(classname, widgetname, - is_attribute=False, no_instantiation=True) - w.baseclass = classname - w.uiclass = "Ui_%s" % self.uiname - return w - - def setDelayedProps(self): - write_code("") - write_code("self.retranslateUi(%s)" % self.toplevelWidget) - UIParser.setDelayedProps(self) - - def finalize(self): - indenter = getIndenter() - indenter.level = 1 - indenter.write("") - indenter.write("def retranslateUi(self, %s):" % self.toplevelWidget) - - indenter.indent() - - if qtproxies.i18n_strings: - indenter.write("_translate = QtCore.QCoreApplication.translate") - for s in qtproxies.i18n_strings: - indenter.write(s) - else: - indenter.write("pass") - - indenter.dedent() - indenter.dedent() - - def compileUi(self, input_stream, output_stream): - createCodeIndenter(output_stream) - w = self.parse(input_stream) - - self.factory._cpolicy._writeOutImports() - - return {"widgetname": str(w), - "uiclass" : w.uiclass, - "baseclass" : w.baseclass} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/indenter.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/indenter.py deleted file mode 100644 index 9c92ad5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/indenter.py +++ /dev/null @@ -1,77 +0,0 @@ -############################################################################# -## -## Copyright (C) 2014 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -indentwidth = 4 - -_indenter = None - -class _IndentedCodeWriter(object): - def __init__(self, output): - self.level = 0 - self.output = output - - def indent(self): - self.level += 1 - - def dedent(self): - self.level -= 1 - - def write(self, line): - if line.strip(): - if indentwidth > 0: - indent = " " * indentwidth - line = line.replace("\t", indent) - else: - indent = "\t" - - self.output.write("%s%s\n" % (indent * self.level, line)) - else: - self.output.write("\n") - - -def createCodeIndenter(output): - global _indenter - _indenter = _IndentedCodeWriter(output) - -def getIndenter(): - return _indenter - -def write_code(string): - _indenter.write(string) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/misc.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/misc.py deleted file mode 100644 index 0dcf181..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/misc.py +++ /dev/null @@ -1,59 +0,0 @@ -############################################################################# -## -## Copyright (C) 2016 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -def moduleMember(module, name): - if module: - return "%s.%s" % (module, name) - - return name - - -class Literal(object): - """Literal(string) -> new literal - - string will not be quoted when put into an argument list""" - def __init__(self, string): - self.string = string - - def __str__(self): - return self.string - - def __or__(self, r_op): - return Literal("%s|%s" % (self, r_op)) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/proxy_metaclass.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/proxy_metaclass.py deleted file mode 100644 index c997b84..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/proxy_metaclass.py +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################# -## -## Copyright (C) 2014 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -from .misc import Literal, moduleMember - - -class ProxyMetaclass(type): - """ ProxyMetaclass is the meta-class for proxies. """ - - def __init__(*args): - """ Initialise the meta-class. """ - - # Initialise as normal. - type.__init__(*args) - - # The proxy type object we have created. - proxy = args[0] - - # Go through the proxy's attributes looking for other proxies. - for sub_proxy in proxy.__dict__.values(): - if type(sub_proxy) is ProxyMetaclass: - # Set the module name of the contained proxy to the name of the - # container proxy. - sub_proxy.module = proxy.__name__ - - # Attribute hierachies are created depth first so any proxies - # contained in the sub-proxy whose module we have just set will - # already exist and have an incomplete module name. We need to - # revisit them and prepend the new name to their module names. - # Note that this should be recursive but with current usage we - # know there will be only one level to revisit. - for sub_sub_proxy in sub_proxy.__dict__.values(): - if type(sub_sub_proxy) is ProxyMetaclass: - sub_sub_proxy.module = '%s.%s' % (proxy.__name__, sub_sub_proxy.module) - - # Makes sure there is a 'module' attribute. - if not hasattr(proxy, 'module'): - proxy.module = '' - - def __getattribute__(cls, name): - try: - return type.__getattribute__(cls, name) - except AttributeError: - # Make sure __init__()'s use of hasattr() works. - if name == 'module': - raise - - # Avoid a circular import. - from .qtproxies import LiteralProxyClass - - return type(name, (LiteralProxyClass, ), - {"module": moduleMember(type.__getattribute__(cls, "module"), - type.__getattribute__(cls, "__name__"))}) - - def __str__(cls): - return moduleMember(type.__getattribute__(cls, "module"), - type.__getattribute__(cls, "__name__")) - - def __or__(self, r_op): - return Literal("%s|%s" % (self, r_op)) - - def __eq__(self, other): - return str(self) == str(other) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qobjectcreator.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qobjectcreator.py deleted file mode 100644 index e032747..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qobjectcreator.py +++ /dev/null @@ -1,178 +0,0 @@ -############################################################################# -## -## Copyright (C) 2023 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -import logging -import sys - -from .as_string import as_string -from .indenter import write_code -from .qtproxies import QtGui, QtWidgets, Literal, strict_getattr - - -logger = logging.getLogger(__name__) -DEBUG = logger.debug - - -class _QtWrapper(object): - @classmethod - def search(cls, name): - try: - return strict_getattr(cls.module, name) - except AttributeError: - return None - - -class _QtGuiWrapper(_QtWrapper): - module = QtGui - - -class _QtWidgetsWrapper(_QtWrapper): - module = QtWidgets - - -class _ModuleWrapper(object): - def __init__(self, name, classes): - if "." in name: - idx = name.rfind(".") - self._package = name[:idx] - self._module = name[idx + 1:] - else: - self._package = None - self._module = name - - self._classes = classes - self._used = False - - def search(self, cls): - if cls in self._classes: - self._used = True - - # Remove any C++ scope. - cls = cls.split('.')[-1] - - return type(cls, (QtWidgets.QWidget,), {"module": self._module}) - else: - return None - - def _writeImportCode(self): - if self._used: - if self._package is None: - write_code("import %s" % self._module) - else: - write_code("from %s import %s" % (self._package, self._module)) - - -class _CustomWidgetLoader(object): - def __init__(self): - self._widgets = {} - self._usedWidgets = set() - - def addCustomWidget(self, widgetClass, baseClass, module): - assert widgetClass not in self._widgets - self._widgets[widgetClass] = (baseClass, module) - - def _resolveBaseclass(self, baseClass): - try: - for x in range(0, 10): - try: return strict_getattr(QtWidgets, baseClass) - except AttributeError: pass - - baseClass = self._widgets[baseClass][0] - else: - raise ValueError("baseclass resolve took too long, check custom widgets") - - except KeyError: - raise ValueError("unknown baseclass %s" % baseClass) - - def search(self, cls): - try: - baseClass = self._resolveBaseclass(self._widgets[cls][0]) - DEBUG("resolved baseclass of %s: %s" % (cls, baseClass)) - except KeyError: - return None - - self._usedWidgets.add(cls) - - return type(cls, (baseClass, ), {"module" : ""}) - - def _writeImportCode(self): - imports = {} - for widget in self._usedWidgets: - _, module = self._widgets[widget] - imports.setdefault(module, []).append(widget) - - for module, classes in sorted(imports.items()): - write_code("from %s import %s" % (module, ", ".join(sorted(classes)))) - - -class CompilerCreatorPolicy(object): - def __init__(self): - self._modules = [] - - def createQtGuiWidgetsWrappers(self): - return [_QtGuiWrapper, _QtWidgetsWrapper] - - def createModuleWrapper(self, name, classes): - mw = _ModuleWrapper(name, classes) - self._modules.append(mw) - return mw - - def createCustomWidgetLoader(self): - cw = _CustomWidgetLoader() - self._modules.append(cw) - return cw - - def instantiate(self, ctor, object_name, ctor_args, ctor_kwargs, - is_attribute, no_instantiation): - return ctor(object_name, ctor_args, ctor_kwargs, is_attribute, - no_instantiation) - - def invoke(self, rname, method, args): - return method(rname, *args) - - def getSlot(self, object, slotname): - return Literal("%s.%s" % (object, slotname)) - - def asString(self, s): - return as_string(s) - - def _writeOutImports(self): - for module in self._modules: - module._writeImportCode() diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qtproxies.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qtproxies.py deleted file mode 100644 index fc5b401..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Compiler/qtproxies.py +++ /dev/null @@ -1,471 +0,0 @@ -############################################################################# -## -## Copyright (C) 2023 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -import sys -import re - -from .as_string import as_string -from .indenter import write_code -from .misc import Literal, moduleMember -from .proxy_metaclass import ProxyMetaclass - - -i18n_strings = [] -i18n_context = "" - -def i18n_print(string): - i18n_strings.append(string) - -def i18n_void_func(name): - def _printer(self, *args): - i18n_print("%s.%s(%s)" % (self, name, ", ".join(map(as_string, args)))) - return _printer - -def i18n_func(name): - def _printer(self, rname, *args): - i18n_print("%s = %s.%s(%s)" % (rname, self, name, ", ".join(map(as_string, args)))) - return Literal(rname) - - return _printer - -def strict_getattr(module, clsname): - cls = getattr(module, clsname) - if issubclass(cls, LiteralProxyClass): - raise AttributeError(cls) - else: - return cls - - -class i18n_string(object): - def __init__(self, string, disambig): - self.string = string - self.disambig = disambig - - def __str__(self): - if self.disambig is None: - return '_translate("%s", %s)' % (i18n_context, as_string(self.string)) - - return '_translate("%s", %s, %s)' % (i18n_context, as_string(self.string), as_string(self.disambig)) - - -# Classes with this flag will be handled as literal values. If functions are -# called on these classes, the literal value changes. -# Example: -# the code -# >>> QSize(9,10).expandedTo(...) -# will print just that code. -AS_ARGUMENT = 0x02 - -# Classes with this flag may have members that are signals which themselves -# will have a connect() member. -AS_SIGNAL = 0x01 - -# ATTENTION: currently, classes can either be literal or normal. If a class -# should need both kinds of behaviour, the code has to be changed. - -class ProxyClassMember(object): - def __init__(self, proxy, function_name, flags): - self.proxy = proxy - self.function_name = function_name - self.flags = flags - - def __str__(self): - return "%s.%s" % (self.proxy, self.function_name) - - def __call__(self, *args): - if self.function_name == 'setProperty': - str_args = (as_string(args[0]), as_string(args[1])) - else: - str_args = map(as_string, args) - - func_call = "%s.%s(%s)" % (self.proxy, - self.function_name, - ", ".join(str_args)) - if self.flags & AS_ARGUMENT: - self.proxy._uic_name = func_call - return self.proxy - else: - needs_translation = False - for arg in args: - if isinstance(arg, i18n_string): - needs_translation = True - if needs_translation: - i18n_print(func_call) - else: - if self.function_name == 'connect': - func_call += ' # type: ignore' - - write_code(func_call) - - def __getattribute__(self, attribute): - """ Reimplemented to create a proxy connect() if requested and this - might be a proxy for a signal. - """ - - try: - return object.__getattribute__(self, attribute) - except AttributeError: - if attribute == 'connect' and self.flags & AS_SIGNAL: - return ProxyClassMember(self, attribute, 0) - - raise - - def __getitem__(self, idx): - """ Reimplemented to create a proxy member that should be a signal that - passes arguments. We handle signals without arguments before we get - here and never apply the index notation to them. - """ - - return ProxySignalWithArguments(self.proxy, self.function_name, idx) - - -class ProxySignalWithArguments(object): - """ This is a proxy for (what should be) a signal that passes arguments. - """ - - def __init__(self, sender, signal_name, signal_index): - self._sender = sender - self._signal_name = signal_name - - # Convert the signal index, which will be a single argument or a tuple - # of arguments, to quoted strings. - if isinstance(signal_index, tuple): - self._signal_index = ','.join(["'%s'" % a for a in signal_index]) - else: - self._signal_index = "'%s'" % signal_index - - def connect(self, slot): - write_code("%s.%s[%s].connect(%s) # type: ignore" % (self._sender, self._signal_name, self._signal_index, slot)) - - -class ProxyBase(metaclass=ProxyMetaclass): - """ A base class for proxies using Python v3 syntax for setting the - meta-class. - """ - - -class ProxyClass(ProxyBase): - flags = 0 - - def __init__(self, object_name, ctor_args=None, ctor_kwargs=None, - is_attribute=False, no_instantiation=True): - if object_name: - if is_attribute: - object_name = 'self.' + object_name - - self._uic_name = object_name - else: - self._uic_name = "Unnamed" - - if not no_instantiation: - args = [] if ctor_args is None else list(map(str, ctor_args)) - - if ctor_kwargs is not None: - for k, v in ctor_kwargs.items(): - args.append(k + '=' + str(v)) - - fun_call = '%s(%s)' % \ - (moduleMember(self.module, self.__class__.__name__), - ', '.join(args)) - - if object_name: - fun_call = '%s = %s' % (object_name, fun_call) - - write_code(fun_call) - - def __str__(self): - return self._uic_name - - def __getattribute__(self, attribute): - try: - return object.__getattribute__(self, attribute) - except AttributeError: - return ProxyClassMember(self, attribute, self.flags) - - -class LiteralProxyClass(ProxyClass): - """LiteralObject(*args) -> new literal class - - a literal class can be used as argument in a function call - - >>> class Foo(LiteralProxyClass): pass - >>> str(Foo(1,2,3)) == "Foo(1,2,3)" - """ - flags = AS_ARGUMENT - - def __init__(self, *args): - self._uic_name = "%s(%s)" % \ - (moduleMember(self.module, self.__class__.__name__), - ", ".join(map(as_string, args))) - - -class ProxyNamespace(ProxyBase): - pass - - -# These are all the Qt classes used by pyuic6 in their namespaces. If a class -# is missing, the compiler will fail, normally with an AttributeError. -# -# For adding new classes: -# - utility classes used as literal values do not need to be listed -# because they are created on the fly as subclasses of LiteralProxyClass -# - classes which are *not* QWidgets inherit from ProxyClass and they -# have to be listed explicitly in the correct namespace. These classes -# are created via a ProxyQObjectCreator -# - new QWidget-derived classes have to inherit from qtproxies.QWidget -# If the widget does not need any special methods, it can be listed -# in _qwidgets - -class QtCore(ProxyNamespace): - class Qt(ProxyNamespace): - pass - - ## connectSlotsByName and connect have to be handled as class methods, - ## otherwise they would be created as LiteralProxyClasses and never be - ## printed - class QMetaObject(ProxyClass): - @classmethod - def connectSlotsByName(cls, *args): - ProxyClassMember(cls, "connectSlotsByName", 0)(*args) - - class QObject(ProxyClass): - flags = AS_SIGNAL - - def metaObject(self): - class _FakeMetaObject(object): - def className(*args): - return self.__class__.__name__ - return _FakeMetaObject() - - def objectName(self): - return self._uic_name.split(".")[-1] - - -class QtGui(ProxyNamespace): - class QIcon(ProxyClass): - class fromTheme(ProxyClass): pass - - class QConicalGradient(ProxyClass): pass - class QLinearGradient(ProxyClass): pass - class QRadialGradient(ProxyClass): pass - class QBrush(ProxyClass): pass - class QPainter(ProxyClass): pass - class QPalette(ProxyClass): pass - class QFont(ProxyClass): pass - class QFontDatabase(ProxyClass): pass - # QActions inherit from QObject for the meta-object stuff and the hierarchy - # has to be correct since we have a isinstance(x, QtWidgets.QLayout) call - # in the UI parser. - class QAction(QtCore.QObject): pass - class QActionGroup(QtCore.QObject): pass - - -# These sub-class QWidget but aren't themselves sub-classed. -_qwidgets = ('QCalendarWidget', 'QDialogButtonBox', 'QDockWidget', 'QGroupBox', - 'QLineEdit', 'QMainWindow', 'QMenuBar', 'QProgressBar', 'QStatusBar', - 'QToolBar', 'QWizardPage') - -class QtWidgets(ProxyNamespace): - class QApplication(QtCore.QObject): - @staticmethod - def translate(uiname, text, disambig): - return i18n_string(text or "", disambig) - - class QSpacerItem(ProxyClass): pass - class QSizePolicy(ProxyClass): pass - class QButtonGroup(QtCore.QObject): pass - class QLayout(QtCore.QObject): pass - class QGridLayout(QLayout): pass - class QBoxLayout(QLayout): pass - class QHBoxLayout(QBoxLayout): pass - class QVBoxLayout(QBoxLayout): pass - class QFormLayout(QLayout): pass - - class QWidget(QtCore.QObject): - def font(self): - return Literal("%s.font()" % self) - - def minimumSizeHint(self): - return Literal("%s.minimumSizeHint()" % self) - - def sizePolicy(self): - sp = LiteralProxyClass() - sp._uic_name = "%s.sizePolicy()" % self - return sp - - class QDialog(QWidget): pass - class QColorDialog(QDialog): pass - class QFileDialog(QDialog): pass - class QFontDialog(QDialog): pass - class QInputDialog(QDialog): pass - class QMessageBox(QDialog): pass - class QWizard(QDialog): pass - - class QAbstractSlider(QWidget): pass - class QDial(QAbstractSlider): pass - class QScrollBar(QAbstractSlider): pass - class QSlider(QAbstractSlider): pass - - class QMenu(QWidget): - def menuAction(self): - return Literal("%s.menuAction()" % self) - - class QTabWidget(QWidget): - def addTab(self, *args): - text = args[-1] - - if isinstance(text, i18n_string): - i18n_print("%s.setTabText(%s.indexOf(%s), %s)" % \ - (self._uic_name, self._uic_name, args[0], text)) - args = args[:-1] + ("", ) - - ProxyClassMember(self, "addTab", 0)(*args) - - def indexOf(self, page): - return Literal("%s.indexOf(%s)" % (self, page)) - - class QComboBox(QWidget): pass - class QFontComboBox(QComboBox): pass - - class QAbstractSpinBox(QWidget): pass - class QDoubleSpinBox(QAbstractSpinBox): pass - class QSpinBox(QAbstractSpinBox): pass - - class QDateTimeEdit(QAbstractSpinBox): pass - class QDateEdit(QDateTimeEdit): pass - class QTimeEdit(QDateTimeEdit): pass - - class QFrame(QWidget): pass - class QLabel(QFrame): pass - class QLCDNumber(QFrame): pass - class QSplitter(QFrame): pass - class QStackedWidget(QFrame): pass - - class QToolBox(QFrame): - def addItem(self, *args): - text = args[-1] - - if isinstance(text, i18n_string): - i18n_print("%s.setItemText(%s.indexOf(%s), %s)" % \ - (self._uic_name, self._uic_name, args[0], text)) - args = args[:-1] + ("", ) - - ProxyClassMember(self, "addItem", 0)(*args) - - def indexOf(self, page): - return Literal("%s.indexOf(%s)" % (self, page)) - - def layout(self): - return QtWidgets.QLayout('%s.layout()' % self) - - class QAbstractScrollArea(QFrame): - def viewport(self): - return QtWidgets.QWidget('%s.viewport()' % self) - - class QGraphicsView(QAbstractScrollArea): pass - class QMdiArea(QAbstractScrollArea): pass - class QPlainTextEdit(QAbstractScrollArea): pass - class QScrollArea(QAbstractScrollArea): pass - - class QTextEdit(QAbstractScrollArea): pass - class QTextBrowser(QTextEdit): pass - - class QAbstractItemView(QAbstractScrollArea): pass - class QColumnView(QAbstractItemView): pass - class QHeaderView(QAbstractItemView): pass - class QListView(QAbstractItemView): pass - - class QTableView(QAbstractItemView): - def horizontalHeader(self): - return QtWidgets.QHeaderView('%s.horizontalHeader()' % self) - - def verticalHeader(self): - return QtWidgets.QHeaderView('%s.verticalHeader()' % self) - - class QTreeView(QAbstractItemView): - def header(self): - return QtWidgets.QHeaderView('%s.header()' % self) - - class QUndoView(QListView): pass - - class QListWidgetItem(ProxyClass): pass - - class QListWidget(QListView): - setSortingEnabled = i18n_void_func("setSortingEnabled") - isSortingEnabled = i18n_func("isSortingEnabled") - item = i18n_func("item") - - class QTableWidgetItem(ProxyClass): pass - - class QTableWidget(QTableView): - setSortingEnabled = i18n_void_func("setSortingEnabled") - isSortingEnabled = i18n_func("isSortingEnabled") - item = i18n_func("item") - horizontalHeaderItem = i18n_func("horizontalHeaderItem") - verticalHeaderItem = i18n_func("verticalHeaderItem") - - class QTreeWidgetItem(ProxyClass): - def child(self, index): - return QtWidgets.QTreeWidgetItem('%s.child(%i)' % (self, index)) - - class QTreeWidget(QTreeView): - setSortingEnabled = i18n_void_func("setSortingEnabled") - isSortingEnabled = i18n_func("isSortingEnabled") - - def headerItem(self): - return QtWidgets.QWidget('%s.headerItem()' % self) - - def topLevelItem(self, index): - return QtWidgets.QTreeWidgetItem( - '%s.topLevelItem(%i)' % (self, index)) - - class QAbstractButton(QWidget): pass - class QCheckBox(QAbstractButton): pass - class QRadioButton(QAbstractButton): pass - class QToolButton(QAbstractButton): pass - - class QPushButton(QAbstractButton): pass - class QCommandLinkButton(QPushButton): pass - class QKeySequenceEdit(QWidget): pass - - # Add all remaining classes. - for _class in _qwidgets: - if _class not in locals(): - locals()[_class] = type(_class, (QWidget, ), {}) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__init__.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__init__.py deleted file mode 100644 index c19af1a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 41b5a8f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/loader.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/loader.cpython-312.pyc deleted file mode 100644 index a059060..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/loader.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc deleted file mode 100644 index f1a594e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/loader.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/loader.py deleted file mode 100644 index 14339b0..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/loader.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2023 Riverbank Computing Limited. -# Copyright (c) 2006 Thorsten Marek. -# All right reserved. -# -# This file is part of PyQt. -# -# You may use this file under the terms of the GPL v3 or the revised BSD -# license as follows: -# -# "Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Riverbank Computing Limited nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - -from PyQt6 import QtCore, QtGui, QtWidgets - -from ..uiparser import UIParser -from .qobjectcreator import LoaderCreatorPolicy - - -class DynamicUILoader(UIParser): - def __init__(self, package): - UIParser.__init__(self, QtCore, QtGui, QtWidgets, - LoaderCreatorPolicy(package)) - - def createToplevelWidget(self, classname, widgetname): - if self.toplevelInst is None: - return self.factory.createQtObject(classname, widgetname) - - if not isinstance(self.toplevelInst, self.factory.findQObjectType(classname)): - raise TypeError( - ("Wrong base class of toplevel widget", - (type(self.toplevelInst), classname))) - - return self.toplevelInst - - def loadUi(self, filename, toplevelInst): - self.toplevelInst = toplevelInst - - return self.parse(filename) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/qobjectcreator.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/qobjectcreator.py deleted file mode 100644 index e556e53..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/Loader/qobjectcreator.py +++ /dev/null @@ -1,158 +0,0 @@ -############################################################################# -## -## Copyright (C) 2023 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -import sys - -from PyQt6 import QtGui, QtWidgets - - -class _QtWrapper(object): - @classmethod - def search(cls, name): - return getattr(cls.module, name, None) - - -class _QtGuiWrapper(_QtWrapper): - module = QtGui - - -class _QtWidgetsWrapper(_QtWrapper): - module = QtWidgets - - -class _ModuleWrapper(object): - def __init__(self, moduleName, classes): - self._moduleName = moduleName - self._module = None - self._classes = classes - - def search(self, cls): - if cls in self._classes: - if self._module is None: - self._module = __import__(self._moduleName, {}, {}, self._classes) - # Remove any C++ scope. - cls = cls.split('.')[-1] - - return getattr(self._module, cls) - - return None - - -class _CustomWidgetLoader(object): - def __init__(self, package): - # should it stay this way? - if '.' not in sys.path: - sys.path.append('.') - - self._widgets = {} - self._modules = {} - self._package = package - - def addCustomWidget(self, widgetClass, baseClass, module): - assert widgetClass not in self._widgets - self._widgets[widgetClass] = module - - def search(self, cls): - module_name = self._widgets.get(cls) - if module_name is None: - return None - - module = self._modules.get(module_name) - if module is None: - if module_name.startswith('.'): - if self._package == '': - raise ImportError( - "relative import of %s without base package specified" % module_name) - - if self._package.startswith('.'): - raise ImportError( - "base package %s is relative" % self._package) - - mname = self._package + module_name - else: - mname = module_name - - try: - module = __import__(mname, {}, {}, (cls,)) - except ValueError: - # Raise a more helpful exception. - raise ImportError("unable to import module %s" % mname) - - self._modules[module_name] = module - - return getattr(module, cls) - - -class LoaderCreatorPolicy(object): - def __init__(self, package): - self._package = package - - def createQtGuiWidgetsWrappers(self): - return [_QtGuiWrapper, _QtWidgetsWrapper] - - def createModuleWrapper(self, moduleName, classes): - return _ModuleWrapper(moduleName, classes) - - def createCustomWidgetLoader(self): - return _CustomWidgetLoader(self._package) - - def instantiate(self, ctor, object_name, ctor_args, ctor_kwargs, - is_attribute, no_instantiation): - - if ctor_args is None: - ctor_args = () - - if ctor_kwargs is None: - ctor_kwargs = {} - - return ctor(*ctor_args, **ctor_kwargs) - - def invoke(self, rname, method, args): - return method(*args) - - def getSlot(self, object, slotname): - # Rename slots that correspond to Python keyword arguments. - if slotname == 'raise': - slotname += '_' - - return getattr(object, slotname) - - def asString(self, s): - return s diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__init__.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/__init__.py deleted file mode 100644 index f6f70c5..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -# The public API. -from .compile_ui import compileUi, compileUiDir -from .load_ui import loadUi, loadUiType -from .objcreator import widgetPluginPath -from .ui_file import UIFile diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 8b10d3f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/compile_ui.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/compile_ui.cpython-312.pyc deleted file mode 100644 index db59629..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/compile_ui.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/enum_map.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/enum_map.cpython-312.pyc deleted file mode 100644 index f9a46d8..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/enum_map.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 97ec2ab..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/icon_cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/icon_cache.cpython-312.pyc deleted file mode 100644 index 9eec93e..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/icon_cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/load_ui.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/load_ui.cpython-312.pyc deleted file mode 100644 index e0f14be..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/load_ui.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/objcreator.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/objcreator.cpython-312.pyc deleted file mode 100644 index e240bbf..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/objcreator.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/properties.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/properties.cpython-312.pyc deleted file mode 100644 index 1f07f16..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/properties.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/pyuic.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/pyuic.cpython-312.pyc deleted file mode 100644 index 0b93fea..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/pyuic.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/ui_file.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/ui_file.cpython-312.pyc deleted file mode 100644 index fb91c70..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/ui_file.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/uiparser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/uiparser.cpython-312.pyc deleted file mode 100644 index 143833c..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/__pycache__/uiparser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/compile_ui.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/compile_ui.py deleted file mode 100644 index e51bdc8..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/compile_ui.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright (c) 2023 Riverbank Computing Limited. -# Copyright (c) 2006 Thorsten Marek. -# All right reserved. -# -# This file is part of PyQt. -# -# You may use this file under the terms of the GPL v3 or the revised BSD -# license as follows: -# -# "Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Riverbank Computing Limited nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - -from .Compiler import indenter, compiler - - -_header = """# Form implementation generated from reading ui file '{}' -# -# Created by: PyQt6 UI code generator {} -# -# WARNING: Any manual changes made to this file will be lost when pyuic6 is -# run again. Do not edit this file unless you know what you are doing. - - -""" - - -_display_code = """ - -if __name__ == "__main__": - import sys - app = QtWidgets.QApplication(sys.argv) - %(widgetname)s = QtWidgets.%(baseclass)s() - ui = %(uiclass)s() - ui.setupUi(%(widgetname)s) - %(widgetname)s.show() - sys.exit(app.exec())""" - - -def compileUiDir(dir, recurse=False, map=None, max_workers=0, **compileUi_args): - """compileUiDir(dir, recurse=False, map=None, **compileUi_args) - - Creates Python modules from Qt Designer .ui files in a directory or - directory tree. - - dir is the name of the directory to scan for files whose name ends with - '.ui'. By default the generated Python module is created in the same - directory ending with '.py'. - recurse is set if any sub-directories should be scanned. The default is - False. - map is an optional callable that is passed the name of the directory - containing the '.ui' file and the name of the Python module that will be - created. The callable should return a tuple of the name of the directory - in which the Python module will be created and the (possibly modified) - name of the module. The default is None. - max_workers is the maximum number of worker processes to use. A value of 0 - means only the current process is used. A value of None means that the - number of processors on the machine is used. - compileUi_args are any additional keyword arguments that are passed to - the compileUi() function that is called to create each Python module. - """ - - from functools import partial - import os - - jobs = [] - - # Add a compilation job. - def add_job(ui_dir, ui_file): - # Ignore if it doesn't seem to be a .ui file. - if ui_file.endswith('.ui'): - py_dir = ui_dir - py_file = ui_file[:-3] + '.py' - - # Allow the caller to change the name of the .py file or generate - # it in a different directory. - if map is not None: - py_dir, py_file = map(py_dir, py_file) - - ui_path = os.path.join(ui_dir, ui_file) - - jobs.append((ui_path, py_dir, py_file)) - - if recurse: - for root, _, files in os.walk(dir): - for ui in files: - add_job(root, ui) - else: - for ui in os.listdir(dir): - if os.path.isfile(os.path.join(dir, ui)): - add_job(dir, ui) - - if jobs and max_workers != 0: - from concurrent.futures import ProcessPoolExecutor - - with ProcessPoolExecutor(max_workers=max_workers) as executor: - executor.map(partial(_run_job, **compileUi_args), jobs) - else: - for job in jobs: - _run_job(job, **compileUi_args) - - -def _run_job(job, **compileUi_args): - """ Run a job to compile a single .ui file. """ - - import os - - ui_path, py_dir, py_file = job - - # Make sure the destination directory exists. - try: - os.makedirs(py_dir) - except: - pass - - py_path = os.path.join(py_dir, py_file) - - with open(py_path, 'w', encoding='utf-8') as py_f: - compileUi(ui_path, py_f, **compileUi_args) - - -def compileUi(uifile, pyfile, execute=False, indent=4): - """compileUi(uifile, pyfile, execute=False, indent=4) - - Creates a Python module from a Qt Designer .ui file. - - uifile is a file name or file-like object containing the .ui file. - pyfile is the file-like object to which the Python code will be written to. - execute is optionally set to generate extra Python code that allows the - code to be run as a standalone application. The default is False. - indent is the optional indentation width using spaces. If it is 0 then a - tab is used. The default is 4. - """ - - from PyQt6.QtCore import PYQT_VERSION_STR - - try: - uifname = uifile.name - except AttributeError: - uifname = uifile - - indenter.indentwidth = indent - - pyfile.write(_header.format(uifname, PYQT_VERSION_STR)) - - winfo = compiler.UICompiler().compileUi(uifile, pyfile) - - if execute: - indenter.write_code(_display_code % winfo) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/enum_map.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/enum_map.py deleted file mode 100644 index 3911940..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/enum_map.py +++ /dev/null @@ -1,496 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -# Map enum member names to fully scoped names. Note that Designer v6.7.0 and -# later use fully scoped enum names so this is only needed for .ui files -# created with older versions. -EnumMap = { - 'Qt::AlignHCenter': 'Qt::AlignmentFlag::AlignHCenter', - 'Qt::AlignJustify': 'Qt::AlignmentFlag::AlignJustify', - 'Qt::AlignLeft': 'Qt::AlignmentFlag::AlignLeft', - 'Qt::AlignRight': 'Qt::AlignmentFlag::AlignRight', - - 'Qt::AlignBaseline': 'Qt::AlignmentFlag::AlignBaseline', - 'Qt::AlignBottom': 'Qt::AlignmentFlag::AlignBottom', - 'Qt::AlignTop': 'Qt::AlignmentFlag::AlignTop', - 'Qt::AlignVCenter': 'Qt::AlignmentFlag::AlignVCenter', - - 'Qt::AlignAbsolute': 'Qt::AlignmentFlag::AlignAbsolute', - 'Qt::AlignLeading': 'Qt::AlignmentFlag::AlignLeading', - 'Qt::AlignTrailing': 'Qt::AlignmentFlag::AlignTrailing', - - 'Qt::AlignCenter': 'Qt::AlignmentFlag::AlignCenter', - - 'Qt::AlignHorizontal_Mask': 'Qt::AlignmentFlag::AlignHorizontal_Mask', - 'Qt::AlignVertical_Mask': 'Qt::AlignmentFlag::AlignVertical_Mask', - - 'Qt::DownArrow': 'Qt::ArrowType::DownArrow', - 'Qt::LeftArrow': 'Qt::ArrowType::LeftArrow', - 'Qt::NoArrow': 'Qt::ArrowType::NoArrow', - 'Qt::RightArrow': 'Qt::ArrowType::RightArrow', - 'Qt::UpArrow': 'Qt::ArrowType::UpArrow', - - 'Qt::Checked': 'Qt::CheckState::Checked', - 'Qt::PartiallyChecked': 'Qt::CheckState::PartiallyChecked', - 'Qt::Unchecked': 'Qt::CheckState::Unchecked', - - 'Qt::ActionsContextMenu': 'Qt::ContextMenuPolicy::ActionsContextMenu', - 'Qt::CustomContextMenu': 'Qt::ContextMenuPolicy::CustomContextMenu', - 'Qt::DefaultContextMenu': 'Qt::ContextMenuPolicy::DefaultContextMenu', - 'Qt::NoContextMenu': 'Qt::ContextMenuPolicy::NoContextMenu', - 'Qt::PreventContextMenu': 'Qt::ContextMenuPolicy::PreventContextMenu', - - 'Qt::LogicalMoveStyle': 'Qt::CursorMoveStyle::LogicalMoveStyle', - 'Qt::VisualMoveStyle': 'Qt::CursorMoveStyle::VisualMoveStyle', - - 'Qt::Monday': 'Qt::DayOfWeek::Monday', - 'Qt::Tuesday': 'Qt::DayOfWeek::Tuesday', - 'Qt::Wednesday': 'Qt::DayOfWeek::Wednesday', - 'Qt::Thursday': 'Qt::DayOfWeek::Thursday', - 'Qt::Friday': 'Qt::DayOfWeek::Friday', - 'Qt::Saturday': 'Qt::DayOfWeek::Saturday', - 'Qt::Sunday': 'Qt::DayOfWeek::Sunday', - - 'Qt::AllDockWidgetAreas': 'Qt::DockWidgetArea::AllDockWidgetAreas', - 'Qt::LeftDockWidgetArea': 'Qt::DockWidgetArea::LeftDockWidgetArea', - 'Qt::RightDockWidgetArea': 'Qt::DockWidgetArea::RightDockWidgetArea', - 'Qt::TopDockWidgetArea': 'Qt::DockWidgetArea::TopDockWidgetArea', - 'Qt::BottomDockWidgetArea': 'Qt::DockWidgetArea::BottomDockWidgetArea', - 'Qt::NoDockWidgetArea': 'Qt::DockWidgetArea::NoDockWidgetArea', - - 'Qt::ActionMask': 'Qt::DropAction::ActionMask', - 'Qt::CopyAction': 'Qt::DropAction::CopyAction', - 'Qt::IgnoreAction': 'Qt::DropAction::IgnoreAction', - 'Qt::LinkAction': 'Qt::DropAction::LinkAction', - 'Qt::MoveAction': 'Qt::DropAction::MoveAction', - 'Qt::TargetMoveAction': 'Qt::DropAction::TargetMoveAction', - - 'Qt::ClickFocus': 'Qt::FocusPolicy::ClickFocus', - 'Qt::NoFocus': 'Qt::FocusPolicy::NoFocus', - 'Qt::TabFocus': 'Qt::FocusPolicy::TabFocus', - 'Qt::StrongFocus': 'Qt::FocusPolicy::StrongFocus', - 'Qt::WheelFocus': 'Qt::FocusPolicy::WheelFocus', - - 'Qt::ImhDate': 'Qt::InputMethodHint::ImhDate', - 'Qt::ImhDialableCharactersOnly': 'Qt::InputMethodHint::ImhDialableCharactersOnly', - 'Qt::ImhDigitsOnly': 'Qt::InputMethodHint::ImhDigitsOnly', - 'Qt::ImhEmailCharactersOnly': 'Qt::InputMethodHint::ImhEmailCharactersOnly', - 'Qt::ImhExclusiveInputMask': 'Qt::InputMethodHint::ImhExclusiveInputMask', - 'Qt::ImhFormattedNumbersOnly': 'Qt::InputMethodHint::ImhFormattedNumbersOnly', - 'Qt::ImhHiddenText': 'Qt::InputMethodHint::ImhHiddenText', - 'Qt::ImhLatinOnly': 'Qt::InputMethodHint::ImhLatinOnly', - 'Qt::ImhLowercaseOnly': 'Qt::InputMethodHint::ImhLowercaseOnly', - 'Qt::ImhMultiLine': 'Qt::InputMethodHint::ImhMultiLine', - 'Qt::ImhNoAutoUppercase': 'Qt::InputMethodHint::ImhNoAutoUppercase', - 'Qt::ImhNoEditMenu': 'Qt::InputMethodHint::ImhNoEditMenu', - 'Qt::ImhNoPredictiveText': 'Qt::InputMethodHint::ImhNoPredictiveText', - 'Qt::ImhNoTextHandles': 'Qt::InputMethodHint::ImhNoTextHandles', - 'Qt::ImhNone': 'Qt::InputMethodHint::ImhNone', - 'Qt::ImhPreferLatin': 'Qt::InputMethodHint::ImhPreferLatin', - 'Qt::ImhPreferLowercase': 'Qt::InputMethodHint::ImhPreferLowercase', - 'Qt::ImhPreferNumbers': 'Qt::InputMethodHint::ImhPreferNumbers', - 'Qt::ImhPreferUppercase': 'Qt::InputMethodHint::ImhPreferUppercase', - 'Qt::ImhSensitiveData': 'Qt::InputMethodHint::ImhSensitiveData', - 'Qt::ImhTime': 'Qt::InputMethodHint::ImhTime', - 'Qt::ImhUppercaseOnly': 'Qt::InputMethodHint::ImhUppercaseOnly', - 'Qt::ImhUrlCharactersOnly': 'Qt::InputMethodHint::ImhUrlCharactersOnly', - - 'Qt::ItemIsAutoTristate': 'Qt::ItemFlag::ItemIsAutoTristate', - 'Qt::ItemIsDragEnabled': 'Qt::ItemFlag::ItemIsDragEnabled', - 'Qt::ItemIsDropEnabled': 'Qt::ItemFlag::ItemIsDropEnabled', - 'Qt::ItemIsEditable': 'Qt::ItemFlag::ItemIsEditable', - 'Qt::ItemIsEnabled': 'Qt::ItemFlag::ItemIsEnabled', - 'Qt::ItemIsSelectable': 'Qt::ItemFlag::ItemIsSelectable', - 'Qt::ItemIsUserCheckable': 'Qt::ItemFlag::ItemIsUserCheckable', - 'Qt::ItemIsUserTristate': 'Qt::ItemFlag::ItemIsUserTristate', - 'Qt::ItemNeverHasChildren': 'Qt::ItemFlag::ItemNeverHasChildren', - 'Qt::NoItemFlags': 'Qt::ItemFlag::NoItemFlags', - - 'Qt::ContainsItemBoundingRect': 'Qt::ItemSelectionMode::ContainsItemBoundingRect', - 'Qt::ContainsItemShape': 'Qt::ItemSelectionMode::ContainsItemShape', - 'Qt::IntersectsItemBoundingRect': 'Qt::ItemSelectionMode::IntersectsItemBoundingRect', - 'Qt::IntersectsItemShape': 'Qt::ItemSelectionMode::IntersectsItemShape', - - 'Qt::LayoutDirectionAuto': 'Qt::LayoutDirection::LayoutDirectionAuto', - 'Qt::LeftToRight': 'Qt::LayoutDirection::LeftToRight', - 'Qt::RightToLeft': 'Qt::LayoutDirection::RightToLeft', - - 'Qt::Horizontal': 'Qt::Orientation::Horizontal', - 'Qt::Vertical': 'Qt::Orientation::Vertical', - - 'Qt::CustomDashLine': 'Qt::PenStyle::CustomDashLine', - 'Qt::DashDotDotLine': 'Qt::PenStyle::DashDotDotLine', - 'Qt::DashDotLine': 'Qt::PenStyle::DashDotLine', - 'Qt::DashLine': 'Qt::PenStyle::DashLine', - 'Qt::DotLine': 'Qt::PenStyle::DotLine', - 'Qt::NoPen': 'Qt::PenStyle::NoPen', - 'Qt::SolidLine': 'Qt::PenStyle::SolidLine', - - 'Qt::ScrollBarAlwaysOff': 'Qt::ScrollBarPolicy::ScrollBarAlwaysOff', - 'Qt::ScrollBarAlwaysOn': 'Qt::ScrollBarPolicy::ScrollBarAlwaysOn', - 'Qt::ScrollBarAsNeeded': 'Qt::ScrollBarPolicy::ScrollBarAsNeeded', - - 'Qt::ApplicationShortcut': 'Qt::ShortcutContext::ApplicationShortcut', - 'Qt::WidgetShortcut': 'Qt::ShortcutContext::WidgetShortcut', - 'Qt::WidgetWithChildrenShortcut': 'Qt::ShortcutContext::WidgetWithChildrenShortcut', - 'Qt::WindowShortcut': 'Qt::ShortcutContext::WindowShortcut', - - 'Qt::ElideLeft': 'Qt::TextElideMode::ElideLeft', - 'Qt::ElideRight': 'Qt::TextElideMode::ElideRight', - 'Qt::ElideMiddle': 'Qt::TextElideMode::ElideMiddle', - 'Qt::ElideNone': 'Qt::TextElideMode::ElideNone', - - 'Qt::NoTextInteraction': 'Qt::TextInteractionFlag::NoTextInteraction', - 'Qt::TextSelectableByMouse': 'Qt::TextInteractionFlag::TextSelectableByMouse', - 'Qt::TextSelectableByKeyboard': 'Qt::TextInteractionFlag::TextSelectableByKeyboard', - 'Qt::LinksAccessibleByMouse': 'Qt::TextInteractionFlag::LinksAccessibleByMouse', - 'Qt::LinksAccessibleByKeyboard': 'Qt::TextInteractionFlag::LinksAccessibleByKeyboard', - 'Qt::TextEditable': 'Qt::TextInteractionFlag::TextEditable', - 'Qt::TextEditorInteraction': 'Qt::TextInteractionFlag::TextEditorInteraction', - 'Qt::TextBrowserInteraction': 'Qt::TextInteractionFlag::TextBrowserInteraction', - - 'Qt::AutoText': 'Qt::TextFormat::AutoText', - 'Qt::MarkdownText': 'Qt::TextFormat::MarkdownText', - 'Qt::PlainText': 'Qt::TextFormat::PlainText', - 'Qt::RichText': 'Qt::TextFormat::RichText', - - 'Qt::LocalTime': 'Qt::TimeSpec::LocalTime', - 'Qt::OffsetFromUTC': 'Qt::TimeSpec::OffsetFromUTC', - 'Qt::TimeZone': 'Qt::TimeSpec::TimeZone', - 'Qt::UTC': 'Qt::TimeSpec::UTC', - - 'Qt::LeftToolBarArea': 'Qt::ToolBarArea::LeftToolBarArea', - 'Qt::RightToolBarArea': 'Qt::ToolBarArea::RightToolBarArea', - 'Qt::TopToolBarArea': 'Qt::ToolBarArea::TopToolBarArea', - 'Qt::BottomToolBarArea': 'Qt::ToolBarArea::BottomToolBarArea', - 'Qt::AllToolBarAreas': 'Qt::ToolBarArea::AllToolBarAreas', - 'Qt::NoToolBarArea': 'Qt::ToolBarArea::NoToolBarArea', - - 'Qt::ToolButtonFollowStyle': 'Qt::ToolButtonStyle::ToolButtonFollowStyle', - 'Qt::ToolButtonIconOnly': 'Qt::ToolButtonStyle::ToolButtonIconOnly', - 'Qt::ToolButtonTextBesideIcon': 'Qt::ToolButtonStyle::ToolButtonTextBesideIcon', - 'Qt::ToolButtonTextOnly': 'Qt::ToolButtonStyle::ToolButtonTextOnly', - 'Qt::ToolButtonTextUnderIcon': 'Qt::ToolButtonStyle::ToolButtonTextUnderIcon', - - 'Qt::ApplicationModal': 'Qt::WindowModality::ApplicationModal', - 'Qt::NonModal': 'Qt::WindowModality::NonModal', - 'Qt::WindowModal': 'Qt::WindowModality::WindowModal', - - 'QAbstractItemView::NoDragDrop': 'QAbstractItemView::DragDropMode::NoDragDrop', - 'QAbstractItemView::DragOnly': 'QAbstractItemView::DragDropMode::DragOnly', - 'QAbstractItemView::DropOnly': 'QAbstractItemView::DragDropMode::DropOnly', - 'QAbstractItemView::DragDrop': 'QAbstractItemView::DragDropMode::DragDrop', - 'QAbstractItemView::InternalMove': 'QAbstractItemView::DragDropMode::InternalMove', - - 'QAbstractItemView::NoEditTriggers': 'QAbstractItemView::EditTrigger::NoEditTriggers', - 'QAbstractItemView::CurrentChanged': 'QAbstractItemView::EditTrigger::CurrentChanged', - 'QAbstractItemView::DoubleClicked': 'QAbstractItemView::EditTrigger::DoubleClicked', - 'QAbstractItemView::SelectedClicked': 'QAbstractItemView::EditTrigger::SelectedClicked', - 'QAbstractItemView::EditKeyPressed': 'QAbstractItemView::EditTrigger::EditKeyPressed', - 'QAbstractItemView::AnyKeyPressed': 'QAbstractItemView::EditTrigger::AnyKeyPressed', - 'QAbstractItemView::AllEditTriggers': 'QAbstractItemView::EditTrigger::AllEditTriggers', - - 'QAbstractItemView::ScrollPerItem': 'QAbstractItemView::ScrollMode::ScrollPerItem', - 'QAbstractItemView::ScrollPerPixel': 'QAbstractItemView::ScrollMode::ScrollPerPixel', - - 'QAbstractItemView::SelectColumns': 'QAbstractItemView::SelectionBehavior::SelectColumns', - 'QAbstractItemView::SelectItems': 'QAbstractItemView::SelectionBehavior::SelectItems', - 'QAbstractItemView::SelectRows': 'QAbstractItemView::SelectionBehavior::SelectRows', - - 'QAbstractItemView::NoSelection': 'QAbstractItemView::SelectionMode::NoSelection', - 'QAbstractItemView::SingleSelection': 'QAbstractItemView::SelectionMode::SingleSelection', - 'QAbstractItemView::MultiSelection': 'QAbstractItemView::SelectionMode::MultiSelection', - 'QAbstractItemView::ExtendedSelection': 'QAbstractItemView::SelectionMode::ExtendedSelection', - 'QAbstractItemView::ContiguousSelection': 'QAbstractItemView::SelectionMode::ContiguousSelection', - - 'QAbstractScrollArea::AdjustIgnored': 'QAbstractScrollArea::SizeAdjustPolicy::AdjustIgnored', - 'QAbstractScrollArea::AdjustToContents': 'QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents', - 'QAbstractScrollArea::AdjustToContentsOnFirstShow': 'QAbstractScrollArea::SizeAdjustPolicy::AdjustToContentsOnFirstShow', - - 'QAbstractSpinBox::NoButtons': 'QAbstractSpinBox::ButtonSymbols::NoButtons', - 'QAbstractSpinBox::PlusMinus': 'QAbstractSpinBox::ButtonSymbols::PlusMinus', - 'QAbstractSpinBox::UpDownArrows': 'QAbstractSpinBox::ButtonSymbols::UpDownArrows', - - 'QAbstractSpinBox::CorrectToNearestValue': 'QAbstractSpinBox::CorrectionMode::CorrectToNearestValue', - 'QAbstractSpinBox::CorrectToPreviousValue': 'QAbstractSpinBox::CorrectionMode::CorrectToPreviousValue', - - 'QAbstractSpinBox::AdaptiveDecimalStepType': 'QAbstractSpinBox::StepType::AdaptiveDecimalStepType', - 'QAbstractSpinBox::DefaultStepType': 'QAbstractSpinBox::StepType::DefaultStepType', - - 'QAction::NoRole': 'QAction::MenuRole::NoRole', - 'QAction::TextHeuristicRole': 'QAction::MenuRole::TextHeuristicRole', - 'QAction::ApplicationSpecificRole': 'QAction::MenuRole::ApplicationSpecificRole', - 'QAction::AboutQtRole': 'QAction::MenuRole::AboutQtRole', - 'QAction::AboutRole': 'QAction::MenuRole::AboutRole', - 'QAction::PreferencesRole': 'QAction::MenuRole::PreferencesRole', - 'QAction::QuitRole': 'QAction::MenuRole::QuitRole', - - 'QCalendarWidget::LongDayNames': 'QCalendarWidget::HorizontalHeaderFormat::LongDayNames', - 'QCalendarWidget::NoHorizontalHeader': 'QCalendarWidget::HorizontalHeaderFormat::NoHorizontalHeader', - 'QCalendarWidget::ShortDayNames': 'QCalendarWidget::HorizontalHeaderFormat::ShortDayNames', - 'QCalendarWidget::SingleLetterDayNames': 'QCalendarWidget::HorizontalHeaderFormat::SingleLetterDayNames', - - 'QCalendarWidget::NoSelection': 'QCalendarWidget::SelectionMode::NoSelection', - 'QCalendarWidget::SingleSelection': 'QCalendarWidget::SelectionMode::SingleSelection', - - 'QCalendarWidget::ISOWeekNumbers': 'QCalendarWidget::VerticalHeaderFormat::ISOWeekNumbers', - 'QCalendarWidget::NoVerticalHeader': 'QCalendarWidget::VerticalHeaderFormat::NoVerticalHeader', - - 'QComboBox::InsertAfterCurrent': 'QComboBox::InsertPolicy::InsertAfterCurrent', - 'QComboBox::InsertAlphabetically': 'QComboBox::InsertPolicy::InsertAlphabetically', - 'QComboBox::InsertAtBottom': 'QComboBox::InsertPolicy::InsertAtBottom', - 'QComboBox::InsertAtCurrent': 'QComboBox::InsertPolicy::InsertAtCurrent', - 'QComboBox::InsertAtTop': 'QComboBox::InsertPolicy::InsertAtTop', - 'QComboBox::InsertBeforeCurrent': 'QComboBox::InsertPolicy::InsertBeforeCurrent', - 'QComboBox::NoInsert': 'QComboBox::InsertPolicy::NoInsert', - - 'QComboBox::AdjustToContents': 'QComboBox::SizeAdjustPolicy::AdjustToContents', - 'QComboBox::AdjustToContentsOnFirstShow': 'QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow', - 'QComboBox::AdjustToMinimumContentsLengthWithIcon': 'QComboBox::SizeAdjustPolicy::AdjustToMinimumContentsLengthWithIcon', - - 'QDateTimeEdit::NoSection': 'QDateTimeEdit::Section::NoSection', - 'QDateTimeEdit::AmPmSection': 'QDateTimeEdit::Section::AmPmSection', - 'QDateTimeEdit::MSecSection': 'QDateTimeEdit::Section::MSecSection', - 'QDateTimeEdit::SecondSection': 'QDateTimeEdit::Section::SecondSection', - 'QDateTimeEdit::MinuteSection': 'QDateTimeEdit::Section::MinuteSection', - 'QDateTimeEdit::HourSection': 'QDateTimeEdit::Section::HourSection', - 'QDateTimeEdit::DaySection': 'QDateTimeEdit::Section::DaySection', - 'QDateTimeEdit::MonthSection': 'QDateTimeEdit::Section::MonthSection', - 'QDateTimeEdit::YearSection': 'QDateTimeEdit::Section::YearSection', - - 'QDialogButtonBox::NoButton': 'QDialogButtonBox::StandardButton::NoButton', - 'QDialogButtonBox::Ok': 'QDialogButtonBox::StandardButton::Ok', - 'QDialogButtonBox::Save': 'QDialogButtonBox::StandardButton::Save', - 'QDialogButtonBox::SaveAll': 'QDialogButtonBox::StandardButton::SaveAll', - 'QDialogButtonBox::Open': 'QDialogButtonBox::StandardButton::Open', - 'QDialogButtonBox::Yes': 'QDialogButtonBox::StandardButton::Yes', - 'QDialogButtonBox::YesToAll': 'QDialogButtonBox::StandardButton::YesToAll', - 'QDialogButtonBox::No': 'QDialogButtonBox::StandardButton::No', - 'QDialogButtonBox::NoToAll': 'QDialogButtonBox::StandardButton::NoToAll', - 'QDialogButtonBox::Abort': 'QDialogButtonBox::StandardButton::Abort', - 'QDialogButtonBox::Retry': 'QDialogButtonBox::StandardButton::Retry', - 'QDialogButtonBox::Ignore': 'QDialogButtonBox::StandardButton::Ignore', - 'QDialogButtonBox::Close': 'QDialogButtonBox::StandardButton::Close', - 'QDialogButtonBox::Cancel': 'QDialogButtonBox::StandardButton::Cancel', - 'QDialogButtonBox::Discard': 'QDialogButtonBox::StandardButton::Discard', - 'QDialogButtonBox::Help': 'QDialogButtonBox::StandardButton::Help', - 'QDialogButtonBox::Apply': 'QDialogButtonBox::StandardButton::Apply', - 'QDialogButtonBox::Reset': 'QDialogButtonBox::StandardButton::Reset', - 'QDialogButtonBox::RestoreDefaults': 'QDialogButtonBox::StandardButton::RestoreDefaults', - - 'QDockWidget::DockWidgetClosable': 'QDockWidget::DockWidgetFeature::DockWidgetClosable', - 'QDockWidget::DockWidgetFloatable': 'QDockWidget::DockWidgetFeature::DockWidgetFloatable', - 'QDockWidget::DockWidgetMovable': 'QDockWidget::DockWidgetFeature::DockWidgetMovable', - 'QDockWidget::DockWidgetVerticalTitleBar': 'QDockWidget::DockWidgetFeature::DockWidgetVerticalTitleBar', - 'QDockWidget::NoDockWidgetFeatures': 'QDockWidget::DockWidgetFeature::NoDockWidgetFeatures', - - 'QFontComboBox::AllFonts': 'QFontComboBox::FontFilter::AllFonts', - 'QFontComboBox::MonospacedFonts': 'QFontComboBox::FontFilter::MonospacedFonts', - 'QFontComboBox::NonScalableFonts': 'QFontComboBox::FontFilter::NonScalableFonts', - 'QFontComboBox::ProportionalFonts': 'QFontComboBox::FontFilter::ProportionalFonts', - 'QFontComboBox::ScalableFonts': 'QFontComboBox::FontFilter::ScalableFonts', - - 'QFontDatabase::Any': 'QFontDatabase::WritingSystem::Any', - 'QFontDatabase::Latin': 'QFontDatabase::WritingSystem::Latin', - 'QFontDatabase::Greek': 'QFontDatabase::WritingSystem::Greek', - 'QFontDatabase::Cyrillic': 'QFontDatabase::WritingSystem::Cyrillic', - 'QFontDatabase::Armenian': 'QFontDatabase::WritingSystem::Armenian', - 'QFontDatabase::Hebrew': 'QFontDatabase::WritingSystem::Hebrew', - 'QFontDatabase::Arabic': 'QFontDatabase::WritingSystem::Arabic', - 'QFontDatabase::Syriac': 'QFontDatabase::WritingSystem::Syriac', - 'QFontDatabase::Thaana': 'QFontDatabase::WritingSystem::Thaana', - 'QFontDatabase::Devanagari': 'QFontDatabase::WritingSystem::Devanagari', - 'QFontDatabase::Bengali': 'QFontDatabase::WritingSystem::Bengali', - 'QFontDatabase::Gurmukhi': 'QFontDatabase::WritingSystem::Gurmukhi', - 'QFontDatabase::Gujarati': 'QFontDatabase::WritingSystem::Gujarati', - 'QFontDatabase::Oriya': 'QFontDatabase::WritingSystem::Oriya', - 'QFontDatabase::Tamil': 'QFontDatabase::WritingSystem::Tamil', - 'QFontDatabase::Telugu': 'QFontDatabase::WritingSystem::Telugu', - 'QFontDatabase::Kannada': 'QFontDatabase::WritingSystem::Kannada', - 'QFontDatabase::Malayalam': 'QFontDatabase::WritingSystem::Malayalam', - 'QFontDatabase::Sinhala': 'QFontDatabase::WritingSystem::Sinhala', - 'QFontDatabase::Thai': 'QFontDatabase::WritingSystem::Thai', - 'QFontDatabase::Lao': 'QFontDatabase::WritingSystem::Lao', - 'QFontDatabase::Tibetan': 'QFontDatabase::WritingSystem::Tibetan', - 'QFontDatabase::Myanmar': 'QFontDatabase::WritingSystem::Myanmar', - 'QFontDatabase::Georgian': 'QFontDatabase::WritingSystem::Georgian', - 'QFontDatabase::Khmer': 'QFontDatabase::WritingSystem::Khmer', - 'QFontDatabase::SimplifiedChinese': 'QFontDatabase::WritingSystem::SimplifiedChinese', - 'QFontDatabase::TraditionalChinese': 'QFontDatabase::WritingSystem::TraditionalChinese', - 'QFontDatabase::Japanese': 'QFontDatabase::WritingSystem::Japanese', - 'QFontDatabase::Korean': 'QFontDatabase::WritingSystem::Korean', - 'QFontDatabase::Vietnamese': 'QFontDatabase::WritingSystem::Vietnamese', - 'QFontDatabase::Other': 'QFontDatabase::WritingSystem::Other', - 'QFontDatabase::Symbol': 'QFontDatabase::WritingSystem::Symbol', - 'QFontDatabase::Ogham': 'QFontDatabase::WritingSystem::Ogham', - 'QFontDatabase::Runic': 'QFontDatabase::WritingSystem::Runic', - 'QFontDatabase::Nko': 'QFontDatabase::WritingSystem::Nko', - - 'QFormLayout::AllNonFixedFieldsGrow': 'QFormLayout::FieldGrowthPolicy::AllNonFixedFieldsGrow', - 'QFormLayout::ExpandingFieldsGrow': 'QFormLayout::FieldGrowthPolicy::ExpandingFieldsGrow', - 'QFormLayout::FieldsStayAtSizeHint': 'QFormLayout::FieldGrowthPolicy::FieldsStayAtSizeHint', - - 'QFormLayout::DontWrapRows': 'QFormLayout::RowWrapPolicy::DontWrapRows', - 'QFormLayout::WrapLongRows': 'QFormLayout::RowWrapPolicy::WrapLongRows', - 'QFormLayout::WrapAllRows': 'QFormLayout::RowWrapPolicy::WrapAllRows', - - 'QFrame::Box': 'QFrame::Shape::Box', - 'QFrame::HLine': 'QFrame::Shape::HLine', - 'QFrame::NoFrame': 'QFrame::Shape::NoFrame', - 'QFrame::Panel': 'QFrame::Shape::Panel', - 'QFrame::StyledPanel': 'QFrame::Shape::StyledPanel', - 'QFrame::VLine': 'QFrame::Shape::VLine', - 'QFrame::WinPanel': 'QFrame::Shape::WinPanel', - - 'QFrame::Plain': 'QFrame::Shadow::Plain', - 'QFrame::Raised': 'QFrame::Shadow::Raised', - 'QFrame::Sunken': 'QFrame::Shadow::Sunken', - - 'QGraphicsView::CacheNone': 'QGraphicsView::CacheMode::CacheNone', - 'QGraphicsView::CacheBackground': 'QGraphicsView::CacheMode::CacheBackground', - - 'QGraphicsView::DontAdjustForAntialiasing': 'QGraphicsView::OptimizationFlags::DontAdjustForAntialiasing', - 'QGraphicsView::DontSavePainterState': 'QGraphicsView::OptimizationFlags::DontSavePainterState', - - 'QGraphicsView::NoAnchor': 'QGraphicsView::ViewportAnchor::NoAnchor', - 'QGraphicsView::AnchorViewCenter': 'QGraphicsView::ViewportAnchor::AnchorViewCenter', - 'QGraphicsView::AnchorUnderMouse': 'QGraphicsView::ViewportAnchor::AnchorUnderMouse', - - 'QGraphicsView::BoundingRectViewportUpdate': 'QGraphicsView::ViewportUpdateMode::BoundingRectViewportUpdate', - 'QGraphicsView::FullViewportUpdate': 'QGraphicsView::ViewportUpdateMode::FullViewportUpdate', - 'QGraphicsView::MinimalViewportUpdate': 'QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate', - 'QGraphicsView::NoViewportUpdate': 'QGraphicsView::ViewportUpdateMode::NoViewportUpdate', - 'QGraphicsView::SmartViewportUpdate': 'QGraphicsView::ViewportUpdateMode::SmartViewportUpdate', - - 'QLayout::SetDefaultConstraint': 'QLayout::SizeConstraint::SetDefaultConstraint', - 'QLayout::SetFixedSize': 'QLayout::SizeConstraint::SetFixedSize', - 'QLayout::SetMaximumSize': 'QLayout::SizeConstraint::SetMaximumSize', - 'QLayout::SetMinAndMaxSize': 'QLayout::SizeConstraint::SetMinAndMaxSize', - 'QLayout::SetMinimumSize': 'QLayout::SizeConstraint::SetMinimumSize', - 'QLayout::SetNoConstraint': 'QLayout::SizeConstraint::SetNoConstraint', - - 'QLCDNumber::Bin': 'QLCDNumber::Mode::Bin', - 'QLCDNumber::Dec': 'QLCDNumber::Mode::Dec', - 'QLCDNumber::Hex': 'QLCDNumber::Mode::Hex', - 'QLCDNumber::Oct': 'QLCDNumber::Mode::Oct', - - 'QLCDNumber::Filled': 'QLCDNumber::SegmentStyle::Filled', - 'QLCDNumber::Flat': 'QLCDNumber::SegmentStyle::Flat', - 'QLCDNumber::Outline': 'QLCDNumber::SegmentStyle::Outline', - - 'QLineEdit::NoEcho': 'QLineEdit::EchoMode::NoEcho', - 'QLineEdit::Normal': 'QLineEdit::EchoMode::Normal', - 'QLineEdit::Password': 'QLineEdit::EchoMode::Password', - 'QLineEdit::PasswordEchoOnEdit': 'QLineEdit::EchoMode::PasswordEchoOnEdit', - - 'QListView::LeftToRight': 'QListView::Flow::LeftToRight', - 'QListView::TopToBottom': 'QListView::Flow::TopToBottom', - - 'QListView::Batched': 'QListView::LayoutMode::Batched', - 'QListView::SinglePass': 'QListView::LayoutMode::SinglePass', - - 'QListView::Free': 'QListView::Movement::Free', - 'QListView::Snap': 'QListView::Movement::Snap', - 'QListView::Static': 'QListView::Movement::Static', - - 'QListView::Adjust': 'QListView::ResizeMode::Adjust', - 'QListView::Fixed': 'QListView::ResizeMode::Fixed', - - 'QListView::IconMode': 'QListView::ViewMode::IconMode', - 'QListView::ListMode': 'QListView::ViewMode::ListMode', - - 'QMdiArea::SubWindowView': 'QMdiArea::ViewMode::SubWindowView', - 'QMdiArea::TabbedView': 'QMdiArea::ViewMode::TabbedView', - - 'QMdiArea::ActivationHistoryOrder': 'QMdiArea::WindowOrder::ActivationHistoryOrder', - 'QMdiArea::CreationOrder': 'QMdiArea::WindowOrder::CreationOrder', - 'QMdiArea::StackingOrder': 'QMdiArea::WindowOrder::StackingOrder', - - 'QPainter::Antialiasing': 'QPainter::RenderHint::Antialiasing', - 'QPainter::LosslessImageRendering': 'QPainter::RenderHint::LosslessImageRendering', - 'QPainter::SmoothPixmapTransform': 'QPainter::RenderHint::SmoothPixmapTransform', - 'QPainter::TextAntialiasing': 'QPainter::RenderHint::TextAntialiasing', - - 'QPlainTextEdit::NoWrap': 'QPlainTextEdit::LineWrapMode::NoWrap', - 'QPlainTextEdit::WidgetWidth': 'QPlainTextEdit::LineWrapMode::WidgetWidth', - - 'QProgressBar::BottomToTop': 'QProgressBar::Direction::BottomToTop', - 'QProgressBar::TopToBottom': 'QProgressBar::Direction::TopToBottom', - - 'QQuickWidget::SizeRootObjectToView': 'QQuickWidget::ResizeMode::SizeRootObjectToView', - 'QQuickWidget::SizeViewToRootObject': 'QQuickWidget::ResizeMode::SizeViewToRootObject', - - 'QSizePolicy::Fixed': 'QSizePolicy::Policy::Fixed', - 'QSizePolicy::Minimum': 'QSizePolicy::Policy::Minimum', - 'QSizePolicy::Maximum': 'QSizePolicy::Policy::Maximum', - 'QSizePolicy::Preferred': 'QSizePolicy::Policy::Preferred', - 'QSizePolicy::MinimumExpanding': 'QSizePolicy::Policy::MinimumExpanding', - 'QSizePolicy::Expanding': 'QSizePolicy::Policy::Expanding', - 'QSizePolicy::Ignored': 'QSizePolicy::Policy::Ignored', - - 'QSlider::NoTicks': 'QSlider::TickPosition::NoTicks', - 'QSlider::TicksAbove': 'QSlider::TickPosition::TicksAbove', - 'QSlider::TicksBelow': 'QSlider::TickPosition::TicksBelow', - 'QSlider::TicksBothSides': 'QSlider::TickPosition::TicksBothSides', - 'QSlider::TicksLeft': 'QSlider::TickPosition::TicksLeft', - 'QSlider::TicksRight': 'QSlider::TickPosition::TicksRight', - - 'QTabWidget::North': 'QTabWidget::TabPosition::North', - 'QTabWidget::South': 'QTabWidget::TabPosition::South', - 'QTabWidget::West': 'QTabWidget::TabPosition::West', - 'QTabWidget::East': 'QTabWidget::TabPosition::East', - - 'QTabWidget::Rounded': 'QTabWidget::TabShape::Rounded', - 'QTabWidget::Triangular': 'QTabWidget::TabShape::Triangular', - - 'QTextEdit::AutoAll': 'QTextEdit::AutoFormattingFlag::AutoAll', - 'QTextEdit::AutoBulletList': 'QTextEdit::AutoFormattingFlag::AutoBulletList', - 'QTextEdit::AutoNone': 'QTextEdit::AutoFormattingFlag::AutoNone', - - 'QTextEdit::FixedColumnWidth': 'QTextEdit::LineWrapMode::FixedColumnWidth', - 'QTextEdit::FixedPixelWidth': 'QTextEdit::LineWrapMode::FixedPixelWidth', - 'QTextEdit::NoWrap': 'QTextEdit::LineWrapMode::NoWrap', - 'QTextEdit::WidgetWidth': 'QTextEdit::LineWrapMode::WidgetWidth', - - 'QToolButton::DelayedPopup': 'QToolButton::ToolButtonPopupMode::DelayedPopup', - 'QToolButton::InstantPopup': 'QToolButton::ToolButtonPopupMode::InstantPopup', - 'QToolButton::MenuButtonPopup': 'QToolButton::ToolButtonPopupMode::MenuButtonPopup', - - 'QWizard::CancelButtonOnLeft': 'QWizard::WizardOption::CancelButtonOnLeft', - 'QWizard::DisabledBackButtonOnLastPage': 'QWizard::WizardOption::DisabledBackButtonOnLastPage', - 'QWizard::ExtendedWatermarkPixmap': 'QWizard::WizardOption::ExtendedWatermarkPixmap', - 'QWizard::HaveCustomButton1': 'QWizard::WizardOption::HaveCustomButton1', - 'QWizard::HaveCustomButton2': 'QWizard::WizardOption::HaveCustomButton2', - 'QWizard::HaveCustomButton3': 'QWizard::WizardOption::HaveCustomButton3', - 'QWizard::HaveFinishButtonOnEarlyPages': 'QWizard::WizardOption::HaveFinishButtonOnEarlyPages', - 'QWizard::HaveHelpButton': 'QWizard::WizardOption::HaveHelpButton', - 'QWizard::HaveNextButtonOnLastPage': 'QWizard::WizardOption::HaveNextButtonOnLastPage', - 'QWizard::HelpButtonOnRight': 'QWizard::WizardOption::HelpButtonOnRight', - 'QWizard::IgnoreSubTitles': 'QWizard::WizardOption::IgnoreSubTitles', - 'QWizard::IndependentPages': 'QWizard::WizardOption::IndependentPages', - 'QWizard::NoBackButtonOnLastPage': 'QWizard::WizardOption::NoBackButtonOnLastPage', - 'QWizard::NoBackButtonOnStartPage': 'QWizard::WizardOption::NoBackButtonOnStartPage', - 'QWizard::NoCancelButton': 'QWizard::WizardOption::NoCancelButton', - 'QWizard::NoCancelButtonOnLastPage': 'QWizard::WizardOption::NoCancelButtonOnLastPage', - 'QWizard::NoDefaultButton': 'QWizard::WizardOption::NoDefaultButton', - - 'QWizard::AeroStyle': 'QWizard::WizardStyle::AeroStyle', - 'QWizard::ClassicStyle': 'QWizard::WizardStyle::ClassicStyle', - 'QWizard::MacStyle': 'QWizard::WizardStyle::MacStyle', - 'QWizard::ModernStyle': 'QWizard::WizardStyle::ModernStyle', -} diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/exceptions.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/exceptions.py deleted file mode 100644 index e9244b9..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/exceptions.py +++ /dev/null @@ -1,70 +0,0 @@ -############################################################################# -## -## Copyright (C) 2020 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -class NoSuchClassError(Exception): - def __str__(self): - return "Unknown C++ class: %s" % self.args[0] - - -class NoSuchWidgetError(Exception): - def __str__(self): - return "Unknown Qt widget: %s" % self.args[0] - - -class UIFileException(Exception): - """ An exception pertaining to a .ui file. """ - - def __init__(self, ui_file, message, detail=''): - """ Initialise the exception. """ - - text = '{}: {}'.format(ui_file, message) - - if detail: - text += ': {}'.format(detail) - - super().__init__(text) - - -class UnsupportedPropertyError(Exception): - pass - - -class WidgetPluginError(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/icon_cache.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/icon_cache.py deleted file mode 100644 index e753b6d..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/icon_cache.py +++ /dev/null @@ -1,159 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -import os.path - - -class IconCache(object): - """Maintain a cache of icons. If an icon is used more than once by a GUI - then ensure that only one copy is created. - """ - - def __init__(self, object_factory, qtgui_module): - """Initialise the cache.""" - - self._object_factory = object_factory - self._qtgui_module = qtgui_module - self._base_dir = '' - self._cache = [] - - def set_base_dir(self, base_dir): - """ Set the base directory to be used for all relative filenames. """ - - self._base_dir = base_dir - - def get_icon(self, iconset): - """Return an icon described by the given iconset tag.""" - - # Handle a themed icon. - theme = iconset.attrib.get('theme') - if theme is not None: - return self._object_factory.createQtObject('QIcon.fromTheme', - 'icon', ctor_args=(self._object_factory.asString(theme), ), - is_attribute=False) - - # Handle an empty iconset property. - if iconset.text is None: - return None - - iset = _IconSet(iconset, self._base_dir) - - try: - idx = self._cache.index(iset) - except ValueError: - idx = -1 - - if idx >= 0: - # Return the icon from the cache. - iset = self._cache[idx] - else: - # Follow uic's naming convention. - name = 'icon' - idx = len(self._cache) - - if idx > 0: - name += str(idx) - - icon = self._object_factory.createQtObject('QIcon', name, - is_attribute=False) - iset.set_icon(icon, self._qtgui_module) - self._cache.append(iset) - - return iset.icon - - -class _IconSet(object): - """An icon set, ie. the mode and state and the pixmap used for each.""" - - def __init__(self, iconset, base_dir): - """Initialise the icon set from an XML tag.""" - - # Set the pre-Qt v4.4 fallback (ie. with no roles). - self._fallback = self._file_name(iconset.text, base_dir) - self._use_fallback = True - - # Parse the icon set. - self._roles = {} - - for i in iconset: - file_name = i.text - if file_name is not None: - file_name = self._file_name(file_name, base_dir) - - self._roles[i.tag] = file_name - self._use_fallback = False - - # There is no real icon yet. - self.icon = None - - @staticmethod - def _file_name(fname, base_dir): - """ Convert a relative filename if we have a base directory. """ - - fname = fname.replace("\\", "\\\\") - - if base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): - fname = os.path.join(base_dir, fname) - - return fname - - def set_icon(self, icon, qtgui_module): - """Save the icon and set its attributes.""" - - if self._use_fallback: - icon.addFile(self._fallback) - else: - for role, pixmap in self._roles.items(): - if role.endswith("off"): - mode = role[:-3] - state = qtgui_module.QIcon.State.Off - elif role.endswith("on"): - mode = role[:-2] - state = qtgui_module.QIcon.State.On - else: - continue - - mode = getattr(qtgui_module.QIcon.Mode, mode.title()) - - if pixmap: - icon.addPixmap(qtgui_module.QPixmap(pixmap), mode, state) - else: - icon.addPixmap(qtgui_module.QPixmap(), mode, state) - - self.icon = icon - - def __eq__(self, other): - """Compare two icon sets for equality.""" - - if not isinstance(other, type(self)): - return NotImplemented - - if self._use_fallback: - if other._use_fallback: - return self._fallback == other._fallback - - return False - - if other._use_fallback: - return False - - return self._roles == other._roles diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/load_ui.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/load_ui.py deleted file mode 100644 index fd0dac7..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/load_ui.py +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) 2020 Riverbank Computing Limited. -# Copyright (c) 2006 Thorsten Marek. -# All right reserved. -# -# This file is part of PyQt. -# -# You may use this file under the terms of the GPL v3 or the revised BSD -# license as follows: -# -# "Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Riverbank Computing Limited nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - -def loadUiType(uifile): - """loadUiType(uifile) -> (form class, base class) - - Load a Qt Designer .ui file and return the generated form class and the Qt - base class. - - uifile is a file name or file-like object containing the .ui file. - """ - - import io - import sys - - from PyQt6 import QtWidgets - - from .Compiler import compiler - - code_string = io.StringIO() - winfo = compiler.UICompiler().compileUi(uifile, code_string) - - ui_globals = {} - exec(code_string.getvalue(), ui_globals) - - uiclass = winfo["uiclass"] - baseclass = winfo["baseclass"] - - # Assume that the base class is a custom class exposed in the globals. - ui_base = ui_globals.get(baseclass) - if ui_base is None: - # Otherwise assume it is in the QtWidgets module. - ui_base = getattr(QtWidgets, baseclass) - - return (ui_globals[uiclass], ui_base) - - -def loadUi(uifile, baseinstance=None, package=''): - """loadUi(uifile, baseinstance=None, package='') -> widget - - Load a Qt Designer .ui file and return an instance of the user interface. - - uifile is a file name or file-like object containing the .ui file. - baseinstance is an optional instance of the Qt base class. If specified - then the user interface is created in it. Otherwise a new instance of the - base class is automatically created. - package is the optional package which is used as the base for any relative - imports of custom widgets. - """ - - from .Loader.loader import DynamicUILoader - - return DynamicUILoader(package).loadUi(uifile, baseinstance) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/objcreator.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/objcreator.py deleted file mode 100644 index 13696de..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/objcreator.py +++ /dev/null @@ -1,165 +0,0 @@ -############################################################################# -## -## Copyright (C) 2015 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -import os.path - -from .exceptions import NoSuchWidgetError, WidgetPluginError - - -# The list of directories that are searched for widget plugins. This is -# exposed as part of the API. -widgetPluginPath = [os.path.join(os.path.dirname(__file__), 'widget-plugins')] - - -MATCH = True -NO_MATCH = False -MODULE = 0 -CW_FILTER = 1 - - -class QObjectCreator(object): - def __init__(self, creatorPolicy): - self._cpolicy = creatorPolicy - - self._cwFilters = [] - self._modules = self._cpolicy.createQtGuiWidgetsWrappers() - - # Get the optional plugins. - for plugindir in widgetPluginPath: - try: - plugins = os.listdir(plugindir) - except: - plugins = [] - - for filename in plugins: - if not filename.endswith('.py'): - continue - - filename = os.path.join(plugindir, filename) - - plugin_globals = { - "MODULE": MODULE, - "CW_FILTER": CW_FILTER, - "MATCH": MATCH, - "NO_MATCH": NO_MATCH} - - plugin_locals = {} - - if self.load_plugin(filename, plugin_globals, plugin_locals): - pluginType = plugin_locals["pluginType"] - if pluginType == MODULE: - modinfo = plugin_locals["moduleInformation"]() - self._modules.append(self._cpolicy.createModuleWrapper(*modinfo)) - elif pluginType == CW_FILTER: - self._cwFilters.append(plugin_locals["getFilter"]()) - else: - raise WidgetPluginError("Unknown plugin type of %s" % filename) - - self._customWidgets = self._cpolicy.createCustomWidgetLoader() - self._modules.append(self._customWidgets) - - def createQtObject(self, ctor_name, object_name, ctor_args=None, - ctor_kwargs=None, is_attribute=True, no_instantiation=False): - # Handle regular and custom widgets. - ctor = self.findQObjectType(ctor_name) - - if ctor is None: - # Handle scoped names, typically static factory methods. - parts = ctor_name.split('.') - - if len(parts) > 1: - ctor = self.findQObjectType(parts[0]) - - if ctor is not None: - for part in parts[1:]: - ctor = getattr(ctor, part, None) - if ctor is None: - break - - if ctor is None: - raise NoSuchWidgetError(ctor_name) - - return self._cpolicy.instantiate(ctor, object_name, ctor_args, - ctor_kwargs, is_attribute, no_instantiation) - - def invoke(self, rname, method, args=()): - return self._cpolicy.invoke(rname, method, args) - - def findQObjectType(self, classname): - for module in self._modules: - w = module.search(classname) - if w is not None: - return w - return None - - def getSlot(self, obj, slotname): - return self._cpolicy.getSlot(obj, slotname) - - def asString(self, s): - return self._cpolicy.asString(s) - - def addCustomWidget(self, widgetClass, baseClass, module): - for cwFilter in self._cwFilters: - match, result = cwFilter(widgetClass, baseClass, module) - if match: - widgetClass, baseClass, module = result - break - - self._customWidgets.addCustomWidget(widgetClass, baseClass, module) - - @staticmethod - def load_plugin(filename, plugin_globals, plugin_locals): - """ Load the plugin from the given file. Return True if the plugin was - loaded, or False if it wanted to be ignored. Raise an exception if - there was an error. - """ - - plugin = open(filename) - - try: - exec(plugin.read(), plugin_globals, plugin_locals) - except ImportError: - return False - except Exception as e: - raise WidgetPluginError("%s: %s" % (e.__class__, str(e))) - finally: - plugin.close() - - return True diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/properties.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/properties.py deleted file mode 100644 index 9fd0396..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/properties.py +++ /dev/null @@ -1,541 +0,0 @@ -############################################################################# -## -## Copyright (C) 2024 Riverbank Computing Limited. -## Copyright (C) 2006 Thorsten Marek. -## All right reserved. -## -## This file is part of PyQt. -## -## You may use this file under the terms of the GPL v2 or the revised BSD -## license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of the Riverbank Computing Limited nor the names -## of its contributors may be used to endorse or promote products -## derived from this software without specific prior written -## permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -############################################################################# - - -import logging -import os.path -import sys - -from .enum_map import EnumMap -from .exceptions import NoSuchClassError, UnsupportedPropertyError -from .icon_cache import IconCache - - -logger = logging.getLogger(__name__) -DEBUG = logger.debug - - -QtCore = None -QtGui = None -QtWidgets = None - - -def int_list(prop): - return [int(child.text) for child in prop] - -def float_list(prop): - return [float(child.text) for child in prop] - -bool_ = lambda v: v == "true" - -def qfont_style_strategy(v): - return getattr(QtGui.QFont.StyleStrategy, v) - -def needsWidget(func): - func.needsWidget = True - return func - - -# A translation table for converting ASCII lower case to upper case. -_ascii_trans_table = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', - b'ABCDEFGHIJKLMNOPQRSTUVWXYZ') - -def ascii_upper(s): - """ Convert a string to ASCII upper case irrespective of the current - locale. - """ - - return s.translate(_ascii_trans_table) - - -class Properties(object): - def __init__(self, factory, qtcore_module, qtgui_module, qtwidgets_module): - self.factory = factory - - global QtCore, QtGui, QtWidgets - QtCore = qtcore_module - QtGui = qtgui_module - QtWidgets = qtwidgets_module - - self._base_dir = '' - - self.reset() - - def set_base_dir(self, base_dir): - """ Set the base directory to be used for all relative filenames. """ - - self._base_dir = base_dir - self.icon_cache.set_base_dir(base_dir) - - def reset(self): - self.buddies = [] - self.delayed_props = [] - self.icon_cache = IconCache(self.factory, QtGui) - - def _pyEnumMember(self, cpp_name): - if '::' not in cpp_name: - cpp_name = 'Qt::' + cpp_name - - cpp_name = EnumMap.get(cpp_name, cpp_name) - - parts = cpp_name.split('::') - - if parts[0] == 'Qt': - scope = QtCore.Qt - else: - scope = self.factory.findQObjectType(parts[0]) - if scope is None: - raise NoSuchClassError(parts[0]) - - for tail in parts[1:]: - scope = getattr(scope, tail) - - return scope - - def _set(self, prop): - expr = [self._pyEnumMember(v) for v in prop.text.split('|')] - - value = expr[0] - for v in expr[1:]: - value |= v - - return value - - def _enum(self, prop): - return self._pyEnumMember(prop.text) - - def _number(self, prop): - return int(prop.text) - - _UInt = _uInt = _longLong = _uLongLong = _number - - def _double(self, prop): - return float(prop.text) - - def _bool(self, prop): - return prop.text == 'true' - - def _stringlist(self, prop): - return [self._string(p, notr='true') for p in prop] - - def _string(self, prop, notr=None): - text = prop.text - - if text is None: - return "" - - if prop.get('notr', notr) == 'true': - return text - - disambig = prop.get('comment') - - return QtWidgets.QApplication.translate(self.uiname, text, disambig) - - _char = _string - - def _cstring(self, prop): - return str(prop.text) - - def _color(self, prop): - args = int_list(prop) - - # Handle the optional alpha component. - alpha = int(prop.get("alpha", "255")) - - if alpha != 255: - args.append(alpha) - - return QtGui.QColor(*args) - - def _point(self, prop): - return QtCore.QPoint(*int_list(prop)) - - def _pointf(self, prop): - return QtCore.QPointF(*float_list(prop)) - - def _rect(self, prop): - return QtCore.QRect(*int_list(prop)) - - def _rectf(self, prop): - return QtCore.QRectF(*float_list(prop)) - - def _size(self, prop): - return QtCore.QSize(*int_list(prop)) - - def _sizef(self, prop): - return QtCore.QSizeF(*float_list(prop)) - - def _pixmap(self, prop): - if prop.text: - fname = prop.text.replace("\\", "\\\\") - if self._base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): - fname = os.path.join(self._base_dir, fname) - - return QtGui.QPixmap(fname) - - # Don't bother to set the property if the pixmap is empty. - return None - - def _iconset(self, prop): - return self.icon_cache.get_icon(prop) - - def _url(self, prop): - return QtCore.QUrl(prop[0].text) - - def _locale(self, prop): - lang = getattr(QtCore.QLocale.Language, prop.attrib['language']) - country = getattr(QtCore.QLocale.Country, prop.attrib['country']) - return QtCore.QLocale(lang, country) - - def _date(self, prop): - return QtCore.QDate(*int_list(prop)) - - def _datetime(self, prop): - args = int_list(prop) - return QtCore.QDateTime(QtCore.QDate(*args[-3:]), QtCore.QTime(*args[:-3])) - - def _time(self, prop): - return QtCore.QTime(*int_list(prop)) - - def _gradient(self, prop): - name = 'gradient' - - # Create the specific gradient. - gtype = prop.get('type', '') - - if gtype == 'LinearGradient': - startx = float(prop.get('startx')) - starty = float(prop.get('starty')) - endx = float(prop.get('endx')) - endy = float(prop.get('endy')) - gradient = self.factory.createQtObject('QLinearGradient', name, - ctor_args=(startx, starty, endx, endy), is_attribute=False) - - elif gtype == 'ConicalGradient': - centralx = float(prop.get('centralx')) - centraly = float(prop.get('centraly')) - angle = float(prop.get('angle')) - gradient = self.factory.createQtObject('QConicalGradient', name, - ctor_args=(centralx, centraly, angle), is_attribute=False) - - elif gtype == 'RadialGradient': - centralx = float(prop.get('centralx')) - centraly = float(prop.get('centraly')) - radius = float(prop.get('radius')) - focalx = float(prop.get('focalx')) - focaly = float(prop.get('focaly')) - gradient = self.factory.createQtObject('QRadialGradient', name, - ctor_args=(centralx, centraly, radius, focalx, focaly), - is_attribute=False) - - else: - raise UnsupportedPropertyError(prop.tag) - - # Set the common values. - spread = prop.get('spread') - if spread: - gradient.setSpread(getattr(QtGui.QGradient.Spread, spread)) - - cmode = prop.get('coordinatemode') - if cmode: - gradient.setCoordinateMode( - getattr(QtGui.QGradient.CoordinateMode, cmode)) - - # Get the gradient stops. - for gstop in prop: - if gstop.tag != 'gradientstop': - raise UnsupportedPropertyError(gstop.tag) - - position = float(gstop.get('position')) - color = self._color(gstop[0]) - - gradient.setColorAt(position, color) - - return gradient - - def _palette(self, prop): - palette = self.factory.createQtObject('QPalette', 'palette', - is_attribute=False) - - for palette_elem in prop: - sub_palette = getattr(QtGui.QPalette.ColorGroup, - palette_elem.tag.title()) - - for role, color in enumerate(palette_elem): - if color.tag == 'color': - # Handle simple colour descriptions where the role is - # implied by the colour's position. - palette.setColor(sub_palette, - QtGui.QPalette.ColorRole(role), self._color(color)) - elif color.tag == 'colorrole': - role = getattr(QtGui.QPalette.ColorRole, color.get('role')) - brush = self._brush(color[0]) - palette.setBrush(sub_palette, role, brush) - else: - raise UnsupportedPropertyError(color.tag) - - return palette - - def _brush(self, prop): - brushstyle = prop.get('brushstyle') - - if brushstyle in ('LinearGradientPattern', 'ConicalGradientPattern', 'RadialGradientPattern'): - gradient = self._gradient(prop[0]) - brush = self.factory.createQtObject('QBrush', 'brush', - ctor_args=(gradient, ), is_attribute=False) - else: - color = self._color(prop[0]) - brush = self.factory.createQtObject('QBrush', 'brush', - ctor_args=(color, ), is_attribute=False) - - brushstyle = getattr(QtCore.Qt.BrushStyle, brushstyle) - brush.setStyle(brushstyle) - - return brush - - #@needsWidget - def _sizepolicy(self, prop, widget): - values = [int(child.text) for child in prop] - - if len(values) == 2: - # Qt v4.3.0 and later. - horstretch, verstretch = values - hsizetype = getattr(QtWidgets.QSizePolicy.Policy, prop.get('hsizetype')) - vsizetype = getattr(QtWidgets.QSizePolicy.Policy, prop.get('vsizetype')) - else: - hsizetype, vsizetype, horstretch, verstretch = values - hsizetype = QtWidgets.QSizePolicy.Policy(hsizetype) - vsizetype = QtWidgets.QSizePolicy.Policy(vsizetype) - - sizePolicy = self.factory.createQtObject('QSizePolicy', 'sizePolicy', - ctor_args=(hsizetype, vsizetype), is_attribute=False) - sizePolicy.setHorizontalStretch(horstretch) - sizePolicy.setVerticalStretch(verstretch) - sizePolicy.setHeightForWidth(widget.sizePolicy().hasHeightForWidth()) - return sizePolicy - _sizepolicy = needsWidget(_sizepolicy) - - # font needs special handling/conversion of all child elements. - _font_attributes = (("Family", lambda s: s), - ("PointSize", int), - ("Bold", bool_), - ("Italic", bool_), - ("Underline", bool_), - ("Weight", int), - ("StrikeOut", bool_), - ("Kerning", bool_), - ("StyleStrategy", qfont_style_strategy)) - - def _font(self, prop): - newfont = self.factory.createQtObject('QFont', 'font', - is_attribute=False) - for attr, converter in self._font_attributes: - v = prop.findtext("./%s" % (attr.lower(),)) - if v is None: - continue - - getattr(newfont, "set%s" % (attr,))(converter(v)) - return newfont - - def _cursor(self, prop): - return QtGui.QCursor(QtCore.Qt.CursorShape(int(prop.text))) - - def _cursorShape(self, prop): - return QtGui.QCursor(getattr(QtCore.Qt.CursorShape, prop.text)) - - def convert(self, prop, widget=None): - try: - func = getattr(self, "_" + prop[0].tag) - except AttributeError: - raise UnsupportedPropertyError(prop[0].tag) - else: - args = {} - if getattr(func, "needsWidget", False): - assert widget is not None - args["widget"] = widget - - return func(prop[0], **args) - - - def _getChild(self, elem_tag, elem, name, default=None): - for prop in elem.findall(elem_tag): - if prop.attrib["name"] == name: - return self.convert(prop) - else: - return default - - def getProperty(self, elem, name, default=None): - return self._getChild("property", elem, name, default) - - def getAttribute(self, elem, name, default=None): - return self._getChild("attribute", elem, name, default) - - def setProperties(self, widget, elem): - # Lines are sunken unless the frame shadow is explicitly set. - set_sunken = (elem.attrib.get('class') == 'Line') - - for prop in elem.findall('property'): - prop_name = prop.attrib['name'] - DEBUG("setting property %s" % (prop_name,)) - - if prop_name == 'frameShadow': - set_sunken = False - - try: - stdset = bool(int(prop.attrib['stdset'])) - except KeyError: - stdset = True - - if not stdset: - self._setViaSetProperty(widget, prop) - elif hasattr(self, prop_name): - getattr(self, prop_name)(widget, prop) - else: - prop_value = self.convert(prop, widget) - if prop_value is not None: - getattr(widget, 'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]))(prop_value) - - if set_sunken: - widget.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - - # SPECIAL PROPERTIES - # If a property has a well-known value type but needs special, - # context-dependent handling, the default behaviour can be overridden here. - - # Delayed properties will be set after the whole widget tree has been - # populated. - def _delayed_property(self, widget, prop): - prop_value = self.convert(prop) - if prop_value is not None: - prop_name = prop.attrib["name"] - self.delayed_props.append((widget, False, - 'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]), - prop_value)) - - # These properties will be set with a widget.setProperty call rather than - # calling the set function. - def _setViaSetProperty(self, widget, prop): - prop_value = self.convert(prop, widget) - if prop_value is not None: - prop_name = prop.attrib['name'] - - # This appears to be a Designer/uic hack where stdset=0 means that - # the viewport should be used. - if prop[0].tag == 'cursorShape': - widget.viewport().setProperty(prop_name, prop_value) - else: - widget.setProperty(prop_name, prop_value) - - # Ignore the property. - def _ignore(self, widget, prop): - pass - - # Define properties that use the canned handlers. - currentIndex = _delayed_property - currentRow = _delayed_property - - showDropIndicator = _setViaSetProperty - intValue = _setViaSetProperty - value = _setViaSetProperty - - objectName = _ignore - margin = _ignore - leftMargin = _ignore - topMargin = _ignore - rightMargin = _ignore - bottomMargin = _ignore - spacing = _ignore - horizontalSpacing = _ignore - verticalSpacing = _ignore - - # tabSpacing is actually the spacing property of the widget's layout. - def tabSpacing(self, widget, prop): - prop_value = self.convert(prop) - if prop_value is not None: - self.delayed_props.append((widget, True, 'setSpacing', prop_value)) - - # buddy setting has to be done after the whole widget tree has been - # populated. We can't use delay here because we cannot get the actual - # buddy yet. - def buddy(self, widget, prop): - buddy_name = prop[0].text - if buddy_name: - self.buddies.append((widget, buddy_name)) - - # geometry is handled specially if set on the toplevel widget. - def geometry(self, widget, prop): - if widget.objectName() == self.uiname: - geom = int_list(prop[0]) - widget.resize(geom[2], geom[3]) - else: - widget.setGeometry(self._rect(prop[0])) - - def orientation(self, widget, prop): - # If the class is a QFrame, it's a line. - if widget.metaObject().className() == 'QFrame': - # Designer v6.7.0 and later use fully qualified enum names. - widget.setFrameShape( - {'Qt::Orientation::Horizontal': QtWidgets.QFrame.Shape.HLine, - 'Qt::Horizontal': QtWidgets.QFrame.Shape.HLine, - 'Qt::Orientation::Vertical' : QtWidgets.QFrame.Shape.VLine, - 'Qt::Vertical' : QtWidgets.QFrame.Shape.VLine}[prop[0].text]) - else: - widget.setOrientation(self._enum(prop[0])) - - # The isWrapping attribute of QListView is named inconsistently, it should - # be wrapping. - def isWrapping(self, widget, prop): - widget.setWrapping(self.convert(prop)) - - # This is a pseudo-property injected to deal with margins. - def pyuicMargins(self, widget, prop): - widget.setContentsMargins(*int_list(prop)) - - # This is a pseudo-property injected to deal with spacing. - def pyuicSpacing(self, widget, prop): - horiz, vert = int_list(prop) - - if horiz == vert: - widget.setSpacing(horiz) - else: - if horiz >= 0: - widget.setHorizontalSpacing(horiz) - - if vert >= 0: - widget.setVerticalSpacing(vert) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/pyuic.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/pyuic.py deleted file mode 100644 index 9fcb5e1..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/pyuic.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -import os -import sys - - -def main(): - """ Convert a .ui file to a .py file. """ - - import argparse - - from PyQt6.QtCore import PYQT_VERSION_STR - - from .exceptions import (NoSuchClassError, NoSuchWidgetError, - UIFileException) - - # The program name. - PROGRAM_NAME = 'pyuic6' - - # Parse the command line. - parser = argparse.ArgumentParser(prog=PROGRAM_NAME, - description="Python User Interface Compiler") - - parser.add_argument('-V', '--version', action='version', - version=PYQT_VERSION_STR) - parser.add_argument('-p', '--preview', dest='preview', action='store_true', - default=False, - help="show a preview of the UI instead of generating code") - parser.add_argument('-o', '--output', dest='output', default='-', - metavar="FILE", - help="write generated code to FILE instead of stdout") - parser.add_argument('-x', '--execute', dest='execute', action='store_true', - default=False, - help="generate extra code to test and display the class") - parser.add_argument('-d', '--debug', dest='debug', action='store_true', - default=False, help="show debug output") - parser.add_argument('-i', '--indent', dest='indent', action='store', - type=int, default=4, metavar="N", - help="set indent width to N spaces, tab if N is 0 [default: 4]") - parser.add_argument('-w', '--max-workers', dest='max_workers', - action='store', type=int, default=0, metavar="N", - help="use a maximum of N worker processes when converting a directory [default: 0]") - parser.add_argument('ui', - help="the .ui file created by Qt Designer or a directory containing .ui files") - - args = parser.parse_args() - - # Carry out the required action. - if args.debug: - configure_logging() - - exit_status = 1 - - try: - if args.preview: - if os.path.isfile(args.ui): - exit_status = preview(args.ui) - else: - raise UIFileException(args.ui, "must be a file") - else: - generate(args.ui, args.output, args.indent, args.execute, - args.max_workers) - exit_status = 0 - - except IOError as e: - print("Error: {0}: '{1}'".format(e.strerror, e.filename), - file=sys.stderr) - - except SyntaxError as e: - print("Error in input file: {0}".format(e), file=sys.stderr) - - except (NoSuchClassError, NoSuchWidgetError, UIFileException) as e: - print(e, file=sys.stderr) - - except Exception as e: - if args.debug: - import traceback - - traceback.print_exception(*sys.exc_info()) - else: - print("""An unexpected error occurred. -Check that you are using the latest version of {name} and send an error report -to the PyQt mailing list and include the following information: - -- your version of {name} ({version}) -- the .ui file that caused this error -- the debug output of {name} (use the --debug flag when calling {name})""".format(name=PROGRAM_NAME, version=PYQT_VERSION_STR), file=sys.stderr) - - return exit_status - - -def configure_logging(): - """ Configure logging when debug is enabled. """ - - import logging - - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter("%(name)s: %(message)s")) - - logger = logging.getLogger('PyQt6.uic') - logger.addHandler(handler) - logger.setLevel(logging.DEBUG) - - -def generate(ui_file, output, indent, execute, max_workers): - """ Generate the Python code. """ - - from .exceptions import UIFileException - - if os.path.isdir(ui_file): - if output == '-': - map = None - elif os.path.isdir(output) or not os.path.exists(output): - map = lambda d, f: (output, f) - else: - raise UIFileException(output, - f"must be a directory as {ui_file} is a directory") - - from .compile_ui import compileUiDir - - compileUiDir(ui_file, recurse=False, map=map, max_workers=max_workers, - indent=indent, execute=execute) - - elif os.path.isdir(output): - raise UIFileException(output, - f"cannot be a directory unless {ui_file} is a directory") - else: - from .compile_ui import compileUi - - if output == '-': - import io - - pyfile = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') - needs_close = False - else: - pyfile = open(output, 'wt', encoding='utf8') - needs_close = True - - compileUi(ui_file, pyfile, execute, indent) - - if needs_close: - pyfile.close() - - -def preview(ui_file): - """ Preview the .ui file. Return the exit status to be passed back to the - parent process. - """ - - from PyQt6.QtWidgets import QApplication - - from .load_ui import loadUi - - app = QApplication([ui_file]) - - ui = loadUi(ui_file) - ui.show() - - return app.exec() - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/ui_file.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/ui_file.py deleted file mode 100644 index ff51f60..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/ui_file.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (c) 2024 Riverbank Computing Limited -# -# This file is part of PyQt6. -# -# This file may be used under the terms of the GNU General Public License -# version 3.0 as published by the Free Software Foundation and appearing in -# the file LICENSE included in the packaging of this file. Please review the -# following information to ensure the GNU General Public License version 3.0 -# requirements will be met: http://www.gnu.org/copyleft/gpl.html. -# -# If you do not wish to use this file under the terms of the GPL version 3.0 -# then you may purchase a commercial license. For more information contact -# info@riverbankcomputing.com. -# -# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - -from xml.etree import ElementTree - - -class UIFile: - """ Encapsulate a Designer .ui file. """ - - def __init__(self, ui_file): - """ Initialise the .ui file. """ - - # Get the name of the .ui file allowing it to be a file object. - if hasattr(ui_file, 'read'): - self._ui_file = getattr(ui_file, 'name', "unknown") - else: - self._ui_file = ui_file - - try: - document = ElementTree.parse(ui_file) - except Exception as e: - self._raise_exception("invalid Qt Designer file", detail=str(e)) - - # Perform some sanity checks. - root = document.getroot() - - if root.tag != 'ui': - self._raise_exception("not created by Qt Designer") - - version = root.get('version') - if version is None: - self._raise_exception("missing version number") - - if version != '4.0': - self._raise_exception("only Qt Designer files v4.0 are supported") - - # Extract the top-level elements. - self.button_groups = None - self.connections = None - self.custom_widgets = None - self.layout_default = None - self.tab_stops = None - self.widget = None - - self.class_name = None - - for el in root: - if el.tag == 'class': - self.class_name = el.text - elif el.tag == 'buttongroups': - self.button_groups = el - elif el.tag == 'connections': - self.connections = el - elif el.tag == 'customwidgets': - self.custom_widgets = el - elif el.tag == 'layoutdefault': - self.layout_default = el - elif el.tag == 'tabstops': - self.tab_stops = el - elif el.tag == 'widget': - self.widget = el - - # The element was optional in legacy versions of the schema. - if not self.class_name: - if self.widget is not None: - self.class_name = self.widget.get('name') - - if not self.class_name: - self._raise_exception( - "unable to determine the name of the UI class") - - def _raise_exception(self, message, detail=''): - """ Raise a UIFileException. """ - - from .exceptions import UIFileException - - raise UIFileException(self._ui_file, message, detail=detail) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/uiparser.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/uiparser.py deleted file mode 100644 index 4a3d2c3..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/uiparser.py +++ /dev/null @@ -1,1038 +0,0 @@ -# Copyright (c) 2023 Riverbank Computing Limited. -# Copyright (c) 2006 Thorsten Marek. -# All right reserved. -# -# This file is part of PyQt. -# -# You may use this file under the terms of the GPL v3 or the revised BSD -# license as follows: -# -# "Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Riverbank Computing Limited nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - -import sys -import logging -import os -import re -from xml.etree.ElementTree import SubElement - -from .objcreator import QObjectCreator -from .properties import Properties -from .ui_file import UIFile - - -logger = logging.getLogger(__name__) -DEBUG = logger.debug - -QtCore = None -QtGui = None -QtWidgets = None - - -def _parse_alignment(alignment): - """ Convert a C++ alignment to the corresponding flags. """ - - align_flags = None - for qt_align in alignment.split('|'): - _, qt_align = qt_align.split('::') - align = getattr(QtCore.Qt.AlignmentFlag, qt_align) - - if align_flags is None: - align_flags = align - else: - align_flags |= align - - return align_flags - - -def _layout_position(elem): - """ Return either (), (0, alignment), (row, column, rowspan, colspan) or - (row, column, rowspan, colspan, alignment) depending on the type of layout - and its configuration. The result will be suitable to use as arguments to - the layout. - """ - - row = elem.attrib.get('row') - column = elem.attrib.get('column') - alignment = elem.attrib.get('alignment') - - # See if it is a box layout. - if row is None or column is None: - if alignment is None: - return () - - return (0, _parse_alignment(alignment)) - - # It must be a grid or a form layout. - row = int(row) - column = int(column) - - rowspan = int(elem.attrib.get('rowspan', 1)) - colspan = int(elem.attrib.get('colspan', 1)) - - if alignment is None: - return (row, column, rowspan, colspan) - - return (row, column, rowspan, colspan, _parse_alignment(alignment)) - - -class WidgetStack(list): - topwidget = None - def push(self, item): - DEBUG("push %s %s" % (item.metaObject().className(), - item.objectName())) - self.append(item) - if isinstance(item, QtWidgets.QWidget): - self.topwidget = item - - def popLayout(self): - layout = list.pop(self) - DEBUG("pop layout %s %s" % (layout.metaObject().className(), - layout.objectName())) - return layout - - def popWidget(self): - widget = list.pop(self) - DEBUG("pop widget %s %s" % (widget.metaObject().className(), - widget.objectName())) - for item in reversed(self): - if isinstance(item, QtWidgets.QWidget): - self.topwidget = item - break - else: - self.topwidget = None - DEBUG("new topwidget %s" % (self.topwidget,)) - return widget - - def peek(self): - return self[-1] - - def topIsLayout(self): - return isinstance(self[-1], QtWidgets.QLayout) - - def topIsLayoutWidget(self): - # A plain QWidget is a layout widget unless it's parent is a - # QMainWindow or a container widget. Note that the corresponding uic - # test is a little more complicated as it involves features not - # supported by pyuic. - - if type(self[-1]) is not QtWidgets.QWidget: - return False - - if len(self) < 2: - return False - - parent = self[-2] - - return isinstance(parent, QtWidgets.QWidget) and type(parent) not in ( - QtWidgets.QMainWindow, - QtWidgets.QStackedWidget, - QtWidgets.QToolBox, - QtWidgets.QTabWidget, - QtWidgets.QScrollArea, - QtWidgets.QMdiArea, - QtWidgets.QWizard, - QtWidgets.QDockWidget) - - -class ButtonGroup(object): - """ Encapsulate the configuration of a button group and its implementation. - """ - - def __init__(self): - """ Initialise the button group. """ - - self.exclusive = True - self.object = None - - -class UIParser(object): - def __init__(self, qtcore_module, qtgui_module, qtwidgets_module, creatorPolicy): - self.factory = QObjectCreator(creatorPolicy) - self.wprops = Properties(self.factory, qtcore_module, qtgui_module, - qtwidgets_module) - - global QtCore, QtGui, QtWidgets - QtCore = qtcore_module - QtGui = qtgui_module - QtWidgets = qtwidgets_module - - self.reset() - - def uniqueName(self, name): - """UIParser.uniqueName(string) -> string - - Create a unique name from a string. - >>> p = UIParser(QtCore, QtGui, QtWidgets) - >>> p.uniqueName("foo") - 'foo' - >>> p.uniqueName("foo") - 'foo1' - """ - try: - suffix = self.name_suffixes[name] - except KeyError: - self.name_suffixes[name] = 0 - return name - - suffix += 1 - self.name_suffixes[name] = suffix - - return "%s%i" % (name, suffix) - - def reset(self): - try: self.wprops.reset() - except AttributeError: pass - self.toplevelWidget = None - self.stack = WidgetStack() - self.name_suffixes = {} - self.defaults = {'spacing': -1, 'margin': -1} - self.actions = [] - self.currentActionGroup = None - self.button_groups = {} - - def _setupObject(self, class_name, parent, branch, is_attribute=True, - parent_is_optional=True): - object_name = self.uniqueName( - branch.attrib.get('name') or class_name[1:].lower()) - - if parent is None: - ctor_args = () - ctor_kwargs = {} - elif parent_is_optional: - ctor_args = () - ctor_kwargs = dict(parent=parent) - else: - ctor_args = (parent, ) - ctor_kwargs = {} - - obj = self.factory.createQtObject(class_name, object_name, - ctor_args=ctor_args, ctor_kwargs=ctor_kwargs, - is_attribute=is_attribute) - - self.wprops.setProperties(obj, branch) - obj.setObjectName(object_name) - - if is_attribute: - setattr(self.toplevelWidget, object_name, obj) - - return obj - - def getProperty(self, elem, name): - for prop in elem.findall('property'): - if prop.attrib['name'] == name: - return prop - - return None - - def createWidget(self, elem): - self.column_counter = 0 - self.row_counter = 0 - self.item_nr = 0 - self.itemstack = [] - self.sorting_enabled = None - - widget_class = elem.attrib['class'].replace('::', '.') - if widget_class == 'Line': - widget_class = 'QFrame' - - # Ignore the parent if it is a container. - parent = self.stack.topwidget - if isinstance(parent, (QtWidgets.QDockWidget, QtWidgets.QMdiArea, - QtWidgets.QScrollArea, QtWidgets.QStackedWidget, - QtWidgets.QToolBox, QtWidgets.QTabWidget, - QtWidgets.QWizard)): - parent = None - - self.stack.push(self._setupObject(widget_class, parent, elem)) - - if isinstance(self.stack.topwidget, QtWidgets.QTableWidget): - if self.getProperty(elem, 'columnCount') is None: - self.stack.topwidget.setColumnCount(len(elem.findall("column"))) - - if self.getProperty(elem, 'rowCount') is None: - self.stack.topwidget.setRowCount(len(elem.findall("row"))) - - self.traverseWidgetTree(elem) - widget = self.stack.popWidget() - - if isinstance(widget, QtWidgets.QTreeView): - self.handleHeaderView(elem, "header", widget.header()) - - elif isinstance(widget, QtWidgets.QTableView): - self.handleHeaderView(elem, "horizontalHeader", - widget.horizontalHeader()) - self.handleHeaderView(elem, "verticalHeader", - widget.verticalHeader()) - - elif isinstance(widget, QtWidgets.QAbstractButton): - bg_i18n = self.wprops.getAttribute(elem, "buttonGroup") - if bg_i18n is not None: - # This should be handled properly in case the problem arises - # elsewhere as well. - try: - # We are compiling the .ui file. - bg_name = bg_i18n.string - except AttributeError: - # We are loading the .ui file. - bg_name = bg_i18n - - # Designer allows the creation of .ui files without explicit - # button groups, even though uic then issues warnings. We - # handle it in two stages by first making sure it has a name - # and then making sure one exists with that name. - if not bg_name: - bg_name = 'buttonGroup' - - try: - bg = self.button_groups[bg_name] - except KeyError: - bg = self.button_groups[bg_name] = ButtonGroup() - - if bg.object is None: - bg.object = self.factory.createQtObject('QButtonGroup', - bg_name, ctor_args=(self.toplevelWidget, )) - setattr(self.toplevelWidget, bg_name, bg.object) - - bg.object.setObjectName(bg_name) - - if not bg.exclusive: - bg.object.setExclusive(False) - - bg.object.addButton(widget) - - if self.sorting_enabled is not None: - widget.setSortingEnabled(self.sorting_enabled) - self.sorting_enabled = None - - if self.stack.topIsLayout(): - lay = self.stack.peek() - lp = elem.attrib['layout-position'] - - if isinstance(lay, QtWidgets.QFormLayout): - lay.setWidget(lp[0], self._form_layout_role(lp), widget) - else: - lay.addWidget(widget, *lp) - - topwidget = self.stack.topwidget - - if isinstance(topwidget, QtWidgets.QToolBox): - icon = self.wprops.getAttribute(elem, "icon") - if icon is not None: - topwidget.addItem(widget, icon, self.wprops.getAttribute(elem, "label")) - else: - topwidget.addItem(widget, self.wprops.getAttribute(elem, "label")) - - tooltip = self.wprops.getAttribute(elem, "toolTip") - if tooltip is not None: - topwidget.setItemToolTip(topwidget.indexOf(widget), tooltip) - - elif isinstance(topwidget, QtWidgets.QTabWidget): - icon = self.wprops.getAttribute(elem, "icon") - if icon is not None: - topwidget.addTab(widget, icon, self.wprops.getAttribute(elem, "title")) - else: - topwidget.addTab(widget, self.wprops.getAttribute(elem, "title")) - - tooltip = self.wprops.getAttribute(elem, "toolTip") - if tooltip is not None: - topwidget.setTabToolTip(topwidget.indexOf(widget), tooltip) - - elif isinstance(topwidget, QtWidgets.QWizard): - topwidget.addPage(widget) - - elif isinstance(topwidget, QtWidgets.QStackedWidget): - topwidget.addWidget(widget) - - elif isinstance(topwidget, (QtWidgets.QDockWidget, QtWidgets.QScrollArea)): - topwidget.setWidget(widget) - - elif isinstance(topwidget, QtWidgets.QMainWindow): - if type(widget) == QtWidgets.QWidget: - topwidget.setCentralWidget(widget) - elif isinstance(widget, QtWidgets.QToolBar): - tbArea = self.wprops.getAttribute(elem, "toolBarArea") - - if tbArea is None: - topwidget.addToolBar(widget) - else: - topwidget.addToolBar(tbArea, widget) - - tbBreak = self.wprops.getAttribute(elem, "toolBarBreak") - - if tbBreak: - topwidget.insertToolBarBreak(widget) - - elif isinstance(widget, QtWidgets.QMenuBar): - topwidget.setMenuBar(widget) - elif isinstance(widget, QtWidgets.QStatusBar): - topwidget.setStatusBar(widget) - elif isinstance(widget, QtWidgets.QDockWidget): - dwArea = self.wprops.getAttribute(elem, "dockWidgetArea") - topwidget.addDockWidget(QtCore.Qt.DockWidgetArea(dwArea), - widget) - - def handleHeaderView(self, elem, name, header): - value = self.wprops.getAttribute(elem, name + "Visible") - if value is not None: - header.setVisible(value) - - value = self.wprops.getAttribute(elem, name + "CascadingSectionResizes") - if value is not None: - header.setCascadingSectionResizes(value) - - value = self.wprops.getAttribute(elem, name + "DefaultSectionSize") - if value is not None: - header.setDefaultSectionSize(value) - - value = self.wprops.getAttribute(elem, name + "HighlightSections") - if value is not None: - header.setHighlightSections(value) - - value = self.wprops.getAttribute(elem, name + "MinimumSectionSize") - if value is not None: - header.setMinimumSectionSize(value) - - value = self.wprops.getAttribute(elem, name + "ShowSortIndicator") - if value is not None: - header.setSortIndicatorShown(value) - - value = self.wprops.getAttribute(elem, name + "StretchLastSection") - if value is not None: - header.setStretchLastSection(value) - - def createSpacer(self, elem): - width = elem.findtext("property/size/width") - height = elem.findtext("property/size/height") - - if width is None or height is None: - size_args = () - else: - size_args = (int(width), int(height)) - - sizeType = self.wprops.getProperty(elem, "sizeType", - QtWidgets.QSizePolicy.Policy.Expanding) - - policy = (QtWidgets.QSizePolicy.Policy.Minimum, sizeType) - - if self.wprops.getProperty(elem, "orientation") == QtCore.Qt.Orientation.Horizontal: - policy = policy[1], policy[0] - - spacer = self.factory.createQtObject('QSpacerItem', - self.uniqueName('spacerItem'), ctor_args=size_args + policy, - is_attribute=False) - - if self.stack.topIsLayout(): - lay = self.stack.peek() - lp = elem.attrib['layout-position'] - - if isinstance(lay, QtWidgets.QFormLayout): - lay.setItem(lp[0], self._form_layout_role(lp), spacer) - else: - lay.addItem(spacer, *lp) - - def createLayout(self, elem): - # We use an internal property to handle margins which will use separate - # left, top, right and bottom margins if they are found to be - # different. The following will select, in order of preference, - # separate margins, the same margin in all directions, and the default - # margin. - margin = -1 if self.stack.topIsLayout() else self.defaults['margin'] - margin = self.wprops.getProperty(elem, 'margin', margin) - left = self.wprops.getProperty(elem, 'leftMargin', margin) - top = self.wprops.getProperty(elem, 'topMargin', margin) - right = self.wprops.getProperty(elem, 'rightMargin', margin) - bottom = self.wprops.getProperty(elem, 'bottomMargin', margin) - - # A layout widget should, by default, have no margins. - if self.stack.topIsLayoutWidget(): - if left < 0: left = 0 - if top < 0: top = 0 - if right < 0: right = 0 - if bottom < 0: bottom = 0 - - if left >= 0 or top >= 0 or right >= 0 or bottom >= 0: - # We inject the new internal property. - cme = SubElement(elem, 'property', name='pyuicMargins') - SubElement(cme, 'number').text = str(left) - SubElement(cme, 'number').text = str(top) - SubElement(cme, 'number').text = str(right) - SubElement(cme, 'number').text = str(bottom) - - # We use an internal property to handle spacing which will use separate - # horizontal and vertical spacing if they are found to be different. - # The following will select, in order of preference, separate - # horizontal and vertical spacing, the same spacing in both directions, - # and the default spacing. - spacing = self.wprops.getProperty(elem, 'spacing', - self.defaults['spacing']) - horiz = self.wprops.getProperty(elem, 'horizontalSpacing', spacing) - vert = self.wprops.getProperty(elem, 'verticalSpacing', spacing) - - if horiz >= 0 or vert >= 0: - # We inject the new internal property. - cme = SubElement(elem, 'property', name='pyuicSpacing') - SubElement(cme, 'number').text = str(horiz) - SubElement(cme, 'number').text = str(vert) - - classname = elem.attrib["class"] - if self.stack.topIsLayout(): - parent = None - else: - parent = self.stack.topwidget - if "name" not in elem.attrib: - elem.attrib["name"] = classname[1:].lower() - self.stack.push( - self._setupObject(classname, parent, elem, - parent_is_optional=False)) - self.traverseWidgetTree(elem) - - layout = self.stack.popLayout() - self.configureLayout(elem, layout) - - if self.stack.topIsLayout(): - top_layout = self.stack.peek() - lp = elem.attrib['layout-position'] - - if isinstance(top_layout, QtWidgets.QFormLayout): - top_layout.setLayout(lp[0], self._form_layout_role(lp), layout) - else: - top_layout.addLayout(layout, *lp) - - def configureLayout(self, elem, layout): - if isinstance(layout, QtWidgets.QGridLayout): - self.setArray(elem, 'columnminimumwidth', - layout.setColumnMinimumWidth) - self.setArray(elem, 'rowminimumheight', - layout.setRowMinimumHeight) - self.setArray(elem, 'columnstretch', layout.setColumnStretch) - self.setArray(elem, 'rowstretch', layout.setRowStretch) - - elif isinstance(layout, QtWidgets.QBoxLayout): - self.setArray(elem, 'stretch', layout.setStretch) - - def setArray(self, elem, name, setter): - array = elem.attrib.get(name) - if array: - for idx, value in enumerate(array.split(',')): - value = int(value) - if value > 0: - setter(idx, value) - - def disableSorting(self, w): - if self.item_nr == 0: - self.sorting_enabled = self.factory.invoke("__sortingEnabled", - w.isSortingEnabled) - w.setSortingEnabled(False) - - def handleItem(self, elem): - if self.stack.topIsLayout(): - elem[0].attrib['layout-position'] = _layout_position(elem) - self.traverseWidgetTree(elem) - else: - w = self.stack.topwidget - - if isinstance(w, QtWidgets.QComboBox): - text = self.wprops.getProperty(elem, "text") - icon = self.wprops.getProperty(elem, "icon") - - if icon: - w.addItem(icon, '') - else: - w.addItem('') - - w.setItemText(self.item_nr, text) - - elif isinstance(w, QtWidgets.QListWidget): - self.disableSorting(w) - item = self.createWidgetItem('QListWidgetItem', elem, w.item, - self.item_nr) - w.addItem(item) - - elif isinstance(w, QtWidgets.QTreeWidget): - if self.itemstack: - parent, _ = self.itemstack[-1] - _, nr_in_root = self.itemstack[0] - else: - parent = w - nr_in_root = self.item_nr - - item = self.factory.createQtObject('QTreeWidgetItem', - 'item_%d' % len(self.itemstack), ctor_args=(parent, ), - is_attribute=False) - - if self.item_nr == 0 and not self.itemstack: - self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled) - w.setSortingEnabled(False) - - self.itemstack.append((item, self.item_nr)) - self.item_nr = 0 - - # We have to access the item via the tree when setting the - # text. - titm = w.topLevelItem(nr_in_root) - for child, nr_in_parent in self.itemstack[1:]: - titm = titm.child(nr_in_parent) - - column = -1 - for prop in elem.findall('property'): - c_prop = self.wprops.convert(prop) - c_prop_name = prop.attrib['name'] - - if c_prop_name == 'text': - column += 1 - if c_prop: - titm.setText(column, c_prop) - elif c_prop_name == 'statusTip': - item.setStatusTip(column, c_prop) - elif c_prop_name == 'toolTip': - item.setToolTip(column, c_prop) - elif c_prop_name == 'whatsThis': - item.setWhatsThis(column, c_prop) - elif c_prop_name == 'font': - item.setFont(column, c_prop) - elif c_prop_name == 'icon': - item.setIcon(column, c_prop) - elif c_prop_name == 'background': - item.setBackground(column, c_prop) - elif c_prop_name == 'foreground': - item.setForeground(column, c_prop) - elif c_prop_name == 'flags': - item.setFlags(c_prop) - elif c_prop_name == 'checkState': - item.setCheckState(column, c_prop) - - self.traverseWidgetTree(elem) - _, self.item_nr = self.itemstack.pop() - - elif isinstance(w, QtWidgets.QTableWidget): - row = int(elem.attrib['row']) - col = int(elem.attrib['column']) - - self.disableSorting(w) - item = self.createWidgetItem('QTableWidgetItem', elem, w.item, - row, col) - w.setItem(row, col, item) - - self.item_nr += 1 - - def addAction(self, elem): - self.actions.append((self.stack.topwidget, elem.attrib["name"])) - - @staticmethod - def any_i18n(*args): - """ Return True if any argument appears to be an i18n string. """ - - for a in args: - if a is not None and not isinstance(a, str): - return True - - return False - - def createWidgetItem(self, item_type, elem, getter, *getter_args): - """ Create a specific type of widget item. """ - - item = self.factory.createQtObject(item_type, 'item', - is_attribute=False) - props = self.wprops - - # Note that not all types of widget items support the full set of - # properties. - - text = props.getProperty(elem, 'text') - status_tip = props.getProperty(elem, 'statusTip') - tool_tip = props.getProperty(elem, 'toolTip') - whats_this = props.getProperty(elem, 'whatsThis') - - if self.any_i18n(text, status_tip, tool_tip, whats_this): - self.factory.invoke("item", getter, getter_args) - - if text: - item.setText(text) - - if status_tip: - item.setStatusTip(status_tip) - - if tool_tip: - item.setToolTip(tool_tip) - - if whats_this: - item.setWhatsThis(whats_this) - - text_alignment = props.getProperty(elem, 'textAlignment') - if text_alignment: - item.setTextAlignment(text_alignment) - - font = props.getProperty(elem, 'font') - if font: - item.setFont(font) - - icon = props.getProperty(elem, 'icon') - if icon: - item.setIcon(icon) - - background = props.getProperty(elem, 'background') - if background: - item.setBackground(background) - - foreground = props.getProperty(elem, 'foreground') - if foreground: - item.setForeground(foreground) - - flags = props.getProperty(elem, 'flags') - if flags: - item.setFlags(flags) - - check_state = props.getProperty(elem, 'checkState') - if check_state: - item.setCheckState(check_state) - - return item - - def addHeader(self, elem): - w = self.stack.topwidget - - if isinstance(w, QtWidgets.QTreeWidget): - props = self.wprops - col = self.column_counter - - text = props.getProperty(elem, 'text') - if text: - w.headerItem().setText(col, text) - - status_tip = props.getProperty(elem, 'statusTip') - if status_tip: - w.headerItem().setStatusTip(col, status_tip) - - tool_tip = props.getProperty(elem, 'toolTip') - if tool_tip: - w.headerItem().setToolTip(col, tool_tip) - - whats_this = props.getProperty(elem, 'whatsThis') - if whats_this: - w.headerItem().setWhatsThis(col, whats_this) - - text_alignment = props.getProperty(elem, 'textAlignment') - if text_alignment: - w.headerItem().setTextAlignment(col, text_alignment) - - font = props.getProperty(elem, 'font') - if font: - w.headerItem().setFont(col, font) - - icon = props.getProperty(elem, 'icon') - if icon: - w.headerItem().setIcon(col, icon) - - background = props.getProperty(elem, 'background') - if background: - w.headerItem().setBackground(col, background) - - foreground = props.getProperty(elem, 'foreground') - if foreground: - w.headerItem().setForeground(col, foreground) - - self.column_counter += 1 - - elif isinstance(w, QtWidgets.QTableWidget): - if len(elem) != 0: - if elem.tag == 'column': - item = self.createWidgetItem('QTableWidgetItem', elem, - w.horizontalHeaderItem, self.column_counter) - w.setHorizontalHeaderItem(self.column_counter, item) - self.column_counter += 1 - elif elem.tag == 'row': - item = self.createWidgetItem('QTableWidgetItem', elem, - w.verticalHeaderItem, self.row_counter) - w.setVerticalHeaderItem(self.row_counter, item) - self.row_counter += 1 - - def setZOrder(self, elem): - # Designer can generate empty zorder elements. - if elem.text is None: - return - - # Designer allows the z-order of spacer items to be specified even - # though they can't be raised, so ignore any missing raise_() method. - try: - getattr(self.toplevelWidget, elem.text).raise_() - except AttributeError: - # Note that uic issues a warning message. - pass - - def createAction(self, elem): - self._setupObject('QAction', - self.currentActionGroup or self.toplevelWidget, elem) - - def createActionGroup(self, elem): - action_group = self._setupObject('QActionGroup', self.toplevelWidget, - elem, parent_is_optional=False) - self.currentActionGroup = action_group - self.traverseWidgetTree(elem) - self.currentActionGroup = None - - widgetTreeItemHandlers = { - "widget" : createWidget, - "addaction" : addAction, - "layout" : createLayout, - "spacer" : createSpacer, - "item" : handleItem, - "action" : createAction, - "actiongroup": createActionGroup, - "column" : addHeader, - "row" : addHeader, - "zorder" : setZOrder, - } - - def traverseWidgetTree(self, elem): - for child in iter(elem): - try: - handler = self.widgetTreeItemHandlers[child.tag] - except KeyError: - continue - - handler(self, child) - - def _handle_widget(self, el): - """ Handle the top-level element. """ - - # Get the names of the class and widget. - cname = el.attrib["class"] - wname = el.attrib["name"] - - # If there was no widget name then derive it from the class name. - if not wname: - wname = cname - - if wname.startswith("Q"): - wname = wname[1:] - - wname = wname[0].lower() + wname[1:] - - self.toplevelWidget = self.createToplevelWidget(cname, wname) - self.toplevelWidget.setObjectName(wname) - DEBUG("toplevel widget is %s", - self.toplevelWidget.metaObject().className()) - self.wprops.setProperties(self.toplevelWidget, el) - self.stack.push(self.toplevelWidget) - self.traverseWidgetTree(el) - self.stack.popWidget() - self.addActions() - self.setBuddies() - self.setDelayedProps() - - def addActions(self): - for widget, action_name in self.actions: - if action_name == "separator": - widget.addSeparator() - else: - DEBUG("add action %s to %s", action_name, widget.objectName()) - action_obj = getattr(self.toplevelWidget, action_name) - if isinstance(action_obj, QtWidgets.QMenu): - widget.addAction(action_obj.menuAction()) - elif not isinstance(action_obj, QtGui.QActionGroup): - widget.addAction(action_obj) - - def setDelayedProps(self): - for widget, layout, setter, args in self.wprops.delayed_props: - if layout: - widget = widget.layout() - - setter = getattr(widget, setter) - setter(args) - - def setBuddies(self): - for widget, buddy in self.wprops.buddies: - DEBUG("%s is buddy of %s", buddy, widget.objectName()) - try: - widget.setBuddy(getattr(self.toplevelWidget, buddy)) - except AttributeError: - DEBUG("ERROR in ui spec: %s (buddy of %s) does not exist", - buddy, widget.objectName()) - - def setContext(self, context): - """ - Reimplemented by a sub-class if it needs to know the translation - context. - """ - pass - - def _handle_layout_default(self, el): - """ Handle the element. """ - - self.defaults['margin'] = int(el.attrib['margin']) - self.defaults['spacing'] = int(el.attrib['spacing']) - - def _handle_tab_stops(self, el): - """ Handle the element. """ - - lastwidget = None - for widget_el in el: - widget = getattr(self.toplevelWidget, widget_el.text) - - if lastwidget is not None: - self.toplevelWidget.setTabOrder(lastwidget, widget) - - lastwidget = widget - - def _handle_connections(self, el): - """ Handle the element. """ - - def name2object(obj): - if obj == self.uiname: - return self.toplevelWidget - else: - return getattr(self.toplevelWidget, obj) - - for conn in el: - signal = conn.findtext('signal') - signal_name, signal_args = signal.split('(') - signal_args = signal_args[:-1].replace(' ', '') - sender = name2object(conn.findtext('sender')) - bound_signal = getattr(sender, signal_name) - - slot = self.factory.getSlot(name2object(conn.findtext('receiver')), - conn.findtext('slot').split('(')[0]) - - if signal_args == '': - bound_signal.connect(slot) - else: - signal_args = signal_args.split(',') - - if len(signal_args) == 1: - bound_signal[signal_args[0]].connect(slot) - else: - bound_signal[tuple(signal_args)].connect(slot) - - QtCore.QMetaObject.connectSlotsByName(self.toplevelWidget) - - def _handle_custom_widgets(self, el): - """ Handle the element. """ - - def header2module(header): - """header2module(header) -> string - - Convert paths to C++ header files to according Python modules - >>> header2module("foo/bar/baz.h") - 'foo.bar.baz' - """ - if header.endswith(".h"): - header = header[:-2] - - mpath = [] - for part in header.split('/'): - # Ignore any empty parts or those that refer to the current - # directory. - if part not in ('', '.'): - if part == '..': - # We should allow this for Python3. - raise SyntaxError("custom widget header file name may not contain '..'.") - - mpath.append(part) - - return '.'.join(mpath) - - for custom_widget in el: - classname = custom_widget.findtext("class") - self.factory.addCustomWidget(classname, - custom_widget.findtext("extends") or "QWidget", - header2module(custom_widget.findtext("header"))) - - def createToplevelWidget(self, classname, widgetname): - raise NotImplementedError - - def _handle_button_groups(self, el): - """ Handle the element. """ - - for button_group in el: - if button_group.tag == 'buttongroup': - bg_name = button_group.attrib['name'] - bg = ButtonGroup() - self.button_groups[bg_name] = bg - - prop = self.getProperty(button_group, 'exclusive') - if prop is not None: - if prop.findtext('bool') == 'false': - bg.exclusive = False - - # finalize will be called after the whole tree has been parsed and can be - # overridden. - def finalize(self): - pass - - def parse(self, filename): - if hasattr(filename, 'read'): - base_dir = '' - else: - base_dir = os.path.dirname(filename) - - self.wprops.set_base_dir(base_dir) - - ui_file = UIFile(filename) - - self.uiname = ui_file.class_name - self.wprops.uiname = ui_file.class_name - self.setContext(ui_file.class_name) - - # The order in which the elements are handled is important. The widget - # handler relies on all custom widgets being known, and in order to - # create the connections, all widgets have to be populated. - if ui_file.layout_default is not None: - self._handle_layout_default(ui_file.layout_default) - - if ui_file.button_groups is not None: - self._handle_button_groups(ui_file.button_groups) - - if ui_file.custom_widgets is not None: - self._handle_custom_widgets(ui_file.custom_widgets) - - if ui_file.widget is not None: - self._handle_widget(ui_file.widget) - - if ui_file.connections is not None: - self._handle_connections(ui_file.connections) - - if ui_file.tab_stops is not None: - self._handle_tab_stops(ui_file.tab_stops) - - self.finalize() - - w = self.toplevelWidget - self.reset() - - return w - - @staticmethod - def _form_layout_role(layout_position): - if layout_position[3] > 1: - role = QtWidgets.QFormLayout.ItemRole.SpanningRole - elif layout_position[1] == 1: - role = QtWidgets.QFormLayout.ItemRole.FieldRole - else: - role = QtWidgets.QFormLayout.ItemRole.LabelRole - - return role diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc deleted file mode 100644 index 2218e31..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc deleted file mode 100644 index bcf122f..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc deleted file mode 100644 index 58c2b13..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtopenglwidgets.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtopenglwidgets.cpython-312.pyc deleted file mode 100644 index 7532b40..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtopenglwidgets.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc deleted file mode 100644 index fdeda35..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc deleted file mode 100644 index 24652e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc deleted file mode 100644 index 943a919..0000000 Binary files a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qaxcontainer.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qaxcontainer.py deleted file mode 100644 index 81b8c37..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qaxcontainer.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return "PyQt6.QAxContainer", ("QAxWidget", ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qscintilla.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qscintilla.py deleted file mode 100644 index 790191a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qscintilla.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return "PyQt6.Qsci", ("QsciScintilla", ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtcharts.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtcharts.py deleted file mode 100644 index 00efc99..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtcharts.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return 'PyQt6.QtChart', ('QtCharts.QChartView', ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtopenglwidgets.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtopenglwidgets.py deleted file mode 100644 index 65d9e7f..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtopenglwidgets.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return 'PyQt6.QtOpenGLWidgets', ('QOpenGLWidget', ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtprintsupport.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtprintsupport.py deleted file mode 100644 index c9bfb42..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtprintsupport.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return 'PyQt6.QtPrintSupport', ('QAbstractPrintDialog', 'QPageSetupDialog') diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtquickwidgets.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtquickwidgets.py deleted file mode 100644 index cffa1bc..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtquickwidgets.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return "PyQt6.QtQuickWidgets", ("QQuickWidget", ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtwebenginewidgets.py b/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtwebenginewidgets.py deleted file mode 100644 index 94eeead..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6/uic/widget-plugins/qtwebenginewidgets.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################# -## -## Copyright (c) 2024 Riverbank Computing Limited -## -## This file is part of PyQt6. -## -## This file may be used under the terms of the GNU General Public License -## version 3.0 as published by the Free Software Foundation and appearing in -## the file LICENSE included in the packaging of this file. Please review the -## following information to ensure the GNU General Public License version 3.0 -## requirements will be met: http://www.gnu.org/copyleft/gpl.html. -## -## If you do not wish to use this file under the terms of the GPL version 3.0 -## then you may purchase a commercial license. For more information contact -## info@riverbankcomputing.com. -## -## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -## -############################################################################# - - -# If pluginType is MODULE, the plugin loader will call moduleInformation. The -# variable MODULE is inserted into the local namespace by the plugin loader. -pluginType = MODULE - - -# moduleInformation() must return a tuple (module, widget_list). If "module" -# is "A" and any widget from this module is used, the code generator will write -# "import A". If "module" is "A[.B].C", the code generator will write -# "from A[.B] import C". Each entry in "widget_list" must be unique. -def moduleInformation(): - return "PyQt6.QtWebEngineWidgets", ("QWebEngineView", ) diff --git a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/LICENSE deleted file mode 100644 index 77efbac..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/LICENSE +++ /dev/null @@ -1,866 +0,0 @@ -GENERAL -------- - -Qt is available under a commercial license with various pricing models and packages that meet a variety of needs. Commercial Qt license keeps your code proprietary where only you can control and monetize on your end product’s development, user experience and distribution. You also get great perks like additional functionality, productivity enhancing tools, world-class support and a close strategic relationship with The Qt Company to make sure your product and development goals are met. - -Qt has been created under the belief of open development and providing freedom and choice to developers. To support that, The Qt Company also licenses Qt under open source licenses, where most of the functionality is available under LGPLv3. It should be noted that the tools as well as some add-on components are available only under GPLv3. In order to preserve the true meaning of open development and uphold the spirit of free software, it is imperative that the rules and regulations of open source licenses are followed. If you use Qt under open-source licenses, you need to make sure that you comply with all the licenses of the components you use. - -Qt also contains some 3rd party components that are available under different open-source licenses. Please refer to the documentation for more details on 3rd party licenses used in Qt. - - -GPLv3 and LGPLv3 ----------------- - - GNU LESSER GENERAL PUBLIC LICENSE - - The Qt Toolkit is Copyright (C) 2017 The Qt Company Ltd. - Contact: https://www.qt.io/licensing - - You may use, distribute and copy the Qt GUI Toolkit under the terms of - GNU Lesser General Public License version 3, which supplements GNU General - Public License Version 3. Both of the licenses are displayed below. - -------------------------------------------------------------------------- - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - -------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright © 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies of this - license document, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - -0. Additional Definitions. - - As used herein, “this License” refers to version 3 of the GNU Lesser -General Public License, and the “GNU GPL” refers to version 3 of the -GNU General Public License. - - “The Library” refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An “Application” is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A “Combined Work” is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the “Linked -Version”. - - The “Minimal Corresponding Source” for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The “Corresponding Application Code” for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - -1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - -2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort - to ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - -3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this - license document. - -4. Combined Works. - - You may convey a Combined Work under terms of your choice that, taken -together, effectively do not restrict modification of the portions of -the Library contained in the Combined Work and reverse engineering for -debugging such modifications, if you also do each of the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this - license document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of - this License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with - the Library. A suitable mechanism is one that (a) uses at run - time a copy of the Library already present on the user's - computer system, and (b) will operate properly with a modified - version of the Library that is interface-compatible with the - Linked Version. - - e) Provide Installation Information, but only if you would - otherwise be required to provide such information under section 6 - of the GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the Application - with a modified version of the Linked Version. (If you use option - 4d0, the Installation Information must accompany the Minimal - Corresponding Source and Corresponding Application Code. If you - use option 4d1, you must provide the Installation Information in - the manner specified by section 6 of the GNU GPL for conveying - Corresponding Source.) - -5. Combined Libraries. - - You may place library facilities that are a work based on the Library -side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities, conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of - it is a work based on the Library, and explaining where to find - the accompanying uncombined form of the same work. - -6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -as you received it specifies that a certain numbered version of the -GNU Lesser General Public License “or any later version” applies to -it, you have the option of following the terms and conditions either -of that published version or of any later version published by the -Free Software Foundation. If the Library as you received it does not -specify a version number of the GNU Lesser General Public License, -you may choose any version of the GNU Lesser General Public License -ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the Library. - diff --git a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/METADATA b/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/METADATA deleted file mode 100644 index 7736a4b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/METADATA +++ /dev/null @@ -1,17 +0,0 @@ -Metadata-Version: 2.1 -Name: PyQt6-Qt6 -Version: 6.7.3 -Summary: The subset of a Qt installation needed by PyQt6. -Home-page: https://www.riverbankcomputing.com/software/pyqt/ -Author: Riverbank Computing Limited -Author-email: info@riverbankcomputing.com -License: LGPL v3 -Platform: Linux -Platform: macOS -Platform: Windows - -This package contains the subset of a Qt installation that is required by -PyQt6. It would normally be installed automatically by pip when -you install PyQt6. - -This package is licensed under the terms of the LGPL v3. diff --git a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/RECORD b/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/RECORD deleted file mode 100644 index bab2d5b..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/RECORD +++ /dev/null @@ -1,1609 +0,0 @@ -PyQt6/Qt6/lib/libQt6Bluetooth.so.6,sha256=hiAmdM4tbiJ5z-1nedJarw2Q9yJN4vPW63doS1CURYM,1264792 -PyQt6/Qt6/lib/libQt6Concurrent.so.6,sha256=QoQmR9h0R3RvzH7GjO8Q8QDgu3Vddwwbz7vrlkiCUak,31400 -PyQt6/Qt6/lib/libQt6Core.so.6,sha256=wXpE0rzVWVkvK-UimQlDDBR98bJP7NzsdaaYSpOSdvQ,6901776 -PyQt6/Qt6/lib/libQt6DBus.so.6,sha256=zEa6-HfavXq2YdpPxlAW7slcigm1sgNzR9LmXiEJM2E,819640 -PyQt6/Qt6/lib/libQt6Designer.so.6,sha256=nJaenYmLcwYRF7ddI_35Bji3XQuq3AxpSlkv7rforls,5820904 -PyQt6/Qt6/lib/libQt6Gui.so.6,sha256=s_a0yYh3WAd0O9dq1_AIoXzN5fHjHK0Kd2pY6MboH_0,10410536 -PyQt6/Qt6/lib/libQt6Help.so.6,sha256=PnGsJt8vXfY_tQgUSKDS2pZoDud51mfds1awxz3DR-A,607640 -PyQt6/Qt6/lib/libQt6LabsAnimation.so.6,sha256=Xxl96Vf6eSeRijnW6w-QY6XZvTpEsjPsVY3-MxmT69Q,56672 -PyQt6/Qt6/lib/libQt6LabsFolderListModel.so.6,sha256=9viOSHr-02kNGdELyhspl4BP4-E6Xv-Yj13Qbiq2ChE,111176 -PyQt6/Qt6/lib/libQt6LabsQmlModels.so.6,sha256=Xr23_1TRxeOXCWln1OhAl7s1LhSdsdYinJcXDzswtV0,210368 -PyQt6/Qt6/lib/libQt6LabsSettings.so.6,sha256=jdcdBbPBOHsBtv8YsRUW_2G5vUqd2j0F0wirfWIMVkE,60992 -PyQt6/Qt6/lib/libQt6LabsSharedImage.so.6,sha256=nlRSymvynKq7267lgnUUmPfNLgsjJmFRMLkLc5yqk00,53024 -PyQt6/Qt6/lib/libQt6LabsWavefrontMesh.so.6,sha256=dCKyv_aXhujObu0sJyzDSlHdOFuELW9K5ZD6w7tv778,52608 -PyQt6/Qt6/lib/libQt6Multimedia.so.6,sha256=cavKb9GqDZgDu1P9A6cvSewLd-7tm496FnemrUq_o18,1028472 -PyQt6/Qt6/lib/libQt6MultimediaQuick.so.6,sha256=Dyj9pyD63fJEPCy6fd_bX4F7ov3rDkN5KjtDrUg-sQ8,285504 -PyQt6/Qt6/lib/libQt6MultimediaWidgets.so.6,sha256=xsuHgvHgDkqqg_O2HAyAaPsdjPavgbC1RZioYu_O440,52736 -PyQt6/Qt6/lib/libQt6Network.so.6,sha256=OQoKYzJdsL-aHicKxg3iAUF6DfAoV_O0hUDCnwwUkWI,1945144 -PyQt6/Qt6/lib/libQt6Nfc.so.6,sha256=ah1jgZczjNV3sAzsQR4MdixU6zuK5vOcyzB_u7z4sDE,235512 -PyQt6/Qt6/lib/libQt6OpenGL.so.6,sha256=Wa7Tlrkxog4uflYW_4QDMDihPlsF0trmwTdXKDMqhNA,681112 -PyQt6/Qt6/lib/libQt6OpenGLWidgets.so.6,sha256=pk90-E-N5e_dP82HH18XpJxt8kPLllA_t6pZF-H08Co,65184 -PyQt6/Qt6/lib/libQt6Pdf.so.6,sha256=P8HEGSPLCa_CUk6rtoTV5i07gSMWKmq7LqB7ujl1iKw,5425608 -PyQt6/Qt6/lib/libQt6PdfQuick.so.6,sha256=GSo-9x-iK3k6TIdvfiHko272RzZnkbx7_CbQxYeGc04,527160 -PyQt6/Qt6/lib/libQt6PdfWidgets.so.6,sha256=_ZJj0JbhNSZ_syjGBEiRVFWrM8r9SXfg6nhM98bhNRA,102840 -PyQt6/Qt6/lib/libQt6Positioning.so.6,sha256=h40pZcz7g42Z9WeMTElrdXBbo9G8O34GATZ9w2mjUtQ,631488 -PyQt6/Qt6/lib/libQt6PositioningQuick.so.6,sha256=8FaIMMgS1Y60iS2JYASrfGDvOI6JxYbhdH3pW6TVEIU,402400 -PyQt6/Qt6/lib/libQt6PrintSupport.so.6,sha256=dV39PS7xYQ01Nn-lThA_Nm5aE2E3bQ9p8tnljVFtwVc,490976 -PyQt6/Qt6/lib/libQt6Qml.so.6,sha256=r165wh3PYt1nKtdHKF_smumwfH4VUn0Kshhj5VAKwUk,6144016 -PyQt6/Qt6/lib/libQt6QmlModels.so.6,sha256=vNF3gLjRfH26QQkOvD3J5grl08XqF8gNyp3qb6nVlNA,868792 -PyQt6/Qt6/lib/libQt6QmlWorkerScript.so.6,sha256=Wg67weCKmaIGcK7zOBO1wNtAnZS6OrW1EDqGSyYEFTo,82496 -PyQt6/Qt6/lib/libQt6Quick.so.6,sha256=VC6-4Jgx8eBpcG8c1tG0LqnKClbsCFrxl85tASDP3tA,7312648 -PyQt6/Qt6/lib/libQt6Quick3D.so.6,sha256=UQC9kVkJREF-OuM4uYa0Nwy4cLMSIkdfa2UzQzQxygI,1502168 -PyQt6/Qt6/lib/libQt6Quick3DAssetImport.so.6,sha256=PZlYW2ddFbLRBooa9S1wI-lm0HQ4HMaas4H9BgP1z-0,64640 -PyQt6/Qt6/lib/libQt6Quick3DAssetUtils.so.6,sha256=ydC_4EpgKtvdHn6GnYbJNRcTr7uhQBa7oTs0Mb_eLJA,310368 -PyQt6/Qt6/lib/libQt6Quick3DEffects.so.6,sha256=dbmOr5403PKd5-M-1lWHhpoI6BKbwx3WrwuY3VJg3hc,343216 -PyQt6/Qt6/lib/libQt6Quick3DHelpers.so.6,sha256=q04zIhIrd-KNQ3bHe2rU8hMli0DTncWnMEKEyEmlCWw,496064 -PyQt6/Qt6/lib/libQt6Quick3DHelpersImpl.so.6,sha256=m8Gusvico67Q3YMztMm_b70EK7K3LqK9r_S2OjeGQRM,404256 -PyQt6/Qt6/lib/libQt6Quick3DIblBaker.so.6,sha256=bmPMpsiVxGeQTgvbPGxueOqb1n3awxGrrqZDcCBzxf4,64680 -PyQt6/Qt6/lib/libQt6Quick3DParticles.so.6,sha256=lUbGSgE1_kTD6osfNLVDQG2xIuyXIwZ-_kJ9G6sTEBU,606752 -PyQt6/Qt6/lib/libQt6Quick3DPhysics.so.6,sha256=TKtEyyHeD0GcdGI2bZyYrdA2AfzBPaIA-zDZlL92ufM,5055776 -PyQt6/Qt6/lib/libQt6Quick3DPhysicsHelpers.so.6,sha256=QCUtDvipRbruE3HTGGy0DrY3EyhtQFKyCx5uzKP0mkA,52488 -PyQt6/Qt6/lib/libQt6Quick3DRuntimeRender.so.6,sha256=7QE4oyvOnc4aSL9E2alZBivKagdNj3jq3tgZtAba_08,3699952 -PyQt6/Qt6/lib/libQt6Quick3DSpatialAudio.so.6,sha256=RKPiJNLmCNVvKLzC10DygqSehfZIIDtsR_cwJRHXVok,96232 -PyQt6/Qt6/lib/libQt6Quick3DUtils.so.6,sha256=fCgcpN6Jqkkn7K-p_7sN7plcNmFGBop7YoI1vPM0_xE,442704 -PyQt6/Qt6/lib/libQt6QuickControls2.so.6,sha256=-m73gjiKqqUg4dJOFRQ-LI2ME0SkmJZ75Lx9WTsJxsY,102240 -PyQt6/Qt6/lib/libQt6QuickControls2Basic.so.6,sha256=LnoclU_x4NbF8Cl8JrJtVxg-ZNtLd7eUcWzz-AS2sPE,1297480 -PyQt6/Qt6/lib/libQt6QuickControls2BasicStyleImpl.so.6,sha256=z77khy-_vS_VlsAZSCBEtMUhIqWoS5BlGKLqxcv4hk4,69968 -PyQt6/Qt6/lib/libQt6QuickControls2Fusion.so.6,sha256=MEqNmuLaspFrib_5QYMzFh5nakgdZRM4KvXRu6ZSFPM,1171016 -PyQt6/Qt6/lib/libQt6QuickControls2FusionStyleImpl.so.6,sha256=KfMGt3YieUe_lqwmn5q2_F_YDkR0hn0QSaF3EbW5Qkc,167184 -PyQt6/Qt6/lib/libQt6QuickControls2Imagine.so.6,sha256=Gc3ne5M8U3ZRepqQdk17CaFdmPf9NGGVw3JxcrBPpFE,2682088 -PyQt6/Qt6/lib/libQt6QuickControls2ImagineStyleImpl.so.6,sha256=cO0U8vOahKRYFoXTnnDu873R_zY-nSfcwwB8fpj5Ehk,44032 -PyQt6/Qt6/lib/libQt6QuickControls2Impl.so.6,sha256=rCCHPp6Rp8UU7GoIEUnH8yUErr6K2XdEvhw0NrRbF8Y,346208 -PyQt6/Qt6/lib/libQt6QuickControls2Material.so.6,sha256=fJFm_NzUUt4Glv0NIn3E_Tg44wWShDcZxXOtQYu7DxQ,1494120 -PyQt6/Qt6/lib/libQt6QuickControls2MaterialStyleImpl.so.6,sha256=pmwz-_PkapEGY2ih621Lj_urORYqZjWkqux5EIlAdEg,291184 -PyQt6/Qt6/lib/libQt6QuickControls2Universal.so.6,sha256=bK02obhTzgC1fzJFGhyIfGLCtUU4YUe_ZN9et2hNMjY,1209656 -PyQt6/Qt6/lib/libQt6QuickControls2UniversalStyleImpl.so.6,sha256=b67pZ6Vh08TuiI5PZitBiBRmZdiG0gKx_j5V0Q_2l48,112304 -PyQt6/Qt6/lib/libQt6QuickDialogs2.so.6,sha256=p9wSwL_vdBByy9Wgy8s0YM0eU8KMQ0RWe8xnnaTjJtk,180576 -PyQt6/Qt6/lib/libQt6QuickDialogs2QuickImpl.so.6,sha256=zajdxfXJdwk0PY4VP-ps3H_6vDJ-iGZ_IUtBCAzxM8w,2189992 -PyQt6/Qt6/lib/libQt6QuickDialogs2Utils.so.6,sha256=DwDLhO9pdudOb7bWJjhR_WqBMRBjdorfeewHmcGOfNA,35552 -PyQt6/Qt6/lib/libQt6QuickLayouts.so.6,sha256=3Jbk9WEDnAXBfe5B_XoZqlRiFkNdhX7l-3S3OHKTd98,274912 -PyQt6/Qt6/lib/libQt6QuickParticles.so.6,sha256=A6sKAq5x7zBxbdwcIrWwCu2ZaNnK3oJgrmHDP7bxQf0,672608 -PyQt6/Qt6/lib/libQt6QuickShapes.so.6,sha256=Y6yneOlYOoIy7LIAzT6_UPeOl5Z3Lgp1eBNbtKG7kgc,297024 -PyQt6/Qt6/lib/libQt6QuickTemplates2.so.6,sha256=HCQom4317cbTCxvF8g4--PAABYSqlfbhHGKHsFWza5E,2447136 -PyQt6/Qt6/lib/libQt6QuickTest.so.6,sha256=T3miq9_TCwJtyg9xRLiI9fHK7GRfuj5GpoEo6deAOP4,312280 -PyQt6/Qt6/lib/libQt6QuickTimeline.so.6,sha256=NNNHmk7egHjB2O3O7Co2JkAULIl6NGp2uS7D0MYuVGk,116032 -PyQt6/Qt6/lib/libQt6QuickTimelineBlendTrees.so.6,sha256=T_OUupcwTftaXTHy3b8W1KUBMnRyZTXa0EwbojmW29g,94632 -PyQt6/Qt6/lib/libQt6QuickWidgets.so.6,sha256=QTcyhSS4ZRpvH5B0jSz_xo6wHD8obNKKlVQfvkA7nAs,128224 -PyQt6/Qt6/lib/libQt6RemoteObjects.so.6,sha256=bRiHZ3-7gtF3TrBQYTGbs7RgBcd_lDdf3xOs921jTh4,994976 -PyQt6/Qt6/lib/libQt6RemoteObjectsQml.so.6,sha256=KMz3NtIsoEU4DDpO-m1yfocvQcdtznwveWDkKXCa3Ek,66560 -PyQt6/Qt6/lib/libQt6Sensors.so.6,sha256=dek8MjVQeG83FJGPWkZlNm4VRjEeTF0b7xHnDHQ8Uao,275544 -PyQt6/Qt6/lib/libQt6SensorsQuick.so.6,sha256=3erU67PneqvQyiaRn0ND8c_UeQKeZC_mnGtFwzSH7FI,350336 -PyQt6/Qt6/lib/libQt6SerialPort.so.6,sha256=LVp42A4a3hFns8gaYeaT01OUsj60EVenJi1OIbiE2M8,131800 -PyQt6/Qt6/lib/libQt6ShaderTools.so.6,sha256=VQSr1MbJQy5Q50KPsrzx-8kxJ1WxwM90Nr6tN_FmbXE,4907880 -PyQt6/Qt6/lib/libQt6SpatialAudio.so.6,sha256=SxiMU8xtVILQqhmX-ppyJN0xC0M1sDirCM7sJMy5WW0,832320 -PyQt6/Qt6/lib/libQt6Sql.so.6,sha256=fRLMTN39I0xd2kVj1lLgSdy68AtNkQVhltJXfZpDJlY,315672 -PyQt6/Qt6/lib/libQt6Svg.so.6,sha256=1CJw7GwhO3DPS6l5g-xzpTv0xjUKYQ7wLglSpt0DVz0,531160 -PyQt6/Qt6/lib/libQt6SvgWidgets.so.6,sha256=SFcd4FOQJP8yqNRZs5GqaQ0wO873k1R2ebT88CRXKQQ,56344 -PyQt6/Qt6/lib/libQt6Test.so.6,sha256=rIS3pE9LFgGi2DOTH56EdqEQNu_prsWHoMb-nxrdFrc,432432 -PyQt6/Qt6/lib/libQt6TextToSpeech.so.6,sha256=D3a7DY5vorXJ7Jwc8M0cMJqHPBcqXJSN-N-lbP4zY-c,128032 -PyQt6/Qt6/lib/libQt6WaylandClient.so.6,sha256=UX7JRibmUOyl46LEzojCLy-SmQynyXviPNR_4eGsrqg,1021024 -PyQt6/Qt6/lib/libQt6WaylandEglClientHwIntegration.so.6,sha256=oywTTkroFXkuEOo-9syu9eSBIh_hMKWMRZjGeqeB71o,60848 -PyQt6/Qt6/lib/libQt6WebChannel.so.6,sha256=SoBydYWkYUDs3MLphCqwECqrRRDuWgsCsm92bIs-TJs,250872 -PyQt6/Qt6/lib/libQt6WebChannelQuick.so.6,sha256=okoiRTol6WY7jNH8jtm6ez1EXCgu0c_iZxL5JuAJ8WY,53088 -PyQt6/Qt6/lib/libQt6WebSockets.so.6,sha256=oyGE4WGcvUEBwOCQHuJH_OI407adWkHqTh4LfA3hRXc,219416 -PyQt6/Qt6/lib/libQt6Widgets.so.6,sha256=ih3hQug9J1aeh98K354U1eVoZfDx6gzuXUhLmB4WXlo,7698376 -PyQt6/Qt6/lib/libQt6WlShellIntegration.so.6,sha256=qAhc163U_w6FhiyKPjk-PNYhkF2wkWIht4HB_d3lQ3c,151216 -PyQt6/Qt6/lib/libQt6XcbQpa.so.6,sha256=ERb7MiUdTDwwLyY6ZW_qvlApTzBybRty2B-GSFHh94c,732856 -PyQt6/Qt6/lib/libQt6Xml.so.6,sha256=qARmy6xb0tDIAa9HZS0UCSr94E6Sa9rgGt4a9wqrvEQ,196072 -PyQt6/Qt6/lib/libicudata.so.73,sha256=TxgqhVKWz5bTn3XJAosSdlp4_mr_89N4HWMxEFJbeos,32035888 -PyQt6/Qt6/lib/libicui18n.so.73,sha256=oY5IJm5Z7_8-yHLZ3FzJm3duGAuO3lcmnTVOa8ZZV3g,4477136 -PyQt6/Qt6/lib/libicuuc.so.73,sha256=t2OAssFcj_izyUV2rJi0DTT8CgkdtKiTJNcuJxx2mfA,2571736 -PyQt6/Qt6/plugins/assetimporters/libassimp.so,sha256=DHtnY4t-foTtNbux2wZ72x3F4x9oZizOkknJCKebguY,2680504 -PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.so,sha256=Or67id-_60dKqBWCzs93i3CPQmua8EJvQmq5Z_BoCtI,35768 -PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-egldevice-integration.so,sha256=lcXvRYV7ZOjDbdM4_KXX87DGn19cm6J7nEIJNFaFCnA,147392 -PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-kms-integration.so,sha256=jM3Ooh6HBa5D1o1j0747u6ojVx4X3RrthQUbFpJjngg,23192 -PyQt6/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.so,sha256=-5fgCMiupEPVMYeQMBbVlIi2kvoY30P2CnicV_-8GfU,31608 -PyQt6/Qt6/plugins/generic/libqevdevkeyboardplugin.so,sha256=q7fz92myHqqcBs3pwstUbzn5djjAyPgpjSHd2uFopic,77488 -PyQt6/Qt6/plugins/generic/libqevdevmouseplugin.so,sha256=heOUDb8M78bjuSArHFH3hw4m_KbqIEG2-VxQvDhNn-A,69744 -PyQt6/Qt6/plugins/generic/libqevdevtabletplugin.so,sha256=vZkSz1ZSnZpIlYLwLNU_jgYtNT-2mz9VcTUAdtXfryc,65168 -PyQt6/Qt6/plugins/generic/libqevdevtouchplugin.so,sha256=cVwyYufQsCsw3yKKdeEAKgBLsfTOn5aaqdyMr0TBXZ0,127408 -PyQt6/Qt6/plugins/generic/libqtuiotouchplugin.so,sha256=yP8HOdeCxVZ7O-idxCA0pSQpYJZVUXGaeYLke_S9qFI,93712 -PyQt6/Qt6/plugins/geometryloaders/libdefaultgeometryloader.so,sha256=DFLLaIByrjxCM8gLIETrFvhy0nidh3-hvgwnkUtHu9I,93552 -PyQt6/Qt6/plugins/geometryloaders/libgltfgeometryloader.so,sha256=tAhSe4TZOC9iEHwHTlwCB-Kxbxjg2vbx7lKY_RKCRVg,89584 -PyQt6/Qt6/plugins/iconengines/libqsvgicon.so,sha256=KCcfOJ-KlM-pRkNcfkbkgQHhAhIAm8ca9wNVXPIB62Y,72936 -PyQt6/Qt6/plugins/imageformats/libqgif.so,sha256=_TpL7r10p7cd9gUZgBJOXHFYpJVI6smqSxm_P-w-Os8,39840 -PyQt6/Qt6/plugins/imageformats/libqicns.so,sha256=QMrJ7LPoTTiykgLlNuKtQwuiDjf45pzEfrEcOQZno5I,52352 -PyQt6/Qt6/plugins/imageformats/libqico.so,sha256=sFfkN49s6mFDL1i1ek9lKbTFKiv4Nnp0Y3oueTGRyT8,44064 -PyQt6/Qt6/plugins/imageformats/libqjpeg.so,sha256=G3GyiRMGOIvWDaQM9q4qF_DdgKdyf6rBr0OcbhpIKbc,515520 -PyQt6/Qt6/plugins/imageformats/libqpdf.so,sha256=ipVpGvR0AeVgyXZV8KlYAd_G-Bkmsc-JzzI5eqjpoTs,35936 -PyQt6/Qt6/plugins/imageformats/libqsvg.so,sha256=a5YcH4-YAwAnAcXNzMzKrEbUiGHFeDV7aQViLl4xLvw,35904 -PyQt6/Qt6/plugins/imageformats/libqtga.so,sha256=nk9oVyKtCKjYHJRrd9SCwsre0vJuuhLFClqA00Uka_M,31552 -PyQt6/Qt6/plugins/imageformats/libqtiff.so,sha256=aM2BjpcWPDcIpke2-JiHn59xyCPvjNl1FueF9nNHfiU,495056 -PyQt6/Qt6/plugins/imageformats/libqwbmp.so,sha256=FtiJmA4r5yCNhxeLMoNrK1NNpCfZOShfTiGxb688Ats,31616 -PyQt6/Qt6/plugins/imageformats/libqwebp.so,sha256=DWyLXaDDagl-ueDfxz0GJQpgY0gpRU8sEnwRZwQuA3k,495552 -PyQt6/Qt6/plugins/multimedia/libffmpegmediaplugin.so,sha256=DOjCCM9INqILla_3bCe8KUDRmRWvT5k1quqEJLQlFKU,19264536 -PyQt6/Qt6/plugins/multimedia/libgstreamermediaplugin.so,sha256=xlDhxYVAfHyi9WzUdnLkKVDU_iJ4wtrRGBmy9MrR0SU,464520 -PyQt6/Qt6/plugins/networkinformation/libqglib.so,sha256=jzvz3HAZxegZzBhhq55WVAdZlE1VOREGq33vnmELBF0,27520 -PyQt6/Qt6/plugins/networkinformation/libqnetworkmanager.so,sha256=eHpudAMb0d0-ALu8ThBexMadVfLhOEgivD_HTFRPPeM,78320 -PyQt6/Qt6/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so,sha256=TFsEZ4rA7Rjxku8st1qfHl4PF_Y3o8TtnI0S3jUdZMo,31776 -PyQt6/Qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so,sha256=8jrVyTX3-0Wc-7MPc45O5nRTWVmdT3z05ximZGadqIQ,170784 -PyQt6/Qt6/plugins/platforms/libqeglfs.so,sha256=qxMYVtFyg0E5qiR-jZN8mnyApqYtxu-PhCISAGahe5A,23176 -PyQt6/Qt6/plugins/platforms/libqlinuxfb.so,sha256=hiYFr3E1pXr5QhHItDPAGHN58QSXpm45daoDK8Lufd4,359784 -PyQt6/Qt6/plugins/platforms/libqminimal.so,sha256=b2VWsNt3-pXBzMrGDOwBywu_brkZTIxlRlFOc1owiwk,43912 -PyQt6/Qt6/plugins/platforms/libqminimalegl.so,sha256=Dv3jJiE2703JttGYqrXKk7SVxlo_kqokvgzMYZjU09M,48232 -PyQt6/Qt6/plugins/platforms/libqoffscreen.so,sha256=nY2LEDolgm-Y_WFjhKmXoXOqOqCoERwkqJ-iDodqF7I,118824 -PyQt6/Qt6/plugins/platforms/libqvkkhrdisplay.so,sha256=xrVCNnJlLNw6JjB5agP4hAXcSvnoGfj7Q-sE20wLUcI,218696 -PyQt6/Qt6/plugins/platforms/libqvnc.so,sha256=hvRNPpQt86u3YMjhxbVUHn18emdiARp-xuS7JxNHIrs,123680 -PyQt6/Qt6/plugins/platforms/libqwayland-egl.so,sha256=kQSAcAFyvxjl4tzjuzSN3fGGV6B-QRa2Cj0nxbmji78,31400 -PyQt6/Qt6/plugins/platforms/libqwayland-generic.so,sha256=uU3kXf-tyCFlUr_xjRgwOvjrAPRfn9jLWMpVBRXnf7w,23184 -PyQt6/Qt6/plugins/platforms/libqxcb.so,sha256=J_In7cqBwzr-1UvRK7ttHC9XFSKJWuOnMYEybchzVn0,23168 -PyQt6/Qt6/plugins/platformthemes/libqgtk3.so,sha256=02jrrglXe_2hH91GwuLLatBGSG2kTlDTNUSunip_ykg,228048 -PyQt6/Qt6/plugins/platformthemes/libqxdgdesktopportal.so,sha256=Gx2OK1wfhdqtTHan-PvkmNgKpgKNB-CiwdLNKaoeS_U,123952 -PyQt6/Qt6/plugins/position/libqtposition_geoclue2.so,sha256=y7PY5v1j2UP0lsYfBXmpdYgNEs2ZdkcmFRLAKV8WOhU,82736 -PyQt6/Qt6/plugins/position/libqtposition_nmea.so,sha256=H0U-PFxrstvgr5vy0O7ik-9T9picuKSAM4fydWqPWYo,73520 -PyQt6/Qt6/plugins/position/libqtposition_positionpoll.so,sha256=ZyFRa8G8pY1KlIiDPrQ5S_Vl_PYlPbmjoAEX8K6gom4,85976 -PyQt6/Qt6/plugins/printsupport/libcupsprintersupport.so,sha256=IZUXWut16LELhd6NH4iBvkpZXcehxSmcgsrCUjlikcQ,114992 -PyQt6/Qt6/plugins/qmllint/libquicklintplugin.so,sha256=3WP_X7h2NdrJoBMcgwQIVvF7D_acZCDYwfPgVbTA8og,142704 -PyQt6/Qt6/plugins/renderers/libopenglrenderer.so,sha256=iPmbEpgyuRW1CGilHIBbLdoZihtGfYWz_vFFAR_uxVM,1208400 -PyQt6/Qt6/plugins/renderers/librhirenderer.so,sha256=ErSvn7WUM9Ao5Osmar6AsfX5yvHKMnWI-g5ORluzRPY,604080 -PyQt6/Qt6/plugins/renderplugins/libscene2d.so,sha256=4Z9u0FZsP244soLlhtxwEoF0Qv0Mr4mADFoKzqsGC3s,35592 -PyQt6/Qt6/plugins/sceneparsers/libassimpsceneimport.so,sha256=qROqO12ThMi4IHDIV7mKOHR-3WKkbywL0wR7VZPlJEY,2436400 -PyQt6/Qt6/plugins/sceneparsers/libgltfsceneexport.so,sha256=SNyxe9ptsdO3BoRtDUNMrSoUNKhVWWAWU7p9dqS4wTU,316624 -PyQt6/Qt6/plugins/sceneparsers/libgltfsceneimport.so,sha256=nuBwtTtcYJU0HJ_L3Y8_ZSm-fQcjk0ucXQu4SBthMMs,260336 -PyQt6/Qt6/plugins/sensors/libqtsensors_generic.so,sha256=rEFxeK8mvhg_IEJGlGKUezkxPglTunCtI7mnVjs8gQA,48368 -PyQt6/Qt6/plugins/sensors/libqtsensors_iio-sensor-proxy.so,sha256=rru81x6F9PLEdUn3_iYUH-Bb9EzEgJ2kxvoEIur42no,82744 -PyQt6/Qt6/plugins/sqldrivers/libqsqlite.so,sha256=NCAYFKKf2zgymhbZ9Y2rnGmejssv2ovzmUXVkAueHQU,1536968 -PyQt6/Qt6/plugins/sqldrivers/libqsqlmimer.so,sha256=drAH-4Z0uDCfWnwNYLMbsh21i2KCA_8cDrUPqULHdzc,98696 -PyQt6/Qt6/plugins/sqldrivers/libqsqlmysql.so,sha256=kSaPpGm4oP7aYw4VeitDk6DUvulV8Bu3mX3OLCB3f08,99624 -PyQt6/Qt6/plugins/sqldrivers/libqsqlodbc.so,sha256=e6_LhcVNAnvmFxG7kVV2YW3YogpI7eRZ9Yc1Xa-ploE,131208 -PyQt6/Qt6/plugins/sqldrivers/libqsqlpsql.so,sha256=USqHxFN6hW7aCbaESTi8mSpKekksnnVu5ShQF84tiiI,107080 -PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_mock.so,sha256=UISnFI_8r_jieXlaiNg-edzJyM59kzDOafwRCMUA1XQ,56752 -PyQt6/Qt6/plugins/texttospeech/libqtexttospeech_speechd.so,sha256=YdCub3QjYjAxy_RmLw98IfpipzPFrK_TbgczxhelP9A,56656 -PyQt6/Qt6/plugins/tls/libqcertonlybackend.so,sha256=K3puzfonmFACpU5DdEHM8WvIBZEgP0-M8jGFw-rEqVM,101584 -PyQt6/Qt6/plugins/tls/libqopensslbackend.so,sha256=hsMjESWvIPgjfTzAdg07bt-EwYf8DWkgLkMuScNWQFk,374272 -PyQt6/Qt6/plugins/wayland-decoration-client/libbradient.so,sha256=YI5npreF1w5IWA-rya6w9sk6btkAWVl-xTUyI0XF72g,44296 -PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdmabuf-server.so,sha256=9R0GZXJ6fQDIOa7JVEVb7ta_XskCo4DZV2LHr1HLidg,35832 -PyQt6/Qt6/plugins/wayland-graphics-integration-client/libdrm-egl-server.so,sha256=EPEK7EZJC3JezPdQxCVKahm59ADAJxjRgZm1tYC4lOU,35728 -PyQt6/Qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so,sha256=POmn6UE4ehvHrf3mTI34imrIa_T784rBWXxcgVr8nGI,23184 -PyQt6/Qt6/plugins/wayland-graphics-integration-client/libshm-emulation-server.so,sha256=uyYdI_Rf3AnOJ2TLzTZZfpmu7nYBtCNMtDLLQIGOKsE,27568 -PyQt6/Qt6/plugins/wayland-graphics-integration-client/libvulkan-server.so,sha256=DDI_0bMBdWQt8w3_5Df-hczJQ_l7eEAEiVKexaaXFcc,35784 -PyQt6/Qt6/plugins/wayland-shell-integration/libfullscreen-shell-v1.so,sha256=pRwVuON5jmRFBus5BpRi4VOthxNahGcoJaauv6Irnbw,43904 -PyQt6/Qt6/plugins/wayland-shell-integration/libivi-shell.so,sha256=kNLfHHr6ywiccJjzQAjr18JQDY5JJUaxZkWAEETQI20,64680 -PyQt6/Qt6/plugins/wayland-shell-integration/libqt-shell.so,sha256=n7JLK5w8d-JAOET8UMUCLNh5339TayheD2NkAONcNRw,52168 -PyQt6/Qt6/plugins/wayland-shell-integration/libwl-shell-plugin.so,sha256=GyOZ5w0hVuxoTsoao03fz2rKx4Uyken--0sBLDcwcRw,23184 -PyQt6/Qt6/plugins/wayland-shell-integration/libxdg-shell.so,sha256=mvASlFJVwFPbxY5GskWY0U6K7j1THFs8wE351_vvyUU,115080 -PyQt6/Qt6/plugins/webview/libqtwebview_webengine.so,sha256=ryeYV6d5bjlrxA8CtSgTNvjSTo4tTjcdXqNwt3y_zpo,61136 -PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.so,sha256=hHFYwH2q83nS57v-gOh4KClHZ1LCuxt-mIYVSbc45g0,56528 -PyQt6/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.so,sha256=u2OZIMX0e6PF-1gWy5Le8x90Ds8_kV77CqQ5YlaUGZw,81584 -PyQt6/Qt6/qml/QtMultimedia/Video.qml,sha256=yYVXLLTx1pJN4xGhord4fnYwGQhoie-m7aQLlOUzk38,10711 -PyQt6/Qt6/qml/QtMultimedia/libquickmultimediaplugin.so,sha256=DQbMGD3TAuIi15UyILrRYLA4Li2d0V8QxHTIerB-MCQ,23216 -PyQt6/Qt6/qml/QtMultimedia/plugins.qmltypes,sha256=wL8DyXLwniQkrAGESbmtOaFkXdAhLKAeSqITuTNFU44,69480 -PyQt6/Qt6/qml/QtMultimedia/qmldir,sha256=dWtN8uisyWb3Aczi9r4XcHEQdJwTd6MuLrDDrIjUqHY,243 -PyQt6/Qt6/qml/QtPositioning/libpositioningquickplugin.so,sha256=XKNwjiCnuh1SxByOtQ-HXqoFSbeBwihbqfxQ5IrwNDQ,53144 -PyQt6/Qt6/qml/QtPositioning/plugins.qmltypes,sha256=zOv4BMD_4etbm92vDulOHXip0bQpOnOvEtbImU_Pj_k,41012 -PyQt6/Qt6/qml/QtPositioning/qmldir,sha256=QXeldQlab1zpboaAiieoatGxR_HXbsK4wyb3S52uskU,226 -PyQt6/Qt6/qml/QtQml/Base/libqmlplugin.so,sha256=F_Vxy6mcP1g3KtJrAhGojUQNMNEvA4sKw6USNM1y7Ug,23176 -PyQt6/Qt6/qml/QtQml/Base/plugins.qmltypes,sha256=Nhm5x1-y6utxJ5N8Z9gnssNA0qs-2Nm1jacS1Jux1mk,129476 -PyQt6/Qt6/qml/QtQml/Base/qmldir,sha256=4uJAfr2aMplzmNh0fcPAdUxYXsC9MYgj_RPl8XdE_cM,203 -PyQt6/Qt6/qml/QtQml/Models/libmodelsplugin.so,sha256=jgdZv_e3w7MFwDMLsCA9jzb5hgHUYBLVstj7tRvUXeM,23176 -PyQt6/Qt6/qml/QtQml/Models/plugins.qmltypes,sha256=1SGI96eiiTqKGqc628iCb-Lssk_9jjSKx2NxGi4nPuE,51048 -PyQt6/Qt6/qml/QtQml/Models/qmldir,sha256=X7_HOaYJReBjFbb8Ha3a2WPr2HQFZZncsSYhJxsWK20,221 -PyQt6/Qt6/qml/QtQml/WorkerScript/libworkerscriptplugin.so,sha256=3CJgAWVCcABL6RC-PKutarLMNrUWu1vvq1F0wdkrSB0,23184 -PyQt6/Qt6/qml/QtQml/WorkerScript/plugins.qmltypes,sha256=Ug_ruLPv1qCMpYYgo0BuyOWbGG6FWvJQjN2QWjjZfnc,1358 -PyQt6/Qt6/qml/QtQml/WorkerScript/qmldir,sha256=dxd4fjyGutf7-VFFDN4jq8o3GFY3ewa-ojwn3qswcpc,251 -PyQt6/Qt6/qml/QtQml/XmlListModel/libqmlxmllistmodelplugin.so,sha256=Yl27MXFfoP-L6zHNcWhVQ4-2xQDwWa26VKHDiDyncq0,23184 -PyQt6/Qt6/qml/QtQml/XmlListModel/plugins.qmltypes,sha256=5vCYbGCjIseIqKd5vQuaRfS5pLt-oMDL2IjaYFRkcRs,3977 -PyQt6/Qt6/qml/QtQml/XmlListModel/qmldir,sha256=LvvZA0cU3WncwBvceEgp3NVepRsepHAi95oVPdbK_xs,234 -PyQt6/Qt6/qml/QtQml/libqmlmetaplugin.so,sha256=cn0ktEUuMSBcT1LafhCA0K4RUDTr89FKt5qXx5-q25o,23176 -PyQt6/Qt6/qml/QtQml/qmldir,sha256=JFZNFO6OsSZ-2sNUpPWFulh3PkE03iVCvNmfAZ111xY,230 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/AbstractButton.qml,sha256=VZT7okviXre6g3nS208jW1xAhyjbCqZB0f7kM8spRDo,547 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Action.qml,sha256=bcCsrK08YaZOxoWh4QWXqZk4EoIc2YBOED1fH6Pqsro,204 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ActionGroup.qml,sha256=cJvFbISjAYZ-Ie3bXHI_ayA9xTPMUcB0HerF-P65FKQ,209 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ApplicationWindow.qml,sha256=KiYz_XkvVY_7iuNJnJjBKhOQEms5xj-aHirebpWPV8I,293 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/BusyIndicator.qml,sha256=kGwlV0NAxPaZGW2gJnG2q1uSh3MJPAazgfl_k_42ykM,905 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Button.qml,sha256=7fL4oltGwt6IiOJj11rEypLpnCCyGj98q5ckSi7YXLM,1881 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ButtonGroup.qml,sha256=a-YOwiU5DIcsrUIdHEQfIjCG4PM8IXcxVHbdwwMbBFw,209 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Calendar.qml,sha256=roeLTFOeoUDRDQMbIXXscYJ1Gb0KGxaz5-MAyiwAfLU,208 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/CalendarModel.qml,sha256=MIGW5-ZIZoVBIs1WiT1ptDZkqvtFvsmLdoB7ZwZ8yU0,195 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckBox.qml,sha256=QiMRQ17q81WdlZN6l_DAxxMAIZbPA26uON6EwNL752E,2297 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/CheckDelegate.qml,sha256=LkTARJfl4svmfGFjkaxPk63PD-quUNTVtrEs5fCgqB4,2736 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ComboBox.qml,sha256=XpTvV18VMuHHHUL0ZEYWpCeO1UGQleKhMchsCLUOco8,4151 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Container.qml,sha256=_hBqUgJ5HQJt3DH-hYlbfSTs0FMRghu9yjZoTuney9o,526 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Control.qml,sha256=wWGV1Coj1jbkP9jCi35CclYTDcGMSg4CV9XnOPFi-Oo,540 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/DayOfWeekRow.qml,sha256=ziwliTmfd-varNcbWAG6b6UFqOkdx2X6kH5hf5GiM64,1086 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/DelayButton.qml,sha256=sPLLJ29oCcpeYn02fWeNYwRh6jtTYO4An01-64H8BI0,2422 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dial.qml,sha256=ohcvTtysAgh69NqPvHOxIJAHFM8EbW0gTvPb444Nj5o,1879 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Dialog.qml,sha256=fgaYtcXbTwswnr-8IH7yLBCNroCkkNYZqzqK3EMFf3k,1588 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/DialogButtonBox.qml,sha256=dRtY-40oB8nfva_zNOTHkJt2XYpHd6c97LSAOaDcyz0,1301 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Drawer.qml,sha256=tlHrrCrI4R8YVkGcNRphEPeV3_v2gmGIFupbzior4Dg,1586 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Frame.qml,sha256=GSSMqnq_g8SZBJWtXpbpxTY5dgk68PF1i1SALs3nALU,674 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/GroupBox.qml,sha256=Pu7Cyc_B0DUolwUqvNfZgJ2Sj2hujFL24qiY8I9lQu4,1282 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/HorizontalHeaderView.qml,sha256=gaPHA0E-euvO-jIxCNJYW21_mzH_AcETQ9IoDu2rkqw,1472 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ItemDelegate.qml,sha256=li1KyMhF5LAAgnkRSVIBGUepII78uogBDBtrFsP6ACY,1574 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Label.qml,sha256=lTkB8zO5xEmbOWiCbfUj0PqcXbpEwQ94raYHedNCxzs,323 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Menu.qml,sha256=4dhBAdGmoB6nHoMQNK2x7rB7m35Mn10lSIr-Ehw0HAc,1375 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBar.qml,sha256=g-HVvRU46MXagIOtLNPmz4XWDqFEskn8L7rgxeE4Whk,816 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuBarItem.qml,sha256=C7Rorq2zXEp_d_WbrzJFJjKz96LwrHu0nkpxBh-K8m8,1281 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuItem.qml,sha256=kh_1bXyUiGtx3UIFxjj7-IAkmhc32mGXLjNrrDbh1YY,2646 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/MenuSeparator.qml,sha256=35YLwxqH49KUa3y7Zm_b482Ta20rERTSMPLRFkXiG3k,748 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/MonthGrid.qml,sha256=rwF_riJOzL3rpKnzaWKrtahGv9psxfxK9iP4OCbRENU,1151 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Page.qml,sha256=-Q6MyR1dKCXycXhSbXfnBEo-PqZKVPwtoIKlw9mvw00,911 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/PageIndicator.qml,sha256=LVBSd5-jdmqRngqi-z14LDETL5VEOwsRr_5G-x-yU64,1101 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Pane.qml,sha256=QFmY_5WWmwgVbh_TS8qg-PRwKlTIJiDLfowJUJFHsww,640 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Popup.qml,sha256=hwH5786-2IIFTDqbqR-F959dL3Eg8SPvzj9ogrpx_G8,892 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ProgressBar.qml,sha256=xUxHNzgRPj9uHIjYyAXAcLkP3S2rgu8g6ixxpMNfhdo,1038 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioButton.qml,sha256=RkV0C_BsQaUJrk-2ECwfJpsJTU2gt995vgG6xJFgaBg,1991 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/RadioDelegate.qml,sha256=0RfYHteflfUgxO54kBgBTdYGpgPdaSETHV5iYvhALUk,2430 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/RangeSlider.qml,sha256=6t5bndlyLe_XwtXDYJoyeIdL4jsU9n_kBOke3kbFyQU,3273 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/RoundButton.qml,sha256=gUhrLlCRQWBdQEbLDspvyU3y70iyH3FVlfaddJRvL9g,1916 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollBar.qml,sha256=J3abSxIckc1ZcSx83fFJgQApDhSVhgZI0tf338-mcIU,1491 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollIndicator.qml,sha256=mqg2rrPkXf2iS_AqCOnjjuSJKPZcIoeOaJSuw7X06Ys,1260 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ScrollView.qml,sha256=ac54jTdn2C-7WeADicuu1H7dPmu9eeO97nC2906CVUI,1024 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SelectionRectangle.qml,sha256=a_fZMc2PyVzFTvKAUN7ffY7aYWpLIs9HEOiPUiG1BMc,787 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Slider.qml,sha256=M47KKcAeNbne6P8ZHX-skAaCT5CmG08V7KBfTAy4sBc,2204 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SpinBox.qml,sha256=bZtTtnNtQz12DbEhVaRhDCsCTPB4qRwwxuiMfATpiDU,3406 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SplitView.qml,sha256=zk4REy6sEo5s67QKdovlz-1-OsUefbiI8jygmA0ctgM,914 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/StackView.qml,sha256=ZjKZ45uavUxFcDW5d2hV-QqNgG6yRbvd0hKS15Aevak,1181 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeDelegate.qml,sha256=ZxtE3zDt7iYiwAbkCIderk8G675JG5-vl1RP3LWvN1Y,1548 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwipeView.qml,sha256=gUR-vzQqXF3BUKnjNuHxVODxREBDrnEmeF_Z2-kbVTM,1124 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Switch.qml,sha256=ldzZHH2nwdmTtBSxs2vlyFdUftMa0DSNCaofUAljOE8,2219 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/SwitchDelegate.qml,sha256=coiAOa41zpGiPOQavf7rftTHvYeaK_3l4VOMYAr87UU,2744 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabBar.qml,sha256=93Uav1t2TXduQw1uzNo3ZYf1ocF7MWVNipun3x_acp0,1102 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/TabButton.qml,sha256=HfpUg8Fb1gX1pwzyVcIw4jdYWleqGOa_KWbjHtrTnmA,1278 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextArea.qml,sha256=AUgAwy3bNN9pX0airVCH39m6nERa-_9r0C16qhjjpug,1596 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/TextField.qml,sha256=ZmWHkL1JQBPyz1BXNf6rbeZZMkiCl-CQmxklfPDPsVg,1846 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolBar.qml,sha256=biWHJq-hOU90FeuyYHVZ2uA8tOUKxd7aw-TJXXVY0Zs,653 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolButton.qml,sha256=w6VBRJ_erbKfgh9mF2LedfOfuQvE5KlBJ-zv1c4XvIg,1287 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolSeparator.qml,sha256=pkT8g7uI6FXGEJXqmnPAKOUH-U3yNvlW87GQJg3Tv2o,814 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/ToolTip.qml,sha256=AF6uSRCH_gdEeGk_Qh03ix6NORy2kLzuTFU87TZAK9A,1058 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/TreeViewDelegate.qml,sha256=Xo3yAVi5EdIvZnfvGxzH6AjZXDxzFk7npApM3Pe-6qE,3961 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/Tumbler.qml,sha256=7D1w-G_QUyBAiJuPHkE1idC28YcvNboi0Pk64kihiEs,1755 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/VerticalHeaderView.qml,sha256=gvcTyc3XsyuJ9oCKdd2Bci0hAKC9czdDeRa_fZ7No60,1463 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/WeekNumberColumn.qml,sha256=lJB6fyXlp_R4qBm2y2lKLLjNiAcw_s9eQkZi8rV6zWk,1092 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/libqtquickcontrols2basicstyleimplplugin.so,sha256=yqc3Z0K5O4fF3TUF-AG1m-B5Ivb1oHtAuV5--yMDnkE,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/plugins.qmltypes,sha256=MAAuJ_jCY8uFWE191fGUdVFTIeC-MnoSTKaJE_UhYCE,4205 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/impl/qmldir,sha256=ldu3as_NyqO5v1VZB5biSWZlBXZuvB9YR1RkjGT7e9k,297 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.so,sha256=f6BFaAV1_szRaweJPsA9oMuLmFmcr5g4EJmo1kN5v6k,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/plugins.qmltypes,sha256=GQVcjR4ePZhTQMG9rt_-LxyPyGGYLa-E_FsK131BmqY,10158 -PyQt6/Qt6/qml/QtQuick/Controls/Basic/qmldir,sha256=Ykx2gq2jw9-Ox493j3dlKCtM0v4xOZa69RcgrIc47qw,3917 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ApplicationWindow.qml,sha256=JS8AOnGZBEVJbRA9s38hOVQyY2SPYeLq99ItRVCiKsU,353 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/BusyIndicator.qml,sha256=joWX75MjYl4hReIJ1d8z40K9gH7WE_Vz8aKxagUC2_I,1155 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Button.qml,sha256=EhaGRbpOqNbpJN4X5WlUmxjGX1NSle9CnDXgAVZRUmM,1239 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckBox.qml,sha256=YB-aU48LvWeKipwRXVdGISSJ_WaRwq-QNDUDnbxoK5c,1533 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/CheckDelegate.qml,sha256=GWhg4pE0nRl97KQdfMck61wDusXgg6O2YaMbHQXgHCY,1943 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ComboBox.qml,sha256=w7udbbieDFkUxizY9L_FE-Bby0s7Tjjapxtnrn1x3dE,4918 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DelayButton.qml,sha256=gcfnqA0NvUWktwNw8waA7N3PdrK_9F9nasvldKUN6iQ,2791 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dial.qml,sha256=P9d1ux3W-ejA_-lJCSrcMFmNihrRaebxHFKKcaS-ii4,1459 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Dialog.qml,sha256=j5CEpeX6o5oVMdiTVd9f_t96YXySlrN8zRyoXI3DF9c,1858 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/DialogButtonBox.qml,sha256=CWnDQD5OlnJkPl16PMJ170JS51soLMvJ2RdfFVouJao,1183 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Drawer.qml,sha256=Xa48d3QRRx_qe2Sm06aKJoCIXSIEqZeYegVuh7KgyFU,1938 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Frame.qml,sha256=rPHRl5683x13F4bedPYcY2onx3rmKFBd-Sv9RUG7aj4,770 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/GroupBox.qml,sha256=oTao1AJKs6aC3SYyHmfkKWKG5xZqIiv_P-zg6VzY3UQ,1418 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/HorizontalHeaderView.qml,sha256=KM_6oAU_me7Vw1jeOcXHOETO43Mm4G5EwDanOpcUkY8,1764 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ItemDelegate.qml,sha256=AJ8RrxHC_LQc5K4DYsXbeBFdLl_FaVbp6I_RpQAnHIs,1534 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Label.qml,sha256=qDKdTO79g8WLGmQun7cT-u2SfcLaGCk0Y9PzhoSA4TY,390 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Menu.qml,sha256=u0MeBWx6FqmP7MAYm5D2E0PpsxCe4v3FWyizG2spUPE,1633 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBar.qml,sha256=gvsYq6v6RAUuSBZFQ1XgJCTEwqfqywVTBUzwwsEXNO8,1179 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuBarItem.qml,sha256=dlxjazmtZerj5HBkYFQUQEqUQnU2ZvHRjWf7ZgdNItU,1352 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuItem.qml,sha256=GnaUdSZ9CM_Br7ph0pBNWZTAmpe7mwxshvNeiS7t4wI,2561 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/MenuSeparator.qml,sha256=RUGY7Tkl55d_p0bcdkGBTBZGaY8EkgCceODCojUOPEk,820 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Page.qml,sha256=x1kMOS9BECmMFF_m4Ffn7Kz24TrW1XDIw-3Rb41mtUs,978 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/PageIndicator.qml,sha256=xgKReNe_2VN4YOXUeGqp3CKpBbuRb4ZG43XD10hu9vo,1163 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Pane.qml,sha256=faYkatLBr83pH9imxQ84dWkiV8YPcB-CPWJIDZ8zqio,706 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Popup.qml,sha256=HAwV8BQm5yF09r08Osph5xWPmGr_FWHyWs-EqqEMlt0,914 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ProgressBar.qml,sha256=dNl9eJHbUhy3tqwdZNTJqUMtAGJ1CYDfDL25jB1LUsY,2680 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioButton.qml,sha256=XW097uXViFctegQktV84an1gLqmT-baFqcTJ8hSiRjM,1484 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RadioDelegate.qml,sha256=oqjFmZPJ5-CI-STR8pVLmdf-d8IWoVIyyA3s2CLd1zI,1943 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RangeSlider.qml,sha256=rTONQZt6Dw-nH3uEBX_roG-wy-k0OiasJeti49LU7FA,2127 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/RoundButton.qml,sha256=FGUJ7l6j1K_gbvPNTmfKMYgQ1BV_x9BOUbg1r5Vg76Q,2411 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollBar.qml,sha256=qc-kEQWIJFTacUgIkGIvC4Quv1eWVHRO2gCCIZxxZcQ,1558 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollIndicator.qml,sha256=6DDYek4-DIyuMUcFBfTgZmsaN9e3plpayOLffSIG4YM,1327 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ScrollView.qml,sha256=V0RRLQFjIA8X7mFANkErZrNV7tpEK0hD9qsaMaix8H0,1024 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SelectionRectangle.qml,sha256=Eq7hEiUMjJpZY_R0uIzLdfGqsZpxLGOHbEgDl0IriXs,936 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Slider.qml,sha256=UViye_9SuWQFkNQintyR1cuMm-QlqSQjcGoJhsVKHWY,1317 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SpinBox.qml,sha256=UDPpVwJ3R4HXxjOpEbxCaqXm3uYOdxuuHZvnPVjldKs,4985 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SplitView.qml,sha256=8EaR447aEHWF_Qkeayl5wbfTijMyLqTDj0CqZLboRAs,954 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwipeDelegate.qml,sha256=CkTeO8CpyyZ6uTm8qSF4Hsik4uZ_sEnv_b9s_UUPoQc,1639 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Switch.qml,sha256=SJ_D0oyh_2ZY_2P0yyAEZdHbc2GXR_Bkday-2T9cSpI,1474 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/SwitchDelegate.qml,sha256=hx3uH7yXpB8td2YOAZrqTQhhXK7n-Zx5Y-cFL-zWUAU,2022 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabBar.qml,sha256=lxEsIB8g5TuhEvvfqpR2a3ECAgMQ1t9vJ3Z8OZFM4qg,1395 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TabButton.qml,sha256=ILiAp9O7u18sRPzj-V9lBjGz7TwD3G2uXgvZG91FNBw,2120 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextArea.qml,sha256=LGP-ZULqoQqyBF119eAtu2kS2FBwsZhtW0Uhe7_XwJA,1663 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TextField.qml,sha256=ZTiZIvXTfvC0wbxzkxCbrxLZ9rdQ3OyuISZuomKHkOQ,2365 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolBar.qml,sha256=Vr5_Bau2Nwq7Du3-cSeySXHehD9zFQJ7NN_kKsUkY4w,1523 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolButton.qml,sha256=_OCD7dCVjwfMTMXjdTvtQF1tQjy7HgpaOKb7np1MOkg,1226 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolSeparator.qml,sha256=p7P3OjWxZDk6jUaCnOxW_ofUDgyHxIjAaFf_J5rzSCI,1060 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/ToolTip.qml,sha256=CumEca9KnS0wtL5DdSFXgPdbTmAyt7shXTsx_IGwfBQ,1337 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/TreeViewDelegate.qml,sha256=BmNQSxX2Qs6LomwFLMJbfRNlduB44p3hzW9zanQIlNo,3859 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/Tumbler.qml,sha256=9d8oYVn9_DnIPmnkfCs9tImVrgWw698AzvUkpjnkWh8,1607 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/VerticalHeaderView.qml,sha256=64uFSs50lxKo9Jav8RVTKmdeieuDHYwvy-73Ofkh0So,1724 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/ButtonPanel.qml,sha256=mDuUaY-nBj8UREM97v5EEsc6Q0IP6jlv8EE4BG28IrM,1482 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/CheckIndicator.qml,sha256=4jDVuICr-EXW5Zkp_opd2SAwqVk2FmRMY4g87MpdZcs,2052 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/RadioIndicator.qml,sha256=3doMVLL6rqOKnaHWklg7qzNtiZ35NvAmKJrKAjOMLjk,1485 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderGroove.qml,sha256=o1Z2QD0cWyAsHpac8-CxSbYzpcpfNbEEy5vAywMCdVo,2036 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SliderHandle.qml,sha256=3oip84B3yjF8WLuv-w9GwNbDck1_aeCOfDL5Sd16INs,1522 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/SwitchIndicator.qml,sha256=Qe4uOfHs5ZG8Fs8cTfe9-6HpKwPQYFnNH0dULlp-_EU,3479 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/libqtquickcontrols2fusionstyleimplplugin.so,sha256=wui80ZPjY3sAPTzpJHOMemk6uLOpzl79PdJpj4HnxtA,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/plugins.qmltypes,sha256=cCIAJH7UVY483sh9QEjL0jWmjReBy2tsn3_ec9FCJlA,2737 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/impl/qmldir,sha256=Pko4HrAbj_GhS9EPovAsv8UhVsOoTMGrO1amHb_vW1k,734 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.so,sha256=6kUCGseZbHOSzMEP0X1Prxo-3r5UkUCbybmEAmtgnWk,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/plugins.qmltypes,sha256=nruPIlE305r9n4CYRp6FnZ5NAPE2BAKmDAIgdrHMpOw,5142 -PyQt6/Qt6/qml/QtQuick/Controls/Fusion/qmldir,sha256=oZgZi9LlYSW8PaNpEtGPSIvnAM5Na7oXoKlDOMSxYtU,3329 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ApplicationWindow.qml,sha256=gMpMV06PrCrX5V2kUhDc36xHCj6uyGMmo7CfgXp3auo,612 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/BusyIndicator.qml,sha256=eHo32ffzyL2hG5Q0d07jlnqJWqJbXraiDXi6c5fg5sU,2075 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Button.qml,sha256=u_w2qhCamDCurhLOupxqH9gndiDnDRog-IeC9OaOp4Q,2646 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckBox.qml,sha256=RlJzzyYblln4afT_j6L2sCyZyzyR3KJn6-R68oOFR54,2999 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/CheckDelegate.qml,sha256=VmS7NqRHA4vAAur9OF1EoAggBo3F2RtzlNfRmUBMfA8,3298 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ComboBox.qml,sha256=rGE1oP2DFOiDp1WlypQRusgTMk0E-osihoEM8K1_T-M,5819 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DelayButton.qml,sha256=GytZG_tNmAVO_xxfxIPSdLenYBxQfK_FX05zaVdrctM,3857 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dial.qml,sha256=yWN0eByt9oSNTOjM6lHTLaUCKrKlQ8QBXSMZ725Aqds,2591 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Dialog.qml,sha256=XLcfwIzm5r1Ekz_jkjT1tFIK9MIdUJSQ4OU9TvlxKME,2624 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/DialogButtonBox.qml,sha256=l_LFWTVWTLihR0qXD90ECc6Z1oBCpsDXjUhI9As5Oj4,1808 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Drawer.qml,sha256=8THeIuoDMr6DSX2DJsbVkZOge-ZxurwmVXa_q8jp9D8,2133 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Frame.qml,sha256=yLfVxAyFZPpMcuaAsQxkp_dkp0myB3zvWzb7NeDuee4,1338 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/GroupBox.qml,sha256=AIJsGaiMtDmmbPJwDUsI1bFYJEjmrZPdIoJ5oJWQGmM,2288 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/HorizontalHeaderView.qml,sha256=gaPHA0E-euvO-jIxCNJYW21_mzH_AcETQ9IoDu2rkqw,1472 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ItemDelegate.qml,sha256=RR-Y18LKiNwmtEdvibAPtcAChoG6RpxpC53GhM86AfQ,2185 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Label.qml,sha256=wepVosRrhwyWVJUJkAga10PeqeCB0fN5XO6xC137T0c,942 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Menu.qml,sha256=y3ypucCriECThgDLGmdmbD54BByAM3hxuEZ5OcdjBwY,2408 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuItem.qml,sha256=bQtW1PnGp8vgyTKoTQ2vtVknvFHq487ZceS-SjCklLs,4038 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/MenuSeparator.qml,sha256=l7iNV5XPosOK1A6Vbp2xNSvo3Ig7UZ4NiexYxTUY3nY,1651 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Page.qml,sha256=xai0xvpw-cYzb48a8uGdq8sDHqztsqDlckOh0J4FL40,1624 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/PageIndicator.qml,sha256=mxp5wuoJKWlDgNbAhlzVqbi79jWVVEkH1VdaYHiqTaY,2053 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Pane.qml,sha256=LfbfZL7gTcZLtJueFVhUEmOXLg_YsayUH-xJtIc1W1g,1336 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Popup.qml,sha256=96kQi2nipPjyzXM-uzXbmlq1NkpNq7lV5hvTIIp2jns,1782 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ProgressBar.qml,sha256=kPFlXkfBANDg67LSjC60XJUpWedgFjYSfzhL8IhxAsw,4278 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioButton.qml,sha256=aVSzn-y9uEvylJTBCAOVwD1BJXZBtrigS3rgTNjotj0,2806 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RadioDelegate.qml,sha256=MdedvB2bx_5MtZ0r-TqaJaxNQzJZJt-xtXNgWMxtfMo,3096 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RangeSlider.qml,sha256=H08KPANMXvQQv2b4H2gpV-NS8izm8__PQnhWwgJTbNo,5009 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/RoundButton.qml,sha256=3bIDEsMOhPXlSyLryvP1toVG0Znc7zcbJ8YdAS8hUoQ,2662 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollBar.qml,sha256=azqfA6LNkwLMbYj1DHcQhissZakVKa_PMtlZzHReITg,3184 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollIndicator.qml,sha256=CeL8Mw4z_2R6w9tlmqqikiuOCQ0qoHHZBOxsNpqAn-4,2705 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ScrollView.qml,sha256=pBzg6C-iYajx9bIRB9sZQwBlWRILbkY1qCJuR3EyPKQ,1825 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SelectionRectangle.qml,sha256=cm8GQD1PuPa1G_gSN72Alg0oEfu88BlruUM0g9VIcV8,1173 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Slider.qml,sha256=6I2lD0n3b76XaGq5vgnxg8zS8LsMykNfc24Im0xXA1M,3849 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SpinBox.qml,sha256=-ZAkesxY1SNRU6hL6kAvwtXwNmzIry8-YnKAdpEx6yU,4387 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SplitView.qml,sha256=U-wKwLiwKidhIDHvkI417uY3HaklzMubjzwsK9mvv30,1121 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/StackView.qml,sha256=yUJtCbCKrOpEI06OOasU2yUARZS5-gtvbBufoobBZJ4,2090 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeDelegate.qml,sha256=b_EsL2r2Dd0CJOCD_WM6HLNUnUxCzdzRXRABc0PhOhs,2291 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwipeView.qml,sha256=uPW-46iDWP_xF0l7T_C4gGVDu5C8VXGQ7Hc1pTVqNow,2069 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Switch.qml,sha256=fvdq6D6IVRPM5PcDj5bESFMalIACXb7VHIv9mcW8oBo,4170 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/SwitchDelegate.qml,sha256=MB_ZDdhRcBkuWAeJgMfGdhd9wmsI9tYLjJioDtB-CVI,4622 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabBar.qml,sha256=t3nvIGIC2bG3riyhKDDxBO5pa34uvfS-lVkQ-tyI-FU,1964 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TabButton.qml,sha256=ayg0MnWA3L2JJSZj9r4a0k5F96ptoGAEhJp0IGdL9BQ,1962 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextArea.qml,sha256=HqQ75jPGCyH62lcM9n3VzobKobf-yA06bu1RtOMokjI,2524 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/TextField.qml,sha256=-z1OPZClXghJ5K1k8Uox-XjnALWJe_yX1cz_5guLQdY,2462 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolBar.qml,sha256=xbZPD0evifXE8Cjv3hALesAe5ugKWLXeHPNj9UGj4_Y,1478 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolButton.qml,sha256=ae1Wr1p-n84wEQC1g3E-4bhMftHGoXkxRBhSyNzWu5o,2108 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolSeparator.qml,sha256=X3AJnpsvHXBwFA5fcHzjFN-9q9xOY1HALIislI_4Zi0,1851 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/ToolTip.qml,sha256=eXSiYn0ux3xdGiyeVGEIGJLhFueMmc74XUSEO1aEBWc,1923 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/Tumbler.qml,sha256=z9OXYlanlzQS6Xxsf6VD59l4DKIhfPrwg_osYHDxSSM,2324 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/VerticalHeaderView.qml,sha256=gvcTyc3XsyuJ9oCKdd2Bci0hAKC9czdDeRa_fZ7No60,1463 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/OpacityMask.qml,sha256=SBTnW1da3hkrmmxqI3hMISDbnj-n3HeKOzLl98btYzw,876 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/QuickControls2ImagineStyleImpl.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/libqtquickcontrols2imaginestyleimplplugin.so,sha256=_Yjsp0ueL--3F4cBE6LP-0D7j3FBn0I7maV4_mfvLu0,23208 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/impl/qmldir,sha256=dKYAOzcCCZQ_VNStG_W1SCLx3yxSwBFogK1HYYIyVgg,375 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/libqtquickcontrols2imaginestyleplugin.so,sha256=VnFYzttdqWbBvC6d1mhpf0G5LPoroq89vFx9hbQppD0,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/plugins.qmltypes,sha256=Lh9972igaSzoUO6hiLvivyhzE-ikubgE-_2DvXfxAOU,1347 -PyQt6/Qt6/qml/QtQuick/Controls/Imagine/qmldir,sha256=4i5v_msrbxs1DE_J9jKLGtSwaKdqwPUqfudlIGCWA9U,3229 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ApplicationWindow.qml,sha256=mFTCqdzxJgHYkxo_YfXv5AGhKVmjlsmHCXRzxgl6ay4,322 -PyQt6/Qt6/qml/QtQuick/Controls/Material/BusyIndicator.qml,sha256=vkCVQOcQthHa7MhVk4o-zweYkEi-Md9xFosnELV7cR4,967 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Button.qml,sha256=ecLiWRC-gH_AxeQrbbyL3KEbYgnX74X4BYcCeZ4jf7E,3365 -PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckBox.qml,sha256=UdZ_Vp3iDNbpDwS3M3UTBS7R5anKJW88duxAWx_Xbg0,1969 -PyQt6/Qt6/qml/QtQuick/Controls/Material/CheckDelegate.qml,sha256=mUpFgZabmTKk4hvFv6UB4Q7h92bxEff1IZxgZlwCzwM,2334 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ComboBox.qml,sha256=DA5aYsn2yzRRw-LQ8N6WvWhkcHltwtbqSlvbEvgrN7c,4897 -PyQt6/Qt6/qml/QtQuick/Controls/Material/DelayButton.qml,sha256=_Uay5z_q7svJ6xGCV0RnfmMxaKV6URmfcsM3U3W5GAs,2822 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Dial.qml,sha256=wmIs1tEMMXYsbLYMRK4JVKHReggXUbcoo-bjKNmvckk,1834 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Dialog.qml,sha256=k_DwTSUoOMzRKrUS4L5OmOTX8dnCUjpEuTUDdbvNWN0,3340 -PyQt6/Qt6/qml/QtQuick/Controls/Material/DialogButtonBox.qml,sha256=3guiEyk219B_hyDCSUYjGPj1nvl8SBIr2MsXEWBfkec,1608 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Drawer.qml,sha256=V39VoyI0yiNEFmxrK2-g5VR1n7xms4vWvL2m7ZFvcDQ,2201 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Frame.qml,sha256=rqbMjqgSPRYsn1JWJckkkyXW6Nh_VPjTCnTS3i70lHc,1175 -PyQt6/Qt6/qml/QtQuick/Controls/Material/GroupBox.qml,sha256=cJptUCsFMKKAZDR8ESwMGPMM4XIQ0guprfAuMZCdGbc,1896 -PyQt6/Qt6/qml/QtQuick/Controls/Material/HorizontalHeaderView.qml,sha256=UuoyKXtXTMbuGwDgaF7uEx4_hFxmlrBSa4n1-ubu9fI,1593 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ItemDelegate.qml,sha256=-z6VqGahgwwX6nC6VJ1wmf7d7DlSWEm-2DXp2wCpsIs,1848 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Label.qml,sha256=gydYbICJ9x4Kx4e7DzBkIbRWxnfLDJ7rZqUqiG2WbSc,355 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Menu.qml,sha256=CGphbN1KuzJDlyI0RHSP3ya-MG3ns7Uung5CsTPCZcs,2584 -PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBar.qml,sha256=TrV0IoGc3x_cLuU-0a_aMu5O7WyYw_Q-Xec3T4mHAHw,893 -PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuBarItem.qml,sha256=yvbLS8AFqEfl3Ce1HzosHLY4yOtaXCY3BONfHw0_U8Y,1707 -PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuItem.qml,sha256=GWe_oJzzFgVth92_PjqvmfsibEBVARmbPTFIslOt0Jw,3028 -PyQt6/Qt6/qml/QtQuick/Controls/Material/MenuSeparator.qml,sha256=2DyDZKrO1McN7JoLqoyr7-8H7v5eMOncRiN9-efHsNo,737 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Page.qml,sha256=iuzZT3OGNxBSkqdN83AUYljEcKmz3RrGPkL_KTd_qe0,1137 -PyQt6/Qt6/qml/QtQuick/Controls/Material/PageIndicator.qml,sha256=0xqlynTz23DANVW-2e3KzR_Z55sDiaKWAIei3TUnlSU,1369 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Pane.qml,sha256=-LkhWshZVXHTBusbeGSeNiSdeS_PC9akhL6CtavrzQI,1078 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Popup.qml,sha256=BIs-Rygj_HkgLmwQHYwT-92JN0w5DTEPfFbI8LMxMw8,1956 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ProgressBar.qml,sha256=OV7FyMJyP27PaBqFUqqQ-BTS7SLrAqfgoKnr8NMCs7k,1141 -PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioButton.qml,sha256=RnY-bbOCT6L8dyDUq3kvLfn0cFEuKU74MXkOlJiD4K4,1959 -PyQt6/Qt6/qml/QtQuick/Controls/Material/RadioDelegate.qml,sha256=jAbvkPWYYIu9oX-JTwHB2bpyhE-adBS8MmblIFmX1xc,2321 -PyQt6/Qt6/qml/QtQuick/Controls/Material/RangeSlider.qml,sha256=wrDN1ZMfE8ciX1B_JdbKc1AYXtnKPCa5wIO1-eicERk,5807 -PyQt6/Qt6/qml/QtQuick/Controls/Material/RoundButton.qml,sha256=cafhdKA_RWcSVrfb6EIm3KR2SwJhmaosM7fbv5KXc1k,2877 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollBar.qml,sha256=X6d7SQzapNkwr3x60O3WT2CoFT8PATzHkcvmsZtukmc,2076 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollIndicator.qml,sha256=xmr38Rb8NxZpjdf6iJTAST0y1yIy6mFZghRwfvpxxBs,1276 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ScrollView.qml,sha256=V0RRLQFjIA8X7mFANkErZrNV7tpEK0hD9qsaMaix8H0,1024 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SelectionRectangle.qml,sha256=Xw21ebthBabqbJ2T1d-aYvLjb2YaXwo35c4ymbGeS1Q,848 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Slider.qml,sha256=ncxEXy1Zggu3NoFtvUwcSGlOCbub7ZgNOGm-psDGcfw,4834 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SpinBox.qml,sha256=98jWWVdYl_p0fQKgNTbhNQiZYKRJawOGWAE4V1Ik3i4,4546 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SplitView.qml,sha256=I-RkPad4VsIUMZLIj8LrIpbZtjQXbF3ziyVSCZFe3d0,1600 -PyQt6/Qt6/qml/QtQuick/Controls/Material/StackView.qml,sha256=WHNq5VHA9HM3nYTaWo9i3rKbXYEVVbv9h_LfYrmUXw0,1678 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeDelegate.qml,sha256=tAy0WPgU0dJMq8aYqXNLpuY06EOpegWPuopDiPI0_Ts,2155 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SwipeView.qml,sha256=f-QYCIa5xiDnmXiZUBEPuMRIwOlcC50DPNzd5VYjAWw,1157 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Switch.qml,sha256=I1rMHAEJeTC-ySJg49i8fOzITG-gAT-uoFpC28DVvuw,2367 -PyQt6/Qt6/qml/QtQuick/Controls/Material/SwitchDelegate.qml,sha256=jLEOliI_PdzXPGdRxhovI_xhjzSzNlOMuLV1fS254Vs,2373 -PyQt6/Qt6/qml/QtQuick/Controls/Material/TabBar.qml,sha256=gcIO0KLRii9kvYppu2Sfffj13ETX28GT-qE9b8bSDkE,1736 -PyQt6/Qt6/qml/QtQuick/Controls/Material/TabButton.qml,sha256=Ds0Lg7P_WvUxfkjYYR-U-Adoy_lteRDX-kqtbcMnkMU,1496 -PyQt6/Qt6/qml/QtQuick/Controls/Material/TextArea.qml,sha256=6KDFXMzxyHDthWXx8Fb6aEEWToXElgjiYl96dTawM4g,4256 -PyQt6/Qt6/qml/QtQuick/Controls/Material/TextField.qml,sha256=us7LcBx84V7VKN9E0xO6PluS3HUQkq5nVpoWA99goIM,3724 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolBar.qml,sha256=y9ljv27bXIw1c2_MJY7SWxgACX6lgoXCHCr4YguSENo,978 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolButton.qml,sha256=W1W7vBJJHcB-f7EEy4WhOu1Y6fMJc_nrwtgNOVn074Q,1869 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolSeparator.qml,sha256=3vcpZnin2SajmS8Rfqx69Lo7mmuhCP4WD-yHUV4yIps,841 -PyQt6/Qt6/qml/QtQuick/Controls/Material/ToolTip.qml,sha256=FlTmCzKMA5ZVLuL_U1Dh8pGIjyq2IjmxKjfPrCb3yy0,1516 -PyQt6/Qt6/qml/QtQuick/Controls/Material/TreeViewDelegate.qml,sha256=fIUmivhaR537-sEHEF6fwHlAlZchMqpV9WFF_4ooiI8,4458 -PyQt6/Qt6/qml/QtQuick/Controls/Material/Tumbler.qml,sha256=8Uv7c0278kzJD1ofMeRjWI60nnKQZgbpL4pOspzl3lA,1574 -PyQt6/Qt6/qml/QtQuick/Controls/Material/VerticalHeaderView.qml,sha256=MWT9AEC5CryJjwJu7G4cSZ6ArkwXKj3Zn4ayAwFB578,1584 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/BoxShadow.qml,sha256=jiYdqk5W_7w3KCRhEnk_JUdUKbK7lhBUBBc1XoTr4lI,1674 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CheckIndicator.qml,sha256=3d0bK-0PheLYaJzBut6UbnCQTJvbAoUGZqLHxxubcb4,2425 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/CursorDelegate.qml,sha256=ZHV5YDQgkA2XMyQzETkAmV2rM8fxVUcJYtq2iRxVI4w,958 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/ElevationEffect.qml,sha256=joe4ExxBPcHCSa7uqFptB5-3rt5IDYo6fj-SamWO4SQ,8360 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RadioIndicator.qml,sha256=Kzyb9zdkoqOFxnEYICDKts3rbs1cDw6nO9m_wZbFVl0,1470 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RectangularGlow.qml,sha256=xyA9nRj17hQY5KSe3kLwrsElxTEWg4zHQYFXv045igo,6474 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/RoundedElevationEffect.qml,sha256=Df26OieYQ1fB3QYeqP4R4HpPZgYpoBxZHPKRjZSF2pk,1728 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SliderHandle.qml,sha256=N9koBsUL-7uqx5TD1gBGtKxIpyZrxWwOYQcsShjaedk,1196 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/SwitchIndicator.qml,sha256=ifxrJ9atK8r9MPfgSIa8izv1EeL5n98at7CagGC6U4o,4122 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/libqtquickcontrols2materialstyleimplplugin.so,sha256=3qSim3MZ6eMIi7ht404stgWORdL2A820M5Epyv-5QwQ,23208 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/plugins.qmltypes,sha256=t5_6fIdDplRn3nGba9GPT2m7bH9U6i-rB63VFKTwk68,10908 -PyQt6/Qt6/qml/QtQuick/Controls/Material/impl/qmldir,sha256=6_2jCar5fQ-H4whSnVG4OFS5sfGp8Plrb6y8Vu57iLo,1047 -PyQt6/Qt6/qml/QtQuick/Controls/Material/libqtquickcontrols2materialstyleplugin.so,sha256=IDSwzeBhIU6p1dmZ_r1E-BkhmpoaNoMyrYQvrFu7Yx4,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Material/plugins.qmltypes,sha256=iQDJ-FvnZ1-5MHBwiwx32FMv3sj4O8GMDq8ZD58npo0,21644 -PyQt6/Qt6/qml/QtQuick/Controls/Material/qmldir,sha256=Ch_ex41ZPJIi_0V3MEaghFpI4l3QA_BuR0W-Cn5D-4w,3451 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ApplicationWindow.qml,sha256=Q0wUNui6y_wL0aDSP-DnclVlbY7aqDdTzvEGNuX0qeY,594 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/BusyIndicator.qml,sha256=x9PHkfOG7VNiJI-YqXIKZSKJA8_L_M7CRzuC_MvHnvI,942 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Button.qml,sha256=wcUdmSxEKCO5aQHe6hBPcSxyqu03qNw7Zs0IFtBgsVw,1891 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckBox.qml,sha256=H45WOg7jHhqqSlGWNZssz7oPhsfzimQca_3DHNT1FGM,1545 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/CheckDelegate.qml,sha256=xdaJPbGve2iOpv7FYD6SzYG1ltFVywch_50Kt9b2dfM,2459 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ComboBox.qml,sha256=Y8Bs41DFJLmMAOu-0GwgGDqIL_kNK2wyB8cEe1LbAq0,5333 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/DelayButton.qml,sha256=0R0aL9BTbzzwgWNBpGwXlCW6h5vUzZeCDQiYlpys-e4,1907 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dial.qml,sha256=0YkcF2GEx3avfsjKXJ8GYFtwEGYHiyBc7t7TtbGBY8E,1943 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Dialog.qml,sha256=8IvOfC4eoEX9uwDXsFEYi6Uc7_UzZkZ8xNGXlBR2gjc,1817 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/DialogButtonBox.qml,sha256=hMmth_7gJDpm-pKUtAFm8c0LEBIuSDTpxTiDZNfO4PI,1480 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Drawer.qml,sha256=fD5Rmo_2MhxjDJwvFL2RItvko3WBKZkU0u8M2OVUSP0,1587 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Frame.qml,sha256=xvI8XqHLgLP_fNXwhwCHJVghP5YGEXQKc4gkz4wSxSI,700 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/GroupBox.qml,sha256=C2ynSLs1gX7X6teSPguTdfcWAiBvWzrQ-Rt_pEjq9pA,1349 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/HorizontalHeaderView.qml,sha256=FdDUugc69QeNfi-wrnnki__SFn1iLxWYKMREK2OliJo,1618 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ItemDelegate.qml,sha256=uL_sgOeMwXChluxP_rCQJZPgR2dml2mfuui5wWZBD5E,1934 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Label.qml,sha256=cuoOxdOURhXf8YFKJOEu0TjNPMnVwu4icAL7cuiPXXw,359 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Menu.qml,sha256=mXZy-6rCReg7uJQuoAB1VdB56h52NDCLgqGtP2J_BEk,1452 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBar.qml,sha256=-qdG-vorp5s6nGlAJIIu2dMf2gpV6znwCj5EzkBTrnU,863 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuBarItem.qml,sha256=-JLuJo6l4PCuOZBXa8rMXc7xMxAQoUd-POrba6lrfS8,1847 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuItem.qml,sha256=NPmIbL0CmYpMXNBVShDafqGMduH29ffNYro1Ca96iY4,3313 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/MenuSeparator.qml,sha256=Jzo3zyasBh3iy0ezGtMq88DxbevlKZlkxm2DVbubOMc,864 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Page.qml,sha256=ubDvfy_Y-pMO7y69KEjy0w5FJyIA-0fCpjXK3lP5kOY,922 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/PageIndicator.qml,sha256=VTukEUYMZpqvUURSrhOa-95t69eWfRIraAcsNVM4UBo,1130 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Pane.qml,sha256=o6B3nJvRhRfFWCYKtUefyj_CUpdU-EWAj22tY6wrD38,651 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Popup.qml,sha256=cAiF0DVGPwufGkeITmPsBDbn2EB697GmkbFarjVcZvU,947 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ProgressBar.qml,sha256=F0USC6nTlEHR2U0d_DdxBdF7pV6qe60cdPhqe8NKNiE,1103 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioButton.qml,sha256=LQX4RYyggl9Z9LR9ebSrpq5TGVyk1ybuVSXcTD2Jr5M,1548 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/RadioDelegate.qml,sha256=KPNHfDZ7VPMvw7uIRPrKVvl7bq9mGNd0Y8yNkTv449c,2459 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/RangeSlider.qml,sha256=hhmXXSfwVEr1idFWqbfeNNpLLh3DekoaYvAn4EykPsE,4030 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/RoundButton.qml,sha256=D5tgFwW0AFjNixnX7YiSmYfFYPUvqfx_IRNX_C7QX1s,1929 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollBar.qml,sha256=h9s5bifFDiKuVhSA8hbGzP4zZI0smB084HPenBl60bY,2125 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollIndicator.qml,sha256=gyc0ekRrsbzMpTSs5oeBRTMZ8U1dWYPuVFr_aZcSg_Y,1385 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ScrollView.qml,sha256=V0RRLQFjIA8X7mFANkErZrNV7tpEK0hD9qsaMaix8H0,1024 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/SelectionRectangle.qml,sha256=Rege7UUJPEumncf3wn07zgXfjkDqf-euajuyEQ2tePo,983 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Slider.qml,sha256=q14esYo3mbzl7TjS3e9CK6Oa4sOJpUNTeYVfjZ6vJGI,2966 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/SpinBox.qml,sha256=Ri3d89SCFcLthb3rW6Jmr0kQteLj8rZpfhcOVHEUC6Y,4871 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/SplitView.qml,sha256=NM3dI8lP09Sv6iPeOLuO5FllJqKlOxd9syfqcFR7Yyw,996 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/StackView.qml,sha256=Q_uOhodfjRXiurraUzoRlzhCrGIByQKml1DaOo8YhbY,1705 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwipeDelegate.qml,sha256=SE14E3TXQ5y39QAa-lpN4_Rk54Hp9hyoZ3YVvfzm2DA,2118 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Switch.qml,sha256=7wGoHd7DHiVemcCDx5NrrogaxMHX6FHEHIK8gTj8xMw,1544 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/SwitchDelegate.qml,sha256=wa23wjWqzyxdlWZe9-X6ZQbP5WNk9Uw-trDKxxoihJo,2461 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabBar.qml,sha256=6zAaH81irOOZtnoIG_cQJCj9gOt_Y1HpdI6Zz8J-6WQ,1182 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/TabButton.qml,sha256=QtJzVfaSwTpAQFcCzHZHvcinjdsGj1_0WRTBTOM5ZbQ,1395 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextArea.qml,sha256=OBl4jTm5lSZwMtuEpttbxGJwP38pthIvr1n_sIH8oIg,2601 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/TextField.qml,sha256=xutIIrqnqyDiijgbbI4eCP53KYsJhXzhoj6NuXPfQ-4,2584 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolBar.qml,sha256=XRJPUi53uKx4HBsTTn8jA0VbTab4blaqmkDa3es9Arg,699 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolButton.qml,sha256=MyMeD6NXgxllGz9lDhqgr_nEiOA5TmAGH3HpL0_GUt0,1603 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolSeparator.qml,sha256=5KvyfSbas1Wxw6F_y3B2SLkLWtfL2xs6g5I-mH2DxPU,914 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/ToolTip.qml,sha256=1yS2_mxHwGQ4wcQF-HTsplJ2HezRuGHIY1D2jd4aahw,1240 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/Tumbler.qml,sha256=xhMxfD754CdyHD0DW40dy7yi7WNSb0C3mTbo8xD4pZA,1666 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/VerticalHeaderView.qml,sha256=B-jlyDNb_VG-MmkNAWKTPgMc7gd3aClLbmIwThbUWc4,1609 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/CheckIndicator.qml,sha256=1Gpvw4u4NGIKNmvIbyb_yKIq4yNQRIlCIkhWUN4EkPY,2250 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/RadioIndicator.qml,sha256=XaakmNtw7ms_SYULQt6VKmndgPnr7-6pnRWeqHpp4wU,1780 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/SwitchIndicator.qml,sha256=3gIjsJ7jLYVEXjzzwRb50D6F6RuPzmfDAaxmmp9-Jbs,2084 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/libqtquickcontrols2universalstyleimplplugin.so,sha256=46bQMpay4eSJYyl-1mvrM8nifq5fgJIHS8br8i3iglE,23208 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/plugins.qmltypes,sha256=cCzzVWvl7YM6gdr_TVkGTGF9ylJ-QFUr3qWe7XLN80A,3600 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/impl/qmldir,sha256=43-cGbcAzht4tB69jTX5X4diTO-bkmVgy7jq-yTnT_g,549 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/libqtquickcontrols2universalstyleplugin.so,sha256=4F_vscmtA_xON9MvOrWFbBS-TuRlmQh6KzzApXQUVbY,23200 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/plugins.qmltypes,sha256=GmL34oqnIiJxXTpixBk4lF4xSPvaKxqGlRK8Opfayf0,8862 -PyQt6/Qt6/qml/QtQuick/Controls/Universal/qmldir,sha256=he6CEgY7IS-ILAxafiEZQ0LAAYHHO1ppZYkcITyKcX8,3316 -PyQt6/Qt6/qml/QtQuick/Controls/designer/AbstractButtonSection.qml,sha256=ye3zjcnZTcCU07JmjKcDEoHiaykS_dmUZ5ybY8RIVME,2758 -PyQt6/Qt6/qml/QtQuick/Controls/designer/BusyIndicatorSpecifics.qml,sha256=ELnhMmGOL_lW4auyOZquJh2uoWNnmTTfMbhMY8ZZVt4,947 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSection.qml,sha256=IqI0mFXkwnpWbyRH1z45FvZkjr_Oamng9fckw8NYWgs,1208 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ButtonSpecifics.qml,sha256=9qSIeGv0Nnkm5VbhZQ6xie7wDnEj8NZ7l_Z49Ubh9L0,523 -PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckBoxSpecifics.qml,sha256=wnrEqrtcalDZpNlu98sZtuHdFfv_BCWu1t0_qVRPRks,556 -PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckDelegateSpecifics.qml,sha256=586qk4C7wT9c-Ji1zATDJB-g4eZF600zZQz3EzCkFfg,622 -PyQt6/Qt6/qml/QtQuick/Controls/designer/CheckSection.qml,sha256=c8H6WMW5uav5mcdddVfZBBPAuyHNpM5ODIujQmQXljc,987 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ComboBoxSpecifics.qml,sha256=fDFILp1S0JN14aUZElFtHF-sRTeuBsVbzUnOsfAHQzM,2365 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ContainerSection.qml,sha256=qJd8UQGxtToDfZL_ex7l-vbT17jrSoXftF0axp89V-k,671 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSection.qml,sha256=_NZr6-5AeKnUWYHbmU0bLow1Sn52A8MavyzD83xD-Jo,2517 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ControlSpecifics.qml,sha256=9Ow9ZkU1GbA4tWMcCrCLkNvxAd40yTNruYstr1ou5Hk,405 -PyQt6/Qt6/qml/QtQuick/Controls/designer/DelayButtonSpecifics.qml,sha256=fTBgF7RDU9YoepxSJuVrLUmhSqu1aMnDDfDn7kXPxVU,1049 -PyQt6/Qt6/qml/QtQuick/Controls/designer/DialSpecifics.qml,sha256=5mfiQXrda4p-8dqmRo5WdX6LtTIH8sf608eKZGwXZtI,4171 -PyQt6/Qt6/qml/QtQuick/Controls/designer/FrameSpecifics.qml,sha256=z4IENHjXqTZ1wGufAioO2saD2qZVx9mtmyIWcapw2-U,458 -PyQt6/Qt6/qml/QtQuick/Controls/designer/GroupBoxSpecifics.qml,sha256=CG--ZFPEA5MG1oN78geuOgRRg-qMVQr9ENan4dGVB64,896 -PyQt6/Qt6/qml/QtQuick/Controls/designer/InsetSection.qml,sha256=W7DRil2h5PjNiY_4JYBe93Bv-q5Fi3Z1GiZ3mhMC0jU,2350 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSection.qml,sha256=hdiYXlzH2p9M9CXyS_FxsNcL2M4-7g4Amt9YumalVUQ,657 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ItemDelegateSpecifics.qml,sha256=vFKZlqf5tmUA7pSfbN2K9l3qT-kswdnXv5_dZTASULI,529 -PyQt6/Qt6/qml/QtQuick/Controls/designer/LabelSpecifics.qml,sha256=d8sICn3dtO-vBuV7ESAm0jW6YWZ7ii57-r5FDmgm5qc,1131 -PyQt6/Qt6/qml/QtQuick/Controls/designer/PaddingSection.qml,sha256=zRgVaSVqTZCeg1YqBJOuOWNL3Pt4Hc-kUBk3--UfEf4,1974 -PyQt6/Qt6/qml/QtQuick/Controls/designer/PageIndicatorSpecifics.qml,sha256=LJTiFe552nXS9T7r7k_XYj6WTb6BC5Mj0Pi855nCLhA,1760 -PyQt6/Qt6/qml/QtQuick/Controls/designer/PageSpecifics.qml,sha256=Oi13a2GVEOovSf-cJHG7vuK8rx8zpIcrllGufQApAII,1805 -PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSection.qml,sha256=J4rPQd3S1_u_P4vkIpxVbibXT4BhisoDcTqz7Rp68A8,1140 -PyQt6/Qt6/qml/QtQuick/Controls/designer/PaneSpecifics.qml,sha256=z4IENHjXqTZ1wGufAioO2saD2qZVx9mtmyIWcapw2-U,458 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ProgressBarSpecifics.qml,sha256=N1e4P0UECIisNLFQWaI3Zur-52libyv5i7LXpXH8MV4,2596 -PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioButtonSpecifics.qml,sha256=HHUeLcSGPSEpWC0KlWnHziAVfjjQ3WMjerJ9YXLXGmM,468 -PyQt6/Qt6/qml/QtQuick/Controls/designer/RadioDelegateSpecifics.qml,sha256=vFKZlqf5tmUA7pSfbN2K9l3qT-kswdnXv5_dZTASULI,529 -PyQt6/Qt6/qml/QtQuick/Controls/designer/RangeSliderSpecifics.qml,sha256=fJ_YDM07h2Yy84DGStjWj5UIzSeGAxsH-qrkp8D8_D8,4971 -PyQt6/Qt6/qml/QtQuick/Controls/designer/RoundButtonSpecifics.qml,sha256=voGHM999S_T0V3n_hOFETQ0uB2iPubE7UD0mBECSxR4,1067 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ScrollViewSpecifics.qml,sha256=Ecq7Q4hCwUJ8j30xlkAbNVPjXMlzGWt4ta3Td8t_fP4,1499 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SliderSpecifics.qml,sha256=bOzQIKENi_0WfknRBxF9FjaJQXnuC2toU3BzYNdF7V0,4668 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SpinBoxSpecifics.qml,sha256=iskZbNY8xDpkmQQne1b6HrLnTsycKWh_zhh-7OsNDQE,3173 -PyQt6/Qt6/qml/QtQuick/Controls/designer/StackViewSpecifics.qml,sha256=9Ow9ZkU1GbA4tWMcCrCLkNvxAd40yTNruYstr1ou5Hk,405 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeDelegateSpecifics.qml,sha256=vFKZlqf5tmUA7pSfbN2K9l3qT-kswdnXv5_dZTASULI,529 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SwipeViewSpecifics.qml,sha256=EksoFZUhyuL7BrRdHLFJ31PekD98o34wfvDwSuHBTPg,1403 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchDelegateSpecifics.qml,sha256=o9KiIhYTTMYrH-QjiuSk5ZuwnEeqeG-BkuU_w482Mhw,476 -PyQt6/Qt6/qml/QtQuick/Controls/designer/SwitchSpecifics.qml,sha256=HHUeLcSGPSEpWC0KlWnHziAVfjjQ3WMjerJ9YXLXGmM,468 -PyQt6/Qt6/qml/QtQuick/Controls/designer/TabBarSpecifics.qml,sha256=6nf6_3fpgsX-b7aWk2BwlepA3c6M6NNOKAeEfl-SvDs,1962 -PyQt6/Qt6/qml/QtQuick/Controls/designer/TabButtonSpecifics.qml,sha256=HHUeLcSGPSEpWC0KlWnHziAVfjjQ3WMjerJ9YXLXGmM,468 -PyQt6/Qt6/qml/QtQuick/Controls/designer/TextAreaSpecifics.qml,sha256=SygILZBlHWoLkKwXKlHPBZXKFxMUyaJqfXWULa9as5w,1727 -PyQt6/Qt6/qml/QtQuick/Controls/designer/TextFieldSpecifics.qml,sha256=ZpjCaagYLcvCoIKxBnJEY29cZSlExwvJ9iUQqf2uiS4,1631 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolBarSpecifics.qml,sha256=L9n3Rbx3AlcaxxgcUNBipwXTN9OvzKViKLHKjjOyUBs,985 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolButtonSpecifics.qml,sha256=9qSIeGv0Nnkm5VbhZQ6xie7wDnEj8NZ7l_Z49Ubh9L0,523 -PyQt6/Qt6/qml/QtQuick/Controls/designer/ToolSeparatorSpecifics.qml,sha256=WoG-9lORXfpkL3nfoXJuwOgubMxnfd_64HJOiI5MSPc,901 -PyQt6/Qt6/qml/QtQuick/Controls/designer/TumblerSpecifics.qml,sha256=VTifiliZor89TijfXpY7GVr7Mq_dB2m-tPTFabGvij0,1802 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon.png,sha256=AuD6mCVIltgOZT9iI2cOyvWyiekya1ad7aaPubOpJO0,320 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon16.png,sha256=JzM5e2VeXOXuOKic5MR-YIzEOcYUeRkcx2njyyBH_Kw,229 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/busyindicator-icon@2x.png,sha256=4M3VBnQGp69ywzq6i7593LZ7NcOqIyylOPAkPTX528k,643 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon.png,sha256=i1cK_Pk_n_fSKZ0WidNytX35xDKUbCjsVojUNwcN2MA,162 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon16.png,sha256=vr3uhIzxtgQdX-HgCwZKoW98_1EXo7pyUR5w5pxSuIg,145 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/button-icon@2x.png,sha256=gsGbMbsK7XVGqnGpvZCcgQVtcsC5HAtoRvQnvcA6c4o,259 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon.png,sha256=ExHdliPUdvrSbsgsZiL1IYHoxVcwnTsOS5ZEEK5J3SQ,258 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon16.png,sha256=x5tLnDx8lcipp_OHt1ZQA5BKuSdU2Ai2O2A2lad4K9E,230 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/checkbox-icon@2x.png,sha256=gUl97GEPukCStv6nCImO9TeMVWz1BUfbdF8NK7CxXg4,336 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon.png,sha256=Eznw7mevSBcwJGzebCKU51OJy_vYiufpLpeOJMVHfh8,156 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon16.png,sha256=XIZpu69TE1zZqQjH3pCnZeaqYykdTzgYiy_YzrfULrM,155 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/combobox-icon@2x.png,sha256=KlW3KjvEKrApL74SWeJ_T637CMGdsqYBJSOqj7IhylI,185 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon.png,sha256=S0Gb7USYhanOapKgAcqeGfCE2tw9NpvZm5JvHnG8eQM,293 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon16.png,sha256=mHnUZVAkr8UCdJuwDYKZ2XHQgS2TSL258ZTYxUFHWBE,229 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/control-icon@2x.png,sha256=jIB8m1ZvGgBSxL3XRd-XQonASSLzPL91hKRaCAbbYo8,509 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon.png,sha256=moes6FiETOMCF-aSJ0-W6wZPw-o6_XzSLnNIG7c_PTw,189 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon16.png,sha256=9iq1VzlQFV9Srht5EaftVH6Hd4WIPXcwfNWVPd-qDVs,160 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/delaybutton-icon@2x.png,sha256=U_A4Wx5ayg9sr104iV7F9doa-2H5m-j82ghttENCut0,286 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon.png,sha256=uSB5KWW4L15qYFBYTK0jF36uA81TFwOFjJfH-eFWKx0,267 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon16.png,sha256=XTTBiXCtuhxuHPS_8dEIaWEPnGNFZuZHZEc9yXjNNYk,243 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/dial-icon@2x.png,sha256=jlhl3qUOJkvEVKR0tfkpAqD3vtqihB9-lnuKl0G_4Wo,505 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon.png,sha256=NPosRXTTZA7HGrKjge54GZXkdyoGCvpr2PubE1dyGKE,121 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon16.png,sha256=L4qBbUL9X5HGEGyJ3O55NpfpgBQZz5Neze6QJGPicg0,117 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/frame-icon@2x.png,sha256=RXZo_HUEKDvxF3ke3D75AYGK6Fc4f94dDh8XtCB0EmY,125 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon.png,sha256=_5Iwk56v38A8Mfbb-bQtyOX8bnaQRji9CvBGErtsPYg,133 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon16.png,sha256=m6pR98Ljbm-2iuJfQXA06cv-Z6cmPVIaOTBKNs6FgaM,125 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/groupbox-icon@2x.png,sha256=i_quhGBqO5glK7kDbxNXMPb-xLSXaoMkWdrhAUAl84U,136 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon.png,sha256=q1-9Jlpp80pKq_BkWUzl3Z20l_ngt4EJu7bK4kjuLm4,127 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon16.png,sha256=LtSeXRDz7_aM1X-fXKGOFknXnWRDDNDCfC83nDHixbo,124 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/itemdelegate-icon@2x.png,sha256=Nc0ZBkdYnQBCfgPzR_uaDmj7qhjzVWOT-KmXjIMoe7g,133 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon.png,sha256=5mgwIzNx0h4N0WE-TNloyK3d3ThFncozLrEYTTAAWy0,206 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon16.png,sha256=jOX6LCJ9V62_m2i6pCo3ZdgeNOgzLEE-SY6YkHS-hwE,182 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/label-icon@2x.png,sha256=zLw2vjG6W1dlcHU_qSGBuIfpoEj5FVssxjC63y8imz4,284 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon.png,sha256=ZxVx5RnVE5P2fH72Flq-3yy89qWt7HYNYvdHdzN5FhA,190 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon16.png,sha256=oRBLfElzZ7BU6nu3sTBCq89uJwG1tP0tMuTwwojGHIs,148 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/page-icon@2x.png,sha256=RwwHzwfwLtKRdBQzqtiKuA8ex2cdZAPew9dPfuE7uAM,195 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon.png,sha256=9GT6W7wg9gRxoXR7RV-1mCw043hgKFjrxUooEo1Tyq8,179 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon16.png,sha256=xVGY-qzO71WYKj7OvlTuTaXGAt4_JfHKin4ORzkKQtU,158 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pageindicator-icon@2x.png,sha256=9209tuifk7ipQid5Hfdnk0HEK6ocgdNikLDD6rbLh90,207 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon.png,sha256=9oWkjszjhuE1YxvqUCHZUrdvED2VkcXwoI4-4SgJUQg,93 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon16.png,sha256=Uqn9k7k9idUhedWUE9nmbDDk3LdyUX0nebULMz2L8rs,92 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/pane-icon@2x.png,sha256=ty6bXN18ySKBelEeRL0nVzho73hBtFakwi_5_GEJLTo,96 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon.png,sha256=az8do91MosuEFkBwZH0ozJ-ySQ6KvOwkY56n9PN4n9g,101 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon16.png,sha256=0ml5aCmalq7NkVwiiR2y4l8wWbudWk4gfs0VYRX80qg,92 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/progressbar-icon@2x.png,sha256=p-Z_IZhG1Pggxk8sa-fFjJpfBI7Hje-btjSg3ENHmEE,127 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon.png,sha256=p4EXywIMoV8Cs7zP8mguXdU3QIIIcuSb4PWSlGF52XA,279 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon16.png,sha256=VtGquyQDkPOvMyJ89HVy3bYEtVgRRHOd7rQipONZgYI,218 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/radiobutton-icon@2x.png,sha256=M6V7KyEOQADHMgDrYurk4_21PnUvL8jO5QMsKWfSvcU,482 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon.png,sha256=bxtfjZQ5mhuzcteLlYEBYh0EwgMDJNzlSNVw3BQKno4,269 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon16.png,sha256=aGTrWQ7N6hneql2dhYFk6fD-1ls_kvy6-08fK2eL3Kk,231 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/rangeslider-icon@2x.png,sha256=LNvahzLhU1aMFeCIqGWoIvl0OxtDfH2xNBwpFxmfKK0,282 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon.png,sha256=mbm4AxK43q9rnzmuPZvtwgU8E-YK9giksEl6wwCr7Vc,229 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon16.png,sha256=2-s5k4HyBcWfoltf7umP-q90TqSjOa5C86SXqaQe8u0,186 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/roundbutton-icon@2x.png,sha256=0p4teKle_KuoOR6jWl8cCXvmZr-Hj8uy2RJi1gAhMSk,381 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon.png,sha256=lcORIgthbpczqdT7jGdUMAad10yjw35N75IVjDobdeI,110 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon16.png,sha256=OCgky0lo44SxqF3moiLr8261aR9Kc25yk1gP5iqfqoE,116 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/scrollview-icon@2x.png,sha256=BG6R4ZG02584xjEAT_Jhw6OR7WvRCCH8vXWjZ7mQRcI,145 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon.png,sha256=Ymh6YfwI5IhWP3be7xw9-hOk1GsbKYntC46XuOooaoA,190 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon16.png,sha256=ofPkxbOVXieuJrlq02EcaOo6DIIfeeJuMDcFD3faMNI,156 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/slider-icon@2x.png,sha256=4lSfPt9_BZxzhngKy3uDcoIiZxPfjjNeog6q5G1VgpI,227 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon.png,sha256=pLYlz4qVFPsJm_bsELs-PLhe7Bll5VnH0qlFtMzp-gc,144 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon16.png,sha256=itI_yBz1YYLF2KcL6SVTneMbzqDytrVLuFkqca5jRUU,151 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/spinbox-icon@2x.png,sha256=3g2NI6FHGQ6aWh2XgolT0qr3OTgDO-XGSL1iHM6FM_A,178 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon.png,sha256=jQ7ES6U884HIBiSu8Yzolicwvm-OvhWJDLMqC4w0d7c,162 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon16.png,sha256=C-y2-1aQjW6ZI2k_BoXQ0D6KFKZaA7gjdlkUuusHvys,151 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/stackview-icon@2x.png,sha256=ixlq_6Ehs0I7LlUrbAAPTfQZ3OqThHB95avPXrbSZTQ,167 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon.png,sha256=5YVq1PqVy7rUn40zcFVQp0pxj9s5jrgucX7Yt8gvFNE,163 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon16.png,sha256=mN00gGCJQ9vP35w1UITwOYi9ekeVZME-7lK2A9dEyQ0,152 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/swipeview-icon@2x.png,sha256=xsy4laH7UUIyl6AhlOTZoawuWnvWkJA_7KRYWC-Q3s0,184 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon.png,sha256=yPbUyxhpdQtRLczppgX-liXt12EXJT3EG64MPU3LDJc,205 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon16.png,sha256=hpA5OlGHAM7QDaEyLCQ4um9kmMVK_cMJVg6N6hqVMRk,160 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/switch-icon@2x.png,sha256=d8u48iOoMFuAQV6YJ_luLv58AKGpR-NtMpdx-_kCgqM,314 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon.png,sha256=WiZtcAAUlsLqkRI-pZUig5QlfpN-DfGfPz6V_6AKDEc,149 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon16.png,sha256=QejiUqvspJvW778VH-AqzxIP6reYCHXUbupajmWdlmo,133 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textarea-icon@2x.png,sha256=9RzhM918su10yNq4XndcRucFv8kdYhKo0EsMVDLIIqE,163 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon.png,sha256=3QRT_QT_qa7fWqyXj9Ty4iEH-0bW8oacusTeWQPhUAo,154 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon16.png,sha256=mo8-sqFOxVF0lfaHQCNR-74uBqBEAdA9KU4lRJE7YvQ,147 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/textfield-icon@2x.png,sha256=hbjdvDcHiknxUfK_8ICzPbVLbgwqj-agRLg9mjFIots,172 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon.png,sha256=CRxg9rp0iZqwvSr8RUdVZZ-n07QKmh8fLo_1V6vKaX4,131 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon16.png,sha256=tSZdEkVAoD4fp97DFgshCwukglfScrd_L5jMF6zRx1Q,114 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbar-icon@2x.png,sha256=KGp-X0fB-PZwCP8TQ-zjXNUjauloLmVWOYxNGWgrJAY,140 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon.png,sha256=kl1sH5NJGbWeHz4UKy56OLDU9tXKL-Z--38jeyLDAKA,141 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon16.png,sha256=FYx1NTHXm5J804QSVoj6gT1Cgsyl0je-fom43Wbn_YU,128 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolbutton-icon@2x.png,sha256=q2SOOJ7EKCdHMA4AopOh3X3bVvY-Iy2iQdm2amYAlZA,158 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon.png,sha256=sRmP61AlVKJU-cHz2GwZNOeTh2YGzhkjRY0IOM4e8RQ,111 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon16.png,sha256=t7ABD0X1hqJCJfB1dq1FaTJ-6UjFHFj3dEXGcJYixfY,123 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/toolseparator-icon@2x.png,sha256=W0Gy9TZ1FrCBOeMRUKxIwWolYTa5bC0z7Lu1AqqCQOw,131 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon.png,sha256=ZrwYsPFpzzwXwe6Vk4tOal9RdZSneZg56yRGjwXqBRE,132 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon16.png,sha256=36f9DcpxLHe6tBYebo1cLf7tdtO_11t6GUv9WYjrVeE,127 -PyQt6/Qt6/qml/QtQuick/Controls/designer/images/tumbler-icon@2x.png,sha256=fS7hXcIpeuTG43begVewDxNh_JP-N0sqFw9LnS-QUQ4,153 -PyQt6/Qt6/qml/QtQuick/Controls/designer/qtquickcontrols2.metainfo,sha256=HnplEZ0HqQbZbRf4ahYreqgAZV9TJsQzoC1XPzWPQng,17947 -PyQt6/Qt6/qml/QtQuick/Controls/impl/libqtquickcontrols2implplugin.so,sha256=fFAed8sAY-dGDX-kJwBO4DRR4OWpN8fd7kX-Qx3fewY,23192 -PyQt6/Qt6/qml/QtQuick/Controls/impl/plugins.qmltypes,sha256=6cUOnhzS6UGNUS7_n8HSX98xwVuPuKc223ROFDq7U9Y,48440 -PyQt6/Qt6/qml/QtQuick/Controls/impl/qmldir,sha256=i1zuD-iA7FUDchyXwAFfoN7mmQgWpo5WzxK2_gSbHr8,286 -PyQt6/Qt6/qml/QtQuick/Controls/libqtquickcontrols2plugin.so,sha256=GpSS3-2DNQrP66F8mPX_4Bm9Twf0r3oI0fDC2dX31nw,39832 -PyQt6/Qt6/qml/QtQuick/Controls/plugins.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick/Controls/qmldir,sha256=dn0YcrZJsrPrcpW7XbO_bwHYQ2D5r8jXnQ4XfnaaByo,582 -PyQt6/Qt6/qml/QtQuick/Dialogs/libqtquickdialogsplugin.so,sha256=4KdIrKqMplyjB7IkloCfzLe3s1oySSf7HKiL3s2E5Yg,23184 -PyQt6/Qt6/qml/QtQuick/Dialogs/plugins.qmltypes,sha256=H9TJaLzJPXfZclYnRExkZGMMr5uykBf2Im_d8lQauuM,16302 -PyQt6/Qt6/qml/QtQuick/Dialogs/qmldir,sha256=JhJvH690XL5g3nkWoyjwqoYPZ8H1Ielk_F-_PAYpa9w,264 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/libqtquickdialogs2quickimplplugin.so,sha256=XIpHW5MmWsRC9FsX1oVxUxvyPmBrowcmJanwOb0DOEU,23200 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/plugins.qmltypes,sha256=-S81lXZp8lame04t6Z-0VxxhZGGWM1GA_PLll21UoiQ,76463 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/ColorDialog.qml,sha256=pZetWBQi60qdLc_tHpQwOa5kbnOVFbYMBmfpBLU_UdU,8082 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialog.qml,sha256=s_5bnZqfG9Kx0WIHI1iNKkKPshYMw6VzM1ZkehXARIA,6719 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FileDialogDelegate.qml,sha256=a1Fc4z8SVK-TkHkTr_dY7AAO7FWHhtBP3mCF9qbocKc,2099 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderBreadcrumbBar.qml,sha256=fPJS08Uo4exD_IBvkP4oqzhmmGwH8AuhRUVjei_7-Pw,2529 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialog.qml,sha256=o0JzKjHEg6VPfiCfan4qG9e9utmn9Nn6eKOE1gcrfao,3850 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FolderDialogDelegate.qml,sha256=bBXEAKs-BqOQG3OoFvFoBSgYAG7sYuf1NuhpvRbSP_w,1895 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/FontDialog.qml,sha256=c-u_zlPIRXIpJ-rtXWt15wvnbb5QvDMIsVKSRlBoF6M,3500 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Fusion/MessageDialog.qml,sha256=y-_1SBHPg46wEE6GMwSn_K2gt9kL67Yk29qjlsrXLtY,3863 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/ColorDialog.qml,sha256=NXcBeepFHFsmCY2KKd2Gq7Hmq-cRZnE8S8M6yeI8vyE,8985 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialog.qml,sha256=7ljjEAuGDYsFsJ5qYKZKOGW9dzRlO0U7Zu62huKswnk,6504 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FileDialogDelegate.qml,sha256=ayfKarOUO_-2hJQ9Lxsy2SBZmG2qIleRP7RRgb_nLAk,2570 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderBreadcrumbBar.qml,sha256=LHBy-VBJ40ew4Bhus-gESQYqBIO67ED8opc-AtA1UK8,2049 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialog.qml,sha256=LHufp28MHIfL6C1R9LMYgjJgMgqpwrCRiQEf2Jxo5Oc,4383 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FolderDialogDelegate.qml,sha256=1hAqyzFY42Pi_vQoESlnAir-xb5ZND_oFHj9IvD5H0M,2367 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/FontDialog.qml,sha256=rlNxmgb7V2w_6J3al27h7XcF26XPk6tEJItba-tO46Q,4186 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Imagine/MessageDialog.qml,sha256=fRMvWXDCETt5yLGUZ5XkRkzIx8dxqSRYaR8PFMxBpxc,4833 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/ColorDialog.qml,sha256=I5B976Cqe2RfBxiMtmhFVRObxgSm21rB-x3Fqp0s22U,8139 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialog.qml,sha256=qakYdgJjPE5JLXXEUm9ZRNEZ1Mn24vg-81EqNV-7UYc,5629 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FileDialogDelegate.qml,sha256=SEqHm3xGsRTW7db3JqNFVc0Fyd40twf7QqqLsxQr3mU,2134 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderBreadcrumbBar.qml,sha256=F5SFwxr9MNLpeJB7cs-JFaNMWj8BGGx--AQ3i-8eZFc,2557 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialog.qml,sha256=WCXvPNTuMJBxso3Ap3cOH2jDfBgAyrJmwpKD12myQLc,3202 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FolderDialogDelegate.qml,sha256=gpktfzpkKBRZlkIbF_gDVFWO7rC_nGU8Sf9AZkNkY_Y,1919 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/FontDialog.qml,sha256=WTF7xIu66CZCRfLZiJcKQy3WPFnQlwfoGAyxP1lXkl0,3150 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Material/MessageDialog.qml,sha256=WXwOzz0e9ZuZ2piHpyVmT2IO1kebR-_-zLjirMxS_tU,3974 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/ColorDialog.qml,sha256=sofdrdatSp8ojD7VQ2T6Nq5zammQKZmmiXdTdv5nx3o,8497 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialog.qml,sha256=YFkw2iKV2MnEMBNK6EiyRp0Z4L99F8M5wvclkX7-Ec0,5622 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FileDialogDelegate.qml,sha256=zEyvElrqOYU_C4z-xyquDMyaVTEQEf0571tNAl9puOA,2136 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderBreadcrumbBar.qml,sha256=jna8lfvbSGPZecWj8-6QioSIiMz3TkKF_n52mFh5h2Q,2493 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialog.qml,sha256=dCFeiam3bQGDHpXOOV8QpPlirLT0kMA2D1LksuS2OZA,3532 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FolderDialogDelegate.qml,sha256=7Wfxh3O8IeSaYAAncnzk2byifG2A1e8ALajHktI7oUI,1936 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/FontDialog.qml,sha256=EMXOIZMKeEYQcexhL8GSKHr0_uA_SGx6wO7cOO_8R94,3317 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/+Universal/MessageDialog.qml,sha256=9wZFS0kqF6t3-VmfN5h21Cb_j5hY29lKMVk8_qx91OQ,3902 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorDialog.qml,sha256=_GA-4mGYMu2W2wIlc3lPJ5uKtxgOqoQnhrjzPZeGNY0,8663 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/ColorInputs.qml,sha256=IQTXJ_qM-5HN9gErvRSgUsxO-VCD3nfBrK396gerSAs,10790 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialog.qml,sha256=eEy6vbV4eyiJVU9e5bv5t4F_P5eR59gcLnmZfjUKhyc,6446 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegate.qml,sha256=SHwbk1bfyqF9ZmsLPI8dr331aM0KgI74FKq5fMcszE4,2058 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FileDialogDelegateLabel.qml,sha256=ULt2jyLJagcnznyf8823rhM3cjqOqdR228hVrj0vt_U,2378 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderBreadcrumbBar.qml,sha256=nNNwZopT_TKktU2-25kDfOBrFJiYFxl_u31lRqm1ddw,2366 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialog.qml,sha256=p8fVggroD6r0OlLr-f3N5GFI-dY3Gt375KijPl62NBw,3363 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegate.qml,sha256=_s8ojYOaCY3_EAFaDCAufdOhE2ykDOmI0uSjPi07KxY,1864 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FolderDialogDelegateLabel.qml,sha256=d3C83inuAIxG-8XTrKEhdlWI9AmZ8rKhe6661XMBRNE,1635 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialog.qml,sha256=82oEgJLeg1pt2vs2_CgDa6qefqdpl42CjBsN-1qliWc,3600 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/FontDialogContent.qml,sha256=rSkokIRrfHfOZslmy-XquR_uXzvKFBXCPdXrJnviPLQ,6430 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/HueGradient.qml,sha256=ZgcZRaNXpngH8r8EiGxuLwyc-ni5NIdgMrfFVbhpIPs,694 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml,sha256=XHrbhI-_XiIuos92opJFjEw3N4Lpe1cOHQjFrAJrYzg,3957 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/PickerHandle.qml,sha256=_nDpxO76hfGp3B5IcroXMAfrahvbPdz7vY9RzSgQ-ew,782 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qml/SaturationLightnessPicker.qml,sha256=TjGSlRMqHdKjH8DtfnZ-ldk2dSjem8tYJVNtwpQ4K48,1301 -PyQt6/Qt6/qml/QtQuick/Dialogs/quickimpl/qmldir,sha256=2QhawhjVZJrH5VX093oY8sgp1kJsZQpjdKoyuqrBbog,2675 -PyQt6/Qt6/qml/QtQuick/Effects/libeffectsplugin.so,sha256=2l4aZB4WdMDoXioXyYsrHMJFHKwm6RGr3V8uYwI0POc,23176 -PyQt6/Qt6/qml/QtQuick/Effects/plugins.qmltypes,sha256=fSAUAhKy-0p0bCF_sW1iCYcszpo6FAvaycLJcWhRgK4,8870 -PyQt6/Qt6/qml/QtQuick/Effects/qmldir,sha256=buZGMQzPEpcPLo51nbQY2iNpHxUpgvnVleoreJn1KNI,211 -PyQt6/Qt6/qml/QtQuick/Layouts/libqquicklayoutsplugin.so,sha256=WLVcqiszFRmmvA7w1MRWSk9Ih6wQo1dIn-okjlLJmtc,23184 -PyQt6/Qt6/qml/QtQuick/Layouts/plugins.qmltypes,sha256=dEyD4QILkgU0KuhAVn3XBbpQ8Rog1dK1ka38rxcmGZk,19728 -PyQt6/Qt6/qml/QtQuick/Layouts/qmldir,sha256=BgHgW1g8JO5yFYq4VT-dJDXf4I3FviC_LgP6JAWLpMs,241 -PyQt6/Qt6/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so,sha256=T9VA8gjefeq0jsdEivw39kHqmhdI3DJDhc_6Sbcwn9Y,23184 -PyQt6/Qt6/qml/QtQuick/LocalStorage/plugins.qmltypes,sha256=5A9gv1CSHEEZbcishHjw57A3zd68ftxm_XSmy4oEQjY,688 -PyQt6/Qt6/qml/QtQuick/LocalStorage/qmldir,sha256=24aEKth-1PZaOPd19tyiTGkt8xLJ8zNVXYLGLbmI5Ec,218 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultButton.qml,sha256=rQnTVFjWc42ghKseQVLH_9E7MPLJ6EIiuy9RU2OxK9g,1709 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultCheckBox.qml,sha256=9wYvm2qMFJ6P_Eml0fzKvEOIeYxlxBX9ntKKFAS5Uvw,2446 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultComboBox.qml,sha256=Lnz2a8z-cb_p0XmMlPSDt5J8O_xHMTFxZX8QZMXRF2c,3825 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultDial.qml,sha256=jZDycH7uchkc7-7knqiTYRnb-MelmUsxWJuv1t4KTR8,1002 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultFrame.qml,sha256=SUwN_0aUdJJIjuuLlb4tsRD7P2hPx4afsrCtNmS4xcQ,1250 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultGroupBox.qml,sha256=ImUWWcNd8jBQvDDceRxAuIL1i3PE2QduKcepql4LCaQ,2280 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegate.qml,sha256=QUrOKX8BAuUPFjn4KiHpiiJxY13mtThQy3bRtrqfuU0,1057 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultItemDelegateIconLabel.qml,sha256=Sd6ymAd_jmt5-UrHA-Y9-8RahI0Acl18eQSP8EbJ1xw,836 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultProgressBar.qml,sha256=-K30PrkToga3s4ZXKZ6wuPqOoRY1wrkL0Df_1xoSTuo,954 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioButton.qml,sha256=ZOJNM7pvaO9O0J6UP0vcurWmF3oGOqgGXAwzgiKbY48,2309 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultRadioDelegate.qml,sha256=wMI2bu3SanJ-Q7iYEsMFswvUlC7iS68B2_McZA-GqMU,1998 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultScrollBar.qml,sha256=otBeZEIkcFFvKNvZ_8-T9n-RBs0rWXdF_YIds9FTAm0,1206 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSlider.qml,sha256=v_wLZWLxUI2nygPNy1sbjDu8q4ga_gYWUFrXKqHyzhA,1797 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultSpinBox.qml,sha256=w6jNRSslB6sCy4njdpv8g20Yvn1jSA3fA40fP1yUQ8E,2551 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextArea.qml,sha256=-FVlLLWFXs2f2CdsgLoC7bsgdzXmQdXcNHk2pZO76YQ,1923 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTextField.qml,sha256=QD8tL7sofcV1loOKRc5CRT7FwWWBAOiZqJ_TkGqefpQ,2291 -PyQt6/Qt6/qml/QtQuick/NativeStyle/controls/DefaultTreeViewDelegate.qml,sha256=-zpa_slsCzKh0NC7BzlXC96gcyq4mzqapBwfa3r346U,3956 -PyQt6/Qt6/qml/QtQuick/NativeStyle/libqtquickcontrols2nativestyleplugin.so,sha256=G9Ct-EuyGhipST8Fsf74YnnqP3BCPdWxe5qyBSpBsRM,866112 -PyQt6/Qt6/qml/QtQuick/NativeStyle/plugins.qmltypes,sha256=hwynNAhCR_kmB8n5dRW10y5ZUDfmjyyGxV80l8ObqL0,10888 -PyQt6/Qt6/qml/QtQuick/NativeStyle/qmldir,sha256=oEH88HLWFoyafx56NRrTz_owEjuh5Yebsnt6VK1Af_c,2092 -PyQt6/Qt6/qml/QtQuick/Particles/libparticlesplugin.so,sha256=Aw7LHRJeB5rVh4UMXnKRwW5O4sGH5WrmFvCHzlvT3p0,23184 -PyQt6/Qt6/qml/QtQuick/Particles/plugins.qmltypes,sha256=LjUqiuEON98Lu5S7pqgrNAfxyGp6gUJrRWYZRkPgJa4,75504 -PyQt6/Qt6/qml/QtQuick/Particles/qmldir,sha256=8HQI_h47EmSLM9SfcmWfZnZMmgAX_d-Hz3fbqCyxwnM,222 -PyQt6/Qt6/qml/QtQuick/Pdf/+Material/PdfStyle.qml,sha256=vgHaHTSzwaixbuiPNrsA1mz195abIv-wNaWS62y8ujA,680 -PyQt6/Qt6/qml/QtQuick/Pdf/+Universal/PdfStyle.qml,sha256=WoU-1armsww9vLxTuLRUB0v_T4tVmHh3O3GX128t8KQ,673 -PyQt6/Qt6/qml/QtQuick/Pdf/PdfLinkDelegate.qml,sha256=3vZwwUpR4Ku9NFXwyVuGu8KXoH6Zm0KKfotVsaljLpQ,2600 -PyQt6/Qt6/qml/QtQuick/Pdf/PdfMultiPageView.qml,sha256=8LYPEknSl1fNMBCMfE7olC0AON4D9zUX0uzuLbC_J0U,29022 -PyQt6/Qt6/qml/QtQuick/Pdf/PdfPageView.qml,sha256=WCneGJp4lTIfU1cAjgRnvFBygkUraghDr3WS4YIAo0w,14395 -PyQt6/Qt6/qml/QtQuick/Pdf/PdfScrollablePageView.qml,sha256=QLEnq3GVc_EI0txHZ59cQ_6oyea75egIarxbFLX0gkg,18344 -PyQt6/Qt6/qml/QtQuick/Pdf/PdfStyle.qml,sha256=yapMd7J6xM0pB8JnwECadenLEhT2tTmLdrZCEgUP7EU,2425 -PyQt6/Qt6/qml/QtQuick/Pdf/libpdfquickplugin.so,sha256=85eSJopcjMWyFHWu17FXUeObgCa4R7mUGliFX_CDP8c,23184 -PyQt6/Qt6/qml/QtQuick/Pdf/plugins.qmltypes,sha256=qGmdPQK4_Tj8jB0DM8yUcGuJHeuyCZlwqrfGMvNB3TI,22405 -PyQt6/Qt6/qml/QtQuick/Pdf/qmldir,sha256=lfSq0wzbxkJJyspHm1_nGrzUoUOnE7Kcd-MFrNyo1OI,732 -PyQt6/Qt6/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so,sha256=MvrCn-4NrVKxGnEkuYNfIba5iscgO5smX0aGXfsmjZA,27696 -PyQt6/Qt6/qml/QtQuick/Scene2D/plugins.qmltypes,sha256=nvOQ7e4o7TuITlcjFE7zgg-vPk_aSxHjZ-zehbyBh8s,2297 -PyQt6/Qt6/qml/QtQuick/Scene2D/qmldir,sha256=3JcHWBdu5YJFq3vT6YAdfB31LXjb2x7JJ7WJwJULw6I,195 -PyQt6/Qt6/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so,sha256=leoKLSAYrBlrv5Hk5vxcH8GHHIwOAKKUrqozdLwlTp4,95088 -PyQt6/Qt6/qml/QtQuick/Scene3D/plugins.qmltypes,sha256=ODYbxJC4dN3h2vePrkzwC-YebwyA1Y1nZ-dteGf2EHc,3042 -PyQt6/Qt6/qml/QtQuick/Scene3D/qmldir,sha256=Ew_pn8by7kqGxcQActhhR1rytdj1OmHOvrjEc3URpq4,195 -PyQt6/Qt6/qml/QtQuick/Shapes/libqmlshapesplugin.so,sha256=zYchagRzAPlCvOd6FIV9lfFol76ACIjyYyCrbp9ZU-E,23184 -PyQt6/Qt6/qml/QtQuick/Shapes/plugins.qmltypes,sha256=4mI_mzp120lIpO-DFif9vcnPAyi1DDuwztjWQF2vvEw,15567 -PyQt6/Qt6/qml/QtQuick/Shapes/qmldir,sha256=--v_-Tcp8ysADJ1GcoJlWBTupEWpLwl5mJIHhwziXd0,199 -PyQt6/Qt6/qml/QtQuick/Templates/libqtquicktemplates2plugin.so,sha256=SJA_n4lcpbXYKGo9fyZGY6dV8eRBx-iMur3XtWdSric,23192 -PyQt6/Qt6/qml/QtQuick/Templates/plugins.qmltypes,sha256=A2_R8XNDGRSCwbt5T-8evMD2XKJ6qy3fpHGwz78vDi0,245581 -PyQt6/Qt6/qml/QtQuick/Templates/qmldir,sha256=bEkB3u_kohIzhVb9f7q-_5sNO2S3sOQyRf3hGxXdMaM,229 -PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/libqtquicktimelineblendtreesplugin.so,sha256=IBKMWNXgxUOjtOg7_WKsbkc6w7OlO3O56_NitaJIt0w,23200 -PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/plugins.qmltypes,sha256=aewIwEuE6EIF2gZsJhg4S_RhQDyGr2pwkPsjLcPVEs8,3364 -PyQt6/Qt6/qml/QtQuick/Timeline/BlendTrees/qmldir,sha256=v_BcI4dLicwgifoRGRF1e9cFeCQu9Z-IXldhq_Lpj9Y,303 -PyQt6/Qt6/qml/QtQuick/Timeline/libqtquicktimelineplugin.so,sha256=1GPDoVycnYiFqCERSJ5Z5cyQiKvLWy_highNwgzLwyw,23184 -PyQt6/Qt6/qml/QtQuick/Timeline/plugins.qmltypes,sha256=kpZJm1ACdBVWWBVBdZqVhC0HDcaTFsw0YbwLIb2XsrE,5416 -PyQt6/Qt6/qml/QtQuick/Timeline/qmldir,sha256=4yvGyMO092RurT6w70K-ewysznyUFodM26MgMLNr9AI,243 -PyQt6/Qt6/qml/QtQuick/Window/libquickwindowplugin.so,sha256=uO3Al5x0AmW2kVmG5CVGvjXpVKc0yIHpfnH68Ie21BI,23216 -PyQt6/Qt6/qml/QtQuick/Window/qmldir,sha256=wFCQI7G8zl8nJiqoTzpgFvsYiXH-zFjuqYuJepqkLrU,205 -PyQt6/Qt6/qml/QtQuick/Window/quickwindow.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick/libqtquick2plugin.so,sha256=dDHuSWota4MjzqvPly0g9ZWuKE9TUjSjIHqftDmB0nU,23184 -PyQt6/Qt6/qml/QtQuick/plugins.qmltypes,sha256=gS-a_EMWf4joIReuF_NwAxWBoijLoOmWGTTHmAVabYA,528437 -PyQt6/Qt6/qml/QtQuick/qmldir,sha256=wvorJtn4CUxu62_5JLGAiN3NUS4TNSTlWxP6Pl5wNQs,206 -PyQt6/Qt6/qml/QtQuick/tooling/Component.qml,sha256=L7KYD5iQ_LtwgtgU86kiW38wMDF1uR57Fn7siIEL2Sk,1022 -PyQt6/Qt6/qml/QtQuick/tooling/Enum.qml,sha256=_3gzTXnbGxn4usX5T1AmteGly7c1gMxEvisxpiXZcxI,313 -PyQt6/Qt6/qml/QtQuick/tooling/Member.qml,sha256=-Sa-tDRSvELnBGX2Ao4Hiwbl-qaTZmyCI_J0cbotz0U,204 -PyQt6/Qt6/qml/QtQuick/tooling/Method.qml,sha256=Q2ZjSYvvPIh1lXOnt4ct6AU9jHOS6l_ma89xIuxitRs,492 -PyQt6/Qt6/qml/QtQuick/tooling/Module.qml,sha256=W4vVEN4NVOWp6ptViyuiq8h149i0cTzQ5ofpKJ-ZRjA,252 -PyQt6/Qt6/qml/QtQuick/tooling/Parameter.qml,sha256=ZpDO3g2igtzDZlZmPqZIsaHRArUALR0CDRdzIiXulBc,323 -PyQt6/Qt6/qml/QtQuick/tooling/Property.qml,sha256=nx2Eh_C-eLQAov0q7Cvkp6-0rW9WkdTDPcOl5T51B6k,623 -PyQt6/Qt6/qml/QtQuick/tooling/Signal.qml,sha256=MJUcW6DkcS3FXsH_b2e4JaTsLDUi1HCmM79yinm_XFs,304 -PyQt6/Qt6/qml/QtQuick/tooling/libquicktoolingplugin.so,sha256=OkOC4NEOIYk9WxkD-BciV4bNf0VtA09sN-_TjhJezcw,52560 -PyQt6/Qt6/qml/QtQuick/tooling/qmldir,sha256=UUpem5u-Ve6-T9HxSGgXa_K8lzkG-1_KMMfdb8zJ2rE,567 -PyQt6/Qt6/qml/QtQuick/tooling/quicktooling.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/NodeSection.qml,sha256=xC_jOrp7nEQoFw9mGQyWyMBajk-kuOfh10GgTbYW3M0,11909 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSection.qml,sha256=hzm4T4ucfDWu46bzubMxbA0B38XY7vAztI2pbALioG0,1463 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/RuntimeLoaderSpecifics.qml,sha256=6zcgGZ2avcdfRPC6q5yBm-EwTOhmLS5Lvd3BlSDoczY,336 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/assetutils.metainfo,sha256=cGE4f0bY37NIRuU7fOK4MLTZNzDbixLcYhELY7tr8eA,551 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy.png,sha256=-8NwxUGpMeIu66UVe0fzD8YMfilYC5tJBHA7bheRC_M,375 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy16.png,sha256=IDZ6vbNiHwu75HPcLBZwgxgwPGADVt06U8lGXIppTiI,253 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/dummy@2x.png,sha256=rAztmEYpBRDzL_sRXSnlMpRC_sAbZSeoY-v1QcqMjtU,499 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader.png,sha256=OwwRERV706Y_9RDgzRuRE5FwLhYBadjO0B-TxRx9cu0,744 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader16.png,sha256=HiL8Uk544CP0ijz00jlYgk0Jh3L4ck8sbPojW8rJpmI,476 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/designer/images/runtimeloader@2x.png,sha256=y89-YFjAC3OPtZUnR4H8DEodoRlqVDJKkvCy3n9hZbI,1441 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/libqtquick3dassetutilsplugin.so,sha256=MoEYwnYl5vY4-4vJG6NvzI9sfsPrAxcDT2HtMj1PhEM,23192 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/plugins.qmltypes,sha256=HtVyApWNJV4apoBp10OsfVaZa4iLYAmefC7JLfq1Wbs,2475 -PyQt6/Qt6/qml/QtQuick3D/AssetUtils/qmldir,sha256=GkqV5-RTyObryHYdgDJElBiovFP55zDlLLbh7mqbHGo,270 -PyQt6/Qt6/qml/QtQuick3D/Effects/AdditiveColorGradient.qml,sha256=2QU2uF0zXEqbbS2XqK5zZbH6Sf2xfSDK7prFcKMPKPE,530 -PyQt6/Qt6/qml/QtQuick3D/Effects/Blur.qml,sha256=kF1JBFRHnwXIMQfRkt7CFQftOrsj4ECywbv3KG8C0AM,389 -PyQt6/Qt6/qml/QtQuick3D/Effects/BrushStrokes.qml,sha256=DOLsf70JFGttem4WKVKeB9oRRiA2H3-QKeHmQKoYRN8,1034 -PyQt6/Qt6/qml/QtQuick3D/Effects/ChromaticAberration.qml,sha256=gzqFQrjlnBJyKEQ3Y8a_p8uMhTtJcDj0PLtddL5KpQ8,728 -PyQt6/Qt6/qml/QtQuick3D/Effects/ColorMaster.qml,sha256=UmUmF_mKJTOxnpt2v4rmIYJ8w5Jx9bbeUiUKaxjk9rg,576 -PyQt6/Qt6/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml,sha256=IBMoyneJLSdbNVwFotxNEAzA_F8jvt4uMsnwSE8bTTo,1722 -PyQt6/Qt6/qml/QtQuick3D/Effects/Desaturate.qml,sha256=y2GaqsgiF4OJCKjUCxpnyBsHYckGecGAA5lGQ0BUt6w,406 -PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionRipple.qml,sha256=oRzi810CI3DnFqqEu1GMgyKohLRnWOkKABpXc_yXKs4,818 -PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSphere.qml,sha256=zSSmKEdO_uDmhZiks_V5sqKTsqpLmWcH5I1LrGkvJH4,697 -PyQt6/Qt6/qml/QtQuick3D/Effects/DistortionSpiral.qml,sha256=pI-i7ar2S30TVO05pP1SyAJGs5qiLGPrJLPOV--6uqA,707 -PyQt6/Qt6/qml/QtQuick3D/Effects/EdgeDetect.qml,sha256=clCIfty5uR64nAQ_lOVszI_ibH_iVaRJTQqqnu20Ae0,561 -PyQt6/Qt6/qml/QtQuick3D/Effects/Emboss.qml,sha256=FFNqINvPtyCt7LSPtYKRapzwN54ifjohy8H7YMQAGoE,408 -PyQt6/Qt6/qml/QtQuick3D/Effects/Flip.qml,sha256=MtB4tGbpAaceSt4gWpOq4nqM1U8ydQ9s5oiDopvU440,438 -PyQt6/Qt6/qml/QtQuick3D/Effects/Fxaa.qml,sha256=7wpwSB7xwquHWIBlf5H-lBqxb_QWcrcgUF3l08DUAT0,1243 -PyQt6/Qt6/qml/QtQuick3D/Effects/GaussianBlur.qml,sha256=9DDamJZOVka0vA5HvhXzUGAnxc9dLiX8_gkXfx6SKTc,1176 -PyQt6/Qt6/qml/QtQuick3D/Effects/HDRBloomTonemap.qml,sha256=ZEGpFogKVCvlm_tMCZQLtoDbyZbYfjcAj7WvuNOJWVE,3666 -PyQt6/Qt6/qml/QtQuick3D/Effects/MotionBlur.qml,sha256=us-6XsbESc1hBwe586u5S3lu0GafQK4S4tR7djHEwcE,3120 -PyQt6/Qt6/qml/QtQuick3D/Effects/Quick3DEffects.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick3D/Effects/SCurveTonemap.qml,sha256=y0ZigeXHKB2eJ0L6fR4rA9esuMnZRmLa7A5LLFw3X8g,1029 -PyQt6/Qt6/qml/QtQuick3D/Effects/Scatter.qml,sha256=tM_xKimsfJXsbeq19KF9MpGc4CN5AT_dqU7SFjN-yuI,783 -PyQt6/Qt6/qml/QtQuick3D/Effects/TiltShift.qml,sha256=jevAnPhVstvdNK-OgjwNUYvfKLni79u8plJ_OeAOjK8,1888 -PyQt6/Qt6/qml/QtQuick3D/Effects/Vignette.qml,sha256=IAb0paOvuGJdhNyLa7pzDqP2XM1De3i69r_xNDuM19o,531 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml,sha256=JFq1i0i05yviHC0E4CsMexEKvi4mhKGxFKF6ryQ0qJ8,693 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml,sha256=X5eKS5CkNN2X0yQ-Tciw-DVkD9was9jz8oiUvOWA61c,291 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSection.qml,sha256=-5QLoX39sGOceQd9MS1RMk2q97Wn6G8LoKiM3usLsy4,860 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml,sha256=fUK99AW20uK9VXov9BENKhVf-f76CYGG8IYZcEjHZTc,274 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml,sha256=CxlXMNIZGldLq1wNniFLhSNQ0JRIlr-e_8KoCrietpg,2881 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml,sha256=ZAEb_XSlS7FoQvhEVQIeLXfLirr4zCbmdpoF5loFRts,282 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml,sha256=2zgGokL1TgakBlvJ76RXJMANxp1K1i0A3eZtQf9dHLE,2291 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml,sha256=DgR97U-x1weakXWfkuWpHSeREfD3M_RioZdMPZ5vTOg,289 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml,sha256=YjlgJfH8umUwDNNuNThMC21xHdxIwOYSWsAWpaIz97o,2517 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml,sha256=bxvq58J63dAe0S4nCs6LG5Ddz2SN7cCTkT1SGaGxdCY,281 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml,sha256=USpps2FjJzYZvW1bXh24wbKHj9AJH9-gPVUlVAvRnrs,1900 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml,sha256=W5MAwrFriEC2C7_h6uj55iCPF_8K9SLXZ7tlLrjg8RE,288 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSection.qml,sha256=vIb6mD6WlBcTgmwPvtcI8lTIrr3GZrw_0T8D6DblBgc,870 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml,sha256=0tAcPr5YIWEgmua1M0kM6AG0Et7F8XdL4la4XBR5lQo,280 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml,sha256=iFid5YiuO1V3zpReOszu7JHJ-SIshl4h4RsNqOFxroQ,3694 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml,sha256=JSh9s0zy5Nrgb_3YNjyVFMSnRSROlFPersrGr1KFxO8,286 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml,sha256=dX0iRGL8XBUB8J-vVdMkUGztLPBIijM10b9sUBU3aaw,2691 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml,sha256=2HnKx0iWAeHS2NNw_D4o6dUU1VANz8xwbI-1nOssG70,286 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml,sha256=TuhrqCKQR0mNjtVrwY-T8Z4F4AFxXvOUZjmnneFpgXY,2669 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml,sha256=pLr2kjyXdO0lO80dL8iVBDz13tYMykR-Psnv5G8-sEM,286 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml,sha256=TKII0Y81TObfYEpwzvY9QXyGbrmpEogDsMMLWgJMQmc,865 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml,sha256=zhXU90cO5niMHRCZgsnRihPngN-bYGxUFtIqUKVWQGM,280 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSection.qml,sha256=vwbEAIdWspTywmRG4JGkGhte6NaFsqv8xx_Jc8w1Xks,866 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml,sha256=04sWRwXdOBPXXSnFlx-hEpawAI6dpZ2pE2cj_rwr8ok,276 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSection.qml,sha256=IYlRVdhS7jP2erOL4Z2-BejhzftARXspA4czH4guM0A,1308 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml,sha256=ossHKx_zTI7YApK9EVucNpgotN1vkyN24m3bgt4KYkU,274 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSection.qml,sha256=-rYcKIOUaPpXMRVaOvMME3R3yiJiDH9O-A61xMofqBU,270 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml,sha256=uZ-1Ggt3vsln56jA7HEsbEvrTtgqQjD0kDyZ47Guik8,274 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml,sha256=asnLEbjoMzxaAMr7XufJ9P8MaVS0Yd2-IjfSa26VshE,828 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml,sha256=VrxtrwaXYh5cpO2OOe18Ky_o3nhn8sdCmUVI2x4bE_M,282 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml,sha256=4eb8fUzoQmdD_KW_eNj1NbKUDkC7GJXNE3S8YzB7MMk,3628 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml,sha256=g7Mv3XkFGfA3wHKPxo7mkoEjM4VJP1ATnguW0wB2vE0,285 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml,sha256=btS162XudV8kfqOAjR4UofztFQhE1g44kJKF7pAOzY8,1440 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml,sha256=XPmEZ-XTuYIeL61vj9jqB71ud60DWgeUG4iVOmFXkw0,280 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml,sha256=pGZw7I7Dzc9ynnh-amgBL3nv-OnVF4gCVhV0LnXyvUw,6686 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml,sha256=mgtN7g_RVv3acPN9x8kbfR_KM2O14ubnXFlw8aEyWPE,283 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSection.qml,sha256=XORi8CftxMBQrRwUSRh-z3M_4_ueQJ25ycYL4eM8moY,2868 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml,sha256=ftT9h4J183wLELy1LDtLoWPIlV5hl6EoqhrI6txbihQ,277 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml,sha256=i6F1bmTM5O09Js1t9jfRo2_I5ZkVKI6isCaMEHNuCG8,2977 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml,sha256=LEgZ6oKxkXa2357kMG-JMcTiHuNAK7ZG8bPfruvZ9xg,279 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSection.qml,sha256=_t3L8ydL3g_u-8vGNkk3eklcjMmSS9KvlEW8LFeWPsU,1614 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml,sha256=mhIeNvDm5Q59-KmeOV2_H3q65DKlVcoyTI5i2ucm4Oo,278 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/effectlib.metainfo,sha256=5qcdoekMY-19sRkCpRGYEROtMyYIWIoMCQCMbQY5o18,11035 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect.png,sha256=dA-d2BfgwUmZsBb-znbJnfSygGWst4zoGVUrxuxXZ3M,411 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect16.png,sha256=szEHoRHnmp90mT2L2EPvP1XBMr27QDgFPUMh6plejbE,321 -PyQt6/Qt6/qml/QtQuick3D/Effects/designer/images/effect@2x.png,sha256=fEh1QkGnSjrmmP0hkpOtyE_H617-j4GyGNd21DQrsm0,714 -PyQt6/Qt6/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so,sha256=VKF_J2cWUsoM-_tLAlg8AMKD-wphjbyN1NgBN35_nJo,23184 -PyQt6/Qt6/qml/QtQuick3D/Effects/qmldir,sha256=ifUlbbLs0bus9RyuIb3gCcGHcepPM8zR0Tc6buti8GI,979 -PyQt6/Qt6/qml/QtQuick3D/Helpers/AxisHelper.qml,sha256=mtrpnz7wBa0CXejPqgPaw6MSm04xAlQkgIQX4BHZkJY,2299 -PyQt6/Qt6/qml/QtQuick3D/Helpers/DebugView.qml,sha256=RArOr5RUuIJwBr02lskdU1hd15K9Qe7DS8IWDDm5Zp4,23677 -PyQt6/Qt6/qml/QtQuick3D/Helpers/ExtendedSceneEnvironment.qml,sha256=9W2EtBbeqQe-uVCvZnuDF5CQ8j9glSqt-rUgOSmw9kM,4046 -PyQt6/Qt6/qml/QtQuick3D/Helpers/LodManager.qml,sha256=IjVd_g5m3qVix7aaMml9iAS1eSweuRy1csrbmKQxr4s,2621 -PyQt6/Qt6/qml/QtQuick3D/Helpers/OrbitCameraController.qml,sha256=csNHnc-SEYOQf82tqNKHDTFaO2Dk7PiDTLWBLd8jzRM,6609 -PyQt6/Qt6/qml/QtQuick3D/Helpers/WasdController.qml,sha256=H38ZR8OtnJiZgT_BTZIUZdFV8vcGLo-B0NCq63SOmYs,8189 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSection.qml,sha256=Ey7hQrfMzL9nbe8Pm10ocqXQy-0qOLl9p1ZVCbn52Vw,3411 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/AxisHelperSpecifics.qml,sha256=_3flIEXtzvbZrBxQwbfELR81RzyZlnrTw7fvGT-9Qyw,333 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSection.qml,sha256=VWxZmbhs2G0iA59alJdbuknDmoj64-brWCCpBVjFhWs,1582 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/DebugViewSpecifics.qml,sha256=BuNNXUuez08ZlI04yMq-4h3KDIIG8DCZIGPG0Ri6-0o,279 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSection.qml,sha256=TjSAKUOuvhhl9X-_iz-SKr7LA8upUKcNOKnJOx5Knsg,70085 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ExtendedSceneEnvironmentSpecifics.qml,sha256=KF0v45lwVkizrmbQSGg4V9G9tBdb4ejSPG3G-X4_7xM,294 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySection.qml,sha256=CVc5E5EzO1TsvC1MXeWvT5w9Kea75yVMCuNFodqvKM0,2933 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/GridGeometrySpecifics.qml,sha256=TmLzwt86kle9UgAceYnoVkq31_z4UnJ8UE5njhos7-Q,282 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySection.qml,sha256=b4KvNr4_sZyT2MEHc6M-v41yHuEf6w-6uwMznMY9Y7Q,4122 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/HeightFieldGeometrySpecifics.qml,sha256=lKKhYmdhARRp1SfcMOWvsyssCwF8Y9Ko-6K9003s1nY,289 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSection.qml,sha256=LE8Nxs3v2rp8mNzT9VIjlM8Dxh8Hj99AwFXiJLq0hk8,1946 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InfiniteGridSpecifics.qml,sha256=3Totf3tPhgMGTnhpBGuxDwYPNt54UV6EPnjaG7b-o_A,282 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSection.qml,sha256=Dbo9gPfja-lPCBwWZYcanJ75LPX-QvyPVdNConlBguE,856 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceModelSpecifics.qml,sha256=IxK_BR4vS2E-6q5OkjmgFPJRe2JZL2a2YP-RZ8FBXO0,283 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSection.qml,sha256=XnoI99U0nzLSdJl_y-Rt1zpAArJJlK5S1oxhmQ3lujo,856 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/InstanceRepeaterSpecifics.qml,sha256=cB6VqFxOdLPl37Cfg7IqkRTgp_VfRkLaiGL8DSTDdD4,398 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSection.qml,sha256=xwnLkXmZ9KFz7Qf8ZZYXP8gBiSpU_cDWw9Z7yHIl2KI,2664 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LodManagerSpecifics.qml,sha256=oeatADTfb4zc4aCEDu3yqD6qGiZw7r_ny3pCh4Ldrw0,333 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSection.qml,sha256=RmiOfBSVJ79SqaF23qN3KlqKMawhZgpi0MMkCJnhHts,930 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/LookAtNodeSpecifics.qml,sha256=5gLh5lyHeMLgLnKrUSiPcwTcMLBfxljMe9aBmTalEWI,333 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/NodeSection.qml,sha256=xC_jOrp7nEQoFw9mGQyWyMBajk-kuOfh10GgTbYW3M0,11909 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSection.qml,sha256=GfzR6vqd5LWph96Cfs5c5SvSgLJkf4EUIi94E1lSGro,5455 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/OrbitCameraControllerSpecifics.qml,sha256=8Qx9ysjjb3Vy7HQb40QXuyqnSZIaNcHXTIHdqorZW14,291 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSection.qml,sha256=BE5k_y3leURI79TFOAdLjdUn5Ebly-Jq5n-2jC_0-4w,10159 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/ProceduralSkyTextureDataSpecifics.qml,sha256=ECfWvGvvTm6xlrX3u1tLQPFQQ_OqsxB0TRW09UbkscY,294 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/Repeater3DSection.qml,sha256=fg-3o2g9IABRNr9P-LH62P-N1Fqo3Euo3hiBnVSCk8c,1533 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSection.qml,sha256=KqwYn4881KxDi7W3hHKE2q7ogMIM-5dYtYb-31x2maE,9947 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/WasdControllerSpecifics.qml,sha256=pYx6kYbfNPu2N6a8y7Q_l3mMgAW33rPCkRfJb-f2jA4,284 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/helpers.metainfo,sha256=ecUhSS1-9yJ6Dt7kHMH7TuhySN9iiu7VO64aLirWyD0,7013 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper.png,sha256=uUAkq-CfdHp4RIPBLb4iQwMT81zAotC3jTISqa-pImQ,573 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper16.png,sha256=ZhRmSZ7bWQyBGZMi848wnwk89a8O4ltfGUOjSsVgM5E,260 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/axishelper@2x.png,sha256=1_nK6vTFf9VwSyetiXZLVLExFkOYYYWnXXiKunAagmc,1255 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview.png,sha256=QoosMWnIfRFnWlI59ozk5Td6EHJZSV8EImdtl2AFjgc,257 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview16.png,sha256=_qM86IKtkr6AXCYozkvEtMdKLa9-gEPzK2U0tQKqwCY,224 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/debugview@2x.png,sha256=hmUWyVl2cbbq5wi7lb8ZnzlLr6XV8qyLyYxa6_e5-uM,391 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy.png,sha256=-8NwxUGpMeIu66UVe0fzD8YMfilYC5tJBHA7bheRC_M,375 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy16.png,sha256=IDZ6vbNiHwu75HPcLBZwgxgwPGADVt06U8lGXIppTiI,253 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/dummy@2x.png,sha256=rAztmEYpBRDzL_sRXSnlMpRC_sAbZSeoY-v1QcqMjtU,499 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment.png,sha256=bc8L-B6rL6Yk1aK7il7xHjPL-543RIQko3fhRffiH3M,821 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment16.png,sha256=i19DP7im3p3O7O-nyydKYetfsHUb0G9uybfun2MC7vg,673 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/extendedsceneenvironment@2x.png,sha256=FinyY086g3E7Llic7V8iY9uJNtASTIf0cA2eAY1T0WU,1138 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry.png,sha256=-RWE6f5oNJvnF9Q4iGasd5OBvR_wISPqf3Gr_XfqjWQ,550 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry16.png,sha256=FWRtaNWf_PfIRBqxAxTMVojSr3ZQ9F7aWh0tbrCgsXw,373 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/gridgeometry@2x.png,sha256=0atzT5OfD7VvRvGFKYYI8DDlPKtlWog2SHJm2Xg0rnk,1115 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry.png,sha256=1vhq_7gt4EfbPTE-1owIRaPpcN0F96iWAgcupSPgB5M,3197 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry16.png,sha256=kJ-iVoXzjU_jjqkvXo29l5RkBhgroxA-IWk3w6RgPF0,3032 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/heightfieldgeometry@2x.png,sha256=cCrbwJQB6rj3WZrih-G-mBTJLMEPYDMKVp_gLqthLgE,3745 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid.png,sha256=ppHZLmjncoatodQX4VQC69oGVLPLunta1zVgRFjiivE,1152 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid16.png,sha256=UI7cA1Ihd-zx71rOXfdU5_nHDUo_3LwhXNihvTh1RMM,890 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/infinitegrid@2x.png,sha256=TFBeU8T-vsmIlKOVyQMBuYN2zTEdaCEeG2VWjZF9Sqg,2103 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel.png,sha256=ZARgZWV9h-a5dhkdomskF3aJGk3_Y7sZfP1ozPacLPc,693 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel16.png,sha256=j8OCUFSdEtSFWLtVQABMGd-ycuIIducaW0AizT9u80U,317 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancemodel@2x.png,sha256=vKyMURfAoTyJ3BFcoOmfmzQsXKddHqKqaPK-raeX7IQ,1218 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater.png,sha256=kKLkvl3Qr0Sb9kI79Sn80-pTGwD698ZQ4zQYuncje5o,805 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater16.png,sha256=o4oPS0SlbKSMnr3b065M78FGBDpA6_GUDYJSLJPKUJU,315 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/instancerepeater@2x.png,sha256=SH8wtnbCA5q36K9hb7ud_NQKctBHsGfQOmjlc4KqWGc,1618 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager.png,sha256=vL8FHoOkqOT7q58AUsSYz19-aVHLOBCveet3aHwPqOs,1023 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager16.png,sha256=wTGQQ599mHAA1ypwp_9ha1RiiWBQ-qBmGWF4ZiaQNtk,811 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lodmanager@2x.png,sha256=A_7odUALTqZ5WYOFncxkpQZgGtAKwfEw9PmI_LvPGf8,1594 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode.png,sha256=prHpHzw3d3HmfXmHXkbpWTqb4Fo2J3OMrSBT2h6P6Jk,399 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode16.png,sha256=SLstOw8KwKY4wSX_TRu10k-lfe8oiWa-otnMG48s92c,241 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/lookatnode@2x.png,sha256=96OO9tKcVDZxRZ7-YIotAq9qHdAiV2cwWGau8UKHrKM,838 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller.png,sha256=SXdgIrU16wbaK6WGQ7zrmklJRq_kmpE_q8LI-GTBzFE,953 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller16.png,sha256=WqnfZMJHWg5Rs2SU8TxXSTcg2cOkWLu6d8kHQgJYgto,752 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/orbitcameracontroller@2x.png,sha256=I16CEvcI7xWgxcjJHIZR4lydsEuhnqRk5B-UBHD6zGs,1442 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata.png,sha256=yfImKW4y-EbveDKsOsjI5-76dyQNpj_4Km-gFq3-_CU,792 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata16.png,sha256=te35n95y6nec7_tbzkgw0eeFDVibVDZrwm6DYBs7g5k,740 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/proceduralskytexturedata@2x.png,sha256=ckLWExSid0aJxrUld6JJ0Wk1luTLabNHKLORx7-suMo,1062 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller.png,sha256=bvM0hTKiYBUs0ElkXv48qVHPAphvfCb444Sy1qhziss,241 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller16.png,sha256=AOsEG-OQNLUwbLEsZ6dyL0DTzMUctfchlrjM18k3hgU,202 -PyQt6/Qt6/qml/QtQuick3D/Helpers/designer/images/wasdcontroller@2x.png,sha256=QQCQJXKTs7b3EzkIocWWhCT0TRVqbqRrYsZ_ViOIs9s,334 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/DepthOfFieldBlur.qml,sha256=qTOoTWySU3vgSa_VP2Hmr8cVShuXZy265dIHBJdULvA,1770 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/LightmapperOutputWindow.qml,sha256=X9tfBYn8AGHlD8RKMPhENVw5L6qnRZG9ajoKIJZByCk,837 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/SceneEffect.qml,sha256=f-VXqz95ihGjdSaCF5IoOhxXpIdug17rXrlzsbU8Ud8,19822 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/libqtquick3dhelpersimplplugin.so,sha256=L-8onzzSS4BiF5TS1lzfdnrPrXlKlv4SM8HDNFrruro,23192 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/plugins.qmltypes,sha256=SdxUk8agl7xr0MvBC_FhOlzqApxmx6HMXXozXAZBODY,4640 -PyQt6/Qt6/qml/QtQuick3D/Helpers/impl/qmldir,sha256=otor713MB2s-5K0LB7vDTIjALN3gf47tP8VDKRJ762Q,380 -PyQt6/Qt6/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so,sha256=eJfGPSSfqCghrXhwtGjZZvaNyvt3IQBh3Yn3IOs3lI8,23192 -PyQt6/Qt6/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh,sha256=taa7WIDChjp_KIkO_LqC1LBgZAmraMRGMbIhLpiYmjE,128684 -PyQt6/Qt6/qml/QtQuick3D/Helpers/plugins.qmltypes,sha256=gtez6TF7kQ70PvMeVnQxuY8DZnOx6QTnOO6ygdCr7wM,27176 -PyQt6/Qt6/qml/QtQuick3D/Helpers/qmldir,sha256=tbewF8HYM5vFfzbfArMRMMf2uMcYeZHNv13P7ncNd8w,763 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/AboutDialog.qml,sha256=ZI9UcOpeZyi4WHZc33G9Cumd0PxJ3_ajDZFhM1uZwZ4,768 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/EditorView.qml,sha256=nt9Qi02zBRzoIjsb6EqB4Hd7VnOJ1zb8hOTK9O8NZTA,4400 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/FrostedGlass.qml,sha256=pyaT2p4Qfcfx8AuJdKWaacQI9dk0QRbYYF18FvBvbfI,1428 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/MaterialPropertiesPane.qml,sha256=-JpjpI_HAr4MgWosZOKFVjY1ekn4oTaPrVmKrrPveUM,6930 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/Preview.qml,sha256=8cmkYJHFvvMs8KVF532FaKoBhuyc8-UlzJQzyK-S1FY,2235 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/PreviewControls.qml,sha256=HfUh_4PsHU8o6_Pwl_UK2P4ipTzFoEpuyJ0mjV6ZIcQ,3626 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/SaveChangesDialog.qml,sha256=6bnJ9U9giRl4rdmlDKeERolECxoVU3GwjOLzFOrP2fY,3597 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/ShaderEditor.qml,sha256=HvwUE7DliRLIDNOZKcZxCPTpwRNwTRl4kgSkcio6zC4,2959 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/UniformManagerPane.qml,sha256=4p5v0fojiSavjX1SN643WU3R_kyOY7kKv2Ll97L7LMs,43925 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/main.qml,sha256=C3ggJPhFPEMZ7RIdkN8uqmahHbgZuoiLzLDPjPSfuXw,10253 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/plugins.qmltypes,sha256=9zqCDsAYMH0wCX9n9sfGna218tM6yn6GsePIDLiRJKs,9108 -PyQt6/Qt6/qml/QtQuick3D/MaterialEditor/qmldir,sha256=fIXerPi82Vh15ArwTXFbDSnr6rxSEYXm8EdwZHF-xNM,472 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/Quick3DParticleEffects.qmltypes,sha256=qWx79YMnZ73J2R4ikKOSCuw6v78uOBS844tJSD8W-Eo,215 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table.png,sha256=DBkztCgvrNdPkYa3JQYMMFD-SeMKNH6dz0Wpjg9KDl0,14173 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/color_table2.png,sha256=K7GRXmaNObKkTNlIsx1meFSFkrrjGw0eumc8e6sKh2Q,4469 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/droplet.png,sha256=lsBP4fvykuCrXp5IM7RAmEtbbN7pnU8U5Velw2wtsmE,6951 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy.png,sha256=-8NwxUGpMeIu66UVe0fzD8YMfilYC5tJBHA7bheRC_M,375 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy16.png,sha256=IDZ6vbNiHwu75HPcLBZwgxgwPGADVt06U8lGXIppTiI,253 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/dummy@2x.png,sha256=rAztmEYpBRDzL_sRXSnlMpRC_sAbZSeoY-v1QcqMjtU,499 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/rain.png,sha256=Eeaia2QC2qoQ5fX6jovkweVF8SzejM2DPiUbbAvIbBo,2138 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/ripple.png,sha256=NGN5SkSwgjq9DmJbHHTpRE1gwxLYlywI62B-ahtI5Tw,7438 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke2.png,sha256=UM4J0tv1i0aYfVOgHVYorlQsBg7CnQDR2pNK5NLBrxw,15475 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite.png,sha256=BCB-ezQvMtKFmVph0Z-wf5Hxx59GxgPOciGRRsTes-I,62006 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/smoke_sprite2.png,sha256=MqUjcRXY_SDtF88F3q3GIrY06hx_6guxOWcwJWrsg58,29414 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/snowflake.png,sha256=U_IuG6hJ7UL_uQAF2mObhvB6CiRqCW3C_YWPdFi3VsQ,37226 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/sphere.png,sha256=ddCZ_TxtXm4Hs5QIpPgVjQDwtz_DtuMwKBhkJxkhFzE,1604 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/images/splash7.png,sha256=cyG1_zdbC28ZuuMjHAkZL5HI-vFFFRcYzgej_qoor-4,46580 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/particleeffects.metainfo,sha256=YnrIwljAXWmZk6uZE_ynlTGtLkyNX76mjH8htc4BGow,7815 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_clouds.qml,sha256=e5vT15w4KWgH_kHRPUBuMb-jabgP0wNZGKo0-y5KNqM,3261 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_dust.qml,sha256=VMSLj5WgAqYTgqsyi295avqNXdlUWvsJaLd7QcWCpUU,1569 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_exhaust.qml,sha256=_2_VUEi3uTfbgntSoMnLYyhttnS6z7jnxI6Onbx8xSU,2028 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_fire.qml,sha256=fcXfMzEsY9UoTpY9JGtIh7GYpwIKpCyK5NptVZlM__E,3524 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain.qml,sha256=8SPZIRnJt41W5GZKoNH4Fjy65-QMES36SMW5CFOdNjk,5303 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_heavyrain_tirespray.qml,sha256=xiCAiV-DL2pmrq-AQy7c2zaQw1dGITBN3fC8AUL4x_M,5872 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain.qml,sha256=kwJadnS1JLew796cyzXoTtf1dAlovXsQlDmvEGV5fKM,2845 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_lightrain_tirespray.qml,sha256=klwC0SdXlsQL5wQq1ZxPmWsuGCtNtvPlpxIY9vz0p2M,3584 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_rainmist.qml,sha256=ocsotDAn2Z_6A8riLMbCAczclqpVQxshn_jfgFodVo8,1904 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_snow.qml,sha256=yw-n5TvEyc8DAzCseikm-WJNZ-vAad6ug1cWtOLNfYw,1452 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/designer/source/particleeffect_steam.qml,sha256=yVr2i7DnT5k4rZvuXwZMRuvlY7Kjntp_TmRnWhle8VE,1840 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/libqtquick3dparticleeffectsplugin.so,sha256=3k260JJ5b3FfgSb8_a5HO73xM4GYvMMZnBkPLLjSMXI,23200 -PyQt6/Qt6/qml/QtQuick3D/ParticleEffects/qmldir,sha256=oe9klQl1KugBmI8zq00Qqpe8FARG5V33FX5O_JIGRN8,345 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSection.qml,sha256=zS_fE6FMEOhfh6kxuRd7wOXg-md2T7eO0VZD6AtYkn4,2451 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Affector3DSpecifics.qml,sha256=zb_GycBtvvq8oGNOlF1cLJJ0uDVW_TkZ4nG4DXrJY2g,333 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSection.qml,sha256=GgK5dCHGfOYQLMtEcmDMh7wYcUn48Ze2ZQqr0-HZ4cA,5840 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Attractor3DSpecifics.qml,sha256=OAzBkirPqgVrNivWGgOkZ3DDqCyMIBmXOOUfB2ZuKW4,393 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSection.qml,sha256=6DS0gjY4FfeYxTco_KT3Qy26BNJTz_G9vLp3sO9bU6A,2098 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/DynamicBurst3DSpecifics.qml,sha256=7sB8dJx72jer7XGQsMpxY_CEGCVoqxuW0d5XYbsMUy0,344 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSection.qml,sha256=MQQfD1jZXrAP6hjJm2vUM9w1pj4sg5MtxColSdem9uU,1970 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/EmitBurst3DSpecifics.qml,sha256=IV1YbreEv7od3yAXZdzNo17sMwpoXXrjaxWiHUfI54Q,281 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSection.qml,sha256=-8P4atBv-W_bqQfqwrN0oQgnEuqqsug9QFt-mUhtqDw,2947 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Gravity3DSpecifics.qml,sha256=zRC5yYknBaykaNahJt8sPmL-CE7UhLFH561CHAbokUU,338 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSection.qml,sha256=8BeWJZIyTCZvCAX9JWrCWwncfD5SnhDRXLFTEwd9Bc0,5438 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/LineParticle3DSpecifics.qml,sha256=MdUsJlUiZ6vCn5VXz7SeDHtoPVhDsGHS-h9E9oPNxOQ,408 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSection.qml,sha256=7TyOjsqdTcw9Q93v_Y1xrdYIP-w-mBhw9VnpZK-SDlo,3606 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelBlendParticle3DSpecifics.qml,sha256=xCi0vi9N--vjpTAzvN2TgQZaHmsod4Jef6Ov2MoFR9k,349 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSection.qml,sha256=vL6cjbMbJ_gm2g0NJc9Pua4MLHfEtW81r7xXhB6gxaA,865 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ModelParticle3DSpecifics.qml,sha256=b_EVKtaNHupsO5fi_A2lW5tnLJu1WU_DO1-GRluDggA,344 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSection.qml,sha256=AYmDz6uyN3iR6HE5HMzKzm6r-RZLM2Uh9BED_BGxfE8,11906 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/NodeSpecifics.qml,sha256=BTAgiywOAvaoDh6L0h5kkdFoHoVlI9DFU2aeC8f1ygA,274 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSection.qml,sha256=pQADPSrzNzYdgNwIGqxTZyOJT_umuPLeyzQipj3m7is,10980 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Particle3DSpecifics.qml,sha256=N-V3yMO8PtjVxNjrDpPjI6o7QIkY4zF6piRJ3PYL-IU,280 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSection.qml,sha256=L_bzYOoLfP4QI1QdZFrkJNQo98E-GPe1KwBBb-WZbL8,1284 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleCustomShape3DSpecifics.qml,sha256=iTChHJE_DaeFbhBiz-IgetzLPaqG9807quCIqfi-Swk,291 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSection.qml,sha256=XrIANkFl5QfrUc3pRGYn14ynaQZDXd7EvrhcWzSNIpc,20320 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleEmitter3DSpecifics.qml,sha256=jtjVlgC7LTKIyxaodSq6Oh7DcSdX-f-3wsJL-_WoCPY,340 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSection.qml,sha256=02daPb9tFdV1_onIqVTj_X5DgkXz5H305_fJ7HhGA5U,1422 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleModelShape3DSpecifics.qml,sha256=V9OpEPElq-7AoiKMTRXhzzc0pAkqKs9MjsjDEsS3Y9U,290 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSection.qml,sha256=SFozFGm9SGvUfiFyWYcdSJjHRTL188on1ENLliriYHw,3431 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleShape3DSpecifics.qml,sha256=bRoT1B_HRyf2bg0UPf-MI-jw1n-vCEjTXKvn_9uoavU,285 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSection.qml,sha256=2BlO92Qxtw0Zs8V3h9jUmYjZtjuVOLLw1ClUqR__vU4,4177 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ParticleSystem3DSpecifics.qml,sha256=S0_iHFE1KU_5fLcyL-oCRN4mOxa1I7y6xJBltItsXIA,339 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSection.qml,sha256=ZXCK2elnpHtdkxeQZFixgM1FE2O1jlTiAnx66krqORA,5083 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/PointRotator3DSpecifics.qml,sha256=orF4L9vrfLcrL80vtL6LWZ2hjBV0oNs2eKuDz8Mug08,343 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSection.qml,sha256=VcI0e7nvCpfhl2cZWE3Uwu4HSO2VF3wmmxJNC2e5xS8,1944 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Repeller3DSpecifics.qml,sha256=ku_WEblycp_mMxdCWoyMONOFEBvzau16ey6hadNJQJQ,392 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSection.qml,sha256=UcdDa1gtMbjGR3ti0fHq2HEzlQp35SQLH8ncutF_wFQ,3092 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/ScaleAffector3DSpecifics.qml,sha256=foJP33HFyccKepiSO4gqDveQSkclz1rERmxFCER_R6k,397 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSection.qml,sha256=PjCJeHcngmllBvhh03x4Ss9ffHvJrXyL7GXPG6SPYGE,6348 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteParticle3DSpecifics.qml,sha256=JfIJOfVR8_p-o7aVRpn6tI1XgjQkWxGaOpnQyN-UMwc,345 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSection.qml,sha256=z7No4IBE8COPgDtQnXbv_Jn3l7AAAFCVj-FMkxTqoB0,4414 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/SpriteSequence3DSpecifics.qml,sha256=jG_SkAGQpQEJiU3pB-AcE2GhrCPHe3BiUIwuR1A7aCc,286 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSection.qml,sha256=M07j1-klhIfjOvrLGv0qBFMoFPCNuFWHHBwtIRdWwSc,6170 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TargetDirection3DSpecifics.qml,sha256=kIU0apnvgY0iJ-z6RSOoVVRLC24UmU2-LiKkWfZeSfE,287 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSection.qml,sha256=Ezgbjc0h-FjvfuWZZsGSCEExpU9y_27puAwhOlVV26A,862 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/TrailEmitter3DSpecifics.qml,sha256=aQCc8OVIBFjcD1XnHhWKdxFx2ivUiCqPohL9Suz6WPw,350 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSection.qml,sha256=cjP2kCyK6Xrjfkbh94BkhEUzFeTX0uqwKc3R6pA-Ayo,5070 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/VectorDirection3DSpecifics.qml,sha256=lGkSAnokg9dMRpY0W1mIB88NGGOJTZj0rF8JU4CCnGk,287 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSection.qml,sha256=AN0hD1Qn7znDmOZR_9nWfhWrZzoSmhZZhN6xJi2gMmc,16637 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/Wander3DSpecifics.qml,sha256=VgQa_PGjECNe6V_f8jIvHtabhEPVHuNWru3LxNPifbk,337 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-16px.png,sha256=ZQ6MXMXRjx8R7ztUcFKU_KLySvjgKGLfdbz4zo4xOW0,288 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px.png,sha256=JQotvhxTO_FuqeSJMENN4sE9PP8yh7rwwTONJXSFLmU,371 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/attractor-24px@2x.png,sha256=vIbnF3MNd48v7jIC_XdBVuNX1xEfYMR6gGc79oTazxc,586 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy.png,sha256=-8NwxUGpMeIu66UVe0fzD8YMfilYC5tJBHA7bheRC_M,375 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy16.png,sha256=IDZ6vbNiHwu75HPcLBZwgxgwPGADVt06U8lGXIppTiI,253 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/dummy@2x.png,sha256=rAztmEYpBRDzL_sRXSnlMpRC_sAbZSeoY-v1QcqMjtU,499 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-16px.png,sha256=xhJZAsSojVVJ_YA_fKc4p1yzQ9Sp-xKWI0KdTn4yg4M,381 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px.png,sha256=2CAzzOrtfQgXkhY4uK23E8nQ3KLQIOIpT7hQqKAjePY,650 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emit-burst-24px@2x.png,sha256=GT4z02F9fiIz_Pe00n4CNq5CIPNNaI49Ar6V7a_QgX8,1529 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-16px.png,sha256=LpfpwOffsKAdAQmAMOlyJB99GzuHVFr7K9xz3iB-q5Q,318 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px.png,sha256=AM36OZb3Z1ulJgfmM8eOD5d9xvvxTCpBOPMKgQ3TqQY,675 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/emitter-24px@2x.png,sha256=moe1nJLg7NEXbNzMtFIUAeiqj3eYyS2RovxfPxhO9bo,1512 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-16px.png,sha256=Jghnje4mv1dGRd7acdVJUMcCs-IxVyvxjMRZnjd3ob4,328 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px.png,sha256=vMiL7EtAteUFvhHhdrz9sCSb_UFoesHTjdQ8UoPvBy0,448 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/gravity-24px@2x.png,sha256=syAIRlhDZpidvUNHdirb5uDPvfb1_9ILX4dIl4piib0,873 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-16px.png,sha256=YUymcs4zyoQ3UxyFhAFngBIu7SNe-6-JGERkrtM6jek,515 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px.png,sha256=0CZR5u1ZzUSDfyjx2mac8OUbelvuypaWKPkX_kG9dEs,923 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/line-particle-24px@2x.png,sha256=zs2ibPbBV_Jy4-0TDrM-nvmSSXHnhuU5BgYUFDPAKr4,2268 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-16px.png,sha256=Y8tKbta1Ko4BxPIrfhyQAgjVVP72VbrbLPFgJpYa-7g,384 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px.png,sha256=w0JwtVNGsAjBLrwta51rqYJT8iA7406mLbktY4kc4hE,515 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-blend-particle-24px@2x.png,sha256=ZLWTWMwjmhhyBgb_6XIFrHbQ2HzSUvjpEK3I2B8DE1U,1055 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-16px.png,sha256=EHcVYyP39wwp4ZTlCw_DZBH4OdotzUBjcaQU4z6P5eg,448 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px.png,sha256=H6qJ8tTHzbNHKU8GHrtvlJOFf8klWKM8EViB7efaAO4,811 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-particle-24px@2x.png,sha256=LPObFKXUtD-s9icQUzMso3M2RX4XNvZ24UTjuJFmXSw,1725 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-16px.png,sha256=E4CstmVpCHYSfj_7ikhThzJKEK1v8ECGsGpJIWKfRGU,367 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px.png,sha256=GWEzKNcDNXPcHMOadhyRTa9sXSbo-GlMcZ3jbsd3BUY,496 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/model-shape-24px@2x.png,sha256=YCvoD5z5dXZC7of0hx71x2ptUNt3JWByrn1SzLw7MWk,997 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-16px.png,sha256=K7yT6YEJ4-eqxoTt0XOXtu9I_DqdFZ1tpHeYpacrcnA,364 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px.png,sha256=CRLJq7e5pwu4MUvDWUNHhF-0d1M7xakHDDAHjdXy0Go,911 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-custom-shape-24px@2x.png,sha256=BB4E3crKAgXjp1GU6C1B-3qJt5rro5NS3M3Y2zuO6Rs,1850 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-16px.png,sha256=FyTZo707DCX6YWRseSib1AXtQQs1Uj3f_jWiA8Lt6_4,331 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px.png,sha256=332LDgC-XPQTS0luhX1kffGmKlDJnzmEx-_KkyD92CE,719 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-shape-24px@2x.png,sha256=Zh0unM2pYU-1yaoiBDNJz7NZw7JWh10iU0DPREkIX3k,1475 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-16px.png,sha256=lwPJix5T84ONW26c3b3ErFvhXucJ6zR_PhSl6Fiu-Mk,334 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px.png,sha256=qYDD9jcZT_QyrAMPfCRUFyaHo1hbvhLkkfgV4aZ8OLQ,811 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/particle-system-24px@2x.png,sha256=6ukm1SyG5vBAsy_bgHdUhs-9_FeivBfkkr2hvoHPWhs,1702 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-16px.png,sha256=hFs4n0Aendf_mkAImavjYk7Zbh2H80zigVy6jSBDAkc,421 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px.png,sha256=OOm_rqrQllzmKVSyRVmS3s7xb8r4lb3j7gVAbydjTgA,600 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/point-rotator-24px@2x.png,sha256=sNgzzGRcunpPmNN7px-PU4ufIYoNk3Ki1k78Jrqs_R4,1125 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-16px.png,sha256=RLzcREZ7DJV9rGzBjQhLzDskzGJjbI6-FhoRcruZwpQ,758 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px.png,sha256=yftdwVWw2wVO95_-lsJVl9iJSlNaGzAYIJo1WPCDHJE,758 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/repeller-24px@2x.png,sha256=CatjFEK3wxLW0BcIg3RTwt5q7Dbswu2hH78JpeXw7XM,1625 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-16px.png,sha256=5VvpW78NwUHWwM5ASqezTqUap_hkIrimxfxV23hnnxI,795 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px.png,sha256=KrWsYJ91YnoXH9TsPrOqem4XYERBSFGSPtAkda02QBw,795 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/scale-affector-24px@2x.png,sha256=X_1BNePIcLAyq3ORe1i5zANyZyiTZOwxFbMgM9wWreo,1658 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-16px.png,sha256=RDKKnXX1yq2aqitidISL64Dh6tjJAhnjyQ6CS5PQfXE,393 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px.png,sha256=pZYprFwfm2C6Hw9snQXMpoZXQRHRbiyAFDWgirp3PNU,774 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-particle-24px@2x.png,sha256=cwbCeF8h9fszuJM2z3v3LERjKf0xf4YjXZ5kdjo3MTY,1489 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-16px.png,sha256=55wr2wI6EMJPELK5mGfLtcP4hLNU6lhwmUECkFoZZC0,299 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px.png,sha256=wLDk66pK0YC9CggRwjLFbVzHPERiv9a70iYIXbkD8H8,389 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/sprite-sequence-24px@2x.png,sha256=81fECg5cnmulrVMu5z4ktOPCTz16LBw3z4Zsw0XMovE,515 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-16px.png,sha256=mlEx6tzYAMno_r7FVKhHtcokoAdjNJW89jNoiANhXKk,253 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px.png,sha256=li8ykIYtiyE6ItN7HJHGHhP-ZGpXD7ZY35D9yaI7WqA,436 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/target-direction-24px@2x.png,sha256=A7i5_AjS_2hOeej7reUiJTczKX5L_-uEiaC6ivdvPjM,879 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-16px.png,sha256=jfWVb246dEgQA21tNmA1ThQmzmZJVr3m9HpUuml6FeE,359 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px.png,sha256=mA_cc-z6gw_E2ThN01uz225oNmQcbbzV58jl4RUeUIY,646 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/trail-emitter-24px@2x.png,sha256=24dN64a5rCuQ-nCKfvWRUBG99a3QzBkR3hz4f5YSqqA,1364 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-16px.png,sha256=4QqmsysE5yyZ7p2QP3LvWB3Bx9GCpIgKFQB9uOvfnDI,323 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px.png,sha256=kx9-BrYzeuiLDI0CUTB4rWT-J0xs_yX9WSny6RiFFAI,444 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/vector-direction-24px@2x.png,sha256=-m-ednZC8Be4396eb5NYFHEYKc1lcN_4iqUSOUxogI4,694 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-16px.png,sha256=QOjSj7HsV2QhBoA6w-9k1USh4wqrekrqOvLTnioIVbI,334 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px.png,sha256=pEaQP7FAQMU0L69_Szbvj-XLXd1SJ16DS7tihwav_U8,458 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/images/wander-24px@2x.png,sha256=AIuEqNB9Cu9ec0mJQsEi2ocDep1LodJBxpPTcSfWTDU,864 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/particles3d.metainfo,sha256=RHt6it-xZ24YDqjSq-kBXRpNhehawljWe9OI1GF3xKg,17202 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_animatedsprite_template.qml,sha256=OmZP3yghJu2bsu6G3xd09yBV0aI5A19YE9R6MjQ-Myo,954 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_attractor_template.qml,sha256=zQFVL68z_4c4NYis2JvS8Id9qLdnsRSBtNnntZovjcg,812 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_burst_template.qml,sha256=3w_SxOx196i5jabX7ZcPa8TdBGQ19VoCcLN6TG0E-3Y,793 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelblend_template.qml,sha256=9_iDG5-s10iKGVvXFyB8Cixwo0PPnOJvHn_fV7KIXUM,1136 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_modelshape_template.qml,sha256=oW_rsh2INO2AjUvc1fotMZhbwmq-7fIIwmlJN3WXu84,1394 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_particletrail_template.qml,sha256=U5CtPi5b2ahk8WLrAFWq1iRN5o5LPVoHPYsYKtvOGco,1161 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_sprite_template.qml,sha256=p24LcDKderH6HVl8_qkGhIA-Js3detPPiD_KStSbygs,662 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_template.qml,sha256=_wALHD2eIZExWTRUY-s6JhuCm6EoZ9i3NxdvBBV3KX0,1007 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/designer/source/particlesystem_wander_template.qml,sha256=R0UL0nQJ20UPjeFoN5Hbb6Ieb4PFv9FrmufsK-H2MzM,1283 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/libqtquick3dparticles3dplugin.so,sha256=QVDTzIhPIOXAcUXy3aQ9VE1sbduh5rvYwZif5inJ-kE,23192 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/plugins.qmltypes,sha256=b-FImwuVnxHm4kdkMhEHWWVWmiiSGVEWCRCkpbUG-pQ,62723 -PyQt6/Qt6/qml/QtQuick3D/Particles3D/qmldir,sha256=i2eDiLPimK23wWZ7I5wf80-VBsUqA36oiLMyQTwmnZ0,275 -PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/libqtquick3dphysicshelpersplugin.so,sha256=WwJvriaHg0YamFbLDCYmqJzrV8CxcNDTyQZWy6DVByo,23192 -PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/plugins.qmltypes,sha256=HT6FymZIkFQn_q06I0kRZ8PtvzOibeOr8iFXY8R0npg,2331 -PyQt6/Qt6/qml/QtQuick3D/Physics/Helpers/qmldir,sha256=45qEeHrpC82UnDtvyc7-D5itFvpRrl4oYW0sTv0DswE,344 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSection.qml,sha256=XnBF-awEUSyMn3PabN6NLngZ3vhSGr8VLFbHYV7oQ9c,2377 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/BoxShapeSpecifics.qml,sha256=8ktcNzvZKf9d6llIcHNAVXPy9zOm2N2dacNrRW4n44I,394 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSection.qml,sha256=bqrRqRkGtjeetLtre6UndJKnkXzScqnqLcG2a1ouUQM,1397 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CapsuleShapeSpecifics.qml,sha256=NZM6ghJ53kYWYMoy4hmFfCu6sU72LoD0yOMmoZi5wVc,398 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSection.qml,sha256=880UoGJCCX1udRCt3H2f4IJf0ibpu3VO1EpQbaZIi6E,5546 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CharacterControllerSpecifics.qml,sha256=1FeOr-yr3FjzGKXnJb6Z587CUUNfSO6Eq7BdxkRNcFM,462 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/CollisionShapeSection.qml,sha256=FKQh7Te0TR1dhtRR46-wpM7C2f0PuvcQ7n39uky-Mfk,961 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSection.qml,sha256=LBk22n_brwAn9EazSsOaBOeo512Li91y62Z1ptK__CU,719 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/ConvexMeshShapeSpecifics.qml,sha256=5Jf3jCM3t4PSxDyPv1Wfe5vZWKKQsMXdG42qPM1iSN4,401 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySection.qml,sha256=R1o4ECB8fuvRRCjry4CYd2ooxF2YjRKMgh3fwkQEGAE,24653 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/DynamicRigidBodySpecifics.qml,sha256=SrJv_4dsmCgqz21RqwBOqRpnHuK64xkYftcwFenT-M4,459 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSection.qml,sha256=FeTUGGkYFcWDcnZstPsVojL2XOjXIa7xKvPyqRS8CKQ,2720 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/HeightFieldShapeSpecifics.qml,sha256=Pvti9Zd4G-Cot3WWmtinp5ozt2eejWM-FeidFjo5nyg,402 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/NodeSection.qml,sha256=9Zdr5yoMhAJMEP-mNhW9xg55Q07GLuKv6wZ4IpLzLmM,11906 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsBodySection.qml,sha256=LuNxfSFj3r9VlBo8GA5x_dGFhj7jkC3EqrcfpyzEK1A,964 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSection.qml,sha256=qKdr3pGaJvPs5Neb52FSsuKYAqgJb8tBTZ26t1DwYhM,2144 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsMaterialSpecifics.qml,sha256=LOuBBy5p8g_Pw49Pygrp2UdtwBgUWuJ8EPLYZ4B9Mc8,284 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsNodeSection.qml,sha256=cUKLpv6Zi5qKLzLqc_Y0-4P_Rpc5obHYrKOV-fvXybY,3816 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSection.qml,sha256=hxbnUcY9E_F0hop2qMccxLkTZ5qLy5nO0zgoGo4nVt4,8286 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PhysicsWorldSpecifics.qml,sha256=iYiVwjbLFho3LKdZAarMXvXkItnAZFksWP3tHAocv4E,282 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/PlaneShapeSpecifics.qml,sha256=rVVuXs6FSk7txMGN1YexKXvMqSBtYuvOGxiP3Ph9xsM,337 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSection.qml,sha256=w0l69Luu9IJiyaL2emDuFOLEsddMtpQUidE6hoNb5nk,861 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/SphereShapeSpecifics.qml,sha256=BK4v3BxHm0j6grlhcsdAEZvlbg2rVsE1XKSt1spf9wc,397 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/StaticRigidBodySpecifics.qml,sha256=32xpkyuWdoArx37GuA9T3pvy8xiU5l1Qz2MKScPruvk,394 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSection.qml,sha256=zrddS6x4GA_KdgqbNiTJzVtFp5Ffi7zpqxi29tOCKVQ,721 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriangleMeshShapeSpecifics.qml,sha256=0wVdg5UeGqJJJIbbnvX65YOxEKoDvw4ZdDPyGZaJPgw,403 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/TriggerBodySpecifics.qml,sha256=Fqp3lqXWk52EIg_uckASMFqVwx9NeIeuUCDohmP4m9k,334 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape.png,sha256=3KETVus9AHRi2M5wfIxq9tisKQ0lNN2TJIAOofLrsPg,890 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape16.png,sha256=ooAk5aItpeen4q105cOx_Zm1GohqkikwkwtE-qAr3LI,771 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/boxshape@2x.png,sha256=JBXxMuO9zun7yVBI3goosJdcti4nPp-Kwfr6Hv_WSrY,1147 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape.png,sha256=M2ZGxcHEzRzV18quvIGTEbbF3u-UgXOSEFcpdpWboFI,821 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape16.png,sha256=4H-H05OH0sgD28JiGCV1d5ue6dgwvazbyUSsndAevYY,697 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/capsuleshape@2x.png,sha256=Auj_ELAiG-Ywa7dcOqw8-aQUEAGGGzj0vjRCSJ4AytM,1294 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller.png,sha256=3tPQcH3ia9mUdMOnZa2U5NkEycxwm3fRAdn4jRyMclM,846 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller16.png,sha256=X3AHj2Uuaw2_6CpMV__c2i0N-q3nh7ffhogRi2F8qv8,698 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/charactercontroller@2x.png,sha256=tT5UteTP01zhxGJatdrnyxrThUgUuDSMoQ8ASTDHegE,1249 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape.png,sha256=oelx6Rb41L-Z6w00nZ3m38lHljA8WwlSZCrCYYSts2g,1162 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape16.png,sha256=4rOU1WMlFwbLNbLgvDSEdXO3Wq91eMvc5v5Z8qs-_-M,860 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/convexmeshshape@2x.png,sha256=uIWZOTqG_N_kmVcdtttsSBxcp7z--nsKLYslb9c4IBc,2321 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody.png,sha256=25pDBwHr6l6An-U4utITPK8o8brF9EbFDlJ3AUG6OXk,831 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody16.png,sha256=cLroIMR3_ZB9DdWN3FnmOvfC223Daf_zN2_SceYGrAw,728 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/dynamicrigidbody@2x.png,sha256=ov1AGLRZu_ONyAz9HS2_UQnCHfUNBrWv1UT539UIWJU,1230 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape.png,sha256=z7T7TmZfw7PEY_sYb1uJkqU4kK5GOwErb2iEio4P8v0,873 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape16.png,sha256=R6Lw2piIJkW7MNtZbHU36eoayJn5rks2hUmwIXg0rQs,725 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/heightfieldshape@2x.png,sha256=-KTIs4pfhohcu7vrtLVs7olo0XOqdKtFcSTVt6qRfP4,1546 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial.png,sha256=b_d7hk2INSSoJLyXcs83IaUFuK0vF0rlL_yz9zY-YAY,1032 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial16.png,sha256=s1RC2neFs26olTH5grUKDiXLS0U-9jKtdQQ6TOJ_t8g,779 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsmaterial@2x.png,sha256=_y1KbPkFMIcg_ONwNWMR1DXo02IYzF-KIy0otijQINU,2014 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld.png,sha256=pREzyFTODlGWIIgP9UdCD9gfeo22FxsEp_n2FaZDFag,860 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld16.png,sha256=bxFdme2AGDtpnsX2dc02iOPoyNIlPYVEu-k8nhYMRzI,735 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/physicsworld@2x.png,sha256=K39oWoOTnlrlMAQgvVclFI6XP5sby_f6HVReySBIKEc,1265 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape.png,sha256=j6R0BmUZuI0i2PIzOHGrtk21JYMMzs5aykDZKkHIIyk,890 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape16.png,sha256=viSDKw0kIApC__JOrvELcHVxPfOOO6sfwovPOhhTjnc,716 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/planeshape@2x.png,sha256=U9yjuaFzxDY9FqzdC0Kxl0LLP2xJ5LGofNhaAz4Ldp8,1501 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape.png,sha256=UE7pjPN0yHl-wx1xt1v6zbadAxIc-nR88MqpGNf2yLM,984 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape16.png,sha256=aKvMglhHmpUde2MY0_XLLFvTiTE0714OBpwzI7IFnEc,768 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/sphereshape@2x.png,sha256=487YWcouGpd0HfITOXF8Uz-gWyng2QJLC1yt0Ov4hs8,1932 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody.png,sha256=Ty7f-7IZ5S2LdYjJpu3cNoZ4xbz5ugOjJM4xJkgXOhE,792 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody16.png,sha256=hSvZFbY1zl7Tn-2u6wQJvGK-G1to3sVDK7z6yf0apww,715 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/staticrigidbody@2x.png,sha256=PCp6RdqLUyjKQrrE0rfBYaMA7E9nNBKgvY9QhSzyL4g,1203 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape.png,sha256=Xz8HiKjiHdKFewUZTZNQRP-VAqDH-gWzpjx5DJwFDQQ,1038 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape16.png,sha256=e-kUY3YAhO7mqqSYL4yMWsEPp36bw4_41dbzLeLY_Kk,813 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/trianglemeshshape@2x.png,sha256=U5t9iw4iucO2Rcd8wcVXkeAyAdIR31lGUPrKi7EAyOo,1781 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody.png,sha256=HkGV6pzti9c7x_yDg6dkrb3-BMFF2rn3rqdm9cTJlHM,1158 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody16.png,sha256=vAkKnsIGojCF0RNQAnYWyLQ5uMn6c31pWLNVHzc4VzI,915 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/images/triggerbody@2x.png,sha256=Z3LG25GxdodAE-nKBBeSVaru_asZD6Pt6_5m3zzGil8,1944 -PyQt6/Qt6/qml/QtQuick3D/Physics/designer/physics.metainfo,sha256=Ia0b9_VvwlhJ5ZyBtGkoT3tV0AAqog70sM-tKsKquu0,7046 -PyQt6/Qt6/qml/QtQuick3D/Physics/libqquick3dphysicsplugin.so,sha256=2IRMAij9eANMsFHeAJkovmuRdsfM0OQntegLEC8lhN8,23184 -PyQt6/Qt6/qml/QtQuick3D/Physics/plugins.qmltypes,sha256=oXlYmm2XhO-aJTNXU_yaKym-_JpPBQ006nl7SSvyeH0,31906 -PyQt6/Qt6/qml/QtQuick3D/Physics/qmldir,sha256=QcedWndEqdFNwNc9OzNBWl1U5VNrB2KBuS91774HpxQ,239 -PyQt6/Qt6/qml/QtQuick3D/Quick3D.qmltypes,sha256=qVfJBVs-HzLIdljlkom07tq1SKci1h9HOFMuPhoYWgE,190337 -PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/libquick3dspatialaudioplugin.so,sha256=uvIdLMPVJJLyGSLf9H1DdOK0xMCJeqAbMcawg6A8lNQ,23192 -PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/plugins.qmltypes,sha256=fE4GIN23IQPHZ5oXrgOYl7t_22-Rwh5JVN9Iiu8qYrI,11478 -PyQt6/Qt6/qml/QtQuick3D/SpatialAudio/qmldir,sha256=KmzH1-osHL3ygZqC6ypPcjUiqF9Yd-W2qFW1yPKv0RM,274 -PyQt6/Qt6/qml/QtQuick3D/designer/AbstractLightSection.qml,sha256=5ve6PnYCiAGPYXm0WEjzSS036w_wSNMu4JnZkKH_r3Q,3063 -PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSection.qml,sha256=nB7XizXmbJ7dWKVmz9fEFtcCsnpznGyLbSB7BkEXja4,1346 -PyQt6/Qt6/qml/QtQuick3D/designer/BufferInputSpecifics.qml,sha256=G7joKskap13HzrRj5NG_ppr20KomL2-SQ4NtMCaJsQw,281 -PyQt6/Qt6/qml/QtQuick3D/designer/BufferSection.qml,sha256=zHf1pmQkifBpug8F_Oscixr0dZPjhDkgIF-ZRo40LN8,3832 -PyQt6/Qt6/qml/QtQuick3D/designer/BufferSpecifics.qml,sha256=Ev3x3mOSNcv6YVmeaKrZpg0Jnx1aVqA-x_ntQwPXYLA,276 -PyQt6/Qt6/qml/QtQuick3D/designer/CameraSection.qml,sha256=z_AGsWppN12Tgba83mbO6Nbsi4JqcPkdSi7NfjhpfJg,2033 -PyQt6/Qt6/qml/QtQuick3D/designer/CubeMapTextureSpecifics.qml,sha256=NIexOSWz-Fdm0RG7Xw73xwPgaN1HW6WkrtSfmkEg64w,364 -PyQt6/Qt6/qml/QtQuick3D/designer/CustomCameraSpecifics.qml,sha256=QNa3xFzWndTRoRYtN3E3g8iUhy57R3wmt9HBQ5GT1pw,455 -PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSection.qml,sha256=sCiKvDNDCPnKCthX0eVqmFJKyKfMm8plGC7mi5zD2A4,4382 -PyQt6/Qt6/qml/QtQuick3D/designer/CustomMaterialSpecifics.qml,sha256=bdMAPIYgVYnuNBwnI1fK_C1DPwmH_BK-E6b8zfT7G9A,341 -PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSection.qml,sha256=89MYeEWHav_tCT7oLg2tNP4Cw5SGuXD7nd6tyCAISqA,1655 -PyQt6/Qt6/qml/QtQuick3D/designer/DebugSettingsSpecifics.qml,sha256=ilsrR8I8sEnL9CI3RoR5Z7PYa7xRIpeGTkEAI64NOwU,282 -PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSection.qml,sha256=un4O9pypN2BYwScl_jKh3e3TgmluBBOe1rzvYgmAsbI,22112 -PyQt6/Qt6/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml,sha256=zKrSYm5R7pl2nua6fIvvqcdVbZzLprcH4Mtg9sFe1uw,342 -PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSection.qml,sha256=Z8Rhz3oIoX6qKeIqte6RqNxQ3NTdN7MnZavDsfe8enQ,221 -PyQt6/Qt6/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml,sha256=zVKy0D_LE6XkEajG3s6erEKgXOgQLdrN4-8K7R9-MW0,283 -PyQt6/Qt6/qml/QtQuick3D/designer/EffectSection.qml,sha256=I1xh5leMnVmWegBWhshAwTLcQZswAzBTk4HJ77NOE7M,1101 -PyQt6/Qt6/qml/QtQuick3D/designer/EffectSpecifics.qml,sha256=bSHccIXm33gstiqYV7kDvIvMToLvJvVsSKBwIuigRkg,276 -PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSection.qml,sha256=fPPPowZpUzbwVK-z1ow2ngeeNXFW5DcOZ67QIuCI9Lw,655 -PyQt6/Qt6/qml/QtQuick3D/designer/FileInstancingSpecifics.qml,sha256=MjzsgyFxHJsIWdUT5NUrbrR-dWuaUyLi9C962dpA3MI,343 -PyQt6/Qt6/qml/QtQuick3D/designer/FogSection.qml,sha256=els2tqIZXKVMUSZwimze1CT2ci7nUGCt0t9a2fM5CV0,8366 -PyQt6/Qt6/qml/QtQuick3D/designer/FogSpecifics.qml,sha256=ipWo-nHT-8hajElJETJRHMuscJVQFD8VqEmcd4ISzYw,272 -PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSection.qml,sha256=w_ZspGNDnjUZxoCvqyzF0dLTS3N06xzLEM_tA_Il-lc,2516 -PyQt6/Qt6/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml,sha256=43hgZFB3NMZLnfMnTV-axwQLTH2LgwQhf2-KNO3lCh0,457 -PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySection.qml,sha256=yo-C_E74bU-UjaxYhQBXOfcaeeXgxBcHxPLyVlE41oM,8356 -PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListEntrySpecifics.qml,sha256=BbeX-NgL19C8TXaMGtN2U1ZX9CdEI2uHMoZZrDzibTw,287 -PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSection.qml,sha256=7ch8IV0ow_E5qT9ff8dmasYsb41fTHjtfZxcE_cDe_M,1192 -PyQt6/Qt6/qml/QtQuick3D/designer/InstanceListSpecifics.qml,sha256=wngDJSSk45VPqDJKNY-rOIol1gryR6nx3XojQGy7bf0,341 -PyQt6/Qt6/qml/QtQuick3D/designer/InstancingSection.qml,sha256=sCNrjYw-FqnOdpu_9KgecPIR1cEgxJZnliL3kardE3A,2132 -PyQt6/Qt6/qml/QtQuick3D/designer/JointSection.qml,sha256=PI5uffAG8CetP0Nsd_QcoPbSSazateLYEKTjqTngjyU,1371 -PyQt6/Qt6/qml/QtQuick3D/designer/JointSpecifics.qml,sha256=wV2zICttf956r0svB6THXjppYYp0ZvxhqLGsDF_550w,275 -PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSection.qml,sha256=VVJ8iMPlk_uKex2oGyxGraUMz6OIdT3Yod84e5TkQPE,5680 -PyQt6/Qt6/qml/QtQuick3D/designer/LightmapperSpecifics.qml,sha256=Z0V89EvngGNI_HowIW5XBClU4q6uC3ubltwQHSz8tmg,281 -PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSection.qml,sha256=_ZjgYY5Fw1bNQE-IsluIOg-tszC8Qiafc168jcZOEBI,2209 -PyQt6/Qt6/qml/QtQuick3D/designer/Loader3DSpecifics.qml,sha256=4TRaHHlY4n5X_MDrYTDCxWrAJ3YZ-Wju-dZRqEAOaBQ,331 -PyQt6/Qt6/qml/QtQuick3D/designer/MaterialSection.qml,sha256=xM_QB01JtT7Sa0Bgc_nUTttgk2qAVRQJjbLJLF0FNqQ,2225 -PyQt6/Qt6/qml/QtQuick3D/designer/ModelSection.qml,sha256=32sJNxtw9E5EgNHdEPzp4fzFKilGRKHjbw_vX2URxVk,12958 -PyQt6/Qt6/qml/QtQuick3D/designer/ModelSpecifics.qml,sha256=PPSmxCK20tR2YSYJ4Os2silTvot6bDFQvkwYR_IWZY8,328 -PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSection.qml,sha256=30nZeVNUi7Nqswq-6v-2UydLuoKan7fmXBX9mN--6Bw,1449 -PyQt6/Qt6/qml/QtQuick3D/designer/MorphTargetSpecifics.qml,sha256=-Ip9DrzEwWVSSMV-Ah1Y8gQmH1qR5duihvU5e6jFfi8,281 -PyQt6/Qt6/qml/QtQuick3D/designer/NodeSection.qml,sha256=8PiIVoHKQv7lQqmLu637oHXjlx4-g8GuUjF17xIJthk,11909 -PyQt6/Qt6/qml/QtQuick3D/designer/NodeSpecifics.qml,sha256=BTAgiywOAvaoDh6L0h5kkdFoHoVlI9DFU2aeC8f1ygA,274 -PyQt6/Qt6/qml/QtQuick3D/designer/Object3DSection.qml,sha256=aKWk6CwNmYU_g26cDiVezlu2FirDTwlbtcVWEB1eZmQ,226 -PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSection.qml,sha256=hLvNfh-S2hCW5WeA43NanFLRtJWBCxNz2CxrIxqW4Xw,2702 -PyQt6/Qt6/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml,sha256=c63rRZ1VdwrAt-ZwptUlg7k-FcBN1gXMqCZtyN56t6s,396 -PyQt6/Qt6/qml/QtQuick3D/designer/PassSection.qml,sha256=Y7eYqQbXpZcFFQVH7BHQ7gaWUTKSaWHlwdGbK3XLQnY,2401 -PyQt6/Qt6/qml/QtQuick3D/designer/PassSpecifics.qml,sha256=uY1Um4nRUfVdD1009sXxosu41QEYQEyhvWjXxkG8IZY,274 -PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSection.qml,sha256=HhkAUstQp34Hgzn7o3HA_zRvuSvhoPT2Y3ekmg_krdA,2639 -PyQt6/Qt6/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml,sha256=slG0QRu4FSpRdWv_JwhasZ5Gye1jgXCcIijn3-XOUws,395 -PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSection.qml,sha256=scVbmdKgEotdLIY0aYPYoQJSAET_LhUNcoYg4D30bMs,2068 -PyQt6/Qt6/qml/QtQuick3D/designer/PointLightSpecifics.qml,sha256=_bXFBFL04lED5misH4o3tt2nBY_gTwpmueJotywMal8,342 -PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSection.qml,sha256=KIZ3ezTv9pqwc6S06zwMT-9NtmeI4bQUSNTSz2UwIzo,35915 -PyQt6/Qt6/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml,sha256=07TBZFQxEzEz31i1-poxmTEJCz3FYjqckRSxcDsB2d0,345 -PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSection.qml,sha256=h8K6xFBunNZ_5RFPc3_jc4Hrvi8ejdp3F9JJgXDzFYI,8327 -PyQt6/Qt6/qml/QtQuick3D/designer/ReflectionProbeSpecifics.qml,sha256=-f47Kna74MXqTX7A8Ro3SzHdbs3VhGiz4AUn5LT5Wdc,338 -PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSection.qml,sha256=LRcNSM0uWjpkuLXol3VIadbNLv232yGKO_q5wrUh1qU,1533 -PyQt6/Qt6/qml/QtQuick3D/designer/Repeater3DSpecifics.qml,sha256=SKzGlP5bPPUk8oBZ6yDk5uxwTU_GRLnPEzLovej46Qo,333 -PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSection.qml,sha256=4GAvIU5tG1-eTIEdOvMoDVBIR2U8pWI6BZy1xXFnCDQ,3122 -PyQt6/Qt6/qml/QtQuick3D/designer/ResourceLoaderSpecifics.qml,sha256=CXLmcF4hSoUXpywzyRqJQSp0NHbZHKWwIhW9FeR3mE8,284 -PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSection.qml,sha256=I1vKEzaWYgAY268dxhpZVsOPxVKIGiPmCm_FnbZGcPA,25382 -PyQt6/Qt6/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml,sha256=z91IZ9Z6eSjI9m6kuwNB80uRFl7taWf59N4oODLjhCU,286 -PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSection.qml,sha256=U_a6xBzr88AdMwQO5KIhDuJ1SBN3gSq83YeFiuPl6W8,1425 -PyQt6/Qt6/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml,sha256=B99b-aHU7rF1p9FVNd2VUGPUJp30P2jXSVBOJtNtjGA,285 -PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSection.qml,sha256=IMiiPVDOa-td8rcRoGy1pl99zanX8FooX5_5zKAvQTM,1181 -PyQt6/Qt6/qml/QtQuick3D/designer/ShaderSpecifics.qml,sha256=pvDHllQBt1FxvqbmKT4wsuRXpPsd7dVxjwMFfHKtTT4,276 -PyQt6/Qt6/qml/QtQuick3D/designer/ShadowSection.qml,sha256=HEEQBvAE47MSg-zlrGj162M3a-JwvQ_owVzRUuQOV6g,4781 -PyQt6/Qt6/qml/QtQuick3D/designer/SkinSection.qml,sha256=ZYsZlqzkv4gGxW5Bdlny9T574gsH1clr4aM0KH405bE,313 -PyQt6/Qt6/qml/QtQuick3D/designer/SkinSpecifics.qml,sha256=cKVT5weEitFdL2NNDiUuwaEUg4PHg2PX3z2dnwAPRpE,274 -PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSection.qml,sha256=G8GeuawZOBIKUiAHqD83yXjkg4-7TAQOJpD-T2YUlTg,31457 -PyQt6/Qt6/qml/QtQuick3D/designer/SpecularGlossyMaterialSpecifics.qml,sha256=aCjcq3IEVsCQlrUyqGKOCXcOK40vRiTUEoBcRc41fYc,349 -PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSection.qml,sha256=NUD8e1UuErUuzC6NIrw10TVdUk0AjTI7_1u_oDkV4OQ,3147 -PyQt6/Qt6/qml/QtQuick3D/designer/SpotLightSpecifics.qml,sha256=3XjCpErZZScE8Ep5DqqJRBIsrJSyDrAr6JpOqhJ5dQM,341 -PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSection.qml,sha256=OGEdgNeWeRY1fZ9MPZApOgOjlm7BlH_c_7fq4S6rhn8,1304 -PyQt6/Qt6/qml/QtQuick3D/designer/TextureInputSpecifics.qml,sha256=gg1UlflWCah69tXgs8eaizbZR9CzGCqmjNFEsRo3VcE,282 -PyQt6/Qt6/qml/QtQuick3D/designer/TextureSection.qml,sha256=UuX0bQef4Nx3yFTDoFalEpnDWwKQTlvCnr1XcyYwaG0,12876 -PyQt6/Qt6/qml/QtQuick3D/designer/TextureSpecifics.qml,sha256=DreXNW58U7cJsq8tjBbEXuy52EYH0LyBFqxbREDRP0k,277 -PyQt6/Qt6/qml/QtQuick3D/designer/View3DSection.qml,sha256=rI3r7idE68YyQRM-2M6ejuEqbytAEYl2FCymv3BIjTI,2450 -PyQt6/Qt6/qml/QtQuick3D/designer/View3DSpecifics.qml,sha256=1BKlfEq8BphkWkRF8krohuRhjfnry1CK0_msuvTx_yY,276 -PyQt6/Qt6/qml/QtQuick3D/designer/images/camera.png,sha256=a3Kbc0KnAvy2WXvZ3yCHn9JA9hBx2Ig_xnkPxnyxp6Y,276 -PyQt6/Qt6/qml/QtQuick3D/designer/images/camera16.png,sha256=UtQN6H_A8pCf0rZkWA6eS6cIFuSFzY3muKlUN_XAHCo,241 -PyQt6/Qt6/qml/QtQuick3D/designer/images/camera@2x.png,sha256=kzcYnTSawd0FtIgr7rz4iM1nkN2X0UpV9B_o4ZihA70,385 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cone.png,sha256=ntPrpduJ0g-DEBqh4NwFxMr7xe1A7ctGOsikJZqYrkA,412 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cone16.png,sha256=DevDONMnQMhOm3XtDiHOH2JI17TefWgs6liu8tv56ZE,277 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cone@2x.png,sha256=I6JPOxXN33pXx3XdBCgN4k1DAQSqrZBVX03j2NFXW4A,731 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cube.png,sha256=xz1ntISSxkXtLo_ts-zfawMtnOc9m65EMlN4EbIXIDg,369 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cube16.png,sha256=OzPgTX7w7VMI96_tosFp-1IZK8xJ9VqKpsa6xjncHb0,190 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cube@2x.png,sha256=M74_hruchGBVQmDjMZIPJ92TVPNHgg0gg1VAGGXNUJ8,733 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture.png,sha256=TbKZtahidtIWo37vZhUv4-dnhmc7fUDvTRGSL1sTryE,3182 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture16.png,sha256=kZNL_n5DiIascRvgVoF4jdIf_r_QZlUnJAbL-6zJl6Y,258 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cubemaptexture@2x.png,sha256=A2VLau-3TFThLWYF7gnLX2DKXkzG09AYVZe7-ex6qHM,3237 -PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial.png,sha256=2Vp-CAJy9YTs5HohFQ-oao9JU4o_8Aak-s_EksUYevE,563 -PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial16.png,sha256=CUsVGRVi95SZyKKTQII6JrxgJRQc--MuPpNzJeKXnfA,347 -PyQt6/Qt6/qml/QtQuick3D/designer/images/custommaterial@2x.png,sha256=IKkJPnSENBJB9N8e-qPqievAaR0aAcZVscbT3Hgg3wM,1171 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder.png,sha256=n22Rvd9HMTmwO89dkBiufWl_EHjNgup8oqe58Fkg9Jo,445 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder16.png,sha256=dWMz6YYeRIb2Ya0vNd5se3vje9nvo5ifrmyAshwjTKM,336 -PyQt6/Qt6/qml/QtQuick3D/designer/images/cylinder@2x.png,sha256=4Zbq7Pw2Rmiqcc4WwblILySsn48KikzncbK9-2_rtls,789 -PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings.png,sha256=mmw-w6AeeDbJ2DupXI6xP9t-hLrw52-RwB8fpKA1aE4,907 -PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings16.png,sha256=h8PqD7JNy78IinP-aAlME_At5PtmHWqO6Me8Z4IlVl4,731 -PyQt6/Qt6/qml/QtQuick3D/designer/images/debugsettings@2x.png,sha256=0omVmnryQ8HEmgERFWurVU3hfA-VQN71D7wRkcNtXgE,1359 -PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy.png,sha256=-8NwxUGpMeIu66UVe0fzD8YMfilYC5tJBHA7bheRC_M,375 -PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy16.png,sha256=IDZ6vbNiHwu75HPcLBZwgxgwPGADVt06U8lGXIppTiI,253 -PyQt6/Qt6/qml/QtQuick3D/designer/images/dummy@2x.png,sha256=rAztmEYpBRDzL_sRXSnlMpRC_sAbZSeoY-v1QcqMjtU,499 -PyQt6/Qt6/qml/QtQuick3D/designer/images/effect.png,sha256=dA-d2BfgwUmZsBb-znbJnfSygGWst4zoGVUrxuxXZ3M,411 -PyQt6/Qt6/qml/QtQuick3D/designer/images/effect16.png,sha256=szEHoRHnmp90mT2L2EPvP1XBMr27QDgFPUMh6plejbE,321 -PyQt6/Qt6/qml/QtQuick3D/designer/images/effect@2x.png,sha256=fEh1QkGnSjrmmP0hkpOtyE_H617-j4GyGNd21DQrsm0,714 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing.png,sha256=-mLj_yfgaQr3GPatL-xccCDS3P-giwdkREMcETYOwPs,597 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing16.png,sha256=iUg1BY7pRpp-eXHuEcZXJy7o1x3gxvD30A7LFRJV2d0,406 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fileinstancing@2x.png,sha256=s54MLG5IH7eG7VgD2QFi0vheWYRT6KHyFGQpQUqV7Q4,1223 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fog.png,sha256=3vX18w1HYHY0fct5hv9osXcZPYN6r2QpEcipipkZWzQ,793 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fog16.png,sha256=1yHSLgMIghGN8i2UDJs8OAM-Ca4LpDXGfbXDcYCX7nc,748 -PyQt6/Qt6/qml/QtQuick3D/designer/images/fog@2x.png,sha256=qKZnAdJyXmYBNtsgTQ_9UoDg6BtoROrYyP9vsGmiAcI,1175 -PyQt6/Qt6/qml/QtQuick3D/designer/images/group.png,sha256=8evnJdpO790pKxLLKk7CqAPOP8Hg6h2eJy8In2Z3A88,496 -PyQt6/Qt6/qml/QtQuick3D/designer/images/group16.png,sha256=6zSv-oxhBOm1-uH6FqPDdiIB-yuxkzl3DSFQSRXU3oQ,284 -PyQt6/Qt6/qml/QtQuick3D/designer/images/group@2x.png,sha256=t1ZTX3qXY-U8YSwG2OUGL4KYW1OQAZ4ZuMa2ktLGtlw,822 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist.png,sha256=6ofr_Q0J0_33g09dL7pVYJiKdJs-dsmRkI6LVaqQZUE,602 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist16.png,sha256=ozvCPq5hrD4pKcd5GhK7SiEEFOLg7WMuqA_QfV6FUn8,395 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelist@2x.png,sha256=fd2fYu6wsMnnBkexJzsFAijcoJzCigWQMlF1frCsFy0,1119 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry.png,sha256=mr9fgaUFhtqE-Q_f-GMCtDqAUlAZZlwZK_H6cQZ_OeM,462 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry16.png,sha256=2hFVbIriob2A6dlp9Guj_gLvewRjgUM6TuKGsPOryvs,308 -PyQt6/Qt6/qml/QtQuick3D/designer/images/instancelistentry@2x.png,sha256=OOtPgWAPttOHdGn4qV-jVYQR2Oc0wCpCyYONSTh_02E,742 -PyQt6/Qt6/qml/QtQuick3D/designer/images/joint.png,sha256=qUiW9gvVupOo_vWQ5U3XFwlhBFBUNMghhmfgg4dXJ1I,530 -PyQt6/Qt6/qml/QtQuick3D/designer/images/joint16.png,sha256=2hBSDRTaIY81Ky4I77KFY__Dw_SKbM1GdnDfRbWsa70,349 -PyQt6/Qt6/qml/QtQuick3D/designer/images/joint@2x.png,sha256=gMKbV_SrN3Uwk0-cLgai_VFMAWk6ngxmxXGi4G963UU,1217 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional.png,sha256=rDnrvoiVjiQQO3IDtFaeJqwODJ2cg13b8zzttwItGfw,269 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional16.png,sha256=L9D_3NfW_oSWz90Ea-6opweeqRiSHf9tNjGi3o3QPc4,223 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightdirectional@2x.png,sha256=NEozwpYyOT0l1wMAttrIE3zmRH7zXrjvvkB92dTJoQA,457 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper.png,sha256=NLuSHIWtXoiC-zd8rS6N7KEOyHuxK4JFVhRtjbjTsj0,913 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper16.png,sha256=mowbjfUgmoRAmkjAoNuE2Ji5yYS7Na2UKh4dxPWv_ZU,760 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightmapper@2x.png,sha256=2t3aV1XXAl7yurl7RgAIw7vksgB4PnPPnqyqw6O9PY4,1402 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint.png,sha256=IBted1NPPIfqnnqjGhcgfSP_eUzv8v_UEyoVNTr1CuE,559 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint16.png,sha256=VelTJTazoJVfMDCO_vOXn4qtyllH_vfluj7Sqjm-LGQ,367 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightpoint@2x.png,sha256=J6563RQN6QER1tgw2e3r1d20wENYyEWXcHm_d63RTQQ,1033 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot.png,sha256=eE22qQDihHfqxuj8rrinJjL8ocs43XWGEhwa-kSmcwE,491 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot16.png,sha256=fALpkSwH-2gRZ9cuEI8dacJlSsgTOX7mNRxKEwQhAas,358 -PyQt6/Qt6/qml/QtQuick3D/designer/images/lightspot@2x.png,sha256=nW-JaqGixc1oGBTa6A3A7ar3yiNySx4Q5AQ-vhV982c,964 -PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d.png,sha256=fbmytQZNM1-QqmUmzXCB7H8aJiYQdb9FFv0PPCsfQGw,546 -PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d16.png,sha256=Be6pY19dxD9E1NRu3xU3F-PmH46ulbU4xHzqwpnW-9I,376 -PyQt6/Qt6/qml/QtQuick3D/designer/images/loader3d@2x.png,sha256=n-RI9JUhjA1YqpGOCYZbx4n6_OTHF40VOxq9nK7TXss,887 -PyQt6/Qt6/qml/QtQuick3D/designer/images/material.png,sha256=zB4WdLI5cwvOyTvg4rk8Zl7MIOVwmL5jfaQBq6xMoFs,333 -PyQt6/Qt6/qml/QtQuick3D/designer/images/material16.png,sha256=KNxamCJLo0GL1kuuyEzjvJ4W3t54OPeX8IUhDZBAlJc,314 -PyQt6/Qt6/qml/QtQuick3D/designer/images/material@2x.png,sha256=ir4FHfgBlIqHaKQF72xh7M5gvcxsbL_mjgtxXhKuJac,621 -PyQt6/Qt6/qml/QtQuick3D/designer/images/model16.png,sha256=OzPgTX7w7VMI96_tosFp-1IZK8xJ9VqKpsa6xjncHb0,190 -PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget.png,sha256=bzuJlxwgh0Z1bJXnJk88UtRnUkKH6yWGULmaDFfyEKg,394 -PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget16.png,sha256=UXK5TuauBC8Z5E8h8e6F3rZe-z8xIMKM3_mIorphQxA,265 -PyQt6/Qt6/qml/QtQuick3D/designer/images/morphtarget@2x.png,sha256=feuHaBj-AA3yZHqPR4wZMpkSubNvuGr8hJJOnag2XTA,703 -PyQt6/Qt6/qml/QtQuick3D/designer/images/plane.png,sha256=o_Q0Mk8WKkKOBG4dbwIVFYIo7Cm2uaDVejm_QPQU-Bk,154 -PyQt6/Qt6/qml/QtQuick3D/designer/images/plane16.png,sha256=ml9okqmd7g0PxYAKjkgFdRX8nqVVa3AafD87i5Vbu-w,204 -PyQt6/Qt6/qml/QtQuick3D/designer/images/plane@2x.png,sha256=6eJcwbLtYhMYZLK3blAL8vSByPe42if8VBkeENxmhoI,181 -PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe.png,sha256=Ktr_M9AyvMcZx4NcogsHbEMjuSIL7QMHejx7leFAFf4,3210 -PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe16.png,sha256=dPREcDYX0fgvx0hKIxZsaV8JazcsBtWd-DqiNXKLlmw,3033 -PyQt6/Qt6/qml/QtQuick3D/designer/images/reflectionProbe@2x.png,sha256=DCOxFVTivtJ_EjAebn4F1qDHGRcOSHWlXUJPTxJQR40,3786 -PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d.png,sha256=y74NLMxfzNCtYetxwrsGDARX7G00DStjXfxTGoe2MgY,588 -PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d16.png,sha256=QckkD_sLxlrI8l4fLCChd2DYJTPv-_R-MukEXlPwhH4,379 -PyQt6/Qt6/qml/QtQuick3D/designer/images/repeater3d@2x.png,sha256=L6o7vWIGy7JWgWsz4dr_9xxdI8iHIs6hAAAzese08H4,919 -PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader.png,sha256=KqUFr3e-MBS3eu9zvN3He76MwjXa0-Us3GFtkllJ7ko,900 -PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader16.png,sha256=t3qoHIAXn_r7iuFH8aw4sooCoohQbJJ-3TT8oby97fY,719 -PyQt6/Qt6/qml/QtQuick3D/designer/images/resourceloader@2x.png,sha256=m4AZq7sdsr8WhC6QZtNJsQ8myeTss2sXdnIFy20psCQ,1318 -PyQt6/Qt6/qml/QtQuick3D/designer/images/scene.png,sha256=8Yh4eztWAfvgMphRXFqVQWy7IKrACSssrm6sgPFMtpo,172 -PyQt6/Qt6/qml/QtQuick3D/designer/images/scene16.png,sha256=IVa857_NKRvzxRFwrLpPQIj2SV4aBEKkGY6ruTSjm4Y,219 -PyQt6/Qt6/qml/QtQuick3D/designer/images/scene@2x.png,sha256=Q8X2dKBjWSGuZtohXzKNK-FTz4ru70jG6AUWjny2FN0,201 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand.png,sha256=pSvjfnSL8c5lpWCJrvrgYCA0_iiEDDBvFephOJ2gAoc,160 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand16.png,sha256=IYzkDt4zfseisNNEsI8x5RsDeFxhfMB7UzjL6pEGd4Y,112 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shadercommand@2x.png,sha256=MldZ57fCCOz_PLGB4IM7itTfgXeFiMK-Hx3wTjFxR2Q,145 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil.png,sha256=PAl7Ro4M6OUPTwu5H7YSFQ-fyKJWbvp02Dm1K8590Fs,304 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil16.png,sha256=MiN6h68ppidWb9AbBFuGS_iRbcUC4m9F_mp6hbDwxw8,191 -PyQt6/Qt6/qml/QtQuick3D/designer/images/shaderutil@2x.png,sha256=a_u9POpI2XcSNjdb-oQ3-s0eRfrgguDmdEHPV90ajN4,525 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton.png,sha256=jewBJMPuCEk2ewJEfZlMfYF1I3VKqHOVqR4fsUragZc,524 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton16.png,sha256=rSp_VDehHfsGhNyrZ6A4xeOaKPUQRbeXnxXtfAM9wSk,349 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skeleton@2x.png,sha256=0lTklnKLimzX1x0hzlx-t3BYbqcUHzXv2tgvEr11vr8,1157 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skin.png,sha256=Uh7bnN5e6nqUebJLKvcxX-OjhbhOR2CX8gJCWYlbSkE,863 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skin16.png,sha256=Xi1O0_MdMZs-mL0Z8WuOzy5_HWlq125dc9RvIWRUfEI,743 -PyQt6/Qt6/qml/QtQuick3D/designer/images/skin@2x.png,sha256=jHSWnp_CxvZkKqpA-osbcdH_fXy7lgttZLGaWY6r2Y4,1354 -PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere.png,sha256=YpzYFmxZgsX9I8dyeaguR4moVAzsgQ_-ab_oRia4cR0,233 -PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere16.png,sha256=gOVZdDEKzCa18JL-4UjK-MfGxMKr-AWNYSZIlQSqO4Y,212 -PyQt6/Qt6/qml/QtQuick3D/designer/images/sphere@2x.png,sha256=aY718aLnGaqzlduyK_6YjMgU_bT5WVpZV5z8V7BcJa8,381 -PyQt6/Qt6/qml/QtQuick3D/designer/images/texture.png,sha256=XsDKyT9qfGQRVUPjfGz7vsoFwE89Ve4BxFW624hmWQE,278 -PyQt6/Qt6/qml/QtQuick3D/designer/images/texture16.png,sha256=EE5nFQU3jW1EJe5rSDXUU4gKus-cTb-F_Z11q0Ck0Us,300 -PyQt6/Qt6/qml/QtQuick3D/designer/images/texture@2x.png,sha256=192C4HZBChk83v3FqyYl6A_eq1s4G0RHak_w4bxuuTw,433 -PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D.png,sha256=4g1gkECHsIjs1OXy5BdbtL6bLAVPlDsdsB7cIQYYpiQ,255 -PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D16.png,sha256=ZC_QBSG-rojZES2zjq5WhgVnTcJCXxCGUimGP8kM3h0,242 -PyQt6/Qt6/qml/QtQuick3D/designer/images/view3D@2x.png,sha256=5TZhSZNSqaDWy64b6pJmeYiA3ltXKCWmNFUM2XBOwRA,411 -PyQt6/Qt6/qml/QtQuick3D/designer/propertyGroups.json,sha256=LT7RpzTQHkW8xMJmFlTh2k4O2CiNtbnvlavOI6bDyPc,3900 -PyQt6/Qt6/qml/QtQuick3D/designer/quick3d.metainfo,sha256=sWCmOpCW5h8a_h9kspnedp3ProhlaUYd3Mtl50ZX_xg,25869 -PyQt6/Qt6/qml/QtQuick3D/designer/source/custom_material_default_shader.frag,sha256=X3EXeXVmTnXEJQVZ4d9VFiZbZxjcGUQ6Yp1Y1SrtBhI,62 -PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_default_shader.frag,sha256=L3lz8CyEL9RzDZfh7qm3aS6Nj5yCHSJv4PDoVBL4qGM,145 -PyQt6/Qt6/qml/QtQuick3D/designer/source/effect_template.qml,sha256=ZMURpWC92GmDa04DHtUCXwr8xBkCfa9uyRBKja6cy38,369 -PyQt6/Qt6/qml/QtQuick3D/designer/source/view3D_template.qml,sha256=HFmA1GxYUYWISUU_9axmOPZ5Zl_8Pl2nvxzrSsAefq4,718 -PyQt6/Qt6/qml/QtQuick3D/libqquick3dplugin.so,sha256=kZ0rwa4IO0y7EQ0srW8usUFnY_PAI5WnO7u5fuEJY7g,27728 -PyQt6/Qt6/qml/QtQuick3D/qmldir,sha256=eYXVjDbRP7rrJ5qkWQGtGu8Rg7uTQ3iTtsD8Ebj-5PI,204 -PyQt6/Qt6/qml/QtRemoteObjects/libdeclarative_remoteobjectsplugin.so,sha256=XCdnE91CzRt9qs6Fr1SAXF3lfTb4sSzhGtHXmIkuHKg,23200 -PyQt6/Qt6/qml/QtRemoteObjects/plugins.qmltypes,sha256=qCNzQa36hM-Vgn08LJHBpuXuWhIu-053OoINYJK7yqQ,5406 -PyQt6/Qt6/qml/QtRemoteObjects/qmldir,sha256=sFRLUXjWZQHA0gXDDQheMkmWZcAad8GsMtJ1lCRQV2k,221 -PyQt6/Qt6/qml/QtSensors/libsensorsquickplugin.so,sha256=wafjqnet6YnqEwlsbtStWWlbKRQ_rBXahpH_uVavV_s,23184 -PyQt6/Qt6/qml/QtSensors/plugins.qmltypes,sha256=idV0glktdaSqS4z6d05PCulkCQJTO_GkZimv8AMSiLw,33360 -PyQt6/Qt6/qml/QtSensors/qmldir,sha256=1OoIqFlLikJnJhPTLOAIUggp37LrNEwFSRHsGwYi8sI,197 -PyQt6/Qt6/qml/QtTest/SignalSpy.qml,sha256=Ke_6tt-fHmo0LgurZF9iVCfS1rn4OiHeL0OpJdLpIrk,7827 -PyQt6/Qt6/qml/QtTest/TestCase.qml,sha256=ReMx4Q8xGq6ezhbYcMMjq6efvf2d6bnZm05H6w7S7N4,80385 -PyQt6/Qt6/qml/QtTest/TestSchedule.qml,sha256=06vKfQZsO6XF5WIr20o2tZt85ShUnXKAhmgdRgnOG3Y,676 -PyQt6/Qt6/qml/QtTest/libquicktestplugin.so,sha256=TUNO3WZkAobUsxSHcAyS6xSzF1YYAmB8eLUcqqKAvgQ,23184 -PyQt6/Qt6/qml/QtTest/plugins.qmltypes,sha256=IlTtdC575H9yzUzxkHw8Dp1AqbUsT4gkKdT2Ho1hbaQ,17707 -PyQt6/Qt6/qml/QtTest/qmldir,sha256=GX-syQAW-IFtaQN3ogiDd1Clv99uolbVIXBqZSy666o,392 -PyQt6/Qt6/qml/QtTest/testlogger.js,sha256=NjjLsT3PD26d0tomQghXbKGTtZ5um_D-MxLuxFq5UYI,1438 -PyQt6/Qt6/qml/QtTextToSpeech/libtexttospeechqmlplugin.so,sha256=m6q1aJOHiIA4WuvU1SgpX3MqBibaFhbRE6C917sROYI,87408 -PyQt6/Qt6/qml/QtTextToSpeech/plugins.qmltypes,sha256=jZpR9m7qEOs_R9QF9_QO3dFNcl-XCFZdByAp5AACFJc,10914 -PyQt6/Qt6/qml/QtTextToSpeech/qmldir,sha256=_BCr9Crcvif7DJ146WnVigdHExOa-v5ktQ2pdBnGl8o,198 -PyQt6/Qt6/qml/QtWebChannel/libwebchannelquickplugin.so,sha256=-bbVMLpuX-IGPAbMhRtdItUML5GTLPmsNIi5F4BvolU,23184 -PyQt6/Qt6/qml/QtWebChannel/plugins.qmltypes,sha256=o0emX81s1RzMtC_0YW1lfX_phjHQZ_3F30eIX7OeCVo,3573 -PyQt6/Qt6/qml/QtWebChannel/qmldir,sha256=vmbY_lGlqYMRZSmwCTzArVchinUl_PZdUaXD6N2-Ne4,198 -PyQt6/Qt6/qml/QtWebSockets/libqmlwebsocketsplugin.so,sha256=eSmT7HUPmYKG7uxbQpIk6QldZtpDEmGmvJl1qZGS61o,70000 -PyQt6/Qt6/qml/QtWebSockets/plugins.qmltypes,sha256=FYkHQajg2Rlbn1nliTEk7QnJgsTfpbK-coQhd45jpNE,3496 -PyQt6/Qt6/qml/QtWebSockets/qmldir,sha256=d1AmhCbwxRvLOlFyxfQmeEtDd9B4-mza2wATuHEWRrM,190 -PyQt6/Qt6/translations/qt_ar.qm,sha256=sRMzxSDM2ON1zeIJhd9ALVhqGpXgeWMTu-ufcX1Nsi4,104 -PyQt6/Qt6/translations/qt_bg.qm,sha256=HiLuEm7J92Ax2IAoWpB7OgxFEDkjGf9wDc3ulkq7sa0,91 -PyQt6/Qt6/translations/qt_ca.qm,sha256=F6smI8f26N70Sz28tRdUQYWBfWXxKY3bEO9xE28jK9w,91 -PyQt6/Qt6/translations/qt_cs.qm,sha256=xYWRj7HUghoFTqQL3PJ58nXKdsiKV5P0M9rGphGsfo8,95 -PyQt6/Qt6/translations/qt_da.qm,sha256=9nc8ZyrLc_3vbgkgYNadHl3-6EABK6yRLR6S3ihxQ4Y,91 -PyQt6/Qt6/translations/qt_de.qm,sha256=BAHDFqo7UKFy60Sk_x7DhJJAc77sfJKO-IjsSORhJog,91 -PyQt6/Qt6/translations/qt_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qt_es.qm,sha256=ZI7UUZvEXXpHeUeadibqFs-aoj6ToLF4VGzEe-oFkas,91 -PyQt6/Qt6/translations/qt_fa.qm,sha256=P0yYnGspkNgMximUCCFLMWmJI7UvFUSDszcYdd6R-I4,84 -PyQt6/Qt6/translations/qt_fi.qm,sha256=NC0Bx-6yNOQx0FBoIcTNA8BDMRXY1j_uM1e-IzGFiHk,91 -PyQt6/Qt6/translations/qt_fr.qm,sha256=yJajiJKpI0awM3k9VkQJkyNrI-R-BvOXSv2wVS9ig4c,91 -PyQt6/Qt6/translations/qt_gd.qm,sha256=Sd-FWgBKF5UDOK8xRkZvbfTVhSQQvQtY6oDg0CA6nSQ,70 -PyQt6/Qt6/translations/qt_gl.qm,sha256=IEoBrH3ra1uuGTr-y9HlDRjHO_fZS63rK7_fYSPE7ZM,323590 -PyQt6/Qt6/translations/qt_he.qm,sha256=NvAf_y8l4RbUt694CXt-SVIP1bf7b7Eg5AviKMBcBF8,57 -PyQt6/Qt6/translations/qt_help_ar.qm,sha256=IiCIyXUtHMO6uYXvLcd-WueFeNzhimHsFbOfAuWIFj0,8743 -PyQt6/Qt6/translations/qt_help_bg.qm,sha256=y83R4LuuMy2A3bCihgVvF8gk-ijTU9f98S_JfZ9v4FQ,10599 -PyQt6/Qt6/translations/qt_help_ca.qm,sha256=jJi17iRuGDl9Dee9drKJF3OpdVU-xdzc5C-KaW5bNN4,7426 -PyQt6/Qt6/translations/qt_help_cs.qm,sha256=SsVvxj5ACUO6sT8dTEGFAhOJCOHUiMJK7mEx09F1Uqo,15297 -PyQt6/Qt6/translations/qt_help_da.qm,sha256=a7CSVSo5hocRn21SFF8Ev4Nzl3RG2PAMDcvVa5aCnw8,4795 -PyQt6/Qt6/translations/qt_help_de.qm,sha256=mWJSP7rp8eTDtcPBaGDQWSkcsw3F6-Wl7aTINqA_7R4,7570 -PyQt6/Qt6/translations/qt_help_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qt_help_es.qm,sha256=_RayefjPaQd_delNkMnAeir_85SKV543ifX_teX0IC0,10704 -PyQt6/Qt6/translations/qt_help_fr.qm,sha256=h17i3Nxk496oiNhASOOC05IaF18ShH3i5rHLEq2a3VA,3573 -PyQt6/Qt6/translations/qt_help_gl.qm,sha256=c5miSGCZdHc_YIZsh7eOp9-8T3UDE9aS94hs12OIPJ8,10891 -PyQt6/Qt6/translations/qt_help_hr.qm,sha256=jIzDxbGrKwdPgpNwAbiWYDQg73VZKzt4FyF3Ng3X6mE,5170 -PyQt6/Qt6/translations/qt_help_hu.qm,sha256=jnHLogunmQKv15VUq0kKOH66bbpxQ7TbItYOCP34vgs,7259 -PyQt6/Qt6/translations/qt_help_it.qm,sha256=MW_o0IFeK0s5aJW-s47xpAQxkVteBU34D0wM1Vbybks,10612 -PyQt6/Qt6/translations/qt_help_ja.qm,sha256=rmA7LA1DTUDN5DP_y6ZfnuJ5eKnhkxYAe-f-eCpbi0c,7917 -PyQt6/Qt6/translations/qt_help_ka.qm,sha256=FZx0-Us4S17mr984ts_EgGvJns9zvgLUpwIdTOun7H4,7091 -PyQt6/Qt6/translations/qt_help_ko.qm,sha256=8RxkaU6ONOHSxGwaHRXWup8tt7Yd5P31TspauXfD4FI,5708 -PyQt6/Qt6/translations/qt_help_nl.qm,sha256=RKig2vd10UNSGABS0T9iOBTXvfmOLFyAFEt790IU47A,5087 -PyQt6/Qt6/translations/qt_help_nn.qm,sha256=TIpyE5QgeOT3L1ur0mxBt3rOcBiXFKWLVQSn1a0Bk9w,6934 -PyQt6/Qt6/translations/qt_help_pl.qm,sha256=zGy02MVAhiJGcvLknmI8jLfAwc1luNXs1C_JujpgZb0,9673 -PyQt6/Qt6/translations/qt_help_pt_BR.qm,sha256=F6FkBFwPxT0FB8_JDDlw_hr9-hxKjlyIHTT6H4aoIb8,15776 -PyQt6/Qt6/translations/qt_help_ru.qm,sha256=VXtkTm2l8exyDvk5ZWFwh-TR9AsklMxapSTPN5YQjec,7288 -PyQt6/Qt6/translations/qt_help_sk.qm,sha256=9B4z4deQvQ0-sYDx-HW8GR_nR3NijyXCytleFALmaGc,10388 -PyQt6/Qt6/translations/qt_help_sl.qm,sha256=LslV5mJAfrzY3NrlqqIeQQjgtbCu4OnbcSwnBylDU18,10363 -PyQt6/Qt6/translations/qt_help_tr.qm,sha256=bsK4xcd1vHbSWNMlodyXkqtcHY7q8I9BsPk4sCzUZC4,6735 -PyQt6/Qt6/translations/qt_help_uk.qm,sha256=SXz8RzaEaS7kTXo3lej7InDFcGn9nrmKYV3Smrm-inw,9750 -PyQt6/Qt6/translations/qt_help_zh_CN.qm,sha256=4lbR9gNKWlUhxi8Sn5FzEhbkdPceHZyuo9PcsRtnDes,5115 -PyQt6/Qt6/translations/qt_help_zh_TW.qm,sha256=Z-bfCmxl4PzzN5jftBf5u_DN5FErVunjFJql0Y97AZg,5160 -PyQt6/Qt6/translations/qt_hr.qm,sha256=_J5BRvM749CbI0vgHlYjXTA32NgtZPBwC01KbiU6Yac,102 -PyQt6/Qt6/translations/qt_hu.qm,sha256=wvpknxZ824AdHMDLacHZNZT9W_jAt-eblpk12lw-Gao,84 -PyQt6/Qt6/translations/qt_it.qm,sha256=nnoYvCDr7sVLqq9ByRinRTRREnH3lt___Q-bnsMcaNM,91 -PyQt6/Qt6/translations/qt_ja.qm,sha256=D1_lBFKUfR7pdVJJ2GA1S_9pdyebTElqW8d-W4nddF4,84 -PyQt6/Qt6/translations/qt_ka.qm,sha256=ALZ8bfwlUHm1uYpWQPglGclrJSCgKGgvukB4s510Pqo,94 -PyQt6/Qt6/translations/qt_ko.qm,sha256=HSVLU14cs1y8rYIQsVuJ9EiBWYJr81tFBGliY90QL6M,84 -PyQt6/Qt6/translations/qt_lt.qm,sha256=R-tfl0Z992kmFCHVSlvqETHJ-5tjiHkdOLtldDNbZL8,165383 -PyQt6/Qt6/translations/qt_lv.qm,sha256=rd7KKFKCM4KU8kylDTfQil9o03hdCpSvht1OyPKjtEk,63 -PyQt6/Qt6/translations/qt_nl.qm,sha256=Oehwy9JcD5f6mxgo1eoe2YSYV6LibFMhs_E8dr6PBUg,91 -PyQt6/Qt6/translations/qt_nn.qm,sha256=TlROI_der-FVPciWlz2yO1eVzSQ3htXGU8wPNqRsp08,91 -PyQt6/Qt6/translations/qt_pl.qm,sha256=5okK-gyvD22wJI5MlPYBa47IvCZvHg6bjwHo6pEs-Wg,99 -PyQt6/Qt6/translations/qt_pt_BR.qm,sha256=DiTFjjUnGFP4zfs_D3sHQbWppYjkPN7GKuhaOEJ3Hgo,106 -PyQt6/Qt6/translations/qt_pt_PT.qm,sha256=LB57v1FopktDdS3UxUdgHAvebWEPhnH6PjrzhZfoR4M,70334 -PyQt6/Qt6/translations/qt_ru.qm,sha256=GziOLW0b1AVgPnlOSYxtfsX1pa2BkkNUb2OZGB2jZ1g,102 -PyQt6/Qt6/translations/qt_sk.qm,sha256=hAw7Acid-Xb8HS5b_G_IS2Vma4o860y_WqDCKvPSo4M,95 -PyQt6/Qt6/translations/qt_sl.qm,sha256=xE4DE6lBTMDkkLZbDANvoRvKlZNTsiiIZUe8LISSA08,228428 -PyQt6/Qt6/translations/qt_sv.qm,sha256=ADLIy6956DYCf2RpbQEtOnuJ5fW4JZ4DMbl2OK3zjP8,65865 -PyQt6/Qt6/translations/qt_tr.qm,sha256=WeigxBG-OwgCpoVhsJDxggmda3XE_kbzmOVfEVKOEbk,84 -PyQt6/Qt6/translations/qt_uk.qm,sha256=BT7B9nfE26SMapfrKPT8eMFREyTRhD1_TOwsfACmYUU,102 -PyQt6/Qt6/translations/qt_zh_CN.qm,sha256=wOKdMslUCn54ZDt0IU5jPFb2qxHwGOUWYp8sEbH7Cfw,99 -PyQt6/Qt6/translations/qt_zh_TW.qm,sha256=JOImlUSRaJVJoaGZDbO4y3iIgAjYFjsv0kQrdyttG18,99 -PyQt6/Qt6/translations/qtbase_ar.qm,sha256=4D_mjYMgFUNpj9f-Jn3V38W_0ZUUfnT_LxmsNJFAEmM,160017 -PyQt6/Qt6/translations/qtbase_bg.qm,sha256=5Eisnj8Wwp6yevMBLv4hBS2qePq_s0zW3_L2nuO9PNs,165337 -PyQt6/Qt6/translations/qtbase_ca.qm,sha256=AFsKoMmluTDf3YcGYZWKgGm77IYtdfmLziC_dAG-oT0,209899 -PyQt6/Qt6/translations/qtbase_cs.qm,sha256=AwKLQt9UeScDceTDvcffL1bLvm3alWooZKxvZBWGH-g,174701 -PyQt6/Qt6/translations/qtbase_da.qm,sha256=fR5cozELVNEEwZvyq9QCs45YTocDmnDhU8Spr3SyXCI,181387 -PyQt6/Qt6/translations/qtbase_de.qm,sha256=jmwLWnc-NtYJQnleiXHXKUOdd6hhPsRm_CTQ9zos5mM,219567 -PyQt6/Qt6/translations/qtbase_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtbase_es.qm,sha256=T_2la6O7VBSrBILR3eZKbyJuNIj2t_PxGhUOAfU_pMg,165170 -PyQt6/Qt6/translations/qtbase_fa.qm,sha256=945Ztb3VhhgamZA0ukGIaO0X_pwFcH-2XlI_cOkiU9I,148156 -PyQt6/Qt6/translations/qtbase_fi.qm,sha256=5H_hNxPhhNB_pEld3gxYmw6PVi6RV0o1WKk2NEOk-nI,179941 -PyQt6/Qt6/translations/qtbase_fr.qm,sha256=MUJDpVwyZ5rUc_3-SNx9ZulzrQ_IvyFkSAxY3dtQwac,159463 -PyQt6/Qt6/translations/qtbase_gd.qm,sha256=Y7Q53UQTmqOu1UwuvgP6m8d_IsFO2Puo7_JghEW7Iz0,189580 -PyQt6/Qt6/translations/qtbase_he.qm,sha256=4evKFq_omUNW-BygB_vbnd-GWEIBD-kIkj2HO2h8rT8,138690 -PyQt6/Qt6/translations/qtbase_hr.qm,sha256=u57smpplLBNA3HXrLnSb5Q3wD4hbPWkA38dnmcRbJE0,149711 -PyQt6/Qt6/translations/qtbase_hu.qm,sha256=bPENKwDPaRDp0EqBRoT-AhPDlWULqr-gT9at9JwAoWs,203396 -PyQt6/Qt6/translations/qtbase_it.qm,sha256=eAjtVCp4M8S9lOyL37vKALtPL-FZebkSHOMkkyNocwA,161166 -PyQt6/Qt6/translations/qtbase_ja.qm,sha256=K5WBxpuXX1m-UFsSfNPBnUA-89EuDoOG-5cjgiPpwd8,129913 -PyQt6/Qt6/translations/qtbase_ka.qm,sha256=5V5LcvpiC-vuUpfKWd_i9JiUoeVE8rdIWxz9iCkonW8,201105 -PyQt6/Qt6/translations/qtbase_ko.qm,sha256=AXntGxNuHLP1gzUeqixUW6PYOm7j-CwyUFkmoaX18YM,156799 -PyQt6/Qt6/translations/qtbase_lv.qm,sha256=hG4EdXOuQMg2ccO6f3PifvwkuYyCcB2g35lz5XQXi7I,153608 -PyQt6/Qt6/translations/qtbase_nl.qm,sha256=9hUTvNu2rYAFhflDepXQGKqxf6Eu5BSqMUYv8nnYJA4,202861 -PyQt6/Qt6/translations/qtbase_nn.qm,sha256=mDc0tAqk0lBCG6DRYUQWy4tCTW8UD0p9v4sR5l7vY9w,196424 -PyQt6/Qt6/translations/qtbase_pl.qm,sha256=PPa1wU1esM-B6a8gZuZrOqV5prmzwyPtZwdh9iVKjFQ,162962 -PyQt6/Qt6/translations/qtbase_pt_BR.qm,sha256=g0T1vDM8RdN8_UJaCRJOsR8SQ58zc37AuGg9BKQWdG4,208516 -PyQt6/Qt6/translations/qtbase_ru.qm,sha256=PaZgVmj5F40RqDjEUVR4CE3PtPnPIvmdepK0ktucIks,203767 -PyQt6/Qt6/translations/qtbase_sk.qm,sha256=1YauLDFAdM85hBf97LQHCdVHjf6wpnwv5g1Qnum1ntc,125763 -PyQt6/Qt6/translations/qtbase_tr.qm,sha256=QBPDNA2reuKuWUv7d5oV2eZcjuPns04RB075KVJQ3gI,190755 -PyQt6/Qt6/translations/qtbase_uk.qm,sha256=Ubj_VbN9xZB9Y3qN3aEvvoFoUrAkTHTrTw-4SGenhuA,158274 -PyQt6/Qt6/translations/qtbase_zh_CN.qm,sha256=mP1Ll9vsivXN0V-FoWwz78dzAbGusEadqvwEuasvNXA,136673 -PyQt6/Qt6/translations/qtbase_zh_TW.qm,sha256=IQErK0J_jQnTHOnK5YLKJ5VbR4yj3C7BijBo2AhjjGo,126185 -PyQt6/Qt6/translations/qtconnectivity_bg.qm,sha256=jVmlbFjLdyZdNg_77mehMcD9XiF3a6pcQlrMTdHjVlo,47342 -PyQt6/Qt6/translations/qtconnectivity_ca.qm,sha256=EV0xvrSNW5XTz2e8BXkJdVELFaCSs6O6MSkq1Gd7Y70,50664 -PyQt6/Qt6/translations/qtconnectivity_da.qm,sha256=qDV2jhHNdByX465z4-W5jlUsCiO6r1NkGZtiQplN3SU,45569 -PyQt6/Qt6/translations/qtconnectivity_de.qm,sha256=Pn-jF5IW6JRT_AkYFPzPpBy7FqhC6fE-YfmzT_GYMxM,48560 -PyQt6/Qt6/translations/qtconnectivity_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtconnectivity_es.qm,sha256=hQWZlYJ79HPukzgJGHEqZxRh-vy8YqhAahej7fxLqRU,46591 -PyQt6/Qt6/translations/qtconnectivity_hr.qm,sha256=96fsW2Dryrk1k5WbrfHAua_yMVX2UIDO08cyFsPRQig,48438 -PyQt6/Qt6/translations/qtconnectivity_hu.qm,sha256=ZeNSRfQjNwOngT78CWM9zhlQFpapDScJzir0Zk2k3wg,47745 -PyQt6/Qt6/translations/qtconnectivity_ka.qm,sha256=LticSSxdJjlaXLCudGKwr_FixfQKbEuygg-AE4jOb64,48966 -PyQt6/Qt6/translations/qtconnectivity_ko.qm,sha256=yriGJRya5BR5hrssTrtt33a6vFuNZWm8E4EmE0IQMNk,37040 -PyQt6/Qt6/translations/qtconnectivity_nl.qm,sha256=2prFAnbUOQORDoQK8KOXLQ324PeA19wzGTt3Rq3d5Ds,48264 -PyQt6/Qt6/translations/qtconnectivity_pl.qm,sha256=ZP79rueSrjj8Bp8H4zmjwiAMCxiH-beFUnvz5NOm36Y,31377 -PyQt6/Qt6/translations/qtconnectivity_pt_BR.qm,sha256=7uVsbPqyHNLPKuGnNamyvjIjir3LAB5tV9IRL9fDSRM,25768 -PyQt6/Qt6/translations/qtconnectivity_ru.qm,sha256=Ko3M-V4Mge9Gff1QhW47OJds-7qHW8ZNmBk7bFjeCJY,49914 -PyQt6/Qt6/translations/qtconnectivity_tr.qm,sha256=c1r1-WAPDQefRtuE6lgiGRqqrvtN-r_rs6mdaZgwyuk,45807 -PyQt6/Qt6/translations/qtconnectivity_uk.qm,sha256=jfgAJufNS4HImOykg0iCv7SFWLalXCy4UAYbjxlHzvg,42223 -PyQt6/Qt6/translations/qtconnectivity_zh_CN.qm,sha256=lKTiP91xKPLDtl8yGpLW8PPIKS6zEutJMxD-N6jMfkM,33559 -PyQt6/Qt6/translations/qtdeclarative_ar.qm,sha256=xc7sk0ycz-NPLbkvndw3otOUHX6j15kkIsNB_YrPeD0,640 -PyQt6/Qt6/translations/qtdeclarative_bg.qm,sha256=ydf3T5Tfg6wKHwXtZMMQMP8e7y61cF5W53Hb15XVnnk,70819 -PyQt6/Qt6/translations/qtdeclarative_ca.qm,sha256=OgO57egUmtQLEgf3yO9P5cYqSbmomP62Rgj8GdC_e9M,99189 -PyQt6/Qt6/translations/qtdeclarative_da.qm,sha256=ta_kq19vyfDghw98CEVssmSNPbN7MNzpVZ19MVuu4vE,70134 -PyQt6/Qt6/translations/qtdeclarative_de.qm,sha256=y1bABSU2NgbMYqSAH_JJUSdEEdLE6zj_vc8sVoO4w9A,104975 -PyQt6/Qt6/translations/qtdeclarative_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtdeclarative_es.qm,sha256=4h-9Kbf37u5A6D4o3c7HZ-LNVDcYTIbZYUo20h0KOJY,59875 -PyQt6/Qt6/translations/qtdeclarative_fa.qm,sha256=DFQJdS6lmrHnJQE5njuzV49Mjl7D8FfxkaB1hKoB_XE,29899 -PyQt6/Qt6/translations/qtdeclarative_fi.qm,sha256=7L3-V86szVU0TQyB46I6Q3x2VMw-fpNxAwV2EHUxBi8,65815 -PyQt6/Qt6/translations/qtdeclarative_fr.qm,sha256=gfM1PAskeZjLD67XrDey60Pxenx9IktypZIdyFnSUOE,54514 -PyQt6/Qt6/translations/qtdeclarative_hr.qm,sha256=pjsefFYn4d61lQDmIweiUAJYSocpZPm1fyWczmazNvs,60894 -PyQt6/Qt6/translations/qtdeclarative_hu.qm,sha256=Sc9oXe6VjZbm-9AuONG4G0jCOYfsQ3FjFfa7QTPTS7o,98148 -PyQt6/Qt6/translations/qtdeclarative_ja.qm,sha256=SFEOgyNRr4cH-6bax1W0PWUYLHuCYpaAXbRj8vhDHGk,45301 -PyQt6/Qt6/translations/qtdeclarative_ka.qm,sha256=pMvhWQdUR7P8GyWoixseSMDVquCJuMci6hgq3RftjLo,94893 -PyQt6/Qt6/translations/qtdeclarative_ko.qm,sha256=H7gzOJYZdMpPPEfDAXuX-DQpz34gXkPCJevIanMPX8Q,50236 -PyQt6/Qt6/translations/qtdeclarative_lv.qm,sha256=F63mXOuY2tqYKNr4mQRyv7io6kl7qN6-fSciE4mEumU,53940 -PyQt6/Qt6/translations/qtdeclarative_nl.qm,sha256=TLXcjckXdxdWdZgsN5WqEmGtBL8a97eWLnW3ZBc0Hy4,74976 -PyQt6/Qt6/translations/qtdeclarative_nn.qm,sha256=7OxKNIC9N1L6GxOZUdchGbS1MwiNRKqwqBgfc12IN0E,861 -PyQt6/Qt6/translations/qtdeclarative_pl.qm,sha256=or1zCU2mWV71j0gxlpTu828H920BT93YqMNUY0lpEoA,64190 -PyQt6/Qt6/translations/qtdeclarative_pt_BR.qm,sha256=o0HjutcTkI_sgho66tOCHlr-4DdsbA3OztcJw2Hmsw0,83041 -PyQt6/Qt6/translations/qtdeclarative_ru.qm,sha256=WrOdq_CFWDoL1NmIlM7-xLHXiOggu1G7YIUfj1B5MZY,67138 -PyQt6/Qt6/translations/qtdeclarative_sk.qm,sha256=-VNg588QFp4rszc8T6UVPTXxhDR01-zkIy5wMOlFqbM,48654 -PyQt6/Qt6/translations/qtdeclarative_tr.qm,sha256=WhDKw-toSHzftvmCMGsoWkX9kEUONpht01ROjgf94aM,70623 -PyQt6/Qt6/translations/qtdeclarative_uk.qm,sha256=GqzWpfJYPYA5iA57fPmjdON9mCvFzadxMGzGwLd4f1k,73366 -PyQt6/Qt6/translations/qtdeclarative_zh_CN.qm,sha256=n5oV3N33zfzsGHWhDupaQrSHNJPmO5neUD04X3F03Z8,63092 -PyQt6/Qt6/translations/qtdeclarative_zh_TW.qm,sha256=xsiz0odNCs_zacKGz8RFkGS_S1gcrNpuz3C0SoSeO-I,647 -PyQt6/Qt6/translations/qtlocation_bg.qm,sha256=7x3dCKNNHjO0SPUswmFtB3hsb7q5hlAAKvCLmGc3v1M,42381 -PyQt6/Qt6/translations/qtlocation_ca.qm,sha256=__ngUcVdv09H8BaqAikGPREgXuJme2iF2dMllHicaJs,45940 -PyQt6/Qt6/translations/qtlocation_da.qm,sha256=435Z5h1Jh97y1Kd2MIYXG4aq_rBf0OZPa6kKUMiCUDo,44056 -PyQt6/Qt6/translations/qtlocation_de.qm,sha256=QKujKL69uppad2LkE350cftuWusQHA-CaQQCmub8Tss,46702 -PyQt6/Qt6/translations/qtlocation_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtlocation_es.qm,sha256=AxLsCseH8cCcmw_xLBM46bVWKcYXGYF6KwBoAAq8MJM,23400 -PyQt6/Qt6/translations/qtlocation_fi.qm,sha256=0OKkek6ZAiqmEriCcfv7TW8wnN4oqXLjqD00mq9RcP4,43724 -PyQt6/Qt6/translations/qtlocation_fr.qm,sha256=dBETQY0R5QbdhcJQldjrb3j910QNpt2LrtKsOopbUrc,22158 -PyQt6/Qt6/translations/qtlocation_hr.qm,sha256=Ns-6OyoiWcvGLLy_D-nbHATtx49ZrTY2Ll-dTVUzXXM,43758 -PyQt6/Qt6/translations/qtlocation_hu.qm,sha256=yzvXbFbEF9MFyP8ZdnzLXgFPPS7UUvopYwLNdz3bkcA,44873 -PyQt6/Qt6/translations/qtlocation_ka.qm,sha256=BmRw_38pRmao0IzQOr4UrVQsoD_oPZs5lj-4GzKKlxg,43966 -PyQt6/Qt6/translations/qtlocation_ko.qm,sha256=UbHfd6SHeB5F3EVx3riZb9P1yIcuiV-uYYKS72-c5JU,35336 -PyQt6/Qt6/translations/qtlocation_nl.qm,sha256=9Axr-UTFLxPgrFa8PNEPzbsFMbweV7zkkDJ4g5cXAF8,44290 -PyQt6/Qt6/translations/qtlocation_pl.qm,sha256=Yhs0Z3InD5BcrKRVxnyn1yDX9erkr71kMo83qwMBwwc,42325 -PyQt6/Qt6/translations/qtlocation_pt_BR.qm,sha256=jwYPrKIH53LcjCQ4AwWqnbc5E0rq6e-iAwe7xsYXr2k,51109 -PyQt6/Qt6/translations/qtlocation_ru.qm,sha256=io4iMnXgN_d4ophBXmXmSu7r9rfpreLBS5SMfJ9Mq7c,43278 -PyQt6/Qt6/translations/qtlocation_tr.qm,sha256=ugnp7ZhX7lxWJM3ILf6-UYhDqf_V9aWpnxwePh4KHA0,44365 -PyQt6/Qt6/translations/qtlocation_uk.qm,sha256=GRBiHOcQoj8vzmA8s7eNokokyd9Jez8mUF7dSnOLAOQ,24159 -PyQt6/Qt6/translations/qtlocation_zh_CN.qm,sha256=bb0s5iwyNbrFCqMi_Y24CcitXUjA1wqZI83ossk4kjo,32577 -PyQt6/Qt6/translations/qtmultimedia_ar.qm,sha256=X8EEFOFowRYbhZClwXPRQNMbF89FDwrJPmZuv3ov-Qg,11486 -PyQt6/Qt6/translations/qtmultimedia_bg.qm,sha256=rdhnX7wjUftsg5ftNpMvmFU3gt1M4EmO_FuJsFCshiY,13683 -PyQt6/Qt6/translations/qtmultimedia_ca.qm,sha256=kYm2w-VGlmvlY9XAOMOUAF739ik-DBgVYBSPHGFf1zM,15538 -PyQt6/Qt6/translations/qtmultimedia_cs.qm,sha256=bxFuei_e_oSokN8XGNI15h1XMb98Lj5XqDj27J7t4Po,15906 -PyQt6/Qt6/translations/qtmultimedia_da.qm,sha256=OdkCQRBkzFxf1FdC8XaAIqGueVNwB0Gy9gjjgH4ZEQo,13659 -PyQt6/Qt6/translations/qtmultimedia_de.qm,sha256=0ES7OP_KfFfyXcA4-LELEjHIPTSv8OseuAJU-fqQn4Q,15510 -PyQt6/Qt6/translations/qtmultimedia_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtmultimedia_es.qm,sha256=CGaRG_1MbnjTUX6imN5lPK7wtySK76zbpSNudWWpsqU,17046 -PyQt6/Qt6/translations/qtmultimedia_fa.qm,sha256=WqV9a_r18kOMOx2PhSlMF8hSvMB9WRbKfftD0ghwyDo,11278 -PyQt6/Qt6/translations/qtmultimedia_fi.qm,sha256=YovnLB3HBlKrMC4vjMufPDKOf93ffY0cXOIQVqm6hPI,13883 -PyQt6/Qt6/translations/qtmultimedia_fr.qm,sha256=nNLyZjl46THEqPVK8mxa7h3bI68vGClugqt2O75rreo,12700 -PyQt6/Qt6/translations/qtmultimedia_hr.qm,sha256=E0Kpbh8HFDQ8-4v58OzJ83NjhaI8_53I542213YtQbQ,14176 -PyQt6/Qt6/translations/qtmultimedia_hu.qm,sha256=bj55TQnDkluNPgzZX1H1XV3rmcrEkuz8x0zUoVIjrvk,14467 -PyQt6/Qt6/translations/qtmultimedia_it.qm,sha256=rKjU3RReZx2CflgklvICgdxVmskefhP4jPUIvC1jAe0,17194 -PyQt6/Qt6/translations/qtmultimedia_ja.qm,sha256=-aiIWGxCwiiUzLQYAlfC3nApn_XVQAh7wzTadKjdWWk,14337 -PyQt6/Qt6/translations/qtmultimedia_ka.qm,sha256=ze3U109ObNr36OxM59ogPno-H79KzM8Zj9IWm9bdm40,14196 -PyQt6/Qt6/translations/qtmultimedia_ko.qm,sha256=9RKl6YVTXQMJ9zfmFW9ZWa6bZAXmX_dquuWhOTMvLHo,11006 -PyQt6/Qt6/translations/qtmultimedia_nl.qm,sha256=mCZSCT-T3tjKDAbi5wzgEtG1YpgqwY9xD7OU4M3yG6c,14132 -PyQt6/Qt6/translations/qtmultimedia_nn.qm,sha256=AgqThr_BjCMEgJjtwUOfW8Xp-KGIrppJx1zIykYKgmg,13425 -PyQt6/Qt6/translations/qtmultimedia_pl.qm,sha256=PEy3EfalnlsZ5K3A0Ka-Y8C7VfFWJq1kDbG_0dE2NmQ,12237 -PyQt6/Qt6/translations/qtmultimedia_pt_BR.qm,sha256=YCaTmNPfNcM4s6FPOVRDGin0T8FzJa0AGZrpo5VB1Cw,14450 -PyQt6/Qt6/translations/qtmultimedia_ru.qm,sha256=MsERhBXyWjeNNWzwFlI5PI-QYxRbyPipPE-ZIWb6nU0,14109 -PyQt6/Qt6/translations/qtmultimedia_sk.qm,sha256=gvVE8x_7DOgDQPRFrSyOK6V5aUE--bXRD-QyK7lqaFE,9896 -PyQt6/Qt6/translations/qtmultimedia_tr.qm,sha256=GOsclSb3eKJPsNd9AAhXHZcnFnCN67hfXmxe6EBLtkA,13571 -PyQt6/Qt6/translations/qtmultimedia_uk.qm,sha256=6_ZzGEkPcMdltQtsxOs81MDquf8QoZvESgSJskzs2DQ,15781 -PyQt6/Qt6/translations/qtmultimedia_zh_CN.qm,sha256=cL4iJyi4heDDfDIcxxaBPv-KuZYyh6boDdvIPmtt7GQ,9863 -PyQt6/Qt6/translations/qtmultimedia_zh_TW.qm,sha256=gBaaWdD3mB9dvafKnE5s6zqe4XtCpXV0zH4hfU81R78,9827 -PyQt6/Qt6/translations/qtserialport_de.qm,sha256=S7xvwtw7HI4fA7U9pCMbes1uBo73W4Wq6UKdt9yULxY,2291 -PyQt6/Qt6/translations/qtserialport_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtserialport_es.qm,sha256=Rg_Io79dskz1cO0Mr3LDDXVKFoWbP4AUPta5u2p4Nws,2507 -PyQt6/Qt6/translations/qtserialport_ja.qm,sha256=lkHMe8QAop7D_FT2nHKuJfGQsZmBfc0LT1ZPz1sB1jg,1744 -PyQt6/Qt6/translations/qtserialport_ka.qm,sha256=QqxQt3jemDzsJBUX9bvZBdy18MPAfmk6K48zyuMiXhg,2179 -PyQt6/Qt6/translations/qtserialport_ko.qm,sha256=nIRH-MBpmzGPiuJu9TUAtegM4GthXhrxqSBboW9_baA,1627 -PyQt6/Qt6/translations/qtserialport_pl.qm,sha256=fYIAKFeXJnvesqYwiIEAw14KBqasvTxSVNyrAidlYU8,2002 -PyQt6/Qt6/translations/qtserialport_ru.qm,sha256=qpBpykJiQNA1uhMvPyuc8tVYY0Zt_HRaGhVr2hr4lWU,2370 -PyQt6/Qt6/translations/qtserialport_uk.qm,sha256=llpx75t-l27eNINHHQcny5921fKA0ran-1Q-o9reyZo,2424 -PyQt6/Qt6/translations/qtserialport_zh_CN.qm,sha256=hZIVGQkzi2RAanyAWKFs5Bqvx9vFO36mrgQznXrDx6A,1428 -PyQt6/Qt6/translations/qtwebsockets_ca.qm,sha256=zIfSBENLH_VSYSx6463taIHSqYUOa5ZjtzMOQwWHTSc,11547 -PyQt6/Qt6/translations/qtwebsockets_de.qm,sha256=3LctDx6x_YyyOaaTN-Pr11C1Hwr1U5c_MHdUKb2Qc_8,11421 -PyQt6/Qt6/translations/qtwebsockets_en.qm,sha256=SUrJorLLL97O01P0qfiY7Y3PYW6bxmdDjGJoHj9_ec8,33 -PyQt6/Qt6/translations/qtwebsockets_es.qm,sha256=jMtDaQKdYsUbvubSEKhBM3qHNjgqzqA9Zkoon9bxJxk,9679 -PyQt6/Qt6/translations/qtwebsockets_fr.qm,sha256=VpGJJAD5k5zTj--1HZheIK_EmOKlX2QokZwgTCClhLQ,9639 -PyQt6/Qt6/translations/qtwebsockets_ja.qm,sha256=ff4pfCdSranRGTP1VdKmFvuS9LTzwnu6eDqDq2W2H5s,7270 -PyQt6/Qt6/translations/qtwebsockets_ka.qm,sha256=70gJtZe4Y4Kg1hjQU85it-ZoZw-5HEBmTH_fwH0fFQg,10905 -PyQt6/Qt6/translations/qtwebsockets_ko.qm,sha256=vztx6rsgu8rCfF-GcbtwYOnqt7xoIbqPCdLWfugjZ7Y,7131 -PyQt6/Qt6/translations/qtwebsockets_pl.qm,sha256=SvkV3iEzq06Ta0rEhcoZ7TTsCKM5n5V2Xuem8rngdGE,7599 -PyQt6/Qt6/translations/qtwebsockets_ru.qm,sha256=bG4umRTyW60IfYL1oEOL-qm4uWW8sV5vH2nX_yLmng0,9562 -PyQt6/Qt6/translations/qtwebsockets_uk.qm,sha256=lzSl3_uImRGl2abrTqj4Hl945IMpzidH6TW833aI2Zk,9160 -PyQt6/Qt6/translations/qtwebsockets_zh_CN.qm,sha256=I4_Jec7gIMfgzZoH_bFMux6PALbVtO4x-nq_mrtEbik,6220 -PyQt6_Qt6-6.7.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -PyQt6_Qt6-6.7.3.dist-info/LICENSE,sha256=IATuPvgoKoX329A136z2PPA9VpU3vAhlX_6xQOo2ccU,44738 -PyQt6_Qt6-6.7.3.dist-info/METADATA,sha256=3NKDAkS-uO0lT6x2tUfPO0v2bvqIZtrrgDafpMvl0t4,534 -PyQt6_Qt6-6.7.3.dist-info/RECORD,, -PyQt6_Qt6-6.7.3.dist-info/WHEEL,sha256=yfbTthIMSV9Ep2iY0M2Yne5Sqdluo1flT9WFM2cn7UM,103 diff --git a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/WHEEL deleted file mode 100644 index 5b15b56..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_Qt6-6.7.3.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: pyqt-qt-wheel -Root-Is-Purelib: false -Tag: py3-none-manylinux_2_28_x86_64 diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/LICENSE deleted file mode 100644 index 8d01874..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2025 Phil Thompson - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/METADATA deleted file mode 100644 index a5bf80a..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/METADATA +++ /dev/null @@ -1,20 +0,0 @@ -Metadata-Version: 2.2 -Name: PyQt6_sip -Version: 13.10.0 -Summary: The sip module support for PyQt6 -Home-page: https://github.com/Python-SIP/sip -Author: Phil Thompson -Author-email: phil@riverbankcomputing.com -License: BSD-2-Clause -Platform: X11 -Platform: macOS -Platform: Windows -Requires-Python: >=3.9 -License-File: LICENSE -Dynamic: license -Dynamic: requires-python - -sip Extension Module -==================== - -The sip extension module provides support for the PyQt6 package. diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/RECORD deleted file mode 100644 index 9813a65..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/RECORD +++ /dev/null @@ -1,7 +0,0 @@ -PyQt6/sip.cpython-312-x86_64-linux-gnu.so,sha256=KTk4H0-qZhwCXvEtft_TcZQqBYGjMdTrvFf57AcYQws,898504 -PyQt6_sip-13.10.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -PyQt6_sip-13.10.0.dist-info/LICENSE,sha256=Pm9bQnw2-U7PhrwBaYr3Awoe1us3SBENXbuNFC2ARhE,1304 -PyQt6_sip-13.10.0.dist-info/METADATA,sha256=PVGl0itZa26xL9eeR-hUMLMDHW2MpeJJRSkAKMECC14,472 -PyQt6_sip-13.10.0.dist-info/RECORD,, -PyQt6_sip-13.10.0.dist-info/WHEEL,sha256=U0WyQ5dWH96qbumZ2Q_RMo5aKxx5EFxlWfyEctgWFQo,147 -PyQt6_sip-13.10.0.dist-info/top_level.txt,sha256=uGhVd--tC9Rc5vMUgHCyJSLvK6QghpAQuw_eGmNAhx8,6 diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/WHEEL deleted file mode 100644 index 340a122..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.8.0) -Root-Is-Purelib: false -Tag: cp312-cp312-manylinux_2_5_x86_64 -Tag: cp312-cp312-manylinux1_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/top_level.txt deleted file mode 100644 index ee397a4..0000000 --- a/myenv/lib/python3.12/site-packages/PyQt6_sip-13.10.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -PyQt6 diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/LICENSE deleted file mode 100644 index 04b6b1f..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/METADATA b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/METADATA deleted file mode 100644 index ae2ae34..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/METADATA +++ /dev/null @@ -1,321 +0,0 @@ -Metadata-Version: 2.1 -Name: PySocks -Version: 1.7.1 -Summary: A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information. -Home-page: https://github.com/Anorov/PySocks -Author: Anorov -Author-email: anorov.vorona@gmail.com -License: BSD -Keywords: socks,proxy -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* -Description-Content-Type: text/markdown - -PySocks -======= - -PySocks lets you send traffic through SOCKS and HTTP proxy servers. It is a modern fork of [SocksiPy](http://socksipy.sourceforge.net/) with bug fixes and extra features. - -Acts as a drop-in replacement to the socket module. Seamlessly configure SOCKS proxies for any socket object by calling `socket_object.set_proxy()`. - ----------------- - -Features -======== - -* SOCKS proxy client for Python 2.7 and 3.4+ -* TCP supported -* UDP mostly supported (issues may occur in some edge cases) -* HTTP proxy client included but not supported or recommended (you should use urllib2's or requests' own HTTP proxy interface) -* urllib2 handler included. `pip install` / `setup.py install` will automatically install the `sockshandler` module. - -Installation -============ - - pip install PySocks - -Or download the tarball / `git clone` and... - - python setup.py install - -These will install both the `socks` and `sockshandler` modules. - -Alternatively, include just `socks.py` in your project. - --------------------------------------------- - -*Warning:* PySocks/SocksiPy only supports HTTP proxies that use CONNECT tunneling. Certain HTTP proxies may not work with this library. If you wish to use HTTP (not SOCKS) proxies, it is recommended that you rely on your HTTP client's native proxy support (`proxies` dict for `requests`, or `urllib2.ProxyHandler` for `urllib2`) instead. - --------------------------------------------- - -Usage -===== - -## socks.socksocket ## - - import socks - - s = socks.socksocket() # Same API as socket.socket in the standard lib - - s.set_proxy(socks.SOCKS5, "localhost") # SOCKS4 and SOCKS5 use port 1080 by default - # Or - s.set_proxy(socks.SOCKS4, "localhost", 4444) - # Or - s.set_proxy(socks.HTTP, "5.5.5.5", 8888) - - # Can be treated identical to a regular socket object - s.connect(("www.somesite.com", 80)) - s.sendall("GET / HTTP/1.1 ...") - print s.recv(4096) - -## Monkeypatching ## - -To monkeypatch the entire standard library with a single default proxy: - - import urllib2 - import socket - import socks - - socks.set_default_proxy(socks.SOCKS5, "localhost") - socket.socket = socks.socksocket - - urllib2.urlopen("http://www.somesite.com/") # All requests will pass through the SOCKS proxy - -Note that monkeypatching may not work for all standard modules or for all third party modules, and generally isn't recommended. Monkeypatching is usually an anti-pattern in Python. - -## urllib2 Handler ## - -Example use case with the `sockshandler` urllib2 handler. Note that you must import both `socks` and `sockshandler`, as the handler is its own module separate from PySocks. The module is included in the PyPI package. - - import urllib2 - import socks - from sockshandler import SocksiPyHandler - - opener = urllib2.build_opener(SocksiPyHandler(socks.SOCKS5, "127.0.0.1", 9050)) - print opener.open("http://www.somesite.com/") # All requests made by the opener will pass through the SOCKS proxy - --------------------------------------------- - -Original SocksiPy README attached below, amended to reflect API changes. - --------------------------------------------- - -SocksiPy - -A Python SOCKS module. - -(C) 2006 Dan-Haim. All rights reserved. - -See LICENSE file for details. - - -*WHAT IS A SOCKS PROXY?* - -A SOCKS proxy is a proxy server at the TCP level. In other words, it acts as -a tunnel, relaying all traffic going through it without modifying it. -SOCKS proxies can be used to relay traffic using any network protocol that -uses TCP. - -*WHAT IS SOCKSIPY?* - -This Python module allows you to create TCP connections through a SOCKS -proxy without any special effort. -It also supports relaying UDP packets with a SOCKS5 proxy. - -*PROXY COMPATIBILITY* - -SocksiPy is compatible with three different types of proxies: - -1. SOCKS Version 4 (SOCKS4), including the SOCKS4a extension. -2. SOCKS Version 5 (SOCKS5). -3. HTTP Proxies which support tunneling using the CONNECT method. - -*SYSTEM REQUIREMENTS* - -Being written in Python, SocksiPy can run on any platform that has a Python -interpreter and TCP/IP support. -This module has been tested with Python 2.3 and should work with greater versions -just as well. - - -INSTALLATION -------------- - -Simply copy the file "socks.py" to your Python's `lib/site-packages` directory, -and you're ready to go. [Editor's note: it is better to use `python setup.py install` for PySocks] - - -USAGE ------- - -First load the socks module with the command: - - >>> import socks - >>> - -The socks module provides a class called `socksocket`, which is the base to all of the module's functionality. - -The `socksocket` object has the same initialization parameters as the normal socket -object to ensure maximal compatibility, however it should be noted that `socksocket` will only function with family being `AF_INET` and -type being either `SOCK_STREAM` or `SOCK_DGRAM`. -Generally, it is best to initialize the `socksocket` object with no parameters - - >>> s = socks.socksocket() - >>> - -The `socksocket` object has an interface which is very similiar to socket's (in fact -the `socksocket` class is derived from socket) with a few extra methods. -To select the proxy server you would like to use, use the `set_proxy` method, whose -syntax is: - - set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]]) - -Explanation of the parameters: - -`proxy_type` - The type of the proxy server. This can be one of three possible -choices: `PROXY_TYPE_SOCKS4`, `PROXY_TYPE_SOCKS5` and `PROXY_TYPE_HTTP` for SOCKS4, -SOCKS5 and HTTP servers respectively. `SOCKS4`, `SOCKS5`, and `HTTP` are all aliases, respectively. - -`addr` - The IP address or DNS name of the proxy server. - -`port` - The port of the proxy server. Defaults to 1080 for socks and 8080 for http. - -`rdns` - This is a boolean flag than modifies the behavior regarding DNS resolving. -If it is set to True, DNS resolving will be preformed remotely, on the server. -If it is set to False, DNS resolving will be preformed locally. Please note that -setting this to True with SOCKS4 servers actually use an extension to the protocol, -called SOCKS4a, which may not be supported on all servers (SOCKS5 and http servers -always support DNS). The default is True. - -`username` - For SOCKS5 servers, this allows simple username / password authentication -with the server. For SOCKS4 servers, this parameter will be sent as the userid. -This parameter is ignored if an HTTP server is being used. If it is not provided, -authentication will not be used (servers may accept unauthenticated requests). - -`password` - This parameter is valid only for SOCKS5 servers and specifies the -respective password for the username provided. - -Example of usage: - - >>> s.set_proxy(socks.SOCKS5, "socks.example.com") # uses default port 1080 - >>> s.set_proxy(socks.SOCKS4, "socks.test.com", 1081) - -After the set_proxy method has been called, simply call the connect method with the -traditional parameters to establish a connection through the proxy: - - >>> s.connect(("www.sourceforge.net", 80)) - >>> - -Connection will take a bit longer to allow negotiation with the proxy server. -Please note that calling connect without calling `set_proxy` earlier will connect -without a proxy (just like a regular socket). - -Errors: Any errors in the connection process will trigger exceptions. The exception -may either be generated by the underlying socket layer or may be custom module -exceptions, whose details follow: - -class `ProxyError` - This is a base exception class. It is not raised directly but -rather all other exception classes raised by this module are derived from it. -This allows an easy way to catch all proxy-related errors. It descends from `IOError`. - -All `ProxyError` exceptions have an attribute `socket_err`, which will contain either a -caught `socket.error` exception, or `None` if there wasn't any. - -class `GeneralProxyError` - When thrown, it indicates a problem which does not fall -into another category. - -* `Sent invalid data` - This error means that unexpected data has been received from -the server. The most common reason is that the server specified as the proxy is -not really a SOCKS4/SOCKS5/HTTP proxy, or maybe the proxy type specified is wrong. - -* `Connection closed unexpectedly` - The proxy server unexpectedly closed the connection. -This may indicate that the proxy server is experiencing network or software problems. - -* `Bad proxy type` - This will be raised if the type of the proxy supplied to the -set_proxy function was not one of `SOCKS4`/`SOCKS5`/`HTTP`. - -* `Bad input` - This will be raised if the `connect()` method is called with bad input -parameters. - -class `SOCKS5AuthError` - This indicates that the connection through a SOCKS5 server -failed due to an authentication problem. - -* `Authentication is required` - This will happen if you use a SOCKS5 server which -requires authentication without providing a username / password at all. - -* `All offered authentication methods were rejected` - This will happen if the proxy -requires a special authentication method which is not supported by this module. - -* `Unknown username or invalid password` - Self descriptive. - -class `SOCKS5Error` - This will be raised for SOCKS5 errors which are not related to -authentication. -The parameter is a tuple containing a code, as given by the server, -and a description of the -error. The possible errors, according to the RFC, are: - -* `0x01` - General SOCKS server failure - If for any reason the proxy server is unable to -fulfill your request (internal server error). -* `0x02` - connection not allowed by ruleset - If the address you're trying to connect to -is blacklisted on the server or requires authentication. -* `0x03` - Network unreachable - The target could not be contacted. A router on the network -had replied with a destination net unreachable error. -* `0x04` - Host unreachable - The target could not be contacted. A router on the network -had replied with a destination host unreachable error. -* `0x05` - Connection refused - The target server has actively refused the connection -(the requested port is closed). -* `0x06` - TTL expired - The TTL value of the SYN packet from the proxy to the target server -has expired. This usually means that there are network problems causing the packet -to be caught in a router-to-router "ping-pong". -* `0x07` - Command not supported - For instance if the server does not support UDP. -* `0x08` - Address type not supported - The client has provided an invalid address type. -When using this module, this error should not occur. - -class `SOCKS4Error` - This will be raised for SOCKS4 errors. The parameter is a tuple -containing a code and a description of the error, as given by the server. The -possible error, according to the specification are: - -* `0x5B` - Request rejected or failed - Will be raised in the event of an failure for any -reason other then the two mentioned next. -* `0x5C` - request rejected because SOCKS server cannot connect to identd on the client - -The Socks server had tried an ident lookup on your computer and has failed. In this -case you should run an identd server and/or configure your firewall to allow incoming -connections to local port 113 from the remote server. -* `0x5D` - request rejected because the client program and identd report different user-ids - -The Socks server had performed an ident lookup on your computer and has received a -different userid than the one you have provided. Change your userid (through the -username parameter of the set_proxy method) to match and try again. - -class `HTTPError` - This will be raised for HTTP errors. The message will contain -the HTTP status code and provided error message. - -After establishing the connection, the object behaves like a standard socket. - -Methods like `makefile()` and `settimeout()` should behave just like regular sockets. -Call the `close()` method to close the connection. - -In addition to the `socksocket` class, an additional function worth mentioning is the -`set_default_proxy` function. The parameters are the same as the `set_proxy` method. -This function will set default proxy settings for newly created `socksocket` objects, -in which the proxy settings haven't been changed via the `set_proxy` method. -This is quite useful if you wish to force 3rd party modules to use a SOCKS proxy, -by overriding the socket object. -For example: - - >>> socks.set_default_proxy(socks.SOCKS5, "socks.example.com") - >>> socket.socket = socks.socksocket - >>> urllib.urlopen("http://www.sourceforge.net/") - - -PROBLEMS ---------- - -Please open a GitHub issue at https://github.com/Anorov/PySocks - - diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/RECORD b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/RECORD deleted file mode 100644 index 4d0c62a..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/RECORD +++ /dev/null @@ -1,10 +0,0 @@ -PySocks-1.7.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -PySocks-1.7.1.dist-info/LICENSE,sha256=cCfiFOAU63i3rcwc7aWspxOnn8T2oMUsnaWz5wfm_-k,1401 -PySocks-1.7.1.dist-info/METADATA,sha256=zbQMizjPOOP4DhEiEX24XXjNrYuIxF9UGUpN0uFDB6Y,13235 -PySocks-1.7.1.dist-info/RECORD,, -PySocks-1.7.1.dist-info/WHEEL,sha256=t_MpApv386-8PVts2R6wsTifdIn0vbUDTVv61IbqFC8,92 -PySocks-1.7.1.dist-info/top_level.txt,sha256=TKSOIfCFBoK9EY8FBYbYqC3PWd3--G15ph9n8-QHPDk,19 -__pycache__/socks.cpython-312.pyc,, -__pycache__/sockshandler.cpython-312.pyc,, -socks.py,sha256=xOYn27t9IGrbTBzWsUUuPa0YBuplgiUykzkOB5V5iFY,31086 -sockshandler.py,sha256=2SYGj-pwt1kjgLoZAmyeaEXCeZDWRmfVS_QG6kErGtY,3966 diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/WHEEL deleted file mode 100644 index 129a673..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.3) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/top_level.txt deleted file mode 100644 index 9476163..0000000 --- a/myenv/lib/python3.12/site-packages/PySocks-1.7.1.dist-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -socks -sockshandler diff --git a/myenv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc deleted file mode 100644 index 4261a1e..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc deleted file mode 100644 index d7bdd17..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/__pycache__/socks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/socks.cpython-312.pyc deleted file mode 100644 index c4b7647..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/socks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/__pycache__/sockshandler.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/sockshandler.cpython-312.pyc deleted file mode 100644 index 92d1087..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/sockshandler.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc deleted file mode 100644 index ceed54e..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/__pycache__/typing_inspect.cpython-312.pyc b/myenv/lib/python3.12/site-packages/__pycache__/typing_inspect.cpython-312.pyc deleted file mode 100644 index f368971..0000000 Binary files a/myenv/lib/python3.12/site-packages/__pycache__/typing_inspect.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 156ee43..0000000 Binary files a/myenv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/METADATA b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/METADATA deleted file mode 100644 index 73df8c8..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/METADATA +++ /dev/null @@ -1,78 +0,0 @@ -Metadata-Version: 2.4 -Name: certifi -Version: 2026.2.25 -Summary: Python package for providing Mozilla's CA Bundle. -Home-page: https://github.com/certifi/python-certifi -Author: Kenneth Reitz -Author-email: me@kennethreitz.com -License: MPL-2.0 -Project-URL: Source, https://github.com/certifi/python-certifi -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) -Classifier: Natural Language :: English -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Requires-Python: >=3.7 -License-File: LICENSE -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: home-page -Dynamic: license -Dynamic: license-file -Dynamic: project-url -Dynamic: requires-python -Dynamic: summary - -Certifi: Python SSL Certificates -================================ - -Certifi provides Mozilla's carefully curated collection of Root Certificates for -validating the trustworthiness of SSL certificates while verifying the identity -of TLS hosts. It has been extracted from the `Requests`_ project. - -Installation ------------- - -``certifi`` is available on PyPI. Simply install it with ``pip``:: - - $ pip install certifi - -Usage ------ - -To reference the installed certificate authority (CA) bundle, you can use the -built-in function:: - - >>> import certifi - - >>> certifi.where() - '/usr/local/lib/python3.7/site-packages/certifi/cacert.pem' - -Or from the command line:: - - $ python -m certifi - /usr/local/lib/python3.7/site-packages/certifi/cacert.pem - -Enjoy! - -.. _`Requests`: https://requests.readthedocs.io/en/master/ - -Addition/Removal of Certificates --------------------------------- - -Certifi does not support any addition/removal or other modification of the -CA trust store content. This project is intended to provide a reliable and -highly portable root of trust to python deployments. Look to upstream projects -for methods to use alternate trust. diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/RECORD b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/RECORD deleted file mode 100644 index 8d4811a..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/RECORD +++ /dev/null @@ -1,14 +0,0 @@ -certifi-2026.2.25.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -certifi-2026.2.25.dist-info/METADATA,sha256=4NMuGXdg_hBiRA3paKVXYcDmE3VXEBWxTvCL2xlDyPU,2474 -certifi-2026.2.25.dist-info/RECORD,, -certifi-2026.2.25.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91 -certifi-2026.2.25.dist-info/licenses/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 -certifi-2026.2.25.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 -certifi/__init__.py,sha256=c9eaYufv1pSLl0Q8QNcMiMLLH4WquDcxdPyKjmI4opY,94 -certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243 -certifi/__pycache__/__init__.cpython-312.pyc,, -certifi/__pycache__/__main__.cpython-312.pyc,, -certifi/__pycache__/core.cpython-312.pyc,, -certifi/cacert.pem,sha256=_JFloSQDJj5-v72te-ej6sD6XTJdPHBGXyjTaQByyig,272441 -certifi/core.py,sha256=XFXycndG5pf37ayeF8N32HUuDafsyhkVMbO4BAPWHa0,3394 -certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/WHEEL deleted file mode 100644 index 1ef5583..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (82.0.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/licenses/LICENSE deleted file mode 100644 index 62b076c..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/licenses/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -This package contains a modified version of ca-bundle.crt: - -ca-bundle.crt -- Bundle of CA Root Certificates - -This is a bundle of X.509 certificates of public Certificate Authorities -(CA). These were automatically extracted from Mozilla's root certificates -file (certdata.txt). This file can be found in the mozilla source tree: -https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt -It contains the certificates in PEM format and therefore -can be directly used with curl / libcurl / php_curl, or with -an Apache+mod_ssl webserver for SSL client authentication. -Just configure this file as the SSLCACertificateFile.# - -***** BEGIN LICENSE BLOCK ***** -This Source Code Form is subject to the terms of the Mozilla Public License, -v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain -one at http://mozilla.org/MPL/2.0/. - -***** END LICENSE BLOCK ***** -@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/top_level.txt deleted file mode 100644 index 963eac5..0000000 --- a/myenv/lib/python3.12/site-packages/certifi-2026.2.25.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -certifi diff --git a/myenv/lib/python3.12/site-packages/certifi/__init__.py b/myenv/lib/python3.12/site-packages/certifi/__init__.py deleted file mode 100644 index 16c0c7c..0000000 --- a/myenv/lib/python3.12/site-packages/certifi/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .core import contents, where - -__all__ = ["contents", "where"] -__version__ = "2026.02.25" diff --git a/myenv/lib/python3.12/site-packages/certifi/__main__.py b/myenv/lib/python3.12/site-packages/certifi/__main__.py deleted file mode 100644 index 8945b5d..0000000 --- a/myenv/lib/python3.12/site-packages/certifi/__main__.py +++ /dev/null @@ -1,12 +0,0 @@ -import argparse - -from certifi import contents, where - -parser = argparse.ArgumentParser() -parser.add_argument("-c", "--contents", action="store_true") -args = parser.parse_args() - -if args.contents: - print(contents()) -else: - print(where()) diff --git a/myenv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 74fbad5..0000000 Binary files a/myenv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index d377840..0000000 Binary files a/myenv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc b/myenv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc deleted file mode 100644 index c8f9a28..0000000 Binary files a/myenv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/certifi/cacert.pem b/myenv/lib/python3.12/site-packages/certifi/cacert.pem deleted file mode 100644 index 5ec1afe..0000000 --- a/myenv/lib/python3.12/site-packages/certifi/cacert.pem +++ /dev/null @@ -1,4494 +0,0 @@ - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV -BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk -YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV -BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN -MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF -UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD -VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v -dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj -cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q -yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH -2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX -H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL -zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR -p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz -W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ -SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn -LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 -n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B -u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj -o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC -AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L -9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej -rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK -pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 -vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq -OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ -/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 -2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI -+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 -MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo -tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 -MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu -MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV -BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw -MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg -U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ -n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q -p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq -NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF -8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 -HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa -mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi -7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF -ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P -qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ -v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 -Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 -vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD -ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 -WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo -zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR -5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ -GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf -5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq -0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D -P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM -qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP -0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf -E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 1977337328857672817 -# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 -# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe -# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 -MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc -tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd -IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j -b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC -AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw -ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m -iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF -Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ -hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P -Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE -EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV -1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t -CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR -5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw -f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 -ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK -GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV ------END CERTIFICATE----- - -# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus ECC Root CA" -# Serial: 630369271402956006249506845124680065938238527194 -# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 -# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 -# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 ------BEGIN CERTIFICATE----- -MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw -RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY -BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz -MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u -LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 -v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd -e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw -V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA -AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG -GJTO ------END CERTIFICATE----- - -# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus Root CA" -# Serial: 387574501246983434957692974888460947164905180485 -# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc -# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 -# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 ------BEGIN CERTIFICATE----- -MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL -BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x -FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx -MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s -THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc -IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU -AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ -GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 -8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH -flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt -J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim -0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN -pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ -UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW -OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB -AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet -8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd -nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j -bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM -Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv -TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS -S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr -I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 -b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB -UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P -Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven -sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X2 O=Internet Security Research Group -# Subject: CN=ISRG Root X2 O=Internet Security Research Group -# Label: "ISRG Root X2" -# Serial: 87493402998870891108772069816698636114 -# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 -# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af -# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- - -# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Label: "HiPKI Root CA - G1" -# Serial: 60966262342023497858655262305426234976 -# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 -# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 -# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc ------BEGIN CERTIFICATE----- -MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa -Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 -YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw -qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv -Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 -lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz -Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ -KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK -FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj -HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr -y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ -/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM -a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 -fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG -SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi -7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc -SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza -ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc -XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg -iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho -L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF -Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr -kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ -vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU -YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 159662223612894884239637590694 -# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc -# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 -# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 ------BEGIN CERTIFICATE----- -MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD -VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw -MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g -UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT -BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx -uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV -HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ -+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 -bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 159662320309726417404178440727 -# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 -# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a -# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo -27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w -Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw -TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl -qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH -szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 -Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk -MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p -aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN -VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb -C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe -QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy -h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 -7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J -ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef -MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ -Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT -6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ -0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm -2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb -bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 159662449406622349769042896298 -# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc -# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 -# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt -nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY -6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu -MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k -RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg -f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV -+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo -dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa -G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq -gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H -vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 -0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC -B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u -NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg -yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev -HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 -xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR -TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg -JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV -7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl -6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 159662495401136852707857743206 -# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 -# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 -# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G -jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 -4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 -VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm -ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 159662532700760215368942768210 -# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 -# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 -# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi -QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR -HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D -9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 -p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD ------END CERTIFICATE----- - -# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj -# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj -# Label: "Telia Root CA v2" -# Serial: 7288924052977061235122729490515358 -# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 -# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd -# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx -CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE -AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 -NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ -MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq -AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 -vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 -lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD -n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT -7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o -6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC -TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 -WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R -DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI -pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj -YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy -rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ -8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi -0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM -A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS -SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K -TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF -6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er -3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt -Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT -VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW -ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA -rBPuUBQemMc= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 1 2020" -# Serial: 165870826978392376648679885835942448534 -# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed -# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 -# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 -NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS -zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 -QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ -VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW -wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV -dWNbFJWcHwHP2NVypw87 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 1 2020" -# Serial: 126288379621884218666039612629459926992 -# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e -# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 -# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 -NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC -/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD -wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 -OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA -y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb -gfM0agPnIjhQW+0ZT0MW ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS ECC P384 Root G5" -# Serial: 13129116028163249804115411775095713523 -# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed -# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee -# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 ------BEGIN CERTIFICATE----- -MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp -Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 -MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ -bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS -7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp -0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS -B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 -BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ -LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 -DXZDjC5Ty3zfDBeWUA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS RSA4096 Root G5" -# Serial: 11930366277458970227240571539258396554 -# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 -# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 -# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN -MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT -HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN -NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs -IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ -ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 -2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp -wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM -pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD -nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po -sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx -Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd -Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX -KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe -XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL -tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv -TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw -GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H -PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF -O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ -REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik -AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv -/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ -p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw -MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF -qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK -ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root R1 O=Certainly -# Subject: CN=Certainly Root R1 O=Certainly -# Label: "Certainly Root R1" -# Serial: 188833316161142517227353805653483829216 -# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 -# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af -# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw -PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy -dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 -YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 -1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT -vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed -aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 -1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 -r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 -cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ -wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ -6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA -2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH -Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR -eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u -d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr -PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d -8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi -1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd -rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di -taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 -lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj -yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn -Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy -yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n -wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 -OV+KmalBWQewLK8= ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root E1 O=Certainly -# Subject: CN=Certainly Root E1 O=Certainly -# Label: "Certainly Root E1" -# Serial: 8168531406727139161245376702891150584 -# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 -# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b -# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 ------BEGIN CERTIFICATE----- -MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw -CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu -bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ -BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s -eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK -+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 -QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 -hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm -ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG -BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR ------END CERTIFICATE----- - -# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication ECC RootCA1" -# Serial: 15446673492073852651 -# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 -# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 -# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 ------BEGIN CERTIFICATE----- -MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT -AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD -VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx -NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT -HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 -IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl -dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK -ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu -9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O -be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA1" -# Serial: 113562791157148395269083148143378328608 -# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 -# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a -# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU -MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI -T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz -MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF -SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh -bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z -xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ -spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 -58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR -at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll -5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq -nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK -V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ -pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO -z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn -jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ -WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF -7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 -YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli -awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u -+2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 -X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN -SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo -P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI -+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz -znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 -eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 -YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy -r/6zcCwupvI= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA2" -# Serial: 58605626836079930195615843123109055211 -# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c -# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 -# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 ------BEGIN CERTIFICATE----- -MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw -CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ -VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy -MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ -TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS -b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B -IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ -+kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK -sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA -94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B -43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root E46" -# Serial: 88989738453351742415770396670917916916 -# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 -# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a -# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 ------BEGIN CERTIFICATE----- -MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw -CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T -ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN -MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG -A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT -ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC -WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ -6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B -Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa -qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q -4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root R46" -# Serial: 156256931880233212765902055439220583700 -# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 -# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 -# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD -Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw -HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY -MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp -YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa -ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz -SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf -iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X -ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 -IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS -VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE -SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu -+Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt -8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L -HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt -zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P -AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c -mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ -YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 -gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA -Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB -JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX -DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui -TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 -dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 -LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp -0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY -QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS RSA Root CA 2022" -# Serial: 148535279242832292258835760425842727825 -# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da -# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca -# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed ------BEGIN CERTIFICATE----- -MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO -MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD -DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX -DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw -b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP -L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY -t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins -S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 -PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO -L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 -R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w -dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS -+YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS -d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG -AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f -gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z -NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt -hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM -QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf -R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ -DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW -P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy -lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq -bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w -AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q -r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji -Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU -98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS ECC Root CA 2022" -# Serial: 26605119622390491762507526719404364228 -# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 -# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 -# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT -U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 -MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh -dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm -acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN -SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME -GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW -uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp -15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN -b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA ECC TLS 2021" -# Serial: 81873346711060652204712539181482831616 -# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 -# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd -# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 ------BEGIN CERTIFICATE----- -MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w -LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w -CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 -MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF -Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X -tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 -AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 -KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD -aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu -CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo -9H1/IISpQuQo ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA RSA TLS 2021" -# Serial: 111436099570196163832749341232207667876 -# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 -# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 -# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f ------BEGIN CERTIFICATE----- -MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM -MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx -MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 -MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD -QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z -4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv -Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ -kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs -GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln -nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh -3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD -0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy -geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 -ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB -c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI -pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS -4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs -o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ -qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw -xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM -rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 -AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR -0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY -o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 -dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE -oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G3" -# Serial: 576386314500428537169965010905813481816650257167 -# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 -# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 -# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 ------BEGIN CERTIFICATE----- -MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM -BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe -Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw -IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU -cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS -T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK -AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 -nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep -qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA -yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs -hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX -zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv -kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT -f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA -uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB -o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih -MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E -BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 -wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 -XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 -JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j -ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV -VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx -xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on -AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d -7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj -gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV -+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo -FGWsJwt0ivKH ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G4" -# Serial: 451799571007117016466790293371524403291602933463 -# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb -# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a -# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c ------BEGIN CERTIFICATE----- -MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw -WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y -MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD -VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz -dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx -s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw -LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD -pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE -AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR -UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj -/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS ECC Root 2020" -# Serial: 72082518505882327255703894282316633856 -# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd -# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec -# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 ------BEGIN CERTIFICATE----- -MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw -CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH -bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw -MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx -JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE -AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O -tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP -f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA -MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di -z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn -27iQ7t0l ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS RSA Root 2023" -# Serial: 44676229530606711399881795178081572759 -# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 -# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 -# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj -MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 -eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy -MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC -REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG -A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 -cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV -cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA -U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 -Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug -BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy -8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J -co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg -8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 -rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 -mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg -+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX -gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 -p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ -pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm -9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw -M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd -GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ -CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t -xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ -w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK -L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj -X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q -ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm -dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= ------END CERTIFICATE----- - -# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" -# Serial: 65916896770016886708751106294915943533 -# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 -# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 -# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a ------BEGIN CERTIFICATE----- -MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf -e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C -cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O -BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO -PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw -hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG -XSaQpYXFuXqUPoeovQA= ------END CERTIFICATE----- - -# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA CYBER Root CA" -# Serial: 85076849864375384482682434040119489222 -# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 -# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 -# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ -MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 -IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 -WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO -LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P -40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF -avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ -34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i -JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu -j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf -Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP -2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA -S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA -oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC -kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW -5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd -BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB -AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t -tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn -68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn -TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t -RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx -f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI -Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz -8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 -NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX -xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 -t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA12" -# Serial: 587887345431707215246142177076162061960426065942 -# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 -# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 -# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw -NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF -KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt -p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd -J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur -FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J -hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K -h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF -AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld -mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ -mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA -8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV -55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ -yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA14" -# Serial: 575790784512929437950770173562378038616896959179 -# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 -# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f -# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw -NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ -FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg -vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy -6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo -/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J -kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ -0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib -y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac -18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs -0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB -SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL -ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk -86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E -rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib -ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT -zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS -DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 -2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo -FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy -K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 -dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl -Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB -365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c -JRNItX+S ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA15" -# Serial: 126083514594751269499665114766174399806381178503 -# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 -# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d -# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a ------BEGIN CERTIFICATE----- -MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw -UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM -dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy -NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl -cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 -IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 -wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR -ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT -9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp -4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 -bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 2 2023" -# Serial: 153168538924886464690566649552453098598 -# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 -# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 -# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw -OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr -i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE -gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 -k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT -Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl -2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U -cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP -/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS -uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ -0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N -DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ -XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 -GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI -FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n -riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR -VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc -LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn -4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD -hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG -koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 -ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS -Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 -knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ -hJ65bvspmZDogNOfJA== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS ECC Root CA" -# Serial: 310892014698942880364840003424242768478804666567 -# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c -# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 -# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 ------BEGIN CERTIFICATE----- -MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw -WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw -NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE -ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB -c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ -AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp -guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw -DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 -L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR -OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS RSA Root CA" -# Serial: 160405846464868906657516898462547310235378010780 -# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 -# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa -# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 ------BEGIN CERTIFICATE----- -MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM -BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN -MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG -A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 -c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ -NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ -Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 -HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 -ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb -xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX -i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ -UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j -TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT -bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 -S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 -Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 -iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt -7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp -2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ -g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj -pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M -pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP -XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe -SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 -ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy -323imttUQ/hHWKNddBWcwauwxzQ= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 2 2023" -# Serial: 139766439402180512324132425437959641711 -# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 -# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b -# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw -OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK -F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE -7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe -EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 -lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb -RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV -jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc -jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx -TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ -ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk -hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF -NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH -kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 -QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 -pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q -3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU -t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX -cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 -ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT -2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs -7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP -gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst -Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh -XBxvWHZks/wCuPWdCg== ------END CERTIFICATE----- - -# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Label: "SwissSign RSA TLS Root CA 2022 - 1" -# Serial: 388078645722908516278762308316089881486363258315 -# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 -# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce -# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 ------BEGIN CERTIFICATE----- -MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE -AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx -MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT -d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg -MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX -vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 -LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX -5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE -EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt -/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x -0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 -KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM -0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd -OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta -clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK -wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 -DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL -BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 -10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz -Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ -iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc -gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM -ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF -LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp -zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td -Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 -rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO -gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ ------END CERTIFICATE----- - -# Issuer: CN=OISTE Server Root ECC G1 O=OISTE Foundation -# Subject: CN=OISTE Server Root ECC G1 O=OISTE Foundation -# Label: "OISTE Server Root ECC G1" -# Serial: 47819833811561661340092227008453318557 -# MD5 Fingerprint: 42:a7:d2:35:ae:02:92:db:19:76:08:de:2f:05:b4:d4 -# SHA1 Fingerprint: 3b:f6:8b:09:ae:2a:92:7b:ba:e3:8d:3f:11:95:d9:e6:44:0c:45:e2 -# SHA256 Fingerprint: ee:c9:97:c0:c3:0f:21:6f:7e:3b:8b:30:7d:2b:ae:42:41:2d:75:3f:c8:21:9d:af:d1:52:0b:25:72:85:0f:49 ------BEGIN CERTIFICATE----- -MIICNTCCAbqgAwIBAgIQI/nD1jWvjyhLH/BU6n6XnTAKBggqhkjOPQQDAzBLMQsw -CQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwY -T0lTVEUgU2VydmVyIFJvb3QgRUNDIEcxMB4XDTIzMDUzMTE0NDIyOFoXDTQ4MDUy -NDE0NDIyN1owSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5kYXRp -b24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IEVDQyBHMTB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABBcv+hK8rBjzCvRE1nZCnrPoH7d5qVi2+GXROiFPqOujvqQy -cvO2Ackr/XeFblPdreqqLiWStukhEaivtUwL85Zgmjvn6hp4LrQ95SjeHIC6XG4N -2xml4z+cKrhAS93mT6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQ3 -TYhlz/w9itWj8UnATgwQb0K0nDAdBgNVHQ4EFgQUN02IZc/8PYrVo/FJwE4MEG9C -tJwwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCpKjAd0MKfkFFR -QD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxgZzFDJe0CMQCSia7pXGKD -YmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= ------END CERTIFICATE----- - -# Issuer: CN=OISTE Server Root RSA G1 O=OISTE Foundation -# Subject: CN=OISTE Server Root RSA G1 O=OISTE Foundation -# Label: "OISTE Server Root RSA G1" -# Serial: 113845518112613905024960613408179309848 -# MD5 Fingerprint: 23:a7:9e:d4:70:b8:b9:14:57:41:8a:7e:44:59:e2:68 -# SHA1 Fingerprint: f7:00:34:25:94:88:68:31:e4:34:87:3f:70:fe:86:b3:86:9f:f0:6e -# SHA256 Fingerprint: 9a:e3:62:32:a5:18:9f:fd:db:35:3d:fd:26:52:0c:01:53:95:d2:27:77:da:c5:9d:b5:7b:98:c0:89:a6:51:e6 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBL -MQswCQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UE -AwwYT0lTVEUgU2VydmVyIFJvb3QgUlNBIEcxMB4XDTIzMDUzMTE0MzcxNloXDTQ4 -MDUyNDE0MzcxNVowSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5k -YXRpb24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IFJTQSBHMTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKqu9KuCz/vlNwvn1ZatkOhLKdxVYOPM -vLO8LZK55KN68YG0nnJyQ98/qwsmtO57Gmn7KNByXEptaZnwYx4M0rH/1ow00O7b -rEi56rAUjtgHqSSY3ekJvqgiG1k50SeH3BzN+Puz6+mTeO0Pzjd8JnduodgsIUzk -ik/HEzxux9UTl7Ko2yRpg1bTacuCErudG/L4NPKYKyqOBGf244ehHa1uzjZ0Dl4z -O8vbUZeUapU8zhhabkvG/AePLhq5SvdkNCncpo1Q4Y2LS+VIG24ugBA/5J8bZT8R -tOpXaZ+0AOuFJJkk9SGdl6r7NH8CaxWQrbueWhl/pIzY+m0o/DjH40ytas7ZTpOS -jswMZ78LS5bOZmdTaMsXEY5Z96ycG7mOaES3GK/m5Q9l3JUJsJMStR8+lKXHiHUh -sd4JJCpM4rzsTGdHwimIuQq6+cF0zowYJmXa92/GjHtoXAvuY8BeS/FOzJ8vD+Ho -mnqT8eDI278n5mUpezbgMxVz8p1rhAhoKzYHKyfMeNhqhw5HdPSqoBNdZH702xSu -+zrkL8Fl47l6QGzwBrd7KJvX4V84c5Ss2XCTLdyEr0YconosP4EmQufU2MVshGYR -i3drVByjtdgQ8K4p92cIiBdcuJd5z+orKu5YM+Vt6SmqZQENghPsJQtdLEByFSnT -kCz3GkPVavBpAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU -8snBDw1jALvsRQ5KH7WxszbNDo0wHQYDVR0OBBYEFPLJwQ8NYwC77EUOSh+1sbM2 -zQ6NMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEANGd5sjrG5T33 -I3K5Ce+SrScfoE4KsvXaFwyihdJ+klH9FWXXXGtkFu6KRcoMQzZENdl//nk6HOjG -5D1rd9QhEOP28yBOqb6J8xycqd+8MDoX0TJD0KqKchxRKEzdNsjkLWd9kYccnbz8 -qyiWXmFcuCIzGEgWUOrKL+mlSdx/PKQZvDatkuK59EvV6wit53j+F8Bdh3foZ3dP -AGav9LEDOr4SfEE15fSmG0eLy3n31r8Xbk5l8PjaV8GUgeV6Vg27Rn9vkf195hfk -gSe7BYhW3SCl95gtkRlpMV+bMPKZrXJAlszYd2abtNUOshD+FKrDgHGdPY3ofRRs -YWSGRqbXVMW215AWRqWFyp464+YTFrYVI8ypKVL9AMb2kI5Wj4kI3Zaq5tNqqYY1 -9tVFeEJKRvwDyF7YZvZFZSS0vod7VSCd9521Kvy5YhnLbDuv0204bKt7ph6N/Ome -/msVuduCmsuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3 -J8tRd/iWkx7P8nd9H0aTolkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2 -wq1yVAb+axj5d9spLFKebXd7Yv0PTY6YMjAwcRLWJTXjn/hvnLXrahut6hDTlhZy -BiElxky8j3C7DOReIoMt0r7+hVu05L0= ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno TLS Root CA 2023 O=Microsec Ltd. -# Subject: CN=e-Szigno TLS Root CA 2023 O=Microsec Ltd. -# Label: "e-Szigno TLS Root CA 2023" -# Serial: 71934828665710877219916191754 -# MD5 Fingerprint: 6a:e9:99:74:a5:da:5e:f1:d9:2e:f2:c8:d1:86:8b:71 -# SHA1 Fingerprint: 6f:9a:d5:d5:df:e8:2c:eb:be:37:07:ee:4f:4f:52:58:29:41:d1:fe -# SHA256 Fingerprint: b4:91:41:50:2d:00:66:3d:74:0f:2e:7e:c3:40:c5:28:00:96:26:66:12:1a:36:d0:9c:f7:dd:2b:90:38:4f:b4 ------BEGIN CERTIFICATE----- -MIICzzCCAjGgAwIBAgINAOhvGHvWOWuYSkmYCjAKBggqhkjOPQQDBDB1MQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xFzAVBgNVBGEMDlZBVEhVLTIzNTg0NDk3MSIwIAYDVQQDDBllLVN6aWdubyBU -TFMgUm9vdCBDQSAyMDIzMB4XDTIzMDcxNzE0MDAwMFoXDTM4MDcxNzE0MDAwMFow -dTELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRYwFAYDVQQKDA1NaWNy -b3NlYyBMdGQuMRcwFQYDVQRhDA5WQVRIVS0yMzU4NDQ5NzEiMCAGA1UEAwwZZS1T -emlnbm8gVExTIFJvb3QgQ0EgMjAyMzCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAE -AGgP36J8PKp0iGEKjcJMpQEiFNT3YHdCnAo4YKGMZz6zY+n6kbCLS+Y53wLCMAFS -AL/fjO1ZrTJlqwlZULUZwmgcAOAFX9pQJhzDrAQixTpN7+lXWDajwRlTEArRzT/v -SzUaQ49CE0y5LBqcvjC2xN7cS53kpDzLLtmt3999Cd8ukv+ho2MwYTAPBgNVHRMB -Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUWYQCYlpGePVd3I8K -ECgj3NXW+0UwHwYDVR0jBBgwFoAUWYQCYlpGePVd3I8KECgj3NXW+0UwCgYIKoZI -zj0EAwQDgYsAMIGHAkIBLdqu9S54tma4n7Zwf2Z0z+yOfP7AAXmazlIC58PRDHpt -y7Ve7hekm9sEdu4pKeiv+62sUvTXK9Z3hBC9xdIoaDQCQTV2WnXzkoYI9bIeCvZl -C9p2x1L/Cx6AcCIwwzPbGO2E14vs7dOoY4G1VnxHx1YwlGhza9IuqbnZLBwpvQy6 -uWWL ------END CERTIFICATE----- diff --git a/myenv/lib/python3.12/site-packages/certifi/core.py b/myenv/lib/python3.12/site-packages/certifi/core.py deleted file mode 100644 index 1c9661c..0000000 --- a/myenv/lib/python3.12/site-packages/certifi/core.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem or its contents. -""" -import sys -import atexit - -def exit_cacert_ctx() -> None: - _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] - - -if sys.version_info >= (3, 11): - - from importlib.resources import as_file, files - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the file - # in cases where we're inside of a zipimport situation until someone - # actually calls where(), but we don't want to re-extract the file - # on every call of where(), so we'll do it once then store it in a - # global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you to - # manage the cleanup of this file, so it doesn't actually return a - # path, it returns a context manager that will give you the path - # when you enter it and will do any cleanup when you leave it. In - # the common case of not needing a temporary file, it will just - # return the file system location and the __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") - -else: - - from importlib.resources import path as get_path, read_text - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the - # file in cases where we're inside of a zipimport situation until - # someone actually calls where(), but we don't want to re-extract - # the file on every call of where(), so we'll do it once then store - # it in a global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you - # to manage the cleanup of this file, so it doesn't actually - # return a path, it returns a context manager that will give - # you the path when you enter it and will do any cleanup when - # you leave it. In the common case of not needing a temporary - # file, it will just return the file system location and the - # __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = get_path("certifi", "cacert.pem") - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/myenv/lib/python3.12/site-packages/certifi/py.typed b/myenv/lib/python3.12/site-packages/certifi/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA deleted file mode 100644 index 67508e5..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA +++ /dev/null @@ -1,68 +0,0 @@ -Metadata-Version: 2.4 -Name: cffi -Version: 2.0.0 -Summary: Foreign Function Interface for Python calling C code. -Author: Armin Rigo, Maciej Fijalkowski -Maintainer: Matt Davis, Matt Clay, Matti Picus -License-Expression: MIT -Project-URL: Documentation, https://cffi.readthedocs.io/ -Project-URL: Changelog, https://cffi.readthedocs.io/en/latest/whatsnew.html -Project-URL: Downloads, https://github.com/python-cffi/cffi/releases -Project-URL: Contact, https://groups.google.com/forum/#!forum/python-cffi -Project-URL: Source Code, https://github.com/python-cffi/cffi -Project-URL: Issue Tracker, https://github.com/python-cffi/cffi/issues -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta -Classifier: Programming Language :: Python :: Implementation :: CPython -Requires-Python: >=3.9 -Description-Content-Type: text/markdown -License-File: LICENSE -License-File: AUTHORS -Requires-Dist: pycparser; implementation_name != "PyPy" -Dynamic: license-file - -[![GitHub Actions Status](https://github.com/python-cffi/cffi/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/python-cffi/cffi/actions/workflows/ci.yaml?query=branch%3Amain++) -[![PyPI version](https://img.shields.io/pypi/v/cffi.svg)](https://pypi.org/project/cffi) -[![Read the Docs](https://img.shields.io/badge/docs-latest-blue.svg)][Documentation] - - -CFFI -==== - -Foreign Function Interface for Python calling C code. - -Please see the [Documentation] or uncompiled in the `doc/` subdirectory. - -Download --------- - -[Download page](https://github.com/python-cffi/cffi/releases) - -Source Code ------------ - -Source code is publicly available on -[GitHub](https://github.com/python-cffi/cffi). - -Contact -------- - -[Mailing list](https://groups.google.com/forum/#!forum/python-cffi) - -Testing/development tips ------------------------- - -After `git clone` or `wget && tar`, we will get a directory called `cffi` or `cffi-x.x.x`. we call it `repo-directory`. To run tests under CPython, run the following in the `repo-directory`: - - pip install pytest - pip install -e . # editable install of CFFI for local development - pytest src/c/ testing/ - -[Documentation]: http://cffi.readthedocs.org/ diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD deleted file mode 100644 index 6f82298..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD +++ /dev/null @@ -1,49 +0,0 @@ -_cffi_backend.cpython-312-x86_64-linux-gnu.so,sha256=AGLtw5fn9u4Cmwk3BbGlsXG7VZEvQekABMyEGuRZmcE,348808 -cffi-2.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -cffi-2.0.0.dist-info/METADATA,sha256=uYzn40F68Im8EtXHNBLZs7FoPM-OxzyYbDWsjJvhujk,2559 -cffi-2.0.0.dist-info/RECORD,, -cffi-2.0.0.dist-info/WHEEL,sha256=aSgG0F4rGPZtV0iTEIfy6dtHq6g67Lze3uLfk0vWn88,151 -cffi-2.0.0.dist-info/entry_points.txt,sha256=y6jTxnyeuLnL-XJcDv8uML3n6wyYiGRg8MTp_QGJ9Ho,75 -cffi-2.0.0.dist-info/licenses/AUTHORS,sha256=KmemC7-zN1nWfWRf8TG45ta8TK_CMtdR_Kw-2k0xTMg,208 -cffi-2.0.0.dist-info/licenses/LICENSE,sha256=W6JN3FcGf5JJrdZEw6_EGl1tw34jQz73Wdld83Cwr2M,1123 -cffi-2.0.0.dist-info/top_level.txt,sha256=rE7WR3rZfNKxWI9-jn6hsHCAl7MDkB-FmuQbxWjFehQ,19 -cffi/__init__.py,sha256=-ksBQ7MfDzVvbBlV_ftYBWAmEqfA86ljIzMxzaZeAlI,511 -cffi/__pycache__/__init__.cpython-312.pyc,, -cffi/__pycache__/_imp_emulation.cpython-312.pyc,, -cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc,, -cffi/__pycache__/api.cpython-312.pyc,, -cffi/__pycache__/backend_ctypes.cpython-312.pyc,, -cffi/__pycache__/cffi_opcode.cpython-312.pyc,, -cffi/__pycache__/commontypes.cpython-312.pyc,, -cffi/__pycache__/cparser.cpython-312.pyc,, -cffi/__pycache__/error.cpython-312.pyc,, -cffi/__pycache__/ffiplatform.cpython-312.pyc,, -cffi/__pycache__/lock.cpython-312.pyc,, -cffi/__pycache__/model.cpython-312.pyc,, -cffi/__pycache__/pkgconfig.cpython-312.pyc,, -cffi/__pycache__/recompiler.cpython-312.pyc,, -cffi/__pycache__/setuptools_ext.cpython-312.pyc,, -cffi/__pycache__/vengine_cpy.cpython-312.pyc,, -cffi/__pycache__/vengine_gen.cpython-312.pyc,, -cffi/__pycache__/verifier.cpython-312.pyc,, -cffi/_cffi_errors.h,sha256=zQXt7uR_m8gUW-fI2hJg0KoSkJFwXv8RGUkEDZ177dQ,3908 -cffi/_cffi_include.h,sha256=Exhmgm9qzHWzWivjfTe0D7Xp4rPUkVxdNuwGhMTMzbw,15055 -cffi/_embedding.h,sha256=Ai33FHblE7XSpHOCp8kPcWwN5_9BV14OvN0JVa6ITpw,18786 -cffi/_imp_emulation.py,sha256=RxREG8zAbI2RPGBww90u_5fi8sWdahpdipOoPzkp7C0,2960 -cffi/_shimmed_dist_utils.py,sha256=Bjj2wm8yZbvFvWEx5AEfmqaqZyZFhYfoyLLQHkXZuao,2230 -cffi/api.py,sha256=alBv6hZQkjpmZplBphdaRn2lPO9-CORs_M7ixabvZWI,42169 -cffi/backend_ctypes.py,sha256=h5ZIzLc6BFVXnGyc9xPqZWUS7qGy7yFSDqXe68Sa8z4,42454 -cffi/cffi_opcode.py,sha256=JDV5l0R0_OadBX_uE7xPPTYtMdmpp8I9UYd6av7aiDU,5731 -cffi/commontypes.py,sha256=7N6zPtCFlvxXMWhHV08psUjdYIK2XgsN3yo5dgua_v4,2805 -cffi/cparser.py,sha256=QUTfmlL-aO-MYR8bFGlvAUHc36OQr7XYLe0WLkGFjRo,44790 -cffi/error.py,sha256=v6xTiS4U0kvDcy4h_BDRo5v39ZQuj-IMRYLv5ETddZs,877 -cffi/ffiplatform.py,sha256=avxFjdikYGJoEtmJO7ewVmwG_VEVl6EZ_WaNhZYCqv4,3584 -cffi/lock.py,sha256=l9TTdwMIMpi6jDkJGnQgE9cvTIR7CAntIJr8EGHt3pY,747 -cffi/model.py,sha256=W30UFQZE73jL5Mx5N81YT77us2W2iJjTm0XYfnwz1cg,21797 -cffi/parse_c_type.h,sha256=OdwQfwM9ktq6vlCB43exFQmxDBtj2MBNdK8LYl15tjw,5976 -cffi/pkgconfig.py,sha256=LP1w7vmWvmKwyqLaU1Z243FOWGNQMrgMUZrvgFuOlco,4374 -cffi/recompiler.py,sha256=78J6lMEEOygXNmjN9-fOFFO3j7eW-iFxSrxfvQb54bY,65509 -cffi/setuptools_ext.py,sha256=0rCwBJ1W7FHWtiMKfNXsSST88V8UXrui5oeXFlDNLG8,9411 -cffi/vengine_cpy.py,sha256=oyQKD23kpE0aChUKA8Jg0e723foPiYzLYEdb-J0MiNs,43881 -cffi/vengine_gen.py,sha256=DUlEIrDiVin1Pnhn1sfoamnS5NLqfJcOdhRoeSNeJRg,26939 -cffi/verifier.py,sha256=oX8jpaohg2Qm3aHcznidAdvrVm5N4sQYG0a3Eo5mIl4,11182 diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL deleted file mode 100644 index e21e9f2..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (80.9.0) -Root-Is-Purelib: false -Tag: cp312-cp312-manylinux_2_17_x86_64 -Tag: cp312-cp312-manylinux2014_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt deleted file mode 100644 index 4b0274f..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[distutils.setup_keywords] -cffi_modules = cffi.setuptools_ext:cffi_modules diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS deleted file mode 100644 index 370a25d..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -This package has been mostly done by Armin Rigo with help from -Maciej Fijałkowski. The idea is heavily based (although not directly -copied) from LuaJIT ffi by Mike Pall. - - -Other contributors: - - Google Inc. diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE deleted file mode 100644 index 0a1dbfb..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -Except when otherwise stated (look for LICENSE files in directories or -information at the beginning of each file) all software and -documentation is licensed as follows: - - MIT No Attribution - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the - Software is furnished to do so. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - diff --git a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt deleted file mode 100644 index f645779..0000000 --- a/myenv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -_cffi_backend -cffi diff --git a/myenv/lib/python3.12/site-packages/cffi/__init__.py b/myenv/lib/python3.12/site-packages/cffi/__init__.py deleted file mode 100644 index c99ec3d..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -__all__ = ['FFI', 'VerificationError', 'VerificationMissing', 'CDefError', - 'FFIError'] - -from .api import FFI -from .error import CDefError, FFIError, VerificationError, VerificationMissing -from .error import PkgConfigError - -__version__ = "2.0.0" -__version_info__ = (2, 0, 0) - -# The verifier module file names are based on the CRC32 of a string that -# contains the following version number. It may be older than __version__ -# if nothing is clearly incompatible. -__version_verifier_modules__ = "0.8.6" diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 4e68d3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc deleted file mode 100644 index 9457980..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc deleted file mode 100644 index 99fb81a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc deleted file mode 100644 index b8bd297..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc deleted file mode 100644 index 437d182..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc deleted file mode 100644 index e275fa5..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc deleted file mode 100644 index a0bf36f..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc deleted file mode 100644 index dc525da..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc deleted file mode 100644 index abba113..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc deleted file mode 100644 index 618dd84..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc deleted file mode 100644 index c0d033b..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc deleted file mode 100644 index 02e36da..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc deleted file mode 100644 index 3329149..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc deleted file mode 100644 index 8e7b5de..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc deleted file mode 100644 index 4f5528c..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc deleted file mode 100644 index b60ac03..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc deleted file mode 100644 index 46dd5cb..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc deleted file mode 100644 index 6c7e826..0000000 Binary files a/myenv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cffi/_cffi_errors.h b/myenv/lib/python3.12/site-packages/cffi/_cffi_errors.h deleted file mode 100644 index 158e059..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/_cffi_errors.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef CFFI_MESSAGEBOX -# ifdef _MSC_VER -# define CFFI_MESSAGEBOX 1 -# else -# define CFFI_MESSAGEBOX 0 -# endif -#endif - - -#if CFFI_MESSAGEBOX -/* Windows only: logic to take the Python-CFFI embedding logic - initialization errors and display them in a background thread - with MessageBox. The idea is that if the whole program closes - as a result of this problem, then likely it is already a console - program and you can read the stderr output in the console too. - If it is not a console program, then it will likely show its own - dialog to complain, or generally not abruptly close, and for this - case the background thread should stay alive. -*/ -static void *volatile _cffi_bootstrap_text; - -static PyObject *_cffi_start_error_capture(void) -{ - PyObject *result = NULL; - PyObject *x, *m, *bi; - - if (InterlockedCompareExchangePointer(&_cffi_bootstrap_text, - (void *)1, NULL) != NULL) - return (PyObject *)1; - - m = PyImport_AddModule("_cffi_error_capture"); - if (m == NULL) - goto error; - - result = PyModule_GetDict(m); - if (result == NULL) - goto error; - -#if PY_MAJOR_VERSION >= 3 - bi = PyImport_ImportModule("builtins"); -#else - bi = PyImport_ImportModule("__builtin__"); -#endif - if (bi == NULL) - goto error; - PyDict_SetItemString(result, "__builtins__", bi); - Py_DECREF(bi); - - x = PyRun_String( - "import sys\n" - "class FileLike:\n" - " def write(self, x):\n" - " try:\n" - " of.write(x)\n" - " except: pass\n" - " self.buf += x\n" - " def flush(self):\n" - " pass\n" - "fl = FileLike()\n" - "fl.buf = ''\n" - "of = sys.stderr\n" - "sys.stderr = fl\n" - "def done():\n" - " sys.stderr = of\n" - " return fl.buf\n", /* make sure the returned value stays alive */ - Py_file_input, - result, result); - Py_XDECREF(x); - - error: - if (PyErr_Occurred()) - { - PyErr_WriteUnraisable(Py_None); - PyErr_Clear(); - } - return result; -} - -#pragma comment(lib, "user32.lib") - -static DWORD WINAPI _cffi_bootstrap_dialog(LPVOID ignored) -{ - Sleep(666); /* may be interrupted if the whole process is closing */ -#if PY_MAJOR_VERSION >= 3 - MessageBoxW(NULL, (wchar_t *)_cffi_bootstrap_text, - L"Python-CFFI error", - MB_OK | MB_ICONERROR); -#else - MessageBoxA(NULL, (char *)_cffi_bootstrap_text, - "Python-CFFI error", - MB_OK | MB_ICONERROR); -#endif - _cffi_bootstrap_text = NULL; - return 0; -} - -static void _cffi_stop_error_capture(PyObject *ecap) -{ - PyObject *s; - void *text; - - if (ecap == (PyObject *)1) - return; - - if (ecap == NULL) - goto error; - - s = PyRun_String("done()", Py_eval_input, ecap, ecap); - if (s == NULL) - goto error; - - /* Show a dialog box, but in a background thread, and - never show multiple dialog boxes at once. */ -#if PY_MAJOR_VERSION >= 3 - text = PyUnicode_AsWideCharString(s, NULL); -#else - text = PyString_AsString(s); -#endif - - _cffi_bootstrap_text = text; - - if (text != NULL) - { - HANDLE h; - h = CreateThread(NULL, 0, _cffi_bootstrap_dialog, - NULL, 0, NULL); - if (h != NULL) - CloseHandle(h); - } - /* decref the string, but it should stay alive as 'fl.buf' - in the small module above. It will really be freed only if - we later get another similar error. So it's a leak of at - most one copy of the small module. That's fine for this - situation which is usually a "fatal error" anyway. */ - Py_DECREF(s); - PyErr_Clear(); - return; - - error: - _cffi_bootstrap_text = NULL; - PyErr_Clear(); -} - -#else - -static PyObject *_cffi_start_error_capture(void) { return NULL; } -static void _cffi_stop_error_capture(PyObject *ecap) { } - -#endif diff --git a/myenv/lib/python3.12/site-packages/cffi/_cffi_include.h b/myenv/lib/python3.12/site-packages/cffi/_cffi_include.h deleted file mode 100644 index 908a1d7..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/_cffi_include.h +++ /dev/null @@ -1,389 +0,0 @@ -#define _CFFI_ - -/* We try to define Py_LIMITED_API before including Python.h. - - Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and - Py_REF_DEBUG are not defined. This is a best-effort approximation: - we can learn about Py_DEBUG from pyconfig.h, but it is unclear if - the same works for the other two macros. Py_DEBUG implies them, - but not the other way around. - - The implementation is messy (issue #350): on Windows, with _MSC_VER, - we have to define Py_LIMITED_API even before including pyconfig.h. - In that case, we guess what pyconfig.h will do to the macros above, - and check our guess after the #include. - - Note that on Windows, with CPython 3.x, you need >= 3.5 and virtualenv - version >= 16.0.0. With older versions of either, you don't get a - copy of PYTHON3.DLL in the virtualenv. We can't check the version of - CPython *before* we even include pyconfig.h. ffi.set_source() puts - a ``#define _CFFI_NO_LIMITED_API'' at the start of this file if it is - running on Windows < 3.5, as an attempt at fixing it, but that's - arguably wrong because it may not be the target version of Python. - Still better than nothing I guess. As another workaround, you can - remove the definition of Py_LIMITED_API here. - - See also 'py_limited_api' in cffi/setuptools_ext.py. -*/ -#if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API) -# ifdef _MSC_VER -# if !defined(_DEBUG) && !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) -# define Py_LIMITED_API -# endif -# include - /* sanity-check: Py_LIMITED_API will cause crashes if any of these - are also defined. Normally, the Python file PC/pyconfig.h does not - cause any of these to be defined, with the exception that _DEBUG - causes Py_DEBUG. Double-check that. */ -# ifdef Py_LIMITED_API -# if defined(Py_DEBUG) -# error "pyconfig.h unexpectedly defines Py_DEBUG, but Py_LIMITED_API is set" -# endif -# if defined(Py_TRACE_REFS) -# error "pyconfig.h unexpectedly defines Py_TRACE_REFS, but Py_LIMITED_API is set" -# endif -# if defined(Py_REF_DEBUG) -# error "pyconfig.h unexpectedly defines Py_REF_DEBUG, but Py_LIMITED_API is set" -# endif -# endif -# else -# include -# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) -# define Py_LIMITED_API -# endif -# endif -#endif - -#include -#ifdef __cplusplus -extern "C" { -#endif -#include -#include "parse_c_type.h" - -/* this block of #ifs should be kept exactly identical between - c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py - and cffi/_cffi_include.h */ -#if defined(_MSC_VER) -# include /* for alloca() */ -# if _MSC_VER < 1600 /* MSVC < 2010 */ - typedef __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef __int64 int64_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; - typedef __int8 int_least8_t; - typedef __int16 int_least16_t; - typedef __int32 int_least32_t; - typedef __int64 int_least64_t; - typedef unsigned __int8 uint_least8_t; - typedef unsigned __int16 uint_least16_t; - typedef unsigned __int32 uint_least32_t; - typedef unsigned __int64 uint_least64_t; - typedef __int8 int_fast8_t; - typedef __int16 int_fast16_t; - typedef __int32 int_fast32_t; - typedef __int64 int_fast64_t; - typedef unsigned __int8 uint_fast8_t; - typedef unsigned __int16 uint_fast16_t; - typedef unsigned __int32 uint_fast32_t; - typedef unsigned __int64 uint_fast64_t; - typedef __int64 intmax_t; - typedef unsigned __int64 uintmax_t; -# else -# include -# endif -# if _MSC_VER < 1800 /* MSVC < 2013 */ -# ifndef __cplusplus - typedef unsigned char _Bool; -# endif -# endif -# define _cffi_float_complex_t _Fcomplex /* include for it */ -# define _cffi_double_complex_t _Dcomplex /* include for it */ -#else -# include -# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) -# include -# endif -# define _cffi_float_complex_t float _Complex -# define _cffi_double_complex_t double _Complex -#endif - -#ifdef __GNUC__ -# define _CFFI_UNUSED_FN __attribute__((unused)) -#else -# define _CFFI_UNUSED_FN /* nothing */ -#endif - -#ifdef __cplusplus -# ifndef _Bool - typedef bool _Bool; /* semi-hackish: C++ has no _Bool; bool is builtin */ -# endif -#endif - -/********** CPython-specific section **********/ -#ifndef PYPY_VERSION - - -#if PY_MAJOR_VERSION >= 3 -# define PyInt_FromLong PyLong_FromLong -#endif - -#define _cffi_from_c_double PyFloat_FromDouble -#define _cffi_from_c_float PyFloat_FromDouble -#define _cffi_from_c_long PyInt_FromLong -#define _cffi_from_c_ulong PyLong_FromUnsignedLong -#define _cffi_from_c_longlong PyLong_FromLongLong -#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong -#define _cffi_from_c__Bool PyBool_FromLong - -#define _cffi_to_c_double PyFloat_AsDouble -#define _cffi_to_c_float PyFloat_AsDouble - -#define _cffi_from_c_int(x, type) \ - (((type)-1) > 0 ? /* unsigned */ \ - (sizeof(type) < sizeof(long) ? \ - PyInt_FromLong((long)x) : \ - sizeof(type) == sizeof(long) ? \ - PyLong_FromUnsignedLong((unsigned long)x) : \ - PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ - (sizeof(type) <= sizeof(long) ? \ - PyInt_FromLong((long)x) : \ - PyLong_FromLongLong((long long)x))) - -#define _cffi_to_c_int(o, type) \ - ((type)( \ - sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ - : (type)_cffi_to_c_i8(o)) : \ - sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ - : (type)_cffi_to_c_i16(o)) : \ - sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ - : (type)_cffi_to_c_i32(o)) : \ - sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ - : (type)_cffi_to_c_i64(o)) : \ - (Py_FatalError("unsupported size for type " #type), (type)0))) - -#define _cffi_to_c_i8 \ - ((int(*)(PyObject *))_cffi_exports[1]) -#define _cffi_to_c_u8 \ - ((int(*)(PyObject *))_cffi_exports[2]) -#define _cffi_to_c_i16 \ - ((int(*)(PyObject *))_cffi_exports[3]) -#define _cffi_to_c_u16 \ - ((int(*)(PyObject *))_cffi_exports[4]) -#define _cffi_to_c_i32 \ - ((int(*)(PyObject *))_cffi_exports[5]) -#define _cffi_to_c_u32 \ - ((unsigned int(*)(PyObject *))_cffi_exports[6]) -#define _cffi_to_c_i64 \ - ((long long(*)(PyObject *))_cffi_exports[7]) -#define _cffi_to_c_u64 \ - ((unsigned long long(*)(PyObject *))_cffi_exports[8]) -#define _cffi_to_c_char \ - ((int(*)(PyObject *))_cffi_exports[9]) -#define _cffi_from_c_pointer \ - ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10]) -#define _cffi_to_c_pointer \ - ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11]) -#define _cffi_get_struct_layout \ - not used any more -#define _cffi_restore_errno \ - ((void(*)(void))_cffi_exports[13]) -#define _cffi_save_errno \ - ((void(*)(void))_cffi_exports[14]) -#define _cffi_from_c_char \ - ((PyObject *(*)(char))_cffi_exports[15]) -#define _cffi_from_c_deref \ - ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16]) -#define _cffi_to_c \ - ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17]) -#define _cffi_from_c_struct \ - ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18]) -#define _cffi_to_c_wchar_t \ - ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19]) -#define _cffi_from_c_wchar_t \ - ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20]) -#define _cffi_to_c_long_double \ - ((long double(*)(PyObject *))_cffi_exports[21]) -#define _cffi_to_c__Bool \ - ((_Bool(*)(PyObject *))_cffi_exports[22]) -#define _cffi_prepare_pointer_call_argument \ - ((Py_ssize_t(*)(struct _cffi_ctypedescr *, \ - PyObject *, char **))_cffi_exports[23]) -#define _cffi_convert_array_from_object \ - ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24]) -#define _CFFI_CPIDX 25 -#define _cffi_call_python \ - ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX]) -#define _cffi_to_c_wchar3216_t \ - ((int(*)(PyObject *))_cffi_exports[26]) -#define _cffi_from_c_wchar3216_t \ - ((PyObject *(*)(int))_cffi_exports[27]) -#define _CFFI_NUM_EXPORTS 28 - -struct _cffi_ctypedescr; - -static void *_cffi_exports[_CFFI_NUM_EXPORTS]; - -#define _cffi_type(index) ( \ - assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \ - (struct _cffi_ctypedescr *)_cffi_types[index]) - -static PyObject *_cffi_init(const char *module_name, Py_ssize_t version, - const struct _cffi_type_context_s *ctx) -{ - PyObject *module, *o_arg, *new_module; - void *raw[] = { - (void *)module_name, - (void *)version, - (void *)_cffi_exports, - (void *)ctx, - }; - - module = PyImport_ImportModule("_cffi_backend"); - if (module == NULL) - goto failure; - - o_arg = PyLong_FromVoidPtr((void *)raw); - if (o_arg == NULL) - goto failure; - - new_module = PyObject_CallMethod( - module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg); - - Py_DECREF(o_arg); - Py_DECREF(module); - return new_module; - - failure: - Py_XDECREF(module); - return NULL; -} - - -#ifdef HAVE_WCHAR_H -typedef wchar_t _cffi_wchar_t; -#else -typedef uint16_t _cffi_wchar_t; /* same random pick as _cffi_backend.c */ -#endif - -_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o) -{ - if (sizeof(_cffi_wchar_t) == 2) - return (uint16_t)_cffi_to_c_wchar_t(o); - else - return (uint16_t)_cffi_to_c_wchar3216_t(o); -} - -_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x) -{ - if (sizeof(_cffi_wchar_t) == 2) - return _cffi_from_c_wchar_t((_cffi_wchar_t)x); - else - return _cffi_from_c_wchar3216_t((int)x); -} - -_CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o) -{ - if (sizeof(_cffi_wchar_t) == 4) - return (int)_cffi_to_c_wchar_t(o); - else - return (int)_cffi_to_c_wchar3216_t(o); -} - -_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(unsigned int x) -{ - if (sizeof(_cffi_wchar_t) == 4) - return _cffi_from_c_wchar_t((_cffi_wchar_t)x); - else - return _cffi_from_c_wchar3216_t((int)x); -} - -union _cffi_union_alignment_u { - unsigned char m_char; - unsigned short m_short; - unsigned int m_int; - unsigned long m_long; - unsigned long long m_longlong; - float m_float; - double m_double; - long double m_longdouble; -}; - -struct _cffi_freeme_s { - struct _cffi_freeme_s *next; - union _cffi_union_alignment_u alignment; -}; - -_CFFI_UNUSED_FN static int -_cffi_convert_array_argument(struct _cffi_ctypedescr *ctptr, PyObject *arg, - char **output_data, Py_ssize_t datasize, - struct _cffi_freeme_s **freeme) -{ - char *p; - if (datasize < 0) - return -1; - - p = *output_data; - if (p == NULL) { - struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( - offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); - if (fp == NULL) - return -1; - fp->next = *freeme; - *freeme = fp; - p = *output_data = (char *)&fp->alignment; - } - memset((void *)p, 0, (size_t)datasize); - return _cffi_convert_array_from_object(p, ctptr, arg); -} - -_CFFI_UNUSED_FN static void -_cffi_free_array_arguments(struct _cffi_freeme_s *freeme) -{ - do { - void *p = (void *)freeme; - freeme = freeme->next; - PyObject_Free(p); - } while (freeme != NULL); -} - -/********** end CPython-specific section **********/ -#else -_CFFI_UNUSED_FN -static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *); -# define _cffi_call_python _cffi_call_python_org -#endif - - -#define _cffi_array_len(array) (sizeof(array) / sizeof((array)[0])) - -#define _cffi_prim_int(size, sign) \ - ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8 : _CFFI_PRIM_UINT8) : \ - (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) : \ - (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) : \ - (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) : \ - _CFFI__UNKNOWN_PRIM) - -#define _cffi_prim_float(size) \ - ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT : \ - (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE : \ - (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE : \ - _CFFI__UNKNOWN_FLOAT_PRIM) - -#define _cffi_check_int(got, got_nonpos, expected) \ - ((got_nonpos) == (expected <= 0) && \ - (got) == (unsigned long long)expected) - -#ifdef MS_WIN32 -# define _cffi_stdcall __stdcall -#else -# define _cffi_stdcall /* nothing */ -#endif - -#ifdef __cplusplus -} -#endif diff --git a/myenv/lib/python3.12/site-packages/cffi/_embedding.h b/myenv/lib/python3.12/site-packages/cffi/_embedding.h deleted file mode 100644 index 64c04f6..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/_embedding.h +++ /dev/null @@ -1,550 +0,0 @@ - -/***** Support code for embedding *****/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#if defined(_WIN32) -# define CFFI_DLLEXPORT __declspec(dllexport) -#elif defined(__GNUC__) -# define CFFI_DLLEXPORT __attribute__((visibility("default"))) -#else -# define CFFI_DLLEXPORT /* nothing */ -#endif - - -/* There are two global variables of type _cffi_call_python_fnptr: - - * _cffi_call_python, which we declare just below, is the one called - by ``extern "Python"`` implementations. - - * _cffi_call_python_org, which on CPython is actually part of the - _cffi_exports[] array, is the function pointer copied from - _cffi_backend. If _cffi_start_python() fails, then this is set - to NULL; otherwise, it should never be NULL. - - After initialization is complete, both are equal. However, the - first one remains equal to &_cffi_start_and_call_python until the - very end of initialization, when we are (or should be) sure that - concurrent threads also see a completely initialized world, and - only then is it changed. -*/ -#undef _cffi_call_python -typedef void (*_cffi_call_python_fnptr)(struct _cffi_externpy_s *, char *); -static void _cffi_start_and_call_python(struct _cffi_externpy_s *, char *); -static _cffi_call_python_fnptr _cffi_call_python = &_cffi_start_and_call_python; - - -#ifndef _MSC_VER - /* --- Assuming a GCC not infinitely old --- */ -# define cffi_compare_and_swap(l,o,n) __sync_bool_compare_and_swap(l,o,n) -# define cffi_write_barrier() __sync_synchronize() -# if !defined(__amd64__) && !defined(__x86_64__) && \ - !defined(__i386__) && !defined(__i386) -# define cffi_read_barrier() __sync_synchronize() -# else -# define cffi_read_barrier() (void)0 -# endif -#else - /* --- Windows threads version --- */ -# include -# define cffi_compare_and_swap(l,o,n) \ - (InterlockedCompareExchangePointer(l,n,o) == (o)) -# define cffi_write_barrier() InterlockedCompareExchange(&_cffi_dummy,0,0) -# define cffi_read_barrier() (void)0 -static volatile LONG _cffi_dummy; -#endif - -#ifdef WITH_THREAD -# ifndef _MSC_VER -# include - static pthread_mutex_t _cffi_embed_startup_lock; -# else - static CRITICAL_SECTION _cffi_embed_startup_lock; -# endif - static char _cffi_embed_startup_lock_ready = 0; -#endif - -static void _cffi_acquire_reentrant_mutex(void) -{ - static void *volatile lock = NULL; - - while (!cffi_compare_and_swap(&lock, NULL, (void *)1)) { - /* should ideally do a spin loop instruction here, but - hard to do it portably and doesn't really matter I - think: pthread_mutex_init() should be very fast, and - this is only run at start-up anyway. */ - } - -#ifdef WITH_THREAD - if (!_cffi_embed_startup_lock_ready) { -# ifndef _MSC_VER - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&_cffi_embed_startup_lock, &attr); -# else - InitializeCriticalSection(&_cffi_embed_startup_lock); -# endif - _cffi_embed_startup_lock_ready = 1; - } -#endif - - while (!cffi_compare_and_swap(&lock, (void *)1, NULL)) - ; - -#ifndef _MSC_VER - pthread_mutex_lock(&_cffi_embed_startup_lock); -#else - EnterCriticalSection(&_cffi_embed_startup_lock); -#endif -} - -static void _cffi_release_reentrant_mutex(void) -{ -#ifndef _MSC_VER - pthread_mutex_unlock(&_cffi_embed_startup_lock); -#else - LeaveCriticalSection(&_cffi_embed_startup_lock); -#endif -} - - -/********** CPython-specific section **********/ -#ifndef PYPY_VERSION - -#include "_cffi_errors.h" - - -#define _cffi_call_python_org _cffi_exports[_CFFI_CPIDX] - -PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(void); /* forward */ - -static void _cffi_py_initialize(void) -{ - /* XXX use initsigs=0, which "skips initialization registration of - signal handlers, which might be useful when Python is - embedded" according to the Python docs. But review and think - if it should be a user-controllable setting. - - XXX we should also give a way to write errors to a buffer - instead of to stderr. - - XXX if importing 'site' fails, CPython (any version) calls - exit(). Should we try to work around this behavior here? - */ - Py_InitializeEx(0); -} - -static int _cffi_initialize_python(void) -{ - /* This initializes Python, imports _cffi_backend, and then the - present .dll/.so is set up as a CPython C extension module. - */ - int result; - PyGILState_STATE state; - PyObject *pycode=NULL, *global_dict=NULL, *x; - PyObject *builtins; - - state = PyGILState_Ensure(); - - /* Call the initxxx() function from the present module. It will - create and initialize us as a CPython extension module, instead - of letting the startup Python code do it---it might reimport - the same .dll/.so and get maybe confused on some platforms. - It might also have troubles locating the .dll/.so again for all - I know. - */ - (void)_CFFI_PYTHON_STARTUP_FUNC(); - if (PyErr_Occurred()) - goto error; - - /* Now run the Python code provided to ffi.embedding_init_code(). - */ - pycode = Py_CompileString(_CFFI_PYTHON_STARTUP_CODE, - "", - Py_file_input); - if (pycode == NULL) - goto error; - global_dict = PyDict_New(); - if (global_dict == NULL) - goto error; - builtins = PyEval_GetBuiltins(); - if (builtins == NULL) - goto error; - if (PyDict_SetItemString(global_dict, "__builtins__", builtins) < 0) - goto error; - x = PyEval_EvalCode( -#if PY_MAJOR_VERSION < 3 - (PyCodeObject *) -#endif - pycode, global_dict, global_dict); - if (x == NULL) - goto error; - Py_DECREF(x); - - /* Done! Now if we've been called from - _cffi_start_and_call_python() in an ``extern "Python"``, we can - only hope that the Python code did correctly set up the - corresponding @ffi.def_extern() function. Otherwise, the - general logic of ``extern "Python"`` functions (inside the - _cffi_backend module) will find that the reference is still - missing and print an error. - */ - result = 0; - done: - Py_XDECREF(pycode); - Py_XDECREF(global_dict); - PyGILState_Release(state); - return result; - - error:; - { - /* Print as much information as potentially useful. - Debugging load-time failures with embedding is not fun - */ - PyObject *ecap; - PyObject *exception, *v, *tb, *f, *modules, *mod; - PyErr_Fetch(&exception, &v, &tb); - ecap = _cffi_start_error_capture(); - f = PySys_GetObject((char *)"stderr"); - if (f != NULL && f != Py_None) { - PyFile_WriteString( - "Failed to initialize the Python-CFFI embedding logic:\n\n", f); - } - - if (exception != NULL) { - PyErr_NormalizeException(&exception, &v, &tb); - PyErr_Display(exception, v, tb); - } - Py_XDECREF(exception); - Py_XDECREF(v); - Py_XDECREF(tb); - - if (f != NULL && f != Py_None) { - PyFile_WriteString("\nFrom: " _CFFI_MODULE_NAME - "\ncompiled with cffi version: 2.0.0" - "\n_cffi_backend module: ", f); - modules = PyImport_GetModuleDict(); - mod = PyDict_GetItemString(modules, "_cffi_backend"); - if (mod == NULL) { - PyFile_WriteString("not loaded", f); - } - else { - v = PyObject_GetAttrString(mod, "__file__"); - PyFile_WriteObject(v, f, 0); - Py_XDECREF(v); - } - PyFile_WriteString("\nsys.path: ", f); - PyFile_WriteObject(PySys_GetObject((char *)"path"), f, 0); - PyFile_WriteString("\n\n", f); - } - _cffi_stop_error_capture(ecap); - } - result = -1; - goto done; -} - -#if PY_VERSION_HEX < 0x03080000 -PyAPI_DATA(char *) _PyParser_TokenNames[]; /* from CPython */ -#endif - -static int _cffi_carefully_make_gil(void) -{ - /* This does the basic initialization of Python. It can be called - completely concurrently from unrelated threads. It assumes - that we don't hold the GIL before (if it exists), and we don't - hold it afterwards. - - (What it really does used to be completely different in Python 2 - and Python 3, with the Python 2 solution avoiding the spin-lock - around the Py_InitializeEx() call. However, after recent changes - to CPython 2.7 (issue #358) it no longer works. So we use the - Python 3 solution everywhere.) - - This initializes Python by calling Py_InitializeEx(). - Important: this must not be called concurrently at all. - So we use a global variable as a simple spin lock. This global - variable must be from 'libpythonX.Y.so', not from this - cffi-based extension module, because it must be shared from - different cffi-based extension modules. - - In Python < 3.8, we choose - _PyParser_TokenNames[0] as a completely arbitrary pointer value - that is never written to. The default is to point to the - string "ENDMARKER". We change it temporarily to point to the - next character in that string. (Yes, I know it's REALLY - obscure.) - - In Python >= 3.8, this string array is no longer writable, so - instead we pick PyCapsuleType.tp_version_tag. We can't change - Python < 3.8 because someone might use a mixture of cffi - embedded modules, some of which were compiled before this file - changed. - - In Python >= 3.12, this stopped working because that particular - tp_version_tag gets modified during interpreter startup. It's - arguably a bad idea before 3.12 too, but again we can't change - that because someone might use a mixture of cffi embedded - modules, and no-one reported a bug so far. In Python >= 3.12 - we go instead for PyCapsuleType.tp_as_buffer, which is supposed - to always be NULL. We write to it temporarily a pointer to - a struct full of NULLs, which is semantically the same. - */ - -#ifdef WITH_THREAD -# if PY_VERSION_HEX < 0x03080000 - char *volatile *lock = (char *volatile *)_PyParser_TokenNames; - char *old_value, *locked_value; - - while (1) { /* spin loop */ - old_value = *lock; - locked_value = old_value + 1; - if (old_value[0] == 'E') { - assert(old_value[1] == 'N'); - if (cffi_compare_and_swap(lock, old_value, locked_value)) - break; - } - else { - assert(old_value[0] == 'N'); - /* should ideally do a spin loop instruction here, but - hard to do it portably and doesn't really matter I - think: PyEval_InitThreads() should be very fast, and - this is only run at start-up anyway. */ - } - } -# else -# if PY_VERSION_HEX < 0x030C0000 - int volatile *lock = (int volatile *)&PyCapsule_Type.tp_version_tag; - int old_value, locked_value = -42; - assert(!(PyCapsule_Type.tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG)); -# else - static struct ebp_s { PyBufferProcs buf; int mark; } empty_buffer_procs; - empty_buffer_procs.mark = -42; - PyBufferProcs *volatile *lock = (PyBufferProcs *volatile *) - &PyCapsule_Type.tp_as_buffer; - PyBufferProcs *old_value, *locked_value = &empty_buffer_procs.buf; -# endif - - while (1) { /* spin loop */ - old_value = *lock; - if (old_value == 0) { - if (cffi_compare_and_swap(lock, old_value, locked_value)) - break; - } - else { -# if PY_VERSION_HEX < 0x030C0000 - assert(old_value == locked_value); -# else - /* The pointer should point to a possibly different - empty_buffer_procs from another C extension module */ - assert(((struct ebp_s *)old_value)->mark == -42); -# endif - /* should ideally do a spin loop instruction here, but - hard to do it portably and doesn't really matter I - think: PyEval_InitThreads() should be very fast, and - this is only run at start-up anyway. */ - } - } -# endif -#endif - - /* call Py_InitializeEx() */ - if (!Py_IsInitialized()) { - _cffi_py_initialize(); -#if PY_VERSION_HEX < 0x03070000 - PyEval_InitThreads(); -#endif - PyEval_SaveThread(); /* release the GIL */ - /* the returned tstate must be the one that has been stored into the - autoTLSkey by _PyGILState_Init() called from Py_Initialize(). */ - } - else { -#if PY_VERSION_HEX < 0x03070000 - /* PyEval_InitThreads() is always a no-op from CPython 3.7 */ - PyGILState_STATE state = PyGILState_Ensure(); - PyEval_InitThreads(); - PyGILState_Release(state); -#endif - } - -#ifdef WITH_THREAD - /* release the lock */ - while (!cffi_compare_and_swap(lock, locked_value, old_value)) - ; -#endif - - return 0; -} - -/********** end CPython-specific section **********/ - - -#else - - -/********** PyPy-specific section **********/ - -PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(const void *[]); /* forward */ - -static struct _cffi_pypy_init_s { - const char *name; - void *func; /* function pointer */ - const char *code; -} _cffi_pypy_init = { - _CFFI_MODULE_NAME, - _CFFI_PYTHON_STARTUP_FUNC, - _CFFI_PYTHON_STARTUP_CODE, -}; - -extern int pypy_carefully_make_gil(const char *); -extern int pypy_init_embedded_cffi_module(int, struct _cffi_pypy_init_s *); - -static int _cffi_carefully_make_gil(void) -{ - return pypy_carefully_make_gil(_CFFI_MODULE_NAME); -} - -static int _cffi_initialize_python(void) -{ - return pypy_init_embedded_cffi_module(0xB011, &_cffi_pypy_init); -} - -/********** end PyPy-specific section **********/ - - -#endif - - -#ifdef __GNUC__ -__attribute__((noinline)) -#endif -static _cffi_call_python_fnptr _cffi_start_python(void) -{ - /* Delicate logic to initialize Python. This function can be - called multiple times concurrently, e.g. when the process calls - its first ``extern "Python"`` functions in multiple threads at - once. It can also be called recursively, in which case we must - ignore it. We also have to consider what occurs if several - different cffi-based extensions reach this code in parallel - threads---it is a different copy of the code, then, and we - can't have any shared global variable unless it comes from - 'libpythonX.Y.so'. - - Idea: - - * _cffi_carefully_make_gil(): "carefully" call - PyEval_InitThreads() (possibly with Py_InitializeEx() first). - - * then we use a (local) custom lock to make sure that a call to this - cffi-based extension will wait if another call to the *same* - extension is running the initialization in another thread. - It is reentrant, so that a recursive call will not block, but - only one from a different thread. - - * then we grab the GIL and (Python 2) we call Py_InitializeEx(). - At this point, concurrent calls to Py_InitializeEx() are not - possible: we have the GIL. - - * do the rest of the specific initialization, which may - temporarily release the GIL but not the custom lock. - Only release the custom lock when we are done. - */ - static char called = 0; - - if (_cffi_carefully_make_gil() != 0) - return NULL; - - _cffi_acquire_reentrant_mutex(); - - /* Here the GIL exists, but we don't have it. We're only protected - from concurrency by the reentrant mutex. */ - - /* This file only initializes the embedded module once, the first - time this is called, even if there are subinterpreters. */ - if (!called) { - called = 1; /* invoke _cffi_initialize_python() only once, - but don't set '_cffi_call_python' right now, - otherwise concurrent threads won't call - this function at all (we need them to wait) */ - if (_cffi_initialize_python() == 0) { - /* now initialization is finished. Switch to the fast-path. */ - - /* We would like nobody to see the new value of - '_cffi_call_python' without also seeing the rest of the - data initialized. However, this is not possible. But - the new value of '_cffi_call_python' is the function - 'cffi_call_python()' from _cffi_backend. So: */ - cffi_write_barrier(); - /* ^^^ we put a write barrier here, and a corresponding - read barrier at the start of cffi_call_python(). This - ensures that after that read barrier, we see everything - done here before the write barrier. - */ - - assert(_cffi_call_python_org != NULL); - _cffi_call_python = (_cffi_call_python_fnptr)_cffi_call_python_org; - } - else { - /* initialization failed. Reset this to NULL, even if it was - already set to some other value. Future calls to - _cffi_start_python() are still forced to occur, and will - always return NULL from now on. */ - _cffi_call_python_org = NULL; - } - } - - _cffi_release_reentrant_mutex(); - - return (_cffi_call_python_fnptr)_cffi_call_python_org; -} - -static -void _cffi_start_and_call_python(struct _cffi_externpy_s *externpy, char *args) -{ - _cffi_call_python_fnptr fnptr; - int current_err = errno; -#ifdef _MSC_VER - int current_lasterr = GetLastError(); -#endif - fnptr = _cffi_start_python(); - if (fnptr == NULL) { - fprintf(stderr, "function %s() called, but initialization code " - "failed. Returning 0.\n", externpy->name); - memset(args, 0, externpy->size_of_result); - } -#ifdef _MSC_VER - SetLastError(current_lasterr); -#endif - errno = current_err; - - if (fnptr != NULL) - fnptr(externpy, args); -} - - -/* The cffi_start_python() function makes sure Python is initialized - and our cffi module is set up. It can be called manually from the - user C code. The same effect is obtained automatically from any - dll-exported ``extern "Python"`` function. This function returns - -1 if initialization failed, 0 if all is OK. */ -_CFFI_UNUSED_FN -static int cffi_start_python(void) -{ - if (_cffi_call_python == &_cffi_start_and_call_python) { - if (_cffi_start_python() == NULL) - return -1; - } - cffi_read_barrier(); - return 0; -} - -#undef cffi_compare_and_swap -#undef cffi_write_barrier -#undef cffi_read_barrier - -#ifdef __cplusplus -} -#endif diff --git a/myenv/lib/python3.12/site-packages/cffi/_imp_emulation.py b/myenv/lib/python3.12/site-packages/cffi/_imp_emulation.py deleted file mode 100644 index 136abdd..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/_imp_emulation.py +++ /dev/null @@ -1,83 +0,0 @@ - -try: - # this works on Python < 3.12 - from imp import * - -except ImportError: - # this is a limited emulation for Python >= 3.12. - # Note that this is used only for tests or for the old ffi.verify(). - # This is copied from the source code of Python 3.11. - - from _imp import (acquire_lock, release_lock, - is_builtin, is_frozen) - - from importlib._bootstrap import _load - - from importlib import machinery - import os - import sys - import tokenize - - SEARCH_ERROR = 0 - PY_SOURCE = 1 - PY_COMPILED = 2 - C_EXTENSION = 3 - PY_RESOURCE = 4 - PKG_DIRECTORY = 5 - C_BUILTIN = 6 - PY_FROZEN = 7 - PY_CODERESOURCE = 8 - IMP_HOOK = 9 - - def get_suffixes(): - extensions = [(s, 'rb', C_EXTENSION) - for s in machinery.EXTENSION_SUFFIXES] - source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] - bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] - return extensions + source + bytecode - - def find_module(name, path=None): - if not isinstance(name, str): - raise TypeError("'name' must be a str, not {}".format(type(name))) - elif not isinstance(path, (type(None), list)): - # Backwards-compatibility - raise RuntimeError("'path' must be None or a list, " - "not {}".format(type(path))) - - if path is None: - if is_builtin(name): - return None, None, ('', '', C_BUILTIN) - elif is_frozen(name): - return None, None, ('', '', PY_FROZEN) - else: - path = sys.path - - for entry in path: - package_directory = os.path.join(entry, name) - for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: - package_file_name = '__init__' + suffix - file_path = os.path.join(package_directory, package_file_name) - if os.path.isfile(file_path): - return None, package_directory, ('', '', PKG_DIRECTORY) - for suffix, mode, type_ in get_suffixes(): - file_name = name + suffix - file_path = os.path.join(entry, file_name) - if os.path.isfile(file_path): - break - else: - continue - break # Break out of outer loop when breaking out of inner loop. - else: - raise ImportError(name, name=name) - - encoding = None - if 'b' not in mode: - with open(file_path, 'rb') as file: - encoding = tokenize.detect_encoding(file.readline)[0] - file = open(file_path, mode, encoding=encoding) - return file, file_path, (suffix, mode, type_) - - def load_dynamic(name, path, file=None): - loader = machinery.ExtensionFileLoader(name, path) - spec = machinery.ModuleSpec(name=name, loader=loader, origin=path) - return _load(spec) diff --git a/myenv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py b/myenv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py deleted file mode 100644 index c3d2312..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Temporary shim module to indirect the bits of distutils we need from setuptools/distutils while providing useful -error messages beyond `No module named 'distutils' on Python >= 3.12, or when setuptools' vendored distutils is broken. - -This is a compromise to avoid a hard-dep on setuptools for Python >= 3.12, since many users don't need runtime compilation support from CFFI. -""" -import sys - -try: - # import setuptools first; this is the most robust way to ensure its embedded distutils is available - # (the .pth shim should usually work, but this is even more robust) - import setuptools -except Exception as ex: - if sys.version_info >= (3, 12): - # Python 3.12 has no built-in distutils to fall back on, so any import problem is fatal - raise Exception("This CFFI feature requires setuptools on Python >= 3.12. The setuptools module is missing or non-functional.") from ex - - # silently ignore on older Pythons (support fallback to stdlib distutils where available) -else: - del setuptools - -try: - # bring in just the bits of distutils we need, whether they really came from setuptools or stdlib-embedded distutils - from distutils import log, sysconfig - from distutils.ccompiler import CCompiler - from distutils.command.build_ext import build_ext - from distutils.core import Distribution, Extension - from distutils.dir_util import mkpath - from distutils.errors import DistutilsSetupError, CompileError, LinkError - from distutils.log import set_threshold, set_verbosity - - if sys.platform == 'win32': - try: - # FUTURE: msvc9compiler module was removed in setuptools 74; consider removing, as it's only used by an ancient patch in `recompiler` - from distutils.msvc9compiler import MSVCCompiler - except ImportError: - MSVCCompiler = None -except Exception as ex: - if sys.version_info >= (3, 12): - raise Exception("This CFFI feature requires setuptools on Python >= 3.12. Please install the setuptools package.") from ex - - # anything older, just let the underlying distutils import error fly - raise Exception("This CFFI feature requires distutils. Please install the distutils or setuptools package.") from ex - -del sys diff --git a/myenv/lib/python3.12/site-packages/cffi/api.py b/myenv/lib/python3.12/site-packages/cffi/api.py deleted file mode 100644 index 5a474f3..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/api.py +++ /dev/null @@ -1,967 +0,0 @@ -import sys, types -from .lock import allocate_lock -from .error import CDefError -from . import model - -try: - callable -except NameError: - # Python 3.1 - from collections import Callable - callable = lambda x: isinstance(x, Callable) - -try: - basestring -except NameError: - # Python 3.x - basestring = str - -_unspecified = object() - - - -class FFI(object): - r''' - The main top-level class that you instantiate once, or once per module. - - Example usage: - - ffi = FFI() - ffi.cdef(""" - int printf(const char *, ...); - """) - - C = ffi.dlopen(None) # standard library - -or- - C = ffi.verify() # use a C compiler: verify the decl above is right - - C.printf("hello, %s!\n", ffi.new("char[]", "world")) - ''' - - def __init__(self, backend=None): - """Create an FFI instance. The 'backend' argument is used to - select a non-default backend, mostly for tests. - """ - if backend is None: - # You need PyPy (>= 2.0 beta), or a CPython (>= 2.6) with - # _cffi_backend.so compiled. - import _cffi_backend as backend - from . import __version__ - if backend.__version__ != __version__: - # bad version! Try to be as explicit as possible. - if hasattr(backend, '__file__'): - # CPython - raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. When we import the top-level '_cffi_backend' extension module, we get version %s, located in %r. The two versions should be equal; check your installation." % ( - __version__, __file__, - backend.__version__, backend.__file__)) - else: - # PyPy - raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. This interpreter comes with a built-in '_cffi_backend' module, which is version %s. The two versions should be equal; check your installation." % ( - __version__, __file__, backend.__version__)) - # (If you insist you can also try to pass the option - # 'backend=backend_ctypes.CTypesBackend()', but don't - # rely on it! It's probably not going to work well.) - - from . import cparser - self._backend = backend - self._lock = allocate_lock() - self._parser = cparser.Parser() - self._cached_btypes = {} - self._parsed_types = types.ModuleType('parsed_types').__dict__ - self._new_types = types.ModuleType('new_types').__dict__ - self._function_caches = [] - self._libraries = [] - self._cdefsources = [] - self._included_ffis = [] - self._windows_unicode = None - self._init_once_cache = {} - self._cdef_version = None - self._embedding = None - self._typecache = model.get_typecache(backend) - if hasattr(backend, 'set_ffi'): - backend.set_ffi(self) - for name in list(backend.__dict__): - if name.startswith('RTLD_'): - setattr(self, name, getattr(backend, name)) - # - with self._lock: - self.BVoidP = self._get_cached_btype(model.voidp_type) - self.BCharA = self._get_cached_btype(model.char_array_type) - if isinstance(backend, types.ModuleType): - # _cffi_backend: attach these constants to the class - if not hasattr(FFI, 'NULL'): - FFI.NULL = self.cast(self.BVoidP, 0) - FFI.CData, FFI.CType = backend._get_types() - else: - # ctypes backend: attach these constants to the instance - self.NULL = self.cast(self.BVoidP, 0) - self.CData, self.CType = backend._get_types() - self.buffer = backend.buffer - - def cdef(self, csource, override=False, packed=False, pack=None): - """Parse the given C source. This registers all declared functions, - types, and global variables. The functions and global variables can - then be accessed via either 'ffi.dlopen()' or 'ffi.verify()'. - The types can be used in 'ffi.new()' and other functions. - If 'packed' is specified as True, all structs declared inside this - cdef are packed, i.e. laid out without any field alignment at all. - Alternatively, 'pack' can be a small integer, and requests for - alignment greater than that are ignored (pack=1 is equivalent to - packed=True). - """ - self._cdef(csource, override=override, packed=packed, pack=pack) - - def embedding_api(self, csource, packed=False, pack=None): - self._cdef(csource, packed=packed, pack=pack, dllexport=True) - if self._embedding is None: - self._embedding = '' - - def _cdef(self, csource, override=False, **options): - if not isinstance(csource, str): # unicode, on Python 2 - if not isinstance(csource, basestring): - raise TypeError("cdef() argument must be a string") - csource = csource.encode('ascii') - with self._lock: - self._cdef_version = object() - self._parser.parse(csource, override=override, **options) - self._cdefsources.append(csource) - if override: - for cache in self._function_caches: - cache.clear() - finishlist = self._parser._recomplete - if finishlist: - self._parser._recomplete = [] - for tp in finishlist: - tp.finish_backend_type(self, finishlist) - - def dlopen(self, name, flags=0): - """Load and return a dynamic library identified by 'name'. - The standard C library can be loaded by passing None. - Note that functions and types declared by 'ffi.cdef()' are not - linked to a particular library, just like C headers; in the - library we only look for the actual (untyped) symbols. - """ - if not (isinstance(name, basestring) or - name is None or - isinstance(name, self.CData)): - raise TypeError("dlopen(name): name must be a file name, None, " - "or an already-opened 'void *' handle") - with self._lock: - lib, function_cache = _make_ffi_library(self, name, flags) - self._function_caches.append(function_cache) - self._libraries.append(lib) - return lib - - def dlclose(self, lib): - """Close a library obtained with ffi.dlopen(). After this call, - access to functions or variables from the library will fail - (possibly with a segmentation fault). - """ - type(lib).__cffi_close__(lib) - - def _typeof_locked(self, cdecl): - # call me with the lock! - key = cdecl - if key in self._parsed_types: - return self._parsed_types[key] - # - if not isinstance(cdecl, str): # unicode, on Python 2 - cdecl = cdecl.encode('ascii') - # - type = self._parser.parse_type(cdecl) - really_a_function_type = type.is_raw_function - if really_a_function_type: - type = type.as_function_pointer() - btype = self._get_cached_btype(type) - result = btype, really_a_function_type - self._parsed_types[key] = result - return result - - def _typeof(self, cdecl, consider_function_as_funcptr=False): - # string -> ctype object - try: - result = self._parsed_types[cdecl] - except KeyError: - with self._lock: - result = self._typeof_locked(cdecl) - # - btype, really_a_function_type = result - if really_a_function_type and not consider_function_as_funcptr: - raise CDefError("the type %r is a function type, not a " - "pointer-to-function type" % (cdecl,)) - return btype - - def typeof(self, cdecl): - """Parse the C type given as a string and return the - corresponding object. - It can also be used on 'cdata' instance to get its C type. - """ - if isinstance(cdecl, basestring): - return self._typeof(cdecl) - if isinstance(cdecl, self.CData): - return self._backend.typeof(cdecl) - if isinstance(cdecl, types.BuiltinFunctionType): - res = _builtin_function_type(cdecl) - if res is not None: - return res - if (isinstance(cdecl, types.FunctionType) - and hasattr(cdecl, '_cffi_base_type')): - with self._lock: - return self._get_cached_btype(cdecl._cffi_base_type) - raise TypeError(type(cdecl)) - - def sizeof(self, cdecl): - """Return the size in bytes of the argument. It can be a - string naming a C type, or a 'cdata' instance. - """ - if isinstance(cdecl, basestring): - BType = self._typeof(cdecl) - return self._backend.sizeof(BType) - else: - return self._backend.sizeof(cdecl) - - def alignof(self, cdecl): - """Return the natural alignment size in bytes of the C type - given as a string. - """ - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return self._backend.alignof(cdecl) - - def offsetof(self, cdecl, *fields_or_indexes): - """Return the offset of the named field inside the given - structure or array, which must be given as a C type name. - You can give several field names in case of nested structures. - You can also give numeric values which correspond to array - items, in case of an array type. - """ - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return self._typeoffsetof(cdecl, *fields_or_indexes)[1] - - def new(self, cdecl, init=None): - """Allocate an instance according to the specified C type and - return a pointer to it. The specified C type must be either a - pointer or an array: ``new('X *')`` allocates an X and returns - a pointer to it, whereas ``new('X[n]')`` allocates an array of - n X'es and returns an array referencing it (which works - mostly like a pointer, like in C). You can also use - ``new('X[]', n)`` to allocate an array of a non-constant - length n. - - The memory is initialized following the rules of declaring a - global variable in C: by default it is zero-initialized, but - an explicit initializer can be given which can be used to - fill all or part of the memory. - - When the returned object goes out of scope, the memory - is freed. In other words the returned object has - ownership of the value of type 'cdecl' that it points to. This - means that the raw data can be used as long as this object is - kept alive, but must not be used for a longer time. Be careful - about that when copying the pointer to the memory somewhere - else, e.g. into another structure. - """ - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return self._backend.newp(cdecl, init) - - def new_allocator(self, alloc=None, free=None, - should_clear_after_alloc=True): - """Return a new allocator, i.e. a function that behaves like ffi.new() - but uses the provided low-level 'alloc' and 'free' functions. - - 'alloc' is called with the size as argument. If it returns NULL, a - MemoryError is raised. 'free' is called with the result of 'alloc' - as argument. Both can be either Python function or directly C - functions. If 'free' is None, then no free function is called. - If both 'alloc' and 'free' are None, the default is used. - - If 'should_clear_after_alloc' is set to False, then the memory - returned by 'alloc' is assumed to be already cleared (or you are - fine with garbage); otherwise CFFI will clear it. - """ - compiled_ffi = self._backend.FFI() - allocator = compiled_ffi.new_allocator(alloc, free, - should_clear_after_alloc) - def allocate(cdecl, init=None): - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return allocator(cdecl, init) - return allocate - - def cast(self, cdecl, source): - """Similar to a C cast: returns an instance of the named C - type initialized with the given 'source'. The source is - casted between integers or pointers of any type. - """ - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return self._backend.cast(cdecl, source) - - def string(self, cdata, maxlen=-1): - """Return a Python string (or unicode string) from the 'cdata'. - If 'cdata' is a pointer or array of characters or bytes, returns - the null-terminated string. The returned string extends until - the first null character, or at most 'maxlen' characters. If - 'cdata' is an array then 'maxlen' defaults to its length. - - If 'cdata' is a pointer or array of wchar_t, returns a unicode - string following the same rules. - - If 'cdata' is a single character or byte or a wchar_t, returns - it as a string or unicode string. - - If 'cdata' is an enum, returns the value of the enumerator as a - string, or 'NUMBER' if the value is out of range. - """ - return self._backend.string(cdata, maxlen) - - def unpack(self, cdata, length): - """Unpack an array of C data of the given length, - returning a Python string/unicode/list. - - If 'cdata' is a pointer to 'char', returns a byte string. - It does not stop at the first null. This is equivalent to: - ffi.buffer(cdata, length)[:] - - If 'cdata' is a pointer to 'wchar_t', returns a unicode string. - 'length' is measured in wchar_t's; it is not the size in bytes. - - If 'cdata' is a pointer to anything else, returns a list of - 'length' items. This is a faster equivalent to: - [cdata[i] for i in range(length)] - """ - return self._backend.unpack(cdata, length) - - #def buffer(self, cdata, size=-1): - # """Return a read-write buffer object that references the raw C data - # pointed to by the given 'cdata'. The 'cdata' must be a pointer or - # an array. Can be passed to functions expecting a buffer, or directly - # manipulated with: - # - # buf[:] get a copy of it in a regular string, or - # buf[idx] as a single character - # buf[:] = ... - # buf[idx] = ... change the content - # """ - # note that 'buffer' is a type, set on this instance by __init__ - - def from_buffer(self, cdecl, python_buffer=_unspecified, - require_writable=False): - """Return a cdata of the given type pointing to the data of the - given Python object, which must support the buffer interface. - Note that this is not meant to be used on the built-in types - str or unicode (you can build 'char[]' arrays explicitly) - but only on objects containing large quantities of raw data - in some other format, like 'array.array' or numpy arrays. - - The first argument is optional and default to 'char[]'. - """ - if python_buffer is _unspecified: - cdecl, python_buffer = self.BCharA, cdecl - elif isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - return self._backend.from_buffer(cdecl, python_buffer, - require_writable) - - def memmove(self, dest, src, n): - """ffi.memmove(dest, src, n) copies n bytes of memory from src to dest. - - Like the C function memmove(), the memory areas may overlap; - apart from that it behaves like the C function memcpy(). - - 'src' can be any cdata ptr or array, or any Python buffer object. - 'dest' can be any cdata ptr or array, or a writable Python buffer - object. The size to copy, 'n', is always measured in bytes. - - Unlike other methods, this one supports all Python buffer including - byte strings and bytearrays---but it still does not support - non-contiguous buffers. - """ - return self._backend.memmove(dest, src, n) - - def callback(self, cdecl, python_callable=None, error=None, onerror=None): - """Return a callback object or a decorator making such a - callback object. 'cdecl' must name a C function pointer type. - The callback invokes the specified 'python_callable' (which may - be provided either directly or via a decorator). Important: the - callback object must be manually kept alive for as long as the - callback may be invoked from the C level. - """ - def callback_decorator_wrap(python_callable): - if not callable(python_callable): - raise TypeError("the 'python_callable' argument " - "is not callable") - return self._backend.callback(cdecl, python_callable, - error, onerror) - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl, consider_function_as_funcptr=True) - if python_callable is None: - return callback_decorator_wrap # decorator mode - else: - return callback_decorator_wrap(python_callable) # direct mode - - def getctype(self, cdecl, replace_with=''): - """Return a string giving the C type 'cdecl', which may be itself - a string or a object. If 'replace_with' is given, it gives - extra text to append (or insert for more complicated C types), like - a variable name, or '*' to get actually the C type 'pointer-to-cdecl'. - """ - if isinstance(cdecl, basestring): - cdecl = self._typeof(cdecl) - replace_with = replace_with.strip() - if (replace_with.startswith('*') - and '&[' in self._backend.getcname(cdecl, '&')): - replace_with = '(%s)' % replace_with - elif replace_with and not replace_with[0] in '[(': - replace_with = ' ' + replace_with - return self._backend.getcname(cdecl, replace_with) - - def gc(self, cdata, destructor, size=0): - """Return a new cdata object that points to the same - data. Later, when this new cdata object is garbage-collected, - 'destructor(old_cdata_object)' will be called. - - The optional 'size' gives an estimate of the size, used to - trigger the garbage collection more eagerly. So far only used - on PyPy. It tells the GC that the returned object keeps alive - roughly 'size' bytes of external memory. - """ - return self._backend.gcp(cdata, destructor, size) - - def _get_cached_btype(self, type): - assert self._lock.acquire(False) is False - # call me with the lock! - try: - BType = self._cached_btypes[type] - except KeyError: - finishlist = [] - BType = type.get_cached_btype(self, finishlist) - for type in finishlist: - type.finish_backend_type(self, finishlist) - return BType - - def verify(self, source='', tmpdir=None, **kwargs): - """Verify that the current ffi signatures compile on this - machine, and return a dynamic library object. The dynamic - library can be used to call functions and access global - variables declared in this 'ffi'. The library is compiled - by the C compiler: it gives you C-level API compatibility - (including calling macros). This is unlike 'ffi.dlopen()', - which requires binary compatibility in the signatures. - """ - from .verifier import Verifier, _caller_dir_pycache - # - # If set_unicode(True) was called, insert the UNICODE and - # _UNICODE macro declarations - if self._windows_unicode: - self._apply_windows_unicode(kwargs) - # - # Set the tmpdir here, and not in Verifier.__init__: it picks - # up the caller's directory, which we want to be the caller of - # ffi.verify(), as opposed to the caller of Veritier(). - tmpdir = tmpdir or _caller_dir_pycache() - # - # Make a Verifier() and use it to load the library. - self.verifier = Verifier(self, source, tmpdir, **kwargs) - lib = self.verifier.load_library() - # - # Save the loaded library for keep-alive purposes, even - # if the caller doesn't keep it alive itself (it should). - self._libraries.append(lib) - return lib - - def _get_errno(self): - return self._backend.get_errno() - def _set_errno(self, errno): - self._backend.set_errno(errno) - errno = property(_get_errno, _set_errno, None, - "the value of 'errno' from/to the C calls") - - def getwinerror(self, code=-1): - return self._backend.getwinerror(code) - - def _pointer_to(self, ctype): - with self._lock: - return model.pointer_cache(self, ctype) - - def addressof(self, cdata, *fields_or_indexes): - """Return the address of a . - If 'fields_or_indexes' are given, returns the address of that - field or array item in the structure or array, recursively in - case of nested structures. - """ - try: - ctype = self._backend.typeof(cdata) - except TypeError: - if '__addressof__' in type(cdata).__dict__: - return type(cdata).__addressof__(cdata, *fields_or_indexes) - raise - if fields_or_indexes: - ctype, offset = self._typeoffsetof(ctype, *fields_or_indexes) - else: - if ctype.kind == "pointer": - raise TypeError("addressof(pointer)") - offset = 0 - ctypeptr = self._pointer_to(ctype) - return self._backend.rawaddressof(ctypeptr, cdata, offset) - - def _typeoffsetof(self, ctype, field_or_index, *fields_or_indexes): - ctype, offset = self._backend.typeoffsetof(ctype, field_or_index) - for field1 in fields_or_indexes: - ctype, offset1 = self._backend.typeoffsetof(ctype, field1, 1) - offset += offset1 - return ctype, offset - - def include(self, ffi_to_include): - """Includes the typedefs, structs, unions and enums defined - in another FFI instance. Usage is similar to a #include in C, - where a part of the program might include types defined in - another part for its own usage. Note that the include() - method has no effect on functions, constants and global - variables, which must anyway be accessed directly from the - lib object returned by the original FFI instance. - """ - if not isinstance(ffi_to_include, FFI): - raise TypeError("ffi.include() expects an argument that is also of" - " type cffi.FFI, not %r" % ( - type(ffi_to_include).__name__,)) - if ffi_to_include is self: - raise ValueError("self.include(self)") - with ffi_to_include._lock: - with self._lock: - self._parser.include(ffi_to_include._parser) - self._cdefsources.append('[') - self._cdefsources.extend(ffi_to_include._cdefsources) - self._cdefsources.append(']') - self._included_ffis.append(ffi_to_include) - - def new_handle(self, x): - return self._backend.newp_handle(self.BVoidP, x) - - def from_handle(self, x): - return self._backend.from_handle(x) - - def release(self, x): - self._backend.release(x) - - def set_unicode(self, enabled_flag): - """Windows: if 'enabled_flag' is True, enable the UNICODE and - _UNICODE defines in C, and declare the types like TCHAR and LPTCSTR - to be (pointers to) wchar_t. If 'enabled_flag' is False, - declare these types to be (pointers to) plain 8-bit characters. - This is mostly for backward compatibility; you usually want True. - """ - if self._windows_unicode is not None: - raise ValueError("set_unicode() can only be called once") - enabled_flag = bool(enabled_flag) - if enabled_flag: - self.cdef("typedef wchar_t TBYTE;" - "typedef wchar_t TCHAR;" - "typedef const wchar_t *LPCTSTR;" - "typedef const wchar_t *PCTSTR;" - "typedef wchar_t *LPTSTR;" - "typedef wchar_t *PTSTR;" - "typedef TBYTE *PTBYTE;" - "typedef TCHAR *PTCHAR;") - else: - self.cdef("typedef char TBYTE;" - "typedef char TCHAR;" - "typedef const char *LPCTSTR;" - "typedef const char *PCTSTR;" - "typedef char *LPTSTR;" - "typedef char *PTSTR;" - "typedef TBYTE *PTBYTE;" - "typedef TCHAR *PTCHAR;") - self._windows_unicode = enabled_flag - - def _apply_windows_unicode(self, kwds): - defmacros = kwds.get('define_macros', ()) - if not isinstance(defmacros, (list, tuple)): - raise TypeError("'define_macros' must be a list or tuple") - defmacros = list(defmacros) + [('UNICODE', '1'), - ('_UNICODE', '1')] - kwds['define_macros'] = defmacros - - def _apply_embedding_fix(self, kwds): - # must include an argument like "-lpython2.7" for the compiler - def ensure(key, value): - lst = kwds.setdefault(key, []) - if value not in lst: - lst.append(value) - # - if '__pypy__' in sys.builtin_module_names: - import os - if sys.platform == "win32": - # we need 'libpypy-c.lib'. Current distributions of - # pypy (>= 4.1) contain it as 'libs/python27.lib'. - pythonlib = "python{0[0]}{0[1]}".format(sys.version_info) - if hasattr(sys, 'prefix'): - ensure('library_dirs', os.path.join(sys.prefix, 'libs')) - else: - # we need 'libpypy-c.{so,dylib}', which should be by - # default located in 'sys.prefix/bin' for installed - # systems. - if sys.version_info < (3,): - pythonlib = "pypy-c" - else: - pythonlib = "pypy3-c" - if hasattr(sys, 'prefix'): - ensure('library_dirs', os.path.join(sys.prefix, 'bin')) - # On uninstalled pypy's, the libpypy-c is typically found in - # .../pypy/goal/. - if hasattr(sys, 'prefix'): - ensure('library_dirs', os.path.join(sys.prefix, 'pypy', 'goal')) - else: - if sys.platform == "win32": - template = "python%d%d" - if hasattr(sys, 'gettotalrefcount'): - template += '_d' - else: - try: - import sysconfig - except ImportError: # 2.6 - from cffi._shimmed_dist_utils import sysconfig - template = "python%d.%d" - if sysconfig.get_config_var('DEBUG_EXT'): - template += sysconfig.get_config_var('DEBUG_EXT') - pythonlib = (template % - (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) - if hasattr(sys, 'abiflags'): - pythonlib += sys.abiflags - ensure('libraries', pythonlib) - if sys.platform == "win32": - ensure('extra_link_args', '/MANIFEST') - - def set_source(self, module_name, source, source_extension='.c', **kwds): - import os - if hasattr(self, '_assigned_source'): - raise ValueError("set_source() cannot be called several times " - "per ffi object") - if not isinstance(module_name, basestring): - raise TypeError("'module_name' must be a string") - if os.sep in module_name or (os.altsep and os.altsep in module_name): - raise ValueError("'module_name' must not contain '/': use a dotted " - "name to make a 'package.module' location") - self._assigned_source = (str(module_name), source, - source_extension, kwds) - - def set_source_pkgconfig(self, module_name, pkgconfig_libs, source, - source_extension='.c', **kwds): - from . import pkgconfig - if not isinstance(pkgconfig_libs, list): - raise TypeError("the pkgconfig_libs argument must be a list " - "of package names") - kwds2 = pkgconfig.flags_from_pkgconfig(pkgconfig_libs) - pkgconfig.merge_flags(kwds, kwds2) - self.set_source(module_name, source, source_extension, **kwds) - - def distutils_extension(self, tmpdir='build', verbose=True): - from cffi._shimmed_dist_utils import mkpath - from .recompiler import recompile - # - if not hasattr(self, '_assigned_source'): - if hasattr(self, 'verifier'): # fallback, 'tmpdir' ignored - return self.verifier.get_extension() - raise ValueError("set_source() must be called before" - " distutils_extension()") - module_name, source, source_extension, kwds = self._assigned_source - if source is None: - raise TypeError("distutils_extension() is only for C extension " - "modules, not for dlopen()-style pure Python " - "modules") - mkpath(tmpdir) - ext, updated = recompile(self, module_name, - source, tmpdir=tmpdir, extradir=tmpdir, - source_extension=source_extension, - call_c_compiler=False, **kwds) - if verbose: - if updated: - sys.stderr.write("regenerated: %r\n" % (ext.sources[0],)) - else: - sys.stderr.write("not modified: %r\n" % (ext.sources[0],)) - return ext - - def emit_c_code(self, filename): - from .recompiler import recompile - # - if not hasattr(self, '_assigned_source'): - raise ValueError("set_source() must be called before emit_c_code()") - module_name, source, source_extension, kwds = self._assigned_source - if source is None: - raise TypeError("emit_c_code() is only for C extension modules, " - "not for dlopen()-style pure Python modules") - recompile(self, module_name, source, - c_file=filename, call_c_compiler=False, - uses_ffiplatform=False, **kwds) - - def emit_python_code(self, filename): - from .recompiler import recompile - # - if not hasattr(self, '_assigned_source'): - raise ValueError("set_source() must be called before emit_c_code()") - module_name, source, source_extension, kwds = self._assigned_source - if source is not None: - raise TypeError("emit_python_code() is only for dlopen()-style " - "pure Python modules, not for C extension modules") - recompile(self, module_name, source, - c_file=filename, call_c_compiler=False, - uses_ffiplatform=False, **kwds) - - def compile(self, tmpdir='.', verbose=0, target=None, debug=None): - """The 'target' argument gives the final file name of the - compiled DLL. Use '*' to force distutils' choice, suitable for - regular CPython C API modules. Use a file name ending in '.*' - to ask for the system's default extension for dynamic libraries - (.so/.dll/.dylib). - - The default is '*' when building a non-embedded C API extension, - and (module_name + '.*') when building an embedded library. - """ - from .recompiler import recompile - # - if not hasattr(self, '_assigned_source'): - raise ValueError("set_source() must be called before compile()") - module_name, source, source_extension, kwds = self._assigned_source - return recompile(self, module_name, source, tmpdir=tmpdir, - target=target, source_extension=source_extension, - compiler_verbose=verbose, debug=debug, **kwds) - - def init_once(self, func, tag): - # Read _init_once_cache[tag], which is either (False, lock) if - # we're calling the function now in some thread, or (True, result). - # Don't call setdefault() in most cases, to avoid allocating and - # immediately freeing a lock; but still use setdefaut() to avoid - # races. - try: - x = self._init_once_cache[tag] - except KeyError: - x = self._init_once_cache.setdefault(tag, (False, allocate_lock())) - # Common case: we got (True, result), so we return the result. - if x[0]: - return x[1] - # Else, it's a lock. Acquire it to serialize the following tests. - with x[1]: - # Read again from _init_once_cache the current status. - x = self._init_once_cache[tag] - if x[0]: - return x[1] - # Call the function and store the result back. - result = func() - self._init_once_cache[tag] = (True, result) - return result - - def embedding_init_code(self, pysource): - if self._embedding: - raise ValueError("embedding_init_code() can only be called once") - # fix 'pysource' before it gets dumped into the C file: - # - remove empty lines at the beginning, so it starts at "line 1" - # - dedent, if all non-empty lines are indented - # - check for SyntaxErrors - import re - match = re.match(r'\s*\n', pysource) - if match: - pysource = pysource[match.end():] - lines = pysource.splitlines() or [''] - prefix = re.match(r'\s*', lines[0]).group() - for i in range(1, len(lines)): - line = lines[i] - if line.rstrip(): - while not line.startswith(prefix): - prefix = prefix[:-1] - i = len(prefix) - lines = [line[i:]+'\n' for line in lines] - pysource = ''.join(lines) - # - compile(pysource, "cffi_init", "exec") - # - self._embedding = pysource - - def def_extern(self, *args, **kwds): - raise ValueError("ffi.def_extern() is only available on API-mode FFI " - "objects") - - def list_types(self): - """Returns the user type names known to this FFI instance. - This returns a tuple containing three lists of names: - (typedef_names, names_of_structs, names_of_unions) - """ - typedefs = [] - structs = [] - unions = [] - for key in self._parser._declarations: - if key.startswith('typedef '): - typedefs.append(key[8:]) - elif key.startswith('struct '): - structs.append(key[7:]) - elif key.startswith('union '): - unions.append(key[6:]) - typedefs.sort() - structs.sort() - unions.sort() - return (typedefs, structs, unions) - - -def _load_backend_lib(backend, name, flags): - import os - if not isinstance(name, basestring): - if sys.platform != "win32" or name is not None: - return backend.load_library(name, flags) - name = "c" # Windows: load_library(None) fails, but this works - # on Python 2 (backward compatibility hack only) - first_error = None - if '.' in name or '/' in name or os.sep in name: - try: - return backend.load_library(name, flags) - except OSError as e: - first_error = e - import ctypes.util - path = ctypes.util.find_library(name) - if path is None: - if name == "c" and sys.platform == "win32" and sys.version_info >= (3,): - raise OSError("dlopen(None) cannot work on Windows for Python 3 " - "(see http://bugs.python.org/issue23606)") - msg = ("ctypes.util.find_library() did not manage " - "to locate a library called %r" % (name,)) - if first_error is not None: - msg = "%s. Additionally, %s" % (first_error, msg) - raise OSError(msg) - return backend.load_library(path, flags) - -def _make_ffi_library(ffi, libname, flags): - backend = ffi._backend - backendlib = _load_backend_lib(backend, libname, flags) - # - def accessor_function(name): - key = 'function ' + name - tp, _ = ffi._parser._declarations[key] - BType = ffi._get_cached_btype(tp) - value = backendlib.load_function(BType, name) - library.__dict__[name] = value - # - def accessor_variable(name): - key = 'variable ' + name - tp, _ = ffi._parser._declarations[key] - BType = ffi._get_cached_btype(tp) - read_variable = backendlib.read_variable - write_variable = backendlib.write_variable - setattr(FFILibrary, name, property( - lambda self: read_variable(BType, name), - lambda self, value: write_variable(BType, name, value))) - # - def addressof_var(name): - try: - return addr_variables[name] - except KeyError: - with ffi._lock: - if name not in addr_variables: - key = 'variable ' + name - tp, _ = ffi._parser._declarations[key] - BType = ffi._get_cached_btype(tp) - if BType.kind != 'array': - BType = model.pointer_cache(ffi, BType) - p = backendlib.load_function(BType, name) - addr_variables[name] = p - return addr_variables[name] - # - def accessor_constant(name): - raise NotImplementedError("non-integer constant '%s' cannot be " - "accessed from a dlopen() library" % (name,)) - # - def accessor_int_constant(name): - library.__dict__[name] = ffi._parser._int_constants[name] - # - accessors = {} - accessors_version = [False] - addr_variables = {} - # - def update_accessors(): - if accessors_version[0] is ffi._cdef_version: - return - # - for key, (tp, _) in ffi._parser._declarations.items(): - if not isinstance(tp, model.EnumType): - tag, name = key.split(' ', 1) - if tag == 'function': - accessors[name] = accessor_function - elif tag == 'variable': - accessors[name] = accessor_variable - elif tag == 'constant': - accessors[name] = accessor_constant - else: - for i, enumname in enumerate(tp.enumerators): - def accessor_enum(name, tp=tp, i=i): - tp.check_not_partial() - library.__dict__[name] = tp.enumvalues[i] - accessors[enumname] = accessor_enum - for name in ffi._parser._int_constants: - accessors.setdefault(name, accessor_int_constant) - accessors_version[0] = ffi._cdef_version - # - def make_accessor(name): - with ffi._lock: - if name in library.__dict__ or name in FFILibrary.__dict__: - return # added by another thread while waiting for the lock - if name not in accessors: - update_accessors() - if name not in accessors: - raise AttributeError(name) - accessors[name](name) - # - class FFILibrary(object): - def __getattr__(self, name): - make_accessor(name) - return getattr(self, name) - def __setattr__(self, name, value): - try: - property = getattr(self.__class__, name) - except AttributeError: - make_accessor(name) - setattr(self, name, value) - else: - property.__set__(self, value) - def __dir__(self): - with ffi._lock: - update_accessors() - return accessors.keys() - def __addressof__(self, name): - if name in library.__dict__: - return library.__dict__[name] - if name in FFILibrary.__dict__: - return addressof_var(name) - make_accessor(name) - if name in library.__dict__: - return library.__dict__[name] - if name in FFILibrary.__dict__: - return addressof_var(name) - raise AttributeError("cffi library has no function or " - "global variable named '%s'" % (name,)) - def __cffi_close__(self): - backendlib.close_lib() - self.__dict__.clear() - # - if isinstance(libname, basestring): - try: - if not isinstance(libname, str): # unicode, on Python 2 - libname = libname.encode('utf-8') - FFILibrary.__name__ = 'FFILibrary_%s' % libname - except UnicodeError: - pass - library = FFILibrary() - return library, library.__dict__ - -def _builtin_function_type(func): - # a hack to make at least ffi.typeof(builtin_function) work, - # if the builtin function was obtained by 'vengine_cpy'. - import sys - try: - module = sys.modules[func.__module__] - ffi = module._cffi_original_ffi - types_of_builtin_funcs = module._cffi_types_of_builtin_funcs - tp = types_of_builtin_funcs[func] - except (KeyError, AttributeError, TypeError): - return None - else: - with ffi._lock: - return ffi._get_cached_btype(tp) diff --git a/myenv/lib/python3.12/site-packages/cffi/backend_ctypes.py b/myenv/lib/python3.12/site-packages/cffi/backend_ctypes.py deleted file mode 100644 index e7956a7..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/backend_ctypes.py +++ /dev/null @@ -1,1121 +0,0 @@ -import ctypes, ctypes.util, operator, sys -from . import model - -if sys.version_info < (3,): - bytechr = chr -else: - unicode = str - long = int - xrange = range - bytechr = lambda num: bytes([num]) - -class CTypesType(type): - pass - -class CTypesData(object): - __metaclass__ = CTypesType - __slots__ = ['__weakref__'] - __name__ = '' - - def __init__(self, *args): - raise TypeError("cannot instantiate %r" % (self.__class__,)) - - @classmethod - def _newp(cls, init): - raise TypeError("expected a pointer or array ctype, got '%s'" - % (cls._get_c_name(),)) - - @staticmethod - def _to_ctypes(value): - raise TypeError - - @classmethod - def _arg_to_ctypes(cls, *value): - try: - ctype = cls._ctype - except AttributeError: - raise TypeError("cannot create an instance of %r" % (cls,)) - if value: - res = cls._to_ctypes(*value) - if not isinstance(res, ctype): - res = cls._ctype(res) - else: - res = cls._ctype() - return res - - @classmethod - def _create_ctype_obj(cls, init): - if init is None: - return cls._arg_to_ctypes() - else: - return cls._arg_to_ctypes(init) - - @staticmethod - def _from_ctypes(ctypes_value): - raise TypeError - - @classmethod - def _get_c_name(cls, replace_with=''): - return cls._reftypename.replace(' &', replace_with) - - @classmethod - def _fix_class(cls): - cls.__name__ = 'CData<%s>' % (cls._get_c_name(),) - cls.__qualname__ = 'CData<%s>' % (cls._get_c_name(),) - cls.__module__ = 'ffi' - - def _get_own_repr(self): - raise NotImplementedError - - def _addr_repr(self, address): - if address == 0: - return 'NULL' - else: - if address < 0: - address += 1 << (8*ctypes.sizeof(ctypes.c_void_p)) - return '0x%x' % address - - def __repr__(self, c_name=None): - own = self._get_own_repr() - return '' % (c_name or self._get_c_name(), own) - - def _convert_to_address(self, BClass): - if BClass is None: - raise TypeError("cannot convert %r to an address" % ( - self._get_c_name(),)) - else: - raise TypeError("cannot convert %r to %r" % ( - self._get_c_name(), BClass._get_c_name())) - - @classmethod - def _get_size(cls): - return ctypes.sizeof(cls._ctype) - - def _get_size_of_instance(self): - return ctypes.sizeof(self._ctype) - - @classmethod - def _cast_from(cls, source): - raise TypeError("cannot cast to %r" % (cls._get_c_name(),)) - - def _cast_to_integer(self): - return self._convert_to_address(None) - - @classmethod - def _alignment(cls): - return ctypes.alignment(cls._ctype) - - def __iter__(self): - raise TypeError("cdata %r does not support iteration" % ( - self._get_c_name()),) - - def _make_cmp(name): - cmpfunc = getattr(operator, name) - def cmp(self, other): - v_is_ptr = not isinstance(self, CTypesGenericPrimitive) - w_is_ptr = (isinstance(other, CTypesData) and - not isinstance(other, CTypesGenericPrimitive)) - if v_is_ptr and w_is_ptr: - return cmpfunc(self._convert_to_address(None), - other._convert_to_address(None)) - elif v_is_ptr or w_is_ptr: - return NotImplemented - else: - if isinstance(self, CTypesGenericPrimitive): - self = self._value - if isinstance(other, CTypesGenericPrimitive): - other = other._value - return cmpfunc(self, other) - cmp.func_name = name - return cmp - - __eq__ = _make_cmp('__eq__') - __ne__ = _make_cmp('__ne__') - __lt__ = _make_cmp('__lt__') - __le__ = _make_cmp('__le__') - __gt__ = _make_cmp('__gt__') - __ge__ = _make_cmp('__ge__') - - def __hash__(self): - return hash(self._convert_to_address(None)) - - def _to_string(self, maxlen): - raise TypeError("string(): %r" % (self,)) - - -class CTypesGenericPrimitive(CTypesData): - __slots__ = [] - - def __hash__(self): - return hash(self._value) - - def _get_own_repr(self): - return repr(self._from_ctypes(self._value)) - - -class CTypesGenericArray(CTypesData): - __slots__ = [] - - @classmethod - def _newp(cls, init): - return cls(init) - - def __iter__(self): - for i in xrange(len(self)): - yield self[i] - - def _get_own_repr(self): - return self._addr_repr(ctypes.addressof(self._blob)) - - -class CTypesGenericPtr(CTypesData): - __slots__ = ['_address', '_as_ctype_ptr'] - _automatic_casts = False - kind = "pointer" - - @classmethod - def _newp(cls, init): - return cls(init) - - @classmethod - def _cast_from(cls, source): - if source is None: - address = 0 - elif isinstance(source, CTypesData): - address = source._cast_to_integer() - elif isinstance(source, (int, long)): - address = source - else: - raise TypeError("bad type for cast to %r: %r" % - (cls, type(source).__name__)) - return cls._new_pointer_at(address) - - @classmethod - def _new_pointer_at(cls, address): - self = cls.__new__(cls) - self._address = address - self._as_ctype_ptr = ctypes.cast(address, cls._ctype) - return self - - def _get_own_repr(self): - try: - return self._addr_repr(self._address) - except AttributeError: - return '???' - - def _cast_to_integer(self): - return self._address - - def __nonzero__(self): - return bool(self._address) - __bool__ = __nonzero__ - - @classmethod - def _to_ctypes(cls, value): - if not isinstance(value, CTypesData): - raise TypeError("unexpected %s object" % type(value).__name__) - address = value._convert_to_address(cls) - return ctypes.cast(address, cls._ctype) - - @classmethod - def _from_ctypes(cls, ctypes_ptr): - address = ctypes.cast(ctypes_ptr, ctypes.c_void_p).value or 0 - return cls._new_pointer_at(address) - - @classmethod - def _initialize(cls, ctypes_ptr, value): - if value: - ctypes_ptr.contents = cls._to_ctypes(value).contents - - def _convert_to_address(self, BClass): - if (BClass in (self.__class__, None) or BClass._automatic_casts - or self._automatic_casts): - return self._address - else: - return CTypesData._convert_to_address(self, BClass) - - -class CTypesBaseStructOrUnion(CTypesData): - __slots__ = ['_blob'] - - @classmethod - def _create_ctype_obj(cls, init): - # may be overridden - raise TypeError("cannot instantiate opaque type %s" % (cls,)) - - def _get_own_repr(self): - return self._addr_repr(ctypes.addressof(self._blob)) - - @classmethod - def _offsetof(cls, fieldname): - return getattr(cls._ctype, fieldname).offset - - def _convert_to_address(self, BClass): - if getattr(BClass, '_BItem', None) is self.__class__: - return ctypes.addressof(self._blob) - else: - return CTypesData._convert_to_address(self, BClass) - - @classmethod - def _from_ctypes(cls, ctypes_struct_or_union): - self = cls.__new__(cls) - self._blob = ctypes_struct_or_union - return self - - @classmethod - def _to_ctypes(cls, value): - return value._blob - - def __repr__(self, c_name=None): - return CTypesData.__repr__(self, c_name or self._get_c_name(' &')) - - -class CTypesBackend(object): - - PRIMITIVE_TYPES = { - 'char': ctypes.c_char, - 'short': ctypes.c_short, - 'int': ctypes.c_int, - 'long': ctypes.c_long, - 'long long': ctypes.c_longlong, - 'signed char': ctypes.c_byte, - 'unsigned char': ctypes.c_ubyte, - 'unsigned short': ctypes.c_ushort, - 'unsigned int': ctypes.c_uint, - 'unsigned long': ctypes.c_ulong, - 'unsigned long long': ctypes.c_ulonglong, - 'float': ctypes.c_float, - 'double': ctypes.c_double, - '_Bool': ctypes.c_bool, - } - - for _name in ['unsigned long long', 'unsigned long', - 'unsigned int', 'unsigned short', 'unsigned char']: - _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) - PRIMITIVE_TYPES['uint%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] - if _size == ctypes.sizeof(ctypes.c_void_p): - PRIMITIVE_TYPES['uintptr_t'] = PRIMITIVE_TYPES[_name] - if _size == ctypes.sizeof(ctypes.c_size_t): - PRIMITIVE_TYPES['size_t'] = PRIMITIVE_TYPES[_name] - - for _name in ['long long', 'long', 'int', 'short', 'signed char']: - _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) - PRIMITIVE_TYPES['int%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] - if _size == ctypes.sizeof(ctypes.c_void_p): - PRIMITIVE_TYPES['intptr_t'] = PRIMITIVE_TYPES[_name] - PRIMITIVE_TYPES['ptrdiff_t'] = PRIMITIVE_TYPES[_name] - if _size == ctypes.sizeof(ctypes.c_size_t): - PRIMITIVE_TYPES['ssize_t'] = PRIMITIVE_TYPES[_name] - - - def __init__(self): - self.RTLD_LAZY = 0 # not supported anyway by ctypes - self.RTLD_NOW = 0 - self.RTLD_GLOBAL = ctypes.RTLD_GLOBAL - self.RTLD_LOCAL = ctypes.RTLD_LOCAL - - def set_ffi(self, ffi): - self.ffi = ffi - - def _get_types(self): - return CTypesData, CTypesType - - def load_library(self, path, flags=0): - cdll = ctypes.CDLL(path, flags) - return CTypesLibrary(self, cdll) - - def new_void_type(self): - class CTypesVoid(CTypesData): - __slots__ = [] - _reftypename = 'void &' - @staticmethod - def _from_ctypes(novalue): - return None - @staticmethod - def _to_ctypes(novalue): - if novalue is not None: - raise TypeError("None expected, got %s object" % - (type(novalue).__name__,)) - return None - CTypesVoid._fix_class() - return CTypesVoid - - def new_primitive_type(self, name): - if name == 'wchar_t': - raise NotImplementedError(name) - ctype = self.PRIMITIVE_TYPES[name] - if name == 'char': - kind = 'char' - elif name in ('float', 'double'): - kind = 'float' - else: - if name in ('signed char', 'unsigned char'): - kind = 'byte' - elif name == '_Bool': - kind = 'bool' - else: - kind = 'int' - is_signed = (ctype(-1).value == -1) - # - def _cast_source_to_int(source): - if isinstance(source, (int, long, float)): - source = int(source) - elif isinstance(source, CTypesData): - source = source._cast_to_integer() - elif isinstance(source, bytes): - source = ord(source) - elif source is None: - source = 0 - else: - raise TypeError("bad type for cast to %r: %r" % - (CTypesPrimitive, type(source).__name__)) - return source - # - kind1 = kind - class CTypesPrimitive(CTypesGenericPrimitive): - __slots__ = ['_value'] - _ctype = ctype - _reftypename = '%s &' % name - kind = kind1 - - def __init__(self, value): - self._value = value - - @staticmethod - def _create_ctype_obj(init): - if init is None: - return ctype() - return ctype(CTypesPrimitive._to_ctypes(init)) - - if kind == 'int' or kind == 'byte': - @classmethod - def _cast_from(cls, source): - source = _cast_source_to_int(source) - source = ctype(source).value # cast within range - return cls(source) - def __int__(self): - return self._value - - if kind == 'bool': - @classmethod - def _cast_from(cls, source): - if not isinstance(source, (int, long, float)): - source = _cast_source_to_int(source) - return cls(bool(source)) - def __int__(self): - return int(self._value) - - if kind == 'char': - @classmethod - def _cast_from(cls, source): - source = _cast_source_to_int(source) - source = bytechr(source & 0xFF) - return cls(source) - def __int__(self): - return ord(self._value) - - if kind == 'float': - @classmethod - def _cast_from(cls, source): - if isinstance(source, float): - pass - elif isinstance(source, CTypesGenericPrimitive): - if hasattr(source, '__float__'): - source = float(source) - else: - source = int(source) - else: - source = _cast_source_to_int(source) - source = ctype(source).value # fix precision - return cls(source) - def __int__(self): - return int(self._value) - def __float__(self): - return self._value - - _cast_to_integer = __int__ - - if kind == 'int' or kind == 'byte' or kind == 'bool': - @staticmethod - def _to_ctypes(x): - if not isinstance(x, (int, long)): - if isinstance(x, CTypesData): - x = int(x) - else: - raise TypeError("integer expected, got %s" % - type(x).__name__) - if ctype(x).value != x: - if not is_signed and x < 0: - raise OverflowError("%s: negative integer" % name) - else: - raise OverflowError("%s: integer out of bounds" - % name) - return x - - if kind == 'char': - @staticmethod - def _to_ctypes(x): - if isinstance(x, bytes) and len(x) == 1: - return x - if isinstance(x, CTypesPrimitive): # > - return x._value - raise TypeError("character expected, got %s" % - type(x).__name__) - def __nonzero__(self): - return ord(self._value) != 0 - else: - def __nonzero__(self): - return self._value != 0 - __bool__ = __nonzero__ - - if kind == 'float': - @staticmethod - def _to_ctypes(x): - if not isinstance(x, (int, long, float, CTypesData)): - raise TypeError("float expected, got %s" % - type(x).__name__) - return ctype(x).value - - @staticmethod - def _from_ctypes(value): - return getattr(value, 'value', value) - - @staticmethod - def _initialize(blob, init): - blob.value = CTypesPrimitive._to_ctypes(init) - - if kind == 'char': - def _to_string(self, maxlen): - return self._value - if kind == 'byte': - def _to_string(self, maxlen): - return chr(self._value & 0xff) - # - CTypesPrimitive._fix_class() - return CTypesPrimitive - - def new_pointer_type(self, BItem): - getbtype = self.ffi._get_cached_btype - if BItem is getbtype(model.PrimitiveType('char')): - kind = 'charp' - elif BItem in (getbtype(model.PrimitiveType('signed char')), - getbtype(model.PrimitiveType('unsigned char'))): - kind = 'bytep' - elif BItem is getbtype(model.void_type): - kind = 'voidp' - else: - kind = 'generic' - # - class CTypesPtr(CTypesGenericPtr): - __slots__ = ['_own'] - if kind == 'charp': - __slots__ += ['__as_strbuf'] - _BItem = BItem - if hasattr(BItem, '_ctype'): - _ctype = ctypes.POINTER(BItem._ctype) - _bitem_size = ctypes.sizeof(BItem._ctype) - else: - _ctype = ctypes.c_void_p - if issubclass(BItem, CTypesGenericArray): - _reftypename = BItem._get_c_name('(* &)') - else: - _reftypename = BItem._get_c_name(' * &') - - def __init__(self, init): - ctypeobj = BItem._create_ctype_obj(init) - if kind == 'charp': - self.__as_strbuf = ctypes.create_string_buffer( - ctypeobj.value + b'\x00') - self._as_ctype_ptr = ctypes.cast( - self.__as_strbuf, self._ctype) - else: - self._as_ctype_ptr = ctypes.pointer(ctypeobj) - self._address = ctypes.cast(self._as_ctype_ptr, - ctypes.c_void_p).value - self._own = True - - def __add__(self, other): - if isinstance(other, (int, long)): - return self._new_pointer_at(self._address + - other * self._bitem_size) - else: - return NotImplemented - - def __sub__(self, other): - if isinstance(other, (int, long)): - return self._new_pointer_at(self._address - - other * self._bitem_size) - elif type(self) is type(other): - return (self._address - other._address) // self._bitem_size - else: - return NotImplemented - - def __getitem__(self, index): - if getattr(self, '_own', False) and index != 0: - raise IndexError - return BItem._from_ctypes(self._as_ctype_ptr[index]) - - def __setitem__(self, index, value): - self._as_ctype_ptr[index] = BItem._to_ctypes(value) - - if kind == 'charp' or kind == 'voidp': - @classmethod - def _arg_to_ctypes(cls, *value): - if value and isinstance(value[0], bytes): - return ctypes.c_char_p(value[0]) - else: - return super(CTypesPtr, cls)._arg_to_ctypes(*value) - - if kind == 'charp' or kind == 'bytep': - def _to_string(self, maxlen): - if maxlen < 0: - maxlen = sys.maxsize - p = ctypes.cast(self._as_ctype_ptr, - ctypes.POINTER(ctypes.c_char)) - n = 0 - while n < maxlen and p[n] != b'\x00': - n += 1 - return b''.join([p[i] for i in range(n)]) - - def _get_own_repr(self): - if getattr(self, '_own', False): - return 'owning %d bytes' % ( - ctypes.sizeof(self._as_ctype_ptr.contents),) - return super(CTypesPtr, self)._get_own_repr() - # - if (BItem is self.ffi._get_cached_btype(model.void_type) or - BItem is self.ffi._get_cached_btype(model.PrimitiveType('char'))): - CTypesPtr._automatic_casts = True - # - CTypesPtr._fix_class() - return CTypesPtr - - def new_array_type(self, CTypesPtr, length): - if length is None: - brackets = ' &[]' - else: - brackets = ' &[%d]' % length - BItem = CTypesPtr._BItem - getbtype = self.ffi._get_cached_btype - if BItem is getbtype(model.PrimitiveType('char')): - kind = 'char' - elif BItem in (getbtype(model.PrimitiveType('signed char')), - getbtype(model.PrimitiveType('unsigned char'))): - kind = 'byte' - else: - kind = 'generic' - # - class CTypesArray(CTypesGenericArray): - __slots__ = ['_blob', '_own'] - if length is not None: - _ctype = BItem._ctype * length - else: - __slots__.append('_ctype') - _reftypename = BItem._get_c_name(brackets) - _declared_length = length - _CTPtr = CTypesPtr - - def __init__(self, init): - if length is None: - if isinstance(init, (int, long)): - len1 = init - init = None - elif kind == 'char' and isinstance(init, bytes): - len1 = len(init) + 1 # extra null - else: - init = tuple(init) - len1 = len(init) - self._ctype = BItem._ctype * len1 - self._blob = self._ctype() - self._own = True - if init is not None: - self._initialize(self._blob, init) - - @staticmethod - def _initialize(blob, init): - if isinstance(init, bytes): - init = [init[i:i+1] for i in range(len(init))] - else: - if isinstance(init, CTypesGenericArray): - if (len(init) != len(blob) or - not isinstance(init, CTypesArray)): - raise TypeError("length/type mismatch: %s" % (init,)) - init = tuple(init) - if len(init) > len(blob): - raise IndexError("too many initializers") - addr = ctypes.cast(blob, ctypes.c_void_p).value - PTR = ctypes.POINTER(BItem._ctype) - itemsize = ctypes.sizeof(BItem._ctype) - for i, value in enumerate(init): - p = ctypes.cast(addr + i * itemsize, PTR) - BItem._initialize(p.contents, value) - - def __len__(self): - return len(self._blob) - - def __getitem__(self, index): - if not (0 <= index < len(self._blob)): - raise IndexError - return BItem._from_ctypes(self._blob[index]) - - def __setitem__(self, index, value): - if not (0 <= index < len(self._blob)): - raise IndexError - self._blob[index] = BItem._to_ctypes(value) - - if kind == 'char' or kind == 'byte': - def _to_string(self, maxlen): - if maxlen < 0: - maxlen = len(self._blob) - p = ctypes.cast(self._blob, - ctypes.POINTER(ctypes.c_char)) - n = 0 - while n < maxlen and p[n] != b'\x00': - n += 1 - return b''.join([p[i] for i in range(n)]) - - def _get_own_repr(self): - if getattr(self, '_own', False): - return 'owning %d bytes' % (ctypes.sizeof(self._blob),) - return super(CTypesArray, self)._get_own_repr() - - def _convert_to_address(self, BClass): - if BClass in (CTypesPtr, None) or BClass._automatic_casts: - return ctypes.addressof(self._blob) - else: - return CTypesData._convert_to_address(self, BClass) - - @staticmethod - def _from_ctypes(ctypes_array): - self = CTypesArray.__new__(CTypesArray) - self._blob = ctypes_array - return self - - @staticmethod - def _arg_to_ctypes(value): - return CTypesPtr._arg_to_ctypes(value) - - def __add__(self, other): - if isinstance(other, (int, long)): - return CTypesPtr._new_pointer_at( - ctypes.addressof(self._blob) + - other * ctypes.sizeof(BItem._ctype)) - else: - return NotImplemented - - @classmethod - def _cast_from(cls, source): - raise NotImplementedError("casting to %r" % ( - cls._get_c_name(),)) - # - CTypesArray._fix_class() - return CTypesArray - - def _new_struct_or_union(self, kind, name, base_ctypes_class): - # - class struct_or_union(base_ctypes_class): - pass - struct_or_union.__name__ = '%s_%s' % (kind, name) - kind1 = kind - # - class CTypesStructOrUnion(CTypesBaseStructOrUnion): - __slots__ = ['_blob'] - _ctype = struct_or_union - _reftypename = '%s &' % (name,) - _kind = kind = kind1 - # - CTypesStructOrUnion._fix_class() - return CTypesStructOrUnion - - def new_struct_type(self, name): - return self._new_struct_or_union('struct', name, ctypes.Structure) - - def new_union_type(self, name): - return self._new_struct_or_union('union', name, ctypes.Union) - - def complete_struct_or_union(self, CTypesStructOrUnion, fields, tp, - totalsize=-1, totalalignment=-1, sflags=0, - pack=0): - if totalsize >= 0 or totalalignment >= 0: - raise NotImplementedError("the ctypes backend of CFFI does not support " - "structures completed by verify(); please " - "compile and install the _cffi_backend module.") - struct_or_union = CTypesStructOrUnion._ctype - fnames = [fname for (fname, BField, bitsize) in fields] - btypes = [BField for (fname, BField, bitsize) in fields] - bitfields = [bitsize for (fname, BField, bitsize) in fields] - # - bfield_types = {} - cfields = [] - for (fname, BField, bitsize) in fields: - if bitsize < 0: - cfields.append((fname, BField._ctype)) - bfield_types[fname] = BField - else: - cfields.append((fname, BField._ctype, bitsize)) - bfield_types[fname] = Ellipsis - if sflags & 8: - struct_or_union._pack_ = 1 - elif pack: - struct_or_union._pack_ = pack - struct_or_union._fields_ = cfields - CTypesStructOrUnion._bfield_types = bfield_types - # - @staticmethod - def _create_ctype_obj(init): - result = struct_or_union() - if init is not None: - initialize(result, init) - return result - CTypesStructOrUnion._create_ctype_obj = _create_ctype_obj - # - def initialize(blob, init): - if is_union: - if len(init) > 1: - raise ValueError("union initializer: %d items given, but " - "only one supported (use a dict if needed)" - % (len(init),)) - if not isinstance(init, dict): - if isinstance(init, (bytes, unicode)): - raise TypeError("union initializer: got a str") - init = tuple(init) - if len(init) > len(fnames): - raise ValueError("too many values for %s initializer" % - CTypesStructOrUnion._get_c_name()) - init = dict(zip(fnames, init)) - addr = ctypes.addressof(blob) - for fname, value in init.items(): - BField, bitsize = name2fieldtype[fname] - assert bitsize < 0, \ - "not implemented: initializer with bit fields" - offset = CTypesStructOrUnion._offsetof(fname) - PTR = ctypes.POINTER(BField._ctype) - p = ctypes.cast(addr + offset, PTR) - BField._initialize(p.contents, value) - is_union = CTypesStructOrUnion._kind == 'union' - name2fieldtype = dict(zip(fnames, zip(btypes, bitfields))) - # - for fname, BField, bitsize in fields: - if fname == '': - raise NotImplementedError("nested anonymous structs/unions") - if hasattr(CTypesStructOrUnion, fname): - raise ValueError("the field name %r conflicts in " - "the ctypes backend" % fname) - if bitsize < 0: - def getter(self, fname=fname, BField=BField, - offset=CTypesStructOrUnion._offsetof(fname), - PTR=ctypes.POINTER(BField._ctype)): - addr = ctypes.addressof(self._blob) - p = ctypes.cast(addr + offset, PTR) - return BField._from_ctypes(p.contents) - def setter(self, value, fname=fname, BField=BField): - setattr(self._blob, fname, BField._to_ctypes(value)) - # - if issubclass(BField, CTypesGenericArray): - setter = None - if BField._declared_length == 0: - def getter(self, fname=fname, BFieldPtr=BField._CTPtr, - offset=CTypesStructOrUnion._offsetof(fname), - PTR=ctypes.POINTER(BField._ctype)): - addr = ctypes.addressof(self._blob) - p = ctypes.cast(addr + offset, PTR) - return BFieldPtr._from_ctypes(p) - # - else: - def getter(self, fname=fname, BField=BField): - return BField._from_ctypes(getattr(self._blob, fname)) - def setter(self, value, fname=fname, BField=BField): - # xxx obscure workaround - value = BField._to_ctypes(value) - oldvalue = getattr(self._blob, fname) - setattr(self._blob, fname, value) - if value != getattr(self._blob, fname): - setattr(self._blob, fname, oldvalue) - raise OverflowError("value too large for bitfield") - setattr(CTypesStructOrUnion, fname, property(getter, setter)) - # - CTypesPtr = self.ffi._get_cached_btype(model.PointerType(tp)) - for fname in fnames: - if hasattr(CTypesPtr, fname): - raise ValueError("the field name %r conflicts in " - "the ctypes backend" % fname) - def getter(self, fname=fname): - return getattr(self[0], fname) - def setter(self, value, fname=fname): - setattr(self[0], fname, value) - setattr(CTypesPtr, fname, property(getter, setter)) - - def new_function_type(self, BArgs, BResult, has_varargs): - nameargs = [BArg._get_c_name() for BArg in BArgs] - if has_varargs: - nameargs.append('...') - nameargs = ', '.join(nameargs) - # - class CTypesFunctionPtr(CTypesGenericPtr): - __slots__ = ['_own_callback', '_name'] - _ctype = ctypes.CFUNCTYPE(getattr(BResult, '_ctype', None), - *[BArg._ctype for BArg in BArgs], - use_errno=True) - _reftypename = BResult._get_c_name('(* &)(%s)' % (nameargs,)) - - def __init__(self, init, error=None): - # create a callback to the Python callable init() - import traceback - assert not has_varargs, "varargs not supported for callbacks" - if getattr(BResult, '_ctype', None) is not None: - error = BResult._from_ctypes( - BResult._create_ctype_obj(error)) - else: - error = None - def callback(*args): - args2 = [] - for arg, BArg in zip(args, BArgs): - args2.append(BArg._from_ctypes(arg)) - try: - res2 = init(*args2) - res2 = BResult._to_ctypes(res2) - except: - traceback.print_exc() - res2 = error - if issubclass(BResult, CTypesGenericPtr): - if res2: - res2 = ctypes.cast(res2, ctypes.c_void_p).value - # .value: http://bugs.python.org/issue1574593 - else: - res2 = None - #print repr(res2) - return res2 - if issubclass(BResult, CTypesGenericPtr): - # The only pointers callbacks can return are void*s: - # http://bugs.python.org/issue5710 - callback_ctype = ctypes.CFUNCTYPE( - ctypes.c_void_p, - *[BArg._ctype for BArg in BArgs], - use_errno=True) - else: - callback_ctype = CTypesFunctionPtr._ctype - self._as_ctype_ptr = callback_ctype(callback) - self._address = ctypes.cast(self._as_ctype_ptr, - ctypes.c_void_p).value - self._own_callback = init - - @staticmethod - def _initialize(ctypes_ptr, value): - if value: - raise NotImplementedError("ctypes backend: not supported: " - "initializers for function pointers") - - def __repr__(self): - c_name = getattr(self, '_name', None) - if c_name: - i = self._reftypename.index('(* &)') - if self._reftypename[i-1] not in ' )*': - c_name = ' ' + c_name - c_name = self._reftypename.replace('(* &)', c_name) - return CTypesData.__repr__(self, c_name) - - def _get_own_repr(self): - if getattr(self, '_own_callback', None) is not None: - return 'calling %r' % (self._own_callback,) - return super(CTypesFunctionPtr, self)._get_own_repr() - - def __call__(self, *args): - if has_varargs: - assert len(args) >= len(BArgs) - extraargs = args[len(BArgs):] - args = args[:len(BArgs)] - else: - assert len(args) == len(BArgs) - ctypes_args = [] - for arg, BArg in zip(args, BArgs): - ctypes_args.append(BArg._arg_to_ctypes(arg)) - if has_varargs: - for i, arg in enumerate(extraargs): - if arg is None: - ctypes_args.append(ctypes.c_void_p(0)) # NULL - continue - if not isinstance(arg, CTypesData): - raise TypeError( - "argument %d passed in the variadic part " - "needs to be a cdata object (got %s)" % - (1 + len(BArgs) + i, type(arg).__name__)) - ctypes_args.append(arg._arg_to_ctypes(arg)) - result = self._as_ctype_ptr(*ctypes_args) - return BResult._from_ctypes(result) - # - CTypesFunctionPtr._fix_class() - return CTypesFunctionPtr - - def new_enum_type(self, name, enumerators, enumvalues, CTypesInt): - assert isinstance(name, str) - reverse_mapping = dict(zip(reversed(enumvalues), - reversed(enumerators))) - # - class CTypesEnum(CTypesInt): - __slots__ = [] - _reftypename = '%s &' % name - - def _get_own_repr(self): - value = self._value - try: - return '%d: %s' % (value, reverse_mapping[value]) - except KeyError: - return str(value) - - def _to_string(self, maxlen): - value = self._value - try: - return reverse_mapping[value] - except KeyError: - return str(value) - # - CTypesEnum._fix_class() - return CTypesEnum - - def get_errno(self): - return ctypes.get_errno() - - def set_errno(self, value): - ctypes.set_errno(value) - - def string(self, b, maxlen=-1): - return b._to_string(maxlen) - - def buffer(self, bptr, size=-1): - raise NotImplementedError("buffer() with ctypes backend") - - def sizeof(self, cdata_or_BType): - if isinstance(cdata_or_BType, CTypesData): - return cdata_or_BType._get_size_of_instance() - else: - assert issubclass(cdata_or_BType, CTypesData) - return cdata_or_BType._get_size() - - def alignof(self, BType): - assert issubclass(BType, CTypesData) - return BType._alignment() - - def newp(self, BType, source): - if not issubclass(BType, CTypesData): - raise TypeError - return BType._newp(source) - - def cast(self, BType, source): - return BType._cast_from(source) - - def callback(self, BType, source, error, onerror): - assert onerror is None # XXX not implemented - return BType(source, error) - - _weakref_cache_ref = None - - def gcp(self, cdata, destructor, size=0): - if self._weakref_cache_ref is None: - import weakref - class MyRef(weakref.ref): - def __eq__(self, other): - myref = self() - return self is other or ( - myref is not None and myref is other()) - def __ne__(self, other): - return not (self == other) - def __hash__(self): - try: - return self._hash - except AttributeError: - self._hash = hash(self()) - return self._hash - self._weakref_cache_ref = {}, MyRef - weak_cache, MyRef = self._weakref_cache_ref - - if destructor is None: - try: - del weak_cache[MyRef(cdata)] - except KeyError: - raise TypeError("Can remove destructor only on a object " - "previously returned by ffi.gc()") - return None - - def remove(k): - cdata, destructor = weak_cache.pop(k, (None, None)) - if destructor is not None: - destructor(cdata) - - new_cdata = self.cast(self.typeof(cdata), cdata) - assert new_cdata is not cdata - weak_cache[MyRef(new_cdata, remove)] = (cdata, destructor) - return new_cdata - - typeof = type - - def getcname(self, BType, replace_with): - return BType._get_c_name(replace_with) - - def typeoffsetof(self, BType, fieldname, num=0): - if isinstance(fieldname, str): - if num == 0 and issubclass(BType, CTypesGenericPtr): - BType = BType._BItem - if not issubclass(BType, CTypesBaseStructOrUnion): - raise TypeError("expected a struct or union ctype") - BField = BType._bfield_types[fieldname] - if BField is Ellipsis: - raise TypeError("not supported for bitfields") - return (BField, BType._offsetof(fieldname)) - elif isinstance(fieldname, (int, long)): - if issubclass(BType, CTypesGenericArray): - BType = BType._CTPtr - if not issubclass(BType, CTypesGenericPtr): - raise TypeError("expected an array or ptr ctype") - BItem = BType._BItem - offset = BItem._get_size() * fieldname - if offset > sys.maxsize: - raise OverflowError - return (BItem, offset) - else: - raise TypeError(type(fieldname)) - - def rawaddressof(self, BTypePtr, cdata, offset=None): - if isinstance(cdata, CTypesBaseStructOrUnion): - ptr = ctypes.pointer(type(cdata)._to_ctypes(cdata)) - elif isinstance(cdata, CTypesGenericPtr): - if offset is None or not issubclass(type(cdata)._BItem, - CTypesBaseStructOrUnion): - raise TypeError("unexpected cdata type") - ptr = type(cdata)._to_ctypes(cdata) - elif isinstance(cdata, CTypesGenericArray): - ptr = type(cdata)._to_ctypes(cdata) - else: - raise TypeError("expected a ") - if offset: - ptr = ctypes.cast( - ctypes.c_void_p( - ctypes.cast(ptr, ctypes.c_void_p).value + offset), - type(ptr)) - return BTypePtr._from_ctypes(ptr) - - -class CTypesLibrary(object): - - def __init__(self, backend, cdll): - self.backend = backend - self.cdll = cdll - - def load_function(self, BType, name): - c_func = getattr(self.cdll, name) - funcobj = BType._from_ctypes(c_func) - funcobj._name = name - return funcobj - - def read_variable(self, BType, name): - try: - ctypes_obj = BType._ctype.in_dll(self.cdll, name) - except AttributeError as e: - raise NotImplementedError(e) - return BType._from_ctypes(ctypes_obj) - - def write_variable(self, BType, name, value): - new_ctypes_obj = BType._to_ctypes(value) - ctypes_obj = BType._ctype.in_dll(self.cdll, name) - ctypes.memmove(ctypes.addressof(ctypes_obj), - ctypes.addressof(new_ctypes_obj), - ctypes.sizeof(BType._ctype)) diff --git a/myenv/lib/python3.12/site-packages/cffi/cffi_opcode.py b/myenv/lib/python3.12/site-packages/cffi/cffi_opcode.py deleted file mode 100644 index 6421df6..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/cffi_opcode.py +++ /dev/null @@ -1,187 +0,0 @@ -from .error import VerificationError - -class CffiOp(object): - def __init__(self, op, arg): - self.op = op - self.arg = arg - - def as_c_expr(self): - if self.op is None: - assert isinstance(self.arg, str) - return '(_cffi_opcode_t)(%s)' % (self.arg,) - classname = CLASS_NAME[self.op] - return '_CFFI_OP(_CFFI_OP_%s, %s)' % (classname, self.arg) - - def as_python_bytes(self): - if self.op is None and self.arg.isdigit(): - value = int(self.arg) # non-negative: '-' not in self.arg - if value >= 2**31: - raise OverflowError("cannot emit %r: limited to 2**31-1" - % (self.arg,)) - return format_four_bytes(value) - if isinstance(self.arg, str): - raise VerificationError("cannot emit to Python: %r" % (self.arg,)) - return format_four_bytes((self.arg << 8) | self.op) - - def __str__(self): - classname = CLASS_NAME.get(self.op, self.op) - return '(%s %s)' % (classname, self.arg) - -def format_four_bytes(num): - return '\\x%02X\\x%02X\\x%02X\\x%02X' % ( - (num >> 24) & 0xFF, - (num >> 16) & 0xFF, - (num >> 8) & 0xFF, - (num ) & 0xFF) - -OP_PRIMITIVE = 1 -OP_POINTER = 3 -OP_ARRAY = 5 -OP_OPEN_ARRAY = 7 -OP_STRUCT_UNION = 9 -OP_ENUM = 11 -OP_FUNCTION = 13 -OP_FUNCTION_END = 15 -OP_NOOP = 17 -OP_BITFIELD = 19 -OP_TYPENAME = 21 -OP_CPYTHON_BLTN_V = 23 # varargs -OP_CPYTHON_BLTN_N = 25 # noargs -OP_CPYTHON_BLTN_O = 27 # O (i.e. a single arg) -OP_CONSTANT = 29 -OP_CONSTANT_INT = 31 -OP_GLOBAL_VAR = 33 -OP_DLOPEN_FUNC = 35 -OP_DLOPEN_CONST = 37 -OP_GLOBAL_VAR_F = 39 -OP_EXTERN_PYTHON = 41 - -PRIM_VOID = 0 -PRIM_BOOL = 1 -PRIM_CHAR = 2 -PRIM_SCHAR = 3 -PRIM_UCHAR = 4 -PRIM_SHORT = 5 -PRIM_USHORT = 6 -PRIM_INT = 7 -PRIM_UINT = 8 -PRIM_LONG = 9 -PRIM_ULONG = 10 -PRIM_LONGLONG = 11 -PRIM_ULONGLONG = 12 -PRIM_FLOAT = 13 -PRIM_DOUBLE = 14 -PRIM_LONGDOUBLE = 15 - -PRIM_WCHAR = 16 -PRIM_INT8 = 17 -PRIM_UINT8 = 18 -PRIM_INT16 = 19 -PRIM_UINT16 = 20 -PRIM_INT32 = 21 -PRIM_UINT32 = 22 -PRIM_INT64 = 23 -PRIM_UINT64 = 24 -PRIM_INTPTR = 25 -PRIM_UINTPTR = 26 -PRIM_PTRDIFF = 27 -PRIM_SIZE = 28 -PRIM_SSIZE = 29 -PRIM_INT_LEAST8 = 30 -PRIM_UINT_LEAST8 = 31 -PRIM_INT_LEAST16 = 32 -PRIM_UINT_LEAST16 = 33 -PRIM_INT_LEAST32 = 34 -PRIM_UINT_LEAST32 = 35 -PRIM_INT_LEAST64 = 36 -PRIM_UINT_LEAST64 = 37 -PRIM_INT_FAST8 = 38 -PRIM_UINT_FAST8 = 39 -PRIM_INT_FAST16 = 40 -PRIM_UINT_FAST16 = 41 -PRIM_INT_FAST32 = 42 -PRIM_UINT_FAST32 = 43 -PRIM_INT_FAST64 = 44 -PRIM_UINT_FAST64 = 45 -PRIM_INTMAX = 46 -PRIM_UINTMAX = 47 -PRIM_FLOATCOMPLEX = 48 -PRIM_DOUBLECOMPLEX = 49 -PRIM_CHAR16 = 50 -PRIM_CHAR32 = 51 - -_NUM_PRIM = 52 -_UNKNOWN_PRIM = -1 -_UNKNOWN_FLOAT_PRIM = -2 -_UNKNOWN_LONG_DOUBLE = -3 - -_IO_FILE_STRUCT = -1 - -PRIMITIVE_TO_INDEX = { - 'char': PRIM_CHAR, - 'short': PRIM_SHORT, - 'int': PRIM_INT, - 'long': PRIM_LONG, - 'long long': PRIM_LONGLONG, - 'signed char': PRIM_SCHAR, - 'unsigned char': PRIM_UCHAR, - 'unsigned short': PRIM_USHORT, - 'unsigned int': PRIM_UINT, - 'unsigned long': PRIM_ULONG, - 'unsigned long long': PRIM_ULONGLONG, - 'float': PRIM_FLOAT, - 'double': PRIM_DOUBLE, - 'long double': PRIM_LONGDOUBLE, - '_cffi_float_complex_t': PRIM_FLOATCOMPLEX, - '_cffi_double_complex_t': PRIM_DOUBLECOMPLEX, - '_Bool': PRIM_BOOL, - 'wchar_t': PRIM_WCHAR, - 'char16_t': PRIM_CHAR16, - 'char32_t': PRIM_CHAR32, - 'int8_t': PRIM_INT8, - 'uint8_t': PRIM_UINT8, - 'int16_t': PRIM_INT16, - 'uint16_t': PRIM_UINT16, - 'int32_t': PRIM_INT32, - 'uint32_t': PRIM_UINT32, - 'int64_t': PRIM_INT64, - 'uint64_t': PRIM_UINT64, - 'intptr_t': PRIM_INTPTR, - 'uintptr_t': PRIM_UINTPTR, - 'ptrdiff_t': PRIM_PTRDIFF, - 'size_t': PRIM_SIZE, - 'ssize_t': PRIM_SSIZE, - 'int_least8_t': PRIM_INT_LEAST8, - 'uint_least8_t': PRIM_UINT_LEAST8, - 'int_least16_t': PRIM_INT_LEAST16, - 'uint_least16_t': PRIM_UINT_LEAST16, - 'int_least32_t': PRIM_INT_LEAST32, - 'uint_least32_t': PRIM_UINT_LEAST32, - 'int_least64_t': PRIM_INT_LEAST64, - 'uint_least64_t': PRIM_UINT_LEAST64, - 'int_fast8_t': PRIM_INT_FAST8, - 'uint_fast8_t': PRIM_UINT_FAST8, - 'int_fast16_t': PRIM_INT_FAST16, - 'uint_fast16_t': PRIM_UINT_FAST16, - 'int_fast32_t': PRIM_INT_FAST32, - 'uint_fast32_t': PRIM_UINT_FAST32, - 'int_fast64_t': PRIM_INT_FAST64, - 'uint_fast64_t': PRIM_UINT_FAST64, - 'intmax_t': PRIM_INTMAX, - 'uintmax_t': PRIM_UINTMAX, - } - -F_UNION = 0x01 -F_CHECK_FIELDS = 0x02 -F_PACKED = 0x04 -F_EXTERNAL = 0x08 -F_OPAQUE = 0x10 - -G_FLAGS = dict([('_CFFI_' + _key, globals()[_key]) - for _key in ['F_UNION', 'F_CHECK_FIELDS', 'F_PACKED', - 'F_EXTERNAL', 'F_OPAQUE']]) - -CLASS_NAME = {} -for _name, _value in list(globals().items()): - if _name.startswith('OP_') and isinstance(_value, int): - CLASS_NAME[_value] = _name[3:] diff --git a/myenv/lib/python3.12/site-packages/cffi/commontypes.py b/myenv/lib/python3.12/site-packages/cffi/commontypes.py deleted file mode 100644 index d4dae35..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/commontypes.py +++ /dev/null @@ -1,82 +0,0 @@ -import sys -from . import model -from .error import FFIError - - -COMMON_TYPES = {} - -try: - # fetch "bool" and all simple Windows types - from _cffi_backend import _get_common_types - _get_common_types(COMMON_TYPES) -except ImportError: - pass - -COMMON_TYPES['FILE'] = model.unknown_type('FILE', '_IO_FILE') -COMMON_TYPES['bool'] = '_Bool' # in case we got ImportError above -COMMON_TYPES['float _Complex'] = '_cffi_float_complex_t' -COMMON_TYPES['double _Complex'] = '_cffi_double_complex_t' - -for _type in model.PrimitiveType.ALL_PRIMITIVE_TYPES: - if _type.endswith('_t'): - COMMON_TYPES[_type] = _type -del _type - -_CACHE = {} - -def resolve_common_type(parser, commontype): - try: - return _CACHE[commontype] - except KeyError: - cdecl = COMMON_TYPES.get(commontype, commontype) - if not isinstance(cdecl, str): - result, quals = cdecl, 0 # cdecl is already a BaseType - elif cdecl in model.PrimitiveType.ALL_PRIMITIVE_TYPES: - result, quals = model.PrimitiveType(cdecl), 0 - elif cdecl == 'set-unicode-needed': - raise FFIError("The Windows type %r is only available after " - "you call ffi.set_unicode()" % (commontype,)) - else: - if commontype == cdecl: - raise FFIError( - "Unsupported type: %r. Please look at " - "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations " - "and file an issue if you think this type should really " - "be supported." % (commontype,)) - result, quals = parser.parse_type_and_quals(cdecl) # recursive - - assert isinstance(result, model.BaseTypeByIdentity) - _CACHE[commontype] = result, quals - return result, quals - - -# ____________________________________________________________ -# extra types for Windows (most of them are in commontypes.c) - - -def win_common_types(): - return { - "UNICODE_STRING": model.StructType( - "_UNICODE_STRING", - ["Length", - "MaximumLength", - "Buffer"], - [model.PrimitiveType("unsigned short"), - model.PrimitiveType("unsigned short"), - model.PointerType(model.PrimitiveType("wchar_t"))], - [-1, -1, -1]), - "PUNICODE_STRING": "UNICODE_STRING *", - "PCUNICODE_STRING": "const UNICODE_STRING *", - - "TBYTE": "set-unicode-needed", - "TCHAR": "set-unicode-needed", - "LPCTSTR": "set-unicode-needed", - "PCTSTR": "set-unicode-needed", - "LPTSTR": "set-unicode-needed", - "PTSTR": "set-unicode-needed", - "PTBYTE": "set-unicode-needed", - "PTCHAR": "set-unicode-needed", - } - -if sys.platform == 'win32': - COMMON_TYPES.update(win_common_types()) diff --git a/myenv/lib/python3.12/site-packages/cffi/cparser.py b/myenv/lib/python3.12/site-packages/cffi/cparser.py deleted file mode 100644 index dd590d8..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/cparser.py +++ /dev/null @@ -1,1015 +0,0 @@ -from . import model -from .commontypes import COMMON_TYPES, resolve_common_type -from .error import FFIError, CDefError -try: - from . import _pycparser as pycparser -except ImportError: - import pycparser -import weakref, re, sys - -try: - if sys.version_info < (3,): - import thread as _thread - else: - import _thread - lock = _thread.allocate_lock() -except ImportError: - lock = None - -def _workaround_for_static_import_finders(): - # Issue #392: packaging tools like cx_Freeze can not find these - # because pycparser uses exec dynamic import. This is an obscure - # workaround. This function is never called. - import pycparser.yacctab - import pycparser.lextab - -CDEF_SOURCE_STRING = "" -_r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$", - re.DOTALL | re.MULTILINE) -_r_define = re.compile(r"^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)" - r"\b((?:[^\n\\]|\\.)*?)$", - re.DOTALL | re.MULTILINE) -_r_line_directive = re.compile(r"^[ \t]*#[ \t]*(?:line|\d+)\b.*$", re.MULTILINE) -_r_partial_enum = re.compile(r"=\s*\.\.\.\s*[,}]|\.\.\.\s*\}") -_r_enum_dotdotdot = re.compile(r"__dotdotdot\d+__$") -_r_partial_array = re.compile(r"\[\s*\.\.\.\s*\]") -_r_words = re.compile(r"\w+|\S") -_parser_cache = None -_r_int_literal = re.compile(r"-?0?x?[0-9a-f]+[lu]*$", re.IGNORECASE) -_r_stdcall1 = re.compile(r"\b(__stdcall|WINAPI)\b") -_r_stdcall2 = re.compile(r"[(]\s*(__stdcall|WINAPI)\b") -_r_cdecl = re.compile(r"\b__cdecl\b") -_r_extern_python = re.compile(r'\bextern\s*"' - r'(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.') -_r_star_const_space = re.compile( # matches "* const " - r"[*]\s*((const|volatile|restrict)\b\s*)+") -_r_int_dotdotdot = re.compile(r"(\b(int|long|short|signed|unsigned|char)\s*)+" - r"\.\.\.") -_r_float_dotdotdot = re.compile(r"\b(double|float)\s*\.\.\.") - -def _get_parser(): - global _parser_cache - if _parser_cache is None: - _parser_cache = pycparser.CParser() - return _parser_cache - -def _workaround_for_old_pycparser(csource): - # Workaround for a pycparser issue (fixed between pycparser 2.10 and - # 2.14): "char*const***" gives us a wrong syntax tree, the same as - # for "char***(*const)". This means we can't tell the difference - # afterwards. But "char(*const(***))" gives us the right syntax - # tree. The issue only occurs if there are several stars in - # sequence with no parenthesis in between, just possibly qualifiers. - # Attempt to fix it by adding some parentheses in the source: each - # time we see "* const" or "* const *", we add an opening - # parenthesis before each star---the hard part is figuring out where - # to close them. - parts = [] - while True: - match = _r_star_const_space.search(csource) - if not match: - break - #print repr(''.join(parts)+csource), '=>', - parts.append(csource[:match.start()]) - parts.append('('); closing = ')' - parts.append(match.group()) # e.g. "* const " - endpos = match.end() - if csource.startswith('*', endpos): - parts.append('('); closing += ')' - level = 0 - i = endpos - while i < len(csource): - c = csource[i] - if c == '(': - level += 1 - elif c == ')': - if level == 0: - break - level -= 1 - elif c in ',;=': - if level == 0: - break - i += 1 - csource = csource[endpos:i] + closing + csource[i:] - #print repr(''.join(parts)+csource) - parts.append(csource) - return ''.join(parts) - -def _preprocess_extern_python(csource): - # input: `extern "Python" int foo(int);` or - # `extern "Python" { int foo(int); }` - # output: - # void __cffi_extern_python_start; - # int foo(int); - # void __cffi_extern_python_stop; - # - # input: `extern "Python+C" int foo(int);` - # output: - # void __cffi_extern_python_plus_c_start; - # int foo(int); - # void __cffi_extern_python_stop; - parts = [] - while True: - match = _r_extern_python.search(csource) - if not match: - break - endpos = match.end() - 1 - #print - #print ''.join(parts)+csource - #print '=>' - parts.append(csource[:match.start()]) - if 'C' in match.group(1): - parts.append('void __cffi_extern_python_plus_c_start; ') - else: - parts.append('void __cffi_extern_python_start; ') - if csource[endpos] == '{': - # grouping variant - closing = csource.find('}', endpos) - if closing < 0: - raise CDefError("'extern \"Python\" {': no '}' found") - if csource.find('{', endpos + 1, closing) >= 0: - raise NotImplementedError("cannot use { } inside a block " - "'extern \"Python\" { ... }'") - parts.append(csource[endpos+1:closing]) - csource = csource[closing+1:] - else: - # non-grouping variant - semicolon = csource.find(';', endpos) - if semicolon < 0: - raise CDefError("'extern \"Python\": no ';' found") - parts.append(csource[endpos:semicolon+1]) - csource = csource[semicolon+1:] - parts.append(' void __cffi_extern_python_stop;') - #print ''.join(parts)+csource - #print - parts.append(csource) - return ''.join(parts) - -def _warn_for_string_literal(csource): - if '"' not in csource: - return - for line in csource.splitlines(): - if '"' in line and not line.lstrip().startswith('#'): - import warnings - warnings.warn("String literal found in cdef() or type source. " - "String literals are ignored here, but you should " - "remove them anyway because some character sequences " - "confuse pre-parsing.") - break - -def _warn_for_non_extern_non_static_global_variable(decl): - if not decl.storage: - import warnings - warnings.warn("Global variable '%s' in cdef(): for consistency " - "with C it should have a storage class specifier " - "(usually 'extern')" % (decl.name,)) - -def _remove_line_directives(csource): - # _r_line_directive matches whole lines, without the final \n, if they - # start with '#line' with some spacing allowed, or '#NUMBER'. This - # function stores them away and replaces them with exactly the string - # '#line@N', where N is the index in the list 'line_directives'. - line_directives = [] - def replace(m): - i = len(line_directives) - line_directives.append(m.group()) - return '#line@%d' % i - csource = _r_line_directive.sub(replace, csource) - return csource, line_directives - -def _put_back_line_directives(csource, line_directives): - def replace(m): - s = m.group() - if not s.startswith('#line@'): - raise AssertionError("unexpected #line directive " - "(should have been processed and removed") - return line_directives[int(s[6:])] - return _r_line_directive.sub(replace, csource) - -def _preprocess(csource): - # First, remove the lines of the form '#line N "filename"' because - # the "filename" part could confuse the rest - csource, line_directives = _remove_line_directives(csource) - # Remove comments. NOTE: this only work because the cdef() section - # should not contain any string literals (except in line directives)! - def replace_keeping_newlines(m): - return ' ' + m.group().count('\n') * '\n' - csource = _r_comment.sub(replace_keeping_newlines, csource) - # Remove the "#define FOO x" lines - macros = {} - for match in _r_define.finditer(csource): - macroname, macrovalue = match.groups() - macrovalue = macrovalue.replace('\\\n', '').strip() - macros[macroname] = macrovalue - csource = _r_define.sub('', csource) - # - if pycparser.__version__ < '2.14': - csource = _workaround_for_old_pycparser(csource) - # - # BIG HACK: replace WINAPI or __stdcall with "volatile const". - # It doesn't make sense for the return type of a function to be - # "volatile volatile const", so we abuse it to detect __stdcall... - # Hack number 2 is that "int(volatile *fptr)();" is not valid C - # syntax, so we place the "volatile" before the opening parenthesis. - csource = _r_stdcall2.sub(' volatile volatile const(', csource) - csource = _r_stdcall1.sub(' volatile volatile const ', csource) - csource = _r_cdecl.sub(' ', csource) - # - # Replace `extern "Python"` with start/end markers - csource = _preprocess_extern_python(csource) - # - # Now there should not be any string literal left; warn if we get one - _warn_for_string_literal(csource) - # - # Replace "[...]" with "[__dotdotdotarray__]" - csource = _r_partial_array.sub('[__dotdotdotarray__]', csource) - # - # Replace "...}" with "__dotdotdotNUM__}". This construction should - # occur only at the end of enums; at the end of structs we have "...;}" - # and at the end of vararg functions "...);". Also replace "=...[,}]" - # with ",__dotdotdotNUM__[,}]": this occurs in the enums too, when - # giving an unknown value. - matches = list(_r_partial_enum.finditer(csource)) - for number, match in enumerate(reversed(matches)): - p = match.start() - if csource[p] == '=': - p2 = csource.find('...', p, match.end()) - assert p2 > p - csource = '%s,__dotdotdot%d__ %s' % (csource[:p], number, - csource[p2+3:]) - else: - assert csource[p:p+3] == '...' - csource = '%s __dotdotdot%d__ %s' % (csource[:p], number, - csource[p+3:]) - # Replace "int ..." or "unsigned long int..." with "__dotdotdotint__" - csource = _r_int_dotdotdot.sub(' __dotdotdotint__ ', csource) - # Replace "float ..." or "double..." with "__dotdotdotfloat__" - csource = _r_float_dotdotdot.sub(' __dotdotdotfloat__ ', csource) - # Replace all remaining "..." with the same name, "__dotdotdot__", - # which is declared with a typedef for the purpose of C parsing. - csource = csource.replace('...', ' __dotdotdot__ ') - # Finally, put back the line directives - csource = _put_back_line_directives(csource, line_directives) - return csource, macros - -def _common_type_names(csource): - # Look in the source for what looks like usages of types from the - # list of common types. A "usage" is approximated here as the - # appearance of the word, minus a "definition" of the type, which - # is the last word in a "typedef" statement. Approximative only - # but should be fine for all the common types. - look_for_words = set(COMMON_TYPES) - look_for_words.add(';') - look_for_words.add(',') - look_for_words.add('(') - look_for_words.add(')') - look_for_words.add('typedef') - words_used = set() - is_typedef = False - paren = 0 - previous_word = '' - for word in _r_words.findall(csource): - if word in look_for_words: - if word == ';': - if is_typedef: - words_used.discard(previous_word) - look_for_words.discard(previous_word) - is_typedef = False - elif word == 'typedef': - is_typedef = True - paren = 0 - elif word == '(': - paren += 1 - elif word == ')': - paren -= 1 - elif word == ',': - if is_typedef and paren == 0: - words_used.discard(previous_word) - look_for_words.discard(previous_word) - else: # word in COMMON_TYPES - words_used.add(word) - previous_word = word - return words_used - - -class Parser(object): - - def __init__(self): - self._declarations = {} - self._included_declarations = set() - self._anonymous_counter = 0 - self._structnode2type = weakref.WeakKeyDictionary() - self._options = {} - self._int_constants = {} - self._recomplete = [] - self._uses_new_feature = None - - def _parse(self, csource): - csource, macros = _preprocess(csource) - # XXX: for more efficiency we would need to poke into the - # internals of CParser... the following registers the - # typedefs, because their presence or absence influences the - # parsing itself (but what they are typedef'ed to plays no role) - ctn = _common_type_names(csource) - typenames = [] - for name in sorted(self._declarations): - if name.startswith('typedef '): - name = name[8:] - typenames.append(name) - ctn.discard(name) - typenames += sorted(ctn) - # - csourcelines = [] - csourcelines.append('# 1 ""') - for typename in typenames: - csourcelines.append('typedef int %s;' % typename) - csourcelines.append('typedef int __dotdotdotint__, __dotdotdotfloat__,' - ' __dotdotdot__;') - # this forces pycparser to consider the following in the file - # called from line 1 - csourcelines.append('# 1 "%s"' % (CDEF_SOURCE_STRING,)) - csourcelines.append(csource) - csourcelines.append('') # see test_missing_newline_bug - fullcsource = '\n'.join(csourcelines) - if lock is not None: - lock.acquire() # pycparser is not thread-safe... - try: - ast = _get_parser().parse(fullcsource) - except pycparser.c_parser.ParseError as e: - self.convert_pycparser_error(e, csource) - finally: - if lock is not None: - lock.release() - # csource will be used to find buggy source text - return ast, macros, csource - - def _convert_pycparser_error(self, e, csource): - # xxx look for ":NUM:" at the start of str(e) - # and interpret that as a line number. This will not work if - # the user gives explicit ``# NUM "FILE"`` directives. - line = None - msg = str(e) - match = re.match(r"%s:(\d+):" % (CDEF_SOURCE_STRING,), msg) - if match: - linenum = int(match.group(1), 10) - csourcelines = csource.splitlines() - if 1 <= linenum <= len(csourcelines): - line = csourcelines[linenum-1] - return line - - def convert_pycparser_error(self, e, csource): - line = self._convert_pycparser_error(e, csource) - - msg = str(e) - if line: - msg = 'cannot parse "%s"\n%s' % (line.strip(), msg) - else: - msg = 'parse error\n%s' % (msg,) - raise CDefError(msg) - - def parse(self, csource, override=False, packed=False, pack=None, - dllexport=False): - if packed: - if packed != True: - raise ValueError("'packed' should be False or True; use " - "'pack' to give another value") - if pack: - raise ValueError("cannot give both 'pack' and 'packed'") - pack = 1 - elif pack: - if pack & (pack - 1): - raise ValueError("'pack' must be a power of two, not %r" % - (pack,)) - else: - pack = 0 - prev_options = self._options - try: - self._options = {'override': override, - 'packed': pack, - 'dllexport': dllexport} - self._internal_parse(csource) - finally: - self._options = prev_options - - def _internal_parse(self, csource): - ast, macros, csource = self._parse(csource) - # add the macros - self._process_macros(macros) - # find the first "__dotdotdot__" and use that as a separator - # between the repeated typedefs and the real csource - iterator = iter(ast.ext) - for decl in iterator: - if decl.name == '__dotdotdot__': - break - else: - assert 0 - current_decl = None - # - try: - self._inside_extern_python = '__cffi_extern_python_stop' - for decl in iterator: - current_decl = decl - if isinstance(decl, pycparser.c_ast.Decl): - self._parse_decl(decl) - elif isinstance(decl, pycparser.c_ast.Typedef): - if not decl.name: - raise CDefError("typedef does not declare any name", - decl) - quals = 0 - if (isinstance(decl.type.type, pycparser.c_ast.IdentifierType) and - decl.type.type.names[-1].startswith('__dotdotdot')): - realtype = self._get_unknown_type(decl) - elif (isinstance(decl.type, pycparser.c_ast.PtrDecl) and - isinstance(decl.type.type, pycparser.c_ast.TypeDecl) and - isinstance(decl.type.type.type, - pycparser.c_ast.IdentifierType) and - decl.type.type.type.names[-1].startswith('__dotdotdot')): - realtype = self._get_unknown_ptr_type(decl) - else: - realtype, quals = self._get_type_and_quals( - decl.type, name=decl.name, partial_length_ok=True, - typedef_example="*(%s *)0" % (decl.name,)) - self._declare('typedef ' + decl.name, realtype, quals=quals) - elif decl.__class__.__name__ == 'Pragma': - # skip pragma, only in pycparser 2.15 - import warnings - warnings.warn( - "#pragma in cdef() are entirely ignored. " - "They should be removed for now, otherwise your " - "code might behave differently in a future version " - "of CFFI if #pragma support gets added. Note that " - "'#pragma pack' needs to be replaced with the " - "'packed' keyword argument to cdef().") - else: - raise CDefError("unexpected <%s>: this construct is valid " - "C but not valid in cdef()" % - decl.__class__.__name__, decl) - except CDefError as e: - if len(e.args) == 1: - e.args = e.args + (current_decl,) - raise - except FFIError as e: - msg = self._convert_pycparser_error(e, csource) - if msg: - e.args = (e.args[0] + "\n *** Err: %s" % msg,) - raise - - def _add_constants(self, key, val): - if key in self._int_constants: - if self._int_constants[key] == val: - return # ignore identical double declarations - raise FFIError( - "multiple declarations of constant: %s" % (key,)) - self._int_constants[key] = val - - def _add_integer_constant(self, name, int_str): - int_str = int_str.lower().rstrip("ul") - neg = int_str.startswith('-') - if neg: - int_str = int_str[1:] - # "010" is not valid oct in py3 - if (int_str.startswith("0") and int_str != '0' - and not int_str.startswith("0x")): - int_str = "0o" + int_str[1:] - pyvalue = int(int_str, 0) - if neg: - pyvalue = -pyvalue - self._add_constants(name, pyvalue) - self._declare('macro ' + name, pyvalue) - - def _process_macros(self, macros): - for key, value in macros.items(): - value = value.strip() - if _r_int_literal.match(value): - self._add_integer_constant(key, value) - elif value == '...': - self._declare('macro ' + key, value) - else: - raise CDefError( - 'only supports one of the following syntax:\n' - ' #define %s ... (literally dot-dot-dot)\n' - ' #define %s NUMBER (with NUMBER an integer' - ' constant, decimal/hex/octal)\n' - 'got:\n' - ' #define %s %s' - % (key, key, key, value)) - - def _declare_function(self, tp, quals, decl): - tp = self._get_type_pointer(tp, quals) - if self._options.get('dllexport'): - tag = 'dllexport_python ' - elif self._inside_extern_python == '__cffi_extern_python_start': - tag = 'extern_python ' - elif self._inside_extern_python == '__cffi_extern_python_plus_c_start': - tag = 'extern_python_plus_c ' - else: - tag = 'function ' - self._declare(tag + decl.name, tp) - - def _parse_decl(self, decl): - node = decl.type - if isinstance(node, pycparser.c_ast.FuncDecl): - tp, quals = self._get_type_and_quals(node, name=decl.name) - assert isinstance(tp, model.RawFunctionType) - self._declare_function(tp, quals, decl) - else: - if isinstance(node, pycparser.c_ast.Struct): - self._get_struct_union_enum_type('struct', node) - elif isinstance(node, pycparser.c_ast.Union): - self._get_struct_union_enum_type('union', node) - elif isinstance(node, pycparser.c_ast.Enum): - self._get_struct_union_enum_type('enum', node) - elif not decl.name: - raise CDefError("construct does not declare any variable", - decl) - # - if decl.name: - tp, quals = self._get_type_and_quals(node, - partial_length_ok=True) - if tp.is_raw_function: - self._declare_function(tp, quals, decl) - elif (tp.is_integer_type() and - hasattr(decl, 'init') and - hasattr(decl.init, 'value') and - _r_int_literal.match(decl.init.value)): - self._add_integer_constant(decl.name, decl.init.value) - elif (tp.is_integer_type() and - isinstance(decl.init, pycparser.c_ast.UnaryOp) and - decl.init.op == '-' and - hasattr(decl.init.expr, 'value') and - _r_int_literal.match(decl.init.expr.value)): - self._add_integer_constant(decl.name, - '-' + decl.init.expr.value) - elif (tp is model.void_type and - decl.name.startswith('__cffi_extern_python_')): - # hack: `extern "Python"` in the C source is replaced - # with "void __cffi_extern_python_start;" and - # "void __cffi_extern_python_stop;" - self._inside_extern_python = decl.name - else: - if self._inside_extern_python !='__cffi_extern_python_stop': - raise CDefError( - "cannot declare constants or " - "variables with 'extern \"Python\"'") - if (quals & model.Q_CONST) and not tp.is_array_type: - self._declare('constant ' + decl.name, tp, quals=quals) - else: - _warn_for_non_extern_non_static_global_variable(decl) - self._declare('variable ' + decl.name, tp, quals=quals) - - def parse_type(self, cdecl): - return self.parse_type_and_quals(cdecl)[0] - - def parse_type_and_quals(self, cdecl): - ast, macros = self._parse('void __dummy(\n%s\n);' % cdecl)[:2] - assert not macros - exprnode = ast.ext[-1].type.args.params[0] - if isinstance(exprnode, pycparser.c_ast.ID): - raise CDefError("unknown identifier '%s'" % (exprnode.name,)) - return self._get_type_and_quals(exprnode.type) - - def _declare(self, name, obj, included=False, quals=0): - if name in self._declarations: - prevobj, prevquals = self._declarations[name] - if prevobj is obj and prevquals == quals: - return - if not self._options.get('override'): - raise FFIError( - "multiple declarations of %s (for interactive usage, " - "try cdef(xx, override=True))" % (name,)) - assert '__dotdotdot__' not in name.split() - self._declarations[name] = (obj, quals) - if included: - self._included_declarations.add(obj) - - def _extract_quals(self, type): - quals = 0 - if isinstance(type, (pycparser.c_ast.TypeDecl, - pycparser.c_ast.PtrDecl)): - if 'const' in type.quals: - quals |= model.Q_CONST - if 'volatile' in type.quals: - quals |= model.Q_VOLATILE - if 'restrict' in type.quals: - quals |= model.Q_RESTRICT - return quals - - def _get_type_pointer(self, type, quals, declname=None): - if isinstance(type, model.RawFunctionType): - return type.as_function_pointer() - if (isinstance(type, model.StructOrUnionOrEnum) and - type.name.startswith('$') and type.name[1:].isdigit() and - type.forcename is None and declname is not None): - return model.NamedPointerType(type, declname, quals) - return model.PointerType(type, quals) - - def _get_type_and_quals(self, typenode, name=None, partial_length_ok=False, - typedef_example=None): - # first, dereference typedefs, if we have it already parsed, we're good - if (isinstance(typenode, pycparser.c_ast.TypeDecl) and - isinstance(typenode.type, pycparser.c_ast.IdentifierType) and - len(typenode.type.names) == 1 and - ('typedef ' + typenode.type.names[0]) in self._declarations): - tp, quals = self._declarations['typedef ' + typenode.type.names[0]] - quals |= self._extract_quals(typenode) - return tp, quals - # - if isinstance(typenode, pycparser.c_ast.ArrayDecl): - # array type - if typenode.dim is None: - length = None - else: - length = self._parse_constant( - typenode.dim, partial_length_ok=partial_length_ok) - # a hack: in 'typedef int foo_t[...][...];', don't use '...' as - # the length but use directly the C expression that would be - # generated by recompiler.py. This lets the typedef be used in - # many more places within recompiler.py - if typedef_example is not None: - if length == '...': - length = '_cffi_array_len(%s)' % (typedef_example,) - typedef_example = "*" + typedef_example - # - tp, quals = self._get_type_and_quals(typenode.type, - partial_length_ok=partial_length_ok, - typedef_example=typedef_example) - return model.ArrayType(tp, length), quals - # - if isinstance(typenode, pycparser.c_ast.PtrDecl): - # pointer type - itemtype, itemquals = self._get_type_and_quals(typenode.type) - tp = self._get_type_pointer(itemtype, itemquals, declname=name) - quals = self._extract_quals(typenode) - return tp, quals - # - if isinstance(typenode, pycparser.c_ast.TypeDecl): - quals = self._extract_quals(typenode) - type = typenode.type - if isinstance(type, pycparser.c_ast.IdentifierType): - # assume a primitive type. get it from .names, but reduce - # synonyms to a single chosen combination - names = list(type.names) - if names != ['signed', 'char']: # keep this unmodified - prefixes = {} - while names: - name = names[0] - if name in ('short', 'long', 'signed', 'unsigned'): - prefixes[name] = prefixes.get(name, 0) + 1 - del names[0] - else: - break - # ignore the 'signed' prefix below, and reorder the others - newnames = [] - for prefix in ('unsigned', 'short', 'long'): - for i in range(prefixes.get(prefix, 0)): - newnames.append(prefix) - if not names: - names = ['int'] # implicitly - if names == ['int']: # but kill it if 'short' or 'long' - if 'short' in prefixes or 'long' in prefixes: - names = [] - names = newnames + names - ident = ' '.join(names) - if ident == 'void': - return model.void_type, quals - if ident == '__dotdotdot__': - raise FFIError(':%d: bad usage of "..."' % - typenode.coord.line) - tp0, quals0 = resolve_common_type(self, ident) - return tp0, (quals | quals0) - # - if isinstance(type, pycparser.c_ast.Struct): - # 'struct foobar' - tp = self._get_struct_union_enum_type('struct', type, name) - return tp, quals - # - if isinstance(type, pycparser.c_ast.Union): - # 'union foobar' - tp = self._get_struct_union_enum_type('union', type, name) - return tp, quals - # - if isinstance(type, pycparser.c_ast.Enum): - # 'enum foobar' - tp = self._get_struct_union_enum_type('enum', type, name) - return tp, quals - # - if isinstance(typenode, pycparser.c_ast.FuncDecl): - # a function type - return self._parse_function_type(typenode, name), 0 - # - # nested anonymous structs or unions end up here - if isinstance(typenode, pycparser.c_ast.Struct): - return self._get_struct_union_enum_type('struct', typenode, name, - nested=True), 0 - if isinstance(typenode, pycparser.c_ast.Union): - return self._get_struct_union_enum_type('union', typenode, name, - nested=True), 0 - # - raise FFIError(":%d: bad or unsupported type declaration" % - typenode.coord.line) - - def _parse_function_type(self, typenode, funcname=None): - params = list(getattr(typenode.args, 'params', [])) - for i, arg in enumerate(params): - if not hasattr(arg, 'type'): - raise CDefError("%s arg %d: unknown type '%s'" - " (if you meant to use the old C syntax of giving" - " untyped arguments, it is not supported)" - % (funcname or 'in expression', i + 1, - getattr(arg, 'name', '?'))) - ellipsis = ( - len(params) > 0 and - isinstance(params[-1].type, pycparser.c_ast.TypeDecl) and - isinstance(params[-1].type.type, - pycparser.c_ast.IdentifierType) and - params[-1].type.type.names == ['__dotdotdot__']) - if ellipsis: - params.pop() - if not params: - raise CDefError( - "%s: a function with only '(...)' as argument" - " is not correct C" % (funcname or 'in expression')) - args = [self._as_func_arg(*self._get_type_and_quals(argdeclnode.type)) - for argdeclnode in params] - if not ellipsis and args == [model.void_type]: - args = [] - result, quals = self._get_type_and_quals(typenode.type) - # the 'quals' on the result type are ignored. HACK: we absure them - # to detect __stdcall functions: we textually replace "__stdcall" - # with "volatile volatile const" above. - abi = None - if hasattr(typenode.type, 'quals'): # else, probable syntax error anyway - if typenode.type.quals[-3:] == ['volatile', 'volatile', 'const']: - abi = '__stdcall' - return model.RawFunctionType(tuple(args), result, ellipsis, abi) - - def _as_func_arg(self, type, quals): - if isinstance(type, model.ArrayType): - return model.PointerType(type.item, quals) - elif isinstance(type, model.RawFunctionType): - return type.as_function_pointer() - else: - return type - - def _get_struct_union_enum_type(self, kind, type, name=None, nested=False): - # First, a level of caching on the exact 'type' node of the AST. - # This is obscure, but needed because pycparser "unrolls" declarations - # such as "typedef struct { } foo_t, *foo_p" and we end up with - # an AST that is not a tree, but a DAG, with the "type" node of the - # two branches foo_t and foo_p of the trees being the same node. - # It's a bit silly but detecting "DAG-ness" in the AST tree seems - # to be the only way to distinguish this case from two independent - # structs. See test_struct_with_two_usages. - try: - return self._structnode2type[type] - except KeyError: - pass - # - # Note that this must handle parsing "struct foo" any number of - # times and always return the same StructType object. Additionally, - # one of these times (not necessarily the first), the fields of - # the struct can be specified with "struct foo { ...fields... }". - # If no name is given, then we have to create a new anonymous struct - # with no caching; in this case, the fields are either specified - # right now or never. - # - force_name = name - name = type.name - # - # get the type or create it if needed - if name is None: - # 'force_name' is used to guess a more readable name for - # anonymous structs, for the common case "typedef struct { } foo". - if force_name is not None: - explicit_name = '$%s' % force_name - else: - self._anonymous_counter += 1 - explicit_name = '$%d' % self._anonymous_counter - tp = None - else: - explicit_name = name - key = '%s %s' % (kind, name) - tp, _ = self._declarations.get(key, (None, None)) - # - if tp is None: - if kind == 'struct': - tp = model.StructType(explicit_name, None, None, None) - elif kind == 'union': - tp = model.UnionType(explicit_name, None, None, None) - elif kind == 'enum': - if explicit_name == '__dotdotdot__': - raise CDefError("Enums cannot be declared with ...") - tp = self._build_enum_type(explicit_name, type.values) - else: - raise AssertionError("kind = %r" % (kind,)) - if name is not None: - self._declare(key, tp) - else: - if kind == 'enum' and type.values is not None: - raise NotImplementedError( - "enum %s: the '{}' declaration should appear on the first " - "time the enum is mentioned, not later" % explicit_name) - if not tp.forcename: - tp.force_the_name(force_name) - if tp.forcename and '$' in tp.name: - self._declare('anonymous %s' % tp.forcename, tp) - # - self._structnode2type[type] = tp - # - # enums: done here - if kind == 'enum': - return tp - # - # is there a 'type.decls'? If yes, then this is the place in the - # C sources that declare the fields. If no, then just return the - # existing type, possibly still incomplete. - if type.decls is None: - return tp - # - if tp.fldnames is not None: - raise CDefError("duplicate declaration of struct %s" % name) - fldnames = [] - fldtypes = [] - fldbitsize = [] - fldquals = [] - for decl in type.decls: - if (isinstance(decl.type, pycparser.c_ast.IdentifierType) and - ''.join(decl.type.names) == '__dotdotdot__'): - # XXX pycparser is inconsistent: 'names' should be a list - # of strings, but is sometimes just one string. Use - # str.join() as a way to cope with both. - self._make_partial(tp, nested) - continue - if decl.bitsize is None: - bitsize = -1 - else: - bitsize = self._parse_constant(decl.bitsize) - self._partial_length = False - type, fqual = self._get_type_and_quals(decl.type, - partial_length_ok=True) - if self._partial_length: - self._make_partial(tp, nested) - if isinstance(type, model.StructType) and type.partial: - self._make_partial(tp, nested) - fldnames.append(decl.name or '') - fldtypes.append(type) - fldbitsize.append(bitsize) - fldquals.append(fqual) - tp.fldnames = tuple(fldnames) - tp.fldtypes = tuple(fldtypes) - tp.fldbitsize = tuple(fldbitsize) - tp.fldquals = tuple(fldquals) - if fldbitsize != [-1] * len(fldbitsize): - if isinstance(tp, model.StructType) and tp.partial: - raise NotImplementedError("%s: using both bitfields and '...;'" - % (tp,)) - tp.packed = self._options.get('packed') - if tp.completed: # must be re-completed: it is not opaque any more - tp.completed = 0 - self._recomplete.append(tp) - return tp - - def _make_partial(self, tp, nested): - if not isinstance(tp, model.StructOrUnion): - raise CDefError("%s cannot be partial" % (tp,)) - if not tp.has_c_name() and not nested: - raise NotImplementedError("%s is partial but has no C name" %(tp,)) - tp.partial = True - - def _parse_constant(self, exprnode, partial_length_ok=False): - # for now, limited to expressions that are an immediate number - # or positive/negative number - if isinstance(exprnode, pycparser.c_ast.Constant): - s = exprnode.value - if '0' <= s[0] <= '9': - s = s.rstrip('uUlL') - try: - if s.startswith('0'): - return int(s, 8) - else: - return int(s, 10) - except ValueError: - if len(s) > 1: - if s.lower()[0:2] == '0x': - return int(s, 16) - elif s.lower()[0:2] == '0b': - return int(s, 2) - raise CDefError("invalid constant %r" % (s,)) - elif s[0] == "'" and s[-1] == "'" and ( - len(s) == 3 or (len(s) == 4 and s[1] == "\\")): - return ord(s[-2]) - else: - raise CDefError("invalid constant %r" % (s,)) - # - if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and - exprnode.op == '+'): - return self._parse_constant(exprnode.expr) - # - if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and - exprnode.op == '-'): - return -self._parse_constant(exprnode.expr) - # load previously defined int constant - if (isinstance(exprnode, pycparser.c_ast.ID) and - exprnode.name in self._int_constants): - return self._int_constants[exprnode.name] - # - if (isinstance(exprnode, pycparser.c_ast.ID) and - exprnode.name == '__dotdotdotarray__'): - if partial_length_ok: - self._partial_length = True - return '...' - raise FFIError(":%d: unsupported '[...]' here, cannot derive " - "the actual array length in this context" - % exprnode.coord.line) - # - if isinstance(exprnode, pycparser.c_ast.BinaryOp): - left = self._parse_constant(exprnode.left) - right = self._parse_constant(exprnode.right) - if exprnode.op == '+': - return left + right - elif exprnode.op == '-': - return left - right - elif exprnode.op == '*': - return left * right - elif exprnode.op == '/': - return self._c_div(left, right) - elif exprnode.op == '%': - return left - self._c_div(left, right) * right - elif exprnode.op == '<<': - return left << right - elif exprnode.op == '>>': - return left >> right - elif exprnode.op == '&': - return left & right - elif exprnode.op == '|': - return left | right - elif exprnode.op == '^': - return left ^ right - # - raise FFIError(":%d: unsupported expression: expected a " - "simple numeric constant" % exprnode.coord.line) - - def _c_div(self, a, b): - result = a // b - if ((a < 0) ^ (b < 0)) and (a % b) != 0: - result += 1 - return result - - def _build_enum_type(self, explicit_name, decls): - if decls is not None: - partial = False - enumerators = [] - enumvalues = [] - nextenumvalue = 0 - for enum in decls.enumerators: - if _r_enum_dotdotdot.match(enum.name): - partial = True - continue - if enum.value is not None: - nextenumvalue = self._parse_constant(enum.value) - enumerators.append(enum.name) - enumvalues.append(nextenumvalue) - self._add_constants(enum.name, nextenumvalue) - nextenumvalue += 1 - enumerators = tuple(enumerators) - enumvalues = tuple(enumvalues) - tp = model.EnumType(explicit_name, enumerators, enumvalues) - tp.partial = partial - else: # opaque enum - tp = model.EnumType(explicit_name, (), ()) - return tp - - def include(self, other): - for name, (tp, quals) in other._declarations.items(): - if name.startswith('anonymous $enum_$'): - continue # fix for test_anonymous_enum_include - kind = name.split(' ', 1)[0] - if kind in ('struct', 'union', 'enum', 'anonymous', 'typedef'): - self._declare(name, tp, included=True, quals=quals) - for k, v in other._int_constants.items(): - self._add_constants(k, v) - - def _get_unknown_type(self, decl): - typenames = decl.type.type.names - if typenames == ['__dotdotdot__']: - return model.unknown_type(decl.name) - - if typenames == ['__dotdotdotint__']: - if self._uses_new_feature is None: - self._uses_new_feature = "'typedef int... %s'" % decl.name - return model.UnknownIntegerType(decl.name) - - if typenames == ['__dotdotdotfloat__']: - # note: not for 'long double' so far - if self._uses_new_feature is None: - self._uses_new_feature = "'typedef float... %s'" % decl.name - return model.UnknownFloatType(decl.name) - - raise FFIError(':%d: unsupported usage of "..." in typedef' - % decl.coord.line) - - def _get_unknown_ptr_type(self, decl): - if decl.type.type.type.names == ['__dotdotdot__']: - return model.unknown_ptr_type(decl.name) - raise FFIError(':%d: unsupported usage of "..." in typedef' - % decl.coord.line) diff --git a/myenv/lib/python3.12/site-packages/cffi/error.py b/myenv/lib/python3.12/site-packages/cffi/error.py deleted file mode 100644 index 0a27247..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/error.py +++ /dev/null @@ -1,31 +0,0 @@ - -class FFIError(Exception): - __module__ = 'cffi' - -class CDefError(Exception): - __module__ = 'cffi' - def __str__(self): - try: - current_decl = self.args[1] - filename = current_decl.coord.file - linenum = current_decl.coord.line - prefix = '%s:%d: ' % (filename, linenum) - except (AttributeError, TypeError, IndexError): - prefix = '' - return '%s%s' % (prefix, self.args[0]) - -class VerificationError(Exception): - """ An error raised when verification fails - """ - __module__ = 'cffi' - -class VerificationMissing(Exception): - """ An error raised when incomplete structures are passed into - cdef, but no verification has been done - """ - __module__ = 'cffi' - -class PkgConfigError(Exception): - """ An error raised for missing modules in pkg-config - """ - __module__ = 'cffi' diff --git a/myenv/lib/python3.12/site-packages/cffi/ffiplatform.py b/myenv/lib/python3.12/site-packages/cffi/ffiplatform.py deleted file mode 100644 index adca28f..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/ffiplatform.py +++ /dev/null @@ -1,113 +0,0 @@ -import sys, os -from .error import VerificationError - - -LIST_OF_FILE_NAMES = ['sources', 'include_dirs', 'library_dirs', - 'extra_objects', 'depends'] - -def get_extension(srcfilename, modname, sources=(), **kwds): - from cffi._shimmed_dist_utils import Extension - allsources = [srcfilename] - for src in sources: - allsources.append(os.path.normpath(src)) - return Extension(name=modname, sources=allsources, **kwds) - -def compile(tmpdir, ext, compiler_verbose=0, debug=None): - """Compile a C extension module using distutils.""" - - saved_environ = os.environ.copy() - try: - outputfilename = _build(tmpdir, ext, compiler_verbose, debug) - outputfilename = os.path.abspath(outputfilename) - finally: - # workaround for a distutils bugs where some env vars can - # become longer and longer every time it is used - for key, value in saved_environ.items(): - if os.environ.get(key) != value: - os.environ[key] = value - return outputfilename - -def _build(tmpdir, ext, compiler_verbose=0, debug=None): - # XXX compact but horrible :-( - from cffi._shimmed_dist_utils import Distribution, CompileError, LinkError, set_threshold, set_verbosity - - dist = Distribution({'ext_modules': [ext]}) - dist.parse_config_files() - options = dist.get_option_dict('build_ext') - if debug is None: - debug = sys.flags.debug - options['debug'] = ('ffiplatform', debug) - options['force'] = ('ffiplatform', True) - options['build_lib'] = ('ffiplatform', tmpdir) - options['build_temp'] = ('ffiplatform', tmpdir) - # - try: - old_level = set_threshold(0) or 0 - try: - set_verbosity(compiler_verbose) - dist.run_command('build_ext') - cmd_obj = dist.get_command_obj('build_ext') - [soname] = cmd_obj.get_outputs() - finally: - set_threshold(old_level) - except (CompileError, LinkError) as e: - raise VerificationError('%s: %s' % (e.__class__.__name__, e)) - # - return soname - -try: - from os.path import samefile -except ImportError: - def samefile(f1, f2): - return os.path.abspath(f1) == os.path.abspath(f2) - -def maybe_relative_path(path): - if not os.path.isabs(path): - return path # already relative - dir = path - names = [] - while True: - prevdir = dir - dir, name = os.path.split(prevdir) - if dir == prevdir or not dir: - return path # failed to make it relative - names.append(name) - try: - if samefile(dir, os.curdir): - names.reverse() - return os.path.join(*names) - except OSError: - pass - -# ____________________________________________________________ - -try: - int_or_long = (int, long) - import cStringIO -except NameError: - int_or_long = int # Python 3 - import io as cStringIO - -def _flatten(x, f): - if isinstance(x, str): - f.write('%ds%s' % (len(x), x)) - elif isinstance(x, dict): - keys = sorted(x.keys()) - f.write('%dd' % len(keys)) - for key in keys: - _flatten(key, f) - _flatten(x[key], f) - elif isinstance(x, (list, tuple)): - f.write('%dl' % len(x)) - for value in x: - _flatten(value, f) - elif isinstance(x, int_or_long): - f.write('%di' % (x,)) - else: - raise TypeError( - "the keywords to verify() contains unsupported object %r" % (x,)) - -def flatten(x): - f = cStringIO.StringIO() - _flatten(x, f) - return f.getvalue() diff --git a/myenv/lib/python3.12/site-packages/cffi/lock.py b/myenv/lib/python3.12/site-packages/cffi/lock.py deleted file mode 100644 index db91b71..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/lock.py +++ /dev/null @@ -1,30 +0,0 @@ -import sys - -if sys.version_info < (3,): - try: - from thread import allocate_lock - except ImportError: - from dummy_thread import allocate_lock -else: - try: - from _thread import allocate_lock - except ImportError: - from _dummy_thread import allocate_lock - - -##import sys -##l1 = allocate_lock - -##class allocate_lock(object): -## def __init__(self): -## self._real = l1() -## def __enter__(self): -## for i in range(4, 0, -1): -## print sys._getframe(i).f_code -## print -## return self._real.__enter__() -## def __exit__(self, *args): -## return self._real.__exit__(*args) -## def acquire(self, f): -## assert f is False -## return self._real.acquire(f) diff --git a/myenv/lib/python3.12/site-packages/cffi/model.py b/myenv/lib/python3.12/site-packages/cffi/model.py deleted file mode 100644 index e5f4cae..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/model.py +++ /dev/null @@ -1,618 +0,0 @@ -import types -import weakref - -from .lock import allocate_lock -from .error import CDefError, VerificationError, VerificationMissing - -# type qualifiers -Q_CONST = 0x01 -Q_RESTRICT = 0x02 -Q_VOLATILE = 0x04 - -def qualify(quals, replace_with): - if quals & Q_CONST: - replace_with = ' const ' + replace_with.lstrip() - if quals & Q_VOLATILE: - replace_with = ' volatile ' + replace_with.lstrip() - if quals & Q_RESTRICT: - # It seems that __restrict is supported by gcc and msvc. - # If you hit some different compiler, add a #define in - # _cffi_include.h for it (and in its copies, documented there) - replace_with = ' __restrict ' + replace_with.lstrip() - return replace_with - - -class BaseTypeByIdentity(object): - is_array_type = False - is_raw_function = False - - def get_c_name(self, replace_with='', context='a C file', quals=0): - result = self.c_name_with_marker - assert result.count('&') == 1 - # some logic duplication with ffi.getctype()... :-( - replace_with = replace_with.strip() - if replace_with: - if replace_with.startswith('*') and '&[' in result: - replace_with = '(%s)' % replace_with - elif not replace_with[0] in '[(': - replace_with = ' ' + replace_with - replace_with = qualify(quals, replace_with) - result = result.replace('&', replace_with) - if '$' in result: - raise VerificationError( - "cannot generate '%s' in %s: unknown type name" - % (self._get_c_name(), context)) - return result - - def _get_c_name(self): - return self.c_name_with_marker.replace('&', '') - - def has_c_name(self): - return '$' not in self._get_c_name() - - def is_integer_type(self): - return False - - def get_cached_btype(self, ffi, finishlist, can_delay=False): - try: - BType = ffi._cached_btypes[self] - except KeyError: - BType = self.build_backend_type(ffi, finishlist) - BType2 = ffi._cached_btypes.setdefault(self, BType) - assert BType2 is BType - return BType - - def __repr__(self): - return '<%s>' % (self._get_c_name(),) - - def _get_items(self): - return [(name, getattr(self, name)) for name in self._attrs_] - - -class BaseType(BaseTypeByIdentity): - - def __eq__(self, other): - return (self.__class__ == other.__class__ and - self._get_items() == other._get_items()) - - def __ne__(self, other): - return not self == other - - def __hash__(self): - return hash((self.__class__, tuple(self._get_items()))) - - -class VoidType(BaseType): - _attrs_ = () - - def __init__(self): - self.c_name_with_marker = 'void&' - - def build_backend_type(self, ffi, finishlist): - return global_cache(self, ffi, 'new_void_type') - -void_type = VoidType() - - -class BasePrimitiveType(BaseType): - def is_complex_type(self): - return False - - -class PrimitiveType(BasePrimitiveType): - _attrs_ = ('name',) - - ALL_PRIMITIVE_TYPES = { - 'char': 'c', - 'short': 'i', - 'int': 'i', - 'long': 'i', - 'long long': 'i', - 'signed char': 'i', - 'unsigned char': 'i', - 'unsigned short': 'i', - 'unsigned int': 'i', - 'unsigned long': 'i', - 'unsigned long long': 'i', - 'float': 'f', - 'double': 'f', - 'long double': 'f', - '_cffi_float_complex_t': 'j', - '_cffi_double_complex_t': 'j', - '_Bool': 'i', - # the following types are not primitive in the C sense - 'wchar_t': 'c', - 'char16_t': 'c', - 'char32_t': 'c', - 'int8_t': 'i', - 'uint8_t': 'i', - 'int16_t': 'i', - 'uint16_t': 'i', - 'int32_t': 'i', - 'uint32_t': 'i', - 'int64_t': 'i', - 'uint64_t': 'i', - 'int_least8_t': 'i', - 'uint_least8_t': 'i', - 'int_least16_t': 'i', - 'uint_least16_t': 'i', - 'int_least32_t': 'i', - 'uint_least32_t': 'i', - 'int_least64_t': 'i', - 'uint_least64_t': 'i', - 'int_fast8_t': 'i', - 'uint_fast8_t': 'i', - 'int_fast16_t': 'i', - 'uint_fast16_t': 'i', - 'int_fast32_t': 'i', - 'uint_fast32_t': 'i', - 'int_fast64_t': 'i', - 'uint_fast64_t': 'i', - 'intptr_t': 'i', - 'uintptr_t': 'i', - 'intmax_t': 'i', - 'uintmax_t': 'i', - 'ptrdiff_t': 'i', - 'size_t': 'i', - 'ssize_t': 'i', - } - - def __init__(self, name): - assert name in self.ALL_PRIMITIVE_TYPES - self.name = name - self.c_name_with_marker = name + '&' - - def is_char_type(self): - return self.ALL_PRIMITIVE_TYPES[self.name] == 'c' - def is_integer_type(self): - return self.ALL_PRIMITIVE_TYPES[self.name] == 'i' - def is_float_type(self): - return self.ALL_PRIMITIVE_TYPES[self.name] == 'f' - def is_complex_type(self): - return self.ALL_PRIMITIVE_TYPES[self.name] == 'j' - - def build_backend_type(self, ffi, finishlist): - return global_cache(self, ffi, 'new_primitive_type', self.name) - - -class UnknownIntegerType(BasePrimitiveType): - _attrs_ = ('name',) - - def __init__(self, name): - self.name = name - self.c_name_with_marker = name + '&' - - def is_integer_type(self): - return True - - def build_backend_type(self, ffi, finishlist): - raise NotImplementedError("integer type '%s' can only be used after " - "compilation" % self.name) - -class UnknownFloatType(BasePrimitiveType): - _attrs_ = ('name', ) - - def __init__(self, name): - self.name = name - self.c_name_with_marker = name + '&' - - def build_backend_type(self, ffi, finishlist): - raise NotImplementedError("float type '%s' can only be used after " - "compilation" % self.name) - - -class BaseFunctionType(BaseType): - _attrs_ = ('args', 'result', 'ellipsis', 'abi') - - def __init__(self, args, result, ellipsis, abi=None): - self.args = args - self.result = result - self.ellipsis = ellipsis - self.abi = abi - # - reprargs = [arg._get_c_name() for arg in self.args] - if self.ellipsis: - reprargs.append('...') - reprargs = reprargs or ['void'] - replace_with = self._base_pattern % (', '.join(reprargs),) - if abi is not None: - replace_with = replace_with[:1] + abi + ' ' + replace_with[1:] - self.c_name_with_marker = ( - self.result.c_name_with_marker.replace('&', replace_with)) - - -class RawFunctionType(BaseFunctionType): - # Corresponds to a C type like 'int(int)', which is the C type of - # a function, but not a pointer-to-function. The backend has no - # notion of such a type; it's used temporarily by parsing. - _base_pattern = '(&)(%s)' - is_raw_function = True - - def build_backend_type(self, ffi, finishlist): - raise CDefError("cannot render the type %r: it is a function " - "type, not a pointer-to-function type" % (self,)) - - def as_function_pointer(self): - return FunctionPtrType(self.args, self.result, self.ellipsis, self.abi) - - -class FunctionPtrType(BaseFunctionType): - _base_pattern = '(*&)(%s)' - - def build_backend_type(self, ffi, finishlist): - result = self.result.get_cached_btype(ffi, finishlist) - args = [] - for tp in self.args: - args.append(tp.get_cached_btype(ffi, finishlist)) - abi_args = () - if self.abi == "__stdcall": - if not self.ellipsis: # __stdcall ignored for variadic funcs - try: - abi_args = (ffi._backend.FFI_STDCALL,) - except AttributeError: - pass - return global_cache(self, ffi, 'new_function_type', - tuple(args), result, self.ellipsis, *abi_args) - - def as_raw_function(self): - return RawFunctionType(self.args, self.result, self.ellipsis, self.abi) - - -class PointerType(BaseType): - _attrs_ = ('totype', 'quals') - - def __init__(self, totype, quals=0): - self.totype = totype - self.quals = quals - extra = " *&" - if totype.is_array_type: - extra = "(%s)" % (extra.lstrip(),) - extra = qualify(quals, extra) - self.c_name_with_marker = totype.c_name_with_marker.replace('&', extra) - - def build_backend_type(self, ffi, finishlist): - BItem = self.totype.get_cached_btype(ffi, finishlist, can_delay=True) - return global_cache(self, ffi, 'new_pointer_type', BItem) - -voidp_type = PointerType(void_type) - -def ConstPointerType(totype): - return PointerType(totype, Q_CONST) - -const_voidp_type = ConstPointerType(void_type) - - -class NamedPointerType(PointerType): - _attrs_ = ('totype', 'name') - - def __init__(self, totype, name, quals=0): - PointerType.__init__(self, totype, quals) - self.name = name - self.c_name_with_marker = name + '&' - - -class ArrayType(BaseType): - _attrs_ = ('item', 'length') - is_array_type = True - - def __init__(self, item, length): - self.item = item - self.length = length - # - if length is None: - brackets = '&[]' - elif length == '...': - brackets = '&[/*...*/]' - else: - brackets = '&[%s]' % length - self.c_name_with_marker = ( - self.item.c_name_with_marker.replace('&', brackets)) - - def length_is_unknown(self): - return isinstance(self.length, str) - - def resolve_length(self, newlength): - return ArrayType(self.item, newlength) - - def build_backend_type(self, ffi, finishlist): - if self.length_is_unknown(): - raise CDefError("cannot render the type %r: unknown length" % - (self,)) - self.item.get_cached_btype(ffi, finishlist) # force the item BType - BPtrItem = PointerType(self.item).get_cached_btype(ffi, finishlist) - return global_cache(self, ffi, 'new_array_type', BPtrItem, self.length) - -char_array_type = ArrayType(PrimitiveType('char'), None) - - -class StructOrUnionOrEnum(BaseTypeByIdentity): - _attrs_ = ('name',) - forcename = None - - def build_c_name_with_marker(self): - name = self.forcename or '%s %s' % (self.kind, self.name) - self.c_name_with_marker = name + '&' - - def force_the_name(self, forcename): - self.forcename = forcename - self.build_c_name_with_marker() - - def get_official_name(self): - assert self.c_name_with_marker.endswith('&') - return self.c_name_with_marker[:-1] - - -class StructOrUnion(StructOrUnionOrEnum): - fixedlayout = None - completed = 0 - partial = False - packed = 0 - - def __init__(self, name, fldnames, fldtypes, fldbitsize, fldquals=None): - self.name = name - self.fldnames = fldnames - self.fldtypes = fldtypes - self.fldbitsize = fldbitsize - self.fldquals = fldquals - self.build_c_name_with_marker() - - def anonymous_struct_fields(self): - if self.fldtypes is not None: - for name, type in zip(self.fldnames, self.fldtypes): - if name == '' and isinstance(type, StructOrUnion): - yield type - - def enumfields(self, expand_anonymous_struct_union=True): - fldquals = self.fldquals - if fldquals is None: - fldquals = (0,) * len(self.fldnames) - for name, type, bitsize, quals in zip(self.fldnames, self.fldtypes, - self.fldbitsize, fldquals): - if (name == '' and isinstance(type, StructOrUnion) - and expand_anonymous_struct_union): - # nested anonymous struct/union - for result in type.enumfields(): - yield result - else: - yield (name, type, bitsize, quals) - - def force_flatten(self): - # force the struct or union to have a declaration that lists - # directly all fields returned by enumfields(), flattening - # nested anonymous structs/unions. - names = [] - types = [] - bitsizes = [] - fldquals = [] - for name, type, bitsize, quals in self.enumfields(): - names.append(name) - types.append(type) - bitsizes.append(bitsize) - fldquals.append(quals) - self.fldnames = tuple(names) - self.fldtypes = tuple(types) - self.fldbitsize = tuple(bitsizes) - self.fldquals = tuple(fldquals) - - def get_cached_btype(self, ffi, finishlist, can_delay=False): - BType = StructOrUnionOrEnum.get_cached_btype(self, ffi, finishlist, - can_delay) - if not can_delay: - self.finish_backend_type(ffi, finishlist) - return BType - - def finish_backend_type(self, ffi, finishlist): - if self.completed: - if self.completed != 2: - raise NotImplementedError("recursive structure declaration " - "for '%s'" % (self.name,)) - return - BType = ffi._cached_btypes[self] - # - self.completed = 1 - # - if self.fldtypes is None: - pass # not completing it: it's an opaque struct - # - elif self.fixedlayout is None: - fldtypes = [tp.get_cached_btype(ffi, finishlist) - for tp in self.fldtypes] - lst = list(zip(self.fldnames, fldtypes, self.fldbitsize)) - extra_flags = () - if self.packed: - if self.packed == 1: - extra_flags = (8,) # SF_PACKED - else: - extra_flags = (0, self.packed) - ffi._backend.complete_struct_or_union(BType, lst, self, - -1, -1, *extra_flags) - # - else: - fldtypes = [] - fieldofs, fieldsize, totalsize, totalalignment = self.fixedlayout - for i in range(len(self.fldnames)): - fsize = fieldsize[i] - ftype = self.fldtypes[i] - # - if isinstance(ftype, ArrayType) and ftype.length_is_unknown(): - # fix the length to match the total size - BItemType = ftype.item.get_cached_btype(ffi, finishlist) - nlen, nrest = divmod(fsize, ffi.sizeof(BItemType)) - if nrest != 0: - self._verification_error( - "field '%s.%s' has a bogus size?" % ( - self.name, self.fldnames[i] or '{}')) - ftype = ftype.resolve_length(nlen) - self.fldtypes = (self.fldtypes[:i] + (ftype,) + - self.fldtypes[i+1:]) - # - BFieldType = ftype.get_cached_btype(ffi, finishlist) - if isinstance(ftype, ArrayType) and ftype.length is None: - assert fsize == 0 - else: - bitemsize = ffi.sizeof(BFieldType) - if bitemsize != fsize: - self._verification_error( - "field '%s.%s' is declared as %d bytes, but is " - "really %d bytes" % (self.name, - self.fldnames[i] or '{}', - bitemsize, fsize)) - fldtypes.append(BFieldType) - # - lst = list(zip(self.fldnames, fldtypes, self.fldbitsize, fieldofs)) - ffi._backend.complete_struct_or_union(BType, lst, self, - totalsize, totalalignment) - self.completed = 2 - - def _verification_error(self, msg): - raise VerificationError(msg) - - def check_not_partial(self): - if self.partial and self.fixedlayout is None: - raise VerificationMissing(self._get_c_name()) - - def build_backend_type(self, ffi, finishlist): - self.check_not_partial() - finishlist.append(self) - # - return global_cache(self, ffi, 'new_%s_type' % self.kind, - self.get_official_name(), key=self) - - -class StructType(StructOrUnion): - kind = 'struct' - - -class UnionType(StructOrUnion): - kind = 'union' - - -class EnumType(StructOrUnionOrEnum): - kind = 'enum' - partial = False - partial_resolved = False - - def __init__(self, name, enumerators, enumvalues, baseinttype=None): - self.name = name - self.enumerators = enumerators - self.enumvalues = enumvalues - self.baseinttype = baseinttype - self.build_c_name_with_marker() - - def force_the_name(self, forcename): - StructOrUnionOrEnum.force_the_name(self, forcename) - if self.forcename is None: - name = self.get_official_name() - self.forcename = '$' + name.replace(' ', '_') - - def check_not_partial(self): - if self.partial and not self.partial_resolved: - raise VerificationMissing(self._get_c_name()) - - def build_backend_type(self, ffi, finishlist): - self.check_not_partial() - base_btype = self.build_baseinttype(ffi, finishlist) - return global_cache(self, ffi, 'new_enum_type', - self.get_official_name(), - self.enumerators, self.enumvalues, - base_btype, key=self) - - def build_baseinttype(self, ffi, finishlist): - if self.baseinttype is not None: - return self.baseinttype.get_cached_btype(ffi, finishlist) - # - if self.enumvalues: - smallest_value = min(self.enumvalues) - largest_value = max(self.enumvalues) - else: - import warnings - try: - # XXX! The goal is to ensure that the warnings.warn() - # will not suppress the warning. We want to get it - # several times if we reach this point several times. - __warningregistry__.clear() - except NameError: - pass - warnings.warn("%r has no values explicitly defined; " - "guessing that it is equivalent to 'unsigned int'" - % self._get_c_name()) - smallest_value = largest_value = 0 - if smallest_value < 0: # needs a signed type - sign = 1 - candidate1 = PrimitiveType("int") - candidate2 = PrimitiveType("long") - else: - sign = 0 - candidate1 = PrimitiveType("unsigned int") - candidate2 = PrimitiveType("unsigned long") - btype1 = candidate1.get_cached_btype(ffi, finishlist) - btype2 = candidate2.get_cached_btype(ffi, finishlist) - size1 = ffi.sizeof(btype1) - size2 = ffi.sizeof(btype2) - if (smallest_value >= ((-1) << (8*size1-1)) and - largest_value < (1 << (8*size1-sign))): - return btype1 - if (smallest_value >= ((-1) << (8*size2-1)) and - largest_value < (1 << (8*size2-sign))): - return btype2 - raise CDefError("%s values don't all fit into either 'long' " - "or 'unsigned long'" % self._get_c_name()) - -def unknown_type(name, structname=None): - if structname is None: - structname = '$%s' % name - tp = StructType(structname, None, None, None) - tp.force_the_name(name) - tp.origin = "unknown_type" - return tp - -def unknown_ptr_type(name, structname=None): - if structname is None: - structname = '$$%s' % name - tp = StructType(structname, None, None, None) - return NamedPointerType(tp, name) - - -global_lock = allocate_lock() -_typecache_cffi_backend = weakref.WeakValueDictionary() - -def get_typecache(backend): - # returns _typecache_cffi_backend if backend is the _cffi_backend - # module, or type(backend).__typecache if backend is an instance of - # CTypesBackend (or some FakeBackend class during tests) - if isinstance(backend, types.ModuleType): - return _typecache_cffi_backend - with global_lock: - if not hasattr(type(backend), '__typecache'): - type(backend).__typecache = weakref.WeakValueDictionary() - return type(backend).__typecache - -def global_cache(srctype, ffi, funcname, *args, **kwds): - key = kwds.pop('key', (funcname, args)) - assert not kwds - try: - return ffi._typecache[key] - except KeyError: - pass - try: - res = getattr(ffi._backend, funcname)(*args) - except NotImplementedError as e: - raise NotImplementedError("%s: %r: %s" % (funcname, srctype, e)) - # note that setdefault() on WeakValueDictionary is not atomic - # and contains a rare bug (http://bugs.python.org/issue19542); - # we have to use a lock and do it ourselves - cache = ffi._typecache - with global_lock: - res1 = cache.get(key) - if res1 is None: - cache[key] = res - return res - else: - return res1 - -def pointer_cache(ffi, BType): - return global_cache('?', ffi, 'new_pointer_type', BType) - -def attach_exception_info(e, name): - if e.args and type(e.args[0]) is str: - e.args = ('%s: %s' % (name, e.args[0]),) + e.args[1:] diff --git a/myenv/lib/python3.12/site-packages/cffi/parse_c_type.h b/myenv/lib/python3.12/site-packages/cffi/parse_c_type.h deleted file mode 100644 index 84e4ef8..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/parse_c_type.h +++ /dev/null @@ -1,181 +0,0 @@ - -/* This part is from file 'cffi/parse_c_type.h'. It is copied at the - beginning of C sources generated by CFFI's ffi.set_source(). */ - -typedef void *_cffi_opcode_t; - -#define _CFFI_OP(opcode, arg) (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8)) -#define _CFFI_GETOP(cffi_opcode) ((unsigned char)(uintptr_t)cffi_opcode) -#define _CFFI_GETARG(cffi_opcode) (((intptr_t)cffi_opcode) >> 8) - -#define _CFFI_OP_PRIMITIVE 1 -#define _CFFI_OP_POINTER 3 -#define _CFFI_OP_ARRAY 5 -#define _CFFI_OP_OPEN_ARRAY 7 -#define _CFFI_OP_STRUCT_UNION 9 -#define _CFFI_OP_ENUM 11 -#define _CFFI_OP_FUNCTION 13 -#define _CFFI_OP_FUNCTION_END 15 -#define _CFFI_OP_NOOP 17 -#define _CFFI_OP_BITFIELD 19 -#define _CFFI_OP_TYPENAME 21 -#define _CFFI_OP_CPYTHON_BLTN_V 23 // varargs -#define _CFFI_OP_CPYTHON_BLTN_N 25 // noargs -#define _CFFI_OP_CPYTHON_BLTN_O 27 // O (i.e. a single arg) -#define _CFFI_OP_CONSTANT 29 -#define _CFFI_OP_CONSTANT_INT 31 -#define _CFFI_OP_GLOBAL_VAR 33 -#define _CFFI_OP_DLOPEN_FUNC 35 -#define _CFFI_OP_DLOPEN_CONST 37 -#define _CFFI_OP_GLOBAL_VAR_F 39 -#define _CFFI_OP_EXTERN_PYTHON 41 - -#define _CFFI_PRIM_VOID 0 -#define _CFFI_PRIM_BOOL 1 -#define _CFFI_PRIM_CHAR 2 -#define _CFFI_PRIM_SCHAR 3 -#define _CFFI_PRIM_UCHAR 4 -#define _CFFI_PRIM_SHORT 5 -#define _CFFI_PRIM_USHORT 6 -#define _CFFI_PRIM_INT 7 -#define _CFFI_PRIM_UINT 8 -#define _CFFI_PRIM_LONG 9 -#define _CFFI_PRIM_ULONG 10 -#define _CFFI_PRIM_LONGLONG 11 -#define _CFFI_PRIM_ULONGLONG 12 -#define _CFFI_PRIM_FLOAT 13 -#define _CFFI_PRIM_DOUBLE 14 -#define _CFFI_PRIM_LONGDOUBLE 15 - -#define _CFFI_PRIM_WCHAR 16 -#define _CFFI_PRIM_INT8 17 -#define _CFFI_PRIM_UINT8 18 -#define _CFFI_PRIM_INT16 19 -#define _CFFI_PRIM_UINT16 20 -#define _CFFI_PRIM_INT32 21 -#define _CFFI_PRIM_UINT32 22 -#define _CFFI_PRIM_INT64 23 -#define _CFFI_PRIM_UINT64 24 -#define _CFFI_PRIM_INTPTR 25 -#define _CFFI_PRIM_UINTPTR 26 -#define _CFFI_PRIM_PTRDIFF 27 -#define _CFFI_PRIM_SIZE 28 -#define _CFFI_PRIM_SSIZE 29 -#define _CFFI_PRIM_INT_LEAST8 30 -#define _CFFI_PRIM_UINT_LEAST8 31 -#define _CFFI_PRIM_INT_LEAST16 32 -#define _CFFI_PRIM_UINT_LEAST16 33 -#define _CFFI_PRIM_INT_LEAST32 34 -#define _CFFI_PRIM_UINT_LEAST32 35 -#define _CFFI_PRIM_INT_LEAST64 36 -#define _CFFI_PRIM_UINT_LEAST64 37 -#define _CFFI_PRIM_INT_FAST8 38 -#define _CFFI_PRIM_UINT_FAST8 39 -#define _CFFI_PRIM_INT_FAST16 40 -#define _CFFI_PRIM_UINT_FAST16 41 -#define _CFFI_PRIM_INT_FAST32 42 -#define _CFFI_PRIM_UINT_FAST32 43 -#define _CFFI_PRIM_INT_FAST64 44 -#define _CFFI_PRIM_UINT_FAST64 45 -#define _CFFI_PRIM_INTMAX 46 -#define _CFFI_PRIM_UINTMAX 47 -#define _CFFI_PRIM_FLOATCOMPLEX 48 -#define _CFFI_PRIM_DOUBLECOMPLEX 49 -#define _CFFI_PRIM_CHAR16 50 -#define _CFFI_PRIM_CHAR32 51 - -#define _CFFI__NUM_PRIM 52 -#define _CFFI__UNKNOWN_PRIM (-1) -#define _CFFI__UNKNOWN_FLOAT_PRIM (-2) -#define _CFFI__UNKNOWN_LONG_DOUBLE (-3) - -#define _CFFI__IO_FILE_STRUCT (-1) - - -struct _cffi_global_s { - const char *name; - void *address; - _cffi_opcode_t type_op; - void *size_or_direct_fn; // OP_GLOBAL_VAR: size, or 0 if unknown - // OP_CPYTHON_BLTN_*: addr of direct function -}; - -struct _cffi_getconst_s { - unsigned long long value; - const struct _cffi_type_context_s *ctx; - int gindex; -}; - -struct _cffi_struct_union_s { - const char *name; - int type_index; // -> _cffi_types, on a OP_STRUCT_UNION - int flags; // _CFFI_F_* flags below - size_t size; - int alignment; - int first_field_index; // -> _cffi_fields array - int num_fields; -}; -#define _CFFI_F_UNION 0x01 // is a union, not a struct -#define _CFFI_F_CHECK_FIELDS 0x02 // complain if fields are not in the - // "standard layout" or if some are missing -#define _CFFI_F_PACKED 0x04 // for CHECK_FIELDS, assume a packed struct -#define _CFFI_F_EXTERNAL 0x08 // in some other ffi.include() -#define _CFFI_F_OPAQUE 0x10 // opaque - -struct _cffi_field_s { - const char *name; - size_t field_offset; - size_t field_size; - _cffi_opcode_t field_type_op; -}; - -struct _cffi_enum_s { - const char *name; - int type_index; // -> _cffi_types, on a OP_ENUM - int type_prim; // _CFFI_PRIM_xxx - const char *enumerators; // comma-delimited string -}; - -struct _cffi_typename_s { - const char *name; - int type_index; /* if opaque, points to a possibly artificial - OP_STRUCT which is itself opaque */ -}; - -struct _cffi_type_context_s { - _cffi_opcode_t *types; - const struct _cffi_global_s *globals; - const struct _cffi_field_s *fields; - const struct _cffi_struct_union_s *struct_unions; - const struct _cffi_enum_s *enums; - const struct _cffi_typename_s *typenames; - int num_globals; - int num_struct_unions; - int num_enums; - int num_typenames; - const char *const *includes; - int num_types; - int flags; /* future extension */ -}; - -struct _cffi_parse_info_s { - const struct _cffi_type_context_s *ctx; - _cffi_opcode_t *output; - unsigned int output_size; - size_t error_location; - const char *error_message; -}; - -struct _cffi_externpy_s { - const char *name; - size_t size_of_result; - void *reserved1, *reserved2; -}; - -#ifdef _CFFI_INTERNAL -static int parse_c_type(struct _cffi_parse_info_s *info, const char *input); -static int search_in_globals(const struct _cffi_type_context_s *ctx, - const char *search, size_t search_len); -static int search_in_struct_unions(const struct _cffi_type_context_s *ctx, - const char *search, size_t search_len); -#endif diff --git a/myenv/lib/python3.12/site-packages/cffi/pkgconfig.py b/myenv/lib/python3.12/site-packages/cffi/pkgconfig.py deleted file mode 100644 index 5c93f15..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/pkgconfig.py +++ /dev/null @@ -1,121 +0,0 @@ -# pkg-config, https://www.freedesktop.org/wiki/Software/pkg-config/ integration for cffi -import sys, os, subprocess - -from .error import PkgConfigError - - -def merge_flags(cfg1, cfg2): - """Merge values from cffi config flags cfg2 to cf1 - - Example: - merge_flags({"libraries": ["one"]}, {"libraries": ["two"]}) - {"libraries": ["one", "two"]} - """ - for key, value in cfg2.items(): - if key not in cfg1: - cfg1[key] = value - else: - if not isinstance(cfg1[key], list): - raise TypeError("cfg1[%r] should be a list of strings" % (key,)) - if not isinstance(value, list): - raise TypeError("cfg2[%r] should be a list of strings" % (key,)) - cfg1[key].extend(value) - return cfg1 - - -def call(libname, flag, encoding=sys.getfilesystemencoding()): - """Calls pkg-config and returns the output if found - """ - a = ["pkg-config", "--print-errors"] - a.append(flag) - a.append(libname) - try: - pc = subprocess.Popen(a, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - except EnvironmentError as e: - raise PkgConfigError("cannot run pkg-config: %s" % (str(e).strip(),)) - - bout, berr = pc.communicate() - if pc.returncode != 0: - try: - berr = berr.decode(encoding) - except Exception: - pass - raise PkgConfigError(berr.strip()) - - if sys.version_info >= (3,) and not isinstance(bout, str): # Python 3.x - try: - bout = bout.decode(encoding) - except UnicodeDecodeError: - raise PkgConfigError("pkg-config %s %s returned bytes that cannot " - "be decoded with encoding %r:\n%r" % - (flag, libname, encoding, bout)) - - if os.altsep != '\\' and '\\' in bout: - raise PkgConfigError("pkg-config %s %s returned an unsupported " - "backslash-escaped output:\n%r" % - (flag, libname, bout)) - return bout - - -def flags_from_pkgconfig(libs): - r"""Return compiler line flags for FFI.set_source based on pkg-config output - - Usage - ... - ffibuilder.set_source("_foo", pkgconfig = ["libfoo", "libbar >= 1.8.3"]) - - If pkg-config is installed on build machine, then arguments include_dirs, - library_dirs, libraries, define_macros, extra_compile_args and - extra_link_args are extended with an output of pkg-config for libfoo and - libbar. - - Raises PkgConfigError in case the pkg-config call fails. - """ - - def get_include_dirs(string): - return [x[2:] for x in string.split() if x.startswith("-I")] - - def get_library_dirs(string): - return [x[2:] for x in string.split() if x.startswith("-L")] - - def get_libraries(string): - return [x[2:] for x in string.split() if x.startswith("-l")] - - # convert -Dfoo=bar to list of tuples [("foo", "bar")] expected by distutils - def get_macros(string): - def _macro(x): - x = x[2:] # drop "-D" - if '=' in x: - return tuple(x.split("=", 1)) # "-Dfoo=bar" => ("foo", "bar") - else: - return (x, None) # "-Dfoo" => ("foo", None) - return [_macro(x) for x in string.split() if x.startswith("-D")] - - def get_other_cflags(string): - return [x for x in string.split() if not x.startswith("-I") and - not x.startswith("-D")] - - def get_other_libs(string): - return [x for x in string.split() if not x.startswith("-L") and - not x.startswith("-l")] - - # return kwargs for given libname - def kwargs(libname): - fse = sys.getfilesystemencoding() - all_cflags = call(libname, "--cflags") - all_libs = call(libname, "--libs") - return { - "include_dirs": get_include_dirs(all_cflags), - "library_dirs": get_library_dirs(all_libs), - "libraries": get_libraries(all_libs), - "define_macros": get_macros(all_cflags), - "extra_compile_args": get_other_cflags(all_cflags), - "extra_link_args": get_other_libs(all_libs), - } - - # merge all arguments together - ret = {} - for libname in libs: - lib_flags = kwargs(libname) - merge_flags(ret, lib_flags) - return ret diff --git a/myenv/lib/python3.12/site-packages/cffi/recompiler.py b/myenv/lib/python3.12/site-packages/cffi/recompiler.py deleted file mode 100644 index 7734a34..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/recompiler.py +++ /dev/null @@ -1,1598 +0,0 @@ -import io, os, sys, sysconfig -from . import ffiplatform, model -from .error import VerificationError -from .cffi_opcode import * - -VERSION_BASE = 0x2601 -VERSION_EMBEDDED = 0x2701 -VERSION_CHAR16CHAR32 = 0x2801 - -USE_LIMITED_API = ((sys.platform != 'win32' or sys.version_info < (3, 0) or - sys.version_info >= (3, 5)) and - not sysconfig.get_config_var("Py_GIL_DISABLED")) # free-threaded doesn't yet support limited API - -class GlobalExpr: - def __init__(self, name, address, type_op, size=0, check_value=0): - self.name = name - self.address = address - self.type_op = type_op - self.size = size - self.check_value = check_value - - def as_c_expr(self): - return ' { "%s", (void *)%s, %s, (void *)%s },' % ( - self.name, self.address, self.type_op.as_c_expr(), self.size) - - def as_python_expr(self): - return "b'%s%s',%d" % (self.type_op.as_python_bytes(), self.name, - self.check_value) - -class FieldExpr: - def __init__(self, name, field_offset, field_size, fbitsize, field_type_op): - self.name = name - self.field_offset = field_offset - self.field_size = field_size - self.fbitsize = fbitsize - self.field_type_op = field_type_op - - def as_c_expr(self): - spaces = " " * len(self.name) - return (' { "%s", %s,\n' % (self.name, self.field_offset) + - ' %s %s,\n' % (spaces, self.field_size) + - ' %s %s },' % (spaces, self.field_type_op.as_c_expr())) - - def as_python_expr(self): - raise NotImplementedError - - def as_field_python_expr(self): - if self.field_type_op.op == OP_NOOP: - size_expr = '' - elif self.field_type_op.op == OP_BITFIELD: - size_expr = format_four_bytes(self.fbitsize) - else: - raise NotImplementedError - return "b'%s%s%s'" % (self.field_type_op.as_python_bytes(), - size_expr, - self.name) - -class StructUnionExpr: - def __init__(self, name, type_index, flags, size, alignment, comment, - first_field_index, c_fields): - self.name = name - self.type_index = type_index - self.flags = flags - self.size = size - self.alignment = alignment - self.comment = comment - self.first_field_index = first_field_index - self.c_fields = c_fields - - def as_c_expr(self): - return (' { "%s", %d, %s,' % (self.name, self.type_index, self.flags) - + '\n %s, %s, ' % (self.size, self.alignment) - + '%d, %d ' % (self.first_field_index, len(self.c_fields)) - + ('/* %s */ ' % self.comment if self.comment else '') - + '},') - - def as_python_expr(self): - flags = eval(self.flags, G_FLAGS) - fields_expr = [c_field.as_field_python_expr() - for c_field in self.c_fields] - return "(b'%s%s%s',%s)" % ( - format_four_bytes(self.type_index), - format_four_bytes(flags), - self.name, - ','.join(fields_expr)) - -class EnumExpr: - def __init__(self, name, type_index, size, signed, allenums): - self.name = name - self.type_index = type_index - self.size = size - self.signed = signed - self.allenums = allenums - - def as_c_expr(self): - return (' { "%s", %d, _cffi_prim_int(%s, %s),\n' - ' "%s" },' % (self.name, self.type_index, - self.size, self.signed, self.allenums)) - - def as_python_expr(self): - prim_index = { - (1, 0): PRIM_UINT8, (1, 1): PRIM_INT8, - (2, 0): PRIM_UINT16, (2, 1): PRIM_INT16, - (4, 0): PRIM_UINT32, (4, 1): PRIM_INT32, - (8, 0): PRIM_UINT64, (8, 1): PRIM_INT64, - }[self.size, self.signed] - return "b'%s%s%s\\x00%s'" % (format_four_bytes(self.type_index), - format_four_bytes(prim_index), - self.name, self.allenums) - -class TypenameExpr: - def __init__(self, name, type_index): - self.name = name - self.type_index = type_index - - def as_c_expr(self): - return ' { "%s", %d },' % (self.name, self.type_index) - - def as_python_expr(self): - return "b'%s%s'" % (format_four_bytes(self.type_index), self.name) - - -# ____________________________________________________________ - - -class Recompiler: - _num_externpy = 0 - - def __init__(self, ffi, module_name, target_is_python=False): - self.ffi = ffi - self.module_name = module_name - self.target_is_python = target_is_python - self._version = VERSION_BASE - - def needs_version(self, ver): - self._version = max(self._version, ver) - - def collect_type_table(self): - self._typesdict = {} - self._generate("collecttype") - # - all_decls = sorted(self._typesdict, key=str) - # - # prepare all FUNCTION bytecode sequences first - self.cffi_types = [] - for tp in all_decls: - if tp.is_raw_function: - assert self._typesdict[tp] is None - self._typesdict[tp] = len(self.cffi_types) - self.cffi_types.append(tp) # placeholder - for tp1 in tp.args: - assert isinstance(tp1, (model.VoidType, - model.BasePrimitiveType, - model.PointerType, - model.StructOrUnionOrEnum, - model.FunctionPtrType)) - if self._typesdict[tp1] is None: - self._typesdict[tp1] = len(self.cffi_types) - self.cffi_types.append(tp1) # placeholder - self.cffi_types.append('END') # placeholder - # - # prepare all OTHER bytecode sequences - for tp in all_decls: - if not tp.is_raw_function and self._typesdict[tp] is None: - self._typesdict[tp] = len(self.cffi_types) - self.cffi_types.append(tp) # placeholder - if tp.is_array_type and tp.length is not None: - self.cffi_types.append('LEN') # placeholder - assert None not in self._typesdict.values() - # - # collect all structs and unions and enums - self._struct_unions = {} - self._enums = {} - for tp in all_decls: - if isinstance(tp, model.StructOrUnion): - self._struct_unions[tp] = None - elif isinstance(tp, model.EnumType): - self._enums[tp] = None - for i, tp in enumerate(sorted(self._struct_unions, - key=lambda tp: tp.name)): - self._struct_unions[tp] = i - for i, tp in enumerate(sorted(self._enums, - key=lambda tp: tp.name)): - self._enums[tp] = i - # - # emit all bytecode sequences now - for tp in all_decls: - method = getattr(self, '_emit_bytecode_' + tp.__class__.__name__) - method(tp, self._typesdict[tp]) - # - # consistency check - for op in self.cffi_types: - assert isinstance(op, CffiOp) - self.cffi_types = tuple(self.cffi_types) # don't change any more - - def _enum_fields(self, tp): - # When producing C, expand all anonymous struct/union fields. - # That's necessary to have C code checking the offsets of the - # individual fields contained in them. When producing Python, - # don't do it and instead write it like it is, with the - # corresponding fields having an empty name. Empty names are - # recognized at runtime when we import the generated Python - # file. - expand_anonymous_struct_union = not self.target_is_python - return tp.enumfields(expand_anonymous_struct_union) - - def _do_collect_type(self, tp): - if not isinstance(tp, model.BaseTypeByIdentity): - if isinstance(tp, tuple): - for x in tp: - self._do_collect_type(x) - return - if tp not in self._typesdict: - self._typesdict[tp] = None - if isinstance(tp, model.FunctionPtrType): - self._do_collect_type(tp.as_raw_function()) - elif isinstance(tp, model.StructOrUnion): - if tp.fldtypes is not None and ( - tp not in self.ffi._parser._included_declarations): - for name1, tp1, _, _ in self._enum_fields(tp): - self._do_collect_type(self._field_type(tp, name1, tp1)) - else: - for _, x in tp._get_items(): - self._do_collect_type(x) - - def _generate(self, step_name): - lst = self.ffi._parser._declarations.items() - for name, (tp, quals) in sorted(lst): - kind, realname = name.split(' ', 1) - try: - method = getattr(self, '_generate_cpy_%s_%s' % (kind, - step_name)) - except AttributeError: - raise VerificationError( - "not implemented in recompile(): %r" % name) - try: - self._current_quals = quals - method(tp, realname) - except Exception as e: - model.attach_exception_info(e, name) - raise - - # ---------- - - ALL_STEPS = ["global", "field", "struct_union", "enum", "typename"] - - def collect_step_tables(self): - # collect the declarations for '_cffi_globals', '_cffi_typenames', etc. - self._lsts = {} - for step_name in self.ALL_STEPS: - self._lsts[step_name] = [] - self._seen_struct_unions = set() - self._generate("ctx") - self._add_missing_struct_unions() - # - for step_name in self.ALL_STEPS: - lst = self._lsts[step_name] - if step_name != "field": - lst.sort(key=lambda entry: entry.name) - self._lsts[step_name] = tuple(lst) # don't change any more - # - # check for a possible internal inconsistency: _cffi_struct_unions - # should have been generated with exactly self._struct_unions - lst = self._lsts["struct_union"] - for tp, i in self._struct_unions.items(): - assert i < len(lst) - assert lst[i].name == tp.name - assert len(lst) == len(self._struct_unions) - # same with enums - lst = self._lsts["enum"] - for tp, i in self._enums.items(): - assert i < len(lst) - assert lst[i].name == tp.name - assert len(lst) == len(self._enums) - - # ---------- - - def _prnt(self, what=''): - self._f.write(what + '\n') - - def write_source_to_f(self, f, preamble): - if self.target_is_python: - assert preamble is None - self.write_py_source_to_f(f) - else: - assert preamble is not None - self.write_c_source_to_f(f, preamble) - - def _rel_readlines(self, filename): - g = open(os.path.join(os.path.dirname(__file__), filename), 'r') - lines = g.readlines() - g.close() - return lines - - def write_c_source_to_f(self, f, preamble): - self._f = f - prnt = self._prnt - if self.ffi._embedding is not None: - prnt('#define _CFFI_USE_EMBEDDING') - if not USE_LIMITED_API: - prnt('#define _CFFI_NO_LIMITED_API') - # - # first the '#include' (actually done by inlining the file's content) - lines = self._rel_readlines('_cffi_include.h') - i = lines.index('#include "parse_c_type.h"\n') - lines[i:i+1] = self._rel_readlines('parse_c_type.h') - prnt(''.join(lines)) - # - # if we have ffi._embedding != None, we give it here as a macro - # and include an extra file - base_module_name = self.module_name.split('.')[-1] - if self.ffi._embedding is not None: - prnt('#define _CFFI_MODULE_NAME "%s"' % (self.module_name,)) - prnt('static const char _CFFI_PYTHON_STARTUP_CODE[] = {') - self._print_string_literal_in_array(self.ffi._embedding) - prnt('0 };') - prnt('#ifdef PYPY_VERSION') - prnt('# define _CFFI_PYTHON_STARTUP_FUNC _cffi_pypyinit_%s' % ( - base_module_name,)) - prnt('#elif PY_MAJOR_VERSION >= 3') - prnt('# define _CFFI_PYTHON_STARTUP_FUNC PyInit_%s' % ( - base_module_name,)) - prnt('#else') - prnt('# define _CFFI_PYTHON_STARTUP_FUNC init%s' % ( - base_module_name,)) - prnt('#endif') - lines = self._rel_readlines('_embedding.h') - i = lines.index('#include "_cffi_errors.h"\n') - lines[i:i+1] = self._rel_readlines('_cffi_errors.h') - prnt(''.join(lines)) - self.needs_version(VERSION_EMBEDDED) - # - # then paste the C source given by the user, verbatim. - prnt('/************************************************************/') - prnt() - prnt(preamble) - prnt() - prnt('/************************************************************/') - prnt() - # - # the declaration of '_cffi_types' - prnt('static void *_cffi_types[] = {') - typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) - for i, op in enumerate(self.cffi_types): - comment = '' - if i in typeindex2type: - comment = ' // ' + typeindex2type[i]._get_c_name() - prnt('/* %2d */ %s,%s' % (i, op.as_c_expr(), comment)) - if not self.cffi_types: - prnt(' 0') - prnt('};') - prnt() - # - # call generate_cpy_xxx_decl(), for every xxx found from - # ffi._parser._declarations. This generates all the functions. - self._seen_constants = set() - self._generate("decl") - # - # the declaration of '_cffi_globals' and '_cffi_typenames' - nums = {} - for step_name in self.ALL_STEPS: - lst = self._lsts[step_name] - nums[step_name] = len(lst) - if nums[step_name] > 0: - prnt('static const struct _cffi_%s_s _cffi_%ss[] = {' % ( - step_name, step_name)) - for entry in lst: - prnt(entry.as_c_expr()) - prnt('};') - prnt() - # - # the declaration of '_cffi_includes' - if self.ffi._included_ffis: - prnt('static const char * const _cffi_includes[] = {') - for ffi_to_include in self.ffi._included_ffis: - try: - included_module_name, included_source = ( - ffi_to_include._assigned_source[:2]) - except AttributeError: - raise VerificationError( - "ffi object %r includes %r, but the latter has not " - "been prepared with set_source()" % ( - self.ffi, ffi_to_include,)) - if included_source is None: - raise VerificationError( - "not implemented yet: ffi.include() of a Python-based " - "ffi inside a C-based ffi") - prnt(' "%s",' % (included_module_name,)) - prnt(' NULL') - prnt('};') - prnt() - # - # the declaration of '_cffi_type_context' - prnt('static const struct _cffi_type_context_s _cffi_type_context = {') - prnt(' _cffi_types,') - for step_name in self.ALL_STEPS: - if nums[step_name] > 0: - prnt(' _cffi_%ss,' % step_name) - else: - prnt(' NULL, /* no %ss */' % step_name) - for step_name in self.ALL_STEPS: - if step_name != "field": - prnt(' %d, /* num_%ss */' % (nums[step_name], step_name)) - if self.ffi._included_ffis: - prnt(' _cffi_includes,') - else: - prnt(' NULL, /* no includes */') - prnt(' %d, /* num_types */' % (len(self.cffi_types),)) - flags = 0 - if self._num_externpy > 0 or self.ffi._embedding is not None: - flags |= 1 # set to mean that we use extern "Python" - prnt(' %d, /* flags */' % flags) - prnt('};') - prnt() - # - # the init function - prnt('#ifdef __GNUC__') - prnt('# pragma GCC visibility push(default) /* for -fvisibility= */') - prnt('#endif') - prnt() - prnt('#ifdef PYPY_VERSION') - prnt('PyMODINIT_FUNC') - prnt('_cffi_pypyinit_%s(const void *p[])' % (base_module_name,)) - prnt('{') - if flags & 1: - prnt(' if (((intptr_t)p[0]) >= 0x0A03) {') - prnt(' _cffi_call_python_org = ' - '(void(*)(struct _cffi_externpy_s *, char *))p[1];') - prnt(' }') - prnt(' p[0] = (const void *)0x%x;' % self._version) - prnt(' p[1] = &_cffi_type_context;') - prnt('#if PY_MAJOR_VERSION >= 3') - prnt(' return NULL;') - prnt('#endif') - prnt('}') - # on Windows, distutils insists on putting init_cffi_xyz in - # 'export_symbols', so instead of fighting it, just give up and - # give it one - prnt('# ifdef _MSC_VER') - prnt(' PyMODINIT_FUNC') - prnt('# if PY_MAJOR_VERSION >= 3') - prnt(' PyInit_%s(void) { return NULL; }' % (base_module_name,)) - prnt('# else') - prnt(' init%s(void) { }' % (base_module_name,)) - prnt('# endif') - prnt('# endif') - prnt('#elif PY_MAJOR_VERSION >= 3') - prnt('PyMODINIT_FUNC') - prnt('PyInit_%s(void)' % (base_module_name,)) - prnt('{') - prnt(' return _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( - self.module_name, self._version)) - prnt('}') - prnt('#else') - prnt('PyMODINIT_FUNC') - prnt('init%s(void)' % (base_module_name,)) - prnt('{') - prnt(' _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( - self.module_name, self._version)) - prnt('}') - prnt('#endif') - prnt() - prnt('#ifdef __GNUC__') - prnt('# pragma GCC visibility pop') - prnt('#endif') - self._version = None - - def _to_py(self, x): - if isinstance(x, str): - return "b'%s'" % (x,) - if isinstance(x, (list, tuple)): - rep = [self._to_py(item) for item in x] - if len(rep) == 1: - rep.append('') - return "(%s)" % (','.join(rep),) - return x.as_python_expr() # Py2: unicode unexpected; Py3: bytes unexp. - - def write_py_source_to_f(self, f): - self._f = f - prnt = self._prnt - # - # header - prnt("# auto-generated file") - prnt("import _cffi_backend") - # - # the 'import' of the included ffis - num_includes = len(self.ffi._included_ffis or ()) - for i in range(num_includes): - ffi_to_include = self.ffi._included_ffis[i] - try: - included_module_name, included_source = ( - ffi_to_include._assigned_source[:2]) - except AttributeError: - raise VerificationError( - "ffi object %r includes %r, but the latter has not " - "been prepared with set_source()" % ( - self.ffi, ffi_to_include,)) - if included_source is not None: - raise VerificationError( - "not implemented yet: ffi.include() of a C-based " - "ffi inside a Python-based ffi") - prnt('from %s import ffi as _ffi%d' % (included_module_name, i)) - prnt() - prnt("ffi = _cffi_backend.FFI('%s'," % (self.module_name,)) - prnt(" _version = 0x%x," % (self._version,)) - self._version = None - # - # the '_types' keyword argument - self.cffi_types = tuple(self.cffi_types) # don't change any more - types_lst = [op.as_python_bytes() for op in self.cffi_types] - prnt(' _types = %s,' % (self._to_py(''.join(types_lst)),)) - typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) - # - # the keyword arguments from ALL_STEPS - for step_name in self.ALL_STEPS: - lst = self._lsts[step_name] - if len(lst) > 0 and step_name != "field": - prnt(' _%ss = %s,' % (step_name, self._to_py(lst))) - # - # the '_includes' keyword argument - if num_includes > 0: - prnt(' _includes = (%s,),' % ( - ', '.join(['_ffi%d' % i for i in range(num_includes)]),)) - # - # the footer - prnt(')') - - # ---------- - - def _gettypenum(self, type): - # a KeyError here is a bug. please report it! :-) - return self._typesdict[type] - - def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): - extraarg = '' - if isinstance(tp, model.BasePrimitiveType) and not tp.is_complex_type(): - if tp.is_integer_type() and tp.name != '_Bool': - converter = '_cffi_to_c_int' - extraarg = ', %s' % tp.name - elif isinstance(tp, model.UnknownFloatType): - # don't check with is_float_type(): it may be a 'long - # double' here, and _cffi_to_c_double would loose precision - converter = '(%s)_cffi_to_c_double' % (tp.get_c_name(''),) - else: - cname = tp.get_c_name('') - converter = '(%s)_cffi_to_c_%s' % (cname, - tp.name.replace(' ', '_')) - if cname in ('char16_t', 'char32_t'): - self.needs_version(VERSION_CHAR16CHAR32) - errvalue = '-1' - # - elif isinstance(tp, model.PointerType): - self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, - tovar, errcode) - return - # - elif (isinstance(tp, model.StructOrUnionOrEnum) or - isinstance(tp, model.BasePrimitiveType)): - # a struct (not a struct pointer) as a function argument; - # or, a complex (the same code works) - self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' - % (tovar, self._gettypenum(tp), fromvar)) - self._prnt(' %s;' % errcode) - return - # - elif isinstance(tp, model.FunctionPtrType): - converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') - extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) - errvalue = 'NULL' - # - else: - raise NotImplementedError(tp) - # - self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) - self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( - tovar, tp.get_c_name(''), errvalue)) - self._prnt(' %s;' % errcode) - - def _extra_local_variables(self, tp, localvars, freelines): - if isinstance(tp, model.PointerType): - localvars.add('Py_ssize_t datasize') - localvars.add('struct _cffi_freeme_s *large_args_free = NULL') - freelines.add('if (large_args_free != NULL)' - ' _cffi_free_array_arguments(large_args_free);') - - def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): - self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') - self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( - self._gettypenum(tp), fromvar, tovar)) - self._prnt(' if (datasize != 0) {') - self._prnt(' %s = ((size_t)datasize) <= 640 ? ' - '(%s)alloca((size_t)datasize) : NULL;' % ( - tovar, tp.get_c_name(''))) - self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' - '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) - self._prnt(' datasize, &large_args_free) < 0)') - self._prnt(' %s;' % errcode) - self._prnt(' }') - - def _convert_expr_from_c(self, tp, var, context): - if isinstance(tp, model.BasePrimitiveType): - if tp.is_integer_type() and tp.name != '_Bool': - return '_cffi_from_c_int(%s, %s)' % (var, tp.name) - elif isinstance(tp, model.UnknownFloatType): - return '_cffi_from_c_double(%s)' % (var,) - elif tp.name != 'long double' and not tp.is_complex_type(): - cname = tp.name.replace(' ', '_') - if cname in ('char16_t', 'char32_t'): - self.needs_version(VERSION_CHAR16CHAR32) - return '_cffi_from_c_%s(%s)' % (cname, var) - else: - return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): - return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, model.ArrayType): - return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( - var, self._gettypenum(model.PointerType(tp.item))) - elif isinstance(tp, model.StructOrUnion): - if tp.fldnames is None: - raise TypeError("'%s' is used as %s, but is opaque" % ( - tp._get_c_name(), context)) - return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, model.EnumType): - return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - else: - raise NotImplementedError(tp) - - # ---------- - # typedefs - - def _typedef_type(self, tp, name): - return self._global_type(tp, "(*(%s *)0)" % (name,)) - - def _generate_cpy_typedef_collecttype(self, tp, name): - self._do_collect_type(self._typedef_type(tp, name)) - - def _generate_cpy_typedef_decl(self, tp, name): - pass - - def _typedef_ctx(self, tp, name): - type_index = self._typesdict[tp] - self._lsts["typename"].append(TypenameExpr(name, type_index)) - - def _generate_cpy_typedef_ctx(self, tp, name): - tp = self._typedef_type(tp, name) - self._typedef_ctx(tp, name) - if getattr(tp, "origin", None) == "unknown_type": - self._struct_ctx(tp, tp.name, approxname=None) - elif isinstance(tp, model.NamedPointerType): - self._struct_ctx(tp.totype, tp.totype.name, approxname=tp.name, - named_ptr=tp) - - # ---------- - # function declarations - - def _generate_cpy_function_collecttype(self, tp, name): - self._do_collect_type(tp.as_raw_function()) - if tp.ellipsis and not self.target_is_python: - self._do_collect_type(tp) - - def _generate_cpy_function_decl(self, tp, name): - assert not self.target_is_python - assert isinstance(tp, model.FunctionPtrType) - if tp.ellipsis: - # cannot support vararg functions better than this: check for its - # exact type (including the fixed arguments), and build it as a - # constant function pointer (no CPython wrapper) - self._generate_cpy_constant_decl(tp, name) - return - prnt = self._prnt - numargs = len(tp.args) - if numargs == 0: - argname = 'noarg' - elif numargs == 1: - argname = 'arg0' - else: - argname = 'args' - # - # ------------------------------ - # the 'd' version of the function, only for addressof(lib, 'func') - arguments = [] - call_arguments = [] - context = 'argument of %s' % name - for i, type in enumerate(tp.args): - arguments.append(type.get_c_name(' x%d' % i, context)) - call_arguments.append('x%d' % i) - repr_arguments = ', '.join(arguments) - repr_arguments = repr_arguments or 'void' - if tp.abi: - abi = tp.abi + ' ' - else: - abi = '' - name_and_arguments = '%s_cffi_d_%s(%s)' % (abi, name, repr_arguments) - prnt('static %s' % (tp.result.get_c_name(name_and_arguments),)) - prnt('{') - call_arguments = ', '.join(call_arguments) - result_code = 'return ' - if isinstance(tp.result, model.VoidType): - result_code = '' - prnt(' %s%s(%s);' % (result_code, name, call_arguments)) - prnt('}') - # - prnt('#ifndef PYPY_VERSION') # ------------------------------ - # - prnt('static PyObject *') - prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) - prnt('{') - # - context = 'argument of %s' % name - for i, type in enumerate(tp.args): - arg = type.get_c_name(' x%d' % i, context) - prnt(' %s;' % arg) - # - localvars = set() - freelines = set() - for type in tp.args: - self._extra_local_variables(type, localvars, freelines) - for decl in sorted(localvars): - prnt(' %s;' % (decl,)) - # - if not isinstance(tp.result, model.VoidType): - result_code = 'result = ' - context = 'result of %s' % name - result_decl = ' %s;' % tp.result.get_c_name(' result', context) - prnt(result_decl) - prnt(' PyObject *pyresult;') - else: - result_decl = None - result_code = '' - # - if len(tp.args) > 1: - rng = range(len(tp.args)) - for i in rng: - prnt(' PyObject *arg%d;' % i) - prnt() - prnt(' if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))' % ( - name, len(rng), len(rng), - ', '.join(['&arg%d' % i for i in rng]))) - prnt(' return NULL;') - prnt() - # - for i, type in enumerate(tp.args): - self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, - 'return NULL') - prnt() - # - prnt(' Py_BEGIN_ALLOW_THREADS') - prnt(' _cffi_restore_errno();') - call_arguments = ['x%d' % i for i in range(len(tp.args))] - call_arguments = ', '.join(call_arguments) - prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) - prnt(' _cffi_save_errno();') - prnt(' Py_END_ALLOW_THREADS') - prnt() - # - prnt(' (void)self; /* unused */') - if numargs == 0: - prnt(' (void)noarg; /* unused */') - if result_code: - prnt(' pyresult = %s;' % - self._convert_expr_from_c(tp.result, 'result', 'result type')) - for freeline in freelines: - prnt(' ' + freeline) - prnt(' return pyresult;') - else: - for freeline in freelines: - prnt(' ' + freeline) - prnt(' Py_INCREF(Py_None);') - prnt(' return Py_None;') - prnt('}') - # - prnt('#else') # ------------------------------ - # - # the PyPy version: need to replace struct/union arguments with - # pointers, and if the result is a struct/union, insert a first - # arg that is a pointer to the result. We also do that for - # complex args and return type. - def need_indirection(type): - return (isinstance(type, model.StructOrUnion) or - (isinstance(type, model.PrimitiveType) and - type.is_complex_type())) - difference = False - arguments = [] - call_arguments = [] - context = 'argument of %s' % name - for i, type in enumerate(tp.args): - indirection = '' - if need_indirection(type): - indirection = '*' - difference = True - arg = type.get_c_name(' %sx%d' % (indirection, i), context) - arguments.append(arg) - call_arguments.append('%sx%d' % (indirection, i)) - tp_result = tp.result - if need_indirection(tp_result): - context = 'result of %s' % name - arg = tp_result.get_c_name(' *result', context) - arguments.insert(0, arg) - tp_result = model.void_type - result_decl = None - result_code = '*result = ' - difference = True - if difference: - repr_arguments = ', '.join(arguments) - repr_arguments = repr_arguments or 'void' - name_and_arguments = '%s_cffi_f_%s(%s)' % (abi, name, - repr_arguments) - prnt('static %s' % (tp_result.get_c_name(name_and_arguments),)) - prnt('{') - if result_decl: - prnt(result_decl) - call_arguments = ', '.join(call_arguments) - prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) - if result_decl: - prnt(' return result;') - prnt('}') - else: - prnt('# define _cffi_f_%s _cffi_d_%s' % (name, name)) - # - prnt('#endif') # ------------------------------ - prnt() - - def _generate_cpy_function_ctx(self, tp, name): - if tp.ellipsis and not self.target_is_python: - self._generate_cpy_constant_ctx(tp, name) - return - type_index = self._typesdict[tp.as_raw_function()] - numargs = len(tp.args) - if self.target_is_python: - meth_kind = OP_DLOPEN_FUNC - elif numargs == 0: - meth_kind = OP_CPYTHON_BLTN_N # 'METH_NOARGS' - elif numargs == 1: - meth_kind = OP_CPYTHON_BLTN_O # 'METH_O' - else: - meth_kind = OP_CPYTHON_BLTN_V # 'METH_VARARGS' - self._lsts["global"].append( - GlobalExpr(name, '_cffi_f_%s' % name, - CffiOp(meth_kind, type_index), - size='_cffi_d_%s' % name)) - - # ---------- - # named structs or unions - - def _field_type(self, tp_struct, field_name, tp_field): - if isinstance(tp_field, model.ArrayType): - actual_length = tp_field.length - if actual_length == '...': - ptr_struct_name = tp_struct.get_c_name('*') - actual_length = '_cffi_array_len(((%s)0)->%s)' % ( - ptr_struct_name, field_name) - tp_item = self._field_type(tp_struct, '%s[0]' % field_name, - tp_field.item) - tp_field = model.ArrayType(tp_item, actual_length) - return tp_field - - def _struct_collecttype(self, tp): - self._do_collect_type(tp) - if self.target_is_python: - # also requires nested anon struct/unions in ABI mode, recursively - for fldtype in tp.anonymous_struct_fields(): - self._struct_collecttype(fldtype) - - def _struct_decl(self, tp, cname, approxname): - if tp.fldtypes is None: - return - prnt = self._prnt - checkfuncname = '_cffi_checkfld_%s' % (approxname,) - prnt('_CFFI_UNUSED_FN') - prnt('static void %s(%s *p)' % (checkfuncname, cname)) - prnt('{') - prnt(' /* only to generate compile-time warnings or errors */') - prnt(' (void)p;') - for fname, ftype, fbitsize, fqual in self._enum_fields(tp): - try: - if ftype.is_integer_type() or fbitsize >= 0: - # accept all integers, but complain on float or double - if fname != '': - prnt(" (void)((p->%s) | 0); /* check that '%s.%s' is " - "an integer */" % (fname, cname, fname)) - continue - # only accept exactly the type declared, except that '[]' - # is interpreted as a '*' and so will match any array length. - # (It would also match '*', but that's harder to detect...) - while (isinstance(ftype, model.ArrayType) - and (ftype.length is None or ftype.length == '...')): - ftype = ftype.item - fname = fname + '[0]' - prnt(' { %s = &p->%s; (void)tmp; }' % ( - ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), - fname)) - except VerificationError as e: - prnt(' /* %s */' % str(e)) # cannot verify it, ignore - prnt('}') - prnt('struct _cffi_align_%s { char x; %s y; };' % (approxname, cname)) - prnt() - - def _struct_ctx(self, tp, cname, approxname, named_ptr=None): - type_index = self._typesdict[tp] - reason_for_not_expanding = None - flags = [] - if isinstance(tp, model.UnionType): - flags.append("_CFFI_F_UNION") - if tp.fldtypes is None: - flags.append("_CFFI_F_OPAQUE") - reason_for_not_expanding = "opaque" - if (tp not in self.ffi._parser._included_declarations and - (named_ptr is None or - named_ptr not in self.ffi._parser._included_declarations)): - if tp.fldtypes is None: - pass # opaque - elif tp.partial or any(tp.anonymous_struct_fields()): - pass # field layout obtained silently from the C compiler - else: - flags.append("_CFFI_F_CHECK_FIELDS") - if tp.packed: - if tp.packed > 1: - raise NotImplementedError( - "%r is declared with 'pack=%r'; only 0 or 1 are " - "supported in API mode (try to use \"...;\", which " - "does not require a 'pack' declaration)" % - (tp, tp.packed)) - flags.append("_CFFI_F_PACKED") - else: - flags.append("_CFFI_F_EXTERNAL") - reason_for_not_expanding = "external" - flags = '|'.join(flags) or '0' - c_fields = [] - if reason_for_not_expanding is None: - enumfields = list(self._enum_fields(tp)) - for fldname, fldtype, fbitsize, fqual in enumfields: - fldtype = self._field_type(tp, fldname, fldtype) - self._check_not_opaque(fldtype, - "field '%s.%s'" % (tp.name, fldname)) - # cname is None for _add_missing_struct_unions() only - op = OP_NOOP - if fbitsize >= 0: - op = OP_BITFIELD - size = '%d /* bits */' % fbitsize - elif cname is None or ( - isinstance(fldtype, model.ArrayType) and - fldtype.length is None): - size = '(size_t)-1' - else: - size = 'sizeof(((%s)0)->%s)' % ( - tp.get_c_name('*') if named_ptr is None - else named_ptr.name, - fldname) - if cname is None or fbitsize >= 0: - offset = '(size_t)-1' - elif named_ptr is not None: - offset = '(size_t)(((char *)&((%s)4096)->%s) - (char *)4096)' % ( - named_ptr.name, fldname) - else: - offset = 'offsetof(%s, %s)' % (tp.get_c_name(''), fldname) - c_fields.append( - FieldExpr(fldname, offset, size, fbitsize, - CffiOp(op, self._typesdict[fldtype]))) - first_field_index = len(self._lsts["field"]) - self._lsts["field"].extend(c_fields) - # - if cname is None: # unknown name, for _add_missing_struct_unions - size = '(size_t)-2' - align = -2 - comment = "unnamed" - else: - if named_ptr is not None: - size = 'sizeof(*(%s)0)' % (named_ptr.name,) - align = '-1 /* unknown alignment */' - else: - size = 'sizeof(%s)' % (cname,) - align = 'offsetof(struct _cffi_align_%s, y)' % (approxname,) - comment = None - else: - size = '(size_t)-1' - align = -1 - first_field_index = -1 - comment = reason_for_not_expanding - self._lsts["struct_union"].append( - StructUnionExpr(tp.name, type_index, flags, size, align, comment, - first_field_index, c_fields)) - self._seen_struct_unions.add(tp) - - def _check_not_opaque(self, tp, location): - while isinstance(tp, model.ArrayType): - tp = tp.item - if isinstance(tp, model.StructOrUnion) and tp.fldtypes is None: - raise TypeError( - "%s is of an opaque type (not declared in cdef())" % location) - - def _add_missing_struct_unions(self): - # not very nice, but some struct declarations might be missing - # because they don't have any known C name. Check that they are - # not partial (we can't complete or verify them!) and emit them - # anonymously. - lst = list(self._struct_unions.items()) - lst.sort(key=lambda tp_order: tp_order[1]) - for tp, order in lst: - if tp not in self._seen_struct_unions: - if tp.partial: - raise NotImplementedError("internal inconsistency: %r is " - "partial but was not seen at " - "this point" % (tp,)) - if tp.name.startswith('$') and tp.name[1:].isdigit(): - approxname = tp.name[1:] - elif tp.name == '_IO_FILE' and tp.forcename == 'FILE': - approxname = 'FILE' - self._typedef_ctx(tp, 'FILE') - else: - raise NotImplementedError("internal inconsistency: %r" % - (tp,)) - self._struct_ctx(tp, None, approxname) - - def _generate_cpy_struct_collecttype(self, tp, name): - self._struct_collecttype(tp) - _generate_cpy_union_collecttype = _generate_cpy_struct_collecttype - - def _struct_names(self, tp): - cname = tp.get_c_name('') - if ' ' in cname: - return cname, cname.replace(' ', '_') - else: - return cname, '_' + cname - - def _generate_cpy_struct_decl(self, tp, name): - self._struct_decl(tp, *self._struct_names(tp)) - _generate_cpy_union_decl = _generate_cpy_struct_decl - - def _generate_cpy_struct_ctx(self, tp, name): - self._struct_ctx(tp, *self._struct_names(tp)) - _generate_cpy_union_ctx = _generate_cpy_struct_ctx - - # ---------- - # 'anonymous' declarations. These are produced for anonymous structs - # or unions; the 'name' is obtained by a typedef. - - def _generate_cpy_anonymous_collecttype(self, tp, name): - if isinstance(tp, model.EnumType): - self._generate_cpy_enum_collecttype(tp, name) - else: - self._struct_collecttype(tp) - - def _generate_cpy_anonymous_decl(self, tp, name): - if isinstance(tp, model.EnumType): - self._generate_cpy_enum_decl(tp) - else: - self._struct_decl(tp, name, 'typedef_' + name) - - def _generate_cpy_anonymous_ctx(self, tp, name): - if isinstance(tp, model.EnumType): - self._enum_ctx(tp, name) - else: - self._struct_ctx(tp, name, 'typedef_' + name) - - # ---------- - # constants, declared with "static const ..." - - def _generate_cpy_const(self, is_int, name, tp=None, category='const', - check_value=None): - if (category, name) in self._seen_constants: - raise VerificationError( - "duplicate declaration of %s '%s'" % (category, name)) - self._seen_constants.add((category, name)) - # - prnt = self._prnt - funcname = '_cffi_%s_%s' % (category, name) - if is_int: - prnt('static int %s(unsigned long long *o)' % funcname) - prnt('{') - prnt(' int n = (%s) <= 0;' % (name,)) - prnt(' *o = (unsigned long long)((%s) | 0);' - ' /* check that %s is an integer */' % (name, name)) - if check_value is not None: - if check_value > 0: - check_value = '%dU' % (check_value,) - prnt(' if (!_cffi_check_int(*o, n, %s))' % (check_value,)) - prnt(' n |= 2;') - prnt(' return n;') - prnt('}') - else: - assert check_value is None - prnt('static void %s(char *o)' % funcname) - prnt('{') - prnt(' *(%s)o = %s;' % (tp.get_c_name('*'), name)) - prnt('}') - prnt() - - def _generate_cpy_constant_collecttype(self, tp, name): - is_int = tp.is_integer_type() - if not is_int or self.target_is_python: - self._do_collect_type(tp) - - def _generate_cpy_constant_decl(self, tp, name): - is_int = tp.is_integer_type() - self._generate_cpy_const(is_int, name, tp) - - def _generate_cpy_constant_ctx(self, tp, name): - if not self.target_is_python and tp.is_integer_type(): - type_op = CffiOp(OP_CONSTANT_INT, -1) - else: - if self.target_is_python: - const_kind = OP_DLOPEN_CONST - else: - const_kind = OP_CONSTANT - type_index = self._typesdict[tp] - type_op = CffiOp(const_kind, type_index) - self._lsts["global"].append( - GlobalExpr(name, '_cffi_const_%s' % name, type_op)) - - # ---------- - # enums - - def _generate_cpy_enum_collecttype(self, tp, name): - self._do_collect_type(tp) - - def _generate_cpy_enum_decl(self, tp, name=None): - for enumerator in tp.enumerators: - self._generate_cpy_const(True, enumerator) - - def _enum_ctx(self, tp, cname): - type_index = self._typesdict[tp] - type_op = CffiOp(OP_ENUM, -1) - if self.target_is_python: - tp.check_not_partial() - for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): - self._lsts["global"].append( - GlobalExpr(enumerator, '_cffi_const_%s' % enumerator, type_op, - check_value=enumvalue)) - # - if cname is not None and '$' not in cname and not self.target_is_python: - size = "sizeof(%s)" % cname - signed = "((%s)-1) <= 0" % cname - else: - basetp = tp.build_baseinttype(self.ffi, []) - size = self.ffi.sizeof(basetp) - signed = int(int(self.ffi.cast(basetp, -1)) < 0) - allenums = ",".join(tp.enumerators) - self._lsts["enum"].append( - EnumExpr(tp.name, type_index, size, signed, allenums)) - - def _generate_cpy_enum_ctx(self, tp, name): - self._enum_ctx(tp, tp._get_c_name()) - - # ---------- - # macros: for now only for integers - - def _generate_cpy_macro_collecttype(self, tp, name): - pass - - def _generate_cpy_macro_decl(self, tp, name): - if tp == '...': - check_value = None - else: - check_value = tp # an integer - self._generate_cpy_const(True, name, check_value=check_value) - - def _generate_cpy_macro_ctx(self, tp, name): - if tp == '...': - if self.target_is_python: - raise VerificationError( - "cannot use the syntax '...' in '#define %s ...' when " - "using the ABI mode" % (name,)) - check_value = None - else: - check_value = tp # an integer - type_op = CffiOp(OP_CONSTANT_INT, -1) - self._lsts["global"].append( - GlobalExpr(name, '_cffi_const_%s' % name, type_op, - check_value=check_value)) - - # ---------- - # global variables - - def _global_type(self, tp, global_name): - if isinstance(tp, model.ArrayType): - actual_length = tp.length - if actual_length == '...': - actual_length = '_cffi_array_len(%s)' % (global_name,) - tp_item = self._global_type(tp.item, '%s[0]' % global_name) - tp = model.ArrayType(tp_item, actual_length) - return tp - - def _generate_cpy_variable_collecttype(self, tp, name): - self._do_collect_type(self._global_type(tp, name)) - - def _generate_cpy_variable_decl(self, tp, name): - prnt = self._prnt - tp = self._global_type(tp, name) - if isinstance(tp, model.ArrayType) and tp.length is None: - tp = tp.item - ampersand = '' - else: - ampersand = '&' - # This code assumes that casts from "tp *" to "void *" is a - # no-op, i.e. a function that returns a "tp *" can be called - # as if it returned a "void *". This should be generally true - # on any modern machine. The only exception to that rule (on - # uncommon architectures, and as far as I can tell) might be - # if 'tp' were a function type, but that is not possible here. - # (If 'tp' is a function _pointer_ type, then casts from "fn_t - # **" to "void *" are again no-ops, as far as I can tell.) - decl = '*_cffi_var_%s(void)' % (name,) - prnt('static ' + tp.get_c_name(decl, quals=self._current_quals)) - prnt('{') - prnt(' return %s(%s);' % (ampersand, name)) - prnt('}') - prnt() - - def _generate_cpy_variable_ctx(self, tp, name): - tp = self._global_type(tp, name) - type_index = self._typesdict[tp] - if self.target_is_python: - op = OP_GLOBAL_VAR - else: - op = OP_GLOBAL_VAR_F - self._lsts["global"].append( - GlobalExpr(name, '_cffi_var_%s' % name, CffiOp(op, type_index))) - - # ---------- - # extern "Python" - - def _generate_cpy_extern_python_collecttype(self, tp, name): - assert isinstance(tp, model.FunctionPtrType) - self._do_collect_type(tp) - _generate_cpy_dllexport_python_collecttype = \ - _generate_cpy_extern_python_plus_c_collecttype = \ - _generate_cpy_extern_python_collecttype - - def _extern_python_decl(self, tp, name, tag_and_space): - prnt = self._prnt - if isinstance(tp.result, model.VoidType): - size_of_result = '0' - else: - context = 'result of %s' % name - size_of_result = '(int)sizeof(%s)' % ( - tp.result.get_c_name('', context),) - prnt('static struct _cffi_externpy_s _cffi_externpy__%s =' % name) - prnt(' { "%s.%s", %s, 0, 0 };' % ( - self.module_name, name, size_of_result)) - prnt() - # - arguments = [] - context = 'argument of %s' % name - for i, type in enumerate(tp.args): - arg = type.get_c_name(' a%d' % i, context) - arguments.append(arg) - # - repr_arguments = ', '.join(arguments) - repr_arguments = repr_arguments or 'void' - name_and_arguments = '%s(%s)' % (name, repr_arguments) - if tp.abi == "__stdcall": - name_and_arguments = '_cffi_stdcall ' + name_and_arguments - # - def may_need_128_bits(tp): - return (isinstance(tp, model.PrimitiveType) and - tp.name == 'long double') - # - size_of_a = max(len(tp.args)*8, 8) - if may_need_128_bits(tp.result): - size_of_a = max(size_of_a, 16) - if isinstance(tp.result, model.StructOrUnion): - size_of_a = 'sizeof(%s) > %d ? sizeof(%s) : %d' % ( - tp.result.get_c_name(''), size_of_a, - tp.result.get_c_name(''), size_of_a) - prnt('%s%s' % (tag_and_space, tp.result.get_c_name(name_and_arguments))) - prnt('{') - prnt(' char a[%s];' % size_of_a) - prnt(' char *p = a;') - for i, type in enumerate(tp.args): - arg = 'a%d' % i - if (isinstance(type, model.StructOrUnion) or - may_need_128_bits(type)): - arg = '&' + arg - type = model.PointerType(type) - prnt(' *(%s)(p + %d) = %s;' % (type.get_c_name('*'), i*8, arg)) - prnt(' _cffi_call_python(&_cffi_externpy__%s, p);' % name) - if not isinstance(tp.result, model.VoidType): - prnt(' return *(%s)p;' % (tp.result.get_c_name('*'),)) - prnt('}') - prnt() - self._num_externpy += 1 - - def _generate_cpy_extern_python_decl(self, tp, name): - self._extern_python_decl(tp, name, 'static ') - - def _generate_cpy_dllexport_python_decl(self, tp, name): - self._extern_python_decl(tp, name, 'CFFI_DLLEXPORT ') - - def _generate_cpy_extern_python_plus_c_decl(self, tp, name): - self._extern_python_decl(tp, name, '') - - def _generate_cpy_extern_python_ctx(self, tp, name): - if self.target_is_python: - raise VerificationError( - "cannot use 'extern \"Python\"' in the ABI mode") - if tp.ellipsis: - raise NotImplementedError("a vararg function is extern \"Python\"") - type_index = self._typesdict[tp] - type_op = CffiOp(OP_EXTERN_PYTHON, type_index) - self._lsts["global"].append( - GlobalExpr(name, '&_cffi_externpy__%s' % name, type_op, name)) - - _generate_cpy_dllexport_python_ctx = \ - _generate_cpy_extern_python_plus_c_ctx = \ - _generate_cpy_extern_python_ctx - - def _print_string_literal_in_array(self, s): - prnt = self._prnt - prnt('// # NB. this is not a string because of a size limit in MSVC') - if not isinstance(s, bytes): # unicode - s = s.encode('utf-8') # -> bytes - else: - s.decode('utf-8') # got bytes, check for valid utf-8 - try: - s.decode('ascii') - except UnicodeDecodeError: - s = b'# -*- encoding: utf8 -*-\n' + s - for line in s.splitlines(True): - comment = line - if type('//') is bytes: # python2 - line = map(ord, line) # make a list of integers - else: # python3 - # type(line) is bytes, which enumerates like a list of integers - comment = ascii(comment)[1:-1] - prnt(('// ' + comment).rstrip()) - printed_line = '' - for c in line: - if len(printed_line) >= 76: - prnt(printed_line) - printed_line = '' - printed_line += '%d,' % (c,) - prnt(printed_line) - - # ---------- - # emitting the opcodes for individual types - - def _emit_bytecode_VoidType(self, tp, index): - self.cffi_types[index] = CffiOp(OP_PRIMITIVE, PRIM_VOID) - - def _emit_bytecode_PrimitiveType(self, tp, index): - prim_index = PRIMITIVE_TO_INDEX[tp.name] - self.cffi_types[index] = CffiOp(OP_PRIMITIVE, prim_index) - - def _emit_bytecode_UnknownIntegerType(self, tp, index): - s = ('_cffi_prim_int(sizeof(%s), (\n' - ' ((%s)-1) | 0 /* check that %s is an integer type */\n' - ' ) <= 0)' % (tp.name, tp.name, tp.name)) - self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) - - def _emit_bytecode_UnknownFloatType(self, tp, index): - s = ('_cffi_prim_float(sizeof(%s) *\n' - ' (((%s)1) / 2) * 2 /* integer => 0, float => 1 */\n' - ' )' % (tp.name, tp.name)) - self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) - - def _emit_bytecode_RawFunctionType(self, tp, index): - self.cffi_types[index] = CffiOp(OP_FUNCTION, self._typesdict[tp.result]) - index += 1 - for tp1 in tp.args: - realindex = self._typesdict[tp1] - if index != realindex: - if isinstance(tp1, model.PrimitiveType): - self._emit_bytecode_PrimitiveType(tp1, index) - else: - self.cffi_types[index] = CffiOp(OP_NOOP, realindex) - index += 1 - flags = int(tp.ellipsis) - if tp.abi is not None: - if tp.abi == '__stdcall': - flags |= 2 - else: - raise NotImplementedError("abi=%r" % (tp.abi,)) - self.cffi_types[index] = CffiOp(OP_FUNCTION_END, flags) - - def _emit_bytecode_PointerType(self, tp, index): - self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[tp.totype]) - - _emit_bytecode_ConstPointerType = _emit_bytecode_PointerType - _emit_bytecode_NamedPointerType = _emit_bytecode_PointerType - - def _emit_bytecode_FunctionPtrType(self, tp, index): - raw = tp.as_raw_function() - self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[raw]) - - def _emit_bytecode_ArrayType(self, tp, index): - item_index = self._typesdict[tp.item] - if tp.length is None: - self.cffi_types[index] = CffiOp(OP_OPEN_ARRAY, item_index) - elif tp.length == '...': - raise VerificationError( - "type %s badly placed: the '...' array length can only be " - "used on global arrays or on fields of structures" % ( - str(tp).replace('/*...*/', '...'),)) - else: - assert self.cffi_types[index + 1] == 'LEN' - self.cffi_types[index] = CffiOp(OP_ARRAY, item_index) - self.cffi_types[index + 1] = CffiOp(None, str(tp.length)) - - def _emit_bytecode_StructType(self, tp, index): - struct_index = self._struct_unions[tp] - self.cffi_types[index] = CffiOp(OP_STRUCT_UNION, struct_index) - _emit_bytecode_UnionType = _emit_bytecode_StructType - - def _emit_bytecode_EnumType(self, tp, index): - enum_index = self._enums[tp] - self.cffi_types[index] = CffiOp(OP_ENUM, enum_index) - - -if sys.version_info >= (3,): - NativeIO = io.StringIO -else: - class NativeIO(io.BytesIO): - def write(self, s): - if isinstance(s, unicode): - s = s.encode('ascii') - super(NativeIO, self).write(s) - -def _is_file_like(maybefile): - # compare to xml.etree.ElementTree._get_writer - return hasattr(maybefile, 'write') - -def _make_c_or_py_source(ffi, module_name, preamble, target_file, verbose): - if verbose: - print("generating %s" % (target_file,)) - recompiler = Recompiler(ffi, module_name, - target_is_python=(preamble is None)) - recompiler.collect_type_table() - recompiler.collect_step_tables() - if _is_file_like(target_file): - recompiler.write_source_to_f(target_file, preamble) - return True - f = NativeIO() - recompiler.write_source_to_f(f, preamble) - output = f.getvalue() - try: - with open(target_file, 'r') as f1: - if f1.read(len(output) + 1) != output: - raise IOError - if verbose: - print("(already up-to-date)") - return False # already up-to-date - except IOError: - tmp_file = '%s.~%d' % (target_file, os.getpid()) - with open(tmp_file, 'w') as f1: - f1.write(output) - try: - os.rename(tmp_file, target_file) - except OSError: - os.unlink(target_file) - os.rename(tmp_file, target_file) - return True - -def make_c_source(ffi, module_name, preamble, target_c_file, verbose=False): - assert preamble is not None - return _make_c_or_py_source(ffi, module_name, preamble, target_c_file, - verbose) - -def make_py_source(ffi, module_name, target_py_file, verbose=False): - return _make_c_or_py_source(ffi, module_name, None, target_py_file, - verbose) - -def _modname_to_file(outputdir, modname, extension): - parts = modname.split('.') - try: - os.makedirs(os.path.join(outputdir, *parts[:-1])) - except OSError: - pass - parts[-1] += extension - return os.path.join(outputdir, *parts), parts - - -# Aaargh. Distutils is not tested at all for the purpose of compiling -# DLLs that are not extension modules. Here are some hacks to work -# around that, in the _patch_for_*() functions... - -def _patch_meth(patchlist, cls, name, new_meth): - old = getattr(cls, name) - patchlist.append((cls, name, old)) - setattr(cls, name, new_meth) - return old - -def _unpatch_meths(patchlist): - for cls, name, old_meth in reversed(patchlist): - setattr(cls, name, old_meth) - -def _patch_for_embedding(patchlist): - if sys.platform == 'win32': - # we must not remove the manifest when building for embedding! - # FUTURE: this module was removed in setuptools 74; this is likely dead code and should be removed, - # since the toolchain it supports (VS2005-2008) is also long dead. - from cffi._shimmed_dist_utils import MSVCCompiler - if MSVCCompiler is not None: - _patch_meth(patchlist, MSVCCompiler, '_remove_visual_c_ref', - lambda self, manifest_file: manifest_file) - - if sys.platform == 'darwin': - # we must not make a '-bundle', but a '-dynamiclib' instead - from cffi._shimmed_dist_utils import CCompiler - def my_link_shared_object(self, *args, **kwds): - if '-bundle' in self.linker_so: - self.linker_so = list(self.linker_so) - i = self.linker_so.index('-bundle') - self.linker_so[i] = '-dynamiclib' - return old_link_shared_object(self, *args, **kwds) - old_link_shared_object = _patch_meth(patchlist, CCompiler, - 'link_shared_object', - my_link_shared_object) - -def _patch_for_target(patchlist, target): - from cffi._shimmed_dist_utils import build_ext - # if 'target' is different from '*', we need to patch some internal - # method to just return this 'target' value, instead of having it - # built from module_name - if target.endswith('.*'): - target = target[:-2] - if sys.platform == 'win32': - target += '.dll' - elif sys.platform == 'darwin': - target += '.dylib' - else: - target += '.so' - _patch_meth(patchlist, build_ext, 'get_ext_filename', - lambda self, ext_name: target) - - -def recompile(ffi, module_name, preamble, tmpdir='.', call_c_compiler=True, - c_file=None, source_extension='.c', extradir=None, - compiler_verbose=1, target=None, debug=None, - uses_ffiplatform=True, **kwds): - if not isinstance(module_name, str): - module_name = module_name.encode('ascii') - if ffi._windows_unicode: - ffi._apply_windows_unicode(kwds) - if preamble is not None: - if call_c_compiler and _is_file_like(c_file): - raise TypeError("Writing to file-like objects is not supported " - "with call_c_compiler=True") - embedding = (ffi._embedding is not None) - if embedding: - ffi._apply_embedding_fix(kwds) - if c_file is None: - c_file, parts = _modname_to_file(tmpdir, module_name, - source_extension) - if extradir: - parts = [extradir] + parts - ext_c_file = os.path.join(*parts) - else: - ext_c_file = c_file - # - if target is None: - if embedding: - target = '%s.*' % module_name - else: - target = '*' - # - if uses_ffiplatform: - ext = ffiplatform.get_extension(ext_c_file, module_name, **kwds) - else: - ext = None - updated = make_c_source(ffi, module_name, preamble, c_file, - verbose=compiler_verbose) - if call_c_compiler: - patchlist = [] - cwd = os.getcwd() - try: - if embedding: - _patch_for_embedding(patchlist) - if target != '*': - _patch_for_target(patchlist, target) - if compiler_verbose: - if tmpdir == '.': - msg = 'the current directory is' - else: - msg = 'setting the current directory to' - print('%s %r' % (msg, os.path.abspath(tmpdir))) - os.chdir(tmpdir) - outputfilename = ffiplatform.compile('.', ext, - compiler_verbose, debug) - finally: - os.chdir(cwd) - _unpatch_meths(patchlist) - return outputfilename - else: - return ext, updated - else: - if c_file is None: - c_file, _ = _modname_to_file(tmpdir, module_name, '.py') - updated = make_py_source(ffi, module_name, c_file, - verbose=compiler_verbose) - if call_c_compiler: - return c_file - else: - return None, updated - diff --git a/myenv/lib/python3.12/site-packages/cffi/setuptools_ext.py b/myenv/lib/python3.12/site-packages/cffi/setuptools_ext.py deleted file mode 100644 index 5cdd246..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/setuptools_ext.py +++ /dev/null @@ -1,229 +0,0 @@ -import os -import sys -import sysconfig - -try: - basestring -except NameError: - # Python 3.x - basestring = str - -def error(msg): - from cffi._shimmed_dist_utils import DistutilsSetupError - raise DistutilsSetupError(msg) - - -def execfile(filename, glob): - # We use execfile() (here rewritten for Python 3) instead of - # __import__() to load the build script. The problem with - # a normal import is that in some packages, the intermediate - # __init__.py files may already try to import the file that - # we are generating. - with open(filename) as f: - src = f.read() - src += '\n' # Python 2.6 compatibility - code = compile(src, filename, 'exec') - exec(code, glob, glob) - - -def add_cffi_module(dist, mod_spec): - from cffi.api import FFI - - if not isinstance(mod_spec, basestring): - error("argument to 'cffi_modules=...' must be a str or a list of str," - " not %r" % (type(mod_spec).__name__,)) - mod_spec = str(mod_spec) - try: - build_file_name, ffi_var_name = mod_spec.split(':') - except ValueError: - error("%r must be of the form 'path/build.py:ffi_variable'" % - (mod_spec,)) - if not os.path.exists(build_file_name): - ext = '' - rewritten = build_file_name.replace('.', '/') + '.py' - if os.path.exists(rewritten): - ext = ' (rewrite cffi_modules to [%r])' % ( - rewritten + ':' + ffi_var_name,) - error("%r does not name an existing file%s" % (build_file_name, ext)) - - mod_vars = {'__name__': '__cffi__', '__file__': build_file_name} - execfile(build_file_name, mod_vars) - - try: - ffi = mod_vars[ffi_var_name] - except KeyError: - error("%r: object %r not found in module" % (mod_spec, - ffi_var_name)) - if not isinstance(ffi, FFI): - ffi = ffi() # maybe it's a function instead of directly an ffi - if not isinstance(ffi, FFI): - error("%r is not an FFI instance (got %r)" % (mod_spec, - type(ffi).__name__)) - if not hasattr(ffi, '_assigned_source'): - error("%r: the set_source() method was not called" % (mod_spec,)) - module_name, source, source_extension, kwds = ffi._assigned_source - if ffi._windows_unicode: - kwds = kwds.copy() - ffi._apply_windows_unicode(kwds) - - if source is None: - _add_py_module(dist, ffi, module_name) - else: - _add_c_module(dist, ffi, module_name, source, source_extension, kwds) - -def _set_py_limited_api(Extension, kwds): - """ - Add py_limited_api to kwds if setuptools >= 26 is in use. - Do not alter the setting if it already exists. - Setuptools takes care of ignoring the flag on Python 2 and PyPy. - - CPython itself should ignore the flag in a debugging version - (by not listing .abi3.so in the extensions it supports), but - it doesn't so far, creating troubles. That's why we check - for "not hasattr(sys, 'gettotalrefcount')" (the 2.7 compatible equivalent - of 'd' not in sys.abiflags). (http://bugs.python.org/issue28401) - - On Windows, with CPython <= 3.4, it's better not to use py_limited_api - because virtualenv *still* doesn't copy PYTHON3.DLL on these versions. - Recently (2020) we started shipping only >= 3.5 wheels, though. So - we'll give it another try and set py_limited_api on Windows >= 3.5. - """ - from cffi._shimmed_dist_utils import log - from cffi import recompiler - - if ('py_limited_api' not in kwds and not hasattr(sys, 'gettotalrefcount') - and recompiler.USE_LIMITED_API): - import setuptools - try: - setuptools_major_version = int(setuptools.__version__.partition('.')[0]) - if setuptools_major_version >= 26: - kwds['py_limited_api'] = True - except ValueError: # certain development versions of setuptools - # If we don't know the version number of setuptools, we - # try to set 'py_limited_api' anyway. At worst, we get a - # warning. - kwds['py_limited_api'] = True - - if sysconfig.get_config_var("Py_GIL_DISABLED"): - if kwds.get('py_limited_api'): - log.info("Ignoring py_limited_api=True for free-threaded build.") - - kwds['py_limited_api'] = False - - if kwds.get('py_limited_api') is False: - # avoid setting Py_LIMITED_API if py_limited_api=False - # which _cffi_include.h does unless _CFFI_NO_LIMITED_API is defined - kwds.setdefault("define_macros", []).append(("_CFFI_NO_LIMITED_API", None)) - return kwds - -def _add_c_module(dist, ffi, module_name, source, source_extension, kwds): - # We are a setuptools extension. Need this build_ext for py_limited_api. - from setuptools.command.build_ext import build_ext - from cffi._shimmed_dist_utils import Extension, log, mkpath - from cffi import recompiler - - allsources = ['$PLACEHOLDER'] - allsources.extend(kwds.pop('sources', [])) - kwds = _set_py_limited_api(Extension, kwds) - ext = Extension(name=module_name, sources=allsources, **kwds) - - def make_mod(tmpdir, pre_run=None): - c_file = os.path.join(tmpdir, module_name + source_extension) - log.info("generating cffi module %r" % c_file) - mkpath(tmpdir) - # a setuptools-only, API-only hook: called with the "ext" and "ffi" - # arguments just before we turn the ffi into C code. To use it, - # subclass the 'distutils.command.build_ext.build_ext' class and - # add a method 'def pre_run(self, ext, ffi)'. - if pre_run is not None: - pre_run(ext, ffi) - updated = recompiler.make_c_source(ffi, module_name, source, c_file) - if not updated: - log.info("already up-to-date") - return c_file - - if dist.ext_modules is None: - dist.ext_modules = [] - dist.ext_modules.append(ext) - - base_class = dist.cmdclass.get('build_ext', build_ext) - class build_ext_make_mod(base_class): - def run(self): - if ext.sources[0] == '$PLACEHOLDER': - pre_run = getattr(self, 'pre_run', None) - ext.sources[0] = make_mod(self.build_temp, pre_run) - base_class.run(self) - dist.cmdclass['build_ext'] = build_ext_make_mod - # NB. multiple runs here will create multiple 'build_ext_make_mod' - # classes. Even in this case the 'build_ext' command should be - # run once; but just in case, the logic above does nothing if - # called again. - - -def _add_py_module(dist, ffi, module_name): - from setuptools.command.build_py import build_py - from setuptools.command.build_ext import build_ext - from cffi._shimmed_dist_utils import log, mkpath - from cffi import recompiler - - def generate_mod(py_file): - log.info("generating cffi module %r" % py_file) - mkpath(os.path.dirname(py_file)) - updated = recompiler.make_py_source(ffi, module_name, py_file) - if not updated: - log.info("already up-to-date") - - base_class = dist.cmdclass.get('build_py', build_py) - class build_py_make_mod(base_class): - def run(self): - base_class.run(self) - module_path = module_name.split('.') - module_path[-1] += '.py' - generate_mod(os.path.join(self.build_lib, *module_path)) - def get_source_files(self): - # This is called from 'setup.py sdist' only. Exclude - # the generate .py module in this case. - saved_py_modules = self.py_modules - try: - if saved_py_modules: - self.py_modules = [m for m in saved_py_modules - if m != module_name] - return base_class.get_source_files(self) - finally: - self.py_modules = saved_py_modules - dist.cmdclass['build_py'] = build_py_make_mod - - # distutils and setuptools have no notion I could find of a - # generated python module. If we don't add module_name to - # dist.py_modules, then things mostly work but there are some - # combination of options (--root and --record) that will miss - # the module. So we add it here, which gives a few apparently - # harmless warnings about not finding the file outside the - # build directory. - # Then we need to hack more in get_source_files(); see above. - if dist.py_modules is None: - dist.py_modules = [] - dist.py_modules.append(module_name) - - # the following is only for "build_ext -i" - base_class_2 = dist.cmdclass.get('build_ext', build_ext) - class build_ext_make_mod(base_class_2): - def run(self): - base_class_2.run(self) - if self.inplace: - # from get_ext_fullpath() in distutils/command/build_ext.py - module_path = module_name.split('.') - package = '.'.join(module_path[:-1]) - build_py = self.get_finalized_command('build_py') - package_dir = build_py.get_package_dir(package) - file_name = module_path[-1] + '.py' - generate_mod(os.path.join(package_dir, file_name)) - dist.cmdclass['build_ext'] = build_ext_make_mod - -def cffi_modules(dist, attr, value): - assert attr == 'cffi_modules' - if isinstance(value, basestring): - value = [value] - - for cffi_module in value: - add_cffi_module(dist, cffi_module) diff --git a/myenv/lib/python3.12/site-packages/cffi/vengine_cpy.py b/myenv/lib/python3.12/site-packages/cffi/vengine_cpy.py deleted file mode 100644 index 02e6a47..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/vengine_cpy.py +++ /dev/null @@ -1,1087 +0,0 @@ -# -# DEPRECATED: implementation for ffi.verify() -# -import sys -from . import model -from .error import VerificationError -from . import _imp_emulation as imp - - -class VCPythonEngine(object): - _class_key = 'x' - _gen_python_module = True - - def __init__(self, verifier): - self.verifier = verifier - self.ffi = verifier.ffi - self._struct_pending_verification = {} - self._types_of_builtin_functions = {} - - def patch_extension_kwds(self, kwds): - pass - - def find_module(self, module_name, path, so_suffixes): - try: - f, filename, descr = imp.find_module(module_name, path) - except ImportError: - return None - if f is not None: - f.close() - # Note that after a setuptools installation, there are both .py - # and .so files with the same basename. The code here relies on - # imp.find_module() locating the .so in priority. - if descr[0] not in so_suffixes: - return None - return filename - - def collect_types(self): - self._typesdict = {} - self._generate("collecttype") - - def _prnt(self, what=''): - self._f.write(what + '\n') - - def _gettypenum(self, type): - # a KeyError here is a bug. please report it! :-) - return self._typesdict[type] - - def _do_collect_type(self, tp): - if ((not isinstance(tp, model.PrimitiveType) - or tp.name == 'long double') - and tp not in self._typesdict): - num = len(self._typesdict) - self._typesdict[tp] = num - - def write_source_to_f(self): - self.collect_types() - # - # The new module will have a _cffi_setup() function that receives - # objects from the ffi world, and that calls some setup code in - # the module. This setup code is split in several independent - # functions, e.g. one per constant. The functions are "chained" - # by ending in a tail call to each other. - # - # This is further split in two chained lists, depending on if we - # can do it at import-time or if we must wait for _cffi_setup() to - # provide us with the objects. This is needed because we - # need the values of the enum constants in order to build the - # that we may have to pass to _cffi_setup(). - # - # The following two 'chained_list_constants' items contains - # the head of these two chained lists, as a string that gives the - # call to do, if any. - self._chained_list_constants = ['((void)lib,0)', '((void)lib,0)'] - # - prnt = self._prnt - # first paste some standard set of lines that are mostly '#define' - prnt(cffimod_header) - prnt() - # then paste the C source given by the user, verbatim. - prnt(self.verifier.preamble) - prnt() - # - # call generate_cpy_xxx_decl(), for every xxx found from - # ffi._parser._declarations. This generates all the functions. - self._generate("decl") - # - # implement the function _cffi_setup_custom() as calling the - # head of the chained list. - self._generate_setup_custom() - prnt() - # - # produce the method table, including the entries for the - # generated Python->C function wrappers, which are done - # by generate_cpy_function_method(). - prnt('static PyMethodDef _cffi_methods[] = {') - self._generate("method") - prnt(' {"_cffi_setup", _cffi_setup, METH_VARARGS, NULL},') - prnt(' {NULL, NULL, 0, NULL} /* Sentinel */') - prnt('};') - prnt() - # - # standard init. - modname = self.verifier.get_module_name() - constants = self._chained_list_constants[False] - prnt('#if PY_MAJOR_VERSION >= 3') - prnt() - prnt('static struct PyModuleDef _cffi_module_def = {') - prnt(' PyModuleDef_HEAD_INIT,') - prnt(' "%s",' % modname) - prnt(' NULL,') - prnt(' -1,') - prnt(' _cffi_methods,') - prnt(' NULL, NULL, NULL, NULL') - prnt('};') - prnt() - prnt('PyMODINIT_FUNC') - prnt('PyInit_%s(void)' % modname) - prnt('{') - prnt(' PyObject *lib;') - prnt(' lib = PyModule_Create(&_cffi_module_def);') - prnt(' if (lib == NULL)') - prnt(' return NULL;') - prnt(' if (%s < 0 || _cffi_init() < 0) {' % (constants,)) - prnt(' Py_DECREF(lib);') - prnt(' return NULL;') - prnt(' }') - prnt('#if Py_GIL_DISABLED') - prnt(' PyUnstable_Module_SetGIL(lib, Py_MOD_GIL_NOT_USED);') - prnt('#endif') - prnt(' return lib;') - prnt('}') - prnt() - prnt('#else') - prnt() - prnt('PyMODINIT_FUNC') - prnt('init%s(void)' % modname) - prnt('{') - prnt(' PyObject *lib;') - prnt(' lib = Py_InitModule("%s", _cffi_methods);' % modname) - prnt(' if (lib == NULL)') - prnt(' return;') - prnt(' if (%s < 0 || _cffi_init() < 0)' % (constants,)) - prnt(' return;') - prnt(' return;') - prnt('}') - prnt() - prnt('#endif') - - def load_library(self, flags=None): - # XXX review all usages of 'self' here! - # import it as a new extension module - imp.acquire_lock() - try: - if hasattr(sys, "getdlopenflags"): - previous_flags = sys.getdlopenflags() - try: - if hasattr(sys, "setdlopenflags") and flags is not None: - sys.setdlopenflags(flags) - module = imp.load_dynamic(self.verifier.get_module_name(), - self.verifier.modulefilename) - except ImportError as e: - error = "importing %r: %s" % (self.verifier.modulefilename, e) - raise VerificationError(error) - finally: - if hasattr(sys, "setdlopenflags"): - sys.setdlopenflags(previous_flags) - finally: - imp.release_lock() - # - # call loading_cpy_struct() to get the struct layout inferred by - # the C compiler - self._load(module, 'loading') - # - # the C code will need the objects. Collect them in - # order in a list. - revmapping = dict([(value, key) - for (key, value) in self._typesdict.items()]) - lst = [revmapping[i] for i in range(len(revmapping))] - lst = list(map(self.ffi._get_cached_btype, lst)) - # - # build the FFILibrary class and instance and call _cffi_setup(). - # this will set up some fields like '_cffi_types', and only then - # it will invoke the chained list of functions that will really - # build (notably) the constant objects, as if they are - # pointers, and store them as attributes on the 'library' object. - class FFILibrary(object): - _cffi_python_module = module - _cffi_ffi = self.ffi - _cffi_dir = [] - def __dir__(self): - return FFILibrary._cffi_dir + list(self.__dict__) - library = FFILibrary() - if module._cffi_setup(lst, VerificationError, library): - import warnings - warnings.warn("reimporting %r might overwrite older definitions" - % (self.verifier.get_module_name())) - # - # finally, call the loaded_cpy_xxx() functions. This will perform - # the final adjustments, like copying the Python->C wrapper - # functions from the module to the 'library' object, and setting - # up the FFILibrary class with properties for the global C variables. - self._load(module, 'loaded', library=library) - module._cffi_original_ffi = self.ffi - module._cffi_types_of_builtin_funcs = self._types_of_builtin_functions - return library - - def _get_declarations(self): - lst = [(key, tp) for (key, (tp, qual)) in - self.ffi._parser._declarations.items()] - lst.sort() - return lst - - def _generate(self, step_name): - for name, tp in self._get_declarations(): - kind, realname = name.split(' ', 1) - try: - method = getattr(self, '_generate_cpy_%s_%s' % (kind, - step_name)) - except AttributeError: - raise VerificationError( - "not implemented in verify(): %r" % name) - try: - method(tp, realname) - except Exception as e: - model.attach_exception_info(e, name) - raise - - def _load(self, module, step_name, **kwds): - for name, tp in self._get_declarations(): - kind, realname = name.split(' ', 1) - method = getattr(self, '_%s_cpy_%s' % (step_name, kind)) - try: - method(tp, realname, module, **kwds) - except Exception as e: - model.attach_exception_info(e, name) - raise - - def _generate_nothing(self, tp, name): - pass - - def _loaded_noop(self, tp, name, module, **kwds): - pass - - # ---------- - - def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): - extraarg = '' - if isinstance(tp, model.PrimitiveType): - if tp.is_integer_type() and tp.name != '_Bool': - converter = '_cffi_to_c_int' - extraarg = ', %s' % tp.name - elif tp.is_complex_type(): - raise VerificationError( - "not implemented in verify(): complex types") - else: - converter = '(%s)_cffi_to_c_%s' % (tp.get_c_name(''), - tp.name.replace(' ', '_')) - errvalue = '-1' - # - elif isinstance(tp, model.PointerType): - self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, - tovar, errcode) - return - # - elif isinstance(tp, (model.StructOrUnion, model.EnumType)): - # a struct (not a struct pointer) as a function argument - self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' - % (tovar, self._gettypenum(tp), fromvar)) - self._prnt(' %s;' % errcode) - return - # - elif isinstance(tp, model.FunctionPtrType): - converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') - extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) - errvalue = 'NULL' - # - else: - raise NotImplementedError(tp) - # - self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) - self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( - tovar, tp.get_c_name(''), errvalue)) - self._prnt(' %s;' % errcode) - - def _extra_local_variables(self, tp, localvars, freelines): - if isinstance(tp, model.PointerType): - localvars.add('Py_ssize_t datasize') - localvars.add('struct _cffi_freeme_s *large_args_free = NULL') - freelines.add('if (large_args_free != NULL)' - ' _cffi_free_array_arguments(large_args_free);') - - def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): - self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') - self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( - self._gettypenum(tp), fromvar, tovar)) - self._prnt(' if (datasize != 0) {') - self._prnt(' %s = ((size_t)datasize) <= 640 ? ' - 'alloca((size_t)datasize) : NULL;' % (tovar,)) - self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' - '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) - self._prnt(' datasize, &large_args_free) < 0)') - self._prnt(' %s;' % errcode) - self._prnt(' }') - - def _convert_expr_from_c(self, tp, var, context): - if isinstance(tp, model.PrimitiveType): - if tp.is_integer_type() and tp.name != '_Bool': - return '_cffi_from_c_int(%s, %s)' % (var, tp.name) - elif tp.name != 'long double': - return '_cffi_from_c_%s(%s)' % (tp.name.replace(' ', '_'), var) - else: - return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): - return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, model.ArrayType): - return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( - var, self._gettypenum(model.PointerType(tp.item))) - elif isinstance(tp, model.StructOrUnion): - if tp.fldnames is None: - raise TypeError("'%s' is used as %s, but is opaque" % ( - tp._get_c_name(), context)) - return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - elif isinstance(tp, model.EnumType): - return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( - var, self._gettypenum(tp)) - else: - raise NotImplementedError(tp) - - # ---------- - # typedefs: generates no code so far - - _generate_cpy_typedef_collecttype = _generate_nothing - _generate_cpy_typedef_decl = _generate_nothing - _generate_cpy_typedef_method = _generate_nothing - _loading_cpy_typedef = _loaded_noop - _loaded_cpy_typedef = _loaded_noop - - # ---------- - # function declarations - - def _generate_cpy_function_collecttype(self, tp, name): - assert isinstance(tp, model.FunctionPtrType) - if tp.ellipsis: - self._do_collect_type(tp) - else: - # don't call _do_collect_type(tp) in this common case, - # otherwise test_autofilled_struct_as_argument fails - for type in tp.args: - self._do_collect_type(type) - self._do_collect_type(tp.result) - - def _generate_cpy_function_decl(self, tp, name): - assert isinstance(tp, model.FunctionPtrType) - if tp.ellipsis: - # cannot support vararg functions better than this: check for its - # exact type (including the fixed arguments), and build it as a - # constant function pointer (no CPython wrapper) - self._generate_cpy_const(False, name, tp) - return - prnt = self._prnt - numargs = len(tp.args) - if numargs == 0: - argname = 'noarg' - elif numargs == 1: - argname = 'arg0' - else: - argname = 'args' - prnt('static PyObject *') - prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) - prnt('{') - # - context = 'argument of %s' % name - for i, type in enumerate(tp.args): - prnt(' %s;' % type.get_c_name(' x%d' % i, context)) - # - localvars = set() - freelines = set() - for type in tp.args: - self._extra_local_variables(type, localvars, freelines) - for decl in sorted(localvars): - prnt(' %s;' % (decl,)) - # - if not isinstance(tp.result, model.VoidType): - result_code = 'result = ' - context = 'result of %s' % name - prnt(' %s;' % tp.result.get_c_name(' result', context)) - prnt(' PyObject *pyresult;') - else: - result_code = '' - # - if len(tp.args) > 1: - rng = range(len(tp.args)) - for i in rng: - prnt(' PyObject *arg%d;' % i) - prnt() - prnt(' if (!PyArg_ParseTuple(args, "%s:%s", %s))' % ( - 'O' * numargs, name, ', '.join(['&arg%d' % i for i in rng]))) - prnt(' return NULL;') - prnt() - # - for i, type in enumerate(tp.args): - self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, - 'return NULL') - prnt() - # - prnt(' Py_BEGIN_ALLOW_THREADS') - prnt(' _cffi_restore_errno();') - prnt(' { %s%s(%s); }' % ( - result_code, name, - ', '.join(['x%d' % i for i in range(len(tp.args))]))) - prnt(' _cffi_save_errno();') - prnt(' Py_END_ALLOW_THREADS') - prnt() - # - prnt(' (void)self; /* unused */') - if numargs == 0: - prnt(' (void)noarg; /* unused */') - if result_code: - prnt(' pyresult = %s;' % - self._convert_expr_from_c(tp.result, 'result', 'result type')) - for freeline in freelines: - prnt(' ' + freeline) - prnt(' return pyresult;') - else: - for freeline in freelines: - prnt(' ' + freeline) - prnt(' Py_INCREF(Py_None);') - prnt(' return Py_None;') - prnt('}') - prnt() - - def _generate_cpy_function_method(self, tp, name): - if tp.ellipsis: - return - numargs = len(tp.args) - if numargs == 0: - meth = 'METH_NOARGS' - elif numargs == 1: - meth = 'METH_O' - else: - meth = 'METH_VARARGS' - self._prnt(' {"%s", _cffi_f_%s, %s, NULL},' % (name, name, meth)) - - _loading_cpy_function = _loaded_noop - - def _loaded_cpy_function(self, tp, name, module, library): - if tp.ellipsis: - return - func = getattr(module, name) - setattr(library, name, func) - self._types_of_builtin_functions[func] = tp - - # ---------- - # named structs - - _generate_cpy_struct_collecttype = _generate_nothing - def _generate_cpy_struct_decl(self, tp, name): - assert name == tp.name - self._generate_struct_or_union_decl(tp, 'struct', name) - def _generate_cpy_struct_method(self, tp, name): - self._generate_struct_or_union_method(tp, 'struct', name) - def _loading_cpy_struct(self, tp, name, module): - self._loading_struct_or_union(tp, 'struct', name, module) - def _loaded_cpy_struct(self, tp, name, module, **kwds): - self._loaded_struct_or_union(tp) - - _generate_cpy_union_collecttype = _generate_nothing - def _generate_cpy_union_decl(self, tp, name): - assert name == tp.name - self._generate_struct_or_union_decl(tp, 'union', name) - def _generate_cpy_union_method(self, tp, name): - self._generate_struct_or_union_method(tp, 'union', name) - def _loading_cpy_union(self, tp, name, module): - self._loading_struct_or_union(tp, 'union', name, module) - def _loaded_cpy_union(self, tp, name, module, **kwds): - self._loaded_struct_or_union(tp) - - def _generate_struct_or_union_decl(self, tp, prefix, name): - if tp.fldnames is None: - return # nothing to do with opaque structs - checkfuncname = '_cffi_check_%s_%s' % (prefix, name) - layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) - cname = ('%s %s' % (prefix, name)).strip() - # - prnt = self._prnt - prnt('static void %s(%s *p)' % (checkfuncname, cname)) - prnt('{') - prnt(' /* only to generate compile-time warnings or errors */') - prnt(' (void)p;') - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if (isinstance(ftype, model.PrimitiveType) - and ftype.is_integer_type()) or fbitsize >= 0: - # accept all integers, but complain on float or double - prnt(' (void)((p->%s) << 1);' % fname) - else: - # only accept exactly the type declared. - try: - prnt(' { %s = &p->%s; (void)tmp; }' % ( - ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), - fname)) - except VerificationError as e: - prnt(' /* %s */' % str(e)) # cannot verify it, ignore - prnt('}') - prnt('static PyObject *') - prnt('%s(PyObject *self, PyObject *noarg)' % (layoutfuncname,)) - prnt('{') - prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) - prnt(' static Py_ssize_t nums[] = {') - prnt(' sizeof(%s),' % cname) - prnt(' offsetof(struct _cffi_aligncheck, y),') - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if fbitsize >= 0: - continue # xxx ignore fbitsize for now - prnt(' offsetof(%s, %s),' % (cname, fname)) - if isinstance(ftype, model.ArrayType) and ftype.length is None: - prnt(' 0, /* %s */' % ftype._get_c_name()) - else: - prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) - prnt(' -1') - prnt(' };') - prnt(' (void)self; /* unused */') - prnt(' (void)noarg; /* unused */') - prnt(' return _cffi_get_struct_layout(nums);') - prnt(' /* the next line is not executed, but compiled */') - prnt(' %s(0);' % (checkfuncname,)) - prnt('}') - prnt() - - def _generate_struct_or_union_method(self, tp, prefix, name): - if tp.fldnames is None: - return # nothing to do with opaque structs - layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) - self._prnt(' {"%s", %s, METH_NOARGS, NULL},' % (layoutfuncname, - layoutfuncname)) - - def _loading_struct_or_union(self, tp, prefix, name, module): - if tp.fldnames is None: - return # nothing to do with opaque structs - layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) - # - function = getattr(module, layoutfuncname) - layout = function() - if isinstance(tp, model.StructOrUnion) and tp.partial: - # use the function()'s sizes and offsets to guide the - # layout of the struct - totalsize = layout[0] - totalalignment = layout[1] - fieldofs = layout[2::2] - fieldsize = layout[3::2] - tp.force_flatten() - assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) - tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment - else: - cname = ('%s %s' % (prefix, name)).strip() - self._struct_pending_verification[tp] = layout, cname - - def _loaded_struct_or_union(self, tp): - if tp.fldnames is None: - return # nothing to do with opaque structs - self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered - - if tp in self._struct_pending_verification: - # check that the layout sizes and offsets match the real ones - def check(realvalue, expectedvalue, msg): - if realvalue != expectedvalue: - raise VerificationError( - "%s (we have %d, but C compiler says %d)" - % (msg, expectedvalue, realvalue)) - ffi = self.ffi - BStruct = ffi._get_cached_btype(tp) - layout, cname = self._struct_pending_verification.pop(tp) - check(layout[0], ffi.sizeof(BStruct), "wrong total size") - check(layout[1], ffi.alignof(BStruct), "wrong total alignment") - i = 2 - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if fbitsize >= 0: - continue # xxx ignore fbitsize for now - check(layout[i], ffi.offsetof(BStruct, fname), - "wrong offset for field %r" % (fname,)) - if layout[i+1] != 0: - BField = ffi._get_cached_btype(ftype) - check(layout[i+1], ffi.sizeof(BField), - "wrong size for field %r" % (fname,)) - i += 2 - assert i == len(layout) - - # ---------- - # 'anonymous' declarations. These are produced for anonymous structs - # or unions; the 'name' is obtained by a typedef. - - _generate_cpy_anonymous_collecttype = _generate_nothing - - def _generate_cpy_anonymous_decl(self, tp, name): - if isinstance(tp, model.EnumType): - self._generate_cpy_enum_decl(tp, name, '') - else: - self._generate_struct_or_union_decl(tp, '', name) - - def _generate_cpy_anonymous_method(self, tp, name): - if not isinstance(tp, model.EnumType): - self._generate_struct_or_union_method(tp, '', name) - - def _loading_cpy_anonymous(self, tp, name, module): - if isinstance(tp, model.EnumType): - self._loading_cpy_enum(tp, name, module) - else: - self._loading_struct_or_union(tp, '', name, module) - - def _loaded_cpy_anonymous(self, tp, name, module, **kwds): - if isinstance(tp, model.EnumType): - self._loaded_cpy_enum(tp, name, module, **kwds) - else: - self._loaded_struct_or_union(tp) - - # ---------- - # constants, likely declared with '#define' - - def _generate_cpy_const(self, is_int, name, tp=None, category='const', - vartp=None, delayed=True, size_too=False, - check_value=None): - prnt = self._prnt - funcname = '_cffi_%s_%s' % (category, name) - prnt('static int %s(PyObject *lib)' % funcname) - prnt('{') - prnt(' PyObject *o;') - prnt(' int res;') - if not is_int: - prnt(' %s;' % (vartp or tp).get_c_name(' i', name)) - else: - assert category == 'const' - # - if check_value is not None: - self._check_int_constant_value(name, check_value) - # - if not is_int: - if category == 'var': - realexpr = '&' + name - else: - realexpr = name - prnt(' i = (%s);' % (realexpr,)) - prnt(' o = %s;' % (self._convert_expr_from_c(tp, 'i', - 'variable type'),)) - assert delayed - else: - prnt(' o = _cffi_from_c_int_const(%s);' % name) - prnt(' if (o == NULL)') - prnt(' return -1;') - if size_too: - prnt(' {') - prnt(' PyObject *o1 = o;') - prnt(' o = Py_BuildValue("On", o1, (Py_ssize_t)sizeof(%s));' - % (name,)) - prnt(' Py_DECREF(o1);') - prnt(' if (o == NULL)') - prnt(' return -1;') - prnt(' }') - prnt(' res = PyObject_SetAttrString(lib, "%s", o);' % name) - prnt(' Py_DECREF(o);') - prnt(' if (res < 0)') - prnt(' return -1;') - prnt(' return %s;' % self._chained_list_constants[delayed]) - self._chained_list_constants[delayed] = funcname + '(lib)' - prnt('}') - prnt() - - def _generate_cpy_constant_collecttype(self, tp, name): - is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() - if not is_int: - self._do_collect_type(tp) - - def _generate_cpy_constant_decl(self, tp, name): - is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() - self._generate_cpy_const(is_int, name, tp) - - _generate_cpy_constant_method = _generate_nothing - _loading_cpy_constant = _loaded_noop - _loaded_cpy_constant = _loaded_noop - - # ---------- - # enums - - def _check_int_constant_value(self, name, value, err_prefix=''): - prnt = self._prnt - if value <= 0: - prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( - name, name, value)) - else: - prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( - name, name, value)) - prnt(' char buf[64];') - prnt(' if ((%s) <= 0)' % name) - prnt(' snprintf(buf, 63, "%%ld", (long)(%s));' % name) - prnt(' else') - prnt(' snprintf(buf, 63, "%%lu", (unsigned long)(%s));' % - name) - prnt(' PyErr_Format(_cffi_VerificationError,') - prnt(' "%s%s has the real value %s, not %s",') - prnt(' "%s", "%s", buf, "%d");' % ( - err_prefix, name, value)) - prnt(' return -1;') - prnt(' }') - - def _enum_funcname(self, prefix, name): - # "$enum_$1" => "___D_enum____D_1" - name = name.replace('$', '___D_') - return '_cffi_e_%s_%s' % (prefix, name) - - def _generate_cpy_enum_decl(self, tp, name, prefix='enum'): - if tp.partial: - for enumerator in tp.enumerators: - self._generate_cpy_const(True, enumerator, delayed=False) - return - # - funcname = self._enum_funcname(prefix, name) - prnt = self._prnt - prnt('static int %s(PyObject *lib)' % funcname) - prnt('{') - for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): - self._check_int_constant_value(enumerator, enumvalue, - "enum %s: " % name) - prnt(' return %s;' % self._chained_list_constants[True]) - self._chained_list_constants[True] = funcname + '(lib)' - prnt('}') - prnt() - - _generate_cpy_enum_collecttype = _generate_nothing - _generate_cpy_enum_method = _generate_nothing - - def _loading_cpy_enum(self, tp, name, module): - if tp.partial: - enumvalues = [getattr(module, enumerator) - for enumerator in tp.enumerators] - tp.enumvalues = tuple(enumvalues) - tp.partial_resolved = True - - def _loaded_cpy_enum(self, tp, name, module, library): - for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): - setattr(library, enumerator, enumvalue) - - # ---------- - # macros: for now only for integers - - def _generate_cpy_macro_decl(self, tp, name): - if tp == '...': - check_value = None - else: - check_value = tp # an integer - self._generate_cpy_const(True, name, check_value=check_value) - - _generate_cpy_macro_collecttype = _generate_nothing - _generate_cpy_macro_method = _generate_nothing - _loading_cpy_macro = _loaded_noop - _loaded_cpy_macro = _loaded_noop - - # ---------- - # global variables - - def _generate_cpy_variable_collecttype(self, tp, name): - if isinstance(tp, model.ArrayType): - tp_ptr = model.PointerType(tp.item) - else: - tp_ptr = model.PointerType(tp) - self._do_collect_type(tp_ptr) - - def _generate_cpy_variable_decl(self, tp, name): - if isinstance(tp, model.ArrayType): - tp_ptr = model.PointerType(tp.item) - self._generate_cpy_const(False, name, tp, vartp=tp_ptr, - size_too = tp.length_is_unknown()) - else: - tp_ptr = model.PointerType(tp) - self._generate_cpy_const(False, name, tp_ptr, category='var') - - _generate_cpy_variable_method = _generate_nothing - _loading_cpy_variable = _loaded_noop - - def _loaded_cpy_variable(self, tp, name, module, library): - value = getattr(library, name) - if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the - # sense that "a=..." is forbidden - if tp.length_is_unknown(): - assert isinstance(value, tuple) - (value, size) = value - BItemType = self.ffi._get_cached_btype(tp.item) - length, rest = divmod(size, self.ffi.sizeof(BItemType)) - if rest != 0: - raise VerificationError( - "bad size: %r does not seem to be an array of %s" % - (name, tp.item)) - tp = tp.resolve_length(length) - # 'value' is a which we have to replace with - # a if the N is actually known - if tp.length is not None: - BArray = self.ffi._get_cached_btype(tp) - value = self.ffi.cast(BArray, value) - setattr(library, name, value) - return - # remove ptr= from the library instance, and replace - # it by a property on the class, which reads/writes into ptr[0]. - ptr = value - delattr(library, name) - def getter(library): - return ptr[0] - def setter(library, value): - ptr[0] = value - setattr(type(library), name, property(getter, setter)) - type(library)._cffi_dir.append(name) - - # ---------- - - def _generate_setup_custom(self): - prnt = self._prnt - prnt('static int _cffi_setup_custom(PyObject *lib)') - prnt('{') - prnt(' return %s;' % self._chained_list_constants[True]) - prnt('}') - -cffimod_header = r''' -#include -#include - -/* this block of #ifs should be kept exactly identical between - c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py - and cffi/_cffi_include.h */ -#if defined(_MSC_VER) -# include /* for alloca() */ -# if _MSC_VER < 1600 /* MSVC < 2010 */ - typedef __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef __int64 int64_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; - typedef __int8 int_least8_t; - typedef __int16 int_least16_t; - typedef __int32 int_least32_t; - typedef __int64 int_least64_t; - typedef unsigned __int8 uint_least8_t; - typedef unsigned __int16 uint_least16_t; - typedef unsigned __int32 uint_least32_t; - typedef unsigned __int64 uint_least64_t; - typedef __int8 int_fast8_t; - typedef __int16 int_fast16_t; - typedef __int32 int_fast32_t; - typedef __int64 int_fast64_t; - typedef unsigned __int8 uint_fast8_t; - typedef unsigned __int16 uint_fast16_t; - typedef unsigned __int32 uint_fast32_t; - typedef unsigned __int64 uint_fast64_t; - typedef __int64 intmax_t; - typedef unsigned __int64 uintmax_t; -# else -# include -# endif -# if _MSC_VER < 1800 /* MSVC < 2013 */ -# ifndef __cplusplus - typedef unsigned char _Bool; -# endif -# endif -# define _cffi_float_complex_t _Fcomplex /* include for it */ -# define _cffi_double_complex_t _Dcomplex /* include for it */ -#else -# include -# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) -# include -# endif -# define _cffi_float_complex_t float _Complex -# define _cffi_double_complex_t double _Complex -#endif - -#if PY_MAJOR_VERSION < 3 -# undef PyCapsule_CheckExact -# undef PyCapsule_GetPointer -# define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule)) -# define PyCapsule_GetPointer(capsule, name) \ - (PyCObject_AsVoidPtr(capsule)) -#endif - -#if PY_MAJOR_VERSION >= 3 -# define PyInt_FromLong PyLong_FromLong -#endif - -#define _cffi_from_c_double PyFloat_FromDouble -#define _cffi_from_c_float PyFloat_FromDouble -#define _cffi_from_c_long PyInt_FromLong -#define _cffi_from_c_ulong PyLong_FromUnsignedLong -#define _cffi_from_c_longlong PyLong_FromLongLong -#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong -#define _cffi_from_c__Bool PyBool_FromLong - -#define _cffi_to_c_double PyFloat_AsDouble -#define _cffi_to_c_float PyFloat_AsDouble - -#define _cffi_from_c_int_const(x) \ - (((x) > 0) ? \ - ((unsigned long long)(x) <= (unsigned long long)LONG_MAX) ? \ - PyInt_FromLong((long)(x)) : \ - PyLong_FromUnsignedLongLong((unsigned long long)(x)) : \ - ((long long)(x) >= (long long)LONG_MIN) ? \ - PyInt_FromLong((long)(x)) : \ - PyLong_FromLongLong((long long)(x))) - -#define _cffi_from_c_int(x, type) \ - (((type)-1) > 0 ? /* unsigned */ \ - (sizeof(type) < sizeof(long) ? \ - PyInt_FromLong((long)x) : \ - sizeof(type) == sizeof(long) ? \ - PyLong_FromUnsignedLong((unsigned long)x) : \ - PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ - (sizeof(type) <= sizeof(long) ? \ - PyInt_FromLong((long)x) : \ - PyLong_FromLongLong((long long)x))) - -#define _cffi_to_c_int(o, type) \ - ((type)( \ - sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ - : (type)_cffi_to_c_i8(o)) : \ - sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ - : (type)_cffi_to_c_i16(o)) : \ - sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ - : (type)_cffi_to_c_i32(o)) : \ - sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ - : (type)_cffi_to_c_i64(o)) : \ - (Py_FatalError("unsupported size for type " #type), (type)0))) - -#define _cffi_to_c_i8 \ - ((int(*)(PyObject *))_cffi_exports[1]) -#define _cffi_to_c_u8 \ - ((int(*)(PyObject *))_cffi_exports[2]) -#define _cffi_to_c_i16 \ - ((int(*)(PyObject *))_cffi_exports[3]) -#define _cffi_to_c_u16 \ - ((int(*)(PyObject *))_cffi_exports[4]) -#define _cffi_to_c_i32 \ - ((int(*)(PyObject *))_cffi_exports[5]) -#define _cffi_to_c_u32 \ - ((unsigned int(*)(PyObject *))_cffi_exports[6]) -#define _cffi_to_c_i64 \ - ((long long(*)(PyObject *))_cffi_exports[7]) -#define _cffi_to_c_u64 \ - ((unsigned long long(*)(PyObject *))_cffi_exports[8]) -#define _cffi_to_c_char \ - ((int(*)(PyObject *))_cffi_exports[9]) -#define _cffi_from_c_pointer \ - ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[10]) -#define _cffi_to_c_pointer \ - ((char *(*)(PyObject *, CTypeDescrObject *))_cffi_exports[11]) -#define _cffi_get_struct_layout \ - ((PyObject *(*)(Py_ssize_t[]))_cffi_exports[12]) -#define _cffi_restore_errno \ - ((void(*)(void))_cffi_exports[13]) -#define _cffi_save_errno \ - ((void(*)(void))_cffi_exports[14]) -#define _cffi_from_c_char \ - ((PyObject *(*)(char))_cffi_exports[15]) -#define _cffi_from_c_deref \ - ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[16]) -#define _cffi_to_c \ - ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[17]) -#define _cffi_from_c_struct \ - ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[18]) -#define _cffi_to_c_wchar_t \ - ((wchar_t(*)(PyObject *))_cffi_exports[19]) -#define _cffi_from_c_wchar_t \ - ((PyObject *(*)(wchar_t))_cffi_exports[20]) -#define _cffi_to_c_long_double \ - ((long double(*)(PyObject *))_cffi_exports[21]) -#define _cffi_to_c__Bool \ - ((_Bool(*)(PyObject *))_cffi_exports[22]) -#define _cffi_prepare_pointer_call_argument \ - ((Py_ssize_t(*)(CTypeDescrObject *, PyObject *, char **))_cffi_exports[23]) -#define _cffi_convert_array_from_object \ - ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[24]) -#define _CFFI_NUM_EXPORTS 25 - -typedef struct _ctypedescr CTypeDescrObject; - -static void *_cffi_exports[_CFFI_NUM_EXPORTS]; -static PyObject *_cffi_types, *_cffi_VerificationError; - -static int _cffi_setup_custom(PyObject *lib); /* forward */ - -static PyObject *_cffi_setup(PyObject *self, PyObject *args) -{ - PyObject *library; - int was_alive = (_cffi_types != NULL); - (void)self; /* unused */ - if (!PyArg_ParseTuple(args, "OOO", &_cffi_types, &_cffi_VerificationError, - &library)) - return NULL; - Py_INCREF(_cffi_types); - Py_INCREF(_cffi_VerificationError); - if (_cffi_setup_custom(library) < 0) - return NULL; - return PyBool_FromLong(was_alive); -} - -union _cffi_union_alignment_u { - unsigned char m_char; - unsigned short m_short; - unsigned int m_int; - unsigned long m_long; - unsigned long long m_longlong; - float m_float; - double m_double; - long double m_longdouble; -}; - -struct _cffi_freeme_s { - struct _cffi_freeme_s *next; - union _cffi_union_alignment_u alignment; -}; - -#ifdef __GNUC__ - __attribute__((unused)) -#endif -static int _cffi_convert_array_argument(CTypeDescrObject *ctptr, PyObject *arg, - char **output_data, Py_ssize_t datasize, - struct _cffi_freeme_s **freeme) -{ - char *p; - if (datasize < 0) - return -1; - - p = *output_data; - if (p == NULL) { - struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( - offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); - if (fp == NULL) - return -1; - fp->next = *freeme; - *freeme = fp; - p = *output_data = (char *)&fp->alignment; - } - memset((void *)p, 0, (size_t)datasize); - return _cffi_convert_array_from_object(p, ctptr, arg); -} - -#ifdef __GNUC__ - __attribute__((unused)) -#endif -static void _cffi_free_array_arguments(struct _cffi_freeme_s *freeme) -{ - do { - void *p = (void *)freeme; - freeme = freeme->next; - PyObject_Free(p); - } while (freeme != NULL); -} - -static int _cffi_init(void) -{ - PyObject *module, *c_api_object = NULL; - - module = PyImport_ImportModule("_cffi_backend"); - if (module == NULL) - goto failure; - - c_api_object = PyObject_GetAttrString(module, "_C_API"); - if (c_api_object == NULL) - goto failure; - if (!PyCapsule_CheckExact(c_api_object)) { - PyErr_SetNone(PyExc_ImportError); - goto failure; - } - memcpy(_cffi_exports, PyCapsule_GetPointer(c_api_object, "cffi"), - _CFFI_NUM_EXPORTS * sizeof(void *)); - - Py_DECREF(module); - Py_DECREF(c_api_object); - return 0; - - failure: - Py_XDECREF(module); - Py_XDECREF(c_api_object); - return -1; -} - -#define _cffi_type(num) ((CTypeDescrObject *)PyList_GET_ITEM(_cffi_types, num)) - -/**********/ -''' diff --git a/myenv/lib/python3.12/site-packages/cffi/vengine_gen.py b/myenv/lib/python3.12/site-packages/cffi/vengine_gen.py deleted file mode 100644 index bffc821..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/vengine_gen.py +++ /dev/null @@ -1,679 +0,0 @@ -# -# DEPRECATED: implementation for ffi.verify() -# -import sys, os -import types - -from . import model -from .error import VerificationError - - -class VGenericEngine(object): - _class_key = 'g' - _gen_python_module = False - - def __init__(self, verifier): - self.verifier = verifier - self.ffi = verifier.ffi - self.export_symbols = [] - self._struct_pending_verification = {} - - def patch_extension_kwds(self, kwds): - # add 'export_symbols' to the dictionary. Note that we add the - # list before filling it. When we fill it, it will thus also show - # up in kwds['export_symbols']. - kwds.setdefault('export_symbols', self.export_symbols) - - def find_module(self, module_name, path, so_suffixes): - for so_suffix in so_suffixes: - basename = module_name + so_suffix - if path is None: - path = sys.path - for dirname in path: - filename = os.path.join(dirname, basename) - if os.path.isfile(filename): - return filename - - def collect_types(self): - pass # not needed in the generic engine - - def _prnt(self, what=''): - self._f.write(what + '\n') - - def write_source_to_f(self): - prnt = self._prnt - # first paste some standard set of lines that are mostly '#include' - prnt(cffimod_header) - # then paste the C source given by the user, verbatim. - prnt(self.verifier.preamble) - # - # call generate_gen_xxx_decl(), for every xxx found from - # ffi._parser._declarations. This generates all the functions. - self._generate('decl') - # - # on Windows, distutils insists on putting init_cffi_xyz in - # 'export_symbols', so instead of fighting it, just give up and - # give it one - if sys.platform == 'win32': - if sys.version_info >= (3,): - prefix = 'PyInit_' - else: - prefix = 'init' - modname = self.verifier.get_module_name() - prnt("void %s%s(void) { }\n" % (prefix, modname)) - - def load_library(self, flags=0): - # import it with the CFFI backend - backend = self.ffi._backend - # needs to make a path that contains '/', on Posix - filename = os.path.join(os.curdir, self.verifier.modulefilename) - module = backend.load_library(filename, flags) - # - # call loading_gen_struct() to get the struct layout inferred by - # the C compiler - self._load(module, 'loading') - - # build the FFILibrary class and instance, this is a module subclass - # because modules are expected to have usually-constant-attributes and - # in PyPy this means the JIT is able to treat attributes as constant, - # which we want. - class FFILibrary(types.ModuleType): - _cffi_generic_module = module - _cffi_ffi = self.ffi - _cffi_dir = [] - def __dir__(self): - return FFILibrary._cffi_dir - library = FFILibrary("") - # - # finally, call the loaded_gen_xxx() functions. This will set - # up the 'library' object. - self._load(module, 'loaded', library=library) - return library - - def _get_declarations(self): - lst = [(key, tp) for (key, (tp, qual)) in - self.ffi._parser._declarations.items()] - lst.sort() - return lst - - def _generate(self, step_name): - for name, tp in self._get_declarations(): - kind, realname = name.split(' ', 1) - try: - method = getattr(self, '_generate_gen_%s_%s' % (kind, - step_name)) - except AttributeError: - raise VerificationError( - "not implemented in verify(): %r" % name) - try: - method(tp, realname) - except Exception as e: - model.attach_exception_info(e, name) - raise - - def _load(self, module, step_name, **kwds): - for name, tp in self._get_declarations(): - kind, realname = name.split(' ', 1) - method = getattr(self, '_%s_gen_%s' % (step_name, kind)) - try: - method(tp, realname, module, **kwds) - except Exception as e: - model.attach_exception_info(e, name) - raise - - def _generate_nothing(self, tp, name): - pass - - def _loaded_noop(self, tp, name, module, **kwds): - pass - - # ---------- - # typedefs: generates no code so far - - _generate_gen_typedef_decl = _generate_nothing - _loading_gen_typedef = _loaded_noop - _loaded_gen_typedef = _loaded_noop - - # ---------- - # function declarations - - def _generate_gen_function_decl(self, tp, name): - assert isinstance(tp, model.FunctionPtrType) - if tp.ellipsis: - # cannot support vararg functions better than this: check for its - # exact type (including the fixed arguments), and build it as a - # constant function pointer (no _cffi_f_%s wrapper) - self._generate_gen_const(False, name, tp) - return - prnt = self._prnt - numargs = len(tp.args) - argnames = [] - for i, type in enumerate(tp.args): - indirection = '' - if isinstance(type, model.StructOrUnion): - indirection = '*' - argnames.append('%sx%d' % (indirection, i)) - context = 'argument of %s' % name - arglist = [type.get_c_name(' %s' % arg, context) - for type, arg in zip(tp.args, argnames)] - tpresult = tp.result - if isinstance(tpresult, model.StructOrUnion): - arglist.insert(0, tpresult.get_c_name(' *r', context)) - tpresult = model.void_type - arglist = ', '.join(arglist) or 'void' - wrappername = '_cffi_f_%s' % name - self.export_symbols.append(wrappername) - if tp.abi: - abi = tp.abi + ' ' - else: - abi = '' - funcdecl = ' %s%s(%s)' % (abi, wrappername, arglist) - context = 'result of %s' % name - prnt(tpresult.get_c_name(funcdecl, context)) - prnt('{') - # - if isinstance(tp.result, model.StructOrUnion): - result_code = '*r = ' - elif not isinstance(tp.result, model.VoidType): - result_code = 'return ' - else: - result_code = '' - prnt(' %s%s(%s);' % (result_code, name, ', '.join(argnames))) - prnt('}') - prnt() - - _loading_gen_function = _loaded_noop - - def _loaded_gen_function(self, tp, name, module, library): - assert isinstance(tp, model.FunctionPtrType) - if tp.ellipsis: - newfunction = self._load_constant(False, tp, name, module) - else: - indirections = [] - base_tp = tp - if (any(isinstance(typ, model.StructOrUnion) for typ in tp.args) - or isinstance(tp.result, model.StructOrUnion)): - indirect_args = [] - for i, typ in enumerate(tp.args): - if isinstance(typ, model.StructOrUnion): - typ = model.PointerType(typ) - indirections.append((i, typ)) - indirect_args.append(typ) - indirect_result = tp.result - if isinstance(indirect_result, model.StructOrUnion): - if indirect_result.fldtypes is None: - raise TypeError("'%s' is used as result type, " - "but is opaque" % ( - indirect_result._get_c_name(),)) - indirect_result = model.PointerType(indirect_result) - indirect_args.insert(0, indirect_result) - indirections.insert(0, ("result", indirect_result)) - indirect_result = model.void_type - tp = model.FunctionPtrType(tuple(indirect_args), - indirect_result, tp.ellipsis) - BFunc = self.ffi._get_cached_btype(tp) - wrappername = '_cffi_f_%s' % name - newfunction = module.load_function(BFunc, wrappername) - for i, typ in indirections: - newfunction = self._make_struct_wrapper(newfunction, i, typ, - base_tp) - setattr(library, name, newfunction) - type(library)._cffi_dir.append(name) - - def _make_struct_wrapper(self, oldfunc, i, tp, base_tp): - backend = self.ffi._backend - BType = self.ffi._get_cached_btype(tp) - if i == "result": - ffi = self.ffi - def newfunc(*args): - res = ffi.new(BType) - oldfunc(res, *args) - return res[0] - else: - def newfunc(*args): - args = args[:i] + (backend.newp(BType, args[i]),) + args[i+1:] - return oldfunc(*args) - newfunc._cffi_base_type = base_tp - return newfunc - - # ---------- - # named structs - - def _generate_gen_struct_decl(self, tp, name): - assert name == tp.name - self._generate_struct_or_union_decl(tp, 'struct', name) - - def _loading_gen_struct(self, tp, name, module): - self._loading_struct_or_union(tp, 'struct', name, module) - - def _loaded_gen_struct(self, tp, name, module, **kwds): - self._loaded_struct_or_union(tp) - - def _generate_gen_union_decl(self, tp, name): - assert name == tp.name - self._generate_struct_or_union_decl(tp, 'union', name) - - def _loading_gen_union(self, tp, name, module): - self._loading_struct_or_union(tp, 'union', name, module) - - def _loaded_gen_union(self, tp, name, module, **kwds): - self._loaded_struct_or_union(tp) - - def _generate_struct_or_union_decl(self, tp, prefix, name): - if tp.fldnames is None: - return # nothing to do with opaque structs - checkfuncname = '_cffi_check_%s_%s' % (prefix, name) - layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) - cname = ('%s %s' % (prefix, name)).strip() - # - prnt = self._prnt - prnt('static void %s(%s *p)' % (checkfuncname, cname)) - prnt('{') - prnt(' /* only to generate compile-time warnings or errors */') - prnt(' (void)p;') - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if (isinstance(ftype, model.PrimitiveType) - and ftype.is_integer_type()) or fbitsize >= 0: - # accept all integers, but complain on float or double - prnt(' (void)((p->%s) << 1);' % fname) - else: - # only accept exactly the type declared. - try: - prnt(' { %s = &p->%s; (void)tmp; }' % ( - ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), - fname)) - except VerificationError as e: - prnt(' /* %s */' % str(e)) # cannot verify it, ignore - prnt('}') - self.export_symbols.append(layoutfuncname) - prnt('intptr_t %s(intptr_t i)' % (layoutfuncname,)) - prnt('{') - prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) - prnt(' static intptr_t nums[] = {') - prnt(' sizeof(%s),' % cname) - prnt(' offsetof(struct _cffi_aligncheck, y),') - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if fbitsize >= 0: - continue # xxx ignore fbitsize for now - prnt(' offsetof(%s, %s),' % (cname, fname)) - if isinstance(ftype, model.ArrayType) and ftype.length is None: - prnt(' 0, /* %s */' % ftype._get_c_name()) - else: - prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) - prnt(' -1') - prnt(' };') - prnt(' return nums[i];') - prnt(' /* the next line is not executed, but compiled */') - prnt(' %s(0);' % (checkfuncname,)) - prnt('}') - prnt() - - def _loading_struct_or_union(self, tp, prefix, name, module): - if tp.fldnames is None: - return # nothing to do with opaque structs - layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) - # - BFunc = self.ffi._typeof_locked("intptr_t(*)(intptr_t)")[0] - function = module.load_function(BFunc, layoutfuncname) - layout = [] - num = 0 - while True: - x = function(num) - if x < 0: break - layout.append(x) - num += 1 - if isinstance(tp, model.StructOrUnion) and tp.partial: - # use the function()'s sizes and offsets to guide the - # layout of the struct - totalsize = layout[0] - totalalignment = layout[1] - fieldofs = layout[2::2] - fieldsize = layout[3::2] - tp.force_flatten() - assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) - tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment - else: - cname = ('%s %s' % (prefix, name)).strip() - self._struct_pending_verification[tp] = layout, cname - - def _loaded_struct_or_union(self, tp): - if tp.fldnames is None: - return # nothing to do with opaque structs - self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered - - if tp in self._struct_pending_verification: - # check that the layout sizes and offsets match the real ones - def check(realvalue, expectedvalue, msg): - if realvalue != expectedvalue: - raise VerificationError( - "%s (we have %d, but C compiler says %d)" - % (msg, expectedvalue, realvalue)) - ffi = self.ffi - BStruct = ffi._get_cached_btype(tp) - layout, cname = self._struct_pending_verification.pop(tp) - check(layout[0], ffi.sizeof(BStruct), "wrong total size") - check(layout[1], ffi.alignof(BStruct), "wrong total alignment") - i = 2 - for fname, ftype, fbitsize, fqual in tp.enumfields(): - if fbitsize >= 0: - continue # xxx ignore fbitsize for now - check(layout[i], ffi.offsetof(BStruct, fname), - "wrong offset for field %r" % (fname,)) - if layout[i+1] != 0: - BField = ffi._get_cached_btype(ftype) - check(layout[i+1], ffi.sizeof(BField), - "wrong size for field %r" % (fname,)) - i += 2 - assert i == len(layout) - - # ---------- - # 'anonymous' declarations. These are produced for anonymous structs - # or unions; the 'name' is obtained by a typedef. - - def _generate_gen_anonymous_decl(self, tp, name): - if isinstance(tp, model.EnumType): - self._generate_gen_enum_decl(tp, name, '') - else: - self._generate_struct_or_union_decl(tp, '', name) - - def _loading_gen_anonymous(self, tp, name, module): - if isinstance(tp, model.EnumType): - self._loading_gen_enum(tp, name, module, '') - else: - self._loading_struct_or_union(tp, '', name, module) - - def _loaded_gen_anonymous(self, tp, name, module, **kwds): - if isinstance(tp, model.EnumType): - self._loaded_gen_enum(tp, name, module, **kwds) - else: - self._loaded_struct_or_union(tp) - - # ---------- - # constants, likely declared with '#define' - - def _generate_gen_const(self, is_int, name, tp=None, category='const', - check_value=None): - prnt = self._prnt - funcname = '_cffi_%s_%s' % (category, name) - self.export_symbols.append(funcname) - if check_value is not None: - assert is_int - assert category == 'const' - prnt('int %s(char *out_error)' % funcname) - prnt('{') - self._check_int_constant_value(name, check_value) - prnt(' return 0;') - prnt('}') - elif is_int: - assert category == 'const' - prnt('int %s(long long *out_value)' % funcname) - prnt('{') - prnt(' *out_value = (long long)(%s);' % (name,)) - prnt(' return (%s) <= 0;' % (name,)) - prnt('}') - else: - assert tp is not None - assert check_value is None - if category == 'var': - ampersand = '&' - else: - ampersand = '' - extra = '' - if category == 'const' and isinstance(tp, model.StructOrUnion): - extra = 'const *' - ampersand = '&' - prnt(tp.get_c_name(' %s%s(void)' % (extra, funcname), name)) - prnt('{') - prnt(' return (%s%s);' % (ampersand, name)) - prnt('}') - prnt() - - def _generate_gen_constant_decl(self, tp, name): - is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() - self._generate_gen_const(is_int, name, tp) - - _loading_gen_constant = _loaded_noop - - def _load_constant(self, is_int, tp, name, module, check_value=None): - funcname = '_cffi_const_%s' % name - if check_value is not None: - assert is_int - self._load_known_int_constant(module, funcname) - value = check_value - elif is_int: - BType = self.ffi._typeof_locked("long long*")[0] - BFunc = self.ffi._typeof_locked("int(*)(long long*)")[0] - function = module.load_function(BFunc, funcname) - p = self.ffi.new(BType) - negative = function(p) - value = int(p[0]) - if value < 0 and not negative: - BLongLong = self.ffi._typeof_locked("long long")[0] - value += (1 << (8*self.ffi.sizeof(BLongLong))) - else: - assert check_value is None - fntypeextra = '(*)(void)' - if isinstance(tp, model.StructOrUnion): - fntypeextra = '*' + fntypeextra - BFunc = self.ffi._typeof_locked(tp.get_c_name(fntypeextra, name))[0] - function = module.load_function(BFunc, funcname) - value = function() - if isinstance(tp, model.StructOrUnion): - value = value[0] - return value - - def _loaded_gen_constant(self, tp, name, module, library): - is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() - value = self._load_constant(is_int, tp, name, module) - setattr(library, name, value) - type(library)._cffi_dir.append(name) - - # ---------- - # enums - - def _check_int_constant_value(self, name, value): - prnt = self._prnt - if value <= 0: - prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( - name, name, value)) - else: - prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( - name, name, value)) - prnt(' char buf[64];') - prnt(' if ((%s) <= 0)' % name) - prnt(' sprintf(buf, "%%ld", (long)(%s));' % name) - prnt(' else') - prnt(' sprintf(buf, "%%lu", (unsigned long)(%s));' % - name) - prnt(' sprintf(out_error, "%s has the real value %s, not %s",') - prnt(' "%s", buf, "%d");' % (name[:100], value)) - prnt(' return -1;') - prnt(' }') - - def _load_known_int_constant(self, module, funcname): - BType = self.ffi._typeof_locked("char[]")[0] - BFunc = self.ffi._typeof_locked("int(*)(char*)")[0] - function = module.load_function(BFunc, funcname) - p = self.ffi.new(BType, 256) - if function(p) < 0: - error = self.ffi.string(p) - if sys.version_info >= (3,): - error = str(error, 'utf-8') - raise VerificationError(error) - - def _enum_funcname(self, prefix, name): - # "$enum_$1" => "___D_enum____D_1" - name = name.replace('$', '___D_') - return '_cffi_e_%s_%s' % (prefix, name) - - def _generate_gen_enum_decl(self, tp, name, prefix='enum'): - if tp.partial: - for enumerator in tp.enumerators: - self._generate_gen_const(True, enumerator) - return - # - funcname = self._enum_funcname(prefix, name) - self.export_symbols.append(funcname) - prnt = self._prnt - prnt('int %s(char *out_error)' % funcname) - prnt('{') - for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): - self._check_int_constant_value(enumerator, enumvalue) - prnt(' return 0;') - prnt('}') - prnt() - - def _loading_gen_enum(self, tp, name, module, prefix='enum'): - if tp.partial: - enumvalues = [self._load_constant(True, tp, enumerator, module) - for enumerator in tp.enumerators] - tp.enumvalues = tuple(enumvalues) - tp.partial_resolved = True - else: - funcname = self._enum_funcname(prefix, name) - self._load_known_int_constant(module, funcname) - - def _loaded_gen_enum(self, tp, name, module, library): - for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): - setattr(library, enumerator, enumvalue) - type(library)._cffi_dir.append(enumerator) - - # ---------- - # macros: for now only for integers - - def _generate_gen_macro_decl(self, tp, name): - if tp == '...': - check_value = None - else: - check_value = tp # an integer - self._generate_gen_const(True, name, check_value=check_value) - - _loading_gen_macro = _loaded_noop - - def _loaded_gen_macro(self, tp, name, module, library): - if tp == '...': - check_value = None - else: - check_value = tp # an integer - value = self._load_constant(True, tp, name, module, - check_value=check_value) - setattr(library, name, value) - type(library)._cffi_dir.append(name) - - # ---------- - # global variables - - def _generate_gen_variable_decl(self, tp, name): - if isinstance(tp, model.ArrayType): - if tp.length_is_unknown(): - prnt = self._prnt - funcname = '_cffi_sizeof_%s' % (name,) - self.export_symbols.append(funcname) - prnt("size_t %s(void)" % funcname) - prnt("{") - prnt(" return sizeof(%s);" % (name,)) - prnt("}") - tp_ptr = model.PointerType(tp.item) - self._generate_gen_const(False, name, tp_ptr) - else: - tp_ptr = model.PointerType(tp) - self._generate_gen_const(False, name, tp_ptr, category='var') - - _loading_gen_variable = _loaded_noop - - def _loaded_gen_variable(self, tp, name, module, library): - if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the - # sense that "a=..." is forbidden - if tp.length_is_unknown(): - funcname = '_cffi_sizeof_%s' % (name,) - BFunc = self.ffi._typeof_locked('size_t(*)(void)')[0] - function = module.load_function(BFunc, funcname) - size = function() - BItemType = self.ffi._get_cached_btype(tp.item) - length, rest = divmod(size, self.ffi.sizeof(BItemType)) - if rest != 0: - raise VerificationError( - "bad size: %r does not seem to be an array of %s" % - (name, tp.item)) - tp = tp.resolve_length(length) - tp_ptr = model.PointerType(tp.item) - value = self._load_constant(False, tp_ptr, name, module) - # 'value' is a which we have to replace with - # a if the N is actually known - if tp.length is not None: - BArray = self.ffi._get_cached_btype(tp) - value = self.ffi.cast(BArray, value) - setattr(library, name, value) - type(library)._cffi_dir.append(name) - return - # remove ptr= from the library instance, and replace - # it by a property on the class, which reads/writes into ptr[0]. - funcname = '_cffi_var_%s' % name - BFunc = self.ffi._typeof_locked(tp.get_c_name('*(*)(void)', name))[0] - function = module.load_function(BFunc, funcname) - ptr = function() - def getter(library): - return ptr[0] - def setter(library, value): - ptr[0] = value - setattr(type(library), name, property(getter, setter)) - type(library)._cffi_dir.append(name) - -cffimod_header = r''' -#include -#include -#include -#include -#include /* XXX for ssize_t on some platforms */ - -/* this block of #ifs should be kept exactly identical between - c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py - and cffi/_cffi_include.h */ -#if defined(_MSC_VER) -# include /* for alloca() */ -# if _MSC_VER < 1600 /* MSVC < 2010 */ - typedef __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef __int64 int64_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; - typedef __int8 int_least8_t; - typedef __int16 int_least16_t; - typedef __int32 int_least32_t; - typedef __int64 int_least64_t; - typedef unsigned __int8 uint_least8_t; - typedef unsigned __int16 uint_least16_t; - typedef unsigned __int32 uint_least32_t; - typedef unsigned __int64 uint_least64_t; - typedef __int8 int_fast8_t; - typedef __int16 int_fast16_t; - typedef __int32 int_fast32_t; - typedef __int64 int_fast64_t; - typedef unsigned __int8 uint_fast8_t; - typedef unsigned __int16 uint_fast16_t; - typedef unsigned __int32 uint_fast32_t; - typedef unsigned __int64 uint_fast64_t; - typedef __int64 intmax_t; - typedef unsigned __int64 uintmax_t; -# else -# include -# endif -# if _MSC_VER < 1800 /* MSVC < 2013 */ -# ifndef __cplusplus - typedef unsigned char _Bool; -# endif -# endif -# define _cffi_float_complex_t _Fcomplex /* include for it */ -# define _cffi_double_complex_t _Dcomplex /* include for it */ -#else -# include -# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) -# include -# endif -# define _cffi_float_complex_t float _Complex -# define _cffi_double_complex_t double _Complex -#endif -''' diff --git a/myenv/lib/python3.12/site-packages/cffi/verifier.py b/myenv/lib/python3.12/site-packages/cffi/verifier.py deleted file mode 100644 index e392a2b..0000000 --- a/myenv/lib/python3.12/site-packages/cffi/verifier.py +++ /dev/null @@ -1,306 +0,0 @@ -# -# DEPRECATED: implementation for ffi.verify() -# -import sys, os, binascii, shutil, io -from . import __version_verifier_modules__ -from . import ffiplatform -from .error import VerificationError - -if sys.version_info >= (3, 3): - import importlib.machinery - def _extension_suffixes(): - return importlib.machinery.EXTENSION_SUFFIXES[:] -else: - import imp - def _extension_suffixes(): - return [suffix for suffix, _, type in imp.get_suffixes() - if type == imp.C_EXTENSION] - - -if sys.version_info >= (3,): - NativeIO = io.StringIO -else: - class NativeIO(io.BytesIO): - def write(self, s): - if isinstance(s, unicode): - s = s.encode('ascii') - super(NativeIO, self).write(s) - - -class Verifier(object): - - def __init__(self, ffi, preamble, tmpdir=None, modulename=None, - ext_package=None, tag='', force_generic_engine=False, - source_extension='.c', flags=None, relative_to=None, **kwds): - if ffi._parser._uses_new_feature: - raise VerificationError( - "feature not supported with ffi.verify(), but only " - "with ffi.set_source(): %s" % (ffi._parser._uses_new_feature,)) - self.ffi = ffi - self.preamble = preamble - if not modulename: - flattened_kwds = ffiplatform.flatten(kwds) - vengine_class = _locate_engine_class(ffi, force_generic_engine) - self._vengine = vengine_class(self) - self._vengine.patch_extension_kwds(kwds) - self.flags = flags - self.kwds = self.make_relative_to(kwds, relative_to) - # - if modulename: - if tag: - raise TypeError("can't specify both 'modulename' and 'tag'") - else: - key = '\x00'.join(['%d.%d' % sys.version_info[:2], - __version_verifier_modules__, - preamble, flattened_kwds] + - ffi._cdefsources) - if sys.version_info >= (3,): - key = key.encode('utf-8') - k1 = hex(binascii.crc32(key[0::2]) & 0xffffffff) - k1 = k1.lstrip('0x').rstrip('L') - k2 = hex(binascii.crc32(key[1::2]) & 0xffffffff) - k2 = k2.lstrip('0').rstrip('L') - modulename = '_cffi_%s_%s%s%s' % (tag, self._vengine._class_key, - k1, k2) - suffix = _get_so_suffixes()[0] - self.tmpdir = tmpdir or _caller_dir_pycache() - self.sourcefilename = os.path.join(self.tmpdir, modulename + source_extension) - self.modulefilename = os.path.join(self.tmpdir, modulename + suffix) - self.ext_package = ext_package - self._has_source = False - self._has_module = False - - def write_source(self, file=None): - """Write the C source code. It is produced in 'self.sourcefilename', - which can be tweaked beforehand.""" - with self.ffi._lock: - if self._has_source and file is None: - raise VerificationError( - "source code already written") - self._write_source(file) - - def compile_module(self): - """Write the C source code (if not done already) and compile it. - This produces a dynamic link library in 'self.modulefilename'.""" - with self.ffi._lock: - if self._has_module: - raise VerificationError("module already compiled") - if not self._has_source: - self._write_source() - self._compile_module() - - def load_library(self): - """Get a C module from this Verifier instance. - Returns an instance of a FFILibrary class that behaves like the - objects returned by ffi.dlopen(), but that delegates all - operations to the C module. If necessary, the C code is written - and compiled first. - """ - with self.ffi._lock: - if not self._has_module: - self._locate_module() - if not self._has_module: - if not self._has_source: - self._write_source() - self._compile_module() - return self._load_library() - - def get_module_name(self): - basename = os.path.basename(self.modulefilename) - # kill both the .so extension and the other .'s, as introduced - # by Python 3: 'basename.cpython-33m.so' - basename = basename.split('.', 1)[0] - # and the _d added in Python 2 debug builds --- but try to be - # conservative and not kill a legitimate _d - if basename.endswith('_d') and hasattr(sys, 'gettotalrefcount'): - basename = basename[:-2] - return basename - - def get_extension(self): - if not self._has_source: - with self.ffi._lock: - if not self._has_source: - self._write_source() - sourcename = ffiplatform.maybe_relative_path(self.sourcefilename) - modname = self.get_module_name() - return ffiplatform.get_extension(sourcename, modname, **self.kwds) - - def generates_python_module(self): - return self._vengine._gen_python_module - - def make_relative_to(self, kwds, relative_to): - if relative_to and os.path.dirname(relative_to): - dirname = os.path.dirname(relative_to) - kwds = kwds.copy() - for key in ffiplatform.LIST_OF_FILE_NAMES: - if key in kwds: - lst = kwds[key] - if not isinstance(lst, (list, tuple)): - raise TypeError("keyword '%s' should be a list or tuple" - % (key,)) - lst = [os.path.join(dirname, fn) for fn in lst] - kwds[key] = lst - return kwds - - # ---------- - - def _locate_module(self): - if not os.path.isfile(self.modulefilename): - if self.ext_package: - try: - pkg = __import__(self.ext_package, None, None, ['__doc__']) - except ImportError: - return # cannot import the package itself, give up - # (e.g. it might be called differently before installation) - path = pkg.__path__ - else: - path = None - filename = self._vengine.find_module(self.get_module_name(), path, - _get_so_suffixes()) - if filename is None: - return - self.modulefilename = filename - self._vengine.collect_types() - self._has_module = True - - def _write_source_to(self, file): - self._vengine._f = file - try: - self._vengine.write_source_to_f() - finally: - del self._vengine._f - - def _write_source(self, file=None): - if file is not None: - self._write_source_to(file) - else: - # Write our source file to an in memory file. - f = NativeIO() - self._write_source_to(f) - source_data = f.getvalue() - - # Determine if this matches the current file - if os.path.exists(self.sourcefilename): - with open(self.sourcefilename, "r") as fp: - needs_written = not (fp.read() == source_data) - else: - needs_written = True - - # Actually write the file out if it doesn't match - if needs_written: - _ensure_dir(self.sourcefilename) - with open(self.sourcefilename, "w") as fp: - fp.write(source_data) - - # Set this flag - self._has_source = True - - def _compile_module(self): - # compile this C source - tmpdir = os.path.dirname(self.sourcefilename) - outputfilename = ffiplatform.compile(tmpdir, self.get_extension()) - try: - same = ffiplatform.samefile(outputfilename, self.modulefilename) - except OSError: - same = False - if not same: - _ensure_dir(self.modulefilename) - shutil.move(outputfilename, self.modulefilename) - self._has_module = True - - def _load_library(self): - assert self._has_module - if self.flags is not None: - return self._vengine.load_library(self.flags) - else: - return self._vengine.load_library() - -# ____________________________________________________________ - -_FORCE_GENERIC_ENGINE = False # for tests - -def _locate_engine_class(ffi, force_generic_engine): - if _FORCE_GENERIC_ENGINE: - force_generic_engine = True - if not force_generic_engine: - if '__pypy__' in sys.builtin_module_names: - force_generic_engine = True - else: - try: - import _cffi_backend - except ImportError: - _cffi_backend = '?' - if ffi._backend is not _cffi_backend: - force_generic_engine = True - if force_generic_engine: - from . import vengine_gen - return vengine_gen.VGenericEngine - else: - from . import vengine_cpy - return vengine_cpy.VCPythonEngine - -# ____________________________________________________________ - -_TMPDIR = None - -def _caller_dir_pycache(): - if _TMPDIR: - return _TMPDIR - result = os.environ.get('CFFI_TMPDIR') - if result: - return result - filename = sys._getframe(2).f_code.co_filename - return os.path.abspath(os.path.join(os.path.dirname(filename), - '__pycache__')) - -def set_tmpdir(dirname): - """Set the temporary directory to use instead of __pycache__.""" - global _TMPDIR - _TMPDIR = dirname - -def cleanup_tmpdir(tmpdir=None, keep_so=False): - """Clean up the temporary directory by removing all files in it - called `_cffi_*.{c,so}` as well as the `build` subdirectory.""" - tmpdir = tmpdir or _caller_dir_pycache() - try: - filelist = os.listdir(tmpdir) - except OSError: - return - if keep_so: - suffix = '.c' # only remove .c files - else: - suffix = _get_so_suffixes()[0].lower() - for fn in filelist: - if fn.lower().startswith('_cffi_') and ( - fn.lower().endswith(suffix) or fn.lower().endswith('.c')): - try: - os.unlink(os.path.join(tmpdir, fn)) - except OSError: - pass - clean_dir = [os.path.join(tmpdir, 'build')] - for dir in clean_dir: - try: - for fn in os.listdir(dir): - fn = os.path.join(dir, fn) - if os.path.isdir(fn): - clean_dir.append(fn) - else: - os.unlink(fn) - except OSError: - pass - -def _get_so_suffixes(): - suffixes = _extension_suffixes() - if not suffixes: - # bah, no C_EXTENSION available. Occurs on pypy without cpyext - if sys.platform == 'win32': - suffixes = [".pyd"] - else: - suffixes = [".so"] - - return suffixes - -def _ensure_dir(filename): - dirname = os.path.dirname(filename) - if dirname and not os.path.isdir(dirname): - os.makedirs(dirname) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/METADATA b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/METADATA deleted file mode 100644 index d2a40df..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/METADATA +++ /dev/null @@ -1,798 +0,0 @@ -Metadata-Version: 2.4 -Name: charset-normalizer -Version: 3.4.6 -Summary: The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. -Author-email: "Ahmed R. TAHRI" -Maintainer-email: "Ahmed R. TAHRI" -License: MIT -Project-URL: Changelog, https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md -Project-URL: Documentation, https://charset-normalizer.readthedocs.io/ -Project-URL: Code, https://github.com/jawah/charset_normalizer -Project-URL: Issue tracker, https://github.com/jawah/charset_normalizer/issues -Keywords: encoding,charset,charset-detector,detector,normalization,unicode,chardet,detect -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Text Processing :: Linguistic -Classifier: Topic :: Utilities -Classifier: Typing :: Typed -Requires-Python: >=3.7 -Description-Content-Type: text/markdown -License-File: LICENSE -Provides-Extra: unicode-backport -Dynamic: license-file - -

Charset Detection, for Everyone 👋

- -

- The Real First Universal Charset Detector
- - - - - Download Count Total - - - - -

-

- Featured Packages
- - Static Badge - - - Static Badge - -

-

- In other language (unofficial port - by the community)
- - Static Badge - -

- -> A library that helps you read text from an unknown charset encoding.
Motivated by `chardet`, -> I'm trying to resolve the issue by taking a new approach. -> All IANA character set names for which the Python core library provides codecs are supported. -> You can also register your own set of codecs, and yes, it would work as-is. - -

- >>>>> 👉 Try Me Online Now, Then Adopt Me 👈 <<<<< -

- -This project offers you an alternative to **Universal Charset Encoding Detector**, also known as **Chardet**. - -| Feature | [Chardet](https://github.com/chardet/chardet) | Charset Normalizer | [cChardet](https://github.com/PyYoshi/cChardet) | -|--------------------------------------------------|:---------------------------------------------:|:-----------------------------------------------------------------------------------------------:|:-----------------------------------------------:| -| `Fast` | ✅ | ✅ | ✅ | -| `Universal`[^1] | ❌ | ✅ | ❌ | -| `Reliable` **without** distinguishable standards | ✅ | ✅ | ✅ | -| `Reliable` **with** distinguishable standards | ✅ | ✅ | ✅ | -| `License` | _Disputed_[^2]
_restrictive_ | MIT | MPL-1.1
_restrictive_ | -| `Native Python` | ✅ | ✅ | ❌ | -| `Detect spoken language` | ✅ | ✅ | N/A | -| `UnicodeDecodeError Safety` | ✅ | ✅ | ❌ | -| `Whl Size (min)` | 500 kB | 150 kB | ~200 kB | -| `Supported Encoding` | 99 | [99](https://charset-normalizer.readthedocs.io/en/latest/user/support.html#supported-encodings) | 40 | -| `Can register custom encoding` | ❌ | ✅ | ❌ | - -

-Reading Normalized TextCat Reading Text -

- -[^1]: They are clearly using specific code for a specific encoding even if covering most of used one. -[^2]: Chardet 7.0+ was relicensed from LGPL-2.1 to MIT following an AI-assisted rewrite. This relicensing is disputed on two independent grounds: **(a)** the original author [contests](https://github.com/chardet/chardet/issues/327) that the maintainer had the right to relicense, arguing the rewrite is a derivative work of the LGPL-licensed codebase since it was not a clean room implementation; **(b)** the copyright claim itself is [questionable](https://github.com/chardet/chardet/issues/334) given the code was primarily generated by an LLM, and AI-generated output may not be copyrightable under most jurisdictions. Either issue alone could undermine the MIT license. Beyond licensing, the rewrite raises questions about responsible use of AI in open source: key architectural ideas pioneered by charset-normalizer - notably decode-first validity filtering (our foundational approach since v1) and encoding pairwise similarity with the same algorithm and threshold — surfaced in chardet 7 without acknowledgment. The project also imported test files from charset-normalizer to train and benchmark against it, then claimed superior accuracy on those very files. Charset-normalizer has always been MIT-licensed, encoding-agnostic by design, and built on a verifiable human-authored history. - -## ⚡ Performance - -This package offer better performances (99th, and 95th) against Chardet. Here are some numbers. - -| Package | Accuracy | Mean per file (ms) | File per sec (est) | -|---------------------------------------------------|:--------:|:------------------:|:------------------:| -| [chardet 7.1](https://github.com/chardet/chardet) | 89 % | 3 ms | 333 file/sec | -| charset-normalizer | **97 %** | 3 ms | 333 file/sec | - -| Package | 99th percentile | 95th percentile | 50th percentile | -|---------------------------------------------------|:---------------:|:---------------:|:---------------:| -| [chardet 7.1](https://github.com/chardet/chardet) | 32 ms | 17 ms | < 1 ms | -| charset-normalizer | 16 ms | 10 ms | 1 ms | - -_updated as of March 2026 using CPython 3.12, Charset-Normalizer 3.4.6, and Chardet 7.1.0_ - -~Chardet's performance on larger file (1MB+) are very poor. Expect huge difference on large payload.~ No longer the case since Chardet 7.0+ - -> Stats are generated using 400+ files using default parameters. More details on used files, see GHA workflows. -> And yes, these results might change at any time. The dataset can be updated to include more files. -> The actual delays heavily depends on your CPU capabilities. The factors should remain the same. -> Chardet claims on his documentation to have a greater accuracy than us based on the dataset they trained Chardet on(...) -> Well, it's normal, the opposite would have been worrying. Whereas charset-normalizer don't train on anything, our solution -> is based on a completely different algorithm, still heuristic through, it does not need weights across every encoding tables. - -## ✨ Installation - -Using pip: - -```sh -pip install charset-normalizer -U -``` - -## 🚀 Basic Usage - -### CLI -This package comes with a CLI. - -``` -usage: normalizer [-h] [-v] [-a] [-n] [-m] [-r] [-f] [-t THRESHOLD] - file [file ...] - -The Real First Universal Charset Detector. Discover originating encoding used -on text file. Normalize text to unicode. - -positional arguments: - files File(s) to be analysed - -optional arguments: - -h, --help show this help message and exit - -v, --verbose Display complementary information about file if any. - Stdout will contain logs about the detection process. - -a, --with-alternative - Output complementary possibilities if any. Top-level - JSON WILL be a list. - -n, --normalize Permit to normalize input file. If not set, program - does not write anything. - -m, --minimal Only output the charset detected to STDOUT. Disabling - JSON output. - -r, --replace Replace file when trying to normalize it instead of - creating a new one. - -f, --force Replace file without asking if you are sure, use this - flag with caution. - -t THRESHOLD, --threshold THRESHOLD - Define a custom maximum amount of chaos allowed in - decoded content. 0. <= chaos <= 1. - --version Show version information and exit. -``` - -```bash -normalizer ./data/sample.1.fr.srt -``` - -or - -```bash -python -m charset_normalizer ./data/sample.1.fr.srt -``` - -🎉 Since version 1.4.0 the CLI produce easily usable stdout result in JSON format. - -```json -{ - "path": "/home/default/projects/charset_normalizer/data/sample.1.fr.srt", - "encoding": "cp1252", - "encoding_aliases": [ - "1252", - "windows_1252" - ], - "alternative_encodings": [ - "cp1254", - "cp1256", - "cp1258", - "iso8859_14", - "iso8859_15", - "iso8859_16", - "iso8859_3", - "iso8859_9", - "latin_1", - "mbcs" - ], - "language": "French", - "alphabets": [ - "Basic Latin", - "Latin-1 Supplement" - ], - "has_sig_or_bom": false, - "chaos": 0.149, - "coherence": 97.152, - "unicode_path": null, - "is_preferred": true -} -``` - -### Python -*Just print out normalized text* -```python -from charset_normalizer import from_path - -results = from_path('./my_subtitle.srt') - -print(str(results.best())) -``` - -*Upgrade your code without effort* -```python -from charset_normalizer import detect -``` - -The above code will behave the same as **chardet**. We ensure that we offer the best (reasonable) BC result possible. - -See the docs for advanced usage : [readthedocs.io](https://charset-normalizer.readthedocs.io/en/latest/) - -## 😇 Why - -When I started using Chardet, I noticed that it was not suited to my expectations, and I wanted to propose a -reliable alternative using a completely different method. Also! I never back down on a good challenge! - -I **don't care** about the **originating charset** encoding, because **two different tables** can -produce **two identical rendered string.** -What I want is to get readable text, the best I can. - -In a way, **I'm brute forcing text decoding.** How cool is that ? 😎 - -Don't confuse package **ftfy** with charset-normalizer or chardet. ftfy goal is to repair Unicode string whereas charset-normalizer to convert raw file in unknown encoding to unicode. - -## 🍰 How - - - Discard all charset encoding table that could not fit the binary content. - - Measure noise, or the mess once opened (by chunks) with a corresponding charset encoding. - - Extract matches with the lowest mess detected. - - Additionally, we measure coherence / probe for a language. - -**Wait a minute**, what is noise/mess and coherence according to **YOU ?** - -*Noise :* I opened hundred of text files, **written by humans**, with the wrong encoding table. **I observed**, then -**I established** some ground rules about **what is obvious** when **it seems like** a mess (aka. defining noise in rendered text). - I know that my interpretation of what is noise is probably incomplete, feel free to contribute in order to - improve or rewrite it. - -*Coherence :* For each language there is on earth, we have computed ranked letter appearance occurrences (the best we can). So I thought -that intel is worth something here. So I use those records against decoded text to check if I can detect intelligent design. - -## ⚡ Known limitations - - - Language detection is unreliable when text contains two or more languages sharing identical letters. (eg. HTML (english tags) + Turkish content (Sharing Latin characters)) - - Every charset detector heavily depends on sufficient content. In common cases, do not bother run detection on very tiny content. - -## ⚠️ About Python EOLs - -**If you are running:** - -- Python >=2.7,<3.5: Unsupported -- Python 3.5: charset-normalizer < 2.1 -- Python 3.6: charset-normalizer < 3.1 - -Upgrade your Python interpreter as soon as possible. - -## 👤 Contributing - -Contributions, issues and feature requests are very much welcome.
-Feel free to check [issues page](https://github.com/ousret/charset_normalizer/issues) if you want to contribute. - -## 📝 License - -Copyright © [Ahmed TAHRI @Ousret](https://github.com/Ousret).
-This project is [MIT](https://github.com/Ousret/charset_normalizer/blob/master/LICENSE) licensed. - -Characters frequencies used in this project © 2012 [Denny Vrandečić](http://simia.net/letters/) - -## 💼 For Enterprise - -Professional support for charset-normalizer is available as part of the [Tidelift -Subscription][1]. Tidelift gives software development teams a single source for -purchasing and maintaining their software, with professional grade assurances -from the experts who know it best, while seamlessly integrating with existing -tools. - -[1]: https://tidelift.com/subscription/pkg/pypi-charset-normalizer?utm_source=pypi-charset-normalizer&utm_medium=readme - -[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7297/badge)](https://www.bestpractices.dev/projects/7297) - -# Changelog -All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - -## [3.4.6](https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6) (2026-03-15) - -### Changed -- Flattened the logic in `charset_normalizer.md` for higher performance. Removed `eligible(..)` and `feed(...)` - in favor of `feed_info(...)`. -- Raised upper bound for mypy[c] to 1.20, for our optimized version. -- Updated `UNICODE_RANGES_COMBINED` using Unicode blocks v17. - -### Fixed -- Edge case where noise difference between two candidates can be almost insignificant. (#672) -- CLI `--normalize` writing to wrong path when passing multiple files in. (#702) - -### Misc -- Freethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (#616) - -## [3.4.5](https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5) (2026-03-06) - -### Changed -- Update `setuptools` constraint to `setuptools>=68,<=82`. -- Raised upper bound of mypyc for the optional pre-built extension to v1.19.1 - -### Fixed -- Add explicit link to lib math in our optimized build. (#692) -- Logger level not restored correctly for empty byte sequences. (#701) -- TypeError when passing bytearray to from_bytes. (#703) - -### Misc -- Applied safe micro-optimizations in both our noise detector and language detector. -- Rewrote the `query_yes_no` function (inside CLI) to avoid using ambiguous licensed code. -- Added `cd.py` submodule into mypyc optional compilation to reduce further the performance impact. - -## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4) (2025-10-13) - -### Changed -- Bound `setuptools` to a specific constraint `setuptools>=68,<=81`. -- Raised upper bound of mypyc for the optional pre-built extension to v1.18.2 - -### Removed -- `setuptools-scm` as a build dependency. - -### Misc -- Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes. -- Additional pre-built wheels for riscv64, s390x, and armv7l architectures. -- Restore ` multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel. - -## [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09) - -### Changed -- mypy(c) is no longer a required dependency at build time if `CHARSET_NORMALIZER_USE_MYPYC` isn't set to `1`. (#595) (#583) -- automatically lower confidence on small bytes samples that are not Unicode in `detect` output legacy function. (#391) - -### Added -- Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase. -- Support for Python 3.14 - -### Fixed -- sdist archive contained useless directories. -- automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633) - -### Misc -- SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. - Each published wheel comes with its SBOM. We choose CycloneDX as the format. -- Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel. - -## [3.4.2](https://github.com/Ousret/charset_normalizer/compare/3.4.1...3.4.2) (2025-05-02) - -### Fixed -- Addressed the DeprecationWarning in our CLI regarding `argparse.FileType` by backporting the target class into the package. (#591) -- Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587) - -### Changed -- Optional mypyc compilation upgraded to version 1.15 for Python >= 3.8 - -## [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) - -### Changed -- Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. -- Enforce annotation delayed loading for a simpler and consistent types in the project. -- Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 - -### Added -- pre-commit configuration. -- noxfile. - -### Removed -- `build-requirements.txt` as per using `pyproject.toml` native build configuration. -- `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). -- `setup.cfg` in favor of `pyproject.toml` metadata configuration. -- Unused `utils.range_scan` function. - -### Fixed -- Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) -- Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ - -## [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) - -### Added -- Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. -- Support for Python 3.13 (#512) - -### Fixed -- Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. -- Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) -- Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381) - -## [3.3.2](https://github.com/Ousret/charset_normalizer/compare/3.3.1...3.3.2) (2023-10-31) - -### Fixed -- Unintentional memory usage regression when using large payload that match several encoding (#376) -- Regression on some detection case showcased in the documentation (#371) - -### Added -- Noise (md) probe that identify malformed arabic representation due to the presence of letters in isolated form (credit to my wife) - -## [3.3.1](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.1) (2023-10-22) - -### Changed -- Optional mypyc compilation upgraded to version 1.6.1 for Python >= 3.8 -- Improved the general detection reliability based on reports from the community - -## [3.3.0](https://github.com/Ousret/charset_normalizer/compare/3.2.0...3.3.0) (2023-09-30) - -### Added -- Allow to execute the CLI (e.g. normalizer) through `python -m charset_normalizer.cli` or `python -m charset_normalizer` -- Support for 9 forgotten encoding that are supported by Python but unlisted in `encoding.aliases` as they have no alias (#323) - -### Removed -- (internal) Redundant utils.is_ascii function and unused function is_private_use_only -- (internal) charset_normalizer.assets is moved inside charset_normalizer.constant - -### Changed -- (internal) Unicode code blocks in constants are updated using the latest v15.0.0 definition to improve detection -- Optional mypyc compilation upgraded to version 1.5.1 for Python >= 3.8 - -### Fixed -- Unable to properly sort CharsetMatch when both chaos/noise and coherence were close due to an unreachable condition in \_\_lt\_\_ (#350) - -## [3.2.0](https://github.com/Ousret/charset_normalizer/compare/3.1.0...3.2.0) (2023-06-07) - -### Changed -- Typehint for function `from_path` no longer enforce `PathLike` as its first argument -- Minor improvement over the global detection reliability - -### Added -- Introduce function `is_binary` that relies on main capabilities, and optimized to detect binaries -- Propagate `enable_fallback` argument throughout `from_bytes`, `from_path`, and `from_fp` that allow a deeper control over the detection (default True) -- Explicit support for Python 3.12 - -### Fixed -- Edge case detection failure where a file would contain 'very-long' camel cased word (Issue #289) - -## [3.1.0](https://github.com/Ousret/charset_normalizer/compare/3.0.1...3.1.0) (2023-03-06) - -### Added -- Argument `should_rename_legacy` for legacy function `detect` and disregard any new arguments without errors (PR #262) - -### Removed -- Support for Python 3.6 (PR #260) - -### Changed -- Optional speedup provided by mypy/c 1.0.1 - -## [3.0.1](https://github.com/Ousret/charset_normalizer/compare/3.0.0...3.0.1) (2022-11-18) - -### Fixed -- Multi-bytes cutter/chunk generator did not always cut correctly (PR #233) - -### Changed -- Speedup provided by mypy/c 0.990 on Python >= 3.7 - -## [3.0.0](https://github.com/Ousret/charset_normalizer/compare/2.1.1...3.0.0) (2022-10-20) - -### Added -- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results -- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES -- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio -- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) - -### Changed -- Build with static metadata using 'build' frontend -- Make the language detection stricter -- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 - -### Fixed -- CLI with opt --normalize fail when using full path for files -- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it -- Sphinx warnings when generating the documentation - -### Removed -- Coherence detector no longer return 'Simple English' instead return 'English' -- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' -- Breaking: Method `first()` and `best()` from CharsetMatch -- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) -- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches -- Breaking: Top-level function `normalize` -- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch -- Support for the backport `unicodedata2` - -## [3.0.0rc1](https://github.com/Ousret/charset_normalizer/compare/3.0.0b2...3.0.0rc1) (2022-10-18) - -### Added -- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results -- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES -- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio - -### Changed -- Build with static metadata using 'build' frontend -- Make the language detection stricter - -### Fixed -- CLI with opt --normalize fail when using full path for files -- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it - -### Removed -- Coherence detector no longer return 'Simple English' instead return 'English' -- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' - -## [3.0.0b2](https://github.com/Ousret/charset_normalizer/compare/3.0.0b1...3.0.0b2) (2022-08-21) - -### Added -- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) - -### Removed -- Breaking: Method `first()` and `best()` from CharsetMatch -- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) - -### Fixed -- Sphinx warnings when generating the documentation - -## [3.0.0b1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...3.0.0b1) (2022-08-15) - -### Changed -- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 - -### Removed -- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches -- Breaking: Top-level function `normalize` -- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch -- Support for the backport `unicodedata2` - -## [2.1.1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...2.1.1) (2022-08-19) - -### Deprecated -- Function `normalize` scheduled for removal in 3.0 - -### Changed -- Removed useless call to decode in fn is_unprintable (#206) - -### Fixed -- Third-party library (i18n xgettext) crashing not recognizing utf_8 (PEP 263) with underscore from [@aleksandernovikov](https://github.com/aleksandernovikov) (#204) - -## [2.1.0](https://github.com/Ousret/charset_normalizer/compare/2.0.12...2.1.0) (2022-06-19) - -### Added -- Output the Unicode table version when running the CLI with `--version` (PR #194) - -### Changed -- Re-use decoded buffer for single byte character sets from [@nijel](https://github.com/nijel) (PR #175) -- Fixing some performance bottlenecks from [@deedy5](https://github.com/deedy5) (PR #183) - -### Fixed -- Workaround potential bug in cpython with Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space (PR #175) -- CLI default threshold aligned with the API threshold from [@oleksandr-kuzmenko](https://github.com/oleksandr-kuzmenko) (PR #181) - -### Removed -- Support for Python 3.5 (PR #192) - -### Deprecated -- Use of backport unicodedata from `unicodedata2` as Python is quickly catching up, scheduled for removal in 3.0 (PR #194) - -## [2.0.12](https://github.com/Ousret/charset_normalizer/compare/2.0.11...2.0.12) (2022-02-12) - -### Fixed -- ASCII miss-detection on rare cases (PR #170) - -## [2.0.11](https://github.com/Ousret/charset_normalizer/compare/2.0.10...2.0.11) (2022-01-30) - -### Added -- Explicit support for Python 3.11 (PR #164) - -### Changed -- The logging behavior have been completely reviewed, now using only TRACE and DEBUG levels (PR #163 #165) - -## [2.0.10](https://github.com/Ousret/charset_normalizer/compare/2.0.9...2.0.10) (2022-01-04) - -### Fixed -- Fallback match entries might lead to UnicodeDecodeError for large bytes sequence (PR #154) - -### Changed -- Skipping the language-detection (CD) on ASCII (PR #155) - -## [2.0.9](https://github.com/Ousret/charset_normalizer/compare/2.0.8...2.0.9) (2021-12-03) - -### Changed -- Moderating the logging impact (since 2.0.8) for specific environments (PR #147) - -### Fixed -- Wrong logging level applied when setting kwarg `explain` to True (PR #146) - -## [2.0.8](https://github.com/Ousret/charset_normalizer/compare/2.0.7...2.0.8) (2021-11-24) -### Changed -- Improvement over Vietnamese detection (PR #126) -- MD improvement on trailing data and long foreign (non-pure latin) data (PR #124) -- Efficiency improvements in cd/alphabet_languages from [@adbar](https://github.com/adbar) (PR #122) -- call sum() without an intermediary list following PEP 289 recommendations from [@adbar](https://github.com/adbar) (PR #129) -- Code style as refactored by Sourcery-AI (PR #131) -- Minor adjustment on the MD around european words (PR #133) -- Remove and replace SRTs from assets / tests (PR #139) -- Initialize the library logger with a `NullHandler` by default from [@nmaynes](https://github.com/nmaynes) (PR #135) -- Setting kwarg `explain` to True will add provisionally (bounded to function lifespan) a specific stream handler (PR #135) - -### Fixed -- Fix large (misleading) sequence giving UnicodeDecodeError (PR #137) -- Avoid using too insignificant chunk (PR #137) - -### Added -- Add and expose function `set_logging_handler` to configure a specific StreamHandler from [@nmaynes](https://github.com/nmaynes) (PR #135) -- Add `CHANGELOG.md` entries, format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (PR #141) - -## [2.0.7](https://github.com/Ousret/charset_normalizer/compare/2.0.6...2.0.7) (2021-10-11) -### Added -- Add support for Kazakh (Cyrillic) language detection (PR #109) - -### Changed -- Further, improve inferring the language from a given single-byte code page (PR #112) -- Vainly trying to leverage PEP263 when PEP3120 is not supported (PR #116) -- Refactoring for potential performance improvements in loops from [@adbar](https://github.com/adbar) (PR #113) -- Various detection improvement (MD+CD) (PR #117) - -### Removed -- Remove redundant logging entry about detected language(s) (PR #115) - -### Fixed -- Fix a minor inconsistency between Python 3.5 and other versions regarding language detection (PR #117 #102) - -## [2.0.6](https://github.com/Ousret/charset_normalizer/compare/2.0.5...2.0.6) (2021-09-18) -### Fixed -- Unforeseen regression with the loss of the backward-compatibility with some older minor of Python 3.5.x (PR #100) -- Fix CLI crash when using --minimal output in certain cases (PR #103) - -### Changed -- Minor improvement to the detection efficiency (less than 1%) (PR #106 #101) - -## [2.0.5](https://github.com/Ousret/charset_normalizer/compare/2.0.4...2.0.5) (2021-09-14) -### Changed -- The project now comply with: flake8, mypy, isort and black to ensure a better overall quality (PR #81) -- The BC-support with v1.x was improved, the old staticmethods are restored (PR #82) -- The Unicode detection is slightly improved (PR #93) -- Add syntax sugar \_\_bool\_\_ for results CharsetMatches list-container (PR #91) - -### Removed -- The project no longer raise warning on tiny content given for detection, will be simply logged as warning instead (PR #92) - -### Fixed -- In some rare case, the chunks extractor could cut in the middle of a multi-byte character and could mislead the mess detection (PR #95) -- Some rare 'space' characters could trip up the UnprintablePlugin/Mess detection (PR #96) -- The MANIFEST.in was not exhaustive (PR #78) - -## [2.0.4](https://github.com/Ousret/charset_normalizer/compare/2.0.3...2.0.4) (2021-07-30) -### Fixed -- The CLI no longer raise an unexpected exception when no encoding has been found (PR #70) -- Fix accessing the 'alphabets' property when the payload contains surrogate characters (PR #68) -- The logger could mislead (explain=True) on detected languages and the impact of one MBCS match (PR #72) -- Submatch factoring could be wrong in rare edge cases (PR #72) -- Multiple files given to the CLI were ignored when publishing results to STDOUT. (After the first path) (PR #72) -- Fix line endings from CRLF to LF for certain project files (PR #67) - -### Changed -- Adjust the MD to lower the sensitivity, thus improving the global detection reliability (PR #69 #76) -- Allow fallback on specified encoding if any (PR #71) - -## [2.0.3](https://github.com/Ousret/charset_normalizer/compare/2.0.2...2.0.3) (2021-07-16) -### Changed -- Part of the detection mechanism has been improved to be less sensitive, resulting in more accurate detection results. Especially ASCII. (PR #63) -- According to the community wishes, the detection will fall back on ASCII or UTF-8 in a last-resort case. (PR #64) - -## [2.0.2](https://github.com/Ousret/charset_normalizer/compare/2.0.1...2.0.2) (2021-07-15) -### Fixed -- Empty/Too small JSON payload miss-detection fixed. Report from [@tseaver](https://github.com/tseaver) (PR #59) - -### Changed -- Don't inject unicodedata2 into sys.modules from [@akx](https://github.com/akx) (PR #57) - -## [2.0.1](https://github.com/Ousret/charset_normalizer/compare/2.0.0...2.0.1) (2021-07-13) -### Fixed -- Make it work where there isn't a filesystem available, dropping assets frequencies.json. Report from [@sethmlarson](https://github.com/sethmlarson). (PR #55) -- Using explain=False permanently disable the verbose output in the current runtime (PR #47) -- One log entry (language target preemptive) was not show in logs when using explain=True (PR #47) -- Fix undesired exception (ValueError) on getitem of instance CharsetMatches (PR #52) - -### Changed -- Public function normalize default args values were not aligned with from_bytes (PR #53) - -### Added -- You may now use charset aliases in cp_isolation and cp_exclusion arguments (PR #47) - -## [2.0.0](https://github.com/Ousret/charset_normalizer/compare/1.4.1...2.0.0) (2021-07-02) -### Changed -- 4x to 5 times faster than the previous 1.4.0 release. At least 2x faster than Chardet. -- Accent has been made on UTF-8 detection, should perform rather instantaneous. -- The backward compatibility with Chardet has been greatly improved. The legacy detect function returns an identical charset name whenever possible. -- The detection mechanism has been slightly improved, now Turkish content is detected correctly (most of the time) -- The program has been rewritten to ease the readability and maintainability. (+Using static typing)+ -- utf_7 detection has been reinstated. - -### Removed -- This package no longer require anything when used with Python 3.5 (Dropped cached_property) -- Removed support for these languages: Catalan, Esperanto, Kazakh, Baque, Volapük, Azeri, Galician, Nynorsk, Macedonian, and Serbocroatian. -- The exception hook on UnicodeDecodeError has been removed. - -### Deprecated -- Methods coherence_non_latin, w_counter, chaos_secondary_pass of the class CharsetMatch are now deprecated and scheduled for removal in v3.0 - -### Fixed -- The CLI output used the relative path of the file(s). Should be absolute. - -## [1.4.1](https://github.com/Ousret/charset_normalizer/compare/1.4.0...1.4.1) (2021-05-28) -### Fixed -- Logger configuration/usage no longer conflict with others (PR #44) - -## [1.4.0](https://github.com/Ousret/charset_normalizer/compare/1.3.9...1.4.0) (2021-05-21) -### Removed -- Using standard logging instead of using the package loguru. -- Dropping nose test framework in favor of the maintained pytest. -- Choose to not use dragonmapper package to help with gibberish Chinese/CJK text. -- Require cached_property only for Python 3.5 due to constraint. Dropping for every other interpreter version. -- Stop support for UTF-7 that does not contain a SIG. -- Dropping PrettyTable, replaced with pure JSON output in CLI. - -### Fixed -- BOM marker in a CharsetNormalizerMatch instance could be False in rare cases even if obviously present. Due to the sub-match factoring process. -- Not searching properly for the BOM when trying utf32/16 parent codec. - -### Changed -- Improving the package final size by compressing frequencies.json. -- Huge improvement over the larges payload. - -### Added -- CLI now produces JSON consumable output. -- Return ASCII if given sequences fit. Given reasonable confidence. - -## [1.3.9](https://github.com/Ousret/charset_normalizer/compare/1.3.8...1.3.9) (2021-05-13) - -### Fixed -- In some very rare cases, you may end up getting encode/decode errors due to a bad bytes payload (PR #40) - -## [1.3.8](https://github.com/Ousret/charset_normalizer/compare/1.3.7...1.3.8) (2021-05-12) - -### Fixed -- Empty given payload for detection may cause an exception if trying to access the `alphabets` property. (PR #39) - -## [1.3.7](https://github.com/Ousret/charset_normalizer/compare/1.3.6...1.3.7) (2021-05-12) - -### Fixed -- The legacy detect function should return UTF-8-SIG if sig is present in the payload. (PR #38) - -## [1.3.6](https://github.com/Ousret/charset_normalizer/compare/1.3.5...1.3.6) (2021-02-09) - -### Changed -- Amend the previous release to allow prettytable 2.0 (PR #35) - -## [1.3.5](https://github.com/Ousret/charset_normalizer/compare/1.3.4...1.3.5) (2021-02-08) - -### Fixed -- Fix error while using the package with a python pre-release interpreter (PR #33) - -### Changed -- Dependencies refactoring, constraints revised. - -### Added -- Add python 3.9 and 3.10 to the supported interpreters - -MIT License - -Copyright (c) 2025 TAHRI Ahmed R. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/RECORD b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/RECORD deleted file mode 100644 index 4752895..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/RECORD +++ /dev/null @@ -1,36 +0,0 @@ -../../../bin/normalizer,sha256=DKJRGMUCxYG2elTWWnNFmQ0u-eK-Yf5TCKS-UqNtOAU,275 -81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so,sha256=aPACOLPNPMbqVMP1TpmILJVJO4CNT_Pyy2YL0daE8kk,414128 -charset_normalizer-3.4.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -charset_normalizer-3.4.6.dist-info/METADATA,sha256=dk9sTA95N-j8mBeWuSnjw6zoAYbY9J7viW3Jukhd8S4,40556 -charset_normalizer-3.4.6.dist-info/RECORD,, -charset_normalizer-3.4.6.dist-info/WHEEL,sha256=ND-iKo1q8cWcsXAKXBKvQvxAFH_GQvThPpjreAAS6vI,190 -charset_normalizer-3.4.6.dist-info/entry_points.txt,sha256=ADSTKrkXZ3hhdOVFi6DcUEHQRS0xfxDIE_pEz4wLIXA,65 -charset_normalizer-3.4.6.dist-info/licenses/LICENSE,sha256=bQ1Bv-FwrGx9wkjJpj4lTQ-0WmDVCoJX0K-SxuJJuIc,1071 -charset_normalizer-3.4.6.dist-info/top_level.txt,sha256=c_vZbitqecT2GfK3zdxSTLCn8C-6pGnHQY5o_5Y32M0,47 -charset_normalizer/__init__.py,sha256=OKRxRv2Zhnqk00tqkN0c1BtJjm165fWXLydE52IKuHc,1590 -charset_normalizer/__main__.py,sha256=yzYxMR-IhKRHYwcSlavEv8oGdwxsR89mr2X09qXGdps,109 -charset_normalizer/__pycache__/__init__.cpython-312.pyc,, -charset_normalizer/__pycache__/__main__.cpython-312.pyc,, -charset_normalizer/__pycache__/api.cpython-312.pyc,, -charset_normalizer/__pycache__/cd.cpython-312.pyc,, -charset_normalizer/__pycache__/constant.cpython-312.pyc,, -charset_normalizer/__pycache__/legacy.cpython-312.pyc,, -charset_normalizer/__pycache__/md.cpython-312.pyc,, -charset_normalizer/__pycache__/models.cpython-312.pyc,, -charset_normalizer/__pycache__/utils.cpython-312.pyc,, -charset_normalizer/__pycache__/version.cpython-312.pyc,, -charset_normalizer/api.py,sha256=6kHyIpfgxrjR_o_s_IGZ_zweFIfiGRBf-tnKRPqwg_E,37960 -charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so,sha256=KRs9UiPDxL5LmvMpsgOxjVpbPowT3L9yjkDmyP34GPI,15912 -charset_normalizer/cd.py,sha256=v0iPJweGsRegXywrM1LzUgqW9bJ1KFvIblQHP1jm5FQ,15174 -charset_normalizer/cli/__init__.py,sha256=D8I86lFk2-py45JvqxniTirSj_sFyE6sjaY_0-G1shc,136 -charset_normalizer/cli/__main__.py,sha256=E9FFSV1E2iOE_B2B1tJHQT9ExJqc60Ks_c-08sNawh8,11940 -charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc,, -charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc,, -charset_normalizer/constant.py,sha256=UMxXijQRKnoj27qP5vjNPJed2kJUB9rmCbRuLBjwIQ0,44431 -charset_normalizer/legacy.py,sha256=yBIFMNABNPE5JkdKOWyVo36fZtV9nm8bf37LrDWulz8,2661 -charset_normalizer/md.cpython-312-x86_64-linux-gnu.so,sha256=VaxqqP3RbmelZISMwRb2ahdtqNdbXBgN56dIZuZ-tfw,15912 -charset_normalizer/md.py,sha256=AYCdfDX79FrgoId3zXqmbCuDcbGr1NRuGqgJN94Rx9Q,30441 -charset_normalizer/models.py,sha256=01sizRL-AUJ5FOzANwAtV6l2rQ0Dd5dZpJUfXv6HTxc,12360 -charset_normalizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -charset_normalizer/utils.py,sha256=9cpi-_0-vC9pGDfuoarhC6VlF_Jxwx5Jsa_8I4w2D8k,12282 -charset_normalizer/version.py,sha256=w4FVpMHIJ5sT9HC5JROzcW8kYPHryvjSgIDqUM5w1uw,115 diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/WHEEL deleted file mode 100644 index e6d9007..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/WHEEL +++ /dev/null @@ -1,7 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (82.0.0) -Root-Is-Purelib: false -Tag: cp312-cp312-manylinux_2_17_x86_64 -Tag: cp312-cp312-manylinux2014_x86_64 -Tag: cp312-cp312-manylinux_2_28_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/entry_points.txt b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/entry_points.txt deleted file mode 100644 index 65619e7..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[console_scripts] -normalizer = charset_normalizer.cli:cli_detect diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/licenses/LICENSE deleted file mode 100644 index 9725772..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/licenses/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 TAHRI Ahmed R. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/top_level.txt deleted file mode 100644 index 89847be..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer-3.4.6.dist-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -81d243bd2c585b0f4821__mypyc -charset_normalizer diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__init__.py b/myenv/lib/python3.12/site-packages/charset_normalizer/__init__.py deleted file mode 100644 index 0d3a379..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/__init__.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Charset-Normalizer -~~~~~~~~~~~~~~ -The Real First Universal Charset Detector. -A library that helps you read text from an unknown charset encoding. -Motivated by chardet, This package is trying to resolve the issue by taking a new approach. -All IANA character set names for which the Python core library provides codecs are supported. - -Basic usage: - >>> from charset_normalizer import from_bytes - >>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8')) - >>> best_guess = results.best() - >>> str(best_guess) - 'Bсеки човек има право на образование. Oбразованието!' - -Others methods and usages are available - see the full documentation -at . -:copyright: (c) 2021 by Ahmed TAHRI -:license: MIT, see LICENSE for more details. -""" - -from __future__ import annotations - -import logging - -from .api import from_bytes, from_fp, from_path, is_binary -from .legacy import detect -from .models import CharsetMatch, CharsetMatches -from .utils import set_logging_handler -from .version import VERSION, __version__ - -__all__ = ( - "from_fp", - "from_path", - "from_bytes", - "is_binary", - "detect", - "CharsetMatch", - "CharsetMatches", - "__version__", - "VERSION", - "set_logging_handler", -) - -# Attach a NullHandler to the top level logger by default -# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library - -logging.getLogger("charset_normalizer").addHandler(logging.NullHandler()) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__main__.py b/myenv/lib/python3.12/site-packages/charset_normalizer/__main__.py deleted file mode 100644 index e0e76f7..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/__main__.py +++ /dev/null @@ -1,6 +0,0 @@ -from __future__ import annotations - -from .cli import cli_detect - -if __name__ == "__main__": - cli_detect() diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index cf04253..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index b75ba96..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc deleted file mode 100644 index dc54ea3..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc deleted file mode 100644 index 28f8fbd..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc deleted file mode 100644 index bc8d2db..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc deleted file mode 100644 index db57cc5..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc deleted file mode 100644 index 550b626..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc deleted file mode 100644 index 745b179..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 552ee03..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc deleted file mode 100644 index f507d77..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/api.py b/myenv/lib/python3.12/site-packages/charset_normalizer/api.py deleted file mode 100644 index 1f32091..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/api.py +++ /dev/null @@ -1,974 +0,0 @@ -from __future__ import annotations - -import logging -from os import PathLike -from typing import BinaryIO - -from .cd import ( - coherence_ratio, - encoding_languages, - mb_encoding_languages, - merge_coherence_ratios, -) -from .constant import ( - IANA_SUPPORTED, - IANA_SUPPORTED_SIMILAR, - TOO_BIG_SEQUENCE, - TOO_SMALL_SEQUENCE, - TRACE, -) -from .md import mess_ratio -from .models import CharsetMatch, CharsetMatches -from .utils import ( - any_specified_encoding, - cut_sequence_chunks, - iana_name, - identify_sig_or_bom, - is_multi_byte_encoding, - should_strip_sig_or_bom, -) - -logger = logging.getLogger("charset_normalizer") -explain_handler = logging.StreamHandler() -explain_handler.setFormatter( - logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") -) - -# Pre-compute a reordered encoding list: multibyte first, then single-byte. -# This allows the mb_definitive_match optimization to fire earlier, skipping -# all single-byte encodings for genuine CJK content. Multibyte codecs -# hard-fail (UnicodeDecodeError) on single-byte data almost instantly, so -# testing them first costs negligible time for non-CJK files. -_mb_supported: list[str] = [] -_sb_supported: list[str] = [] - -for _supported_enc in IANA_SUPPORTED: - try: - if is_multi_byte_encoding(_supported_enc): - _mb_supported.append(_supported_enc) - else: - _sb_supported.append(_supported_enc) - except ImportError: - _sb_supported.append(_supported_enc) - -IANA_SUPPORTED_MB_FIRST: list[str] = _mb_supported + _sb_supported - - -def from_bytes( - sequences: bytes | bytearray, - steps: int = 5, - chunk_size: int = 512, - threshold: float = 0.2, - cp_isolation: list[str] | None = None, - cp_exclusion: list[str] | None = None, - preemptive_behaviour: bool = True, - explain: bool = False, - language_threshold: float = 0.1, - enable_fallback: bool = True, -) -> CharsetMatches: - """ - Given a raw bytes sequence, return the best possibles charset usable to render str objects. - If there is no results, it is a strong indicator that the source is binary/not text. - By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence. - And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will. - - The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page - but never take it for granted. Can improve the performance. - - You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that - purpose. - - This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32. - By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain' - toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging. - Custom logging format and handler can be set manually. - """ - - if not isinstance(sequences, (bytearray, bytes)): - raise TypeError( - "Expected object of type bytes or bytearray, got: {}".format( - type(sequences) - ) - ) - - if explain: - previous_logger_level: int = logger.level - logger.addHandler(explain_handler) - logger.setLevel(TRACE) - - length: int = len(sequences) - - if length == 0: - logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.") - if explain: # Defensive: ensure exit path clean handler - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")]) - - if cp_isolation is not None: - logger.log( - TRACE, - "cp_isolation is set. use this flag for debugging purpose. " - "limited list of encoding allowed : %s.", - ", ".join(cp_isolation), - ) - cp_isolation = [iana_name(cp, False) for cp in cp_isolation] - else: - cp_isolation = [] - - if cp_exclusion is not None: - logger.log( - TRACE, - "cp_exclusion is set. use this flag for debugging purpose. " - "limited list of encoding excluded : %s.", - ", ".join(cp_exclusion), - ) - cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion] - else: - cp_exclusion = [] - - if length <= (chunk_size * steps): - logger.log( - TRACE, - "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.", - steps, - chunk_size, - length, - ) - steps = 1 - chunk_size = length - - if steps > 1 and length / steps < chunk_size: - chunk_size = int(length / steps) - - is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE - is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE - - if is_too_small_sequence: - logger.log( - TRACE, - "Trying to detect encoding from a tiny portion of ({}) byte(s).".format( - length - ), - ) - elif is_too_large_sequence: - logger.log( - TRACE, - "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format( - length - ), - ) - - prioritized_encodings: list[str] = [] - - specified_encoding: str | None = ( - any_specified_encoding(sequences) if preemptive_behaviour else None - ) - - if specified_encoding is not None: - prioritized_encodings.append(specified_encoding) - logger.log( - TRACE, - "Detected declarative mark in sequence. Priority +1 given for %s.", - specified_encoding, - ) - - tested: set[str] = set() - tested_but_hard_failure: list[str] = [] - tested_but_soft_failure: list[str] = [] - soft_failure_skip: set[str] = set() - success_fast_tracked: set[str] = set() - - # Cache for decoded payload deduplication: hash(decoded_payload) -> (mean_mess_ratio, cd_ratios_merged, passed) - # When multiple encodings decode to the exact same string, we can skip the expensive - # mess_ratio and coherence_ratio analysis and reuse the results from the first encoding. - payload_result_cache: dict[int, tuple[float, list[tuple[str, float]], bool]] = {} - - # When a definitive result (chaos=0.0 and good coherence) is found after testing - # the prioritized encodings (ascii, utf_8), we can significantly reduce the remaining - # work. Encodings that target completely different language families (e.g., Cyrillic - # when the definitive match is Latin) are skipped entirely. - # Additionally, for same-family encodings that pass chaos probing, we reuse the - # definitive match's coherence ratios instead of recomputing them — a major savings - # since coherence_ratio accounts for ~30% of total time on slow Latin files. - definitive_match_found: bool = False - definitive_target_languages: set[str] = set() - # After the definitive match fires, we cap the number of additional same-family - # single-byte encodings that pass chaos probing. Once we've accumulated enough - # good candidates (N), further same-family SB encodings are unlikely to produce - # a better best() result and just waste mess_ratio + coherence_ratio time. - # The first encoding to trigger the definitive match is NOT counted (it's already in). - post_definitive_sb_success_count: int = 0 - POST_DEFINITIVE_SB_CAP: int = 7 - - # When a non-UTF multibyte encoding passes chaos probing with significant multibyte - # content (decoded length < 98% of raw length), skip all remaining single-byte encodings. - # Rationale: multi-byte decoders (CJK) have strict byte-sequence validation — if they - # decode without error AND pass chaos probing with substantial multibyte content, the - # data is genuinely multibyte encoded. Single-byte encodings will always decode (every - # byte maps to something) but waste time on mess_ratio before failing. - # The 98% threshold prevents false triggers on files that happen to have a few valid - # multibyte pairs (e.g., cp424/_ude_1.txt where big5 decodes with 99% ratio). - mb_definitive_match_found: bool = False - - fallback_ascii: CharsetMatch | None = None - fallback_u8: CharsetMatch | None = None - fallback_specified: CharsetMatch | None = None - - results: CharsetMatches = CharsetMatches() - - early_stop_results: CharsetMatches = CharsetMatches() - - sig_encoding, sig_payload = identify_sig_or_bom(sequences) - - if sig_encoding is not None: - prioritized_encodings.append(sig_encoding) - logger.log( - TRACE, - "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.", - len(sig_payload), - sig_encoding, - ) - - prioritized_encodings.append("ascii") - - if "utf_8" not in prioritized_encodings: - prioritized_encodings.append("utf_8") - - for encoding_iana in prioritized_encodings + IANA_SUPPORTED_MB_FIRST: - if cp_isolation and encoding_iana not in cp_isolation: - continue - - if cp_exclusion and encoding_iana in cp_exclusion: - continue - - if encoding_iana in tested: - continue - - tested.add(encoding_iana) - - decoded_payload: str | None = None - bom_or_sig_available: bool = sig_encoding == encoding_iana - strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom( - encoding_iana - ) - - if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available: - logger.log( - TRACE, - "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.", - encoding_iana, - ) - continue - if encoding_iana in {"utf_7"} and not bom_or_sig_available: - logger.log( - TRACE, - "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.", - encoding_iana, - ) - continue - - # Skip encodings similar to ones that already soft-failed (high mess ratio). - # Checked BEFORE the expensive decode attempt. - if encoding_iana in soft_failure_skip: - logger.log( - TRACE, - "%s is deemed too similar to a code page that was already considered unsuited. Continuing!", - encoding_iana, - ) - continue - - # Skip encodings that were already fast-tracked from a similar successful encoding. - if encoding_iana in success_fast_tracked: - logger.log( - TRACE, - "Skipping %s: already fast-tracked from a similar successful encoding.", - encoding_iana, - ) - continue - - try: - is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana) - except (ModuleNotFoundError, ImportError): # Defensive: - logger.log( - TRACE, - "Encoding %s does not provide an IncrementalDecoder", - encoding_iana, - ) - continue - - # When we've already found a definitive match (chaos=0.0 with good coherence) - # after testing the prioritized encodings, skip encodings that target - # completely different language families. This avoids running expensive - # mess_ratio + coherence_ratio on clearly unrelated candidates (e.g., Cyrillic - # when the definitive match is Latin-based). - if definitive_match_found: - if not is_multi_byte_decoder: - enc_languages = set(encoding_languages(encoding_iana)) - else: - enc_languages = set(mb_encoding_languages(encoding_iana)) - if not enc_languages.intersection(definitive_target_languages): - logger.log( - TRACE, - "Skipping %s: definitive match already found, this encoding targets different languages (%s vs %s).", - encoding_iana, - enc_languages, - definitive_target_languages, - ) - continue - - # After the definitive match, cap the number of additional same-family - # single-byte encodings that pass chaos probing. This avoids testing the - # tail of rare, low-value same-family encodings (mac_iceland, cp860, etc.) - # that almost never change best() but each cost ~1-2ms of mess_ratio + coherence. - if ( - definitive_match_found - and not is_multi_byte_decoder - and post_definitive_sb_success_count >= POST_DEFINITIVE_SB_CAP - ): - logger.log( - TRACE, - "Skipping %s: already accumulated %d same-family results after definitive match (cap=%d).", - encoding_iana, - post_definitive_sb_success_count, - POST_DEFINITIVE_SB_CAP, - ) - continue - - # When a multibyte encoding with significant multibyte content has already - # passed chaos probing, skip all single-byte encodings. They will either fail - # chaos probing (wasting mess_ratio time) or produce inferior results. - if mb_definitive_match_found and not is_multi_byte_decoder: - logger.log( - TRACE, - "Skipping single-byte %s: multi-byte definitive match already found.", - encoding_iana, - ) - continue - - try: - if is_too_large_sequence and is_multi_byte_decoder is False: - str( - ( - sequences[: int(50e4)] - if strip_sig_or_bom is False - else sequences[len(sig_payload) : int(50e4)] - ), - encoding=encoding_iana, - ) - else: - decoded_payload = str( - ( - sequences - if strip_sig_or_bom is False - else sequences[len(sig_payload) :] - ), - encoding=encoding_iana, - ) - except (UnicodeDecodeError, LookupError) as e: - if not isinstance(e, LookupError): - logger.log( - TRACE, - "Code page %s does not fit given bytes sequence at ALL. %s", - encoding_iana, - str(e), - ) - tested_but_hard_failure.append(encoding_iana) - continue - - r_ = range( - 0 if not bom_or_sig_available else len(sig_payload), - length, - int(length / steps), - ) - - multi_byte_bonus: bool = ( - is_multi_byte_decoder - and decoded_payload is not None - and len(decoded_payload) < length - ) - - if multi_byte_bonus: - logger.log( - TRACE, - "Code page %s is a multi byte encoding table and it appear that at least one character " - "was encoded using n-bytes.", - encoding_iana, - ) - - # Payload-hash deduplication: if another encoding already decoded to the - # exact same string, reuse its mess_ratio and coherence results entirely. - # This is strictly more general than the old IANA_SUPPORTED_SIMILAR approach - # because it catches ALL identical decoding, not just pre-mapped ones. - if decoded_payload is not None and not is_multi_byte_decoder: - payload_hash: int = hash(decoded_payload) - cached = payload_result_cache.get(payload_hash) - if cached is not None: - cached_mess, cached_cd, cached_passed = cached - if cached_passed: - # The previous encoding with identical output passed chaos probing. - fast_match = CharsetMatch( - sequences, - encoding_iana, - cached_mess, - bom_or_sig_available, - cached_cd, - ( - decoded_payload - if ( - is_too_large_sequence is False - or encoding_iana - in [specified_encoding, "ascii", "utf_8"] - ) - else None - ), - preemptive_declaration=specified_encoding, - ) - results.append(fast_match) - success_fast_tracked.add(encoding_iana) - logger.log( - TRACE, - "%s fast-tracked (identical decoded payload to a prior encoding, chaos=%f %%).", - encoding_iana, - round(cached_mess * 100, ndigits=3), - ) - - if ( - encoding_iana in [specified_encoding, "ascii", "utf_8"] - and cached_mess < 0.1 - ): - if cached_mess == 0.0: - logger.debug( - "Encoding detection: %s is most likely the one.", - fast_match.encoding, - ) - if explain: - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - return CharsetMatches([fast_match]) - early_stop_results.append(fast_match) - - if ( - len(early_stop_results) - and (specified_encoding is None or specified_encoding in tested) - and "ascii" in tested - and "utf_8" in tested - ): - probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment] - logger.debug( - "Encoding detection: %s is most likely the one.", - probable_result.encoding, - ) - if explain: - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - return CharsetMatches([probable_result]) - - continue - else: - # The previous encoding with identical output failed chaos probing. - tested_but_soft_failure.append(encoding_iana) - logger.log( - TRACE, - "%s fast-skipped (identical decoded payload to a prior encoding that failed chaos probing).", - encoding_iana, - ) - # Prepare fallbacks for special encodings even when skipped. - if enable_fallback and encoding_iana in [ - "ascii", - "utf_8", - specified_encoding, - "utf_16", - "utf_32", - ]: - fallback_entry = CharsetMatch( - sequences, - encoding_iana, - threshold, - bom_or_sig_available, - [], - decoded_payload, - preemptive_declaration=specified_encoding, - ) - if encoding_iana == specified_encoding: - fallback_specified = fallback_entry - elif encoding_iana == "ascii": - fallback_ascii = fallback_entry - else: - fallback_u8 = fallback_entry - continue - - max_chunk_gave_up: int = int(len(r_) / 4) - - max_chunk_gave_up = max(max_chunk_gave_up, 2) - early_stop_count: int = 0 - lazy_str_hard_failure = False - - md_chunks: list[str] = [] - md_ratios = [] - - try: - for chunk in cut_sequence_chunks( - sequences, - encoding_iana, - r_, - chunk_size, - bom_or_sig_available, - strip_sig_or_bom, - sig_payload, - is_multi_byte_decoder, - decoded_payload, - ): - md_chunks.append(chunk) - - md_ratios.append( - mess_ratio( - chunk, - threshold, - explain is True and 1 <= len(cp_isolation) <= 2, - ) - ) - - if md_ratios[-1] >= threshold: - early_stop_count += 1 - - if (early_stop_count >= max_chunk_gave_up) or ( - bom_or_sig_available and strip_sig_or_bom is False - ): - break - except ( - UnicodeDecodeError - ) as e: # Lazy str loading may have missed something there - logger.log( - TRACE, - "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s", - encoding_iana, - str(e), - ) - early_stop_count = max_chunk_gave_up - lazy_str_hard_failure = True - - # We might want to check the sequence again with the whole content - # Only if initial MD tests passes - if ( - not lazy_str_hard_failure - and is_too_large_sequence - and not is_multi_byte_decoder - ): - try: - sequences[int(50e3) :].decode(encoding_iana, errors="strict") - except UnicodeDecodeError as e: - logger.log( - TRACE, - "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s", - encoding_iana, - str(e), - ) - tested_but_hard_failure.append(encoding_iana) - continue - - mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0 - if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up: - tested_but_soft_failure.append(encoding_iana) - if encoding_iana in IANA_SUPPORTED_SIMILAR: - soft_failure_skip.update(IANA_SUPPORTED_SIMILAR[encoding_iana]) - # Cache this soft-failure so identical decoding from other encodings - # can be skipped immediately. - if decoded_payload is not None and not is_multi_byte_decoder: - payload_result_cache.setdefault( - hash(decoded_payload), (mean_mess_ratio, [], False) - ) - logger.log( - TRACE, - "%s was excluded because of initial chaos probing. Gave up %i time(s). " - "Computed mean chaos is %f %%.", - encoding_iana, - early_stop_count, - round(mean_mess_ratio * 100, ndigits=3), - ) - # Preparing those fallbacks in case we got nothing. - if ( - enable_fallback - and encoding_iana - in ["ascii", "utf_8", specified_encoding, "utf_16", "utf_32"] - and not lazy_str_hard_failure - ): - fallback_entry = CharsetMatch( - sequences, - encoding_iana, - threshold, - bom_or_sig_available, - [], - decoded_payload, - preemptive_declaration=specified_encoding, - ) - if encoding_iana == specified_encoding: - fallback_specified = fallback_entry - elif encoding_iana == "ascii": - fallback_ascii = fallback_entry - else: - fallback_u8 = fallback_entry - continue - - logger.log( - TRACE, - "%s passed initial chaos probing. Mean measured chaos is %f %%", - encoding_iana, - round(mean_mess_ratio * 100, ndigits=3), - ) - - if not is_multi_byte_decoder: - target_languages: list[str] = encoding_languages(encoding_iana) - else: - target_languages = mb_encoding_languages(encoding_iana) - - if target_languages: - logger.log( - TRACE, - "{} should target any language(s) of {}".format( - encoding_iana, str(target_languages) - ), - ) - - cd_ratios = [] - - # Run coherence detection on all chunks. We previously tried limiting to - # 1-2 chunks for post-definitive encodings to save time, but this caused - # coverage regressions by producing unrepresentative coherence scores. - # The SB cap and language-family skip optimizations provide sufficient - # speedup without sacrificing coherence accuracy. - if encoding_iana != "ascii": - # We shall skip the CD when its about ASCII - # Most of the time its not relevant to run "language-detection" on it. - for chunk in md_chunks: - chunk_languages = coherence_ratio( - chunk, - language_threshold, - ",".join(target_languages) if target_languages else None, - ) - - cd_ratios.append(chunk_languages) - cd_ratios_merged = merge_coherence_ratios(cd_ratios) - else: - cd_ratios_merged = merge_coherence_ratios(cd_ratios) - - if cd_ratios_merged: - logger.log( - TRACE, - "We detected language {} using {}".format( - cd_ratios_merged, encoding_iana - ), - ) - - current_match = CharsetMatch( - sequences, - encoding_iana, - mean_mess_ratio, - bom_or_sig_available, - cd_ratios_merged, - ( - decoded_payload - if ( - is_too_large_sequence is False - or encoding_iana in [specified_encoding, "ascii", "utf_8"] - ) - else None - ), - preemptive_declaration=specified_encoding, - ) - - results.append(current_match) - - # Cache the successful result for payload-hash deduplication. - if decoded_payload is not None and not is_multi_byte_decoder: - payload_result_cache.setdefault( - hash(decoded_payload), - (mean_mess_ratio, cd_ratios_merged, True), - ) - - # Count post-definitive same-family SB successes for the early termination cap. - # Only count low-mess encodings (< 2%) toward the cap. High-mess encodings are - # marginal results that shouldn't prevent better-quality candidates from being - # tested. For example, iso8859_4 (mess=0%) should not be skipped just because - # 7 high-mess Latin encodings (cp1252 at 8%, etc.) were tried first. - if ( - definitive_match_found - and not is_multi_byte_decoder - and mean_mess_ratio < 0.02 - ): - post_definitive_sb_success_count += 1 - - if ( - encoding_iana in [specified_encoding, "ascii", "utf_8"] - and mean_mess_ratio < 0.1 - ): - # If md says nothing to worry about, then... stop immediately! - if mean_mess_ratio == 0.0: - logger.debug( - "Encoding detection: %s is most likely the one.", - current_match.encoding, - ) - if explain: # Defensive: ensure exit path clean handler - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - return CharsetMatches([current_match]) - - early_stop_results.append(current_match) - - if ( - len(early_stop_results) - and (specified_encoding is None or specified_encoding in tested) - and "ascii" in tested - and "utf_8" in tested - ): - probable_result = early_stop_results.best() # type: ignore[assignment] - logger.debug( - "Encoding detection: %s is most likely the one.", - probable_result.encoding, # type: ignore[union-attr] - ) - if explain: # Defensive: ensure exit path clean handler - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - - return CharsetMatches([probable_result]) - - # Once we find a result with good coherence (>= 0.5) after testing the - # prioritized encodings (ascii, utf_8), activate "definitive mode": skip - # encodings that target completely different language families. This avoids - # running expensive mess_ratio + coherence_ratio on clearly unrelated - # candidates (e.g., Cyrillic encodings when the match is Latin-based). - # We require coherence >= 0.5 to avoid false positives (e.g., cp1251 decoding - # Hebrew text with 0.0 chaos but wrong language detection at coherence 0.33). - if not definitive_match_found and not is_multi_byte_decoder: - best_coherence = ( - max((v for _, v in cd_ratios_merged), default=0.0) - if cd_ratios_merged - else 0.0 - ) - if best_coherence >= 0.5 and "ascii" in tested and "utf_8" in tested: - definitive_match_found = True - definitive_target_languages.update(target_languages) - logger.log( - TRACE, - "Definitive match found: %s (chaos=%.3f, coherence=%.2f). Encodings targeting different language families will be skipped.", - encoding_iana, - mean_mess_ratio, - best_coherence, - ) - - # When a non-UTF multibyte encoding passes chaos probing with significant - # multibyte content (decoded < 98% of raw), activate mb_definitive_match. - # This skips all remaining single-byte encodings which would either soft-fail - # (running expensive mess_ratio for nothing) or produce inferior results. - if ( - not mb_definitive_match_found - and is_multi_byte_decoder - and multi_byte_bonus - and decoded_payload is not None - and len(decoded_payload) < length * 0.98 - and encoding_iana - not in { - "utf_8", - "utf_8_sig", - "utf_16", - "utf_16_be", - "utf_16_le", - "utf_32", - "utf_32_be", - "utf_32_le", - "utf_7", - } - and "ascii" in tested - and "utf_8" in tested - ): - mb_definitive_match_found = True - logger.log( - TRACE, - "Multi-byte definitive match: %s (chaos=%.3f, decoded=%d/%d=%.1f%%). Single-byte encodings will be skipped.", - encoding_iana, - mean_mess_ratio, - len(decoded_payload), - length, - len(decoded_payload) / length * 100, - ) - - if encoding_iana == sig_encoding: - logger.debug( - "Encoding detection: %s is most likely the one as we detected a BOM or SIG within " - "the beginning of the sequence.", - encoding_iana, - ) - if explain: # Defensive: ensure exit path clean handler - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - return CharsetMatches([results[encoding_iana]]) - - if len(results) == 0: - if fallback_u8 or fallback_ascii or fallback_specified: - logger.log( - TRACE, - "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.", - ) - - if fallback_specified: - logger.debug( - "Encoding detection: %s will be used as a fallback match", - fallback_specified.encoding, - ) - results.append(fallback_specified) - elif ( - (fallback_u8 and fallback_ascii is None) - or ( - fallback_u8 - and fallback_ascii - and fallback_u8.fingerprint != fallback_ascii.fingerprint - ) - or (fallback_u8 is not None) - ): - logger.debug("Encoding detection: utf_8 will be used as a fallback match") - results.append(fallback_u8) - elif fallback_ascii: - logger.debug("Encoding detection: ascii will be used as a fallback match") - results.append(fallback_ascii) - - if results: - logger.debug( - "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.", - results.best().encoding, # type: ignore - len(results) - 1, - ) - else: - logger.debug("Encoding detection: Unable to determine any suitable charset.") - - if explain: - logger.removeHandler(explain_handler) - logger.setLevel(previous_logger_level) - - return results - - -def from_fp( - fp: BinaryIO, - steps: int = 5, - chunk_size: int = 512, - threshold: float = 0.20, - cp_isolation: list[str] | None = None, - cp_exclusion: list[str] | None = None, - preemptive_behaviour: bool = True, - explain: bool = False, - language_threshold: float = 0.1, - enable_fallback: bool = True, -) -> CharsetMatches: - """ - Same thing than the function from_bytes but using a file pointer that is already ready. - Will not close the file pointer. - """ - return from_bytes( - fp.read(), - steps, - chunk_size, - threshold, - cp_isolation, - cp_exclusion, - preemptive_behaviour, - explain, - language_threshold, - enable_fallback, - ) - - -def from_path( - path: str | bytes | PathLike, # type: ignore[type-arg] - steps: int = 5, - chunk_size: int = 512, - threshold: float = 0.20, - cp_isolation: list[str] | None = None, - cp_exclusion: list[str] | None = None, - preemptive_behaviour: bool = True, - explain: bool = False, - language_threshold: float = 0.1, - enable_fallback: bool = True, -) -> CharsetMatches: - """ - Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode. - Can raise IOError. - """ - with open(path, "rb") as fp: - return from_fp( - fp, - steps, - chunk_size, - threshold, - cp_isolation, - cp_exclusion, - preemptive_behaviour, - explain, - language_threshold, - enable_fallback, - ) - - -def is_binary( - fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg] - steps: int = 5, - chunk_size: int = 512, - threshold: float = 0.20, - cp_isolation: list[str] | None = None, - cp_exclusion: list[str] | None = None, - preemptive_behaviour: bool = True, - explain: bool = False, - language_threshold: float = 0.1, - enable_fallback: bool = False, -) -> bool: - """ - Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string. - Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match - are disabled to be stricter around ASCII-compatible but unlikely to be a string. - """ - if isinstance(fp_or_path_or_payload, (str, PathLike)): - guesses = from_path( - fp_or_path_or_payload, - steps=steps, - chunk_size=chunk_size, - threshold=threshold, - cp_isolation=cp_isolation, - cp_exclusion=cp_exclusion, - preemptive_behaviour=preemptive_behaviour, - explain=explain, - language_threshold=language_threshold, - enable_fallback=enable_fallback, - ) - elif isinstance( - fp_or_path_or_payload, - ( - bytes, - bytearray, - ), - ): - guesses = from_bytes( - fp_or_path_or_payload, - steps=steps, - chunk_size=chunk_size, - threshold=threshold, - cp_isolation=cp_isolation, - cp_exclusion=cp_exclusion, - preemptive_behaviour=preemptive_behaviour, - explain=explain, - language_threshold=language_threshold, - enable_fallback=enable_fallback, - ) - else: - guesses = from_fp( - fp_or_path_or_payload, - steps=steps, - chunk_size=chunk_size, - threshold=threshold, - cp_isolation=cp_isolation, - cp_exclusion=cp_exclusion, - preemptive_behaviour=preemptive_behaviour, - explain=explain, - language_threshold=language_threshold, - enable_fallback=enable_fallback, - ) - - return not guesses diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index cbb7123..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cd.py b/myenv/lib/python3.12/site-packages/charset_normalizer/cd.py deleted file mode 100644 index 9545d35..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/cd.py +++ /dev/null @@ -1,454 +0,0 @@ -from __future__ import annotations - -import importlib -from codecs import IncrementalDecoder -from collections import Counter -from functools import lru_cache -from typing import Counter as TypeCounter - -from .constant import ( - FREQUENCIES, - KO_NAMES, - LANGUAGE_SUPPORTED_COUNT, - TOO_SMALL_SEQUENCE, - ZH_NAMES, - _FREQUENCIES_SET, - _FREQUENCIES_RANK, -) -from .md import is_suspiciously_successive_range -from .models import CoherenceMatches -from .utils import ( - is_accentuated, - is_latin, - is_multi_byte_encoding, - is_unicode_range_secondary, - unicode_range, -) - - -def encoding_unicode_range(iana_name: str) -> list[str]: - """ - Return associated unicode ranges in a single byte code page. - """ - if is_multi_byte_encoding(iana_name): - raise OSError( # Defensive: - "Function not supported on multi-byte code page" - ) - - decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder - - p: IncrementalDecoder = decoder(errors="ignore") - seen_ranges: dict[str, int] = {} - character_count: int = 0 - - for i in range(0x40, 0xFF): - chunk: str = p.decode(bytes([i])) - - if chunk: - character_range: str | None = unicode_range(chunk) - - if character_range is None: - continue - - if is_unicode_range_secondary(character_range) is False: - if character_range not in seen_ranges: - seen_ranges[character_range] = 0 - seen_ranges[character_range] += 1 - character_count += 1 - - return sorted( - [ - character_range - for character_range in seen_ranges - if seen_ranges[character_range] / character_count >= 0.15 - ] - ) - - -def unicode_range_languages(primary_range: str) -> list[str]: - """ - Return inferred languages used with a unicode range. - """ - languages: list[str] = [] - - for language, characters in FREQUENCIES.items(): - for character in characters: - if unicode_range(character) == primary_range: - languages.append(language) - break - - return languages - - -@lru_cache() -def encoding_languages(iana_name: str) -> list[str]: - """ - Single-byte encoding language association. Some code page are heavily linked to particular language(s). - This function does the correspondence. - """ - unicode_ranges: list[str] = encoding_unicode_range(iana_name) - primary_range: str | None = None - - for specified_range in unicode_ranges: - if "Latin" not in specified_range: - primary_range = specified_range - break - - if primary_range is None: - return ["Latin Based"] - - return unicode_range_languages(primary_range) - - -@lru_cache() -def mb_encoding_languages(iana_name: str) -> list[str]: - """ - Multi-byte encoding language association. Some code page are heavily linked to particular language(s). - This function does the correspondence. - """ - if ( - iana_name.startswith("shift_") - or iana_name.startswith("iso2022_jp") - or iana_name.startswith("euc_j") - or iana_name == "cp932" - ): - return ["Japanese"] - if iana_name.startswith("gb") or iana_name in ZH_NAMES: - return ["Chinese"] - if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES: - return ["Korean"] - - return [] - - -@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT) -def get_target_features(language: str) -> tuple[bool, bool]: - """ - Determine main aspects from a supported language if it contains accents and if is pure Latin. - """ - target_have_accents: bool = False - target_pure_latin: bool = True - - for character in FREQUENCIES[language]: - if not target_have_accents and is_accentuated(character): - target_have_accents = True - if target_pure_latin and is_latin(character) is False: - target_pure_latin = False - - return target_have_accents, target_pure_latin - - -def alphabet_languages( - characters: list[str], ignore_non_latin: bool = False -) -> list[str]: - """ - Return associated languages associated to given characters. - """ - languages: list[tuple[str, float]] = [] - - characters_set: frozenset[str] = frozenset(characters) - source_have_accents = any(is_accentuated(character) for character in characters) - - for language, language_characters in FREQUENCIES.items(): - target_have_accents, target_pure_latin = get_target_features(language) - - if ignore_non_latin and target_pure_latin is False: - continue - - if target_have_accents is False and source_have_accents: - continue - - character_count: int = len(language_characters) - - character_match_count: int = len(_FREQUENCIES_SET[language] & characters_set) - - ratio: float = character_match_count / character_count - - if ratio >= 0.2: - languages.append((language, ratio)) - - languages = sorted(languages, key=lambda x: x[1], reverse=True) - - return [compatible_language[0] for compatible_language in languages] - - -def characters_popularity_compare( - language: str, ordered_characters: list[str] -) -> float: - """ - Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. - The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). - Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) - """ - if language not in FREQUENCIES: - raise ValueError(f"{language} not available") # Defensive: - - character_approved_count: int = 0 - frequencies_language_set: frozenset[str] = _FREQUENCIES_SET[language] - lang_rank: dict[str, int] = _FREQUENCIES_RANK[language] - - ordered_characters_count: int = len(ordered_characters) - target_language_characters_count: int = len(FREQUENCIES[language]) - - large_alphabet: bool = target_language_characters_count > 26 - - expected_projection_ratio: float = ( - target_language_characters_count / ordered_characters_count - ) - - # Pre-built rank dict for ordered_characters (avoids repeated list slicing). - ordered_rank: dict[str, int] = { - char: rank for rank, char in enumerate(ordered_characters) - } - - # Pre-compute characters common to both orderings. - # Avoids repeated `c in ordered_rank` dict lookups in the inner counts. - common_chars: list[tuple[int, int]] = [ - (lr, ordered_rank[c]) for c, lr in lang_rank.items() if c in ordered_rank - ] - - # Pre-extract lr and orr arrays for faster iteration in the inner loop. - # Plain integer loops with local arrays are much faster under mypyc than - # generator expression sums over a list of tuples. - common_count: int = len(common_chars) - common_lr: list[int] = [p[0] for p in common_chars] - common_orr: list[int] = [p[1] for p in common_chars] - - for character, character_rank in zip( - ordered_characters, range(0, ordered_characters_count) - ): - if character not in frequencies_language_set: - continue - - character_rank_in_language: int = lang_rank[character] - character_rank_projection: int = int(character_rank * expected_projection_ratio) - - if ( - large_alphabet is False - and abs(character_rank_projection - character_rank_in_language) > 4 - ): - continue - - if ( - large_alphabet is True - and abs(character_rank_projection - character_rank_in_language) - < target_language_characters_count / 3 - ): - character_approved_count += 1 - continue - - # Count how many characters appear "before" in both orderings, - # and how many appear "at or after" in both orderings. - # Single pass over pre-extracted arrays — much faster under mypyc - # than two generator expression sums. - before_match_count: int = 0 - after_match_count: int = 0 - for i in range(common_count): - lr_i: int = common_lr[i] - orr_i: int = common_orr[i] - if lr_i < character_rank_in_language: - if orr_i < character_rank: - before_match_count += 1 - else: - if orr_i >= character_rank: - after_match_count += 1 - - after_len: int = target_language_characters_count - character_rank_in_language - - if character_rank_in_language == 0 and before_match_count <= 4: - character_approved_count += 1 - continue - - if after_len == 0 and after_match_count <= 4: - character_approved_count += 1 - continue - - if ( - character_rank_in_language > 0 - and before_match_count / character_rank_in_language >= 0.4 - ) or (after_len > 0 and after_match_count / after_len >= 0.4): - character_approved_count += 1 - continue - - return character_approved_count / len(ordered_characters) - - -def alpha_unicode_split(decoded_sequence: str) -> list[str]: - """ - Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. - Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; - One containing the latin letters and the other hebrew. - """ - layers: dict[str, list[str]] = {} - - # Fast path: track single-layer key to skip dict iteration for single-script text. - single_layer_key: str | None = None - multi_layer: bool = False - - # Cache the last character_range and its resolved layer to avoid repeated - # is_suspiciously_successive_range calls for consecutive same-range chars. - prev_character_range: str | None = None - prev_layer_target: str | None = None - - for character in decoded_sequence: - if character.isalpha() is False: - continue - - # ASCII fast-path: a-z and A-Z are always "Basic Latin". - # Avoids unicode_range() function call overhead for the most common case. - character_ord: int = ord(character) - if character_ord < 128: - character_range: str | None = "Basic Latin" - else: - character_range = unicode_range(character) - - if character_range is None: - continue - - # Fast path: same range as previous character → reuse cached layer target. - if character_range == prev_character_range: - if prev_layer_target is not None: - layers[prev_layer_target].append(character) - continue - - layer_target_range: str | None = None - - if multi_layer: - for discovered_range in layers: - if ( - is_suspiciously_successive_range(discovered_range, character_range) - is False - ): - layer_target_range = discovered_range - break - elif single_layer_key is not None: - if ( - is_suspiciously_successive_range(single_layer_key, character_range) - is False - ): - layer_target_range = single_layer_key - - if layer_target_range is None: - layer_target_range = character_range - - if layer_target_range not in layers: - layers[layer_target_range] = [] - if single_layer_key is None: - single_layer_key = layer_target_range - else: - multi_layer = True - - layers[layer_target_range].append(character) - - # Cache for next iteration - prev_character_range = character_range - prev_layer_target = layer_target_range - - return ["".join(chars).lower() for chars in layers.values()] - - -def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches: - """ - This function merge results previously given by the function coherence_ratio. - The return type is the same as coherence_ratio. - """ - per_language_ratios: dict[str, list[float]] = {} - for result in results: - for sub_result in result: - language, ratio = sub_result - if language not in per_language_ratios: - per_language_ratios[language] = [ratio] - continue - per_language_ratios[language].append(ratio) - - merge = [ - ( - language, - round( - sum(per_language_ratios[language]) / len(per_language_ratios[language]), - 4, - ), - ) - for language in per_language_ratios - ] - - return sorted(merge, key=lambda x: x[1], reverse=True) - - -def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches: - """ - We shall NOT return "English—" in CoherenceMatches because it is an alternative - of "English". This function only keeps the best match and remove the em-dash in it. - """ - index_results: dict[str, list[float]] = dict() - - for result in results: - language, ratio = result - no_em_name: str = language.replace("—", "") - - if no_em_name not in index_results: - index_results[no_em_name] = [] - - index_results[no_em_name].append(ratio) - - if any(len(index_results[e]) > 1 for e in index_results): - filtered_results: CoherenceMatches = [] - - for language in index_results: - filtered_results.append((language, max(index_results[language]))) - - return filtered_results - - return results - - -@lru_cache(maxsize=2048) -def coherence_ratio( - decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None -) -> CoherenceMatches: - """ - Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. - A layer = Character extraction by alphabets/ranges. - """ - - results: list[tuple[str, float]] = [] - ignore_non_latin: bool = False - - sufficient_match_count: int = 0 - - lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else [] - if "Latin Based" in lg_inclusion_list: - ignore_non_latin = True - lg_inclusion_list.remove("Latin Based") - - for layer in alpha_unicode_split(decoded_sequence): - sequence_frequencies: TypeCounter[str] = Counter(layer) - most_common = sequence_frequencies.most_common() - - character_count: int = len(layer) - - if character_count <= TOO_SMALL_SEQUENCE: - continue - - popular_character_ordered: list[str] = [c for c, o in most_common] - - for language in lg_inclusion_list or alphabet_languages( - popular_character_ordered, ignore_non_latin - ): - ratio: float = characters_popularity_compare( - language, popular_character_ordered - ) - - if ratio < threshold: - continue - elif ratio >= 0.8: - sufficient_match_count += 1 - - results.append((language, round(ratio, 4))) - - if sufficient_match_count >= 3: - break - - return sorted( - filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True - ) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py b/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py deleted file mode 100644 index 543a5a4..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from __future__ import annotations - -from .__main__ import cli_detect, query_yes_no - -__all__ = ( - "cli_detect", - "query_yes_no", -) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py b/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py deleted file mode 100644 index ad843c1..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py +++ /dev/null @@ -1,362 +0,0 @@ -from __future__ import annotations - -import argparse -import sys -import typing -from json import dumps -from os.path import abspath, basename, dirname, join, realpath -from platform import python_version -from unicodedata import unidata_version - -import charset_normalizer.md as md_module -from charset_normalizer import from_fp -from charset_normalizer.models import CliDetectionResult -from charset_normalizer.version import __version__ - - -def query_yes_no(question: str, default: str = "yes") -> bool: # Defensive: - """Ask a yes/no question via input() and return the answer as a bool.""" - prompt = " [Y/n] " if default == "yes" else " [y/N] " - - while True: - choice = input(question + prompt).strip().lower() - if not choice: - return default == "yes" - if choice in ("y", "yes"): - return True - if choice in ("n", "no"): - return False - print("Please respond with 'y' or 'n'.") - - -class FileType: - """Factory for creating file object types - - Instances of FileType are typically passed as type= arguments to the - ArgumentParser add_argument() method. - - Keyword Arguments: - - mode -- A string indicating how the file is to be opened. Accepts the - same values as the builtin open() function. - - bufsize -- The file's desired buffer size. Accepts the same values as - the builtin open() function. - - encoding -- The file's encoding. Accepts the same values as the - builtin open() function. - - errors -- A string indicating how encoding and decoding errors are to - be handled. Accepts the same value as the builtin open() function. - - Backported from CPython 3.12 - """ - - def __init__( - self, - mode: str = "r", - bufsize: int = -1, - encoding: str | None = None, - errors: str | None = None, - ): - self._mode = mode - self._bufsize = bufsize - self._encoding = encoding - self._errors = errors - - def __call__(self, string: str) -> typing.IO: # type: ignore[type-arg] - # the special argument "-" means sys.std{in,out} - if string == "-": - if "r" in self._mode: - return sys.stdin.buffer if "b" in self._mode else sys.stdin - elif any(c in self._mode for c in "wax"): - return sys.stdout.buffer if "b" in self._mode else sys.stdout - else: - msg = f'argument "-" with mode {self._mode}' - raise ValueError(msg) - - # all other arguments are used as file names - try: - return open(string, self._mode, self._bufsize, self._encoding, self._errors) - except OSError as e: - message = f"can't open '{string}': {e}" - raise argparse.ArgumentTypeError(message) - - def __repr__(self) -> str: - args = self._mode, self._bufsize - kwargs = [("encoding", self._encoding), ("errors", self._errors)] - args_str = ", ".join( - [repr(arg) for arg in args if arg != -1] - + [f"{kw}={arg!r}" for kw, arg in kwargs if arg is not None] - ) - return f"{type(self).__name__}({args_str})" - - -def cli_detect(argv: list[str] | None = None) -> int: - """ - CLI assistant using ARGV and ArgumentParser - :param argv: - :return: 0 if everything is fine, anything else equal trouble - """ - parser = argparse.ArgumentParser( - description="The Real First Universal Charset Detector. " - "Discover originating encoding used on text file. " - "Normalize text to unicode." - ) - - parser.add_argument( - "files", type=FileType("rb"), nargs="+", help="File(s) to be analysed" - ) - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - dest="verbose", - help="Display complementary information about file if any. " - "Stdout will contain logs about the detection process.", - ) - parser.add_argument( - "-a", - "--with-alternative", - action="store_true", - default=False, - dest="alternatives", - help="Output complementary possibilities if any. Top-level JSON WILL be a list.", - ) - parser.add_argument( - "-n", - "--normalize", - action="store_true", - default=False, - dest="normalize", - help="Permit to normalize input file. If not set, program does not write anything.", - ) - parser.add_argument( - "-m", - "--minimal", - action="store_true", - default=False, - dest="minimal", - help="Only output the charset detected to STDOUT. Disabling JSON output.", - ) - parser.add_argument( - "-r", - "--replace", - action="store_true", - default=False, - dest="replace", - help="Replace file when trying to normalize it instead of creating a new one.", - ) - parser.add_argument( - "-f", - "--force", - action="store_true", - default=False, - dest="force", - help="Replace file without asking if you are sure, use this flag with caution.", - ) - parser.add_argument( - "-i", - "--no-preemptive", - action="store_true", - default=False, - dest="no_preemptive", - help="Disable looking at a charset declaration to hint the detector.", - ) - parser.add_argument( - "-t", - "--threshold", - action="store", - default=0.2, - type=float, - dest="threshold", - help="Define a custom maximum amount of noise allowed in decoded content. 0. <= noise <= 1.", - ) - parser.add_argument( - "--version", - action="version", - version="Charset-Normalizer {} - Python {} - Unicode {} - SpeedUp {}".format( - __version__, - python_version(), - unidata_version, - "OFF" if md_module.__file__.lower().endswith(".py") else "ON", - ), - help="Show version information and exit.", - ) - - args = parser.parse_args(argv) - - if args.replace is True and args.normalize is False: - if args.files: - for my_file in args.files: - my_file.close() - print("Use --replace in addition of --normalize only.", file=sys.stderr) - return 1 - - if args.force is True and args.replace is False: - if args.files: - for my_file in args.files: - my_file.close() - print("Use --force in addition of --replace only.", file=sys.stderr) - return 1 - - if args.threshold < 0.0 or args.threshold > 1.0: - if args.files: - for my_file in args.files: - my_file.close() - print("--threshold VALUE should be between 0. AND 1.", file=sys.stderr) - return 1 - - x_ = [] - - for my_file in args.files: - matches = from_fp( - my_file, - threshold=args.threshold, - explain=args.verbose, - preemptive_behaviour=args.no_preemptive is False, - ) - - best_guess = matches.best() - - if best_guess is None: - print( - 'Unable to identify originating encoding for "{}". {}'.format( - my_file.name, - ( - "Maybe try increasing maximum amount of chaos." - if args.threshold < 1.0 - else "" - ), - ), - file=sys.stderr, - ) - x_.append( - CliDetectionResult( - abspath(my_file.name), - None, - [], - [], - "Unknown", - [], - False, - 1.0, - 0.0, - None, - True, - ) - ) - else: - cli_result = CliDetectionResult( - abspath(my_file.name), - best_guess.encoding, - best_guess.encoding_aliases, - [ - cp - for cp in best_guess.could_be_from_charset - if cp != best_guess.encoding - ], - best_guess.language, - best_guess.alphabets, - best_guess.bom, - best_guess.percent_chaos, - best_guess.percent_coherence, - None, - True, - ) - x_.append(cli_result) - - if len(matches) > 1 and args.alternatives: - for el in matches: - if el != best_guess: - x_.append( - CliDetectionResult( - abspath(my_file.name), - el.encoding, - el.encoding_aliases, - [ - cp - for cp in el.could_be_from_charset - if cp != el.encoding - ], - el.language, - el.alphabets, - el.bom, - el.percent_chaos, - el.percent_coherence, - None, - False, - ) - ) - - if args.normalize is True: - if best_guess.encoding.startswith("utf") is True: - print( - '"{}" file does not need to be normalized, as it already came from unicode.'.format( - my_file.name - ), - file=sys.stderr, - ) - if my_file.closed is False: - my_file.close() - continue - - dir_path = dirname(realpath(my_file.name)) - file_name = basename(realpath(my_file.name)) - - o_: list[str] = file_name.split(".") - - if args.replace is False: - o_.insert(-1, best_guess.encoding) - if my_file.closed is False: - my_file.close() - elif ( - args.force is False - and query_yes_no( - 'Are you sure to normalize "{}" by replacing it ?'.format( - my_file.name - ), - "no", - ) - is False - ): - if my_file.closed is False: - my_file.close() - continue - - try: - cli_result.unicode_path = join(dir_path, ".".join(o_)) - - with open(cli_result.unicode_path, "wb") as fp: - fp.write(best_guess.output()) - except OSError as e: # Defensive: - print(str(e), file=sys.stderr) - if my_file.closed is False: - my_file.close() - return 2 - - if my_file.closed is False: - my_file.close() - - if args.minimal is False: - print( - dumps( - [el.__dict__ for el in x_] if len(x_) > 1 else x_[0].__dict__, - ensure_ascii=True, - indent=4, - ) - ) - else: - for my_file in args.files: - print( - ", ".join( - [ - el.encoding or "undefined" - for el in x_ - if el.path == abspath(my_file.name) - ] - ) - ) - - return 0 - - -if __name__ == "__main__": # Defensive: - cli_detect() diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 6bfa520..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index eb8dfec..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/constant.py b/myenv/lib/python3.12/site-packages/charset_normalizer/constant.py deleted file mode 100644 index 6ed7795..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/constant.py +++ /dev/null @@ -1,2050 +0,0 @@ -from __future__ import annotations - -from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE -from encodings.aliases import aliases -from re import IGNORECASE -from re import compile as re_compile - -# Contain for each eligible encoding a list of/item bytes SIG/BOM -ENCODING_MARKS: dict[str, bytes | list[bytes]] = { - "utf_8": BOM_UTF8, - "utf_7": [ - b"\x2b\x2f\x76\x38", - b"\x2b\x2f\x76\x39", - b"\x2b\x2f\x76\x2b", - b"\x2b\x2f\x76\x2f", - b"\x2b\x2f\x76\x38\x2d", - ], - "gb18030": b"\x84\x31\x95\x33", - "utf_32": [BOM_UTF32_BE, BOM_UTF32_LE], - "utf_16": [BOM_UTF16_BE, BOM_UTF16_LE], -} - -TOO_SMALL_SEQUENCE: int = 32 -TOO_BIG_SEQUENCE: int = int(10e6) - -UTF8_MAXIMAL_ALLOCATION: int = 1_112_064 - -# Up-to-date Unicode ucd/17.0.0 -UNICODE_RANGES_COMBINED: dict[str, range] = { - "Control character": range(32), - "Basic Latin": range(32, 128), - "Latin-1 Supplement": range(128, 256), - "Latin Extended-A": range(256, 384), - "Latin Extended-B": range(384, 592), - "IPA Extensions": range(592, 688), - "Spacing Modifier Letters": range(688, 768), - "Combining Diacritical Marks": range(768, 880), - "Greek and Coptic": range(880, 1024), - "Cyrillic": range(1024, 1280), - "Cyrillic Supplement": range(1280, 1328), - "Armenian": range(1328, 1424), - "Hebrew": range(1424, 1536), - "Arabic": range(1536, 1792), - "Syriac": range(1792, 1872), - "Arabic Supplement": range(1872, 1920), - "Thaana": range(1920, 1984), - "NKo": range(1984, 2048), - "Samaritan": range(2048, 2112), - "Mandaic": range(2112, 2144), - "Syriac Supplement": range(2144, 2160), - "Arabic Extended-B": range(2160, 2208), - "Arabic Extended-A": range(2208, 2304), - "Devanagari": range(2304, 2432), - "Bengali": range(2432, 2560), - "Gurmukhi": range(2560, 2688), - "Gujarati": range(2688, 2816), - "Oriya": range(2816, 2944), - "Tamil": range(2944, 3072), - "Telugu": range(3072, 3200), - "Kannada": range(3200, 3328), - "Malayalam": range(3328, 3456), - "Sinhala": range(3456, 3584), - "Thai": range(3584, 3712), - "Lao": range(3712, 3840), - "Tibetan": range(3840, 4096), - "Myanmar": range(4096, 4256), - "Georgian": range(4256, 4352), - "Hangul Jamo": range(4352, 4608), - "Ethiopic": range(4608, 4992), - "Ethiopic Supplement": range(4992, 5024), - "Cherokee": range(5024, 5120), - "Unified Canadian Aboriginal Syllabics": range(5120, 5760), - "Ogham": range(5760, 5792), - "Runic": range(5792, 5888), - "Tagalog": range(5888, 5920), - "Hanunoo": range(5920, 5952), - "Buhid": range(5952, 5984), - "Tagbanwa": range(5984, 6016), - "Khmer": range(6016, 6144), - "Mongolian": range(6144, 6320), - "Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400), - "Limbu": range(6400, 6480), - "Tai Le": range(6480, 6528), - "New Tai Lue": range(6528, 6624), - "Khmer Symbols": range(6624, 6656), - "Buginese": range(6656, 6688), - "Tai Tham": range(6688, 6832), - "Combining Diacritical Marks Extended": range(6832, 6912), - "Balinese": range(6912, 7040), - "Sundanese": range(7040, 7104), - "Batak": range(7104, 7168), - "Lepcha": range(7168, 7248), - "Ol Chiki": range(7248, 7296), - "Cyrillic Extended-C": range(7296, 7312), - "Georgian Extended": range(7312, 7360), - "Sundanese Supplement": range(7360, 7376), - "Vedic Extensions": range(7376, 7424), - "Phonetic Extensions": range(7424, 7552), - "Phonetic Extensions Supplement": range(7552, 7616), - "Combining Diacritical Marks Supplement": range(7616, 7680), - "Latin Extended Additional": range(7680, 7936), - "Greek Extended": range(7936, 8192), - "General Punctuation": range(8192, 8304), - "Superscripts and Subscripts": range(8304, 8352), - "Currency Symbols": range(8352, 8400), - "Combining Diacritical Marks for Symbols": range(8400, 8448), - "Letterlike Symbols": range(8448, 8528), - "Number Forms": range(8528, 8592), - "Arrows": range(8592, 8704), - "Mathematical Operators": range(8704, 8960), - "Miscellaneous Technical": range(8960, 9216), - "Control Pictures": range(9216, 9280), - "Optical Character Recognition": range(9280, 9312), - "Enclosed Alphanumerics": range(9312, 9472), - "Box Drawing": range(9472, 9600), - "Block Elements": range(9600, 9632), - "Geometric Shapes": range(9632, 9728), - "Miscellaneous Symbols": range(9728, 9984), - "Dingbats": range(9984, 10176), - "Miscellaneous Mathematical Symbols-A": range(10176, 10224), - "Supplemental Arrows-A": range(10224, 10240), - "Braille Patterns": range(10240, 10496), - "Supplemental Arrows-B": range(10496, 10624), - "Miscellaneous Mathematical Symbols-B": range(10624, 10752), - "Supplemental Mathematical Operators": range(10752, 11008), - "Miscellaneous Symbols and Arrows": range(11008, 11264), - "Glagolitic": range(11264, 11360), - "Latin Extended-C": range(11360, 11392), - "Coptic": range(11392, 11520), - "Georgian Supplement": range(11520, 11568), - "Tifinagh": range(11568, 11648), - "Ethiopic Extended": range(11648, 11744), - "Cyrillic Extended-A": range(11744, 11776), - "Supplemental Punctuation": range(11776, 11904), - "CJK Radicals Supplement": range(11904, 12032), - "Kangxi Radicals": range(12032, 12256), - "Ideographic Description Characters": range(12272, 12288), - "CJK Symbols and Punctuation": range(12288, 12352), - "Hiragana": range(12352, 12448), - "Katakana": range(12448, 12544), - "Bopomofo": range(12544, 12592), - "Hangul Compatibility Jamo": range(12592, 12688), - "Kanbun": range(12688, 12704), - "Bopomofo Extended": range(12704, 12736), - "CJK Strokes": range(12736, 12784), - "Katakana Phonetic Extensions": range(12784, 12800), - "Enclosed CJK Letters and Months": range(12800, 13056), - "CJK Compatibility": range(13056, 13312), - "CJK Unified Ideographs Extension A": range(13312, 19904), - "Yijing Hexagram Symbols": range(19904, 19968), - "CJK Unified Ideographs": range(19968, 40960), - "Yi Syllables": range(40960, 42128), - "Yi Radicals": range(42128, 42192), - "Lisu": range(42192, 42240), - "Vai": range(42240, 42560), - "Cyrillic Extended-B": range(42560, 42656), - "Bamum": range(42656, 42752), - "Modifier Tone Letters": range(42752, 42784), - "Latin Extended-D": range(42784, 43008), - "Syloti Nagri": range(43008, 43056), - "Common Indic Number Forms": range(43056, 43072), - "Phags-pa": range(43072, 43136), - "Saurashtra": range(43136, 43232), - "Devanagari Extended": range(43232, 43264), - "Kayah Li": range(43264, 43312), - "Rejang": range(43312, 43360), - "Hangul Jamo Extended-A": range(43360, 43392), - "Javanese": range(43392, 43488), - "Myanmar Extended-B": range(43488, 43520), - "Cham": range(43520, 43616), - "Myanmar Extended-A": range(43616, 43648), - "Tai Viet": range(43648, 43744), - "Meetei Mayek Extensions": range(43744, 43776), - "Ethiopic Extended-A": range(43776, 43824), - "Latin Extended-E": range(43824, 43888), - "Cherokee Supplement": range(43888, 43968), - "Meetei Mayek": range(43968, 44032), - "Hangul Syllables": range(44032, 55216), - "Hangul Jamo Extended-B": range(55216, 55296), - "High Surrogates": range(55296, 56192), - "High Private Use Surrogates": range(56192, 56320), - "Low Surrogates": range(56320, 57344), - "Private Use Area": range(57344, 63744), - "CJK Compatibility Ideographs": range(63744, 64256), - "Alphabetic Presentation Forms": range(64256, 64336), - "Arabic Presentation Forms-A": range(64336, 65024), - "Variation Selectors": range(65024, 65040), - "Vertical Forms": range(65040, 65056), - "Combining Half Marks": range(65056, 65072), - "CJK Compatibility Forms": range(65072, 65104), - "Small Form Variants": range(65104, 65136), - "Arabic Presentation Forms-B": range(65136, 65280), - "Halfwidth and Fullwidth Forms": range(65280, 65520), - "Specials": range(65520, 65536), - "Linear B Syllabary": range(65536, 65664), - "Linear B Ideograms": range(65664, 65792), - "Aegean Numbers": range(65792, 65856), - "Ancient Greek Numbers": range(65856, 65936), - "Ancient Symbols": range(65936, 66000), - "Phaistos Disc": range(66000, 66048), - "Lycian": range(66176, 66208), - "Carian": range(66208, 66272), - "Coptic Epact Numbers": range(66272, 66304), - "Old Italic": range(66304, 66352), - "Gothic": range(66352, 66384), - "Old Permic": range(66384, 66432), - "Ugaritic": range(66432, 66464), - "Old Persian": range(66464, 66528), - "Deseret": range(66560, 66640), - "Shavian": range(66640, 66688), - "Osmanya": range(66688, 66736), - "Osage": range(66736, 66816), - "Elbasan": range(66816, 66864), - "Caucasian Albanian": range(66864, 66928), - "Vithkuqi": range(66928, 67008), - "Todhri": range(67008, 67072), - "Linear A": range(67072, 67456), - "Latin Extended-F": range(67456, 67520), - "Cypriot Syllabary": range(67584, 67648), - "Imperial Aramaic": range(67648, 67680), - "Palmyrene": range(67680, 67712), - "Nabataean": range(67712, 67760), - "Hatran": range(67808, 67840), - "Phoenician": range(67840, 67872), - "Lydian": range(67872, 67904), - "Sidetic": range(67904, 67936), - "Meroitic Hieroglyphs": range(67968, 68000), - "Meroitic Cursive": range(68000, 68096), - "Kharoshthi": range(68096, 68192), - "Old South Arabian": range(68192, 68224), - "Old North Arabian": range(68224, 68256), - "Manichaean": range(68288, 68352), - "Avestan": range(68352, 68416), - "Inscriptional Parthian": range(68416, 68448), - "Inscriptional Pahlavi": range(68448, 68480), - "Psalter Pahlavi": range(68480, 68528), - "Old Turkic": range(68608, 68688), - "Old Hungarian": range(68736, 68864), - "Hanifi Rohingya": range(68864, 68928), - "Garay": range(68928, 69008), - "Rumi Numeral Symbols": range(69216, 69248), - "Yezidi": range(69248, 69312), - "Arabic Extended-C": range(69312, 69376), - "Old Sogdian": range(69376, 69424), - "Sogdian": range(69424, 69488), - "Old Uyghur": range(69488, 69552), - "Chorasmian": range(69552, 69600), - "Elymaic": range(69600, 69632), - "Brahmi": range(69632, 69760), - "Kaithi": range(69760, 69840), - "Sora Sompeng": range(69840, 69888), - "Chakma": range(69888, 69968), - "Mahajani": range(69968, 70016), - "Sharada": range(70016, 70112), - "Sinhala Archaic Numbers": range(70112, 70144), - "Khojki": range(70144, 70224), - "Multani": range(70272, 70320), - "Khudawadi": range(70320, 70400), - "Grantha": range(70400, 70528), - "Tulu-Tigalari": range(70528, 70656), - "Newa": range(70656, 70784), - "Tirhuta": range(70784, 70880), - "Siddham": range(71040, 71168), - "Modi": range(71168, 71264), - "Mongolian Supplement": range(71264, 71296), - "Takri": range(71296, 71376), - "Myanmar Extended-C": range(71376, 71424), - "Ahom": range(71424, 71504), - "Dogra": range(71680, 71760), - "Warang Citi": range(71840, 71936), - "Dives Akuru": range(71936, 72032), - "Nandinagari": range(72096, 72192), - "Zanabazar Square": range(72192, 72272), - "Soyombo": range(72272, 72368), - "Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384), - "Pau Cin Hau": range(72384, 72448), - "Devanagari Extended-A": range(72448, 72544), - "Sharada Supplement": range(72544, 72576), - "Sunuwar": range(72640, 72704), - "Bhaiksuki": range(72704, 72816), - "Marchen": range(72816, 72896), - "Masaram Gondi": range(72960, 73056), - "Gunjala Gondi": range(73056, 73136), - "Tolong Siki": range(73136, 73200), - "Makasar": range(73440, 73472), - "Kawi": range(73472, 73568), - "Lisu Supplement": range(73648, 73664), - "Tamil Supplement": range(73664, 73728), - "Cuneiform": range(73728, 74752), - "Cuneiform Numbers and Punctuation": range(74752, 74880), - "Early Dynastic Cuneiform": range(74880, 75088), - "Cypro-Minoan": range(77712, 77824), - "Egyptian Hieroglyphs": range(77824, 78896), - "Egyptian Hieroglyph Format Controls": range(78896, 78944), - "Egyptian Hieroglyphs Extended-A": range(78944, 82944), - "Anatolian Hieroglyphs": range(82944, 83584), - "Gurung Khema": range(90368, 90432), - "Bamum Supplement": range(92160, 92736), - "Mro": range(92736, 92784), - "Tangsa": range(92784, 92880), - "Bassa Vah": range(92880, 92928), - "Pahawh Hmong": range(92928, 93072), - "Kirat Rai": range(93504, 93568), - "Medefaidrin": range(93760, 93856), - "Beria Erfe": range(93856, 93920), - "Miao": range(93952, 94112), - "Ideographic Symbols and Punctuation": range(94176, 94208), - "Tangut": range(94208, 100352), - "Tangut Components": range(100352, 101120), - "Khitan Small Script": range(101120, 101632), - "Tangut Supplement": range(101632, 101760), - "Tangut Components Supplement": range(101760, 101888), - "Kana Extended-B": range(110576, 110592), - "Kana Supplement": range(110592, 110848), - "Kana Extended-A": range(110848, 110896), - "Small Kana Extension": range(110896, 110960), - "Nushu": range(110960, 111360), - "Duployan": range(113664, 113824), - "Shorthand Format Controls": range(113824, 113840), - "Symbols for Legacy Computing Supplement": range(117760, 118464), - "Miscellaneous Symbols Supplement": range(118464, 118528), - "Znamenny Musical Notation": range(118528, 118736), - "Byzantine Musical Symbols": range(118784, 119040), - "Musical Symbols": range(119040, 119296), - "Ancient Greek Musical Notation": range(119296, 119376), - "Kaktovik Numerals": range(119488, 119520), - "Mayan Numerals": range(119520, 119552), - "Tai Xuan Jing Symbols": range(119552, 119648), - "Counting Rod Numerals": range(119648, 119680), - "Mathematical Alphanumeric Symbols": range(119808, 120832), - "Sutton SignWriting": range(120832, 121520), - "Latin Extended-G": range(122624, 122880), - "Glagolitic Supplement": range(122880, 122928), - "Cyrillic Extended-D": range(122928, 123024), - "Nyiakeng Puachue Hmong": range(123136, 123216), - "Toto": range(123536, 123584), - "Wancho": range(123584, 123648), - "Nag Mundari": range(124112, 124160), - "Ol Onal": range(124368, 124416), - "Tai Yo": range(124608, 124672), - "Ethiopic Extended-B": range(124896, 124928), - "Mende Kikakui": range(124928, 125152), - "Adlam": range(125184, 125280), - "Indic Siyaq Numbers": range(126064, 126144), - "Ottoman Siyaq Numbers": range(126208, 126288), - "Arabic Mathematical Alphabetic Symbols": range(126464, 126720), - "Mahjong Tiles": range(126976, 127024), - "Domino Tiles": range(127024, 127136), - "Playing Cards": range(127136, 127232), - "Enclosed Alphanumeric Supplement": range(127232, 127488), - "Enclosed Ideographic Supplement": range(127488, 127744), - "Miscellaneous Symbols and Pictographs": range(127744, 128512), - "Emoticons": range(128512, 128592), - "Ornamental Dingbats": range(128592, 128640), - "Transport and Map Symbols": range(128640, 128768), - "Alchemical Symbols": range(128768, 128896), - "Geometric Shapes Extended": range(128896, 129024), - "Supplemental Arrows-C": range(129024, 129280), - "Supplemental Symbols and Pictographs": range(129280, 129536), - "Chess Symbols": range(129536, 129648), - "Symbols and Pictographs Extended-A": range(129648, 129792), - "Symbols for Legacy Computing": range(129792, 130048), - "CJK Unified Ideographs Extension B": range(131072, 173792), - "CJK Unified Ideographs Extension C": range(173824, 177984), - "CJK Unified Ideographs Extension D": range(177984, 178208), - "CJK Unified Ideographs Extension E": range(178208, 183984), - "CJK Unified Ideographs Extension F": range(183984, 191472), - "CJK Unified Ideographs Extension I": range(191472, 192096), - "CJK Compatibility Ideographs Supplement": range(194560, 195104), - "CJK Unified Ideographs Extension G": range(196608, 201552), - "CJK Unified Ideographs Extension H": range(201552, 205744), - "CJK Unified Ideographs Extension J": range(205744, 210048), - "Tags": range(917504, 917632), - "Variation Selectors Supplement": range(917760, 918000), - "Supplementary Private Use Area-A": range(983040, 1048576), - "Supplementary Private Use Area-B": range(1048576, 1114112), -} - - -UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [ - "Supplement", - "Extended", - "Extensions", - "Modifier", - "Marks", - "Punctuation", - "Symbols", - "Forms", - "Operators", - "Miscellaneous", - "Drawing", - "Block", - "Shapes", - "Supplemental", - "Tags", -] - -RE_POSSIBLE_ENCODING_INDICATION = re_compile( - r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)", - IGNORECASE, -) - -IANA_NO_ALIASES = [ - "cp720", - "cp737", - "cp856", - "cp874", - "cp875", - "cp1006", - "koi8_r", - "koi8_t", - "koi8_u", -] - -IANA_SUPPORTED: list[str] = sorted( - filter( - lambda x: x.endswith("_codec") is False - and x not in {"rot_13", "tactis", "mbcs"}, - list(set(aliases.values())) + IANA_NO_ALIASES, - ) -) - -IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED) - -# pre-computed code page that are similar using the function cp_similarity. -IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = { - "cp037": ["cp1026", "cp1140", "cp273", "cp500"], - "cp1026": ["cp037", "cp1140", "cp273", "cp500"], - "cp1125": ["cp866"], - "cp1140": ["cp037", "cp1026", "cp273", "cp500"], - "cp1250": ["iso8859_2"], - "cp1251": ["kz1048", "ptcp154"], - "cp1252": ["iso8859_15", "iso8859_9", "latin_1"], - "cp1253": ["iso8859_7"], - "cp1254": ["iso8859_15", "iso8859_9", "latin_1"], - "cp1257": ["iso8859_13"], - "cp273": ["cp037", "cp1026", "cp1140", "cp500"], - "cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"], - "cp500": ["cp037", "cp1026", "cp1140", "cp273"], - "cp850": ["cp437", "cp857", "cp858", "cp865"], - "cp857": ["cp850", "cp858", "cp865"], - "cp858": ["cp437", "cp850", "cp857", "cp865"], - "cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"], - "cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"], - "cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"], - "cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"], - "cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"], - "cp866": ["cp1125"], - "iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"], - "iso8859_11": ["tis_620"], - "iso8859_13": ["cp1257"], - "iso8859_14": [ - "iso8859_10", - "iso8859_15", - "iso8859_16", - "iso8859_3", - "iso8859_9", - "latin_1", - ], - "iso8859_15": [ - "cp1252", - "cp1254", - "iso8859_10", - "iso8859_14", - "iso8859_16", - "iso8859_3", - "iso8859_9", - "latin_1", - ], - "iso8859_16": [ - "iso8859_14", - "iso8859_15", - "iso8859_2", - "iso8859_3", - "iso8859_9", - "latin_1", - ], - "iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"], - "iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"], - "iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"], - "iso8859_7": ["cp1253"], - "iso8859_9": [ - "cp1252", - "cp1254", - "cp1258", - "iso8859_10", - "iso8859_14", - "iso8859_15", - "iso8859_16", - "iso8859_3", - "iso8859_4", - "latin_1", - ], - "kz1048": ["cp1251", "ptcp154"], - "latin_1": [ - "cp1252", - "cp1254", - "cp1258", - "iso8859_10", - "iso8859_14", - "iso8859_15", - "iso8859_16", - "iso8859_3", - "iso8859_4", - "iso8859_9", - ], - "mac_iceland": ["mac_roman", "mac_turkish"], - "mac_roman": ["mac_iceland", "mac_turkish"], - "mac_turkish": ["mac_iceland", "mac_roman"], - "ptcp154": ["cp1251", "kz1048"], - "tis_620": ["iso8859_11"], -} - - -CHARDET_CORRESPONDENCE: dict[str, str] = { - "iso2022_kr": "ISO-2022-KR", - "iso2022_jp": "ISO-2022-JP", - "euc_kr": "EUC-KR", - "tis_620": "TIS-620", - "utf_32": "UTF-32", - "euc_jp": "EUC-JP", - "koi8_r": "KOI8-R", - "iso8859_1": "ISO-8859-1", - "iso8859_2": "ISO-8859-2", - "iso8859_5": "ISO-8859-5", - "iso8859_6": "ISO-8859-6", - "iso8859_7": "ISO-8859-7", - "iso8859_8": "ISO-8859-8", - "utf_16": "UTF-16", - "cp855": "IBM855", - "mac_cyrillic": "MacCyrillic", - "gb2312": "GB2312", - "gb18030": "GB18030", - "cp932": "CP932", - "cp866": "IBM866", - "utf_8": "utf-8", - "utf_8_sig": "UTF-8-SIG", - "shift_jis": "SHIFT_JIS", - "big5": "Big5", - "cp1250": "windows-1250", - "cp1251": "windows-1251", - "cp1252": "Windows-1252", - "cp1253": "windows-1253", - "cp1255": "windows-1255", - "cp1256": "windows-1256", - "cp1254": "Windows-1254", - "cp949": "CP949", -} - - -COMMON_SAFE_ASCII_CHARACTERS: frozenset[str] = frozenset( - { - "<", - ">", - "=", - ":", - "/", - "&", - ";", - "{", - "}", - "[", - "]", - ",", - "|", - '"', - "-", - "(", - ")", - } -) - -# Sample character sets — replace with full lists if needed -COMMON_CHINESE_CHARACTERS = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞" - -COMMON_JAPANESE_CHARACTERS = "日一国年大十二本中長出三時行見月分後前生五間上東四今金九入学高円子外八六下来気小七山話女北午百書先名川千水半男西電校語土木聞食車何南万毎白天母火右読友左休父雨" - -COMMON_KOREAN_CHARACTERS = "一二三四五六七八九十百千萬上下左右中人女子大小山川日月火水木金土父母天地國名年時文校學生" - -# Combine all into a frozenset -COMMON_CJK_CHARACTERS = frozenset( - "".join( - [ - COMMON_CHINESE_CHARACTERS, - COMMON_JAPANESE_CHARACTERS, - COMMON_KOREAN_CHARACTERS, - ] - ) -) - -KO_NAMES: frozenset[str] = frozenset({"johab", "cp949", "euc_kr"}) -ZH_NAMES: frozenset[str] = frozenset({"big5", "cp950", "big5hkscs", "hz"}) - -# Logging LEVEL below DEBUG -TRACE: int = 5 - - -# Language label that contain the em dash "—" -# character are to be considered alternative seq to origin -FREQUENCIES: dict[str, list[str]] = { - "English": [ - "e", - "a", - "t", - "i", - "o", - "n", - "s", - "r", - "h", - "l", - "d", - "c", - "u", - "m", - "f", - "p", - "g", - "w", - "y", - "b", - "v", - "k", - "x", - "j", - "z", - "q", - ], - "English—": [ - "e", - "a", - "t", - "i", - "o", - "n", - "s", - "r", - "h", - "l", - "d", - "c", - "m", - "u", - "f", - "p", - "g", - "w", - "b", - "y", - "v", - "k", - "j", - "x", - "z", - "q", - ], - "German": [ - "e", - "n", - "i", - "r", - "s", - "t", - "a", - "d", - "h", - "u", - "l", - "g", - "o", - "c", - "m", - "b", - "f", - "k", - "w", - "z", - "p", - "v", - "ü", - "ä", - "ö", - "j", - ], - "French": [ - "e", - "a", - "s", - "n", - "i", - "t", - "r", - "l", - "u", - "o", - "d", - "c", - "p", - "m", - "é", - "v", - "g", - "f", - "b", - "h", - "q", - "à", - "x", - "è", - "y", - "j", - ], - "Dutch": [ - "e", - "n", - "a", - "i", - "r", - "t", - "o", - "d", - "s", - "l", - "g", - "h", - "v", - "m", - "u", - "k", - "c", - "p", - "b", - "w", - "j", - "z", - "f", - "y", - "x", - "ë", - ], - "Italian": [ - "e", - "i", - "a", - "o", - "n", - "l", - "t", - "r", - "s", - "c", - "d", - "u", - "p", - "m", - "g", - "v", - "f", - "b", - "z", - "h", - "q", - "è", - "à", - "k", - "y", - "ò", - ], - "Polish": [ - "a", - "i", - "o", - "e", - "n", - "r", - "z", - "w", - "s", - "c", - "t", - "k", - "y", - "d", - "p", - "m", - "u", - "l", - "j", - "ł", - "g", - "b", - "h", - "ą", - "ę", - "ó", - ], - "Spanish": [ - "e", - "a", - "o", - "n", - "s", - "r", - "i", - "l", - "d", - "t", - "c", - "u", - "m", - "p", - "b", - "g", - "v", - "f", - "y", - "ó", - "h", - "q", - "í", - "j", - "z", - "á", - ], - "Russian": [ - "о", - "е", - "а", - "и", - "н", - "т", - "с", - "р", - "в", - "л", - "к", - "м", - "д", - "п", - "у", - "г", - "я", - "ы", - "з", - "б", - "й", - "ь", - "ч", - "х", - "ж", - "ц", - ], - # Jap-Kanji - "Japanese": [ - "日", - "一", - "人", - "年", - "大", - "十", - "二", - "本", - "中", - "長", - "出", - "三", - "時", - "行", - "見", - "月", - "分", - "後", - "前", - "生", - "五", - "間", - "上", - "東", - "四", - "今", - "金", - "九", - "入", - "学", - "高", - "円", - "子", - "外", - "八", - "六", - "下", - "来", - "気", - "小", - "七", - "山", - "話", - "女", - "北", - "午", - "百", - "書", - "先", - "名", - "川", - "千", - "水", - "半", - "男", - "西", - "電", - "校", - "語", - "土", - "木", - "聞", - "食", - "車", - "何", - "南", - "万", - "毎", - "白", - "天", - "母", - "火", - "右", - "読", - "友", - "左", - "休", - "父", - "雨", - ], - # Jap-Katakana - "Japanese—": [ - "ー", - "ン", - "ス", - "・", - "ル", - "ト", - "リ", - "イ", - "ア", - "ラ", - "ッ", - "ク", - "ド", - "シ", - "レ", - "ジ", - "タ", - "フ", - "ロ", - "カ", - "テ", - "マ", - "ィ", - "グ", - "バ", - "ム", - "プ", - "オ", - "コ", - "デ", - "ニ", - "ウ", - "メ", - "サ", - "ビ", - "ナ", - "ブ", - "ャ", - "エ", - "ュ", - "チ", - "キ", - "ズ", - "ダ", - "パ", - "ミ", - "ェ", - "ョ", - "ハ", - "セ", - "ベ", - "ガ", - "モ", - "ツ", - "ネ", - "ボ", - "ソ", - "ノ", - "ァ", - "ヴ", - "ワ", - "ポ", - "ペ", - "ピ", - "ケ", - "ゴ", - "ギ", - "ザ", - "ホ", - "ゲ", - "ォ", - "ヤ", - "ヒ", - "ユ", - "ヨ", - "ヘ", - "ゼ", - "ヌ", - "ゥ", - "ゾ", - "ヶ", - "ヂ", - "ヲ", - "ヅ", - "ヵ", - "ヱ", - "ヰ", - "ヮ", - "ヽ", - "゠", - "ヾ", - "ヷ", - "ヿ", - "ヸ", - "ヹ", - "ヺ", - ], - # Jap-Hiragana - "Japanese——": [ - "の", - "に", - "る", - "た", - "と", - "は", - "し", - "い", - "を", - "で", - "て", - "が", - "な", - "れ", - "か", - "ら", - "さ", - "っ", - "り", - "す", - "あ", - "も", - "こ", - "ま", - "う", - "く", - "よ", - "き", - "ん", - "め", - "お", - "け", - "そ", - "つ", - "だ", - "や", - "え", - "ど", - "わ", - "ち", - "み", - "せ", - "じ", - "ば", - "へ", - "び", - "ず", - "ろ", - "ほ", - "げ", - "む", - "べ", - "ひ", - "ょ", - "ゆ", - "ぶ", - "ご", - "ゃ", - "ね", - "ふ", - "ぐ", - "ぎ", - "ぼ", - "ゅ", - "づ", - "ざ", - "ぞ", - "ぬ", - "ぜ", - "ぱ", - "ぽ", - "ぷ", - "ぴ", - "ぃ", - "ぁ", - "ぇ", - "ぺ", - "ゞ", - "ぢ", - "ぉ", - "ぅ", - "ゐ", - "ゝ", - "ゑ", - "゛", - "゜", - "ゎ", - "ゔ", - "゚", - "ゟ", - "゙", - "ゕ", - "ゖ", - ], - "Portuguese": [ - "a", - "e", - "o", - "s", - "i", - "r", - "d", - "n", - "t", - "m", - "u", - "c", - "l", - "p", - "g", - "v", - "b", - "f", - "h", - "ã", - "q", - "é", - "ç", - "á", - "z", - "í", - ], - "Swedish": [ - "e", - "a", - "n", - "r", - "t", - "s", - "i", - "l", - "d", - "o", - "m", - "k", - "g", - "v", - "h", - "f", - "u", - "p", - "ä", - "c", - "b", - "ö", - "å", - "y", - "j", - "x", - ], - "Chinese": [ - "的", - "一", - "是", - "不", - "了", - "在", - "人", - "有", - "我", - "他", - "这", - "个", - "们", - "中", - "来", - "上", - "大", - "为", - "和", - "国", - "地", - "到", - "以", - "说", - "时", - "要", - "就", - "出", - "会", - "可", - "也", - "你", - "对", - "生", - "能", - "而", - "子", - "那", - "得", - "于", - "着", - "下", - "自", - "之", - "年", - "过", - "发", - "后", - "作", - "里", - "用", - "道", - "行", - "所", - "然", - "家", - "种", - "事", - "成", - "方", - "多", - "经", - "么", - "去", - "法", - "学", - "如", - "都", - "同", - "现", - "当", - "没", - "动", - "面", - "起", - "看", - "定", - "天", - "分", - "还", - "进", - "好", - "小", - "部", - "其", - "些", - "主", - "样", - "理", - "心", - "她", - "本", - "前", - "开", - "但", - "因", - "只", - "从", - "想", - "实", - ], - "Ukrainian": [ - "о", - "а", - "н", - "і", - "и", - "р", - "в", - "т", - "е", - "с", - "к", - "л", - "у", - "д", - "м", - "п", - "з", - "я", - "ь", - "б", - "г", - "й", - "ч", - "х", - "ц", - "ї", - ], - "Norwegian": [ - "e", - "r", - "n", - "t", - "a", - "s", - "i", - "o", - "l", - "d", - "g", - "k", - "m", - "v", - "f", - "p", - "u", - "b", - "h", - "å", - "y", - "j", - "ø", - "c", - "æ", - "w", - ], - "Finnish": [ - "a", - "i", - "n", - "t", - "e", - "s", - "l", - "o", - "u", - "k", - "ä", - "m", - "r", - "v", - "j", - "h", - "p", - "y", - "d", - "ö", - "g", - "c", - "b", - "f", - "w", - "z", - ], - "Vietnamese": [ - "n", - "h", - "t", - "i", - "c", - "g", - "a", - "o", - "u", - "m", - "l", - "r", - "à", - "đ", - "s", - "e", - "v", - "p", - "b", - "y", - "ư", - "d", - "á", - "k", - "ộ", - "ế", - ], - "Czech": [ - "o", - "e", - "a", - "n", - "t", - "s", - "i", - "l", - "v", - "r", - "k", - "d", - "u", - "m", - "p", - "í", - "c", - "h", - "z", - "á", - "y", - "j", - "b", - "ě", - "é", - "ř", - ], - "Hungarian": [ - "e", - "a", - "t", - "l", - "s", - "n", - "k", - "r", - "i", - "o", - "z", - "á", - "é", - "g", - "m", - "b", - "y", - "v", - "d", - "h", - "u", - "p", - "j", - "ö", - "f", - "c", - ], - "Korean": [ - "이", - "다", - "에", - "의", - "는", - "로", - "하", - "을", - "가", - "고", - "지", - "서", - "한", - "은", - "기", - "으", - "년", - "대", - "사", - "시", - "를", - "리", - "도", - "인", - "스", - "일", - ], - "Indonesian": [ - "a", - "n", - "e", - "i", - "r", - "t", - "u", - "s", - "d", - "k", - "m", - "l", - "g", - "p", - "b", - "o", - "h", - "y", - "j", - "c", - "w", - "f", - "v", - "z", - "x", - "q", - ], - "Turkish": [ - "a", - "e", - "i", - "n", - "r", - "l", - "ı", - "k", - "d", - "t", - "s", - "m", - "y", - "u", - "o", - "b", - "ü", - "ş", - "v", - "g", - "z", - "h", - "c", - "p", - "ç", - "ğ", - ], - "Romanian": [ - "e", - "i", - "a", - "r", - "n", - "t", - "u", - "l", - "o", - "c", - "s", - "d", - "p", - "m", - "ă", - "f", - "v", - "î", - "g", - "b", - "ș", - "ț", - "z", - "h", - "â", - "j", - ], - "Farsi": [ - "ا", - "ی", - "ر", - "د", - "ن", - "ه", - "و", - "م", - "ت", - "ب", - "س", - "ل", - "ک", - "ش", - "ز", - "ف", - "گ", - "ع", - "خ", - "ق", - "ج", - "آ", - "پ", - "ح", - "ط", - "ص", - ], - "Arabic": [ - "ا", - "ل", - "ي", - "م", - "و", - "ن", - "ر", - "ت", - "ب", - "ة", - "ع", - "د", - "س", - "ف", - "ه", - "ك", - "ق", - "أ", - "ح", - "ج", - "ش", - "ط", - "ص", - "ى", - "خ", - "إ", - ], - "Danish": [ - "e", - "r", - "n", - "t", - "a", - "i", - "s", - "d", - "l", - "o", - "g", - "m", - "k", - "f", - "v", - "u", - "b", - "h", - "p", - "å", - "y", - "ø", - "æ", - "c", - "j", - "w", - ], - "Serbian": [ - "а", - "и", - "о", - "е", - "н", - "р", - "с", - "у", - "т", - "к", - "ј", - "в", - "д", - "м", - "п", - "л", - "г", - "з", - "б", - "a", - "i", - "e", - "o", - "n", - "ц", - "ш", - ], - "Lithuanian": [ - "i", - "a", - "s", - "o", - "r", - "e", - "t", - "n", - "u", - "k", - "m", - "l", - "p", - "v", - "d", - "j", - "g", - "ė", - "b", - "y", - "ų", - "š", - "ž", - "c", - "ą", - "į", - ], - "Slovene": [ - "e", - "a", - "i", - "o", - "n", - "r", - "s", - "l", - "t", - "j", - "v", - "k", - "d", - "p", - "m", - "u", - "z", - "b", - "g", - "h", - "č", - "c", - "š", - "ž", - "f", - "y", - ], - "Slovak": [ - "o", - "a", - "e", - "n", - "i", - "r", - "v", - "t", - "s", - "l", - "k", - "d", - "m", - "p", - "u", - "c", - "h", - "j", - "b", - "z", - "á", - "y", - "ý", - "í", - "č", - "é", - ], - "Hebrew": [ - "י", - "ו", - "ה", - "ל", - "ר", - "ב", - "ת", - "מ", - "א", - "ש", - "נ", - "ע", - "ם", - "ד", - "ק", - "ח", - "פ", - "ס", - "כ", - "ג", - "ט", - "צ", - "ן", - "ז", - "ך", - ], - "Bulgarian": [ - "а", - "и", - "о", - "е", - "н", - "т", - "р", - "с", - "в", - "л", - "к", - "д", - "п", - "м", - "з", - "г", - "я", - "ъ", - "у", - "б", - "ч", - "ц", - "й", - "ж", - "щ", - "х", - ], - "Croatian": [ - "a", - "i", - "o", - "e", - "n", - "r", - "j", - "s", - "t", - "u", - "k", - "l", - "v", - "d", - "m", - "p", - "g", - "z", - "b", - "c", - "č", - "h", - "š", - "ž", - "ć", - "f", - ], - "Hindi": [ - "क", - "र", - "स", - "न", - "त", - "म", - "ह", - "प", - "य", - "ल", - "व", - "ज", - "द", - "ग", - "ब", - "श", - "ट", - "अ", - "ए", - "थ", - "भ", - "ड", - "च", - "ध", - "ष", - "इ", - ], - "Estonian": [ - "a", - "i", - "e", - "s", - "t", - "l", - "u", - "n", - "o", - "k", - "r", - "d", - "m", - "v", - "g", - "p", - "j", - "h", - "ä", - "b", - "õ", - "ü", - "f", - "c", - "ö", - "y", - ], - "Thai": [ - "า", - "น", - "ร", - "อ", - "ก", - "เ", - "ง", - "ม", - "ย", - "ล", - "ว", - "ด", - "ท", - "ส", - "ต", - "ะ", - "ป", - "บ", - "ค", - "ห", - "แ", - "จ", - "พ", - "ช", - "ข", - "ใ", - ], - "Greek": [ - "α", - "τ", - "ο", - "ι", - "ε", - "ν", - "ρ", - "σ", - "κ", - "η", - "π", - "ς", - "υ", - "μ", - "λ", - "ί", - "ό", - "ά", - "γ", - "έ", - "δ", - "ή", - "ω", - "χ", - "θ", - "ύ", - ], - "Tamil": [ - "க", - "த", - "ப", - "ட", - "ர", - "ம", - "ல", - "ன", - "வ", - "ற", - "ய", - "ள", - "ச", - "ந", - "இ", - "ண", - "அ", - "ஆ", - "ழ", - "ங", - "எ", - "உ", - "ஒ", - "ஸ", - ], - "Kazakh": [ - "а", - "ы", - "е", - "н", - "т", - "р", - "л", - "і", - "д", - "с", - "м", - "қ", - "к", - "о", - "б", - "и", - "у", - "ғ", - "ж", - "ң", - "з", - "ш", - "й", - "п", - "г", - "ө", - ], -} - -LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES) - -# Bit flags for unified character classification. -# A single unicodedata.name() call sets all relevant flags at once. -_LATIN: int = 1 -_ACCENTUATED: int = 1 << 1 -_CJK: int = 1 << 2 -_HANGUL: int = 1 << 3 -_KATAKANA: int = 1 << 4 -_HIRAGANA: int = 1 << 5 -_THAI: int = 1 << 6 -_ARABIC: int = 1 << 7 -_ARABIC_ISOLATED_FORM: int = 1 << 8 - -_ACCENT_KEYWORDS: tuple[str, ...] = ( - "WITH GRAVE", - "WITH ACUTE", - "WITH CEDILLA", - "WITH DIAERESIS", - "WITH CIRCUMFLEX", - "WITH TILDE", - "WITH MACRON", - "WITH RING ABOVE", -) - -# Pre-built lookup structures for FREQUENCIES (computed once at import time). -# character -> rank mapping per language (replaces list .index() calls). -_FREQUENCIES_RANK: dict[str, dict[str, int]] = { - lang: {char: rank for rank, char in enumerate(chars)} - for lang, chars in FREQUENCIES.items() -} - -# frozenset per language (avoids rebuilding set() per call). -_FREQUENCIES_SET: dict[str, frozenset[str]] = { - lang: frozenset(chars) for lang, chars in FREQUENCIES.items() -} diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/legacy.py b/myenv/lib/python3.12/site-packages/charset_normalizer/legacy.py deleted file mode 100644 index 293c1ef..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/legacy.py +++ /dev/null @@ -1,79 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, Any -from warnings import warn - -from .api import from_bytes -from .constant import CHARDET_CORRESPONDENCE, TOO_SMALL_SEQUENCE - -if TYPE_CHECKING: - from typing import TypedDict - - class ResultDict(TypedDict): - encoding: str | None - language: str - confidence: float | None - - -def detect( - byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any -) -> ResultDict: - """ - chardet legacy method - Detect the encoding of the given byte string. It should be mostly backward-compatible. - Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it) - This function is deprecated and should be used to migrate your project easily, consult the documentation for - further information. Not planned for removal. - - :param byte_str: The byte sequence to examine. - :param should_rename_legacy: Should we rename legacy encodings - to their more modern equivalents? - """ - if len(kwargs): - warn( - f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()" - ) - - if not isinstance(byte_str, (bytearray, bytes)): - raise TypeError( # pragma: nocover - f"Expected object of type bytes or bytearray, got: {type(byte_str)}" - ) - - if isinstance(byte_str, bytearray): - byte_str = bytes(byte_str) - - r = from_bytes(byte_str).best() - - encoding = r.encoding if r is not None else None - language = r.language if r is not None and r.language != "Unknown" else "" - confidence = 1.0 - r.chaos if r is not None else None - - # automatically lower confidence - # on small bytes samples. - # https://github.com/jawah/charset_normalizer/issues/391 - if ( - confidence is not None - and confidence >= 0.9 - and encoding - not in { - "utf_8", - "ascii", - } - and r.bom is False # type: ignore[union-attr] - and len(byte_str) < TOO_SMALL_SEQUENCE - ): - confidence -= 0.2 - - # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process - # but chardet does return 'utf-8-sig' and it is a valid codec name. - if r is not None and encoding == "utf_8" and r.bom: - encoding += "_sig" - - if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE: - encoding = CHARDET_CORRESPONDENCE[encoding] - - return { - "encoding": encoding, - "language": language, - "confidence": confidence, - } diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so b/myenv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so deleted file mode 100755 index 8fb2c57..0000000 Binary files a/myenv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/md.py b/myenv/lib/python3.12/site-packages/charset_normalizer/md.py deleted file mode 100644 index b41d9cf..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/md.py +++ /dev/null @@ -1,936 +0,0 @@ -from __future__ import annotations - -import sys -from functools import lru_cache -from logging import getLogger - -if sys.version_info >= (3, 8): - from typing import final -else: - try: - from typing_extensions import final - except ImportError: - - def final(cls): # type: ignore[misc,no-untyped-def] - return cls - - -from .constant import ( - COMMON_CJK_CHARACTERS, - COMMON_SAFE_ASCII_CHARACTERS, - TRACE, - UNICODE_SECONDARY_RANGE_KEYWORD, - _ACCENTUATED, - _ARABIC, - _ARABIC_ISOLATED_FORM, - _CJK, - _HANGUL, - _HIRAGANA, - _KATAKANA, - _LATIN, - _THAI, -) -from .utils import ( - _character_flags, - is_emoticon, - is_punctuation, - is_separator, - is_symbol, - remove_accent, - unicode_range, -) - -# Combined bitmask for CJK/Hangul/Katakana/Hiragana/Thai glyph detection. -_GLYPH_MASK: int = _CJK | _HANGUL | _KATAKANA | _HIRAGANA | _THAI - - -@final -class CharInfo: - """Pre-computed character properties shared across all detectors. - - Instantiated once and reused via :meth:`update` on every character - in the hot loop so that redundant calls to str methods - (``isalpha``, ``isupper``, …) and cached utility functions - (``_character_flags``, ``is_punctuation``, …) are avoided when - several plugins need the same information. - """ - - __slots__ = ( - "character", - "printable", - "alpha", - "upper", - "lower", - "space", - "digit", - "is_ascii", - "case_variable", - "flags", - "accentuated", - "latin", - "is_cjk", - "is_arabic", - "is_glyph", - "punct", - "sym", - ) - - def __init__(self) -> None: - self.character: str = "" - self.printable: bool = False - self.alpha: bool = False - self.upper: bool = False - self.lower: bool = False - self.space: bool = False - self.digit: bool = False - self.is_ascii: bool = False - self.case_variable: bool = False - self.flags: int = 0 - self.accentuated: bool = False - self.latin: bool = False - self.is_cjk: bool = False - self.is_arabic: bool = False - self.is_glyph: bool = False - self.punct: bool = False - self.sym: bool = False - - def update(self, character: str) -> None: - """Update all properties for *character* (called once per character).""" - self.character = character - - # ASCII fast-path: for characters with ord < 128, we can skip - # _character_flags() entirely and derive most properties from ord. - o: int = ord(character) - if o < 128: - self.is_ascii = True - self.accentuated = False - self.is_cjk = False - self.is_arabic = False - self.is_glyph = False - # ASCII alpha: a-z (97-122) or A-Z (65-90) - if 65 <= o <= 90: - # Uppercase ASCII letter - self.alpha = True - self.upper = True - self.lower = False - self.space = False - self.digit = False - self.printable = True - self.case_variable = True - self.flags = _LATIN - self.latin = True - self.punct = False - self.sym = False - elif 97 <= o <= 122: - # Lowercase ASCII letter - self.alpha = True - self.upper = False - self.lower = True - self.space = False - self.digit = False - self.printable = True - self.case_variable = True - self.flags = _LATIN - self.latin = True - self.punct = False - self.sym = False - elif 48 <= o <= 57: - # ASCII digit 0-9 - self.alpha = False - self.upper = False - self.lower = False - self.space = False - self.digit = True - self.printable = True - self.case_variable = False - self.flags = 0 - self.latin = False - self.punct = False - self.sym = False - elif o == 32 or (9 <= o <= 13): - # Space, tab, newline, etc. - self.alpha = False - self.upper = False - self.lower = False - self.space = True - self.digit = False - self.printable = o == 32 - self.case_variable = False - self.flags = 0 - self.latin = False - self.punct = False - self.sym = False - else: - # Other ASCII (punctuation, symbols, control chars) - self.printable = character.isprintable() - self.alpha = False - self.upper = False - self.lower = False - self.space = False - self.digit = False - self.case_variable = False - self.flags = 0 - self.latin = False - self.punct = is_punctuation(character) if self.printable else False - self.sym = is_symbol(character) if self.printable else False - else: - # Non-ASCII path - self.is_ascii = False - self.printable = character.isprintable() - self.alpha = character.isalpha() - self.upper = character.isupper() - self.lower = character.islower() - self.space = character.isspace() - self.digit = character.isdigit() - self.case_variable = self.lower != self.upper - - # Flag-based classification (single unicodedata.name() call, lru-cached) - flags: int - if self.alpha: - flags = _character_flags(character) - else: - flags = 0 - self.flags = flags - self.accentuated = bool(flags & _ACCENTUATED) - self.latin = bool(flags & _LATIN) - self.is_cjk = bool(flags & _CJK) - self.is_arabic = bool(flags & _ARABIC) - self.is_glyph = bool(flags & _GLYPH_MASK) - - # Eagerly compute punct and sym (avoids property dispatch overhead - # on 300K+ accesses in the hot loop). - self.punct = is_punctuation(character) if self.printable else False - self.sym = is_symbol(character) if self.printable else False - - -class MessDetectorPlugin: - """ - Base abstract class used for mess detection plugins. - All detectors MUST extend and implement given methods. - """ - - __slots__ = () - - def feed_info(self, character: str, info: CharInfo) -> None: - """ - The main routine to be executed upon character. - Insert the logic in witch the text would be considered chaotic. - """ - raise NotImplementedError # Defensive: - - def reset(self) -> None: # Defensive: - """ - Permit to reset the plugin to the initial state. - """ - raise NotImplementedError - - @property - def ratio(self) -> float: - """ - Compute the chaos ratio based on what your feed() has seen. - Must NOT be lower than 0.; No restriction gt 0. - """ - raise NotImplementedError # Defensive: - - -@final -class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin): - __slots__ = ( - "_punctuation_count", - "_symbol_count", - "_character_count", - "_last_printable_char", - "_frenzy_symbol_in_word", - ) - - def __init__(self) -> None: - self._punctuation_count: int = 0 - self._symbol_count: int = 0 - self._character_count: int = 0 - - self._last_printable_char: str | None = None - self._frenzy_symbol_in_word: bool = False - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - - if ( - character != self._last_printable_char - and character not in COMMON_SAFE_ASCII_CHARACTERS - ): - if info.punct: - self._punctuation_count += 1 - elif not info.digit and info.sym and not is_emoticon(character): - self._symbol_count += 2 - - self._last_printable_char = character - - def reset(self) -> None: # Abstract - self._punctuation_count = 0 - self._character_count = 0 - self._symbol_count = 0 - - @property - def ratio(self) -> float: - if self._character_count == 0: - return 0.0 - - ratio_of_punctuation: float = ( - self._punctuation_count + self._symbol_count - ) / self._character_count - - return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0 - - -@final -class TooManyAccentuatedPlugin(MessDetectorPlugin): - __slots__ = ("_character_count", "_accentuated_count") - - def __init__(self) -> None: - self._character_count: int = 0 - self._accentuated_count: int = 0 - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - - if info.accentuated: - self._accentuated_count += 1 - - def reset(self) -> None: # Abstract - self._character_count = 0 - self._accentuated_count = 0 - - @property - def ratio(self) -> float: - if self._character_count < 8: - return 0.0 - - ratio_of_accentuation: float = self._accentuated_count / self._character_count - return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0 - - -@final -class UnprintablePlugin(MessDetectorPlugin): - __slots__ = ("_unprintable_count", "_character_count") - - def __init__(self) -> None: - self._unprintable_count: int = 0 - self._character_count: int = 0 - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - if ( - not info.space - and not info.printable - and character != "\x1a" - and character != "\ufeff" - ): - self._unprintable_count += 1 - self._character_count += 1 - - def reset(self) -> None: # Abstract - self._unprintable_count = 0 - - @property - def ratio(self) -> float: - if self._character_count == 0: # Defensive: - return 0.0 - - return (self._unprintable_count * 8) / self._character_count - - -@final -class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin): - __slots__ = ( - "_successive_count", - "_character_count", - "_last_latin_character", - "_last_was_accentuated", - ) - - def __init__(self) -> None: - self._successive_count: int = 0 - self._character_count: int = 0 - - self._last_latin_character: str | None = None - self._last_was_accentuated: bool = False - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - if ( - self._last_latin_character is not None - and info.accentuated - and self._last_was_accentuated - ): - if info.upper and self._last_latin_character.isupper(): - self._successive_count += 1 - if remove_accent(character) == remove_accent(self._last_latin_character): - self._successive_count += 1 - self._last_latin_character = character - self._last_was_accentuated = info.accentuated - - def reset(self) -> None: # Abstract - self._successive_count = 0 - self._character_count = 0 - self._last_latin_character = None - self._last_was_accentuated = False - - @property - def ratio(self) -> float: - if self._character_count == 0: - return 0.0 - - return (self._successive_count * 2) / self._character_count - - -@final -class SuspiciousRange(MessDetectorPlugin): - __slots__ = ( - "_suspicious_successive_range_count", - "_character_count", - "_last_printable_seen", - "_last_printable_range", - ) - - def __init__(self) -> None: - self._suspicious_successive_range_count: int = 0 - self._character_count: int = 0 - self._last_printable_seen: str | None = None - self._last_printable_range: str | None = None - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - - if info.space or info.punct or character in COMMON_SAFE_ASCII_CHARACTERS: - self._last_printable_seen = None - self._last_printable_range = None - return - - if self._last_printable_seen is None: - self._last_printable_seen = character - self._last_printable_range = unicode_range(character) - return - - unicode_range_a: str | None = self._last_printable_range - unicode_range_b: str | None = unicode_range(character) - - if is_suspiciously_successive_range(unicode_range_a, unicode_range_b): - self._suspicious_successive_range_count += 1 - - self._last_printable_seen = character - self._last_printable_range = unicode_range_b - - def reset(self) -> None: # Abstract - self._character_count = 0 - self._suspicious_successive_range_count = 0 - self._last_printable_seen = None - self._last_printable_range = None - - @property - def ratio(self) -> float: - if self._character_count <= 13: - return 0.0 - - ratio_of_suspicious_range_usage: float = ( - self._suspicious_successive_range_count * 2 - ) / self._character_count - - return ratio_of_suspicious_range_usage - - -@final -class SuperWeirdWordPlugin(MessDetectorPlugin): - __slots__ = ( - "_word_count", - "_bad_word_count", - "_foreign_long_count", - "_is_current_word_bad", - "_foreign_long_watch", - "_character_count", - "_bad_character_count", - "_buffer_length", - "_buffer_last_char", - "_buffer_last_char_accentuated", - "_buffer_accent_count", - "_buffer_glyph_count", - "_buffer_upper_count", - ) - - def __init__(self) -> None: - self._word_count: int = 0 - self._bad_word_count: int = 0 - self._foreign_long_count: int = 0 - - self._is_current_word_bad: bool = False - self._foreign_long_watch: bool = False - - self._character_count: int = 0 - self._bad_character_count: int = 0 - - self._buffer_length: int = 0 - self._buffer_last_char: str | None = None - self._buffer_last_char_accentuated: bool = False - self._buffer_accent_count: int = 0 - self._buffer_glyph_count: int = 0 - self._buffer_upper_count: int = 0 - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - if info.alpha: - self._buffer_length += 1 - self._buffer_last_char = character - - if info.upper: - self._buffer_upper_count += 1 - - self._buffer_last_char_accentuated = info.accentuated - - if info.accentuated: - self._buffer_accent_count += 1 - if ( - not self._foreign_long_watch - and (not info.latin or info.accentuated) - and not info.is_glyph - ): - self._foreign_long_watch = True - if info.is_glyph: - self._buffer_glyph_count += 1 - return - if not self._buffer_length: - return - if info.space or info.punct or is_separator(character): - self._word_count += 1 - buffer_length: int = self._buffer_length - - self._character_count += buffer_length - - if buffer_length >= 4: - if self._buffer_accent_count / buffer_length >= 0.5: - self._is_current_word_bad = True - elif ( - self._buffer_last_char_accentuated - and self._buffer_last_char.isupper() # type: ignore[union-attr] - and self._buffer_upper_count != buffer_length - ): - self._foreign_long_count += 1 - self._is_current_word_bad = True - elif self._buffer_glyph_count == 1: - self._is_current_word_bad = True - self._foreign_long_count += 1 - if buffer_length >= 24 and self._foreign_long_watch: - probable_camel_cased: bool = ( - self._buffer_upper_count > 0 - and self._buffer_upper_count / buffer_length <= 0.3 - ) - - if not probable_camel_cased: - self._foreign_long_count += 1 - self._is_current_word_bad = True - - if self._is_current_word_bad: - self._bad_word_count += 1 - self._bad_character_count += buffer_length - self._is_current_word_bad = False - - self._foreign_long_watch = False - self._buffer_length = 0 - self._buffer_last_char = None - self._buffer_last_char_accentuated = False - self._buffer_accent_count = 0 - self._buffer_glyph_count = 0 - self._buffer_upper_count = 0 - elif ( - character not in {"<", ">", "-", "=", "~", "|", "_"} - and not info.digit - and info.sym - ): - self._is_current_word_bad = True - self._buffer_length += 1 - self._buffer_last_char = character - self._buffer_last_char_accentuated = False - - def reset(self) -> None: # Abstract - self._buffer_length = 0 - self._buffer_last_char = None - self._buffer_last_char_accentuated = False - self._is_current_word_bad = False - self._foreign_long_watch = False - self._bad_word_count = 0 - self._word_count = 0 - self._character_count = 0 - self._bad_character_count = 0 - self._foreign_long_count = 0 - self._buffer_accent_count = 0 - self._buffer_glyph_count = 0 - self._buffer_upper_count = 0 - - @property - def ratio(self) -> float: - if self._word_count <= 10 and self._foreign_long_count == 0: - return 0.0 - - return self._bad_character_count / self._character_count - - -@final -class CjkUncommonPlugin(MessDetectorPlugin): - """ - Detect messy CJK text that probably means nothing. - """ - - __slots__ = ("_character_count", "_uncommon_count") - - def __init__(self) -> None: - self._character_count: int = 0 - self._uncommon_count: int = 0 - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - - if character not in COMMON_CJK_CHARACTERS: - self._uncommon_count += 1 - - def reset(self) -> None: # Abstract - self._character_count = 0 - self._uncommon_count = 0 - - @property - def ratio(self) -> float: - if self._character_count < 8: - return 0.0 - - uncommon_form_usage: float = self._uncommon_count / self._character_count - - # we can be pretty sure it's garbage when uncommon characters are widely - # used. otherwise it could just be traditional chinese for example. - return uncommon_form_usage / 10 if uncommon_form_usage > 0.5 else 0.0 - - -@final -class ArchaicUpperLowerPlugin(MessDetectorPlugin): - __slots__ = ( - "_buf", - "_character_count_since_last_sep", - "_successive_upper_lower_count", - "_successive_upper_lower_count_final", - "_character_count", - "_last_alpha_seen", - "_last_alpha_seen_upper", - "_last_alpha_seen_lower", - "_current_ascii_only", - ) - - def __init__(self) -> None: - self._buf: bool = False - - self._character_count_since_last_sep: int = 0 - - self._successive_upper_lower_count: int = 0 - self._successive_upper_lower_count_final: int = 0 - - self._character_count: int = 0 - - self._last_alpha_seen: str | None = None - self._last_alpha_seen_upper: bool = False - self._last_alpha_seen_lower: bool = False - self._current_ascii_only: bool = True - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - is_concerned: bool = info.alpha and info.case_variable - chunk_sep: bool = not is_concerned - - if chunk_sep and self._character_count_since_last_sep > 0: - if ( - self._character_count_since_last_sep <= 64 - and not info.digit - and not self._current_ascii_only - ): - self._successive_upper_lower_count_final += ( - self._successive_upper_lower_count - ) - - self._successive_upper_lower_count = 0 - self._character_count_since_last_sep = 0 - self._last_alpha_seen = None - self._buf = False - self._character_count += 1 - self._current_ascii_only = True - - return - - if self._current_ascii_only and not info.is_ascii: - self._current_ascii_only = False - - if self._last_alpha_seen is not None: - if (info.upper and self._last_alpha_seen_lower) or ( - info.lower and self._last_alpha_seen_upper - ): - if self._buf: - self._successive_upper_lower_count += 2 - self._buf = False - else: - self._buf = True - else: - self._buf = False - - self._character_count += 1 - self._character_count_since_last_sep += 1 - self._last_alpha_seen = character - self._last_alpha_seen_upper = info.upper - self._last_alpha_seen_lower = info.lower - - def reset(self) -> None: # Abstract - self._character_count = 0 - self._character_count_since_last_sep = 0 - self._successive_upper_lower_count = 0 - self._successive_upper_lower_count_final = 0 - self._last_alpha_seen = None - self._last_alpha_seen_upper = False - self._last_alpha_seen_lower = False - self._buf = False - self._current_ascii_only = True - - @property - def ratio(self) -> float: - if self._character_count == 0: # Defensive: - return 0.0 - - return self._successive_upper_lower_count_final / self._character_count - - -@final -class ArabicIsolatedFormPlugin(MessDetectorPlugin): - __slots__ = ("_character_count", "_isolated_form_count") - - def __init__(self) -> None: - self._character_count: int = 0 - self._isolated_form_count: int = 0 - - def reset(self) -> None: # Abstract - self._character_count = 0 - self._isolated_form_count = 0 - - def feed_info(self, character: str, info: CharInfo) -> None: - """Optimized feed using pre-computed character info.""" - self._character_count += 1 - - if info.flags & _ARABIC_ISOLATED_FORM: - self._isolated_form_count += 1 - - @property - def ratio(self) -> float: - if self._character_count < 8: - return 0.0 - - isolated_form_usage: float = self._isolated_form_count / self._character_count - - return isolated_form_usage - - -@lru_cache(maxsize=1024) -def is_suspiciously_successive_range( - unicode_range_a: str | None, unicode_range_b: str | None -) -> bool: - """ - Determine if two Unicode range seen next to each other can be considered as suspicious. - """ - if unicode_range_a is None or unicode_range_b is None: - return True - - if unicode_range_a == unicode_range_b: - return False - - if "Latin" in unicode_range_a and "Latin" in unicode_range_b: - return False - - if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b: - return False - - # Latin characters can be accompanied with a combining diacritical mark - # eg. Vietnamese. - if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and ( - "Combining" in unicode_range_a or "Combining" in unicode_range_b - ): - return False - - keywords_range_a, keywords_range_b = ( - unicode_range_a.split(" "), - unicode_range_b.split(" "), - ) - - for el in keywords_range_a: - if el in UNICODE_SECONDARY_RANGE_KEYWORD: - continue - if el in keywords_range_b: - return False - - # Japanese Exception - range_a_jp_chars, range_b_jp_chars = ( - unicode_range_a - in ( - "Hiragana", - "Katakana", - ), - unicode_range_b in ("Hiragana", "Katakana"), - ) - if (range_a_jp_chars or range_b_jp_chars) and ( - "CJK" in unicode_range_a or "CJK" in unicode_range_b - ): - return False - if range_a_jp_chars and range_b_jp_chars: - return False - - if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b: - if "CJK" in unicode_range_a or "CJK" in unicode_range_b: - return False - if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": - return False - - # Chinese/Japanese use dedicated range for punctuation and/or separators. - if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or ( - unicode_range_a in ["Katakana", "Hiragana"] - and unicode_range_b in ["Katakana", "Hiragana"] - ): - if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b: - return False - if "Forms" in unicode_range_a or "Forms" in unicode_range_b: - return False - if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": - return False - - return True - - -@lru_cache(maxsize=2048) -def mess_ratio( - decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False -) -> float: - """ - Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier. - """ - - seq_len: int = len(decoded_sequence) - - if seq_len < 511: - step: int = 32 - elif seq_len < 1024: - step = 64 - else: - step = 128 - - # Create each detector as a named local variable (unrolled from the generic loop). - # This eliminates per-character iteration over the detector list and - # per-character eligible() virtual dispatch, while keeping every plugin class - # intact and fully readable. - d_sp: TooManySymbolOrPunctuationPlugin = TooManySymbolOrPunctuationPlugin() - d_ta: TooManyAccentuatedPlugin = TooManyAccentuatedPlugin() - d_up: UnprintablePlugin = UnprintablePlugin() - d_sda: SuspiciousDuplicateAccentPlugin = SuspiciousDuplicateAccentPlugin() - d_sr: SuspiciousRange = SuspiciousRange() - d_sw: SuperWeirdWordPlugin = SuperWeirdWordPlugin() - d_cu: CjkUncommonPlugin = CjkUncommonPlugin() - d_au: ArchaicUpperLowerPlugin = ArchaicUpperLowerPlugin() - d_ai: ArabicIsolatedFormPlugin = ArabicIsolatedFormPlugin() - - # Local references for feed_info methods called in the hot loop. - d_sp_feed = d_sp.feed_info - d_ta_feed = d_ta.feed_info - d_up_feed = d_up.feed_info - d_sda_feed = d_sda.feed_info - d_sr_feed = d_sr.feed_info - d_sw_feed = d_sw.feed_info - d_cu_feed = d_cu.feed_info - d_au_feed = d_au.feed_info - d_ai_feed = d_ai.feed_info - - # Single reusable CharInfo object (avoids per-character allocation). - info: CharInfo = CharInfo() - info_update = info.update - - mean_mess_ratio: float - - for block_start in range(0, seq_len, step): - for character in decoded_sequence[block_start : block_start + step]: - # Pre-compute all character properties once (shared across all plugins). - info_update(character) - - # Detectors with eligible() == always True - d_up_feed(character, info) - d_sw_feed(character, info) - d_au_feed(character, info) - - # Detectors with eligible() == isprintable - if info.printable: - d_sp_feed(character, info) - d_sr_feed(character, info) - - # Detectors with eligible() == isalpha - if info.alpha: - d_ta_feed(character, info) - # SuspiciousDuplicateAccent: isalpha() and is_latin() - if info.latin: - d_sda_feed(character, info) - # CjkUncommon: is_cjk() - if info.is_cjk: - d_cu_feed(character, info) - # ArabicIsolatedForm: is_arabic() - if info.is_arabic: - d_ai_feed(character, info) - - mean_mess_ratio = ( - d_sp.ratio - + d_ta.ratio - + d_up.ratio - + d_sda.ratio - + d_sr.ratio - + d_sw.ratio - + d_cu.ratio - + d_au.ratio - + d_ai.ratio - ) - - if mean_mess_ratio >= maximum_threshold: - break - else: - # Flush last word buffer in SuperWeirdWordPlugin via trailing newline. - info_update("\n") - d_sw_feed("\n", info) - d_au_feed("\n", info) - d_up_feed("\n", info) - - mean_mess_ratio = ( - d_sp.ratio - + d_ta.ratio - + d_up.ratio - + d_sda.ratio - + d_sr.ratio - + d_sw.ratio - + d_cu.ratio - + d_au.ratio - + d_ai.ratio - ) - - if debug: # Defensive: - logger = getLogger("charset_normalizer") - - logger.log( - TRACE, - "Mess-detector extended-analysis start. " - f"intermediary_mean_mess_ratio_calc={step} mean_mess_ratio={mean_mess_ratio} " - f"maximum_threshold={maximum_threshold}", - ) - - if seq_len > 16: - logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}") - logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}") - - for dt in [d_sp, d_ta, d_up, d_sda, d_sr, d_sw, d_cu, d_au, d_ai]: - logger.log(TRACE, f"{dt.__class__}: {dt.ratio}") - - return round(mean_mess_ratio, 3) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/models.py b/myenv/lib/python3.12/site-packages/charset_normalizer/models.py deleted file mode 100644 index 30e8a16..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/models.py +++ /dev/null @@ -1,359 +0,0 @@ -from __future__ import annotations - -from encodings.aliases import aliases -from json import dumps -from re import sub -from typing import Any, Iterator, List, Tuple - -from .constant import RE_POSSIBLE_ENCODING_INDICATION, TOO_BIG_SEQUENCE -from .utils import iana_name, is_multi_byte_encoding, unicode_range - - -class CharsetMatch: - def __init__( - self, - payload: bytes | bytearray, - guessed_encoding: str, - mean_mess_ratio: float, - has_sig_or_bom: bool, - languages: CoherenceMatches, - decoded_payload: str | None = None, - preemptive_declaration: str | None = None, - ): - self._payload: bytes | bytearray = payload - - self._encoding: str = guessed_encoding - self._mean_mess_ratio: float = mean_mess_ratio - self._languages: CoherenceMatches = languages - self._has_sig_or_bom: bool = has_sig_or_bom - self._unicode_ranges: list[str] | None = None - - self._leaves: list[CharsetMatch] = [] - self._mean_coherence_ratio: float = 0.0 - - self._output_payload: bytes | None = None - self._output_encoding: str | None = None - - self._string: str | None = decoded_payload - - self._preemptive_declaration: str | None = preemptive_declaration - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CharsetMatch): - if isinstance(other, str): - return iana_name(other) == self.encoding - return False - return self.encoding == other.encoding and self.fingerprint == other.fingerprint - - def __lt__(self, other: object) -> bool: - """ - Implemented to make sorted available upon CharsetMatches items. - """ - if not isinstance(other, CharsetMatch): - raise ValueError - - chaos_difference: float = abs(self.chaos - other.chaos) - coherence_difference: float = abs(self.coherence - other.coherence) - - # Below 0.5% difference --> Use Coherence - if chaos_difference < 0.005 and coherence_difference > 0.02: - return self.coherence > other.coherence - elif chaos_difference < 0.005 and coherence_difference <= 0.02: - # When having a difficult decision, use the result that decoded as many multi-byte as possible. - # preserve RAM usage! - if len(self._payload) >= TOO_BIG_SEQUENCE: - return self.chaos < other.chaos - return self.multi_byte_usage > other.multi_byte_usage - - return self.chaos < other.chaos - - @property - def multi_byte_usage(self) -> float: - return 1.0 - (len(str(self)) / len(self.raw)) - - def __str__(self) -> str: - # Lazy Str Loading - if self._string is None: - self._string = str(self._payload, self._encoding, "strict") - return self._string - - def __repr__(self) -> str: - return f"" - - def add_submatch(self, other: CharsetMatch) -> None: - if not isinstance(other, CharsetMatch) or other == self: - raise ValueError( - "Unable to add instance <{}> as a submatch of a CharsetMatch".format( - other.__class__ - ) - ) - - other._string = None # Unload RAM usage; dirty trick. - self._leaves.append(other) - - @property - def encoding(self) -> str: - return self._encoding - - @property - def encoding_aliases(self) -> list[str]: - """ - Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855. - """ - also_known_as: list[str] = [] - for u, p in aliases.items(): - if self.encoding == u: - also_known_as.append(p) - elif self.encoding == p: - also_known_as.append(u) - return also_known_as - - @property - def bom(self) -> bool: - return self._has_sig_or_bom - - @property - def byte_order_mark(self) -> bool: - return self._has_sig_or_bom - - @property - def languages(self) -> list[str]: - """ - Return the complete list of possible languages found in decoded sequence. - Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'. - """ - return [e[0] for e in self._languages] - - @property - def language(self) -> str: - """ - Most probable language found in decoded sequence. If none were detected or inferred, the property will return - "Unknown". - """ - if not self._languages: - # Trying to infer the language based on the given encoding - # Its either English or we should not pronounce ourselves in certain cases. - if "ascii" in self.could_be_from_charset: - return "English" - - # doing it there to avoid circular import - from charset_normalizer.cd import encoding_languages, mb_encoding_languages - - languages = ( - mb_encoding_languages(self.encoding) - if is_multi_byte_encoding(self.encoding) - else encoding_languages(self.encoding) - ) - - if len(languages) == 0 or "Latin Based" in languages: - return "Unknown" - - return languages[0] - - return self._languages[0][0] - - @property - def chaos(self) -> float: - return self._mean_mess_ratio - - @property - def coherence(self) -> float: - if not self._languages: - return 0.0 - return self._languages[0][1] - - @property - def percent_chaos(self) -> float: - return round(self.chaos * 100, ndigits=3) - - @property - def percent_coherence(self) -> float: - return round(self.coherence * 100, ndigits=3) - - @property - def raw(self) -> bytes | bytearray: - """ - Original untouched bytes. - """ - return self._payload - - @property - def submatch(self) -> list[CharsetMatch]: - return self._leaves - - @property - def has_submatch(self) -> bool: - return len(self._leaves) > 0 - - @property - def alphabets(self) -> list[str]: - if self._unicode_ranges is not None: - return self._unicode_ranges - # list detected ranges - detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)] - # filter and sort - self._unicode_ranges = sorted(list({r for r in detected_ranges if r})) - return self._unicode_ranges - - @property - def could_be_from_charset(self) -> list[str]: - """ - The complete list of encoding that output the exact SAME str result and therefore could be the originating - encoding. - This list does include the encoding available in property 'encoding'. - """ - return [self._encoding] + [m.encoding for m in self._leaves] - - def output(self, encoding: str = "utf_8") -> bytes: - """ - Method to get re-encoded bytes payload using given target encoding. Default to UTF-8. - Any errors will be simply ignored by the encoder NOT replaced. - """ - if self._output_encoding is None or self._output_encoding != encoding: - self._output_encoding = encoding - decoded_string = str(self) - if ( - self._preemptive_declaration is not None - and self._preemptive_declaration.lower() - not in ["utf-8", "utf8", "utf_8"] - ): - patched_header = sub( - RE_POSSIBLE_ENCODING_INDICATION, - lambda m: m.string[m.span()[0] : m.span()[1]].replace( - m.groups()[0], - iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type] - ), - decoded_string[:8192], - count=1, - ) - - decoded_string = patched_header + decoded_string[8192:] - - self._output_payload = decoded_string.encode(encoding, "replace") - - return self._output_payload # type: ignore - - @property - def fingerprint(self) -> int: - """ - Retrieve a hash fingerprint of the decoded payload, used for deduplication. - """ - return hash(str(self)) - - -class CharsetMatches: - """ - Container with every CharsetMatch items ordered by default from most probable to the less one. - Act like a list(iterable) but does not implements all related methods. - """ - - def __init__(self, results: list[CharsetMatch] | None = None): - self._results: list[CharsetMatch] = sorted(results) if results else [] - - def __iter__(self) -> Iterator[CharsetMatch]: - yield from self._results - - def __getitem__(self, item: int | str) -> CharsetMatch: - """ - Retrieve a single item either by its position or encoding name (alias may be used here). - Raise KeyError upon invalid index or encoding not present in results. - """ - if isinstance(item, int): - return self._results[item] - if isinstance(item, str): - item = iana_name(item, False) - for result in self._results: - if item in result.could_be_from_charset: - return result - raise KeyError - - def __len__(self) -> int: - return len(self._results) - - def __bool__(self) -> bool: - return len(self._results) > 0 - - def append(self, item: CharsetMatch) -> None: - """ - Insert a single match. Will be inserted accordingly to preserve sort. - Can be inserted as a submatch. - """ - if not isinstance(item, CharsetMatch): - raise ValueError( - "Cannot append instance '{}' to CharsetMatches".format( - str(item.__class__) - ) - ) - # We should disable the submatch factoring when the input file is too heavy (conserve RAM usage) - if len(item.raw) < TOO_BIG_SEQUENCE: - for match in self._results: - if match.fingerprint == item.fingerprint and match.chaos == item.chaos: - match.add_submatch(item) - return - self._results.append(item) - self._results = sorted(self._results) - - def best(self) -> CharsetMatch | None: - """ - Simply return the first match. Strict equivalent to matches[0]. - """ - if not self._results: - return None - return self._results[0] - - def first(self) -> CharsetMatch | None: - """ - Redundant method, call the method best(). Kept for BC reasons. - """ - return self.best() - - -CoherenceMatch = Tuple[str, float] -CoherenceMatches = List[CoherenceMatch] - - -class CliDetectionResult: - def __init__( - self, - path: str, - encoding: str | None, - encoding_aliases: list[str], - alternative_encodings: list[str], - language: str, - alphabets: list[str], - has_sig_or_bom: bool, - chaos: float, - coherence: float, - unicode_path: str | None, - is_preferred: bool, - ): - self.path: str = path - self.unicode_path: str | None = unicode_path - self.encoding: str | None = encoding - self.encoding_aliases: list[str] = encoding_aliases - self.alternative_encodings: list[str] = alternative_encodings - self.language: str = language - self.alphabets: list[str] = alphabets - self.has_sig_or_bom: bool = has_sig_or_bom - self.chaos: float = chaos - self.coherence: float = coherence - self.is_preferred: bool = is_preferred - - @property - def __dict__(self) -> dict[str, Any]: # type: ignore - return { - "path": self.path, - "encoding": self.encoding, - "encoding_aliases": self.encoding_aliases, - "alternative_encodings": self.alternative_encodings, - "language": self.language, - "alphabets": self.alphabets, - "has_sig_or_bom": self.has_sig_or_bom, - "chaos": self.chaos, - "coherence": self.coherence, - "unicode_path": self.unicode_path, - "is_preferred": self.is_preferred, - } - - def to_json(self) -> str: - return dumps(self.__dict__, ensure_ascii=True, indent=4) diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/py.typed b/myenv/lib/python3.12/site-packages/charset_normalizer/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/utils.py b/myenv/lib/python3.12/site-packages/charset_normalizer/utils.py deleted file mode 100644 index 0f529b5..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/utils.py +++ /dev/null @@ -1,422 +0,0 @@ -from __future__ import annotations - -import importlib -import logging -import unicodedata -from bisect import bisect_right -from codecs import IncrementalDecoder -from encodings.aliases import aliases -from functools import lru_cache -from re import findall -from typing import Generator - -from _multibytecodec import ( # type: ignore[import-not-found,import] - MultibyteIncrementalDecoder, -) - -from .constant import ( - ENCODING_MARKS, - IANA_SUPPORTED_SIMILAR, - RE_POSSIBLE_ENCODING_INDICATION, - UNICODE_RANGES_COMBINED, - UNICODE_SECONDARY_RANGE_KEYWORD, - UTF8_MAXIMAL_ALLOCATION, - COMMON_CJK_CHARACTERS, - _LATIN, - _CJK, - _HANGUL, - _KATAKANA, - _HIRAGANA, - _THAI, - _ARABIC, - _ARABIC_ISOLATED_FORM, - _ACCENT_KEYWORDS, - _ACCENTUATED, -) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def _character_flags(character: str) -> int: - """Compute all name-based classification flags with a single unicodedata.name() call.""" - try: - desc: str = unicodedata.name(character) - except ValueError: - return 0 - - flags: int = 0 - - if "LATIN" in desc: - flags |= _LATIN - if "CJK" in desc: - flags |= _CJK - if "HANGUL" in desc: - flags |= _HANGUL - if "KATAKANA" in desc: - flags |= _KATAKANA - if "HIRAGANA" in desc: - flags |= _HIRAGANA - if "THAI" in desc: - flags |= _THAI - if "ARABIC" in desc: - flags |= _ARABIC - if "ISOLATED FORM" in desc: - flags |= _ARABIC_ISOLATED_FORM - - for kw in _ACCENT_KEYWORDS: - if kw in desc: - flags |= _ACCENTUATED - break - - return flags - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_accentuated(character: str) -> bool: - return bool(_character_flags(character) & _ACCENTUATED) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def remove_accent(character: str) -> str: - decomposed: str = unicodedata.decomposition(character) - if not decomposed: - return character - - codes: list[str] = decomposed.split(" ") - - return chr(int(codes[0], 16)) - - -# Pre-built sorted lookup table for O(log n) binary search in unicode_range(). -# Each entry is (range_start, range_end_exclusive, range_name). -_UNICODE_RANGES_SORTED: list[tuple[int, int, str]] = sorted( - (ord_range.start, ord_range.stop, name) - for name, ord_range in UNICODE_RANGES_COMBINED.items() -) -_UNICODE_RANGE_STARTS: list[int] = [e[0] for e in _UNICODE_RANGES_SORTED] - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def unicode_range(character: str) -> str | None: - """ - Retrieve the Unicode range official name from a single character. - """ - character_ord: int = ord(character) - - # Binary search: find the rightmost range whose start <= character_ord - idx = bisect_right(_UNICODE_RANGE_STARTS, character_ord) - 1 - if idx >= 0: - start, stop, name = _UNICODE_RANGES_SORTED[idx] - if character_ord < stop: - return name - - return None - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_latin(character: str) -> bool: - return bool(_character_flags(character) & _LATIN) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_punctuation(character: str) -> bool: - character_category: str = unicodedata.category(character) - - if "P" in character_category: - return True - - character_range: str | None = unicode_range(character) - - if character_range is None: - return False - - return "Punctuation" in character_range - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_symbol(character: str) -> bool: - character_category: str = unicodedata.category(character) - - if "S" in character_category or "N" in character_category: - return True - - character_range: str | None = unicode_range(character) - - if character_range is None: - return False - - return "Forms" in character_range and character_category != "Lo" - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_emoticon(character: str) -> bool: - character_range: str | None = unicode_range(character) - - if character_range is None: - return False - - return "Emoticons" in character_range or "Pictographs" in character_range - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_separator(character: str) -> bool: - if character.isspace() or character in {"|", "+", "<", ">"}: - return True - - character_category: str = unicodedata.category(character) - - return "Z" in character_category or character_category in {"Po", "Pd", "Pc"} - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_case_variable(character: str) -> bool: - return character.islower() != character.isupper() - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_cjk(character: str) -> bool: - return bool(_character_flags(character) & _CJK) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_hiragana(character: str) -> bool: - return bool(_character_flags(character) & _HIRAGANA) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_katakana(character: str) -> bool: - return bool(_character_flags(character) & _KATAKANA) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_hangul(character: str) -> bool: - return bool(_character_flags(character) & _HANGUL) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_thai(character: str) -> bool: - return bool(_character_flags(character) & _THAI) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_arabic(character: str) -> bool: - return bool(_character_flags(character) & _ARABIC) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_arabic_isolated_form(character: str) -> bool: - return bool(_character_flags(character) & _ARABIC_ISOLATED_FORM) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_cjk_uncommon(character: str) -> bool: - return character not in COMMON_CJK_CHARACTERS - - -@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED)) -def is_unicode_range_secondary(range_name: str) -> bool: - return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD) - - -@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) -def is_unprintable(character: str) -> bool: - return ( - character.isspace() is False # includes \n \t \r \v - and character.isprintable() is False - and character != "\x1a" # Why? Its the ASCII substitute character. - and character != "\ufeff" # bug discovered in Python, - # Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space. - ) - - -def any_specified_encoding( - sequence: bytes | bytearray, search_zone: int = 8192 -) -> str | None: - """ - Extract using ASCII-only decoder any specified encoding in the first n-bytes. - """ - if not isinstance(sequence, (bytes, bytearray)): - raise TypeError - - seq_len: int = len(sequence) - - results: list[str] = findall( - RE_POSSIBLE_ENCODING_INDICATION, - sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"), - ) - - if len(results) == 0: - return None - - for specified_encoding in results: - specified_encoding = specified_encoding.lower().replace("-", "_") - - encoding_alias: str - encoding_iana: str - - for encoding_alias, encoding_iana in aliases.items(): - if encoding_alias == specified_encoding: - return encoding_iana - if encoding_iana == specified_encoding: - return encoding_iana - - return None - - -@lru_cache(maxsize=128) -def is_multi_byte_encoding(name: str) -> bool: - """ - Verify is a specific encoding is a multi byte one based on it IANA name - """ - return name in { - "utf_8", - "utf_8_sig", - "utf_16", - "utf_16_be", - "utf_16_le", - "utf_32", - "utf_32_le", - "utf_32_be", - "utf_7", - } or issubclass( - importlib.import_module(f"encodings.{name}").IncrementalDecoder, - MultibyteIncrementalDecoder, - ) - - -def identify_sig_or_bom(sequence: bytes | bytearray) -> tuple[str | None, bytes]: - """ - Identify and extract SIG/BOM in given sequence. - """ - - for iana_encoding in ENCODING_MARKS: - marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding] - - if isinstance(marks, bytes): - marks = [marks] - - for mark in marks: - if sequence.startswith(mark): - return iana_encoding, mark - - return None, b"" - - -def should_strip_sig_or_bom(iana_encoding: str) -> bool: - return iana_encoding not in {"utf_16", "utf_32"} - - -def iana_name(cp_name: str, strict: bool = True) -> str: - """Returns the Python normalized encoding name (Not the IANA official name).""" - cp_name = cp_name.lower().replace("-", "_") - - encoding_alias: str - encoding_iana: str - - for encoding_alias, encoding_iana in aliases.items(): - if cp_name in [encoding_alias, encoding_iana]: - return encoding_iana - - if strict: - raise ValueError(f"Unable to retrieve IANA for '{cp_name}'") - - return cp_name - - -def cp_similarity(iana_name_a: str, iana_name_b: str) -> float: - if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b): - return 0.0 - - decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder - decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder - - id_a: IncrementalDecoder = decoder_a(errors="ignore") - id_b: IncrementalDecoder = decoder_b(errors="ignore") - - character_match_count: int = 0 - - for i in range(256): - to_be_decoded: bytes = bytes([i]) - if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded): - character_match_count += 1 - - return character_match_count / 256 - - -def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool: - """ - Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using - the function cp_similarity. - """ - return ( - iana_name_a in IANA_SUPPORTED_SIMILAR - and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a] - ) - - -def set_logging_handler( - name: str = "charset_normalizer", - level: int = logging.INFO, - format_string: str = "%(asctime)s | %(levelname)s | %(message)s", -) -> None: - logger = logging.getLogger(name) - logger.setLevel(level) - - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter(format_string)) - logger.addHandler(handler) - - -def cut_sequence_chunks( - sequences: bytes | bytearray, - encoding_iana: str, - offsets: range, - chunk_size: int, - bom_or_sig_available: bool, - strip_sig_or_bom: bool, - sig_payload: bytes, - is_multi_byte_decoder: bool, - decoded_payload: str | None = None, -) -> Generator[str, None, None]: - if decoded_payload and is_multi_byte_decoder is False: - for i in offsets: - chunk = decoded_payload[i : i + chunk_size] - if not chunk: - break - yield chunk - else: - for i in offsets: - chunk_end = i + chunk_size - if chunk_end > len(sequences) + 8: - continue - - cut_sequence = sequences[i : i + chunk_size] - - if bom_or_sig_available and strip_sig_or_bom is False: - cut_sequence = sig_payload + cut_sequence - - chunk = cut_sequence.decode( - encoding_iana, - errors="ignore" if is_multi_byte_decoder else "strict", - ) - - # multi-byte bad cutting detector and adjustment - # not the cleanest way to perform that fix but clever enough for now. - if is_multi_byte_decoder and i > 0: - chunk_partial_size_chk: int = min(chunk_size, 16) - - if ( - decoded_payload - and chunk[:chunk_partial_size_chk] not in decoded_payload - ): - for j in range(i, i - 4, -1): - cut_sequence = sequences[j:chunk_end] - - if bom_or_sig_available and strip_sig_or_bom is False: - cut_sequence = sig_payload + cut_sequence - - chunk = cut_sequence.decode(encoding_iana, errors="ignore") - - if chunk[:chunk_partial_size_chk] in decoded_payload: - break - - yield chunk diff --git a/myenv/lib/python3.12/site-packages/charset_normalizer/version.py b/myenv/lib/python3.12/site-packages/charset_normalizer/version.py deleted file mode 100644 index a80346f..0000000 --- a/myenv/lib/python3.12/site-packages/charset_normalizer/version.py +++ /dev/null @@ -1,8 +0,0 @@ -""" -Expose version -""" - -from __future__ import annotations - -__version__ = "3.4.6" -VERSION = __version__.split(".") diff --git a/myenv/lib/python3.12/site-packages/core/Constants.py b/myenv/lib/python3.12/site-packages/core/Constants.py deleted file mode 100644 index dd5629e..0000000 --- a/myenv/lib/python3.12/site-packages/core/Constants.py +++ /dev/null @@ -1,54 +0,0 @@ -from dataclasses import dataclass -from typing import Final -import os - - -@dataclass(frozen=True) -class Constants: - - SP_API_BASE_URL: Final[str] = os.environ.get('SP_API_BASE_URL', 'https://api.hydraveil.net/api/v1') - PING_URL: Final[str] = os.environ.get('PING_URL', 'https://api.hydraveil.net/api/v1/health') - - CONNECTION_RETRY_INTERVAL: Final[int] = int(os.environ.get('CONNECTION_RETRY_INTERVAL', '5')) - MAX_CONNECTION_ATTEMPTS: Final[int] = int(os.environ.get('MAX_CONNECTION_ATTEMPTS', '2')) - TOR_BOOTSTRAP_TIMEOUT: Final[int] = int(os.environ.get('TOR_BOOTSTRAP_TIMEOUT', '90')) - - HV_CLIENT_PATH: Final[str] = os.environ.get('HV_CLIENT_PATH') - HV_CLIENT_VERSION_NUMBER: Final[str] = os.environ.get('HV_CLIENT_VERSION_NUMBER') - - HOME: Final[str] = os.path.expanduser('~') - - SYSTEM_CONFIG_PATH: Final[str] = '/etc' - - CACHE_HOME: Final[str] = os.environ.get('XDG_CACHE_HOME', os.path.join(HOME, '.cache')) - CONFIG_HOME: Final[str] = os.environ.get('XDG_CONFIG_HOME', os.path.join(HOME, '.config')) - DATA_HOME: Final[str] = os.environ.get('XDG_DATA_HOME', os.path.join(HOME, '.local/share')) - STATE_HOME: Final[str] = os.environ.get('XDG_STATE_HOME', os.path.join(HOME, '.local/state')) - - HV_SYSTEM_CONFIG_PATH: Final[str] = f'{SYSTEM_CONFIG_PATH}/hydra-veil' - - HV_CACHE_HOME: Final[str] = f'{CACHE_HOME}/hydra-veil' - HV_CONFIG_HOME: Final[str] = f'{CONFIG_HOME}/hydra-veil' - HV_DATA_HOME: Final[str] = f'{DATA_HOME}/hydra-veil' - HV_STATE_HOME: Final[str] = f'{STATE_HOME}/hydra-veil' - - HV_SYSTEM_PROFILE_CONFIG_PATH: Final[str] = f'{HV_SYSTEM_CONFIG_PATH}/profiles' - - HV_PROFILE_CONFIG_HOME: Final[str] = f'{HV_CONFIG_HOME}/profiles' - HV_PROFILE_DATA_HOME: Final[str] = f'{HV_DATA_HOME}/profiles' - - HV_APPLICATION_DATA_HOME: Final[str] = f'{HV_DATA_HOME}/applications' - HV_INCIDENT_DATA_HOME: Final[str] = f'{HV_DATA_HOME}/incidents' - HV_RUNTIME_DATA_HOME: Final[str] = f'{HV_DATA_HOME}/runtime' - - HV_STORAGE_DATABASE_PATH: Final[str] = f'{HV_DATA_HOME}/storage.db' - - HV_CAPABILITY_POLICY_PATH: Final[str] = f'{SYSTEM_CONFIG_PATH}/apparmor.d/hydra-veil' - HV_PRIVILEGE_POLICY_PATH: Final[str] = f'{SYSTEM_CONFIG_PATH}/sudoers.d/hydra-veil' - - HV_SESSION_STATE_HOME: Final[str] = f'{HV_STATE_HOME}/sessions' - HV_TOR_STATE_HOME: Final[str] = f'{HV_STATE_HOME}/tor' - - HV_TOR_CONTROL_SOCKET_PATH: Final[str] = f'{HV_TOR_STATE_HOME}/tor.sock' - HV_TOR_PROCESS_IDENTIFIER_PATH: Final[str] = f'{HV_TOR_STATE_HOME}/tor.pid' - HV_TOR_INSTANCE_LOCK_PATH: Final[str] = f'{HV_TOR_STATE_HOME}/lock' diff --git a/myenv/lib/python3.12/site-packages/core/Errors.py b/myenv/lib/python3.12/site-packages/core/Errors.py deleted file mode 100644 index 84f4337..0000000 --- a/myenv/lib/python3.12/site-packages/core/Errors.py +++ /dev/null @@ -1,106 +0,0 @@ -class CommandNotFoundError(OSError): - - def __init__(self, subject): - - self.subject = subject - super().__init__(f"Command '{subject}' could not be found.") - - -class UnknownClientPathError(Exception): - pass - - -class UnknownClientVersionError(Exception): - pass - - -class UnknownConnectionTypeError(Exception): - pass - - -class UnknownTimeZoneError(Exception): - pass - - -class ConnectionTerminationError(Exception): - pass - - -class TorServiceInitializationError(Exception): - pass - - -class PolicyAssignmentError(Exception): - pass - - -class PolicyInstatementError(Exception): - pass - - -class PolicyRevocationError(Exception): - pass - - -class ProfileDeletionError(Exception): - pass - - -class ProfileModificationError(Exception): - pass - - -class ProfileStateConflictError(Exception): - pass - - -class ProfileActivationError(Exception): - pass - - -class ProfileDeactivationError(Exception): - pass - - -class UnsupportedApplicationVersionError(Exception): - pass - - -class ApplicationAlreadyInstalledError(Exception): - pass - - -class MissingLocationError(Exception): - pass - - -class MissingSubscriptionError(Exception): - pass - - -class InvalidSubscriptionError(Exception): - pass - - -class InvoiceNotFoundError(Exception): - pass - - -class InvoiceExpiredError(Exception): - pass - - -class InvoicePaymentFailedError(Exception): - pass - - -class ConnectionUnprotectedError(Exception): - pass - - -class FileIntegrityError(Exception): - pass - - -class EndpointVerificationError(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/core/__init__.py b/myenv/lib/python3.12/site-packages/core/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/core/__pycache__/Constants.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/__pycache__/Constants.cpython-312.pyc deleted file mode 100644 index 379b055..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/__pycache__/Constants.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/__pycache__/Errors.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/__pycache__/Errors.cpython-312.pyc deleted file mode 100644 index 7f18fc0..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/__pycache__/Errors.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c4f7b5f..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ApplicationController.py b/myenv/lib/python3.12/site-packages/core/controllers/ApplicationController.py deleted file mode 100644 index 2cd691f..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ApplicationController.py +++ /dev/null @@ -1,189 +0,0 @@ -from core.Constants import Constants -from core.Errors import CommandNotFoundError -from core.controllers.SessionStateController import SessionStateController -from core.models.session.Application import Application -from core.models.session.ApplicationVersion import ApplicationVersion -from core.models.session.SessionProfile import SessionProfile -from core.models.session.SessionState import SessionState -from core.observers.ProfileObserver import ProfileObserver -from core.services.WebServiceApiService import WebServiceApiService -from pathlib import Path -from typing import Optional -import os -import random -import re -import shutil -import stat -import subprocess -import sys -import time - - -class ApplicationController: - - @staticmethod - def get(code: str): - return Application.find(code) - - @staticmethod - def get_all(): - return Application.all() - - @staticmethod - def launch(version: ApplicationVersion, profile: SessionProfile, port_number: int = None, asynchronous: bool = False, profile_observer: Optional[ProfileObserver] = None): - - from core.controllers.ProfileController import ProfileController - - persistent_state_path = f'{profile.get_data_path()}/persistent-state' - font_path = f'{profile.get_data_path()}/fonts' - - if not os.path.isdir(persistent_state_path) or len(os.listdir(persistent_state_path)) == 0: - shutil.copytree(f'{version.get_installation_path()}/resources/initial-state', persistent_state_path) - - if (not os.path.isdir(font_path) or len(os.listdir(font_path)) == 0) and os.path.isdir('/usr/share/fonts'): - - if os.path.isdir('/usr/share/fonts/truetype'): - truetype_fonts_path = '/usr/share/fonts/truetype' - else: - truetype_fonts_path = '/usr/share/fonts' - - font_families = [file.name for file in Path(truetype_fonts_path).iterdir() if file.is_dir()] - - preferred_font_families = [ - 'adwaita-sans-fonts', - 'dejavu', - 'droid', - 'google-droid-sans-fonts', - 'google-noto-sans-cjk-vf-fonts', - 'google-noto-sans-mono-cjk-vf-fonts', - 'liberation', - 'liberation-sans-fonts', - 'libreoffice', - 'noto', - 'open-sans', - 'ubuntu' - ] - - font_family_subset = ApplicationController.__select_random_subset(font_families, preferred_font_families, 12) - - for font_family in font_family_subset: - shutil.copytree(f'{truetype_fonts_path}/{font_family}', f'{font_path}/{font_family}') - - display = ApplicationController.__find_unused_display() - time_zone = profile.determine_timezone() - - runtime_initialization_file_template = open(f'/{Constants.HV_RUNTIME_DATA_HOME}/.init.ptpl', 'r').read() - runtime_initialization_file_contents = runtime_initialization_file_template.format(display=display, time_zone=time_zone, hv_runtime_data_home=Constants.HV_RUNTIME_DATA_HOME) - - application_initialization_file_template = open(f'/{version.get_installation_path()}/.init.ptpl', 'r').read() - application_initialization_file_contents = application_initialization_file_template.format(application_version_home=version.get_installation_path(), port_number=port_number or -1, home=Constants.HOME, profile_data_path=profile.get_data_path(), config_home=Constants.CONFIG_HOME, application_version_number=version.version_number) - - session_state = SessionStateController.get_or_new(profile.id) - SessionStateController.update_or_create(session_state) - - initialization_file_contents = runtime_initialization_file_contents + application_initialization_file_contents - initialization_file_path = f'{session_state.get_state_path()}/.init' - - Path(initialization_file_path).touch(exist_ok=True, mode=0o600 | stat.S_IEXEC) - - with open(initialization_file_path, 'w') as initialization_file: - - initialization_file.write(initialization_file_contents) - initialization_file.close() - - if asynchronous: - - fork_process_id = os.fork() - - if not fork_process_id: - - ApplicationController.__run_process(initialization_file_path, profile, display, session_state) - ProfileController.disable(profile, False, profile_observer=profile_observer) - - time.sleep(1.0) - sys.exit() - - else: - - ApplicationController.__run_process(initialization_file_path, profile, display, session_state) - ProfileController.disable(profile, False, profile_observer=profile_observer) - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - applications = WebServiceApiService.get_applications(proxies) - - Application.truncate() - Application.save_many(applications) - - @staticmethod - def __find_unused_display(): - - file_names = os.listdir('/tmp/.X11-unix') - active_displays = [] - - for file_name in file_names: - - match_object = re.search(r'X(\d+)', file_name) - - if match_object: - - detected_display = int(match_object.group(1)) - - if 170 <= detected_display <= 198: - active_displays.append(detected_display) - - if len(active_displays) > 0: - - unused_display = sorted(active_displays)[-1] + 1 - return f':{str(unused_display)}' - - else: - return ':170' - - @staticmethod - def __select_random_subset(items: list, preferred_items: list, limit: int): - - available_preferred_items = [item for item in preferred_items if item in items] - selectable_items = [item for item in items if item not in preferred_items] - - selected_items = random.sample(selectable_items, random.randint(0, min(limit, len(selectable_items)))) - - return selected_items + available_preferred_items - - @staticmethod - def __run_process(initialization_file_path, profile, display, session_state: SessionState): - - if shutil.which('bwrap') is None: - raise CommandNotFoundError('bwrap') - - if shutil.which('ratpoison') is None: - raise CommandNotFoundError('ratpoison') - - if shutil.which('Xephyr') is None: - raise CommandNotFoundError('Xephyr') - - virtual_display_process = subprocess.Popen(('Xephyr', '-ac', '-br', '-title', f'HydraVeil - {profile.name or "Unnamed Profile"}', '-screen', profile.resolution, '-no-host-grab', display), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - - start_time = time.time() - timeout = float(10) - - while not os.path.exists(f'/tmp/.X11-unix/X{display[1:]}'): - - if time.time() - start_time < timeout: - time.sleep(0.1) - - else: - - virtual_display_process.kill() - return - - environment = os.environ.copy() - environment.update({'DISPLAY': display}) - - process = subprocess.Popen(initialization_file_path, env=environment) - - session_state.process_ids.extend([virtual_display_process.pid, process.pid]) - SessionStateController.update_or_create(session_state) - - process.wait() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ApplicationVersionController.py b/myenv/lib/python3.12/site-packages/core/controllers/ApplicationVersionController.py deleted file mode 100644 index 046a6fb..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ApplicationVersionController.py +++ /dev/null @@ -1,127 +0,0 @@ -from core.Errors import FileIntegrityError, UnsupportedApplicationVersionError, ApplicationAlreadyInstalledError -from core.controllers.ApplicationController import ApplicationController -from core.models.session.Application import Application -from core.models.session.ApplicationVersion import ApplicationVersion -from core.observers.ApplicationVersionObserver import ApplicationVersionObserver -from core.observers.ConnectionObserver import ConnectionObserver -from core.services.WebServiceApiService import WebServiceApiService -from io import BytesIO -from typing import Optional -import hashlib -import shutil -import tarfile - - -class ApplicationVersionController: - - @staticmethod - def get(application_code: str, version_number: str): - return ApplicationVersion.find(application_code, version_number) - - @staticmethod - def get_all(application: Optional[Application] = None): - return ApplicationVersion.all(application) - - @staticmethod - def install(application_version: ApplicationVersion, reinstall: bool = False, application_version_observer: Optional[ApplicationVersionObserver] = None, connection_observer: Optional[ConnectionObserver] = None): - - if not application_version.is_supported(): - raise UnsupportedApplicationVersionError('The application version in question is not supported.') - - if reinstall: - ApplicationVersionController.uninstall(application_version) - - if application_version.is_installed(): - raise ApplicationAlreadyInstalledError('The application in question is already installed.') - - from core.controllers.ConnectionController import ConnectionController - ConnectionController.with_preferred_connection(application_version, task=ApplicationVersionController.__install, application_version_observer=application_version_observer, connection_observer=connection_observer) - - @staticmethod - def uninstall(application_version: ApplicationVersion): - shutil.rmtree(application_version.get_installation_path(), ignore_errors=True) - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - applications = ApplicationController.get_all() - application_versions = [] - - for application_code in (application.code for application in applications): - - application_version_subset = WebServiceApiService.get_application_versions(application_code, proxies) - - for application_version in application_version_subset: - application_versions.append(application_version) - - ApplicationVersion.truncate() - ApplicationVersion.save_many(application_versions) - - @staticmethod - def __install(application_version: ApplicationVersion, application_version_observer: Optional[ApplicationVersionObserver] = None, proxies: Optional[dict] = None): - - import requests - - if application_version_observer is not None: - application_version_observer.notify('downloading', application_version) - - if proxies is not None: - response = requests.get(application_version.download_path, stream=True, proxies=proxies) - else: - response = requests.get(application_version.download_path, stream=True) - - if response.status_code == 200: - - response_size = int(response.headers.get('Content-Length', 0)) - response_buffer = BytesIO() - - block_size = 1024 - bytes_written = 0 - - for data in response.iter_content(block_size): - - bytes_written += len(data) - response_buffer.write(data) - progress = (bytes_written / response_size) * 100 if response_size > 0 else 0 - - if application_version_observer is not None: - - application_version_observer.notify('download_progressing', application_version, dict( - progress=progress - )) - - application_version_observer.notify('downloaded', application_version) - response_buffer.seek(0) - - file_hash = ApplicationVersionController.__calculate_file_hash(response_buffer) - - if file_hash != application_version.file_hash: - raise FileIntegrityError('Application version file integrity could not be verified.') - - with tarfile.open(fileobj=response_buffer, mode = 'r:gz') as tar_file: - - tar_file.extractall(application_version.get_installation_path()) - tar_file.close() - - with open(f'{application_version.get_installation_path()}/.sha3-512', 'w') as hash_file: - - hash_file.write(f'{file_hash}\n') - hash_file.close() - - else: - raise ConnectionError('The application version could not be downloaded.') - - @staticmethod - def __calculate_file_hash(file): - - hasher = hashlib.sha3_512() - buffer = file.read(65536) - - while len(buffer) > 0: - - hasher.update(buffer) - buffer = file.read(65536) - - file.seek(0) - - return hasher.hexdigest() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ClientController.py b/myenv/lib/python3.12/site-packages/core/controllers/ClientController.py deleted file mode 100644 index d47eb9e..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ClientController.py +++ /dev/null @@ -1,124 +0,0 @@ -from core.Constants import Constants -from core.Errors import UnknownClientPathError, UnknownClientVersionError, CommandNotFoundError -from core.controllers.ApplicationController import ApplicationController -from core.controllers.ApplicationVersionController import ApplicationVersionController -from core.controllers.ClientVersionController import ClientVersionController -from core.controllers.ConfigurationController import ConfigurationController -from core.controllers.LocationController import LocationController -from core.controllers.OperatorController import OperatorController -from core.controllers.SubscriptionPlanController import SubscriptionPlanController -from core.observers.ClientObserver import ClientObserver -from core.observers.ConnectionObserver import ConnectionObserver -from typing import Optional -import os -import pathlib -import re -import shutil -import subprocess - - -class ClientController: - - @staticmethod - def get_working_directory(): - return str(pathlib.Path(__file__).resolve().parent.parent.parent) - - @staticmethod - def get_version(): - - if (version_number := Constants.HV_CLIENT_VERSION_NUMBER) is None: - raise UnknownClientVersionError('The client version could not be determined.') - - return ClientVersionController.get_or_new(version_number) - - @staticmethod - def can_be_updated(): - - try: - version = ClientController.get_version() - except UnknownClientVersionError: - return False - - return not ClientVersionController.is_latest(version) - - @staticmethod - def sync(client_observer: ClientObserver = None, connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - ConnectionController.with_preferred_connection(task=ClientController.__sync, client_observer=client_observer, connection_observer=connection_observer) - - @staticmethod - def update(client_observer: ClientObserver = None, connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - ConnectionController.with_preferred_connection(task=ClientController.__update, client_observer=client_observer, connection_observer=connection_observer) - - @staticmethod - def __get_path(): - - if (path := Constants.HV_CLIENT_PATH) is None: - raise UnknownClientPathError('The client path could not be determined.') - - return path - - @staticmethod - def __sync(client_observer: Optional[ClientObserver] = None, proxies: Optional[dict] = None): - - if client_observer is not None: - client_observer.notify('synchronizing') - - # noinspection PyProtectedMember - ApplicationController._sync(proxies=proxies) - # noinspection PyProtectedMember - ApplicationVersionController._sync(proxies=proxies) - # noinspection PyProtectedMember - ClientVersionController._sync(proxies=proxies) - # noinspection PyProtectedMember - OperatorController._sync(proxies=proxies) - # noinspection PyProtectedMember - LocationController._sync(proxies=proxies) - # noinspection PyProtectedMember - SubscriptionPlanController._sync(proxies=proxies) - - ConfigurationController.update_last_synced_at() - - if client_observer is not None: - client_observer.notify('synchronized') - - @staticmethod - - def __update(client_observer: Optional[ClientObserver] = None, proxies: Optional[dict] = None): - - if ClientController.can_be_updated(): - - if client_observer is not None: - client_observer.notify('updating') - - client_path = ClientController.__get_path() - update_environment = os.environ.copy() - - if proxies is not None: - update_environment | dict(http_proxy=proxies['http'], https_proxy=proxies['https']) - - if shutil.which('hv-updater') is None: - raise CommandNotFoundError('hv-updater') - - process = subprocess.Popen(('hv-updater', '--overwrite', '--remove-old', client_path), env=update_environment, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) - highest_reported_progress = 0 - - for line in iter(process.stdout.readline, ''): - - match = re.search(r'(\d+\.\d+)%', line) - - if match and (progress := float(match.group(1))) > highest_reported_progress: - - highest_reported_progress = progress - - if client_observer is not None: - - client_observer.notify('update_progressing', None, dict( - progress=progress - )) - - if client_observer is not None: - client_observer.notify('updated') diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ClientVersionController.py b/myenv/lib/python3.12/site-packages/core/controllers/ClientVersionController.py deleted file mode 100644 index 24a6f85..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ClientVersionController.py +++ /dev/null @@ -1,46 +0,0 @@ -from core.models.ClientVersion import ClientVersion -from core.services.WebServiceApiService import WebServiceApiService -from typing import Optional - - -class ClientVersionController: - - @staticmethod - def get_latest(): - return ClientVersion.latest() - - @staticmethod - def is_latest(client_version): - - latest_client_version = ClientVersion.latest() - - if latest_client_version is None: - return True - - return client_version.version_number == latest_client_version.version_number - - @staticmethod - def get(version_number: str): - return ClientVersion.find(version_number) - - @staticmethod - def get_or_new(version_number: str): - - client_version = ClientVersionController.get(version_number) - - if client_version is None: - return ClientVersion(version_number) - - return client_version - - @staticmethod - def get_all(): - return ClientVersion.all() - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - client_versions = WebServiceApiService.get_client_versions(proxies) - - ClientVersion.truncate() - ClientVersion.save_many(client_versions) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ConfigurationController.py b/myenv/lib/python3.12/site-packages/core/controllers/ConfigurationController.py deleted file mode 100644 index 3dc0d09..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ConfigurationController.py +++ /dev/null @@ -1,93 +0,0 @@ -from core.Errors import UnknownConnectionTypeError -from core.models.Configuration import Configuration -from datetime import datetime, timezone -from typing import Optional - - -class ConfigurationController: - - @staticmethod - def get(): - return Configuration.get() - - @staticmethod - def get_or_new(): - - configuration = ConfigurationController.get() - - if configuration is None: - return Configuration() - - return configuration - - @staticmethod - def get_connection(): - - configuration = ConfigurationController.get() - - if configuration is None or configuration.connection not in ('system', 'tor'): - raise UnknownConnectionTypeError('The preferred connection type could not be determined.') - - return configuration.connection - - @staticmethod - def set_connection(connection: Optional[str] = None): - - configuration = ConfigurationController.get_or_new() - configuration.connection = connection - configuration.save() - - @staticmethod - def get_auto_sync_enabled(): - - configuration = ConfigurationController.get() - - if configuration is None: - return False - - return configuration.auto_sync_enabled - - @staticmethod - def set_auto_sync_enabled(enable_auto_sync: Optional[bool] = None): - - configuration = ConfigurationController.get_or_new() - configuration.auto_sync_enabled = enable_auto_sync - configuration.save() - - @staticmethod - def get_endpoint_verification_enabled(): - - configuration = ConfigurationController.get() - - if configuration is None: - return True - - return configuration.endpoint_verification_enabled - - @staticmethod - def set_endpoint_verification_enabled(enable_endpoint_verification: Optional[bool] = None): - - configuration = ConfigurationController.get_or_new() - configuration.endpoint_verification_enabled = enable_endpoint_verification - configuration.save() - - @staticmethod - def get_last_synced_at(): - - configuration = ConfigurationController.get() - - if configuration is None: - return None - - return configuration.last_synced_at - - @staticmethod - def update_last_synced_at(): - - configuration = ConfigurationController.get_or_new() - configuration.last_synced_at = datetime.now(timezone.utc) - configuration.save() - - @staticmethod - def update_or_create(configuration): - configuration.save() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ConnectionController.py b/myenv/lib/python3.12/site-packages/core/controllers/ConnectionController.py deleted file mode 100644 index c66a4e1..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ConnectionController.py +++ /dev/null @@ -1,605 +0,0 @@ -from collections.abc import Callable -from concurrent.futures import ThreadPoolExecutor, TimeoutError as FutureTimeoutError -from core.Constants import Constants -from core.Errors import InvalidSubscriptionError, MissingSubscriptionError, ConnectionUnprotectedError, ConnectionTerminationError, CommandNotFoundError, TorServiceInitializationError -from core.controllers.ConfigurationController import ConfigurationController -from core.controllers.ProfileController import ProfileController -from core.controllers.SessionStateController import SessionStateController -from core.controllers.SystemStateController import SystemStateController -from core.models.session.SessionProfile import SessionProfile -from core.models.system.SystemProfile import SystemProfile -from core.models.system.SystemState import SystemState -from core.observers import ConnectionObserver -from core.services.WebServiceApiService import WebServiceApiService -from pathlib import Path -from subprocess import CalledProcessError -from typing import Union, Optional, Any -import os -import psutil -import random -import re -import shutil -import socket -import stem -import stem.control -import stem.process -import subprocess -import sys -import tempfile -import time - - -class ConnectionController: - - @staticmethod - def with_preferred_connection(*args, task: Callable[..., Any], connection_observer: Optional[ConnectionObserver] = None, **kwargs): - - connection = ConfigurationController.get_connection() - - if connection == 'system': - return task(*args, **kwargs) - - elif connection == 'tor': - return ConnectionController.__with_tor_connection(*args, task=task, connection_observer=connection_observer, **kwargs) - - else: - return None - - @staticmethod - def establish_connection(profile: Union[SessionProfile, SystemProfile], ignore: tuple[type[Exception]] = (), connection_observer: Optional[ConnectionObserver] = None): - - connection = profile.connection - - if connection.needs_proxy_configuration() and not profile.has_proxy_configuration(): - - if profile.has_subscription(): - - if not profile.subscription.has_been_activated(): - ProfileController.activate_subscription(profile, connection_observer=connection_observer) - - proxy_configuration = ConnectionController.with_preferred_connection(profile.subscription.billing_code, task=WebServiceApiService.get_proxy_configuration, connection_observer=connection_observer) - - if proxy_configuration is None: - raise InvalidSubscriptionError() - - profile.attach_proxy_configuration(proxy_configuration) - - else: - raise MissingSubscriptionError() - - if connection.needs_wireguard_configuration() and not profile.has_wireguard_configuration(): - - if profile.has_subscription(): - - if not profile.subscription.has_been_activated(): - ProfileController.activate_subscription(profile, connection_observer=connection_observer) - - ProfileController.register_wireguard_session(profile, connection_observer=connection_observer) - - else: - - if profile.is_system_profile(): - - if ConnectionController.system_uses_wireguard_interface() and SystemStateController.exists(): - - try: - ConnectionController.terminate_system_connection() - except ConnectionTerminationError: - pass - - raise MissingSubscriptionError() - - if profile.is_session_profile(): - - try: - return ConnectionController.establish_session_connection(profile, ignore=ignore, connection_observer=connection_observer) - - except ConnectionError: - - if ConnectionController.__should_renegotiate(profile): - - ProfileController.register_wireguard_session(profile, connection_observer=connection_observer) - return ConnectionController.establish_session_connection(profile, ignore=ignore, connection_observer=connection_observer) - - else: - raise ConnectionError('The connection could not be established.') - - if profile.is_system_profile(): - - try: - return ConnectionController.establish_system_connection(profile, ignore=ignore, connection_observer=connection_observer) - - except ConnectionError: - - if ConnectionController.__should_renegotiate(profile): - - ProfileController.register_wireguard_session(profile, connection_observer=connection_observer) - return ConnectionController.establish_system_connection(profile, ignore=ignore, connection_observer=connection_observer) - - else: - raise ConnectionError('The connection could not be established.') - - return None - - @staticmethod - def establish_session_connection(profile: SessionProfile, ignore: tuple[type[Exception]] = (), connection_observer: Optional[ConnectionObserver] = None): - - session_directory = tempfile.mkdtemp(prefix='hv-') - session_state = SessionStateController.get_or_new(profile.id) - - port_number = None - proxy_port_number = None - - if profile.connection.is_unprotected(): - - if not ConnectionController.system_uses_wireguard_interface(): - - if not ConnectionUnprotectedError in ignore: - raise ConnectionUnprotectedError('Connection unprotected while the system is not using a WireGuard interface.') - else: - ProfileController.disable(profile) - - if profile.connection.code == 'tor': - - port_number = ConnectionController.get_random_available_port_number() - ConnectionController.establish_tor_session_connection(port_number, connection_observer=connection_observer) - session_state.network_port_numbers.tor.append(port_number) - - elif profile.connection.code == 'wireguard': - - if ConfigurationController.get_endpoint_verification_enabled(): - ProfileController.verify_wireguard_endpoint(profile, ignore=ignore) - - port_number = ConnectionController.get_random_available_port_number() - ConnectionController.establish_wireguard_session_connection(profile, session_directory, port_number) - session_state.network_port_numbers.wireguard.append(port_number) - - if profile.connection.masked: - - while proxy_port_number is None or proxy_port_number == port_number: - proxy_port_number = ConnectionController.get_random_available_port_number() - - ConnectionController.establish_proxy_session_connection(profile, session_directory, port_number, proxy_port_number) - session_state.network_port_numbers.proxy.append(proxy_port_number) - - if not profile.connection.is_unprotected(): - ConnectionController.await_connection(proxy_port_number or port_number, connection_observer=connection_observer) - - SessionStateController.update_or_create(session_state) - - return proxy_port_number or port_number - - @staticmethod - def establish_system_connection(profile: SystemProfile, ignore: tuple[type[Exception]] = (), connection_observer: Optional[ConnectionObserver] = None): - - if ConfigurationController.get_endpoint_verification_enabled(): - ProfileController.verify_wireguard_endpoint(profile, ignore=ignore) - - try: - ConnectionController.__establish_system_connection(profile, connection_observer) - - except ConnectionError: - - try: - ConnectionController.terminate_system_connection() - except ConnectionTerminationError: - pass - - raise ConnectionError('The connection could not be established.') - - except CalledProcessError: - - try: - ConnectionController.terminate_system_connection() - except ConnectionTerminationError: - pass - - try: - ConnectionController.__establish_system_connection(profile, connection_observer) - - except (ConnectionError, CalledProcessError): - - try: - ConnectionController.terminate_system_connection() - except ConnectionTerminationError: - pass - - raise ConnectionError('The connection could not be established.') - - ConnectionController.terminate_tor_connection() - time.sleep(1.0) - - @staticmethod - def establish_tor_session_connection(port_number: int, connection_observer: Optional[ConnectionObserver] = None): - - try: - - controller = stem.control.Controller.from_socket_file(Constants.HV_TOR_CONTROL_SOCKET_PATH) - controller.authenticate() - - except (FileNotFoundError, stem.SocketError, TypeError, IndexError): - - ConnectionController.establish_tor_connection(connection_observer=connection_observer) - - controller = stem.control.Controller.from_socket_file(Constants.HV_TOR_CONTROL_SOCKET_PATH) - controller.authenticate() - - socks_port_numbers = [str(port_number) for port_number in controller.get_ports('socks')] - socks_port_numbers.append(str(port_number)) - - controller.set_conf('SocksPort', socks_port_numbers) - - @staticmethod - def terminate_tor_session_connection(port_number: int): - - try: - - controller = stem.control.Controller.from_socket_file(Constants.HV_TOR_CONTROL_SOCKET_PATH) - controller.authenticate() - - socks_port_numbers = [str(port_number) for port_number in controller.get_ports('socks')] - - if len(socks_port_numbers) > 1: - - socks_port_numbers = [socks_port_number for socks_port_number in socks_port_numbers if socks_port_number != port_number] - controller.set_conf('SocksPort', socks_port_numbers) - - else: - controller.set_conf('SocksPort', '0') - - except (FileNotFoundError, stem.SocketError, TypeError, IndexError): - pass - - @staticmethod - def establish_tor_connection(connection_observer: Optional[ConnectionObserver] = None): - - Path(Constants.HV_TOR_STATE_HOME).mkdir(mode=0o700, parents=True, exist_ok=True) - - ConnectionController.terminate_tor_connection() - - if connection_observer is not None: - connection_observer.notify('tor_bootstrapping') - - with ThreadPoolExecutor(max_workers=1) as executor: - - future = executor.submit( - stem.process.launch_tor_with_config, - config={ - 'DataDirectory': Constants.HV_TOR_STATE_HOME, - 'ControlSocket': Constants.HV_TOR_CONTROL_SOCKET_PATH, - 'PIDFile': Constants.HV_TOR_PROCESS_IDENTIFIER_PATH, - 'SocksPort': '0' - }, - init_msg_handler=lambda contents: ConnectionController.__on_tor_initialization_message(contents, connection_observer) - ) - - try: - future.result(timeout=Constants.TOR_BOOTSTRAP_TIMEOUT) - - except FutureTimeoutError: - - ConnectionController.terminate_tor_connection() - raise TorServiceInitializationError('The dedicated Tor service could not be initialized.') - - if connection_observer is not None: - connection_observer.notify('tor_bootstrapped') - - try: - - controller = stem.control.Controller.from_socket_file(Constants.HV_TOR_CONTROL_SOCKET_PATH) - controller.authenticate() - - except (FileNotFoundError, stem.SocketError, TypeError, IndexError): - - ConnectionController.terminate_tor_connection() - raise TorServiceInitializationError('The dedicated Tor service could not be initialized.') - - for session_state in SessionStateController.all(): - - for port_number in session_state.network_port_numbers.tor: - ConnectionController.establish_tor_session_connection(port_number) - - @staticmethod - def terminate_tor_connection(): - - control_socket_file = Path(Constants.HV_TOR_CONTROL_SOCKET_PATH) - process_identifier_file = Path(Constants.HV_TOR_PROCESS_IDENTIFIER_PATH) - instance_lock_file = Path(Constants.HV_TOR_INSTANCE_LOCK_PATH) - - try: - process_identifier = int(process_identifier_file.read_text().strip()) - except (OSError, ValueError): - process_identifier = None - - if process_identifier is not None: - - try: - - process = psutil.Process(process_identifier) - - if process.is_running(): - process.terminate() - - except psutil.NoSuchProcess: - pass - - control_socket_file.unlink(missing_ok=True) - process_identifier_file.unlink(missing_ok=True) - instance_lock_file.unlink(missing_ok=True) - - @staticmethod - def establish_wireguard_session_connection(profile: SessionProfile, session_directory: str, port_number: int): - - if not profile.has_wireguard_configuration(): - raise FileNotFoundError('No valid WireGuard configuration file detected.') - - wireguard_session_directory = f'{session_directory}/wireguard' - Path(wireguard_session_directory).mkdir(exist_ok=True, mode=0o700) - - wireproxy_configuration_file_path = f'{wireguard_session_directory}/wireproxy.conf' - Path(wireproxy_configuration_file_path).touch(exist_ok=True, mode=0o600) - - with open(wireproxy_configuration_file_path, 'w') as wireproxy_configuration_file: - - wireproxy_configuration_file.write(f'WGConfig = {profile.get_wireguard_configuration_path()}\n\n[Socks5]\nBindAddress = 127.0.0.1:{str(port_number)}\n') - wireproxy_configuration_file.close() - - return subprocess.Popen((f'{Constants.HV_RUNTIME_DATA_HOME}/wireproxy/wireproxy', '-c', wireproxy_configuration_file_path), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - - @staticmethod - def establish_proxy_session_connection(profile: SessionProfile, session_directory: str, port_number: int, proxy_port_number: int): - - if shutil.which('proxychains4') is None: - raise CommandNotFoundError('proxychains4') - - if shutil.which('microsocks') is None: - raise CommandNotFoundError('microsocks') - - if profile.has_proxy_configuration(): - proxy_configuration = profile.get_proxy_configuration() - else: - raise FileNotFoundError('No valid proxy configuration file detected.') - - proxy_session_directory = f'{session_directory}/proxy' - Path(proxy_session_directory).mkdir(parents=True, exist_ok=True, mode=0o700) - - proxychains_proxy_list = '' - - if port_number is not None: - proxychains_proxy_list = f'socks5 127.0.0.1 {port_number}\n' - - proxychains_proxy_list = proxychains_proxy_list + f'socks5 {proxy_configuration.ip_address} {proxy_configuration.port_number} {proxy_configuration.username} {proxy_configuration.password}' - proxychains_template_file_path = f'{Constants.HV_RUNTIME_DATA_HOME}/proxychains.ptpl' - - with open(proxychains_template_file_path, 'r') as proxychains_template_file: - - proxychains_configuration_file_path = f'{proxy_session_directory}/proxychains.conf' - Path(proxychains_configuration_file_path).touch(exist_ok=True, mode=0o600) - - proxychains_configuration_file_contents = proxychains_template_file.read().format(proxy_list=proxychains_proxy_list) - - with open(proxychains_configuration_file_path, 'w') as proxychains_configuration_file: - - proxychains_configuration_file.write(proxychains_configuration_file_contents) - proxychains_configuration_file.close() - - return subprocess.Popen(('proxychains4', '-f', proxychains_configuration_file_path, 'microsocks', '-p', str(proxy_port_number)), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - - @staticmethod - def terminate_system_connection(): - - if shutil.which('nmcli') is None: - raise CommandNotFoundError('nmcli') - - if SystemStateController.exists(): - - process = subprocess.Popen(('nmcli', 'connection', 'delete', 'wg'), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - completed_successfully = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if completed_successfully or not ConnectionController.system_uses_wireguard_interface(): - - subprocess.run(('nmcli', 'connection', 'delete', 'hv-ipv6-sink'), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - ConnectionController.terminate_tor_connection() - SystemState.dissolve() - - else: - raise ConnectionTerminationError('The connection could not be terminated.') - - @staticmethod - def get_proxies(port_number: int): - - return dict( - http=f'socks5h://127.0.0.1:{port_number}', - https=f'socks5h://127.0.0.1:{port_number}' - ) - - @staticmethod - def get_random_available_port_number(): - - socket_instance = socket.socket() - socket_instance.bind(('', 0)) - port_number = socket_instance.getsockname()[1] - socket_instance.close() - - return port_number - - @staticmethod - def await_connection(port_number: Optional[int] = None, connection_observer: Optional[ConnectionObserver] = None): - - if port_number is None: - ConnectionController.await_network_interface() - - for retry_count in range(Constants.MAX_CONNECTION_ATTEMPTS): - - if connection_observer is not None: - - connection_observer.notify('connecting', dict( - retry_interval=Constants.CONNECTION_RETRY_INTERVAL, - maximum_number_of_attempts=Constants.MAX_CONNECTION_ATTEMPTS, - attempt_count=retry_count + 1 - )) - - try: - - ConnectionController.__test_connection(port_number) - return - - except ConnectionError: - - time.sleep(Constants.CONNECTION_RETRY_INTERVAL) - retry_count += 1 - - raise ConnectionError('The connection could not be established.') - - @staticmethod - def await_network_interface(): - - network_interface_is_activated = False - - retry_interval = .5 - maximum_number_of_attempts = 10 - attempt = 0 - - while not network_interface_is_activated and attempt < maximum_number_of_attempts: - - time.sleep(retry_interval) - - network_interface_is_activated = ConnectionController.system_uses_wireguard_interface() - attempt += 1 - - if not network_interface_is_activated: - raise ConnectionError('The network interface could not be activated.') - - @staticmethod - def system_uses_wireguard_interface(): - - if shutil.which('ip') is None: - raise CommandNotFoundError('ip') - - process = subprocess.Popen(('ip', 'route', 'get', '192.0.2.1'), stdout=subprocess.PIPE) - process_output = str(process.stdout.read()) - - return bool(re.search('dev wg', str(process_output))) - - @staticmethod - def __establish_system_connection(profile: SystemProfile, connection_observer: Optional[ConnectionObserver] = None): - - if shutil.which('dbus-send') is None: - raise CommandNotFoundError('dbus-send') - - if shutil.which('nmcli') is None: - raise CommandNotFoundError('nmcli') - - ConnectionController.terminate_system_connection() - - try: - process_output = subprocess.check_output(('nmcli', 'connection', 'import', '--temporary', 'type', 'wireguard', 'file', profile.get_wireguard_configuration_path()), text=True) - except CalledProcessError: - raise ConnectionError('The connection could not be established.') - - try: - - connection_id = (m := re.search(r'(?<=\()([a-f0-9-]+?)(?=\))', process_output)) and m.group(1) - ipv6_method = subprocess.check_output(('nmcli', '-g', 'ipv6.method', 'connection', 'show', connection_id), text=True).strip() - - except CalledProcessError: - raise ConnectionError('The connection could not be established.') - - if ipv6_method in ('disabled', 'ignore'): - - try: - subprocess.run(('dbus-send', '--system', '--print-reply', '--dest=org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager', 'org.freedesktop.DBus.Properties.Set', 'string:org.freedesktop.NetworkManager', 'string:ConnectivityCheckEnabled', 'variant:boolean:false'), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True) - except CalledProcessError: - raise ConnectionError('The connection could not be established.') - - try: - subprocess.run(('nmcli', 'connection', 'add', 'type', 'dummy', 'save', 'no', 'con-name', 'hv-ipv6-sink', 'ifname', 'hvipv6sink0', 'ipv6.method', 'manual', 'ipv6.addresses', 'fd7a:fd4b:54e3:077c::/64', 'ipv6.gateway', 'fd7a:fd4b:54e3:077c::1', 'ipv6.dns', '::1', 'ipv6.route-metric', '72'), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True) - except CalledProcessError: - raise ConnectionError('The connection could not be established.') - - SystemStateController.create(profile.id) - - try: - ConnectionController.await_connection(connection_observer=connection_observer) - - except ConnectionError: - raise ConnectionError('The connection could not be established.') - - @staticmethod - def __with_tor_connection(*args, task: Callable[..., Any], connection_observer: Optional[ConnectionObserver] = None, **kwargs): - - port_number = ConnectionController.get_random_available_port_number() - ConnectionController.establish_tor_session_connection(port_number, connection_observer=connection_observer) - - ConnectionController.await_connection(port_number, connection_observer=connection_observer) - task_output = task(*args, proxies=ConnectionController.get_proxies(port_number), **kwargs) - - ConnectionController.terminate_tor_session_connection(port_number) - - return task_output - - @staticmethod - def __test_connection(port_number: Optional[int] = None, timeout: float = 4.0): - - request_urls = [Constants.PING_URL] - proxies = None - - if os.environ.get('PING_URL') is None: - - request_urls.extend([ - 'https://hc1.simplifiedprivacy.net', - 'https://hc2.simplifiedprivacy.org', - 'https://hc3.hydraveil.net' - ]) - - random.shuffle(request_urls) - - if port_number is not None: - proxies = ConnectionController.get_proxies(port_number) - - for request_url in request_urls: - - command = [ - sys.executable, '-u', '-c', 'import requests, sys\n' - 'try:\n' - f' response = requests.get(\'{request_url}\', proxies={proxies}, timeout={timeout})\n' - ' response.raise_for_status(); print(response.text)\n' - 'except requests.exceptions.RequestException:\n' - ' sys.exit(1)' - ] - - try: - - _response = subprocess.check_output(command, text=True, timeout=timeout) - return None - - except (subprocess.CalledProcessError, subprocess.TimeoutExpired): - pass - - raise ConnectionError('The connection could not be established.') - - @staticmethod - def __should_renegotiate(profile: Union[SessionProfile, SystemProfile]): - - if not profile.has_subscription(): - raise MissingSubscriptionError() - - if profile.connection.needs_wireguard_configuration() and profile.has_wireguard_configuration(): - - if profile.subscription.has_been_activated(): - return True - - return False - - @staticmethod - def __on_tor_initialization_message(contents, connection_observer: Optional[ConnectionObserver] = None): - - if connection_observer is not None: - - if 'Bootstrapped ' in contents: - - progress = (m := re.search(r' (\d{1,3})% ', contents)) and int(m.group(1)) - - connection_observer.notify('tor_bootstrap_progressing', None, dict( - progress=progress - )) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/InvoiceController.py b/myenv/lib/python3.12/site-packages/core/controllers/InvoiceController.py deleted file mode 100644 index 214a113..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/InvoiceController.py +++ /dev/null @@ -1,79 +0,0 @@ -from core.Errors import InvoiceExpiredError, InvoicePaymentFailedError, InvoiceNotFoundError -from core.observers.ConnectionObserver import ConnectionObserver -from core.observers.InvoiceObserver import InvoiceObserver -from core.services.WebServiceApiService import WebServiceApiService -from typing import Optional -import time - - -class InvoiceController: - - @staticmethod - def get(billing_code: str, proxies: Optional[dict] = None): - return WebServiceApiService.get_invoice(billing_code, proxies) - - @staticmethod - def handle_payment(billing_code: str, invoice_observer: InvoiceObserver = None, connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - return ConnectionController.with_preferred_connection(billing_code, task=InvoiceController.__handle_payment, invoice_observer=invoice_observer, connection_observer=connection_observer) - - @staticmethod - def __handle_payment(billing_code: str, invoice_observer: Optional[InvoiceObserver] = None, proxies: Optional[dict] = None): - - invoice = None - - for index in range(1, 10): - - invoice = WebServiceApiService.get_invoice(billing_code, proxies) - - if invoice is None: - time.sleep(5.0) - else: - break - - if invoice is None: - raise InvoiceNotFoundError('The invoice in question could not be found.') - - invoice.status = 'new' - - if invoice_observer is not None: - invoice_observer.notify('retrieved', invoice) - - while invoice.status == 'new': - - invoice = WebServiceApiService.get_invoice(billing_code, proxies) - time.sleep(15.0) - - if invoice.status == 'expired': - raise InvoiceExpiredError('The invoice in question has expired.') - - if invoice.status == 'processing': - - if invoice_observer is not None: - invoice_observer.notify('processing', invoice) - - while invoice.status == 'processing': - - invoice = WebServiceApiService.get_invoice(billing_code, proxies) - time.sleep(15.0) - - if invoice.status != 'settled': - raise InvoicePaymentFailedError('The invoice payment has failed. Please contact support.') - - else: - - if invoice_observer is not None: - invoice_observer.notify('settled', invoice) - - for attempt in range(1, 10): - - subscription = WebServiceApiService.get_subscription(billing_code, proxies) - - if subscription is not None: - return subscription - - else: - time.sleep(15.0) - - return None diff --git a/myenv/lib/python3.12/site-packages/core/controllers/LocationController.py b/myenv/lib/python3.12/site-packages/core/controllers/LocationController.py deleted file mode 100644 index c9d84b2..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/LocationController.py +++ /dev/null @@ -1,22 +0,0 @@ -from core.models.Location import Location -from core.services.WebServiceApiService import WebServiceApiService -from typing import Optional - - -class LocationController: - - @staticmethod - def get(country_code: str, code: str): - return Location.find(country_code, code) - - @staticmethod - def get_all(): - return Location.all() - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - locations = WebServiceApiService.get_locations(proxies) - - Location.truncate() - Location.save_many(locations) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/OperatorController.py b/myenv/lib/python3.12/site-packages/core/controllers/OperatorController.py deleted file mode 100644 index 9d54c4a..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/OperatorController.py +++ /dev/null @@ -1,22 +0,0 @@ -from core.models.Operator import Operator -from core.services.WebServiceApiService import WebServiceApiService -from typing import Optional - - -class OperatorController: - - @staticmethod - def get(id: int): - return Operator.find_by_id(id) - - @staticmethod - def get_all(): - return Operator.all() - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - operators = WebServiceApiService.get_operators(proxies) - - Operator.truncate() - Operator.save_many(operators) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/PolicyController.py b/myenv/lib/python3.12/site-packages/core/controllers/PolicyController.py deleted file mode 100644 index d9ac774..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/PolicyController.py +++ /dev/null @@ -1,36 +0,0 @@ -from core.models.policy.CapabilityPolicy import CapabilityPolicy -from core.models.policy.PrivilegePolicy import PrivilegePolicy -from typing import Union - - -class PolicyController: - - @staticmethod - def get(code: str): - - if code == 'capability': - return CapabilityPolicy() - elif code == 'privilege': - return PrivilegePolicy() - - return None - - @staticmethod - def preview(policy: Union[CapabilityPolicy, PrivilegePolicy]): - return policy.preview() - - @staticmethod - def instate(policy: Union[CapabilityPolicy, PrivilegePolicy]): - policy.instate() - - @staticmethod - def revoke(policy: Union[CapabilityPolicy, PrivilegePolicy]): - policy.revoke() - - @staticmethod - def is_suggestible(policy: Union[CapabilityPolicy, PrivilegePolicy]): - return policy.is_suggestible() - - @staticmethod - def is_instated(policy: Union[CapabilityPolicy, PrivilegePolicy]): - return policy.is_instated() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/ProfileController.py b/myenv/lib/python3.12/site-packages/core/controllers/ProfileController.py deleted file mode 100644 index ffdad9c..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/ProfileController.py +++ /dev/null @@ -1,313 +0,0 @@ -from core.Errors import InvalidSubscriptionError, MissingSubscriptionError, ConnectionTerminationError, ProfileActivationError, ProfileDeactivationError, MissingLocationError, ConnectionUnprotectedError, EndpointVerificationError, ProfileStateConflictError -from core.controllers.ApplicationController import ApplicationController -from core.controllers.ApplicationVersionController import ApplicationVersionController -from core.controllers.SessionStateController import SessionStateController -from core.controllers.SystemStateController import SystemStateController -from core.models.BaseProfile import BaseProfile as Profile -from core.models.Subscription import Subscription -from core.models.session.SessionProfile import SessionProfile -from core.models.system.SystemProfile import SystemProfile -from core.observers.ApplicationVersionObserver import ApplicationVersionObserver -from core.observers.ConnectionObserver import ConnectionObserver -from core.observers.ProfileObserver import ProfileObserver -from core.services.WebServiceApiService import WebServiceApiService -from typing import Union, Optional -import base64 -import re -import time - - -class ProfileController: - - @staticmethod - def get(id: int) -> Union[SessionProfile, SystemProfile, None]: - return Profile.find_by_id(id) - - @staticmethod - def get_all(): - return Profile.all() - - @staticmethod - def create(profile: Union[SessionProfile, SystemProfile], profile_observer: ProfileObserver = None): - - profile.save() - - if profile_observer is not None: - profile_observer.notify('created', profile) - - @staticmethod - def update(profile: Union[SessionProfile, SystemProfile], profile_observer: ProfileObserver = None): - - profile.save() - - if profile_observer is not None: - profile_observer.notify('updated', profile) - - @staticmethod - def enable(profile: Union[SessionProfile, SystemProfile], ignore: tuple[type[Exception]] = (), pristine: bool = False, asynchronous: bool = False, profile_observer: ProfileObserver = None, application_version_observer: ApplicationVersionObserver = None, connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - - if ProfileController.is_enabled(profile): - - if not ProfileStateConflictError in ignore: - raise ProfileStateConflictError('The profile is already enabled or its session was not properly terminated.') - else: - ProfileController.disable(profile) - - if pristine: - profile.delete_data() - - if profile.is_session_profile(): - - application_version = profile.application_version - - if not application_version.is_installed(): - ApplicationVersionController.install(application_version, application_version_observer=application_version_observer, connection_observer=connection_observer) - - try: - port_number = ConnectionController.establish_connection(profile, ignore=ignore, connection_observer=connection_observer) - except ConnectionError: - raise ProfileActivationError('The profile could not be enabled.') - - if profile_observer is not None: - profile_observer.notify('enabled', profile) - - ApplicationController.launch(application_version, profile, port_number, asynchronous=asynchronous, profile_observer=profile_observer) - - if profile.is_system_profile(): - - try: - ConnectionController.establish_connection(profile, ignore=ignore, connection_observer=connection_observer) - except ConnectionError: - raise ProfileActivationError('The profile could not be enabled.') - - if profile_observer is not None: - profile_observer.notify('enabled', profile) - - @staticmethod - def disable(profile: Union[SessionProfile, SystemProfile], explicitly: bool = True, ignore: tuple[type[Exception]] = (), profile_observer: ProfileObserver = None): - - from core.controllers.ConnectionController import ConnectionController - - if profile.is_session_profile(): - - if SessionStateController.exists(profile.id): - - session_state = SessionStateController.get(profile.id) - - if session_state is not None: - - for port_number in session_state.network_port_numbers.tor: - ConnectionController.terminate_tor_session_connection(port_number) - - session_state.dissolve(session_state.id) - - if profile.is_system_profile(): - - subjects = ProfileController.get_all().values() - - for subject in subjects: - - if subject.is_session_profile(): - - if subject.connection.is_unprotected() and ProfileController.is_enabled(subject) and not ConnectionUnprotectedError in ignore: - raise ConnectionUnprotectedError('Disabling this system connection would leave one or more sessions exposed.') - - if SystemStateController.exists(): - - system_state = SystemStateController.get() - - if profile.id != system_state.profile_id: - raise ProfileDeactivationError('The profile could not be disabled.') - - try: - ConnectionController.terminate_system_connection() - except ConnectionTerminationError: - raise ProfileDeactivationError('The profile could not be disabled.') - - if profile_observer is not None: - - profile_observer.notify('disabled', profile, dict( - explicitly=explicitly, - )) - - time.sleep(1.0) - - @staticmethod - def destroy(profile: Union[SessionProfile, SystemProfile], profile_observer: ProfileObserver = None): - - ProfileController.disable(profile) - profile.delete() - - if profile_observer is not None: - profile_observer.notify('destroyed', profile) - - @staticmethod - def attach_subscription(profile: Union[SessionProfile, SystemProfile], subscription: Subscription): - - profile.subscription = subscription - profile.save() - - @staticmethod - def activate_subscription(profile: Union[SessionProfile, SystemProfile], connection_observer: Optional[ConnectionObserver] = None): - - from core.controllers.ConnectionController import ConnectionController - - if profile.has_subscription(): - - subscription = ConnectionController.with_preferred_connection(profile.subscription.billing_code, task=WebServiceApiService.get_subscription, connection_observer=connection_observer) - - if subscription is not None: - - profile.subscription = subscription - profile.save() - - else: - raise InvalidSubscriptionError() - - else: - raise MissingSubscriptionError() - - @staticmethod - def is_enabled(profile: Union[SessionProfile, SystemProfile]): - - from core.controllers.ConnectionController import ConnectionController - - if profile.is_session_profile(): - - session_state = SessionStateController.get_or_new(profile.id) - return len(session_state.network_port_numbers.all) > 0 or len(session_state.process_ids) > 0 - - if profile.is_system_profile(): - - system_state = SystemStateController.get() - - if system_state is not None and system_state.profile_id is profile.id: - return ConnectionController.system_uses_wireguard_interface() - - return False - - @staticmethod - def get_invoice(profile: Union[SessionProfile, SystemProfile]): - - if profile.has_subscription(): - return WebServiceApiService.get_invoice(profile.subscription.billing_code) - else: - return None - - @staticmethod - def attach_proxy_configuration(profile: Union[SessionProfile, SystemProfile]): - - if profile.is_session_profile() and profile.has_subscription(): - - proxy_configuration = WebServiceApiService.get_proxy_configuration(profile.subscription.billing_code) - - if proxy_configuration is not None: - profile.attach_proxy_configuration(proxy_configuration) - - @staticmethod - def get_proxy_configuration(profile: Union[SessionProfile, SystemProfile]): - - if profile.is_session_profile(): - return profile.get_proxy_configuration() - else: - return None - - @staticmethod - def has_proxy_configuration(profile: Union[SessionProfile, SystemProfile]): - profile.has_proxy_configuration() - - @staticmethod - def register_wireguard_session(profile: Union[SessionProfile, SystemProfile], connection_observer: Optional[ConnectionObserver] = None): - - from core.controllers.ConnectionController import ConnectionController - - if not profile.has_subscription(): - raise MissingSubscriptionError() - - if not profile.has_location(): - raise MissingLocationError() - - wireguard_keys = ProfileController.__generate_wireguard_keys() - - wireguard_configuration = ConnectionController.with_preferred_connection(profile.location.country_code, profile.location.code, profile.subscription.billing_code, wireguard_keys.get('public'), task=WebServiceApiService.post_wireguard_session, connection_observer=connection_observer) - - if wireguard_configuration is None: - raise InvalidSubscriptionError() - - expression = re.compile(r'^(PrivateKey =)\s?$', re.MULTILINE) - wireguard_configuration = re.sub(expression, r'\1 ' + wireguard_keys.get('private'), wireguard_configuration) - - profile.attach_wireguard_configuration(wireguard_configuration) - - @staticmethod - def get_wireguard_configuration_path(profile: Union[SessionProfile, SystemProfile]): - return profile.get_wireguard_configuration_path() - - @staticmethod - def has_wireguard_configuration(profile: Union[SessionProfile, SystemProfile]): - return profile.has_wireguard_configuration() - - @staticmethod - def verify_wireguard_endpoint(profile: Union[SessionProfile, SystemProfile], ignore: tuple[type[Exception]] = ()): - - try: - ProfileController.__verify_wireguard_endpoint(profile) - - except EndpointVerificationError as error: - - if not EndpointVerificationError in ignore: - - profile.address_security_incident() - raise error - - @staticmethod - def __verify_wireguard_endpoint(profile: Union[SessionProfile, SystemProfile]): - - from cryptography.hazmat.primitives.asymmetric import ed25519 - import base64 - - signature = profile.get_wireguard_configuration_metadata('Signature') - wireguard_public_keys = profile.get_wireguard_public_keys() - operator = profile.location.operator - - if signature is None: - raise EndpointVerificationError('The WireGuard endpoint\'s signature could not be determined.') - - if not wireguard_public_keys: - raise EndpointVerificationError('The WireGuard endpoint\'s public key could not be determined.') - - if operator is None: - raise EndpointVerificationError('The WireGuard endpoint\'s operator could not be determined.') - - try: - - operator_public_key = ed25519.Ed25519PublicKey.from_public_bytes(bytes.fromhex(operator.public_key)) - - for wireguard_public_key in wireguard_public_keys: - operator_public_key.verify(base64.b64decode(signature), wireguard_public_key.encode('utf-8')) - - except Exception: - raise EndpointVerificationError('The WireGuard endpoint could not be verified.') - - @staticmethod - def __generate_wireguard_keys(): - - from cryptography.hazmat.primitives import serialization - from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey - - raw_private_key = X25519PrivateKey.generate() - - public_key = raw_private_key.public_key().public_bytes( - encoding=serialization.Encoding.Raw, format=serialization.PublicFormat.Raw - ) - - private_key = raw_private_key.private_bytes( - encoding=serialization.Encoding.Raw, format=serialization.PrivateFormat.Raw, encryption_algorithm=serialization.NoEncryption() - ) - - return dict( - private=base64.b64encode(private_key).decode(), - public=base64.b64encode(public_key).decode() - ) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/SessionStateController.py b/myenv/lib/python3.12/site-packages/core/controllers/SessionStateController.py deleted file mode 100644 index 72284f1..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/SessionStateController.py +++ /dev/null @@ -1,30 +0,0 @@ -from core.models.session.SessionState import SessionState - - -class SessionStateController: - - @staticmethod - def get(id: int): - return SessionState.find_by_id(id) - - @staticmethod - def get_or_new(id: int): - - session_state = SessionStateController.get(id) - - if session_state is None: - return SessionState(id) - - return session_state - - @staticmethod - def exists(id: int): - return SessionState.exists(id) - - @staticmethod - def all(): - return SessionState.all() - - @staticmethod - def update_or_create(session_state): - session_state.save() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionController.py b/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionController.py deleted file mode 100644 index 79b75bc..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionController.py +++ /dev/null @@ -1,21 +0,0 @@ -from core.models.SubscriptionPlan import SubscriptionPlan -from core.models.session.SessionProfile import SessionProfile -from core.models.system.SystemProfile import SystemProfile -from core.observers.ConnectionObserver import ConnectionObserver -from core.services.WebServiceApiService import WebServiceApiService -from typing import Union - - -class SubscriptionController: - - @staticmethod - def get(billing_code: str, connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - return ConnectionController.with_preferred_connection(billing_code, task=WebServiceApiService.get_subscription, connection_observer=connection_observer) - - @staticmethod - def create(subscription_plan: SubscriptionPlan, profile: Union[SessionProfile, SystemProfile], connection_observer: ConnectionObserver = None): - - from core.controllers.ConnectionController import ConnectionController - return ConnectionController.with_preferred_connection(subscription_plan.id, profile.location.id, task=WebServiceApiService.post_subscription, connection_observer=connection_observer) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionPlanController.py b/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionPlanController.py deleted file mode 100644 index f7d9b93..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/SubscriptionPlanController.py +++ /dev/null @@ -1,24 +0,0 @@ -from core.models.SubscriptionPlan import SubscriptionPlan -from core.models.session.SessionConnection import SessionConnection -from core.models.system.SystemConnection import SystemConnection -from core.services.WebServiceApiService import WebServiceApiService -from typing import Union, Optional - - -class SubscriptionPlanController: - - @staticmethod - def get(connection: Union[SessionConnection, SystemConnection], duration: int): - return SubscriptionPlan.find(connection, duration) - - @staticmethod - def get_all(connection: Optional[Union[SessionConnection, SystemConnection]] = None): - return SubscriptionPlan.all(connection) - - @staticmethod - def _sync(proxies: Optional[dict] = None): - - subscription_plans = WebServiceApiService.get_subscription_plans(proxies) - - SubscriptionPlan.truncate() - SubscriptionPlan.save_many(subscription_plans) diff --git a/myenv/lib/python3.12/site-packages/core/controllers/SystemStateController.py b/myenv/lib/python3.12/site-packages/core/controllers/SystemStateController.py deleted file mode 100644 index 18bb459..0000000 --- a/myenv/lib/python3.12/site-packages/core/controllers/SystemStateController.py +++ /dev/null @@ -1,24 +0,0 @@ -from core.models.system.SystemState import SystemState - - -class SystemStateController: - - @staticmethod - def get(): - return SystemState.get() - - @staticmethod - def exists(): - return SystemState.exists() - - @staticmethod - def create(profile_id): - return SystemState(profile_id).save() - - @staticmethod - def update_or_create(system_state): - system_state.save() - - @staticmethod - def dissolve(): - return SystemState.dissolve() diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationController.cpython-312.pyc deleted file mode 100644 index 188316a..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationVersionController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationVersionController.cpython-312.pyc deleted file mode 100644 index 2bacce8..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ApplicationVersionController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientController.cpython-312.pyc deleted file mode 100644 index df068ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientVersionController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientVersionController.cpython-312.pyc deleted file mode 100644 index 0d56bcc..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ClientVersionController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConfigurationController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConfigurationController.cpython-312.pyc deleted file mode 100644 index 8974d9d..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConfigurationController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConnectionController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConnectionController.cpython-312.pyc deleted file mode 100644 index 76fc827..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ConnectionController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/InvoiceController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/InvoiceController.cpython-312.pyc deleted file mode 100644 index f7c356a..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/InvoiceController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/LocationController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/LocationController.cpython-312.pyc deleted file mode 100644 index 129d20c..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/LocationController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/OperatorController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/OperatorController.cpython-312.pyc deleted file mode 100644 index 02451a6..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/OperatorController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/PolicyController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/PolicyController.cpython-312.pyc deleted file mode 100644 index 7bf7f04..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/PolicyController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ProfileController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ProfileController.cpython-312.pyc deleted file mode 100644 index ae95f4f..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/ProfileController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SessionStateController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SessionStateController.cpython-312.pyc deleted file mode 100644 index 6d05f65..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SessionStateController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionController.cpython-312.pyc deleted file mode 100644 index 81387d1..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionPlanController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionPlanController.cpython-312.pyc deleted file mode 100644 index 4b28eaf..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SubscriptionPlanController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SystemStateController.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SystemStateController.cpython-312.pyc deleted file mode 100644 index 32b8e19..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/controllers/__pycache__/SystemStateController.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/BaseConnection.py b/myenv/lib/python3.12/site-packages/core/models/BaseConnection.py deleted file mode 100644 index c394b52..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/BaseConnection.py +++ /dev/null @@ -1,17 +0,0 @@ -from dataclasses import dataclass -from dataclasses_json import dataclass_json - - -@dataclass_json -@dataclass -class BaseConnection: - code: str - - def needs_wireguard_configuration(self): - return self.code == 'wireguard' - - def is_session_connection(self): - return type(self).__name__ == 'SessionConnection' - - def is_system_connection(self): - return type(self).__name__ == 'SystemConnection' diff --git a/myenv/lib/python3.12/site-packages/core/models/BasePolicy.py b/myenv/lib/python3.12/site-packages/core/models/BasePolicy.py deleted file mode 100644 index 71c9dd4..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/BasePolicy.py +++ /dev/null @@ -1,24 +0,0 @@ -from abc import ABC, abstractmethod - - -class BasePolicy(ABC): - - @abstractmethod - def preview(self): - pass - - @abstractmethod - def instate(self): - pass - - @abstractmethod - def revoke(self): - pass - - @abstractmethod - def is_suggestible(self): - pass - - @abstractmethod - def is_instated(self): - pass diff --git a/myenv/lib/python3.12/site-packages/core/models/BaseProfile.py b/myenv/lib/python3.12/site-packages/core/models/BaseProfile.py deleted file mode 100644 index 228ec6a..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/BaseProfile.py +++ /dev/null @@ -1,230 +0,0 @@ -from abc import ABC, abstractmethod -from core.Constants import Constants -from core.models.Location import Location -from core.models.Subscription import Subscription -from core.models.session.ApplicationVersion import ApplicationVersion -from dataclasses import dataclass, field, asdict -from dataclasses_json import config, Exclude, dataclass_json -from json import JSONDecodeError -from pathlib import Path -from typing import Optional, Self -import json -import os -import re -import shutil -import tempfile - - -@dataclass_json -@dataclass -class BaseProfile(ABC): - id: int = field( - metadata=config(exclude=Exclude.ALWAYS) - ) - name: str - subscription: Optional[Subscription] - location: Optional[Location] - - @abstractmethod - def get_wireguard_configuration_path(self): - pass - - @abstractmethod - def has_wireguard_configuration(self): - pass - - def get_config_path(self): - return BaseProfile.__get_config_path(self.id) - - def get_data_path(self): - return BaseProfile.__get_data_path(self.id) - - def has_subscription(self): - return self.subscription is not None - - def has_location(self): - return self.location is not None - - def is_session_profile(self): - return type(self).__name__ == 'SessionProfile' - - def is_system_profile(self): - return type(self).__name__ == 'SystemProfile' - - def save(self: Self): - - config_file_contents = f'{self.to_json(indent=4)}\n' - - os.makedirs(self.get_config_path(), exist_ok=True) - os.makedirs(self.get_data_path(), exist_ok=True) - - config_file_path = f'{self.get_config_path()}/config.json' - - with open(config_file_path, 'w') as config_file: - - config_file.write(config_file_contents) - config_file.close() - - def delete_data(self): - shutil.rmtree(self.get_data_path(), ignore_errors=True) - - def delete(self): - shutil.rmtree(self.get_config_path(), ignore_errors=True) - self.delete_data() - - def get_wireguard_configuration_metadata(self, key): - - configuration = self.get_wireguard_configuration() - - if configuration is not None: - - for line in configuration.splitlines(): - match = re.match(r'^# {} = (.*)$'.format(re.escape(key)), line) - - if match: - return re.sub(r'[^a-zA-Z0-9+=\-_ /]', '', match.group(1).strip()) - - return None - - def get_wireguard_public_keys(self): - - import configparser - - wireguard_public_keys = set() - - configuration = self.get_wireguard_configuration() - parsed_configuration = configparser.ConfigParser() - - if configuration is not None: - - parsed_configuration.read_string(configuration) - - for section in parsed_configuration.sections(): - - if parsed_configuration.has_option(section, 'PublicKey'): - wireguard_public_keys.add(parsed_configuration.get(section, 'PublicKey')) - - return tuple(wireguard_public_keys) - - def get_wireguard_configuration(self): - - try: - with open(self.get_wireguard_configuration_path(), 'r') as file: - return file.read() - - except (FileNotFoundError, PermissionError): - return None - - def address_security_incident(self): - - if self.has_wireguard_configuration(): - - wireguard_configuration_path = Path(self.get_wireguard_configuration_path()) - - incident_data_path = Path(Constants.HV_INCIDENT_DATA_HOME) - incident_data_path.mkdir(parents=True, exist_ok=True) - - incident_path = Path(tempfile.mkdtemp(dir=incident_data_path, prefix='')) - incident_wireguard_configuration_path = f'{incident_path}/{wireguard_configuration_path.name}' - - try: - - shutil.copy2(wireguard_configuration_path, incident_wireguard_configuration_path) - os.chmod(incident_wireguard_configuration_path, 0o644) - - except (FileNotFoundError, PermissionError): - - if incident_path.is_dir(): - - incident_path_contents = incident_path.iterdir() - - if not any(incident_path_contents): - incident_path.rmdir() - - def _get_dirty_keys(self: Self): - - reference = BaseProfile.find_by_id(self.id) - - if type(reference) != type(self): - return list(self.__dataclass_fields__.keys()) - - return list([key for key, value in asdict(self).items() if value != asdict(reference).get(key)]) - - @staticmethod - def find_by_id(id: int): - - try: - config_file_contents = open(f'{BaseProfile.__get_config_path(id)}/config.json', 'r').read() - except FileNotFoundError: - return None - - try: - profile = json.loads(config_file_contents) - except JSONDecodeError: - return None - - profile['id'] = id - - if profile['location'] is not None: - - location = Location.find(profile['location']['country_code'] or None, profile['location']['code'] or None) - - if location is not None: - - if profile['location'].get('time_zone') is not None: - location.time_zone = profile['location']['time_zone'] - - profile['location'] = location - - if 'application_version' in profile: - - if profile['application_version'] is not None: - application_version = ApplicationVersion.find(profile['application_version']['application_code'] or None, profile['application_version']['version_number'] or None) - - if application_version is not None: - profile['application_version'] = application_version - - from core.models.session.SessionProfile import SessionProfile - # noinspection PyUnresolvedReferences - profile = SessionProfile.from_dict(profile) - - else: - - from core.models.system.SystemProfile import SystemProfile - # noinspection PyUnresolvedReferences - profile = SystemProfile.from_dict(profile) - - return profile - - @staticmethod - def exists(id: int): - return re.match(r'^\d{1,2}$', str(id)) and os.path.isfile(f'{BaseProfile.__get_config_path(id)}/config.json') - - @staticmethod - def all(): - - profiles = {} - - for directory_entry in os.listdir(Constants.HV_PROFILE_CONFIG_HOME): - - try: - id = int(directory_entry) - except ValueError: - continue - - if BaseProfile.exists(id): - - profile = BaseProfile.find_by_id(id) - - if profile is not None: - profiles[id] = profile - - return dict(sorted(profiles.items())) - - @staticmethod - def __get_config_path(id: int): - return f'{Constants.HV_PROFILE_CONFIG_HOME}/{str(id)}' - - @staticmethod - def __get_data_path(id: int): - return f'{Constants.HV_PROFILE_DATA_HOME}/{str(id)}' diff --git a/myenv/lib/python3.12/site-packages/core/models/ClientVersion.py b/myenv/lib/python3.12/site-packages/core/models/ClientVersion.py deleted file mode 100644 index 7bb73db..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/ClientVersion.py +++ /dev/null @@ -1,81 +0,0 @@ -from core.models.Model import Model -from dataclasses import dataclass, field -from dataclasses_json import config, dataclass_json, Exclude -from datetime import datetime -from dateutil.parser import isoparse -from marshmallow import fields -from typing import Optional - -_table_name: str = 'client_versions' - -_table_definition: str = """ - 'id' int UNIQUE, - 'version_number' varchar UNIQUE, - 'released_at' varchar, - 'download_path' varchar UNIQUE -""" - - -@dataclass_json -@dataclass -class ClientVersion(Model): - version_number: str - released_at: Optional[datetime] = field( - default=None, - metadata=config( - encoder=datetime.isoformat, - decoder=datetime.fromisoformat, - mm_field=fields.DateTime(format='iso') - ) - ) - id: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - download_path: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM client_versions WHERE id = ? LIMIT 1', ClientVersion.factory, [id]) - - @staticmethod - def find(version_number: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM client_versions WHERE version_number = ? LIMIT 1', ClientVersion.factory, [version_number]) - - @staticmethod - def latest(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM client_versions ORDER BY released_at DESC LIMIT 1', ClientVersion.factory) - - @staticmethod - def all(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_all('SELECT * FROM client_versions', ClientVersion.factory) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(client_versions): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO client_versions VALUES(?, ?, ?, ?)', ClientVersion.tuple_factory, client_versions) - - @staticmethod - def factory(cursor, row): - - database_fields = [column[0] for column in cursor.description] - - client_version = ClientVersion(**{key: value for key, value in zip(database_fields, row)}) - client_version.released_at = isoparse(str(client_version.released_at)) - - return client_version - - @staticmethod - def tuple_factory(client_version): - return client_version.id, client_version.version_number, client_version.released_at, client_version.download_path diff --git a/myenv/lib/python3.12/site-packages/core/models/Configuration.py b/myenv/lib/python3.12/site-packages/core/models/Configuration.py deleted file mode 100644 index 681b776..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Configuration.py +++ /dev/null @@ -1,88 +0,0 @@ -from core.Constants import Constants -from dataclasses import dataclass, field -from dataclasses_json import dataclass_json, config -from datetime import datetime -from json import JSONDecodeError -from marshmallow import fields -from typing import Optional, Self -from zoneinfo import ZoneInfo -import dataclasses_json -import json -import os -import sys - - -@dataclass_json -@dataclass -class Configuration: - connection: Optional[str] = field( - default=None, - metadata=config( - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) - auto_sync_enabled: Optional[bool] = field( - default=None, - metadata=config( - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) - endpoint_verification_enabled: Optional[bool] = field( - default=False, - metadata=config( - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) - last_synced_at: Optional[datetime] = field( - default=None, - metadata=config( - encoder=lambda datetime_instance: Configuration._iso_format(datetime_instance), - decoder=lambda datetime_string: Configuration._from_iso_format(datetime_string), - mm_field=fields.DateTime(format='iso'), - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) - - def save(self: Self): - - config_file_contents = f'{self.to_json(indent=4)}\n' - os.makedirs(Constants.HV_CONFIG_HOME, exist_ok=True) - - config_file_path = f'{Constants.HV_CONFIG_HOME}/config.json' - - with open(config_file_path, 'w') as config_file: - - config_file.write(config_file_contents) - config_file.close() - - @staticmethod - def get(): - - try: - config_file_contents = open(f'{Constants.HV_CONFIG_HOME}/config.json', 'r').read() - except FileNotFoundError: - return None - - try: - configuration = json.loads(config_file_contents) - except JSONDecodeError: - sys.exit(1) - - # noinspection PyUnresolvedReferences - configuration = Configuration.from_dict(configuration) - - return configuration - - @staticmethod - def _iso_format(datetime_instance: datetime): - datetime_instance = datetime_instance.replace(tzinfo=ZoneInfo('UTC')) - return datetime.isoformat(datetime_instance).replace('+00:00', 'Z') - - @staticmethod - def _from_iso_format(datetime_string: str): - date_string = datetime_string.replace('Z', '+00:00') - return datetime.fromisoformat(date_string) diff --git a/myenv/lib/python3.12/site-packages/core/models/Event.py b/myenv/lib/python3.12/site-packages/core/models/Event.py deleted file mode 100644 index 5e254cf..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Event.py +++ /dev/null @@ -1,6 +0,0 @@ -class Event: - - def __init__(self, subject = None, meta = None): - - self.subject = subject - self.meta = meta or {} diff --git a/myenv/lib/python3.12/site-packages/core/models/Location.py b/myenv/lib/python3.12/site-packages/core/models/Location.py deleted file mode 100644 index 62c963b..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Location.py +++ /dev/null @@ -1,115 +0,0 @@ -from core.models.Model import Model -from core.models.Operator import Operator -from dataclasses import dataclass, field -from dataclasses_json import config, Exclude -from typing import Optional - -_table_name: str = 'locations' - -_table_definition: str = """ - 'id' int UNIQUE, - 'country_code' varchar, - 'country_name' varchar, - 'code' varchar, - 'name' varchar, - 'time_zone' varchar, - 'operator_id' int, - 'provider_name' varchar, - 'is_proxy_capable' bool, - 'is_wireguard_capable' bool, - UNIQUE(code, country_code) -""" - - -@dataclass -class Location(Model): - country_code: str - code: str - id: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - country_name: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - name: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - time_zone: Optional[str] = None - operator_id: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - provider_name: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - is_proxy_capable: Optional[bool] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - is_wireguard_capable: Optional[bool] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - operator: Optional[Operator] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - available: Optional[bool] = field( - default=False, - metadata=config(exclude=Exclude.ALWAYS) - ) - - def __post_init__(self): - self.operator = Operator.find_by_id(self.operator_id) - self.available = self.exists(self.country_code, self.code) - - if isinstance(self.is_proxy_capable, int): - self.is_proxy_capable = bool(self.is_proxy_capable) - - if isinstance(self.is_wireguard_capable, int): - self.is_wireguard_capable = bool(self.is_wireguard_capable) - - def is_available(self): - return self.exists(self.country_code, self.code) - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM locations WHERE id = ? LIMIT 1', Location.factory, [id]) - - @staticmethod - def find(country_code: str, code: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM locations WHERE country_code = ? AND code = ? LIMIT 1', Location.factory, [country_code, code]) - - @staticmethod - def exists(country_code: str, code: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_exists('SELECT * FROM locations WHERE country_code = ? AND code = ?', [country_code, code]) - - @staticmethod - def all(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_all('SELECT * FROM locations', Location.factory) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(locations): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO locations VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', Location.tuple_factory, locations) - - @staticmethod - def factory(cursor, row): - local_fields = [column[0] for column in cursor.description] - return Location(**{key: value for key, value in zip(local_fields, row)}) - - @staticmethod - def tuple_factory(location): - return location.id, location.country_code, location.country_name, location.code, location.name, location.time_zone, location.operator_id, location.provider_name, location.is_proxy_capable, location.is_wireguard_capable diff --git a/myenv/lib/python3.12/site-packages/core/models/Model.py b/myenv/lib/python3.12/site-packages/core/models/Model.py deleted file mode 100644 index c5b24db..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Model.py +++ /dev/null @@ -1,73 +0,0 @@ -from core.Constants import Constants -import sqlite3 - - -class Model: - - @staticmethod - def _create_table_if_not_exists(table_name: str, table_definition: str, drop_existing: bool = False): - - connection = sqlite3.connect(Constants.HV_STORAGE_DATABASE_PATH) - cursor = connection.cursor() - - if drop_existing: - cursor.execute(f'DROP TABLE IF EXISTS {table_name}') - - cursor.execute(f'CREATE TABLE IF NOT EXISTS {table_name} ({table_definition})') - - connection.commit() - connection.close() - - @staticmethod - def _query_one(query: str, row_factory, parameters=None): - - if parameters is None: - parameters = [] - - connection = sqlite3.connect(Constants.HV_STORAGE_DATABASE_PATH) - cursor = connection.cursor() - - cursor.row_factory = row_factory - - results = cursor.execute(query, parameters).fetchone() - connection.close() - - return results - - @staticmethod - def _query_exists(query: str, parameters): - - connection = sqlite3.connect(Constants.HV_STORAGE_DATABASE_PATH) - cursor = connection.cursor() - - response = cursor.execute(f'SELECT EXISTS({query})', parameters).fetchone() - connection.close() - - return response[0] == 1 - - @staticmethod - def _query_all(query: str, row_factory, parameters=None): - - if parameters is None: - parameters = [] - - connection = sqlite3.connect(Constants.HV_STORAGE_DATABASE_PATH) - cursor = connection.cursor() - - cursor.row_factory = row_factory - - results = cursor.execute(query, parameters).fetchall() - connection.close() - - return results - - @staticmethod - def _insert_many(query: str, tuple_factory, items): - - connection = sqlite3.connect(Constants.HV_STORAGE_DATABASE_PATH) - cursor = connection.cursor() - - cursor.executemany(query, map(tuple_factory, items)) - - connection.commit() - connection.close() diff --git a/myenv/lib/python3.12/site-packages/core/models/Operator.py b/myenv/lib/python3.12/site-packages/core/models/Operator.py deleted file mode 100644 index 8ad7856..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Operator.py +++ /dev/null @@ -1,56 +0,0 @@ -from core.models.Model import Model -from dataclasses import dataclass - -_table_name: str = 'operators' - -_table_definition: str = """ - 'id' int UNIQUE, - 'name' varchar, - 'public_key' varchar, - 'nostr_public_key' varchar, - 'nostr_profile_reference' varchar, - 'nostr_attestation_event_reference' varchar -""" - - -@dataclass -class Operator(Model): - id: int - name: str - public_key: str - nostr_public_key: str - nostr_profile_reference: str - nostr_attestation_event_reference: str - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM operators WHERE id = ? LIMIT 1', Operator.factory, [id]) - - @staticmethod - def exists(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_exists('SELECT * FROM operators WHERE id = ?', [id]) - - @staticmethod - def all(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_all('SELECT * FROM operators', Operator.factory) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(operators): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO operators VALUES(?, ?, ?, ?, ?, ?)', Operator.tuple_factory, operators) - - @staticmethod - def factory(cursor, row): - local_fields = [column[0] for column in cursor.description] - return Operator(**{key: value for key, value in zip(local_fields, row)}) - - @staticmethod - def tuple_factory(operator): - return operator.id, operator.name, operator.public_key, operator.nostr_public_key, operator.nostr_profile_reference, operator.nostr_attestation_event_reference diff --git a/myenv/lib/python3.12/site-packages/core/models/Subscription.py b/myenv/lib/python3.12/site-packages/core/models/Subscription.py deleted file mode 100644 index 5211690..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/Subscription.py +++ /dev/null @@ -1,40 +0,0 @@ -from dataclasses import dataclass, field -from dataclasses_json import config, dataclass_json -from datetime import datetime, timezone -from marshmallow import fields -from typing import Optional -import dataclasses_json - - -@dataclass_json -@dataclass -class Subscription: - billing_code: str - expires_at: Optional[datetime] = field( - default=None, - metadata=config( - encoder=lambda datetime_instance: Subscription._iso_format(datetime_instance), - decoder=lambda datetime_string: Subscription.from_iso_format(datetime_string), - mm_field=fields.DateTime(format='iso'), - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) - - def get_sanitized_billing_code(self): - return '-'.join(['****'] * 3 + [self.billing_code[-4:]]) - - def has_been_activated(self): - return self.expires_at is not None - - def is_active(self): - return self.has_been_activated() and self.expires_at > datetime.now(timezone.utc) - - @staticmethod - def from_iso_format(datetime_string: str): - date_string = datetime_string.replace('Z', '+00:00') - return datetime.fromisoformat(date_string) - - @staticmethod - def _iso_format(datetime_instance: datetime): - return datetime.isoformat(datetime_instance).replace('+00:00', 'Z') diff --git a/myenv/lib/python3.12/site-packages/core/models/SubscriptionPlan.py b/myenv/lib/python3.12/site-packages/core/models/SubscriptionPlan.py deleted file mode 100644 index 5a55c8e..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/SubscriptionPlan.py +++ /dev/null @@ -1,97 +0,0 @@ -from core.models.Model import Model -from core.models.session.SessionConnection import SessionConnection -from core.models.system.SystemConnection import SystemConnection -from dataclasses import dataclass -from typing import Union, Optional - -_table_name: str = 'subscription_plans' - -_table_definition: str = """ - 'id' int UNIQUE, - 'code' varchar UNIQUE, - 'wireguard_session_limit' int, - 'duration' int, - 'price' int, - 'features_proxy' bool, - 'features_wireguard' bool -""" - - -@dataclass -class SubscriptionPlan(Model): - id: int - code: str - wireguard_session_limit: int - duration: int - price: int - features_proxy: bool - features_wireguard: bool - - def __post_init__(self): - - if isinstance(self.features_proxy, int): - self.features_proxy = bool(self.features_proxy) - - if isinstance(self.features_wireguard, int): - self.features_wireguard = bool(self.features_wireguard) - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM subscription_plans WHERE id = ? LIMIT 1', SubscriptionPlan.factory, [id]) - - @staticmethod - def find(connection: Union[SessionConnection, SystemConnection], duration: int): - - features_proxy = False - features_wireguard = False - - if connection.is_session_connection(): - if connection.masked: - features_proxy = True - - if connection.code == 'wireguard': - features_wireguard = True - - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM subscription_plans WHERE features_proxy = ? AND features_wireguard = ? AND duration = ? LIMIT 1', SubscriptionPlan.factory, [features_proxy, features_wireguard, duration]) - - @staticmethod - def all(connection: Optional[Union[SessionConnection, SystemConnection]] = None): - - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - - if connection is None: - return Model._query_all('SELECT * FROM subscription_plans', SubscriptionPlan.factory) - - else: - - features_proxy = False - features_wireguard = False - - if connection.is_session_connection(): - if connection.masked: - features_proxy = True - - if connection.code == 'wireguard': - features_wireguard = True - - return Model._query_all('SELECT * FROM subscription_plans WHERE features_proxy = ? AND features_wireguard = ?', SubscriptionPlan.factory, [features_proxy, features_wireguard]) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(subscription_plans): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO subscription_plans VALUES(?, ?, ?, ?, ?, ?, ?)', SubscriptionPlan.tuple_factory, subscription_plans) - - @staticmethod - def factory(cursor, row): - local_fields = [column[0] for column in cursor.description] - return SubscriptionPlan(**{key: value for key, value in zip(local_fields, row)}) - - @staticmethod - def tuple_factory(subscription_plan): - return subscription_plan.id, subscription_plan.code, subscription_plan.wireguard_session_limit, subscription_plan.duration, subscription_plan.price, subscription_plan.features_proxy, subscription_plan.features_wireguard diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseConnection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseConnection.cpython-312.pyc deleted file mode 100644 index 3bed5c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseConnection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BasePolicy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/BasePolicy.cpython-312.pyc deleted file mode 100644 index 7748490..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BasePolicy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseProfile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseProfile.cpython-312.pyc deleted file mode 100644 index 87fbea3..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/BaseProfile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/ClientVersion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/ClientVersion.cpython-312.pyc deleted file mode 100644 index 6df297f..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/ClientVersion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Configuration.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Configuration.cpython-312.pyc deleted file mode 100644 index 6acaff1..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Configuration.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Event.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Event.cpython-312.pyc deleted file mode 100644 index 521cda5..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Event.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Location.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Location.cpython-312.pyc deleted file mode 100644 index 757087f..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Location.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Model.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Model.cpython-312.pyc deleted file mode 100644 index 45f79e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Model.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Operator.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Operator.cpython-312.pyc deleted file mode 100644 index 6598f4e..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Operator.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Subscription.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/Subscription.cpython-312.pyc deleted file mode 100644 index a7c0718..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/Subscription.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/__pycache__/SubscriptionPlan.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/__pycache__/SubscriptionPlan.cpython-312.pyc deleted file mode 100644 index 1de4b9d..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/__pycache__/SubscriptionPlan.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/invoice/Invoice.py b/myenv/lib/python3.12/site-packages/core/models/invoice/Invoice.py deleted file mode 100644 index d15cf21..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/invoice/Invoice.py +++ /dev/null @@ -1,23 +0,0 @@ -from core.models.invoice.PaymentMethod import PaymentMethod -from dataclasses import dataclass -from datetime import datetime - - -@dataclass -class Invoice: - billing_code: str - status: str - expires_at: datetime - payment_methods: tuple[PaymentMethod] - - def is_new(self): - return self.status == 'new' - - def is_rejected(self): - return self.status == 'invalid' or self.status == 'expired' - - def is_processing(self): - return self.status == 'processing' - - def is_settled(self): - return self.status == 'settled' diff --git a/myenv/lib/python3.12/site-packages/core/models/invoice/PaymentMethod.py b/myenv/lib/python3.12/site-packages/core/models/invoice/PaymentMethod.py deleted file mode 100644 index ebf6b5c..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/invoice/PaymentMethod.py +++ /dev/null @@ -1,12 +0,0 @@ -from dataclasses import dataclass - - -@dataclass -class PaymentMethod: - code: str - name: str - address: str - payment_link: str - rate: float - amount: float - due: float diff --git a/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/Invoice.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/Invoice.cpython-312.pyc deleted file mode 100644 index fa86f2c..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/Invoice.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/PaymentMethod.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/PaymentMethod.cpython-312.pyc deleted file mode 100644 index b8ff33e..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/invoice/__pycache__/PaymentMethod.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/policy/CapabilityPolicy.py b/myenv/lib/python3.12/site-packages/core/models/policy/CapabilityPolicy.py deleted file mode 100644 index 5040085..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/policy/CapabilityPolicy.py +++ /dev/null @@ -1,128 +0,0 @@ -from core.Constants import Constants -from core.Errors import CommandNotFoundError, PolicyInstatementError, PolicyRevocationError -from core.models.BasePolicy import BasePolicy -from packaging import version -from packaging.version import InvalidVersion -from subprocess import CalledProcessError -import os -import re -import shutil -import subprocess - - -class CapabilityPolicy(BasePolicy): - - def preview(self): - return self.__generate() - - def instate(self): - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - if shutil.which('sh') is None: - raise CommandNotFoundError('sh') - - if shutil.which('service') is None: - raise CommandNotFoundError('service') - - if not self.__is_compatible(): - raise PolicyInstatementError('The capability policy is not compatible.') - - capability_policy = self.__generate() - - completed_successfully = False - failed_attempt_count = 0 - - while not completed_successfully and failed_attempt_count < 3: - - process = subprocess.Popen(( - 'pkexec', 'sh', '-c', f'install /dev/stdin {Constants.HV_CAPABILITY_POLICY_PATH} -o root -m 644 && service apparmor reload' - ), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) - - process.communicate(f'{capability_policy}\n') - completed_successfully = (process.returncode == 0) - - if not completed_successfully: - failed_attempt_count += 1 - - if not completed_successfully: - raise PolicyInstatementError('The capability policy could not be instated.') - - def revoke(self): - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - if shutil.which('sh') is None: - raise CommandNotFoundError('sh') - - if shutil.which('apparmor_parser') is None: - raise CommandNotFoundError('apparmor_parser') - - process = subprocess.Popen(( - 'pkexec', 'sh', '-c', f'apparmor_parser -R {Constants.HV_CAPABILITY_POLICY_PATH} && rm {Constants.HV_CAPABILITY_POLICY_PATH}' - )) - - completed_successfully = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if not completed_successfully: - raise PolicyRevocationError('The capability policy could not be revoked.') - - def is_suggestible(self): - - try: - - process = subprocess.Popen(('bwrap', '--bind', '/', '/', 'true'), stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) - process.wait() - - if process.returncode != 0: - return self.__is_compatible() and b'setting up uid map' in process.stderr.read() - - except FileNotFoundError: - pass - - return False - - def is_instated(self): - return os.path.exists(Constants.HV_CAPABILITY_POLICY_PATH) - - @staticmethod - def __generate(): - - return '\n'.join(( - 'abi ,', - 'include ', - '', - 'profile hv-bwrap /usr/bin/bwrap flags=(unconfined) {', - ' userns,', - '', - ' # Site-specific additions and overrides. See local/README for details.', - ' include if exists ', - '}' - )) - - @staticmethod - def __is_compatible(): - - try: - process_output = subprocess.check_output(('apparmor_parser', '-V'), text=True) - except (CalledProcessError, FileNotFoundError): - return False - - if process_output.splitlines(): - apparmor_version_details = process_output.splitlines()[0].strip() - else: - return False - - apparmor_version_number = (m := re.search(r'(\d[0-9.]+?)(?=[p~+-]|$)', apparmor_version_details)) and m.group(1) - - if not apparmor_version_number: - return False - - try: - apparmor_version = version.parse(apparmor_version_number) - except InvalidVersion: - return False - - return apparmor_version >= version.parse('4.0.0') and os.path.isdir('/etc/apparmor.d') diff --git a/myenv/lib/python3.12/site-packages/core/models/policy/PrivilegePolicy.py b/myenv/lib/python3.12/site-packages/core/models/policy/PrivilegePolicy.py deleted file mode 100644 index 84a2283..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/policy/PrivilegePolicy.py +++ /dev/null @@ -1,59 +0,0 @@ -from core.Constants import Constants -from core.Errors import CommandNotFoundError, PolicyInstatementError, PolicyRevocationError, PolicyAssignmentError -from core.models.BasePolicy import BasePolicy -import os -import pwd -import shutil -import subprocess - - -class PrivilegePolicy(BasePolicy): - - def preview(self): - - username = self.__determine_username() - return self.__generate(username) - - def instate(self): - pass - - def revoke(self): - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - process = subprocess.Popen(('pkexec', 'rm', Constants.HV_PRIVILEGE_POLICY_PATH)) - completed_successfully = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if not completed_successfully: - raise PolicyRevocationError('The privilege policy could not be revoked.') - - def is_suggestible(self): - return self.__is_compatible() - - def is_instated(self): - return os.path.exists(Constants.HV_PRIVILEGE_POLICY_PATH) - - @staticmethod - def __determine_username(): - - try: - password_database_entry = pwd.getpwuid(os.geteuid()) - except (OSError, KeyError): - raise PolicyAssignmentError('The privilege policy could not be assigned to the current user.') - - if password_database_entry.pw_uid == 0: - raise PolicyAssignmentError('The privilege policy could not be assigned to the current user.') - - return password_database_entry.pw_name - - @staticmethod - def __generate(username: str): - - return '\n'.join(( - f'{username} ALL=(root) NOPASSWD: /usr/bin/wg-quick ^up {Constants.HV_SYSTEM_PROFILE_CONFIG_PATH}/[0-9]+/wg.conf$', - )) - - @staticmethod - def __is_compatible(): - return False diff --git a/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/CapabilityPolicy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/CapabilityPolicy.cpython-312.pyc deleted file mode 100644 index 9c533cd..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/CapabilityPolicy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/PrivilegePolicy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/PrivilegePolicy.cpython-312.pyc deleted file mode 100644 index dc142e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/policy/__pycache__/PrivilegePolicy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/Application.py b/myenv/lib/python3.12/site-packages/core/models/session/Application.py deleted file mode 100644 index c064875..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/Application.py +++ /dev/null @@ -1,63 +0,0 @@ -from core.models.Model import Model -from dataclasses import dataclass, field -from dataclasses_json import config, Exclude -from typing import Optional - -_table_name: str = 'applications' - -_table_definition: str = """ - 'id' int UNIQUE, - 'code' varchar UNIQUE, - 'name' varchar UNIQUE -""" - - -@dataclass -class Application(Model): - code: str - name: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - id: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM applications WHERE id = ? LIMIT 1', Application.factory, [id]) - - @staticmethod - def find(code: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM applications WHERE code = ? LIMIT 1', Application.factory, [code]) - - @staticmethod - def all(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_all('SELECT * FROM applications', Application.factory) - - @staticmethod - def exists(code: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_exists('SELECT * FROM applications WHERE code = ?', [code]) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(applications): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO applications VALUES(?, ?, ?)', Application.tuple_factory, applications) - - @staticmethod - def factory(cursor, row): - database_fields = [column[0] for column in cursor.description] - return Application(**{key: value for key, value in zip(database_fields, row)}) - - @staticmethod - def tuple_factory(application): - return application.id, application.code, application.name diff --git a/myenv/lib/python3.12/site-packages/core/models/session/ApplicationVersion.py b/myenv/lib/python3.12/site-packages/core/models/session/ApplicationVersion.py deleted file mode 100644 index 39afe27..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/ApplicationVersion.py +++ /dev/null @@ -1,134 +0,0 @@ -from core.Constants import Constants -from core.models.Model import Model -from core.models.session.Application import Application -from dataclasses import dataclass, field -from dataclasses_json import config, Exclude -from datetime import datetime -from dateutil.parser import isoparse -from marshmallow import fields -from typing import Optional -import os - -_table_name: str = 'application_versions' - -_table_definition: str = """ - 'id' int UNIQUE, - 'application_code' varchar, - 'version_number' varchar, - 'format_revision' int, - 'download_path' varchar UNIQUE, - 'released_at' varchar, - 'file_hash' varchar, - UNIQUE(application_code, version_number) -""" - - -@dataclass -class ApplicationVersion(Model): - application_code: str - version_number: str - format_revision: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - id: Optional[int] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - download_path: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - released_at: Optional[datetime] = field( - default=None, - metadata=config( - encoder=datetime.isoformat, - decoder=datetime.fromisoformat, - mm_field=fields.DateTime(format='iso'), - exclude=Exclude.ALWAYS - ) - ) - file_hash: Optional[str] = field( - default=None, - metadata=config(exclude=Exclude.ALWAYS) - ) - installed: Optional[bool] = field( - default=False, - metadata=config(exclude=Exclude.ALWAYS) - ) - supported: Optional[bool] = field( - default=False, - metadata=config(exclude=Exclude.ALWAYS) - ) - - def __post_init__(self): - self.installed = self.is_installed() - self.supported = self.is_supported() - - def get_installation_path(self): - return f'{Constants.HV_APPLICATION_DATA_HOME}/{self.application_code}/{self.version_number}' - - def is_installed(self): - return os.path.isdir(self.get_installation_path()) and len(os.listdir(self.get_installation_path())) > 0 - - def is_supported(self): - return self.exists(self.application_code, self.version_number) and self.format_revision == 2 - - def get_installed_file_hash(self): - - try: - return open(f'{self.get_installation_path()}/.sha3-512').readline().strip() - except FileNotFoundError: - return None - - def is_fresh(self): - return self.is_installed() and (not self.is_supported() or self.file_hash == self.get_installed_file_hash()) - - @staticmethod - def find_by_id(id: int): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM application_versions WHERE id = ? LIMIT 1', ApplicationVersion.factory, [id]) - - @staticmethod - def find(application_code: str, version_number: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_one('SELECT * FROM application_versions WHERE application_code = ? AND version_number = ? LIMIT 1', ApplicationVersion.factory, [application_code, version_number]) - - @staticmethod - def all(application: Optional[Application] = None): - - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - - if application is None: - return Model._query_all('SELECT * FROM application_versions', ApplicationVersion.factory) - - else: - return Model._query_all('SELECT * FROM application_versions WHERE application_code = ?', ApplicationVersion.factory, [application.code]) - - @staticmethod - def exists(application_code: str, version_number: str): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - return Model._query_exists('SELECT * FROM application_versions WHERE application_code = ? AND version_number = ?', [application_code, version_number]) - - @staticmethod - def truncate(): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True) - - @staticmethod - def save_many(application_versions): - Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition) - Model._insert_many('INSERT INTO application_versions VALUES(?, ?, ?, ?, ?, ?, ?)', ApplicationVersion.tuple_factory, application_versions) - - @staticmethod - def factory(cursor, row): - - database_fields = [column[0] for column in cursor.description] - - application_version = ApplicationVersion(**{key: value for key, value in zip(database_fields, row)}) - application_version.released_at = isoparse(str(application_version.released_at)) - - return application_version - - @staticmethod - def tuple_factory(application_version): - return application_version.id, application_version.application_code, application_version.version_number, application_version.format_revision, application_version.download_path, application_version.released_at, application_version.file_hash diff --git a/myenv/lib/python3.12/site-packages/core/models/session/NetworkPortNumbers.py b/myenv/lib/python3.12/site-packages/core/models/session/NetworkPortNumbers.py deleted file mode 100644 index 26f91f7..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/NetworkPortNumbers.py +++ /dev/null @@ -1,16 +0,0 @@ -from dataclasses import dataclass, field - - -@dataclass -class NetworkPortNumbers: - proxy: list[int] = field(default_factory=list) - wireguard: list[int] = field(default_factory=list) - tor: list[int] = field(default_factory=list) - - @property - def all(self): - return self.proxy + self.wireguard + self.tor - - @property - def isolated(self): - return self.proxy + self.wireguard diff --git a/myenv/lib/python3.12/site-packages/core/models/session/ProxyConfiguration.py b/myenv/lib/python3.12/site-packages/core/models/session/ProxyConfiguration.py deleted file mode 100644 index ccb1700..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/ProxyConfiguration.py +++ /dev/null @@ -1,20 +0,0 @@ -from dataclasses import dataclass, field -from dataclasses_json import dataclass_json, config -from typing import Optional -import dataclasses_json - - -@dataclass_json -@dataclass -class ProxyConfiguration: - ip_address: str - port_number: int - username: str - password: str - time_zone: Optional[str] = field( - default=None, - metadata=config( - undefined=dataclasses_json.Undefined.EXCLUDE, - exclude=lambda value: value is None - ) - ) diff --git a/myenv/lib/python3.12/site-packages/core/models/session/SessionConnection.py b/myenv/lib/python3.12/site-packages/core/models/session/SessionConnection.py deleted file mode 100644 index 026a9d2..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/SessionConnection.py +++ /dev/null @@ -1,18 +0,0 @@ -from core.models.BaseConnection import BaseConnection -from dataclasses import dataclass - - -@dataclass -class SessionConnection(BaseConnection): - masked: bool = False - - def __post_init__(self): - - if self.code not in ('system', 'tor', 'wireguard'): - raise ValueError('Invalid connection code.') - - def is_unprotected(self): - return self.code == 'system' and self.masked is False - - def needs_proxy_configuration(self): - return self.masked is True diff --git a/myenv/lib/python3.12/site-packages/core/models/session/SessionProfile.py b/myenv/lib/python3.12/site-packages/core/models/session/SessionProfile.py deleted file mode 100644 index 03fd0bc..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/SessionProfile.py +++ /dev/null @@ -1,123 +0,0 @@ -from core.Constants import Constants -from core.Errors import UnknownTimeZoneError -from core.models.BaseProfile import BaseProfile -from core.models.session.ApplicationVersion import ApplicationVersion -from core.models.session.ProxyConfiguration import ProxyConfiguration -from core.models.session.SessionConnection import SessionConnection -from dataclasses import dataclass -from json import JSONDecodeError -from pathlib import Path -from typing import Optional -import json -import os -import shutil - - -@dataclass -class SessionProfile(BaseProfile): - resolution: str - application_version: Optional[ApplicationVersion] - connection: Optional[SessionConnection] - - def has_connection(self): - return self.connection is not None - - def save(self): - - if 'application_version' in self._get_dirty_keys(): - - persistent_state_path = f'{self.get_data_path()}/persistent-state' - - if os.path.isdir(persistent_state_path): - shutil.rmtree(persistent_state_path, ignore_errors=True) - - if 'location' in self._get_dirty_keys(): - - self.__delete_proxy_configuration() - self.__delete_wireguard_configuration() - - super().save() - - def attach_proxy_configuration(self, proxy_configuration): - - proxy_configuration_file_contents = f'{proxy_configuration.to_json(indent=4)}\n' - os.makedirs(Constants.HV_CONFIG_HOME, exist_ok=True) - - proxy_configuration_file_path = self.get_proxy_configuration_path() - - with open(proxy_configuration_file_path, 'w') as proxy_configuration_file: - - proxy_configuration_file.write(proxy_configuration_file_contents) - proxy_configuration_file.close() - - def attach_wireguard_configuration(self, wireguard_configuration): - - wireguard_configuration_file_path = self.get_wireguard_configuration_path() - - with open(wireguard_configuration_file_path, 'w') as wireguard_configuration_file: - - wireguard_configuration_file.write(wireguard_configuration) - wireguard_configuration_file.close() - - def get_proxy_configuration_path(self): - return f'{self.get_config_path()}/proxy.json' - - def get_wireguard_configuration_path(self): - return f'{self.get_config_path()}/wg.conf' - - def get_proxy_configuration(self): - - try: - config_file_contents = open(self.get_proxy_configuration_path(), 'r').read() - except FileNotFoundError: - return None - - try: - proxy_configuration = json.loads(config_file_contents) - except JSONDecodeError: - return None - - proxy_configuration = ProxyConfiguration.from_dict(proxy_configuration) - - return proxy_configuration - - def has_proxy_configuration(self): - return os.path.isfile(f'{self.get_config_path()}/proxy.json') - - def has_wireguard_configuration(self): - return os.path.isfile(f'{self.get_config_path()}/wg.conf') - - def address_security_incident(self): - - super().address_security_incident() - self.__delete_wireguard_configuration() - - def determine_timezone(self): - - time_zone = None - - if self.has_connection(): - - if self.connection.needs_proxy_configuration(): - - if self.has_proxy_configuration(): - time_zone = self.get_proxy_configuration().time_zone - - elif self.connection.needs_wireguard_configuration(): - - if self.has_wireguard_configuration(): - time_zone = self.get_wireguard_configuration_metadata('TZ') - - if time_zone is None and self.has_location(): - time_zone = self.location.time_zone - - if time_zone is None: - raise UnknownTimeZoneError('The preferred time zone could not be determined.') - - return time_zone - - def __delete_proxy_configuration(self): - Path(self.get_proxy_configuration_path()).unlink(missing_ok=True) - - def __delete_wireguard_configuration(self): - Path(self.get_wireguard_configuration_path()).unlink(missing_ok=True) diff --git a/myenv/lib/python3.12/site-packages/core/models/session/SessionState.py b/myenv/lib/python3.12/site-packages/core/models/session/SessionState.py deleted file mode 100644 index eda4552..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/session/SessionState.py +++ /dev/null @@ -1,138 +0,0 @@ -from core.Constants import Constants -from core.models.session.NetworkPortNumbers import NetworkPortNumbers -from dataclasses import dataclass, field -from dataclasses_json import config, Exclude, dataclass_json -from json import JSONDecodeError -from pathlib import Path -from typing import Self -import json -import os -import psutil -import re -import shutil - - -@dataclass_json -@dataclass -class SessionState: - id: int = field( - metadata=config(exclude=Exclude.ALWAYS) - ) - network_port_numbers: NetworkPortNumbers = field(default_factory=NetworkPortNumbers) - process_ids: list[int] = field(default_factory=list) - - def get_state_path(self): - return SessionState.__get_state_path(self.id) - - def save(self: Self): - - session_state_file_contents = f'{self.to_json(indent=4)}\n' - os.makedirs(self.get_state_path(), exist_ok=True, mode=0o700) - - session_state_file_path = f'{self.get_state_path()}/state.json' - Path(session_state_file_path).touch(exist_ok=True, mode=0o600) - - with open(session_state_file_path, 'w') as session_state_file: - - session_state_file.write(session_state_file_contents) - session_state_file.close() - - @staticmethod - def find_by_id(id: int): - - state_path = SessionState.__get_state_path(id) - - try: - session_state_file_contents = Path(f'{state_path}/state.json').read_text() - except FileNotFoundError: - return None - - try: - - session_state = json.loads(session_state_file_contents) - session_state['id'] = id - - # noinspection PyUnresolvedReferences - return SessionState.from_dict(session_state) - - except (JSONDecodeError, AttributeError): - - shutil.rmtree(Path(state_path), ignore_errors=True) - return None - - @staticmethod - def exists(id: int): - return os.path.isdir(SessionState.__get_state_path(id)) and re.match(r'^\d+$', str(id)) - - @staticmethod - def all(): - - try: - directory_entries = os.listdir(Constants.HV_SESSION_STATE_HOME) - except FileNotFoundError: - return [] - - session_states = [] - - for directory_entry in directory_entries: - - try: - id = int(directory_entry) - except ValueError: - continue - - if SessionState.exists(id): - - session_state = SessionState.find_by_id(id) - - if session_state is not None: - session_states.append(session_state) - - session_states.sort(key=lambda key: key.id) - - return session_states - - @staticmethod - def dissolve(id: int): - - session_state = SessionState.find_by_id(id) - - if session_state is not None: - - session_state_path = session_state.get_state_path() - - SessionState.__kill_associated_processes(session_state) - shutil.rmtree(session_state_path, ignore_errors=True) - - @staticmethod - def __kill_associated_processes(session_state: 'SessionState'): - - associated_process_ids = list(session_state.process_ids) - network_connections = psutil.net_connections() - - for network_port_number in session_state.network_port_numbers.isolated: - - for network_connection in network_connections: - - if network_connection.laddr != tuple() and network_connection.laddr.port == network_port_number: - - if network_connection.pid is not None: - associated_process_ids.append(network_connection.pid) - - if network_connection.raddr != tuple() and network_connection.raddr.port == network_port_number: - - if network_connection.pid is not None: - associated_process_ids.append(network_connection.pid) - - for process in psutil.process_iter(): - - if process.pid in associated_process_ids and process.is_running(): - - for child_process in process.children(True): - child_process.kill() - - process.kill() - - @staticmethod - def __get_state_path(id: int): - return f'{Constants.HV_SESSION_STATE_HOME}/{str(id)}' diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/Application.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/Application.cpython-312.pyc deleted file mode 100644 index f6e98ae..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/Application.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ApplicationVersion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ApplicationVersion.cpython-312.pyc deleted file mode 100644 index 36768df..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ApplicationVersion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/NetworkPortNumbers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/NetworkPortNumbers.cpython-312.pyc deleted file mode 100644 index b019b9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/NetworkPortNumbers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ProxyConfiguration.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ProxyConfiguration.cpython-312.pyc deleted file mode 100644 index eae351c..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/ProxyConfiguration.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionConnection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionConnection.cpython-312.pyc deleted file mode 100644 index 8661df1..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionConnection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionProfile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionProfile.cpython-312.pyc deleted file mode 100644 index 29e9c28..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionProfile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionState.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionState.cpython-312.pyc deleted file mode 100644 index e27717a..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/session/__pycache__/SessionState.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/system/SystemConnection.py b/myenv/lib/python3.12/site-packages/core/models/system/SystemConnection.py deleted file mode 100644 index 8122b76..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/system/SystemConnection.py +++ /dev/null @@ -1,15 +0,0 @@ -from core.models.BaseConnection import BaseConnection -from dataclasses import dataclass - - -@dataclass -class SystemConnection (BaseConnection): - - def __post_init__(self): - - if self.code != 'wireguard': - raise ValueError('Invalid connection code.') - - @staticmethod - def needs_proxy_configuration(): - return False diff --git a/myenv/lib/python3.12/site-packages/core/models/system/SystemProfile.py b/myenv/lib/python3.12/site-packages/core/models/system/SystemProfile.py deleted file mode 100644 index 28fe0e9..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/system/SystemProfile.py +++ /dev/null @@ -1,96 +0,0 @@ -from core.Constants import Constants -from core.Errors import ProfileDeletionError, ProfileModificationError, CommandNotFoundError -from core.models.BaseProfile import BaseProfile -from core.models.system.SystemConnection import SystemConnection -from dataclasses import dataclass -from typing import Optional -import os -import shutil -import subprocess - - -@dataclass -class SystemProfile(BaseProfile): - connection: Optional[SystemConnection] - - def get_system_config_path(self): - return self.__get_system_config_path(self.id) - - def save(self): - - if 'location' in self._get_dirty_keys(): - self.__delete_wireguard_configuration() - - super().save() - - def attach_wireguard_configuration(self, wireguard_configuration): - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - wireguard_configuration_file_backup_path = f'{self.get_config_path()}/wg.conf.bak' - - with open(wireguard_configuration_file_backup_path, 'w') as wireguard_configuration_file: - - wireguard_configuration_file.write(wireguard_configuration) - wireguard_configuration_file.close() - - wireguard_configuration_is_attached = False - failed_attempt_count = 0 - - while not wireguard_configuration_is_attached and failed_attempt_count < 3: - - process = subprocess.Popen(('pkexec', 'install', '-D', wireguard_configuration_file_backup_path, self.get_wireguard_configuration_path(), '-o', 'root', '-m', '744')) - wireguard_configuration_is_attached = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if not wireguard_configuration_is_attached: - failed_attempt_count += 1 - - if not wireguard_configuration_is_attached: - raise ProfileModificationError('The WireGuard configuration could not be attached.') - - def get_wireguard_configuration_path(self): - return f'{self.get_system_config_path()}/wg.conf' - - def has_wireguard_configuration(self): - return os.path.isfile(f'{self.get_system_config_path()}/wg.conf') - - def address_security_incident(self): - - super().address_security_incident() - self.__delete_wireguard_configuration() - - def delete(self): - - try: - self.__delete_wireguard_configuration() - except ProfileModificationError: - raise ProfileDeletionError('The WireGuard configuration could not be deleted.') - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - process = subprocess.Popen(('pkexec', 'rm', '-d', self.get_system_config_path())) - completed_successfully = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if not completed_successfully: - raise ProfileDeletionError('The profile could not be deleted.') - - super().delete() - - def __delete_wireguard_configuration(self): - - if self.has_wireguard_configuration(): - - if shutil.which('pkexec') is None: - raise CommandNotFoundError('pkexec') - - process = subprocess.Popen(('pkexec', 'rm', '-d', self.get_wireguard_configuration_path())) - completed_successfully = not bool(os.waitpid(process.pid, 0)[1] >> 8) - - if not completed_successfully: - raise ProfileModificationError('The WireGuard configuration could not be deleted.') - - @staticmethod - def __get_system_config_path(id: int): - return f'{Constants.HV_SYSTEM_PROFILE_CONFIG_PATH}/{str(id)}' diff --git a/myenv/lib/python3.12/site-packages/core/models/system/SystemState.py b/myenv/lib/python3.12/site-packages/core/models/system/SystemState.py deleted file mode 100644 index 99904b9..0000000 --- a/myenv/lib/python3.12/site-packages/core/models/system/SystemState.py +++ /dev/null @@ -1,59 +0,0 @@ -from core.Constants import Constants -from dataclasses import dataclass -from dataclasses_json import dataclass_json -from json import JSONDecodeError -from pathlib import Path -from typing import Self -import json -import os -import pathlib - -@dataclass_json -@dataclass -class SystemState: - profile_id: int - - def save(self: Self): - - system_state_file_contents = f'{self.to_json(indent=4)}\n' - os.makedirs(SystemState.__get_state_path(), exist_ok=True, mode=0o700) - - system_state_file_path = f'{SystemState.__get_state_path()}/system.json' - Path(system_state_file_path).touch(exist_ok=True, mode=0o600) - - with open(system_state_file_path, 'w') as system_state_file: - - system_state_file.write(system_state_file_contents) - system_state_file.close() - - @staticmethod - def get(): - - try: - - system_state_file_contents = open(f'{SystemState.__get_state_path()}/system.json', 'r').read() - system_state_dict = json.loads(system_state_file_contents) - - # noinspection PyUnresolvedReferences - return SystemState.from_dict(system_state_dict) - - except (FileNotFoundError, JSONDecodeError, KeyError): - return None - - @staticmethod - def exists(): - return os.path.isfile(f'{SystemState.__get_state_path()}/system.json') - - @staticmethod - def dissolve(): - - system_state = SystemState.get() - - if system_state is not None: - - system_state_path = f'{SystemState.__get_state_path()}/system.json' - pathlib.Path.unlink(Path(system_state_path), missing_ok=True) - - @staticmethod - def __get_state_path(): - return Constants.HV_STATE_HOME diff --git a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemConnection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemConnection.cpython-312.pyc deleted file mode 100644 index b4c0788..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemConnection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemProfile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemProfile.cpython-312.pyc deleted file mode 100644 index 43fc76c..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemProfile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemState.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemState.cpython-312.pyc deleted file mode 100644 index 0e1cc8f..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/models/system/__pycache__/SystemState.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/ApplicationVersionObserver.py b/myenv/lib/python3.12/site-packages/core/observers/ApplicationVersionObserver.py deleted file mode 100644 index ea20100..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/ApplicationVersionObserver.py +++ /dev/null @@ -1,10 +0,0 @@ -from core.observers.BaseObserver import BaseObserver - - -class ApplicationVersionObserver(BaseObserver): - - def __init__(self): - - self.on_downloading = [] - self.on_download_progressing = [] - self.on_downloaded = [] diff --git a/myenv/lib/python3.12/site-packages/core/observers/BaseObserver.py b/myenv/lib/python3.12/site-packages/core/observers/BaseObserver.py deleted file mode 100644 index 7068c22..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/BaseObserver.py +++ /dev/null @@ -1,25 +0,0 @@ -from core.models.Event import Event - - -class BaseObserver: - - def subscribe(self, topic, callback): - - callbacks = getattr(self, f'on_{topic}', None) - - if callbacks is None: - return - - callbacks.append(callback) - - def notify(self, topic, subject = None, meta = None): - - callbacks = getattr(self, f'on_{topic}', None) - - if callbacks is None: - return - - event = Event(subject, meta) - - for callback in callbacks: - callback(event) diff --git a/myenv/lib/python3.12/site-packages/core/observers/ClientObserver.py b/myenv/lib/python3.12/site-packages/core/observers/ClientObserver.py deleted file mode 100644 index 5b06c83..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/ClientObserver.py +++ /dev/null @@ -1,12 +0,0 @@ -from core.observers.BaseObserver import BaseObserver - - -class ClientObserver(BaseObserver): - - def __init__(self): - - self.on_synchronizing = [] - self.on_synchronized = [] - self.on_updating = [] - self.on_update_progressing = [] - self.on_updated = [] diff --git a/myenv/lib/python3.12/site-packages/core/observers/ConnectionObserver.py b/myenv/lib/python3.12/site-packages/core/observers/ConnectionObserver.py deleted file mode 100644 index 303560a..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/ConnectionObserver.py +++ /dev/null @@ -1,10 +0,0 @@ -from core.observers.BaseObserver import BaseObserver - - -class ConnectionObserver(BaseObserver): - - def __init__(self): - self.on_connecting = [] - self.on_tor_bootstrapping = [] - self.on_tor_bootstrap_progressing = [] - self.on_tor_bootstrapped = [] diff --git a/myenv/lib/python3.12/site-packages/core/observers/InvoiceObserver.py b/myenv/lib/python3.12/site-packages/core/observers/InvoiceObserver.py deleted file mode 100644 index 6a7106f..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/InvoiceObserver.py +++ /dev/null @@ -1,10 +0,0 @@ -from core.observers.BaseObserver import BaseObserver - - -class InvoiceObserver(BaseObserver): - - def __init__(self): - - self.on_retrieved = [] - self.on_processing = [] - self.on_settled = [] diff --git a/myenv/lib/python3.12/site-packages/core/observers/ProfileObserver.py b/myenv/lib/python3.12/site-packages/core/observers/ProfileObserver.py deleted file mode 100644 index 8071dbf..0000000 --- a/myenv/lib/python3.12/site-packages/core/observers/ProfileObserver.py +++ /dev/null @@ -1,12 +0,0 @@ -from core.observers.BaseObserver import BaseObserver - - -class ProfileObserver(BaseObserver): - - def __init__(self): - - self.on_created = [] - self.on_updated = [] - self.on_destroyed = [] - self.on_disabled = [] - self.on_enabled = [] diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ApplicationVersionObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ApplicationVersionObserver.cpython-312.pyc deleted file mode 100644 index ffa91de..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ApplicationVersionObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/BaseObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/BaseObserver.cpython-312.pyc deleted file mode 100644 index fce1005..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/BaseObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ClientObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ClientObserver.cpython-312.pyc deleted file mode 100644 index ba31409..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ClientObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ConnectionObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ConnectionObserver.cpython-312.pyc deleted file mode 100644 index 48495fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ConnectionObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/InvoiceObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/InvoiceObserver.cpython-312.pyc deleted file mode 100644 index b73d6fb..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/InvoiceObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ProfileObserver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ProfileObserver.cpython-312.pyc deleted file mode 100644 index a4f9ede..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/observers/__pycache__/ProfileObserver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/core/services/WebServiceApiService.py b/myenv/lib/python3.12/site-packages/core/services/WebServiceApiService.py deleted file mode 100644 index b216915..0000000 --- a/myenv/lib/python3.12/site-packages/core/services/WebServiceApiService.py +++ /dev/null @@ -1,214 +0,0 @@ -from core.Constants import Constants -from core.models.ClientVersion import ClientVersion -from core.models.Location import Location -from core.models.Operator import Operator -from core.models.Subscription import Subscription -from core.models.SubscriptionPlan import SubscriptionPlan -from core.models.invoice.Invoice import Invoice -from core.models.invoice.PaymentMethod import PaymentMethod -from core.models.session.Application import Application -from core.models.session.ApplicationVersion import ApplicationVersion -from core.models.session.ProxyConfiguration import ProxyConfiguration -from typing import Optional -import re - - -class WebServiceApiService: - - @staticmethod - def get_applications(proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/platforms/linux-x86_64/applications', None, proxies) - applications = [] - - if response.status_code == status_codes.OK: - for application in response.json()['data']: - applications.append(Application(application['code'], application['name'], application['id'])) - - return applications - - @staticmethod - def get_application_versions(code: str, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get(f'/platforms/linux-x86_64/applications/{code}/application-versions', None, proxies) - application_versions = [] - - if response.status_code == status_codes.OK: - for application_version in response.json()['data']: - application_versions.append(ApplicationVersion(code, application_version['version_number'], application_version['format_revision'], application_version['id'], application_version['download_path'], application_version['released_at'], application_version['file_hash'])) - - return application_versions - - @staticmethod - def get_client_versions(proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/platforms/linux-x86_64/appimage/client-versions', None, proxies) - client_versions = [] - - if response.status_code == status_codes.OK: - for client_version in response.json()['data']: - client_versions.append(ClientVersion(client_version['version_number'], client_version['released_at'], client_version['id'], client_version['download_path'])) - - return client_versions - - @staticmethod - def get_operators(proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/operators', None, proxies) - operators = [] - - if response.status_code == status_codes.OK: - for operator in response.json()['data']: - operators.append(Operator(operator['id'], operator['name'], operator['public_key'], operator['nostr_public_key'], operator['nostr_profile_reference'], operator['nostr_attestation']['event_reference'])) - - return operators - - @staticmethod - def get_locations(proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/locations', None, proxies) - locations = [] - - if response.status_code == status_codes.OK: - for location in response.json()['data']: - locations.append(Location(location['country']['code'], location['code'], location['id'], location['country']['name'], location['name'], location['time_zone']['code'], location['operator_id'], location['provider']['name'], location['is_proxy_capable'], location['is_wireguard_capable'])) - - return locations - - @staticmethod - def get_subscription_plans(proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/subscription-plans', None, proxies) - subscription_plans = [] - - if response.status_code == status_codes.OK: - for subscription_plan in response.json()['data']: - subscription_plans.append(SubscriptionPlan(subscription_plan['id'], subscription_plan['code'], subscription_plan['wireguard_session_limit'], subscription_plan['duration'], subscription_plan['price'], subscription_plan['features_proxy'], subscription_plan['features_wireguard'])) - - return subscription_plans - - @staticmethod - def post_subscription(subscription_plan_id, location_id, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__post('/subscriptions', None, { - 'subscription_plan_id': subscription_plan_id, - 'location_id': location_id - }, proxies) - - if response.status_code == status_codes.CREATED: - return Subscription(response.headers['X-Billing-Code']) - - else: - return None - - @staticmethod - def get_subscription(billing_code: str, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - billing_code = billing_code.replace('-', '').upper() - billing_code_fragments = re.findall('....?', billing_code) - billing_code = '-'.join(billing_code_fragments) - - response = WebServiceApiService.__get('/subscriptions/current', billing_code, proxies) - - if response.status_code == status_codes.OK: - - subscription = response.json()['data'] - return Subscription(billing_code, Subscription.from_iso_format(subscription['expires_at'])) - - else: - return None - - @staticmethod - def get_invoice(billing_code: str, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/invoices/current', billing_code, proxies) - - if response.status_code == status_codes.OK: - - response_data = response.json()['data'] - - invoice = { - 'status': response_data['status'], - 'expires_at': response_data['expires_at'] - } - - payment_methods = [] - - for payment_method in response_data['payment_methods']: - payment_methods.append(PaymentMethod(payment_method['code'], payment_method['name'], payment_method['address'], payment_method['payment_link'], payment_method['rate'], payment_method['amount'], payment_method['due'])) - - return Invoice(billing_code, invoice['status'], invoice['expires_at'], tuple[PaymentMethod](payment_methods)) - - else: - return None - - @staticmethod - def get_proxy_configuration(billing_code: str, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__get('/proxy-configurations/current', billing_code, proxies) - - if response.status_code == status_codes.OK: - - proxy_configuration = response.json()['data'] - return ProxyConfiguration(proxy_configuration['ip_address'], proxy_configuration['port'], proxy_configuration['username'], proxy_configuration['password'], proxy_configuration['location']['time_zone']['code']) - - else: - return None - - @staticmethod - def post_wireguard_session(country_code: str, location_code: str, billing_code: str, public_key: str, proxies: Optional[dict] = None): - - from requests.status_codes import codes as status_codes - - response = WebServiceApiService.__post(f'/countries/{country_code}/locations/{location_code}/wireguard-sessions', billing_code, { - 'public_key': public_key, - }, proxies) - - if response.status_code == status_codes.CREATED: - return response.text - else: - return None - - @staticmethod - def __get(path, billing_code: Optional[str] = None, proxies: Optional[dict] = None): - - import requests - - if billing_code is not None: - headers = {'X-Billing-Code': billing_code} - else: - headers = None - - return requests.get(Constants.SP_API_BASE_URL + path, headers=headers, proxies=proxies) - - @staticmethod - def __post(path, billing_code: Optional[str] = None, body: Optional[dict] = None, proxies: Optional[dict] = None): - - import requests - - if billing_code is not None: - headers = {'X-Billing-Code': billing_code} - else: - headers = None - - return requests.post(Constants.SP_API_BASE_URL + path, headers=headers, json=body, proxies=proxies) diff --git a/myenv/lib/python3.12/site-packages/core/services/__pycache__/WebServiceApiService.cpython-312.pyc b/myenv/lib/python3.12/site-packages/core/services/__pycache__/WebServiceApiService.cpython-312.pyc deleted file mode 100644 index 11f57d1..0000000 Binary files a/myenv/lib/python3.12/site-packages/core/services/__pycache__/WebServiceApiService.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/METADATA b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/METADATA deleted file mode 100644 index 15080bb..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/METADATA +++ /dev/null @@ -1,139 +0,0 @@ -Metadata-Version: 2.4 -Name: cryptography -Version: 46.0.5 -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Natural Language :: English -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Operating System :: POSIX -Classifier: Operating System :: POSIX :: BSD -Classifier: Operating System :: POSIX :: Linux -Classifier: Operating System :: Microsoft :: Windows -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable -Classifier: Topic :: Security :: Cryptography -Requires-Dist: cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' -Requires-Dist: cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' -Requires-Dist: typing-extensions>=4.13.2 ; python_full_version < '3.11' -Requires-Dist: bcrypt>=3.1.5 ; extra == 'ssh' -Requires-Dist: nox[uv]>=2024.4.15 ; extra == 'nox' -Requires-Dist: cryptography-vectors==46.0.5 ; extra == 'test' -Requires-Dist: pytest>=7.4.0 ; extra == 'test' -Requires-Dist: pytest-benchmark>=4.0 ; extra == 'test' -Requires-Dist: pytest-cov>=2.10.1 ; extra == 'test' -Requires-Dist: pytest-xdist>=3.5.0 ; extra == 'test' -Requires-Dist: pretend>=0.7 ; extra == 'test' -Requires-Dist: certifi>=2024 ; extra == 'test' -Requires-Dist: pytest-randomly ; extra == 'test-randomorder' -Requires-Dist: sphinx>=5.3.0 ; extra == 'docs' -Requires-Dist: sphinx-rtd-theme>=3.0.0 ; extra == 'docs' -Requires-Dist: sphinx-inline-tabs ; extra == 'docs' -Requires-Dist: pyenchant>=3 ; extra == 'docstest' -Requires-Dist: readme-renderer>=30.0 ; extra == 'docstest' -Requires-Dist: sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' -Requires-Dist: build>=1.0.0 ; extra == 'sdist' -Requires-Dist: ruff>=0.11.11 ; extra == 'pep8test' -Requires-Dist: mypy>=1.14 ; extra == 'pep8test' -Requires-Dist: check-sdist ; extra == 'pep8test' -Requires-Dist: click>=8.0.1 ; extra == 'pep8test' -Provides-Extra: ssh -Provides-Extra: nox -Provides-Extra: test -Provides-Extra: test-randomorder -Provides-Extra: docs -Provides-Extra: docstest -Provides-Extra: sdist -Provides-Extra: pep8test -License-File: LICENSE -License-File: LICENSE.APACHE -License-File: LICENSE.BSD -Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers. -Author-email: The Python Cryptographic Authority and individual contributors -License-Expression: Apache-2.0 OR BSD-3-Clause -Requires-Python: >=3.8, !=3.9.0, !=3.9.1 -Description-Content-Type: text/x-rst; charset=UTF-8 -Project-URL: homepage, https://github.com/pyca/cryptography -Project-URL: documentation, https://cryptography.io/ -Project-URL: source, https://github.com/pyca/cryptography/ -Project-URL: issues, https://github.com/pyca/cryptography/issues -Project-URL: changelog, https://cryptography.io/en/latest/changelog/ - -pyca/cryptography -================= - -.. image:: https://img.shields.io/pypi/v/cryptography.svg - :target: https://pypi.org/project/cryptography/ - :alt: Latest Version - -.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest - :target: https://cryptography.io - :alt: Latest Docs - -.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg - :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain - -``cryptography`` is a package which provides cryptographic recipes and -primitives to Python developers. Our goal is for it to be your "cryptographic -standard library". It supports Python 3.8+ and PyPy3 7.3.11+. - -``cryptography`` includes both high level recipes and low level interfaces to -common cryptographic algorithms such as symmetric ciphers, message digests, and -key derivation functions. For example, to encrypt something with -``cryptography``'s high level symmetric encryption recipe: - -.. code-block:: pycon - - >>> from cryptography.fernet import Fernet - >>> # Put this somewhere safe! - >>> key = Fernet.generate_key() - >>> f = Fernet(key) - >>> token = f.encrypt(b"A really secret message. Not for prying eyes.") - >>> token - b'...' - >>> f.decrypt(token) - b'A really secret message. Not for prying eyes.' - -You can find more information in the `documentation`_. - -You can install ``cryptography`` with: - -.. code-block:: console - - $ pip install cryptography - -For full details see `the installation documentation`_. - -Discussion -~~~~~~~~~~ - -If you run into bugs, you can file them in our `issue tracker`_. - -We maintain a `cryptography-dev`_ mailing list for development discussion. - -You can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get -involved. - -Security -~~~~~~~~ - -Need to report a security issue? Please consult our `security reporting`_ -documentation. - - -.. _`documentation`: https://cryptography.io/ -.. _`the installation documentation`: https://cryptography.io/en/latest/installation/ -.. _`issue tracker`: https://github.com/pyca/cryptography/issues -.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev -.. _`security reporting`: https://cryptography.io/en/latest/security/ - diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/RECORD b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/RECORD deleted file mode 100644 index bd2f0ba..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/RECORD +++ /dev/null @@ -1,180 +0,0 @@ -cryptography-46.0.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -cryptography-46.0.5.dist-info/METADATA,sha256=aOYB9_B-Ccske76ncMz-w9c_VnzYihv_7kxZlt2i2WQ,5748 -cryptography-46.0.5.dist-info/RECORD,, -cryptography-46.0.5.dist-info/WHEEL,sha256=jkxrJemT4jZpYSr-u9xPalWqoow8benNmiXfjKXLlJw,108 -cryptography-46.0.5.dist-info/licenses/LICENSE,sha256=Pgx8CRqUi4JTO6mP18u0BDLW8amsv4X1ki0vmak65rs,197 -cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE,sha256=qsc7MUj20dcRHbyjIJn2jSbGRMaBOuHk8F9leaomY_4,11360 -cryptography-46.0.5.dist-info/licenses/LICENSE.BSD,sha256=YCxMdILeZHndLpeTzaJ15eY9dz2s0eymiSMqtwCPtPs,1532 -cryptography/__about__.py,sha256=GWg4NAxg4vsSKUwmDy1HjUeAOhqTA46wIhiY6i03NSU,445 -cryptography/__init__.py,sha256=mthuUrTd4FROCpUYrTIqhjz6s6T9djAZrV7nZ1oMm2o,364 -cryptography/__pycache__/__about__.cpython-312.pyc,, -cryptography/__pycache__/__init__.cpython-312.pyc,, -cryptography/__pycache__/exceptions.cpython-312.pyc,, -cryptography/__pycache__/fernet.cpython-312.pyc,, -cryptography/__pycache__/utils.cpython-312.pyc,, -cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087 -cryptography/fernet.py,sha256=3Cvxkh0KJSbX8HbnCHu4wfCW7U0GgfUA3v_qQ8a8iWc,6963 -cryptography/hazmat/__init__.py,sha256=5IwrLWrVp0AjEr_4FdWG_V057NSJGY_W4egNNsuct0g,455 -cryptography/hazmat/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/__pycache__/_oid.cpython-312.pyc,, -cryptography/hazmat/_oid.py,sha256=p8ThjwJB56Ci_rAIrjyJ1f8VjgD6e39es2dh8JIUBOw,17240 -cryptography/hazmat/asn1/__init__.py,sha256=hS_EWx3wVvZzfbCcNV8hzcDnyMM8H-BhIoS1TipUosk,293 -cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc,, -cryptography/hazmat/asn1/asn1.py,sha256=eMEThEXa19LQjcyVofgHsW6tsZnjp3ddH7bWkkcxfLM,3860 -cryptography/hazmat/backends/__init__.py,sha256=O5jvKFQdZnXhKeqJ-HtulaEL9Ni7mr1mDzZY5kHlYhI,361 -cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/backends/openssl/__init__.py,sha256=p3jmJfnCag9iE5sdMrN6VvVEu55u46xaS_IjoI0SrmA,305 -cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc,, -cryptography/hazmat/backends/openssl/backend.py,sha256=tV5AxBoFJ2GfA0DMWSY-0TxQJrpQoexzI9R4Kybb--4,10215 -cryptography/hazmat/bindings/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 -cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/bindings/_rust.abi3.so,sha256=vnU--g2fSh9-jyB5m6kxpbaqNoiK-fQLIR088ShrjOs,12807728 -cryptography/hazmat/bindings/_rust/__init__.pyi,sha256=KhqLhXFPArPzzJ7DYO9Fl8FoXB_BagAd_r4Dm_Ze9Xo,1257 -cryptography/hazmat/bindings/_rust/_openssl.pyi,sha256=mpNJLuYLbCVrd5i33FBTmWwL_55Dw7JPkSLlSX9Q7oI,230 -cryptography/hazmat/bindings/_rust/asn1.pyi,sha256=BrGjC8J6nwuS-r3EVcdXJB8ndotfY9mbQYOfpbPG0HA,354 -cryptography/hazmat/bindings/_rust/declarative_asn1.pyi,sha256=2ECFmYue1EPkHEE2Bm7aLwkjB0mSUTpr23v9MN4pri4,892 -cryptography/hazmat/bindings/_rust/exceptions.pyi,sha256=exXr2xw_0pB1kk93cYbM3MohbzoUkjOms1ZMUi0uQZE,640 -cryptography/hazmat/bindings/_rust/ocsp.pyi,sha256=VPVWuKHI9EMs09ZLRYAGvR0Iz0mCMmEzXAkgJHovpoM,4020 -cryptography/hazmat/bindings/_rust/openssl/__init__.pyi,sha256=iOAMDyHoNwwCSZfZzuXDr64g4GpGUeDgEN-LjXqdrBM,1522 -cryptography/hazmat/bindings/_rust/openssl/aead.pyi,sha256=4Nddw6-ynzIB3w2W86WvkGKTLlTDk_6F5l54RHCuy3E,2688 -cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi,sha256=LhPzHWSXJq4grAJXn6zSvSSdV-aYIIscHDwIPlJGGPs,1315 -cryptography/hazmat/bindings/_rust/openssl/cmac.pyi,sha256=nPH0X57RYpsAkRowVpjQiHE566ThUTx7YXrsadmrmHk,564 -cryptography/hazmat/bindings/_rust/openssl/dh.pyi,sha256=Z3TC-G04-THtSdAOPLM1h2G7ml5bda1ElZUcn5wpuhk,1564 -cryptography/hazmat/bindings/_rust/openssl/dsa.pyi,sha256=qBtkgj2albt2qFcnZ9UDrhzoNhCVO7HTby5VSf1EXMI,1299 -cryptography/hazmat/bindings/_rust/openssl/ec.pyi,sha256=zJy0pRa5n-_p2dm45PxECB_-B6SVZyNKfjxFDpPqT38,1691 -cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi,sha256=VXfXd5G6hUivg399R1DYdmW3eTb0EebzDTqjRC2gaRw,532 -cryptography/hazmat/bindings/_rust/openssl/ed448.pyi,sha256=Yx49lqdnjsD7bxiDV1kcaMrDktug5evi5a6zerMiy2s,514 -cryptography/hazmat/bindings/_rust/openssl/hashes.pyi,sha256=OWZvBx7xfo_HJl41Nc--DugVyCVPIprZ3HlOPTSWH9g,984 -cryptography/hazmat/bindings/_rust/openssl/hmac.pyi,sha256=BXZn7NDjL3JAbYW0SQ8pg1iyC5DbQXVhUAiwsi8DFR8,702 -cryptography/hazmat/bindings/_rust/openssl/kdf.pyi,sha256=xXfFBb9QehHfDtEaxV_65Z0YK7NquOVIChpTLkgAs_k,2029 -cryptography/hazmat/bindings/_rust/openssl/keys.pyi,sha256=teIt8M6ZEMJrn4s3W0UnW0DZ-30Jd68WnSsKKG124l0,912 -cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi,sha256=_SW9NtQ5FDlAbdclFtWpT4lGmxKIKHpN-4j8J2BzYfQ,585 -cryptography/hazmat/bindings/_rust/openssl/rsa.pyi,sha256=2OQCNSXkxgc-3uw1xiCCloIQTV6p9_kK79Yu0rhZgPc,1364 -cryptography/hazmat/bindings/_rust/openssl/x25519.pyi,sha256=ewn4GpQyb7zPwE-ni7GtyQgMC0A1mLuqYsSyqv6nI_s,523 -cryptography/hazmat/bindings/_rust/openssl/x448.pyi,sha256=juTZTmli8jO_5Vcufg-vHvx_tCyezmSLIh_9PU3TczI,505 -cryptography/hazmat/bindings/_rust/pkcs12.pyi,sha256=vEEd5wDiZvb8ZGFaziLCaWLzAwoG_tvPUxLQw5_uOl8,1605 -cryptography/hazmat/bindings/_rust/pkcs7.pyi,sha256=txGBJijqZshEcqra6byPNbnisIdlxzOSIHP2hl9arPs,1601 -cryptography/hazmat/bindings/_rust/test_support.pyi,sha256=PPhld-WkO743iXFPebeG0LtgK0aTzGdjcIsay1Gm5GE,757 -cryptography/hazmat/bindings/_rust/x509.pyi,sha256=n9X0IQ6ICbdIi-ExdCFZoBgeY6njm3QOVAVZwDQdnbk,9784 -cryptography/hazmat/bindings/openssl/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 -cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc,, -cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc,, -cryptography/hazmat/bindings/openssl/_conditional.py,sha256=DMOpA_XN4l70zTc5_J9DpwlbQeUBRTWpfIJ4yRIn1-U,5791 -cryptography/hazmat/bindings/openssl/binding.py,sha256=x8eocEmukO4cm7cHqfVmOoYY7CCXdoF1v1WhZQt9neo,4610 -cryptography/hazmat/decrepit/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 -cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/decrepit/ciphers/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 -cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc,, -cryptography/hazmat/decrepit/ciphers/algorithms.py,sha256=YrKgHS4MfwWaMmPBYRymRRlC0phwWp9ycICFezeJPGk,2595 -cryptography/hazmat/primitives/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 -cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc,, -cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc,, -cryptography/hazmat/primitives/_asymmetric.py,sha256=RhgcouUB6HTiFDBrR1LxqkMjpUxIiNvQ1r_zJjRG6qQ,532 -cryptography/hazmat/primitives/_cipheralgorithm.py,sha256=Eh3i7lwedHfi0eLSsH93PZxQKzY9I6lkK67vL4V5tOc,1522 -cryptography/hazmat/primitives/_serialization.py,sha256=chgPCSF2jxI2Cr5gB-qbWXOvOfupBh4CARS0KAhv9AM,5123 -cryptography/hazmat/primitives/asymmetric/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 -cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc,, -cryptography/hazmat/primitives/asymmetric/dh.py,sha256=0v_vEFFz5pQ1QG-FkWDyvgv7IfuVZSH5Q6LyFI5A8rg,3645 -cryptography/hazmat/primitives/asymmetric/dsa.py,sha256=Ld_bbbqQFz12dObHxIkzEQzX0SWWP41RLSWkYSaKhqE,4213 -cryptography/hazmat/primitives/asymmetric/ec.py,sha256=dj0ZR_jTVI1wojjipjbXNVccPSIRObWxSZcTGQKGbHc,13437 -cryptography/hazmat/primitives/asymmetric/ed25519.py,sha256=jZW5cs472wXXV3eB0sE1b8w64gdazwwU0_MT5UOTiXs,3700 -cryptography/hazmat/primitives/asymmetric/ed448.py,sha256=yAetgn2f2JYf0BO8MapGzXeThsvSMG5LmUCrxVOidAA,3729 -cryptography/hazmat/primitives/asymmetric/padding.py,sha256=vQ6l6gOg9HqcbOsvHrSiJRVLdEj9L4m4HkRGYziTyFA,2854 -cryptography/hazmat/primitives/asymmetric/rsa.py,sha256=ZnKOo2f34MCCOupC03Y1uR-_jiSG5IrelHEmxaME3D4,8303 -cryptography/hazmat/primitives/asymmetric/types.py,sha256=LnsOJym-wmPUJ7Knu_7bCNU3kIiELCd6krOaW_JU08I,2996 -cryptography/hazmat/primitives/asymmetric/utils.py,sha256=DPTs6T4F-UhwzFQTh-1fSEpQzazH2jf2xpIro3ItF4o,790 -cryptography/hazmat/primitives/asymmetric/x25519.py,sha256=_4nQeZ3yJ3Lg0RpXnaqA-1yt6vbx1F-wzLcaZHwSpeE,3613 -cryptography/hazmat/primitives/asymmetric/x448.py,sha256=WKBLtuVfJqiBRro654fGaQAlvsKbqbNkK7c4A_ZCdV0,3642 -cryptography/hazmat/primitives/ciphers/__init__.py,sha256=eyEXmjk6_CZXaOPYDr7vAYGXr29QvzgWL2-4CSolLFs,680 -cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc,, -cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc,, -cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc,, -cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc,, -cryptography/hazmat/primitives/ciphers/aead.py,sha256=Fzlyx7w8KYQakzDp1zWgJnIr62zgZrgVh1u2h4exB54,634 -cryptography/hazmat/primitives/ciphers/algorithms.py,sha256=Q7ZJwcsx83Mgxv5y7r6CyJKSdsOwC-my-5A67-ma2vw,3407 -cryptography/hazmat/primitives/ciphers/base.py,sha256=aBC7HHBBoixebmparVr0UlODs3VD0A7B6oz_AaRjDv8,4253 -cryptography/hazmat/primitives/ciphers/modes.py,sha256=20stpwhDtbAvpH0SMf9EDHIciwmTF-JMBUOZ9bU8WiQ,8318 -cryptography/hazmat/primitives/cmac.py,sha256=sz_s6H_cYnOvx-VNWdIKhRhe3Ymp8z8J0D3CBqOX3gg,338 -cryptography/hazmat/primitives/constant_time.py,sha256=xdunWT0nf8OvKdcqUhhlFKayGp4_PgVJRU2W1wLSr_A,422 -cryptography/hazmat/primitives/hashes.py,sha256=M8BrlKB3U6DEtHvWTV5VRjpteHv1kS3Zxm_Bsk04cr8,5184 -cryptography/hazmat/primitives/hmac.py,sha256=RpB3z9z5skirCQrm7zQbtnp9pLMnAjrlTUvKqF5aDDc,423 -cryptography/hazmat/primitives/kdf/__init__.py,sha256=4XibZnrYq4hh5xBjWiIXzaYW6FKx8hPbVaa_cB9zS64,750 -cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc,, -cryptography/hazmat/primitives/kdf/argon2.py,sha256=UFDNXG0v-rw3DqAQTB1UQAsQC2M5Ejg0k_6OCyhLKus,460 -cryptography/hazmat/primitives/kdf/concatkdf.py,sha256=Ua8KoLXXnzgsrAUmHpyKymaPt8aPRP0EHEaBz7QCQ9I,3737 -cryptography/hazmat/primitives/kdf/hkdf.py,sha256=M0lAEfRoc4kpp4-nwDj9yB-vNZukIOYEQrUlWsBNn9o,543 -cryptography/hazmat/primitives/kdf/kbkdf.py,sha256=oZepvo4evhKkkJQWRDwaPoIbyTaFmDc5NPimxg6lfKg,9165 -cryptography/hazmat/primitives/kdf/pbkdf2.py,sha256=1WIwhELR0w8ztTpTu8BrFiYWmK3hUfJq08I79TxwieE,1957 -cryptography/hazmat/primitives/kdf/scrypt.py,sha256=XyWUdUUmhuI9V6TqAPOvujCSMGv1XQdg0a21IWCmO-U,590 -cryptography/hazmat/primitives/kdf/x963kdf.py,sha256=zLTcF665QFvXX2f8TS7fmBZTteXpFjKahzfjjQcCJyw,1999 -cryptography/hazmat/primitives/keywrap.py,sha256=XV4Pj2fqSeD-RqZVvY2cA3j5_7RwJSFygYuLfk2ujCo,5650 -cryptography/hazmat/primitives/padding.py,sha256=QT-U-NvV2eQGO1wVPbDiNGNSc9keRDS-ig5cQOrLz0E,1865 -cryptography/hazmat/primitives/poly1305.py,sha256=P5EPQV-RB_FJPahpg01u0Ts4S_PnAmsroxIGXbGeRRo,355 -cryptography/hazmat/primitives/serialization/__init__.py,sha256=Q7uTgDlt7n3WfsMT6jYwutC6DIg_7SEeoAm1GHZ5B5E,1705 -cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc,, -cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc,, -cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc,, -cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc,, -cryptography/hazmat/primitives/serialization/base.py,sha256=ikq5MJIwp_oUnjiaBco_PmQwOTYuGi-XkYUYHKy8Vo0,615 -cryptography/hazmat/primitives/serialization/pkcs12.py,sha256=mS9cFNG4afzvseoc5e1MWoY2VskfL8N8Y_OFjl67luY,5104 -cryptography/hazmat/primitives/serialization/pkcs7.py,sha256=5OR_Tkysxaprn4FegvJIfbep9rJ9wok6FLWvWwQ5-Mg,13943 -cryptography/hazmat/primitives/serialization/ssh.py,sha256=hPV5obFznz0QhFfXFPOeQ8y6MsurA0xVMQiLnLESEs8,53700 -cryptography/hazmat/primitives/twofactor/__init__.py,sha256=tmMZGB-g4IU1r7lIFqASU019zr0uPp_wEBYcwdDCKCA,258 -cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc,, -cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc,, -cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc,, -cryptography/hazmat/primitives/twofactor/hotp.py,sha256=ivZo5BrcCGWLsqql4nZV0XXCjyGPi_iHfDFltGlOJwk,3256 -cryptography/hazmat/primitives/twofactor/totp.py,sha256=m5LPpRL00kp4zY8gTjr55Hfz9aMlPS53kHmVkSQCmdY,1652 -cryptography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -cryptography/utils.py,sha256=nFHkPQZycOQGeBtBRkWSA4WjOHFo7pwummQt-PPSkZc,4349 -cryptography/x509/__init__.py,sha256=xloN0swseNx-m2WFZmCA17gOoxQWqeU82UVjEdJBePQ,8257 -cryptography/x509/__pycache__/__init__.cpython-312.pyc,, -cryptography/x509/__pycache__/base.cpython-312.pyc,, -cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc,, -cryptography/x509/__pycache__/extensions.cpython-312.pyc,, -cryptography/x509/__pycache__/general_name.cpython-312.pyc,, -cryptography/x509/__pycache__/name.cpython-312.pyc,, -cryptography/x509/__pycache__/ocsp.cpython-312.pyc,, -cryptography/x509/__pycache__/oid.cpython-312.pyc,, -cryptography/x509/__pycache__/verification.cpython-312.pyc,, -cryptography/x509/base.py,sha256=OrmTw3y8B6AE_nGXQPN8x9kq-d7rDWeH13gCq6T6D6U,27997 -cryptography/x509/certificate_transparency.py,sha256=JqoOIDhlwInrYMFW6IFn77WJ0viF-PB_rlZV3vs9MYc,797 -cryptography/x509/extensions.py,sha256=QxYrqR6SF1qzR9ZraP8wDiIczlEVlAFuwDRVcltB6Tk,77724 -cryptography/x509/general_name.py,sha256=sP_rV11Qlpsk4x3XXGJY_Mv0Q_s9dtjeLckHsjpLQoQ,7836 -cryptography/x509/name.py,sha256=ty0_xf0LnHwZAdEf-d8FLO1K4hGqx_7DsD3CHwoLJiY,15101 -cryptography/x509/ocsp.py,sha256=Yey6NdFV1MPjop24Mj_VenjEpg3kUaMopSWOK0AbeBs,12699 -cryptography/x509/oid.py,sha256=BUzgXXGVWilkBkdKPTm9R4qElE9gAGHgdYPMZAp7PJo,931 -cryptography/x509/verification.py,sha256=gR2C2c-XZQtblZhT5T5vjSKOtCb74ef2alPVmEcwFlM,958 diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/WHEEL deleted file mode 100644 index 8e48aa1..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: maturin (1.9.4) -Root-Is-Purelib: false -Tag: cp311-abi3-manylinux_2_34_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE deleted file mode 100644 index b11f379..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made -under the terms of *both* these licenses. diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE deleted file mode 100644 index 62589ed..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD b/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD deleted file mode 100644 index ec1a29d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) Individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of PyCA Cryptography nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/cryptography/__about__.py b/myenv/lib/python3.12/site-packages/cryptography/__about__.py deleted file mode 100644 index 43b3024..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/__about__.py +++ /dev/null @@ -1,17 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -__all__ = [ - "__author__", - "__copyright__", - "__version__", -] - -__version__ = "46.0.5" - - -__author__ = "The Python Cryptographic Authority and individual contributors" -__copyright__ = f"Copyright 2013-2025 {__author__}" diff --git a/myenv/lib/python3.12/site-packages/cryptography/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/__init__.py deleted file mode 100644 index d374f75..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.__about__ import __author__, __copyright__, __version__ - -__all__ = [ - "__author__", - "__copyright__", - "__version__", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__about__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__about__.cpython-312.pyc deleted file mode 100644 index c672e97..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__about__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index d4cc89b..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 98be55a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/fernet.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/__pycache__/fernet.cpython-312.pyc deleted file mode 100644 index 8c598e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/fernet.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index fb4b98e..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/exceptions.py b/myenv/lib/python3.12/site-packages/cryptography/exceptions.py deleted file mode 100644 index fe125ea..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/exceptions.py +++ /dev/null @@ -1,52 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.hazmat.bindings._rust import exceptions as rust_exceptions - -if typing.TYPE_CHECKING: - from cryptography.hazmat.bindings._rust import openssl as rust_openssl - -_Reasons = rust_exceptions._Reasons - - -class UnsupportedAlgorithm(Exception): - def __init__(self, message: str, reason: _Reasons | None = None) -> None: - super().__init__(message) - self._reason = reason - - -class AlreadyFinalized(Exception): - pass - - -class AlreadyUpdated(Exception): - pass - - -class NotYetFinalized(Exception): - pass - - -class InvalidTag(Exception): - pass - - -class InvalidSignature(Exception): - pass - - -class InternalError(Exception): - def __init__( - self, msg: str, err_code: list[rust_openssl.OpenSSLError] - ) -> None: - super().__init__(msg) - self.err_code = err_code - - -class InvalidKey(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/cryptography/fernet.py b/myenv/lib/python3.12/site-packages/cryptography/fernet.py deleted file mode 100644 index c6744ae..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/fernet.py +++ /dev/null @@ -1,224 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import base64 -import binascii -import os -import time -import typing -from collections.abc import Iterable - -from cryptography import utils -from cryptography.exceptions import InvalidSignature -from cryptography.hazmat.primitives import hashes, padding -from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes -from cryptography.hazmat.primitives.hmac import HMAC - - -class InvalidToken(Exception): - pass - - -_MAX_CLOCK_SKEW = 60 - - -class Fernet: - def __init__( - self, - key: bytes | str, - backend: typing.Any = None, - ) -> None: - try: - key = base64.urlsafe_b64decode(key) - except binascii.Error as exc: - raise ValueError( - "Fernet key must be 32 url-safe base64-encoded bytes." - ) from exc - if len(key) != 32: - raise ValueError( - "Fernet key must be 32 url-safe base64-encoded bytes." - ) - - self._signing_key = key[:16] - self._encryption_key = key[16:] - - @classmethod - def generate_key(cls) -> bytes: - return base64.urlsafe_b64encode(os.urandom(32)) - - def encrypt(self, data: bytes) -> bytes: - return self.encrypt_at_time(data, int(time.time())) - - def encrypt_at_time(self, data: bytes, current_time: int) -> bytes: - iv = os.urandom(16) - return self._encrypt_from_parts(data, current_time, iv) - - def _encrypt_from_parts( - self, data: bytes, current_time: int, iv: bytes - ) -> bytes: - utils._check_bytes("data", data) - - padder = padding.PKCS7(algorithms.AES.block_size).padder() - padded_data = padder.update(data) + padder.finalize() - encryptor = Cipher( - algorithms.AES(self._encryption_key), - modes.CBC(iv), - ).encryptor() - ciphertext = encryptor.update(padded_data) + encryptor.finalize() - - basic_parts = ( - b"\x80" - + current_time.to_bytes(length=8, byteorder="big") - + iv - + ciphertext - ) - - h = HMAC(self._signing_key, hashes.SHA256()) - h.update(basic_parts) - hmac = h.finalize() - return base64.urlsafe_b64encode(basic_parts + hmac) - - def decrypt(self, token: bytes | str, ttl: int | None = None) -> bytes: - timestamp, data = Fernet._get_unverified_token_data(token) - if ttl is None: - time_info = None - else: - time_info = (ttl, int(time.time())) - return self._decrypt_data(data, timestamp, time_info) - - def decrypt_at_time( - self, token: bytes | str, ttl: int, current_time: int - ) -> bytes: - if ttl is None: - raise ValueError( - "decrypt_at_time() can only be used with a non-None ttl" - ) - timestamp, data = Fernet._get_unverified_token_data(token) - return self._decrypt_data(data, timestamp, (ttl, current_time)) - - def extract_timestamp(self, token: bytes | str) -> int: - timestamp, data = Fernet._get_unverified_token_data(token) - # Verify the token was not tampered with. - self._verify_signature(data) - return timestamp - - @staticmethod - def _get_unverified_token_data(token: bytes | str) -> tuple[int, bytes]: - if not isinstance(token, (str, bytes)): - raise TypeError("token must be bytes or str") - - try: - data = base64.urlsafe_b64decode(token) - except (TypeError, binascii.Error): - raise InvalidToken - - if not data or data[0] != 0x80: - raise InvalidToken - - if len(data) < 9: - raise InvalidToken - - timestamp = int.from_bytes(data[1:9], byteorder="big") - return timestamp, data - - def _verify_signature(self, data: bytes) -> None: - h = HMAC(self._signing_key, hashes.SHA256()) - h.update(data[:-32]) - try: - h.verify(data[-32:]) - except InvalidSignature: - raise InvalidToken - - def _decrypt_data( - self, - data: bytes, - timestamp: int, - time_info: tuple[int, int] | None, - ) -> bytes: - if time_info is not None: - ttl, current_time = time_info - if timestamp + ttl < current_time: - raise InvalidToken - - if current_time + _MAX_CLOCK_SKEW < timestamp: - raise InvalidToken - - self._verify_signature(data) - - iv = data[9:25] - ciphertext = data[25:-32] - decryptor = Cipher( - algorithms.AES(self._encryption_key), modes.CBC(iv) - ).decryptor() - plaintext_padded = decryptor.update(ciphertext) - try: - plaintext_padded += decryptor.finalize() - except ValueError: - raise InvalidToken - unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder() - - unpadded = unpadder.update(plaintext_padded) - try: - unpadded += unpadder.finalize() - except ValueError: - raise InvalidToken - return unpadded - - -class MultiFernet: - def __init__(self, fernets: Iterable[Fernet]): - fernets = list(fernets) - if not fernets: - raise ValueError( - "MultiFernet requires at least one Fernet instance" - ) - self._fernets = fernets - - def encrypt(self, msg: bytes) -> bytes: - return self.encrypt_at_time(msg, int(time.time())) - - def encrypt_at_time(self, msg: bytes, current_time: int) -> bytes: - return self._fernets[0].encrypt_at_time(msg, current_time) - - def rotate(self, msg: bytes | str) -> bytes: - timestamp, data = Fernet._get_unverified_token_data(msg) - for f in self._fernets: - try: - p = f._decrypt_data(data, timestamp, None) - break - except InvalidToken: - pass - else: - raise InvalidToken - - iv = os.urandom(16) - return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) - - def decrypt(self, msg: bytes | str, ttl: int | None = None) -> bytes: - for f in self._fernets: - try: - return f.decrypt(msg, ttl) - except InvalidToken: - pass - raise InvalidToken - - def decrypt_at_time( - self, msg: bytes | str, ttl: int, current_time: int - ) -> bytes: - for f in self._fernets: - try: - return f.decrypt_at_time(msg, ttl, current_time) - except InvalidToken: - pass - raise InvalidToken - - def extract_timestamp(self, msg: bytes | str) -> int: - for f in self._fernets: - try: - return f.extract_timestamp(msg) - except InvalidToken: - pass - raise InvalidToken diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/__init__.py deleted file mode 100644 index b9f1187..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -""" -Hazardous Materials - -This is a "Hazardous Materials" module. You should ONLY use it if you're -100% absolutely sure that you know what you're doing because this module -is full of land mines, dragons, and dinosaurs with laser guns. -""" diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index aa2b22a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc deleted file mode 100644 index a8a2188..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py deleted file mode 100644 index 4bf138d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py +++ /dev/null @@ -1,356 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import ( - ObjectIdentifier as ObjectIdentifier, -) -from cryptography.hazmat.primitives import hashes - - -class ExtensionOID: - SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9") - SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14") - KEY_USAGE = ObjectIdentifier("2.5.29.15") - PRIVATE_KEY_USAGE_PERIOD = ObjectIdentifier("2.5.29.16") - SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17") - ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18") - BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19") - NAME_CONSTRAINTS = ObjectIdentifier("2.5.29.30") - CRL_DISTRIBUTION_POINTS = ObjectIdentifier("2.5.29.31") - CERTIFICATE_POLICIES = ObjectIdentifier("2.5.29.32") - POLICY_MAPPINGS = ObjectIdentifier("2.5.29.33") - AUTHORITY_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.35") - POLICY_CONSTRAINTS = ObjectIdentifier("2.5.29.36") - EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37") - FRESHEST_CRL = ObjectIdentifier("2.5.29.46") - INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54") - ISSUING_DISTRIBUTION_POINT = ObjectIdentifier("2.5.29.28") - AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1") - SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11") - OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5") - TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24") - CRL_NUMBER = ObjectIdentifier("2.5.29.20") - DELTA_CRL_INDICATOR = ObjectIdentifier("2.5.29.27") - PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier( - "1.3.6.1.4.1.11129.2.4.2" - ) - PRECERT_POISON = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") - SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") - MS_CERTIFICATE_TEMPLATE = ObjectIdentifier("1.3.6.1.4.1.311.21.7") - ADMISSIONS = ObjectIdentifier("1.3.36.8.3.3") - - -class OCSPExtensionOID: - NONCE = ObjectIdentifier("1.3.6.1.5.5.7.48.1.2") - ACCEPTABLE_RESPONSES = ObjectIdentifier("1.3.6.1.5.5.7.48.1.4") - - -class CRLEntryExtensionOID: - CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29") - CRL_REASON = ObjectIdentifier("2.5.29.21") - INVALIDITY_DATE = ObjectIdentifier("2.5.29.24") - - -class NameOID: - COMMON_NAME = ObjectIdentifier("2.5.4.3") - COUNTRY_NAME = ObjectIdentifier("2.5.4.6") - LOCALITY_NAME = ObjectIdentifier("2.5.4.7") - STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8") - STREET_ADDRESS = ObjectIdentifier("2.5.4.9") - ORGANIZATION_IDENTIFIER = ObjectIdentifier("2.5.4.97") - ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10") - ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11") - SERIAL_NUMBER = ObjectIdentifier("2.5.4.5") - SURNAME = ObjectIdentifier("2.5.4.4") - GIVEN_NAME = ObjectIdentifier("2.5.4.42") - TITLE = ObjectIdentifier("2.5.4.12") - INITIALS = ObjectIdentifier("2.5.4.43") - GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44") - X500_UNIQUE_IDENTIFIER = ObjectIdentifier("2.5.4.45") - DN_QUALIFIER = ObjectIdentifier("2.5.4.46") - PSEUDONYM = ObjectIdentifier("2.5.4.65") - USER_ID = ObjectIdentifier("0.9.2342.19200300.100.1.1") - DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25") - EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1") - JURISDICTION_COUNTRY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.3") - JURISDICTION_LOCALITY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.1") - JURISDICTION_STATE_OR_PROVINCE_NAME = ObjectIdentifier( - "1.3.6.1.4.1.311.60.2.1.2" - ) - BUSINESS_CATEGORY = ObjectIdentifier("2.5.4.15") - POSTAL_ADDRESS = ObjectIdentifier("2.5.4.16") - POSTAL_CODE = ObjectIdentifier("2.5.4.17") - INN = ObjectIdentifier("1.2.643.3.131.1.1") - OGRN = ObjectIdentifier("1.2.643.100.1") - SNILS = ObjectIdentifier("1.2.643.100.3") - UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") - - -class SignatureAlgorithmOID: - RSA_WITH_MD5 = ObjectIdentifier("1.2.840.113549.1.1.4") - RSA_WITH_SHA1 = ObjectIdentifier("1.2.840.113549.1.1.5") - # This is an alternate OID for RSA with SHA1 that is occasionally seen - _RSA_WITH_SHA1 = ObjectIdentifier("1.3.14.3.2.29") - RSA_WITH_SHA224 = ObjectIdentifier("1.2.840.113549.1.1.14") - RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11") - RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12") - RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13") - RSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.13") - RSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.14") - RSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.15") - RSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.16") - RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") - ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1") - ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1") - ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2") - ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3") - ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4") - ECDSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.9") - ECDSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.10") - ECDSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.11") - ECDSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.12") - DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3") - DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1") - DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2") - DSA_WITH_SHA384 = ObjectIdentifier("2.16.840.1.101.3.4.3.3") - DSA_WITH_SHA512 = ObjectIdentifier("2.16.840.1.101.3.4.3.4") - ED25519 = ObjectIdentifier("1.3.101.112") - ED448 = ObjectIdentifier("1.3.101.113") - GOSTR3411_94_WITH_3410_2001 = ObjectIdentifier("1.2.643.2.2.3") - GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier("1.2.643.7.1.1.3.2") - GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier("1.2.643.7.1.1.3.3") - - -_SIG_OIDS_TO_HASH: dict[ObjectIdentifier, hashes.HashAlgorithm | None] = { - SignatureAlgorithmOID.RSA_WITH_MD5: hashes.MD5(), - SignatureAlgorithmOID.RSA_WITH_SHA1: hashes.SHA1(), - SignatureAlgorithmOID._RSA_WITH_SHA1: hashes.SHA1(), - SignatureAlgorithmOID.RSA_WITH_SHA224: hashes.SHA224(), - SignatureAlgorithmOID.RSA_WITH_SHA256: hashes.SHA256(), - SignatureAlgorithmOID.RSA_WITH_SHA384: hashes.SHA384(), - SignatureAlgorithmOID.RSA_WITH_SHA512: hashes.SHA512(), - SignatureAlgorithmOID.RSA_WITH_SHA3_224: hashes.SHA3_224(), - SignatureAlgorithmOID.RSA_WITH_SHA3_256: hashes.SHA3_256(), - SignatureAlgorithmOID.RSA_WITH_SHA3_384: hashes.SHA3_384(), - SignatureAlgorithmOID.RSA_WITH_SHA3_512: hashes.SHA3_512(), - SignatureAlgorithmOID.ECDSA_WITH_SHA1: hashes.SHA1(), - SignatureAlgorithmOID.ECDSA_WITH_SHA224: hashes.SHA224(), - SignatureAlgorithmOID.ECDSA_WITH_SHA256: hashes.SHA256(), - SignatureAlgorithmOID.ECDSA_WITH_SHA384: hashes.SHA384(), - SignatureAlgorithmOID.ECDSA_WITH_SHA512: hashes.SHA512(), - SignatureAlgorithmOID.ECDSA_WITH_SHA3_224: hashes.SHA3_224(), - SignatureAlgorithmOID.ECDSA_WITH_SHA3_256: hashes.SHA3_256(), - SignatureAlgorithmOID.ECDSA_WITH_SHA3_384: hashes.SHA3_384(), - SignatureAlgorithmOID.ECDSA_WITH_SHA3_512: hashes.SHA3_512(), - SignatureAlgorithmOID.DSA_WITH_SHA1: hashes.SHA1(), - SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(), - SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), - SignatureAlgorithmOID.ED25519: None, - SignatureAlgorithmOID.ED448: None, - SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: None, - SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: None, - SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: None, -} - - -class HashAlgorithmOID: - SHA1 = ObjectIdentifier("1.3.14.3.2.26") - SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.2.4") - SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.2.1") - SHA384 = ObjectIdentifier("2.16.840.1.101.3.4.2.2") - SHA512 = ObjectIdentifier("2.16.840.1.101.3.4.2.3") - SHA3_224 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.224") - SHA3_256 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.256") - SHA3_384 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.384") - SHA3_512 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.512") - SHA3_224_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.7") - SHA3_256_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.8") - SHA3_384_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.9") - SHA3_512_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.10") - - -class PublicKeyAlgorithmOID: - DSA = ObjectIdentifier("1.2.840.10040.4.1") - EC_PUBLIC_KEY = ObjectIdentifier("1.2.840.10045.2.1") - RSAES_PKCS1_v1_5 = ObjectIdentifier("1.2.840.113549.1.1.1") - RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") - X25519 = ObjectIdentifier("1.3.101.110") - X448 = ObjectIdentifier("1.3.101.111") - ED25519 = ObjectIdentifier("1.3.101.112") - ED448 = ObjectIdentifier("1.3.101.113") - - -class ExtendedKeyUsageOID: - SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1") - CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2") - CODE_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.3") - EMAIL_PROTECTION = ObjectIdentifier("1.3.6.1.5.5.7.3.4") - TIME_STAMPING = ObjectIdentifier("1.3.6.1.5.5.7.3.8") - OCSP_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.9") - ANY_EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37.0") - SMARTCARD_LOGON = ObjectIdentifier("1.3.6.1.4.1.311.20.2.2") - KERBEROS_PKINIT_KDC = ObjectIdentifier("1.3.6.1.5.2.3.5") - IPSEC_IKE = ObjectIdentifier("1.3.6.1.5.5.7.3.17") - BUNDLE_SECURITY = ObjectIdentifier("1.3.6.1.5.5.7.3.35") - CERTIFICATE_TRANSPARENCY = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.4") - - -class OtherNameFormOID: - PERMANENT_IDENTIFIER = ObjectIdentifier("1.3.6.1.5.5.7.8.3") - HW_MODULE_NAME = ObjectIdentifier("1.3.6.1.5.5.7.8.4") - DNS_SRV = ObjectIdentifier("1.3.6.1.5.5.7.8.7") - NAI_REALM = ObjectIdentifier("1.3.6.1.5.5.7.8.8") - SMTP_UTF8_MAILBOX = ObjectIdentifier("1.3.6.1.5.5.7.8.9") - ACP_NODE_NAME = ObjectIdentifier("1.3.6.1.5.5.7.8.10") - BUNDLE_EID = ObjectIdentifier("1.3.6.1.5.5.7.8.11") - - -class AuthorityInformationAccessOID: - CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2") - OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1") - - -class SubjectInformationAccessOID: - CA_REPOSITORY = ObjectIdentifier("1.3.6.1.5.5.7.48.5") - - -class CertificatePoliciesOID: - CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1") - CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2") - ANY_POLICY = ObjectIdentifier("2.5.29.32.0") - - -class AttributeOID: - CHALLENGE_PASSWORD = ObjectIdentifier("1.2.840.113549.1.9.7") - UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") - - -_OID_NAMES = { - NameOID.COMMON_NAME: "commonName", - NameOID.COUNTRY_NAME: "countryName", - NameOID.LOCALITY_NAME: "localityName", - NameOID.STATE_OR_PROVINCE_NAME: "stateOrProvinceName", - NameOID.STREET_ADDRESS: "streetAddress", - NameOID.ORGANIZATION_NAME: "organizationName", - NameOID.ORGANIZATIONAL_UNIT_NAME: "organizationalUnitName", - NameOID.SERIAL_NUMBER: "serialNumber", - NameOID.SURNAME: "surname", - NameOID.GIVEN_NAME: "givenName", - NameOID.TITLE: "title", - NameOID.GENERATION_QUALIFIER: "generationQualifier", - NameOID.X500_UNIQUE_IDENTIFIER: "x500UniqueIdentifier", - NameOID.DN_QUALIFIER: "dnQualifier", - NameOID.PSEUDONYM: "pseudonym", - NameOID.USER_ID: "userID", - NameOID.DOMAIN_COMPONENT: "domainComponent", - NameOID.EMAIL_ADDRESS: "emailAddress", - NameOID.JURISDICTION_COUNTRY_NAME: "jurisdictionCountryName", - NameOID.JURISDICTION_LOCALITY_NAME: "jurisdictionLocalityName", - NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME: ( - "jurisdictionStateOrProvinceName" - ), - NameOID.BUSINESS_CATEGORY: "businessCategory", - NameOID.POSTAL_ADDRESS: "postalAddress", - NameOID.POSTAL_CODE: "postalCode", - NameOID.INN: "INN", - NameOID.OGRN: "OGRN", - NameOID.SNILS: "SNILS", - NameOID.UNSTRUCTURED_NAME: "unstructuredName", - SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption", - SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption", - SignatureAlgorithmOID.RSA_WITH_SHA224: "sha224WithRSAEncryption", - SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption", - SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption", - SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption", - SignatureAlgorithmOID.RSASSA_PSS: "rsassaPss", - SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1", - SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224", - SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256", - SignatureAlgorithmOID.ECDSA_WITH_SHA384: "ecdsa-with-SHA384", - SignatureAlgorithmOID.ECDSA_WITH_SHA512: "ecdsa-with-SHA512", - SignatureAlgorithmOID.DSA_WITH_SHA1: "dsa-with-sha1", - SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224", - SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256", - SignatureAlgorithmOID.ED25519: "ed25519", - SignatureAlgorithmOID.ED448: "ed448", - SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: ( - "GOST R 34.11-94 with GOST R 34.10-2001" - ), - SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: ( - "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" - ), - SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: ( - "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" - ), - HashAlgorithmOID.SHA1: "sha1", - HashAlgorithmOID.SHA224: "sha224", - HashAlgorithmOID.SHA256: "sha256", - HashAlgorithmOID.SHA384: "sha384", - HashAlgorithmOID.SHA512: "sha512", - HashAlgorithmOID.SHA3_224: "sha3_224", - HashAlgorithmOID.SHA3_256: "sha3_256", - HashAlgorithmOID.SHA3_384: "sha3_384", - HashAlgorithmOID.SHA3_512: "sha3_512", - HashAlgorithmOID.SHA3_224_NIST: "sha3_224", - HashAlgorithmOID.SHA3_256_NIST: "sha3_256", - HashAlgorithmOID.SHA3_384_NIST: "sha3_384", - HashAlgorithmOID.SHA3_512_NIST: "sha3_512", - PublicKeyAlgorithmOID.DSA: "dsaEncryption", - PublicKeyAlgorithmOID.EC_PUBLIC_KEY: "id-ecPublicKey", - PublicKeyAlgorithmOID.RSAES_PKCS1_v1_5: "rsaEncryption", - PublicKeyAlgorithmOID.X25519: "X25519", - PublicKeyAlgorithmOID.X448: "X448", - ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", - ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", - ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", - ExtendedKeyUsageOID.EMAIL_PROTECTION: "emailProtection", - ExtendedKeyUsageOID.TIME_STAMPING: "timeStamping", - ExtendedKeyUsageOID.OCSP_SIGNING: "OCSPSigning", - ExtendedKeyUsageOID.SMARTCARD_LOGON: "msSmartcardLogin", - ExtendedKeyUsageOID.KERBEROS_PKINIT_KDC: "pkInitKDC", - ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES: "subjectDirectoryAttributes", - ExtensionOID.SUBJECT_KEY_IDENTIFIER: "subjectKeyIdentifier", - ExtensionOID.KEY_USAGE: "keyUsage", - ExtensionOID.PRIVATE_KEY_USAGE_PERIOD: "privateKeyUsagePeriod", - ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName", - ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName", - ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints", - ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( - "signedCertificateTimestampList" - ), - ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS: ( - "signedCertificateTimestampList" - ), - ExtensionOID.PRECERT_POISON: "ctPoison", - ExtensionOID.MS_CERTIFICATE_TEMPLATE: "msCertificateTemplate", - ExtensionOID.ADMISSIONS: "Admissions", - CRLEntryExtensionOID.CRL_REASON: "cRLReason", - CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", - CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer", - ExtensionOID.NAME_CONSTRAINTS: "nameConstraints", - ExtensionOID.CRL_DISTRIBUTION_POINTS: "cRLDistributionPoints", - ExtensionOID.CERTIFICATE_POLICIES: "certificatePolicies", - ExtensionOID.POLICY_MAPPINGS: "policyMappings", - ExtensionOID.AUTHORITY_KEY_IDENTIFIER: "authorityKeyIdentifier", - ExtensionOID.POLICY_CONSTRAINTS: "policyConstraints", - ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage", - ExtensionOID.FRESHEST_CRL: "freshestCRL", - ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy", - ExtensionOID.ISSUING_DISTRIBUTION_POINT: "issuingDistributionPoint", - ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess", - ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", - ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", - ExtensionOID.CRL_NUMBER: "cRLNumber", - ExtensionOID.DELTA_CRL_INDICATOR: "deltaCRLIndicator", - ExtensionOID.TLS_FEATURE: "TLSFeature", - AuthorityInformationAccessOID.OCSP: "OCSP", - AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", - SubjectInformationAccessOID.CA_REPOSITORY: "caRepository", - CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", - CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", - OCSPExtensionOID.NONCE: "OCSPNonce", - AttributeOID.CHALLENGE_PASSWORD: "challengePassword", -} diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py deleted file mode 100644 index be68373..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.asn1.asn1 import encode_der, sequence - -__all__ = [ - "encode_der", - "sequence", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 6641851..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc deleted file mode 100644 index b06653b..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py deleted file mode 100644 index dedad6f..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py +++ /dev/null @@ -1,116 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import dataclasses -import sys -import typing - -if sys.version_info < (3, 11): - import typing_extensions - - # We use the `include_extras` parameter of `get_type_hints`, which was - # added in Python 3.9. This can be replaced by the `typing` version - # once the min version is >= 3.9 - if sys.version_info < (3, 9): - get_type_hints = typing_extensions.get_type_hints - else: - get_type_hints = typing.get_type_hints -else: - get_type_hints = typing.get_type_hints - -from cryptography.hazmat.bindings._rust import declarative_asn1 - -T = typing.TypeVar("T", covariant=True) -U = typing.TypeVar("U") - - -encode_der = declarative_asn1.encode_der - - -def _normalize_field_type( - field_type: typing.Any, field_name: str -) -> declarative_asn1.AnnotatedType: - annotation = declarative_asn1.Annotation() - - if hasattr(field_type, "__asn1_root__"): - annotated_root = field_type.__asn1_root__ - if not isinstance(annotated_root, declarative_asn1.AnnotatedType): - raise TypeError(f"unsupported root type: {annotated_root}") - return annotated_root - else: - rust_field_type = declarative_asn1.non_root_python_to_rust(field_type) - - return declarative_asn1.AnnotatedType(rust_field_type, annotation) - - -def _annotate_fields( - raw_fields: dict[str, type], -) -> dict[str, declarative_asn1.AnnotatedType]: - fields = {} - for field_name, field_type in raw_fields.items(): - # Recursively normalize the field type into something that the - # Rust code can understand. - annotated_field_type = _normalize_field_type(field_type, field_name) - fields[field_name] = annotated_field_type - - return fields - - -def _register_asn1_sequence(cls: type[U]) -> None: - raw_fields = get_type_hints(cls, include_extras=True) - root = declarative_asn1.AnnotatedType( - declarative_asn1.Type.Sequence(cls, _annotate_fields(raw_fields)), - declarative_asn1.Annotation(), - ) - - setattr(cls, "__asn1_root__", root) - - -# Due to https://github.com/python/mypy/issues/19731, we can't define an alias -# for `dataclass_transform` that conditionally points to `typing` or -# `typing_extensions` depending on the Python version (like we do for -# `get_type_hints`). -# We work around it by making the whole decorated class conditional on the -# Python version. -if sys.version_info < (3, 11): - - @typing_extensions.dataclass_transform(kw_only_default=True) - def sequence(cls: type[U]) -> type[U]: - # We use `dataclasses.dataclass` to add an __init__ method - # to the class with keyword-only parameters. - if sys.version_info >= (3, 10): - dataclass_cls = dataclasses.dataclass( - repr=False, - eq=False, - # `match_args` was added in Python 3.10 and defaults - # to True - match_args=False, - # `kw_only` was added in Python 3.10 and defaults to - # False - kw_only=True, - )(cls) - else: - dataclass_cls = dataclasses.dataclass( - repr=False, - eq=False, - )(cls) - _register_asn1_sequence(dataclass_cls) - return dataclass_cls - -else: - - @typing.dataclass_transform(kw_only_default=True) - def sequence(cls: type[U]) -> type[U]: - # Only add an __init__ method, with keyword-only - # parameters. - dataclass_cls = dataclasses.dataclass( - repr=False, - eq=False, - match_args=False, - kw_only=True, - )(cls) - _register_asn1_sequence(dataclass_cls) - return dataclass_cls diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__init__.py deleted file mode 100644 index b4400aa..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from typing import Any - - -def default_backend() -> Any: - from cryptography.hazmat.backends.openssl.backend import backend - - return backend diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 4a57f36..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__init__.py deleted file mode 100644 index 51b0447..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.backends.openssl.backend import backend - -__all__ = ["backend"] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 52d057d..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc deleted file mode 100644 index 2a90988..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py deleted file mode 100644 index 248b8c5..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py +++ /dev/null @@ -1,302 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.bindings.openssl import binding -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives._asymmetric import AsymmetricPadding -from cryptography.hazmat.primitives.asymmetric import ec -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils -from cryptography.hazmat.primitives.asymmetric.padding import ( - MGF1, - OAEP, - PSS, - PKCS1v15, -) -from cryptography.hazmat.primitives.ciphers import ( - CipherAlgorithm, -) -from cryptography.hazmat.primitives.ciphers.algorithms import ( - AES, -) -from cryptography.hazmat.primitives.ciphers.modes import ( - CBC, - Mode, -) - - -class Backend: - """ - OpenSSL API binding interfaces. - """ - - name = "openssl" - - # TripleDES encryption is disallowed/deprecated throughout 2023 in - # FIPS 140-3. To keep it simple we denylist any use of TripleDES (TDEA). - _fips_ciphers = (AES,) - # Sometimes SHA1 is still permissible. That logic is contained - # within the various *_supported methods. - _fips_hashes = ( - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - hashes.SHA512_224, - hashes.SHA512_256, - hashes.SHA3_224, - hashes.SHA3_256, - hashes.SHA3_384, - hashes.SHA3_512, - hashes.SHAKE128, - hashes.SHAKE256, - ) - _fips_ecdh_curves = ( - ec.SECP224R1, - ec.SECP256R1, - ec.SECP384R1, - ec.SECP521R1, - ) - _fips_rsa_min_key_size = 2048 - _fips_rsa_min_public_exponent = 65537 - _fips_dsa_min_modulus = 1 << 2048 - _fips_dh_min_key_size = 2048 - _fips_dh_min_modulus = 1 << _fips_dh_min_key_size - - def __init__(self) -> None: - self._binding = binding.Binding() - self._ffi = self._binding.ffi - self._lib = self._binding.lib - self._fips_enabled = rust_openssl.is_fips_enabled() - - def __repr__(self) -> str: - return ( - f"" - ) - - def openssl_assert(self, ok: bool) -> None: - return binding._openssl_assert(ok) - - def _enable_fips(self) -> None: - # This function enables FIPS mode for OpenSSL 3.0.0 on installs that - # have the FIPS provider installed properly. - rust_openssl.enable_fips(rust_openssl._providers) - assert rust_openssl.is_fips_enabled() - self._fips_enabled = rust_openssl.is_fips_enabled() - - def openssl_version_text(self) -> str: - """ - Friendly string name of the loaded OpenSSL library. This is not - necessarily the same version as it was compiled against. - - Example: OpenSSL 3.2.1 30 Jan 2024 - """ - return rust_openssl.openssl_version_text() - - def openssl_version_number(self) -> int: - return rust_openssl.openssl_version() - - def hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: - if self._fips_enabled and not isinstance(algorithm, self._fips_hashes): - return False - - return rust_openssl.hashes.hash_supported(algorithm) - - def signature_hash_supported( - self, algorithm: hashes.HashAlgorithm - ) -> bool: - # Dedicated check for hashing algorithm use in message digest for - # signatures, e.g. RSA PKCS#1 v1.5 SHA1 (sha1WithRSAEncryption). - if self._fips_enabled and isinstance(algorithm, hashes.SHA1): - return False - return self.hash_supported(algorithm) - - def scrypt_supported(self) -> bool: - if self._fips_enabled: - return False - else: - return hasattr(rust_openssl.kdf.Scrypt, "derive") - - def argon2_supported(self) -> bool: - if self._fips_enabled: - return False - else: - return hasattr(rust_openssl.kdf.Argon2id, "derive") - - def hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: - # FIPS mode still allows SHA1 for HMAC - if self._fips_enabled and isinstance(algorithm, hashes.SHA1): - return True - if rust_openssl.CRYPTOGRAPHY_IS_AWSLC: - return isinstance( - algorithm, - ( - hashes.SHA1, - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - hashes.SHA512_224, - hashes.SHA512_256, - ), - ) - return self.hash_supported(algorithm) - - def cipher_supported(self, cipher: CipherAlgorithm, mode: Mode) -> bool: - if self._fips_enabled: - # FIPS mode requires AES. TripleDES is disallowed/deprecated in - # FIPS 140-3. - if not isinstance(cipher, self._fips_ciphers): - return False - - return rust_openssl.ciphers.cipher_supported(cipher, mode) - - def pbkdf2_hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: - return self.hmac_supported(algorithm) - - def _consume_errors(self) -> list[rust_openssl.OpenSSLError]: - return rust_openssl.capture_error_stack() - - def _oaep_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: - if self._fips_enabled and isinstance(algorithm, hashes.SHA1): - return False - - return isinstance( - algorithm, - ( - hashes.SHA1, - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - ), - ) - - def rsa_padding_supported(self, padding: AsymmetricPadding) -> bool: - if isinstance(padding, PKCS1v15): - return True - elif isinstance(padding, PSS) and isinstance(padding._mgf, MGF1): - # FIPS 186-4 only allows salt length == digest length for PSS - # It is technically acceptable to set an explicit salt length - # equal to the digest length and this will incorrectly fail, but - # since we don't do that in the tests and this method is - # private, we'll ignore that until we need to do otherwise. - if ( - self._fips_enabled - and padding._salt_length != PSS.DIGEST_LENGTH - ): - return False - return self.hash_supported(padding._mgf._algorithm) - elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): - return self._oaep_hash_supported( - padding._mgf._algorithm - ) and self._oaep_hash_supported(padding._algorithm) - else: - return False - - def rsa_encryption_supported(self, padding: AsymmetricPadding) -> bool: - if self._fips_enabled and isinstance(padding, PKCS1v15): - return False - else: - return self.rsa_padding_supported(padding) - - def dsa_supported(self) -> bool: - return ( - not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not self._fips_enabled - ) - - def dsa_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: - if not self.dsa_supported(): - return False - return self.signature_hash_supported(algorithm) - - def cmac_algorithm_supported(self, algorithm) -> bool: - return self.cipher_supported( - algorithm, CBC(b"\x00" * algorithm.block_size) - ) - - def elliptic_curve_supported(self, curve: ec.EllipticCurve) -> bool: - if self._fips_enabled and not isinstance( - curve, self._fips_ecdh_curves - ): - return False - - return rust_openssl.ec.curve_supported(curve) - - def elliptic_curve_signature_algorithm_supported( - self, - signature_algorithm: ec.EllipticCurveSignatureAlgorithm, - curve: ec.EllipticCurve, - ) -> bool: - # We only support ECDSA right now. - if not isinstance(signature_algorithm, ec.ECDSA): - return False - - return self.elliptic_curve_supported(curve) and ( - isinstance(signature_algorithm.algorithm, asym_utils.Prehashed) - or self.hash_supported(signature_algorithm.algorithm) - ) - - def elliptic_curve_exchange_algorithm_supported( - self, algorithm: ec.ECDH, curve: ec.EllipticCurve - ) -> bool: - return self.elliptic_curve_supported(curve) and isinstance( - algorithm, ec.ECDH - ) - - def dh_supported(self) -> bool: - return ( - not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC - ) - - def dh_x942_serialization_supported(self) -> bool: - return self._lib.Cryptography_HAS_EVP_PKEY_DHX == 1 - - def x25519_supported(self) -> bool: - return not self._fips_enabled - - def x448_supported(self) -> bool: - if self._fips_enabled: - return False - return ( - not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL - and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC - ) - - def ed25519_supported(self) -> bool: - return not self._fips_enabled - - def ed448_supported(self) -> bool: - if self._fips_enabled: - return False - return ( - not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL - and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC - ) - - def ecdsa_deterministic_supported(self) -> bool: - return ( - rust_openssl.CRYPTOGRAPHY_OPENSSL_320_OR_GREATER - and not self._fips_enabled - ) - - def poly1305_supported(self) -> bool: - return not self._fips_enabled - - def pkcs7_supported(self) -> bool: - return ( - not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC - ) - - -backend = Backend() diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__init__.py deleted file mode 100644 index b509336..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 83da17b..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust.abi3.so b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust.abi3.so deleted file mode 100755 index edefdfc..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi deleted file mode 100644 index 2f4eef4..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi +++ /dev/null @@ -1,37 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives import padding -from cryptography.utils import Buffer - -class PKCS7PaddingContext(padding.PaddingContext): - def __init__(self, block_size: int) -> None: ... - def update(self, data: Buffer) -> bytes: ... - def finalize(self) -> bytes: ... - -class ANSIX923PaddingContext(padding.PaddingContext): - def __init__(self, block_size: int) -> None: ... - def update(self, data: Buffer) -> bytes: ... - def finalize(self) -> bytes: ... - -class PKCS7UnpaddingContext(padding.PaddingContext): - def __init__(self, block_size: int) -> None: ... - def update(self, data: Buffer) -> bytes: ... - def finalize(self) -> bytes: ... - -class ANSIX923UnpaddingContext(padding.PaddingContext): - def __init__(self, block_size: int) -> None: ... - def update(self, data: Buffer) -> bytes: ... - def finalize(self) -> bytes: ... - -class ObjectIdentifier: - def __init__(self, value: str) -> None: ... - @property - def dotted_string(self) -> str: ... - @property - def _name(self) -> str: ... - -T = typing.TypeVar("T") diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi deleted file mode 100644 index 8010008..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi +++ /dev/null @@ -1,8 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -lib = typing.Any -ffi = typing.Any diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi deleted file mode 100644 index 3b5f208..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi +++ /dev/null @@ -1,7 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -def decode_dss_signature(signature: bytes) -> tuple[int, int]: ... -def encode_dss_signature(r: int, s: int) -> bytes: ... -def parse_spki_for_data(data: bytes) -> bytes: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi deleted file mode 100644 index 8563c11..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi +++ /dev/null @@ -1,32 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -import typing - -def encode_der(value: typing.Any) -> bytes: ... -def non_root_python_to_rust(cls: type) -> Type: ... - -# Type is a Rust enum with tuple variants. For now, we express the type -# annotations like this: -class Type: - Sequence: typing.ClassVar[type] - PyInt: typing.ClassVar[type] - -class Annotation: - def __new__( - cls, - ) -> Annotation: ... - -class AnnotatedType: - inner: Type - annotation: Annotation - - def __new__(cls, inner: Type, annotation: Annotation) -> AnnotatedType: ... - -class AnnotatedTypeObject: - annotated_type: AnnotatedType - value: typing.Any - - def __new__( - cls, annotated_type: AnnotatedType, value: typing.Any - ) -> AnnotatedTypeObject: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi deleted file mode 100644 index 09f46b1..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi +++ /dev/null @@ -1,17 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -class _Reasons: - BACKEND_MISSING_INTERFACE: _Reasons - UNSUPPORTED_HASH: _Reasons - UNSUPPORTED_CIPHER: _Reasons - UNSUPPORTED_PADDING: _Reasons - UNSUPPORTED_MGF: _Reasons - UNSUPPORTED_PUBLIC_KEY_ALGORITHM: _Reasons - UNSUPPORTED_ELLIPTIC_CURVE: _Reasons - UNSUPPORTED_SERIALIZATION: _Reasons - UNSUPPORTED_X509: _Reasons - UNSUPPORTED_EXCHANGE_ALGORITHM: _Reasons - UNSUPPORTED_DIFFIE_HELLMAN: _Reasons - UNSUPPORTED_MAC: _Reasons diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi deleted file mode 100644 index 103e96c..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi +++ /dev/null @@ -1,117 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import datetime -from collections.abc import Iterator - -from cryptography import x509 -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes -from cryptography.x509 import ocsp - -class OCSPRequest: - @property - def issuer_key_hash(self) -> bytes: ... - @property - def issuer_name_hash(self) -> bytes: ... - @property - def hash_algorithm(self) -> hashes.HashAlgorithm: ... - @property - def serial_number(self) -> int: ... - def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... - @property - def extensions(self) -> x509.Extensions: ... - -class OCSPResponse: - @property - def responses(self) -> Iterator[OCSPSingleResponse]: ... - @property - def response_status(self) -> ocsp.OCSPResponseStatus: ... - @property - def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... - @property - def signature_hash_algorithm( - self, - ) -> hashes.HashAlgorithm | None: ... - @property - def signature(self) -> bytes: ... - @property - def tbs_response_bytes(self) -> bytes: ... - @property - def certificates(self) -> list[x509.Certificate]: ... - @property - def responder_key_hash(self) -> bytes | None: ... - @property - def responder_name(self) -> x509.Name | None: ... - @property - def produced_at(self) -> datetime.datetime: ... - @property - def produced_at_utc(self) -> datetime.datetime: ... - @property - def certificate_status(self) -> ocsp.OCSPCertStatus: ... - @property - def revocation_time(self) -> datetime.datetime | None: ... - @property - def revocation_time_utc(self) -> datetime.datetime | None: ... - @property - def revocation_reason(self) -> x509.ReasonFlags | None: ... - @property - def this_update(self) -> datetime.datetime: ... - @property - def this_update_utc(self) -> datetime.datetime: ... - @property - def next_update(self) -> datetime.datetime | None: ... - @property - def next_update_utc(self) -> datetime.datetime | None: ... - @property - def issuer_key_hash(self) -> bytes: ... - @property - def issuer_name_hash(self) -> bytes: ... - @property - def hash_algorithm(self) -> hashes.HashAlgorithm: ... - @property - def serial_number(self) -> int: ... - @property - def extensions(self) -> x509.Extensions: ... - @property - def single_extensions(self) -> x509.Extensions: ... - def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... - -class OCSPSingleResponse: - @property - def certificate_status(self) -> ocsp.OCSPCertStatus: ... - @property - def revocation_time(self) -> datetime.datetime | None: ... - @property - def revocation_time_utc(self) -> datetime.datetime | None: ... - @property - def revocation_reason(self) -> x509.ReasonFlags | None: ... - @property - def this_update(self) -> datetime.datetime: ... - @property - def this_update_utc(self) -> datetime.datetime: ... - @property - def next_update(self) -> datetime.datetime | None: ... - @property - def next_update_utc(self) -> datetime.datetime | None: ... - @property - def issuer_key_hash(self) -> bytes: ... - @property - def issuer_name_hash(self) -> bytes: ... - @property - def hash_algorithm(self) -> hashes.HashAlgorithm: ... - @property - def serial_number(self) -> int: ... - -def load_der_ocsp_request(data: bytes) -> ocsp.OCSPRequest: ... -def load_der_ocsp_response(data: bytes) -> ocsp.OCSPResponse: ... -def create_ocsp_request( - builder: ocsp.OCSPRequestBuilder, -) -> ocsp.OCSPRequest: ... -def create_ocsp_response( - status: ocsp.OCSPResponseStatus, - builder: ocsp.OCSPResponseBuilder | None, - private_key: PrivateKeyTypes | None, - hash_algorithm: hashes.HashAlgorithm | None, -) -> ocsp.OCSPResponse: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi deleted file mode 100644 index 5fb3cb2..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi +++ /dev/null @@ -1,75 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.bindings._rust.openssl import ( - aead, - ciphers, - cmac, - dh, - dsa, - ec, - ed448, - ed25519, - hashes, - hmac, - kdf, - keys, - poly1305, - rsa, - x448, - x25519, -) - -__all__ = [ - "aead", - "ciphers", - "cmac", - "dh", - "dsa", - "ec", - "ed448", - "ed25519", - "hashes", - "hmac", - "kdf", - "keys", - "openssl_version", - "openssl_version_text", - "poly1305", - "raise_openssl_error", - "rsa", - "x448", - "x25519", -] - -CRYPTOGRAPHY_IS_LIBRESSL: bool -CRYPTOGRAPHY_IS_BORINGSSL: bool -CRYPTOGRAPHY_IS_AWSLC: bool -CRYPTOGRAPHY_OPENSSL_300_OR_GREATER: bool -CRYPTOGRAPHY_OPENSSL_309_OR_GREATER: bool -CRYPTOGRAPHY_OPENSSL_320_OR_GREATER: bool -CRYPTOGRAPHY_OPENSSL_330_OR_GREATER: bool -CRYPTOGRAPHY_OPENSSL_350_OR_GREATER: bool - -class Providers: ... - -_legacy_provider_loaded: bool -_providers: Providers - -def openssl_version() -> int: ... -def openssl_version_text() -> str: ... -def raise_openssl_error() -> typing.NoReturn: ... -def capture_error_stack() -> list[OpenSSLError]: ... -def is_fips_enabled() -> bool: ... -def enable_fips(providers: Providers) -> None: ... - -class OpenSSLError: - @property - def lib(self) -> int: ... - @property - def reason(self) -> int: ... - @property - def reason_text(self) -> bytes: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi deleted file mode 100644 index 831fcd1..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +++ /dev/null @@ -1,107 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from collections.abc import Sequence - -from cryptography.utils import Buffer - -class AESGCM: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_key(bit_length: int) -> bytes: ... - def encrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - def decrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - -class ChaCha20Poly1305: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_key() -> bytes: ... - def encrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - def decrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - -class AESCCM: - def __init__(self, key: Buffer, tag_length: int = 16) -> None: ... - @staticmethod - def generate_key(bit_length: int) -> bytes: ... - def encrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - def decrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - -class AESSIV: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_key(bit_length: int) -> bytes: ... - def encrypt( - self, - data: Buffer, - associated_data: Sequence[Buffer] | None, - ) -> bytes: ... - def decrypt( - self, - data: Buffer, - associated_data: Sequence[Buffer] | None, - ) -> bytes: ... - -class AESOCB3: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_key(bit_length: int) -> bytes: ... - def encrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - def decrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - -class AESGCMSIV: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_key(bit_length: int) -> bytes: ... - def encrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... - def decrypt( - self, - nonce: Buffer, - data: Buffer, - associated_data: Buffer | None, - ) -> bytes: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi deleted file mode 100644 index a48fb01..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi +++ /dev/null @@ -1,38 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives import ciphers -from cryptography.hazmat.primitives.ciphers import modes - -@typing.overload -def create_encryption_ctx( - algorithm: ciphers.CipherAlgorithm, mode: modes.ModeWithAuthenticationTag -) -> ciphers.AEADEncryptionContext: ... -@typing.overload -def create_encryption_ctx( - algorithm: ciphers.CipherAlgorithm, mode: modes.Mode | None -) -> ciphers.CipherContext: ... -@typing.overload -def create_decryption_ctx( - algorithm: ciphers.CipherAlgorithm, mode: modes.ModeWithAuthenticationTag -) -> ciphers.AEADDecryptionContext: ... -@typing.overload -def create_decryption_ctx( - algorithm: ciphers.CipherAlgorithm, mode: modes.Mode | None -) -> ciphers.CipherContext: ... -def cipher_supported( - algorithm: ciphers.CipherAlgorithm, mode: modes.Mode -) -> bool: ... -def _advance( - ctx: ciphers.AEADEncryptionContext | ciphers.AEADDecryptionContext, n: int -) -> None: ... -def _advance_aad( - ctx: ciphers.AEADEncryptionContext | ciphers.AEADDecryptionContext, n: int -) -> None: ... - -class CipherContext: ... -class AEADEncryptionContext: ... -class AEADDecryptionContext: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi deleted file mode 100644 index 9c03508..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +++ /dev/null @@ -1,18 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives import ciphers - -class CMAC: - def __init__( - self, - algorithm: ciphers.BlockCipherAlgorithm, - backend: typing.Any = None, - ) -> None: ... - def update(self, data: bytes) -> None: ... - def finalize(self) -> bytes: ... - def verify(self, signature: bytes) -> None: ... - def copy(self) -> CMAC: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi deleted file mode 100644 index 08733d7..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi +++ /dev/null @@ -1,51 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.asymmetric import dh - -MIN_MODULUS_SIZE: int - -class DHPrivateKey: ... -class DHPublicKey: ... -class DHParameters: ... - -class DHPrivateNumbers: - def __init__(self, x: int, public_numbers: DHPublicNumbers) -> None: ... - def private_key(self, backend: typing.Any = None) -> dh.DHPrivateKey: ... - @property - def x(self) -> int: ... - @property - def public_numbers(self) -> DHPublicNumbers: ... - -class DHPublicNumbers: - def __init__( - self, y: int, parameter_numbers: DHParameterNumbers - ) -> None: ... - def public_key(self, backend: typing.Any = None) -> dh.DHPublicKey: ... - @property - def y(self) -> int: ... - @property - def parameter_numbers(self) -> DHParameterNumbers: ... - -class DHParameterNumbers: - def __init__(self, p: int, g: int, q: int | None = None) -> None: ... - def parameters(self, backend: typing.Any = None) -> dh.DHParameters: ... - @property - def p(self) -> int: ... - @property - def g(self) -> int: ... - @property - def q(self) -> int | None: ... - -def generate_parameters( - generator: int, key_size: int, backend: typing.Any = None -) -> dh.DHParameters: ... -def from_pem_parameters( - data: bytes, backend: typing.Any = None -) -> dh.DHParameters: ... -def from_der_parameters( - data: bytes, backend: typing.Any = None -) -> dh.DHParameters: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi deleted file mode 100644 index 0922a4c..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi +++ /dev/null @@ -1,41 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.asymmetric import dsa - -class DSAPrivateKey: ... -class DSAPublicKey: ... -class DSAParameters: ... - -class DSAPrivateNumbers: - def __init__(self, x: int, public_numbers: DSAPublicNumbers) -> None: ... - @property - def x(self) -> int: ... - @property - def public_numbers(self) -> DSAPublicNumbers: ... - def private_key(self, backend: typing.Any = None) -> dsa.DSAPrivateKey: ... - -class DSAPublicNumbers: - def __init__( - self, y: int, parameter_numbers: DSAParameterNumbers - ) -> None: ... - @property - def y(self) -> int: ... - @property - def parameter_numbers(self) -> DSAParameterNumbers: ... - def public_key(self, backend: typing.Any = None) -> dsa.DSAPublicKey: ... - -class DSAParameterNumbers: - def __init__(self, p: int, q: int, g: int) -> None: ... - @property - def p(self) -> int: ... - @property - def q(self) -> int: ... - @property - def g(self) -> int: ... - def parameters(self, backend: typing.Any = None) -> dsa.DSAParameters: ... - -def generate_parameters(key_size: int) -> dsa.DSAParameters: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi deleted file mode 100644 index 5c3b7bf..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +++ /dev/null @@ -1,52 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.asymmetric import ec - -class ECPrivateKey: ... -class ECPublicKey: ... - -class EllipticCurvePrivateNumbers: - def __init__( - self, private_value: int, public_numbers: EllipticCurvePublicNumbers - ) -> None: ... - def private_key( - self, backend: typing.Any = None - ) -> ec.EllipticCurvePrivateKey: ... - @property - def private_value(self) -> int: ... - @property - def public_numbers(self) -> EllipticCurvePublicNumbers: ... - -class EllipticCurvePublicNumbers: - def __init__(self, x: int, y: int, curve: ec.EllipticCurve) -> None: ... - def public_key( - self, backend: typing.Any = None - ) -> ec.EllipticCurvePublicKey: ... - @property - def x(self) -> int: ... - @property - def y(self) -> int: ... - @property - def curve(self) -> ec.EllipticCurve: ... - def __eq__(self, other: object) -> bool: ... - -def curve_supported(curve: ec.EllipticCurve) -> bool: ... -def generate_private_key( - curve: ec.EllipticCurve, backend: typing.Any = None -) -> ec.EllipticCurvePrivateKey: ... -def from_private_numbers( - numbers: ec.EllipticCurvePrivateNumbers, -) -> ec.EllipticCurvePrivateKey: ... -def from_public_numbers( - numbers: ec.EllipticCurvePublicNumbers, -) -> ec.EllipticCurvePublicKey: ... -def from_public_bytes( - curve: ec.EllipticCurve, data: bytes -) -> ec.EllipticCurvePublicKey: ... -def derive_private_key( - private_value: int, curve: ec.EllipticCurve -) -> ec.EllipticCurvePrivateKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi deleted file mode 100644 index f85b3d1..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.primitives.asymmetric import ed25519 -from cryptography.utils import Buffer - -class Ed25519PrivateKey: ... -class Ed25519PublicKey: ... - -def generate_key() -> ed25519.Ed25519PrivateKey: ... -def from_private_bytes(data: Buffer) -> ed25519.Ed25519PrivateKey: ... -def from_public_bytes(data: bytes) -> ed25519.Ed25519PublicKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi deleted file mode 100644 index c8ca0ec..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.primitives.asymmetric import ed448 -from cryptography.utils import Buffer - -class Ed448PrivateKey: ... -class Ed448PublicKey: ... - -def generate_key() -> ed448.Ed448PrivateKey: ... -def from_private_bytes(data: Buffer) -> ed448.Ed448PrivateKey: ... -def from_public_bytes(data: bytes) -> ed448.Ed448PublicKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi deleted file mode 100644 index 6bfd295..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi +++ /dev/null @@ -1,28 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives import hashes -from cryptography.utils import Buffer - -class Hash(hashes.HashContext): - def __init__( - self, algorithm: hashes.HashAlgorithm, backend: typing.Any = None - ) -> None: ... - @property - def algorithm(self) -> hashes.HashAlgorithm: ... - def update(self, data: Buffer) -> None: ... - def finalize(self) -> bytes: ... - def copy(self) -> Hash: ... - -def hash_supported(algorithm: hashes.HashAlgorithm) -> bool: ... - -class XOFHash: - def __init__(self, algorithm: hashes.ExtendableOutputFunction) -> None: ... - @property - def algorithm(self) -> hashes.ExtendableOutputFunction: ... - def update(self, data: Buffer) -> None: ... - def squeeze(self, length: int) -> bytes: ... - def copy(self) -> XOFHash: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi deleted file mode 100644 index 3883d1b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +++ /dev/null @@ -1,22 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives import hashes -from cryptography.utils import Buffer - -class HMAC(hashes.HashContext): - def __init__( - self, - key: Buffer, - algorithm: hashes.HashAlgorithm, - backend: typing.Any = None, - ) -> None: ... - @property - def algorithm(self) -> hashes.HashAlgorithm: ... - def update(self, data: Buffer) -> None: ... - def finalize(self) -> bytes: ... - def verify(self, signature: bytes) -> None: ... - def copy(self) -> HMAC: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi deleted file mode 100644 index 9e2d8d9..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +++ /dev/null @@ -1,72 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.hashes import HashAlgorithm -from cryptography.utils import Buffer - -def derive_pbkdf2_hmac( - key_material: Buffer, - algorithm: HashAlgorithm, - salt: bytes, - iterations: int, - length: int, -) -> bytes: ... - -class Scrypt: - def __init__( - self, - salt: bytes, - length: int, - n: int, - r: int, - p: int, - backend: typing.Any = None, - ) -> None: ... - def derive(self, key_material: Buffer) -> bytes: ... - def verify(self, key_material: bytes, expected_key: bytes) -> None: ... - -class Argon2id: - def __init__( - self, - *, - salt: bytes, - length: int, - iterations: int, - lanes: int, - memory_cost: int, - ad: bytes | None = None, - secret: bytes | None = None, - ) -> None: ... - def derive(self, key_material: bytes) -> bytes: ... - def verify(self, key_material: bytes, expected_key: bytes) -> None: ... - def derive_phc_encoded(self, key_material: bytes) -> str: ... - @classmethod - def verify_phc_encoded( - cls, key_material: bytes, phc_encoded: str, secret: bytes | None = None - ) -> None: ... - -class HKDF: - def __init__( - self, - algorithm: HashAlgorithm, - length: int, - salt: bytes | None, - info: bytes | None, - backend: typing.Any = None, - ): ... - def derive(self, key_material: Buffer) -> bytes: ... - def verify(self, key_material: bytes, expected_key: bytes) -> None: ... - -class HKDFExpand: - def __init__( - self, - algorithm: HashAlgorithm, - length: int, - info: bytes | None, - backend: typing.Any = None, - ): ... - def derive(self, key_material: Buffer) -> bytes: ... - def verify(self, key_material: bytes, expected_key: bytes) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi deleted file mode 100644 index 404057e..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi +++ /dev/null @@ -1,34 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.asymmetric.types import ( - PrivateKeyTypes, - PublicKeyTypes, -) -from cryptography.utils import Buffer - -def load_der_private_key( - data: Buffer, - password: bytes | None, - backend: typing.Any = None, - *, - unsafe_skip_rsa_key_validation: bool = False, -) -> PrivateKeyTypes: ... -def load_pem_private_key( - data: Buffer, - password: bytes | None, - backend: typing.Any = None, - *, - unsafe_skip_rsa_key_validation: bool = False, -) -> PrivateKeyTypes: ... -def load_der_public_key( - data: bytes, - backend: typing.Any = None, -) -> PublicKeyTypes: ... -def load_pem_public_key( - data: bytes, - backend: typing.Any = None, -) -> PublicKeyTypes: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi deleted file mode 100644 index 45a2a39..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +++ /dev/null @@ -1,15 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.utils import Buffer - -class Poly1305: - def __init__(self, key: Buffer) -> None: ... - @staticmethod - def generate_tag(key: Buffer, data: Buffer) -> bytes: ... - @staticmethod - def verify_tag(key: Buffer, data: Buffer, tag: bytes) -> None: ... - def update(self, data: Buffer) -> None: ... - def finalize(self) -> bytes: ... - def verify(self, tag: bytes) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi deleted file mode 100644 index ef7752d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +++ /dev/null @@ -1,55 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - -from cryptography.hazmat.primitives.asymmetric import rsa - -class RSAPrivateKey: ... -class RSAPublicKey: ... - -class RSAPrivateNumbers: - def __init__( - self, - p: int, - q: int, - d: int, - dmp1: int, - dmq1: int, - iqmp: int, - public_numbers: RSAPublicNumbers, - ) -> None: ... - @property - def p(self) -> int: ... - @property - def q(self) -> int: ... - @property - def d(self) -> int: ... - @property - def dmp1(self) -> int: ... - @property - def dmq1(self) -> int: ... - @property - def iqmp(self) -> int: ... - @property - def public_numbers(self) -> RSAPublicNumbers: ... - def private_key( - self, - backend: typing.Any = None, - *, - unsafe_skip_rsa_key_validation: bool = False, - ) -> rsa.RSAPrivateKey: ... - -class RSAPublicNumbers: - def __init__(self, e: int, n: int) -> None: ... - @property - def n(self) -> int: ... - @property - def e(self) -> int: ... - def public_key(self, backend: typing.Any = None) -> rsa.RSAPublicKey: ... - -def generate_private_key( - public_exponent: int, - key_size: int, -) -> rsa.RSAPrivateKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi deleted file mode 100644 index 38d2add..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.primitives.asymmetric import x25519 -from cryptography.utils import Buffer - -class X25519PrivateKey: ... -class X25519PublicKey: ... - -def generate_key() -> x25519.X25519PrivateKey: ... -def from_private_bytes(data: Buffer) -> x25519.X25519PrivateKey: ... -def from_public_bytes(data: bytes) -> x25519.X25519PublicKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi deleted file mode 100644 index 3ac0980..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.primitives.asymmetric import x448 -from cryptography.utils import Buffer - -class X448PrivateKey: ... -class X448PublicKey: ... - -def generate_key() -> x448.X448PrivateKey: ... -def from_private_bytes(data: Buffer) -> x448.X448PrivateKey: ... -def from_public_bytes(data: bytes) -> x448.X448PublicKey: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi deleted file mode 100644 index b25becb..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi +++ /dev/null @@ -1,52 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing -from collections.abc import Iterable - -from cryptography import x509 -from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes -from cryptography.hazmat.primitives.serialization import ( - KeySerializationEncryption, -) -from cryptography.hazmat.primitives.serialization.pkcs12 import ( - PKCS12KeyAndCertificates, - PKCS12PrivateKeyTypes, -) -from cryptography.utils import Buffer - -class PKCS12Certificate: - def __init__( - self, cert: x509.Certificate, friendly_name: bytes | None - ) -> None: ... - @property - def friendly_name(self) -> bytes | None: ... - @property - def certificate(self) -> x509.Certificate: ... - -def load_key_and_certificates( - data: Buffer, - password: Buffer | None, - backend: typing.Any = None, -) -> tuple[ - PrivateKeyTypes | None, - x509.Certificate | None, - list[x509.Certificate], -]: ... -def load_pkcs12( - data: bytes, - password: bytes | None, - backend: typing.Any = None, -) -> PKCS12KeyAndCertificates: ... -def serialize_java_truststore( - certs: Iterable[PKCS12Certificate], - encryption_algorithm: KeySerializationEncryption, -) -> bytes: ... -def serialize_key_and_certificates( - name: bytes | None, - key: PKCS12PrivateKeyTypes | None, - cert: x509.Certificate | None, - cas: Iterable[x509.Certificate | PKCS12Certificate] | None, - encryption_algorithm: KeySerializationEncryption, -) -> bytes: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi deleted file mode 100644 index 358b135..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi +++ /dev/null @@ -1,50 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from collections.abc import Iterable - -from cryptography import x509 -from cryptography.hazmat.primitives import serialization -from cryptography.hazmat.primitives.asymmetric import rsa -from cryptography.hazmat.primitives.serialization import pkcs7 - -def serialize_certificates( - certs: list[x509.Certificate], - encoding: serialization.Encoding, -) -> bytes: ... -def encrypt_and_serialize( - builder: pkcs7.PKCS7EnvelopeBuilder, - content_encryption_algorithm: pkcs7.ContentEncryptionAlgorithm, - encoding: serialization.Encoding, - options: Iterable[pkcs7.PKCS7Options], -) -> bytes: ... -def sign_and_serialize( - builder: pkcs7.PKCS7SignatureBuilder, - encoding: serialization.Encoding, - options: Iterable[pkcs7.PKCS7Options], -) -> bytes: ... -def decrypt_der( - data: bytes, - certificate: x509.Certificate, - private_key: rsa.RSAPrivateKey, - options: Iterable[pkcs7.PKCS7Options], -) -> bytes: ... -def decrypt_pem( - data: bytes, - certificate: x509.Certificate, - private_key: rsa.RSAPrivateKey, - options: Iterable[pkcs7.PKCS7Options], -) -> bytes: ... -def decrypt_smime( - data: bytes, - certificate: x509.Certificate, - private_key: rsa.RSAPrivateKey, - options: Iterable[pkcs7.PKCS7Options], -) -> bytes: ... -def load_pem_pkcs7_certificates( - data: bytes, -) -> list[x509.Certificate]: ... -def load_der_pkcs7_certificates( - data: bytes, -) -> list[x509.Certificate]: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi deleted file mode 100644 index c6c6d0b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi +++ /dev/null @@ -1,23 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography import x509 -from cryptography.hazmat.primitives import serialization -from cryptography.hazmat.primitives.serialization import pkcs7 -from cryptography.utils import Buffer - -class TestCertificate: - not_after_tag: int - not_before_tag: int - issuer_value_tags: list[int] - subject_value_tags: list[int] - -def test_parse_certificate(data: bytes) -> TestCertificate: ... -def pkcs7_verify( - encoding: serialization.Encoding, - sig: bytes, - msg: Buffer | None, - certs: list[x509.Certificate], - options: list[pkcs7.PKCS7Options], -) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi deleted file mode 100644 index 83c3441..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi +++ /dev/null @@ -1,301 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import datetime -import typing -from collections.abc import Iterator - -from cryptography import x509 -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric.ec import ECDSA -from cryptography.hazmat.primitives.asymmetric.padding import PSS, PKCS1v15 -from cryptography.hazmat.primitives.asymmetric.types import ( - CertificateIssuerPublicKeyTypes, - CertificatePublicKeyTypes, - PrivateKeyTypes, -) -from cryptography.x509 import certificate_transparency - -def load_pem_x509_certificate( - data: bytes, backend: typing.Any = None -) -> x509.Certificate: ... -def load_der_x509_certificate( - data: bytes, backend: typing.Any = None -) -> x509.Certificate: ... -def load_pem_x509_certificates( - data: bytes, -) -> list[x509.Certificate]: ... -def load_pem_x509_crl( - data: bytes, backend: typing.Any = None -) -> x509.CertificateRevocationList: ... -def load_der_x509_crl( - data: bytes, backend: typing.Any = None -) -> x509.CertificateRevocationList: ... -def load_pem_x509_csr( - data: bytes, backend: typing.Any = None -) -> x509.CertificateSigningRequest: ... -def load_der_x509_csr( - data: bytes, backend: typing.Any = None -) -> x509.CertificateSigningRequest: ... -def encode_name_bytes(name: x509.Name) -> bytes: ... -def encode_extension_value(extension: x509.ExtensionType) -> bytes: ... -def create_x509_certificate( - builder: x509.CertificateBuilder, - private_key: PrivateKeyTypes, - hash_algorithm: hashes.HashAlgorithm | None, - rsa_padding: PKCS1v15 | PSS | None, - ecdsa_deterministic: bool | None, -) -> x509.Certificate: ... -def create_x509_csr( - builder: x509.CertificateSigningRequestBuilder, - private_key: PrivateKeyTypes, - hash_algorithm: hashes.HashAlgorithm | None, - rsa_padding: PKCS1v15 | PSS | None, - ecdsa_deterministic: bool | None, -) -> x509.CertificateSigningRequest: ... -def create_x509_crl( - builder: x509.CertificateRevocationListBuilder, - private_key: PrivateKeyTypes, - hash_algorithm: hashes.HashAlgorithm | None, - rsa_padding: PKCS1v15 | PSS | None, - ecdsa_deterministic: bool | None, -) -> x509.CertificateRevocationList: ... - -class Sct: - @property - def version(self) -> certificate_transparency.Version: ... - @property - def log_id(self) -> bytes: ... - @property - def timestamp(self) -> datetime.datetime: ... - @property - def entry_type(self) -> certificate_transparency.LogEntryType: ... - @property - def signature_hash_algorithm(self) -> hashes.HashAlgorithm: ... - @property - def signature_algorithm( - self, - ) -> certificate_transparency.SignatureAlgorithm: ... - @property - def signature(self) -> bytes: ... - @property - def extension_bytes(self) -> bytes: ... - -class Certificate: - def fingerprint(self, algorithm: hashes.HashAlgorithm) -> bytes: ... - @property - def serial_number(self) -> int: ... - @property - def version(self) -> x509.Version: ... - def public_key(self) -> CertificatePublicKeyTypes: ... - @property - def public_key_algorithm_oid(self) -> x509.ObjectIdentifier: ... - @property - def not_valid_before(self) -> datetime.datetime: ... - @property - def not_valid_before_utc(self) -> datetime.datetime: ... - @property - def not_valid_after(self) -> datetime.datetime: ... - @property - def not_valid_after_utc(self) -> datetime.datetime: ... - @property - def issuer(self) -> x509.Name: ... - @property - def subject(self) -> x509.Name: ... - @property - def signature_hash_algorithm( - self, - ) -> hashes.HashAlgorithm | None: ... - @property - def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... - @property - def signature_algorithm_parameters( - self, - ) -> PSS | PKCS1v15 | ECDSA | None: ... - @property - def extensions(self) -> x509.Extensions: ... - @property - def signature(self) -> bytes: ... - @property - def tbs_certificate_bytes(self) -> bytes: ... - @property - def tbs_precertificate_bytes(self) -> bytes: ... - def __eq__(self, other: object) -> bool: ... - def __hash__(self) -> int: ... - def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... - def verify_directly_issued_by(self, issuer: Certificate) -> None: ... - -class RevokedCertificate: ... - -class CertificateRevocationList: - def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... - def fingerprint(self, algorithm: hashes.HashAlgorithm) -> bytes: ... - def get_revoked_certificate_by_serial_number( - self, serial_number: int - ) -> x509.RevokedCertificate | None: ... - @property - def signature_hash_algorithm( - self, - ) -> hashes.HashAlgorithm | None: ... - @property - def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... - @property - def signature_algorithm_parameters( - self, - ) -> PSS | PKCS1v15 | ECDSA | None: ... - @property - def issuer(self) -> x509.Name: ... - @property - def next_update(self) -> datetime.datetime | None: ... - @property - def next_update_utc(self) -> datetime.datetime | None: ... - @property - def last_update(self) -> datetime.datetime: ... - @property - def last_update_utc(self) -> datetime.datetime: ... - @property - def extensions(self) -> x509.Extensions: ... - @property - def signature(self) -> bytes: ... - @property - def tbs_certlist_bytes(self) -> bytes: ... - def __eq__(self, other: object) -> bool: ... - def __len__(self) -> int: ... - @typing.overload - def __getitem__(self, idx: int) -> x509.RevokedCertificate: ... - @typing.overload - def __getitem__(self, idx: slice) -> list[x509.RevokedCertificate]: ... - def __iter__(self) -> Iterator[x509.RevokedCertificate]: ... - def is_signature_valid( - self, public_key: CertificateIssuerPublicKeyTypes - ) -> bool: ... - -class CertificateSigningRequest: - def __eq__(self, other: object) -> bool: ... - def __hash__(self) -> int: ... - def public_key(self) -> CertificatePublicKeyTypes: ... - @property - def subject(self) -> x509.Name: ... - @property - def signature_hash_algorithm( - self, - ) -> hashes.HashAlgorithm | None: ... - @property - def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... - @property - def signature_algorithm_parameters( - self, - ) -> PSS | PKCS1v15 | ECDSA | None: ... - @property - def extensions(self) -> x509.Extensions: ... - @property - def attributes(self) -> x509.Attributes: ... - def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... - @property - def signature(self) -> bytes: ... - @property - def tbs_certrequest_bytes(self) -> bytes: ... - @property - def is_signature_valid(self) -> bool: ... - -class PolicyBuilder: - def time(self, time: datetime.datetime) -> PolicyBuilder: ... - def store(self, store: Store) -> PolicyBuilder: ... - def max_chain_depth(self, max_chain_depth: int) -> PolicyBuilder: ... - def extension_policies( - self, *, ca_policy: ExtensionPolicy, ee_policy: ExtensionPolicy - ) -> PolicyBuilder: ... - def build_client_verifier(self) -> ClientVerifier: ... - def build_server_verifier( - self, subject: x509.verification.Subject - ) -> ServerVerifier: ... - -class Policy: - @property - def max_chain_depth(self) -> int: ... - @property - def subject(self) -> x509.verification.Subject | None: ... - @property - def validation_time(self) -> datetime.datetime: ... - @property - def extended_key_usage(self) -> x509.ObjectIdentifier: ... - @property - def minimum_rsa_modulus(self) -> int: ... - -class Criticality: - CRITICAL: Criticality - AGNOSTIC: Criticality - NON_CRITICAL: Criticality - -T = typing.TypeVar("T", contravariant=True, bound=x509.ExtensionType) - -MaybeExtensionValidatorCallback = typing.Callable[ - [ - Policy, - x509.Certificate, - T | None, - ], - None, -] - -PresentExtensionValidatorCallback = typing.Callable[ - [Policy, x509.Certificate, T], - None, -] - -class ExtensionPolicy: - @staticmethod - def permit_all() -> ExtensionPolicy: ... - @staticmethod - def webpki_defaults_ca() -> ExtensionPolicy: ... - @staticmethod - def webpki_defaults_ee() -> ExtensionPolicy: ... - def require_not_present( - self, extension_type: type[x509.ExtensionType] - ) -> ExtensionPolicy: ... - def may_be_present( - self, - extension_type: type[T], - criticality: Criticality, - validator: MaybeExtensionValidatorCallback[T] | None, - ) -> ExtensionPolicy: ... - def require_present( - self, - extension_type: type[T], - criticality: Criticality, - validator: PresentExtensionValidatorCallback[T] | None, - ) -> ExtensionPolicy: ... - -class VerifiedClient: - @property - def subjects(self) -> list[x509.GeneralName] | None: ... - @property - def chain(self) -> list[x509.Certificate]: ... - -class ClientVerifier: - @property - def policy(self) -> Policy: ... - @property - def store(self) -> Store: ... - def verify( - self, - leaf: x509.Certificate, - intermediates: list[x509.Certificate], - ) -> VerifiedClient: ... - -class ServerVerifier: - @property - def policy(self) -> Policy: ... - @property - def store(self) -> Store: ... - def verify( - self, - leaf: x509.Certificate, - intermediates: list[x509.Certificate], - ) -> list[x509.Certificate]: ... - -class Store: - def __init__(self, certs: list[x509.Certificate]) -> None: ... - -class VerificationError(Exception): ... diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py deleted file mode 100644 index b509336..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 82a2d25..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc deleted file mode 100644 index 6320cec..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc deleted file mode 100644 index 2433703..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py deleted file mode 100644 index 063bcf5..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +++ /dev/null @@ -1,207 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - - -def cryptography_has_set_cert_cb() -> list[str]: - return [ - "SSL_CTX_set_cert_cb", - "SSL_set_cert_cb", - ] - - -def cryptography_has_ssl_st() -> list[str]: - return [ - "SSL_ST_BEFORE", - "SSL_ST_OK", - "SSL_ST_INIT", - "SSL_ST_RENEGOTIATE", - ] - - -def cryptography_has_tls_st() -> list[str]: - return [ - "TLS_ST_BEFORE", - "TLS_ST_OK", - ] - - -def cryptography_has_ssl_sigalgs() -> list[str]: - return [ - "SSL_CTX_set1_sigalgs_list", - ] - - -def cryptography_has_psk() -> list[str]: - return [ - "SSL_CTX_use_psk_identity_hint", - "SSL_CTX_set_psk_server_callback", - "SSL_CTX_set_psk_client_callback", - ] - - -def cryptography_has_psk_tlsv13() -> list[str]: - return [ - "SSL_CTX_set_psk_find_session_callback", - "SSL_CTX_set_psk_use_session_callback", - "Cryptography_SSL_SESSION_new", - "SSL_CIPHER_find", - "SSL_SESSION_set1_master_key", - "SSL_SESSION_set_cipher", - "SSL_SESSION_set_protocol_version", - ] - - -def cryptography_has_custom_ext() -> list[str]: - return [ - "SSL_CTX_add_client_custom_ext", - "SSL_CTX_add_server_custom_ext", - "SSL_extension_supported", - ] - - -def cryptography_has_tlsv13_functions() -> list[str]: - return [ - "SSL_CTX_set_ciphersuites", - ] - - -def cryptography_has_tlsv13_hs_functions() -> list[str]: - return [ - "SSL_VERIFY_POST_HANDSHAKE", - "SSL_verify_client_post_handshake", - "SSL_CTX_set_post_handshake_auth", - "SSL_set_post_handshake_auth", - "SSL_SESSION_get_max_early_data", - "SSL_write_early_data", - "SSL_read_early_data", - "SSL_CTX_set_max_early_data", - ] - - -def cryptography_has_ssl_verify_client_post_handshake() -> list[str]: - return [ - "SSL_verify_client_post_handshake", - ] - - -def cryptography_has_engine() -> list[str]: - return [ - "ENGINE_by_id", - "ENGINE_init", - "ENGINE_finish", - "ENGINE_get_default_RAND", - "ENGINE_set_default_RAND", - "ENGINE_unregister_RAND", - "ENGINE_ctrl_cmd", - "ENGINE_free", - "ENGINE_get_name", - "ENGINE_ctrl_cmd_string", - "ENGINE_load_builtin_engines", - "ENGINE_load_private_key", - "ENGINE_load_public_key", - "SSL_CTX_set_client_cert_engine", - ] - - -def cryptography_has_verified_chain() -> list[str]: - return [ - "SSL_get0_verified_chain", - ] - - -def cryptography_has_srtp() -> list[str]: - return [ - "SSL_CTX_set_tlsext_use_srtp", - "SSL_set_tlsext_use_srtp", - "SSL_get_selected_srtp_profile", - ] - - -def cryptography_has_op_no_renegotiation() -> list[str]: - return [ - "SSL_OP_NO_RENEGOTIATION", - ] - - -def cryptography_has_dtls_get_data_mtu() -> list[str]: - return [ - "DTLS_get_data_mtu", - ] - - -def cryptography_has_ssl_cookie() -> list[str]: - return [ - "SSL_OP_COOKIE_EXCHANGE", - "DTLSv1_listen", - "SSL_CTX_set_cookie_generate_cb", - "SSL_CTX_set_cookie_verify_cb", - ] - - -def cryptography_has_prime_checks() -> list[str]: - return [ - "BN_prime_checks_for_size", - ] - - -def cryptography_has_unexpected_eof_while_reading() -> list[str]: - return ["SSL_R_UNEXPECTED_EOF_WHILE_READING"] - - -def cryptography_has_ssl_op_ignore_unexpected_eof() -> list[str]: - return [ - "SSL_OP_IGNORE_UNEXPECTED_EOF", - ] - - -def cryptography_has_get_extms_support() -> list[str]: - return ["SSL_get_extms_support"] - - -def cryptography_has_ssl_get0_group_name() -> list[str]: - return ["SSL_get0_group_name"] - - -# This is a mapping of -# {condition: function-returning-names-dependent-on-that-condition} so we can -# loop over them and delete unsupported names at runtime. It will be removed -# when cffi supports #if in cdef. We use functions instead of just a dict of -# lists so we can use coverage to measure which are used. -CONDITIONAL_NAMES = { - "Cryptography_HAS_SET_CERT_CB": cryptography_has_set_cert_cb, - "Cryptography_HAS_SSL_ST": cryptography_has_ssl_st, - "Cryptography_HAS_TLS_ST": cryptography_has_tls_st, - "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, - "Cryptography_HAS_PSK": cryptography_has_psk, - "Cryptography_HAS_PSK_TLSv1_3": cryptography_has_psk_tlsv13, - "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, - "Cryptography_HAS_TLSv1_3_FUNCTIONS": cryptography_has_tlsv13_functions, - "Cryptography_HAS_TLSv1_3_HS_FUNCTIONS": ( - cryptography_has_tlsv13_hs_functions - ), - "Cryptography_HAS_SSL_VERIFY_CLIENT_POST_HANDSHAKE": ( - cryptography_has_ssl_verify_client_post_handshake - ), - "Cryptography_HAS_ENGINE": cryptography_has_engine, - "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain, - "Cryptography_HAS_SRTP": cryptography_has_srtp, - "Cryptography_HAS_OP_NO_RENEGOTIATION": ( - cryptography_has_op_no_renegotiation - ), - "Cryptography_HAS_DTLS_GET_DATA_MTU": cryptography_has_dtls_get_data_mtu, - "Cryptography_HAS_SSL_COOKIE": cryptography_has_ssl_cookie, - "Cryptography_HAS_PRIME_CHECKS": cryptography_has_prime_checks, - "Cryptography_HAS_UNEXPECTED_EOF_WHILE_READING": ( - cryptography_has_unexpected_eof_while_reading - ), - "Cryptography_HAS_SSL_OP_IGNORE_UNEXPECTED_EOF": ( - cryptography_has_ssl_op_ignore_unexpected_eof - ), - "Cryptography_HAS_GET_EXTMS_SUPPORT": cryptography_has_get_extms_support, - "Cryptography_HAS_SSL_GET0_GROUP_NAME": ( - cryptography_has_ssl_get0_group_name - ), -} diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py deleted file mode 100644 index 4494c71..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py +++ /dev/null @@ -1,137 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import os -import sys -import threading -import types -import typing -import warnings -from collections.abc import Callable - -import cryptography -from cryptography.exceptions import InternalError -from cryptography.hazmat.bindings._rust import _openssl, openssl -from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES -from cryptography.utils import CryptographyDeprecationWarning - - -def _openssl_assert(ok: bool) -> None: - if not ok: - errors = openssl.capture_error_stack() - - raise InternalError( - "Unknown OpenSSL error. This error is commonly encountered when " - "another library is not cleaning up the OpenSSL error stack. If " - "you are using cryptography with another library that uses " - "OpenSSL try disabling it before reporting a bug. Otherwise " - "please file an issue at https://github.com/pyca/cryptography/" - "issues with information on how to reproduce " - f"this. ({errors!r})", - errors, - ) - - -def build_conditional_library( - lib: typing.Any, - conditional_names: dict[str, Callable[[], list[str]]], -) -> typing.Any: - conditional_lib = types.ModuleType("lib") - conditional_lib._original_lib = lib # type: ignore[attr-defined] - excluded_names = set() - for condition, names_cb in conditional_names.items(): - if not getattr(lib, condition): - excluded_names.update(names_cb()) - - for attr in dir(lib): - if attr not in excluded_names: - setattr(conditional_lib, attr, getattr(lib, attr)) - - return conditional_lib - - -class Binding: - """ - OpenSSL API wrapper. - """ - - lib: typing.ClassVar[typing.Any] = None - ffi = _openssl.ffi - _lib_loaded = False - _init_lock = threading.Lock() - - def __init__(self) -> None: - self._ensure_ffi_initialized() - - @classmethod - def _ensure_ffi_initialized(cls) -> None: - with cls._init_lock: - if not cls._lib_loaded: - cls.lib = build_conditional_library( - _openssl.lib, CONDITIONAL_NAMES - ) - cls._lib_loaded = True - - @classmethod - def init_static_locks(cls) -> None: - cls._ensure_ffi_initialized() - - -def _verify_package_version(version: str) -> None: - # Occasionally we run into situations where the version of the Python - # package does not match the version of the shared object that is loaded. - # This may occur in environments where multiple versions of cryptography - # are installed and available in the python path. To avoid errors cropping - # up later this code checks that the currently imported package and the - # shared object that were loaded have the same version and raise an - # ImportError if they do not - so_package_version = _openssl.ffi.string( - _openssl.lib.CRYPTOGRAPHY_PACKAGE_VERSION - ) - if version.encode("ascii") != so_package_version: - raise ImportError( - "The version of cryptography does not match the loaded " - "shared object. This can happen if you have multiple copies of " - "cryptography installed in your Python path. Please try creating " - "a new virtual environment to resolve this issue. " - f"Loaded python version: {version}, " - f"shared object version: {so_package_version}" - ) - - _openssl_assert( - _openssl.lib.OpenSSL_version_num() == openssl.openssl_version(), - ) - - -_verify_package_version(cryptography.__version__) - -Binding.init_static_locks() - -if ( - sys.platform == "win32" - and os.environ.get("PROCESSOR_ARCHITEW6432") is not None -): - warnings.warn( - "You are using cryptography on a 32-bit Python on a 64-bit Windows " - "Operating System. Cryptography will be significantly faster if you " - "switch to using a 64-bit Python.", - UserWarning, - stacklevel=2, - ) - -if ( - not openssl.CRYPTOGRAPHY_IS_LIBRESSL - and not openssl.CRYPTOGRAPHY_IS_BORINGSSL - and not openssl.CRYPTOGRAPHY_IS_AWSLC - and not openssl.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER -): - warnings.warn( - "You are using OpenSSL < 3.0. Support for OpenSSL < 3.0 is deprecated " - "and will be removed in the next release. Please upgrade to OpenSSL " - "3.0 or later.", - CryptographyDeprecationWarning, - stacklevel=2, - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__init__.py deleted file mode 100644 index 41d7318..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index ba21c6c..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py deleted file mode 100644 index 41d7318..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f6ea8ff..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc deleted file mode 100644 index edd16d9..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py deleted file mode 100644 index 072a991..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py +++ /dev/null @@ -1,112 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.primitives._cipheralgorithm import ( - BlockCipherAlgorithm, - CipherAlgorithm, - _verify_key_size, -) - - -class ARC4(CipherAlgorithm): - name = "RC4" - key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256]) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class TripleDES(BlockCipherAlgorithm): - name = "3DES" - block_size = 64 - key_sizes = frozenset([64, 128, 192]) - - def __init__(self, key: bytes): - if len(key) == 8: - key += key + key - elif len(key) == 16: - key += key[:8] - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -# Not actually supported, marker for tests -class _DES: - key_size = 64 - - -class Blowfish(BlockCipherAlgorithm): - name = "Blowfish" - block_size = 64 - key_sizes = frozenset(range(32, 449, 8)) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class CAST5(BlockCipherAlgorithm): - name = "CAST5" - block_size = 64 - key_sizes = frozenset(range(40, 129, 8)) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class SEED(BlockCipherAlgorithm): - name = "SEED" - block_size = 128 - key_sizes = frozenset([128]) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class IDEA(BlockCipherAlgorithm): - name = "IDEA" - block_size = 64 - key_sizes = frozenset([128]) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -# This class only allows RC2 with a 128-bit key. No support for -# effective key bits or other key sizes is provided. -class RC2(BlockCipherAlgorithm): - name = "RC2" - block_size = 64 - key_sizes = frozenset([128]) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__init__.py deleted file mode 100644 index b509336..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index cf0488d..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc deleted file mode 100644 index c5fe1da..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc deleted file mode 100644 index 11c4dc7..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc deleted file mode 100644 index 92028b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc deleted file mode 100644 index c8a206c..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc deleted file mode 100644 index 0330a7d..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc deleted file mode 100644 index 9ad9fa0..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc deleted file mode 100644 index 8f74bee..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc deleted file mode 100644 index f0e07bc..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc deleted file mode 100644 index 377cfda..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc deleted file mode 100644 index 7e0d4b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_asymmetric.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_asymmetric.py deleted file mode 100644 index ea55ffd..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_asymmetric.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -# This exists to break an import cycle. It is normally accessible from the -# asymmetric padding module. - - -class AsymmetricPadding(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def name(self) -> str: - """ - A string naming this padding (e.g. "PSS", "PKCS1"). - """ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py deleted file mode 100644 index 305a9fd..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py +++ /dev/null @@ -1,60 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography import utils - -# This exists to break an import cycle. It is normally accessible from the -# ciphers module. - - -class CipherAlgorithm(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def name(self) -> str: - """ - A string naming this mode (e.g. "AES", "Camellia"). - """ - - @property - @abc.abstractmethod - def key_sizes(self) -> frozenset[int]: - """ - Valid key sizes for this algorithm in bits - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The size of the key being used as an integer in bits (e.g. 128, 256). - """ - - -class BlockCipherAlgorithm(CipherAlgorithm): - key: utils.Buffer - - @property - @abc.abstractmethod - def block_size(self) -> int: - """ - The size of a block as an integer in bits (e.g. 64, 128). - """ - - -def _verify_key_size( - algorithm: CipherAlgorithm, key: utils.Buffer -) -> utils.Buffer: - # Verify that the key is instance of bytes - utils._check_byteslike("key", key) - - # Verify that the key size matches the expected key size - if len(key) * 8 not in algorithm.key_sizes: - raise ValueError( - f"Invalid key size ({len(key) * 8}) for {algorithm.name}." - ) - return key diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_serialization.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_serialization.py deleted file mode 100644 index e998865..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/_serialization.py +++ /dev/null @@ -1,168 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography import utils -from cryptography.hazmat.primitives.hashes import HashAlgorithm - -# This exists to break an import cycle. These classes are normally accessible -# from the serialization module. - - -class PBES(utils.Enum): - PBESv1SHA1And3KeyTripleDESCBC = "PBESv1 using SHA1 and 3-Key TripleDES" - PBESv2SHA256AndAES256CBC = "PBESv2 using SHA256 PBKDF2 and AES256 CBC" - - -class Encoding(utils.Enum): - PEM = "PEM" - DER = "DER" - OpenSSH = "OpenSSH" - Raw = "Raw" - X962 = "ANSI X9.62" - SMIME = "S/MIME" - - -class PrivateFormat(utils.Enum): - PKCS8 = "PKCS8" - TraditionalOpenSSL = "TraditionalOpenSSL" - Raw = "Raw" - OpenSSH = "OpenSSH" - PKCS12 = "PKCS12" - - def encryption_builder(self) -> KeySerializationEncryptionBuilder: - if self not in (PrivateFormat.OpenSSH, PrivateFormat.PKCS12): - raise ValueError( - "encryption_builder only supported with PrivateFormat.OpenSSH" - " and PrivateFormat.PKCS12" - ) - return KeySerializationEncryptionBuilder(self) - - -class PublicFormat(utils.Enum): - SubjectPublicKeyInfo = "X.509 subjectPublicKeyInfo with PKCS#1" - PKCS1 = "Raw PKCS#1" - OpenSSH = "OpenSSH" - Raw = "Raw" - CompressedPoint = "X9.62 Compressed Point" - UncompressedPoint = "X9.62 Uncompressed Point" - - -class ParameterFormat(utils.Enum): - PKCS3 = "PKCS3" - - -class KeySerializationEncryption(metaclass=abc.ABCMeta): - pass - - -class BestAvailableEncryption(KeySerializationEncryption): - def __init__(self, password: bytes): - if not isinstance(password, bytes) or len(password) == 0: - raise ValueError("Password must be 1 or more bytes.") - - self.password = password - - -class NoEncryption(KeySerializationEncryption): - pass - - -class KeySerializationEncryptionBuilder: - def __init__( - self, - format: PrivateFormat, - *, - _kdf_rounds: int | None = None, - _hmac_hash: HashAlgorithm | None = None, - _key_cert_algorithm: PBES | None = None, - ) -> None: - self._format = format - - self._kdf_rounds = _kdf_rounds - self._hmac_hash = _hmac_hash - self._key_cert_algorithm = _key_cert_algorithm - - def kdf_rounds(self, rounds: int) -> KeySerializationEncryptionBuilder: - if self._kdf_rounds is not None: - raise ValueError("kdf_rounds already set") - - if not isinstance(rounds, int): - raise TypeError("kdf_rounds must be an integer") - - if rounds < 1: - raise ValueError("kdf_rounds must be a positive integer") - - return KeySerializationEncryptionBuilder( - self._format, - _kdf_rounds=rounds, - _hmac_hash=self._hmac_hash, - _key_cert_algorithm=self._key_cert_algorithm, - ) - - def hmac_hash( - self, algorithm: HashAlgorithm - ) -> KeySerializationEncryptionBuilder: - if self._format is not PrivateFormat.PKCS12: - raise TypeError( - "hmac_hash only supported with PrivateFormat.PKCS12" - ) - - if self._hmac_hash is not None: - raise ValueError("hmac_hash already set") - return KeySerializationEncryptionBuilder( - self._format, - _kdf_rounds=self._kdf_rounds, - _hmac_hash=algorithm, - _key_cert_algorithm=self._key_cert_algorithm, - ) - - def key_cert_algorithm( - self, algorithm: PBES - ) -> KeySerializationEncryptionBuilder: - if self._format is not PrivateFormat.PKCS12: - raise TypeError( - "key_cert_algorithm only supported with PrivateFormat.PKCS12" - ) - if self._key_cert_algorithm is not None: - raise ValueError("key_cert_algorithm already set") - return KeySerializationEncryptionBuilder( - self._format, - _kdf_rounds=self._kdf_rounds, - _hmac_hash=self._hmac_hash, - _key_cert_algorithm=algorithm, - ) - - def build(self, password: bytes) -> KeySerializationEncryption: - if not isinstance(password, bytes) or len(password) == 0: - raise ValueError("Password must be 1 or more bytes.") - - return _KeySerializationEncryption( - self._format, - password, - kdf_rounds=self._kdf_rounds, - hmac_hash=self._hmac_hash, - key_cert_algorithm=self._key_cert_algorithm, - ) - - -class _KeySerializationEncryption(KeySerializationEncryption): - def __init__( - self, - format: PrivateFormat, - password: bytes, - *, - kdf_rounds: int | None, - hmac_hash: HashAlgorithm | None, - key_cert_algorithm: PBES | None, - ): - self._format = format - self.password = password - - self._kdf_rounds = kdf_rounds - self._hmac_hash = hmac_hash - self._key_cert_algorithm = key_cert_algorithm diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py deleted file mode 100644 index b509336..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c6d3dc5..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc deleted file mode 100644 index 9ec5794..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc deleted file mode 100644 index e5a5b19..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc deleted file mode 100644 index f098cbb..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc deleted file mode 100644 index 6772f82..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc deleted file mode 100644 index 587f72a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc deleted file mode 100644 index 2a50bb1..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc deleted file mode 100644 index be24bf9..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc deleted file mode 100644 index 39fbda1..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 63e7f08..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc deleted file mode 100644 index 9c0c58d..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc deleted file mode 100644 index 39cd877..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py deleted file mode 100644 index 1822e99..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py +++ /dev/null @@ -1,147 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization - -generate_parameters = rust_openssl.dh.generate_parameters - - -DHPrivateNumbers = rust_openssl.dh.DHPrivateNumbers -DHPublicNumbers = rust_openssl.dh.DHPublicNumbers -DHParameterNumbers = rust_openssl.dh.DHParameterNumbers - - -class DHParameters(metaclass=abc.ABCMeta): - @abc.abstractmethod - def generate_private_key(self) -> DHPrivateKey: - """ - Generates and returns a DHPrivateKey. - """ - - @abc.abstractmethod - def parameter_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.ParameterFormat, - ) -> bytes: - """ - Returns the parameters serialized as bytes. - """ - - @abc.abstractmethod - def parameter_numbers(self) -> DHParameterNumbers: - """ - Returns a DHParameterNumbers. - """ - - -DHParametersWithSerialization = DHParameters -DHParameters.register(rust_openssl.dh.DHParameters) - - -class DHPublicKey(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the prime modulus. - """ - - @abc.abstractmethod - def parameters(self) -> DHParameters: - """ - The DHParameters object associated with this public key. - """ - - @abc.abstractmethod - def public_numbers(self) -> DHPublicNumbers: - """ - Returns a DHPublicNumbers. - """ - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> DHPublicKey: - """ - Returns a copy. - """ - - -DHPublicKeyWithSerialization = DHPublicKey -DHPublicKey.register(rust_openssl.dh.DHPublicKey) - - -class DHPrivateKey(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the prime modulus. - """ - - @abc.abstractmethod - def public_key(self) -> DHPublicKey: - """ - The DHPublicKey associated with this private key. - """ - - @abc.abstractmethod - def parameters(self) -> DHParameters: - """ - The DHParameters object associated with this private key. - """ - - @abc.abstractmethod - def exchange(self, peer_public_key: DHPublicKey) -> bytes: - """ - Given peer's DHPublicKey, carry out the key exchange and - return shared key as bytes. - """ - - @abc.abstractmethod - def private_numbers(self) -> DHPrivateNumbers: - """ - Returns a DHPrivateNumbers. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def __copy__(self) -> DHPrivateKey: - """ - Returns a copy. - """ - - -DHPrivateKeyWithSerialization = DHPrivateKey -DHPrivateKey.register(rust_openssl.dh.DHPrivateKey) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py deleted file mode 100644 index 21d78ba..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +++ /dev/null @@ -1,167 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import typing - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization, hashes -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils -from cryptography.utils import Buffer - - -class DSAParameters(metaclass=abc.ABCMeta): - @abc.abstractmethod - def generate_private_key(self) -> DSAPrivateKey: - """ - Generates and returns a DSAPrivateKey. - """ - - @abc.abstractmethod - def parameter_numbers(self) -> DSAParameterNumbers: - """ - Returns a DSAParameterNumbers. - """ - - -DSAParametersWithNumbers = DSAParameters -DSAParameters.register(rust_openssl.dsa.DSAParameters) - - -class DSAPrivateKey(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the prime modulus. - """ - - @abc.abstractmethod - def public_key(self) -> DSAPublicKey: - """ - The DSAPublicKey associated with this private key. - """ - - @abc.abstractmethod - def parameters(self) -> DSAParameters: - """ - The DSAParameters object associated with this private key. - """ - - @abc.abstractmethod - def sign( - self, - data: Buffer, - algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, - ) -> bytes: - """ - Signs the data - """ - - @abc.abstractmethod - def private_numbers(self) -> DSAPrivateNumbers: - """ - Returns a DSAPrivateNumbers. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def __copy__(self) -> DSAPrivateKey: - """ - Returns a copy. - """ - - -DSAPrivateKeyWithSerialization = DSAPrivateKey -DSAPrivateKey.register(rust_openssl.dsa.DSAPrivateKey) - - -class DSAPublicKey(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the prime modulus. - """ - - @abc.abstractmethod - def parameters(self) -> DSAParameters: - """ - The DSAParameters object associated with this public key. - """ - - @abc.abstractmethod - def public_numbers(self) -> DSAPublicNumbers: - """ - Returns a DSAPublicNumbers. - """ - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def verify( - self, - signature: Buffer, - data: Buffer, - algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, - ) -> None: - """ - Verifies the signature of the data. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> DSAPublicKey: - """ - Returns a copy. - """ - - -DSAPublicKeyWithSerialization = DSAPublicKey -DSAPublicKey.register(rust_openssl.dsa.DSAPublicKey) - -DSAPrivateNumbers = rust_openssl.dsa.DSAPrivateNumbers -DSAPublicNumbers = rust_openssl.dsa.DSAPublicNumbers -DSAParameterNumbers = rust_openssl.dsa.DSAParameterNumbers - - -def generate_parameters( - key_size: int, backend: typing.Any = None -) -> DSAParameters: - if key_size not in (1024, 2048, 3072, 4096): - raise ValueError("Key size must be 1024, 2048, 3072, or 4096 bits.") - - return rust_openssl.dsa.generate_parameters(key_size) - - -def generate_private_key( - key_size: int, backend: typing.Any = None -) -> DSAPrivateKey: - parameters = generate_parameters(key_size) - return parameters.generate_private_key() diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py deleted file mode 100644 index 8638d20..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py +++ /dev/null @@ -1,470 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import typing - -from cryptography import utils -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat._oid import ObjectIdentifier -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization, hashes -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils - - -class EllipticCurveOID: - SECP192R1 = ObjectIdentifier("1.2.840.10045.3.1.1") - SECP224R1 = ObjectIdentifier("1.3.132.0.33") - SECP256K1 = ObjectIdentifier("1.3.132.0.10") - SECP256R1 = ObjectIdentifier("1.2.840.10045.3.1.7") - SECP384R1 = ObjectIdentifier("1.3.132.0.34") - SECP521R1 = ObjectIdentifier("1.3.132.0.35") - BRAINPOOLP256R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.7") - BRAINPOOLP384R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.11") - BRAINPOOLP512R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.13") - SECT163K1 = ObjectIdentifier("1.3.132.0.1") - SECT163R2 = ObjectIdentifier("1.3.132.0.15") - SECT233K1 = ObjectIdentifier("1.3.132.0.26") - SECT233R1 = ObjectIdentifier("1.3.132.0.27") - SECT283K1 = ObjectIdentifier("1.3.132.0.16") - SECT283R1 = ObjectIdentifier("1.3.132.0.17") - SECT409K1 = ObjectIdentifier("1.3.132.0.36") - SECT409R1 = ObjectIdentifier("1.3.132.0.37") - SECT571K1 = ObjectIdentifier("1.3.132.0.38") - SECT571R1 = ObjectIdentifier("1.3.132.0.39") - - -class EllipticCurve(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def name(self) -> str: - """ - The name of the curve. e.g. secp256r1. - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - Bit size of a secret scalar for the curve. - """ - - @property - @abc.abstractmethod - def group_order(self) -> int: - """ - The order of the curve's group. - """ - - -class EllipticCurveSignatureAlgorithm(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def algorithm( - self, - ) -> asym_utils.Prehashed | hashes.HashAlgorithm: - """ - The digest algorithm used with this signature. - """ - - -class EllipticCurvePrivateKey(metaclass=abc.ABCMeta): - @abc.abstractmethod - def exchange( - self, algorithm: ECDH, peer_public_key: EllipticCurvePublicKey - ) -> bytes: - """ - Performs a key exchange operation using the provided algorithm with the - provided peer's public key. - """ - - @abc.abstractmethod - def public_key(self) -> EllipticCurvePublicKey: - """ - The EllipticCurvePublicKey for this private key. - """ - - @property - @abc.abstractmethod - def curve(self) -> EllipticCurve: - """ - The EllipticCurve that this key is on. - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - Bit size of a secret scalar for the curve. - """ - - @abc.abstractmethod - def sign( - self, - data: utils.Buffer, - signature_algorithm: EllipticCurveSignatureAlgorithm, - ) -> bytes: - """ - Signs the data - """ - - @abc.abstractmethod - def private_numbers(self) -> EllipticCurvePrivateNumbers: - """ - Returns an EllipticCurvePrivateNumbers. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def __copy__(self) -> EllipticCurvePrivateKey: - """ - Returns a copy. - """ - - -EllipticCurvePrivateKeyWithSerialization = EllipticCurvePrivateKey -EllipticCurvePrivateKey.register(rust_openssl.ec.ECPrivateKey) - - -class EllipticCurvePublicKey(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def curve(self) -> EllipticCurve: - """ - The EllipticCurve that this key is on. - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - Bit size of a secret scalar for the curve. - """ - - @abc.abstractmethod - def public_numbers(self) -> EllipticCurvePublicNumbers: - """ - Returns an EllipticCurvePublicNumbers. - """ - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def verify( - self, - signature: utils.Buffer, - data: utils.Buffer, - signature_algorithm: EllipticCurveSignatureAlgorithm, - ) -> None: - """ - Verifies the signature of the data. - """ - - @classmethod - def from_encoded_point( - cls, curve: EllipticCurve, data: bytes - ) -> EllipticCurvePublicKey: - utils._check_bytes("data", data) - - if len(data) == 0: - raise ValueError("data must not be an empty byte string") - - if data[0] not in [0x02, 0x03, 0x04]: - raise ValueError("Unsupported elliptic curve point type") - - return rust_openssl.ec.from_public_bytes(curve, data) - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> EllipticCurvePublicKey: - """ - Returns a copy. - """ - - -EllipticCurvePublicKeyWithSerialization = EllipticCurvePublicKey -EllipticCurvePublicKey.register(rust_openssl.ec.ECPublicKey) - -EllipticCurvePrivateNumbers = rust_openssl.ec.EllipticCurvePrivateNumbers -EllipticCurvePublicNumbers = rust_openssl.ec.EllipticCurvePublicNumbers - - -class SECT571R1(EllipticCurve): - name = "sect571r1" - key_size = 570 - group_order = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47 # noqa: E501 - - -class SECT409R1(EllipticCurve): - name = "sect409r1" - key_size = 409 - group_order = 0x10000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173 # noqa: E501 - - -class SECT283R1(EllipticCurve): - name = "sect283r1" - key_size = 283 - group_order = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307 # noqa: E501 - - -class SECT233R1(EllipticCurve): - name = "sect233r1" - key_size = 233 - group_order = 0x1000000000000000000000000000013E974E72F8A6922031D2603CFE0D7 - - -class SECT163R2(EllipticCurve): - name = "sect163r2" - key_size = 163 - group_order = 0x40000000000000000000292FE77E70C12A4234C33 - - -class SECT571K1(EllipticCurve): - name = "sect571k1" - key_size = 571 - group_order = 0x20000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001 # noqa: E501 - - -class SECT409K1(EllipticCurve): - name = "sect409k1" - key_size = 409 - group_order = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF # noqa: E501 - - -class SECT283K1(EllipticCurve): - name = "sect283k1" - key_size = 283 - group_order = 0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61 # noqa: E501 - - -class SECT233K1(EllipticCurve): - name = "sect233k1" - key_size = 233 - group_order = 0x8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF - - -class SECT163K1(EllipticCurve): - name = "sect163k1" - key_size = 163 - group_order = 0x4000000000000000000020108A2E0CC0D99F8A5EF - - -class SECP521R1(EllipticCurve): - name = "secp521r1" - key_size = 521 - group_order = 0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409 # noqa: E501 - - -class SECP384R1(EllipticCurve): - name = "secp384r1" - key_size = 384 - group_order = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973 # noqa: E501 - - -class SECP256R1(EllipticCurve): - name = "secp256r1" - key_size = 256 - group_order = ( - 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 - ) - - -class SECP256K1(EllipticCurve): - name = "secp256k1" - key_size = 256 - group_order = ( - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - ) - - -class SECP224R1(EllipticCurve): - name = "secp224r1" - key_size = 224 - group_order = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D - - -class SECP192R1(EllipticCurve): - name = "secp192r1" - key_size = 192 - group_order = 0xFFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831 - - -class BrainpoolP256R1(EllipticCurve): - name = "brainpoolP256r1" - key_size = 256 - group_order = ( - 0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7 - ) - - -class BrainpoolP384R1(EllipticCurve): - name = "brainpoolP384r1" - key_size = 384 - group_order = 0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565 # noqa: E501 - - -class BrainpoolP512R1(EllipticCurve): - name = "brainpoolP512r1" - key_size = 512 - group_order = 0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069 # noqa: E501 - - -_CURVE_TYPES: dict[str, EllipticCurve] = { - "prime192v1": SECP192R1(), - "prime256v1": SECP256R1(), - "secp192r1": SECP192R1(), - "secp224r1": SECP224R1(), - "secp256r1": SECP256R1(), - "secp384r1": SECP384R1(), - "secp521r1": SECP521R1(), - "secp256k1": SECP256K1(), - "sect163k1": SECT163K1(), - "sect233k1": SECT233K1(), - "sect283k1": SECT283K1(), - "sect409k1": SECT409K1(), - "sect571k1": SECT571K1(), - "sect163r2": SECT163R2(), - "sect233r1": SECT233R1(), - "sect283r1": SECT283R1(), - "sect409r1": SECT409R1(), - "sect571r1": SECT571R1(), - "brainpoolP256r1": BrainpoolP256R1(), - "brainpoolP384r1": BrainpoolP384R1(), - "brainpoolP512r1": BrainpoolP512R1(), -} - - -class ECDSA(EllipticCurveSignatureAlgorithm): - def __init__( - self, - algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, - deterministic_signing: bool = False, - ): - from cryptography.hazmat.backends.openssl.backend import backend - - if ( - deterministic_signing - and not backend.ecdsa_deterministic_supported() - ): - raise UnsupportedAlgorithm( - "ECDSA with deterministic signature (RFC 6979) is not " - "supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - self._algorithm = algorithm - self._deterministic_signing = deterministic_signing - - @property - def algorithm( - self, - ) -> asym_utils.Prehashed | hashes.HashAlgorithm: - return self._algorithm - - @property - def deterministic_signing( - self, - ) -> bool: - return self._deterministic_signing - - -generate_private_key = rust_openssl.ec.generate_private_key - - -def derive_private_key( - private_value: int, - curve: EllipticCurve, - backend: typing.Any = None, -) -> EllipticCurvePrivateKey: - if not isinstance(private_value, int): - raise TypeError("private_value must be an integer type.") - - if private_value <= 0: - raise ValueError("private_value must be a positive integer.") - - return rust_openssl.ec.derive_private_key(private_value, curve) - - -class ECDH: - pass - - -_OID_TO_CURVE = { - EllipticCurveOID.SECP192R1: SECP192R1, - EllipticCurveOID.SECP224R1: SECP224R1, - EllipticCurveOID.SECP256K1: SECP256K1, - EllipticCurveOID.SECP256R1: SECP256R1, - EllipticCurveOID.SECP384R1: SECP384R1, - EllipticCurveOID.SECP521R1: SECP521R1, - EllipticCurveOID.BRAINPOOLP256R1: BrainpoolP256R1, - EllipticCurveOID.BRAINPOOLP384R1: BrainpoolP384R1, - EllipticCurveOID.BRAINPOOLP512R1: BrainpoolP512R1, - EllipticCurveOID.SECT163K1: SECT163K1, - EllipticCurveOID.SECT163R2: SECT163R2, - EllipticCurveOID.SECT233K1: SECT233K1, - EllipticCurveOID.SECT233R1: SECT233R1, - EllipticCurveOID.SECT283K1: SECT283K1, - EllipticCurveOID.SECT283R1: SECT283R1, - EllipticCurveOID.SECT409K1: SECT409K1, - EllipticCurveOID.SECT409R1: SECT409R1, - EllipticCurveOID.SECT571K1: SECT571K1, - EllipticCurveOID.SECT571R1: SECT571R1, -} - - -def get_curve_for_oid(oid: ObjectIdentifier) -> type[EllipticCurve]: - try: - return _OID_TO_CURVE[oid] - except KeyError: - raise LookupError( - "The provided object identifier has no matching elliptic " - "curve class" - ) - - -_SECT_CURVES: tuple[type[EllipticCurve], ...] = ( - SECT163K1, - SECT163R2, - SECT233K1, - SECT233R1, - SECT283K1, - SECT283R1, - SECT409K1, - SECT409R1, - SECT571K1, - SECT571R1, -) - -for _curve_cls in _SECT_CURVES: - utils.deprecated( - _curve_cls, - __name__, - f"{_curve_cls.__name__} will be removed in the next release.", - utils.DeprecatedIn46, - name=_curve_cls.__name__, - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py deleted file mode 100644 index e576dc9..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py +++ /dev/null @@ -1,129 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization -from cryptography.utils import Buffer - - -class Ed25519PublicKey(metaclass=abc.ABCMeta): - @classmethod - def from_public_bytes(cls, data: bytes) -> Ed25519PublicKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed25519_supported(): - raise UnsupportedAlgorithm( - "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed25519.from_public_bytes(data) - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - The serialized bytes of the public key. - """ - - @abc.abstractmethod - def public_bytes_raw(self) -> bytes: - """ - The raw bytes of the public key. - Equivalent to public_bytes(Raw, Raw). - """ - - @abc.abstractmethod - def verify(self, signature: Buffer, data: Buffer) -> None: - """ - Verify the signature. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> Ed25519PublicKey: - """ - Returns a copy. - """ - - -Ed25519PublicKey.register(rust_openssl.ed25519.Ed25519PublicKey) - - -class Ed25519PrivateKey(metaclass=abc.ABCMeta): - @classmethod - def generate(cls) -> Ed25519PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed25519_supported(): - raise UnsupportedAlgorithm( - "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed25519.generate_key() - - @classmethod - def from_private_bytes(cls, data: Buffer) -> Ed25519PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed25519_supported(): - raise UnsupportedAlgorithm( - "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed25519.from_private_bytes(data) - - @abc.abstractmethod - def public_key(self) -> Ed25519PublicKey: - """ - The Ed25519PublicKey derived from the private key. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - The serialized bytes of the private key. - """ - - @abc.abstractmethod - def private_bytes_raw(self) -> bytes: - """ - The raw bytes of the private key. - Equivalent to private_bytes(Raw, Raw, NoEncryption()). - """ - - @abc.abstractmethod - def sign(self, data: Buffer) -> bytes: - """ - Signs the data. - """ - - @abc.abstractmethod - def __copy__(self) -> Ed25519PrivateKey: - """ - Returns a copy. - """ - - -Ed25519PrivateKey.register(rust_openssl.ed25519.Ed25519PrivateKey) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py deleted file mode 100644 index 89db209..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py +++ /dev/null @@ -1,131 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization -from cryptography.utils import Buffer - - -class Ed448PublicKey(metaclass=abc.ABCMeta): - @classmethod - def from_public_bytes(cls, data: bytes) -> Ed448PublicKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed448_supported(): - raise UnsupportedAlgorithm( - "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed448.from_public_bytes(data) - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - The serialized bytes of the public key. - """ - - @abc.abstractmethod - def public_bytes_raw(self) -> bytes: - """ - The raw bytes of the public key. - Equivalent to public_bytes(Raw, Raw). - """ - - @abc.abstractmethod - def verify(self, signature: Buffer, data: Buffer) -> None: - """ - Verify the signature. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> Ed448PublicKey: - """ - Returns a copy. - """ - - -if hasattr(rust_openssl, "ed448"): - Ed448PublicKey.register(rust_openssl.ed448.Ed448PublicKey) - - -class Ed448PrivateKey(metaclass=abc.ABCMeta): - @classmethod - def generate(cls) -> Ed448PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed448_supported(): - raise UnsupportedAlgorithm( - "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed448.generate_key() - - @classmethod - def from_private_bytes(cls, data: Buffer) -> Ed448PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.ed448_supported(): - raise UnsupportedAlgorithm( - "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - return rust_openssl.ed448.from_private_bytes(data) - - @abc.abstractmethod - def public_key(self) -> Ed448PublicKey: - """ - The Ed448PublicKey derived from the private key. - """ - - @abc.abstractmethod - def sign(self, data: Buffer) -> bytes: - """ - Signs the data. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - The serialized bytes of the private key. - """ - - @abc.abstractmethod - def private_bytes_raw(self) -> bytes: - """ - The raw bytes of the private key. - Equivalent to private_bytes(Raw, Raw, NoEncryption()). - """ - - @abc.abstractmethod - def __copy__(self) -> Ed448PrivateKey: - """ - Returns a copy. - """ - - -if hasattr(rust_openssl, "x448"): - Ed448PrivateKey.register(rust_openssl.ed448.Ed448PrivateKey) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py deleted file mode 100644 index 5121a28..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py +++ /dev/null @@ -1,111 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives._asymmetric import ( - AsymmetricPadding as AsymmetricPadding, -) -from cryptography.hazmat.primitives.asymmetric import rsa - - -class PKCS1v15(AsymmetricPadding): - name = "EMSA-PKCS1-v1_5" - - -class _MaxLength: - "Sentinel value for `MAX_LENGTH`." - - -class _Auto: - "Sentinel value for `AUTO`." - - -class _DigestLength: - "Sentinel value for `DIGEST_LENGTH`." - - -class PSS(AsymmetricPadding): - MAX_LENGTH = _MaxLength() - AUTO = _Auto() - DIGEST_LENGTH = _DigestLength() - name = "EMSA-PSS" - _salt_length: int | _MaxLength | _Auto | _DigestLength - - def __init__( - self, - mgf: MGF, - salt_length: int | _MaxLength | _Auto | _DigestLength, - ) -> None: - self._mgf = mgf - - if not isinstance( - salt_length, (int, _MaxLength, _Auto, _DigestLength) - ): - raise TypeError( - "salt_length must be an integer, MAX_LENGTH, " - "DIGEST_LENGTH, or AUTO" - ) - - if isinstance(salt_length, int) and salt_length < 0: - raise ValueError("salt_length must be zero or greater.") - - self._salt_length = salt_length - - @property - def mgf(self) -> MGF: - return self._mgf - - -class OAEP(AsymmetricPadding): - name = "EME-OAEP" - - def __init__( - self, - mgf: MGF, - algorithm: hashes.HashAlgorithm, - label: bytes | None, - ): - if not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError("Expected instance of hashes.HashAlgorithm.") - - self._mgf = mgf - self._algorithm = algorithm - self._label = label - - @property - def algorithm(self) -> hashes.HashAlgorithm: - return self._algorithm - - @property - def mgf(self) -> MGF: - return self._mgf - - -class MGF(metaclass=abc.ABCMeta): - _algorithm: hashes.HashAlgorithm - - -class MGF1(MGF): - def __init__(self, algorithm: hashes.HashAlgorithm): - if not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError("Expected instance of hashes.HashAlgorithm.") - - self._algorithm = algorithm - - -def calculate_max_pss_salt_length( - key: rsa.RSAPrivateKey | rsa.RSAPublicKey, - hash_algorithm: hashes.HashAlgorithm, -) -> int: - if not isinstance(key, (rsa.RSAPrivateKey, rsa.RSAPublicKey)): - raise TypeError("key must be an RSA public or private key") - # bit length - 1 per RFC 3447 - emlen = (key.key_size + 6) // 8 - salt_length = emlen - hash_algorithm.digest_size - 2 - assert salt_length >= 0 - return salt_length diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py deleted file mode 100644 index f94812e..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +++ /dev/null @@ -1,285 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import random -import typing -from math import gcd - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization, hashes -from cryptography.hazmat.primitives._asymmetric import AsymmetricPadding -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils - - -class RSAPrivateKey(metaclass=abc.ABCMeta): - @abc.abstractmethod - def decrypt(self, ciphertext: bytes, padding: AsymmetricPadding) -> bytes: - """ - Decrypts the provided ciphertext. - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the public modulus. - """ - - @abc.abstractmethod - def public_key(self) -> RSAPublicKey: - """ - The RSAPublicKey associated with this private key. - """ - - @abc.abstractmethod - def sign( - self, - data: bytes, - padding: AsymmetricPadding, - algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, - ) -> bytes: - """ - Signs the data. - """ - - @abc.abstractmethod - def private_numbers(self) -> RSAPrivateNumbers: - """ - Returns an RSAPrivateNumbers. - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def __copy__(self) -> RSAPrivateKey: - """ - Returns a copy. - """ - - -RSAPrivateKeyWithSerialization = RSAPrivateKey -RSAPrivateKey.register(rust_openssl.rsa.RSAPrivateKey) - - -class RSAPublicKey(metaclass=abc.ABCMeta): - @abc.abstractmethod - def encrypt(self, plaintext: bytes, padding: AsymmetricPadding) -> bytes: - """ - Encrypts the given plaintext. - """ - - @property - @abc.abstractmethod - def key_size(self) -> int: - """ - The bit length of the public modulus. - """ - - @abc.abstractmethod - def public_numbers(self) -> RSAPublicNumbers: - """ - Returns an RSAPublicNumbers - """ - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - Returns the key serialized as bytes. - """ - - @abc.abstractmethod - def verify( - self, - signature: bytes, - data: bytes, - padding: AsymmetricPadding, - algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, - ) -> None: - """ - Verifies the signature of the data. - """ - - @abc.abstractmethod - def recover_data_from_signature( - self, - signature: bytes, - padding: AsymmetricPadding, - algorithm: hashes.HashAlgorithm | None, - ) -> bytes: - """ - Recovers the original data from the signature. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> RSAPublicKey: - """ - Returns a copy. - """ - - -RSAPublicKeyWithSerialization = RSAPublicKey -RSAPublicKey.register(rust_openssl.rsa.RSAPublicKey) - -RSAPrivateNumbers = rust_openssl.rsa.RSAPrivateNumbers -RSAPublicNumbers = rust_openssl.rsa.RSAPublicNumbers - - -def generate_private_key( - public_exponent: int, - key_size: int, - backend: typing.Any = None, -) -> RSAPrivateKey: - _verify_rsa_parameters(public_exponent, key_size) - return rust_openssl.rsa.generate_private_key(public_exponent, key_size) - - -def _verify_rsa_parameters(public_exponent: int, key_size: int) -> None: - if public_exponent not in (3, 65537): - raise ValueError( - "public_exponent must be either 3 (for legacy compatibility) or " - "65537. Almost everyone should choose 65537 here!" - ) - - if key_size < 1024: - raise ValueError("key_size must be at least 1024-bits.") - - -def _modinv(e: int, m: int) -> int: - """ - Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 - """ - x1, x2 = 1, 0 - a, b = e, m - while b > 0: - q, r = divmod(a, b) - xn = x1 - q * x2 - a, b, x1, x2 = b, r, x2, xn - return x1 % m - - -def rsa_crt_iqmp(p: int, q: int) -> int: - """ - Compute the CRT (q ** -1) % p value from RSA primes p and q. - """ - if p <= 1 or q <= 1: - raise ValueError("Values can't be <= 1") - return _modinv(q, p) - - -def rsa_crt_dmp1(private_exponent: int, p: int) -> int: - """ - Compute the CRT private_exponent % (p - 1) value from the RSA - private_exponent (d) and p. - """ - if private_exponent <= 1 or p <= 1: - raise ValueError("Values can't be <= 1") - return private_exponent % (p - 1) - - -def rsa_crt_dmq1(private_exponent: int, q: int) -> int: - """ - Compute the CRT private_exponent % (q - 1) value from the RSA - private_exponent (d) and q. - """ - if private_exponent <= 1 or q <= 1: - raise ValueError("Values can't be <= 1") - return private_exponent % (q - 1) - - -def rsa_recover_private_exponent(e: int, p: int, q: int) -> int: - """ - Compute the RSA private_exponent (d) given the public exponent (e) - and the RSA primes p and q. - - This uses the Carmichael totient function to generate the - smallest possible working value of the private exponent. - """ - # This lambda_n is the Carmichael totient function. - # The original RSA paper uses the Euler totient function - # here: phi_n = (p - 1) * (q - 1) - # Either version of the private exponent will work, but the - # one generated by the older formulation may be larger - # than necessary. (lambda_n always divides phi_n) - # - # TODO: Replace with lcm(p - 1, q - 1) once the minimum - # supported Python version is >= 3.9. - if e <= 1 or p <= 1 or q <= 1: - raise ValueError("Values can't be <= 1") - lambda_n = (p - 1) * (q - 1) // gcd(p - 1, q - 1) - return _modinv(e, lambda_n) - - -# Controls the number of iterations rsa_recover_prime_factors will perform -# to obtain the prime factors. -_MAX_RECOVERY_ATTEMPTS = 500 - - -def rsa_recover_prime_factors(n: int, e: int, d: int) -> tuple[int, int]: - """ - Compute factors p and q from the private exponent d. We assume that n has - no more than two factors. This function is adapted from code in PyCrypto. - """ - # reject invalid values early - if d <= 1 or e <= 1: - raise ValueError("d, e can't be <= 1") - if 17 != pow(17, e * d, n): - raise ValueError("n, d, e don't match") - # See 8.2.2(i) in Handbook of Applied Cryptography. - ktot = d * e - 1 - # The quantity d*e-1 is a multiple of phi(n), even, - # and can be represented as t*2^s. - t = ktot - while t % 2 == 0: - t = t // 2 - # Cycle through all multiplicative inverses in Zn. - # The algorithm is non-deterministic, but there is a 50% chance - # any candidate a leads to successful factoring. - # See "Digitalized Signatures and Public Key Functions as Intractable - # as Factorization", M. Rabin, 1979 - spotted = False - tries = 0 - while not spotted and tries < _MAX_RECOVERY_ATTEMPTS: - a = random.randint(2, n - 1) - tries += 1 - k = t - # Cycle through all values a^{t*2^i}=a^k - while k < ktot: - cand = pow(a, k, n) - # Check if a^k is a non-trivial root of unity (mod n) - if cand != 1 and cand != (n - 1) and pow(cand, 2, n) == 1: - # We have found a number such that (cand-1)(cand+1)=0 (mod n). - # Either of the terms divides n. - p = gcd(cand + 1, n) - spotted = True - break - k *= 2 - if not spotted: - raise ValueError("Unable to compute factors p and q from exponent d.") - # Found ! - q, r = divmod(n, p) - assert r == 0 - p, q = sorted((p, q), reverse=True) - return (p, q) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/types.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/types.py deleted file mode 100644 index 1fe4eaf..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/types.py +++ /dev/null @@ -1,111 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography import utils -from cryptography.hazmat.primitives.asymmetric import ( - dh, - dsa, - ec, - ed448, - ed25519, - rsa, - x448, - x25519, -) - -# Every asymmetric key type -PublicKeyTypes = typing.Union[ - dh.DHPublicKey, - dsa.DSAPublicKey, - rsa.RSAPublicKey, - ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey, - ed448.Ed448PublicKey, - x25519.X25519PublicKey, - x448.X448PublicKey, -] -PUBLIC_KEY_TYPES = PublicKeyTypes -utils.deprecated( - PUBLIC_KEY_TYPES, - __name__, - "Use PublicKeyTypes instead", - utils.DeprecatedIn40, - name="PUBLIC_KEY_TYPES", -) -# Every asymmetric key type -PrivateKeyTypes = typing.Union[ - dh.DHPrivateKey, - ed25519.Ed25519PrivateKey, - ed448.Ed448PrivateKey, - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey, - x25519.X25519PrivateKey, - x448.X448PrivateKey, -] -PRIVATE_KEY_TYPES = PrivateKeyTypes -utils.deprecated( - PRIVATE_KEY_TYPES, - __name__, - "Use PrivateKeyTypes instead", - utils.DeprecatedIn40, - name="PRIVATE_KEY_TYPES", -) -# Just the key types we allow to be used for x509 signing. This mirrors -# the certificate public key types -CertificateIssuerPrivateKeyTypes = typing.Union[ - ed25519.Ed25519PrivateKey, - ed448.Ed448PrivateKey, - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey, -] -CERTIFICATE_PRIVATE_KEY_TYPES = CertificateIssuerPrivateKeyTypes -utils.deprecated( - CERTIFICATE_PRIVATE_KEY_TYPES, - __name__, - "Use CertificateIssuerPrivateKeyTypes instead", - utils.DeprecatedIn40, - name="CERTIFICATE_PRIVATE_KEY_TYPES", -) -# Just the key types we allow to be used for x509 signing. This mirrors -# the certificate private key types -CertificateIssuerPublicKeyTypes = typing.Union[ - dsa.DSAPublicKey, - rsa.RSAPublicKey, - ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey, - ed448.Ed448PublicKey, -] -CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES = CertificateIssuerPublicKeyTypes -utils.deprecated( - CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES, - __name__, - "Use CertificateIssuerPublicKeyTypes instead", - utils.DeprecatedIn40, - name="CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES", -) -# This type removes DHPublicKey. x448/x25519 can be a public key -# but cannot be used in signing so they are allowed here. -CertificatePublicKeyTypes = typing.Union[ - dsa.DSAPublicKey, - rsa.RSAPublicKey, - ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey, - ed448.Ed448PublicKey, - x25519.X25519PublicKey, - x448.X448PublicKey, -] -CERTIFICATE_PUBLIC_KEY_TYPES = CertificatePublicKeyTypes -utils.deprecated( - CERTIFICATE_PUBLIC_KEY_TYPES, - __name__, - "Use CertificatePublicKeyTypes instead", - utils.DeprecatedIn40, - name="CERTIFICATE_PUBLIC_KEY_TYPES", -) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py deleted file mode 100644 index 826b956..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py +++ /dev/null @@ -1,24 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import asn1 -from cryptography.hazmat.primitives import hashes - -decode_dss_signature = asn1.decode_dss_signature -encode_dss_signature = asn1.encode_dss_signature - - -class Prehashed: - def __init__(self, algorithm: hashes.HashAlgorithm): - if not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError("Expected instance of HashAlgorithm.") - - self._algorithm = algorithm - self._digest_size = algorithm.digest_size - - @property - def digest_size(self) -> int: - return self._digest_size diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py deleted file mode 100644 index a499376..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py +++ /dev/null @@ -1,122 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization -from cryptography.utils import Buffer - - -class X25519PublicKey(metaclass=abc.ABCMeta): - @classmethod - def from_public_bytes(cls, data: bytes) -> X25519PublicKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x25519_supported(): - raise UnsupportedAlgorithm( - "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - return rust_openssl.x25519.from_public_bytes(data) - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - The serialized bytes of the public key. - """ - - @abc.abstractmethod - def public_bytes_raw(self) -> bytes: - """ - The raw bytes of the public key. - Equivalent to public_bytes(Raw, Raw). - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> X25519PublicKey: - """ - Returns a copy. - """ - - -X25519PublicKey.register(rust_openssl.x25519.X25519PublicKey) - - -class X25519PrivateKey(metaclass=abc.ABCMeta): - @classmethod - def generate(cls) -> X25519PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x25519_supported(): - raise UnsupportedAlgorithm( - "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - return rust_openssl.x25519.generate_key() - - @classmethod - def from_private_bytes(cls, data: Buffer) -> X25519PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x25519_supported(): - raise UnsupportedAlgorithm( - "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - return rust_openssl.x25519.from_private_bytes(data) - - @abc.abstractmethod - def public_key(self) -> X25519PublicKey: - """ - Returns the public key associated with this private key - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - The serialized bytes of the private key. - """ - - @abc.abstractmethod - def private_bytes_raw(self) -> bytes: - """ - The raw bytes of the private key. - Equivalent to private_bytes(Raw, Raw, NoEncryption()). - """ - - @abc.abstractmethod - def exchange(self, peer_public_key: X25519PublicKey) -> bytes: - """ - Performs a key exchange operation using the provided peer's public key. - """ - - @abc.abstractmethod - def __copy__(self) -> X25519PrivateKey: - """ - Returns a copy. - """ - - -X25519PrivateKey.register(rust_openssl.x25519.X25519PrivateKey) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py deleted file mode 100644 index c6fd71b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py +++ /dev/null @@ -1,125 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import _serialization -from cryptography.utils import Buffer - - -class X448PublicKey(metaclass=abc.ABCMeta): - @classmethod - def from_public_bytes(cls, data: bytes) -> X448PublicKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x448_supported(): - raise UnsupportedAlgorithm( - "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - return rust_openssl.x448.from_public_bytes(data) - - @abc.abstractmethod - def public_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PublicFormat, - ) -> bytes: - """ - The serialized bytes of the public key. - """ - - @abc.abstractmethod - def public_bytes_raw(self) -> bytes: - """ - The raw bytes of the public key. - Equivalent to public_bytes(Raw, Raw). - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Checks equality. - """ - - @abc.abstractmethod - def __copy__(self) -> X448PublicKey: - """ - Returns a copy. - """ - - -if hasattr(rust_openssl, "x448"): - X448PublicKey.register(rust_openssl.x448.X448PublicKey) - - -class X448PrivateKey(metaclass=abc.ABCMeta): - @classmethod - def generate(cls) -> X448PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x448_supported(): - raise UnsupportedAlgorithm( - "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - return rust_openssl.x448.generate_key() - - @classmethod - def from_private_bytes(cls, data: Buffer) -> X448PrivateKey: - from cryptography.hazmat.backends.openssl.backend import backend - - if not backend.x448_supported(): - raise UnsupportedAlgorithm( - "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - return rust_openssl.x448.from_private_bytes(data) - - @abc.abstractmethod - def public_key(self) -> X448PublicKey: - """ - Returns the public key associated with this private key - """ - - @abc.abstractmethod - def private_bytes( - self, - encoding: _serialization.Encoding, - format: _serialization.PrivateFormat, - encryption_algorithm: _serialization.KeySerializationEncryption, - ) -> bytes: - """ - The serialized bytes of the private key. - """ - - @abc.abstractmethod - def private_bytes_raw(self) -> bytes: - """ - The raw bytes of the private key. - Equivalent to private_bytes(Raw, Raw, NoEncryption()). - """ - - @abc.abstractmethod - def exchange(self, peer_public_key: X448PublicKey) -> bytes: - """ - Performs a key exchange operation using the provided peer's public key. - """ - - @abc.abstractmethod - def __copy__(self) -> X448PrivateKey: - """ - Returns a copy. - """ - - -if hasattr(rust_openssl, "x448"): - X448PrivateKey.register(rust_openssl.x448.X448PrivateKey) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py deleted file mode 100644 index 10c15d0..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.primitives._cipheralgorithm import ( - BlockCipherAlgorithm, - CipherAlgorithm, -) -from cryptography.hazmat.primitives.ciphers.base import ( - AEADCipherContext, - AEADDecryptionContext, - AEADEncryptionContext, - Cipher, - CipherContext, -) - -__all__ = [ - "AEADCipherContext", - "AEADDecryptionContext", - "AEADEncryptionContext", - "BlockCipherAlgorithm", - "Cipher", - "CipherAlgorithm", - "CipherContext", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 9415f73..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc deleted file mode 100644 index 00332fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc deleted file mode 100644 index 01f245e..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc deleted file mode 100644 index c087360..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc deleted file mode 100644 index 8567fa2..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/aead.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/aead.py deleted file mode 100644 index c8a582d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/aead.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl - -__all__ = [ - "AESCCM", - "AESGCM", - "AESGCMSIV", - "AESOCB3", - "AESSIV", - "ChaCha20Poly1305", -] - -AESGCM = rust_openssl.aead.AESGCM -ChaCha20Poly1305 = rust_openssl.aead.ChaCha20Poly1305 -AESCCM = rust_openssl.aead.AESCCM -AESSIV = rust_openssl.aead.AESSIV -AESOCB3 = rust_openssl.aead.AESOCB3 -AESGCMSIV = rust_openssl.aead.AESGCMSIV diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py deleted file mode 100644 index 1e402c7..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +++ /dev/null @@ -1,136 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography import utils -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - ARC4 as ARC4, -) -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - CAST5 as CAST5, -) -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - IDEA as IDEA, -) -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - SEED as SEED, -) -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - Blowfish as Blowfish, -) -from cryptography.hazmat.decrepit.ciphers.algorithms import ( - TripleDES as TripleDES, -) -from cryptography.hazmat.primitives._cipheralgorithm import _verify_key_size -from cryptography.hazmat.primitives.ciphers import ( - BlockCipherAlgorithm, - CipherAlgorithm, -) - - -class AES(BlockCipherAlgorithm): - name = "AES" - block_size = 128 - # 512 added to support AES-256-XTS, which uses 512-bit keys - key_sizes = frozenset([128, 192, 256, 512]) - - def __init__(self, key: utils.Buffer): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class AES128(BlockCipherAlgorithm): - name = "AES" - block_size = 128 - key_sizes = frozenset([128]) - key_size = 128 - - def __init__(self, key: utils.Buffer): - self.key = _verify_key_size(self, key) - - -class AES256(BlockCipherAlgorithm): - name = "AES" - block_size = 128 - key_sizes = frozenset([256]) - key_size = 256 - - def __init__(self, key: utils.Buffer): - self.key = _verify_key_size(self, key) - - -class Camellia(BlockCipherAlgorithm): - name = "camellia" - block_size = 128 - key_sizes = frozenset([128, 192, 256]) - - def __init__(self, key: utils.Buffer): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -utils.deprecated( - ARC4, - __name__, - "ARC4 has been moved to " - "cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and " - "will be removed from " - "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", - utils.DeprecatedIn43, - name="ARC4", -) - - -utils.deprecated( - TripleDES, - __name__, - "TripleDES has been moved to " - "cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and " - "will be removed from " - "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", - utils.DeprecatedIn43, - name="TripleDES", -) - - -class ChaCha20(CipherAlgorithm): - name = "ChaCha20" - key_sizes = frozenset([256]) - - def __init__(self, key: utils.Buffer, nonce: utils.Buffer): - self.key = _verify_key_size(self, key) - utils._check_byteslike("nonce", nonce) - - if len(nonce) != 16: - raise ValueError("nonce must be 128-bits (16 bytes)") - - self._nonce = nonce - - @property - def nonce(self) -> utils.Buffer: - return self._nonce - - @property - def key_size(self) -> int: - return len(self.key) * 8 - - -class SM4(BlockCipherAlgorithm): - name = "SM4" - block_size = 128 - key_sizes = frozenset([128]) - - def __init__(self, key: bytes): - self.key = _verify_key_size(self, key) - - @property - def key_size(self) -> int: - return len(self.key) * 8 diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/base.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/base.py deleted file mode 100644 index 24fceea..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/base.py +++ /dev/null @@ -1,146 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import typing - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives._cipheralgorithm import CipherAlgorithm -from cryptography.hazmat.primitives.ciphers import modes -from cryptography.utils import Buffer - - -class CipherContext(metaclass=abc.ABCMeta): - @abc.abstractmethod - def update(self, data: Buffer) -> bytes: - """ - Processes the provided bytes through the cipher and returns the results - as bytes. - """ - - @abc.abstractmethod - def update_into(self, data: Buffer, buf: Buffer) -> int: - """ - Processes the provided bytes and writes the resulting data into the - provided buffer. Returns the number of bytes written. - """ - - @abc.abstractmethod - def finalize(self) -> bytes: - """ - Returns the results of processing the final block as bytes. - """ - - @abc.abstractmethod - def reset_nonce(self, nonce: bytes) -> None: - """ - Resets the nonce for the cipher context to the provided value. - Raises an exception if it does not support reset or if the - provided nonce does not have a valid length. - """ - - -class AEADCipherContext(CipherContext, metaclass=abc.ABCMeta): - @abc.abstractmethod - def authenticate_additional_data(self, data: Buffer) -> None: - """ - Authenticates the provided bytes. - """ - - -class AEADDecryptionContext(AEADCipherContext, metaclass=abc.ABCMeta): - @abc.abstractmethod - def finalize_with_tag(self, tag: bytes) -> bytes: - """ - Returns the results of processing the final block as bytes and allows - delayed passing of the authentication tag. - """ - - -class AEADEncryptionContext(AEADCipherContext, metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def tag(self) -> bytes: - """ - Returns tag bytes. This is only available after encryption is - finalized. - """ - - -Mode = typing.TypeVar( - "Mode", bound=typing.Optional[modes.Mode], covariant=True -) - - -class Cipher(typing.Generic[Mode]): - def __init__( - self, - algorithm: CipherAlgorithm, - mode: Mode, - backend: typing.Any = None, - ) -> None: - if not isinstance(algorithm, CipherAlgorithm): - raise TypeError("Expected interface of CipherAlgorithm.") - - if mode is not None: - # mypy needs this assert to narrow the type from our generic - # type. Maybe it won't some time in the future. - assert isinstance(mode, modes.Mode) - mode.validate_for_algorithm(algorithm) - - self.algorithm = algorithm - self.mode = mode - - @typing.overload - def encryptor( - self: Cipher[modes.ModeWithAuthenticationTag], - ) -> AEADEncryptionContext: ... - - @typing.overload - def encryptor( - self: _CIPHER_TYPE, - ) -> CipherContext: ... - - def encryptor(self): - if isinstance(self.mode, modes.ModeWithAuthenticationTag): - if self.mode.tag is not None: - raise ValueError( - "Authentication tag must be None when encrypting." - ) - - return rust_openssl.ciphers.create_encryption_ctx( - self.algorithm, self.mode - ) - - @typing.overload - def decryptor( - self: Cipher[modes.ModeWithAuthenticationTag], - ) -> AEADDecryptionContext: ... - - @typing.overload - def decryptor( - self: _CIPHER_TYPE, - ) -> CipherContext: ... - - def decryptor(self): - return rust_openssl.ciphers.create_decryption_ctx( - self.algorithm, self.mode - ) - - -_CIPHER_TYPE = Cipher[ - typing.Union[ - modes.ModeWithNonce, - modes.ModeWithTweak, - modes.ECB, - modes.ModeWithInitializationVector, - None, - ] -] - -CipherContext.register(rust_openssl.ciphers.CipherContext) -AEADEncryptionContext.register(rust_openssl.ciphers.AEADEncryptionContext) -AEADDecryptionContext.register(rust_openssl.ciphers.AEADDecryptionContext) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/modes.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/modes.py deleted file mode 100644 index 36c555c..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers/modes.py +++ /dev/null @@ -1,268 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography import utils -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.primitives._cipheralgorithm import ( - BlockCipherAlgorithm, - CipherAlgorithm, -) -from cryptography.hazmat.primitives.ciphers import algorithms - - -class Mode(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def name(self) -> str: - """ - A string naming this mode (e.g. "ECB", "CBC"). - """ - - @abc.abstractmethod - def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: - """ - Checks that all the necessary invariants of this (mode, algorithm) - combination are met. - """ - - -class ModeWithInitializationVector(Mode, metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def initialization_vector(self) -> utils.Buffer: - """ - The value of the initialization vector for this mode as bytes. - """ - - -class ModeWithTweak(Mode, metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def tweak(self) -> utils.Buffer: - """ - The value of the tweak for this mode as bytes. - """ - - -class ModeWithNonce(Mode, metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def nonce(self) -> utils.Buffer: - """ - The value of the nonce for this mode as bytes. - """ - - -class ModeWithAuthenticationTag(Mode, metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def tag(self) -> bytes | None: - """ - The value of the tag supplied to the constructor of this mode. - """ - - -def _check_aes_key_length(self: Mode, algorithm: CipherAlgorithm) -> None: - if algorithm.key_size > 256 and algorithm.name == "AES": - raise ValueError( - "Only 128, 192, and 256 bit keys are allowed for this AES mode" - ) - - -def _check_iv_length( - self: ModeWithInitializationVector, algorithm: BlockCipherAlgorithm -) -> None: - iv_len = len(self.initialization_vector) - if iv_len * 8 != algorithm.block_size: - raise ValueError(f"Invalid IV size ({iv_len}) for {self.name}.") - - -def _check_nonce_length( - nonce: utils.Buffer, name: str, algorithm: CipherAlgorithm -) -> None: - if not isinstance(algorithm, BlockCipherAlgorithm): - raise UnsupportedAlgorithm( - f"{name} requires a block cipher algorithm", - _Reasons.UNSUPPORTED_CIPHER, - ) - if len(nonce) * 8 != algorithm.block_size: - raise ValueError(f"Invalid nonce size ({len(nonce)}) for {name}.") - - -def _check_iv_and_key_length( - self: ModeWithInitializationVector, algorithm: CipherAlgorithm -) -> None: - if not isinstance(algorithm, BlockCipherAlgorithm): - raise UnsupportedAlgorithm( - f"{self} requires a block cipher algorithm", - _Reasons.UNSUPPORTED_CIPHER, - ) - _check_aes_key_length(self, algorithm) - _check_iv_length(self, algorithm) - - -class CBC(ModeWithInitializationVector): - name = "CBC" - - def __init__(self, initialization_vector: utils.Buffer): - utils._check_byteslike("initialization_vector", initialization_vector) - self._initialization_vector = initialization_vector - - @property - def initialization_vector(self) -> utils.Buffer: - return self._initialization_vector - - validate_for_algorithm = _check_iv_and_key_length - - -class XTS(ModeWithTweak): - name = "XTS" - - def __init__(self, tweak: utils.Buffer): - utils._check_byteslike("tweak", tweak) - - if len(tweak) != 16: - raise ValueError("tweak must be 128-bits (16 bytes)") - - self._tweak = tweak - - @property - def tweak(self) -> utils.Buffer: - return self._tweak - - def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: - if isinstance(algorithm, (algorithms.AES128, algorithms.AES256)): - raise TypeError( - "The AES128 and AES256 classes do not support XTS, please use " - "the standard AES class instead." - ) - - if algorithm.key_size not in (256, 512): - raise ValueError( - "The XTS specification requires a 256-bit key for AES-128-XTS" - " and 512-bit key for AES-256-XTS" - ) - - -class ECB(Mode): - name = "ECB" - - validate_for_algorithm = _check_aes_key_length - - -class OFB(ModeWithInitializationVector): - name = "OFB" - - def __init__(self, initialization_vector: utils.Buffer): - utils._check_byteslike("initialization_vector", initialization_vector) - self._initialization_vector = initialization_vector - - @property - def initialization_vector(self) -> utils.Buffer: - return self._initialization_vector - - validate_for_algorithm = _check_iv_and_key_length - - -class CFB(ModeWithInitializationVector): - name = "CFB" - - def __init__(self, initialization_vector: utils.Buffer): - utils._check_byteslike("initialization_vector", initialization_vector) - self._initialization_vector = initialization_vector - - @property - def initialization_vector(self) -> utils.Buffer: - return self._initialization_vector - - validate_for_algorithm = _check_iv_and_key_length - - -class CFB8(ModeWithInitializationVector): - name = "CFB8" - - def __init__(self, initialization_vector: utils.Buffer): - utils._check_byteslike("initialization_vector", initialization_vector) - self._initialization_vector = initialization_vector - - @property - def initialization_vector(self) -> utils.Buffer: - return self._initialization_vector - - validate_for_algorithm = _check_iv_and_key_length - - -class CTR(ModeWithNonce): - name = "CTR" - - def __init__(self, nonce: utils.Buffer): - utils._check_byteslike("nonce", nonce) - self._nonce = nonce - - @property - def nonce(self) -> utils.Buffer: - return self._nonce - - def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: - _check_aes_key_length(self, algorithm) - _check_nonce_length(self.nonce, self.name, algorithm) - - -class GCM(ModeWithInitializationVector, ModeWithAuthenticationTag): - name = "GCM" - _MAX_ENCRYPTED_BYTES = (2**39 - 256) // 8 - _MAX_AAD_BYTES = (2**64) // 8 - - def __init__( - self, - initialization_vector: utils.Buffer, - tag: bytes | None = None, - min_tag_length: int = 16, - ): - # OpenSSL 3.0.0 constrains GCM IVs to [64, 1024] bits inclusive - # This is a sane limit anyway so we'll enforce it here. - utils._check_byteslike("initialization_vector", initialization_vector) - if len(initialization_vector) < 8 or len(initialization_vector) > 128: - raise ValueError( - "initialization_vector must be between 8 and 128 bytes (64 " - "and 1024 bits)." - ) - self._initialization_vector = initialization_vector - if tag is not None: - utils._check_bytes("tag", tag) - if min_tag_length < 4: - raise ValueError("min_tag_length must be >= 4") - if len(tag) < min_tag_length: - raise ValueError( - f"Authentication tag must be {min_tag_length} bytes or " - "longer." - ) - self._tag = tag - self._min_tag_length = min_tag_length - - @property - def tag(self) -> bytes | None: - return self._tag - - @property - def initialization_vector(self) -> utils.Buffer: - return self._initialization_vector - - def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: - _check_aes_key_length(self, algorithm) - if not isinstance(algorithm, BlockCipherAlgorithm): - raise UnsupportedAlgorithm( - "GCM requires a block cipher algorithm", - _Reasons.UNSUPPORTED_CIPHER, - ) - block_size_bytes = algorithm.block_size // 8 - if self._tag is not None and len(self._tag) > block_size_bytes: - raise ValueError( - f"Authentication tag cannot be more than {block_size_bytes} " - "bytes." - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/cmac.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/cmac.py deleted file mode 100644 index 2c67ce2..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/cmac.py +++ /dev/null @@ -1,10 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl - -__all__ = ["CMAC"] -CMAC = rust_openssl.cmac.CMAC diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/constant_time.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/constant_time.py deleted file mode 100644 index 3975c71..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/constant_time.py +++ /dev/null @@ -1,14 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import hmac - - -def bytes_eq(a: bytes, b: bytes) -> bool: - if not isinstance(a, bytes) or not isinstance(b, bytes): - raise TypeError("a and b must be bytes.") - - return hmac.compare_digest(a, b) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hashes.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hashes.py deleted file mode 100644 index 4b55ec3..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hashes.py +++ /dev/null @@ -1,246 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.utils import Buffer - -__all__ = [ - "MD5", - "SHA1", - "SHA3_224", - "SHA3_256", - "SHA3_384", - "SHA3_512", - "SHA224", - "SHA256", - "SHA384", - "SHA512", - "SHA512_224", - "SHA512_256", - "SHAKE128", - "SHAKE256", - "SM3", - "BLAKE2b", - "BLAKE2s", - "ExtendableOutputFunction", - "Hash", - "HashAlgorithm", - "HashContext", - "XOFHash", -] - - -class HashAlgorithm(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def name(self) -> str: - """ - A string naming this algorithm (e.g. "sha256", "md5"). - """ - - @property - @abc.abstractmethod - def digest_size(self) -> int: - """ - The size of the resulting digest in bytes. - """ - - @property - @abc.abstractmethod - def block_size(self) -> int | None: - """ - The internal block size of the hash function, or None if the hash - function does not use blocks internally (e.g. SHA3). - """ - - -class HashContext(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def algorithm(self) -> HashAlgorithm: - """ - A HashAlgorithm that will be used by this context. - """ - - @abc.abstractmethod - def update(self, data: Buffer) -> None: - """ - Processes the provided bytes through the hash. - """ - - @abc.abstractmethod - def finalize(self) -> bytes: - """ - Finalizes the hash context and returns the hash digest as bytes. - """ - - @abc.abstractmethod - def copy(self) -> HashContext: - """ - Return a HashContext that is a copy of the current context. - """ - - -Hash = rust_openssl.hashes.Hash -HashContext.register(Hash) - -XOFHash = rust_openssl.hashes.XOFHash - - -class ExtendableOutputFunction(metaclass=abc.ABCMeta): - """ - An interface for extendable output functions. - """ - - -class SHA1(HashAlgorithm): - name = "sha1" - digest_size = 20 - block_size = 64 - - -class SHA512_224(HashAlgorithm): # noqa: N801 - name = "sha512-224" - digest_size = 28 - block_size = 128 - - -class SHA512_256(HashAlgorithm): # noqa: N801 - name = "sha512-256" - digest_size = 32 - block_size = 128 - - -class SHA224(HashAlgorithm): - name = "sha224" - digest_size = 28 - block_size = 64 - - -class SHA256(HashAlgorithm): - name = "sha256" - digest_size = 32 - block_size = 64 - - -class SHA384(HashAlgorithm): - name = "sha384" - digest_size = 48 - block_size = 128 - - -class SHA512(HashAlgorithm): - name = "sha512" - digest_size = 64 - block_size = 128 - - -class SHA3_224(HashAlgorithm): # noqa: N801 - name = "sha3-224" - digest_size = 28 - block_size = None - - -class SHA3_256(HashAlgorithm): # noqa: N801 - name = "sha3-256" - digest_size = 32 - block_size = None - - -class SHA3_384(HashAlgorithm): # noqa: N801 - name = "sha3-384" - digest_size = 48 - block_size = None - - -class SHA3_512(HashAlgorithm): # noqa: N801 - name = "sha3-512" - digest_size = 64 - block_size = None - - -class SHAKE128(HashAlgorithm, ExtendableOutputFunction): - name = "shake128" - block_size = None - - def __init__(self, digest_size: int): - if not isinstance(digest_size, int): - raise TypeError("digest_size must be an integer") - - if digest_size < 1: - raise ValueError("digest_size must be a positive integer") - - self._digest_size = digest_size - - @property - def digest_size(self) -> int: - return self._digest_size - - -class SHAKE256(HashAlgorithm, ExtendableOutputFunction): - name = "shake256" - block_size = None - - def __init__(self, digest_size: int): - if not isinstance(digest_size, int): - raise TypeError("digest_size must be an integer") - - if digest_size < 1: - raise ValueError("digest_size must be a positive integer") - - self._digest_size = digest_size - - @property - def digest_size(self) -> int: - return self._digest_size - - -class MD5(HashAlgorithm): - name = "md5" - digest_size = 16 - block_size = 64 - - -class BLAKE2b(HashAlgorithm): - name = "blake2b" - _max_digest_size = 64 - _min_digest_size = 1 - block_size = 128 - - def __init__(self, digest_size: int): - if digest_size != 64: - raise ValueError("Digest size must be 64") - - self._digest_size = digest_size - - @property - def digest_size(self) -> int: - return self._digest_size - - -class BLAKE2s(HashAlgorithm): - name = "blake2s" - block_size = 64 - _max_digest_size = 32 - _min_digest_size = 1 - - def __init__(self, digest_size: int): - if digest_size != 32: - raise ValueError("Digest size must be 32") - - self._digest_size = digest_size - - @property - def digest_size(self) -> int: - return self._digest_size - - -class SM3(HashAlgorithm): - name = "sm3" - digest_size = 32 - block_size = 64 diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hmac.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hmac.py deleted file mode 100644 index a9442d5..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/hmac.py +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import hashes - -__all__ = ["HMAC"] - -HMAC = rust_openssl.hmac.HMAC -hashes.HashContext.register(HMAC) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__init__.py deleted file mode 100644 index 79bb459..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - - -class KeyDerivationFunction(metaclass=abc.ABCMeta): - @abc.abstractmethod - def derive(self, key_material: bytes) -> bytes: - """ - Deterministically generates and returns a new key based on the existing - key material. - """ - - @abc.abstractmethod - def verify(self, key_material: bytes, expected_key: bytes) -> None: - """ - Checks whether the key generated by the key material matches the - expected derived key. Raises an exception if they do not match. - """ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1ffde28..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc deleted file mode 100644 index 1cef727..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc deleted file mode 100644 index 81da82a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc deleted file mode 100644 index 3b51dd4..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc deleted file mode 100644 index b60a904..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc deleted file mode 100644 index 390e7c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc deleted file mode 100644 index fa0551d..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc deleted file mode 100644 index 8620f12..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/argon2.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/argon2.py deleted file mode 100644 index 405fc8d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/argon2.py +++ /dev/null @@ -1,13 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - -Argon2id = rust_openssl.kdf.Argon2id -KeyDerivationFunction.register(Argon2id) - -__all__ = ["Argon2id"] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py deleted file mode 100644 index 1b92841..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py +++ /dev/null @@ -1,125 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing -from collections.abc import Callable - -from cryptography import utils -from cryptography.exceptions import AlreadyFinalized, InvalidKey -from cryptography.hazmat.primitives import constant_time, hashes, hmac -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - - -def _int_to_u32be(n: int) -> bytes: - return n.to_bytes(length=4, byteorder="big") - - -def _common_args_checks( - algorithm: hashes.HashAlgorithm, - length: int, - otherinfo: bytes | None, -) -> None: - max_length = algorithm.digest_size * (2**32 - 1) - if length > max_length: - raise ValueError(f"Cannot derive keys larger than {max_length} bits.") - if otherinfo is not None: - utils._check_bytes("otherinfo", otherinfo) - - -def _concatkdf_derive( - key_material: utils.Buffer, - length: int, - auxfn: Callable[[], hashes.HashContext], - otherinfo: bytes, -) -> bytes: - utils._check_byteslike("key_material", key_material) - output = [b""] - outlen = 0 - counter = 1 - - while length > outlen: - h = auxfn() - h.update(_int_to_u32be(counter)) - h.update(key_material) - h.update(otherinfo) - output.append(h.finalize()) - outlen += len(output[-1]) - counter += 1 - - return b"".join(output)[:length] - - -class ConcatKDFHash(KeyDerivationFunction): - def __init__( - self, - algorithm: hashes.HashAlgorithm, - length: int, - otherinfo: bytes | None, - backend: typing.Any = None, - ): - _common_args_checks(algorithm, length, otherinfo) - self._algorithm = algorithm - self._length = length - self._otherinfo: bytes = otherinfo if otherinfo is not None else b"" - - self._used = False - - def _hash(self) -> hashes.Hash: - return hashes.Hash(self._algorithm) - - def derive(self, key_material: utils.Buffer) -> bytes: - if self._used: - raise AlreadyFinalized - self._used = True - return _concatkdf_derive( - key_material, self._length, self._hash, self._otherinfo - ) - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - if not constant_time.bytes_eq(self.derive(key_material), expected_key): - raise InvalidKey - - -class ConcatKDFHMAC(KeyDerivationFunction): - def __init__( - self, - algorithm: hashes.HashAlgorithm, - length: int, - salt: bytes | None, - otherinfo: bytes | None, - backend: typing.Any = None, - ): - _common_args_checks(algorithm, length, otherinfo) - self._algorithm = algorithm - self._length = length - self._otherinfo: bytes = otherinfo if otherinfo is not None else b"" - - if algorithm.block_size is None: - raise TypeError(f"{algorithm.name} is unsupported for ConcatKDF") - - if salt is None: - salt = b"\x00" * algorithm.block_size - else: - utils._check_bytes("salt", salt) - - self._salt = salt - - self._used = False - - def _hmac(self) -> hmac.HMAC: - return hmac.HMAC(self._salt, self._algorithm) - - def derive(self, key_material: utils.Buffer) -> bytes: - if self._used: - raise AlreadyFinalized - self._used = True - return _concatkdf_derive( - key_material, self._length, self._hmac, self._otherinfo - ) - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - if not constant_time.bytes_eq(self.derive(key_material), expected_key): - raise InvalidKey diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py deleted file mode 100644 index 1e162d9..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py +++ /dev/null @@ -1,16 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - -HKDF = rust_openssl.kdf.HKDF -HKDFExpand = rust_openssl.kdf.HKDFExpand - -KeyDerivationFunction.register(HKDF) -KeyDerivationFunction.register(HKDFExpand) - -__all__ = ["HKDF", "HKDFExpand"] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py deleted file mode 100644 index 5b47137..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py +++ /dev/null @@ -1,303 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing -from collections.abc import Callable - -from cryptography import utils -from cryptography.exceptions import ( - AlreadyFinalized, - InvalidKey, - UnsupportedAlgorithm, - _Reasons, -) -from cryptography.hazmat.primitives import ( - ciphers, - cmac, - constant_time, - hashes, - hmac, -) -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - - -class Mode(utils.Enum): - CounterMode = "ctr" - - -class CounterLocation(utils.Enum): - BeforeFixed = "before_fixed" - AfterFixed = "after_fixed" - MiddleFixed = "middle_fixed" - - -class _KBKDFDeriver: - def __init__( - self, - prf: Callable, - mode: Mode, - length: int, - rlen: int, - llen: int | None, - location: CounterLocation, - break_location: int | None, - label: bytes | None, - context: bytes | None, - fixed: bytes | None, - ): - assert callable(prf) - - if not isinstance(mode, Mode): - raise TypeError("mode must be of type Mode") - - if not isinstance(location, CounterLocation): - raise TypeError("location must be of type CounterLocation") - - if break_location is None and location is CounterLocation.MiddleFixed: - raise ValueError("Please specify a break_location") - - if ( - break_location is not None - and location != CounterLocation.MiddleFixed - ): - raise ValueError( - "break_location is ignored when location is not" - " CounterLocation.MiddleFixed" - ) - - if break_location is not None and not isinstance(break_location, int): - raise TypeError("break_location must be an integer") - - if break_location is not None and break_location < 0: - raise ValueError("break_location must be a positive integer") - - if (label or context) and fixed: - raise ValueError( - "When supplying fixed data, label and context are ignored." - ) - - if rlen is None or not self._valid_byte_length(rlen): - raise ValueError("rlen must be between 1 and 4") - - if llen is None and fixed is None: - raise ValueError("Please specify an llen") - - if llen is not None and not isinstance(llen, int): - raise TypeError("llen must be an integer") - - if llen == 0: - raise ValueError("llen must be non-zero") - - if label is None: - label = b"" - - if context is None: - context = b"" - - utils._check_bytes("label", label) - utils._check_bytes("context", context) - self._prf = prf - self._mode = mode - self._length = length - self._rlen = rlen - self._llen = llen - self._location = location - self._break_location = break_location - self._label = label - self._context = context - self._used = False - self._fixed_data = fixed - - @staticmethod - def _valid_byte_length(value: int) -> bool: - if not isinstance(value, int): - raise TypeError("value must be of type int") - - value_bin = utils.int_to_bytes(1, value) - return 1 <= len(value_bin) <= 4 - - def derive( - self, key_material: utils.Buffer, prf_output_size: int - ) -> bytes: - if self._used: - raise AlreadyFinalized - - utils._check_byteslike("key_material", key_material) - self._used = True - - # inverse floor division (equivalent to ceiling) - rounds = -(-self._length // prf_output_size) - - output = [b""] - - # For counter mode, the number of iterations shall not be - # larger than 2^r-1, where r <= 32 is the binary length of the counter - # This ensures that the counter values used as an input to the - # PRF will not repeat during a particular call to the KDF function. - r_bin = utils.int_to_bytes(1, self._rlen) - if rounds > pow(2, len(r_bin) * 8) - 1: - raise ValueError("There are too many iterations.") - - fixed = self._generate_fixed_input() - - if self._location == CounterLocation.BeforeFixed: - data_before_ctr = b"" - data_after_ctr = fixed - elif self._location == CounterLocation.AfterFixed: - data_before_ctr = fixed - data_after_ctr = b"" - else: - if isinstance( - self._break_location, int - ) and self._break_location > len(fixed): - raise ValueError("break_location offset > len(fixed)") - data_before_ctr = fixed[: self._break_location] - data_after_ctr = fixed[self._break_location :] - - for i in range(1, rounds + 1): - h = self._prf(key_material) - - counter = utils.int_to_bytes(i, self._rlen) - input_data = data_before_ctr + counter + data_after_ctr - - h.update(input_data) - - output.append(h.finalize()) - - return b"".join(output)[: self._length] - - def _generate_fixed_input(self) -> bytes: - if self._fixed_data and isinstance(self._fixed_data, bytes): - return self._fixed_data - - l_val = utils.int_to_bytes(self._length * 8, self._llen) - - return b"".join([self._label, b"\x00", self._context, l_val]) - - -class KBKDFHMAC(KeyDerivationFunction): - def __init__( - self, - algorithm: hashes.HashAlgorithm, - mode: Mode, - length: int, - rlen: int, - llen: int | None, - location: CounterLocation, - label: bytes | None, - context: bytes | None, - fixed: bytes | None, - backend: typing.Any = None, - *, - break_location: int | None = None, - ): - if not isinstance(algorithm, hashes.HashAlgorithm): - raise UnsupportedAlgorithm( - "Algorithm supplied is not a supported hash algorithm.", - _Reasons.UNSUPPORTED_HASH, - ) - - from cryptography.hazmat.backends.openssl.backend import ( - backend as ossl, - ) - - if not ossl.hmac_supported(algorithm): - raise UnsupportedAlgorithm( - "Algorithm supplied is not a supported hmac algorithm.", - _Reasons.UNSUPPORTED_HASH, - ) - - self._algorithm = algorithm - - self._deriver = _KBKDFDeriver( - self._prf, - mode, - length, - rlen, - llen, - location, - break_location, - label, - context, - fixed, - ) - - def _prf(self, key_material: bytes) -> hmac.HMAC: - return hmac.HMAC(key_material, self._algorithm) - - def derive(self, key_material: utils.Buffer) -> bytes: - return self._deriver.derive(key_material, self._algorithm.digest_size) - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - if not constant_time.bytes_eq(self.derive(key_material), expected_key): - raise InvalidKey - - -class KBKDFCMAC(KeyDerivationFunction): - def __init__( - self, - algorithm, - mode: Mode, - length: int, - rlen: int, - llen: int | None, - location: CounterLocation, - label: bytes | None, - context: bytes | None, - fixed: bytes | None, - backend: typing.Any = None, - *, - break_location: int | None = None, - ): - if not issubclass( - algorithm, ciphers.BlockCipherAlgorithm - ) or not issubclass(algorithm, ciphers.CipherAlgorithm): - raise UnsupportedAlgorithm( - "Algorithm supplied is not a supported cipher algorithm.", - _Reasons.UNSUPPORTED_CIPHER, - ) - - self._algorithm = algorithm - self._cipher: ciphers.BlockCipherAlgorithm | None = None - - self._deriver = _KBKDFDeriver( - self._prf, - mode, - length, - rlen, - llen, - location, - break_location, - label, - context, - fixed, - ) - - def _prf(self, _: bytes) -> cmac.CMAC: - assert self._cipher is not None - - return cmac.CMAC(self._cipher) - - def derive(self, key_material: utils.Buffer) -> bytes: - self._cipher = self._algorithm(key_material) - - assert self._cipher is not None - - from cryptography.hazmat.backends.openssl.backend import ( - backend as ossl, - ) - - if not ossl.cmac_algorithm_supported(self._cipher): - raise UnsupportedAlgorithm( - "Algorithm supplied is not a supported cipher algorithm.", - _Reasons.UNSUPPORTED_CIPHER, - ) - - return self._deriver.derive(key_material, self._cipher.block_size // 8) - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - if not constant_time.bytes_eq(self.derive(key_material), expected_key): - raise InvalidKey diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py deleted file mode 100644 index d539f13..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ /dev/null @@ -1,62 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography import utils -from cryptography.exceptions import ( - AlreadyFinalized, - InvalidKey, - UnsupportedAlgorithm, - _Reasons, -) -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives import constant_time, hashes -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - - -class PBKDF2HMAC(KeyDerivationFunction): - def __init__( - self, - algorithm: hashes.HashAlgorithm, - length: int, - salt: bytes, - iterations: int, - backend: typing.Any = None, - ): - from cryptography.hazmat.backends.openssl.backend import ( - backend as ossl, - ) - - if not ossl.pbkdf2_hmac_supported(algorithm): - raise UnsupportedAlgorithm( - f"{algorithm.name} is not supported for PBKDF2.", - _Reasons.UNSUPPORTED_HASH, - ) - self._used = False - self._algorithm = algorithm - self._length = length - utils._check_bytes("salt", salt) - self._salt = salt - self._iterations = iterations - - def derive(self, key_material: utils.Buffer) -> bytes: - if self._used: - raise AlreadyFinalized("PBKDF2 instances can only be used once.") - self._used = True - - return rust_openssl.kdf.derive_pbkdf2_hmac( - key_material, - self._algorithm, - self._salt, - self._iterations, - self._length, - ) - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - derived_key = self.derive(key_material) - if not constant_time.bytes_eq(derived_key, expected_key): - raise InvalidKey("Keys do not match.") diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py deleted file mode 100644 index f791cee..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import sys - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - -# This is used by the scrypt tests to skip tests that require more memory -# than the MEM_LIMIT -_MEM_LIMIT = sys.maxsize // 2 - -Scrypt = rust_openssl.kdf.Scrypt -KeyDerivationFunction.register(Scrypt) - -__all__ = ["Scrypt"] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py deleted file mode 100644 index 63870cd..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py +++ /dev/null @@ -1,61 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography import utils -from cryptography.exceptions import AlreadyFinalized, InvalidKey -from cryptography.hazmat.primitives import constant_time, hashes -from cryptography.hazmat.primitives.kdf import KeyDerivationFunction - - -def _int_to_u32be(n: int) -> bytes: - return n.to_bytes(length=4, byteorder="big") - - -class X963KDF(KeyDerivationFunction): - def __init__( - self, - algorithm: hashes.HashAlgorithm, - length: int, - sharedinfo: bytes | None, - backend: typing.Any = None, - ): - max_len = algorithm.digest_size * (2**32 - 1) - if length > max_len: - raise ValueError(f"Cannot derive keys larger than {max_len} bits.") - if sharedinfo is not None: - utils._check_bytes("sharedinfo", sharedinfo) - - self._algorithm = algorithm - self._length = length - self._sharedinfo = sharedinfo - self._used = False - - def derive(self, key_material: utils.Buffer) -> bytes: - if self._used: - raise AlreadyFinalized - self._used = True - utils._check_byteslike("key_material", key_material) - output = [b""] - outlen = 0 - counter = 1 - - while self._length > outlen: - h = hashes.Hash(self._algorithm) - h.update(key_material) - h.update(_int_to_u32be(counter)) - if self._sharedinfo is not None: - h.update(self._sharedinfo) - output.append(h.finalize()) - outlen += len(output[-1]) - counter += 1 - - return b"".join(output)[: self._length] - - def verify(self, key_material: bytes, expected_key: bytes) -> None: - if not constant_time.bytes_eq(self.derive(key_material), expected_key): - raise InvalidKey diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/keywrap.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/keywrap.py deleted file mode 100644 index b93d87d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/keywrap.py +++ /dev/null @@ -1,177 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.hazmat.primitives.ciphers import Cipher -from cryptography.hazmat.primitives.ciphers.algorithms import AES -from cryptography.hazmat.primitives.ciphers.modes import ECB -from cryptography.hazmat.primitives.constant_time import bytes_eq - - -def _wrap_core( - wrapping_key: bytes, - a: bytes, - r: list[bytes], -) -> bytes: - # RFC 3394 Key Wrap - 2.2.1 (index method) - encryptor = Cipher(AES(wrapping_key), ECB()).encryptor() - n = len(r) - for j in range(6): - for i in range(n): - # every encryption operation is a discrete 16 byte chunk (because - # AES has a 128-bit block size) and since we're using ECB it is - # safe to reuse the encryptor for the entire operation - b = encryptor.update(a + r[i]) - a = ( - int.from_bytes(b[:8], byteorder="big") ^ ((n * j) + i + 1) - ).to_bytes(length=8, byteorder="big") - r[i] = b[-8:] - - assert encryptor.finalize() == b"" - - return a + b"".join(r) - - -def aes_key_wrap( - wrapping_key: bytes, - key_to_wrap: bytes, - backend: typing.Any = None, -) -> bytes: - if len(wrapping_key) not in [16, 24, 32]: - raise ValueError("The wrapping key must be a valid AES key length") - - if len(key_to_wrap) < 16: - raise ValueError("The key to wrap must be at least 16 bytes") - - if len(key_to_wrap) % 8 != 0: - raise ValueError("The key to wrap must be a multiple of 8 bytes") - - a = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] - return _wrap_core(wrapping_key, a, r) - - -def _unwrap_core( - wrapping_key: bytes, - a: bytes, - r: list[bytes], -) -> tuple[bytes, list[bytes]]: - # Implement RFC 3394 Key Unwrap - 2.2.2 (index method) - decryptor = Cipher(AES(wrapping_key), ECB()).decryptor() - n = len(r) - for j in reversed(range(6)): - for i in reversed(range(n)): - atr = ( - int.from_bytes(a, byteorder="big") ^ ((n * j) + i + 1) - ).to_bytes(length=8, byteorder="big") + r[i] - # every decryption operation is a discrete 16 byte chunk so - # it is safe to reuse the decryptor for the entire operation - b = decryptor.update(atr) - a = b[:8] - r[i] = b[-8:] - - assert decryptor.finalize() == b"" - return a, r - - -def aes_key_wrap_with_padding( - wrapping_key: bytes, - key_to_wrap: bytes, - backend: typing.Any = None, -) -> bytes: - if len(wrapping_key) not in [16, 24, 32]: - raise ValueError("The wrapping key must be a valid AES key length") - - aiv = b"\xa6\x59\x59\xa6" + len(key_to_wrap).to_bytes( - length=4, byteorder="big" - ) - # pad the key to wrap if necessary - pad = (8 - (len(key_to_wrap) % 8)) % 8 - key_to_wrap = key_to_wrap + b"\x00" * pad - if len(key_to_wrap) == 8: - # RFC 5649 - 4.1 - exactly 8 octets after padding - encryptor = Cipher(AES(wrapping_key), ECB()).encryptor() - b = encryptor.update(aiv + key_to_wrap) - assert encryptor.finalize() == b"" - return b - else: - r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] - return _wrap_core(wrapping_key, aiv, r) - - -def aes_key_unwrap_with_padding( - wrapping_key: bytes, - wrapped_key: bytes, - backend: typing.Any = None, -) -> bytes: - if len(wrapped_key) < 16: - raise InvalidUnwrap("Must be at least 16 bytes") - - if len(wrapping_key) not in [16, 24, 32]: - raise ValueError("The wrapping key must be a valid AES key length") - - if len(wrapped_key) == 16: - # RFC 5649 - 4.2 - exactly two 64-bit blocks - decryptor = Cipher(AES(wrapping_key), ECB()).decryptor() - out = decryptor.update(wrapped_key) - assert decryptor.finalize() == b"" - a = out[:8] - data = out[8:] - n = 1 - else: - r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] - encrypted_aiv = r.pop(0) - n = len(r) - a, r = _unwrap_core(wrapping_key, encrypted_aiv, r) - data = b"".join(r) - - # 1) Check that MSB(32,A) = A65959A6. - # 2) Check that 8*(n-1) < LSB(32,A) <= 8*n. If so, let - # MLI = LSB(32,A). - # 3) Let b = (8*n)-MLI, and then check that the rightmost b octets of - # the output data are zero. - mli = int.from_bytes(a[4:], byteorder="big") - b = (8 * n) - mli - if ( - not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") - or not 8 * (n - 1) < mli <= 8 * n - or (b != 0 and not bytes_eq(data[-b:], b"\x00" * b)) - ): - raise InvalidUnwrap() - - if b == 0: - return data - else: - return data[:-b] - - -def aes_key_unwrap( - wrapping_key: bytes, - wrapped_key: bytes, - backend: typing.Any = None, -) -> bytes: - if len(wrapped_key) < 24: - raise InvalidUnwrap("Must be at least 24 bytes") - - if len(wrapped_key) % 8 != 0: - raise InvalidUnwrap("The wrapped key must be a multiple of 8 bytes") - - if len(wrapping_key) not in [16, 24, 32]: - raise ValueError("The wrapping key must be a valid AES key length") - - aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] - a = r.pop(0) - a, r = _unwrap_core(wrapping_key, a, r) - if not bytes_eq(a, aiv): - raise InvalidUnwrap() - - return b"".join(r) - - -class InvalidUnwrap(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/padding.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/padding.py deleted file mode 100644 index f9cd1f1..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/padding.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc - -from cryptography import utils -from cryptography.hazmat.bindings._rust import ( - ANSIX923PaddingContext, - ANSIX923UnpaddingContext, - PKCS7PaddingContext, - PKCS7UnpaddingContext, -) - - -class PaddingContext(metaclass=abc.ABCMeta): - @abc.abstractmethod - def update(self, data: utils.Buffer) -> bytes: - """ - Pads the provided bytes and returns any available data as bytes. - """ - - @abc.abstractmethod - def finalize(self) -> bytes: - """ - Finalize the padding, returns bytes. - """ - - -def _byte_padding_check(block_size: int) -> None: - if not (0 <= block_size <= 2040): - raise ValueError("block_size must be in range(0, 2041).") - - if block_size % 8 != 0: - raise ValueError("block_size must be a multiple of 8.") - - -class PKCS7: - def __init__(self, block_size: int): - _byte_padding_check(block_size) - self.block_size = block_size - - def padder(self) -> PaddingContext: - return PKCS7PaddingContext(self.block_size) - - def unpadder(self) -> PaddingContext: - return PKCS7UnpaddingContext(self.block_size) - - -PaddingContext.register(PKCS7PaddingContext) -PaddingContext.register(PKCS7UnpaddingContext) - - -class ANSIX923: - def __init__(self, block_size: int): - _byte_padding_check(block_size) - self.block_size = block_size - - def padder(self) -> PaddingContext: - return ANSIX923PaddingContext(self.block_size) - - def unpadder(self) -> PaddingContext: - return ANSIX923UnpaddingContext(self.block_size) - - -PaddingContext.register(ANSIX923PaddingContext) -PaddingContext.register(ANSIX923UnpaddingContext) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/poly1305.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/poly1305.py deleted file mode 100644 index 7f5a77a..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/poly1305.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl - -__all__ = ["Poly1305"] - -Poly1305 = rust_openssl.poly1305.Poly1305 diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__init__.py deleted file mode 100644 index 62283cc..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__init__.py +++ /dev/null @@ -1,65 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat.primitives._serialization import ( - BestAvailableEncryption, - Encoding, - KeySerializationEncryption, - NoEncryption, - ParameterFormat, - PrivateFormat, - PublicFormat, - _KeySerializationEncryption, -) -from cryptography.hazmat.primitives.serialization.base import ( - load_der_parameters, - load_der_private_key, - load_der_public_key, - load_pem_parameters, - load_pem_private_key, - load_pem_public_key, -) -from cryptography.hazmat.primitives.serialization.ssh import ( - SSHCertificate, - SSHCertificateBuilder, - SSHCertificateType, - SSHCertPrivateKeyTypes, - SSHCertPublicKeyTypes, - SSHPrivateKeyTypes, - SSHPublicKeyTypes, - load_ssh_private_key, - load_ssh_public_identity, - load_ssh_public_key, - ssh_key_fingerprint, -) - -__all__ = [ - "BestAvailableEncryption", - "Encoding", - "KeySerializationEncryption", - "NoEncryption", - "ParameterFormat", - "PrivateFormat", - "PublicFormat", - "SSHCertPrivateKeyTypes", - "SSHCertPublicKeyTypes", - "SSHCertificate", - "SSHCertificateBuilder", - "SSHCertificateType", - "SSHPrivateKeyTypes", - "SSHPublicKeyTypes", - "_KeySerializationEncryption", - "load_der_parameters", - "load_der_private_key", - "load_der_public_key", - "load_pem_parameters", - "load_pem_private_key", - "load_pem_public_key", - "load_ssh_private_key", - "load_ssh_public_identity", - "load_ssh_public_key", - "ssh_key_fingerprint", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 033d77f..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc deleted file mode 100644 index df8bb98..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc deleted file mode 100644 index 5daefba..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc deleted file mode 100644 index ad67e58..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc deleted file mode 100644 index cc3399a..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/base.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/base.py deleted file mode 100644 index e7c998b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/base.py +++ /dev/null @@ -1,14 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from cryptography.hazmat.bindings._rust import openssl as rust_openssl - -load_pem_private_key = rust_openssl.keys.load_pem_private_key -load_der_private_key = rust_openssl.keys.load_der_private_key - -load_pem_public_key = rust_openssl.keys.load_pem_public_key -load_der_public_key = rust_openssl.keys.load_der_public_key - -load_pem_parameters = rust_openssl.dh.from_pem_parameters -load_der_parameters = rust_openssl.dh.from_der_parameters diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py deleted file mode 100644 index 58884ff..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py +++ /dev/null @@ -1,176 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing -from collections.abc import Iterable - -from cryptography import x509 -from cryptography.hazmat.bindings._rust import pkcs12 as rust_pkcs12 -from cryptography.hazmat.primitives import serialization -from cryptography.hazmat.primitives._serialization import PBES as PBES -from cryptography.hazmat.primitives.asymmetric import ( - dsa, - ec, - ed448, - ed25519, - rsa, -) -from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes - -__all__ = [ - "PBES", - "PKCS12Certificate", - "PKCS12KeyAndCertificates", - "PKCS12PrivateKeyTypes", - "load_key_and_certificates", - "load_pkcs12", - "serialize_java_truststore", - "serialize_key_and_certificates", -] - -PKCS12PrivateKeyTypes = typing.Union[ - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey, - ed25519.Ed25519PrivateKey, - ed448.Ed448PrivateKey, -] - - -PKCS12Certificate = rust_pkcs12.PKCS12Certificate - - -class PKCS12KeyAndCertificates: - def __init__( - self, - key: PrivateKeyTypes | None, - cert: PKCS12Certificate | None, - additional_certs: list[PKCS12Certificate], - ): - if key is not None and not isinstance( - key, - ( - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey, - ed25519.Ed25519PrivateKey, - ed448.Ed448PrivateKey, - ), - ): - raise TypeError( - "Key must be RSA, DSA, EllipticCurve, ED25519, or ED448" - " private key, or None." - ) - if cert is not None and not isinstance(cert, PKCS12Certificate): - raise TypeError("cert must be a PKCS12Certificate object or None") - if not all( - isinstance(add_cert, PKCS12Certificate) - for add_cert in additional_certs - ): - raise TypeError( - "all values in additional_certs must be PKCS12Certificate" - " objects" - ) - self._key = key - self._cert = cert - self._additional_certs = additional_certs - - @property - def key(self) -> PrivateKeyTypes | None: - return self._key - - @property - def cert(self) -> PKCS12Certificate | None: - return self._cert - - @property - def additional_certs(self) -> list[PKCS12Certificate]: - return self._additional_certs - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PKCS12KeyAndCertificates): - return NotImplemented - - return ( - self.key == other.key - and self.cert == other.cert - and self.additional_certs == other.additional_certs - ) - - def __hash__(self) -> int: - return hash((self.key, self.cert, tuple(self.additional_certs))) - - def __repr__(self) -> str: - fmt = ( - "" - ) - return fmt.format(self.key, self.cert, self.additional_certs) - - -load_key_and_certificates = rust_pkcs12.load_key_and_certificates -load_pkcs12 = rust_pkcs12.load_pkcs12 - - -_PKCS12CATypes = typing.Union[ - x509.Certificate, - PKCS12Certificate, -] - - -def serialize_java_truststore( - certs: Iterable[PKCS12Certificate], - encryption_algorithm: serialization.KeySerializationEncryption, -) -> bytes: - if not certs: - raise ValueError("You must supply at least one cert") - - if not isinstance( - encryption_algorithm, serialization.KeySerializationEncryption - ): - raise TypeError( - "Key encryption algorithm must be a " - "KeySerializationEncryption instance" - ) - - return rust_pkcs12.serialize_java_truststore(certs, encryption_algorithm) - - -def serialize_key_and_certificates( - name: bytes | None, - key: PKCS12PrivateKeyTypes | None, - cert: x509.Certificate | None, - cas: Iterable[_PKCS12CATypes] | None, - encryption_algorithm: serialization.KeySerializationEncryption, -) -> bytes: - if key is not None and not isinstance( - key, - ( - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey, - ed25519.Ed25519PrivateKey, - ed448.Ed448PrivateKey, - ), - ): - raise TypeError( - "Key must be RSA, DSA, EllipticCurve, ED25519, or ED448" - " private key, or None." - ) - - if not isinstance( - encryption_algorithm, serialization.KeySerializationEncryption - ): - raise TypeError( - "Key encryption algorithm must be a " - "KeySerializationEncryption instance" - ) - - if key is None and cert is None and not cas: - raise ValueError("You must supply at least one of key, cert, or cas") - - return rust_pkcs12.serialize_key_and_certificates( - name, key, cert, cas, encryption_algorithm - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py deleted file mode 100644 index 456dc5b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py +++ /dev/null @@ -1,411 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import email.base64mime -import email.generator -import email.message -import email.policy -import io -import typing -from collections.abc import Iterable - -from cryptography import utils, x509 -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.bindings._rust import pkcs7 as rust_pkcs7 -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import ec, padding, rsa -from cryptography.hazmat.primitives.ciphers import ( - algorithms, -) -from cryptography.utils import _check_byteslike - -load_pem_pkcs7_certificates = rust_pkcs7.load_pem_pkcs7_certificates - -load_der_pkcs7_certificates = rust_pkcs7.load_der_pkcs7_certificates - -serialize_certificates = rust_pkcs7.serialize_certificates - -PKCS7HashTypes = typing.Union[ - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, -] - -PKCS7PrivateKeyTypes = typing.Union[ - rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey -] - -ContentEncryptionAlgorithm = typing.Union[ - typing.Type[algorithms.AES128], typing.Type[algorithms.AES256] -] - - -class PKCS7Options(utils.Enum): - Text = "Add text/plain MIME type" - Binary = "Don't translate input data into canonical MIME format" - DetachedSignature = "Don't embed data in the PKCS7 structure" - NoCapabilities = "Don't embed SMIME capabilities" - NoAttributes = "Don't embed authenticatedAttributes" - NoCerts = "Don't embed signer certificate" - - -class PKCS7SignatureBuilder: - def __init__( - self, - data: utils.Buffer | None = None, - signers: list[ - tuple[ - x509.Certificate, - PKCS7PrivateKeyTypes, - PKCS7HashTypes, - padding.PSS | padding.PKCS1v15 | None, - ] - ] = [], - additional_certs: list[x509.Certificate] = [], - ): - self._data = data - self._signers = signers - self._additional_certs = additional_certs - - def set_data(self, data: utils.Buffer) -> PKCS7SignatureBuilder: - _check_byteslike("data", data) - if self._data is not None: - raise ValueError("data may only be set once") - - return PKCS7SignatureBuilder(data, self._signers) - - def add_signer( - self, - certificate: x509.Certificate, - private_key: PKCS7PrivateKeyTypes, - hash_algorithm: PKCS7HashTypes, - *, - rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, - ) -> PKCS7SignatureBuilder: - if not isinstance( - hash_algorithm, - ( - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - ), - ): - raise TypeError( - "hash_algorithm must be one of hashes.SHA224, " - "SHA256, SHA384, or SHA512" - ) - if not isinstance(certificate, x509.Certificate): - raise TypeError("certificate must be a x509.Certificate") - - if not isinstance( - private_key, (rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey) - ): - raise TypeError("Only RSA & EC keys are supported at this time.") - - if rsa_padding is not None: - if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): - raise TypeError("Padding must be PSS or PKCS1v15") - if not isinstance(private_key, rsa.RSAPrivateKey): - raise TypeError("Padding is only supported for RSA keys") - - return PKCS7SignatureBuilder( - self._data, - [ - *self._signers, - (certificate, private_key, hash_algorithm, rsa_padding), - ], - ) - - def add_certificate( - self, certificate: x509.Certificate - ) -> PKCS7SignatureBuilder: - if not isinstance(certificate, x509.Certificate): - raise TypeError("certificate must be a x509.Certificate") - - return PKCS7SignatureBuilder( - self._data, self._signers, [*self._additional_certs, certificate] - ) - - def sign( - self, - encoding: serialization.Encoding, - options: Iterable[PKCS7Options], - backend: typing.Any = None, - ) -> bytes: - if len(self._signers) == 0: - raise ValueError("Must have at least one signer") - if self._data is None: - raise ValueError("You must add data to sign") - options = list(options) - if not all(isinstance(x, PKCS7Options) for x in options): - raise ValueError("options must be from the PKCS7Options enum") - if encoding not in ( - serialization.Encoding.PEM, - serialization.Encoding.DER, - serialization.Encoding.SMIME, - ): - raise ValueError( - "Must be PEM, DER, or SMIME from the Encoding enum" - ) - - # Text is a meaningless option unless it is accompanied by - # DetachedSignature - if ( - PKCS7Options.Text in options - and PKCS7Options.DetachedSignature not in options - ): - raise ValueError( - "When passing the Text option you must also pass " - "DetachedSignature" - ) - - if PKCS7Options.Text in options and encoding in ( - serialization.Encoding.DER, - serialization.Encoding.PEM, - ): - raise ValueError( - "The Text option is only available for SMIME serialization" - ) - - # No attributes implies no capabilities so we'll error if you try to - # pass both. - if ( - PKCS7Options.NoAttributes in options - and PKCS7Options.NoCapabilities in options - ): - raise ValueError( - "NoAttributes is a superset of NoCapabilities. Do not pass " - "both values." - ) - - return rust_pkcs7.sign_and_serialize(self, encoding, options) - - -class PKCS7EnvelopeBuilder: - def __init__( - self, - *, - _data: bytes | None = None, - _recipients: list[x509.Certificate] | None = None, - _content_encryption_algorithm: ContentEncryptionAlgorithm - | None = None, - ): - from cryptography.hazmat.backends.openssl.backend import ( - backend as ossl, - ) - - if not ossl.rsa_encryption_supported(padding=padding.PKCS1v15()): - raise UnsupportedAlgorithm( - "RSA with PKCS1 v1.5 padding is not supported by this version" - " of OpenSSL.", - _Reasons.UNSUPPORTED_PADDING, - ) - self._data = _data - self._recipients = _recipients if _recipients is not None else [] - self._content_encryption_algorithm = _content_encryption_algorithm - - def set_data(self, data: bytes) -> PKCS7EnvelopeBuilder: - _check_byteslike("data", data) - if self._data is not None: - raise ValueError("data may only be set once") - - return PKCS7EnvelopeBuilder( - _data=data, - _recipients=self._recipients, - _content_encryption_algorithm=self._content_encryption_algorithm, - ) - - def add_recipient( - self, - certificate: x509.Certificate, - ) -> PKCS7EnvelopeBuilder: - if not isinstance(certificate, x509.Certificate): - raise TypeError("certificate must be a x509.Certificate") - - if not isinstance(certificate.public_key(), rsa.RSAPublicKey): - raise TypeError("Only RSA keys are supported at this time.") - - return PKCS7EnvelopeBuilder( - _data=self._data, - _recipients=[ - *self._recipients, - certificate, - ], - _content_encryption_algorithm=self._content_encryption_algorithm, - ) - - def set_content_encryption_algorithm( - self, content_encryption_algorithm: ContentEncryptionAlgorithm - ) -> PKCS7EnvelopeBuilder: - if self._content_encryption_algorithm is not None: - raise ValueError("Content encryption algo may only be set once") - if content_encryption_algorithm not in { - algorithms.AES128, - algorithms.AES256, - }: - raise TypeError("Only AES128 and AES256 are supported") - - return PKCS7EnvelopeBuilder( - _data=self._data, - _recipients=self._recipients, - _content_encryption_algorithm=content_encryption_algorithm, - ) - - def encrypt( - self, - encoding: serialization.Encoding, - options: Iterable[PKCS7Options], - ) -> bytes: - if len(self._recipients) == 0: - raise ValueError("Must have at least one recipient") - if self._data is None: - raise ValueError("You must add data to encrypt") - - # The default content encryption algorithm is AES-128, which the S/MIME - # v3.2 RFC specifies as MUST support (https://datatracker.ietf.org/doc/html/rfc5751#section-2.7) - content_encryption_algorithm = ( - self._content_encryption_algorithm or algorithms.AES128 - ) - - options = list(options) - if not all(isinstance(x, PKCS7Options) for x in options): - raise ValueError("options must be from the PKCS7Options enum") - if encoding not in ( - serialization.Encoding.PEM, - serialization.Encoding.DER, - serialization.Encoding.SMIME, - ): - raise ValueError( - "Must be PEM, DER, or SMIME from the Encoding enum" - ) - - # Only allow options that make sense for encryption - if any( - opt not in [PKCS7Options.Text, PKCS7Options.Binary] - for opt in options - ): - raise ValueError( - "Only the following options are supported for encryption: " - "Text, Binary" - ) - elif PKCS7Options.Text in options and PKCS7Options.Binary in options: - # OpenSSL accepts both options at the same time, but ignores Text. - # We fail defensively to avoid unexpected outputs. - raise ValueError( - "Cannot use Binary and Text options at the same time" - ) - - return rust_pkcs7.encrypt_and_serialize( - self, content_encryption_algorithm, encoding, options - ) - - -pkcs7_decrypt_der = rust_pkcs7.decrypt_der -pkcs7_decrypt_pem = rust_pkcs7.decrypt_pem -pkcs7_decrypt_smime = rust_pkcs7.decrypt_smime - - -def _smime_signed_encode( - data: bytes, signature: bytes, micalg: str, text_mode: bool -) -> bytes: - # This function works pretty hard to replicate what OpenSSL does - # precisely. For good and for ill. - - m = email.message.Message() - m.add_header("MIME-Version", "1.0") - m.add_header( - "Content-Type", - "multipart/signed", - protocol="application/x-pkcs7-signature", - micalg=micalg, - ) - - m.preamble = "This is an S/MIME signed message\n" - - msg_part = OpenSSLMimePart() - msg_part.set_payload(data) - if text_mode: - msg_part.add_header("Content-Type", "text/plain") - m.attach(msg_part) - - sig_part = email.message.MIMEPart() - sig_part.add_header( - "Content-Type", "application/x-pkcs7-signature", name="smime.p7s" - ) - sig_part.add_header("Content-Transfer-Encoding", "base64") - sig_part.add_header( - "Content-Disposition", "attachment", filename="smime.p7s" - ) - sig_part.set_payload( - email.base64mime.body_encode(signature, maxlinelen=65) - ) - del sig_part["MIME-Version"] - m.attach(sig_part) - - fp = io.BytesIO() - g = email.generator.BytesGenerator( - fp, - maxheaderlen=0, - mangle_from_=False, - policy=m.policy.clone(linesep="\r\n"), - ) - g.flatten(m) - return fp.getvalue() - - -def _smime_enveloped_encode(data: bytes) -> bytes: - m = email.message.Message() - m.add_header("MIME-Version", "1.0") - m.add_header("Content-Disposition", "attachment", filename="smime.p7m") - m.add_header( - "Content-Type", - "application/pkcs7-mime", - smime_type="enveloped-data", - name="smime.p7m", - ) - m.add_header("Content-Transfer-Encoding", "base64") - - m.set_payload(email.base64mime.body_encode(data, maxlinelen=65)) - - return m.as_bytes(policy=m.policy.clone(linesep="\n", max_line_length=0)) - - -def _smime_enveloped_decode(data: bytes) -> bytes: - m = email.message_from_bytes(data) - if m.get_content_type() not in { - "application/x-pkcs7-mime", - "application/pkcs7-mime", - }: - raise ValueError("Not an S/MIME enveloped message") - return bytes(m.get_payload(decode=True)) - - -def _smime_remove_text_headers(data: bytes) -> bytes: - m = email.message_from_bytes(data) - # Using get() instead of get_content_type() since it has None as default, - # where the latter has "text/plain". Both methods are case-insensitive. - content_type = m.get("content-type") - if content_type is None: - raise ValueError( - "Decrypted MIME data has no 'Content-Type' header. " - "Please remove the 'Text' option to parse it manually." - ) - if "text/plain" not in content_type: - raise ValueError( - f"Decrypted MIME data content type is '{content_type}', not " - "'text/plain'. Remove the 'Text' option to parse it manually." - ) - return bytes(m.get_payload(decode=True)) - - -class OpenSSLMimePart(email.message.MIMEPart): - # A MIMEPart subclass that replicates OpenSSL's behavior of not including - # a newline if there are no headers. - def _write_headers(self, generator) -> None: - if list(self.raw_items()): - generator._write_headers(self) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/ssh.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/ssh.py deleted file mode 100644 index cb10cf8..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/ssh.py +++ /dev/null @@ -1,1619 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import binascii -import enum -import os -import re -import typing -import warnings -from base64 import encodebytes as _base64_encode -from dataclasses import dataclass - -from cryptography import utils -from cryptography.exceptions import UnsupportedAlgorithm -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import ( - dsa, - ec, - ed25519, - padding, - rsa, -) -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils -from cryptography.hazmat.primitives.ciphers import ( - AEADDecryptionContext, - Cipher, - algorithms, - modes, -) -from cryptography.hazmat.primitives.serialization import ( - Encoding, - KeySerializationEncryption, - NoEncryption, - PrivateFormat, - PublicFormat, - _KeySerializationEncryption, -) - -try: - from bcrypt import kdf as _bcrypt_kdf - - _bcrypt_supported = True -except ImportError: - _bcrypt_supported = False - - def _bcrypt_kdf( - password: bytes, - salt: bytes, - desired_key_bytes: int, - rounds: int, - ignore_few_rounds: bool = False, - ) -> bytes: - raise UnsupportedAlgorithm("Need bcrypt module") - - -_SSH_ED25519 = b"ssh-ed25519" -_SSH_RSA = b"ssh-rsa" -_SSH_DSA = b"ssh-dss" -_ECDSA_NISTP256 = b"ecdsa-sha2-nistp256" -_ECDSA_NISTP384 = b"ecdsa-sha2-nistp384" -_ECDSA_NISTP521 = b"ecdsa-sha2-nistp521" -_CERT_SUFFIX = b"-cert-v01@openssh.com" - -# U2F application string suffixed pubkey -_SK_SSH_ED25519 = b"sk-ssh-ed25519@openssh.com" -_SK_SSH_ECDSA_NISTP256 = b"sk-ecdsa-sha2-nistp256@openssh.com" - -# These are not key types, only algorithms, so they cannot appear -# as a public key type -_SSH_RSA_SHA256 = b"rsa-sha2-256" -_SSH_RSA_SHA512 = b"rsa-sha2-512" - -_SSH_PUBKEY_RC = re.compile(rb"\A(\S+)[ \t]+(\S+)") -_SK_MAGIC = b"openssh-key-v1\0" -_SK_START = b"-----BEGIN OPENSSH PRIVATE KEY-----" -_SK_END = b"-----END OPENSSH PRIVATE KEY-----" -_BCRYPT = b"bcrypt" -_NONE = b"none" -_DEFAULT_CIPHER = b"aes256-ctr" -_DEFAULT_ROUNDS = 16 - -# re is only way to work on bytes-like data -_PEM_RC = re.compile(_SK_START + b"(.*?)" + _SK_END, re.DOTALL) - -# padding for max blocksize -_PADDING = memoryview(bytearray(range(1, 1 + 16))) - - -@dataclass -class _SSHCipher: - alg: type[algorithms.AES] - key_len: int - mode: type[modes.CTR] | type[modes.CBC] | type[modes.GCM] - block_len: int - iv_len: int - tag_len: int | None - is_aead: bool - - -# ciphers that are actually used in key wrapping -_SSH_CIPHERS: dict[bytes, _SSHCipher] = { - b"aes256-ctr": _SSHCipher( - alg=algorithms.AES, - key_len=32, - mode=modes.CTR, - block_len=16, - iv_len=16, - tag_len=None, - is_aead=False, - ), - b"aes256-cbc": _SSHCipher( - alg=algorithms.AES, - key_len=32, - mode=modes.CBC, - block_len=16, - iv_len=16, - tag_len=None, - is_aead=False, - ), - b"aes256-gcm@openssh.com": _SSHCipher( - alg=algorithms.AES, - key_len=32, - mode=modes.GCM, - block_len=16, - iv_len=12, - tag_len=16, - is_aead=True, - ), -} - -# map local curve name to key type -_ECDSA_KEY_TYPE = { - "secp256r1": _ECDSA_NISTP256, - "secp384r1": _ECDSA_NISTP384, - "secp521r1": _ECDSA_NISTP521, -} - - -def _get_ssh_key_type(key: SSHPrivateKeyTypes | SSHPublicKeyTypes) -> bytes: - if isinstance(key, ec.EllipticCurvePrivateKey): - key_type = _ecdsa_key_type(key.public_key()) - elif isinstance(key, ec.EllipticCurvePublicKey): - key_type = _ecdsa_key_type(key) - elif isinstance(key, (rsa.RSAPrivateKey, rsa.RSAPublicKey)): - key_type = _SSH_RSA - elif isinstance(key, (dsa.DSAPrivateKey, dsa.DSAPublicKey)): - key_type = _SSH_DSA - elif isinstance( - key, (ed25519.Ed25519PrivateKey, ed25519.Ed25519PublicKey) - ): - key_type = _SSH_ED25519 - else: - raise ValueError("Unsupported key type") - - return key_type - - -def _ecdsa_key_type(public_key: ec.EllipticCurvePublicKey) -> bytes: - """Return SSH key_type and curve_name for private key.""" - curve = public_key.curve - if curve.name not in _ECDSA_KEY_TYPE: - raise ValueError( - f"Unsupported curve for ssh private key: {curve.name!r}" - ) - return _ECDSA_KEY_TYPE[curve.name] - - -def _ssh_pem_encode( - data: utils.Buffer, - prefix: bytes = _SK_START + b"\n", - suffix: bytes = _SK_END + b"\n", -) -> bytes: - return b"".join([prefix, _base64_encode(data), suffix]) - - -def _check_block_size(data: utils.Buffer, block_len: int) -> None: - """Require data to be full blocks""" - if not data or len(data) % block_len != 0: - raise ValueError("Corrupt data: missing padding") - - -def _check_empty(data: utils.Buffer) -> None: - """All data should have been parsed.""" - if data: - raise ValueError("Corrupt data: unparsed data") - - -def _init_cipher( - ciphername: bytes, - password: bytes | None, - salt: bytes, - rounds: int, -) -> Cipher[modes.CBC | modes.CTR | modes.GCM]: - """Generate key + iv and return cipher.""" - if not password: - raise TypeError( - "Key is password-protected, but password was not provided." - ) - - ciph = _SSH_CIPHERS[ciphername] - seed = _bcrypt_kdf( - password, salt, ciph.key_len + ciph.iv_len, rounds, True - ) - return Cipher( - ciph.alg(seed[: ciph.key_len]), - ciph.mode(seed[ciph.key_len :]), - ) - - -def _get_u32(data: memoryview) -> tuple[int, memoryview]: - """Uint32""" - if len(data) < 4: - raise ValueError("Invalid data") - return int.from_bytes(data[:4], byteorder="big"), data[4:] - - -def _get_u64(data: memoryview) -> tuple[int, memoryview]: - """Uint64""" - if len(data) < 8: - raise ValueError("Invalid data") - return int.from_bytes(data[:8], byteorder="big"), data[8:] - - -def _get_sshstr(data: memoryview) -> tuple[memoryview, memoryview]: - """Bytes with u32 length prefix""" - n, data = _get_u32(data) - if n > len(data): - raise ValueError("Invalid data") - return data[:n], data[n:] - - -def _get_mpint(data: memoryview) -> tuple[int, memoryview]: - """Big integer.""" - val, data = _get_sshstr(data) - if val and val[0] > 0x7F: - raise ValueError("Invalid data") - return int.from_bytes(val, "big"), data - - -def _to_mpint(val: int) -> bytes: - """Storage format for signed bigint.""" - if val < 0: - raise ValueError("negative mpint not allowed") - if not val: - return b"" - nbytes = (val.bit_length() + 8) // 8 - return utils.int_to_bytes(val, nbytes) - - -class _FragList: - """Build recursive structure without data copy.""" - - flist: list[utils.Buffer] - - def __init__(self, init: list[utils.Buffer] | None = None) -> None: - self.flist = [] - if init: - self.flist.extend(init) - - def put_raw(self, val: utils.Buffer) -> None: - """Add plain bytes""" - self.flist.append(val) - - def put_u32(self, val: int) -> None: - """Big-endian uint32""" - self.flist.append(val.to_bytes(length=4, byteorder="big")) - - def put_u64(self, val: int) -> None: - """Big-endian uint64""" - self.flist.append(val.to_bytes(length=8, byteorder="big")) - - def put_sshstr(self, val: bytes | _FragList) -> None: - """Bytes prefixed with u32 length""" - if isinstance(val, (bytes, memoryview, bytearray)): - self.put_u32(len(val)) - self.flist.append(val) - else: - self.put_u32(val.size()) - self.flist.extend(val.flist) - - def put_mpint(self, val: int) -> None: - """Big-endian bigint prefixed with u32 length""" - self.put_sshstr(_to_mpint(val)) - - def size(self) -> int: - """Current number of bytes""" - return sum(map(len, self.flist)) - - def render(self, dstbuf: memoryview, pos: int = 0) -> int: - """Write into bytearray""" - for frag in self.flist: - flen = len(frag) - start, pos = pos, pos + flen - dstbuf[start:pos] = frag - return pos - - def tobytes(self) -> bytes: - """Return as bytes""" - buf = memoryview(bytearray(self.size())) - self.render(buf) - return buf.tobytes() - - -class _SSHFormatRSA: - """Format for RSA keys. - - Public: - mpint e, n - Private: - mpint n, e, d, iqmp, p, q - """ - - def get_public( - self, data: memoryview - ) -> tuple[tuple[int, int], memoryview]: - """RSA public fields""" - e, data = _get_mpint(data) - n, data = _get_mpint(data) - return (e, n), data - - def load_public( - self, data: memoryview - ) -> tuple[rsa.RSAPublicKey, memoryview]: - """Make RSA public key from data.""" - (e, n), data = self.get_public(data) - public_numbers = rsa.RSAPublicNumbers(e, n) - public_key = public_numbers.public_key() - return public_key, data - - def load_private( - self, data: memoryview, pubfields, unsafe_skip_rsa_key_validation: bool - ) -> tuple[rsa.RSAPrivateKey, memoryview]: - """Make RSA private key from data.""" - n, data = _get_mpint(data) - e, data = _get_mpint(data) - d, data = _get_mpint(data) - iqmp, data = _get_mpint(data) - p, data = _get_mpint(data) - q, data = _get_mpint(data) - - if (e, n) != pubfields: - raise ValueError("Corrupt data: rsa field mismatch") - dmp1 = rsa.rsa_crt_dmp1(d, p) - dmq1 = rsa.rsa_crt_dmq1(d, q) - public_numbers = rsa.RSAPublicNumbers(e, n) - private_numbers = rsa.RSAPrivateNumbers( - p, q, d, dmp1, dmq1, iqmp, public_numbers - ) - private_key = private_numbers.private_key( - unsafe_skip_rsa_key_validation=unsafe_skip_rsa_key_validation - ) - return private_key, data - - def encode_public( - self, public_key: rsa.RSAPublicKey, f_pub: _FragList - ) -> None: - """Write RSA public key""" - pubn = public_key.public_numbers() - f_pub.put_mpint(pubn.e) - f_pub.put_mpint(pubn.n) - - def encode_private( - self, private_key: rsa.RSAPrivateKey, f_priv: _FragList - ) -> None: - """Write RSA private key""" - private_numbers = private_key.private_numbers() - public_numbers = private_numbers.public_numbers - - f_priv.put_mpint(public_numbers.n) - f_priv.put_mpint(public_numbers.e) - - f_priv.put_mpint(private_numbers.d) - f_priv.put_mpint(private_numbers.iqmp) - f_priv.put_mpint(private_numbers.p) - f_priv.put_mpint(private_numbers.q) - - -class _SSHFormatDSA: - """Format for DSA keys. - - Public: - mpint p, q, g, y - Private: - mpint p, q, g, y, x - """ - - def get_public(self, data: memoryview) -> tuple[tuple, memoryview]: - """DSA public fields""" - p, data = _get_mpint(data) - q, data = _get_mpint(data) - g, data = _get_mpint(data) - y, data = _get_mpint(data) - return (p, q, g, y), data - - def load_public( - self, data: memoryview - ) -> tuple[dsa.DSAPublicKey, memoryview]: - """Make DSA public key from data.""" - (p, q, g, y), data = self.get_public(data) - parameter_numbers = dsa.DSAParameterNumbers(p, q, g) - public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) - self._validate(public_numbers) - public_key = public_numbers.public_key() - return public_key, data - - def load_private( - self, data: memoryview, pubfields, unsafe_skip_rsa_key_validation: bool - ) -> tuple[dsa.DSAPrivateKey, memoryview]: - """Make DSA private key from data.""" - (p, q, g, y), data = self.get_public(data) - x, data = _get_mpint(data) - - if (p, q, g, y) != pubfields: - raise ValueError("Corrupt data: dsa field mismatch") - parameter_numbers = dsa.DSAParameterNumbers(p, q, g) - public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) - self._validate(public_numbers) - private_numbers = dsa.DSAPrivateNumbers(x, public_numbers) - private_key = private_numbers.private_key() - return private_key, data - - def encode_public( - self, public_key: dsa.DSAPublicKey, f_pub: _FragList - ) -> None: - """Write DSA public key""" - public_numbers = public_key.public_numbers() - parameter_numbers = public_numbers.parameter_numbers - self._validate(public_numbers) - - f_pub.put_mpint(parameter_numbers.p) - f_pub.put_mpint(parameter_numbers.q) - f_pub.put_mpint(parameter_numbers.g) - f_pub.put_mpint(public_numbers.y) - - def encode_private( - self, private_key: dsa.DSAPrivateKey, f_priv: _FragList - ) -> None: - """Write DSA private key""" - self.encode_public(private_key.public_key(), f_priv) - f_priv.put_mpint(private_key.private_numbers().x) - - def _validate(self, public_numbers: dsa.DSAPublicNumbers) -> None: - parameter_numbers = public_numbers.parameter_numbers - if parameter_numbers.p.bit_length() != 1024: - raise ValueError("SSH supports only 1024 bit DSA keys") - - -class _SSHFormatECDSA: - """Format for ECDSA keys. - - Public: - str curve - bytes point - Private: - str curve - bytes point - mpint secret - """ - - def __init__(self, ssh_curve_name: bytes, curve: ec.EllipticCurve): - self.ssh_curve_name = ssh_curve_name - self.curve = curve - - def get_public( - self, data: memoryview - ) -> tuple[tuple[memoryview, memoryview], memoryview]: - """ECDSA public fields""" - curve, data = _get_sshstr(data) - point, data = _get_sshstr(data) - if curve != self.ssh_curve_name: - raise ValueError("Curve name mismatch") - if point[0] != 4: - raise NotImplementedError("Need uncompressed point") - return (curve, point), data - - def load_public( - self, data: memoryview - ) -> tuple[ec.EllipticCurvePublicKey, memoryview]: - """Make ECDSA public key from data.""" - (_, point), data = self.get_public(data) - public_key = ec.EllipticCurvePublicKey.from_encoded_point( - self.curve, point.tobytes() - ) - return public_key, data - - def load_private( - self, data: memoryview, pubfields, unsafe_skip_rsa_key_validation: bool - ) -> tuple[ec.EllipticCurvePrivateKey, memoryview]: - """Make ECDSA private key from data.""" - (curve_name, point), data = self.get_public(data) - secret, data = _get_mpint(data) - - if (curve_name, point) != pubfields: - raise ValueError("Corrupt data: ecdsa field mismatch") - private_key = ec.derive_private_key(secret, self.curve) - return private_key, data - - def encode_public( - self, public_key: ec.EllipticCurvePublicKey, f_pub: _FragList - ) -> None: - """Write ECDSA public key""" - point = public_key.public_bytes( - Encoding.X962, PublicFormat.UncompressedPoint - ) - f_pub.put_sshstr(self.ssh_curve_name) - f_pub.put_sshstr(point) - - def encode_private( - self, private_key: ec.EllipticCurvePrivateKey, f_priv: _FragList - ) -> None: - """Write ECDSA private key""" - public_key = private_key.public_key() - private_numbers = private_key.private_numbers() - - self.encode_public(public_key, f_priv) - f_priv.put_mpint(private_numbers.private_value) - - -class _SSHFormatEd25519: - """Format for Ed25519 keys. - - Public: - bytes point - Private: - bytes point - bytes secret_and_point - """ - - def get_public( - self, data: memoryview - ) -> tuple[tuple[memoryview], memoryview]: - """Ed25519 public fields""" - point, data = _get_sshstr(data) - return (point,), data - - def load_public( - self, data: memoryview - ) -> tuple[ed25519.Ed25519PublicKey, memoryview]: - """Make Ed25519 public key from data.""" - (point,), data = self.get_public(data) - public_key = ed25519.Ed25519PublicKey.from_public_bytes( - point.tobytes() - ) - return public_key, data - - def load_private( - self, data: memoryview, pubfields, unsafe_skip_rsa_key_validation: bool - ) -> tuple[ed25519.Ed25519PrivateKey, memoryview]: - """Make Ed25519 private key from data.""" - (point,), data = self.get_public(data) - keypair, data = _get_sshstr(data) - - secret = keypair[:32] - point2 = keypair[32:] - if point != point2 or (point,) != pubfields: - raise ValueError("Corrupt data: ed25519 field mismatch") - private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) - return private_key, data - - def encode_public( - self, public_key: ed25519.Ed25519PublicKey, f_pub: _FragList - ) -> None: - """Write Ed25519 public key""" - raw_public_key = public_key.public_bytes( - Encoding.Raw, PublicFormat.Raw - ) - f_pub.put_sshstr(raw_public_key) - - def encode_private( - self, private_key: ed25519.Ed25519PrivateKey, f_priv: _FragList - ) -> None: - """Write Ed25519 private key""" - public_key = private_key.public_key() - raw_private_key = private_key.private_bytes( - Encoding.Raw, PrivateFormat.Raw, NoEncryption() - ) - raw_public_key = public_key.public_bytes( - Encoding.Raw, PublicFormat.Raw - ) - f_keypair = _FragList([raw_private_key, raw_public_key]) - - self.encode_public(public_key, f_priv) - f_priv.put_sshstr(f_keypair) - - -def load_application(data) -> tuple[memoryview, memoryview]: - """ - U2F application strings - """ - application, data = _get_sshstr(data) - if not application.tobytes().startswith(b"ssh:"): - raise ValueError( - "U2F application string does not start with b'ssh:' " - f"({application})" - ) - return application, data - - -class _SSHFormatSKEd25519: - """ - The format of a sk-ssh-ed25519@openssh.com public key is: - - string "sk-ssh-ed25519@openssh.com" - string public key - string application (user-specified, but typically "ssh:") - """ - - def load_public( - self, data: memoryview - ) -> tuple[ed25519.Ed25519PublicKey, memoryview]: - """Make Ed25519 public key from data.""" - public_key, data = _lookup_kformat(_SSH_ED25519).load_public(data) - _, data = load_application(data) - return public_key, data - - def get_public(self, data: memoryview) -> typing.NoReturn: - # Confusingly `get_public` is an entry point used by private key - # loading. - raise UnsupportedAlgorithm( - "sk-ssh-ed25519 private keys cannot be loaded" - ) - - -class _SSHFormatSKECDSA: - """ - The format of a sk-ecdsa-sha2-nistp256@openssh.com public key is: - - string "sk-ecdsa-sha2-nistp256@openssh.com" - string curve name - ec_point Q - string application (user-specified, but typically "ssh:") - """ - - def load_public( - self, data: memoryview - ) -> tuple[ec.EllipticCurvePublicKey, memoryview]: - """Make ECDSA public key from data.""" - public_key, data = _lookup_kformat(_ECDSA_NISTP256).load_public(data) - _, data = load_application(data) - return public_key, data - - def get_public(self, data: memoryview) -> typing.NoReturn: - # Confusingly `get_public` is an entry point used by private key - # loading. - raise UnsupportedAlgorithm( - "sk-ecdsa-sha2-nistp256 private keys cannot be loaded" - ) - - -_KEY_FORMATS = { - _SSH_RSA: _SSHFormatRSA(), - _SSH_DSA: _SSHFormatDSA(), - _SSH_ED25519: _SSHFormatEd25519(), - _ECDSA_NISTP256: _SSHFormatECDSA(b"nistp256", ec.SECP256R1()), - _ECDSA_NISTP384: _SSHFormatECDSA(b"nistp384", ec.SECP384R1()), - _ECDSA_NISTP521: _SSHFormatECDSA(b"nistp521", ec.SECP521R1()), - _SK_SSH_ED25519: _SSHFormatSKEd25519(), - _SK_SSH_ECDSA_NISTP256: _SSHFormatSKECDSA(), -} - - -def _lookup_kformat(key_type: utils.Buffer): - """Return valid format or throw error""" - if not isinstance(key_type, bytes): - key_type = memoryview(key_type).tobytes() - if key_type in _KEY_FORMATS: - return _KEY_FORMATS[key_type] - raise UnsupportedAlgorithm(f"Unsupported key type: {key_type!r}") - - -SSHPrivateKeyTypes = typing.Union[ - ec.EllipticCurvePrivateKey, - rsa.RSAPrivateKey, - dsa.DSAPrivateKey, - ed25519.Ed25519PrivateKey, -] - - -def load_ssh_private_key( - data: utils.Buffer, - password: bytes | None, - backend: typing.Any = None, - *, - unsafe_skip_rsa_key_validation: bool = False, -) -> SSHPrivateKeyTypes: - """Load private key from OpenSSH custom encoding.""" - utils._check_byteslike("data", data) - if password is not None: - utils._check_bytes("password", password) - - m = _PEM_RC.search(data) - if not m: - raise ValueError("Not OpenSSH private key format") - p1 = m.start(1) - p2 = m.end(1) - data = binascii.a2b_base64(memoryview(data)[p1:p2]) - if not data.startswith(_SK_MAGIC): - raise ValueError("Not OpenSSH private key format") - data = memoryview(data)[len(_SK_MAGIC) :] - - # parse header - ciphername, data = _get_sshstr(data) - kdfname, data = _get_sshstr(data) - kdfoptions, data = _get_sshstr(data) - nkeys, data = _get_u32(data) - if nkeys != 1: - raise ValueError("Only one key supported") - - # load public key data - pubdata, data = _get_sshstr(data) - pub_key_type, pubdata = _get_sshstr(pubdata) - kformat = _lookup_kformat(pub_key_type) - pubfields, pubdata = kformat.get_public(pubdata) - _check_empty(pubdata) - - if ciphername != _NONE or kdfname != _NONE: - ciphername_bytes = ciphername.tobytes() - if ciphername_bytes not in _SSH_CIPHERS: - raise UnsupportedAlgorithm( - f"Unsupported cipher: {ciphername_bytes!r}" - ) - if kdfname != _BCRYPT: - raise UnsupportedAlgorithm(f"Unsupported KDF: {kdfname!r}") - blklen = _SSH_CIPHERS[ciphername_bytes].block_len - tag_len = _SSH_CIPHERS[ciphername_bytes].tag_len - # load secret data - edata, data = _get_sshstr(data) - # see https://bugzilla.mindrot.org/show_bug.cgi?id=3553 for - # information about how OpenSSH handles AEAD tags - if _SSH_CIPHERS[ciphername_bytes].is_aead: - tag = bytes(data) - if len(tag) != tag_len: - raise ValueError("Corrupt data: invalid tag length for cipher") - else: - _check_empty(data) - _check_block_size(edata, blklen) - salt, kbuf = _get_sshstr(kdfoptions) - rounds, kbuf = _get_u32(kbuf) - _check_empty(kbuf) - ciph = _init_cipher(ciphername_bytes, password, salt.tobytes(), rounds) - dec = ciph.decryptor() - edata = memoryview(dec.update(edata)) - if _SSH_CIPHERS[ciphername_bytes].is_aead: - assert isinstance(dec, AEADDecryptionContext) - _check_empty(dec.finalize_with_tag(tag)) - else: - # _check_block_size requires data to be a full block so there - # should be no output from finalize - _check_empty(dec.finalize()) - else: - if password: - raise TypeError( - "Password was given but private key is not encrypted." - ) - # load secret data - edata, data = _get_sshstr(data) - _check_empty(data) - blklen = 8 - _check_block_size(edata, blklen) - ck1, edata = _get_u32(edata) - ck2, edata = _get_u32(edata) - if ck1 != ck2: - raise ValueError("Corrupt data: broken checksum") - - # load per-key struct - key_type, edata = _get_sshstr(edata) - if key_type != pub_key_type: - raise ValueError("Corrupt data: key type mismatch") - private_key, edata = kformat.load_private( - edata, - pubfields, - unsafe_skip_rsa_key_validation=unsafe_skip_rsa_key_validation, - ) - # We don't use the comment - _, edata = _get_sshstr(edata) - - # yes, SSH does padding check *after* all other parsing is done. - # need to follow as it writes zero-byte padding too. - if edata != _PADDING[: len(edata)]: - raise ValueError("Corrupt data: invalid padding") - - if isinstance(private_key, dsa.DSAPrivateKey): - warnings.warn( - "SSH DSA keys are deprecated and will be removed in a future " - "release.", - utils.DeprecatedIn40, - stacklevel=2, - ) - - return private_key - - -def _serialize_ssh_private_key( - private_key: SSHPrivateKeyTypes, - password: bytes, - encryption_algorithm: KeySerializationEncryption, -) -> bytes: - """Serialize private key with OpenSSH custom encoding.""" - utils._check_bytes("password", password) - if isinstance(private_key, dsa.DSAPrivateKey): - warnings.warn( - "SSH DSA key support is deprecated and will be " - "removed in a future release", - utils.DeprecatedIn40, - stacklevel=4, - ) - - key_type = _get_ssh_key_type(private_key) - kformat = _lookup_kformat(key_type) - - # setup parameters - f_kdfoptions = _FragList() - if password: - ciphername = _DEFAULT_CIPHER - blklen = _SSH_CIPHERS[ciphername].block_len - kdfname = _BCRYPT - rounds = _DEFAULT_ROUNDS - if ( - isinstance(encryption_algorithm, _KeySerializationEncryption) - and encryption_algorithm._kdf_rounds is not None - ): - rounds = encryption_algorithm._kdf_rounds - salt = os.urandom(16) - f_kdfoptions.put_sshstr(salt) - f_kdfoptions.put_u32(rounds) - ciph = _init_cipher(ciphername, password, salt, rounds) - else: - ciphername = kdfname = _NONE - blklen = 8 - ciph = None - nkeys = 1 - checkval = os.urandom(4) - comment = b"" - - # encode public and private parts together - f_public_key = _FragList() - f_public_key.put_sshstr(key_type) - kformat.encode_public(private_key.public_key(), f_public_key) - - f_secrets = _FragList([checkval, checkval]) - f_secrets.put_sshstr(key_type) - kformat.encode_private(private_key, f_secrets) - f_secrets.put_sshstr(comment) - f_secrets.put_raw(_PADDING[: blklen - (f_secrets.size() % blklen)]) - - # top-level structure - f_main = _FragList() - f_main.put_raw(_SK_MAGIC) - f_main.put_sshstr(ciphername) - f_main.put_sshstr(kdfname) - f_main.put_sshstr(f_kdfoptions) - f_main.put_u32(nkeys) - f_main.put_sshstr(f_public_key) - f_main.put_sshstr(f_secrets) - - # copy result info bytearray - slen = f_secrets.size() - mlen = f_main.size() - buf = memoryview(bytearray(mlen + blklen)) - f_main.render(buf) - ofs = mlen - slen - - # encrypt in-place - if ciph is not None: - ciph.encryptor().update_into(buf[ofs:mlen], buf[ofs:]) - - return _ssh_pem_encode(buf[:mlen]) - - -SSHPublicKeyTypes = typing.Union[ - ec.EllipticCurvePublicKey, - rsa.RSAPublicKey, - dsa.DSAPublicKey, - ed25519.Ed25519PublicKey, -] - -SSHCertPublicKeyTypes = typing.Union[ - ec.EllipticCurvePublicKey, - rsa.RSAPublicKey, - ed25519.Ed25519PublicKey, -] - - -class SSHCertificateType(enum.Enum): - USER = 1 - HOST = 2 - - -class SSHCertificate: - def __init__( - self, - _nonce: memoryview, - _public_key: SSHPublicKeyTypes, - _serial: int, - _cctype: int, - _key_id: memoryview, - _valid_principals: list[bytes], - _valid_after: int, - _valid_before: int, - _critical_options: dict[bytes, bytes], - _extensions: dict[bytes, bytes], - _sig_type: memoryview, - _sig_key: memoryview, - _inner_sig_type: memoryview, - _signature: memoryview, - _tbs_cert_body: memoryview, - _cert_key_type: bytes, - _cert_body: memoryview, - ): - self._nonce = _nonce - self._public_key = _public_key - self._serial = _serial - try: - self._type = SSHCertificateType(_cctype) - except ValueError: - raise ValueError("Invalid certificate type") - self._key_id = _key_id - self._valid_principals = _valid_principals - self._valid_after = _valid_after - self._valid_before = _valid_before - self._critical_options = _critical_options - self._extensions = _extensions - self._sig_type = _sig_type - self._sig_key = _sig_key - self._inner_sig_type = _inner_sig_type - self._signature = _signature - self._cert_key_type = _cert_key_type - self._cert_body = _cert_body - self._tbs_cert_body = _tbs_cert_body - - @property - def nonce(self) -> bytes: - return bytes(self._nonce) - - def public_key(self) -> SSHCertPublicKeyTypes: - # make mypy happy until we remove DSA support entirely and - # the underlying union won't have a disallowed type - return typing.cast(SSHCertPublicKeyTypes, self._public_key) - - @property - def serial(self) -> int: - return self._serial - - @property - def type(self) -> SSHCertificateType: - return self._type - - @property - def key_id(self) -> bytes: - return bytes(self._key_id) - - @property - def valid_principals(self) -> list[bytes]: - return self._valid_principals - - @property - def valid_before(self) -> int: - return self._valid_before - - @property - def valid_after(self) -> int: - return self._valid_after - - @property - def critical_options(self) -> dict[bytes, bytes]: - return self._critical_options - - @property - def extensions(self) -> dict[bytes, bytes]: - return self._extensions - - def signature_key(self) -> SSHCertPublicKeyTypes: - sigformat = _lookup_kformat(self._sig_type) - signature_key, sigkey_rest = sigformat.load_public(self._sig_key) - _check_empty(sigkey_rest) - return signature_key - - def public_bytes(self) -> bytes: - return ( - bytes(self._cert_key_type) - + b" " - + binascii.b2a_base64(bytes(self._cert_body), newline=False) - ) - - def verify_cert_signature(self) -> None: - signature_key = self.signature_key() - if isinstance(signature_key, ed25519.Ed25519PublicKey): - signature_key.verify( - bytes(self._signature), bytes(self._tbs_cert_body) - ) - elif isinstance(signature_key, ec.EllipticCurvePublicKey): - # The signature is encoded as a pair of big-endian integers - r, data = _get_mpint(self._signature) - s, data = _get_mpint(data) - _check_empty(data) - computed_sig = asym_utils.encode_dss_signature(r, s) - hash_alg = _get_ec_hash_alg(signature_key.curve) - signature_key.verify( - computed_sig, bytes(self._tbs_cert_body), ec.ECDSA(hash_alg) - ) - else: - assert isinstance(signature_key, rsa.RSAPublicKey) - if self._inner_sig_type == _SSH_RSA: - hash_alg = hashes.SHA1() - elif self._inner_sig_type == _SSH_RSA_SHA256: - hash_alg = hashes.SHA256() - else: - assert self._inner_sig_type == _SSH_RSA_SHA512 - hash_alg = hashes.SHA512() - signature_key.verify( - bytes(self._signature), - bytes(self._tbs_cert_body), - padding.PKCS1v15(), - hash_alg, - ) - - -def _get_ec_hash_alg(curve: ec.EllipticCurve) -> hashes.HashAlgorithm: - if isinstance(curve, ec.SECP256R1): - return hashes.SHA256() - elif isinstance(curve, ec.SECP384R1): - return hashes.SHA384() - else: - assert isinstance(curve, ec.SECP521R1) - return hashes.SHA512() - - -def _load_ssh_public_identity( - data: utils.Buffer, - _legacy_dsa_allowed=False, -) -> SSHCertificate | SSHPublicKeyTypes: - utils._check_byteslike("data", data) - - m = _SSH_PUBKEY_RC.match(data) - if not m: - raise ValueError("Invalid line format") - key_type = orig_key_type = m.group(1) - key_body = m.group(2) - with_cert = False - if key_type.endswith(_CERT_SUFFIX): - with_cert = True - key_type = key_type[: -len(_CERT_SUFFIX)] - if key_type == _SSH_DSA and not _legacy_dsa_allowed: - raise UnsupportedAlgorithm( - "DSA keys aren't supported in SSH certificates" - ) - kformat = _lookup_kformat(key_type) - - try: - rest = memoryview(binascii.a2b_base64(key_body)) - except (TypeError, binascii.Error): - raise ValueError("Invalid format") - - if with_cert: - cert_body = rest - inner_key_type, rest = _get_sshstr(rest) - if inner_key_type != orig_key_type: - raise ValueError("Invalid key format") - if with_cert: - nonce, rest = _get_sshstr(rest) - public_key, rest = kformat.load_public(rest) - if with_cert: - serial, rest = _get_u64(rest) - cctype, rest = _get_u32(rest) - key_id, rest = _get_sshstr(rest) - principals, rest = _get_sshstr(rest) - valid_principals = [] - while principals: - principal, principals = _get_sshstr(principals) - valid_principals.append(bytes(principal)) - valid_after, rest = _get_u64(rest) - valid_before, rest = _get_u64(rest) - crit_options, rest = _get_sshstr(rest) - critical_options = _parse_exts_opts(crit_options) - exts, rest = _get_sshstr(rest) - extensions = _parse_exts_opts(exts) - # Get the reserved field, which is unused. - _, rest = _get_sshstr(rest) - sig_key_raw, rest = _get_sshstr(rest) - sig_type, sig_key = _get_sshstr(sig_key_raw) - if sig_type == _SSH_DSA and not _legacy_dsa_allowed: - raise UnsupportedAlgorithm( - "DSA signatures aren't supported in SSH certificates" - ) - # Get the entire cert body and subtract the signature - tbs_cert_body = cert_body[: -len(rest)] - signature_raw, rest = _get_sshstr(rest) - _check_empty(rest) - inner_sig_type, sig_rest = _get_sshstr(signature_raw) - # RSA certs can have multiple algorithm types - if ( - sig_type == _SSH_RSA - and inner_sig_type - not in [_SSH_RSA_SHA256, _SSH_RSA_SHA512, _SSH_RSA] - ) or (sig_type != _SSH_RSA and inner_sig_type != sig_type): - raise ValueError("Signature key type does not match") - signature, sig_rest = _get_sshstr(sig_rest) - _check_empty(sig_rest) - return SSHCertificate( - nonce, - public_key, - serial, - cctype, - key_id, - valid_principals, - valid_after, - valid_before, - critical_options, - extensions, - sig_type, - sig_key, - inner_sig_type, - signature, - tbs_cert_body, - orig_key_type, - cert_body, - ) - else: - _check_empty(rest) - return public_key - - -def load_ssh_public_identity( - data: utils.Buffer, -) -> SSHCertificate | SSHPublicKeyTypes: - return _load_ssh_public_identity(data) - - -def _parse_exts_opts(exts_opts: memoryview) -> dict[bytes, bytes]: - result: dict[bytes, bytes] = {} - last_name = None - while exts_opts: - name, exts_opts = _get_sshstr(exts_opts) - bname: bytes = bytes(name) - if bname in result: - raise ValueError("Duplicate name") - if last_name is not None and bname < last_name: - raise ValueError("Fields not lexically sorted") - value, exts_opts = _get_sshstr(exts_opts) - if len(value) > 0: - value, extra = _get_sshstr(value) - if len(extra) > 0: - raise ValueError("Unexpected extra data after value") - result[bname] = bytes(value) - last_name = bname - return result - - -def ssh_key_fingerprint( - key: SSHPublicKeyTypes, - hash_algorithm: hashes.MD5 | hashes.SHA256, -) -> bytes: - if not isinstance(hash_algorithm, (hashes.MD5, hashes.SHA256)): - raise TypeError("hash_algorithm must be either MD5 or SHA256") - - key_type = _get_ssh_key_type(key) - kformat = _lookup_kformat(key_type) - - f_pub = _FragList() - f_pub.put_sshstr(key_type) - kformat.encode_public(key, f_pub) - - ssh_binary_data = f_pub.tobytes() - - # Hash the binary data - hash_obj = hashes.Hash(hash_algorithm) - hash_obj.update(ssh_binary_data) - return hash_obj.finalize() - - -def load_ssh_public_key( - data: utils.Buffer, backend: typing.Any = None -) -> SSHPublicKeyTypes: - cert_or_key = _load_ssh_public_identity(data, _legacy_dsa_allowed=True) - public_key: SSHPublicKeyTypes - if isinstance(cert_or_key, SSHCertificate): - public_key = cert_or_key.public_key() - else: - public_key = cert_or_key - - if isinstance(public_key, dsa.DSAPublicKey): - warnings.warn( - "SSH DSA keys are deprecated and will be removed in a future " - "release.", - utils.DeprecatedIn40, - stacklevel=2, - ) - return public_key - - -def serialize_ssh_public_key(public_key: SSHPublicKeyTypes) -> bytes: - """One-line public key format for OpenSSH""" - if isinstance(public_key, dsa.DSAPublicKey): - warnings.warn( - "SSH DSA key support is deprecated and will be " - "removed in a future release", - utils.DeprecatedIn40, - stacklevel=4, - ) - key_type = _get_ssh_key_type(public_key) - kformat = _lookup_kformat(key_type) - - f_pub = _FragList() - f_pub.put_sshstr(key_type) - kformat.encode_public(public_key, f_pub) - - pub = binascii.b2a_base64(f_pub.tobytes()).strip() - return b"".join([key_type, b" ", pub]) - - -SSHCertPrivateKeyTypes = typing.Union[ - ec.EllipticCurvePrivateKey, - rsa.RSAPrivateKey, - ed25519.Ed25519PrivateKey, -] - - -# This is an undocumented limit enforced in the openssh codebase for sshd and -# ssh-keygen, but it is undefined in the ssh certificates spec. -_SSHKEY_CERT_MAX_PRINCIPALS = 256 - - -class SSHCertificateBuilder: - def __init__( - self, - _public_key: SSHCertPublicKeyTypes | None = None, - _serial: int | None = None, - _type: SSHCertificateType | None = None, - _key_id: bytes | None = None, - _valid_principals: list[bytes] = [], - _valid_for_all_principals: bool = False, - _valid_before: int | None = None, - _valid_after: int | None = None, - _critical_options: list[tuple[bytes, bytes]] = [], - _extensions: list[tuple[bytes, bytes]] = [], - ): - self._public_key = _public_key - self._serial = _serial - self._type = _type - self._key_id = _key_id - self._valid_principals = _valid_principals - self._valid_for_all_principals = _valid_for_all_principals - self._valid_before = _valid_before - self._valid_after = _valid_after - self._critical_options = _critical_options - self._extensions = _extensions - - def public_key( - self, public_key: SSHCertPublicKeyTypes - ) -> SSHCertificateBuilder: - if not isinstance( - public_key, - ( - ec.EllipticCurvePublicKey, - rsa.RSAPublicKey, - ed25519.Ed25519PublicKey, - ), - ): - raise TypeError("Unsupported key type") - if self._public_key is not None: - raise ValueError("public_key already set") - - return SSHCertificateBuilder( - _public_key=public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def serial(self, serial: int) -> SSHCertificateBuilder: - if not isinstance(serial, int): - raise TypeError("serial must be an integer") - if not 0 <= serial < 2**64: - raise ValueError("serial must be between 0 and 2**64") - if self._serial is not None: - raise ValueError("serial already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def type(self, type: SSHCertificateType) -> SSHCertificateBuilder: - if not isinstance(type, SSHCertificateType): - raise TypeError("type must be an SSHCertificateType") - if self._type is not None: - raise ValueError("type already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def key_id(self, key_id: bytes) -> SSHCertificateBuilder: - if not isinstance(key_id, bytes): - raise TypeError("key_id must be bytes") - if self._key_id is not None: - raise ValueError("key_id already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def valid_principals( - self, valid_principals: list[bytes] - ) -> SSHCertificateBuilder: - if self._valid_for_all_principals: - raise ValueError( - "Principals can't be set because the cert is valid " - "for all principals" - ) - if ( - not all(isinstance(x, bytes) for x in valid_principals) - or not valid_principals - ): - raise TypeError( - "principals must be a list of bytes and can't be empty" - ) - if self._valid_principals: - raise ValueError("valid_principals already set") - - if len(valid_principals) > _SSHKEY_CERT_MAX_PRINCIPALS: - raise ValueError( - "Reached or exceeded the maximum number of valid_principals" - ) - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def valid_for_all_principals(self): - if self._valid_principals: - raise ValueError( - "valid_principals already set, can't set " - "valid_for_all_principals" - ) - if self._valid_for_all_principals: - raise ValueError("valid_for_all_principals already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=True, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def valid_before(self, valid_before: int | float) -> SSHCertificateBuilder: - if not isinstance(valid_before, (int, float)): - raise TypeError("valid_before must be an int or float") - valid_before = int(valid_before) - if valid_before < 0 or valid_before >= 2**64: - raise ValueError("valid_before must [0, 2**64)") - if self._valid_before is not None: - raise ValueError("valid_before already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def valid_after(self, valid_after: int | float) -> SSHCertificateBuilder: - if not isinstance(valid_after, (int, float)): - raise TypeError("valid_after must be an int or float") - valid_after = int(valid_after) - if valid_after < 0 or valid_after >= 2**64: - raise ValueError("valid_after must [0, 2**64)") - if self._valid_after is not None: - raise ValueError("valid_after already set") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=valid_after, - _critical_options=self._critical_options, - _extensions=self._extensions, - ) - - def add_critical_option( - self, name: bytes, value: bytes - ) -> SSHCertificateBuilder: - if not isinstance(name, bytes) or not isinstance(value, bytes): - raise TypeError("name and value must be bytes") - # This is O(n**2) - if name in [name for name, _ in self._critical_options]: - raise ValueError("Duplicate critical option name") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=[*self._critical_options, (name, value)], - _extensions=self._extensions, - ) - - def add_extension( - self, name: bytes, value: bytes - ) -> SSHCertificateBuilder: - if not isinstance(name, bytes) or not isinstance(value, bytes): - raise TypeError("name and value must be bytes") - # This is O(n**2) - if name in [name for name, _ in self._extensions]: - raise ValueError("Duplicate extension name") - - return SSHCertificateBuilder( - _public_key=self._public_key, - _serial=self._serial, - _type=self._type, - _key_id=self._key_id, - _valid_principals=self._valid_principals, - _valid_for_all_principals=self._valid_for_all_principals, - _valid_before=self._valid_before, - _valid_after=self._valid_after, - _critical_options=self._critical_options, - _extensions=[*self._extensions, (name, value)], - ) - - def sign(self, private_key: SSHCertPrivateKeyTypes) -> SSHCertificate: - if not isinstance( - private_key, - ( - ec.EllipticCurvePrivateKey, - rsa.RSAPrivateKey, - ed25519.Ed25519PrivateKey, - ), - ): - raise TypeError("Unsupported private key type") - - if self._public_key is None: - raise ValueError("public_key must be set") - - # Not required - serial = 0 if self._serial is None else self._serial - - if self._type is None: - raise ValueError("type must be set") - - # Not required - key_id = b"" if self._key_id is None else self._key_id - - # A zero length list is valid, but means the certificate - # is valid for any principal of the specified type. We require - # the user to explicitly set valid_for_all_principals to get - # that behavior. - if not self._valid_principals and not self._valid_for_all_principals: - raise ValueError( - "valid_principals must be set if valid_for_all_principals " - "is False" - ) - - if self._valid_before is None: - raise ValueError("valid_before must be set") - - if self._valid_after is None: - raise ValueError("valid_after must be set") - - if self._valid_after > self._valid_before: - raise ValueError("valid_after must be earlier than valid_before") - - # lexically sort our byte strings - self._critical_options.sort(key=lambda x: x[0]) - self._extensions.sort(key=lambda x: x[0]) - - key_type = _get_ssh_key_type(self._public_key) - cert_prefix = key_type + _CERT_SUFFIX - - # Marshal the bytes to be signed - nonce = os.urandom(32) - kformat = _lookup_kformat(key_type) - f = _FragList() - f.put_sshstr(cert_prefix) - f.put_sshstr(nonce) - kformat.encode_public(self._public_key, f) - f.put_u64(serial) - f.put_u32(self._type.value) - f.put_sshstr(key_id) - fprincipals = _FragList() - for p in self._valid_principals: - fprincipals.put_sshstr(p) - f.put_sshstr(fprincipals.tobytes()) - f.put_u64(self._valid_after) - f.put_u64(self._valid_before) - fcrit = _FragList() - for name, value in self._critical_options: - fcrit.put_sshstr(name) - if len(value) > 0: - foptval = _FragList() - foptval.put_sshstr(value) - fcrit.put_sshstr(foptval.tobytes()) - else: - fcrit.put_sshstr(value) - f.put_sshstr(fcrit.tobytes()) - fext = _FragList() - for name, value in self._extensions: - fext.put_sshstr(name) - if len(value) > 0: - fextval = _FragList() - fextval.put_sshstr(value) - fext.put_sshstr(fextval.tobytes()) - else: - fext.put_sshstr(value) - f.put_sshstr(fext.tobytes()) - f.put_sshstr(b"") # RESERVED FIELD - # encode CA public key - ca_type = _get_ssh_key_type(private_key) - caformat = _lookup_kformat(ca_type) - caf = _FragList() - caf.put_sshstr(ca_type) - caformat.encode_public(private_key.public_key(), caf) - f.put_sshstr(caf.tobytes()) - # Sigs according to the rules defined for the CA's public key - # (RFC4253 section 6.6 for ssh-rsa, RFC5656 for ECDSA, - # and RFC8032 for Ed25519). - if isinstance(private_key, ed25519.Ed25519PrivateKey): - signature = private_key.sign(f.tobytes()) - fsig = _FragList() - fsig.put_sshstr(ca_type) - fsig.put_sshstr(signature) - f.put_sshstr(fsig.tobytes()) - elif isinstance(private_key, ec.EllipticCurvePrivateKey): - hash_alg = _get_ec_hash_alg(private_key.curve) - signature = private_key.sign(f.tobytes(), ec.ECDSA(hash_alg)) - r, s = asym_utils.decode_dss_signature(signature) - fsig = _FragList() - fsig.put_sshstr(ca_type) - fsigblob = _FragList() - fsigblob.put_mpint(r) - fsigblob.put_mpint(s) - fsig.put_sshstr(fsigblob.tobytes()) - f.put_sshstr(fsig.tobytes()) - - else: - assert isinstance(private_key, rsa.RSAPrivateKey) - # Just like Golang, we're going to use SHA512 for RSA - # https://cs.opensource.google/go/x/crypto/+/refs/tags/ - # v0.4.0:ssh/certs.go;l=445 - # RFC 8332 defines SHA256 and 512 as options - fsig = _FragList() - fsig.put_sshstr(_SSH_RSA_SHA512) - signature = private_key.sign( - f.tobytes(), padding.PKCS1v15(), hashes.SHA512() - ) - fsig.put_sshstr(signature) - f.put_sshstr(fsig.tobytes()) - - cert_data = binascii.b2a_base64(f.tobytes()).strip() - # load_ssh_public_identity returns a union, but this is - # guaranteed to be an SSHCertificate, so we cast to make - # mypy happy. - return typing.cast( - SSHCertificate, - load_ssh_public_identity(b"".join([cert_prefix, b" ", cert_data])), - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py deleted file mode 100644 index c1af423..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - - -class InvalidToken(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index ffe2156..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc deleted file mode 100644 index 4a99ab6..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc deleted file mode 100644 index 0bedbf3..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py deleted file mode 100644 index 21fb000..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +++ /dev/null @@ -1,101 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import base64 -import typing -from urllib.parse import quote, urlencode - -from cryptography.hazmat.primitives import constant_time, hmac -from cryptography.hazmat.primitives.hashes import SHA1, SHA256, SHA512 -from cryptography.hazmat.primitives.twofactor import InvalidToken -from cryptography.utils import Buffer - -HOTPHashTypes = typing.Union[SHA1, SHA256, SHA512] - - -def _generate_uri( - hotp: HOTP, - type_name: str, - account_name: str, - issuer: str | None, - extra_parameters: list[tuple[str, int]], -) -> str: - parameters = [ - ("digits", hotp._length), - ("secret", base64.b32encode(hotp._key)), - ("algorithm", hotp._algorithm.name.upper()), - ] - - if issuer is not None: - parameters.append(("issuer", issuer)) - - parameters.extend(extra_parameters) - - label = ( - f"{quote(issuer)}:{quote(account_name)}" - if issuer - else quote(account_name) - ) - return f"otpauth://{type_name}/{label}?{urlencode(parameters)}" - - -class HOTP: - def __init__( - self, - key: Buffer, - length: int, - algorithm: HOTPHashTypes, - backend: typing.Any = None, - enforce_key_length: bool = True, - ) -> None: - if len(key) < 16 and enforce_key_length is True: - raise ValueError("Key length has to be at least 128 bits.") - - if not isinstance(length, int): - raise TypeError("Length parameter must be an integer type.") - - if length < 6 or length > 8: - raise ValueError("Length of HOTP has to be between 6 and 8.") - - if not isinstance(algorithm, (SHA1, SHA256, SHA512)): - raise TypeError("Algorithm must be SHA1, SHA256 or SHA512.") - - self._key = key - self._length = length - self._algorithm = algorithm - - def generate(self, counter: int) -> bytes: - if not isinstance(counter, int): - raise TypeError("Counter parameter must be an integer type.") - - truncated_value = self._dynamic_truncate(counter) - hotp = truncated_value % (10**self._length) - return "{0:0{1}}".format(hotp, self._length).encode() - - def verify(self, hotp: bytes, counter: int) -> None: - if not constant_time.bytes_eq(self.generate(counter), hotp): - raise InvalidToken("Supplied HOTP value does not match.") - - def _dynamic_truncate(self, counter: int) -> int: - ctx = hmac.HMAC(self._key, self._algorithm) - - try: - ctx.update(counter.to_bytes(length=8, byteorder="big")) - except OverflowError: - raise ValueError(f"Counter must be between 0 and {2**64 - 1}.") - - hmac_value = ctx.finalize() - - offset = hmac_value[len(hmac_value) - 1] & 0b1111 - p = hmac_value[offset : offset + 4] - return int.from_bytes(p, byteorder="big") & 0x7FFFFFFF - - def get_provisioning_uri( - self, account_name: str, counter: int, issuer: str | None - ) -> str: - return _generate_uri( - self, "hotp", account_name, issuer, [("counter", int(counter))] - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/totp.py b/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/totp.py deleted file mode 100644 index 10c725c..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +++ /dev/null @@ -1,56 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.hazmat.primitives import constant_time -from cryptography.hazmat.primitives.twofactor import InvalidToken -from cryptography.hazmat.primitives.twofactor.hotp import ( - HOTP, - HOTPHashTypes, - _generate_uri, -) -from cryptography.utils import Buffer - - -class TOTP: - def __init__( - self, - key: Buffer, - length: int, - algorithm: HOTPHashTypes, - time_step: int, - backend: typing.Any = None, - enforce_key_length: bool = True, - ): - self._time_step = time_step - self._hotp = HOTP( - key, length, algorithm, enforce_key_length=enforce_key_length - ) - - def generate(self, time: int | float) -> bytes: - if not isinstance(time, (int, float)): - raise TypeError( - "Time parameter must be an integer type or float type." - ) - - counter = int(time / self._time_step) - return self._hotp.generate(counter) - - def verify(self, totp: bytes, time: int) -> None: - if not constant_time.bytes_eq(self.generate(time), totp): - raise InvalidToken("Supplied TOTP value does not match.") - - def get_provisioning_uri( - self, account_name: str, issuer: str | None - ) -> str: - return _generate_uri( - self._hotp, - "totp", - account_name, - issuer, - [("period", int(self._time_step))], - ) diff --git a/myenv/lib/python3.12/site-packages/cryptography/py.typed b/myenv/lib/python3.12/site-packages/cryptography/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/cryptography/utils.py b/myenv/lib/python3.12/site-packages/cryptography/utils.py deleted file mode 100644 index 3a930fd..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/utils.py +++ /dev/null @@ -1,138 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import enum -import sys -import types -import typing -import warnings -from collections.abc import Callable, Sequence - - -# We use a UserWarning subclass, instead of DeprecationWarning, because CPython -# decided deprecation warnings should be invisible by default. -class CryptographyDeprecationWarning(UserWarning): - pass - - -# Several APIs were deprecated with no specific end-of-life date because of the -# ubiquity of their use. They should not be removed until we agree on when that -# cycle ends. -DeprecatedIn36 = CryptographyDeprecationWarning -DeprecatedIn40 = CryptographyDeprecationWarning -DeprecatedIn41 = CryptographyDeprecationWarning -DeprecatedIn42 = CryptographyDeprecationWarning -DeprecatedIn43 = CryptographyDeprecationWarning -DeprecatedIn46 = CryptographyDeprecationWarning - - -# If you're wondering why we don't use `Buffer`, it's because `Buffer` would -# be more accurately named: Bufferable. It means something which has an -# `__buffer__`. Which means you can't actually treat the result as a buffer -# (and do things like take a `len()`). -if sys.version_info >= (3, 9): - Buffer = typing.Union[bytes, bytearray, memoryview] -else: - Buffer = typing.ByteString - - -def _check_bytes(name: str, value: bytes) -> None: - if not isinstance(value, bytes): - raise TypeError(f"{name} must be bytes") - - -def _check_byteslike(name: str, value: Buffer) -> None: - try: - memoryview(value) - except TypeError: - raise TypeError(f"{name} must be bytes-like") - - -def int_to_bytes(integer: int, length: int | None = None) -> bytes: - if length == 0: - raise ValueError("length argument can't be 0") - return integer.to_bytes( - length or (integer.bit_length() + 7) // 8 or 1, "big" - ) - - -class InterfaceNotImplemented(Exception): - pass - - -class _DeprecatedValue: - def __init__(self, value: object, message: str, warning_class): - self.value = value - self.message = message - self.warning_class = warning_class - - -class _ModuleWithDeprecations(types.ModuleType): - def __init__(self, module: types.ModuleType): - super().__init__(module.__name__) - self.__dict__["_module"] = module - - def __getattr__(self, attr: str) -> object: - obj = getattr(self._module, attr) - if isinstance(obj, _DeprecatedValue): - warnings.warn(obj.message, obj.warning_class, stacklevel=2) - obj = obj.value - return obj - - def __setattr__(self, attr: str, value: object) -> None: - setattr(self._module, attr, value) - - def __delattr__(self, attr: str) -> None: - obj = getattr(self._module, attr) - if isinstance(obj, _DeprecatedValue): - warnings.warn(obj.message, obj.warning_class, stacklevel=2) - - delattr(self._module, attr) - - def __dir__(self) -> Sequence[str]: - return ["_module", *dir(self._module)] - - -def deprecated( - value: object, - module_name: str, - message: str, - warning_class: type[Warning], - name: str | None = None, -) -> _DeprecatedValue: - module = sys.modules[module_name] - if not isinstance(module, _ModuleWithDeprecations): - sys.modules[module_name] = module = _ModuleWithDeprecations(module) - dv = _DeprecatedValue(value, message, warning_class) - # Maintain backwards compatibility with `name is None` for pyOpenSSL. - if name is not None: - setattr(module, name, dv) - return dv - - -def cached_property(func: Callable) -> property: - cached_name = f"_cached_{func}" - sentinel = object() - - def inner(instance: object): - cache = getattr(instance, cached_name, sentinel) - if cache is not sentinel: - return cache - result = func(instance) - setattr(instance, cached_name, result) - return result - - return property(inner) - - -# Python 3.10 changed representation of enums. We use well-defined object -# representation and string representation from Python 3.9. -class Enum(enum.Enum): - def __repr__(self) -> str: - return f"<{self.__class__.__name__}.{self._name_}: {self._value_!r}>" - - def __str__(self) -> str: - return f"{self.__class__.__name__}.{self._name_}" diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__init__.py b/myenv/lib/python3.12/site-packages/cryptography/x509/__init__.py deleted file mode 100644 index 318eecc..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/__init__.py +++ /dev/null @@ -1,270 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.x509 import certificate_transparency, verification -from cryptography.x509.base import ( - Attribute, - AttributeNotFound, - Attributes, - Certificate, - CertificateBuilder, - CertificateRevocationList, - CertificateRevocationListBuilder, - CertificateSigningRequest, - CertificateSigningRequestBuilder, - InvalidVersion, - RevokedCertificate, - RevokedCertificateBuilder, - Version, - load_der_x509_certificate, - load_der_x509_crl, - load_der_x509_csr, - load_pem_x509_certificate, - load_pem_x509_certificates, - load_pem_x509_crl, - load_pem_x509_csr, - random_serial_number, -) -from cryptography.x509.extensions import ( - AccessDescription, - Admission, - Admissions, - AuthorityInformationAccess, - AuthorityKeyIdentifier, - BasicConstraints, - CertificateIssuer, - CertificatePolicies, - CRLDistributionPoints, - CRLNumber, - CRLReason, - DeltaCRLIndicator, - DistributionPoint, - DuplicateExtension, - ExtendedKeyUsage, - Extension, - ExtensionNotFound, - Extensions, - ExtensionType, - FreshestCRL, - GeneralNames, - InhibitAnyPolicy, - InvalidityDate, - IssuerAlternativeName, - IssuingDistributionPoint, - KeyUsage, - MSCertificateTemplate, - NameConstraints, - NamingAuthority, - NoticeReference, - OCSPAcceptableResponses, - OCSPNoCheck, - OCSPNonce, - PolicyConstraints, - PolicyInformation, - PrecertificateSignedCertificateTimestamps, - PrecertPoison, - PrivateKeyUsagePeriod, - ProfessionInfo, - ReasonFlags, - SignedCertificateTimestamps, - SubjectAlternativeName, - SubjectInformationAccess, - SubjectKeyIdentifier, - TLSFeature, - TLSFeatureType, - UnrecognizedExtension, - UserNotice, -) -from cryptography.x509.general_name import ( - DirectoryName, - DNSName, - GeneralName, - IPAddress, - OtherName, - RegisteredID, - RFC822Name, - UniformResourceIdentifier, - UnsupportedGeneralNameType, -) -from cryptography.x509.name import ( - Name, - NameAttribute, - RelativeDistinguishedName, -) -from cryptography.x509.oid import ( - AuthorityInformationAccessOID, - CertificatePoliciesOID, - CRLEntryExtensionOID, - ExtendedKeyUsageOID, - ExtensionOID, - NameOID, - ObjectIdentifier, - PublicKeyAlgorithmOID, - SignatureAlgorithmOID, -) - -OID_AUTHORITY_INFORMATION_ACCESS = ExtensionOID.AUTHORITY_INFORMATION_ACCESS -OID_AUTHORITY_KEY_IDENTIFIER = ExtensionOID.AUTHORITY_KEY_IDENTIFIER -OID_BASIC_CONSTRAINTS = ExtensionOID.BASIC_CONSTRAINTS -OID_CERTIFICATE_POLICIES = ExtensionOID.CERTIFICATE_POLICIES -OID_CRL_DISTRIBUTION_POINTS = ExtensionOID.CRL_DISTRIBUTION_POINTS -OID_EXTENDED_KEY_USAGE = ExtensionOID.EXTENDED_KEY_USAGE -OID_FRESHEST_CRL = ExtensionOID.FRESHEST_CRL -OID_INHIBIT_ANY_POLICY = ExtensionOID.INHIBIT_ANY_POLICY -OID_ISSUER_ALTERNATIVE_NAME = ExtensionOID.ISSUER_ALTERNATIVE_NAME -OID_KEY_USAGE = ExtensionOID.KEY_USAGE -OID_PRIVATE_KEY_USAGE_PERIOD = ExtensionOID.PRIVATE_KEY_USAGE_PERIOD -OID_NAME_CONSTRAINTS = ExtensionOID.NAME_CONSTRAINTS -OID_OCSP_NO_CHECK = ExtensionOID.OCSP_NO_CHECK -OID_POLICY_CONSTRAINTS = ExtensionOID.POLICY_CONSTRAINTS -OID_POLICY_MAPPINGS = ExtensionOID.POLICY_MAPPINGS -OID_SUBJECT_ALTERNATIVE_NAME = ExtensionOID.SUBJECT_ALTERNATIVE_NAME -OID_SUBJECT_DIRECTORY_ATTRIBUTES = ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES -OID_SUBJECT_INFORMATION_ACCESS = ExtensionOID.SUBJECT_INFORMATION_ACCESS -OID_SUBJECT_KEY_IDENTIFIER = ExtensionOID.SUBJECT_KEY_IDENTIFIER - -OID_DSA_WITH_SHA1 = SignatureAlgorithmOID.DSA_WITH_SHA1 -OID_DSA_WITH_SHA224 = SignatureAlgorithmOID.DSA_WITH_SHA224 -OID_DSA_WITH_SHA256 = SignatureAlgorithmOID.DSA_WITH_SHA256 -OID_ECDSA_WITH_SHA1 = SignatureAlgorithmOID.ECDSA_WITH_SHA1 -OID_ECDSA_WITH_SHA224 = SignatureAlgorithmOID.ECDSA_WITH_SHA224 -OID_ECDSA_WITH_SHA256 = SignatureAlgorithmOID.ECDSA_WITH_SHA256 -OID_ECDSA_WITH_SHA384 = SignatureAlgorithmOID.ECDSA_WITH_SHA384 -OID_ECDSA_WITH_SHA512 = SignatureAlgorithmOID.ECDSA_WITH_SHA512 -OID_RSA_WITH_MD5 = SignatureAlgorithmOID.RSA_WITH_MD5 -OID_RSA_WITH_SHA1 = SignatureAlgorithmOID.RSA_WITH_SHA1 -OID_RSA_WITH_SHA224 = SignatureAlgorithmOID.RSA_WITH_SHA224 -OID_RSA_WITH_SHA256 = SignatureAlgorithmOID.RSA_WITH_SHA256 -OID_RSA_WITH_SHA384 = SignatureAlgorithmOID.RSA_WITH_SHA384 -OID_RSA_WITH_SHA512 = SignatureAlgorithmOID.RSA_WITH_SHA512 -OID_RSASSA_PSS = SignatureAlgorithmOID.RSASSA_PSS - -OID_COMMON_NAME = NameOID.COMMON_NAME -OID_COUNTRY_NAME = NameOID.COUNTRY_NAME -OID_DOMAIN_COMPONENT = NameOID.DOMAIN_COMPONENT -OID_DN_QUALIFIER = NameOID.DN_QUALIFIER -OID_EMAIL_ADDRESS = NameOID.EMAIL_ADDRESS -OID_GENERATION_QUALIFIER = NameOID.GENERATION_QUALIFIER -OID_GIVEN_NAME = NameOID.GIVEN_NAME -OID_LOCALITY_NAME = NameOID.LOCALITY_NAME -OID_ORGANIZATIONAL_UNIT_NAME = NameOID.ORGANIZATIONAL_UNIT_NAME -OID_ORGANIZATION_NAME = NameOID.ORGANIZATION_NAME -OID_PSEUDONYM = NameOID.PSEUDONYM -OID_SERIAL_NUMBER = NameOID.SERIAL_NUMBER -OID_STATE_OR_PROVINCE_NAME = NameOID.STATE_OR_PROVINCE_NAME -OID_SURNAME = NameOID.SURNAME -OID_TITLE = NameOID.TITLE - -OID_CLIENT_AUTH = ExtendedKeyUsageOID.CLIENT_AUTH -OID_CODE_SIGNING = ExtendedKeyUsageOID.CODE_SIGNING -OID_EMAIL_PROTECTION = ExtendedKeyUsageOID.EMAIL_PROTECTION -OID_OCSP_SIGNING = ExtendedKeyUsageOID.OCSP_SIGNING -OID_SERVER_AUTH = ExtendedKeyUsageOID.SERVER_AUTH -OID_TIME_STAMPING = ExtendedKeyUsageOID.TIME_STAMPING - -OID_ANY_POLICY = CertificatePoliciesOID.ANY_POLICY -OID_CPS_QUALIFIER = CertificatePoliciesOID.CPS_QUALIFIER -OID_CPS_USER_NOTICE = CertificatePoliciesOID.CPS_USER_NOTICE - -OID_CERTIFICATE_ISSUER = CRLEntryExtensionOID.CERTIFICATE_ISSUER -OID_CRL_REASON = CRLEntryExtensionOID.CRL_REASON -OID_INVALIDITY_DATE = CRLEntryExtensionOID.INVALIDITY_DATE - -OID_CA_ISSUERS = AuthorityInformationAccessOID.CA_ISSUERS -OID_OCSP = AuthorityInformationAccessOID.OCSP - -__all__ = [ - "OID_CA_ISSUERS", - "OID_OCSP", - "AccessDescription", - "Admission", - "Admissions", - "Attribute", - "AttributeNotFound", - "Attributes", - "AuthorityInformationAccess", - "AuthorityKeyIdentifier", - "BasicConstraints", - "CRLDistributionPoints", - "CRLNumber", - "CRLReason", - "Certificate", - "CertificateBuilder", - "CertificateIssuer", - "CertificatePolicies", - "CertificateRevocationList", - "CertificateRevocationListBuilder", - "CertificateSigningRequest", - "CertificateSigningRequestBuilder", - "DNSName", - "DeltaCRLIndicator", - "DirectoryName", - "DistributionPoint", - "DuplicateExtension", - "ExtendedKeyUsage", - "Extension", - "ExtensionNotFound", - "ExtensionType", - "Extensions", - "FreshestCRL", - "GeneralName", - "GeneralNames", - "IPAddress", - "InhibitAnyPolicy", - "InvalidVersion", - "InvalidityDate", - "IssuerAlternativeName", - "IssuingDistributionPoint", - "KeyUsage", - "MSCertificateTemplate", - "Name", - "NameAttribute", - "NameConstraints", - "NameOID", - "NamingAuthority", - "NoticeReference", - "OCSPAcceptableResponses", - "OCSPNoCheck", - "OCSPNonce", - "ObjectIdentifier", - "OtherName", - "PolicyConstraints", - "PolicyInformation", - "PrecertPoison", - "PrecertificateSignedCertificateTimestamps", - "PrivateKeyUsagePeriod", - "ProfessionInfo", - "PublicKeyAlgorithmOID", - "RFC822Name", - "ReasonFlags", - "RegisteredID", - "RelativeDistinguishedName", - "RevokedCertificate", - "RevokedCertificateBuilder", - "SignatureAlgorithmOID", - "SignedCertificateTimestamps", - "SubjectAlternativeName", - "SubjectInformationAccess", - "SubjectKeyIdentifier", - "TLSFeature", - "TLSFeatureType", - "UniformResourceIdentifier", - "UnrecognizedExtension", - "UnsupportedGeneralNameType", - "UserNotice", - "Version", - "certificate_transparency", - "load_der_x509_certificate", - "load_der_x509_crl", - "load_der_x509_csr", - "load_pem_x509_certificate", - "load_pem_x509_certificates", - "load_pem_x509_crl", - "load_pem_x509_csr", - "random_serial_number", - "verification", - "verification", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index efa7059..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/base.cpython-312.pyc deleted file mode 100644 index 108f7e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc deleted file mode 100644 index 0aaa183..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/extensions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/extensions.cpython-312.pyc deleted file mode 100644 index cb60f5c..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/extensions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/general_name.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/general_name.cpython-312.pyc deleted file mode 100644 index 56b5b0e..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/general_name.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/name.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/name.cpython-312.pyc deleted file mode 100644 index 59a9198..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/name.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/ocsp.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/ocsp.cpython-312.pyc deleted file mode 100644 index 326e7f5..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/ocsp.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/oid.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/oid.cpython-312.pyc deleted file mode 100644 index dc8fc37..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/oid.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/verification.cpython-312.pyc b/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/verification.cpython-312.pyc deleted file mode 100644 index ee72a92..0000000 Binary files a/myenv/lib/python3.12/site-packages/cryptography/x509/__pycache__/verification.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/base.py b/myenv/lib/python3.12/site-packages/cryptography/x509/base.py deleted file mode 100644 index 1be612b..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/base.py +++ /dev/null @@ -1,848 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import datetime -import os -import typing -import warnings -from collections.abc import Iterable - -from cryptography import utils -from cryptography.hazmat.bindings._rust import x509 as rust_x509 -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import ( - dsa, - ec, - ed448, - ed25519, - padding, - rsa, - x448, - x25519, -) -from cryptography.hazmat.primitives.asymmetric.types import ( - CertificateIssuerPrivateKeyTypes, - CertificatePublicKeyTypes, -) -from cryptography.x509.extensions import ( - Extension, - Extensions, - ExtensionType, - _make_sequence_methods, -) -from cryptography.x509.name import Name, _ASN1Type -from cryptography.x509.oid import ObjectIdentifier - -_EARLIEST_UTC_TIME = datetime.datetime(1950, 1, 1) - -# This must be kept in sync with sign.rs's list of allowable types in -# identify_hash_type -_AllowedHashTypes = typing.Union[ - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - hashes.SHA3_224, - hashes.SHA3_256, - hashes.SHA3_384, - hashes.SHA3_512, -] - - -class AttributeNotFound(Exception): - def __init__(self, msg: str, oid: ObjectIdentifier) -> None: - super().__init__(msg) - self.oid = oid - - -def _reject_duplicate_extension( - extension: Extension[ExtensionType], - extensions: list[Extension[ExtensionType]], -) -> None: - # This is quadratic in the number of extensions - for e in extensions: - if e.oid == extension.oid: - raise ValueError("This extension has already been set.") - - -def _reject_duplicate_attribute( - oid: ObjectIdentifier, - attributes: list[tuple[ObjectIdentifier, bytes, int | None]], -) -> None: - # This is quadratic in the number of attributes - for attr_oid, _, _ in attributes: - if attr_oid == oid: - raise ValueError("This attribute has already been set.") - - -def _convert_to_naive_utc_time(time: datetime.datetime) -> datetime.datetime: - """Normalizes a datetime to a naive datetime in UTC. - - time -- datetime to normalize. Assumed to be in UTC if not timezone - aware. - """ - if time.tzinfo is not None: - offset = time.utcoffset() - offset = offset if offset else datetime.timedelta() - return time.replace(tzinfo=None) - offset - else: - return time - - -class Attribute: - def __init__( - self, - oid: ObjectIdentifier, - value: bytes, - _type: int = _ASN1Type.UTF8String.value, - ) -> None: - self._oid = oid - self._value = value - self._type = _type - - @property - def oid(self) -> ObjectIdentifier: - return self._oid - - @property - def value(self) -> bytes: - return self._value - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Attribute): - return NotImplemented - - return ( - self.oid == other.oid - and self.value == other.value - and self._type == other._type - ) - - def __hash__(self) -> int: - return hash((self.oid, self.value, self._type)) - - -class Attributes: - def __init__( - self, - attributes: Iterable[Attribute], - ) -> None: - self._attributes = list(attributes) - - __len__, __iter__, __getitem__ = _make_sequence_methods("_attributes") - - def __repr__(self) -> str: - return f"" - - def get_attribute_for_oid(self, oid: ObjectIdentifier) -> Attribute: - for attr in self: - if attr.oid == oid: - return attr - - raise AttributeNotFound(f"No {oid} attribute was found", oid) - - -class Version(utils.Enum): - v1 = 0 - v3 = 2 - - -class InvalidVersion(Exception): - def __init__(self, msg: str, parsed_version: int) -> None: - super().__init__(msg) - self.parsed_version = parsed_version - - -Certificate = rust_x509.Certificate - - -class RevokedCertificate(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def serial_number(self) -> int: - """ - Returns the serial number of the revoked certificate. - """ - - @property - @abc.abstractmethod - def revocation_date(self) -> datetime.datetime: - """ - Returns the date of when this certificate was revoked. - """ - - @property - @abc.abstractmethod - def revocation_date_utc(self) -> datetime.datetime: - """ - Returns the date of when this certificate was revoked as a non-naive - UTC datetime. - """ - - @property - @abc.abstractmethod - def extensions(self) -> Extensions: - """ - Returns an Extensions object containing a list of Revoked extensions. - """ - - -# Runtime isinstance checks need this since the rust class is not a subclass. -RevokedCertificate.register(rust_x509.RevokedCertificate) - - -class _RawRevokedCertificate(RevokedCertificate): - def __init__( - self, - serial_number: int, - revocation_date: datetime.datetime, - extensions: Extensions, - ): - self._serial_number = serial_number - self._revocation_date = revocation_date - self._extensions = extensions - - @property - def serial_number(self) -> int: - return self._serial_number - - @property - def revocation_date(self) -> datetime.datetime: - warnings.warn( - "Properties that return a naïve datetime object have been " - "deprecated. Please switch to revocation_date_utc.", - utils.DeprecatedIn42, - stacklevel=2, - ) - return self._revocation_date - - @property - def revocation_date_utc(self) -> datetime.datetime: - return self._revocation_date.replace(tzinfo=datetime.timezone.utc) - - @property - def extensions(self) -> Extensions: - return self._extensions - - -CertificateRevocationList = rust_x509.CertificateRevocationList -CertificateSigningRequest = rust_x509.CertificateSigningRequest - - -load_pem_x509_certificate = rust_x509.load_pem_x509_certificate -load_der_x509_certificate = rust_x509.load_der_x509_certificate - -load_pem_x509_certificates = rust_x509.load_pem_x509_certificates - -load_pem_x509_csr = rust_x509.load_pem_x509_csr -load_der_x509_csr = rust_x509.load_der_x509_csr - -load_pem_x509_crl = rust_x509.load_pem_x509_crl -load_der_x509_crl = rust_x509.load_der_x509_crl - - -class CertificateSigningRequestBuilder: - def __init__( - self, - subject_name: Name | None = None, - extensions: list[Extension[ExtensionType]] = [], - attributes: list[tuple[ObjectIdentifier, bytes, int | None]] = [], - ): - """ - Creates an empty X.509 certificate request (v1). - """ - self._subject_name = subject_name - self._extensions = extensions - self._attributes = attributes - - def subject_name(self, name: Name) -> CertificateSigningRequestBuilder: - """ - Sets the certificate requestor's distinguished name. - """ - if not isinstance(name, Name): - raise TypeError("Expecting x509.Name object.") - if self._subject_name is not None: - raise ValueError("The subject name may only be set once.") - return CertificateSigningRequestBuilder( - name, self._extensions, self._attributes - ) - - def add_extension( - self, extval: ExtensionType, critical: bool - ) -> CertificateSigningRequestBuilder: - """ - Adds an X.509 extension to the certificate request. - """ - if not isinstance(extval, ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - - return CertificateSigningRequestBuilder( - self._subject_name, - [*self._extensions, extension], - self._attributes, - ) - - def add_attribute( - self, - oid: ObjectIdentifier, - value: bytes, - *, - _tag: _ASN1Type | None = None, - ) -> CertificateSigningRequestBuilder: - """ - Adds an X.509 attribute with an OID and associated value. - """ - if not isinstance(oid, ObjectIdentifier): - raise TypeError("oid must be an ObjectIdentifier") - - if not isinstance(value, bytes): - raise TypeError("value must be bytes") - - if _tag is not None and not isinstance(_tag, _ASN1Type): - raise TypeError("tag must be _ASN1Type") - - _reject_duplicate_attribute(oid, self._attributes) - - if _tag is not None: - tag = _tag.value - else: - tag = None - - return CertificateSigningRequestBuilder( - self._subject_name, - self._extensions, - [*self._attributes, (oid, value, tag)], - ) - - def sign( - self, - private_key: CertificateIssuerPrivateKeyTypes, - algorithm: _AllowedHashTypes | None, - backend: typing.Any = None, - *, - rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, - ecdsa_deterministic: bool | None = None, - ) -> CertificateSigningRequest: - """ - Signs the request using the requestor's private key. - """ - if self._subject_name is None: - raise ValueError("A CertificateSigningRequest must have a subject") - - if rsa_padding is not None: - if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): - raise TypeError("Padding must be PSS or PKCS1v15") - if not isinstance(private_key, rsa.RSAPrivateKey): - raise TypeError("Padding is only supported for RSA keys") - - if ecdsa_deterministic is not None: - if not isinstance(private_key, ec.EllipticCurvePrivateKey): - raise TypeError( - "Deterministic ECDSA is only supported for EC keys" - ) - - return rust_x509.create_x509_csr( - self, - private_key, - algorithm, - rsa_padding, - ecdsa_deterministic, - ) - - -class CertificateBuilder: - _extensions: list[Extension[ExtensionType]] - - def __init__( - self, - issuer_name: Name | None = None, - subject_name: Name | None = None, - public_key: CertificatePublicKeyTypes | None = None, - serial_number: int | None = None, - not_valid_before: datetime.datetime | None = None, - not_valid_after: datetime.datetime | None = None, - extensions: list[Extension[ExtensionType]] = [], - ) -> None: - self._version = Version.v3 - self._issuer_name = issuer_name - self._subject_name = subject_name - self._public_key = public_key - self._serial_number = serial_number - self._not_valid_before = not_valid_before - self._not_valid_after = not_valid_after - self._extensions = extensions - - def issuer_name(self, name: Name) -> CertificateBuilder: - """ - Sets the CA's distinguished name. - """ - if not isinstance(name, Name): - raise TypeError("Expecting x509.Name object.") - if self._issuer_name is not None: - raise ValueError("The issuer name may only be set once.") - return CertificateBuilder( - name, - self._subject_name, - self._public_key, - self._serial_number, - self._not_valid_before, - self._not_valid_after, - self._extensions, - ) - - def subject_name(self, name: Name) -> CertificateBuilder: - """ - Sets the requestor's distinguished name. - """ - if not isinstance(name, Name): - raise TypeError("Expecting x509.Name object.") - if self._subject_name is not None: - raise ValueError("The subject name may only be set once.") - return CertificateBuilder( - self._issuer_name, - name, - self._public_key, - self._serial_number, - self._not_valid_before, - self._not_valid_after, - self._extensions, - ) - - def public_key( - self, - key: CertificatePublicKeyTypes, - ) -> CertificateBuilder: - """ - Sets the requestor's public key (as found in the signing request). - """ - if not isinstance( - key, - ( - dsa.DSAPublicKey, - rsa.RSAPublicKey, - ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey, - ed448.Ed448PublicKey, - x25519.X25519PublicKey, - x448.X448PublicKey, - ), - ): - raise TypeError( - "Expecting one of DSAPublicKey, RSAPublicKey," - " EllipticCurvePublicKey, Ed25519PublicKey," - " Ed448PublicKey, X25519PublicKey, or " - "X448PublicKey." - ) - if self._public_key is not None: - raise ValueError("The public key may only be set once.") - return CertificateBuilder( - self._issuer_name, - self._subject_name, - key, - self._serial_number, - self._not_valid_before, - self._not_valid_after, - self._extensions, - ) - - def serial_number(self, number: int) -> CertificateBuilder: - """ - Sets the certificate serial number. - """ - if not isinstance(number, int): - raise TypeError("Serial number must be of integral type.") - if self._serial_number is not None: - raise ValueError("The serial number may only be set once.") - if number <= 0: - raise ValueError("The serial number should be positive.") - - # ASN.1 integers are always signed, so most significant bit must be - # zero. - if number.bit_length() >= 160: # As defined in RFC 5280 - raise ValueError( - "The serial number should not be more than 159 bits." - ) - return CertificateBuilder( - self._issuer_name, - self._subject_name, - self._public_key, - number, - self._not_valid_before, - self._not_valid_after, - self._extensions, - ) - - def not_valid_before(self, time: datetime.datetime) -> CertificateBuilder: - """ - Sets the certificate activation time. - """ - if not isinstance(time, datetime.datetime): - raise TypeError("Expecting datetime object.") - if self._not_valid_before is not None: - raise ValueError("The not valid before may only be set once.") - time = _convert_to_naive_utc_time(time) - if time < _EARLIEST_UTC_TIME: - raise ValueError( - "The not valid before date must be on or after" - " 1950 January 1)." - ) - if self._not_valid_after is not None and time > self._not_valid_after: - raise ValueError( - "The not valid before date must be before the not valid after " - "date." - ) - return CertificateBuilder( - self._issuer_name, - self._subject_name, - self._public_key, - self._serial_number, - time, - self._not_valid_after, - self._extensions, - ) - - def not_valid_after(self, time: datetime.datetime) -> CertificateBuilder: - """ - Sets the certificate expiration time. - """ - if not isinstance(time, datetime.datetime): - raise TypeError("Expecting datetime object.") - if self._not_valid_after is not None: - raise ValueError("The not valid after may only be set once.") - time = _convert_to_naive_utc_time(time) - if time < _EARLIEST_UTC_TIME: - raise ValueError( - "The not valid after date must be on or after 1950 January 1." - ) - if ( - self._not_valid_before is not None - and time < self._not_valid_before - ): - raise ValueError( - "The not valid after date must be after the not valid before " - "date." - ) - return CertificateBuilder( - self._issuer_name, - self._subject_name, - self._public_key, - self._serial_number, - self._not_valid_before, - time, - self._extensions, - ) - - def add_extension( - self, extval: ExtensionType, critical: bool - ) -> CertificateBuilder: - """ - Adds an X.509 extension to the certificate. - """ - if not isinstance(extval, ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - - return CertificateBuilder( - self._issuer_name, - self._subject_name, - self._public_key, - self._serial_number, - self._not_valid_before, - self._not_valid_after, - [*self._extensions, extension], - ) - - def sign( - self, - private_key: CertificateIssuerPrivateKeyTypes, - algorithm: _AllowedHashTypes | None, - backend: typing.Any = None, - *, - rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, - ecdsa_deterministic: bool | None = None, - ) -> Certificate: - """ - Signs the certificate using the CA's private key. - """ - if self._subject_name is None: - raise ValueError("A certificate must have a subject name") - - if self._issuer_name is None: - raise ValueError("A certificate must have an issuer name") - - if self._serial_number is None: - raise ValueError("A certificate must have a serial number") - - if self._not_valid_before is None: - raise ValueError("A certificate must have a not valid before time") - - if self._not_valid_after is None: - raise ValueError("A certificate must have a not valid after time") - - if self._public_key is None: - raise ValueError("A certificate must have a public key") - - if rsa_padding is not None: - if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): - raise TypeError("Padding must be PSS or PKCS1v15") - if not isinstance(private_key, rsa.RSAPrivateKey): - raise TypeError("Padding is only supported for RSA keys") - - if ecdsa_deterministic is not None: - if not isinstance(private_key, ec.EllipticCurvePrivateKey): - raise TypeError( - "Deterministic ECDSA is only supported for EC keys" - ) - - return rust_x509.create_x509_certificate( - self, - private_key, - algorithm, - rsa_padding, - ecdsa_deterministic, - ) - - -class CertificateRevocationListBuilder: - _extensions: list[Extension[ExtensionType]] - _revoked_certificates: list[RevokedCertificate] - - def __init__( - self, - issuer_name: Name | None = None, - last_update: datetime.datetime | None = None, - next_update: datetime.datetime | None = None, - extensions: list[Extension[ExtensionType]] = [], - revoked_certificates: list[RevokedCertificate] = [], - ): - self._issuer_name = issuer_name - self._last_update = last_update - self._next_update = next_update - self._extensions = extensions - self._revoked_certificates = revoked_certificates - - def issuer_name( - self, issuer_name: Name - ) -> CertificateRevocationListBuilder: - if not isinstance(issuer_name, Name): - raise TypeError("Expecting x509.Name object.") - if self._issuer_name is not None: - raise ValueError("The issuer name may only be set once.") - return CertificateRevocationListBuilder( - issuer_name, - self._last_update, - self._next_update, - self._extensions, - self._revoked_certificates, - ) - - def last_update( - self, last_update: datetime.datetime - ) -> CertificateRevocationListBuilder: - if not isinstance(last_update, datetime.datetime): - raise TypeError("Expecting datetime object.") - if self._last_update is not None: - raise ValueError("Last update may only be set once.") - last_update = _convert_to_naive_utc_time(last_update) - if last_update < _EARLIEST_UTC_TIME: - raise ValueError( - "The last update date must be on or after 1950 January 1." - ) - if self._next_update is not None and last_update > self._next_update: - raise ValueError( - "The last update date must be before the next update date." - ) - return CertificateRevocationListBuilder( - self._issuer_name, - last_update, - self._next_update, - self._extensions, - self._revoked_certificates, - ) - - def next_update( - self, next_update: datetime.datetime - ) -> CertificateRevocationListBuilder: - if not isinstance(next_update, datetime.datetime): - raise TypeError("Expecting datetime object.") - if self._next_update is not None: - raise ValueError("Last update may only be set once.") - next_update = _convert_to_naive_utc_time(next_update) - if next_update < _EARLIEST_UTC_TIME: - raise ValueError( - "The last update date must be on or after 1950 January 1." - ) - if self._last_update is not None and next_update < self._last_update: - raise ValueError( - "The next update date must be after the last update date." - ) - return CertificateRevocationListBuilder( - self._issuer_name, - self._last_update, - next_update, - self._extensions, - self._revoked_certificates, - ) - - def add_extension( - self, extval: ExtensionType, critical: bool - ) -> CertificateRevocationListBuilder: - """ - Adds an X.509 extension to the certificate revocation list. - """ - if not isinstance(extval, ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - return CertificateRevocationListBuilder( - self._issuer_name, - self._last_update, - self._next_update, - [*self._extensions, extension], - self._revoked_certificates, - ) - - def add_revoked_certificate( - self, revoked_certificate: RevokedCertificate - ) -> CertificateRevocationListBuilder: - """ - Adds a revoked certificate to the CRL. - """ - if not isinstance(revoked_certificate, RevokedCertificate): - raise TypeError("Must be an instance of RevokedCertificate") - - return CertificateRevocationListBuilder( - self._issuer_name, - self._last_update, - self._next_update, - self._extensions, - [*self._revoked_certificates, revoked_certificate], - ) - - def sign( - self, - private_key: CertificateIssuerPrivateKeyTypes, - algorithm: _AllowedHashTypes | None, - backend: typing.Any = None, - *, - rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, - ecdsa_deterministic: bool | None = None, - ) -> CertificateRevocationList: - if self._issuer_name is None: - raise ValueError("A CRL must have an issuer name") - - if self._last_update is None: - raise ValueError("A CRL must have a last update time") - - if self._next_update is None: - raise ValueError("A CRL must have a next update time") - - if rsa_padding is not None: - if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): - raise TypeError("Padding must be PSS or PKCS1v15") - if not isinstance(private_key, rsa.RSAPrivateKey): - raise TypeError("Padding is only supported for RSA keys") - - if ecdsa_deterministic is not None: - if not isinstance(private_key, ec.EllipticCurvePrivateKey): - raise TypeError( - "Deterministic ECDSA is only supported for EC keys" - ) - - return rust_x509.create_x509_crl( - self, - private_key, - algorithm, - rsa_padding, - ecdsa_deterministic, - ) - - -class RevokedCertificateBuilder: - def __init__( - self, - serial_number: int | None = None, - revocation_date: datetime.datetime | None = None, - extensions: list[Extension[ExtensionType]] = [], - ): - self._serial_number = serial_number - self._revocation_date = revocation_date - self._extensions = extensions - - def serial_number(self, number: int) -> RevokedCertificateBuilder: - if not isinstance(number, int): - raise TypeError("Serial number must be of integral type.") - if self._serial_number is not None: - raise ValueError("The serial number may only be set once.") - if number <= 0: - raise ValueError("The serial number should be positive") - - # ASN.1 integers are always signed, so most significant bit must be - # zero. - if number.bit_length() >= 160: # As defined in RFC 5280 - raise ValueError( - "The serial number should not be more than 159 bits." - ) - return RevokedCertificateBuilder( - number, self._revocation_date, self._extensions - ) - - def revocation_date( - self, time: datetime.datetime - ) -> RevokedCertificateBuilder: - if not isinstance(time, datetime.datetime): - raise TypeError("Expecting datetime object.") - if self._revocation_date is not None: - raise ValueError("The revocation date may only be set once.") - time = _convert_to_naive_utc_time(time) - if time < _EARLIEST_UTC_TIME: - raise ValueError( - "The revocation date must be on or after 1950 January 1." - ) - return RevokedCertificateBuilder( - self._serial_number, time, self._extensions - ) - - def add_extension( - self, extval: ExtensionType, critical: bool - ) -> RevokedCertificateBuilder: - if not isinstance(extval, ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - return RevokedCertificateBuilder( - self._serial_number, - self._revocation_date, - [*self._extensions, extension], - ) - - def build(self, backend: typing.Any = None) -> RevokedCertificate: - if self._serial_number is None: - raise ValueError("A revoked certificate must have a serial number") - if self._revocation_date is None: - raise ValueError( - "A revoked certificate must have a revocation date" - ) - return _RawRevokedCertificate( - self._serial_number, - self._revocation_date, - Extensions(self._extensions), - ) - - -def random_serial_number() -> int: - return int.from_bytes(os.urandom(20), "big") >> 1 diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/certificate_transparency.py b/myenv/lib/python3.12/site-packages/cryptography/x509/certificate_transparency.py deleted file mode 100644 index fb66cc6..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/certificate_transparency.py +++ /dev/null @@ -1,35 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography import utils -from cryptography.hazmat.bindings._rust import x509 as rust_x509 - - -class LogEntryType(utils.Enum): - X509_CERTIFICATE = 0 - PRE_CERTIFICATE = 1 - - -class Version(utils.Enum): - v1 = 0 - - -class SignatureAlgorithm(utils.Enum): - """ - Signature algorithms that are valid for SCTs. - - These are exactly the same as SignatureAlgorithm in RFC 5246 (TLS 1.2). - - See: - """ - - ANONYMOUS = 0 - RSA = 1 - DSA = 2 - ECDSA = 3 - - -SignedCertificateTimestamp = rust_x509.Sct diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/extensions.py b/myenv/lib/python3.12/site-packages/cryptography/x509/extensions.py deleted file mode 100644 index dfa472d..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/extensions.py +++ /dev/null @@ -1,2528 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import datetime -import hashlib -import ipaddress -import typing -from collections.abc import Iterable, Iterator - -from cryptography import utils -from cryptography.hazmat.bindings._rust import asn1 -from cryptography.hazmat.bindings._rust import x509 as rust_x509 -from cryptography.hazmat.primitives import constant_time, serialization -from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey -from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey -from cryptography.hazmat.primitives.asymmetric.types import ( - CertificateIssuerPublicKeyTypes, - CertificatePublicKeyTypes, -) -from cryptography.x509.certificate_transparency import ( - SignedCertificateTimestamp, -) -from cryptography.x509.general_name import ( - DirectoryName, - DNSName, - GeneralName, - IPAddress, - OtherName, - RegisteredID, - RFC822Name, - UniformResourceIdentifier, - _IPAddressTypes, -) -from cryptography.x509.name import Name, RelativeDistinguishedName -from cryptography.x509.oid import ( - CRLEntryExtensionOID, - ExtensionOID, - ObjectIdentifier, - OCSPExtensionOID, -) - -ExtensionTypeVar = typing.TypeVar( - "ExtensionTypeVar", bound="ExtensionType", covariant=True -) - - -def _key_identifier_from_public_key( - public_key: CertificatePublicKeyTypes, -) -> bytes: - if isinstance(public_key, RSAPublicKey): - data = public_key.public_bytes( - serialization.Encoding.DER, - serialization.PublicFormat.PKCS1, - ) - elif isinstance(public_key, EllipticCurvePublicKey): - data = public_key.public_bytes( - serialization.Encoding.X962, - serialization.PublicFormat.UncompressedPoint, - ) - else: - # This is a very slow way to do this. - serialized = public_key.public_bytes( - serialization.Encoding.DER, - serialization.PublicFormat.SubjectPublicKeyInfo, - ) - data = asn1.parse_spki_for_data(serialized) - - return hashlib.sha1(data).digest() - - -def _make_sequence_methods(field_name: str): - def len_method(self) -> int: - return len(getattr(self, field_name)) - - def iter_method(self): - return iter(getattr(self, field_name)) - - def getitem_method(self, idx): - return getattr(self, field_name)[idx] - - return len_method, iter_method, getitem_method - - -class DuplicateExtension(Exception): - def __init__(self, msg: str, oid: ObjectIdentifier) -> None: - super().__init__(msg) - self.oid = oid - - -class ExtensionNotFound(Exception): - def __init__(self, msg: str, oid: ObjectIdentifier) -> None: - super().__init__(msg) - self.oid = oid - - -class ExtensionType(metaclass=abc.ABCMeta): - oid: typing.ClassVar[ObjectIdentifier] - - def public_bytes(self) -> bytes: - """ - Serializes the extension type to DER. - """ - raise NotImplementedError( - f"public_bytes is not implemented for extension type {self!r}" - ) - - -class Extensions: - def __init__(self, extensions: Iterable[Extension[ExtensionType]]) -> None: - self._extensions = list(extensions) - - def get_extension_for_oid( - self, oid: ObjectIdentifier - ) -> Extension[ExtensionType]: - for ext in self: - if ext.oid == oid: - return ext - - raise ExtensionNotFound(f"No {oid} extension was found", oid) - - def get_extension_for_class( - self, extclass: type[ExtensionTypeVar] - ) -> Extension[ExtensionTypeVar]: - if extclass is UnrecognizedExtension: - raise TypeError( - "UnrecognizedExtension can't be used with " - "get_extension_for_class because more than one instance of the" - " class may be present." - ) - - for ext in self: - if isinstance(ext.value, extclass): - return ext - - raise ExtensionNotFound( - f"No {extclass} extension was found", extclass.oid - ) - - __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions") - - def __repr__(self) -> str: - return f"" - - -class CRLNumber(ExtensionType): - oid = ExtensionOID.CRL_NUMBER - - def __init__(self, crl_number: int) -> None: - if not isinstance(crl_number, int): - raise TypeError("crl_number must be an integer") - - self._crl_number = crl_number - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CRLNumber): - return NotImplemented - - return self.crl_number == other.crl_number - - def __hash__(self) -> int: - return hash(self.crl_number) - - def __repr__(self) -> str: - return f"" - - @property - def crl_number(self) -> int: - return self._crl_number - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class AuthorityKeyIdentifier(ExtensionType): - oid = ExtensionOID.AUTHORITY_KEY_IDENTIFIER - - def __init__( - self, - key_identifier: bytes | None, - authority_cert_issuer: Iterable[GeneralName] | None, - authority_cert_serial_number: int | None, - ) -> None: - if (authority_cert_issuer is None) != ( - authority_cert_serial_number is None - ): - raise ValueError( - "authority_cert_issuer and authority_cert_serial_number " - "must both be present or both None" - ) - - if authority_cert_issuer is not None: - authority_cert_issuer = list(authority_cert_issuer) - if not all( - isinstance(x, GeneralName) for x in authority_cert_issuer - ): - raise TypeError( - "authority_cert_issuer must be a list of GeneralName " - "objects" - ) - - if authority_cert_serial_number is not None and not isinstance( - authority_cert_serial_number, int - ): - raise TypeError("authority_cert_serial_number must be an integer") - - self._key_identifier = key_identifier - self._authority_cert_issuer = authority_cert_issuer - self._authority_cert_serial_number = authority_cert_serial_number - - # This takes a subset of CertificatePublicKeyTypes because an issuer - # cannot have an X25519/X448 key. This introduces some unfortunate - # asymmetry that requires typing users to explicitly - # narrow their type, but we should make this accurate and not just - # convenient. - @classmethod - def from_issuer_public_key( - cls, public_key: CertificateIssuerPublicKeyTypes - ) -> AuthorityKeyIdentifier: - digest = _key_identifier_from_public_key(public_key) - return cls( - key_identifier=digest, - authority_cert_issuer=None, - authority_cert_serial_number=None, - ) - - @classmethod - def from_issuer_subject_key_identifier( - cls, ski: SubjectKeyIdentifier - ) -> AuthorityKeyIdentifier: - return cls( - key_identifier=ski.digest, - authority_cert_issuer=None, - authority_cert_serial_number=None, - ) - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, AuthorityKeyIdentifier): - return NotImplemented - - return ( - self.key_identifier == other.key_identifier - and self.authority_cert_issuer == other.authority_cert_issuer - and self.authority_cert_serial_number - == other.authority_cert_serial_number - ) - - def __hash__(self) -> int: - if self.authority_cert_issuer is None: - aci = None - else: - aci = tuple(self.authority_cert_issuer) - return hash( - (self.key_identifier, aci, self.authority_cert_serial_number) - ) - - @property - def key_identifier(self) -> bytes | None: - return self._key_identifier - - @property - def authority_cert_issuer( - self, - ) -> list[GeneralName] | None: - return self._authority_cert_issuer - - @property - def authority_cert_serial_number(self) -> int | None: - return self._authority_cert_serial_number - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class SubjectKeyIdentifier(ExtensionType): - oid = ExtensionOID.SUBJECT_KEY_IDENTIFIER - - def __init__(self, digest: bytes) -> None: - self._digest = digest - - @classmethod - def from_public_key( - cls, public_key: CertificatePublicKeyTypes - ) -> SubjectKeyIdentifier: - return cls(_key_identifier_from_public_key(public_key)) - - @property - def digest(self) -> bytes: - return self._digest - - @property - def key_identifier(self) -> bytes: - return self._digest - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SubjectKeyIdentifier): - return NotImplemented - - return constant_time.bytes_eq(self.digest, other.digest) - - def __hash__(self) -> int: - return hash(self.digest) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class AuthorityInformationAccess(ExtensionType): - oid = ExtensionOID.AUTHORITY_INFORMATION_ACCESS - - def __init__(self, descriptions: Iterable[AccessDescription]) -> None: - descriptions = list(descriptions) - if not all(isinstance(x, AccessDescription) for x in descriptions): - raise TypeError( - "Every item in the descriptions list must be an " - "AccessDescription" - ) - - self._descriptions = descriptions - - __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, AuthorityInformationAccess): - return NotImplemented - - return self._descriptions == other._descriptions - - def __hash__(self) -> int: - return hash(tuple(self._descriptions)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class SubjectInformationAccess(ExtensionType): - oid = ExtensionOID.SUBJECT_INFORMATION_ACCESS - - def __init__(self, descriptions: Iterable[AccessDescription]) -> None: - descriptions = list(descriptions) - if not all(isinstance(x, AccessDescription) for x in descriptions): - raise TypeError( - "Every item in the descriptions list must be an " - "AccessDescription" - ) - - self._descriptions = descriptions - - __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SubjectInformationAccess): - return NotImplemented - - return self._descriptions == other._descriptions - - def __hash__(self) -> int: - return hash(tuple(self._descriptions)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class AccessDescription: - def __init__( - self, access_method: ObjectIdentifier, access_location: GeneralName - ) -> None: - if not isinstance(access_method, ObjectIdentifier): - raise TypeError("access_method must be an ObjectIdentifier") - - if not isinstance(access_location, GeneralName): - raise TypeError("access_location must be a GeneralName") - - self._access_method = access_method - self._access_location = access_location - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, AccessDescription): - return NotImplemented - - return ( - self.access_method == other.access_method - and self.access_location == other.access_location - ) - - def __hash__(self) -> int: - return hash((self.access_method, self.access_location)) - - @property - def access_method(self) -> ObjectIdentifier: - return self._access_method - - @property - def access_location(self) -> GeneralName: - return self._access_location - - -class BasicConstraints(ExtensionType): - oid = ExtensionOID.BASIC_CONSTRAINTS - - def __init__(self, ca: bool, path_length: int | None) -> None: - if not isinstance(ca, bool): - raise TypeError("ca must be a boolean value") - - if path_length is not None and not ca: - raise ValueError("path_length must be None when ca is False") - - if path_length is not None and ( - not isinstance(path_length, int) or path_length < 0 - ): - raise TypeError( - "path_length must be a non-negative integer or None" - ) - - self._ca = ca - self._path_length = path_length - - @property - def ca(self) -> bool: - return self._ca - - @property - def path_length(self) -> int | None: - return self._path_length - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, BasicConstraints): - return NotImplemented - - return self.ca == other.ca and self.path_length == other.path_length - - def __hash__(self) -> int: - return hash((self.ca, self.path_length)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class DeltaCRLIndicator(ExtensionType): - oid = ExtensionOID.DELTA_CRL_INDICATOR - - def __init__(self, crl_number: int) -> None: - if not isinstance(crl_number, int): - raise TypeError("crl_number must be an integer") - - self._crl_number = crl_number - - @property - def crl_number(self) -> int: - return self._crl_number - - def __eq__(self, other: object) -> bool: - if not isinstance(other, DeltaCRLIndicator): - return NotImplemented - - return self.crl_number == other.crl_number - - def __hash__(self) -> int: - return hash(self.crl_number) - - def __repr__(self) -> str: - return f"" - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class CRLDistributionPoints(ExtensionType): - oid = ExtensionOID.CRL_DISTRIBUTION_POINTS - - def __init__( - self, distribution_points: Iterable[DistributionPoint] - ) -> None: - distribution_points = list(distribution_points) - if not all( - isinstance(x, DistributionPoint) for x in distribution_points - ): - raise TypeError( - "distribution_points must be a list of DistributionPoint " - "objects" - ) - - self._distribution_points = distribution_points - - __len__, __iter__, __getitem__ = _make_sequence_methods( - "_distribution_points" - ) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CRLDistributionPoints): - return NotImplemented - - return self._distribution_points == other._distribution_points - - def __hash__(self) -> int: - return hash(tuple(self._distribution_points)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class FreshestCRL(ExtensionType): - oid = ExtensionOID.FRESHEST_CRL - - def __init__( - self, distribution_points: Iterable[DistributionPoint] - ) -> None: - distribution_points = list(distribution_points) - if not all( - isinstance(x, DistributionPoint) for x in distribution_points - ): - raise TypeError( - "distribution_points must be a list of DistributionPoint " - "objects" - ) - - self._distribution_points = distribution_points - - __len__, __iter__, __getitem__ = _make_sequence_methods( - "_distribution_points" - ) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, FreshestCRL): - return NotImplemented - - return self._distribution_points == other._distribution_points - - def __hash__(self) -> int: - return hash(tuple(self._distribution_points)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class DistributionPoint: - def __init__( - self, - full_name: Iterable[GeneralName] | None, - relative_name: RelativeDistinguishedName | None, - reasons: frozenset[ReasonFlags] | None, - crl_issuer: Iterable[GeneralName] | None, - ) -> None: - if full_name and relative_name: - raise ValueError( - "You cannot provide both full_name and relative_name, at " - "least one must be None." - ) - if not full_name and not relative_name and not crl_issuer: - raise ValueError( - "Either full_name, relative_name or crl_issuer must be " - "provided." - ) - - if full_name is not None: - full_name = list(full_name) - if not all(isinstance(x, GeneralName) for x in full_name): - raise TypeError( - "full_name must be a list of GeneralName objects" - ) - - if relative_name: - if not isinstance(relative_name, RelativeDistinguishedName): - raise TypeError( - "relative_name must be a RelativeDistinguishedName" - ) - - if crl_issuer is not None: - crl_issuer = list(crl_issuer) - if not all(isinstance(x, GeneralName) for x in crl_issuer): - raise TypeError( - "crl_issuer must be None or a list of general names" - ) - - if reasons and ( - not isinstance(reasons, frozenset) - or not all(isinstance(x, ReasonFlags) for x in reasons) - ): - raise TypeError("reasons must be None or frozenset of ReasonFlags") - - if reasons and ( - ReasonFlags.unspecified in reasons - or ReasonFlags.remove_from_crl in reasons - ): - raise ValueError( - "unspecified and remove_from_crl are not valid reasons in a " - "DistributionPoint" - ) - - self._full_name = full_name - self._relative_name = relative_name - self._reasons = reasons - self._crl_issuer = crl_issuer - - def __repr__(self) -> str: - return ( - "".format(self) - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, DistributionPoint): - return NotImplemented - - return ( - self.full_name == other.full_name - and self.relative_name == other.relative_name - and self.reasons == other.reasons - and self.crl_issuer == other.crl_issuer - ) - - def __hash__(self) -> int: - if self.full_name is not None: - fn: tuple[GeneralName, ...] | None = tuple(self.full_name) - else: - fn = None - - if self.crl_issuer is not None: - crl_issuer: tuple[GeneralName, ...] | None = tuple(self.crl_issuer) - else: - crl_issuer = None - - return hash((fn, self.relative_name, self.reasons, crl_issuer)) - - @property - def full_name(self) -> list[GeneralName] | None: - return self._full_name - - @property - def relative_name(self) -> RelativeDistinguishedName | None: - return self._relative_name - - @property - def reasons(self) -> frozenset[ReasonFlags] | None: - return self._reasons - - @property - def crl_issuer(self) -> list[GeneralName] | None: - return self._crl_issuer - - -class ReasonFlags(utils.Enum): - unspecified = "unspecified" - key_compromise = "keyCompromise" - ca_compromise = "cACompromise" - affiliation_changed = "affiliationChanged" - superseded = "superseded" - cessation_of_operation = "cessationOfOperation" - certificate_hold = "certificateHold" - privilege_withdrawn = "privilegeWithdrawn" - aa_compromise = "aACompromise" - remove_from_crl = "removeFromCRL" - - -# These are distribution point bit string mappings. Not to be confused with -# CRLReason reason flags bit string mappings. -# ReasonFlags ::= BIT STRING { -# unused (0), -# keyCompromise (1), -# cACompromise (2), -# affiliationChanged (3), -# superseded (4), -# cessationOfOperation (5), -# certificateHold (6), -# privilegeWithdrawn (7), -# aACompromise (8) } -_REASON_BIT_MAPPING = { - 1: ReasonFlags.key_compromise, - 2: ReasonFlags.ca_compromise, - 3: ReasonFlags.affiliation_changed, - 4: ReasonFlags.superseded, - 5: ReasonFlags.cessation_of_operation, - 6: ReasonFlags.certificate_hold, - 7: ReasonFlags.privilege_withdrawn, - 8: ReasonFlags.aa_compromise, -} - -_CRLREASONFLAGS = { - ReasonFlags.key_compromise: 1, - ReasonFlags.ca_compromise: 2, - ReasonFlags.affiliation_changed: 3, - ReasonFlags.superseded: 4, - ReasonFlags.cessation_of_operation: 5, - ReasonFlags.certificate_hold: 6, - ReasonFlags.privilege_withdrawn: 7, - ReasonFlags.aa_compromise: 8, -} - -# CRLReason ::= ENUMERATED { -# unspecified (0), -# keyCompromise (1), -# cACompromise (2), -# affiliationChanged (3), -# superseded (4), -# cessationOfOperation (5), -# certificateHold (6), -# -- value 7 is not used -# removeFromCRL (8), -# privilegeWithdrawn (9), -# aACompromise (10) } -_CRL_ENTRY_REASON_ENUM_TO_CODE = { - ReasonFlags.unspecified: 0, - ReasonFlags.key_compromise: 1, - ReasonFlags.ca_compromise: 2, - ReasonFlags.affiliation_changed: 3, - ReasonFlags.superseded: 4, - ReasonFlags.cessation_of_operation: 5, - ReasonFlags.certificate_hold: 6, - ReasonFlags.remove_from_crl: 8, - ReasonFlags.privilege_withdrawn: 9, - ReasonFlags.aa_compromise: 10, -} - - -class PolicyConstraints(ExtensionType): - oid = ExtensionOID.POLICY_CONSTRAINTS - - def __init__( - self, - require_explicit_policy: int | None, - inhibit_policy_mapping: int | None, - ) -> None: - if require_explicit_policy is not None and not isinstance( - require_explicit_policy, int - ): - raise TypeError( - "require_explicit_policy must be a non-negative integer or " - "None" - ) - - if inhibit_policy_mapping is not None and not isinstance( - inhibit_policy_mapping, int - ): - raise TypeError( - "inhibit_policy_mapping must be a non-negative integer or None" - ) - - if inhibit_policy_mapping is None and require_explicit_policy is None: - raise ValueError( - "At least one of require_explicit_policy and " - "inhibit_policy_mapping must not be None" - ) - - self._require_explicit_policy = require_explicit_policy - self._inhibit_policy_mapping = inhibit_policy_mapping - - def __repr__(self) -> str: - return ( - "".format(self) - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PolicyConstraints): - return NotImplemented - - return ( - self.require_explicit_policy == other.require_explicit_policy - and self.inhibit_policy_mapping == other.inhibit_policy_mapping - ) - - def __hash__(self) -> int: - return hash( - (self.require_explicit_policy, self.inhibit_policy_mapping) - ) - - @property - def require_explicit_policy(self) -> int | None: - return self._require_explicit_policy - - @property - def inhibit_policy_mapping(self) -> int | None: - return self._inhibit_policy_mapping - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class CertificatePolicies(ExtensionType): - oid = ExtensionOID.CERTIFICATE_POLICIES - - def __init__(self, policies: Iterable[PolicyInformation]) -> None: - policies = list(policies) - if not all(isinstance(x, PolicyInformation) for x in policies): - raise TypeError( - "Every item in the policies list must be a PolicyInformation" - ) - - self._policies = policies - - __len__, __iter__, __getitem__ = _make_sequence_methods("_policies") - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CertificatePolicies): - return NotImplemented - - return self._policies == other._policies - - def __hash__(self) -> int: - return hash(tuple(self._policies)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class PolicyInformation: - def __init__( - self, - policy_identifier: ObjectIdentifier, - policy_qualifiers: Iterable[str | UserNotice] | None, - ) -> None: - if not isinstance(policy_identifier, ObjectIdentifier): - raise TypeError("policy_identifier must be an ObjectIdentifier") - - self._policy_identifier = policy_identifier - - if policy_qualifiers is not None: - policy_qualifiers = list(policy_qualifiers) - if not all( - isinstance(x, (str, UserNotice)) for x in policy_qualifiers - ): - raise TypeError( - "policy_qualifiers must be a list of strings and/or " - "UserNotice objects or None" - ) - - self._policy_qualifiers = policy_qualifiers - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PolicyInformation): - return NotImplemented - - return ( - self.policy_identifier == other.policy_identifier - and self.policy_qualifiers == other.policy_qualifiers - ) - - def __hash__(self) -> int: - if self.policy_qualifiers is not None: - pq = tuple(self.policy_qualifiers) - else: - pq = None - - return hash((self.policy_identifier, pq)) - - @property - def policy_identifier(self) -> ObjectIdentifier: - return self._policy_identifier - - @property - def policy_qualifiers( - self, - ) -> list[str | UserNotice] | None: - return self._policy_qualifiers - - -class UserNotice: - def __init__( - self, - notice_reference: NoticeReference | None, - explicit_text: str | None, - ) -> None: - if notice_reference and not isinstance( - notice_reference, NoticeReference - ): - raise TypeError( - "notice_reference must be None or a NoticeReference" - ) - - self._notice_reference = notice_reference - self._explicit_text = explicit_text - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, UserNotice): - return NotImplemented - - return ( - self.notice_reference == other.notice_reference - and self.explicit_text == other.explicit_text - ) - - def __hash__(self) -> int: - return hash((self.notice_reference, self.explicit_text)) - - @property - def notice_reference(self) -> NoticeReference | None: - return self._notice_reference - - @property - def explicit_text(self) -> str | None: - return self._explicit_text - - -class NoticeReference: - def __init__( - self, - organization: str | None, - notice_numbers: Iterable[int], - ) -> None: - self._organization = organization - notice_numbers = list(notice_numbers) - if not all(isinstance(x, int) for x in notice_numbers): - raise TypeError("notice_numbers must be a list of integers") - - self._notice_numbers = notice_numbers - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, NoticeReference): - return NotImplemented - - return ( - self.organization == other.organization - and self.notice_numbers == other.notice_numbers - ) - - def __hash__(self) -> int: - return hash((self.organization, tuple(self.notice_numbers))) - - @property - def organization(self) -> str | None: - return self._organization - - @property - def notice_numbers(self) -> list[int]: - return self._notice_numbers - - -class ExtendedKeyUsage(ExtensionType): - oid = ExtensionOID.EXTENDED_KEY_USAGE - - def __init__(self, usages: Iterable[ObjectIdentifier]) -> None: - usages = list(usages) - if not all(isinstance(x, ObjectIdentifier) for x in usages): - raise TypeError( - "Every item in the usages list must be an ObjectIdentifier" - ) - - self._usages = usages - - __len__, __iter__, __getitem__ = _make_sequence_methods("_usages") - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, ExtendedKeyUsage): - return NotImplemented - - return self._usages == other._usages - - def __hash__(self) -> int: - return hash(tuple(self._usages)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class OCSPNoCheck(ExtensionType): - oid = ExtensionOID.OCSP_NO_CHECK - - def __eq__(self, other: object) -> bool: - if not isinstance(other, OCSPNoCheck): - return NotImplemented - - return True - - def __hash__(self) -> int: - return hash(OCSPNoCheck) - - def __repr__(self) -> str: - return "" - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class PrecertPoison(ExtensionType): - oid = ExtensionOID.PRECERT_POISON - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PrecertPoison): - return NotImplemented - - return True - - def __hash__(self) -> int: - return hash(PrecertPoison) - - def __repr__(self) -> str: - return "" - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class TLSFeature(ExtensionType): - oid = ExtensionOID.TLS_FEATURE - - def __init__(self, features: Iterable[TLSFeatureType]) -> None: - features = list(features) - if ( - not all(isinstance(x, TLSFeatureType) for x in features) - or len(features) == 0 - ): - raise TypeError( - "features must be a list of elements from the TLSFeatureType " - "enum" - ) - - self._features = features - - __len__, __iter__, __getitem__ = _make_sequence_methods("_features") - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, TLSFeature): - return NotImplemented - - return self._features == other._features - - def __hash__(self) -> int: - return hash(tuple(self._features)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class TLSFeatureType(utils.Enum): - # status_request is defined in RFC 6066 and is used for what is commonly - # called OCSP Must-Staple when present in the TLS Feature extension in an - # X.509 certificate. - status_request = 5 - # status_request_v2 is defined in RFC 6961 and allows multiple OCSP - # responses to be provided. It is not currently in use by clients or - # servers. - status_request_v2 = 17 - - -_TLS_FEATURE_TYPE_TO_ENUM = {x.value: x for x in TLSFeatureType} - - -class InhibitAnyPolicy(ExtensionType): - oid = ExtensionOID.INHIBIT_ANY_POLICY - - def __init__(self, skip_certs: int) -> None: - if not isinstance(skip_certs, int): - raise TypeError("skip_certs must be an integer") - - if skip_certs < 0: - raise ValueError("skip_certs must be a non-negative integer") - - self._skip_certs = skip_certs - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, InhibitAnyPolicy): - return NotImplemented - - return self.skip_certs == other.skip_certs - - def __hash__(self) -> int: - return hash(self.skip_certs) - - @property - def skip_certs(self) -> int: - return self._skip_certs - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class KeyUsage(ExtensionType): - oid = ExtensionOID.KEY_USAGE - - def __init__( - self, - digital_signature: bool, - content_commitment: bool, - key_encipherment: bool, - data_encipherment: bool, - key_agreement: bool, - key_cert_sign: bool, - crl_sign: bool, - encipher_only: bool, - decipher_only: bool, - ) -> None: - if not key_agreement and (encipher_only or decipher_only): - raise ValueError( - "encipher_only and decipher_only can only be true when " - "key_agreement is true" - ) - - self._digital_signature = digital_signature - self._content_commitment = content_commitment - self._key_encipherment = key_encipherment - self._data_encipherment = data_encipherment - self._key_agreement = key_agreement - self._key_cert_sign = key_cert_sign - self._crl_sign = crl_sign - self._encipher_only = encipher_only - self._decipher_only = decipher_only - - @property - def digital_signature(self) -> bool: - return self._digital_signature - - @property - def content_commitment(self) -> bool: - return self._content_commitment - - @property - def key_encipherment(self) -> bool: - return self._key_encipherment - - @property - def data_encipherment(self) -> bool: - return self._data_encipherment - - @property - def key_agreement(self) -> bool: - return self._key_agreement - - @property - def key_cert_sign(self) -> bool: - return self._key_cert_sign - - @property - def crl_sign(self) -> bool: - return self._crl_sign - - @property - def encipher_only(self) -> bool: - if not self.key_agreement: - raise ValueError( - "encipher_only is undefined unless key_agreement is true" - ) - else: - return self._encipher_only - - @property - def decipher_only(self) -> bool: - if not self.key_agreement: - raise ValueError( - "decipher_only is undefined unless key_agreement is true" - ) - else: - return self._decipher_only - - def __repr__(self) -> str: - try: - encipher_only = self.encipher_only - decipher_only = self.decipher_only - except ValueError: - # Users found None confusing because even though encipher/decipher - # have no meaning unless key_agreement is true, to construct an - # instance of the class you still need to pass False. - encipher_only = False - decipher_only = False - - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, KeyUsage): - return NotImplemented - - return ( - self.digital_signature == other.digital_signature - and self.content_commitment == other.content_commitment - and self.key_encipherment == other.key_encipherment - and self.data_encipherment == other.data_encipherment - and self.key_agreement == other.key_agreement - and self.key_cert_sign == other.key_cert_sign - and self.crl_sign == other.crl_sign - and self._encipher_only == other._encipher_only - and self._decipher_only == other._decipher_only - ) - - def __hash__(self) -> int: - return hash( - ( - self.digital_signature, - self.content_commitment, - self.key_encipherment, - self.data_encipherment, - self.key_agreement, - self.key_cert_sign, - self.crl_sign, - self._encipher_only, - self._decipher_only, - ) - ) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class PrivateKeyUsagePeriod(ExtensionType): - oid = ExtensionOID.PRIVATE_KEY_USAGE_PERIOD - - def __init__( - self, - not_before: datetime.datetime | None, - not_after: datetime.datetime | None, - ) -> None: - if ( - not isinstance(not_before, datetime.datetime) - and not_before is not None - ): - raise TypeError("not_before must be a datetime.datetime or None") - - if ( - not isinstance(not_after, datetime.datetime) - and not_after is not None - ): - raise TypeError("not_after must be a datetime.datetime or None") - - if not_before is None and not_after is None: - raise ValueError( - "At least one of not_before and not_after must not be None" - ) - - if ( - not_before is not None - and not_after is not None - and not_before > not_after - ): - raise ValueError("not_before must be before not_after") - - self._not_before = not_before - self._not_after = not_after - - @property - def not_before(self) -> datetime.datetime | None: - return self._not_before - - @property - def not_after(self) -> datetime.datetime | None: - return self._not_after - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PrivateKeyUsagePeriod): - return NotImplemented - - return ( - self.not_before == other.not_before - and self.not_after == other.not_after - ) - - def __hash__(self) -> int: - return hash((self.not_before, self.not_after)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class NameConstraints(ExtensionType): - oid = ExtensionOID.NAME_CONSTRAINTS - - def __init__( - self, - permitted_subtrees: Iterable[GeneralName] | None, - excluded_subtrees: Iterable[GeneralName] | None, - ) -> None: - if permitted_subtrees is not None: - permitted_subtrees = list(permitted_subtrees) - if not permitted_subtrees: - raise ValueError( - "permitted_subtrees must be a non-empty list or None" - ) - if not all(isinstance(x, GeneralName) for x in permitted_subtrees): - raise TypeError( - "permitted_subtrees must be a list of GeneralName objects " - "or None" - ) - - self._validate_tree(permitted_subtrees) - - if excluded_subtrees is not None: - excluded_subtrees = list(excluded_subtrees) - if not excluded_subtrees: - raise ValueError( - "excluded_subtrees must be a non-empty list or None" - ) - if not all(isinstance(x, GeneralName) for x in excluded_subtrees): - raise TypeError( - "excluded_subtrees must be a list of GeneralName objects " - "or None" - ) - - self._validate_tree(excluded_subtrees) - - if permitted_subtrees is None and excluded_subtrees is None: - raise ValueError( - "At least one of permitted_subtrees and excluded_subtrees " - "must not be None" - ) - - self._permitted_subtrees = permitted_subtrees - self._excluded_subtrees = excluded_subtrees - - def __eq__(self, other: object) -> bool: - if not isinstance(other, NameConstraints): - return NotImplemented - - return ( - self.excluded_subtrees == other.excluded_subtrees - and self.permitted_subtrees == other.permitted_subtrees - ) - - def _validate_tree(self, tree: Iterable[GeneralName]) -> None: - self._validate_ip_name(tree) - self._validate_dns_name(tree) - - def _validate_ip_name(self, tree: Iterable[GeneralName]) -> None: - if any( - isinstance(name, IPAddress) - and not isinstance( - name.value, (ipaddress.IPv4Network, ipaddress.IPv6Network) - ) - for name in tree - ): - raise TypeError( - "IPAddress name constraints must be an IPv4Network or" - " IPv6Network object" - ) - - def _validate_dns_name(self, tree: Iterable[GeneralName]) -> None: - if any( - isinstance(name, DNSName) and "*" in name.value for name in tree - ): - raise ValueError( - "DNSName name constraints must not contain the '*' wildcard" - " character" - ) - - def __repr__(self) -> str: - return ( - f"" - ) - - def __hash__(self) -> int: - if self.permitted_subtrees is not None: - ps: tuple[GeneralName, ...] | None = tuple(self.permitted_subtrees) - else: - ps = None - - if self.excluded_subtrees is not None: - es: tuple[GeneralName, ...] | None = tuple(self.excluded_subtrees) - else: - es = None - - return hash((ps, es)) - - @property - def permitted_subtrees( - self, - ) -> list[GeneralName] | None: - return self._permitted_subtrees - - @property - def excluded_subtrees( - self, - ) -> list[GeneralName] | None: - return self._excluded_subtrees - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class Extension(typing.Generic[ExtensionTypeVar]): - def __init__( - self, oid: ObjectIdentifier, critical: bool, value: ExtensionTypeVar - ) -> None: - if not isinstance(oid, ObjectIdentifier): - raise TypeError( - "oid argument must be an ObjectIdentifier instance." - ) - - if not isinstance(critical, bool): - raise TypeError("critical must be a boolean value") - - self._oid = oid - self._critical = critical - self._value = value - - @property - def oid(self) -> ObjectIdentifier: - return self._oid - - @property - def critical(self) -> bool: - return self._critical - - @property - def value(self) -> ExtensionTypeVar: - return self._value - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Extension): - return NotImplemented - - return ( - self.oid == other.oid - and self.critical == other.critical - and self.value == other.value - ) - - def __hash__(self) -> int: - return hash((self.oid, self.critical, self.value)) - - -class GeneralNames: - def __init__(self, general_names: Iterable[GeneralName]) -> None: - general_names = list(general_names) - if not all(isinstance(x, GeneralName) for x in general_names): - raise TypeError( - "Every item in the general_names list must be an " - "object conforming to the GeneralName interface" - ) - - self._general_names = general_names - - __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") - - @typing.overload - def get_values_for_type( - self, - type: type[DNSName] - | type[UniformResourceIdentifier] - | type[RFC822Name], - ) -> list[str]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[DirectoryName], - ) -> list[Name]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[RegisteredID], - ) -> list[ObjectIdentifier]: ... - - @typing.overload - def get_values_for_type( - self, type: type[IPAddress] - ) -> list[_IPAddressTypes]: ... - - @typing.overload - def get_values_for_type( - self, type: type[OtherName] - ) -> list[OtherName]: ... - - def get_values_for_type( - self, - type: type[DNSName] - | type[DirectoryName] - | type[IPAddress] - | type[OtherName] - | type[RFC822Name] - | type[RegisteredID] - | type[UniformResourceIdentifier], - ) -> ( - list[_IPAddressTypes] - | list[str] - | list[OtherName] - | list[Name] - | list[ObjectIdentifier] - ): - # Return the value of each GeneralName, except for OtherName instances - # which we return directly because it has two important properties not - # just one value. - objs = (i for i in self if isinstance(i, type)) - if type != OtherName: - return [i.value for i in objs] - return list(objs) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, GeneralNames): - return NotImplemented - - return self._general_names == other._general_names - - def __hash__(self) -> int: - return hash(tuple(self._general_names)) - - -class SubjectAlternativeName(ExtensionType): - oid = ExtensionOID.SUBJECT_ALTERNATIVE_NAME - - def __init__(self, general_names: Iterable[GeneralName]) -> None: - self._general_names = GeneralNames(general_names) - - __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") - - @typing.overload - def get_values_for_type( - self, - type: type[DNSName] - | type[UniformResourceIdentifier] - | type[RFC822Name], - ) -> list[str]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[DirectoryName], - ) -> list[Name]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[RegisteredID], - ) -> list[ObjectIdentifier]: ... - - @typing.overload - def get_values_for_type( - self, type: type[IPAddress] - ) -> list[_IPAddressTypes]: ... - - @typing.overload - def get_values_for_type( - self, type: type[OtherName] - ) -> list[OtherName]: ... - - def get_values_for_type( - self, - type: type[DNSName] - | type[DirectoryName] - | type[IPAddress] - | type[OtherName] - | type[RFC822Name] - | type[RegisteredID] - | type[UniformResourceIdentifier], - ) -> ( - list[_IPAddressTypes] - | list[str] - | list[OtherName] - | list[Name] - | list[ObjectIdentifier] - ): - return self._general_names.get_values_for_type(type) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SubjectAlternativeName): - return NotImplemented - - return self._general_names == other._general_names - - def __hash__(self) -> int: - return hash(self._general_names) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class IssuerAlternativeName(ExtensionType): - oid = ExtensionOID.ISSUER_ALTERNATIVE_NAME - - def __init__(self, general_names: Iterable[GeneralName]) -> None: - self._general_names = GeneralNames(general_names) - - __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") - - @typing.overload - def get_values_for_type( - self, - type: type[DNSName] - | type[UniformResourceIdentifier] - | type[RFC822Name], - ) -> list[str]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[DirectoryName], - ) -> list[Name]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[RegisteredID], - ) -> list[ObjectIdentifier]: ... - - @typing.overload - def get_values_for_type( - self, type: type[IPAddress] - ) -> list[_IPAddressTypes]: ... - - @typing.overload - def get_values_for_type( - self, type: type[OtherName] - ) -> list[OtherName]: ... - - def get_values_for_type( - self, - type: type[DNSName] - | type[DirectoryName] - | type[IPAddress] - | type[OtherName] - | type[RFC822Name] - | type[RegisteredID] - | type[UniformResourceIdentifier], - ) -> ( - list[_IPAddressTypes] - | list[str] - | list[OtherName] - | list[Name] - | list[ObjectIdentifier] - ): - return self._general_names.get_values_for_type(type) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, IssuerAlternativeName): - return NotImplemented - - return self._general_names == other._general_names - - def __hash__(self) -> int: - return hash(self._general_names) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class CertificateIssuer(ExtensionType): - oid = CRLEntryExtensionOID.CERTIFICATE_ISSUER - - def __init__(self, general_names: Iterable[GeneralName]) -> None: - self._general_names = GeneralNames(general_names) - - __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") - - @typing.overload - def get_values_for_type( - self, - type: type[DNSName] - | type[UniformResourceIdentifier] - | type[RFC822Name], - ) -> list[str]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[DirectoryName], - ) -> list[Name]: ... - - @typing.overload - def get_values_for_type( - self, - type: type[RegisteredID], - ) -> list[ObjectIdentifier]: ... - - @typing.overload - def get_values_for_type( - self, type: type[IPAddress] - ) -> list[_IPAddressTypes]: ... - - @typing.overload - def get_values_for_type( - self, type: type[OtherName] - ) -> list[OtherName]: ... - - def get_values_for_type( - self, - type: type[DNSName] - | type[DirectoryName] - | type[IPAddress] - | type[OtherName] - | type[RFC822Name] - | type[RegisteredID] - | type[UniformResourceIdentifier], - ) -> ( - list[_IPAddressTypes] - | list[str] - | list[OtherName] - | list[Name] - | list[ObjectIdentifier] - ): - return self._general_names.get_values_for_type(type) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CertificateIssuer): - return NotImplemented - - return self._general_names == other._general_names - - def __hash__(self) -> int: - return hash(self._general_names) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class CRLReason(ExtensionType): - oid = CRLEntryExtensionOID.CRL_REASON - - def __init__(self, reason: ReasonFlags) -> None: - if not isinstance(reason, ReasonFlags): - raise TypeError("reason must be an element from ReasonFlags") - - self._reason = reason - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, CRLReason): - return NotImplemented - - return self.reason == other.reason - - def __hash__(self) -> int: - return hash(self.reason) - - @property - def reason(self) -> ReasonFlags: - return self._reason - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class InvalidityDate(ExtensionType): - oid = CRLEntryExtensionOID.INVALIDITY_DATE - - def __init__(self, invalidity_date: datetime.datetime) -> None: - if not isinstance(invalidity_date, datetime.datetime): - raise TypeError("invalidity_date must be a datetime.datetime") - - self._invalidity_date = invalidity_date - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, InvalidityDate): - return NotImplemented - - return self.invalidity_date == other.invalidity_date - - def __hash__(self) -> int: - return hash(self.invalidity_date) - - @property - def invalidity_date(self) -> datetime.datetime: - return self._invalidity_date - - @property - def invalidity_date_utc(self) -> datetime.datetime: - if self._invalidity_date.tzinfo is None: - return self._invalidity_date.replace(tzinfo=datetime.timezone.utc) - else: - return self._invalidity_date.astimezone(tz=datetime.timezone.utc) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class PrecertificateSignedCertificateTimestamps(ExtensionType): - oid = ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS - - def __init__( - self, - signed_certificate_timestamps: Iterable[SignedCertificateTimestamp], - ) -> None: - signed_certificate_timestamps = list(signed_certificate_timestamps) - if not all( - isinstance(sct, SignedCertificateTimestamp) - for sct in signed_certificate_timestamps - ): - raise TypeError( - "Every item in the signed_certificate_timestamps list must be " - "a SignedCertificateTimestamp" - ) - self._signed_certificate_timestamps = signed_certificate_timestamps - - __len__, __iter__, __getitem__ = _make_sequence_methods( - "_signed_certificate_timestamps" - ) - - def __repr__(self) -> str: - return f"" - - def __hash__(self) -> int: - return hash(tuple(self._signed_certificate_timestamps)) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PrecertificateSignedCertificateTimestamps): - return NotImplemented - - return ( - self._signed_certificate_timestamps - == other._signed_certificate_timestamps - ) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class SignedCertificateTimestamps(ExtensionType): - oid = ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS - - def __init__( - self, - signed_certificate_timestamps: Iterable[SignedCertificateTimestamp], - ) -> None: - signed_certificate_timestamps = list(signed_certificate_timestamps) - if not all( - isinstance(sct, SignedCertificateTimestamp) - for sct in signed_certificate_timestamps - ): - raise TypeError( - "Every item in the signed_certificate_timestamps list must be " - "a SignedCertificateTimestamp" - ) - self._signed_certificate_timestamps = signed_certificate_timestamps - - __len__, __iter__, __getitem__ = _make_sequence_methods( - "_signed_certificate_timestamps" - ) - - def __repr__(self) -> str: - return f"" - - def __hash__(self) -> int: - return hash(tuple(self._signed_certificate_timestamps)) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SignedCertificateTimestamps): - return NotImplemented - - return ( - self._signed_certificate_timestamps - == other._signed_certificate_timestamps - ) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class OCSPNonce(ExtensionType): - oid = OCSPExtensionOID.NONCE - - def __init__(self, nonce: bytes) -> None: - if not isinstance(nonce, bytes): - raise TypeError("nonce must be bytes") - - self._nonce = nonce - - def __eq__(self, other: object) -> bool: - if not isinstance(other, OCSPNonce): - return NotImplemented - - return self.nonce == other.nonce - - def __hash__(self) -> int: - return hash(self.nonce) - - def __repr__(self) -> str: - return f"" - - @property - def nonce(self) -> bytes: - return self._nonce - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class OCSPAcceptableResponses(ExtensionType): - oid = OCSPExtensionOID.ACCEPTABLE_RESPONSES - - def __init__(self, responses: Iterable[ObjectIdentifier]) -> None: - responses = list(responses) - if any(not isinstance(r, ObjectIdentifier) for r in responses): - raise TypeError("All responses must be ObjectIdentifiers") - - self._responses = responses - - def __eq__(self, other: object) -> bool: - if not isinstance(other, OCSPAcceptableResponses): - return NotImplemented - - return self._responses == other._responses - - def __hash__(self) -> int: - return hash(tuple(self._responses)) - - def __repr__(self) -> str: - return f"" - - def __iter__(self) -> Iterator[ObjectIdentifier]: - return iter(self._responses) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class IssuingDistributionPoint(ExtensionType): - oid = ExtensionOID.ISSUING_DISTRIBUTION_POINT - - def __init__( - self, - full_name: Iterable[GeneralName] | None, - relative_name: RelativeDistinguishedName | None, - only_contains_user_certs: bool, - only_contains_ca_certs: bool, - only_some_reasons: frozenset[ReasonFlags] | None, - indirect_crl: bool, - only_contains_attribute_certs: bool, - ) -> None: - if full_name is not None: - full_name = list(full_name) - - if only_some_reasons and ( - not isinstance(only_some_reasons, frozenset) - or not all(isinstance(x, ReasonFlags) for x in only_some_reasons) - ): - raise TypeError( - "only_some_reasons must be None or frozenset of ReasonFlags" - ) - - if only_some_reasons and ( - ReasonFlags.unspecified in only_some_reasons - or ReasonFlags.remove_from_crl in only_some_reasons - ): - raise ValueError( - "unspecified and remove_from_crl are not valid reasons in an " - "IssuingDistributionPoint" - ) - - if not ( - isinstance(only_contains_user_certs, bool) - and isinstance(only_contains_ca_certs, bool) - and isinstance(indirect_crl, bool) - and isinstance(only_contains_attribute_certs, bool) - ): - raise TypeError( - "only_contains_user_certs, only_contains_ca_certs, " - "indirect_crl and only_contains_attribute_certs " - "must all be boolean." - ) - - # Per RFC5280 Section 5.2.5, the Issuing Distribution Point extension - # in a CRL can have only one of onlyContainsUserCerts, - # onlyContainsCACerts, onlyContainsAttributeCerts set to TRUE. - crl_constraints = [ - only_contains_user_certs, - only_contains_ca_certs, - only_contains_attribute_certs, - ] - - if len([x for x in crl_constraints if x]) > 1: - raise ValueError( - "Only one of the following can be set to True: " - "only_contains_user_certs, only_contains_ca_certs, " - "only_contains_attribute_certs" - ) - - if not any( - [ - only_contains_user_certs, - only_contains_ca_certs, - indirect_crl, - only_contains_attribute_certs, - full_name, - relative_name, - only_some_reasons, - ] - ): - raise ValueError( - "Cannot create empty extension: " - "if only_contains_user_certs, only_contains_ca_certs, " - "indirect_crl, and only_contains_attribute_certs are all False" - ", then either full_name, relative_name, or only_some_reasons " - "must have a value." - ) - - self._only_contains_user_certs = only_contains_user_certs - self._only_contains_ca_certs = only_contains_ca_certs - self._indirect_crl = indirect_crl - self._only_contains_attribute_certs = only_contains_attribute_certs - self._only_some_reasons = only_some_reasons - self._full_name = full_name - self._relative_name = relative_name - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, IssuingDistributionPoint): - return NotImplemented - - return ( - self.full_name == other.full_name - and self.relative_name == other.relative_name - and self.only_contains_user_certs == other.only_contains_user_certs - and self.only_contains_ca_certs == other.only_contains_ca_certs - and self.only_some_reasons == other.only_some_reasons - and self.indirect_crl == other.indirect_crl - and self.only_contains_attribute_certs - == other.only_contains_attribute_certs - ) - - def __hash__(self) -> int: - return hash( - ( - self.full_name, - self.relative_name, - self.only_contains_user_certs, - self.only_contains_ca_certs, - self.only_some_reasons, - self.indirect_crl, - self.only_contains_attribute_certs, - ) - ) - - @property - def full_name(self) -> list[GeneralName] | None: - return self._full_name - - @property - def relative_name(self) -> RelativeDistinguishedName | None: - return self._relative_name - - @property - def only_contains_user_certs(self) -> bool: - return self._only_contains_user_certs - - @property - def only_contains_ca_certs(self) -> bool: - return self._only_contains_ca_certs - - @property - def only_some_reasons( - self, - ) -> frozenset[ReasonFlags] | None: - return self._only_some_reasons - - @property - def indirect_crl(self) -> bool: - return self._indirect_crl - - @property - def only_contains_attribute_certs(self) -> bool: - return self._only_contains_attribute_certs - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class MSCertificateTemplate(ExtensionType): - oid = ExtensionOID.MS_CERTIFICATE_TEMPLATE - - def __init__( - self, - template_id: ObjectIdentifier, - major_version: int | None, - minor_version: int | None, - ) -> None: - if not isinstance(template_id, ObjectIdentifier): - raise TypeError("oid must be an ObjectIdentifier") - self._template_id = template_id - if ( - major_version is not None and not isinstance(major_version, int) - ) or ( - minor_version is not None and not isinstance(minor_version, int) - ): - raise TypeError( - "major_version and minor_version must be integers or None" - ) - self._major_version = major_version - self._minor_version = minor_version - - @property - def template_id(self) -> ObjectIdentifier: - return self._template_id - - @property - def major_version(self) -> int | None: - return self._major_version - - @property - def minor_version(self) -> int | None: - return self._minor_version - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, MSCertificateTemplate): - return NotImplemented - - return ( - self.template_id == other.template_id - and self.major_version == other.major_version - and self.minor_version == other.minor_version - ) - - def __hash__(self) -> int: - return hash((self.template_id, self.major_version, self.minor_version)) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class NamingAuthority: - def __init__( - self, - id: ObjectIdentifier | None, - url: str | None, - text: str | None, - ) -> None: - if id is not None and not isinstance(id, ObjectIdentifier): - raise TypeError("id must be an ObjectIdentifier") - - if url is not None and not isinstance(url, str): - raise TypeError("url must be a str") - - if text is not None and not isinstance(text, str): - raise TypeError("text must be a str") - - self._id = id - self._url = url - self._text = text - - @property - def id(self) -> ObjectIdentifier | None: - return self._id - - @property - def url(self) -> str | None: - return self._url - - @property - def text(self) -> str | None: - return self._text - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, NamingAuthority): - return NotImplemented - - return ( - self.id == other.id - and self.url == other.url - and self.text == other.text - ) - - def __hash__(self) -> int: - return hash( - ( - self.id, - self.url, - self.text, - ) - ) - - -class ProfessionInfo: - def __init__( - self, - naming_authority: NamingAuthority | None, - profession_items: Iterable[str], - profession_oids: Iterable[ObjectIdentifier] | None, - registration_number: str | None, - add_profession_info: bytes | None, - ) -> None: - if naming_authority is not None and not isinstance( - naming_authority, NamingAuthority - ): - raise TypeError("naming_authority must be a NamingAuthority") - - profession_items = list(profession_items) - if not all(isinstance(item, str) for item in profession_items): - raise TypeError( - "Every item in the profession_items list must be a str" - ) - - if profession_oids is not None: - profession_oids = list(profession_oids) - if not all( - isinstance(oid, ObjectIdentifier) for oid in profession_oids - ): - raise TypeError( - "Every item in the profession_oids list must be an " - "ObjectIdentifier" - ) - - if registration_number is not None and not isinstance( - registration_number, str - ): - raise TypeError("registration_number must be a str") - - if add_profession_info is not None and not isinstance( - add_profession_info, bytes - ): - raise TypeError("add_profession_info must be bytes") - - self._naming_authority = naming_authority - self._profession_items = profession_items - self._profession_oids = profession_oids - self._registration_number = registration_number - self._add_profession_info = add_profession_info - - @property - def naming_authority(self) -> NamingAuthority | None: - return self._naming_authority - - @property - def profession_items(self) -> list[str]: - return self._profession_items - - @property - def profession_oids(self) -> list[ObjectIdentifier] | None: - return self._profession_oids - - @property - def registration_number(self) -> str | None: - return self._registration_number - - @property - def add_profession_info(self) -> bytes | None: - return self._add_profession_info - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, ProfessionInfo): - return NotImplemented - - return ( - self.naming_authority == other.naming_authority - and self.profession_items == other.profession_items - and self.profession_oids == other.profession_oids - and self.registration_number == other.registration_number - and self.add_profession_info == other.add_profession_info - ) - - def __hash__(self) -> int: - if self.profession_oids is not None: - profession_oids = tuple(self.profession_oids) - else: - profession_oids = None - return hash( - ( - self.naming_authority, - tuple(self.profession_items), - profession_oids, - self.registration_number, - self.add_profession_info, - ) - ) - - -class Admission: - def __init__( - self, - admission_authority: GeneralName | None, - naming_authority: NamingAuthority | None, - profession_infos: Iterable[ProfessionInfo], - ) -> None: - if admission_authority is not None and not isinstance( - admission_authority, GeneralName - ): - raise TypeError("admission_authority must be a GeneralName") - - if naming_authority is not None and not isinstance( - naming_authority, NamingAuthority - ): - raise TypeError("naming_authority must be a NamingAuthority") - - profession_infos = list(profession_infos) - if not all( - isinstance(info, ProfessionInfo) for info in profession_infos - ): - raise TypeError( - "Every item in the profession_infos list must be a " - "ProfessionInfo" - ) - - self._admission_authority = admission_authority - self._naming_authority = naming_authority - self._profession_infos = profession_infos - - @property - def admission_authority(self) -> GeneralName | None: - return self._admission_authority - - @property - def naming_authority(self) -> NamingAuthority | None: - return self._naming_authority - - @property - def profession_infos(self) -> list[ProfessionInfo]: - return self._profession_infos - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Admission): - return NotImplemented - - return ( - self.admission_authority == other.admission_authority - and self.naming_authority == other.naming_authority - and self.profession_infos == other.profession_infos - ) - - def __hash__(self) -> int: - return hash( - ( - self.admission_authority, - self.naming_authority, - tuple(self.profession_infos), - ) - ) - - -class Admissions(ExtensionType): - oid = ExtensionOID.ADMISSIONS - - def __init__( - self, - authority: GeneralName | None, - admissions: Iterable[Admission], - ) -> None: - if authority is not None and not isinstance(authority, GeneralName): - raise TypeError("authority must be a GeneralName") - - admissions = list(admissions) - if not all( - isinstance(admission, Admission) for admission in admissions - ): - raise TypeError( - "Every item in the contents_of_admissions list must be an " - "Admission" - ) - - self._authority = authority - self._admissions = admissions - - __len__, __iter__, __getitem__ = _make_sequence_methods("_admissions") - - @property - def authority(self) -> GeneralName | None: - return self._authority - - def __repr__(self) -> str: - return ( - f"" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Admissions): - return NotImplemented - - return ( - self.authority == other.authority - and self._admissions == other._admissions - ) - - def __hash__(self) -> int: - return hash((self.authority, tuple(self._admissions))) - - def public_bytes(self) -> bytes: - return rust_x509.encode_extension_value(self) - - -class UnrecognizedExtension(ExtensionType): - def __init__(self, oid: ObjectIdentifier, value: bytes) -> None: - if not isinstance(oid, ObjectIdentifier): - raise TypeError("oid must be an ObjectIdentifier") - self._oid = oid - self._value = value - - @property - def oid(self) -> ObjectIdentifier: # type: ignore[override] - return self._oid - - @property - def value(self) -> bytes: - return self._value - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, UnrecognizedExtension): - return NotImplemented - - return self.oid == other.oid and self.value == other.value - - def __hash__(self) -> int: - return hash((self.oid, self.value)) - - def public_bytes(self) -> bytes: - return self.value diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/general_name.py b/myenv/lib/python3.12/site-packages/cryptography/x509/general_name.py deleted file mode 100644 index 672f287..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/general_name.py +++ /dev/null @@ -1,281 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import abc -import ipaddress -import typing -from email.utils import parseaddr - -from cryptography.x509.name import Name -from cryptography.x509.oid import ObjectIdentifier - -_IPAddressTypes = typing.Union[ - ipaddress.IPv4Address, - ipaddress.IPv6Address, - ipaddress.IPv4Network, - ipaddress.IPv6Network, -] - - -class UnsupportedGeneralNameType(Exception): - pass - - -class GeneralName(metaclass=abc.ABCMeta): - @property - @abc.abstractmethod - def value(self) -> typing.Any: - """ - Return the value of the object - """ - - -class RFC822Name(GeneralName): - def __init__(self, value: str) -> None: - if isinstance(value, str): - try: - value.encode("ascii") - except UnicodeEncodeError: - raise ValueError( - "RFC822Name values should be passed as an A-label string. " - "This means unicode characters should be encoded via " - "a library like idna." - ) - else: - raise TypeError("value must be string") - - name, address = parseaddr(value) - if name or not address: - # parseaddr has found a name (e.g. Name ) or the entire - # value is an empty string. - raise ValueError("Invalid rfc822name value") - - self._value = value - - @property - def value(self) -> str: - return self._value - - @classmethod - def _init_without_validation(cls, value: str) -> RFC822Name: - instance = cls.__new__(cls) - instance._value = value - return instance - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, RFC822Name): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class DNSName(GeneralName): - def __init__(self, value: str) -> None: - if isinstance(value, str): - try: - value.encode("ascii") - except UnicodeEncodeError: - raise ValueError( - "DNSName values should be passed as an A-label string. " - "This means unicode characters should be encoded via " - "a library like idna." - ) - else: - raise TypeError("value must be string") - - self._value = value - - @property - def value(self) -> str: - return self._value - - @classmethod - def _init_without_validation(cls, value: str) -> DNSName: - instance = cls.__new__(cls) - instance._value = value - return instance - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, DNSName): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class UniformResourceIdentifier(GeneralName): - def __init__(self, value: str) -> None: - if isinstance(value, str): - try: - value.encode("ascii") - except UnicodeEncodeError: - raise ValueError( - "URI values should be passed as an A-label string. " - "This means unicode characters should be encoded via " - "a library like idna." - ) - else: - raise TypeError("value must be string") - - self._value = value - - @property - def value(self) -> str: - return self._value - - @classmethod - def _init_without_validation(cls, value: str) -> UniformResourceIdentifier: - instance = cls.__new__(cls) - instance._value = value - return instance - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, UniformResourceIdentifier): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class DirectoryName(GeneralName): - def __init__(self, value: Name) -> None: - if not isinstance(value, Name): - raise TypeError("value must be a Name") - - self._value = value - - @property - def value(self) -> Name: - return self._value - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, DirectoryName): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class RegisteredID(GeneralName): - def __init__(self, value: ObjectIdentifier) -> None: - if not isinstance(value, ObjectIdentifier): - raise TypeError("value must be an ObjectIdentifier") - - self._value = value - - @property - def value(self) -> ObjectIdentifier: - return self._value - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, RegisteredID): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class IPAddress(GeneralName): - def __init__(self, value: _IPAddressTypes) -> None: - if not isinstance( - value, - ( - ipaddress.IPv4Address, - ipaddress.IPv6Address, - ipaddress.IPv4Network, - ipaddress.IPv6Network, - ), - ): - raise TypeError( - "value must be an instance of ipaddress.IPv4Address, " - "ipaddress.IPv6Address, ipaddress.IPv4Network, or " - "ipaddress.IPv6Network" - ) - - self._value = value - - @property - def value(self) -> _IPAddressTypes: - return self._value - - def _packed(self) -> bytes: - if isinstance( - self.value, (ipaddress.IPv4Address, ipaddress.IPv6Address) - ): - return self.value.packed - else: - return ( - self.value.network_address.packed + self.value.netmask.packed - ) - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, IPAddress): - return NotImplemented - - return self.value == other.value - - def __hash__(self) -> int: - return hash(self.value) - - -class OtherName(GeneralName): - def __init__(self, type_id: ObjectIdentifier, value: bytes) -> None: - if not isinstance(type_id, ObjectIdentifier): - raise TypeError("type_id must be an ObjectIdentifier") - if not isinstance(value, bytes): - raise TypeError("value must be a binary string") - - self._type_id = type_id - self._value = value - - @property - def type_id(self) -> ObjectIdentifier: - return self._type_id - - @property - def value(self) -> bytes: - return self._value - - def __repr__(self) -> str: - return f"" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, OtherName): - return NotImplemented - - return self.type_id == other.type_id and self.value == other.value - - def __hash__(self) -> int: - return hash((self.type_id, self.value)) diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/name.py b/myenv/lib/python3.12/site-packages/cryptography/x509/name.py deleted file mode 100644 index 685f921..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/name.py +++ /dev/null @@ -1,476 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import binascii -import re -import sys -import typing -import warnings -from collections.abc import Iterable, Iterator - -from cryptography import utils -from cryptography.hazmat.bindings._rust import x509 as rust_x509 -from cryptography.x509.oid import NameOID, ObjectIdentifier - - -class _ASN1Type(utils.Enum): - BitString = 3 - OctetString = 4 - UTF8String = 12 - NumericString = 18 - PrintableString = 19 - T61String = 20 - IA5String = 22 - UTCTime = 23 - GeneralizedTime = 24 - VisibleString = 26 - UniversalString = 28 - BMPString = 30 - - -_ASN1_TYPE_TO_ENUM = {i.value: i for i in _ASN1Type} -_NAMEOID_DEFAULT_TYPE: dict[ObjectIdentifier, _ASN1Type] = { - NameOID.COUNTRY_NAME: _ASN1Type.PrintableString, - NameOID.JURISDICTION_COUNTRY_NAME: _ASN1Type.PrintableString, - NameOID.SERIAL_NUMBER: _ASN1Type.PrintableString, - NameOID.DN_QUALIFIER: _ASN1Type.PrintableString, - NameOID.EMAIL_ADDRESS: _ASN1Type.IA5String, - NameOID.DOMAIN_COMPONENT: _ASN1Type.IA5String, -} - -# Type alias -_OidNameMap = typing.Mapping[ObjectIdentifier, str] -_NameOidMap = typing.Mapping[str, ObjectIdentifier] - -#: Short attribute names from RFC 4514: -#: https://tools.ietf.org/html/rfc4514#page-7 -_NAMEOID_TO_NAME: _OidNameMap = { - NameOID.COMMON_NAME: "CN", - NameOID.LOCALITY_NAME: "L", - NameOID.STATE_OR_PROVINCE_NAME: "ST", - NameOID.ORGANIZATION_NAME: "O", - NameOID.ORGANIZATIONAL_UNIT_NAME: "OU", - NameOID.COUNTRY_NAME: "C", - NameOID.STREET_ADDRESS: "STREET", - NameOID.DOMAIN_COMPONENT: "DC", - NameOID.USER_ID: "UID", -} -_NAME_TO_NAMEOID = {v: k for k, v in _NAMEOID_TO_NAME.items()} - -_NAMEOID_LENGTH_LIMIT = { - NameOID.COUNTRY_NAME: (2, 2), - NameOID.JURISDICTION_COUNTRY_NAME: (2, 2), - NameOID.COMMON_NAME: (1, 64), -} - - -def _escape_dn_value(val: str | bytes) -> str: - """Escape special characters in RFC4514 Distinguished Name value.""" - - if not val: - return "" - - # RFC 4514 Section 2.4 defines the value as being the # (U+0023) character - # followed by the hexadecimal encoding of the octets. - if isinstance(val, bytes): - return "#" + binascii.hexlify(val).decode("utf8") - - # See https://tools.ietf.org/html/rfc4514#section-2.4 - val = val.replace("\\", "\\\\") - val = val.replace('"', '\\"') - val = val.replace("+", "\\+") - val = val.replace(",", "\\,") - val = val.replace(";", "\\;") - val = val.replace("<", "\\<") - val = val.replace(">", "\\>") - val = val.replace("\0", "\\00") - - if val[0] in ("#", " "): - val = "\\" + val - if val[-1] == " ": - val = val[:-1] + "\\ " - - return val - - -def _unescape_dn_value(val: str) -> str: - if not val: - return "" - - # See https://tools.ietf.org/html/rfc4514#section-3 - - # special = escaped / SPACE / SHARP / EQUALS - # escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE - def sub(m): - val = m.group(1) - # Regular escape - if len(val) == 1: - return val - # Hex-value scape - return chr(int(val, 16)) - - return _RFC4514NameParser._PAIR_RE.sub(sub, val) - - -NameAttributeValueType = typing.TypeVar( - "NameAttributeValueType", - typing.Union[str, bytes], - str, - bytes, - covariant=True, -) - - -class NameAttribute(typing.Generic[NameAttributeValueType]): - def __init__( - self, - oid: ObjectIdentifier, - value: NameAttributeValueType, - _type: _ASN1Type | None = None, - *, - _validate: bool = True, - ) -> None: - if not isinstance(oid, ObjectIdentifier): - raise TypeError( - "oid argument must be an ObjectIdentifier instance." - ) - if _type == _ASN1Type.BitString: - if oid != NameOID.X500_UNIQUE_IDENTIFIER: - raise TypeError( - "oid must be X500_UNIQUE_IDENTIFIER for BitString type." - ) - if not isinstance(value, bytes): - raise TypeError("value must be bytes for BitString") - elif not isinstance(value, str): - raise TypeError("value argument must be a str") - - length_limits = _NAMEOID_LENGTH_LIMIT.get(oid) - if length_limits is not None: - min_length, max_length = length_limits - assert isinstance(value, str) - c_len = len(value.encode("utf8")) - if c_len < min_length or c_len > max_length: - msg = ( - f"Attribute's length must be >= {min_length} and " - f"<= {max_length}, but it was {c_len}" - ) - if _validate is True: - raise ValueError(msg) - else: - warnings.warn(msg, stacklevel=2) - - # The appropriate ASN1 string type varies by OID and is defined across - # multiple RFCs including 2459, 3280, and 5280. In general UTF8String - # is preferred (2459), but 3280 and 5280 specify several OIDs with - # alternate types. This means when we see the sentinel value we need - # to look up whether the OID has a non-UTF8 type. If it does, set it - # to that. Otherwise, UTF8! - if _type is None: - _type = _NAMEOID_DEFAULT_TYPE.get(oid, _ASN1Type.UTF8String) - - if not isinstance(_type, _ASN1Type): - raise TypeError("_type must be from the _ASN1Type enum") - - self._oid = oid - self._value: NameAttributeValueType = value - self._type: _ASN1Type = _type - - @property - def oid(self) -> ObjectIdentifier: - return self._oid - - @property - def value(self) -> NameAttributeValueType: - return self._value - - @property - def rfc4514_attribute_name(self) -> str: - """ - The short attribute name (for example "CN") if available, - otherwise the OID dotted string. - """ - return _NAMEOID_TO_NAME.get(self.oid, self.oid.dotted_string) - - def rfc4514_string( - self, attr_name_overrides: _OidNameMap | None = None - ) -> str: - """ - Format as RFC4514 Distinguished Name string. - - Use short attribute name if available, otherwise fall back to OID - dotted string. - """ - attr_name = ( - attr_name_overrides.get(self.oid) if attr_name_overrides else None - ) - if attr_name is None: - attr_name = self.rfc4514_attribute_name - - return f"{attr_name}={_escape_dn_value(self.value)}" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, NameAttribute): - return NotImplemented - - return self.oid == other.oid and self.value == other.value - - def __hash__(self) -> int: - return hash((self.oid, self.value)) - - def __repr__(self) -> str: - return f"" - - -class RelativeDistinguishedName: - def __init__(self, attributes: Iterable[NameAttribute]): - attributes = list(attributes) - if not attributes: - raise ValueError("a relative distinguished name cannot be empty") - if not all(isinstance(x, NameAttribute) for x in attributes): - raise TypeError("attributes must be an iterable of NameAttribute") - - # Keep list and frozenset to preserve attribute order where it matters - self._attributes = attributes - self._attribute_set = frozenset(attributes) - - if len(self._attribute_set) != len(attributes): - raise ValueError("duplicate attributes are not allowed") - - def get_attributes_for_oid( - self, - oid: ObjectIdentifier, - ) -> list[NameAttribute[str | bytes]]: - return [i for i in self if i.oid == oid] - - def rfc4514_string( - self, attr_name_overrides: _OidNameMap | None = None - ) -> str: - """ - Format as RFC4514 Distinguished Name string. - - Within each RDN, attributes are joined by '+', although that is rarely - used in certificates. - """ - return "+".join( - attr.rfc4514_string(attr_name_overrides) - for attr in self._attributes - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, RelativeDistinguishedName): - return NotImplemented - - return self._attribute_set == other._attribute_set - - def __hash__(self) -> int: - return hash(self._attribute_set) - - def __iter__(self) -> Iterator[NameAttribute]: - return iter(self._attributes) - - def __len__(self) -> int: - return len(self._attributes) - - def __repr__(self) -> str: - return f"" - - -class Name: - @typing.overload - def __init__(self, attributes: Iterable[NameAttribute]) -> None: ... - - @typing.overload - def __init__( - self, attributes: Iterable[RelativeDistinguishedName] - ) -> None: ... - - def __init__( - self, - attributes: Iterable[NameAttribute | RelativeDistinguishedName], - ) -> None: - attributes = list(attributes) - if all(isinstance(x, NameAttribute) for x in attributes): - self._attributes = [ - RelativeDistinguishedName([typing.cast(NameAttribute, x)]) - for x in attributes - ] - elif all(isinstance(x, RelativeDistinguishedName) for x in attributes): - self._attributes = typing.cast( - typing.List[RelativeDistinguishedName], attributes - ) - else: - raise TypeError( - "attributes must be a list of NameAttribute" - " or a list RelativeDistinguishedName" - ) - - @classmethod - def from_rfc4514_string( - cls, - data: str, - attr_name_overrides: _NameOidMap | None = None, - ) -> Name: - return _RFC4514NameParser(data, attr_name_overrides or {}).parse() - - def rfc4514_string( - self, attr_name_overrides: _OidNameMap | None = None - ) -> str: - """ - Format as RFC4514 Distinguished Name string. - For example 'CN=foobar.com,O=Foo Corp,C=US' - - An X.509 name is a two-level structure: a list of sets of attributes. - Each list element is separated by ',' and within each list element, set - elements are separated by '+'. The latter is almost never used in - real world certificates. According to RFC4514 section 2.1 the - RDNSequence must be reversed when converting to string representation. - """ - return ",".join( - attr.rfc4514_string(attr_name_overrides) - for attr in reversed(self._attributes) - ) - - def get_attributes_for_oid( - self, - oid: ObjectIdentifier, - ) -> list[NameAttribute[str | bytes]]: - return [i for i in self if i.oid == oid] - - @property - def rdns(self) -> list[RelativeDistinguishedName]: - return self._attributes - - def public_bytes(self, backend: typing.Any = None) -> bytes: - return rust_x509.encode_name_bytes(self) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Name): - return NotImplemented - - return self._attributes == other._attributes - - def __hash__(self) -> int: - # TODO: this is relatively expensive, if this looks like a bottleneck - # for you, consider optimizing! - return hash(tuple(self._attributes)) - - def __iter__(self) -> Iterator[NameAttribute]: - for rdn in self._attributes: - yield from rdn - - def __len__(self) -> int: - return sum(len(rdn) for rdn in self._attributes) - - def __repr__(self) -> str: - rdns = ",".join(attr.rfc4514_string() for attr in self._attributes) - return f"" - - -class _RFC4514NameParser: - _OID_RE = re.compile(r"(0|([1-9]\d*))(\.(0|([1-9]\d*)))+") - _DESCR_RE = re.compile(r"[a-zA-Z][a-zA-Z\d-]*") - - _PAIR = r"\\([\\ #=\"\+,;<>]|[\da-zA-Z]{2})" - _PAIR_RE = re.compile(_PAIR) - _LUTF1 = r"[\x01-\x1f\x21\x24-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" - _SUTF1 = r"[\x01-\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" - _TUTF1 = r"[\x01-\x1F\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" - _UTFMB = rf"[\x80-{chr(sys.maxunicode)}]" - _LEADCHAR = rf"{_LUTF1}|{_UTFMB}" - _STRINGCHAR = rf"{_SUTF1}|{_UTFMB}" - _TRAILCHAR = rf"{_TUTF1}|{_UTFMB}" - _STRING_RE = re.compile( - rf""" - ( - ({_LEADCHAR}|{_PAIR}) - ( - ({_STRINGCHAR}|{_PAIR})* - ({_TRAILCHAR}|{_PAIR}) - )? - )? - """, - re.VERBOSE, - ) - _HEXSTRING_RE = re.compile(r"#([\da-zA-Z]{2})+") - - def __init__(self, data: str, attr_name_overrides: _NameOidMap) -> None: - self._data = data - self._idx = 0 - - self._attr_name_overrides = attr_name_overrides - - def _has_data(self) -> bool: - return self._idx < len(self._data) - - def _peek(self) -> str | None: - if self._has_data(): - return self._data[self._idx] - return None - - def _read_char(self, ch: str) -> None: - if self._peek() != ch: - raise ValueError - self._idx += 1 - - def _read_re(self, pat) -> str: - match = pat.match(self._data, pos=self._idx) - if match is None: - raise ValueError - val = match.group() - self._idx += len(val) - return val - - def parse(self) -> Name: - """ - Parses the `data` string and converts it to a Name. - - According to RFC4514 section 2.1 the RDNSequence must be - reversed when converting to string representation. So, when - we parse it, we need to reverse again to get the RDNs on the - correct order. - """ - - if not self._has_data(): - return Name([]) - - rdns = [self._parse_rdn()] - - while self._has_data(): - self._read_char(",") - rdns.append(self._parse_rdn()) - - return Name(reversed(rdns)) - - def _parse_rdn(self) -> RelativeDistinguishedName: - nas = [self._parse_na()] - while self._peek() == "+": - self._read_char("+") - nas.append(self._parse_na()) - - return RelativeDistinguishedName(nas) - - def _parse_na(self) -> NameAttribute: - try: - oid_value = self._read_re(self._OID_RE) - except ValueError: - name = self._read_re(self._DESCR_RE) - oid = self._attr_name_overrides.get( - name, _NAME_TO_NAMEOID.get(name) - ) - if oid is None: - raise ValueError - else: - oid = ObjectIdentifier(oid_value) - - self._read_char("=") - if self._peek() == "#": - value = self._read_re(self._HEXSTRING_RE) - value = binascii.unhexlify(value[1:]).decode() - else: - raw_value = self._read_re(self._STRING_RE) - value = _unescape_dn_value(raw_value) - - return NameAttribute(oid, value) diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/ocsp.py b/myenv/lib/python3.12/site-packages/cryptography/x509/ocsp.py deleted file mode 100644 index f61ed80..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/ocsp.py +++ /dev/null @@ -1,379 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import datetime -from collections.abc import Iterable - -from cryptography import utils, x509 -from cryptography.hazmat.bindings._rust import ocsp -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric.types import ( - CertificateIssuerPrivateKeyTypes, -) -from cryptography.x509.base import _reject_duplicate_extension - - -class OCSPResponderEncoding(utils.Enum): - HASH = "By Hash" - NAME = "By Name" - - -class OCSPResponseStatus(utils.Enum): - SUCCESSFUL = 0 - MALFORMED_REQUEST = 1 - INTERNAL_ERROR = 2 - TRY_LATER = 3 - SIG_REQUIRED = 5 - UNAUTHORIZED = 6 - - -_ALLOWED_HASHES = ( - hashes.SHA1, - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, -) - - -def _verify_algorithm(algorithm: hashes.HashAlgorithm) -> None: - if not isinstance(algorithm, _ALLOWED_HASHES): - raise ValueError( - "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" - ) - - -class OCSPCertStatus(utils.Enum): - GOOD = 0 - REVOKED = 1 - UNKNOWN = 2 - - -class _SingleResponse: - def __init__( - self, - resp: tuple[x509.Certificate, x509.Certificate] | None, - resp_hash: tuple[bytes, bytes, int] | None, - algorithm: hashes.HashAlgorithm, - cert_status: OCSPCertStatus, - this_update: datetime.datetime, - next_update: datetime.datetime | None, - revocation_time: datetime.datetime | None, - revocation_reason: x509.ReasonFlags | None, - ): - _verify_algorithm(algorithm) - if not isinstance(this_update, datetime.datetime): - raise TypeError("this_update must be a datetime object") - if next_update is not None and not isinstance( - next_update, datetime.datetime - ): - raise TypeError("next_update must be a datetime object or None") - - self._resp = resp - self._resp_hash = resp_hash - self._algorithm = algorithm - self._this_update = this_update - self._next_update = next_update - - if not isinstance(cert_status, OCSPCertStatus): - raise TypeError( - "cert_status must be an item from the OCSPCertStatus enum" - ) - if cert_status is not OCSPCertStatus.REVOKED: - if revocation_time is not None: - raise ValueError( - "revocation_time can only be provided if the certificate " - "is revoked" - ) - if revocation_reason is not None: - raise ValueError( - "revocation_reason can only be provided if the certificate" - " is revoked" - ) - else: - if not isinstance(revocation_time, datetime.datetime): - raise TypeError("revocation_time must be a datetime object") - - if revocation_reason is not None and not isinstance( - revocation_reason, x509.ReasonFlags - ): - raise TypeError( - "revocation_reason must be an item from the ReasonFlags " - "enum or None" - ) - - self._cert_status = cert_status - self._revocation_time = revocation_time - self._revocation_reason = revocation_reason - - -OCSPRequest = ocsp.OCSPRequest -OCSPResponse = ocsp.OCSPResponse -OCSPSingleResponse = ocsp.OCSPSingleResponse - - -class OCSPRequestBuilder: - def __init__( - self, - request: tuple[ - x509.Certificate, x509.Certificate, hashes.HashAlgorithm - ] - | None = None, - request_hash: tuple[bytes, bytes, int, hashes.HashAlgorithm] - | None = None, - extensions: list[x509.Extension[x509.ExtensionType]] = [], - ) -> None: - self._request = request - self._request_hash = request_hash - self._extensions = extensions - - def add_certificate( - self, - cert: x509.Certificate, - issuer: x509.Certificate, - algorithm: hashes.HashAlgorithm, - ) -> OCSPRequestBuilder: - if self._request is not None or self._request_hash is not None: - raise ValueError("Only one certificate can be added to a request") - - _verify_algorithm(algorithm) - if not isinstance(cert, x509.Certificate) or not isinstance( - issuer, x509.Certificate - ): - raise TypeError("cert and issuer must be a Certificate") - - return OCSPRequestBuilder( - (cert, issuer, algorithm), self._request_hash, self._extensions - ) - - def add_certificate_by_hash( - self, - issuer_name_hash: bytes, - issuer_key_hash: bytes, - serial_number: int, - algorithm: hashes.HashAlgorithm, - ) -> OCSPRequestBuilder: - if self._request is not None or self._request_hash is not None: - raise ValueError("Only one certificate can be added to a request") - - if not isinstance(serial_number, int): - raise TypeError("serial_number must be an integer") - - _verify_algorithm(algorithm) - utils._check_bytes("issuer_name_hash", issuer_name_hash) - utils._check_bytes("issuer_key_hash", issuer_key_hash) - if algorithm.digest_size != len( - issuer_name_hash - ) or algorithm.digest_size != len(issuer_key_hash): - raise ValueError( - "issuer_name_hash and issuer_key_hash must be the same length " - "as the digest size of the algorithm" - ) - - return OCSPRequestBuilder( - self._request, - (issuer_name_hash, issuer_key_hash, serial_number, algorithm), - self._extensions, - ) - - def add_extension( - self, extval: x509.ExtensionType, critical: bool - ) -> OCSPRequestBuilder: - if not isinstance(extval, x509.ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = x509.Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - - return OCSPRequestBuilder( - self._request, self._request_hash, [*self._extensions, extension] - ) - - def build(self) -> OCSPRequest: - if self._request is None and self._request_hash is None: - raise ValueError("You must add a certificate before building") - - return ocsp.create_ocsp_request(self) - - -class OCSPResponseBuilder: - def __init__( - self, - response: _SingleResponse | None = None, - responder_id: tuple[x509.Certificate, OCSPResponderEncoding] - | None = None, - certs: list[x509.Certificate] | None = None, - extensions: list[x509.Extension[x509.ExtensionType]] = [], - ): - self._response = response - self._responder_id = responder_id - self._certs = certs - self._extensions = extensions - - def add_response( - self, - cert: x509.Certificate, - issuer: x509.Certificate, - algorithm: hashes.HashAlgorithm, - cert_status: OCSPCertStatus, - this_update: datetime.datetime, - next_update: datetime.datetime | None, - revocation_time: datetime.datetime | None, - revocation_reason: x509.ReasonFlags | None, - ) -> OCSPResponseBuilder: - if self._response is not None: - raise ValueError("Only one response per OCSPResponse.") - - if not isinstance(cert, x509.Certificate) or not isinstance( - issuer, x509.Certificate - ): - raise TypeError("cert and issuer must be a Certificate") - - singleresp = _SingleResponse( - (cert, issuer), - None, - algorithm, - cert_status, - this_update, - next_update, - revocation_time, - revocation_reason, - ) - return OCSPResponseBuilder( - singleresp, - self._responder_id, - self._certs, - self._extensions, - ) - - def add_response_by_hash( - self, - issuer_name_hash: bytes, - issuer_key_hash: bytes, - serial_number: int, - algorithm: hashes.HashAlgorithm, - cert_status: OCSPCertStatus, - this_update: datetime.datetime, - next_update: datetime.datetime | None, - revocation_time: datetime.datetime | None, - revocation_reason: x509.ReasonFlags | None, - ) -> OCSPResponseBuilder: - if self._response is not None: - raise ValueError("Only one response per OCSPResponse.") - - if not isinstance(serial_number, int): - raise TypeError("serial_number must be an integer") - - utils._check_bytes("issuer_name_hash", issuer_name_hash) - utils._check_bytes("issuer_key_hash", issuer_key_hash) - _verify_algorithm(algorithm) - if algorithm.digest_size != len( - issuer_name_hash - ) or algorithm.digest_size != len(issuer_key_hash): - raise ValueError( - "issuer_name_hash and issuer_key_hash must be the same length " - "as the digest size of the algorithm" - ) - - singleresp = _SingleResponse( - None, - (issuer_name_hash, issuer_key_hash, serial_number), - algorithm, - cert_status, - this_update, - next_update, - revocation_time, - revocation_reason, - ) - return OCSPResponseBuilder( - singleresp, - self._responder_id, - self._certs, - self._extensions, - ) - - def responder_id( - self, encoding: OCSPResponderEncoding, responder_cert: x509.Certificate - ) -> OCSPResponseBuilder: - if self._responder_id is not None: - raise ValueError("responder_id can only be set once") - if not isinstance(responder_cert, x509.Certificate): - raise TypeError("responder_cert must be a Certificate") - if not isinstance(encoding, OCSPResponderEncoding): - raise TypeError( - "encoding must be an element from OCSPResponderEncoding" - ) - - return OCSPResponseBuilder( - self._response, - (responder_cert, encoding), - self._certs, - self._extensions, - ) - - def certificates( - self, certs: Iterable[x509.Certificate] - ) -> OCSPResponseBuilder: - if self._certs is not None: - raise ValueError("certificates may only be set once") - certs = list(certs) - if len(certs) == 0: - raise ValueError("certs must not be an empty list") - if not all(isinstance(x, x509.Certificate) for x in certs): - raise TypeError("certs must be a list of Certificates") - return OCSPResponseBuilder( - self._response, - self._responder_id, - certs, - self._extensions, - ) - - def add_extension( - self, extval: x509.ExtensionType, critical: bool - ) -> OCSPResponseBuilder: - if not isinstance(extval, x509.ExtensionType): - raise TypeError("extension must be an ExtensionType") - - extension = x509.Extension(extval.oid, critical, extval) - _reject_duplicate_extension(extension, self._extensions) - - return OCSPResponseBuilder( - self._response, - self._responder_id, - self._certs, - [*self._extensions, extension], - ) - - def sign( - self, - private_key: CertificateIssuerPrivateKeyTypes, - algorithm: hashes.HashAlgorithm | None, - ) -> OCSPResponse: - if self._response is None: - raise ValueError("You must add a response before signing") - if self._responder_id is None: - raise ValueError("You must add a responder_id before signing") - - return ocsp.create_ocsp_response( - OCSPResponseStatus.SUCCESSFUL, self, private_key, algorithm - ) - - @classmethod - def build_unsuccessful( - cls, response_status: OCSPResponseStatus - ) -> OCSPResponse: - if not isinstance(response_status, OCSPResponseStatus): - raise TypeError( - "response_status must be an item from OCSPResponseStatus" - ) - if response_status is OCSPResponseStatus.SUCCESSFUL: - raise ValueError("response_status cannot be SUCCESSFUL") - - return ocsp.create_ocsp_response(response_status, None, None, None) - - -load_der_ocsp_request = ocsp.load_der_ocsp_request -load_der_ocsp_response = ocsp.load_der_ocsp_response diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/oid.py b/myenv/lib/python3.12/site-packages/cryptography/x509/oid.py deleted file mode 100644 index 520fc7a..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/oid.py +++ /dev/null @@ -1,37 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography.hazmat._oid import ( - AttributeOID, - AuthorityInformationAccessOID, - CertificatePoliciesOID, - CRLEntryExtensionOID, - ExtendedKeyUsageOID, - ExtensionOID, - NameOID, - ObjectIdentifier, - OCSPExtensionOID, - OtherNameFormOID, - PublicKeyAlgorithmOID, - SignatureAlgorithmOID, - SubjectInformationAccessOID, -) - -__all__ = [ - "AttributeOID", - "AuthorityInformationAccessOID", - "CRLEntryExtensionOID", - "CertificatePoliciesOID", - "ExtendedKeyUsageOID", - "ExtensionOID", - "NameOID", - "OCSPExtensionOID", - "ObjectIdentifier", - "OtherNameFormOID", - "PublicKeyAlgorithmOID", - "SignatureAlgorithmOID", - "SubjectInformationAccessOID", -] diff --git a/myenv/lib/python3.12/site-packages/cryptography/x509/verification.py b/myenv/lib/python3.12/site-packages/cryptography/x509/verification.py deleted file mode 100644 index 2db4324..0000000 --- a/myenv/lib/python3.12/site-packages/cryptography/x509/verification.py +++ /dev/null @@ -1,34 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.hazmat.bindings._rust import x509 as rust_x509 -from cryptography.x509.general_name import DNSName, IPAddress - -__all__ = [ - "ClientVerifier", - "Criticality", - "ExtensionPolicy", - "Policy", - "PolicyBuilder", - "ServerVerifier", - "Store", - "Subject", - "VerificationError", - "VerifiedClient", -] - -Store = rust_x509.Store -Subject = typing.Union[DNSName, IPAddress] -VerifiedClient = rust_x509.VerifiedClient -ClientVerifier = rust_x509.ClientVerifier -ServerVerifier = rust_x509.ServerVerifier -PolicyBuilder = rust_x509.PolicyBuilder -Policy = rust_x509.Policy -ExtensionPolicy = rust_x509.ExtensionPolicy -Criticality = rust_x509.Criticality -VerificationError = rust_x509.VerificationError diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/LICENSE deleted file mode 100644 index b1ec907..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Charles Li and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/METADATA b/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/METADATA deleted file mode 100644 index 3614334..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/METADATA +++ /dev/null @@ -1,731 +0,0 @@ -Metadata-Version: 2.1 -Name: dataclasses-json -Version: 0.6.7 -Summary: Easily serialize dataclasses to and from JSON. -Home-page: https://github.com/lidatong/dataclasses-json -License: MIT -Author: Charles Li -Author-email: charles.dt.li@gmail.com -Maintainer: Charles Li -Maintainer-email: charles.dt.li@gmail.com -Requires-Python: >=3.7,<4.0 -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Requires-Dist: marshmallow (>=3.18.0,<4.0.0) -Requires-Dist: typing-inspect (>=0.4.0,<1) -Project-URL: Repository, https://github.com/lidatong/dataclasses-json -Project-URL: changelog, https://github.com/lidatong/dataclasses-json/releases -Project-URL: documentation, https://lidatong.github.io/dataclasses-json/ -Project-URL: issues, https://github.com/lidatong/dataclasses-json/issues -Description-Content-Type: text/markdown - -# Dataclasses JSON - -![](https://github.com/lidatong/dataclasses-json/workflows/dataclasses-json/badge.svg) - -This library provides a simple API for encoding and decoding [dataclasses](https://docs.python.org/3/library/dataclasses.html) to and from JSON. - -It's very easy to get started. - -[README / Documentation website](https://lidatong.github.io/dataclasses-json). Features a navigation bar and search functionality, and should mirror this README exactly -- take a look! - -## Quickstart - -`pip install dataclasses-json` - -```python -from dataclasses import dataclass -from dataclasses_json import dataclass_json - - -@dataclass_json -@dataclass -class Person: - name: str - - -person = Person(name='lidatong') -person.to_json() # '{"name": "lidatong"}' <- this is a string -person.to_dict() # {'name': 'lidatong'} <- this is a dict -Person.from_json('{"name": "lidatong"}') # Person(1) -Person.from_dict({'name': 'lidatong'}) # Person(1) - -# You can also apply _schema validation_ using an alternative API -# This can be useful for "typed" Python code - -Person.from_json('{"name": 42}') # This is ok. 42 is not a `str`, but - # dataclass creation does not validate types -Person.schema().loads('{"name": 42}') # Error! Raises `ValidationError` -``` - -**What if you want to work with camelCase JSON?** - -```python -# same imports as above, with the additional `LetterCase` import -from dataclasses import dataclass -from dataclasses_json import dataclass_json, LetterCase - -@dataclass_json(letter_case=LetterCase.CAMEL) # now all fields are encoded/decoded from camelCase -@dataclass -class ConfiguredSimpleExample: - int_field: int - -ConfiguredSimpleExample(1).to_json() # {"intField": 1} -ConfiguredSimpleExample.from_json('{"intField": 1}') # ConfiguredSimpleExample(1) -``` - -## Supported types - -It's recursive (see caveats below), so you can easily work with nested dataclasses. -In addition to the supported types in the -[py to JSON table](https://docs.python.org/3/library/json.html#py-to-json-table), this library supports the following: - -- any arbitrary [Collection](https://docs.python.org/3/library/collections.abc.html#collections.abc.Collection) type is supported. -[Mapping](https://docs.python.org/3/library/collections.abc.html#collections.abc.Mapping) types are encoded as JSON objects and `str` types as JSON strings. -Any other Collection types are encoded into JSON arrays, but decoded into the original collection types. - -- [datetime](https://docs.python.org/3/library/datetime.html#available-types) -objects. `datetime` objects are encoded to `float` (JSON number) using -[timestamp](https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp). -As specified in the `datetime` docs, if your `datetime` object is naive, it will -assume your system local timezone when calling `.timestamp()`. JSON numbers -corresponding to a `datetime` field in your dataclass are decoded -into a datetime-aware object, with `tzinfo` set to your system local timezone. -Thus, if you encode a datetime-naive object, you will decode into a -datetime-aware object. This is important, because encoding and decoding won't -strictly be inverses. See [this section](#Overriding) if you want to override this default -behavior (for example, if you want to use ISO). - -- [UUID](https://docs.python.org/3/library/uuid.html#uuid.UUID) objects. They -are encoded as `str` (JSON string). - -- [Decimal](https://docs.python.org/3/library/decimal.html) objects. They are -also encoded as `str`. - -**The [latest release](https://github.com/lidatong/dataclasses-json/releases/latest) is compatible with both Python 3.7 and Python 3.6 (with the dataclasses backport).** - -## Usage - -#### Approach 1: Class decorator - -```python -from dataclasses import dataclass -from dataclasses_json import dataclass_json - -@dataclass_json -@dataclass -class Person: - name: str - -lidatong = Person('lidatong') - -# Encoding to JSON -lidatong.to_json() # '{"name": "lidatong"}' - -# Decoding from JSON -Person.from_json('{"name": "lidatong"}') # Person(name='lidatong') -``` - -Note that the `@dataclass_json` decorator must be stacked above the `@dataclass` -decorator (order matters!) - -#### Approach 2: Inherit from a mixin - -```python -from dataclasses import dataclass -from dataclasses_json import DataClassJsonMixin - -@dataclass -class Person(DataClassJsonMixin): - name: str - -lidatong = Person('lidatong') - -# A different example from Approach 1 above, but usage is the exact same -assert Person.from_json(lidatong.to_json()) == lidatong -``` - -Pick whichever approach suits your taste. Note that there is better support for - the mixin approach when using _static analysis_ tools (e.g. linting, typing), - but the differences in implementation will be invisible in _runtime_ usage. - -## How do I... - - - -### Use my dataclass with JSON arrays or objects? - -```python -from dataclasses import dataclass -from dataclasses_json import dataclass_json - -@dataclass_json -@dataclass -class Person: - name: str -``` - -**Encode into a JSON array containing instances of my Data Class** - -```python -people_json = [Person('lidatong')] -Person.schema().dumps(people_json, many=True) # '[{"name": "lidatong"}]' -``` - -**Decode a JSON array containing instances of my Data Class** - -```python -people_json = '[{"name": "lidatong"}]' -Person.schema().loads(people_json, many=True) # [Person(name='lidatong')] -``` - -**Encode as part of a larger JSON object containing my Data Class (e.g. an HTTP -request/response)** - -```python -import json - -response_dict = { - 'response': { - 'person': Person('lidatong').to_dict() - } -} - -response_json = json.dumps(response_dict) -``` - -In this case, we do two steps. First, we encode the dataclass into a -**python dictionary** rather than a JSON string, using `.to_dict`. - -Second, we leverage the built-in `json.dumps` to serialize our `dataclass` into -a JSON string. - -**Decode as part of a larger JSON object containing my Data Class (e.g. an HTTP -response)** - -```python -import json - -response_dict = json.loads('{"response": {"person": {"name": "lidatong"}}}') - -person_dict = response_dict['response'] - -person = Person.from_dict(person_dict) -``` - -In a similar vein to encoding above, we leverage the built-in `json` module. - -First, call `json.loads` to read the entire JSON object into a -dictionary. We then access the key of the value containing the encoded dict of -our `Person` that we want to decode (`response_dict['response']`). - -Second, we load in the dictionary using `Person.from_dict`. - - -### Encode or decode into Python lists/dictionaries rather than JSON? - -This can be by calling `.schema()` and then using the corresponding -encoder/decoder methods, ie. `.load(...)`/`.dump(...)`. - -**Encode into a single Python dictionary** - -```python -person = Person('lidatong') -person.to_dict() # {'name': 'lidatong'} -``` - -**Encode into a list of Python dictionaries** - -```python -people = [Person('lidatong')] -Person.schema().dump(people, many=True) # [{'name': 'lidatong'}] -``` - -**Decode a dictionary into a single dataclass instance** - -```python -person_dict = {'name': 'lidatong'} -Person.from_dict(person_dict) # Person(name='lidatong') -``` - -**Decode a list of dictionaries into a list of dataclass instances** - -```python -people_dicts = [{"name": "lidatong"}] -Person.schema().load(people_dicts, many=True) # [Person(name='lidatong')] -``` - -### Encode or decode from camelCase (or kebab-case)? - -JSON letter case by convention is camelCase, in Python members are by convention snake_case. - -You can configure it to encode/decode from other casing schemes at both the class level and the field level. - -```python -from dataclasses import dataclass, field - -from dataclasses_json import LetterCase, config, dataclass_json - - -# changing casing at the class level -@dataclass_json(letter_case=LetterCase.CAMEL) -@dataclass -class Person: - given_name: str - family_name: str - -Person('Alice', 'Liddell').to_json() # '{"givenName": "Alice"}' -Person.from_json('{"givenName": "Alice", "familyName": "Liddell"}') # Person('Alice', 'Liddell') - -# at the field level -@dataclass_json -@dataclass -class Person: - given_name: str = field(metadata=config(letter_case=LetterCase.CAMEL)) - family_name: str - -Person('Alice', 'Liddell').to_json() # '{"givenName": "Alice"}' -# notice how the `family_name` field is still snake_case, because it wasn't configured above -Person.from_json('{"givenName": "Alice", "family_name": "Liddell"}') # Person('Alice', 'Liddell') -``` - -**This library assumes your field follows the Python convention of snake_case naming.** -If your field is not `snake_case` to begin with and you attempt to parameterize `LetterCase`, -the behavior of encoding/decoding is undefined (most likely it will result in subtle bugs). - -### Encode or decode using a different name - -```python -from dataclasses import dataclass, field - -from dataclasses_json import config, dataclass_json - -@dataclass_json -@dataclass -class Person: - given_name: str = field(metadata=config(field_name="overriddenGivenName")) - -Person(given_name="Alice") # Person('Alice') -Person.from_json('{"overriddenGivenName": "Alice"}') # Person('Alice') -Person('Alice').to_json() # {"overriddenGivenName": "Alice"} -``` - -### Handle missing or optional field values when decoding? - -By default, any fields in your dataclass that use `default` or -`default_factory` will have the values filled with the provided default, if the -corresponding field is missing from the JSON you're decoding. - -**Decode JSON with missing field** - -```python -@dataclass_json -@dataclass -class Student: - id: int - name: str = 'student' - -Student.from_json('{"id": 1}') # Student(id=1, name='student') -``` - -Notice `from_json` filled the field `name` with the specified default 'student' -when it was missing from the JSON. - -Sometimes you have fields that are typed as `Optional`, but you don't -necessarily want to assign a default. In that case, you can use the -`infer_missing` kwarg to make `from_json` infer the missing field value as `None`. - -**Decode optional field without default** - -```python -@dataclass_json -@dataclass -class Tutor: - id: int - student: Optional[Student] = None - -Tutor.from_json('{"id": 1}') # Tutor(id=1, student=None) -``` - -Personally I recommend you leverage dataclass defaults rather than using -`infer_missing`, but if for some reason you need to decouple the behavior of -JSON decoding from the field's default value, this will allow you to do so. - - -### Handle unknown / extraneous fields in JSON? - -By default, it is up to the implementation what happens when a `json_dataclass` receives input parameters that are not defined. -(the `from_dict` method ignores them, when loading using `schema()` a ValidationError is raised.) -There are three ways to customize this behavior. - -Assume you want to instantiate a dataclass with the following dictionary: -```python -dump_dict = {"endpoint": "some_api_endpoint", "data": {"foo": 1, "bar": "2"}, "undefined_field_name": [1, 2, 3]} -``` - -1. You can enforce to always raise an error by setting the `undefined` keyword to `Undefined.RAISE` - (`'RAISE'` as a case-insensitive string works as well). Of course it works normally if you don't pass any undefined parameters. - -```python -from dataclasses_json import Undefined - -@dataclass_json(undefined=Undefined.RAISE) -@dataclass() -class ExactAPIDump: - endpoint: str - data: Dict[str, Any] - -dump = ExactAPIDump.from_dict(dump_dict) # raises UndefinedParameterError -``` - -2. You can simply ignore any undefined parameters by setting the `undefined` keyword to `Undefined.EXCLUDE` - (`'EXCLUDE'` as a case-insensitive string works as well). Note that you will not be able to retrieve them using `to_dict`: - -```python -from dataclasses_json import Undefined - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclass() -class DontCareAPIDump: - endpoint: str - data: Dict[str, Any] - -dump = DontCareAPIDump.from_dict(dump_dict) # DontCareAPIDump(endpoint='some_api_endpoint', data={'foo': 1, 'bar': '2'}) -dump.to_dict() # {"endpoint": "some_api_endpoint", "data": {"foo": 1, "bar": "2"}} -``` - -3. You can save them in a catch-all field and do whatever needs to be done later. Simply set the `undefined` -keyword to `Undefined.INCLUDE` (`'INCLUDE'` as a case-insensitive string works as well) and define a field -of type `CatchAll` where all unknown values will end up. - This simply represents a dictionary that can hold anything. - If there are no undefined parameters, this will be an empty dictionary. - -```python -from dataclasses_json import Undefined, CatchAll - -@dataclass_json(undefined=Undefined.INCLUDE) -@dataclass() -class UnknownAPIDump: - endpoint: str - data: Dict[str, Any] - unknown_things: CatchAll - -dump = UnknownAPIDump.from_dict(dump_dict) # UnknownAPIDump(endpoint='some_api_endpoint', data={'foo': 1, 'bar': '2'}, unknown_things={'undefined_field_name': [1, 2, 3]}) -dump.to_dict() # {'endpoint': 'some_api_endpoint', 'data': {'foo': 1, 'bar': '2'}, 'undefined_field_name': [1, 2, 3]} -``` - -Notes: -- When using `Undefined.INCLUDE`, an `UndefinedParameterError` will be raised if you don't specify -exactly one field of type `CatchAll`. -- Note that `LetterCase` does not affect values written into the `CatchAll` field, they will be as they are given. -- When specifying a default (or a default factory) for the the `CatchAll`-field, e.g. `unknown_things: CatchAll = None`, the default value will be used instead of an empty dict if there are no undefined parameters. -- Calling __init__ with non-keyword arguments resolves the arguments to the defined fields and writes everything else into the catch-all field. - -4. All 3 options work as well using `schema().loads` and `schema().dumps`, as long as you don't overwrite it by specifying `schema(unknown=)`. -marshmallow uses the same 3 keywords ['include', 'exclude', 'raise'](https://marshmallow.readthedocs.io/en/stable/quickstart.html#handling-unknown-fields). - -5. All 3 operations work as well using `__init__`, e.g. `UnknownAPIDump(**dump_dict)` will **not** raise a `TypeError`, but write all unknown values to the field tagged as `CatchAll`. - Classes tagged with `EXCLUDE` will also simply ignore unknown parameters. Note that classes tagged as `RAISE` still raise a `TypeError`, and **not** a `UndefinedParameterError` if supplied with unknown keywords. - - -### Override the default encode / decode / marshmallow field of a specific field? - -See [Overriding](#Overriding) - -### Handle recursive dataclasses? -Object hierarchies where fields are of the type that they are declared within require a small -type hinting trick to declare the forward reference. -```python -from typing import Optional -from dataclasses import dataclass -from dataclasses_json import dataclass_json - -@dataclass_json -@dataclass -class Tree(): - value: str - left: Optional['Tree'] - right: Optional['Tree'] -``` - -Avoid using -```python -from __future__ import annotations -``` -as it will cause problems with the way dataclasses_json accesses the type annotations. - -### Use numpy or pandas types? -Data types specific to libraries commonly used in data analysis and machine learning like [numpy](https://github.com/numpy/numpy) and [pandas](https://github.com/pandas-dev/pandas) are not supported by default, but you can easily enable them by using custom decoders and encoders. Below are two examples for `numpy` and `pandas` types. - -```python -from dataclasses import field, dataclass -from dataclasses_json import config, dataclass_json -import numpy as np -import pandas as pd - -@dataclass_json -@dataclass -class DataWithNumpy: - my_int: np.int64 = field(metadata=config(decoder=np.int64)) - my_float: np.float64 = field(metadata=config(decoder=np.float64)) - my_array: np.ndarray = field(metadata=config(decoder=np.asarray)) -DataWithNumpy.from_json("{\"my_int\": 42, \"my_float\": 13.37, \"my_array\": [1,2,3]}") - -@dataclass_json -@dataclass -class DataWithPandas: - my_df: pd.DataFrame = field(metadata=config(decoder=pd.DataFrame.from_records, encoder=lambda x: x.to_dict(orient="records"))) -data = DataWithPandas.from_dict({"my_df": [{"col1": 1, "col2": 2}, {"col1": 3, "col2": 4}]}) -# my_df results in: -# col1 col2 -# 1 2 -# 3 4 -data.to_dict() -# {"my_df": [{"col1": 1, "col2": 2}, {"col1": 3, "col2": 4}]} -``` - -## Marshmallow interop - -Using the `dataclass_json` decorator or mixing in `DataClassJsonMixin` will -provide you with an additional method `.schema()`. - -`.schema()` generates a schema exactly equivalent to manually creating a -marshmallow schema for your dataclass. You can reference the [marshmallow API docs](https://marshmallow.readthedocs.io/en/3.0/api_reference.html#schema) -to learn other ways you can use the schema returned by `.schema()`. - -You can pass in the exact same arguments to `.schema()` that you would when -constructing a `PersonSchema` instance, e.g. `.schema(many=True)`, and they will -get passed through to the marshmallow schema. - - -```python -from dataclasses import dataclass -from dataclasses_json import dataclass_json - -@dataclass_json -@dataclass -class Person: - name: str - -# You don't need to do this - it's generated for you by `.schema()`! -from marshmallow import Schema, fields - -class PersonSchema(Schema): - name = fields.Str() -``` - -Briefly, on what's going on under the hood in the above examples: calling -`.schema()` will have this library generate a -[marshmallow schema]('https://marshmallow.readthedocs.io/en/3.0/api_reference.html#schema) -for you. It also fills in the corresponding object hook, so that marshmallow -will create an instance of your Data Class on `load` (e.g. -`Person.schema().load` returns a `Person`) rather than a `dict`, which it does -by default in marshmallow. - -**Performance note** - -`.schema()` is not cached (it generates the schema on every call), so if you -have a nested Data Class you may want to save the result to a variable to -avoid re-generation of the schema on every usage. - -```python -person_schema = Person.schema() -person_schema.dump(people, many=True) - -# later in the code... - -person_schema.dump(person) -``` - -## Overriding / Extending - -#### Overriding - -For example, you might want to encode/decode `datetime` objects using ISO format -rather than the default `timestamp`. - -```python -from dataclasses import dataclass, field -from dataclasses_json import dataclass_json, config -from datetime import datetime -from marshmallow import fields - -@dataclass_json -@dataclass -class DataClassWithIsoDatetime: - created_at: datetime = field( - metadata=config( - encoder=datetime.isoformat, - decoder=datetime.fromisoformat, - mm_field=fields.DateTime(format='iso') - ) - ) -``` - -#### Extending - -Similarly, you might want to extend `dataclasses_json` to encode `date` objects. - -```python -from dataclasses import dataclass, field -from dataclasses_json import dataclass_json, config -from datetime import date -from marshmallow import fields - -dataclasses_json.cfg.global_config.encoders[date] = date.isoformat -dataclasses_json.cfg.global_config.decoders[date] = date.fromisoformat - -@dataclass_json -@dataclass -class DataClassWithIsoDatetime: - created_at: date - modified_at: date - accessed_at: date -``` - -As you can see, you can **override** or **extend** the default codecs by providing a "hook" via a -callable: -- `encoder`: a callable, which will be invoked to convert the field value when encoding to JSON -- `decoder`: a callable, which will be invoked to convert the JSON value when decoding from JSON -- `mm_field`: a marshmallow field, which will affect the behavior of any operations involving `.schema()` - -Note that these hooks will be invoked regardless if you're using -`.to_json`/`dump`/`dumps` -and `.from_json`/`load`/`loads`. So apply overrides / extensions judiciously, making sure to -carefully consider whether the interaction of the encode/decode/mm_field is consistent with what you expect! - - -#### What if I have other dataclass field extensions that rely on `metadata` - -All the `dataclasses_json.config` does is return a mapping, namespaced under the key `'dataclasses_json'`. - -Say there's another module, `other_dataclass_package` that uses metadata. Here's how you solve your problem: - -```python -metadata = {'other_dataclass_package': 'some metadata...'} # pre-existing metadata for another dataclass package -dataclass_json_config = config( - encoder=datetime.isoformat, - decoder=datetime.fromisoformat, - mm_field=fields.DateTime(format='iso') - ) -metadata.update(dataclass_json_config) - -@dataclass_json -@dataclass -class DataClassWithIsoDatetime: - created_at: datetime = field(metadata=metadata) -``` - -You can also manually specify the dataclass_json configuration mapping. - -```python -@dataclass_json -@dataclass -class DataClassWithIsoDatetime: - created_at: date = field( - metadata={'dataclasses_json': { - 'encoder': date.isoformat, - 'decoder': date.fromisoformat, - 'mm_field': fields.DateTime(format='iso') - }} - ) -``` - -## A larger example - -```python -from dataclasses import dataclass -from dataclasses_json import dataclass_json - -from typing import List - -@dataclass_json -@dataclass(frozen=True) -class Minion: - name: str - - -@dataclass_json -@dataclass(frozen=True) -class Boss: - minions: List[Minion] - -boss = Boss([Minion('evil minion'), Minion('very evil minion')]) -boss_json = """ -{ - "minions": [ - { - "name": "evil minion" - }, - { - "name": "very evil minion" - } - ] -} -""".strip() - -assert boss.to_json(indent=4) == boss_json -assert Boss.from_json(boss_json) == boss -``` - -## Performance - -Take a look at [this issue](https://github.com/lidatong/dataclasses-json/issues/228) - -## Versioning - -Note this library is still pre-1.0.0 (SEMVER). - -The current convention is: -- **PATCH** version upgrades for bug fixes and minor feature additions. -- **MINOR** version upgrades for big API features and breaking changes. - -Once this library is 1.0.0, it will follow standard SEMVER conventions. - -### Python compatibility - -Any version that is not listed in the table below we do not test against, though you might still be able to install the library. For future Python versions, please open an issue and/or a pull request, adding them to the CI suite. - - -| Python version range | Compatible dataclasses-json version | -|----------------------|:-----------------------------------:| -| 3.7.x - 3.12.x | 0.5.x - 0.6.x | -| >= 3.13.x | No official support (yet) | - - -## Roadmap - -Currently the focus is on investigating and fixing bugs in this library, working -on performance, and finishing [this issue](https://github.com/lidatong/dataclasses-json/issues/31). - -That said, if you think there's a feature missing / something new needed in the -library, please see the contributing section below. - - -## Contributing - -First of all, thank you for being interested in contributing to this library. -I really appreciate you taking the time to work on this project. - -- If you're just interested in getting into the code, a good place to start are -issues tagged as bugs. -- If introducing a new feature, especially one that modifies the public API, -consider submitting an issue for discussion before a PR. Please also take a look -at existing issues / PRs to see what you're proposing has already been covered -before / exists. -- I like to follow the commit conventions documented [here](https://www.conventionalcommits.org/en/v1.0.0/#summary) - -### Setting up your environment - -This project uses [Poetry](https://python-poetry.org/) for dependency and venv management. It is quite simple to get ready for your first commit: -- [Install](https://python-poetry.org/docs/#installation) latest stable Poetry -- Navigate to where you cloned `dataclasses-json` -- Run `poetry install` -- Create a branch and start writing code! - diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/RECORD b/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/RECORD deleted file mode 100644 index 97ae990..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/RECORD +++ /dev/null @@ -1,24 +0,0 @@ -dataclasses_json-0.6.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -dataclasses_json-0.6.7.dist-info/LICENSE,sha256=UjIbVWleiRm3xlSx6Ag8V88hK4hfQocb1sPN0t0mfw8,1084 -dataclasses_json-0.6.7.dist-info/METADATA,sha256=oXJy8CZd4ymA0EZimK4w-ab20x00Rt8RnFpat-81qro,25035 -dataclasses_json-0.6.7.dist-info/RECORD,, -dataclasses_json-0.6.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88 -dataclasses_json/__init__.py,sha256=O2-gxxDqFvB8F3WyvjBEn3J6epRHaRZjhJtVEhVJfCc,495 -dataclasses_json/__pycache__/__init__.cpython-312.pyc,, -dataclasses_json/__pycache__/__version__.cpython-312.pyc,, -dataclasses_json/__pycache__/api.cpython-312.pyc,, -dataclasses_json/__pycache__/cfg.cpython-312.pyc,, -dataclasses_json/__pycache__/core.cpython-312.pyc,, -dataclasses_json/__pycache__/mm.cpython-312.pyc,, -dataclasses_json/__pycache__/stringcase.cpython-312.pyc,, -dataclasses_json/__pycache__/undefined.cpython-312.pyc,, -dataclasses_json/__pycache__/utils.cpython-312.pyc,, -dataclasses_json/__version__.py,sha256=e3v5__pV_quSrtFtX7DrugFdNUgIo8BmXWvLX3H5tSo,154 -dataclasses_json/api.py,sha256=hzH18PZWgBifuvqJFdUed7daRqOfCaGUyS2EMfmLXo8,5990 -dataclasses_json/cfg.py,sha256=IRREFI4oOTlWENXbOzp86X3_3tRpER-3bXlkBoMqqyk,3527 -dataclasses_json/core.py,sha256=cJVzZNjfb8tSjhYHEQLeH7lPgA33tgeAiZyvxrr1OBQ,19573 -dataclasses_json/mm.py,sha256=TKwSIn2OXeHF2E4n_Uhc5Mhe1LBQAKq0nmo5D4hc_qQ,15997 -dataclasses_json/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -dataclasses_json/stringcase.py,sha256=lCTTNBaXwgudBdL2DAq42L4-yJgiEtWkLD6O5NvXAeo,3313 -dataclasses_json/undefined.py,sha256=GaN_LCwHpsfzVqAR2uv7AZyU2ID5tqLVaof81Y9VjM0,10452 -dataclasses_json/utils.py,sha256=mzbWVIMGM5O5MMdi2gggYGwuTNTuHGd-B0bY5J2UvWg,5852 diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/WHEEL deleted file mode 100644 index d73ccaa..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json-0.6.7.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: poetry-core 1.9.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__init__.py b/myenv/lib/python3.12/site-packages/dataclasses_json/__init__.py deleted file mode 100644 index 937bdbc..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# flake8: noqa -from dataclasses_json.api import (DataClassJsonMixin, - dataclass_json) -from dataclasses_json.cfg import (config, global_config, - Exclude, LetterCase) -from dataclasses_json.undefined import CatchAll, Undefined - -from dataclasses_json.__version__ import __version__ - -__all__ = ['DataClassJsonMixin', 'LetterCase', 'dataclass_json', - 'config', 'global_config', 'Exclude', - 'CatchAll', 'Undefined'] diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 9178ff3..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__version__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__version__.cpython-312.pyc deleted file mode 100644 index 97eee70..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/__version__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/api.cpython-312.pyc deleted file mode 100644 index 0445c1c..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/api.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/cfg.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/cfg.cpython-312.pyc deleted file mode 100644 index 002436e..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/cfg.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/core.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/core.cpython-312.pyc deleted file mode 100644 index f58dd15..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/core.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/mm.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/mm.cpython-312.pyc deleted file mode 100644 index a0c369b..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/mm.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/stringcase.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/stringcase.cpython-312.pyc deleted file mode 100644 index 9243e29..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/stringcase.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/undefined.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/undefined.cpython-312.pyc deleted file mode 100644 index 9a86e47..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/undefined.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index becef86..0000000 Binary files a/myenv/lib/python3.12/site-packages/dataclasses_json/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/__version__.py b/myenv/lib/python3.12/site-packages/dataclasses_json/__version__.py deleted file mode 100644 index 80248ca..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/__version__.py +++ /dev/null @@ -1,6 +0,0 @@ -""" - Version file. - Allows common version lookup via from dataclasses_json import __version__ -""" - -__version__ = "0.6.7" # replaced by git tag on deploy diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/api.py b/myenv/lib/python3.12/site-packages/dataclasses_json/api.py deleted file mode 100644 index 3481e93..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/api.py +++ /dev/null @@ -1,153 +0,0 @@ -import abc -import json -from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, Union, overload - -from dataclasses_json.cfg import config, LetterCase -from dataclasses_json.core import (Json, _ExtendedEncoder, _asdict, - _decode_dataclass) -from dataclasses_json.mm import (JsonData, SchemaType, build_schema) -from dataclasses_json.undefined import Undefined -from dataclasses_json.utils import (_handle_undefined_parameters_safe, - _undefined_parameter_action_safe) - -A = TypeVar('A', bound="DataClassJsonMixin") -T = TypeVar('T') -Fields = List[Tuple[str, Any]] - - -class DataClassJsonMixin(abc.ABC): - """ - DataClassJsonMixin is an ABC that functions as a Mixin. - - As with other ABCs, it should not be instantiated directly. - """ - dataclass_json_config: Optional[dict] = None - - def to_json(self, - *, - skipkeys: bool = False, - ensure_ascii: bool = True, - check_circular: bool = True, - allow_nan: bool = True, - indent: Optional[Union[int, str]] = None, - separators: Optional[Tuple[str, str]] = None, - default: Optional[Callable] = None, - sort_keys: bool = False, - **kw) -> str: - return json.dumps(self.to_dict(encode_json=False), - cls=_ExtendedEncoder, - skipkeys=skipkeys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - indent=indent, - separators=separators, - default=default, - sort_keys=sort_keys, - **kw) - - @classmethod - def from_json(cls: Type[A], - s: JsonData, - *, - parse_float=None, - parse_int=None, - parse_constant=None, - infer_missing=False, - **kw) -> A: - kvs = json.loads(s, - parse_float=parse_float, - parse_int=parse_int, - parse_constant=parse_constant, - **kw) - return cls.from_dict(kvs, infer_missing=infer_missing) - - @classmethod - def from_dict(cls: Type[A], - kvs: Json, - *, - infer_missing=False) -> A: - return _decode_dataclass(cls, kvs, infer_missing) - - def to_dict(self, encode_json=False) -> Dict[str, Json]: - return _asdict(self, encode_json=encode_json) - - @classmethod - def schema(cls: Type[A], - *, - infer_missing: bool = False, - only=None, - exclude=(), - many: bool = False, - context=None, - load_only=(), - dump_only=(), - partial: bool = False, - unknown=None) -> "SchemaType[A]": - Schema = build_schema(cls, DataClassJsonMixin, infer_missing, partial) - - if unknown is None: - undefined_parameter_action = _undefined_parameter_action_safe(cls) - if undefined_parameter_action is not None: - # We can just make use of the same-named mm keywords - unknown = undefined_parameter_action.name.lower() - - return Schema(only=only, - exclude=exclude, - many=many, - context=context, - load_only=load_only, - dump_only=dump_only, - partial=partial, - unknown=unknown) - - -@overload -def dataclass_json(_cls: None = ..., *, letter_case: Optional[LetterCase] = ..., - undefined: Optional[Union[str, Undefined]] = ...) -> Callable[[Type[T]], Type[T]]: ... - - -@overload -def dataclass_json(_cls: Type[T], *, letter_case: Optional[LetterCase] = ..., - undefined: Optional[Union[str, Undefined]] = ...) -> Type[T]: ... - - -def dataclass_json(_cls: Optional[Type[T]] = None, *, letter_case: Optional[LetterCase] = None, - undefined: Optional[Union[str, Undefined]] = None) -> Union[Callable[[Type[T]], Type[T]], Type[T]]: - """ - Based on the code in the `dataclasses` module to handle optional-parens - decorators. See example below: - - @dataclass_json - @dataclass_json(letter_case=LetterCase.CAMEL) - class Example: - ... - """ - - def wrap(cls: Type[T]) -> Type[T]: - return _process_class(cls, letter_case, undefined) - - if _cls is None: - return wrap - return wrap(_cls) - - -def _process_class(cls: Type[T], letter_case: Optional[LetterCase], - undefined: Optional[Union[str, Undefined]]) -> Type[T]: - if letter_case is not None or undefined is not None: - cls.dataclass_json_config = config(letter_case=letter_case, # type: ignore[attr-defined] - undefined=undefined)['dataclasses_json'] - - cls.to_json = DataClassJsonMixin.to_json # type: ignore[attr-defined] - # unwrap and rewrap classmethod to tag it to cls rather than the literal - # DataClassJsonMixin ABC - cls.from_json = classmethod(DataClassJsonMixin.from_json.__func__) # type: ignore[attr-defined] - cls.to_dict = DataClassJsonMixin.to_dict # type: ignore[attr-defined] - cls.from_dict = classmethod(DataClassJsonMixin.from_dict.__func__) # type: ignore[attr-defined] - cls.schema = classmethod(DataClassJsonMixin.schema.__func__) # type: ignore[attr-defined] - - cls.__init__ = _handle_undefined_parameters_safe(cls, kvs=(), # type: ignore[attr-defined,method-assign] - usage="init") - # register cls as a virtual subclass of DataClassJsonMixin - DataClassJsonMixin.register(cls) - return cls diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/cfg.py b/myenv/lib/python3.12/site-packages/dataclasses_json/cfg.py deleted file mode 100644 index 930e51e..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/cfg.py +++ /dev/null @@ -1,110 +0,0 @@ -import functools -from enum import Enum -from typing import Callable, Dict, Optional, TypeVar, Union - -from marshmallow.fields import Field as MarshmallowField # type: ignore - -from dataclasses_json.stringcase import (camelcase, pascalcase, snakecase, - spinalcase) # type: ignore -from dataclasses_json.undefined import Undefined, UndefinedParameterError - -T = TypeVar("T") - - -class Exclude: - """ - Pre-defined constants for exclusion. By default, fields are configured to - be included. - """ - ALWAYS: Callable[[object], bool] = lambda _: True - NEVER: Callable[[object], bool] = lambda _: False - - -# TODO: add warnings? -class _GlobalConfig: - - def __init__(self): - self.encoders: Dict[Union[type, Optional[type]], Callable] = {} - self.decoders: Dict[Union[type, Optional[type]], Callable] = {} - self.mm_fields: Dict[ - Union[type, Optional[type]], - MarshmallowField - ] = {} - # self._json_module = json - - # TODO: #180 - # @property - # def json_module(self): - # return self._json_module - # - # @json_module.setter - # def json_module(self, value): - # warnings.warn(f"Now using {value.__name__} module to handle JSON. " - # f"{self._disable_msg}") - # self._json_module = value - - -global_config = _GlobalConfig() - - -class LetterCase(Enum): - CAMEL = camelcase - KEBAB = spinalcase - SNAKE = snakecase - PASCAL = pascalcase - - -def config(metadata: Optional[dict] = None, *, - # TODO: these can be typed more precisely - # Specifically, a Callable[A, B], where `B` is bound as a JSON type - encoder: Optional[Callable] = None, - decoder: Optional[Callable] = None, - mm_field: Optional[MarshmallowField] = None, - letter_case: Union[Callable[[str], str], LetterCase, None] = None, - undefined: Optional[Union[str, Undefined]] = None, - field_name: Optional[str] = None, - exclude: Optional[Callable[[T], bool]] = None, - ) -> Dict[str, dict]: - if metadata is None: - metadata = {} - - lib_metadata = metadata.setdefault('dataclasses_json', {}) - - if encoder is not None: - lib_metadata['encoder'] = encoder - - if decoder is not None: - lib_metadata['decoder'] = decoder - - if mm_field is not None: - lib_metadata['mm_field'] = mm_field - - if field_name is not None: - if letter_case is not None: - @functools.wraps(letter_case) # type:ignore - def override(_, _letter_case=letter_case, _field_name=field_name): - return _letter_case(_field_name) - else: - def override(_, _field_name=field_name): # type:ignore - return _field_name - letter_case = override - - if letter_case is not None: - lib_metadata['letter_case'] = letter_case - - if undefined is not None: - # Get the corresponding action for undefined parameters - if isinstance(undefined, str): - if not hasattr(Undefined, undefined.upper()): - valid_actions = list(action.name for action in Undefined) - raise UndefinedParameterError( - f"Invalid undefined parameter action, " - f"must be one of {valid_actions}") - undefined = Undefined[undefined.upper()] - - lib_metadata['undefined'] = undefined - - if exclude is not None: - lib_metadata['exclude'] = exclude - - return metadata diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/core.py b/myenv/lib/python3.12/site-packages/dataclasses_json/core.py deleted file mode 100644 index 69f51a3..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/core.py +++ /dev/null @@ -1,475 +0,0 @@ -import copy -import json -import sys -import warnings -from collections import defaultdict, namedtuple -from collections.abc import (Collection as ABCCollection, Mapping as ABCMapping, MutableMapping, MutableSequence, - MutableSet, Sequence, Set) -from dataclasses import (MISSING, - fields, - is_dataclass # type: ignore - ) -from datetime import datetime, timezone -from decimal import Decimal -from enum import Enum -from types import MappingProxyType -from typing import (Any, Collection, Mapping, Union, get_type_hints, - Tuple, TypeVar, Type) -from uuid import UUID - -from typing_inspect import is_union_type # type: ignore - -from dataclasses_json import cfg -from dataclasses_json.utils import (_get_type_cons, _get_type_origin, - _handle_undefined_parameters_safe, - _is_collection, _is_mapping, _is_new_type, - _is_optional, _isinstance_safe, - _get_type_arg_param, - _get_type_args, _is_counter, - _NO_ARGS, - _issubclass_safe, _is_tuple, - _is_generic_dataclass) - -Json = Union[dict, list, str, int, float, bool, None] - -confs = ['encoder', 'decoder', 'mm_field', 'letter_case', 'exclude'] -FieldOverride = namedtuple('FieldOverride', confs) # type: ignore -collections_abc_type_to_implementation_type = MappingProxyType({ - ABCCollection: tuple, - ABCMapping: dict, - MutableMapping: dict, - MutableSequence: list, - MutableSet: set, - Sequence: tuple, - Set: frozenset, -}) - - -class _ExtendedEncoder(json.JSONEncoder): - def default(self, o) -> Json: - result: Json - if _isinstance_safe(o, Collection): - if _isinstance_safe(o, Mapping): - result = dict(o) - else: - result = list(o) - elif _isinstance_safe(o, datetime): - result = o.timestamp() - elif _isinstance_safe(o, UUID): - result = str(o) - elif _isinstance_safe(o, Enum): - result = o.value - elif _isinstance_safe(o, Decimal): - result = str(o) - else: - result = json.JSONEncoder.default(self, o) - return result - - -def _user_overrides_or_exts(cls): - global_metadata = defaultdict(dict) - encoders = cfg.global_config.encoders - decoders = cfg.global_config.decoders - mm_fields = cfg.global_config.mm_fields - for field in fields(cls): - if field.type in encoders: - global_metadata[field.name]['encoder'] = encoders[field.type] - if field.type in decoders: - global_metadata[field.name]['decoder'] = decoders[field.type] - if field.type in mm_fields: - global_metadata[field.name]['mm_field'] = mm_fields[field.type] - try: - cls_config = (cls.dataclass_json_config - if cls.dataclass_json_config is not None else {}) - except AttributeError: - cls_config = {} - - overrides = {} - for field in fields(cls): - field_config = {} - # first apply global overrides or extensions - field_metadata = global_metadata[field.name] - if 'encoder' in field_metadata: - field_config['encoder'] = field_metadata['encoder'] - if 'decoder' in field_metadata: - field_config['decoder'] = field_metadata['decoder'] - if 'mm_field' in field_metadata: - field_config['mm_field'] = field_metadata['mm_field'] - # then apply class-level overrides or extensions - field_config.update(cls_config) - # last apply field-level overrides or extensions - field_config.update(field.metadata.get('dataclasses_json', {})) - overrides[field.name] = FieldOverride(*map(field_config.get, confs)) - return overrides - - -def _encode_json_type(value, default=_ExtendedEncoder().default): - if isinstance(value, Json.__args__): # type: ignore - if isinstance(value, list): - return [_encode_json_type(i) for i in value] - elif isinstance(value, dict): - return {k: _encode_json_type(v) for k, v in value.items()} - else: - return value - return default(value) - - -def _encode_overrides(kvs, overrides, encode_json=False): - override_kvs = {} - for k, v in kvs.items(): - if k in overrides: - exclude = overrides[k].exclude - # If the exclude predicate returns true, the key should be - # excluded from encoding, so skip the rest of the loop - if exclude and exclude(v): - continue - letter_case = overrides[k].letter_case - original_key = k - k = letter_case(k) if letter_case is not None else k - if k in override_kvs: - raise ValueError( - f"Multiple fields map to the same JSON " - f"key after letter case encoding: {k}" - ) - - encoder = overrides[original_key].encoder - v = encoder(v) if encoder is not None else v - - if encode_json: - v = _encode_json_type(v) - override_kvs[k] = v - return override_kvs - - -def _decode_letter_case_overrides(field_names, overrides): - """Override letter case of field names for encode/decode""" - names = {} - for field_name in field_names: - field_override = overrides.get(field_name) - if field_override is not None: - letter_case = field_override.letter_case - if letter_case is not None: - names[letter_case(field_name)] = field_name - return names - - -def _decode_dataclass(cls, kvs, infer_missing): - if _isinstance_safe(kvs, cls): - return kvs - overrides = _user_overrides_or_exts(cls) - kvs = {} if kvs is None and infer_missing else kvs - field_names = [field.name for field in fields(cls)] - decode_names = _decode_letter_case_overrides(field_names, overrides) - kvs = {decode_names.get(k, k): v for k, v in kvs.items()} - missing_fields = {field for field in fields(cls) if field.name not in kvs} - - for field in missing_fields: - if field.default is not MISSING: - kvs[field.name] = field.default - elif field.default_factory is not MISSING: - kvs[field.name] = field.default_factory() - elif infer_missing: - kvs[field.name] = None - - # Perform undefined parameter action - kvs = _handle_undefined_parameters_safe(cls, kvs, usage="from") - - init_kwargs = {} - types = get_type_hints(cls) - for field in fields(cls): - # The field should be skipped from being added - # to init_kwargs as it's not intended as a constructor argument. - if not field.init: - continue - - field_value = kvs[field.name] - field_type = types[field.name] - if field_value is None: - if not _is_optional(field_type): - warning = ( - f"value of non-optional type {field.name} detected " - f"when decoding {cls.__name__}" - ) - if infer_missing: - warnings.warn( - f"Missing {warning} and was defaulted to None by " - f"infer_missing=True. " - f"Set infer_missing=False (the default) to prevent " - f"this behavior.", RuntimeWarning - ) - else: - warnings.warn( - f"'NoneType' object {warning}.", RuntimeWarning - ) - init_kwargs[field.name] = field_value - continue - - while True: - if not _is_new_type(field_type): - break - - field_type = field_type.__supertype__ - - if (field.name in overrides - and overrides[field.name].decoder is not None): - # FIXME hack - if field_type is type(field_value): - init_kwargs[field.name] = field_value - else: - init_kwargs[field.name] = overrides[field.name].decoder( - field_value) - elif is_dataclass(field_type): - # FIXME this is a band-aid to deal with the value already being - # serialized when handling nested marshmallow schema - # proper fix is to investigate the marshmallow schema generation - # code - if is_dataclass(field_value): - value = field_value - else: - value = _decode_dataclass(field_type, field_value, - infer_missing) - init_kwargs[field.name] = value - elif _is_supported_generic(field_type) and field_type != str: - init_kwargs[field.name] = _decode_generic(field_type, - field_value, - infer_missing) - else: - init_kwargs[field.name] = _support_extended_types(field_type, - field_value) - - return cls(**init_kwargs) - - -def _decode_type(type_, value, infer_missing): - if _has_decoder_in_global_config(type_): - return _get_decoder_in_global_config(type_)(value) - if _is_supported_generic(type_): - return _decode_generic(type_, value, infer_missing) - if is_dataclass(type_) or is_dataclass(value): - return _decode_dataclass(type_, value, infer_missing) - return _support_extended_types(type_, value) - - -def _support_extended_types(field_type, field_value): - if _issubclass_safe(field_type, datetime): - # FIXME this is a hack to deal with mm already decoding - # the issue is we want to leverage mm fields' missing argument - # but need this for the object creation hook - if isinstance(field_value, datetime): - res = field_value - else: - tz = datetime.now(timezone.utc).astimezone().tzinfo - res = datetime.fromtimestamp(field_value, tz=tz) - elif _issubclass_safe(field_type, Decimal): - res = (field_value - if isinstance(field_value, Decimal) - else Decimal(field_value)) - elif _issubclass_safe(field_type, UUID): - res = (field_value - if isinstance(field_value, UUID) - else UUID(field_value)) - elif _issubclass_safe(field_type, (int, float, str, bool)): - res = (field_value - if isinstance(field_value, field_type) - else field_type(field_value)) - else: - res = field_value - return res - - -def _is_supported_generic(type_): - if type_ is _NO_ARGS: - return False - not_str = not _issubclass_safe(type_, str) - is_enum = _issubclass_safe(type_, Enum) - is_generic_dataclass = _is_generic_dataclass(type_) - return (not_str and _is_collection(type_)) or _is_optional( - type_) or is_union_type(type_) or is_enum or is_generic_dataclass - - -def _decode_generic(type_, value, infer_missing): - if value is None: - res = value - elif _issubclass_safe(type_, Enum): - # Convert to an Enum using the type as a constructor. - # Assumes a direct match is found. - res = type_(value) - # FIXME this is a hack to fix a deeper underlying issue. A refactor is due. - elif _is_collection(type_): - if _is_mapping(type_) and not _is_counter(type_): - k_type, v_type = _get_type_args(type_, (Any, Any)) - # a mapping type has `.keys()` and `.values()` - # (see collections.abc) - ks = _decode_dict_keys(k_type, value.keys(), infer_missing) - vs = _decode_items(v_type, value.values(), infer_missing) - xs = zip(ks, vs) - elif _is_tuple(type_): - types = _get_type_args(type_) - if Ellipsis in types: - xs = _decode_items(types[0], value, infer_missing) - else: - xs = _decode_items(_get_type_args(type_) or _NO_ARGS, value, infer_missing) - elif _is_counter(type_): - xs = dict(zip(_decode_items(_get_type_arg_param(type_, 0), value.keys(), infer_missing), value.values())) - else: - xs = _decode_items(_get_type_arg_param(type_, 0), value, infer_missing) - - collection_type = _resolve_collection_type_to_decode_to(type_) - res = collection_type(xs) - elif _is_generic_dataclass(type_): - origin = _get_type_origin(type_) - res = _decode_dataclass(origin, value, infer_missing) - else: # Optional or Union - _args = _get_type_args(type_) - if _args is _NO_ARGS: - # Any, just accept - res = value - elif _is_optional(type_) and len(_args) == 2: # Optional - type_arg = _get_type_arg_param(type_, 0) - res = _decode_type(type_arg, value, infer_missing) - else: # Union (already decoded or try to decode a dataclass) - type_options = _get_type_args(type_) - res = value # assume already decoded - if type(value) is dict and dict not in type_options: - for type_option in type_options: - if is_dataclass(type_option): - try: - res = _decode_dataclass(type_option, value, infer_missing) - break - except (KeyError, ValueError, AttributeError): - continue - if res == value: - warnings.warn( - f"Failed to decode {value} Union dataclasses." - f"Expected Union to include a matching dataclass and it didn't." - ) - return res - - -def _decode_dict_keys(key_type, xs, infer_missing): - """ - Because JSON object keys must be strs, we need the extra step of decoding - them back into the user's chosen python type - """ - decode_function = key_type - # handle NoneType keys... it's weird to type a Dict as NoneType keys - # but it's valid... - # Issue #341 and PR #346: - # This is a special case for Python 3.7 and Python 3.8. - # By some reason, "unbound" dicts are counted - # as having key type parameter to be TypeVar('KT') - if key_type is None or key_type == Any or isinstance(key_type, TypeVar): - decode_function = key_type = (lambda x: x) - # handle a nested python dict that has tuples for keys. E.g. for - # Dict[Tuple[int], int], key_type will be typing.Tuple[int], but - # decode_function should be tuple, so map() doesn't break. - # - # Note: _get_type_origin() will return typing.Tuple for python - # 3.6 and tuple for 3.7 and higher. - elif _get_type_origin(key_type) in {tuple, Tuple}: - decode_function = tuple - key_type = key_type - - return map(decode_function, _decode_items(key_type, xs, infer_missing)) - - -def _decode_items(type_args, xs, infer_missing): - """ - This is a tricky situation where we need to check both the annotated - type info (which is usually a type from `typing`) and check the - value's type directly using `type()`. - - If the type_arg is a generic we can use the annotated type, but if the - type_arg is a typevar we need to extract the reified type information - hence the check of `is_dataclass(vs)` - """ - def handle_pep0673(pre_0673_hint: str) -> Union[Type, str]: - for module in sys.modules.values(): - if hasattr(module, type_args): - maybe_resolved = getattr(module, type_args) - warnings.warn(f"Assuming hint {pre_0673_hint} resolves to {maybe_resolved} " - "This is not necessarily the value that is in-scope.") - return maybe_resolved - - warnings.warn(f"Could not resolve self-reference for type {pre_0673_hint}, " - f"decoded type might be incorrect or decode might fail altogether.") - return pre_0673_hint - - # Before https://peps.python.org/pep-0673 (3.11+) self-type hints are simply strings - if sys.version_info.minor < 11 and type_args is not type and type(type_args) is str: - type_args = handle_pep0673(type_args) - - if _isinstance_safe(type_args, Collection) and not _issubclass_safe(type_args, Enum): - if len(type_args) == len(xs): - return list(_decode_type(type_arg, x, infer_missing) for type_arg, x in zip(type_args, xs)) - else: - raise TypeError(f"Number of types specified in the collection type {str(type_args)} " - f"does not match number of elements in the collection. In case you are working with tuples" - f"take a look at this document " - f"docs.python.org/3/library/typing.html#annotating-tuples.") - return list(_decode_type(type_args, x, infer_missing) for x in xs) - - -def _resolve_collection_type_to_decode_to(type_): - # get the constructor if using corresponding generic type in `typing` - # otherwise fallback on constructing using type_ itself - try: - collection_type = _get_type_cons(type_) - except (TypeError, AttributeError): - collection_type = type_ - - # map abstract collection to concrete implementation - return collections_abc_type_to_implementation_type.get(collection_type, collection_type) - - -def _asdict(obj, encode_json=False): - """ - A re-implementation of `asdict` (based on the original in the `dataclasses` - source) to support arbitrary Collection and Mapping types. - """ - if is_dataclass(obj): - result = [] - overrides = _user_overrides_or_exts(obj) - for field in fields(obj): - if overrides[field.name].encoder: - value = getattr(obj, field.name) - else: - value = _asdict( - getattr(obj, field.name), - encode_json=encode_json - ) - result.append((field.name, value)) - - result = _handle_undefined_parameters_safe(cls=obj, kvs=dict(result), - usage="to") - return _encode_overrides(dict(result), _user_overrides_or_exts(obj), - encode_json=encode_json) - elif isinstance(obj, Mapping): - return dict((_asdict(k, encode_json=encode_json), - _asdict(v, encode_json=encode_json)) for k, v in - obj.items()) - # enum.IntFlag and enum.Flag are regarded as collections in Python 3.11, thus a check against Enum is needed - elif isinstance(obj, Collection) and not isinstance(obj, (str, bytes, Enum)): - return list(_asdict(v, encode_json=encode_json) for v in obj) - # encoding of generics primarily relies on concrete types while decoding relies on type annotations. This makes - # applying encoders/decoders from global configuration inconsistent. - elif _has_encoder_in_global_config(type(obj)): - return _get_encoder_in_global_config(type(obj))(obj) - else: - return copy.deepcopy(obj) - - -def _has_decoder_in_global_config(type_): - return type_ in cfg.global_config.decoders - - -def _get_decoder_in_global_config(type_): - return cfg.global_config.decoders[type_] - - -def _has_encoder_in_global_config(type_): - return type_ in cfg.global_config.encoders - - -def _get_encoder_in_global_config(type_): - return cfg.global_config.encoders[type_] diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/mm.py b/myenv/lib/python3.12/site-packages/dataclasses_json/mm.py deleted file mode 100644 index 9cfacf1..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/mm.py +++ /dev/null @@ -1,399 +0,0 @@ -# flake8: noqa - -import typing -import warnings -import sys -from copy import deepcopy - -from dataclasses import MISSING, is_dataclass, fields as dc_fields -from datetime import datetime -from decimal import Decimal -from uuid import UUID -from enum import Enum - -from typing_inspect import is_union_type # type: ignore - -from marshmallow import fields, Schema, post_load # type: ignore -from marshmallow.exceptions import ValidationError # type: ignore - -from dataclasses_json.core import (_is_supported_generic, _decode_dataclass, - _ExtendedEncoder, _user_overrides_or_exts) -from dataclasses_json.utils import (_is_collection, _is_optional, - _issubclass_safe, _timestamp_to_dt_aware, - _is_new_type, _get_type_origin, - _handle_undefined_parameters_safe, - CatchAllVar) - - -class _TimestampField(fields.Field): - def _serialize(self, value, attr, obj, **kwargs): - if value is not None: - return value.timestamp() - else: - if not self.required: - return None - else: - raise ValidationError(self.default_error_messages["required"]) - - def _deserialize(self, value, attr, data, **kwargs): - if value is not None: - return _timestamp_to_dt_aware(value) - else: - if not self.required: - return None - else: - raise ValidationError(self.default_error_messages["required"]) - - -class _IsoField(fields.Field): - def _serialize(self, value, attr, obj, **kwargs): - if value is not None: - return value.isoformat() - else: - if not self.required: - return None - else: - raise ValidationError(self.default_error_messages["required"]) - - def _deserialize(self, value, attr, data, **kwargs): - if value is not None: - return datetime.fromisoformat(value) - else: - if not self.required: - return None - else: - raise ValidationError(self.default_error_messages["required"]) - - -class _UnionField(fields.Field): - def __init__(self, desc, cls, field, *args, **kwargs): - self.desc = desc - self.cls = cls - self.field = field - super().__init__(*args, **kwargs) - - def _serialize(self, value, attr, obj, **kwargs): - if self.allow_none and value is None: - return None - for type_, schema_ in self.desc.items(): - if _issubclass_safe(type(value), type_): - if is_dataclass(value): - res = schema_._serialize(value, attr, obj, **kwargs) - res['__type'] = str(type_.__name__) - return res - break - elif isinstance(value, _get_type_origin(type_)): - return schema_._serialize(value, attr, obj, **kwargs) - else: - warnings.warn( - f'The type "{type(value).__name__}" (value: "{value}") ' - f'is not in the list of possible types of typing.Union ' - f'(dataclass: {self.cls.__name__}, field: {self.field.name}). ' - f'Value cannot be serialized properly.') - return super()._serialize(value, attr, obj, **kwargs) - - def _deserialize(self, value, attr, data, **kwargs): - tmp_value = deepcopy(value) - if isinstance(tmp_value, dict) and '__type' in tmp_value: - dc_name = tmp_value['__type'] - for type_, schema_ in self.desc.items(): - if is_dataclass(type_) and type_.__name__ == dc_name: - del tmp_value['__type'] - return schema_._deserialize(tmp_value, attr, data, **kwargs) - elif isinstance(tmp_value, dict): - warnings.warn( - f'Attempting to deserialize "dict" (value: "{tmp_value}) ' - f'that does not have a "__type" type specifier field into' - f'(dataclass: {self.cls.__name__}, field: {self.field.name}).' - f'Deserialization may fail, or deserialization to wrong type may occur.' - ) - return super()._deserialize(tmp_value, attr, data, **kwargs) - else: - for type_, schema_ in self.desc.items(): - if isinstance(tmp_value, _get_type_origin(type_)): - return schema_._deserialize(tmp_value, attr, data, **kwargs) - else: - warnings.warn( - f'The type "{type(tmp_value).__name__}" (value: "{tmp_value}") ' - f'is not in the list of possible types of typing.Union ' - f'(dataclass: {self.cls.__name__}, field: {self.field.name}). ' - f'Value cannot be deserialized properly.') - return super()._deserialize(tmp_value, attr, data, **kwargs) - - -class _TupleVarLen(fields.List): - """ - variable-length homogeneous tuples - """ - def _deserialize(self, value, attr, data, **kwargs): - optional_list = super()._deserialize(value, attr, data, **kwargs) - return None if optional_list is None else tuple(optional_list) - - -TYPES = { - typing.Mapping: fields.Mapping, - typing.MutableMapping: fields.Mapping, - typing.List: fields.List, - typing.Dict: fields.Dict, - typing.Tuple: fields.Tuple, - typing.Callable: fields.Function, - typing.Any: fields.Raw, - dict: fields.Dict, - list: fields.List, - tuple: fields.Tuple, - str: fields.Str, - int: fields.Int, - float: fields.Float, - bool: fields.Bool, - datetime: _TimestampField, - UUID: fields.UUID, - Decimal: fields.Decimal, - CatchAllVar: fields.Dict, -} - -A = typing.TypeVar('A') -JsonData = typing.Union[str, bytes, bytearray] -TEncoded = typing.Dict[str, typing.Any] -TOneOrMulti = typing.Union[typing.List[A], A] -TOneOrMultiEncoded = typing.Union[typing.List[TEncoded], TEncoded] - -if sys.version_info >= (3, 7) or typing.TYPE_CHECKING: - class SchemaF(Schema, typing.Generic[A]): - """Lift Schema into a type constructor""" - - def __init__(self, *args, **kwargs): - """ - Raises exception because this class should not be inherited. - This class is helper only. - """ - - super().__init__(*args, **kwargs) - raise NotImplementedError() - - @typing.overload - def dump(self, obj: typing.List[A], many: typing.Optional[bool] = None) -> typing.List[TEncoded]: # type: ignore - # mm has the wrong return type annotation (dict) so we can ignore the mypy error - pass - - @typing.overload - def dump(self, obj: A, many: typing.Optional[bool] = None) -> TEncoded: - pass - - def dump(self, obj: TOneOrMulti, # type: ignore - many: typing.Optional[bool] = None) -> TOneOrMultiEncoded: - pass - - @typing.overload - def dumps(self, obj: typing.List[A], many: typing.Optional[bool] = None, *args, - **kwargs) -> str: - pass - - @typing.overload - def dumps(self, obj: A, many: typing.Optional[bool] = None, *args, **kwargs) -> str: - pass - - def dumps(self, obj: TOneOrMulti, many: typing.Optional[bool] = None, *args, # type: ignore - **kwargs) -> str: - pass - - @typing.overload # type: ignore - def load(self, data: typing.List[TEncoded], - many: bool = True, partial: typing.Optional[bool] = None, - unknown: typing.Optional[str] = None) -> \ - typing.List[A]: - # ignore the mypy error of the decorator because mm does not define lists as an allowed input type - pass - - @typing.overload - def load(self, data: TEncoded, - many: None = None, partial: typing.Optional[bool] = None, - unknown: typing.Optional[str] = None) -> A: - pass - - def load(self, data: TOneOrMultiEncoded, - many: typing.Optional[bool] = None, partial: typing.Optional[bool] = None, - unknown: typing.Optional[str] = None) -> TOneOrMulti: - pass - - @typing.overload # type: ignore - def loads(self, json_data: JsonData, # type: ignore - many: typing.Optional[bool] = True, partial: typing.Optional[bool] = None, unknown: typing.Optional[str] = None, - **kwargs) -> typing.List[A]: - # ignore the mypy error of the decorator because mm does not define bytes as correct input data - # mm has the wrong return type annotation (dict) so we can ignore the mypy error - # for the return type overlap - pass - - def loads(self, json_data: JsonData, - many: typing.Optional[bool] = None, partial: typing.Optional[bool] = None, unknown: typing.Optional[str] = None, - **kwargs) -> TOneOrMulti: - pass - - - SchemaType = SchemaF[A] -else: - SchemaType = Schema - - -def build_type(type_, options, mixin, field, cls): - def inner(type_, options): - while True: - if not _is_new_type(type_): - break - - type_ = type_.__supertype__ - - if is_dataclass(type_): - if _issubclass_safe(type_, mixin): - options['field_many'] = bool( - _is_supported_generic(field.type) and _is_collection( - field.type)) - return fields.Nested(type_.schema(), **options) - else: - warnings.warn(f"Nested dataclass field {field.name} of type " - f"{field.type} detected in " - f"{cls.__name__} that is not an instance of " - f"dataclass_json. Did you mean to recursively " - f"serialize this field? If so, make sure to " - f"augment {type_} with either the " - f"`dataclass_json` decorator or mixin.") - return fields.Field(**options) - - origin = getattr(type_, '__origin__', type_) - args = [inner(a, {}) for a in getattr(type_, '__args__', []) if - a is not type(None)] - - if type_ == Ellipsis: - return type_ - - if _is_optional(type_): - options["allow_none"] = True - if origin is tuple: - if len(args) == 2 and args[1] == Ellipsis: - return _TupleVarLen(args[0], **options) - else: - return fields.Tuple(args, **options) - if origin in TYPES: - return TYPES[origin](*args, **options) - - if _issubclass_safe(origin, Enum): - return fields.Enum(enum=origin, by_value=True, *args, **options) - - if is_union_type(type_): - union_types = [a for a in getattr(type_, '__args__', []) if - a is not type(None)] - union_desc = dict(zip(union_types, args)) - return _UnionField(union_desc, cls, field, **options) - - warnings.warn( - f"Unknown type {type_} at {cls.__name__}.{field.name}: {field.type} " - f"It's advised to pass the correct marshmallow type to `mm_field`.") - return fields.Field(**options) - - return inner(type_, options) - - -def schema(cls, mixin, infer_missing): - schema = {} - overrides = _user_overrides_or_exts(cls) - # TODO check the undefined parameters and add the proper schema action - # https://marshmallow.readthedocs.io/en/stable/quickstart.html - for field in dc_fields(cls): - metadata = overrides[field.name] - if metadata.mm_field is not None: - schema[field.name] = metadata.mm_field - else: - type_ = field.type - options: typing.Dict[str, typing.Any] = {} - missing_key = 'missing' if infer_missing else 'default' - if field.default is not MISSING: - options[missing_key] = field.default - elif field.default_factory is not MISSING: - options[missing_key] = field.default_factory() - else: - options['required'] = True - - if options.get(missing_key, ...) is None: - options['allow_none'] = True - - if _is_optional(type_): - options.setdefault(missing_key, None) - options['allow_none'] = True - if len(type_.__args__) == 2: - # Union[str, int, None] is optional too, but it has more than 1 typed field. - type_ = [tp for tp in type_.__args__ if tp is not type(None)][0] - - if metadata.letter_case is not None: - options['data_key'] = metadata.letter_case(field.name) - - t = build_type(type_, options, mixin, field, cls) - if field.metadata.get('dataclasses_json', {}).get('decoder'): - # If the field defines a custom decoder, it should completely replace the Marshmallow field's conversion - # logic. - # From Marshmallow's documentation for the _deserialize method: - # "Deserialize value. Concrete :class:`Field` classes should implement this method. " - # This is the method that Field implementations override to perform the actual deserialization logic. - # In this case we specifically override this method instead of `deserialize` to minimize potential - # side effects, and only cancel the actual value deserialization. - t._deserialize = lambda v, *_a, **_kw: v - - # if type(t) is not fields.Field: # If we use `isinstance` we would return nothing. - if field.type != typing.Optional[CatchAllVar]: - schema[field.name] = t - - return schema - - -def build_schema(cls: typing.Type[A], - mixin, - infer_missing, - partial) -> typing.Type["SchemaType[A]"]: - Meta = type('Meta', - (), - {'fields': tuple(field.name for field in dc_fields(cls) # type: ignore - if - field.name != 'dataclass_json_config' and field.type != - typing.Optional[CatchAllVar]), - # TODO #180 - # 'render_module': global_config.json_module - }) - - @post_load - def make_instance(self, kvs, **kwargs): - return _decode_dataclass(cls, kvs, partial) - - def dumps(self, *args, **kwargs): - if 'cls' not in kwargs: - kwargs['cls'] = _ExtendedEncoder - - return Schema.dumps(self, *args, **kwargs) - - def dump(self, obj, *, many=None): - many = self.many if many is None else bool(many) - dumped = Schema.dump(self, obj, many=many) - # TODO This is hacky, but the other option I can think of is to generate a different schema - # depending on dump and load, which is even more hacky - - # The only problem is the catch-all field, we can't statically create a schema for it, - # so we just update the dumped dict - if many: - for i, _obj in enumerate(obj): - dumped[i].update( - _handle_undefined_parameters_safe(cls=_obj, kvs={}, - usage="dump")) - else: - dumped.update(_handle_undefined_parameters_safe(cls=obj, kvs={}, - usage="dump")) - return dumped - - schema_ = schema(cls, mixin, infer_missing) - DataClassSchema: typing.Type["SchemaType[A]"] = type( - f'{cls.__name__.capitalize()}Schema', - (Schema,), - {'Meta': Meta, - f'make_{cls.__name__.lower()}': make_instance, - 'dumps': dumps, - 'dump': dump, - **schema_}) - - return DataClassSchema diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/py.typed b/myenv/lib/python3.12/site-packages/dataclasses_json/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/stringcase.py b/myenv/lib/python3.12/site-packages/dataclasses_json/stringcase.py deleted file mode 100644 index da0f546..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/stringcase.py +++ /dev/null @@ -1,130 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2015 Taka Okunishi -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# Copyright © 2015-2018 Taka Okunishi . -# Copyright © 2020 Louis-Philippe Véronneau - -import re - - -def uplowcase(string, case): - """Convert string into upper or lower case. - - Args: - string: String to convert. - - Returns: - string: Uppercase or lowercase case string. - - """ - if case == 'up': - return str(string).upper() - elif case == 'low': - return str(string).lower() - - -def capitalcase(string): - """Convert string into capital case. - First letters will be uppercase. - - Args: - string: String to convert. - - Returns: - string: Capital case string. - - """ - - string = str(string) - if not string: - return string - return uplowcase(string[0], 'up') + string[1:] - - -def camelcase(string): - """ Convert string into camel case. - - Args: - string: String to convert. - - Returns: - string: Camel case string. - - """ - - string = re.sub(r"^[\-_\.]", '', str(string)) - if not string: - return string - return (uplowcase(string[0], 'low') - + re.sub(r"[\-_\.\s]([a-z0-9])", - lambda matched: uplowcase(matched.group(1), 'up'), - string[1:])) - - -def snakecase(string): - """Convert string into snake case. - Join punctuation with underscore - - Args: - string: String to convert. - - Returns: - string: Snake cased string. - - """ - - string = re.sub(r"[\-\.\s]", '_', str(string)) - if not string: - return string - return (uplowcase(string[0], 'low') - + re.sub(r"[A-Z0-9]", - lambda matched: '_' + uplowcase(matched.group(0), 'low'), - string[1:])) - - -def spinalcase(string): - """Convert string into spinal case. - Join punctuation with hyphen. - - Args: - string: String to convert. - - Returns: - string: Spinal cased string. - - """ - - return re.sub(r"_", "-", snakecase(string)) - - -def pascalcase(string): - """Convert string into pascal case. - - Args: - string: String to convert. - - Returns: - string: Pascal case string. - - """ - - return capitalcase(camelcase(string)) diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/undefined.py b/myenv/lib/python3.12/site-packages/dataclasses_json/undefined.py deleted file mode 100644 index cb8b2cf..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/undefined.py +++ /dev/null @@ -1,280 +0,0 @@ -import abc -import dataclasses -import functools -import inspect -import sys -from dataclasses import Field, fields -from typing import Any, Callable, Dict, Optional, Tuple, Union, Type, get_type_hints -from enum import Enum - -from marshmallow.exceptions import ValidationError # type: ignore - -from dataclasses_json.utils import CatchAllVar - -KnownParameters = Dict[str, Any] -UnknownParameters = Dict[str, Any] - - -class _UndefinedParameterAction(abc.ABC): - @staticmethod - @abc.abstractmethod - def handle_from_dict(cls, kvs: Dict[Any, Any]) -> Dict[str, Any]: - """ - Return the parameters to initialize the class with. - """ - pass - - @staticmethod - def handle_to_dict(obj, kvs: Dict[Any, Any]) -> Dict[Any, Any]: - """ - Return the parameters that will be written to the output dict - """ - return kvs - - @staticmethod - def handle_dump(obj) -> Dict[Any, Any]: - """ - Return the parameters that will be added to the schema dump. - """ - return {} - - @staticmethod - def create_init(obj) -> Callable: - return obj.__init__ - - @staticmethod - def _separate_defined_undefined_kvs(cls, kvs: Dict) -> \ - Tuple[KnownParameters, UnknownParameters]: - """ - Returns a 2 dictionaries: defined and undefined parameters - """ - class_fields = fields(cls) - field_names = [field.name for field in class_fields] - unknown_given_parameters = {k: v for k, v in kvs.items() if - k not in field_names} - known_given_parameters = {k: v for k, v in kvs.items() if - k in field_names} - return known_given_parameters, unknown_given_parameters - - -class _RaiseUndefinedParameters(_UndefinedParameterAction): - """ - This action raises UndefinedParameterError if it encounters an undefined - parameter during initialization. - """ - - @staticmethod - def handle_from_dict(cls, kvs: Dict) -> Dict[str, Any]: - known, unknown = \ - _UndefinedParameterAction._separate_defined_undefined_kvs( - cls=cls, kvs=kvs) - if len(unknown) > 0: - raise UndefinedParameterError( - f"Received undefined initialization arguments {unknown}") - return known - - -CatchAll = Optional[CatchAllVar] - - -class _IgnoreUndefinedParameters(_UndefinedParameterAction): - """ - This action does nothing when it encounters undefined parameters. - The undefined parameters can not be retrieved after the class has been - created. - """ - - @staticmethod - def handle_from_dict(cls, kvs: Dict) -> Dict[str, Any]: - known_given_parameters, _ = \ - _UndefinedParameterAction._separate_defined_undefined_kvs( - cls=cls, kvs=kvs) - return known_given_parameters - - @staticmethod - def create_init(obj) -> Callable: - original_init = obj.__init__ - init_signature = inspect.signature(original_init) - - @functools.wraps(obj.__init__) - def _ignore_init(self, *args, **kwargs): - known_kwargs, _ = \ - _CatchAllUndefinedParameters._separate_defined_undefined_kvs( - obj, kwargs) - num_params_takeable = len( - init_signature.parameters) - 1 # don't count self - num_args_takeable = num_params_takeable - len(known_kwargs) - - args = args[:num_args_takeable] - bound_parameters = init_signature.bind_partial(self, *args, - **known_kwargs) - bound_parameters.apply_defaults() - - arguments = bound_parameters.arguments - arguments.pop("self", None) - final_parameters = \ - _IgnoreUndefinedParameters.handle_from_dict(obj, arguments) - original_init(self, **final_parameters) - - return _ignore_init - - -class _CatchAllUndefinedParameters(_UndefinedParameterAction): - """ - This class allows to add a field of type utils.CatchAll which acts as a - dictionary into which all - undefined parameters will be written. - These parameters are not affected by LetterCase. - If no undefined parameters are given, this dictionary will be empty. - """ - - class _SentinelNoDefault: - pass - - @staticmethod - def handle_from_dict(cls, kvs: Dict) -> Dict[str, Any]: - known, unknown = _UndefinedParameterAction \ - ._separate_defined_undefined_kvs(cls=cls, kvs=kvs) - catch_all_field = _CatchAllUndefinedParameters._get_catch_all_field( - cls=cls) - - if catch_all_field.name in known: - - already_parsed = isinstance(known[catch_all_field.name], dict) - default_value = _CatchAllUndefinedParameters._get_default( - catch_all_field=catch_all_field) - received_default = default_value == known[catch_all_field.name] - - value_to_write: Any - if received_default and len(unknown) == 0: - value_to_write = default_value - elif received_default and len(unknown) > 0: - value_to_write = unknown - elif already_parsed: - # Did not receive default - value_to_write = known[catch_all_field.name] - if len(unknown) > 0: - value_to_write.update(unknown) - else: - error_message = f"Received input field with " \ - f"same name as catch-all field: " \ - f"'{catch_all_field.name}': " \ - f"'{known[catch_all_field.name]}'" - raise UndefinedParameterError(error_message) - else: - value_to_write = unknown - - known[catch_all_field.name] = value_to_write - return known - - @staticmethod - def _get_default(catch_all_field: Field) -> Any: - # access to the default factory currently causes - # a false-positive mypy error (16. Dec 2019): - # https://github.com/python/mypy/issues/6910 - - # noinspection PyProtectedMember - has_default = not isinstance(catch_all_field.default, - dataclasses._MISSING_TYPE) - # noinspection PyProtectedMember - has_default_factory = not isinstance(catch_all_field.default_factory, - # type: ignore - dataclasses._MISSING_TYPE) - # TODO: black this for proper formatting - default_value: Union[ - Type[_CatchAllUndefinedParameters._SentinelNoDefault], Any] = _CatchAllUndefinedParameters\ - ._SentinelNoDefault - - if has_default: - default_value = catch_all_field.default - elif has_default_factory: - # This might be unwanted if the default factory constructs - # something expensive, - # because we have to construct it again just for this test - default_value = catch_all_field.default_factory() # type: ignore - - return default_value - - @staticmethod - def handle_to_dict(obj, kvs: Dict[Any, Any]) -> Dict[Any, Any]: - catch_all_field = \ - _CatchAllUndefinedParameters._get_catch_all_field(obj.__class__) - undefined_parameters = kvs.pop(catch_all_field.name) - if isinstance(undefined_parameters, dict): - kvs.update( - undefined_parameters) # If desired handle letter case here - return kvs - - @staticmethod - def handle_dump(obj) -> Dict[Any, Any]: - catch_all_field = _CatchAllUndefinedParameters._get_catch_all_field( - cls=obj) - return getattr(obj, catch_all_field.name) - - @staticmethod - def create_init(obj) -> Callable: - original_init = obj.__init__ - init_signature = inspect.signature(original_init) - - @functools.wraps(obj.__init__) - def _catch_all_init(self, *args, **kwargs): - known_kwargs, unknown_kwargs = \ - _CatchAllUndefinedParameters._separate_defined_undefined_kvs( - obj, kwargs) - num_params_takeable = len( - init_signature.parameters) - 1 # don't count self - if _CatchAllUndefinedParameters._get_catch_all_field( - obj).name not in known_kwargs: - num_params_takeable -= 1 - num_args_takeable = num_params_takeable - len(known_kwargs) - - args, unknown_args = args[:num_args_takeable], args[ - num_args_takeable:] - bound_parameters = init_signature.bind_partial(self, *args, - **known_kwargs) - - unknown_args = {f"_UNKNOWN{i}": v for i, v in - enumerate(unknown_args)} - arguments = bound_parameters.arguments - arguments.update(unknown_args) - arguments.update(unknown_kwargs) - arguments.pop("self", None) - final_parameters = _CatchAllUndefinedParameters.handle_from_dict( - obj, arguments) - original_init(self, **final_parameters) - - return _catch_all_init - - @staticmethod - def _get_catch_all_field(cls) -> Field: - cls_globals = vars(sys.modules[cls.__module__]) - types = get_type_hints(cls, globalns=cls_globals) - catch_all_fields = list( - filter(lambda f: types[f.name] == Optional[CatchAllVar], fields(cls))) - number_of_catch_all_fields = len(catch_all_fields) - if number_of_catch_all_fields == 0: - raise UndefinedParameterError( - "No field of type dataclasses_json.CatchAll defined") - elif number_of_catch_all_fields > 1: - raise UndefinedParameterError( - f"Multiple catch-all fields supplied: " - f"{number_of_catch_all_fields}.") - else: - return catch_all_fields[0] - - -class Undefined(Enum): - """ - Choose the behavior what happens when an undefined parameter is encountered - during class initialization. - """ - INCLUDE = _CatchAllUndefinedParameters - RAISE = _RaiseUndefinedParameters - EXCLUDE = _IgnoreUndefinedParameters - - -class UndefinedParameterError(ValidationError): - """ - Raised when something has gone wrong handling undefined parameters. - """ - pass diff --git a/myenv/lib/python3.12/site-packages/dataclasses_json/utils.py b/myenv/lib/python3.12/site-packages/dataclasses_json/utils.py deleted file mode 100644 index e28833a..0000000 --- a/myenv/lib/python3.12/site-packages/dataclasses_json/utils.py +++ /dev/null @@ -1,219 +0,0 @@ -import inspect -import sys -from datetime import datetime, timezone -from collections import Counter -from dataclasses import is_dataclass # type: ignore -from typing import (Collection, Mapping, Optional, TypeVar, Any, Type, Tuple, - Union, cast) - - -def _get_type_cons(type_): - """More spaghetti logic for 3.6 vs. 3.7""" - if sys.version_info.minor == 6: - try: - cons = type_.__extra__ - except AttributeError: - try: - cons = type_.__origin__ - except AttributeError: - cons = type_ - else: - cons = type_ if cons is None else cons - else: - try: - cons = type_.__origin__ if cons is None else cons - except AttributeError: - cons = type_ - else: - cons = type_.__origin__ - return cons - - -_NO_TYPE_ORIGIN = object() - - -def _get_type_origin(type_): - """Some spaghetti logic to accommodate differences between 3.6 and 3.7 in - the typing api""" - try: - origin = type_.__origin__ - except AttributeError: - # Issue #341 and PR #346: - # For some cases, the type_.__origin__ exists but is set to None - origin = _NO_TYPE_ORIGIN - - if sys.version_info.minor == 6: - try: - origin = type_.__extra__ - except AttributeError: - origin = type_ - else: - origin = type_ if origin in (None, _NO_TYPE_ORIGIN) else origin - elif origin is _NO_TYPE_ORIGIN: - origin = type_ - return origin - - -def _hasargs(type_, *args): - try: - res = all(arg in type_.__args__ for arg in args) - except AttributeError: - return False - except TypeError: - if (type_.__args__ is None): - return False - else: - raise - else: - return res - - -class _NoArgs(object): - def __bool__(self): - return False - - def __len__(self): - return 0 - - def __iter__(self): - return self - - def __next__(self): - raise StopIteration - - -_NO_ARGS = _NoArgs() - - -def _get_type_args(tp: Type, default: Union[Tuple[Type, ...], _NoArgs] = _NO_ARGS) -> \ - Union[Tuple[Type, ...], _NoArgs]: - if hasattr(tp, '__args__'): - if tp.__args__ is not None: - return tp.__args__ - return default - - -def _get_type_arg_param(tp: Type, index: int) -> Union[Type, _NoArgs]: - _args = _get_type_args(tp) - if _args is not _NO_ARGS: - try: - return cast(Tuple[Type, ...], _args)[index] - except (TypeError, IndexError, NotImplementedError): - pass - - return _NO_ARGS - - -def _isinstance_safe(o, t): - try: - result = isinstance(o, t) - except Exception: - return False - else: - return result - - -def _issubclass_safe(cls, classinfo): - try: - return issubclass(cls, classinfo) - except Exception: - return (_is_new_type_subclass_safe(cls, classinfo) - if _is_new_type(cls) - else False) - - -def _is_new_type_subclass_safe(cls, classinfo): - super_type = getattr(cls, "__supertype__", None) - - if super_type: - return _is_new_type_subclass_safe(super_type, classinfo) - - try: - return issubclass(cls, classinfo) - except Exception: - return False - - -def _is_new_type(type_): - return inspect.isfunction(type_) and hasattr(type_, "__supertype__") - - -def _is_optional(type_): - return (_issubclass_safe(type_, Optional) or - _hasargs(type_, type(None)) or - type_ is Any) - - -def _is_counter(type_): - return _issubclass_safe(_get_type_origin(type_), Counter) - - -def _is_mapping(type_): - return _issubclass_safe(_get_type_origin(type_), Mapping) - - -def _is_collection(type_): - return _issubclass_safe(_get_type_origin(type_), Collection) - - -def _is_tuple(type_): - return _issubclass_safe(_get_type_origin(type_), Tuple) - - -def _is_nonstr_collection(type_): - return (_issubclass_safe(_get_type_origin(type_), Collection) - and not _issubclass_safe(type_, str)) - - -def _is_generic_dataclass(type_): - return is_dataclass(_get_type_origin(type_)) - - -def _timestamp_to_dt_aware(timestamp: float): - tz = datetime.now(timezone.utc).astimezone().tzinfo - dt = datetime.fromtimestamp(timestamp, tz=tz) - return dt - - -def _undefined_parameter_action_safe(cls): - try: - if cls.dataclass_json_config is None: - return - action_enum = cls.dataclass_json_config['undefined'] - except (AttributeError, KeyError): - return - - if action_enum is None or action_enum.value is None: - return - - return action_enum - - -def _handle_undefined_parameters_safe(cls, kvs, usage: str): - """ - Checks if an undefined parameters action is defined and performs the - according action. - """ - undefined_parameter_action = _undefined_parameter_action_safe(cls) - usage = usage.lower() - if undefined_parameter_action is None: - return kvs if usage != "init" else cls.__init__ - if usage == "from": - return undefined_parameter_action.value.handle_from_dict(cls=cls, - kvs=kvs) - elif usage == "to": - return undefined_parameter_action.value.handle_to_dict(obj=cls, - kvs=kvs) - elif usage == "dump": - return undefined_parameter_action.value.handle_dump(obj=cls) - elif usage == "init": - return undefined_parameter_action.value.create_init(obj=cls) - else: - raise ValueError( - f"usage must be one of ['to', 'from', 'dump', 'init'], " - f"but is '{usage}'") - - -# Define a type for the CatchAll field -# https://stackoverflow.com/questions/59360567/define-a-custom-type-that-behaves-like-typing-any -CatchAllVar = TypeVar("CatchAllVar", bound=Mapping) diff --git a/myenv/lib/python3.12/site-packages/dateutil/__init__.py b/myenv/lib/python3.12/site-packages/dateutil/__init__.py deleted file mode 100644 index a2c19c0..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -import sys - -try: - from ._version import version as __version__ -except ImportError: - __version__ = 'unknown' - -__all__ = ['easter', 'parser', 'relativedelta', 'rrule', 'tz', - 'utils', 'zoneinfo'] - -def __getattr__(name): - import importlib - - if name in __all__: - return importlib.import_module("." + name, __name__) - raise AttributeError( - "module {!r} has not attribute {!r}".format(__name__, name) - ) - - -def __dir__(): - # __dir__ should include all the lazy-importable modules as well. - return [x for x in globals() if x not in sys.modules] + __all__ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 7cc2544..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc deleted file mode 100644 index 5d549ff..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc deleted file mode 100644 index 22b5354..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc deleted file mode 100644 index 2f7b956..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc deleted file mode 100644 index 773162f..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc deleted file mode 100644 index 0d4dae9..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc deleted file mode 100644 index 588b585..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 7dbe8e5..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/_common.py b/myenv/lib/python3.12/site-packages/dateutil/_common.py deleted file mode 100644 index 4eb2659..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/_common.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Common code used in multiple modules. -""" - - -class weekday(object): - __slots__ = ["weekday", "n"] - - def __init__(self, weekday, n=None): - self.weekday = weekday - self.n = n - - def __call__(self, n): - if n == self.n: - return self - else: - return self.__class__(self.weekday, n) - - def __eq__(self, other): - try: - if self.weekday != other.weekday or self.n != other.n: - return False - except AttributeError: - return False - return True - - def __hash__(self): - return hash(( - self.weekday, - self.n, - )) - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - s = ("MO", "TU", "WE", "TH", "FR", "SA", "SU")[self.weekday] - if not self.n: - return s - else: - return "%s(%+d)" % (s, self.n) - -# vim:ts=4:sw=4:et diff --git a/myenv/lib/python3.12/site-packages/dateutil/_version.py b/myenv/lib/python3.12/site-packages/dateutil/_version.py deleted file mode 100644 index ddda980..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# file generated by setuptools_scm -# don't change, don't track in version control -__version__ = version = '2.9.0.post0' -__version_tuple__ = version_tuple = (2, 9, 0) diff --git a/myenv/lib/python3.12/site-packages/dateutil/easter.py b/myenv/lib/python3.12/site-packages/dateutil/easter.py deleted file mode 100644 index f74d1f7..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/easter.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a generic Easter computing method for any given year, using -Western, Orthodox or Julian algorithms. -""" - -import datetime - -__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"] - -EASTER_JULIAN = 1 -EASTER_ORTHODOX = 2 -EASTER_WESTERN = 3 - - -def easter(year, method=EASTER_WESTERN): - """ - This method was ported from the work done by GM Arts, - on top of the algorithm by Claus Tondering, which was - based in part on the algorithm of Ouding (1940), as - quoted in "Explanatory Supplement to the Astronomical - Almanac", P. Kenneth Seidelmann, editor. - - This algorithm implements three different Easter - calculation methods: - - 1. Original calculation in Julian calendar, valid in - dates after 326 AD - 2. Original method, with date converted to Gregorian - calendar, valid in years 1583 to 4099 - 3. Revised method, in Gregorian calendar, valid in - years 1583 to 4099 as well - - These methods are represented by the constants: - - * ``EASTER_JULIAN = 1`` - * ``EASTER_ORTHODOX = 2`` - * ``EASTER_WESTERN = 3`` - - The default method is method 3. - - More about the algorithm may be found at: - - `GM Arts: Easter Algorithms `_ - - and - - `The Calendar FAQ: Easter `_ - - """ - - if not (1 <= method <= 3): - raise ValueError("invalid method") - - # g - Golden year - 1 - # c - Century - # h - (23 - Epact) mod 30 - # i - Number of days from March 21 to Paschal Full Moon - # j - Weekday for PFM (0=Sunday, etc) - # p - Number of days from March 21 to Sunday on or before PFM - # (-6 to 28 methods 1 & 3, to 56 for method 2) - # e - Extra days to add for method 2 (converting Julian - # date to Gregorian date) - - y = year - g = y % 19 - e = 0 - if method < 3: - # Old method - i = (19*g + 15) % 30 - j = (y + y//4 + i) % 7 - if method == 2: - # Extra dates to convert Julian to Gregorian date - e = 10 - if y > 1600: - e = e + y//100 - 16 - (y//100 - 16)//4 - else: - # New method - c = y//100 - h = (c - c//4 - (8*c + 13)//25 + 19*g + 15) % 30 - i = h - (h//28)*(1 - (h//28)*(29//(h + 1))*((21 - g)//11)) - j = (y + y//4 + i + 2 - c + c//4) % 7 - - # p can be from -6 to 56 corresponding to dates 22 March to 23 May - # (later dates apply to method 2, although 23 May never actually occurs) - p = i - j + e - d = 1 + (p + 27 + (p + 6)//40) % 31 - m = 3 + (p + 26)//30 - return datetime.date(int(y), int(m), int(d)) diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/__init__.py b/myenv/lib/python3.12/site-packages/dateutil/parser/__init__.py deleted file mode 100644 index d174b0e..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/parser/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -from ._parser import parse, parser, parserinfo, ParserError -from ._parser import DEFAULTPARSER, DEFAULTTZPARSER -from ._parser import UnknownTimezoneWarning - -from ._parser import __doc__ - -from .isoparser import isoparser, isoparse - -__all__ = ['parse', 'parser', 'parserinfo', - 'isoparse', 'isoparser', - 'ParserError', - 'UnknownTimezoneWarning'] - - -### -# Deprecate portions of the private interface so that downstream code that -# is improperly relying on it is given *some* notice. - - -def __deprecated_private_func(f): - from functools import wraps - import warnings - - msg = ('{name} is a private function and may break without warning, ' - 'it will be moved and or renamed in future versions.') - msg = msg.format(name=f.__name__) - - @wraps(f) - def deprecated_func(*args, **kwargs): - warnings.warn(msg, DeprecationWarning) - return f(*args, **kwargs) - - return deprecated_func - -def __deprecate_private_class(c): - import warnings - - msg = ('{name} is a private class and may break without warning, ' - 'it will be moved and or renamed in future versions.') - msg = msg.format(name=c.__name__) - - class private_class(c): - __doc__ = c.__doc__ - - def __init__(self, *args, **kwargs): - warnings.warn(msg, DeprecationWarning) - super(private_class, self).__init__(*args, **kwargs) - - private_class.__name__ = c.__name__ - - return private_class - - -from ._parser import _timelex, _resultbase -from ._parser import _tzparser, _parsetz - -_timelex = __deprecate_private_class(_timelex) -_tzparser = __deprecate_private_class(_tzparser) -_resultbase = __deprecate_private_class(_resultbase) -_parsetz = __deprecated_private_func(_parsetz) diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f7c4377..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc deleted file mode 100644 index 691bf5f..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc deleted file mode 100644 index 349a5d9..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/_parser.py b/myenv/lib/python3.12/site-packages/dateutil/parser/_parser.py deleted file mode 100644 index 37d1663..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/parser/_parser.py +++ /dev/null @@ -1,1613 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a generic date/time string parser which is able to parse -most known formats to represent a date and/or time. - -This module attempts to be forgiving with regards to unlikely input formats, -returning a datetime object even for dates which are ambiguous. If an element -of a date/time stamp is omitted, the following rules are applied: - -- If AM or PM is left unspecified, a 24-hour clock is assumed, however, an hour - on a 12-hour clock (``0 <= hour <= 12``) *must* be specified if AM or PM is - specified. -- If a time zone is omitted, a timezone-naive datetime is returned. - -If any other elements are missing, they are taken from the -:class:`datetime.datetime` object passed to the parameter ``default``. If this -results in a day number exceeding the valid number of days per month, the -value falls back to the end of the month. - -Additional resources about date/time string formats can be found below: - -- `A summary of the international standard date and time notation - `_ -- `W3C Date and Time Formats `_ -- `Time Formats (Planetary Rings Node) `_ -- `CPAN ParseDate module - `_ -- `Java SimpleDateFormat Class - `_ -""" -from __future__ import unicode_literals - -import datetime -import re -import string -import time -import warnings - -from calendar import monthrange -from io import StringIO - -import six -from six import integer_types, text_type - -from decimal import Decimal - -from warnings import warn - -from .. import relativedelta -from .. import tz - -__all__ = ["parse", "parserinfo", "ParserError"] - - -# TODO: pandas.core.tools.datetimes imports this explicitly. Might be worth -# making public and/or figuring out if there is something we can -# take off their plate. -class _timelex(object): - # Fractional seconds are sometimes split by a comma - _split_decimal = re.compile("([.,])") - - def __init__(self, instream): - if isinstance(instream, (bytes, bytearray)): - instream = instream.decode() - - if isinstance(instream, text_type): - instream = StringIO(instream) - elif getattr(instream, 'read', None) is None: - raise TypeError('Parser must be a string or character stream, not ' - '{itype}'.format(itype=instream.__class__.__name__)) - - self.instream = instream - self.charstack = [] - self.tokenstack = [] - self.eof = False - - def get_token(self): - """ - This function breaks the time string into lexical units (tokens), which - can be parsed by the parser. Lexical units are demarcated by changes in - the character set, so any continuous string of letters is considered - one unit, any continuous string of numbers is considered one unit. - - The main complication arises from the fact that dots ('.') can be used - both as separators (e.g. "Sep.20.2009") or decimal points (e.g. - "4:30:21.447"). As such, it is necessary to read the full context of - any dot-separated strings before breaking it into tokens; as such, this - function maintains a "token stack", for when the ambiguous context - demands that multiple tokens be parsed at once. - """ - if self.tokenstack: - return self.tokenstack.pop(0) - - seenletters = False - token = None - state = None - - while not self.eof: - # We only realize that we've reached the end of a token when we - # find a character that's not part of the current token - since - # that character may be part of the next token, it's stored in the - # charstack. - if self.charstack: - nextchar = self.charstack.pop(0) - else: - nextchar = self.instream.read(1) - while nextchar == '\x00': - nextchar = self.instream.read(1) - - if not nextchar: - self.eof = True - break - elif not state: - # First character of the token - determines if we're starting - # to parse a word, a number or something else. - token = nextchar - if self.isword(nextchar): - state = 'a' - elif self.isnum(nextchar): - state = '0' - elif self.isspace(nextchar): - token = ' ' - break # emit token - else: - break # emit token - elif state == 'a': - # If we've already started reading a word, we keep reading - # letters until we find something that's not part of a word. - seenletters = True - if self.isword(nextchar): - token += nextchar - elif nextchar == '.': - token += nextchar - state = 'a.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == '0': - # If we've already started reading a number, we keep reading - # numbers until we find something that doesn't fit. - if self.isnum(nextchar): - token += nextchar - elif nextchar == '.' or (nextchar == ',' and len(token) >= 2): - token += nextchar - state = '0.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == 'a.': - # If we've seen some letters and a dot separator, continue - # parsing, and the tokens will be broken up later. - seenletters = True - if nextchar == '.' or self.isword(nextchar): - token += nextchar - elif self.isnum(nextchar) and token[-1] == '.': - token += nextchar - state = '0.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == '0.': - # If we've seen at least one dot separator, keep going, we'll - # break up the tokens later. - if nextchar == '.' or self.isnum(nextchar): - token += nextchar - elif self.isword(nextchar) and token[-1] == '.': - token += nextchar - state = 'a.' - else: - self.charstack.append(nextchar) - break # emit token - - if (state in ('a.', '0.') and (seenletters or token.count('.') > 1 or - token[-1] in '.,')): - l = self._split_decimal.split(token) - token = l[0] - for tok in l[1:]: - if tok: - self.tokenstack.append(tok) - - if state == '0.' and token.count('.') == 0: - token = token.replace(',', '.') - - return token - - def __iter__(self): - return self - - def __next__(self): - token = self.get_token() - if token is None: - raise StopIteration - - return token - - def next(self): - return self.__next__() # Python 2.x support - - @classmethod - def split(cls, s): - return list(cls(s)) - - @classmethod - def isword(cls, nextchar): - """ Whether or not the next character is part of a word """ - return nextchar.isalpha() - - @classmethod - def isnum(cls, nextchar): - """ Whether the next character is part of a number """ - return nextchar.isdigit() - - @classmethod - def isspace(cls, nextchar): - """ Whether the next character is whitespace """ - return nextchar.isspace() - - -class _resultbase(object): - - def __init__(self): - for attr in self.__slots__: - setattr(self, attr, None) - - def _repr(self, classname): - l = [] - for attr in self.__slots__: - value = getattr(self, attr) - if value is not None: - l.append("%s=%s" % (attr, repr(value))) - return "%s(%s)" % (classname, ", ".join(l)) - - def __len__(self): - return (sum(getattr(self, attr) is not None - for attr in self.__slots__)) - - def __repr__(self): - return self._repr(self.__class__.__name__) - - -class parserinfo(object): - """ - Class which handles what inputs are accepted. Subclass this to customize - the language and acceptable values for each parameter. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM - and YMD. Default is ``False``. - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken - to be the year, otherwise the last number is taken to be the year. - Default is ``False``. - """ - - # m from a.m/p.m, t from ISO T separator - JUMP = [" ", ".", ",", ";", "-", "/", "'", - "at", "on", "and", "ad", "m", "t", "of", - "st", "nd", "rd", "th"] - - WEEKDAYS = [("Mon", "Monday"), - ("Tue", "Tuesday"), # TODO: "Tues" - ("Wed", "Wednesday"), - ("Thu", "Thursday"), # TODO: "Thurs" - ("Fri", "Friday"), - ("Sat", "Saturday"), - ("Sun", "Sunday")] - MONTHS = [("Jan", "January"), - ("Feb", "February"), # TODO: "Febr" - ("Mar", "March"), - ("Apr", "April"), - ("May", "May"), - ("Jun", "June"), - ("Jul", "July"), - ("Aug", "August"), - ("Sep", "Sept", "September"), - ("Oct", "October"), - ("Nov", "November"), - ("Dec", "December")] - HMS = [("h", "hour", "hours"), - ("m", "minute", "minutes"), - ("s", "second", "seconds")] - AMPM = [("am", "a"), - ("pm", "p")] - UTCZONE = ["UTC", "GMT", "Z", "z"] - PERTAIN = ["of"] - TZOFFSET = {} - # TODO: ERA = ["AD", "BC", "CE", "BCE", "Stardate", - # "Anno Domini", "Year of Our Lord"] - - def __init__(self, dayfirst=False, yearfirst=False): - self._jump = self._convert(self.JUMP) - self._weekdays = self._convert(self.WEEKDAYS) - self._months = self._convert(self.MONTHS) - self._hms = self._convert(self.HMS) - self._ampm = self._convert(self.AMPM) - self._utczone = self._convert(self.UTCZONE) - self._pertain = self._convert(self.PERTAIN) - - self.dayfirst = dayfirst - self.yearfirst = yearfirst - - self._year = time.localtime().tm_year - self._century = self._year // 100 * 100 - - def _convert(self, lst): - dct = {} - for i, v in enumerate(lst): - if isinstance(v, tuple): - for v in v: - dct[v.lower()] = i - else: - dct[v.lower()] = i - return dct - - def jump(self, name): - return name.lower() in self._jump - - def weekday(self, name): - try: - return self._weekdays[name.lower()] - except KeyError: - pass - return None - - def month(self, name): - try: - return self._months[name.lower()] + 1 - except KeyError: - pass - return None - - def hms(self, name): - try: - return self._hms[name.lower()] - except KeyError: - return None - - def ampm(self, name): - try: - return self._ampm[name.lower()] - except KeyError: - return None - - def pertain(self, name): - return name.lower() in self._pertain - - def utczone(self, name): - return name.lower() in self._utczone - - def tzoffset(self, name): - if name in self._utczone: - return 0 - - return self.TZOFFSET.get(name) - - def convertyear(self, year, century_specified=False): - """ - Converts two-digit years to year within [-50, 49] - range of self._year (current local time) - """ - - # Function contract is that the year is always positive - assert year >= 0 - - if year < 100 and not century_specified: - # assume current century to start - year += self._century - - if year >= self._year + 50: # if too far in future - year -= 100 - elif year < self._year - 50: # if too far in past - year += 100 - - return year - - def validate(self, res): - # move to info - if res.year is not None: - res.year = self.convertyear(res.year, res.century_specified) - - if ((res.tzoffset == 0 and not res.tzname) or - (res.tzname == 'Z' or res.tzname == 'z')): - res.tzname = "UTC" - res.tzoffset = 0 - elif res.tzoffset != 0 and res.tzname and self.utczone(res.tzname): - res.tzoffset = 0 - return True - - -class _ymd(list): - def __init__(self, *args, **kwargs): - super(self.__class__, self).__init__(*args, **kwargs) - self.century_specified = False - self.dstridx = None - self.mstridx = None - self.ystridx = None - - @property - def has_year(self): - return self.ystridx is not None - - @property - def has_month(self): - return self.mstridx is not None - - @property - def has_day(self): - return self.dstridx is not None - - def could_be_day(self, value): - if self.has_day: - return False - elif not self.has_month: - return 1 <= value <= 31 - elif not self.has_year: - # Be permissive, assume leap year - month = self[self.mstridx] - return 1 <= value <= monthrange(2000, month)[1] - else: - month = self[self.mstridx] - year = self[self.ystridx] - return 1 <= value <= monthrange(year, month)[1] - - def append(self, val, label=None): - if hasattr(val, '__len__'): - if val.isdigit() and len(val) > 2: - self.century_specified = True - if label not in [None, 'Y']: # pragma: no cover - raise ValueError(label) - label = 'Y' - elif val > 100: - self.century_specified = True - if label not in [None, 'Y']: # pragma: no cover - raise ValueError(label) - label = 'Y' - - super(self.__class__, self).append(int(val)) - - if label == 'M': - if self.has_month: - raise ValueError('Month is already set') - self.mstridx = len(self) - 1 - elif label == 'D': - if self.has_day: - raise ValueError('Day is already set') - self.dstridx = len(self) - 1 - elif label == 'Y': - if self.has_year: - raise ValueError('Year is already set') - self.ystridx = len(self) - 1 - - def _resolve_from_stridxs(self, strids): - """ - Try to resolve the identities of year/month/day elements using - ystridx, mstridx, and dstridx, if enough of these are specified. - """ - if len(self) == 3 and len(strids) == 2: - # we can back out the remaining stridx value - missing = [x for x in range(3) if x not in strids.values()] - key = [x for x in ['y', 'm', 'd'] if x not in strids] - assert len(missing) == len(key) == 1 - key = key[0] - val = missing[0] - strids[key] = val - - assert len(self) == len(strids) # otherwise this should not be called - out = {key: self[strids[key]] for key in strids} - return (out.get('y'), out.get('m'), out.get('d')) - - def resolve_ymd(self, yearfirst, dayfirst): - len_ymd = len(self) - year, month, day = (None, None, None) - - strids = (('y', self.ystridx), - ('m', self.mstridx), - ('d', self.dstridx)) - - strids = {key: val for key, val in strids if val is not None} - if (len(self) == len(strids) > 0 or - (len(self) == 3 and len(strids) == 2)): - return self._resolve_from_stridxs(strids) - - mstridx = self.mstridx - - if len_ymd > 3: - raise ValueError("More than three YMD values") - elif len_ymd == 1 or (mstridx is not None and len_ymd == 2): - # One member, or two members with a month string - if mstridx is not None: - month = self[mstridx] - # since mstridx is 0 or 1, self[mstridx-1] always - # looks up the other element - other = self[mstridx - 1] - else: - other = self[0] - - if len_ymd > 1 or mstridx is None: - if other > 31: - year = other - else: - day = other - - elif len_ymd == 2: - # Two members with numbers - if self[0] > 31: - # 99-01 - year, month = self - elif self[1] > 31: - # 01-99 - month, year = self - elif dayfirst and self[1] <= 12: - # 13-01 - day, month = self - else: - # 01-13 - month, day = self - - elif len_ymd == 3: - # Three members - if mstridx == 0: - if self[1] > 31: - # Apr-2003-25 - month, year, day = self - else: - month, day, year = self - elif mstridx == 1: - if self[0] > 31 or (yearfirst and self[2] <= 31): - # 99-Jan-01 - year, month, day = self - else: - # 01-Jan-01 - # Give precedence to day-first, since - # two-digit years is usually hand-written. - day, month, year = self - - elif mstridx == 2: - # WTF!? - if self[1] > 31: - # 01-99-Jan - day, year, month = self - else: - # 99-01-Jan - year, day, month = self - - else: - if (self[0] > 31 or - self.ystridx == 0 or - (yearfirst and self[1] <= 12 and self[2] <= 31)): - # 99-01-01 - if dayfirst and self[2] <= 12: - year, day, month = self - else: - year, month, day = self - elif self[0] > 12 or (dayfirst and self[1] <= 12): - # 13-01-01 - day, month, year = self - else: - # 01-13-01 - month, day, year = self - - return year, month, day - - -class parser(object): - def __init__(self, info=None): - self.info = info or parserinfo() - - def parse(self, timestr, default=None, - ignoretz=False, tzinfos=None, **kwargs): - """ - Parse the date/time string into a :class:`datetime.datetime` object. - - :param timestr: - Any date/time string using the supported formats. - - :param default: - The default datetime object, if this is a datetime object and not - ``None``, elements specified in ``timestr`` replace elements in the - default object. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a - naive :class:`datetime.datetime` object is returned. - - :param tzinfos: - Additional time zone names / aliases which may be present in the - string. This argument maps time zone names (and optionally offsets - from those time zones) to time zones. This parameter can be a - dictionary with timezone aliases mapping time zone names to time - zones or a function taking two parameters (``tzname`` and - ``tzoffset``) and returning a time zone. - - The timezones to which the names are mapped can be an integer - offset from UTC in seconds or a :class:`tzinfo` object. - - .. doctest:: - :options: +NORMALIZE_WHITESPACE - - >>> from dateutil.parser import parse - >>> from dateutil.tz import gettz - >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} - >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) - >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, - tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) - - This parameter is ignored if ``ignoretz`` is set. - - :param \\*\\*kwargs: - Keyword arguments as passed to ``_parse()``. - - :return: - Returns a :class:`datetime.datetime` object or, if the - ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the - first element being a :class:`datetime.datetime` object, the second - a tuple containing the fuzzy tokens. - - :raises ParserError: - Raised for invalid or unknown string format, if the provided - :class:`tzinfo` is not in a valid format, or if an invalid date - would be created. - - :raises TypeError: - Raised for non-string or character stream input. - - :raises OverflowError: - Raised if the parsed date exceeds the largest valid C integer on - your system. - """ - - if default is None: - default = datetime.datetime.now().replace(hour=0, minute=0, - second=0, microsecond=0) - - res, skipped_tokens = self._parse(timestr, **kwargs) - - if res is None: - raise ParserError("Unknown string format: %s", timestr) - - if len(res) == 0: - raise ParserError("String does not contain a date: %s", timestr) - - try: - ret = self._build_naive(res, default) - except ValueError as e: - six.raise_from(ParserError(str(e) + ": %s", timestr), e) - - if not ignoretz: - ret = self._build_tzaware(ret, res, tzinfos) - - if kwargs.get('fuzzy_with_tokens', False): - return ret, skipped_tokens - else: - return ret - - class _result(_resultbase): - __slots__ = ["year", "month", "day", "weekday", - "hour", "minute", "second", "microsecond", - "tzname", "tzoffset", "ampm","any_unused_tokens"] - - def _parse(self, timestr, dayfirst=None, yearfirst=None, fuzzy=False, - fuzzy_with_tokens=False): - """ - Private method which performs the heavy lifting of parsing, called from - ``parse()``, which passes on its ``kwargs`` to this function. - - :param timestr: - The string to parse. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM - and YMD. If set to ``None``, this value is retrieved from the - current :class:`parserinfo` object (which itself defaults to - ``False``). - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken - to be the year, otherwise the last number is taken to be the year. - If this is set to ``None``, the value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param fuzzy: - Whether to allow fuzzy parsing, allowing for string like "Today is - January 1, 2047 at 8:21:00AM". - - :param fuzzy_with_tokens: - If ``True``, ``fuzzy`` is automatically set to True, and the parser - will return a tuple where the first element is the parsed - :class:`datetime.datetime` datetimestamp and the second element is - a tuple containing the portions of the string which were ignored: - - .. doctest:: - - >>> from dateutil.parser import parse - >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) - (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) - - """ - if fuzzy_with_tokens: - fuzzy = True - - info = self.info - - if dayfirst is None: - dayfirst = info.dayfirst - - if yearfirst is None: - yearfirst = info.yearfirst - - res = self._result() - l = _timelex.split(timestr) # Splits the timestr into tokens - - skipped_idxs = [] - - # year/month/day list - ymd = _ymd() - - len_l = len(l) - i = 0 - try: - while i < len_l: - - # Check if it's a number - value_repr = l[i] - try: - value = float(value_repr) - except ValueError: - value = None - - if value is not None: - # Numeric token - i = self._parse_numeric_token(l, i, info, ymd, res, fuzzy) - - # Check weekday - elif info.weekday(l[i]) is not None: - value = info.weekday(l[i]) - res.weekday = value - - # Check month name - elif info.month(l[i]) is not None: - value = info.month(l[i]) - ymd.append(value, 'M') - - if i + 1 < len_l: - if l[i + 1] in ('-', '/'): - # Jan-01[-99] - sep = l[i + 1] - ymd.append(l[i + 2]) - - if i + 3 < len_l and l[i + 3] == sep: - # Jan-01-99 - ymd.append(l[i + 4]) - i += 2 - - i += 2 - - elif (i + 4 < len_l and l[i + 1] == l[i + 3] == ' ' and - info.pertain(l[i + 2])): - # Jan of 01 - # In this case, 01 is clearly year - if l[i + 4].isdigit(): - # Convert it here to become unambiguous - value = int(l[i + 4]) - year = str(info.convertyear(value)) - ymd.append(year, 'Y') - else: - # Wrong guess - pass - # TODO: not hit in tests - i += 4 - - # Check am/pm - elif info.ampm(l[i]) is not None: - value = info.ampm(l[i]) - val_is_ampm = self._ampm_valid(res.hour, res.ampm, fuzzy) - - if val_is_ampm: - res.hour = self._adjust_ampm(res.hour, value) - res.ampm = value - - elif fuzzy: - skipped_idxs.append(i) - - # Check for a timezone name - elif self._could_be_tzname(res.hour, res.tzname, res.tzoffset, l[i]): - res.tzname = l[i] - res.tzoffset = info.tzoffset(res.tzname) - - # Check for something like GMT+3, or BRST+3. Notice - # that it doesn't mean "I am 3 hours after GMT", but - # "my time +3 is GMT". If found, we reverse the - # logic so that timezone parsing code will get it - # right. - if i + 1 < len_l and l[i + 1] in ('+', '-'): - l[i + 1] = ('+', '-')[l[i + 1] == '+'] - res.tzoffset = None - if info.utczone(res.tzname): - # With something like GMT+3, the timezone - # is *not* GMT. - res.tzname = None - - # Check for a numbered timezone - elif res.hour is not None and l[i] in ('+', '-'): - signal = (-1, 1)[l[i] == '+'] - len_li = len(l[i + 1]) - - # TODO: check that l[i + 1] is integer? - if len_li == 4: - # -0300 - hour_offset = int(l[i + 1][:2]) - min_offset = int(l[i + 1][2:]) - elif i + 2 < len_l and l[i + 2] == ':': - # -03:00 - hour_offset = int(l[i + 1]) - min_offset = int(l[i + 3]) # TODO: Check that l[i+3] is minute-like? - i += 2 - elif len_li <= 2: - # -[0]3 - hour_offset = int(l[i + 1][:2]) - min_offset = 0 - else: - raise ValueError(timestr) - - res.tzoffset = signal * (hour_offset * 3600 + min_offset * 60) - - # Look for a timezone name between parenthesis - if (i + 5 < len_l and - info.jump(l[i + 2]) and l[i + 3] == '(' and - l[i + 5] == ')' and - 3 <= len(l[i + 4]) and - self._could_be_tzname(res.hour, res.tzname, - None, l[i + 4])): - # -0300 (BRST) - res.tzname = l[i + 4] - i += 4 - - i += 1 - - # Check jumps - elif not (info.jump(l[i]) or fuzzy): - raise ValueError(timestr) - - else: - skipped_idxs.append(i) - i += 1 - - # Process year/month/day - year, month, day = ymd.resolve_ymd(yearfirst, dayfirst) - - res.century_specified = ymd.century_specified - res.year = year - res.month = month - res.day = day - - except (IndexError, ValueError): - return None, None - - if not info.validate(res): - return None, None - - if fuzzy_with_tokens: - skipped_tokens = self._recombine_skipped(l, skipped_idxs) - return res, tuple(skipped_tokens) - else: - return res, None - - def _parse_numeric_token(self, tokens, idx, info, ymd, res, fuzzy): - # Token is a number - value_repr = tokens[idx] - try: - value = self._to_decimal(value_repr) - except Exception as e: - six.raise_from(ValueError('Unknown numeric token'), e) - - len_li = len(value_repr) - - len_l = len(tokens) - - if (len(ymd) == 3 and len_li in (2, 4) and - res.hour is None and - (idx + 1 >= len_l or - (tokens[idx + 1] != ':' and - info.hms(tokens[idx + 1]) is None))): - # 19990101T23[59] - s = tokens[idx] - res.hour = int(s[:2]) - - if len_li == 4: - res.minute = int(s[2:]) - - elif len_li == 6 or (len_li > 6 and tokens[idx].find('.') == 6): - # YYMMDD or HHMMSS[.ss] - s = tokens[idx] - - if not ymd and '.' not in tokens[idx]: - ymd.append(s[:2]) - ymd.append(s[2:4]) - ymd.append(s[4:]) - else: - # 19990101T235959[.59] - - # TODO: Check if res attributes already set. - res.hour = int(s[:2]) - res.minute = int(s[2:4]) - res.second, res.microsecond = self._parsems(s[4:]) - - elif len_li in (8, 12, 14): - # YYYYMMDD - s = tokens[idx] - ymd.append(s[:4], 'Y') - ymd.append(s[4:6]) - ymd.append(s[6:8]) - - if len_li > 8: - res.hour = int(s[8:10]) - res.minute = int(s[10:12]) - - if len_li > 12: - res.second = int(s[12:]) - - elif self._find_hms_idx(idx, tokens, info, allow_jump=True) is not None: - # HH[ ]h or MM[ ]m or SS[.ss][ ]s - hms_idx = self._find_hms_idx(idx, tokens, info, allow_jump=True) - (idx, hms) = self._parse_hms(idx, tokens, info, hms_idx) - if hms is not None: - # TODO: checking that hour/minute/second are not - # already set? - self._assign_hms(res, value_repr, hms) - - elif idx + 2 < len_l and tokens[idx + 1] == ':': - # HH:MM[:SS[.ss]] - res.hour = int(value) - value = self._to_decimal(tokens[idx + 2]) # TODO: try/except for this? - (res.minute, res.second) = self._parse_min_sec(value) - - if idx + 4 < len_l and tokens[idx + 3] == ':': - res.second, res.microsecond = self._parsems(tokens[idx + 4]) - - idx += 2 - - idx += 2 - - elif idx + 1 < len_l and tokens[idx + 1] in ('-', '/', '.'): - sep = tokens[idx + 1] - ymd.append(value_repr) - - if idx + 2 < len_l and not info.jump(tokens[idx + 2]): - if tokens[idx + 2].isdigit(): - # 01-01[-01] - ymd.append(tokens[idx + 2]) - else: - # 01-Jan[-01] - value = info.month(tokens[idx + 2]) - - if value is not None: - ymd.append(value, 'M') - else: - raise ValueError() - - if idx + 3 < len_l and tokens[idx + 3] == sep: - # We have three members - value = info.month(tokens[idx + 4]) - - if value is not None: - ymd.append(value, 'M') - else: - ymd.append(tokens[idx + 4]) - idx += 2 - - idx += 1 - idx += 1 - - elif idx + 1 >= len_l or info.jump(tokens[idx + 1]): - if idx + 2 < len_l and info.ampm(tokens[idx + 2]) is not None: - # 12 am - hour = int(value) - res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 2])) - idx += 1 - else: - # Year, month or day - ymd.append(value) - idx += 1 - - elif info.ampm(tokens[idx + 1]) is not None and (0 <= value < 24): - # 12am - hour = int(value) - res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 1])) - idx += 1 - - elif ymd.could_be_day(value): - ymd.append(value) - - elif not fuzzy: - raise ValueError() - - return idx - - def _find_hms_idx(self, idx, tokens, info, allow_jump): - len_l = len(tokens) - - if idx+1 < len_l and info.hms(tokens[idx+1]) is not None: - # There is an "h", "m", or "s" label following this token. We take - # assign the upcoming label to the current token. - # e.g. the "12" in 12h" - hms_idx = idx + 1 - - elif (allow_jump and idx+2 < len_l and tokens[idx+1] == ' ' and - info.hms(tokens[idx+2]) is not None): - # There is a space and then an "h", "m", or "s" label. - # e.g. the "12" in "12 h" - hms_idx = idx + 2 - - elif idx > 0 and info.hms(tokens[idx-1]) is not None: - # There is a "h", "m", or "s" preceding this token. Since neither - # of the previous cases was hit, there is no label following this - # token, so we use the previous label. - # e.g. the "04" in "12h04" - hms_idx = idx-1 - - elif (1 < idx == len_l-1 and tokens[idx-1] == ' ' and - info.hms(tokens[idx-2]) is not None): - # If we are looking at the final token, we allow for a - # backward-looking check to skip over a space. - # TODO: Are we sure this is the right condition here? - hms_idx = idx - 2 - - else: - hms_idx = None - - return hms_idx - - def _assign_hms(self, res, value_repr, hms): - # See GH issue #427, fixing float rounding - value = self._to_decimal(value_repr) - - if hms == 0: - # Hour - res.hour = int(value) - if value % 1: - res.minute = int(60*(value % 1)) - - elif hms == 1: - (res.minute, res.second) = self._parse_min_sec(value) - - elif hms == 2: - (res.second, res.microsecond) = self._parsems(value_repr) - - def _could_be_tzname(self, hour, tzname, tzoffset, token): - return (hour is not None and - tzname is None and - tzoffset is None and - len(token) <= 5 and - (all(x in string.ascii_uppercase for x in token) - or token in self.info.UTCZONE)) - - def _ampm_valid(self, hour, ampm, fuzzy): - """ - For fuzzy parsing, 'a' or 'am' (both valid English words) - may erroneously trigger the AM/PM flag. Deal with that - here. - """ - val_is_ampm = True - - # If there's already an AM/PM flag, this one isn't one. - if fuzzy and ampm is not None: - val_is_ampm = False - - # If AM/PM is found and hour is not, raise a ValueError - if hour is None: - if fuzzy: - val_is_ampm = False - else: - raise ValueError('No hour specified with AM or PM flag.') - elif not 0 <= hour <= 12: - # If AM/PM is found, it's a 12 hour clock, so raise - # an error for invalid range - if fuzzy: - val_is_ampm = False - else: - raise ValueError('Invalid hour specified for 12-hour clock.') - - return val_is_ampm - - def _adjust_ampm(self, hour, ampm): - if hour < 12 and ampm == 1: - hour += 12 - elif hour == 12 and ampm == 0: - hour = 0 - return hour - - def _parse_min_sec(self, value): - # TODO: Every usage of this function sets res.second to the return - # value. Are there any cases where second will be returned as None and - # we *don't* want to set res.second = None? - minute = int(value) - second = None - - sec_remainder = value % 1 - if sec_remainder: - second = int(60 * sec_remainder) - return (minute, second) - - def _parse_hms(self, idx, tokens, info, hms_idx): - # TODO: Is this going to admit a lot of false-positives for when we - # just happen to have digits and "h", "m" or "s" characters in non-date - # text? I guess hex hashes won't have that problem, but there's plenty - # of random junk out there. - if hms_idx is None: - hms = None - new_idx = idx - elif hms_idx > idx: - hms = info.hms(tokens[hms_idx]) - new_idx = hms_idx - else: - # Looking backwards, increment one. - hms = info.hms(tokens[hms_idx]) + 1 - new_idx = idx - - return (new_idx, hms) - - # ------------------------------------------------------------------ - # Handling for individual tokens. These are kept as methods instead - # of functions for the sake of customizability via subclassing. - - def _parsems(self, value): - """Parse a I[.F] seconds value into (seconds, microseconds).""" - if "." not in value: - return int(value), 0 - else: - i, f = value.split(".") - return int(i), int(f.ljust(6, "0")[:6]) - - def _to_decimal(self, val): - try: - decimal_value = Decimal(val) - # See GH 662, edge case, infinite value should not be converted - # via `_to_decimal` - if not decimal_value.is_finite(): - raise ValueError("Converted decimal value is infinite or NaN") - except Exception as e: - msg = "Could not convert %s to decimal" % val - six.raise_from(ValueError(msg), e) - else: - return decimal_value - - # ------------------------------------------------------------------ - # Post-Parsing construction of datetime output. These are kept as - # methods instead of functions for the sake of customizability via - # subclassing. - - def _build_tzinfo(self, tzinfos, tzname, tzoffset): - if callable(tzinfos): - tzdata = tzinfos(tzname, tzoffset) - else: - tzdata = tzinfos.get(tzname) - # handle case where tzinfo is paased an options that returns None - # eg tzinfos = {'BRST' : None} - if isinstance(tzdata, datetime.tzinfo) or tzdata is None: - tzinfo = tzdata - elif isinstance(tzdata, text_type): - tzinfo = tz.tzstr(tzdata) - elif isinstance(tzdata, integer_types): - tzinfo = tz.tzoffset(tzname, tzdata) - else: - raise TypeError("Offset must be tzinfo subclass, tz string, " - "or int offset.") - return tzinfo - - def _build_tzaware(self, naive, res, tzinfos): - if (callable(tzinfos) or (tzinfos and res.tzname in tzinfos)): - tzinfo = self._build_tzinfo(tzinfos, res.tzname, res.tzoffset) - aware = naive.replace(tzinfo=tzinfo) - aware = self._assign_tzname(aware, res.tzname) - - elif res.tzname and res.tzname in time.tzname: - aware = naive.replace(tzinfo=tz.tzlocal()) - - # Handle ambiguous local datetime - aware = self._assign_tzname(aware, res.tzname) - - # This is mostly relevant for winter GMT zones parsed in the UK - if (aware.tzname() != res.tzname and - res.tzname in self.info.UTCZONE): - aware = aware.replace(tzinfo=tz.UTC) - - elif res.tzoffset == 0: - aware = naive.replace(tzinfo=tz.UTC) - - elif res.tzoffset: - aware = naive.replace(tzinfo=tz.tzoffset(res.tzname, res.tzoffset)) - - elif not res.tzname and not res.tzoffset: - # i.e. no timezone information was found. - aware = naive - - elif res.tzname: - # tz-like string was parsed but we don't know what to do - # with it - warnings.warn("tzname {tzname} identified but not understood. " - "Pass `tzinfos` argument in order to correctly " - "return a timezone-aware datetime. In a future " - "version, this will raise an " - "exception.".format(tzname=res.tzname), - category=UnknownTimezoneWarning) - aware = naive - - return aware - - def _build_naive(self, res, default): - repl = {} - for attr in ("year", "month", "day", "hour", - "minute", "second", "microsecond"): - value = getattr(res, attr) - if value is not None: - repl[attr] = value - - if 'day' not in repl: - # If the default day exceeds the last day of the month, fall back - # to the end of the month. - cyear = default.year if res.year is None else res.year - cmonth = default.month if res.month is None else res.month - cday = default.day if res.day is None else res.day - - if cday > monthrange(cyear, cmonth)[1]: - repl['day'] = monthrange(cyear, cmonth)[1] - - naive = default.replace(**repl) - - if res.weekday is not None and not res.day: - naive = naive + relativedelta.relativedelta(weekday=res.weekday) - - return naive - - def _assign_tzname(self, dt, tzname): - if dt.tzname() != tzname: - new_dt = tz.enfold(dt, fold=1) - if new_dt.tzname() == tzname: - return new_dt - - return dt - - def _recombine_skipped(self, tokens, skipped_idxs): - """ - >>> tokens = ["foo", " ", "bar", " ", "19June2000", "baz"] - >>> skipped_idxs = [0, 1, 2, 5] - >>> _recombine_skipped(tokens, skipped_idxs) - ["foo bar", "baz"] - """ - skipped_tokens = [] - for i, idx in enumerate(sorted(skipped_idxs)): - if i > 0 and idx - 1 == skipped_idxs[i - 1]: - skipped_tokens[-1] = skipped_tokens[-1] + tokens[idx] - else: - skipped_tokens.append(tokens[idx]) - - return skipped_tokens - - -DEFAULTPARSER = parser() - - -def parse(timestr, parserinfo=None, **kwargs): - """ - - Parse a string in one of the supported formats, using the - ``parserinfo`` parameters. - - :param timestr: - A string containing a date/time stamp. - - :param parserinfo: - A :class:`parserinfo` object containing parameters for the parser. - If ``None``, the default arguments to the :class:`parserinfo` - constructor are used. - - The ``**kwargs`` parameter takes the following keyword arguments: - - :param default: - The default datetime object, if this is a datetime object and not - ``None``, elements specified in ``timestr`` replace elements in the - default object. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a naive - :class:`datetime` object is returned. - - :param tzinfos: - Additional time zone names / aliases which may be present in the - string. This argument maps time zone names (and optionally offsets - from those time zones) to time zones. This parameter can be a - dictionary with timezone aliases mapping time zone names to time - zones or a function taking two parameters (``tzname`` and - ``tzoffset``) and returning a time zone. - - The timezones to which the names are mapped can be an integer - offset from UTC in seconds or a :class:`tzinfo` object. - - .. doctest:: - :options: +NORMALIZE_WHITESPACE - - >>> from dateutil.parser import parse - >>> from dateutil.tz import gettz - >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} - >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) - >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, - tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) - - This parameter is ignored if ``ignoretz`` is set. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM and - YMD. If set to ``None``, this value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken to - be the year, otherwise the last number is taken to be the year. If - this is set to ``None``, the value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param fuzzy: - Whether to allow fuzzy parsing, allowing for string like "Today is - January 1, 2047 at 8:21:00AM". - - :param fuzzy_with_tokens: - If ``True``, ``fuzzy`` is automatically set to True, and the parser - will return a tuple where the first element is the parsed - :class:`datetime.datetime` datetimestamp and the second element is - a tuple containing the portions of the string which were ignored: - - .. doctest:: - - >>> from dateutil.parser import parse - >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) - (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) - - :return: - Returns a :class:`datetime.datetime` object or, if the - ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the - first element being a :class:`datetime.datetime` object, the second - a tuple containing the fuzzy tokens. - - :raises ParserError: - Raised for invalid or unknown string formats, if the provided - :class:`tzinfo` is not in a valid format, or if an invalid date would - be created. - - :raises OverflowError: - Raised if the parsed date exceeds the largest valid C integer on - your system. - """ - if parserinfo: - return parser(parserinfo).parse(timestr, **kwargs) - else: - return DEFAULTPARSER.parse(timestr, **kwargs) - - -class _tzparser(object): - - class _result(_resultbase): - - __slots__ = ["stdabbr", "stdoffset", "dstabbr", "dstoffset", - "start", "end"] - - class _attr(_resultbase): - __slots__ = ["month", "week", "weekday", - "yday", "jyday", "day", "time"] - - def __repr__(self): - return self._repr("") - - def __init__(self): - _resultbase.__init__(self) - self.start = self._attr() - self.end = self._attr() - - def parse(self, tzstr): - res = self._result() - l = [x for x in re.split(r'([,:.]|[a-zA-Z]+|[0-9]+)',tzstr) if x] - used_idxs = list() - try: - - len_l = len(l) - - i = 0 - while i < len_l: - # BRST+3[BRDT[+2]] - j = i - while j < len_l and not [x for x in l[j] - if x in "0123456789:,-+"]: - j += 1 - if j != i: - if not res.stdabbr: - offattr = "stdoffset" - res.stdabbr = "".join(l[i:j]) - else: - offattr = "dstoffset" - res.dstabbr = "".join(l[i:j]) - - for ii in range(j): - used_idxs.append(ii) - i = j - if (i < len_l and (l[i] in ('+', '-') or l[i][0] in - "0123456789")): - if l[i] in ('+', '-'): - # Yes, that's right. See the TZ variable - # documentation. - signal = (1, -1)[l[i] == '+'] - used_idxs.append(i) - i += 1 - else: - signal = -1 - len_li = len(l[i]) - if len_li == 4: - # -0300 - setattr(res, offattr, (int(l[i][:2]) * 3600 + - int(l[i][2:]) * 60) * signal) - elif i + 1 < len_l and l[i + 1] == ':': - # -03:00 - setattr(res, offattr, - (int(l[i]) * 3600 + - int(l[i + 2]) * 60) * signal) - used_idxs.append(i) - i += 2 - elif len_li <= 2: - # -[0]3 - setattr(res, offattr, - int(l[i][:2]) * 3600 * signal) - else: - return None - used_idxs.append(i) - i += 1 - if res.dstabbr: - break - else: - break - - - if i < len_l: - for j in range(i, len_l): - if l[j] == ';': - l[j] = ',' - - assert l[i] == ',' - - i += 1 - - if i >= len_l: - pass - elif (8 <= l.count(',') <= 9 and - not [y for x in l[i:] if x != ',' - for y in x if y not in "0123456789+-"]): - # GMT0BST,3,0,30,3600,10,0,26,7200[,3600] - for x in (res.start, res.end): - x.month = int(l[i]) - used_idxs.append(i) - i += 2 - if l[i] == '-': - value = int(l[i + 1]) * -1 - used_idxs.append(i) - i += 1 - else: - value = int(l[i]) - used_idxs.append(i) - i += 2 - if value: - x.week = value - x.weekday = (int(l[i]) - 1) % 7 - else: - x.day = int(l[i]) - used_idxs.append(i) - i += 2 - x.time = int(l[i]) - used_idxs.append(i) - i += 2 - if i < len_l: - if l[i] in ('-', '+'): - signal = (-1, 1)[l[i] == "+"] - used_idxs.append(i) - i += 1 - else: - signal = 1 - used_idxs.append(i) - res.dstoffset = (res.stdoffset + int(l[i]) * signal) - - # This was a made-up format that is not in normal use - warn(('Parsed time zone "%s"' % tzstr) + - 'is in a non-standard dateutil-specific format, which ' + - 'is now deprecated; support for parsing this format ' + - 'will be removed in future versions. It is recommended ' + - 'that you switch to a standard format like the GNU ' + - 'TZ variable format.', tz.DeprecatedTzFormatWarning) - elif (l.count(',') == 2 and l[i:].count('/') <= 2 and - not [y for x in l[i:] if x not in (',', '/', 'J', 'M', - '.', '-', ':') - for y in x if y not in "0123456789"]): - for x in (res.start, res.end): - if l[i] == 'J': - # non-leap year day (1 based) - used_idxs.append(i) - i += 1 - x.jyday = int(l[i]) - elif l[i] == 'M': - # month[-.]week[-.]weekday - used_idxs.append(i) - i += 1 - x.month = int(l[i]) - used_idxs.append(i) - i += 1 - assert l[i] in ('-', '.') - used_idxs.append(i) - i += 1 - x.week = int(l[i]) - if x.week == 5: - x.week = -1 - used_idxs.append(i) - i += 1 - assert l[i] in ('-', '.') - used_idxs.append(i) - i += 1 - x.weekday = (int(l[i]) - 1) % 7 - else: - # year day (zero based) - x.yday = int(l[i]) + 1 - - used_idxs.append(i) - i += 1 - - if i < len_l and l[i] == '/': - used_idxs.append(i) - i += 1 - # start time - len_li = len(l[i]) - if len_li == 4: - # -0300 - x.time = (int(l[i][:2]) * 3600 + - int(l[i][2:]) * 60) - elif i + 1 < len_l and l[i + 1] == ':': - # -03:00 - x.time = int(l[i]) * 3600 + int(l[i + 2]) * 60 - used_idxs.append(i) - i += 2 - if i + 1 < len_l and l[i + 1] == ':': - used_idxs.append(i) - i += 2 - x.time += int(l[i]) - elif len_li <= 2: - # -[0]3 - x.time = (int(l[i][:2]) * 3600) - else: - return None - used_idxs.append(i) - i += 1 - - assert i == len_l or l[i] == ',' - - i += 1 - - assert i >= len_l - - except (IndexError, ValueError, AssertionError): - return None - - unused_idxs = set(range(len_l)).difference(used_idxs) - res.any_unused_tokens = not {l[n] for n in unused_idxs}.issubset({",",":"}) - return res - - -DEFAULTTZPARSER = _tzparser() - - -def _parsetz(tzstr): - return DEFAULTTZPARSER.parse(tzstr) - - -class ParserError(ValueError): - """Exception subclass used for any failure to parse a datetime string. - - This is a subclass of :py:exc:`ValueError`, and should be raised any time - earlier versions of ``dateutil`` would have raised ``ValueError``. - - .. versionadded:: 2.8.1 - """ - def __str__(self): - try: - return self.args[0] % self.args[1:] - except (TypeError, IndexError): - return super(ParserError, self).__str__() - - def __repr__(self): - args = ", ".join("'%s'" % arg for arg in self.args) - return "%s(%s)" % (self.__class__.__name__, args) - - -class UnknownTimezoneWarning(RuntimeWarning): - """Raised when the parser finds a timezone it cannot parse into a tzinfo. - - .. versionadded:: 2.7.0 - """ -# vim:ts=4:sw=4:et diff --git a/myenv/lib/python3.12/site-packages/dateutil/parser/isoparser.py b/myenv/lib/python3.12/site-packages/dateutil/parser/isoparser.py deleted file mode 100644 index 7060087..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/parser/isoparser.py +++ /dev/null @@ -1,416 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a parser for ISO-8601 strings - -It is intended to support all valid date, time and datetime formats per the -ISO-8601 specification. - -..versionadded:: 2.7.0 -""" -from datetime import datetime, timedelta, time, date -import calendar -from dateutil import tz - -from functools import wraps - -import re -import six - -__all__ = ["isoparse", "isoparser"] - - -def _takes_ascii(f): - @wraps(f) - def func(self, str_in, *args, **kwargs): - # If it's a stream, read the whole thing - str_in = getattr(str_in, 'read', lambda: str_in)() - - # If it's unicode, turn it into bytes, since ISO-8601 only covers ASCII - if isinstance(str_in, six.text_type): - # ASCII is the same in UTF-8 - try: - str_in = str_in.encode('ascii') - except UnicodeEncodeError as e: - msg = 'ISO-8601 strings should contain only ASCII characters' - six.raise_from(ValueError(msg), e) - - return f(self, str_in, *args, **kwargs) - - return func - - -class isoparser(object): - def __init__(self, sep=None): - """ - :param sep: - A single character that separates date and time portions. If - ``None``, the parser will accept any single character. - For strict ISO-8601 adherence, pass ``'T'``. - """ - if sep is not None: - if (len(sep) != 1 or ord(sep) >= 128 or sep in '0123456789'): - raise ValueError('Separator must be a single, non-numeric ' + - 'ASCII character') - - sep = sep.encode('ascii') - - self._sep = sep - - @_takes_ascii - def isoparse(self, dt_str): - """ - Parse an ISO-8601 datetime string into a :class:`datetime.datetime`. - - An ISO-8601 datetime string consists of a date portion, followed - optionally by a time portion - the date and time portions are separated - by a single character separator, which is ``T`` in the official - standard. Incomplete date formats (such as ``YYYY-MM``) may *not* be - combined with a time portion. - - Supported date formats are: - - Common: - - - ``YYYY`` - - ``YYYY-MM`` - - ``YYYY-MM-DD`` or ``YYYYMMDD`` - - Uncommon: - - - ``YYYY-Www`` or ``YYYYWww`` - ISO week (day defaults to 0) - - ``YYYY-Www-D`` or ``YYYYWwwD`` - ISO week and day - - The ISO week and day numbering follows the same logic as - :func:`datetime.date.isocalendar`. - - Supported time formats are: - - - ``hh`` - - ``hh:mm`` or ``hhmm`` - - ``hh:mm:ss`` or ``hhmmss`` - - ``hh:mm:ss.ssssss`` (Up to 6 sub-second digits) - - Midnight is a special case for `hh`, as the standard supports both - 00:00 and 24:00 as a representation. The decimal separator can be - either a dot or a comma. - - - .. caution:: - - Support for fractional components other than seconds is part of the - ISO-8601 standard, but is not currently implemented in this parser. - - Supported time zone offset formats are: - - - `Z` (UTC) - - `±HH:MM` - - `±HHMM` - - `±HH` - - Offsets will be represented as :class:`dateutil.tz.tzoffset` objects, - with the exception of UTC, which will be represented as - :class:`dateutil.tz.tzutc`. Time zone offsets equivalent to UTC (such - as `+00:00`) will also be represented as :class:`dateutil.tz.tzutc`. - - :param dt_str: - A string or stream containing only an ISO-8601 datetime string - - :return: - Returns a :class:`datetime.datetime` representing the string. - Unspecified components default to their lowest value. - - .. warning:: - - As of version 2.7.0, the strictness of the parser should not be - considered a stable part of the contract. Any valid ISO-8601 string - that parses correctly with the default settings will continue to - parse correctly in future versions, but invalid strings that - currently fail (e.g. ``2017-01-01T00:00+00:00:00``) are not - guaranteed to continue failing in future versions if they encode - a valid date. - - .. versionadded:: 2.7.0 - """ - components, pos = self._parse_isodate(dt_str) - - if len(dt_str) > pos: - if self._sep is None or dt_str[pos:pos + 1] == self._sep: - components += self._parse_isotime(dt_str[pos + 1:]) - else: - raise ValueError('String contains unknown ISO components') - - if len(components) > 3 and components[3] == 24: - components[3] = 0 - return datetime(*components) + timedelta(days=1) - - return datetime(*components) - - @_takes_ascii - def parse_isodate(self, datestr): - """ - Parse the date portion of an ISO string. - - :param datestr: - The string portion of an ISO string, without a separator - - :return: - Returns a :class:`datetime.date` object - """ - components, pos = self._parse_isodate(datestr) - if pos < len(datestr): - raise ValueError('String contains unknown ISO ' + - 'components: {!r}'.format(datestr.decode('ascii'))) - return date(*components) - - @_takes_ascii - def parse_isotime(self, timestr): - """ - Parse the time portion of an ISO string. - - :param timestr: - The time portion of an ISO string, without a separator - - :return: - Returns a :class:`datetime.time` object - """ - components = self._parse_isotime(timestr) - if components[0] == 24: - components[0] = 0 - return time(*components) - - @_takes_ascii - def parse_tzstr(self, tzstr, zero_as_utc=True): - """ - Parse a valid ISO time zone string. - - See :func:`isoparser.isoparse` for details on supported formats. - - :param tzstr: - A string representing an ISO time zone offset - - :param zero_as_utc: - Whether to return :class:`dateutil.tz.tzutc` for zero-offset zones - - :return: - Returns :class:`dateutil.tz.tzoffset` for offsets and - :class:`dateutil.tz.tzutc` for ``Z`` and (if ``zero_as_utc`` is - specified) offsets equivalent to UTC. - """ - return self._parse_tzstr(tzstr, zero_as_utc=zero_as_utc) - - # Constants - _DATE_SEP = b'-' - _TIME_SEP = b':' - _FRACTION_REGEX = re.compile(b'[\\.,]([0-9]+)') - - def _parse_isodate(self, dt_str): - try: - return self._parse_isodate_common(dt_str) - except ValueError: - return self._parse_isodate_uncommon(dt_str) - - def _parse_isodate_common(self, dt_str): - len_str = len(dt_str) - components = [1, 1, 1] - - if len_str < 4: - raise ValueError('ISO string too short') - - # Year - components[0] = int(dt_str[0:4]) - pos = 4 - if pos >= len_str: - return components, pos - - has_sep = dt_str[pos:pos + 1] == self._DATE_SEP - if has_sep: - pos += 1 - - # Month - if len_str - pos < 2: - raise ValueError('Invalid common month') - - components[1] = int(dt_str[pos:pos + 2]) - pos += 2 - - if pos >= len_str: - if has_sep: - return components, pos - else: - raise ValueError('Invalid ISO format') - - if has_sep: - if dt_str[pos:pos + 1] != self._DATE_SEP: - raise ValueError('Invalid separator in ISO string') - pos += 1 - - # Day - if len_str - pos < 2: - raise ValueError('Invalid common day') - components[2] = int(dt_str[pos:pos + 2]) - return components, pos + 2 - - def _parse_isodate_uncommon(self, dt_str): - if len(dt_str) < 4: - raise ValueError('ISO string too short') - - # All ISO formats start with the year - year = int(dt_str[0:4]) - - has_sep = dt_str[4:5] == self._DATE_SEP - - pos = 4 + has_sep # Skip '-' if it's there - if dt_str[pos:pos + 1] == b'W': - # YYYY-?Www-?D? - pos += 1 - weekno = int(dt_str[pos:pos + 2]) - pos += 2 - - dayno = 1 - if len(dt_str) > pos: - if (dt_str[pos:pos + 1] == self._DATE_SEP) != has_sep: - raise ValueError('Inconsistent use of dash separator') - - pos += has_sep - - dayno = int(dt_str[pos:pos + 1]) - pos += 1 - - base_date = self._calculate_weekdate(year, weekno, dayno) - else: - # YYYYDDD or YYYY-DDD - if len(dt_str) - pos < 3: - raise ValueError('Invalid ordinal day') - - ordinal_day = int(dt_str[pos:pos + 3]) - pos += 3 - - if ordinal_day < 1 or ordinal_day > (365 + calendar.isleap(year)): - raise ValueError('Invalid ordinal day' + - ' {} for year {}'.format(ordinal_day, year)) - - base_date = date(year, 1, 1) + timedelta(days=ordinal_day - 1) - - components = [base_date.year, base_date.month, base_date.day] - return components, pos - - def _calculate_weekdate(self, year, week, day): - """ - Calculate the day of corresponding to the ISO year-week-day calendar. - - This function is effectively the inverse of - :func:`datetime.date.isocalendar`. - - :param year: - The year in the ISO calendar - - :param week: - The week in the ISO calendar - range is [1, 53] - - :param day: - The day in the ISO calendar - range is [1 (MON), 7 (SUN)] - - :return: - Returns a :class:`datetime.date` - """ - if not 0 < week < 54: - raise ValueError('Invalid week: {}'.format(week)) - - if not 0 < day < 8: # Range is 1-7 - raise ValueError('Invalid weekday: {}'.format(day)) - - # Get week 1 for the specific year: - jan_4 = date(year, 1, 4) # Week 1 always has January 4th in it - week_1 = jan_4 - timedelta(days=jan_4.isocalendar()[2] - 1) - - # Now add the specific number of weeks and days to get what we want - week_offset = (week - 1) * 7 + (day - 1) - return week_1 + timedelta(days=week_offset) - - def _parse_isotime(self, timestr): - len_str = len(timestr) - components = [0, 0, 0, 0, None] - pos = 0 - comp = -1 - - if len_str < 2: - raise ValueError('ISO time too short') - - has_sep = False - - while pos < len_str and comp < 5: - comp += 1 - - if timestr[pos:pos + 1] in b'-+Zz': - # Detect time zone boundary - components[-1] = self._parse_tzstr(timestr[pos:]) - pos = len_str - break - - if comp == 1 and timestr[pos:pos+1] == self._TIME_SEP: - has_sep = True - pos += 1 - elif comp == 2 and has_sep: - if timestr[pos:pos+1] != self._TIME_SEP: - raise ValueError('Inconsistent use of colon separator') - pos += 1 - - if comp < 3: - # Hour, minute, second - components[comp] = int(timestr[pos:pos + 2]) - pos += 2 - - if comp == 3: - # Fraction of a second - frac = self._FRACTION_REGEX.match(timestr[pos:]) - if not frac: - continue - - us_str = frac.group(1)[:6] # Truncate to microseconds - components[comp] = int(us_str) * 10**(6 - len(us_str)) - pos += len(frac.group()) - - if pos < len_str: - raise ValueError('Unused components in ISO string') - - if components[0] == 24: - # Standard supports 00:00 and 24:00 as representations of midnight - if any(component != 0 for component in components[1:4]): - raise ValueError('Hour may only be 24 at 24:00:00.000') - - return components - - def _parse_tzstr(self, tzstr, zero_as_utc=True): - if tzstr == b'Z' or tzstr == b'z': - return tz.UTC - - if len(tzstr) not in {3, 5, 6}: - raise ValueError('Time zone offset must be 1, 3, 5 or 6 characters') - - if tzstr[0:1] == b'-': - mult = -1 - elif tzstr[0:1] == b'+': - mult = 1 - else: - raise ValueError('Time zone offset requires sign') - - hours = int(tzstr[1:3]) - if len(tzstr) == 3: - minutes = 0 - else: - minutes = int(tzstr[(4 if tzstr[3:4] == self._TIME_SEP else 3):]) - - if zero_as_utc and hours == 0 and minutes == 0: - return tz.UTC - else: - if minutes > 59: - raise ValueError('Invalid minutes in time zone offset') - - if hours > 23: - raise ValueError('Invalid hours in time zone offset') - - return tz.tzoffset(None, mult * (hours * 60 + minutes) * 60) - - -DEFAULT_ISOPARSER = isoparser() -isoparse = DEFAULT_ISOPARSER.isoparse diff --git a/myenv/lib/python3.12/site-packages/dateutil/relativedelta.py b/myenv/lib/python3.12/site-packages/dateutil/relativedelta.py deleted file mode 100644 index cd323a5..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/relativedelta.py +++ /dev/null @@ -1,599 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -import calendar - -import operator -from math import copysign - -from six import integer_types -from warnings import warn - -from ._common import weekday - -MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) - -__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"] - - -class relativedelta(object): - """ - The relativedelta type is designed to be applied to an existing datetime and - can replace specific components of that datetime, or represents an interval - of time. - - It is based on the specification of the excellent work done by M.-A. Lemburg - in his - `mx.DateTime `_ extension. - However, notice that this type does *NOT* implement the same algorithm as - his work. Do *NOT* expect it to behave like mx.DateTime's counterpart. - - There are two different ways to build a relativedelta instance. The - first one is passing it two date/datetime classes:: - - relativedelta(datetime1, datetime2) - - The second one is passing it any number of the following keyword arguments:: - - relativedelta(arg1=x,arg2=y,arg3=z...) - - year, month, day, hour, minute, second, microsecond: - Absolute information (argument is singular); adding or subtracting a - relativedelta with absolute information does not perform an arithmetic - operation, but rather REPLACES the corresponding value in the - original datetime with the value(s) in relativedelta. - - years, months, weeks, days, hours, minutes, seconds, microseconds: - Relative information, may be negative (argument is plural); adding - or subtracting a relativedelta with relative information performs - the corresponding arithmetic operation on the original datetime value - with the information in the relativedelta. - - weekday: - One of the weekday instances (MO, TU, etc) available in the - relativedelta module. These instances may receive a parameter N, - specifying the Nth weekday, which could be positive or negative - (like MO(+1) or MO(-2)). Not specifying it is the same as specifying - +1. You can also use an integer, where 0=MO. This argument is always - relative e.g. if the calculated date is already Monday, using MO(1) - or MO(-1) won't change the day. To effectively make it absolute, use - it in combination with the day argument (e.g. day=1, MO(1) for first - Monday of the month). - - leapdays: - Will add given days to the date found, if year is a leap - year, and the date found is post 28 of february. - - yearday, nlyearday: - Set the yearday or the non-leap year day (jump leap days). - These are converted to day/month/leapdays information. - - There are relative and absolute forms of the keyword - arguments. The plural is relative, and the singular is - absolute. For each argument in the order below, the absolute form - is applied first (by setting each attribute to that value) and - then the relative form (by adding the value to the attribute). - - The order of attributes considered when this relativedelta is - added to a datetime is: - - 1. Year - 2. Month - 3. Day - 4. Hours - 5. Minutes - 6. Seconds - 7. Microseconds - - Finally, weekday is applied, using the rule described above. - - For example - - >>> from datetime import datetime - >>> from dateutil.relativedelta import relativedelta, MO - >>> dt = datetime(2018, 4, 9, 13, 37, 0) - >>> delta = relativedelta(hours=25, day=1, weekday=MO(1)) - >>> dt + delta - datetime.datetime(2018, 4, 2, 14, 37) - - First, the day is set to 1 (the first of the month), then 25 hours - are added, to get to the 2nd day and 14th hour, finally the - weekday is applied, but since the 2nd is already a Monday there is - no effect. - - """ - - def __init__(self, dt1=None, dt2=None, - years=0, months=0, days=0, leapdays=0, weeks=0, - hours=0, minutes=0, seconds=0, microseconds=0, - year=None, month=None, day=None, weekday=None, - yearday=None, nlyearday=None, - hour=None, minute=None, second=None, microsecond=None): - - if dt1 and dt2: - # datetime is a subclass of date. So both must be date - if not (isinstance(dt1, datetime.date) and - isinstance(dt2, datetime.date)): - raise TypeError("relativedelta only diffs datetime/date") - - # We allow two dates, or two datetimes, so we coerce them to be - # of the same type - if (isinstance(dt1, datetime.datetime) != - isinstance(dt2, datetime.datetime)): - if not isinstance(dt1, datetime.datetime): - dt1 = datetime.datetime.fromordinal(dt1.toordinal()) - elif not isinstance(dt2, datetime.datetime): - dt2 = datetime.datetime.fromordinal(dt2.toordinal()) - - self.years = 0 - self.months = 0 - self.days = 0 - self.leapdays = 0 - self.hours = 0 - self.minutes = 0 - self.seconds = 0 - self.microseconds = 0 - self.year = None - self.month = None - self.day = None - self.weekday = None - self.hour = None - self.minute = None - self.second = None - self.microsecond = None - self._has_time = 0 - - # Get year / month delta between the two - months = (dt1.year - dt2.year) * 12 + (dt1.month - dt2.month) - self._set_months(months) - - # Remove the year/month delta so the timedelta is just well-defined - # time units (seconds, days and microseconds) - dtm = self.__radd__(dt2) - - # If we've overshot our target, make an adjustment - if dt1 < dt2: - compare = operator.gt - increment = 1 - else: - compare = operator.lt - increment = -1 - - while compare(dt1, dtm): - months += increment - self._set_months(months) - dtm = self.__radd__(dt2) - - # Get the timedelta between the "months-adjusted" date and dt1 - delta = dt1 - dtm - self.seconds = delta.seconds + delta.days * 86400 - self.microseconds = delta.microseconds - else: - # Check for non-integer values in integer-only quantities - if any(x is not None and x != int(x) for x in (years, months)): - raise ValueError("Non-integer years and months are " - "ambiguous and not currently supported.") - - # Relative information - self.years = int(years) - self.months = int(months) - self.days = days + weeks * 7 - self.leapdays = leapdays - self.hours = hours - self.minutes = minutes - self.seconds = seconds - self.microseconds = microseconds - - # Absolute information - self.year = year - self.month = month - self.day = day - self.hour = hour - self.minute = minute - self.second = second - self.microsecond = microsecond - - if any(x is not None and int(x) != x - for x in (year, month, day, hour, - minute, second, microsecond)): - # For now we'll deprecate floats - later it'll be an error. - warn("Non-integer value passed as absolute information. " + - "This is not a well-defined condition and will raise " + - "errors in future versions.", DeprecationWarning) - - if isinstance(weekday, integer_types): - self.weekday = weekdays[weekday] - else: - self.weekday = weekday - - yday = 0 - if nlyearday: - yday = nlyearday - elif yearday: - yday = yearday - if yearday > 59: - self.leapdays = -1 - if yday: - ydayidx = [31, 59, 90, 120, 151, 181, 212, - 243, 273, 304, 334, 366] - for idx, ydays in enumerate(ydayidx): - if yday <= ydays: - self.month = idx+1 - if idx == 0: - self.day = yday - else: - self.day = yday-ydayidx[idx-1] - break - else: - raise ValueError("invalid year day (%d)" % yday) - - self._fix() - - def _fix(self): - if abs(self.microseconds) > 999999: - s = _sign(self.microseconds) - div, mod = divmod(self.microseconds * s, 1000000) - self.microseconds = mod * s - self.seconds += div * s - if abs(self.seconds) > 59: - s = _sign(self.seconds) - div, mod = divmod(self.seconds * s, 60) - self.seconds = mod * s - self.minutes += div * s - if abs(self.minutes) > 59: - s = _sign(self.minutes) - div, mod = divmod(self.minutes * s, 60) - self.minutes = mod * s - self.hours += div * s - if abs(self.hours) > 23: - s = _sign(self.hours) - div, mod = divmod(self.hours * s, 24) - self.hours = mod * s - self.days += div * s - if abs(self.months) > 11: - s = _sign(self.months) - div, mod = divmod(self.months * s, 12) - self.months = mod * s - self.years += div * s - if (self.hours or self.minutes or self.seconds or self.microseconds - or self.hour is not None or self.minute is not None or - self.second is not None or self.microsecond is not None): - self._has_time = 1 - else: - self._has_time = 0 - - @property - def weeks(self): - return int(self.days / 7.0) - - @weeks.setter - def weeks(self, value): - self.days = self.days - (self.weeks * 7) + value * 7 - - def _set_months(self, months): - self.months = months - if abs(self.months) > 11: - s = _sign(self.months) - div, mod = divmod(self.months * s, 12) - self.months = mod * s - self.years = div * s - else: - self.years = 0 - - def normalized(self): - """ - Return a version of this object represented entirely using integer - values for the relative attributes. - - >>> relativedelta(days=1.5, hours=2).normalized() - relativedelta(days=+1, hours=+14) - - :return: - Returns a :class:`dateutil.relativedelta.relativedelta` object. - """ - # Cascade remainders down (rounding each to roughly nearest microsecond) - days = int(self.days) - - hours_f = round(self.hours + 24 * (self.days - days), 11) - hours = int(hours_f) - - minutes_f = round(self.minutes + 60 * (hours_f - hours), 10) - minutes = int(minutes_f) - - seconds_f = round(self.seconds + 60 * (minutes_f - minutes), 8) - seconds = int(seconds_f) - - microseconds = round(self.microseconds + 1e6 * (seconds_f - seconds)) - - # Constructor carries overflow back up with call to _fix() - return self.__class__(years=self.years, months=self.months, - days=days, hours=hours, minutes=minutes, - seconds=seconds, microseconds=microseconds, - leapdays=self.leapdays, year=self.year, - month=self.month, day=self.day, - weekday=self.weekday, hour=self.hour, - minute=self.minute, second=self.second, - microsecond=self.microsecond) - - def __add__(self, other): - if isinstance(other, relativedelta): - return self.__class__(years=other.years + self.years, - months=other.months + self.months, - days=other.days + self.days, - hours=other.hours + self.hours, - minutes=other.minutes + self.minutes, - seconds=other.seconds + self.seconds, - microseconds=(other.microseconds + - self.microseconds), - leapdays=other.leapdays or self.leapdays, - year=(other.year if other.year is not None - else self.year), - month=(other.month if other.month is not None - else self.month), - day=(other.day if other.day is not None - else self.day), - weekday=(other.weekday if other.weekday is not None - else self.weekday), - hour=(other.hour if other.hour is not None - else self.hour), - minute=(other.minute if other.minute is not None - else self.minute), - second=(other.second if other.second is not None - else self.second), - microsecond=(other.microsecond if other.microsecond - is not None else - self.microsecond)) - if isinstance(other, datetime.timedelta): - return self.__class__(years=self.years, - months=self.months, - days=self.days + other.days, - hours=self.hours, - minutes=self.minutes, - seconds=self.seconds + other.seconds, - microseconds=self.microseconds + other.microseconds, - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - if not isinstance(other, datetime.date): - return NotImplemented - elif self._has_time and not isinstance(other, datetime.datetime): - other = datetime.datetime.fromordinal(other.toordinal()) - year = (self.year or other.year)+self.years - month = self.month or other.month - if self.months: - assert 1 <= abs(self.months) <= 12 - month += self.months - if month > 12: - year += 1 - month -= 12 - elif month < 1: - year -= 1 - month += 12 - day = min(calendar.monthrange(year, month)[1], - self.day or other.day) - repl = {"year": year, "month": month, "day": day} - for attr in ["hour", "minute", "second", "microsecond"]: - value = getattr(self, attr) - if value is not None: - repl[attr] = value - days = self.days - if self.leapdays and month > 2 and calendar.isleap(year): - days += self.leapdays - ret = (other.replace(**repl) - + datetime.timedelta(days=days, - hours=self.hours, - minutes=self.minutes, - seconds=self.seconds, - microseconds=self.microseconds)) - if self.weekday: - weekday, nth = self.weekday.weekday, self.weekday.n or 1 - jumpdays = (abs(nth) - 1) * 7 - if nth > 0: - jumpdays += (7 - ret.weekday() + weekday) % 7 - else: - jumpdays += (ret.weekday() - weekday) % 7 - jumpdays *= -1 - ret += datetime.timedelta(days=jumpdays) - return ret - - def __radd__(self, other): - return self.__add__(other) - - def __rsub__(self, other): - return self.__neg__().__radd__(other) - - def __sub__(self, other): - if not isinstance(other, relativedelta): - return NotImplemented # In case the other object defines __rsub__ - return self.__class__(years=self.years - other.years, - months=self.months - other.months, - days=self.days - other.days, - hours=self.hours - other.hours, - minutes=self.minutes - other.minutes, - seconds=self.seconds - other.seconds, - microseconds=self.microseconds - other.microseconds, - leapdays=self.leapdays or other.leapdays, - year=(self.year if self.year is not None - else other.year), - month=(self.month if self.month is not None else - other.month), - day=(self.day if self.day is not None else - other.day), - weekday=(self.weekday if self.weekday is not None else - other.weekday), - hour=(self.hour if self.hour is not None else - other.hour), - minute=(self.minute if self.minute is not None else - other.minute), - second=(self.second if self.second is not None else - other.second), - microsecond=(self.microsecond if self.microsecond - is not None else - other.microsecond)) - - def __abs__(self): - return self.__class__(years=abs(self.years), - months=abs(self.months), - days=abs(self.days), - hours=abs(self.hours), - minutes=abs(self.minutes), - seconds=abs(self.seconds), - microseconds=abs(self.microseconds), - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - def __neg__(self): - return self.__class__(years=-self.years, - months=-self.months, - days=-self.days, - hours=-self.hours, - minutes=-self.minutes, - seconds=-self.seconds, - microseconds=-self.microseconds, - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - def __bool__(self): - return not (not self.years and - not self.months and - not self.days and - not self.hours and - not self.minutes and - not self.seconds and - not self.microseconds and - not self.leapdays and - self.year is None and - self.month is None and - self.day is None and - self.weekday is None and - self.hour is None and - self.minute is None and - self.second is None and - self.microsecond is None) - # Compatibility with Python 2.x - __nonzero__ = __bool__ - - def __mul__(self, other): - try: - f = float(other) - except TypeError: - return NotImplemented - - return self.__class__(years=int(self.years * f), - months=int(self.months * f), - days=int(self.days * f), - hours=int(self.hours * f), - minutes=int(self.minutes * f), - seconds=int(self.seconds * f), - microseconds=int(self.microseconds * f), - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - __rmul__ = __mul__ - - def __eq__(self, other): - if not isinstance(other, relativedelta): - return NotImplemented - if self.weekday or other.weekday: - if not self.weekday or not other.weekday: - return False - if self.weekday.weekday != other.weekday.weekday: - return False - n1, n2 = self.weekday.n, other.weekday.n - if n1 != n2 and not ((not n1 or n1 == 1) and (not n2 or n2 == 1)): - return False - return (self.years == other.years and - self.months == other.months and - self.days == other.days and - self.hours == other.hours and - self.minutes == other.minutes and - self.seconds == other.seconds and - self.microseconds == other.microseconds and - self.leapdays == other.leapdays and - self.year == other.year and - self.month == other.month and - self.day == other.day and - self.hour == other.hour and - self.minute == other.minute and - self.second == other.second and - self.microsecond == other.microsecond) - - def __hash__(self): - return hash(( - self.weekday, - self.years, - self.months, - self.days, - self.hours, - self.minutes, - self.seconds, - self.microseconds, - self.leapdays, - self.year, - self.month, - self.day, - self.hour, - self.minute, - self.second, - self.microsecond, - )) - - def __ne__(self, other): - return not self.__eq__(other) - - def __div__(self, other): - try: - reciprocal = 1 / float(other) - except TypeError: - return NotImplemented - - return self.__mul__(reciprocal) - - __truediv__ = __div__ - - def __repr__(self): - l = [] - for attr in ["years", "months", "days", "leapdays", - "hours", "minutes", "seconds", "microseconds"]: - value = getattr(self, attr) - if value: - l.append("{attr}={value:+g}".format(attr=attr, value=value)) - for attr in ["year", "month", "day", "weekday", - "hour", "minute", "second", "microsecond"]: - value = getattr(self, attr) - if value is not None: - l.append("{attr}={value}".format(attr=attr, value=repr(value))) - return "{classname}({attrs})".format(classname=self.__class__.__name__, - attrs=", ".join(l)) - - -def _sign(x): - return int(copysign(1, x)) - -# vim:ts=4:sw=4:et diff --git a/myenv/lib/python3.12/site-packages/dateutil/rrule.py b/myenv/lib/python3.12/site-packages/dateutil/rrule.py deleted file mode 100644 index 571a0d2..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/rrule.py +++ /dev/null @@ -1,1737 +0,0 @@ -# -*- coding: utf-8 -*- -""" -The rrule module offers a small, complete, and very fast, implementation of -the recurrence rules documented in the -`iCalendar RFC `_, -including support for caching of results. -""" -import calendar -import datetime -import heapq -import itertools -import re -import sys -from functools import wraps -# For warning about deprecation of until and count -from warnings import warn - -from six import advance_iterator, integer_types - -from six.moves import _thread, range - -from ._common import weekday as weekdaybase - -try: - from math import gcd -except ImportError: - from fractions import gcd - -__all__ = ["rrule", "rruleset", "rrulestr", - "YEARLY", "MONTHLY", "WEEKLY", "DAILY", - "HOURLY", "MINUTELY", "SECONDLY", - "MO", "TU", "WE", "TH", "FR", "SA", "SU"] - -# Every mask is 7 days longer to handle cross-year weekly periods. -M366MASK = tuple([1]*31+[2]*29+[3]*31+[4]*30+[5]*31+[6]*30 + - [7]*31+[8]*31+[9]*30+[10]*31+[11]*30+[12]*31+[1]*7) -M365MASK = list(M366MASK) -M29, M30, M31 = list(range(1, 30)), list(range(1, 31)), list(range(1, 32)) -MDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) -MDAY365MASK = list(MDAY366MASK) -M29, M30, M31 = list(range(-29, 0)), list(range(-30, 0)), list(range(-31, 0)) -NMDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) -NMDAY365MASK = list(NMDAY366MASK) -M366RANGE = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366) -M365RANGE = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365) -WDAYMASK = [0, 1, 2, 3, 4, 5, 6]*55 -del M29, M30, M31, M365MASK[59], MDAY365MASK[59], NMDAY365MASK[31] -MDAY365MASK = tuple(MDAY365MASK) -M365MASK = tuple(M365MASK) - -FREQNAMES = ['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY', 'HOURLY', 'MINUTELY', 'SECONDLY'] - -(YEARLY, - MONTHLY, - WEEKLY, - DAILY, - HOURLY, - MINUTELY, - SECONDLY) = list(range(7)) - -# Imported on demand. -easter = None -parser = None - - -class weekday(weekdaybase): - """ - This version of weekday does not allow n = 0. - """ - def __init__(self, wkday, n=None): - if n == 0: - raise ValueError("Can't create weekday with n==0") - - super(weekday, self).__init__(wkday, n) - - -MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) - - -def _invalidates_cache(f): - """ - Decorator for rruleset methods which may invalidate the - cached length. - """ - @wraps(f) - def inner_func(self, *args, **kwargs): - rv = f(self, *args, **kwargs) - self._invalidate_cache() - return rv - - return inner_func - - -class rrulebase(object): - def __init__(self, cache=False): - if cache: - self._cache = [] - self._cache_lock = _thread.allocate_lock() - self._invalidate_cache() - else: - self._cache = None - self._cache_complete = False - self._len = None - - def __iter__(self): - if self._cache_complete: - return iter(self._cache) - elif self._cache is None: - return self._iter() - else: - return self._iter_cached() - - def _invalidate_cache(self): - if self._cache is not None: - self._cache = [] - self._cache_complete = False - self._cache_gen = self._iter() - - if self._cache_lock.locked(): - self._cache_lock.release() - - self._len = None - - def _iter_cached(self): - i = 0 - gen = self._cache_gen - cache = self._cache - acquire = self._cache_lock.acquire - release = self._cache_lock.release - while gen: - if i == len(cache): - acquire() - if self._cache_complete: - break - try: - for j in range(10): - cache.append(advance_iterator(gen)) - except StopIteration: - self._cache_gen = gen = None - self._cache_complete = True - break - release() - yield cache[i] - i += 1 - while i < self._len: - yield cache[i] - i += 1 - - def __getitem__(self, item): - if self._cache_complete: - return self._cache[item] - elif isinstance(item, slice): - if item.step and item.step < 0: - return list(iter(self))[item] - else: - return list(itertools.islice(self, - item.start or 0, - item.stop or sys.maxsize, - item.step or 1)) - elif item >= 0: - gen = iter(self) - try: - for i in range(item+1): - res = advance_iterator(gen) - except StopIteration: - raise IndexError - return res - else: - return list(iter(self))[item] - - def __contains__(self, item): - if self._cache_complete: - return item in self._cache - else: - for i in self: - if i == item: - return True - elif i > item: - return False - return False - - # __len__() introduces a large performance penalty. - def count(self): - """ Returns the number of recurrences in this set. It will have go - through the whole recurrence, if this hasn't been done before. """ - if self._len is None: - for x in self: - pass - return self._len - - def before(self, dt, inc=False): - """ Returns the last recurrence before the given datetime instance. The - inc keyword defines what happens if dt is an occurrence. With - inc=True, if dt itself is an occurrence, it will be returned. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - last = None - if inc: - for i in gen: - if i > dt: - break - last = i - else: - for i in gen: - if i >= dt: - break - last = i - return last - - def after(self, dt, inc=False): - """ Returns the first recurrence after the given datetime instance. The - inc keyword defines what happens if dt is an occurrence. With - inc=True, if dt itself is an occurrence, it will be returned. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - if inc: - for i in gen: - if i >= dt: - return i - else: - for i in gen: - if i > dt: - return i - return None - - def xafter(self, dt, count=None, inc=False): - """ - Generator which yields up to `count` recurrences after the given - datetime instance, equivalent to `after`. - - :param dt: - The datetime at which to start generating recurrences. - - :param count: - The maximum number of recurrences to generate. If `None` (default), - dates are generated until the recurrence rule is exhausted. - - :param inc: - If `dt` is an instance of the rule and `inc` is `True`, it is - included in the output. - - :yields: Yields a sequence of `datetime` objects. - """ - - if self._cache_complete: - gen = self._cache - else: - gen = self - - # Select the comparison function - if inc: - comp = lambda dc, dtc: dc >= dtc - else: - comp = lambda dc, dtc: dc > dtc - - # Generate dates - n = 0 - for d in gen: - if comp(d, dt): - if count is not None: - n += 1 - if n > count: - break - - yield d - - def between(self, after, before, inc=False, count=1): - """ Returns all the occurrences of the rrule between after and before. - The inc keyword defines what happens if after and/or before are - themselves occurrences. With inc=True, they will be included in the - list, if they are found in the recurrence set. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - started = False - l = [] - if inc: - for i in gen: - if i > before: - break - elif not started: - if i >= after: - started = True - l.append(i) - else: - l.append(i) - else: - for i in gen: - if i >= before: - break - elif not started: - if i > after: - started = True - l.append(i) - else: - l.append(i) - return l - - -class rrule(rrulebase): - """ - That's the base of the rrule operation. It accepts all the keywords - defined in the RFC as its constructor parameters (except byday, - which was renamed to byweekday) and more. The constructor prototype is:: - - rrule(freq) - - Where freq must be one of YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, - or SECONDLY. - - .. note:: - Per RFC section 3.3.10, recurrence instances falling on invalid dates - and times are ignored rather than coerced: - - Recurrence rules may generate recurrence instances with an invalid - date (e.g., February 30) or nonexistent local time (e.g., 1:30 AM - on a day where the local time is moved forward by an hour at 1:00 - AM). Such recurrence instances MUST be ignored and MUST NOT be - counted as part of the recurrence set. - - This can lead to possibly surprising behavior when, for example, the - start date occurs at the end of the month: - - >>> from dateutil.rrule import rrule, MONTHLY - >>> from datetime import datetime - >>> start_date = datetime(2014, 12, 31) - >>> list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) - ... # doctest: +NORMALIZE_WHITESPACE - [datetime.datetime(2014, 12, 31, 0, 0), - datetime.datetime(2015, 1, 31, 0, 0), - datetime.datetime(2015, 3, 31, 0, 0), - datetime.datetime(2015, 5, 31, 0, 0)] - - Additionally, it supports the following keyword arguments: - - :param dtstart: - The recurrence start. Besides being the base for the recurrence, - missing parameters in the final recurrence instances will also be - extracted from this date. If not given, datetime.now() will be used - instead. - :param interval: - The interval between each freq iteration. For example, when using - YEARLY, an interval of 2 means once every two years, but with HOURLY, - it means once every two hours. The default interval is 1. - :param wkst: - The week start day. Must be one of the MO, TU, WE constants, or an - integer, specifying the first day of the week. This will affect - recurrences based on weekly periods. The default week start is got - from calendar.firstweekday(), and may be modified by - calendar.setfirstweekday(). - :param count: - If given, this determines how many occurrences will be generated. - - .. note:: - As of version 2.5.0, the use of the keyword ``until`` in conjunction - with ``count`` is deprecated, to make sure ``dateutil`` is fully - compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` - **must not** occur in the same call to ``rrule``. - :param until: - If given, this must be a datetime instance specifying the upper-bound - limit of the recurrence. The last recurrence in the rule is the greatest - datetime that is less than or equal to the value specified in the - ``until`` parameter. - - .. note:: - As of version 2.5.0, the use of the keyword ``until`` in conjunction - with ``count`` is deprecated, to make sure ``dateutil`` is fully - compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` - **must not** occur in the same call to ``rrule``. - :param bysetpos: - If given, it must be either an integer, or a sequence of integers, - positive or negative. Each given integer will specify an occurrence - number, corresponding to the nth occurrence of the rule inside the - frequency period. For example, a bysetpos of -1 if combined with a - MONTHLY frequency, and a byweekday of (MO, TU, WE, TH, FR), will - result in the last work day of every month. - :param bymonth: - If given, it must be either an integer, or a sequence of integers, - meaning the months to apply the recurrence to. - :param bymonthday: - If given, it must be either an integer, or a sequence of integers, - meaning the month days to apply the recurrence to. - :param byyearday: - If given, it must be either an integer, or a sequence of integers, - meaning the year days to apply the recurrence to. - :param byeaster: - If given, it must be either an integer, or a sequence of integers, - positive or negative. Each integer will define an offset from the - Easter Sunday. Passing the offset 0 to byeaster will yield the Easter - Sunday itself. This is an extension to the RFC specification. - :param byweekno: - If given, it must be either an integer, or a sequence of integers, - meaning the week numbers to apply the recurrence to. Week numbers - have the meaning described in ISO8601, that is, the first week of - the year is that containing at least four days of the new year. - :param byweekday: - If given, it must be either an integer (0 == MO), a sequence of - integers, one of the weekday constants (MO, TU, etc), or a sequence - of these constants. When given, these variables will define the - weekdays where the recurrence will be applied. It's also possible to - use an argument n for the weekday instances, which will mean the nth - occurrence of this weekday in the period. For example, with MONTHLY, - or with YEARLY and BYMONTH, using FR(+1) in byweekday will specify the - first friday of the month where the recurrence happens. Notice that in - the RFC documentation, this is specified as BYDAY, but was renamed to - avoid the ambiguity of that keyword. - :param byhour: - If given, it must be either an integer, or a sequence of integers, - meaning the hours to apply the recurrence to. - :param byminute: - If given, it must be either an integer, or a sequence of integers, - meaning the minutes to apply the recurrence to. - :param bysecond: - If given, it must be either an integer, or a sequence of integers, - meaning the seconds to apply the recurrence to. - :param cache: - If given, it must be a boolean value specifying to enable or disable - caching of results. If you will use the same rrule instance multiple - times, enabling caching will improve the performance considerably. - """ - def __init__(self, freq, dtstart=None, - interval=1, wkst=None, count=None, until=None, bysetpos=None, - bymonth=None, bymonthday=None, byyearday=None, byeaster=None, - byweekno=None, byweekday=None, - byhour=None, byminute=None, bysecond=None, - cache=False): - super(rrule, self).__init__(cache) - global easter - if not dtstart: - if until and until.tzinfo: - dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0) - else: - dtstart = datetime.datetime.now().replace(microsecond=0) - elif not isinstance(dtstart, datetime.datetime): - dtstart = datetime.datetime.fromordinal(dtstart.toordinal()) - else: - dtstart = dtstart.replace(microsecond=0) - self._dtstart = dtstart - self._tzinfo = dtstart.tzinfo - self._freq = freq - self._interval = interval - self._count = count - - # Cache the original byxxx rules, if they are provided, as the _byxxx - # attributes do not necessarily map to the inputs, and this can be - # a problem in generating the strings. Only store things if they've - # been supplied (the string retrieval will just use .get()) - self._original_rule = {} - - if until and not isinstance(until, datetime.datetime): - until = datetime.datetime.fromordinal(until.toordinal()) - self._until = until - - if self._dtstart and self._until: - if (self._dtstart.tzinfo is not None) != (self._until.tzinfo is not None): - # According to RFC5545 Section 3.3.10: - # https://tools.ietf.org/html/rfc5545#section-3.3.10 - # - # > If the "DTSTART" property is specified as a date with UTC - # > time or a date with local time and time zone reference, - # > then the UNTIL rule part MUST be specified as a date with - # > UTC time. - raise ValueError( - 'RRULE UNTIL values must be specified in UTC when DTSTART ' - 'is timezone-aware' - ) - - if count is not None and until: - warn("Using both 'count' and 'until' is inconsistent with RFC 5545" - " and has been deprecated in dateutil. Future versions will " - "raise an error.", DeprecationWarning) - - if wkst is None: - self._wkst = calendar.firstweekday() - elif isinstance(wkst, integer_types): - self._wkst = wkst - else: - self._wkst = wkst.weekday - - if bysetpos is None: - self._bysetpos = None - elif isinstance(bysetpos, integer_types): - if bysetpos == 0 or not (-366 <= bysetpos <= 366): - raise ValueError("bysetpos must be between 1 and 366, " - "or between -366 and -1") - self._bysetpos = (bysetpos,) - else: - self._bysetpos = tuple(bysetpos) - for pos in self._bysetpos: - if pos == 0 or not (-366 <= pos <= 366): - raise ValueError("bysetpos must be between 1 and 366, " - "or between -366 and -1") - - if self._bysetpos: - self._original_rule['bysetpos'] = self._bysetpos - - if (byweekno is None and byyearday is None and bymonthday is None and - byweekday is None and byeaster is None): - if freq == YEARLY: - if bymonth is None: - bymonth = dtstart.month - self._original_rule['bymonth'] = None - bymonthday = dtstart.day - self._original_rule['bymonthday'] = None - elif freq == MONTHLY: - bymonthday = dtstart.day - self._original_rule['bymonthday'] = None - elif freq == WEEKLY: - byweekday = dtstart.weekday() - self._original_rule['byweekday'] = None - - # bymonth - if bymonth is None: - self._bymonth = None - else: - if isinstance(bymonth, integer_types): - bymonth = (bymonth,) - - self._bymonth = tuple(sorted(set(bymonth))) - - if 'bymonth' not in self._original_rule: - self._original_rule['bymonth'] = self._bymonth - - # byyearday - if byyearday is None: - self._byyearday = None - else: - if isinstance(byyearday, integer_types): - byyearday = (byyearday,) - - self._byyearday = tuple(sorted(set(byyearday))) - self._original_rule['byyearday'] = self._byyearday - - # byeaster - if byeaster is not None: - if not easter: - from dateutil import easter - if isinstance(byeaster, integer_types): - self._byeaster = (byeaster,) - else: - self._byeaster = tuple(sorted(byeaster)) - - self._original_rule['byeaster'] = self._byeaster - else: - self._byeaster = None - - # bymonthday - if bymonthday is None: - self._bymonthday = () - self._bynmonthday = () - else: - if isinstance(bymonthday, integer_types): - bymonthday = (bymonthday,) - - bymonthday = set(bymonthday) # Ensure it's unique - - self._bymonthday = tuple(sorted(x for x in bymonthday if x > 0)) - self._bynmonthday = tuple(sorted(x for x in bymonthday if x < 0)) - - # Storing positive numbers first, then negative numbers - if 'bymonthday' not in self._original_rule: - self._original_rule['bymonthday'] = tuple( - itertools.chain(self._bymonthday, self._bynmonthday)) - - # byweekno - if byweekno is None: - self._byweekno = None - else: - if isinstance(byweekno, integer_types): - byweekno = (byweekno,) - - self._byweekno = tuple(sorted(set(byweekno))) - - self._original_rule['byweekno'] = self._byweekno - - # byweekday / bynweekday - if byweekday is None: - self._byweekday = None - self._bynweekday = None - else: - # If it's one of the valid non-sequence types, convert to a - # single-element sequence before the iterator that builds the - # byweekday set. - if isinstance(byweekday, integer_types) or hasattr(byweekday, "n"): - byweekday = (byweekday,) - - self._byweekday = set() - self._bynweekday = set() - for wday in byweekday: - if isinstance(wday, integer_types): - self._byweekday.add(wday) - elif not wday.n or freq > MONTHLY: - self._byweekday.add(wday.weekday) - else: - self._bynweekday.add((wday.weekday, wday.n)) - - if not self._byweekday: - self._byweekday = None - elif not self._bynweekday: - self._bynweekday = None - - if self._byweekday is not None: - self._byweekday = tuple(sorted(self._byweekday)) - orig_byweekday = [weekday(x) for x in self._byweekday] - else: - orig_byweekday = () - - if self._bynweekday is not None: - self._bynweekday = tuple(sorted(self._bynweekday)) - orig_bynweekday = [weekday(*x) for x in self._bynweekday] - else: - orig_bynweekday = () - - if 'byweekday' not in self._original_rule: - self._original_rule['byweekday'] = tuple(itertools.chain( - orig_byweekday, orig_bynweekday)) - - # byhour - if byhour is None: - if freq < HOURLY: - self._byhour = {dtstart.hour} - else: - self._byhour = None - else: - if isinstance(byhour, integer_types): - byhour = (byhour,) - - if freq == HOURLY: - self._byhour = self.__construct_byset(start=dtstart.hour, - byxxx=byhour, - base=24) - else: - self._byhour = set(byhour) - - self._byhour = tuple(sorted(self._byhour)) - self._original_rule['byhour'] = self._byhour - - # byminute - if byminute is None: - if freq < MINUTELY: - self._byminute = {dtstart.minute} - else: - self._byminute = None - else: - if isinstance(byminute, integer_types): - byminute = (byminute,) - - if freq == MINUTELY: - self._byminute = self.__construct_byset(start=dtstart.minute, - byxxx=byminute, - base=60) - else: - self._byminute = set(byminute) - - self._byminute = tuple(sorted(self._byminute)) - self._original_rule['byminute'] = self._byminute - - # bysecond - if bysecond is None: - if freq < SECONDLY: - self._bysecond = ((dtstart.second,)) - else: - self._bysecond = None - else: - if isinstance(bysecond, integer_types): - bysecond = (bysecond,) - - self._bysecond = set(bysecond) - - if freq == SECONDLY: - self._bysecond = self.__construct_byset(start=dtstart.second, - byxxx=bysecond, - base=60) - else: - self._bysecond = set(bysecond) - - self._bysecond = tuple(sorted(self._bysecond)) - self._original_rule['bysecond'] = self._bysecond - - if self._freq >= HOURLY: - self._timeset = None - else: - self._timeset = [] - for hour in self._byhour: - for minute in self._byminute: - for second in self._bysecond: - self._timeset.append( - datetime.time(hour, minute, second, - tzinfo=self._tzinfo)) - self._timeset.sort() - self._timeset = tuple(self._timeset) - - def __str__(self): - """ - Output a string that would generate this RRULE if passed to rrulestr. - This is mostly compatible with RFC5545, except for the - dateutil-specific extension BYEASTER. - """ - - output = [] - h, m, s = [None] * 3 - if self._dtstart: - output.append(self._dtstart.strftime('DTSTART:%Y%m%dT%H%M%S')) - h, m, s = self._dtstart.timetuple()[3:6] - - parts = ['FREQ=' + FREQNAMES[self._freq]] - if self._interval != 1: - parts.append('INTERVAL=' + str(self._interval)) - - if self._wkst: - parts.append('WKST=' + repr(weekday(self._wkst))[0:2]) - - if self._count is not None: - parts.append('COUNT=' + str(self._count)) - - if self._until: - parts.append(self._until.strftime('UNTIL=%Y%m%dT%H%M%S')) - - if self._original_rule.get('byweekday') is not None: - # The str() method on weekday objects doesn't generate - # RFC5545-compliant strings, so we should modify that. - original_rule = dict(self._original_rule) - wday_strings = [] - for wday in original_rule['byweekday']: - if wday.n: - wday_strings.append('{n:+d}{wday}'.format( - n=wday.n, - wday=repr(wday)[0:2])) - else: - wday_strings.append(repr(wday)) - - original_rule['byweekday'] = wday_strings - else: - original_rule = self._original_rule - - partfmt = '{name}={vals}' - for name, key in [('BYSETPOS', 'bysetpos'), - ('BYMONTH', 'bymonth'), - ('BYMONTHDAY', 'bymonthday'), - ('BYYEARDAY', 'byyearday'), - ('BYWEEKNO', 'byweekno'), - ('BYDAY', 'byweekday'), - ('BYHOUR', 'byhour'), - ('BYMINUTE', 'byminute'), - ('BYSECOND', 'bysecond'), - ('BYEASTER', 'byeaster')]: - value = original_rule.get(key) - if value: - parts.append(partfmt.format(name=name, vals=(','.join(str(v) - for v in value)))) - - output.append('RRULE:' + ';'.join(parts)) - return '\n'.join(output) - - def replace(self, **kwargs): - """Return new rrule with same attributes except for those attributes given new - values by whichever keyword arguments are specified.""" - new_kwargs = {"interval": self._interval, - "count": self._count, - "dtstart": self._dtstart, - "freq": self._freq, - "until": self._until, - "wkst": self._wkst, - "cache": False if self._cache is None else True } - new_kwargs.update(self._original_rule) - new_kwargs.update(kwargs) - return rrule(**new_kwargs) - - def _iter(self): - year, month, day, hour, minute, second, weekday, yearday, _ = \ - self._dtstart.timetuple() - - # Some local variables to speed things up a bit - freq = self._freq - interval = self._interval - wkst = self._wkst - until = self._until - bymonth = self._bymonth - byweekno = self._byweekno - byyearday = self._byyearday - byweekday = self._byweekday - byeaster = self._byeaster - bymonthday = self._bymonthday - bynmonthday = self._bynmonthday - bysetpos = self._bysetpos - byhour = self._byhour - byminute = self._byminute - bysecond = self._bysecond - - ii = _iterinfo(self) - ii.rebuild(year, month) - - getdayset = {YEARLY: ii.ydayset, - MONTHLY: ii.mdayset, - WEEKLY: ii.wdayset, - DAILY: ii.ddayset, - HOURLY: ii.ddayset, - MINUTELY: ii.ddayset, - SECONDLY: ii.ddayset}[freq] - - if freq < HOURLY: - timeset = self._timeset - else: - gettimeset = {HOURLY: ii.htimeset, - MINUTELY: ii.mtimeset, - SECONDLY: ii.stimeset}[freq] - if ((freq >= HOURLY and - self._byhour and hour not in self._byhour) or - (freq >= MINUTELY and - self._byminute and minute not in self._byminute) or - (freq >= SECONDLY and - self._bysecond and second not in self._bysecond)): - timeset = () - else: - timeset = gettimeset(hour, minute, second) - - total = 0 - count = self._count - while True: - # Get dayset with the right frequency - dayset, start, end = getdayset(year, month, day) - - # Do the "hard" work ;-) - filtered = False - for i in dayset[start:end]: - if ((bymonth and ii.mmask[i] not in bymonth) or - (byweekno and not ii.wnomask[i]) or - (byweekday and ii.wdaymask[i] not in byweekday) or - (ii.nwdaymask and not ii.nwdaymask[i]) or - (byeaster and not ii.eastermask[i]) or - ((bymonthday or bynmonthday) and - ii.mdaymask[i] not in bymonthday and - ii.nmdaymask[i] not in bynmonthday) or - (byyearday and - ((i < ii.yearlen and i+1 not in byyearday and - -ii.yearlen+i not in byyearday) or - (i >= ii.yearlen and i+1-ii.yearlen not in byyearday and - -ii.nextyearlen+i-ii.yearlen not in byyearday)))): - dayset[i] = None - filtered = True - - # Output results - if bysetpos and timeset: - poslist = [] - for pos in bysetpos: - if pos < 0: - daypos, timepos = divmod(pos, len(timeset)) - else: - daypos, timepos = divmod(pos-1, len(timeset)) - try: - i = [x for x in dayset[start:end] - if x is not None][daypos] - time = timeset[timepos] - except IndexError: - pass - else: - date = datetime.date.fromordinal(ii.yearordinal+i) - res = datetime.datetime.combine(date, time) - if res not in poslist: - poslist.append(res) - poslist.sort() - for res in poslist: - if until and res > until: - self._len = total - return - elif res >= self._dtstart: - if count is not None: - count -= 1 - if count < 0: - self._len = total - return - total += 1 - yield res - else: - for i in dayset[start:end]: - if i is not None: - date = datetime.date.fromordinal(ii.yearordinal + i) - for time in timeset: - res = datetime.datetime.combine(date, time) - if until and res > until: - self._len = total - return - elif res >= self._dtstart: - if count is not None: - count -= 1 - if count < 0: - self._len = total - return - - total += 1 - yield res - - # Handle frequency and interval - fixday = False - if freq == YEARLY: - year += interval - if year > datetime.MAXYEAR: - self._len = total - return - ii.rebuild(year, month) - elif freq == MONTHLY: - month += interval - if month > 12: - div, mod = divmod(month, 12) - month = mod - year += div - if month == 0: - month = 12 - year -= 1 - if year > datetime.MAXYEAR: - self._len = total - return - ii.rebuild(year, month) - elif freq == WEEKLY: - if wkst > weekday: - day += -(weekday+1+(6-wkst))+self._interval*7 - else: - day += -(weekday-wkst)+self._interval*7 - weekday = wkst - fixday = True - elif freq == DAILY: - day += interval - fixday = True - elif freq == HOURLY: - if filtered: - # Jump to one iteration before next day - hour += ((23-hour)//interval)*interval - - if byhour: - ndays, hour = self.__mod_distance(value=hour, - byxxx=self._byhour, - base=24) - else: - ndays, hour = divmod(hour+interval, 24) - - if ndays: - day += ndays - fixday = True - - timeset = gettimeset(hour, minute, second) - elif freq == MINUTELY: - if filtered: - # Jump to one iteration before next day - minute += ((1439-(hour*60+minute))//interval)*interval - - valid = False - rep_rate = (24*60) - for j in range(rep_rate // gcd(interval, rep_rate)): - if byminute: - nhours, minute = \ - self.__mod_distance(value=minute, - byxxx=self._byminute, - base=60) - else: - nhours, minute = divmod(minute+interval, 60) - - div, hour = divmod(hour+nhours, 24) - if div: - day += div - fixday = True - filtered = False - - if not byhour or hour in byhour: - valid = True - break - - if not valid: - raise ValueError('Invalid combination of interval and ' + - 'byhour resulting in empty rule.') - - timeset = gettimeset(hour, minute, second) - elif freq == SECONDLY: - if filtered: - # Jump to one iteration before next day - second += (((86399 - (hour * 3600 + minute * 60 + second)) - // interval) * interval) - - rep_rate = (24 * 3600) - valid = False - for j in range(0, rep_rate // gcd(interval, rep_rate)): - if bysecond: - nminutes, second = \ - self.__mod_distance(value=second, - byxxx=self._bysecond, - base=60) - else: - nminutes, second = divmod(second+interval, 60) - - div, minute = divmod(minute+nminutes, 60) - if div: - hour += div - div, hour = divmod(hour, 24) - if div: - day += div - fixday = True - - if ((not byhour or hour in byhour) and - (not byminute or minute in byminute) and - (not bysecond or second in bysecond)): - valid = True - break - - if not valid: - raise ValueError('Invalid combination of interval, ' + - 'byhour and byminute resulting in empty' + - ' rule.') - - timeset = gettimeset(hour, minute, second) - - if fixday and day > 28: - daysinmonth = calendar.monthrange(year, month)[1] - if day > daysinmonth: - while day > daysinmonth: - day -= daysinmonth - month += 1 - if month == 13: - month = 1 - year += 1 - if year > datetime.MAXYEAR: - self._len = total - return - daysinmonth = calendar.monthrange(year, month)[1] - ii.rebuild(year, month) - - def __construct_byset(self, start, byxxx, base): - """ - If a `BYXXX` sequence is passed to the constructor at the same level as - `FREQ` (e.g. `FREQ=HOURLY,BYHOUR={2,4,7},INTERVAL=3`), there are some - specifications which cannot be reached given some starting conditions. - - This occurs whenever the interval is not coprime with the base of a - given unit and the difference between the starting position and the - ending position is not coprime with the greatest common denominator - between the interval and the base. For example, with a FREQ of hourly - starting at 17:00 and an interval of 4, the only valid values for - BYHOUR would be {21, 1, 5, 9, 13, 17}, because 4 and 24 are not - coprime. - - :param start: - Specifies the starting position. - :param byxxx: - An iterable containing the list of allowed values. - :param base: - The largest allowable value for the specified frequency (e.g. - 24 hours, 60 minutes). - - This does not preserve the type of the iterable, returning a set, since - the values should be unique and the order is irrelevant, this will - speed up later lookups. - - In the event of an empty set, raises a :exception:`ValueError`, as this - results in an empty rrule. - """ - - cset = set() - - # Support a single byxxx value. - if isinstance(byxxx, integer_types): - byxxx = (byxxx, ) - - for num in byxxx: - i_gcd = gcd(self._interval, base) - # Use divmod rather than % because we need to wrap negative nums. - if i_gcd == 1 or divmod(num - start, i_gcd)[1] == 0: - cset.add(num) - - if len(cset) == 0: - raise ValueError("Invalid rrule byxxx generates an empty set.") - - return cset - - def __mod_distance(self, value, byxxx, base): - """ - Calculates the next value in a sequence where the `FREQ` parameter is - specified along with a `BYXXX` parameter at the same "level" - (e.g. `HOURLY` specified with `BYHOUR`). - - :param value: - The old value of the component. - :param byxxx: - The `BYXXX` set, which should have been generated by - `rrule._construct_byset`, or something else which checks that a - valid rule is present. - :param base: - The largest allowable value for the specified frequency (e.g. - 24 hours, 60 minutes). - - If a valid value is not found after `base` iterations (the maximum - number before the sequence would start to repeat), this raises a - :exception:`ValueError`, as no valid values were found. - - This returns a tuple of `divmod(n*interval, base)`, where `n` is the - smallest number of `interval` repetitions until the next specified - value in `byxxx` is found. - """ - accumulator = 0 - for ii in range(1, base + 1): - # Using divmod() over % to account for negative intervals - div, value = divmod(value + self._interval, base) - accumulator += div - if value in byxxx: - return (accumulator, value) - - -class _iterinfo(object): - __slots__ = ["rrule", "lastyear", "lastmonth", - "yearlen", "nextyearlen", "yearordinal", "yearweekday", - "mmask", "mrange", "mdaymask", "nmdaymask", - "wdaymask", "wnomask", "nwdaymask", "eastermask"] - - def __init__(self, rrule): - for attr in self.__slots__: - setattr(self, attr, None) - self.rrule = rrule - - def rebuild(self, year, month): - # Every mask is 7 days longer to handle cross-year weekly periods. - rr = self.rrule - if year != self.lastyear: - self.yearlen = 365 + calendar.isleap(year) - self.nextyearlen = 365 + calendar.isleap(year + 1) - firstyday = datetime.date(year, 1, 1) - self.yearordinal = firstyday.toordinal() - self.yearweekday = firstyday.weekday() - - wday = datetime.date(year, 1, 1).weekday() - if self.yearlen == 365: - self.mmask = M365MASK - self.mdaymask = MDAY365MASK - self.nmdaymask = NMDAY365MASK - self.wdaymask = WDAYMASK[wday:] - self.mrange = M365RANGE - else: - self.mmask = M366MASK - self.mdaymask = MDAY366MASK - self.nmdaymask = NMDAY366MASK - self.wdaymask = WDAYMASK[wday:] - self.mrange = M366RANGE - - if not rr._byweekno: - self.wnomask = None - else: - self.wnomask = [0]*(self.yearlen+7) - # no1wkst = firstwkst = self.wdaymask.index(rr._wkst) - no1wkst = firstwkst = (7-self.yearweekday+rr._wkst) % 7 - if no1wkst >= 4: - no1wkst = 0 - # Number of days in the year, plus the days we got - # from last year. - wyearlen = self.yearlen+(self.yearweekday-rr._wkst) % 7 - else: - # Number of days in the year, minus the days we - # left in last year. - wyearlen = self.yearlen-no1wkst - div, mod = divmod(wyearlen, 7) - numweeks = div+mod//4 - for n in rr._byweekno: - if n < 0: - n += numweeks+1 - if not (0 < n <= numweeks): - continue - if n > 1: - i = no1wkst+(n-1)*7 - if no1wkst != firstwkst: - i -= 7-firstwkst - else: - i = no1wkst - for j in range(7): - self.wnomask[i] = 1 - i += 1 - if self.wdaymask[i] == rr._wkst: - break - if 1 in rr._byweekno: - # Check week number 1 of next year as well - # TODO: Check -numweeks for next year. - i = no1wkst+numweeks*7 - if no1wkst != firstwkst: - i -= 7-firstwkst - if i < self.yearlen: - # If week starts in next year, we - # don't care about it. - for j in range(7): - self.wnomask[i] = 1 - i += 1 - if self.wdaymask[i] == rr._wkst: - break - if no1wkst: - # Check last week number of last year as - # well. If no1wkst is 0, either the year - # started on week start, or week number 1 - # got days from last year, so there are no - # days from last year's last week number in - # this year. - if -1 not in rr._byweekno: - lyearweekday = datetime.date(year-1, 1, 1).weekday() - lno1wkst = (7-lyearweekday+rr._wkst) % 7 - lyearlen = 365+calendar.isleap(year-1) - if lno1wkst >= 4: - lno1wkst = 0 - lnumweeks = 52+(lyearlen + - (lyearweekday-rr._wkst) % 7) % 7//4 - else: - lnumweeks = 52+(self.yearlen-no1wkst) % 7//4 - else: - lnumweeks = -1 - if lnumweeks in rr._byweekno: - for i in range(no1wkst): - self.wnomask[i] = 1 - - if (rr._bynweekday and (month != self.lastmonth or - year != self.lastyear)): - ranges = [] - if rr._freq == YEARLY: - if rr._bymonth: - for month in rr._bymonth: - ranges.append(self.mrange[month-1:month+1]) - else: - ranges = [(0, self.yearlen)] - elif rr._freq == MONTHLY: - ranges = [self.mrange[month-1:month+1]] - if ranges: - # Weekly frequency won't get here, so we may not - # care about cross-year weekly periods. - self.nwdaymask = [0]*self.yearlen - for first, last in ranges: - last -= 1 - for wday, n in rr._bynweekday: - if n < 0: - i = last+(n+1)*7 - i -= (self.wdaymask[i]-wday) % 7 - else: - i = first+(n-1)*7 - i += (7-self.wdaymask[i]+wday) % 7 - if first <= i <= last: - self.nwdaymask[i] = 1 - - if rr._byeaster: - self.eastermask = [0]*(self.yearlen+7) - eyday = easter.easter(year).toordinal()-self.yearordinal - for offset in rr._byeaster: - self.eastermask[eyday+offset] = 1 - - self.lastyear = year - self.lastmonth = month - - def ydayset(self, year, month, day): - return list(range(self.yearlen)), 0, self.yearlen - - def mdayset(self, year, month, day): - dset = [None]*self.yearlen - start, end = self.mrange[month-1:month+1] - for i in range(start, end): - dset[i] = i - return dset, start, end - - def wdayset(self, year, month, day): - # We need to handle cross-year weeks here. - dset = [None]*(self.yearlen+7) - i = datetime.date(year, month, day).toordinal()-self.yearordinal - start = i - for j in range(7): - dset[i] = i - i += 1 - # if (not (0 <= i < self.yearlen) or - # self.wdaymask[i] == self.rrule._wkst): - # This will cross the year boundary, if necessary. - if self.wdaymask[i] == self.rrule._wkst: - break - return dset, start, i - - def ddayset(self, year, month, day): - dset = [None] * self.yearlen - i = datetime.date(year, month, day).toordinal() - self.yearordinal - dset[i] = i - return dset, i, i + 1 - - def htimeset(self, hour, minute, second): - tset = [] - rr = self.rrule - for minute in rr._byminute: - for second in rr._bysecond: - tset.append(datetime.time(hour, minute, second, - tzinfo=rr._tzinfo)) - tset.sort() - return tset - - def mtimeset(self, hour, minute, second): - tset = [] - rr = self.rrule - for second in rr._bysecond: - tset.append(datetime.time(hour, minute, second, tzinfo=rr._tzinfo)) - tset.sort() - return tset - - def stimeset(self, hour, minute, second): - return (datetime.time(hour, minute, second, - tzinfo=self.rrule._tzinfo),) - - -class rruleset(rrulebase): - """ The rruleset type allows more complex recurrence setups, mixing - multiple rules, dates, exclusion rules, and exclusion dates. The type - constructor takes the following keyword arguments: - - :param cache: If True, caching of results will be enabled, improving - performance of multiple queries considerably. """ - - class _genitem(object): - def __init__(self, genlist, gen): - try: - self.dt = advance_iterator(gen) - genlist.append(self) - except StopIteration: - pass - self.genlist = genlist - self.gen = gen - - def __next__(self): - try: - self.dt = advance_iterator(self.gen) - except StopIteration: - if self.genlist[0] is self: - heapq.heappop(self.genlist) - else: - self.genlist.remove(self) - heapq.heapify(self.genlist) - - next = __next__ - - def __lt__(self, other): - return self.dt < other.dt - - def __gt__(self, other): - return self.dt > other.dt - - def __eq__(self, other): - return self.dt == other.dt - - def __ne__(self, other): - return self.dt != other.dt - - def __init__(self, cache=False): - super(rruleset, self).__init__(cache) - self._rrule = [] - self._rdate = [] - self._exrule = [] - self._exdate = [] - - @_invalidates_cache - def rrule(self, rrule): - """ Include the given :py:class:`rrule` instance in the recurrence set - generation. """ - self._rrule.append(rrule) - - @_invalidates_cache - def rdate(self, rdate): - """ Include the given :py:class:`datetime` instance in the recurrence - set generation. """ - self._rdate.append(rdate) - - @_invalidates_cache - def exrule(self, exrule): - """ Include the given rrule instance in the recurrence set exclusion - list. Dates which are part of the given recurrence rules will not - be generated, even if some inclusive rrule or rdate matches them. - """ - self._exrule.append(exrule) - - @_invalidates_cache - def exdate(self, exdate): - """ Include the given datetime instance in the recurrence set - exclusion list. Dates included that way will not be generated, - even if some inclusive rrule or rdate matches them. """ - self._exdate.append(exdate) - - def _iter(self): - rlist = [] - self._rdate.sort() - self._genitem(rlist, iter(self._rdate)) - for gen in [iter(x) for x in self._rrule]: - self._genitem(rlist, gen) - exlist = [] - self._exdate.sort() - self._genitem(exlist, iter(self._exdate)) - for gen in [iter(x) for x in self._exrule]: - self._genitem(exlist, gen) - lastdt = None - total = 0 - heapq.heapify(rlist) - heapq.heapify(exlist) - while rlist: - ritem = rlist[0] - if not lastdt or lastdt != ritem.dt: - while exlist and exlist[0] < ritem: - exitem = exlist[0] - advance_iterator(exitem) - if exlist and exlist[0] is exitem: - heapq.heapreplace(exlist, exitem) - if not exlist or ritem != exlist[0]: - total += 1 - yield ritem.dt - lastdt = ritem.dt - advance_iterator(ritem) - if rlist and rlist[0] is ritem: - heapq.heapreplace(rlist, ritem) - self._len = total - - - - -class _rrulestr(object): - """ Parses a string representation of a recurrence rule or set of - recurrence rules. - - :param s: - Required, a string defining one or more recurrence rules. - - :param dtstart: - If given, used as the default recurrence start if not specified in the - rule string. - - :param cache: - If set ``True`` caching of results will be enabled, improving - performance of multiple queries considerably. - - :param unfold: - If set ``True`` indicates that a rule string is split over more - than one line and should be joined before processing. - - :param forceset: - If set ``True`` forces a :class:`dateutil.rrule.rruleset` to - be returned. - - :param compatible: - If set ``True`` forces ``unfold`` and ``forceset`` to be ``True``. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a naive - :class:`datetime.datetime` object is returned. - - :param tzids: - If given, a callable or mapping used to retrieve a - :class:`datetime.tzinfo` from a string representation. - Defaults to :func:`dateutil.tz.gettz`. - - :param tzinfos: - Additional time zone names / aliases which may be present in a string - representation. See :func:`dateutil.parser.parse` for more - information. - - :return: - Returns a :class:`dateutil.rrule.rruleset` or - :class:`dateutil.rrule.rrule` - """ - - _freq_map = {"YEARLY": YEARLY, - "MONTHLY": MONTHLY, - "WEEKLY": WEEKLY, - "DAILY": DAILY, - "HOURLY": HOURLY, - "MINUTELY": MINUTELY, - "SECONDLY": SECONDLY} - - _weekday_map = {"MO": 0, "TU": 1, "WE": 2, "TH": 3, - "FR": 4, "SA": 5, "SU": 6} - - def _handle_int(self, rrkwargs, name, value, **kwargs): - rrkwargs[name.lower()] = int(value) - - def _handle_int_list(self, rrkwargs, name, value, **kwargs): - rrkwargs[name.lower()] = [int(x) for x in value.split(',')] - - _handle_INTERVAL = _handle_int - _handle_COUNT = _handle_int - _handle_BYSETPOS = _handle_int_list - _handle_BYMONTH = _handle_int_list - _handle_BYMONTHDAY = _handle_int_list - _handle_BYYEARDAY = _handle_int_list - _handle_BYEASTER = _handle_int_list - _handle_BYWEEKNO = _handle_int_list - _handle_BYHOUR = _handle_int_list - _handle_BYMINUTE = _handle_int_list - _handle_BYSECOND = _handle_int_list - - def _handle_FREQ(self, rrkwargs, name, value, **kwargs): - rrkwargs["freq"] = self._freq_map[value] - - def _handle_UNTIL(self, rrkwargs, name, value, **kwargs): - global parser - if not parser: - from dateutil import parser - try: - rrkwargs["until"] = parser.parse(value, - ignoretz=kwargs.get("ignoretz"), - tzinfos=kwargs.get("tzinfos")) - except ValueError: - raise ValueError("invalid until date") - - def _handle_WKST(self, rrkwargs, name, value, **kwargs): - rrkwargs["wkst"] = self._weekday_map[value] - - def _handle_BYWEEKDAY(self, rrkwargs, name, value, **kwargs): - """ - Two ways to specify this: +1MO or MO(+1) - """ - l = [] - for wday in value.split(','): - if '(' in wday: - # If it's of the form TH(+1), etc. - splt = wday.split('(') - w = splt[0] - n = int(splt[1][:-1]) - elif len(wday): - # If it's of the form +1MO - for i in range(len(wday)): - if wday[i] not in '+-0123456789': - break - n = wday[:i] or None - w = wday[i:] - if n: - n = int(n) - else: - raise ValueError("Invalid (empty) BYDAY specification.") - - l.append(weekdays[self._weekday_map[w]](n)) - rrkwargs["byweekday"] = l - - _handle_BYDAY = _handle_BYWEEKDAY - - def _parse_rfc_rrule(self, line, - dtstart=None, - cache=False, - ignoretz=False, - tzinfos=None): - if line.find(':') != -1: - name, value = line.split(':') - if name != "RRULE": - raise ValueError("unknown parameter name") - else: - value = line - rrkwargs = {} - for pair in value.split(';'): - name, value = pair.split('=') - name = name.upper() - value = value.upper() - try: - getattr(self, "_handle_"+name)(rrkwargs, name, value, - ignoretz=ignoretz, - tzinfos=tzinfos) - except AttributeError: - raise ValueError("unknown parameter '%s'" % name) - except (KeyError, ValueError): - raise ValueError("invalid '%s': %s" % (name, value)) - return rrule(dtstart=dtstart, cache=cache, **rrkwargs) - - def _parse_date_value(self, date_value, parms, rule_tzids, - ignoretz, tzids, tzinfos): - global parser - if not parser: - from dateutil import parser - - datevals = [] - value_found = False - TZID = None - - for parm in parms: - if parm.startswith("TZID="): - try: - tzkey = rule_tzids[parm.split('TZID=')[-1]] - except KeyError: - continue - if tzids is None: - from . import tz - tzlookup = tz.gettz - elif callable(tzids): - tzlookup = tzids - else: - tzlookup = getattr(tzids, 'get', None) - if tzlookup is None: - msg = ('tzids must be a callable, mapping, or None, ' - 'not %s' % tzids) - raise ValueError(msg) - - TZID = tzlookup(tzkey) - continue - - # RFC 5445 3.8.2.4: The VALUE parameter is optional, but may be found - # only once. - if parm not in {"VALUE=DATE-TIME", "VALUE=DATE"}: - raise ValueError("unsupported parm: " + parm) - else: - if value_found: - msg = ("Duplicate value parameter found in: " + parm) - raise ValueError(msg) - value_found = True - - for datestr in date_value.split(','): - date = parser.parse(datestr, ignoretz=ignoretz, tzinfos=tzinfos) - if TZID is not None: - if date.tzinfo is None: - date = date.replace(tzinfo=TZID) - else: - raise ValueError('DTSTART/EXDATE specifies multiple timezone') - datevals.append(date) - - return datevals - - def _parse_rfc(self, s, - dtstart=None, - cache=False, - unfold=False, - forceset=False, - compatible=False, - ignoretz=False, - tzids=None, - tzinfos=None): - global parser - if compatible: - forceset = True - unfold = True - - TZID_NAMES = dict(map( - lambda x: (x.upper(), x), - re.findall('TZID=(?P[^:]+):', s) - )) - s = s.upper() - if not s.strip(): - raise ValueError("empty string") - if unfold: - lines = s.splitlines() - i = 0 - while i < len(lines): - line = lines[i].rstrip() - if not line: - del lines[i] - elif i > 0 and line[0] == " ": - lines[i-1] += line[1:] - del lines[i] - else: - i += 1 - else: - lines = s.split() - if (not forceset and len(lines) == 1 and (s.find(':') == -1 or - s.startswith('RRULE:'))): - return self._parse_rfc_rrule(lines[0], cache=cache, - dtstart=dtstart, ignoretz=ignoretz, - tzinfos=tzinfos) - else: - rrulevals = [] - rdatevals = [] - exrulevals = [] - exdatevals = [] - for line in lines: - if not line: - continue - if line.find(':') == -1: - name = "RRULE" - value = line - else: - name, value = line.split(':', 1) - parms = name.split(';') - if not parms: - raise ValueError("empty property name") - name = parms[0] - parms = parms[1:] - if name == "RRULE": - for parm in parms: - raise ValueError("unsupported RRULE parm: "+parm) - rrulevals.append(value) - elif name == "RDATE": - for parm in parms: - if parm != "VALUE=DATE-TIME": - raise ValueError("unsupported RDATE parm: "+parm) - rdatevals.append(value) - elif name == "EXRULE": - for parm in parms: - raise ValueError("unsupported EXRULE parm: "+parm) - exrulevals.append(value) - elif name == "EXDATE": - exdatevals.extend( - self._parse_date_value(value, parms, - TZID_NAMES, ignoretz, - tzids, tzinfos) - ) - elif name == "DTSTART": - dtvals = self._parse_date_value(value, parms, TZID_NAMES, - ignoretz, tzids, tzinfos) - if len(dtvals) != 1: - raise ValueError("Multiple DTSTART values specified:" + - value) - dtstart = dtvals[0] - else: - raise ValueError("unsupported property: "+name) - if (forceset or len(rrulevals) > 1 or rdatevals - or exrulevals or exdatevals): - if not parser and (rdatevals or exdatevals): - from dateutil import parser - rset = rruleset(cache=cache) - for value in rrulevals: - rset.rrule(self._parse_rfc_rrule(value, dtstart=dtstart, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in rdatevals: - for datestr in value.split(','): - rset.rdate(parser.parse(datestr, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in exrulevals: - rset.exrule(self._parse_rfc_rrule(value, dtstart=dtstart, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in exdatevals: - rset.exdate(value) - if compatible and dtstart: - rset.rdate(dtstart) - return rset - else: - return self._parse_rfc_rrule(rrulevals[0], - dtstart=dtstart, - cache=cache, - ignoretz=ignoretz, - tzinfos=tzinfos) - - def __call__(self, s, **kwargs): - return self._parse_rfc(s, **kwargs) - - -rrulestr = _rrulestr() - -# vim:ts=4:sw=4:et diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__init__.py b/myenv/lib/python3.12/site-packages/dateutil/tz/__init__.py deleted file mode 100644 index af1352c..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tz/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -from .tz import * -from .tz import __doc__ - -__all__ = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", - "tzstr", "tzical", "tzwin", "tzwinlocal", "gettz", - "enfold", "datetime_ambiguous", "datetime_exists", - "resolve_imaginary", "UTC", "DeprecatedTzFormatWarning"] - - -class DeprecatedTzFormatWarning(Warning): - """Warning raised when time zones are parsed from deprecated formats.""" diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e5c190e..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc deleted file mode 100644 index 48d32e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc deleted file mode 100644 index aee2c87..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc deleted file mode 100644 index 0adfba8..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc deleted file mode 100644 index dd97ce3..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/_common.py b/myenv/lib/python3.12/site-packages/dateutil/tz/_common.py deleted file mode 100644 index e6ac118..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tz/_common.py +++ /dev/null @@ -1,419 +0,0 @@ -from six import PY2 - -from functools import wraps - -from datetime import datetime, timedelta, tzinfo - - -ZERO = timedelta(0) - -__all__ = ['tzname_in_python2', 'enfold'] - - -def tzname_in_python2(namefunc): - """Change unicode output into bytestrings in Python 2 - - tzname() API changed in Python 3. It used to return bytes, but was changed - to unicode strings - """ - if PY2: - @wraps(namefunc) - def adjust_encoding(*args, **kwargs): - name = namefunc(*args, **kwargs) - if name is not None: - name = name.encode() - - return name - - return adjust_encoding - else: - return namefunc - - -# The following is adapted from Alexander Belopolsky's tz library -# https://github.com/abalkin/tz -if hasattr(datetime, 'fold'): - # This is the pre-python 3.6 fold situation - def enfold(dt, fold=1): - """ - Provides a unified interface for assigning the ``fold`` attribute to - datetimes both before and after the implementation of PEP-495. - - :param fold: - The value for the ``fold`` attribute in the returned datetime. This - should be either 0 or 1. - - :return: - Returns an object for which ``getattr(dt, 'fold', 0)`` returns - ``fold`` for all versions of Python. In versions prior to - Python 3.6, this is a ``_DatetimeWithFold`` object, which is a - subclass of :py:class:`datetime.datetime` with the ``fold`` - attribute added, if ``fold`` is 1. - - .. versionadded:: 2.6.0 - """ - return dt.replace(fold=fold) - -else: - class _DatetimeWithFold(datetime): - """ - This is a class designed to provide a PEP 495-compliant interface for - Python versions before 3.6. It is used only for dates in a fold, so - the ``fold`` attribute is fixed at ``1``. - - .. versionadded:: 2.6.0 - """ - __slots__ = () - - def replace(self, *args, **kwargs): - """ - Return a datetime with the same attributes, except for those - attributes given new values by whichever keyword arguments are - specified. Note that tzinfo=None can be specified to create a naive - datetime from an aware datetime with no conversion of date and time - data. - - This is reimplemented in ``_DatetimeWithFold`` because pypy3 will - return a ``datetime.datetime`` even if ``fold`` is unchanged. - """ - argnames = ( - 'year', 'month', 'day', 'hour', 'minute', 'second', - 'microsecond', 'tzinfo' - ) - - for arg, argname in zip(args, argnames): - if argname in kwargs: - raise TypeError('Duplicate argument: {}'.format(argname)) - - kwargs[argname] = arg - - for argname in argnames: - if argname not in kwargs: - kwargs[argname] = getattr(self, argname) - - dt_class = self.__class__ if kwargs.get('fold', 1) else datetime - - return dt_class(**kwargs) - - @property - def fold(self): - return 1 - - def enfold(dt, fold=1): - """ - Provides a unified interface for assigning the ``fold`` attribute to - datetimes both before and after the implementation of PEP-495. - - :param fold: - The value for the ``fold`` attribute in the returned datetime. This - should be either 0 or 1. - - :return: - Returns an object for which ``getattr(dt, 'fold', 0)`` returns - ``fold`` for all versions of Python. In versions prior to - Python 3.6, this is a ``_DatetimeWithFold`` object, which is a - subclass of :py:class:`datetime.datetime` with the ``fold`` - attribute added, if ``fold`` is 1. - - .. versionadded:: 2.6.0 - """ - if getattr(dt, 'fold', 0) == fold: - return dt - - args = dt.timetuple()[:6] - args += (dt.microsecond, dt.tzinfo) - - if fold: - return _DatetimeWithFold(*args) - else: - return datetime(*args) - - -def _validate_fromutc_inputs(f): - """ - The CPython version of ``fromutc`` checks that the input is a ``datetime`` - object and that ``self`` is attached as its ``tzinfo``. - """ - @wraps(f) - def fromutc(self, dt): - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - return f(self, dt) - - return fromutc - - -class _tzinfo(tzinfo): - """ - Base class for all ``dateutil`` ``tzinfo`` objects. - """ - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - - dt = dt.replace(tzinfo=self) - - wall_0 = enfold(dt, fold=0) - wall_1 = enfold(dt, fold=1) - - same_offset = wall_0.utcoffset() == wall_1.utcoffset() - same_dt = wall_0.replace(tzinfo=None) == wall_1.replace(tzinfo=None) - - return same_dt and not same_offset - - def _fold_status(self, dt_utc, dt_wall): - """ - Determine the fold status of a "wall" datetime, given a representation - of the same datetime as a (naive) UTC datetime. This is calculated based - on the assumption that ``dt.utcoffset() - dt.dst()`` is constant for all - datetimes, and that this offset is the actual number of hours separating - ``dt_utc`` and ``dt_wall``. - - :param dt_utc: - Representation of the datetime as UTC - - :param dt_wall: - Representation of the datetime as "wall time". This parameter must - either have a `fold` attribute or have a fold-naive - :class:`datetime.tzinfo` attached, otherwise the calculation may - fail. - """ - if self.is_ambiguous(dt_wall): - delta_wall = dt_wall - dt_utc - _fold = int(delta_wall == (dt_utc.utcoffset() - dt_utc.dst())) - else: - _fold = 0 - - return _fold - - def _fold(self, dt): - return getattr(dt, 'fold', 0) - - def _fromutc(self, dt): - """ - Given a timezone-aware datetime in a given timezone, calculates a - timezone-aware datetime in a new timezone. - - Since this is the one time that we *know* we have an unambiguous - datetime object, we take this opportunity to determine whether the - datetime is ambiguous and in a "fold" state (e.g. if it's the first - occurrence, chronologically, of the ambiguous datetime). - - :param dt: - A timezone-aware :class:`datetime.datetime` object. - """ - - # Re-implement the algorithm from Python's datetime.py - dtoff = dt.utcoffset() - if dtoff is None: - raise ValueError("fromutc() requires a non-None utcoffset() " - "result") - - # The original datetime.py code assumes that `dst()` defaults to - # zero during ambiguous times. PEP 495 inverts this presumption, so - # for pre-PEP 495 versions of python, we need to tweak the algorithm. - dtdst = dt.dst() - if dtdst is None: - raise ValueError("fromutc() requires a non-None dst() result") - delta = dtoff - dtdst - - dt += delta - # Set fold=1 so we can default to being in the fold for - # ambiguous dates. - dtdst = enfold(dt, fold=1).dst() - if dtdst is None: - raise ValueError("fromutc(): dt.dst gave inconsistent " - "results; cannot convert") - return dt + dtdst - - @_validate_fromutc_inputs - def fromutc(self, dt): - """ - Given a timezone-aware datetime in a given timezone, calculates a - timezone-aware datetime in a new timezone. - - Since this is the one time that we *know* we have an unambiguous - datetime object, we take this opportunity to determine whether the - datetime is ambiguous and in a "fold" state (e.g. if it's the first - occurrence, chronologically, of the ambiguous datetime). - - :param dt: - A timezone-aware :class:`datetime.datetime` object. - """ - dt_wall = self._fromutc(dt) - - # Calculate the fold status given the two datetimes. - _fold = self._fold_status(dt, dt_wall) - - # Set the default fold value for ambiguous dates - return enfold(dt_wall, fold=_fold) - - -class tzrangebase(_tzinfo): - """ - This is an abstract base class for time zones represented by an annual - transition into and out of DST. Child classes should implement the following - methods: - - * ``__init__(self, *args, **kwargs)`` - * ``transitions(self, year)`` - this is expected to return a tuple of - datetimes representing the DST on and off transitions in standard - time. - - A fully initialized ``tzrangebase`` subclass should also provide the - following attributes: - * ``hasdst``: Boolean whether or not the zone uses DST. - * ``_dst_offset`` / ``_std_offset``: :class:`datetime.timedelta` objects - representing the respective UTC offsets. - * ``_dst_abbr`` / ``_std_abbr``: Strings representing the timezone short - abbreviations in DST and STD, respectively. - * ``_hasdst``: Whether or not the zone has DST. - - .. versionadded:: 2.6.0 - """ - def __init__(self): - raise NotImplementedError('tzrangebase is an abstract base class') - - def utcoffset(self, dt): - isdst = self._isdst(dt) - - if isdst is None: - return None - elif isdst: - return self._dst_offset - else: - return self._std_offset - - def dst(self, dt): - isdst = self._isdst(dt) - - if isdst is None: - return None - elif isdst: - return self._dst_base_offset - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - if self._isdst(dt): - return self._dst_abbr - else: - return self._std_abbr - - def fromutc(self, dt): - """ Given a datetime in UTC, return local time """ - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - # Get transitions - if there are none, fixed offset - transitions = self.transitions(dt.year) - if transitions is None: - return dt + self.utcoffset(dt) - - # Get the transition times in UTC - dston, dstoff = transitions - - dston -= self._std_offset - dstoff -= self._std_offset - - utc_transitions = (dston, dstoff) - dt_utc = dt.replace(tzinfo=None) - - isdst = self._naive_isdst(dt_utc, utc_transitions) - - if isdst: - dt_wall = dt + self._dst_offset - else: - dt_wall = dt + self._std_offset - - _fold = int(not isdst and self.is_ambiguous(dt_wall)) - - return enfold(dt_wall, fold=_fold) - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - if not self.hasdst: - return False - - start, end = self.transitions(dt.year) - - dt = dt.replace(tzinfo=None) - return (end <= dt < end + self._dst_base_offset) - - def _isdst(self, dt): - if not self.hasdst: - return False - elif dt is None: - return None - - transitions = self.transitions(dt.year) - - if transitions is None: - return False - - dt = dt.replace(tzinfo=None) - - isdst = self._naive_isdst(dt, transitions) - - # Handle ambiguous dates - if not isdst and self.is_ambiguous(dt): - return not self._fold(dt) - else: - return isdst - - def _naive_isdst(self, dt, transitions): - dston, dstoff = transitions - - dt = dt.replace(tzinfo=None) - - if dston < dstoff: - isdst = dston <= dt < dstoff - else: - isdst = not dstoff <= dt < dston - - return isdst - - @property - def _dst_base_offset(self): - return self._dst_offset - self._std_offset - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(...)" % self.__class__.__name__ - - __reduce__ = object.__reduce__ diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/_factories.py b/myenv/lib/python3.12/site-packages/dateutil/tz/_factories.py deleted file mode 100644 index f8a6589..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tz/_factories.py +++ /dev/null @@ -1,80 +0,0 @@ -from datetime import timedelta -import weakref -from collections import OrderedDict - -from six.moves import _thread - - -class _TzSingleton(type): - def __init__(cls, *args, **kwargs): - cls.__instance = None - super(_TzSingleton, cls).__init__(*args, **kwargs) - - def __call__(cls): - if cls.__instance is None: - cls.__instance = super(_TzSingleton, cls).__call__() - return cls.__instance - - -class _TzFactory(type): - def instance(cls, *args, **kwargs): - """Alternate constructor that returns a fresh instance""" - return type.__call__(cls, *args, **kwargs) - - -class _TzOffsetFactory(_TzFactory): - def __init__(cls, *args, **kwargs): - cls.__instances = weakref.WeakValueDictionary() - cls.__strong_cache = OrderedDict() - cls.__strong_cache_size = 8 - - cls._cache_lock = _thread.allocate_lock() - - def __call__(cls, name, offset): - if isinstance(offset, timedelta): - key = (name, offset.total_seconds()) - else: - key = (name, offset) - - instance = cls.__instances.get(key, None) - if instance is None: - instance = cls.__instances.setdefault(key, - cls.instance(name, offset)) - - # This lock may not be necessary in Python 3. See GH issue #901 - with cls._cache_lock: - cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) - - # Remove an item if the strong cache is overpopulated - if len(cls.__strong_cache) > cls.__strong_cache_size: - cls.__strong_cache.popitem(last=False) - - return instance - - -class _TzStrFactory(_TzFactory): - def __init__(cls, *args, **kwargs): - cls.__instances = weakref.WeakValueDictionary() - cls.__strong_cache = OrderedDict() - cls.__strong_cache_size = 8 - - cls.__cache_lock = _thread.allocate_lock() - - def __call__(cls, s, posix_offset=False): - key = (s, posix_offset) - instance = cls.__instances.get(key, None) - - if instance is None: - instance = cls.__instances.setdefault(key, - cls.instance(s, posix_offset)) - - # This lock may not be necessary in Python 3. See GH issue #901 - with cls.__cache_lock: - cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) - - # Remove an item if the strong cache is overpopulated - if len(cls.__strong_cache) > cls.__strong_cache_size: - cls.__strong_cache.popitem(last=False) - - return instance - diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/tz.py b/myenv/lib/python3.12/site-packages/dateutil/tz/tz.py deleted file mode 100644 index 6175914..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tz/tz.py +++ /dev/null @@ -1,1849 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers timezone implementations subclassing the abstract -:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format -files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`, -etc), TZ environment string (in all known formats), given ranges (with help -from relative deltas), local machine timezone, fixed offset timezone, and UTC -timezone. -""" -import datetime -import struct -import time -import sys -import os -import bisect -import weakref -from collections import OrderedDict - -import six -from six import string_types -from six.moves import _thread -from ._common import tzname_in_python2, _tzinfo -from ._common import tzrangebase, enfold -from ._common import _validate_fromutc_inputs - -from ._factories import _TzSingleton, _TzOffsetFactory -from ._factories import _TzStrFactory -try: - from .win import tzwin, tzwinlocal -except ImportError: - tzwin = tzwinlocal = None - -# For warning about rounding tzinfo -from warnings import warn - -ZERO = datetime.timedelta(0) -EPOCH = datetime.datetime(1970, 1, 1, 0, 0) -EPOCHORDINAL = EPOCH.toordinal() - - -@six.add_metaclass(_TzSingleton) -class tzutc(datetime.tzinfo): - """ - This is a tzinfo object that represents the UTC time zone. - - **Examples:** - - .. doctest:: - - >>> from datetime import * - >>> from dateutil.tz import * - - >>> datetime.now() - datetime.datetime(2003, 9, 27, 9, 40, 1, 521290) - - >>> datetime.now(tzutc()) - datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc()) - - >>> datetime.now(tzutc()).tzname() - 'UTC' - - .. versionchanged:: 2.7.0 - ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will - always return the same object. - - .. doctest:: - - >>> from dateutil.tz import tzutc, UTC - >>> tzutc() is tzutc() - True - >>> tzutc() is UTC - True - """ - def utcoffset(self, dt): - return ZERO - - def dst(self, dt): - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return "UTC" - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - return False - - @_validate_fromutc_inputs - def fromutc(self, dt): - """ - Fast track version of fromutc() returns the original ``dt`` object for - any valid :py:class:`datetime.datetime` object. - """ - return dt - - def __eq__(self, other): - if not isinstance(other, (tzutc, tzoffset)): - return NotImplemented - - return (isinstance(other, tzutc) or - (isinstance(other, tzoffset) and other._offset == ZERO)) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s()" % self.__class__.__name__ - - __reduce__ = object.__reduce__ - - -#: Convenience constant providing a :class:`tzutc()` instance -#: -#: .. versionadded:: 2.7.0 -UTC = tzutc() - - -@six.add_metaclass(_TzOffsetFactory) -class tzoffset(datetime.tzinfo): - """ - A simple class for representing a fixed offset from UTC. - - :param name: - The timezone name, to be returned when ``tzname()`` is called. - :param offset: - The time zone offset in seconds, or (since version 2.6.0, represented - as a :py:class:`datetime.timedelta` object). - """ - def __init__(self, name, offset): - self._name = name - - try: - # Allow a timedelta - offset = offset.total_seconds() - except (TypeError, AttributeError): - pass - - self._offset = datetime.timedelta(seconds=_get_supported_offset(offset)) - - def utcoffset(self, dt): - return self._offset - - def dst(self, dt): - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._name - - @_validate_fromutc_inputs - def fromutc(self, dt): - return dt + self._offset - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - return False - - def __eq__(self, other): - if not isinstance(other, tzoffset): - return NotImplemented - - return self._offset == other._offset - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(%s, %s)" % (self.__class__.__name__, - repr(self._name), - int(self._offset.total_seconds())) - - __reduce__ = object.__reduce__ - - -class tzlocal(_tzinfo): - """ - A :class:`tzinfo` subclass built around the ``time`` timezone functions. - """ - def __init__(self): - super(tzlocal, self).__init__() - - self._std_offset = datetime.timedelta(seconds=-time.timezone) - if time.daylight: - self._dst_offset = datetime.timedelta(seconds=-time.altzone) - else: - self._dst_offset = self._std_offset - - self._dst_saved = self._dst_offset - self._std_offset - self._hasdst = bool(self._dst_saved) - self._tznames = tuple(time.tzname) - - def utcoffset(self, dt): - if dt is None and self._hasdst: - return None - - if self._isdst(dt): - return self._dst_offset - else: - return self._std_offset - - def dst(self, dt): - if dt is None and self._hasdst: - return None - - if self._isdst(dt): - return self._dst_offset - self._std_offset - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._tznames[self._isdst(dt)] - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - naive_dst = self._naive_is_dst(dt) - return (not naive_dst and - (naive_dst != self._naive_is_dst(dt - self._dst_saved))) - - def _naive_is_dst(self, dt): - timestamp = _datetime_to_timestamp(dt) - return time.localtime(timestamp + time.timezone).tm_isdst - - def _isdst(self, dt, fold_naive=True): - # We can't use mktime here. It is unstable when deciding if - # the hour near to a change is DST or not. - # - # timestamp = time.mktime((dt.year, dt.month, dt.day, dt.hour, - # dt.minute, dt.second, dt.weekday(), 0, -1)) - # return time.localtime(timestamp).tm_isdst - # - # The code above yields the following result: - # - # >>> import tz, datetime - # >>> t = tz.tzlocal() - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRDT' - # >>> datetime.datetime(2003,2,16,0,tzinfo=t).tzname() - # 'BRST' - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRST' - # >>> datetime.datetime(2003,2,15,22,tzinfo=t).tzname() - # 'BRDT' - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRDT' - # - # Here is a more stable implementation: - # - if not self._hasdst: - return False - - # Check for ambiguous times: - dstval = self._naive_is_dst(dt) - fold = getattr(dt, 'fold', None) - - if self.is_ambiguous(dt): - if fold is not None: - return not self._fold(dt) - else: - return True - - return dstval - - def __eq__(self, other): - if isinstance(other, tzlocal): - return (self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset) - elif isinstance(other, tzutc): - return (not self._hasdst and - self._tznames[0] in {'UTC', 'GMT'} and - self._std_offset == ZERO) - elif isinstance(other, tzoffset): - return (not self._hasdst and - self._tznames[0] == other._name and - self._std_offset == other._offset) - else: - return NotImplemented - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s()" % self.__class__.__name__ - - __reduce__ = object.__reduce__ - - -class _ttinfo(object): - __slots__ = ["offset", "delta", "isdst", "abbr", - "isstd", "isgmt", "dstoffset"] - - def __init__(self): - for attr in self.__slots__: - setattr(self, attr, None) - - def __repr__(self): - l = [] - for attr in self.__slots__: - value = getattr(self, attr) - if value is not None: - l.append("%s=%s" % (attr, repr(value))) - return "%s(%s)" % (self.__class__.__name__, ", ".join(l)) - - def __eq__(self, other): - if not isinstance(other, _ttinfo): - return NotImplemented - - return (self.offset == other.offset and - self.delta == other.delta and - self.isdst == other.isdst and - self.abbr == other.abbr and - self.isstd == other.isstd and - self.isgmt == other.isgmt and - self.dstoffset == other.dstoffset) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __getstate__(self): - state = {} - for name in self.__slots__: - state[name] = getattr(self, name, None) - return state - - def __setstate__(self, state): - for name in self.__slots__: - if name in state: - setattr(self, name, state[name]) - - -class _tzfile(object): - """ - Lightweight class for holding the relevant transition and time zone - information read from binary tzfiles. - """ - attrs = ['trans_list', 'trans_list_utc', 'trans_idx', 'ttinfo_list', - 'ttinfo_std', 'ttinfo_dst', 'ttinfo_before', 'ttinfo_first'] - - def __init__(self, **kwargs): - for attr in self.attrs: - setattr(self, attr, kwargs.get(attr, None)) - - -class tzfile(_tzinfo): - """ - This is a ``tzinfo`` subclass that allows one to use the ``tzfile(5)`` - format timezone files to extract current and historical zone information. - - :param fileobj: - This can be an opened file stream or a file name that the time zone - information can be read from. - - :param filename: - This is an optional parameter specifying the source of the time zone - information in the event that ``fileobj`` is a file object. If omitted - and ``fileobj`` is a file stream, this parameter will be set either to - ``fileobj``'s ``name`` attribute or to ``repr(fileobj)``. - - See `Sources for Time Zone and Daylight Saving Time Data - `_ for more information. - Time zone files can be compiled from the `IANA Time Zone database files - `_ with the `zic time zone compiler - `_ - - .. note:: - - Only construct a ``tzfile`` directly if you have a specific timezone - file on disk that you want to read into a Python ``tzinfo`` object. - If you want to get a ``tzfile`` representing a specific IANA zone, - (e.g. ``'America/New_York'``), you should call - :func:`dateutil.tz.gettz` with the zone identifier. - - - **Examples:** - - Using the US Eastern time zone as an example, we can see that a ``tzfile`` - provides time zone information for the standard Daylight Saving offsets: - - .. testsetup:: tzfile - - from dateutil.tz import gettz - from datetime import datetime - - .. doctest:: tzfile - - >>> NYC = gettz('America/New_York') - >>> NYC - tzfile('/usr/share/zoneinfo/America/New_York') - - >>> print(datetime(2016, 1, 3, tzinfo=NYC)) # EST - 2016-01-03 00:00:00-05:00 - - >>> print(datetime(2016, 7, 7, tzinfo=NYC)) # EDT - 2016-07-07 00:00:00-04:00 - - - The ``tzfile`` structure contains a fully history of the time zone, - so historical dates will also have the right offsets. For example, before - the adoption of the UTC standards, New York used local solar mean time: - - .. doctest:: tzfile - - >>> print(datetime(1901, 4, 12, tzinfo=NYC)) # LMT - 1901-04-12 00:00:00-04:56 - - And during World War II, New York was on "Eastern War Time", which was a - state of permanent daylight saving time: - - .. doctest:: tzfile - - >>> print(datetime(1944, 2, 7, tzinfo=NYC)) # EWT - 1944-02-07 00:00:00-04:00 - - """ - - def __init__(self, fileobj, filename=None): - super(tzfile, self).__init__() - - file_opened_here = False - if isinstance(fileobj, string_types): - self._filename = fileobj - fileobj = open(fileobj, 'rb') - file_opened_here = True - elif filename is not None: - self._filename = filename - elif hasattr(fileobj, "name"): - self._filename = fileobj.name - else: - self._filename = repr(fileobj) - - if fileobj is not None: - if not file_opened_here: - fileobj = _nullcontext(fileobj) - - with fileobj as file_stream: - tzobj = self._read_tzfile(file_stream) - - self._set_tzdata(tzobj) - - def _set_tzdata(self, tzobj): - """ Set the time zone data of this object from a _tzfile object """ - # Copy the relevant attributes over as private attributes - for attr in _tzfile.attrs: - setattr(self, '_' + attr, getattr(tzobj, attr)) - - def _read_tzfile(self, fileobj): - out = _tzfile() - - # From tzfile(5): - # - # The time zone information files used by tzset(3) - # begin with the magic characters "TZif" to identify - # them as time zone information files, followed by - # sixteen bytes reserved for future use, followed by - # six four-byte values of type long, written in a - # ``standard'' byte order (the high-order byte - # of the value is written first). - if fileobj.read(4).decode() != "TZif": - raise ValueError("magic not found") - - fileobj.read(16) - - ( - # The number of UTC/local indicators stored in the file. - ttisgmtcnt, - - # The number of standard/wall indicators stored in the file. - ttisstdcnt, - - # The number of leap seconds for which data is - # stored in the file. - leapcnt, - - # The number of "transition times" for which data - # is stored in the file. - timecnt, - - # The number of "local time types" for which data - # is stored in the file (must not be zero). - typecnt, - - # The number of characters of "time zone - # abbreviation strings" stored in the file. - charcnt, - - ) = struct.unpack(">6l", fileobj.read(24)) - - # The above header is followed by tzh_timecnt four-byte - # values of type long, sorted in ascending order. - # These values are written in ``standard'' byte order. - # Each is used as a transition time (as returned by - # time(2)) at which the rules for computing local time - # change. - - if timecnt: - out.trans_list_utc = list(struct.unpack(">%dl" % timecnt, - fileobj.read(timecnt*4))) - else: - out.trans_list_utc = [] - - # Next come tzh_timecnt one-byte values of type unsigned - # char; each one tells which of the different types of - # ``local time'' types described in the file is associated - # with the same-indexed transition time. These values - # serve as indices into an array of ttinfo structures that - # appears next in the file. - - if timecnt: - out.trans_idx = struct.unpack(">%dB" % timecnt, - fileobj.read(timecnt)) - else: - out.trans_idx = [] - - # Each ttinfo structure is written as a four-byte value - # for tt_gmtoff of type long, in a standard byte - # order, followed by a one-byte value for tt_isdst - # and a one-byte value for tt_abbrind. In each - # structure, tt_gmtoff gives the number of - # seconds to be added to UTC, tt_isdst tells whether - # tm_isdst should be set by localtime(3), and - # tt_abbrind serves as an index into the array of - # time zone abbreviation characters that follow the - # ttinfo structure(s) in the file. - - ttinfo = [] - - for i in range(typecnt): - ttinfo.append(struct.unpack(">lbb", fileobj.read(6))) - - abbr = fileobj.read(charcnt).decode() - - # Then there are tzh_leapcnt pairs of four-byte - # values, written in standard byte order; the - # first value of each pair gives the time (as - # returned by time(2)) at which a leap second - # occurs; the second gives the total number of - # leap seconds to be applied after the given time. - # The pairs of values are sorted in ascending order - # by time. - - # Not used, for now (but seek for correct file position) - if leapcnt: - fileobj.seek(leapcnt * 8, os.SEEK_CUR) - - # Then there are tzh_ttisstdcnt standard/wall - # indicators, each stored as a one-byte value; - # they tell whether the transition times associated - # with local time types were specified as standard - # time or wall clock time, and are used when - # a time zone file is used in handling POSIX-style - # time zone environment variables. - - if ttisstdcnt: - isstd = struct.unpack(">%db" % ttisstdcnt, - fileobj.read(ttisstdcnt)) - - # Finally, there are tzh_ttisgmtcnt UTC/local - # indicators, each stored as a one-byte value; - # they tell whether the transition times associated - # with local time types were specified as UTC or - # local time, and are used when a time zone file - # is used in handling POSIX-style time zone envi- - # ronment variables. - - if ttisgmtcnt: - isgmt = struct.unpack(">%db" % ttisgmtcnt, - fileobj.read(ttisgmtcnt)) - - # Build ttinfo list - out.ttinfo_list = [] - for i in range(typecnt): - gmtoff, isdst, abbrind = ttinfo[i] - gmtoff = _get_supported_offset(gmtoff) - tti = _ttinfo() - tti.offset = gmtoff - tti.dstoffset = datetime.timedelta(0) - tti.delta = datetime.timedelta(seconds=gmtoff) - tti.isdst = isdst - tti.abbr = abbr[abbrind:abbr.find('\x00', abbrind)] - tti.isstd = (ttisstdcnt > i and isstd[i] != 0) - tti.isgmt = (ttisgmtcnt > i and isgmt[i] != 0) - out.ttinfo_list.append(tti) - - # Replace ttinfo indexes for ttinfo objects. - out.trans_idx = [out.ttinfo_list[idx] for idx in out.trans_idx] - - # Set standard, dst, and before ttinfos. before will be - # used when a given time is before any transitions, - # and will be set to the first non-dst ttinfo, or to - # the first dst, if all of them are dst. - out.ttinfo_std = None - out.ttinfo_dst = None - out.ttinfo_before = None - if out.ttinfo_list: - if not out.trans_list_utc: - out.ttinfo_std = out.ttinfo_first = out.ttinfo_list[0] - else: - for i in range(timecnt-1, -1, -1): - tti = out.trans_idx[i] - if not out.ttinfo_std and not tti.isdst: - out.ttinfo_std = tti - elif not out.ttinfo_dst and tti.isdst: - out.ttinfo_dst = tti - - if out.ttinfo_std and out.ttinfo_dst: - break - else: - if out.ttinfo_dst and not out.ttinfo_std: - out.ttinfo_std = out.ttinfo_dst - - for tti in out.ttinfo_list: - if not tti.isdst: - out.ttinfo_before = tti - break - else: - out.ttinfo_before = out.ttinfo_list[0] - - # Now fix transition times to become relative to wall time. - # - # I'm not sure about this. In my tests, the tz source file - # is setup to wall time, and in the binary file isstd and - # isgmt are off, so it should be in wall time. OTOH, it's - # always in gmt time. Let me know if you have comments - # about this. - lastdst = None - lastoffset = None - lastdstoffset = None - lastbaseoffset = None - out.trans_list = [] - - for i, tti in enumerate(out.trans_idx): - offset = tti.offset - dstoffset = 0 - - if lastdst is not None: - if tti.isdst: - if not lastdst: - dstoffset = offset - lastoffset - - if not dstoffset and lastdstoffset: - dstoffset = lastdstoffset - - tti.dstoffset = datetime.timedelta(seconds=dstoffset) - lastdstoffset = dstoffset - - # If a time zone changes its base offset during a DST transition, - # then you need to adjust by the previous base offset to get the - # transition time in local time. Otherwise you use the current - # base offset. Ideally, I would have some mathematical proof of - # why this is true, but I haven't really thought about it enough. - baseoffset = offset - dstoffset - adjustment = baseoffset - if (lastbaseoffset is not None and baseoffset != lastbaseoffset - and tti.isdst != lastdst): - # The base DST has changed - adjustment = lastbaseoffset - - lastdst = tti.isdst - lastoffset = offset - lastbaseoffset = baseoffset - - out.trans_list.append(out.trans_list_utc[i] + adjustment) - - out.trans_idx = tuple(out.trans_idx) - out.trans_list = tuple(out.trans_list) - out.trans_list_utc = tuple(out.trans_list_utc) - - return out - - def _find_last_transition(self, dt, in_utc=False): - # If there's no list, there are no transitions to find - if not self._trans_list: - return None - - timestamp = _datetime_to_timestamp(dt) - - # Find where the timestamp fits in the transition list - if the - # timestamp is a transition time, it's part of the "after" period. - trans_list = self._trans_list_utc if in_utc else self._trans_list - idx = bisect.bisect_right(trans_list, timestamp) - - # We want to know when the previous transition was, so subtract off 1 - return idx - 1 - - def _get_ttinfo(self, idx): - # For no list or after the last transition, default to _ttinfo_std - if idx is None or (idx + 1) >= len(self._trans_list): - return self._ttinfo_std - - # If there is a list and the time is before it, return _ttinfo_before - if idx < 0: - return self._ttinfo_before - - return self._trans_idx[idx] - - def _find_ttinfo(self, dt): - idx = self._resolve_ambiguous_time(dt) - - return self._get_ttinfo(idx) - - def fromutc(self, dt): - """ - The ``tzfile`` implementation of :py:func:`datetime.tzinfo.fromutc`. - - :param dt: - A :py:class:`datetime.datetime` object. - - :raises TypeError: - Raised if ``dt`` is not a :py:class:`datetime.datetime` object. - - :raises ValueError: - Raised if this is called with a ``dt`` which does not have this - ``tzinfo`` attached. - - :return: - Returns a :py:class:`datetime.datetime` object representing the - wall time in ``self``'s time zone. - """ - # These isinstance checks are in datetime.tzinfo, so we'll preserve - # them, even if we don't care about duck typing. - if not isinstance(dt, datetime.datetime): - raise TypeError("fromutc() requires a datetime argument") - - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - # First treat UTC as wall time and get the transition we're in. - idx = self._find_last_transition(dt, in_utc=True) - tti = self._get_ttinfo(idx) - - dt_out = dt + datetime.timedelta(seconds=tti.offset) - - fold = self.is_ambiguous(dt_out, idx=idx) - - return enfold(dt_out, fold=int(fold)) - - def is_ambiguous(self, dt, idx=None): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - if idx is None: - idx = self._find_last_transition(dt) - - # Calculate the difference in offsets from current to previous - timestamp = _datetime_to_timestamp(dt) - tti = self._get_ttinfo(idx) - - if idx is None or idx <= 0: - return False - - od = self._get_ttinfo(idx - 1).offset - tti.offset - tt = self._trans_list[idx] # Transition time - - return timestamp < tt + od - - def _resolve_ambiguous_time(self, dt): - idx = self._find_last_transition(dt) - - # If we have no transitions, return the index - _fold = self._fold(dt) - if idx is None or idx == 0: - return idx - - # If it's ambiguous and we're in a fold, shift to a different index. - idx_offset = int(not _fold and self.is_ambiguous(dt, idx)) - - return idx - idx_offset - - def utcoffset(self, dt): - if dt is None: - return None - - if not self._ttinfo_std: - return ZERO - - return self._find_ttinfo(dt).delta - - def dst(self, dt): - if dt is None: - return None - - if not self._ttinfo_dst: - return ZERO - - tti = self._find_ttinfo(dt) - - if not tti.isdst: - return ZERO - - # The documentation says that utcoffset()-dst() must - # be constant for every dt. - return tti.dstoffset - - @tzname_in_python2 - def tzname(self, dt): - if not self._ttinfo_std or dt is None: - return None - return self._find_ttinfo(dt).abbr - - def __eq__(self, other): - if not isinstance(other, tzfile): - return NotImplemented - return (self._trans_list == other._trans_list and - self._trans_idx == other._trans_idx and - self._ttinfo_list == other._ttinfo_list) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._filename)) - - def __reduce__(self): - return self.__reduce_ex__(None) - - def __reduce_ex__(self, protocol): - return (self.__class__, (None, self._filename), self.__dict__) - - -class tzrange(tzrangebase): - """ - The ``tzrange`` object is a time zone specified by a set of offsets and - abbreviations, equivalent to the way the ``TZ`` variable can be specified - in POSIX-like systems, but using Python delta objects to specify DST - start, end and offsets. - - :param stdabbr: - The abbreviation for standard time (e.g. ``'EST'``). - - :param stdoffset: - An integer or :class:`datetime.timedelta` object or equivalent - specifying the base offset from UTC. - - If unspecified, +00:00 is used. - - :param dstabbr: - The abbreviation for DST / "Summer" time (e.g. ``'EDT'``). - - If specified, with no other DST information, DST is assumed to occur - and the default behavior or ``dstoffset``, ``start`` and ``end`` is - used. If unspecified and no other DST information is specified, it - is assumed that this zone has no DST. - - If this is unspecified and other DST information is *is* specified, - DST occurs in the zone but the time zone abbreviation is left - unchanged. - - :param dstoffset: - A an integer or :class:`datetime.timedelta` object or equivalent - specifying the UTC offset during DST. If unspecified and any other DST - information is specified, it is assumed to be the STD offset +1 hour. - - :param start: - A :class:`relativedelta.relativedelta` object or equivalent specifying - the time and time of year that daylight savings time starts. To - specify, for example, that DST starts at 2AM on the 2nd Sunday in - March, pass: - - ``relativedelta(hours=2, month=3, day=1, weekday=SU(+2))`` - - If unspecified and any other DST information is specified, the default - value is 2 AM on the first Sunday in April. - - :param end: - A :class:`relativedelta.relativedelta` object or equivalent - representing the time and time of year that daylight savings time - ends, with the same specification method as in ``start``. One note is - that this should point to the first time in the *standard* zone, so if - a transition occurs at 2AM in the DST zone and the clocks are set back - 1 hour to 1AM, set the ``hours`` parameter to +1. - - - **Examples:** - - .. testsetup:: tzrange - - from dateutil.tz import tzrange, tzstr - - .. doctest:: tzrange - - >>> tzstr('EST5EDT') == tzrange("EST", -18000, "EDT") - True - - >>> from dateutil.relativedelta import * - >>> range1 = tzrange("EST", -18000, "EDT") - >>> range2 = tzrange("EST", -18000, "EDT", -14400, - ... relativedelta(hours=+2, month=4, day=1, - ... weekday=SU(+1)), - ... relativedelta(hours=+1, month=10, day=31, - ... weekday=SU(-1))) - >>> tzstr('EST5EDT') == range1 == range2 - True - - """ - def __init__(self, stdabbr, stdoffset=None, - dstabbr=None, dstoffset=None, - start=None, end=None): - - global relativedelta - from dateutil import relativedelta - - self._std_abbr = stdabbr - self._dst_abbr = dstabbr - - try: - stdoffset = stdoffset.total_seconds() - except (TypeError, AttributeError): - pass - - try: - dstoffset = dstoffset.total_seconds() - except (TypeError, AttributeError): - pass - - if stdoffset is not None: - self._std_offset = datetime.timedelta(seconds=stdoffset) - else: - self._std_offset = ZERO - - if dstoffset is not None: - self._dst_offset = datetime.timedelta(seconds=dstoffset) - elif dstabbr and stdoffset is not None: - self._dst_offset = self._std_offset + datetime.timedelta(hours=+1) - else: - self._dst_offset = ZERO - - if dstabbr and start is None: - self._start_delta = relativedelta.relativedelta( - hours=+2, month=4, day=1, weekday=relativedelta.SU(+1)) - else: - self._start_delta = start - - if dstabbr and end is None: - self._end_delta = relativedelta.relativedelta( - hours=+1, month=10, day=31, weekday=relativedelta.SU(-1)) - else: - self._end_delta = end - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = bool(self._start_delta) - - def transitions(self, year): - """ - For a given year, get the DST on and off transition times, expressed - always on the standard time side. For zones with no transitions, this - function returns ``None``. - - :param year: - The year whose transitions you would like to query. - - :return: - Returns a :class:`tuple` of :class:`datetime.datetime` objects, - ``(dston, dstoff)`` for zones with an annual DST transition, or - ``None`` for fixed offset zones. - """ - if not self.hasdst: - return None - - base_year = datetime.datetime(year, 1, 1) - - start = base_year + self._start_delta - end = base_year + self._end_delta - - return (start, end) - - def __eq__(self, other): - if not isinstance(other, tzrange): - return NotImplemented - - return (self._std_abbr == other._std_abbr and - self._dst_abbr == other._dst_abbr and - self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset and - self._start_delta == other._start_delta and - self._end_delta == other._end_delta) - - @property - def _dst_base_offset(self): - return self._dst_base_offset_ - - -@six.add_metaclass(_TzStrFactory) -class tzstr(tzrange): - """ - ``tzstr`` objects are time zone objects specified by a time-zone string as - it would be passed to a ``TZ`` variable on POSIX-style systems (see - the `GNU C Library: TZ Variable`_ for more details). - - There is one notable exception, which is that POSIX-style time zones use an - inverted offset format, so normally ``GMT+3`` would be parsed as an offset - 3 hours *behind* GMT. The ``tzstr`` time zone object will parse this as an - offset 3 hours *ahead* of GMT. If you would like to maintain the POSIX - behavior, pass a ``True`` value to ``posix_offset``. - - The :class:`tzrange` object provides the same functionality, but is - specified using :class:`relativedelta.relativedelta` objects. rather than - strings. - - :param s: - A time zone string in ``TZ`` variable format. This can be a - :class:`bytes` (2.x: :class:`str`), :class:`str` (2.x: - :class:`unicode`) or a stream emitting unicode characters - (e.g. :class:`StringIO`). - - :param posix_offset: - Optional. If set to ``True``, interpret strings such as ``GMT+3`` or - ``UTC+3`` as being 3 hours *behind* UTC rather than ahead, per the - POSIX standard. - - .. caution:: - - Prior to version 2.7.0, this function also supported time zones - in the format: - - * ``EST5EDT,4,0,6,7200,10,0,26,7200,3600`` - * ``EST5EDT,4,1,0,7200,10,-1,0,7200,3600`` - - This format is non-standard and has been deprecated; this function - will raise a :class:`DeprecatedTZFormatWarning` until - support is removed in a future version. - - .. _`GNU C Library: TZ Variable`: - https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html - """ - def __init__(self, s, posix_offset=False): - global parser - from dateutil.parser import _parser as parser - - self._s = s - - res = parser._parsetz(s) - if res is None or res.any_unused_tokens: - raise ValueError("unknown string format") - - # Here we break the compatibility with the TZ variable handling. - # GMT-3 actually *means* the timezone -3. - if res.stdabbr in ("GMT", "UTC") and not posix_offset: - res.stdoffset *= -1 - - # We must initialize it first, since _delta() needs - # _std_offset and _dst_offset set. Use False in start/end - # to avoid building it two times. - tzrange.__init__(self, res.stdabbr, res.stdoffset, - res.dstabbr, res.dstoffset, - start=False, end=False) - - if not res.dstabbr: - self._start_delta = None - self._end_delta = None - else: - self._start_delta = self._delta(res.start) - if self._start_delta: - self._end_delta = self._delta(res.end, isend=1) - - self.hasdst = bool(self._start_delta) - - def _delta(self, x, isend=0): - from dateutil import relativedelta - kwargs = {} - if x.month is not None: - kwargs["month"] = x.month - if x.weekday is not None: - kwargs["weekday"] = relativedelta.weekday(x.weekday, x.week) - if x.week > 0: - kwargs["day"] = 1 - else: - kwargs["day"] = 31 - elif x.day: - kwargs["day"] = x.day - elif x.yday is not None: - kwargs["yearday"] = x.yday - elif x.jyday is not None: - kwargs["nlyearday"] = x.jyday - if not kwargs: - # Default is to start on first sunday of april, and end - # on last sunday of october. - if not isend: - kwargs["month"] = 4 - kwargs["day"] = 1 - kwargs["weekday"] = relativedelta.SU(+1) - else: - kwargs["month"] = 10 - kwargs["day"] = 31 - kwargs["weekday"] = relativedelta.SU(-1) - if x.time is not None: - kwargs["seconds"] = x.time - else: - # Default is 2AM. - kwargs["seconds"] = 7200 - if isend: - # Convert to standard time, to follow the documented way - # of working with the extra hour. See the documentation - # of the tzinfo class. - delta = self._dst_offset - self._std_offset - kwargs["seconds"] -= delta.seconds + delta.days * 86400 - return relativedelta.relativedelta(**kwargs) - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._s)) - - -class _tzicalvtzcomp(object): - def __init__(self, tzoffsetfrom, tzoffsetto, isdst, - tzname=None, rrule=None): - self.tzoffsetfrom = datetime.timedelta(seconds=tzoffsetfrom) - self.tzoffsetto = datetime.timedelta(seconds=tzoffsetto) - self.tzoffsetdiff = self.tzoffsetto - self.tzoffsetfrom - self.isdst = isdst - self.tzname = tzname - self.rrule = rrule - - -class _tzicalvtz(_tzinfo): - def __init__(self, tzid, comps=[]): - super(_tzicalvtz, self).__init__() - - self._tzid = tzid - self._comps = comps - self._cachedate = [] - self._cachecomp = [] - self._cache_lock = _thread.allocate_lock() - - def _find_comp(self, dt): - if len(self._comps) == 1: - return self._comps[0] - - dt = dt.replace(tzinfo=None) - - try: - with self._cache_lock: - return self._cachecomp[self._cachedate.index( - (dt, self._fold(dt)))] - except ValueError: - pass - - lastcompdt = None - lastcomp = None - - for comp in self._comps: - compdt = self._find_compdt(comp, dt) - - if compdt and (not lastcompdt or lastcompdt < compdt): - lastcompdt = compdt - lastcomp = comp - - if not lastcomp: - # RFC says nothing about what to do when a given - # time is before the first onset date. We'll look for the - # first standard component, or the first component, if - # none is found. - for comp in self._comps: - if not comp.isdst: - lastcomp = comp - break - else: - lastcomp = comp[0] - - with self._cache_lock: - self._cachedate.insert(0, (dt, self._fold(dt))) - self._cachecomp.insert(0, lastcomp) - - if len(self._cachedate) > 10: - self._cachedate.pop() - self._cachecomp.pop() - - return lastcomp - - def _find_compdt(self, comp, dt): - if comp.tzoffsetdiff < ZERO and self._fold(dt): - dt -= comp.tzoffsetdiff - - compdt = comp.rrule.before(dt, inc=True) - - return compdt - - def utcoffset(self, dt): - if dt is None: - return None - - return self._find_comp(dt).tzoffsetto - - def dst(self, dt): - comp = self._find_comp(dt) - if comp.isdst: - return comp.tzoffsetdiff - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._find_comp(dt).tzname - - def __repr__(self): - return "" % repr(self._tzid) - - __reduce__ = object.__reduce__ - - -class tzical(object): - """ - This object is designed to parse an iCalendar-style ``VTIMEZONE`` structure - as set out in `RFC 5545`_ Section 4.6.5 into one or more `tzinfo` objects. - - :param `fileobj`: - A file or stream in iCalendar format, which should be UTF-8 encoded - with CRLF endings. - - .. _`RFC 5545`: https://tools.ietf.org/html/rfc5545 - """ - def __init__(self, fileobj): - global rrule - from dateutil import rrule - - if isinstance(fileobj, string_types): - self._s = fileobj - # ical should be encoded in UTF-8 with CRLF - fileobj = open(fileobj, 'r') - else: - self._s = getattr(fileobj, 'name', repr(fileobj)) - fileobj = _nullcontext(fileobj) - - self._vtz = {} - - with fileobj as fobj: - self._parse_rfc(fobj.read()) - - def keys(self): - """ - Retrieves the available time zones as a list. - """ - return list(self._vtz.keys()) - - def get(self, tzid=None): - """ - Retrieve a :py:class:`datetime.tzinfo` object by its ``tzid``. - - :param tzid: - If there is exactly one time zone available, omitting ``tzid`` - or passing :py:const:`None` value returns it. Otherwise a valid - key (which can be retrieved from :func:`keys`) is required. - - :raises ValueError: - Raised if ``tzid`` is not specified but there are either more - or fewer than 1 zone defined. - - :returns: - Returns either a :py:class:`datetime.tzinfo` object representing - the relevant time zone or :py:const:`None` if the ``tzid`` was - not found. - """ - if tzid is None: - if len(self._vtz) == 0: - raise ValueError("no timezones defined") - elif len(self._vtz) > 1: - raise ValueError("more than one timezone available") - tzid = next(iter(self._vtz)) - - return self._vtz.get(tzid) - - def _parse_offset(self, s): - s = s.strip() - if not s: - raise ValueError("empty offset") - if s[0] in ('+', '-'): - signal = (-1, +1)[s[0] == '+'] - s = s[1:] - else: - signal = +1 - if len(s) == 4: - return (int(s[:2]) * 3600 + int(s[2:]) * 60) * signal - elif len(s) == 6: - return (int(s[:2]) * 3600 + int(s[2:4]) * 60 + int(s[4:])) * signal - else: - raise ValueError("invalid offset: " + s) - - def _parse_rfc(self, s): - lines = s.splitlines() - if not lines: - raise ValueError("empty string") - - # Unfold - i = 0 - while i < len(lines): - line = lines[i].rstrip() - if not line: - del lines[i] - elif i > 0 and line[0] == " ": - lines[i-1] += line[1:] - del lines[i] - else: - i += 1 - - tzid = None - comps = [] - invtz = False - comptype = None - for line in lines: - if not line: - continue - name, value = line.split(':', 1) - parms = name.split(';') - if not parms: - raise ValueError("empty property name") - name = parms[0].upper() - parms = parms[1:] - if invtz: - if name == "BEGIN": - if value in ("STANDARD", "DAYLIGHT"): - # Process component - pass - else: - raise ValueError("unknown component: "+value) - comptype = value - founddtstart = False - tzoffsetfrom = None - tzoffsetto = None - rrulelines = [] - tzname = None - elif name == "END": - if value == "VTIMEZONE": - if comptype: - raise ValueError("component not closed: "+comptype) - if not tzid: - raise ValueError("mandatory TZID not found") - if not comps: - raise ValueError( - "at least one component is needed") - # Process vtimezone - self._vtz[tzid] = _tzicalvtz(tzid, comps) - invtz = False - elif value == comptype: - if not founddtstart: - raise ValueError("mandatory DTSTART not found") - if tzoffsetfrom is None: - raise ValueError( - "mandatory TZOFFSETFROM not found") - if tzoffsetto is None: - raise ValueError( - "mandatory TZOFFSETFROM not found") - # Process component - rr = None - if rrulelines: - rr = rrule.rrulestr("\n".join(rrulelines), - compatible=True, - ignoretz=True, - cache=True) - comp = _tzicalvtzcomp(tzoffsetfrom, tzoffsetto, - (comptype == "DAYLIGHT"), - tzname, rr) - comps.append(comp) - comptype = None - else: - raise ValueError("invalid component end: "+value) - elif comptype: - if name == "DTSTART": - # DTSTART in VTIMEZONE takes a subset of valid RRULE - # values under RFC 5545. - for parm in parms: - if parm != 'VALUE=DATE-TIME': - msg = ('Unsupported DTSTART param in ' + - 'VTIMEZONE: ' + parm) - raise ValueError(msg) - rrulelines.append(line) - founddtstart = True - elif name in ("RRULE", "RDATE", "EXRULE", "EXDATE"): - rrulelines.append(line) - elif name == "TZOFFSETFROM": - if parms: - raise ValueError( - "unsupported %s parm: %s " % (name, parms[0])) - tzoffsetfrom = self._parse_offset(value) - elif name == "TZOFFSETTO": - if parms: - raise ValueError( - "unsupported TZOFFSETTO parm: "+parms[0]) - tzoffsetto = self._parse_offset(value) - elif name == "TZNAME": - if parms: - raise ValueError( - "unsupported TZNAME parm: "+parms[0]) - tzname = value - elif name == "COMMENT": - pass - else: - raise ValueError("unsupported property: "+name) - else: - if name == "TZID": - if parms: - raise ValueError( - "unsupported TZID parm: "+parms[0]) - tzid = value - elif name in ("TZURL", "LAST-MODIFIED", "COMMENT"): - pass - else: - raise ValueError("unsupported property: "+name) - elif name == "BEGIN" and value == "VTIMEZONE": - tzid = None - comps = [] - invtz = True - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._s)) - - -if sys.platform != "win32": - TZFILES = ["/etc/localtime", "localtime"] - TZPATHS = ["/usr/share/zoneinfo", - "/usr/lib/zoneinfo", - "/usr/share/lib/zoneinfo", - "/etc/zoneinfo"] -else: - TZFILES = [] - TZPATHS = [] - - -def __get_gettz(): - tzlocal_classes = (tzlocal,) - if tzwinlocal is not None: - tzlocal_classes += (tzwinlocal,) - - class GettzFunc(object): - """ - Retrieve a time zone object from a string representation - - This function is intended to retrieve the :py:class:`tzinfo` subclass - that best represents the time zone that would be used if a POSIX - `TZ variable`_ were set to the same value. - - If no argument or an empty string is passed to ``gettz``, local time - is returned: - - .. code-block:: python3 - - >>> gettz() - tzfile('/etc/localtime') - - This function is also the preferred way to map IANA tz database keys - to :class:`tzfile` objects: - - .. code-block:: python3 - - >>> gettz('Pacific/Kiritimati') - tzfile('/usr/share/zoneinfo/Pacific/Kiritimati') - - On Windows, the standard is extended to include the Windows-specific - zone names provided by the operating system: - - .. code-block:: python3 - - >>> gettz('Egypt Standard Time') - tzwin('Egypt Standard Time') - - Passing a GNU ``TZ`` style string time zone specification returns a - :class:`tzstr` object: - - .. code-block:: python3 - - >>> gettz('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') - tzstr('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') - - :param name: - A time zone name (IANA, or, on Windows, Windows keys), location of - a ``tzfile(5)`` zoneinfo file or ``TZ`` variable style time zone - specifier. An empty string, no argument or ``None`` is interpreted - as local time. - - :return: - Returns an instance of one of ``dateutil``'s :py:class:`tzinfo` - subclasses. - - .. versionchanged:: 2.7.0 - - After version 2.7.0, any two calls to ``gettz`` using the same - input strings will return the same object: - - .. code-block:: python3 - - >>> tz.gettz('America/Chicago') is tz.gettz('America/Chicago') - True - - In addition to improving performance, this ensures that - `"same zone" semantics`_ are used for datetimes in the same zone. - - - .. _`TZ variable`: - https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html - - .. _`"same zone" semantics`: - https://blog.ganssle.io/articles/2018/02/aware-datetime-arithmetic.html - """ - def __init__(self): - - self.__instances = weakref.WeakValueDictionary() - self.__strong_cache_size = 8 - self.__strong_cache = OrderedDict() - self._cache_lock = _thread.allocate_lock() - - def __call__(self, name=None): - with self._cache_lock: - rv = self.__instances.get(name, None) - - if rv is None: - rv = self.nocache(name=name) - if not (name is None - or isinstance(rv, tzlocal_classes) - or rv is None): - # tzlocal is slightly more complicated than the other - # time zone providers because it depends on environment - # at construction time, so don't cache that. - # - # We also cannot store weak references to None, so we - # will also not store that. - self.__instances[name] = rv - else: - # No need for strong caching, return immediately - return rv - - self.__strong_cache[name] = self.__strong_cache.pop(name, rv) - - if len(self.__strong_cache) > self.__strong_cache_size: - self.__strong_cache.popitem(last=False) - - return rv - - def set_cache_size(self, size): - with self._cache_lock: - self.__strong_cache_size = size - while len(self.__strong_cache) > size: - self.__strong_cache.popitem(last=False) - - def cache_clear(self): - with self._cache_lock: - self.__instances = weakref.WeakValueDictionary() - self.__strong_cache.clear() - - @staticmethod - def nocache(name=None): - """A non-cached version of gettz""" - tz = None - if not name: - try: - name = os.environ["TZ"] - except KeyError: - pass - if name is None or name in ("", ":"): - for filepath in TZFILES: - if not os.path.isabs(filepath): - filename = filepath - for path in TZPATHS: - filepath = os.path.join(path, filename) - if os.path.isfile(filepath): - break - else: - continue - if os.path.isfile(filepath): - try: - tz = tzfile(filepath) - break - except (IOError, OSError, ValueError): - pass - else: - tz = tzlocal() - else: - try: - if name.startswith(":"): - name = name[1:] - except TypeError as e: - if isinstance(name, bytes): - new_msg = "gettz argument should be str, not bytes" - six.raise_from(TypeError(new_msg), e) - else: - raise - if os.path.isabs(name): - if os.path.isfile(name): - tz = tzfile(name) - else: - tz = None - else: - for path in TZPATHS: - filepath = os.path.join(path, name) - if not os.path.isfile(filepath): - filepath = filepath.replace(' ', '_') - if not os.path.isfile(filepath): - continue - try: - tz = tzfile(filepath) - break - except (IOError, OSError, ValueError): - pass - else: - tz = None - if tzwin is not None: - try: - tz = tzwin(name) - except (WindowsError, UnicodeEncodeError): - # UnicodeEncodeError is for Python 2.7 compat - tz = None - - if not tz: - from dateutil.zoneinfo import get_zonefile_instance - tz = get_zonefile_instance().get(name) - - if not tz: - for c in name: - # name is not a tzstr unless it has at least - # one offset. For short values of "name", an - # explicit for loop seems to be the fastest way - # To determine if a string contains a digit - if c in "0123456789": - try: - tz = tzstr(name) - except ValueError: - pass - break - else: - if name in ("GMT", "UTC"): - tz = UTC - elif name in time.tzname: - tz = tzlocal() - return tz - - return GettzFunc() - - -gettz = __get_gettz() -del __get_gettz - - -def datetime_exists(dt, tz=None): - """ - Given a datetime and a time zone, determine whether or not a given datetime - would fall in a gap. - - :param dt: - A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` - is provided.) - - :param tz: - A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If - ``None`` or not provided, the datetime's own time zone will be used. - - :return: - Returns a boolean value whether or not the "wall time" exists in - ``tz``. - - .. versionadded:: 2.7.0 - """ - if tz is None: - if dt.tzinfo is None: - raise ValueError('Datetime is naive and no time zone provided.') - tz = dt.tzinfo - - dt = dt.replace(tzinfo=None) - - # This is essentially a test of whether or not the datetime can survive - # a round trip to UTC. - dt_rt = dt.replace(tzinfo=tz).astimezone(UTC).astimezone(tz) - dt_rt = dt_rt.replace(tzinfo=None) - - return dt == dt_rt - - -def datetime_ambiguous(dt, tz=None): - """ - Given a datetime and a time zone, determine whether or not a given datetime - is ambiguous (i.e if there are two times differentiated only by their DST - status). - - :param dt: - A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` - is provided.) - - :param tz: - A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If - ``None`` or not provided, the datetime's own time zone will be used. - - :return: - Returns a boolean value whether or not the "wall time" is ambiguous in - ``tz``. - - .. versionadded:: 2.6.0 - """ - if tz is None: - if dt.tzinfo is None: - raise ValueError('Datetime is naive and no time zone provided.') - - tz = dt.tzinfo - - # If a time zone defines its own "is_ambiguous" function, we'll use that. - is_ambiguous_fn = getattr(tz, 'is_ambiguous', None) - if is_ambiguous_fn is not None: - try: - return tz.is_ambiguous(dt) - except Exception: - pass - - # If it doesn't come out and tell us it's ambiguous, we'll just check if - # the fold attribute has any effect on this particular date and time. - dt = dt.replace(tzinfo=tz) - wall_0 = enfold(dt, fold=0) - wall_1 = enfold(dt, fold=1) - - same_offset = wall_0.utcoffset() == wall_1.utcoffset() - same_dst = wall_0.dst() == wall_1.dst() - - return not (same_offset and same_dst) - - -def resolve_imaginary(dt): - """ - Given a datetime that may be imaginary, return an existing datetime. - - This function assumes that an imaginary datetime represents what the - wall time would be in a zone had the offset transition not occurred, so - it will always fall forward by the transition's change in offset. - - .. doctest:: - - >>> from dateutil import tz - >>> from datetime import datetime - >>> NYC = tz.gettz('America/New_York') - >>> print(tz.resolve_imaginary(datetime(2017, 3, 12, 2, 30, tzinfo=NYC))) - 2017-03-12 03:30:00-04:00 - - >>> KIR = tz.gettz('Pacific/Kiritimati') - >>> print(tz.resolve_imaginary(datetime(1995, 1, 1, 12, 30, tzinfo=KIR))) - 1995-01-02 12:30:00+14:00 - - As a note, :func:`datetime.astimezone` is guaranteed to produce a valid, - existing datetime, so a round-trip to and from UTC is sufficient to get - an extant datetime, however, this generally "falls back" to an earlier time - rather than falling forward to the STD side (though no guarantees are made - about this behavior). - - :param dt: - A :class:`datetime.datetime` which may or may not exist. - - :return: - Returns an existing :class:`datetime.datetime`. If ``dt`` was not - imaginary, the datetime returned is guaranteed to be the same object - passed to the function. - - .. versionadded:: 2.7.0 - """ - if dt.tzinfo is not None and not datetime_exists(dt): - - curr_offset = (dt + datetime.timedelta(hours=24)).utcoffset() - old_offset = (dt - datetime.timedelta(hours=24)).utcoffset() - - dt += curr_offset - old_offset - - return dt - - -def _datetime_to_timestamp(dt): - """ - Convert a :class:`datetime.datetime` object to an epoch timestamp in - seconds since January 1, 1970, ignoring the time zone. - """ - return (dt.replace(tzinfo=None) - EPOCH).total_seconds() - - -if sys.version_info >= (3, 6): - def _get_supported_offset(second_offset): - return second_offset -else: - def _get_supported_offset(second_offset): - # For python pre-3.6, round to full-minutes if that's not the case. - # Python's datetime doesn't accept sub-minute timezones. Check - # http://python.org/sf/1447945 or https://bugs.python.org/issue5288 - # for some information. - old_offset = second_offset - calculated_offset = 60 * ((second_offset + 30) // 60) - return calculated_offset - - -try: - # Python 3.7 feature - from contextlib import nullcontext as _nullcontext -except ImportError: - class _nullcontext(object): - """ - Class for wrapping contexts so that they are passed through in a - with statement. - """ - def __init__(self, context): - self.context = context - - def __enter__(self): - return self.context - - def __exit__(*args, **kwargs): - pass - -# vim:ts=4:sw=4:et diff --git a/myenv/lib/python3.12/site-packages/dateutil/tz/win.py b/myenv/lib/python3.12/site-packages/dateutil/tz/win.py deleted file mode 100644 index cde07ba..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tz/win.py +++ /dev/null @@ -1,370 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module provides an interface to the native time zone data on Windows, -including :py:class:`datetime.tzinfo` implementations. - -Attempting to import this module on a non-Windows platform will raise an -:py:obj:`ImportError`. -""" -# This code was originally contributed by Jeffrey Harris. -import datetime -import struct - -from six.moves import winreg -from six import text_type - -try: - import ctypes - from ctypes import wintypes -except ValueError: - # ValueError is raised on non-Windows systems for some horrible reason. - raise ImportError("Running tzwin on non-Windows system") - -from ._common import tzrangebase - -__all__ = ["tzwin", "tzwinlocal", "tzres"] - -ONEWEEK = datetime.timedelta(7) - -TZKEYNAMENT = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" -TZKEYNAME9X = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones" -TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation" - - -def _settzkeyname(): - handle = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - try: - winreg.OpenKey(handle, TZKEYNAMENT).Close() - TZKEYNAME = TZKEYNAMENT - except WindowsError: - TZKEYNAME = TZKEYNAME9X - handle.Close() - return TZKEYNAME - - -TZKEYNAME = _settzkeyname() - - -class tzres(object): - """ - Class for accessing ``tzres.dll``, which contains timezone name related - resources. - - .. versionadded:: 2.5.0 - """ - p_wchar = ctypes.POINTER(wintypes.WCHAR) # Pointer to a wide char - - def __init__(self, tzres_loc='tzres.dll'): - # Load the user32 DLL so we can load strings from tzres - user32 = ctypes.WinDLL('user32') - - # Specify the LoadStringW function - user32.LoadStringW.argtypes = (wintypes.HINSTANCE, - wintypes.UINT, - wintypes.LPWSTR, - ctypes.c_int) - - self.LoadStringW = user32.LoadStringW - self._tzres = ctypes.WinDLL(tzres_loc) - self.tzres_loc = tzres_loc - - def load_name(self, offset): - """ - Load a timezone name from a DLL offset (integer). - - >>> from dateutil.tzwin import tzres - >>> tzr = tzres() - >>> print(tzr.load_name(112)) - 'Eastern Standard Time' - - :param offset: - A positive integer value referring to a string from the tzres dll. - - .. note:: - - Offsets found in the registry are generally of the form - ``@tzres.dll,-114``. The offset in this case is 114, not -114. - - """ - resource = self.p_wchar() - lpBuffer = ctypes.cast(ctypes.byref(resource), wintypes.LPWSTR) - nchar = self.LoadStringW(self._tzres._handle, offset, lpBuffer, 0) - return resource[:nchar] - - def name_from_string(self, tzname_str): - """ - Parse strings as returned from the Windows registry into the time zone - name as defined in the registry. - - >>> from dateutil.tzwin import tzres - >>> tzr = tzres() - >>> print(tzr.name_from_string('@tzres.dll,-251')) - 'Dateline Daylight Time' - >>> print(tzr.name_from_string('Eastern Standard Time')) - 'Eastern Standard Time' - - :param tzname_str: - A timezone name string as returned from a Windows registry key. - - :return: - Returns the localized timezone string from tzres.dll if the string - is of the form `@tzres.dll,-offset`, else returns the input string. - """ - if not tzname_str.startswith('@'): - return tzname_str - - name_splt = tzname_str.split(',-') - try: - offset = int(name_splt[1]) - except: - raise ValueError("Malformed timezone string.") - - return self.load_name(offset) - - -class tzwinbase(tzrangebase): - """tzinfo class based on win32's timezones available in the registry.""" - def __init__(self): - raise NotImplementedError('tzwinbase is an abstract base class') - - def __eq__(self, other): - # Compare on all relevant dimensions, including name. - if not isinstance(other, tzwinbase): - return NotImplemented - - return (self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset and - self._stddayofweek == other._stddayofweek and - self._dstdayofweek == other._dstdayofweek and - self._stdweeknumber == other._stdweeknumber and - self._dstweeknumber == other._dstweeknumber and - self._stdhour == other._stdhour and - self._dsthour == other._dsthour and - self._stdminute == other._stdminute and - self._dstminute == other._dstminute and - self._std_abbr == other._std_abbr and - self._dst_abbr == other._dst_abbr) - - @staticmethod - def list(): - """Return a list of all time zones known to the system.""" - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - with winreg.OpenKey(handle, TZKEYNAME) as tzkey: - result = [winreg.EnumKey(tzkey, i) - for i in range(winreg.QueryInfoKey(tzkey)[0])] - return result - - def display(self): - """ - Return the display name of the time zone. - """ - return self._display - - def transitions(self, year): - """ - For a given year, get the DST on and off transition times, expressed - always on the standard time side. For zones with no transitions, this - function returns ``None``. - - :param year: - The year whose transitions you would like to query. - - :return: - Returns a :class:`tuple` of :class:`datetime.datetime` objects, - ``(dston, dstoff)`` for zones with an annual DST transition, or - ``None`` for fixed offset zones. - """ - - if not self.hasdst: - return None - - dston = picknthweekday(year, self._dstmonth, self._dstdayofweek, - self._dsthour, self._dstminute, - self._dstweeknumber) - - dstoff = picknthweekday(year, self._stdmonth, self._stddayofweek, - self._stdhour, self._stdminute, - self._stdweeknumber) - - # Ambiguous dates default to the STD side - dstoff -= self._dst_base_offset - - return dston, dstoff - - def _get_hasdst(self): - return self._dstmonth != 0 - - @property - def _dst_base_offset(self): - return self._dst_base_offset_ - - -class tzwin(tzwinbase): - """ - Time zone object created from the zone info in the Windows registry - - These are similar to :py:class:`dateutil.tz.tzrange` objects in that - the time zone data is provided in the format of a single offset rule - for either 0 or 2 time zone transitions per year. - - :param: name - The name of a Windows time zone key, e.g. "Eastern Standard Time". - The full list of keys can be retrieved with :func:`tzwin.list`. - """ - - def __init__(self, name): - self._name = name - - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - tzkeyname = text_type("{kn}\\{name}").format(kn=TZKEYNAME, name=name) - with winreg.OpenKey(handle, tzkeyname) as tzkey: - keydict = valuestodict(tzkey) - - self._std_abbr = keydict["Std"] - self._dst_abbr = keydict["Dlt"] - - self._display = keydict["Display"] - - # See http://ww_winreg.jsiinc.com/SUBA/tip0300/rh0398.htm - tup = struct.unpack("=3l16h", keydict["TZI"]) - stdoffset = -tup[0]-tup[1] # Bias + StandardBias * -1 - dstoffset = stdoffset-tup[2] # + DaylightBias * -1 - self._std_offset = datetime.timedelta(minutes=stdoffset) - self._dst_offset = datetime.timedelta(minutes=dstoffset) - - # for the meaning see the win32 TIME_ZONE_INFORMATION structure docs - # http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx - (self._stdmonth, - self._stddayofweek, # Sunday = 0 - self._stdweeknumber, # Last = 5 - self._stdhour, - self._stdminute) = tup[4:9] - - (self._dstmonth, - self._dstdayofweek, # Sunday = 0 - self._dstweeknumber, # Last = 5 - self._dsthour, - self._dstminute) = tup[12:17] - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = self._get_hasdst() - - def __repr__(self): - return "tzwin(%s)" % repr(self._name) - - def __reduce__(self): - return (self.__class__, (self._name,)) - - -class tzwinlocal(tzwinbase): - """ - Class representing the local time zone information in the Windows registry - - While :class:`dateutil.tz.tzlocal` makes system calls (via the :mod:`time` - module) to retrieve time zone information, ``tzwinlocal`` retrieves the - rules directly from the Windows registry and creates an object like - :class:`dateutil.tz.tzwin`. - - Because Windows does not have an equivalent of :func:`time.tzset`, on - Windows, :class:`dateutil.tz.tzlocal` instances will always reflect the - time zone settings *at the time that the process was started*, meaning - changes to the machine's time zone settings during the run of a program - on Windows will **not** be reflected by :class:`dateutil.tz.tzlocal`. - Because ``tzwinlocal`` reads the registry directly, it is unaffected by - this issue. - """ - def __init__(self): - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - with winreg.OpenKey(handle, TZLOCALKEYNAME) as tzlocalkey: - keydict = valuestodict(tzlocalkey) - - self._std_abbr = keydict["StandardName"] - self._dst_abbr = keydict["DaylightName"] - - try: - tzkeyname = text_type('{kn}\\{sn}').format(kn=TZKEYNAME, - sn=self._std_abbr) - with winreg.OpenKey(handle, tzkeyname) as tzkey: - _keydict = valuestodict(tzkey) - self._display = _keydict["Display"] - except OSError: - self._display = None - - stdoffset = -keydict["Bias"]-keydict["StandardBias"] - dstoffset = stdoffset-keydict["DaylightBias"] - - self._std_offset = datetime.timedelta(minutes=stdoffset) - self._dst_offset = datetime.timedelta(minutes=dstoffset) - - # For reasons unclear, in this particular key, the day of week has been - # moved to the END of the SYSTEMTIME structure. - tup = struct.unpack("=8h", keydict["StandardStart"]) - - (self._stdmonth, - self._stdweeknumber, # Last = 5 - self._stdhour, - self._stdminute) = tup[1:5] - - self._stddayofweek = tup[7] - - tup = struct.unpack("=8h", keydict["DaylightStart"]) - - (self._dstmonth, - self._dstweeknumber, # Last = 5 - self._dsthour, - self._dstminute) = tup[1:5] - - self._dstdayofweek = tup[7] - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = self._get_hasdst() - - def __repr__(self): - return "tzwinlocal()" - - def __str__(self): - # str will return the standard name, not the daylight name. - return "tzwinlocal(%s)" % repr(self._std_abbr) - - def __reduce__(self): - return (self.__class__, ()) - - -def picknthweekday(year, month, dayofweek, hour, minute, whichweek): - """ dayofweek == 0 means Sunday, whichweek 5 means last instance """ - first = datetime.datetime(year, month, 1, hour, minute) - - # This will work if dayofweek is ISO weekday (1-7) or Microsoft-style (0-6), - # Because 7 % 7 = 0 - weekdayone = first.replace(day=((dayofweek - first.isoweekday()) % 7) + 1) - wd = weekdayone + ((whichweek - 1) * ONEWEEK) - if (wd.month != month): - wd -= ONEWEEK - - return wd - - -def valuestodict(key): - """Convert a registry key's values to a dictionary.""" - dout = {} - size = winreg.QueryInfoKey(key)[1] - tz_res = None - - for i in range(size): - key_name, value, dtype = winreg.EnumValue(key, i) - if dtype == winreg.REG_DWORD or dtype == winreg.REG_DWORD_LITTLE_ENDIAN: - # If it's a DWORD (32-bit integer), it's stored as unsigned - convert - # that to a proper signed integer - if value & (1 << 31): - value = value - (1 << 32) - elif dtype == winreg.REG_SZ: - # If it's a reference to the tzres DLL, load the actual string - if value.startswith('@tzres'): - tz_res = tz_res or tzres() - value = tz_res.name_from_string(value) - - value = value.rstrip('\x00') # Remove trailing nulls - - dout[key_name] = value - - return dout diff --git a/myenv/lib/python3.12/site-packages/dateutil/tzwin.py b/myenv/lib/python3.12/site-packages/dateutil/tzwin.py deleted file mode 100644 index cebc673..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/tzwin.py +++ /dev/null @@ -1,2 +0,0 @@ -# tzwin has moved to dateutil.tz.win -from .tz.win import * diff --git a/myenv/lib/python3.12/site-packages/dateutil/utils.py b/myenv/lib/python3.12/site-packages/dateutil/utils.py deleted file mode 100644 index dd2d245..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/utils.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers general convenience and utility functions for dealing with -datetimes. - -.. versionadded:: 2.7.0 -""" -from __future__ import unicode_literals - -from datetime import datetime, time - - -def today(tzinfo=None): - """ - Returns a :py:class:`datetime` representing the current day at midnight - - :param tzinfo: - The time zone to attach (also used to determine the current day). - - :return: - A :py:class:`datetime.datetime` object representing the current day - at midnight. - """ - - dt = datetime.now(tzinfo) - return datetime.combine(dt.date(), time(0, tzinfo=tzinfo)) - - -def default_tzinfo(dt, tzinfo): - """ - Sets the ``tzinfo`` parameter on naive datetimes only - - This is useful for example when you are provided a datetime that may have - either an implicit or explicit time zone, such as when parsing a time zone - string. - - .. doctest:: - - >>> from dateutil.tz import tzoffset - >>> from dateutil.parser import parse - >>> from dateutil.utils import default_tzinfo - >>> dflt_tz = tzoffset("EST", -18000) - >>> print(default_tzinfo(parse('2014-01-01 12:30 UTC'), dflt_tz)) - 2014-01-01 12:30:00+00:00 - >>> print(default_tzinfo(parse('2014-01-01 12:30'), dflt_tz)) - 2014-01-01 12:30:00-05:00 - - :param dt: - The datetime on which to replace the time zone - - :param tzinfo: - The :py:class:`datetime.tzinfo` subclass instance to assign to - ``dt`` if (and only if) it is naive. - - :return: - Returns an aware :py:class:`datetime.datetime`. - """ - if dt.tzinfo is not None: - return dt - else: - return dt.replace(tzinfo=tzinfo) - - -def within_delta(dt1, dt2, delta): - """ - Useful for comparing two datetimes that may have a negligible difference - to be considered equal. - """ - delta = abs(delta) - difference = dt1 - dt2 - return -delta <= difference <= delta diff --git a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__init__.py b/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__init__.py deleted file mode 100644 index 34f11ad..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__init__.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -import warnings -import json - -from tarfile import TarFile -from pkgutil import get_data -from io import BytesIO - -from dateutil.tz import tzfile as _tzfile - -__all__ = ["get_zonefile_instance", "gettz", "gettz_db_metadata"] - -ZONEFILENAME = "dateutil-zoneinfo.tar.gz" -METADATA_FN = 'METADATA' - - -class tzfile(_tzfile): - def __reduce__(self): - return (gettz, (self._filename,)) - - -def getzoneinfofile_stream(): - try: - return BytesIO(get_data(__name__, ZONEFILENAME)) - except IOError as e: # TODO switch to FileNotFoundError? - warnings.warn("I/O error({0}): {1}".format(e.errno, e.strerror)) - return None - - -class ZoneInfoFile(object): - def __init__(self, zonefile_stream=None): - if zonefile_stream is not None: - with TarFile.open(fileobj=zonefile_stream) as tf: - self.zones = {zf.name: tzfile(tf.extractfile(zf), filename=zf.name) - for zf in tf.getmembers() - if zf.isfile() and zf.name != METADATA_FN} - # deal with links: They'll point to their parent object. Less - # waste of memory - links = {zl.name: self.zones[zl.linkname] - for zl in tf.getmembers() if - zl.islnk() or zl.issym()} - self.zones.update(links) - try: - metadata_json = tf.extractfile(tf.getmember(METADATA_FN)) - metadata_str = metadata_json.read().decode('UTF-8') - self.metadata = json.loads(metadata_str) - except KeyError: - # no metadata in tar file - self.metadata = None - else: - self.zones = {} - self.metadata = None - - def get(self, name, default=None): - """ - Wrapper for :func:`ZoneInfoFile.zones.get`. This is a convenience method - for retrieving zones from the zone dictionary. - - :param name: - The name of the zone to retrieve. (Generally IANA zone names) - - :param default: - The value to return in the event of a missing key. - - .. versionadded:: 2.6.0 - - """ - return self.zones.get(name, default) - - -# The current API has gettz as a module function, although in fact it taps into -# a stateful class. So as a workaround for now, without changing the API, we -# will create a new "global" class instance the first time a user requests a -# timezone. Ugly, but adheres to the api. -# -# TODO: Remove after deprecation period. -_CLASS_ZONE_INSTANCE = [] - - -def get_zonefile_instance(new_instance=False): - """ - This is a convenience function which provides a :class:`ZoneInfoFile` - instance using the data provided by the ``dateutil`` package. By default, it - caches a single instance of the ZoneInfoFile object and returns that. - - :param new_instance: - If ``True``, a new instance of :class:`ZoneInfoFile` is instantiated and - used as the cached instance for the next call. Otherwise, new instances - are created only as necessary. - - :return: - Returns a :class:`ZoneInfoFile` object. - - .. versionadded:: 2.6 - """ - if new_instance: - zif = None - else: - zif = getattr(get_zonefile_instance, '_cached_instance', None) - - if zif is None: - zif = ZoneInfoFile(getzoneinfofile_stream()) - - get_zonefile_instance._cached_instance = zif - - return zif - - -def gettz(name): - """ - This retrieves a time zone from the local zoneinfo tarball that is packaged - with dateutil. - - :param name: - An IANA-style time zone name, as found in the zoneinfo file. - - :return: - Returns a :class:`dateutil.tz.tzfile` time zone object. - - .. warning:: - It is generally inadvisable to use this function, and it is only - provided for API compatibility with earlier versions. This is *not* - equivalent to ``dateutil.tz.gettz()``, which selects an appropriate - time zone based on the inputs, favoring system zoneinfo. This is ONLY - for accessing the dateutil-specific zoneinfo (which may be out of - date compared to the system zoneinfo). - - .. deprecated:: 2.6 - If you need to use a specific zoneinfofile over the system zoneinfo, - instantiate a :class:`dateutil.zoneinfo.ZoneInfoFile` object and call - :func:`dateutil.zoneinfo.ZoneInfoFile.get(name)` instead. - - Use :func:`get_zonefile_instance` to retrieve an instance of the - dateutil-provided zoneinfo. - """ - warnings.warn("zoneinfo.gettz() will be removed in future versions, " - "to use the dateutil-provided zoneinfo files, instantiate a " - "ZoneInfoFile object and use ZoneInfoFile.zones.get() " - "instead. See the documentation for details.", - DeprecationWarning) - - if len(_CLASS_ZONE_INSTANCE) == 0: - _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) - return _CLASS_ZONE_INSTANCE[0].zones.get(name) - - -def gettz_db_metadata(): - """ Get the zonefile metadata - - See `zonefile_metadata`_ - - :returns: - A dictionary with the database metadata - - .. deprecated:: 2.6 - See deprecation warning in :func:`zoneinfo.gettz`. To get metadata, - query the attribute ``zoneinfo.ZoneInfoFile.metadata``. - """ - warnings.warn("zoneinfo.gettz_db_metadata() will be removed in future " - "versions, to use the dateutil-provided zoneinfo files, " - "ZoneInfoFile object and query the 'metadata' attribute " - "instead. See the documentation for details.", - DeprecationWarning) - - if len(_CLASS_ZONE_INSTANCE) == 0: - _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) - return _CLASS_ZONE_INSTANCE[0].metadata diff --git a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0f449ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc b/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc deleted file mode 100644 index c74c3b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz b/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz deleted file mode 100644 index 1461f8c..0000000 Binary files a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/rebuild.py b/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/rebuild.py deleted file mode 100644 index 684c658..0000000 --- a/myenv/lib/python3.12/site-packages/dateutil/zoneinfo/rebuild.py +++ /dev/null @@ -1,75 +0,0 @@ -import logging -import os -import tempfile -import shutil -import json -from subprocess import check_call, check_output -from tarfile import TarFile - -from dateutil.zoneinfo import METADATA_FN, ZONEFILENAME - - -def rebuild(filename, tag=None, format="gz", zonegroups=[], metadata=None): - """Rebuild the internal timezone info in dateutil/zoneinfo/zoneinfo*tar* - - filename is the timezone tarball from ``ftp.iana.org/tz``. - - """ - tmpdir = tempfile.mkdtemp() - zonedir = os.path.join(tmpdir, "zoneinfo") - moduledir = os.path.dirname(__file__) - try: - with TarFile.open(filename) as tf: - for name in zonegroups: - tf.extract(name, tmpdir) - filepaths = [os.path.join(tmpdir, n) for n in zonegroups] - - _run_zic(zonedir, filepaths) - - # write metadata file - with open(os.path.join(zonedir, METADATA_FN), 'w') as f: - json.dump(metadata, f, indent=4, sort_keys=True) - target = os.path.join(moduledir, ZONEFILENAME) - with TarFile.open(target, "w:%s" % format) as tf: - for entry in os.listdir(zonedir): - entrypath = os.path.join(zonedir, entry) - tf.add(entrypath, entry) - finally: - shutil.rmtree(tmpdir) - - -def _run_zic(zonedir, filepaths): - """Calls the ``zic`` compiler in a compatible way to get a "fat" binary. - - Recent versions of ``zic`` default to ``-b slim``, while older versions - don't even have the ``-b`` option (but default to "fat" binaries). The - current version of dateutil does not support Version 2+ TZif files, which - causes problems when used in conjunction with "slim" binaries, so this - function is used to ensure that we always get a "fat" binary. - """ - - try: - help_text = check_output(["zic", "--help"]) - except OSError as e: - _print_on_nosuchfile(e) - raise - - if b"-b " in help_text: - bloat_args = ["-b", "fat"] - else: - bloat_args = [] - - check_call(["zic"] + bloat_args + ["-d", zonedir] + filepaths) - - -def _print_on_nosuchfile(e): - """Print helpful troubleshooting message - - e is an exception raised by subprocess.check_call() - - """ - if e.errno == 2: - logging.error( - "Could not find zic. Perhaps you need to install " - "libc-bin or some other package that provides it, " - "or it's not in your PATH?") diff --git a/myenv/lib/python3.12/site-packages/gui/__main__.py b/myenv/lib/python3.12/site-packages/gui/__main__.py deleted file mode 100755 index 8794bc8..0000000 --- a/myenv/lib/python3.12/site-packages/gui/__main__.py +++ /dev/null @@ -1,10742 +0,0 @@ -from PyQt6.QtWidgets import QComboBox, QButtonGroup, QLineEdit, QMainWindow, QLabel, QWidget, QStackedWidget, QApplication, QPushButton, QTextEdit, QFrame, QHBoxLayout, QVBoxLayout, QScrollArea, QSystemTrayIcon, QMessageBox, QGraphicsDropShadowEffect, QGridLayout, QCheckBox, QStackedLayout, QGroupBox, QDialog -from PyQt6.QtGui import QIcon, QPixmap, QTransform, QPainter, QColor, QFont, QFontDatabase -from PyQt6 import QtGui -from PyQt6 import QtCore -from PyQt6.QtCore import Qt, QSize, QThread, pyqtSignal, QTimer, QPointF, QRect, QMutex, QMutexLocker, QObject -import os -import sys -import functools -import threading -import logging -import traceback -import random -import subprocess -import qrcode -from io import BytesIO -from typing import Union -from core.Errors import UnknownConnectionTypeError, CommandNotFoundError, MissingSubscriptionError, InvalidSubscriptionError, ProfileActivationError, UnsupportedApplicationVersionError, FileIntegrityError, ProfileModificationError, ProfileStateConflictError, EndpointVerificationError, PolicyAssignmentError, PolicyInstatementError, PolicyRevocationError -from core.controllers.ApplicationVersionController import ApplicationVersionController -from core.controllers.ApplicationController import ApplicationController -from core.controllers.ClientController import ClientController -from core.controllers.ConfigurationController import ConfigurationController -from core.controllers.InvoiceController import InvoiceController -from core.controllers.LocationController import LocationController -from core.controllers.ProfileController import ProfileController -from core.controllers.SubscriptionController import SubscriptionController -from core.controllers.SubscriptionPlanController import SubscriptionPlanController -from core.controllers.PolicyController import PolicyController -from core.models.session.SessionConnection import SessionConnection -from core.models.session.SessionProfile import SessionProfile -from core.models.system.SystemConnection import SystemConnection -from core.models.system.SystemProfile import SystemProfile -from core.observers.ApplicationVersionObserver import ApplicationVersionObserver -from core.observers.ClientObserver import ClientObserver -from core.observers.ConnectionObserver import ConnectionObserver -from core.observers.InvoiceObserver import InvoiceObserver -from core.observers.ProfileObserver import ProfileObserver -from datetime import datetime, timezone, timedelta -from core.Constants import Constants -import json -import shlex - - -application_version_observer = ApplicationVersionObserver() -client_observer = ClientObserver() -connection_observer = ConnectionObserver() -invoice_observer = InvoiceObserver() -profile_observer = ProfileObserver() - - -class WorkerThread(QThread): - text_output = pyqtSignal(str) - sync_output = pyqtSignal(list, list, bool, bool, list, list) - invoice_output = pyqtSignal(object, str) - invoice_finished = pyqtSignal(bool) - profiles_output = pyqtSignal(dict) - special_output = pyqtSignal(str) - finished = pyqtSignal(bool) - update_finished = pyqtSignal(dict) - - def __init__(self, action=None, profile_data=None, profile_type=None, package_name=None, package_command=None): - super().__init__() - self.action = action - self.profile_data = profile_data - self.profile_type = profile_type - self.package_name = package_name - self.package_command = package_command - self.is_running = True - self.is_disabling = False - - def run(self): - if self.action == 'LIST_PROFILES': - self.list_profiles() - elif self.action == 'CREATE_SESSION_PROFILE': - self.create_profile(self.profile_type) - elif self.action == 'CREATE_SYSTEM_PROFILE': - self.create_profile(self.profile_type) - elif self.action == 'GET_SUBSCRIPTION': - self.get_subscription() - elif self.action == 'DISABLE_PROFILE': - self.disable_profile() - elif self.action == 'SYNC' or self.action == 'SYNC_TOR': - self.sync() - elif self.action == 'DESTROY_PROFILE': - self.destroy_profile() - elif self.action == 'DISABLE_ALL_PROFILES': - self.disable_all_profiles() - elif self.action == 'INSTALL_PACKAGE': - self.install_package() - elif self.action == 'CHECK_FOR_UPDATE': - self.check_for_update() - elif self.action == 'DOWNLOAD_UPDATE': - self.download_update() - elif self.action == 'CHECK_INVOICE_STATUS': - self.check_invoice_status() - - def check_invoice_status(self): - try: - invoice = InvoiceController.get(self.profile_data['billing_code']) - if invoice: - status = invoice.status - if status == "expired": - self.invoice_finished.emit(False) - else: - self.invoice_finished.emit(True) - else: - self.invoice_finished.emit(False) - except Exception as e: - print(f"Error retrieving invoice: {str(e)}") - self.invoice_finished.emit(False) - - def download_update(self): - self.text_output.emit("Starting update process...") - ClientController.update(client_observer=client_observer) - client_observer.subscribe('update_progressing', lambda event: self.text_output.emit( - f"Downloading: {event.meta.get('progress'):.1f}%")) - client_observer.subscribe( - 'updated', lambda event: self.text_output.emit("Update process completed")) - - def check_for_update(self): - self.text_output.emit("Checking for updates...") - ClientController.sync(client_observer=client_observer, - connection_observer=connection_observer) - update_available = ClientController.can_be_updated() - if update_available: - self.text_output.emit("An update is available. Downloading...") - self.finished.emit(True) - else: - self.text_output.emit("No updates available.") - self.finished.emit(False) - - def install_package(self): - try: - self.text_output.emit(f"Installing {self.package_name}...") - subprocess.run(shlex.split(self.package_command), check=True) - self.text_output.emit(f"{self.package_name} installed!") - self.finished.emit(True) - except subprocess.CalledProcessError: - self.text_output.emit("Installation failed") - self.finished.emit(False) - except Exception as e: - self.text_output.emit( - f"An error occurred when installing {self.package_name}: {e}") - self.finished.emit(False) - - def disable_all_profiles(self): - try: - for profile_id in self.profile_data: - profile = ProfileController.get(int(profile_id)) - if isinstance(profile, SessionProfile): - ProfileController.disable( - profile, ignore=True, profile_observer=profile_observer) - for profile_id in self.profile_data: - profile = ProfileController.get(int(profile_id)) - if isinstance(profile, SystemProfile): - ProfileController.disable( - profile, ignore=True, profile_observer=profile_observer) - self.text_output.emit("All profiles were successfully disabled") - except Exception: - self.text_output.emit("An error occurred when disabling profile") - finally: - self.finished.emit(True) - - def destroy_profile(self): - profile_id = int(self.profile_data['id']) - profile = ProfileController.get(profile_id) - - if profile is not None: - ProfileController.destroy(profile) - self.text_output.emit(f'Profile {profile_id} deleted') - else: - self.text_output.emit(f'Profile {profile_id} does not exist') - - def list_profiles(self): - profiles = ProfileController.get_all() - self.profiles_output.emit(profiles) - - def create_profile(self, profile_type): - location = LocationController.get( - self.profile_data['country_code'], self.profile_data['code']) - if location is None: - self.text_output.emit( - f"Invalid location code: {self.profile_data['location_code']}") - return - - profile_id = int( - self.profile_data['id']) if self.profile_data['id'] else None - name = self.profile_data['name'] - connection_type = self.profile_data['connection_type'] - - if profile_type == "session": - - application_details = self.profile_data['application'].split( - ':', 1) - application_version = ApplicationVersionController.get( - application_details[0], application_details[1] if len(application_details) > 1 else None) - if application_version is None: - self.text_output.emit( - f"Invalid application: {self.profile_data['application']}") - return - - mask_connection = True if connection_type == 'tor' or connection_type == 'system' else False - resolution = self.profile_data['resolution'] - connection = SessionConnection(connection_type, mask_connection) - profile = SessionProfile( - profile_id, name, None, location, resolution, application_version, connection) - elif profile_type == "system": - connection = SystemConnection(connection_type) - profile = SystemProfile( - profile_id, name, None, location, connection) - - else: - self.text_output.emit(f"Invalid profile type: {profile_type}") - return - try: - ProfileController.create( - profile, profile_observer=profile_observer) - except Exception as e: - self.text_output.emit( - f"An error occurred when creating profile {profile.id}") - - self.text_output.emit( - f"{profile_type.capitalize()} Profile created with ID: {profile.id}") - - def disable_profile(self): - try: - profile = ProfileController.get(int(self.profile_data['id'])) - if profile: - ProfileController.disable( - profile, profile_observer=profile_observer) - else: - self.text_output.emit( - f"No profile found with ID: {self.profile_data['id']}") - except Exception as e: - self.text_output.emit("An error occurred when disabling profile") - finally: - self.finished.emit(True) - - def sync(self): - try: - if self.action == 'SYNC_TOR': - ConfigurationController.set_connection('tor') - else: - ConfigurationController.set_connection('system') - self.check_for_update() - locations = LocationController.get_all() - browser = ApplicationVersionController.get_all() - all_browser_versions = [ - f"{browser.application_code}:{browser.version_number}" for browser in browser if browser.supported] - all_location_codes = [ - f"{location.country_code}_{location.code}" for location in locations] - self.sync_output.emit( - all_location_codes, all_browser_versions, True, False, locations, browser) - except Exception as e: - print(f'the error is: {e}') - self.sync_output.emit([], [], False, False, [], []) - - def get_connection(self): - connection = ConfigurationController.get_connection() - self.text_output.emit(f"Current connection: {connection}") - - def set_connection(self): - ConfigurationController.set_connection( - self.profile_data['connection_type']) - self.text_output.emit( - f"Connection set to '{self.profile_data['connection_type']}'") - - def get_subscription(self): - try: - invoice_observer.subscribe('retrieved', lambda event: self.handle_event( - event, self.profile_data['currency'])) - invoice_observer.subscribe('processing', lambda event: self.text_output.emit( - 'A payment has been detected and is being verified...')) - invoice_observer.subscribe('settled', lambda event: self.text_output.emit( - 'The payment has been successfully verified.')) - - profile = ProfileController.get(int(self.profile_data['id'])) - subscription_plan = SubscriptionPlanController.get( - profile.connection, self.profile_data['duration']) - if subscription_plan is None: - self.text_output.emit( - 'No compatible subscription plan was found.') - return - potential_subscription = SubscriptionController.create( - subscription_plan, profile, connection_observer=connection_observer) - if potential_subscription is not None: - ProfileController.attach_subscription( - profile, potential_subscription) - else: - self.text_output.emit( - 'The subscription could not be created. Try again later.') - return - - subscription = InvoiceController.handle_payment( - potential_subscription.billing_code, invoice_observer=invoice_observer, connection_observer=connection_observer) - if subscription is not None: - ProfileController.attach_subscription(profile, subscription) - self.text_output.emit( - 'Successfully activated the subscription') - self.invoice_finished.emit(True) - else: - self.text_output.emit( - 'The subscription could not be activated. Try again later.') - self.invoice_finished.emit(False) - - except Exception as e: - self.text_output.emit('An unknown error occurred') - self.invoice_finished.emit(False) - - def handle_connection_events(self, event): - self.text_output.emit(f'Profile disabled') - - def handle_event(self, event, currency=None): - invoice = event.subject - if isinstance(invoice, object): - self.invoice_output.emit(invoice, '') - self.text_output.emit("Invoice generated. Awaiting payment...") - else: - self.text_output.emit("Invalid invoice data received.") - - -class CustomWindow(QMainWindow): - def __init__(self): - super().__init__() - sys.excepthook = self._handle_exception - self.setWindowFlags( - Qt.WindowType.Window - ) - - current_dir = os.path.dirname(os.path.abspath(__file__)) - font_path = os.path.join(current_dir, 'resources', 'fonts') - - retro_gaming_path = os.path.join(font_path, 'retro-gaming.ttf') - font_id = QFontDatabase.addApplicationFont(retro_gaming_path) - font_family = QFontDatabase.applicationFontFamilies(font_id)[0] - app_font = QFont(font_family) - app_font.setPointSize(10) - QApplication.setFont(app_font) - - self.open_sans_family = None - open_sans_path = os.path.join(font_path, 'open-sans.ttf') - if os.path.exists(open_sans_path): - open_sans_id = QFontDatabase.addApplicationFont(open_sans_path) - if open_sans_id != -1: - self.open_sans_family = QFontDatabase.applicationFontFamilies(open_sans_id)[ - 0] - - self.setAttribute(Qt.WidgetAttribute.WA_NoSystemBackground) - self.setWindowTitle('HydraVeil') - - screen = QApplication.primaryScreen() - - ratio = screen.devicePixelRatio() - self.host_screen_width = int(screen.size().width() * ratio) - self.host_screen_height = int(screen.size().height() * ratio) - - self._data = {"Profile_1": {}} - - self.gui_config_home = os.path.join(Constants.HV_CONFIG_HOME, 'gui') - self.gui_config_file = os.path.join( - self.gui_config_home, 'config.json') - - self.gui_cache_home = os.path.join(Constants.HV_CACHE_HOME, 'gui') - self.gui_log_file = os.path.join(self.gui_cache_home, 'gui.log') - - self._setup_gui_directory() - - current_dir = os.path.dirname(os.path.abspath(__file__)) - - self.btn_path = os.getenv('BTN_PATH', os.path.join( - current_dir, 'resources', 'images')) - self.css_path = os.getenv('CSS_PATH', os.path.join( - current_dir, 'resources', 'styles')) - - self.is_downloading = False - self.current_profile_id = None - self.connection_manager = ConnectionManager() - - current_connection = None - self.is_tor_mode = current_connection == 'tor' - - self.is_animating = False - self.animation_step = 0 - self.page_history = [] - self.log_path = None - - profile_observer.subscribe( - 'created', lambda event: self.update_status('Profile Created')) - profile_observer.subscribe( - 'destroyed', lambda event: self.update_status('Profile destroyed')) - - client_observer.subscribe( - 'synchronizing', lambda event: self.update_status('Sync in progress...')) - client_observer.subscribe( - 'synchronized', lambda event: self.update_status('Sync complete')) - - client_observer.subscribe( - 'updating', lambda event: self.update_status('Updating client...')) - client_observer.subscribe('update_progressing', lambda event: self.update_status( - f'Current progress: {event.meta.get('progress'):.2f}%')) - client_observer.subscribe('updated', lambda event: self.update_status( - 'Restart client to apply update.')) - - application_version_observer.subscribe('downloading', lambda event: self.update_status( - f'Downloading {ApplicationController.get(event.subject.application_code).name}')) - application_version_observer.subscribe('download_progressing', lambda event: self.update_status( - f'Downloading {ApplicationController.get(event.subject.application_code).name} {event.meta.get('progress'):.2f}%')) - application_version_observer.subscribe('downloaded', lambda event: self.update_status( - f'Downloaded {ApplicationController.get(event.subject.application_code).name}')) - - connection_observer.subscribe('connecting', lambda event: self.update_status( - f'[{event.subject.get("attempt_count")}/{event.subject.get("maximum_number_of_attempts")}] Performing connection attempt...')) - - connection_observer.subscribe('tor_bootstrapping', lambda event: self.update_status( - 'Establishing Tor connection...')) - - connection_observer.subscribe('tor_bootstrap_progressing', lambda event: self.update_status( - f'Bootstrapping Tor {event.meta.get('progress'):.2f}%')) - - connection_observer.subscribe( - 'tor_bootstrapped', lambda event: self.update_status('Tor connection established.')) - - self.setFixedSize(800, 570) - self.central_widget = QWidget(self) - self.central_widget.setMaximumSize(800, 600) - self.central_widget.setGeometry(0, 0, 850, 600) - self.central_widget.setObjectName("centralwidget") - - # Creamos el QLabel para mostrar la imagen - self.label = QLabel(self.central_widget) - self.label.setGeometry(0, 0, 800, 570) - css_file = os.path.join(self.css_path, 'look.css') - # Opcional: si deseas cargar estilos CSS desde un archivo - self.setStyleSheet(open(css_file).read() - if os.path.exists(css_file) else '') - - self.status_label = QLabel(self) - self.status_label.setGeometry(15, 518, 780, 20) - self.status_label.setAlignment( - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) - self.status_label.setStyleSheet( - "color: rgb(0, 255, 255); font-size: 16px;") - self.status_label.setText( - f"Status: Client version {Constants.HV_CLIENT_VERSION_NUMBER}") - - self.text_start_x = 15 - self.text_end_x = 420 - self.text_width = self.text_end_x - self.text_start_x - - self.marquee_text = "" - self.marquee_position = 0 - self.marquee_timer = QTimer(self) - self.marquee_timer.timeout.connect(self.update_marquee) - self.marquee_enabled = False - self.scroll_speed = 1 - - self.tor_text = QLabel("Billing & Browsers", self) - self.tor_text.setGeometry(532, 541, 150, 20) - self.tor_text.setStyleSheet(""" - QLabel { - color: cyan; - font-size: 11px; - font-weight: bold; - } - """) - self.update_image() - - self.set_scroll_speed(7) - - self.toggle_button = QPushButton(self) - self.toggle_button.setGeometry(670, 541, 50, 22) - self.toggle_button.setCheckable(True) - self.toggle_button.clicked.connect(self.toggle_mode) - - self.tor_icon = QLabel(self) - self.tor_icon.setGeometry(730, 537, 25, 25) - self.set_tor_icon() - - self.create_toggle(self.is_tor_mode) - self.animation_timer = QTimer() - self.animation_timer.timeout.connect(self.animate_toggle) - self.check_logging() - - self.sync_button = QPushButton(self) - self.sync_button.setGeometry(771, 541, 22, 22) - self.sync_button.setObjectName('sync_button') - - if CustomWindow.should_be_synchronized(): - sync_icon = QtGui.QIcon(os.path.join( - self.btn_path, 'icon_sync_urgent.png')) - else: - sync_icon = QtGui.QIcon(os.path.join( - self.btn_path, 'icon_sync.png')) - - self.sync_button.setToolTip('Sync') - self.sync_button.setIcon(sync_icon) - self.sync_button.setIconSize(self.sync_button.size()) - self.sync_button.clicked.connect(self.sync) - - self.show() - self.init_ui() - - self.tray = None - self.init_system_tray(self.btn_path) - - current_connection = self.get_current_connection() - self.is_tor_mode = current_connection == 'tor' - self.set_toggle_state(self.is_tor_mode) - - def perform_update_check(self): - - update_available = ClientController.can_be_updated() - - if update_available: - menu_page = self.page_stack.findChild(MenuPage) - menu_page.on_update_check_finished() - - def update_values(self, available_locations, available_browsers, status, is_tor, locations, all_browsers): - sync_screen = self.page_stack.findChild(SyncScreen) - if status: - sync_screen.update_after_sync( - available_locations, available_browsers, locations, all_browsers) - menu_page = self.page_stack.findChild(MenuPage) - if menu_page and hasattr(menu_page, 'buttons'): - for button in menu_page.buttons: - parent = button.parent() - if parent: - verification_icons = parent.findChildren(QPushButton) - for icon in verification_icons: - if icon.geometry().width() == 20 and icon.geometry().height() == 20: - icon.setEnabled(True) - else: - self.update_status('Sync failed. Please try again later.') - - def sync(self): - if ConfigurationController.get_connection() == 'tor': - self.worker_thread = WorkerThread('SYNC_TOR') - else: - self.worker_thread = WorkerThread('SYNC') - self.sync_button.setIcon(QtGui.QIcon( - os.path.join(self.btn_path, 'icon_sync.png'))) - self.worker_thread.finished.connect( - lambda: self.perform_update_check()) - self.worker_thread.sync_output.connect(self.update_values) - self.worker_thread.start() - - def _handle_exception(self, identifier, message, trace): - if issubclass(identifier, UnknownConnectionTypeError): - self.setup_popup() - os.execv(sys.executable, [sys.executable] + sys.argv) - - else: - - config = self._load_gui_config() - - if config and config["logging"]["gui_logging_enabled"] == True: - - logging.error( - f"Uncaught exception:\n" - f"Type: {identifier.__name__}\n" - f"Value: {str(message)}\n" - f"Traceback:\n{''.join(traceback.format_tb(trace))}" - ) - - sys.__excepthook__(identifier, message, trace) - - def get_current_connection(self): - return ConfigurationController.get_connection() - - def setup_popup(self): - connection_dialog = QDialog(self) - connection_dialog.setWindowTitle("Connection Type") - connection_dialog.setWindowFlags(Qt.WindowType.Dialog | Qt.WindowType.WindowStaysOnTopHint | - Qt.WindowType.CustomizeWindowHint | Qt.WindowType.WindowTitleHint) - connection_dialog.setModal(True) - connection_dialog.setFixedSize(400, 200) - - layout = QVBoxLayout(connection_dialog) - - label = QLabel( - "Please set your preference for connecting to Simplified Privacy's billing server.") - label.setWordWrap(True) - label.setAlignment(Qt.AlignmentFlag.AlignCenter) - label.setStyleSheet( - "font-size: 12px; margin-bottom: 20px; color: black;") - - button_layout = QHBoxLayout() - - regular_btn = QPushButton("Regular") - tor_btn = QPushButton("Tor") - - button_style = """ - QPushButton { - background-color: #2b2b2b; - color: white; - border: none; - padding: 10px 20px; - border-radius: 5px; - font-size: 12px; - } - QPushButton:hover { - background-color: #3b3b3b; - } - QPushButton:pressed { - background-color: #1b1b1b; - } - """ - regular_btn.setStyleSheet(button_style) - tor_btn.setStyleSheet(button_style) - - button_layout.addWidget(regular_btn) - button_layout.addWidget(tor_btn) - - layout.addWidget(label) - layout.addLayout(button_layout) - - def set_regular_connection(): - ConfigurationController.set_connection('system') - self.is_tor_mode = False - self.set_toggle_state(False) - connection_dialog.accept() - - def set_tor_connection(): - ConfigurationController.set_connection('tor') - self.is_tor_mode = True - self.set_toggle_state(True) - connection_dialog.accept() - - regular_btn.clicked.connect(set_regular_connection) - tor_btn.clicked.connect(set_tor_connection) - - connection_dialog.exec() - - return ConfigurationController.get_connection() - - def _setup_gui_directory(self): - os.makedirs(self.gui_cache_home, exist_ok=True) - os.makedirs(self.gui_config_home, exist_ok=True) - - if not os.path.exists(self.gui_config_file): - default_config = { - "logging": { - "gui_logging_enabled": False, - "log_level": "INFO" - } - } - with open(self.gui_config_file, 'w') as f: - json.dump(default_config, f, indent=4) - - def _load_gui_config(self): - try: - with open(self.gui_config_file, 'r') as f: - return json.load(f) - except FileNotFoundError: - return None - except json.JSONDecodeError: - logging.error("Invalid GUI config file format") - return None - - def _save_gui_config(self, config): - with open(self.gui_config_file, 'w') as f: - json.dump(config, f, indent=4) - - def check_logging(self): - config = self._load_gui_config() - if config is None: - return - - if config["logging"]["gui_logging_enabled"]: - self._setup_gui_logging() - - def has_shown_systemwide_prompt(self): - config = self._load_gui_config() - if not config: - return False - return config.get("systemwide", {}).get("prompt_shown", False) - - def mark_systemwide_prompt_shown(self): - config = self._load_gui_config() - if config is None: - config = {"logging": { - "gui_logging_enabled": False, "log_level": "INFO"}} - if "systemwide" not in config: - config["systemwide"] = {} - config["systemwide"]["prompt_shown"] = True - self._save_gui_config(config) - - def stop_gui_logging(self): - if os.path.exists(self.gui_log_file): - os.remove(self.gui_log_file) - - config = self._load_gui_config() - if config: - config["logging"]["gui_logging_enabled"] = False - self._save_gui_config(config) - - def _setup_gui_logging(self): - os.makedirs(self.gui_cache_home, exist_ok=True) - - formatter = logging.Formatter( - '%(asctime)s - %(levelname)s - %(message)s', - datefmt='%Y-%m-%d %H:%M:%S' - ) - - file_handler = logging.FileHandler(self.gui_log_file) - file_handler.setLevel(logging.INFO) - file_handler.setFormatter(formatter) - - logger = logging.getLogger() - logger.setLevel(logging.INFO) - logger.handlers = [] - logger.addHandler(file_handler) - - if not os.path.exists(self.gui_log_file) or os.path.getsize(self.gui_log_file) == 0: - logging.info("GUI logging system initialized") - - def set_tor_icon(self): - if self.is_tor_mode: - icon_path = os.path.join(self.btn_path, "toricon_mini.png") - - else: - icon_path = os.path.join(self.btn_path, "toricon_mini_false.png") - pixmap = QPixmap(icon_path) - self.tor_icon.setPixmap(pixmap) - self.tor_icon.setScaledContents(True) - - def create_toggle(self, is_tor_mode): - handle_x = 30 if is_tor_mode else 3 - colors = self._get_toggle_colors(is_tor_mode) - - if not hasattr(self, 'animation_timer'): - self.animation_timer = QTimer() - self.animation_timer.timeout.connect(self.animate_toggle) - - self.toggle_bg = QLabel(self.toggle_button) - self.toggle_bg.setGeometry(0, 0, 50, 22) - - # Create handle - self.toggle_handle = QLabel(self.toggle_button) - self.toggle_handle.setGeometry(handle_x, 3, 16, 16) - self.toggle_handle.setStyleSheet(""" - QLabel { - background-color: white; - border-radius: 8px; - } - """) - - self.on_label = QLabel("ON", self.toggle_button) - self.on_label.setGeometry(8, 4, 15, 14) - - self.off_label = QLabel("OFF", self.toggle_button) - self.off_label.setGeometry(25, 4, 40, 14) - - self._update_toggle_colors(colors) - if is_tor_mode: - self.set_tor_icon() - - def _get_toggle_colors(self, is_tor_mode): - return { - 'bg': "#00a8ff" if is_tor_mode else "#2c3e50", - 'tor': "white" if is_tor_mode else "transparent", - 'sys': "transparent" if is_tor_mode else "white" - } - - def _update_toggle_colors(self, colors): - self.toggle_bg.setStyleSheet(f""" - QLabel {{ - background-color: {colors['bg']}; - border-radius: 11px; - }} - """) - - self.on_label.setStyleSheet(f""" - QLabel {{ - color: {colors['tor']}; - font-size: 9px; - font-weight: bold; - }} - """) - - self.off_label.setStyleSheet(f""" - QLabel {{ - color: {colors['sys']}; - font-size: 9px; - font-weight: bold; - }} - """) - - def set_toggle_state(self, is_tor_mode): - self.is_tor_mode = is_tor_mode - handle_x = 30 if is_tor_mode else 3 - self.toggle_handle.setGeometry(handle_x, 3, 16, 16) - self._update_toggle_colors(self._get_toggle_colors(is_tor_mode)) - self.set_tor_icon() - - def toggle_mode(self): - if not self.is_animating: - self.is_animating = True - self.animation_step = 0 - self.animation_timer.start(16) - self.is_tor_mode = not self.is_tor_mode - ConfigurationController.set_connection( - 'tor' if self.is_tor_mode else 'system') - - def animate_toggle(self): - TOTAL_STEPS = 5 - if self.animation_step <= TOTAL_STEPS: - progress = self.animation_step / TOTAL_STEPS - - if self.is_tor_mode: - new_x = 20 + (10 * progress) - start_color = "#2c3e50" - end_color = "#00a8ff" - else: - new_x = 31 - (28 * progress) - start_color = "#00a8ff" - end_color = "#2c3e50" - - self.toggle_handle.setGeometry(int(new_x), 3, 16, 16) - - bg_color = self.interpolate_color(start_color, end_color, progress) - self.toggle_bg.setStyleSheet(f""" - QLabel {{ - background-color: {bg_color}; - border-radius: 11px; - }} - """) - - self.off_label.setStyleSheet(f""" - QLabel {{ - color: rgba(255, 255, 255, {1 - progress if self.is_tor_mode else progress}); - font-size: 9px; - font-weight: bold; - }} - """) - self.on_label.setStyleSheet(f""" - QLabel {{ - color: rgba(255, 255, 255, {progress if self.is_tor_mode else 1 - progress}); - font-size: 9px; - font-weight: bold; - }} - """) - - self.animation_step += 1 - else: - self.animation_timer.stop() - self.is_animating = False - self.set_tor_icon() - - def interpolate_color(self, start_color, end_color, progress): - def hex_to_rgb(hex_color): - hex_color = hex_color.lstrip('#') - return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) - - start_rgb = hex_to_rgb(start_color) - end_rgb = hex_to_rgb(end_color) - - current_rgb = tuple( - int(start_rgb[i] + (end_rgb[i] - start_rgb[i]) * progress) - for i in range(3) - ) - - return f"rgb{current_rgb}" - - def init_system_tray(self, icon_base_path): - if QSystemTrayIcon.isSystemTrayAvailable(): - tray_icon = QIcon() - window_icon = QIcon() - - tray_sizes = [22, 24] - for size in tray_sizes: - icon_path = os.path.join( - icon_base_path, f"hv-icon-{size}x{size}.png") - if os.path.exists(icon_path): - tray_icon.addFile(icon_path, QSize(size, size)) - - window_sizes = [32, 48, 64, 128] - for size in window_sizes: - icon_path = os.path.join( - icon_base_path, f"hv-icon-{size}x{size}.png") - if os.path.exists(icon_path): - window_icon.addFile(icon_path, QSize(size, size)) - - self.tray = QSystemTrayIcon(self) - self.tray.setToolTip('HydraVeil') - self.tray.setIcon(tray_icon) - self.tray.setVisible(True) - self.setWindowIcon(window_icon) - - def closeEvent(self, event=None): - connected_profiles = self.connection_manager.get_connected_profiles() - if connected_profiles: - self._show_disconnect_confirmation(connected_profiles, event) - else: - pass - - def _show_disconnect_confirmation(self, connected_profiles, event=None, button_text='Exit', message=None): - if event is not None: - event.ignore() - message = self._create_disconnect_message(connected_profiles) - - self.popup = self._create_confirmation_popup(message, button_text) - self.popup.finished.connect(lambda result: self._handle_popup_result( - result, connected_profiles, event)) - self.popup.show() - - def _create_disconnect_message(self, connected_profiles): - profile_numbers = ', '.join(str(profile_id) - for profile_id in connected_profiles) - is_are = "is" if len(connected_profiles) == 1 else "are" - return f'Profile{"" if len(connected_profiles) == 1 else "s"} {profile_numbers} {is_are} still connected.\nAll connected profiles will be disconnected on exit. \nDo you want to proceed?' - - def _create_confirmation_popup(self, message, button_text): - popup = ConfirmationPopup( - self, message=message, action_button_text=button_text, cancel_button_text="Cancel") - popup.setWindowModality(Qt.WindowModality.ApplicationModal) - return popup - - def _handle_popup_result(self, result, connected_profiles, event): - if result: - if event is None: - self._disable_profiles(connected_profiles, exit=False) - return - self._disable_profiles(connected_profiles) - else: - event.ignore() - - def _disable_profiles(self, connected_profiles, exit=True): - self.update_status('Disabling profiles...') - self.worker_thread = WorkerThread( - 'DISABLE_ALL_PROFILES', profile_data=connected_profiles) - self.worker_thread.text_output.connect( - lambda text: self._on_disable_status(text, exit)) - self.worker_thread.start() - - def _on_disable_status(self, text, exit): - if exit: - self.update_status('All profiles diabled. Bye!') - QApplication.instance().quit() - else: - self.update_status(text) - self.update_image() - - def _perform_cleanup_and_close(self, event): - self.cleanup() - super().closeEvent(event) - - def update_image(self, appearance_value="original"): - image_path = os.path.join(self.btn_path, f"{appearance_value}.png") - - # Configuramos la imagen en el QLabel - pixmap = QPixmap(image_path) - self.label.setPixmap(pixmap) - self.label.setScaledContents(True) - - def init_ui(self): - # Configuración del diseño de la ventana principal - layout = QVBoxLayout(self.central_widget) - self.page_stack = QStackedWidget() - layout.addWidget(self.page_stack) - self.menu_page = MenuPage(self.page_stack, self) - self.editor_page = EditorPage(self.page_stack, self) - self.pages = [MenuPage(self.page_stack, self), - ProtocolPage(self.page_stack, self), - WireGuardPage(self.page_stack, self), - HidetorPage(self.page_stack, self), - LocationPage(self.page_stack, self), - BrowserPage(self.page_stack, self), - ScreenPage(self.page_stack, self), - ResumePage(self.page_stack, self), - ResidentialPage(self.page_stack, self), - InstallSystemPackage(self.page_stack, self), - WelcomePage(self.page_stack, self), - # SystemwidePromptPage(self.page_stack, self), - PolicySuggestionPage( - self.page_stack, self, None, 'capability'), - PolicySuggestionPage( - self.page_stack, self, None, 'privilege'), - PaymentDetailsPage(self.page_stack, self), - DurationSelectionPage(self.page_stack, self), - CurrencySelectionPage(self.page_stack, self), - PaymentConfirmed(self.page_stack, self), - IdPage(self.page_stack, self), - TorPage(self.page_stack, self), - EditorPage(self.page_stack, self), - FastModePromptPage(self.page_stack, self), - FastRegistrationPage(self.page_stack, self), - Settings(self.page_stack, self), - ConnectionPage(self.page_stack, self), - SyncScreen(self.page_stack, self)] - for page in self.pages: - self.page_stack.addWidget(page) - # Conectar la señal currentChanged al método page_changed - self.page_stack.currentChanged.connect(self.page_changed) - - if self.check_first_launch(): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(WelcomePage))) - else: - self.check_suggestible_policies() - - def read_data(self): - return self._data["Profile_1"] - - def write_data(self, data): - self._data["Profile_1"].update(data) - - def clear_data(self): - self._data = {"Profile_1": {}} - - def update_status(self, text, clear=False): - if text is None: - self.status_label.setText('Status:') - self.disable_marquee() - return - - if clear: - self.status_label.setText('') - return - - full_text = f'Status: {text}' - self.status_label.setText(full_text) - self.disable_marquee() - - def check_first_launch(self): - config = self._load_gui_config() - if config is None: - config = {"logging": { - "gui_logging_enabled": False, "log_level": "INFO"}} - - is_first_launch = not config.get( - "first_launch", {}).get("completed", False) - - if is_first_launch: - if "first_launch" not in config: - config["first_launch"] = {} - config["first_launch"]["completed"] = True - self._save_gui_config(config) - return True - else: - return False - - def check_suggestible_policies(self): - try: - - capability_policy = PolicyController.get('capability') - - if capability_policy is not None: - if PolicyController.is_suggestible(capability_policy) and not PolicyController.is_instated(capability_policy): - capability_page = None - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, PolicySuggestionPage) and page.policy_type == 'capability': - capability_page = page - break - if capability_page: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(capability_page)) - return - - except Exception as e: - print(f"Error checking suggestible policies: {e}") - - def has_shown_fast_mode_prompt(self): - config = self._load_gui_config() - if not config: - return False - return config.get("fast_mode", {}).get("prompt_shown", False) - - def mark_fast_mode_prompt_shown(self): - config = self._load_gui_config() - if config is None: - config = {"logging": { - "gui_logging_enabled": False, "log_level": "INFO"}} - if "fast_mode" not in config: - config["fast_mode"] = {} - config["fast_mode"]["prompt_shown"] = True - self._save_gui_config(config) - - def set_fast_mode_enabled(self, enabled): - config = self._load_gui_config() - if config is None: - config = {"logging": { - "gui_logging_enabled": False, "log_level": "INFO"}} - if "registrations" not in config: - config["registrations"] = {} - config["registrations"]["fast_registration_enabled"] = bool(enabled) - self._save_gui_config(config) - - def navigate_after_profile_created(self): - if not self.has_shown_fast_mode_prompt(): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(FastModePromptPage))) - else: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def enable_marquee(self, text): - self.marquee_text = text + " " - self.marquee_position = 0 - self.marquee_enabled = True - self.marquee_timer.start(500) - - def disable_marquee(self): - self.marquee_enabled = False - self.marquee_timer.stop() - - def update_marquee(self): - if not self.marquee_enabled: - return - - metrics = self.status_label.fontMetrics() - text_width = metrics.horizontalAdvance(self.marquee_text) - - self.marquee_position += self.scroll_speed - if self.marquee_position >= text_width: - self.marquee_position = 0 - - looped_text = self.marquee_text * 2 - - chars_that_fit = metrics.horizontalAdvance( - looped_text[:self.text_width]) - - visible_text = looped_text[self.marquee_position: - self.marquee_position + chars_that_fit] - - while metrics.horizontalAdvance(visible_text) < self.text_width: - visible_text += self.marquee_text - - while metrics.horizontalAdvance(visible_text) > self.text_width: - visible_text = visible_text[:-1] - - display_text = 'Status: ' + ' ' * \ - (self.text_start_x - metrics.horizontalAdvance('Status: ')) - display_text += visible_text - - self.status_label.setText(display_text) - - def set_scroll_speed(self, speed): - self.scroll_speed = speed - - @staticmethod - def should_be_synchronized(): - - current_datetime = datetime.today().astimezone(timezone.utc) - last_synced_at = ConfigurationController.get_last_synced_at() - - return last_synced_at is None or (current_datetime - last_synced_at) >= timedelta(days=30) - - def page_changed(self, index): - - if CustomWindow.should_be_synchronized(): - sync_icon = QtGui.QIcon(os.path.join( - self.btn_path, 'icon_sync_urgent.png')) - else: - sync_icon = QtGui.QIcon(os.path.join( - self.btn_path, 'icon_sync.png')) - - self.sync_button.setIcon(sync_icon) - - current_page = self.page_stack.widget(index) - if self.page_history: - previous_page = self.page_history[-1] - else: - previous_page = None - - if isinstance(current_page, MenuPage): - self.update_status(None) - if isinstance(previous_page, (ResumePage, EditorPage, Settings, FastRegistrationPage, FastModePromptPage)): - current_page.eliminacion() - - else: - pass - elif isinstance(current_page, ResumePage): - self.update_status('Choose a name for your profile') - current_page.eliminacion() - - elif isinstance(current_page, IdPage): - pass - elif isinstance(current_page, LocationPage): - self.update_status(None, clear=True) - elif isinstance(current_page, InstallSystemPackage): - self.update_status('Please check package availability.') - else: - self.update_status(None) - - if isinstance(current_page, MenuPage): - self.sync_button.setVisible(True) - self.tor_text.setVisible(True) - self.toggle_button.setGeometry(670, 541, 50, 22) - self.tor_icon.setGeometry(730, 537, 25, 25) - else: - self.sync_button.setVisible(False) - self.tor_text.setVisible(False) - self.toggle_button.setGeometry(540, 541, 50, 22) - self.tor_icon.setGeometry(600, 537, 25, 25) - - if current_page != previous_page: - self.page_history.append(current_page) - self.page_history = self.page_history[-5:] - - if isinstance(current_page, EditorPage): - if not self.connection_manager.is_synced(): - self.update_status('Not synchronized.') - - self.show() - - -class Page(QWidget): - - def __init__(self, name, page_stack, custom_window, parent=None): - super().__init__(parent) - self.custom_window = custom_window - self.btn_path = custom_window.btn_path - self.name = name - self.page_stack = page_stack - self.init_ui() - self.selected_profiles = [] - self.selected_wireguard = [] # Lista para almacenar perfiles seleccionados - self.selected_residential = [] - self.buttons = [] - - def add_selected_profile(self, profile): - self.selected_profiles.clear() - self.selected_wireguard.clear() - self.selected_residential.clear() - self.selected_profiles.append(profile) - # self.selected_wireguard.append(wireguard) - # self.selected_residential.append(residential) - - def init_ui(self): - self.title = QLabel(self) - self.title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.title.setObjectName("titles") - - self.display = QLabel(self) - self.display.setObjectName("display") - self.display.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - # self.display.setStyleSheet("background-color: yellow;") - buttons_info = [ - (QPushButton, "button_back", "back", (660, 525, 48, 35)), - (QPushButton, "button_next", "next", (720, 525, 48, 35)), - (QPushButton, "button_reverse", "back", (660, 525, 48, 35)), - (QPushButton, "button_go", "next", (720, 525, 48, 35)), - (QPushButton, "button_apply", "apply", (720, 525, 48, 35)), - ] - for button_type, object_name, icon_name, geometry in buttons_info: - button = button_type(self) - button.setObjectName(object_name) - button.setGeometry(*geometry) - button.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}.png"))) - button.setIconSize(QtCore.QSize(48, 35)) - button.setVisible(False) # Ocultar el botón inicialmente - if object_name == "button_back": - self.button_back = button - self.button_back.clicked.connect(self.gestionar_back) - if object_name == "button_next": - self.button_next = button - self.button_next.clicked.connect(self.gestionar_next) - if object_name == "button_reverse": - self.button_reverse = button - self.button_reverse.clicked.connect(self.limpiar) - - if object_name == "button_go": - self.button_go = button - self.button_go.clicked.connect(self.limpiar) - - if object_name == "button_apply": - self.button_apply = button - - def gestionar_back(self): - current_index = self.page_stack.currentIndex() - if current_index == 18: - return - if current_index > 0: - self.page_stack.setCurrentIndex(current_index - 1) - - def gestionar_next(self): - - current_index = self.page_stack.currentIndex() - next_index = (current_index + 1) % self.page_stack.count() - self.page_stack.setCurrentIndex(next_index) - self.limpiar() - - def limpiar(self): - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_next.setVisible(False) - - -class Worker(QObject): - update_signal = pyqtSignal(str, bool, int, int, str) - change_page = pyqtSignal(str, bool) - - def __init__(self, profile_data): - self.profile_data = profile_data - super().__init__() - profile_observer.subscribe( - 'disabled', lambda event: self.handle_profile_status(event.subject, False)) - profile_observer.subscribe( - 'enabled', lambda event: self.handle_profile_status(event.subject, True)) - self.profile_type = None - - def run(self): - self.profile = ProfileController.get(int(self.profile_data['id'])) - - if 'billing_code' in self.profile_data: - subscription = SubscriptionController.get( - self.profile_data['billing_code'], connection_observer=connection_observer) - if subscription is not None: - ProfileController.attach_subscription( - self.profile, subscription) - else: - self.change_page.emit('The billing code is invalid.', True) - return - if self.profile: - try: - ignore_exceptions = [] - if self.profile_data.get('ignore_endpoint_verification', False): - ignore_exceptions.append(EndpointVerificationError) - if self.profile_data.get('ignore_profile_state_conflict', False): - ignore_exceptions.append(ProfileStateConflictError) - ignore_tuple = tuple(ignore_exceptions) - ProfileController.enable(self.profile, ignore=ignore_tuple, profile_observer=profile_observer, - application_version_observer=application_version_observer, - connection_observer=connection_observer) - except EndpointVerificationError: - self.update_signal.emit( - "ENDPOINT_VERIFICATION_ERROR", False, self.profile_data['id'], None, None) - except (InvalidSubscriptionError, MissingSubscriptionError) as e: - self.change_page.emit( - f"Subscription missing or invalid for profile {self.profile_data['id']}", True) - except ProfileActivationError: - self.update_signal.emit( - "The profile could not be enabled", False, None, None, None) - except UnsupportedApplicationVersionError: - self.update_signal.emit( - "The application version in question is not supported", False, None, None, None) - except FileIntegrityError: - self.update_signal.emit( - "Application version file integrity could not be verified.", False, None, None, None) - except ProfileModificationError: - self.update_signal.emit( - "WireGuard configuration could not be attached.", False, None, None, None) - except ProfileStateConflictError: - self.update_signal.emit( - "PROFILE_STATE_CONFLICT_ERROR", False, self.profile_data['id'], None, None) - except CommandNotFoundError as e: - self.update_signal.emit(str(e.subject), False, -1, None, None) - except Exception as e: - print(e) - self.update_signal.emit( - "An unknown error occurred", False, None, None, None) - - else: - self.update_signal.emit( - f"No profile found with ID: {self.profile_data['id']}", False, None, None, None) - - def handle_profile_status(self, profile, is_enabled): - profile_id = profile.id - profile_connection = str(profile.connection.code) - message = self.generate_profile_message(profile, is_enabled) - - if isinstance(profile, SessionProfile): - self.profile_type = 1 - elif isinstance(profile, SystemProfile): - self.profile_type = 2 - else: - self.profile_type = None - - self.update_signal.emit( - message, is_enabled, profile_id, self.profile_type, profile_connection) - - @staticmethod - def generate_profile_message(profile, is_enabled, idle=False): - - profile_id = profile.id - if not profile.subscription or not profile.subscription.expires_at: - return f"Offline. No subscription found." - - profile_date = profile.subscription.expires_at - status = 'enabled' if is_enabled else 'disabled' - - expiration_date = profile_date.replace(tzinfo=timezone.utc) - - time_left = expiration_date - datetime.now(timezone.utc) - days_left = time_left.days - hours_left, remainder = divmod(time_left.seconds, 3600) - - formatted_expiration = expiration_date.strftime("%Y-%m-%d %H:%M:%S") - - if expiration_date < datetime.now(timezone.utc): - return "Offline. Subscription has expired." - if idle: - return f"Offline. Expires in {days_left} days." - - if is_enabled: - return f"Profile {int(profile_id)} {status}. Expires on {formatted_expiration}. Time left: {days_left} days, {hours_left} hours." - else: - return f"Profile {int(profile_id)} {status}" - - -class MenuPage(Page): - def __init__(self, page_stack=None, main_window=None, parent=None): - super().__init__("Menu", page_stack, main_window, parent) - self.main_window = main_window - self.connection_manager = main_window.connection_manager - self.is_tor_mode = main_window.is_tor_mode - self.is_animating = main_window.is_animating - self.animation_step = main_window.animation_step - self.btn_path = main_window.btn_path - self.page_stack = page_stack - self.profile_info = {} - self.additional_labels = [] - self.update_status = main_window - self.title.setGeometry(400, 40, 380, 30) - self.title.setText("Load Profile") - - self.scroll_area = QScrollArea(self) - self.scroll_area.setGeometry(420, 80, 370, 350) - self.scroll_area.setWidgetResizable(True) - self.scroll_area.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - self.scroll_area.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.scroll_area.setStyleSheet(""" - QScrollArea { - background-color: transparent; - border: none; - } - QScrollBar:vertical { - background-color: rgba(128, 128, 128, 0.3); - width: 12px; - border-radius: 6px; - } - QScrollBar::handle:vertical { - background-color: rgba(0, 255, 255, 0.7); - border-radius: 6px; - min-height: 20px; - } - QScrollBar::handle:vertical:hover { - background-color: rgba(0, 255, 255, 0.9); - } - QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - background-color: transparent; - height: 0px; - } - """) - - self.scroll_widget = QWidget() - self.scroll_widget.setStyleSheet("background-color: transparent;") - self.scroll_area.setWidget(self.scroll_widget) - - self.not_connected_profile = os.path.join( - self.btn_path, "button_profile.png") - self.connected_profile = os.path.join( - self.btn_path, "button_session_profile.png") - self.system_wide_connected_profile = os.path.join( - self.btn_path, "button_system_profile.png") - self.connected_tor_profile = os.path.join( - self.btn_path, "button_session_tor.png") - self.worker = None - self.IsSystem: int = 0 - self.button_states = {} - self.is_system_connected = False - self.profile_button_map = {} - self.font_style = f"font-family: '{main_window.open_sans_family}';" if main_window.open_sans_family else "" - - # self.label.setStyleSheet("background-color: rgba(0, 255, 0, 51);") - # Establecer el color de fondo y el color del texto utilizando hojas de estilo - self.create_interface_elements() - - def showEvent(self, event): - super().showEvent(event) - if hasattr(self, 'buttons'): - for button in self.buttons: - parent = button.parent() - if parent: - verification_icons = parent.findChildren(QPushButton) - for icon in verification_icons: - if icon.geometry().width() == 20 and icon.geometry().height() == 20: - icon.setEnabled( - self.connection_manager.is_synced()) - - def on_update_check_finished(self): - reply = QMessageBox.question(self, 'Update Available', - 'An update is available. Would you like to download it?', - QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) - if reply == QMessageBox.StandardButton.Yes: - self.worker = WorkerThread('DOWNLOAD_UPDATE') - self.worker.start() - else: - self.update_status.update_status('Update canceled') - - def create_interface_elements(self): - for icon_name, function, position in [ - ("create_profile", self.create_prof, (410, 440, 110, 60)), - ("edit_profile", self.edit_prof, (540, 440, 110, 60)), - # ("delete_profile", self.delete_profile, (670, 440, 110, 60)), - ("launch", self.launch, (0, 440, 185, 63)), - ("disconnect", self.disconnect, (200, 433, 185, 73)), - ("disconnect_system_wide", self.disconnect, (200, 433, 185, 73)), - ("just", self.connect, (200, 433, 185, 73)), - ("just_session", self.connect, (200, 433, 185, 73)), - ("settings", self.settings_gui, (670, 440, 110, 60)), - ]: - boton = QPushButton(self) - boton.setGeometry(QtCore.QRect(*position)) - boton.setObjectName("create_edit_settings_buttons") - icon = QtGui.QIcon(os.path.join(self.btn_path, f"{icon_name}.png")) - boton.setIcon(icon) - boton.setIconSize(boton.size()) - boton.clicked.connect(functools.partial(function)) - boton.setEnabled(False) - if icon_name == "disconnect": - boton.setEnabled(True) - boton.setVisible(False) - self.disconnect_button = boton - if icon_name == "launch": - self.boton_launch = boton - self.boton_launch.setVisible(False) - if icon_name == "create_profile": - self.boton_create = boton - self.boton_create.setEnabled(True) - if icon_name == "edit_profile": - self.boton_edit = boton - # if icon_name =="delete_profile": - # self.boton_settings=boton - if icon_name == "just": - boton.setVisible(False) - self.boton_just = boton - self.connect_button = boton - if icon_name == "just_session": - self.boton_just_session = boton - self.connect_button = boton - if icon_name == "disconnect_system_wide": - boton.setEnabled(True) - boton.setVisible(False) - self.disconnect_system_wide_button = boton - if icon_name == "settings": - self.settings_button = boton - self.settings_button.setEnabled(True) - - self.create() - - def delete_profile(self): - self.popup = ConfirmationPopup(self, message="Are you sure you want to\ndelete this profile?", - action_button_text="Delete", cancel_button_text="Cancel") - self.popup.setWindowModality(Qt.WindowModality.ApplicationModal) - self.popup.finished.connect( - lambda result: self.on_popup_finished(result)) - self.popup.show() - - def on_popup_finished(self, result): - if result: - profile_id = self.reverse_id - self.update_status.update_status(f'Deleting profile...') - self.worker_thread = WorkerThread( - 'DESTROY_PROFILE', profile_data={'id': profile_id}) - self.worker_thread.text_output.connect(self.delete_status_update) - self.worker_thread.start() - else: - pass - - def delete_status_update(self, text): - self.update_status.update_status(text) - self.eliminacion() - - def show_disconnect_button(self, toggle, profile_type, target_button): - try: - if target_button.isChecked(): - if profile_type == 1: - self.disconnect_button.setVisible(toggle) - self.boton_just_session.setVisible(not toggle) - else: - self.disconnect_system_wide_button.setVisible(toggle) - self.boton_just.setVisible(not toggle) - except RuntimeError: - pass - - def match_core_profiles(self, profiles_dict): - new_dict = {} - - for idx, profile in profiles_dict.items(): - new_profile = {} - - protocol = profile.connection.code - - location = f'{profile.location.country_code}_{profile.location.code}' - - new_profile['location'] = location - - if protocol == 'wireguard': - new_profile['protocol'] = 'wireguard' - else: - new_profile['protocol'] = 'hidetor' - - connection_type = 'browser-only' if isinstance( - profile, SessionProfile) else 'system-wide' - - if protocol == 'wireguard': - new_profile['connection'] = connection_type - elif protocol == 'tor': - new_profile['connection'] = protocol - else: - new_profile['connection'] = 'just proxy' - - if isinstance(profile, SessionProfile): - browser = profile.application_version.application_code - else: - browser = 'unknown' - if browser != 'unknown': - new_profile['browser'] = browser - new_profile['browser_version'] = profile.application_version.version_number - new_profile['browser_supported'] = profile.application_version.supported - else: - new_profile['browser'] = 'unknown browser' - new_profile['browser_supported'] = False - - resolution = profile.resolution if hasattr( - profile, 'resolution') else 'None' - new_profile['dimentions'] = resolution - - new_profile['name'] = profile.name - - new_dict[f'Profile_{idx}'] = new_profile - - return new_dict - - def create(self): - self.boton_just.setEnabled(False) - self.boton_just_session.setEnabled(False) - self.boton_edit.setEnabled(False) - if hasattr(self, 'verification_button'): - self.verification_button.setEnabled(False) - self.profiles_data = self.match_core_profiles( - ProfileController.get_all()) - - self.number_of_profiles = len(self.profiles_data) - self.profile_info.update(self.profiles_data) - - self.button_group = QButtonGroup(self) - self.buttons = [] - - for profile_name, profile_value in self.profiles_data.items(): - self.create_profile_widget(profile_name, profile_value) - - self.update_scroll_widget_size() - - def refresh_profiles_data(self): - self.profiles_data = self.match_core_profiles( - ProfileController.get_all()) - self.number_of_profiles = len(self.profiles_data) - self.profile_info.update(self.profiles_data) - for profile_name, profile_value in self.profiles_data.items(): - self.create_profile_widget(profile_name, profile_value) - self.update_scroll_widget_size() - - def refresh_menu_buttons(self): - profiles = ProfileController.get_all() - self.button_states.clear() - self.connection_manager._connected_profiles.clear() - self.IsSystem = 0 - for profile_id, profile in profiles.items(): - if ProfileController.is_enabled(profile): - self.connection_manager.add_connected_profile(profile_id) - if isinstance(profile, SessionProfile): - if profile.connection and profile.connection.code == 'tor': - self.button_states[profile_id] = self.connected_tor_profile - else: - self.button_states[profile_id] = self.connected_profile - elif isinstance(profile, SystemProfile): - self.button_states[profile_id] = self.system_wide_connected_profile - self.IsSystem += 1 - - if self.IsSystem > 0: - self.update_status.update_image( - appearance_value='background_connected') - else: - self.update_status.update_image() - - for widget in self.scroll_widget.findChildren(QLabel): - widget.setParent(None) - - for widget in self.scroll_widget.findChildren(QPushButton): - widget.setParent(None) - - self.profile_button_map.clear() - self.button_group = QButtonGroup(self) - self.buttons = [] - - self.create() - - def update_scroll_widget_size(self): - if self.number_of_profiles == 0: - return - - rows = (self.number_of_profiles + 1) // 2 - height = rows * 120 - self.scroll_widget.setFixedSize(370, height) - - def create_profile_widget(self, key, value): - profile_id = int(key.split('_')[1]) - - parent_label = self.create_parent_label(profile_id) - button = self.create_profile_button(parent_label, profile_id, key) - - self.profile_button_map[profile_id] = button - - self.create_profile_name_label(parent_label, value["name"]) - self.create_profile_icons(parent_label, value) - - def create_parent_label(self, profile_id): - parent_label = QLabel(self.scroll_widget) - profile_list = list(self.profiles_data.keys()) - index = profile_list.index(f'Profile_{profile_id}') - row, column = divmod(index, 2) - - parent_label.setGeometry(column * 179, row * 120, 175, 100) - parent_label.setVisible(True) - return parent_label - - def create_profile_button(self, parent_label, profile_id, key): - button = QPushButton(parent_label) - button.setGeometry(0, 0, 175, 60) - button.setStyleSheet(""" - QPushButton { - background-color: transparent; - border: none; - } - QPushButton:hover { - background-color: rgba(200, 200, 200, 50); - } - QPushButton:checked { - background-color: rgba(200, 200, 200, 80); - } - """) - - icon = QIcon(self.button_states.get( - profile_id, self.not_connected_profile)) - button.setIcon(icon) - button.setIconSize(QtCore.QSize(175, 60)) - - button.show() - button.setCheckable(True) - self.button_group.addButton(button) - self.buttons.append(button) - - button.clicked.connect( - lambda checked, pid=profile_id: self.print_profile_details(f"Profile_{pid}")) - - return button - - def create_profile_name_label(self, parent_label, name): - child_label = QLabel(parent_label) - child_label.setGeometry(0, 65, 175, 30) - child_label.setText(name) - child_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - child_label.setAttribute( - Qt.WidgetAttribute.WA_TransparentForMouseEvents) - child_label.show() - - def create_profile_icons(self, parent_label, value): - connection_type = value.get('connection', '') - if connection_type in ['tor', 'just proxy']: - self.create_tor_proxy_icons(parent_label, value, connection_type) - else: - self.create_other_icons(parent_label, value, connection_type) - - def create_tor_proxy_icons(self, parent_label, value, connection_type): - for j, label_name in enumerate(['protocol', 'location', 'browser']): - child_label = QLabel(parent_label) - child_label.setObjectName(f"label_{j}") - child_label.setGeometry(3 + j * 60, 5, 50, 50) - child_label.setObjectName("label_profiles") - child_label.setAttribute( - Qt.WidgetAttribute.WA_TransparentForMouseEvents) - child_label.setStyleSheet( - "background-color: rgba(128, 128, 128, 0.5); border-radius: 25px;") - image_path = self.get_icon_path(label_name, value, connection_type) - pixmap = QPixmap(image_path) - if pixmap.isNull() and label_name == 'location': - fallback_path = os.path.join( - self.btn_path, "default_location_mini.png") - pixmap = QPixmap(fallback_path) - if pixmap.isNull(): - pixmap = QPixmap(50, 50) - pixmap.fill(QtGui.QColor(200, 200, 200)) - if pixmap.isNull() and label_name == 'browser': - fallback_path = os.path.join( - self.btn_path, "default_browser_mini.png") - pixmap = QPixmap(fallback_path) - if pixmap.isNull(): - pixmap = QPixmap(50, 50) - pixmap.fill(QtGui.QColor(200, 200, 200)) - child_label.setPixmap(pixmap) - child_label.show() - - def create_other_icons(self, parent_label, value, connection_type): - for j, label_name in enumerate(['protocol', 'location', 'browser']): - child_label = QLabel(parent_label) - child_label.setObjectName(f"label_{j}") - child_label.setGeometry(3 + j * 60, 5, 50, 50) - child_label.setObjectName("label_profiles") - child_label.setAttribute( - Qt.WidgetAttribute.WA_TransparentForMouseEvents) - child_label.setStyleSheet( - "background-color: rgba(128, 128, 128, 0.5); border-radius: 25px;") - - image_path = self.get_icon_path(label_name, value, connection_type) - pixmap = QPixmap(image_path) - if pixmap.isNull() and label_name == 'location': - fallback_path = os.path.join( - self.btn_path, "default_location_mini.png") - pixmap = QPixmap(fallback_path) - if pixmap.isNull(): - pixmap = QPixmap(50, 50) - pixmap.fill(QtGui.QColor(200, 200, 200)) - if pixmap.isNull() and label_name == 'browser': - fallback_path = os.path.join( - self.btn_path, "default_browser_mini.png") - pixmap = QPixmap(fallback_path) - if pixmap.isNull(): - pixmap = QPixmap(50, 50) - pixmap.fill(QtGui.QColor(200, 200, 200)) - - if label_name == 'browser' and not value.get('browser_supported', True) and value.get('browser') != 'unknown browser': - warning_pixmap = QPixmap( - os.path.join(self.btn_path, 'warning.png')) - painter = QPainter(pixmap) - painter.drawPixmap(pixmap.width() - 22, - pixmap.height() - 21, warning_pixmap) - painter.end() - - child_label.setPixmap(pixmap) - child_label.show() - - def get_icon_path(self, label_name, value, connection_type): - if label_name == 'protocol': - if connection_type == 'tor': - return os.path.join(self.btn_path, "toricon_mini.png") - elif connection_type == 'just proxy': - return os.path.join(self.btn_path, "just proxy_mini.png") - - return os.path.join(self.btn_path, "wireguard_mini.png") - elif label_name == 'browser': - if connection_type == 'system-wide': - return os.path.join(self.btn_path, "wireguard_system_wide.png") - else: - return os.path.join(self.btn_path, f"{value[label_name]} latest_mini.png") - - return os.path.join(self.btn_path, f"icon_mini_{value[label_name]}.png") - - def truncate_key(self, text, max_length=50): - if not text or text == "N/A" or len(text) <= max_length: - return text - start_len = max_length // 2 - 2 - end_len = max_length // 2 - 2 - return text[:start_len] + "....." + text[-end_len:] - - def create_verification_widget(self, profile_obj): - verification_widget = QWidget(self) - verification_widget.setGeometry(0, 90, 400, 300) - verification_widget.setStyleSheet("background: transparent;") - - verification_layout = QVBoxLayout(verification_widget) - verification_layout.setContentsMargins(20, 20, 20, 20) - verification_layout.setSpacing(15) - - operator = None - if profile_obj.location and profile_obj.location.operator: - operator = profile_obj.location.operator - - info_items = [ - ("Operator Name", "operator_name"), - ("Nostr Key", "nostr_public_key"), - ("HydraVeil Key", "hydraveil_public_key"), - ] - - for label, key in info_items: - container = QWidget() - container.setStyleSheet("background: transparent;") - container_layout = QHBoxLayout(container) - container_layout.setContentsMargins(0, 0, 0, 0) - container_layout.setSpacing(10) - - label_widget = QLabel(label + ":") - label_widget.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - label_widget.setMinimumWidth(120) - container_layout.addWidget(label_widget) - - value_widget = QLineEdit() - value_widget.setReadOnly(True) - - if operator: - if key == "operator_name": - value = operator.name or "N/A" - elif key == "nostr_public_key": - value = operator.nostr_public_key or "N/A" - value = self.truncate_key( - value) if value != "N/A" else value - elif key == "hydraveil_public_key": - value = operator.public_key or "N/A" - value = self.truncate_key( - value) if value != "N/A" else value - else: - value = "N/A" - else: - value = "N/A" - - value_widget.setText(value) - value_widget.setCursorPosition(0) - value_widget.setStyleSheet(f""" - QLineEdit {{ - color: white; - background: transparent; - border: none; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); - padding: 5px 0px; - font-size: 12px; - {self.font_style} - }} - """) - container_layout.addWidget(value_widget, 1) - - checkmark_widget = QLabel("✓") - checkmark_widget.setStyleSheet( - f"color: #4CAF50; font-size: 20px; font-weight: bold; {self.font_style}") - checkmark_widget.setFixedSize(20, 20) - checkmark_widget.setAlignment(Qt.AlignmentFlag.AlignCenter) - if value and value != "N/A": - checkmark_widget.show() - else: - checkmark_widget.hide() - container_layout.addWidget(checkmark_widget) - - copy_button = QPushButton() - copy_button.setIcon( - QIcon(os.path.join(self.btn_path, "paste_button.png"))) - copy_button.setIconSize(QSize(24, 24)) - copy_button.setFixedSize(30, 30) - copy_button.setStyleSheet(f""" - QPushButton {{ - background: transparent; - border: none; - }} - QPushButton:hover {{ - background: rgba(255, 255, 255, 0.1); - border-radius: 4px; - }} - """) - - if operator: - if key == "operator_name": - full_value = operator.name or "N/A" - elif key == "nostr_public_key": - full_value = operator.nostr_public_key or "N/A" - elif key == "hydraveil_public_key": - full_value = operator.public_key or "N/A" - else: - full_value = "N/A" - else: - full_value = "N/A" - - copy_button.clicked.connect( - lambda checked=False, val=full_value: self.copy_verification_value(val)) - container_layout.addWidget(copy_button) - - verification_layout.addWidget(container) - - verification_widget.show() - return verification_widget - - def copy_verification_value(self, value): - if value and value != "N/A": - clipboard = QApplication.clipboard() - clipboard.setText(value) - self.update_status.update_status( - "Verification value copied to clipboard") - - def print_profile_details(self, profile_name): - self.reverse_id = int(profile_name.split('_')[1]) - - target_button = self.profile_button_map.get(self.reverse_id) - if target_button: - self.connection_manager.set_profile_button_objects( - self.reverse_id, target_button) - else: - print(f"No button found for profile {self.reverse_id}") - is_connected = self.connection_manager.is_profile_connected( - int(self.reverse_id)) - if is_connected: - self.boton_edit.setEnabled(False) - else: - self.boton_edit.setEnabled(True) - - profile = self.profile_info.get(profile_name) - self.boton_launch.setEnabled(True) - self.boton_just.setEnabled(True) - self.boton_just_session.setEnabled(True) - self.boton_create.setEnabled(True) - if hasattr(self, 'buttons'): - for button in self.buttons: - parent = button.parent() - if parent: - verification_icons = parent.findChildren(QPushButton) - for icon in verification_icons: - if icon.geometry().width() == 20 and icon.geometry().height() == 20: - icon.setEnabled( - self.connection_manager.is_synced()) - # self.boton_settings.setEnabled(True) - - # Eliminar labels adicionales anteriores - for label in self.additional_labels: - label.deleteLater() - - # Limpiar la lista de labels adicionales - self.additional_labels.clear() - - self.change_connect_button() - - if profile: - self.update_status.current_profile_id = self.reverse_id - profile_number = profile_name.split("_")[1] - name = profile.get("name", "") - protocol = profile.get("protocol", "") - location = profile.get("location", "") - connection = profile.get("connection", "") - country_garaje = profile.get("country_garaje", "") - - profile_obj = ProfileController.get(self.reverse_id) - is_profile_enabled = self.connection_manager.is_profile_connected( - self.reverse_id) - show_verification_widget = False - label_principal = None - label_tor = None - text_color = "white" - operator_name = profile_obj.location.operator.name if profile_obj.location and profile_obj.location.operator else "" - - if protocol.lower() == "wireguard" and is_profile_enabled and profile_obj and profile_obj.connection and profile_obj.connection.code == 'wireguard': - verification_widget = self.create_verification_widget( - profile_obj) - self.additional_labels.append(verification_widget) - show_verification_widget = True - label_principal = None - - elif operator_name != 'Simplified Privacy' and protocol.lower() == "wireguard": - if profile_obj.is_session_profile(): - text_color = "black" - label_background = QLabel(self) - label_background.setGeometry(0, 60, 410, 354) - pixmap_bg = QPixmap(os.path.join( - self.btn_path, "browser only.png")) - label_background.setPixmap(pixmap_bg) - label_background.setScaledContents(True) - label_background.show() - label_background.lower() - self.additional_labels.append(label_background) - - l_img = QLabel(self) - l_img.setGeometry(20, 125, 100, 100) - pixmap_loc = QPixmap(os.path.join( - self.btn_path, f"icon_{location}.png")) - l_img.setPixmap(pixmap_loc) - l_img.setScaledContents(True) - l_img.show() - self.additional_labels.append(l_img) - l_name = f"{profile_obj.location.country_name}, {profile_obj.location.name}" if profile_obj.location else "" - o_name = profile_obj.location.operator.name if profile_obj.location and profile_obj.location.operator else "" - n_key = profile_obj.location.operator.nostr_public_key if profile_obj.location and profile_obj.location.operator else "" - - info_txt = QTextEdit(self) - info_txt.setGeometry(130, 110, 260, 250) - info_txt.setReadOnly(True) - info_txt.setFrameStyle(QFrame.Shape.NoFrame) - info_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 17px;") - info_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere) - info_txt.setText( - f"Location: {l_name}\n\nOperator: {o_name}") - info_txt.show() - self.additional_labels.append(info_txt) - - nostr_txt = QTextEdit(self) - nostr_txt.setGeometry(20, 260, 370, 80) - nostr_txt.setReadOnly(True) - nostr_txt.setFrameStyle(QFrame.Shape.NoFrame) - nostr_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 17px;") - nostr_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAnywhere) - nostr_txt.setText(f"Nostr: {n_key}") - nostr_txt.show() - self.additional_labels.append(nostr_txt) - - elif protocol.lower() in ["wireguard", "open", "residential", "hidetor"]: - label_principal = QLabel(self) - label_principal.setGeometry(0, 90, 400, 300) - pixmap = QPixmap(os.path.join( - self.btn_path, f"{protocol}_{location}.png")) - label_principal.setPixmap(pixmap) - label_principal.setScaledContents(True) - label_principal.show() - self.additional_labels.append(label_principal) - - if protocol.lower() in ["wireguard", "open", "residential", "hidetor"]: - - if protocol.lower() == "wireguard" and ConfigurationController.get_endpoint_verification_enabled(): - if is_profile_enabled and profile_obj and profile_obj.connection and profile_obj.connection.code == 'wireguard': - verified_icon = QLabel(self) - verified_icon.setGeometry(20, 50, 100, 80) - verified_pixmap = QPixmap(os.path.join( - self.btn_path, "verified_profile.png")) - verified_icon.setPixmap(verified_pixmap) - verified_icon.setScaledContents(True) - verified_icon.show() - self.additional_labels.append(verified_icon) - - if protocol.lower() == "hidetor" and not show_verification_widget: - - if label_principal: - label_principal.setGeometry(0, 80, 400, 300) - label_background = QLabel(self) - label_background.setGeometry(0, 60, 410, 354) - if connection == 'just proxy': - image_path = os.path.join( - self.btn_path, f"icon_{location}.png") - else: - image_path = os.path.join( - self.btn_path, f"hdtor_{location}.png") - pixmap = QPixmap(image_path) - label_background.setPixmap(pixmap) - label_background.show() - label_background.setScaledContents(True) - label_background.lower() - self.additional_labels.append(label_background) - - if protocol.lower() == "wireguard" and connection.lower() == "browser-only" and not show_verification_widget: - - if label_principal: - label_principal.setGeometry(0, 80, 400, 300) - - label_background = QLabel(self) - label_background.setGeometry(0, 60, 410, 354) - is_supported = profile.get('browser_supported', False) - image_name = "browser only.png" if is_supported else "unsupported_browser_only.png" - pixmap = QPixmap(os.path.join(self.btn_path, image_name)) - label_background.setPixmap(pixmap) - label_background.show() - label_background.setScaledContents(True) - label_background.lower() - self.additional_labels.append(label_background) - - if protocol.lower() == "residential" and connection.lower() == "tor": - - label_background = QLabel(self) - label_background.setGeometry(0, 60, 410, 354) - pixmap = QPixmap(os.path.join( - self.btn_path, "browser_tor.png")) - label_background.setPixmap(pixmap) - label_background.show() - label_background.setScaledContents(True) - # label_background.setStyleSheet("background-color: blue;") - self.additional_labels.append(label_background) - - label_garaje = QLabel(self) - label_garaje.setGeometry(5, 110, 400, 300) - pixmap = QPixmap(os.path.join( - self.btn_path, f"{country_garaje} garaje.png")) - label_garaje.setPixmap(pixmap) - label_garaje.show() - label_garaje.setScaledContents(True) - # label_garaje.setStyleSheet("background-color: red;") - self.additional_labels.append(label_garaje) - - label_tor = QLabel(self) - label_tor.setGeometry(330, 300, 75, 113) - - pixmap = QPixmap(os.path.join(self.btn_path, "tor 86x130.png")) - if label_tor: - label_tor.setPixmap(pixmap) - label_tor.show() - label_tor.setScaledContents(True) - self.additional_labels.append(label_tor) - if protocol.lower() == "residential" and connection.lower() == "just proxy": - - label_background = QLabel(self) - label_background.setGeometry(0, 60, 410, 354) - pixmap = QPixmap(os.path.join( - self.btn_path, "browser_just_proxy.png")) - label_background.setPixmap(pixmap) - label_background.show() - label_background.setScaledContents(True) - # label_background.setStyleSheet("background-color: blue;") - self.additional_labels.append(label_background) - - label_garaje = QLabel(self) - label_garaje.setGeometry(5, 110, 400, 300) - pixmap = QPixmap(os.path.join( - self.btn_path, f"{country_garaje} garaje.png")) - label_garaje.setPixmap(pixmap) - label_garaje.show() - label_garaje.setScaledContents(True) - # label_garaje.setStyleSheet("background-color: red;") - self.additional_labels.append(label_garaje) - - # Actualizar perfil para editar - editar_profile = {"profile_number": profile_number, - "name": name, "protocol": protocol} - self.page_stack.currentWidget().add_selected_profile(editar_profile) - - self.current_profile_location = location - - def show_profile_verification(self, profile_id): - profile = ProfileController.get(profile_id) - if not profile or not profile.location: - return - - location_key = f'{profile.location.country_code}_{profile.location.code}' - location_info = self.connection_manager.get_location_info(location_key) - if not location_info: - return - - location_icon_name = None - btn_path = self.btn_path - - for icon_file in os.listdir(btn_path): - if icon_file.startswith('button_') and icon_file.endswith('.png'): - icon_name = icon_file.replace( - 'button_', '').replace('.png', '') - test_loc = self.connection_manager.get_location_info(icon_name) - if test_loc and test_loc.country_code == location_info.country_code and test_loc.code == location_info.code: - location_icon_name = icon_name - break - - if location_icon_name: - verification_page = LocationVerificationPage( - self.page_stack, self.update_status, location_icon_name, self) - self.page_stack.addWidget(verification_page) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(verification_page)) - - def launch(self): - pass - - def connect(self): - self.boton_just.setEnabled(False) - self.boton_just_session.setEnabled(False) - - profile = ProfileController.get(int(self.reverse_id)) - is_tor = self.update_status.get_current_connection() == 'tor' - if profile.connection.code == 'tor' and not profile.application_version.installed and not is_tor: - message = f'You are using a Tor profile, but the associated browser is not installed. If you want the browser to be downloaded with Tor, you must switch to a Tor connection. Otherwise, proceed with a clearweb connection.' - - else: - self.get_billing_code_by_id() - return - - self.popup = self.update_status._create_confirmation_popup( - message, button_text='Proceed') - self.popup.finished.connect( - lambda result: self._handle_popup_result(result)) - self.popup.show() - - def _handle_popup_result(self, result, change_screen=False): - if result: - if change_screen: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(IdPage))) - else: - self.get_billing_code_by_id() - else: - self.popup.close() - - def disconnect(self): - self.disconnect_button.setEnabled(False) - self.disconnect_system_wide_button.setEnabled(False) - self.update_status.update_status('Disconnecting...') - profile_data = { - 'id': int(self.reverse_id) - } - profile = ProfileController.get(int(self.reverse_id)) - is_session_profile = isinstance(profile, SessionProfile) - if not is_session_profile: - connected_profiles = self.connection_manager.get_connected_profiles() - if len(connected_profiles) > 1: - message = f'Profile{"" if len(connected_profiles) == 1 else "s"} {", ".join(str(profile_id) for profile_id in connected_profiles)} are still connected.\nAll connected session profiles will be disconnected. \nDo you want to proceed?' - self.update_status._show_disconnect_confirmation( - connected_profiles, button_text='Disable', message=message) - self.disconnect_button.setEnabled(True) - self.disconnect_system_wide_button.setEnabled(True) - return - self.worker_thread = WorkerThread( - 'DISABLE_PROFILE', profile_data=profile_data) - self.worker_thread.finished.connect(self.on_disconnect_done) - self.worker_thread.start() - - def on_disconnect_done(self): - self.disconnect_button.setEnabled(True) - self.disconnect_system_wide_button.setEnabled(True) - pass - - def create_prof(self): - settings_page = self.page_stack.findChild(Settings) - if settings_page and settings_page.is_fast_registration_enabled(): - if not self.connection_manager.is_synced(): - self.update_status.update_status('Syncing in progress..') - self.update_status.sync() - self.update_status.worker_thread.sync_output.connect( - self.on_sync_complete_for_fast_registration) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(FastRegistrationPage))) - return - - if not self.connection_manager.is_synced(): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(SyncScreen))) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - def on_sync_complete_for_fast_registration(self, available_locations, available_browsers, status, is_tor, locations, all_browsers): - if status: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(FastRegistrationPage))) - else: - self.update_status.update_status( - 'Sync failed. Please try again later.') - - def change_connect_button(self): - profile = ProfileController.get(int(self.reverse_id)) - is_connected = self.connection_manager.is_profile_connected( - int(self.reverse_id)) - is_session_profile = isinstance(profile, SessionProfile) - - self.update_button_visibility(is_connected, is_session_profile) - self.update_status_message(profile, is_connected) - - def update_button_visibility(self, is_connected, is_session_profile): - self.boton_just_session.setVisible( - not is_connected and is_session_profile) - self.boton_just.setVisible(not is_connected and not is_session_profile) - self.disconnect_button.setVisible(is_connected and is_session_profile) - self.disconnect_system_wide_button.setVisible( - is_connected and not is_session_profile) - - def update_status_message(self, profile, is_connected): - if is_connected: - message = Worker.generate_profile_message(profile, is_enabled=True) - self.update_status.enable_marquee(message) - else: - message = Worker.generate_profile_message( - profile, is_enabled=True, idle=True) - self.update_status.update_status(message) - - def edit_prof(self): - settings_page = self.page_stack.findChild(Settings) - if settings_page and settings_page.is_auto_sync_enabled() and not self.connection_manager.is_synced(): - self.update_status.update_status('Syncing in progress..') - self.update_status.sync() - self.update_status.worker_thread.sync_output.connect( - self.on_sync_complete_for_edit_profile) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(EditorPage))) - - def on_sync_complete_for_edit_profile(self, available_locations, available_browsers, status, is_tor, locations, all_browsers): - if status: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(EditorPage))) - else: - self.update_status.update_status( - 'Sync failed. Please try again later.') - - def settings_gui(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(Settings))) - - def eliminacion(self): - current_state = { - 'is_tor_mode': self.is_tor_mode, - 'is_animating': self.is_animating, - 'animation_step': self.animation_step - } - - self.main_window.toggle_bg.setParent(None) - self.main_window.toggle_handle.setParent(None) - self.main_window.on_label.setParent(None) - self.main_window.off_label.setParent(None) - - self.refresh_menu_buttons() - - self.main_window.toggle_bg.setParent(self.main_window.toggle_button) - self.main_window.toggle_handle.setParent( - self.main_window.toggle_button) - self.main_window.on_label.setParent(self.main_window.toggle_button) - self.main_window.off_label.setParent(self.main_window.toggle_button) - - self.main_window.toggle_bg.show() - self.main_window.toggle_handle.show() - self.main_window.on_label.show() - self.main_window.off_label.show() - - self.is_tor_mode = current_state['is_tor_mode'] - self.is_animating = current_state['is_animating'] - self.animation_step = current_state['animation_step'] - - self.create() - - def get_billing_code_by_id(self, force: bool = False): - profile_id = self.update_status.current_profile_id - profile_data = { - 'id': profile_id, - 'force': force - } - self.update_status.update_status('Attempting to connect...') - - self.enabling_profile(profile_data) - - def enabling_profile(self, profile_data): - ''' - if self.worker is not None: - self.worker.update_signal.disconnect(self.update_gui_main_thread) - self.worker.change_page.disconnect(self.change_app_page) - ''' - self.worker = Worker(profile_data) - self.worker.update_signal.connect(self.update_gui_main_thread) - self.worker.change_page.connect(self.change_app_page) - - thread = threading.Thread(target=self.worker.run) - thread.start() - - def DisplayInstallScreen(self, package_name): - install_page = self.page_stack.findChild(InstallSystemPackage) - install_page.configure(package_name=package_name, distro='debian') - self.page_stack.setCurrentIndex(self.page_stack.indexOf(install_page)) - - def handle_enable_force_result(self, result): - if result: - profile_data = {'id': self.reverse_id, - 'ignore_profile_state_conflict': True} - if hasattr(self, '_pending_endpoint_verification_ignore') and self._pending_endpoint_verification_ignore: - profile_data['ignore_endpoint_verification'] = True - self.enabling_profile(profile_data) - else: - pass - if hasattr(self, '_pending_profile_state_conflict_ignore'): - delattr(self, '_pending_profile_state_conflict_ignore') - if hasattr(self, '_pending_endpoint_verification_ignore'): - delattr(self, '_pending_endpoint_verification_ignore') - self.popup.close() - - def handle_endpoint_verification_result(self, result, action, profile_id): - if action == "continue": - profile_data = {'id': profile_id, - 'ignore_endpoint_verification': True} - if hasattr(self, '_pending_profile_state_conflict_ignore') and self._pending_profile_state_conflict_ignore: - profile_data['ignore_profile_state_conflict'] = True - self.enabling_profile(profile_data) - elif action == "sync": - self.update_status.update_status("Syncing...") - self.worker_thread = WorkerThread('SYNC') - self.worker_thread.finished.connect( - lambda: self.handle_sync_after_verification(profile_id)) - self.worker_thread.sync_output.connect( - self.update_status.update_values) - self.worker_thread.start() - else: - self.update_status.update_status("Profile enable aborted") - if hasattr(self, 'popup'): - self.popup.close() - - def handle_sync_after_verification(self, profile_id): - profile_data = {'id': profile_id} - if hasattr(self, '_pending_profile_state_conflict_ignore') and self._pending_profile_state_conflict_ignore: - profile_data['ignore_profile_state_conflict'] = True - self.enabling_profile(profile_data) - - def update_gui_main_thread(self, text, is_enabled, profile_id, profile_type, profile_connection): - if text == "ENDPOINT_VERIFICATION_ERROR": - message = "Operator verification failed. Do you want to continue anyway?" - self.popup = EndpointVerificationPopup(self, message=message) - self.popup.finished.connect( - lambda result, action: self.handle_endpoint_verification_result(result, action, profile_id)) - self.popup.show() - return - - if text == "PROFILE_STATE_CONFLICT_ERROR": - message = f'The profile is already enabled. Do you want to force enable it anyway?' - self._pending_profile_state_conflict_ignore = True - self.popup = self.update_status._create_confirmation_popup( - message, button_text='Proceed') - self.popup.finished.connect( - lambda result: self.handle_enable_force_result(result)) - self.popup.show() - return - - if profile_id < 0: - self.DisplayInstallScreen(text) - return - if is_enabled: - self.update_status.enable_marquee(str(text)) - else: - self.update_status.update_status(str(text)) - if profile_id is not None: - self.on_finished_update_gui( - is_enabled, profile_id, profile_type, profile_connection) - self.boton_just.setEnabled(True) - self.boton_just_session.setEnabled(True) - - def change_app_page(self, text, Is_changed): - self.update_status.update_status(str(text)) - if Is_changed: - current_connection = self.update_status.get_current_connection() - profile = ProfileController.get(int(self.reverse_id)) - if current_connection != 'tor' and profile.connection.code == 'tor': - message = f'You are using a Tor profile, but the profile subscription is missing or expired. If you want the billing to be done thourgh Tor, you must switch to a Tor connection. Otherwise, proceed with a clearweb connection.' - self.popup = self.update_status._create_confirmation_popup( - message, button_text='Proceed') - self.popup.finished.connect( - lambda result: self._handle_popup_result(result, True)) - self.popup.show() - else: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(IdPage))) - - self.boton_just.setEnabled(True) - self.boton_just_session.setEnabled(True) - - def on_finished_update_gui(self, is_enabled, profile_id, profile_type, profile_connection): - try: - if is_enabled: - self.connection_manager.add_connected_profile(profile_id) - target_button: QPushButton = self.connection_manager.get_profile_button_objects( - profile_id) - - if profile_type == 1: - if target_button: - icon_path = self.connected_tor_profile if profile_connection == 'tor' else self.connected_profile - try: - target_button.setIcon(QIcon(icon_path)) - except RuntimeError: - pass - self.button_states[profile_id] = icon_path - else: - if target_button: - try: - target_button.setIcon( - QIcon(self.system_wide_connected_profile)) - except RuntimeError: - pass - self.update_status.update_image( - appearance_value='background_connected') - self.button_states[profile_id] = self.system_wide_connected_profile - self.IsSystem += 1 - - if target_button: - self.show_disconnect_button( - True, profile_type, target_button) - self.boton_edit.setEnabled(False) - - if profile_id == self.reverse_id: - profile_obj = ProfileController.get(profile_id) - if profile_obj and profile_obj.connection and profile_obj.connection.code == 'wireguard' and ConfigurationController.get_endpoint_verification_enabled(): - self.print_profile_details(f"Profile_{profile_id}") - else: - self.connection_manager.remove_connected_profile(profile_id) - if profile_type == 1: - if profile_id in self.button_states: - del self.button_states[profile_id] - else: - self.IsSystem -= 1 - if profile_id in self.button_states: - del self.button_states[profile_id] - if self.IsSystem == 0: - self.update_status.update_image() - - self.boton_edit.setEnabled(True) - - if profile_id == self.reverse_id: - self.print_profile_details(f"Profile_{profile_id}") - - self.refresh_menu_buttons() - except IndexError: - self.update_status.update_status( - 'An error occurred while updating profile state.') - - -class ConnectionManager: - def __init__(self): - self._connected_profiles = set() - self._is_synced = False - self._is_profile_being_enabled = {} - self.profile_button_objects = {} - self.available_resolutions = ['800x600', '1024x760', '1152x1080', '1280x1024', - '1920x1080', '2560x1440', '2560x1600', '1920x1440', '1792x1344', '2048x1152'] - self._location_list = [] - self._browser_list = [] - - def get_profile_button_objects(self, profile_id): - return self.profile_button_objects.get(profile_id, None) - - def set_profile_button_objects(self, profile_id, profile_button_objects): - self.profile_button_objects[profile_id] = profile_button_objects - - def get_available_resolutions(self, profile_id): - profile = ProfileController.get(profile_id) - if profile and hasattr(profile, 'resolution') and profile.resolution: - self.available_resolutions.append(profile.resolution) - return self.available_resolutions - - def add_custom_resolution(self, resolution): - self.available_resolutions.append(resolution) - - def add_connected_profile(self, profile_id): - self._connected_profiles.add(profile_id) - - def remove_connected_profile(self, profile_id): - self._connected_profiles.discard(profile_id) - - def is_profile_connected(self, profile_id): - return profile_id in self._connected_profiles - - def get_connected_profiles(self): - return list(self._connected_profiles) - - def set_synced(self, status): - self._is_synced = status - - def is_synced(self): - return self._is_synced - - def get_location_info(self, location_key): - if not location_key: - return None - try: - country_code, location_code = location_key.split('_') - for location in self._location_list: - if location.country_code == country_code and location.code == location_code: - return location - - return None - except (ValueError, AttributeError): - return None - - def store_locations(self, locations): - self._location_list = locations - - def store_browsers(self, browsers): - self._browser_list = browsers - - def get_browser_list(self): - return self._browser_list - - def get_location_list(self): - if self.is_synced(): - location_names = [ - f'{location.country_code}_{location.code}' for location in self._location_list] - return location_names - else: - return [] - - -class InstallSystemPackage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("InstallPackage", page_stack, main_window, parent) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.package_name = "" - self.install_command = "" - self.manual_install_command = "" - self.is_sync = False - self.ui_elements = [] - self.permanent_elements = [] - self.current_distro = "debian" - self.distro_buttons = {} - - self._setup_permanent_ui() - self._setup_distro_buttons() - - self.auto_install_package_commands = { - 'all': { - 'debian': 'pkexec apt install -y bubblewrap iproute2 microsocks proxychains4 ratpoison tor wireguard xserver-xephyr', - 'arch': 'pkexec pacman -S bubblewrap iproute2 microsocks proxychains-ng tor wireguard-tools xorg-server-xephyr', - 'fedora': 'pkexec dnf -y install bubblewrap iproute proxychains4 ratpoison tor wireguard-tools xorg-x11-server-Xephyr' - }, - 'bwrap': { - 'debian': 'pkexec apt -y install bubblewrap', - 'arch': 'pkexec pacman -S bubblewrap', - 'fedora': 'pkexec dnf -y install bubblewrap' - }, - 'ip': { - 'debian': 'pkexec apt -y install iproute2', - 'arch': 'pkexec pacman -S iproute2', - 'fedora': 'pkexec dnf -y install iproute' - }, - 'microsocks': { - 'debian': 'pkexec apt -y install microsocks', - 'arch': 'pkexec pacman -S microsocks', - 'fedora': 'zenity --warning --text="An essential dependency (microsocks) is not included in your distribution\'s default repository. Please build it from source or contact support."' - }, - 'proxychains4': { - 'debian': 'pkexec apt -y install proxychains4', - 'arch': 'pkexec pacman -S proxychains-ng', - 'fedora': 'pkexec dnf -y install proxychains4' - }, - 'ratpoison': { - 'debian': 'pkexec apt -y install ratpoison', - 'arch': 'zenity --warning --text="An essential dependency (ratpoison) is not included in your distribution\'s default repository. Please build it from source or contact support."', - 'fedora': 'pkexec dnf -y install ratpoison' - }, - 'tor': { - 'debian': 'pkexec apt -y install tor', - 'arch': 'pkexec pacman -S tor', - 'fedora': 'pkexec dnf -y install tor' - }, - 'wg-quick': { - 'debian': 'pkexec apt -y install wireguard', - 'arch': 'pkexec pacman -S wireguard-tools', - 'fedora': 'pkexec dnf -y install wireguard-tools' - }, - 'Xephyr': { - 'debian': 'pkexec apt -y install xserver-xephyr', - 'arch': 'pkexec pacman -S xorg-server-xephyr', - 'fedora': 'pkexec dnf -y install xorg-x11-server-Xephyr' - } - } - - self.manual_install_package_commands = { - 'all': { - 'debian': 'sudo apt install -y bubblewrap iproute2 microsocks proxychains4 ratpoison tor wireguard xserver-xephyr', - 'arch': 'sudo pacman -S bubblewrap iproute2 microsocks proxychains-ng tor wireguard-tools xorg-server-xephyr', - 'fedora': 'sudo dnf -y install bubblewrap iproute proxychains4 ratpoison tor wireguard-tools xorg-x11-server-Xephyr' - }, - 'bwrap': { - 'debian': 'sudo apt -y install bubblewrap', - 'arch': 'sudo pacman -S bubblewrap', - 'fedora': 'sudo dnf -y install bubblewrap' - }, - 'ip': { - 'debian': 'sudo apt -y install iproute2', - 'arch': 'sudo pacman -S iproute2', - 'fedora': 'sudo dnf -y install iproute' - }, - 'microsocks': { - 'debian': 'sudo apt -y install microsocks', - 'arch': 'sudo pacman -S microsocks', - 'fedora': '# Package not available.' - }, - 'proxychains4': { - 'debian': 'sudo apt -y install proxychains4', - 'arch': 'sudo pacman -S proxychains-ng', - 'fedora': 'sudo dnf -y install proxychains4' - }, - 'ratpoison': { - 'debian': 'sudo apt -y install ratpoison', - 'arch': '# Package not available.', - 'fedora': 'sudo dnf -y install ratpoison' - }, - 'tor': { - 'debian': 'sudo apt -y install tor', - 'arch': 'sudo pacman -S tor', - 'fedora': 'sudo dnf -y install tor' - }, - 'wg-quick': { - 'debian': 'sudo apt -y install wireguard', - 'arch': 'sudo pacman -S wireguard-tools', - 'fedora': 'sudo dnf -y install wireguard-tools' - }, - 'Xephyr': { - 'debian': 'sudo apt -y install xserver-xephyr', - 'arch': 'sudo pacman -S xorg-server-xephyr', - 'fedora': 'sudo dnf -y install xorg-x11-server-Xephyr' - } - } - - def _setup_permanent_ui(self): - self.title.setGeometry(20, 50, 300, 60) - self.title.setText("Package Installation") - self.title.setStyleSheet("font-size: 22px; font-weight: bold;") - self.permanent_elements.append(self.title) - - self.display.setGeometry(QtCore.QRect(100, 160, 580, 435)) - self.permanent_elements.append(self.display) - - def _setup_distro_buttons(self): - distros = ["debian", "arch", "fedora"] - - for i, distro in enumerate(distros): - btn = QPushButton(self) - btn.setGeometry(360 + i*140, 40, 120, 49) - btn.setIcon(QIcon(os.path.join(self.btn_path, f"{distro}.png"))) - btn.setIconSize(QSize(120, 49)) - btn.setCheckable(True) - btn.clicked.connect( - lambda checked, d=distro: self.switch_distro(d)) - self.distro_buttons[distro] = btn - self.permanent_elements.append(btn) - - self.distro_buttons[self.current_distro].setChecked(True) - - def switch_distro(self, distro): - self.current_distro = distro - - for d, btn in self.distro_buttons.items(): - btn.setChecked(d == distro) - - if self.package_name: - self.update_command() - self.setup_ui() - - def update_command(self): - - if self.package_name in self.auto_install_package_commands: - if self.is_sync: - self.install_command = self.auto_install_package_commands[ - 'tor_sync'][self.current_distro] - self.manual_install_command = self.manual_install_package_commands[ - 'tor_sync'][self.current_distro] - else: - self.install_command = self.auto_install_package_commands[ - self.package_name][self.current_distro] - self.manual_install_command = self.manual_install_package_commands[ - self.package_name][self.current_distro] - else: - self.install_command = "" - self.manual_install_command = "" - - def configure(self, package_name, distro, is_sync=False): - self.package_name = package_name - self.current_distro = distro - self.is_sync = is_sync - self.update_command() - self.setup_ui() - return self - - def setup_ui(self): - self.button_back.setVisible(False) - self.button_go.setVisible(True) - if not self.package_name: - return - - self.clear_ui() - - self._setup_auto_install() - self._setup_manual_install() - - self._setup_status_and_nav() - - for element in self.ui_elements: - element.setParent(self) - element.setVisible(True) - element.raise_() - - def clear_ui(self): - for element in self.ui_elements: - element.setParent(None) - element.deleteLater() - self.ui_elements.clear() - - self.command_box = None - self.status_label = None - self.install_button = None - self.check_button = None - - def _setup_auto_install(self): - auto_install_label = QLabel( - f"Automatic Installation for {self.current_distro}", self) - auto_install_label.setGeometry(80, 130, 580, 30) - auto_install_label.setStyleSheet("font-size: 18px; font-weight: bold;") - auto_install_label.setVisible(True) - self.ui_elements.append(auto_install_label) - - auto_install_desc = QLabel( - "Click the button below to automatically install the missing packages:", self) - auto_install_desc.setStyleSheet("font-size: 14px; font-weight: bold;") - auto_install_desc.setGeometry(80, 170, 650, 30) - auto_install_desc.setVisible(True) - self.ui_elements.append(auto_install_desc) - - self.install_button = QPushButton(self) - self.install_button.setGeometry(135, 210, 100, 40) - self.install_button.setIcon( - QIcon(os.path.join(self.btn_path, "install.png"))) - self.install_button.setIconSize(self.install_button.size()) - self.install_button.clicked.connect(self.install_package) - self.install_button.setVisible(True) - self.ui_elements.append(self.install_button) - - if self.current_distro == 'arch': - auto_install_label.setGeometry(50, 110, 580, 30) - auto_install_desc.setGeometry(50, 140, 650, 30) - - self.install_button.setGeometry(150, 185, 100, 40) - - self.check_button = QPushButton(self) - self.check_button.setGeometry(270, 185, 100, 40) - self.check_button.setIcon( - QIcon(os.path.join(self.btn_path, "check.png"))) - self.check_button.setIconSize(self.check_button.size()) - self.check_button.clicked.connect(self.check_package) - self.check_button.setVisible(True) - self.ui_elements.append(self.check_button) - - def _setup_manual_install(self): - if self.current_distro != 'arch': - manual_install_label = QLabel( - f"Manual Installation for {self.current_distro}", self) - manual_install_label.setGeometry(80, 290, 650, 30) - manual_install_label.setStyleSheet( - "font-size: 18px; font-weight: bold;") - manual_install_label.setVisible(True) - self.ui_elements.append(manual_install_label) - - manual_install_desc = QLabel( - "Run this command in your terminal:", self) - manual_install_desc.setStyleSheet( - "font-size: 14px; font-weight: bold;") - manual_install_desc.setGeometry(80, 330, 380, 30) - manual_install_desc.setVisible(True) - - self.ui_elements.append(manual_install_desc) - - self.command_box = QLabel(self.manual_install_command, self) - - self.command_box.setGeometry(80, 370, 380, 40) - - if self.current_distro == 'arch': - self.command_box.setGeometry(50, 280, 380, 40) - - metrics = self.command_box.fontMetrics() - text_width = metrics.horizontalAdvance( - self.manual_install_command) + 100 - available_width = self.command_box.width() - 20 - font_size = 18 - MIN_FONT_SIZE = 10 - while text_width > available_width: - if font_size <= MIN_FONT_SIZE: - break - font_size -= 1 - text_width -= 10 - - self.command_box.setStyleSheet(f""" - background-color: #2b2b2b; - color: #ffffff; - padding: 10px; - border-radius: 5px; - font-family: monospace; - font-size: {font_size}px; - """) - - self.command_box.mousePressEvent = lambda _: self.copy_command() - self.command_box.setVisible(True) - self.ui_elements.append(self.command_box) - - if self.current_distro == 'arch': - # Pacman commands section - pacman_label = QLabel("Pacman Installation:", self) - pacman_label.setGeometry(50, 240, 650, 30) - pacman_label.setStyleSheet( - "font-size: 18px; font-weight: bold; color: #00ffff;") - pacman_label.setVisible(True) - self.ui_elements.append(pacman_label) - - # AUR commands section - aur_label = QLabel("AUR / Yay Installation:", self) - aur_label.setGeometry(50, 350, 300, 30) - aur_label.setStyleSheet( - "font-size: 18px; font-weight: bold; color: #00ffff;") - self.ui_elements.append(aur_label) - - # Yay command - self.yay_command_box = QLabel("sudo yay -S ratpoison", self) - self.yay_command_box.setGeometry(50, 390, 300, 40) - self._setup_command_box_style(self.yay_command_box) - self.yay_command_box.mousePressEvent = lambda _: self.copy_command( - "sudo yay -S ratpoison", self.yay_command_box) - self.ui_elements.append(self.yay_command_box) - - # Manual AUR command - aur_command = "git clone https://aur.archlinux.org/ratpoison.git\ncd ratpoison\nmakepkg -si --skippgpcheck" - self.aur_command_box = QLabel(aur_command, self) - self.aur_command_box.setGeometry(370, 390, 380, 60) - self._setup_command_box_style(self.aur_command_box) - self.aur_command_box.setWordWrap(True) - self.aur_command_box.mousePressEvent = lambda _: self.copy_command( - aur_command, self.aur_command_box) - self.ui_elements.append(self.aur_command_box) - - else: - self.command_box = QLabel(self.manual_install_command, self) - self.command_box.setGeometry(80, 370, 380, 40) - metrics = self.command_box.fontMetrics() - text_width = metrics.horizontalAdvance( - self.manual_install_command) + 100 - available_width = self.command_box.width() - 20 - font_size = 18 - MIN_FONT_SIZE = 10 - while text_width > available_width: - if font_size <= MIN_FONT_SIZE: - break - font_size -= 1 - text_width -= 10 - - self.command_box.setStyleSheet(f""" - background-color: #2b2b2b; - color: #ffffff; - padding: 10px; - border-radius: 5px; - font-family: monospace; - font-size: {font_size}px; - """) - - self.command_box.mousePressEvent = lambda _: self.copy_command() - self.command_box.setVisible(True) - self.ui_elements.append(self.command_box) - - def _setup_command_box_style(self, command_box): - metrics = command_box.fontMetrics() - text_width = metrics.horizontalAdvance(command_box.text()) + 100 - available_width = command_box.width() - 20 - font_size = 18 - MIN_FONT_SIZE = 10 - while text_width > available_width: - if font_size <= MIN_FONT_SIZE: - break - font_size -= 1 - text_width -= 10 - - command_box.setStyleSheet(f""" - background-color: #2b2b2b; - color: #ffffff; - padding: 10px; - border-radius: 5px; - font-family: monospace; - font-size: {font_size}px; - """) - command_box.setVisible(True) - - def copy_yay_command(self): - clipboard = QApplication.clipboard() - clipboard.setText("sudo yay -S ratpoison") - - original_style = self.yay_command_box.styleSheet() - self.yay_command_box.setStyleSheet( - original_style + "background-color: #27ae60;") - QTimer.singleShot( - 200, lambda: self.yay_command_box.setStyleSheet(original_style)) - self.update_status.update_status("Yay command copied to clipboard") - - def _setup_status_and_nav(self): - if self.current_distro != 'arch': - self.check_button = QPushButton(self) - self.check_button.setGeometry(130, 430, 100, 40) - self.check_button.setIcon( - QIcon(os.path.join(self.btn_path, "check.png"))) - self.check_button.setIconSize(self.check_button.size()) - self.check_button.clicked.connect(self.check_package) - self.ui_elements.append(self.check_button) - - self.button_go.clicked.connect(self.go_next) - self.button_back.clicked.connect(self.go_next) - - self.status_label = QLabel("", self) - self.status_label.setGeometry(300, 430, 250, 40) - if self.current_distro == 'arch': - self.status_label.setGeometry(450, 185, 250, 40) - self.ui_elements.append(self.status_label) - - def copy_command(self, command=None, command_box=None): - if command_box is None: - command_box = self.command_box - - clipboard = QApplication.clipboard() - if command: - clipboard.setText(command) - else: - clipboard.setText(self.manual_install_command) - - original_style = command_box.styleSheet() - command_box.setStyleSheet( - original_style + "background-color: #27ae60;") - QTimer.singleShot( - 200, lambda: command_box.setStyleSheet(original_style)) - self.update_status.update_status("Command copied to clipboard") - - def install_package(self): - if not self.install_command: - self.update_status.update_status( - f"Installation not supported for {self.current_distro}") - return - - if subprocess.getstatusoutput('pkexec --help')[0] == 127: - self.update_status.update_status("polkit toolkit is not installed") - self.install_button.setDisabled(True) - return - - self.worker_thread = WorkerThread('INSTALL_PACKAGE', - package_command=self.install_command, - package_name=self.package_name) - self.worker_thread.text_output.connect( - self.update_status.update_status) - self.worker_thread.finished.connect(self.installation_complete) - self.worker_thread.start() - - def installation_complete(self, success): - if success: - self.check_package() - - def check_package(self): - try: - if self.package_name.lower() == 'all': - packages = ['bwrap', 'ip', 'microsocks', - 'proxychains4', 'ratpoison', 'tor', 'Xephyr', 'wg'] - for package in packages: - if subprocess.getstatusoutput(f'{package} --help')[0] == 127: - self.status_label.setText( - f"{package} is not installed") - self.status_label.setStyleSheet("color: red;") - return - self.status_label.setText("All packages installed!") - self.status_label.setStyleSheet("color: green;") - elif self.package_name.lower() == 'wireguard': - self.install_name = 'wg' - elif self.package_name.lower() == 'bubblewrap': - self.install_name = 'bwrap' - elif self.package_name.lower() == 'xserver-xephyr': - self.install_name = 'Xephyr' - else: - self.install_name = self.package_name - if subprocess.getstatusoutput(f'{self.install_name.lower()} --help')[0] == 127: - self.status_label.setText( - f"{self.package_name} is not installed") - self.status_label.setStyleSheet("color: red;") - else: - self.status_label.setText( - f"{self.package_name} is installed!") - self.status_label.setStyleSheet("color: green;") - except Exception: - self.status_label.setText("Check failed") - self.status_label.setStyleSheet("color: red;") - - def go_next(self): - ''' - if not self.update_status.has_shown_systemwide_prompt(): - system_page = self.page_stack.findChild(SystemwidePromptPage) - if system_page is None: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - return - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(system_page)) - else: - ''' - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - -class ProtocolPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Protocol", page_stack, main_window, parent) - self.main_window = main_window - self.selected_protocol = None - self.btn_path = main_window.btn_path - self.selected_protocol_icon = None - self.connection_manager = main_window.connection_manager - self.button_back.setVisible(True) - self.update_status = main_window - self.button_go.clicked.connect(self.go_selected) - self.coming_soon_label = QLabel("Coming soon", self) - self.coming_soon_label.setGeometry(210, 50, 200, 40) - self.coming_soon_label.setStyleSheet("font-size: 22px;") - - self.coming_soon_label.setVisible(False) - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Pick a Protocol") - self.display.setGeometry(QtCore.QRect(0, 50, 580, 435)) # relacion 4:3 - self.create_interface_elements() - - def create_interface_elements(self): - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - for j, (object_type, icon_name, page_class, geometry) in enumerate([ - (QPushButton, "wireguard", WireGuardPage, (585, 90, 185, 75)), - (QPushButton, "residential", ResidentialPage, (585, 90+30+75, 185, 75)), - (QPushButton, "hidetor", HidetorPage, (585, 90+30+75+30+75, 185, 75)) - ]): - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - boton.setDisabled(True) - boton.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}_button.png"))) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - boton.clicked.connect( - lambda _, page=page_class, protocol=icon_name: self.show_protocol(page, protocol)) - - def enable_protocol_buttons(self): - for button in self.buttons: - button.setDisabled(False) - - def update_swarp_json(self): - self.update_status.write_data( - {"protocol": self.selected_protocol_icon}) - - def show_protocol(self, page_class, protocol): - self.update_status.clear_data() - self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{protocol}.png")).scaled( - self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - self.selected_protocol_icon = protocol - self.selected_page_class = page_class - - if protocol in ["wireguard", "hidetor"]: - self.button_go.setVisible(True) - self.coming_soon_label.setVisible(False) - - else: - self.button_go.setVisible(False) - self.coming_soon_label.setVisible(True) - self.update_swarp_json() - - def go_selected(self): - if self.selected_page_class: - selected_page = self.selected_page_class - if selected_page == HidetorPage: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(HidetorPage))) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(selected_page))) - - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_go.setVisible(False) - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - -class WireGuardPage(Page): - # Variable de clase para verificar si el QLabel ya se ha creado - browser_label_created = False - - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Wireguard", page_stack, main_window, parent) - self.buttonGroup = QButtonGroup(self) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.buttons = [] - self.selected_protocol = None - self.selected_protocol_icon = None - self.button_back.setVisible(True) - self.button_go.clicked.connect(self.go_selected) - self.additional_labels = [] - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Pick a Protocol") - # self.display.setGeometry(QtCore.QRect(15, 50, 550, 411))#relacion 4:3 - # self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{wireguard}.png")).scaled(self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - self.sudo_warning = QLabel("Requires Sudo", self) - self.sudo_warning.setGeometry(165, 90, 300, 40) - self.sudo_warning.setStyleSheet(""" - font-size: 24px; - font-weight: bold; - color: cyan; - """) - self.sudo_warning.setVisible(False) - - self.create_interface_elements() - - def create_interface_elements(self): - - for j, (object_type, icon_name, page_class, geometry) in enumerate([ - (QPushButton, "system-wide", LocationPage, (585, 90, 185, 75)), - (QPushButton, "browser-only", LocationPage, - (585, 90+30+75+30+75, 185, 75)), - (QLabel, None, None, (570, 170, 210, 105)), - (QLabel, None, None, (570, 385, 210, 115)) - ]): - if object_type == QPushButton: - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - boton.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}.png"))) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - # Usamos argumentos por defecto para capturar los valores - boton.clicked.connect( - lambda _, page=page_class, protocol=icon_name: self.show_protocol(page, protocol)) - elif object_type == QLabel: - label = object_type(self) - label.setGeometry(*geometry) - label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - label.setWordWrap(True) - if geometry == (570, 170, 210, 105): - text1 = "VPN for the whole PC\n(€1/month - 1 location)" - label.setText(text1) - elif geometry == (570, 385, 210, 115): - text2 = "1 Profile.\n1 Country.\nIsolated VPN for just the browser\n(1€/month)" - label.setText(text2) - - # Conexión de la señal clicked del botón con la función correspondiente - - def update_swarp_json(self): - inserted_data = { - "protocol": "wireguard", - "connection": self.selected_protocol_icon - } - self.update_status.write_data(inserted_data) - - def show_protocol(self, page_class, protocol): - if protocol == "browser-only": - self.sudo_warning.setVisible(False) - else: - self.sudo_warning.setVisible(True) - self.protocol_chosen = protocol - self.selected_protocol_icon = protocol - self.selected_page_class = page_class - - self.button_go.setVisible(True) - self.update_swarp_json() - # Eliminar labels adicionales anteriores - for label in self.additional_labels: - label.deleteLater() - self.additional_labels.clear() - if protocol == "system-wide": - - # Crear QLabel con la imagen os.path.join(self.btn_path, "browser only.png") detrás del label_principal - label_principal = QLabel(self) - # Geometría según necesidades - label_principal.setGeometry(0, 60, 540, 460) - pixmap = QPixmap(os.path.join(self.btn_path, "wireguard.png")) - label_principal.setPixmap(pixmap) - label_principal.show() - label_principal.setScaledContents(True) - label_principal.lower() # Colocar label_background debajo del label_principal - self.additional_labels.append(label_principal) - - if protocol == "browser-only": - # Crear QLabel principal - label_principal = QLabel(self) - label_principal.setGeometry(0, 80, 530, 380) - pixmap = QPixmap(os.path.join(self.btn_path, "wireguard.png")) - label_principal.setPixmap(pixmap) - label_principal.show() - label_principal.setScaledContents(True) - - label_principal.show() - self.additional_labels.append(label_principal) - - # Crear QLabel con la imagen os.path.join(self.btn_path, "browser only.png") detrás del label_principal - label_background = QLabel(self) - # Geometría según necesidades - label_background.setGeometry(0, 60, 540, 460) - pixmap = QPixmap(os.path.join(self.btn_path, "browser only.png")) - label_background.setPixmap(pixmap) - label_background.show() - label_background.setScaledContents(True) - label_background.lower() # Colocar label_background debajo del label_principal - self.additional_labels.append(label_background) - - def go_selected(self): - if self.selected_page_class: - if self.protocol_chosen == 'system-wide': - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(LocationPage))) - else: - selected_page = self.selected_page_class - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(selected_page))) - - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_go.setVisible(False) - - def reverse(self): - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_go.setVisible(False) - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - -class HidetorPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("HideTor", page_stack, main_window, parent) - self.selected_location_icon = None - self.connection_manager = main_window.connection_manager - self.update_status = main_window - self.button_next.clicked.connect(self.go_selected) - self.button_reverse.setVisible(True) - self.button_reverse.clicked.connect(self.reverse) - self.display.setGeometry(QtCore.QRect(5, 10, 390, 520)) - self.title.setGeometry(395, 40, 380, 40) - self.title.setText("Pick a location") - - def create_interface_elements(self, available_locations): - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - - for j, (object_type, icon_name, geometry) in enumerate(available_locations): - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - locations = self.connection_manager.get_location_info(icon_name) - if icon_name == 'my_14': - boton.setVisible(False) - if locations and not (hasattr(locations, 'is_proxy_capable') and locations.is_proxy_capable): - boton.setVisible(False) - icon_path = os.path.join(self.btn_path, f"button_{icon_name}.png") - boton.setIcon(QIcon(icon_path)) - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - if boton.icon().isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - base_image = LocationPage.create_location_button_image( - location_name, fallback_path, provider) - boton.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider) - boton.setIcon(QIcon(base_image)) - else: - if locations and hasattr(locations, 'country_name'): - base_image = LocationPage.create_location_button_image( - f'{locations.country_code}_{locations.code}', fallback_path, provider, icon_path) - boton.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider, icon_path) - boton.setIcon(QIcon(base_image)) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - boton.location_icon_name = icon_name - boton.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - boton.clicked.connect( - lambda checked, loc=icon_name: self.show_location(loc)) - - def update_swarp_json(self): - inserted_data = { - "location": self.selected_location_icon, - "connection": "tor" - } - self.update_status.write_data(inserted_data) - - def show_location(self, location): - tor_hide_img = f'hdtor_{location}' - self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{tor_hide_img}.png")).scaled( - self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - self.selected_location_icon = location - self.button_next.setVisible(True) - self.update_swarp_json() - - def reverse(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - def go_selected(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(BrowserPage))) - - def show_location_verification(self, location_icon_name): - verification_page = LocationVerificationPage( - self.page_stack, self.update_status, location_icon_name, self) - self.page_stack.addWidget(verification_page) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(verification_page)) - - -class ResidentialPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Wireguard", page_stack, main_window, parent) - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Pick a Protocol") - self.update_status = main_window - self.connection_choice = None - self.button_reverse.setVisible(True) - self.button_reverse.clicked.connect(self.reverse) - self.button_go.clicked.connect(self.go_selected) - - self.display_1 = QLabel(self) - self.display_1.setGeometry(QtCore.QRect( - 15, 50, 550, 465)) # relacion 4:3 - self.display_1.setPixmap( - QPixmap(os.path.join(self.btn_path, "browser only.png"))) - self.label = QLabel(self) - self.label.setGeometry(440, 370, 86, 130) - self.label.setPixmap( - QPixmap(os.path.join(self.btn_path, "tor 86x130.png"))) - self.label.hide() - - def showEvent(self, event): - super().showEvent(event) - self.create_interface_elements() - - def create_interface_elements(self): - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - - for j, (object_type, icon_name, page_class, geometry) in enumerate([ - (QPushButton, "tor", self.set_connection_choice( - 'tor'), (585, 90, 185, 75)), - (QPushButton, "just proxy", self.set_connection_choice( - 'just proxy'), (585, 90+30+75+30+75, 185, 75)), - (QLabel, None, None, (570, 170, 210, 105)), - (QLabel, None, None, (570, 385, 210, 115)) - ]): - if object_type == QPushButton: - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - boton.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}_button.png"))) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - - boton.show() - - # Conectar el botón a la función show_residential - boton.clicked.connect( - lambda checked, page=page_class, name=icon_name: self.show_residential(name, page)) - elif object_type == QLabel: - label = object_type(self) - label.setGeometry(*geometry) - label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - label.setWordWrap(True) - label.show() - if geometry == (570, 170, 210, 105): - text1 = "Connect to tor first\nThen the residential proxy\nThis hides Tor from websites" - label.setText(text1) - elif geometry == (570, 385, 210, 115): - text2 = "Connect directly\nTo the Proxy\nin a browser\nThis has no encryption" - label.setText(text2) - - def set_connection_choice(self, connection_choice): - pass - - def show_residential(self, icon_name, page_class): - self.connection_choice = icon_name - self.selected_page_class = page_class - - if icon_name == "tor": - self.label.show() - if icon_name == "just proxy": - self.label.hide() - - self.button_go.setVisible(True) - - def go_selected(self): - self.update_swarp_json(self.connection_choice) - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(HidetorPage))) - self.button_go.setVisible(False) - - def update_swarp_json(self, icon_name): - inserted_data = { - "connection": icon_name - } - self.update_status.write_data(inserted_data) - - def reverse(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - -class TorPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("TorPage", page_stack, main_window, parent) - self.update_status = main_window - self.button_back.setVisible(True) - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Pick a Country") - self.display.setGeometry(QtCore.QRect( - 0, 100, 540, 405)) # relacion 4:3 - self.display0 = QLabel(self) - self.display0.setGeometry(QtCore.QRect( - 0, 50, 600, 465)) # relacion 4:3 - self.display0.setPixmap( - QPixmap(os.path.join(self.btn_path, "browser only.png"))) - self.display0.lower() # Colocar display2 debajo de otros widgets - - self.button_go.clicked.connect(self.go_selected) - - self.button_reverse.setVisible(True) - self.button_reverse.clicked.connect(self.reverse_selected) - - self.label = QLabel(self) - self.label.setGeometry(440, 370, 86, 130) - # Reemplaza "ruta/a/la/imagen.png" por la ruta de tu imagen - pixmap = QPixmap(os.path.join(self.btn_path, "tor 86x130.png")) - self.label.setPixmap(pixmap) - - self.label.hide() - - def showEvent(self, event): - super().showEvent(event) - self.extraccion() - - def extraccion(self): - self.data_profile = {} - profile = self.update_status.read_data() - profile_1 = profile.get('Profile_1') - self.verificate() - - def verificate(self, value='tor'): - # Verificar el valor de key - if value == "just proxy": - self.display0.show() - self.label.hide() - elif value == "tor": - self.display0.show() - self.label.show() # Colocar display2 debajo de otros widgets - - else: - pass - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - ''' - for j, (object_type, icon_name, geometry) in enumerate([ - (QPushButton, "brazil", (585, 90, 185, 75)), - (QPushButton, "germany", (585, 170, 185, 75)), - (QPushButton, "eeuu", (585, 250, 185, 75)), - (QPushButton, "united kingdom", (585, 330, 185, 75)), - (QPushButton, "hong kong", (585, 410, 185, 75)) - ]): - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - boton.setIcon(QIcon(os.path.join(self.btn_path, f"{{icon_name}}_button.png"))) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - boton.clicked.connect(lambda _, dimentions=icon_name: self.show_dimentions(dimentions)) - - boton.show() - ''' - - def show_dimentions(self, dimentions): - self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{dimentions} garaje.png")).scaled( - self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - self.selected_dimentions_icon = dimentions - self.button_go.setVisible(True) - self.update_swarp_json() - - def update_swarp_json(self): - inserted_data = { - "country_garaje": self.selected_dimentions_icon - } - self.update_status.write_data(inserted_data) - - def reverse_selected(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ResidentialPage))) - - def go_selected(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(BrowserPage))) - - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_go.setVisible(False) - - -class TorLocationPage(Page): - def __init__(self, page_stack, parent=None): - super().__init__("TorPage", page_stack, parent) - pass - - -class ConnectionPage(Page): - def __init__(self, page_stack, parent=None): - super().__init__("Connection", page_stack, parent) - - self.create_interface_elements() - - def create_interface_elements(self): - self.display.setGeometry(QtCore.QRect(5, 50, 390, 430)) - self.title.setGeometry(QtCore.QRect(465, 40, 300, 20)) - self.title.setText("Pick a TOR") - - labels_info = [ - ("server", None, (410, 115)), - ("", "rr2", (560, 115)), - ("port", None, (410, 205)), - ("", "rr2", (560, 205)), - ("username", None, (410, 295)), - ("", "rr2", (560, 295)), - ("password", None, (410, 385)), - ("", "rr2", (560, 385)) - ] - - for j, (text, image_name, position) in enumerate(labels_info): - label = QLabel(self) - label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - # Si hay un nombre de imagen, usar el tamaño predeterminado (220x50) - if image_name: - label.setGeometry(position[0], position[1], 220, 50) - # Si no hay una imagen, usar el tamaño personalizado (130x30) - else: - label.setGeometry(position[0], position[1], 140, 50) - label.setStyleSheet( - "background-color: rgba(255, 255, 255, 51); padding: 3px;") - - if image_name: # Si hay un nombre de imagen, crear una QLabel con la imagen - pixmap = QPixmap(os.path.join( - self.btn_path, f"{image_name}.png")) - label.setPixmap(pixmap) - # Escalar contenido para ajustarlo al tamaño del QLabel - label.setScaledContents(True) - else: # Si no hay una imagen, crear una QLabel con el texto - label.setText(text) - - -class LocationPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Location", page_stack, main_window, parent) - self.selected_location_icon = None - self.update_status = main_window - self.button_reverse.setVisible(True) - self.connection_manager = main_window.connection_manager - self.button_reverse.clicked.connect(self.reverse) - self.display.setGeometry(QtCore.QRect(5, 10, 390, 520)) - self.title.setGeometry(395, 40, 380, 40) - self.title.setText("Pick a location") - - self.initial_display = QLabel(self) - self.initial_display.setGeometry(5, 22, 355, 485) - self.initial_display.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.initial_display.setWordWrap(True) - - self.verification_button = QPushButton("More Info", self) - self.verification_button.setGeometry(0, 50, 160, 40) - self.verification_button.setStyleSheet(f""" - QPushButton {{ - background-color: rgba(60, 80, 120, 1.0); - border: 2px solid rgba(100, 140, 200, 1.0); - border-radius: 5px; - color: rgb(255, 255, 255); - font-size: 15px; - font-weight: bold; - padding: 5px 10px; - }} - QPushButton:hover {{ - background-color: rgba(80, 100, 140, 1.0); - border: 2px solid rgba(120, 160, 220, 1.0); - }} - QPushButton:disabled {{ - background-color: rgba(40, 50, 70, 0.6); - border: 2px solid rgba(70, 90, 110, 0.6); - opacity: 0.5; - }} - """) - self.verification_button.setCursor( - QtCore.Qt.CursorShape.PointingHandCursor) - self.verification_button.setEnabled(False) - self.verification_button.show() - - def showEvent(self, event): - super().showEvent(event) - self.button_next.setVisible(False) - for button in self.buttons: - button.setChecked(False) - if hasattr(self, 'verification_button'): - self.verification_button.setEnabled(False) - - def create_interface_elements(self, available_locations): - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - - for j, (object_type, icon_name, geometry) in enumerate(available_locations): - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - - locations = self.connection_manager.get_location_info(icon_name) - if locations and not (hasattr(locations, 'is_wireguard_capable') and locations.is_wireguard_capable): - boton.setVisible(False) - icon_path = os.path.join(self.btn_path, f"button_{icon_name}.png") - boton.setIcon(QIcon(icon_path)) - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - if boton.icon().isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - base_image = LocationPage.create_location_button_image( - location_name, fallback_path, provider) - boton.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider) - boton.setIcon(QIcon(base_image)) - else: - if locations and hasattr(locations, 'country_name'): - base_image = LocationPage.create_location_button_image( - f'{locations.country_code}_{locations.code}', fallback_path, provider, icon_path) - boton.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider, icon_path) - boton.setIcon(QIcon(base_image)) - - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - boton.location_icon_name = icon_name - boton.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - boton.clicked.connect( - lambda checked, loc=icon_name: self.show_location(loc)) - - def update_swarp_json(self, get_connection=False): - profile_data = self.update_status.read_data() - self.connection_type = profile_data.get("connection", "") - if get_connection: - return self.connection_type - inserted_data = { - "location": self.selected_location_icon - } - self.update_status.write_data(inserted_data) - - def show_location(self, location): - self.initial_display.hide() - - max_size = QtCore.QSize(300, 300) - target_size = self.display.size().boundedTo(max_size) - - self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"icon_{location}.png")).scaled( - target_size, Qt.AspectRatioMode.KeepAspectRatio)) - self.selected_location_icon = location - self.button_next.setVisible(True) - self.button_next.clicked.connect(self.go_selected) - self.update_swarp_json() - - try: - self.verification_button.clicked.disconnect() - except TypeError: - pass - - self.verification_button.clicked.connect( - lambda: self.show_location_verification(location)) - self.verification_button.setEnabled(True) - - def reverse(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - def go_selected(self): - if self.connection_type == "system-wide": - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ResumePage))) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(BrowserPage))) - - def show_location_verification(self, location_icon_name): - verification_page = LocationVerificationPage( - self.page_stack, self.update_status, location_icon_name, self) - self.page_stack.addWidget(verification_page) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(verification_page)) - - @staticmethod - def create_location_button_image(location_name, fallback_image_path, provider=None, existing_icon_path=None): - if existing_icon_path: - base_image = QPixmap(existing_icon_path) - if base_image.isNull(): - base_image = QPixmap(fallback_image_path) - draw_location_text = False - else: - base_image = QPixmap(fallback_image_path) - draw_location_text = True - - if base_image.isNull(): - return base_image - - painter = QPainter(base_image) - try: - if draw_location_text: - font_size = 12 - app_font = QApplication.font() - app_font.setPointSize(font_size) - app_font.setWeight(QFont.Weight.Bold) - text_length = len(location_name) - - if text_length <= 10: - font_stretch = 100 - text_width_scale = 1.1 - text_height_scale = 1.4 - elif text_length <= 15: - font_stretch = 90 - text_width_scale = 1.0 - text_height_scale = 2 - else: - font_stretch = 100 - text_width_scale = 1.1 - text_height_scale = 4.5 - app_font.setStretch(font_stretch) - painter.setFont(app_font) - painter.setPen(QColor(0, 255, 255)) - - text_rect = painter.fontMetrics().boundingRect(location_name) - max_width = 110 - - while text_rect.width() > max_width: - font_size -= 1 - app_font.setPointSize(font_size) - app_font.setWeight(QFont.Weight.Bold) - painter.setFont(app_font) - text_rect = painter.fontMetrics().boundingRect(location_name) - - x = ((base_image.width() - text_rect.width()) // 2) - 30 - y = ((base_image.height() + text_rect.height()) // 2) - 15 - - from PyQt6.QtGui import QTransform - transform = QTransform() - transform.scale(text_width_scale, text_height_scale) - painter.setTransform(transform) - - x_scaled = int(x / text_width_scale) - y_scaled = int(y / text_height_scale) - - shadow_offset = 1 - painter.setPen(QColor(0, 0, 0)) - painter.drawText(x_scaled + shadow_offset, - y_scaled + shadow_offset, location_name) - - painter.setPen(QColor(0, 255, 255)) - painter.drawText(x_scaled, y_scaled, location_name) - - painter.setTransform(QTransform()) - - if provider: - - painter.setPen(QColor(128, 128, 128)) - - provider_text_font = QApplication.font() - provider_text_font.setPointSize(7) - provider_text_font.setWeight(QFont.Weight.Normal) - painter.setFont(provider_text_font) - provider_text_rect = painter.fontMetrics().boundingRect(provider) - - provider_x = ( - (base_image.width() - provider_text_rect.width()) // 2) - 30 - provider_y = 50 - px = int(provider_x) - py = int(provider_y) - - painter.setFont(provider_text_font) - painter.drawText(px + 5, py + 2, provider) - finally: - painter.end() - return base_image - - -class BrowserPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Browser", page_stack, main_window, parent) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.selected_browser_icon = None - self.display.setGeometry(QtCore.QRect(5, 10, 390, 520)) - self.title.setGeometry(395, 40, 380, 40) - self.title.setText("Pick a Browser") - self.button_back.setVisible(True) - - def create_interface_elements(self, available_browsers): - self._setup_scroll_area() - button_widget = self._create_button_widget() - self._populate_button_widget(button_widget, available_browsers) - self.scroll_area.setWidget(button_widget) - - def _setup_scroll_area(self): - self.scroll_area = QScrollArea(self) - self.scroll_area.setGeometry(400, 90, 385, 400) - self.scroll_area.setWidgetResizable(True) - self.scroll_area.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - self._apply_scroll_area_style() - - def _apply_scroll_area_style(self): - self.scroll_area.setStyleSheet(""" - QScrollArea { - background: transparent; - border: none; - } - QScrollBar:vertical { - border: 1px solid white; - background: white; - width: 10px; - margin: 0px 0px 0px 0px; - } - QScrollBar::handle:vertical { - background: cyan; - min-height: 0px; - } - QScrollBar::add-line:vertical { - height: 0px; - subcontrol-position: bottom; - subcontrol-origin: margin; - } - QScrollBar::sub-line:vertical { - height: 0px; - subcontrol-position: top; - subcontrol-origin: margin; - } - """) - - def _create_button_widget(self): - button_widget = QWidget() - button_widget.setStyleSheet("background: transparent;") - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - return button_widget - - def _populate_button_widget(self, button_widget, available_browsers): - - dimensions = self._get_button_dimensions() - total_height = self._create_browser_buttons( - button_widget, available_browsers, dimensions) - self._set_final_widget_size(button_widget, dimensions, total_height) - - def _get_button_dimensions(self): - return { - 'width': 185, - 'height': 75, - 'spacing': 20, - 'x_offset': 195 - } - - def _create_browser_buttons(self, button_widget, browser_icons, dims): - total_height = 0 - for browser_tuple in browser_icons: - _, browser_string, geometry = browser_tuple - x_coord = geometry[0] - 395 - y_coord = geometry[1] - 90 - self._create_single_button( - button_widget, browser_string, x_coord, y_coord, dims) - total_height = max(total_height, y_coord + dims['height']) - return total_height - - def _create_single_button(self, parent, icon_name, x_coord, y_coord, dims): - button = QPushButton(parent) - button.setFixedSize(dims['width'], dims['height']) - button.move(x_coord, y_coord) - button.setIconSize(button.size()) - button.setCheckable(True) - - browser_name, version = icon_name.split(':') - button.setIcon(QIcon(BrowserPage.create_browser_button_image( - f"{browser_name} {version}", self.btn_path))) - if button.icon().isNull(): - fallback_path = os.path.join( - self.btn_path, "default_browser_button.png") - button.setIcon(QIcon(BrowserPage.create_browser_button_image( - f"{browser_name} {version}", fallback_path, True))) - self._apply_button_style(button) - - self.buttons.append(button) - self.buttonGroup.addButton(button) - button.clicked.connect( - lambda _, b=icon_name: self.show_browser(b.replace(':', ' '))) - - @staticmethod - def create_browser_button_image(browser_text, btn_path, is_fallback=False): - - if ':' in browser_text: - browser_name, version = browser_text.split(':', 1) - else: - browser_name, version = browser_text.split( - )[0], ' '.join(browser_text.split()[1:]) - if is_fallback: - base_image = QPixmap(btn_path) - else: - base_image = QPixmap(os.path.join( - btn_path, f"{browser_name}_button.png")) - - if base_image.isNull(): - base_image = QPixmap(185, 75) - base_image.fill(QColor(44, 62, 80)) - - painter = QPainter(base_image) - if painter.isActive(): - BrowserPage._setup_version_font(painter, version, base_image) - if is_fallback: - BrowserPage._setup_browser_name( - painter, browser_name, base_image) - painter.end() - return base_image - - @staticmethod - def _setup_browser_name(painter, browser_name, base_image): - font_size = 13 - app_font = QApplication.font() - app_font.setPointSize(font_size) - app_font.setWeight(QFont.Weight.Bold) - painter.setFont(app_font) - painter.setPen(QColor(0, 255, 255)) - text_rect = painter.fontMetrics().boundingRect(browser_name) - while text_rect.width() > base_image.width() * 0.6 and font_size > 6: - font_size -= 1 - - x = (base_image.width() - text_rect.width()) // 2 - 30 - y = (base_image.height() + text_rect.height()) // 2 - 10 - painter.drawText(x, y, browser_name) - - @staticmethod - def _setup_version_font(painter, version, base_image): - font_size = 11 - painter.setFont(QFont('Arial', font_size)) - painter.setPen(QColor(0x88, 0x88, 0x88)) - text_rect = painter.fontMetrics().boundingRect(version) - while text_rect.width() > base_image.width() * 0.6 and font_size > 6: - font_size -= 1 - painter.setFont(QFont('Arial', font_size)) - text_rect = painter.fontMetrics().boundingRect(version) - - x = (base_image.width() - text_rect.width()) // 2 - 27 - y = (base_image.height() + text_rect.height()) // 2 + 10 - painter.drawText(x, y, version) - - def _apply_button_style(self, button): - button.setStyleSheet(""" - QPushButton { - background: transparent; - border: none; - } - QPushButton:hover { - background-color: rgba(200, 200, 200, 30); - } - QPushButton:checked { - background-color: rgba(200, 200, 200, 50); - } - """) - - def _set_final_widget_size(self, widget, dims, total_height): - widget.setFixedSize(dims['width'] * 2 + 5, - total_height + dims['spacing']) - - def show_browser(self, browser): - browser_name, version = browser.split( - )[0], ' '.join(browser.split()[1:]) - try: - base_image = self._create_browser_display_image( - browser_name, version) - self.display.setPixmap(base_image.scaled( - self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - except Exception: - pass - self.selected_browser_icon = browser - self.button_next.setVisible(True) - self.update_swarp_json() - - def _create_browser_display_image(self, browser_name, version): - base_image = QPixmap(os.path.join( - self.btn_path, f"{browser_name}_icon.png")) - painter = QPainter(base_image) - painter.setFont(QFont('Arial', 25)) - painter.setPen(QColor(0, 255, 255)) - - text_rect = painter.fontMetrics().boundingRect(version) - x = (base_image.width() - text_rect.width()) // 2 - y = base_image.height() - 45 - - painter.drawText(x, y, version) - painter.end() - return base_image - - def update_swarp_json(self): - inserted_data = { - "browser": self.selected_browser_icon - } - - self.update_status.write_data(inserted_data) - - -class ScreenPage(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Screen", page_stack, main_window, parent) - self.selected_dimentions = None - self.update_status = main_window - self.selected_dimentions_icon = None - self.button_back.setVisible(True) - self.title.setGeometry(585, 40, 200, 40) - self.title.setText("Pick a Resolution") - self.host_screen_info = QLabel( - f"Host: {self.custom_window.host_screen_width}x{self.custom_window.host_screen_height}", self) - self.host_screen_info.setGeometry(QtCore.QRect(355, 30, 200, 30)) - self.host_screen_info.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.host_screen_info.setStyleSheet( - "color: #00ffff; font-size: 14px; font-weight: bold;") - self.host_screen_info.show() - - self.display.setGeometry(QtCore.QRect(5, 50, 580, 435)) - self.showing_larger_resolutions = False - self.larger_resolution_buttons = [] - self.create_interface_elements() - - def create_interface_elements(self): - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - resolutions = [ - ("800x600", (595, 90, 180, 70)), - ("1024x760", (595, 170, 180, 70)), - ("1152x1080", (595, 250, 180, 70)), - ("1280x1024", (595, 330, 180, 70)), - ("1920x1080", (595, 410, 180, 70)) - ] - valid_resolutions = [] - for res, geom in resolutions: - w, h = map(int, res.split('x')) - if w < self.custom_window.host_screen_width and h < self.custom_window.host_screen_height: - valid_resolutions.append((QPushButton, res, geom)) - - for j, (object_type, icon_name, geometry) in enumerate(valid_resolutions): - boton = object_type(self) - boton.setGeometry(*geometry) - boton.setIconSize(boton.size()) - boton.setCheckable(True) - boton.setIcon( - QIcon(self.create_resolution_button_image(icon_name))) - self.buttons.append(boton) - self.buttonGroup.addButton(boton, j) - boton.clicked.connect( - lambda _, dimentions=icon_name: self.show_dimentions(dimentions)) - - self.larger_resolutions_button = QPushButton(self) - self.larger_resolutions_button.setGeometry(100, 450, 185, 50) - self.larger_resolutions_button.setIconSize( - self.larger_resolutions_button.size()) - self.larger_resolutions_button.setIcon( - QIcon(self.create_resolution_button_image("Larger Resolutions"))) - self.larger_resolutions_button.clicked.connect( - self.show_larger_resolutions) - - self.custom_resolution_button = QPushButton(self) - self.custom_resolution_button.setGeometry(300, 450, 195, 50) - self.custom_resolution_button.setIconSize( - self.custom_resolution_button.size()) - self.custom_resolution_button.setIcon( - QIcon(self.create_resolution_button_image("Custom Resolution"))) - self.custom_resolution_button.clicked.connect( - self.show_custom_resolution_dialog) - - def create_resolution_button_image(self, resolution_text): - template_path = os.path.join( - self.btn_path, "resolution_template_button.png") - - if os.path.exists(template_path): - base_image = QPixmap(template_path) - if 'Resolution' in resolution_text: - base_image = base_image.scaled(195, 50) - font_size = 10 - else: - base_image = base_image.scaled(187, 75) - font_size = 13 - else: - base_image = QPixmap(185, 75) - base_image.fill(QColor(44, 62, 80)) - font_size = 13 - - painter = QPainter(base_image) - painter.setRenderHint(QPainter.RenderHint.Antialiasing) - - font = QFont() - font.setPointSize(font_size) - font.setBold(True) - painter.setFont(font) - - painter.setPen(QColor(0, 255, 255)) - - text_rect = base_image.rect() - painter.drawText(text_rect, Qt.AlignmentFlag.AlignCenter | - Qt.AlignmentFlag.AlignVCenter, resolution_text) - - painter.end() - return base_image - - def show_larger_resolutions(self): - if self.showing_larger_resolutions: - self.hide_larger_resolutions() - else: - self.hide_standard_resolutions() - self.showing_larger_resolutions = True - self.larger_resolutions_button.setIcon( - QIcon(self.create_resolution_button_image("Standard Resolutions"))) - - larger_resolutions_list = [ - ("2560x1600", (595, 90, 180, 70)), - ("2560x1440", (595, 170, 180, 70)), - ("1920x1440", (595, 250, 180, 70)), - ("1792x1344", (595, 330, 180, 70)), - ("2048x1152", (595, 410, 180, 70)) - ] - - valid_larger = [] - for res, geom in larger_resolutions_list: - w, h = map(int, res.split('x')) - if w < self.custom_window.host_screen_width and h < self.custom_window.host_screen_height: - valid_larger.append((res, geom)) - - for i, (resolution, geometry) in enumerate(valid_larger): - button = QPushButton(self) - button.setGeometry(*geometry) - button.setIconSize(button.size()) - button.setCheckable(True) - button.setVisible(True) - button.setIcon( - QIcon(self.create_resolution_button_image(resolution))) - button.clicked.connect( - lambda _, res=resolution: self.show_dimentions(res)) - self.larger_resolution_buttons.append(button) - self.buttonGroup.addButton(button, len(self.buttons) + i) - - def hide_larger_resolutions(self): - for button in self.larger_resolution_buttons: - self.buttonGroup.removeButton(button) - button.deleteLater() - self.larger_resolution_buttons.clear() - self.showing_larger_resolutions = False - self.larger_resolutions_button.setIcon( - QIcon(self.create_resolution_button_image("Larger Resolutions"))) - self.show_standard_resolutions() - - def hide_standard_resolutions(self): - for button in self.buttons: - button.setVisible(False) - - def show_standard_resolutions(self): - for button in self.buttons: - button.setVisible(True) - - def show_custom_resolution_dialog(self): - dialog = QDialog(self) - dialog.setWindowTitle("Custom Resolution") - dialog.setFixedSize(300, 150) - dialog.setModal(True) - dialog.setStyleSheet(""" - QDialog { - background-color: #2c3e50; - border: 2px solid #00ffff; - border-radius: 10px; - } - QLabel { - color: white; - font-size: 12px; - } - QLineEdit { - background-color: #34495e; - color: white; - border: 1px solid #00ffff; - border-radius: 5px; - padding: 5px; - font-size: 12px; - } - QPushButton { - background-color: #2c3e50; - color: white; - border: 2px solid #00ffff; - border-radius: 5px; - padding: 8px; - font-size: 12px; - } - QPushButton:hover { - background-color: #34495e; - } - """) - - layout = QVBoxLayout() - - input_layout = QHBoxLayout() - width_label = QLabel("Width:") - width_input = QLineEdit() - width_input.setPlaceholderText("1920") - height_label = QLabel("Height:") - height_input = QLineEdit() - height_input.setPlaceholderText("1080") - - input_layout.addWidget(width_label) - input_layout.addWidget(width_input) - input_layout.addWidget(height_label) - input_layout.addWidget(height_input) - - button_layout = QHBoxLayout() - ok_button = QPushButton("OK") - cancel_button = QPushButton("Cancel") - - button_layout.addWidget(cancel_button) - button_layout.addWidget(ok_button) - - layout.addLayout(input_layout) - layout.addLayout(button_layout) - dialog.setLayout(layout) - - def validate_and_accept(): - try: - width = int(width_input.text()) - height = int(height_input.text()) - - if width <= 0 or height <= 0: - QMessageBox.warning( - dialog, "Invalid Resolution", "Width and height must be positive numbers.") - return - - host_w = self.custom_window.host_screen_width - host_h = self.custom_window.host_screen_height - - adjusted = False - if width > host_w: - width = host_w - 50 - adjusted = True - if height > host_h: - height = host_h - 50 - adjusted = True - - if adjusted: - QMessageBox.information( - dialog, "Notice", "Adjusted to fit host size") - - if width > 10000 or height > 10000: - QMessageBox.warning( - dialog, "Invalid Resolution", "Resolution too large. Maximum 10000x10000.") - return - - custom_resolution = f"{width}x{height}" - self.show_dimentions(custom_resolution) - dialog.accept() - - except ValueError: - QMessageBox.warning( - dialog, "Invalid Input", "Please enter valid numbers for width and height.") - - ok_button.clicked.connect(validate_and_accept) - cancel_button.clicked.connect(dialog.reject) - - width_input.returnPressed.connect(validate_and_accept) - height_input.returnPressed.connect(validate_and_accept) - - dialog.exec() - - def update_swarp_json(self): - inserted_data = { - "dimentions": self.selected_dimentions_icon - } - - self.update_status.write_data(inserted_data) - - def show_dimentions(self, dimentions): - try: - image_path = os.path.join(self.btn_path, f"{dimentions}.png") - if os.path.exists(image_path): - self.display.setPixmap(QPixmap(image_path).scaled( - self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - else: - self.create_resolution_preview_image(dimentions) - except: - self.display.clear() - - self.selected_dimentions_icon = dimentions - self.button_next.setVisible(True) - self.update_swarp_json() - - def create_resolution_preview_image(self, resolution_text): - template_path = os.path.join(self.btn_path, "resolution_template.png") - - if os.path.exists(template_path): - base_image = QPixmap(template_path) - base_image = base_image.scaled( - 580, 435, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) - else: - base_image = QPixmap(580, 435) - base_image.fill(QColor(44, 62, 80)) - - painter = QPainter(base_image) - painter.setRenderHint(QPainter.RenderHint.Antialiasing) - - try: - width, height = map(int, resolution_text.split('x')) - gcd = self._gcd(width, height) - aspect_ratio = f"{width//gcd}:{height//gcd}" - except: - aspect_ratio = "" - - font = QFont() - font.setPointSize(24) - font.setBold(True) - painter.setFont(font) - painter.setPen(QColor(0, 255, 255)) - - text_rect = base_image.rect() - painter.drawText( - text_rect, Qt.AlignmentFlag.AlignCenter, resolution_text) - - if aspect_ratio: - font.setPointSize(16) - painter.setFont(font) - painter.setPen(QColor(200, 200, 200)) - - aspect_rect = QRect( - text_rect.x(), text_rect.y() + 80, text_rect.width(), 40) - painter.drawText( - aspect_rect, Qt.AlignmentFlag.AlignCenter, f"({aspect_ratio})") - - painter.end() - - self.display.setPixmap(base_image) - - def _gcd(self, a, b): - while b: - a, b = b, a % b - return a - - -class ResumePage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Resume", page_stack, main_window, parent) - self.update_status = main_window - self.connection_manager = main_window.connection_manager - self.btn_path = main_window.btn_path - self.labels_creados = [] - self.additional_labels = [] - self.button_go.clicked.connect(self.copy_profile) - self.button_back.setVisible(True) - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Profile Summary") - self.display.setGeometry(QtCore.QRect(5, 50, 580, 435)) # relacion 4:3 - self.buttonGroup = QButtonGroup(self) - self.button_back.clicked.connect(self.reverse) - self.create_arrow() - self.create_interface_elements() - - def reverse(self): - if self.connection_type == "system-wide": - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(LocationPage))) - else: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ScreenPage))) - - def show_location_verification(self, location_icon_name): - verification_page = LocationVerificationPage( - self.page_stack, self.update_status, location_icon_name, self) - self.page_stack.addWidget(verification_page) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(verification_page)) - - def create_arrow(self): - self.arrow_label = QLabel(self) - self.arrow_label.setGeometry(400, 115, 200, 200) - arrow_pixmap = QPixmap(os.path.join(self.btn_path, "arrow.png")) - - self.arrow_label.setPixmap(arrow_pixmap) - self.arrow_label.setScaledContents(True) - - self.arrow_label.raise_() - - def showEvent(self, event): - super().showEvent(event) - self.arrow_label.show() - self.arrow_label.raise_() - - def create_interface_elements(self): - for j, (object_type, icon_name, geometry) in enumerate([ - (QLineEdit, None, (130, 73, 300, 24)), - (QLabel, None, (0, 0, 0, 0)) - ]): - - if object_type == QLabel: - label = object_type(self) - label.setGeometry(*geometry) - icon_path = os.path.join( - self.btn_path, f"{icon_name}_button.png") - if os.path.exists(icon_path): - label.setPixmap(QPixmap(icon_path)) - locations = self.connection_manager.get_location_info( - icon_name) - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - if label.pixmap().isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - label.setPixmap(LocationPage.create_location_button_image( - location_name, os.path.join(self.btn_path, "default_location_button.png"), provider)) - else: - label.setPixmap(LocationPage.create_location_button_image( - '', os.path.join(self.btn_path, "default_location_button.png"), provider)) - else: - if locations and hasattr(locations, 'country_name'): - label.setPixmap(LocationPage.create_location_button_image(f'{locations.country_code}_{locations.code}', os.path.join( - self.btn_path, "default_location_button.png"), provider, icon_path)) - else: - label.setPixmap(LocationPage.create_location_button_image('', os.path.join( - self.btn_path, "default_location_button.png"), provider, icon_path)) - elif object_type == QLineEdit: - # Define line_edit como un atributo de la clase ResumePage - self.line_edit = object_type(self) - self.line_edit.setGeometry(*geometry) - self.line_edit.setMaxLength(13) - self.line_edit.textChanged.connect( - self.toggle_button_visibility) - self.line_edit.setStyleSheet( - "background-color: transparent; border: none; color: cyan;") - self.line_edit.setPlaceholderText("Enter profile name") - self.line_edit.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.create() - - def create(self): - for label in self.additional_labels: - label.deleteLater() - self.additional_labels.clear() - - profile_1 = self.update_status.read_data() - self.connection_type = profile_1.get("connection", "") - connection_exists = 'connection' in profile_1 - - if connection_exists and profile_1['connection'] not in ["tor", "just proxy"]: - items = ["protocol", "connection", - "location", "browser", "dimentions"] - initial_y = 90 - label_height = 80 - elif connection_exists: # si la conexión existe pero su texto es 'tor' o 'just proxy' - items = ["protocol", "connection", - "location", "browser", "dimentions"] - initial_y = 90 - label_height = 80 - else: - items = ["protocol", "location", "browser", "dimentions"] - initial_y = 90 - label_height = 105 - for i, item in enumerate(items): - text = profile_1.get(item, "") - if text: - if item == 'browser': - base_image = BrowserPage.create_browser_button_image( - text, self.btn_path) - geometry = (585, initial_y + i * label_height, 185, 75) - parent_label = QLabel(self) - parent_label.setGeometry(*geometry) - parent_label.setPixmap(base_image) - if parent_label.pixmap().isNull(): - fallback_path = os.path.join( - self.btn_path, "default_browser_button.png") - base_image = BrowserPage.create_browser_button_image( - text, fallback_path, True) - parent_label.setPixmap(base_image) - parent_label.show() - self.labels_creados.append(parent_label) - elif item == 'location': - icon_path = os.path.join( - self.btn_path, f"button_{text}.png") - geometry = (585, initial_y + i * label_height, 185, 75) - parent_label = QPushButton(self) - parent_label.setGeometry(*geometry) - parent_label.setFlat(True) - parent_label.setStyleSheet( - "background: transparent; border: none;") - location_pixmap = QPixmap(icon_path) - locations = self.connection_manager.get_location_info(text) - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - if location_pixmap.isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - base_image = LocationPage.create_location_button_image( - location_name, fallback_path, provider) - parent_label.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider) - parent_label.setIcon(QIcon(base_image)) - else: - if locations and hasattr(locations, 'country_name'): - base_image = LocationPage.create_location_button_image( - f'{locations.country_code}_{locations.code}', fallback_path, provider, icon_path) - parent_label.setIcon(QIcon(base_image)) - else: - base_image = LocationPage.create_location_button_image( - '', fallback_path, provider, icon_path) - parent_label.setIcon(QIcon(base_image)) - parent_label.setIconSize(QSize(185, 75)) - parent_label.location_icon_name = text - parent_label.setCursor( - QtCore.Qt.CursorShape.PointingHandCursor) - parent_label.clicked.connect( - lambda checked, loc=text: self.show_location_verification(loc)) - parent_label.show() - self.labels_creados.append(parent_label) - elif item == 'dimentions': - base_image = ScreenPage.create_resolution_button_image( - self, text) - geometry = (585, initial_y + i * label_height, 185, 75) - parent_label = QLabel(self) - parent_label.setGeometry(*geometry) - parent_label.setPixmap(base_image) - parent_label.show() - self.labels_creados.append(parent_label) - else: - icon_path = os.path.join( - self.btn_path, f"{text}_button.png") - geometry = (585, initial_y + i * label_height, 185, 75) - parent_label = QLabel(self) - parent_label.setGeometry(*geometry) - parent_label.setPixmap(QPixmap(icon_path)) - parent_label.show() - self.labels_creados.append(parent_label) - location_text = profile_1.get("location", "") - location_info = self.connection_manager.get_location_info( - location_text) - operator_name = "" - if location_info and hasattr(location_info, 'operator') and location_info.operator: - operator_name = location_info.operator.name or "" - - if operator_name != 'Simplified Privacy' and operator_name != "": - text_color = "white" - if self.connection_type != "system-wide": - text_color = "black" - image_name = "browser only.png" - image_path = os.path.join(self.btn_path, image_name) - label_background = QLabel(self) - label_background.setGeometry(10, 50, 535, 460) - label_background.setPixmap(QPixmap(image_path)) - label_background.setScaledContents(True) - label_background.show() - label_background.lower() - self.labels_creados.append(label_background) - - l_img = QLabel(self) - l_img.setGeometry(30, 135, 150, 150) - pixmap_loc = QPixmap(os.path.join( - self.btn_path, f"icon_{location_text}.png")) - l_img.setPixmap(pixmap_loc) - l_img.setScaledContents(True) - l_img.show() - self.labels_creados.append(l_img) - - l_name = f"{location_info.country_name}, {location_info.name}" if location_info and hasattr( - location_info, 'country_name') else "" - o_name = operator_name - n_key = location_info.operator.nostr_public_key if location_info and hasattr( - location_info, 'operator') and location_info.operator else "" - - info_txt = QTextEdit(self) - info_txt.setGeometry(190, 130, 310, 250) - info_txt.setReadOnly(True) - info_txt.setFrameStyle(QFrame.Shape.NoFrame) - info_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 19px;") - info_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere) - info_txt.setText(f"Location: {l_name}\n\nOperator: {o_name}") - info_txt.show() - self.labels_creados.append(info_txt) - - nostr_txt = QTextEdit(self) - nostr_txt.setGeometry(30, 310, 480, 170) - nostr_txt.setReadOnly(True) - nostr_txt.setFrameStyle(QFrame.Shape.NoFrame) - nostr_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 21px;") - nostr_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAnywhere) - nostr_txt.setText(f"Nostr: {n_key}") - nostr_txt.show() - self.labels_creados.append(nostr_txt) - - elif connection_exists: - print('inside connection_exists') - if profile_1.get("connection", "") == "system-wide": - image_path = os.path.join( - self.btn_path, f"wireguard_{profile_1.get('location', '')}.png") - main_label = QLabel(self) - main_label.setGeometry(10, 130, 500, 375) - main_label.setPixmap(QPixmap(image_path)) - main_label.setScaledContents(True) - main_label.show() - self.labels_creados.append(main_label) - - if profile_1.get("connection", "") == "just proxy": - image_path = os.path.join( - self.btn_path, f"icon_{profile_1.get('location', '')}.png") - main_label = QLabel(self) - main_label.setGeometry(10, 105, 530, 398) - main_label.setPixmap(QPixmap(image_path)) - main_label.setScaledContents(True) - main_label.show() - self.labels_creados.append(main_label) - if profile_1.get("connection", "") == "tor": - image_path = os.path.join( - self.btn_path, f"hdtor_{profile_1.get('location', '')}.png") - main_label = QLabel(self) - main_label.setGeometry(10, 105, 530, 398) - main_label.setPixmap(QPixmap(image_path)) - main_label.setScaledContents(True) - main_label.show() - self.labels_creados.append(main_label) - if profile_1.get("connection", "") == "browser-only": - image_name = "browser only.png" - image_path = os.path.join(self.btn_path, image_name) - label_background = QLabel(self) - label_background.setGeometry(10, 50, 535, 460) - label_background.setPixmap(QPixmap(image_path)) - label_background.setScaledContents(True) - label_background.show() - label_background.lower() - self.labels_creados.append(label_background) - image_path = os.path.join( - self.btn_path, f"wireguard_{profile_1.get('location', '')}.png") - main_label = QLabel(self) - main_label.setGeometry(10, 130, 500, 375) - main_label.setPixmap(QPixmap(image_path)) - main_label.setScaledContents(True) - main_label.show() - self.labels_creados.append(main_label) - else: - image_path = os.path.join( - self.btn_path, f"icon_{profile_1.get('location', '')}.png") - main_label = QLabel(self) - main_label.setGeometry(10, 130, 500, 375) - main_label.setPixmap(QPixmap(image_path)) - main_label.setScaledContents(True) - main_label.show() - self.labels_creados.append(main_label) - - if hasattr(self, 'arrow_label'): - self.arrow_label.raise_() - - def toggle_button_visibility(self): - self.button_go.setVisible(bool(self.line_edit.text())) - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - def copy_profile(self): - # Obtener el nombre del perfil ingresado en el QLineEdit - profile_name = self.line_edit.text() - menu_page = self.find_menu_page() - if menu_page: - number_of_profiles = menu_page.number_of_profiles - - # Abrir y cargar los datos de swarp.json - profile_data = self.update_status.read_data() - - # Verificar si los campos necesarios están llenos - required_fields = [profile_data.get("protocol"), profile_name] - if not all(required_fields): - print("Error: Some required fields are empty!") - return - - # Actualizar el nombre del perfil con el texto ingresado - profile_data["name"] = profile_name - profile_data["visible"] = "yes" - - # profile_id = int(number_of_profiles) + 1 - profiles = ProfileController.get_all() - profile_id = self.get_next_available_id(profiles) - new_profile = profile_data - - self.create_core_profiles(new_profile, profile_id) - - main = self.update_status - if hasattr(main, 'navigate_after_profile_created'): - main.navigate_after_profile_created() - else: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - self.update_status.clear_data() - - # Limpiar el QLineEdit - self.line_edit.clear() - self.display.clear() - self.button_go.setVisible(False) - - def get_next_available_id(self, profiles: dict) -> int: - if not profiles: - return 1 - - existing_ids = sorted(profiles.keys()) - - for i in range(1, max(existing_ids) + 2): - if i not in existing_ids: - return i - - return None - - def create_core_profiles(self, profile, id): - if profile.get('connection') != 'system-wide': - browser_info = profile.get('browser', '').split() - if len(browser_info) < 2: - self.update_status.update_status( - 'Application version not supported') - return - - application = f"{browser_info[0].lower()}:{browser_info[1]}" - else: - application = '' - - parts = profile.get('location').split('_') - country_code = parts[0] - location_code = parts[1] - if profile.get('protocol') == 'wireguard': - connection_type = 'wireguard' - elif profile.get('protocol') == 'hidetor' or profile.get('protocol') == 'residential': - if profile.get('connection') == 'tor': - connection_type = 'tor' - elif profile.get('connection') == 'just proxy': - connection_type = 'system' - else: - self.update_status.update_status('Connection type not supported') - return - - profile_data = { - 'id': int(id), - 'name': profile.get('name'), - 'country_code': country_code, - 'code': location_code, - 'application': application, - 'connection_type': connection_type, - 'resolution': profile.get('dimentions', ''), - } - profile_type = 'system' if profile.get( - 'connection') == 'system-wide' else 'session' - action = f'CREATE_{profile_type.upper()}_PROFILE' - - self.handle_core_action_create_profile( - action, profile_data, profile_type) - - def eliminacion(self): - for label in self.labels_creados: - label.deleteLater() - - # Limpia la lista de referencia - - self.labels_creados = [] - self.create() - if hasattr(self, 'arrow_label'): - self.arrow_label.show() - self.arrow_label.raise_() - - def handle_core_action_create_profile(self, action, profile_data=None, profile_type=None): - - self.worker_thread = WorkerThread(action, profile_data, profile_type) - self.worker_thread.text_output.connect(self.update_output) - self.worker_thread.start() - self.worker_thread.wait() - - def update_output(self, text): - self.update_status.update_status(text) - - def on_profile_creation(self, result): - - if self.worker_thread: - self.worker_thread.quit() - self.worker_thread.wait() - self.worker_thread = None - - -class EditorPage(Page): - def __init__(self, page_stack, main_window): - super().__init__("Editor", page_stack, main_window) - self.page_stack = page_stack - self.update_status = main_window - self.connection_manager = main_window.connection_manager - self.labels = [] # Lista para almacenar los labels dinámicamente - self.buttons = [] # Lista para almacenar los labels dinámicamente - self.title.setGeometry(570, 40, 185, 40) - self.title.setText("Edit Profile") - - self.button_apply.setVisible(True) - self.button_apply.clicked.connect(self.go_selected) - - self.button_back.setVisible(True) - try: - self.button_back.clicked.disconnect() - except TypeError: - pass - self.button_back.clicked.connect(self.go_back) - - self.name_handle = QLabel(self) - self.name_handle.setGeometry(110, 70, 400, 30) - self.name_handle.setStyleSheet('color: #cacbcb;') - self.name_handle.setText("Profile Name:") - - self.name_hint = QLabel(self) - self.name_hint.setGeometry(265, 100, 190, 20) - self.name_hint.setStyleSheet( - 'color: #888888; font-size: 10px; font-style: italic;') - self.name_hint.setText("Click here to edit profile name") - self.name_hint.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - - self.name = QLineEdit(self) - self.name.setPlaceholderText("Enter name") - self.name.setGeometry(265, 70, 190, 30) - self.name.setStyleSheet( - "color: cyan; border: 1px solid #666666; border-radius: 3px; background-color: rgba(0, 0, 0, 0.3);") - self.name.setCursor(QtCore.Qt.CursorShape.IBeamCursor) - self.name.focusInEvent = lambda event: self.name_hint.hide() - self.name.focusOutEvent = lambda event: self.name_hint.show( - ) if not self.name.text() else self.name_hint.hide() - - self.name.textChanged.connect( - lambda text: self.name_hint.hide() if text else self.name_hint.show()) - - self.temp_changes = {} - self.original_values = {} - self.res_hint_shown = False - self.display.setGeometry(QtCore.QRect(0, 60, 540, 405)) - self.display.hide() - - self.garaje = QLabel(self) - self.garaje.setGeometry(QtCore.QRect(0, 70, 540, 460)) - - self.brow_disp = QLabel(self) - self.brow_disp.setGeometry(QtCore.QRect(0, 50, 540, 460)) - self.brow_disp.setPixmap( - QPixmap(os.path.join(self.btn_path, "browser only.png"))) - self.brow_disp.hide() - self.brow_disp.lower() - - def update_name_value(self): - original_name = self.data_profile.get('name', '') - new_name = self.name.text() - if original_name != new_name: - self.update_temp_value('name', new_name) - else: - pass - - def go_back(self): - selected_profiles_str = ', '.join( - [f"Profile_{profile['profile_number']}" for profile in self.page_stack.widget(0).selected_profiles]) - if self.has_unsaved_changes(selected_profiles_str): - self.show_unsaved_changes_popup() - else: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - def find_resume_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, ResumePage): - return page - return None - - def find_protocol_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, ProtocolPage): - return page - return None - - def showEvent(self, event): - super().showEvent(event) - self.res_hint_shown = False - self.extraccion() - - def extraccion(self): - self.data_profile = {} - for label in self.labels: - label.deleteLater() - self.labels = [] - for button in self.buttons: - button.deleteLater() - self.buttons = [] - - selected_profiles_str = ', '.join( - [f"Profile_{profile['profile_number']}" for profile in self.page_stack.widget(0).selected_profiles]) - menu_page = self.find_menu_page() - if menu_page: - new_profiles = ProfileController.get_all() - self.profiles_data = menu_page.match_core_profiles( - profiles_dict=new_profiles) - self.data_profile = self.profiles_data[selected_profiles_str].copy( - ) - - profile_id = int(selected_profiles_str.split('_')[1]) - self.data_profile['id'] = profile_id - - if selected_profiles_str in self.temp_changes: - for key, value in self.temp_changes[selected_profiles_str].items(): - self.data_profile[key] = value - - self.name.textChanged.connect(self.update_name_value) - self.verificate(self.data_profile, selected_profiles_str) - - def verificate(self, data_profile, selected_profile_str): - protocol = data_profile.get("protocol", "") - - try: - if protocol == "wireguard": - self.process_and_show_labels(data_profile, { - "protocol": ['wireguard', 'residential', 'hidetor'], - "connection": ['browser-only', 'system-wide'], - "location": self.connection_manager.get_location_list(), - "browser": self.connection_manager.get_browser_list(), - "dimentions": self.connection_manager.get_available_resolutions(data_profile.get('id', '')) - }, selected_profile_str) - - elif protocol == "residential" or protocol == "hidetor": - self.process_and_show_labels(data_profile, { - "protocol": ['residential', 'wireguard', 'hidetor'], - "connection": ['tor', 'just proxy'], - "location": self.connection_manager.get_location_list(), - "browser": self.connection_manager.get_browser_list(), - "dimentions": self.connection_manager.get_available_resolutions(data_profile.get('id', '')) - }, selected_profile_str) - - elif protocol == "open": - self.process_and_show_labels(data_profile, { - "protocol": ['open'] - }, selected_profile_str) - - except Exception as e: - print(f'An error occurred in verificate: {e}') - - def process_and_show_labels(self, data_profile, parameters, selected_profile_str): - protocol = data_profile.get('protocol', "") - connection = data_profile.get('connection', "") - location = data_profile.get('location', "") - country_garaje = location - name = data_profile.get('name', "") - self.name.setText(name) - - if protocol == "hidetor": - if connection == "just proxy": - self.display.setPixmap(QPixmap(os.path.join( - self.btn_path, f"icon_{location}.png"))) - else: - self.display.setPixmap(QPixmap(os.path.join( - self.btn_path, f"hdtor_{location}.png"))) - self.display.show() - self.display.setGeometry(0, 100, 400, 394) - - self.display.setScaledContents(True) - - self.garaje.hide() - self.brow_disp.hide() - - if protocol == "wireguard": - self.display.setGeometry(0, 60, 540, 405) - self.display.show() - self.display.setPixmap(QPixmap(os.path.join( - self.btn_path, f"wireguard_{location}.png"))) - self.garaje.hide() - if connection == "browser-only": - is_supported = data_profile.get('browser_supported', False) - image_name = "browser only.png" if is_supported else "unsupported_browser_only.png" - self.brow_disp.setPixmap( - QPixmap(os.path.join(self.btn_path, image_name))) - self.brow_disp.show() - else: - self.brow_disp.hide() - - if protocol == "residential": - self.display.setGeometry(0, 60, 540, 405) - self.brow_disp.show() - self.garaje.show() - - self.display.hide() - if country_garaje: - country_garaje = 'brazil' - self.garaje.setPixmap(QPixmap(os.path.join( - self.btn_path, f"{country_garaje} garaje.png"))) - - profile_id = data_profile.get('id') - profile_obj = ProfileController.get(profile_id) - - location_info = None - if location: - try: - if '_' in location: - country_code, location_code = location.split('_', 1) - location_info = LocationController.get( - country_code, location_code) - except Exception: - location_info = None - - operator_name = "" - l_name = "" - o_name = "" - n_key = "" - - if location_info: - if hasattr(location_info, 'operator') and location_info.operator: - operator_name = location_info.operator.name - o_name = location_info.operator.name - n_key = location_info.operator.nostr_public_key - - l_name = f"{location_info.country_name}, {location_info.name}" if hasattr( - location_info, 'country_name') else "" - - if operator_name != 'Simplified Privacy' and operator_name != "" and protocol != 'hidetor': - text_color = "white" - if profile_obj and profile_obj.is_session_profile(): - text_color = "black" - - l_img = QLabel(self) - l_img.setGeometry(20, 125, 150, 150) - pixmap_loc = QPixmap(os.path.join( - self.btn_path, f"icon_{location}.png")) - l_img.setPixmap(pixmap_loc) - l_img.setScaledContents(True) - l_img.show() - self.labels.append(l_img) - - info_txt = QTextEdit(self) - info_txt.setGeometry(180, 120, 300, 250) - info_txt.setReadOnly(True) - info_txt.setFrameStyle(QFrame.Shape.NoFrame) - info_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 19px;") - info_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - info_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere) - info_txt.setText( - f"Location: {l_name}\n\nOperator: {o_name}") - info_txt.show() - self.labels.append(info_txt) - - nostr_txt = QTextEdit(self) - nostr_txt.setGeometry(20, 300, 450, 170) - nostr_txt.setReadOnly(True) - nostr_txt.setFrameStyle(QFrame.Shape.NoFrame) - nostr_txt.setStyleSheet( - f"background: transparent; border: none; color: {text_color}; font-size: 21px;") - nostr_txt.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - nostr_txt.setWordWrapMode( - QtGui.QTextOption.WrapMode.WrapAnywhere) - nostr_txt.setText(f"Nostr: {n_key}") - nostr_txt.show() - self.labels.append(nostr_txt) - - for i, key in enumerate(parameters.keys()): - if key == 'browser': - browser_value = f"{data_profile.get(key, '')}" - split_value = browser_value.split(':', 1) - browser_type = split_value[0] - browser_version = split_value[1] if len( - split_value) > 1 else '' - browser_value = f"{browser_type} {browser_version}" - if browser_version == '': - browser_version = data_profile.get('browser_version', '') - browser_value = f"{browser_type} {browser_version}" - if connection == 'system-wide' or not browser_value.strip(): - base_image = QPixmap() - else: - base_image = BrowserPage.create_browser_button_image( - browser_value, self.btn_path) - if base_image.isNull(): - fallback_path = os.path.join( - self.btn_path, "default_browser_button.png") - base_image = BrowserPage.create_browser_button_image( - browser_value, fallback_path, True) - elif key == 'location': - current_value = f"{data_profile.get(key, '')}" - image_path = os.path.join( - self.btn_path, f"button_{current_value}.png") - base_image = QPixmap(image_path) - locations = self.connection_manager.get_location_info( - current_value) - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - if base_image.isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - base_image = LocationPage.create_location_button_image( - location_name, fallback_path, provider) - else: - base_image = LocationPage.create_location_button_image( - current_value, fallback_path, provider) - else: - if locations and hasattr(locations, 'country_name'): - base_image = LocationPage.create_location_button_image( - f'{locations.country_code}_{locations.code}', fallback_path, provider, image_path) - else: - base_image = LocationPage.create_location_button_image( - current_value, fallback_path, provider, image_path) - - elif key == 'dimentions': - current_value = f"{data_profile.get(key, '')}" - if current_value != 'None': - base_image = ScreenPage.create_resolution_button_image( - self, current_value) - else: - image_path = os.path.join( - self.btn_path, f"{data_profile.get(key, '')}_button.png") - current_value = data_profile.get(key, '') - base_image = QPixmap(image_path) - - if key == 'dimentions': - label = QPushButton(self) - label.setGeometry(565, 90 + i * 80, 185, 75) - label.setFlat(True) - label.setStyleSheet("border: none; background: transparent;") - original_icon = QIcon(base_image) - label.setIconSize(QSize(185, 75)) - label.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - label.clicked.connect(self.show_custom_res_dialog) - - template_path = os.path.join( - self.btn_path, "resolution_template_button.png") - template_pixmap = QPixmap(template_path).scaled( - 187, 75) if os.path.exists(template_path) else None - - if not getattr(self, 'res_hint_shown', False) and connection != 'system-wide': - self.res_hint_shown = True - if template_pixmap: - label.setIcon(QIcon(template_pixmap)) - else: - label.setIcon(QIcon()) - - hint_label = QLabel("Click here to customize", label) - hint_label.setGeometry(15, 0, 155, 75) - hint_label.setWordWrap(True) - hint_label.setAlignment( - QtCore.Qt.AlignmentFlag.AlignCenter) - hint_label.setStyleSheet( - "color: #00ffff; font-weight: bold; font-size: 16px; background: transparent;") - hint_label.setCursor( - QtCore.Qt.CursorShape.PointingHandCursor) - hint_label.setAttribute( - QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents) - shadow = QGraphicsDropShadowEffect(hint_label) - shadow.setBlurRadius(20) - shadow.setColor(QColor(0, 255, 255)) - shadow.setOffset(0, 0) - hint_label.setGraphicsEffect(shadow) - - def restore(): - try: - if hint_label and not hint_label.isHidden(): - hint_label.hide() - label.setIcon(original_icon) - except: - pass - QTimer.singleShot(3500, restore) - else: - label.setIcon(original_icon) - else: - label = QLabel(key, self) - label.setGeometry(565, 90 + i * 80, 185, 75) - label.setPixmap(base_image) - label.setScaledContents(True) - - label.show() - self.labels.append(label) - - try: - if key == 'browser': - value_index = [item.replace( - ':', ' ') for item in parameters[key]].index(browser_value) - else: - value_index = parameters[key].index(current_value) - except ValueError: - value_index = 0 - - # Botón para mostrar el valor anterior - prev_button = QPushButton(self) - prev_button.setGeometry(535, 90 + i * 80, 30, 75) - prev_button.clicked.connect( - lambda _, k=key, idx=value_index: self.show_previous_value(k, idx, parameters)) - prev_button.show() - icon_path = os.path.join(self.btn_path, f"UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - - # Establecer el ícono girado en el botón - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - - if (key == 'location' or key == 'browser') and not self.connection_manager.is_synced(): - w = prev_button.width() - h = prev_button.height() - outline_pix = QPixmap(w, h) - outline_pix.fill(Qt.GlobalColor.transparent) - painter = QPainter(outline_pix) - painter.setRenderHint(QPainter.RenderHint.Antialiasing) - pen = QtGui.QPen(QColor(0, 255, 0)) - pen.setWidth(3) - painter.setPen(pen) - painter.setBrush(Qt.BrushStyle.NoBrush) - left_points = [ - QPointF(w*0.65, h*0.15), QPointF(w*0.25, h*0.50), QPointF(w*0.65, h*0.85)] - painter.drawPolygon(QtGui.QPolygonF(left_points)) - painter.end() - prev_button.setIcon(QIcon(outline_pix)) - prev_button.setIconSize(prev_button.size()) - - if (key == 'location' or key == 'browser') and not self.connection_manager.is_synced(): - prev_button.setStyleSheet(""" - QPushButton { - background-color: transparent; - border: none; - } - QPushButton:hover { - background-color: rgba(0, 255, 0, 0.1); - border-radius: 3px; - } - QPushButton:pressed { - background-color: rgba(0, 255, 0, 0.2); - border-radius: 3px; - } - """) - - self.buttons.append(prev_button) - - # Botón para mostrar el valor siguiente - next_button = QPushButton(self) - next_button.setGeometry(750, 90 + i * 80, 30, 75) - next_button.clicked.connect( - lambda _, k=key, idx=value_index: self.show_next_value(k, idx, parameters)) - next_button.show() - self.buttons.append(next_button) - next_button.setIcon( - QIcon(os.path.join(self.btn_path, f"UP_button.png"))) - next_button.setIconSize(next_button.size()) - if (key == 'location' or key == 'browser') and not self.connection_manager.is_synced(): - w = next_button.width() - h = next_button.height() - outline_pix_r = QPixmap(w, h) - outline_pix_r.fill(Qt.GlobalColor.transparent) - painter_r = QPainter(outline_pix_r) - painter_r.setRenderHint(QPainter.RenderHint.Antialiasing) - pen_r = QtGui.QPen(QColor(0, 255, 0)) - pen_r.setWidth(3) - painter_r.setPen(pen_r) - painter_r.setBrush(Qt.BrushStyle.NoBrush) - right_points = [ - QPointF(w*0.35, h*0.15), QPointF(w*0.75, h*0.50), QPointF(w*0.35, h*0.85)] - painter_r.drawPolygon(QtGui.QPolygonF(right_points)) - painter_r.end() - next_button.setIcon(QIcon(outline_pix_r)) - next_button.setIconSize(next_button.size()) - - if (key == 'location' or key == 'browser') and not self.connection_manager.is_synced(): - next_button.setStyleSheet(""" - QPushButton { - background-color: transparent; - border: none; - } - QPushButton:hover { - background-color: rgba(0, 255, 0, 0.1); - border-radius: 3px; - } - QPushButton:pressed { - background-color: rgba(0, 255, 0, 0.2); - border-radius: 3px; - } - """) - - prev_button.setVisible(True) - next_button.setVisible(True) - if key == 'protocol' or (protocol == 'wireguard' and key == 'connection'): - prev_button.setDisabled(True) - next_button.setDisabled(True) - - if connection == 'system-wide' and (key == 'browser' or key == 'dimentions'): - prev_button.setVisible(False) - next_button.setVisible(False) - - def on_sync_complete_for_edit_profile(self, available_locations, available_browsers, status, is_tor, locations, all_browsers): - if status: - self.update_status.update_status('Sync complete.') - self.extraccion() - else: - self.update_status.update_status( - 'Sync failed. Please try again later.') - - def show_previous_value(self, key: str, index: int, parameters: dict) -> None: - if key == 'browser' or key == 'location': - if not self.connection_manager.is_synced(): - self.update_status.update_status('Syncing in progress..') - self.update_status.sync() - self.update_status.worker_thread.sync_output.connect( - self.on_sync_complete_for_edit_profile) - return - - previous_index = (index - 1) % len(parameters[key]) - previous_value = parameters[key][previous_index] - self.update_temp_value(key, previous_value) - - def show_next_value(self, key: str, index: int, parameters: dict) -> None: - if key == 'browser' or key == 'location': - if not self.connection_manager.is_synced(): - self.update_status.update_status('Syncing in progress..') - self.update_status.sync() - self.update_status.worker_thread.sync_output.connect( - self.on_sync_complete_for_edit_profile) - return - - next_index = (index + 1) % len(parameters[key]) - next_value = parameters[key][next_index] - - self.update_temp_value(key, next_value) - - def update_temp_value(self, key: str, new_value: str) -> None: - selected_profiles_str = ', '.join( - [f"Profile_{profile['profile_number']}" for profile in self.page_stack.widget(0).selected_profiles]) - if selected_profiles_str not in self.temp_changes: - self.temp_changes[selected_profiles_str] = {} - self.original_values[selected_profiles_str] = self.data_profile.copy( - ) - - self.temp_changes[selected_profiles_str][key] = new_value - self.extraccion() - - def show_custom_res_dialog(self): - dialog = QDialog(self) - dialog.setWindowTitle("Custom Resolution") - dialog.setFixedSize(300, 150) - dialog.setModal(True) - dialog.setStyleSheet(""" - QDialog { - background-color: #2c3e50; - border: 2px solid #00ffff; - border-radius: 10px; - } - QLabel { - color: white; - font-size: 12px; - } - QLineEdit { - background-color: #34495e; - color: white; - border: 1px solid #00ffff; - border-radius: 5px; - padding: 5px; - font-size: 12px; - } - QPushButton { - background-color: #2c3e50; - color: white; - border: 2px solid #00ffff; - border-radius: 5px; - padding: 8px; - font-size: 12px; - } - QPushButton:hover { - background-color: #34495e; - } - """) - - layout = QVBoxLayout() - input_layout = QHBoxLayout() - width_label = QLabel("Width:") - width_input = QLineEdit() - width_input.setPlaceholderText("1920") - height_label = QLabel("Height:") - height_input = QLineEdit() - height_input.setPlaceholderText("1080") - - input_layout.addWidget(width_label) - input_layout.addWidget(width_input) - input_layout.addWidget(height_label) - input_layout.addWidget(height_input) - - button_layout = QHBoxLayout() - ok_button = QPushButton("OK") - cancel_button = QPushButton("Cancel") - button_layout.addWidget(cancel_button) - button_layout.addWidget(ok_button) - - layout.addLayout(input_layout) - layout.addLayout(button_layout) - dialog.setLayout(layout) - - def validate_and_accept(): - try: - width = int(width_input.text()) - height = int(height_input.text()) - if width <= 0 or height <= 0: - return - host_w = self.custom_window.host_screen_width - host_h = self.custom_window.host_screen_height - - adjusted = False - if width > host_w: - width = host_w - 50 - adjusted = True - if height > host_h: - height = host_h - 50 - adjusted = True - - if adjusted: - QMessageBox.information( - dialog, "Notice", "Adjusted to fit host size") - - self.update_temp_value('dimentions', f"{width}x{height}") - dialog.accept() - except ValueError: - pass - - ok_button.clicked.connect(validate_and_accept) - cancel_button.clicked.connect(dialog.reject) - - width_input.returnPressed.connect(validate_and_accept) - height_input.returnPressed.connect(validate_and_accept) - - dialog.exec() - - def has_unsaved_changes(self, profile_str: str) -> bool: - return profile_str in self.temp_changes and bool(self.temp_changes[profile_str]) - - def show_apply_changes_popup(self, selected_profiles_str: str) -> bool: - if selected_profiles_str not in self.temp_changes: - return False - temp_changes = self.temp_changes[selected_profiles_str] - current_data = self.original_values[selected_profiles_str] - - current_browser = f"{current_data.get('browser', '')} {current_data.get('browser_version', '')}" - - if 'location' in temp_changes and temp_changes['location'] != current_data.get('location'): - message = "A new location would require a new subscription code.\nDo you want to proceed with erasing the old one?" - elif 'browser' in temp_changes and temp_changes['browser'] != current_browser: - message = "Changing the browser would delete all data associated with it. Proceed?" - else: - return False - - self.popup = ConfirmationPopup( - self, - message=message, - action_button_text="Continue", - cancel_button_text="Cancel" - ) - self.popup.setWindowModality(Qt.WindowModality.ApplicationModal) - self.popup.finished.connect( - lambda result: self.handle_apply_changes_response(result)) - self.popup.show() - return True - - def show_unsaved_changes_popup(self) -> None: - self.popup = ConfirmationPopup( - self, - message="You have unsaved changes. Do you want to continue?", - action_button_text="Continue", - cancel_button_text="Cancel" - ) - self.popup.setWindowModality(Qt.WindowModality.ApplicationModal) - self.popup.finished.connect( - lambda result: self.handle_unsaved_changes_response(result)) - self.popup.show() - - def handle_apply_changes_response(self, result: bool) -> None: - if result: - self.commit_changes() - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def handle_unsaved_changes_response(self, result: bool) -> None: - if result: - self.temp_changes.clear() - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def go_selected(self) -> None: - selected_profiles_str = ', '.join([f"Profile_{profile['profile_number']}" - for profile in self.page_stack.widget(0).selected_profiles]) - - if selected_profiles_str in self.temp_changes and self.temp_changes[selected_profiles_str]: - needs_confirmation = self.show_apply_changes_popup( - selected_profiles_str) - if not needs_confirmation: - self.commit_changes() - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - else: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def commit_changes(self) -> None: - selected_profiles_str = ', '.join( - [f"Profile_{profile['profile_number']}" for profile in self.page_stack.widget(0).selected_profiles]) - if selected_profiles_str in self.temp_changes: - for key, new_value in self.temp_changes[selected_profiles_str].items(): - self.update_core_profiles(key, new_value) - - self.temp_changes.pop(selected_profiles_str, None) - self.original_values.pop(selected_profiles_str, None) - - def update_core_profiles(self, key, new_value): - profile = ProfileController.get( - int(self.update_status.current_profile_id)) - self.update_res = False - if key == 'dimentions': - profile.resolution = new_value - self.update_res = True - - elif key == 'name': - profile.name = new_value - - elif key == 'connection': - if new_value == 'tor': - profile.connection.code = new_value - profile.connection.masked = True - elif new_value == 'just proxy': - profile.connection.code = 'system' - profile.connection.masked = True - else: - self.update_status.update_status( - 'System wide profiles not supported atm') - - elif key == 'browser': - browser_type, browser_version = new_value.split(':', 1) - profile.application_version.application_code = browser_type - profile.application_version.version_number = browser_version - - elif key == 'protocol': - if self.data_profile.get('connection') == 'system-wide': - self.edit_to_session() - else: - profile.connection.code = 'wireguard' if new_value == 'wireguard' else 'tor' - profile.connection.masked = False if new_value == 'wireguard' else True - - else: - location = self.connection_manager.get_location_info(new_value) - - if location: - profile.location.code = location.code - profile.location.country_code = location.country_code - profile.location.time_zone = location.time_zone - profile.subscription = None - - ProfileController.update(profile) - - ''' - def edit_to_system(self): - id = int(self.update_status.current_profile_id) - profile = self.data_profile - if profile.get('location') == 'The Netherlands': - location = 'nl' - elif profile.get('location') == 'Moldova': - location = 'md' - elif profile.get('location') == 'US (Ohio)': - location = 'us' - else: - pass - if profile.get('connection') == 'tor': - connection_type = 'tor' - elif profile.get('connection') == 'just proxy': - connection_type = 'system' - else: - connection_type = 'wireguard' - - profile_data = { - 'id': int(id), - 'name': profile.get('name'), - 'location_code': location, - 'connection_type': connection_type, - } - - resume_page = self.find_resume_page() - if resume_page: - resume_page.handle_core_action_create_profile('CREATE_SYSTEM_PROFILE', profile_data, 'system') - ''' - - def edit_to_session(self): - id = int(self.update_status.current_profile_id) - profile = self.data_profile - default_app = 'firefox:123.0' - default_resolution = '1024x760' - location_code = self.connection_manager.get_location_info( - profile.get('location')) - - connection_type = 'tor' - - profile_data = { - 'id': int(id), - 'name': profile.get('name'), - 'country_code': location_code.country_code, - 'code': location_code.code, - 'application': default_app, - 'connection_type': connection_type, - 'resolution': default_resolution, - } - resume_page = self.find_resume_page() - if resume_page: - resume_page.handle_core_action_create_profile( - 'CREATE_SESSION_PROFILE', profile_data, 'session') - - -class LocationVerificationPage(Page): - def __init__(self, page_stack, main_window, location_icon_name, previous_page, parent=None): - super().__init__("LocationVerification", page_stack, main_window, parent) - self.location_icon_name = location_icon_name - self.previous_page = previous_page - self.connection_manager = main_window.connection_manager - self.font_style = f"font-family: '{main_window.open_sans_family}';" - self.verification_info = {} - self.verification_checkmarks = {} - self.verification_full_values = {} - self.verification_labels = {} - self.verification_copy_buttons = {} - self.verification_display_names = { - "operator_name": "Operator Name", - "provider_name": "Provider Name", - "nostr_public_key": "Nostr Key", - "hydraveil_public_key": "HydraVeil Key", - "nostr_attestation_event_reference": "Nostr Verification" - } - self.setup_ui() - - def setup_ui(self): - location_display = QLabel(self) - location_display.setGeometry(0, 0, 390, 520) - location_display.setAlignment(Qt.AlignmentFlag.AlignCenter) - - icon_path = os.path.join( - self.btn_path, f"icon_{self.location_icon_name}.png") - location_pixmap = QPixmap(icon_path) - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - - if location_pixmap.isNull(): - location_pixmap = QPixmap(fallback_path) - - locations = self.connection_manager.get_location_info( - self.location_icon_name) - operator_name = locations.operator.name if locations and hasattr( - locations, 'operator') else "" - - max_size = QtCore.QSize(300, 300) - target_size = location_display.size().boundedTo(max_size) - - location_display.setPixmap(location_pixmap.scaled( - target_size, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)) - location_display.show() - - title = QLabel("Operator Information", self) - title.setGeometry(350, 50, 350, 30) - title.setStyleSheet( - f"color: #808080; font-size: 20px; font-weight: bold; {self.font_style}") - title.show() - - info_items = [ - ("Operator Name", "operator_name", 130), - ("Provider Name", "provider_name", 180), - ("Nostr Key", "nostr_public_key", 230), - ("HydraVeil Key", "hydraveil_public_key", 280), - ("Nostr Verification", "nostr_attestation_event_reference", 330), - ] - - label_x = 350 - label_width = 150 - label_height = 30 - value_x = 510 - value_width = 210 - value_height = 30 - checkmark_x = 725 - checkmark_width = 30 - checkmark_height = 30 - copy_button_x = 750 - copy_button_width = 30 - copy_button_height = 30 - - for label_text, key, y_pos in info_items: - label_widget = QLabel(label_text + ":", self) - label_widget.setGeometry(label_x, y_pos, label_width, label_height) - label_widget.setStyleSheet( - f"color: white; font-size: 18px; {self.font_style}") - label_widget.setAlignment( - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) - label_widget.show() - self.verification_labels[key] = label_widget - - value_widget = QLabel("N/A", self) - value_widget.setGeometry(value_x, y_pos, value_width, value_height) - value_widget.setStyleSheet( - f"color: white; font-size: 16px; {self.font_style}") - value_widget.setAlignment( - Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) - value_widget.show() - - checkmark_widget = QLabel("✓", self) - checkmark_widget.setGeometry( - checkmark_x, y_pos, checkmark_width, checkmark_height) - checkmark_widget.setStyleSheet( - f"color: #4CAF50; font-size: 28px; font-weight: bold; {self.font_style}") - checkmark_widget.setAlignment(Qt.AlignmentFlag.AlignCenter) - checkmark_widget.hide() - - self.verification_info[key] = value_widget - self.verification_checkmarks[key] = checkmark_widget - - copy_button = QPushButton(self) - copy_button.setGeometry( - copy_button_x, y_pos, copy_button_width, copy_button_height) - copy_button.setIcon( - QIcon(os.path.join(self.btn_path, "paste_button.png"))) - copy_button.setIconSize(QSize(24, 24)) - copy_button.setStyleSheet(f""" - QPushButton {{ - background: transparent; - border: none; - }} - QPushButton:hover {{ - background: rgba(255, 255, 255, 0.1); - border-radius: 4px; - }} - """) - copy_button.clicked.connect( - lambda checked=False, k=key: self.copy_verification_value(k)) - copy_button.show() - self.verification_copy_buttons[key] = copy_button - - self.back_button = QPushButton(self) - self.back_button.setGeometry(720, 525, 48, 35) - self.back_button.setIcon( - QIcon(os.path.join(self.btn_path, "back.png"))) - self.back_button.setIconSize(QSize(48, 35)) - self.back_button.setStyleSheet(f""" - QPushButton {{ - background: transparent; - border: none; - }} - QPushButton:hover {{ - background: rgba(255, 255, 255, 0.1); - border-radius: 4px; - }} - """) - self.back_button.clicked.connect(self.go_back) - self.back_button.show() - - self.update_verification_info() - - def truncate_text_by_width(self, text, widget, max_width): - if not text or text == "N/A": - return text - - metrics = widget.fontMetrics() - text_width = metrics.horizontalAdvance(text) - - if text_width <= max_width: - return text - - ellipsis = "..." - ellipsis_width = metrics.horizontalAdvance(ellipsis) - available_width = max_width - ellipsis_width - - if available_width <= 0: - return ellipsis - - start_chars = 1 - end_chars = 1 - - while True: - start_text = text[:start_chars] - end_text = text[-end_chars:] - combined_width = metrics.horizontalAdvance( - start_text + ellipsis + end_text) - - if combined_width <= max_width: - if start_chars + end_chars >= len(text): - return text - start_chars += 1 - if start_chars + end_chars >= len(text): - return text - end_chars += 1 - else: - if start_chars > 1: - start_chars -= 1 - if end_chars > 1: - end_chars -= 1 - break - - if start_chars + end_chars >= len(text): - return text - - return text[:start_chars] + ellipsis + text[-end_chars:] - - def update_verification_info(self): - locations = self.connection_manager.get_location_info( - self.location_icon_name) - value_width = 210 - - if not locations: - for key, widget in self.verification_info.items(): - widget.setText("N/A") - self.verification_full_values[key] = "N/A" - if key in self.verification_checkmarks: - self.verification_checkmarks[key].hide() - return - - operator = None - if locations.operator: - operator = locations.operator - - if operator: - operator_name = operator.name or "N/A" - self.verification_full_values["operator_name"] = operator_name - display_operator = self.truncate_text_by_width( - operator_name, self.verification_info["operator_name"], value_width) - self.verification_info["operator_name"].setText(display_operator) - - provider_name = locations.provider_name if locations and hasattr( - locations, 'provider_name') and locations.provider_name else "N/A" - self.verification_full_values["provider_name"] = provider_name - display_provider = self.truncate_text_by_width( - provider_name, self.verification_info["provider_name"], value_width) - self.verification_info["provider_name"].setText(display_provider) - - nostr_key = operator.nostr_public_key or "N/A" - self.verification_full_values["nostr_public_key"] = nostr_key - display_nostr = self.truncate_text_by_width( - nostr_key, self.verification_info["nostr_public_key"], value_width) - self.verification_info["nostr_public_key"].setText(display_nostr) - - hydraveil_key = operator.public_key or "N/A" - self.verification_full_values["hydraveil_public_key"] = hydraveil_key - display_hydraveil = self.truncate_text_by_width( - hydraveil_key, self.verification_info["hydraveil_public_key"], value_width) - self.verification_info["hydraveil_public_key"].setText( - display_hydraveil) - - nostr_verification = operator.nostr_attestation_event_reference or "N/A" - self.verification_full_values["nostr_attestation_event_reference"] = nostr_verification - display_nostr_verif = self.truncate_text_by_width( - nostr_verification, self.verification_info["nostr_attestation_event_reference"], value_width) - self.verification_info["nostr_attestation_event_reference"].setText( - display_nostr_verif) - else: - self.verification_info["operator_name"].setText("N/A") - self.verification_full_values["operator_name"] = "N/A" - self.verification_info["provider_name"].setText("N/A") - self.verification_full_values["provider_name"] = "N/A" - self.verification_info["nostr_public_key"].setText("N/A") - self.verification_full_values["nostr_public_key"] = "N/A" - self.verification_info["hydraveil_public_key"].setText("N/A") - self.verification_full_values["hydraveil_public_key"] = "N/A" - self.verification_info["nostr_attestation_event_reference"].setText( - "N/A") - self.verification_full_values["nostr_attestation_event_reference"] = "N/A" - - for key, widget in self.verification_info.items(): - if key in self.verification_checkmarks: - full_value = self.verification_full_values.get(key, "") - if full_value and full_value != "N/A": - self.verification_checkmarks[key].show() - else: - self.verification_checkmarks[key].hide() - - def copy_verification_value(self, key): - full_value = self.verification_full_values.get(key, "") - if full_value and full_value != "N/A": - clipboard = QApplication.clipboard() - clipboard.setText(full_value) - display_name = self.verification_display_names.get( - key, "Verification value") - self.custom_window.update_status( - f"{display_name} copied to clipboard") - - def go_back(self): - if self.previous_page: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.previous_page)) - - -class Settings(Page): - def __init__(self, page_stack, main_window, parent=None): - super().__init__("Settings", page_stack, main_window, parent) - self.font_style = f"font-family: '{self.custom_window.open_sans_family}';" - - self.update_status = main_window - self.update_logging = main_window - self.button_reverse.setVisible(True) - self.button_reverse.setEnabled(True) - self.button_reverse.clicked.connect(self.reverse) - self.title.setGeometry(585, 40, 185, 40) - self.title.setText("Settings") - self.setup_ui() - - def setup_ui(self): - main_container = QWidget(self) - main_container.setGeometry(0, 0, 800, 520) - - self.layout = QHBoxLayout(main_container) - self.layout.setContentsMargins(0, 60, 0, 0) - - self.left_panel = QWidget() - self.left_panel.setFixedWidth(200) - self.left_layout = QVBoxLayout(self.left_panel) - self.left_layout.setContentsMargins(0, 0, 0, 0) - self.left_layout.setSpacing(0) - - self.content_widget = QWidget() - self.content_layout = QStackedLayout(self.content_widget) - - self.layout.addWidget(self.left_panel) - self.layout.addWidget(self.content_widget) - - self.setup_menu_buttons() - self.setup_pages() - - def setup_menu_buttons(self): - menu_items = [ - ("Overview", self.show_account_page), - ("Subscriptions", self.show_subscription_page), - ("Create/Edit", self.show_registrations_page), - ("Verification", self.show_verification_page), - ("Legacy-Version", self.show_systemwide_page), - ("Bwrap Permission", self.show_bwrap_page), - ("Delete Profile", self.show_delete_page), - ("Error Logs", self.show_logs_page), - ("Debug Help", self.show_debug_page) - ] - - self.menu_buttons = [] - for text, callback in menu_items: - btn = QPushButton(text) - btn.setFixedHeight(40) - btn.setCursor(Qt.CursorShape.PointingHandCursor) - btn.setCheckable(True) - btn.clicked.connect(callback) - - btn.setStyleSheet(f""" - QPushButton {{ - text-align: left; - padding-left: 20px; - border: none; - background: transparent; - color: #808080; - font-size: 14px; - {self.font_style} - }} - QPushButton:checked {{ - background: rgba(255, 255, 255, 0.1); - color: white; - border-left: 3px solid #007AFF; - }} - QPushButton:hover:!checked {{ - background: rgba(255, 255, 255, 0.05); - }} - """) - - self.left_layout.addWidget(btn) - self.menu_buttons.append(btn) - - self.left_layout.addStretch() - - def create_delete_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setContentsMargins(20, 20, 20, 20) - layout.setSpacing(15) - - title = QLabel("DELETE PROFILE") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - self.delete_scroll_area = QScrollArea() - self.delete_scroll_area.setFixedSize(510, 300) - self.delete_scroll_area.setWidgetResizable(True) - self.delete_scroll_area.setHorizontalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAlwaysOff) - self.delete_scroll_area.setVerticalScrollBarPolicy( - Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.delete_scroll_area.setStyleSheet(""" - QScrollArea { - background-color: transparent; - border: none; - } - QScrollBar:vertical { - background-color: rgba(128, 128, 128, 0.3); - width: 12px; - border-radius: 6px; - } - QScrollBar::handle:vertical { - background-color: rgba(0, 255, 255, 0.7); - border-radius: 6px; - min-height: 20px; - } - QScrollBar::handle:vertical:hover { - background-color: rgba(0, 255, 255, 0.9); - } - QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - background-color: transparent; - height: 0px; - } - """) - - self.delete_scroll_widget = QWidget() - self.delete_scroll_widget.setStyleSheet( - "background-color: transparent;") - self.delete_scroll_area.setWidget(self.delete_scroll_widget) - - self.profile_buttons = QButtonGroup() - self.profile_buttons.setExclusive(True) - - self.create_delete_profile_buttons() - - layout.addWidget(self.delete_scroll_area) - - self.delete_button = QPushButton("Delete") - self.delete_button.setEnabled(False) - self.delete_button.setFixedSize(120, 40) - self.delete_button.setStyleSheet(f""" - QPushButton {{ - background: #ff4d4d; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:disabled {{ - background: #666666; - }} - QPushButton:hover:!disabled {{ - background: #ff3333; - }} - """) - self.delete_button.clicked.connect(self.delete_selected_profile) - self.profile_buttons.buttonClicked.connect(self.on_profile_selected) - - button_layout = QHBoxLayout() - button_layout.addStretch() - button_layout.addWidget(self.delete_button) - button_layout.addStretch() - - layout.addStretch() - layout.addLayout(button_layout) - - return page - - def create_delete_profile_buttons(self): - profiles = ProfileController.get_all() - - for index, (profile_id, profile) in enumerate(profiles.items()): - row = index // 2 - col = index % 2 - - btn = QPushButton(f"Profile {profile_id}\n{profile.name}") - btn.setCheckable(True) - btn.setFixedSize(180, 60) - btn.setParent(self.delete_scroll_widget) - btn.setGeometry(col * 220 + 50, row * 100, 180, 60) - btn.setStyleSheet(f""" - QPushButton {{ - background: rgba(255, 255, 255, 0.1); - border: none; - color: white; - border-radius: 5px; - text-align: center; - {self.font_style} - }} - QPushButton:checked {{ - background: rgba(255, 255, 255, 0.3); - border: 2px solid #007AFF; - }} - QPushButton:hover:!checked {{ - background: rgba(255, 255, 255, 0.2); - }} - """) - self.profile_buttons.addButton(btn, profile_id) - - if profiles: - rows = (len(profiles) + 1) // 2 - height = rows * 100 - self.delete_scroll_widget.setFixedSize(510, height) - - def create_debug_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setContentsMargins(20, 20, 20, 20) - layout.setSpacing(15) - - title = QLabel("DEBUG HELP") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - scroll_area = QScrollArea() - scroll_area.setWidgetResizable(True) - scroll_area.setStyleSheet(f""" - QScrollArea {{ - border: none; - background: transparent; - }} - QScrollArea > QWidget > QWidget {{ - background: transparent; - }} - """) - - scroll_content = QWidget() - scroll_layout = QVBoxLayout(scroll_content) - scroll_layout.setSpacing(15) - - profile_selection_group = QGroupBox("Profile Selection") - profile_selection_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - font-size: 10px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - profile_selection_layout = QVBoxLayout(profile_selection_group) - - profile_label = QLabel("Select System-wide Profile:") - profile_label.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - profile_selection_layout.addWidget(profile_label) - - self.debug_profile_selector = QComboBox() - self.debug_profile_selector.setStyleSheet(self.get_combobox_style()) - self.debug_profile_selector.currentTextChanged.connect( - self.on_debug_profile_selected) - profile_selection_layout.addWidget(self.debug_profile_selector) - - scroll_layout.addWidget(profile_selection_group) - - ping_group = QGroupBox("Ping Test") - ping_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - font-size: 10px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - ping_layout = QVBoxLayout(ping_group) - - self.ping_instruction_label = QLabel("") - self.ping_instruction_label.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - self.ping_instruction_label.setWordWrap(True) - self.ping_instruction_label.hide() - ping_layout.addWidget(self.ping_instruction_label) - - ping_buttons_layout = QHBoxLayout() - - self.copy_ping_button = QPushButton("Copy Ping Command") - self.copy_ping_button.setFixedSize(140, 40) - self.copy_ping_button.setStyleSheet(f""" - QPushButton {{ - font-size: 12px; - background: #007AFF; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #0056CC; - }} - QPushButton:disabled {{ - background: #666666; - }} - """) - self.copy_ping_button.clicked.connect(self.copy_ping_command) - self.copy_ping_button.setEnabled(False) - ping_buttons_layout.addWidget(self.copy_ping_button) - - self.test_ping_button = QPushButton("Test Ping") - self.test_ping_button.setFixedSize(120, 40) - self.test_ping_button.setStyleSheet(f""" - QPushButton {{ - font-size: 12px; - background: #4CAF50; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #45a049; - }} - QPushButton:disabled {{ - background: #666666; - }} - """) - self.test_ping_button.clicked.connect(self.test_ping_connection) - self.test_ping_button.setEnabled(False) - ping_buttons_layout.addWidget(self.test_ping_button) - - ping_layout.addLayout(ping_buttons_layout) - - self.ping_result_label = QLabel("") - self.ping_result_label.setStyleSheet( - f"color: white; font-size: 12px; font-weight: bold; {self.font_style}") - self.ping_result_label.setWordWrap(True) - self.ping_result_label.hide() - ping_layout.addWidget(self.ping_result_label) - - scroll_layout.addWidget(ping_group) - - command_group = QGroupBox("CLI Commands") - command_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - font-size: 10px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - command_layout = QVBoxLayout(command_group) - - self.cli_command = QLineEdit() - self.cli_command.setReadOnly(True) - self.cli_command.setText("Select a profile above to see command") - self.cli_command.setStyleSheet(f""" - QLineEdit {{ - color: white; - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 4px; - padding: 8px; - font-family: 'Courier New', monospace; - font-size: 12px; - }} - """) - command_layout.addWidget(self.cli_command) - - cli_buttons_layout = QHBoxLayout() - - cli_copy_button = QPushButton("Copy CLI Command") - cli_copy_button.setFixedSize(140, 40) - cli_copy_button.setStyleSheet(f""" - QPushButton {{ - font-size: 12px; - background: #007AFF; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #0056CC; - }} - QPushButton:disabled {{ - background: #666666; - }} - """) - cli_copy_button.clicked.connect(self.copy_cli_command) - cli_copy_button.setEnabled(False) - cli_buttons_layout.addWidget(cli_copy_button) - - command_layout.addLayout(cli_buttons_layout) - - find_buttons_layout = QHBoxLayout() - - command_layout.addLayout(find_buttons_layout) - - scroll_layout.addWidget(command_group) - - self.cli_copy_button = cli_copy_button - - wg_quick_group = QGroupBox("Direct Systemwide Wireguard") - wg_quick_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - font-size: 10px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - wg_quick_layout = QVBoxLayout(wg_quick_group) - - wg_quick_subtitle = QLabel("This uses your Linux system's Wireguard") - wg_quick_subtitle.setStyleSheet( - f"font-size: 10px; color: #CCCCCC; {self.font_style}") - wg_quick_subtitle.setWordWrap(True) - wg_quick_layout.addWidget(wg_quick_subtitle) - - self.wg_quick_up_command = QLineEdit() - self.wg_quick_up_command.setReadOnly(True) - self.wg_quick_up_command.setText( - "Select a profile above to see commands") - self.wg_quick_up_command.setStyleSheet(f""" - QLineEdit {{ - color: black; - background: white; - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 4px; - padding: 8px; - font-family: 'Courier New', monospace; - font-size: 12px; - }} - """) - wg_quick_layout.addWidget(self.wg_quick_up_command) - - copy_wg_up_button = QPushButton("Copy UP command") - copy_wg_up_button.setFixedSize(140, 40) - copy_wg_up_button.setStyleSheet(f""" - QPushButton {{ - font-size: 10px; - background: #4CAF50; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #45a049; - }} - """) - copy_wg_up_button.clicked.connect(self.copy_wg_quick_up_command) - copy_wg_up_button.setEnabled(False) - wg_quick_layout.addWidget(copy_wg_up_button) - - self.wg_quick_down_command = QLineEdit() - self.wg_quick_down_command.setReadOnly(True) - self.wg_quick_down_command.setText( - "Select a profile above to see commands") - self.wg_quick_down_command.setStyleSheet(f""" - QLineEdit {{ - color: black; - background: white; - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 4px; - padding: 8px; - font-family: 'Courier New', monospace; - font-size: 12px; - }} - """) - wg_quick_layout.addWidget(self.wg_quick_down_command) - - copy_wg_down_button = QPushButton("Copy DOWN command") - copy_wg_down_button.setFixedSize(140, 40) - copy_wg_down_button.setStyleSheet(f""" - QPushButton {{ - font-size: 10px; - background: #F44336; - color: white; - border: none; - border-radius: 5px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #d32f2f; - }} - """) - copy_wg_down_button.clicked.connect(self.copy_wg_quick_down_command) - copy_wg_down_button.setEnabled(False) - wg_quick_layout.addWidget(copy_wg_down_button) - - self.wg_quick_up_button = copy_wg_up_button - self.wg_quick_down_button = copy_wg_down_button - - self.wg_quick_up_command_widget = self.wg_quick_up_command - self.wg_quick_down_command_widget = self.wg_quick_down_command - - scroll_layout.addWidget(wg_quick_group) - - self.update_debug_profile_list() - - scroll_area.setWidget(scroll_content) - layout.addWidget(scroll_area) - - return page - - def copy_cli_command(self): - clipboard = QApplication.clipboard() - clipboard.setText(self.cli_command.text()) - self.update_status.update_status("CLI command copied to clipboard") - - def execute_cli_command(self): - try: - command = self.cli_command.text().split() - subprocess.Popen(command) - self.update_status.update_status("CLI command executed") - except Exception as e: - self.update_status.update_status( - f"Error executing command: {str(e)}") - - def copy_find_command(self, command_text): - clipboard = QApplication.clipboard() - clipboard.setText(command_text) - self.update_status.update_status("Find command copied to clipboard") - - def execute_find_command(self, command_text): - try: - command = command_text.split() - subprocess.Popen(command) - self.update_status.update_status("Find command executed") - except Exception as e: - self.update_status.update_status( - f"Error executing find command: {str(e)}") - - def update_debug_profile_list(self): - self.debug_profile_selector.clear() - profiles = ProfileController.get_all() - system_profiles = {pid: profile for pid, profile in profiles.items( - ) if isinstance(profile, SystemProfile)} - - if system_profiles: - for profile_id, profile in system_profiles.items(): - self.debug_profile_selector.addItem( - f"Profile {profile_id}: {profile.name}", profile_id) - else: - self.debug_profile_selector.addItem( - "No system-wide profiles found", None) - - def on_debug_profile_selected(self, text): - profile_id = self.debug_profile_selector.currentData() - if profile_id is None: - self.ping_instruction_label.hide() - self.copy_ping_button.setEnabled(False) - self.test_ping_button.setEnabled(False) - self.ping_result_label.hide() - self.cli_command.setText("Select a profile above to see command") - self.cli_copy_button.setEnabled(False) - if hasattr(self, 'wg_quick_up_command_widget'): - self.wg_quick_up_command_widget.setText( - "Select a profile above to see commands") - self.wg_quick_down_command_widget.setText( - "Select a profile above to see commands") - self.wg_quick_up_button.setEnabled(False) - self.wg_quick_down_button.setEnabled(False) - return - - profile = ProfileController.get(profile_id) - - if profile and isinstance(profile, SystemProfile): - app_path = os.environ.get('APPIMAGE') or "/path/to/hydra-veil" - self.cli_command.setText( - f"'{app_path}' --cli profile enable -i {profile_id}") - self.cli_copy_button.setEnabled(True) - ip_address = self.extract_endpoint_ip(profile) - if ip_address: - self.ping_instruction_label.setText( - f"Step 1, Can you Ping it? Copy-paste the command below into your terminal. This VPN Node's IP address is {ip_address}") - self.ping_instruction_label.show() - self.copy_ping_button.setEnabled(True) - self.test_ping_button.setEnabled(True) - self.ping_result_label.hide() - - if hasattr(self, 'wg_quick_up_command_widget'): - self.wg_quick_up_command_widget.setText( - f"sudo wg-quick up '/etc/hydra-veil/profiles/{profile_id}/wg.conf'") - self.wg_quick_down_command_widget.setText( - f"sudo wg-quick down '/etc/hydra-veil/profiles/{profile_id}/wg.conf'") - self.wg_quick_up_button.setEnabled(True) - self.wg_quick_down_button.setEnabled(True) - else: - self.ping_instruction_label.setText( - "Could not extract IP address from WireGuard configuration") - self.ping_instruction_label.show() - self.copy_ping_button.setEnabled(False) - self.test_ping_button.setEnabled(False) - self.ping_result_label.hide() - - if hasattr(self, 'wg_quick_up_command_widget'): - self.wg_quick_up_command_widget.setText( - "Could not load profile configuration") - self.wg_quick_down_command_widget.setText( - "Could not load profile configuration") - self.wg_quick_up_button.setEnabled(False) - self.wg_quick_down_button.setEnabled(False) - - def extract_endpoint_ip(self, profile): - try: - profile_path = Constants.HV_PROFILE_CONFIG_HOME + f'/{profile.id}' - wg_conf_path = f'{profile_path}/wg.conf.bak' - if not os.path.exists(wg_conf_path): - return None - - with open(wg_conf_path, 'r') as f: - content = f.read() - - for line in content.split('\n'): - if line.strip().startswith('Endpoint = '): - endpoint = line.strip().split(' = ')[1] - ip_address = endpoint.split(':')[0] - return ip_address - return None - except Exception: - return None - - def copy_ping_command(self): - profile_id = self.debug_profile_selector.currentData() - if profile_id is None: - return - - profile = ProfileController.get(profile_id) - if profile and isinstance(profile, SystemProfile): - ip_address = self.extract_endpoint_ip(profile) - if ip_address: - ping_command = f"ping {ip_address}" - clipboard = QApplication.clipboard() - clipboard.setText(ping_command) - self.update_status.update_status( - "Ping command copied to clipboard") - - def test_ping_connection(self): - profile_id = self.debug_profile_selector.currentData() - if profile_id is None: - return - - profile = ProfileController.get(profile_id) - if profile and isinstance(profile, SystemProfile): - ip_address = self.extract_endpoint_ip(profile) - if ip_address: - self.test_ping_button.setEnabled(False) - self.ping_result_label.setText("Testing ping...") - self.ping_result_label.setStyleSheet( - f"color: #FFA500; font-size: 12px; font-weight: bold; {self.font_style}") - self.ping_result_label.show() - - def ping_test(): - try: - if sys.platform == "win32": - result = subprocess.run(['ping', '-n', '4', ip_address], - capture_output=True, text=True, timeout=10) - else: - result = subprocess.run(['ping', '-c', '4', ip_address], - capture_output=True, text=True, timeout=10) - if result.returncode == 0: - self.ping_result_label.setText( - "✅ Ping successful - Connection is working!") - self.ping_result_label.setStyleSheet( - f"color: #4CAF50; font-size: 12px; font-weight: bold; {self.font_style}") - else: - self.ping_result_label.setText( - "❌ Ping failed - Connection issue detected") - self.ping_result_label.setStyleSheet( - f"color: #F44336; font-size: 12px; font-weight: bold; {self.font_style}") - except subprocess.TimeoutExpired: - self.ping_result_label.setText( - "❌ Ping timeout - Connection issue detected") - self.ping_result_label.setStyleSheet( - f"color: #F44336; font-size: 12px; font-weight: bold; {self.font_style}") - except Exception as e: - self.ping_result_label.setText( - f"❌ Ping error: {str(e)}") - self.ping_result_label.setStyleSheet( - f"color: #F44336; font-size: 12px; font-weight: bold; {self.font_style}") - finally: - self.test_ping_button.setEnabled(True) - - threading.Thread(target=ping_test, daemon=True).start() - - def copy_wg_quick_up_command(self): - clipboard = QApplication.clipboard() - clipboard.setText(self.wg_quick_up_command_widget.text()) - self.update_status.update_status( - "wg-quick UP command copied to clipboard") - - def copy_wg_quick_down_command(self): - clipboard = QApplication.clipboard() - clipboard.setText(self.wg_quick_down_command_widget.text()) - self.update_status.update_status( - "wg-quick DOWN command copied to clipboard") - - def on_profile_selected(self, button): - self.delete_button.setEnabled(True) - self.selected_profile_id = self.profile_buttons.id(button) - - def delete_selected_profile(self): - if hasattr(self, 'selected_profile_id'): - self.popup = ConfirmationPopup( - self, - message=f"Are you sure you want to delete Profile {self.selected_profile_id}?", - action_button_text="Delete", - cancel_button_text="Cancel" - ) - self.popup.setWindowModality(Qt.WindowModality.ApplicationModal) - self.popup.finished.connect(self.handle_delete_confirmation) - self.popup.show() - - def handle_delete_confirmation(self, confirmed): - if confirmed: - self.update_status.update_status(f'Deleting profile...') - self.worker_thread = WorkerThread('DESTROY_PROFILE', profile_data={ - 'id': self.selected_profile_id}) - self.worker_thread.text_output.connect(self.delete_status_update) - self.worker_thread.start() - - def delete_status_update(self, message): - self.update_status.update_status(message) - self.content_layout.removeWidget(self.delete_page) - self.delete_page = self.create_delete_page() - self.content_layout.addWidget(self.delete_page) - self.content_layout.setCurrentWidget(self.delete_page) - - def get_combobox_style(self) -> str: - return f""" - QComboBox {{ - color: black; - background: #f0f0f0; - padding: 5px 30px 5px 10px; - border: 1px solid #ccc; - border-radius: 4px; - min-width: 120px; - margin-bottom: 10px; - {self.font_style} - }} - QComboBox:disabled {{ - color: #666; - background: #e0e0e0; - }} - QComboBox::drop-down {{ - border: none; - width: 30px; - }} - QComboBox::down-arrow {{ - image: url(assets/down_arrow.png); - width: 12px; - height: 12px; - }} - QComboBox QAbstractItemView {{ - color: black; - background: white; - selection-background-color: #007bff; - selection-color: white; - border: 1px solid #ccc; - {self.font_style} - }} - """ - - def get_checkbox_style(self) -> str: - return f""" - QCheckBox {{ - color: white; - spacing: 10px; - margin-top: 10px; - margin-bottom: 10px; - font-size: 14px; - {self.font_style} - }} - QCheckBox::indicator {{ - width: 18px; - height: 18px; - border: 2px solid #666666; - border-radius: 3px; - background-color: #2a2a2a; - }} - QCheckBox::indicator:checked {{ - background-color: #4CAF50; - border: 2px solid #4CAF50; - }} - QCheckBox::indicator:unchecked {{ - background-color: #2a2a2a; - border: 2px solid #666666; - }} - QCheckBox::indicator:hover {{ - border: 2px solid #888888; - }} - """ - - def populate_wireguard_profiles(self) -> None: - self.wireguard_profile_selector.clear() - profiles = ProfileController.get_all() - for profile_id, profile in profiles.items(): - if profile.connection.code == 'wireguard': - - self.wireguard_profile_selector.addItem( - f"Profile {profile_id}: {profile.name}", profile_id) - - def convert_duration(self, value: Union[str, int], to_hours: bool = True) -> Union[str, int]: - if to_hours: - number, unit = value.split(' ') - number = int(number) - if unit in ['day', 'days']: - return number * 24 - elif unit in ['week', 'weeks']: - return number * 7 * 24 - else: - raise ValueError(f"Unsupported duration unit: {unit}") - else: - hours = int(value) - if hours % (7 * 24) == 0: - weeks = hours // (7 * 24) - return f"{weeks} {'week' if weeks == 1 else 'weeks'}" - elif hours % 24 == 0: - days = hours // 24 - return f"{days} {'day' if days == 1 else 'days'}" - else: - raise ValueError( - f"Hours value {hours} cannot be converted to days or weeks cleanly") - - def reverse(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def create_subscription_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("Subscription Info") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - profile_group = QGroupBox("Profile Selection") - profile_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - profile_layout = QVBoxLayout(profile_group) - - self.profile_selector = QComboBox() - self.profile_selector.setStyleSheet(self.get_combobox_style()) - profiles = ProfileController.get_all() - if profiles: - for profile_id, profile in profiles.items(): - self.profile_selector.addItem( - f"Profile {profile_id}: {profile.name}", profile_id) - profile_layout.addWidget(self.profile_selector) - layout.addWidget(profile_group) - - subscription_group = QGroupBox("Subscription Details") - subscription_group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - subscription_layout = QGridLayout(subscription_group) - subscription_layout.setSpacing(10) - - self.subscription_info = {} - info_items = [ - ("Billing Code", "billing_code"), - ("Expires At", "expires_at") - ] - - for i, (label, key) in enumerate(info_items): - if key == "billing_code": - billing_container = QWidget() - billing_layout = QVBoxLayout(billing_container) - billing_layout.setContentsMargins(0, 0, 0, 0) - billing_layout.setSpacing(5) - - stat_widget = self.create_stat_widget(label, "N/A") - billing_layout.addWidget(stat_widget) - - copy_button = QPushButton("Copy") - copy_button.setFixedSize(60, 30) - copy_button.setStyleSheet(f""" - QPushButton {{ - background: #007AFF; - color: white; - border: none; - border-radius: 4px; - font-size: 11px; - font-weight: bold; - {self.font_style} - }} - QPushButton:hover {{ - background: #0056CC; - }} - """) - copy_button.clicked.connect(lambda: self.copy_billing_code()) - billing_layout.addWidget(copy_button) - - row, col = divmod(i, 2) - subscription_layout.addWidget(billing_container, row, col) - - old_label = stat_widget.findChild(QLabel, "value_label") - if old_label: - old_label.setParent(None) - old_label.deleteLater() - - value_label = ClickableValueLabel("N/A", stat_widget) - value_label.setObjectName("value_label") - value_label.setStyleSheet( - f"color: #00ffff; font-size: 12px; font-family: 'Retro Gaming', sans-serif;") - value_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - stat_widget.layout().insertWidget(0, value_label) - - self.subscription_info[key] = value_label - else: - stat_widget = self.create_stat_widget(label, "N/A") - row, col = divmod(i, 2) - subscription_layout.addWidget(stat_widget, row, col) - - old_label = stat_widget.findChild(QLabel, "value_label") - if old_label: - old_label.setParent(None) - old_label.deleteLater() - - value_label = ClickableValueLabel("N/A", stat_widget) - value_label.setObjectName("value_label") - value_label.setStyleSheet( - f"color: #00ffff; font-size: 12px; font-family: 'Retro Gaming', sans-serif;") - value_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - stat_widget.layout().insertWidget(0, value_label) - - self.subscription_info[key] = value_label - - layout.addWidget(subscription_group) - - clipboard_hint = QLabel( - "💡 Click on the billing code or use the Copy button to copy it to clipboard") - clipboard_hint.setStyleSheet( - f"color: #666666; font-size: 11px; font-style: italic; {self.font_style}") - clipboard_hint.setAlignment(Qt.AlignmentFlag.AlignCenter) - layout.addWidget(clipboard_hint) - - layout.addStretch() - - self.profile_selector.currentIndexChanged.connect( - self.update_subscription_info) - if self.profile_selector.count() > 0: - self.update_subscription_info(0) - - return page - - def create_verification_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("Verification Information") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - profile_label = QLabel("Profile Selection:") - profile_label.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - layout.addWidget(profile_label) - - self.verification_profile_selector = QComboBox() - self.verification_profile_selector.setStyleSheet( - self.get_combobox_style()) - profiles = ProfileController.get_all() - if profiles: - for profile_id, profile in profiles.items(): - self.verification_profile_selector.addItem( - f"Profile {profile_id}: {profile.name}", profile_id) - layout.addWidget(self.verification_profile_selector) - - details_label = QLabel("Verification Details:") - details_label.setStyleSheet( - f"color: white; font-size: 14px; margin-top: 20px; {self.font_style}") - layout.addWidget(details_label) - - verification_layout = QVBoxLayout() - verification_layout.setSpacing(15) - self.verification_info = {} - self.verification_checkmarks = {} - self.verification_full_values = {} - info_items = [ - ("Operator Name", "operator_name"), - ("Nostr Key", "nostr_public_key"), - ("HydraVeil Key", "hydraveil_public_key"), - ("Nostr Verification", "nostr_attestation_event_reference"), - ] - - for label, key in info_items: - container = QWidget() - container_layout = QHBoxLayout(container) - container_layout.setContentsMargins(0, 0, 0, 0) - container_layout.setSpacing(10) - - label_widget = QLabel(label + ":") - label_widget.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - label_widget.setMinimumWidth(120) - container_layout.addWidget(label_widget) - - value_widget = QLineEdit() - value_widget.setReadOnly(True) - value_widget.setText("N/A") - value_widget.setStyleSheet(f""" - QLineEdit {{ - color: white; - background: transparent; - border: none; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); - padding: 5px 0px; - font-size: 12px; - {self.font_style} - }} - """) - container_layout.addWidget(value_widget, 1) - - checkmark_widget = QLabel("✓") - checkmark_widget.setStyleSheet( - f"color: #4CAF50; font-size: 20px; font-weight: bold; {self.font_style}") - checkmark_widget.setFixedSize(20, 20) - checkmark_widget.setAlignment(Qt.AlignmentFlag.AlignCenter) - checkmark_widget.hide() - container_layout.addWidget(checkmark_widget) - - copy_button = QPushButton() - copy_button.setIcon( - QIcon(os.path.join(self.btn_path, "paste_button.png"))) - copy_button.setIconSize(QSize(24, 24)) - copy_button.setFixedSize(30, 30) - copy_button.setStyleSheet(f""" - QPushButton {{ - background: transparent; - border: none; - }} - QPushButton:hover {{ - background: rgba(255, 255, 255, 0.1); - border-radius: 4px; - }} - """) - copy_button.clicked.connect( - lambda checked=False, k=key: self.copy_verification_value(k)) - container_layout.addWidget(copy_button) - - verification_layout.addWidget(container) - self.verification_info[key] = value_widget - self.verification_checkmarks[key] = checkmark_widget - - layout.addLayout(verification_layout) - layout.addStretch() - - endpoint_verification_label = QLabel("Endpoint Verification:", page) - endpoint_verification_label.setGeometry(20, 420, 150, 20) - endpoint_verification_label.setStyleSheet( - f"color: white; font-size: 15px; {self.font_style}") - endpoint_verification_label.show() - - self.endpoint_verification_checkbox = QCheckBox(page) - self.endpoint_verification_checkbox.setGeometry(180, 415, 30, 30) - self.endpoint_verification_checkbox.setChecked( - ConfigurationController.get_endpoint_verification_enabled()) - self.endpoint_verification_checkbox.setStyleSheet( - self.get_checkbox_style()) - self.endpoint_verification_checkbox.show() - - save_button = QPushButton(page) - save_button.setGeometry(350, 410, 60, 31) - save_button.setIcon(QIcon(os.path.join(self.btn_path, "save.png"))) - save_button.setIconSize(QSize(60, 31)) - save_button.clicked.connect(self.save_verification_settings) - save_button.show() - - self.verification_profile_selector.currentIndexChanged.connect( - self.update_verification_info) - self.verification_profile_selector.activated.connect( - self.update_verification_info) - if self.verification_profile_selector.count() > 0: - self.update_verification_info(0) - - return page - - def truncate_key(self, text, max_length=50): - if not text or text == "N/A" or len(text) <= max_length: - return text - start_len = max_length // 2 - 2 - end_len = max_length // 2 - 2 - return text[:start_len] + "....." + text[-end_len:] - - def update_verification_info(self, index): - if index < 0: - return - - profile_id = self.verification_profile_selector.itemData(index) - if profile_id is None: - for key, widget in self.verification_info.items(): - widget.setText("N/A") - self.verification_full_values[key] = "N/A" - if key in self.verification_checkmarks: - self.verification_checkmarks[key].hide() - return - - profile = ProfileController.get(profile_id) - if not profile: - for key, widget in self.verification_info.items(): - widget.setText("N/A") - self.verification_full_values[key] = "N/A" - if key in self.verification_checkmarks: - self.verification_checkmarks[key].hide() - return - - operator = None - if profile.location and profile.location.operator: - operator = profile.location.operator - - if operator: - operator_name = operator.name or "N/A" - self.verification_full_values["operator_name"] = operator_name - self.verification_info["operator_name"].setText(operator_name) - - nostr_key = operator.nostr_public_key or "N/A" - self.verification_full_values["nostr_public_key"] = nostr_key - self.verification_info["nostr_public_key"].setText( - self.truncate_key(nostr_key) if nostr_key != "N/A" else nostr_key) - - hydraveil_key = operator.public_key or "N/A" - self.verification_full_values["hydraveil_public_key"] = hydraveil_key - self.verification_info["hydraveil_public_key"].setText( - self.truncate_key(hydraveil_key) if hydraveil_key != "N/A" else hydraveil_key) - - nostr_verification = operator.nostr_attestation_event_reference or "N/A" - self.verification_full_values["nostr_attestation_event_reference"] = nostr_verification - self.verification_info["nostr_attestation_event_reference"].setText(self.truncate_key( - nostr_verification) if nostr_verification != "N/A" else nostr_verification) - else: - self.verification_info["operator_name"].setText("N/A") - self.verification_full_values["operator_name"] = "N/A" - self.verification_info["nostr_public_key"].setText("N/A") - self.verification_full_values["nostr_public_key"] = "N/A" - self.verification_info["hydraveil_public_key"].setText("N/A") - self.verification_full_values["hydraveil_public_key"] = "N/A" - self.verification_info["nostr_attestation_event_reference"].setText( - "N/A") - self.verification_full_values["nostr_attestation_event_reference"] = "N/A" - - for key, widget in self.verification_info.items(): - if key in self.verification_checkmarks: - full_value = self.verification_full_values.get(key, "") - if full_value and full_value != "N/A": - self.verification_checkmarks[key].show() - else: - self.verification_checkmarks[key].hide() - - def save_verification_settings(self): - try: - ConfigurationController.set_endpoint_verification_enabled( - self.endpoint_verification_checkbox.isChecked()) - self.update_status.update_status( - "Verification settings saved successfully") - except Exception as e: - logging.error(f"Error saving verification settings: {str(e)}") - self.update_status.update_status( - "Error saving verification settings") - - def copy_verification_value(self, key): - full_value = self.verification_full_values.get(key, "") - if full_value and full_value != "N/A": - clipboard = QApplication.clipboard() - clipboard.setText(full_value) - verification_display_names = { - "operator_name": "Operator Name", - "nostr_public_key": "Nostr Key", - "hydraveil_public_key": "HydraVeil Key", - "nostr_attestation_event_reference": "Nostr Verification" - } - display_name = verification_display_names.get( - key, "Verification value") - self.update_status.update_status( - f"{display_name} copied to clipboard") - - def update_subscription_info(self, index): - if index < 0: - return - - profile_id = self.profile_selector.itemData(index) - if profile_id is None: - return - - profile = ProfileController.get(profile_id) - - if profile and hasattr(profile, 'subscription') and profile.subscription: - try: - self.subscription_info["billing_code"].setText( - str(profile.subscription.billing_code)) - - if hasattr(profile.subscription, 'expires_at') and profile.subscription.expires_at: - expires_at = profile.subscription.expires_at.strftime( - "%Y-%m-%d %H:%M:%S UTC") - self.subscription_info["expires_at"].setText(expires_at) - else: - self.subscription_info["expires_at"].setText( - "Not available") - except Exception as e: - print(f"Error updating subscription info: {e}") - else: - for label in self.subscription_info.values(): - label.setText("N/A") - - def copy_billing_code(self): - if "billing_code" in self.subscription_info: - billing_code = self.subscription_info["billing_code"].text() - if billing_code and billing_code != "N/A": - clipboard = QApplication.clipboard() - clipboard.setText(billing_code) - self.update_status.update_status( - "Billing code copied to clipboard") - else: - self.update_status.update_status( - "No billing code available to copy") - - def showEvent(self, event): - super().showEvent(event) - - current_index = self.content_layout.currentIndex() - - self.content_layout.removeWidget(self.account_page) - self.account_page = self.create_account_page() - self.content_layout.addWidget(self.account_page) - - self.content_layout.removeWidget(self.subscription_page) - self.subscription_page = self.create_subscription_page() - self.content_layout.addWidget(self.subscription_page) - - self.content_layout.removeWidget(self.registrations_page) - self.registrations_page = self.create_registrations_page() - self.content_layout.addWidget(self.registrations_page) - - self.content_layout.removeWidget(self.verification_page) - self.verification_page = self.create_verification_page() - self.content_layout.addWidget(self.verification_page) - - self.content_layout.removeWidget(self.systemwide_page) - self.systemwide_page = self.create_systemwide_page() - self.content_layout.addWidget(self.systemwide_page) - - self.content_layout.removeWidget(self.bwrap_page) - self.bwrap_page = self.create_bwrap_page() - self.content_layout.addWidget(self.bwrap_page) - - self.content_layout.removeWidget(self.delete_page) - self.delete_page = self.create_delete_page() - self.content_layout.addWidget(self.delete_page) - - self.content_layout.removeWidget(self.logs_page) - self.logs_page = self.create_logs_page() - self.content_layout.addWidget(self.logs_page) - - self.content_layout.removeWidget(self.debug_page) - self.debug_page = self.create_debug_page() - self.content_layout.addWidget(self.debug_page) - - self.content_layout.setCurrentIndex(current_index) - - if self.content_layout.currentWidget() == self.subscription_page: - if self.profile_selector.count() > 0: - self.update_subscription_info(0) - - def create_account_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("Account Overview") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - scroll_area = QScrollArea() - scroll_area.setWidgetResizable(True) - scroll_area.setStyleSheet(f""" - QScrollArea {{ - border: none; - background: transparent; - }} - QScrollArea > QWidget > QWidget {{ - background: transparent; - }} - """) - - scroll_content = QWidget() - scroll_layout = QVBoxLayout(scroll_content) - scroll_layout.setSpacing(15) - - info_sections = [ - ("Profile Statistics", self.create_profile_stats()), - ("System Resources", self.create_system_stats()) - ] - - for section_title, content_widget in info_sections: - group = QGroupBox(section_title) - group.setStyleSheet(f""" - QGroupBox {{ - color: white; - font-weight: bold; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - padding: 15px; - margin-top: 15px; - {self.font_style} - }} - QGroupBox::title {{ - subcontrol-origin: margin; - left: 10px; - padding: 0 5px; - }} - """) - group_layout = QVBoxLayout(group) - group_layout.addWidget(content_widget) - scroll_layout.addWidget(group) - - scroll_area.setWidget(scroll_content) - layout.addWidget(scroll_area) - return page - - def create_profile_stats(self): - widget = QWidget() - layout = QGridLayout(widget) - layout.setSpacing(10) - - profiles = ProfileController.get_all() - total_profiles = len(profiles) - session_profiles = sum(1 for p in profiles.values() - if isinstance(p, SessionProfile)) - system_profiles = sum(1 for p in profiles.values() - if isinstance(p, SystemProfile)) - active_profiles = sum( - 1 for p in profiles.values() - if p.subscription and p.subscription.expires_at and p.subscription.expires_at > datetime.now(timezone.utc) - ) - - stats = [ - ("Total Profiles", total_profiles), - ("Browser-only", session_profiles), - ("System-wide", system_profiles), - ("Active Profiles", active_profiles) - ] - - for i, (label, value) in enumerate(stats): - stat_widget = self.create_stat_widget(label, value) - row, col = divmod(i, 2) - layout.addWidget(stat_widget, row, col) - - return widget - - def create_system_stats(self): - widget = QWidget() - layout = QGridLayout(widget) - layout.setSpacing(10) - - config_path = Constants.HV_CONFIG_HOME - - current_connection = self.update_status.get_current_connection() - - if current_connection is not None: - current_connection = current_connection.capitalize() - - stats = [ - ("Config Path", config_path), - ("Client Version", Constants.HV_CLIENT_VERSION_NUMBER), - ("Connection", current_connection), - ] - - for i, (label, value) in enumerate(stats): - info_widget = QLabel(f"{label}: {value}") - info_widget.setStyleSheet( - f"font-size: 14px; color: white; padding: 5px; {self.font_style}") - info_widget.setWordWrap(True) - layout.addWidget(info_widget, i, 0) - - return widget - - def create_stat_widget(self, label, value): - widget = QFrame() - widget.setStyleSheet(f""" - QFrame {{ - background: rgba(255, 255, 255, 0.05); - border-radius: 8px; - padding: 10px; - {self.font_style} - }} - """) - layout = QVBoxLayout(widget) - - value_label = QLabel(str(value)) - value_label.setObjectName("value_label") - value_label.setStyleSheet( - "font-family: 'Retro Gaming', sans-serif; color: #00ffff; font-size: 22px; font-weight: bold") - value_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - - desc_label = QLabel(label) - desc_label.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - desc_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - - layout.addWidget(value_label) - layout.addWidget(desc_label) - return widget - - def create_horizontal_stat(self, label, value, total): - widget = QWidget() - layout = QHBoxLayout(widget) - layout.setContentsMargins(0, 5, 0, 5) - - text_label = QLabel(f"{label}") - text_label.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - text_label.setFixedWidth(100) - - progress = QFrame() - progress.setStyleSheet(""" - QFrame { - background: rgba(0, 255, 255, 0.3); - border-radius: 3px; - } - """) - percentage = (value / total) * 100 if total > 0 else 0 - progress.setFixedSize(int(200 * (percentage / 100)), 20) - - value_label = QLabel(f"{value} ({percentage:.1f}%)") - value_label.setStyleSheet( - f"color: white; font-size: 12px; {self.font_style}") - value_label.setAlignment(Qt.AlignmentFlag.AlignRight) - - progress_container = QFrame() - progress_container.setStyleSheet(""" - QFrame { - background: rgba(255, 255, 255, 0.1); - border-radius: 3px; - } - """) - progress_container.setFixedSize(200, 20) - progress_layout = QHBoxLayout(progress_container) - progress_layout.setContentsMargins(0, 0, 0, 0) - progress_layout.addWidget(progress) - progress.setFixedHeight(20) - - layout.addWidget(text_label) - layout.addWidget(progress_container) - layout.addWidget(value_label) - layout.addStretch() - - return widget - - def setup_pages(self): - self.account_page = self.create_account_page() - self.subscription_page = self.create_subscription_page() - self.registrations_page = self.create_registrations_page() - self.verification_page = self.create_verification_page() - self.systemwide_page = self.create_systemwide_page() - self.bwrap_page = self.create_bwrap_page() - self.logs_page = self.create_logs_page() - self.delete_page = self.create_delete_page() - self.debug_page = self.create_debug_page() - - self.content_layout.addWidget(self.account_page) - self.content_layout.addWidget(self.subscription_page) - self.content_layout.addWidget(self.registrations_page) - self.content_layout.addWidget(self.verification_page) - self.content_layout.addWidget(self.systemwide_page) - self.content_layout.addWidget(self.bwrap_page) - self.content_layout.addWidget(self.logs_page) - self.content_layout.addWidget(self.delete_page) - self.content_layout.addWidget(self.debug_page) - - self.content_layout.setCurrentIndex(0) - self.show_account_page() - - def show_account_page(self): - self.content_layout.setCurrentWidget(self.account_page) - self._select_menu_button("Overview") - - def show_subscription_page(self): - self.content_layout.setCurrentWidget(self.subscription_page) - self._select_menu_button("Subscriptions") - - def show_registrations_page(self): - self.content_layout.setCurrentWidget(self.registrations_page) - self._select_menu_button("Create/Edit") - - def show_verification_page(self): - self.content_layout.setCurrentWidget(self.verification_page) - self._select_menu_button("Verification") - - def show_systemwide_page(self): - self.content_layout.setCurrentWidget(self.systemwide_page) - self._select_menu_button("Systemwide") - - def show_bwrap_page(self): - self.content_layout.setCurrentWidget(self.bwrap_page) - self._select_menu_button("Bwrap Permission") - - def show_logs_page(self): - self.content_layout.setCurrentWidget(self.logs_page) - self._select_menu_button("Error Logs") - - def show_delete_page(self): - self.content_layout.setCurrentWidget(self.delete_page) - self._select_menu_button("Delete Profile") - - def show_debug_page(self): - self.content_layout.setCurrentWidget(self.debug_page) - self._select_menu_button("Debug Help") - - def _select_menu_button(self, label): - for btn in self.menu_buttons: - if btn.text() == label: - btn.setChecked(True) - else: - btn.setChecked(False) - - def create_logs_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("LOGGING SETTINGS") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - log_text = QLabel( - f"Enabling this feature means error logs will be stored on your local\nmachine at: '{Constants.HV_CACHE_HOME}/gui'.") - log_text.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - layout.addWidget(log_text) - - logs_group = QGroupBox("Log Configuration") - logs_group.setStyleSheet( - f"QGroupBox {{ color: white; padding: 15px; {self.font_style} }}") - logs_layout = QVBoxLayout(logs_group) - - self.enable_gui_logging = QCheckBox("Enable GUI logging") - self.enable_gui_logging.setStyleSheet(self.get_checkbox_style()) - logs_layout.addWidget(self.enable_gui_logging) - layout.addWidget(logs_group) - - save_button = QPushButton() - save_button.setFixedSize(75, 46) - save_button.setIcon(QIcon(os.path.join(self.btn_path, f"save.png"))) - save_button.setIconSize(QSize(75, 46)) - save_button.clicked.connect(self.save_logs_settings) - - button_layout = QHBoxLayout() - button_layout.addStretch() - button_layout.addWidget(save_button) - layout.addLayout(button_layout) - - layout.addStretch() - self.load_logs_settings() - return page - - def load_logs_settings(self) -> None: - try: - config = self.update_status._load_gui_config() - if config and "logging" in config: - self.enable_gui_logging.setChecked( - config["logging"]["gui_logging_enabled"]) - except Exception as e: - logging.error(f"Error loading logging settings: {str(e)}") - self.enable_gui_logging.setChecked(True) - - def save_logs_settings(self) -> None: - try: - config = self.update_status._load_gui_config() - if config is None: - config = { - "logging": { - "gui_logging_enabled": True, - "log_level": "INFO" - } - } - - config["logging"]["gui_logging_enabled"] = self.enable_gui_logging.isChecked() - - self.update_status._save_gui_config(config) - - if self.enable_gui_logging.isChecked(): - self.update_status._setup_gui_logging() - else: - self.update_status.stop_gui_logging() - - self.update_status.update_status( - "Logging settings saved successfully") - - except Exception as e: - logging.error(f"Error saving logging settings: {str(e)}") - self.update_status.update_status("Error saving logging settings") - - def create_registrations_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("Create/Edit SETTINGS") - title.setStyleSheet( - f"color: #808080; font-size: 15px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - registrations_group = QGroupBox("Create/Edit Configuration") - registrations_group.setStyleSheet( - f"QGroupBox {{ color: white; font-size: 15px; padding: 15px; {self.font_style} }}") - registrations_layout = QVBoxLayout(registrations_group) - - self.enable_auto_sync = QCheckBox("Enable auto-sync on Edit") - self.enable_auto_sync.setStyleSheet(self.get_checkbox_style()) - registrations_layout.addWidget(self.enable_auto_sync) - - self.enable_fast_registration = QCheckBox( - "Enable Fast-mode for Profile Creation") - self.enable_fast_registration.setStyleSheet(self.get_checkbox_style()) - registrations_layout.addWidget(self.enable_fast_registration) - - self.dynamic_profiles_container = QWidget() - dynamic_layout = QVBoxLayout(self.dynamic_profiles_container) - dynamic_layout.setContentsMargins(20, 0, 0, 0) - - self.enable_dynamic_profiles = QCheckBox( - "Enable Dynamic Larger Profiles") - self.enable_dynamic_profiles.setStyleSheet(self.get_checkbox_style()) - dynamic_layout.addWidget(self.enable_dynamic_profiles) - - dynamic_desc = QLabel("This is for fast mode profile creation. Some users may wish to have screen sizes that are nearly as large as their host, but slightly smaller by differing amounts. This fools fingerprinters but still gives larger sizes. So for example if your host is 1200 x 800, then fast mode would offer 1150 x 750, 1100 x 700, 1050 x 650, etc.") - dynamic_desc.setWordWrap(True) - dynamic_desc.setStyleSheet( - f"color: #888888; font-size: 11px; font-style: italic; {self.font_style}") - dynamic_layout.addWidget(dynamic_desc) - - registrations_layout.addWidget(self.dynamic_profiles_container) - - self.enable_fast_registration.toggled.connect( - lambda checked: self.dynamic_profiles_container.setVisible(checked)) - - layout.addWidget(registrations_group) - - save_button = QPushButton() - save_button.setFixedSize(75, 46) - save_button.setIcon(QIcon(os.path.join(self.btn_path, f"save.png"))) - save_button.setIconSize(QSize(75, 46)) - save_button.clicked.connect(self.save_registrations_settings) - - button_layout = QHBoxLayout() - button_layout.addWidget(save_button) - button_layout.addStretch() - layout.addLayout(button_layout) - - layout.addStretch() - self.load_registrations_settings() - return page - - def create_systemwide_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("SYSTEM-WIDE PROFILES") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - description = QLabel( - "This is for the old version of the app! The new version prior to 2.1.0 does not need it. This allows you to enable or disable a legacy systemwide policy for sudo.") - description.setWordWrap(True) - description.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - layout.addWidget(description) - - status_layout = QHBoxLayout() - status_label = QLabel("Current status:") - status_label.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - self.systemwide_status_value = QLabel("") - self.systemwide_status_value.setStyleSheet( - f"color: #e67e22; font-size: 14px; {self.font_style}") - status_layout.addWidget(status_label) - status_layout.addWidget(self.systemwide_status_value) - status_layout.addStretch() - layout.addLayout(status_layout) - - toggle_layout = QHBoxLayout() - self.systemwide_toggle = QCheckBox( - "Enable \"No Sudo\" Systemwide Policy") - self.systemwide_toggle.setStyleSheet(self.get_checkbox_style()) - toggle_layout.addWidget(self.systemwide_toggle) - toggle_layout.addStretch() - layout.addLayout(toggle_layout) - - save_button = QPushButton() - save_button.setFixedSize(75, 46) - save_button.setIcon(QIcon(os.path.join(self.btn_path, "save.png"))) - save_button.setIconSize(QSize(75, 46)) - save_button.clicked.connect(self.save_systemwide_settings) - - button_layout = QHBoxLayout() - button_layout.addWidget(save_button) - button_layout.addStretch() - layout.addLayout(button_layout) - - layout.addStretch() - self.load_systemwide_settings() - return page - - def create_bwrap_page(self): - page = QWidget() - layout = QVBoxLayout(page) - layout.setSpacing(20) - layout.setContentsMargins(20, 20, 20, 20) - - title = QLabel("BWRAP PERMISSION") - title.setStyleSheet( - f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}") - layout.addWidget(title) - - description = QLabel( - "Control whether HydraVeil configures a capability policy so bwrap can be used without requiring additional permissions.") - description.setWordWrap(True) - description.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - layout.addWidget(description) - - status_layout = QHBoxLayout() - status_label = QLabel("Current status:") - status_label.setStyleSheet( - f"color: white; font-size: 14px; {self.font_style}") - self.bwrap_status_value = QLabel("") - self.bwrap_status_value.setStyleSheet( - f"color: #e67e22; font-size: 14px; {self.font_style}") - status_layout.addWidget(status_label) - status_layout.addWidget(self.bwrap_status_value) - status_layout.addStretch() - layout.addLayout(status_layout) - - toggle_layout = QHBoxLayout() - self.bwrap_toggle = QCheckBox("Enable capability policy") - self.bwrap_toggle.setStyleSheet(self.get_checkbox_style()) - toggle_layout.addWidget(self.bwrap_toggle) - toggle_layout.addStretch() - layout.addLayout(toggle_layout) - - save_button = QPushButton() - save_button.setFixedSize(75, 46) - save_button.setIcon(QIcon(os.path.join(self.btn_path, "save.png"))) - save_button.setIconSize(QSize(75, 46)) - save_button.clicked.connect(self.save_bwrap_settings) - - button_layout = QHBoxLayout() - button_layout.addWidget(save_button) - button_layout.addStretch() - layout.addLayout(button_layout) - - layout.addStretch() - self.load_bwrap_settings() - return page - - def load_systemwide_settings(self): - enabled = False - try: - privilege_policy = PolicyController.get('privilege') - if privilege_policy is not None: - enabled = PolicyController.is_instated(privilege_policy) - except Exception: - enabled = False - self.systemwide_toggle.setChecked(enabled) - if enabled: - self.systemwide_status_value.setText("Enabled") - self.systemwide_status_value.setStyleSheet( - f"color: #2ecc71; font-size: 14px; {self.font_style}") - else: - self.systemwide_status_value.setText("Disabled") - self.systemwide_status_value.setStyleSheet( - f"color: #e67e22; font-size: 14px; {self.font_style}") - - def save_systemwide_settings(self): - enable = self.systemwide_toggle.isChecked() - try: - privilege_policy = PolicyController.get('privilege') - if privilege_policy is not None: - if enable: - PolicyController.instate(privilege_policy) - else: - if PolicyController.is_instated(privilege_policy): - PolicyController.revoke(privilege_policy) - self.load_systemwide_settings() - self.update_status.update_status( - "System-wide policy settings updated") - except CommandNotFoundError as e: - self.systemwide_status_value.setText(str(e)) - self.systemwide_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - except (PolicyAssignmentError, PolicyInstatementError, PolicyRevocationError) as e: - self.systemwide_status_value.setText(str(e)) - self.systemwide_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - except Exception: - self.systemwide_status_value.setText("Failed to update policy") - self.systemwide_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - - def load_bwrap_settings(self): - enabled = False - try: - capability_policy = PolicyController.get('capability') - if capability_policy is not None: - enabled = PolicyController.is_instated(capability_policy) - except Exception: - enabled = False - self.bwrap_toggle.setChecked(enabled) - if enabled: - self.bwrap_status_value.setText("Enabled") - self.bwrap_status_value.setStyleSheet( - f"color: #2ecc71; font-size: 14px; {self.font_style}") - else: - self.bwrap_status_value.setText("Disabled") - self.bwrap_status_value.setStyleSheet( - f"color: #e67e22; font-size: 14px; {self.font_style}") - - def save_bwrap_settings(self): - enable = self.bwrap_toggle.isChecked() - try: - capability_policy = PolicyController.get('capability') - if capability_policy is not None: - if enable: - PolicyController.instate(capability_policy) - else: - if PolicyController.is_instated(capability_policy): - PolicyController.revoke(capability_policy) - self.load_bwrap_settings() - self.update_status.update_status( - "Capability policy settings updated") - except CommandNotFoundError as e: - self.bwrap_status_value.setText(str(e)) - self.bwrap_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - except (PolicyAssignmentError, PolicyInstatementError, PolicyRevocationError) as e: - self.bwrap_status_value.setText(str(e)) - self.bwrap_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - except Exception: - self.bwrap_status_value.setText("Failed to update policy") - self.bwrap_status_value.setStyleSheet( - f"color: red; font-size: 14px; {self.font_style}") - - def load_registrations_settings(self) -> None: - try: - config = self.update_status._load_gui_config() - if config and "registrations" in config: - registrations = config["registrations"] - auto_sync = registrations.get("auto_sync_enabled", False) - fast_reg = registrations.get( - "fast_registration_enabled", False) - dynamic_profiles = registrations.get( - "dynamic_larger_profiles", False) - if "auto_sync_enabled" not in registrations or "fast_registration_enabled" not in registrations or "dynamic_larger_profiles" not in registrations: - registrations["auto_sync_enabled"] = auto_sync - registrations["fast_registration_enabled"] = fast_reg - registrations["dynamic_larger_profiles"] = dynamic_profiles - self.update_status._save_gui_config(config) - self.enable_auto_sync.setChecked(auto_sync) - self.enable_fast_registration.setChecked(fast_reg) - self.enable_dynamic_profiles.setChecked(dynamic_profiles) - self.dynamic_profiles_container.setVisible(fast_reg) - else: - self.enable_auto_sync.setChecked(False) - self.enable_fast_registration.setChecked(False) - self.enable_dynamic_profiles.setChecked(False) - self.dynamic_profiles_container.setVisible(False) - except Exception as e: - logging.error(f"Error loading registration settings: {str(e)}") - self.enable_auto_sync.setChecked(False) - self.enable_fast_registration.setChecked(False) - self.enable_dynamic_profiles.setChecked(False) - self.dynamic_profiles_container.setVisible(False) - - def save_registrations_settings(self) -> None: - try: - config = self.update_status._load_gui_config() - if config is None: - config = { - "logging": { - "gui_logging_enabled": True, - "log_level": "INFO" - }, - "registrations": { - "auto_sync_enabled": False, - "fast_registration_enabled": False - } - } - - if "registrations" not in config: - config["registrations"] = {} - - config["registrations"]["auto_sync_enabled"] = self.enable_auto_sync.isChecked() - config["registrations"]["fast_registration_enabled"] = self.enable_fast_registration.isChecked() - config["registrations"]["dynamic_larger_profiles"] = self.enable_dynamic_profiles.isChecked() - - self.update_status._save_gui_config(config) - self.update_status.update_status("Registration settings saved") - - except Exception as e: - logging.error(f"Error saving registration settings: {str(e)}") - self.update_status.update_status( - "Error saving registration settings") - - def is_auto_sync_enabled(self) -> bool: - try: - config = self.update_status._load_gui_config() - if config and "registrations" in config: - registrations = config["registrations"] - return registrations.get("auto_sync_enabled", False) - return False - except Exception as e: - logging.error(f"Error checking auto-sync setting: {str(e)}") - return False - - def is_fast_registration_enabled(self) -> bool: - try: - config = self.update_status._load_gui_config() - if config and "registrations" in config: - registrations = config["registrations"] - return registrations.get("fast_registration_enabled", False) - return False - except Exception as e: - logging.error( - f"Error checking fast registration setting: {str(e)}") - return False - - -class IdPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Id", page_stack, main_window, parent) - self.update_status = main_window - self.btn_path = main_window.btn_path - self.buttonGroup = QButtonGroup(self) - self.display.setGeometry(QtCore.QRect(-10, 50, 550, 460)) - # self.display.setPixmap(QPixmap(os.path.join(self.btn_path, "wireguardx.png")).scaled(self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - self.create_interface_elements() - - self.connect_button = QPushButton(self) - self.connect_button.setObjectName("connect_button") - self.connect_button.setGeometry(625, 450, 90, 50) - self.connect_button.setIconSize(self.connect_button.size()) - tor_icon = QIcon(os.path.join(self.btn_path, "connect.png")) - self.connect_button.setIcon(tor_icon) - self.connect_button.clicked.connect(self.on_connect) - self.connect_button.setDisabled(True) - - self.button_reverse.setVisible(True) - - def on_connect(self): - text = self.text_edit.toPlainText() - import re - pattern = r'^[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$' - if re.match(pattern, text): - self.update_status.update_status('Enabling profile in progress...') - profile_data = { - 'id': int(self.update_status.current_profile_id), - 'billing_code': str(text) - } - menu_page = self.find_menu_page() - if menu_page: - menu_page.enabling_profile(profile_data) - - else: - self.update_status.update_status( - 'Incorrect format for the billing code') - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - def create_interface_elements(self): - self.object_selected = None - self.display.setGeometry(QtCore.QRect(5, 50, 550, 460)) - self.title = QLabel("Entry Id", self) - self.title.setGeometry(QtCore.QRect(560, 50, 220, 40)) - self.title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - - self.button_reverse.clicked.connect(self.reverse) - self.button_go.clicked.connect(self.go_selected) - - objects_info = [ - (QPushButton, os.path.join(self.btn_path, "new_id.png"), - self.show_next, DurationSelectionPage, (575, 100, 185, 75)), - (QLabel, os.path.join(self.btn_path, "button230x220.png"), - None, None, (550, 220, 250, 220)), - (QTextEdit, None, self.validate_password, - DurationSelectionPage, (550, 230, 230, 190)) - ] - - for obj_type, icon_name, function, page_class, geometry in objects_info: - obj = obj_type(self) - obj.setGeometry(*geometry) - if isinstance(obj, QPushButton): - obj.setIconSize(QtCore.QSize(190, 120)) - obj.setIcon(QtGui.QIcon(icon_name)) - obj.clicked.connect( - lambda _, func=function, page=page_class: self.show_object_selected(func, page)) - - elif isinstance(obj, QLabel): - obj.setPixmap(QPixmap(icon_name).scaled( - obj.size(), Qt.AspectRatioMode.KeepAspectRatio)) - - elif isinstance(obj, QTextEdit): - obj.setPlaceholderText( - "Or use an existing billing Id, enter it here") - obj.textChanged.connect(self.toggle_button_state) - self.text_edit = obj - - self.note_label = QLabel( - "Note: Billing IDs are tied to a single location", self) - self.note_label.setGeometry(1, 100, 500, 20) - self.note_label.setStyleSheet( - "color: white; font-size: 17px; font-style: italic; font-weight: bold;") - self.note_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.note_label.show() - - def toggle_button_state(self): - text = self.text_edit.toPlainText() - if text.strip(): - self.connect_button.setEnabled(True) - else: - self.connect_button.setEnabled(False) - - def show_next(self): - - self.text_edit.clear() - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(DurationSelectionPage))) - - def validate_password(self): - self.button_go.setVisible(False) - text = self.text_edit.toPlainText().strip().lower() - - # Comparar el texto con la palabra "zenaku" ignorando mayúsculas y minúsculas - if text == "zenaku": - self.button_go.setVisible(True) - - def show_object_selected(self, function, page_class): - function() - self.object_selected = page_class - - def go_selected(self): - if self.object_selected: - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(self.object_selected))) - self.display.clear() - for boton in self.buttons: - boton.setChecked(False) - - self.button_go.setVisible(False) - - def reverse(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - -class ConfettiParticle: - def __init__(self, x, y): - self.x = x - self.y = y - self.color = QColor(random.randint(0, 255), random.randint( - 0, 255), random.randint(0, 255)) - self.size = random.randint(5, 15) - self.speed = random.uniform(1, 3) - - def update(self): - self.y += self.speed - - -class ConfettiThread(QThread): - update_signal = pyqtSignal(list) - - def __init__(self, width, height): - super().__init__() - self.width = width - self.height = height - self.running = True - self.mutex = QMutex() - self.confetti = [ConfettiParticle(random.randint( - 0, width), random.randint(-height, 0)) for _ in range(100)] - - def run(self): - while self.running: - with QMutexLocker(self.mutex): - for particle in self.confetti: - particle.update() - if particle.y > self.height: - particle.y = random.randint(-100, 0) - particle.x = random.randint(0, self.width) - - self.update_signal.emit(self.confetti.copy()) - self.msleep(16) - - def stop(self): - self.running = False - - def update_dimensions(self, width, height): - with QMutexLocker(self.mutex): - self.width = width - self.height = height - - -class ClickableLabel(QLabel): - clicked = pyqtSignal() - - def __init__(self, text, parent=None, **kwargs): - super().__init__(text, parent, **kwargs) - self.setCursor(Qt.CursorShape.PointingHandCursor) - self.hover_width = self.width() - self.is_hovered = False - - def mousePressEvent(self, event): - self.clicked.emit() - super().mousePressEvent(event) - - def enterEvent(self, event): - self.is_hovered = True - self.update() - super().enterEvent(event) - - def leaveEvent(self, event): - self.is_hovered = False - self.update() - super().leaveEvent(event) - - def set_hover_width(self, width): - self.hover_width = width - self.update() - - def paintEvent(self, event): - super().paintEvent(event) - if self.is_hovered: - painter = QPainter(self) - painter.setRenderHint(QPainter.RenderHint.Antialiasing) - hover_color = QColor(255, 255, 255, 25) - - center_x = self.width() // 2 - start_x = center_x - (self.hover_width // 2) - painter.fillRect(start_x, 0, self.hover_width, - self.height(), hover_color) - painter.end() - - -class PaymentConfirmed(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Id", page_stack, main_window, parent) - - self.update_status = main_window - self.buttonGroup = QButtonGroup(self) - self.display.setGeometry(QRect(-10, 50, 550, 460)) - # self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"wireguardx.png")).scaled(self.display.size(), Qt.AspectRatioMode.KeepAspectRatio)) - - self.button_reverse.setVisible(False) - - self.confetti = [] - - self.icon_label = QLabel(self) - icon = QIcon(os.path.join(self.btn_path, "check_icon.png")) - pixmap = icon.pixmap(QSize(64, 64)) - self.icon_label.setPixmap(pixmap) - self.icon_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.label = QLabel("Payment Completed!", - alignment=Qt.AlignmentFlag.AlignCenter, parent=self) - self.label.setStyleSheet( - "font-size: 24px; color: #2ecc71; font-weight: bold;") - - self.billing_label = QLabel( - "Your billing code:", alignment=Qt.AlignmentFlag.AlignCenter, parent=self) - self.billing_label.setStyleSheet("font-size: 18px; color: white;") - - self.billing_code = ClickableLabel( - "", alignment=Qt.AlignmentFlag.AlignCenter, parent=self) - self.billing_code.setStyleSheet(""" - font-size: 24px; - color: white; - font-weight: bold; - padding: 5px; - border-radius: 5px; - """) - self.billing_code.clicked.connect(self.copy_billing_code) - self.billing_code.set_hover_width(450) - - self.top_line = QFrame(self) - self.top_line.setFrameShape(QFrame.Shape.HLine) - self.top_line.setStyleSheet("color: #bdc3c7;") - - self.bottom_line = QFrame(self) - self.bottom_line.setFrameShape(QFrame.Shape.HLine) - self.bottom_line.setStyleSheet("color: #bdc3c7;") - - self.next_button = QPushButton("Next", self) - self.next_button.setStyleSheet(""" - QPushButton { - background-color: #3498db; - color: white; - border: none; - padding: 10px; - font-size: 18px; - border-radius: 5px; - } - QPushButton:hover { - background-color: #2980b9; - } - """) - self.next_button.clicked.connect(self.on_next_button) - - self.confetti_thread = ConfettiThread(self.width(), self.height()) - self.confetti_thread.update_signal.connect(self.update_confetti) - self.confetti_thread.start() - - def copy_billing_code(self): - clipboard = QApplication.clipboard() - clipboard.setText(self.billing_code.text()) - - original_style = self.billing_code.styleSheet() - - self.billing_code.setText("Copied!") - self.billing_code.setStyleSheet( - original_style + "background-color: #27ae60;") - - QTimer.singleShot( - 1000, lambda: self.reset_billing_code_style(original_style)) - - def reset_billing_code_style(self, original_style): - self.billing_code.setStyleSheet(original_style) - self.billing_code.setText(self.current_billing_code) - - def set_billing_code(self, code): - self.current_billing_code = code - self.billing_code.setText(code) - - def update_confetti(self, confetti): - self.confetti = confetti - self.update() - - def paintEvent(self, event): - super().paintEvent(event) - - painter = QPainter(self) - painter.setRenderHint(QPainter.RenderHint.Antialiasing) - - for particle in self.confetti: - painter.setBrush(particle.color) - painter.setPen(Qt.PenStyle.NoPen) - painter.drawEllipse(QPointF(particle.x, particle.y), - particle.size, particle.size) - - painter.end() - - def resizeEvent(self, event): - super().resizeEvent(event) - width = event.size().width() - height = event.size().height() - - self.icon_label.setGeometry( - QRect(width // 2 - 32, height // 8, 64, 64)) - self.label.setGeometry(QRect(0, height // 4, width, 50)) - self.billing_label.setGeometry(QRect(0, height // 2 - 50, width, 30)) - self.top_line.setGeometry( - QRect(width // 4, height // 2 + 20, width // 2, 1)) - self.billing_code.setGeometry(QRect(0, height // 2 + 28, width, 40)) - self.bottom_line.setGeometry( - QRect(width // 4, height // 2 + 75, width // 2, 1)) - self.next_button.setGeometry( - QRect(width // 4, height * 3 // 4, width // 2, 50)) - - self.confetti_thread.update_dimensions(width, height) - - def closeEvent(self, event): - self.confetti_thread.stop() - self.confetti_thread.wait() - super().closeEvent(event) - - def on_next_button(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - def reverse(self): - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(WireGuardPage))) - - -class ConfirmationPopup(QWidget): - finished = pyqtSignal(bool) - - def __init__(self, parent=None, message="", action_button_text="", cancel_button_text="Cancel"): - super().__init__(parent) - self.parent_window = parent - self.message = message - self.action_button_text = action_button_text - self.cancel_button_text = cancel_button_text - self.initUI() - - def initUI(self): - self.setMinimumSize(400, 200) - self.setWindowFlags(Qt.WindowType.FramelessWindowHint) - self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) - - main_layout = QVBoxLayout() - self.setLayout(main_layout) - - bg_widget = QWidget(self) - bg_widget.setStyleSheet(""" - background-color: white; - border-radius: 10px; - """) - main_layout.addWidget(bg_widget) - - content_layout = QVBoxLayout(bg_widget) - - close_button = QPushButton("✕", self) - close_button.setStyleSheet(""" - QPushButton { - background-color: transparent; - color: #888888; - font-size: 16px; - font-weight: bold; - border: none; - } - QPushButton:hover { - color: #ff4d4d; - } - """) - close_button.setFixedSize(30, 30) - close_button.clicked.connect(self.close) - content_layout.addWidget( - close_button, alignment=Qt.AlignmentFlag.AlignRight) - - scroll_area = QScrollArea() - scroll_area.setWidgetResizable(True) - scroll_area.setFrameShape(QFrame.Shape.NoFrame) - content_layout.addWidget(scroll_area) - - scroll_content = QWidget() - scroll_layout = QVBoxLayout(scroll_content) - - message_label = QLabel(self.message) - message_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - message_label.setFont(QFont("Arial", 14)) - message_label.setStyleSheet("color: #333333; margin: 10px 0;") - message_label.setWordWrap(True) - scroll_layout.addWidget(message_label) - - scroll_area.setWidget(scroll_content) - - button_layout = QHBoxLayout() - content_layout.addLayout(button_layout) - - cancel_button = QPushButton(self.cancel_button_text) - cancel_button.setFixedSize(150, 50) - cancel_button.setFont(QFont("Arial", 12)) - cancel_button.setStyleSheet(""" - QPushButton { - background-color: #e0e0e0; - border: none; - color: #333333; - border-radius: 5px; - font-weight: bold; - } - QPushButton:hover { - background-color: #d0d0d0; - } - """) - cancel_button.clicked.connect(self.close) - button_layout.addWidget(cancel_button) - - action_button = QPushButton(self.action_button_text) - action_button.setFixedSize(150, 50) - action_button.setFont(QFont("Arial", 12)) - action_button.setStyleSheet(""" - QPushButton { - background-color: #ff4d4d; - border: none; - color: white; - border-radius: 5px; - font-weight: bold; - } - QPushButton:hover { - background-color: #ff3333; - } - """) - action_button.clicked.connect(self.perform_action) - button_layout.addWidget(action_button) - - def perform_action(self): - self.finished.emit(True) - self.close() - - def mousePressEvent(self, event): - self.oldPos = event.globalPosition().toPoint() - - def mouseMoveEvent(self, event): - delta = event.globalPosition().toPoint() - self.oldPos - self.move(self.x() + delta.x(), self.y() + delta.y()) - self.oldPos = event.globalPosition().toPoint() - - -class EndpointVerificationPopup(QWidget): - finished = pyqtSignal(bool, str) - - def __init__(self, parent=None, message=""): - super().__init__(parent) - self.parent_window = parent - self.message = message - self.initUI() - - def initUI(self): - self.setMinimumSize(500, 250) - self.setWindowFlags(Qt.WindowType.FramelessWindowHint) - self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) - - main_layout = QVBoxLayout() - self.setLayout(main_layout) - - bg_widget = QWidget(self) - bg_widget.setStyleSheet(""" - background-color: white; - border-radius: 10px; - """) - main_layout.addWidget(bg_widget) - - content_layout = QVBoxLayout(bg_widget) - - close_button = QPushButton("✕", self) - close_button.setStyleSheet(""" - QPushButton { - background-color: transparent; - color: #888888; - font-size: 16px; - font-weight: bold; - border: none; - } - QPushButton:hover { - color: #ff4d4d; - } - """) - close_button.setFixedSize(30, 30) - close_button.clicked.connect(lambda: self.close_with_action("abort")) - content_layout.addWidget( - close_button, alignment=Qt.AlignmentFlag.AlignRight) - - scroll_area = QScrollArea() - scroll_area.setWidgetResizable(True) - scroll_area.setFrameShape(QFrame.Shape.NoFrame) - content_layout.addWidget(scroll_area) - - scroll_content = QWidget() - scroll_layout = QVBoxLayout(scroll_content) - - message_label = QLabel(self.message) - message_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - message_label.setFont(QFont("Arial", 14)) - message_label.setStyleSheet("color: #333333; margin: 10px 0;") - message_label.setWordWrap(True) - scroll_layout.addWidget(message_label) - - scroll_area.setWidget(scroll_content) - - button_layout = QHBoxLayout() - content_layout.addLayout(button_layout) - - sync_button = QPushButton("Sync") - sync_button.setFixedSize(120, 50) - sync_button.setFont(QFont("Arial", 12)) - sync_button.setStyleSheet(""" - QPushButton { - background-color: #4CAF50; - border: none; - color: white; - border-radius: 5px; - font-weight: bold; - } - QPushButton:hover { - background-color: #45a049; - } - """) - sync_button.clicked.connect(lambda: self.close_with_action("sync")) - button_layout.addWidget(sync_button) - - abort_button = QPushButton("Abort") - abort_button.setFixedSize(120, 50) - abort_button.setFont(QFont("Arial", 12)) - abort_button.setStyleSheet(""" - QPushButton { - background-color: #e0e0e0; - border: none; - color: #333333; - border-radius: 5px; - font-weight: bold; - } - QPushButton:hover { - background-color: #d0d0d0; - } - """) - abort_button.clicked.connect(lambda: self.close_with_action("abort")) - button_layout.addWidget(abort_button) - - continue_button = QPushButton("Continue Anyway") - continue_button.setFixedSize(150, 50) - continue_button.setFont(QFont("Arial", 12)) - continue_button.setStyleSheet(""" - QPushButton { - background-color: #ff9800; - border: none; - color: white; - border-radius: 5px; - font-weight: bold; - } - QPushButton:hover { - background-color: #fb8c00; - } - """) - continue_button.clicked.connect( - lambda: self.close_with_action("continue")) - button_layout.addWidget(continue_button) - - def close_with_action(self, action): - self.finished.emit(True, action) - self.close() - - def closeEvent(self, event): - self.finished.emit(False, "abort") - event.accept() - - def mousePressEvent(self, event): - self.oldPos = event.globalPosition().toPoint() - - def mouseMoveEvent(self, event): - delta = event.globalPosition().toPoint() - self.oldPos - self.move(self.x() + delta.x(), self.y() + delta.y()) - self.oldPos = event.globalPosition().toPoint() - - -class ClickableValueLabel(QLabel): - def __init__(self, text: str, parent=None): - super().__init__(text, parent) - self.setObjectName("value_label") - self.setStyleSheet( - "color: #00ffff; font-size: 13px; font-weight: bold;") - self.setCursor(Qt.CursorShape.PointingHandCursor) - self.timer = QTimer(self) - self.timer.setSingleShot(True) - self.timer.timeout.connect(self.reset_style) - self.default_style = "color: #00ffff; font-size: 13px; font-weight: bold;" - self.success_style = "color: #00ff00; font-size: 13px; font-weight: bold;" - - def mousePressEvent(self, event): - if event.button() == Qt.MouseButton.LeftButton: - clipboard = QApplication.clipboard() - clipboard.setText(self.text()) - self.setStyleSheet(self.success_style) - self.timer.start(100) - - def reset_style(self): - self.setStyleSheet(self.default_style) - - -class SyncScreen(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("SyncScreen", page_stack, main_window, parent) - self.main_window = main_window - self.btn_path = main_window.btn_path - self.update_status = main_window - self.connection_manager = main_window.connection_manager - self.is_tor_mode = main_window.is_tor_mode - - self.heading_label = QLabel( - "You're about to fetch data from\nSimplified Privacy.", self) - self.heading_label.setGeometry(15, 80, 750, 120) - font_style = "font-size: 34px; font-weight: bold; color: white;" - if self.custom_window.open_sans_family: - font_style += f" font-family: '{self.custom_window.open_sans_family}';" - self.heading_label.setStyleSheet(font_style) - - self.data_description = QLabel( - "This data includes what plans, countries,\nbrowsers, and version upgrades are\navailable. As well as coordinating billing.", self) - self.data_description.setGeometry(22, 190, 750, 120) - font_style = "font-size: 24px; font-weight: bold; color: #ffff00;" - if self.custom_window.open_sans_family: - font_style += f" font-family: '{self.custom_window.open_sans_family}';" - self.data_description.setStyleSheet(font_style) - - self.instructions = QLabel( - "Use the toggle in the bottom right to\ndecide if you want to use Tor or not.\nThen hit \"Next\"", self) - self.instructions.setGeometry(22, 345, 750, 120) - font_style = "font-size: 28px; font-weight: bold; color: white;" - if self.custom_window.open_sans_family: - font_style += f" font-family: '{self.custom_window.open_sans_family}';" - self.instructions.setStyleSheet(font_style) - - self.arrow_label = QLabel(self) - self.arrow_label.setGeometry(520, 400, 180, 130) - arrow_pixmap = QPixmap(os.path.join(self.btn_path, "arrow-down.png")) - - self.arrow_label.setPixmap(arrow_pixmap) - self.arrow_label.raise_() - - self.button_go.setVisible(True) - self.button_back.setVisible(True) - self.button_go.clicked.connect(self.perform_sync) - self.button_back.clicked.connect(self.go_back) - - def go_back(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def perform_sync(self): - self.button_go.setEnabled(False) - self.button_back.setEnabled(False) - self.update_status.update_status('Sync in progress...') - if self.main_window.get_current_connection() == 'tor': - self.worker_thread = WorkerThread('SYNC_TOR') - else: - self.worker_thread = WorkerThread('SYNC') - - self.worker_thread.sync_output.connect(self.update_output) - self.worker_thread.start() - - def update_output(self, available_locations, available_browsers, status, is_tor, locations, all_browsers): - if isinstance(all_browsers, bool) and not all_browsers: - install_page = self.page_stack.findChild(InstallSystemPackage) - install_page.configure( - package_name='tor', distro='debian', is_sync=True) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(install_page)) - self.button_go.setEnabled(True) - self.button_back.setEnabled(True) - return - - if status is False: - self.button_go.setEnabled(True) - self.button_back.setEnabled(True) - self.update_status.update_status('An error occurred during sync') - return - - self.update_status.update_status('Sync complete') - - update_available = ClientController.can_be_updated() - - if update_available: - menu_page = self.page_stack.findChild(MenuPage) - menu_page.on_update_check_finished() - - self.update_after_sync(available_locations, - available_browsers, locations, all_browsers) - - self.page_stack.setCurrentIndex(self.page_stack.indexOf( - self.page_stack.findChild(ProtocolPage))) - - def update_after_sync(self, available_locations, available_browsers, locations, all_browsers=None): - - self.connection_manager.set_synced(True) - - available_locations_list = [] - available_browsers_list = [] - - self.connection_manager.store_locations(locations) - self.connection_manager.store_browsers(available_browsers) - - browser_positions = self.generate_grid_positions( - len(available_browsers)) - location_positions = self.generate_grid_positions( - len(available_locations)) - - for i, location in enumerate(available_locations): - available_locations_list.append( - (QPushButton, location, location_positions[i])) - - for i, browser in enumerate(available_browsers): - available_browsers_list.append( - (QPushButton, browser, browser_positions[i])) - - location_page = self.find_location_page() - hidetor_page = self.find_hidetor_page() - protocol_page = self.find_protocol_page() - browser_page = self.find_browser_page() - - if browser_page: - browser_page.create_interface_elements(available_browsers_list) - - if location_page: - location_page.create_interface_elements(available_locations_list) - if hidetor_page: - hidetor_page.create_interface_elements(available_locations_list) - if protocol_page: - protocol_page.enable_protocol_buttons() - - menu_page = self.find_menu_page() - if menu_page: - menu_page.refresh_profiles_data() - - def generate_grid_positions(self, num_items): - positions = [] - start_x = 395 - start_y = 90 - button_width = 185 - button_height = 75 - h_spacing = 10 - v_spacing = 105 - - for i in range(num_items): - col = i % 2 - row = i // 2 - - x = start_x + (col * (button_width + h_spacing)) - y = start_y + (row * v_spacing) - - positions.append((x, y, button_width, button_height)) - - return positions - - def find_browser_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, BrowserPage): - return page - return None - - def find_location_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, LocationPage): - return page - return None - - def find_hidetor_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, HidetorPage): - return page - return None - - def find_protocol_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, ProtocolPage): - return page - return None - - def find_menu_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, MenuPage): - return page - return None - - -class WelcomePage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Welcome", page_stack, main_window, parent) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.ui_elements = [] - self.button_next.clicked.connect(self.go_to_install) - self.button_next.setVisible(True) - self._setup_welcome_ui() - self._setup_stats_display() - - def _setup_welcome_ui(self): - welcome_title = QLabel('Welcome to HydraVeil', self) - welcome_title.setGeometry(20, 45, 760, 60) - welcome_title.setStyleSheet(""" - font-size: 32px; - font-weight: bold; - color: cyan; - """) - welcome_title.setAlignment(Qt.AlignmentFlag.AlignCenter) - - welcome_msg = QLabel( - "Before we begin your journey, we need to set up a few essential components. " - "Click 'Next' to take you to the installation page.", self) - welcome_msg.setGeometry(40, 100, 720, 80) - welcome_msg.setWordWrap(True) - welcome_msg.setStyleSheet(""" - font-size: 16px; - color: cyan; - """) - welcome_msg.setAlignment(Qt.AlignmentFlag.AlignCenter) - - def _setup_stats_display(self): - stats_container = QWidget(self) - stats_container.setGeometry(70, 200, 730, 240) - - stats_title = QLabel(stats_container) - stats_title.setText("Features & Services") - stats_title.setGeometry(190, 10, 300, 30) - stats_title.setStyleSheet(""" - font-size: 22px; - font-weight: bold; - color: cyan; - """) - - grid_widget = QWidget(stats_container) - grid_widget.setGeometry(0, 70, 700, 190) - grid_layout = QGridLayout(grid_widget) - grid_layout.setSpacing(30) - - stats = [ - ("Browsers", "browsers_mini.png", "10 Supported Browsers", True), - ("WireGuard", "wireguard_mini.png", "6 Global Locations", True), - ("Proxy", "just proxy_mini.png", "5 Proxy Locations", True), - ("Tor", "toricon_mini.png", "Tor Network Access", True) - ] - - for i, (title, icon_name, count, available) in enumerate(stats): - row = i // 2 - col = i % 2 - - stat_widget = QWidget() - stat_layout = QHBoxLayout(stat_widget) - stat_layout.setContentsMargins(20, 10, 2, 10) - stat_layout.setSpacing(15) - - icon_label = QLabel() - icon_path = os.path.join(self.btn_path, icon_name) - icon_label.setPixmap(QPixmap(icon_path).scaled( - 30, 30, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)) - icon_label.setFixedSize(30, 30) - stat_layout.addWidget(icon_label) - - text_widget = QWidget() - text_layout = QVBoxLayout(text_widget) - text_layout.setSpacing(5) - text_layout.setContentsMargins(0, 0, 30, 0) - - title_widget = QWidget() - title_layout = QHBoxLayout(title_widget) - title_layout.setContentsMargins(0, 0, 0, 0) - title_layout.setSpacing(10) - - title_label = QLabel(title) - title_label.setStyleSheet( - "font-size: 16px; font-weight: bold; color: #2c3e50;") - title_layout.addWidget(title_label) - - status_indicator = QLabel("●") - status_indicator.setStyleSheet("color: #2ecc71; font-size: 16px;") - title_layout.addWidget(status_indicator) - - title_layout.addStretch() - text_layout.addWidget(title_widget) - - count_label = QLabel(count) - count_label.setStyleSheet("font-size: 16px; color: #34495e;") - text_layout.addWidget(count_label) - - stat_layout.addWidget(text_widget, stretch=1) - - stat_widget.setStyleSheet(""" - QWidget { - background-color: transparent; - border-radius: 10px; - } - """) - - grid_layout.addWidget(stat_widget, row, col) - - def go_to_install(self): - install_page = self.page_stack.findChild(InstallSystemPackage) - install_page.configure(package_name='all', distro='debian') - self.page_stack.setCurrentIndex(self.page_stack.indexOf(install_page)) - - -''' -class SystemwidePromptPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Systemwide", page_stack, main_window, parent) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.button_back.setVisible(True) - self.button_back.clicked.connect(self.back_to_install) - self.button_next.setVisible(False) - self.button_go.setVisible(False) - self.status_label = QLabel(self) - self.status_label.setGeometry(80, 430, 640, 40) - self.status_label.setStyleSheet("font-size: 14px; color: cyan;") - self.setup_ui() - - def setup_ui(self): - self.title.setGeometry(20, 50, 760, 40) - self.title.setText("Enable \"no sudo\" systemwide") - description = QLabel(self) - description.setGeometry(80, 100, 640, 120) - description.setWordWrap(True) - description.setStyleSheet("font-size: 14px; color: cyan;") - description.setText("If you're using Systemwide profiles, you may wish to enable them without having to enter the sudo password each time for convenience. This requires the sudo password to setup profiles and disable them (for security), but not to turn it on each time. You can choose to set this up now or later in the options menu.") - - icon_label = QLabel(self) - icon_label.setGeometry(80, 300, 64, 64) - icon_pix = QPixmap(os.path.join( - self.btn_path, "wireguard_system_wide.png")) - icon_label.setPixmap(icon_pix.scaled( - 64, 64, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)) - yes_button = QPushButton("Yes, enable system-wide profiles", self) - yes_button.setGeometry(170, 300, 300, 50) - yes_button.setStyleSheet(""" - QPushButton { - background: #007AFF; - color: white; - border: none; - border-radius: 4px; - font-size: 13px; - font-weight: bold; - } - QPushButton:hover { - background: #0056CC; - } - """) - yes_button.clicked.connect(self.enable_systemwide) - no_button = QPushButton("Not now", self) - no_button.setGeometry(170, 370, 120, 40) - no_button.setStyleSheet(""" - QPushButton { - background: #007AFF; - color: white; - border: none; - border-radius: 4px; - font-size: 13px; - font-weight: bold; - } - QPushButton:hover { - background: #0056CC; - } - """) - no_button.clicked.connect(self.skip_systemwide) - self.refresh_status() - - def refresh_status(self): - privilege_policy = PolicyController.get('privilege') - if privilege_policy is not None and PolicyController.is_instated(privilege_policy): - self.status_label.setText( - "Current status: system-wide policy is enabled.") - self.status_label.setStyleSheet("font-size: 14px; color: #2ecc71;") - else: - self.status_label.setText( - "Current status: system-wide policy is disabled.") - self.status_label.setStyleSheet("font-size: 14px; color: #e67e22;") - - def enable_systemwide(self): - - try: - privilege_policy = PolicyController.get('privilege') - if privilege_policy is not None: - PolicyController.instate(privilege_policy) - self.update_status.mark_systemwide_prompt_shown() - self.refresh_status() - self.update_status.update_status("System-wide policy enabled") - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - except CommandNotFoundError as e: - self.status_label.setText(str(e)) - self.status_label.setStyleSheet("font-size: 14px; color: red;") - except (PolicyAssignmentError, PolicyInstatementError) as e: - self.status_label.setText(str(e)) - self.status_label.setStyleSheet("font-size: 14px; color: red;") - except Exception: - self.status_label.setText("Failed to enable system-wide policy") - self.status_label.setStyleSheet("font-size: 14px; color: red;") - - def skip_systemwide(self): - self.update_status.mark_systemwide_prompt_shown() - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def back_to_install(self): - install_page = self.page_stack.findChild(InstallSystemPackage) - if install_page: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(install_page)) - -''' - - -class PolicySuggestionPage(Page): - def __init__(self, page_stack, main_window=None, parent=None, policy_type='capability'): - super().__init__("PolicySuggestion", page_stack, main_window, parent) - self.btn_path = main_window.btn_path - self.update_status = main_window - self.policy_type = policy_type - self.policy = PolicyController.get(policy_type) - self.button_back.setVisible(False) - self.button_next.setVisible(False) - self.button_go.setVisible(False) - self.status_label = QLabel(self) - self.status_label.setGeometry(80, 430, 640, 40) - self.status_label.setStyleSheet("font-size: 14px; color: cyan;") - self.setup_ui() - - def setup_ui(self): - policy_name = "Capability" if self.policy_type == 'capability' else "Privilege" - self.title.setGeometry(20, 50, 760, 40) - self.title.setText(f"Policy Suggestion: {policy_name} Policy") - - description = QLabel(self) - description.setGeometry(80, 100, 640, 60) - description.setWordWrap(True) - description.setStyleSheet("font-size: 14px; color: cyan;") - description.setText( - f"A {policy_name.lower()} policy is available and can be instated to improve functionality. Review the policy details below before proceeding.") - - preview_label = QLabel(self) - preview_label.setGeometry(80, 170, 640, 30) - preview_label.setStyleSheet( - "font-size: 13px; color: white; font-weight: bold;") - preview_label.setText("Policy Preview:") - - preview_text = QTextEdit(self) - preview_text.setGeometry(80, 200, 640, 150) - preview_text.setReadOnly(True) - preview_text.setStyleSheet(""" - QTextEdit { - background-color: #1a1a1a; - color: #00ffff; - border: 1px solid #333; - border-radius: 4px; - font-family: monospace; - font-size: 11px; - padding: 5px; - } - """) - try: - preview_content = PolicyController.preview(self.policy) - preview_text.setText(preview_content) - except Exception as e: - preview_text.setText(f"Error loading preview: {str(e)}") - - yes_button = QPushButton(f"Instate {policy_name} Policy", self) - yes_button.setGeometry(170, 370, 250, 50) - yes_button.setStyleSheet(""" - QPushButton { - background: #007AFF; - color: white; - border: none; - border-radius: 4px; - font-size: 13px; - font-weight: bold; - } - QPushButton:hover { - background: #0056CC; - } - """) - yes_button.clicked.connect(self.instate_policy) - - no_button = QPushButton("Skip", self) - no_button.setGeometry(440, 370, 120, 50) - no_button.setStyleSheet(""" - QPushButton { - background: #666; - color: white; - border: none; - border-radius: 4px; - font-size: 13px; - font-weight: bold; - } - QPushButton:hover { - background: #555; - } - """) - no_button.clicked.connect(self.skip_policy) - - self.refresh_status() - - def refresh_status(self): - try: - if PolicyController.is_instated(self.policy): - self.status_label.setText( - f"Current status: {self.policy_type} policy is instated.") - self.status_label.setStyleSheet( - "font-size: 14px; color: #2ecc71;") - else: - self.status_label.setText( - f"Current status: {self.policy_type} policy is not instated.") - self.status_label.setStyleSheet( - "font-size: 14px; color: #e67e22;") - except Exception: - self.status_label.setText("Unable to determine policy status.") - self.status_label.setStyleSheet("font-size: 14px; color: #e67e22;") - - def instate_policy(self): - try: - PolicyController.instate(self.policy) - self.refresh_status() - policy_name = "Capability" if self.policy_type == 'capability' else "Privilege" - self.update_status.update_status(f"{policy_name} policy instated") - menu_page = self.page_stack.findChild(MenuPage) - if menu_page: - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(menu_page)) - else: - self.page_stack.setCurrentIndex(0) - except CommandNotFoundError as e: - self.status_label.setText(str(e)) - self.status_label.setStyleSheet("font-size: 14px; color: red;") - except (PolicyAssignmentError, PolicyInstatementError) as e: - self.status_label.setText(str(e)) - self.status_label.setStyleSheet("font-size: 14px; color: red;") - except Exception as e: - self.status_label.setText(f"Failed to instate policy: {str(e)}") - self.status_label.setStyleSheet("font-size: 14px; color: red;") - - def skip_policy(self): - menu_page = self.page_stack.findChild(MenuPage) - if menu_page: - self.page_stack.setCurrentIndex(self.page_stack.indexOf(menu_page)) - else: - self.page_stack.setCurrentIndex(0) - - -class DurationSelectionPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Select Duration", page_stack, main_window, parent) - self.update_status = main_window - self.create_interface_elements() - self.button_reverse.setVisible(True) - - def create_interface_elements(self): - self.title = QLabel("Select Duration", self) - self.title.setGeometry(QtCore.QRect(530, 30, 210, 40)) - self.title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.button_reverse.clicked.connect(self.reverse) - - self.combo_box = QComboBox(self) - self.combo_box.setGeometry(200, 200, 400, 60) - self.combo_box.addItems( - ["1 month (€1.50)", "3 months (€4.30)", "6 months (€8)", "12 months (€16)"]) - self.combo_box.setEditable(False) - self.combo_box.setMaxVisibleItems(4) - self.combo_box.setDuplicatesEnabled(True) - self.combo_box.setPlaceholderText("Select options") - self.combo_box.setStyleSheet(""" - QComboBox { - font-size: 16px; - padding: 10px; - background-color: #000000; - color: #00ffff; - border: 2px solid #00ffff; - border-radius: 8px; - } - QComboBox::drop-down { - width: 30px; - background-color: #1a1a1a; - border-left: 1px solid #00ffff; - } - QComboBox::down-arrow { - width: 12px; - height: 12px; - color: #00ffff; - } - QComboBox QAbstractItemView { - background-color: #0a0a0a; - border: 1px solid #00ffff; - border-radius: 4px; - selection-background-color: #003333; - selection-color: #00ffff; - } - QComboBox QAbstractItemView::item { - padding: 8px; - border: none; - color: #00ffff; - background-color: #0a0a0a; - } - QComboBox QAbstractItemView::item:hover { - background-color: #1a1a1a; - color: #00ffff; - } - QComboBox QAbstractItemView::item:selected { - background-color: #003333; - color: #00ffff; - } - """) - - self.next_button = QPushButton("Next", self) - self.next_button.setGeometry(350, 300, 100, 40) - self.next_button.setStyleSheet(""" - QPushButton { - font-size: 18px; - padding: 10px; - border: 2px solid #ccc; - border-radius: 10px; - background-color: cyan; - color: black; - font-weight: bold; - } - """) - self.next_button.clicked.connect(self.show_next) - - def show_next(self): - currency_page = self.page_stack.findChild(CurrencySelectionPage) - if currency_page: - currency_page.selected_duration = self.combo_box.currentText() - self.page_stack.setCurrentWidget(currency_page) - - def reverse(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(IdPage))) - - -class CurrencySelectionPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Select Currency", page_stack, main_window, parent) - self.update_status = main_window - self.selected_duration = None - self.create_interface_elements() - self.button_reverse.setVisible(True) - self.button_next.setVisible(False) - - def create_interface_elements(self): - self.title = QLabel("Payment Method", self) - self.title.setGeometry(QtCore.QRect(510, 30, 250, 40)) - self.title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.button_reverse.clicked.connect(self.reverse) - - button_info = [ - ("monero", (545, 75)), - ("bitcoin", (545, 290)), - ("lightnering", (545, 180)), - ("litecoin", (545, 395)) - ] - - self.buttonGroup = QButtonGroup(self) - self.buttons = [] - - for j, (icon_name, position) in enumerate(button_info): - button = QPushButton(self) - button.setGeometry(position[0], position[1], 185, 75) - button.setIconSize(QSize(190, 120)) - button.setCheckable(True) - self.buttons.append(button) - self.buttonGroup.addButton(button, j) - button.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}.png"))) - button.clicked.connect(self.on_currency_selected) - - def on_currency_selected(self): - payment_details_page = self.page_stack.findChild(PaymentDetailsPage) - if payment_details_page: - payment_details_page.selected_duration = self.selected_duration - payment_details_page.selected_currency = self.get_selected_currency() - payment_details_page.check_invoice() - self.page_stack.setCurrentWidget(payment_details_page) - self.update_status.update_status('Loading payment details...') - - def get_selected_currency(self): - selected_button = self.buttonGroup.checkedButton() - if selected_button: - index = self.buttonGroup.id(selected_button) - currencies = ["monero", "bitcoin", "lightning", "litecoin"] - return currencies[index] - return None - - def reverse(self): - duration_page = self.page_stack.findChild(DurationSelectionPage) - if duration_page: - self.page_stack.setCurrentWidget(duration_page) - - -class PaymentDetailsPage(Page): - def __init__(self, page_stack, main_window=None, parent=None): - super().__init__("Payment Details", page_stack, main_window, parent) - self.update_status = main_window - self.text_fields = [] - self.invoice_data = {} - self.selected_duration = None - self.selected_currency = None - - self.create_interface_elements() - self.button_reverse.setVisible(True) - - def create_interface_elements(self): - self.title = QLabel("Payment Details", self) - self.title.setGeometry(QtCore.QRect(530, 30, 210, 40)) - self.title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.button_reverse.clicked.connect(self.reverse) - - self.qr_code_button = QPushButton(self) - self.qr_code_button.setGeometry(360, 435, 50, 50) - qr_icon = QIcon(os.path.join(self.btn_path, "qr-code.png")) - self.qr_code_button.setIcon(qr_icon) - self.qr_code_button.setIconSize(self.qr_code_button.size()) - self.qr_code_button.clicked.connect(self.show_qr_code) - self.qr_code_button.setToolTip("Show QR Code") - self.qr_code_button.setDisabled(True) - - labels_info = [ - ("Your new billing ID", None, (20, 40), (240, 50)), - ("", "cuadro400x50", (20, 90), (400, 50)), - ("Duration", None, (20, 155), (150, 50)), - ("", "cuadro150x50", (200, 155), (150, 50)), - ("Amount", None, (10, 220), (150, 50)), - ("", "cuadro150x50", (200, 220), (150, 50)), - ("Hit this white icon to copy paste the address:", - None, (15, 305), (500, 30)), - ("", "cuadro400x50", (20, 350), (400, 50)), - ("Hit this icon to Scan the QR code:", None, (15, 450), (360, 30)), - ] - - for text, image_name, position, size in labels_info: - label = QLabel(self) - label.setGeometry(position[0], position[1], size[0], size[1]) - - if "Hit" in text: - label.setStyleSheet("font-size: 16px;") - label.setAlignment( - QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignVCenter) - else: - label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - - if image_name: - pixmap = QPixmap(os.path.join( - self.btn_path, f"{image_name}.png")) - label.setPixmap(pixmap) - label.setScaledContents(True) - else: - label.setText(text) - - line_edit_info = [ - (20, 90, 400, 50), - (200, 155, 150, 50), - (200, 220, 150, 50), - (20, 350, 400, 50), - ] - - for x, y, width, height in line_edit_info: - line_edit = QLineEdit(self) - line_edit.setGeometry(x, y, width, height) - line_edit.setReadOnly(True) - self.text_fields.append(line_edit) - line_edit.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - - copy_button_info = [ - (430, 90, 0), - (360, 220, 2), - (480, 290, 3), - ] - - for x, y, field_index in copy_button_info: - button = QPushButton(self) - button.setGeometry(x, y, 50, 50) - icon = QIcon(os.path.join(self.btn_path, "paste_button.png")) - button.setIcon(icon) - button.setIconSize(button.size()) - button.clicked.connect( - lambda checked, index=field_index: self.copy_text(index)) - - currency_button_info = [ - ("monero", (545, 75)), - ("bitcoin", (545, 290)), - ("lightnering", (545, 180)), - ("litecoin", (545, 395)) - ] - - self.currency_display_buttons = [] - for icon_name, position in currency_button_info: - button = QPushButton(self) - button.setGeometry(position[0], position[1], 185, 75) - button.setIconSize(QSize(190, 120)) - button.setCheckable(True) - button.setEnabled(False) - self.currency_display_buttons.append(button) - button.setIcon( - QIcon(os.path.join(self.btn_path, f"{icon_name}.png"))) - - def fetch_invoice_duration(self): - duration_month_num = int(self.selected_duration.split()[0]) - if duration_month_num == 12: - total_hours = 365 * 24 - else: - total_hours = duration_month_num * (30 * 24) - return total_hours - - def display_selected_options(self): - if self.selected_duration: - self.text_fields[1].setText(self.selected_duration) - self.text_fields[1].setStyleSheet('font-size: 13px;') - - if self.selected_currency: - currency_index_map = { - "monero": 0, - "bitcoin": 1, - "lightning": 2, - "litecoin": 3 - } - currency_index = currency_index_map.get(self.selected_currency, -1) - if currency_index >= 0: - for i, button in enumerate(self.currency_display_buttons): - button.setChecked(i == currency_index) - button.setEnabled(i == currency_index) - - def on_request_invoice(self): - total_hours = self.fetch_invoice_duration() - if self.selected_currency is None: - self.update_status.update_status('No currency selected') - return - - profile_data = { - 'id': int(self.update_status.current_profile_id), - 'duration': total_hours, - 'currency': 'xmr' if self.selected_currency == 'monero' else 'btc' if self.selected_currency == 'bitcoin' else 'btc-ln' if self.selected_currency == 'lightning' else 'ltc' if self.selected_currency == 'litecoin' else None - } - - self.update_status.update_status('Generating Invoice...') - self.worker_thread = WorkerThread( - 'GET_SUBSCRIPTION', profile_data=profile_data) - self.worker_thread.text_output.connect(self.invoice_update_text_output) - self.worker_thread.invoice_output.connect( - self.on_invoice_generation_finished) - self.worker_thread.invoice_finished.connect(self.on_invoice_finished) - self.worker_thread.start() - - def invoice_update_text_output(self, text): - self.update_status.update_status(text) - - if 'No compatible' in text: - for line in self.text_fields: - line.setText('') - - def store_invoice_data(self, billing_details: dict, duration: int): - self.invoice_data = { - 'billing_details': billing_details, - 'duration': duration - } - - def check_invoice(self): - self.display_selected_options() - total_hours = self.fetch_invoice_duration() - if self.invoice_data and self.invoice_data['duration'] == total_hours: - self.update_status.update_status('Checking invoice status...') - self.check_invoice_status( - self.invoice_data['billing_details'].billing_code) - else: - self.on_request_invoice() - - def check_invoice_status(self, billing_code: str): - self.worker_thread = WorkerThread('CHECK_INVOICE_STATUS', profile_data={ - 'billing_code': billing_code}) - self.worker_thread.invoice_finished.connect( - self.on_invoice_status_finished) - self.worker_thread.start() - - def on_invoice_status_finished(self, result): - if result: - self.parse_invoice_data(self.invoice_data['billing_details']) - else: - self.update_status.update_status( - 'Invoice has expired. Generating new invoice...') - self.on_request_invoice() - - def on_invoice_generation_finished(self, billing_details: object, text: str): - total_hours = self.fetch_invoice_duration() - self.store_invoice_data(billing_details, duration=total_hours) - self.parse_invoice_data(billing_details) - - def parse_invoice_data(self, invoice_data: object): - billing_details = { - 'billing_code': invoice_data.billing_code - } - - if self.selected_currency.lower() == 'lightning': - currency = 'Bitcoin Lightning' - else: - currency = self.selected_currency - - preferred_method = next( - (pm for pm in invoice_data.payment_methods if pm.name.lower() == currency.lower()), None) - - if preferred_method: - billing_details['due_amount'] = preferred_method.due - billing_details['address'] = preferred_method.address - else: - self.update_status.update_status( - 'No payment method found for the selected currency.') - return - - billing_values = list(billing_details.values()) - text_field_indices = [0, 2, 3] - - for i, dict_value in enumerate(billing_values): - if i < 3: - field_index = text_field_indices[i] - if i == 2: - text = str(dict_value) - self.full_address = text - metrics = self.text_fields[field_index].fontMetrics() - width = self.text_fields[field_index].width() - elided_text = metrics.elidedText( - text, QtCore.Qt.TextElideMode.ElideMiddle, width) - self.text_fields[field_index].setText(elided_text) - elif i == 1: - text = str(dict_value) - self.text_fields[field_index].setProperty("fullText", text) - self.text_fields[field_index].setText(text) - font_size = 14 - if len(text) > 9: - font_size = 15 - if len(text) > 13: - font_size = 10 - if len(text) > 16: - font_size = 10 - self.text_fields[field_index].setStyleSheet( - f"font-size: {font_size}px; font-weight: bold;") - else: - self.text_fields[field_index].setProperty( - "fullText", str(dict_value)) - self.text_fields[field_index].setText(str(dict_value)) - - self.qr_code_button.setDisabled(False) - self.update_status.update_status( - 'Invoice generated. Awaiting payment...') - - def on_invoice_finished(self, result): - if result: - self.invoice_data.clear() - self.show_payment_confirmed(self.text_fields[0].text()) - return - self.update_status.update_status( - 'An error occurred when generating invoice') - - def show_payment_confirmed(self, billing_code): - payment_page = self.find_payment_confirmed_page() - - if payment_page: - for line in self.text_fields: - line.setText('') - payment_page.set_billing_code(billing_code) - self.page_stack.setCurrentWidget(payment_page) - else: - print("PaymentConfirmed page not found") - - def find_payment_confirmed_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, PaymentConfirmed): - return page - return None - - def copy_text(self, field: int): - try: - original_status = self.update_status.status_label.text() - original_status = original_status.replace("Status: ", "") - - if int(field) == 3: - text = self.full_address - else: - text = self.text_fields[int(field)].text() - QApplication.clipboard().setText(text) - - if field == 0: - self.update_status.update_status( - 'Billing code copied to clipboard!') - elif field == 3: - self.update_status.update_status( - 'Address copied to clipboard!') - else: - self.update_status.update_status( - 'Pay amount copied to clipboard!') - - QTimer.singleShot( - 2000, lambda: self.update_status.update_status(original_status)) - except AttributeError: - self.update_status.update_status( - 'No content available for copying') - except Exception as e: - self.update_status.update_status( - f'An error occurred when copying the text') - - def reverse(self): - currency_page = self.page_stack.findChild(CurrencySelectionPage) - if currency_page: - self.page_stack.setCurrentWidget(currency_page) - - def show_qr_code(self): - full_amount = self.text_fields[2].text() - if hasattr(self, 'full_address') and self.full_address: - currency_type = getattr(self, 'selected_currency', None) - qr_dialog = QRCodeDialog( - self.full_address, full_amount, currency_type, self) - qr_dialog.exec() - else: - self.update_status.update_status( - 'No address available for QR code') - - def fetch_invoice_duration(self): - duration_month_num = int(self.selected_duration.split()[0]) - if duration_month_num == 12: - total_hours = 365 * 24 - else: - total_hours = duration_month_num * (30 * 24) - return total_hours - - -class FastRegistrationPage(Page): - def __init__(self, page_stack, main_window): - super().__init__("FastRegistration", page_stack, main_window) - self.page_stack = page_stack - self.update_status = main_window - self.connection_manager = main_window.connection_manager - self.labels = [] - self.buttons = [] - self.title.setGeometry(550, 40, 250, 40) - self.title.setText("Fast Creation") - - self.button_apply.setVisible(True) - self.button_apply.clicked.connect(self.create_profile) - - self.button_back.setVisible(True) - try: - self.button_back.clicked.disconnect() - except TypeError: - pass - self.button_back.clicked.connect(self.go_back) - - self.name_handle = QLabel(self) - self.name_handle.setGeometry(110, 70, 400, 30) - self.name_handle.setStyleSheet('color: #cacbcb;') - self.name_handle.setText("Profile Name:") - - self.name_hint = QLabel(self) - self.name_hint.setGeometry(265, 100, 190, 20) - self.name_hint.setStyleSheet( - 'color: #888888; font-size: 10px; font-style: italic;') - self.name_hint.setText("Click here to edit profile name") - self.name_hint.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - - self.name = QLineEdit(self) - self.name.setPlaceholderText("Enter name") - self.name.setGeometry(265, 70, 190, 30) - self.name.setStyleSheet( - "color: cyan; border: 1px solid #666666; border-radius: 3px; background-color: rgba(0, 0, 0, 0.3);") - self.name.setCursor(QtCore.Qt.CursorShape.IBeamCursor) - self.name.focusInEvent = lambda event: self.name_hint.hide() - self.name.focusOutEvent = lambda event: self.name_hint.show( - ) if not self.name.text() else self.name_hint.hide() - - self.name.textChanged.connect( - lambda text: self.name_hint.hide() if text else self.name_hint.show()) - - self.profile_data = {} - self.selected_values = { - 'protocol': 'wireguard', - 'connection': 'browser-only', - 'location': '', - 'browser': '', - 'resolution': '1024x760' - } - self.res_index = 1 - - self.initialize_default_selections() - - def initialize_default_selections(self): - if not self.selected_values['location']: - locations = self.connection_manager.get_location_list() - if locations: - random_index = random.randint(0, len(locations) - 1) - self.selected_values['location'] = locations[random_index] - - if not self.selected_values['browser']: - browsers = self.connection_manager.get_browser_list() - if browsers: - random_index = random.randint(0, len(browsers) - 1) - self.selected_values['browser'] = browsers[random_index] - - def get_next_available_profile_id(self) -> int: - profiles = ProfileController.get_all() - if not profiles: - return 1 - - existing_ids = sorted(profiles.keys()) - - for i in range(1, max(existing_ids) + 2): - if i not in existing_ids: - return i - - return 1 - - def showEvent(self, event): - super().showEvent(event) - self.initialize_default_selections() - self.create_interface_elements() - - def create_interface_elements(self): - for label in self.labels: - label.deleteLater() - self.labels = [] - for button in self.buttons: - button.deleteLater() - self.buttons = [] - - if not self.name.text(): - self.name_hint.show() - else: - self.name_hint.hide() - - self.host_info_label = QLabel( - f"Host Screen: {self.update_status.host_screen_width}x{self.update_status.host_screen_height}", self) - self.host_info_label.setGeometry(415, 470, 250, 20) - self.host_info_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.host_info_label.setStyleSheet( - "color: #00ffff; font-size: 13px; font-weight: bold;") - self.host_info_label.show() - self.labels.append(self.host_info_label) - - self.create_protocol_section() - self.create_connection_section() - self.create_location_section() - if self.selected_values['connection'] != 'system-wide': - self.create_browser_section() - self.create_resolution_section() - self.update_ui_state_for_connection() - - def create_protocol_section(self): - label = QLabel("Protocol", self) - label.setGeometry(300, 150, 185, 75) - - protocol_image = QPixmap(os.path.join( - self.btn_path, f"{self.selected_values['protocol']}_button.png")) - label.setPixmap(protocol_image) - label.setScaledContents(True) - label.show() - self.labels.append(label) - - prev_button = QPushButton(self) - prev_button.setGeometry(265, 150, 30, 75) - prev_button.clicked.connect( - lambda: self.show_previous_value('protocol')) - prev_button.show() - icon_path = os.path.join(self.btn_path, "UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - self.buttons.append(prev_button) - - next_button = QPushButton(self) - next_button.setGeometry(490, 150, 30, 75) - next_button.clicked.connect(lambda: self.show_next_value('protocol')) - next_button.show() - next_button.setIcon( - QIcon(os.path.join(self.btn_path, "UP_button.png"))) - next_button.setIconSize(next_button.size()) - self.buttons.append(next_button) - - def create_connection_section(self): - label = QLabel("Connection", self) - label.setGeometry(150, 250, 185, 75) - - if self.selected_values['connection']: - connection_image = QPixmap(os.path.join( - self.btn_path, f"{self.selected_values['connection']}_button.png")) - if connection_image.isNull(): - fallback_path = os.path.join( - self.btn_path, "browser-only_button.png") - connection_image = QPixmap(fallback_path) - else: - connection_image = QPixmap(os.path.join( - self.btn_path, "browser-only_button.png")) - - label.setPixmap(connection_image) - label.setScaledContents(True) - label.show() - self.labels.append(label) - - prev_button = QPushButton(self) - prev_button.setGeometry(115, 250, 30, 75) - prev_button.clicked.connect( - lambda: self.show_previous_value('connection')) - prev_button.show() - icon_path = os.path.join(self.btn_path, "UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - self.buttons.append(prev_button) - - next_button = QPushButton(self) - next_button.setGeometry(340, 250, 30, 75) - next_button.clicked.connect(lambda: self.show_next_value('connection')) - next_button.show() - next_button.setIcon( - QIcon(os.path.join(self.btn_path, "UP_button.png"))) - next_button.setIconSize(next_button.size()) - self.buttons.append(next_button) - - def create_location_section(self): - info_label = QLabel("Click on the location for more info", self) - info_label.setGeometry(480, 80, 300, 20) - info_label.setStyleSheet( - "color: #888888; font-size: 14px; font-style: italic;") - info_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight) - info_label.show() - self.labels.append(info_label) - - arrow_label = QLabel(self) - arrow_label.setGeometry(540, 100, 150, 150) - arrow_pixmap = QPixmap(os.path.join(self.btn_path, "arrow.png")) - transform = QTransform().rotate(270) - rotated_arrow = arrow_pixmap.transformed(transform) - arrow_label.setPixmap(rotated_arrow) - arrow_label.setScaledContents(True) - arrow_label.show() - self.labels.append(arrow_label) - - label = QPushButton(self) - label.setGeometry(435, 250, 185, 75) - label.setFlat(True) - label.setStyleSheet("background: transparent; border: none;") - - if self.selected_values['location']: - image_path = os.path.join( - self.btn_path, f"button_{self.selected_values['location']}.png") - location_image = QPixmap(image_path) - locations = self.connection_manager.get_location_info( - self.selected_values['location']) - provider = locations.operator.name if locations and hasattr( - locations, 'operator') else None - fallback_path = os.path.join( - self.btn_path, "default_location_button.png") - - if location_image.isNull(): - if locations and hasattr(locations, 'country_name'): - location_name = locations.country_name - location_image = LocationPage.create_location_button_image( - location_name, fallback_path, provider) - else: - location_image = LocationPage.create_location_button_image( - self.selected_values['location'], fallback_path, provider) - else: - if locations and hasattr(locations, 'country_name'): - location_image = LocationPage.create_location_button_image( - f'{locations.country_code}_{locations.code}', fallback_path, provider, image_path) - else: - location_image = LocationPage.create_location_button_image( - self.selected_values['location'], fallback_path, provider, image_path) - else: - location_image = QPixmap(os.path.join( - self.btn_path, "default_location_button.png")) - - label.setIcon(QIcon(location_image)) - label.setIconSize(QSize(185, 75)) - if self.selected_values['location']: - label.location_icon_name = self.selected_values['location'] - label.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - label.clicked.connect( - lambda checked, loc=self.selected_values['location']: self.show_location_verification(loc)) - - locations = self.connection_manager.get_location_info( - self.selected_values['location']) - if self.selected_values['protocol'] == 'hidetor' and locations and not (hasattr(locations, 'is_proxy_capable') and locations.is_proxy_capable): - label.hide() - else: - label.show() - self.labels.append(label) - - prev_button = QPushButton(self) - prev_button.setGeometry(400, 250, 30, 75) - prev_button.clicked.connect( - lambda: self.show_previous_value('location')) - prev_button.show() - icon_path = os.path.join(self.btn_path, "UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - self.buttons.append(prev_button) - - next_button = QPushButton(self) - next_button.setGeometry(625, 250, 30, 75) - next_button.clicked.connect(lambda: self.show_next_value('location')) - next_button.show() - next_button.setIcon( - QIcon(os.path.join(self.btn_path, "UP_button.png"))) - next_button.setIconSize(next_button.size()) - self.buttons.append(next_button) - - def create_browser_section(self): - label = QLabel("Browser", self) - label.setGeometry(150, 350, 185, 75) - - if self.selected_values['browser']: - browser_image = BrowserPage.create_browser_button_image( - self.selected_values['browser'], self.btn_path) - if browser_image.isNull(): - fallback_path = os.path.join( - self.btn_path, "default_browser_button.png") - browser_image = BrowserPage.create_browser_button_image( - self.selected_values['browser'], fallback_path, True) - else: - browser_image = QPixmap() - - label.setPixmap(browser_image) - label.setScaledContents(True) - label.show() - self.labels.append(label) - - prev_button = QPushButton(self) - prev_button.setGeometry(115, 350, 30, 75) - prev_button.clicked.connect( - lambda: self.show_previous_value('browser')) - prev_button.show() - icon_path = os.path.join(self.btn_path, "UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - self.buttons.append(prev_button) - - next_button = QPushButton(self) - next_button.setGeometry(340, 350, 30, 75) - next_button.clicked.connect(lambda: self.show_next_value('browser')) - next_button.show() - next_button.setIcon( - QIcon(os.path.join(self.btn_path, "UP_button.png"))) - next_button.setIconSize(next_button.size()) - self.buttons.append(next_button) - - def create_resolution_section(self): - label = QLabel("Resolution", self) - label.setGeometry(435, 350, 185, 75) - screen_page = self.page_stack.findChild(ScreenPage) - if self.selected_values['resolution']: - - resolution_image = screen_page.create_resolution_button_image( - self.selected_values['resolution']) - else: - resolution_image = screen_page.create_resolution_button_image( - "1024x760") - - label.setPixmap(resolution_image) - label.setScaledContents(True) - label.show() - self.labels.append(label) - - prev_button = QPushButton(self) - prev_button.setGeometry(400, 350, 30, 75) - prev_button.clicked.connect( - lambda: self.show_previous_value('resolution')) - prev_button.show() - icon_path = os.path.join(self.btn_path, "UP_button.png") - icon = QPixmap(icon_path) - transform = QTransform().rotate(180) - rotated_icon = icon.transformed(transform) - prev_button.setIcon(QIcon(rotated_icon)) - prev_button.setIconSize(prev_button.size()) - self.buttons.append(prev_button) - - next_button = QPushButton(self) - next_button.setGeometry(625, 350, 30, 75) - next_button.clicked.connect(lambda: self.show_next_value('resolution')) - next_button.show() - next_button.setIcon( - QIcon(os.path.join(self.btn_path, "UP_button.png"))) - next_button.setIconSize(next_button.size()) - self.buttons.append(next_button) - - custom_button = QPushButton("Custom", self) - custom_button.setGeometry(435, 430, 185, 30) - custom_button.setStyleSheet(""" - QPushButton { - background-color: rgba(0, 255, 255, 0.1); - color: #00ffff; - border: 1px solid #00ffff; - border-radius: 5px; - font-size: 12px; - font-weight: bold; - } - QPushButton:hover { - background-color: rgba(0, 255, 255, 0.2); - } - """) - custom_button.clicked.connect(self.show_custom_res_dialog) - custom_button.show() - self.buttons.append(custom_button) - - def show_custom_res_dialog(self): - dialog = QDialog(self) - dialog.setWindowTitle("Custom Resolution") - dialog.setFixedSize(300, 150) - dialog.setModal(True) - dialog.setStyleSheet(""" - QDialog { - background-color: #2c3e50; - border: 2px solid #00ffff; - border-radius: 10px; - } - QLabel { - color: white; - font-size: 12px; - } - QLineEdit { - background-color: #34495e; - color: white; - border: 1px solid #00ffff; - border-radius: 5px; - padding: 5px; - font-size: 12px; - } - QPushButton { - background-color: #2c3e50; - color: white; - border: 2px solid #00ffff; - border-radius: 5px; - padding: 8px; - font-size: 12px; - } - QPushButton:hover { - background-color: #34495e; - } - """) - - layout = QVBoxLayout() - input_layout = QHBoxLayout() - width_label = QLabel("Width:") - width_input = QLineEdit() - width_input.setPlaceholderText("1920") - height_label = QLabel("Height:") - height_input = QLineEdit() - height_input.setPlaceholderText("1080") - - input_layout.addWidget(width_label) - input_layout.addWidget(width_input) - input_layout.addWidget(height_label) - input_layout.addWidget(height_input) - - button_layout = QHBoxLayout() - ok_button = QPushButton("OK") - cancel_button = QPushButton("Cancel") - button_layout.addWidget(cancel_button) - button_layout.addWidget(ok_button) - - layout.addLayout(input_layout) - layout.addLayout(button_layout) - dialog.setLayout(layout) - - def validate_and_accept(): - try: - width = int(width_input.text()) - height = int(height_input.text()) - if width <= 0 or height <= 0: - return - host_w = self.update_status.host_screen_width - host_h = self.update_status.host_screen_height - adjusted = False - if width > host_w: - width = host_w - 50 - adjusted = True - if height > host_h: - height = host_h - 50 - adjusted = True - - if adjusted: - QMessageBox.information( - dialog, "Notice", "Adjusted to fit host size") - self.selected_values['resolution'] = f"{width}x{height}" - self.create_interface_elements() - dialog.accept() - except ValueError: - pass - - ok_button.clicked.connect(validate_and_accept) - cancel_button.clicked.connect(dialog.reject) - - width_input.returnPressed.connect(validate_and_accept) - height_input.returnPressed.connect(validate_and_accept) - - dialog.exec() - - def update_ui_state_for_connection(self): - is_system_wide = self.selected_values['connection'] == 'system-wide' - - for button in self.buttons: - if hasattr(button, 'geometry'): - button_geometry = button.geometry() - if button_geometry.y() == 350: - if button_geometry.x() in [115, 340, 400, 625]: - button.setEnabled(not is_system_wide) - - def show_previous_value(self, key): - if key == 'protocol': - protocols = ['wireguard', 'hidetor'] - current_index = protocols.index(self.selected_values[key]) - previous_index = (current_index - 1) % len(protocols) - self.selected_values[key] = protocols[previous_index] - if self.selected_values[key] == 'wireguard': - self.selected_values['connection'] = 'browser-only' - else: - self.selected_values['connection'] = 'tor' - loc_info = self.connection_manager.get_location_info( - self.selected_values['location']) - if not (loc_info and hasattr(loc_info, 'is_proxy_capable') and loc_info.is_proxy_capable): - locations = self.connection_manager.get_location_list() - proxy_locations = [loc for loc in locations if (l := self.connection_manager.get_location_info( - loc)) and hasattr(l, 'is_proxy_capable') and l.is_proxy_capable] - if proxy_locations: - self.selected_values['location'] = proxy_locations[0] - elif key == 'connection': - if self.selected_values['protocol'] == 'wireguard': - connections = ['browser-only', 'system-wide'] - else: - connections = ['tor', 'just proxy'] - current_index = connections.index(self.selected_values[key]) - previous_index = (current_index - 1) % len(connections) - self.selected_values[key] = connections[previous_index] - self.update_ui_state_for_connection() - elif key == 'location': - locations = self.connection_manager.get_location_list() - if self.selected_values['protocol'] == 'hidetor': - locations = [loc for loc in locations if (l := self.connection_manager.get_location_info( - loc)) and hasattr(l, 'is_proxy_capable') and l.is_proxy_capable] - - if locations and self.selected_values[key] in locations: - current_index = locations.index(self.selected_values[key]) - previous_index = (current_index - 1) % len(locations) - self.selected_values[key] = locations[previous_index] - elif locations: - self.selected_values[key] = locations[0] - elif key == 'browser': - browsers = self.connection_manager.get_browser_list() - if browsers and self.selected_values[key] in browsers: - current_index = browsers.index(self.selected_values[key]) - previous_index = (current_index - 1) % len(browsers) - self.selected_values[key] = browsers[previous_index] - elif browsers: - self.selected_values[key] = browsers[0] - elif key == 'resolution': - config = self.update_status._load_gui_config() - dynamic_enabled = config.get("registrations", {}).get( - "dynamic_larger_profiles", False) if config else False - - if dynamic_enabled: - resolutions = [] - host_w = self.update_status.host_screen_width - host_h = self.update_status.host_screen_height - for i in range(5): - resolutions.append( - f"{host_w - (50 * (i + 1))}x{host_h - (50 * (i + 1))}") - self.res_index = (self.res_index - 1) % len(resolutions) - self.selected_values[key] = resolutions[self.res_index] - else: - resolutions = ['800x600', '1024x760', '1152x1080', '1280x1024', '1920x1080', - '2560x1440', '2560x1600', '1920x1440', '1792x1344', '2048x1152'] - self.res_index = (self.res_index - 1) % len(resolutions) - choice = resolutions[self.res_index] - w, h = map(int, choice.split('x')) - host_w = self.update_status.host_screen_width - host_h = self.update_status.host_screen_height - new_w, new_h = w, h - if w > host_w: - new_w = host_w - 50 - if h > host_h: - new_h = host_h - 50 - self.selected_values[key] = f"{new_w}x{new_h}" - - self.create_interface_elements() - - def show_next_value(self, key): - if key == 'protocol': - protocols = ['wireguard', 'hidetor'] - current_index = protocols.index(self.selected_values[key]) - next_index = (current_index + 1) % len(protocols) - self.selected_values[key] = protocols[next_index] - if self.selected_values[key] == 'wireguard': - self.selected_values['connection'] = 'browser-only' - else: - self.selected_values['connection'] = 'tor' - loc_info = self.connection_manager.get_location_info( - self.selected_values['location']) - if not (loc_info and hasattr(loc_info, 'is_proxy_capable') and loc_info.is_proxy_capable): - locations = self.connection_manager.get_location_list() - proxy_locations = [loc for loc in locations if (l := self.connection_manager.get_location_info( - loc)) and hasattr(l, 'is_proxy_capable') and l.is_proxy_capable] - if proxy_locations: - self.selected_values['location'] = proxy_locations[0] - elif key == 'connection': - if self.selected_values['protocol'] == 'wireguard': - connections = ['browser-only', 'system-wide'] - else: - connections = ['tor', 'just proxy'] - current_index = connections.index(self.selected_values[key]) - next_index = (current_index + 1) % len(connections) - self.selected_values[key] = connections[next_index] - self.update_ui_state_for_connection() - elif key == 'location': - locations = self.connection_manager.get_location_list() - if self.selected_values['protocol'] == 'hidetor': - locations = [loc for loc in locations if (l := self.connection_manager.get_location_info( - loc)) and hasattr(l, 'is_proxy_capable') and l.is_proxy_capable] - - if locations and self.selected_values[key] in locations: - current_index = locations.index(self.selected_values[key]) - next_index = (current_index + 1) % len(locations) - self.selected_values[key] = locations[next_index] - elif locations: - self.selected_values[key] = locations[0] - elif key == 'browser': - browsers = self.connection_manager.get_browser_list() - if browsers and self.selected_values[key] in browsers: - current_index = browsers.index(self.selected_values[key]) - next_index = (current_index + 1) % len(browsers) - self.selected_values[key] = browsers[next_index] - elif browsers: - self.selected_values[key] = browsers[0] - elif key == 'resolution': - config = self.update_status._load_gui_config() - dynamic_enabled = config.get("registrations", {}).get( - "dynamic_larger_profiles", False) if config else False - - if dynamic_enabled: - resolutions = [] - host_w = self.update_status.host_screen_width - host_h = self.update_status.host_screen_height - for i in range(5): - resolutions.append( - f"{host_w - (50 * (i + 1))}x{host_h - (50 * (i + 1))}") - self.res_index = (self.res_index + 1) % len(resolutions) - self.selected_values[key] = resolutions[self.res_index] - else: - resolutions = ['800x600', '1024x760', '1152x1080', '1280x1024', '1920x1080', - '2560x1440', '2560x1600', '1920x1440', '1792x1344', '2048x1152'] - self.res_index = (self.res_index + 1) % len(resolutions) - choice = resolutions[self.res_index] - w, h = map(int, choice.split('x')) - host_w = self.update_status.host_screen_width - host_h = self.update_status.host_screen_height - new_w, new_h = w, h - if w > host_w: - new_w = host_w - 50 - if h > host_h: - new_h = host_h - 50 - self.selected_values[key] = f"{new_w}x{new_h}" - - self.create_interface_elements() - - def go_back(self): - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def show_location_verification(self, location_icon_name): - verification_page = LocationVerificationPage( - self.page_stack, self.update_status, location_icon_name, self) - self.page_stack.addWidget(verification_page) - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(verification_page)) - - def create_profile(self): - profile_name = self.name.text() - if not profile_name: - self.update_status.update_status('Please enter a profile name') - return - - if not self.selected_values['location']: - self.update_status.update_status('Please select a location') - return - - if self.selected_values['connection'] != 'system-wide' and not self.selected_values['browser']: - self.update_status.update_status('Please select a browser') - return - - profile_data = { - 'name': profile_name, - 'protocol': self.selected_values['protocol'], - 'connection': self.selected_values['connection'], - 'location': self.selected_values['location'], - 'browser': self.selected_values['browser'], - 'resolution': self.selected_values['resolution'] - } - - self.profile_data = profile_data - self.update_status.write_data(profile_data) - - resume_page = self.find_resume_page() - if resume_page: - if self.selected_values['protocol'] == 'wireguard': - self.create_wireguard_profile(profile_data) - else: - self.create_tor_profile(profile_data) - - self.go_back() - - def create_wireguard_profile(self, profile_data): - location_info = self.connection_manager.get_location_info( - profile_data['location']) - if not location_info: - self.update_status.update_status('Invalid location selected') - return - - profile_id = self.get_next_available_profile_id() - profile_data_for_resume = { - 'id': profile_id, - 'name': profile_data['name'], - 'country_code': location_info.country_code, - 'code': location_info.code, - 'application': profile_data['browser'], - 'connection_type': 'wireguard', - 'resolution': profile_data['resolution'], - } - - resume_page = self.find_resume_page() - if resume_page: - if profile_data['connection'] == 'system-wide': - resume_page.handle_core_action_create_profile( - 'CREATE_SYSTEM_PROFILE', profile_data_for_resume, 'system') - else: - resume_page.handle_core_action_create_profile( - 'CREATE_SESSION_PROFILE', profile_data_for_resume, 'session') - - def create_tor_profile(self, profile_data): - location_info = self.connection_manager.get_location_info( - profile_data['location']) - if not location_info: - self.update_status.update_status('Invalid location selected') - return - - connection_type = 'tor' if profile_data['connection'] == 'tor' else 'system' - - profile_id = self.get_next_available_profile_id() - profile_data_for_resume = { - 'id': profile_id, - 'name': profile_data['name'], - 'country_code': location_info.country_code, - 'code': location_info.code, - 'application': profile_data['browser'], - 'connection_type': connection_type, - 'resolution': profile_data['resolution'], - } - - resume_page = self.find_resume_page() - if resume_page: - resume_page.handle_core_action_create_profile( - 'CREATE_SESSION_PROFILE', profile_data_for_resume, 'session') - - def find_resume_page(self): - for i in range(self.page_stack.count()): - page = self.page_stack.widget(i) - if isinstance(page, ResumePage): - return page - return None - - -class FastModePromptPage(Page): - def __init__(self, page_stack, main_window): - super().__init__("FastModePrompt", page_stack, main_window) - self.page_stack = page_stack - self.update_status = main_window - self.title.setGeometry(500, 40, 350, 40) - self.title.setText("Quick Setup Option") - self.button_back.setVisible(False) - self.button_apply.setVisible(False) - - container = QWidget(self) - container.setGeometry(QtCore.QRect(80, 100, 640, 360)) - v = QVBoxLayout(container) - v.setContentsMargins(0, 0, 0, 0) - v.setSpacing(20) - - large_text = QLabel( - "Would you like to switch to convenient \"fast mode\" for profile creation going forward? (recommended)") - large_text.setWordWrap(True) - large_text.setStyleSheet("color: white; font-size: 18px;") - large_text.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - v.addWidget(large_text) - - buttons_row = QWidget() - h = QHBoxLayout(buttons_row) - h.setContentsMargins(0, 0, 0, 0) - h.setSpacing(20) - - yes_btn = QPushButton("Yes Fast Mode") - yes_btn.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - yes_btn.setFixedSize(240, 56) - yes_btn.setStyleSheet( - "background-color: #27ae60; color: white; font-weight: bold; font-size: 16px; border: none; border-radius: 6px;") - yes_btn.clicked.connect(self.choose_yes) - - no_btn = QPushButton("No Keep This") - no_btn.setCursor(QtCore.Qt.CursorShape.PointingHandCursor) - no_btn.setFixedSize(160, 42) - no_btn.setStyleSheet( - "background-color: #c0392b; color: white; font-size: 14px; border: none; border-radius: 6px;") - no_btn.clicked.connect(self.choose_no) - - h.addStretch() - h.addWidget(yes_btn) - h.addWidget(no_btn) - h.addStretch() - v.addWidget(buttons_row) - - small_text = QLabel( - "You can toggle this anytime in the \"Options\" Menu, under \"Create/Edit\"") - small_text.setWordWrap(True) - small_text.setStyleSheet("color: #999999; font-size: 12px;") - small_text.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - v.addWidget(small_text) - - def finalize(self): - self.update_status.mark_fast_mode_prompt_shown() - self.page_stack.setCurrentIndex( - self.page_stack.indexOf(self.page_stack.findChild(MenuPage))) - - def choose_yes(self): - self.update_status.set_fast_mode_enabled(True) - self.finalize() - - def choose_no(self): - self.update_status.set_fast_mode_enabled(False) - self.finalize() - - def initialize_default_selections(self): - if not self.selected_values['location']: - locations = self.connection_manager.get_location_list() - if locations: - random_index = random.randint(0, len(locations) - 1) - self.selected_values['location'] = locations[random_index] - - if not self.selected_values['browser']: - browsers = self.connection_manager.get_browser_list() - if browsers: - random_index = random.randint(0, len(browsers) - 1) - self.selected_values['browser'] = browsers[random_index] - - def get_next_available_profile_id(self) -> int: - profiles = ProfileController.get_all() - if not profiles: - return 1 - - existing_ids = sorted(profiles.keys()) - - for i in range(1, max(existing_ids) + 2): - if i not in existing_ids: - return i - - return 1 - - -class QRCodeDialog(QDialog): - def __init__(self, address_text, full_amount, currency_type=None, parent=None): - super().__init__(parent) - self.currency_type = currency_type - self.setWindowTitle("Payment Address QR Code") - self.setFixedSize(400, 450) - self.setModal(True) - - layout = QVBoxLayout(self) - - title_label = QLabel("Scan QR Code to Copy Address", self) - title_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - title_label.setStyleSheet( - "font-size: 16px; font-weight: bold; color: #00ffff; margin: 10px;") - layout.addWidget(title_label) - - qr_label = QLabel(self) - qr_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - qr_label.setStyleSheet( - "margin: 10px; border: 2px solid #00ffff; border-radius: 10px;") - - qr_pixmap = self.generate_qr_code(address_text, full_amount) - qr_label.setPixmap(qr_pixmap) - layout.addWidget(qr_label) - - amount_label = QLabel("Amount:", self) - amount_label.setStyleSheet( - "font-size: 12px; color: #ffffff; margin-top: 10px;") - layout.addWidget(amount_label) - - amount_text_label = QLabel(full_amount, self) - amount_text_label.setStyleSheet( - "font-size: 10px; color: #cccccc; margin: 5px; padding: 5px; border: 1px solid #666; border-radius: 5px;") - layout.addWidget(amount_text_label) - - address_label = QLabel("Address:", self) - address_label.setStyleSheet( - "font-size: 12px; color: #ffffff; margin-top: 10px;") - layout.addWidget(address_label) - - address_text_label = QLabel(address_text, self) - address_text_label.setWordWrap(True) - address_text_label.setStyleSheet( - "font-size: 10px; color: #cccccc; margin: 5px; padding: 5px; border: 1px solid #666; border-radius: 5px;") - layout.addWidget(address_text_label) - - close_button = QPushButton("Close", self) - close_button.setStyleSheet( - "font-size: 14px; padding: 8px; margin: 10px;") - close_button.clicked.connect(self.close) - layout.addWidget(close_button) - - self.setStyleSheet(""" - QDialog { - background-color: #2c3e50; - border: 2px solid #00ffff; - border-radius: 10px; - } - """) - - def generate_qr_code(self, text, full_amount): - qr = qrcode.QRCode( - version=1, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=8, - border=4, - ) - - if self.currency_type: - currency_lower = self.currency_type.lower() - if currency_lower == 'bitcoin': - qr_data = f"bitcoin:{text}?amount={full_amount}" - elif currency_lower == 'monero': - qr_data = f"monero:{text}?amount={full_amount}" - elif currency_lower == 'lightning': - qr_data = f"bitcoin:{text}?amount={full_amount}&lightning=ln" - elif currency_lower == 'litecoin': - qr_data = f"litecoin:{text}?amount={full_amount}" - else: - qr_data = f"{text}?amount={full_amount}" - else: - qr_data = text - - qr.add_data(qr_data) - qr.make(fit=True) - - qr_image = qr.make_image(fill_color="black", back_color="white") - - buffer = BytesIO() - qr_image.save(buffer, format='PNG') - buffer.seek(0) - - pixmap = QPixmap() - pixmap.loadFromData(buffer.getvalue()) - - return pixmap.scaled(150, 150, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) - - -if __name__ == "__main__": - app = QApplication(sys.argv) - CustomWindow() - sys.exit(app.exec()) diff --git a/myenv/lib/python3.12/site-packages/gui/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/gui/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index 7bfef42..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/LICENSE.txt b/myenv/lib/python3.12/site-packages/gui/resources/LICENSE.txt deleted file mode 100755 index 1e75c16..0000000 --- a/myenv/lib/python3.12/site-packages/gui/resources/LICENSE.txt +++ /dev/null @@ -1,2 +0,0 @@ -Copyright © 2024-2025 by Simplified Privacy -All rights reserved. diff --git a/myenv/lib/python3.12/site-packages/gui/resources/fonts/open-sans.ttf b/myenv/lib/python3.12/site-packages/gui/resources/fonts/open-sans.ttf deleted file mode 100755 index ac587b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/fonts/open-sans.ttf and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/fonts/retro-gaming.ttf b/myenv/lib/python3.12/site-packages/gui/resources/fonts/retro-gaming.ttf deleted file mode 100755 index 0dca996..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/fonts/retro-gaming.ttf and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/1-country.png b/myenv/lib/python3.12/site-packages/gui/resources/images/1-country.png deleted file mode 100755 index 8cc3872..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/1-country.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/1024x760.png b/myenv/lib/python3.12/site-packages/gui/resources/images/1024x760.png deleted file mode 100755 index 83e7cca..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/1024x760.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/1152x1080.png b/myenv/lib/python3.12/site-packages/gui/resources/images/1152x1080.png deleted file mode 100755 index 0143871..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/1152x1080.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/1280x1024.png b/myenv/lib/python3.12/site-packages/gui/resources/images/1280x1024.png deleted file mode 100755 index 32b970b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/1280x1024.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/1920x1080.png b/myenv/lib/python3.12/site-packages/gui/resources/images/1920x1080.png deleted file mode 100755 index 29495a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/1920x1080.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/400x50_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/400x50_button.png deleted file mode 100755 index 16e6551..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/400x50_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/540x455.png b/myenv/lib/python3.12/site-packages/gui/resources/images/540x455.png deleted file mode 100755 index 5d9803e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/540x455.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/800x600.png b/myenv/lib/python3.12/site-packages/gui/resources/images/800x600.png deleted file mode 100755 index f6a6396..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/800x600.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Dark.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Dark.png deleted file mode 100755 index 65b2e6f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Dark.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Dark2.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Dark2.png deleted file mode 100755 index 4f7bbbd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Dark2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Default.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Default.png deleted file mode 100755 index 18c5bcd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Default.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 1.png deleted file mode 100755 index 24f7090..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 10.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 10.png deleted file mode 100755 index 543b1e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 10.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 2.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 2.png deleted file mode 100755 index ac70ae3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 4.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 4.png deleted file mode 100755 index 2f96797..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 4.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 8.png b/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 8.png deleted file mode 100755 index 8d83d68..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/Mesa de trabajo 8.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/UP_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/UP_button.png deleted file mode 100755 index 40ac989..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/UP_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/app_off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/app_off.png deleted file mode 100755 index 559c420..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/app_off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/app_on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/app_on.png deleted file mode 100755 index 6b7ddb4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/app_on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/apply.png b/myenv/lib/python3.12/site-packages/gui/resources/images/apply.png deleted file mode 100755 index d66bd57..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/apply.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/arch.png b/myenv/lib/python3.12/site-packages/gui/resources/images/arch.png deleted file mode 100755 index 003f45c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/arch.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/arrow-down.png b/myenv/lib/python3.12/site-packages/gui/resources/images/arrow-down.png deleted file mode 100755 index 7f8794f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/arrow-down.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/arrow.png b/myenv/lib/python3.12/site-packages/gui/resources/images/arrow.png deleted file mode 100755 index 7121680..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/arrow.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/back.png b/myenv/lib/python3.12/site-packages/gui/resources/images/back.png deleted file mode 100755 index 697ff5a..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/back.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/back_transparente.png b/myenv/lib/python3.12/site-packages/gui/resources/images/back_transparente.png deleted file mode 100755 index c99bd05..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/back_transparente.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/backgoud800x600.png b/myenv/lib/python3.12/site-packages/gui/resources/images/backgoud800x600.png deleted file mode 100755 index f3dee2c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/backgoud800x600.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/background.png b/myenv/lib/python3.12/site-packages/gui/resources/images/background.png deleted file mode 100755 index 75e30a5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/background.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/background_connected.png b/myenv/lib/python3.12/site-packages/gui/resources/images/background_connected.png deleted file mode 100755 index d1b49c7..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/background_connected.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/billing_off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/billing_off.png deleted file mode 100755 index e9172b6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/billing_off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/billing_on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/billing_on.png deleted file mode 100755 index 76fc4ea..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/billing_on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin.png b/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin.png deleted file mode 100755 index c99a5fd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin_1year.png b/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin_1year.png deleted file mode 100755 index e290067..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/bitcoin_1year.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/bov_off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/bov_off.png deleted file mode 100755 index efcb2dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/bov_off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/bov_on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/bov_on.png deleted file mode 100755 index d1d40ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/bov_on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/brave latest_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/brave latest_mini.png deleted file mode 100755 index 048194d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/brave latest_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/brave_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/brave_button.png deleted file mode 100755 index 535a372..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/brave_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/brave_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/brave_icon.png deleted file mode 100755 index 8ee2ab2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/brave_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browser only.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browser only.png deleted file mode 100755 index 4c7239b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browser only.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only.png deleted file mode 100755 index ca44ef6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only_button.png deleted file mode 100755 index ca44ef6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browser-only_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browser_just_proxy.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browser_just_proxy.png deleted file mode 100755 index 968ef07..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browser_just_proxy.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browser_tor.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browser_tor.png deleted file mode 100755 index 22cbe20..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browser_tor.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/browsers_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/browsers_mini.png deleted file mode 100755 index cfe577b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/browsers_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button230x220.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button230x220.png deleted file mode 100755 index 5566702..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button230x220.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_ch_zh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_ch_zh.png deleted file mode 100755 index 5b88419..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_ch_zh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_cl_rm.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_cl_rm.png deleted file mode 100755 index 23b1586..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_cl_rm.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_fi_01.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_fi_01.png deleted file mode 100755 index c7f0fb4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_fi_01.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_is_1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_is_1.png deleted file mode 100755 index 89e5c4d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_is_1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_md_cu.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_md_cu.png deleted file mode 100755 index 88d2643..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_md_cu.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_nl_li.png deleted file mode 100755 index bed7c35..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_profile.png deleted file mode 100755 index a99db1b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_se_ab.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_se_ab.png deleted file mode 100755 index a9c3a0c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_se_ab.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_profile.png deleted file mode 100755 index 1b3f484..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_tor.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_tor.png deleted file mode 100755 index 46157ce..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_session_tor.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_sg_02.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_sg_02.png deleted file mode 100755 index 92ec771..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_sg_02.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_system_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_system_profile.png deleted file mode 100755 index 95903a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_system_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_ny.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_ny.png deleted file mode 100755 index 16a33ed..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_ny.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_oh.png deleted file mode 100755 index 15beaa9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_wa.png b/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_wa.png deleted file mode 100755 index b375a99..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/button_us_wa.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/check.png b/myenv/lib/python3.12/site-packages/gui/resources/images/check.png deleted file mode 100755 index b847096..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/check.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/check_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/check_icon.png deleted file mode 100755 index c79e881..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/check_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium latest_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/chromium latest_mini.png deleted file mode 100755 index 3e7d00f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium latest_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_button.png deleted file mode 100755 index 5017552..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_icon.png deleted file mode 100755 index 4fa6b8e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/chromium_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/connect.png b/myenv/lib/python3.12/site-packages/gui/resources/images/connect.png deleted file mode 100755 index 798d7c9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/connect.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/create_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/create_profile.png deleted file mode 100755 index 3a519bd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/create_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro150x50.png b/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro150x50.png deleted file mode 100755 index 801eab4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro150x50.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro400x50.png b/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro400x50.png deleted file mode 100755 index 16e6551..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/cuadro400x50.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/debian.png b/myenv/lib/python3.12/site-packages/gui/resources/images/debian.png deleted file mode 100755 index 01aff26..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/debian.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_button.png deleted file mode 100755 index 18d3019..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_mini.png deleted file mode 100755 index 8f2c49f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/default_browser_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_button.png deleted file mode 100755 index 5d8b5b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_mini.png deleted file mode 100755 index c13249e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/default_location_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/delete_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/delete_profile.png deleted file mode 100755 index 5a22599..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/delete_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect.png b/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect.png deleted file mode 100755 index e010424..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect_system_wide.png b/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect_system_wide.png deleted file mode 100755 index 37c7a1a..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnect_system_wide.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnected.png b/myenv/lib/python3.12/site-packages/gui/resources/images/disconnected.png deleted file mode 100755 index 39f2da1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/disconnected.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/edit_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/edit_profile.png deleted file mode 100755 index ebd17c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/edit_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/editv.png b/myenv/lib/python3.12/site-packages/gui/resources/images/editv.png deleted file mode 100755 index cc42346..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/editv.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu garaje.png b/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu garaje.png deleted file mode 100755 index 41a38f1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu garaje.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_button.png deleted file mode 100755 index 38fd689..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_mini.png deleted file mode 100755 index b7b29c2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/eeuu_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/fedora.png b/myenv/lib/python3.12/site-packages/gui/resources/images/fedora.png deleted file mode 100755 index d68f703..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/fedora.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox latest_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/firefox latest_mini.png deleted file mode 100755 index 5cd50dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox latest_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_button.png deleted file mode 100755 index 63c4889..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_icon.png deleted file mode 100755 index f97fd28..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/firefox_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/global-acces.png b/myenv/lib/python3.12/site-packages/gui/resources/images/global-acces.png deleted file mode 100755 index 9816eaa..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/global-acces.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_is_1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_is_1.png deleted file mode 100755 index 5be9091..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_is_1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_md_cu.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_md_cu.png deleted file mode 100755 index f99e2c9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_md_cu.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_md_cu.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_md_cu.png deleted file mode 100755 index 5caeed5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_md_cu.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_nl_li.png deleted file mode 100755 index f175831..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_us_oh.png deleted file mode 100755 index ce34dfd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_mini_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_nl_li.png deleted file mode 100755 index 73ad548..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_sg_02.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_sg_02.png deleted file mode 100755 index 1bb6309..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_sg_02.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_ny.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_ny.png deleted file mode 100755 index cf5e9c9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_ny.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_oh.png deleted file mode 100755 index 35f5e3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_wa.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_wa.png deleted file mode 100755 index 6215653..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hdtor_us_wa.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor.png deleted file mode 100755 index f1bddf2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor_button.png deleted file mode 100755 index 894ecd3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hidetor_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong garaje.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong garaje.png deleted file mode 100755 index 763b913..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong garaje.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_button.png deleted file mode 100755 index 85a69db..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_mini.png deleted file mode 100755 index c35aca5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hong kong_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-128x128.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-128x128.png deleted file mode 100755 index e80b4f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-128x128.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-16x16.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-16x16.png deleted file mode 100755 index 32b00e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-16x16.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-22x22.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-22x22.png deleted file mode 100755 index 12c6d05..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-22x22.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-24x24.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-24x24.png deleted file mode 100755 index d0dcd80..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-24x24.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-256x256.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-256x256.png deleted file mode 100755 index 750283b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-256x256.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-32x32.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-32x32.png deleted file mode 100755 index b6c6818..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-32x32.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-48x48.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-48x48.png deleted file mode 100755 index c834d8a..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-48x48.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-64x64.png b/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-64x64.png deleted file mode 100755 index 2543b82..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/hv-icon-64x64.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon-linux.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon-linux.png deleted file mode 100755 index 7cca354..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon-linux.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_ch_zh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_ch_zh.png deleted file mode 100755 index 5bdc0da..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_ch_zh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_cl_rm.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_cl_rm.png deleted file mode 100755 index 274487d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_cl_rm.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_fi_01.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_fi_01.png deleted file mode 100755 index bc30389..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_fi_01.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_is_1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_is_1.png deleted file mode 100755 index 62b0489..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_is_1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_md_cu.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_md_cu.png deleted file mode 100755 index 3e7f8fa..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_md_cu.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_ch_zh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_ch_zh.png deleted file mode 100755 index bcff992..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_ch_zh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_cl_rm.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_cl_rm.png deleted file mode 100755 index 9303bd4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_cl_rm.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_fi_01.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_fi_01.png deleted file mode 100755 index 8fb9ec5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_fi_01.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_is_1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_is_1.png deleted file mode 100755 index 6844d37..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_is_1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_md_cu.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_md_cu.png deleted file mode 100755 index cbef009..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_md_cu.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_nl_li.png deleted file mode 100755 index 703f96e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_se_ab.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_se_ab.png deleted file mode 100644 index 9238358..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_se_ab.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_sg_02.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_sg_02.png deleted file mode 100755 index 90bf36c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_sg_02.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_ny.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_ny.png deleted file mode 100755 index dc9dd66..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_ny.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_oh.png deleted file mode 100755 index 8eedeb0..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_wa.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_wa.png deleted file mode 100755 index 1bee18f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_mini_us_wa.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_nl_li.png deleted file mode 100755 index 752499c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_se_ab.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_se_ab.png deleted file mode 100644 index 380fb88..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_se_ab.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sg_02.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sg_02.png deleted file mode 100755 index c5d988d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sg_02.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync.png deleted file mode 100755 index 7160cb1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync_urgent.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync_urgent.png deleted file mode 100755 index 7c8bcbb..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_sync_urgent.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_ny.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_ny.png deleted file mode 100755 index bca8d73..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_ny.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_oh.png deleted file mode 100755 index 9921604..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_wa.png b/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_wa.png deleted file mode 100755 index 61c7f9f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/icon_us_wa.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/install.png b/myenv/lib/python3.12/site-packages/gui/resources/images/install.png deleted file mode 100755 index 5386d96..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/install.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_button.png deleted file mode 100755 index ca53fa0..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_mini.png deleted file mode 100755 index cce5092..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/just proxy_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/just.png b/myenv/lib/python3.12/site-packages/gui/resources/images/just.png deleted file mode 100755 index 9bf23e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/just.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/just_session.png b/myenv/lib/python3.12/site-packages/gui/resources/images/just_session.png deleted file mode 100755 index 1ff623e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/just_session.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/launch.png b/myenv/lib/python3.12/site-packages/gui/resources/images/launch.png deleted file mode 100755 index 8f75af7..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/launch.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/left.png b/myenv/lib/python3.12/site-packages/gui/resources/images/left.png deleted file mode 100755 index 194e214..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/left.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf latest_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf latest_mini.png deleted file mode 100755 index d32c216..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf latest_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_button.png deleted file mode 100755 index 959506c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_icon.png deleted file mode 100755 index 1c36c47..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/librewolf_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/lightnering.png b/myenv/lib/python3.12/site-packages/gui/resources/images/lightnering.png deleted file mode 100755 index f522ce8..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/lightnering.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/linux.png b/myenv/lib/python3.12/site-packages/gui/resources/images/linux.png deleted file mode 100755 index 0e1d54a..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/linux.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/litecoin.png b/myenv/lib/python3.12/site-packages/gui/resources/images/litecoin.png deleted file mode 100755 index 2240efa..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/litecoin.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles.png b/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles.png deleted file mode 100755 index 4f73477..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_button.png deleted file mode 100755 index 3eab4a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_mini.png deleted file mode 100755 index 2ff6da5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/los angeles_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/marco_miniatura.png b/myenv/lib/python3.12/site-packages/gui/resources/images/marco_miniatura.png deleted file mode 100755 index 044450d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/marco_miniatura.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/monero.png b/myenv/lib/python3.12/site-packages/gui/resources/images/monero.png deleted file mode 100755 index 7a49c84..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/monero.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/new york_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/new york_button.png deleted file mode 100755 index 03062ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/new york_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/new_id.png b/myenv/lib/python3.12/site-packages/gui/resources/images/new_id.png deleted file mode 100755 index 1397ab7..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/new_id.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/next.png b/myenv/lib/python3.12/site-packages/gui/resources/images/next.png deleted file mode 100755 index 8e73409..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/next.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/noe.png b/myenv/lib/python3.12/site-packages/gui/resources/images/noe.png deleted file mode 100755 index ca4c9c3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/noe.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/off.png deleted file mode 100755 index 623c5db..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/ohio.png b/myenv/lib/python3.12/site-packages/gui/resources/images/ohio.png deleted file mode 100755 index 35f5e3e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/ohio.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/on.png deleted file mode 100755 index 703d42b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/original.png b/myenv/lib/python3.12/site-packages/gui/resources/images/original.png deleted file mode 100755 index f1882dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/original.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/paste_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/paste_button.png deleted file mode 100755 index 5068b1f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/paste_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/port.png b/myenv/lib/python3.12/site-packages/gui/resources/images/port.png deleted file mode 100755 index 4f1cec7..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/port.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/port2.png b/myenv/lib/python3.12/site-packages/gui/resources/images/port2.png deleted file mode 100755 index 185ad91..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/port2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/qr-code.png b/myenv/lib/python3.12/site-packages/gui/resources/images/qr-code.png deleted file mode 100755 index cebffa5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/qr-code.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/r.png b/myenv/lib/python3.12/site-packages/gui/resources/images/r.png deleted file mode 100755 index f299278..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/r.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/r1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/r1.png deleted file mode 100755 index 52944b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/r1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/r2.png b/myenv/lib/python3.12/site-packages/gui/resources/images/r2.png deleted file mode 100755 index 61a9fdd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/r2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/r4.png b/myenv/lib/python3.12/site-packages/gui/resources/images/r4.png deleted file mode 100755 index 865da2c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/r4.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rb_off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rb_off.png deleted file mode 100755 index 7397c26..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rb_off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rb_on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rb_on.png deleted file mode 100755 index 2c63c8e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rb_on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/residential tor_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/residential tor_mini.png deleted file mode 100755 index 330a302..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/residential tor_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/residential.png b/myenv/lib/python3.12/site-packages/gui/resources/images/residential.png deleted file mode 100755 index 71969fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/residential.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/residential_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/residential_button.png deleted file mode 100755 index 379d15c..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/residential_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/residential_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/residential_mini.png deleted file mode 100755 index 05c3029..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/residential_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template.png b/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template.png deleted file mode 100755 index e981d9d..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template_button.png deleted file mode 100755 index 9623e8b..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/resolution_template_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/right.png b/myenv/lib/python3.12/site-packages/gui/resources/images/right.png deleted file mode 100755 index 5f8cf50..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/right.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rp.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rp.png deleted file mode 100755 index f92faaf..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rp.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rp_off.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rp_off.png deleted file mode 100755 index f9cfc92..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rp_off.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rp_on.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rp_on.png deleted file mode 100755 index e7cd606..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rp_on.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rr1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rr1.png deleted file mode 100755 index 323399e..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rr1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rr2.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rr2.png deleted file mode 100755 index 859c40f..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rr2.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/rr3.png b/myenv/lib/python3.12/site-packages/gui/resources/images/rr3.png deleted file mode 100755 index 2d46ca1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/rr3.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/save.png b/myenv/lib/python3.12/site-packages/gui/resources/images/save.png deleted file mode 100755 index 147f551..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/save.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/sett.png b/myenv/lib/python3.12/site-packages/gui/resources/images/sett.png deleted file mode 100755 index aab06ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/sett.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/settings.png b/myenv/lib/python3.12/site-packages/gui/resources/images/settings.png deleted file mode 100755 index 8fddbf3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/settings.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/settings_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/settings_icon.png deleted file mode 100755 index 67faad6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/settings_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/sync_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/sync_button.png deleted file mode 100755 index cb0a897..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/sync_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide.png b/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide.png deleted file mode 100755 index 3f28256..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide_button.png deleted file mode 100755 index 3f28256..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/system-wide_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/system_wide_global.png b/myenv/lib/python3.12/site-packages/gui/resources/images/system_wide_global.png deleted file mode 100755 index 22567ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/system_wide_global.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/tapa_miniatura.png b/myenv/lib/python3.12/site-packages/gui/resources/images/tapa_miniatura.png deleted file mode 100755 index 98ffe84..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/tapa_miniatura.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/tor 86x130.png b/myenv/lib/python3.12/site-packages/gui/resources/images/tor 86x130.png deleted file mode 100755 index b586cf2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/tor 86x130.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/tor_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/tor_button.png deleted file mode 100755 index 062df29..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/tor_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/tor_sync.png b/myenv/lib/python3.12/site-packages/gui/resources/images/tor_sync.png deleted file mode 100755 index b3da423..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/tor_sync.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/torgrande.png b/myenv/lib/python3.12/site-packages/gui/resources/images/torgrande.png deleted file mode 100755 index 376afb9..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/torgrande.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini.png deleted file mode 100755 index f145de8..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini_false.png b/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini_false.png deleted file mode 100755 index d2dfed8..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/toricon_mini_false.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/torx.png b/myenv/lib/python3.12/site-packages/gui/resources/images/torx.png deleted file mode 100755 index 9238ff1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/torx.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom garaje.png b/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom garaje.png deleted file mode 100755 index 7670fa1..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom garaje.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_button.png deleted file mode 100755 index 981ad52..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_mini.png deleted file mode 100755 index 6e05266..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/united kingdom_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/unsupported_browser_only.png b/myenv/lib/python3.12/site-packages/gui/resources/images/unsupported_browser_only.png deleted file mode 100755 index 9829dbd..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/unsupported_browser_only.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/verification_icon.png b/myenv/lib/python3.12/site-packages/gui/resources/images/verification_icon.png deleted file mode 100755 index 0cc8083..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/verification_icon.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/verified_profile.png b/myenv/lib/python3.12/site-packages/gui/resources/images/verified_profile.png deleted file mode 100755 index 2296984..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/verified_profile.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/warning.png b/myenv/lib/python3.12/site-packages/gui/resources/images/warning.png deleted file mode 100755 index 5bd92ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/warning.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/windows.png b/myenv/lib/python3.12/site-packages/gui/resources/images/windows.png deleted file mode 100755 index 7fa34a3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/windows.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/windowsx.png b/myenv/lib/python3.12/site-packages/gui/resources/images/windowsx.png deleted file mode 100755 index 0c4ede6..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/windowsx.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard.png deleted file mode 100755 index 5108f56..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_browser.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_browser.png deleted file mode 100755 index e5e47b5..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_browser.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_button.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_button.png deleted file mode 100755 index 3b1d7d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_button.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_ch_zh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_ch_zh.png deleted file mode 100755 index 010ecc2..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_ch_zh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_fi_01.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_fi_01.png deleted file mode 100755 index 31d3930..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_fi_01.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_is_1.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_is_1.png deleted file mode 100755 index e934cc3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_is_1.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_mini.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_mini.png deleted file mode 100755 index 78284a3..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_mini.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_nl_li.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_nl_li.png deleted file mode 100755 index f72a207..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_nl_li.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_system_wide.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_system_wide.png deleted file mode 100755 index b9c5f50..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_system_wide.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_ny.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_ny.png deleted file mode 100755 index ea5af80..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_ny.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_oh.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_oh.png deleted file mode 100755 index 9f3aaad..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_oh.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_wa.png b/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_wa.png deleted file mode 100755 index 1aaa043..0000000 Binary files a/myenv/lib/python3.12/site-packages/gui/resources/images/wireguard_us_wa.png and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/gui/resources/styles/look.css b/myenv/lib/python3.12/site-packages/gui/resources/styles/look.css deleted file mode 100755 index 53f1ed8..0000000 --- a/myenv/lib/python3.12/site-packages/gui/resources/styles/look.css +++ /dev/null @@ -1,72 +0,0 @@ -QLabel { - /* background-color: rgba(255, 255, 0, 0.2); */ - font-family: Retro Gaming; - font-size: 18px; - color: rgb(0, 255, 255); -} - -QLineEdit { - background-color:transparent; - font-family: Retro Gaming; - font-size: 18px; - color: rgb(0, 255, 255); -} - -QLineEdit:focus { - border: none; - outline: none; -} - -QTextEdit { - background-color:transparent; - font-family: Retro Gaming; - font-size: 18px; - color: rgb(0, 255, 255); - padding: 4px; -} - -.browser-version { - font-family: "Retro Gaming"; - font-size: 10px; - color: #888888; -} - -.browser-version-large { - font-family: "Retro Gaming"; - font-size: 25px; - color: rgb(0, 255, 255); -} -QLabel#label_profiles { - background-color: rgba(128, 128, 128, 0.5); /* Gray color with 50% opacity */ - - border-radius: 25px; /* Ajusta el valor según lo desees */ -} -QComboBox { - background-color: transparent; - padding: 3px; - color: rgb(0, 255, 255); - border: none; /* Elimina los bordes */ - font-family: "Retro Gaming"; /* Define el tipo de letra como Retro Gaming */ -} -QPushButton { - border: none; - border-radius: 5px; - padding: 5px 10px; - background-color: rgba(20, 13, 19, 0.288); - color: rgb(255, 255, 255); /* Color del texto */ -} - - - -/* Cambios al pasar el mouse sobre el botón */ -QPushButton:hover, QPushButton:checked { - background-color: rgba(67, 62, 87, 0.8); -} - - - -/* Cambios al presionar el botón */ -QPushButton:pressed, QPushButton:checked:pressed { - background-color: rgba(200, 200, 200, 1.0); - border: 1px solid #000fff; /* Borde al presionar el botón */ -} diff --git a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/METADATA b/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/METADATA deleted file mode 100644 index 7a4a4b7..0000000 --- a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/METADATA +++ /dev/null @@ -1,209 +0,0 @@ -Metadata-Version: 2.4 -Name: idna -Version: 3.11 -Summary: Internationalized Domain Names in Applications (IDNA) -Author-email: Kim Davies -Requires-Python: >=3.8 -Description-Content-Type: text/x-rst -License-Expression: BSD-3-Clause -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: System Administrators -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: Name Service (DNS) -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Utilities -License-File: LICENSE.md -Requires-Dist: ruff >= 0.6.2 ; extra == "all" -Requires-Dist: mypy >= 1.11.2 ; extra == "all" -Requires-Dist: pytest >= 8.3.2 ; extra == "all" -Requires-Dist: flake8 >= 7.1.1 ; extra == "all" -Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst -Project-URL: Issue tracker, https://github.com/kjd/idna/issues -Project-URL: Source, https://github.com/kjd/idna -Provides-Extra: all - -Internationalized Domain Names in Applications (IDNA) -===================================================== - -Support for `Internationalized Domain Names in -Applications (IDNA) `_ -and `Unicode IDNA Compatibility Processing -`_. - -The latest versions of these standards supplied here provide -more comprehensive language coverage and reduce the potential of -allowing domains with known security vulnerabilities. This library -is a suitable replacement for the “encodings.idna” -module that comes with the Python standard library, but which -only supports an older superseded IDNA specification from 2003. - -Basic functions are simply executed: - -.. code-block:: pycon - - >>> import idna - >>> idna.encode('ドメイン.テスト') - b'xn--eckwd4c7c.xn--zckzah' - >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) - ドメイン.テスト - - -Installation ------------- - -This package is available for installation from PyPI via the -typical mechanisms, such as: - -.. code-block:: bash - - $ python3 -m pip install idna - - -Usage ------ - -For typical usage, the ``encode`` and ``decode`` functions will take a -domain name argument and perform a conversion to ASCII compatible encoding -(known as A-labels), or to Unicode strings (known as U-labels) -respectively. - -.. code-block:: pycon - - >>> import idna - >>> idna.encode('ドメイン.テスト') - b'xn--eckwd4c7c.xn--zckzah' - >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) - ドメイン.テスト - -Conversions can be applied at a per-label basis using the ``ulabel`` or -``alabel`` functions if necessary: - -.. code-block:: pycon - - >>> idna.alabel('测试') - b'xn--0zwm56d' - - -Compatibility Mapping (UTS #46) -+++++++++++++++++++++++++++++++ - -This library provides support for `Unicode IDNA Compatibility -Processing `_ which normalizes input from -different potential ways a user may input a domain prior to performing the IDNA -conversion operations. This functionality, known as a -`mapping `_, is considered by the -specification to be a local user-interface issue distinct from IDNA -conversion functionality. - -For example, “Königsgäßchen” is not a permissible label as *LATIN -CAPITAL LETTER K* is not allowed (nor are capital letters in general). -UTS 46 will convert this into lower case prior to applying the IDNA -conversion. - -.. code-block:: pycon - - >>> import idna - >>> idna.encode('Königsgäßchen') - ... - idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed - >>> idna.encode('Königsgäßchen', uts46=True) - b'xn--knigsgchen-b4a3dun' - >>> print(idna.decode('xn--knigsgchen-b4a3dun')) - königsgäßchen - - -Exceptions ----------- - -All errors raised during the conversion following the specification -should raise an exception derived from the ``idna.IDNAError`` base -class. - -More specific exceptions that may be generated as ``idna.IDNABidiError`` -when the error reflects an illegal combination of left-to-right and -right-to-left characters in a label; ``idna.InvalidCodepoint`` when -a specific codepoint is an illegal character in an IDN label (i.e. -INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is -illegal based on its position in the string (i.e. it is CONTEXTO or CONTEXTJ -but the contextual requirements are not satisfied.) - -Building and Diagnostics ------------------------- - -The IDNA and UTS 46 functionality relies upon pre-calculated lookup -tables for performance. These tables are derived from computing against -eligibility criteria in the respective standards using the command-line -script ``tools/idna-data``. - -This tool will fetch relevant codepoint data from the Unicode repository -and perform the required calculations to identify eligibility. There are -three main modes: - -* ``idna-data make-libdata``. Generates ``idnadata.py`` and - ``uts46data.py``, the pre-calculated lookup tables used for IDNA and - UTS 46 conversions. Implementers who wish to track this library against - a different Unicode version may use this tool to manually generate a - different version of the ``idnadata.py`` and ``uts46data.py`` files. - -* ``idna-data make-table``. Generate a table of the IDNA disposition - (e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix - B.1 of RFC 5892 and the pre-computed tables published by `IANA - `_. - -* ``idna-data U+0061``. Prints debugging output on the various - properties associated with an individual Unicode codepoint (in this - case, U+0061), that are used to assess the IDNA and UTS 46 status of a - codepoint. This is helpful in debugging or analysis. - -The tool accepts a number of arguments, described using ``idna-data --h``. Most notably, the ``--version`` argument allows the specification -of the version of Unicode to be used in computing the table data. For -example, ``idna-data --version 9.0.0 make-libdata`` will generate -library data against Unicode 9.0.0. - - -Additional Notes ----------------- - -* **Packages**. The latest tagged release version is published in the - `Python Package Index `_. - -* **Version support**. This library supports Python 3.8 and higher. - As this library serves as a low-level toolkit for a variety of - applications, many of which strive for broad compatibility with older - Python versions, there is no rush to remove older interpreter support. - Support for older versions are likely to be removed from new releases - as automated tests can no longer easily be run, i.e. once the Python - version is officially end-of-life. - -* **Testing**. The library has a test suite based on each rule of the - IDNA specification, as well as tests that are provided as part of the - Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing - `_. - -* **Emoji**. It is an occasional request to support emoji domains in - this library. Encoding of symbols like emoji is expressly prohibited by - the technical standard IDNA 2008 and emoji domains are broadly phased - out across the domain industry due to associated security risks. For - now, applications that need to support these non-compliant labels - may wish to consider trying the encode/decode operation in this library - first, and then falling back to using `encodings.idna`. See `the Github - project `_ for more discussion. - -* **Transitional processing**. Unicode 16.0.0 removed transitional - processing so the `transitional` argument for the encode() method - no longer has any effect and will be removed at a later date. - diff --git a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/RECORD b/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/RECORD deleted file mode 100644 index 8525b6d..0000000 --- a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/RECORD +++ /dev/null @@ -1,22 +0,0 @@ -idna-3.11.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -idna-3.11.dist-info/METADATA,sha256=fCwSww9SuiN8TIHllFSASUQCW55hAs8dzKnr9RaEEbA,8378 -idna-3.11.dist-info/RECORD,, -idna-3.11.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -idna-3.11.dist-info/licenses/LICENSE.md,sha256=t6M2q_OwThgOwGXN0W5wXQeeHMehT5EKpukYfza5zYc,1541 -idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868 -idna/__pycache__/__init__.cpython-312.pyc,, -idna/__pycache__/codec.cpython-312.pyc,, -idna/__pycache__/compat.cpython-312.pyc,, -idna/__pycache__/core.cpython-312.pyc,, -idna/__pycache__/idnadata.cpython-312.pyc,, -idna/__pycache__/intranges.cpython-312.pyc,, -idna/__pycache__/package_data.cpython-312.pyc,, -idna/__pycache__/uts46data.cpython-312.pyc,, -idna/codec.py,sha256=M2SGWN7cs_6B32QmKTyTN6xQGZeYQgQ2wiX3_DR6loE,3438 -idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316 -idna/core.py,sha256=P26_XVycuMTZ1R2mNK1ZREVzM5mvTzdabBXfyZVU1Lc,13246 -idna/idnadata.py,sha256=SG8jhaGE53iiD6B49pt2pwTv_UvClciWE-N54oR2p4U,79623 -idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898 -idna/package_data.py,sha256=_CUavOxobnbyNG2FLyHoN8QHP3QM9W1tKuw7eq9QwBk,21 -idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -idna/uts46data.py,sha256=H9J35VkD0F9L9mKOqjeNGd2A-Va6FlPoz6Jz4K7h-ps,243725 diff --git a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/WHEEL deleted file mode 100644 index d8b9936..0000000 --- a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/licenses/LICENSE.md b/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/licenses/LICENSE.md deleted file mode 100644 index 256ba90..0000000 --- a/myenv/lib/python3.12/site-packages/idna-3.11.dist-info/licenses/LICENSE.md +++ /dev/null @@ -1,31 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2013-2025, Kim Davies and contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/idna/__init__.py b/myenv/lib/python3.12/site-packages/idna/__init__.py deleted file mode 100644 index cfdc030..0000000 --- a/myenv/lib/python3.12/site-packages/idna/__init__.py +++ /dev/null @@ -1,45 +0,0 @@ -from .core import ( - IDNABidiError, - IDNAError, - InvalidCodepoint, - InvalidCodepointContext, - alabel, - check_bidi, - check_hyphen_ok, - check_initial_combiner, - check_label, - check_nfc, - decode, - encode, - ulabel, - uts46_remap, - valid_contextj, - valid_contexto, - valid_label_length, - valid_string_length, -) -from .intranges import intranges_contain -from .package_data import __version__ - -__all__ = [ - "__version__", - "IDNABidiError", - "IDNAError", - "InvalidCodepoint", - "InvalidCodepointContext", - "alabel", - "check_bidi", - "check_hyphen_ok", - "check_initial_combiner", - "check_label", - "check_nfc", - "decode", - "encode", - "intranges_contain", - "ulabel", - "uts46_remap", - "valid_contextj", - "valid_contexto", - "valid_label_length", - "valid_string_length", -] diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 791b55c..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc deleted file mode 100644 index cae7d81..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc deleted file mode 100644 index dcc2709..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc deleted file mode 100644 index 5221dc1..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc deleted file mode 100644 index fbf1d9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc deleted file mode 100644 index 808361b..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc deleted file mode 100644 index c97ebcd..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc b/myenv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc deleted file mode 100644 index e8403d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/idna/codec.py b/myenv/lib/python3.12/site-packages/idna/codec.py deleted file mode 100644 index cbc2e4f..0000000 --- a/myenv/lib/python3.12/site-packages/idna/codec.py +++ /dev/null @@ -1,122 +0,0 @@ -import codecs -import re -from typing import Any, Optional, Tuple - -from .core import IDNAError, alabel, decode, encode, ulabel - -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class Codec(codecs.Codec): - def encode(self, data: str, errors: str = "strict") -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - return encode(data), len(data) - - def decode(self, data: bytes, errors: str = "strict") -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return "", 0 - - return decode(data), len(data) - - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - labels = _unicode_dots_re.split(data) - trailing_dot = b"" - if labels: - if not labels[-1]: - trailing_dot = b"." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = b"." - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result_bytes = b".".join(result) + trailing_dot - size += len(trailing_dot) - return result_bytes, size - - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return ("", 0) - - if not isinstance(data, str): - data = str(data, "ascii") - - labels = _unicode_dots_re.split(data) - trailing_dot = "" - if labels: - if not labels[-1]: - trailing_dot = "." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = "." - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result_str = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result_str, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - - -class StreamReader(Codec, codecs.StreamReader): - pass - - -def search_function(name: str) -> Optional[codecs.CodecInfo]: - if name != "idna2008": - return None - return codecs.CodecInfo( - name=name, - encode=Codec().encode, - decode=Codec().decode, # type: ignore - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) - - -codecs.register(search_function) diff --git a/myenv/lib/python3.12/site-packages/idna/compat.py b/myenv/lib/python3.12/site-packages/idna/compat.py deleted file mode 100644 index 1df9f2a..0000000 --- a/myenv/lib/python3.12/site-packages/idna/compat.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any, Union - -from .core import decode, encode - - -def ToASCII(label: str) -> bytes: - return encode(label) - - -def ToUnicode(label: Union[bytes, bytearray]) -> str: - return decode(label) - - -def nameprep(s: Any) -> None: - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") diff --git a/myenv/lib/python3.12/site-packages/idna/core.py b/myenv/lib/python3.12/site-packages/idna/core.py deleted file mode 100644 index 8177bf7..0000000 --- a/myenv/lib/python3.12/site-packages/idna/core.py +++ /dev/null @@ -1,437 +0,0 @@ -import bisect -import re -import unicodedata -from typing import Optional, Union - -from . import idnadata -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b"xn--" -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class IDNAError(UnicodeError): - """Base exception for all IDNA-encoding related problems""" - - pass - - -class IDNABidiError(IDNAError): - """Exception when bidirectional requirements are not satisfied""" - - pass - - -class InvalidCodepoint(IDNAError): - """Exception when a disallowed or unallocated codepoint is used""" - - pass - - -class InvalidCodepointContext(IDNAError): - """Exception when the codepoint is not valid in the context it is used""" - - pass - - -def _combining_class(cp: int) -> int: - v = unicodedata.combining(chr(cp)) - if v == 0: - if not unicodedata.name(chr(cp)): - raise ValueError("Unknown character in unicodedata") - return v - - -def _is_script(cp: str, script: str) -> bool: - return intranges_contain(ord(cp), idnadata.scripts[script]) - - -def _punycode(s: str) -> bytes: - return s.encode("punycode") - - -def _unot(s: int) -> str: - return "U+{:04X}".format(s) - - -def valid_label_length(label: Union[bytes, str]) -> bool: - if len(label) > 63: - return False - return True - - -def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label: str, check_ltr: bool = False) -> bool: - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == "": - # String likely comes from a newer version of Unicode - raise IDNABidiError("Unknown directionality in label {} at position {}".format(repr(label), idx)) - if direction in ["R", "AL", "AN"]: - bidi_label = True - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ["R", "AL"]: - rtl = True - elif direction == "L": - rtl = False - else: - raise IDNABidiError("First codepoint in label {} must be directionality L, R or AL".format(repr(label))) - - valid_ending = False - number_type: Optional[str] = None - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if direction not in [ - "R", - "AL", - "AN", - "EN", - "ES", - "CS", - "ET", - "ON", - "BN", - "NSM", - ]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a right-to-left label".format(idx)) - # Bidi rule 3 - if direction in ["R", "AL", "EN", "AN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - # Bidi rule 4 - if direction in ["AN", "EN"]: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError("Can not mix numeral types in a right-to-left label") - else: - # Bidi rule 5 - if direction not in ["L", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a left-to-right label".format(idx)) - # Bidi rule 6 - if direction in ["L", "EN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - - if not valid_ending: - raise IDNABidiError("Label ends with illegal codepoint directionality") - - return True - - -def check_initial_combiner(label: str) -> bool: - if unicodedata.category(label[0])[0] == "M": - raise IDNAError("Label begins with an illegal combining character") - return True - - -def check_hyphen_ok(label: str) -> bool: - if label[2:4] == "--": - raise IDNAError("Label has disallowed hyphens in 3rd and 4th position") - if label[0] == "-" or label[-1] == "-": - raise IDNAError("Label must not start or end with a hyphen") - return True - - -def check_nfc(label: str) -> None: - if unicodedata.normalize("NFC", label) != label: - raise IDNAError("Label must be in Normalization Form C") - - -def valid_contextj(label: str, pos: int) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x200C: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos - 1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("L"), ord("D")]: - ok = True - break - else: - break - - if not ok: - return False - - ok = False - for i in range(pos + 1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("R"), ord("D")]: - ok = True - break - else: - break - return ok - - if cp_value == 0x200D: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - return False - - -def valid_contexto(label: str, pos: int, exception: bool = False) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x00B7: - if 0 < pos < len(label) - 1: - if ord(label[pos - 1]) == 0x006C and ord(label[pos + 1]) == 0x006C: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label) - 1 and len(label) > 1: - return _is_script(label[pos + 1], "Greek") - return False - - elif cp_value == 0x05F3 or cp_value == 0x05F4: - if pos > 0: - return _is_script(label[pos - 1], "Hebrew") - return False - - elif cp_value == 0x30FB: - for cp in label: - if cp == "\u30fb": - continue - if _is_script(cp, "Hiragana") or _is_script(cp, "Katakana") or _is_script(cp, "Han"): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6F0 <= ord(cp) <= 0x06F9: - return False - return True - - elif 0x6F0 <= cp_value <= 0x6F9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - return False - - -def check_label(label: Union[str, bytes, bytearray]) -> None: - if isinstance(label, (bytes, bytearray)): - label = label.decode("utf-8") - if len(label) == 0: - raise IDNAError("Empty Label") - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for pos, cp in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes["PVALID"]): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTJ"]): - try: - if not valid_contextj(label, pos): - raise InvalidCodepointContext( - "Joiner {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - except ValueError: - raise IDNAError( - "Unknown codepoint adjacent to joiner {} at position {} in {}".format( - _unot(cp_value), pos + 1, repr(label) - ) - ) - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTO"]): - if not valid_contexto(label, pos): - raise InvalidCodepointContext( - "Codepoint {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - else: - raise InvalidCodepoint( - "Codepoint {} at position {} of {} not allowed".format(_unot(cp_value), pos + 1, repr(label)) - ) - - check_bidi(label) - - -def alabel(label: str) -> bytes: - try: - label_bytes = label.encode("ascii") - ulabel(label_bytes) - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - return label_bytes - except UnicodeEncodeError: - pass - - check_label(label) - label_bytes = _alabel_prefix + _punycode(label) - - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - - return label_bytes - - -def ulabel(label: Union[str, bytes, bytearray]) -> str: - if not isinstance(label, (bytes, bytearray)): - try: - label_bytes = label.encode("ascii") - except UnicodeEncodeError: - check_label(label) - return label - else: - label_bytes = bytes(label) - - label_bytes = label_bytes.lower() - if label_bytes.startswith(_alabel_prefix): - label_bytes = label_bytes[len(_alabel_prefix) :] - if not label_bytes: - raise IDNAError("Malformed A-label, no Punycode eligible content found") - if label_bytes.decode("ascii")[-1] == "-": - raise IDNAError("A-label must not end with a hyphen") - else: - check_label(label_bytes) - return label_bytes.decode("ascii") - - try: - label = label_bytes.decode("punycode") - except UnicodeError: - raise IDNAError("Invalid A-label") - check_label(label) - return label - - -def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - - output = "" - - for pos, char in enumerate(domain): - code_point = ord(char) - try: - uts46row = uts46data[code_point if code_point < 256 else bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement: Optional[str] = None - if len(uts46row) == 3: - replacement = uts46row[2] - if ( - status == "V" - or (status == "D" and not transitional) - or (status == "3" and not std3_rules and replacement is None) - ): - output += char - elif replacement is not None and ( - status == "M" or (status == "3" and not std3_rules) or (status == "D" and transitional) - ): - output += replacement - elif status != "I": - raise IndexError() - except IndexError: - raise InvalidCodepoint( - "Codepoint {} not allowed at position {} in {}".format(_unot(code_point), pos + 1, repr(domain)) - ) - - return unicodedata.normalize("NFC", output) - - -def encode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, - transitional: bool = False, -) -> bytes: - if not isinstance(s, str): - try: - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("should pass a unicode string to the function rather than a byte string.") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split(".") - else: - labels = _unicode_dots_re.split(s) - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if labels[-1] == "": - del labels[-1] - trailing_dot = True - for label in labels: - s = alabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append(b"") - s = b".".join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError("Domain too long") - return s - - -def decode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, -) -> str: - try: - if not isinstance(s, str): - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("Invalid ASCII in A-label") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(".") - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - s = ulabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append("") - return ".".join(result) diff --git a/myenv/lib/python3.12/site-packages/idna/idnadata.py b/myenv/lib/python3.12/site-packages/idna/idnadata.py deleted file mode 100644 index ded47ca..0000000 --- a/myenv/lib/python3.12/site-packages/idna/idnadata.py +++ /dev/null @@ -1,4309 +0,0 @@ -# This file is automatically generated by tools/idna-data - -__version__ = "16.0.0" - -scripts = { - "Greek": ( - 0x37000000374, - 0x37500000378, - 0x37A0000037E, - 0x37F00000380, - 0x38400000385, - 0x38600000387, - 0x3880000038B, - 0x38C0000038D, - 0x38E000003A2, - 0x3A3000003E2, - 0x3F000000400, - 0x1D2600001D2B, - 0x1D5D00001D62, - 0x1D6600001D6B, - 0x1DBF00001DC0, - 0x1F0000001F16, - 0x1F1800001F1E, - 0x1F2000001F46, - 0x1F4800001F4E, - 0x1F5000001F58, - 0x1F5900001F5A, - 0x1F5B00001F5C, - 0x1F5D00001F5E, - 0x1F5F00001F7E, - 0x1F8000001FB5, - 0x1FB600001FC5, - 0x1FC600001FD4, - 0x1FD600001FDC, - 0x1FDD00001FF0, - 0x1FF200001FF5, - 0x1FF600001FFF, - 0x212600002127, - 0xAB650000AB66, - 0x101400001018F, - 0x101A0000101A1, - 0x1D2000001D246, - ), - "Han": ( - 0x2E8000002E9A, - 0x2E9B00002EF4, - 0x2F0000002FD6, - 0x300500003006, - 0x300700003008, - 0x30210000302A, - 0x30380000303C, - 0x340000004DC0, - 0x4E000000A000, - 0xF9000000FA6E, - 0xFA700000FADA, - 0x16FE200016FE4, - 0x16FF000016FF2, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x2F8000002FA1E, - 0x300000003134B, - 0x31350000323B0, - ), - "Hebrew": ( - 0x591000005C8, - 0x5D0000005EB, - 0x5EF000005F5, - 0xFB1D0000FB37, - 0xFB380000FB3D, - 0xFB3E0000FB3F, - 0xFB400000FB42, - 0xFB430000FB45, - 0xFB460000FB50, - ), - "Hiragana": ( - 0x304100003097, - 0x309D000030A0, - 0x1B0010001B120, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1F2000001F201, - ), - "Katakana": ( - 0x30A1000030FB, - 0x30FD00003100, - 0x31F000003200, - 0x32D0000032FF, - 0x330000003358, - 0xFF660000FF70, - 0xFF710000FF9E, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B001, - 0x1B1200001B123, - 0x1B1550001B156, - 0x1B1640001B168, - ), -} -joining_types = { - 0xAD: 84, - 0x300: 84, - 0x301: 84, - 0x302: 84, - 0x303: 84, - 0x304: 84, - 0x305: 84, - 0x306: 84, - 0x307: 84, - 0x308: 84, - 0x309: 84, - 0x30A: 84, - 0x30B: 84, - 0x30C: 84, - 0x30D: 84, - 0x30E: 84, - 0x30F: 84, - 0x310: 84, - 0x311: 84, - 0x312: 84, - 0x313: 84, - 0x314: 84, - 0x315: 84, - 0x316: 84, - 0x317: 84, - 0x318: 84, - 0x319: 84, - 0x31A: 84, - 0x31B: 84, - 0x31C: 84, - 0x31D: 84, - 0x31E: 84, - 0x31F: 84, - 0x320: 84, - 0x321: 84, - 0x322: 84, - 0x323: 84, - 0x324: 84, - 0x325: 84, - 0x326: 84, - 0x327: 84, - 0x328: 84, - 0x329: 84, - 0x32A: 84, - 0x32B: 84, - 0x32C: 84, - 0x32D: 84, - 0x32E: 84, - 0x32F: 84, - 0x330: 84, - 0x331: 84, - 0x332: 84, - 0x333: 84, - 0x334: 84, - 0x335: 84, - 0x336: 84, - 0x337: 84, - 0x338: 84, - 0x339: 84, - 0x33A: 84, - 0x33B: 84, - 0x33C: 84, - 0x33D: 84, - 0x33E: 84, - 0x33F: 84, - 0x340: 84, - 0x341: 84, - 0x342: 84, - 0x343: 84, - 0x344: 84, - 0x345: 84, - 0x346: 84, - 0x347: 84, - 0x348: 84, - 0x349: 84, - 0x34A: 84, - 0x34B: 84, - 0x34C: 84, - 0x34D: 84, - 0x34E: 84, - 0x34F: 84, - 0x350: 84, - 0x351: 84, - 0x352: 84, - 0x353: 84, - 0x354: 84, - 0x355: 84, - 0x356: 84, - 0x357: 84, - 0x358: 84, - 0x359: 84, - 0x35A: 84, - 0x35B: 84, - 0x35C: 84, - 0x35D: 84, - 0x35E: 84, - 0x35F: 84, - 0x360: 84, - 0x361: 84, - 0x362: 84, - 0x363: 84, - 0x364: 84, - 0x365: 84, - 0x366: 84, - 0x367: 84, - 0x368: 84, - 0x369: 84, - 0x36A: 84, - 0x36B: 84, - 0x36C: 84, - 0x36D: 84, - 0x36E: 84, - 0x36F: 84, - 0x483: 84, - 0x484: 84, - 0x485: 84, - 0x486: 84, - 0x487: 84, - 0x488: 84, - 0x489: 84, - 0x591: 84, - 0x592: 84, - 0x593: 84, - 0x594: 84, - 0x595: 84, - 0x596: 84, - 0x597: 84, - 0x598: 84, - 0x599: 84, - 0x59A: 84, - 0x59B: 84, - 0x59C: 84, - 0x59D: 84, - 0x59E: 84, - 0x59F: 84, - 0x5A0: 84, - 0x5A1: 84, - 0x5A2: 84, - 0x5A3: 84, - 0x5A4: 84, - 0x5A5: 84, - 0x5A6: 84, - 0x5A7: 84, - 0x5A8: 84, - 0x5A9: 84, - 0x5AA: 84, - 0x5AB: 84, - 0x5AC: 84, - 0x5AD: 84, - 0x5AE: 84, - 0x5AF: 84, - 0x5B0: 84, - 0x5B1: 84, - 0x5B2: 84, - 0x5B3: 84, - 0x5B4: 84, - 0x5B5: 84, - 0x5B6: 84, - 0x5B7: 84, - 0x5B8: 84, - 0x5B9: 84, - 0x5BA: 84, - 0x5BB: 84, - 0x5BC: 84, - 0x5BD: 84, - 0x5BF: 84, - 0x5C1: 84, - 0x5C2: 84, - 0x5C4: 84, - 0x5C5: 84, - 0x5C7: 84, - 0x610: 84, - 0x611: 84, - 0x612: 84, - 0x613: 84, - 0x614: 84, - 0x615: 84, - 0x616: 84, - 0x617: 84, - 0x618: 84, - 0x619: 84, - 0x61A: 84, - 0x61C: 84, - 0x620: 68, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62A: 68, - 0x62B: 68, - 0x62C: 68, - 0x62D: 68, - 0x62E: 68, - 0x62F: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63A: 68, - 0x63B: 68, - 0x63C: 68, - 0x63D: 68, - 0x63E: 68, - 0x63F: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64A: 68, - 0x64B: 84, - 0x64C: 84, - 0x64D: 84, - 0x64E: 84, - 0x64F: 84, - 0x650: 84, - 0x651: 84, - 0x652: 84, - 0x653: 84, - 0x654: 84, - 0x655: 84, - 0x656: 84, - 0x657: 84, - 0x658: 84, - 0x659: 84, - 0x65A: 84, - 0x65B: 84, - 0x65C: 84, - 0x65D: 84, - 0x65E: 84, - 0x65F: 84, - 0x66E: 68, - 0x66F: 68, - 0x670: 84, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67A: 68, - 0x67B: 68, - 0x67C: 68, - 0x67D: 68, - 0x67E: 68, - 0x67F: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68A: 82, - 0x68B: 82, - 0x68C: 82, - 0x68D: 82, - 0x68E: 82, - 0x68F: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69A: 68, - 0x69B: 68, - 0x69C: 68, - 0x69D: 68, - 0x69E: 68, - 0x69F: 68, - 0x6A0: 68, - 0x6A1: 68, - 0x6A2: 68, - 0x6A3: 68, - 0x6A4: 68, - 0x6A5: 68, - 0x6A6: 68, - 0x6A7: 68, - 0x6A8: 68, - 0x6A9: 68, - 0x6AA: 68, - 0x6AB: 68, - 0x6AC: 68, - 0x6AD: 68, - 0x6AE: 68, - 0x6AF: 68, - 0x6B0: 68, - 0x6B1: 68, - 0x6B2: 68, - 0x6B3: 68, - 0x6B4: 68, - 0x6B5: 68, - 0x6B6: 68, - 0x6B7: 68, - 0x6B8: 68, - 0x6B9: 68, - 0x6BA: 68, - 0x6BB: 68, - 0x6BC: 68, - 0x6BD: 68, - 0x6BE: 68, - 0x6BF: 68, - 0x6C0: 82, - 0x6C1: 68, - 0x6C2: 68, - 0x6C3: 82, - 0x6C4: 82, - 0x6C5: 82, - 0x6C6: 82, - 0x6C7: 82, - 0x6C8: 82, - 0x6C9: 82, - 0x6CA: 82, - 0x6CB: 82, - 0x6CC: 68, - 0x6CD: 82, - 0x6CE: 68, - 0x6CF: 82, - 0x6D0: 68, - 0x6D1: 68, - 0x6D2: 82, - 0x6D3: 82, - 0x6D5: 82, - 0x6D6: 84, - 0x6D7: 84, - 0x6D8: 84, - 0x6D9: 84, - 0x6DA: 84, - 0x6DB: 84, - 0x6DC: 84, - 0x6DF: 84, - 0x6E0: 84, - 0x6E1: 84, - 0x6E2: 84, - 0x6E3: 84, - 0x6E4: 84, - 0x6E7: 84, - 0x6E8: 84, - 0x6EA: 84, - 0x6EB: 84, - 0x6EC: 84, - 0x6ED: 84, - 0x6EE: 82, - 0x6EF: 82, - 0x6FA: 68, - 0x6FB: 68, - 0x6FC: 68, - 0x6FF: 68, - 0x70F: 84, - 0x710: 82, - 0x711: 84, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71A: 68, - 0x71B: 68, - 0x71C: 68, - 0x71D: 68, - 0x71E: 82, - 0x71F: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72A: 82, - 0x72B: 68, - 0x72C: 82, - 0x72D: 68, - 0x72E: 68, - 0x72F: 82, - 0x730: 84, - 0x731: 84, - 0x732: 84, - 0x733: 84, - 0x734: 84, - 0x735: 84, - 0x736: 84, - 0x737: 84, - 0x738: 84, - 0x739: 84, - 0x73A: 84, - 0x73B: 84, - 0x73C: 84, - 0x73D: 84, - 0x73E: 84, - 0x73F: 84, - 0x740: 84, - 0x741: 84, - 0x742: 84, - 0x743: 84, - 0x744: 84, - 0x745: 84, - 0x746: 84, - 0x747: 84, - 0x748: 84, - 0x749: 84, - 0x74A: 84, - 0x74D: 82, - 0x74E: 68, - 0x74F: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75A: 82, - 0x75B: 82, - 0x75C: 68, - 0x75D: 68, - 0x75E: 68, - 0x75F: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76A: 68, - 0x76B: 82, - 0x76C: 82, - 0x76D: 68, - 0x76E: 68, - 0x76F: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77A: 68, - 0x77B: 68, - 0x77C: 68, - 0x77D: 68, - 0x77E: 68, - 0x77F: 68, - 0x7A6: 84, - 0x7A7: 84, - 0x7A8: 84, - 0x7A9: 84, - 0x7AA: 84, - 0x7AB: 84, - 0x7AC: 84, - 0x7AD: 84, - 0x7AE: 84, - 0x7AF: 84, - 0x7B0: 84, - 0x7CA: 68, - 0x7CB: 68, - 0x7CC: 68, - 0x7CD: 68, - 0x7CE: 68, - 0x7CF: 68, - 0x7D0: 68, - 0x7D1: 68, - 0x7D2: 68, - 0x7D3: 68, - 0x7D4: 68, - 0x7D5: 68, - 0x7D6: 68, - 0x7D7: 68, - 0x7D8: 68, - 0x7D9: 68, - 0x7DA: 68, - 0x7DB: 68, - 0x7DC: 68, - 0x7DD: 68, - 0x7DE: 68, - 0x7DF: 68, - 0x7E0: 68, - 0x7E1: 68, - 0x7E2: 68, - 0x7E3: 68, - 0x7E4: 68, - 0x7E5: 68, - 0x7E6: 68, - 0x7E7: 68, - 0x7E8: 68, - 0x7E9: 68, - 0x7EA: 68, - 0x7EB: 84, - 0x7EC: 84, - 0x7ED: 84, - 0x7EE: 84, - 0x7EF: 84, - 0x7F0: 84, - 0x7F1: 84, - 0x7F2: 84, - 0x7F3: 84, - 0x7FA: 67, - 0x7FD: 84, - 0x816: 84, - 0x817: 84, - 0x818: 84, - 0x819: 84, - 0x81B: 84, - 0x81C: 84, - 0x81D: 84, - 0x81E: 84, - 0x81F: 84, - 0x820: 84, - 0x821: 84, - 0x822: 84, - 0x823: 84, - 0x825: 84, - 0x826: 84, - 0x827: 84, - 0x829: 84, - 0x82A: 84, - 0x82B: 84, - 0x82C: 84, - 0x82D: 84, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 82, - 0x848: 68, - 0x849: 82, - 0x84A: 68, - 0x84B: 68, - 0x84C: 68, - 0x84D: 68, - 0x84E: 68, - 0x84F: 68, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 82, - 0x857: 82, - 0x858: 82, - 0x859: 84, - 0x85A: 84, - 0x85B: 84, - 0x860: 68, - 0x862: 68, - 0x863: 68, - 0x864: 68, - 0x865: 68, - 0x867: 82, - 0x868: 68, - 0x869: 82, - 0x86A: 82, - 0x870: 82, - 0x871: 82, - 0x872: 82, - 0x873: 82, - 0x874: 82, - 0x875: 82, - 0x876: 82, - 0x877: 82, - 0x878: 82, - 0x879: 82, - 0x87A: 82, - 0x87B: 82, - 0x87C: 82, - 0x87D: 82, - 0x87E: 82, - 0x87F: 82, - 0x880: 82, - 0x881: 82, - 0x882: 82, - 0x883: 67, - 0x884: 67, - 0x885: 67, - 0x886: 68, - 0x889: 68, - 0x88A: 68, - 0x88B: 68, - 0x88C: 68, - 0x88D: 68, - 0x88E: 82, - 0x897: 84, - 0x898: 84, - 0x899: 84, - 0x89A: 84, - 0x89B: 84, - 0x89C: 84, - 0x89D: 84, - 0x89E: 84, - 0x89F: 84, - 0x8A0: 68, - 0x8A1: 68, - 0x8A2: 68, - 0x8A3: 68, - 0x8A4: 68, - 0x8A5: 68, - 0x8A6: 68, - 0x8A7: 68, - 0x8A8: 68, - 0x8A9: 68, - 0x8AA: 82, - 0x8AB: 82, - 0x8AC: 82, - 0x8AE: 82, - 0x8AF: 68, - 0x8B0: 68, - 0x8B1: 82, - 0x8B2: 82, - 0x8B3: 68, - 0x8B4: 68, - 0x8B5: 68, - 0x8B6: 68, - 0x8B7: 68, - 0x8B8: 68, - 0x8B9: 82, - 0x8BA: 68, - 0x8BB: 68, - 0x8BC: 68, - 0x8BD: 68, - 0x8BE: 68, - 0x8BF: 68, - 0x8C0: 68, - 0x8C1: 68, - 0x8C2: 68, - 0x8C3: 68, - 0x8C4: 68, - 0x8C5: 68, - 0x8C6: 68, - 0x8C7: 68, - 0x8C8: 68, - 0x8CA: 84, - 0x8CB: 84, - 0x8CC: 84, - 0x8CD: 84, - 0x8CE: 84, - 0x8CF: 84, - 0x8D0: 84, - 0x8D1: 84, - 0x8D2: 84, - 0x8D3: 84, - 0x8D4: 84, - 0x8D5: 84, - 0x8D6: 84, - 0x8D7: 84, - 0x8D8: 84, - 0x8D9: 84, - 0x8DA: 84, - 0x8DB: 84, - 0x8DC: 84, - 0x8DD: 84, - 0x8DE: 84, - 0x8DF: 84, - 0x8E0: 84, - 0x8E1: 84, - 0x8E3: 84, - 0x8E4: 84, - 0x8E5: 84, - 0x8E6: 84, - 0x8E7: 84, - 0x8E8: 84, - 0x8E9: 84, - 0x8EA: 84, - 0x8EB: 84, - 0x8EC: 84, - 0x8ED: 84, - 0x8EE: 84, - 0x8EF: 84, - 0x8F0: 84, - 0x8F1: 84, - 0x8F2: 84, - 0x8F3: 84, - 0x8F4: 84, - 0x8F5: 84, - 0x8F6: 84, - 0x8F7: 84, - 0x8F8: 84, - 0x8F9: 84, - 0x8FA: 84, - 0x8FB: 84, - 0x8FC: 84, - 0x8FD: 84, - 0x8FE: 84, - 0x8FF: 84, - 0x900: 84, - 0x901: 84, - 0x902: 84, - 0x93A: 84, - 0x93C: 84, - 0x941: 84, - 0x942: 84, - 0x943: 84, - 0x944: 84, - 0x945: 84, - 0x946: 84, - 0x947: 84, - 0x948: 84, - 0x94D: 84, - 0x951: 84, - 0x952: 84, - 0x953: 84, - 0x954: 84, - 0x955: 84, - 0x956: 84, - 0x957: 84, - 0x962: 84, - 0x963: 84, - 0x981: 84, - 0x9BC: 84, - 0x9C1: 84, - 0x9C2: 84, - 0x9C3: 84, - 0x9C4: 84, - 0x9CD: 84, - 0x9E2: 84, - 0x9E3: 84, - 0x9FE: 84, - 0xA01: 84, - 0xA02: 84, - 0xA3C: 84, - 0xA41: 84, - 0xA42: 84, - 0xA47: 84, - 0xA48: 84, - 0xA4B: 84, - 0xA4C: 84, - 0xA4D: 84, - 0xA51: 84, - 0xA70: 84, - 0xA71: 84, - 0xA75: 84, - 0xA81: 84, - 0xA82: 84, - 0xABC: 84, - 0xAC1: 84, - 0xAC2: 84, - 0xAC3: 84, - 0xAC4: 84, - 0xAC5: 84, - 0xAC7: 84, - 0xAC8: 84, - 0xACD: 84, - 0xAE2: 84, - 0xAE3: 84, - 0xAFA: 84, - 0xAFB: 84, - 0xAFC: 84, - 0xAFD: 84, - 0xAFE: 84, - 0xAFF: 84, - 0xB01: 84, - 0xB3C: 84, - 0xB3F: 84, - 0xB41: 84, - 0xB42: 84, - 0xB43: 84, - 0xB44: 84, - 0xB4D: 84, - 0xB55: 84, - 0xB56: 84, - 0xB62: 84, - 0xB63: 84, - 0xB82: 84, - 0xBC0: 84, - 0xBCD: 84, - 0xC00: 84, - 0xC04: 84, - 0xC3C: 84, - 0xC3E: 84, - 0xC3F: 84, - 0xC40: 84, - 0xC46: 84, - 0xC47: 84, - 0xC48: 84, - 0xC4A: 84, - 0xC4B: 84, - 0xC4C: 84, - 0xC4D: 84, - 0xC55: 84, - 0xC56: 84, - 0xC62: 84, - 0xC63: 84, - 0xC81: 84, - 0xCBC: 84, - 0xCBF: 84, - 0xCC6: 84, - 0xCCC: 84, - 0xCCD: 84, - 0xCE2: 84, - 0xCE3: 84, - 0xD00: 84, - 0xD01: 84, - 0xD3B: 84, - 0xD3C: 84, - 0xD41: 84, - 0xD42: 84, - 0xD43: 84, - 0xD44: 84, - 0xD4D: 84, - 0xD62: 84, - 0xD63: 84, - 0xD81: 84, - 0xDCA: 84, - 0xDD2: 84, - 0xDD3: 84, - 0xDD4: 84, - 0xDD6: 84, - 0xE31: 84, - 0xE34: 84, - 0xE35: 84, - 0xE36: 84, - 0xE37: 84, - 0xE38: 84, - 0xE39: 84, - 0xE3A: 84, - 0xE47: 84, - 0xE48: 84, - 0xE49: 84, - 0xE4A: 84, - 0xE4B: 84, - 0xE4C: 84, - 0xE4D: 84, - 0xE4E: 84, - 0xEB1: 84, - 0xEB4: 84, - 0xEB5: 84, - 0xEB6: 84, - 0xEB7: 84, - 0xEB8: 84, - 0xEB9: 84, - 0xEBA: 84, - 0xEBB: 84, - 0xEBC: 84, - 0xEC8: 84, - 0xEC9: 84, - 0xECA: 84, - 0xECB: 84, - 0xECC: 84, - 0xECD: 84, - 0xECE: 84, - 0xF18: 84, - 0xF19: 84, - 0xF35: 84, - 0xF37: 84, - 0xF39: 84, - 0xF71: 84, - 0xF72: 84, - 0xF73: 84, - 0xF74: 84, - 0xF75: 84, - 0xF76: 84, - 0xF77: 84, - 0xF78: 84, - 0xF79: 84, - 0xF7A: 84, - 0xF7B: 84, - 0xF7C: 84, - 0xF7D: 84, - 0xF7E: 84, - 0xF80: 84, - 0xF81: 84, - 0xF82: 84, - 0xF83: 84, - 0xF84: 84, - 0xF86: 84, - 0xF87: 84, - 0xF8D: 84, - 0xF8E: 84, - 0xF8F: 84, - 0xF90: 84, - 0xF91: 84, - 0xF92: 84, - 0xF93: 84, - 0xF94: 84, - 0xF95: 84, - 0xF96: 84, - 0xF97: 84, - 0xF99: 84, - 0xF9A: 84, - 0xF9B: 84, - 0xF9C: 84, - 0xF9D: 84, - 0xF9E: 84, - 0xF9F: 84, - 0xFA0: 84, - 0xFA1: 84, - 0xFA2: 84, - 0xFA3: 84, - 0xFA4: 84, - 0xFA5: 84, - 0xFA6: 84, - 0xFA7: 84, - 0xFA8: 84, - 0xFA9: 84, - 0xFAA: 84, - 0xFAB: 84, - 0xFAC: 84, - 0xFAD: 84, - 0xFAE: 84, - 0xFAF: 84, - 0xFB0: 84, - 0xFB1: 84, - 0xFB2: 84, - 0xFB3: 84, - 0xFB4: 84, - 0xFB5: 84, - 0xFB6: 84, - 0xFB7: 84, - 0xFB8: 84, - 0xFB9: 84, - 0xFBA: 84, - 0xFBB: 84, - 0xFBC: 84, - 0xFC6: 84, - 0x102D: 84, - 0x102E: 84, - 0x102F: 84, - 0x1030: 84, - 0x1032: 84, - 0x1033: 84, - 0x1034: 84, - 0x1035: 84, - 0x1036: 84, - 0x1037: 84, - 0x1039: 84, - 0x103A: 84, - 0x103D: 84, - 0x103E: 84, - 0x1058: 84, - 0x1059: 84, - 0x105E: 84, - 0x105F: 84, - 0x1060: 84, - 0x1071: 84, - 0x1072: 84, - 0x1073: 84, - 0x1074: 84, - 0x1082: 84, - 0x1085: 84, - 0x1086: 84, - 0x108D: 84, - 0x109D: 84, - 0x135D: 84, - 0x135E: 84, - 0x135F: 84, - 0x1712: 84, - 0x1713: 84, - 0x1714: 84, - 0x1732: 84, - 0x1733: 84, - 0x1752: 84, - 0x1753: 84, - 0x1772: 84, - 0x1773: 84, - 0x17B4: 84, - 0x17B5: 84, - 0x17B7: 84, - 0x17B8: 84, - 0x17B9: 84, - 0x17BA: 84, - 0x17BB: 84, - 0x17BC: 84, - 0x17BD: 84, - 0x17C6: 84, - 0x17C9: 84, - 0x17CA: 84, - 0x17CB: 84, - 0x17CC: 84, - 0x17CD: 84, - 0x17CE: 84, - 0x17CF: 84, - 0x17D0: 84, - 0x17D1: 84, - 0x17D2: 84, - 0x17D3: 84, - 0x17DD: 84, - 0x1807: 68, - 0x180A: 67, - 0x180B: 84, - 0x180C: 84, - 0x180D: 84, - 0x180F: 84, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182A: 68, - 0x182B: 68, - 0x182C: 68, - 0x182D: 68, - 0x182E: 68, - 0x182F: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183A: 68, - 0x183B: 68, - 0x183C: 68, - 0x183D: 68, - 0x183E: 68, - 0x183F: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184A: 68, - 0x184B: 68, - 0x184C: 68, - 0x184D: 68, - 0x184E: 68, - 0x184F: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185A: 68, - 0x185B: 68, - 0x185C: 68, - 0x185D: 68, - 0x185E: 68, - 0x185F: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186A: 68, - 0x186B: 68, - 0x186C: 68, - 0x186D: 68, - 0x186E: 68, - 0x186F: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1878: 68, - 0x1885: 84, - 0x1886: 84, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188A: 68, - 0x188B: 68, - 0x188C: 68, - 0x188D: 68, - 0x188E: 68, - 0x188F: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189A: 68, - 0x189B: 68, - 0x189C: 68, - 0x189D: 68, - 0x189E: 68, - 0x189F: 68, - 0x18A0: 68, - 0x18A1: 68, - 0x18A2: 68, - 0x18A3: 68, - 0x18A4: 68, - 0x18A5: 68, - 0x18A6: 68, - 0x18A7: 68, - 0x18A8: 68, - 0x18A9: 84, - 0x18AA: 68, - 0x1920: 84, - 0x1921: 84, - 0x1922: 84, - 0x1927: 84, - 0x1928: 84, - 0x1932: 84, - 0x1939: 84, - 0x193A: 84, - 0x193B: 84, - 0x1A17: 84, - 0x1A18: 84, - 0x1A1B: 84, - 0x1A56: 84, - 0x1A58: 84, - 0x1A59: 84, - 0x1A5A: 84, - 0x1A5B: 84, - 0x1A5C: 84, - 0x1A5D: 84, - 0x1A5E: 84, - 0x1A60: 84, - 0x1A62: 84, - 0x1A65: 84, - 0x1A66: 84, - 0x1A67: 84, - 0x1A68: 84, - 0x1A69: 84, - 0x1A6A: 84, - 0x1A6B: 84, - 0x1A6C: 84, - 0x1A73: 84, - 0x1A74: 84, - 0x1A75: 84, - 0x1A76: 84, - 0x1A77: 84, - 0x1A78: 84, - 0x1A79: 84, - 0x1A7A: 84, - 0x1A7B: 84, - 0x1A7C: 84, - 0x1A7F: 84, - 0x1AB0: 84, - 0x1AB1: 84, - 0x1AB2: 84, - 0x1AB3: 84, - 0x1AB4: 84, - 0x1AB5: 84, - 0x1AB6: 84, - 0x1AB7: 84, - 0x1AB8: 84, - 0x1AB9: 84, - 0x1ABA: 84, - 0x1ABB: 84, - 0x1ABC: 84, - 0x1ABD: 84, - 0x1ABE: 84, - 0x1ABF: 84, - 0x1AC0: 84, - 0x1AC1: 84, - 0x1AC2: 84, - 0x1AC3: 84, - 0x1AC4: 84, - 0x1AC5: 84, - 0x1AC6: 84, - 0x1AC7: 84, - 0x1AC8: 84, - 0x1AC9: 84, - 0x1ACA: 84, - 0x1ACB: 84, - 0x1ACC: 84, - 0x1ACD: 84, - 0x1ACE: 84, - 0x1B00: 84, - 0x1B01: 84, - 0x1B02: 84, - 0x1B03: 84, - 0x1B34: 84, - 0x1B36: 84, - 0x1B37: 84, - 0x1B38: 84, - 0x1B39: 84, - 0x1B3A: 84, - 0x1B3C: 84, - 0x1B42: 84, - 0x1B6B: 84, - 0x1B6C: 84, - 0x1B6D: 84, - 0x1B6E: 84, - 0x1B6F: 84, - 0x1B70: 84, - 0x1B71: 84, - 0x1B72: 84, - 0x1B73: 84, - 0x1B80: 84, - 0x1B81: 84, - 0x1BA2: 84, - 0x1BA3: 84, - 0x1BA4: 84, - 0x1BA5: 84, - 0x1BA8: 84, - 0x1BA9: 84, - 0x1BAB: 84, - 0x1BAC: 84, - 0x1BAD: 84, - 0x1BE6: 84, - 0x1BE8: 84, - 0x1BE9: 84, - 0x1BED: 84, - 0x1BEF: 84, - 0x1BF0: 84, - 0x1BF1: 84, - 0x1C2C: 84, - 0x1C2D: 84, - 0x1C2E: 84, - 0x1C2F: 84, - 0x1C30: 84, - 0x1C31: 84, - 0x1C32: 84, - 0x1C33: 84, - 0x1C36: 84, - 0x1C37: 84, - 0x1CD0: 84, - 0x1CD1: 84, - 0x1CD2: 84, - 0x1CD4: 84, - 0x1CD5: 84, - 0x1CD6: 84, - 0x1CD7: 84, - 0x1CD8: 84, - 0x1CD9: 84, - 0x1CDA: 84, - 0x1CDB: 84, - 0x1CDC: 84, - 0x1CDD: 84, - 0x1CDE: 84, - 0x1CDF: 84, - 0x1CE0: 84, - 0x1CE2: 84, - 0x1CE3: 84, - 0x1CE4: 84, - 0x1CE5: 84, - 0x1CE6: 84, - 0x1CE7: 84, - 0x1CE8: 84, - 0x1CED: 84, - 0x1CF4: 84, - 0x1CF8: 84, - 0x1CF9: 84, - 0x1DC0: 84, - 0x1DC1: 84, - 0x1DC2: 84, - 0x1DC3: 84, - 0x1DC4: 84, - 0x1DC5: 84, - 0x1DC6: 84, - 0x1DC7: 84, - 0x1DC8: 84, - 0x1DC9: 84, - 0x1DCA: 84, - 0x1DCB: 84, - 0x1DCC: 84, - 0x1DCD: 84, - 0x1DCE: 84, - 0x1DCF: 84, - 0x1DD0: 84, - 0x1DD1: 84, - 0x1DD2: 84, - 0x1DD3: 84, - 0x1DD4: 84, - 0x1DD5: 84, - 0x1DD6: 84, - 0x1DD7: 84, - 0x1DD8: 84, - 0x1DD9: 84, - 0x1DDA: 84, - 0x1DDB: 84, - 0x1DDC: 84, - 0x1DDD: 84, - 0x1DDE: 84, - 0x1DDF: 84, - 0x1DE0: 84, - 0x1DE1: 84, - 0x1DE2: 84, - 0x1DE3: 84, - 0x1DE4: 84, - 0x1DE5: 84, - 0x1DE6: 84, - 0x1DE7: 84, - 0x1DE8: 84, - 0x1DE9: 84, - 0x1DEA: 84, - 0x1DEB: 84, - 0x1DEC: 84, - 0x1DED: 84, - 0x1DEE: 84, - 0x1DEF: 84, - 0x1DF0: 84, - 0x1DF1: 84, - 0x1DF2: 84, - 0x1DF3: 84, - 0x1DF4: 84, - 0x1DF5: 84, - 0x1DF6: 84, - 0x1DF7: 84, - 0x1DF8: 84, - 0x1DF9: 84, - 0x1DFA: 84, - 0x1DFB: 84, - 0x1DFC: 84, - 0x1DFD: 84, - 0x1DFE: 84, - 0x1DFF: 84, - 0x200B: 84, - 0x200D: 67, - 0x200E: 84, - 0x200F: 84, - 0x202A: 84, - 0x202B: 84, - 0x202C: 84, - 0x202D: 84, - 0x202E: 84, - 0x2060: 84, - 0x2061: 84, - 0x2062: 84, - 0x2063: 84, - 0x2064: 84, - 0x206A: 84, - 0x206B: 84, - 0x206C: 84, - 0x206D: 84, - 0x206E: 84, - 0x206F: 84, - 0x20D0: 84, - 0x20D1: 84, - 0x20D2: 84, - 0x20D3: 84, - 0x20D4: 84, - 0x20D5: 84, - 0x20D6: 84, - 0x20D7: 84, - 0x20D8: 84, - 0x20D9: 84, - 0x20DA: 84, - 0x20DB: 84, - 0x20DC: 84, - 0x20DD: 84, - 0x20DE: 84, - 0x20DF: 84, - 0x20E0: 84, - 0x20E1: 84, - 0x20E2: 84, - 0x20E3: 84, - 0x20E4: 84, - 0x20E5: 84, - 0x20E6: 84, - 0x20E7: 84, - 0x20E8: 84, - 0x20E9: 84, - 0x20EA: 84, - 0x20EB: 84, - 0x20EC: 84, - 0x20ED: 84, - 0x20EE: 84, - 0x20EF: 84, - 0x20F0: 84, - 0x2CEF: 84, - 0x2CF0: 84, - 0x2CF1: 84, - 0x2D7F: 84, - 0x2DE0: 84, - 0x2DE1: 84, - 0x2DE2: 84, - 0x2DE3: 84, - 0x2DE4: 84, - 0x2DE5: 84, - 0x2DE6: 84, - 0x2DE7: 84, - 0x2DE8: 84, - 0x2DE9: 84, - 0x2DEA: 84, - 0x2DEB: 84, - 0x2DEC: 84, - 0x2DED: 84, - 0x2DEE: 84, - 0x2DEF: 84, - 0x2DF0: 84, - 0x2DF1: 84, - 0x2DF2: 84, - 0x2DF3: 84, - 0x2DF4: 84, - 0x2DF5: 84, - 0x2DF6: 84, - 0x2DF7: 84, - 0x2DF8: 84, - 0x2DF9: 84, - 0x2DFA: 84, - 0x2DFB: 84, - 0x2DFC: 84, - 0x2DFD: 84, - 0x2DFE: 84, - 0x2DFF: 84, - 0x302A: 84, - 0x302B: 84, - 0x302C: 84, - 0x302D: 84, - 0x3099: 84, - 0x309A: 84, - 0xA66F: 84, - 0xA670: 84, - 0xA671: 84, - 0xA672: 84, - 0xA674: 84, - 0xA675: 84, - 0xA676: 84, - 0xA677: 84, - 0xA678: 84, - 0xA679: 84, - 0xA67A: 84, - 0xA67B: 84, - 0xA67C: 84, - 0xA67D: 84, - 0xA69E: 84, - 0xA69F: 84, - 0xA6F0: 84, - 0xA6F1: 84, - 0xA802: 84, - 0xA806: 84, - 0xA80B: 84, - 0xA825: 84, - 0xA826: 84, - 0xA82C: 84, - 0xA840: 68, - 0xA841: 68, - 0xA842: 68, - 0xA843: 68, - 0xA844: 68, - 0xA845: 68, - 0xA846: 68, - 0xA847: 68, - 0xA848: 68, - 0xA849: 68, - 0xA84A: 68, - 0xA84B: 68, - 0xA84C: 68, - 0xA84D: 68, - 0xA84E: 68, - 0xA84F: 68, - 0xA850: 68, - 0xA851: 68, - 0xA852: 68, - 0xA853: 68, - 0xA854: 68, - 0xA855: 68, - 0xA856: 68, - 0xA857: 68, - 0xA858: 68, - 0xA859: 68, - 0xA85A: 68, - 0xA85B: 68, - 0xA85C: 68, - 0xA85D: 68, - 0xA85E: 68, - 0xA85F: 68, - 0xA860: 68, - 0xA861: 68, - 0xA862: 68, - 0xA863: 68, - 0xA864: 68, - 0xA865: 68, - 0xA866: 68, - 0xA867: 68, - 0xA868: 68, - 0xA869: 68, - 0xA86A: 68, - 0xA86B: 68, - 0xA86C: 68, - 0xA86D: 68, - 0xA86E: 68, - 0xA86F: 68, - 0xA870: 68, - 0xA871: 68, - 0xA872: 76, - 0xA8C4: 84, - 0xA8C5: 84, - 0xA8E0: 84, - 0xA8E1: 84, - 0xA8E2: 84, - 0xA8E3: 84, - 0xA8E4: 84, - 0xA8E5: 84, - 0xA8E6: 84, - 0xA8E7: 84, - 0xA8E8: 84, - 0xA8E9: 84, - 0xA8EA: 84, - 0xA8EB: 84, - 0xA8EC: 84, - 0xA8ED: 84, - 0xA8EE: 84, - 0xA8EF: 84, - 0xA8F0: 84, - 0xA8F1: 84, - 0xA8FF: 84, - 0xA926: 84, - 0xA927: 84, - 0xA928: 84, - 0xA929: 84, - 0xA92A: 84, - 0xA92B: 84, - 0xA92C: 84, - 0xA92D: 84, - 0xA947: 84, - 0xA948: 84, - 0xA949: 84, - 0xA94A: 84, - 0xA94B: 84, - 0xA94C: 84, - 0xA94D: 84, - 0xA94E: 84, - 0xA94F: 84, - 0xA950: 84, - 0xA951: 84, - 0xA980: 84, - 0xA981: 84, - 0xA982: 84, - 0xA9B3: 84, - 0xA9B6: 84, - 0xA9B7: 84, - 0xA9B8: 84, - 0xA9B9: 84, - 0xA9BC: 84, - 0xA9BD: 84, - 0xA9E5: 84, - 0xAA29: 84, - 0xAA2A: 84, - 0xAA2B: 84, - 0xAA2C: 84, - 0xAA2D: 84, - 0xAA2E: 84, - 0xAA31: 84, - 0xAA32: 84, - 0xAA35: 84, - 0xAA36: 84, - 0xAA43: 84, - 0xAA4C: 84, - 0xAA7C: 84, - 0xAAB0: 84, - 0xAAB2: 84, - 0xAAB3: 84, - 0xAAB4: 84, - 0xAAB7: 84, - 0xAAB8: 84, - 0xAABE: 84, - 0xAABF: 84, - 0xAAC1: 84, - 0xAAEC: 84, - 0xAAED: 84, - 0xAAF6: 84, - 0xABE5: 84, - 0xABE8: 84, - 0xABED: 84, - 0xFB1E: 84, - 0xFE00: 84, - 0xFE01: 84, - 0xFE02: 84, - 0xFE03: 84, - 0xFE04: 84, - 0xFE05: 84, - 0xFE06: 84, - 0xFE07: 84, - 0xFE08: 84, - 0xFE09: 84, - 0xFE0A: 84, - 0xFE0B: 84, - 0xFE0C: 84, - 0xFE0D: 84, - 0xFE0E: 84, - 0xFE0F: 84, - 0xFE20: 84, - 0xFE21: 84, - 0xFE22: 84, - 0xFE23: 84, - 0xFE24: 84, - 0xFE25: 84, - 0xFE26: 84, - 0xFE27: 84, - 0xFE28: 84, - 0xFE29: 84, - 0xFE2A: 84, - 0xFE2B: 84, - 0xFE2C: 84, - 0xFE2D: 84, - 0xFE2E: 84, - 0xFE2F: 84, - 0xFEFF: 84, - 0xFFF9: 84, - 0xFFFA: 84, - 0xFFFB: 84, - 0x101FD: 84, - 0x102E0: 84, - 0x10376: 84, - 0x10377: 84, - 0x10378: 84, - 0x10379: 84, - 0x1037A: 84, - 0x10A01: 84, - 0x10A02: 84, - 0x10A03: 84, - 0x10A05: 84, - 0x10A06: 84, - 0x10A0C: 84, - 0x10A0D: 84, - 0x10A0E: 84, - 0x10A0F: 84, - 0x10A38: 84, - 0x10A39: 84, - 0x10A3A: 84, - 0x10A3F: 84, - 0x10AC0: 68, - 0x10AC1: 68, - 0x10AC2: 68, - 0x10AC3: 68, - 0x10AC4: 68, - 0x10AC5: 82, - 0x10AC7: 82, - 0x10AC9: 82, - 0x10ACA: 82, - 0x10ACD: 76, - 0x10ACE: 82, - 0x10ACF: 82, - 0x10AD0: 82, - 0x10AD1: 82, - 0x10AD2: 82, - 0x10AD3: 68, - 0x10AD4: 68, - 0x10AD5: 68, - 0x10AD6: 68, - 0x10AD7: 76, - 0x10AD8: 68, - 0x10AD9: 68, - 0x10ADA: 68, - 0x10ADB: 68, - 0x10ADC: 68, - 0x10ADD: 82, - 0x10ADE: 68, - 0x10ADF: 68, - 0x10AE0: 68, - 0x10AE1: 82, - 0x10AE4: 82, - 0x10AE5: 84, - 0x10AE6: 84, - 0x10AEB: 68, - 0x10AEC: 68, - 0x10AED: 68, - 0x10AEE: 68, - 0x10AEF: 82, - 0x10B80: 68, - 0x10B81: 82, - 0x10B82: 68, - 0x10B83: 82, - 0x10B84: 82, - 0x10B85: 82, - 0x10B86: 68, - 0x10B87: 68, - 0x10B88: 68, - 0x10B89: 82, - 0x10B8A: 68, - 0x10B8B: 68, - 0x10B8C: 82, - 0x10B8D: 68, - 0x10B8E: 82, - 0x10B8F: 82, - 0x10B90: 68, - 0x10B91: 82, - 0x10BA9: 82, - 0x10BAA: 82, - 0x10BAB: 82, - 0x10BAC: 82, - 0x10BAD: 68, - 0x10BAE: 68, - 0x10D00: 76, - 0x10D01: 68, - 0x10D02: 68, - 0x10D03: 68, - 0x10D04: 68, - 0x10D05: 68, - 0x10D06: 68, - 0x10D07: 68, - 0x10D08: 68, - 0x10D09: 68, - 0x10D0A: 68, - 0x10D0B: 68, - 0x10D0C: 68, - 0x10D0D: 68, - 0x10D0E: 68, - 0x10D0F: 68, - 0x10D10: 68, - 0x10D11: 68, - 0x10D12: 68, - 0x10D13: 68, - 0x10D14: 68, - 0x10D15: 68, - 0x10D16: 68, - 0x10D17: 68, - 0x10D18: 68, - 0x10D19: 68, - 0x10D1A: 68, - 0x10D1B: 68, - 0x10D1C: 68, - 0x10D1D: 68, - 0x10D1E: 68, - 0x10D1F: 68, - 0x10D20: 68, - 0x10D21: 68, - 0x10D22: 82, - 0x10D23: 68, - 0x10D24: 84, - 0x10D25: 84, - 0x10D26: 84, - 0x10D27: 84, - 0x10D69: 84, - 0x10D6A: 84, - 0x10D6B: 84, - 0x10D6C: 84, - 0x10D6D: 84, - 0x10EAB: 84, - 0x10EAC: 84, - 0x10EC2: 82, - 0x10EC3: 68, - 0x10EC4: 68, - 0x10EFC: 84, - 0x10EFD: 84, - 0x10EFE: 84, - 0x10EFF: 84, - 0x10F30: 68, - 0x10F31: 68, - 0x10F32: 68, - 0x10F33: 82, - 0x10F34: 68, - 0x10F35: 68, - 0x10F36: 68, - 0x10F37: 68, - 0x10F38: 68, - 0x10F39: 68, - 0x10F3A: 68, - 0x10F3B: 68, - 0x10F3C: 68, - 0x10F3D: 68, - 0x10F3E: 68, - 0x10F3F: 68, - 0x10F40: 68, - 0x10F41: 68, - 0x10F42: 68, - 0x10F43: 68, - 0x10F44: 68, - 0x10F46: 84, - 0x10F47: 84, - 0x10F48: 84, - 0x10F49: 84, - 0x10F4A: 84, - 0x10F4B: 84, - 0x10F4C: 84, - 0x10F4D: 84, - 0x10F4E: 84, - 0x10F4F: 84, - 0x10F50: 84, - 0x10F51: 68, - 0x10F52: 68, - 0x10F53: 68, - 0x10F54: 82, - 0x10F70: 68, - 0x10F71: 68, - 0x10F72: 68, - 0x10F73: 68, - 0x10F74: 82, - 0x10F75: 82, - 0x10F76: 68, - 0x10F77: 68, - 0x10F78: 68, - 0x10F79: 68, - 0x10F7A: 68, - 0x10F7B: 68, - 0x10F7C: 68, - 0x10F7D: 68, - 0x10F7E: 68, - 0x10F7F: 68, - 0x10F80: 68, - 0x10F81: 68, - 0x10F82: 84, - 0x10F83: 84, - 0x10F84: 84, - 0x10F85: 84, - 0x10FB0: 68, - 0x10FB2: 68, - 0x10FB3: 68, - 0x10FB4: 82, - 0x10FB5: 82, - 0x10FB6: 82, - 0x10FB8: 68, - 0x10FB9: 82, - 0x10FBA: 82, - 0x10FBB: 68, - 0x10FBC: 68, - 0x10FBD: 82, - 0x10FBE: 68, - 0x10FBF: 68, - 0x10FC1: 68, - 0x10FC2: 82, - 0x10FC3: 82, - 0x10FC4: 68, - 0x10FC9: 82, - 0x10FCA: 68, - 0x10FCB: 76, - 0x11001: 84, - 0x11038: 84, - 0x11039: 84, - 0x1103A: 84, - 0x1103B: 84, - 0x1103C: 84, - 0x1103D: 84, - 0x1103E: 84, - 0x1103F: 84, - 0x11040: 84, - 0x11041: 84, - 0x11042: 84, - 0x11043: 84, - 0x11044: 84, - 0x11045: 84, - 0x11046: 84, - 0x11070: 84, - 0x11073: 84, - 0x11074: 84, - 0x1107F: 84, - 0x11080: 84, - 0x11081: 84, - 0x110B3: 84, - 0x110B4: 84, - 0x110B5: 84, - 0x110B6: 84, - 0x110B9: 84, - 0x110BA: 84, - 0x110C2: 84, - 0x11100: 84, - 0x11101: 84, - 0x11102: 84, - 0x11127: 84, - 0x11128: 84, - 0x11129: 84, - 0x1112A: 84, - 0x1112B: 84, - 0x1112D: 84, - 0x1112E: 84, - 0x1112F: 84, - 0x11130: 84, - 0x11131: 84, - 0x11132: 84, - 0x11133: 84, - 0x11134: 84, - 0x11173: 84, - 0x11180: 84, - 0x11181: 84, - 0x111B6: 84, - 0x111B7: 84, - 0x111B8: 84, - 0x111B9: 84, - 0x111BA: 84, - 0x111BB: 84, - 0x111BC: 84, - 0x111BD: 84, - 0x111BE: 84, - 0x111C9: 84, - 0x111CA: 84, - 0x111CB: 84, - 0x111CC: 84, - 0x111CF: 84, - 0x1122F: 84, - 0x11230: 84, - 0x11231: 84, - 0x11234: 84, - 0x11236: 84, - 0x11237: 84, - 0x1123E: 84, - 0x11241: 84, - 0x112DF: 84, - 0x112E3: 84, - 0x112E4: 84, - 0x112E5: 84, - 0x112E6: 84, - 0x112E7: 84, - 0x112E8: 84, - 0x112E9: 84, - 0x112EA: 84, - 0x11300: 84, - 0x11301: 84, - 0x1133B: 84, - 0x1133C: 84, - 0x11340: 84, - 0x11366: 84, - 0x11367: 84, - 0x11368: 84, - 0x11369: 84, - 0x1136A: 84, - 0x1136B: 84, - 0x1136C: 84, - 0x11370: 84, - 0x11371: 84, - 0x11372: 84, - 0x11373: 84, - 0x11374: 84, - 0x113BB: 84, - 0x113BC: 84, - 0x113BD: 84, - 0x113BE: 84, - 0x113BF: 84, - 0x113C0: 84, - 0x113CE: 84, - 0x113D0: 84, - 0x113D2: 84, - 0x113E1: 84, - 0x113E2: 84, - 0x11438: 84, - 0x11439: 84, - 0x1143A: 84, - 0x1143B: 84, - 0x1143C: 84, - 0x1143D: 84, - 0x1143E: 84, - 0x1143F: 84, - 0x11442: 84, - 0x11443: 84, - 0x11444: 84, - 0x11446: 84, - 0x1145E: 84, - 0x114B3: 84, - 0x114B4: 84, - 0x114B5: 84, - 0x114B6: 84, - 0x114B7: 84, - 0x114B8: 84, - 0x114BA: 84, - 0x114BF: 84, - 0x114C0: 84, - 0x114C2: 84, - 0x114C3: 84, - 0x115B2: 84, - 0x115B3: 84, - 0x115B4: 84, - 0x115B5: 84, - 0x115BC: 84, - 0x115BD: 84, - 0x115BF: 84, - 0x115C0: 84, - 0x115DC: 84, - 0x115DD: 84, - 0x11633: 84, - 0x11634: 84, - 0x11635: 84, - 0x11636: 84, - 0x11637: 84, - 0x11638: 84, - 0x11639: 84, - 0x1163A: 84, - 0x1163D: 84, - 0x1163F: 84, - 0x11640: 84, - 0x116AB: 84, - 0x116AD: 84, - 0x116B0: 84, - 0x116B1: 84, - 0x116B2: 84, - 0x116B3: 84, - 0x116B4: 84, - 0x116B5: 84, - 0x116B7: 84, - 0x1171D: 84, - 0x1171F: 84, - 0x11722: 84, - 0x11723: 84, - 0x11724: 84, - 0x11725: 84, - 0x11727: 84, - 0x11728: 84, - 0x11729: 84, - 0x1172A: 84, - 0x1172B: 84, - 0x1182F: 84, - 0x11830: 84, - 0x11831: 84, - 0x11832: 84, - 0x11833: 84, - 0x11834: 84, - 0x11835: 84, - 0x11836: 84, - 0x11837: 84, - 0x11839: 84, - 0x1183A: 84, - 0x1193B: 84, - 0x1193C: 84, - 0x1193E: 84, - 0x11943: 84, - 0x119D4: 84, - 0x119D5: 84, - 0x119D6: 84, - 0x119D7: 84, - 0x119DA: 84, - 0x119DB: 84, - 0x119E0: 84, - 0x11A01: 84, - 0x11A02: 84, - 0x11A03: 84, - 0x11A04: 84, - 0x11A05: 84, - 0x11A06: 84, - 0x11A07: 84, - 0x11A08: 84, - 0x11A09: 84, - 0x11A0A: 84, - 0x11A33: 84, - 0x11A34: 84, - 0x11A35: 84, - 0x11A36: 84, - 0x11A37: 84, - 0x11A38: 84, - 0x11A3B: 84, - 0x11A3C: 84, - 0x11A3D: 84, - 0x11A3E: 84, - 0x11A47: 84, - 0x11A51: 84, - 0x11A52: 84, - 0x11A53: 84, - 0x11A54: 84, - 0x11A55: 84, - 0x11A56: 84, - 0x11A59: 84, - 0x11A5A: 84, - 0x11A5B: 84, - 0x11A8A: 84, - 0x11A8B: 84, - 0x11A8C: 84, - 0x11A8D: 84, - 0x11A8E: 84, - 0x11A8F: 84, - 0x11A90: 84, - 0x11A91: 84, - 0x11A92: 84, - 0x11A93: 84, - 0x11A94: 84, - 0x11A95: 84, - 0x11A96: 84, - 0x11A98: 84, - 0x11A99: 84, - 0x11C30: 84, - 0x11C31: 84, - 0x11C32: 84, - 0x11C33: 84, - 0x11C34: 84, - 0x11C35: 84, - 0x11C36: 84, - 0x11C38: 84, - 0x11C39: 84, - 0x11C3A: 84, - 0x11C3B: 84, - 0x11C3C: 84, - 0x11C3D: 84, - 0x11C3F: 84, - 0x11C92: 84, - 0x11C93: 84, - 0x11C94: 84, - 0x11C95: 84, - 0x11C96: 84, - 0x11C97: 84, - 0x11C98: 84, - 0x11C99: 84, - 0x11C9A: 84, - 0x11C9B: 84, - 0x11C9C: 84, - 0x11C9D: 84, - 0x11C9E: 84, - 0x11C9F: 84, - 0x11CA0: 84, - 0x11CA1: 84, - 0x11CA2: 84, - 0x11CA3: 84, - 0x11CA4: 84, - 0x11CA5: 84, - 0x11CA6: 84, - 0x11CA7: 84, - 0x11CAA: 84, - 0x11CAB: 84, - 0x11CAC: 84, - 0x11CAD: 84, - 0x11CAE: 84, - 0x11CAF: 84, - 0x11CB0: 84, - 0x11CB2: 84, - 0x11CB3: 84, - 0x11CB5: 84, - 0x11CB6: 84, - 0x11D31: 84, - 0x11D32: 84, - 0x11D33: 84, - 0x11D34: 84, - 0x11D35: 84, - 0x11D36: 84, - 0x11D3A: 84, - 0x11D3C: 84, - 0x11D3D: 84, - 0x11D3F: 84, - 0x11D40: 84, - 0x11D41: 84, - 0x11D42: 84, - 0x11D43: 84, - 0x11D44: 84, - 0x11D45: 84, - 0x11D47: 84, - 0x11D90: 84, - 0x11D91: 84, - 0x11D95: 84, - 0x11D97: 84, - 0x11EF3: 84, - 0x11EF4: 84, - 0x11F00: 84, - 0x11F01: 84, - 0x11F36: 84, - 0x11F37: 84, - 0x11F38: 84, - 0x11F39: 84, - 0x11F3A: 84, - 0x11F40: 84, - 0x11F42: 84, - 0x11F5A: 84, - 0x13430: 84, - 0x13431: 84, - 0x13432: 84, - 0x13433: 84, - 0x13434: 84, - 0x13435: 84, - 0x13436: 84, - 0x13437: 84, - 0x13438: 84, - 0x13439: 84, - 0x1343A: 84, - 0x1343B: 84, - 0x1343C: 84, - 0x1343D: 84, - 0x1343E: 84, - 0x1343F: 84, - 0x13440: 84, - 0x13447: 84, - 0x13448: 84, - 0x13449: 84, - 0x1344A: 84, - 0x1344B: 84, - 0x1344C: 84, - 0x1344D: 84, - 0x1344E: 84, - 0x1344F: 84, - 0x13450: 84, - 0x13451: 84, - 0x13452: 84, - 0x13453: 84, - 0x13454: 84, - 0x13455: 84, - 0x1611E: 84, - 0x1611F: 84, - 0x16120: 84, - 0x16121: 84, - 0x16122: 84, - 0x16123: 84, - 0x16124: 84, - 0x16125: 84, - 0x16126: 84, - 0x16127: 84, - 0x16128: 84, - 0x16129: 84, - 0x1612D: 84, - 0x1612E: 84, - 0x1612F: 84, - 0x16AF0: 84, - 0x16AF1: 84, - 0x16AF2: 84, - 0x16AF3: 84, - 0x16AF4: 84, - 0x16B30: 84, - 0x16B31: 84, - 0x16B32: 84, - 0x16B33: 84, - 0x16B34: 84, - 0x16B35: 84, - 0x16B36: 84, - 0x16F4F: 84, - 0x16F8F: 84, - 0x16F90: 84, - 0x16F91: 84, - 0x16F92: 84, - 0x16FE4: 84, - 0x1BC9D: 84, - 0x1BC9E: 84, - 0x1BCA0: 84, - 0x1BCA1: 84, - 0x1BCA2: 84, - 0x1BCA3: 84, - 0x1CF00: 84, - 0x1CF01: 84, - 0x1CF02: 84, - 0x1CF03: 84, - 0x1CF04: 84, - 0x1CF05: 84, - 0x1CF06: 84, - 0x1CF07: 84, - 0x1CF08: 84, - 0x1CF09: 84, - 0x1CF0A: 84, - 0x1CF0B: 84, - 0x1CF0C: 84, - 0x1CF0D: 84, - 0x1CF0E: 84, - 0x1CF0F: 84, - 0x1CF10: 84, - 0x1CF11: 84, - 0x1CF12: 84, - 0x1CF13: 84, - 0x1CF14: 84, - 0x1CF15: 84, - 0x1CF16: 84, - 0x1CF17: 84, - 0x1CF18: 84, - 0x1CF19: 84, - 0x1CF1A: 84, - 0x1CF1B: 84, - 0x1CF1C: 84, - 0x1CF1D: 84, - 0x1CF1E: 84, - 0x1CF1F: 84, - 0x1CF20: 84, - 0x1CF21: 84, - 0x1CF22: 84, - 0x1CF23: 84, - 0x1CF24: 84, - 0x1CF25: 84, - 0x1CF26: 84, - 0x1CF27: 84, - 0x1CF28: 84, - 0x1CF29: 84, - 0x1CF2A: 84, - 0x1CF2B: 84, - 0x1CF2C: 84, - 0x1CF2D: 84, - 0x1CF30: 84, - 0x1CF31: 84, - 0x1CF32: 84, - 0x1CF33: 84, - 0x1CF34: 84, - 0x1CF35: 84, - 0x1CF36: 84, - 0x1CF37: 84, - 0x1CF38: 84, - 0x1CF39: 84, - 0x1CF3A: 84, - 0x1CF3B: 84, - 0x1CF3C: 84, - 0x1CF3D: 84, - 0x1CF3E: 84, - 0x1CF3F: 84, - 0x1CF40: 84, - 0x1CF41: 84, - 0x1CF42: 84, - 0x1CF43: 84, - 0x1CF44: 84, - 0x1CF45: 84, - 0x1CF46: 84, - 0x1D167: 84, - 0x1D168: 84, - 0x1D169: 84, - 0x1D173: 84, - 0x1D174: 84, - 0x1D175: 84, - 0x1D176: 84, - 0x1D177: 84, - 0x1D178: 84, - 0x1D179: 84, - 0x1D17A: 84, - 0x1D17B: 84, - 0x1D17C: 84, - 0x1D17D: 84, - 0x1D17E: 84, - 0x1D17F: 84, - 0x1D180: 84, - 0x1D181: 84, - 0x1D182: 84, - 0x1D185: 84, - 0x1D186: 84, - 0x1D187: 84, - 0x1D188: 84, - 0x1D189: 84, - 0x1D18A: 84, - 0x1D18B: 84, - 0x1D1AA: 84, - 0x1D1AB: 84, - 0x1D1AC: 84, - 0x1D1AD: 84, - 0x1D242: 84, - 0x1D243: 84, - 0x1D244: 84, - 0x1DA00: 84, - 0x1DA01: 84, - 0x1DA02: 84, - 0x1DA03: 84, - 0x1DA04: 84, - 0x1DA05: 84, - 0x1DA06: 84, - 0x1DA07: 84, - 0x1DA08: 84, - 0x1DA09: 84, - 0x1DA0A: 84, - 0x1DA0B: 84, - 0x1DA0C: 84, - 0x1DA0D: 84, - 0x1DA0E: 84, - 0x1DA0F: 84, - 0x1DA10: 84, - 0x1DA11: 84, - 0x1DA12: 84, - 0x1DA13: 84, - 0x1DA14: 84, - 0x1DA15: 84, - 0x1DA16: 84, - 0x1DA17: 84, - 0x1DA18: 84, - 0x1DA19: 84, - 0x1DA1A: 84, - 0x1DA1B: 84, - 0x1DA1C: 84, - 0x1DA1D: 84, - 0x1DA1E: 84, - 0x1DA1F: 84, - 0x1DA20: 84, - 0x1DA21: 84, - 0x1DA22: 84, - 0x1DA23: 84, - 0x1DA24: 84, - 0x1DA25: 84, - 0x1DA26: 84, - 0x1DA27: 84, - 0x1DA28: 84, - 0x1DA29: 84, - 0x1DA2A: 84, - 0x1DA2B: 84, - 0x1DA2C: 84, - 0x1DA2D: 84, - 0x1DA2E: 84, - 0x1DA2F: 84, - 0x1DA30: 84, - 0x1DA31: 84, - 0x1DA32: 84, - 0x1DA33: 84, - 0x1DA34: 84, - 0x1DA35: 84, - 0x1DA36: 84, - 0x1DA3B: 84, - 0x1DA3C: 84, - 0x1DA3D: 84, - 0x1DA3E: 84, - 0x1DA3F: 84, - 0x1DA40: 84, - 0x1DA41: 84, - 0x1DA42: 84, - 0x1DA43: 84, - 0x1DA44: 84, - 0x1DA45: 84, - 0x1DA46: 84, - 0x1DA47: 84, - 0x1DA48: 84, - 0x1DA49: 84, - 0x1DA4A: 84, - 0x1DA4B: 84, - 0x1DA4C: 84, - 0x1DA4D: 84, - 0x1DA4E: 84, - 0x1DA4F: 84, - 0x1DA50: 84, - 0x1DA51: 84, - 0x1DA52: 84, - 0x1DA53: 84, - 0x1DA54: 84, - 0x1DA55: 84, - 0x1DA56: 84, - 0x1DA57: 84, - 0x1DA58: 84, - 0x1DA59: 84, - 0x1DA5A: 84, - 0x1DA5B: 84, - 0x1DA5C: 84, - 0x1DA5D: 84, - 0x1DA5E: 84, - 0x1DA5F: 84, - 0x1DA60: 84, - 0x1DA61: 84, - 0x1DA62: 84, - 0x1DA63: 84, - 0x1DA64: 84, - 0x1DA65: 84, - 0x1DA66: 84, - 0x1DA67: 84, - 0x1DA68: 84, - 0x1DA69: 84, - 0x1DA6A: 84, - 0x1DA6B: 84, - 0x1DA6C: 84, - 0x1DA75: 84, - 0x1DA84: 84, - 0x1DA9B: 84, - 0x1DA9C: 84, - 0x1DA9D: 84, - 0x1DA9E: 84, - 0x1DA9F: 84, - 0x1DAA1: 84, - 0x1DAA2: 84, - 0x1DAA3: 84, - 0x1DAA4: 84, - 0x1DAA5: 84, - 0x1DAA6: 84, - 0x1DAA7: 84, - 0x1DAA8: 84, - 0x1DAA9: 84, - 0x1DAAA: 84, - 0x1DAAB: 84, - 0x1DAAC: 84, - 0x1DAAD: 84, - 0x1DAAE: 84, - 0x1DAAF: 84, - 0x1E000: 84, - 0x1E001: 84, - 0x1E002: 84, - 0x1E003: 84, - 0x1E004: 84, - 0x1E005: 84, - 0x1E006: 84, - 0x1E008: 84, - 0x1E009: 84, - 0x1E00A: 84, - 0x1E00B: 84, - 0x1E00C: 84, - 0x1E00D: 84, - 0x1E00E: 84, - 0x1E00F: 84, - 0x1E010: 84, - 0x1E011: 84, - 0x1E012: 84, - 0x1E013: 84, - 0x1E014: 84, - 0x1E015: 84, - 0x1E016: 84, - 0x1E017: 84, - 0x1E018: 84, - 0x1E01B: 84, - 0x1E01C: 84, - 0x1E01D: 84, - 0x1E01E: 84, - 0x1E01F: 84, - 0x1E020: 84, - 0x1E021: 84, - 0x1E023: 84, - 0x1E024: 84, - 0x1E026: 84, - 0x1E027: 84, - 0x1E028: 84, - 0x1E029: 84, - 0x1E02A: 84, - 0x1E08F: 84, - 0x1E130: 84, - 0x1E131: 84, - 0x1E132: 84, - 0x1E133: 84, - 0x1E134: 84, - 0x1E135: 84, - 0x1E136: 84, - 0x1E2AE: 84, - 0x1E2EC: 84, - 0x1E2ED: 84, - 0x1E2EE: 84, - 0x1E2EF: 84, - 0x1E4EC: 84, - 0x1E4ED: 84, - 0x1E4EE: 84, - 0x1E4EF: 84, - 0x1E5EE: 84, - 0x1E5EF: 84, - 0x1E8D0: 84, - 0x1E8D1: 84, - 0x1E8D2: 84, - 0x1E8D3: 84, - 0x1E8D4: 84, - 0x1E8D5: 84, - 0x1E8D6: 84, - 0x1E900: 68, - 0x1E901: 68, - 0x1E902: 68, - 0x1E903: 68, - 0x1E904: 68, - 0x1E905: 68, - 0x1E906: 68, - 0x1E907: 68, - 0x1E908: 68, - 0x1E909: 68, - 0x1E90A: 68, - 0x1E90B: 68, - 0x1E90C: 68, - 0x1E90D: 68, - 0x1E90E: 68, - 0x1E90F: 68, - 0x1E910: 68, - 0x1E911: 68, - 0x1E912: 68, - 0x1E913: 68, - 0x1E914: 68, - 0x1E915: 68, - 0x1E916: 68, - 0x1E917: 68, - 0x1E918: 68, - 0x1E919: 68, - 0x1E91A: 68, - 0x1E91B: 68, - 0x1E91C: 68, - 0x1E91D: 68, - 0x1E91E: 68, - 0x1E91F: 68, - 0x1E920: 68, - 0x1E921: 68, - 0x1E922: 68, - 0x1E923: 68, - 0x1E924: 68, - 0x1E925: 68, - 0x1E926: 68, - 0x1E927: 68, - 0x1E928: 68, - 0x1E929: 68, - 0x1E92A: 68, - 0x1E92B: 68, - 0x1E92C: 68, - 0x1E92D: 68, - 0x1E92E: 68, - 0x1E92F: 68, - 0x1E930: 68, - 0x1E931: 68, - 0x1E932: 68, - 0x1E933: 68, - 0x1E934: 68, - 0x1E935: 68, - 0x1E936: 68, - 0x1E937: 68, - 0x1E938: 68, - 0x1E939: 68, - 0x1E93A: 68, - 0x1E93B: 68, - 0x1E93C: 68, - 0x1E93D: 68, - 0x1E93E: 68, - 0x1E93F: 68, - 0x1E940: 68, - 0x1E941: 68, - 0x1E942: 68, - 0x1E943: 68, - 0x1E944: 84, - 0x1E945: 84, - 0x1E946: 84, - 0x1E947: 84, - 0x1E948: 84, - 0x1E949: 84, - 0x1E94A: 84, - 0x1E94B: 84, - 0xE0001: 84, - 0xE0020: 84, - 0xE0021: 84, - 0xE0022: 84, - 0xE0023: 84, - 0xE0024: 84, - 0xE0025: 84, - 0xE0026: 84, - 0xE0027: 84, - 0xE0028: 84, - 0xE0029: 84, - 0xE002A: 84, - 0xE002B: 84, - 0xE002C: 84, - 0xE002D: 84, - 0xE002E: 84, - 0xE002F: 84, - 0xE0030: 84, - 0xE0031: 84, - 0xE0032: 84, - 0xE0033: 84, - 0xE0034: 84, - 0xE0035: 84, - 0xE0036: 84, - 0xE0037: 84, - 0xE0038: 84, - 0xE0039: 84, - 0xE003A: 84, - 0xE003B: 84, - 0xE003C: 84, - 0xE003D: 84, - 0xE003E: 84, - 0xE003F: 84, - 0xE0040: 84, - 0xE0041: 84, - 0xE0042: 84, - 0xE0043: 84, - 0xE0044: 84, - 0xE0045: 84, - 0xE0046: 84, - 0xE0047: 84, - 0xE0048: 84, - 0xE0049: 84, - 0xE004A: 84, - 0xE004B: 84, - 0xE004C: 84, - 0xE004D: 84, - 0xE004E: 84, - 0xE004F: 84, - 0xE0050: 84, - 0xE0051: 84, - 0xE0052: 84, - 0xE0053: 84, - 0xE0054: 84, - 0xE0055: 84, - 0xE0056: 84, - 0xE0057: 84, - 0xE0058: 84, - 0xE0059: 84, - 0xE005A: 84, - 0xE005B: 84, - 0xE005C: 84, - 0xE005D: 84, - 0xE005E: 84, - 0xE005F: 84, - 0xE0060: 84, - 0xE0061: 84, - 0xE0062: 84, - 0xE0063: 84, - 0xE0064: 84, - 0xE0065: 84, - 0xE0066: 84, - 0xE0067: 84, - 0xE0068: 84, - 0xE0069: 84, - 0xE006A: 84, - 0xE006B: 84, - 0xE006C: 84, - 0xE006D: 84, - 0xE006E: 84, - 0xE006F: 84, - 0xE0070: 84, - 0xE0071: 84, - 0xE0072: 84, - 0xE0073: 84, - 0xE0074: 84, - 0xE0075: 84, - 0xE0076: 84, - 0xE0077: 84, - 0xE0078: 84, - 0xE0079: 84, - 0xE007A: 84, - 0xE007B: 84, - 0xE007C: 84, - 0xE007D: 84, - 0xE007E: 84, - 0xE007F: 84, - 0xE0100: 84, - 0xE0101: 84, - 0xE0102: 84, - 0xE0103: 84, - 0xE0104: 84, - 0xE0105: 84, - 0xE0106: 84, - 0xE0107: 84, - 0xE0108: 84, - 0xE0109: 84, - 0xE010A: 84, - 0xE010B: 84, - 0xE010C: 84, - 0xE010D: 84, - 0xE010E: 84, - 0xE010F: 84, - 0xE0110: 84, - 0xE0111: 84, - 0xE0112: 84, - 0xE0113: 84, - 0xE0114: 84, - 0xE0115: 84, - 0xE0116: 84, - 0xE0117: 84, - 0xE0118: 84, - 0xE0119: 84, - 0xE011A: 84, - 0xE011B: 84, - 0xE011C: 84, - 0xE011D: 84, - 0xE011E: 84, - 0xE011F: 84, - 0xE0120: 84, - 0xE0121: 84, - 0xE0122: 84, - 0xE0123: 84, - 0xE0124: 84, - 0xE0125: 84, - 0xE0126: 84, - 0xE0127: 84, - 0xE0128: 84, - 0xE0129: 84, - 0xE012A: 84, - 0xE012B: 84, - 0xE012C: 84, - 0xE012D: 84, - 0xE012E: 84, - 0xE012F: 84, - 0xE0130: 84, - 0xE0131: 84, - 0xE0132: 84, - 0xE0133: 84, - 0xE0134: 84, - 0xE0135: 84, - 0xE0136: 84, - 0xE0137: 84, - 0xE0138: 84, - 0xE0139: 84, - 0xE013A: 84, - 0xE013B: 84, - 0xE013C: 84, - 0xE013D: 84, - 0xE013E: 84, - 0xE013F: 84, - 0xE0140: 84, - 0xE0141: 84, - 0xE0142: 84, - 0xE0143: 84, - 0xE0144: 84, - 0xE0145: 84, - 0xE0146: 84, - 0xE0147: 84, - 0xE0148: 84, - 0xE0149: 84, - 0xE014A: 84, - 0xE014B: 84, - 0xE014C: 84, - 0xE014D: 84, - 0xE014E: 84, - 0xE014F: 84, - 0xE0150: 84, - 0xE0151: 84, - 0xE0152: 84, - 0xE0153: 84, - 0xE0154: 84, - 0xE0155: 84, - 0xE0156: 84, - 0xE0157: 84, - 0xE0158: 84, - 0xE0159: 84, - 0xE015A: 84, - 0xE015B: 84, - 0xE015C: 84, - 0xE015D: 84, - 0xE015E: 84, - 0xE015F: 84, - 0xE0160: 84, - 0xE0161: 84, - 0xE0162: 84, - 0xE0163: 84, - 0xE0164: 84, - 0xE0165: 84, - 0xE0166: 84, - 0xE0167: 84, - 0xE0168: 84, - 0xE0169: 84, - 0xE016A: 84, - 0xE016B: 84, - 0xE016C: 84, - 0xE016D: 84, - 0xE016E: 84, - 0xE016F: 84, - 0xE0170: 84, - 0xE0171: 84, - 0xE0172: 84, - 0xE0173: 84, - 0xE0174: 84, - 0xE0175: 84, - 0xE0176: 84, - 0xE0177: 84, - 0xE0178: 84, - 0xE0179: 84, - 0xE017A: 84, - 0xE017B: 84, - 0xE017C: 84, - 0xE017D: 84, - 0xE017E: 84, - 0xE017F: 84, - 0xE0180: 84, - 0xE0181: 84, - 0xE0182: 84, - 0xE0183: 84, - 0xE0184: 84, - 0xE0185: 84, - 0xE0186: 84, - 0xE0187: 84, - 0xE0188: 84, - 0xE0189: 84, - 0xE018A: 84, - 0xE018B: 84, - 0xE018C: 84, - 0xE018D: 84, - 0xE018E: 84, - 0xE018F: 84, - 0xE0190: 84, - 0xE0191: 84, - 0xE0192: 84, - 0xE0193: 84, - 0xE0194: 84, - 0xE0195: 84, - 0xE0196: 84, - 0xE0197: 84, - 0xE0198: 84, - 0xE0199: 84, - 0xE019A: 84, - 0xE019B: 84, - 0xE019C: 84, - 0xE019D: 84, - 0xE019E: 84, - 0xE019F: 84, - 0xE01A0: 84, - 0xE01A1: 84, - 0xE01A2: 84, - 0xE01A3: 84, - 0xE01A4: 84, - 0xE01A5: 84, - 0xE01A6: 84, - 0xE01A7: 84, - 0xE01A8: 84, - 0xE01A9: 84, - 0xE01AA: 84, - 0xE01AB: 84, - 0xE01AC: 84, - 0xE01AD: 84, - 0xE01AE: 84, - 0xE01AF: 84, - 0xE01B0: 84, - 0xE01B1: 84, - 0xE01B2: 84, - 0xE01B3: 84, - 0xE01B4: 84, - 0xE01B5: 84, - 0xE01B6: 84, - 0xE01B7: 84, - 0xE01B8: 84, - 0xE01B9: 84, - 0xE01BA: 84, - 0xE01BB: 84, - 0xE01BC: 84, - 0xE01BD: 84, - 0xE01BE: 84, - 0xE01BF: 84, - 0xE01C0: 84, - 0xE01C1: 84, - 0xE01C2: 84, - 0xE01C3: 84, - 0xE01C4: 84, - 0xE01C5: 84, - 0xE01C6: 84, - 0xE01C7: 84, - 0xE01C8: 84, - 0xE01C9: 84, - 0xE01CA: 84, - 0xE01CB: 84, - 0xE01CC: 84, - 0xE01CD: 84, - 0xE01CE: 84, - 0xE01CF: 84, - 0xE01D0: 84, - 0xE01D1: 84, - 0xE01D2: 84, - 0xE01D3: 84, - 0xE01D4: 84, - 0xE01D5: 84, - 0xE01D6: 84, - 0xE01D7: 84, - 0xE01D8: 84, - 0xE01D9: 84, - 0xE01DA: 84, - 0xE01DB: 84, - 0xE01DC: 84, - 0xE01DD: 84, - 0xE01DE: 84, - 0xE01DF: 84, - 0xE01E0: 84, - 0xE01E1: 84, - 0xE01E2: 84, - 0xE01E3: 84, - 0xE01E4: 84, - 0xE01E5: 84, - 0xE01E6: 84, - 0xE01E7: 84, - 0xE01E8: 84, - 0xE01E9: 84, - 0xE01EA: 84, - 0xE01EB: 84, - 0xE01EC: 84, - 0xE01ED: 84, - 0xE01EE: 84, - 0xE01EF: 84, -} -codepoint_classes = { - "PVALID": ( - 0x2D0000002E, - 0x300000003A, - 0x610000007B, - 0xDF000000F7, - 0xF800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010A, - 0x10B0000010C, - 0x10D0000010E, - 0x10F00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011A, - 0x11B0000011C, - 0x11D0000011E, - 0x11F00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012A, - 0x12B0000012C, - 0x12D0000012E, - 0x12F00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13A0000013B, - 0x13C0000013D, - 0x13E0000013F, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14B0000014C, - 0x14D0000014E, - 0x14F00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015A, - 0x15B0000015C, - 0x15D0000015E, - 0x15F00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016A, - 0x16B0000016C, - 0x16D0000016E, - 0x16F00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17A0000017B, - 0x17C0000017D, - 0x17E0000017F, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18C0000018E, - 0x19200000193, - 0x19500000196, - 0x1990000019C, - 0x19E0000019F, - 0x1A1000001A2, - 0x1A3000001A4, - 0x1A5000001A6, - 0x1A8000001A9, - 0x1AA000001AC, - 0x1AD000001AE, - 0x1B0000001B1, - 0x1B4000001B5, - 0x1B6000001B7, - 0x1B9000001BC, - 0x1BD000001C4, - 0x1CE000001CF, - 0x1D0000001D1, - 0x1D2000001D3, - 0x1D4000001D5, - 0x1D6000001D7, - 0x1D8000001D9, - 0x1DA000001DB, - 0x1DC000001DE, - 0x1DF000001E0, - 0x1E1000001E2, - 0x1E3000001E4, - 0x1E5000001E6, - 0x1E7000001E8, - 0x1E9000001EA, - 0x1EB000001EC, - 0x1ED000001EE, - 0x1EF000001F1, - 0x1F5000001F6, - 0x1F9000001FA, - 0x1FB000001FC, - 0x1FD000001FE, - 0x1FF00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020A, - 0x20B0000020C, - 0x20D0000020E, - 0x20F00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021A, - 0x21B0000021C, - 0x21D0000021E, - 0x21F00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022A, - 0x22B0000022C, - 0x22D0000022E, - 0x22F00000230, - 0x23100000232, - 0x2330000023A, - 0x23C0000023D, - 0x23F00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024A, - 0x24B0000024C, - 0x24D0000024E, - 0x24F000002B0, - 0x2B9000002C2, - 0x2C6000002D2, - 0x2EC000002ED, - 0x2EE000002EF, - 0x30000000340, - 0x34200000343, - 0x3460000034F, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37B0000037E, - 0x39000000391, - 0x3AC000003CF, - 0x3D7000003D8, - 0x3D9000003DA, - 0x3DB000003DC, - 0x3DD000003DE, - 0x3DF000003E0, - 0x3E1000003E2, - 0x3E3000003E4, - 0x3E5000003E6, - 0x3E7000003E8, - 0x3E9000003EA, - 0x3EB000003EC, - 0x3ED000003EE, - 0x3EF000003F0, - 0x3F3000003F4, - 0x3F8000003F9, - 0x3FB000003FD, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046A, - 0x46B0000046C, - 0x46D0000046E, - 0x46F00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047A, - 0x47B0000047C, - 0x47D0000047E, - 0x47F00000480, - 0x48100000482, - 0x48300000488, - 0x48B0000048C, - 0x48D0000048E, - 0x48F00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049A, - 0x49B0000049C, - 0x49D0000049E, - 0x49F000004A0, - 0x4A1000004A2, - 0x4A3000004A4, - 0x4A5000004A6, - 0x4A7000004A8, - 0x4A9000004AA, - 0x4AB000004AC, - 0x4AD000004AE, - 0x4AF000004B0, - 0x4B1000004B2, - 0x4B3000004B4, - 0x4B5000004B6, - 0x4B7000004B8, - 0x4B9000004BA, - 0x4BB000004BC, - 0x4BD000004BE, - 0x4BF000004C0, - 0x4C2000004C3, - 0x4C4000004C5, - 0x4C6000004C7, - 0x4C8000004C9, - 0x4CA000004CB, - 0x4CC000004CD, - 0x4CE000004D0, - 0x4D1000004D2, - 0x4D3000004D4, - 0x4D5000004D6, - 0x4D7000004D8, - 0x4D9000004DA, - 0x4DB000004DC, - 0x4DD000004DE, - 0x4DF000004E0, - 0x4E1000004E2, - 0x4E3000004E4, - 0x4E5000004E6, - 0x4E7000004E8, - 0x4E9000004EA, - 0x4EB000004EC, - 0x4ED000004EE, - 0x4EF000004F0, - 0x4F1000004F2, - 0x4F3000004F4, - 0x4F5000004F6, - 0x4F7000004F8, - 0x4F9000004FA, - 0x4FB000004FC, - 0x4FD000004FE, - 0x4FF00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050A, - 0x50B0000050C, - 0x50D0000050E, - 0x50F00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051A, - 0x51B0000051C, - 0x51D0000051E, - 0x51F00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5290000052A, - 0x52B0000052C, - 0x52D0000052E, - 0x52F00000530, - 0x5590000055A, - 0x56000000587, - 0x58800000589, - 0x591000005BE, - 0x5BF000005C0, - 0x5C1000005C3, - 0x5C4000005C6, - 0x5C7000005C8, - 0x5D0000005EB, - 0x5EF000005F3, - 0x6100000061B, - 0x62000000640, - 0x64100000660, - 0x66E00000675, - 0x679000006D4, - 0x6D5000006DD, - 0x6DF000006E9, - 0x6EA000006F0, - 0x6FA00000700, - 0x7100000074B, - 0x74D000007B2, - 0x7C0000007F6, - 0x7FD000007FE, - 0x8000000082E, - 0x8400000085C, - 0x8600000086B, - 0x87000000888, - 0x8890000088F, - 0x897000008E2, - 0x8E300000958, - 0x96000000964, - 0x96600000970, - 0x97100000984, - 0x9850000098D, - 0x98F00000991, - 0x993000009A9, - 0x9AA000009B1, - 0x9B2000009B3, - 0x9B6000009BA, - 0x9BC000009C5, - 0x9C7000009C9, - 0x9CB000009CF, - 0x9D7000009D8, - 0x9E0000009E4, - 0x9E6000009F2, - 0x9FC000009FD, - 0x9FE000009FF, - 0xA0100000A04, - 0xA0500000A0B, - 0xA0F00000A11, - 0xA1300000A29, - 0xA2A00000A31, - 0xA3200000A33, - 0xA3500000A36, - 0xA3800000A3A, - 0xA3C00000A3D, - 0xA3E00000A43, - 0xA4700000A49, - 0xA4B00000A4E, - 0xA5100000A52, - 0xA5C00000A5D, - 0xA6600000A76, - 0xA8100000A84, - 0xA8500000A8E, - 0xA8F00000A92, - 0xA9300000AA9, - 0xAAA00000AB1, - 0xAB200000AB4, - 0xAB500000ABA, - 0xABC00000AC6, - 0xAC700000ACA, - 0xACB00000ACE, - 0xAD000000AD1, - 0xAE000000AE4, - 0xAE600000AF0, - 0xAF900000B00, - 0xB0100000B04, - 0xB0500000B0D, - 0xB0F00000B11, - 0xB1300000B29, - 0xB2A00000B31, - 0xB3200000B34, - 0xB3500000B3A, - 0xB3C00000B45, - 0xB4700000B49, - 0xB4B00000B4E, - 0xB5500000B58, - 0xB5F00000B64, - 0xB6600000B70, - 0xB7100000B72, - 0xB8200000B84, - 0xB8500000B8B, - 0xB8E00000B91, - 0xB9200000B96, - 0xB9900000B9B, - 0xB9C00000B9D, - 0xB9E00000BA0, - 0xBA300000BA5, - 0xBA800000BAB, - 0xBAE00000BBA, - 0xBBE00000BC3, - 0xBC600000BC9, - 0xBCA00000BCE, - 0xBD000000BD1, - 0xBD700000BD8, - 0xBE600000BF0, - 0xC0000000C0D, - 0xC0E00000C11, - 0xC1200000C29, - 0xC2A00000C3A, - 0xC3C00000C45, - 0xC4600000C49, - 0xC4A00000C4E, - 0xC5500000C57, - 0xC5800000C5B, - 0xC5D00000C5E, - 0xC6000000C64, - 0xC6600000C70, - 0xC8000000C84, - 0xC8500000C8D, - 0xC8E00000C91, - 0xC9200000CA9, - 0xCAA00000CB4, - 0xCB500000CBA, - 0xCBC00000CC5, - 0xCC600000CC9, - 0xCCA00000CCE, - 0xCD500000CD7, - 0xCDD00000CDF, - 0xCE000000CE4, - 0xCE600000CF0, - 0xCF100000CF4, - 0xD0000000D0D, - 0xD0E00000D11, - 0xD1200000D45, - 0xD4600000D49, - 0xD4A00000D4F, - 0xD5400000D58, - 0xD5F00000D64, - 0xD6600000D70, - 0xD7A00000D80, - 0xD8100000D84, - 0xD8500000D97, - 0xD9A00000DB2, - 0xDB300000DBC, - 0xDBD00000DBE, - 0xDC000000DC7, - 0xDCA00000DCB, - 0xDCF00000DD5, - 0xDD600000DD7, - 0xDD800000DE0, - 0xDE600000DF0, - 0xDF200000DF4, - 0xE0100000E33, - 0xE3400000E3B, - 0xE4000000E4F, - 0xE5000000E5A, - 0xE8100000E83, - 0xE8400000E85, - 0xE8600000E8B, - 0xE8C00000EA4, - 0xEA500000EA6, - 0xEA700000EB3, - 0xEB400000EBE, - 0xEC000000EC5, - 0xEC600000EC7, - 0xEC800000ECF, - 0xED000000EDA, - 0xEDE00000EE0, - 0xF0000000F01, - 0xF0B00000F0C, - 0xF1800000F1A, - 0xF2000000F2A, - 0xF3500000F36, - 0xF3700000F38, - 0xF3900000F3A, - 0xF3E00000F43, - 0xF4400000F48, - 0xF4900000F4D, - 0xF4E00000F52, - 0xF5300000F57, - 0xF5800000F5C, - 0xF5D00000F69, - 0xF6A00000F6D, - 0xF7100000F73, - 0xF7400000F75, - 0xF7A00000F81, - 0xF8200000F85, - 0xF8600000F93, - 0xF9400000F98, - 0xF9900000F9D, - 0xF9E00000FA2, - 0xFA300000FA7, - 0xFA800000FAC, - 0xFAD00000FB9, - 0xFBA00000FBD, - 0xFC600000FC7, - 0x10000000104A, - 0x10500000109E, - 0x10D0000010FB, - 0x10FD00001100, - 0x120000001249, - 0x124A0000124E, - 0x125000001257, - 0x125800001259, - 0x125A0000125E, - 0x126000001289, - 0x128A0000128E, - 0x1290000012B1, - 0x12B2000012B6, - 0x12B8000012BF, - 0x12C0000012C1, - 0x12C2000012C6, - 0x12C8000012D7, - 0x12D800001311, - 0x131200001316, - 0x13180000135B, - 0x135D00001360, - 0x138000001390, - 0x13A0000013F6, - 0x14010000166D, - 0x166F00001680, - 0x16810000169B, - 0x16A0000016EB, - 0x16F1000016F9, - 0x170000001716, - 0x171F00001735, - 0x174000001754, - 0x17600000176D, - 0x176E00001771, - 0x177200001774, - 0x1780000017B4, - 0x17B6000017D4, - 0x17D7000017D8, - 0x17DC000017DE, - 0x17E0000017EA, - 0x18100000181A, - 0x182000001879, - 0x1880000018AB, - 0x18B0000018F6, - 0x19000000191F, - 0x19200000192C, - 0x19300000193C, - 0x19460000196E, - 0x197000001975, - 0x1980000019AC, - 0x19B0000019CA, - 0x19D0000019DA, - 0x1A0000001A1C, - 0x1A2000001A5F, - 0x1A6000001A7D, - 0x1A7F00001A8A, - 0x1A9000001A9A, - 0x1AA700001AA8, - 0x1AB000001ABE, - 0x1ABF00001ACF, - 0x1B0000001B4D, - 0x1B5000001B5A, - 0x1B6B00001B74, - 0x1B8000001BF4, - 0x1C0000001C38, - 0x1C4000001C4A, - 0x1C4D00001C7E, - 0x1C8A00001C8B, - 0x1CD000001CD3, - 0x1CD400001CFB, - 0x1D0000001D2C, - 0x1D2F00001D30, - 0x1D3B00001D3C, - 0x1D4E00001D4F, - 0x1D6B00001D78, - 0x1D7900001D9B, - 0x1DC000001E00, - 0x1E0100001E02, - 0x1E0300001E04, - 0x1E0500001E06, - 0x1E0700001E08, - 0x1E0900001E0A, - 0x1E0B00001E0C, - 0x1E0D00001E0E, - 0x1E0F00001E10, - 0x1E1100001E12, - 0x1E1300001E14, - 0x1E1500001E16, - 0x1E1700001E18, - 0x1E1900001E1A, - 0x1E1B00001E1C, - 0x1E1D00001E1E, - 0x1E1F00001E20, - 0x1E2100001E22, - 0x1E2300001E24, - 0x1E2500001E26, - 0x1E2700001E28, - 0x1E2900001E2A, - 0x1E2B00001E2C, - 0x1E2D00001E2E, - 0x1E2F00001E30, - 0x1E3100001E32, - 0x1E3300001E34, - 0x1E3500001E36, - 0x1E3700001E38, - 0x1E3900001E3A, - 0x1E3B00001E3C, - 0x1E3D00001E3E, - 0x1E3F00001E40, - 0x1E4100001E42, - 0x1E4300001E44, - 0x1E4500001E46, - 0x1E4700001E48, - 0x1E4900001E4A, - 0x1E4B00001E4C, - 0x1E4D00001E4E, - 0x1E4F00001E50, - 0x1E5100001E52, - 0x1E5300001E54, - 0x1E5500001E56, - 0x1E5700001E58, - 0x1E5900001E5A, - 0x1E5B00001E5C, - 0x1E5D00001E5E, - 0x1E5F00001E60, - 0x1E6100001E62, - 0x1E6300001E64, - 0x1E6500001E66, - 0x1E6700001E68, - 0x1E6900001E6A, - 0x1E6B00001E6C, - 0x1E6D00001E6E, - 0x1E6F00001E70, - 0x1E7100001E72, - 0x1E7300001E74, - 0x1E7500001E76, - 0x1E7700001E78, - 0x1E7900001E7A, - 0x1E7B00001E7C, - 0x1E7D00001E7E, - 0x1E7F00001E80, - 0x1E8100001E82, - 0x1E8300001E84, - 0x1E8500001E86, - 0x1E8700001E88, - 0x1E8900001E8A, - 0x1E8B00001E8C, - 0x1E8D00001E8E, - 0x1E8F00001E90, - 0x1E9100001E92, - 0x1E9300001E94, - 0x1E9500001E9A, - 0x1E9C00001E9E, - 0x1E9F00001EA0, - 0x1EA100001EA2, - 0x1EA300001EA4, - 0x1EA500001EA6, - 0x1EA700001EA8, - 0x1EA900001EAA, - 0x1EAB00001EAC, - 0x1EAD00001EAE, - 0x1EAF00001EB0, - 0x1EB100001EB2, - 0x1EB300001EB4, - 0x1EB500001EB6, - 0x1EB700001EB8, - 0x1EB900001EBA, - 0x1EBB00001EBC, - 0x1EBD00001EBE, - 0x1EBF00001EC0, - 0x1EC100001EC2, - 0x1EC300001EC4, - 0x1EC500001EC6, - 0x1EC700001EC8, - 0x1EC900001ECA, - 0x1ECB00001ECC, - 0x1ECD00001ECE, - 0x1ECF00001ED0, - 0x1ED100001ED2, - 0x1ED300001ED4, - 0x1ED500001ED6, - 0x1ED700001ED8, - 0x1ED900001EDA, - 0x1EDB00001EDC, - 0x1EDD00001EDE, - 0x1EDF00001EE0, - 0x1EE100001EE2, - 0x1EE300001EE4, - 0x1EE500001EE6, - 0x1EE700001EE8, - 0x1EE900001EEA, - 0x1EEB00001EEC, - 0x1EED00001EEE, - 0x1EEF00001EF0, - 0x1EF100001EF2, - 0x1EF300001EF4, - 0x1EF500001EF6, - 0x1EF700001EF8, - 0x1EF900001EFA, - 0x1EFB00001EFC, - 0x1EFD00001EFE, - 0x1EFF00001F08, - 0x1F1000001F16, - 0x1F2000001F28, - 0x1F3000001F38, - 0x1F4000001F46, - 0x1F5000001F58, - 0x1F6000001F68, - 0x1F7000001F71, - 0x1F7200001F73, - 0x1F7400001F75, - 0x1F7600001F77, - 0x1F7800001F79, - 0x1F7A00001F7B, - 0x1F7C00001F7D, - 0x1FB000001FB2, - 0x1FB600001FB7, - 0x1FC600001FC7, - 0x1FD000001FD3, - 0x1FD600001FD8, - 0x1FE000001FE3, - 0x1FE400001FE8, - 0x1FF600001FF7, - 0x214E0000214F, - 0x218400002185, - 0x2C3000002C60, - 0x2C6100002C62, - 0x2C6500002C67, - 0x2C6800002C69, - 0x2C6A00002C6B, - 0x2C6C00002C6D, - 0x2C7100002C72, - 0x2C7300002C75, - 0x2C7600002C7C, - 0x2C8100002C82, - 0x2C8300002C84, - 0x2C8500002C86, - 0x2C8700002C88, - 0x2C8900002C8A, - 0x2C8B00002C8C, - 0x2C8D00002C8E, - 0x2C8F00002C90, - 0x2C9100002C92, - 0x2C9300002C94, - 0x2C9500002C96, - 0x2C9700002C98, - 0x2C9900002C9A, - 0x2C9B00002C9C, - 0x2C9D00002C9E, - 0x2C9F00002CA0, - 0x2CA100002CA2, - 0x2CA300002CA4, - 0x2CA500002CA6, - 0x2CA700002CA8, - 0x2CA900002CAA, - 0x2CAB00002CAC, - 0x2CAD00002CAE, - 0x2CAF00002CB0, - 0x2CB100002CB2, - 0x2CB300002CB4, - 0x2CB500002CB6, - 0x2CB700002CB8, - 0x2CB900002CBA, - 0x2CBB00002CBC, - 0x2CBD00002CBE, - 0x2CBF00002CC0, - 0x2CC100002CC2, - 0x2CC300002CC4, - 0x2CC500002CC6, - 0x2CC700002CC8, - 0x2CC900002CCA, - 0x2CCB00002CCC, - 0x2CCD00002CCE, - 0x2CCF00002CD0, - 0x2CD100002CD2, - 0x2CD300002CD4, - 0x2CD500002CD6, - 0x2CD700002CD8, - 0x2CD900002CDA, - 0x2CDB00002CDC, - 0x2CDD00002CDE, - 0x2CDF00002CE0, - 0x2CE100002CE2, - 0x2CE300002CE5, - 0x2CEC00002CED, - 0x2CEE00002CF2, - 0x2CF300002CF4, - 0x2D0000002D26, - 0x2D2700002D28, - 0x2D2D00002D2E, - 0x2D3000002D68, - 0x2D7F00002D97, - 0x2DA000002DA7, - 0x2DA800002DAF, - 0x2DB000002DB7, - 0x2DB800002DBF, - 0x2DC000002DC7, - 0x2DC800002DCF, - 0x2DD000002DD7, - 0x2DD800002DDF, - 0x2DE000002E00, - 0x2E2F00002E30, - 0x300500003008, - 0x302A0000302E, - 0x303C0000303D, - 0x304100003097, - 0x30990000309B, - 0x309D0000309F, - 0x30A1000030FB, - 0x30FC000030FF, - 0x310500003130, - 0x31A0000031C0, - 0x31F000003200, - 0x340000004DC0, - 0x4E000000A48D, - 0xA4D00000A4FE, - 0xA5000000A60D, - 0xA6100000A62C, - 0xA6410000A642, - 0xA6430000A644, - 0xA6450000A646, - 0xA6470000A648, - 0xA6490000A64A, - 0xA64B0000A64C, - 0xA64D0000A64E, - 0xA64F0000A650, - 0xA6510000A652, - 0xA6530000A654, - 0xA6550000A656, - 0xA6570000A658, - 0xA6590000A65A, - 0xA65B0000A65C, - 0xA65D0000A65E, - 0xA65F0000A660, - 0xA6610000A662, - 0xA6630000A664, - 0xA6650000A666, - 0xA6670000A668, - 0xA6690000A66A, - 0xA66B0000A66C, - 0xA66D0000A670, - 0xA6740000A67E, - 0xA67F0000A680, - 0xA6810000A682, - 0xA6830000A684, - 0xA6850000A686, - 0xA6870000A688, - 0xA6890000A68A, - 0xA68B0000A68C, - 0xA68D0000A68E, - 0xA68F0000A690, - 0xA6910000A692, - 0xA6930000A694, - 0xA6950000A696, - 0xA6970000A698, - 0xA6990000A69A, - 0xA69B0000A69C, - 0xA69E0000A6E6, - 0xA6F00000A6F2, - 0xA7170000A720, - 0xA7230000A724, - 0xA7250000A726, - 0xA7270000A728, - 0xA7290000A72A, - 0xA72B0000A72C, - 0xA72D0000A72E, - 0xA72F0000A732, - 0xA7330000A734, - 0xA7350000A736, - 0xA7370000A738, - 0xA7390000A73A, - 0xA73B0000A73C, - 0xA73D0000A73E, - 0xA73F0000A740, - 0xA7410000A742, - 0xA7430000A744, - 0xA7450000A746, - 0xA7470000A748, - 0xA7490000A74A, - 0xA74B0000A74C, - 0xA74D0000A74E, - 0xA74F0000A750, - 0xA7510000A752, - 0xA7530000A754, - 0xA7550000A756, - 0xA7570000A758, - 0xA7590000A75A, - 0xA75B0000A75C, - 0xA75D0000A75E, - 0xA75F0000A760, - 0xA7610000A762, - 0xA7630000A764, - 0xA7650000A766, - 0xA7670000A768, - 0xA7690000A76A, - 0xA76B0000A76C, - 0xA76D0000A76E, - 0xA76F0000A770, - 0xA7710000A779, - 0xA77A0000A77B, - 0xA77C0000A77D, - 0xA77F0000A780, - 0xA7810000A782, - 0xA7830000A784, - 0xA7850000A786, - 0xA7870000A789, - 0xA78C0000A78D, - 0xA78E0000A790, - 0xA7910000A792, - 0xA7930000A796, - 0xA7970000A798, - 0xA7990000A79A, - 0xA79B0000A79C, - 0xA79D0000A79E, - 0xA79F0000A7A0, - 0xA7A10000A7A2, - 0xA7A30000A7A4, - 0xA7A50000A7A6, - 0xA7A70000A7A8, - 0xA7A90000A7AA, - 0xA7AF0000A7B0, - 0xA7B50000A7B6, - 0xA7B70000A7B8, - 0xA7B90000A7BA, - 0xA7BB0000A7BC, - 0xA7BD0000A7BE, - 0xA7BF0000A7C0, - 0xA7C10000A7C2, - 0xA7C30000A7C4, - 0xA7C80000A7C9, - 0xA7CA0000A7CB, - 0xA7CD0000A7CE, - 0xA7D10000A7D2, - 0xA7D30000A7D4, - 0xA7D50000A7D6, - 0xA7D70000A7D8, - 0xA7D90000A7DA, - 0xA7DB0000A7DC, - 0xA7F60000A7F8, - 0xA7FA0000A828, - 0xA82C0000A82D, - 0xA8400000A874, - 0xA8800000A8C6, - 0xA8D00000A8DA, - 0xA8E00000A8F8, - 0xA8FB0000A8FC, - 0xA8FD0000A92E, - 0xA9300000A954, - 0xA9800000A9C1, - 0xA9CF0000A9DA, - 0xA9E00000A9FF, - 0xAA000000AA37, - 0xAA400000AA4E, - 0xAA500000AA5A, - 0xAA600000AA77, - 0xAA7A0000AAC3, - 0xAADB0000AADE, - 0xAAE00000AAF0, - 0xAAF20000AAF7, - 0xAB010000AB07, - 0xAB090000AB0F, - 0xAB110000AB17, - 0xAB200000AB27, - 0xAB280000AB2F, - 0xAB300000AB5B, - 0xAB600000AB69, - 0xABC00000ABEB, - 0xABEC0000ABEE, - 0xABF00000ABFA, - 0xAC000000D7A4, - 0xFA0E0000FA10, - 0xFA110000FA12, - 0xFA130000FA15, - 0xFA1F0000FA20, - 0xFA210000FA22, - 0xFA230000FA25, - 0xFA270000FA2A, - 0xFB1E0000FB1F, - 0xFE200000FE30, - 0xFE730000FE74, - 0x100000001000C, - 0x1000D00010027, - 0x100280001003B, - 0x1003C0001003E, - 0x1003F0001004E, - 0x100500001005E, - 0x10080000100FB, - 0x101FD000101FE, - 0x102800001029D, - 0x102A0000102D1, - 0x102E0000102E1, - 0x1030000010320, - 0x1032D00010341, - 0x103420001034A, - 0x103500001037B, - 0x103800001039E, - 0x103A0000103C4, - 0x103C8000103D0, - 0x104280001049E, - 0x104A0000104AA, - 0x104D8000104FC, - 0x1050000010528, - 0x1053000010564, - 0x10597000105A2, - 0x105A3000105B2, - 0x105B3000105BA, - 0x105BB000105BD, - 0x105C0000105F4, - 0x1060000010737, - 0x1074000010756, - 0x1076000010768, - 0x1078000010781, - 0x1080000010806, - 0x1080800010809, - 0x1080A00010836, - 0x1083700010839, - 0x1083C0001083D, - 0x1083F00010856, - 0x1086000010877, - 0x108800001089F, - 0x108E0000108F3, - 0x108F4000108F6, - 0x1090000010916, - 0x109200001093A, - 0x10980000109B8, - 0x109BE000109C0, - 0x10A0000010A04, - 0x10A0500010A07, - 0x10A0C00010A14, - 0x10A1500010A18, - 0x10A1900010A36, - 0x10A3800010A3B, - 0x10A3F00010A40, - 0x10A6000010A7D, - 0x10A8000010A9D, - 0x10AC000010AC8, - 0x10AC900010AE7, - 0x10B0000010B36, - 0x10B4000010B56, - 0x10B6000010B73, - 0x10B8000010B92, - 0x10C0000010C49, - 0x10CC000010CF3, - 0x10D0000010D28, - 0x10D3000010D3A, - 0x10D4000010D50, - 0x10D6900010D6E, - 0x10D6F00010D86, - 0x10E8000010EAA, - 0x10EAB00010EAD, - 0x10EB000010EB2, - 0x10EC200010EC5, - 0x10EFC00010F1D, - 0x10F2700010F28, - 0x10F3000010F51, - 0x10F7000010F86, - 0x10FB000010FC5, - 0x10FE000010FF7, - 0x1100000011047, - 0x1106600011076, - 0x1107F000110BB, - 0x110C2000110C3, - 0x110D0000110E9, - 0x110F0000110FA, - 0x1110000011135, - 0x1113600011140, - 0x1114400011148, - 0x1115000011174, - 0x1117600011177, - 0x11180000111C5, - 0x111C9000111CD, - 0x111CE000111DB, - 0x111DC000111DD, - 0x1120000011212, - 0x1121300011238, - 0x1123E00011242, - 0x1128000011287, - 0x1128800011289, - 0x1128A0001128E, - 0x1128F0001129E, - 0x1129F000112A9, - 0x112B0000112EB, - 0x112F0000112FA, - 0x1130000011304, - 0x113050001130D, - 0x1130F00011311, - 0x1131300011329, - 0x1132A00011331, - 0x1133200011334, - 0x113350001133A, - 0x1133B00011345, - 0x1134700011349, - 0x1134B0001134E, - 0x1135000011351, - 0x1135700011358, - 0x1135D00011364, - 0x113660001136D, - 0x1137000011375, - 0x113800001138A, - 0x1138B0001138C, - 0x1138E0001138F, - 0x11390000113B6, - 0x113B7000113C1, - 0x113C2000113C3, - 0x113C5000113C6, - 0x113C7000113CB, - 0x113CC000113D4, - 0x113E1000113E3, - 0x114000001144B, - 0x114500001145A, - 0x1145E00011462, - 0x11480000114C6, - 0x114C7000114C8, - 0x114D0000114DA, - 0x11580000115B6, - 0x115B8000115C1, - 0x115D8000115DE, - 0x1160000011641, - 0x1164400011645, - 0x116500001165A, - 0x11680000116B9, - 0x116C0000116CA, - 0x116D0000116E4, - 0x117000001171B, - 0x1171D0001172C, - 0x117300001173A, - 0x1174000011747, - 0x118000001183B, - 0x118C0000118EA, - 0x118FF00011907, - 0x119090001190A, - 0x1190C00011914, - 0x1191500011917, - 0x1191800011936, - 0x1193700011939, - 0x1193B00011944, - 0x119500001195A, - 0x119A0000119A8, - 0x119AA000119D8, - 0x119DA000119E2, - 0x119E3000119E5, - 0x11A0000011A3F, - 0x11A4700011A48, - 0x11A5000011A9A, - 0x11A9D00011A9E, - 0x11AB000011AF9, - 0x11BC000011BE1, - 0x11BF000011BFA, - 0x11C0000011C09, - 0x11C0A00011C37, - 0x11C3800011C41, - 0x11C5000011C5A, - 0x11C7200011C90, - 0x11C9200011CA8, - 0x11CA900011CB7, - 0x11D0000011D07, - 0x11D0800011D0A, - 0x11D0B00011D37, - 0x11D3A00011D3B, - 0x11D3C00011D3E, - 0x11D3F00011D48, - 0x11D5000011D5A, - 0x11D6000011D66, - 0x11D6700011D69, - 0x11D6A00011D8F, - 0x11D9000011D92, - 0x11D9300011D99, - 0x11DA000011DAA, - 0x11EE000011EF7, - 0x11F0000011F11, - 0x11F1200011F3B, - 0x11F3E00011F43, - 0x11F5000011F5B, - 0x11FB000011FB1, - 0x120000001239A, - 0x1248000012544, - 0x12F9000012FF1, - 0x1300000013430, - 0x1344000013456, - 0x13460000143FB, - 0x1440000014647, - 0x161000001613A, - 0x1680000016A39, - 0x16A4000016A5F, - 0x16A6000016A6A, - 0x16A7000016ABF, - 0x16AC000016ACA, - 0x16AD000016AEE, - 0x16AF000016AF5, - 0x16B0000016B37, - 0x16B4000016B44, - 0x16B5000016B5A, - 0x16B6300016B78, - 0x16B7D00016B90, - 0x16D4000016D6D, - 0x16D7000016D7A, - 0x16E6000016E80, - 0x16F0000016F4B, - 0x16F4F00016F88, - 0x16F8F00016FA0, - 0x16FE000016FE2, - 0x16FE300016FE5, - 0x16FF000016FF2, - 0x17000000187F8, - 0x1880000018CD6, - 0x18CFF00018D09, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B123, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1B1550001B156, - 0x1B1640001B168, - 0x1B1700001B2FC, - 0x1BC000001BC6B, - 0x1BC700001BC7D, - 0x1BC800001BC89, - 0x1BC900001BC9A, - 0x1BC9D0001BC9F, - 0x1CCF00001CCFA, - 0x1CF000001CF2E, - 0x1CF300001CF47, - 0x1DA000001DA37, - 0x1DA3B0001DA6D, - 0x1DA750001DA76, - 0x1DA840001DA85, - 0x1DA9B0001DAA0, - 0x1DAA10001DAB0, - 0x1DF000001DF1F, - 0x1DF250001DF2B, - 0x1E0000001E007, - 0x1E0080001E019, - 0x1E01B0001E022, - 0x1E0230001E025, - 0x1E0260001E02B, - 0x1E08F0001E090, - 0x1E1000001E12D, - 0x1E1300001E13E, - 0x1E1400001E14A, - 0x1E14E0001E14F, - 0x1E2900001E2AF, - 0x1E2C00001E2FA, - 0x1E4D00001E4FA, - 0x1E5D00001E5FB, - 0x1E7E00001E7E7, - 0x1E7E80001E7EC, - 0x1E7ED0001E7EF, - 0x1E7F00001E7FF, - 0x1E8000001E8C5, - 0x1E8D00001E8D7, - 0x1E9220001E94C, - 0x1E9500001E95A, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x300000003134B, - 0x31350000323B0, - ), - "CONTEXTJ": (0x200C0000200E,), - "CONTEXTO": ( - 0xB7000000B8, - 0x37500000376, - 0x5F3000005F5, - 0x6600000066A, - 0x6F0000006FA, - 0x30FB000030FC, - ), -} diff --git a/myenv/lib/python3.12/site-packages/idna/intranges.py b/myenv/lib/python3.12/site-packages/idna/intranges.py deleted file mode 100644 index 7bfaa8d..0000000 --- a/myenv/lib/python3.12/site-packages/idna/intranges.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect -from typing import List, Tuple - - -def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i + 1 < len(sorted_list): - if sorted_list[i] == sorted_list[i + 1] - 1: - continue - current_range = sorted_list[last_write + 1 : i + 1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - - -def _encode_range(start: int, end: int) -> int: - return (start << 32) | end - - -def _decode_range(r: int) -> Tuple[int, int]: - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos - 1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/myenv/lib/python3.12/site-packages/idna/package_data.py b/myenv/lib/python3.12/site-packages/idna/package_data.py deleted file mode 100644 index 7272c8d..0000000 --- a/myenv/lib/python3.12/site-packages/idna/package_data.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "3.11" diff --git a/myenv/lib/python3.12/site-packages/idna/py.typed b/myenv/lib/python3.12/site-packages/idna/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/idna/uts46data.py b/myenv/lib/python3.12/site-packages/idna/uts46data.py deleted file mode 100644 index 4610b71..0000000 --- a/myenv/lib/python3.12/site-packages/idna/uts46data.py +++ /dev/null @@ -1,8841 +0,0 @@ -# This file is automatically generated by tools/idna-data -# vim: set fileencoding=utf-8 : - -from typing import List, Tuple, Union - -"""IDNA Mapping Table from UTS46.""" - - -__version__ = "16.0.0" - - -def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x0, "V"), - (0x1, "V"), - (0x2, "V"), - (0x3, "V"), - (0x4, "V"), - (0x5, "V"), - (0x6, "V"), - (0x7, "V"), - (0x8, "V"), - (0x9, "V"), - (0xA, "V"), - (0xB, "V"), - (0xC, "V"), - (0xD, "V"), - (0xE, "V"), - (0xF, "V"), - (0x10, "V"), - (0x11, "V"), - (0x12, "V"), - (0x13, "V"), - (0x14, "V"), - (0x15, "V"), - (0x16, "V"), - (0x17, "V"), - (0x18, "V"), - (0x19, "V"), - (0x1A, "V"), - (0x1B, "V"), - (0x1C, "V"), - (0x1D, "V"), - (0x1E, "V"), - (0x1F, "V"), - (0x20, "V"), - (0x21, "V"), - (0x22, "V"), - (0x23, "V"), - (0x24, "V"), - (0x25, "V"), - (0x26, "V"), - (0x27, "V"), - (0x28, "V"), - (0x29, "V"), - (0x2A, "V"), - (0x2B, "V"), - (0x2C, "V"), - (0x2D, "V"), - (0x2E, "V"), - (0x2F, "V"), - (0x30, "V"), - (0x31, "V"), - (0x32, "V"), - (0x33, "V"), - (0x34, "V"), - (0x35, "V"), - (0x36, "V"), - (0x37, "V"), - (0x38, "V"), - (0x39, "V"), - (0x3A, "V"), - (0x3B, "V"), - (0x3C, "V"), - (0x3D, "V"), - (0x3E, "V"), - (0x3F, "V"), - (0x40, "V"), - (0x41, "M", "a"), - (0x42, "M", "b"), - (0x43, "M", "c"), - (0x44, "M", "d"), - (0x45, "M", "e"), - (0x46, "M", "f"), - (0x47, "M", "g"), - (0x48, "M", "h"), - (0x49, "M", "i"), - (0x4A, "M", "j"), - (0x4B, "M", "k"), - (0x4C, "M", "l"), - (0x4D, "M", "m"), - (0x4E, "M", "n"), - (0x4F, "M", "o"), - (0x50, "M", "p"), - (0x51, "M", "q"), - (0x52, "M", "r"), - (0x53, "M", "s"), - (0x54, "M", "t"), - (0x55, "M", "u"), - (0x56, "M", "v"), - (0x57, "M", "w"), - (0x58, "M", "x"), - (0x59, "M", "y"), - (0x5A, "M", "z"), - (0x5B, "V"), - (0x5C, "V"), - (0x5D, "V"), - (0x5E, "V"), - (0x5F, "V"), - (0x60, "V"), - (0x61, "V"), - (0x62, "V"), - (0x63, "V"), - ] - - -def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x64, "V"), - (0x65, "V"), - (0x66, "V"), - (0x67, "V"), - (0x68, "V"), - (0x69, "V"), - (0x6A, "V"), - (0x6B, "V"), - (0x6C, "V"), - (0x6D, "V"), - (0x6E, "V"), - (0x6F, "V"), - (0x70, "V"), - (0x71, "V"), - (0x72, "V"), - (0x73, "V"), - (0x74, "V"), - (0x75, "V"), - (0x76, "V"), - (0x77, "V"), - (0x78, "V"), - (0x79, "V"), - (0x7A, "V"), - (0x7B, "V"), - (0x7C, "V"), - (0x7D, "V"), - (0x7E, "V"), - (0x7F, "V"), - (0x80, "X"), - (0x81, "X"), - (0x82, "X"), - (0x83, "X"), - (0x84, "X"), - (0x85, "X"), - (0x86, "X"), - (0x87, "X"), - (0x88, "X"), - (0x89, "X"), - (0x8A, "X"), - (0x8B, "X"), - (0x8C, "X"), - (0x8D, "X"), - (0x8E, "X"), - (0x8F, "X"), - (0x90, "X"), - (0x91, "X"), - (0x92, "X"), - (0x93, "X"), - (0x94, "X"), - (0x95, "X"), - (0x96, "X"), - (0x97, "X"), - (0x98, "X"), - (0x99, "X"), - (0x9A, "X"), - (0x9B, "X"), - (0x9C, "X"), - (0x9D, "X"), - (0x9E, "X"), - (0x9F, "X"), - (0xA0, "M", " "), - (0xA1, "V"), - (0xA2, "V"), - (0xA3, "V"), - (0xA4, "V"), - (0xA5, "V"), - (0xA6, "V"), - (0xA7, "V"), - (0xA8, "M", " ̈"), - (0xA9, "V"), - (0xAA, "M", "a"), - (0xAB, "V"), - (0xAC, "V"), - (0xAD, "I"), - (0xAE, "V"), - (0xAF, "M", " ̄"), - (0xB0, "V"), - (0xB1, "V"), - (0xB2, "M", "2"), - (0xB3, "M", "3"), - (0xB4, "M", " ́"), - (0xB5, "M", "μ"), - (0xB6, "V"), - (0xB7, "V"), - (0xB8, "M", " ̧"), - (0xB9, "M", "1"), - (0xBA, "M", "o"), - (0xBB, "V"), - (0xBC, "M", "1⁄4"), - (0xBD, "M", "1⁄2"), - (0xBE, "M", "3⁄4"), - (0xBF, "V"), - (0xC0, "M", "à"), - (0xC1, "M", "á"), - (0xC2, "M", "â"), - (0xC3, "M", "ã"), - (0xC4, "M", "ä"), - (0xC5, "M", "å"), - (0xC6, "M", "æ"), - (0xC7, "M", "ç"), - ] - - -def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC8, "M", "è"), - (0xC9, "M", "é"), - (0xCA, "M", "ê"), - (0xCB, "M", "ë"), - (0xCC, "M", "ì"), - (0xCD, "M", "í"), - (0xCE, "M", "î"), - (0xCF, "M", "ï"), - (0xD0, "M", "ð"), - (0xD1, "M", "ñ"), - (0xD2, "M", "ò"), - (0xD3, "M", "ó"), - (0xD4, "M", "ô"), - (0xD5, "M", "õ"), - (0xD6, "M", "ö"), - (0xD7, "V"), - (0xD8, "M", "ø"), - (0xD9, "M", "ù"), - (0xDA, "M", "ú"), - (0xDB, "M", "û"), - (0xDC, "M", "ü"), - (0xDD, "M", "ý"), - (0xDE, "M", "þ"), - (0xDF, "D", "ss"), - (0xE0, "V"), - (0xE1, "V"), - (0xE2, "V"), - (0xE3, "V"), - (0xE4, "V"), - (0xE5, "V"), - (0xE6, "V"), - (0xE7, "V"), - (0xE8, "V"), - (0xE9, "V"), - (0xEA, "V"), - (0xEB, "V"), - (0xEC, "V"), - (0xED, "V"), - (0xEE, "V"), - (0xEF, "V"), - (0xF0, "V"), - (0xF1, "V"), - (0xF2, "V"), - (0xF3, "V"), - (0xF4, "V"), - (0xF5, "V"), - (0xF6, "V"), - (0xF7, "V"), - (0xF8, "V"), - (0xF9, "V"), - (0xFA, "V"), - (0xFB, "V"), - (0xFC, "V"), - (0xFD, "V"), - (0xFE, "V"), - (0xFF, "V"), - (0x100, "M", "ā"), - (0x101, "V"), - (0x102, "M", "ă"), - (0x103, "V"), - (0x104, "M", "ą"), - (0x105, "V"), - (0x106, "M", "ć"), - (0x107, "V"), - (0x108, "M", "ĉ"), - (0x109, "V"), - (0x10A, "M", "ċ"), - (0x10B, "V"), - (0x10C, "M", "č"), - (0x10D, "V"), - (0x10E, "M", "ď"), - (0x10F, "V"), - (0x110, "M", "đ"), - (0x111, "V"), - (0x112, "M", "ē"), - (0x113, "V"), - (0x114, "M", "ĕ"), - (0x115, "V"), - (0x116, "M", "ė"), - (0x117, "V"), - (0x118, "M", "ę"), - (0x119, "V"), - (0x11A, "M", "ě"), - (0x11B, "V"), - (0x11C, "M", "ĝ"), - (0x11D, "V"), - (0x11E, "M", "ğ"), - (0x11F, "V"), - (0x120, "M", "ġ"), - (0x121, "V"), - (0x122, "M", "ģ"), - (0x123, "V"), - (0x124, "M", "ĥ"), - (0x125, "V"), - (0x126, "M", "ħ"), - (0x127, "V"), - (0x128, "M", "ĩ"), - (0x129, "V"), - (0x12A, "M", "ī"), - (0x12B, "V"), - ] - - -def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x12C, "M", "ĭ"), - (0x12D, "V"), - (0x12E, "M", "į"), - (0x12F, "V"), - (0x130, "M", "i̇"), - (0x131, "V"), - (0x132, "M", "ij"), - (0x134, "M", "ĵ"), - (0x135, "V"), - (0x136, "M", "ķ"), - (0x137, "V"), - (0x139, "M", "ĺ"), - (0x13A, "V"), - (0x13B, "M", "ļ"), - (0x13C, "V"), - (0x13D, "M", "ľ"), - (0x13E, "V"), - (0x13F, "M", "l·"), - (0x141, "M", "ł"), - (0x142, "V"), - (0x143, "M", "ń"), - (0x144, "V"), - (0x145, "M", "ņ"), - (0x146, "V"), - (0x147, "M", "ň"), - (0x148, "V"), - (0x149, "M", "ʼn"), - (0x14A, "M", "ŋ"), - (0x14B, "V"), - (0x14C, "M", "ō"), - (0x14D, "V"), - (0x14E, "M", "ŏ"), - (0x14F, "V"), - (0x150, "M", "ő"), - (0x151, "V"), - (0x152, "M", "œ"), - (0x153, "V"), - (0x154, "M", "ŕ"), - (0x155, "V"), - (0x156, "M", "ŗ"), - (0x157, "V"), - (0x158, "M", "ř"), - (0x159, "V"), - (0x15A, "M", "ś"), - (0x15B, "V"), - (0x15C, "M", "ŝ"), - (0x15D, "V"), - (0x15E, "M", "ş"), - (0x15F, "V"), - (0x160, "M", "š"), - (0x161, "V"), - (0x162, "M", "ţ"), - (0x163, "V"), - (0x164, "M", "ť"), - (0x165, "V"), - (0x166, "M", "ŧ"), - (0x167, "V"), - (0x168, "M", "ũ"), - (0x169, "V"), - (0x16A, "M", "ū"), - (0x16B, "V"), - (0x16C, "M", "ŭ"), - (0x16D, "V"), - (0x16E, "M", "ů"), - (0x16F, "V"), - (0x170, "M", "ű"), - (0x171, "V"), - (0x172, "M", "ų"), - (0x173, "V"), - (0x174, "M", "ŵ"), - (0x175, "V"), - (0x176, "M", "ŷ"), - (0x177, "V"), - (0x178, "M", "ÿ"), - (0x179, "M", "ź"), - (0x17A, "V"), - (0x17B, "M", "ż"), - (0x17C, "V"), - (0x17D, "M", "ž"), - (0x17E, "V"), - (0x17F, "M", "s"), - (0x180, "V"), - (0x181, "M", "ɓ"), - (0x182, "M", "ƃ"), - (0x183, "V"), - (0x184, "M", "ƅ"), - (0x185, "V"), - (0x186, "M", "ɔ"), - (0x187, "M", "ƈ"), - (0x188, "V"), - (0x189, "M", "ɖ"), - (0x18A, "M", "ɗ"), - (0x18B, "M", "ƌ"), - (0x18C, "V"), - (0x18E, "M", "ǝ"), - (0x18F, "M", "ə"), - (0x190, "M", "ɛ"), - (0x191, "M", "ƒ"), - (0x192, "V"), - (0x193, "M", "ɠ"), - ] - - -def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x194, "M", "ɣ"), - (0x195, "V"), - (0x196, "M", "ɩ"), - (0x197, "M", "ɨ"), - (0x198, "M", "ƙ"), - (0x199, "V"), - (0x19C, "M", "ɯ"), - (0x19D, "M", "ɲ"), - (0x19E, "V"), - (0x19F, "M", "ɵ"), - (0x1A0, "M", "ơ"), - (0x1A1, "V"), - (0x1A2, "M", "ƣ"), - (0x1A3, "V"), - (0x1A4, "M", "ƥ"), - (0x1A5, "V"), - (0x1A6, "M", "ʀ"), - (0x1A7, "M", "ƨ"), - (0x1A8, "V"), - (0x1A9, "M", "ʃ"), - (0x1AA, "V"), - (0x1AC, "M", "ƭ"), - (0x1AD, "V"), - (0x1AE, "M", "ʈ"), - (0x1AF, "M", "ư"), - (0x1B0, "V"), - (0x1B1, "M", "ʊ"), - (0x1B2, "M", "ʋ"), - (0x1B3, "M", "ƴ"), - (0x1B4, "V"), - (0x1B5, "M", "ƶ"), - (0x1B6, "V"), - (0x1B7, "M", "ʒ"), - (0x1B8, "M", "ƹ"), - (0x1B9, "V"), - (0x1BC, "M", "ƽ"), - (0x1BD, "V"), - (0x1C4, "M", "dž"), - (0x1C7, "M", "lj"), - (0x1CA, "M", "nj"), - (0x1CD, "M", "ǎ"), - (0x1CE, "V"), - (0x1CF, "M", "ǐ"), - (0x1D0, "V"), - (0x1D1, "M", "ǒ"), - (0x1D2, "V"), - (0x1D3, "M", "ǔ"), - (0x1D4, "V"), - (0x1D5, "M", "ǖ"), - (0x1D6, "V"), - (0x1D7, "M", "ǘ"), - (0x1D8, "V"), - (0x1D9, "M", "ǚ"), - (0x1DA, "V"), - (0x1DB, "M", "ǜ"), - (0x1DC, "V"), - (0x1DE, "M", "ǟ"), - (0x1DF, "V"), - (0x1E0, "M", "ǡ"), - (0x1E1, "V"), - (0x1E2, "M", "ǣ"), - (0x1E3, "V"), - (0x1E4, "M", "ǥ"), - (0x1E5, "V"), - (0x1E6, "M", "ǧ"), - (0x1E7, "V"), - (0x1E8, "M", "ǩ"), - (0x1E9, "V"), - (0x1EA, "M", "ǫ"), - (0x1EB, "V"), - (0x1EC, "M", "ǭ"), - (0x1ED, "V"), - (0x1EE, "M", "ǯ"), - (0x1EF, "V"), - (0x1F1, "M", "dz"), - (0x1F4, "M", "ǵ"), - (0x1F5, "V"), - (0x1F6, "M", "ƕ"), - (0x1F7, "M", "ƿ"), - (0x1F8, "M", "ǹ"), - (0x1F9, "V"), - (0x1FA, "M", "ǻ"), - (0x1FB, "V"), - (0x1FC, "M", "ǽ"), - (0x1FD, "V"), - (0x1FE, "M", "ǿ"), - (0x1FF, "V"), - (0x200, "M", "ȁ"), - (0x201, "V"), - (0x202, "M", "ȃ"), - (0x203, "V"), - (0x204, "M", "ȅ"), - (0x205, "V"), - (0x206, "M", "ȇ"), - (0x207, "V"), - (0x208, "M", "ȉ"), - (0x209, "V"), - (0x20A, "M", "ȋ"), - (0x20B, "V"), - (0x20C, "M", "ȍ"), - ] - - -def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x20D, "V"), - (0x20E, "M", "ȏ"), - (0x20F, "V"), - (0x210, "M", "ȑ"), - (0x211, "V"), - (0x212, "M", "ȓ"), - (0x213, "V"), - (0x214, "M", "ȕ"), - (0x215, "V"), - (0x216, "M", "ȗ"), - (0x217, "V"), - (0x218, "M", "ș"), - (0x219, "V"), - (0x21A, "M", "ț"), - (0x21B, "V"), - (0x21C, "M", "ȝ"), - (0x21D, "V"), - (0x21E, "M", "ȟ"), - (0x21F, "V"), - (0x220, "M", "ƞ"), - (0x221, "V"), - (0x222, "M", "ȣ"), - (0x223, "V"), - (0x224, "M", "ȥ"), - (0x225, "V"), - (0x226, "M", "ȧ"), - (0x227, "V"), - (0x228, "M", "ȩ"), - (0x229, "V"), - (0x22A, "M", "ȫ"), - (0x22B, "V"), - (0x22C, "M", "ȭ"), - (0x22D, "V"), - (0x22E, "M", "ȯ"), - (0x22F, "V"), - (0x230, "M", "ȱ"), - (0x231, "V"), - (0x232, "M", "ȳ"), - (0x233, "V"), - (0x23A, "M", "ⱥ"), - (0x23B, "M", "ȼ"), - (0x23C, "V"), - (0x23D, "M", "ƚ"), - (0x23E, "M", "ⱦ"), - (0x23F, "V"), - (0x241, "M", "ɂ"), - (0x242, "V"), - (0x243, "M", "ƀ"), - (0x244, "M", "ʉ"), - (0x245, "M", "ʌ"), - (0x246, "M", "ɇ"), - (0x247, "V"), - (0x248, "M", "ɉ"), - (0x249, "V"), - (0x24A, "M", "ɋ"), - (0x24B, "V"), - (0x24C, "M", "ɍ"), - (0x24D, "V"), - (0x24E, "M", "ɏ"), - (0x24F, "V"), - (0x2B0, "M", "h"), - (0x2B1, "M", "ɦ"), - (0x2B2, "M", "j"), - (0x2B3, "M", "r"), - (0x2B4, "M", "ɹ"), - (0x2B5, "M", "ɻ"), - (0x2B6, "M", "ʁ"), - (0x2B7, "M", "w"), - (0x2B8, "M", "y"), - (0x2B9, "V"), - (0x2D8, "M", " ̆"), - (0x2D9, "M", " ̇"), - (0x2DA, "M", " ̊"), - (0x2DB, "M", " ̨"), - (0x2DC, "M", " ̃"), - (0x2DD, "M", " ̋"), - (0x2DE, "V"), - (0x2E0, "M", "ɣ"), - (0x2E1, "M", "l"), - (0x2E2, "M", "s"), - (0x2E3, "M", "x"), - (0x2E4, "M", "ʕ"), - (0x2E5, "V"), - (0x340, "M", "̀"), - (0x341, "M", "́"), - (0x342, "V"), - (0x343, "M", "̓"), - (0x344, "M", "̈́"), - (0x345, "M", "ι"), - (0x346, "V"), - (0x34F, "I"), - (0x350, "V"), - (0x370, "M", "ͱ"), - (0x371, "V"), - (0x372, "M", "ͳ"), - (0x373, "V"), - (0x374, "M", "ʹ"), - (0x375, "V"), - (0x376, "M", "ͷ"), - (0x377, "V"), - ] - - -def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x378, "X"), - (0x37A, "M", " ι"), - (0x37B, "V"), - (0x37E, "M", ";"), - (0x37F, "M", "ϳ"), - (0x380, "X"), - (0x384, "M", " ́"), - (0x385, "M", " ̈́"), - (0x386, "M", "ά"), - (0x387, "M", "·"), - (0x388, "M", "έ"), - (0x389, "M", "ή"), - (0x38A, "M", "ί"), - (0x38B, "X"), - (0x38C, "M", "ό"), - (0x38D, "X"), - (0x38E, "M", "ύ"), - (0x38F, "M", "ώ"), - (0x390, "V"), - (0x391, "M", "α"), - (0x392, "M", "β"), - (0x393, "M", "γ"), - (0x394, "M", "δ"), - (0x395, "M", "ε"), - (0x396, "M", "ζ"), - (0x397, "M", "η"), - (0x398, "M", "θ"), - (0x399, "M", "ι"), - (0x39A, "M", "κ"), - (0x39B, "M", "λ"), - (0x39C, "M", "μ"), - (0x39D, "M", "ν"), - (0x39E, "M", "ξ"), - (0x39F, "M", "ο"), - (0x3A0, "M", "π"), - (0x3A1, "M", "ρ"), - (0x3A2, "X"), - (0x3A3, "M", "σ"), - (0x3A4, "M", "τ"), - (0x3A5, "M", "υ"), - (0x3A6, "M", "φ"), - (0x3A7, "M", "χ"), - (0x3A8, "M", "ψ"), - (0x3A9, "M", "ω"), - (0x3AA, "M", "ϊ"), - (0x3AB, "M", "ϋ"), - (0x3AC, "V"), - (0x3C2, "D", "σ"), - (0x3C3, "V"), - (0x3CF, "M", "ϗ"), - (0x3D0, "M", "β"), - (0x3D1, "M", "θ"), - (0x3D2, "M", "υ"), - (0x3D3, "M", "ύ"), - (0x3D4, "M", "ϋ"), - (0x3D5, "M", "φ"), - (0x3D6, "M", "π"), - (0x3D7, "V"), - (0x3D8, "M", "ϙ"), - (0x3D9, "V"), - (0x3DA, "M", "ϛ"), - (0x3DB, "V"), - (0x3DC, "M", "ϝ"), - (0x3DD, "V"), - (0x3DE, "M", "ϟ"), - (0x3DF, "V"), - (0x3E0, "M", "ϡ"), - (0x3E1, "V"), - (0x3E2, "M", "ϣ"), - (0x3E3, "V"), - (0x3E4, "M", "ϥ"), - (0x3E5, "V"), - (0x3E6, "M", "ϧ"), - (0x3E7, "V"), - (0x3E8, "M", "ϩ"), - (0x3E9, "V"), - (0x3EA, "M", "ϫ"), - (0x3EB, "V"), - (0x3EC, "M", "ϭ"), - (0x3ED, "V"), - (0x3EE, "M", "ϯ"), - (0x3EF, "V"), - (0x3F0, "M", "κ"), - (0x3F1, "M", "ρ"), - (0x3F2, "M", "σ"), - (0x3F3, "V"), - (0x3F4, "M", "θ"), - (0x3F5, "M", "ε"), - (0x3F6, "V"), - (0x3F7, "M", "ϸ"), - (0x3F8, "V"), - (0x3F9, "M", "σ"), - (0x3FA, "M", "ϻ"), - (0x3FB, "V"), - (0x3FD, "M", "ͻ"), - (0x3FE, "M", "ͼ"), - (0x3FF, "M", "ͽ"), - (0x400, "M", "ѐ"), - (0x401, "M", "ё"), - (0x402, "M", "ђ"), - ] - - -def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x403, "M", "ѓ"), - (0x404, "M", "є"), - (0x405, "M", "ѕ"), - (0x406, "M", "і"), - (0x407, "M", "ї"), - (0x408, "M", "ј"), - (0x409, "M", "љ"), - (0x40A, "M", "њ"), - (0x40B, "M", "ћ"), - (0x40C, "M", "ќ"), - (0x40D, "M", "ѝ"), - (0x40E, "M", "ў"), - (0x40F, "M", "џ"), - (0x410, "M", "а"), - (0x411, "M", "б"), - (0x412, "M", "в"), - (0x413, "M", "г"), - (0x414, "M", "д"), - (0x415, "M", "е"), - (0x416, "M", "ж"), - (0x417, "M", "з"), - (0x418, "M", "и"), - (0x419, "M", "й"), - (0x41A, "M", "к"), - (0x41B, "M", "л"), - (0x41C, "M", "м"), - (0x41D, "M", "н"), - (0x41E, "M", "о"), - (0x41F, "M", "п"), - (0x420, "M", "р"), - (0x421, "M", "с"), - (0x422, "M", "т"), - (0x423, "M", "у"), - (0x424, "M", "ф"), - (0x425, "M", "х"), - (0x426, "M", "ц"), - (0x427, "M", "ч"), - (0x428, "M", "ш"), - (0x429, "M", "щ"), - (0x42A, "M", "ъ"), - (0x42B, "M", "ы"), - (0x42C, "M", "ь"), - (0x42D, "M", "э"), - (0x42E, "M", "ю"), - (0x42F, "M", "я"), - (0x430, "V"), - (0x460, "M", "ѡ"), - (0x461, "V"), - (0x462, "M", "ѣ"), - (0x463, "V"), - (0x464, "M", "ѥ"), - (0x465, "V"), - (0x466, "M", "ѧ"), - (0x467, "V"), - (0x468, "M", "ѩ"), - (0x469, "V"), - (0x46A, "M", "ѫ"), - (0x46B, "V"), - (0x46C, "M", "ѭ"), - (0x46D, "V"), - (0x46E, "M", "ѯ"), - (0x46F, "V"), - (0x470, "M", "ѱ"), - (0x471, "V"), - (0x472, "M", "ѳ"), - (0x473, "V"), - (0x474, "M", "ѵ"), - (0x475, "V"), - (0x476, "M", "ѷ"), - (0x477, "V"), - (0x478, "M", "ѹ"), - (0x479, "V"), - (0x47A, "M", "ѻ"), - (0x47B, "V"), - (0x47C, "M", "ѽ"), - (0x47D, "V"), - (0x47E, "M", "ѿ"), - (0x47F, "V"), - (0x480, "M", "ҁ"), - (0x481, "V"), - (0x48A, "M", "ҋ"), - (0x48B, "V"), - (0x48C, "M", "ҍ"), - (0x48D, "V"), - (0x48E, "M", "ҏ"), - (0x48F, "V"), - (0x490, "M", "ґ"), - (0x491, "V"), - (0x492, "M", "ғ"), - (0x493, "V"), - (0x494, "M", "ҕ"), - (0x495, "V"), - (0x496, "M", "җ"), - (0x497, "V"), - (0x498, "M", "ҙ"), - (0x499, "V"), - (0x49A, "M", "қ"), - (0x49B, "V"), - (0x49C, "M", "ҝ"), - (0x49D, "V"), - ] - - -def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x49E, "M", "ҟ"), - (0x49F, "V"), - (0x4A0, "M", "ҡ"), - (0x4A1, "V"), - (0x4A2, "M", "ң"), - (0x4A3, "V"), - (0x4A4, "M", "ҥ"), - (0x4A5, "V"), - (0x4A6, "M", "ҧ"), - (0x4A7, "V"), - (0x4A8, "M", "ҩ"), - (0x4A9, "V"), - (0x4AA, "M", "ҫ"), - (0x4AB, "V"), - (0x4AC, "M", "ҭ"), - (0x4AD, "V"), - (0x4AE, "M", "ү"), - (0x4AF, "V"), - (0x4B0, "M", "ұ"), - (0x4B1, "V"), - (0x4B2, "M", "ҳ"), - (0x4B3, "V"), - (0x4B4, "M", "ҵ"), - (0x4B5, "V"), - (0x4B6, "M", "ҷ"), - (0x4B7, "V"), - (0x4B8, "M", "ҹ"), - (0x4B9, "V"), - (0x4BA, "M", "һ"), - (0x4BB, "V"), - (0x4BC, "M", "ҽ"), - (0x4BD, "V"), - (0x4BE, "M", "ҿ"), - (0x4BF, "V"), - (0x4C0, "M", "ӏ"), - (0x4C1, "M", "ӂ"), - (0x4C2, "V"), - (0x4C3, "M", "ӄ"), - (0x4C4, "V"), - (0x4C5, "M", "ӆ"), - (0x4C6, "V"), - (0x4C7, "M", "ӈ"), - (0x4C8, "V"), - (0x4C9, "M", "ӊ"), - (0x4CA, "V"), - (0x4CB, "M", "ӌ"), - (0x4CC, "V"), - (0x4CD, "M", "ӎ"), - (0x4CE, "V"), - (0x4D0, "M", "ӑ"), - (0x4D1, "V"), - (0x4D2, "M", "ӓ"), - (0x4D3, "V"), - (0x4D4, "M", "ӕ"), - (0x4D5, "V"), - (0x4D6, "M", "ӗ"), - (0x4D7, "V"), - (0x4D8, "M", "ә"), - (0x4D9, "V"), - (0x4DA, "M", "ӛ"), - (0x4DB, "V"), - (0x4DC, "M", "ӝ"), - (0x4DD, "V"), - (0x4DE, "M", "ӟ"), - (0x4DF, "V"), - (0x4E0, "M", "ӡ"), - (0x4E1, "V"), - (0x4E2, "M", "ӣ"), - (0x4E3, "V"), - (0x4E4, "M", "ӥ"), - (0x4E5, "V"), - (0x4E6, "M", "ӧ"), - (0x4E7, "V"), - (0x4E8, "M", "ө"), - (0x4E9, "V"), - (0x4EA, "M", "ӫ"), - (0x4EB, "V"), - (0x4EC, "M", "ӭ"), - (0x4ED, "V"), - (0x4EE, "M", "ӯ"), - (0x4EF, "V"), - (0x4F0, "M", "ӱ"), - (0x4F1, "V"), - (0x4F2, "M", "ӳ"), - (0x4F3, "V"), - (0x4F4, "M", "ӵ"), - (0x4F5, "V"), - (0x4F6, "M", "ӷ"), - (0x4F7, "V"), - (0x4F8, "M", "ӹ"), - (0x4F9, "V"), - (0x4FA, "M", "ӻ"), - (0x4FB, "V"), - (0x4FC, "M", "ӽ"), - (0x4FD, "V"), - (0x4FE, "M", "ӿ"), - (0x4FF, "V"), - (0x500, "M", "ԁ"), - (0x501, "V"), - (0x502, "M", "ԃ"), - ] - - -def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x503, "V"), - (0x504, "M", "ԅ"), - (0x505, "V"), - (0x506, "M", "ԇ"), - (0x507, "V"), - (0x508, "M", "ԉ"), - (0x509, "V"), - (0x50A, "M", "ԋ"), - (0x50B, "V"), - (0x50C, "M", "ԍ"), - (0x50D, "V"), - (0x50E, "M", "ԏ"), - (0x50F, "V"), - (0x510, "M", "ԑ"), - (0x511, "V"), - (0x512, "M", "ԓ"), - (0x513, "V"), - (0x514, "M", "ԕ"), - (0x515, "V"), - (0x516, "M", "ԗ"), - (0x517, "V"), - (0x518, "M", "ԙ"), - (0x519, "V"), - (0x51A, "M", "ԛ"), - (0x51B, "V"), - (0x51C, "M", "ԝ"), - (0x51D, "V"), - (0x51E, "M", "ԟ"), - (0x51F, "V"), - (0x520, "M", "ԡ"), - (0x521, "V"), - (0x522, "M", "ԣ"), - (0x523, "V"), - (0x524, "M", "ԥ"), - (0x525, "V"), - (0x526, "M", "ԧ"), - (0x527, "V"), - (0x528, "M", "ԩ"), - (0x529, "V"), - (0x52A, "M", "ԫ"), - (0x52B, "V"), - (0x52C, "M", "ԭ"), - (0x52D, "V"), - (0x52E, "M", "ԯ"), - (0x52F, "V"), - (0x530, "X"), - (0x531, "M", "ա"), - (0x532, "M", "բ"), - (0x533, "M", "գ"), - (0x534, "M", "դ"), - (0x535, "M", "ե"), - (0x536, "M", "զ"), - (0x537, "M", "է"), - (0x538, "M", "ը"), - (0x539, "M", "թ"), - (0x53A, "M", "ժ"), - (0x53B, "M", "ի"), - (0x53C, "M", "լ"), - (0x53D, "M", "խ"), - (0x53E, "M", "ծ"), - (0x53F, "M", "կ"), - (0x540, "M", "հ"), - (0x541, "M", "ձ"), - (0x542, "M", "ղ"), - (0x543, "M", "ճ"), - (0x544, "M", "մ"), - (0x545, "M", "յ"), - (0x546, "M", "ն"), - (0x547, "M", "շ"), - (0x548, "M", "ո"), - (0x549, "M", "չ"), - (0x54A, "M", "պ"), - (0x54B, "M", "ջ"), - (0x54C, "M", "ռ"), - (0x54D, "M", "ս"), - (0x54E, "M", "վ"), - (0x54F, "M", "տ"), - (0x550, "M", "ր"), - (0x551, "M", "ց"), - (0x552, "M", "ւ"), - (0x553, "M", "փ"), - (0x554, "M", "ք"), - (0x555, "M", "օ"), - (0x556, "M", "ֆ"), - (0x557, "X"), - (0x559, "V"), - (0x587, "M", "եւ"), - (0x588, "V"), - (0x58B, "X"), - (0x58D, "V"), - (0x590, "X"), - (0x591, "V"), - (0x5C8, "X"), - (0x5D0, "V"), - (0x5EB, "X"), - (0x5EF, "V"), - (0x5F5, "X"), - (0x606, "V"), - (0x61C, "X"), - (0x61D, "V"), - ] - - -def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x675, "M", "اٴ"), - (0x676, "M", "وٴ"), - (0x677, "M", "ۇٴ"), - (0x678, "M", "يٴ"), - (0x679, "V"), - (0x6DD, "X"), - (0x6DE, "V"), - (0x70E, "X"), - (0x710, "V"), - (0x74B, "X"), - (0x74D, "V"), - (0x7B2, "X"), - (0x7C0, "V"), - (0x7FB, "X"), - (0x7FD, "V"), - (0x82E, "X"), - (0x830, "V"), - (0x83F, "X"), - (0x840, "V"), - (0x85C, "X"), - (0x85E, "V"), - (0x85F, "X"), - (0x860, "V"), - (0x86B, "X"), - (0x870, "V"), - (0x88F, "X"), - (0x897, "V"), - (0x8E2, "X"), - (0x8E3, "V"), - (0x958, "M", "क़"), - (0x959, "M", "ख़"), - (0x95A, "M", "ग़"), - (0x95B, "M", "ज़"), - (0x95C, "M", "ड़"), - (0x95D, "M", "ढ़"), - (0x95E, "M", "फ़"), - (0x95F, "M", "य़"), - (0x960, "V"), - (0x984, "X"), - (0x985, "V"), - (0x98D, "X"), - (0x98F, "V"), - (0x991, "X"), - (0x993, "V"), - (0x9A9, "X"), - (0x9AA, "V"), - (0x9B1, "X"), - (0x9B2, "V"), - (0x9B3, "X"), - (0x9B6, "V"), - (0x9BA, "X"), - (0x9BC, "V"), - (0x9C5, "X"), - (0x9C7, "V"), - (0x9C9, "X"), - (0x9CB, "V"), - (0x9CF, "X"), - (0x9D7, "V"), - (0x9D8, "X"), - (0x9DC, "M", "ড়"), - (0x9DD, "M", "ঢ়"), - (0x9DE, "X"), - (0x9DF, "M", "য়"), - (0x9E0, "V"), - (0x9E4, "X"), - (0x9E6, "V"), - (0x9FF, "X"), - (0xA01, "V"), - (0xA04, "X"), - (0xA05, "V"), - (0xA0B, "X"), - (0xA0F, "V"), - (0xA11, "X"), - (0xA13, "V"), - (0xA29, "X"), - (0xA2A, "V"), - (0xA31, "X"), - (0xA32, "V"), - (0xA33, "M", "ਲ਼"), - (0xA34, "X"), - (0xA35, "V"), - (0xA36, "M", "ਸ਼"), - (0xA37, "X"), - (0xA38, "V"), - (0xA3A, "X"), - (0xA3C, "V"), - (0xA3D, "X"), - (0xA3E, "V"), - (0xA43, "X"), - (0xA47, "V"), - (0xA49, "X"), - (0xA4B, "V"), - (0xA4E, "X"), - (0xA51, "V"), - (0xA52, "X"), - (0xA59, "M", "ਖ਼"), - (0xA5A, "M", "ਗ਼"), - (0xA5B, "M", "ਜ਼"), - (0xA5C, "V"), - (0xA5D, "X"), - ] - - -def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA5E, "M", "ਫ਼"), - (0xA5F, "X"), - (0xA66, "V"), - (0xA77, "X"), - (0xA81, "V"), - (0xA84, "X"), - (0xA85, "V"), - (0xA8E, "X"), - (0xA8F, "V"), - (0xA92, "X"), - (0xA93, "V"), - (0xAA9, "X"), - (0xAAA, "V"), - (0xAB1, "X"), - (0xAB2, "V"), - (0xAB4, "X"), - (0xAB5, "V"), - (0xABA, "X"), - (0xABC, "V"), - (0xAC6, "X"), - (0xAC7, "V"), - (0xACA, "X"), - (0xACB, "V"), - (0xACE, "X"), - (0xAD0, "V"), - (0xAD1, "X"), - (0xAE0, "V"), - (0xAE4, "X"), - (0xAE6, "V"), - (0xAF2, "X"), - (0xAF9, "V"), - (0xB00, "X"), - (0xB01, "V"), - (0xB04, "X"), - (0xB05, "V"), - (0xB0D, "X"), - (0xB0F, "V"), - (0xB11, "X"), - (0xB13, "V"), - (0xB29, "X"), - (0xB2A, "V"), - (0xB31, "X"), - (0xB32, "V"), - (0xB34, "X"), - (0xB35, "V"), - (0xB3A, "X"), - (0xB3C, "V"), - (0xB45, "X"), - (0xB47, "V"), - (0xB49, "X"), - (0xB4B, "V"), - (0xB4E, "X"), - (0xB55, "V"), - (0xB58, "X"), - (0xB5C, "M", "ଡ଼"), - (0xB5D, "M", "ଢ଼"), - (0xB5E, "X"), - (0xB5F, "V"), - (0xB64, "X"), - (0xB66, "V"), - (0xB78, "X"), - (0xB82, "V"), - (0xB84, "X"), - (0xB85, "V"), - (0xB8B, "X"), - (0xB8E, "V"), - (0xB91, "X"), - (0xB92, "V"), - (0xB96, "X"), - (0xB99, "V"), - (0xB9B, "X"), - (0xB9C, "V"), - (0xB9D, "X"), - (0xB9E, "V"), - (0xBA0, "X"), - (0xBA3, "V"), - (0xBA5, "X"), - (0xBA8, "V"), - (0xBAB, "X"), - (0xBAE, "V"), - (0xBBA, "X"), - (0xBBE, "V"), - (0xBC3, "X"), - (0xBC6, "V"), - (0xBC9, "X"), - (0xBCA, "V"), - (0xBCE, "X"), - (0xBD0, "V"), - (0xBD1, "X"), - (0xBD7, "V"), - (0xBD8, "X"), - (0xBE6, "V"), - (0xBFB, "X"), - (0xC00, "V"), - (0xC0D, "X"), - (0xC0E, "V"), - (0xC11, "X"), - (0xC12, "V"), - (0xC29, "X"), - (0xC2A, "V"), - ] - - -def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC3A, "X"), - (0xC3C, "V"), - (0xC45, "X"), - (0xC46, "V"), - (0xC49, "X"), - (0xC4A, "V"), - (0xC4E, "X"), - (0xC55, "V"), - (0xC57, "X"), - (0xC58, "V"), - (0xC5B, "X"), - (0xC5D, "V"), - (0xC5E, "X"), - (0xC60, "V"), - (0xC64, "X"), - (0xC66, "V"), - (0xC70, "X"), - (0xC77, "V"), - (0xC8D, "X"), - (0xC8E, "V"), - (0xC91, "X"), - (0xC92, "V"), - (0xCA9, "X"), - (0xCAA, "V"), - (0xCB4, "X"), - (0xCB5, "V"), - (0xCBA, "X"), - (0xCBC, "V"), - (0xCC5, "X"), - (0xCC6, "V"), - (0xCC9, "X"), - (0xCCA, "V"), - (0xCCE, "X"), - (0xCD5, "V"), - (0xCD7, "X"), - (0xCDD, "V"), - (0xCDF, "X"), - (0xCE0, "V"), - (0xCE4, "X"), - (0xCE6, "V"), - (0xCF0, "X"), - (0xCF1, "V"), - (0xCF4, "X"), - (0xD00, "V"), - (0xD0D, "X"), - (0xD0E, "V"), - (0xD11, "X"), - (0xD12, "V"), - (0xD45, "X"), - (0xD46, "V"), - (0xD49, "X"), - (0xD4A, "V"), - (0xD50, "X"), - (0xD54, "V"), - (0xD64, "X"), - (0xD66, "V"), - (0xD80, "X"), - (0xD81, "V"), - (0xD84, "X"), - (0xD85, "V"), - (0xD97, "X"), - (0xD9A, "V"), - (0xDB2, "X"), - (0xDB3, "V"), - (0xDBC, "X"), - (0xDBD, "V"), - (0xDBE, "X"), - (0xDC0, "V"), - (0xDC7, "X"), - (0xDCA, "V"), - (0xDCB, "X"), - (0xDCF, "V"), - (0xDD5, "X"), - (0xDD6, "V"), - (0xDD7, "X"), - (0xDD8, "V"), - (0xDE0, "X"), - (0xDE6, "V"), - (0xDF0, "X"), - (0xDF2, "V"), - (0xDF5, "X"), - (0xE01, "V"), - (0xE33, "M", "ํา"), - (0xE34, "V"), - (0xE3B, "X"), - (0xE3F, "V"), - (0xE5C, "X"), - (0xE81, "V"), - (0xE83, "X"), - (0xE84, "V"), - (0xE85, "X"), - (0xE86, "V"), - (0xE8B, "X"), - (0xE8C, "V"), - (0xEA4, "X"), - (0xEA5, "V"), - (0xEA6, "X"), - (0xEA7, "V"), - (0xEB3, "M", "ໍາ"), - (0xEB4, "V"), - ] - - -def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xEBE, "X"), - (0xEC0, "V"), - (0xEC5, "X"), - (0xEC6, "V"), - (0xEC7, "X"), - (0xEC8, "V"), - (0xECF, "X"), - (0xED0, "V"), - (0xEDA, "X"), - (0xEDC, "M", "ຫນ"), - (0xEDD, "M", "ຫມ"), - (0xEDE, "V"), - (0xEE0, "X"), - (0xF00, "V"), - (0xF0C, "M", "་"), - (0xF0D, "V"), - (0xF43, "M", "གྷ"), - (0xF44, "V"), - (0xF48, "X"), - (0xF49, "V"), - (0xF4D, "M", "ཌྷ"), - (0xF4E, "V"), - (0xF52, "M", "དྷ"), - (0xF53, "V"), - (0xF57, "M", "བྷ"), - (0xF58, "V"), - (0xF5C, "M", "ཛྷ"), - (0xF5D, "V"), - (0xF69, "M", "ཀྵ"), - (0xF6A, "V"), - (0xF6D, "X"), - (0xF71, "V"), - (0xF73, "M", "ཱི"), - (0xF74, "V"), - (0xF75, "M", "ཱུ"), - (0xF76, "M", "ྲྀ"), - (0xF77, "M", "ྲཱྀ"), - (0xF78, "M", "ླྀ"), - (0xF79, "M", "ླཱྀ"), - (0xF7A, "V"), - (0xF81, "M", "ཱྀ"), - (0xF82, "V"), - (0xF93, "M", "ྒྷ"), - (0xF94, "V"), - (0xF98, "X"), - (0xF99, "V"), - (0xF9D, "M", "ྜྷ"), - (0xF9E, "V"), - (0xFA2, "M", "ྡྷ"), - (0xFA3, "V"), - (0xFA7, "M", "ྦྷ"), - (0xFA8, "V"), - (0xFAC, "M", "ྫྷ"), - (0xFAD, "V"), - (0xFB9, "M", "ྐྵ"), - (0xFBA, "V"), - (0xFBD, "X"), - (0xFBE, "V"), - (0xFCD, "X"), - (0xFCE, "V"), - (0xFDB, "X"), - (0x1000, "V"), - (0x10A0, "M", "ⴀ"), - (0x10A1, "M", "ⴁ"), - (0x10A2, "M", "ⴂ"), - (0x10A3, "M", "ⴃ"), - (0x10A4, "M", "ⴄ"), - (0x10A5, "M", "ⴅ"), - (0x10A6, "M", "ⴆ"), - (0x10A7, "M", "ⴇ"), - (0x10A8, "M", "ⴈ"), - (0x10A9, "M", "ⴉ"), - (0x10AA, "M", "ⴊ"), - (0x10AB, "M", "ⴋ"), - (0x10AC, "M", "ⴌ"), - (0x10AD, "M", "ⴍ"), - (0x10AE, "M", "ⴎ"), - (0x10AF, "M", "ⴏ"), - (0x10B0, "M", "ⴐ"), - (0x10B1, "M", "ⴑ"), - (0x10B2, "M", "ⴒ"), - (0x10B3, "M", "ⴓ"), - (0x10B4, "M", "ⴔ"), - (0x10B5, "M", "ⴕ"), - (0x10B6, "M", "ⴖ"), - (0x10B7, "M", "ⴗ"), - (0x10B8, "M", "ⴘ"), - (0x10B9, "M", "ⴙ"), - (0x10BA, "M", "ⴚ"), - (0x10BB, "M", "ⴛ"), - (0x10BC, "M", "ⴜ"), - (0x10BD, "M", "ⴝ"), - (0x10BE, "M", "ⴞ"), - (0x10BF, "M", "ⴟ"), - (0x10C0, "M", "ⴠ"), - (0x10C1, "M", "ⴡ"), - (0x10C2, "M", "ⴢ"), - (0x10C3, "M", "ⴣ"), - (0x10C4, "M", "ⴤ"), - (0x10C5, "M", "ⴥ"), - ] - - -def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10C6, "X"), - (0x10C7, "M", "ⴧ"), - (0x10C8, "X"), - (0x10CD, "M", "ⴭ"), - (0x10CE, "X"), - (0x10D0, "V"), - (0x10FC, "M", "ნ"), - (0x10FD, "V"), - (0x115F, "I"), - (0x1161, "V"), - (0x1249, "X"), - (0x124A, "V"), - (0x124E, "X"), - (0x1250, "V"), - (0x1257, "X"), - (0x1258, "V"), - (0x1259, "X"), - (0x125A, "V"), - (0x125E, "X"), - (0x1260, "V"), - (0x1289, "X"), - (0x128A, "V"), - (0x128E, "X"), - (0x1290, "V"), - (0x12B1, "X"), - (0x12B2, "V"), - (0x12B6, "X"), - (0x12B8, "V"), - (0x12BF, "X"), - (0x12C0, "V"), - (0x12C1, "X"), - (0x12C2, "V"), - (0x12C6, "X"), - (0x12C8, "V"), - (0x12D7, "X"), - (0x12D8, "V"), - (0x1311, "X"), - (0x1312, "V"), - (0x1316, "X"), - (0x1318, "V"), - (0x135B, "X"), - (0x135D, "V"), - (0x137D, "X"), - (0x1380, "V"), - (0x139A, "X"), - (0x13A0, "V"), - (0x13F6, "X"), - (0x13F8, "M", "Ᏸ"), - (0x13F9, "M", "Ᏹ"), - (0x13FA, "M", "Ᏺ"), - (0x13FB, "M", "Ᏻ"), - (0x13FC, "M", "Ᏼ"), - (0x13FD, "M", "Ᏽ"), - (0x13FE, "X"), - (0x1400, "V"), - (0x1680, "X"), - (0x1681, "V"), - (0x169D, "X"), - (0x16A0, "V"), - (0x16F9, "X"), - (0x1700, "V"), - (0x1716, "X"), - (0x171F, "V"), - (0x1737, "X"), - (0x1740, "V"), - (0x1754, "X"), - (0x1760, "V"), - (0x176D, "X"), - (0x176E, "V"), - (0x1771, "X"), - (0x1772, "V"), - (0x1774, "X"), - (0x1780, "V"), - (0x17B4, "I"), - (0x17B6, "V"), - (0x17DE, "X"), - (0x17E0, "V"), - (0x17EA, "X"), - (0x17F0, "V"), - (0x17FA, "X"), - (0x1800, "V"), - (0x180B, "I"), - (0x1810, "V"), - (0x181A, "X"), - (0x1820, "V"), - (0x1879, "X"), - (0x1880, "V"), - (0x18AB, "X"), - (0x18B0, "V"), - (0x18F6, "X"), - (0x1900, "V"), - (0x191F, "X"), - (0x1920, "V"), - (0x192C, "X"), - (0x1930, "V"), - (0x193C, "X"), - (0x1940, "V"), - (0x1941, "X"), - (0x1944, "V"), - (0x196E, "X"), - ] - - -def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1970, "V"), - (0x1975, "X"), - (0x1980, "V"), - (0x19AC, "X"), - (0x19B0, "V"), - (0x19CA, "X"), - (0x19D0, "V"), - (0x19DB, "X"), - (0x19DE, "V"), - (0x1A1C, "X"), - (0x1A1E, "V"), - (0x1A5F, "X"), - (0x1A60, "V"), - (0x1A7D, "X"), - (0x1A7F, "V"), - (0x1A8A, "X"), - (0x1A90, "V"), - (0x1A9A, "X"), - (0x1AA0, "V"), - (0x1AAE, "X"), - (0x1AB0, "V"), - (0x1ACF, "X"), - (0x1B00, "V"), - (0x1B4D, "X"), - (0x1B4E, "V"), - (0x1BF4, "X"), - (0x1BFC, "V"), - (0x1C38, "X"), - (0x1C3B, "V"), - (0x1C4A, "X"), - (0x1C4D, "V"), - (0x1C80, "M", "в"), - (0x1C81, "M", "д"), - (0x1C82, "M", "о"), - (0x1C83, "M", "с"), - (0x1C84, "M", "т"), - (0x1C86, "M", "ъ"), - (0x1C87, "M", "ѣ"), - (0x1C88, "M", "ꙋ"), - (0x1C89, "M", "ᲊ"), - (0x1C8A, "V"), - (0x1C8B, "X"), - (0x1C90, "M", "ა"), - (0x1C91, "M", "ბ"), - (0x1C92, "M", "გ"), - (0x1C93, "M", "დ"), - (0x1C94, "M", "ე"), - (0x1C95, "M", "ვ"), - (0x1C96, "M", "ზ"), - (0x1C97, "M", "თ"), - (0x1C98, "M", "ი"), - (0x1C99, "M", "კ"), - (0x1C9A, "M", "ლ"), - (0x1C9B, "M", "მ"), - (0x1C9C, "M", "ნ"), - (0x1C9D, "M", "ო"), - (0x1C9E, "M", "პ"), - (0x1C9F, "M", "ჟ"), - (0x1CA0, "M", "რ"), - (0x1CA1, "M", "ს"), - (0x1CA2, "M", "ტ"), - (0x1CA3, "M", "უ"), - (0x1CA4, "M", "ფ"), - (0x1CA5, "M", "ქ"), - (0x1CA6, "M", "ღ"), - (0x1CA7, "M", "ყ"), - (0x1CA8, "M", "შ"), - (0x1CA9, "M", "ჩ"), - (0x1CAA, "M", "ც"), - (0x1CAB, "M", "ძ"), - (0x1CAC, "M", "წ"), - (0x1CAD, "M", "ჭ"), - (0x1CAE, "M", "ხ"), - (0x1CAF, "M", "ჯ"), - (0x1CB0, "M", "ჰ"), - (0x1CB1, "M", "ჱ"), - (0x1CB2, "M", "ჲ"), - (0x1CB3, "M", "ჳ"), - (0x1CB4, "M", "ჴ"), - (0x1CB5, "M", "ჵ"), - (0x1CB6, "M", "ჶ"), - (0x1CB7, "M", "ჷ"), - (0x1CB8, "M", "ჸ"), - (0x1CB9, "M", "ჹ"), - (0x1CBA, "M", "ჺ"), - (0x1CBB, "X"), - (0x1CBD, "M", "ჽ"), - (0x1CBE, "M", "ჾ"), - (0x1CBF, "M", "ჿ"), - (0x1CC0, "V"), - (0x1CC8, "X"), - (0x1CD0, "V"), - (0x1CFB, "X"), - (0x1D00, "V"), - (0x1D2C, "M", "a"), - (0x1D2D, "M", "æ"), - (0x1D2E, "M", "b"), - (0x1D2F, "V"), - (0x1D30, "M", "d"), - (0x1D31, "M", "e"), - ] - - -def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D32, "M", "ǝ"), - (0x1D33, "M", "g"), - (0x1D34, "M", "h"), - (0x1D35, "M", "i"), - (0x1D36, "M", "j"), - (0x1D37, "M", "k"), - (0x1D38, "M", "l"), - (0x1D39, "M", "m"), - (0x1D3A, "M", "n"), - (0x1D3B, "V"), - (0x1D3C, "M", "o"), - (0x1D3D, "M", "ȣ"), - (0x1D3E, "M", "p"), - (0x1D3F, "M", "r"), - (0x1D40, "M", "t"), - (0x1D41, "M", "u"), - (0x1D42, "M", "w"), - (0x1D43, "M", "a"), - (0x1D44, "M", "ɐ"), - (0x1D45, "M", "ɑ"), - (0x1D46, "M", "ᴂ"), - (0x1D47, "M", "b"), - (0x1D48, "M", "d"), - (0x1D49, "M", "e"), - (0x1D4A, "M", "ə"), - (0x1D4B, "M", "ɛ"), - (0x1D4C, "M", "ɜ"), - (0x1D4D, "M", "g"), - (0x1D4E, "V"), - (0x1D4F, "M", "k"), - (0x1D50, "M", "m"), - (0x1D51, "M", "ŋ"), - (0x1D52, "M", "o"), - (0x1D53, "M", "ɔ"), - (0x1D54, "M", "ᴖ"), - (0x1D55, "M", "ᴗ"), - (0x1D56, "M", "p"), - (0x1D57, "M", "t"), - (0x1D58, "M", "u"), - (0x1D59, "M", "ᴝ"), - (0x1D5A, "M", "ɯ"), - (0x1D5B, "M", "v"), - (0x1D5C, "M", "ᴥ"), - (0x1D5D, "M", "β"), - (0x1D5E, "M", "γ"), - (0x1D5F, "M", "δ"), - (0x1D60, "M", "φ"), - (0x1D61, "M", "χ"), - (0x1D62, "M", "i"), - (0x1D63, "M", "r"), - (0x1D64, "M", "u"), - (0x1D65, "M", "v"), - (0x1D66, "M", "β"), - (0x1D67, "M", "γ"), - (0x1D68, "M", "ρ"), - (0x1D69, "M", "φ"), - (0x1D6A, "M", "χ"), - (0x1D6B, "V"), - (0x1D78, "M", "н"), - (0x1D79, "V"), - (0x1D9B, "M", "ɒ"), - (0x1D9C, "M", "c"), - (0x1D9D, "M", "ɕ"), - (0x1D9E, "M", "ð"), - (0x1D9F, "M", "ɜ"), - (0x1DA0, "M", "f"), - (0x1DA1, "M", "ɟ"), - (0x1DA2, "M", "ɡ"), - (0x1DA3, "M", "ɥ"), - (0x1DA4, "M", "ɨ"), - (0x1DA5, "M", "ɩ"), - (0x1DA6, "M", "ɪ"), - (0x1DA7, "M", "ᵻ"), - (0x1DA8, "M", "ʝ"), - (0x1DA9, "M", "ɭ"), - (0x1DAA, "M", "ᶅ"), - (0x1DAB, "M", "ʟ"), - (0x1DAC, "M", "ɱ"), - (0x1DAD, "M", "ɰ"), - (0x1DAE, "M", "ɲ"), - (0x1DAF, "M", "ɳ"), - (0x1DB0, "M", "ɴ"), - (0x1DB1, "M", "ɵ"), - (0x1DB2, "M", "ɸ"), - (0x1DB3, "M", "ʂ"), - (0x1DB4, "M", "ʃ"), - (0x1DB5, "M", "ƫ"), - (0x1DB6, "M", "ʉ"), - (0x1DB7, "M", "ʊ"), - (0x1DB8, "M", "ᴜ"), - (0x1DB9, "M", "ʋ"), - (0x1DBA, "M", "ʌ"), - (0x1DBB, "M", "z"), - (0x1DBC, "M", "ʐ"), - (0x1DBD, "M", "ʑ"), - (0x1DBE, "M", "ʒ"), - (0x1DBF, "M", "θ"), - (0x1DC0, "V"), - (0x1E00, "M", "ḁ"), - (0x1E01, "V"), - ] - - -def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E02, "M", "ḃ"), - (0x1E03, "V"), - (0x1E04, "M", "ḅ"), - (0x1E05, "V"), - (0x1E06, "M", "ḇ"), - (0x1E07, "V"), - (0x1E08, "M", "ḉ"), - (0x1E09, "V"), - (0x1E0A, "M", "ḋ"), - (0x1E0B, "V"), - (0x1E0C, "M", "ḍ"), - (0x1E0D, "V"), - (0x1E0E, "M", "ḏ"), - (0x1E0F, "V"), - (0x1E10, "M", "ḑ"), - (0x1E11, "V"), - (0x1E12, "M", "ḓ"), - (0x1E13, "V"), - (0x1E14, "M", "ḕ"), - (0x1E15, "V"), - (0x1E16, "M", "ḗ"), - (0x1E17, "V"), - (0x1E18, "M", "ḙ"), - (0x1E19, "V"), - (0x1E1A, "M", "ḛ"), - (0x1E1B, "V"), - (0x1E1C, "M", "ḝ"), - (0x1E1D, "V"), - (0x1E1E, "M", "ḟ"), - (0x1E1F, "V"), - (0x1E20, "M", "ḡ"), - (0x1E21, "V"), - (0x1E22, "M", "ḣ"), - (0x1E23, "V"), - (0x1E24, "M", "ḥ"), - (0x1E25, "V"), - (0x1E26, "M", "ḧ"), - (0x1E27, "V"), - (0x1E28, "M", "ḩ"), - (0x1E29, "V"), - (0x1E2A, "M", "ḫ"), - (0x1E2B, "V"), - (0x1E2C, "M", "ḭ"), - (0x1E2D, "V"), - (0x1E2E, "M", "ḯ"), - (0x1E2F, "V"), - (0x1E30, "M", "ḱ"), - (0x1E31, "V"), - (0x1E32, "M", "ḳ"), - (0x1E33, "V"), - (0x1E34, "M", "ḵ"), - (0x1E35, "V"), - (0x1E36, "M", "ḷ"), - (0x1E37, "V"), - (0x1E38, "M", "ḹ"), - (0x1E39, "V"), - (0x1E3A, "M", "ḻ"), - (0x1E3B, "V"), - (0x1E3C, "M", "ḽ"), - (0x1E3D, "V"), - (0x1E3E, "M", "ḿ"), - (0x1E3F, "V"), - (0x1E40, "M", "ṁ"), - (0x1E41, "V"), - (0x1E42, "M", "ṃ"), - (0x1E43, "V"), - (0x1E44, "M", "ṅ"), - (0x1E45, "V"), - (0x1E46, "M", "ṇ"), - (0x1E47, "V"), - (0x1E48, "M", "ṉ"), - (0x1E49, "V"), - (0x1E4A, "M", "ṋ"), - (0x1E4B, "V"), - (0x1E4C, "M", "ṍ"), - (0x1E4D, "V"), - (0x1E4E, "M", "ṏ"), - (0x1E4F, "V"), - (0x1E50, "M", "ṑ"), - (0x1E51, "V"), - (0x1E52, "M", "ṓ"), - (0x1E53, "V"), - (0x1E54, "M", "ṕ"), - (0x1E55, "V"), - (0x1E56, "M", "ṗ"), - (0x1E57, "V"), - (0x1E58, "M", "ṙ"), - (0x1E59, "V"), - (0x1E5A, "M", "ṛ"), - (0x1E5B, "V"), - (0x1E5C, "M", "ṝ"), - (0x1E5D, "V"), - (0x1E5E, "M", "ṟ"), - (0x1E5F, "V"), - (0x1E60, "M", "ṡ"), - (0x1E61, "V"), - (0x1E62, "M", "ṣ"), - (0x1E63, "V"), - (0x1E64, "M", "ṥ"), - (0x1E65, "V"), - ] - - -def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E66, "M", "ṧ"), - (0x1E67, "V"), - (0x1E68, "M", "ṩ"), - (0x1E69, "V"), - (0x1E6A, "M", "ṫ"), - (0x1E6B, "V"), - (0x1E6C, "M", "ṭ"), - (0x1E6D, "V"), - (0x1E6E, "M", "ṯ"), - (0x1E6F, "V"), - (0x1E70, "M", "ṱ"), - (0x1E71, "V"), - (0x1E72, "M", "ṳ"), - (0x1E73, "V"), - (0x1E74, "M", "ṵ"), - (0x1E75, "V"), - (0x1E76, "M", "ṷ"), - (0x1E77, "V"), - (0x1E78, "M", "ṹ"), - (0x1E79, "V"), - (0x1E7A, "M", "ṻ"), - (0x1E7B, "V"), - (0x1E7C, "M", "ṽ"), - (0x1E7D, "V"), - (0x1E7E, "M", "ṿ"), - (0x1E7F, "V"), - (0x1E80, "M", "ẁ"), - (0x1E81, "V"), - (0x1E82, "M", "ẃ"), - (0x1E83, "V"), - (0x1E84, "M", "ẅ"), - (0x1E85, "V"), - (0x1E86, "M", "ẇ"), - (0x1E87, "V"), - (0x1E88, "M", "ẉ"), - (0x1E89, "V"), - (0x1E8A, "M", "ẋ"), - (0x1E8B, "V"), - (0x1E8C, "M", "ẍ"), - (0x1E8D, "V"), - (0x1E8E, "M", "ẏ"), - (0x1E8F, "V"), - (0x1E90, "M", "ẑ"), - (0x1E91, "V"), - (0x1E92, "M", "ẓ"), - (0x1E93, "V"), - (0x1E94, "M", "ẕ"), - (0x1E95, "V"), - (0x1E9A, "M", "aʾ"), - (0x1E9B, "M", "ṡ"), - (0x1E9C, "V"), - (0x1E9E, "M", "ß"), - (0x1E9F, "V"), - (0x1EA0, "M", "ạ"), - (0x1EA1, "V"), - (0x1EA2, "M", "ả"), - (0x1EA3, "V"), - (0x1EA4, "M", "ấ"), - (0x1EA5, "V"), - (0x1EA6, "M", "ầ"), - (0x1EA7, "V"), - (0x1EA8, "M", "ẩ"), - (0x1EA9, "V"), - (0x1EAA, "M", "ẫ"), - (0x1EAB, "V"), - (0x1EAC, "M", "ậ"), - (0x1EAD, "V"), - (0x1EAE, "M", "ắ"), - (0x1EAF, "V"), - (0x1EB0, "M", "ằ"), - (0x1EB1, "V"), - (0x1EB2, "M", "ẳ"), - (0x1EB3, "V"), - (0x1EB4, "M", "ẵ"), - (0x1EB5, "V"), - (0x1EB6, "M", "ặ"), - (0x1EB7, "V"), - (0x1EB8, "M", "ẹ"), - (0x1EB9, "V"), - (0x1EBA, "M", "ẻ"), - (0x1EBB, "V"), - (0x1EBC, "M", "ẽ"), - (0x1EBD, "V"), - (0x1EBE, "M", "ế"), - (0x1EBF, "V"), - (0x1EC0, "M", "ề"), - (0x1EC1, "V"), - (0x1EC2, "M", "ể"), - (0x1EC3, "V"), - (0x1EC4, "M", "ễ"), - (0x1EC5, "V"), - (0x1EC6, "M", "ệ"), - (0x1EC7, "V"), - (0x1EC8, "M", "ỉ"), - (0x1EC9, "V"), - (0x1ECA, "M", "ị"), - (0x1ECB, "V"), - (0x1ECC, "M", "ọ"), - (0x1ECD, "V"), - (0x1ECE, "M", "ỏ"), - ] - - -def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1ECF, "V"), - (0x1ED0, "M", "ố"), - (0x1ED1, "V"), - (0x1ED2, "M", "ồ"), - (0x1ED3, "V"), - (0x1ED4, "M", "ổ"), - (0x1ED5, "V"), - (0x1ED6, "M", "ỗ"), - (0x1ED7, "V"), - (0x1ED8, "M", "ộ"), - (0x1ED9, "V"), - (0x1EDA, "M", "ớ"), - (0x1EDB, "V"), - (0x1EDC, "M", "ờ"), - (0x1EDD, "V"), - (0x1EDE, "M", "ở"), - (0x1EDF, "V"), - (0x1EE0, "M", "ỡ"), - (0x1EE1, "V"), - (0x1EE2, "M", "ợ"), - (0x1EE3, "V"), - (0x1EE4, "M", "ụ"), - (0x1EE5, "V"), - (0x1EE6, "M", "ủ"), - (0x1EE7, "V"), - (0x1EE8, "M", "ứ"), - (0x1EE9, "V"), - (0x1EEA, "M", "ừ"), - (0x1EEB, "V"), - (0x1EEC, "M", "ử"), - (0x1EED, "V"), - (0x1EEE, "M", "ữ"), - (0x1EEF, "V"), - (0x1EF0, "M", "ự"), - (0x1EF1, "V"), - (0x1EF2, "M", "ỳ"), - (0x1EF3, "V"), - (0x1EF4, "M", "ỵ"), - (0x1EF5, "V"), - (0x1EF6, "M", "ỷ"), - (0x1EF7, "V"), - (0x1EF8, "M", "ỹ"), - (0x1EF9, "V"), - (0x1EFA, "M", "ỻ"), - (0x1EFB, "V"), - (0x1EFC, "M", "ỽ"), - (0x1EFD, "V"), - (0x1EFE, "M", "ỿ"), - (0x1EFF, "V"), - (0x1F08, "M", "ἀ"), - (0x1F09, "M", "ἁ"), - (0x1F0A, "M", "ἂ"), - (0x1F0B, "M", "ἃ"), - (0x1F0C, "M", "ἄ"), - (0x1F0D, "M", "ἅ"), - (0x1F0E, "M", "ἆ"), - (0x1F0F, "M", "ἇ"), - (0x1F10, "V"), - (0x1F16, "X"), - (0x1F18, "M", "ἐ"), - (0x1F19, "M", "ἑ"), - (0x1F1A, "M", "ἒ"), - (0x1F1B, "M", "ἓ"), - (0x1F1C, "M", "ἔ"), - (0x1F1D, "M", "ἕ"), - (0x1F1E, "X"), - (0x1F20, "V"), - (0x1F28, "M", "ἠ"), - (0x1F29, "M", "ἡ"), - (0x1F2A, "M", "ἢ"), - (0x1F2B, "M", "ἣ"), - (0x1F2C, "M", "ἤ"), - (0x1F2D, "M", "ἥ"), - (0x1F2E, "M", "ἦ"), - (0x1F2F, "M", "ἧ"), - (0x1F30, "V"), - (0x1F38, "M", "ἰ"), - (0x1F39, "M", "ἱ"), - (0x1F3A, "M", "ἲ"), - (0x1F3B, "M", "ἳ"), - (0x1F3C, "M", "ἴ"), - (0x1F3D, "M", "ἵ"), - (0x1F3E, "M", "ἶ"), - (0x1F3F, "M", "ἷ"), - (0x1F40, "V"), - (0x1F46, "X"), - (0x1F48, "M", "ὀ"), - (0x1F49, "M", "ὁ"), - (0x1F4A, "M", "ὂ"), - (0x1F4B, "M", "ὃ"), - (0x1F4C, "M", "ὄ"), - (0x1F4D, "M", "ὅ"), - (0x1F4E, "X"), - (0x1F50, "V"), - (0x1F58, "X"), - (0x1F59, "M", "ὑ"), - (0x1F5A, "X"), - (0x1F5B, "M", "ὓ"), - (0x1F5C, "X"), - (0x1F5D, "M", "ὕ"), - ] - - -def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F5E, "X"), - (0x1F5F, "M", "ὗ"), - (0x1F60, "V"), - (0x1F68, "M", "ὠ"), - (0x1F69, "M", "ὡ"), - (0x1F6A, "M", "ὢ"), - (0x1F6B, "M", "ὣ"), - (0x1F6C, "M", "ὤ"), - (0x1F6D, "M", "ὥ"), - (0x1F6E, "M", "ὦ"), - (0x1F6F, "M", "ὧ"), - (0x1F70, "V"), - (0x1F71, "M", "ά"), - (0x1F72, "V"), - (0x1F73, "M", "έ"), - (0x1F74, "V"), - (0x1F75, "M", "ή"), - (0x1F76, "V"), - (0x1F77, "M", "ί"), - (0x1F78, "V"), - (0x1F79, "M", "ό"), - (0x1F7A, "V"), - (0x1F7B, "M", "ύ"), - (0x1F7C, "V"), - (0x1F7D, "M", "ώ"), - (0x1F7E, "X"), - (0x1F80, "M", "ἀι"), - (0x1F81, "M", "ἁι"), - (0x1F82, "M", "ἂι"), - (0x1F83, "M", "ἃι"), - (0x1F84, "M", "ἄι"), - (0x1F85, "M", "ἅι"), - (0x1F86, "M", "ἆι"), - (0x1F87, "M", "ἇι"), - (0x1F88, "M", "ἀι"), - (0x1F89, "M", "ἁι"), - (0x1F8A, "M", "ἂι"), - (0x1F8B, "M", "ἃι"), - (0x1F8C, "M", "ἄι"), - (0x1F8D, "M", "ἅι"), - (0x1F8E, "M", "ἆι"), - (0x1F8F, "M", "ἇι"), - (0x1F90, "M", "ἠι"), - (0x1F91, "M", "ἡι"), - (0x1F92, "M", "ἢι"), - (0x1F93, "M", "ἣι"), - (0x1F94, "M", "ἤι"), - (0x1F95, "M", "ἥι"), - (0x1F96, "M", "ἦι"), - (0x1F97, "M", "ἧι"), - (0x1F98, "M", "ἠι"), - (0x1F99, "M", "ἡι"), - (0x1F9A, "M", "ἢι"), - (0x1F9B, "M", "ἣι"), - (0x1F9C, "M", "ἤι"), - (0x1F9D, "M", "ἥι"), - (0x1F9E, "M", "ἦι"), - (0x1F9F, "M", "ἧι"), - (0x1FA0, "M", "ὠι"), - (0x1FA1, "M", "ὡι"), - (0x1FA2, "M", "ὢι"), - (0x1FA3, "M", "ὣι"), - (0x1FA4, "M", "ὤι"), - (0x1FA5, "M", "ὥι"), - (0x1FA6, "M", "ὦι"), - (0x1FA7, "M", "ὧι"), - (0x1FA8, "M", "ὠι"), - (0x1FA9, "M", "ὡι"), - (0x1FAA, "M", "ὢι"), - (0x1FAB, "M", "ὣι"), - (0x1FAC, "M", "ὤι"), - (0x1FAD, "M", "ὥι"), - (0x1FAE, "M", "ὦι"), - (0x1FAF, "M", "ὧι"), - (0x1FB0, "V"), - (0x1FB2, "M", "ὰι"), - (0x1FB3, "M", "αι"), - (0x1FB4, "M", "άι"), - (0x1FB5, "X"), - (0x1FB6, "V"), - (0x1FB7, "M", "ᾶι"), - (0x1FB8, "M", "ᾰ"), - (0x1FB9, "M", "ᾱ"), - (0x1FBA, "M", "ὰ"), - (0x1FBB, "M", "ά"), - (0x1FBC, "M", "αι"), - (0x1FBD, "M", " ̓"), - (0x1FBE, "M", "ι"), - (0x1FBF, "M", " ̓"), - (0x1FC0, "M", " ͂"), - (0x1FC1, "M", " ̈͂"), - (0x1FC2, "M", "ὴι"), - (0x1FC3, "M", "ηι"), - (0x1FC4, "M", "ήι"), - (0x1FC5, "X"), - (0x1FC6, "V"), - (0x1FC7, "M", "ῆι"), - (0x1FC8, "M", "ὲ"), - (0x1FC9, "M", "έ"), - (0x1FCA, "M", "ὴ"), - ] - - -def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1FCB, "M", "ή"), - (0x1FCC, "M", "ηι"), - (0x1FCD, "M", " ̓̀"), - (0x1FCE, "M", " ̓́"), - (0x1FCF, "M", " ̓͂"), - (0x1FD0, "V"), - (0x1FD3, "M", "ΐ"), - (0x1FD4, "X"), - (0x1FD6, "V"), - (0x1FD8, "M", "ῐ"), - (0x1FD9, "M", "ῑ"), - (0x1FDA, "M", "ὶ"), - (0x1FDB, "M", "ί"), - (0x1FDC, "X"), - (0x1FDD, "M", " ̔̀"), - (0x1FDE, "M", " ̔́"), - (0x1FDF, "M", " ̔͂"), - (0x1FE0, "V"), - (0x1FE3, "M", "ΰ"), - (0x1FE4, "V"), - (0x1FE8, "M", "ῠ"), - (0x1FE9, "M", "ῡ"), - (0x1FEA, "M", "ὺ"), - (0x1FEB, "M", "ύ"), - (0x1FEC, "M", "ῥ"), - (0x1FED, "M", " ̈̀"), - (0x1FEE, "M", " ̈́"), - (0x1FEF, "M", "`"), - (0x1FF0, "X"), - (0x1FF2, "M", "ὼι"), - (0x1FF3, "M", "ωι"), - (0x1FF4, "M", "ώι"), - (0x1FF5, "X"), - (0x1FF6, "V"), - (0x1FF7, "M", "ῶι"), - (0x1FF8, "M", "ὸ"), - (0x1FF9, "M", "ό"), - (0x1FFA, "M", "ὼ"), - (0x1FFB, "M", "ώ"), - (0x1FFC, "M", "ωι"), - (0x1FFD, "M", " ́"), - (0x1FFE, "M", " ̔"), - (0x1FFF, "X"), - (0x2000, "M", " "), - (0x200B, "I"), - (0x200C, "D", ""), - (0x200E, "X"), - (0x2010, "V"), - (0x2011, "M", "‐"), - (0x2012, "V"), - (0x2017, "M", " ̳"), - (0x2018, "V"), - (0x2024, "X"), - (0x2027, "V"), - (0x2028, "X"), - (0x202F, "M", " "), - (0x2030, "V"), - (0x2033, "M", "′′"), - (0x2034, "M", "′′′"), - (0x2035, "V"), - (0x2036, "M", "‵‵"), - (0x2037, "M", "‵‵‵"), - (0x2038, "V"), - (0x203C, "M", "!!"), - (0x203D, "V"), - (0x203E, "M", " ̅"), - (0x203F, "V"), - (0x2047, "M", "??"), - (0x2048, "M", "?!"), - (0x2049, "M", "!?"), - (0x204A, "V"), - (0x2057, "M", "′′′′"), - (0x2058, "V"), - (0x205F, "M", " "), - (0x2060, "I"), - (0x2065, "X"), - (0x206A, "I"), - (0x2070, "M", "0"), - (0x2071, "M", "i"), - (0x2072, "X"), - (0x2074, "M", "4"), - (0x2075, "M", "5"), - (0x2076, "M", "6"), - (0x2077, "M", "7"), - (0x2078, "M", "8"), - (0x2079, "M", "9"), - (0x207A, "M", "+"), - (0x207B, "M", "−"), - (0x207C, "M", "="), - (0x207D, "M", "("), - (0x207E, "M", ")"), - (0x207F, "M", "n"), - (0x2080, "M", "0"), - (0x2081, "M", "1"), - (0x2082, "M", "2"), - (0x2083, "M", "3"), - (0x2084, "M", "4"), - (0x2085, "M", "5"), - (0x2086, "M", "6"), - (0x2087, "M", "7"), - ] - - -def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2088, "M", "8"), - (0x2089, "M", "9"), - (0x208A, "M", "+"), - (0x208B, "M", "−"), - (0x208C, "M", "="), - (0x208D, "M", "("), - (0x208E, "M", ")"), - (0x208F, "X"), - (0x2090, "M", "a"), - (0x2091, "M", "e"), - (0x2092, "M", "o"), - (0x2093, "M", "x"), - (0x2094, "M", "ə"), - (0x2095, "M", "h"), - (0x2096, "M", "k"), - (0x2097, "M", "l"), - (0x2098, "M", "m"), - (0x2099, "M", "n"), - (0x209A, "M", "p"), - (0x209B, "M", "s"), - (0x209C, "M", "t"), - (0x209D, "X"), - (0x20A0, "V"), - (0x20A8, "M", "rs"), - (0x20A9, "V"), - (0x20C1, "X"), - (0x20D0, "V"), - (0x20F1, "X"), - (0x2100, "M", "a/c"), - (0x2101, "M", "a/s"), - (0x2102, "M", "c"), - (0x2103, "M", "°c"), - (0x2104, "V"), - (0x2105, "M", "c/o"), - (0x2106, "M", "c/u"), - (0x2107, "M", "ɛ"), - (0x2108, "V"), - (0x2109, "M", "°f"), - (0x210A, "M", "g"), - (0x210B, "M", "h"), - (0x210F, "M", "ħ"), - (0x2110, "M", "i"), - (0x2112, "M", "l"), - (0x2114, "V"), - (0x2115, "M", "n"), - (0x2116, "M", "no"), - (0x2117, "V"), - (0x2119, "M", "p"), - (0x211A, "M", "q"), - (0x211B, "M", "r"), - (0x211E, "V"), - (0x2120, "M", "sm"), - (0x2121, "M", "tel"), - (0x2122, "M", "tm"), - (0x2123, "V"), - (0x2124, "M", "z"), - (0x2125, "V"), - (0x2126, "M", "ω"), - (0x2127, "V"), - (0x2128, "M", "z"), - (0x2129, "V"), - (0x212A, "M", "k"), - (0x212B, "M", "å"), - (0x212C, "M", "b"), - (0x212D, "M", "c"), - (0x212E, "V"), - (0x212F, "M", "e"), - (0x2131, "M", "f"), - (0x2132, "M", "ⅎ"), - (0x2133, "M", "m"), - (0x2134, "M", "o"), - (0x2135, "M", "א"), - (0x2136, "M", "ב"), - (0x2137, "M", "ג"), - (0x2138, "M", "ד"), - (0x2139, "M", "i"), - (0x213A, "V"), - (0x213B, "M", "fax"), - (0x213C, "M", "π"), - (0x213D, "M", "γ"), - (0x213F, "M", "π"), - (0x2140, "M", "∑"), - (0x2141, "V"), - (0x2145, "M", "d"), - (0x2147, "M", "e"), - (0x2148, "M", "i"), - (0x2149, "M", "j"), - (0x214A, "V"), - (0x2150, "M", "1⁄7"), - (0x2151, "M", "1⁄9"), - (0x2152, "M", "1⁄10"), - (0x2153, "M", "1⁄3"), - (0x2154, "M", "2⁄3"), - (0x2155, "M", "1⁄5"), - (0x2156, "M", "2⁄5"), - (0x2157, "M", "3⁄5"), - (0x2158, "M", "4⁄5"), - (0x2159, "M", "1⁄6"), - (0x215A, "M", "5⁄6"), - (0x215B, "M", "1⁄8"), - ] - - -def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x215C, "M", "3⁄8"), - (0x215D, "M", "5⁄8"), - (0x215E, "M", "7⁄8"), - (0x215F, "M", "1⁄"), - (0x2160, "M", "i"), - (0x2161, "M", "ii"), - (0x2162, "M", "iii"), - (0x2163, "M", "iv"), - (0x2164, "M", "v"), - (0x2165, "M", "vi"), - (0x2166, "M", "vii"), - (0x2167, "M", "viii"), - (0x2168, "M", "ix"), - (0x2169, "M", "x"), - (0x216A, "M", "xi"), - (0x216B, "M", "xii"), - (0x216C, "M", "l"), - (0x216D, "M", "c"), - (0x216E, "M", "d"), - (0x216F, "M", "m"), - (0x2170, "M", "i"), - (0x2171, "M", "ii"), - (0x2172, "M", "iii"), - (0x2173, "M", "iv"), - (0x2174, "M", "v"), - (0x2175, "M", "vi"), - (0x2176, "M", "vii"), - (0x2177, "M", "viii"), - (0x2178, "M", "ix"), - (0x2179, "M", "x"), - (0x217A, "M", "xi"), - (0x217B, "M", "xii"), - (0x217C, "M", "l"), - (0x217D, "M", "c"), - (0x217E, "M", "d"), - (0x217F, "M", "m"), - (0x2180, "V"), - (0x2183, "M", "ↄ"), - (0x2184, "V"), - (0x2189, "M", "0⁄3"), - (0x218A, "V"), - (0x218C, "X"), - (0x2190, "V"), - (0x222C, "M", "∫∫"), - (0x222D, "M", "∫∫∫"), - (0x222E, "V"), - (0x222F, "M", "∮∮"), - (0x2230, "M", "∮∮∮"), - (0x2231, "V"), - (0x2329, "M", "〈"), - (0x232A, "M", "〉"), - (0x232B, "V"), - (0x242A, "X"), - (0x2440, "V"), - (0x244B, "X"), - (0x2460, "M", "1"), - (0x2461, "M", "2"), - (0x2462, "M", "3"), - (0x2463, "M", "4"), - (0x2464, "M", "5"), - (0x2465, "M", "6"), - (0x2466, "M", "7"), - (0x2467, "M", "8"), - (0x2468, "M", "9"), - (0x2469, "M", "10"), - (0x246A, "M", "11"), - (0x246B, "M", "12"), - (0x246C, "M", "13"), - (0x246D, "M", "14"), - (0x246E, "M", "15"), - (0x246F, "M", "16"), - (0x2470, "M", "17"), - (0x2471, "M", "18"), - (0x2472, "M", "19"), - (0x2473, "M", "20"), - (0x2474, "M", "(1)"), - (0x2475, "M", "(2)"), - (0x2476, "M", "(3)"), - (0x2477, "M", "(4)"), - (0x2478, "M", "(5)"), - (0x2479, "M", "(6)"), - (0x247A, "M", "(7)"), - (0x247B, "M", "(8)"), - (0x247C, "M", "(9)"), - (0x247D, "M", "(10)"), - (0x247E, "M", "(11)"), - (0x247F, "M", "(12)"), - (0x2480, "M", "(13)"), - (0x2481, "M", "(14)"), - (0x2482, "M", "(15)"), - (0x2483, "M", "(16)"), - (0x2484, "M", "(17)"), - (0x2485, "M", "(18)"), - (0x2486, "M", "(19)"), - (0x2487, "M", "(20)"), - (0x2488, "X"), - (0x249C, "M", "(a)"), - (0x249D, "M", "(b)"), - (0x249E, "M", "(c)"), - (0x249F, "M", "(d)"), - ] - - -def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x24A0, "M", "(e)"), - (0x24A1, "M", "(f)"), - (0x24A2, "M", "(g)"), - (0x24A3, "M", "(h)"), - (0x24A4, "M", "(i)"), - (0x24A5, "M", "(j)"), - (0x24A6, "M", "(k)"), - (0x24A7, "M", "(l)"), - (0x24A8, "M", "(m)"), - (0x24A9, "M", "(n)"), - (0x24AA, "M", "(o)"), - (0x24AB, "M", "(p)"), - (0x24AC, "M", "(q)"), - (0x24AD, "M", "(r)"), - (0x24AE, "M", "(s)"), - (0x24AF, "M", "(t)"), - (0x24B0, "M", "(u)"), - (0x24B1, "M", "(v)"), - (0x24B2, "M", "(w)"), - (0x24B3, "M", "(x)"), - (0x24B4, "M", "(y)"), - (0x24B5, "M", "(z)"), - (0x24B6, "M", "a"), - (0x24B7, "M", "b"), - (0x24B8, "M", "c"), - (0x24B9, "M", "d"), - (0x24BA, "M", "e"), - (0x24BB, "M", "f"), - (0x24BC, "M", "g"), - (0x24BD, "M", "h"), - (0x24BE, "M", "i"), - (0x24BF, "M", "j"), - (0x24C0, "M", "k"), - (0x24C1, "M", "l"), - (0x24C2, "M", "m"), - (0x24C3, "M", "n"), - (0x24C4, "M", "o"), - (0x24C5, "M", "p"), - (0x24C6, "M", "q"), - (0x24C7, "M", "r"), - (0x24C8, "M", "s"), - (0x24C9, "M", "t"), - (0x24CA, "M", "u"), - (0x24CB, "M", "v"), - (0x24CC, "M", "w"), - (0x24CD, "M", "x"), - (0x24CE, "M", "y"), - (0x24CF, "M", "z"), - (0x24D0, "M", "a"), - (0x24D1, "M", "b"), - (0x24D2, "M", "c"), - (0x24D3, "M", "d"), - (0x24D4, "M", "e"), - (0x24D5, "M", "f"), - (0x24D6, "M", "g"), - (0x24D7, "M", "h"), - (0x24D8, "M", "i"), - (0x24D9, "M", "j"), - (0x24DA, "M", "k"), - (0x24DB, "M", "l"), - (0x24DC, "M", "m"), - (0x24DD, "M", "n"), - (0x24DE, "M", "o"), - (0x24DF, "M", "p"), - (0x24E0, "M", "q"), - (0x24E1, "M", "r"), - (0x24E2, "M", "s"), - (0x24E3, "M", "t"), - (0x24E4, "M", "u"), - (0x24E5, "M", "v"), - (0x24E6, "M", "w"), - (0x24E7, "M", "x"), - (0x24E8, "M", "y"), - (0x24E9, "M", "z"), - (0x24EA, "M", "0"), - (0x24EB, "V"), - (0x2A0C, "M", "∫∫∫∫"), - (0x2A0D, "V"), - (0x2A74, "M", "::="), - (0x2A75, "M", "=="), - (0x2A76, "M", "==="), - (0x2A77, "V"), - (0x2ADC, "M", "⫝̸"), - (0x2ADD, "V"), - (0x2B74, "X"), - (0x2B76, "V"), - (0x2B96, "X"), - (0x2B97, "V"), - (0x2C00, "M", "ⰰ"), - (0x2C01, "M", "ⰱ"), - (0x2C02, "M", "ⰲ"), - (0x2C03, "M", "ⰳ"), - (0x2C04, "M", "ⰴ"), - (0x2C05, "M", "ⰵ"), - (0x2C06, "M", "ⰶ"), - (0x2C07, "M", "ⰷ"), - (0x2C08, "M", "ⰸ"), - (0x2C09, "M", "ⰹ"), - (0x2C0A, "M", "ⰺ"), - (0x2C0B, "M", "ⰻ"), - ] - - -def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2C0C, "M", "ⰼ"), - (0x2C0D, "M", "ⰽ"), - (0x2C0E, "M", "ⰾ"), - (0x2C0F, "M", "ⰿ"), - (0x2C10, "M", "ⱀ"), - (0x2C11, "M", "ⱁ"), - (0x2C12, "M", "ⱂ"), - (0x2C13, "M", "ⱃ"), - (0x2C14, "M", "ⱄ"), - (0x2C15, "M", "ⱅ"), - (0x2C16, "M", "ⱆ"), - (0x2C17, "M", "ⱇ"), - (0x2C18, "M", "ⱈ"), - (0x2C19, "M", "ⱉ"), - (0x2C1A, "M", "ⱊ"), - (0x2C1B, "M", "ⱋ"), - (0x2C1C, "M", "ⱌ"), - (0x2C1D, "M", "ⱍ"), - (0x2C1E, "M", "ⱎ"), - (0x2C1F, "M", "ⱏ"), - (0x2C20, "M", "ⱐ"), - (0x2C21, "M", "ⱑ"), - (0x2C22, "M", "ⱒ"), - (0x2C23, "M", "ⱓ"), - (0x2C24, "M", "ⱔ"), - (0x2C25, "M", "ⱕ"), - (0x2C26, "M", "ⱖ"), - (0x2C27, "M", "ⱗ"), - (0x2C28, "M", "ⱘ"), - (0x2C29, "M", "ⱙ"), - (0x2C2A, "M", "ⱚ"), - (0x2C2B, "M", "ⱛ"), - (0x2C2C, "M", "ⱜ"), - (0x2C2D, "M", "ⱝ"), - (0x2C2E, "M", "ⱞ"), - (0x2C2F, "M", "ⱟ"), - (0x2C30, "V"), - (0x2C60, "M", "ⱡ"), - (0x2C61, "V"), - (0x2C62, "M", "ɫ"), - (0x2C63, "M", "ᵽ"), - (0x2C64, "M", "ɽ"), - (0x2C65, "V"), - (0x2C67, "M", "ⱨ"), - (0x2C68, "V"), - (0x2C69, "M", "ⱪ"), - (0x2C6A, "V"), - (0x2C6B, "M", "ⱬ"), - (0x2C6C, "V"), - (0x2C6D, "M", "ɑ"), - (0x2C6E, "M", "ɱ"), - (0x2C6F, "M", "ɐ"), - (0x2C70, "M", "ɒ"), - (0x2C71, "V"), - (0x2C72, "M", "ⱳ"), - (0x2C73, "V"), - (0x2C75, "M", "ⱶ"), - (0x2C76, "V"), - (0x2C7C, "M", "j"), - (0x2C7D, "M", "v"), - (0x2C7E, "M", "ȿ"), - (0x2C7F, "M", "ɀ"), - (0x2C80, "M", "ⲁ"), - (0x2C81, "V"), - (0x2C82, "M", "ⲃ"), - (0x2C83, "V"), - (0x2C84, "M", "ⲅ"), - (0x2C85, "V"), - (0x2C86, "M", "ⲇ"), - (0x2C87, "V"), - (0x2C88, "M", "ⲉ"), - (0x2C89, "V"), - (0x2C8A, "M", "ⲋ"), - (0x2C8B, "V"), - (0x2C8C, "M", "ⲍ"), - (0x2C8D, "V"), - (0x2C8E, "M", "ⲏ"), - (0x2C8F, "V"), - (0x2C90, "M", "ⲑ"), - (0x2C91, "V"), - (0x2C92, "M", "ⲓ"), - (0x2C93, "V"), - (0x2C94, "M", "ⲕ"), - (0x2C95, "V"), - (0x2C96, "M", "ⲗ"), - (0x2C97, "V"), - (0x2C98, "M", "ⲙ"), - (0x2C99, "V"), - (0x2C9A, "M", "ⲛ"), - (0x2C9B, "V"), - (0x2C9C, "M", "ⲝ"), - (0x2C9D, "V"), - (0x2C9E, "M", "ⲟ"), - (0x2C9F, "V"), - (0x2CA0, "M", "ⲡ"), - (0x2CA1, "V"), - (0x2CA2, "M", "ⲣ"), - (0x2CA3, "V"), - (0x2CA4, "M", "ⲥ"), - (0x2CA5, "V"), - ] - - -def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2CA6, "M", "ⲧ"), - (0x2CA7, "V"), - (0x2CA8, "M", "ⲩ"), - (0x2CA9, "V"), - (0x2CAA, "M", "ⲫ"), - (0x2CAB, "V"), - (0x2CAC, "M", "ⲭ"), - (0x2CAD, "V"), - (0x2CAE, "M", "ⲯ"), - (0x2CAF, "V"), - (0x2CB0, "M", "ⲱ"), - (0x2CB1, "V"), - (0x2CB2, "M", "ⲳ"), - (0x2CB3, "V"), - (0x2CB4, "M", "ⲵ"), - (0x2CB5, "V"), - (0x2CB6, "M", "ⲷ"), - (0x2CB7, "V"), - (0x2CB8, "M", "ⲹ"), - (0x2CB9, "V"), - (0x2CBA, "M", "ⲻ"), - (0x2CBB, "V"), - (0x2CBC, "M", "ⲽ"), - (0x2CBD, "V"), - (0x2CBE, "M", "ⲿ"), - (0x2CBF, "V"), - (0x2CC0, "M", "ⳁ"), - (0x2CC1, "V"), - (0x2CC2, "M", "ⳃ"), - (0x2CC3, "V"), - (0x2CC4, "M", "ⳅ"), - (0x2CC5, "V"), - (0x2CC6, "M", "ⳇ"), - (0x2CC7, "V"), - (0x2CC8, "M", "ⳉ"), - (0x2CC9, "V"), - (0x2CCA, "M", "ⳋ"), - (0x2CCB, "V"), - (0x2CCC, "M", "ⳍ"), - (0x2CCD, "V"), - (0x2CCE, "M", "ⳏ"), - (0x2CCF, "V"), - (0x2CD0, "M", "ⳑ"), - (0x2CD1, "V"), - (0x2CD2, "M", "ⳓ"), - (0x2CD3, "V"), - (0x2CD4, "M", "ⳕ"), - (0x2CD5, "V"), - (0x2CD6, "M", "ⳗ"), - (0x2CD7, "V"), - (0x2CD8, "M", "ⳙ"), - (0x2CD9, "V"), - (0x2CDA, "M", "ⳛ"), - (0x2CDB, "V"), - (0x2CDC, "M", "ⳝ"), - (0x2CDD, "V"), - (0x2CDE, "M", "ⳟ"), - (0x2CDF, "V"), - (0x2CE0, "M", "ⳡ"), - (0x2CE1, "V"), - (0x2CE2, "M", "ⳣ"), - (0x2CE3, "V"), - (0x2CEB, "M", "ⳬ"), - (0x2CEC, "V"), - (0x2CED, "M", "ⳮ"), - (0x2CEE, "V"), - (0x2CF2, "M", "ⳳ"), - (0x2CF3, "V"), - (0x2CF4, "X"), - (0x2CF9, "V"), - (0x2D26, "X"), - (0x2D27, "V"), - (0x2D28, "X"), - (0x2D2D, "V"), - (0x2D2E, "X"), - (0x2D30, "V"), - (0x2D68, "X"), - (0x2D6F, "M", "ⵡ"), - (0x2D70, "V"), - (0x2D71, "X"), - (0x2D7F, "V"), - (0x2D97, "X"), - (0x2DA0, "V"), - (0x2DA7, "X"), - (0x2DA8, "V"), - (0x2DAF, "X"), - (0x2DB0, "V"), - (0x2DB7, "X"), - (0x2DB8, "V"), - (0x2DBF, "X"), - (0x2DC0, "V"), - (0x2DC7, "X"), - (0x2DC8, "V"), - (0x2DCF, "X"), - (0x2DD0, "V"), - (0x2DD7, "X"), - (0x2DD8, "V"), - (0x2DDF, "X"), - (0x2DE0, "V"), - (0x2E5E, "X"), - ] - - -def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2E80, "V"), - (0x2E9A, "X"), - (0x2E9B, "V"), - (0x2E9F, "M", "母"), - (0x2EA0, "V"), - (0x2EF3, "M", "龟"), - (0x2EF4, "X"), - (0x2F00, "M", "一"), - (0x2F01, "M", "丨"), - (0x2F02, "M", "丶"), - (0x2F03, "M", "丿"), - (0x2F04, "M", "乙"), - (0x2F05, "M", "亅"), - (0x2F06, "M", "二"), - (0x2F07, "M", "亠"), - (0x2F08, "M", "人"), - (0x2F09, "M", "儿"), - (0x2F0A, "M", "入"), - (0x2F0B, "M", "八"), - (0x2F0C, "M", "冂"), - (0x2F0D, "M", "冖"), - (0x2F0E, "M", "冫"), - (0x2F0F, "M", "几"), - (0x2F10, "M", "凵"), - (0x2F11, "M", "刀"), - (0x2F12, "M", "力"), - (0x2F13, "M", "勹"), - (0x2F14, "M", "匕"), - (0x2F15, "M", "匚"), - (0x2F16, "M", "匸"), - (0x2F17, "M", "十"), - (0x2F18, "M", "卜"), - (0x2F19, "M", "卩"), - (0x2F1A, "M", "厂"), - (0x2F1B, "M", "厶"), - (0x2F1C, "M", "又"), - (0x2F1D, "M", "口"), - (0x2F1E, "M", "囗"), - (0x2F1F, "M", "土"), - (0x2F20, "M", "士"), - (0x2F21, "M", "夂"), - (0x2F22, "M", "夊"), - (0x2F23, "M", "夕"), - (0x2F24, "M", "大"), - (0x2F25, "M", "女"), - (0x2F26, "M", "子"), - (0x2F27, "M", "宀"), - (0x2F28, "M", "寸"), - (0x2F29, "M", "小"), - (0x2F2A, "M", "尢"), - (0x2F2B, "M", "尸"), - (0x2F2C, "M", "屮"), - (0x2F2D, "M", "山"), - (0x2F2E, "M", "巛"), - (0x2F2F, "M", "工"), - (0x2F30, "M", "己"), - (0x2F31, "M", "巾"), - (0x2F32, "M", "干"), - (0x2F33, "M", "幺"), - (0x2F34, "M", "广"), - (0x2F35, "M", "廴"), - (0x2F36, "M", "廾"), - (0x2F37, "M", "弋"), - (0x2F38, "M", "弓"), - (0x2F39, "M", "彐"), - (0x2F3A, "M", "彡"), - (0x2F3B, "M", "彳"), - (0x2F3C, "M", "心"), - (0x2F3D, "M", "戈"), - (0x2F3E, "M", "戶"), - (0x2F3F, "M", "手"), - (0x2F40, "M", "支"), - (0x2F41, "M", "攴"), - (0x2F42, "M", "文"), - (0x2F43, "M", "斗"), - (0x2F44, "M", "斤"), - (0x2F45, "M", "方"), - (0x2F46, "M", "无"), - (0x2F47, "M", "日"), - (0x2F48, "M", "曰"), - (0x2F49, "M", "月"), - (0x2F4A, "M", "木"), - (0x2F4B, "M", "欠"), - (0x2F4C, "M", "止"), - (0x2F4D, "M", "歹"), - (0x2F4E, "M", "殳"), - (0x2F4F, "M", "毋"), - (0x2F50, "M", "比"), - (0x2F51, "M", "毛"), - (0x2F52, "M", "氏"), - (0x2F53, "M", "气"), - (0x2F54, "M", "水"), - (0x2F55, "M", "火"), - (0x2F56, "M", "爪"), - (0x2F57, "M", "父"), - (0x2F58, "M", "爻"), - (0x2F59, "M", "爿"), - (0x2F5A, "M", "片"), - (0x2F5B, "M", "牙"), - (0x2F5C, "M", "牛"), - ] - - -def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F5D, "M", "犬"), - (0x2F5E, "M", "玄"), - (0x2F5F, "M", "玉"), - (0x2F60, "M", "瓜"), - (0x2F61, "M", "瓦"), - (0x2F62, "M", "甘"), - (0x2F63, "M", "生"), - (0x2F64, "M", "用"), - (0x2F65, "M", "田"), - (0x2F66, "M", "疋"), - (0x2F67, "M", "疒"), - (0x2F68, "M", "癶"), - (0x2F69, "M", "白"), - (0x2F6A, "M", "皮"), - (0x2F6B, "M", "皿"), - (0x2F6C, "M", "目"), - (0x2F6D, "M", "矛"), - (0x2F6E, "M", "矢"), - (0x2F6F, "M", "石"), - (0x2F70, "M", "示"), - (0x2F71, "M", "禸"), - (0x2F72, "M", "禾"), - (0x2F73, "M", "穴"), - (0x2F74, "M", "立"), - (0x2F75, "M", "竹"), - (0x2F76, "M", "米"), - (0x2F77, "M", "糸"), - (0x2F78, "M", "缶"), - (0x2F79, "M", "网"), - (0x2F7A, "M", "羊"), - (0x2F7B, "M", "羽"), - (0x2F7C, "M", "老"), - (0x2F7D, "M", "而"), - (0x2F7E, "M", "耒"), - (0x2F7F, "M", "耳"), - (0x2F80, "M", "聿"), - (0x2F81, "M", "肉"), - (0x2F82, "M", "臣"), - (0x2F83, "M", "自"), - (0x2F84, "M", "至"), - (0x2F85, "M", "臼"), - (0x2F86, "M", "舌"), - (0x2F87, "M", "舛"), - (0x2F88, "M", "舟"), - (0x2F89, "M", "艮"), - (0x2F8A, "M", "色"), - (0x2F8B, "M", "艸"), - (0x2F8C, "M", "虍"), - (0x2F8D, "M", "虫"), - (0x2F8E, "M", "血"), - (0x2F8F, "M", "行"), - (0x2F90, "M", "衣"), - (0x2F91, "M", "襾"), - (0x2F92, "M", "見"), - (0x2F93, "M", "角"), - (0x2F94, "M", "言"), - (0x2F95, "M", "谷"), - (0x2F96, "M", "豆"), - (0x2F97, "M", "豕"), - (0x2F98, "M", "豸"), - (0x2F99, "M", "貝"), - (0x2F9A, "M", "赤"), - (0x2F9B, "M", "走"), - (0x2F9C, "M", "足"), - (0x2F9D, "M", "身"), - (0x2F9E, "M", "車"), - (0x2F9F, "M", "辛"), - (0x2FA0, "M", "辰"), - (0x2FA1, "M", "辵"), - (0x2FA2, "M", "邑"), - (0x2FA3, "M", "酉"), - (0x2FA4, "M", "釆"), - (0x2FA5, "M", "里"), - (0x2FA6, "M", "金"), - (0x2FA7, "M", "長"), - (0x2FA8, "M", "門"), - (0x2FA9, "M", "阜"), - (0x2FAA, "M", "隶"), - (0x2FAB, "M", "隹"), - (0x2FAC, "M", "雨"), - (0x2FAD, "M", "靑"), - (0x2FAE, "M", "非"), - (0x2FAF, "M", "面"), - (0x2FB0, "M", "革"), - (0x2FB1, "M", "韋"), - (0x2FB2, "M", "韭"), - (0x2FB3, "M", "音"), - (0x2FB4, "M", "頁"), - (0x2FB5, "M", "風"), - (0x2FB6, "M", "飛"), - (0x2FB7, "M", "食"), - (0x2FB8, "M", "首"), - (0x2FB9, "M", "香"), - (0x2FBA, "M", "馬"), - (0x2FBB, "M", "骨"), - (0x2FBC, "M", "高"), - (0x2FBD, "M", "髟"), - (0x2FBE, "M", "鬥"), - (0x2FBF, "M", "鬯"), - (0x2FC0, "M", "鬲"), - ] - - -def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2FC1, "M", "鬼"), - (0x2FC2, "M", "魚"), - (0x2FC3, "M", "鳥"), - (0x2FC4, "M", "鹵"), - (0x2FC5, "M", "鹿"), - (0x2FC6, "M", "麥"), - (0x2FC7, "M", "麻"), - (0x2FC8, "M", "黃"), - (0x2FC9, "M", "黍"), - (0x2FCA, "M", "黑"), - (0x2FCB, "M", "黹"), - (0x2FCC, "M", "黽"), - (0x2FCD, "M", "鼎"), - (0x2FCE, "M", "鼓"), - (0x2FCF, "M", "鼠"), - (0x2FD0, "M", "鼻"), - (0x2FD1, "M", "齊"), - (0x2FD2, "M", "齒"), - (0x2FD3, "M", "龍"), - (0x2FD4, "M", "龜"), - (0x2FD5, "M", "龠"), - (0x2FD6, "X"), - (0x3000, "M", " "), - (0x3001, "V"), - (0x3002, "M", "."), - (0x3003, "V"), - (0x3036, "M", "〒"), - (0x3037, "V"), - (0x3038, "M", "十"), - (0x3039, "M", "卄"), - (0x303A, "M", "卅"), - (0x303B, "V"), - (0x3040, "X"), - (0x3041, "V"), - (0x3097, "X"), - (0x3099, "V"), - (0x309B, "M", " ゙"), - (0x309C, "M", " ゚"), - (0x309D, "V"), - (0x309F, "M", "より"), - (0x30A0, "V"), - (0x30FF, "M", "コト"), - (0x3100, "X"), - (0x3105, "V"), - (0x3130, "X"), - (0x3131, "M", "ᄀ"), - (0x3132, "M", "ᄁ"), - (0x3133, "M", "ᆪ"), - (0x3134, "M", "ᄂ"), - (0x3135, "M", "ᆬ"), - (0x3136, "M", "ᆭ"), - (0x3137, "M", "ᄃ"), - (0x3138, "M", "ᄄ"), - (0x3139, "M", "ᄅ"), - (0x313A, "M", "ᆰ"), - (0x313B, "M", "ᆱ"), - (0x313C, "M", "ᆲ"), - (0x313D, "M", "ᆳ"), - (0x313E, "M", "ᆴ"), - (0x313F, "M", "ᆵ"), - (0x3140, "M", "ᄚ"), - (0x3141, "M", "ᄆ"), - (0x3142, "M", "ᄇ"), - (0x3143, "M", "ᄈ"), - (0x3144, "M", "ᄡ"), - (0x3145, "M", "ᄉ"), - (0x3146, "M", "ᄊ"), - (0x3147, "M", "ᄋ"), - (0x3148, "M", "ᄌ"), - (0x3149, "M", "ᄍ"), - (0x314A, "M", "ᄎ"), - (0x314B, "M", "ᄏ"), - (0x314C, "M", "ᄐ"), - (0x314D, "M", "ᄑ"), - (0x314E, "M", "ᄒ"), - (0x314F, "M", "ᅡ"), - (0x3150, "M", "ᅢ"), - (0x3151, "M", "ᅣ"), - (0x3152, "M", "ᅤ"), - (0x3153, "M", "ᅥ"), - (0x3154, "M", "ᅦ"), - (0x3155, "M", "ᅧ"), - (0x3156, "M", "ᅨ"), - (0x3157, "M", "ᅩ"), - (0x3158, "M", "ᅪ"), - (0x3159, "M", "ᅫ"), - (0x315A, "M", "ᅬ"), - (0x315B, "M", "ᅭ"), - (0x315C, "M", "ᅮ"), - (0x315D, "M", "ᅯ"), - (0x315E, "M", "ᅰ"), - (0x315F, "M", "ᅱ"), - (0x3160, "M", "ᅲ"), - (0x3161, "M", "ᅳ"), - (0x3162, "M", "ᅴ"), - (0x3163, "M", "ᅵ"), - (0x3164, "I"), - (0x3165, "M", "ᄔ"), - (0x3166, "M", "ᄕ"), - (0x3167, "M", "ᇇ"), - ] - - -def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3168, "M", "ᇈ"), - (0x3169, "M", "ᇌ"), - (0x316A, "M", "ᇎ"), - (0x316B, "M", "ᇓ"), - (0x316C, "M", "ᇗ"), - (0x316D, "M", "ᇙ"), - (0x316E, "M", "ᄜ"), - (0x316F, "M", "ᇝ"), - (0x3170, "M", "ᇟ"), - (0x3171, "M", "ᄝ"), - (0x3172, "M", "ᄞ"), - (0x3173, "M", "ᄠ"), - (0x3174, "M", "ᄢ"), - (0x3175, "M", "ᄣ"), - (0x3176, "M", "ᄧ"), - (0x3177, "M", "ᄩ"), - (0x3178, "M", "ᄫ"), - (0x3179, "M", "ᄬ"), - (0x317A, "M", "ᄭ"), - (0x317B, "M", "ᄮ"), - (0x317C, "M", "ᄯ"), - (0x317D, "M", "ᄲ"), - (0x317E, "M", "ᄶ"), - (0x317F, "M", "ᅀ"), - (0x3180, "M", "ᅇ"), - (0x3181, "M", "ᅌ"), - (0x3182, "M", "ᇱ"), - (0x3183, "M", "ᇲ"), - (0x3184, "M", "ᅗ"), - (0x3185, "M", "ᅘ"), - (0x3186, "M", "ᅙ"), - (0x3187, "M", "ᆄ"), - (0x3188, "M", "ᆅ"), - (0x3189, "M", "ᆈ"), - (0x318A, "M", "ᆑ"), - (0x318B, "M", "ᆒ"), - (0x318C, "M", "ᆔ"), - (0x318D, "M", "ᆞ"), - (0x318E, "M", "ᆡ"), - (0x318F, "X"), - (0x3190, "V"), - (0x3192, "M", "一"), - (0x3193, "M", "二"), - (0x3194, "M", "三"), - (0x3195, "M", "四"), - (0x3196, "M", "上"), - (0x3197, "M", "中"), - (0x3198, "M", "下"), - (0x3199, "M", "甲"), - (0x319A, "M", "乙"), - (0x319B, "M", "丙"), - (0x319C, "M", "丁"), - (0x319D, "M", "天"), - (0x319E, "M", "地"), - (0x319F, "M", "人"), - (0x31A0, "V"), - (0x31E6, "X"), - (0x31F0, "V"), - (0x3200, "M", "(ᄀ)"), - (0x3201, "M", "(ᄂ)"), - (0x3202, "M", "(ᄃ)"), - (0x3203, "M", "(ᄅ)"), - (0x3204, "M", "(ᄆ)"), - (0x3205, "M", "(ᄇ)"), - (0x3206, "M", "(ᄉ)"), - (0x3207, "M", "(ᄋ)"), - (0x3208, "M", "(ᄌ)"), - (0x3209, "M", "(ᄎ)"), - (0x320A, "M", "(ᄏ)"), - (0x320B, "M", "(ᄐ)"), - (0x320C, "M", "(ᄑ)"), - (0x320D, "M", "(ᄒ)"), - (0x320E, "M", "(가)"), - (0x320F, "M", "(나)"), - (0x3210, "M", "(다)"), - (0x3211, "M", "(라)"), - (0x3212, "M", "(마)"), - (0x3213, "M", "(바)"), - (0x3214, "M", "(사)"), - (0x3215, "M", "(아)"), - (0x3216, "M", "(자)"), - (0x3217, "M", "(차)"), - (0x3218, "M", "(카)"), - (0x3219, "M", "(타)"), - (0x321A, "M", "(파)"), - (0x321B, "M", "(하)"), - (0x321C, "M", "(주)"), - (0x321D, "M", "(오전)"), - (0x321E, "M", "(오후)"), - (0x321F, "X"), - (0x3220, "M", "(一)"), - (0x3221, "M", "(二)"), - (0x3222, "M", "(三)"), - (0x3223, "M", "(四)"), - (0x3224, "M", "(五)"), - (0x3225, "M", "(六)"), - (0x3226, "M", "(七)"), - (0x3227, "M", "(八)"), - (0x3228, "M", "(九)"), - (0x3229, "M", "(十)"), - ] - - -def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x322A, "M", "(月)"), - (0x322B, "M", "(火)"), - (0x322C, "M", "(水)"), - (0x322D, "M", "(木)"), - (0x322E, "M", "(金)"), - (0x322F, "M", "(土)"), - (0x3230, "M", "(日)"), - (0x3231, "M", "(株)"), - (0x3232, "M", "(有)"), - (0x3233, "M", "(社)"), - (0x3234, "M", "(名)"), - (0x3235, "M", "(特)"), - (0x3236, "M", "(財)"), - (0x3237, "M", "(祝)"), - (0x3238, "M", "(労)"), - (0x3239, "M", "(代)"), - (0x323A, "M", "(呼)"), - (0x323B, "M", "(学)"), - (0x323C, "M", "(監)"), - (0x323D, "M", "(企)"), - (0x323E, "M", "(資)"), - (0x323F, "M", "(協)"), - (0x3240, "M", "(祭)"), - (0x3241, "M", "(休)"), - (0x3242, "M", "(自)"), - (0x3243, "M", "(至)"), - (0x3244, "M", "問"), - (0x3245, "M", "幼"), - (0x3246, "M", "文"), - (0x3247, "M", "箏"), - (0x3248, "V"), - (0x3250, "M", "pte"), - (0x3251, "M", "21"), - (0x3252, "M", "22"), - (0x3253, "M", "23"), - (0x3254, "M", "24"), - (0x3255, "M", "25"), - (0x3256, "M", "26"), - (0x3257, "M", "27"), - (0x3258, "M", "28"), - (0x3259, "M", "29"), - (0x325A, "M", "30"), - (0x325B, "M", "31"), - (0x325C, "M", "32"), - (0x325D, "M", "33"), - (0x325E, "M", "34"), - (0x325F, "M", "35"), - (0x3260, "M", "ᄀ"), - (0x3261, "M", "ᄂ"), - (0x3262, "M", "ᄃ"), - (0x3263, "M", "ᄅ"), - (0x3264, "M", "ᄆ"), - (0x3265, "M", "ᄇ"), - (0x3266, "M", "ᄉ"), - (0x3267, "M", "ᄋ"), - (0x3268, "M", "ᄌ"), - (0x3269, "M", "ᄎ"), - (0x326A, "M", "ᄏ"), - (0x326B, "M", "ᄐ"), - (0x326C, "M", "ᄑ"), - (0x326D, "M", "ᄒ"), - (0x326E, "M", "가"), - (0x326F, "M", "나"), - (0x3270, "M", "다"), - (0x3271, "M", "라"), - (0x3272, "M", "마"), - (0x3273, "M", "바"), - (0x3274, "M", "사"), - (0x3275, "M", "아"), - (0x3276, "M", "자"), - (0x3277, "M", "차"), - (0x3278, "M", "카"), - (0x3279, "M", "타"), - (0x327A, "M", "파"), - (0x327B, "M", "하"), - (0x327C, "M", "참고"), - (0x327D, "M", "주의"), - (0x327E, "M", "우"), - (0x327F, "V"), - (0x3280, "M", "一"), - (0x3281, "M", "二"), - (0x3282, "M", "三"), - (0x3283, "M", "四"), - (0x3284, "M", "五"), - (0x3285, "M", "六"), - (0x3286, "M", "七"), - (0x3287, "M", "八"), - (0x3288, "M", "九"), - (0x3289, "M", "十"), - (0x328A, "M", "月"), - (0x328B, "M", "火"), - (0x328C, "M", "水"), - (0x328D, "M", "木"), - (0x328E, "M", "金"), - (0x328F, "M", "土"), - (0x3290, "M", "日"), - (0x3291, "M", "株"), - (0x3292, "M", "有"), - (0x3293, "M", "社"), - (0x3294, "M", "名"), - ] - - -def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3295, "M", "特"), - (0x3296, "M", "財"), - (0x3297, "M", "祝"), - (0x3298, "M", "労"), - (0x3299, "M", "秘"), - (0x329A, "M", "男"), - (0x329B, "M", "女"), - (0x329C, "M", "適"), - (0x329D, "M", "優"), - (0x329E, "M", "印"), - (0x329F, "M", "注"), - (0x32A0, "M", "項"), - (0x32A1, "M", "休"), - (0x32A2, "M", "写"), - (0x32A3, "M", "正"), - (0x32A4, "M", "上"), - (0x32A5, "M", "中"), - (0x32A6, "M", "下"), - (0x32A7, "M", "左"), - (0x32A8, "M", "右"), - (0x32A9, "M", "医"), - (0x32AA, "M", "宗"), - (0x32AB, "M", "学"), - (0x32AC, "M", "監"), - (0x32AD, "M", "企"), - (0x32AE, "M", "資"), - (0x32AF, "M", "協"), - (0x32B0, "M", "夜"), - (0x32B1, "M", "36"), - (0x32B2, "M", "37"), - (0x32B3, "M", "38"), - (0x32B4, "M", "39"), - (0x32B5, "M", "40"), - (0x32B6, "M", "41"), - (0x32B7, "M", "42"), - (0x32B8, "M", "43"), - (0x32B9, "M", "44"), - (0x32BA, "M", "45"), - (0x32BB, "M", "46"), - (0x32BC, "M", "47"), - (0x32BD, "M", "48"), - (0x32BE, "M", "49"), - (0x32BF, "M", "50"), - (0x32C0, "M", "1月"), - (0x32C1, "M", "2月"), - (0x32C2, "M", "3月"), - (0x32C3, "M", "4月"), - (0x32C4, "M", "5月"), - (0x32C5, "M", "6月"), - (0x32C6, "M", "7月"), - (0x32C7, "M", "8月"), - (0x32C8, "M", "9月"), - (0x32C9, "M", "10月"), - (0x32CA, "M", "11月"), - (0x32CB, "M", "12月"), - (0x32CC, "M", "hg"), - (0x32CD, "M", "erg"), - (0x32CE, "M", "ev"), - (0x32CF, "M", "ltd"), - (0x32D0, "M", "ア"), - (0x32D1, "M", "イ"), - (0x32D2, "M", "ウ"), - (0x32D3, "M", "エ"), - (0x32D4, "M", "オ"), - (0x32D5, "M", "カ"), - (0x32D6, "M", "キ"), - (0x32D7, "M", "ク"), - (0x32D8, "M", "ケ"), - (0x32D9, "M", "コ"), - (0x32DA, "M", "サ"), - (0x32DB, "M", "シ"), - (0x32DC, "M", "ス"), - (0x32DD, "M", "セ"), - (0x32DE, "M", "ソ"), - (0x32DF, "M", "タ"), - (0x32E0, "M", "チ"), - (0x32E1, "M", "ツ"), - (0x32E2, "M", "テ"), - (0x32E3, "M", "ト"), - (0x32E4, "M", "ナ"), - (0x32E5, "M", "ニ"), - (0x32E6, "M", "ヌ"), - (0x32E7, "M", "ネ"), - (0x32E8, "M", "ノ"), - (0x32E9, "M", "ハ"), - (0x32EA, "M", "ヒ"), - (0x32EB, "M", "フ"), - (0x32EC, "M", "ヘ"), - (0x32ED, "M", "ホ"), - (0x32EE, "M", "マ"), - (0x32EF, "M", "ミ"), - (0x32F0, "M", "ム"), - (0x32F1, "M", "メ"), - (0x32F2, "M", "モ"), - (0x32F3, "M", "ヤ"), - (0x32F4, "M", "ユ"), - (0x32F5, "M", "ヨ"), - (0x32F6, "M", "ラ"), - (0x32F7, "M", "リ"), - (0x32F8, "M", "ル"), - ] - - -def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x32F9, "M", "レ"), - (0x32FA, "M", "ロ"), - (0x32FB, "M", "ワ"), - (0x32FC, "M", "ヰ"), - (0x32FD, "M", "ヱ"), - (0x32FE, "M", "ヲ"), - (0x32FF, "M", "令和"), - (0x3300, "M", "アパート"), - (0x3301, "M", "アルファ"), - (0x3302, "M", "アンペア"), - (0x3303, "M", "アール"), - (0x3304, "M", "イニング"), - (0x3305, "M", "インチ"), - (0x3306, "M", "ウォン"), - (0x3307, "M", "エスクード"), - (0x3308, "M", "エーカー"), - (0x3309, "M", "オンス"), - (0x330A, "M", "オーム"), - (0x330B, "M", "カイリ"), - (0x330C, "M", "カラット"), - (0x330D, "M", "カロリー"), - (0x330E, "M", "ガロン"), - (0x330F, "M", "ガンマ"), - (0x3310, "M", "ギガ"), - (0x3311, "M", "ギニー"), - (0x3312, "M", "キュリー"), - (0x3313, "M", "ギルダー"), - (0x3314, "M", "キロ"), - (0x3315, "M", "キログラム"), - (0x3316, "M", "キロメートル"), - (0x3317, "M", "キロワット"), - (0x3318, "M", "グラム"), - (0x3319, "M", "グラムトン"), - (0x331A, "M", "クルゼイロ"), - (0x331B, "M", "クローネ"), - (0x331C, "M", "ケース"), - (0x331D, "M", "コルナ"), - (0x331E, "M", "コーポ"), - (0x331F, "M", "サイクル"), - (0x3320, "M", "サンチーム"), - (0x3321, "M", "シリング"), - (0x3322, "M", "センチ"), - (0x3323, "M", "セント"), - (0x3324, "M", "ダース"), - (0x3325, "M", "デシ"), - (0x3326, "M", "ドル"), - (0x3327, "M", "トン"), - (0x3328, "M", "ナノ"), - (0x3329, "M", "ノット"), - (0x332A, "M", "ハイツ"), - (0x332B, "M", "パーセント"), - (0x332C, "M", "パーツ"), - (0x332D, "M", "バーレル"), - (0x332E, "M", "ピアストル"), - (0x332F, "M", "ピクル"), - (0x3330, "M", "ピコ"), - (0x3331, "M", "ビル"), - (0x3332, "M", "ファラッド"), - (0x3333, "M", "フィート"), - (0x3334, "M", "ブッシェル"), - (0x3335, "M", "フラン"), - (0x3336, "M", "ヘクタール"), - (0x3337, "M", "ペソ"), - (0x3338, "M", "ペニヒ"), - (0x3339, "M", "ヘルツ"), - (0x333A, "M", "ペンス"), - (0x333B, "M", "ページ"), - (0x333C, "M", "ベータ"), - (0x333D, "M", "ポイント"), - (0x333E, "M", "ボルト"), - (0x333F, "M", "ホン"), - (0x3340, "M", "ポンド"), - (0x3341, "M", "ホール"), - (0x3342, "M", "ホーン"), - (0x3343, "M", "マイクロ"), - (0x3344, "M", "マイル"), - (0x3345, "M", "マッハ"), - (0x3346, "M", "マルク"), - (0x3347, "M", "マンション"), - (0x3348, "M", "ミクロン"), - (0x3349, "M", "ミリ"), - (0x334A, "M", "ミリバール"), - (0x334B, "M", "メガ"), - (0x334C, "M", "メガトン"), - (0x334D, "M", "メートル"), - (0x334E, "M", "ヤード"), - (0x334F, "M", "ヤール"), - (0x3350, "M", "ユアン"), - (0x3351, "M", "リットル"), - (0x3352, "M", "リラ"), - (0x3353, "M", "ルピー"), - (0x3354, "M", "ルーブル"), - (0x3355, "M", "レム"), - (0x3356, "M", "レントゲン"), - (0x3357, "M", "ワット"), - (0x3358, "M", "0点"), - (0x3359, "M", "1点"), - (0x335A, "M", "2点"), - (0x335B, "M", "3点"), - (0x335C, "M", "4点"), - ] - - -def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x335D, "M", "5点"), - (0x335E, "M", "6点"), - (0x335F, "M", "7点"), - (0x3360, "M", "8点"), - (0x3361, "M", "9点"), - (0x3362, "M", "10点"), - (0x3363, "M", "11点"), - (0x3364, "M", "12点"), - (0x3365, "M", "13点"), - (0x3366, "M", "14点"), - (0x3367, "M", "15点"), - (0x3368, "M", "16点"), - (0x3369, "M", "17点"), - (0x336A, "M", "18点"), - (0x336B, "M", "19点"), - (0x336C, "M", "20点"), - (0x336D, "M", "21点"), - (0x336E, "M", "22点"), - (0x336F, "M", "23点"), - (0x3370, "M", "24点"), - (0x3371, "M", "hpa"), - (0x3372, "M", "da"), - (0x3373, "M", "au"), - (0x3374, "M", "bar"), - (0x3375, "M", "ov"), - (0x3376, "M", "pc"), - (0x3377, "M", "dm"), - (0x3378, "M", "dm2"), - (0x3379, "M", "dm3"), - (0x337A, "M", "iu"), - (0x337B, "M", "平成"), - (0x337C, "M", "昭和"), - (0x337D, "M", "大正"), - (0x337E, "M", "明治"), - (0x337F, "M", "株式会社"), - (0x3380, "M", "pa"), - (0x3381, "M", "na"), - (0x3382, "M", "μa"), - (0x3383, "M", "ma"), - (0x3384, "M", "ka"), - (0x3385, "M", "kb"), - (0x3386, "M", "mb"), - (0x3387, "M", "gb"), - (0x3388, "M", "cal"), - (0x3389, "M", "kcal"), - (0x338A, "M", "pf"), - (0x338B, "M", "nf"), - (0x338C, "M", "μf"), - (0x338D, "M", "μg"), - (0x338E, "M", "mg"), - (0x338F, "M", "kg"), - (0x3390, "M", "hz"), - (0x3391, "M", "khz"), - (0x3392, "M", "mhz"), - (0x3393, "M", "ghz"), - (0x3394, "M", "thz"), - (0x3395, "M", "μl"), - (0x3396, "M", "ml"), - (0x3397, "M", "dl"), - (0x3398, "M", "kl"), - (0x3399, "M", "fm"), - (0x339A, "M", "nm"), - (0x339B, "M", "μm"), - (0x339C, "M", "mm"), - (0x339D, "M", "cm"), - (0x339E, "M", "km"), - (0x339F, "M", "mm2"), - (0x33A0, "M", "cm2"), - (0x33A1, "M", "m2"), - (0x33A2, "M", "km2"), - (0x33A3, "M", "mm3"), - (0x33A4, "M", "cm3"), - (0x33A5, "M", "m3"), - (0x33A6, "M", "km3"), - (0x33A7, "M", "m∕s"), - (0x33A8, "M", "m∕s2"), - (0x33A9, "M", "pa"), - (0x33AA, "M", "kpa"), - (0x33AB, "M", "mpa"), - (0x33AC, "M", "gpa"), - (0x33AD, "M", "rad"), - (0x33AE, "M", "rad∕s"), - (0x33AF, "M", "rad∕s2"), - (0x33B0, "M", "ps"), - (0x33B1, "M", "ns"), - (0x33B2, "M", "μs"), - (0x33B3, "M", "ms"), - (0x33B4, "M", "pv"), - (0x33B5, "M", "nv"), - (0x33B6, "M", "μv"), - (0x33B7, "M", "mv"), - (0x33B8, "M", "kv"), - (0x33B9, "M", "mv"), - (0x33BA, "M", "pw"), - (0x33BB, "M", "nw"), - (0x33BC, "M", "μw"), - (0x33BD, "M", "mw"), - (0x33BE, "M", "kw"), - (0x33BF, "M", "mw"), - (0x33C0, "M", "kω"), - ] - - -def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x33C1, "M", "mω"), - (0x33C2, "X"), - (0x33C3, "M", "bq"), - (0x33C4, "M", "cc"), - (0x33C5, "M", "cd"), - (0x33C6, "M", "c∕kg"), - (0x33C7, "X"), - (0x33C8, "M", "db"), - (0x33C9, "M", "gy"), - (0x33CA, "M", "ha"), - (0x33CB, "M", "hp"), - (0x33CC, "M", "in"), - (0x33CD, "M", "kk"), - (0x33CE, "M", "km"), - (0x33CF, "M", "kt"), - (0x33D0, "M", "lm"), - (0x33D1, "M", "ln"), - (0x33D2, "M", "log"), - (0x33D3, "M", "lx"), - (0x33D4, "M", "mb"), - (0x33D5, "M", "mil"), - (0x33D6, "M", "mol"), - (0x33D7, "M", "ph"), - (0x33D8, "X"), - (0x33D9, "M", "ppm"), - (0x33DA, "M", "pr"), - (0x33DB, "M", "sr"), - (0x33DC, "M", "sv"), - (0x33DD, "M", "wb"), - (0x33DE, "M", "v∕m"), - (0x33DF, "M", "a∕m"), - (0x33E0, "M", "1日"), - (0x33E1, "M", "2日"), - (0x33E2, "M", "3日"), - (0x33E3, "M", "4日"), - (0x33E4, "M", "5日"), - (0x33E5, "M", "6日"), - (0x33E6, "M", "7日"), - (0x33E7, "M", "8日"), - (0x33E8, "M", "9日"), - (0x33E9, "M", "10日"), - (0x33EA, "M", "11日"), - (0x33EB, "M", "12日"), - (0x33EC, "M", "13日"), - (0x33ED, "M", "14日"), - (0x33EE, "M", "15日"), - (0x33EF, "M", "16日"), - (0x33F0, "M", "17日"), - (0x33F1, "M", "18日"), - (0x33F2, "M", "19日"), - (0x33F3, "M", "20日"), - (0x33F4, "M", "21日"), - (0x33F5, "M", "22日"), - (0x33F6, "M", "23日"), - (0x33F7, "M", "24日"), - (0x33F8, "M", "25日"), - (0x33F9, "M", "26日"), - (0x33FA, "M", "27日"), - (0x33FB, "M", "28日"), - (0x33FC, "M", "29日"), - (0x33FD, "M", "30日"), - (0x33FE, "M", "31日"), - (0x33FF, "M", "gal"), - (0x3400, "V"), - (0xA48D, "X"), - (0xA490, "V"), - (0xA4C7, "X"), - (0xA4D0, "V"), - (0xA62C, "X"), - (0xA640, "M", "ꙁ"), - (0xA641, "V"), - (0xA642, "M", "ꙃ"), - (0xA643, "V"), - (0xA644, "M", "ꙅ"), - (0xA645, "V"), - (0xA646, "M", "ꙇ"), - (0xA647, "V"), - (0xA648, "M", "ꙉ"), - (0xA649, "V"), - (0xA64A, "M", "ꙋ"), - (0xA64B, "V"), - (0xA64C, "M", "ꙍ"), - (0xA64D, "V"), - (0xA64E, "M", "ꙏ"), - (0xA64F, "V"), - (0xA650, "M", "ꙑ"), - (0xA651, "V"), - (0xA652, "M", "ꙓ"), - (0xA653, "V"), - (0xA654, "M", "ꙕ"), - (0xA655, "V"), - (0xA656, "M", "ꙗ"), - (0xA657, "V"), - (0xA658, "M", "ꙙ"), - (0xA659, "V"), - (0xA65A, "M", "ꙛ"), - (0xA65B, "V"), - (0xA65C, "M", "ꙝ"), - (0xA65D, "V"), - (0xA65E, "M", "ꙟ"), - ] - - -def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA65F, "V"), - (0xA660, "M", "ꙡ"), - (0xA661, "V"), - (0xA662, "M", "ꙣ"), - (0xA663, "V"), - (0xA664, "M", "ꙥ"), - (0xA665, "V"), - (0xA666, "M", "ꙧ"), - (0xA667, "V"), - (0xA668, "M", "ꙩ"), - (0xA669, "V"), - (0xA66A, "M", "ꙫ"), - (0xA66B, "V"), - (0xA66C, "M", "ꙭ"), - (0xA66D, "V"), - (0xA680, "M", "ꚁ"), - (0xA681, "V"), - (0xA682, "M", "ꚃ"), - (0xA683, "V"), - (0xA684, "M", "ꚅ"), - (0xA685, "V"), - (0xA686, "M", "ꚇ"), - (0xA687, "V"), - (0xA688, "M", "ꚉ"), - (0xA689, "V"), - (0xA68A, "M", "ꚋ"), - (0xA68B, "V"), - (0xA68C, "M", "ꚍ"), - (0xA68D, "V"), - (0xA68E, "M", "ꚏ"), - (0xA68F, "V"), - (0xA690, "M", "ꚑ"), - (0xA691, "V"), - (0xA692, "M", "ꚓ"), - (0xA693, "V"), - (0xA694, "M", "ꚕ"), - (0xA695, "V"), - (0xA696, "M", "ꚗ"), - (0xA697, "V"), - (0xA698, "M", "ꚙ"), - (0xA699, "V"), - (0xA69A, "M", "ꚛ"), - (0xA69B, "V"), - (0xA69C, "M", "ъ"), - (0xA69D, "M", "ь"), - (0xA69E, "V"), - (0xA6F8, "X"), - (0xA700, "V"), - (0xA722, "M", "ꜣ"), - (0xA723, "V"), - (0xA724, "M", "ꜥ"), - (0xA725, "V"), - (0xA726, "M", "ꜧ"), - (0xA727, "V"), - (0xA728, "M", "ꜩ"), - (0xA729, "V"), - (0xA72A, "M", "ꜫ"), - (0xA72B, "V"), - (0xA72C, "M", "ꜭ"), - (0xA72D, "V"), - (0xA72E, "M", "ꜯ"), - (0xA72F, "V"), - (0xA732, "M", "ꜳ"), - (0xA733, "V"), - (0xA734, "M", "ꜵ"), - (0xA735, "V"), - (0xA736, "M", "ꜷ"), - (0xA737, "V"), - (0xA738, "M", "ꜹ"), - (0xA739, "V"), - (0xA73A, "M", "ꜻ"), - (0xA73B, "V"), - (0xA73C, "M", "ꜽ"), - (0xA73D, "V"), - (0xA73E, "M", "ꜿ"), - (0xA73F, "V"), - (0xA740, "M", "ꝁ"), - (0xA741, "V"), - (0xA742, "M", "ꝃ"), - (0xA743, "V"), - (0xA744, "M", "ꝅ"), - (0xA745, "V"), - (0xA746, "M", "ꝇ"), - (0xA747, "V"), - (0xA748, "M", "ꝉ"), - (0xA749, "V"), - (0xA74A, "M", "ꝋ"), - (0xA74B, "V"), - (0xA74C, "M", "ꝍ"), - (0xA74D, "V"), - (0xA74E, "M", "ꝏ"), - (0xA74F, "V"), - (0xA750, "M", "ꝑ"), - (0xA751, "V"), - (0xA752, "M", "ꝓ"), - (0xA753, "V"), - (0xA754, "M", "ꝕ"), - (0xA755, "V"), - (0xA756, "M", "ꝗ"), - (0xA757, "V"), - ] - - -def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA758, "M", "ꝙ"), - (0xA759, "V"), - (0xA75A, "M", "ꝛ"), - (0xA75B, "V"), - (0xA75C, "M", "ꝝ"), - (0xA75D, "V"), - (0xA75E, "M", "ꝟ"), - (0xA75F, "V"), - (0xA760, "M", "ꝡ"), - (0xA761, "V"), - (0xA762, "M", "ꝣ"), - (0xA763, "V"), - (0xA764, "M", "ꝥ"), - (0xA765, "V"), - (0xA766, "M", "ꝧ"), - (0xA767, "V"), - (0xA768, "M", "ꝩ"), - (0xA769, "V"), - (0xA76A, "M", "ꝫ"), - (0xA76B, "V"), - (0xA76C, "M", "ꝭ"), - (0xA76D, "V"), - (0xA76E, "M", "ꝯ"), - (0xA76F, "V"), - (0xA770, "M", "ꝯ"), - (0xA771, "V"), - (0xA779, "M", "ꝺ"), - (0xA77A, "V"), - (0xA77B, "M", "ꝼ"), - (0xA77C, "V"), - (0xA77D, "M", "ᵹ"), - (0xA77E, "M", "ꝿ"), - (0xA77F, "V"), - (0xA780, "M", "ꞁ"), - (0xA781, "V"), - (0xA782, "M", "ꞃ"), - (0xA783, "V"), - (0xA784, "M", "ꞅ"), - (0xA785, "V"), - (0xA786, "M", "ꞇ"), - (0xA787, "V"), - (0xA78B, "M", "ꞌ"), - (0xA78C, "V"), - (0xA78D, "M", "ɥ"), - (0xA78E, "V"), - (0xA790, "M", "ꞑ"), - (0xA791, "V"), - (0xA792, "M", "ꞓ"), - (0xA793, "V"), - (0xA796, "M", "ꞗ"), - (0xA797, "V"), - (0xA798, "M", "ꞙ"), - (0xA799, "V"), - (0xA79A, "M", "ꞛ"), - (0xA79B, "V"), - (0xA79C, "M", "ꞝ"), - (0xA79D, "V"), - (0xA79E, "M", "ꞟ"), - (0xA79F, "V"), - (0xA7A0, "M", "ꞡ"), - (0xA7A1, "V"), - (0xA7A2, "M", "ꞣ"), - (0xA7A3, "V"), - (0xA7A4, "M", "ꞥ"), - (0xA7A5, "V"), - (0xA7A6, "M", "ꞧ"), - (0xA7A7, "V"), - (0xA7A8, "M", "ꞩ"), - (0xA7A9, "V"), - (0xA7AA, "M", "ɦ"), - (0xA7AB, "M", "ɜ"), - (0xA7AC, "M", "ɡ"), - (0xA7AD, "M", "ɬ"), - (0xA7AE, "M", "ɪ"), - (0xA7AF, "V"), - (0xA7B0, "M", "ʞ"), - (0xA7B1, "M", "ʇ"), - (0xA7B2, "M", "ʝ"), - (0xA7B3, "M", "ꭓ"), - (0xA7B4, "M", "ꞵ"), - (0xA7B5, "V"), - (0xA7B6, "M", "ꞷ"), - (0xA7B7, "V"), - (0xA7B8, "M", "ꞹ"), - (0xA7B9, "V"), - (0xA7BA, "M", "ꞻ"), - (0xA7BB, "V"), - (0xA7BC, "M", "ꞽ"), - (0xA7BD, "V"), - (0xA7BE, "M", "ꞿ"), - (0xA7BF, "V"), - (0xA7C0, "M", "ꟁ"), - (0xA7C1, "V"), - (0xA7C2, "M", "ꟃ"), - (0xA7C3, "V"), - (0xA7C4, "M", "ꞔ"), - (0xA7C5, "M", "ʂ"), - (0xA7C6, "M", "ᶎ"), - (0xA7C7, "M", "ꟈ"), - (0xA7C8, "V"), - ] - - -def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA7C9, "M", "ꟊ"), - (0xA7CA, "V"), - (0xA7CB, "M", "ɤ"), - (0xA7CC, "M", "ꟍ"), - (0xA7CD, "V"), - (0xA7CE, "X"), - (0xA7D0, "M", "ꟑ"), - (0xA7D1, "V"), - (0xA7D2, "X"), - (0xA7D3, "V"), - (0xA7D4, "X"), - (0xA7D5, "V"), - (0xA7D6, "M", "ꟗ"), - (0xA7D7, "V"), - (0xA7D8, "M", "ꟙ"), - (0xA7D9, "V"), - (0xA7DA, "M", "ꟛ"), - (0xA7DB, "V"), - (0xA7DC, "M", "ƛ"), - (0xA7DD, "X"), - (0xA7F2, "M", "c"), - (0xA7F3, "M", "f"), - (0xA7F4, "M", "q"), - (0xA7F5, "M", "ꟶ"), - (0xA7F6, "V"), - (0xA7F8, "M", "ħ"), - (0xA7F9, "M", "œ"), - (0xA7FA, "V"), - (0xA82D, "X"), - (0xA830, "V"), - (0xA83A, "X"), - (0xA840, "V"), - (0xA878, "X"), - (0xA880, "V"), - (0xA8C6, "X"), - (0xA8CE, "V"), - (0xA8DA, "X"), - (0xA8E0, "V"), - (0xA954, "X"), - (0xA95F, "V"), - (0xA97D, "X"), - (0xA980, "V"), - (0xA9CE, "X"), - (0xA9CF, "V"), - (0xA9DA, "X"), - (0xA9DE, "V"), - (0xA9FF, "X"), - (0xAA00, "V"), - (0xAA37, "X"), - (0xAA40, "V"), - (0xAA4E, "X"), - (0xAA50, "V"), - (0xAA5A, "X"), - (0xAA5C, "V"), - (0xAAC3, "X"), - (0xAADB, "V"), - (0xAAF7, "X"), - (0xAB01, "V"), - (0xAB07, "X"), - (0xAB09, "V"), - (0xAB0F, "X"), - (0xAB11, "V"), - (0xAB17, "X"), - (0xAB20, "V"), - (0xAB27, "X"), - (0xAB28, "V"), - (0xAB2F, "X"), - (0xAB30, "V"), - (0xAB5C, "M", "ꜧ"), - (0xAB5D, "M", "ꬷ"), - (0xAB5E, "M", "ɫ"), - (0xAB5F, "M", "ꭒ"), - (0xAB60, "V"), - (0xAB69, "M", "ʍ"), - (0xAB6A, "V"), - (0xAB6C, "X"), - (0xAB70, "M", "Ꭰ"), - (0xAB71, "M", "Ꭱ"), - (0xAB72, "M", "Ꭲ"), - (0xAB73, "M", "Ꭳ"), - (0xAB74, "M", "Ꭴ"), - (0xAB75, "M", "Ꭵ"), - (0xAB76, "M", "Ꭶ"), - (0xAB77, "M", "Ꭷ"), - (0xAB78, "M", "Ꭸ"), - (0xAB79, "M", "Ꭹ"), - (0xAB7A, "M", "Ꭺ"), - (0xAB7B, "M", "Ꭻ"), - (0xAB7C, "M", "Ꭼ"), - (0xAB7D, "M", "Ꭽ"), - (0xAB7E, "M", "Ꭾ"), - (0xAB7F, "M", "Ꭿ"), - (0xAB80, "M", "Ꮀ"), - (0xAB81, "M", "Ꮁ"), - (0xAB82, "M", "Ꮂ"), - (0xAB83, "M", "Ꮃ"), - (0xAB84, "M", "Ꮄ"), - (0xAB85, "M", "Ꮅ"), - (0xAB86, "M", "Ꮆ"), - (0xAB87, "M", "Ꮇ"), - ] - - -def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xAB88, "M", "Ꮈ"), - (0xAB89, "M", "Ꮉ"), - (0xAB8A, "M", "Ꮊ"), - (0xAB8B, "M", "Ꮋ"), - (0xAB8C, "M", "Ꮌ"), - (0xAB8D, "M", "Ꮍ"), - (0xAB8E, "M", "Ꮎ"), - (0xAB8F, "M", "Ꮏ"), - (0xAB90, "M", "Ꮐ"), - (0xAB91, "M", "Ꮑ"), - (0xAB92, "M", "Ꮒ"), - (0xAB93, "M", "Ꮓ"), - (0xAB94, "M", "Ꮔ"), - (0xAB95, "M", "Ꮕ"), - (0xAB96, "M", "Ꮖ"), - (0xAB97, "M", "Ꮗ"), - (0xAB98, "M", "Ꮘ"), - (0xAB99, "M", "Ꮙ"), - (0xAB9A, "M", "Ꮚ"), - (0xAB9B, "M", "Ꮛ"), - (0xAB9C, "M", "Ꮜ"), - (0xAB9D, "M", "Ꮝ"), - (0xAB9E, "M", "Ꮞ"), - (0xAB9F, "M", "Ꮟ"), - (0xABA0, "M", "Ꮠ"), - (0xABA1, "M", "Ꮡ"), - (0xABA2, "M", "Ꮢ"), - (0xABA3, "M", "Ꮣ"), - (0xABA4, "M", "Ꮤ"), - (0xABA5, "M", "Ꮥ"), - (0xABA6, "M", "Ꮦ"), - (0xABA7, "M", "Ꮧ"), - (0xABA8, "M", "Ꮨ"), - (0xABA9, "M", "Ꮩ"), - (0xABAA, "M", "Ꮪ"), - (0xABAB, "M", "Ꮫ"), - (0xABAC, "M", "Ꮬ"), - (0xABAD, "M", "Ꮭ"), - (0xABAE, "M", "Ꮮ"), - (0xABAF, "M", "Ꮯ"), - (0xABB0, "M", "Ꮰ"), - (0xABB1, "M", "Ꮱ"), - (0xABB2, "M", "Ꮲ"), - (0xABB3, "M", "Ꮳ"), - (0xABB4, "M", "Ꮴ"), - (0xABB5, "M", "Ꮵ"), - (0xABB6, "M", "Ꮶ"), - (0xABB7, "M", "Ꮷ"), - (0xABB8, "M", "Ꮸ"), - (0xABB9, "M", "Ꮹ"), - (0xABBA, "M", "Ꮺ"), - (0xABBB, "M", "Ꮻ"), - (0xABBC, "M", "Ꮼ"), - (0xABBD, "M", "Ꮽ"), - (0xABBE, "M", "Ꮾ"), - (0xABBF, "M", "Ꮿ"), - (0xABC0, "V"), - (0xABEE, "X"), - (0xABF0, "V"), - (0xABFA, "X"), - (0xAC00, "V"), - (0xD7A4, "X"), - (0xD7B0, "V"), - (0xD7C7, "X"), - (0xD7CB, "V"), - (0xD7FC, "X"), - (0xF900, "M", "豈"), - (0xF901, "M", "更"), - (0xF902, "M", "車"), - (0xF903, "M", "賈"), - (0xF904, "M", "滑"), - (0xF905, "M", "串"), - (0xF906, "M", "句"), - (0xF907, "M", "龜"), - (0xF909, "M", "契"), - (0xF90A, "M", "金"), - (0xF90B, "M", "喇"), - (0xF90C, "M", "奈"), - (0xF90D, "M", "懶"), - (0xF90E, "M", "癩"), - (0xF90F, "M", "羅"), - (0xF910, "M", "蘿"), - (0xF911, "M", "螺"), - (0xF912, "M", "裸"), - (0xF913, "M", "邏"), - (0xF914, "M", "樂"), - (0xF915, "M", "洛"), - (0xF916, "M", "烙"), - (0xF917, "M", "珞"), - (0xF918, "M", "落"), - (0xF919, "M", "酪"), - (0xF91A, "M", "駱"), - (0xF91B, "M", "亂"), - (0xF91C, "M", "卵"), - (0xF91D, "M", "欄"), - (0xF91E, "M", "爛"), - (0xF91F, "M", "蘭"), - (0xF920, "M", "鸞"), - (0xF921, "M", "嵐"), - (0xF922, "M", "濫"), - ] - - -def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF923, "M", "藍"), - (0xF924, "M", "襤"), - (0xF925, "M", "拉"), - (0xF926, "M", "臘"), - (0xF927, "M", "蠟"), - (0xF928, "M", "廊"), - (0xF929, "M", "朗"), - (0xF92A, "M", "浪"), - (0xF92B, "M", "狼"), - (0xF92C, "M", "郎"), - (0xF92D, "M", "來"), - (0xF92E, "M", "冷"), - (0xF92F, "M", "勞"), - (0xF930, "M", "擄"), - (0xF931, "M", "櫓"), - (0xF932, "M", "爐"), - (0xF933, "M", "盧"), - (0xF934, "M", "老"), - (0xF935, "M", "蘆"), - (0xF936, "M", "虜"), - (0xF937, "M", "路"), - (0xF938, "M", "露"), - (0xF939, "M", "魯"), - (0xF93A, "M", "鷺"), - (0xF93B, "M", "碌"), - (0xF93C, "M", "祿"), - (0xF93D, "M", "綠"), - (0xF93E, "M", "菉"), - (0xF93F, "M", "錄"), - (0xF940, "M", "鹿"), - (0xF941, "M", "論"), - (0xF942, "M", "壟"), - (0xF943, "M", "弄"), - (0xF944, "M", "籠"), - (0xF945, "M", "聾"), - (0xF946, "M", "牢"), - (0xF947, "M", "磊"), - (0xF948, "M", "賂"), - (0xF949, "M", "雷"), - (0xF94A, "M", "壘"), - (0xF94B, "M", "屢"), - (0xF94C, "M", "樓"), - (0xF94D, "M", "淚"), - (0xF94E, "M", "漏"), - (0xF94F, "M", "累"), - (0xF950, "M", "縷"), - (0xF951, "M", "陋"), - (0xF952, "M", "勒"), - (0xF953, "M", "肋"), - (0xF954, "M", "凜"), - (0xF955, "M", "凌"), - (0xF956, "M", "稜"), - (0xF957, "M", "綾"), - (0xF958, "M", "菱"), - (0xF959, "M", "陵"), - (0xF95A, "M", "讀"), - (0xF95B, "M", "拏"), - (0xF95C, "M", "樂"), - (0xF95D, "M", "諾"), - (0xF95E, "M", "丹"), - (0xF95F, "M", "寧"), - (0xF960, "M", "怒"), - (0xF961, "M", "率"), - (0xF962, "M", "異"), - (0xF963, "M", "北"), - (0xF964, "M", "磻"), - (0xF965, "M", "便"), - (0xF966, "M", "復"), - (0xF967, "M", "不"), - (0xF968, "M", "泌"), - (0xF969, "M", "數"), - (0xF96A, "M", "索"), - (0xF96B, "M", "參"), - (0xF96C, "M", "塞"), - (0xF96D, "M", "省"), - (0xF96E, "M", "葉"), - (0xF96F, "M", "說"), - (0xF970, "M", "殺"), - (0xF971, "M", "辰"), - (0xF972, "M", "沈"), - (0xF973, "M", "拾"), - (0xF974, "M", "若"), - (0xF975, "M", "掠"), - (0xF976, "M", "略"), - (0xF977, "M", "亮"), - (0xF978, "M", "兩"), - (0xF979, "M", "凉"), - (0xF97A, "M", "梁"), - (0xF97B, "M", "糧"), - (0xF97C, "M", "良"), - (0xF97D, "M", "諒"), - (0xF97E, "M", "量"), - (0xF97F, "M", "勵"), - (0xF980, "M", "呂"), - (0xF981, "M", "女"), - (0xF982, "M", "廬"), - (0xF983, "M", "旅"), - (0xF984, "M", "濾"), - (0xF985, "M", "礪"), - (0xF986, "M", "閭"), - ] - - -def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF987, "M", "驪"), - (0xF988, "M", "麗"), - (0xF989, "M", "黎"), - (0xF98A, "M", "力"), - (0xF98B, "M", "曆"), - (0xF98C, "M", "歷"), - (0xF98D, "M", "轢"), - (0xF98E, "M", "年"), - (0xF98F, "M", "憐"), - (0xF990, "M", "戀"), - (0xF991, "M", "撚"), - (0xF992, "M", "漣"), - (0xF993, "M", "煉"), - (0xF994, "M", "璉"), - (0xF995, "M", "秊"), - (0xF996, "M", "練"), - (0xF997, "M", "聯"), - (0xF998, "M", "輦"), - (0xF999, "M", "蓮"), - (0xF99A, "M", "連"), - (0xF99B, "M", "鍊"), - (0xF99C, "M", "列"), - (0xF99D, "M", "劣"), - (0xF99E, "M", "咽"), - (0xF99F, "M", "烈"), - (0xF9A0, "M", "裂"), - (0xF9A1, "M", "說"), - (0xF9A2, "M", "廉"), - (0xF9A3, "M", "念"), - (0xF9A4, "M", "捻"), - (0xF9A5, "M", "殮"), - (0xF9A6, "M", "簾"), - (0xF9A7, "M", "獵"), - (0xF9A8, "M", "令"), - (0xF9A9, "M", "囹"), - (0xF9AA, "M", "寧"), - (0xF9AB, "M", "嶺"), - (0xF9AC, "M", "怜"), - (0xF9AD, "M", "玲"), - (0xF9AE, "M", "瑩"), - (0xF9AF, "M", "羚"), - (0xF9B0, "M", "聆"), - (0xF9B1, "M", "鈴"), - (0xF9B2, "M", "零"), - (0xF9B3, "M", "靈"), - (0xF9B4, "M", "領"), - (0xF9B5, "M", "例"), - (0xF9B6, "M", "禮"), - (0xF9B7, "M", "醴"), - (0xF9B8, "M", "隸"), - (0xF9B9, "M", "惡"), - (0xF9BA, "M", "了"), - (0xF9BB, "M", "僚"), - (0xF9BC, "M", "寮"), - (0xF9BD, "M", "尿"), - (0xF9BE, "M", "料"), - (0xF9BF, "M", "樂"), - (0xF9C0, "M", "燎"), - (0xF9C1, "M", "療"), - (0xF9C2, "M", "蓼"), - (0xF9C3, "M", "遼"), - (0xF9C4, "M", "龍"), - (0xF9C5, "M", "暈"), - (0xF9C6, "M", "阮"), - (0xF9C7, "M", "劉"), - (0xF9C8, "M", "杻"), - (0xF9C9, "M", "柳"), - (0xF9CA, "M", "流"), - (0xF9CB, "M", "溜"), - (0xF9CC, "M", "琉"), - (0xF9CD, "M", "留"), - (0xF9CE, "M", "硫"), - (0xF9CF, "M", "紐"), - (0xF9D0, "M", "類"), - (0xF9D1, "M", "六"), - (0xF9D2, "M", "戮"), - (0xF9D3, "M", "陸"), - (0xF9D4, "M", "倫"), - (0xF9D5, "M", "崙"), - (0xF9D6, "M", "淪"), - (0xF9D7, "M", "輪"), - (0xF9D8, "M", "律"), - (0xF9D9, "M", "慄"), - (0xF9DA, "M", "栗"), - (0xF9DB, "M", "率"), - (0xF9DC, "M", "隆"), - (0xF9DD, "M", "利"), - (0xF9DE, "M", "吏"), - (0xF9DF, "M", "履"), - (0xF9E0, "M", "易"), - (0xF9E1, "M", "李"), - (0xF9E2, "M", "梨"), - (0xF9E3, "M", "泥"), - (0xF9E4, "M", "理"), - (0xF9E5, "M", "痢"), - (0xF9E6, "M", "罹"), - (0xF9E7, "M", "裏"), - (0xF9E8, "M", "裡"), - (0xF9E9, "M", "里"), - (0xF9EA, "M", "離"), - ] - - -def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF9EB, "M", "匿"), - (0xF9EC, "M", "溺"), - (0xF9ED, "M", "吝"), - (0xF9EE, "M", "燐"), - (0xF9EF, "M", "璘"), - (0xF9F0, "M", "藺"), - (0xF9F1, "M", "隣"), - (0xF9F2, "M", "鱗"), - (0xF9F3, "M", "麟"), - (0xF9F4, "M", "林"), - (0xF9F5, "M", "淋"), - (0xF9F6, "M", "臨"), - (0xF9F7, "M", "立"), - (0xF9F8, "M", "笠"), - (0xF9F9, "M", "粒"), - (0xF9FA, "M", "狀"), - (0xF9FB, "M", "炙"), - (0xF9FC, "M", "識"), - (0xF9FD, "M", "什"), - (0xF9FE, "M", "茶"), - (0xF9FF, "M", "刺"), - (0xFA00, "M", "切"), - (0xFA01, "M", "度"), - (0xFA02, "M", "拓"), - (0xFA03, "M", "糖"), - (0xFA04, "M", "宅"), - (0xFA05, "M", "洞"), - (0xFA06, "M", "暴"), - (0xFA07, "M", "輻"), - (0xFA08, "M", "行"), - (0xFA09, "M", "降"), - (0xFA0A, "M", "見"), - (0xFA0B, "M", "廓"), - (0xFA0C, "M", "兀"), - (0xFA0D, "M", "嗀"), - (0xFA0E, "V"), - (0xFA10, "M", "塚"), - (0xFA11, "V"), - (0xFA12, "M", "晴"), - (0xFA13, "V"), - (0xFA15, "M", "凞"), - (0xFA16, "M", "猪"), - (0xFA17, "M", "益"), - (0xFA18, "M", "礼"), - (0xFA19, "M", "神"), - (0xFA1A, "M", "祥"), - (0xFA1B, "M", "福"), - (0xFA1C, "M", "靖"), - (0xFA1D, "M", "精"), - (0xFA1E, "M", "羽"), - (0xFA1F, "V"), - (0xFA20, "M", "蘒"), - (0xFA21, "V"), - (0xFA22, "M", "諸"), - (0xFA23, "V"), - (0xFA25, "M", "逸"), - (0xFA26, "M", "都"), - (0xFA27, "V"), - (0xFA2A, "M", "飯"), - (0xFA2B, "M", "飼"), - (0xFA2C, "M", "館"), - (0xFA2D, "M", "鶴"), - (0xFA2E, "M", "郞"), - (0xFA2F, "M", "隷"), - (0xFA30, "M", "侮"), - (0xFA31, "M", "僧"), - (0xFA32, "M", "免"), - (0xFA33, "M", "勉"), - (0xFA34, "M", "勤"), - (0xFA35, "M", "卑"), - (0xFA36, "M", "喝"), - (0xFA37, "M", "嘆"), - (0xFA38, "M", "器"), - (0xFA39, "M", "塀"), - (0xFA3A, "M", "墨"), - (0xFA3B, "M", "層"), - (0xFA3C, "M", "屮"), - (0xFA3D, "M", "悔"), - (0xFA3E, "M", "慨"), - (0xFA3F, "M", "憎"), - (0xFA40, "M", "懲"), - (0xFA41, "M", "敏"), - (0xFA42, "M", "既"), - (0xFA43, "M", "暑"), - (0xFA44, "M", "梅"), - (0xFA45, "M", "海"), - (0xFA46, "M", "渚"), - (0xFA47, "M", "漢"), - (0xFA48, "M", "煮"), - (0xFA49, "M", "爫"), - (0xFA4A, "M", "琢"), - (0xFA4B, "M", "碑"), - (0xFA4C, "M", "社"), - (0xFA4D, "M", "祉"), - (0xFA4E, "M", "祈"), - (0xFA4F, "M", "祐"), - (0xFA50, "M", "祖"), - (0xFA51, "M", "祝"), - (0xFA52, "M", "禍"), - (0xFA53, "M", "禎"), - ] - - -def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFA54, "M", "穀"), - (0xFA55, "M", "突"), - (0xFA56, "M", "節"), - (0xFA57, "M", "練"), - (0xFA58, "M", "縉"), - (0xFA59, "M", "繁"), - (0xFA5A, "M", "署"), - (0xFA5B, "M", "者"), - (0xFA5C, "M", "臭"), - (0xFA5D, "M", "艹"), - (0xFA5F, "M", "著"), - (0xFA60, "M", "褐"), - (0xFA61, "M", "視"), - (0xFA62, "M", "謁"), - (0xFA63, "M", "謹"), - (0xFA64, "M", "賓"), - (0xFA65, "M", "贈"), - (0xFA66, "M", "辶"), - (0xFA67, "M", "逸"), - (0xFA68, "M", "難"), - (0xFA69, "M", "響"), - (0xFA6A, "M", "頻"), - (0xFA6B, "M", "恵"), - (0xFA6C, "M", "𤋮"), - (0xFA6D, "M", "舘"), - (0xFA6E, "X"), - (0xFA70, "M", "並"), - (0xFA71, "M", "况"), - (0xFA72, "M", "全"), - (0xFA73, "M", "侀"), - (0xFA74, "M", "充"), - (0xFA75, "M", "冀"), - (0xFA76, "M", "勇"), - (0xFA77, "M", "勺"), - (0xFA78, "M", "喝"), - (0xFA79, "M", "啕"), - (0xFA7A, "M", "喙"), - (0xFA7B, "M", "嗢"), - (0xFA7C, "M", "塚"), - (0xFA7D, "M", "墳"), - (0xFA7E, "M", "奄"), - (0xFA7F, "M", "奔"), - (0xFA80, "M", "婢"), - (0xFA81, "M", "嬨"), - (0xFA82, "M", "廒"), - (0xFA83, "M", "廙"), - (0xFA84, "M", "彩"), - (0xFA85, "M", "徭"), - (0xFA86, "M", "惘"), - (0xFA87, "M", "慎"), - (0xFA88, "M", "愈"), - (0xFA89, "M", "憎"), - (0xFA8A, "M", "慠"), - (0xFA8B, "M", "懲"), - (0xFA8C, "M", "戴"), - (0xFA8D, "M", "揄"), - (0xFA8E, "M", "搜"), - (0xFA8F, "M", "摒"), - (0xFA90, "M", "敖"), - (0xFA91, "M", "晴"), - (0xFA92, "M", "朗"), - (0xFA93, "M", "望"), - (0xFA94, "M", "杖"), - (0xFA95, "M", "歹"), - (0xFA96, "M", "殺"), - (0xFA97, "M", "流"), - (0xFA98, "M", "滛"), - (0xFA99, "M", "滋"), - (0xFA9A, "M", "漢"), - (0xFA9B, "M", "瀞"), - (0xFA9C, "M", "煮"), - (0xFA9D, "M", "瞧"), - (0xFA9E, "M", "爵"), - (0xFA9F, "M", "犯"), - (0xFAA0, "M", "猪"), - (0xFAA1, "M", "瑱"), - (0xFAA2, "M", "甆"), - (0xFAA3, "M", "画"), - (0xFAA4, "M", "瘝"), - (0xFAA5, "M", "瘟"), - (0xFAA6, "M", "益"), - (0xFAA7, "M", "盛"), - (0xFAA8, "M", "直"), - (0xFAA9, "M", "睊"), - (0xFAAA, "M", "着"), - (0xFAAB, "M", "磌"), - (0xFAAC, "M", "窱"), - (0xFAAD, "M", "節"), - (0xFAAE, "M", "类"), - (0xFAAF, "M", "絛"), - (0xFAB0, "M", "練"), - (0xFAB1, "M", "缾"), - (0xFAB2, "M", "者"), - (0xFAB3, "M", "荒"), - (0xFAB4, "M", "華"), - (0xFAB5, "M", "蝹"), - (0xFAB6, "M", "襁"), - (0xFAB7, "M", "覆"), - (0xFAB8, "M", "視"), - (0xFAB9, "M", "調"), - ] - - -def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFABA, "M", "諸"), - (0xFABB, "M", "請"), - (0xFABC, "M", "謁"), - (0xFABD, "M", "諾"), - (0xFABE, "M", "諭"), - (0xFABF, "M", "謹"), - (0xFAC0, "M", "變"), - (0xFAC1, "M", "贈"), - (0xFAC2, "M", "輸"), - (0xFAC3, "M", "遲"), - (0xFAC4, "M", "醙"), - (0xFAC5, "M", "鉶"), - (0xFAC6, "M", "陼"), - (0xFAC7, "M", "難"), - (0xFAC8, "M", "靖"), - (0xFAC9, "M", "韛"), - (0xFACA, "M", "響"), - (0xFACB, "M", "頋"), - (0xFACC, "M", "頻"), - (0xFACD, "M", "鬒"), - (0xFACE, "M", "龜"), - (0xFACF, "M", "𢡊"), - (0xFAD0, "M", "𢡄"), - (0xFAD1, "M", "𣏕"), - (0xFAD2, "M", "㮝"), - (0xFAD3, "M", "䀘"), - (0xFAD4, "M", "䀹"), - (0xFAD5, "M", "𥉉"), - (0xFAD6, "M", "𥳐"), - (0xFAD7, "M", "𧻓"), - (0xFAD8, "M", "齃"), - (0xFAD9, "M", "龎"), - (0xFADA, "X"), - (0xFB00, "M", "ff"), - (0xFB01, "M", "fi"), - (0xFB02, "M", "fl"), - (0xFB03, "M", "ffi"), - (0xFB04, "M", "ffl"), - (0xFB05, "M", "st"), - (0xFB07, "X"), - (0xFB13, "M", "մն"), - (0xFB14, "M", "մե"), - (0xFB15, "M", "մի"), - (0xFB16, "M", "վն"), - (0xFB17, "M", "մխ"), - (0xFB18, "X"), - (0xFB1D, "M", "יִ"), - (0xFB1E, "V"), - (0xFB1F, "M", "ײַ"), - (0xFB20, "M", "ע"), - (0xFB21, "M", "א"), - (0xFB22, "M", "ד"), - (0xFB23, "M", "ה"), - (0xFB24, "M", "כ"), - (0xFB25, "M", "ל"), - (0xFB26, "M", "ם"), - (0xFB27, "M", "ר"), - (0xFB28, "M", "ת"), - (0xFB29, "M", "+"), - (0xFB2A, "M", "שׁ"), - (0xFB2B, "M", "שׂ"), - (0xFB2C, "M", "שּׁ"), - (0xFB2D, "M", "שּׂ"), - (0xFB2E, "M", "אַ"), - (0xFB2F, "M", "אָ"), - (0xFB30, "M", "אּ"), - (0xFB31, "M", "בּ"), - (0xFB32, "M", "גּ"), - (0xFB33, "M", "דּ"), - (0xFB34, "M", "הּ"), - (0xFB35, "M", "וּ"), - (0xFB36, "M", "זּ"), - (0xFB37, "X"), - (0xFB38, "M", "טּ"), - (0xFB39, "M", "יּ"), - (0xFB3A, "M", "ךּ"), - (0xFB3B, "M", "כּ"), - (0xFB3C, "M", "לּ"), - (0xFB3D, "X"), - (0xFB3E, "M", "מּ"), - (0xFB3F, "X"), - (0xFB40, "M", "נּ"), - (0xFB41, "M", "סּ"), - (0xFB42, "X"), - (0xFB43, "M", "ףּ"), - (0xFB44, "M", "פּ"), - (0xFB45, "X"), - (0xFB46, "M", "צּ"), - (0xFB47, "M", "קּ"), - (0xFB48, "M", "רּ"), - (0xFB49, "M", "שּ"), - (0xFB4A, "M", "תּ"), - (0xFB4B, "M", "וֹ"), - (0xFB4C, "M", "בֿ"), - (0xFB4D, "M", "כֿ"), - (0xFB4E, "M", "פֿ"), - (0xFB4F, "M", "אל"), - (0xFB50, "M", "ٱ"), - (0xFB52, "M", "ٻ"), - (0xFB56, "M", "پ"), - ] - - -def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFB5A, "M", "ڀ"), - (0xFB5E, "M", "ٺ"), - (0xFB62, "M", "ٿ"), - (0xFB66, "M", "ٹ"), - (0xFB6A, "M", "ڤ"), - (0xFB6E, "M", "ڦ"), - (0xFB72, "M", "ڄ"), - (0xFB76, "M", "ڃ"), - (0xFB7A, "M", "چ"), - (0xFB7E, "M", "ڇ"), - (0xFB82, "M", "ڍ"), - (0xFB84, "M", "ڌ"), - (0xFB86, "M", "ڎ"), - (0xFB88, "M", "ڈ"), - (0xFB8A, "M", "ژ"), - (0xFB8C, "M", "ڑ"), - (0xFB8E, "M", "ک"), - (0xFB92, "M", "گ"), - (0xFB96, "M", "ڳ"), - (0xFB9A, "M", "ڱ"), - (0xFB9E, "M", "ں"), - (0xFBA0, "M", "ڻ"), - (0xFBA4, "M", "ۀ"), - (0xFBA6, "M", "ہ"), - (0xFBAA, "M", "ھ"), - (0xFBAE, "M", "ے"), - (0xFBB0, "M", "ۓ"), - (0xFBB2, "V"), - (0xFBC3, "X"), - (0xFBD3, "M", "ڭ"), - (0xFBD7, "M", "ۇ"), - (0xFBD9, "M", "ۆ"), - (0xFBDB, "M", "ۈ"), - (0xFBDD, "M", "ۇٴ"), - (0xFBDE, "M", "ۋ"), - (0xFBE0, "M", "ۅ"), - (0xFBE2, "M", "ۉ"), - (0xFBE4, "M", "ې"), - (0xFBE8, "M", "ى"), - (0xFBEA, "M", "ئا"), - (0xFBEC, "M", "ئە"), - (0xFBEE, "M", "ئو"), - (0xFBF0, "M", "ئۇ"), - (0xFBF2, "M", "ئۆ"), - (0xFBF4, "M", "ئۈ"), - (0xFBF6, "M", "ئې"), - (0xFBF9, "M", "ئى"), - (0xFBFC, "M", "ی"), - (0xFC00, "M", "ئج"), - (0xFC01, "M", "ئح"), - (0xFC02, "M", "ئم"), - (0xFC03, "M", "ئى"), - (0xFC04, "M", "ئي"), - (0xFC05, "M", "بج"), - (0xFC06, "M", "بح"), - (0xFC07, "M", "بخ"), - (0xFC08, "M", "بم"), - (0xFC09, "M", "بى"), - (0xFC0A, "M", "بي"), - (0xFC0B, "M", "تج"), - (0xFC0C, "M", "تح"), - (0xFC0D, "M", "تخ"), - (0xFC0E, "M", "تم"), - (0xFC0F, "M", "تى"), - (0xFC10, "M", "تي"), - (0xFC11, "M", "ثج"), - (0xFC12, "M", "ثم"), - (0xFC13, "M", "ثى"), - (0xFC14, "M", "ثي"), - (0xFC15, "M", "جح"), - (0xFC16, "M", "جم"), - (0xFC17, "M", "حج"), - (0xFC18, "M", "حم"), - (0xFC19, "M", "خج"), - (0xFC1A, "M", "خح"), - (0xFC1B, "M", "خم"), - (0xFC1C, "M", "سج"), - (0xFC1D, "M", "سح"), - (0xFC1E, "M", "سخ"), - (0xFC1F, "M", "سم"), - (0xFC20, "M", "صح"), - (0xFC21, "M", "صم"), - (0xFC22, "M", "ضج"), - (0xFC23, "M", "ضح"), - (0xFC24, "M", "ضخ"), - (0xFC25, "M", "ضم"), - (0xFC26, "M", "طح"), - (0xFC27, "M", "طم"), - (0xFC28, "M", "ظم"), - (0xFC29, "M", "عج"), - (0xFC2A, "M", "عم"), - (0xFC2B, "M", "غج"), - (0xFC2C, "M", "غم"), - (0xFC2D, "M", "فج"), - (0xFC2E, "M", "فح"), - (0xFC2F, "M", "فخ"), - (0xFC30, "M", "فم"), - (0xFC31, "M", "فى"), - (0xFC32, "M", "في"), - (0xFC33, "M", "قح"), - ] - - -def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFC34, "M", "قم"), - (0xFC35, "M", "قى"), - (0xFC36, "M", "قي"), - (0xFC37, "M", "كا"), - (0xFC38, "M", "كج"), - (0xFC39, "M", "كح"), - (0xFC3A, "M", "كخ"), - (0xFC3B, "M", "كل"), - (0xFC3C, "M", "كم"), - (0xFC3D, "M", "كى"), - (0xFC3E, "M", "كي"), - (0xFC3F, "M", "لج"), - (0xFC40, "M", "لح"), - (0xFC41, "M", "لخ"), - (0xFC42, "M", "لم"), - (0xFC43, "M", "لى"), - (0xFC44, "M", "لي"), - (0xFC45, "M", "مج"), - (0xFC46, "M", "مح"), - (0xFC47, "M", "مخ"), - (0xFC48, "M", "مم"), - (0xFC49, "M", "مى"), - (0xFC4A, "M", "مي"), - (0xFC4B, "M", "نج"), - (0xFC4C, "M", "نح"), - (0xFC4D, "M", "نخ"), - (0xFC4E, "M", "نم"), - (0xFC4F, "M", "نى"), - (0xFC50, "M", "ني"), - (0xFC51, "M", "هج"), - (0xFC52, "M", "هم"), - (0xFC53, "M", "هى"), - (0xFC54, "M", "هي"), - (0xFC55, "M", "يج"), - (0xFC56, "M", "يح"), - (0xFC57, "M", "يخ"), - (0xFC58, "M", "يم"), - (0xFC59, "M", "يى"), - (0xFC5A, "M", "يي"), - (0xFC5B, "M", "ذٰ"), - (0xFC5C, "M", "رٰ"), - (0xFC5D, "M", "ىٰ"), - (0xFC5E, "M", " ٌّ"), - (0xFC5F, "M", " ٍّ"), - (0xFC60, "M", " َّ"), - (0xFC61, "M", " ُّ"), - (0xFC62, "M", " ِّ"), - (0xFC63, "M", " ّٰ"), - (0xFC64, "M", "ئر"), - (0xFC65, "M", "ئز"), - (0xFC66, "M", "ئم"), - (0xFC67, "M", "ئن"), - (0xFC68, "M", "ئى"), - (0xFC69, "M", "ئي"), - (0xFC6A, "M", "بر"), - (0xFC6B, "M", "بز"), - (0xFC6C, "M", "بم"), - (0xFC6D, "M", "بن"), - (0xFC6E, "M", "بى"), - (0xFC6F, "M", "بي"), - (0xFC70, "M", "تر"), - (0xFC71, "M", "تز"), - (0xFC72, "M", "تم"), - (0xFC73, "M", "تن"), - (0xFC74, "M", "تى"), - (0xFC75, "M", "تي"), - (0xFC76, "M", "ثر"), - (0xFC77, "M", "ثز"), - (0xFC78, "M", "ثم"), - (0xFC79, "M", "ثن"), - (0xFC7A, "M", "ثى"), - (0xFC7B, "M", "ثي"), - (0xFC7C, "M", "فى"), - (0xFC7D, "M", "في"), - (0xFC7E, "M", "قى"), - (0xFC7F, "M", "قي"), - (0xFC80, "M", "كا"), - (0xFC81, "M", "كل"), - (0xFC82, "M", "كم"), - (0xFC83, "M", "كى"), - (0xFC84, "M", "كي"), - (0xFC85, "M", "لم"), - (0xFC86, "M", "لى"), - (0xFC87, "M", "لي"), - (0xFC88, "M", "ما"), - (0xFC89, "M", "مم"), - (0xFC8A, "M", "نر"), - (0xFC8B, "M", "نز"), - (0xFC8C, "M", "نم"), - (0xFC8D, "M", "نن"), - (0xFC8E, "M", "نى"), - (0xFC8F, "M", "ني"), - (0xFC90, "M", "ىٰ"), - (0xFC91, "M", "ير"), - (0xFC92, "M", "يز"), - (0xFC93, "M", "يم"), - (0xFC94, "M", "ين"), - (0xFC95, "M", "يى"), - (0xFC96, "M", "يي"), - (0xFC97, "M", "ئج"), - ] - - -def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFC98, "M", "ئح"), - (0xFC99, "M", "ئخ"), - (0xFC9A, "M", "ئم"), - (0xFC9B, "M", "ئه"), - (0xFC9C, "M", "بج"), - (0xFC9D, "M", "بح"), - (0xFC9E, "M", "بخ"), - (0xFC9F, "M", "بم"), - (0xFCA0, "M", "به"), - (0xFCA1, "M", "تج"), - (0xFCA2, "M", "تح"), - (0xFCA3, "M", "تخ"), - (0xFCA4, "M", "تم"), - (0xFCA5, "M", "ته"), - (0xFCA6, "M", "ثم"), - (0xFCA7, "M", "جح"), - (0xFCA8, "M", "جم"), - (0xFCA9, "M", "حج"), - (0xFCAA, "M", "حم"), - (0xFCAB, "M", "خج"), - (0xFCAC, "M", "خم"), - (0xFCAD, "M", "سج"), - (0xFCAE, "M", "سح"), - (0xFCAF, "M", "سخ"), - (0xFCB0, "M", "سم"), - (0xFCB1, "M", "صح"), - (0xFCB2, "M", "صخ"), - (0xFCB3, "M", "صم"), - (0xFCB4, "M", "ضج"), - (0xFCB5, "M", "ضح"), - (0xFCB6, "M", "ضخ"), - (0xFCB7, "M", "ضم"), - (0xFCB8, "M", "طح"), - (0xFCB9, "M", "ظم"), - (0xFCBA, "M", "عج"), - (0xFCBB, "M", "عم"), - (0xFCBC, "M", "غج"), - (0xFCBD, "M", "غم"), - (0xFCBE, "M", "فج"), - (0xFCBF, "M", "فح"), - (0xFCC0, "M", "فخ"), - (0xFCC1, "M", "فم"), - (0xFCC2, "M", "قح"), - (0xFCC3, "M", "قم"), - (0xFCC4, "M", "كج"), - (0xFCC5, "M", "كح"), - (0xFCC6, "M", "كخ"), - (0xFCC7, "M", "كل"), - (0xFCC8, "M", "كم"), - (0xFCC9, "M", "لج"), - (0xFCCA, "M", "لح"), - (0xFCCB, "M", "لخ"), - (0xFCCC, "M", "لم"), - (0xFCCD, "M", "له"), - (0xFCCE, "M", "مج"), - (0xFCCF, "M", "مح"), - (0xFCD0, "M", "مخ"), - (0xFCD1, "M", "مم"), - (0xFCD2, "M", "نج"), - (0xFCD3, "M", "نح"), - (0xFCD4, "M", "نخ"), - (0xFCD5, "M", "نم"), - (0xFCD6, "M", "نه"), - (0xFCD7, "M", "هج"), - (0xFCD8, "M", "هم"), - (0xFCD9, "M", "هٰ"), - (0xFCDA, "M", "يج"), - (0xFCDB, "M", "يح"), - (0xFCDC, "M", "يخ"), - (0xFCDD, "M", "يم"), - (0xFCDE, "M", "يه"), - (0xFCDF, "M", "ئم"), - (0xFCE0, "M", "ئه"), - (0xFCE1, "M", "بم"), - (0xFCE2, "M", "به"), - (0xFCE3, "M", "تم"), - (0xFCE4, "M", "ته"), - (0xFCE5, "M", "ثم"), - (0xFCE6, "M", "ثه"), - (0xFCE7, "M", "سم"), - (0xFCE8, "M", "سه"), - (0xFCE9, "M", "شم"), - (0xFCEA, "M", "شه"), - (0xFCEB, "M", "كل"), - (0xFCEC, "M", "كم"), - (0xFCED, "M", "لم"), - (0xFCEE, "M", "نم"), - (0xFCEF, "M", "نه"), - (0xFCF0, "M", "يم"), - (0xFCF1, "M", "يه"), - (0xFCF2, "M", "ـَّ"), - (0xFCF3, "M", "ـُّ"), - (0xFCF4, "M", "ـِّ"), - (0xFCF5, "M", "طى"), - (0xFCF6, "M", "طي"), - (0xFCF7, "M", "عى"), - (0xFCF8, "M", "عي"), - (0xFCF9, "M", "غى"), - (0xFCFA, "M", "غي"), - (0xFCFB, "M", "سى"), - ] - - -def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFCFC, "M", "سي"), - (0xFCFD, "M", "شى"), - (0xFCFE, "M", "شي"), - (0xFCFF, "M", "حى"), - (0xFD00, "M", "حي"), - (0xFD01, "M", "جى"), - (0xFD02, "M", "جي"), - (0xFD03, "M", "خى"), - (0xFD04, "M", "خي"), - (0xFD05, "M", "صى"), - (0xFD06, "M", "صي"), - (0xFD07, "M", "ضى"), - (0xFD08, "M", "ضي"), - (0xFD09, "M", "شج"), - (0xFD0A, "M", "شح"), - (0xFD0B, "M", "شخ"), - (0xFD0C, "M", "شم"), - (0xFD0D, "M", "شر"), - (0xFD0E, "M", "سر"), - (0xFD0F, "M", "صر"), - (0xFD10, "M", "ضر"), - (0xFD11, "M", "طى"), - (0xFD12, "M", "طي"), - (0xFD13, "M", "عى"), - (0xFD14, "M", "عي"), - (0xFD15, "M", "غى"), - (0xFD16, "M", "غي"), - (0xFD17, "M", "سى"), - (0xFD18, "M", "سي"), - (0xFD19, "M", "شى"), - (0xFD1A, "M", "شي"), - (0xFD1B, "M", "حى"), - (0xFD1C, "M", "حي"), - (0xFD1D, "M", "جى"), - (0xFD1E, "M", "جي"), - (0xFD1F, "M", "خى"), - (0xFD20, "M", "خي"), - (0xFD21, "M", "صى"), - (0xFD22, "M", "صي"), - (0xFD23, "M", "ضى"), - (0xFD24, "M", "ضي"), - (0xFD25, "M", "شج"), - (0xFD26, "M", "شح"), - (0xFD27, "M", "شخ"), - (0xFD28, "M", "شم"), - (0xFD29, "M", "شر"), - (0xFD2A, "M", "سر"), - (0xFD2B, "M", "صر"), - (0xFD2C, "M", "ضر"), - (0xFD2D, "M", "شج"), - (0xFD2E, "M", "شح"), - (0xFD2F, "M", "شخ"), - (0xFD30, "M", "شم"), - (0xFD31, "M", "سه"), - (0xFD32, "M", "شه"), - (0xFD33, "M", "طم"), - (0xFD34, "M", "سج"), - (0xFD35, "M", "سح"), - (0xFD36, "M", "سخ"), - (0xFD37, "M", "شج"), - (0xFD38, "M", "شح"), - (0xFD39, "M", "شخ"), - (0xFD3A, "M", "طم"), - (0xFD3B, "M", "ظم"), - (0xFD3C, "M", "اً"), - (0xFD3E, "V"), - (0xFD50, "M", "تجم"), - (0xFD51, "M", "تحج"), - (0xFD53, "M", "تحم"), - (0xFD54, "M", "تخم"), - (0xFD55, "M", "تمج"), - (0xFD56, "M", "تمح"), - (0xFD57, "M", "تمخ"), - (0xFD58, "M", "جمح"), - (0xFD5A, "M", "حمي"), - (0xFD5B, "M", "حمى"), - (0xFD5C, "M", "سحج"), - (0xFD5D, "M", "سجح"), - (0xFD5E, "M", "سجى"), - (0xFD5F, "M", "سمح"), - (0xFD61, "M", "سمج"), - (0xFD62, "M", "سمم"), - (0xFD64, "M", "صحح"), - (0xFD66, "M", "صمم"), - (0xFD67, "M", "شحم"), - (0xFD69, "M", "شجي"), - (0xFD6A, "M", "شمخ"), - (0xFD6C, "M", "شمم"), - (0xFD6E, "M", "ضحى"), - (0xFD6F, "M", "ضخم"), - (0xFD71, "M", "طمح"), - (0xFD73, "M", "طمم"), - (0xFD74, "M", "طمي"), - (0xFD75, "M", "عجم"), - (0xFD76, "M", "عمم"), - (0xFD78, "M", "عمى"), - (0xFD79, "M", "غمم"), - (0xFD7A, "M", "غمي"), - (0xFD7B, "M", "غمى"), - (0xFD7C, "M", "فخم"), - ] - - -def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFD7E, "M", "قمح"), - (0xFD7F, "M", "قمم"), - (0xFD80, "M", "لحم"), - (0xFD81, "M", "لحي"), - (0xFD82, "M", "لحى"), - (0xFD83, "M", "لجج"), - (0xFD85, "M", "لخم"), - (0xFD87, "M", "لمح"), - (0xFD89, "M", "محج"), - (0xFD8A, "M", "محم"), - (0xFD8B, "M", "محي"), - (0xFD8C, "M", "مجح"), - (0xFD8D, "M", "مجم"), - (0xFD8E, "M", "مخج"), - (0xFD8F, "M", "مخم"), - (0xFD90, "X"), - (0xFD92, "M", "مجخ"), - (0xFD93, "M", "همج"), - (0xFD94, "M", "همم"), - (0xFD95, "M", "نحم"), - (0xFD96, "M", "نحى"), - (0xFD97, "M", "نجم"), - (0xFD99, "M", "نجى"), - (0xFD9A, "M", "نمي"), - (0xFD9B, "M", "نمى"), - (0xFD9C, "M", "يمم"), - (0xFD9E, "M", "بخي"), - (0xFD9F, "M", "تجي"), - (0xFDA0, "M", "تجى"), - (0xFDA1, "M", "تخي"), - (0xFDA2, "M", "تخى"), - (0xFDA3, "M", "تمي"), - (0xFDA4, "M", "تمى"), - (0xFDA5, "M", "جمي"), - (0xFDA6, "M", "جحى"), - (0xFDA7, "M", "جمى"), - (0xFDA8, "M", "سخى"), - (0xFDA9, "M", "صحي"), - (0xFDAA, "M", "شحي"), - (0xFDAB, "M", "ضحي"), - (0xFDAC, "M", "لجي"), - (0xFDAD, "M", "لمي"), - (0xFDAE, "M", "يحي"), - (0xFDAF, "M", "يجي"), - (0xFDB0, "M", "يمي"), - (0xFDB1, "M", "ممي"), - (0xFDB2, "M", "قمي"), - (0xFDB3, "M", "نحي"), - (0xFDB4, "M", "قمح"), - (0xFDB5, "M", "لحم"), - (0xFDB6, "M", "عمي"), - (0xFDB7, "M", "كمي"), - (0xFDB8, "M", "نجح"), - (0xFDB9, "M", "مخي"), - (0xFDBA, "M", "لجم"), - (0xFDBB, "M", "كمم"), - (0xFDBC, "M", "لجم"), - (0xFDBD, "M", "نجح"), - (0xFDBE, "M", "جحي"), - (0xFDBF, "M", "حجي"), - (0xFDC0, "M", "مجي"), - (0xFDC1, "M", "فمي"), - (0xFDC2, "M", "بحي"), - (0xFDC3, "M", "كمم"), - (0xFDC4, "M", "عجم"), - (0xFDC5, "M", "صمم"), - (0xFDC6, "M", "سخي"), - (0xFDC7, "M", "نجي"), - (0xFDC8, "X"), - (0xFDCF, "V"), - (0xFDD0, "X"), - (0xFDF0, "M", "صلے"), - (0xFDF1, "M", "قلے"), - (0xFDF2, "M", "الله"), - (0xFDF3, "M", "اكبر"), - (0xFDF4, "M", "محمد"), - (0xFDF5, "M", "صلعم"), - (0xFDF6, "M", "رسول"), - (0xFDF7, "M", "عليه"), - (0xFDF8, "M", "وسلم"), - (0xFDF9, "M", "صلى"), - (0xFDFA, "M", "صلى الله عليه وسلم"), - (0xFDFB, "M", "جل جلاله"), - (0xFDFC, "M", "ریال"), - (0xFDFD, "V"), - (0xFE00, "I"), - (0xFE10, "M", ","), - (0xFE11, "M", "、"), - (0xFE12, "X"), - (0xFE13, "M", ":"), - (0xFE14, "M", ";"), - (0xFE15, "M", "!"), - (0xFE16, "M", "?"), - (0xFE17, "M", "〖"), - (0xFE18, "M", "〗"), - (0xFE19, "X"), - (0xFE20, "V"), - (0xFE30, "X"), - (0xFE31, "M", "—"), - (0xFE32, "M", "–"), - ] - - -def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFE33, "M", "_"), - (0xFE35, "M", "("), - (0xFE36, "M", ")"), - (0xFE37, "M", "{"), - (0xFE38, "M", "}"), - (0xFE39, "M", "〔"), - (0xFE3A, "M", "〕"), - (0xFE3B, "M", "【"), - (0xFE3C, "M", "】"), - (0xFE3D, "M", "《"), - (0xFE3E, "M", "》"), - (0xFE3F, "M", "〈"), - (0xFE40, "M", "〉"), - (0xFE41, "M", "「"), - (0xFE42, "M", "」"), - (0xFE43, "M", "『"), - (0xFE44, "M", "』"), - (0xFE45, "V"), - (0xFE47, "M", "["), - (0xFE48, "M", "]"), - (0xFE49, "M", " ̅"), - (0xFE4D, "M", "_"), - (0xFE50, "M", ","), - (0xFE51, "M", "、"), - (0xFE52, "X"), - (0xFE54, "M", ";"), - (0xFE55, "M", ":"), - (0xFE56, "M", "?"), - (0xFE57, "M", "!"), - (0xFE58, "M", "—"), - (0xFE59, "M", "("), - (0xFE5A, "M", ")"), - (0xFE5B, "M", "{"), - (0xFE5C, "M", "}"), - (0xFE5D, "M", "〔"), - (0xFE5E, "M", "〕"), - (0xFE5F, "M", "#"), - (0xFE60, "M", "&"), - (0xFE61, "M", "*"), - (0xFE62, "M", "+"), - (0xFE63, "M", "-"), - (0xFE64, "M", "<"), - (0xFE65, "M", ">"), - (0xFE66, "M", "="), - (0xFE67, "X"), - (0xFE68, "M", "\\"), - (0xFE69, "M", "$"), - (0xFE6A, "M", "%"), - (0xFE6B, "M", "@"), - (0xFE6C, "X"), - (0xFE70, "M", " ً"), - (0xFE71, "M", "ـً"), - (0xFE72, "M", " ٌ"), - (0xFE73, "V"), - (0xFE74, "M", " ٍ"), - (0xFE75, "X"), - (0xFE76, "M", " َ"), - (0xFE77, "M", "ـَ"), - (0xFE78, "M", " ُ"), - (0xFE79, "M", "ـُ"), - (0xFE7A, "M", " ِ"), - (0xFE7B, "M", "ـِ"), - (0xFE7C, "M", " ّ"), - (0xFE7D, "M", "ـّ"), - (0xFE7E, "M", " ْ"), - (0xFE7F, "M", "ـْ"), - (0xFE80, "M", "ء"), - (0xFE81, "M", "آ"), - (0xFE83, "M", "أ"), - (0xFE85, "M", "ؤ"), - (0xFE87, "M", "إ"), - (0xFE89, "M", "ئ"), - (0xFE8D, "M", "ا"), - (0xFE8F, "M", "ب"), - (0xFE93, "M", "ة"), - (0xFE95, "M", "ت"), - (0xFE99, "M", "ث"), - (0xFE9D, "M", "ج"), - (0xFEA1, "M", "ح"), - (0xFEA5, "M", "خ"), - (0xFEA9, "M", "د"), - (0xFEAB, "M", "ذ"), - (0xFEAD, "M", "ر"), - (0xFEAF, "M", "ز"), - (0xFEB1, "M", "س"), - (0xFEB5, "M", "ش"), - (0xFEB9, "M", "ص"), - (0xFEBD, "M", "ض"), - (0xFEC1, "M", "ط"), - (0xFEC5, "M", "ظ"), - (0xFEC9, "M", "ع"), - (0xFECD, "M", "غ"), - (0xFED1, "M", "ف"), - (0xFED5, "M", "ق"), - (0xFED9, "M", "ك"), - (0xFEDD, "M", "ل"), - (0xFEE1, "M", "م"), - (0xFEE5, "M", "ن"), - (0xFEE9, "M", "ه"), - (0xFEED, "M", "و"), - ] - - -def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFEEF, "M", "ى"), - (0xFEF1, "M", "ي"), - (0xFEF5, "M", "لآ"), - (0xFEF7, "M", "لأ"), - (0xFEF9, "M", "لإ"), - (0xFEFB, "M", "لا"), - (0xFEFD, "X"), - (0xFEFF, "I"), - (0xFF00, "X"), - (0xFF01, "M", "!"), - (0xFF02, "M", '"'), - (0xFF03, "M", "#"), - (0xFF04, "M", "$"), - (0xFF05, "M", "%"), - (0xFF06, "M", "&"), - (0xFF07, "M", "'"), - (0xFF08, "M", "("), - (0xFF09, "M", ")"), - (0xFF0A, "M", "*"), - (0xFF0B, "M", "+"), - (0xFF0C, "M", ","), - (0xFF0D, "M", "-"), - (0xFF0E, "M", "."), - (0xFF0F, "M", "/"), - (0xFF10, "M", "0"), - (0xFF11, "M", "1"), - (0xFF12, "M", "2"), - (0xFF13, "M", "3"), - (0xFF14, "M", "4"), - (0xFF15, "M", "5"), - (0xFF16, "M", "6"), - (0xFF17, "M", "7"), - (0xFF18, "M", "8"), - (0xFF19, "M", "9"), - (0xFF1A, "M", ":"), - (0xFF1B, "M", ";"), - (0xFF1C, "M", "<"), - (0xFF1D, "M", "="), - (0xFF1E, "M", ">"), - (0xFF1F, "M", "?"), - (0xFF20, "M", "@"), - (0xFF21, "M", "a"), - (0xFF22, "M", "b"), - (0xFF23, "M", "c"), - (0xFF24, "M", "d"), - (0xFF25, "M", "e"), - (0xFF26, "M", "f"), - (0xFF27, "M", "g"), - (0xFF28, "M", "h"), - (0xFF29, "M", "i"), - (0xFF2A, "M", "j"), - (0xFF2B, "M", "k"), - (0xFF2C, "M", "l"), - (0xFF2D, "M", "m"), - (0xFF2E, "M", "n"), - (0xFF2F, "M", "o"), - (0xFF30, "M", "p"), - (0xFF31, "M", "q"), - (0xFF32, "M", "r"), - (0xFF33, "M", "s"), - (0xFF34, "M", "t"), - (0xFF35, "M", "u"), - (0xFF36, "M", "v"), - (0xFF37, "M", "w"), - (0xFF38, "M", "x"), - (0xFF39, "M", "y"), - (0xFF3A, "M", "z"), - (0xFF3B, "M", "["), - (0xFF3C, "M", "\\"), - (0xFF3D, "M", "]"), - (0xFF3E, "M", "^"), - (0xFF3F, "M", "_"), - (0xFF40, "M", "`"), - (0xFF41, "M", "a"), - (0xFF42, "M", "b"), - (0xFF43, "M", "c"), - (0xFF44, "M", "d"), - (0xFF45, "M", "e"), - (0xFF46, "M", "f"), - (0xFF47, "M", "g"), - (0xFF48, "M", "h"), - (0xFF49, "M", "i"), - (0xFF4A, "M", "j"), - (0xFF4B, "M", "k"), - (0xFF4C, "M", "l"), - (0xFF4D, "M", "m"), - (0xFF4E, "M", "n"), - (0xFF4F, "M", "o"), - (0xFF50, "M", "p"), - (0xFF51, "M", "q"), - (0xFF52, "M", "r"), - (0xFF53, "M", "s"), - (0xFF54, "M", "t"), - (0xFF55, "M", "u"), - (0xFF56, "M", "v"), - (0xFF57, "M", "w"), - (0xFF58, "M", "x"), - (0xFF59, "M", "y"), - (0xFF5A, "M", "z"), - (0xFF5B, "M", "{"), - ] - - -def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFF5C, "M", "|"), - (0xFF5D, "M", "}"), - (0xFF5E, "M", "~"), - (0xFF5F, "M", "⦅"), - (0xFF60, "M", "⦆"), - (0xFF61, "M", "."), - (0xFF62, "M", "「"), - (0xFF63, "M", "」"), - (0xFF64, "M", "、"), - (0xFF65, "M", "・"), - (0xFF66, "M", "ヲ"), - (0xFF67, "M", "ァ"), - (0xFF68, "M", "ィ"), - (0xFF69, "M", "ゥ"), - (0xFF6A, "M", "ェ"), - (0xFF6B, "M", "ォ"), - (0xFF6C, "M", "ャ"), - (0xFF6D, "M", "ュ"), - (0xFF6E, "M", "ョ"), - (0xFF6F, "M", "ッ"), - (0xFF70, "M", "ー"), - (0xFF71, "M", "ア"), - (0xFF72, "M", "イ"), - (0xFF73, "M", "ウ"), - (0xFF74, "M", "エ"), - (0xFF75, "M", "オ"), - (0xFF76, "M", "カ"), - (0xFF77, "M", "キ"), - (0xFF78, "M", "ク"), - (0xFF79, "M", "ケ"), - (0xFF7A, "M", "コ"), - (0xFF7B, "M", "サ"), - (0xFF7C, "M", "シ"), - (0xFF7D, "M", "ス"), - (0xFF7E, "M", "セ"), - (0xFF7F, "M", "ソ"), - (0xFF80, "M", "タ"), - (0xFF81, "M", "チ"), - (0xFF82, "M", "ツ"), - (0xFF83, "M", "テ"), - (0xFF84, "M", "ト"), - (0xFF85, "M", "ナ"), - (0xFF86, "M", "ニ"), - (0xFF87, "M", "ヌ"), - (0xFF88, "M", "ネ"), - (0xFF89, "M", "ノ"), - (0xFF8A, "M", "ハ"), - (0xFF8B, "M", "ヒ"), - (0xFF8C, "M", "フ"), - (0xFF8D, "M", "ヘ"), - (0xFF8E, "M", "ホ"), - (0xFF8F, "M", "マ"), - (0xFF90, "M", "ミ"), - (0xFF91, "M", "ム"), - (0xFF92, "M", "メ"), - (0xFF93, "M", "モ"), - (0xFF94, "M", "ヤ"), - (0xFF95, "M", "ユ"), - (0xFF96, "M", "ヨ"), - (0xFF97, "M", "ラ"), - (0xFF98, "M", "リ"), - (0xFF99, "M", "ル"), - (0xFF9A, "M", "レ"), - (0xFF9B, "M", "ロ"), - (0xFF9C, "M", "ワ"), - (0xFF9D, "M", "ン"), - (0xFF9E, "M", "゙"), - (0xFF9F, "M", "゚"), - (0xFFA0, "I"), - (0xFFA1, "M", "ᄀ"), - (0xFFA2, "M", "ᄁ"), - (0xFFA3, "M", "ᆪ"), - (0xFFA4, "M", "ᄂ"), - (0xFFA5, "M", "ᆬ"), - (0xFFA6, "M", "ᆭ"), - (0xFFA7, "M", "ᄃ"), - (0xFFA8, "M", "ᄄ"), - (0xFFA9, "M", "ᄅ"), - (0xFFAA, "M", "ᆰ"), - (0xFFAB, "M", "ᆱ"), - (0xFFAC, "M", "ᆲ"), - (0xFFAD, "M", "ᆳ"), - (0xFFAE, "M", "ᆴ"), - (0xFFAF, "M", "ᆵ"), - (0xFFB0, "M", "ᄚ"), - (0xFFB1, "M", "ᄆ"), - (0xFFB2, "M", "ᄇ"), - (0xFFB3, "M", "ᄈ"), - (0xFFB4, "M", "ᄡ"), - (0xFFB5, "M", "ᄉ"), - (0xFFB6, "M", "ᄊ"), - (0xFFB7, "M", "ᄋ"), - (0xFFB8, "M", "ᄌ"), - (0xFFB9, "M", "ᄍ"), - (0xFFBA, "M", "ᄎ"), - (0xFFBB, "M", "ᄏ"), - (0xFFBC, "M", "ᄐ"), - (0xFFBD, "M", "ᄑ"), - (0xFFBE, "M", "ᄒ"), - (0xFFBF, "X"), - ] - - -def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFFC2, "M", "ᅡ"), - (0xFFC3, "M", "ᅢ"), - (0xFFC4, "M", "ᅣ"), - (0xFFC5, "M", "ᅤ"), - (0xFFC6, "M", "ᅥ"), - (0xFFC7, "M", "ᅦ"), - (0xFFC8, "X"), - (0xFFCA, "M", "ᅧ"), - (0xFFCB, "M", "ᅨ"), - (0xFFCC, "M", "ᅩ"), - (0xFFCD, "M", "ᅪ"), - (0xFFCE, "M", "ᅫ"), - (0xFFCF, "M", "ᅬ"), - (0xFFD0, "X"), - (0xFFD2, "M", "ᅭ"), - (0xFFD3, "M", "ᅮ"), - (0xFFD4, "M", "ᅯ"), - (0xFFD5, "M", "ᅰ"), - (0xFFD6, "M", "ᅱ"), - (0xFFD7, "M", "ᅲ"), - (0xFFD8, "X"), - (0xFFDA, "M", "ᅳ"), - (0xFFDB, "M", "ᅴ"), - (0xFFDC, "M", "ᅵ"), - (0xFFDD, "X"), - (0xFFE0, "M", "¢"), - (0xFFE1, "M", "£"), - (0xFFE2, "M", "¬"), - (0xFFE3, "M", " ̄"), - (0xFFE4, "M", "¦"), - (0xFFE5, "M", "¥"), - (0xFFE6, "M", "₩"), - (0xFFE7, "X"), - (0xFFE8, "M", "│"), - (0xFFE9, "M", "←"), - (0xFFEA, "M", "↑"), - (0xFFEB, "M", "→"), - (0xFFEC, "M", "↓"), - (0xFFED, "M", "■"), - (0xFFEE, "M", "○"), - (0xFFEF, "X"), - (0x10000, "V"), - (0x1000C, "X"), - (0x1000D, "V"), - (0x10027, "X"), - (0x10028, "V"), - (0x1003B, "X"), - (0x1003C, "V"), - (0x1003E, "X"), - (0x1003F, "V"), - (0x1004E, "X"), - (0x10050, "V"), - (0x1005E, "X"), - (0x10080, "V"), - (0x100FB, "X"), - (0x10100, "V"), - (0x10103, "X"), - (0x10107, "V"), - (0x10134, "X"), - (0x10137, "V"), - (0x1018F, "X"), - (0x10190, "V"), - (0x1019D, "X"), - (0x101A0, "V"), - (0x101A1, "X"), - (0x101D0, "V"), - (0x101FE, "X"), - (0x10280, "V"), - (0x1029D, "X"), - (0x102A0, "V"), - (0x102D1, "X"), - (0x102E0, "V"), - (0x102FC, "X"), - (0x10300, "V"), - (0x10324, "X"), - (0x1032D, "V"), - (0x1034B, "X"), - (0x10350, "V"), - (0x1037B, "X"), - (0x10380, "V"), - (0x1039E, "X"), - (0x1039F, "V"), - (0x103C4, "X"), - (0x103C8, "V"), - (0x103D6, "X"), - (0x10400, "M", "𐐨"), - (0x10401, "M", "𐐩"), - (0x10402, "M", "𐐪"), - (0x10403, "M", "𐐫"), - (0x10404, "M", "𐐬"), - (0x10405, "M", "𐐭"), - (0x10406, "M", "𐐮"), - (0x10407, "M", "𐐯"), - (0x10408, "M", "𐐰"), - (0x10409, "M", "𐐱"), - (0x1040A, "M", "𐐲"), - (0x1040B, "M", "𐐳"), - (0x1040C, "M", "𐐴"), - (0x1040D, "M", "𐐵"), - (0x1040E, "M", "𐐶"), - ] - - -def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1040F, "M", "𐐷"), - (0x10410, "M", "𐐸"), - (0x10411, "M", "𐐹"), - (0x10412, "M", "𐐺"), - (0x10413, "M", "𐐻"), - (0x10414, "M", "𐐼"), - (0x10415, "M", "𐐽"), - (0x10416, "M", "𐐾"), - (0x10417, "M", "𐐿"), - (0x10418, "M", "𐑀"), - (0x10419, "M", "𐑁"), - (0x1041A, "M", "𐑂"), - (0x1041B, "M", "𐑃"), - (0x1041C, "M", "𐑄"), - (0x1041D, "M", "𐑅"), - (0x1041E, "M", "𐑆"), - (0x1041F, "M", "𐑇"), - (0x10420, "M", "𐑈"), - (0x10421, "M", "𐑉"), - (0x10422, "M", "𐑊"), - (0x10423, "M", "𐑋"), - (0x10424, "M", "𐑌"), - (0x10425, "M", "𐑍"), - (0x10426, "M", "𐑎"), - (0x10427, "M", "𐑏"), - (0x10428, "V"), - (0x1049E, "X"), - (0x104A0, "V"), - (0x104AA, "X"), - (0x104B0, "M", "𐓘"), - (0x104B1, "M", "𐓙"), - (0x104B2, "M", "𐓚"), - (0x104B3, "M", "𐓛"), - (0x104B4, "M", "𐓜"), - (0x104B5, "M", "𐓝"), - (0x104B6, "M", "𐓞"), - (0x104B7, "M", "𐓟"), - (0x104B8, "M", "𐓠"), - (0x104B9, "M", "𐓡"), - (0x104BA, "M", "𐓢"), - (0x104BB, "M", "𐓣"), - (0x104BC, "M", "𐓤"), - (0x104BD, "M", "𐓥"), - (0x104BE, "M", "𐓦"), - (0x104BF, "M", "𐓧"), - (0x104C0, "M", "𐓨"), - (0x104C1, "M", "𐓩"), - (0x104C2, "M", "𐓪"), - (0x104C3, "M", "𐓫"), - (0x104C4, "M", "𐓬"), - (0x104C5, "M", "𐓭"), - (0x104C6, "M", "𐓮"), - (0x104C7, "M", "𐓯"), - (0x104C8, "M", "𐓰"), - (0x104C9, "M", "𐓱"), - (0x104CA, "M", "𐓲"), - (0x104CB, "M", "𐓳"), - (0x104CC, "M", "𐓴"), - (0x104CD, "M", "𐓵"), - (0x104CE, "M", "𐓶"), - (0x104CF, "M", "𐓷"), - (0x104D0, "M", "𐓸"), - (0x104D1, "M", "𐓹"), - (0x104D2, "M", "𐓺"), - (0x104D3, "M", "𐓻"), - (0x104D4, "X"), - (0x104D8, "V"), - (0x104FC, "X"), - (0x10500, "V"), - (0x10528, "X"), - (0x10530, "V"), - (0x10564, "X"), - (0x1056F, "V"), - (0x10570, "M", "𐖗"), - (0x10571, "M", "𐖘"), - (0x10572, "M", "𐖙"), - (0x10573, "M", "𐖚"), - (0x10574, "M", "𐖛"), - (0x10575, "M", "𐖜"), - (0x10576, "M", "𐖝"), - (0x10577, "M", "𐖞"), - (0x10578, "M", "𐖟"), - (0x10579, "M", "𐖠"), - (0x1057A, "M", "𐖡"), - (0x1057B, "X"), - (0x1057C, "M", "𐖣"), - (0x1057D, "M", "𐖤"), - (0x1057E, "M", "𐖥"), - (0x1057F, "M", "𐖦"), - (0x10580, "M", "𐖧"), - (0x10581, "M", "𐖨"), - (0x10582, "M", "𐖩"), - (0x10583, "M", "𐖪"), - (0x10584, "M", "𐖫"), - (0x10585, "M", "𐖬"), - (0x10586, "M", "𐖭"), - (0x10587, "M", "𐖮"), - (0x10588, "M", "𐖯"), - (0x10589, "M", "𐖰"), - (0x1058A, "M", "𐖱"), - ] - - -def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1058B, "X"), - (0x1058C, "M", "𐖳"), - (0x1058D, "M", "𐖴"), - (0x1058E, "M", "𐖵"), - (0x1058F, "M", "𐖶"), - (0x10590, "M", "𐖷"), - (0x10591, "M", "𐖸"), - (0x10592, "M", "𐖹"), - (0x10593, "X"), - (0x10594, "M", "𐖻"), - (0x10595, "M", "𐖼"), - (0x10596, "X"), - (0x10597, "V"), - (0x105A2, "X"), - (0x105A3, "V"), - (0x105B2, "X"), - (0x105B3, "V"), - (0x105BA, "X"), - (0x105BB, "V"), - (0x105BD, "X"), - (0x105C0, "V"), - (0x105F4, "X"), - (0x10600, "V"), - (0x10737, "X"), - (0x10740, "V"), - (0x10756, "X"), - (0x10760, "V"), - (0x10768, "X"), - (0x10780, "V"), - (0x10781, "M", "ː"), - (0x10782, "M", "ˑ"), - (0x10783, "M", "æ"), - (0x10784, "M", "ʙ"), - (0x10785, "M", "ɓ"), - (0x10786, "X"), - (0x10787, "M", "ʣ"), - (0x10788, "M", "ꭦ"), - (0x10789, "M", "ʥ"), - (0x1078A, "M", "ʤ"), - (0x1078B, "M", "ɖ"), - (0x1078C, "M", "ɗ"), - (0x1078D, "M", "ᶑ"), - (0x1078E, "M", "ɘ"), - (0x1078F, "M", "ɞ"), - (0x10790, "M", "ʩ"), - (0x10791, "M", "ɤ"), - (0x10792, "M", "ɢ"), - (0x10793, "M", "ɠ"), - (0x10794, "M", "ʛ"), - (0x10795, "M", "ħ"), - (0x10796, "M", "ʜ"), - (0x10797, "M", "ɧ"), - (0x10798, "M", "ʄ"), - (0x10799, "M", "ʪ"), - (0x1079A, "M", "ʫ"), - (0x1079B, "M", "ɬ"), - (0x1079C, "M", "𝼄"), - (0x1079D, "M", "ꞎ"), - (0x1079E, "M", "ɮ"), - (0x1079F, "M", "𝼅"), - (0x107A0, "M", "ʎ"), - (0x107A1, "M", "𝼆"), - (0x107A2, "M", "ø"), - (0x107A3, "M", "ɶ"), - (0x107A4, "M", "ɷ"), - (0x107A5, "M", "q"), - (0x107A6, "M", "ɺ"), - (0x107A7, "M", "𝼈"), - (0x107A8, "M", "ɽ"), - (0x107A9, "M", "ɾ"), - (0x107AA, "M", "ʀ"), - (0x107AB, "M", "ʨ"), - (0x107AC, "M", "ʦ"), - (0x107AD, "M", "ꭧ"), - (0x107AE, "M", "ʧ"), - (0x107AF, "M", "ʈ"), - (0x107B0, "M", "ⱱ"), - (0x107B1, "X"), - (0x107B2, "M", "ʏ"), - (0x107B3, "M", "ʡ"), - (0x107B4, "M", "ʢ"), - (0x107B5, "M", "ʘ"), - (0x107B6, "M", "ǀ"), - (0x107B7, "M", "ǁ"), - (0x107B8, "M", "ǂ"), - (0x107B9, "M", "𝼊"), - (0x107BA, "M", "𝼞"), - (0x107BB, "X"), - (0x10800, "V"), - (0x10806, "X"), - (0x10808, "V"), - (0x10809, "X"), - (0x1080A, "V"), - (0x10836, "X"), - (0x10837, "V"), - (0x10839, "X"), - (0x1083C, "V"), - (0x1083D, "X"), - (0x1083F, "V"), - (0x10856, "X"), - ] - - -def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10857, "V"), - (0x1089F, "X"), - (0x108A7, "V"), - (0x108B0, "X"), - (0x108E0, "V"), - (0x108F3, "X"), - (0x108F4, "V"), - (0x108F6, "X"), - (0x108FB, "V"), - (0x1091C, "X"), - (0x1091F, "V"), - (0x1093A, "X"), - (0x1093F, "V"), - (0x10940, "X"), - (0x10980, "V"), - (0x109B8, "X"), - (0x109BC, "V"), - (0x109D0, "X"), - (0x109D2, "V"), - (0x10A04, "X"), - (0x10A05, "V"), - (0x10A07, "X"), - (0x10A0C, "V"), - (0x10A14, "X"), - (0x10A15, "V"), - (0x10A18, "X"), - (0x10A19, "V"), - (0x10A36, "X"), - (0x10A38, "V"), - (0x10A3B, "X"), - (0x10A3F, "V"), - (0x10A49, "X"), - (0x10A50, "V"), - (0x10A59, "X"), - (0x10A60, "V"), - (0x10AA0, "X"), - (0x10AC0, "V"), - (0x10AE7, "X"), - (0x10AEB, "V"), - (0x10AF7, "X"), - (0x10B00, "V"), - (0x10B36, "X"), - (0x10B39, "V"), - (0x10B56, "X"), - (0x10B58, "V"), - (0x10B73, "X"), - (0x10B78, "V"), - (0x10B92, "X"), - (0x10B99, "V"), - (0x10B9D, "X"), - (0x10BA9, "V"), - (0x10BB0, "X"), - (0x10C00, "V"), - (0x10C49, "X"), - (0x10C80, "M", "𐳀"), - (0x10C81, "M", "𐳁"), - (0x10C82, "M", "𐳂"), - (0x10C83, "M", "𐳃"), - (0x10C84, "M", "𐳄"), - (0x10C85, "M", "𐳅"), - (0x10C86, "M", "𐳆"), - (0x10C87, "M", "𐳇"), - (0x10C88, "M", "𐳈"), - (0x10C89, "M", "𐳉"), - (0x10C8A, "M", "𐳊"), - (0x10C8B, "M", "𐳋"), - (0x10C8C, "M", "𐳌"), - (0x10C8D, "M", "𐳍"), - (0x10C8E, "M", "𐳎"), - (0x10C8F, "M", "𐳏"), - (0x10C90, "M", "𐳐"), - (0x10C91, "M", "𐳑"), - (0x10C92, "M", "𐳒"), - (0x10C93, "M", "𐳓"), - (0x10C94, "M", "𐳔"), - (0x10C95, "M", "𐳕"), - (0x10C96, "M", "𐳖"), - (0x10C97, "M", "𐳗"), - (0x10C98, "M", "𐳘"), - (0x10C99, "M", "𐳙"), - (0x10C9A, "M", "𐳚"), - (0x10C9B, "M", "𐳛"), - (0x10C9C, "M", "𐳜"), - (0x10C9D, "M", "𐳝"), - (0x10C9E, "M", "𐳞"), - (0x10C9F, "M", "𐳟"), - (0x10CA0, "M", "𐳠"), - (0x10CA1, "M", "𐳡"), - (0x10CA2, "M", "𐳢"), - (0x10CA3, "M", "𐳣"), - (0x10CA4, "M", "𐳤"), - (0x10CA5, "M", "𐳥"), - (0x10CA6, "M", "𐳦"), - (0x10CA7, "M", "𐳧"), - (0x10CA8, "M", "𐳨"), - (0x10CA9, "M", "𐳩"), - (0x10CAA, "M", "𐳪"), - (0x10CAB, "M", "𐳫"), - (0x10CAC, "M", "𐳬"), - (0x10CAD, "M", "𐳭"), - ] - - -def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10CAE, "M", "𐳮"), - (0x10CAF, "M", "𐳯"), - (0x10CB0, "M", "𐳰"), - (0x10CB1, "M", "𐳱"), - (0x10CB2, "M", "𐳲"), - (0x10CB3, "X"), - (0x10CC0, "V"), - (0x10CF3, "X"), - (0x10CFA, "V"), - (0x10D28, "X"), - (0x10D30, "V"), - (0x10D3A, "X"), - (0x10D40, "V"), - (0x10D50, "M", "𐵰"), - (0x10D51, "M", "𐵱"), - (0x10D52, "M", "𐵲"), - (0x10D53, "M", "𐵳"), - (0x10D54, "M", "𐵴"), - (0x10D55, "M", "𐵵"), - (0x10D56, "M", "𐵶"), - (0x10D57, "M", "𐵷"), - (0x10D58, "M", "𐵸"), - (0x10D59, "M", "𐵹"), - (0x10D5A, "M", "𐵺"), - (0x10D5B, "M", "𐵻"), - (0x10D5C, "M", "𐵼"), - (0x10D5D, "M", "𐵽"), - (0x10D5E, "M", "𐵾"), - (0x10D5F, "M", "𐵿"), - (0x10D60, "M", "𐶀"), - (0x10D61, "M", "𐶁"), - (0x10D62, "M", "𐶂"), - (0x10D63, "M", "𐶃"), - (0x10D64, "M", "𐶄"), - (0x10D65, "M", "𐶅"), - (0x10D66, "X"), - (0x10D69, "V"), - (0x10D86, "X"), - (0x10D8E, "V"), - (0x10D90, "X"), - (0x10E60, "V"), - (0x10E7F, "X"), - (0x10E80, "V"), - (0x10EAA, "X"), - (0x10EAB, "V"), - (0x10EAE, "X"), - (0x10EB0, "V"), - (0x10EB2, "X"), - (0x10EC2, "V"), - (0x10EC5, "X"), - (0x10EFC, "V"), - (0x10F28, "X"), - (0x10F30, "V"), - (0x10F5A, "X"), - (0x10F70, "V"), - (0x10F8A, "X"), - (0x10FB0, "V"), - (0x10FCC, "X"), - (0x10FE0, "V"), - (0x10FF7, "X"), - (0x11000, "V"), - (0x1104E, "X"), - (0x11052, "V"), - (0x11076, "X"), - (0x1107F, "V"), - (0x110BD, "X"), - (0x110BE, "V"), - (0x110C3, "X"), - (0x110D0, "V"), - (0x110E9, "X"), - (0x110F0, "V"), - (0x110FA, "X"), - (0x11100, "V"), - (0x11135, "X"), - (0x11136, "V"), - (0x11148, "X"), - (0x11150, "V"), - (0x11177, "X"), - (0x11180, "V"), - (0x111E0, "X"), - (0x111E1, "V"), - (0x111F5, "X"), - (0x11200, "V"), - (0x11212, "X"), - (0x11213, "V"), - (0x11242, "X"), - (0x11280, "V"), - (0x11287, "X"), - (0x11288, "V"), - (0x11289, "X"), - (0x1128A, "V"), - (0x1128E, "X"), - (0x1128F, "V"), - (0x1129E, "X"), - (0x1129F, "V"), - (0x112AA, "X"), - (0x112B0, "V"), - (0x112EB, "X"), - (0x112F0, "V"), - (0x112FA, "X"), - ] - - -def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x11300, "V"), - (0x11304, "X"), - (0x11305, "V"), - (0x1130D, "X"), - (0x1130F, "V"), - (0x11311, "X"), - (0x11313, "V"), - (0x11329, "X"), - (0x1132A, "V"), - (0x11331, "X"), - (0x11332, "V"), - (0x11334, "X"), - (0x11335, "V"), - (0x1133A, "X"), - (0x1133B, "V"), - (0x11345, "X"), - (0x11347, "V"), - (0x11349, "X"), - (0x1134B, "V"), - (0x1134E, "X"), - (0x11350, "V"), - (0x11351, "X"), - (0x11357, "V"), - (0x11358, "X"), - (0x1135D, "V"), - (0x11364, "X"), - (0x11366, "V"), - (0x1136D, "X"), - (0x11370, "V"), - (0x11375, "X"), - (0x11380, "V"), - (0x1138A, "X"), - (0x1138B, "V"), - (0x1138C, "X"), - (0x1138E, "V"), - (0x1138F, "X"), - (0x11390, "V"), - (0x113B6, "X"), - (0x113B7, "V"), - (0x113C1, "X"), - (0x113C2, "V"), - (0x113C3, "X"), - (0x113C5, "V"), - (0x113C6, "X"), - (0x113C7, "V"), - (0x113CB, "X"), - (0x113CC, "V"), - (0x113D6, "X"), - (0x113D7, "V"), - (0x113D9, "X"), - (0x113E1, "V"), - (0x113E3, "X"), - (0x11400, "V"), - (0x1145C, "X"), - (0x1145D, "V"), - (0x11462, "X"), - (0x11480, "V"), - (0x114C8, "X"), - (0x114D0, "V"), - (0x114DA, "X"), - (0x11580, "V"), - (0x115B6, "X"), - (0x115B8, "V"), - (0x115DE, "X"), - (0x11600, "V"), - (0x11645, "X"), - (0x11650, "V"), - (0x1165A, "X"), - (0x11660, "V"), - (0x1166D, "X"), - (0x11680, "V"), - (0x116BA, "X"), - (0x116C0, "V"), - (0x116CA, "X"), - (0x116D0, "V"), - (0x116E4, "X"), - (0x11700, "V"), - (0x1171B, "X"), - (0x1171D, "V"), - (0x1172C, "X"), - (0x11730, "V"), - (0x11747, "X"), - (0x11800, "V"), - (0x1183C, "X"), - (0x118A0, "M", "𑣀"), - (0x118A1, "M", "𑣁"), - (0x118A2, "M", "𑣂"), - (0x118A3, "M", "𑣃"), - (0x118A4, "M", "𑣄"), - (0x118A5, "M", "𑣅"), - (0x118A6, "M", "𑣆"), - (0x118A7, "M", "𑣇"), - (0x118A8, "M", "𑣈"), - (0x118A9, "M", "𑣉"), - (0x118AA, "M", "𑣊"), - (0x118AB, "M", "𑣋"), - (0x118AC, "M", "𑣌"), - (0x118AD, "M", "𑣍"), - (0x118AE, "M", "𑣎"), - (0x118AF, "M", "𑣏"), - ] - - -def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x118B0, "M", "𑣐"), - (0x118B1, "M", "𑣑"), - (0x118B2, "M", "𑣒"), - (0x118B3, "M", "𑣓"), - (0x118B4, "M", "𑣔"), - (0x118B5, "M", "𑣕"), - (0x118B6, "M", "𑣖"), - (0x118B7, "M", "𑣗"), - (0x118B8, "M", "𑣘"), - (0x118B9, "M", "𑣙"), - (0x118BA, "M", "𑣚"), - (0x118BB, "M", "𑣛"), - (0x118BC, "M", "𑣜"), - (0x118BD, "M", "𑣝"), - (0x118BE, "M", "𑣞"), - (0x118BF, "M", "𑣟"), - (0x118C0, "V"), - (0x118F3, "X"), - (0x118FF, "V"), - (0x11907, "X"), - (0x11909, "V"), - (0x1190A, "X"), - (0x1190C, "V"), - (0x11914, "X"), - (0x11915, "V"), - (0x11917, "X"), - (0x11918, "V"), - (0x11936, "X"), - (0x11937, "V"), - (0x11939, "X"), - (0x1193B, "V"), - (0x11947, "X"), - (0x11950, "V"), - (0x1195A, "X"), - (0x119A0, "V"), - (0x119A8, "X"), - (0x119AA, "V"), - (0x119D8, "X"), - (0x119DA, "V"), - (0x119E5, "X"), - (0x11A00, "V"), - (0x11A48, "X"), - (0x11A50, "V"), - (0x11AA3, "X"), - (0x11AB0, "V"), - (0x11AF9, "X"), - (0x11B00, "V"), - (0x11B0A, "X"), - (0x11BC0, "V"), - (0x11BE2, "X"), - (0x11BF0, "V"), - (0x11BFA, "X"), - (0x11C00, "V"), - (0x11C09, "X"), - (0x11C0A, "V"), - (0x11C37, "X"), - (0x11C38, "V"), - (0x11C46, "X"), - (0x11C50, "V"), - (0x11C6D, "X"), - (0x11C70, "V"), - (0x11C90, "X"), - (0x11C92, "V"), - (0x11CA8, "X"), - (0x11CA9, "V"), - (0x11CB7, "X"), - (0x11D00, "V"), - (0x11D07, "X"), - (0x11D08, "V"), - (0x11D0A, "X"), - (0x11D0B, "V"), - (0x11D37, "X"), - (0x11D3A, "V"), - (0x11D3B, "X"), - (0x11D3C, "V"), - (0x11D3E, "X"), - (0x11D3F, "V"), - (0x11D48, "X"), - (0x11D50, "V"), - (0x11D5A, "X"), - (0x11D60, "V"), - (0x11D66, "X"), - (0x11D67, "V"), - (0x11D69, "X"), - (0x11D6A, "V"), - (0x11D8F, "X"), - (0x11D90, "V"), - (0x11D92, "X"), - (0x11D93, "V"), - (0x11D99, "X"), - (0x11DA0, "V"), - (0x11DAA, "X"), - (0x11EE0, "V"), - (0x11EF9, "X"), - (0x11F00, "V"), - (0x11F11, "X"), - (0x11F12, "V"), - (0x11F3B, "X"), - (0x11F3E, "V"), - (0x11F5B, "X"), - ] - - -def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x11FB0, "V"), - (0x11FB1, "X"), - (0x11FC0, "V"), - (0x11FF2, "X"), - (0x11FFF, "V"), - (0x1239A, "X"), - (0x12400, "V"), - (0x1246F, "X"), - (0x12470, "V"), - (0x12475, "X"), - (0x12480, "V"), - (0x12544, "X"), - (0x12F90, "V"), - (0x12FF3, "X"), - (0x13000, "V"), - (0x13430, "X"), - (0x13440, "V"), - (0x13456, "X"), - (0x13460, "V"), - (0x143FB, "X"), - (0x14400, "V"), - (0x14647, "X"), - (0x16100, "V"), - (0x1613A, "X"), - (0x16800, "V"), - (0x16A39, "X"), - (0x16A40, "V"), - (0x16A5F, "X"), - (0x16A60, "V"), - (0x16A6A, "X"), - (0x16A6E, "V"), - (0x16ABF, "X"), - (0x16AC0, "V"), - (0x16ACA, "X"), - (0x16AD0, "V"), - (0x16AEE, "X"), - (0x16AF0, "V"), - (0x16AF6, "X"), - (0x16B00, "V"), - (0x16B46, "X"), - (0x16B50, "V"), - (0x16B5A, "X"), - (0x16B5B, "V"), - (0x16B62, "X"), - (0x16B63, "V"), - (0x16B78, "X"), - (0x16B7D, "V"), - (0x16B90, "X"), - (0x16D40, "V"), - (0x16D7A, "X"), - (0x16E40, "M", "𖹠"), - (0x16E41, "M", "𖹡"), - (0x16E42, "M", "𖹢"), - (0x16E43, "M", "𖹣"), - (0x16E44, "M", "𖹤"), - (0x16E45, "M", "𖹥"), - (0x16E46, "M", "𖹦"), - (0x16E47, "M", "𖹧"), - (0x16E48, "M", "𖹨"), - (0x16E49, "M", "𖹩"), - (0x16E4A, "M", "𖹪"), - (0x16E4B, "M", "𖹫"), - (0x16E4C, "M", "𖹬"), - (0x16E4D, "M", "𖹭"), - (0x16E4E, "M", "𖹮"), - (0x16E4F, "M", "𖹯"), - (0x16E50, "M", "𖹰"), - (0x16E51, "M", "𖹱"), - (0x16E52, "M", "𖹲"), - (0x16E53, "M", "𖹳"), - (0x16E54, "M", "𖹴"), - (0x16E55, "M", "𖹵"), - (0x16E56, "M", "𖹶"), - (0x16E57, "M", "𖹷"), - (0x16E58, "M", "𖹸"), - (0x16E59, "M", "𖹹"), - (0x16E5A, "M", "𖹺"), - (0x16E5B, "M", "𖹻"), - (0x16E5C, "M", "𖹼"), - (0x16E5D, "M", "𖹽"), - (0x16E5E, "M", "𖹾"), - (0x16E5F, "M", "𖹿"), - (0x16E60, "V"), - (0x16E9B, "X"), - (0x16F00, "V"), - (0x16F4B, "X"), - (0x16F4F, "V"), - (0x16F88, "X"), - (0x16F8F, "V"), - (0x16FA0, "X"), - (0x16FE0, "V"), - (0x16FE5, "X"), - (0x16FF0, "V"), - (0x16FF2, "X"), - (0x17000, "V"), - (0x187F8, "X"), - (0x18800, "V"), - (0x18CD6, "X"), - (0x18CFF, "V"), - (0x18D09, "X"), - ] - - -def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1AFF0, "V"), - (0x1AFF4, "X"), - (0x1AFF5, "V"), - (0x1AFFC, "X"), - (0x1AFFD, "V"), - (0x1AFFF, "X"), - (0x1B000, "V"), - (0x1B123, "X"), - (0x1B132, "V"), - (0x1B133, "X"), - (0x1B150, "V"), - (0x1B153, "X"), - (0x1B155, "V"), - (0x1B156, "X"), - (0x1B164, "V"), - (0x1B168, "X"), - (0x1B170, "V"), - (0x1B2FC, "X"), - (0x1BC00, "V"), - (0x1BC6B, "X"), - (0x1BC70, "V"), - (0x1BC7D, "X"), - (0x1BC80, "V"), - (0x1BC89, "X"), - (0x1BC90, "V"), - (0x1BC9A, "X"), - (0x1BC9C, "V"), - (0x1BCA0, "I"), - (0x1BCA4, "X"), - (0x1CC00, "V"), - (0x1CCD6, "M", "a"), - (0x1CCD7, "M", "b"), - (0x1CCD8, "M", "c"), - (0x1CCD9, "M", "d"), - (0x1CCDA, "M", "e"), - (0x1CCDB, "M", "f"), - (0x1CCDC, "M", "g"), - (0x1CCDD, "M", "h"), - (0x1CCDE, "M", "i"), - (0x1CCDF, "M", "j"), - (0x1CCE0, "M", "k"), - (0x1CCE1, "M", "l"), - (0x1CCE2, "M", "m"), - (0x1CCE3, "M", "n"), - (0x1CCE4, "M", "o"), - (0x1CCE5, "M", "p"), - (0x1CCE6, "M", "q"), - (0x1CCE7, "M", "r"), - (0x1CCE8, "M", "s"), - (0x1CCE9, "M", "t"), - (0x1CCEA, "M", "u"), - (0x1CCEB, "M", "v"), - (0x1CCEC, "M", "w"), - (0x1CCED, "M", "x"), - (0x1CCEE, "M", "y"), - (0x1CCEF, "M", "z"), - (0x1CCF0, "M", "0"), - (0x1CCF1, "M", "1"), - (0x1CCF2, "M", "2"), - (0x1CCF3, "M", "3"), - (0x1CCF4, "M", "4"), - (0x1CCF5, "M", "5"), - (0x1CCF6, "M", "6"), - (0x1CCF7, "M", "7"), - (0x1CCF8, "M", "8"), - (0x1CCF9, "M", "9"), - (0x1CCFA, "X"), - (0x1CD00, "V"), - (0x1CEB4, "X"), - (0x1CF00, "V"), - (0x1CF2E, "X"), - (0x1CF30, "V"), - (0x1CF47, "X"), - (0x1CF50, "V"), - (0x1CFC4, "X"), - (0x1D000, "V"), - (0x1D0F6, "X"), - (0x1D100, "V"), - (0x1D127, "X"), - (0x1D129, "V"), - (0x1D15E, "M", "𝅗𝅥"), - (0x1D15F, "M", "𝅘𝅥"), - (0x1D160, "M", "𝅘𝅥𝅮"), - (0x1D161, "M", "𝅘𝅥𝅯"), - (0x1D162, "M", "𝅘𝅥𝅰"), - (0x1D163, "M", "𝅘𝅥𝅱"), - (0x1D164, "M", "𝅘𝅥𝅲"), - (0x1D165, "V"), - (0x1D173, "I"), - (0x1D17B, "V"), - (0x1D1BB, "M", "𝆹𝅥"), - (0x1D1BC, "M", "𝆺𝅥"), - (0x1D1BD, "M", "𝆹𝅥𝅮"), - (0x1D1BE, "M", "𝆺𝅥𝅮"), - (0x1D1BF, "M", "𝆹𝅥𝅯"), - (0x1D1C0, "M", "𝆺𝅥𝅯"), - (0x1D1C1, "V"), - (0x1D1EB, "X"), - (0x1D200, "V"), - (0x1D246, "X"), - ] - - -def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D2C0, "V"), - (0x1D2D4, "X"), - (0x1D2E0, "V"), - (0x1D2F4, "X"), - (0x1D300, "V"), - (0x1D357, "X"), - (0x1D360, "V"), - (0x1D379, "X"), - (0x1D400, "M", "a"), - (0x1D401, "M", "b"), - (0x1D402, "M", "c"), - (0x1D403, "M", "d"), - (0x1D404, "M", "e"), - (0x1D405, "M", "f"), - (0x1D406, "M", "g"), - (0x1D407, "M", "h"), - (0x1D408, "M", "i"), - (0x1D409, "M", "j"), - (0x1D40A, "M", "k"), - (0x1D40B, "M", "l"), - (0x1D40C, "M", "m"), - (0x1D40D, "M", "n"), - (0x1D40E, "M", "o"), - (0x1D40F, "M", "p"), - (0x1D410, "M", "q"), - (0x1D411, "M", "r"), - (0x1D412, "M", "s"), - (0x1D413, "M", "t"), - (0x1D414, "M", "u"), - (0x1D415, "M", "v"), - (0x1D416, "M", "w"), - (0x1D417, "M", "x"), - (0x1D418, "M", "y"), - (0x1D419, "M", "z"), - (0x1D41A, "M", "a"), - (0x1D41B, "M", "b"), - (0x1D41C, "M", "c"), - (0x1D41D, "M", "d"), - (0x1D41E, "M", "e"), - (0x1D41F, "M", "f"), - (0x1D420, "M", "g"), - (0x1D421, "M", "h"), - (0x1D422, "M", "i"), - (0x1D423, "M", "j"), - (0x1D424, "M", "k"), - (0x1D425, "M", "l"), - (0x1D426, "M", "m"), - (0x1D427, "M", "n"), - (0x1D428, "M", "o"), - (0x1D429, "M", "p"), - (0x1D42A, "M", "q"), - (0x1D42B, "M", "r"), - (0x1D42C, "M", "s"), - (0x1D42D, "M", "t"), - (0x1D42E, "M", "u"), - (0x1D42F, "M", "v"), - (0x1D430, "M", "w"), - (0x1D431, "M", "x"), - (0x1D432, "M", "y"), - (0x1D433, "M", "z"), - (0x1D434, "M", "a"), - (0x1D435, "M", "b"), - (0x1D436, "M", "c"), - (0x1D437, "M", "d"), - (0x1D438, "M", "e"), - (0x1D439, "M", "f"), - (0x1D43A, "M", "g"), - (0x1D43B, "M", "h"), - (0x1D43C, "M", "i"), - (0x1D43D, "M", "j"), - (0x1D43E, "M", "k"), - (0x1D43F, "M", "l"), - (0x1D440, "M", "m"), - (0x1D441, "M", "n"), - (0x1D442, "M", "o"), - (0x1D443, "M", "p"), - (0x1D444, "M", "q"), - (0x1D445, "M", "r"), - (0x1D446, "M", "s"), - (0x1D447, "M", "t"), - (0x1D448, "M", "u"), - (0x1D449, "M", "v"), - (0x1D44A, "M", "w"), - (0x1D44B, "M", "x"), - (0x1D44C, "M", "y"), - (0x1D44D, "M", "z"), - (0x1D44E, "M", "a"), - (0x1D44F, "M", "b"), - (0x1D450, "M", "c"), - (0x1D451, "M", "d"), - (0x1D452, "M", "e"), - (0x1D453, "M", "f"), - (0x1D454, "M", "g"), - (0x1D455, "X"), - (0x1D456, "M", "i"), - (0x1D457, "M", "j"), - (0x1D458, "M", "k"), - (0x1D459, "M", "l"), - (0x1D45A, "M", "m"), - (0x1D45B, "M", "n"), - ] - - -def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D45C, "M", "o"), - (0x1D45D, "M", "p"), - (0x1D45E, "M", "q"), - (0x1D45F, "M", "r"), - (0x1D460, "M", "s"), - (0x1D461, "M", "t"), - (0x1D462, "M", "u"), - (0x1D463, "M", "v"), - (0x1D464, "M", "w"), - (0x1D465, "M", "x"), - (0x1D466, "M", "y"), - (0x1D467, "M", "z"), - (0x1D468, "M", "a"), - (0x1D469, "M", "b"), - (0x1D46A, "M", "c"), - (0x1D46B, "M", "d"), - (0x1D46C, "M", "e"), - (0x1D46D, "M", "f"), - (0x1D46E, "M", "g"), - (0x1D46F, "M", "h"), - (0x1D470, "M", "i"), - (0x1D471, "M", "j"), - (0x1D472, "M", "k"), - (0x1D473, "M", "l"), - (0x1D474, "M", "m"), - (0x1D475, "M", "n"), - (0x1D476, "M", "o"), - (0x1D477, "M", "p"), - (0x1D478, "M", "q"), - (0x1D479, "M", "r"), - (0x1D47A, "M", "s"), - (0x1D47B, "M", "t"), - (0x1D47C, "M", "u"), - (0x1D47D, "M", "v"), - (0x1D47E, "M", "w"), - (0x1D47F, "M", "x"), - (0x1D480, "M", "y"), - (0x1D481, "M", "z"), - (0x1D482, "M", "a"), - (0x1D483, "M", "b"), - (0x1D484, "M", "c"), - (0x1D485, "M", "d"), - (0x1D486, "M", "e"), - (0x1D487, "M", "f"), - (0x1D488, "M", "g"), - (0x1D489, "M", "h"), - (0x1D48A, "M", "i"), - (0x1D48B, "M", "j"), - (0x1D48C, "M", "k"), - (0x1D48D, "M", "l"), - (0x1D48E, "M", "m"), - (0x1D48F, "M", "n"), - (0x1D490, "M", "o"), - (0x1D491, "M", "p"), - (0x1D492, "M", "q"), - (0x1D493, "M", "r"), - (0x1D494, "M", "s"), - (0x1D495, "M", "t"), - (0x1D496, "M", "u"), - (0x1D497, "M", "v"), - (0x1D498, "M", "w"), - (0x1D499, "M", "x"), - (0x1D49A, "M", "y"), - (0x1D49B, "M", "z"), - (0x1D49C, "M", "a"), - (0x1D49D, "X"), - (0x1D49E, "M", "c"), - (0x1D49F, "M", "d"), - (0x1D4A0, "X"), - (0x1D4A2, "M", "g"), - (0x1D4A3, "X"), - (0x1D4A5, "M", "j"), - (0x1D4A6, "M", "k"), - (0x1D4A7, "X"), - (0x1D4A9, "M", "n"), - (0x1D4AA, "M", "o"), - (0x1D4AB, "M", "p"), - (0x1D4AC, "M", "q"), - (0x1D4AD, "X"), - (0x1D4AE, "M", "s"), - (0x1D4AF, "M", "t"), - (0x1D4B0, "M", "u"), - (0x1D4B1, "M", "v"), - (0x1D4B2, "M", "w"), - (0x1D4B3, "M", "x"), - (0x1D4B4, "M", "y"), - (0x1D4B5, "M", "z"), - (0x1D4B6, "M", "a"), - (0x1D4B7, "M", "b"), - (0x1D4B8, "M", "c"), - (0x1D4B9, "M", "d"), - (0x1D4BA, "X"), - (0x1D4BB, "M", "f"), - (0x1D4BC, "X"), - (0x1D4BD, "M", "h"), - (0x1D4BE, "M", "i"), - (0x1D4BF, "M", "j"), - (0x1D4C0, "M", "k"), - (0x1D4C1, "M", "l"), - (0x1D4C2, "M", "m"), - ] - - -def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D4C3, "M", "n"), - (0x1D4C4, "X"), - (0x1D4C5, "M", "p"), - (0x1D4C6, "M", "q"), - (0x1D4C7, "M", "r"), - (0x1D4C8, "M", "s"), - (0x1D4C9, "M", "t"), - (0x1D4CA, "M", "u"), - (0x1D4CB, "M", "v"), - (0x1D4CC, "M", "w"), - (0x1D4CD, "M", "x"), - (0x1D4CE, "M", "y"), - (0x1D4CF, "M", "z"), - (0x1D4D0, "M", "a"), - (0x1D4D1, "M", "b"), - (0x1D4D2, "M", "c"), - (0x1D4D3, "M", "d"), - (0x1D4D4, "M", "e"), - (0x1D4D5, "M", "f"), - (0x1D4D6, "M", "g"), - (0x1D4D7, "M", "h"), - (0x1D4D8, "M", "i"), - (0x1D4D9, "M", "j"), - (0x1D4DA, "M", "k"), - (0x1D4DB, "M", "l"), - (0x1D4DC, "M", "m"), - (0x1D4DD, "M", "n"), - (0x1D4DE, "M", "o"), - (0x1D4DF, "M", "p"), - (0x1D4E0, "M", "q"), - (0x1D4E1, "M", "r"), - (0x1D4E2, "M", "s"), - (0x1D4E3, "M", "t"), - (0x1D4E4, "M", "u"), - (0x1D4E5, "M", "v"), - (0x1D4E6, "M", "w"), - (0x1D4E7, "M", "x"), - (0x1D4E8, "M", "y"), - (0x1D4E9, "M", "z"), - (0x1D4EA, "M", "a"), - (0x1D4EB, "M", "b"), - (0x1D4EC, "M", "c"), - (0x1D4ED, "M", "d"), - (0x1D4EE, "M", "e"), - (0x1D4EF, "M", "f"), - (0x1D4F0, "M", "g"), - (0x1D4F1, "M", "h"), - (0x1D4F2, "M", "i"), - (0x1D4F3, "M", "j"), - (0x1D4F4, "M", "k"), - (0x1D4F5, "M", "l"), - (0x1D4F6, "M", "m"), - (0x1D4F7, "M", "n"), - (0x1D4F8, "M", "o"), - (0x1D4F9, "M", "p"), - (0x1D4FA, "M", "q"), - (0x1D4FB, "M", "r"), - (0x1D4FC, "M", "s"), - (0x1D4FD, "M", "t"), - (0x1D4FE, "M", "u"), - (0x1D4FF, "M", "v"), - (0x1D500, "M", "w"), - (0x1D501, "M", "x"), - (0x1D502, "M", "y"), - (0x1D503, "M", "z"), - (0x1D504, "M", "a"), - (0x1D505, "M", "b"), - (0x1D506, "X"), - (0x1D507, "M", "d"), - (0x1D508, "M", "e"), - (0x1D509, "M", "f"), - (0x1D50A, "M", "g"), - (0x1D50B, "X"), - (0x1D50D, "M", "j"), - (0x1D50E, "M", "k"), - (0x1D50F, "M", "l"), - (0x1D510, "M", "m"), - (0x1D511, "M", "n"), - (0x1D512, "M", "o"), - (0x1D513, "M", "p"), - (0x1D514, "M", "q"), - (0x1D515, "X"), - (0x1D516, "M", "s"), - (0x1D517, "M", "t"), - (0x1D518, "M", "u"), - (0x1D519, "M", "v"), - (0x1D51A, "M", "w"), - (0x1D51B, "M", "x"), - (0x1D51C, "M", "y"), - (0x1D51D, "X"), - (0x1D51E, "M", "a"), - (0x1D51F, "M", "b"), - (0x1D520, "M", "c"), - (0x1D521, "M", "d"), - (0x1D522, "M", "e"), - (0x1D523, "M", "f"), - (0x1D524, "M", "g"), - (0x1D525, "M", "h"), - (0x1D526, "M", "i"), - (0x1D527, "M", "j"), - ] - - -def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D528, "M", "k"), - (0x1D529, "M", "l"), - (0x1D52A, "M", "m"), - (0x1D52B, "M", "n"), - (0x1D52C, "M", "o"), - (0x1D52D, "M", "p"), - (0x1D52E, "M", "q"), - (0x1D52F, "M", "r"), - (0x1D530, "M", "s"), - (0x1D531, "M", "t"), - (0x1D532, "M", "u"), - (0x1D533, "M", "v"), - (0x1D534, "M", "w"), - (0x1D535, "M", "x"), - (0x1D536, "M", "y"), - (0x1D537, "M", "z"), - (0x1D538, "M", "a"), - (0x1D539, "M", "b"), - (0x1D53A, "X"), - (0x1D53B, "M", "d"), - (0x1D53C, "M", "e"), - (0x1D53D, "M", "f"), - (0x1D53E, "M", "g"), - (0x1D53F, "X"), - (0x1D540, "M", "i"), - (0x1D541, "M", "j"), - (0x1D542, "M", "k"), - (0x1D543, "M", "l"), - (0x1D544, "M", "m"), - (0x1D545, "X"), - (0x1D546, "M", "o"), - (0x1D547, "X"), - (0x1D54A, "M", "s"), - (0x1D54B, "M", "t"), - (0x1D54C, "M", "u"), - (0x1D54D, "M", "v"), - (0x1D54E, "M", "w"), - (0x1D54F, "M", "x"), - (0x1D550, "M", "y"), - (0x1D551, "X"), - (0x1D552, "M", "a"), - (0x1D553, "M", "b"), - (0x1D554, "M", "c"), - (0x1D555, "M", "d"), - (0x1D556, "M", "e"), - (0x1D557, "M", "f"), - (0x1D558, "M", "g"), - (0x1D559, "M", "h"), - (0x1D55A, "M", "i"), - (0x1D55B, "M", "j"), - (0x1D55C, "M", "k"), - (0x1D55D, "M", "l"), - (0x1D55E, "M", "m"), - (0x1D55F, "M", "n"), - (0x1D560, "M", "o"), - (0x1D561, "M", "p"), - (0x1D562, "M", "q"), - (0x1D563, "M", "r"), - (0x1D564, "M", "s"), - (0x1D565, "M", "t"), - (0x1D566, "M", "u"), - (0x1D567, "M", "v"), - (0x1D568, "M", "w"), - (0x1D569, "M", "x"), - (0x1D56A, "M", "y"), - (0x1D56B, "M", "z"), - (0x1D56C, "M", "a"), - (0x1D56D, "M", "b"), - (0x1D56E, "M", "c"), - (0x1D56F, "M", "d"), - (0x1D570, "M", "e"), - (0x1D571, "M", "f"), - (0x1D572, "M", "g"), - (0x1D573, "M", "h"), - (0x1D574, "M", "i"), - (0x1D575, "M", "j"), - (0x1D576, "M", "k"), - (0x1D577, "M", "l"), - (0x1D578, "M", "m"), - (0x1D579, "M", "n"), - (0x1D57A, "M", "o"), - (0x1D57B, "M", "p"), - (0x1D57C, "M", "q"), - (0x1D57D, "M", "r"), - (0x1D57E, "M", "s"), - (0x1D57F, "M", "t"), - (0x1D580, "M", "u"), - (0x1D581, "M", "v"), - (0x1D582, "M", "w"), - (0x1D583, "M", "x"), - (0x1D584, "M", "y"), - (0x1D585, "M", "z"), - (0x1D586, "M", "a"), - (0x1D587, "M", "b"), - (0x1D588, "M", "c"), - (0x1D589, "M", "d"), - (0x1D58A, "M", "e"), - (0x1D58B, "M", "f"), - (0x1D58C, "M", "g"), - (0x1D58D, "M", "h"), - ] - - -def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D58E, "M", "i"), - (0x1D58F, "M", "j"), - (0x1D590, "M", "k"), - (0x1D591, "M", "l"), - (0x1D592, "M", "m"), - (0x1D593, "M", "n"), - (0x1D594, "M", "o"), - (0x1D595, "M", "p"), - (0x1D596, "M", "q"), - (0x1D597, "M", "r"), - (0x1D598, "M", "s"), - (0x1D599, "M", "t"), - (0x1D59A, "M", "u"), - (0x1D59B, "M", "v"), - (0x1D59C, "M", "w"), - (0x1D59D, "M", "x"), - (0x1D59E, "M", "y"), - (0x1D59F, "M", "z"), - (0x1D5A0, "M", "a"), - (0x1D5A1, "M", "b"), - (0x1D5A2, "M", "c"), - (0x1D5A3, "M", "d"), - (0x1D5A4, "M", "e"), - (0x1D5A5, "M", "f"), - (0x1D5A6, "M", "g"), - (0x1D5A7, "M", "h"), - (0x1D5A8, "M", "i"), - (0x1D5A9, "M", "j"), - (0x1D5AA, "M", "k"), - (0x1D5AB, "M", "l"), - (0x1D5AC, "M", "m"), - (0x1D5AD, "M", "n"), - (0x1D5AE, "M", "o"), - (0x1D5AF, "M", "p"), - (0x1D5B0, "M", "q"), - (0x1D5B1, "M", "r"), - (0x1D5B2, "M", "s"), - (0x1D5B3, "M", "t"), - (0x1D5B4, "M", "u"), - (0x1D5B5, "M", "v"), - (0x1D5B6, "M", "w"), - (0x1D5B7, "M", "x"), - (0x1D5B8, "M", "y"), - (0x1D5B9, "M", "z"), - (0x1D5BA, "M", "a"), - (0x1D5BB, "M", "b"), - (0x1D5BC, "M", "c"), - (0x1D5BD, "M", "d"), - (0x1D5BE, "M", "e"), - (0x1D5BF, "M", "f"), - (0x1D5C0, "M", "g"), - (0x1D5C1, "M", "h"), - (0x1D5C2, "M", "i"), - (0x1D5C3, "M", "j"), - (0x1D5C4, "M", "k"), - (0x1D5C5, "M", "l"), - (0x1D5C6, "M", "m"), - (0x1D5C7, "M", "n"), - (0x1D5C8, "M", "o"), - (0x1D5C9, "M", "p"), - (0x1D5CA, "M", "q"), - (0x1D5CB, "M", "r"), - (0x1D5CC, "M", "s"), - (0x1D5CD, "M", "t"), - (0x1D5CE, "M", "u"), - (0x1D5CF, "M", "v"), - (0x1D5D0, "M", "w"), - (0x1D5D1, "M", "x"), - (0x1D5D2, "M", "y"), - (0x1D5D3, "M", "z"), - (0x1D5D4, "M", "a"), - (0x1D5D5, "M", "b"), - (0x1D5D6, "M", "c"), - (0x1D5D7, "M", "d"), - (0x1D5D8, "M", "e"), - (0x1D5D9, "M", "f"), - (0x1D5DA, "M", "g"), - (0x1D5DB, "M", "h"), - (0x1D5DC, "M", "i"), - (0x1D5DD, "M", "j"), - (0x1D5DE, "M", "k"), - (0x1D5DF, "M", "l"), - (0x1D5E0, "M", "m"), - (0x1D5E1, "M", "n"), - (0x1D5E2, "M", "o"), - (0x1D5E3, "M", "p"), - (0x1D5E4, "M", "q"), - (0x1D5E5, "M", "r"), - (0x1D5E6, "M", "s"), - (0x1D5E7, "M", "t"), - (0x1D5E8, "M", "u"), - (0x1D5E9, "M", "v"), - (0x1D5EA, "M", "w"), - (0x1D5EB, "M", "x"), - (0x1D5EC, "M", "y"), - (0x1D5ED, "M", "z"), - (0x1D5EE, "M", "a"), - (0x1D5EF, "M", "b"), - (0x1D5F0, "M", "c"), - (0x1D5F1, "M", "d"), - ] - - -def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D5F2, "M", "e"), - (0x1D5F3, "M", "f"), - (0x1D5F4, "M", "g"), - (0x1D5F5, "M", "h"), - (0x1D5F6, "M", "i"), - (0x1D5F7, "M", "j"), - (0x1D5F8, "M", "k"), - (0x1D5F9, "M", "l"), - (0x1D5FA, "M", "m"), - (0x1D5FB, "M", "n"), - (0x1D5FC, "M", "o"), - (0x1D5FD, "M", "p"), - (0x1D5FE, "M", "q"), - (0x1D5FF, "M", "r"), - (0x1D600, "M", "s"), - (0x1D601, "M", "t"), - (0x1D602, "M", "u"), - (0x1D603, "M", "v"), - (0x1D604, "M", "w"), - (0x1D605, "M", "x"), - (0x1D606, "M", "y"), - (0x1D607, "M", "z"), - (0x1D608, "M", "a"), - (0x1D609, "M", "b"), - (0x1D60A, "M", "c"), - (0x1D60B, "M", "d"), - (0x1D60C, "M", "e"), - (0x1D60D, "M", "f"), - (0x1D60E, "M", "g"), - (0x1D60F, "M", "h"), - (0x1D610, "M", "i"), - (0x1D611, "M", "j"), - (0x1D612, "M", "k"), - (0x1D613, "M", "l"), - (0x1D614, "M", "m"), - (0x1D615, "M", "n"), - (0x1D616, "M", "o"), - (0x1D617, "M", "p"), - (0x1D618, "M", "q"), - (0x1D619, "M", "r"), - (0x1D61A, "M", "s"), - (0x1D61B, "M", "t"), - (0x1D61C, "M", "u"), - (0x1D61D, "M", "v"), - (0x1D61E, "M", "w"), - (0x1D61F, "M", "x"), - (0x1D620, "M", "y"), - (0x1D621, "M", "z"), - (0x1D622, "M", "a"), - (0x1D623, "M", "b"), - (0x1D624, "M", "c"), - (0x1D625, "M", "d"), - (0x1D626, "M", "e"), - (0x1D627, "M", "f"), - (0x1D628, "M", "g"), - (0x1D629, "M", "h"), - (0x1D62A, "M", "i"), - (0x1D62B, "M", "j"), - (0x1D62C, "M", "k"), - (0x1D62D, "M", "l"), - (0x1D62E, "M", "m"), - (0x1D62F, "M", "n"), - (0x1D630, "M", "o"), - (0x1D631, "M", "p"), - (0x1D632, "M", "q"), - (0x1D633, "M", "r"), - (0x1D634, "M", "s"), - (0x1D635, "M", "t"), - (0x1D636, "M", "u"), - (0x1D637, "M", "v"), - (0x1D638, "M", "w"), - (0x1D639, "M", "x"), - (0x1D63A, "M", "y"), - (0x1D63B, "M", "z"), - (0x1D63C, "M", "a"), - (0x1D63D, "M", "b"), - (0x1D63E, "M", "c"), - (0x1D63F, "M", "d"), - (0x1D640, "M", "e"), - (0x1D641, "M", "f"), - (0x1D642, "M", "g"), - (0x1D643, "M", "h"), - (0x1D644, "M", "i"), - (0x1D645, "M", "j"), - (0x1D646, "M", "k"), - (0x1D647, "M", "l"), - (0x1D648, "M", "m"), - (0x1D649, "M", "n"), - (0x1D64A, "M", "o"), - (0x1D64B, "M", "p"), - (0x1D64C, "M", "q"), - (0x1D64D, "M", "r"), - (0x1D64E, "M", "s"), - (0x1D64F, "M", "t"), - (0x1D650, "M", "u"), - (0x1D651, "M", "v"), - (0x1D652, "M", "w"), - (0x1D653, "M", "x"), - (0x1D654, "M", "y"), - (0x1D655, "M", "z"), - ] - - -def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D656, "M", "a"), - (0x1D657, "M", "b"), - (0x1D658, "M", "c"), - (0x1D659, "M", "d"), - (0x1D65A, "M", "e"), - (0x1D65B, "M", "f"), - (0x1D65C, "M", "g"), - (0x1D65D, "M", "h"), - (0x1D65E, "M", "i"), - (0x1D65F, "M", "j"), - (0x1D660, "M", "k"), - (0x1D661, "M", "l"), - (0x1D662, "M", "m"), - (0x1D663, "M", "n"), - (0x1D664, "M", "o"), - (0x1D665, "M", "p"), - (0x1D666, "M", "q"), - (0x1D667, "M", "r"), - (0x1D668, "M", "s"), - (0x1D669, "M", "t"), - (0x1D66A, "M", "u"), - (0x1D66B, "M", "v"), - (0x1D66C, "M", "w"), - (0x1D66D, "M", "x"), - (0x1D66E, "M", "y"), - (0x1D66F, "M", "z"), - (0x1D670, "M", "a"), - (0x1D671, "M", "b"), - (0x1D672, "M", "c"), - (0x1D673, "M", "d"), - (0x1D674, "M", "e"), - (0x1D675, "M", "f"), - (0x1D676, "M", "g"), - (0x1D677, "M", "h"), - (0x1D678, "M", "i"), - (0x1D679, "M", "j"), - (0x1D67A, "M", "k"), - (0x1D67B, "M", "l"), - (0x1D67C, "M", "m"), - (0x1D67D, "M", "n"), - (0x1D67E, "M", "o"), - (0x1D67F, "M", "p"), - (0x1D680, "M", "q"), - (0x1D681, "M", "r"), - (0x1D682, "M", "s"), - (0x1D683, "M", "t"), - (0x1D684, "M", "u"), - (0x1D685, "M", "v"), - (0x1D686, "M", "w"), - (0x1D687, "M", "x"), - (0x1D688, "M", "y"), - (0x1D689, "M", "z"), - (0x1D68A, "M", "a"), - (0x1D68B, "M", "b"), - (0x1D68C, "M", "c"), - (0x1D68D, "M", "d"), - (0x1D68E, "M", "e"), - (0x1D68F, "M", "f"), - (0x1D690, "M", "g"), - (0x1D691, "M", "h"), - (0x1D692, "M", "i"), - (0x1D693, "M", "j"), - (0x1D694, "M", "k"), - (0x1D695, "M", "l"), - (0x1D696, "M", "m"), - (0x1D697, "M", "n"), - (0x1D698, "M", "o"), - (0x1D699, "M", "p"), - (0x1D69A, "M", "q"), - (0x1D69B, "M", "r"), - (0x1D69C, "M", "s"), - (0x1D69D, "M", "t"), - (0x1D69E, "M", "u"), - (0x1D69F, "M", "v"), - (0x1D6A0, "M", "w"), - (0x1D6A1, "M", "x"), - (0x1D6A2, "M", "y"), - (0x1D6A3, "M", "z"), - (0x1D6A4, "M", "ı"), - (0x1D6A5, "M", "ȷ"), - (0x1D6A6, "X"), - (0x1D6A8, "M", "α"), - (0x1D6A9, "M", "β"), - (0x1D6AA, "M", "γ"), - (0x1D6AB, "M", "δ"), - (0x1D6AC, "M", "ε"), - (0x1D6AD, "M", "ζ"), - (0x1D6AE, "M", "η"), - (0x1D6AF, "M", "θ"), - (0x1D6B0, "M", "ι"), - (0x1D6B1, "M", "κ"), - (0x1D6B2, "M", "λ"), - (0x1D6B3, "M", "μ"), - (0x1D6B4, "M", "ν"), - (0x1D6B5, "M", "ξ"), - (0x1D6B6, "M", "ο"), - (0x1D6B7, "M", "π"), - (0x1D6B8, "M", "ρ"), - (0x1D6B9, "M", "θ"), - (0x1D6BA, "M", "σ"), - ] - - -def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D6BB, "M", "τ"), - (0x1D6BC, "M", "υ"), - (0x1D6BD, "M", "φ"), - (0x1D6BE, "M", "χ"), - (0x1D6BF, "M", "ψ"), - (0x1D6C0, "M", "ω"), - (0x1D6C1, "M", "∇"), - (0x1D6C2, "M", "α"), - (0x1D6C3, "M", "β"), - (0x1D6C4, "M", "γ"), - (0x1D6C5, "M", "δ"), - (0x1D6C6, "M", "ε"), - (0x1D6C7, "M", "ζ"), - (0x1D6C8, "M", "η"), - (0x1D6C9, "M", "θ"), - (0x1D6CA, "M", "ι"), - (0x1D6CB, "M", "κ"), - (0x1D6CC, "M", "λ"), - (0x1D6CD, "M", "μ"), - (0x1D6CE, "M", "ν"), - (0x1D6CF, "M", "ξ"), - (0x1D6D0, "M", "ο"), - (0x1D6D1, "M", "π"), - (0x1D6D2, "M", "ρ"), - (0x1D6D3, "M", "σ"), - (0x1D6D5, "M", "τ"), - (0x1D6D6, "M", "υ"), - (0x1D6D7, "M", "φ"), - (0x1D6D8, "M", "χ"), - (0x1D6D9, "M", "ψ"), - (0x1D6DA, "M", "ω"), - (0x1D6DB, "M", "∂"), - (0x1D6DC, "M", "ε"), - (0x1D6DD, "M", "θ"), - (0x1D6DE, "M", "κ"), - (0x1D6DF, "M", "φ"), - (0x1D6E0, "M", "ρ"), - (0x1D6E1, "M", "π"), - (0x1D6E2, "M", "α"), - (0x1D6E3, "M", "β"), - (0x1D6E4, "M", "γ"), - (0x1D6E5, "M", "δ"), - (0x1D6E6, "M", "ε"), - (0x1D6E7, "M", "ζ"), - (0x1D6E8, "M", "η"), - (0x1D6E9, "M", "θ"), - (0x1D6EA, "M", "ι"), - (0x1D6EB, "M", "κ"), - (0x1D6EC, "M", "λ"), - (0x1D6ED, "M", "μ"), - (0x1D6EE, "M", "ν"), - (0x1D6EF, "M", "ξ"), - (0x1D6F0, "M", "ο"), - (0x1D6F1, "M", "π"), - (0x1D6F2, "M", "ρ"), - (0x1D6F3, "M", "θ"), - (0x1D6F4, "M", "σ"), - (0x1D6F5, "M", "τ"), - (0x1D6F6, "M", "υ"), - (0x1D6F7, "M", "φ"), - (0x1D6F8, "M", "χ"), - (0x1D6F9, "M", "ψ"), - (0x1D6FA, "M", "ω"), - (0x1D6FB, "M", "∇"), - (0x1D6FC, "M", "α"), - (0x1D6FD, "M", "β"), - (0x1D6FE, "M", "γ"), - (0x1D6FF, "M", "δ"), - (0x1D700, "M", "ε"), - (0x1D701, "M", "ζ"), - (0x1D702, "M", "η"), - (0x1D703, "M", "θ"), - (0x1D704, "M", "ι"), - (0x1D705, "M", "κ"), - (0x1D706, "M", "λ"), - (0x1D707, "M", "μ"), - (0x1D708, "M", "ν"), - (0x1D709, "M", "ξ"), - (0x1D70A, "M", "ο"), - (0x1D70B, "M", "π"), - (0x1D70C, "M", "ρ"), - (0x1D70D, "M", "σ"), - (0x1D70F, "M", "τ"), - (0x1D710, "M", "υ"), - (0x1D711, "M", "φ"), - (0x1D712, "M", "χ"), - (0x1D713, "M", "ψ"), - (0x1D714, "M", "ω"), - (0x1D715, "M", "∂"), - (0x1D716, "M", "ε"), - (0x1D717, "M", "θ"), - (0x1D718, "M", "κ"), - (0x1D719, "M", "φ"), - (0x1D71A, "M", "ρ"), - (0x1D71B, "M", "π"), - (0x1D71C, "M", "α"), - (0x1D71D, "M", "β"), - (0x1D71E, "M", "γ"), - (0x1D71F, "M", "δ"), - (0x1D720, "M", "ε"), - ] - - -def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D721, "M", "ζ"), - (0x1D722, "M", "η"), - (0x1D723, "M", "θ"), - (0x1D724, "M", "ι"), - (0x1D725, "M", "κ"), - (0x1D726, "M", "λ"), - (0x1D727, "M", "μ"), - (0x1D728, "M", "ν"), - (0x1D729, "M", "ξ"), - (0x1D72A, "M", "ο"), - (0x1D72B, "M", "π"), - (0x1D72C, "M", "ρ"), - (0x1D72D, "M", "θ"), - (0x1D72E, "M", "σ"), - (0x1D72F, "M", "τ"), - (0x1D730, "M", "υ"), - (0x1D731, "M", "φ"), - (0x1D732, "M", "χ"), - (0x1D733, "M", "ψ"), - (0x1D734, "M", "ω"), - (0x1D735, "M", "∇"), - (0x1D736, "M", "α"), - (0x1D737, "M", "β"), - (0x1D738, "M", "γ"), - (0x1D739, "M", "δ"), - (0x1D73A, "M", "ε"), - (0x1D73B, "M", "ζ"), - (0x1D73C, "M", "η"), - (0x1D73D, "M", "θ"), - (0x1D73E, "M", "ι"), - (0x1D73F, "M", "κ"), - (0x1D740, "M", "λ"), - (0x1D741, "M", "μ"), - (0x1D742, "M", "ν"), - (0x1D743, "M", "ξ"), - (0x1D744, "M", "ο"), - (0x1D745, "M", "π"), - (0x1D746, "M", "ρ"), - (0x1D747, "M", "σ"), - (0x1D749, "M", "τ"), - (0x1D74A, "M", "υ"), - (0x1D74B, "M", "φ"), - (0x1D74C, "M", "χ"), - (0x1D74D, "M", "ψ"), - (0x1D74E, "M", "ω"), - (0x1D74F, "M", "∂"), - (0x1D750, "M", "ε"), - (0x1D751, "M", "θ"), - (0x1D752, "M", "κ"), - (0x1D753, "M", "φ"), - (0x1D754, "M", "ρ"), - (0x1D755, "M", "π"), - (0x1D756, "M", "α"), - (0x1D757, "M", "β"), - (0x1D758, "M", "γ"), - (0x1D759, "M", "δ"), - (0x1D75A, "M", "ε"), - (0x1D75B, "M", "ζ"), - (0x1D75C, "M", "η"), - (0x1D75D, "M", "θ"), - (0x1D75E, "M", "ι"), - (0x1D75F, "M", "κ"), - (0x1D760, "M", "λ"), - (0x1D761, "M", "μ"), - (0x1D762, "M", "ν"), - (0x1D763, "M", "ξ"), - (0x1D764, "M", "ο"), - (0x1D765, "M", "π"), - (0x1D766, "M", "ρ"), - (0x1D767, "M", "θ"), - (0x1D768, "M", "σ"), - (0x1D769, "M", "τ"), - (0x1D76A, "M", "υ"), - (0x1D76B, "M", "φ"), - (0x1D76C, "M", "χ"), - (0x1D76D, "M", "ψ"), - (0x1D76E, "M", "ω"), - (0x1D76F, "M", "∇"), - (0x1D770, "M", "α"), - (0x1D771, "M", "β"), - (0x1D772, "M", "γ"), - (0x1D773, "M", "δ"), - (0x1D774, "M", "ε"), - (0x1D775, "M", "ζ"), - (0x1D776, "M", "η"), - (0x1D777, "M", "θ"), - (0x1D778, "M", "ι"), - (0x1D779, "M", "κ"), - (0x1D77A, "M", "λ"), - (0x1D77B, "M", "μ"), - (0x1D77C, "M", "ν"), - (0x1D77D, "M", "ξ"), - (0x1D77E, "M", "ο"), - (0x1D77F, "M", "π"), - (0x1D780, "M", "ρ"), - (0x1D781, "M", "σ"), - (0x1D783, "M", "τ"), - (0x1D784, "M", "υ"), - (0x1D785, "M", "φ"), - (0x1D786, "M", "χ"), - ] - - -def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D787, "M", "ψ"), - (0x1D788, "M", "ω"), - (0x1D789, "M", "∂"), - (0x1D78A, "M", "ε"), - (0x1D78B, "M", "θ"), - (0x1D78C, "M", "κ"), - (0x1D78D, "M", "φ"), - (0x1D78E, "M", "ρ"), - (0x1D78F, "M", "π"), - (0x1D790, "M", "α"), - (0x1D791, "M", "β"), - (0x1D792, "M", "γ"), - (0x1D793, "M", "δ"), - (0x1D794, "M", "ε"), - (0x1D795, "M", "ζ"), - (0x1D796, "M", "η"), - (0x1D797, "M", "θ"), - (0x1D798, "M", "ι"), - (0x1D799, "M", "κ"), - (0x1D79A, "M", "λ"), - (0x1D79B, "M", "μ"), - (0x1D79C, "M", "ν"), - (0x1D79D, "M", "ξ"), - (0x1D79E, "M", "ο"), - (0x1D79F, "M", "π"), - (0x1D7A0, "M", "ρ"), - (0x1D7A1, "M", "θ"), - (0x1D7A2, "M", "σ"), - (0x1D7A3, "M", "τ"), - (0x1D7A4, "M", "υ"), - (0x1D7A5, "M", "φ"), - (0x1D7A6, "M", "χ"), - (0x1D7A7, "M", "ψ"), - (0x1D7A8, "M", "ω"), - (0x1D7A9, "M", "∇"), - (0x1D7AA, "M", "α"), - (0x1D7AB, "M", "β"), - (0x1D7AC, "M", "γ"), - (0x1D7AD, "M", "δ"), - (0x1D7AE, "M", "ε"), - (0x1D7AF, "M", "ζ"), - (0x1D7B0, "M", "η"), - (0x1D7B1, "M", "θ"), - (0x1D7B2, "M", "ι"), - (0x1D7B3, "M", "κ"), - (0x1D7B4, "M", "λ"), - (0x1D7B5, "M", "μ"), - (0x1D7B6, "M", "ν"), - (0x1D7B7, "M", "ξ"), - (0x1D7B8, "M", "ο"), - (0x1D7B9, "M", "π"), - (0x1D7BA, "M", "ρ"), - (0x1D7BB, "M", "σ"), - (0x1D7BD, "M", "τ"), - (0x1D7BE, "M", "υ"), - (0x1D7BF, "M", "φ"), - (0x1D7C0, "M", "χ"), - (0x1D7C1, "M", "ψ"), - (0x1D7C2, "M", "ω"), - (0x1D7C3, "M", "∂"), - (0x1D7C4, "M", "ε"), - (0x1D7C5, "M", "θ"), - (0x1D7C6, "M", "κ"), - (0x1D7C7, "M", "φ"), - (0x1D7C8, "M", "ρ"), - (0x1D7C9, "M", "π"), - (0x1D7CA, "M", "ϝ"), - (0x1D7CC, "X"), - (0x1D7CE, "M", "0"), - (0x1D7CF, "M", "1"), - (0x1D7D0, "M", "2"), - (0x1D7D1, "M", "3"), - (0x1D7D2, "M", "4"), - (0x1D7D3, "M", "5"), - (0x1D7D4, "M", "6"), - (0x1D7D5, "M", "7"), - (0x1D7D6, "M", "8"), - (0x1D7D7, "M", "9"), - (0x1D7D8, "M", "0"), - (0x1D7D9, "M", "1"), - (0x1D7DA, "M", "2"), - (0x1D7DB, "M", "3"), - (0x1D7DC, "M", "4"), - (0x1D7DD, "M", "5"), - (0x1D7DE, "M", "6"), - (0x1D7DF, "M", "7"), - (0x1D7E0, "M", "8"), - (0x1D7E1, "M", "9"), - (0x1D7E2, "M", "0"), - (0x1D7E3, "M", "1"), - (0x1D7E4, "M", "2"), - (0x1D7E5, "M", "3"), - (0x1D7E6, "M", "4"), - (0x1D7E7, "M", "5"), - (0x1D7E8, "M", "6"), - (0x1D7E9, "M", "7"), - (0x1D7EA, "M", "8"), - (0x1D7EB, "M", "9"), - (0x1D7EC, "M", "0"), - (0x1D7ED, "M", "1"), - ] - - -def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D7EE, "M", "2"), - (0x1D7EF, "M", "3"), - (0x1D7F0, "M", "4"), - (0x1D7F1, "M", "5"), - (0x1D7F2, "M", "6"), - (0x1D7F3, "M", "7"), - (0x1D7F4, "M", "8"), - (0x1D7F5, "M", "9"), - (0x1D7F6, "M", "0"), - (0x1D7F7, "M", "1"), - (0x1D7F8, "M", "2"), - (0x1D7F9, "M", "3"), - (0x1D7FA, "M", "4"), - (0x1D7FB, "M", "5"), - (0x1D7FC, "M", "6"), - (0x1D7FD, "M", "7"), - (0x1D7FE, "M", "8"), - (0x1D7FF, "M", "9"), - (0x1D800, "V"), - (0x1DA8C, "X"), - (0x1DA9B, "V"), - (0x1DAA0, "X"), - (0x1DAA1, "V"), - (0x1DAB0, "X"), - (0x1DF00, "V"), - (0x1DF1F, "X"), - (0x1DF25, "V"), - (0x1DF2B, "X"), - (0x1E000, "V"), - (0x1E007, "X"), - (0x1E008, "V"), - (0x1E019, "X"), - (0x1E01B, "V"), - (0x1E022, "X"), - (0x1E023, "V"), - (0x1E025, "X"), - (0x1E026, "V"), - (0x1E02B, "X"), - (0x1E030, "M", "а"), - (0x1E031, "M", "б"), - (0x1E032, "M", "в"), - (0x1E033, "M", "г"), - (0x1E034, "M", "д"), - (0x1E035, "M", "е"), - (0x1E036, "M", "ж"), - (0x1E037, "M", "з"), - (0x1E038, "M", "и"), - (0x1E039, "M", "к"), - (0x1E03A, "M", "л"), - (0x1E03B, "M", "м"), - (0x1E03C, "M", "о"), - (0x1E03D, "M", "п"), - (0x1E03E, "M", "р"), - (0x1E03F, "M", "с"), - (0x1E040, "M", "т"), - (0x1E041, "M", "у"), - (0x1E042, "M", "ф"), - (0x1E043, "M", "х"), - (0x1E044, "M", "ц"), - (0x1E045, "M", "ч"), - (0x1E046, "M", "ш"), - (0x1E047, "M", "ы"), - (0x1E048, "M", "э"), - (0x1E049, "M", "ю"), - (0x1E04A, "M", "ꚉ"), - (0x1E04B, "M", "ә"), - (0x1E04C, "M", "і"), - (0x1E04D, "M", "ј"), - (0x1E04E, "M", "ө"), - (0x1E04F, "M", "ү"), - (0x1E050, "M", "ӏ"), - (0x1E051, "M", "а"), - (0x1E052, "M", "б"), - (0x1E053, "M", "в"), - (0x1E054, "M", "г"), - (0x1E055, "M", "д"), - (0x1E056, "M", "е"), - (0x1E057, "M", "ж"), - (0x1E058, "M", "з"), - (0x1E059, "M", "и"), - (0x1E05A, "M", "к"), - (0x1E05B, "M", "л"), - (0x1E05C, "M", "о"), - (0x1E05D, "M", "п"), - (0x1E05E, "M", "с"), - (0x1E05F, "M", "у"), - (0x1E060, "M", "ф"), - (0x1E061, "M", "х"), - (0x1E062, "M", "ц"), - (0x1E063, "M", "ч"), - (0x1E064, "M", "ш"), - (0x1E065, "M", "ъ"), - (0x1E066, "M", "ы"), - (0x1E067, "M", "ґ"), - (0x1E068, "M", "і"), - (0x1E069, "M", "ѕ"), - (0x1E06A, "M", "џ"), - (0x1E06B, "M", "ҫ"), - (0x1E06C, "M", "ꙑ"), - (0x1E06D, "M", "ұ"), - ] - - -def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E06E, "X"), - (0x1E08F, "V"), - (0x1E090, "X"), - (0x1E100, "V"), - (0x1E12D, "X"), - (0x1E130, "V"), - (0x1E13E, "X"), - (0x1E140, "V"), - (0x1E14A, "X"), - (0x1E14E, "V"), - (0x1E150, "X"), - (0x1E290, "V"), - (0x1E2AF, "X"), - (0x1E2C0, "V"), - (0x1E2FA, "X"), - (0x1E2FF, "V"), - (0x1E300, "X"), - (0x1E4D0, "V"), - (0x1E4FA, "X"), - (0x1E5D0, "V"), - (0x1E5FB, "X"), - (0x1E5FF, "V"), - (0x1E600, "X"), - (0x1E7E0, "V"), - (0x1E7E7, "X"), - (0x1E7E8, "V"), - (0x1E7EC, "X"), - (0x1E7ED, "V"), - (0x1E7EF, "X"), - (0x1E7F0, "V"), - (0x1E7FF, "X"), - (0x1E800, "V"), - (0x1E8C5, "X"), - (0x1E8C7, "V"), - (0x1E8D7, "X"), - (0x1E900, "M", "𞤢"), - (0x1E901, "M", "𞤣"), - (0x1E902, "M", "𞤤"), - (0x1E903, "M", "𞤥"), - (0x1E904, "M", "𞤦"), - (0x1E905, "M", "𞤧"), - (0x1E906, "M", "𞤨"), - (0x1E907, "M", "𞤩"), - (0x1E908, "M", "𞤪"), - (0x1E909, "M", "𞤫"), - (0x1E90A, "M", "𞤬"), - (0x1E90B, "M", "𞤭"), - (0x1E90C, "M", "𞤮"), - (0x1E90D, "M", "𞤯"), - (0x1E90E, "M", "𞤰"), - (0x1E90F, "M", "𞤱"), - (0x1E910, "M", "𞤲"), - (0x1E911, "M", "𞤳"), - (0x1E912, "M", "𞤴"), - (0x1E913, "M", "𞤵"), - (0x1E914, "M", "𞤶"), - (0x1E915, "M", "𞤷"), - (0x1E916, "M", "𞤸"), - (0x1E917, "M", "𞤹"), - (0x1E918, "M", "𞤺"), - (0x1E919, "M", "𞤻"), - (0x1E91A, "M", "𞤼"), - (0x1E91B, "M", "𞤽"), - (0x1E91C, "M", "𞤾"), - (0x1E91D, "M", "𞤿"), - (0x1E91E, "M", "𞥀"), - (0x1E91F, "M", "𞥁"), - (0x1E920, "M", "𞥂"), - (0x1E921, "M", "𞥃"), - (0x1E922, "V"), - (0x1E94C, "X"), - (0x1E950, "V"), - (0x1E95A, "X"), - (0x1E95E, "V"), - (0x1E960, "X"), - (0x1EC71, "V"), - (0x1ECB5, "X"), - (0x1ED01, "V"), - (0x1ED3E, "X"), - (0x1EE00, "M", "ا"), - (0x1EE01, "M", "ب"), - (0x1EE02, "M", "ج"), - (0x1EE03, "M", "د"), - (0x1EE04, "X"), - (0x1EE05, "M", "و"), - (0x1EE06, "M", "ز"), - (0x1EE07, "M", "ح"), - (0x1EE08, "M", "ط"), - (0x1EE09, "M", "ي"), - (0x1EE0A, "M", "ك"), - (0x1EE0B, "M", "ل"), - (0x1EE0C, "M", "م"), - (0x1EE0D, "M", "ن"), - (0x1EE0E, "M", "س"), - (0x1EE0F, "M", "ع"), - (0x1EE10, "M", "ف"), - (0x1EE11, "M", "ص"), - (0x1EE12, "M", "ق"), - (0x1EE13, "M", "ر"), - (0x1EE14, "M", "ش"), - ] - - -def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EE15, "M", "ت"), - (0x1EE16, "M", "ث"), - (0x1EE17, "M", "خ"), - (0x1EE18, "M", "ذ"), - (0x1EE19, "M", "ض"), - (0x1EE1A, "M", "ظ"), - (0x1EE1B, "M", "غ"), - (0x1EE1C, "M", "ٮ"), - (0x1EE1D, "M", "ں"), - (0x1EE1E, "M", "ڡ"), - (0x1EE1F, "M", "ٯ"), - (0x1EE20, "X"), - (0x1EE21, "M", "ب"), - (0x1EE22, "M", "ج"), - (0x1EE23, "X"), - (0x1EE24, "M", "ه"), - (0x1EE25, "X"), - (0x1EE27, "M", "ح"), - (0x1EE28, "X"), - (0x1EE29, "M", "ي"), - (0x1EE2A, "M", "ك"), - (0x1EE2B, "M", "ل"), - (0x1EE2C, "M", "م"), - (0x1EE2D, "M", "ن"), - (0x1EE2E, "M", "س"), - (0x1EE2F, "M", "ع"), - (0x1EE30, "M", "ف"), - (0x1EE31, "M", "ص"), - (0x1EE32, "M", "ق"), - (0x1EE33, "X"), - (0x1EE34, "M", "ش"), - (0x1EE35, "M", "ت"), - (0x1EE36, "M", "ث"), - (0x1EE37, "M", "خ"), - (0x1EE38, "X"), - (0x1EE39, "M", "ض"), - (0x1EE3A, "X"), - (0x1EE3B, "M", "غ"), - (0x1EE3C, "X"), - (0x1EE42, "M", "ج"), - (0x1EE43, "X"), - (0x1EE47, "M", "ح"), - (0x1EE48, "X"), - (0x1EE49, "M", "ي"), - (0x1EE4A, "X"), - (0x1EE4B, "M", "ل"), - (0x1EE4C, "X"), - (0x1EE4D, "M", "ن"), - (0x1EE4E, "M", "س"), - (0x1EE4F, "M", "ع"), - (0x1EE50, "X"), - (0x1EE51, "M", "ص"), - (0x1EE52, "M", "ق"), - (0x1EE53, "X"), - (0x1EE54, "M", "ش"), - (0x1EE55, "X"), - (0x1EE57, "M", "خ"), - (0x1EE58, "X"), - (0x1EE59, "M", "ض"), - (0x1EE5A, "X"), - (0x1EE5B, "M", "غ"), - (0x1EE5C, "X"), - (0x1EE5D, "M", "ں"), - (0x1EE5E, "X"), - (0x1EE5F, "M", "ٯ"), - (0x1EE60, "X"), - (0x1EE61, "M", "ب"), - (0x1EE62, "M", "ج"), - (0x1EE63, "X"), - (0x1EE64, "M", "ه"), - (0x1EE65, "X"), - (0x1EE67, "M", "ح"), - (0x1EE68, "M", "ط"), - (0x1EE69, "M", "ي"), - (0x1EE6A, "M", "ك"), - (0x1EE6B, "X"), - (0x1EE6C, "M", "م"), - (0x1EE6D, "M", "ن"), - (0x1EE6E, "M", "س"), - (0x1EE6F, "M", "ع"), - (0x1EE70, "M", "ف"), - (0x1EE71, "M", "ص"), - (0x1EE72, "M", "ق"), - (0x1EE73, "X"), - (0x1EE74, "M", "ش"), - (0x1EE75, "M", "ت"), - (0x1EE76, "M", "ث"), - (0x1EE77, "M", "خ"), - (0x1EE78, "X"), - (0x1EE79, "M", "ض"), - (0x1EE7A, "M", "ظ"), - (0x1EE7B, "M", "غ"), - (0x1EE7C, "M", "ٮ"), - (0x1EE7D, "X"), - (0x1EE7E, "M", "ڡ"), - (0x1EE7F, "X"), - (0x1EE80, "M", "ا"), - (0x1EE81, "M", "ب"), - (0x1EE82, "M", "ج"), - (0x1EE83, "M", "د"), - ] - - -def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EE84, "M", "ه"), - (0x1EE85, "M", "و"), - (0x1EE86, "M", "ز"), - (0x1EE87, "M", "ح"), - (0x1EE88, "M", "ط"), - (0x1EE89, "M", "ي"), - (0x1EE8A, "X"), - (0x1EE8B, "M", "ل"), - (0x1EE8C, "M", "م"), - (0x1EE8D, "M", "ن"), - (0x1EE8E, "M", "س"), - (0x1EE8F, "M", "ع"), - (0x1EE90, "M", "ف"), - (0x1EE91, "M", "ص"), - (0x1EE92, "M", "ق"), - (0x1EE93, "M", "ر"), - (0x1EE94, "M", "ش"), - (0x1EE95, "M", "ت"), - (0x1EE96, "M", "ث"), - (0x1EE97, "M", "خ"), - (0x1EE98, "M", "ذ"), - (0x1EE99, "M", "ض"), - (0x1EE9A, "M", "ظ"), - (0x1EE9B, "M", "غ"), - (0x1EE9C, "X"), - (0x1EEA1, "M", "ب"), - (0x1EEA2, "M", "ج"), - (0x1EEA3, "M", "د"), - (0x1EEA4, "X"), - (0x1EEA5, "M", "و"), - (0x1EEA6, "M", "ز"), - (0x1EEA7, "M", "ح"), - (0x1EEA8, "M", "ط"), - (0x1EEA9, "M", "ي"), - (0x1EEAA, "X"), - (0x1EEAB, "M", "ل"), - (0x1EEAC, "M", "م"), - (0x1EEAD, "M", "ن"), - (0x1EEAE, "M", "س"), - (0x1EEAF, "M", "ع"), - (0x1EEB0, "M", "ف"), - (0x1EEB1, "M", "ص"), - (0x1EEB2, "M", "ق"), - (0x1EEB3, "M", "ر"), - (0x1EEB4, "M", "ش"), - (0x1EEB5, "M", "ت"), - (0x1EEB6, "M", "ث"), - (0x1EEB7, "M", "خ"), - (0x1EEB8, "M", "ذ"), - (0x1EEB9, "M", "ض"), - (0x1EEBA, "M", "ظ"), - (0x1EEBB, "M", "غ"), - (0x1EEBC, "X"), - (0x1EEF0, "V"), - (0x1EEF2, "X"), - (0x1F000, "V"), - (0x1F02C, "X"), - (0x1F030, "V"), - (0x1F094, "X"), - (0x1F0A0, "V"), - (0x1F0AF, "X"), - (0x1F0B1, "V"), - (0x1F0C0, "X"), - (0x1F0C1, "V"), - (0x1F0D0, "X"), - (0x1F0D1, "V"), - (0x1F0F6, "X"), - (0x1F101, "M", "0,"), - (0x1F102, "M", "1,"), - (0x1F103, "M", "2,"), - (0x1F104, "M", "3,"), - (0x1F105, "M", "4,"), - (0x1F106, "M", "5,"), - (0x1F107, "M", "6,"), - (0x1F108, "M", "7,"), - (0x1F109, "M", "8,"), - (0x1F10A, "M", "9,"), - (0x1F10B, "V"), - (0x1F110, "M", "(a)"), - (0x1F111, "M", "(b)"), - (0x1F112, "M", "(c)"), - (0x1F113, "M", "(d)"), - (0x1F114, "M", "(e)"), - (0x1F115, "M", "(f)"), - (0x1F116, "M", "(g)"), - (0x1F117, "M", "(h)"), - (0x1F118, "M", "(i)"), - (0x1F119, "M", "(j)"), - (0x1F11A, "M", "(k)"), - (0x1F11B, "M", "(l)"), - (0x1F11C, "M", "(m)"), - (0x1F11D, "M", "(n)"), - (0x1F11E, "M", "(o)"), - (0x1F11F, "M", "(p)"), - (0x1F120, "M", "(q)"), - (0x1F121, "M", "(r)"), - (0x1F122, "M", "(s)"), - (0x1F123, "M", "(t)"), - (0x1F124, "M", "(u)"), - (0x1F125, "M", "(v)"), - ] - - -def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F126, "M", "(w)"), - (0x1F127, "M", "(x)"), - (0x1F128, "M", "(y)"), - (0x1F129, "M", "(z)"), - (0x1F12A, "M", "〔s〕"), - (0x1F12B, "M", "c"), - (0x1F12C, "M", "r"), - (0x1F12D, "M", "cd"), - (0x1F12E, "M", "wz"), - (0x1F12F, "V"), - (0x1F130, "M", "a"), - (0x1F131, "M", "b"), - (0x1F132, "M", "c"), - (0x1F133, "M", "d"), - (0x1F134, "M", "e"), - (0x1F135, "M", "f"), - (0x1F136, "M", "g"), - (0x1F137, "M", "h"), - (0x1F138, "M", "i"), - (0x1F139, "M", "j"), - (0x1F13A, "M", "k"), - (0x1F13B, "M", "l"), - (0x1F13C, "M", "m"), - (0x1F13D, "M", "n"), - (0x1F13E, "M", "o"), - (0x1F13F, "M", "p"), - (0x1F140, "M", "q"), - (0x1F141, "M", "r"), - (0x1F142, "M", "s"), - (0x1F143, "M", "t"), - (0x1F144, "M", "u"), - (0x1F145, "M", "v"), - (0x1F146, "M", "w"), - (0x1F147, "M", "x"), - (0x1F148, "M", "y"), - (0x1F149, "M", "z"), - (0x1F14A, "M", "hv"), - (0x1F14B, "M", "mv"), - (0x1F14C, "M", "sd"), - (0x1F14D, "M", "ss"), - (0x1F14E, "M", "ppv"), - (0x1F14F, "M", "wc"), - (0x1F150, "V"), - (0x1F16A, "M", "mc"), - (0x1F16B, "M", "md"), - (0x1F16C, "M", "mr"), - (0x1F16D, "V"), - (0x1F190, "M", "dj"), - (0x1F191, "V"), - (0x1F1AE, "X"), - (0x1F1E6, "V"), - (0x1F200, "M", "ほか"), - (0x1F201, "M", "ココ"), - (0x1F202, "M", "サ"), - (0x1F203, "X"), - (0x1F210, "M", "手"), - (0x1F211, "M", "字"), - (0x1F212, "M", "双"), - (0x1F213, "M", "デ"), - (0x1F214, "M", "二"), - (0x1F215, "M", "多"), - (0x1F216, "M", "解"), - (0x1F217, "M", "天"), - (0x1F218, "M", "交"), - (0x1F219, "M", "映"), - (0x1F21A, "M", "無"), - (0x1F21B, "M", "料"), - (0x1F21C, "M", "前"), - (0x1F21D, "M", "後"), - (0x1F21E, "M", "再"), - (0x1F21F, "M", "新"), - (0x1F220, "M", "初"), - (0x1F221, "M", "終"), - (0x1F222, "M", "生"), - (0x1F223, "M", "販"), - (0x1F224, "M", "声"), - (0x1F225, "M", "吹"), - (0x1F226, "M", "演"), - (0x1F227, "M", "投"), - (0x1F228, "M", "捕"), - (0x1F229, "M", "一"), - (0x1F22A, "M", "三"), - (0x1F22B, "M", "遊"), - (0x1F22C, "M", "左"), - (0x1F22D, "M", "中"), - (0x1F22E, "M", "右"), - (0x1F22F, "M", "指"), - (0x1F230, "M", "走"), - (0x1F231, "M", "打"), - (0x1F232, "M", "禁"), - (0x1F233, "M", "空"), - (0x1F234, "M", "合"), - (0x1F235, "M", "満"), - (0x1F236, "M", "有"), - (0x1F237, "M", "月"), - (0x1F238, "M", "申"), - (0x1F239, "M", "割"), - (0x1F23A, "M", "営"), - (0x1F23B, "M", "配"), - (0x1F23C, "X"), - ] - - -def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F240, "M", "〔本〕"), - (0x1F241, "M", "〔三〕"), - (0x1F242, "M", "〔二〕"), - (0x1F243, "M", "〔安〕"), - (0x1F244, "M", "〔点〕"), - (0x1F245, "M", "〔打〕"), - (0x1F246, "M", "〔盗〕"), - (0x1F247, "M", "〔勝〕"), - (0x1F248, "M", "〔敗〕"), - (0x1F249, "X"), - (0x1F250, "M", "得"), - (0x1F251, "M", "可"), - (0x1F252, "X"), - (0x1F260, "V"), - (0x1F266, "X"), - (0x1F300, "V"), - (0x1F6D8, "X"), - (0x1F6DC, "V"), - (0x1F6ED, "X"), - (0x1F6F0, "V"), - (0x1F6FD, "X"), - (0x1F700, "V"), - (0x1F777, "X"), - (0x1F77B, "V"), - (0x1F7DA, "X"), - (0x1F7E0, "V"), - (0x1F7EC, "X"), - (0x1F7F0, "V"), - (0x1F7F1, "X"), - (0x1F800, "V"), - (0x1F80C, "X"), - (0x1F810, "V"), - (0x1F848, "X"), - (0x1F850, "V"), - (0x1F85A, "X"), - (0x1F860, "V"), - (0x1F888, "X"), - (0x1F890, "V"), - (0x1F8AE, "X"), - (0x1F8B0, "V"), - (0x1F8BC, "X"), - (0x1F8C0, "V"), - (0x1F8C2, "X"), - (0x1F900, "V"), - (0x1FA54, "X"), - (0x1FA60, "V"), - (0x1FA6E, "X"), - (0x1FA70, "V"), - (0x1FA7D, "X"), - (0x1FA80, "V"), - (0x1FA8A, "X"), - (0x1FA8F, "V"), - (0x1FAC7, "X"), - (0x1FACE, "V"), - (0x1FADD, "X"), - (0x1FADF, "V"), - (0x1FAEA, "X"), - (0x1FAF0, "V"), - (0x1FAF9, "X"), - (0x1FB00, "V"), - (0x1FB93, "X"), - (0x1FB94, "V"), - (0x1FBF0, "M", "0"), - (0x1FBF1, "M", "1"), - (0x1FBF2, "M", "2"), - (0x1FBF3, "M", "3"), - (0x1FBF4, "M", "4"), - (0x1FBF5, "M", "5"), - (0x1FBF6, "M", "6"), - (0x1FBF7, "M", "7"), - (0x1FBF8, "M", "8"), - (0x1FBF9, "M", "9"), - (0x1FBFA, "X"), - (0x20000, "V"), - (0x2A6E0, "X"), - (0x2A700, "V"), - (0x2B73A, "X"), - (0x2B740, "V"), - (0x2B81E, "X"), - (0x2B820, "V"), - (0x2CEA2, "X"), - (0x2CEB0, "V"), - (0x2EBE1, "X"), - (0x2EBF0, "V"), - (0x2EE5E, "X"), - (0x2F800, "M", "丽"), - (0x2F801, "M", "丸"), - (0x2F802, "M", "乁"), - (0x2F803, "M", "𠄢"), - (0x2F804, "M", "你"), - (0x2F805, "M", "侮"), - (0x2F806, "M", "侻"), - (0x2F807, "M", "倂"), - (0x2F808, "M", "偺"), - (0x2F809, "M", "備"), - (0x2F80A, "M", "僧"), - (0x2F80B, "M", "像"), - (0x2F80C, "M", "㒞"), - (0x2F80D, "M", "𠘺"), - (0x2F80E, "M", "免"), - ] - - -def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F80F, "M", "兔"), - (0x2F810, "M", "兤"), - (0x2F811, "M", "具"), - (0x2F812, "M", "𠔜"), - (0x2F813, "M", "㒹"), - (0x2F814, "M", "內"), - (0x2F815, "M", "再"), - (0x2F816, "M", "𠕋"), - (0x2F817, "M", "冗"), - (0x2F818, "M", "冤"), - (0x2F819, "M", "仌"), - (0x2F81A, "M", "冬"), - (0x2F81B, "M", "况"), - (0x2F81C, "M", "𩇟"), - (0x2F81D, "M", "凵"), - (0x2F81E, "M", "刃"), - (0x2F81F, "M", "㓟"), - (0x2F820, "M", "刻"), - (0x2F821, "M", "剆"), - (0x2F822, "M", "割"), - (0x2F823, "M", "剷"), - (0x2F824, "M", "㔕"), - (0x2F825, "M", "勇"), - (0x2F826, "M", "勉"), - (0x2F827, "M", "勤"), - (0x2F828, "M", "勺"), - (0x2F829, "M", "包"), - (0x2F82A, "M", "匆"), - (0x2F82B, "M", "北"), - (0x2F82C, "M", "卉"), - (0x2F82D, "M", "卑"), - (0x2F82E, "M", "博"), - (0x2F82F, "M", "即"), - (0x2F830, "M", "卽"), - (0x2F831, "M", "卿"), - (0x2F834, "M", "𠨬"), - (0x2F835, "M", "灰"), - (0x2F836, "M", "及"), - (0x2F837, "M", "叟"), - (0x2F838, "M", "𠭣"), - (0x2F839, "M", "叫"), - (0x2F83A, "M", "叱"), - (0x2F83B, "M", "吆"), - (0x2F83C, "M", "咞"), - (0x2F83D, "M", "吸"), - (0x2F83E, "M", "呈"), - (0x2F83F, "M", "周"), - (0x2F840, "M", "咢"), - (0x2F841, "M", "哶"), - (0x2F842, "M", "唐"), - (0x2F843, "M", "啓"), - (0x2F844, "M", "啣"), - (0x2F845, "M", "善"), - (0x2F847, "M", "喙"), - (0x2F848, "M", "喫"), - (0x2F849, "M", "喳"), - (0x2F84A, "M", "嗂"), - (0x2F84B, "M", "圖"), - (0x2F84C, "M", "嘆"), - (0x2F84D, "M", "圗"), - (0x2F84E, "M", "噑"), - (0x2F84F, "M", "噴"), - (0x2F850, "M", "切"), - (0x2F851, "M", "壮"), - (0x2F852, "M", "城"), - (0x2F853, "M", "埴"), - (0x2F854, "M", "堍"), - (0x2F855, "M", "型"), - (0x2F856, "M", "堲"), - (0x2F857, "M", "報"), - (0x2F858, "M", "墬"), - (0x2F859, "M", "𡓤"), - (0x2F85A, "M", "売"), - (0x2F85B, "M", "壷"), - (0x2F85C, "M", "夆"), - (0x2F85D, "M", "多"), - (0x2F85E, "M", "夢"), - (0x2F85F, "M", "奢"), - (0x2F860, "M", "𡚨"), - (0x2F861, "M", "𡛪"), - (0x2F862, "M", "姬"), - (0x2F863, "M", "娛"), - (0x2F864, "M", "娧"), - (0x2F865, "M", "姘"), - (0x2F866, "M", "婦"), - (0x2F867, "M", "㛮"), - (0x2F868, "M", "㛼"), - (0x2F869, "M", "嬈"), - (0x2F86A, "M", "嬾"), - (0x2F86C, "M", "𡧈"), - (0x2F86D, "M", "寃"), - (0x2F86E, "M", "寘"), - (0x2F86F, "M", "寧"), - (0x2F870, "M", "寳"), - (0x2F871, "M", "𡬘"), - (0x2F872, "M", "寿"), - (0x2F873, "M", "将"), - (0x2F874, "M", "当"), - (0x2F875, "M", "尢"), - (0x2F876, "M", "㞁"), - ] - - -def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F877, "M", "屠"), - (0x2F878, "M", "屮"), - (0x2F879, "M", "峀"), - (0x2F87A, "M", "岍"), - (0x2F87B, "M", "𡷤"), - (0x2F87C, "M", "嵃"), - (0x2F87D, "M", "𡷦"), - (0x2F87E, "M", "嵮"), - (0x2F87F, "M", "嵫"), - (0x2F880, "M", "嵼"), - (0x2F881, "M", "巡"), - (0x2F882, "M", "巢"), - (0x2F883, "M", "㠯"), - (0x2F884, "M", "巽"), - (0x2F885, "M", "帨"), - (0x2F886, "M", "帽"), - (0x2F887, "M", "幩"), - (0x2F888, "M", "㡢"), - (0x2F889, "M", "𢆃"), - (0x2F88A, "M", "㡼"), - (0x2F88B, "M", "庰"), - (0x2F88C, "M", "庳"), - (0x2F88D, "M", "庶"), - (0x2F88E, "M", "廊"), - (0x2F88F, "M", "𪎒"), - (0x2F890, "M", "廾"), - (0x2F891, "M", "𢌱"), - (0x2F893, "M", "舁"), - (0x2F894, "M", "弢"), - (0x2F896, "M", "㣇"), - (0x2F897, "M", "𣊸"), - (0x2F898, "M", "𦇚"), - (0x2F899, "M", "形"), - (0x2F89A, "M", "彫"), - (0x2F89B, "M", "㣣"), - (0x2F89C, "M", "徚"), - (0x2F89D, "M", "忍"), - (0x2F89E, "M", "志"), - (0x2F89F, "M", "忹"), - (0x2F8A0, "M", "悁"), - (0x2F8A1, "M", "㤺"), - (0x2F8A2, "M", "㤜"), - (0x2F8A3, "M", "悔"), - (0x2F8A4, "M", "𢛔"), - (0x2F8A5, "M", "惇"), - (0x2F8A6, "M", "慈"), - (0x2F8A7, "M", "慌"), - (0x2F8A8, "M", "慎"), - (0x2F8A9, "M", "慌"), - (0x2F8AA, "M", "慺"), - (0x2F8AB, "M", "憎"), - (0x2F8AC, "M", "憲"), - (0x2F8AD, "M", "憤"), - (0x2F8AE, "M", "憯"), - (0x2F8AF, "M", "懞"), - (0x2F8B0, "M", "懲"), - (0x2F8B1, "M", "懶"), - (0x2F8B2, "M", "成"), - (0x2F8B3, "M", "戛"), - (0x2F8B4, "M", "扝"), - (0x2F8B5, "M", "抱"), - (0x2F8B6, "M", "拔"), - (0x2F8B7, "M", "捐"), - (0x2F8B8, "M", "𢬌"), - (0x2F8B9, "M", "挽"), - (0x2F8BA, "M", "拼"), - (0x2F8BB, "M", "捨"), - (0x2F8BC, "M", "掃"), - (0x2F8BD, "M", "揤"), - (0x2F8BE, "M", "𢯱"), - (0x2F8BF, "M", "搢"), - (0x2F8C0, "M", "揅"), - (0x2F8C1, "M", "掩"), - (0x2F8C2, "M", "㨮"), - (0x2F8C3, "M", "摩"), - (0x2F8C4, "M", "摾"), - (0x2F8C5, "M", "撝"), - (0x2F8C6, "M", "摷"), - (0x2F8C7, "M", "㩬"), - (0x2F8C8, "M", "敏"), - (0x2F8C9, "M", "敬"), - (0x2F8CA, "M", "𣀊"), - (0x2F8CB, "M", "旣"), - (0x2F8CC, "M", "書"), - (0x2F8CD, "M", "晉"), - (0x2F8CE, "M", "㬙"), - (0x2F8CF, "M", "暑"), - (0x2F8D0, "M", "㬈"), - (0x2F8D1, "M", "㫤"), - (0x2F8D2, "M", "冒"), - (0x2F8D3, "M", "冕"), - (0x2F8D4, "M", "最"), - (0x2F8D5, "M", "暜"), - (0x2F8D6, "M", "肭"), - (0x2F8D7, "M", "䏙"), - (0x2F8D8, "M", "朗"), - (0x2F8D9, "M", "望"), - (0x2F8DA, "M", "朡"), - (0x2F8DB, "M", "杞"), - (0x2F8DC, "M", "杓"), - ] - - -def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F8DD, "M", "𣏃"), - (0x2F8DE, "M", "㭉"), - (0x2F8DF, "M", "柺"), - (0x2F8E0, "M", "枅"), - (0x2F8E1, "M", "桒"), - (0x2F8E2, "M", "梅"), - (0x2F8E3, "M", "𣑭"), - (0x2F8E4, "M", "梎"), - (0x2F8E5, "M", "栟"), - (0x2F8E6, "M", "椔"), - (0x2F8E7, "M", "㮝"), - (0x2F8E8, "M", "楂"), - (0x2F8E9, "M", "榣"), - (0x2F8EA, "M", "槪"), - (0x2F8EB, "M", "檨"), - (0x2F8EC, "M", "𣚣"), - (0x2F8ED, "M", "櫛"), - (0x2F8EE, "M", "㰘"), - (0x2F8EF, "M", "次"), - (0x2F8F0, "M", "𣢧"), - (0x2F8F1, "M", "歔"), - (0x2F8F2, "M", "㱎"), - (0x2F8F3, "M", "歲"), - (0x2F8F4, "M", "殟"), - (0x2F8F5, "M", "殺"), - (0x2F8F6, "M", "殻"), - (0x2F8F7, "M", "𣪍"), - (0x2F8F8, "M", "𡴋"), - (0x2F8F9, "M", "𣫺"), - (0x2F8FA, "M", "汎"), - (0x2F8FB, "M", "𣲼"), - (0x2F8FC, "M", "沿"), - (0x2F8FD, "M", "泍"), - (0x2F8FE, "M", "汧"), - (0x2F8FF, "M", "洖"), - (0x2F900, "M", "派"), - (0x2F901, "M", "海"), - (0x2F902, "M", "流"), - (0x2F903, "M", "浩"), - (0x2F904, "M", "浸"), - (0x2F905, "M", "涅"), - (0x2F906, "M", "𣴞"), - (0x2F907, "M", "洴"), - (0x2F908, "M", "港"), - (0x2F909, "M", "湮"), - (0x2F90A, "M", "㴳"), - (0x2F90B, "M", "滋"), - (0x2F90C, "M", "滇"), - (0x2F90D, "M", "𣻑"), - (0x2F90E, "M", "淹"), - (0x2F90F, "M", "潮"), - (0x2F910, "M", "𣽞"), - (0x2F911, "M", "𣾎"), - (0x2F912, "M", "濆"), - (0x2F913, "M", "瀹"), - (0x2F914, "M", "瀞"), - (0x2F915, "M", "瀛"), - (0x2F916, "M", "㶖"), - (0x2F917, "M", "灊"), - (0x2F918, "M", "災"), - (0x2F919, "M", "灷"), - (0x2F91A, "M", "炭"), - (0x2F91B, "M", "𠔥"), - (0x2F91C, "M", "煅"), - (0x2F91D, "M", "𤉣"), - (0x2F91E, "M", "熜"), - (0x2F91F, "M", "𤎫"), - (0x2F920, "M", "爨"), - (0x2F921, "M", "爵"), - (0x2F922, "M", "牐"), - (0x2F923, "M", "𤘈"), - (0x2F924, "M", "犀"), - (0x2F925, "M", "犕"), - (0x2F926, "M", "𤜵"), - (0x2F927, "M", "𤠔"), - (0x2F928, "M", "獺"), - (0x2F929, "M", "王"), - (0x2F92A, "M", "㺬"), - (0x2F92B, "M", "玥"), - (0x2F92C, "M", "㺸"), - (0x2F92E, "M", "瑇"), - (0x2F92F, "M", "瑜"), - (0x2F930, "M", "瑱"), - (0x2F931, "M", "璅"), - (0x2F932, "M", "瓊"), - (0x2F933, "M", "㼛"), - (0x2F934, "M", "甤"), - (0x2F935, "M", "𤰶"), - (0x2F936, "M", "甾"), - (0x2F937, "M", "𤲒"), - (0x2F938, "M", "異"), - (0x2F939, "M", "𢆟"), - (0x2F93A, "M", "瘐"), - (0x2F93B, "M", "𤾡"), - (0x2F93C, "M", "𤾸"), - (0x2F93D, "M", "𥁄"), - (0x2F93E, "M", "㿼"), - (0x2F93F, "M", "䀈"), - (0x2F940, "M", "直"), - (0x2F941, "M", "𥃳"), - ] - - -def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F942, "M", "𥃲"), - (0x2F943, "M", "𥄙"), - (0x2F944, "M", "𥄳"), - (0x2F945, "M", "眞"), - (0x2F946, "M", "真"), - (0x2F948, "M", "睊"), - (0x2F949, "M", "䀹"), - (0x2F94A, "M", "瞋"), - (0x2F94B, "M", "䁆"), - (0x2F94C, "M", "䂖"), - (0x2F94D, "M", "𥐝"), - (0x2F94E, "M", "硎"), - (0x2F94F, "M", "碌"), - (0x2F950, "M", "磌"), - (0x2F951, "M", "䃣"), - (0x2F952, "M", "𥘦"), - (0x2F953, "M", "祖"), - (0x2F954, "M", "𥚚"), - (0x2F955, "M", "𥛅"), - (0x2F956, "M", "福"), - (0x2F957, "M", "秫"), - (0x2F958, "M", "䄯"), - (0x2F959, "M", "穀"), - (0x2F95A, "M", "穊"), - (0x2F95B, "M", "穏"), - (0x2F95C, "M", "𥥼"), - (0x2F95D, "M", "𥪧"), - (0x2F95F, "M", "竮"), - (0x2F960, "M", "䈂"), - (0x2F961, "M", "𥮫"), - (0x2F962, "M", "篆"), - (0x2F963, "M", "築"), - (0x2F964, "M", "䈧"), - (0x2F965, "M", "𥲀"), - (0x2F966, "M", "糒"), - (0x2F967, "M", "䊠"), - (0x2F968, "M", "糨"), - (0x2F969, "M", "糣"), - (0x2F96A, "M", "紀"), - (0x2F96B, "M", "𥾆"), - (0x2F96C, "M", "絣"), - (0x2F96D, "M", "䌁"), - (0x2F96E, "M", "緇"), - (0x2F96F, "M", "縂"), - (0x2F970, "M", "繅"), - (0x2F971, "M", "䌴"), - (0x2F972, "M", "𦈨"), - (0x2F973, "M", "𦉇"), - (0x2F974, "M", "䍙"), - (0x2F975, "M", "𦋙"), - (0x2F976, "M", "罺"), - (0x2F977, "M", "𦌾"), - (0x2F978, "M", "羕"), - (0x2F979, "M", "翺"), - (0x2F97A, "M", "者"), - (0x2F97B, "M", "𦓚"), - (0x2F97C, "M", "𦔣"), - (0x2F97D, "M", "聠"), - (0x2F97E, "M", "𦖨"), - (0x2F97F, "M", "聰"), - (0x2F980, "M", "𣍟"), - (0x2F981, "M", "䏕"), - (0x2F982, "M", "育"), - (0x2F983, "M", "脃"), - (0x2F984, "M", "䐋"), - (0x2F985, "M", "脾"), - (0x2F986, "M", "媵"), - (0x2F987, "M", "𦞧"), - (0x2F988, "M", "𦞵"), - (0x2F989, "M", "𣎓"), - (0x2F98A, "M", "𣎜"), - (0x2F98B, "M", "舁"), - (0x2F98C, "M", "舄"), - (0x2F98D, "M", "辞"), - (0x2F98E, "M", "䑫"), - (0x2F98F, "M", "芑"), - (0x2F990, "M", "芋"), - (0x2F991, "M", "芝"), - (0x2F992, "M", "劳"), - (0x2F993, "M", "花"), - (0x2F994, "M", "芳"), - (0x2F995, "M", "芽"), - (0x2F996, "M", "苦"), - (0x2F997, "M", "𦬼"), - (0x2F998, "M", "若"), - (0x2F999, "M", "茝"), - (0x2F99A, "M", "荣"), - (0x2F99B, "M", "莭"), - (0x2F99C, "M", "茣"), - (0x2F99D, "M", "莽"), - (0x2F99E, "M", "菧"), - (0x2F99F, "M", "著"), - (0x2F9A0, "M", "荓"), - (0x2F9A1, "M", "菊"), - (0x2F9A2, "M", "菌"), - (0x2F9A3, "M", "菜"), - (0x2F9A4, "M", "𦰶"), - (0x2F9A5, "M", "𦵫"), - (0x2F9A6, "M", "𦳕"), - (0x2F9A7, "M", "䔫"), - ] - - -def _seg_82() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F9A8, "M", "蓱"), - (0x2F9A9, "M", "蓳"), - (0x2F9AA, "M", "蔖"), - (0x2F9AB, "M", "𧏊"), - (0x2F9AC, "M", "蕤"), - (0x2F9AD, "M", "𦼬"), - (0x2F9AE, "M", "䕝"), - (0x2F9AF, "M", "䕡"), - (0x2F9B0, "M", "𦾱"), - (0x2F9B1, "M", "𧃒"), - (0x2F9B2, "M", "䕫"), - (0x2F9B3, "M", "虐"), - (0x2F9B4, "M", "虜"), - (0x2F9B5, "M", "虧"), - (0x2F9B6, "M", "虩"), - (0x2F9B7, "M", "蚩"), - (0x2F9B8, "M", "蚈"), - (0x2F9B9, "M", "蜎"), - (0x2F9BA, "M", "蛢"), - (0x2F9BB, "M", "蝹"), - (0x2F9BC, "M", "蜨"), - (0x2F9BD, "M", "蝫"), - (0x2F9BE, "M", "螆"), - (0x2F9BF, "M", "䗗"), - (0x2F9C0, "M", "蟡"), - (0x2F9C1, "M", "蠁"), - (0x2F9C2, "M", "䗹"), - (0x2F9C3, "M", "衠"), - (0x2F9C4, "M", "衣"), - (0x2F9C5, "M", "𧙧"), - (0x2F9C6, "M", "裗"), - (0x2F9C7, "M", "裞"), - (0x2F9C8, "M", "䘵"), - (0x2F9C9, "M", "裺"), - (0x2F9CA, "M", "㒻"), - (0x2F9CB, "M", "𧢮"), - (0x2F9CC, "M", "𧥦"), - (0x2F9CD, "M", "䚾"), - (0x2F9CE, "M", "䛇"), - (0x2F9CF, "M", "誠"), - (0x2F9D0, "M", "諭"), - (0x2F9D1, "M", "變"), - (0x2F9D2, "M", "豕"), - (0x2F9D3, "M", "𧲨"), - (0x2F9D4, "M", "貫"), - (0x2F9D5, "M", "賁"), - (0x2F9D6, "M", "贛"), - (0x2F9D7, "M", "起"), - (0x2F9D8, "M", "𧼯"), - (0x2F9D9, "M", "𠠄"), - (0x2F9DA, "M", "跋"), - (0x2F9DB, "M", "趼"), - (0x2F9DC, "M", "跰"), - (0x2F9DD, "M", "𠣞"), - (0x2F9DE, "M", "軔"), - (0x2F9DF, "M", "輸"), - (0x2F9E0, "M", "𨗒"), - (0x2F9E1, "M", "𨗭"), - (0x2F9E2, "M", "邔"), - (0x2F9E3, "M", "郱"), - (0x2F9E4, "M", "鄑"), - (0x2F9E5, "M", "𨜮"), - (0x2F9E6, "M", "鄛"), - (0x2F9E7, "M", "鈸"), - (0x2F9E8, "M", "鋗"), - (0x2F9E9, "M", "鋘"), - (0x2F9EA, "M", "鉼"), - (0x2F9EB, "M", "鏹"), - (0x2F9EC, "M", "鐕"), - (0x2F9ED, "M", "𨯺"), - (0x2F9EE, "M", "開"), - (0x2F9EF, "M", "䦕"), - (0x2F9F0, "M", "閷"), - (0x2F9F1, "M", "𨵷"), - (0x2F9F2, "M", "䧦"), - (0x2F9F3, "M", "雃"), - (0x2F9F4, "M", "嶲"), - (0x2F9F5, "M", "霣"), - (0x2F9F6, "M", "𩅅"), - (0x2F9F7, "M", "𩈚"), - (0x2F9F8, "M", "䩮"), - (0x2F9F9, "M", "䩶"), - (0x2F9FA, "M", "韠"), - (0x2F9FB, "M", "𩐊"), - (0x2F9FC, "M", "䪲"), - (0x2F9FD, "M", "𩒖"), - (0x2F9FE, "M", "頋"), - (0x2FA00, "M", "頩"), - (0x2FA01, "M", "𩖶"), - (0x2FA02, "M", "飢"), - (0x2FA03, "M", "䬳"), - (0x2FA04, "M", "餩"), - (0x2FA05, "M", "馧"), - (0x2FA06, "M", "駂"), - (0x2FA07, "M", "駾"), - (0x2FA08, "M", "䯎"), - (0x2FA09, "M", "𩬰"), - (0x2FA0A, "M", "鬒"), - (0x2FA0B, "M", "鱀"), - (0x2FA0C, "M", "鳽"), - ] - - -def _seg_83() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2FA0D, "M", "䳎"), - (0x2FA0E, "M", "䳭"), - (0x2FA0F, "M", "鵧"), - (0x2FA10, "M", "𪃎"), - (0x2FA11, "M", "䳸"), - (0x2FA12, "M", "𪄅"), - (0x2FA13, "M", "𪈎"), - (0x2FA14, "M", "𪊑"), - (0x2FA15, "M", "麻"), - (0x2FA16, "M", "䵖"), - (0x2FA17, "M", "黹"), - (0x2FA18, "M", "黾"), - (0x2FA19, "M", "鼅"), - (0x2FA1A, "M", "鼏"), - (0x2FA1B, "M", "鼖"), - (0x2FA1C, "M", "鼻"), - (0x2FA1D, "M", "𪘀"), - (0x2FA1E, "X"), - (0x30000, "V"), - (0x3134B, "X"), - (0x31350, "V"), - (0x323B0, "X"), - (0xE0100, "I"), - (0xE01F0, "X"), - ] - - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() - + _seg_73() - + _seg_74() - + _seg_75() - + _seg_76() - + _seg_77() - + _seg_78() - + _seg_79() - + _seg_80() - + _seg_81() - + _seg_82() - + _seg_83() -) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/METADATA b/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/METADATA deleted file mode 100644 index e56f605..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/METADATA +++ /dev/null @@ -1,201 +0,0 @@ -Metadata-Version: 2.4 -Name: marshmallow -Version: 3.26.2 -Summary: A lightweight library for converting complex datatypes to and from native Python datatypes. -Author-email: Steven Loria -Maintainer-email: Steven Loria , Jérôme Lafréchoux , Jared Deckard -Requires-Python: >=3.9 -Description-Content-Type: text/x-rst -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -License-File: LICENSE -Requires-Dist: packaging>=17.0 -Requires-Dist: marshmallow[tests] ; extra == "dev" -Requires-Dist: tox ; extra == "dev" -Requires-Dist: pre-commit>=3.5,<5.0 ; extra == "dev" -Requires-Dist: autodocsumm==0.2.14 ; extra == "docs" -Requires-Dist: furo==2024.8.6 ; extra == "docs" -Requires-Dist: sphinx-copybutton==0.5.2 ; extra == "docs" -Requires-Dist: sphinx-issues==5.0.0 ; extra == "docs" -Requires-Dist: sphinx==8.1.3 ; extra == "docs" -Requires-Dist: sphinxext-opengraph==0.9.1 ; extra == "docs" -Requires-Dist: pytest ; extra == "tests" -Requires-Dist: simplejson ; extra == "tests" -Project-URL: Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html -Project-URL: Funding, https://opencollective.com/marshmallow -Project-URL: Issues, https://github.com/marshmallow-code/marshmallow/issues -Project-URL: Source, https://github.com/marshmallow-code/marshmallow -Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi -Provides-Extra: dev -Provides-Extra: docs -Provides-Extra: tests - -******************************************** -marshmallow: simplified object serialization -******************************************** - -|pypi| |build-status| |pre-commit| |docs| - -.. |pypi| image:: https://badgen.net/pypi/v/marshmallow - :target: https://pypi.org/project/marshmallow/ - :alt: Latest version - -.. |build-status| image:: https://github.com/marshmallow-code/marshmallow/actions/workflows/build-release.yml/badge.svg - :target: https://github.com/marshmallow-code/marshmallow/actions/workflows/build-release.yml - :alt: Build status - -.. |pre-commit| image:: https://results.pre-commit.ci/badge/github/marshmallow-code/marshmallow/dev.svg - :target: https://results.pre-commit.ci/latest/github/marshmallow-code/marshmallow/dev - :alt: pre-commit.ci status - -.. |docs| image:: https://readthedocs.org/projects/marshmallow/badge/ - :target: https://marshmallow.readthedocs.io/ - :alt: Documentation - -.. start elevator-pitch - -**marshmallow** is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes. - -.. code-block:: python - - from datetime import date - from pprint import pprint - - from marshmallow import Schema, fields - - - class ArtistSchema(Schema): - name = fields.Str() - - - class AlbumSchema(Schema): - title = fields.Str() - release_date = fields.Date() - artist = fields.Nested(ArtistSchema()) - - - bowie = dict(name="David Bowie") - album = dict(artist=bowie, title="Hunky Dory", release_date=date(1971, 12, 17)) - - schema = AlbumSchema() - result = schema.dump(album) - pprint(result, indent=2) - # { 'artist': {'name': 'David Bowie'}, - # 'release_date': '1971-12-17', - # 'title': 'Hunky Dory'} - -In short, marshmallow schemas can be used to: - -- **Validate** input data. -- **Deserialize** input data to app-level objects. -- **Serialize** app-level objects to primitive Python types. The serialized objects can then be rendered to standard formats such as JSON for use in an HTTP API. - -Get it now -========== - -.. code-block:: shell-session - - $ pip install -U marshmallow - -.. end elevator-pitch - -Documentation -============= - -Full documentation is available at https://marshmallow.readthedocs.io/ . - -Ecosystem -========= - -A list of marshmallow-related libraries can be found at the GitHub wiki here: - -https://github.com/marshmallow-code/marshmallow/wiki/Ecosystem - -Credits -======= - -Contributors ------------- - -This project exists thanks to all the people who contribute. - -**You're highly encouraged to participate in marshmallow's development.** -Check out the `Contributing Guidelines `_ to see how you can help. - -Thank you to all who have already contributed to marshmallow! - -.. image:: https://opencollective.com/marshmallow/contributors.svg?width=890&button=false - :target: https://marshmallow.readthedocs.io/en/latest/authors.html - :alt: Contributors - -Backers -------- - -If you find marshmallow useful, please consider supporting the team with -a donation. Your donation helps move marshmallow forward. - -Thank you to all our backers! [`Become a backer`_] - -.. _`Become a backer`: https://opencollective.com/marshmallow#backer - -.. image:: https://opencollective.com/marshmallow/backers.svg?width=890 - :target: https://opencollective.com/marshmallow#backers - :alt: Backers - -Sponsors --------- - -.. start sponsors - -marshmallow is sponsored by `Route4Me `_. - -.. image:: https://github.com/user-attachments/assets/018c2e23-032e-4a11-98da-8b6dc25b9054 - :target: https://route4me.com - :alt: Routing Planner - -Support this project by becoming a sponsor (or ask your company to support this project by becoming a sponsor). -Your logo will be displayed here with a link to your website. [`Become a sponsor`_] - -.. _`Become a sponsor`: https://opencollective.com/marshmallow#sponsor - -.. end sponsors - -Professional Support -==================== - -Professionally-supported marshmallow is now available through the -`Tidelift Subscription `_. - -Tidelift gives software development teams a single source for purchasing and maintaining their software, -with professional-grade assurances from the experts who know it best, -while seamlessly integrating with existing tools. [`Get professional support`_] - -.. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=marshmallow&utm_medium=referral&utm_campaign=github - -.. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png - :target: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme - :alt: Get supported marshmallow with Tidelift - - -Project Links -============= - -- Docs: https://marshmallow.readthedocs.io/ -- Changelog: https://marshmallow.readthedocs.io/en/latest/changelog.html -- Contributing Guidelines: https://marshmallow.readthedocs.io/en/latest/contributing.html -- PyPI: https://pypi.org/project/marshmallow/ -- Issues: https://github.com/marshmallow-code/marshmallow/issues -- Donate: https://opencollective.com/marshmallow - -License -======= - -MIT licensed. See the bundled `LICENSE `_ file for more details. - diff --git a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/RECORD b/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/RECORD deleted file mode 100644 index 8298dc3..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/RECORD +++ /dev/null @@ -1,32 +0,0 @@ -marshmallow-3.26.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -marshmallow-3.26.2.dist-info/METADATA,sha256=4EzTZh8SGuZS7Y-CJ4kCER__GppWvipXWz59tT_Waxs,7332 -marshmallow-3.26.2.dist-info/RECORD,, -marshmallow-3.26.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -marshmallow-3.26.2.dist-info/licenses/LICENSE,sha256=kGtdkFHkJhRMsXOtkRZnuOvQWpxYTCwmwTWzKj7RIAE,1064 -marshmallow/__init__.py,sha256=TU1arjtOLs87YDfW4Z35YVbaY2CUXK-VgylcuL8LaQg,2387 -marshmallow/__pycache__/__init__.cpython-312.pyc,, -marshmallow/__pycache__/base.cpython-312.pyc,, -marshmallow/__pycache__/class_registry.cpython-312.pyc,, -marshmallow/__pycache__/decorators.cpython-312.pyc,, -marshmallow/__pycache__/error_store.cpython-312.pyc,, -marshmallow/__pycache__/exceptions.cpython-312.pyc,, -marshmallow/__pycache__/fields.cpython-312.pyc,, -marshmallow/__pycache__/orderedset.cpython-312.pyc,, -marshmallow/__pycache__/schema.cpython-312.pyc,, -marshmallow/__pycache__/types.cpython-312.pyc,, -marshmallow/__pycache__/utils.cpython-312.pyc,, -marshmallow/__pycache__/validate.cpython-312.pyc,, -marshmallow/__pycache__/warnings.cpython-312.pyc,, -marshmallow/base.py,sha256=39W78-rnuzzx5T95YWBEECzjtqxdUA8XzYJNHd39VLg,1362 -marshmallow/class_registry.py,sha256=HTC9srCEaRsiy5L_vUKQso7IQfeZeRXxZfz4_2NitoM,3029 -marshmallow/decorators.py,sha256=pMjGPaXBZCRfAdQS3Bz5ieTZGA3BOv61FdTPsLwCtMQ,8749 -marshmallow/error_store.py,sha256=5-62el8Ey2w59x8FDhUC5afPu63NXjumKiAagAGL9bY,2444 -marshmallow/exceptions.py,sha256=DuARdOcirCdJxmlp16V97hQKAXOokvdW12jXtYOlGyk,2326 -marshmallow/fields.py,sha256=TKVxFY9hLpq7ch6_HEb1be5uPw0fgs-uC4n5o_fTkg8,74756 -marshmallow/orderedset.py,sha256=-Lq83AWIIFs2bxptDwkHtfQ63ebX3WD3R6N3B5rRnVI,2936 -marshmallow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -marshmallow/schema.py,sha256=I5_eEaaJPs6pCP3Hk7UmA6LpIY_AGq5b8mQN9e-XD_c,52177 -marshmallow/types.py,sha256=VY0_D-Xou7nKjcvWB1iccm8cZtxI3rkis1nhNelNn5Q,979 -marshmallow/utils.py,sha256=tLzu9FDL3Ph51qKsoqWIyPSwg8dZ8rzjeXXGLUndHFE,11943 -marshmallow/validate.py,sha256=Fx3F8F20dBGg-Wrv84Chx5SYedX9E0l592hR4MxS0kQ,24652 -marshmallow/warnings.py,sha256=YHC0kQQBbTKCiA1FuwnbnXqrph7oKuU9BjTV4cxwnzE,192 diff --git a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/WHEEL deleted file mode 100644 index d8b9936..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/licenses/LICENSE deleted file mode 100644 index b20df7c..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow-3.26.2.dist-info/licenses/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright Steven Loria and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__init__.py b/myenv/lib/python3.12/site-packages/marshmallow/__init__.py deleted file mode 100644 index 85b0f3c..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/__init__.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import annotations - -import importlib.metadata -import typing - -from packaging.version import Version - -from marshmallow.decorators import ( - post_dump, - post_load, - pre_dump, - pre_load, - validates, - validates_schema, -) -from marshmallow.exceptions import ValidationError -from marshmallow.schema import Schema, SchemaOpts -from marshmallow.utils import EXCLUDE, INCLUDE, RAISE, missing, pprint - -from . import fields - - -def __getattr__(name: str) -> typing.Any: - import warnings - - if name == "__version__": - warnings.warn( - "The '__version__' attribute is deprecated and will be removed in" - " in a future version. Use feature detection or" - " 'importlib.metadata.version(\"marshmallow\")' instead.", - DeprecationWarning, - stacklevel=2, - ) - return importlib.metadata.version("marshmallow") - - if name == "__parsed_version__": - warnings.warn( - "The '__parsed_version__' attribute is deprecated and will be removed in" - " in a future version. Use feature detection or" - " 'packaging.Version(importlib.metadata.version(\"marshmallow\"))' instead.", - DeprecationWarning, - stacklevel=2, - ) - return Version(importlib.metadata.version("marshmallow")) - - if name == "__version_info__": - warnings.warn( - "The '__version_info__' attribute is deprecated and will be removed in" - " in a future version. Use feature detection or" - " 'packaging.Version(importlib.metadata.version(\"marshmallow\")).release' instead.", - DeprecationWarning, - stacklevel=2, - ) - __parsed_version__ = Version(importlib.metadata.version("marshmallow")) - __version_info__: tuple[int, int, int] | tuple[int, int, int, str, int] = ( - __parsed_version__.release # type: ignore[assignment] - ) - if __parsed_version__.pre: - __version_info__ += __parsed_version__.pre # type: ignore[assignment] - return __version_info__ - - raise AttributeError(name) - - -__all__ = [ - "EXCLUDE", - "INCLUDE", - "RAISE", - "Schema", - "SchemaOpts", - "ValidationError", - "fields", - "missing", - "post_dump", - "post_load", - "pprint", - "pre_dump", - "pre_load", - "validates", - "validates_schema", -] diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e7af9e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/base.cpython-312.pyc deleted file mode 100644 index 4eb4a03..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/class_registry.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/class_registry.cpython-312.pyc deleted file mode 100644 index 5f4282d..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/class_registry.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/decorators.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/decorators.cpython-312.pyc deleted file mode 100644 index 8c2a659..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/decorators.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/error_store.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/error_store.cpython-312.pyc deleted file mode 100644 index 750e7d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/error_store.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 72559c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/fields.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/fields.cpython-312.pyc deleted file mode 100644 index 2dc72e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/fields.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/orderedset.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/orderedset.cpython-312.pyc deleted file mode 100644 index a29e6b4..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/orderedset.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/schema.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/schema.cpython-312.pyc deleted file mode 100644 index 0ced135..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/schema.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/types.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/types.cpython-312.pyc deleted file mode 100644 index ac67384..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/types.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 3698910..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/validate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/validate.cpython-312.pyc deleted file mode 100644 index 95df6d1..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/validate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/warnings.cpython-312.pyc b/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/warnings.cpython-312.pyc deleted file mode 100644 index 1e8692b..0000000 Binary files a/myenv/lib/python3.12/site-packages/marshmallow/__pycache__/warnings.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/marshmallow/base.py b/myenv/lib/python3.12/site-packages/marshmallow/base.py deleted file mode 100644 index 14b248a..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/base.py +++ /dev/null @@ -1,61 +0,0 @@ -"""Abstract base classes. - -These are necessary to avoid circular imports between schema.py and fields.py. - -.. warning:: - - This module is deprecated. Users should not import from this module. - Use `marshmallow.fields.Field` and `marshmallow.schema.Schema` as base classes instead. -""" - -from __future__ import annotations - -from abc import ABC, abstractmethod - - -class FieldABC(ABC): - """Abstract base class from which all Field classes inherit.""" - - @abstractmethod - def serialize(self, attr, obj, accessor=None): - pass - - @abstractmethod - def deserialize(self, value): - pass - - @abstractmethod - def _serialize(self, value, attr, obj, **kwargs): - pass - - @abstractmethod - def _deserialize(self, value, attr, data, **kwargs): - pass - - -class SchemaABC(ABC): - """Abstract base class from which all Schemas inherit.""" - - @abstractmethod - def dump(self, obj, *, many: bool | None = None): - pass - - @abstractmethod - def dumps(self, obj, *, many: bool | None = None): - pass - - @abstractmethod - def load(self, data, *, many: bool | None = None, partial=None, unknown=None): - pass - - @abstractmethod - def loads( - self, - json_data, - *, - many: bool | None = None, - partial=None, - unknown=None, - **kwargs, - ): - pass diff --git a/myenv/lib/python3.12/site-packages/marshmallow/class_registry.py b/myenv/lib/python3.12/site-packages/marshmallow/class_registry.py deleted file mode 100644 index 6c02f9c..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/class_registry.py +++ /dev/null @@ -1,103 +0,0 @@ -"""A registry of :class:`Schema ` classes. This allows for string -lookup of schemas, which may be used with -class:`fields.Nested `. - -.. warning:: - - This module is treated as private API. - Users should not need to use this module directly. -""" -# ruff: noqa: ERA001 - -from __future__ import annotations - -import typing - -from marshmallow.exceptions import RegistryError - -if typing.TYPE_CHECKING: - from marshmallow import Schema - - SchemaType = type[Schema] - -# { -# : -# : -# } -_registry = {} # type: dict[str, list[SchemaType]] - - -def register(classname: str, cls: SchemaType) -> None: - """Add a class to the registry of serializer classes. When a class is - registered, an entry for both its classname and its full, module-qualified - path are added to the registry. - - Example: :: - - class MyClass: - pass - - - register("MyClass", MyClass) - # Registry: - # { - # 'MyClass': [path.to.MyClass], - # 'path.to.MyClass': [path.to.MyClass], - # } - - """ - # Module where the class is located - module = cls.__module__ - # Full module path to the class - # e.g. user.schemas.UserSchema - fullpath = f"{module}.{classname}" - # If the class is already registered; need to check if the entries are - # in the same module as cls to avoid having multiple instances of the same - # class in the registry - if classname in _registry and not any( - each.__module__ == module for each in _registry[classname] - ): - _registry[classname].append(cls) - elif classname not in _registry: - _registry[classname] = [cls] - - # Also register the full path - if fullpath not in _registry: - _registry.setdefault(fullpath, []).append(cls) - else: - # If fullpath does exist, replace existing entry - _registry[fullpath] = [cls] - - -@typing.overload -def get_class(classname: str, *, all: typing.Literal[False] = ...) -> SchemaType: ... - - -@typing.overload -def get_class( - classname: str, *, all: typing.Literal[True] = ... -) -> list[SchemaType]: ... - - -def get_class(classname: str, *, all: bool = False) -> list[SchemaType] | SchemaType: # noqa: A002 - """Retrieve a class from the registry. - - :raises: `marshmallow.exceptions.RegistryError` if the class cannot be found - or if there are multiple entries for the given class name. - """ - try: - classes = _registry[classname] - except KeyError as error: - raise RegistryError( - f"Class with name {classname!r} was not found. You may need " - "to import the class." - ) from error - if len(classes) > 1: - if all: - return _registry[classname] - raise RegistryError( - f"Multiple classes with name {classname!r} " - "were found. Please use the full, " - "module-qualified path." - ) - return _registry[classname][0] diff --git a/myenv/lib/python3.12/site-packages/marshmallow/decorators.py b/myenv/lib/python3.12/site-packages/marshmallow/decorators.py deleted file mode 100644 index eefba6c..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/decorators.py +++ /dev/null @@ -1,238 +0,0 @@ -"""Decorators for registering schema pre-processing and post-processing methods. -These should be imported from the top-level `marshmallow` module. - -Methods decorated with -`pre_load `, `post_load `, -`pre_dump `, `post_dump `, -and `validates_schema ` receive -``many`` as a keyword argument. In addition, `pre_load `, -`post_load `, -and `validates_schema ` receive -``partial``. If you don't need these arguments, add ``**kwargs`` to your method -signature. - - -Example: :: - - from marshmallow import ( - Schema, - pre_load, - pre_dump, - post_load, - validates_schema, - validates, - fields, - ValidationError, - ) - - - class UserSchema(Schema): - email = fields.Str(required=True) - age = fields.Integer(required=True) - - @post_load - def lowerstrip_email(self, item, many, **kwargs): - item["email"] = item["email"].lower().strip() - return item - - @pre_load(pass_many=True) - def remove_envelope(self, data, many, **kwargs): - namespace = "results" if many else "result" - return data[namespace] - - @post_dump(pass_many=True) - def add_envelope(self, data, many, **kwargs): - namespace = "results" if many else "result" - return {namespace: data} - - @validates_schema - def validate_email(self, data, **kwargs): - if len(data["email"]) < 3: - raise ValidationError("Email must be more than 3 characters", "email") - - @validates("age") - def validate_age(self, data, **kwargs): - if data < 14: - raise ValidationError("Too young!") - -.. note:: - These decorators only work with instance methods. Class and static - methods are not supported. - -.. warning:: - The invocation order of decorated methods of the same type is not guaranteed. - If you need to guarantee order of different processing steps, you should put - them in the same processing method. -""" - -from __future__ import annotations - -import functools -from collections import defaultdict -from typing import Any, Callable, cast - -PRE_DUMP = "pre_dump" -POST_DUMP = "post_dump" -PRE_LOAD = "pre_load" -POST_LOAD = "post_load" -VALIDATES = "validates" -VALIDATES_SCHEMA = "validates_schema" - - -class MarshmallowHook: - __marshmallow_hook__: dict[str, list[tuple[bool, Any]]] | None = None - - -def validates(field_name: str) -> Callable[..., Any]: - """Register a field validator. - - :param field_name: Name of the field that the method validates. - """ - return set_hook(None, VALIDATES, field_name=field_name) - - -def validates_schema( - fn: Callable[..., Any] | None = None, - pass_many: bool = False, # noqa: FBT001, FBT002 - pass_original: bool = False, # noqa: FBT001, FBT002 - skip_on_field_errors: bool = True, # noqa: FBT001, FBT002 -) -> Callable[..., Any]: - """Register a schema-level validator. - - By default it receives a single object at a time, transparently handling the ``many`` - argument passed to the `Schema `'s :func:`~marshmallow.Schema.validate` call. - If ``pass_many=True``, the raw data (which may be a collection) is passed. - - If ``pass_original=True``, the original data (before unmarshalling) will be passed as - an additional argument to the method. - - If ``skip_on_field_errors=True``, this validation method will be skipped whenever - validation errors have been detected when validating fields. - - .. versionchanged:: 3.0.0b1 - ``skip_on_field_errors`` defaults to `True`. - - .. versionchanged:: 3.0.0 - ``partial`` and ``many`` are always passed as keyword arguments to - the decorated method. - """ - return set_hook( - fn, - VALIDATES_SCHEMA, - many=pass_many, - pass_original=pass_original, - skip_on_field_errors=skip_on_field_errors, - ) - - -def pre_dump( - fn: Callable[..., Any] | None = None, - pass_many: bool = False, # noqa: FBT001, FBT002 -) -> Callable[..., Any]: - """Register a method to invoke before serializing an object. The method - receives the object to be serialized and returns the processed object. - - By default it receives a single object at a time, transparently handling the ``many`` - argument passed to the `Schema `'s :func:`~marshmallow.Schema.dump` call. - If ``pass_many=True``, the raw data (which may be a collection) is passed. - - .. versionchanged:: 3.0.0 - ``many`` is always passed as a keyword arguments to the decorated method. - """ - return set_hook(fn, PRE_DUMP, many=pass_many) - - -def post_dump( - fn: Callable[..., Any] | None = None, - pass_many: bool = False, # noqa: FBT001, FBT002 - pass_original: bool = False, # noqa: FBT001, FBT002 -) -> Callable[..., Any]: - """Register a method to invoke after serializing an object. The method - receives the serialized object and returns the processed object. - - By default it receives a single object at a time, transparently handling the ``many`` - argument passed to the `Schema `'s :func:`~marshmallow.Schema.dump` call. - If ``pass_many=True``, the raw data (which may be a collection) is passed. - - If ``pass_original=True``, the original data (before serializing) will be passed as - an additional argument to the method. - - .. versionchanged:: 3.0.0 - ``many`` is always passed as a keyword arguments to the decorated method. - """ - return set_hook(fn, POST_DUMP, many=pass_many, pass_original=pass_original) - - -def pre_load( - fn: Callable[..., Any] | None = None, - pass_many: bool = False, # noqa: FBT001, FBT002 -) -> Callable[..., Any]: - """Register a method to invoke before deserializing an object. The method - receives the data to be deserialized and returns the processed data. - - By default it receives a single object at a time, transparently handling the ``many`` - argument passed to the `Schema `'s :func:`~marshmallow.Schema.load` call. - If ``pass_many=True``, the raw data (which may be a collection) is passed. - - .. versionchanged:: 3.0.0 - ``partial`` and ``many`` are always passed as keyword arguments to - the decorated method. - """ - return set_hook(fn, PRE_LOAD, many=pass_many) - - -def post_load( - fn: Callable[..., Any] | None = None, - pass_many: bool = False, # noqa: FBT001, FBT002 - pass_original: bool = False, # noqa: FBT001, FBT002 -) -> Callable[..., Any]: - """Register a method to invoke after deserializing an object. The method - receives the deserialized data and returns the processed data. - - By default it receives a single object at a time, transparently handling the ``many`` - argument passed to the `Schema `'s :func:`~marshmallow.Schema.load` call. - If ``pass_many=True``, the raw data (which may be a collection) is passed. - - If ``pass_original=True``, the original data (before deserializing) will be passed as - an additional argument to the method. - - .. versionchanged:: 3.0.0 - ``partial`` and ``many`` are always passed as keyword arguments to - the decorated method. - """ - return set_hook(fn, POST_LOAD, many=pass_many, pass_original=pass_original) - - -def set_hook( - fn: Callable[..., Any] | None, - tag: str, - many: bool = False, # noqa: FBT001, FBT002 - **kwargs: Any, -) -> Callable[..., Any]: - """Mark decorated function as a hook to be picked up later. - You should not need to use this method directly. - - .. note:: - Currently only works with functions and instance methods. Class and - static methods are not supported. - - :return: Decorated function if supplied, else this decorator with its args - bound. - """ - # Allow using this as either a decorator or a decorator factory. - if fn is None: - return functools.partial(set_hook, tag=tag, many=many, **kwargs) - - # Set a __marshmallow_hook__ attribute instead of wrapping in some class, - # because I still want this to end up as a normal (unbound) method. - function = cast(MarshmallowHook, fn) - try: - hook_config = function.__marshmallow_hook__ - except AttributeError: - function.__marshmallow_hook__ = hook_config = defaultdict(list) - # Also save the kwargs for the tagged function on - # __marshmallow_hook__, keyed by - if hook_config is not None: - hook_config[tag].append((many, kwargs)) - - return fn diff --git a/myenv/lib/python3.12/site-packages/marshmallow/error_store.py b/myenv/lib/python3.12/site-packages/marshmallow/error_store.py deleted file mode 100644 index b2607ba..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/error_store.py +++ /dev/null @@ -1,71 +0,0 @@ -"""Utilities for storing collections of error messages. - -.. warning:: - - This module is treated as private API. - Users should not need to use this module directly. -""" - -from marshmallow.exceptions import SCHEMA - - -class ErrorStore: - def __init__(self): - #: Dictionary of errors stored during serialization - self.errors = {} - - def store_error(self, messages, field_name=SCHEMA, index=None): - # field error -> store/merge error messages under field name key - # schema error -> if string or list, store/merge under _schema key - # -> if dict, store/merge with other top-level keys - messages = copy_containers(messages) - if field_name != SCHEMA or not isinstance(messages, dict): - messages = {field_name: messages} - if index is not None: - messages = {index: messages} - self.errors = merge_errors(self.errors, messages) - - -def copy_containers(errors): - if isinstance(errors, list): - return [copy_containers(val) for val in errors] - if isinstance(errors, dict): - return {key: copy_containers(val) for key, val in errors.items()} - return errors - - -def merge_errors(errors1, errors2): # noqa: PLR0911 - """Deeply merge two error messages. - - The format of ``errors1`` and ``errors2`` matches the ``message`` - parameter of :exc:`marshmallow.exceptions.ValidationError`. - """ - if not errors1: - return errors2 - if not errors2: - return errors1 - if isinstance(errors1, list): - if isinstance(errors2, list): - errors1.extend(errors2) - return errors1 - if isinstance(errors2, dict): - errors2[SCHEMA] = merge_errors(errors1, errors2.get(SCHEMA)) - return errors2 - errors1.append(errors2) - return errors1 - if isinstance(errors1, dict): - if isinstance(errors2, dict): - for key, val in errors2.items(): - if key in errors1: - errors1[key] = merge_errors(errors1[key], val) - else: - errors1[key] = val - return errors1 - errors1[SCHEMA] = merge_errors(errors1.get(SCHEMA), errors2) - return errors1 - if isinstance(errors2, list): - return [errors1, *errors2] - if isinstance(errors2, dict): - errors2[SCHEMA] = merge_errors(errors1, errors2.get(SCHEMA)) - return errors2 - return [errors1, errors2] diff --git a/myenv/lib/python3.12/site-packages/marshmallow/exceptions.py b/myenv/lib/python3.12/site-packages/marshmallow/exceptions.py deleted file mode 100644 index 096b6bd..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/exceptions.py +++ /dev/null @@ -1,71 +0,0 @@ -"""Exception classes for marshmallow-related errors.""" - -from __future__ import annotations - -import typing - -# Key used for schema-level validation errors -SCHEMA = "_schema" - - -class MarshmallowError(Exception): - """Base class for all marshmallow-related errors.""" - - -class ValidationError(MarshmallowError): - """Raised when validation fails on a field or schema. - - Validators and custom fields should raise this exception. - - :param message: An error message, list of error messages, or dict of - error messages. If a dict, the keys are subitems and the values are error messages. - :param field_name: Field name to store the error on. - If `None`, the error is stored as schema-level error. - :param data: Raw input data. - :param valid_data: Valid (de)serialized data. - """ - - def __init__( - self, - message: str | list | dict, - field_name: str = SCHEMA, - data: typing.Mapping[str, typing.Any] - | typing.Iterable[typing.Mapping[str, typing.Any]] - | None = None, - valid_data: list[dict[str, typing.Any]] | dict[str, typing.Any] | None = None, - **kwargs, - ): - self.messages = [message] if isinstance(message, (str, bytes)) else message - self.field_name = field_name - self.data = data - self.valid_data = valid_data - self.kwargs = kwargs - super().__init__(message) - - def normalized_messages(self): - if self.field_name == SCHEMA and isinstance(self.messages, dict): - return self.messages - return {self.field_name: self.messages} - - @property - def messages_dict(self) -> dict[str, typing.Any]: - if not isinstance(self.messages, dict): - raise TypeError( - "cannot access 'messages_dict' when 'messages' is of type " - + type(self.messages).__name__ - ) - return self.messages - - -class RegistryError(NameError): - """Raised when an invalid operation is performed on the serializer - class registry. - """ - - -class StringNotCollectionError(MarshmallowError, TypeError): - """Raised when a string is passed when a list of strings is expected.""" - - -class FieldInstanceResolutionError(MarshmallowError, TypeError): - """Raised when schema to instantiate is neither a Schema class nor an instance.""" diff --git a/myenv/lib/python3.12/site-packages/marshmallow/fields.py b/myenv/lib/python3.12/site-packages/marshmallow/fields.py deleted file mode 100644 index dc3d812..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/fields.py +++ /dev/null @@ -1,2153 +0,0 @@ -# ruff: noqa: F841, SLF001 -from __future__ import annotations - -import collections -import copy -import datetime as dt -import decimal -import ipaddress -import math -import numbers -import typing -import uuid -import warnings -from collections.abc import Mapping as _Mapping - -from marshmallow import class_registry, types, utils, validate -from marshmallow.base import FieldABC -from marshmallow.exceptions import ( - FieldInstanceResolutionError, - StringNotCollectionError, - ValidationError, -) -from marshmallow.utils import ( - is_aware, - is_collection, - resolve_field_instance, -) -from marshmallow.utils import ( - missing as missing_, -) -from marshmallow.validate import And, Length -from marshmallow.warnings import ( - ChangedInMarshmallow4Warning, - RemovedInMarshmallow4Warning, -) - -if typing.TYPE_CHECKING: - from enum import Enum as EnumType - - from marshmallow.schema import Schema, SchemaMeta - - -__all__ = [ - "IP", - "URL", - "UUID", - "AwareDateTime", - "Bool", - "Boolean", - "Constant", - "Date", - "DateTime", - "Decimal", - "Dict", - "Email", - "Enum", - "Field", - "Float", - "Function", - "IPInterface", - "IPv4", - "IPv4Interface", - "IPv6", - "IPv6Interface", - "Int", - "Integer", - "List", - "Mapping", - "Method", - "NaiveDateTime", - "Nested", - "Number", - "Pluck", - "Raw", - "Str", - "String", - "Time", - "TimeDelta", - "Tuple", - "Url", -] - - -class Field(FieldABC): - """Base field from which other fields inherit. - - :param dump_default: If set, this value will be used during serialization if the - input value is missing. If not set, the field will be excluded from the - serialized output if the input value is missing. May be a value or a callable. - :param load_default: Default deserialization value for the field if the field is not - found in the input data. May be a value or a callable. - :param data_key: The name of the dict key in the external representation, i.e. - the input of `load` and the output of `dump`. - If `None`, the key will match the name of the field. - :param attribute: The name of the key/attribute in the internal representation, i.e. - the output of `load` and the input of `dump`. - If `None`, the key/attribute will match the name of the field. - Note: This should only be used for very specific use cases such as - outputting multiple fields for a single attribute, or using keys/attributes - that are invalid variable names, unsuitable for field names. In most cases, - you should use ``data_key`` instead. - :param validate: Validator or collection of validators that are called - during deserialization. Validator takes a field's input value as - its only parameter and returns a boolean. - If it returns `False`, an :exc:`ValidationError` is raised. - :param required: Raise a :exc:`ValidationError` if the field value - is not supplied during deserialization. - :param allow_none: Set this to `True` if `None` should be considered a valid value during - validation/deserialization. If set to `False` (the default), `None` is considered invalid input. - If ``load_default`` is explicitly set to `None` and ``allow_none`` is unset, - `allow_none` is implicitly set to ``True``. - :param load_only: If `True` skip this field during serialization, otherwise - its value will be present in the serialized data. - :param dump_only: If `True` skip this field during deserialization, otherwise - its value will be present in the deserialized object. In the context of an - HTTP API, this effectively marks the field as "read-only". - :param error_messages: Overrides for `Field.default_error_messages`. - :param metadata: Extra information to be stored as field metadata. - - .. versionchanged:: 3.0.0b8 - Add ``data_key`` parameter for the specifying the key in the input and - output data. This parameter replaced both ``load_from`` and ``dump_to``. - - .. versionchanged:: 3.13.0 - Replace ``missing`` and ``default`` parameters with ``load_default`` and ``dump_default``. - - .. versionchanged:: 3.24.0 - `Field ` should no longer be used as a field within a `Schema `. - Use `Raw ` or another `Field ` subclass instead. - """ - - # Some fields, such as Method fields and Function fields, are not expected - # to exist as attributes on the objects to serialize. Set this to False - # for those fields - _CHECK_ATTRIBUTE = True - - #: Default error messages for various kinds of errors. The keys in this dictionary - #: are passed to `Field.make_error`. The values are error messages passed to - #: :exc:`marshmallow.exceptions.ValidationError`. - default_error_messages: dict[str, str] = { - "required": "Missing data for required field.", - "null": "Field may not be null.", - "validator_failed": "Invalid value.", - } - - def __init__( - self, - *, - load_default: typing.Any = missing_, - missing: typing.Any = missing_, - dump_default: typing.Any = missing_, - default: typing.Any = missing_, - data_key: str | None = None, - attribute: str | None = None, - validate: types.Validator | typing.Iterable[types.Validator] | None = None, - required: bool = False, - allow_none: bool | None = None, - load_only: bool = False, - dump_only: bool = False, - error_messages: dict[str, str] | None = None, - metadata: typing.Mapping[str, typing.Any] | None = None, - **additional_metadata, - ) -> None: - if self.__class__ is Field: - warnings.warn( - "`Field` should not be instantiated. Use `fields.Raw` or " - "another field subclass instead.", - ChangedInMarshmallow4Warning, - stacklevel=2, - ) - # handle deprecated `default` and `missing` parameters - if default is not missing_: - warnings.warn( - "The 'default' argument to fields is deprecated. " - "Use 'dump_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - if dump_default is missing_: - dump_default = default - if missing is not missing_: - warnings.warn( - "The 'missing' argument to fields is deprecated. " - "Use 'load_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - if load_default is missing_: - load_default = missing - self.dump_default = dump_default - self.load_default = load_default - - self.attribute = attribute - self.data_key = data_key - self.validate = validate - if validate is None: - self.validators = [] - elif callable(validate): - self.validators = [validate] - elif utils.is_iterable_but_not_string(validate): - self.validators = list(validate) - else: - raise ValueError( - "The 'validate' parameter must be a callable " - "or a collection of callables." - ) - - # If allow_none is None and load_default is None - # None should be considered valid by default - self.allow_none = load_default is None if allow_none is None else allow_none - self.load_only = load_only - self.dump_only = dump_only - if required is True and load_default is not missing_: - raise ValueError("'load_default' must not be set for required fields.") - self.required = required - - metadata = metadata or {} - self.metadata = {**metadata, **additional_metadata} - if additional_metadata: - warnings.warn( - "Passing field metadata as keyword arguments is deprecated. Use the " - "explicit `metadata=...` argument instead. " - f"Additional metadata: {additional_metadata}", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - - # Collect default error message from self and parent classes - messages: dict[str, str] = {} - for cls in reversed(self.__class__.__mro__): - messages.update(getattr(cls, "default_error_messages", {})) - messages.update(error_messages or {}) - self.error_messages = messages - - self.parent: Field | Schema | None = None - self.name: str | None = None - self.root: Schema | None = None - - def __repr__(self) -> str: - return ( - f"" - ) - - def __deepcopy__(self, memo): - return copy.copy(self) - - def get_value( - self, - obj: typing.Any, - attr: str, - accessor: ( - typing.Callable[[typing.Any, str, typing.Any], typing.Any] | None - ) = None, - default: typing.Any = missing_, - ): - """Return the value for a given key from an object. - - :param obj: The object to get the value from. - :param attr: The attribute/key in `obj` to get the value from. - :param accessor: A callable used to retrieve the value of `attr` from - the object `obj`. Defaults to `marshmallow.utils.get_value`. - """ - accessor_func = accessor or utils.get_value - check_key = attr if self.attribute is None else self.attribute - return accessor_func(obj, check_key, default) - - def _validate(self, value: typing.Any): - """Perform validation on ``value``. Raise a :exc:`ValidationError` if validation - does not succeed. - """ - self._validate_all(value) - - @property - def _validate_all(self) -> typing.Callable[[typing.Any], None]: - return And(*self.validators, error=self.error_messages["validator_failed"]) - - def make_error(self, key: str, **kwargs) -> ValidationError: - """Helper method to make a `ValidationError` with an error message - from ``self.error_messages``. - """ - try: - msg = self.error_messages[key] - except KeyError as error: - class_name = self.__class__.__name__ - message = ( - f"ValidationError raised by `{class_name}`, but error key `{key}` does " - "not exist in the `error_messages` dictionary." - ) - raise AssertionError(message) from error - if isinstance(msg, (str, bytes)): - msg = msg.format(**kwargs) - return ValidationError(msg) - - def fail(self, key: str, **kwargs): - """Helper method that raises a `ValidationError` with an error message - from ``self.error_messages``. - - .. deprecated:: 3.0.0 - Use `make_error ` instead. - """ - warnings.warn( - f'`Field.fail` is deprecated. Use `raise self.make_error("{key}", ...)` instead.', - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - raise self.make_error(key=key, **kwargs) - - def _validate_missing(self, value: typing.Any) -> None: - """Validate missing values. Raise a :exc:`ValidationError` if - `value` should be considered missing. - """ - if value is missing_ and self.required: - raise self.make_error("required") - if value is None and not self.allow_none: - raise self.make_error("null") - - def serialize( - self, - attr: str, - obj: typing.Any, - accessor: ( - typing.Callable[[typing.Any, str, typing.Any], typing.Any] | None - ) = None, - **kwargs, - ): - """Pulls the value for the given key from the object, applies the - field's formatting and returns the result. - - :param attr: The attribute/key to get from the object. - :param obj: The object to access the attribute/key from. - :param accessor: Function used to access values from ``obj``. - :param kwargs: Field-specific keyword arguments. - """ - if self._CHECK_ATTRIBUTE: - value = self.get_value(obj, attr, accessor=accessor) - if value is missing_: - default = self.dump_default - value = default() if callable(default) else default - if value is missing_: - return value - else: - value = None - return self._serialize(value, attr, obj, **kwargs) - - def deserialize( - self, - value: typing.Any, - attr: str | None = None, - data: typing.Mapping[str, typing.Any] | None = None, - **kwargs, - ): - """Deserialize ``value``. - - :param value: The value to deserialize. - :param attr: The attribute/key in `data` to deserialize. - :param data: The raw input data passed to `Schema.load `. - :param kwargs: Field-specific keyword arguments. - :raise ValidationError: If an invalid value is passed or if a required value - is missing. - """ - # Validate required fields, deserialize, then validate - # deserialized value - self._validate_missing(value) - if value is missing_: - _miss = self.load_default - return _miss() if callable(_miss) else _miss - if self.allow_none and value is None: - return None - output = self._deserialize(value, attr, data, **kwargs) - self._validate(output) - return output - - # Methods for concrete classes to override. - - def _bind_to_schema(self, field_name: str, schema: Schema | Field) -> None: - """Update field with values from its parent schema. Called by - `Schema._bind_field `. - - :param field_name: Field name set in schema. - :param schema: Parent object. - """ - self.parent = self.parent or schema - self.name = self.name or field_name - self.root = self.root or ( - self.parent.root if isinstance(self.parent, FieldABC) else self.parent - ) - - def _serialize( - self, value: typing.Any, attr: str | None, obj: typing.Any, **kwargs - ) -> typing.Any: - """Serializes ``value`` to a basic Python datatype. Noop by default. - Concrete :class:`Field` classes should implement this method. - - Example: :: - - class TitleCase(Field): - def _serialize(self, value, attr, obj, **kwargs): - if not value: - return "" - return str(value).title() - - :param value: The value to be serialized. - :param attr: The attribute or key on the object to be serialized. - :param obj: The object the value was pulled from. - :param kwargs: Field-specific keyword arguments. - :return: The serialized value - """ - return value - - def _deserialize( - self, - value: typing.Any, - attr: str | None, - data: typing.Mapping[str, typing.Any] | None, - **kwargs, - ) -> typing.Any: - """Deserialize value. Concrete :class:`Field` classes should implement this method. - - :param value: The value to be deserialized. - :param attr: The attribute/key in `data` to be deserialized. - :param data: The raw input data passed to the `Schema.load `. - :param kwargs: Field-specific keyword arguments. - :raise ValidationError: In case of formatting or validation failure. - :return: The deserialized value. - - .. versionchanged:: 3.0.0 - Added ``**kwargs`` to signature. - """ - return value - - # Properties - - @property - def context(self) -> dict | None: - """The context dictionary for the parent `Schema `.""" - if self.parent: - return self.parent.context - return None - - # the default and missing properties are provided for compatibility and - # emit warnings when they are accessed and set - @property - def default(self): - warnings.warn( - "The 'default' attribute of fields is deprecated. " - "Use 'dump_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - return self.dump_default - - @default.setter - def default(self, value): - warnings.warn( - "The 'default' attribute of fields is deprecated. " - "Use 'dump_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - self.dump_default = value - - @property - def missing(self): - warnings.warn( - "The 'missing' attribute of fields is deprecated. " - "Use 'load_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - return self.load_default - - @missing.setter - def missing(self, value): - warnings.warn( - "The 'missing' attribute of fields is deprecated. " - "Use 'load_default' instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - self.load_default = value - - -class Raw(Field): - """Field that applies no formatting.""" - - -class Nested(Field): - """Allows you to nest a :class:`Schema ` - inside a field. - - Examples: :: - - class ChildSchema(Schema): - id = fields.Str() - name = fields.Str() - # Use lambda functions when you need two-way nesting or self-nesting - parent = fields.Nested(lambda: ParentSchema(only=("id",)), dump_only=True) - siblings = fields.List( - fields.Nested(lambda: ChildSchema(only=("id", "name"))) - ) - - - class ParentSchema(Schema): - id = fields.Str() - children = fields.List( - fields.Nested(ChildSchema(only=("id", "parent", "siblings"))) - ) - spouse = fields.Nested(lambda: ParentSchema(only=("id",))) - - When passing a `Schema ` instance as the first argument, - the instance's ``exclude``, ``only``, and ``many`` attributes will be respected. - - Therefore, when passing the ``exclude``, ``only``, or ``many`` arguments to `fields.Nested`, - you should pass a `Schema ` class (not an instance) as the first argument. - - :: - - # Yes - author = fields.Nested(UserSchema, only=("id", "name")) - - # No - author = fields.Nested(UserSchema(), only=("id", "name")) - - :param nested: `Schema ` instance, class, class name (string), dictionary, or callable that - returns a `Schema ` or dictionary. - Dictionaries are converted with `Schema.from_dict `. - :param exclude: A list or tuple of fields to exclude. - :param only: A list or tuple of fields to marshal. If `None`, all fields are marshalled. - This parameter takes precedence over ``exclude``. - :param many: Whether the field is a collection of objects. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - :param kwargs: The same keyword arguments that :class:`Field` receives. - """ - - #: Default error messages. - default_error_messages = {"type": "Invalid type."} - - def __init__( - self, - nested: ( - Schema - | SchemaMeta - | str - | dict[str, Field] - | typing.Callable[[], Schema | SchemaMeta | dict[str, Field]] - ), - *, - dump_default: typing.Any = missing_, - default: typing.Any = missing_, - only: types.StrSequenceOrSet | None = None, - exclude: types.StrSequenceOrSet = (), - many: bool = False, - unknown: str | None = None, - **kwargs, - ): - # Raise error if only or exclude is passed as string, not list of strings - if only is not None and not is_collection(only): - raise StringNotCollectionError('"only" should be a collection of strings.') - if not is_collection(exclude): - raise StringNotCollectionError( - '"exclude" should be a collection of strings.' - ) - if nested == "self": - warnings.warn( - "Passing 'self' to `Nested` is deprecated. " - "Use `Nested(lambda: MySchema(...))` instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - self.nested = nested - self.only = only - self.exclude = exclude - self.many = many - self.unknown = unknown - self._schema: Schema | None = None # Cached Schema instance - super().__init__(default=default, dump_default=dump_default, **kwargs) - - @property - def schema(self) -> Schema: - """The nested `Schema ` object. - - .. versionchanged:: 1.0.0 - Renamed from ``serializer`` to ``schema``. - """ - if not self._schema: - # Inherit context from parent. - context = getattr(self.parent, "context", {}) - if callable(self.nested) and not isinstance(self.nested, type): - nested = self.nested() - else: - nested = typing.cast("Schema", self.nested) - # defer the import of `marshmallow.schema` to avoid circular imports - from marshmallow.schema import Schema - - if isinstance(nested, dict): - nested = Schema.from_dict(nested) - - if isinstance(nested, Schema): - self._schema = copy.copy(nested) - self._schema.context.update(context) - # Respect only and exclude passed from parent and re-initialize fields - set_class = typing.cast(type[set], self._schema.set_class) - if self.only is not None: - if self._schema.only is not None: - original = self._schema.only - else: # only=None -> all fields - original = self._schema.fields.keys() - self._schema.only = set_class(self.only) & set_class(original) - if self.exclude: - original = self._schema.exclude - self._schema.exclude = set_class(self.exclude) | set_class(original) - self._schema._init_fields() - else: - if isinstance(nested, type) and issubclass(nested, Schema): - schema_class: type[Schema] = nested - elif not isinstance(nested, (str, bytes)): - raise ValueError( - "`Nested` fields must be passed a " - f"`Schema`, not {nested.__class__}." - ) - elif nested == "self": - schema_class = typing.cast(Schema, self.root).__class__ - else: - schema_class = class_registry.get_class(nested, all=False) - self._schema = schema_class( - many=self.many, - only=self.only, - exclude=self.exclude, - context=context, - load_only=self._nested_normalized_option("load_only"), - dump_only=self._nested_normalized_option("dump_only"), - ) - return self._schema - - def _nested_normalized_option(self, option_name: str) -> list[str]: - nested_field = f"{self.name}." - return [ - field.split(nested_field, 1)[1] - for field in getattr(self.root, option_name, set()) - if field.startswith(nested_field) - ] - - def _serialize(self, nested_obj, attr, obj, **kwargs): - # Load up the schema first. This allows a RegistryError to be raised - # if an invalid schema name was passed - schema = self.schema - if nested_obj is None: - return None - many = schema.many or self.many - return schema.dump(nested_obj, many=many) - - def _test_collection(self, value: typing.Any) -> None: - many = self.schema.many or self.many - if many and not utils.is_collection(value): - raise self.make_error("type", input=value, type=value.__class__.__name__) - - def _load( - self, value: typing.Any, partial: bool | types.StrSequenceOrSet | None = None - ): - try: - valid_data = self.schema.load(value, unknown=self.unknown, partial=partial) - except ValidationError as error: - raise ValidationError( - error.messages, valid_data=error.valid_data - ) from error - return valid_data - - def _deserialize( - self, - value: typing.Any, - attr: str | None, - data: typing.Mapping[str, typing.Any] | None, - partial: bool | types.StrSequenceOrSet | None = None, - **kwargs, - ) -> typing.Any: - """Same as :meth:`Field._deserialize` with additional ``partial`` argument. - - :param partial: For nested schemas, the ``partial`` - parameter passed to `marshmallow.Schema.load`. - - .. versionchanged:: 3.0.0 - Add ``partial`` parameter. - """ - self._test_collection(value) - return self._load(value, partial=partial) - - -class Pluck(Nested): - """Allows you to replace nested data with one of the data's fields. - - Example: :: - - from marshmallow import Schema, fields - - - class ArtistSchema(Schema): - id = fields.Int() - name = fields.Str() - - - class AlbumSchema(Schema): - artist = fields.Pluck(ArtistSchema, "id") - - - in_data = {"artist": 42} - loaded = AlbumSchema().load(in_data) # => {'artist': {'id': 42}} - dumped = AlbumSchema().dump(loaded) # => {'artist': 42} - - :param nested: The Schema class or class name (string) - to nest, or ``"self"`` to nest the `Schema ` within itself. - :param field_name: The key to pluck a value from. - :param kwargs: The same keyword arguments that :class:`Nested` receives. - """ - - def __init__( - self, - nested: Schema | SchemaMeta | str | typing.Callable[[], Schema], - field_name: str, - *, - many: bool = False, - unknown: str | None = None, - **kwargs, - ): - super().__init__( - nested, only=(field_name,), many=many, unknown=unknown, **kwargs - ) - self.field_name = field_name - - @property - def _field_data_key(self) -> str: - only_field = self.schema.fields[self.field_name] - return only_field.data_key or self.field_name - - def _serialize(self, nested_obj, attr, obj, **kwargs): - ret = super()._serialize(nested_obj, attr, obj, **kwargs) - if ret is None: - return None - if self.many: - return utils.pluck(ret, key=self._field_data_key) - return ret[self._field_data_key] - - def _deserialize(self, value, attr, data, partial=None, **kwargs): - self._test_collection(value) - if self.many: - value = [{self._field_data_key: v} for v in value] - else: - value = {self._field_data_key: value} - return self._load(value, partial=partial) - - -class List(Field): - """A list field, composed with another `Field` class or - instance. - - Example: :: - - numbers = fields.List(fields.Float()) - - :param cls_or_instance: A field class or instance. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionchanged:: 3.0.0rc9 - Does not serialize scalar values to single-item lists. - """ - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid list."} - - def __init__(self, cls_or_instance: Field | type[Field], **kwargs): - super().__init__(**kwargs) - try: - self.inner = resolve_field_instance(cls_or_instance) - except FieldInstanceResolutionError as error: - raise ValueError( - "The list elements must be a subclass or instance of " - "marshmallow.base.FieldABC." - ) from error - if isinstance(self.inner, Nested): - self.only = self.inner.only - self.exclude = self.inner.exclude - - def _bind_to_schema(self, field_name: str, schema: Schema | Field) -> None: - super()._bind_to_schema(field_name, schema) - self.inner = copy.deepcopy(self.inner) - self.inner._bind_to_schema(field_name, self) - if isinstance(self.inner, Nested): - self.inner.only = self.only - self.inner.exclude = self.exclude - - def _serialize(self, value, attr, obj, **kwargs) -> list[typing.Any] | None: - if value is None: - return None - return [self.inner._serialize(each, attr, obj, **kwargs) for each in value] - - def _deserialize(self, value, attr, data, **kwargs) -> list[typing.Any]: - if not utils.is_collection(value): - raise self.make_error("invalid") - - result = [] - errors = {} - for idx, each in enumerate(value): - try: - result.append(self.inner.deserialize(each, **kwargs)) - except ValidationError as error: - if error.valid_data is not None: - result.append(error.valid_data) - errors.update({idx: error.messages}) - if errors: - raise ValidationError(errors, valid_data=result) - return result - - -class Tuple(Field): - """A tuple field, composed of a fixed number of other `Field` classes or - instances - - Example: :: - - row = Tuple((fields.String(), fields.Integer(), fields.Float())) - - .. note:: - Because of the structured nature of `collections.namedtuple` and - `typing.NamedTuple`, using a Schema within a Nested field for them is - more appropriate than using a `Tuple` field. - - :param tuple_fields: An iterable of field classes or - instances. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionadded:: 3.0.0rc4 - """ - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid tuple."} - - def __init__( - self, - tuple_fields: typing.Iterable[Field] | typing.Iterable[type[Field]], - **kwargs, - ): - super().__init__(**kwargs) - if not utils.is_collection(tuple_fields): - raise ValueError( - "tuple_fields must be an iterable of Field classes or instances." - ) - - try: - self.tuple_fields = [ - resolve_field_instance(cls_or_instance) - for cls_or_instance in tuple_fields - ] - except FieldInstanceResolutionError as error: - raise ValueError( - 'Elements of "tuple_fields" must be subclasses or ' - "instances of marshmallow.base.FieldABC." - ) from error - - self.validate_length = Length(equal=len(self.tuple_fields)) - - def _bind_to_schema(self, field_name: str, schema: Schema | Field) -> None: - super()._bind_to_schema(field_name, schema) - new_tuple_fields = [] - for field in self.tuple_fields: - new_field = copy.deepcopy(field) - new_field._bind_to_schema(field_name, self) - new_tuple_fields.append(new_field) - - self.tuple_fields = new_tuple_fields - - def _serialize(self, value, attr, obj, **kwargs) -> tuple | None: - if value is None: - return None - - return tuple( - field._serialize(each, attr, obj, **kwargs) - for field, each in zip(self.tuple_fields, value) - ) - - def _deserialize(self, value, attr, data, **kwargs) -> tuple: - if not utils.is_collection(value): - raise self.make_error("invalid") - - self.validate_length(value) - - result = [] - errors = {} - - for idx, (field, each) in enumerate(zip(self.tuple_fields, value)): - try: - result.append(field.deserialize(each, **kwargs)) - except ValidationError as error: - if error.valid_data is not None: - result.append(error.valid_data) - errors.update({idx: error.messages}) - if errors: - raise ValidationError(errors, valid_data=result) - - return tuple(result) - - -class String(Field): - """A string field. - - :param kwargs: The same keyword arguments that :class:`Field` receives. - """ - - #: Default error messages. - default_error_messages = { - "invalid": "Not a valid string.", - "invalid_utf8": "Not a valid utf-8 string.", - } - - def _serialize(self, value, attr, obj, **kwargs) -> str | None: - if value is None: - return None - return utils.ensure_text_type(value) - - def _deserialize(self, value, attr, data, **kwargs) -> typing.Any: - if not isinstance(value, (str, bytes)): - raise self.make_error("invalid") - try: - return utils.ensure_text_type(value) - except UnicodeDecodeError as error: - raise self.make_error("invalid_utf8") from error - - -class UUID(String): - """A UUID field.""" - - #: Default error messages. - default_error_messages = {"invalid_uuid": "Not a valid UUID."} - - def _validated(self, value) -> uuid.UUID | None: - """Format the value or raise a :exc:`ValidationError` if an error occurs.""" - if value is None: - return None - if isinstance(value, uuid.UUID): - return value - try: - if isinstance(value, bytes) and len(value) == 16: - return uuid.UUID(bytes=value) - return uuid.UUID(value) - except (ValueError, AttributeError, TypeError) as error: - raise self.make_error("invalid_uuid") from error - - def _deserialize(self, value, attr, data, **kwargs) -> uuid.UUID | None: - return self._validated(value) - - -_NumType = typing.TypeVar("_NumType") - - -class Number(Field, typing.Generic[_NumType]): - """Base class for number fields. - - :param as_string: If `True`, format the serialized value as a string. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionchanged:: 3.24.0 - `Number ` should no longer be used as a field within a `Schema `. - Use `Integer `, `Float `, or `Decimal ` instead. - """ - - num_type: type = float - - #: Default error messages. - default_error_messages = { - "invalid": "Not a valid number.", - "too_large": "Number too large.", - } - - def __init__(self, *, as_string: bool = False, **kwargs): - if self.__class__ is Number: - warnings.warn( - "`Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.", - ChangedInMarshmallow4Warning, - stacklevel=2, - ) - self.as_string = as_string - super().__init__(**kwargs) - - def _format_num(self, value) -> _NumType: - """Return the number value for value, given this field's `num_type`.""" - return self.num_type(value) - - def _validated(self, value: typing.Any) -> _NumType: - """Format the value or raise a :exc:`ValidationError` if an error occurs.""" - # (value is True or value is False) is ~5x faster than isinstance(value, bool) - if value is True or value is False: - raise self.make_error("invalid", input=value) - try: - return self._format_num(value) - except (TypeError, ValueError) as error: - raise self.make_error("invalid", input=value) from error - except OverflowError as error: - raise self.make_error("too_large", input=value) from error - - def _to_string(self, value: _NumType) -> str: - return str(value) - - def _serialize(self, value, attr, obj, **kwargs) -> str | _NumType | None: - """Return a string if `self.as_string=True`, otherwise return this field's `num_type`.""" - if value is None: - return None - ret: _NumType = self._format_num(value) - return self._to_string(ret) if self.as_string else ret - - def _deserialize(self, value, attr, data, **kwargs) -> _NumType | None: - return self._validated(value) - - -class Integer(Number[int]): - """An integer field. - - :param strict: If `True`, only integer types are valid. - Otherwise, any value castable to `int` is valid. - :param kwargs: The same keyword arguments that :class:`Number` receives. - """ - - num_type = int - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid integer."} - - def __init__(self, *, strict: bool = False, **kwargs): - self.strict = strict - super().__init__(**kwargs) - - # override Number - def _validated(self, value: typing.Any) -> int: - if self.strict and not isinstance(value, numbers.Integral): - raise self.make_error("invalid", input=value) - return super()._validated(value) - - -class Float(Number[float]): - """A double as an IEEE-754 double precision string. - - :param allow_nan: If `True`, `NaN`, `Infinity` and `-Infinity` are allowed, - even though they are illegal according to the JSON specification. - :param as_string: If `True`, format the value as a string. - :param kwargs: The same keyword arguments that :class:`Number` receives. - """ - - num_type = float - - #: Default error messages. - default_error_messages = { - "special": "Special numeric values (nan or infinity) are not permitted." - } - - def __init__(self, *, allow_nan: bool = False, as_string: bool = False, **kwargs): - self.allow_nan = allow_nan - super().__init__(as_string=as_string, **kwargs) - - def _validated(self, value: typing.Any) -> float: - num = super()._validated(value) - if self.allow_nan is False: - if math.isnan(num) or num == float("inf") or num == float("-inf"): - raise self.make_error("special") - return num - - -class Decimal(Number[decimal.Decimal]): - """A field that (de)serializes to the Python ``decimal.Decimal`` type. - It's safe to use when dealing with money values, percentages, ratios - or other numbers where precision is critical. - - .. warning:: - - This field serializes to a `decimal.Decimal` object by default. If you need - to render your data as JSON, keep in mind that the `json` module from the - standard library does not encode `decimal.Decimal`. Therefore, you must use - a JSON library that can handle decimals, such as `simplejson`, or serialize - to a string by passing ``as_string=True``. - - .. warning:: - - If a JSON `float` value is passed to this field for deserialization it will - first be cast to its corresponding `string` value before being deserialized - to a `decimal.Decimal` object. The default `__str__` implementation of the - built-in Python `float` type may apply a destructive transformation upon - its input data and therefore cannot be relied upon to preserve precision. - To avoid this, you can instead pass a JSON `string` to be deserialized - directly. - - :param places: How many decimal places to quantize the value. If `None`, does - not quantize the value. - :param rounding: How to round the value during quantize, for example - `decimal.ROUND_UP`. If `None`, uses the rounding value from - the current thread's context. - :param allow_nan: If `True`, `NaN`, `Infinity` and `-Infinity` are allowed, - even though they are illegal according to the JSON specification. - :param as_string: If `True`, serialize to a string instead of a Python - `decimal.Decimal` type. - :param kwargs: The same keyword arguments that :class:`Number` receives. - - .. versionadded:: 1.2.0 - """ - - num_type = decimal.Decimal - - #: Default error messages. - default_error_messages = { - "special": "Special numeric values (nan or infinity) are not permitted." - } - - def __init__( - self, - places: int | None = None, - rounding: str | None = None, - *, - allow_nan: bool = False, - as_string: bool = False, - **kwargs, - ): - self.places = ( - decimal.Decimal((0, (1,), -places)) if places is not None else None - ) - self.rounding = rounding - self.allow_nan = allow_nan - super().__init__(as_string=as_string, **kwargs) - - # override Number - def _format_num(self, value): - num = decimal.Decimal(str(value)) - if self.allow_nan: - if num.is_nan(): - return decimal.Decimal("NaN") # avoid sNaN, -sNaN and -NaN - if self.places is not None and num.is_finite(): - num = num.quantize(self.places, rounding=self.rounding) - return num - - # override Number - def _validated(self, value: typing.Any) -> decimal.Decimal: - try: - num = super()._validated(value) - except decimal.InvalidOperation as error: - raise self.make_error("invalid") from error - if not self.allow_nan and (num.is_nan() or num.is_infinite()): - raise self.make_error("special") - return num - - # override Number - def _to_string(self, value: decimal.Decimal) -> str: - return format(value, "f") - - -class Boolean(Field): - """A boolean field. - - :param truthy: Values that will (de)serialize to `True`. If an empty - set, any non-falsy value will deserialize to `True`. If `None`, - `marshmallow.fields.Boolean.truthy` will be used. - :param falsy: Values that will (de)serialize to `False`. If `None`, - `marshmallow.fields.Boolean.falsy` will be used. - :param kwargs: The same keyword arguments that :class:`Field` receives. - """ - - #: Default truthy values. - truthy = { - "t", - "T", - "true", - "True", - "TRUE", - "on", - "On", - "ON", - "y", - "Y", - "yes", - "Yes", - "YES", - "1", - 1, - # Equal to 1 - # True, - } - #: Default falsy values. - falsy = { - "f", - "F", - "false", - "False", - "FALSE", - "off", - "Off", - "OFF", - "n", - "N", - "no", - "No", - "NO", - "0", - 0, - # Equal to 0 - # 0.0, - # False, - } - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid boolean."} - - def __init__( - self, - *, - truthy: typing.Iterable | None = None, - falsy: typing.Iterable | None = None, - **kwargs, - ): - super().__init__(**kwargs) - - if truthy is not None: - self.truthy = set(truthy) - if falsy is not None: - self.falsy = set(falsy) - - def _serialize( - self, value: typing.Any, attr: str | None, obj: typing.Any, **kwargs - ): - if value is None: - return None - - try: - if value in self.truthy: - return True - if value in self.falsy: - return False - except TypeError: - pass - - return bool(value) - - def _deserialize(self, value, attr, data, **kwargs): - if not self.truthy: - return bool(value) - try: - if value in self.truthy: - return True - if value in self.falsy: - return False - except TypeError as error: - raise self.make_error("invalid", input=value) from error - raise self.make_error("invalid", input=value) - - -class DateTime(Field): - """A formatted datetime string. - - Example: ``'2014-12-22T03:12:58.019077+00:00'`` - - :param format: Either ``"rfc"`` (for RFC822), ``"iso"`` (for ISO8601), - ``"timestamp"``, ``"timestamp_ms"`` (for a POSIX timestamp) or a date format string. - If `None`, defaults to "iso". - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionchanged:: 3.0.0rc9 - Does not modify timezone information on (de)serialization. - .. versionchanged:: 3.19 - Add timestamp as a format. - """ - - SERIALIZATION_FUNCS: dict[str, typing.Callable[[typing.Any], str | float]] = { - "iso": utils.isoformat, - "iso8601": utils.isoformat, - "rfc": utils.rfcformat, - "rfc822": utils.rfcformat, - "timestamp": utils.timestamp, - "timestamp_ms": utils.timestamp_ms, - } - - DESERIALIZATION_FUNCS: dict[str, typing.Callable[[str], typing.Any]] = { - "iso": utils.from_iso_datetime, - "iso8601": utils.from_iso_datetime, - "rfc": utils.from_rfc, - "rfc822": utils.from_rfc, - "timestamp": utils.from_timestamp, - "timestamp_ms": utils.from_timestamp_ms, - } - - DEFAULT_FORMAT = "iso" - - OBJ_TYPE = "datetime" - - SCHEMA_OPTS_VAR_NAME = "datetimeformat" - - #: Default error messages. - default_error_messages = { - "invalid": "Not a valid {obj_type}.", - "invalid_awareness": "Not a valid {awareness} {obj_type}.", - "format": '"{input}" cannot be formatted as a {obj_type}.', - } - - def __init__(self, format: str | None = None, **kwargs) -> None: # noqa: A002 - super().__init__(**kwargs) - # Allow this to be None. It may be set later in the ``_serialize`` - # or ``_deserialize`` methods. This allows a Schema to dynamically set the - # format, e.g. from a Meta option - self.format = format - - def _bind_to_schema(self, field_name, schema): - super()._bind_to_schema(field_name, schema) - self.format = ( - self.format - or getattr(self.root.opts, self.SCHEMA_OPTS_VAR_NAME) - or self.DEFAULT_FORMAT - ) - - def _serialize(self, value, attr, obj, **kwargs) -> str | float | None: - if value is None: - return None - data_format = self.format or self.DEFAULT_FORMAT - format_func = self.SERIALIZATION_FUNCS.get(data_format) - if format_func: - return format_func(value) - return value.strftime(data_format) - - def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime: - data_format = self.format or self.DEFAULT_FORMAT - func = self.DESERIALIZATION_FUNCS.get(data_format) - try: - if func: - return func(value) - return self._make_object_from_format(value, data_format) - except (TypeError, AttributeError, ValueError) as error: - raise self.make_error( - "invalid", input=value, obj_type=self.OBJ_TYPE - ) from error - - @staticmethod - def _make_object_from_format(value, data_format) -> dt.datetime: - return dt.datetime.strptime(value, data_format) - - -class NaiveDateTime(DateTime): - """A formatted naive datetime string. - - :param format: See :class:`DateTime`. - :param timezone: Used on deserialization. If `None`, - aware datetimes are rejected. If not `None`, aware datetimes are - converted to this timezone before their timezone information is - removed. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionadded:: 3.0.0rc9 - """ - - AWARENESS = "naive" - - def __init__( - self, - format: str | None = None, # noqa: A002 - *, - timezone: dt.timezone | None = None, - **kwargs, - ) -> None: - super().__init__(format=format, **kwargs) - self.timezone = timezone - - def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime: - ret = super()._deserialize(value, attr, data, **kwargs) - if is_aware(ret): - if self.timezone is None: - raise self.make_error( - "invalid_awareness", - awareness=self.AWARENESS, - obj_type=self.OBJ_TYPE, - ) - ret = ret.astimezone(self.timezone).replace(tzinfo=None) - return ret - - -class AwareDateTime(DateTime): - """A formatted aware datetime string. - - :param format: See :class:`DateTime`. - :param default_timezone: Used on deserialization. If `None`, naive - datetimes are rejected. If not `None`, naive datetimes are set this - timezone. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. versionadded:: 3.0.0rc9 - """ - - AWARENESS = "aware" - - def __init__( - self, - format: str | None = None, # noqa: A002 - *, - default_timezone: dt.tzinfo | None = None, - **kwargs, - ) -> None: - super().__init__(format=format, **kwargs) - self.default_timezone = default_timezone - - def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime: - ret = super()._deserialize(value, attr, data, **kwargs) - if not is_aware(ret): - if self.default_timezone is None: - raise self.make_error( - "invalid_awareness", - awareness=self.AWARENESS, - obj_type=self.OBJ_TYPE, - ) - ret = ret.replace(tzinfo=self.default_timezone) - return ret - - -class Time(DateTime): - """A formatted time string. - - Example: ``'03:12:58.019077'`` - - :param format: Either ``"iso"`` (for ISO8601) or a date format string. - If `None`, defaults to "iso". - :param kwargs: The same keyword arguments that :class:`Field` receives. - """ - - SERIALIZATION_FUNCS = {"iso": utils.to_iso_time, "iso8601": utils.to_iso_time} - - DESERIALIZATION_FUNCS = {"iso": utils.from_iso_time, "iso8601": utils.from_iso_time} - - DEFAULT_FORMAT = "iso" - - OBJ_TYPE = "time" - - SCHEMA_OPTS_VAR_NAME = "timeformat" - - @staticmethod - def _make_object_from_format(value, data_format): - return dt.datetime.strptime(value, data_format).time() - - -class Date(DateTime): - """ISO8601-formatted date string. - - :param format: Either ``"iso"`` (for ISO8601) or a date format string. - If `None`, defaults to "iso". - :param kwargs: The same keyword arguments that :class:`Field` receives. - """ - - #: Default error messages. - default_error_messages = { - "invalid": "Not a valid date.", - "format": '"{input}" cannot be formatted as a date.', - } - - SERIALIZATION_FUNCS = {"iso": utils.to_iso_date, "iso8601": utils.to_iso_date} - - DESERIALIZATION_FUNCS = {"iso": utils.from_iso_date, "iso8601": utils.from_iso_date} - - DEFAULT_FORMAT = "iso" - - OBJ_TYPE = "date" - - SCHEMA_OPTS_VAR_NAME = "dateformat" - - @staticmethod - def _make_object_from_format(value, data_format): - return dt.datetime.strptime(value, data_format).date() - - -class TimeDelta(Field): - """A field that (de)serializes a :class:`datetime.timedelta` object to an - integer or float and vice versa. The integer or float can represent the - number of days, seconds or microseconds. - - :param precision: Influences how the integer or float is interpreted during - (de)serialization. Must be 'days', 'seconds', 'microseconds', - 'milliseconds', 'minutes', 'hours' or 'weeks'. - :param serialization_type: Whether to (de)serialize to a `int` or `float`. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - Integer Caveats - --------------- - Any fractional parts (which depends on the precision used) will be truncated - when serializing using `int`. - - Float Caveats - ------------- - Use of `float` when (de)serializing may result in data precision loss due - to the way machines handle floating point values. - - Regardless of the precision chosen, the fractional part when using `float` - will always be truncated to microseconds. - For example, `1.12345` interpreted as microseconds will result in `timedelta(microseconds=1)`. - - .. versionchanged:: 3.17.0 - Allow (de)serialization to `float` through use of a new `serialization_type` parameter. - `int` is the default to retain previous behaviour. - """ - - DAYS = "days" - SECONDS = "seconds" - MICROSECONDS = "microseconds" - MILLISECONDS = "milliseconds" - MINUTES = "minutes" - HOURS = "hours" - WEEKS = "weeks" - - #: Default error messages. - default_error_messages = { - "invalid": "Not a valid period of time.", - "format": "{input!r} cannot be formatted as a timedelta.", - } - - def __init__( - self, - precision: str = SECONDS, - serialization_type: type[int | float] = int, - **kwargs, - ): - precision = precision.lower() - units = ( - self.DAYS, - self.SECONDS, - self.MICROSECONDS, - self.MILLISECONDS, - self.MINUTES, - self.HOURS, - self.WEEKS, - ) - - if precision not in units: - msg = 'The precision must be {} or "{}".'.format( - ", ".join([f'"{each}"' for each in units[:-1]]), units[-1] - ) - raise ValueError(msg) - - if serialization_type not in (int, float): - raise ValueError("The serialization type must be one of int or float") - - self.precision = precision - self.serialization_type = serialization_type - super().__init__(**kwargs) - - def _serialize(self, value, attr, obj, **kwargs): - if value is None: - return None - - base_unit = dt.timedelta(**{self.precision: 1}) - - if self.serialization_type is int: - delta = utils.timedelta_to_microseconds(value) - unit = utils.timedelta_to_microseconds(base_unit) - return delta // unit - assert self.serialization_type is float # noqa: S101 - return value.total_seconds() / base_unit.total_seconds() - - def _deserialize(self, value, attr, data, **kwargs): - try: - value = self.serialization_type(value) - except (TypeError, ValueError) as error: - raise self.make_error("invalid") from error - - kwargs = {self.precision: value} - - try: - return dt.timedelta(**kwargs) - except OverflowError as error: - raise self.make_error("invalid") from error - - -class Mapping(Field): - """An abstract class for objects with key-value pairs. This class should not be used within schemas. - - :param keys: A field class or instance for dict keys. - :param values: A field class or instance for dict values. - :param kwargs: The same keyword arguments that :class:`Field` receives. - - .. note:: - When the structure of nested data is not known, you may omit the - `keys` and `values` arguments to prevent content validation. - - .. versionadded:: 3.0.0rc4 - .. versionchanged:: 3.24.0 - `Mapping ` should no longer be used as a field within a `Schema `. - Use `Dict ` instead. - """ - - mapping_type = dict - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid mapping type."} - - def __init__( - self, - keys: Field | type[Field] | None = None, - values: Field | type[Field] | None = None, - **kwargs, - ): - if self.__class__ is Mapping: - warnings.warn( - "`Mapping` field should not be instantiated. Use `Dict` instead.", - ChangedInMarshmallow4Warning, - stacklevel=2, - ) - super().__init__(**kwargs) - if keys is None: - self.key_field = None - else: - try: - self.key_field = resolve_field_instance(keys) - except FieldInstanceResolutionError as error: - raise ValueError( - '"keys" must be a subclass or instance of ' - "marshmallow.base.FieldABC." - ) from error - - if values is None: - self.value_field = None - else: - try: - self.value_field = resolve_field_instance(values) - except FieldInstanceResolutionError as error: - raise ValueError( - '"values" must be a subclass or instance of ' - "marshmallow.base.FieldABC." - ) from error - if isinstance(self.value_field, Nested): - self.only = self.value_field.only - self.exclude = self.value_field.exclude - - def _bind_to_schema(self, field_name, schema): - super()._bind_to_schema(field_name, schema) - if self.value_field: - self.value_field = copy.deepcopy(self.value_field) - self.value_field._bind_to_schema(field_name, self) - if isinstance(self.value_field, Nested): - self.value_field.only = self.only - self.value_field.exclude = self.exclude - if self.key_field: - self.key_field = copy.deepcopy(self.key_field) - self.key_field._bind_to_schema(field_name, self) - - def _serialize(self, value, attr, obj, **kwargs): - if value is None: - return None - if not self.value_field and not self.key_field: - return self.mapping_type(value) - - # Serialize keys - if self.key_field is None: - keys = {k: k for k in value} - else: - keys = { - k: self.key_field._serialize(k, None, None, **kwargs) for k in value - } - - # Serialize values - result = self.mapping_type() - if self.value_field is None: - for k, v in value.items(): - if k in keys: - result[keys[k]] = v - else: - for k, v in value.items(): - result[keys[k]] = self.value_field._serialize(v, None, None, **kwargs) - - return result - - def _deserialize(self, value, attr, data, **kwargs): - if not isinstance(value, _Mapping): - raise self.make_error("invalid") - if not self.value_field and not self.key_field: - return self.mapping_type(value) - - errors = collections.defaultdict(dict) - - # Deserialize keys - if self.key_field is None: - keys = {k: k for k in value} - else: - keys = {} - for key in value: - try: - keys[key] = self.key_field.deserialize(key, **kwargs) - except ValidationError as error: - errors[key]["key"] = error.messages - - # Deserialize values - result = self.mapping_type() - if self.value_field is None: - for k, v in value.items(): - if k in keys: - result[keys[k]] = v - else: - for key, val in value.items(): - try: - deser_val = self.value_field.deserialize(val, **kwargs) - except ValidationError as error: - errors[key]["value"] = error.messages - if error.valid_data is not None and key in keys: - result[keys[key]] = error.valid_data - else: - if key in keys: - result[keys[key]] = deser_val - - if errors: - raise ValidationError(errors, valid_data=result) - - return result - - -class Dict(Mapping): - """A dict field. Supports dicts and dict-like objects. Extends - Mapping with dict as the mapping_type. - - Example: :: - - numbers = fields.Dict(keys=fields.Str(), values=fields.Float()) - - :param kwargs: The same keyword arguments that :class:`Mapping` receives. - - .. versionadded:: 2.1.0 - """ - - mapping_type = dict - - -class Url(String): - """An URL field. - - :param default: Default value for the field if the attribute is not set. - :param relative: Whether to allow relative URLs. - :param absolute: Whether to allow absolute URLs. - :param require_tld: Whether to reject non-FQDN hostnames. - :param schemes: Valid schemes. By default, ``http``, ``https``, - ``ftp``, and ``ftps`` are allowed. - :param kwargs: The same keyword arguments that :class:`String` receives. - """ - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid URL."} - - def __init__( - self, - *, - relative: bool = False, - absolute: bool = True, - schemes: types.StrSequenceOrSet | None = None, - require_tld: bool = True, - **kwargs, - ): - super().__init__(**kwargs) - - self.relative = relative - self.absolute = absolute - self.require_tld = require_tld - # Insert validation into self.validators so that multiple errors can be stored. - validator = validate.URL( - relative=self.relative, - absolute=self.absolute, - schemes=schemes, - require_tld=self.require_tld, - error=self.error_messages["invalid"], - ) - self.validators.insert(0, validator) - - -class Email(String): - """An email field. - - :param args: The same positional arguments that :class:`String` receives. - :param kwargs: The same keyword arguments that :class:`String` receives. - """ - - #: Default error messages. - default_error_messages = {"invalid": "Not a valid email address."} - - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - # Insert validation into self.validators so that multiple errors can be stored. - validator = validate.Email(error=self.error_messages["invalid"]) - self.validators.insert(0, validator) - - -class IP(Field): - """A IP address field. - - :param exploded: If `True`, serialize ipv6 address in long form, ie. with groups - consisting entirely of zeros included. - - .. versionadded:: 3.8.0 - """ - - default_error_messages = {"invalid_ip": "Not a valid IP address."} - - DESERIALIZATION_CLASS: type | None = None - - def __init__(self, *args, exploded=False, **kwargs): - super().__init__(*args, **kwargs) - self.exploded = exploded - - def _serialize(self, value, attr, obj, **kwargs) -> str | None: - if value is None: - return None - if self.exploded: - return value.exploded - return value.compressed - - def _deserialize( - self, value, attr, data, **kwargs - ) -> ipaddress.IPv4Address | ipaddress.IPv6Address | None: - if value is None: - return None - try: - return (self.DESERIALIZATION_CLASS or ipaddress.ip_address)( - utils.ensure_text_type(value) - ) - except (ValueError, TypeError) as error: - raise self.make_error("invalid_ip") from error - - -class IPv4(IP): - """A IPv4 address field. - - .. versionadded:: 3.8.0 - """ - - default_error_messages = {"invalid_ip": "Not a valid IPv4 address."} - - DESERIALIZATION_CLASS = ipaddress.IPv4Address - - -class IPv6(IP): - """A IPv6 address field. - - .. versionadded:: 3.8.0 - """ - - default_error_messages = {"invalid_ip": "Not a valid IPv6 address."} - - DESERIALIZATION_CLASS = ipaddress.IPv6Address - - -class IPInterface(Field): - """A IPInterface field. - - IP interface is the non-strict form of the IPNetwork type where arbitrary host - addresses are always accepted. - - IPAddress and mask e.g. '192.168.0.2/24' or '192.168.0.2/255.255.255.0' - - see https://python.readthedocs.io/en/latest/library/ipaddress.html#interface-objects - - :param exploded: If `True`, serialize ipv6 interface in long form, ie. with groups - consisting entirely of zeros included. - """ - - default_error_messages = {"invalid_ip_interface": "Not a valid IP interface."} - - DESERIALIZATION_CLASS: type | None = None - - def __init__(self, *args, exploded: bool = False, **kwargs): - super().__init__(*args, **kwargs) - self.exploded = exploded - - def _serialize(self, value, attr, obj, **kwargs) -> str | None: - if value is None: - return None - if self.exploded: - return value.exploded - return value.compressed - - def _deserialize(self, value, attr, data, **kwargs) -> None | ( - ipaddress.IPv4Interface | ipaddress.IPv6Interface - ): - if value is None: - return None - try: - return (self.DESERIALIZATION_CLASS or ipaddress.ip_interface)( - utils.ensure_text_type(value) - ) - except (ValueError, TypeError) as error: - raise self.make_error("invalid_ip_interface") from error - - -class IPv4Interface(IPInterface): - """A IPv4 Network Interface field.""" - - default_error_messages = {"invalid_ip_interface": "Not a valid IPv4 interface."} - - DESERIALIZATION_CLASS = ipaddress.IPv4Interface - - -class IPv6Interface(IPInterface): - """A IPv6 Network Interface field.""" - - default_error_messages = {"invalid_ip_interface": "Not a valid IPv6 interface."} - - DESERIALIZATION_CLASS = ipaddress.IPv6Interface - - -class Enum(Field): - """An Enum field (de)serializing enum members by symbol (name) or by value. - - :param enum: Enum class - :param by_value: Whether to (de)serialize by value or by name, - or Field class or instance to use to (de)serialize by value. Defaults to False. - - If `by_value` is `False` (default), enum members are (de)serialized by symbol (name). - If it is `True`, they are (de)serialized by value using :class:`Raw`. - If it is a field instance or class, they are (de)serialized by value using this field. - - .. versionadded:: 3.18.0 - """ - - default_error_messages = { - "unknown": "Must be one of: {choices}.", - } - - def __init__( - self, - enum: type[EnumType], - *, - by_value: bool | Field | type[Field] = False, - **kwargs, - ): - super().__init__(**kwargs) - self.enum = enum - self.by_value = by_value - - # Serialization by name - if by_value is False: - self.field: Field = String() - self.choices_text = ", ".join( - str(self.field._serialize(m, None, None)) for m in enum.__members__ - ) - # Serialization by value - else: - if by_value is True: - self.field = Raw() - else: - try: - self.field = resolve_field_instance(by_value) - except FieldInstanceResolutionError as error: - raise ValueError( - '"by_value" must be either a bool or a subclass or instance of ' - "marshmallow.base.FieldABC." - ) from error - self.choices_text = ", ".join( - str(self.field._serialize(m.value, None, None)) for m in enum - ) - - def _serialize(self, value, attr, obj, **kwargs): - if value is None: - return None - if self.by_value: - val = value.value - else: - val = value.name - return self.field._serialize(val, attr, obj, **kwargs) - - def _deserialize(self, value, attr, data, **kwargs): - val = self.field._deserialize(value, attr, data, **kwargs) - if self.by_value: - try: - return self.enum(val) - except ValueError as error: - raise self.make_error("unknown", choices=self.choices_text) from error - try: - return getattr(self.enum, val) - except AttributeError as error: - raise self.make_error("unknown", choices=self.choices_text) from error - - -class Method(Field): - """A field that takes the value returned by a `Schema ` method. - - :param serialize: The name of the Schema method from which - to retrieve the value. The method must take an argument ``obj`` - (in addition to self) that is the object to be serialized. - :param deserialize: Optional name of the Schema method for deserializing - a value The method must take a single argument ``value``, which is the - value to deserialize. - - .. versionchanged:: 2.3.0 - Deprecated ``method_name`` parameter in favor of ``serialize`` and allow - ``serialize`` to not be passed at all. - - .. versionchanged:: 3.0.0 - Removed ``method_name`` parameter. - """ - - _CHECK_ATTRIBUTE = False - - def __init__( - self, - serialize: str | None = None, - deserialize: str | None = None, - **kwargs, - ): - # Set dump_only and load_only based on arguments - kwargs["dump_only"] = bool(serialize) and not bool(deserialize) - kwargs["load_only"] = bool(deserialize) and not bool(serialize) - super().__init__(**kwargs) - self.serialize_method_name = serialize - self.deserialize_method_name = deserialize - self._serialize_method = None - self._deserialize_method = None - - def _bind_to_schema(self, field_name, schema): - if self.serialize_method_name: - self._serialize_method = utils.callable_or_raise( - getattr(schema, self.serialize_method_name) - ) - - if self.deserialize_method_name: - self._deserialize_method = utils.callable_or_raise( - getattr(schema, self.deserialize_method_name) - ) - - super()._bind_to_schema(field_name, schema) - - def _serialize(self, value, attr, obj, **kwargs): - if self._serialize_method is not None: - return self._serialize_method(obj) - return missing_ - - def _deserialize(self, value, attr, data, **kwargs): - if self._deserialize_method is not None: - return self._deserialize_method(value) - return value - - -class Function(Field): - """A field that takes the value returned by a function. - - :param serialize: A callable from which to retrieve the value. - The function must take a single argument ``obj`` which is the object - to be serialized. It can also optionally take a ``context`` argument, - which is a dictionary of context variables passed to the serializer. - If no callable is provided then the ```load_only``` flag will be set - to True. - :param deserialize: A callable from which to retrieve the value. - The function must take a single argument ``value`` which is the value - to be deserialized. It can also optionally take a ``context`` argument, - which is a dictionary of context variables passed to the deserializer. - If no callable is provided then ```value``` will be passed through - unchanged. - - .. versionchanged:: 2.3.0 - Deprecated ``func`` parameter in favor of ``serialize``. - - .. versionchanged:: 3.0.0a1 - Removed ``func`` parameter. - """ - - _CHECK_ATTRIBUTE = False - - def __init__( - self, - serialize: ( - typing.Callable[[typing.Any], typing.Any] - | typing.Callable[[typing.Any, dict], typing.Any] - | None - ) = None, - deserialize: ( - typing.Callable[[typing.Any], typing.Any] - | typing.Callable[[typing.Any, dict], typing.Any] - | None - ) = None, - **kwargs, - ): - # Set dump_only and load_only based on arguments - kwargs["dump_only"] = bool(serialize) and not bool(deserialize) - kwargs["load_only"] = bool(deserialize) and not bool(serialize) - super().__init__(**kwargs) - self.serialize_func = serialize and utils.callable_or_raise(serialize) - self.deserialize_func = deserialize and utils.callable_or_raise(deserialize) - - def _serialize(self, value, attr, obj, **kwargs): - return self._call_or_raise(self.serialize_func, obj, attr) - - def _deserialize(self, value, attr, data, **kwargs): - if self.deserialize_func: - return self._call_or_raise(self.deserialize_func, value, attr) - return value - - def _call_or_raise(self, func, value, attr): - if len(utils.get_func_args(func)) > 1: - if self.parent.context is None: - msg = f"No context available for Function field {attr!r}" - raise ValidationError(msg) - return func(value, self.parent.context) - return func(value) - - -class Constant(Field): - """A field that (de)serializes to a preset constant. If you only want the - constant added for serialization or deserialization, you should use - ``dump_only=True`` or ``load_only=True`` respectively. - - :param constant: The constant to return for the field attribute. - """ - - _CHECK_ATTRIBUTE = False - - def __init__(self, constant: typing.Any, **kwargs): - super().__init__(**kwargs) - self.constant = constant - self.load_default = constant - self.dump_default = constant - - def _serialize(self, value, *args, **kwargs): - return self.constant - - def _deserialize(self, value, *args, **kwargs): - return self.constant - - -class Inferred(Field): - """A field that infers how to serialize, based on the value type. - - .. warning:: - - This class is treated as private API. - Users should not need to use this class directly. - """ - - def __init__(self): - super().__init__() - # We memoize the fields to avoid creating and binding new fields - # every time on serialization. - self._field_cache = {} - - def _serialize(self, value, attr, obj, **kwargs): - field_cls = self.root.TYPE_MAPPING.get(type(value)) - if field_cls is None: - field = super() - else: - field = self._field_cache.get(field_cls) - if field is None: - field = field_cls() - field._bind_to_schema(self.name, self.parent) - self._field_cache[field_cls] = field - return field._serialize(value, attr, obj, **kwargs) - - -# Aliases -URL = Url -Str = String -Bool = Boolean -Int = Integer diff --git a/myenv/lib/python3.12/site-packages/marshmallow/orderedset.py b/myenv/lib/python3.12/site-packages/marshmallow/orderedset.py deleted file mode 100644 index 95fbc60..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/orderedset.py +++ /dev/null @@ -1,89 +0,0 @@ -# OrderedSet -# Copyright (c) 2009 Raymond Hettinger -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, sublicense, and/or sell copies of the Software, -# and to permit persons to whom the Software is furnished to do so, -# subject to the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -from collections.abc import MutableSet - - -class OrderedSet(MutableSet): - def __init__(self, iterable=None): - self.end = end = [] - end += [None, end, end] # sentinel node for doubly linked list - self.map = {} # key --> [key, prev, next] - if iterable is not None: - self |= iterable - - def __len__(self): - return len(self.map) - - def __contains__(self, key): - return key in self.map - - def add(self, key): - if key not in self.map: - end = self.end - curr = end[1] - curr[2] = end[1] = self.map[key] = [key, curr, end] - - def discard(self, key): - if key in self.map: - key, prev, next = self.map.pop(key) # noqa: A001 - prev[2] = next - next[1] = prev - - def __iter__(self): - end = self.end - curr = end[2] - while curr is not end: - yield curr[0] - curr = curr[2] - - def __reversed__(self): - end = self.end - curr = end[1] - while curr is not end: - yield curr[0] - curr = curr[1] - - def pop(self, last=True): - if not self: - raise KeyError("set is empty") - key = self.end[1][0] if last else self.end[2][0] - self.discard(key) - return key - - def __repr__(self): - if not self: - return f"{self.__class__.__name__}()" - return f"{self.__class__.__name__}({list(self)!r})" - - def __eq__(self, other): - if isinstance(other, OrderedSet): - return len(self) == len(other) and list(self) == list(other) - return set(self) == set(other) - - -if __name__ == "__main__": - s = OrderedSet("abracadaba") - t = OrderedSet("simsalabim") - print(s | t) - print(s & t) - print(s - t) diff --git a/myenv/lib/python3.12/site-packages/marshmallow/py.typed b/myenv/lib/python3.12/site-packages/marshmallow/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/marshmallow/schema.py b/myenv/lib/python3.12/site-packages/marshmallow/schema.py deleted file mode 100644 index 61e06f4..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/schema.py +++ /dev/null @@ -1,1309 +0,0 @@ -"""The `Schema ` class, including its metaclass and options (`class Meta `).""" - -from __future__ import annotations - -import copy -import datetime as dt -import decimal -import functools -import inspect -import json -import operator -import typing -import uuid -import warnings -from abc import ABCMeta -from collections import OrderedDict, defaultdict -from collections.abc import Mapping -from itertools import zip_longest - -from marshmallow import base, class_registry, types -from marshmallow import fields as ma_fields -from marshmallow.decorators import ( - POST_DUMP, - POST_LOAD, - PRE_DUMP, - PRE_LOAD, - VALIDATES, - VALIDATES_SCHEMA, -) -from marshmallow.error_store import ErrorStore -from marshmallow.exceptions import SCHEMA, StringNotCollectionError, ValidationError -from marshmallow.orderedset import OrderedSet -from marshmallow.utils import ( - EXCLUDE, - INCLUDE, - RAISE, - get_value, - is_collection, - is_instance_or_subclass, - missing, - set_value, - validate_unknown_parameter_value, -) -from marshmallow.warnings import RemovedInMarshmallow4Warning - -if typing.TYPE_CHECKING: - from marshmallow.fields import Field - - -def _get_fields(attrs) -> list[tuple[str, Field]]: - """Get fields from a class - - :param attrs: Mapping of class attributes - """ - return [ - (field_name, field_value) - for field_name, field_value in attrs.items() - if is_instance_or_subclass(field_value, base.FieldABC) - ] - - -# This function allows Schemas to inherit from non-Schema classes and ensures -# inheritance according to the MRO -def _get_fields_by_mro(klass: SchemaMeta): - """Collect fields from a class, following its method resolution order. The - class itself is excluded from the search; only its parents are checked. Get - fields from ``_declared_fields`` if available, else use ``__dict__``. - - :param klass: Class whose fields to retrieve - """ - mro = inspect.getmro(klass) - # Combine fields from all parents - # functools.reduce(operator.iadd, list_of_lists) is faster than sum(list_of_lists, []) - # Loop over mro in reverse to maintain correct order of fields - return functools.reduce( - operator.iadd, - ( - _get_fields( - getattr(base, "_declared_fields", base.__dict__), - ) - for base in mro[:0:-1] - ), - [], - ) - - -class SchemaMeta(ABCMeta): - """Metaclass for the Schema class. Binds the declared fields to - a ``_declared_fields`` attribute, which is a dictionary mapping attribute - names to field objects. Also sets the ``opts`` class attribute, which is - the Schema class's `class Meta ` options. - """ - - Meta: type - opts: typing.Any - OPTIONS_CLASS: type - _declared_fields: dict[str, Field] - - def __new__( - mcs, # noqa: N804 - name: str, - bases: tuple[type, ...], - attrs: dict[str, typing.Any], - ) -> SchemaMeta: - meta = attrs.get("Meta") - ordered = getattr(meta, "ordered", False) - if not ordered: - # Inherit 'ordered' option - # Warning: We loop through bases instead of MRO because we don't - # yet have access to the class object - # (i.e. can't call super before we have fields) - for base_ in bases: - if hasattr(base_, "Meta") and hasattr(base_.Meta, "ordered"): - ordered = base_.Meta.ordered - break - else: - ordered = False - cls_fields = _get_fields(attrs) - # Remove fields from list of class attributes to avoid shadowing - # Schema attributes/methods in case of name conflict - for field_name, _ in cls_fields: - del attrs[field_name] - klass = super().__new__(mcs, name, bases, attrs) - inherited_fields = _get_fields_by_mro(klass) - - meta = klass.Meta - # Set klass.opts in __new__ rather than __init__ so that it is accessible in - # get_declared_fields - klass.opts = klass.OPTIONS_CLASS(meta, ordered=ordered) - # Add fields specified in the `include` class Meta option - cls_fields += list(klass.opts.include.items()) - - # Assign _declared_fields on class - klass._declared_fields = mcs.get_declared_fields( # noqa: SLF001 - klass=klass, - cls_fields=cls_fields, - inherited_fields=inherited_fields, - dict_cls=dict, - ) - return klass - - @classmethod - def get_declared_fields( - mcs, # noqa: N804 - klass: SchemaMeta, - cls_fields: list[tuple[str, Field]], - inherited_fields: list[tuple[str, Field]], - dict_cls: type[dict] = dict, - ) -> dict[str, Field]: - """Returns a dictionary of field_name => `Field` pairs declared on the class. - This is exposed mainly so that plugins can add additional fields, e.g. fields - computed from `class Meta ` options. - - :param klass: The class object. - :param cls_fields: The fields declared on the class, including those added - by the ``include`` `class Meta ` option. - :param inherited_fields: Inherited fields. - :param dict_cls: dict-like class to use for dict output Default to ``dict``. - """ - return dict_cls(inherited_fields + cls_fields) - - def __init__(cls, name, bases, attrs): - super().__init__(name, bases, attrs) - if name and cls.opts.register: - class_registry.register(name, cls) - cls._hooks = cls.resolve_hooks() - - def resolve_hooks(cls) -> dict[str, list[tuple[str, bool, dict]]]: - """Add in the decorated processors - - By doing this after constructing the class, we let standard inheritance - do all the hard work. - """ - mro = inspect.getmro(cls) - - hooks: dict[str, list[tuple[str, bool, dict]]] = defaultdict(list) - - for attr_name in dir(cls): - # Need to look up the actual descriptor, not whatever might be - # bound to the class. This needs to come from the __dict__ of the - # declaring class. - for parent in mro: - try: - attr = parent.__dict__[attr_name] - except KeyError: - continue - else: - break - else: - # In case we didn't find the attribute and didn't break above. - # We should never hit this - it's just here for completeness - # to exclude the possibility of attr being undefined. - continue - - try: - hook_config: dict[str, list[tuple[bool, dict]]] = ( - attr.__marshmallow_hook__ - ) - except AttributeError: - pass - else: - for tag, config in hook_config.items(): - # Use name here so we can get the bound method later, in - # case the processor was a descriptor or something. - hooks[tag].extend( - (attr_name, many, kwargs) for many, kwargs in config - ) - - return hooks - - -class SchemaOpts: - """Defines defaults for `marshmallow.Schema.Meta`.""" - - def __init__(self, meta: type, ordered: bool = False): # noqa: FBT001, FBT002 - self.fields = getattr(meta, "fields", ()) - if not isinstance(self.fields, (list, tuple)): - raise ValueError("`fields` option must be a list or tuple.") - self.additional = getattr(meta, "additional", ()) - if not isinstance(self.additional, (list, tuple)): - raise ValueError("`additional` option must be a list or tuple.") - if self.fields and self.additional: - raise ValueError( - "Cannot set both `fields` and `additional` options for the same Schema." - ) - self.exclude = getattr(meta, "exclude", ()) - if not isinstance(self.exclude, (list, tuple)): - raise ValueError("`exclude` must be a list or tuple.") - self.dateformat = getattr(meta, "dateformat", None) - self.datetimeformat = getattr(meta, "datetimeformat", None) - self.timeformat = getattr(meta, "timeformat", None) - if hasattr(meta, "json_module"): - warnings.warn( - "The json_module class Meta option is deprecated. Use render_module instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - render_module = getattr(meta, "json_module", json) - else: - render_module = json - self.render_module = getattr(meta, "render_module", render_module) - if hasattr(meta, "ordered"): - warnings.warn( - "The `ordered` `class Meta` option is deprecated. " - "Field order is already preserved by default. " - "Set `Schema.dict_class` to OrderedDict to maintain the previous behavior.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - self.ordered = getattr(meta, "ordered", ordered) - self.index_errors = getattr(meta, "index_errors", True) - self.include = getattr(meta, "include", {}) - self.load_only = getattr(meta, "load_only", ()) - self.dump_only = getattr(meta, "dump_only", ()) - self.unknown = validate_unknown_parameter_value(getattr(meta, "unknown", RAISE)) - self.register = getattr(meta, "register", True) - self.many = getattr(meta, "many", False) - - -class Schema(base.SchemaABC, metaclass=SchemaMeta): - """Base schema class with which to define schemas. - - Example usage: - - .. code-block:: python - - import datetime as dt - from dataclasses import dataclass - - from marshmallow import Schema, fields - - - @dataclass - class Album: - title: str - release_date: dt.date - - - class AlbumSchema(Schema): - title = fields.Str() - release_date = fields.Date() - - - album = Album("Beggars Banquet", dt.date(1968, 12, 6)) - schema = AlbumSchema() - data = schema.dump(album) - data # {'release_date': '1968-12-06', 'title': 'Beggars Banquet'} - - :param only: Whitelist of the declared fields to select when - instantiating the Schema. If None, all fields are used. Nested fields - can be represented with dot delimiters. - :param exclude: Blacklist of the declared fields to exclude - when instantiating the Schema. If a field appears in both `only` and - `exclude`, it is not used. Nested fields can be represented with dot - delimiters. - :param many: Should be set to `True` if ``obj`` is a collection - so that the object will be serialized to a list. - :param context: Optional context passed to :class:`fields.Method` and - :class:`fields.Function` fields. - :param load_only: Fields to skip during serialization (write-only fields) - :param dump_only: Fields to skip during deserialization (read-only fields) - :param partial: Whether to ignore missing fields and not require - any fields declared. Propagates down to ``Nested`` fields as well. If - its value is an iterable, only missing fields listed in that iterable - will be ignored. Use dot delimiters to specify nested fields. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - - .. versionchanged:: 3.0.0 - `prefix` parameter removed. - """ - - TYPE_MAPPING: dict[type, type[Field]] = { - str: ma_fields.String, - bytes: ma_fields.String, - dt.datetime: ma_fields.DateTime, - float: ma_fields.Float, - bool: ma_fields.Boolean, - tuple: ma_fields.Raw, - list: ma_fields.Raw, - set: ma_fields.Raw, - int: ma_fields.Integer, - uuid.UUID: ma_fields.UUID, - dt.time: ma_fields.Time, - dt.date: ma_fields.Date, - dt.timedelta: ma_fields.TimeDelta, - decimal.Decimal: ma_fields.Decimal, - } - #: Overrides for default schema-level error messages - error_messages: dict[str, str] = {} - - _default_error_messages: dict[str, str] = { - "type": "Invalid input type.", - "unknown": "Unknown field.", - } - - OPTIONS_CLASS: type = SchemaOpts - - set_class = OrderedSet - - # These get set by SchemaMeta - opts: typing.Any - _declared_fields: dict[str, Field] = {} - _hooks: dict[str, list[tuple[str, bool, dict]]] = {} - - class Meta: - """Options object for a Schema. - - Example usage: :: - - from marshmallow import Schema - - - class MySchema(Schema): - class Meta: - fields = ("id", "email", "date_created") - exclude = ("password", "secret_attribute") - - .. admonition:: A note on type checking - - Type checkers will only check the attributes of the `Meta ` - class if you explicitly subclass `marshmallow.Schema.Meta`. - - .. code-block:: python - - from marshmallow import Schema - - - class MySchema(Schema): - # Not checked by type checkers - class Meta: - additional = True - - - class MySchema2(Schema): - # Type checkers will check attributes - class Meta(Schema.Meta): - additional = True # Incompatible types in assignment - - .. versionremoved:: 3.0.0b7 Remove ``strict``. - .. versionadded:: 3.0.0b12 Add `unknown`. - .. versionchanged:: 3.0.0b17 Rename ``dateformat`` to `datetimeformat`. - .. versionadded:: 3.9.0 Add `timeformat`. - .. versionchanged:: 3.26.0 Deprecate `ordered`. Field order is preserved by default. - """ - - fields: typing.ClassVar[tuple[str, ...] | list[str]] - """Fields to include in the (de)serialized result""" - additional: typing.ClassVar[tuple[str, ...] | list[str]] - """Fields to include in addition to the explicitly declared fields. - `additional ` and `fields ` - are mutually-exclusive options. - """ - include: typing.ClassVar[dict[str, Field]] - """Dictionary of additional fields to include in the schema. It is - usually better to define fields as class variables, but you may need to - use this option, e.g., if your fields are Python keywords. - """ - exclude: typing.ClassVar[tuple[str, ...] | list[str]] - """Fields to exclude in the serialized result. - Nested fields can be represented with dot delimiters. - """ - many: typing.ClassVar[bool] - """Whether data should be (de)serialized as a collection by default.""" - dateformat: typing.ClassVar[str] - """Default format for `Date ` fields.""" - datetimeformat: typing.ClassVar[str] - """Default format for `DateTime ` fields.""" - timeformat: typing.ClassVar[str] - """Default format for `Time ` fields.""" - - # FIXME: Use a more constrained type here. - # ClassVar[RenderModule] doesn't work. - render_module: typing.Any - """ Module to use for `loads ` and `dumps `. - Defaults to `json` from the standard library. - """ - ordered: typing.ClassVar[bool] - """If `True`, `Schema.dump ` is a `collections.OrderedDict`.""" - index_errors: typing.ClassVar[bool] - """If `True`, errors dictionaries will include the index of invalid items in a collection.""" - load_only: typing.ClassVar[tuple[str, ...] | list[str]] - """Fields to exclude from serialized results""" - dump_only: typing.ClassVar[tuple[str, ...] | list[str]] - """Fields to exclude from serialized results""" - unknown: typing.ClassVar[str] - """Whether to exclude, include, or raise an error for unknown fields in the data. - Use `EXCLUDE`, `INCLUDE` or `RAISE`. - """ - register: typing.ClassVar[bool] - """Whether to register the `Schema ` with marshmallow's internal - class registry. Must be `True` if you intend to refer to this `Schema ` - by class name in `Nested` fields. Only set this to `False` when memory - usage is critical. Defaults to `True`. - """ - - def __init__( - self, - *, - only: types.StrSequenceOrSet | None = None, - exclude: types.StrSequenceOrSet = (), - many: bool | None = None, - context: dict | None = None, - load_only: types.StrSequenceOrSet = (), - dump_only: types.StrSequenceOrSet = (), - partial: bool | types.StrSequenceOrSet | None = None, - unknown: str | None = None, - ): - # Raise error if only or exclude is passed as string, not list of strings - if only is not None and not is_collection(only): - raise StringNotCollectionError('"only" should be a list of strings') - if not is_collection(exclude): - raise StringNotCollectionError('"exclude" should be a list of strings') - # copy declared fields from metaclass - self.declared_fields = copy.deepcopy(self._declared_fields) - self.many = self.opts.many if many is None else many - self.only = only - self.exclude: set[typing.Any] | typing.MutableSet[typing.Any] = set( - self.opts.exclude - ) | set(exclude) - self.ordered = self.opts.ordered - self.load_only = set(load_only) or set(self.opts.load_only) - self.dump_only = set(dump_only) or set(self.opts.dump_only) - self.partial = partial - self.unknown = ( - self.opts.unknown - if unknown is None - else validate_unknown_parameter_value(unknown) - ) - if context: - warnings.warn( - "The `context` parameter is deprecated and will be removed in marshmallow 4.0. " - "Use `contextvars.ContextVar` to pass context instead.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - self.context = context or {} - self._normalize_nested_options() - #: Dictionary mapping field_names -> :class:`Field` objects - self.fields: dict[str, Field] = {} - self.load_fields: dict[str, Field] = {} - self.dump_fields: dict[str, Field] = {} - self._init_fields() - messages = {} - messages.update(self._default_error_messages) - for cls in reversed(self.__class__.__mro__): - messages.update(getattr(cls, "error_messages", {})) - messages.update(self.error_messages or {}) - self.error_messages = messages - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}(many={self.many})>" - - @property - def dict_class(self) -> type[dict]: - """`dict` type to return when serializing.""" - if self.ordered: - return OrderedDict - return dict - - @classmethod - def from_dict( - cls, - fields: dict[str, Field], - *, - name: str = "GeneratedSchema", - ) -> type[Schema]: - """Generate a `Schema ` class given a dictionary of fields. - - .. code-block:: python - - from marshmallow import Schema, fields - - PersonSchema = Schema.from_dict({"name": fields.Str()}) - print(PersonSchema().load({"name": "David"})) # => {'name': 'David'} - - Generated schemas are not added to the class registry and therefore cannot - be referred to by name in `Nested` fields. - - - :param fields: Dictionary mapping field names to field instances. - :param name: Optional name for the class, which will appear in - the ``repr`` for the class. - - .. versionadded:: 3.0.0 - """ - Meta = type( - "GeneratedMeta", (getattr(cls, "Meta", object),), {"register": False} - ) - return type(name, (cls,), {**fields.copy(), "Meta": Meta}) - - ##### Override-able methods ##### - - def handle_error( - self, error: ValidationError, data: typing.Any, *, many: bool, **kwargs - ): - """Custom error handler function for the schema. - - :param error: The `ValidationError` raised during (de)serialization. - :param data: The original input data. - :param many: Value of ``many`` on dump or load. - :param partial: Value of ``partial`` on load. - - .. versionchanged:: 3.0.0rc9 - Receives `many` and `partial` (on deserialization) as keyword arguments. - """ - - def get_attribute(self, obj: typing.Any, attr: str, default: typing.Any): - """Defines how to pull values from an object to serialize. - - .. versionchanged:: 3.0.0a1 - Changed position of ``obj`` and ``attr``. - """ - return get_value(obj, attr, default) - - ##### Serialization/Deserialization API ##### - - @staticmethod - def _call_and_store(getter_func, data, *, field_name, error_store, index=None): - """Call ``getter_func`` with ``data`` as its argument, and store any `ValidationErrors`. - - :param getter_func: Function for getting the serialized/deserialized - value from ``data``. - :param data: The data passed to ``getter_func``. - :param field_name: Field name. - :param index: Index of the item being validated, if validating a collection, - otherwise `None`. - """ - try: - value = getter_func(data) - except ValidationError as error: - error_store.store_error(error.messages, field_name, index=index) - # When a Nested field fails validation, the marshalled data is stored - # on the ValidationError's valid_data attribute - return error.valid_data or missing - return value - - def _serialize(self, obj: typing.Any, *, many: bool = False): - """Serialize ``obj``. - - :param obj: The object(s) to serialize. - :param many: `True` if ``data`` should be serialized as a collection. - :return: A dictionary of the serialized data - """ - if many and obj is not None: - return [self._serialize(d, many=False) for d in obj] - ret = self.dict_class() - for attr_name, field_obj in self.dump_fields.items(): - value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute) - if value is missing: - continue - key = field_obj.data_key if field_obj.data_key is not None else attr_name - ret[key] = value - return ret - - def dump(self, obj: typing.Any, *, many: bool | None = None): - """Serialize an object to native Python data types according to this - Schema's fields. - - :param obj: The object to serialize. - :param many: Whether to serialize `obj` as a collection. If `None`, the value - for `self.many` is used. - :return: Serialized data - - .. versionadded:: 1.0.0 - .. versionchanged:: 3.0.0b7 - This method returns the serialized data rather than a ``(data, errors)`` duple. - A :exc:`ValidationError ` is raised - if ``obj`` is invalid. - .. versionchanged:: 3.0.0rc9 - Validation no longer occurs upon serialization. - """ - many = self.many if many is None else bool(many) - if self._hooks[PRE_DUMP]: - processed_obj = self._invoke_dump_processors( - PRE_DUMP, obj, many=many, original_data=obj - ) - else: - processed_obj = obj - - result = self._serialize(processed_obj, many=many) - - if self._hooks[POST_DUMP]: - result = self._invoke_dump_processors( - POST_DUMP, result, many=many, original_data=obj - ) - - return result - - def dumps(self, obj: typing.Any, *args, many: bool | None = None, **kwargs): - """Same as :meth:`dump`, except return a JSON-encoded string. - - :param obj: The object to serialize. - :param many: Whether to serialize `obj` as a collection. If `None`, the value - for `self.many` is used. - :return: A ``json`` string - - .. versionadded:: 1.0.0 - .. versionchanged:: 3.0.0b7 - This method returns the serialized data rather than a ``(data, errors)`` duple. - A :exc:`ValidationError ` is raised - if ``obj`` is invalid. - """ - serialized = self.dump(obj, many=many) - return self.opts.render_module.dumps(serialized, *args, **kwargs) - - def _deserialize( - self, - data: ( - typing.Mapping[str, typing.Any] - | typing.Iterable[typing.Mapping[str, typing.Any]] - ), - *, - error_store: ErrorStore, - many: bool = False, - partial=None, - unknown=RAISE, - index=None, - ) -> typing.Any | list[typing.Any]: - """Deserialize ``data``. - - :param data: The data to deserialize. - :param error_store: Structure to store errors. - :param many: `True` if ``data`` should be deserialized as a collection. - :param partial: Whether to ignore missing fields and not require - any fields declared. Propagates down to ``Nested`` fields as well. If - its value is an iterable, only missing fields listed in that iterable - will be ignored. Use dot delimiters to specify nested fields. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - :param index: Index of the item being serialized (for storing errors) if - serializing a collection, otherwise `None`. - :return: The deserialized data as `dict_class` instance or list of `dict_class` - instances if `many` is `True`. - """ - index_errors = self.opts.index_errors - index = index if index_errors else None - if many: - if not is_collection(data): - error_store.store_error([self.error_messages["type"]], index=index) - ret_l = [] - else: - ret_l = [ - self._deserialize( - typing.cast(dict, d), - error_store=error_store, - many=False, - partial=partial, - unknown=unknown, - index=idx, - ) - for idx, d in enumerate(data) - ] - return ret_l - ret_d = self.dict_class() - # Check data is a dict - if not isinstance(data, Mapping): - error_store.store_error([self.error_messages["type"]], index=index) - else: - partial_is_collection = is_collection(partial) - for attr_name, field_obj in self.load_fields.items(): - field_name = ( - field_obj.data_key if field_obj.data_key is not None else attr_name - ) - raw_value = data.get(field_name, missing) - if raw_value is missing: - # Ignore missing field if we're allowed to. - if partial is True or ( - partial_is_collection and attr_name in partial - ): - continue - d_kwargs = {} - # Allow partial loading of nested schemas. - if partial_is_collection: - prefix = field_name + "." - len_prefix = len(prefix) - sub_partial = [ - f[len_prefix:] for f in partial if f.startswith(prefix) - ] - d_kwargs["partial"] = sub_partial - elif partial is not None: - d_kwargs["partial"] = partial - - def getter( - val, field_obj=field_obj, field_name=field_name, d_kwargs=d_kwargs - ): - return field_obj.deserialize( - val, - field_name, - data, - **d_kwargs, - ) - - value = self._call_and_store( - getter_func=getter, - data=raw_value, - field_name=field_name, - error_store=error_store, - index=index, - ) - if value is not missing: - key = field_obj.attribute or attr_name - set_value(ret_d, key, value) - if unknown != EXCLUDE: - fields = { - field_obj.data_key if field_obj.data_key is not None else field_name - for field_name, field_obj in self.load_fields.items() - } - for key in set(data) - fields: - value = data[key] - if unknown == INCLUDE: - ret_d[key] = value - elif unknown == RAISE: - error_store.store_error( - [self.error_messages["unknown"]], - key, - (index if index_errors else None), - ) - return ret_d - - def load( - self, - data: ( - typing.Mapping[str, typing.Any] - | typing.Iterable[typing.Mapping[str, typing.Any]] - ), - *, - many: bool | None = None, - partial: bool | types.StrSequenceOrSet | None = None, - unknown: str | None = None, - ): - """Deserialize a data structure to an object defined by this Schema's fields. - - :param data: The data to deserialize. - :param many: Whether to deserialize `data` as a collection. If `None`, the - value for `self.many` is used. - :param partial: Whether to ignore missing fields and not require - any fields declared. Propagates down to ``Nested`` fields as well. If - its value is an iterable, only missing fields listed in that iterable - will be ignored. Use dot delimiters to specify nested fields. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - If `None`, the value for `self.unknown` is used. - :return: Deserialized data - - .. versionadded:: 1.0.0 - .. versionchanged:: 3.0.0b7 - This method returns the deserialized data rather than a ``(data, errors)`` duple. - A :exc:`ValidationError ` is raised - if invalid data are passed. - """ - return self._do_load( - data, many=many, partial=partial, unknown=unknown, postprocess=True - ) - - def loads( - self, - json_data: str | bytes | bytearray, - *, - many: bool | None = None, - partial: bool | types.StrSequenceOrSet | None = None, - unknown: str | None = None, - **kwargs, - ): - """Same as :meth:`load`, except it uses `marshmallow.Schema.Meta.render_module` to deserialize - the passed string before passing data to :meth:`load`. - - :param json_data: A string of the data to deserialize. - :param many: Whether to deserialize `obj` as a collection. If `None`, the - value for `self.many` is used. - :param partial: Whether to ignore missing fields and not require - any fields declared. Propagates down to ``Nested`` fields as well. If - its value is an iterable, only missing fields listed in that iterable - will be ignored. Use dot delimiters to specify nested fields. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - If `None`, the value for `self.unknown` is used. - :return: Deserialized data - - .. versionadded:: 1.0.0 - .. versionchanged:: 3.0.0b7 - This method returns the deserialized data rather than a ``(data, errors)`` duple. - A :exc:`ValidationError ` is raised - if invalid data are passed. - """ - data = self.opts.render_module.loads(json_data, **kwargs) - return self.load(data, many=many, partial=partial, unknown=unknown) - - def _run_validator( - self, - validator_func: types.SchemaValidator, - output, - *, - original_data, - error_store: ErrorStore, - many: bool, - partial: bool | types.StrSequenceOrSet | None, - pass_original: bool, - index: int | None = None, - ): - try: - if pass_original: # Pass original, raw data (before unmarshalling) - validator_func(output, original_data, partial=partial, many=many) - else: - validator_func(output, partial=partial, many=many) - except ValidationError as err: - field_name = err.field_name - data_key: str - if field_name == SCHEMA: - data_key = SCHEMA - else: - field_obj: Field | None = None - try: - field_obj = self.fields[field_name] - except KeyError: - if field_name in self.declared_fields: - field_obj = self.declared_fields[field_name] - if field_obj: - data_key = ( - field_obj.data_key - if field_obj.data_key is not None - else field_name - ) - else: - data_key = field_name - error_store.store_error(err.messages, data_key, index=index) - - def validate( - self, - data: ( - typing.Mapping[str, typing.Any] - | typing.Iterable[typing.Mapping[str, typing.Any]] - ), - *, - many: bool | None = None, - partial: bool | types.StrSequenceOrSet | None = None, - ) -> dict[str, list[str]]: - """Validate `data` against the schema, returning a dictionary of - validation errors. - - :param data: The data to validate. - :param many: Whether to validate `data` as a collection. If `None`, the - value for `self.many` is used. - :param partial: Whether to ignore missing fields and not require - any fields declared. Propagates down to ``Nested`` fields as well. If - its value is an iterable, only missing fields listed in that iterable - will be ignored. Use dot delimiters to specify nested fields. - :return: A dictionary of validation errors. - - .. versionadded:: 1.1.0 - """ - try: - self._do_load(data, many=many, partial=partial, postprocess=False) - except ValidationError as exc: - return typing.cast(dict[str, list[str]], exc.messages) - return {} - - ##### Private Helpers ##### - - def _do_load( - self, - data: ( - typing.Mapping[str, typing.Any] - | typing.Iterable[typing.Mapping[str, typing.Any]] - ), - *, - many: bool | None = None, - partial: bool | types.StrSequenceOrSet | None = None, - unknown: str | None = None, - postprocess: bool = True, - ): - """Deserialize `data`, returning the deserialized result. - This method is private API. - - :param data: The data to deserialize. - :param many: Whether to deserialize `data` as a collection. If `None`, the - value for `self.many` is used. - :param partial: Whether to validate required fields. If its - value is an iterable, only fields listed in that iterable will be - ignored will be allowed missing. If `True`, all fields will be allowed missing. - If `None`, the value for `self.partial` is used. - :param unknown: Whether to exclude, include, or raise an error for unknown - fields in the data. Use `EXCLUDE`, `INCLUDE` or `RAISE`. - If `None`, the value for `self.unknown` is used. - :param postprocess: Whether to run post_load methods.. - :return: Deserialized data - """ - error_store = ErrorStore() - errors: dict[str, list[str]] = {} - many = self.many if many is None else bool(many) - unknown = ( - self.unknown - if unknown is None - else validate_unknown_parameter_value(unknown) - ) - if partial is None: - partial = self.partial - # Run preprocessors - if self._hooks[PRE_LOAD]: - try: - processed_data = self._invoke_load_processors( - PRE_LOAD, data, many=many, original_data=data, partial=partial - ) - except ValidationError as err: - errors = err.normalized_messages() - result: list | dict | None = None - else: - processed_data = data - if not errors: - # Deserialize data - result = self._deserialize( - processed_data, - error_store=error_store, - many=many, - partial=partial, - unknown=unknown, - ) - # Run field-level validation - self._invoke_field_validators( - error_store=error_store, data=result, many=many - ) - # Run schema-level validation - if self._hooks[VALIDATES_SCHEMA]: - field_errors = bool(error_store.errors) - self._invoke_schema_validators( - error_store=error_store, - pass_many=True, - data=result, - original_data=data, - many=many, - partial=partial, - field_errors=field_errors, - ) - self._invoke_schema_validators( - error_store=error_store, - pass_many=False, - data=result, - original_data=data, - many=many, - partial=partial, - field_errors=field_errors, - ) - errors = error_store.errors - # Run post processors - if not errors and postprocess and self._hooks[POST_LOAD]: - try: - result = self._invoke_load_processors( - POST_LOAD, - result, - many=many, - original_data=data, - partial=partial, - ) - except ValidationError as err: - errors = err.normalized_messages() - if errors: - exc = ValidationError(errors, data=data, valid_data=result) - self.handle_error(exc, data, many=many, partial=partial) - raise exc - - return result - - def _normalize_nested_options(self) -> None: - """Apply then flatten nested schema options. - This method is private API. - """ - if self.only is not None: - # Apply the only option to nested fields. - self.__apply_nested_option("only", self.only, "intersection") - # Remove the child field names from the only option. - self.only = self.set_class([field.split(".", 1)[0] for field in self.only]) - if self.exclude: - # Apply the exclude option to nested fields. - self.__apply_nested_option("exclude", self.exclude, "union") - # Remove the parent field names from the exclude option. - self.exclude = self.set_class( - [field for field in self.exclude if "." not in field] - ) - - def __apply_nested_option(self, option_name, field_names, set_operation) -> None: - """Apply nested options to nested fields""" - # Split nested field names on the first dot. - nested_fields = [name.split(".", 1) for name in field_names if "." in name] - # Partition the nested field names by parent field. - nested_options = defaultdict(list) # type: defaultdict - for parent, nested_names in nested_fields: - nested_options[parent].append(nested_names) - # Apply the nested field options. - for key, options in iter(nested_options.items()): - new_options = self.set_class(options) - original_options = getattr(self.declared_fields[key], option_name, ()) - if original_options: - if set_operation == "union": - new_options |= self.set_class(original_options) - if set_operation == "intersection": - new_options &= self.set_class(original_options) - setattr(self.declared_fields[key], option_name, new_options) - - def _init_fields(self) -> None: - """Update self.fields, self.load_fields, and self.dump_fields based on schema options. - This method is private API. - """ - if self.opts.fields: - available_field_names = self.set_class(self.opts.fields) - else: - available_field_names = self.set_class(self.declared_fields.keys()) - if self.opts.additional: - available_field_names |= self.set_class(self.opts.additional) - - invalid_fields = self.set_class() - - if self.only is not None: - # Return only fields specified in only option - field_names: typing.AbstractSet[typing.Any] = self.set_class(self.only) - - invalid_fields |= field_names - available_field_names - else: - field_names = available_field_names - - # If "exclude" option or param is specified, remove those fields. - if self.exclude: - # Note that this isn't available_field_names, since we want to - # apply "only" for the actual calculation. - field_names = field_names - self.exclude - invalid_fields |= self.exclude - available_field_names - - if invalid_fields: - message = f"Invalid fields for {self}: {invalid_fields}." - raise ValueError(message) - - fields_dict = self.dict_class() - for field_name in field_names: - field_obj = self.declared_fields.get(field_name, ma_fields.Inferred()) - self._bind_field(field_name, field_obj) - fields_dict[field_name] = field_obj - - load_fields, dump_fields = self.dict_class(), self.dict_class() - for field_name, field_obj in fields_dict.items(): - if not field_obj.dump_only: - load_fields[field_name] = field_obj - if not field_obj.load_only: - dump_fields[field_name] = field_obj - - dump_data_keys = [ - field_obj.data_key if field_obj.data_key is not None else name - for name, field_obj in dump_fields.items() - ] - if len(dump_data_keys) != len(set(dump_data_keys)): - data_keys_duplicates = { - x for x in dump_data_keys if dump_data_keys.count(x) > 1 - } - raise ValueError( - "The data_key argument for one or more fields collides " - "with another field's name or data_key argument. " - "Check the following field names and " - f"data_key arguments: {list(data_keys_duplicates)}" - ) - load_attributes = [obj.attribute or name for name, obj in load_fields.items()] - if len(load_attributes) != len(set(load_attributes)): - attributes_duplicates = { - x for x in load_attributes if load_attributes.count(x) > 1 - } - raise ValueError( - "The attribute argument for one or more fields collides " - "with another field's name or attribute argument. " - "Check the following field names and " - f"attribute arguments: {list(attributes_duplicates)}" - ) - - self.fields = fields_dict - self.dump_fields = dump_fields - self.load_fields = load_fields - - def on_bind_field(self, field_name: str, field_obj: Field) -> None: - """Hook to modify a field when it is bound to the `Schema `. - - No-op by default. - """ - return - - def _bind_field(self, field_name: str, field_obj: Field) -> None: - """Bind field to the schema, setting any necessary attributes on the - field (e.g. parent and name). - - Also set field load_only and dump_only values if field_name was - specified in `class Meta `. - """ - if field_name in self.load_only: - field_obj.load_only = True - if field_name in self.dump_only: - field_obj.dump_only = True - try: - field_obj._bind_to_schema(field_name, self) # noqa: SLF001 - except TypeError as error: - # Field declared as a class, not an instance. Ignore type checking because - # we handle unsupported arg types, i.e. this is dead code from - # the type checker's perspective. - if isinstance(field_obj, type) and issubclass(field_obj, base.FieldABC): - msg = ( - f'Field for "{field_name}" must be declared as a ' - "Field instance, not a class. " - f'Did you mean "fields.{field_obj.__name__}()"?' - ) - raise TypeError(msg) from error - raise - self.on_bind_field(field_name, field_obj) - - def _invoke_dump_processors( - self, tag: str, data, *, many: bool, original_data=None - ): - # The pass_many post-dump processors may do things like add an envelope, so - # invoke those after invoking the non-pass_many processors which will expect - # to get a list of items. - data = self._invoke_processors( - tag, pass_many=False, data=data, many=many, original_data=original_data - ) - return self._invoke_processors( - tag, pass_many=True, data=data, many=many, original_data=original_data - ) - - def _invoke_load_processors( - self, - tag: str, - data, - *, - many: bool, - original_data, - partial: bool | types.StrSequenceOrSet | None, - ): - # This has to invert the order of the dump processors, so run the pass_many - # processors first. - data = self._invoke_processors( - tag, - pass_many=True, - data=data, - many=many, - original_data=original_data, - partial=partial, - ) - return self._invoke_processors( - tag, - pass_many=False, - data=data, - many=many, - original_data=original_data, - partial=partial, - ) - - def _invoke_field_validators(self, *, error_store: ErrorStore, data, many: bool): - for attr_name, _, validator_kwargs in self._hooks[VALIDATES]: - validator = getattr(self, attr_name) - field_name = validator_kwargs["field_name"] - - try: - field_obj = self.fields[field_name] - except KeyError as error: - if field_name in self.declared_fields: - continue - raise ValueError(f'"{field_name}" field does not exist.') from error - - data_key = ( - field_obj.data_key if field_obj.data_key is not None else field_name - ) - if many: - for idx, item in enumerate(data): - try: - value = item[field_obj.attribute or field_name] - except KeyError: - pass - else: - validated_value = self._call_and_store( - getter_func=validator, - data=value, - field_name=data_key, - error_store=error_store, - index=(idx if self.opts.index_errors else None), - ) - if validated_value is missing: - item.pop(field_name, None) - else: - try: - value = data[field_obj.attribute or field_name] - except KeyError: - pass - else: - validated_value = self._call_and_store( - getter_func=validator, - data=value, - field_name=data_key, - error_store=error_store, - ) - if validated_value is missing: - data.pop(field_name, None) - - def _invoke_schema_validators( - self, - *, - error_store: ErrorStore, - pass_many: bool, - data, - original_data, - many: bool, - partial: bool | types.StrSequenceOrSet | None, - field_errors: bool = False, - ): - for attr_name, hook_many, validator_kwargs in self._hooks[VALIDATES_SCHEMA]: - if hook_many != pass_many: - continue - validator = getattr(self, attr_name) - if field_errors and validator_kwargs["skip_on_field_errors"]: - continue - pass_original = validator_kwargs.get("pass_original", False) - - if many and not pass_many: - for idx, (item, orig) in enumerate(zip(data, original_data)): - self._run_validator( - validator, - item, - original_data=orig, - error_store=error_store, - many=many, - partial=partial, - index=idx, - pass_original=pass_original, - ) - else: - self._run_validator( - validator, - data, - original_data=original_data, - error_store=error_store, - many=many, - pass_original=pass_original, - partial=partial, - ) - - def _invoke_processors( - self, - tag: str, - *, - pass_many: bool, - data, - many: bool, - original_data=None, - **kwargs, - ): - for attr_name, hook_many, processor_kwargs in self._hooks[tag]: - if hook_many != pass_many: - continue - # This will be a bound method. - processor = getattr(self, attr_name) - pass_original = processor_kwargs.get("pass_original", False) - - if many and not pass_many: - if pass_original: - data = [ - processor(item, original, many=many, **kwargs) - for item, original in zip_longest(data, original_data) - ] - else: - data = [processor(item, many=many, **kwargs) for item in data] - elif pass_original: - data = processor(data, original_data, many=many, **kwargs) - else: - data = processor(data, many=many, **kwargs) - return data - - -BaseSchema = Schema # for backwards compatibility diff --git a/myenv/lib/python3.12/site-packages/marshmallow/types.py b/myenv/lib/python3.12/site-packages/marshmallow/types.py deleted file mode 100644 index 599f6b4..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/types.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Type aliases. - -.. warning:: - - This module is provisional. Types may be modified, added, and removed between minor releases. -""" - -from __future__ import annotations - -import typing - -#: A type that can be either a sequence of strings or a set of strings -StrSequenceOrSet = typing.Union[typing.Sequence[str], typing.AbstractSet[str]] - -#: Type for validator functions -Validator = typing.Callable[[typing.Any], typing.Any] - - -class SchemaValidator(typing.Protocol): - def __call__( - self, - output: typing.Any, - original_data: typing.Any = ..., - *, - partial: bool | StrSequenceOrSet | None = None, - many: bool = False, - ) -> None: ... - - -class RenderModule(typing.Protocol): - def dumps( - self, obj: typing.Any, *args: typing.Any, **kwargs: typing.Any - ) -> str: ... - - def loads( - self, - json_data: str | bytes | bytearray, - *args: typing.Any, - **kwargs: typing.Any, - ) -> typing.Any: ... diff --git a/myenv/lib/python3.12/site-packages/marshmallow/utils.py b/myenv/lib/python3.12/site-packages/marshmallow/utils.py deleted file mode 100644 index df3cd29..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/utils.py +++ /dev/null @@ -1,380 +0,0 @@ -"""Utility methods for marshmallow.""" - -# ruff: noqa: T201, T203 -from __future__ import annotations - -import collections -import datetime as dt -import functools -import inspect -import json -import re -import typing -import warnings -from collections.abc import Mapping -from email.utils import format_datetime, parsedate_to_datetime -from pprint import pprint as py_pprint - -from marshmallow.base import FieldABC -from marshmallow.exceptions import FieldInstanceResolutionError -from marshmallow.warnings import RemovedInMarshmallow4Warning - -if typing.TYPE_CHECKING: - from marshmallow.fields import Field - - -EXCLUDE = "exclude" -INCLUDE = "include" -RAISE = "raise" -_UNKNOWN_VALUES = {EXCLUDE, INCLUDE, RAISE} - - -class _Missing: - def __bool__(self): - return False - - def __copy__(self): - return self - - def __deepcopy__(self, _): - return self - - def __repr__(self): - return "" - - -# Singleton value that indicates that a field's value is missing from input -# dict passed to `Schema.load `. If the field's value is not required, -# it's ``default`` value is used. -missing = _Missing() - - -def is_generator(obj) -> bool: - """Return True if ``obj`` is a generator""" - return inspect.isgeneratorfunction(obj) or inspect.isgenerator(obj) - - -def is_iterable_but_not_string(obj) -> bool: - """Return True if ``obj`` is an iterable object that isn't a string.""" - return (hasattr(obj, "__iter__") and not hasattr(obj, "strip")) or is_generator(obj) - - -def is_collection(obj) -> bool: - """Return True if ``obj`` is a collection type, e.g list, tuple, queryset.""" - return is_iterable_but_not_string(obj) and not isinstance(obj, Mapping) - - -def is_instance_or_subclass(val, class_) -> bool: - """Return True if ``val`` is either a subclass or instance of ``class_``.""" - try: - return issubclass(val, class_) - except TypeError: - return isinstance(val, class_) - - -def is_keyed_tuple(obj) -> bool: - """Return True if ``obj`` has keyed tuple behavior, such as - namedtuples or SQLAlchemy's KeyedTuples. - """ - return isinstance(obj, tuple) and hasattr(obj, "_fields") - - -def pprint(obj, *args, **kwargs) -> None: - """Pretty-printing function that can pretty-print OrderedDicts - like regular dictionaries. Useful for printing the output of - :meth:`marshmallow.Schema.dump`. - - .. deprecated:: 3.7.0 - marshmallow.pprint will be removed in marshmallow 4. - """ - warnings.warn( - "marshmallow's pprint function is deprecated and will be removed in marshmallow 4.", - RemovedInMarshmallow4Warning, - stacklevel=2, - ) - if isinstance(obj, collections.OrderedDict): - print(json.dumps(obj, *args, **kwargs)) - else: - py_pprint(obj, *args, **kwargs) - - -# https://stackoverflow.com/a/27596917 -def is_aware(datetime: dt.datetime) -> bool: - return ( - datetime.tzinfo is not None and datetime.tzinfo.utcoffset(datetime) is not None - ) - - -def from_rfc(datestring: str) -> dt.datetime: - """Parse a RFC822-formatted datetime string and return a datetime object. - - https://stackoverflow.com/questions/885015/how-to-parse-a-rfc-2822-date-time-into-a-python-datetime # noqa: B950 - """ - return parsedate_to_datetime(datestring) - - -def rfcformat(datetime: dt.datetime) -> str: - """Return the RFC822-formatted representation of a datetime object. - - :param datetime: The datetime. - """ - return format_datetime(datetime) - - -# Hat tip to Django for ISO8601 deserialization functions - -_iso8601_datetime_re = re.compile( - r"(?P\d{4})-(?P\d{1,2})-(?P\d{1,2})" - r"[T ](?P\d{1,2}):(?P\d{1,2})" - r"(?::(?P\d{1,2})(?:\.(?P\d{1,6})\d{0,6})?)?" - r"(?PZ|[+-]\d{2}(?::?\d{2})?)?$" -) - -_iso8601_date_re = re.compile(r"(?P\d{4})-(?P\d{1,2})-(?P\d{1,2})$") - -_iso8601_time_re = re.compile( - r"(?P\d{1,2}):(?P\d{1,2})" - r"(?::(?P\d{1,2})(?:\.(?P\d{1,6})\d{0,6})?)?" -) - - -def get_fixed_timezone(offset: float | dt.timedelta) -> dt.timezone: - """Return a tzinfo instance with a fixed offset from UTC.""" - if isinstance(offset, dt.timedelta): - offset = offset.total_seconds() // 60 - sign = "-" if offset < 0 else "+" - hhmm = "{:02d}{:02d}".format(*divmod(abs(offset), 60)) - name = sign + hhmm - return dt.timezone(dt.timedelta(minutes=offset), name) - - -def from_iso_datetime(value): - """Parse a string and return a datetime.datetime. - - This function supports time zone offsets. When the input contains one, - the output uses a timezone with a fixed offset from UTC. - """ - match = _iso8601_datetime_re.match(value) - if not match: - raise ValueError("Not a valid ISO8601-formatted datetime string") - kw = match.groupdict() - kw["microsecond"] = kw["microsecond"] and kw["microsecond"].ljust(6, "0") - tzinfo = kw.pop("tzinfo") - if tzinfo == "Z": - tzinfo = dt.timezone.utc - elif tzinfo is not None: - offset_mins = int(tzinfo[-2:]) if len(tzinfo) > 3 else 0 - offset = 60 * int(tzinfo[1:3]) + offset_mins - if tzinfo[0] == "-": - offset = -offset - tzinfo = get_fixed_timezone(offset) - kw = {k: int(v) for k, v in kw.items() if v is not None} - kw["tzinfo"] = tzinfo - return dt.datetime(**kw) # noqa: DTZ001 - - -def from_iso_time(value): - """Parse a string and return a datetime.time. - - This function doesn't support time zone offsets. - """ - match = _iso8601_time_re.match(value) - if not match: - raise ValueError("Not a valid ISO8601-formatted time string") - kw = match.groupdict() - kw["microsecond"] = kw["microsecond"] and kw["microsecond"].ljust(6, "0") - kw = {k: int(v) for k, v in kw.items() if v is not None} - return dt.time(**kw) - - -def from_iso_date(value): - """Parse a string and return a datetime.date.""" - match = _iso8601_date_re.match(value) - if not match: - raise ValueError("Not a valid ISO8601-formatted date string") - kw = {k: int(v) for k, v in match.groupdict().items()} - return dt.date(**kw) - - -def from_timestamp(value: typing.Any) -> dt.datetime: - if value is True or value is False: - raise ValueError("Not a valid POSIX timestamp") - value = float(value) - if value < 0: - raise ValueError("Not a valid POSIX timestamp") - - # Load a timestamp with utc as timezone to prevent using system timezone. - # Then set timezone to None, to let the Field handle adding timezone info. - try: - return dt.datetime.fromtimestamp(value, tz=dt.timezone.utc).replace(tzinfo=None) - except OverflowError as exc: - raise ValueError("Timestamp is too large") from exc - except OSError as exc: - raise ValueError("Error converting value to datetime") from exc - - -def from_timestamp_ms(value: typing.Any) -> dt.datetime: - value = float(value) - return from_timestamp(value / 1000) - - -def timestamp( - value: dt.datetime, -) -> float: - if not is_aware(value): - # When a date is naive, use UTC as zone info to prevent using system timezone. - value = value.replace(tzinfo=dt.timezone.utc) - return value.timestamp() - - -def timestamp_ms(value: dt.datetime) -> float: - return timestamp(value) * 1000 - - -def isoformat(datetime: dt.datetime) -> str: - """Return the ISO8601-formatted representation of a datetime object. - - :param datetime: The datetime. - """ - return datetime.isoformat() - - -def to_iso_time(time: dt.time) -> str: - return dt.time.isoformat(time) - - -def to_iso_date(date: dt.date) -> str: - return dt.date.isoformat(date) - - -def ensure_text_type(val: str | bytes) -> str: - if isinstance(val, bytes): - val = val.decode("utf-8") - return str(val) - - -def pluck(dictlist: list[dict[str, typing.Any]], key: str): - """Extracts a list of dictionary values from a list of dictionaries. - :: - - >>> dlist = [{'id': 1, 'name': 'foo'}, {'id': 2, 'name': 'bar'}] - >>> pluck(dlist, 'id') - [1, 2] - """ - return [d[key] for d in dictlist] - - -# Various utilities for pulling keyed values from objects - - -def get_value(obj, key: int | str, default=missing): - """Helper for pulling a keyed value off various types of objects. Fields use - this method by default to access attributes of the source object. For object `x` - and attribute `i`, this method first tries to access `x[i]`, and then falls back to - `x.i` if an exception is raised. - - .. warning:: - If an object `x` does not raise an exception when `x[i]` does not exist, - `get_value` will never check the value `x.i`. Consider overriding - `marshmallow.fields.Field.get_value` in this case. - """ - if not isinstance(key, int) and "." in key: - return _get_value_for_keys(obj, key.split("."), default) - return _get_value_for_key(obj, key, default) - - -def _get_value_for_keys(obj, keys, default): - if len(keys) == 1: - return _get_value_for_key(obj, keys[0], default) - return _get_value_for_keys( - _get_value_for_key(obj, keys[0], default), keys[1:], default - ) - - -def _get_value_for_key(obj, key, default): - if not hasattr(obj, "__getitem__"): - return getattr(obj, key, default) - - try: - return obj[key] - except (KeyError, IndexError, TypeError, AttributeError): - return getattr(obj, key, default) - - -def set_value(dct: dict[str, typing.Any], key: str, value: typing.Any): - """Set a value in a dict. If `key` contains a '.', it is assumed - be a path (i.e. dot-delimited string) to the value's location. - - :: - - >>> d = {} - >>> set_value(d, 'foo.bar', 42) - >>> d - {'foo': {'bar': 42}} - """ - if "." in key: - head, rest = key.split(".", 1) - target = dct.setdefault(head, {}) - if not isinstance(target, dict): - raise ValueError( - f"Cannot set {key} in {head} due to existing value: {target}" - ) - set_value(target, rest, value) - else: - dct[key] = value - - -def callable_or_raise(obj): - """Check that an object is callable, else raise a :exc:`TypeError`.""" - if not callable(obj): - raise TypeError(f"Object {obj!r} is not callable.") - return obj - - -def _signature(func: typing.Callable) -> list[str]: - return list(inspect.signature(func).parameters.keys()) - - -def get_func_args(func: typing.Callable) -> list[str]: - """Given a callable, return a list of argument names. Handles - `functools.partial` objects and class-based callables. - - .. versionchanged:: 3.0.0a1 - Do not return bound arguments, eg. ``self``. - """ - if inspect.isfunction(func) or inspect.ismethod(func): - return _signature(func) - if isinstance(func, functools.partial): - return _signature(func.func) - # Callable class - return _signature(func) - - -def resolve_field_instance(cls_or_instance: type[Field] | Field) -> Field: - """Return a field instance from a field class or instance. - - :param cls_or_instance: Field class or instance. - """ - if isinstance(cls_or_instance, type): - if not issubclass(cls_or_instance, FieldABC): - raise FieldInstanceResolutionError - return cls_or_instance() - if not isinstance(cls_or_instance, FieldABC): - raise FieldInstanceResolutionError - return cls_or_instance - - -def timedelta_to_microseconds(value: dt.timedelta) -> int: - """Compute the total microseconds of a timedelta - - https://github.com/python/cpython/blob/bb3e0c240bc60fe08d332ff5955d54197f79751c/Lib/datetime.py#L665-L667 # noqa: B950 - """ - return (value.days * (24 * 3600) + value.seconds) * 1000000 + value.microseconds - - -def validate_unknown_parameter_value(obj: typing.Any) -> str: - if obj not in _UNKNOWN_VALUES: - raise ValueError( - f"Object {obj!r} is not a valid value for the 'unknown' parameter" - ) - return obj diff --git a/myenv/lib/python3.12/site-packages/marshmallow/validate.py b/myenv/lib/python3.12/site-packages/marshmallow/validate.py deleted file mode 100644 index d56912a..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/validate.py +++ /dev/null @@ -1,700 +0,0 @@ -"""Validation classes for various types of data.""" - -from __future__ import annotations - -import re -import typing -import warnings -from abc import ABC, abstractmethod -from itertools import zip_longest -from operator import attrgetter - -from marshmallow.exceptions import ValidationError -from marshmallow.warnings import ChangedInMarshmallow4Warning - -if typing.TYPE_CHECKING: - from marshmallow import types - -_T = typing.TypeVar("_T") - - -class Validator(ABC): - """Abstract base class for validators. - - .. note:: - This class does not provide any validation behavior. It is only used to - add a useful `__repr__` implementation for validators. - """ - - error: str | None = None - - def __repr__(self) -> str: - args = self._repr_args() - args = f"{args}, " if args else "" - - return f"<{self.__class__.__name__}({args}error={self.error!r})>" - - def _repr_args(self) -> str: - """A string representation of the args passed to this validator. Used by - `__repr__`. - """ - return "" - - @abstractmethod - def __call__(self, value: typing.Any) -> typing.Any: ... - - -class And(Validator): - """Compose multiple validators and combine their error messages. - - Example: :: - - from marshmallow import validate, ValidationError - - - def is_even(value): - if value % 2 != 0: - raise ValidationError("Not an even value.") - - - validator = validate.And(validate.Range(min=0), is_even) - validator(-1) - # ValidationError: ['Must be greater than or equal to 0.', 'Not an even value.'] - - :param validators: Validators to combine. - :param error: Error message to use when a validator returns ``False``. - """ - - default_error_message = "Invalid value." - - def __init__(self, *validators: types.Validator, error: str | None = None): - self.validators = tuple(validators) - self.error: str = error or self.default_error_message - - def _repr_args(self) -> str: - return f"validators={self.validators!r}" - - def __call__(self, value: typing.Any) -> typing.Any: - errors: list[str | dict] = [] - kwargs: dict[str, typing.Any] = {} - for validator in self.validators: - try: - r = validator(value) - if not isinstance(validator, Validator) and r is False: - warnings.warn( - "Returning `False` from a validator is deprecated. " - "Raise a `ValidationError` instead.", - ChangedInMarshmallow4Warning, - stacklevel=2, - ) - raise ValidationError(self.error) # noqa: TRY301 - except ValidationError as err: - kwargs.update(err.kwargs) - if isinstance(err.messages, dict): - errors.append(err.messages) - else: - errors.extend(err.messages) - if errors: - raise ValidationError(errors, **kwargs) - return value - - -class URL(Validator): - """Validate a URL. - - :param relative: Whether to allow relative URLs. - :param absolute: Whether to allow absolute URLs. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}`. - :param schemes: Valid schemes. By default, ``http``, ``https``, - ``ftp``, and ``ftps`` are allowed. - :param require_tld: Whether to reject non-FQDN hostnames. - """ - - class RegexMemoizer: - def __init__(self): - self._memoized = {} - - def _regex_generator( - self, *, relative: bool, absolute: bool, require_tld: bool - ) -> typing.Pattern: - hostname_variants = [ - # a normal domain name, expressed in [A-Z0-9] chars with hyphens allowed only in the middle - # note that the regex will be compiled with IGNORECASE, so these are upper and lowercase chars - ( - r"(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+" - r"(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)" - ), - # or the special string 'localhost' - r"localhost", - # or IPv4 - r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", - # or IPv6 - r"\[[A-F0-9]*:[A-F0-9:]+\]", - ] - if not require_tld: - # allow dotless hostnames - hostname_variants.append(r"(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.?)") - - absolute_part = "".join( - ( - # scheme (e.g. 'https://', 'ftp://', etc) - # this is validated separately against allowed schemes, so in the regex - # we simply want to capture its existence - r"(?:[a-z0-9\.\-\+]*)://", - # userinfo, for URLs encoding authentication - # e.g. 'ftp://foo:bar@ftp.example.org/' - r"(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?", - # netloc, the hostname/domain part of the URL plus the optional port - r"(?:", - "|".join(hostname_variants), - r")", - r"(?::\d+)?", - ) - ) - relative_part = r"(?:/?|[/?]\S+)\Z" - - if relative: - if absolute: - parts: tuple[str, ...] = ( - r"^(", - absolute_part, - r")?", - relative_part, - ) - else: - parts = (r"^", relative_part) - else: - parts = (r"^", absolute_part, relative_part) - - return re.compile("".join(parts), re.IGNORECASE) - - def __call__( - self, *, relative: bool, absolute: bool, require_tld: bool - ) -> typing.Pattern: - key = (relative, absolute, require_tld) - if key not in self._memoized: - self._memoized[key] = self._regex_generator( - relative=relative, absolute=absolute, require_tld=require_tld - ) - - return self._memoized[key] - - _regex = RegexMemoizer() - - default_message = "Not a valid URL." - default_schemes = {"http", "https", "ftp", "ftps"} - - def __init__( - self, - *, - relative: bool = False, - absolute: bool = True, - schemes: types.StrSequenceOrSet | None = None, - require_tld: bool = True, - error: str | None = None, - ): - if not relative and not absolute: - raise ValueError( - "URL validation cannot set both relative and absolute to False." - ) - self.relative = relative - self.absolute = absolute - self.error: str = error or self.default_message - self.schemes = schemes or self.default_schemes - self.require_tld = require_tld - - def _repr_args(self) -> str: - return f"relative={self.relative!r}, absolute={self.absolute!r}" - - def _format_error(self, value) -> str: - return self.error.format(input=value) - - def __call__(self, value: str) -> str: - message = self._format_error(value) - if not value: - raise ValidationError(message) - - # Check first if the scheme is valid - scheme = None - if "://" in value: - scheme = value.split("://")[0].lower() - if scheme not in self.schemes: - raise ValidationError(message) - - regex = self._regex( - relative=self.relative, absolute=self.absolute, require_tld=self.require_tld - ) - - # Hostname is optional for file URLS. If absent it means `localhost`. - # Fill it in for the validation if needed - if scheme == "file" and value.startswith("file:///"): - matched = regex.search(value.replace("file:///", "file://localhost/", 1)) - else: - matched = regex.search(value) - - if not matched: - raise ValidationError(message) - - return value - - -class Email(Validator): - """Validate an email address. - - :param error: Error message to raise in case of a validation error. Can be - interpolated with `{input}`. - """ - - USER_REGEX = re.compile( - r"(^[-!#$%&'*+/=?^`{}|~\w]+(\.[-!#$%&'*+/=?^`{}|~\w]+)*\Z" # dot-atom - # quoted-string - r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]' - r'|\\[\001-\011\013\014\016-\177])*"\Z)', - re.IGNORECASE | re.UNICODE, - ) - - DOMAIN_REGEX = re.compile( - # domain - r"(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+" - r"(?:[A-Z]{2,6}|[A-Z0-9-]{2,})\Z" - # literal form, ipv4 address (SMTP 4.1.3) - r"|^\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)" - r"(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]\Z", - re.IGNORECASE | re.UNICODE, - ) - - DOMAIN_WHITELIST = ("localhost",) - - default_message = "Not a valid email address." - - def __init__(self, *, error: str | None = None): - self.error: str = error or self.default_message - - def _format_error(self, value: str) -> str: - return self.error.format(input=value) - - def __call__(self, value: str) -> str: - message = self._format_error(value) - - if not value or "@" not in value: - raise ValidationError(message) - - user_part, domain_part = value.rsplit("@", 1) - - if not self.USER_REGEX.match(user_part): - raise ValidationError(message) - - if domain_part not in self.DOMAIN_WHITELIST: - if not self.DOMAIN_REGEX.match(domain_part): - try: - domain_part = domain_part.encode("idna").decode("ascii") - except UnicodeError: - pass - else: - if self.DOMAIN_REGEX.match(domain_part): - return value - raise ValidationError(message) - - return value - - -class Range(Validator): - """Validator which succeeds if the value passed to it is within the specified - range. If ``min`` is not specified, or is specified as `None`, - no lower bound exists. If ``max`` is not specified, or is specified as `None`, - no upper bound exists. The inclusivity of the bounds (if they exist) is configurable. - If ``min_inclusive`` is not specified, or is specified as `True`, then - the ``min`` bound is included in the range. If ``max_inclusive`` is not specified, - or is specified as `True`, then the ``max`` bound is included in the range. - - :param min: The minimum value (lower bound). If not provided, minimum - value will not be checked. - :param max: The maximum value (upper bound). If not provided, maximum - value will not be checked. - :param min_inclusive: Whether the `min` bound is included in the range. - :param max_inclusive: Whether the `max` bound is included in the range. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}`, `{min}` and `{max}`. - """ - - message_min = "Must be {min_op} {{min}}." - message_max = "Must be {max_op} {{max}}." - message_all = "Must be {min_op} {{min}} and {max_op} {{max}}." - - message_gte = "greater than or equal to" - message_gt = "greater than" - message_lte = "less than or equal to" - message_lt = "less than" - - def __init__( - self, - min=None, # noqa: A002 - max=None, # noqa: A002 - *, - min_inclusive: bool = True, - max_inclusive: bool = True, - error: str | None = None, - ): - self.min = min - self.max = max - self.error = error - self.min_inclusive = min_inclusive - self.max_inclusive = max_inclusive - - # interpolate messages based on bound inclusivity - self.message_min = self.message_min.format( - min_op=self.message_gte if self.min_inclusive else self.message_gt - ) - self.message_max = self.message_max.format( - max_op=self.message_lte if self.max_inclusive else self.message_lt - ) - self.message_all = self.message_all.format( - min_op=self.message_gte if self.min_inclusive else self.message_gt, - max_op=self.message_lte if self.max_inclusive else self.message_lt, - ) - - def _repr_args(self) -> str: - return f"min={self.min!r}, max={self.max!r}, min_inclusive={self.min_inclusive!r}, max_inclusive={self.max_inclusive!r}" - - def _format_error(self, value: _T, message: str) -> str: - return (self.error or message).format(input=value, min=self.min, max=self.max) - - def __call__(self, value: _T) -> _T: - if self.min is not None and ( - value < self.min if self.min_inclusive else value <= self.min - ): - message = self.message_min if self.max is None else self.message_all - raise ValidationError(self._format_error(value, message)) - - if self.max is not None and ( - value > self.max if self.max_inclusive else value >= self.max - ): - message = self.message_max if self.min is None else self.message_all - raise ValidationError(self._format_error(value, message)) - - return value - - -_SizedT = typing.TypeVar("_SizedT", bound=typing.Sized) - - -class Length(Validator): - """Validator which succeeds if the value passed to it has a - length between a minimum and maximum. Uses len(), so it - can work for strings, lists, or anything with length. - - :param min: The minimum length. If not provided, minimum length - will not be checked. - :param max: The maximum length. If not provided, maximum length - will not be checked. - :param equal: The exact length. If provided, maximum and minimum - length will not be checked. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}`, `{min}` and `{max}`. - """ - - message_min = "Shorter than minimum length {min}." - message_max = "Longer than maximum length {max}." - message_all = "Length must be between {min} and {max}." - message_equal = "Length must be {equal}." - - def __init__( - self, - min: int | None = None, # noqa: A002 - max: int | None = None, # noqa: A002 - *, - equal: int | None = None, - error: str | None = None, - ): - if equal is not None and any([min, max]): - raise ValueError( - "The `equal` parameter was provided, maximum or " - "minimum parameter must not be provided." - ) - - self.min = min - self.max = max - self.error = error - self.equal = equal - - def _repr_args(self) -> str: - return f"min={self.min!r}, max={self.max!r}, equal={self.equal!r}" - - def _format_error(self, value: _SizedT, message: str) -> str: - return (self.error or message).format( - input=value, min=self.min, max=self.max, equal=self.equal - ) - - def __call__(self, value: _SizedT) -> _SizedT: - length = len(value) - - if self.equal is not None: - if length != self.equal: - raise ValidationError(self._format_error(value, self.message_equal)) - return value - - if self.min is not None and length < self.min: - message = self.message_min if self.max is None else self.message_all - raise ValidationError(self._format_error(value, message)) - - if self.max is not None and length > self.max: - message = self.message_max if self.min is None else self.message_all - raise ValidationError(self._format_error(value, message)) - - return value - - -class Equal(Validator): - """Validator which succeeds if the ``value`` passed to it is - equal to ``comparable``. - - :param comparable: The object to compare to. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}` and `{other}`. - """ - - default_message = "Must be equal to {other}." - - def __init__(self, comparable, *, error: str | None = None): - self.comparable = comparable - self.error: str = error or self.default_message - - def _repr_args(self) -> str: - return f"comparable={self.comparable!r}" - - def _format_error(self, value: _T) -> str: - return self.error.format(input=value, other=self.comparable) - - def __call__(self, value: _T) -> _T: - if value != self.comparable: - raise ValidationError(self._format_error(value)) - return value - - -class Regexp(Validator): - """Validator which succeeds if the ``value`` matches ``regex``. - - .. note:: - - Uses `re.match`, which searches for a match at the beginning of a string. - - :param regex: The regular expression string to use. Can also be a compiled - regular expression pattern. - :param flags: The regexp flags to use, for example re.IGNORECASE. Ignored - if ``regex`` is not a string. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}` and `{regex}`. - """ - - default_message = "String does not match expected pattern." - - def __init__( - self, - regex: str | bytes | typing.Pattern, - flags: int = 0, - *, - error: str | None = None, - ): - self.regex = ( - re.compile(regex, flags) if isinstance(regex, (str, bytes)) else regex - ) - self.error: str = error or self.default_message - - def _repr_args(self) -> str: - return f"regex={self.regex!r}" - - def _format_error(self, value: str | bytes) -> str: - return self.error.format(input=value, regex=self.regex.pattern) - - @typing.overload - def __call__(self, value: str) -> str: ... - - @typing.overload - def __call__(self, value: bytes) -> bytes: ... - - def __call__(self, value): - if self.regex.match(value) is None: - raise ValidationError(self._format_error(value)) - - return value - - -class Predicate(Validator): - """Call the specified ``method`` of the ``value`` object. The - validator succeeds if the invoked method returns an object that - evaluates to True in a Boolean context. Any additional keyword - argument will be passed to the method. - - :param method: The name of the method to invoke. - :param error: Error message to raise in case of a validation error. - Can be interpolated with `{input}` and `{method}`. - :param kwargs: Additional keyword arguments to pass to the method. - """ - - default_message = "Invalid input." - - def __init__(self, method: str, *, error: str | None = None, **kwargs): - self.method = method - self.error: str = error or self.default_message - self.kwargs = kwargs - - def _repr_args(self) -> str: - return f"method={self.method!r}, kwargs={self.kwargs!r}" - - def _format_error(self, value: typing.Any) -> str: - return self.error.format(input=value, method=self.method) - - def __call__(self, value: _T) -> _T: - method = getattr(value, self.method) - - if not method(**self.kwargs): - raise ValidationError(self._format_error(value)) - - return value - - -class NoneOf(Validator): - """Validator which fails if ``value`` is a member of ``iterable``. - - :param iterable: A sequence of invalid values. - :param error: Error message to raise in case of a validation error. Can be - interpolated using `{input}` and `{values}`. - """ - - default_message = "Invalid input." - - def __init__(self, iterable: typing.Iterable, *, error: str | None = None): - self.iterable = iterable - self.values_text = ", ".join(str(each) for each in self.iterable) - self.error: str = error or self.default_message - - def _repr_args(self) -> str: - return f"iterable={self.iterable!r}" - - def _format_error(self, value) -> str: - return self.error.format(input=value, values=self.values_text) - - def __call__(self, value: typing.Any) -> typing.Any: - try: - if value in self.iterable: - raise ValidationError(self._format_error(value)) - except TypeError: - pass - - return value - - -class OneOf(Validator): - """Validator which succeeds if ``value`` is a member of ``choices``. - - :param choices: A sequence of valid values. - :param labels: Optional sequence of labels to pair with the choices. - :param error: Error message to raise in case of a validation error. Can be - interpolated with `{input}`, `{choices}` and `{labels}`. - """ - - default_message = "Must be one of: {choices}." - - def __init__( - self, - choices: typing.Iterable, - labels: typing.Iterable[str] | None = None, - *, - error: str | None = None, - ): - self.choices = choices - self.choices_text = ", ".join(str(choice) for choice in self.choices) - self.labels = labels if labels is not None else [] - self.labels_text = ", ".join(str(label) for label in self.labels) - self.error: str = error or self.default_message - - def _repr_args(self) -> str: - return f"choices={self.choices!r}, labels={self.labels!r}" - - def _format_error(self, value) -> str: - return self.error.format( - input=value, choices=self.choices_text, labels=self.labels_text - ) - - def __call__(self, value: typing.Any) -> typing.Any: - try: - if value not in self.choices: - raise ValidationError(self._format_error(value)) - except TypeError as error: - raise ValidationError(self._format_error(value)) from error - - return value - - def options( - self, - valuegetter: str | typing.Callable[[typing.Any], typing.Any] = str, - ) -> typing.Iterable[tuple[typing.Any, str]]: - """Return a generator over the (value, label) pairs, where value - is a string associated with each choice. This convenience method - is useful to populate, for instance, a form select field. - - :param valuegetter: Can be a callable or a string. In the former case, it must - be a one-argument callable which returns the value of a - choice. In the latter case, the string specifies the name - of an attribute of the choice objects. Defaults to `str()` - or `str()`. - """ - valuegetter = valuegetter if callable(valuegetter) else attrgetter(valuegetter) - pairs = zip_longest(self.choices, self.labels, fillvalue="") - - return ((valuegetter(choice), label) for choice, label in pairs) - - -class ContainsOnly(OneOf): - """Validator which succeeds if ``value`` is a sequence and each element - in the sequence is also in the sequence passed as ``choices``. Empty input - is considered valid. - - :param choices: Same as :class:`OneOf`. - :param labels: Same as :class:`OneOf`. - :param error: Same as :class:`OneOf`. - - .. versionchanged:: 3.0.0b2 - Duplicate values are considered valid. - .. versionchanged:: 3.0.0b2 - Empty input is considered valid. Use `validate.Length(min=1) ` - to validate against empty inputs. - """ - - default_message = "One or more of the choices you made was not in: {choices}." - - def _format_error(self, value) -> str: - value_text = ", ".join(str(val) for val in value) - return super()._format_error(value_text) - - def __call__(self, value: typing.Sequence[_T]) -> typing.Sequence[_T]: - # We can't use set.issubset because does not handle unhashable types - for val in value: - if val not in self.choices: - raise ValidationError(self._format_error(value)) - return value - - -class ContainsNoneOf(NoneOf): - """Validator which fails if ``value`` is a sequence and any element - in the sequence is a member of the sequence passed as ``iterable``. Empty input - is considered valid. - - :param iterable: Same as :class:`NoneOf`. - :param error: Same as :class:`NoneOf`. - - .. versionadded:: 3.6.0 - """ - - default_message = "One or more of the choices you made was in: {values}." - - def _format_error(self, value) -> str: - value_text = ", ".join(str(val) for val in value) - return super()._format_error(value_text) - - def __call__(self, value: typing.Sequence[_T]) -> typing.Sequence[_T]: - for val in value: - if val in self.iterable: - raise ValidationError(self._format_error(value)) - return value diff --git a/myenv/lib/python3.12/site-packages/marshmallow/warnings.py b/myenv/lib/python3.12/site-packages/marshmallow/warnings.py deleted file mode 100644 index ea561cf..0000000 --- a/myenv/lib/python3.12/site-packages/marshmallow/warnings.py +++ /dev/null @@ -1,10 +0,0 @@ -class Marshmallow4Warning(DeprecationWarning): - pass - - -class ChangedInMarshmallow4Warning(Marshmallow4Warning): - pass - - -class RemovedInMarshmallow4Warning(Marshmallow4Warning): - pass diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/METADATA deleted file mode 100644 index abe8c62..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/METADATA +++ /dev/null @@ -1,29 +0,0 @@ -Metadata-Version: 2.4 -Name: mypy_extensions -Version: 1.1.0 -Summary: Type system extensions for programs checked with the mypy type checker. -Author-email: The mypy developers -Requires-Python: >=3.8 -Description-Content-Type: text/markdown -License-Expression: MIT -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Topic :: Software Development -License-File: LICENSE -Project-URL: Homepage, https://github.com/python/mypy_extensions - -Mypy Extensions -=============== - -The `mypy_extensions` module defines extensions to the Python standard -library `typing` module that are supported by the mypy type checker and -the mypyc compiler. - diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/RECORD deleted file mode 100644 index e56660a..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/RECORD +++ /dev/null @@ -1,7 +0,0 @@ -__pycache__/mypy_extensions.cpython-312.pyc,, -mypy_extensions-1.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -mypy_extensions-1.1.0.dist-info/METADATA,sha256=LEpEk22IXzBDMYHKQLv2JFc1Hx9rCHGxH4eJVk-HR38,1100 -mypy_extensions-1.1.0.dist-info/RECORD,, -mypy_extensions-1.1.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -mypy_extensions-1.1.0.dist-info/licenses/LICENSE,sha256=pQRQ2h1TzXd7gM7XfFj_lqvgzNh5cGvRQsPsIOJF8LQ,1204 -mypy_extensions.py,sha256=GY7iLl2lPqbLD90PTm2U_SxA4MavvwvzpM8MESYgqRk,7754 diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/WHEEL deleted file mode 100644 index d8b9936..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/licenses/LICENSE deleted file mode 100644 index bdb7786..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions-1.1.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Mypy extensions are licensed under the terms of the MIT license, reproduced below. - -= = = = = - -The MIT License - -Copyright (c) 2016-2017 Jukka Lehtosalo and contributors - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -= = = = = diff --git a/myenv/lib/python3.12/site-packages/mypy_extensions.py b/myenv/lib/python3.12/site-packages/mypy_extensions.py deleted file mode 100644 index 1910000..0000000 --- a/myenv/lib/python3.12/site-packages/mypy_extensions.py +++ /dev/null @@ -1,251 +0,0 @@ -"""Defines experimental extensions to the standard "typing" module that are -supported by the mypy typechecker. - -Example usage: - from mypy_extensions import TypedDict -""" - -from typing import Any, Dict - -import sys -# _type_check is NOT a part of public typing API, it is used here only to mimic -# the (convenient) behavior of types provided by typing module. -from typing import _type_check # type: ignore - - -def _check_fails(cls, other): - try: - if sys._getframe(1).f_globals['__name__'] not in ['abc', 'functools', 'typing']: - # Typed dicts are only for static structural subtyping. - raise TypeError('TypedDict does not support instance and class checks') - except (AttributeError, ValueError): - pass - return False - - -def _dict_new(cls, *args, **kwargs): - return dict(*args, **kwargs) - - -def _typeddict_new(cls, _typename, _fields=None, **kwargs): - total = kwargs.pop('total', True) - if _fields is None: - _fields = kwargs - elif kwargs: - raise TypeError("TypedDict takes either a dict or keyword arguments," - " but not both") - - ns = {'__annotations__': dict(_fields), '__total__': total} - try: - # Setting correct module is necessary to make typed dict classes pickleable. - ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__') - except (AttributeError, ValueError): - pass - - return _TypedDictMeta(_typename, (), ns, _from_functional_call=True) - - -class _TypedDictMeta(type): - def __new__(cls, name, bases, ns, total=True, _from_functional_call=False): - # Create new typed dict class object. - # This method is called directly when TypedDict is subclassed, - # or via _typeddict_new when TypedDict is instantiated. This way - # TypedDict supports all three syntaxes described in its docstring. - # Subclasses and instances of TypedDict return actual dictionaries - # via _dict_new. - - # We need the `if TypedDict in globals()` check, - # or we emit a DeprecationWarning when creating mypy_extensions.TypedDict itself - if 'TypedDict' in globals(): - import warnings - warnings.warn( - ( - "mypy_extensions.TypedDict is deprecated, " - "and will be removed in a future version. " - "Use typing.TypedDict or typing_extensions.TypedDict instead." - ), - DeprecationWarning, - stacklevel=(3 if _from_functional_call else 2) - ) - - ns['__new__'] = _typeddict_new if name == 'TypedDict' else _dict_new - tp_dict = super(_TypedDictMeta, cls).__new__(cls, name, (dict,), ns) - - anns = ns.get('__annotations__', {}) - msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type" - anns = {n: _type_check(tp, msg) for n, tp in anns.items()} - for base in bases: - anns.update(base.__dict__.get('__annotations__', {})) - tp_dict.__annotations__ = anns - if not hasattr(tp_dict, '__total__'): - tp_dict.__total__ = total - return tp_dict - - __instancecheck__ = __subclasscheck__ = _check_fails - - -TypedDict = _TypedDictMeta('TypedDict', (dict,), {}) -TypedDict.__module__ = __name__ -TypedDict.__doc__ = \ - """A simple typed name space. At runtime it is equivalent to a plain dict. - - TypedDict creates a dictionary type that expects all of its - instances to have a certain set of keys, with each key - associated with a value of a consistent type. This expectation - is not checked at runtime but is only enforced by typecheckers. - Usage:: - - Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) - a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK - b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check - assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') - - The type info could be accessed via Point2D.__annotations__. TypedDict - supports two additional equivalent forms:: - - Point2D = TypedDict('Point2D', x=int, y=int, label=str) - - class Point2D(TypedDict): - x: int - y: int - label: str - - The latter syntax is only supported in Python 3.6+, while two other - syntax forms work for 3.2+ - """ - -# Argument constructors for making more-detailed Callables. These all just -# return their type argument, to make them complete noops in terms of the -# `typing` module. - - -def Arg(type=Any, name=None): - """A normal positional argument""" - return type - - -def DefaultArg(type=Any, name=None): - """A positional argument with a default value""" - return type - - -def NamedArg(type=Any, name=None): - """A keyword-only argument""" - return type - - -def DefaultNamedArg(type=Any, name=None): - """A keyword-only argument with a default value""" - return type - - -def VarArg(type=Any): - """A *args-style variadic positional argument""" - return type - - -def KwArg(type=Any): - """A **kwargs-style variadic keyword argument""" - return type - - -# Return type that indicates a function does not return -# Deprecated, use typing or typing_extensions variants instead -class _DEPRECATED_NoReturn: pass - - -def trait(cls): - return cls - - -def mypyc_attr(*attrs, **kwattrs): - return lambda x: x - - -# TODO: We may want to try to properly apply this to any type -# variables left over... -class _FlexibleAliasClsApplied: - def __init__(self, val): - self.val = val - - def __getitem__(self, args): - return self.val - - -class _FlexibleAliasCls: - def __getitem__(self, args): - return _FlexibleAliasClsApplied(args[-1]) - - -FlexibleAlias = _FlexibleAliasCls() - - -class _NativeIntMeta(type): - def __instancecheck__(cls, inst): - return isinstance(inst, int) - - -_sentinel = object() - - -class i64(metaclass=_NativeIntMeta): - def __new__(cls, x=0, base=_sentinel): - if base is not _sentinel: - return int(x, base) - return int(x) - - -class i32(metaclass=_NativeIntMeta): - def __new__(cls, x=0, base=_sentinel): - if base is not _sentinel: - return int(x, base) - return int(x) - - -class i16(metaclass=_NativeIntMeta): - def __new__(cls, x=0, base=_sentinel): - if base is not _sentinel: - return int(x, base) - return int(x) - - -class u8(metaclass=_NativeIntMeta): - def __new__(cls, x=0, base=_sentinel): - if base is not _sentinel: - return int(x, base) - return int(x) - - -for _int_type in i64, i32, i16, u8: - _int_type.__doc__ = \ - """A native fixed-width integer type when used with mypyc. - - In code not compiled with mypyc, behaves like the 'int' type in these - runtime contexts: - - * {name}(x[, base=n]) converts a number or string to 'int' - * isinstance(x, {name}) is the same as isinstance(x, int) - """.format(name=_int_type.__name__) -del _int_type - - -def _warn_deprecation(name: str, module_globals: Dict[str, Any]) -> Any: - if (val := module_globals.get(f"_DEPRECATED_{name}")) is None: - msg = f"module '{__name__}' has no attribute '{name}'" - raise AttributeError(msg) - module_globals[name] = val - if name in {"NoReturn"}: - msg = ( - f"'mypy_extensions.{name}' is deprecated, " - "and will be removed in a future version. " - f"Use 'typing.{name}' or 'typing_extensions.{name}' instead" - ) - else: - assert False, f"Add deprecation message for 'mypy_extensions.{name}'" - import warnings - warnings.warn(msg, DeprecationWarning, stacklevel=3) - return val - - -def __getattr__(name: str) -> Any: - return _warn_deprecation(name, module_globals=globals()) diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/METADATA deleted file mode 100644 index 3200e60..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/METADATA +++ /dev/null @@ -1,107 +0,0 @@ -Metadata-Version: 2.4 -Name: packaging -Version: 26.0 -Summary: Core utilities for Python packages -Author-email: Donald Stufft -Requires-Python: >=3.8 -Description-Content-Type: text/x-rst -License-Expression: Apache-2.0 OR BSD-2-Clause -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Typing :: Typed -License-File: LICENSE -License-File: LICENSE.APACHE -License-File: LICENSE.BSD -Project-URL: Documentation, https://packaging.pypa.io/ -Project-URL: Source, https://github.com/pypa/packaging - -packaging -========= - -.. start-intro - -Reusable core utilities for various Python Packaging -`interoperability specifications `_. - -This library provides utilities that implement the interoperability -specifications which have clearly one correct behaviour (eg: :pep:`440`) -or benefit greatly from having a single shared implementation (eg: :pep:`425`). - -.. end-intro - -The ``packaging`` project includes the following: version handling, specifiers, -markers, requirements, tags, metadata, lockfiles, utilities. - -Documentation -------------- - -The `documentation`_ provides information and the API for the following: - -- Version Handling -- Specifiers -- Markers -- Requirements -- Tags -- Metadata -- Lockfiles -- Utilities - -Installation ------------- - -Use ``pip`` to install these utilities:: - - pip install packaging - -The ``packaging`` library uses calendar-based versioning (``YY.N``). - -Discussion ----------- - -If you run into bugs, you can file them in our `issue tracker`_. - -You can also join ``#pypa`` on Freenode to ask questions or get involved. - - -.. _`documentation`: https://packaging.pypa.io/ -.. _`issue tracker`: https://github.com/pypa/packaging/issues - - -Code of Conduct ---------------- - -Everyone interacting in the packaging project's codebases, issue trackers, chat -rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. - -.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md - -Contributing ------------- - -The ``CONTRIBUTING.rst`` file outlines how to contribute to this project as -well as how to report a potential security issue. The documentation for this -project also covers information about `project development`_ and `security`_. - -.. _`project development`: https://packaging.pypa.io/en/latest/development/ -.. _`security`: https://packaging.pypa.io/en/latest/security/ - -Project History ---------------- - -Please review the ``CHANGELOG.rst`` file or the `Changelog documentation`_ for -recent changes and project history. - -.. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/ - diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/RECORD deleted file mode 100644 index c4d0eb5..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/RECORD +++ /dev/null @@ -1,42 +0,0 @@ -packaging-26.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -packaging-26.0.dist-info/METADATA,sha256=M2K7fWom2iliuo2qpHhc0LrKwhq6kIoRlcyPWVgKJlo,3309 -packaging-26.0.dist-info/RECORD,, -packaging-26.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -packaging-26.0.dist-info/licenses/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 -packaging-26.0.dist-info/licenses/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 -packaging-26.0.dist-info/licenses/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 -packaging/__init__.py,sha256=y4lVbpeBzCGk-IPDw5BGBZ_b0P3ukEEJZAbGYc6Ey8c,494 -packaging/__pycache__/__init__.cpython-312.pyc,, -packaging/__pycache__/_elffile.cpython-312.pyc,, -packaging/__pycache__/_manylinux.cpython-312.pyc,, -packaging/__pycache__/_musllinux.cpython-312.pyc,, -packaging/__pycache__/_parser.cpython-312.pyc,, -packaging/__pycache__/_structures.cpython-312.pyc,, -packaging/__pycache__/_tokenizer.cpython-312.pyc,, -packaging/__pycache__/markers.cpython-312.pyc,, -packaging/__pycache__/metadata.cpython-312.pyc,, -packaging/__pycache__/pylock.cpython-312.pyc,, -packaging/__pycache__/requirements.cpython-312.pyc,, -packaging/__pycache__/specifiers.cpython-312.pyc,, -packaging/__pycache__/tags.cpython-312.pyc,, -packaging/__pycache__/utils.cpython-312.pyc,, -packaging/__pycache__/version.cpython-312.pyc,, -packaging/_elffile.py,sha256=-sKkptYqzYw2-x3QByJa5mB4rfPWu1pxkZHRx1WAFCY,3211 -packaging/_manylinux.py,sha256=Hf6nB0cOrayEs96-p3oIXAgGnFquv20DO5l-o2_Xnv0,9559 -packaging/_musllinux.py,sha256=Z6swjH3MA7XS3qXnmMN7QPhqP3fnoYI0eQ18e9-HgAE,2707 -packaging/_parser.py,sha256=U_DajsEx2VoC_F46fSVV3hDKNCWoQYkPkasO3dld0ig,10518 -packaging/_structures.py,sha256=Hn49Ta8zV9Wo8GiCL8Nl2ARZY983Un3pruZGVNldPwE,1514 -packaging/_tokenizer.py,sha256=M8EwNIdXeL9NMFuFrQtiOKwjka_xFx8KjRQnfE8O_z8,5421 -packaging/licenses/__init__.py,sha256=TwXLHZCXwSgdFwRLPxW602T6mSieunSFHM6fp8pgW78,5819 -packaging/licenses/__pycache__/__init__.cpython-312.pyc,, -packaging/licenses/__pycache__/_spdx.cpython-312.pyc,, -packaging/licenses/_spdx.py,sha256=WW7DXiyg68up_YND_wpRYlr1SHhiV4FfJLQffghhMxQ,51122 -packaging/markers.py,sha256=ZX-cLvW1S3cZcEc0fHI4z7zSx5U2T19yMpDP_mE-CYw,12771 -packaging/metadata.py,sha256=CWVZpN_HfoYMSSDuCP7igOvGgqA9AOmpW8f3qTisfnc,39360 -packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -packaging/pylock.py,sha256=-R1uNfJ4PaLto7Mg62YsGOHgvskuiIEqPwxOywl42Jk,22537 -packaging/requirements.py,sha256=PMCAWD8aNMnVD-6uZMedhBuAVX2573eZ4yPBLXmz04I,2870 -packaging/specifiers.py,sha256=EPNPimY_zFivthv1vdjZYz5IqkKGsnKR2yKh-EVyvZw,40797 -packaging/tags.py,sha256=cXLV1pJD3UtJlDg7Wz3zrfdQhRZqr8jumSAKKAAd2xE,22856 -packaging/utils.py,sha256=N4c6oZzFJy6klTZ3AnkNz7sSkJesuFWPp68LA3B5dAo,5040 -packaging/version.py,sha256=7XWlL2IDYLwDYC0ht6cFEhapLwLWbmyo4rb7sEFj0x8,23272 diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/WHEEL deleted file mode 100644 index d8b9936..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE deleted file mode 100644 index 6f62d44..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made -under the terms of *both* these licenses. diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE deleted file mode 100644 index f433b1a..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD b/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD deleted file mode 100644 index 42ce7b7..0000000 --- a/myenv/lib/python3.12/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) Donald Stufft and individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/packaging/__init__.py b/myenv/lib/python3.12/site-packages/packaging/__init__.py deleted file mode 100644 index 21695a7..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -__title__ = "packaging" -__summary__ = "Core utilities for Python packages" -__uri__ = "https://github.com/pypa/packaging" - -__version__ = "26.0" - -__author__ = "Donald Stufft and individual contributors" -__email__ = "donald@stufft.io" - -__license__ = "BSD-2-Clause or Apache-2.0" -__copyright__ = f"2014 {__author__}" diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index afb4322..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_elffile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_elffile.cpython-312.pyc deleted file mode 100644 index 59f418c..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_elffile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_manylinux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_manylinux.cpython-312.pyc deleted file mode 100644 index 1231627..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_manylinux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_musllinux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_musllinux.cpython-312.pyc deleted file mode 100644 index 7553878..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_musllinux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_parser.cpython-312.pyc deleted file mode 100644 index 441f956..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_structures.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_structures.cpython-312.pyc deleted file mode 100644 index 4c5d333..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_structures.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_tokenizer.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/_tokenizer.cpython-312.pyc deleted file mode 100644 index de35950..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/_tokenizer.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/markers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/markers.cpython-312.pyc deleted file mode 100644 index bada57f..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/markers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/metadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/metadata.cpython-312.pyc deleted file mode 100644 index c56343a..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/metadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/pylock.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/pylock.cpython-312.pyc deleted file mode 100644 index 72d0b5a..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/pylock.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/requirements.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/requirements.cpython-312.pyc deleted file mode 100644 index 30374e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/requirements.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/specifiers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/specifiers.cpython-312.pyc deleted file mode 100644 index a6faddf..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/specifiers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/tags.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/tags.cpython-312.pyc deleted file mode 100644 index 6602fa5..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/tags.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 928dbca..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/__pycache__/version.cpython-312.pyc deleted file mode 100644 index 2376116..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/__pycache__/version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/_elffile.py b/myenv/lib/python3.12/site-packages/packaging/_elffile.py deleted file mode 100644 index 497b064..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_elffile.py +++ /dev/null @@ -1,108 +0,0 @@ -""" -ELF file parser. - -This provides a class ``ELFFile`` that parses an ELF executable in a similar -interface to ``ZipFile``. Only the read interface is implemented. - -ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html -""" - -from __future__ import annotations - -import enum -import os -import struct -from typing import IO - - -class ELFInvalid(ValueError): - pass - - -class EIClass(enum.IntEnum): - C32 = 1 - C64 = 2 - - -class EIData(enum.IntEnum): - Lsb = 1 - Msb = 2 - - -class EMachine(enum.IntEnum): - I386 = 3 - S390 = 22 - Arm = 40 - X8664 = 62 - AArc64 = 183 - - -class ELFFile: - """ - Representation of an ELF executable. - """ - - def __init__(self, f: IO[bytes]) -> None: - self._f = f - - try: - ident = self._read("16B") - except struct.error as e: - raise ELFInvalid("unable to parse identification") from e - magic = bytes(ident[:4]) - if magic != b"\x7fELF": - raise ELFInvalid(f"invalid magic: {magic!r}") - - self.capacity = ident[4] # Format for program header (bitness). - self.encoding = ident[5] # Data structure encoding (endianness). - - try: - # e_fmt: Format for program header. - # p_fmt: Format for section header. - # p_idx: Indexes to find p_type, p_offset, and p_filesz. - e_fmt, self._p_fmt, self._p_idx = { - (1, 1): ("HHIIIIIHHH", ">IIIIIIII", (0, 1, 4)), # 32-bit MSB. - (2, 1): ("HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB. - }[(self.capacity, self.encoding)] - except KeyError as e: - raise ELFInvalid( - f"unrecognized capacity ({self.capacity}) or encoding ({self.encoding})" - ) from e - - try: - ( - _, - self.machine, # Architecture type. - _, - _, - self._e_phoff, # Offset of program header. - _, - self.flags, # Processor-specific flags. - _, - self._e_phentsize, # Size of section. - self._e_phnum, # Number of sections. - ) = self._read(e_fmt) - except struct.error as e: - raise ELFInvalid("unable to parse machine and section information") from e - - def _read(self, fmt: str) -> tuple[int, ...]: - return struct.unpack(fmt, self._f.read(struct.calcsize(fmt))) - - @property - def interpreter(self) -> str | None: - """ - The path recorded in the ``PT_INTERP`` section header. - """ - for index in range(self._e_phnum): - self._f.seek(self._e_phoff + self._e_phentsize * index) - try: - data = self._read(self._p_fmt) - except struct.error: - continue - if data[self._p_idx[0]] != 3: # Not PT_INTERP. - continue - self._f.seek(data[self._p_idx[1]]) - return os.fsdecode(self._f.read(data[self._p_idx[2]])).strip("\0") - return None diff --git a/myenv/lib/python3.12/site-packages/packaging/_manylinux.py b/myenv/lib/python3.12/site-packages/packaging/_manylinux.py deleted file mode 100644 index 0e79e8a..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_manylinux.py +++ /dev/null @@ -1,262 +0,0 @@ -from __future__ import annotations - -import collections -import contextlib -import functools -import os -import re -import sys -import warnings -from typing import Generator, Iterator, NamedTuple, Sequence - -from ._elffile import EIClass, EIData, ELFFile, EMachine - -EF_ARM_ABIMASK = 0xFF000000 -EF_ARM_ABI_VER5 = 0x05000000 -EF_ARM_ABI_FLOAT_HARD = 0x00000400 - -_ALLOWED_ARCHS = { - "x86_64", - "aarch64", - "ppc64", - "ppc64le", - "s390x", - "loongarch64", - "riscv64", -} - - -# `os.PathLike` not a generic type until Python 3.9, so sticking with `str` -# as the type for `path` until then. -@contextlib.contextmanager -def _parse_elf(path: str) -> Generator[ELFFile | None, None, None]: - try: - with open(path, "rb") as f: - yield ELFFile(f) - except (OSError, TypeError, ValueError): - yield None - - -def _is_linux_armhf(executable: str) -> bool: - # hard-float ABI can be detected from the ELF header of the running - # process - # https://static.docs.arm.com/ihi0044/g/aaelf32.pdf - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.Arm - and f.flags & EF_ARM_ABIMASK == EF_ARM_ABI_VER5 - and f.flags & EF_ARM_ABI_FLOAT_HARD == EF_ARM_ABI_FLOAT_HARD - ) - - -def _is_linux_i686(executable: str) -> bool: - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.I386 - ) - - -def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool: - if "armv7l" in archs: - return _is_linux_armhf(executable) - if "i686" in archs: - return _is_linux_i686(executable) - return any(arch in _ALLOWED_ARCHS for arch in archs) - - -# If glibc ever changes its major version, we need to know what the last -# minor version was, so we can build the complete list of all versions. -# For now, guess what the highest minor version might be, assume it will -# be 50 for testing. Once this actually happens, update the dictionary -# with the actual value. -_LAST_GLIBC_MINOR: dict[int, int] = collections.defaultdict(lambda: 50) - - -class _GLibCVersion(NamedTuple): - major: int - minor: int - - -def _glibc_version_string_confstr() -> str | None: - """ - Primary implementation of glibc_version_string using os.confstr. - """ - # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely - # to be broken or missing. This strategy is used in the standard library - # platform module. - # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 - try: - # Should be a string like "glibc 2.17". - version_string: str | None = os.confstr("CS_GNU_LIBC_VERSION") - assert version_string is not None - _, version = version_string.rsplit() - except (AssertionError, AttributeError, OSError, ValueError): - # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... - return None - return version - - -def _glibc_version_string_ctypes() -> str | None: - """ - Fallback implementation of glibc_version_string using ctypes. - """ - try: - import ctypes # noqa: PLC0415 - except ImportError: - return None - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - # - # We must also handle the special case where the executable is not a - # dynamically linked executable. This can occur when using musl libc, - # for example. In this situation, dlopen() will error, leading to an - # OSError. Interestingly, at least in the case of musl, there is no - # errno set on the OSError. The single string argument used to construct - # OSError comes from libc itself and is therefore not portable to - # hard code here. In any case, failure to call dlopen() means we - # can proceed, so we bail on our attempt. - try: - process_namespace = ctypes.CDLL(None) - except OSError: - return None - - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str: str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -def _glibc_version_string() -> str | None: - """Returns glibc version string, or None if not using glibc.""" - return _glibc_version_string_confstr() or _glibc_version_string_ctypes() - - -def _parse_glibc_version(version_str: str) -> _GLibCVersion: - """Parse glibc version. - - We use a regexp instead of str.split because we want to discard any - random junk that might come after the minor version -- this might happen - in patched/forked versions of glibc (e.g. Linaro's version of glibc - uses version strings like "2.20-2014.11"). See gh-3588. - """ - m = re.match(r"(?P[0-9]+)\.(?P[0-9]+)", version_str) - if not m: - warnings.warn( - f"Expected glibc version with 2 components major.minor, got: {version_str}", - RuntimeWarning, - stacklevel=2, - ) - return _GLibCVersion(-1, -1) - return _GLibCVersion(int(m.group("major")), int(m.group("minor"))) - - -@functools.lru_cache -def _get_glibc_version() -> _GLibCVersion: - version_str = _glibc_version_string() - if version_str is None: - return _GLibCVersion(-1, -1) - return _parse_glibc_version(version_str) - - -# From PEP 513, PEP 600 -def _is_compatible(arch: str, version: _GLibCVersion) -> bool: - sys_glibc = _get_glibc_version() - if sys_glibc < version: - return False - # Check for presence of _manylinux module. - try: - import _manylinux # noqa: PLC0415 - except ImportError: - return True - if hasattr(_manylinux, "manylinux_compatible"): - result = _manylinux.manylinux_compatible(version[0], version[1], arch) - if result is not None: - return bool(result) - return True - if version == _GLibCVersion(2, 5) and hasattr(_manylinux, "manylinux1_compatible"): - return bool(_manylinux.manylinux1_compatible) - if version == _GLibCVersion(2, 12) and hasattr( - _manylinux, "manylinux2010_compatible" - ): - return bool(_manylinux.manylinux2010_compatible) - if version == _GLibCVersion(2, 17) and hasattr( - _manylinux, "manylinux2014_compatible" - ): - return bool(_manylinux.manylinux2014_compatible) - return True - - -_LEGACY_MANYLINUX_MAP: dict[_GLibCVersion, str] = { - # CentOS 7 w/ glibc 2.17 (PEP 599) - _GLibCVersion(2, 17): "manylinux2014", - # CentOS 6 w/ glibc 2.12 (PEP 571) - _GLibCVersion(2, 12): "manylinux2010", - # CentOS 5 w/ glibc 2.5 (PEP 513) - _GLibCVersion(2, 5): "manylinux1", -} - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate manylinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be manylinux-compatible. - - :returns: An iterator of compatible manylinux tags. - """ - if not _have_compatible_abi(sys.executable, archs): - return - # Oldest glibc to be supported regardless of architecture is (2, 17). - too_old_glibc2 = _GLibCVersion(2, 16) - if set(archs) & {"x86_64", "i686"}: - # On x86/i686 also oldest glibc to be supported is (2, 5). - too_old_glibc2 = _GLibCVersion(2, 4) - current_glibc = _GLibCVersion(*_get_glibc_version()) - glibc_max_list = [current_glibc] - # We can assume compatibility across glibc major versions. - # https://sourceware.org/bugzilla/show_bug.cgi?id=24636 - # - # Build a list of maximum glibc versions so that we can - # output the canonical list of all glibc from current_glibc - # down to too_old_glibc2, including all intermediary versions. - for glibc_major in range(current_glibc.major - 1, 1, -1): - glibc_minor = _LAST_GLIBC_MINOR[glibc_major] - glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) - for arch in archs: - for glibc_max in glibc_max_list: - if glibc_max.major == too_old_glibc2.major: - min_minor = too_old_glibc2.minor - else: - # For other glibc major versions oldest supported is (x, 0). - min_minor = -1 - for glibc_minor in range(glibc_max.minor, min_minor, -1): - glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) - if _is_compatible(arch, glibc_version): - yield "manylinux_{}_{}_{}".format(*glibc_version, arch) - - # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. - if legacy_tag := _LEGACY_MANYLINUX_MAP.get(glibc_version): - yield f"{legacy_tag}_{arch}" diff --git a/myenv/lib/python3.12/site-packages/packaging/_musllinux.py b/myenv/lib/python3.12/site-packages/packaging/_musllinux.py deleted file mode 100644 index 4e8116a..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_musllinux.py +++ /dev/null @@ -1,85 +0,0 @@ -"""PEP 656 support. - -This module implements logic to detect if the currently running Python is -linked against musl, and what musl version is used. -""" - -from __future__ import annotations - -import functools -import re -import subprocess -import sys -from typing import Iterator, NamedTuple, Sequence - -from ._elffile import ELFFile - - -class _MuslVersion(NamedTuple): - major: int - minor: int - - -def _parse_musl_version(output: str) -> _MuslVersion | None: - lines = [n for n in (n.strip() for n in output.splitlines()) if n] - if len(lines) < 2 or lines[0][:4] != "musl": - return None - m = re.match(r"Version (\d+)\.(\d+)", lines[1]) - if not m: - return None - return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2))) - - -@functools.lru_cache -def _get_musl_version(executable: str) -> _MuslVersion | None: - """Detect currently-running musl runtime version. - - This is done by checking the specified executable's dynamic linking - information, and invoking the loader to parse its output for a version - string. If the loader is musl, the output would be something like:: - - musl libc (x86_64) - Version 1.2.2 - Dynamic Program Loader - """ - try: - with open(executable, "rb") as f: - ld = ELFFile(f).interpreter - except (OSError, TypeError, ValueError): - return None - if ld is None or "musl" not in ld: - return None - proc = subprocess.run([ld], check=False, stderr=subprocess.PIPE, text=True) - return _parse_musl_version(proc.stderr) - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate musllinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be musllinux-compatible. - - :returns: An iterator of compatible musllinux tags. - """ - sys_musl = _get_musl_version(sys.executable) - if sys_musl is None: # Python not dynamically linked against musl. - return - for arch in archs: - for minor in range(sys_musl.minor, -1, -1): - yield f"musllinux_{sys_musl.major}_{minor}_{arch}" - - -if __name__ == "__main__": # pragma: no cover - import sysconfig - - plat = sysconfig.get_platform() - assert plat.startswith("linux-"), "not linux" - - print("plat:", plat) - print("musl:", _get_musl_version(sys.executable)) - print("tags:", end=" ") - for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])): - print(t, end="\n ") diff --git a/myenv/lib/python3.12/site-packages/packaging/_parser.py b/myenv/lib/python3.12/site-packages/packaging/_parser.py deleted file mode 100644 index f6c1f5c..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_parser.py +++ /dev/null @@ -1,365 +0,0 @@ -"""Handwritten parser of dependency specifiers. - -The docstring for each __parse_* function contains EBNF-inspired grammar representing -the implementation. -""" - -from __future__ import annotations - -import ast -from typing import List, Literal, NamedTuple, Sequence, Tuple, Union - -from ._tokenizer import DEFAULT_RULES, Tokenizer - - -class Node: - __slots__ = ("value",) - - def __init__(self, value: str) -> None: - self.value = value - - def __str__(self) -> str: - return self.value - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}({self.value!r})>" - - def serialize(self) -> str: - raise NotImplementedError - - -class Variable(Node): - __slots__ = () - - def serialize(self) -> str: - return str(self) - - -class Value(Node): - __slots__ = () - - def serialize(self) -> str: - return f'"{self}"' - - -class Op(Node): - __slots__ = () - - def serialize(self) -> str: - return str(self) - - -MarkerLogical = Literal["and", "or"] -MarkerVar = Union[Variable, Value] -MarkerItem = Tuple[MarkerVar, Op, MarkerVar] -MarkerAtom = Union[MarkerItem, Sequence["MarkerAtom"]] -MarkerList = List[Union["MarkerList", MarkerAtom, MarkerLogical]] - - -class ParsedRequirement(NamedTuple): - name: str - url: str - extras: list[str] - specifier: str - marker: MarkerList | None - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for dependency specifier -# -------------------------------------------------------------------------------------- -def parse_requirement(source: str) -> ParsedRequirement: - return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement: - """ - requirement = WS? IDENTIFIER WS? extras WS? requirement_details - """ - tokenizer.consume("WS") - - name_token = tokenizer.expect( - "IDENTIFIER", expected="package name at the start of dependency specifier" - ) - name = name_token.text - tokenizer.consume("WS") - - extras = _parse_extras(tokenizer) - tokenizer.consume("WS") - - url, specifier, marker = _parse_requirement_details(tokenizer) - tokenizer.expect("END", expected="end of dependency specifier") - - return ParsedRequirement(name, url, extras, specifier, marker) - - -def _parse_requirement_details( - tokenizer: Tokenizer, -) -> tuple[str, str, MarkerList | None]: - """ - requirement_details = AT URL (WS requirement_marker?)? - | specifier WS? (requirement_marker)? - """ - - specifier = "" - url = "" - marker = None - - if tokenizer.check("AT"): - tokenizer.read() - tokenizer.consume("WS") - - url_start = tokenizer.position - url = tokenizer.expect("URL", expected="URL after @").text - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - tokenizer.expect("WS", expected="whitespace after URL") - - # The input might end after whitespace. - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, - span_start=url_start, - expected="semicolon (after URL and whitespace)", - ) - else: - specifier_start = tokenizer.position - specifier = _parse_specifier(tokenizer) - tokenizer.consume("WS") - - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, - span_start=specifier_start, - expected=( - "comma (within version specifier), semicolon (after version specifier)" - if specifier - else "semicolon (after name with no version specifier)" - ), - ) - - return (url, specifier, marker) - - -def _parse_requirement_marker( - tokenizer: Tokenizer, *, span_start: int, expected: str -) -> MarkerList: - """ - requirement_marker = SEMICOLON marker WS? - """ - - if not tokenizer.check("SEMICOLON"): - tokenizer.raise_syntax_error( - f"Expected {expected} or end", - span_start=span_start, - span_end=None, - ) - tokenizer.read() - - marker = _parse_marker(tokenizer) - tokenizer.consume("WS") - - return marker - - -def _parse_extras(tokenizer: Tokenizer) -> list[str]: - """ - extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? - """ - if not tokenizer.check("LEFT_BRACKET", peek=True): - return [] - - with tokenizer.enclosing_tokens( - "LEFT_BRACKET", - "RIGHT_BRACKET", - around="extras", - ): - tokenizer.consume("WS") - extras = _parse_extras_list(tokenizer) - tokenizer.consume("WS") - - return extras - - -def _parse_extras_list(tokenizer: Tokenizer) -> list[str]: - """ - extras_list = identifier (wsp* ',' wsp* identifier)* - """ - extras: list[str] = [] - - if not tokenizer.check("IDENTIFIER"): - return extras - - extras.append(tokenizer.read().text) - - while True: - tokenizer.consume("WS") - if tokenizer.check("IDENTIFIER", peek=True): - tokenizer.raise_syntax_error("Expected comma between extra names") - elif not tokenizer.check("COMMA"): - break - - tokenizer.read() - tokenizer.consume("WS") - - extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma") - extras.append(extra_token.text) - - return extras - - -def _parse_specifier(tokenizer: Tokenizer) -> str: - """ - specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS - | WS? version_many WS? - """ - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="version specifier", - ): - tokenizer.consume("WS") - parsed_specifiers = _parse_version_many(tokenizer) - tokenizer.consume("WS") - - return parsed_specifiers - - -def _parse_version_many(tokenizer: Tokenizer) -> str: - """ - version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? - """ - parsed_specifiers = "" - while tokenizer.check("SPECIFIER"): - span_start = tokenizer.position - parsed_specifiers += tokenizer.read().text - if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True): - tokenizer.raise_syntax_error( - ".* suffix can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position + 1, - ) - if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True): - tokenizer.raise_syntax_error( - "Local version label can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position, - ) - tokenizer.consume("WS") - if not tokenizer.check("COMMA"): - break - parsed_specifiers += tokenizer.read().text - tokenizer.consume("WS") - - return parsed_specifiers - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for marker expression -# -------------------------------------------------------------------------------------- -def parse_marker(source: str) -> MarkerList: - return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList: - retval = _parse_marker(tokenizer) - tokenizer.expect("END", expected="end of marker expression") - return retval - - -def _parse_marker(tokenizer: Tokenizer) -> MarkerList: - """ - marker = marker_atom (BOOLOP marker_atom)+ - """ - expression = [_parse_marker_atom(tokenizer)] - while tokenizer.check("BOOLOP"): - token = tokenizer.read() - expr_right = _parse_marker_atom(tokenizer) - expression.extend((token.text, expr_right)) - return expression - - -def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom: - """ - marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? - | WS? marker_item WS? - """ - - tokenizer.consume("WS") - if tokenizer.check("LEFT_PARENTHESIS", peek=True): - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="marker expression", - ): - tokenizer.consume("WS") - marker: MarkerAtom = _parse_marker(tokenizer) - tokenizer.consume("WS") - else: - marker = _parse_marker_item(tokenizer) - tokenizer.consume("WS") - return marker - - -def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem: - """ - marker_item = WS? marker_var WS? marker_op WS? marker_var WS? - """ - tokenizer.consume("WS") - marker_var_left = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - marker_op = _parse_marker_op(tokenizer) - tokenizer.consume("WS") - marker_var_right = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - return (marker_var_left, marker_op, marker_var_right) - - -def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar: # noqa: RET503 - """ - marker_var = VARIABLE | QUOTED_STRING - """ - if tokenizer.check("VARIABLE"): - return process_env_var(tokenizer.read().text.replace(".", "_")) - elif tokenizer.check("QUOTED_STRING"): - return process_python_str(tokenizer.read().text) - else: - tokenizer.raise_syntax_error( - message="Expected a marker variable or quoted string" - ) - - -def process_env_var(env_var: str) -> Variable: - if env_var in ("platform_python_implementation", "python_implementation"): - return Variable("platform_python_implementation") - else: - return Variable(env_var) - - -def process_python_str(python_str: str) -> Value: - value = ast.literal_eval(python_str) - return Value(str(value)) - - -def _parse_marker_op(tokenizer: Tokenizer) -> Op: - """ - marker_op = IN | NOT IN | OP - """ - if tokenizer.check("IN"): - tokenizer.read() - return Op("in") - elif tokenizer.check("NOT"): - tokenizer.read() - tokenizer.expect("WS", expected="whitespace after 'not'") - tokenizer.expect("IN", expected="'in' after 'not'") - return Op("not in") - elif tokenizer.check("OP"): - return Op(tokenizer.read().text) - else: - return tokenizer.raise_syntax_error( - "Expected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in" - ) diff --git a/myenv/lib/python3.12/site-packages/packaging/_structures.py b/myenv/lib/python3.12/site-packages/packaging/_structures.py deleted file mode 100644 index 225e2ee..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_structures.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - - -@typing.final -class InfinityType: - __slots__ = () - - def __repr__(self) -> str: - return "Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return False - - def __le__(self, other: object) -> bool: - return False - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return True - - def __ge__(self, other: object) -> bool: - return True - - def __neg__(self: object) -> "NegativeInfinityType": - return NegativeInfinity - - -Infinity = InfinityType() - - -@typing.final -class NegativeInfinityType: - __slots__ = () - - def __repr__(self) -> str: - return "-Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return True - - def __le__(self, other: object) -> bool: - return True - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return False - - def __ge__(self, other: object) -> bool: - return False - - def __neg__(self: object) -> InfinityType: - return Infinity - - -NegativeInfinity = NegativeInfinityType() diff --git a/myenv/lib/python3.12/site-packages/packaging/_tokenizer.py b/myenv/lib/python3.12/site-packages/packaging/_tokenizer.py deleted file mode 100644 index e6d20dd..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/_tokenizer.py +++ /dev/null @@ -1,193 +0,0 @@ -from __future__ import annotations - -import contextlib -import re -from dataclasses import dataclass -from typing import Generator, Mapping, NoReturn - -from .specifiers import Specifier - - -@dataclass -class Token: - name: str - text: str - position: int - - -class ParserSyntaxError(Exception): - """The provided source text could not be parsed correctly.""" - - def __init__( - self, - message: str, - *, - source: str, - span: tuple[int, int], - ) -> None: - self.span = span - self.message = message - self.source = source - - super().__init__() - - def __str__(self) -> str: - marker = " " * self.span[0] + "~" * (self.span[1] - self.span[0]) + "^" - return f"{self.message}\n {self.source}\n {marker}" - - -DEFAULT_RULES: dict[str, re.Pattern[str]] = { - "LEFT_PARENTHESIS": re.compile(r"\("), - "RIGHT_PARENTHESIS": re.compile(r"\)"), - "LEFT_BRACKET": re.compile(r"\["), - "RIGHT_BRACKET": re.compile(r"\]"), - "SEMICOLON": re.compile(r";"), - "COMMA": re.compile(r","), - "QUOTED_STRING": re.compile( - r""" - ( - ('[^']*') - | - ("[^"]*") - ) - """, - re.VERBOSE, - ), - "OP": re.compile(r"(===|==|~=|!=|<=|>=|<|>)"), - "BOOLOP": re.compile(r"\b(or|and)\b"), - "IN": re.compile(r"\bin\b"), - "NOT": re.compile(r"\bnot\b"), - "VARIABLE": re.compile( - r""" - \b( - python_version - |python_full_version - |os[._]name - |sys[._]platform - |platform_(release|system) - |platform[._](version|machine|python_implementation) - |python_implementation - |implementation_(name|version) - |extras? - |dependency_groups - )\b - """, - re.VERBOSE, - ), - "SPECIFIER": re.compile( - Specifier._operator_regex_str + Specifier._version_regex_str, - re.VERBOSE | re.IGNORECASE, - ), - "AT": re.compile(r"\@"), - "URL": re.compile(r"[^ \t]+"), - "IDENTIFIER": re.compile(r"\b[a-zA-Z0-9][a-zA-Z0-9._-]*\b"), - "VERSION_PREFIX_TRAIL": re.compile(r"\.\*"), - "VERSION_LOCAL_LABEL_TRAIL": re.compile(r"\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*"), - "WS": re.compile(r"[ \t]+"), - "END": re.compile(r"$"), -} - - -class Tokenizer: - """Context-sensitive token parsing. - - Provides methods to examine the input stream to check whether the next token - matches. - """ - - def __init__( - self, - source: str, - *, - rules: Mapping[str, re.Pattern[str]], - ) -> None: - self.source = source - self.rules = rules - self.next_token: Token | None = None - self.position = 0 - - def consume(self, name: str) -> None: - """Move beyond provided token name, if at current position.""" - if self.check(name): - self.read() - - def check(self, name: str, *, peek: bool = False) -> bool: - """Check whether the next token has the provided name. - - By default, if the check succeeds, the token *must* be read before - another check. If `peek` is set to `True`, the token is not loaded and - would need to be checked again. - """ - assert self.next_token is None, ( - f"Cannot check for {name!r}, already have {self.next_token!r}" - ) - assert name in self.rules, f"Unknown token name: {name!r}" - - expression = self.rules[name] - - match = expression.match(self.source, self.position) - if match is None: - return False - if not peek: - self.next_token = Token(name, match[0], self.position) - return True - - def expect(self, name: str, *, expected: str) -> Token: - """Expect a certain token name next, failing with a syntax error otherwise. - - The token is *not* read. - """ - if not self.check(name): - raise self.raise_syntax_error(f"Expected {expected}") - return self.read() - - def read(self) -> Token: - """Consume the next token and return it.""" - token = self.next_token - assert token is not None - - self.position += len(token.text) - self.next_token = None - - return token - - def raise_syntax_error( - self, - message: str, - *, - span_start: int | None = None, - span_end: int | None = None, - ) -> NoReturn: - """Raise ParserSyntaxError at the given position.""" - span = ( - self.position if span_start is None else span_start, - self.position if span_end is None else span_end, - ) - raise ParserSyntaxError( - message, - source=self.source, - span=span, - ) - - @contextlib.contextmanager - def enclosing_tokens( - self, open_token: str, close_token: str, *, around: str - ) -> Generator[None, None, None]: - if self.check(open_token): - open_position = self.position - self.read() - else: - open_position = None - - yield - - if open_position is None: - return - - if not self.check(close_token): - self.raise_syntax_error( - f"Expected matching {close_token} for {open_token}, after {around}", - span_start=open_position, - ) - - self.read() diff --git a/myenv/lib/python3.12/site-packages/packaging/licenses/__init__.py b/myenv/lib/python3.12/site-packages/packaging/licenses/__init__.py deleted file mode 100644 index 335b275..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/licenses/__init__.py +++ /dev/null @@ -1,147 +0,0 @@ -####################################################################################### -# -# Adapted from: -# https://github.com/pypa/hatch/blob/5352e44/backend/src/hatchling/licenses/parse.py -# -# MIT License -# -# Copyright (c) 2017-present Ofek Lev -# -# Permission is hereby granted, free of charge, to any person obtaining a copy of this -# software and associated documentation files (the "Software"), to deal in the Software -# without restriction, including without limitation the rights to use, copy, modify, -# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be included in all copies -# or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# -# With additional allowance of arbitrary `LicenseRef-` identifiers, not just -# `LicenseRef-Public-Domain` and `LicenseRef-Proprietary`. -# -####################################################################################### -from __future__ import annotations - -import re -from typing import NewType, cast - -from ._spdx import EXCEPTIONS, LICENSES - -__all__ = [ - "InvalidLicenseExpression", - "NormalizedLicenseExpression", - "canonicalize_license_expression", -] - -license_ref_allowed = re.compile("^[A-Za-z0-9.-]*$") - -NormalizedLicenseExpression = NewType("NormalizedLicenseExpression", str) - - -class InvalidLicenseExpression(ValueError): - """Raised when a license-expression string is invalid - - >>> canonicalize_license_expression("invalid") - Traceback (most recent call last): - ... - packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid' - """ - - -def canonicalize_license_expression( - raw_license_expression: str, -) -> NormalizedLicenseExpression: - if not raw_license_expression: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - - # Pad any parentheses so tokenization can be achieved by merely splitting on - # whitespace. - license_expression = raw_license_expression.replace("(", " ( ").replace(")", " ) ") - licenseref_prefix = "LicenseRef-" - license_refs = { - ref.lower(): "LicenseRef-" + ref[len(licenseref_prefix) :] - for ref in license_expression.split() - if ref.lower().startswith(licenseref_prefix.lower()) - } - - # Normalize to lower case so we can look up licenses/exceptions - # and so boolean operators are Python-compatible. - license_expression = license_expression.lower() - - tokens = license_expression.split() - - # Rather than implementing a parenthesis/boolean logic parser, create an - # expression that Python can parse. Everything that is not involved with the - # grammar itself is replaced with the placeholder `False` and the resultant - # expression should become a valid Python expression. - python_tokens = [] - for token in tokens: - if token not in {"or", "and", "with", "(", ")"}: - python_tokens.append("False") - elif token == "with": - python_tokens.append("or") - elif ( - token == "(" - and python_tokens - and python_tokens[-1] not in {"or", "and", "("} - ) or (token == ")" and python_tokens and python_tokens[-1] == "("): - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - else: - python_tokens.append(token) - - python_expression = " ".join(python_tokens) - try: - compile(python_expression, "", "eval") - except SyntaxError: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) from None - - # Take a final pass to check for unknown licenses/exceptions. - normalized_tokens = [] - for token in tokens: - if token in {"or", "and", "with", "(", ")"}: - normalized_tokens.append(token.upper()) - continue - - if normalized_tokens and normalized_tokens[-1] == "WITH": - if token not in EXCEPTIONS: - message = f"Unknown license exception: {token!r}" - raise InvalidLicenseExpression(message) - - normalized_tokens.append(EXCEPTIONS[token]["id"]) - else: - if token.endswith("+"): - final_token = token[:-1] - suffix = "+" - else: - final_token = token - suffix = "" - - if final_token.startswith("licenseref-"): - if not license_ref_allowed.match(final_token): - message = f"Invalid licenseref: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(license_refs[final_token] + suffix) - else: - if final_token not in LICENSES: - message = f"Unknown license: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(LICENSES[final_token]["id"] + suffix) - - normalized_expression = " ".join(normalized_tokens) - - return cast( - "NormalizedLicenseExpression", - normalized_expression.replace("( ", "(").replace(" )", ")"), - ) diff --git a/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 230f6f0..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/_spdx.cpython-312.pyc b/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/_spdx.cpython-312.pyc deleted file mode 100644 index 5831772..0000000 Binary files a/myenv/lib/python3.12/site-packages/packaging/licenses/__pycache__/_spdx.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/packaging/licenses/_spdx.py b/myenv/lib/python3.12/site-packages/packaging/licenses/_spdx.py deleted file mode 100644 index a277af2..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/licenses/_spdx.py +++ /dev/null @@ -1,799 +0,0 @@ - -from __future__ import annotations - -from typing import TypedDict - -class SPDXLicense(TypedDict): - id: str - deprecated: bool - -class SPDXException(TypedDict): - id: str - deprecated: bool - - -VERSION = '3.27.0' - -LICENSES: dict[str, SPDXLicense] = { - '0bsd': {'id': '0BSD', 'deprecated': False}, - '3d-slicer-1.0': {'id': '3D-Slicer-1.0', 'deprecated': False}, - 'aal': {'id': 'AAL', 'deprecated': False}, - 'abstyles': {'id': 'Abstyles', 'deprecated': False}, - 'adacore-doc': {'id': 'AdaCore-doc', 'deprecated': False}, - 'adobe-2006': {'id': 'Adobe-2006', 'deprecated': False}, - 'adobe-display-postscript': {'id': 'Adobe-Display-PostScript', 'deprecated': False}, - 'adobe-glyph': {'id': 'Adobe-Glyph', 'deprecated': False}, - 'adobe-utopia': {'id': 'Adobe-Utopia', 'deprecated': False}, - 'adsl': {'id': 'ADSL', 'deprecated': False}, - 'afl-1.1': {'id': 'AFL-1.1', 'deprecated': False}, - 'afl-1.2': {'id': 'AFL-1.2', 'deprecated': False}, - 'afl-2.0': {'id': 'AFL-2.0', 'deprecated': False}, - 'afl-2.1': {'id': 'AFL-2.1', 'deprecated': False}, - 'afl-3.0': {'id': 'AFL-3.0', 'deprecated': False}, - 'afmparse': {'id': 'Afmparse', 'deprecated': False}, - 'agpl-1.0': {'id': 'AGPL-1.0', 'deprecated': True}, - 'agpl-1.0-only': {'id': 'AGPL-1.0-only', 'deprecated': False}, - 'agpl-1.0-or-later': {'id': 'AGPL-1.0-or-later', 'deprecated': False}, - 'agpl-3.0': {'id': 'AGPL-3.0', 'deprecated': True}, - 'agpl-3.0-only': {'id': 'AGPL-3.0-only', 'deprecated': False}, - 'agpl-3.0-or-later': {'id': 'AGPL-3.0-or-later', 'deprecated': False}, - 'aladdin': {'id': 'Aladdin', 'deprecated': False}, - 'amd-newlib': {'id': 'AMD-newlib', 'deprecated': False}, - 'amdplpa': {'id': 'AMDPLPA', 'deprecated': False}, - 'aml': {'id': 'AML', 'deprecated': False}, - 'aml-glslang': {'id': 'AML-glslang', 'deprecated': False}, - 'ampas': {'id': 'AMPAS', 'deprecated': False}, - 'antlr-pd': {'id': 'ANTLR-PD', 'deprecated': False}, - 'antlr-pd-fallback': {'id': 'ANTLR-PD-fallback', 'deprecated': False}, - 'any-osi': {'id': 'any-OSI', 'deprecated': False}, - 'any-osi-perl-modules': {'id': 'any-OSI-perl-modules', 'deprecated': False}, - 'apache-1.0': {'id': 'Apache-1.0', 'deprecated': False}, - 'apache-1.1': {'id': 'Apache-1.1', 'deprecated': False}, - 'apache-2.0': {'id': 'Apache-2.0', 'deprecated': False}, - 'apafml': {'id': 'APAFML', 'deprecated': False}, - 'apl-1.0': {'id': 'APL-1.0', 'deprecated': False}, - 'app-s2p': {'id': 'App-s2p', 'deprecated': False}, - 'apsl-1.0': {'id': 'APSL-1.0', 'deprecated': False}, - 'apsl-1.1': {'id': 'APSL-1.1', 'deprecated': False}, - 'apsl-1.2': {'id': 'APSL-1.2', 'deprecated': False}, - 'apsl-2.0': {'id': 'APSL-2.0', 'deprecated': False}, - 'arphic-1999': {'id': 'Arphic-1999', 'deprecated': False}, - 'artistic-1.0': {'id': 'Artistic-1.0', 'deprecated': False}, - 'artistic-1.0-cl8': {'id': 'Artistic-1.0-cl8', 'deprecated': False}, - 'artistic-1.0-perl': {'id': 'Artistic-1.0-Perl', 'deprecated': False}, - 'artistic-2.0': {'id': 'Artistic-2.0', 'deprecated': False}, - 'artistic-dist': {'id': 'Artistic-dist', 'deprecated': False}, - 'aspell-ru': {'id': 'Aspell-RU', 'deprecated': False}, - 'aswf-digital-assets-1.0': {'id': 'ASWF-Digital-Assets-1.0', 'deprecated': False}, - 'aswf-digital-assets-1.1': {'id': 'ASWF-Digital-Assets-1.1', 'deprecated': False}, - 'baekmuk': {'id': 'Baekmuk', 'deprecated': False}, - 'bahyph': {'id': 'Bahyph', 'deprecated': False}, - 'barr': {'id': 'Barr', 'deprecated': False}, - 'bcrypt-solar-designer': {'id': 'bcrypt-Solar-Designer', 'deprecated': False}, - 'beerware': {'id': 'Beerware', 'deprecated': False}, - 'bitstream-charter': {'id': 'Bitstream-Charter', 'deprecated': False}, - 'bitstream-vera': {'id': 'Bitstream-Vera', 'deprecated': False}, - 'bittorrent-1.0': {'id': 'BitTorrent-1.0', 'deprecated': False}, - 'bittorrent-1.1': {'id': 'BitTorrent-1.1', 'deprecated': False}, - 'blessing': {'id': 'blessing', 'deprecated': False}, - 'blueoak-1.0.0': {'id': 'BlueOak-1.0.0', 'deprecated': False}, - 'boehm-gc': {'id': 'Boehm-GC', 'deprecated': False}, - 'boehm-gc-without-fee': {'id': 'Boehm-GC-without-fee', 'deprecated': False}, - 'borceux': {'id': 'Borceux', 'deprecated': False}, - 'brian-gladman-2-clause': {'id': 'Brian-Gladman-2-Clause', 'deprecated': False}, - 'brian-gladman-3-clause': {'id': 'Brian-Gladman-3-Clause', 'deprecated': False}, - 'bsd-1-clause': {'id': 'BSD-1-Clause', 'deprecated': False}, - 'bsd-2-clause': {'id': 'BSD-2-Clause', 'deprecated': False}, - 'bsd-2-clause-darwin': {'id': 'BSD-2-Clause-Darwin', 'deprecated': False}, - 'bsd-2-clause-first-lines': {'id': 'BSD-2-Clause-first-lines', 'deprecated': False}, - 'bsd-2-clause-freebsd': {'id': 'BSD-2-Clause-FreeBSD', 'deprecated': True}, - 'bsd-2-clause-netbsd': {'id': 'BSD-2-Clause-NetBSD', 'deprecated': True}, - 'bsd-2-clause-patent': {'id': 'BSD-2-Clause-Patent', 'deprecated': False}, - 'bsd-2-clause-pkgconf-disclaimer': {'id': 'BSD-2-Clause-pkgconf-disclaimer', 'deprecated': False}, - 'bsd-2-clause-views': {'id': 'BSD-2-Clause-Views', 'deprecated': False}, - 'bsd-3-clause': {'id': 'BSD-3-Clause', 'deprecated': False}, - 'bsd-3-clause-acpica': {'id': 'BSD-3-Clause-acpica', 'deprecated': False}, - 'bsd-3-clause-attribution': {'id': 'BSD-3-Clause-Attribution', 'deprecated': False}, - 'bsd-3-clause-clear': {'id': 'BSD-3-Clause-Clear', 'deprecated': False}, - 'bsd-3-clause-flex': {'id': 'BSD-3-Clause-flex', 'deprecated': False}, - 'bsd-3-clause-hp': {'id': 'BSD-3-Clause-HP', 'deprecated': False}, - 'bsd-3-clause-lbnl': {'id': 'BSD-3-Clause-LBNL', 'deprecated': False}, - 'bsd-3-clause-modification': {'id': 'BSD-3-Clause-Modification', 'deprecated': False}, - 'bsd-3-clause-no-military-license': {'id': 'BSD-3-Clause-No-Military-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license': {'id': 'BSD-3-Clause-No-Nuclear-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license-2014': {'id': 'BSD-3-Clause-No-Nuclear-License-2014', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-warranty': {'id': 'BSD-3-Clause-No-Nuclear-Warranty', 'deprecated': False}, - 'bsd-3-clause-open-mpi': {'id': 'BSD-3-Clause-Open-MPI', 'deprecated': False}, - 'bsd-3-clause-sun': {'id': 'BSD-3-Clause-Sun', 'deprecated': False}, - 'bsd-4-clause': {'id': 'BSD-4-Clause', 'deprecated': False}, - 'bsd-4-clause-shortened': {'id': 'BSD-4-Clause-Shortened', 'deprecated': False}, - 'bsd-4-clause-uc': {'id': 'BSD-4-Clause-UC', 'deprecated': False}, - 'bsd-4.3reno': {'id': 'BSD-4.3RENO', 'deprecated': False}, - 'bsd-4.3tahoe': {'id': 'BSD-4.3TAHOE', 'deprecated': False}, - 'bsd-advertising-acknowledgement': {'id': 'BSD-Advertising-Acknowledgement', 'deprecated': False}, - 'bsd-attribution-hpnd-disclaimer': {'id': 'BSD-Attribution-HPND-disclaimer', 'deprecated': False}, - 'bsd-inferno-nettverk': {'id': 'BSD-Inferno-Nettverk', 'deprecated': False}, - 'bsd-protection': {'id': 'BSD-Protection', 'deprecated': False}, - 'bsd-source-beginning-file': {'id': 'BSD-Source-beginning-file', 'deprecated': False}, - 'bsd-source-code': {'id': 'BSD-Source-Code', 'deprecated': False}, - 'bsd-systemics': {'id': 'BSD-Systemics', 'deprecated': False}, - 'bsd-systemics-w3works': {'id': 'BSD-Systemics-W3Works', 'deprecated': False}, - 'bsl-1.0': {'id': 'BSL-1.0', 'deprecated': False}, - 'busl-1.1': {'id': 'BUSL-1.1', 'deprecated': False}, - 'bzip2-1.0.5': {'id': 'bzip2-1.0.5', 'deprecated': True}, - 'bzip2-1.0.6': {'id': 'bzip2-1.0.6', 'deprecated': False}, - 'c-uda-1.0': {'id': 'C-UDA-1.0', 'deprecated': False}, - 'cal-1.0': {'id': 'CAL-1.0', 'deprecated': False}, - 'cal-1.0-combined-work-exception': {'id': 'CAL-1.0-Combined-Work-Exception', 'deprecated': False}, - 'caldera': {'id': 'Caldera', 'deprecated': False}, - 'caldera-no-preamble': {'id': 'Caldera-no-preamble', 'deprecated': False}, - 'catharon': {'id': 'Catharon', 'deprecated': False}, - 'catosl-1.1': {'id': 'CATOSL-1.1', 'deprecated': False}, - 'cc-by-1.0': {'id': 'CC-BY-1.0', 'deprecated': False}, - 'cc-by-2.0': {'id': 'CC-BY-2.0', 'deprecated': False}, - 'cc-by-2.5': {'id': 'CC-BY-2.5', 'deprecated': False}, - 'cc-by-2.5-au': {'id': 'CC-BY-2.5-AU', 'deprecated': False}, - 'cc-by-3.0': {'id': 'CC-BY-3.0', 'deprecated': False}, - 'cc-by-3.0-at': {'id': 'CC-BY-3.0-AT', 'deprecated': False}, - 'cc-by-3.0-au': {'id': 'CC-BY-3.0-AU', 'deprecated': False}, - 'cc-by-3.0-de': {'id': 'CC-BY-3.0-DE', 'deprecated': False}, - 'cc-by-3.0-igo': {'id': 'CC-BY-3.0-IGO', 'deprecated': False}, - 'cc-by-3.0-nl': {'id': 'CC-BY-3.0-NL', 'deprecated': False}, - 'cc-by-3.0-us': {'id': 'CC-BY-3.0-US', 'deprecated': False}, - 'cc-by-4.0': {'id': 'CC-BY-4.0', 'deprecated': False}, - 'cc-by-nc-1.0': {'id': 'CC-BY-NC-1.0', 'deprecated': False}, - 'cc-by-nc-2.0': {'id': 'CC-BY-NC-2.0', 'deprecated': False}, - 'cc-by-nc-2.5': {'id': 'CC-BY-NC-2.5', 'deprecated': False}, - 'cc-by-nc-3.0': {'id': 'CC-BY-NC-3.0', 'deprecated': False}, - 'cc-by-nc-3.0-de': {'id': 'CC-BY-NC-3.0-DE', 'deprecated': False}, - 'cc-by-nc-4.0': {'id': 'CC-BY-NC-4.0', 'deprecated': False}, - 'cc-by-nc-nd-1.0': {'id': 'CC-BY-NC-ND-1.0', 'deprecated': False}, - 'cc-by-nc-nd-2.0': {'id': 'CC-BY-NC-ND-2.0', 'deprecated': False}, - 'cc-by-nc-nd-2.5': {'id': 'CC-BY-NC-ND-2.5', 'deprecated': False}, - 'cc-by-nc-nd-3.0': {'id': 'CC-BY-NC-ND-3.0', 'deprecated': False}, - 'cc-by-nc-nd-3.0-de': {'id': 'CC-BY-NC-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nc-nd-3.0-igo': {'id': 'CC-BY-NC-ND-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-nd-4.0': {'id': 'CC-BY-NC-ND-4.0', 'deprecated': False}, - 'cc-by-nc-sa-1.0': {'id': 'CC-BY-NC-SA-1.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0': {'id': 'CC-BY-NC-SA-2.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0-de': {'id': 'CC-BY-NC-SA-2.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-2.0-fr': {'id': 'CC-BY-NC-SA-2.0-FR', 'deprecated': False}, - 'cc-by-nc-sa-2.0-uk': {'id': 'CC-BY-NC-SA-2.0-UK', 'deprecated': False}, - 'cc-by-nc-sa-2.5': {'id': 'CC-BY-NC-SA-2.5', 'deprecated': False}, - 'cc-by-nc-sa-3.0': {'id': 'CC-BY-NC-SA-3.0', 'deprecated': False}, - 'cc-by-nc-sa-3.0-de': {'id': 'CC-BY-NC-SA-3.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-3.0-igo': {'id': 'CC-BY-NC-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-sa-4.0': {'id': 'CC-BY-NC-SA-4.0', 'deprecated': False}, - 'cc-by-nd-1.0': {'id': 'CC-BY-ND-1.0', 'deprecated': False}, - 'cc-by-nd-2.0': {'id': 'CC-BY-ND-2.0', 'deprecated': False}, - 'cc-by-nd-2.5': {'id': 'CC-BY-ND-2.5', 'deprecated': False}, - 'cc-by-nd-3.0': {'id': 'CC-BY-ND-3.0', 'deprecated': False}, - 'cc-by-nd-3.0-de': {'id': 'CC-BY-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nd-4.0': {'id': 'CC-BY-ND-4.0', 'deprecated': False}, - 'cc-by-sa-1.0': {'id': 'CC-BY-SA-1.0', 'deprecated': False}, - 'cc-by-sa-2.0': {'id': 'CC-BY-SA-2.0', 'deprecated': False}, - 'cc-by-sa-2.0-uk': {'id': 'CC-BY-SA-2.0-UK', 'deprecated': False}, - 'cc-by-sa-2.1-jp': {'id': 'CC-BY-SA-2.1-JP', 'deprecated': False}, - 'cc-by-sa-2.5': {'id': 'CC-BY-SA-2.5', 'deprecated': False}, - 'cc-by-sa-3.0': {'id': 'CC-BY-SA-3.0', 'deprecated': False}, - 'cc-by-sa-3.0-at': {'id': 'CC-BY-SA-3.0-AT', 'deprecated': False}, - 'cc-by-sa-3.0-de': {'id': 'CC-BY-SA-3.0-DE', 'deprecated': False}, - 'cc-by-sa-3.0-igo': {'id': 'CC-BY-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-sa-4.0': {'id': 'CC-BY-SA-4.0', 'deprecated': False}, - 'cc-pddc': {'id': 'CC-PDDC', 'deprecated': False}, - 'cc-pdm-1.0': {'id': 'CC-PDM-1.0', 'deprecated': False}, - 'cc-sa-1.0': {'id': 'CC-SA-1.0', 'deprecated': False}, - 'cc0-1.0': {'id': 'CC0-1.0', 'deprecated': False}, - 'cddl-1.0': {'id': 'CDDL-1.0', 'deprecated': False}, - 'cddl-1.1': {'id': 'CDDL-1.1', 'deprecated': False}, - 'cdl-1.0': {'id': 'CDL-1.0', 'deprecated': False}, - 'cdla-permissive-1.0': {'id': 'CDLA-Permissive-1.0', 'deprecated': False}, - 'cdla-permissive-2.0': {'id': 'CDLA-Permissive-2.0', 'deprecated': False}, - 'cdla-sharing-1.0': {'id': 'CDLA-Sharing-1.0', 'deprecated': False}, - 'cecill-1.0': {'id': 'CECILL-1.0', 'deprecated': False}, - 'cecill-1.1': {'id': 'CECILL-1.1', 'deprecated': False}, - 'cecill-2.0': {'id': 'CECILL-2.0', 'deprecated': False}, - 'cecill-2.1': {'id': 'CECILL-2.1', 'deprecated': False}, - 'cecill-b': {'id': 'CECILL-B', 'deprecated': False}, - 'cecill-c': {'id': 'CECILL-C', 'deprecated': False}, - 'cern-ohl-1.1': {'id': 'CERN-OHL-1.1', 'deprecated': False}, - 'cern-ohl-1.2': {'id': 'CERN-OHL-1.2', 'deprecated': False}, - 'cern-ohl-p-2.0': {'id': 'CERN-OHL-P-2.0', 'deprecated': False}, - 'cern-ohl-s-2.0': {'id': 'CERN-OHL-S-2.0', 'deprecated': False}, - 'cern-ohl-w-2.0': {'id': 'CERN-OHL-W-2.0', 'deprecated': False}, - 'cfitsio': {'id': 'CFITSIO', 'deprecated': False}, - 'check-cvs': {'id': 'check-cvs', 'deprecated': False}, - 'checkmk': {'id': 'checkmk', 'deprecated': False}, - 'clartistic': {'id': 'ClArtistic', 'deprecated': False}, - 'clips': {'id': 'Clips', 'deprecated': False}, - 'cmu-mach': {'id': 'CMU-Mach', 'deprecated': False}, - 'cmu-mach-nodoc': {'id': 'CMU-Mach-nodoc', 'deprecated': False}, - 'cnri-jython': {'id': 'CNRI-Jython', 'deprecated': False}, - 'cnri-python': {'id': 'CNRI-Python', 'deprecated': False}, - 'cnri-python-gpl-compatible': {'id': 'CNRI-Python-GPL-Compatible', 'deprecated': False}, - 'coil-1.0': {'id': 'COIL-1.0', 'deprecated': False}, - 'community-spec-1.0': {'id': 'Community-Spec-1.0', 'deprecated': False}, - 'condor-1.1': {'id': 'Condor-1.1', 'deprecated': False}, - 'copyleft-next-0.3.0': {'id': 'copyleft-next-0.3.0', 'deprecated': False}, - 'copyleft-next-0.3.1': {'id': 'copyleft-next-0.3.1', 'deprecated': False}, - 'cornell-lossless-jpeg': {'id': 'Cornell-Lossless-JPEG', 'deprecated': False}, - 'cpal-1.0': {'id': 'CPAL-1.0', 'deprecated': False}, - 'cpl-1.0': {'id': 'CPL-1.0', 'deprecated': False}, - 'cpol-1.02': {'id': 'CPOL-1.02', 'deprecated': False}, - 'cronyx': {'id': 'Cronyx', 'deprecated': False}, - 'crossword': {'id': 'Crossword', 'deprecated': False}, - 'cryptoswift': {'id': 'CryptoSwift', 'deprecated': False}, - 'crystalstacker': {'id': 'CrystalStacker', 'deprecated': False}, - 'cua-opl-1.0': {'id': 'CUA-OPL-1.0', 'deprecated': False}, - 'cube': {'id': 'Cube', 'deprecated': False}, - 'curl': {'id': 'curl', 'deprecated': False}, - 'cve-tou': {'id': 'cve-tou', 'deprecated': False}, - 'd-fsl-1.0': {'id': 'D-FSL-1.0', 'deprecated': False}, - 'dec-3-clause': {'id': 'DEC-3-Clause', 'deprecated': False}, - 'diffmark': {'id': 'diffmark', 'deprecated': False}, - 'dl-de-by-2.0': {'id': 'DL-DE-BY-2.0', 'deprecated': False}, - 'dl-de-zero-2.0': {'id': 'DL-DE-ZERO-2.0', 'deprecated': False}, - 'doc': {'id': 'DOC', 'deprecated': False}, - 'docbook-dtd': {'id': 'DocBook-DTD', 'deprecated': False}, - 'docbook-schema': {'id': 'DocBook-Schema', 'deprecated': False}, - 'docbook-stylesheet': {'id': 'DocBook-Stylesheet', 'deprecated': False}, - 'docbook-xml': {'id': 'DocBook-XML', 'deprecated': False}, - 'dotseqn': {'id': 'Dotseqn', 'deprecated': False}, - 'drl-1.0': {'id': 'DRL-1.0', 'deprecated': False}, - 'drl-1.1': {'id': 'DRL-1.1', 'deprecated': False}, - 'dsdp': {'id': 'DSDP', 'deprecated': False}, - 'dtoa': {'id': 'dtoa', 'deprecated': False}, - 'dvipdfm': {'id': 'dvipdfm', 'deprecated': False}, - 'ecl-1.0': {'id': 'ECL-1.0', 'deprecated': False}, - 'ecl-2.0': {'id': 'ECL-2.0', 'deprecated': False}, - 'ecos-2.0': {'id': 'eCos-2.0', 'deprecated': True}, - 'efl-1.0': {'id': 'EFL-1.0', 'deprecated': False}, - 'efl-2.0': {'id': 'EFL-2.0', 'deprecated': False}, - 'egenix': {'id': 'eGenix', 'deprecated': False}, - 'elastic-2.0': {'id': 'Elastic-2.0', 'deprecated': False}, - 'entessa': {'id': 'Entessa', 'deprecated': False}, - 'epics': {'id': 'EPICS', 'deprecated': False}, - 'epl-1.0': {'id': 'EPL-1.0', 'deprecated': False}, - 'epl-2.0': {'id': 'EPL-2.0', 'deprecated': False}, - 'erlpl-1.1': {'id': 'ErlPL-1.1', 'deprecated': False}, - 'etalab-2.0': {'id': 'etalab-2.0', 'deprecated': False}, - 'eudatagrid': {'id': 'EUDatagrid', 'deprecated': False}, - 'eupl-1.0': {'id': 'EUPL-1.0', 'deprecated': False}, - 'eupl-1.1': {'id': 'EUPL-1.1', 'deprecated': False}, - 'eupl-1.2': {'id': 'EUPL-1.2', 'deprecated': False}, - 'eurosym': {'id': 'Eurosym', 'deprecated': False}, - 'fair': {'id': 'Fair', 'deprecated': False}, - 'fbm': {'id': 'FBM', 'deprecated': False}, - 'fdk-aac': {'id': 'FDK-AAC', 'deprecated': False}, - 'ferguson-twofish': {'id': 'Ferguson-Twofish', 'deprecated': False}, - 'frameworx-1.0': {'id': 'Frameworx-1.0', 'deprecated': False}, - 'freebsd-doc': {'id': 'FreeBSD-DOC', 'deprecated': False}, - 'freeimage': {'id': 'FreeImage', 'deprecated': False}, - 'fsfap': {'id': 'FSFAP', 'deprecated': False}, - 'fsfap-no-warranty-disclaimer': {'id': 'FSFAP-no-warranty-disclaimer', 'deprecated': False}, - 'fsful': {'id': 'FSFUL', 'deprecated': False}, - 'fsfullr': {'id': 'FSFULLR', 'deprecated': False}, - 'fsfullrsd': {'id': 'FSFULLRSD', 'deprecated': False}, - 'fsfullrwd': {'id': 'FSFULLRWD', 'deprecated': False}, - 'fsl-1.1-alv2': {'id': 'FSL-1.1-ALv2', 'deprecated': False}, - 'fsl-1.1-mit': {'id': 'FSL-1.1-MIT', 'deprecated': False}, - 'ftl': {'id': 'FTL', 'deprecated': False}, - 'furuseth': {'id': 'Furuseth', 'deprecated': False}, - 'fwlw': {'id': 'fwlw', 'deprecated': False}, - 'game-programming-gems': {'id': 'Game-Programming-Gems', 'deprecated': False}, - 'gcr-docs': {'id': 'GCR-docs', 'deprecated': False}, - 'gd': {'id': 'GD', 'deprecated': False}, - 'generic-xts': {'id': 'generic-xts', 'deprecated': False}, - 'gfdl-1.1': {'id': 'GFDL-1.1', 'deprecated': True}, - 'gfdl-1.1-invariants-only': {'id': 'GFDL-1.1-invariants-only', 'deprecated': False}, - 'gfdl-1.1-invariants-or-later': {'id': 'GFDL-1.1-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-no-invariants-only': {'id': 'GFDL-1.1-no-invariants-only', 'deprecated': False}, - 'gfdl-1.1-no-invariants-or-later': {'id': 'GFDL-1.1-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-only': {'id': 'GFDL-1.1-only', 'deprecated': False}, - 'gfdl-1.1-or-later': {'id': 'GFDL-1.1-or-later', 'deprecated': False}, - 'gfdl-1.2': {'id': 'GFDL-1.2', 'deprecated': True}, - 'gfdl-1.2-invariants-only': {'id': 'GFDL-1.2-invariants-only', 'deprecated': False}, - 'gfdl-1.2-invariants-or-later': {'id': 'GFDL-1.2-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-no-invariants-only': {'id': 'GFDL-1.2-no-invariants-only', 'deprecated': False}, - 'gfdl-1.2-no-invariants-or-later': {'id': 'GFDL-1.2-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-only': {'id': 'GFDL-1.2-only', 'deprecated': False}, - 'gfdl-1.2-or-later': {'id': 'GFDL-1.2-or-later', 'deprecated': False}, - 'gfdl-1.3': {'id': 'GFDL-1.3', 'deprecated': True}, - 'gfdl-1.3-invariants-only': {'id': 'GFDL-1.3-invariants-only', 'deprecated': False}, - 'gfdl-1.3-invariants-or-later': {'id': 'GFDL-1.3-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-no-invariants-only': {'id': 'GFDL-1.3-no-invariants-only', 'deprecated': False}, - 'gfdl-1.3-no-invariants-or-later': {'id': 'GFDL-1.3-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-only': {'id': 'GFDL-1.3-only', 'deprecated': False}, - 'gfdl-1.3-or-later': {'id': 'GFDL-1.3-or-later', 'deprecated': False}, - 'giftware': {'id': 'Giftware', 'deprecated': False}, - 'gl2ps': {'id': 'GL2PS', 'deprecated': False}, - 'glide': {'id': 'Glide', 'deprecated': False}, - 'glulxe': {'id': 'Glulxe', 'deprecated': False}, - 'glwtpl': {'id': 'GLWTPL', 'deprecated': False}, - 'gnuplot': {'id': 'gnuplot', 'deprecated': False}, - 'gpl-1.0': {'id': 'GPL-1.0', 'deprecated': True}, - 'gpl-1.0+': {'id': 'GPL-1.0+', 'deprecated': True}, - 'gpl-1.0-only': {'id': 'GPL-1.0-only', 'deprecated': False}, - 'gpl-1.0-or-later': {'id': 'GPL-1.0-or-later', 'deprecated': False}, - 'gpl-2.0': {'id': 'GPL-2.0', 'deprecated': True}, - 'gpl-2.0+': {'id': 'GPL-2.0+', 'deprecated': True}, - 'gpl-2.0-only': {'id': 'GPL-2.0-only', 'deprecated': False}, - 'gpl-2.0-or-later': {'id': 'GPL-2.0-or-later', 'deprecated': False}, - 'gpl-2.0-with-autoconf-exception': {'id': 'GPL-2.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-2.0-with-bison-exception': {'id': 'GPL-2.0-with-bison-exception', 'deprecated': True}, - 'gpl-2.0-with-classpath-exception': {'id': 'GPL-2.0-with-classpath-exception', 'deprecated': True}, - 'gpl-2.0-with-font-exception': {'id': 'GPL-2.0-with-font-exception', 'deprecated': True}, - 'gpl-2.0-with-gcc-exception': {'id': 'GPL-2.0-with-GCC-exception', 'deprecated': True}, - 'gpl-3.0': {'id': 'GPL-3.0', 'deprecated': True}, - 'gpl-3.0+': {'id': 'GPL-3.0+', 'deprecated': True}, - 'gpl-3.0-only': {'id': 'GPL-3.0-only', 'deprecated': False}, - 'gpl-3.0-or-later': {'id': 'GPL-3.0-or-later', 'deprecated': False}, - 'gpl-3.0-with-autoconf-exception': {'id': 'GPL-3.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-3.0-with-gcc-exception': {'id': 'GPL-3.0-with-GCC-exception', 'deprecated': True}, - 'graphics-gems': {'id': 'Graphics-Gems', 'deprecated': False}, - 'gsoap-1.3b': {'id': 'gSOAP-1.3b', 'deprecated': False}, - 'gtkbook': {'id': 'gtkbook', 'deprecated': False}, - 'gutmann': {'id': 'Gutmann', 'deprecated': False}, - 'haskellreport': {'id': 'HaskellReport', 'deprecated': False}, - 'hdf5': {'id': 'HDF5', 'deprecated': False}, - 'hdparm': {'id': 'hdparm', 'deprecated': False}, - 'hidapi': {'id': 'HIDAPI', 'deprecated': False}, - 'hippocratic-2.1': {'id': 'Hippocratic-2.1', 'deprecated': False}, - 'hp-1986': {'id': 'HP-1986', 'deprecated': False}, - 'hp-1989': {'id': 'HP-1989', 'deprecated': False}, - 'hpnd': {'id': 'HPND', 'deprecated': False}, - 'hpnd-dec': {'id': 'HPND-DEC', 'deprecated': False}, - 'hpnd-doc': {'id': 'HPND-doc', 'deprecated': False}, - 'hpnd-doc-sell': {'id': 'HPND-doc-sell', 'deprecated': False}, - 'hpnd-export-us': {'id': 'HPND-export-US', 'deprecated': False}, - 'hpnd-export-us-acknowledgement': {'id': 'HPND-export-US-acknowledgement', 'deprecated': False}, - 'hpnd-export-us-modify': {'id': 'HPND-export-US-modify', 'deprecated': False}, - 'hpnd-export2-us': {'id': 'HPND-export2-US', 'deprecated': False}, - 'hpnd-fenneberg-livingston': {'id': 'HPND-Fenneberg-Livingston', 'deprecated': False}, - 'hpnd-inria-imag': {'id': 'HPND-INRIA-IMAG', 'deprecated': False}, - 'hpnd-intel': {'id': 'HPND-Intel', 'deprecated': False}, - 'hpnd-kevlin-henney': {'id': 'HPND-Kevlin-Henney', 'deprecated': False}, - 'hpnd-markus-kuhn': {'id': 'HPND-Markus-Kuhn', 'deprecated': False}, - 'hpnd-merchantability-variant': {'id': 'HPND-merchantability-variant', 'deprecated': False}, - 'hpnd-mit-disclaimer': {'id': 'HPND-MIT-disclaimer', 'deprecated': False}, - 'hpnd-netrek': {'id': 'HPND-Netrek', 'deprecated': False}, - 'hpnd-pbmplus': {'id': 'HPND-Pbmplus', 'deprecated': False}, - 'hpnd-sell-mit-disclaimer-xserver': {'id': 'HPND-sell-MIT-disclaimer-xserver', 'deprecated': False}, - 'hpnd-sell-regexpr': {'id': 'HPND-sell-regexpr', 'deprecated': False}, - 'hpnd-sell-variant': {'id': 'HPND-sell-variant', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer': {'id': 'HPND-sell-variant-MIT-disclaimer', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer-rev': {'id': 'HPND-sell-variant-MIT-disclaimer-rev', 'deprecated': False}, - 'hpnd-uc': {'id': 'HPND-UC', 'deprecated': False}, - 'hpnd-uc-export-us': {'id': 'HPND-UC-export-US', 'deprecated': False}, - 'htmltidy': {'id': 'HTMLTIDY', 'deprecated': False}, - 'ibm-pibs': {'id': 'IBM-pibs', 'deprecated': False}, - 'icu': {'id': 'ICU', 'deprecated': False}, - 'iec-code-components-eula': {'id': 'IEC-Code-Components-EULA', 'deprecated': False}, - 'ijg': {'id': 'IJG', 'deprecated': False}, - 'ijg-short': {'id': 'IJG-short', 'deprecated': False}, - 'imagemagick': {'id': 'ImageMagick', 'deprecated': False}, - 'imatix': {'id': 'iMatix', 'deprecated': False}, - 'imlib2': {'id': 'Imlib2', 'deprecated': False}, - 'info-zip': {'id': 'Info-ZIP', 'deprecated': False}, - 'inner-net-2.0': {'id': 'Inner-Net-2.0', 'deprecated': False}, - 'innosetup': {'id': 'InnoSetup', 'deprecated': False}, - 'intel': {'id': 'Intel', 'deprecated': False}, - 'intel-acpi': {'id': 'Intel-ACPI', 'deprecated': False}, - 'interbase-1.0': {'id': 'Interbase-1.0', 'deprecated': False}, - 'ipa': {'id': 'IPA', 'deprecated': False}, - 'ipl-1.0': {'id': 'IPL-1.0', 'deprecated': False}, - 'isc': {'id': 'ISC', 'deprecated': False}, - 'isc-veillard': {'id': 'ISC-Veillard', 'deprecated': False}, - 'jam': {'id': 'Jam', 'deprecated': False}, - 'jasper-2.0': {'id': 'JasPer-2.0', 'deprecated': False}, - 'jove': {'id': 'jove', 'deprecated': False}, - 'jpl-image': {'id': 'JPL-image', 'deprecated': False}, - 'jpnic': {'id': 'JPNIC', 'deprecated': False}, - 'json': {'id': 'JSON', 'deprecated': False}, - 'kastrup': {'id': 'Kastrup', 'deprecated': False}, - 'kazlib': {'id': 'Kazlib', 'deprecated': False}, - 'knuth-ctan': {'id': 'Knuth-CTAN', 'deprecated': False}, - 'lal-1.2': {'id': 'LAL-1.2', 'deprecated': False}, - 'lal-1.3': {'id': 'LAL-1.3', 'deprecated': False}, - 'latex2e': {'id': 'Latex2e', 'deprecated': False}, - 'latex2e-translated-notice': {'id': 'Latex2e-translated-notice', 'deprecated': False}, - 'leptonica': {'id': 'Leptonica', 'deprecated': False}, - 'lgpl-2.0': {'id': 'LGPL-2.0', 'deprecated': True}, - 'lgpl-2.0+': {'id': 'LGPL-2.0+', 'deprecated': True}, - 'lgpl-2.0-only': {'id': 'LGPL-2.0-only', 'deprecated': False}, - 'lgpl-2.0-or-later': {'id': 'LGPL-2.0-or-later', 'deprecated': False}, - 'lgpl-2.1': {'id': 'LGPL-2.1', 'deprecated': True}, - 'lgpl-2.1+': {'id': 'LGPL-2.1+', 'deprecated': True}, - 'lgpl-2.1-only': {'id': 'LGPL-2.1-only', 'deprecated': False}, - 'lgpl-2.1-or-later': {'id': 'LGPL-2.1-or-later', 'deprecated': False}, - 'lgpl-3.0': {'id': 'LGPL-3.0', 'deprecated': True}, - 'lgpl-3.0+': {'id': 'LGPL-3.0+', 'deprecated': True}, - 'lgpl-3.0-only': {'id': 'LGPL-3.0-only', 'deprecated': False}, - 'lgpl-3.0-or-later': {'id': 'LGPL-3.0-or-later', 'deprecated': False}, - 'lgpllr': {'id': 'LGPLLR', 'deprecated': False}, - 'libpng': {'id': 'Libpng', 'deprecated': False}, - 'libpng-1.6.35': {'id': 'libpng-1.6.35', 'deprecated': False}, - 'libpng-2.0': {'id': 'libpng-2.0', 'deprecated': False}, - 'libselinux-1.0': {'id': 'libselinux-1.0', 'deprecated': False}, - 'libtiff': {'id': 'libtiff', 'deprecated': False}, - 'libutil-david-nugent': {'id': 'libutil-David-Nugent', 'deprecated': False}, - 'liliq-p-1.1': {'id': 'LiLiQ-P-1.1', 'deprecated': False}, - 'liliq-r-1.1': {'id': 'LiLiQ-R-1.1', 'deprecated': False}, - 'liliq-rplus-1.1': {'id': 'LiLiQ-Rplus-1.1', 'deprecated': False}, - 'linux-man-pages-1-para': {'id': 'Linux-man-pages-1-para', 'deprecated': False}, - 'linux-man-pages-copyleft': {'id': 'Linux-man-pages-copyleft', 'deprecated': False}, - 'linux-man-pages-copyleft-2-para': {'id': 'Linux-man-pages-copyleft-2-para', 'deprecated': False}, - 'linux-man-pages-copyleft-var': {'id': 'Linux-man-pages-copyleft-var', 'deprecated': False}, - 'linux-openib': {'id': 'Linux-OpenIB', 'deprecated': False}, - 'loop': {'id': 'LOOP', 'deprecated': False}, - 'lpd-document': {'id': 'LPD-document', 'deprecated': False}, - 'lpl-1.0': {'id': 'LPL-1.0', 'deprecated': False}, - 'lpl-1.02': {'id': 'LPL-1.02', 'deprecated': False}, - 'lppl-1.0': {'id': 'LPPL-1.0', 'deprecated': False}, - 'lppl-1.1': {'id': 'LPPL-1.1', 'deprecated': False}, - 'lppl-1.2': {'id': 'LPPL-1.2', 'deprecated': False}, - 'lppl-1.3a': {'id': 'LPPL-1.3a', 'deprecated': False}, - 'lppl-1.3c': {'id': 'LPPL-1.3c', 'deprecated': False}, - 'lsof': {'id': 'lsof', 'deprecated': False}, - 'lucida-bitmap-fonts': {'id': 'Lucida-Bitmap-Fonts', 'deprecated': False}, - 'lzma-sdk-9.11-to-9.20': {'id': 'LZMA-SDK-9.11-to-9.20', 'deprecated': False}, - 'lzma-sdk-9.22': {'id': 'LZMA-SDK-9.22', 'deprecated': False}, - 'mackerras-3-clause': {'id': 'Mackerras-3-Clause', 'deprecated': False}, - 'mackerras-3-clause-acknowledgment': {'id': 'Mackerras-3-Clause-acknowledgment', 'deprecated': False}, - 'magaz': {'id': 'magaz', 'deprecated': False}, - 'mailprio': {'id': 'mailprio', 'deprecated': False}, - 'makeindex': {'id': 'MakeIndex', 'deprecated': False}, - 'man2html': {'id': 'man2html', 'deprecated': False}, - 'martin-birgmeier': {'id': 'Martin-Birgmeier', 'deprecated': False}, - 'mcphee-slideshow': {'id': 'McPhee-slideshow', 'deprecated': False}, - 'metamail': {'id': 'metamail', 'deprecated': False}, - 'minpack': {'id': 'Minpack', 'deprecated': False}, - 'mips': {'id': 'MIPS', 'deprecated': False}, - 'miros': {'id': 'MirOS', 'deprecated': False}, - 'mit': {'id': 'MIT', 'deprecated': False}, - 'mit-0': {'id': 'MIT-0', 'deprecated': False}, - 'mit-advertising': {'id': 'MIT-advertising', 'deprecated': False}, - 'mit-click': {'id': 'MIT-Click', 'deprecated': False}, - 'mit-cmu': {'id': 'MIT-CMU', 'deprecated': False}, - 'mit-enna': {'id': 'MIT-enna', 'deprecated': False}, - 'mit-feh': {'id': 'MIT-feh', 'deprecated': False}, - 'mit-festival': {'id': 'MIT-Festival', 'deprecated': False}, - 'mit-khronos-old': {'id': 'MIT-Khronos-old', 'deprecated': False}, - 'mit-modern-variant': {'id': 'MIT-Modern-Variant', 'deprecated': False}, - 'mit-open-group': {'id': 'MIT-open-group', 'deprecated': False}, - 'mit-testregex': {'id': 'MIT-testregex', 'deprecated': False}, - 'mit-wu': {'id': 'MIT-Wu', 'deprecated': False}, - 'mitnfa': {'id': 'MITNFA', 'deprecated': False}, - 'mmixware': {'id': 'MMIXware', 'deprecated': False}, - 'motosoto': {'id': 'Motosoto', 'deprecated': False}, - 'mpeg-ssg': {'id': 'MPEG-SSG', 'deprecated': False}, - 'mpi-permissive': {'id': 'mpi-permissive', 'deprecated': False}, - 'mpich2': {'id': 'mpich2', 'deprecated': False}, - 'mpl-1.0': {'id': 'MPL-1.0', 'deprecated': False}, - 'mpl-1.1': {'id': 'MPL-1.1', 'deprecated': False}, - 'mpl-2.0': {'id': 'MPL-2.0', 'deprecated': False}, - 'mpl-2.0-no-copyleft-exception': {'id': 'MPL-2.0-no-copyleft-exception', 'deprecated': False}, - 'mplus': {'id': 'mplus', 'deprecated': False}, - 'ms-lpl': {'id': 'MS-LPL', 'deprecated': False}, - 'ms-pl': {'id': 'MS-PL', 'deprecated': False}, - 'ms-rl': {'id': 'MS-RL', 'deprecated': False}, - 'mtll': {'id': 'MTLL', 'deprecated': False}, - 'mulanpsl-1.0': {'id': 'MulanPSL-1.0', 'deprecated': False}, - 'mulanpsl-2.0': {'id': 'MulanPSL-2.0', 'deprecated': False}, - 'multics': {'id': 'Multics', 'deprecated': False}, - 'mup': {'id': 'Mup', 'deprecated': False}, - 'naist-2003': {'id': 'NAIST-2003', 'deprecated': False}, - 'nasa-1.3': {'id': 'NASA-1.3', 'deprecated': False}, - 'naumen': {'id': 'Naumen', 'deprecated': False}, - 'nbpl-1.0': {'id': 'NBPL-1.0', 'deprecated': False}, - 'ncbi-pd': {'id': 'NCBI-PD', 'deprecated': False}, - 'ncgl-uk-2.0': {'id': 'NCGL-UK-2.0', 'deprecated': False}, - 'ncl': {'id': 'NCL', 'deprecated': False}, - 'ncsa': {'id': 'NCSA', 'deprecated': False}, - 'net-snmp': {'id': 'Net-SNMP', 'deprecated': True}, - 'netcdf': {'id': 'NetCDF', 'deprecated': False}, - 'newsletr': {'id': 'Newsletr', 'deprecated': False}, - 'ngpl': {'id': 'NGPL', 'deprecated': False}, - 'ngrep': {'id': 'ngrep', 'deprecated': False}, - 'nicta-1.0': {'id': 'NICTA-1.0', 'deprecated': False}, - 'nist-pd': {'id': 'NIST-PD', 'deprecated': False}, - 'nist-pd-fallback': {'id': 'NIST-PD-fallback', 'deprecated': False}, - 'nist-software': {'id': 'NIST-Software', 'deprecated': False}, - 'nlod-1.0': {'id': 'NLOD-1.0', 'deprecated': False}, - 'nlod-2.0': {'id': 'NLOD-2.0', 'deprecated': False}, - 'nlpl': {'id': 'NLPL', 'deprecated': False}, - 'nokia': {'id': 'Nokia', 'deprecated': False}, - 'nosl': {'id': 'NOSL', 'deprecated': False}, - 'noweb': {'id': 'Noweb', 'deprecated': False}, - 'npl-1.0': {'id': 'NPL-1.0', 'deprecated': False}, - 'npl-1.1': {'id': 'NPL-1.1', 'deprecated': False}, - 'nposl-3.0': {'id': 'NPOSL-3.0', 'deprecated': False}, - 'nrl': {'id': 'NRL', 'deprecated': False}, - 'ntia-pd': {'id': 'NTIA-PD', 'deprecated': False}, - 'ntp': {'id': 'NTP', 'deprecated': False}, - 'ntp-0': {'id': 'NTP-0', 'deprecated': False}, - 'nunit': {'id': 'Nunit', 'deprecated': True}, - 'o-uda-1.0': {'id': 'O-UDA-1.0', 'deprecated': False}, - 'oar': {'id': 'OAR', 'deprecated': False}, - 'occt-pl': {'id': 'OCCT-PL', 'deprecated': False}, - 'oclc-2.0': {'id': 'OCLC-2.0', 'deprecated': False}, - 'odbl-1.0': {'id': 'ODbL-1.0', 'deprecated': False}, - 'odc-by-1.0': {'id': 'ODC-By-1.0', 'deprecated': False}, - 'offis': {'id': 'OFFIS', 'deprecated': False}, - 'ofl-1.0': {'id': 'OFL-1.0', 'deprecated': False}, - 'ofl-1.0-no-rfn': {'id': 'OFL-1.0-no-RFN', 'deprecated': False}, - 'ofl-1.0-rfn': {'id': 'OFL-1.0-RFN', 'deprecated': False}, - 'ofl-1.1': {'id': 'OFL-1.1', 'deprecated': False}, - 'ofl-1.1-no-rfn': {'id': 'OFL-1.1-no-RFN', 'deprecated': False}, - 'ofl-1.1-rfn': {'id': 'OFL-1.1-RFN', 'deprecated': False}, - 'ogc-1.0': {'id': 'OGC-1.0', 'deprecated': False}, - 'ogdl-taiwan-1.0': {'id': 'OGDL-Taiwan-1.0', 'deprecated': False}, - 'ogl-canada-2.0': {'id': 'OGL-Canada-2.0', 'deprecated': False}, - 'ogl-uk-1.0': {'id': 'OGL-UK-1.0', 'deprecated': False}, - 'ogl-uk-2.0': {'id': 'OGL-UK-2.0', 'deprecated': False}, - 'ogl-uk-3.0': {'id': 'OGL-UK-3.0', 'deprecated': False}, - 'ogtsl': {'id': 'OGTSL', 'deprecated': False}, - 'oldap-1.1': {'id': 'OLDAP-1.1', 'deprecated': False}, - 'oldap-1.2': {'id': 'OLDAP-1.2', 'deprecated': False}, - 'oldap-1.3': {'id': 'OLDAP-1.3', 'deprecated': False}, - 'oldap-1.4': {'id': 'OLDAP-1.4', 'deprecated': False}, - 'oldap-2.0': {'id': 'OLDAP-2.0', 'deprecated': False}, - 'oldap-2.0.1': {'id': 'OLDAP-2.0.1', 'deprecated': False}, - 'oldap-2.1': {'id': 'OLDAP-2.1', 'deprecated': False}, - 'oldap-2.2': {'id': 'OLDAP-2.2', 'deprecated': False}, - 'oldap-2.2.1': {'id': 'OLDAP-2.2.1', 'deprecated': False}, - 'oldap-2.2.2': {'id': 'OLDAP-2.2.2', 'deprecated': False}, - 'oldap-2.3': {'id': 'OLDAP-2.3', 'deprecated': False}, - 'oldap-2.4': {'id': 'OLDAP-2.4', 'deprecated': False}, - 'oldap-2.5': {'id': 'OLDAP-2.5', 'deprecated': False}, - 'oldap-2.6': {'id': 'OLDAP-2.6', 'deprecated': False}, - 'oldap-2.7': {'id': 'OLDAP-2.7', 'deprecated': False}, - 'oldap-2.8': {'id': 'OLDAP-2.8', 'deprecated': False}, - 'olfl-1.3': {'id': 'OLFL-1.3', 'deprecated': False}, - 'oml': {'id': 'OML', 'deprecated': False}, - 'openpbs-2.3': {'id': 'OpenPBS-2.3', 'deprecated': False}, - 'openssl': {'id': 'OpenSSL', 'deprecated': False}, - 'openssl-standalone': {'id': 'OpenSSL-standalone', 'deprecated': False}, - 'openvision': {'id': 'OpenVision', 'deprecated': False}, - 'opl-1.0': {'id': 'OPL-1.0', 'deprecated': False}, - 'opl-uk-3.0': {'id': 'OPL-UK-3.0', 'deprecated': False}, - 'opubl-1.0': {'id': 'OPUBL-1.0', 'deprecated': False}, - 'oset-pl-2.1': {'id': 'OSET-PL-2.1', 'deprecated': False}, - 'osl-1.0': {'id': 'OSL-1.0', 'deprecated': False}, - 'osl-1.1': {'id': 'OSL-1.1', 'deprecated': False}, - 'osl-2.0': {'id': 'OSL-2.0', 'deprecated': False}, - 'osl-2.1': {'id': 'OSL-2.1', 'deprecated': False}, - 'osl-3.0': {'id': 'OSL-3.0', 'deprecated': False}, - 'padl': {'id': 'PADL', 'deprecated': False}, - 'parity-6.0.0': {'id': 'Parity-6.0.0', 'deprecated': False}, - 'parity-7.0.0': {'id': 'Parity-7.0.0', 'deprecated': False}, - 'pddl-1.0': {'id': 'PDDL-1.0', 'deprecated': False}, - 'php-3.0': {'id': 'PHP-3.0', 'deprecated': False}, - 'php-3.01': {'id': 'PHP-3.01', 'deprecated': False}, - 'pixar': {'id': 'Pixar', 'deprecated': False}, - 'pkgconf': {'id': 'pkgconf', 'deprecated': False}, - 'plexus': {'id': 'Plexus', 'deprecated': False}, - 'pnmstitch': {'id': 'pnmstitch', 'deprecated': False}, - 'polyform-noncommercial-1.0.0': {'id': 'PolyForm-Noncommercial-1.0.0', 'deprecated': False}, - 'polyform-small-business-1.0.0': {'id': 'PolyForm-Small-Business-1.0.0', 'deprecated': False}, - 'postgresql': {'id': 'PostgreSQL', 'deprecated': False}, - 'ppl': {'id': 'PPL', 'deprecated': False}, - 'psf-2.0': {'id': 'PSF-2.0', 'deprecated': False}, - 'psfrag': {'id': 'psfrag', 'deprecated': False}, - 'psutils': {'id': 'psutils', 'deprecated': False}, - 'python-2.0': {'id': 'Python-2.0', 'deprecated': False}, - 'python-2.0.1': {'id': 'Python-2.0.1', 'deprecated': False}, - 'python-ldap': {'id': 'python-ldap', 'deprecated': False}, - 'qhull': {'id': 'Qhull', 'deprecated': False}, - 'qpl-1.0': {'id': 'QPL-1.0', 'deprecated': False}, - 'qpl-1.0-inria-2004': {'id': 'QPL-1.0-INRIA-2004', 'deprecated': False}, - 'radvd': {'id': 'radvd', 'deprecated': False}, - 'rdisc': {'id': 'Rdisc', 'deprecated': False}, - 'rhecos-1.1': {'id': 'RHeCos-1.1', 'deprecated': False}, - 'rpl-1.1': {'id': 'RPL-1.1', 'deprecated': False}, - 'rpl-1.5': {'id': 'RPL-1.5', 'deprecated': False}, - 'rpsl-1.0': {'id': 'RPSL-1.0', 'deprecated': False}, - 'rsa-md': {'id': 'RSA-MD', 'deprecated': False}, - 'rscpl': {'id': 'RSCPL', 'deprecated': False}, - 'ruby': {'id': 'Ruby', 'deprecated': False}, - 'ruby-pty': {'id': 'Ruby-pty', 'deprecated': False}, - 'sax-pd': {'id': 'SAX-PD', 'deprecated': False}, - 'sax-pd-2.0': {'id': 'SAX-PD-2.0', 'deprecated': False}, - 'saxpath': {'id': 'Saxpath', 'deprecated': False}, - 'scea': {'id': 'SCEA', 'deprecated': False}, - 'schemereport': {'id': 'SchemeReport', 'deprecated': False}, - 'sendmail': {'id': 'Sendmail', 'deprecated': False}, - 'sendmail-8.23': {'id': 'Sendmail-8.23', 'deprecated': False}, - 'sendmail-open-source-1.1': {'id': 'Sendmail-Open-Source-1.1', 'deprecated': False}, - 'sgi-b-1.0': {'id': 'SGI-B-1.0', 'deprecated': False}, - 'sgi-b-1.1': {'id': 'SGI-B-1.1', 'deprecated': False}, - 'sgi-b-2.0': {'id': 'SGI-B-2.0', 'deprecated': False}, - 'sgi-opengl': {'id': 'SGI-OpenGL', 'deprecated': False}, - 'sgp4': {'id': 'SGP4', 'deprecated': False}, - 'shl-0.5': {'id': 'SHL-0.5', 'deprecated': False}, - 'shl-0.51': {'id': 'SHL-0.51', 'deprecated': False}, - 'simpl-2.0': {'id': 'SimPL-2.0', 'deprecated': False}, - 'sissl': {'id': 'SISSL', 'deprecated': False}, - 'sissl-1.2': {'id': 'SISSL-1.2', 'deprecated': False}, - 'sl': {'id': 'SL', 'deprecated': False}, - 'sleepycat': {'id': 'Sleepycat', 'deprecated': False}, - 'smail-gpl': {'id': 'SMAIL-GPL', 'deprecated': False}, - 'smlnj': {'id': 'SMLNJ', 'deprecated': False}, - 'smppl': {'id': 'SMPPL', 'deprecated': False}, - 'snia': {'id': 'SNIA', 'deprecated': False}, - 'snprintf': {'id': 'snprintf', 'deprecated': False}, - 'sofa': {'id': 'SOFA', 'deprecated': False}, - 'softsurfer': {'id': 'softSurfer', 'deprecated': False}, - 'soundex': {'id': 'Soundex', 'deprecated': False}, - 'spencer-86': {'id': 'Spencer-86', 'deprecated': False}, - 'spencer-94': {'id': 'Spencer-94', 'deprecated': False}, - 'spencer-99': {'id': 'Spencer-99', 'deprecated': False}, - 'spl-1.0': {'id': 'SPL-1.0', 'deprecated': False}, - 'ssh-keyscan': {'id': 'ssh-keyscan', 'deprecated': False}, - 'ssh-openssh': {'id': 'SSH-OpenSSH', 'deprecated': False}, - 'ssh-short': {'id': 'SSH-short', 'deprecated': False}, - 'ssleay-standalone': {'id': 'SSLeay-standalone', 'deprecated': False}, - 'sspl-1.0': {'id': 'SSPL-1.0', 'deprecated': False}, - 'standardml-nj': {'id': 'StandardML-NJ', 'deprecated': True}, - 'sugarcrm-1.1.3': {'id': 'SugarCRM-1.1.3', 'deprecated': False}, - 'sul-1.0': {'id': 'SUL-1.0', 'deprecated': False}, - 'sun-ppp': {'id': 'Sun-PPP', 'deprecated': False}, - 'sun-ppp-2000': {'id': 'Sun-PPP-2000', 'deprecated': False}, - 'sunpro': {'id': 'SunPro', 'deprecated': False}, - 'swl': {'id': 'SWL', 'deprecated': False}, - 'swrule': {'id': 'swrule', 'deprecated': False}, - 'symlinks': {'id': 'Symlinks', 'deprecated': False}, - 'tapr-ohl-1.0': {'id': 'TAPR-OHL-1.0', 'deprecated': False}, - 'tcl': {'id': 'TCL', 'deprecated': False}, - 'tcp-wrappers': {'id': 'TCP-wrappers', 'deprecated': False}, - 'termreadkey': {'id': 'TermReadKey', 'deprecated': False}, - 'tgppl-1.0': {'id': 'TGPPL-1.0', 'deprecated': False}, - 'thirdeye': {'id': 'ThirdEye', 'deprecated': False}, - 'threeparttable': {'id': 'threeparttable', 'deprecated': False}, - 'tmate': {'id': 'TMate', 'deprecated': False}, - 'torque-1.1': {'id': 'TORQUE-1.1', 'deprecated': False}, - 'tosl': {'id': 'TOSL', 'deprecated': False}, - 'tpdl': {'id': 'TPDL', 'deprecated': False}, - 'tpl-1.0': {'id': 'TPL-1.0', 'deprecated': False}, - 'trustedqsl': {'id': 'TrustedQSL', 'deprecated': False}, - 'ttwl': {'id': 'TTWL', 'deprecated': False}, - 'ttyp0': {'id': 'TTYP0', 'deprecated': False}, - 'tu-berlin-1.0': {'id': 'TU-Berlin-1.0', 'deprecated': False}, - 'tu-berlin-2.0': {'id': 'TU-Berlin-2.0', 'deprecated': False}, - 'ubuntu-font-1.0': {'id': 'Ubuntu-font-1.0', 'deprecated': False}, - 'ucar': {'id': 'UCAR', 'deprecated': False}, - 'ucl-1.0': {'id': 'UCL-1.0', 'deprecated': False}, - 'ulem': {'id': 'ulem', 'deprecated': False}, - 'umich-merit': {'id': 'UMich-Merit', 'deprecated': False}, - 'unicode-3.0': {'id': 'Unicode-3.0', 'deprecated': False}, - 'unicode-dfs-2015': {'id': 'Unicode-DFS-2015', 'deprecated': False}, - 'unicode-dfs-2016': {'id': 'Unicode-DFS-2016', 'deprecated': False}, - 'unicode-tou': {'id': 'Unicode-TOU', 'deprecated': False}, - 'unixcrypt': {'id': 'UnixCrypt', 'deprecated': False}, - 'unlicense': {'id': 'Unlicense', 'deprecated': False}, - 'unlicense-libtelnet': {'id': 'Unlicense-libtelnet', 'deprecated': False}, - 'unlicense-libwhirlpool': {'id': 'Unlicense-libwhirlpool', 'deprecated': False}, - 'upl-1.0': {'id': 'UPL-1.0', 'deprecated': False}, - 'urt-rle': {'id': 'URT-RLE', 'deprecated': False}, - 'vim': {'id': 'Vim', 'deprecated': False}, - 'vostrom': {'id': 'VOSTROM', 'deprecated': False}, - 'vsl-1.0': {'id': 'VSL-1.0', 'deprecated': False}, - 'w3c': {'id': 'W3C', 'deprecated': False}, - 'w3c-19980720': {'id': 'W3C-19980720', 'deprecated': False}, - 'w3c-20150513': {'id': 'W3C-20150513', 'deprecated': False}, - 'w3m': {'id': 'w3m', 'deprecated': False}, - 'watcom-1.0': {'id': 'Watcom-1.0', 'deprecated': False}, - 'widget-workshop': {'id': 'Widget-Workshop', 'deprecated': False}, - 'wsuipa': {'id': 'Wsuipa', 'deprecated': False}, - 'wtfpl': {'id': 'WTFPL', 'deprecated': False}, - 'wwl': {'id': 'wwl', 'deprecated': False}, - 'wxwindows': {'id': 'wxWindows', 'deprecated': True}, - 'x11': {'id': 'X11', 'deprecated': False}, - 'x11-distribute-modifications-variant': {'id': 'X11-distribute-modifications-variant', 'deprecated': False}, - 'x11-swapped': {'id': 'X11-swapped', 'deprecated': False}, - 'xdebug-1.03': {'id': 'Xdebug-1.03', 'deprecated': False}, - 'xerox': {'id': 'Xerox', 'deprecated': False}, - 'xfig': {'id': 'Xfig', 'deprecated': False}, - 'xfree86-1.1': {'id': 'XFree86-1.1', 'deprecated': False}, - 'xinetd': {'id': 'xinetd', 'deprecated': False}, - 'xkeyboard-config-zinoviev': {'id': 'xkeyboard-config-Zinoviev', 'deprecated': False}, - 'xlock': {'id': 'xlock', 'deprecated': False}, - 'xnet': {'id': 'Xnet', 'deprecated': False}, - 'xpp': {'id': 'xpp', 'deprecated': False}, - 'xskat': {'id': 'XSkat', 'deprecated': False}, - 'xzoom': {'id': 'xzoom', 'deprecated': False}, - 'ypl-1.0': {'id': 'YPL-1.0', 'deprecated': False}, - 'ypl-1.1': {'id': 'YPL-1.1', 'deprecated': False}, - 'zed': {'id': 'Zed', 'deprecated': False}, - 'zeeff': {'id': 'Zeeff', 'deprecated': False}, - 'zend-2.0': {'id': 'Zend-2.0', 'deprecated': False}, - 'zimbra-1.3': {'id': 'Zimbra-1.3', 'deprecated': False}, - 'zimbra-1.4': {'id': 'Zimbra-1.4', 'deprecated': False}, - 'zlib': {'id': 'Zlib', 'deprecated': False}, - 'zlib-acknowledgement': {'id': 'zlib-acknowledgement', 'deprecated': False}, - 'zpl-1.1': {'id': 'ZPL-1.1', 'deprecated': False}, - 'zpl-2.0': {'id': 'ZPL-2.0', 'deprecated': False}, - 'zpl-2.1': {'id': 'ZPL-2.1', 'deprecated': False}, -} - -EXCEPTIONS: dict[str, SPDXException] = { - '389-exception': {'id': '389-exception', 'deprecated': False}, - 'asterisk-exception': {'id': 'Asterisk-exception', 'deprecated': False}, - 'asterisk-linking-protocols-exception': {'id': 'Asterisk-linking-protocols-exception', 'deprecated': False}, - 'autoconf-exception-2.0': {'id': 'Autoconf-exception-2.0', 'deprecated': False}, - 'autoconf-exception-3.0': {'id': 'Autoconf-exception-3.0', 'deprecated': False}, - 'autoconf-exception-generic': {'id': 'Autoconf-exception-generic', 'deprecated': False}, - 'autoconf-exception-generic-3.0': {'id': 'Autoconf-exception-generic-3.0', 'deprecated': False}, - 'autoconf-exception-macro': {'id': 'Autoconf-exception-macro', 'deprecated': False}, - 'bison-exception-1.24': {'id': 'Bison-exception-1.24', 'deprecated': False}, - 'bison-exception-2.2': {'id': 'Bison-exception-2.2', 'deprecated': False}, - 'bootloader-exception': {'id': 'Bootloader-exception', 'deprecated': False}, - 'cgal-linking-exception': {'id': 'CGAL-linking-exception', 'deprecated': False}, - 'classpath-exception-2.0': {'id': 'Classpath-exception-2.0', 'deprecated': False}, - 'clisp-exception-2.0': {'id': 'CLISP-exception-2.0', 'deprecated': False}, - 'cryptsetup-openssl-exception': {'id': 'cryptsetup-OpenSSL-exception', 'deprecated': False}, - 'digia-qt-lgpl-exception-1.1': {'id': 'Digia-Qt-LGPL-exception-1.1', 'deprecated': False}, - 'digirule-foss-exception': {'id': 'DigiRule-FOSS-exception', 'deprecated': False}, - 'ecos-exception-2.0': {'id': 'eCos-exception-2.0', 'deprecated': False}, - 'erlang-otp-linking-exception': {'id': 'erlang-otp-linking-exception', 'deprecated': False}, - 'fawkes-runtime-exception': {'id': 'Fawkes-Runtime-exception', 'deprecated': False}, - 'fltk-exception': {'id': 'FLTK-exception', 'deprecated': False}, - 'fmt-exception': {'id': 'fmt-exception', 'deprecated': False}, - 'font-exception-2.0': {'id': 'Font-exception-2.0', 'deprecated': False}, - 'freertos-exception-2.0': {'id': 'freertos-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0': {'id': 'GCC-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0-note': {'id': 'GCC-exception-2.0-note', 'deprecated': False}, - 'gcc-exception-3.1': {'id': 'GCC-exception-3.1', 'deprecated': False}, - 'gmsh-exception': {'id': 'Gmsh-exception', 'deprecated': False}, - 'gnat-exception': {'id': 'GNAT-exception', 'deprecated': False}, - 'gnome-examples-exception': {'id': 'GNOME-examples-exception', 'deprecated': False}, - 'gnu-compiler-exception': {'id': 'GNU-compiler-exception', 'deprecated': False}, - 'gnu-javamail-exception': {'id': 'gnu-javamail-exception', 'deprecated': False}, - 'gpl-3.0-389-ds-base-exception': {'id': 'GPL-3.0-389-ds-base-exception', 'deprecated': False}, - 'gpl-3.0-interface-exception': {'id': 'GPL-3.0-interface-exception', 'deprecated': False}, - 'gpl-3.0-linking-exception': {'id': 'GPL-3.0-linking-exception', 'deprecated': False}, - 'gpl-3.0-linking-source-exception': {'id': 'GPL-3.0-linking-source-exception', 'deprecated': False}, - 'gpl-cc-1.0': {'id': 'GPL-CC-1.0', 'deprecated': False}, - 'gstreamer-exception-2005': {'id': 'GStreamer-exception-2005', 'deprecated': False}, - 'gstreamer-exception-2008': {'id': 'GStreamer-exception-2008', 'deprecated': False}, - 'harbour-exception': {'id': 'harbour-exception', 'deprecated': False}, - 'i2p-gpl-java-exception': {'id': 'i2p-gpl-java-exception', 'deprecated': False}, - 'independent-modules-exception': {'id': 'Independent-modules-exception', 'deprecated': False}, - 'kicad-libraries-exception': {'id': 'KiCad-libraries-exception', 'deprecated': False}, - 'lgpl-3.0-linking-exception': {'id': 'LGPL-3.0-linking-exception', 'deprecated': False}, - 'libpri-openh323-exception': {'id': 'libpri-OpenH323-exception', 'deprecated': False}, - 'libtool-exception': {'id': 'Libtool-exception', 'deprecated': False}, - 'linux-syscall-note': {'id': 'Linux-syscall-note', 'deprecated': False}, - 'llgpl': {'id': 'LLGPL', 'deprecated': False}, - 'llvm-exception': {'id': 'LLVM-exception', 'deprecated': False}, - 'lzma-exception': {'id': 'LZMA-exception', 'deprecated': False}, - 'mif-exception': {'id': 'mif-exception', 'deprecated': False}, - 'mxml-exception': {'id': 'mxml-exception', 'deprecated': False}, - 'nokia-qt-exception-1.1': {'id': 'Nokia-Qt-exception-1.1', 'deprecated': True}, - 'ocaml-lgpl-linking-exception': {'id': 'OCaml-LGPL-linking-exception', 'deprecated': False}, - 'occt-exception-1.0': {'id': 'OCCT-exception-1.0', 'deprecated': False}, - 'openjdk-assembly-exception-1.0': {'id': 'OpenJDK-assembly-exception-1.0', 'deprecated': False}, - 'openvpn-openssl-exception': {'id': 'openvpn-openssl-exception', 'deprecated': False}, - 'pcre2-exception': {'id': 'PCRE2-exception', 'deprecated': False}, - 'polyparse-exception': {'id': 'polyparse-exception', 'deprecated': False}, - 'ps-or-pdf-font-exception-20170817': {'id': 'PS-or-PDF-font-exception-20170817', 'deprecated': False}, - 'qpl-1.0-inria-2004-exception': {'id': 'QPL-1.0-INRIA-2004-exception', 'deprecated': False}, - 'qt-gpl-exception-1.0': {'id': 'Qt-GPL-exception-1.0', 'deprecated': False}, - 'qt-lgpl-exception-1.1': {'id': 'Qt-LGPL-exception-1.1', 'deprecated': False}, - 'qwt-exception-1.0': {'id': 'Qwt-exception-1.0', 'deprecated': False}, - 'romic-exception': {'id': 'romic-exception', 'deprecated': False}, - 'rrdtool-floss-exception-2.0': {'id': 'RRDtool-FLOSS-exception-2.0', 'deprecated': False}, - 'sane-exception': {'id': 'SANE-exception', 'deprecated': False}, - 'shl-2.0': {'id': 'SHL-2.0', 'deprecated': False}, - 'shl-2.1': {'id': 'SHL-2.1', 'deprecated': False}, - 'stunnel-exception': {'id': 'stunnel-exception', 'deprecated': False}, - 'swi-exception': {'id': 'SWI-exception', 'deprecated': False}, - 'swift-exception': {'id': 'Swift-exception', 'deprecated': False}, - 'texinfo-exception': {'id': 'Texinfo-exception', 'deprecated': False}, - 'u-boot-exception-2.0': {'id': 'u-boot-exception-2.0', 'deprecated': False}, - 'ubdl-exception': {'id': 'UBDL-exception', 'deprecated': False}, - 'universal-foss-exception-1.0': {'id': 'Universal-FOSS-exception-1.0', 'deprecated': False}, - 'vsftpd-openssl-exception': {'id': 'vsftpd-openssl-exception', 'deprecated': False}, - 'wxwindows-exception-3.1': {'id': 'WxWindows-exception-3.1', 'deprecated': False}, - 'x11vnc-openssl-exception': {'id': 'x11vnc-openssl-exception', 'deprecated': False}, -} diff --git a/myenv/lib/python3.12/site-packages/packaging/markers.py b/myenv/lib/python3.12/site-packages/packaging/markers.py deleted file mode 100644 index ca3706f..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/markers.py +++ /dev/null @@ -1,388 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import operator -import os -import platform -import sys -from typing import AbstractSet, Callable, Literal, Mapping, TypedDict, Union, cast - -from ._parser import MarkerAtom, MarkerList, Op, Value, Variable -from ._parser import parse_marker as _parse_marker -from ._tokenizer import ParserSyntaxError -from .specifiers import InvalidSpecifier, Specifier -from .utils import canonicalize_name - -__all__ = [ - "Environment", - "EvaluateContext", - "InvalidMarker", - "Marker", - "UndefinedComparison", - "UndefinedEnvironmentName", - "default_environment", -] - -Operator = Callable[[str, Union[str, AbstractSet[str]]], bool] -EvaluateContext = Literal["metadata", "lock_file", "requirement"] -MARKERS_ALLOWING_SET = {"extras", "dependency_groups"} -MARKERS_REQUIRING_VERSION = { - "implementation_version", - "platform_release", - "python_full_version", - "python_version", -} - - -class InvalidMarker(ValueError): - """ - An invalid marker was found, users should refer to PEP 508. - """ - - -class UndefinedComparison(ValueError): - """ - An invalid operation was attempted on a value that doesn't support it. - """ - - -class UndefinedEnvironmentName(ValueError): - """ - A name was attempted to be used that does not exist inside of the - environment. - """ - - -class Environment(TypedDict): - implementation_name: str - """The implementation's identifier, e.g. ``'cpython'``.""" - - implementation_version: str - """ - The implementation's version, e.g. ``'3.13.0a2'`` for CPython 3.13.0a2, or - ``'7.3.13'`` for PyPy3.10 v7.3.13. - """ - - os_name: str - """ - The value of :py:data:`os.name`. The name of the operating system dependent module - imported, e.g. ``'posix'``. - """ - - platform_machine: str - """ - Returns the machine type, e.g. ``'i386'``. - - An empty string if the value cannot be determined. - """ - - platform_release: str - """ - The system's release, e.g. ``'2.2.0'`` or ``'NT'``. - - An empty string if the value cannot be determined. - """ - - platform_system: str - """ - The system/OS name, e.g. ``'Linux'``, ``'Windows'`` or ``'Java'``. - - An empty string if the value cannot be determined. - """ - - platform_version: str - """ - The system's release version, e.g. ``'#3 on degas'``. - - An empty string if the value cannot be determined. - """ - - python_full_version: str - """ - The Python version as string ``'major.minor.patchlevel'``. - - Note that unlike the Python :py:data:`sys.version`, this value will always include - the patchlevel (it defaults to 0). - """ - - platform_python_implementation: str - """ - A string identifying the Python implementation, e.g. ``'CPython'``. - """ - - python_version: str - """The Python version as string ``'major.minor'``.""" - - sys_platform: str - """ - This string contains a platform identifier that can be used to append - platform-specific components to :py:data:`sys.path`, for instance. - - For Unix systems, except on Linux and AIX, this is the lowercased OS name as - returned by ``uname -s`` with the first part of the version as returned by - ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, at the time when Python - was built. - """ - - -def _normalize_extras( - result: MarkerList | MarkerAtom | str, -) -> MarkerList | MarkerAtom | str: - if not isinstance(result, tuple): - return result - - lhs, op, rhs = result - if isinstance(lhs, Variable) and lhs.value == "extra": - normalized_extra = canonicalize_name(rhs.value) - rhs = Value(normalized_extra) - elif isinstance(rhs, Variable) and rhs.value == "extra": - normalized_extra = canonicalize_name(lhs.value) - lhs = Value(normalized_extra) - return lhs, op, rhs - - -def _normalize_extra_values(results: MarkerList) -> MarkerList: - """ - Normalize extra values. - """ - - return [_normalize_extras(r) for r in results] - - -def _format_marker( - marker: list[str] | MarkerAtom | str, first: bool | None = True -) -> str: - assert isinstance(marker, (list, tuple, str)) - - # Sometimes we have a structure like [[...]] which is a single item list - # where the single item is itself it's own list. In that case we want skip - # the rest of this function so that we don't get extraneous () on the - # outside. - if ( - isinstance(marker, list) - and len(marker) == 1 - and isinstance(marker[0], (list, tuple)) - ): - return _format_marker(marker[0]) - - if isinstance(marker, list): - inner = (_format_marker(m, first=False) for m in marker) - if first: - return " ".join(inner) - else: - return "(" + " ".join(inner) + ")" - elif isinstance(marker, tuple): - return " ".join([m.serialize() for m in marker]) - else: - return marker - - -_operators: dict[str, Operator] = { - "in": lambda lhs, rhs: lhs in rhs, - "not in": lambda lhs, rhs: lhs not in rhs, - "<": lambda _lhs, _rhs: False, - "<=": operator.eq, - "==": operator.eq, - "!=": operator.ne, - ">=": operator.eq, - ">": lambda _lhs, _rhs: False, -} - - -def _eval_op(lhs: str, op: Op, rhs: str | AbstractSet[str], *, key: str) -> bool: - op_str = op.serialize() - if key in MARKERS_REQUIRING_VERSION: - try: - spec = Specifier(f"{op_str}{rhs}") - except InvalidSpecifier: - pass - else: - return spec.contains(lhs, prereleases=True) - - oper: Operator | None = _operators.get(op_str) - if oper is None: - raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.") - - return oper(lhs, rhs) - - -def _normalize( - lhs: str, rhs: str | AbstractSet[str], key: str -) -> tuple[str, str | AbstractSet[str]]: - # PEP 685 - Comparison of extra names for optional distribution dependencies - # https://peps.python.org/pep-0685/ - # > When comparing extra names, tools MUST normalize the names being - # > compared using the semantics outlined in PEP 503 for names - if key == "extra": - assert isinstance(rhs, str), "extra value must be a string" - # Both sides are normalized at this point already - return (lhs, rhs) - if key in MARKERS_ALLOWING_SET: - if isinstance(rhs, str): # pragma: no cover - return (canonicalize_name(lhs), canonicalize_name(rhs)) - else: - return (canonicalize_name(lhs), {canonicalize_name(v) for v in rhs}) - - # other environment markers don't have such standards - return lhs, rhs - - -def _evaluate_markers( - markers: MarkerList, environment: dict[str, str | AbstractSet[str]] -) -> bool: - groups: list[list[bool]] = [[]] - - for marker in markers: - if isinstance(marker, list): - groups[-1].append(_evaluate_markers(marker, environment)) - elif isinstance(marker, tuple): - lhs, op, rhs = marker - - if isinstance(lhs, Variable): - environment_key = lhs.value - lhs_value = environment[environment_key] - rhs_value = rhs.value - else: - lhs_value = lhs.value - environment_key = rhs.value - rhs_value = environment[environment_key] - - assert isinstance(lhs_value, str), "lhs must be a string" - lhs_value, rhs_value = _normalize(lhs_value, rhs_value, key=environment_key) - groups[-1].append(_eval_op(lhs_value, op, rhs_value, key=environment_key)) - elif marker == "or": - groups.append([]) - elif marker == "and": - pass - else: # pragma: nocover - raise TypeError(f"Unexpected marker {marker!r}") - - return any(all(item) for item in groups) - - -def format_full_version(info: sys._version_info) -> str: - version = f"{info.major}.{info.minor}.{info.micro}" - kind = info.releaselevel - if kind != "final": - version += kind[0] + str(info.serial) - return version - - -def default_environment() -> Environment: - iver = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - return { - "implementation_name": implementation_name, - "implementation_version": iver, - "os_name": os.name, - "platform_machine": platform.machine(), - "platform_release": platform.release(), - "platform_system": platform.system(), - "platform_version": platform.version(), - "python_full_version": platform.python_version(), - "platform_python_implementation": platform.python_implementation(), - "python_version": ".".join(platform.python_version_tuple()[:2]), - "sys_platform": sys.platform, - } - - -class Marker: - def __init__(self, marker: str) -> None: - # Note: We create a Marker object without calling this constructor in - # packaging.requirements.Requirement. If any additional logic is - # added here, make sure to mirror/adapt Requirement. - - # If this fails and throws an error, the repr still expects _markers to - # be defined. - self._markers: MarkerList = [] - - try: - self._markers = _normalize_extra_values(_parse_marker(marker)) - # The attribute `_markers` can be described in terms of a recursive type: - # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]] - # - # For example, the following expression: - # python_version > "3.6" or (python_version == "3.6" and os_name == "unix") - # - # is parsed into: - # [ - # (, ')>, ), - # 'and', - # [ - # (, , ), - # 'or', - # (, , ) - # ] - # ] - except ParserSyntaxError as e: - raise InvalidMarker(str(e)) from e - - def __str__(self) -> str: - return _format_marker(self._markers) - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}('{self}')>" - - def __hash__(self) -> int: - return hash(str(self)) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Marker): - return NotImplemented - - return str(self) == str(other) - - def evaluate( - self, - environment: Mapping[str, str | AbstractSet[str]] | None = None, - context: EvaluateContext = "metadata", - ) -> bool: - """Evaluate a marker. - - Return the boolean from evaluating the given marker against the - environment. environment is an optional argument to override all or - part of the determined environment. The *context* parameter specifies what - context the markers are being evaluated for, which influences what markers - are considered valid. Acceptable values are "metadata" (for core metadata; - default), "lock_file", and "requirement" (i.e. all other situations). - - The environment is determined from the current Python process. - """ - current_environment = cast( - "dict[str, str | AbstractSet[str]]", default_environment() - ) - if context == "lock_file": - current_environment.update( - extras=frozenset(), dependency_groups=frozenset() - ) - elif context == "metadata": - current_environment["extra"] = "" - - if environment is not None: - current_environment.update(environment) - if "extra" in current_environment: - # The API used to allow setting extra to None. We need to handle - # this case for backwards compatibility. Also skip running - # normalize name if extra is empty. - extra = cast("str | None", current_environment["extra"]) - current_environment["extra"] = canonicalize_name(extra) if extra else "" - - return _evaluate_markers( - self._markers, _repair_python_full_version(current_environment) - ) - - -def _repair_python_full_version( - env: dict[str, str | AbstractSet[str]], -) -> dict[str, str | AbstractSet[str]]: - """ - Work around platform.python_version() returning something that is not PEP 440 - compliant for non-tagged Python builds. - """ - python_full_version = cast("str", env["python_full_version"]) - if python_full_version.endswith("+"): - env["python_full_version"] = f"{python_full_version}local" - return env diff --git a/myenv/lib/python3.12/site-packages/packaging/metadata.py b/myenv/lib/python3.12/site-packages/packaging/metadata.py deleted file mode 100644 index 253f6b1..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/metadata.py +++ /dev/null @@ -1,978 +0,0 @@ -from __future__ import annotations - -import email.feedparser -import email.header -import email.message -import email.parser -import email.policy -import keyword -import pathlib -import sys -import typing -from typing import ( - Any, - Callable, - Generic, - Literal, - TypedDict, - cast, -) - -from . import licenses, requirements, specifiers, utils -from . import version as version_module - -if typing.TYPE_CHECKING: - from .licenses import NormalizedLicenseExpression - -T = typing.TypeVar("T") - - -if sys.version_info >= (3, 11): # pragma: no cover - ExceptionGroup = ExceptionGroup # noqa: F821 -else: # pragma: no cover - - class ExceptionGroup(Exception): - """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. - - If :external:exc:`ExceptionGroup` is already defined by Python itself, - that version is used instead. - """ - - message: str - exceptions: list[Exception] - - def __init__(self, message: str, exceptions: list[Exception]) -> None: - self.message = message - self.exceptions = exceptions - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})" - - -class InvalidMetadata(ValueError): - """A metadata field contains invalid data.""" - - field: str - """The name of the field that contains invalid data.""" - - def __init__(self, field: str, message: str) -> None: - self.field = field - super().__init__(message) - - -# The RawMetadata class attempts to make as few assumptions about the underlying -# serialization formats as possible. The idea is that as long as a serialization -# formats offer some very basic primitives in *some* way then we can support -# serializing to and from that format. -class RawMetadata(TypedDict, total=False): - """A dictionary of raw core metadata. - - Each field in core metadata maps to a key of this dictionary (when data is - provided). The key is lower-case and underscores are used instead of dashes - compared to the equivalent core metadata field. Any core metadata field that - can be specified multiple times or can hold multiple values in a single - field have a key with a plural name. See :class:`Metadata` whose attributes - match the keys of this dictionary. - - Core metadata fields that can be specified multiple times are stored as a - list or dict depending on which is appropriate for the field. Any fields - which hold multiple values in a single field are stored as a list. - - """ - - # Metadata 1.0 - PEP 241 - metadata_version: str - name: str - version: str - platforms: list[str] - summary: str - description: str - keywords: list[str] - home_page: str - author: str - author_email: str - license: str - - # Metadata 1.1 - PEP 314 - supported_platforms: list[str] - download_url: str - classifiers: list[str] - requires: list[str] - provides: list[str] - obsoletes: list[str] - - # Metadata 1.2 - PEP 345 - maintainer: str - maintainer_email: str - requires_dist: list[str] - provides_dist: list[str] - obsoletes_dist: list[str] - requires_python: str - requires_external: list[str] - project_urls: dict[str, str] - - # Metadata 2.0 - # PEP 426 attempted to completely revamp the metadata format - # but got stuck without ever being able to build consensus on - # it and ultimately ended up withdrawn. - # - # However, a number of tools had started emitting METADATA with - # `2.0` Metadata-Version, so for historical reasons, this version - # was skipped. - - # Metadata 2.1 - PEP 566 - description_content_type: str - provides_extra: list[str] - - # Metadata 2.2 - PEP 643 - dynamic: list[str] - - # Metadata 2.3 - PEP 685 - # No new fields were added in PEP 685, just some edge case were - # tightened up to provide better interoperability. - - # Metadata 2.4 - PEP 639 - license_expression: str - license_files: list[str] - - # Metadata 2.5 - PEP 794 - import_names: list[str] - import_namespaces: list[str] - - -# 'keywords' is special as it's a string in the core metadata spec, but we -# represent it as a list. -_STRING_FIELDS = { - "author", - "author_email", - "description", - "description_content_type", - "download_url", - "home_page", - "license", - "license_expression", - "maintainer", - "maintainer_email", - "metadata_version", - "name", - "requires_python", - "summary", - "version", -} - -_LIST_FIELDS = { - "classifiers", - "dynamic", - "license_files", - "obsoletes", - "obsoletes_dist", - "platforms", - "provides", - "provides_dist", - "provides_extra", - "requires", - "requires_dist", - "requires_external", - "supported_platforms", - "import_names", - "import_namespaces", -} - -_DICT_FIELDS = { - "project_urls", -} - - -def _parse_keywords(data: str) -> list[str]: - """Split a string of comma-separated keywords into a list of keywords.""" - return [k.strip() for k in data.split(",")] - - -def _parse_project_urls(data: list[str]) -> dict[str, str]: - """Parse a list of label/URL string pairings separated by a comma.""" - urls = {} - for pair in data: - # Our logic is slightly tricky here as we want to try and do - # *something* reasonable with malformed data. - # - # The main thing that we have to worry about, is data that does - # not have a ',' at all to split the label from the Value. There - # isn't a singular right answer here, and we will fail validation - # later on (if the caller is validating) so it doesn't *really* - # matter, but since the missing value has to be an empty str - # and our return value is dict[str, str], if we let the key - # be the missing value, then they'd have multiple '' values that - # overwrite each other in a accumulating dict. - # - # The other potential issue is that it's possible to have the - # same label multiple times in the metadata, with no solid "right" - # answer with what to do in that case. As such, we'll do the only - # thing we can, which is treat the field as unparsable and add it - # to our list of unparsed fields. - # - # TODO: The spec doesn't say anything about if the keys should be - # considered case sensitive or not... logically they should - # be case-preserving and case-insensitive, but doing that - # would open up more cases where we might have duplicate - # entries. - label, _, url = (s.strip() for s in pair.partition(",")) - - if label in urls: - # The label already exists in our set of urls, so this field - # is unparsable, and we can just add the whole thing to our - # unparsable data and stop processing it. - raise KeyError("duplicate labels in project urls") - urls[label] = url - - return urls - - -def _get_payload(msg: email.message.Message, source: bytes | str) -> str: - """Get the body of the message.""" - # If our source is a str, then our caller has managed encodings for us, - # and we don't need to deal with it. - if isinstance(source, str): - payload = msg.get_payload() - assert isinstance(payload, str) - return payload - # If our source is a bytes, then we're managing the encoding and we need - # to deal with it. - else: - bpayload = msg.get_payload(decode=True) - assert isinstance(bpayload, bytes) - try: - return bpayload.decode("utf8", "strict") - except UnicodeDecodeError as exc: - raise ValueError("payload in an invalid encoding") from exc - - -# The various parse_FORMAT functions here are intended to be as lenient as -# possible in their parsing, while still returning a correctly typed -# RawMetadata. -# -# To aid in this, we also generally want to do as little touching of the -# data as possible, except where there are possibly some historic holdovers -# that make valid data awkward to work with. -# -# While this is a lower level, intermediate format than our ``Metadata`` -# class, some light touch ups can make a massive difference in usability. - -# Map METADATA fields to RawMetadata. -_EMAIL_TO_RAW_MAPPING = { - "author": "author", - "author-email": "author_email", - "classifier": "classifiers", - "description": "description", - "description-content-type": "description_content_type", - "download-url": "download_url", - "dynamic": "dynamic", - "home-page": "home_page", - "import-name": "import_names", - "import-namespace": "import_namespaces", - "keywords": "keywords", - "license": "license", - "license-expression": "license_expression", - "license-file": "license_files", - "maintainer": "maintainer", - "maintainer-email": "maintainer_email", - "metadata-version": "metadata_version", - "name": "name", - "obsoletes": "obsoletes", - "obsoletes-dist": "obsoletes_dist", - "platform": "platforms", - "project-url": "project_urls", - "provides": "provides", - "provides-dist": "provides_dist", - "provides-extra": "provides_extra", - "requires": "requires", - "requires-dist": "requires_dist", - "requires-external": "requires_external", - "requires-python": "requires_python", - "summary": "summary", - "supported-platform": "supported_platforms", - "version": "version", -} -_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()} - - -# This class is for writing RFC822 messages -class RFC822Policy(email.policy.EmailPolicy): - """ - This is :class:`email.policy.EmailPolicy`, but with a simple ``header_store_parse`` - implementation that handles multi-line values, and some nice defaults. - """ - - utf8 = True - mangle_from_ = False - max_line_length = 0 - - def header_store_parse(self, name: str, value: str) -> tuple[str, str]: - size = len(name) + 2 - value = value.replace("\n", "\n" + " " * size) - return (name, value) - - -# This class is for writing RFC822 messages -class RFC822Message(email.message.EmailMessage): - """ - This is :class:`email.message.EmailMessage` with two small changes: it defaults to - our `RFC822Policy`, and it correctly writes unicode when being called - with `bytes()`. - """ - - def __init__(self) -> None: - super().__init__(policy=RFC822Policy()) - - def as_bytes( - self, unixfrom: bool = False, policy: email.policy.Policy | None = None - ) -> bytes: - """ - Return the bytes representation of the message. - - This handles unicode encoding. - """ - return self.as_string(unixfrom, policy=policy).encode("utf-8") - - -def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]: - """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). - - This function returns a two-item tuple of dicts. The first dict is of - recognized fields from the core metadata specification. Fields that can be - parsed and translated into Python's built-in types are converted - appropriately. All other fields are left as-is. Fields that are allowed to - appear multiple times are stored as lists. - - The second dict contains all other fields from the metadata. This includes - any unrecognized fields. It also includes any fields which are expected to - be parsed into a built-in type but were not formatted appropriately. Finally, - any fields that are expected to appear only once but are repeated are - included in this dict. - - """ - raw: dict[str, str | list[str] | dict[str, str]] = {} - unparsed: dict[str, list[str]] = {} - - if isinstance(data, str): - parsed = email.parser.Parser(policy=email.policy.compat32).parsestr(data) - else: - parsed = email.parser.BytesParser(policy=email.policy.compat32).parsebytes(data) - - # We have to wrap parsed.keys() in a set, because in the case of multiple - # values for a key (a list), the key will appear multiple times in the - # list of keys, but we're avoiding that by using get_all(). - for name_with_case in frozenset(parsed.keys()): - # Header names in RFC are case insensitive, so we'll normalize to all - # lower case to make comparisons easier. - name = name_with_case.lower() - - # We use get_all() here, even for fields that aren't multiple use, - # because otherwise someone could have e.g. two Name fields, and we - # would just silently ignore it rather than doing something about it. - headers = parsed.get_all(name) or [] - - # The way the email module works when parsing bytes is that it - # unconditionally decodes the bytes as ascii using the surrogateescape - # handler. When you pull that data back out (such as with get_all() ), - # it looks to see if the str has any surrogate escapes, and if it does - # it wraps it in a Header object instead of returning the string. - # - # As such, we'll look for those Header objects, and fix up the encoding. - value = [] - # Flag if we have run into any issues processing the headers, thus - # signalling that the data belongs in 'unparsed'. - valid_encoding = True - for h in headers: - # It's unclear if this can return more types than just a Header or - # a str, so we'll just assert here to make sure. - assert isinstance(h, (email.header.Header, str)) - - # If it's a header object, we need to do our little dance to get - # the real data out of it. In cases where there is invalid data - # we're going to end up with mojibake, but there's no obvious, good - # way around that without reimplementing parts of the Header object - # ourselves. - # - # That should be fine since, if mojibacked happens, this key is - # going into the unparsed dict anyways. - if isinstance(h, email.header.Header): - # The Header object stores it's data as chunks, and each chunk - # can be independently encoded, so we'll need to check each - # of them. - chunks: list[tuple[bytes, str | None]] = [] - for binary, _encoding in email.header.decode_header(h): - try: - binary.decode("utf8", "strict") - except UnicodeDecodeError: - # Enable mojibake. - encoding = "latin1" - valid_encoding = False - else: - encoding = "utf8" - chunks.append((binary, encoding)) - - # Turn our chunks back into a Header object, then let that - # Header object do the right thing to turn them into a - # string for us. - value.append(str(email.header.make_header(chunks))) - # This is already a string, so just add it. - else: - value.append(h) - - # We've processed all of our values to get them into a list of str, - # but we may have mojibake data, in which case this is an unparsed - # field. - if not valid_encoding: - unparsed[name] = value - continue - - raw_name = _EMAIL_TO_RAW_MAPPING.get(name) - if raw_name is None: - # This is a bit of a weird situation, we've encountered a key that - # we don't know what it means, so we don't know whether it's meant - # to be a list or not. - # - # Since we can't really tell one way or another, we'll just leave it - # as a list, even though it may be a single item list, because that's - # what makes the most sense for email headers. - unparsed[name] = value - continue - - # If this is one of our string fields, then we'll check to see if our - # value is a list of a single item. If it is then we'll assume that - # it was emitted as a single string, and unwrap the str from inside - # the list. - # - # If it's any other kind of data, then we haven't the faintest clue - # what we should parse it as, and we have to just add it to our list - # of unparsed stuff. - if raw_name in _STRING_FIELDS and len(value) == 1: - raw[raw_name] = value[0] - # If this is import_names, we need to special case the empty field - # case, which converts to an empty list instead of None. We can't let - # the empty case slip through, as it will fail validation. - elif raw_name == "import_names" and value == [""]: - raw[raw_name] = [] - # If this is one of our list of string fields, then we can just assign - # the value, since email *only* has strings, and our get_all() call - # above ensures that this is a list. - elif raw_name in _LIST_FIELDS: - raw[raw_name] = value - # Special Case: Keywords - # The keywords field is implemented in the metadata spec as a str, - # but it conceptually is a list of strings, and is serialized using - # ", ".join(keywords), so we'll do some light data massaging to turn - # this into what it logically is. - elif raw_name == "keywords" and len(value) == 1: - raw[raw_name] = _parse_keywords(value[0]) - # Special Case: Project-URL - # The project urls is implemented in the metadata spec as a list of - # specially-formatted strings that represent a key and a value, which - # is fundamentally a mapping, however the email format doesn't support - # mappings in a sane way, so it was crammed into a list of strings - # instead. - # - # We will do a little light data massaging to turn this into a map as - # it logically should be. - elif raw_name == "project_urls": - try: - raw[raw_name] = _parse_project_urls(value) - except KeyError: - unparsed[name] = value - # Nothing that we've done has managed to parse this, so it'll just - # throw it in our unparsable data and move on. - else: - unparsed[name] = value - - # We need to support getting the Description from the message payload in - # addition to getting it from the the headers. This does mean, though, there - # is the possibility of it being set both ways, in which case we put both - # in 'unparsed' since we don't know which is right. - try: - payload = _get_payload(parsed, data) - except ValueError: - unparsed.setdefault("description", []).append( - parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload] - ) - else: - if payload: - # Check to see if we've already got a description, if so then both - # it, and this body move to unparsable. - if "description" in raw: - description_header = cast("str", raw.pop("description")) - unparsed.setdefault("description", []).extend( - [description_header, payload] - ) - elif "description" in unparsed: - unparsed["description"].append(payload) - else: - raw["description"] = payload - - # We need to cast our `raw` to a metadata, because a TypedDict only support - # literal key names, but we're computing our key names on purpose, but the - # way this function is implemented, our `TypedDict` can only have valid key - # names. - return cast("RawMetadata", raw), unparsed - - -_NOT_FOUND = object() - - -# Keep the two values in sync. -_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4", "2.5"] -_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4", "2.5"] - -_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"]) - - -class _Validator(Generic[T]): - """Validate a metadata field. - - All _process_*() methods correspond to a core metadata field. The method is - called with the field's raw value. If the raw value is valid it is returned - in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). - If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause - as appropriate). - """ - - name: str - raw_name: str - added: _MetadataVersion - - def __init__( - self, - *, - added: _MetadataVersion = "1.0", - ) -> None: - self.added = added - - def __set_name__(self, _owner: Metadata, name: str) -> None: - self.name = name - self.raw_name = _RAW_TO_EMAIL_MAPPING[name] - - def __get__(self, instance: Metadata, _owner: type[Metadata]) -> T: - # With Python 3.8, the caching can be replaced with functools.cached_property(). - # No need to check the cache as attribute lookup will resolve into the - # instance's __dict__ before __get__ is called. - cache = instance.__dict__ - value = instance._raw.get(self.name) - - # To make the _process_* methods easier, we'll check if the value is None - # and if this field is NOT a required attribute, and if both of those - # things are true, we'll skip the the converter. This will mean that the - # converters never have to deal with the None union. - if self.name in _REQUIRED_ATTRS or value is not None: - try: - converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}") - except AttributeError: - pass - else: - value = converter(value) - - cache[self.name] = value - try: - del instance._raw[self.name] # type: ignore[misc] - except KeyError: - pass - - return cast("T", value) - - def _invalid_metadata( - self, msg: str, cause: Exception | None = None - ) -> InvalidMetadata: - exc = InvalidMetadata( - self.raw_name, msg.format_map({"field": repr(self.raw_name)}) - ) - exc.__cause__ = cause - return exc - - def _process_metadata_version(self, value: str) -> _MetadataVersion: - # Implicitly makes Metadata-Version required. - if value not in _VALID_METADATA_VERSIONS: - raise self._invalid_metadata(f"{value!r} is not a valid metadata version") - return cast("_MetadataVersion", value) - - def _process_name(self, value: str) -> str: - if not value: - raise self._invalid_metadata("{field} is a required field") - # Validate the name as a side-effect. - try: - utils.canonicalize_name(value, validate=True) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return value - - def _process_version(self, value: str) -> version_module.Version: - if not value: - raise self._invalid_metadata("{field} is a required field") - try: - return version_module.parse(value) - except version_module.InvalidVersion as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_summary(self, value: str) -> str: - """Check the field contains no newlines.""" - if "\n" in value: - raise self._invalid_metadata("{field} must be a single line") - return value - - def _process_description_content_type(self, value: str) -> str: - content_types = {"text/plain", "text/x-rst", "text/markdown"} - message = email.message.EmailMessage() - message["content-type"] = value - - content_type, parameters = ( - # Defaults to `text/plain` if parsing failed. - message.get_content_type().lower(), - message["content-type"].params, - ) - # Check if content-type is valid or defaulted to `text/plain` and thus was - # not parseable. - if content_type not in content_types or content_type not in value.lower(): - raise self._invalid_metadata( - f"{{field}} must be one of {list(content_types)}, not {value!r}" - ) - - charset = parameters.get("charset", "UTF-8") - if charset != "UTF-8": - raise self._invalid_metadata( - f"{{field}} can only specify the UTF-8 charset, not {list(charset)}" - ) - - markdown_variants = {"GFM", "CommonMark"} - variant = parameters.get("variant", "GFM") # Use an acceptable default. - if content_type == "text/markdown" and variant not in markdown_variants: - raise self._invalid_metadata( - f"valid Markdown variants for {{field}} are {list(markdown_variants)}, " - f"not {variant!r}", - ) - return value - - def _process_dynamic(self, value: list[str]) -> list[str]: - for dynamic_field in map(str.lower, value): - if dynamic_field in {"name", "version", "metadata-version"}: - raise self._invalid_metadata( - f"{dynamic_field!r} is not allowed as a dynamic field" - ) - elif dynamic_field not in _EMAIL_TO_RAW_MAPPING: - raise self._invalid_metadata( - f"{dynamic_field!r} is not a valid dynamic field" - ) - return list(map(str.lower, value)) - - def _process_provides_extra( - self, - value: list[str], - ) -> list[utils.NormalizedName]: - normalized_names = [] - try: - for name in value: - normalized_names.append(utils.canonicalize_name(name, validate=True)) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return normalized_names - - def _process_requires_python(self, value: str) -> specifiers.SpecifierSet: - try: - return specifiers.SpecifierSet(value) - except specifiers.InvalidSpecifier as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_requires_dist( - self, - value: list[str], - ) -> list[requirements.Requirement]: - reqs = [] - try: - for req in value: - reqs.append(requirements.Requirement(req)) - except requirements.InvalidRequirement as exc: - raise self._invalid_metadata( - f"{req!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return reqs - - def _process_license_expression(self, value: str) -> NormalizedLicenseExpression: - try: - return licenses.canonicalize_license_expression(value) - except ValueError as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_license_files(self, value: list[str]) -> list[str]: - paths = [] - for path in value: - if ".." in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, " - "parent directory indicators are not allowed" - ) - if "*" in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be resolved" - ) - if ( - pathlib.PurePosixPath(path).is_absolute() - or pathlib.PureWindowsPath(path).is_absolute() - ): - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be relative" - ) - if pathlib.PureWindowsPath(path).as_posix() != path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must use '/' delimiter" - ) - paths.append(path) - return paths - - def _process_import_names(self, value: list[str]) -> list[str]: - for import_name in value: - name, semicolon, private = import_name.partition(";") - name = name.rstrip() - for identifier in name.split("."): - if not identifier.isidentifier(): - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}; " - f"{identifier!r} is not a valid identifier" - ) - elif keyword.iskeyword(identifier): - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}; " - f"{identifier!r} is a keyword" - ) - if semicolon and private.lstrip() != "private": - raise self._invalid_metadata( - f"{import_name!r} is invalid for {{field}}; " - "the only valid option is 'private'" - ) - return value - - _process_import_namespaces = _process_import_names - - -class Metadata: - """Representation of distribution metadata. - - Compared to :class:`RawMetadata`, this class provides objects representing - metadata fields instead of only using built-in types. Any invalid metadata - will cause :exc:`InvalidMetadata` to be raised (with a - :py:attr:`~BaseException.__cause__` attribute as appropriate). - """ - - _raw: RawMetadata - - @classmethod - def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> Metadata: - """Create an instance from :class:`RawMetadata`. - - If *validate* is true, all metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - ins = cls() - ins._raw = data.copy() # Mutations occur due to caching enriched values. - - if validate: - exceptions: list[Exception] = [] - try: - metadata_version = ins.metadata_version - metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version) - except InvalidMetadata as metadata_version_exc: - exceptions.append(metadata_version_exc) - metadata_version = None - - # Make sure to check for the fields that are present, the required - # fields (so their absence can be reported). - fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS - # Remove fields that have already been checked. - fields_to_check -= {"metadata_version"} - - for key in fields_to_check: - try: - if metadata_version: - # Can't use getattr() as that triggers descriptor protocol which - # will fail due to no value for the instance argument. - try: - field_metadata_version = cls.__dict__[key].added - except KeyError: - exc = InvalidMetadata(key, f"unrecognized field: {key!r}") - exceptions.append(exc) - continue - field_age = _VALID_METADATA_VERSIONS.index( - field_metadata_version - ) - if field_age > metadata_age: - field = _RAW_TO_EMAIL_MAPPING[key] - exc = InvalidMetadata( - field, - f"{field} introduced in metadata version " - f"{field_metadata_version}, not {metadata_version}", - ) - exceptions.append(exc) - continue - getattr(ins, key) - except InvalidMetadata as exc: - exceptions.append(exc) - - if exceptions: - raise ExceptionGroup("invalid metadata", exceptions) - - return ins - - @classmethod - def from_email(cls, data: bytes | str, *, validate: bool = True) -> Metadata: - """Parse metadata from email headers. - - If *validate* is true, the metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - raw, unparsed = parse_email(data) - - if validate: - exceptions: list[Exception] = [] - for unparsed_key in unparsed: - if unparsed_key in _EMAIL_TO_RAW_MAPPING: - message = f"{unparsed_key!r} has invalid data" - else: - message = f"unrecognized field: {unparsed_key!r}" - exceptions.append(InvalidMetadata(unparsed_key, message)) - - if exceptions: - raise ExceptionGroup("unparsed", exceptions) - - try: - return cls.from_raw(raw, validate=validate) - except ExceptionGroup as exc_group: - raise ExceptionGroup( - "invalid or unparsed metadata", exc_group.exceptions - ) from None - - metadata_version: _Validator[_MetadataVersion] = _Validator() - """:external:ref:`core-metadata-metadata-version` - (required; validated to be a valid metadata version)""" - # `name` is not normalized/typed to NormalizedName so as to provide access to - # the original/raw name. - name: _Validator[str] = _Validator() - """:external:ref:`core-metadata-name` - (required; validated using :func:`~packaging.utils.canonicalize_name` and its - *validate* parameter)""" - version: _Validator[version_module.Version] = _Validator() - """:external:ref:`core-metadata-version` (required)""" - dynamic: _Validator[list[str] | None] = _Validator( - added="2.2", - ) - """:external:ref:`core-metadata-dynamic` - (validated against core metadata field names and lowercased)""" - platforms: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-platform`""" - supported_platforms: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-supported-platform`""" - summary: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-summary` (validated to contain no newlines)""" - description: _Validator[str | None] = _Validator() # TODO 2.1: can be in body - """:external:ref:`core-metadata-description`""" - description_content_type: _Validator[str | None] = _Validator(added="2.1") - """:external:ref:`core-metadata-description-content-type` (validated)""" - keywords: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-keywords`""" - home_page: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-home-page`""" - download_url: _Validator[str | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-download-url`""" - author: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author`""" - author_email: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author-email`""" - maintainer: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer`""" - maintainer_email: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer-email`""" - license: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-license`""" - license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator( - added="2.4" - ) - """:external:ref:`core-metadata-license-expression`""" - license_files: _Validator[list[str] | None] = _Validator(added="2.4") - """:external:ref:`core-metadata-license-file`""" - classifiers: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-classifier`""" - requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-dist`""" - requires_python: _Validator[specifiers.SpecifierSet | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-python`""" - # Because `Requires-External` allows for non-PEP 440 version specifiers, we - # don't do any processing on the values. - requires_external: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-requires-external`""" - project_urls: _Validator[dict[str, str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-project-url`""" - # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation - # regardless of metadata version. - provides_extra: _Validator[list[utils.NormalizedName] | None] = _Validator( - added="2.1", - ) - """:external:ref:`core-metadata-provides-extra`""" - provides_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-provides-dist`""" - obsoletes_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-obsoletes-dist`""" - import_names: _Validator[list[str] | None] = _Validator(added="2.5") - """:external:ref:`core-metadata-import-name`""" - import_namespaces: _Validator[list[str] | None] = _Validator(added="2.5") - """:external:ref:`core-metadata-import-namespace`""" - requires: _Validator[list[str] | None] = _Validator(added="1.1") - """``Requires`` (deprecated)""" - provides: _Validator[list[str] | None] = _Validator(added="1.1") - """``Provides`` (deprecated)""" - obsoletes: _Validator[list[str] | None] = _Validator(added="1.1") - """``Obsoletes`` (deprecated)""" - - def as_rfc822(self) -> RFC822Message: - """ - Return an RFC822 message with the metadata. - """ - message = RFC822Message() - self._write_metadata(message) - return message - - def _write_metadata(self, message: RFC822Message) -> None: - """ - Return an RFC822 message with the metadata. - """ - for name, validator in self.__class__.__dict__.items(): - if isinstance(validator, _Validator) and name != "description": - value = getattr(self, name) - email_name = _RAW_TO_EMAIL_MAPPING[name] - if value is not None: - if email_name == "project-url": - for label, url in value.items(): - message[email_name] = f"{label}, {url}" - elif email_name == "keywords": - message[email_name] = ",".join(value) - elif email_name == "import-name" and value == []: - message[email_name] = "" - elif isinstance(value, list): - for item in value: - message[email_name] = str(item) - else: - message[email_name] = str(value) - - # The description is a special case because it is in the body of the message. - if self.description is not None: - message.set_payload(self.description) diff --git a/myenv/lib/python3.12/site-packages/packaging/py.typed b/myenv/lib/python3.12/site-packages/packaging/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/packaging/pylock.py b/myenv/lib/python3.12/site-packages/packaging/pylock.py deleted file mode 100644 index a564f15..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/pylock.py +++ /dev/null @@ -1,635 +0,0 @@ -from __future__ import annotations - -import dataclasses -import logging -import re -from collections.abc import Mapping, Sequence -from dataclasses import dataclass -from datetime import datetime -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Protocol, - TypeVar, -) - -from .markers import Marker -from .specifiers import SpecifierSet -from .utils import NormalizedName, is_normalized_name -from .version import Version - -if TYPE_CHECKING: # pragma: no cover - from pathlib import Path - - from typing_extensions import Self - -_logger = logging.getLogger(__name__) - -__all__ = [ - "Package", - "PackageArchive", - "PackageDirectory", - "PackageSdist", - "PackageVcs", - "PackageWheel", - "Pylock", - "PylockUnsupportedVersionError", - "PylockValidationError", - "is_valid_pylock_path", -] - -_T = TypeVar("_T") -_T2 = TypeVar("_T2") - - -class _FromMappingProtocol(Protocol): # pragma: no cover - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: ... - - -_FromMappingProtocolT = TypeVar("_FromMappingProtocolT", bound=_FromMappingProtocol) - - -_PYLOCK_FILE_NAME_RE = re.compile(r"^pylock\.([^.]+)\.toml$") - - -def is_valid_pylock_path(path: Path) -> bool: - """Check if the given path is a valid pylock file path.""" - return path.name == "pylock.toml" or bool(_PYLOCK_FILE_NAME_RE.match(path.name)) - - -def _toml_key(key: str) -> str: - return key.replace("_", "-") - - -def _toml_value(key: str, value: Any) -> Any: # noqa: ANN401 - if isinstance(value, (Version, Marker, SpecifierSet)): - return str(value) - if isinstance(value, Sequence) and key == "environments": - return [str(v) for v in value] - return value - - -def _toml_dict_factory(data: list[tuple[str, Any]]) -> dict[str, Any]: - return { - _toml_key(key): _toml_value(key, value) - for key, value in data - if value is not None - } - - -def _get(d: Mapping[str, Any], expected_type: type[_T], key: str) -> _T | None: - """Get a value from the dictionary and verify it's the expected type.""" - if (value := d.get(key)) is None: - return None - if not isinstance(value, expected_type): - raise PylockValidationError( - f"Unexpected type {type(value).__name__} " - f"(expected {expected_type.__name__})", - context=key, - ) - return value - - -def _get_required(d: Mapping[str, Any], expected_type: type[_T], key: str) -> _T: - """Get a required value from the dictionary and verify it's the expected type.""" - if (value := _get(d, expected_type, key)) is None: - raise _PylockRequiredKeyError(key) - return value - - -def _get_sequence( - d: Mapping[str, Any], expected_item_type: type[_T], key: str -) -> Sequence[_T] | None: - """Get a list value from the dictionary and verify it's the expected items type.""" - if (value := _get(d, Sequence, key)) is None: # type: ignore[type-abstract] - return None - if isinstance(value, (str, bytes)): - # special case: str and bytes are Sequences, but we want to reject it - raise PylockValidationError( - f"Unexpected type {type(value).__name__} (expected Sequence)", - context=key, - ) - for i, item in enumerate(value): - if not isinstance(item, expected_item_type): - raise PylockValidationError( - f"Unexpected type {type(item).__name__} " - f"(expected {expected_item_type.__name__})", - context=f"{key}[{i}]", - ) - return value - - -def _get_as( - d: Mapping[str, Any], - expected_type: type[_T], - target_type: Callable[[_T], _T2], - key: str, -) -> _T2 | None: - """Get a value from the dictionary, verify it's the expected type, - and convert to the target type. - - This assumes the target_type constructor accepts the value. - """ - if (value := _get(d, expected_type, key)) is None: - return None - try: - return target_type(value) - except Exception as e: - raise PylockValidationError(e, context=key) from e - - -def _get_required_as( - d: Mapping[str, Any], - expected_type: type[_T], - target_type: Callable[[_T], _T2], - key: str, -) -> _T2: - """Get a required value from the dict, verify it's the expected type, - and convert to the target type.""" - if (value := _get_as(d, expected_type, target_type, key)) is None: - raise _PylockRequiredKeyError(key) - return value - - -def _get_sequence_as( - d: Mapping[str, Any], - expected_item_type: type[_T], - target_item_type: Callable[[_T], _T2], - key: str, -) -> list[_T2] | None: - """Get list value from dictionary and verify expected items type.""" - if (value := _get_sequence(d, expected_item_type, key)) is None: - return None - result = [] - try: - for item in value: - typed_item = target_item_type(item) - result.append(typed_item) - except Exception as e: - raise PylockValidationError(e, context=f"{key}[{len(result)}]") from e - return result - - -def _get_object( - d: Mapping[str, Any], target_type: type[_FromMappingProtocolT], key: str -) -> _FromMappingProtocolT | None: - """Get a dictionary value from the dictionary and convert it to a dataclass.""" - if (value := _get(d, Mapping, key)) is None: # type: ignore[type-abstract] - return None - try: - return target_type._from_dict(value) - except Exception as e: - raise PylockValidationError(e, context=key) from e - - -def _get_sequence_of_objects( - d: Mapping[str, Any], target_item_type: type[_FromMappingProtocolT], key: str -) -> list[_FromMappingProtocolT] | None: - """Get a list value from the dictionary and convert its items to a dataclass.""" - if (value := _get_sequence(d, Mapping, key)) is None: # type: ignore[type-abstract] - return None - result: list[_FromMappingProtocolT] = [] - try: - for item in value: - typed_item = target_item_type._from_dict(item) - result.append(typed_item) - except Exception as e: - raise PylockValidationError(e, context=f"{key}[{len(result)}]") from e - return result - - -def _get_required_sequence_of_objects( - d: Mapping[str, Any], target_item_type: type[_FromMappingProtocolT], key: str -) -> Sequence[_FromMappingProtocolT]: - """Get a required list value from the dictionary and convert its items to a - dataclass.""" - if (result := _get_sequence_of_objects(d, target_item_type, key)) is None: - raise _PylockRequiredKeyError(key) - return result - - -def _validate_normalized_name(name: str) -> NormalizedName: - """Validate that a string is a NormalizedName.""" - if not is_normalized_name(name): - raise PylockValidationError(f"Name {name!r} is not normalized") - return NormalizedName(name) - - -def _validate_path_url(path: str | None, url: str | None) -> None: - if not path and not url: - raise PylockValidationError("path or url must be provided") - - -def _validate_hashes(hashes: Mapping[str, Any]) -> Mapping[str, Any]: - if not hashes: - raise PylockValidationError("At least one hash must be provided") - if not all(isinstance(hash_val, str) for hash_val in hashes.values()): - raise PylockValidationError("Hash values must be strings") - return hashes - - -class PylockValidationError(Exception): - """Raised when when input data is not spec-compliant.""" - - context: str | None = None - message: str - - def __init__( - self, - cause: str | Exception, - *, - context: str | None = None, - ) -> None: - if isinstance(cause, PylockValidationError): - if cause.context: - self.context = ( - f"{context}.{cause.context}" if context else cause.context - ) - else: - self.context = context - self.message = cause.message - else: - self.context = context - self.message = str(cause) - - def __str__(self) -> str: - if self.context: - return f"{self.message} in {self.context!r}" - return self.message - - -class _PylockRequiredKeyError(PylockValidationError): - def __init__(self, key: str) -> None: - super().__init__("Missing required value", context=key) - - -class PylockUnsupportedVersionError(PylockValidationError): - """Raised when encountering an unsupported `lock_version`.""" - - -@dataclass(frozen=True, init=False) -class PackageVcs: - type: str - url: str | None = None - path: str | None = None - requested_revision: str | None = None - commit_id: str # type: ignore[misc] - subdirectory: str | None = None - - def __init__( - self, - *, - type: str, - url: str | None = None, - path: str | None = None, - requested_revision: str | None = None, - commit_id: str, - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "type", type) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "requested_revision", requested_revision) - object.__setattr__(self, "commit_id", commit_id) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_vcs = cls( - type=_get_required(d, str, "type"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - requested_revision=_get(d, str, "requested-revision"), - commit_id=_get_required(d, str, "commit-id"), - subdirectory=_get(d, str, "subdirectory"), - ) - _validate_path_url(package_vcs.path, package_vcs.url) - return package_vcs - - -@dataclass(frozen=True, init=False) -class PackageDirectory: - path: str - editable: bool | None = None - subdirectory: str | None = None - - def __init__( - self, - *, - path: str, - editable: bool | None = None, - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "path", path) - object.__setattr__(self, "editable", editable) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - return cls( - path=_get_required(d, str, "path"), - editable=_get(d, bool, "editable"), - subdirectory=_get(d, str, "subdirectory"), - ) - - -@dataclass(frozen=True, init=False) -class PackageArchive: - url: str | None = None - path: str | None = None - size: int | None = None - upload_time: datetime | None = None - hashes: Mapping[str, str] # type: ignore[misc] - subdirectory: str | None = None - - def __init__( - self, - *, - url: str | None = None, - path: str | None = None, - size: int | None = None, - upload_time: datetime | None = None, - hashes: Mapping[str, str], - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "hashes", hashes) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_archive = cls( - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - upload_time=_get(d, datetime, "upload-time"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - subdirectory=_get(d, str, "subdirectory"), - ) - _validate_path_url(package_archive.path, package_archive.url) - return package_archive - - -@dataclass(frozen=True, init=False) -class PackageSdist: - name: str | None = None - upload_time: datetime | None = None - url: str | None = None - path: str | None = None - size: int | None = None - hashes: Mapping[str, str] # type: ignore[misc] - - def __init__( - self, - *, - name: str | None = None, - upload_time: datetime | None = None, - url: str | None = None, - path: str | None = None, - size: int | None = None, - hashes: Mapping[str, str], - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "hashes", hashes) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_sdist = cls( - name=_get(d, str, "name"), - upload_time=_get(d, datetime, "upload-time"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - ) - _validate_path_url(package_sdist.path, package_sdist.url) - return package_sdist - - -@dataclass(frozen=True, init=False) -class PackageWheel: - name: str | None = None - upload_time: datetime | None = None - url: str | None = None - path: str | None = None - size: int | None = None - hashes: Mapping[str, str] # type: ignore[misc] - - def __init__( - self, - *, - name: str | None = None, - upload_time: datetime | None = None, - url: str | None = None, - path: str | None = None, - size: int | None = None, - hashes: Mapping[str, str], - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "hashes", hashes) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_wheel = cls( - name=_get(d, str, "name"), - upload_time=_get(d, datetime, "upload-time"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - ) - _validate_path_url(package_wheel.path, package_wheel.url) - return package_wheel - - -@dataclass(frozen=True, init=False) -class Package: - name: NormalizedName - version: Version | None = None - marker: Marker | None = None - requires_python: SpecifierSet | None = None - dependencies: Sequence[Mapping[str, Any]] | None = None - vcs: PackageVcs | None = None - directory: PackageDirectory | None = None - archive: PackageArchive | None = None - index: str | None = None - sdist: PackageSdist | None = None - wheels: Sequence[PackageWheel] | None = None - attestation_identities: Sequence[Mapping[str, Any]] | None = None - tool: Mapping[str, Any] | None = None - - def __init__( - self, - *, - name: NormalizedName, - version: Version | None = None, - marker: Marker | None = None, - requires_python: SpecifierSet | None = None, - dependencies: Sequence[Mapping[str, Any]] | None = None, - vcs: PackageVcs | None = None, - directory: PackageDirectory | None = None, - archive: PackageArchive | None = None, - index: str | None = None, - sdist: PackageSdist | None = None, - wheels: Sequence[PackageWheel] | None = None, - attestation_identities: Sequence[Mapping[str, Any]] | None = None, - tool: Mapping[str, Any] | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "version", version) - object.__setattr__(self, "marker", marker) - object.__setattr__(self, "requires_python", requires_python) - object.__setattr__(self, "dependencies", dependencies) - object.__setattr__(self, "vcs", vcs) - object.__setattr__(self, "directory", directory) - object.__setattr__(self, "archive", archive) - object.__setattr__(self, "index", index) - object.__setattr__(self, "sdist", sdist) - object.__setattr__(self, "wheels", wheels) - object.__setattr__(self, "attestation_identities", attestation_identities) - object.__setattr__(self, "tool", tool) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package = cls( - name=_get_required_as(d, str, _validate_normalized_name, "name"), - version=_get_as(d, str, Version, "version"), - requires_python=_get_as(d, str, SpecifierSet, "requires-python"), - dependencies=_get_sequence(d, Mapping, "dependencies"), # type: ignore[type-abstract] - marker=_get_as(d, str, Marker, "marker"), - vcs=_get_object(d, PackageVcs, "vcs"), - directory=_get_object(d, PackageDirectory, "directory"), - archive=_get_object(d, PackageArchive, "archive"), - index=_get(d, str, "index"), - sdist=_get_object(d, PackageSdist, "sdist"), - wheels=_get_sequence_of_objects(d, PackageWheel, "wheels"), - attestation_identities=_get_sequence(d, Mapping, "attestation-identities"), # type: ignore[type-abstract] - tool=_get(d, Mapping, "tool"), # type: ignore[type-abstract] - ) - distributions = bool(package.sdist) + len(package.wheels or []) - direct_urls = ( - bool(package.vcs) + bool(package.directory) + bool(package.archive) - ) - if distributions > 0 and direct_urls > 0: - raise PylockValidationError( - "None of vcs, directory, archive must be set if sdist or wheels are set" - ) - if distributions == 0 and direct_urls != 1: - raise PylockValidationError( - "Exactly one of vcs, directory, archive must be set " - "if sdist and wheels are not set" - ) - try: - for i, attestation_identity in enumerate( # noqa: B007 - package.attestation_identities or [] - ): - _get_required(attestation_identity, str, "kind") - except Exception as e: - raise PylockValidationError( - e, context=f"attestation-identities[{i}]" - ) from e - return package - - @property - def is_direct(self) -> bool: - return not (self.sdist or self.wheels) - - -@dataclass(frozen=True, init=False) -class Pylock: - """A class representing a pylock file.""" - - lock_version: Version - environments: Sequence[Marker] | None = None - requires_python: SpecifierSet | None = None - extras: Sequence[NormalizedName] | None = None - dependency_groups: Sequence[str] | None = None - default_groups: Sequence[str] | None = None - created_by: str # type: ignore[misc] - packages: Sequence[Package] # type: ignore[misc] - tool: Mapping[str, Any] | None = None - - def __init__( - self, - *, - lock_version: Version, - environments: Sequence[Marker] | None = None, - requires_python: SpecifierSet | None = None, - extras: Sequence[NormalizedName] | None = None, - dependency_groups: Sequence[str] | None = None, - default_groups: Sequence[str] | None = None, - created_by: str, - packages: Sequence[Package], - tool: Mapping[str, Any] | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "lock_version", lock_version) - object.__setattr__(self, "environments", environments) - object.__setattr__(self, "requires_python", requires_python) - object.__setattr__(self, "extras", extras) - object.__setattr__(self, "dependency_groups", dependency_groups) - object.__setattr__(self, "default_groups", default_groups) - object.__setattr__(self, "created_by", created_by) - object.__setattr__(self, "packages", packages) - object.__setattr__(self, "tool", tool) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - pylock = cls( - lock_version=_get_required_as(d, str, Version, "lock-version"), - environments=_get_sequence_as(d, str, Marker, "environments"), - extras=_get_sequence_as(d, str, _validate_normalized_name, "extras"), - dependency_groups=_get_sequence(d, str, "dependency-groups"), - default_groups=_get_sequence(d, str, "default-groups"), - created_by=_get_required(d, str, "created-by"), - requires_python=_get_as(d, str, SpecifierSet, "requires-python"), - packages=_get_required_sequence_of_objects(d, Package, "packages"), - tool=_get(d, Mapping, "tool"), # type: ignore[type-abstract] - ) - if not Version("1") <= pylock.lock_version < Version("2"): - raise PylockUnsupportedVersionError( - f"pylock version {pylock.lock_version} is not supported" - ) - if pylock.lock_version > Version("1.0"): - _logger.warning( - "pylock minor version %s is not supported", pylock.lock_version - ) - return pylock - - @classmethod - def from_dict(cls, d: Mapping[str, Any], /) -> Self: - """Create and validate a Pylock instance from a TOML dictionary. - - Raises :class:`PylockValidationError` if the input data is not - spec-compliant. - """ - return cls._from_dict(d) - - def to_dict(self) -> Mapping[str, Any]: - """Convert the Pylock instance to a TOML dictionary.""" - return dataclasses.asdict(self, dict_factory=_toml_dict_factory) - - def validate(self) -> None: - """Validate the Pylock instance against the specification. - - Raises :class:`PylockValidationError` otherwise.""" - self.from_dict(self.to_dict()) diff --git a/myenv/lib/python3.12/site-packages/packaging/requirements.py b/myenv/lib/python3.12/site-packages/packaging/requirements.py deleted file mode 100644 index 3079be6..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/requirements.py +++ /dev/null @@ -1,86 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import annotations - -from typing import Iterator - -from ._parser import parse_requirement as _parse_requirement -from ._tokenizer import ParserSyntaxError -from .markers import Marker, _normalize_extra_values -from .specifiers import SpecifierSet -from .utils import canonicalize_name - - -class InvalidRequirement(ValueError): - """ - An invalid requirement was found, users should refer to PEP 508. - """ - - -class Requirement: - """Parse a requirement. - - Parse a given requirement string into its parts, such as name, specifier, - URL, and extras. Raises InvalidRequirement on a badly-formed requirement - string. - """ - - # TODO: Can we test whether something is contained within a requirement? - # If so how do we do that? Do we need to test against the _name_ of - # the thing as well as the version? What about the markers? - # TODO: Can we normalize the name and extra name? - - def __init__(self, requirement_string: str) -> None: - try: - parsed = _parse_requirement(requirement_string) - except ParserSyntaxError as e: - raise InvalidRequirement(str(e)) from e - - self.name: str = parsed.name - self.url: str | None = parsed.url or None - self.extras: set[str] = set(parsed.extras or []) - self.specifier: SpecifierSet = SpecifierSet(parsed.specifier) - self.marker: Marker | None = None - if parsed.marker is not None: - self.marker = Marker.__new__(Marker) - self.marker._markers = _normalize_extra_values(parsed.marker) - - def _iter_parts(self, name: str) -> Iterator[str]: - yield name - - if self.extras: - formatted_extras = ",".join(sorted(self.extras)) - yield f"[{formatted_extras}]" - - if self.specifier: - yield str(self.specifier) - - if self.url: - yield f" @ {self.url}" - if self.marker: - yield " " - - if self.marker: - yield f"; {self.marker}" - - def __str__(self) -> str: - return "".join(self._iter_parts(self.name)) - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}('{self}')>" - - def __hash__(self) -> int: - return hash(tuple(self._iter_parts(canonicalize_name(self.name)))) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Requirement): - return NotImplemented - - return ( - canonicalize_name(self.name) == canonicalize_name(other.name) - and self.extras == other.extras - and self.specifier == other.specifier - and self.url == other.url - and self.marker == other.marker - ) diff --git a/myenv/lib/python3.12/site-packages/packaging/specifiers.py b/myenv/lib/python3.12/site-packages/packaging/specifiers.py deleted file mode 100644 index 5d26b0d..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/specifiers.py +++ /dev/null @@ -1,1068 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier - from packaging.version import Version -""" - -from __future__ import annotations - -import abc -import itertools -import re -from typing import Callable, Final, Iterable, Iterator, TypeVar, Union - -from .utils import canonicalize_version -from .version import InvalidVersion, Version - -UnparsedVersion = Union[Version, str] -UnparsedVersionVar = TypeVar("UnparsedVersionVar", bound=UnparsedVersion) -CallableOperator = Callable[[Version, str], bool] - - -def _coerce_version(version: UnparsedVersion) -> Version | None: - if not isinstance(version, Version): - try: - version = Version(version) - except InvalidVersion: - return None - return version - - -def _public_version(version: Version) -> Version: - return version.__replace__(local=None) - - -def _base_version(version: Version) -> Version: - return version.__replace__(pre=None, post=None, dev=None, local=None) - - -class InvalidSpecifier(ValueError): - """ - Raised when attempting to create a :class:`Specifier` with a specifier - string that is invalid. - - >>> Specifier("lolwat") - Traceback (most recent call last): - ... - packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat' - """ - - -class BaseSpecifier(metaclass=abc.ABCMeta): - __slots__ = () - __match_args__ = ("_str",) - - @property - def _str(self) -> str: - """Internal property for match_args""" - return str(self) - - @abc.abstractmethod - def __str__(self) -> str: - """ - Returns the str representation of this Specifier-like object. This - should be representative of the Specifier itself. - """ - - @abc.abstractmethod - def __hash__(self) -> int: - """ - Returns a hash value for this Specifier-like object. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Returns a boolean representing whether or not the two Specifier-like - objects are equal. - - :param other: The other object to check against. - """ - - @property - @abc.abstractmethod - def prereleases(self) -> bool | None: - """Whether or not pre-releases as a whole are allowed. - - This can be set to either ``True`` or ``False`` to explicitly enable or disable - prereleases or it can be set to ``None`` (the default) to use default semantics. - """ - - @prereleases.setter # noqa: B027 - def prereleases(self, value: bool) -> None: - """Setter for :attr:`prereleases`. - - :param value: The value to set. - """ - - @abc.abstractmethod - def contains(self, item: str, prereleases: bool | None = None) -> bool: - """ - Determines if the given item is contained within this specifier. - """ - - @abc.abstractmethod - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """ - Takes an iterable of items and filters them so that only items which - are contained within this specifier are allowed in it. - """ - - -class Specifier(BaseSpecifier): - """This class abstracts handling of version specifiers. - - .. tip:: - - It is generally not required to instantiate this manually. You should instead - prefer to work with :class:`SpecifierSet` instead, which can parse - comma-separated version specifiers (which is what package metadata contains). - """ - - __slots__ = ("_prereleases", "_spec", "_spec_version") - - _operator_regex_str = r""" - (?P(~=|==|!=|<=|>=|<|>|===)) - """ - _version_regex_str = r""" - (?P - (?: - # The identity operators allow for an escape hatch that will - # do an exact string match of the version you wish to install. - # This will not be parsed by PEP 440 and we cannot determine - # any semantic meaning from it. This operator is discouraged - # but included entirely as an escape hatch. - (?<====) # Only match for the identity operator - \s* - [^\s;)]* # The arbitrary version can be just about anything, - # we match everything except for whitespace, a - # semi-colon for marker support, and a closing paren - # since versions can be enclosed in them. - ) - | - (?: - # The (non)equality operators allow for wild card and local - # versions to be specified so we have to define these two - # operators separately to enable that. - (?<===|!=) # Only match for equals and not equals - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - - # You cannot use a wild card and a pre-release, post-release, a dev or - # local version together so group them with a | and make them optional. - (?: - \.\* # Wild card syntax of .* - | - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local - )? - ) - | - (?: - # The compatible operator requires at least two digits in the - # release segment. - (?<=~=) # Only match for the compatible operator - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - | - (?: - # All other operators only allow a sub set of what the - # (non)equality operators do. Specifically they do not allow - # local versions to be specified nor do they allow the prefix - # matching wild cards. - (?=": "greater_than_equal", - "<": "less_than", - ">": "greater_than", - "===": "arbitrary", - } - - def __init__(self, spec: str = "", prereleases: bool | None = None) -> None: - """Initialize a Specifier instance. - - :param spec: - The string representation of a specifier which will be parsed and - normalized before use. - :param prereleases: - This tells the specifier if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - :raises InvalidSpecifier: - If the given specifier is invalid (i.e. bad syntax). - """ - match = self._regex.fullmatch(spec) - if not match: - raise InvalidSpecifier(f"Invalid specifier: {spec!r}") - - self._spec: tuple[str, str] = ( - match.group("operator").strip(), - match.group("version").strip(), - ) - - # Store whether or not this Specifier should accept prereleases - self._prereleases = prereleases - - # Specifier version cache - self._spec_version: tuple[str, Version] | None = None - - def _get_spec_version(self, version: str) -> Version | None: - """One element cache, as only one spec Version is needed per Specifier.""" - if self._spec_version is not None and self._spec_version[0] == version: - return self._spec_version[1] - - version_specifier = _coerce_version(version) - if version_specifier is None: - return None - - self._spec_version = (version, version_specifier) - return version_specifier - - def _require_spec_version(self, version: str) -> Version: - """Get spec version, asserting it's valid (not for === operator). - - This method should only be called for operators where version - strings are guaranteed to be valid PEP 440 versions (not ===). - """ - spec_version = self._get_spec_version(version) - assert spec_version is not None - return spec_version - - @property - def prereleases(self) -> bool | None: - # If there is an explicit prereleases set for this, then we'll just - # blindly use that. - if self._prereleases is not None: - return self._prereleases - - # Only the "!=" operator does not imply prereleases when - # the version in the specifier is a prerelease. - operator, version_str = self._spec - if operator != "!=": - # The == specifier with trailing .* cannot include prereleases - # e.g. "==1.0a1.*" is not valid. - if operator == "==" and version_str.endswith(".*"): - return False - - # "===" can have arbitrary string versions, so we cannot parse - # those, we take prereleases as unknown (None) for those. - version = self._get_spec_version(version_str) - if version is None: - return None - - # For all other operators, use the check if spec Version - # object implies pre-releases. - if version.is_prerelease: - return True - - return False - - @prereleases.setter - def prereleases(self, value: bool | None) -> None: - self._prereleases = value - - @property - def operator(self) -> str: - """The operator of this specifier. - - >>> Specifier("==1.2.3").operator - '==' - """ - return self._spec[0] - - @property - def version(self) -> str: - """The version of this specifier. - - >>> Specifier("==1.2.3").version - '1.2.3' - """ - return self._spec[1] - - def __repr__(self) -> str: - """A representation of the Specifier that shows all internal state. - - >>> Specifier('>=1.0.0') - =1.0.0')> - >>> Specifier('>=1.0.0', prereleases=False) - =1.0.0', prereleases=False)> - >>> Specifier('>=1.0.0', prereleases=True) - =1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"<{self.__class__.__name__}({str(self)!r}{pre})>" - - def __str__(self) -> str: - """A string representation of the Specifier that can be round-tripped. - - >>> str(Specifier('>=1.0.0')) - '>=1.0.0' - >>> str(Specifier('>=1.0.0', prereleases=False)) - '>=1.0.0' - """ - return "{}{}".format(*self._spec) - - @property - def _canonical_spec(self) -> tuple[str, str]: - operator, version = self._spec - if operator == "===" or version.endswith(".*"): - return operator, version - - spec_version = self._require_spec_version(version) - - canonical_version = canonicalize_version( - spec_version, strip_trailing_zero=(operator != "~=") - ) - - return operator, canonical_version - - def __hash__(self) -> int: - return hash(self._canonical_spec) - - def __eq__(self, other: object) -> bool: - """Whether or not the two Specifier-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0") - True - >>> (Specifier("==1.2.3", prereleases=False) == - ... Specifier("==1.2.3", prereleases=True)) - True - >>> Specifier("==1.2.3") == "==1.2.3" - True - >>> Specifier("==1.2.3") == Specifier("==1.2.4") - False - >>> Specifier("==1.2.3") == Specifier("~=1.2.3") - False - """ - if isinstance(other, str): - try: - other = self.__class__(str(other)) - except InvalidSpecifier: - return NotImplemented - elif not isinstance(other, self.__class__): - return NotImplemented - - return self._canonical_spec == other._canonical_spec - - def _get_operator(self, op: str) -> CallableOperator: - operator_callable: CallableOperator = getattr( - self, f"_compare_{self._operators[op]}" - ) - return operator_callable - - def _compare_compatible(self, prospective: Version, spec: str) -> bool: - # Compatible releases have an equivalent combination of >= and ==. That - # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to - # implement this in terms of the other specifiers instead of - # implementing it ourselves. The only thing we need to do is construct - # the other specifiers. - - # We want everything but the last item in the version, but we want to - # ignore suffix segments. - prefix = _version_join( - list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] - ) - - # Add the prefix notation to the end of our string - prefix += ".*" - - return self._get_operator(">=")(prospective, spec) and self._get_operator("==")( - prospective, prefix - ) - - def _compare_equal(self, prospective: Version, spec: str) -> bool: - # We need special logic to handle prefix matching - if spec.endswith(".*"): - # In the case of prefix matching we want to ignore local segment. - normalized_prospective = canonicalize_version( - _public_version(prospective), strip_trailing_zero=False - ) - # Get the normalized version string ignoring the trailing .* - normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False) - # Split the spec out by bangs and dots, and pretend that there is - # an implicit dot in between a release segment and a pre-release segment. - split_spec = _version_split(normalized_spec) - - # Split the prospective version out by bangs and dots, and pretend - # that there is an implicit dot in between a release segment and - # a pre-release segment. - split_prospective = _version_split(normalized_prospective) - - # 0-pad the prospective version before shortening it to get the correct - # shortened version. - padded_prospective, _ = _pad_version(split_prospective, split_spec) - - # Shorten the prospective version to be the same length as the spec - # so that we can determine if the specifier is a prefix of the - # prospective version or not. - shortened_prospective = padded_prospective[: len(split_spec)] - - return shortened_prospective == split_spec - else: - # Convert our spec string into a Version - spec_version = self._require_spec_version(spec) - - # If the specifier does not have a local segment, then we want to - # act as if the prospective version also does not have a local - # segment. - if not spec_version.local: - prospective = _public_version(prospective) - - return prospective == spec_version - - def _compare_not_equal(self, prospective: Version, spec: str) -> bool: - return not self._compare_equal(prospective, spec) - - def _compare_less_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return _public_version(prospective) <= self._require_spec_version(spec) - - def _compare_greater_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return _public_version(prospective) >= self._require_spec_version(spec) - - def _compare_less_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = self._require_spec_version(spec_str) - - # Check to see if the prospective version is less than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective < spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a pre-release version, that we do not accept pre-release - # versions for the version mentioned in the specifier (e.g. <3.1 should - # not match 3.1.dev0, but should match 3.0.dev0). - if ( - not spec.is_prerelease - and prospective.is_prerelease - and _base_version(prospective) == _base_version(spec) - ): - return False - - # If we've gotten to here, it means that prospective version is both - # less than the spec version *and* it's not a pre-release of the same - # version in the spec. - return True - - def _compare_greater_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = self._require_spec_version(spec_str) - - # Check to see if the prospective version is greater than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective > spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a post-release version, that we do not accept - # post-release versions for the version mentioned in the specifier - # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). - if ( - not spec.is_postrelease - and prospective.is_postrelease - and _base_version(prospective) == _base_version(spec) - ): - return False - - # Ensure that we do not allow a local version of the version mentioned - # in the specifier, which is technically greater than, to match. - if prospective.local is not None and _base_version( - prospective - ) == _base_version(spec): - return False - - # If we've gotten to here, it means that prospective version is both - # greater than the spec version *and* it's not a pre-release of the - # same version in the spec. - return True - - def _compare_arbitrary(self, prospective: Version | str, spec: str) -> bool: - return str(prospective).lower() == str(spec).lower() - - def __contains__(self, item: str | Version) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in Specifier(">=1.2.3") - True - >>> Version("1.2.3") in Specifier(">=1.2.3") - True - >>> "1.0.0" in Specifier(">=1.2.3") - False - >>> "1.3.0a1" in Specifier(">=1.2.3") - True - >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True) - True - """ - return self.contains(item) - - def contains(self, item: UnparsedVersion, prereleases: bool | None = None) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this Specifier. If set to - ``None`` (the default), it will follow the recommendation from - :pep:`440` and match prereleases, as there are no other versions. - - >>> Specifier(">=1.2.3").contains("1.2.3") - True - >>> Specifier(">=1.2.3").contains(Version("1.2.3")) - True - >>> Specifier(">=1.2.3").contains("1.0.0") - False - >>> Specifier(">=1.2.3").contains("1.3.0a1") - True - >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1") - False - >>> Specifier(">=1.2.3").contains("1.3.0a1") - True - """ - - return bool(list(self.filter([item], prereleases=prereleases))) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifier. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases if there are no other versions. - - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")])) - ['1.2.3', '1.3', ] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"])) - ['1.5a1'] - >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - """ - prereleases_versions = [] - found_non_prereleases = False - - # Determine if to include prereleases by default - include_prereleases = ( - prereleases if prereleases is not None else self.prereleases - ) - - # Get the matching operator - operator_callable = self._get_operator(self.operator) - - # Filter versions - for version in iterable: - parsed_version = _coerce_version(version) - if parsed_version is None: - # === operator can match arbitrary (non-version) strings - if self.operator == "===" and self._compare_arbitrary( - version, self.version - ): - yield version - elif operator_callable(parsed_version, self.version): - # If it's not a prerelease or prereleases are allowed, yield it directly - if not parsed_version.is_prerelease or include_prereleases: - found_non_prereleases = True - yield version - # Otherwise collect prereleases for potential later use - elif prereleases is None and self._prereleases is not False: - prereleases_versions.append(version) - - # If no non-prereleases were found and prereleases weren't - # explicitly forbidden, yield the collected prereleases - if ( - not found_non_prereleases - and prereleases is None - and self._prereleases is not False - ): - yield from prereleases_versions - - -_prefix_regex = re.compile(r"([0-9]+)((?:a|b|c|rc)[0-9]+)") - - -def _version_split(version: str) -> list[str]: - """Split version into components. - - The split components are intended for version comparison. The logic does - not attempt to retain the original version string, so joining the - components back with :func:`_version_join` may not produce the original - version string. - """ - result: list[str] = [] - - epoch, _, rest = version.rpartition("!") - result.append(epoch or "0") - - for item in rest.split("."): - match = _prefix_regex.fullmatch(item) - if match: - result.extend(match.groups()) - else: - result.append(item) - return result - - -def _version_join(components: list[str]) -> str: - """Join split version components into a version string. - - This function assumes the input came from :func:`_version_split`, where the - first component must be the epoch (either empty or numeric), and all other - components numeric. - """ - epoch, *rest = components - return f"{epoch}!{'.'.join(rest)}" - - -def _is_not_suffix(segment: str) -> bool: - return not any( - segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") - ) - - -def _pad_version(left: list[str], right: list[str]) -> tuple[list[str], list[str]]: - left_split, right_split = [], [] - - # Get the release segment of our versions - left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) - right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) - - # Get the rest of our versions - left_split.append(left[len(left_split[0]) :]) - right_split.append(right[len(right_split[0]) :]) - - # Insert our padding - left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) - right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) - - return ( - list(itertools.chain.from_iterable(left_split)), - list(itertools.chain.from_iterable(right_split)), - ) - - -class SpecifierSet(BaseSpecifier): - """This class abstracts handling of a set of version specifiers. - - It can be passed a single specifier (``>=3.0``), a comma-separated list of - specifiers (``>=3.0,!=3.1``), or no specifier at all. - """ - - __slots__ = ("_prereleases", "_specs") - - def __init__( - self, - specifiers: str | Iterable[Specifier] = "", - prereleases: bool | None = None, - ) -> None: - """Initialize a SpecifierSet instance. - - :param specifiers: - The string representation of a specifier or a comma-separated list of - specifiers which will be parsed and normalized before use. - May also be an iterable of ``Specifier`` instances, which will be used - as is. - :param prereleases: - This tells the SpecifierSet if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - - :raises InvalidSpecifier: - If the given ``specifiers`` are not parseable than this exception will be - raised. - """ - - if isinstance(specifiers, str): - # Split on `,` to break each individual specifier into its own item, and - # strip each item to remove leading/trailing whitespace. - split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - - # Make each individual specifier a Specifier and save in a frozen set - # for later. - self._specs = frozenset(map(Specifier, split_specifiers)) - else: - # Save the supplied specifiers in a frozen set. - self._specs = frozenset(specifiers) - - # Store our prereleases value so we can use it later to determine if - # we accept prereleases or not. - self._prereleases = prereleases - - @property - def prereleases(self) -> bool | None: - # If we have been given an explicit prerelease modifier, then we'll - # pass that through here. - if self._prereleases is not None: - return self._prereleases - - # If we don't have any specifiers, and we don't have a forced value, - # then we'll just return None since we don't know if this should have - # pre-releases or not. - if not self._specs: - return None - - # Otherwise we'll see if any of the given specifiers accept - # prereleases, if any of them do we'll return True, otherwise False. - if any(s.prereleases for s in self._specs): - return True - - return None - - @prereleases.setter - def prereleases(self, value: bool | None) -> None: - self._prereleases = value - - def __repr__(self) -> str: - """A representation of the specifier set that shows all internal state. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> SpecifierSet('>=1.0.0,!=2.0.0') - =1.0.0')> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False) - =1.0.0', prereleases=False)> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True) - =1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"" - - def __str__(self) -> str: - """A string representation of the specifier set that can be round-tripped. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> str(SpecifierSet(">=1.0.0,!=1.0.1")) - '!=1.0.1,>=1.0.0' - >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False)) - '!=1.0.1,>=1.0.0' - """ - return ",".join(sorted(str(s) for s in self._specs)) - - def __hash__(self) -> int: - return hash(self._specs) - - def __and__(self, other: SpecifierSet | str) -> SpecifierSet: - """Return a SpecifierSet which is a combination of the two sets. - - :param other: The other object to combine with. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1' - =1.0.0')> - >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1') - =1.0.0')> - """ - if isinstance(other, str): - other = SpecifierSet(other) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - specifier = SpecifierSet() - specifier._specs = frozenset(self._specs | other._specs) - - if self._prereleases is None and other._prereleases is not None: - specifier._prereleases = other._prereleases - elif ( - self._prereleases is not None and other._prereleases is None - ) or self._prereleases == other._prereleases: - specifier._prereleases = self._prereleases - else: - raise ValueError( - "Cannot combine SpecifierSets with True and False prerelease overrides." - ) - - return specifier - - def __eq__(self, other: object) -> bool: - """Whether or not the two SpecifierSet-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) == - ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1" - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2") - False - """ - if isinstance(other, (str, Specifier)): - other = SpecifierSet(str(other)) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - return self._specs == other._specs - - def __len__(self) -> int: - """Returns the number of specifiers in this specifier set.""" - return len(self._specs) - - def __iter__(self) -> Iterator[Specifier]: - """ - Returns an iterator over all the underlying :class:`Specifier` instances - in this specifier set. - - >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str) - [, =1.0.0')>] - """ - return iter(self._specs) - - def __contains__(self, item: UnparsedVersion) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1") - False - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True) - True - """ - return self.contains(item) - - def contains( - self, - item: UnparsedVersion, - prereleases: bool | None = None, - installed: bool | None = None, - ) -> bool: - """Return whether or not the item is contained in this SpecifierSet. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this SpecifierSet. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases, as there are no other versions. - :param installed: - Whether or not the item is installed. If set to ``True``, it will - accept prerelease versions even if the specifier does not allow them. - - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3")) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True) - True - """ - version = _coerce_version(item) - - if version is not None and installed and version.is_prerelease: - prereleases = True - - check_item = item if version is None else version - return bool(list(self.filter([check_item], prereleases=prereleases))) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifiers in this set. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases if there are no other versions. - - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")])) - ['1.3', ] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"])) - ['1.5a1'] - >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - - An "empty" SpecifierSet will filter items based on the presence of prerelease - versions in the set. - - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet("").filter(["1.5a1"])) - ['1.5a1'] - >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - """ - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None and self.prereleases is not None: - prereleases = self.prereleases - - # If we have any specifiers, then we want to wrap our iterable in the - # filter method for each one, this will act as a logical AND amongst - # each specifier. - if self._specs: - # When prereleases is None, we need to let all versions through - # the individual filters, then decide about prereleases at the end - # based on whether any non-prereleases matched ALL specs. - for spec in self._specs: - iterable = spec.filter( - iterable, prereleases=True if prereleases is None else prereleases - ) - - if prereleases is not None: - # If we have a forced prereleases value, - # we can immediately return the iterator. - return iter(iterable) - else: - # Handle empty SpecifierSet cases where prereleases is not None. - if prereleases is True: - return iter(iterable) - - if prereleases is False: - return ( - item - for item in iterable - if (version := _coerce_version(item)) is None - or not version.is_prerelease - ) - - # Finally if prereleases is None, apply PEP 440 logic: - # exclude prereleases unless there are no final releases that matched. - filtered_items: list[UnparsedVersionVar] = [] - found_prereleases: list[UnparsedVersionVar] = [] - found_final_release = False - - for item in iterable: - parsed_version = _coerce_version(item) - # Arbitrary strings are always included as it is not - # possible to determine if they are prereleases, - # and they have already passed all specifiers. - if parsed_version is None: - filtered_items.append(item) - found_prereleases.append(item) - elif parsed_version.is_prerelease: - found_prereleases.append(item) - else: - filtered_items.append(item) - found_final_release = True - - return iter(filtered_items if found_final_release else found_prereleases) diff --git a/myenv/lib/python3.12/site-packages/packaging/tags.py b/myenv/lib/python3.12/site-packages/packaging/tags.py deleted file mode 100644 index 5ef27c8..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/tags.py +++ /dev/null @@ -1,651 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import logging -import platform -import re -import struct -import subprocess -import sys -import sysconfig -from importlib.machinery import EXTENSION_SUFFIXES -from typing import ( - Any, - Iterable, - Iterator, - Sequence, - Tuple, - cast, -) - -from . import _manylinux, _musllinux - -logger = logging.getLogger(__name__) - -PythonVersion = Sequence[int] -AppleVersion = Tuple[int, int] - -INTERPRETER_SHORT_NAMES: dict[str, str] = { - "python": "py", # Generic. - "cpython": "cp", - "pypy": "pp", - "ironpython": "ip", - "jython": "jy", -} - - -_32_BIT_INTERPRETER = struct.calcsize("P") == 4 - - -class Tag: - """ - A representation of the tag triple for a wheel. - - Instances are considered immutable and thus are hashable. Equality checking - is also supported. - """ - - __slots__ = ["_abi", "_hash", "_interpreter", "_platform"] - - def __init__(self, interpreter: str, abi: str, platform: str) -> None: - self._interpreter = interpreter.lower() - self._abi = abi.lower() - self._platform = platform.lower() - # The __hash__ of every single element in a Set[Tag] will be evaluated each time - # that a set calls its `.disjoint()` method, which may be called hundreds of - # times when scanning a page of links for packages with tags matching that - # Set[Tag]. Pre-computing the value here produces significant speedups for - # downstream consumers. - self._hash = hash((self._interpreter, self._abi, self._platform)) - - @property - def interpreter(self) -> str: - return self._interpreter - - @property - def abi(self) -> str: - return self._abi - - @property - def platform(self) -> str: - return self._platform - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Tag): - return NotImplemented - - return ( - (self._hash == other._hash) # Short-circuit ASAP for perf reasons. - and (self._platform == other._platform) - and (self._abi == other._abi) - and (self._interpreter == other._interpreter) - ) - - def __hash__(self) -> int: - return self._hash - - def __str__(self) -> str: - return f"{self._interpreter}-{self._abi}-{self._platform}" - - def __repr__(self) -> str: - return f"<{self} @ {id(self)}>" - - def __setstate__(self, state: tuple[None, dict[str, Any]]) -> None: - # The cached _hash is wrong when unpickling. - _, slots = state - for k, v in slots.items(): - setattr(self, k, v) - self._hash = hash((self._interpreter, self._abi, self._platform)) - - -def parse_tag(tag: str) -> frozenset[Tag]: - """ - Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances. - - Returning a set is required due to the possibility that the tag is a - compressed tag set. - """ - tags = set() - interpreters, abis, platforms = tag.split("-") - for interpreter in interpreters.split("."): - for abi in abis.split("."): - for platform_ in platforms.split("."): - tags.add(Tag(interpreter, abi, platform_)) - return frozenset(tags) - - -def _get_config_var(name: str, warn: bool = False) -> int | str | None: - value: int | str | None = sysconfig.get_config_var(name) - if value is None and warn: - logger.debug( - "Config variable '%s' is unset, Python ABI tag may be incorrect", name - ) - return value - - -def _normalize_string(string: str) -> str: - return string.replace(".", "_").replace("-", "_").replace(" ", "_") - - -def _is_threaded_cpython(abis: list[str]) -> bool: - """ - Determine if the ABI corresponds to a threaded (`--disable-gil`) build. - - The threaded builds are indicated by a "t" in the abiflags. - """ - if len(abis) == 0: - return False - # expect e.g., cp313 - m = re.match(r"cp\d+(.*)", abis[0]) - if not m: - return False - abiflags = m.group(1) - return "t" in abiflags - - -def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool: - """ - Determine if the Python version supports abi3. - - PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`) - builds do not support abi3. - """ - return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading - - -def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> list[str]: - py_version = tuple(py_version) # To allow for version comparison. - abis = [] - version = _version_nodot(py_version[:2]) - threading = debug = pymalloc = ucs4 = "" - with_debug = _get_config_var("Py_DEBUG", warn) - has_refcount = hasattr(sys, "gettotalrefcount") - # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled - # extension modules is the best option. - # https://github.com/pypa/pip/issues/3383#issuecomment-173267692 - has_ext = "_d.pyd" in EXTENSION_SUFFIXES - if with_debug or (with_debug is None and (has_refcount or has_ext)): - debug = "d" - if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn): - threading = "t" - if py_version < (3, 8): - with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) - if with_pymalloc or with_pymalloc is None: - pymalloc = "m" - if py_version < (3, 3): - unicode_size = _get_config_var("Py_UNICODE_SIZE", warn) - if unicode_size == 4 or ( - unicode_size is None and sys.maxunicode == 0x10FFFF - ): - ucs4 = "u" - elif debug: - # Debug builds can also load "normal" extension modules. - # We can also assume no UCS-4 or pymalloc requirement. - abis.append(f"cp{version}{threading}") - abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}") - return abis - - -def cpython_tags( - python_version: PythonVersion | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a CPython interpreter. - - The tags consist of: - - cp-- - - cp-abi3- - - cp-none- - - cp-abi3- # Older Python versions down to 3.2. - - If python_version only specifies a major version then user-provided ABIs and - the 'none' ABItag will be used. - - If 'abi3' or 'none' are specified in 'abis' then they will be yielded at - their normal position and not at the beginning. - """ - if not python_version: - python_version = sys.version_info[:2] - - interpreter = f"cp{_version_nodot(python_version[:2])}" - - if abis is None: - abis = _cpython_abis(python_version, warn) if len(python_version) > 1 else [] - abis = list(abis) - # 'abi3' and 'none' are explicitly handled later. - for explicit_abi in ("abi3", "none"): - try: - abis.remove(explicit_abi) - except ValueError: # noqa: PERF203 - pass - - platforms = list(platforms or platform_tags()) - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - threading = _is_threaded_cpython(abis) - use_abi3 = _abi3_applies(python_version, threading) - if use_abi3: - yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) - yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) - - if use_abi3: - for minor_version in range(python_version[1] - 1, 1, -1): - for platform_ in platforms: - version = _version_nodot((python_version[0], minor_version)) - interpreter = f"cp{version}" - yield Tag(interpreter, "abi3", platform_) - - -def _generic_abi() -> list[str]: - """ - Return the ABI tag based on EXT_SUFFIX. - """ - # The following are examples of `EXT_SUFFIX`. - # We want to keep the parts which are related to the ABI and remove the - # parts which are related to the platform: - # - linux: '.cpython-310-x86_64-linux-gnu.so' => cp310 - # - mac: '.cpython-310-darwin.so' => cp310 - # - win: '.cp310-win_amd64.pyd' => cp310 - # - win: '.pyd' => cp37 (uses _cpython_abis()) - # - pypy: '.pypy38-pp73-x86_64-linux-gnu.so' => pypy38_pp73 - # - graalpy: '.graalpy-38-native-x86_64-darwin.dylib' - # => graalpy_38_native - - ext_suffix = _get_config_var("EXT_SUFFIX", warn=True) - if not isinstance(ext_suffix, str) or ext_suffix[0] != ".": - raise SystemError("invalid sysconfig.get_config_var('EXT_SUFFIX')") - parts = ext_suffix.split(".") - if len(parts) < 3: - # CPython3.7 and earlier uses ".pyd" on Windows. - return _cpython_abis(sys.version_info[:2]) - soabi = parts[1] - if soabi.startswith("cpython"): - # non-windows - abi = "cp" + soabi.split("-")[1] - elif soabi.startswith("cp"): - # windows - abi = soabi.split("-")[0] - elif soabi.startswith("pypy"): - abi = "-".join(soabi.split("-")[:2]) - elif soabi.startswith("graalpy"): - abi = "-".join(soabi.split("-")[:3]) - elif soabi: - # pyston, ironpython, others? - abi = soabi - else: - return [] - return [_normalize_string(abi)] - - -def generic_tags( - interpreter: str | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a generic interpreter. - - The tags consist of: - - -- - - The "none" ABI will be added if it was not explicitly provided. - """ - if not interpreter: - interp_name = interpreter_name() - interp_version = interpreter_version(warn=warn) - interpreter = f"{interp_name}{interp_version}" - abis = _generic_abi() if abis is None else list(abis) - platforms = list(platforms or platform_tags()) - if "none" not in abis: - abis.append("none") - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - -def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]: - """ - Yields Python versions in descending order. - - After the latest version, the major-only version will be yielded, and then - all previous versions of that major version. - """ - if len(py_version) > 1: - yield f"py{_version_nodot(py_version[:2])}" - yield f"py{py_version[0]}" - if len(py_version) > 1: - for minor in range(py_version[1] - 1, -1, -1): - yield f"py{_version_nodot((py_version[0], minor))}" - - -def compatible_tags( - python_version: PythonVersion | None = None, - interpreter: str | None = None, - platforms: Iterable[str] | None = None, -) -> Iterator[Tag]: - """ - Yields the sequence of tags that are compatible with a specific version of Python. - - The tags consist of: - - py*-none- - - -none-any # ... if `interpreter` is provided. - - py*-none-any - """ - if not python_version: - python_version = sys.version_info[:2] - platforms = list(platforms or platform_tags()) - for version in _py_interpreter_range(python_version): - for platform_ in platforms: - yield Tag(version, "none", platform_) - if interpreter: - yield Tag(interpreter, "none", "any") - for version in _py_interpreter_range(python_version): - yield Tag(version, "none", "any") - - -def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str: - if not is_32bit: - return arch - - if arch.startswith("ppc"): - return "ppc" - - return "i386" - - -def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]: - formats = [cpu_arch] - if cpu_arch == "x86_64": - if version < (10, 4): - return [] - formats.extend(["intel", "fat64", "fat32"]) - - elif cpu_arch == "i386": - if version < (10, 4): - return [] - formats.extend(["intel", "fat32", "fat"]) - - elif cpu_arch == "ppc64": - # TODO: Need to care about 32-bit PPC for ppc64 through 10.2? - if version > (10, 5) or version < (10, 4): - return [] - formats.append("fat64") - - elif cpu_arch == "ppc": - if version > (10, 6): - return [] - formats.extend(["fat32", "fat"]) - - if cpu_arch in {"arm64", "x86_64"}: - formats.append("universal2") - - if cpu_arch in {"x86_64", "i386", "ppc64", "ppc", "intel"}: - formats.append("universal") - - return formats - - -def mac_platforms( - version: AppleVersion | None = None, arch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for a macOS system. - - The `version` parameter is a two-item tuple specifying the macOS version to - generate platform tags for. The `arch` parameter is the CPU architecture to - generate platform tags for. Both parameters default to the appropriate value - for the current system. - """ - version_str, _, cpu_arch = platform.mac_ver() - if version is None: - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - if version == (10, 16): - # When built against an older macOS SDK, Python will report macOS 10.16 - # instead of the real version. - version_str = subprocess.run( - [ - sys.executable, - "-sS", - "-c", - "import platform; print(platform.mac_ver()[0])", - ], - check=True, - env={"SYSTEM_VERSION_COMPAT": "0"}, - stdout=subprocess.PIPE, - text=True, - ).stdout - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - - if arch is None: - arch = _mac_arch(cpu_arch) - - if (10, 0) <= version < (11, 0): - # Prior to Mac OS 11, each yearly release of Mac OS bumped the - # "minor" version number. The major version was always 10. - major_version = 10 - for minor_version in range(version[1], -1, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Starting with Mac OS 11, each yearly release bumps the major version - # number. The minor versions are now the midyear updates. - minor_version = 0 - for major_version in range(version[0], 10, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Mac OS 11 on x86_64 is compatible with binaries from previous releases. - # Arm64 support was introduced in 11.0, so no Arm binaries from previous - # releases exist. - # - # However, the "universal2" binary format can have a - # macOS version earlier than 11.0 when the x86_64 part of the binary supports - # that version of macOS. - major_version = 10 - if arch == "x86_64": - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - else: - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_format = "universal2" - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - -def ios_platforms( - version: AppleVersion | None = None, multiarch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for an iOS system. - - :param version: A two-item tuple specifying the iOS version to generate - platform tags for. Defaults to the current iOS version. - :param multiarch: The CPU architecture+ABI to generate platform tags for - - (the value used by `sys.implementation._multiarch` e.g., - `arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current - multiarch value. - """ - if version is None: - # if iOS is the current platform, ios_ver *must* be defined. However, - # it won't exist for CPython versions before 3.13, which causes a mypy - # error. - _, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore] - version = cast("AppleVersion", tuple(map(int, release.split(".")[:2]))) - - if multiarch is None: - multiarch = sys.implementation._multiarch - multiarch = multiarch.replace("-", "_") - - ios_platform_template = "ios_{major}_{minor}_{multiarch}" - - # Consider any iOS major.minor version from the version requested, down to - # 12.0. 12.0 is the first iOS version that is known to have enough features - # to support CPython. Consider every possible minor release up to X.9. There - # highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra - # candidates that won't ever match doesn't really hurt, and it saves us from - # having to keep an explicit list of known iOS versions in the code. Return - # the results descending order of version number. - - # If the requested major version is less than 12, there won't be any matches. - if version[0] < 12: - return - - # Consider the actual X.Y version that was requested. - yield ios_platform_template.format( - major=version[0], minor=version[1], multiarch=multiarch - ) - - # Consider every minor version from X.0 to the minor version prior to the - # version requested by the platform. - for minor in range(version[1] - 1, -1, -1): - yield ios_platform_template.format( - major=version[0], minor=minor, multiarch=multiarch - ) - - for major in range(version[0] - 1, 11, -1): - for minor in range(9, -1, -1): - yield ios_platform_template.format( - major=major, minor=minor, multiarch=multiarch - ) - - -def android_platforms( - api_level: int | None = None, abi: str | None = None -) -> Iterator[str]: - """ - Yields the :attr:`~Tag.platform` tags for Android. If this function is invoked on - non-Android platforms, the ``api_level`` and ``abi`` arguments are required. - - :param int api_level: The maximum `API level - `__ to return. Defaults - to the current system's version, as returned by ``platform.android_ver``. - :param str abi: The `Android ABI `__, - e.g. ``arm64_v8a``. Defaults to the current system's ABI , as returned by - ``sysconfig.get_platform``. Hyphens and periods will be replaced with - underscores. - """ - if platform.system() != "Android" and (api_level is None or abi is None): - raise TypeError( - "on non-Android platforms, the api_level and abi arguments are required" - ) - - if api_level is None: - # Python 3.13 was the first version to return platform.system() == "Android", - # and also the first version to define platform.android_ver(). - api_level = platform.android_ver().api_level # type: ignore[attr-defined] - - if abi is None: - abi = sysconfig.get_platform().split("-")[-1] - abi = _normalize_string(abi) - - # 16 is the minimum API level known to have enough features to support CPython - # without major patching. Yield every API level from the maximum down to the - # minimum, inclusive. - min_api_level = 16 - for ver in range(api_level, min_api_level - 1, -1): - yield f"android_{ver}_{abi}" - - -def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: - linux = _normalize_string(sysconfig.get_platform()) - if not linux.startswith("linux_"): - # we should never be here, just yield the sysconfig one and return - yield linux - return - if is_32bit: - if linux == "linux_x86_64": - linux = "linux_i686" - elif linux == "linux_aarch64": - linux = "linux_armv8l" - _, arch = linux.split("_", 1) - archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) - yield from _manylinux.platform_tags(archs) - yield from _musllinux.platform_tags(archs) - for arch in archs: - yield f"linux_{arch}" - - -def _generic_platforms() -> Iterator[str]: - yield _normalize_string(sysconfig.get_platform()) - - -def platform_tags() -> Iterator[str]: - """ - Provides the platform tags for this installation. - """ - if platform.system() == "Darwin": - return mac_platforms() - elif platform.system() == "iOS": - return ios_platforms() - elif platform.system() == "Android": - return android_platforms() - elif platform.system() == "Linux": - return _linux_platforms() - else: - return _generic_platforms() - - -def interpreter_name() -> str: - """ - Returns the name of the running interpreter. - - Some implementations have a reserved, two-letter abbreviation which will - be returned when appropriate. - """ - name = sys.implementation.name - return INTERPRETER_SHORT_NAMES.get(name) or name - - -def interpreter_version(*, warn: bool = False) -> str: - """ - Returns the version of the running interpreter. - """ - version = _get_config_var("py_version_nodot", warn=warn) - return str(version) if version else _version_nodot(sys.version_info[:2]) - - -def _version_nodot(version: PythonVersion) -> str: - return "".join(map(str, version)) - - -def sys_tags(*, warn: bool = False) -> Iterator[Tag]: - """ - Returns the sequence of tag triples for the running interpreter. - - The order of the sequence corresponds to priority order for the - interpreter, from most to least important. - """ - - interp_name = interpreter_name() - if interp_name == "cp": - yield from cpython_tags(warn=warn) - else: - yield from generic_tags() - - if interp_name == "pp": - interp = "pp3" - elif interp_name == "cp": - interp = "cp" + interpreter_version(warn=warn) - else: - interp = None - yield from compatible_tags(interpreter=interp) diff --git a/myenv/lib/python3.12/site-packages/packaging/utils.py b/myenv/lib/python3.12/site-packages/packaging/utils.py deleted file mode 100644 index c41c813..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/utils.py +++ /dev/null @@ -1,158 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import re -from typing import NewType, Tuple, Union, cast - -from .tags import Tag, parse_tag -from .version import InvalidVersion, Version, _TrimmedRelease - -BuildTag = Union[Tuple[()], Tuple[int, str]] -NormalizedName = NewType("NormalizedName", str) - - -class InvalidName(ValueError): - """ - An invalid distribution name; users should refer to the packaging user guide. - """ - - -class InvalidWheelFilename(ValueError): - """ - An invalid wheel filename was found, users should refer to PEP 427. - """ - - -class InvalidSdistFilename(ValueError): - """ - An invalid sdist filename was found, users should refer to the packaging user guide. - """ - - -# Core metadata spec for `Name` -_validate_regex = re.compile(r"[A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9]", re.IGNORECASE) -_normalized_regex = re.compile(r"[a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9]") -# PEP 427: The build number must start with a digit. -_build_tag_regex = re.compile(r"(\d+)(.*)") - - -def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName: - if validate and not _validate_regex.fullmatch(name): - raise InvalidName(f"name is invalid: {name!r}") - # Ensure all ``.`` and ``_`` are ``-`` - # Emulates ``re.sub(r"[-_.]+", "-", name).lower()`` from PEP 503 - # Much faster than re, and even faster than str.translate - value = name.lower().replace("_", "-").replace(".", "-") - # Condense repeats (faster than regex) - while "--" in value: - value = value.replace("--", "-") - return cast("NormalizedName", value) - - -def is_normalized_name(name: str) -> bool: - return _normalized_regex.fullmatch(name) is not None - - -def canonicalize_version( - version: Version | str, *, strip_trailing_zero: bool = True -) -> str: - """ - Return a canonical form of a version as a string. - - >>> canonicalize_version('1.0.1') - '1.0.1' - - Per PEP 625, versions may have multiple canonical forms, differing - only by trailing zeros. - - >>> canonicalize_version('1.0.0') - '1' - >>> canonicalize_version('1.0.0', strip_trailing_zero=False) - '1.0.0' - - Invalid versions are returned unaltered. - - >>> canonicalize_version('foo bar baz') - 'foo bar baz' - """ - if isinstance(version, str): - try: - version = Version(version) - except InvalidVersion: - return str(version) - return str(_TrimmedRelease(version) if strip_trailing_zero else version) - - -def parse_wheel_filename( - filename: str, -) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]: - if not filename.endswith(".whl"): - raise InvalidWheelFilename( - f"Invalid wheel filename (extension must be '.whl'): {filename!r}" - ) - - filename = filename[:-4] - dashes = filename.count("-") - if dashes not in (4, 5): - raise InvalidWheelFilename( - f"Invalid wheel filename (wrong number of parts): {filename!r}" - ) - - parts = filename.split("-", dashes - 2) - name_part = parts[0] - # See PEP 427 for the rules on escaping the project name. - if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: - raise InvalidWheelFilename(f"Invalid project name: {filename!r}") - name = canonicalize_name(name_part) - - try: - version = Version(parts[1]) - except InvalidVersion as e: - raise InvalidWheelFilename( - f"Invalid wheel filename (invalid version): {filename!r}" - ) from e - - if dashes == 5: - build_part = parts[2] - build_match = _build_tag_regex.match(build_part) - if build_match is None: - raise InvalidWheelFilename( - f"Invalid build number: {build_part} in {filename!r}" - ) - build = cast("BuildTag", (int(build_match.group(1)), build_match.group(2))) - else: - build = () - tags = parse_tag(parts[-1]) - return (name, version, build, tags) - - -def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]: - if filename.endswith(".tar.gz"): - file_stem = filename[: -len(".tar.gz")] - elif filename.endswith(".zip"): - file_stem = filename[: -len(".zip")] - else: - raise InvalidSdistFilename( - f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):" - f" {filename!r}" - ) - - # We are requiring a PEP 440 version, which cannot contain dashes, - # so we split on the last dash. - name_part, sep, version_part = file_stem.rpartition("-") - if not sep: - raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}") - - name = canonicalize_name(name_part) - - try: - version = Version(version_part) - except InvalidVersion as e: - raise InvalidSdistFilename( - f"Invalid sdist filename (invalid version): {filename!r}" - ) from e - - return (name, version) diff --git a/myenv/lib/python3.12/site-packages/packaging/version.py b/myenv/lib/python3.12/site-packages/packaging/version.py deleted file mode 100644 index 1206c46..0000000 --- a/myenv/lib/python3.12/site-packages/packaging/version.py +++ /dev/null @@ -1,792 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from packaging.version import parse, Version -""" - -from __future__ import annotations - -import re -import sys -import typing -from typing import ( - Any, - Callable, - Literal, - NamedTuple, - SupportsInt, - Tuple, - TypedDict, - Union, -) - -from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType - -if typing.TYPE_CHECKING: - from typing_extensions import Self, Unpack - -if sys.version_info >= (3, 13): # pragma: no cover - from warnings import deprecated as _deprecated -elif typing.TYPE_CHECKING: - from typing_extensions import deprecated as _deprecated -else: # pragma: no cover - import functools - import warnings - - def _deprecated(message: str) -> object: - def decorator(func: object) -> object: - @functools.wraps(func) - def wrapper(*args: object, **kwargs: object) -> object: - warnings.warn( - message, - category=DeprecationWarning, - stacklevel=2, - ) - return func(*args, **kwargs) - - return wrapper - - return decorator - - -_LETTER_NORMALIZATION = { - "alpha": "a", - "beta": "b", - "c": "rc", - "pre": "rc", - "preview": "rc", - "rev": "post", - "r": "post", -} - -__all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"] - -LocalType = Tuple[Union[int, str], ...] - -CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]] -CmpLocalType = Union[ - NegativeInfinityType, - Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...], -] -CmpKey = Tuple[ - int, - Tuple[int, ...], - CmpPrePostDevType, - CmpPrePostDevType, - CmpPrePostDevType, - CmpLocalType, -] -VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool] - - -class _VersionReplace(TypedDict, total=False): - epoch: int | None - release: tuple[int, ...] | None - pre: tuple[Literal["a", "b", "rc"], int] | None - post: int | None - dev: int | None - local: str | None - - -def parse(version: str) -> Version: - """Parse the given version string. - - >>> parse('1.0.dev1') - - - :param version: The version string to parse. - :raises InvalidVersion: When the version string is not a valid version. - """ - return Version(version) - - -class InvalidVersion(ValueError): - """Raised when a version string is not a valid version. - - >>> Version("invalid") - Traceback (most recent call last): - ... - packaging.version.InvalidVersion: Invalid version: 'invalid' - """ - - -class _BaseVersion: - __slots__ = () - - # This can also be a normal member (see the packaging_legacy package); - # we are just requiring it to be readable. Actually defining a property - # has runtime effect on subclasses, so it's typing only. - if typing.TYPE_CHECKING: - - @property - def _key(self) -> tuple[Any, ...]: ... - - def __hash__(self) -> int: - return hash(self._key) - - # Please keep the duplicated `isinstance` check - # in the six comparisons hereunder - # unless you find a way to avoid adding overhead function calls. - def __lt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key < other._key - - def __le__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key <= other._key - - def __eq__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key == other._key - - def __ge__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key >= other._key - - def __gt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key > other._key - - def __ne__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key != other._key - - -# Deliberately not anchored to the start and end of the string, to make it -# easier for 3rd party code to reuse - -# Note that ++ doesn't behave identically on CPython and PyPy, so not using it here -_VERSION_PATTERN = r""" - v?+ # optional leading v - (?: - (?:(?P[0-9]+)!)?+ # epoch - (?P[0-9]+(?:\.[0-9]+)*+) # release segment - (?P
                                          # pre-release
-            [._-]?+
-            (?Palpha|a|beta|b|preview|pre|c|rc)
-            [._-]?+
-            (?P[0-9]+)?
-        )?+
-        (?P                                         # post release
-            (?:-(?P[0-9]+))
-            |
-            (?:
-                [._-]?
-                (?Ppost|rev|r)
-                [._-]?
-                (?P[0-9]+)?
-            )
-        )?+
-        (?P                                          # dev release
-            [._-]?+
-            (?Pdev)
-            [._-]?+
-            (?P[0-9]+)?
-        )?+
-    )
-    (?:\+
-        (?P                                        # local version
-            [a-z0-9]+
-            (?:[._-][a-z0-9]+)*+
-        )
-    )?+
-"""
-
-_VERSION_PATTERN_OLD = _VERSION_PATTERN.replace("*+", "*").replace("?+", "?")
-
-# Possessive qualifiers were added in Python 3.11.
-# CPython 3.11.0-3.11.4 had a bug: https://github.com/python/cpython/pull/107795
-# Older PyPy also had a bug.
-VERSION_PATTERN = (
-    _VERSION_PATTERN_OLD
-    if (sys.implementation.name == "cpython" and sys.version_info < (3, 11, 5))
-    or (sys.implementation.name == "pypy" and sys.version_info < (3, 11, 13))
-    or sys.version_info < (3, 11)
-    else _VERSION_PATTERN
-)
-"""
-A string containing the regular expression used to match a valid version.
-
-The pattern is not anchored at either end, and is intended for embedding in larger
-expressions (for example, matching a version number as part of a file name). The
-regular expression should be compiled with the ``re.VERBOSE`` and ``re.IGNORECASE``
-flags set.
-
-:meta hide-value:
-"""
-
-
-# Validation pattern for local version in replace()
-_LOCAL_PATTERN = re.compile(r"[a-z0-9]+(?:[._-][a-z0-9]+)*", re.IGNORECASE)
-
-
-def _validate_epoch(value: object, /) -> int:
-    epoch = value or 0
-    if isinstance(epoch, int) and epoch >= 0:
-        return epoch
-    msg = f"epoch must be non-negative integer, got {epoch}"
-    raise InvalidVersion(msg)
-
-
-def _validate_release(value: object, /) -> tuple[int, ...]:
-    release = (0,) if value is None else value
-    if (
-        isinstance(release, tuple)
-        and len(release) > 0
-        and all(isinstance(i, int) and i >= 0 for i in release)
-    ):
-        return release
-    msg = f"release must be a non-empty tuple of non-negative integers, got {release}"
-    raise InvalidVersion(msg)
-
-
-def _validate_pre(value: object, /) -> tuple[Literal["a", "b", "rc"], int] | None:
-    if value is None:
-        return value
-    if (
-        isinstance(value, tuple)
-        and len(value) == 2
-        and value[0] in ("a", "b", "rc")
-        and isinstance(value[1], int)
-        and value[1] >= 0
-    ):
-        return value
-    msg = f"pre must be a tuple of ('a'|'b'|'rc', non-negative int), got {value}"
-    raise InvalidVersion(msg)
-
-
-def _validate_post(value: object, /) -> tuple[Literal["post"], int] | None:
-    if value is None:
-        return value
-    if isinstance(value, int) and value >= 0:
-        return ("post", value)
-    msg = f"post must be non-negative integer, got {value}"
-    raise InvalidVersion(msg)
-
-
-def _validate_dev(value: object, /) -> tuple[Literal["dev"], int] | None:
-    if value is None:
-        return value
-    if isinstance(value, int) and value >= 0:
-        return ("dev", value)
-    msg = f"dev must be non-negative integer, got {value}"
-    raise InvalidVersion(msg)
-
-
-def _validate_local(value: object, /) -> LocalType | None:
-    if value is None:
-        return value
-    if isinstance(value, str) and _LOCAL_PATTERN.fullmatch(value):
-        return _parse_local_version(value)
-    msg = f"local must be a valid version string, got {value!r}"
-    raise InvalidVersion(msg)
-
-
-# Backward compatibility for internals before 26.0. Do not use.
-class _Version(NamedTuple):
-    epoch: int
-    release: tuple[int, ...]
-    dev: tuple[str, int] | None
-    pre: tuple[str, int] | None
-    post: tuple[str, int] | None
-    local: LocalType | None
-
-
-class Version(_BaseVersion):
-    """This class abstracts handling of a project's versions.
-
-    A :class:`Version` instance is comparison aware and can be compared and
-    sorted using the standard Python interfaces.
-
-    >>> v1 = Version("1.0a5")
-    >>> v2 = Version("1.0")
-    >>> v1
-    
-    >>> v2
-    
-    >>> v1 < v2
-    True
-    >>> v1 == v2
-    False
-    >>> v1 > v2
-    False
-    >>> v1 >= v2
-    False
-    >>> v1 <= v2
-    True
-    """
-
-    __slots__ = ("_dev", "_epoch", "_key_cache", "_local", "_post", "_pre", "_release")
-    __match_args__ = ("_str",)
-
-    _regex = re.compile(r"\s*" + VERSION_PATTERN + r"\s*", re.VERBOSE | re.IGNORECASE)
-
-    _epoch: int
-    _release: tuple[int, ...]
-    _dev: tuple[str, int] | None
-    _pre: tuple[str, int] | None
-    _post: tuple[str, int] | None
-    _local: LocalType | None
-
-    _key_cache: CmpKey | None
-
-    def __init__(self, version: str) -> None:
-        """Initialize a Version object.
-
-        :param version:
-            The string representation of a version which will be parsed and normalized
-            before use.
-        :raises InvalidVersion:
-            If the ``version`` does not conform to PEP 440 in any way then this
-            exception will be raised.
-        """
-        # Validate the version and parse it into pieces
-        match = self._regex.fullmatch(version)
-        if not match:
-            raise InvalidVersion(f"Invalid version: {version!r}")
-        self._epoch = int(match.group("epoch")) if match.group("epoch") else 0
-        self._release = tuple(map(int, match.group("release").split(".")))
-        self._pre = _parse_letter_version(match.group("pre_l"), match.group("pre_n"))
-        self._post = _parse_letter_version(
-            match.group("post_l"), match.group("post_n1") or match.group("post_n2")
-        )
-        self._dev = _parse_letter_version(match.group("dev_l"), match.group("dev_n"))
-        self._local = _parse_local_version(match.group("local"))
-
-        # Key which will be used for sorting
-        self._key_cache = None
-
-    def __replace__(self, **kwargs: Unpack[_VersionReplace]) -> Self:
-        epoch = _validate_epoch(kwargs["epoch"]) if "epoch" in kwargs else self._epoch
-        release = (
-            _validate_release(kwargs["release"])
-            if "release" in kwargs
-            else self._release
-        )
-        pre = _validate_pre(kwargs["pre"]) if "pre" in kwargs else self._pre
-        post = _validate_post(kwargs["post"]) if "post" in kwargs else self._post
-        dev = _validate_dev(kwargs["dev"]) if "dev" in kwargs else self._dev
-        local = _validate_local(kwargs["local"]) if "local" in kwargs else self._local
-
-        if (
-            epoch == self._epoch
-            and release == self._release
-            and pre == self._pre
-            and post == self._post
-            and dev == self._dev
-            and local == self._local
-        ):
-            return self
-
-        new_version = self.__class__.__new__(self.__class__)
-        new_version._key_cache = None
-        new_version._epoch = epoch
-        new_version._release = release
-        new_version._pre = pre
-        new_version._post = post
-        new_version._dev = dev
-        new_version._local = local
-
-        return new_version
-
-    @property
-    def _key(self) -> CmpKey:
-        if self._key_cache is None:
-            self._key_cache = _cmpkey(
-                self._epoch,
-                self._release,
-                self._pre,
-                self._post,
-                self._dev,
-                self._local,
-            )
-        return self._key_cache
-
-    @property
-    @_deprecated("Version._version is private and will be removed soon")
-    def _version(self) -> _Version:
-        return _Version(
-            self._epoch, self._release, self._dev, self._pre, self._post, self._local
-        )
-
-    @_version.setter
-    @_deprecated("Version._version is private and will be removed soon")
-    def _version(self, value: _Version) -> None:
-        self._epoch = value.epoch
-        self._release = value.release
-        self._dev = value.dev
-        self._pre = value.pre
-        self._post = value.post
-        self._local = value.local
-        self._key_cache = None
-
-    def __repr__(self) -> str:
-        """A representation of the Version that shows all internal state.
-
-        >>> Version('1.0.0')
-        
-        """
-        return f""
-
-    def __str__(self) -> str:
-        """A string representation of the version that can be round-tripped.
-
-        >>> str(Version("1.0a5"))
-        '1.0a5'
-        """
-        # This is a hot function, so not calling self.base_version
-        version = ".".join(map(str, self.release))
-
-        # Epoch
-        if self.epoch:
-            version = f"{self.epoch}!{version}"
-
-        # Pre-release
-        if self.pre is not None:
-            version += "".join(map(str, self.pre))
-
-        # Post-release
-        if self.post is not None:
-            version += f".post{self.post}"
-
-        # Development release
-        if self.dev is not None:
-            version += f".dev{self.dev}"
-
-        # Local version segment
-        if self.local is not None:
-            version += f"+{self.local}"
-
-        return version
-
-    @property
-    def _str(self) -> str:
-        """Internal property for match_args"""
-        return str(self)
-
-    @property
-    def epoch(self) -> int:
-        """The epoch of the version.
-
-        >>> Version("2.0.0").epoch
-        0
-        >>> Version("1!2.0.0").epoch
-        1
-        """
-        return self._epoch
-
-    @property
-    def release(self) -> tuple[int, ...]:
-        """The components of the "release" segment of the version.
-
-        >>> Version("1.2.3").release
-        (1, 2, 3)
-        >>> Version("2.0.0").release
-        (2, 0, 0)
-        >>> Version("1!2.0.0.post0").release
-        (2, 0, 0)
-
-        Includes trailing zeroes but not the epoch or any pre-release / development /
-        post-release suffixes.
-        """
-        return self._release
-
-    @property
-    def pre(self) -> tuple[str, int] | None:
-        """The pre-release segment of the version.
-
-        >>> print(Version("1.2.3").pre)
-        None
-        >>> Version("1.2.3a1").pre
-        ('a', 1)
-        >>> Version("1.2.3b1").pre
-        ('b', 1)
-        >>> Version("1.2.3rc1").pre
-        ('rc', 1)
-        """
-        return self._pre
-
-    @property
-    def post(self) -> int | None:
-        """The post-release number of the version.
-
-        >>> print(Version("1.2.3").post)
-        None
-        >>> Version("1.2.3.post1").post
-        1
-        """
-        return self._post[1] if self._post else None
-
-    @property
-    def dev(self) -> int | None:
-        """The development number of the version.
-
-        >>> print(Version("1.2.3").dev)
-        None
-        >>> Version("1.2.3.dev1").dev
-        1
-        """
-        return self._dev[1] if self._dev else None
-
-    @property
-    def local(self) -> str | None:
-        """The local version segment of the version.
-
-        >>> print(Version("1.2.3").local)
-        None
-        >>> Version("1.2.3+abc").local
-        'abc'
-        """
-        if self._local:
-            return ".".join(str(x) for x in self._local)
-        else:
-            return None
-
-    @property
-    def public(self) -> str:
-        """The public portion of the version.
-
-        >>> Version("1.2.3").public
-        '1.2.3'
-        >>> Version("1.2.3+abc").public
-        '1.2.3'
-        >>> Version("1!1.2.3dev1+abc").public
-        '1!1.2.3.dev1'
-        """
-        return str(self).split("+", 1)[0]
-
-    @property
-    def base_version(self) -> str:
-        """The "base version" of the version.
-
-        >>> Version("1.2.3").base_version
-        '1.2.3'
-        >>> Version("1.2.3+abc").base_version
-        '1.2.3'
-        >>> Version("1!1.2.3dev1+abc").base_version
-        '1!1.2.3'
-
-        The "base version" is the public version of the project without any pre or post
-        release markers.
-        """
-        release_segment = ".".join(map(str, self.release))
-        return f"{self.epoch}!{release_segment}" if self.epoch else release_segment
-
-    @property
-    def is_prerelease(self) -> bool:
-        """Whether this version is a pre-release.
-
-        >>> Version("1.2.3").is_prerelease
-        False
-        >>> Version("1.2.3a1").is_prerelease
-        True
-        >>> Version("1.2.3b1").is_prerelease
-        True
-        >>> Version("1.2.3rc1").is_prerelease
-        True
-        >>> Version("1.2.3dev1").is_prerelease
-        True
-        """
-        return self.dev is not None or self.pre is not None
-
-    @property
-    def is_postrelease(self) -> bool:
-        """Whether this version is a post-release.
-
-        >>> Version("1.2.3").is_postrelease
-        False
-        >>> Version("1.2.3.post1").is_postrelease
-        True
-        """
-        return self.post is not None
-
-    @property
-    def is_devrelease(self) -> bool:
-        """Whether this version is a development release.
-
-        >>> Version("1.2.3").is_devrelease
-        False
-        >>> Version("1.2.3.dev1").is_devrelease
-        True
-        """
-        return self.dev is not None
-
-    @property
-    def major(self) -> int:
-        """The first item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").major
-        1
-        """
-        return self.release[0] if len(self.release) >= 1 else 0
-
-    @property
-    def minor(self) -> int:
-        """The second item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").minor
-        2
-        >>> Version("1").minor
-        0
-        """
-        return self.release[1] if len(self.release) >= 2 else 0
-
-    @property
-    def micro(self) -> int:
-        """The third item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").micro
-        3
-        >>> Version("1").micro
-        0
-        """
-        return self.release[2] if len(self.release) >= 3 else 0
-
-
-class _TrimmedRelease(Version):
-    __slots__ = ()
-
-    def __init__(self, version: str | Version) -> None:
-        if isinstance(version, Version):
-            self._epoch = version._epoch
-            self._release = version._release
-            self._dev = version._dev
-            self._pre = version._pre
-            self._post = version._post
-            self._local = version._local
-            self._key_cache = version._key_cache
-            return
-        super().__init__(version)  # pragma: no cover
-
-    @property
-    def release(self) -> tuple[int, ...]:
-        """
-        Release segment without any trailing zeros.
-
-        >>> _TrimmedRelease('1.0.0').release
-        (1,)
-        >>> _TrimmedRelease('0.0').release
-        (0,)
-        """
-        # This leaves one 0.
-        rel = super().release
-        len_release = len(rel)
-        i = len_release
-        while i > 1 and rel[i - 1] == 0:
-            i -= 1
-        return rel if i == len_release else rel[:i]
-
-
-def _parse_letter_version(
-    letter: str | None, number: str | bytes | SupportsInt | None
-) -> tuple[str, int] | None:
-    if letter:
-        # We normalize any letters to their lower case form
-        letter = letter.lower()
-
-        # We consider some words to be alternate spellings of other words and
-        # in those cases we want to normalize the spellings to our preferred
-        # spelling.
-        letter = _LETTER_NORMALIZATION.get(letter, letter)
-
-        # We consider there to be an implicit 0 in a pre-release if there is
-        # not a numeral associated with it.
-        return letter, int(number or 0)
-
-    if number:
-        # We assume if we are given a number, but we are not given a letter
-        # then this is using the implicit post release syntax (e.g. 1.0-1)
-        return "post", int(number)
-
-    return None
-
-
-_local_version_separators = re.compile(r"[\._-]")
-
-
-def _parse_local_version(local: str | None) -> LocalType | None:
-    """
-    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
-    """
-    if local is not None:
-        return tuple(
-            part.lower() if not part.isdigit() else int(part)
-            for part in _local_version_separators.split(local)
-        )
-    return None
-
-
-def _cmpkey(
-    epoch: int,
-    release: tuple[int, ...],
-    pre: tuple[str, int] | None,
-    post: tuple[str, int] | None,
-    dev: tuple[str, int] | None,
-    local: LocalType | None,
-) -> CmpKey:
-    # When we compare a release version, we want to compare it with all of the
-    # trailing zeros removed. We will use this for our sorting key.
-    len_release = len(release)
-    i = len_release
-    while i and release[i - 1] == 0:
-        i -= 1
-    _release = release if i == len_release else release[:i]
-
-    # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0.
-    # We'll do this by abusing the pre segment, but we _only_ want to do this
-    # if there is not a pre or a post segment. If we have one of those then
-    # the normal sorting rules will handle this case correctly.
-    if pre is None and post is None and dev is not None:
-        _pre: CmpPrePostDevType = NegativeInfinity
-    # Versions without a pre-release (except as noted above) should sort after
-    # those with one.
-    elif pre is None:
-        _pre = Infinity
-    else:
-        _pre = pre
-
-    # Versions without a post segment should sort before those with one.
-    if post is None:
-        _post: CmpPrePostDevType = NegativeInfinity
-
-    else:
-        _post = post
-
-    # Versions without a development segment should sort after those with one.
-    if dev is None:
-        _dev: CmpPrePostDevType = Infinity
-
-    else:
-        _dev = dev
-
-    if local is None:
-        # Versions without a local segment should sort before those with one.
-        _local: CmpLocalType = NegativeInfinity
-    else:
-        # Versions with a local segment need that segment parsed to implement
-        # the sorting rules in PEP440.
-        # - Alpha numeric segments sort before numeric segments
-        # - Alpha numeric segments sort lexicographically
-        # - Numeric segments sort numerically
-        # - Shorter versions sort before longer versions when the prefixes
-        #   match exactly
-        _local = tuple(
-            (i, "") if isinstance(i, int) else (NegativeInfinity, i) for i in local
-        )
-
-    return epoch, _release, _pre, _post, _dev, _local
diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/INSTALLER
deleted file mode 100644
index a1b589e..0000000
--- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/INSTALLER
+++ /dev/null
@@ -1 +0,0 @@
-pip
diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/METADATA
deleted file mode 100644
index ea8c3fd..0000000
--- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/METADATA
+++ /dev/null
@@ -1,177 +0,0 @@
-Metadata-Version: 2.4
-Name: pillow
-Version: 11.3.0
-Summary: Python Imaging Library (Fork)
-Author-email: "Jeffrey A. Clark" 
-License-Expression: MIT-CMU
-Project-URL: Changelog, https://github.com/python-pillow/Pillow/releases
-Project-URL: Documentation, https://pillow.readthedocs.io
-Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi
-Project-URL: Homepage, https://python-pillow.github.io
-Project-URL: Mastodon, https://fosstodon.org/@pillow
-Project-URL: Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html
-Project-URL: Source, https://github.com/python-pillow/Pillow
-Keywords: Imaging
-Classifier: Development Status :: 6 - Mature
-Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Topic :: Multimedia :: Graphics
-Classifier: Topic :: Multimedia :: Graphics :: Capture :: Digital Camera
-Classifier: Topic :: Multimedia :: Graphics :: Capture :: Screen Capture
-Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
-Classifier: Topic :: Multimedia :: Graphics :: Viewers
-Classifier: Typing :: Typed
-Requires-Python: >=3.9
-Description-Content-Type: text/markdown
-License-File: LICENSE
-Provides-Extra: docs
-Requires-Dist: furo; extra == "docs"
-Requires-Dist: olefile; extra == "docs"
-Requires-Dist: sphinx>=8.2; extra == "docs"
-Requires-Dist: sphinx-autobuild; extra == "docs"
-Requires-Dist: sphinx-copybutton; extra == "docs"
-Requires-Dist: sphinx-inline-tabs; extra == "docs"
-Requires-Dist: sphinxext-opengraph; extra == "docs"
-Provides-Extra: fpx
-Requires-Dist: olefile; extra == "fpx"
-Provides-Extra: mic
-Requires-Dist: olefile; extra == "mic"
-Provides-Extra: test-arrow
-Requires-Dist: pyarrow; extra == "test-arrow"
-Provides-Extra: tests
-Requires-Dist: check-manifest; extra == "tests"
-Requires-Dist: coverage>=7.4.2; extra == "tests"
-Requires-Dist: defusedxml; extra == "tests"
-Requires-Dist: markdown2; extra == "tests"
-Requires-Dist: olefile; extra == "tests"
-Requires-Dist: packaging; extra == "tests"
-Requires-Dist: pyroma; extra == "tests"
-Requires-Dist: pytest; extra == "tests"
-Requires-Dist: pytest-cov; extra == "tests"
-Requires-Dist: pytest-timeout; extra == "tests"
-Requires-Dist: pytest-xdist; extra == "tests"
-Requires-Dist: trove-classifiers>=2024.10.12; extra == "tests"
-Provides-Extra: typing
-Requires-Dist: typing-extensions; python_version < "3.10" and extra == "typing"
-Provides-Extra: xmp
-Requires-Dist: defusedxml; extra == "xmp"
-Dynamic: license-file
-
-

- Pillow logo -

- -# Pillow - -## Python Imaging Library (Fork) - -Pillow is the friendly PIL fork by [Jeffrey A. Clark and -contributors](https://github.com/python-pillow/Pillow/graphs/contributors). -PIL is the Python Imaging Library by Fredrik Lundh and contributors. -As of 2019, Pillow development is -[supported by Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise). - - - - - - - - - - - - - - - - - - -
docs - Documentation Status -
tests - GitHub Actions build status (Lint) - GitHub Actions build status (Test Linux and macOS) - GitHub Actions build status (Test Windows) - GitHub Actions build status (Test MinGW) - GitHub Actions build status (Test Cygwin) - GitHub Actions build status (Test Docker) - GitHub Actions build status (Wheels) - Code coverage - Fuzzing Status -
package - Zenodo - Tidelift - Newest PyPI version - Number of PyPI downloads - OpenSSF Best Practices -
social - Join the chat at https://gitter.im/python-pillow/Pillow - Follow on https://fosstodon.org/@pillow -
- -## Overview - -The Python Imaging Library adds image processing capabilities to your Python interpreter. - -This library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities. - -The core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool. - -## More information - -- [Documentation](https://pillow.readthedocs.io/) - - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html) - - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html) -- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md) - - [Issues](https://github.com/python-pillow/Pillow/issues) - - [Pull requests](https://github.com/python-pillow/Pillow/pulls) -- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html) -- [Changelog](https://github.com/python-pillow/Pillow/releases) - - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork) - -## Report a vulnerability - -To report a security vulnerability, please follow the procedure described in the [Tidelift security policy](https://tidelift.com/docs/security). diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/RECORD deleted file mode 100644 index a9f5d24..0000000 --- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/RECORD +++ /dev/null @@ -1,233 +0,0 @@ -PIL/AvifImagePlugin.py,sha256=5IiDMvMZQXLnS3t25XJjlwgNWmeVSNaGfReWAp-V5lo,8994 -PIL/BdfFontFile.py,sha256=PhlZfIRmEfmorbhZZeSM5eebGo1Ei7fL-lR9XlfTZZA,3285 -PIL/BlpImagePlugin.py,sha256=Ub4vVKBEniiNBEgNizxScEpO1VKbC1w6iecWUU7T-Vs,16533 -PIL/BmpImagePlugin.py,sha256=-SNdj2godmaKYAc08dEng6z3mRPbYYHezjveIR5e-tU,19855 -PIL/BufrStubImagePlugin.py,sha256=JSqDhkPNPnFw0Qcz-gQJl-D_iSCFdtcLvPynshKJ4WM,1730 -PIL/ContainerIO.py,sha256=wkBqL2GDAb5fh3wrtfTGUfqioJipCl-lg2GxbjQrTZw,4604 -PIL/CurImagePlugin.py,sha256=bICiwXZrzSONWBu4bKtshxZSNFj8su0lbDojYntEUYs,1797 -PIL/DcxImagePlugin.py,sha256=DhqsmW7MjmnUSTGZ-Skv9hz1XeX3XoQQoAl9GWLAEEY,2145 -PIL/DdsImagePlugin.py,sha256=fjdfZK_eQtUp_-bjoRmt-5wgOT5GTmvg6aI-itch4mo,18906 -PIL/EpsImagePlugin.py,sha256=ROWwCv08bC_B41eMf2AFe8UW6ZH4_XQ18x12KB_aQLM,16389 -PIL/ExifTags.py,sha256=zW6kVikCosiyoCo7J7R62evD3hoxjKPchnVh8po7CZc,9931 -PIL/FitsImagePlugin.py,sha256=-oDJnAH113CK5qPvwz9lL81fkV1gla_tNfqLcq8zKgo,4644 -PIL/FliImagePlugin.py,sha256=DaWuH8f-9GihS0VVZqF1bT3uDv1Vb0VBl0chnNd82Ow,4786 -PIL/FontFile.py,sha256=St7MxO5Q-oakCLWn3ZrgrtaT3wSsmAarxm8AU-G8Moc,3577 -PIL/FpxImagePlugin.py,sha256=aXfg0YdvNeJhxqh-f-f22D1NobQ8tSVCj-tpLE2PKfE,7293 -PIL/FtexImagePlugin.py,sha256=v2I5YkdfNA3iW35JzKnWry9v6Rgvr0oezGVOuArREac,3535 -PIL/GbrImagePlugin.py,sha256=5t0UfLubTPQcuDDbafwC78OLR7IsD5hjpvhUZ5g8z4A,3006 -PIL/GdImageFile.py,sha256=LP4Uxv3Y2ivGZIyOVuGJarDDVS7zK6F1Q6SNl4wyGuQ,2788 -PIL/GifImagePlugin.py,sha256=SkXboZwxTolq0uteXYX0ncrZiUxyASywqAurOcVAi3U,42201 -PIL/GimpGradientFile.py,sha256=Z_4TUYMdPyUsiP40KSIpMJ5yLGMnBaIKOAkHyiQGEWE,3906 -PIL/GimpPaletteFile.py,sha256=YHEhKThsEVlXVjFQUnGvhDgNsJcfFqUAN0O0ucG9G-Q,1815 -PIL/GribStubImagePlugin.py,sha256=degHg344X3JXL8u-x8NWn08BsmM9wRh-Jg08HHrvfOc,1738 -PIL/Hdf5StubImagePlugin.py,sha256=OuEQijGqVwTTSG4dB2vAyQzmN-NYT22tiuZHFH0Q0Sw,1741 -PIL/IcnsImagePlugin.py,sha256=qvi-OP0g8CRlNlJE--5_rPlfyxLFLlSOil66Fw4TMwU,12949 -PIL/IcoImagePlugin.py,sha256=QCo29Toh08UX8vEcdCAaIeuidSolbPiZlCnQ4rUu2SQ,12491 -PIL/ImImagePlugin.py,sha256=wo5OL2PAcQW2MwRkJnS-N16toZzXWL95jx9FBM7l9ok,11567 -PIL/Image.py,sha256=95Jefi2QFIfZYOyfHNBRTwBtwrnNZsn5oCsLQsBLdK8,148332 -PIL/ImageChops.py,sha256=GEjlymcoDtA5OOeIxQVIX96BD-s6AXhb7TmSLYn2tUg,7946 -PIL/ImageCms.py,sha256=A5ZVaTjjxR6AeDNNvK-hmu0QqKOMTscou6BUBTLob0g,41934 -PIL/ImageColor.py,sha256=IGA9C2umeED_EzS2Cvj6KsU0VutC9RstWIYPe8uDsVk,9441 -PIL/ImageDraw.py,sha256=Enr0ctBHKBnSHVBDlqcIbIAyHgVj5ZbLL-swVb8s8Vo,42845 -PIL/ImageDraw2.py,sha256=pdVMW7bVw3KwhXvRZh28Md4y-2xFfuo5fHcDnaYqVK4,7227 -PIL/ImageEnhance.py,sha256=4Elhz_lyyxLmx0GkSHrwOAmNJ2TkqVQPHejzGihZUMI,3627 -PIL/ImageFile.py,sha256=HLgKqn6K9J4HlnyiPFZUTAfcqxXYjE06fZeKO6V-haw,29334 -PIL/ImageFilter.py,sha256=MiTowY9micg1dSfwZkExXSBNPr2b_11kDCGreP6W8x4,18671 -PIL/ImageFont.py,sha256=rVQm3zwnTFZ1HSp4OeA5THKjTezhE8HMrnOhHzmqfEM,64292 -PIL/ImageGrab.py,sha256=I9PHpsQf2VyNX4T8QL-8awFNotyAzB1mGxTt_I5FbTE,6471 -PIL/ImageMath.py,sha256=XasMsgjaD9p2OZa7naOdpEACq3yJl-Q2RGTf4xo7CgM,11919 -PIL/ImageMode.py,sha256=5yOxODAZ7jG03DsUFrt7eQayTtIpWPgvfyhlXDWwcv8,2681 -PIL/ImageMorph.py,sha256=TowXnk1Q2wX9AXVBDWRRQhCfAbFOUWGMo00vq4yn-fU,8563 -PIL/ImageOps.py,sha256=A69qjt-mxDI99387z_4cHI-wtH85SLL_ENTI9EeOQGI,25525 -PIL/ImagePalette.py,sha256=M5tYUgadWR7mxUEByyVl7IV9QFFzAGiKKmAhCZtdG0w,9009 -PIL/ImagePath.py,sha256=5yUG5XCUil1KKTTA_8PgGhcmg-mnue-GK0FwTBlhjw4,371 -PIL/ImageQt.py,sha256=dQbadF2Lg59OJVjiNVcbz3wvymqEpL-uEZG32b8E-bg,6841 -PIL/ImageSequence.py,sha256=gx2EvywPBEjxNJujCqdpbfAm2BpyNV2_f1IaO3niubw,2200 -PIL/ImageShow.py,sha256=Ju0_Db2B4_n3yKJV9sDsF7_HAgciEdXlq6I1Eiw1YTo,10106 -PIL/ImageStat.py,sha256=S43FZ89r_u4hKCj59lVuWpyVJfhbUy3igXkp9DwaMgM,5325 -PIL/ImageTk.py,sha256=b5SntckGXs0ECsI2MmdJg3CSX6AtELsWh0Ohxu41u_k,8132 -PIL/ImageTransform.py,sha256=-qek7P3lzLddcXt9cWt5w_L11JGp2yY3AJtOfmJAkDc,3916 -PIL/ImageWin.py,sha256=LT05w8_vTfRrC3n9S9pM0TNbXrzZLEJHlCJil7Xv80k,8085 -PIL/ImtImagePlugin.py,sha256=SL5IrsHcblltxtX4v_HVFhYnR6haJ0AOd2NHhZKMImY,2665 -PIL/IptcImagePlugin.py,sha256=3BVI_oEbFEJC-yn6zmp5Joqf8edCJLKH9N5FQanyaV8,6719 -PIL/Jpeg2KImagePlugin.py,sha256=k9UoU7-Hq8vAWi9ZoosA4bfufNJsctBd4ttM1RFxwnk,13865 -PIL/JpegImagePlugin.py,sha256=WaCZTpdmzuCM5mi44bNyN4p1EXOsnKz63qv4XEbm8Ns,31786 -PIL/JpegPresets.py,sha256=lnqWHo4DLIHIulcdHp0NJ7CWexHt8T3w51kIKlLfkIA,12379 -PIL/McIdasImagePlugin.py,sha256=baOIkD-CIIeCgBFTf8kos928PKBuCUqYYa38u3WES_8,1877 -PIL/MicImagePlugin.py,sha256=aoIwkWVyr_X-dPvB6ldZOJF3a9kd_OeuEW3say5Y0QM,2564 -PIL/MpegImagePlugin.py,sha256=g7BZd93kWpFi41SG_wKFoi0yEPsioI4kj45b2F-3Vrw,2010 -PIL/MpoImagePlugin.py,sha256=S45qt7OcY7rBjYlwEk0nUmEj5IOu5z8KVLo066V1RBE,6722 -PIL/MspImagePlugin.py,sha256=oxk_MLUDvzJ4JDuOZCHkmqOPXniG42PHOyNGwe60slY,5892 -PIL/PSDraw.py,sha256=KMBGj3vXaFpblaIcA9KjFFTpdal41AQggY-UgzqoMkQ,6918 -PIL/PaletteFile.py,sha256=suDdAL6VMljXw4oEn1vhTt4DQ4vbpIHGd3A4oxOgE6s,1216 -PIL/PalmImagePlugin.py,sha256=WJ1b8I1xTSAXYDJhIpkVFCLu2LlpbiBD5d1Hr-m2l08,8748 -PIL/PcdImagePlugin.py,sha256=VweZ108HBHeNEfsoE26EOR4ktxqNGSOWOnd58DhS8Fo,1601 -PIL/PcfFontFile.py,sha256=NPZQ0XkbGB8uTlGqgmIPGkwuLMYBdykDeVuvFgIC7JU,7147 -PIL/PcxImagePlugin.py,sha256=2dqnjRjSLbjm8Opub4sZRhOIdYLdn3y7Q_ETV8EmiOQ,6224 -PIL/PdfImagePlugin.py,sha256=AbJA2f4qzH8G1olfmk18SzQlcx3WsipUYDc5bcR8Wvk,9349 -PIL/PdfParser.py,sha256=LnmX0Cm7ZQwGkB1uYP4rvXZUkERmURzmYo78zjeq6VI,37987 -PIL/PixarImagePlugin.py,sha256=l_4GwBd0mATnIXYJbwmmODU2vP7wewLu6BRviHCB2EI,1758 -PIL/PngImagePlugin.py,sha256=jPBNqZ50txFHWIsDikcdkeeBfLNY1PxT5wzcPMcmcmQ,51117 -PIL/PpmImagePlugin.py,sha256=QJM-V-odV7w-prA7B5bLRQcykdC4d7OJ5BBbCvPPIzY,12370 -PIL/PsdImagePlugin.py,sha256=ImnNRG4VANs2GATXVEB5Q-yy1Jskc6XRVRtZYi2fALg,8685 -PIL/QoiImagePlugin.py,sha256=RPO63QsgHAsyPpcxh7ymeMYlnjVu5gT5ELolkvJt0vc,8572 -PIL/SgiImagePlugin.py,sha256=3Ql89s8vycNWjcxJwMw28iksV9Yj2xWoKBQ6c5DHXBg,6389 -PIL/SpiderImagePlugin.py,sha256=Bsg6pfZMctas1xYx__oL-ZZseUReZdnLy5a-aKEJhpE,10249 -PIL/SunImagePlugin.py,sha256=Hdxkhk0pxpBGxYhPJfCDLwsYcO1KjxjtplNMFYibIvk,4589 -PIL/TarIO.py,sha256=BqYUChCBb9F7Sh-uZ86iz1Dtoy2D0obNwGm65z1rdc0,1442 -PIL/TgaImagePlugin.py,sha256=2vDsFTcBUBHw1V80wpVv4tgpLDbPr6yVHi6Fvaqf0HY,6980 -PIL/TiffImagePlugin.py,sha256=IK7Ur131NNyJET-wk50tzLkSyd7TI1lwSES4N_txy5w,85029 -PIL/TiffTags.py,sha256=-gbXLZ5rlHD6crwtY6TkafDm2tamlc5v8e7FjS8PcIg,17082 -PIL/WalImageFile.py,sha256=Lfuq_WZ_V_onwucfUc6GWfvY7z_K4s-5EdaQGu_2DD4,5704 -PIL/WebPImagePlugin.py,sha256=YFWo6_FYBSrzAf6XMbmrF4YRtR4x7tYecCWF7EA13WQ,10010 -PIL/WmfImagePlugin.py,sha256=Z1hzGuHGt08tBLsxgBV7ZVOLdQPykDMYd4RGkw1J8rw,5243 -PIL/XVThumbImagePlugin.py,sha256=cJSapkBasFt11O6XYXxqcyA-njxA5BD3wHhNj6VC7Fk,2115 -PIL/XbmImagePlugin.py,sha256=Fd6GVDEo73nyFICA3Z3w4LjkwoZWvhHB6rKCm5yVrho,2669 -PIL/XpmImagePlugin.py,sha256=jtUKavJCYwIAsJaJwSx8vJsx1oTbCywfDxePENmA93w,4400 -PIL/__init__.py,sha256=Q4KOEpR7S_Xsj30fvOsvR94xEpX4KUsVeUwaVP1fU80,2031 -PIL/__main__.py,sha256=Lpj4vef8mI7jA1sRCUAoVYaeePD_Uc898xF5c7XLx1A,133 -PIL/__pycache__/AvifImagePlugin.cpython-312.pyc,, -PIL/__pycache__/BdfFontFile.cpython-312.pyc,, -PIL/__pycache__/BlpImagePlugin.cpython-312.pyc,, -PIL/__pycache__/BmpImagePlugin.cpython-312.pyc,, -PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc,, -PIL/__pycache__/ContainerIO.cpython-312.pyc,, -PIL/__pycache__/CurImagePlugin.cpython-312.pyc,, -PIL/__pycache__/DcxImagePlugin.cpython-312.pyc,, -PIL/__pycache__/DdsImagePlugin.cpython-312.pyc,, -PIL/__pycache__/EpsImagePlugin.cpython-312.pyc,, -PIL/__pycache__/ExifTags.cpython-312.pyc,, -PIL/__pycache__/FitsImagePlugin.cpython-312.pyc,, -PIL/__pycache__/FliImagePlugin.cpython-312.pyc,, -PIL/__pycache__/FontFile.cpython-312.pyc,, -PIL/__pycache__/FpxImagePlugin.cpython-312.pyc,, -PIL/__pycache__/FtexImagePlugin.cpython-312.pyc,, -PIL/__pycache__/GbrImagePlugin.cpython-312.pyc,, -PIL/__pycache__/GdImageFile.cpython-312.pyc,, -PIL/__pycache__/GifImagePlugin.cpython-312.pyc,, -PIL/__pycache__/GimpGradientFile.cpython-312.pyc,, -PIL/__pycache__/GimpPaletteFile.cpython-312.pyc,, -PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc,, -PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc,, -PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc,, -PIL/__pycache__/IcoImagePlugin.cpython-312.pyc,, -PIL/__pycache__/ImImagePlugin.cpython-312.pyc,, -PIL/__pycache__/Image.cpython-312.pyc,, -PIL/__pycache__/ImageChops.cpython-312.pyc,, -PIL/__pycache__/ImageCms.cpython-312.pyc,, -PIL/__pycache__/ImageColor.cpython-312.pyc,, -PIL/__pycache__/ImageDraw.cpython-312.pyc,, -PIL/__pycache__/ImageDraw2.cpython-312.pyc,, -PIL/__pycache__/ImageEnhance.cpython-312.pyc,, -PIL/__pycache__/ImageFile.cpython-312.pyc,, -PIL/__pycache__/ImageFilter.cpython-312.pyc,, -PIL/__pycache__/ImageFont.cpython-312.pyc,, -PIL/__pycache__/ImageGrab.cpython-312.pyc,, -PIL/__pycache__/ImageMath.cpython-312.pyc,, -PIL/__pycache__/ImageMode.cpython-312.pyc,, -PIL/__pycache__/ImageMorph.cpython-312.pyc,, -PIL/__pycache__/ImageOps.cpython-312.pyc,, -PIL/__pycache__/ImagePalette.cpython-312.pyc,, -PIL/__pycache__/ImagePath.cpython-312.pyc,, -PIL/__pycache__/ImageQt.cpython-312.pyc,, -PIL/__pycache__/ImageSequence.cpython-312.pyc,, -PIL/__pycache__/ImageShow.cpython-312.pyc,, -PIL/__pycache__/ImageStat.cpython-312.pyc,, -PIL/__pycache__/ImageTk.cpython-312.pyc,, -PIL/__pycache__/ImageTransform.cpython-312.pyc,, -PIL/__pycache__/ImageWin.cpython-312.pyc,, -PIL/__pycache__/ImtImagePlugin.cpython-312.pyc,, -PIL/__pycache__/IptcImagePlugin.cpython-312.pyc,, -PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc,, -PIL/__pycache__/JpegImagePlugin.cpython-312.pyc,, -PIL/__pycache__/JpegPresets.cpython-312.pyc,, -PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc,, -PIL/__pycache__/MicImagePlugin.cpython-312.pyc,, -PIL/__pycache__/MpegImagePlugin.cpython-312.pyc,, -PIL/__pycache__/MpoImagePlugin.cpython-312.pyc,, -PIL/__pycache__/MspImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PSDraw.cpython-312.pyc,, -PIL/__pycache__/PaletteFile.cpython-312.pyc,, -PIL/__pycache__/PalmImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PcdImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PcfFontFile.cpython-312.pyc,, -PIL/__pycache__/PcxImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PdfImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PdfParser.cpython-312.pyc,, -PIL/__pycache__/PixarImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PngImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PpmImagePlugin.cpython-312.pyc,, -PIL/__pycache__/PsdImagePlugin.cpython-312.pyc,, -PIL/__pycache__/QoiImagePlugin.cpython-312.pyc,, -PIL/__pycache__/SgiImagePlugin.cpython-312.pyc,, -PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc,, -PIL/__pycache__/SunImagePlugin.cpython-312.pyc,, -PIL/__pycache__/TarIO.cpython-312.pyc,, -PIL/__pycache__/TgaImagePlugin.cpython-312.pyc,, -PIL/__pycache__/TiffImagePlugin.cpython-312.pyc,, -PIL/__pycache__/TiffTags.cpython-312.pyc,, -PIL/__pycache__/WalImageFile.cpython-312.pyc,, -PIL/__pycache__/WebPImagePlugin.cpython-312.pyc,, -PIL/__pycache__/WmfImagePlugin.cpython-312.pyc,, -PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc,, -PIL/__pycache__/XbmImagePlugin.cpython-312.pyc,, -PIL/__pycache__/XpmImagePlugin.cpython-312.pyc,, -PIL/__pycache__/__init__.cpython-312.pyc,, -PIL/__pycache__/__main__.cpython-312.pyc,, -PIL/__pycache__/_binary.cpython-312.pyc,, -PIL/__pycache__/_deprecate.cpython-312.pyc,, -PIL/__pycache__/_tkinter_finder.cpython-312.pyc,, -PIL/__pycache__/_typing.cpython-312.pyc,, -PIL/__pycache__/_util.cpython-312.pyc,, -PIL/__pycache__/_version.cpython-312.pyc,, -PIL/__pycache__/features.cpython-312.pyc,, -PIL/__pycache__/report.cpython-312.pyc,, -PIL/_avif.cpython-312-x86_64-linux-gnu.so,sha256=Zk8Qj3O7vkQl-EZsbz4EkFV4s9e97jRvBOf4irBArC8,87889 -PIL/_avif.pyi,sha256=3fBxcSppJr6EOEcUojvflG3Eegg7lv2Qp0dNQQILrP4,63 -PIL/_binary.py,sha256=pcM6AL04GxgmGeLfcH1V1BZHENwIrQH0uxhJ7r0HIL0,2550 -PIL/_deprecate.py,sha256=JYJfJgemvedcdHMH6_RFTDBLNp4vSJqd-o32e3WzNlM,2034 -PIL/_imaging.cpython-312-x86_64-linux-gnu.so,sha256=In1u4FUyxkYbXW3gVbj-7qricWqAW_g-pcoeHOwcw6c,3382089 -PIL/_imaging.pyi,sha256=StMbXUZS32AegATP1sUHfs5P05A3TD_BiQKsDHQBW40,868 -PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so,sha256=epzZshmZGIbBoI_I5EPPp9pBdVLGEOAUKhLju2A_-7Q,137273 -PIL/_imagingcms.pyi,sha256=brpjxRoiY_2ItyfTrjhKeGEsExe4GPG-25q9AQP8Jp8,4389 -PIL/_imagingft.cpython-312-x86_64-linux-gnu.so,sha256=V_QhgVhpTtOWp0xZ07RdiLFU9izGbjKmb5uEfbr3IjI,310601 -PIL/_imagingft.pyi,sha256=IYdFGfApwsqYiJVoD5AVOvgMvnO1eP1J3cMA6L0YZJ0,1806 -PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so,sha256=5H2EkypJS7uu1_imLKKhzFU_xpo7APN4WVdLOhgnTsM,167000 -PIL/_imagingmath.pyi,sha256=3fBxcSppJr6EOEcUojvflG3Eegg7lv2Qp0dNQQILrP4,63 -PIL/_imagingmorph.cpython-312-x86_64-linux-gnu.so,sha256=4JvsHNFkQIHJoC628iF679Ule_dAcQDNz1w8LLkQhG0,36504 -PIL/_imagingmorph.pyi,sha256=3fBxcSppJr6EOEcUojvflG3Eegg7lv2Qp0dNQQILrP4,63 -PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so,sha256=N-X12JuasRC0yQl897nRxKAGtjn5Dvm857ViDH0eJr4,46688 -PIL/_imagingtk.pyi,sha256=3fBxcSppJr6EOEcUojvflG3Eegg7lv2Qp0dNQQILrP4,63 -PIL/_tkinter_finder.py,sha256=GIZ4stmFhUosmHKSrdxcjStiocDNfyJn7RBie2SWxU0,538 -PIL/_typing.py,sha256=1NAWJ7Z59TP98cFv9qGpBMgSHbyR4CAByLjMRRbSZxY,1251 -PIL/_util.py,sha256=E76J1WLAe6Xg5yNWYztQwYzxUT_sR_VQxFJu7IZ3S3k,635 -PIL/_version.py,sha256=Zwv2LKWt6v32STL5K9uN7PdcJmZhDlokKTLkDA7Ky1w,87 -PIL/_webp.cpython-312-x86_64-linux-gnu.so,sha256=lMw83m0hd2a2ND6BfneEgTkEc9nhzW0Xo9N1tSe9HwY,84193 -PIL/_webp.pyi,sha256=3fBxcSppJr6EOEcUojvflG3Eegg7lv2Qp0dNQQILrP4,63 -PIL/features.py,sha256=FfyYObVJbzYQUXf8KuRuqY6kvA8md2LorE81k3EuQrw,11479 -PIL/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -PIL/report.py,sha256=4JY6-IU7sH1RKuRbOvy1fUt0dAoi79FX4tYJN3p1DT0,100 -pillow-11.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pillow-11.3.0.dist-info/METADATA,sha256=1T1NePio7-GCOWcR73aEA4bSukzNrUIfWMwAw7NAH3M,9023 -pillow-11.3.0.dist-info/RECORD,, -pillow-11.3.0.dist-info/WHEEL,sha256=1crAxrAH5rUbvWUY1UR0ly3o7KnT1jo0_98V8RY5-FM,152 -pillow-11.3.0.dist-info/licenses/LICENSE,sha256=LECn2IlBJv96mTp1JQW5FWlKr-emIIie82isv1S4cUQ,66498 -pillow-11.3.0.dist-info/top_level.txt,sha256=riZqrk-hyZqh5f1Z0Zwii3dKfxEsByhu9cU9IODF-NY,4 -pillow-11.3.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -pillow.libs/libXau-154567c4.so.6.0.0,sha256=BUhNJL94y47QMWnxywZyBNgpy3ryHeiCBADSnRFeQyA,22081 -pillow.libs/libavif-01e67780.so.16.3.0,sha256=xCXlA8_rggzsCA_EsWKFzgqPBmT1ihpZCo3iMyvD1P0,5142057 -pillow.libs/libbrotlicommon-c55a5f7a.so.1.1.0,sha256=HaLbMm3YehX759wgF7ZU0kVwhdgX4ukfvQNKytoarw8,144425 -pillow.libs/libbrotlidec-2ced2f3a.so.1.1.0,sha256=BOwekVTiRipkYusnBXmzGGhiPsBwBI6DDWPLkvxAbRE,62337 -pillow.libs/libfreetype-083ff72c.so.6.20.2,sha256=nR7Qj8vHmYmFqPKudV_uWIjG3NoY3ZEIGqySuB3Fxi0,1430825 -pillow.libs/libharfbuzz-fe5b8f8d.so.0.61121.0,sha256=7BYYYjM0M0rNxEo1d1yqqSoOGLCcbs-Jqi1KWqxvomM,908081 -pillow.libs/libjpeg-8a13c6e0.so.62.4.0,sha256=L9LNO3lhekD_kggV6DrgsleI_gXfl3EfWwApiRwxy9k,832177 -pillow.libs/liblcms2-cc10e42f.so.2.0.17,sha256=5JMjEDVKMwxcinhbQl6qhRLaezAiQFYEPSz-KultHe0,519073 -pillow.libs/liblzma-64b7ab39.so.5.8.1,sha256=hN2B2RPEM6wOgvER_g43fNjbNQ_SsrenX2wlAfHW-nA,266369 -pillow.libs/libopenjp2-56811f71.so.2.5.3,sha256=aG9iy-0yE3nj44vnrpTFZBHUNFvejVTlV7QEctmnaTo,585849 -pillow.libs/libpng16-d00bd151.so.16.49.0,sha256=VYiCiAoDB6dnWllbcSpOu9DrHKQ3Th4tepiWdhdg_mw,278001 -pillow.libs/libsharpyuv-60a7c00b.so.0.1.1,sha256=jySHi3I26NspkZW9eAaQsPCDwB8_D_Guh7g5d-ROCAQ,46113 -pillow.libs/libtiff-13a02c81.so.6.1.0,sha256=AH827ZKX4f_-DpYv66BELczkhkVdbNmLLFile8vRVgU,746233 -pillow.libs/libwebp-5f0275c0.so.7.1.10,sha256=s6N3iSclHhrkhSaM_cFqk7IAZrWe1pgGmwJk-wzhSYk,731185 -pillow.libs/libwebpdemux-efaed568.so.2.0.16,sha256=q8bcLAXcqize_gg5VszKAHNQ-nBcDU7VVyFKytD1J68,30217 -pillow.libs/libwebpmux-6f2b1ad9.so.3.1.1,sha256=Amxlm7OxjsJWAu9Q-bI59RnoZ9GiZS6FKb2bGccAPUw,58617 -pillow.libs/libxcb-64009ff3.so.1.1.0,sha256=t0N-0WuuesRJgEn9FOENG9HD59FdDl6rHS6tQqg6SdE,251425 diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/WHEEL deleted file mode 100644 index 895655c..0000000 --- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (80.9.0) -Root-Is-Purelib: false -Tag: cp312-cp312-manylinux_2_27_x86_64 -Tag: cp312-cp312-manylinux_2_28_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/licenses/LICENSE deleted file mode 100644 index 8df788b..0000000 --- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,1487 +0,0 @@ -The Python Imaging Library (PIL) is - - Copyright © 1997-2011 by Secret Labs AB - Copyright © 1995-2011 by Fredrik Lundh and contributors - -Pillow is the friendly PIL fork. It is - - Copyright © 2010 by Jeffrey A. Clark and contributors - -Like PIL, Pillow is licensed under the open source MIT-CMU License: - -By obtaining, using, and/or copying this software and/or its associated -documentation, you agree that you have read, understood, and will comply -with the following terms and conditions: - -Permission to use, copy, modify and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appears in all copies, and that -both that copyright notice and this permission notice appear in supporting -documentation, and that the name of Secret Labs AB or the author not be -used in advertising or publicity pertaining to distribution of the software -without specific, written prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. -IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - ----- - -AOM - -Copyright (c) 2016, Alliance for Open Media. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - ----- - -BROTLI - -Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - ----- - -BZIP2 - - --------------------------------------------------------------------------- - -This program, "bzip2", the associated library "libbzip2", and all -documentation, are copyright (C) 1996-2019 Julian R Seward. All -rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - -4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Julian Seward, jseward@acm.org -bzip2/libbzip2 version 1.0.8 of 13 July 2019 - --------------------------------------------------------------------------- - - ----- - -DAV1D - -Copyright © 2018-2019, VideoLAN and dav1d authors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ----- - -FREETYPE2 - -The FreeType 2 font engine is copyrighted work and cannot be used -legally without a software license. In order to make this project -usable to a vast majority of developers, we distribute it under two -mutually exclusive open-source licenses. - -This means that *you* must choose *one* of the two licenses described -below, then obey all its terms and conditions when using FreeType 2 in -any of your projects or products. - - - The FreeType License, found in the file `docs/FTL.TXT`, which is - similar to the original BSD license *with* an advertising clause - that forces you to explicitly cite the FreeType project in your - product's documentation. All details are in the license file. - This license is suited to products which don't use the GNU General - Public License. - - Note that this license is compatible to the GNU General Public - License version 3, but not version 2. - - - The GNU General Public License version 2, found in - `docs/GPLv2.TXT` (any later version can be used also), for - programs which already use the GPL. Note that the FTL is - incompatible with GPLv2 due to its advertisement clause. - -The contributed BDF and PCF drivers come with a license similar to -that of the X Window System. It is compatible to the above two -licenses (see files `src/bdf/README` and `src/pcf/README`). The same -holds for the source code files `src/base/fthash.c` and -`include/freetype/internal/fthash.h`; they were part of the BDF driver -in earlier FreeType versions. - -The gzip module uses the zlib license (see `src/gzip/zlib.h`) which -too is compatible to the above two licenses. - -The files `src/autofit/ft-hb.c` and `src/autofit/ft-hb.h` contain code -taken almost verbatim from the HarfBuzz file `hb-ft.cc`, which uses -the 'Old MIT' license, compatible to the above two licenses. - -The MD5 checksum support (only used for debugging in development -builds) is in the public domain. - --------------------------------------------------------------------------- - - The FreeType Project LICENSE - ---------------------------- - - 2006-Jan-27 - - Copyright 1996-2002, 2006 by - David Turner, Robert Wilhelm, and Werner Lemberg - - - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - """ - Portions of this software are copyright © The FreeType - Project (www.freetype.org). All rights reserved. - """ - - Please replace with the value from the FreeType version you - actually use. - - -Legal Terms -=========== - -0. Definitions --------------- - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty --------------- - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution ------------------ - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising --------------- - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts ------------ - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - https://www.freetype.org - - ---- end of FTL.TXT --- - -The following license details are part of `src/bdf/README`: - -``` -License -******* - -Copyright (C) 2001-2002 by Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*** Portions of the driver (that is, bdflib.c and bdf.h): - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2002, 2011 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Credits -******* - -This driver is based on excellent Mark Leisher's bdf library. If you -find something good in this driver you should probably thank him, not -me. -``` - -The following license details are part of `src/pcf/README`: - -``` -License -******* - -Copyright (C) 2000 by Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Credits -******* - -Keith Packard wrote the pcf driver found in XFree86. His work is at -the same time the specification and the sample implementation of the -PCF format. Undoubtedly, this driver is inspired from his work. -``` - - ----- - -HARFBUZZ - -HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. -For parts of HarfBuzz that are licensed under different licenses see individual -files names COPYING in subdirectories where applicable. - -Copyright © 2010-2022 Google, Inc. -Copyright © 2015-2020 Ebrahim Byagowi -Copyright © 2019,2020 Facebook, Inc. -Copyright © 2012,2015 Mozilla Foundation -Copyright © 2011 Codethink Limited -Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) -Copyright © 2009 Keith Stribley -Copyright © 2011 Martin Hosken and SIL International -Copyright © 2007 Chris Wilson -Copyright © 2005,2006,2020,2021,2022,2023 Behdad Esfahbod -Copyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023 Red Hat, Inc. -Copyright © 1998-2005 David Turner and Werner Lemberg -Copyright © 2016 Igalia S.L. -Copyright © 2022 Matthias Clasen -Copyright © 2018,2021 Khaled Hosny -Copyright © 2018,2019,2020 Adobe, Inc -Copyright © 2013-2015 Alexei Podtelezhnikov - -For full copyright notices consult the individual files in the package. - - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - ----- - -LCMS2 - -Little CMS -Copyright (c) 1998-2020 Marti Maria Saguer - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - ----- - -LIBAVIF - -Copyright 2019 Joe Drago. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------- - -Files: src/obu.c - -Copyright © 2018-2019, VideoLAN and dav1d authors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------- - -Files: third_party/iccjpeg/* - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltmain.sh). Another support script, install-sh, is copyright by X Consortium -but is also freely distributable. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent, GIF reading support has -been removed altogether, and the GIF writer has been simplified to produce -"uncompressed GIFs". This technique does not use the LZW algorithm; the -resulting GIF files are larger than usual, but are readable by all standard -GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - ------------------------------------------------------------------------------- - -Files: contrib/gdk-pixbuf/* - -Copyright 2020 Emmanuel Gil Peyrot. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------- - -Files: android_jni/gradlew* - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ------------------------------------------------------------------------------- - -Files: third_party/libyuv/* - -Copyright 2011 The LibYuv Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ----- - -LIBJPEG - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - - ----- - -LIBLZMA - -XZ Utils Licensing -================== - - Different licenses apply to different files in this package. Here - is a rough summary of which licenses apply to which parts of this - package (but check the individual files to be sure!): - - - liblzma is in the public domain. - - - xz, xzdec, and lzmadec command line tools are in the public - domain unless GNU getopt_long had to be compiled and linked - in from the lib directory. The getopt_long code is under - GNU LGPLv2.1+. - - - The scripts to grep, diff, and view compressed files have been - adapted from gzip. These scripts and their documentation are - under GNU GPLv2+. - - - All the documentation in the doc directory and most of the - XZ Utils specific documentation files in other directories - are in the public domain. - - - Translated messages are in the public domain. - - - The build system contains public domain files, and files that - are under GNU GPLv2+ or GNU GPLv3+. None of these files end up - in the binaries being built. - - - Test files and test code in the tests directory, and debugging - utilities in the debug directory are in the public domain. - - - The extra directory may contain public domain files, and files - that are under various free software licenses. - - You can do whatever you want with the files that have been put into - the public domain. If you find public domain legally problematic, - take the previous sentence as a license grant. If you still find - the lack of copyright legally problematic, you have too many - lawyers. - - As usual, this software is provided "as is", without any warranty. - - If you copy significant amounts of public domain code from XZ Utils - into your project, acknowledging this somewhere in your software is - polite (especially if it is proprietary, non-free software), but - naturally it is not legally required. Here is an example of a good - notice to put into "about box" or into documentation: - - This software includes code from XZ Utils . - - The following license texts are included in the following files: - - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 - - COPYING.GPLv2: GNU General Public License version 2 - - COPYING.GPLv3: GNU General Public License version 3 - - Note that the toolchain (compiler, linker etc.) may add some code - pieces that are copyrighted. Thus, it is possible that e.g. liblzma - binary wouldn't actually be in the public domain in its entirety - even though it contains no copyrighted code from the XZ Utils source - package. - - If you have questions, don't hesitate to ask the author(s) for more - information. - - ----- - -LIBPNG - -COPYRIGHT NOTICE, DISCLAIMER, and LICENSE -========================================= - -PNG Reference Library License version 2 ---------------------------------------- - - * Copyright (c) 1995-2022 The PNG Reference Library Authors. - * Copyright (c) 2018-2022 Cosmin Truta. - * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. - * Copyright (c) 1996-1997 Andreas Dilger. - * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - -The software is supplied "as is", without warranty of any kind, -express or implied, including, without limitation, the warranties -of merchantability, fitness for a particular purpose, title, and -non-infringement. In no event shall the Copyright owners, or -anyone distributing the software, be liable for any damages or -other liability, whether in contract, tort or otherwise, arising -from, out of, or in connection with the software, or the use or -other dealings in the software, even if advised of the possibility -of such damage. - -Permission is hereby granted to use, copy, modify, and distribute -this software, or portions hereof, for any purpose, without fee, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you - use this software in a product, an acknowledgment in the product - documentation would be appreciated, but is not required. - - 2. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - - -PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) ------------------------------------------------------------------------ - -libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are -Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are -derived from libpng-1.0.6, and are distributed according to the same -disclaimer and license as libpng-1.0.6 with the following individuals -added to the list of Contributing Authors: - - Simon-Pierre Cadieux - Eric S. Raymond - Mans Rullgard - Cosmin Truta - Gilles Vollant - James Yu - Mandar Sahastrabuddhe - Google Inc. - Vadim Barkov - -and with the following additions to the disclaimer: - - There is no warranty against interference with your enjoyment of - the library or against infringement. There is no warranty that our - efforts or the library will fulfill any of your particular purposes - or needs. This library is provided with all faults, and the entire - risk of satisfactory quality, performance, accuracy, and effort is - with the user. - -Some files in the "contrib" directory and some configure-generated -files that are distributed with libpng have other copyright owners, and -are released under other open source licenses. - -libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are -Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from -libpng-0.96, and are distributed according to the same disclaimer and -license as libpng-0.96, with the following individuals added to the -list of Contributing Authors: - - Tom Lane - Glenn Randers-Pehrson - Willem van Schaik - -libpng versions 0.89, June 1996, through 0.96, May 1997, are -Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, -and are distributed according to the same disclaimer and license as -libpng-0.88, with the following individuals added to the list of -Contributing Authors: - - John Bowler - Kevin Bracey - Sam Bushell - Magnus Holmgren - Greg Roelofs - Tom Tanner - -Some files in the "scripts" directory have other copyright owners, -but are released under this license. - -libpng versions 0.5, May 1995, through 0.88, January 1996, are -Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - -For the purposes of this copyright and license, "Contributing Authors" -is defined as the following set of individuals: - - Andreas Dilger - Dave Martindale - Guy Eric Schalnat - Paul Schmidt - Tim Wegner - -The PNG Reference Library is supplied "AS IS". The Contributing -Authors and Group 42, Inc. disclaim all warranties, expressed or -implied, including, without limitation, the warranties of -merchantability and of fitness for any purpose. The Contributing -Authors and Group 42, Inc. assume no liability for direct, indirect, -incidental, special, exemplary, or consequential damages, which may -result from the use of the PNG Reference Library, even if advised of -the possibility of such damage. - -Permission is hereby granted to use, copy, modify, and distribute this -source code, or portions hereof, for any purpose, without fee, subject -to the following restrictions: - - 1. The origin of this source code must not be misrepresented. - - 2. Altered versions must be plainly marked as such and must not - be misrepresented as being the original source. - - 3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - -The Contributing Authors and Group 42, Inc. specifically permit, -without fee, and encourage the use of this source code as a component -to supporting the PNG file format in commercial products. If you use -this source code in a product, acknowledgment is not required but would -be appreciated. - - ----- - -LIBTIFF - -Copyright (c) 1988-1997 Sam Leffler -Copyright (c) 1991-1997 Silicon Graphics, Inc. - -Permission to use, copy, modify, distribute, and sell this software and -its documentation for any purpose is hereby granted without fee, provided -that (i) the above copyright notices and this permission notice appear in -all copies of the software and related documentation, and (ii) the names of -Sam Leffler and Silicon Graphics may not be used in any advertising or -publicity relating to the software without the specific, prior written -permission of Sam Leffler and Silicon Graphics. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR -ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF -LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. - - ----- - -LIBWEBP - -Copyright (c) 2010, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ----- - -LIBYUV - -Copyright 2011 The LibYuv Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ----- - -OPENJPEG - -* - * The copyright in this software is being made available under the 2-clauses - * BSD License, included below. This software may be subject to other third - * party and contributor rights, including patent rights, and no such rights - * are granted under this license. - * - * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium - * Copyright (c) 2002-2014, Professor Benoit Macq - * Copyright (c) 2003-2014, Antonin Descampe - * Copyright (c) 2003-2009, Francois-Olivier Devaux - * Copyright (c) 2005, Herve Drolon, FreeImage Team - * Copyright (c) 2002-2003, Yannick Verschueren - * Copyright (c) 2001-2003, David Janssens - * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France - * Copyright (c) 2012, CS Systemes d'Information, France - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - - ----- - -RAQM - -The MIT License (MIT) - -Copyright © 2015 Information Technology Authority (ITA) -Copyright © 2016 Khaled Hosny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ----- - -XAU - -Copyright 1988, 1993, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - - ----- - -XCB - -Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, -sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall -be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the authors -or their institutions shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this -Software without prior written authorization from the -authors. - - ----- - -XDMCP - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -Author: Keith Packard, MIT X Consortium - - ----- - -ZLIB - - (C) 1995-2017 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/top_level.txt deleted file mode 100644 index b338169..0000000 --- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -PIL diff --git a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/zip-safe b/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/myenv/lib/python3.12/site-packages/pillow-11.3.0.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libXau-154567c4.so.6.0.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libXau-154567c4.so.6.0.0 deleted file mode 100755 index ff06a58..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libXau-154567c4.so.6.0.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libavif-01e67780.so.16.3.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libavif-01e67780.so.16.3.0 deleted file mode 100755 index 121cc08..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libavif-01e67780.so.16.3.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlicommon-c55a5f7a.so.1.1.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlicommon-c55a5f7a.so.1.1.0 deleted file mode 100755 index f297663..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlicommon-c55a5f7a.so.1.1.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlidec-2ced2f3a.so.1.1.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlidec-2ced2f3a.so.1.1.0 deleted file mode 100755 index 2d8d8b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libbrotlidec-2ced2f3a.so.1.1.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libfreetype-083ff72c.so.6.20.2 b/myenv/lib/python3.12/site-packages/pillow.libs/libfreetype-083ff72c.so.6.20.2 deleted file mode 100755 index 60e4ee9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libfreetype-083ff72c.so.6.20.2 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libharfbuzz-fe5b8f8d.so.0.61121.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libharfbuzz-fe5b8f8d.so.0.61121.0 deleted file mode 100755 index d4a1e6a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libharfbuzz-fe5b8f8d.so.0.61121.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libjpeg-8a13c6e0.so.62.4.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libjpeg-8a13c6e0.so.62.4.0 deleted file mode 100755 index 7891191..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libjpeg-8a13c6e0.so.62.4.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/liblcms2-cc10e42f.so.2.0.17 b/myenv/lib/python3.12/site-packages/pillow.libs/liblcms2-cc10e42f.so.2.0.17 deleted file mode 100755 index b71aff4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/liblcms2-cc10e42f.so.2.0.17 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/liblzma-64b7ab39.so.5.8.1 b/myenv/lib/python3.12/site-packages/pillow.libs/liblzma-64b7ab39.so.5.8.1 deleted file mode 100755 index 4bdb09a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/liblzma-64b7ab39.so.5.8.1 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libopenjp2-56811f71.so.2.5.3 b/myenv/lib/python3.12/site-packages/pillow.libs/libopenjp2-56811f71.so.2.5.3 deleted file mode 100755 index 1b94f5d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libopenjp2-56811f71.so.2.5.3 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libpng16-d00bd151.so.16.49.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libpng16-d00bd151.so.16.49.0 deleted file mode 100755 index 5897ee9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libpng16-d00bd151.so.16.49.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libsharpyuv-60a7c00b.so.0.1.1 b/myenv/lib/python3.12/site-packages/pillow.libs/libsharpyuv-60a7c00b.so.0.1.1 deleted file mode 100755 index 8b63a0c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libsharpyuv-60a7c00b.so.0.1.1 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libtiff-13a02c81.so.6.1.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libtiff-13a02c81.so.6.1.0 deleted file mode 100755 index 035985d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libtiff-13a02c81.so.6.1.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libwebp-5f0275c0.so.7.1.10 b/myenv/lib/python3.12/site-packages/pillow.libs/libwebp-5f0275c0.so.7.1.10 deleted file mode 100755 index 693e3f3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libwebp-5f0275c0.so.7.1.10 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libwebpdemux-efaed568.so.2.0.16 b/myenv/lib/python3.12/site-packages/pillow.libs/libwebpdemux-efaed568.so.2.0.16 deleted file mode 100755 index 37ebaba..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libwebpdemux-efaed568.so.2.0.16 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libwebpmux-6f2b1ad9.so.3.1.1 b/myenv/lib/python3.12/site-packages/pillow.libs/libwebpmux-6f2b1ad9.so.3.1.1 deleted file mode 100755 index 400de25..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libwebpmux-6f2b1ad9.so.3.1.1 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pillow.libs/libxcb-64009ff3.so.1.1.0 b/myenv/lib/python3.12/site-packages/pillow.libs/libxcb-64009ff3.so.1.1.0 deleted file mode 100755 index 44689e1..0000000 Binary files a/myenv/lib/python3.12/site-packages/pillow.libs/libxcb-64009ff3.so.1.1.0 and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/AUTHORS.txt b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/AUTHORS.txt deleted file mode 100644 index f42daec..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/AUTHORS.txt +++ /dev/null @@ -1,806 +0,0 @@ -@Switch01 -A_Rog -Aakanksha Agrawal -Abhinav Sagar -ABHYUDAY PRATAP SINGH -abs51295 -AceGentile -Adam Chainz -Adam Tse -Adam Wentz -admin -Adolfo Ochagavía -Adrien Morison -Agus -ahayrapetyan -Ahilya -AinsworthK -Akash Srivastava -Alan Yee -Albert Tugushev -Albert-Guan -albertg -Alberto Sottile -Aleks Bunin -Ales Erjavec -Alethea Flowers -Alex Gaynor -Alex Grönholm -Alex Hedges -Alex Loosley -Alex Morega -Alex Stachowiak -Alexander Shtyrov -Alexandre Conrad -Alexey Popravka -Aleš Erjavec -Alli -Ami Fischman -Ananya Maiti -Anatoly Techtonik -Anders Kaseorg -Andre Aguiar -Andreas Lutro -Andrei Geacar -Andrew Gaul -Andrew Shymanel -Andrey Bienkowski -Andrey Bulgakov -Andrés Delfino -Andy Freeland -Andy Kluger -Ani Hayrapetyan -Aniruddha Basak -Anish Tambe -Anrs Hu -Anthony Sottile -Antoine Musso -Anton Ovchinnikov -Anton Patrushev -Anton Zelenov -Antonio Alvarado Hernandez -Antony Lee -Antti Kaihola -Anubhav Patel -Anudit Nagar -Anuj Godase -AQNOUCH Mohammed -AraHaan -arena -arenasys -Arindam Choudhury -Armin Ronacher -Arnon Yaari -Artem -Arun Babu Neelicattu -Ashley Manton -Ashwin Ramaswami -atse -Atsushi Odagiri -Avinash Karhana -Avner Cohen -Awit (Ah-Wit) Ghirmai -Baptiste Mispelon -Barney Gale -barneygale -Bartek Ogryczak -Bastian Venthur -Ben Bodenmiller -Ben Darnell -Ben Hoyt -Ben Mares -Ben Rosser -Bence Nagy -Benjamin Peterson -Benjamin VanEvery -Benoit Pierre -Berker Peksag -Bernard -Bernard Tyers -Bernardo B. Marques -Bernhard M. Wiedemann -Bertil Hatt -Bhavam Vidyarthi -Blazej Michalik -Bogdan Opanchuk -BorisZZZ -Brad Erickson -Bradley Ayers -Branch Vincent -Brandon L. Reiss -Brandt Bucher -Brannon Dorsey -Brett Randall -Brett Rosen -Brian Cristante -Brian Rosner -briantracy -BrownTruck -Bruno Oliveira -Bruno Renié -Bruno S -Bstrdsmkr -Buck Golemon -burrows -Bussonnier Matthias -bwoodsend -c22 -Caleb Brown -Caleb Martinez -Calvin Smith -Carl Meyer -Carlos Liam -Carol Willing -Carter Thayer -Cass -Chandrasekhar Atina -Charlie Marsh -charwick -Chih-Hsuan Yen -Chris Brinker -Chris Hunt -Chris Jerdonek -Chris Kuehl -Chris Markiewicz -Chris McDonough -Chris Pawley -Chris Pryer -Chris Wolfe -Christian Clauss -Christian Heimes -Christian Oudard -Christoph Reiter -Christopher Hunt -Christopher Snyder -chrysle -cjc7373 -Clark Boylan -Claudio Jolowicz -Clay McClure -Cody -Cody Soyland -Colin Watson -Collin Anderson -Connor Osborn -Cooper Lees -Cooper Ry Lees -Cory Benfield -Cory Wright -Craig Kerstiens -Cristian Sorinel -Cristina -Cristina Muñoz -ctg123 -Curtis Doty -cytolentino -Daan De Meyer -Dale -Damian -Damian Quiroga -Damian Shaw -Dan Black -Dan Savilonis -Dan Sully -Dane Hillard -daniel -Daniel Collins -Daniel Hahler -Daniel Holth -Daniel Jost -Daniel Katz -Daniel Shaulov -Daniele Esposti -Daniele Nicolodi -Daniele Procida -Daniil Konovalenko -Danny Hermes -Danny McClanahan -Darren Kavanagh -Dav Clark -Dave Abrahams -Dave Jones -David Aguilar -David Black -David Bordeynik -David Caro -David D Lowe -David Evans -David Hewitt -David Linke -David Poggi -David Poznik -David Pursehouse -David Runge -David Tucker -David Wales -Davidovich -ddelange -Deepak Sharma -Deepyaman Datta -Denise Yu -dependabot[bot] -derwolfe -Desetude -Devesh Kumar Singh -devsagul -Diego Caraballo -Diego Ramirez -DiegoCaraballo -Dimitri Merejkowsky -Dimitri Papadopoulos -Dimitri Papadopoulos Orfanos -Dirk Stolle -Dmitry Gladkov -Dmitry Volodin -Domen Kožar -Dominic Davis-Foster -Donald Stufft -Dongweiming -doron zarhi -Dos Moonen -Douglas Thor -DrFeathers -Dustin Ingram -Dustin Rodrigues -Dwayne Bailey -Ed Morley -Edgar Ramírez -Edgar Ramírez Mondragón -Ee Durbin -Efflam Lemaillet -efflamlemaillet -Eitan Adler -ekristina -elainechan -Eli Schwartz -Elisha Hollander -Ellen Marie Dash -Emil Burzo -Emil Styrke -Emmanuel Arias -Endoh Takanao -enoch -Erdinc Mutlu -Eric Cousineau -Eric Gillingham -Eric Hanchrow -Eric Hopper -Erik M. Bray -Erik Rose -Erwin Janssen -Eugene Vereshchagin -everdimension -Federico -Felipe Peter -Felix Yan -fiber-space -Filip Kokosiński -Filipe Laíns -Finn Womack -finnagin -Flavio Amurrio -Florian Briand -Florian Rathgeber -Francesco -Francesco Montesano -Fredrik Orderud -Frost Ming -Gabriel Curio -Gabriel de Perthuis -Garry Polley -gavin -gdanielson -Geoffrey Sneddon -George Song -Georgi Valkov -Georgy Pchelkin -ghost -Giftlin Rajaiah -gizmoguy1 -gkdoc -Godefroid Chapelle -Gopinath M -GOTO Hayato -gousaiyang -gpiks -Greg Roodt -Greg Ward -Guilherme Espada -Guillaume Seguin -gutsytechster -Guy Rozendorn -Guy Tuval -gzpan123 -Hanjun Kim -Hari Charan -Harsh Vardhan -harupy -Harutaka Kawamura -hauntsaninja -Henrich Hartzer -Henry Schreiner -Herbert Pfennig -Holly Stotelmyer -Honnix -Hsiaoming Yang -Hugo Lopes Tavares -Hugo van Kemenade -Hugues Bruant -Hynek Schlawack -Ian Bicking -Ian Cordasco -Ian Lee -Ian Stapleton Cordasco -Ian Wienand -Igor Kuzmitshov -Igor Sobreira -Ikko Ashimine -Ilan Schnell -Illia Volochii -Ilya Baryshev -Inada Naoki -Ionel Cristian Mărieș -Ionel Maries Cristian -Itamar Turner-Trauring -Ivan Pozdeev -J. Nick Koston -Jacob Kim -Jacob Walls -Jaime Sanz -jakirkham -Jakub Kuczys -Jakub Stasiak -Jakub Vysoky -Jakub Wilk -James Cleveland -James Curtin -James Firth -James Gerity -James Polley -Jan Pokorný -Jannis Leidel -Jarek Potiuk -jarondl -Jason Curtis -Jason R. Coombs -JasonMo -JasonMo1 -Jay Graves -Jean Abou Samra -Jean-Christophe Fillion-Robin -Jeff Barber -Jeff Dairiki -Jeff Widman -Jelmer Vernooij -jenix21 -Jeremy Fleischman -Jeremy Stanley -Jeremy Zafran -Jesse Rittner -Jiashuo Li -Jim Fisher -Jim Garrison -Jinzhe Zeng -Jiun Bae -Jivan Amara -Joe Bylund -Joe Michelini -John Paton -John Sirois -John T. Wodder II -John-Scott Atlakson -johnthagen -Jon Banafato -Jon Dufresne -Jon Parise -Jonas Nockert -Jonathan Herbert -Joonatan Partanen -Joost Molenaar -Jorge Niedbalski -Joseph Bylund -Joseph Long -Josh Bronson -Josh Cannon -Josh Hansen -Josh Schneier -Joshua -JoshuaPerdue -Juan Luis Cano Rodríguez -Juanjo Bazán -Judah Rand -Julian Berman -Julian Gethmann -Julien Demoor -July Tikhonov -Jussi Kukkonen -Justin van Heek -jwg4 -Jyrki Pulliainen -Kai Chen -Kai Mueller -Kamal Bin Mustafa -Karolina Surma -kasium -kaustav haldar -keanemind -Keith Maxwell -Kelsey Hightower -Kenneth Belitzky -Kenneth Reitz -Kevin Burke -Kevin Carter -Kevin Frommelt -Kevin R Patterson -Kexuan Sun -Kit Randel -Klaas van Schelven -KOLANICH -konstin -kpinc -Krishna Oza -Kumar McMillan -Kuntal Majumder -Kurt McKee -Kyle Persohn -lakshmanaram -Laszlo Kiss-Kollar -Laurent Bristiel -Laurent LAPORTE -Laurie O -Laurie Opperman -layday -Leon Sasson -Lev Givon -Lincoln de Sousa -Lipis -lorddavidiii -Loren Carvalho -Lucas Cimon -Ludovic Gasc -Luis Medel -Lukas Geiger -Lukas Juhrich -Luke Macken -Luo Jiebin -luojiebin -luz.paz -László Kiss Kollár -M00nL1ght -Marc Abramowitz -Marc Tamlyn -Marcus Smith -Mariatta -Mark Kohler -Mark McLoughlin -Mark Williams -Markus Hametner -Martey Dodoo -Martin Fischer -Martin Häcker -Martin Pavlasek -Masaki -Masklinn -Matej Stuchlik -Mathew Jennings -Mathieu Bridon -Mathieu Kniewallner -Matt Bacchi -Matt Good -Matt Maker -Matt Robenolt -Matt Wozniski -matthew -Matthew Einhorn -Matthew Feickert -Matthew Gilliard -Matthew Hughes -Matthew Iversen -Matthew Treinish -Matthew Trumbell -Matthew Willson -Matthias Bussonnier -mattip -Maurits van Rees -Max W Chase -Maxim Kurnikov -Maxime Rouyrre -mayeut -mbaluna -mdebi -memoselyk -meowmeowcat -Michael -Michael Aquilina -Michael E. Karpeles -Michael Klich -Michael Mintz -Michael Williamson -michaelpacer -Michał Górny -Mickaël Schoentgen -Miguel Araujo Perez -Mihir Singh -Mike -Mike Hendricks -Min RK -MinRK -Miro Hrončok -Monica Baluna -montefra -Monty Taylor -morotti -mrKazzila -Muha Ajjan -Nadav Wexler -Nahuel Ambrosini -Nate Coraor -Nate Prewitt -Nathan Houghton -Nathaniel J. Smith -Nehal J Wani -Neil Botelho -Nguyễn Gia Phong -Nicholas Serra -Nick Coghlan -Nick Stenning -Nick Timkovich -Nicolas Bock -Nicole Harris -Nikhil Benesch -Nikhil Ladha -Nikita Chepanov -Nikolay Korolev -Nipunn Koorapati -Nitesh Sharma -Niyas Sait -Noah -Noah Gorny -Nowell Strite -NtaleGrey -nvdv -OBITORASU -Ofek Lev -ofrinevo -Oliver Freund -Oliver Jeeves -Oliver Mannion -Oliver Tonnhofer -Olivier Girardot -Olivier Grisel -Ollie Rutherfurd -OMOTO Kenji -Omry Yadan -onlinejudge95 -Oren Held -Oscar Benjamin -Oz N Tiram -Pachwenko -Patrick Dubroy -Patrick Jenkins -Patrick Lawson -patricktokeeffe -Patrik Kopkan -Paul Ganssle -Paul Kehrer -Paul Moore -Paul Nasrat -Paul Oswald -Paul van der Linden -Paulus Schoutsen -Pavel Safronov -Pavithra Eswaramoorthy -Pawel Jasinski -Paweł Szramowski -Pekka Klärck -Peter Gessler -Peter Lisák -Peter Shen -Peter Waller -Petr Viktorin -petr-tik -Phaneendra Chiruvella -Phil Elson -Phil Freo -Phil Pennock -Phil Whelan -Philip Jägenstedt -Philip Molloy -Philippe Ombredanne -Pi Delport -Pierre-Yves Rofes -Pieter Degroote -pip -Prabakaran Kumaresshan -Prabhjyotsing Surjit Singh Sodhi -Prabhu Marappan -Pradyun Gedam -Prashant Sharma -Pratik Mallya -pre-commit-ci[bot] -Preet Thakkar -Preston Holmes -Przemek Wrzos -Pulkit Goyal -q0w -Qiangning Hong -Qiming Xu -Quentin Lee -Quentin Pradet -R. David Murray -Rafael Caricio -Ralf Schmitt -Ran Benita -Randy Döring -Razzi Abuissa -rdb -Reece Dunham -Remi Rampin -Rene Dudfield -Riccardo Magliocchetti -Riccardo Schirone -Richard Jones -Richard Si -Ricky Ng-Adam -Rishi -rmorotti -RobberPhex -Robert Collins -Robert McGibbon -Robert Pollak -Robert T. McGibbon -robin elisha robinson -Roey Berman -Rohan Jain -Roman Bogorodskiy -Roman Donchenko -Romuald Brunet -ronaudinho -Ronny Pfannschmidt -Rory McCann -Ross Brattain -Roy Wellington Ⅳ -Ruairidh MacLeod -Russell Keith-Magee -Ryan Shepherd -Ryan Wooden -ryneeverett -S. Guliaev -Sachi King -Salvatore Rinchiera -sandeepkiran-js -Sander Van Balen -Savio Jomton -schlamar -Scott Kitterman -Sean -seanj -Sebastian Jordan -Sebastian Schaetz -Segev Finer -SeongSoo Cho -Sergey Vasilyev -Seth Michael Larson -Seth Woodworth -Shahar Epstein -Shantanu -shenxianpeng -shireenrao -Shivansh-007 -Shixian Sheng -Shlomi Fish -Shovan Maity -Simeon Visser -Simon Cross -Simon Pichugin -sinoroc -sinscary -snook92 -socketubs -Sorin Sbarnea -Srinivas Nyayapati -Srishti Hegde -Stavros Korokithakis -Stefan Scherfke -Stefano Rivera -Stephan Erb -Stephen Rosen -stepshal -Steve (Gadget) Barnes -Steve Barnes -Steve Dower -Steve Kowalik -Steven Myint -Steven Silvester -stonebig -studioj -Stéphane Bidoul -Stéphane Bidoul (ACSONE) -Stéphane Klein -Sumana Harihareswara -Surbhi Sharma -Sviatoslav Sydorenko -Sviatoslav Sydorenko (Святослав Сидоренко) -Swat009 -Sylvain -Takayuki SHIMIZUKAWA -Taneli Hukkinen -tbeswick -Thiago -Thijs Triemstra -Thomas Fenzl -Thomas Grainger -Thomas Guettler -Thomas Johansson -Thomas Kluyver -Thomas Smith -Thomas VINCENT -Tim D. Smith -Tim Gates -Tim Harder -Tim Heap -tim smith -tinruufu -Tobias Hermann -Tom Forbes -Tom Freudenheim -Tom V -Tomas Hrnciar -Tomas Orsava -Tomer Chachamu -Tommi Enenkel | AnB -Tomáš Hrnčiar -Tony Beswick -Tony Narlock -Tony Zhaocheng Tan -TonyBeswick -toonarmycaptain -Toshio Kuratomi -toxinu -Travis Swicegood -Tushar Sadhwani -Tzu-ping Chung -Valentin Haenel -Victor Stinner -victorvpaulo -Vikram - Google -Viktor Szépe -Ville Skyttä -Vinay Sajip -Vincent Philippon -Vinicyus Macedo -Vipul Kumar -Vitaly Babiy -Vladimir Fokow -Vladimir Rutsky -W. Trevor King -Wil Tan -Wilfred Hughes -William Edwards -William ML Leslie -William T Olson -William Woodruff -Wilson Mo -wim glenn -Winson Luk -Wolfgang Maier -Wu Zhenyu -XAMES3 -Xavier Fernandez -Xianpeng Shen -xoviat -xtreak -YAMAMOTO Takashi -Yen Chi Hsuan -Yeray Diaz Diaz -Yoval P -Yu Jian -Yuan Jing Vincent Yan -Yusuke Hayashi -Zearin -Zhiping Deng -ziebam -Zvezdan Petkovic -Łukasz Langa -Роман Донченко -Семён Марьясин diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/LICENSE.txt b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/LICENSE.txt deleted file mode 100644 index 8e7b65e..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA deleted file mode 100644 index 3315c06..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA +++ /dev/null @@ -1,90 +0,0 @@ -Metadata-Version: 2.2 -Name: pip -Version: 25.0.1 -Summary: The PyPA recommended tool for installing Python packages. -Author-email: The pip developers -License: MIT -Project-URL: Homepage, https://pip.pypa.io/ -Project-URL: Documentation, https://pip.pypa.io -Project-URL: Source, https://github.com/pypa/pip -Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Build Tools -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=3.8 -Description-Content-Type: text/x-rst -License-File: LICENSE.txt -License-File: AUTHORS.txt - -pip - The Python Package Installer -================================== - -.. |pypi-version| image:: https://img.shields.io/pypi/v/pip.svg - :target: https://pypi.org/project/pip/ - :alt: PyPI - -.. |python-versions| image:: https://img.shields.io/pypi/pyversions/pip - :target: https://pypi.org/project/pip - :alt: PyPI - Python Version - -.. |docs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest - :target: https://pip.pypa.io/en/latest - :alt: Documentation - -|pypi-version| |python-versions| |docs-badge| - -pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. - -Please take a look at our documentation for how to install and use pip: - -* `Installation`_ -* `Usage`_ - -We release updates regularly, with a new version every 3 months. Find more details in our documentation: - -* `Release notes`_ -* `Release process`_ - -If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: - -* `Issue tracking`_ -* `Discourse channel`_ -* `User IRC`_ - -If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: - -* `GitHub page`_ -* `Development documentation`_ -* `Development IRC`_ - -Code of Conduct ---------------- - -Everyone interacting in the pip project's codebases, issue trackers, chat -rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. - -.. _package installer: https://packaging.python.org/guides/tool-recommendations/ -.. _Python Package Index: https://pypi.org -.. _Installation: https://pip.pypa.io/en/stable/installation/ -.. _Usage: https://pip.pypa.io/en/stable/ -.. _Release notes: https://pip.pypa.io/en/stable/news.html -.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ -.. _GitHub page: https://github.com/pypa/pip -.. _Development documentation: https://pip.pypa.io/en/latest/development -.. _Issue tracking: https://github.com/pypa/pip/issues -.. _Discourse channel: https://discuss.python.org/c/packaging -.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa -.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev -.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/RECORD b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/RECORD deleted file mode 100644 index 0e83206..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/RECORD +++ /dev/null @@ -1,854 +0,0 @@ -../../../bin/pip,sha256=FiSfQIvegMP3TiPL_wIZAlLmFdahf25xttm_2eQt8Ho,263 -../../../bin/pip3,sha256=FiSfQIvegMP3TiPL_wIZAlLmFdahf25xttm_2eQt8Ho,263 -../../../bin/pip3.12,sha256=FiSfQIvegMP3TiPL_wIZAlLmFdahf25xttm_2eQt8Ho,263 -pip-25.0.1.dist-info/AUTHORS.txt,sha256=HqzpBVLfT1lBthqQfiDlVeFkg65hJ7ZQvvWhoq-BAsA,11018 -pip-25.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pip-25.0.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 -pip-25.0.1.dist-info/METADATA,sha256=T6cxjPMPl523zsRcEsu8K0-IoV8S7vv1mmKR0KA6-SY,3677 -pip-25.0.1.dist-info/RECORD,, -pip-25.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip-25.0.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 -pip-25.0.1.dist-info/entry_points.txt,sha256=eeIjuzfnfR2PrhbjnbzFU6MnSS70kZLxwaHHq6M-bD0,87 -pip-25.0.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pip/__init__.py,sha256=aKiv_sTe7UbE7qmtCinJutFjqN0MndZQZ1fKLNwFFLE,357 -pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854 -pip/__pip-runner__.py,sha256=cPPWuJ6NK_k-GzfvlejLFgwzmYUROmpAR6QC3Q-vkXQ,1450 -pip/__pycache__/__init__.cpython-312.pyc,, -pip/__pycache__/__main__.cpython-312.pyc,, -pip/__pycache__/__pip-runner__.cpython-312.pyc,, -pip/_internal/__init__.py,sha256=MfcoOluDZ8QMCFYal04IqOJ9q6m2V7a0aOsnI-WOxUo,513 -pip/_internal/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/__pycache__/build_env.cpython-312.pyc,, -pip/_internal/__pycache__/cache.cpython-312.pyc,, -pip/_internal/__pycache__/configuration.cpython-312.pyc,, -pip/_internal/__pycache__/exceptions.cpython-312.pyc,, -pip/_internal/__pycache__/main.cpython-312.pyc,, -pip/_internal/__pycache__/pyproject.cpython-312.pyc,, -pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc,, -pip/_internal/__pycache__/wheel_builder.cpython-312.pyc,, -pip/_internal/build_env.py,sha256=Dv4UCClSg4uNaal_hL-trg5-zl3Is9CuIDxkChCkXF4,10700 -pip/_internal/cache.py,sha256=Jb698p5PNigRtpW5o26wQNkkUv4MnQ94mc471wL63A0,10369 -pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 -pip/_internal/cli/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc,, -pip/_internal/cli/__pycache__/base_command.cpython-312.pyc,, -pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc,, -pip/_internal/cli/__pycache__/command_context.cpython-312.pyc,, -pip/_internal/cli/__pycache__/index_command.cpython-312.pyc,, -pip/_internal/cli/__pycache__/main.cpython-312.pyc,, -pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc,, -pip/_internal/cli/__pycache__/parser.cpython-312.pyc,, -pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc,, -pip/_internal/cli/__pycache__/req_command.cpython-312.pyc,, -pip/_internal/cli/__pycache__/spinners.cpython-312.pyc,, -pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc,, -pip/_internal/cli/autocompletion.py,sha256=Lli3Mr6aDNu7ZkJJFFvwD2-hFxNI6Avz8OwMyS5TVrs,6865 -pip/_internal/cli/base_command.py,sha256=NZin6KMzW9NSYzKk4Tc8isb_TQYKR4CKd5j9mSm46PI,8625 -pip/_internal/cli/cmdoptions.py,sha256=V3BB22F4_v_RkHaZ5onWnszhbBtjYZvNhbn9M0NO0HI,30116 -pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774 -pip/_internal/cli/index_command.py,sha256=i_sgNlPmXC5iHUaY-dmmrHKKTgc5O4hWzisr5Al1rr0,5677 -pip/_internal/cli/main.py,sha256=BDZef-bWe9g9Jpr4OVs4dDf-845HJsKw835T7AqEnAc,2817 -pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338 -pip/_internal/cli/parser.py,sha256=VCMtduzECUV87KaHNu-xJ-wLNL82yT3x16V4XBxOAqI,10825 -pip/_internal/cli/progress_bars.py,sha256=9GcgusWtwfqou2zhAQp1XNbQHIDslqyyz9UwLzw7Jgc,2717 -pip/_internal/cli/req_command.py,sha256=DqeFhmUMs6o6Ev8qawAcOoYNdAZsfyKS0MZI5jsJYwQ,12250 -pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118 -pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 -pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882 -pip/_internal/commands/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/commands/__pycache__/cache.cpython-312.pyc,, -pip/_internal/commands/__pycache__/check.cpython-312.pyc,, -pip/_internal/commands/__pycache__/completion.cpython-312.pyc,, -pip/_internal/commands/__pycache__/configuration.cpython-312.pyc,, -pip/_internal/commands/__pycache__/debug.cpython-312.pyc,, -pip/_internal/commands/__pycache__/download.cpython-312.pyc,, -pip/_internal/commands/__pycache__/freeze.cpython-312.pyc,, -pip/_internal/commands/__pycache__/hash.cpython-312.pyc,, -pip/_internal/commands/__pycache__/help.cpython-312.pyc,, -pip/_internal/commands/__pycache__/index.cpython-312.pyc,, -pip/_internal/commands/__pycache__/inspect.cpython-312.pyc,, -pip/_internal/commands/__pycache__/install.cpython-312.pyc,, -pip/_internal/commands/__pycache__/list.cpython-312.pyc,, -pip/_internal/commands/__pycache__/search.cpython-312.pyc,, -pip/_internal/commands/__pycache__/show.cpython-312.pyc,, -pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc,, -pip/_internal/commands/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/commands/cache.py,sha256=IOezTicHjGE5sWdBx2nwPVgbjuJHM3s-BZEkpZLemuY,8107 -pip/_internal/commands/check.py,sha256=Hr_4eiMd9cgVDgEvjtIdw915NmL7ROIWW8enkr8slPQ,2268 -pip/_internal/commands/completion.py,sha256=HT4lD0bgsflHq2IDgYfiEdp7IGGtE7s6MgI3xn0VQEw,4287 -pip/_internal/commands/configuration.py,sha256=n98enwp6y0b5G6fiRQjaZo43FlJKYve_daMhN-4BRNc,9766 -pip/_internal/commands/debug.py,sha256=DNDRgE9YsKrbYzU0s3VKi8rHtKF4X13CJ_br_8PUXO0,6797 -pip/_internal/commands/download.py,sha256=0qB0nys6ZEPsog451lDsjL5Bx7Z97t-B80oFZKhpzKM,5273 -pip/_internal/commands/freeze.py,sha256=2Vt72BYTSm9rzue6d8dNzt8idxWK4Db6Hd-anq7GQ80,3203 -pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703 -pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132 -pip/_internal/commands/index.py,sha256=RAXxmJwFhVb5S1BYzb5ifX3sn9Na8v2CCVYwSMP8pao,4731 -pip/_internal/commands/inspect.py,sha256=PGrY9TRTRCM3y5Ml8Bdk8DEOXquWRfscr4DRo1LOTPc,3189 -pip/_internal/commands/install.py,sha256=r3yHQUxvxt7gD5j9n6zRDslAvtx9CT_whLuQJcktp6M,29390 -pip/_internal/commands/list.py,sha256=oiIzSjLP6__d7dIS3q0Xb5ywsaOThBWRqMyjjKzkPdM,12769 -pip/_internal/commands/search.py,sha256=fWkUQVx_gm8ebbFAlCgqtxKXT9rNahpJ-BI__3HNZpg,5626 -pip/_internal/commands/show.py,sha256=0YBhCga3PAd81vT3l7UWflktSpB5-aYqQcJxBVPazVM,7857 -pip/_internal/commands/uninstall.py,sha256=7pOR7enK76gimyxQbzxcG1OsyLXL3DvX939xmM8Fvtg,3892 -pip/_internal/commands/wheel.py,sha256=eJRhr_qoNNxWAkkdJCNiQM7CXd4E1_YyQhsqJnBPGGg,6414 -pip/_internal/configuration.py,sha256=-KOok6jh3hFzXMPQFPJ1_EFjBpAsge-RSreQuLHLmzo,14005 -pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 -pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/distributions/__pycache__/base.cpython-312.pyc,, -pip/_internal/distributions/__pycache__/installed.cpython-312.pyc,, -pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc,, -pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/distributions/base.py,sha256=QeB9qvKXDIjLdPBDE5fMgpfGqMMCr-govnuoQnGuiF8,1783 -pip/_internal/distributions/installed.py,sha256=QinHFbWAQ8oE0pbD8MFZWkwlnfU1QYTccA1vnhrlYOU,842 -pip/_internal/distributions/sdist.py,sha256=PlcP4a6-R6c98XnOM-b6Lkb3rsvh9iG4ok8shaanrzs,6751 -pip/_internal/distributions/wheel.py,sha256=THBYfnv7VVt8mYhMYUtH13S1E7FDwtDyDfmUcl8ai0E,1317 -pip/_internal/exceptions.py,sha256=2_byISIv3kSnI_9T-Esfxrt0LnTRgcUHyxu0twsHjQY,26481 -pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30 -pip/_internal/index/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/index/__pycache__/collector.cpython-312.pyc,, -pip/_internal/index/__pycache__/package_finder.cpython-312.pyc,, -pip/_internal/index/__pycache__/sources.cpython-312.pyc,, -pip/_internal/index/collector.py,sha256=RdPO0JLAlmyBWPAWYHPyRoGjz3GNAeTngCNkbGey_mE,16265 -pip/_internal/index/package_finder.py,sha256=mJHAljlHeHuclyuxtjvBZO6DtovKjsZjF_tCh_wux5E,38076 -pip/_internal/index/sources.py,sha256=lPBLK5Xiy8Q6IQMio26Wl7ocfZOKkgGklIBNyUJ23fI,8632 -pip/_internal/locations/__init__.py,sha256=UaAxeZ_f93FyouuFf4p7SXYF-4WstXuEvd3LbmPCAno,14925 -pip/_internal/locations/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc,, -pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc,, -pip/_internal/locations/__pycache__/base.cpython-312.pyc,, -pip/_internal/locations/_distutils.py,sha256=x6nyVLj7X11Y4khIdf-mFlxMl2FWadtVEgeb8upc_WI,6013 -pip/_internal/locations/_sysconfig.py,sha256=IGzds60qsFneRogC-oeBaY7bEh3lPt_v47kMJChQXsU,7724 -pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556 -pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340 -pip/_internal/metadata/__init__.py,sha256=CU8jK1TZso7jOLdr0sX9xDjrcs5iy8d7IRK-hvaIO5Y,4337 -pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/metadata/__pycache__/_json.cpython-312.pyc,, -pip/_internal/metadata/__pycache__/base.cpython-312.pyc,, -pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc,, -pip/_internal/metadata/_json.py,sha256=ezrIYazHCINM2QUk1eA9wEAMj3aeGWeDVgGalgUzKpc,2707 -pip/_internal/metadata/base.py,sha256=ft0K5XNgI4ETqZnRv2-CtvgYiMOMAeGMAzxT-f6VLJA,25298 -pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135 -pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc,, -pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc,, -pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc,, -pip/_internal/metadata/importlib/_compat.py,sha256=c6av8sP8BBjAZuFSJow1iWfygUXNM3xRTCn5nqw6B9M,2796 -pip/_internal/metadata/importlib/_dists.py,sha256=ftmYiyfUGUIjnVwt6W-Ijsimy5c28KgmXly5Q5IQ2P4,8279 -pip/_internal/metadata/importlib/_envs.py,sha256=UUB980XSrDWrMpQ1_G45i0r8Hqlg_tg3IPQ63mEqbNc,7431 -pip/_internal/metadata/pkg_resources.py,sha256=U07ETAINSGeSRBfWUG93E4tZZbaW_f7PGzEqZN0hulc,10542 -pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 -pip/_internal/models/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/models/__pycache__/candidate.cpython-312.pyc,, -pip/_internal/models/__pycache__/direct_url.cpython-312.pyc,, -pip/_internal/models/__pycache__/format_control.cpython-312.pyc,, -pip/_internal/models/__pycache__/index.cpython-312.pyc,, -pip/_internal/models/__pycache__/installation_report.cpython-312.pyc,, -pip/_internal/models/__pycache__/link.cpython-312.pyc,, -pip/_internal/models/__pycache__/scheme.cpython-312.pyc,, -pip/_internal/models/__pycache__/search_scope.cpython-312.pyc,, -pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc,, -pip/_internal/models/__pycache__/target_python.cpython-312.pyc,, -pip/_internal/models/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/models/candidate.py,sha256=zzgFRuw_kWPjKpGw7LC0ZUMD2CQ2EberUIYs8izjdCA,753 -pip/_internal/models/direct_url.py,sha256=uBtY2HHd3TO9cKQJWh0ThvE5FRr-MWRYChRU4IG9HZE,6578 -pip/_internal/models/format_control.py,sha256=wtsQqSK9HaUiNxQEuB-C62eVimw6G4_VQFxV9-_KDBE,2486 -pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 -pip/_internal/models/installation_report.py,sha256=zRVZoaz-2vsrezj_H3hLOhMZCK9c7TbzWgC-jOalD00,2818 -pip/_internal/models/link.py,sha256=GQ8hq7x-FDFPv25Nbn2veIM-MlBrGZDGLd7aZeF4Xrg,21448 -pip/_internal/models/scheme.py,sha256=PakmHJM3e8OOWSZFtfz1Az7f1meONJnkGuQxFlt3wBE,575 -pip/_internal/models/search_scope.py,sha256=67NEnsYY84784S-MM7ekQuo9KXLH-7MzFntXjapvAo0,4531 -pip/_internal/models/selection_prefs.py,sha256=qaFfDs3ciqoXPg6xx45N1jPLqccLJw4N0s4P0PyHTQ8,2015 -pip/_internal/models/target_python.py,sha256=2XaH2rZ5ZF-K5wcJbEMGEl7SqrTToDDNkrtQ2v_v_-Q,4271 -pip/_internal/models/wheel.py,sha256=G7dND_s4ebPkEL7RJ1qCY0QhUUWIIK6AnjWgRATF5no,4539 -pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 -pip/_internal/network/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/network/__pycache__/auth.cpython-312.pyc,, -pip/_internal/network/__pycache__/cache.cpython-312.pyc,, -pip/_internal/network/__pycache__/download.cpython-312.pyc,, -pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc,, -pip/_internal/network/__pycache__/session.cpython-312.pyc,, -pip/_internal/network/__pycache__/utils.cpython-312.pyc,, -pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc,, -pip/_internal/network/auth.py,sha256=D4gASjUrqoDFlSt6gQ767KAAjv6PUyJU0puDlhXNVRE,20809 -pip/_internal/network/cache.py,sha256=0yGMA3Eet59xBSLtbPAenvI53dl29oUOeqZ2c0QL2Ss,4614 -pip/_internal/network/download.py,sha256=FLOP29dPYECBiAi7eEjvAbNkyzaKNqbyjOT2m8HPW8U,6048 -pip/_internal/network/lazy_wheel.py,sha256=PBdoMoNQQIA84Fhgne38jWF52W4x_KtsHjxgv4dkRKA,7622 -pip/_internal/network/session.py,sha256=msM4es16LmmNEYNkrYyg8fTc7gAHbKFltawfKP27LOI,18771 -pip/_internal/network/utils.py,sha256=Inaxel-NxBu4PQWkjyErdnfewsFCcgHph7dzR1-FboY,4088 -pip/_internal/network/xmlrpc.py,sha256=sAxzOacJ-N1NXGPvap9jC3zuYWSnnv3GXtgR2-E2APA,1838 -pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/operations/__pycache__/check.cpython-312.pyc,, -pip/_internal/operations/__pycache__/freeze.cpython-312.pyc,, -pip/_internal/operations/__pycache__/prepare.cpython-312.pyc,, -pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc,, -pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc,, -pip/_internal/operations/build/build_tracker.py,sha256=-ARW_TcjHCOX7D2NUOGntB4Fgc6b4aolsXkAK6BWL7w,4774 -pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422 -pip/_internal/operations/build/metadata_editable.py,sha256=xlAwcP9q_8_fmv_3I39w9EZ7SQV9hnJZr9VuTsq2Y68,1510 -pip/_internal/operations/build/metadata_legacy.py,sha256=8i6i1QZX9m_lKPStEFsHKM0MT4a-CD408JOw99daLmo,2190 -pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075 -pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417 -pip/_internal/operations/build/wheel_legacy.py,sha256=K-6kNhmj-1xDF45ny1yheMerF0ui4EoQCLzEoHh6-tc,3045 -pip/_internal/operations/check.py,sha256=L24vRL8VWbyywdoeAhM89WCd8zLTnjIbULlKelUgIec,5912 -pip/_internal/operations/freeze.py,sha256=1_M79jAQKnCxWr-KCCmHuVXOVFGaUJHmoWLfFzgh7K4,9843 -pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51 -pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc,, -pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/operations/install/editable_legacy.py,sha256=PoEsNEPGbIZ2yQphPsmYTKLOCMs4gv5OcCdzW124NcA,1283 -pip/_internal/operations/install/wheel.py,sha256=X5Iz9yUg5LlK5VNQ9g2ikc6dcRu8EPi_SUi5iuEDRgo,27615 -pip/_internal/operations/prepare.py,sha256=joWJwPkuqGscQgVNImLK71e9hRapwKvRCM8HclysmvU,28118 -pip/_internal/pyproject.py,sha256=GLJ6rWRS5_2noKdajohoLyDty57Z7QXhcUAYghmTnWc,7286 -pip/_internal/req/__init__.py,sha256=HxBFtZy_BbCclLgr26waMtpzYdO5T3vxePvpGAXSt5s,2653 -pip/_internal/req/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/req/__pycache__/constructors.cpython-312.pyc,, -pip/_internal/req/__pycache__/req_file.cpython-312.pyc,, -pip/_internal/req/__pycache__/req_install.cpython-312.pyc,, -pip/_internal/req/__pycache__/req_set.cpython-312.pyc,, -pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc,, -pip/_internal/req/constructors.py,sha256=v1qzCN1mIldwx-nCrPc8JO4lxkm3Fv8M5RWvt8LISjc,18430 -pip/_internal/req/req_file.py,sha256=eys82McgaICOGic2UZRHjD720piKJPwmeSYdXlWwl6w,20234 -pip/_internal/req/req_install.py,sha256=BMptxHYg2uG_b-7HFEULPb3nuw0FMAbuea8zTq2rE7w,35786 -pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858 -pip/_internal/req/req_uninstall.py,sha256=qzDIxJo-OETWqGais7tSMCDcWbATYABT-Tid3ityF0s,23853 -pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/resolution/__pycache__/base.cpython-312.pyc,, -pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583 -pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc,, -pip/_internal/resolution/legacy/resolver.py,sha256=3HZiJBRd1FTN6jQpI4qRO8-TbLYeIbUTS6PFvXnXs2w,24068 -pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc,, -pip/_internal/resolution/resolvelib/base.py,sha256=DCf669FsqyQY5uqXeePDHQY1e4QO-pBzWH8O0s9-K94,5023 -pip/_internal/resolution/resolvelib/candidates.py,sha256=5UZ1upNnmqsP-nmEZaDYxaBgCoejw_e2WVGmmAvBxXc,20001 -pip/_internal/resolution/resolvelib/factory.py,sha256=MJOLSZJY8_28PPdcutoQ6gjJ_1eBDt6Z1edtfTJyR4E,32659 -pip/_internal/resolution/resolvelib/found_candidates.py,sha256=9hrTyQqFvl9I7Tji79F1AxHv39Qh1rkJ_7deSHSMfQc,6383 -pip/_internal/resolution/resolvelib/provider.py,sha256=bcsFnYvlmtB80cwVdW1fIwgol8ZNr1f1VHyRTkz47SM,9935 -pip/_internal/resolution/resolvelib/reporter.py,sha256=00JtoXEkTlw0-rl_sl54d71avwOsJHt9GGHcrj5Sza0,3168 -pip/_internal/resolution/resolvelib/requirements.py,sha256=7JG4Z72e5Yk4vU0S5ulGvbqTy4FMQGYhY5zQhX9zTtY,8065 -pip/_internal/resolution/resolvelib/resolver.py,sha256=nLJOsVMEVi2gQUVJoUFKMZAeu2f7GRMjGMvNSWyz0Bc,12592 -pip/_internal/self_outdated_check.py,sha256=1PFtttvLAeyCVR3tPoBq2sOlPD0IJ-KSqU6bc1HUk9c,8318 -pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/utils/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc,, -pip/_internal/utils/__pycache__/_log.cpython-312.pyc,, -pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc,, -pip/_internal/utils/__pycache__/compat.cpython-312.pyc,, -pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc,, -pip/_internal/utils/__pycache__/datetime.cpython-312.pyc,, -pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc,, -pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc,, -pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc,, -pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc,, -pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc,, -pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc,, -pip/_internal/utils/__pycache__/glibc.cpython-312.pyc,, -pip/_internal/utils/__pycache__/hashes.cpython-312.pyc,, -pip/_internal/utils/__pycache__/logging.cpython-312.pyc,, -pip/_internal/utils/__pycache__/misc.cpython-312.pyc,, -pip/_internal/utils/__pycache__/packaging.cpython-312.pyc,, -pip/_internal/utils/__pycache__/retry.cpython-312.pyc,, -pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc,, -pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc,, -pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc,, -pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc,, -pip/_internal/utils/__pycache__/urls.cpython-312.pyc,, -pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc,, -pip/_internal/utils/__pycache__/wheel.cpython-312.pyc,, -pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350 -pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 -pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665 -pip/_internal/utils/compat.py,sha256=ckkFveBiYQjRWjkNsajt_oWPS57tJvE8XxoC4OIYgCY,2399 -pip/_internal/utils/compatibility_tags.py,sha256=OWq5axHpW-MEEPztGdvgADrgJPAcV9a88Rxm4Z8VBs8,6272 -pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242 -pip/_internal/utils/deprecation.py,sha256=k7Qg_UBAaaTdyq82YVARA6D7RmcGTXGv7fnfcgigj4Q,3707 -pip/_internal/utils/direct_url_helpers.py,sha256=r2MRtkVDACv9AGqYODBUC9CjwgtsUU1s68hmgfCJMtA,3196 -pip/_internal/utils/egg_link.py,sha256=0FePZoUYKv4RGQ2t6x7w5Z427wbA_Uo3WZnAkrgsuqo,2463 -pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064 -pip/_internal/utils/filesystem.py,sha256=ajvA-q4ocliW9kPp8Yquh-4vssXbu-UKbo5FV9V4X64,4950 -pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716 -pip/_internal/utils/glibc.py,sha256=vUkWq_1pJuzcYNcGKLlQmABoUiisK8noYY1yc8Wq4w4,3734 -pip/_internal/utils/hashes.py,sha256=XGGLL0AG8-RhWnyz87xF6MFZ--BKadHU35D47eApCKI,4972 -pip/_internal/utils/logging.py,sha256=ONfbrhaD248akkosK79if97n20EABxwjOxp5dE5RCRY,11845 -pip/_internal/utils/misc.py,sha256=DWnYxBUItjRp7hhxEg4ih6P6YpKrykM86dbi_EcU8SQ,23450 -pip/_internal/utils/packaging.py,sha256=cm-X_0HVHV_jRwUVZh6AuEWqSitzf8EpaJ7Uv2UGu6A,2142 -pip/_internal/utils/retry.py,sha256=mhFbykXjhTnZfgzeuy-vl9c8nECnYn_CMtwNJX2tYzQ,1392 -pip/_internal/utils/setuptools_build.py,sha256=ouXpud-jeS8xPyTPsXJ-m34NPvK5os45otAzdSV_IJE,4435 -pip/_internal/utils/subprocess.py,sha256=EsvqSRiSMHF98T8Txmu6NLU3U--MpTTQjtNgKP0P--M,8988 -pip/_internal/utils/temp_dir.py,sha256=5qOXe8M4JeY6vaFQM867d5zkp1bSwMZ-KT5jymmP0Zg,9310 -pip/_internal/utils/unpacking.py,sha256=_gVdyzTRDMYktpnYljn4OoxrZTtMCf4xknSm4rK0WaA,11967 -pip/_internal/utils/urls.py,sha256=qceSOZb5lbNDrHNsv7_S4L4Ytszja5NwPKUMnZHbYnM,1599 -pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456 -pip/_internal/utils/wheel.py,sha256=b442jkydFHjXzDy6cMR7MpzWBJ1Q82hR5F33cmcHV3g,4494 -pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 -pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc,, -pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc,, -pip/_internal/vcs/__pycache__/git.cpython-312.pyc,, -pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc,, -pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc,, -pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc,, -pip/_internal/vcs/bazaar.py,sha256=EKStcQaKpNu0NK4p5Q10Oc4xb3DUxFw024XrJy40bFQ,3528 -pip/_internal/vcs/git.py,sha256=3tpc9LQA_J4IVW5r5NvWaaSeDzcmJOrSFZN0J8vIKfU,18177 -pip/_internal/vcs/mercurial.py,sha256=oULOhzJ2Uie-06d1omkL-_Gc6meGaUkyogvqG9ZCyPs,5249 -pip/_internal/vcs/subversion.py,sha256=ddTugHBqHzV3ebKlU5QXHPN4gUqlyXbOx8q8NgXKvs8,11735 -pip/_internal/vcs/versioncontrol.py,sha256=cvf_-hnTAjQLXJ3d17FMNhQfcO1AcKWUF10tfrYyP-c,22440 -pip/_internal/wheel_builder.py,sha256=DL3A8LKeRj_ACp11WS5wSgASgPFqeyAeXJKdXfmaWXU,11799 -pip/_vendor/__init__.py,sha256=JYuAXvClhInxIrA2FTp5p-uuWVL7WV6-vEpTs46-Qh4,4873 -pip/_vendor/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc,, -pip/_vendor/cachecontrol/__init__.py,sha256=LMC5CBe94ZRL5xhlzwyPDmHXvBD0p7lT4R3Z73D6a_I,677 -pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc,, -pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc,, -pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737 -pip/_vendor/cachecontrol/adapter.py,sha256=febjY4LV87iiCIK3jcl8iH58iaSA7b9WkovsByIDK0Y,6348 -pip/_vendor/cachecontrol/cache.py,sha256=OXwv7Fn2AwnKNiahJHnjtvaKLndvVLv_-zO-ltlV9qI,1953 -pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303 -pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc,, -pip/_vendor/cachecontrol/caches/file_cache.py,sha256=b7oMgsRSqPmEsonVJw6uFEYUlFgD6GF8TyacOGG1x3M,5399 -pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386 -pip/_vendor/cachecontrol/controller.py,sha256=glbPj2iZlGqdBg8z09D2DtQOzoOGXnWvy7K2LEyBsEQ,18576 -pip/_vendor/cachecontrol/filewrapper.py,sha256=2ktXNPE0KqnyzF24aOsKCA58HQq1xeC6l2g6_zwjghc,4291 -pip/_vendor/cachecontrol/heuristics.py,sha256=gqMXU8w0gQuEQiSdu3Yg-0vd9kW7nrWKbLca75rheGE,4881 -pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163 -pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417 -pip/_vendor/certifi/__init__.py,sha256=p_GYZrjUwPBUhpLlCZoGb0miKBKSqDAyZC5DvIuqbHQ,94 -pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 -pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc,, -pip/_vendor/certifi/__pycache__/core.cpython-312.pyc,, -pip/_vendor/certifi/cacert.pem,sha256=lO3rZukXdPyuk6BWUJFOKQliWaXH6HGh9l1GGrUgG0c,299427 -pip/_vendor/certifi/core.py,sha256=2SRT5rIcQChFDbe37BQa-kULxAgJ8qN6l1jfqTp4HIs,4486 -pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/distlib/__init__.py,sha256=dcwgYGYGQqAEawBXPDtIx80DO_3cOmFv8HTc8JMzknQ,625 -pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/database.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/index.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/util.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/version.cpython-312.pyc,, -pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc,, -pip/_vendor/distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467 -pip/_vendor/distlib/database.py,sha256=mHy_LxiXIsIVRb-T0-idBrVLw3Ffij5teHCpbjmJ9YU,51160 -pip/_vendor/distlib/index.py,sha256=lTbw268rRhj8dw1sib3VZ_0EhSGgoJO3FKJzSFMOaeA,20797 -pip/_vendor/distlib/locators.py,sha256=oBeAZpFuPQSY09MgNnLfQGGAXXvVO96BFpZyKMuK4tM,51026 -pip/_vendor/distlib/manifest.py,sha256=3qfmAmVwxRqU1o23AlfXrQGZzh6g_GGzTAP_Hb9C5zQ,14168 -pip/_vendor/distlib/markers.py,sha256=X6sDvkFGcYS8gUW8hfsWuKEKAqhQZAJ7iXOMLxRYjYk,5164 -pip/_vendor/distlib/metadata.py,sha256=zil3sg2EUfLXVigljY2d_03IJt-JSs7nX-73fECMX2s,38724 -pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 -pip/_vendor/distlib/scripts.py,sha256=BJliaDAZaVB7WAkwokgC3HXwLD2iWiHaVI50H7C6eG8,18608 -pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792 -pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784 -pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032 -pip/_vendor/distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682 -pip/_vendor/distlib/version.py,sha256=s5VIs8wBn0fxzGxWM_aA2ZZyx525HcZbMvcTlTyZ3Rg,23727 -pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648 -pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448 -pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888 -pip/_vendor/distlib/wheel.py,sha256=DFIVguEQHCdxnSdAO0dfFsgMcvVZitg7bCOuLwZ7A_s,43979 -pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981 -pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64 -pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc,, -pip/_vendor/distro/__pycache__/distro.cpython-312.pyc,, -pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430 -pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868 -pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/codec.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/compat.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/core.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc,, -pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc,, -pip/_vendor/idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422 -pip/_vendor/idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316 -pip/_vendor/idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239 -pip/_vendor/idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306 -pip/_vendor/idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898 -pip/_vendor/idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21 -pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289 -pip/_vendor/msgpack/__init__.py,sha256=reRaiOtEzSjPnr7TpxjgIvbfln5pV66FhricAs2eC-g,1109 -pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc,, -pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc,, -pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc,, -pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 -pip/_vendor/msgpack/ext.py,sha256=kteJv03n9tYzd5oo3xYopVTo4vRaAxonBQQJhXohZZo,5726 -pip/_vendor/msgpack/fallback.py,sha256=0g1Pzp0vtmBEmJ5w9F3s_-JMVURP8RS4G1cc5TRaAsI,32390 -pip/_vendor/packaging/__init__.py,sha256=dk4Ta_vmdVJxYHDcfyhvQNw8V3PgSBomKNXqg-D2JDY,494 -pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc,, -pip/_vendor/packaging/__pycache__/version.cpython-312.pyc,, -pip/_vendor/packaging/_elffile.py,sha256=cflAQAkE25tzhYmq_aCi72QfbT_tn891tPzfpbeHOwE,3306 -pip/_vendor/packaging/_manylinux.py,sha256=vl5OCoz4kx80H5rwXKeXWjl9WNISGmr4ZgTpTP9lU9c,9612 -pip/_vendor/packaging/_musllinux.py,sha256=p9ZqNYiOItGee8KcZFeHF_YcdhVwGHdK6r-8lgixvGQ,2694 -pip/_vendor/packaging/_parser.py,sha256=s_TvTvDNK0NrM2QB3VKThdWFM4Nc0P6JnkObkl3MjpM,10236 -pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 -pip/_vendor/packaging/_tokenizer.py,sha256=J6v5H7Jzvb-g81xp_2QACKwO7LxHQA6ikryMU7zXwN8,5273 -pip/_vendor/packaging/licenses/__init__.py,sha256=A116-FU49_Dz4162M4y1uAiZN4Rgdc83FxNd8EjlfqI,5727 -pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc,, -pip/_vendor/packaging/licenses/_spdx.py,sha256=oAm1ztPFwlsmCKe7lAAsv_OIOfS1cWDu9bNBkeu-2ns,48398 -pip/_vendor/packaging/markers.py,sha256=c89TNzB7ZdGYhkovm6PYmqGyHxXlYVaLW591PHUNKD8,10561 -pip/_vendor/packaging/metadata.py,sha256=YJibM7GYe4re8-0a3OlXmGS-XDgTEoO4tlBt2q25Bng,34762 -pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/packaging/requirements.py,sha256=gYyRSAdbrIyKDY66ugIDUQjRMvxkH2ALioTmX3tnL6o,2947 -pip/_vendor/packaging/specifiers.py,sha256=hGU6kuCd77bL-msIL6yLCp6MNT75RSMUKZDuju26c8U,40098 -pip/_vendor/packaging/tags.py,sha256=CFqrJzAzc2XNGexerH__T-Y5Iwq7WbsYXsiLERLWxY0,21014 -pip/_vendor/packaging/utils.py,sha256=0F3Hh9OFuRgrhTgGZUl5K22Fv1YP2tZl1z_2gO6kJiA,5050 -pip/_vendor/packaging/version.py,sha256=oiHqzTUv_p12hpjgsLDVcaF5hT7pDaSOViUNMD4GTW0,16688 -pip/_vendor/pkg_resources/__init__.py,sha256=jrhDRbOubP74QuPXxd7U7Po42PH2l-LZ2XfcO7llpZ4,124463 -pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/platformdirs/__init__.py,sha256=JueR2cRLkxY7iwik-qNWJCwKOrAlBgVgcZ_IHQzqGLE,22344 -pip/_vendor/platformdirs/__main__.py,sha256=jBJ8zb7Mpx5ebcqF83xrpO94MaeCpNGHVf9cvDN2JLg,1505 -pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc,, -pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc,, -pip/_vendor/platformdirs/android.py,sha256=kV5oL3V3DZ6WZKu9yFiQupv18yp_jlSV2ChH1TmPcds,9007 -pip/_vendor/platformdirs/api.py,sha256=2dfUDNbEXeDhDKarqtR5NY7oUikUZ4RZhs3ozstmhBQ,9246 -pip/_vendor/platformdirs/macos.py,sha256=UlbyFZ8Rzu3xndCqQEHrfsYTeHwYdFap1Ioz-yxveT4,6154 -pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/platformdirs/unix.py,sha256=uRPJWRyQEtv7yOSvU94rUmsblo5XKDLA1SzFg55kbK0,10393 -pip/_vendor/platformdirs/version.py,sha256=oH4KgTfK4AklbTYVcV_yynvJ9JLI3pyvDVay0hRsLCs,411 -pip/_vendor/platformdirs/windows.py,sha256=IFpiohUBwxPtCzlyKwNtxyW4Jk8haa6W8o59mfrDXVo,10125 -pip/_vendor/pygments/__init__.py,sha256=7N1oiaWulw_nCsTY4EEixYLz15pWY5u4uPAFFi-ielU,2983 -pip/_vendor/pygments/__main__.py,sha256=isIhBxLg65nLlXukG4VkMuPfNdd7gFzTZ_R_z3Q8diY,353 -pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/console.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/style.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/token.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc,, -pip/_vendor/pygments/__pycache__/util.cpython-312.pyc,, -pip/_vendor/pygments/cmdline.py,sha256=LIVzmAunlk9sRJJp54O4KRy9GDIN4Wu13v9p9QzfGPM,23656 -pip/_vendor/pygments/console.py,sha256=yhP9UsLAVmWKVQf2446JJewkA7AiXeeTf4Ieg3Oi2fU,1718 -pip/_vendor/pygments/filter.py,sha256=_ADNPCskD8_GmodHi6_LoVgPU3Zh336aBCT5cOeTMs0,1910 -pip/_vendor/pygments/filters/__init__.py,sha256=RdedK2KWKXlKwR7cvkfr3NUj9YiZQgMgilRMFUg2jPA,40392 -pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pygments/formatter.py,sha256=jDWBTndlBH2Z5IYZFVDnP0qn1CaTQjTWt7iAGtCnJEg,4390 -pip/_vendor/pygments/formatters/__init__.py,sha256=8No-NUs8rBTSSBJIv4hSEQt2M0cFB4hwAT0snVc2QGE,5385 -pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc,, -pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc,, -pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176 -pip/_vendor/pygments/formatters/bbcode.py,sha256=3JQLI45tcrQ_kRUMjuab6C7Hb0XUsbVWqqbSn9cMjkI,3320 -pip/_vendor/pygments/formatters/groff.py,sha256=M39k0PaSSZRnxWjqBSVPkF0mu1-Vr7bm6RsFvs-CNN4,5106 -pip/_vendor/pygments/formatters/html.py,sha256=SE2jc3YCqbMS3rZW9EAmDlAUhdVxJ52gA4dileEvCGU,35669 -pip/_vendor/pygments/formatters/img.py,sha256=MwA4xWPLOwh6j7Yc6oHzjuqSPt0M1fh5r-5BTIIUfsU,23287 -pip/_vendor/pygments/formatters/irc.py,sha256=dp1Z0l_ObJ5NFh9MhqLGg5ptG5hgJqedT2Vkutt9v0M,4981 -pip/_vendor/pygments/formatters/latex.py,sha256=XMmhOCqUKDBQtG5mGJNAFYxApqaC5puo5cMmPfK3944,19306 -pip/_vendor/pygments/formatters/other.py,sha256=56PMJOliin-rAUdnRM0i1wsV1GdUPd_dvQq0_UPfF9c,5034 -pip/_vendor/pygments/formatters/pangomarkup.py,sha256=y16U00aVYYEFpeCfGXlYBSMacG425CbfoG8oKbKegIg,2218 -pip/_vendor/pygments/formatters/rtf.py,sha256=ZT90dmcKyJboIB0mArhL7IhE467GXRN0G7QAUgG03To,11957 -pip/_vendor/pygments/formatters/svg.py,sha256=KKsiophPupHuxm0So-MsbQEWOT54IAiSF7hZPmxtKXE,7174 -pip/_vendor/pygments/formatters/terminal.py,sha256=AojNG4MlKq2L6IsC_VnXHu4AbHCBn9Otog6u45XvxeI,4674 -pip/_vendor/pygments/formatters/terminal256.py,sha256=kGkNUVo3FpwjytIDS0if79EuUoroAprcWt3igrcIqT0,11753 -pip/_vendor/pygments/lexer.py,sha256=TYHDt___gNW4axTl2zvPZff-VQi8fPaIh5OKRcVSjUM,35349 -pip/_vendor/pygments/lexers/__init__.py,sha256=pIlxyQJuu_syh9lE080cq8ceVbEVcKp0osAFU5fawJU,12115 -pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc,, -pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc,, -pip/_vendor/pygments/lexers/_mapping.py,sha256=61-h3zr103m01OS5BUq_AfUiL9YI06Ves9ipQ7k4vr4,76097 -pip/_vendor/pygments/lexers/python.py,sha256=2J_YJrPTr_A6fJY_qKiKv0GpgPwHMrlMSeo59qN3fe4,53687 -pip/_vendor/pygments/modeline.py,sha256=gtRYZBS-CKOCDXHhGZqApboHBaZwGH8gznN3O6nuxj4,1005 -pip/_vendor/pygments/plugin.py,sha256=ioeJ3QeoJ-UQhZpY9JL7vbxsTVuwwM7BCu-Jb8nN0AU,1891 -pip/_vendor/pygments/regexopt.py,sha256=Hky4EB13rIXEHQUNkwmCrYqtIlnXDehNR3MztafZ43w,3072 -pip/_vendor/pygments/scanner.py,sha256=NDy3ofK_fHRFK4hIDvxpamG871aewqcsIb6sgTi7Fhk,3092 -pip/_vendor/pygments/sphinxext.py,sha256=iOptJBcqOGPwMEJ2p70PvwpZPIGdvdZ8dxvq6kzxDgA,7981 -pip/_vendor/pygments/style.py,sha256=rSCZWFpg1_DwFMXDU0nEVmAcBHpuQGf9RxvOPPQvKLQ,6420 -pip/_vendor/pygments/styles/__init__.py,sha256=qUk6_1z5KmT8EdJFZYgESmG6P_HJF_2vVrDD7HSCGYY,2042 -pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-312.pyc,, -pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312 -pip/_vendor/pygments/token.py,sha256=qZwT7LSPy5YBY3JgDjut642CCy7JdQzAfmqD9NmT5j0,6226 -pip/_vendor/pygments/unistring.py,sha256=p5c1i-HhoIhWemy9CUsaN9o39oomYHNxXll0Xfw6tEA,63208 -pip/_vendor/pygments/util.py,sha256=2tj2nS1X9_OpcuSjf8dOET2bDVZhs8cEKd_uT6-Fgg8,10031 -pip/_vendor/pyproject_hooks/__init__.py,sha256=cPB_a9LXz5xvsRbX1o2qyAdjLatZJdQ_Lc5McNX-X7Y,691 -pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc,, -pip/_vendor/pyproject_hooks/_impl.py,sha256=jY-raxnmyRyB57ruAitrJRUzEexuAhGTpgMygqx67Z4,14936 -pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=MJNPpfIxcO-FghxpBbxkG1rFiQf6HOUbV4U5mq0HFns,557 -pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc,, -pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=qcXMhmx__MIJq10gGHW3mA4Tl8dy8YzHMccwnNoKlw0,12216 -pip/_vendor/pyproject_hooks/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/requests/__init__.py,sha256=HlB_HzhrzGtfD_aaYUwUh1zWXLZ75_YCLyit75d0Vz8,5057 -pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/api.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/auth.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/certs.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/compat.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/help.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/models.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/packages.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/structures.cpython-312.pyc,, -pip/_vendor/requests/__pycache__/utils.cpython-312.pyc,, -pip/_vendor/requests/__version__.py,sha256=FVfglgZmNQnmYPXpOohDU58F5EUb_-VnSTaAesS187g,435 -pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495 -pip/_vendor/requests/adapters.py,sha256=J7VeVxKBvawbtlX2DERVo05J9BXTcWYLMHNd1Baa-bk,27607 -pip/_vendor/requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449 -pip/_vendor/requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186 -pip/_vendor/requests/certs.py,sha256=kHDlkK_beuHXeMPc5jta2wgl8gdKeUWt5f2nTDVrvt8,441 -pip/_vendor/requests/compat.py,sha256=Mo9f9xZpefod8Zm-n9_StJcVTmwSukXR2p3IQyyVXvU,1485 -pip/_vendor/requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590 -pip/_vendor/requests/exceptions.py,sha256=D1wqzYWne1mS2rU43tP9CeN1G7QAy7eqL9o1god6Ejw,4272 -pip/_vendor/requests/help.py,sha256=hRKaf9u0G7fdwrqMHtF3oG16RKktRf6KiwtSq2Fo1_0,3813 -pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 -pip/_vendor/requests/models.py,sha256=x4K4CmH-lC0l2Kb-iPfMN4dRXxHEcbOaEWBL_i09AwI,35483 -pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057 -pip/_vendor/requests/sessions.py,sha256=ykTI8UWGSltOfH07HKollH7kTBGw4WhiBVaQGmckTw4,30495 -pip/_vendor/requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322 -pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 -pip/_vendor/requests/utils.py,sha256=L79vnFbzJ3SFLKtJwpoWe41Tozi3RlZv94pY1TFIyow,33631 -pip/_vendor/resolvelib/__init__.py,sha256=h509TdEcpb5-44JonaU3ex2TM15GVBLjM9CNCPwnTTs,537 -pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc,, -pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc,, -pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc,, -pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc,, -pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc,, -pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156 -pip/_vendor/resolvelib/providers.py,sha256=fuuvVrCetu5gsxPB43ERyjfO8aReS3rFQHpDgiItbs4,5871 -pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/resolvelib/reporters.py,sha256=TSbRmWzTc26w0ggsV1bxVpeWDB8QNIre6twYl7GIZBE,1601 -pip/_vendor/resolvelib/resolvers.py,sha256=G8rsLZSq64g5VmIq-lB7UcIJ1gjAxIQJmTF4REZleQ0,20511 -pip/_vendor/resolvelib/structs.py,sha256=0_1_XO8z_CLhegP3Vpf9VJ3zJcfLm0NOHRM-i0Ykz3o,4963 -pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090 -pip/_vendor/rich/__main__.py,sha256=eO7Cq8JnrgG8zVoeImiAs92q3hXNMIfp0w5lMsO7Q2Y,8477 -pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/abc.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/align.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/bar.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/box.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/cells.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/color.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/columns.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/console.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/containers.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/control.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/errors.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/json.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/layout.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/live.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/logging.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/markup.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/measure.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/padding.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/pager.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/palette.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/panel.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/progress.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/region.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/repr.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/rule.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/scope.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/screen.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/segment.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/status.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/style.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/styled.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/table.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/text.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/theme.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/themes.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc,, -pip/_vendor/rich/__pycache__/tree.cpython-312.pyc,, -pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209 -pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 -pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 -pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128 -pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 -pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799 -pip/_vendor/rich/_inspect.py,sha256=QM05lEFnFoTaFqpnbx-zBEI6k8oIKrD3cvjEOQNhKig,9655 -pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 -pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 -pip/_vendor/rich/_null_file.py,sha256=ADGKp1yt-k70FMKV6tnqCqecB-rSJzp-WQsD7LPL-kg,1394 -pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 -pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 -pip/_vendor/rich/_ratio.py,sha256=Zt58apszI6hAAcXPpgdWKpu3c31UBWebOeR4mbyptvU,5471 -pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919 -pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 -pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 -pip/_vendor/rich/_win32_console.py,sha256=BSaDRIMwBLITn_m0mTRLPqME5q-quGdSMuYMpYeYJwc,22755 -pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925 -pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783 -pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404 -pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 -pip/_vendor/rich/align.py,sha256=Rh-3adnDaN1Ao07EjR2PhgE62PGLPgO8SMwJBku1urQ,10469 -pip/_vendor/rich/ansi.py,sha256=Avs1LHbSdcyOvDOdpELZUoULcBiYewY76eNBp6uFBhs,6921 -pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263 -pip/_vendor/rich/box.py,sha256=nr5fYIUghB_iUCEq6y0Z3LlCT8gFPDrzN9u2kn7tJl4,10831 -pip/_vendor/rich/cells.py,sha256=KrQkj5-LghCCpJLSNQIyAZjndc4bnEqOEmi5YuZ9UCY,5130 -pip/_vendor/rich/color.py,sha256=3HSULVDj7qQkXUdFWv78JOiSZzfy5y1nkcYhna296V0,18211 -pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 -pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 -pip/_vendor/rich/console.py,sha256=nKjrEx_7xy8KGmDVT-BgNII0R5hm1cexhAHDwdwNVqg,100156 -pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 -pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502 -pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630 -pip/_vendor/rich/default_styles.py,sha256=dZxgaSD9VUy7SXQShO33aLYiAWspCr2sCQZFX_JK1j4,8159 -pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972 -pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501 -pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 -pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683 -pip/_vendor/rich/filesize.py,sha256=_iz9lIpRgvW7MNSeCZnLg-HwzbP4GETg543WqD8SFs0,2484 -pip/_vendor/rich/highlighter.py,sha256=G_sn-8DKjM1sEjLG_oc4ovkWmiUpWvj8bXi0yed2LnY,9586 -pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031 -pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252 -pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004 -pip/_vendor/rich/live.py,sha256=DhzAPEnjTxQuq9_0Y2xh2MUwQcP_aGPkenLfKETslwM,14270 -pip/_vendor/rich/live_render.py,sha256=zJtB471jGziBtEwxc54x12wEQtH4BuQr1SA8v9kU82w,3666 -pip/_vendor/rich/logging.py,sha256=ZgpKMMBY_BuMAI_BYzo-UtXak6t5oH9VK8m9Q2Lm0f4,12458 -pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451 -pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305 -pip/_vendor/rich/padding.py,sha256=KVEI3tOwo9sgK1YNSuH__M1_jUWmLZwRVV_KmOtVzyM,4908 -pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828 -pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 -pip/_vendor/rich/panel.py,sha256=fFRHcviXvWhk3V3zx5Zwmsb_RL9KJ3esD-sU0NYEVyw,11235 -pip/_vendor/rich/pretty.py,sha256=gy3S72u4FRg2ytoo7N1ZDWDIvB4unbzd5iUGdgm-8fc,36391 -pip/_vendor/rich/progress.py,sha256=MtmCjTk5zYU_XtRHxRHTAEHG6hF9PeF7EMWbEPleIC0,60357 -pip/_vendor/rich/progress_bar.py,sha256=mZTPpJUwcfcdgQCTTz3kyY-fc79ddLwtx6Ghhxfo064,8162 -pip/_vendor/rich/prompt.py,sha256=l0RhQU-0UVTV9e08xW1BbIj0Jq2IXyChX4lC0lFNzt4,12447 -pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391 -pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 -pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431 -pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602 -pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843 -pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 -pip/_vendor/rich/segment.py,sha256=otnKeKGEV-WRlQVosfJVeFDcDxAKHpvJ_hLzSu5lumM,24743 -pip/_vendor/rich/spinner.py,sha256=PT5qgXPG3ZpqRj7n3EZQ6NW56mx3ldZqZCU7gEMyZk4,4364 -pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424 -pip/_vendor/rich/style.py,sha256=aSoUNbVgfP1PAnduAqgbbl4AMQy668qs2S1FEwr3Oqs,27067 -pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 -pip/_vendor/rich/syntax.py,sha256=qqAnEUZ4K57Po81_5RBxnsuU4KRzSdvDPAhKw8ma_3E,35763 -pip/_vendor/rich/table.py,sha256=yXYUr0YsPpG466N50HCAw2bpb5ZUuuzdc-G66Zk-oTc,40103 -pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370 -pip/_vendor/rich/text.py,sha256=AO7JPCz6-gaN1thVLXMBntEmDPVYFgFNG1oM61_sanU,47552 -pip/_vendor/rich/theme.py,sha256=oNyhXhGagtDlbDye3tVu3esWOWk0vNkuxFw-_unlaK0,3771 -pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 -pip/_vendor/rich/traceback.py,sha256=z8UoN7NbTQKW6YDDUVwOh7F8snZf6gYnUWtOrKsLE1w,31797 -pip/_vendor/rich/tree.py,sha256=yWnQ6rAvRGJ3qZGqBrxS2SW2TKBTNrP0SdY8QxOFPuw,9451 -pip/_vendor/tomli/__init__.py,sha256=PhNw_eyLgdn7McJ6nrAN8yIm3dXC75vr1sVGVVwDSpA,314 -pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc,, -pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc,, -pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc,, -pip/_vendor/tomli/_parser.py,sha256=9w8LG0jB7fwmZZWB0vVXbeejDHcl4ANIJxB2scEnDlA,25591 -pip/_vendor/tomli/_re.py,sha256=sh4sBDRgO94KJZwNIrgdcyV_qQast50YvzOAUGpRDKA,3171 -pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 -pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 -pip/_vendor/truststore/__init__.py,sha256=WIDeyzWm7EVX44g354M25vpRXbeY1lsPH6EmUJUcq4o,1264 -pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc,, -pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc,, -pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc,, -pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc,, -pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc,, -pip/_vendor/truststore/_api.py,sha256=GeXRNTlxPZ3kif4kNoh6JY0oE4QRzTGcgXr6l_X_Gk0,10555 -pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503 -pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324 -pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130 -pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993 -pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/typing_extensions.py,sha256=78hFl0HpDY-ylHUVCnWdU5nTHxUP2-S-3wEZk6CQmLk,134499 -pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333 -pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc,, -pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc,, -pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372 -pip/_vendor/urllib3/_version.py,sha256=t9wGB6ooOTXXgiY66K1m6BZS1CJyXHAU8EoWDTe6Shk,64 -pip/_vendor/urllib3/connection.py,sha256=ttIA909BrbTUzwkqEe_TzZVh4JOOj7g61Ysei2mrwGg,20314 -pip/_vendor/urllib3/connectionpool.py,sha256=e2eiAwNbFNCKxj4bwDKNK-w7HIdSz3OmMxU_TIt-evQ,40408 -pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 -pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 -pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 -pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036 -pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528 -pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081 -pip/_vendor/urllib3/contrib/securetransport.py,sha256=Fef1IIUUFHqpevzXiDPbIGkDKchY2FVKeVeLGR1Qq3g,34446 -pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 -pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 -pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 -pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 -pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc,, -pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc,, -pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc,, -pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 -pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343 -pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665 -pip/_vendor/urllib3/poolmanager.py,sha256=aWyhXRtNO4JUnCSVVqKTKQd8EXTvUm1VN9pgs2bcONo,19990 -pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691 -pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641 -pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 -pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc,, -pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc,, -pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 -pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 -pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 -pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997 -pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 -pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050 -pip/_vendor/urllib3/util/ssl_.py,sha256=QDuuTxPSCj1rYtZ4xpD7Ux-r20TD50aHyqKyhQ7Bq4A,17460 -pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758 -pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 -pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168 -pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296 -pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403 -pip/_vendor/vendor.txt,sha256=EW-E3cE5XEAtVFzGInikArOMDxGP0DLUWzXpY4RZfFY,333 -pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/REQUESTED b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/WHEEL deleted file mode 100644 index 505164b..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.8.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/entry_points.txt b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/entry_points.txt deleted file mode 100644 index 25fcf7e..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -pip = pip._internal.cli.main:main -pip3 = pip._internal.cli.main:main diff --git a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/top_level.txt deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/pip-25.0.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/pip/__init__.py b/myenv/lib/python3.12/site-packages/pip/__init__.py deleted file mode 100644 index d628f93..0000000 --- a/myenv/lib/python3.12/site-packages/pip/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from typing import List, Optional - -__version__ = "25.0.1" - - -def main(args: Optional[List[str]] = None) -> int: - """This is an internal API only meant for use by pip's own console scripts. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/myenv/lib/python3.12/site-packages/pip/__main__.py b/myenv/lib/python3.12/site-packages/pip/__main__.py deleted file mode 100644 index 5991326..0000000 --- a/myenv/lib/python3.12/site-packages/pip/__main__.py +++ /dev/null @@ -1,24 +0,0 @@ -import os -import sys - -# Remove '' and current working directory from the first entry -# of sys.path, if present to avoid using current directory -# in pip commands check, freeze, install, list and show, -# when invoked as python -m pip -if sys.path[0] in ("", os.getcwd()): - sys.path.pop(0) - -# If we are running from a wheel, add the wheel to sys.path -# This allows the usage python pip-*.whl/pip install pip-*.whl -if __package__ == "": - # __file__ is pip-*.whl/pip/__main__.py - # first dirname call strips of '/__main__.py', second strips off '/pip' - # Resulting path is the name of the wheel itself - # Add that to sys.path so we can import pip - path = os.path.dirname(os.path.dirname(__file__)) - sys.path.insert(0, path) - -if __name__ == "__main__": - from pip._internal.cli.main import main as _main - - sys.exit(_main()) diff --git a/myenv/lib/python3.12/site-packages/pip/__pip-runner__.py b/myenv/lib/python3.12/site-packages/pip/__pip-runner__.py deleted file mode 100644 index c633787..0000000 --- a/myenv/lib/python3.12/site-packages/pip/__pip-runner__.py +++ /dev/null @@ -1,50 +0,0 @@ -"""Execute exactly this copy of pip, within a different environment. - -This file is named as it is, to ensure that this module can't be imported via -an import statement. -""" - -# /!\ This version compatibility check section must be Python 2 compatible. /!\ - -import sys - -# Copied from pyproject.toml -PYTHON_REQUIRES = (3, 8) - - -def version_str(version): # type: ignore - return ".".join(str(v) for v in version) - - -if sys.version_info[:2] < PYTHON_REQUIRES: - raise SystemExit( - "This version of pip does not support python {} (requires >={}).".format( - version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES) - ) - ) - -# From here on, we can use Python 3 features, but the syntax must remain -# Python 2 compatible. - -import runpy # noqa: E402 -from importlib.machinery import PathFinder # noqa: E402 -from os.path import dirname # noqa: E402 - -PIP_SOURCES_ROOT = dirname(dirname(__file__)) - - -class PipImportRedirectingFinder: - @classmethod - def find_spec(self, fullname, path=None, target=None): # type: ignore - if fullname != "pip": - return None - - spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target) - assert spec, (PIP_SOURCES_ROOT, fullname) - return spec - - -sys.meta_path.insert(0, PipImportRedirectingFinder()) - -assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module" -runpy.run_module("pip", run_name="__main__", alter_sys=True) diff --git a/myenv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5668986..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index 0c859fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc deleted file mode 100644 index 0b4eef9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/__init__.py deleted file mode 100644 index 1a5b7f8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import List, Optional - -from pip._internal.utils import _log - -# init_logging() must be called before any call to logging.getLogger() -# which happens at import of most modules. -_log.init_logging() - - -def main(args: Optional[List[str]] = None) -> int: - """This is preserved for old console scripts that may still be referencing - it. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5964a73..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc deleted file mode 100644 index ae3f635..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc deleted file mode 100644 index e3d4b04..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc deleted file mode 100644 index f0868af..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index abbc0e5..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc deleted file mode 100644 index d455851..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc deleted file mode 100644 index 346efb1..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc deleted file mode 100644 index 7e287d4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc deleted file mode 100644 index d7d28a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/build_env.py b/myenv/lib/python3.12/site-packages/pip/_internal/build_env.py deleted file mode 100644 index e8d1aca..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/build_env.py +++ /dev/null @@ -1,322 +0,0 @@ -"""Build Environment used for isolation during sdist building -""" - -import logging -import os -import pathlib -import site -import sys -import textwrap -from collections import OrderedDict -from types import TracebackType -from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type, Union - -from pip._vendor.packaging.version import Version - -from pip import __file__ as pip_location -from pip._internal.cli.spinners import open_spinner -from pip._internal.locations import get_platlib, get_purelib, get_scheme -from pip._internal.metadata import get_default_environment, get_environment -from pip._internal.utils.logging import VERBOSE -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.subprocess import call_subprocess -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - -logger = logging.getLogger(__name__) - - -def _dedup(a: str, b: str) -> Union[Tuple[str], Tuple[str, str]]: - return (a, b) if a != b else (a,) - - -class _Prefix: - def __init__(self, path: str) -> None: - self.path = path - self.setup = False - scheme = get_scheme("", prefix=path) - self.bin_dir = scheme.scripts - self.lib_dirs = _dedup(scheme.purelib, scheme.platlib) - - -def get_runnable_pip() -> str: - """Get a file to pass to a Python executable, to run the currently-running pip. - - This is used to run a pip subprocess, for installing requirements into the build - environment. - """ - source = pathlib.Path(pip_location).resolve().parent - - if not source.is_dir(): - # This would happen if someone is using pip from inside a zip file. In that - # case, we can use that directly. - return str(source) - - return os.fsdecode(source / "__pip-runner__.py") - - -def _get_system_sitepackages() -> Set[str]: - """Get system site packages - - Usually from site.getsitepackages, - but fallback on `get_purelib()/get_platlib()` if unavailable - (e.g. in a virtualenv created by virtualenv<20) - - Returns normalized set of strings. - """ - if hasattr(site, "getsitepackages"): - system_sites = site.getsitepackages() - else: - # virtualenv < 20 overwrites site.py without getsitepackages - # fallback on get_purelib/get_platlib. - # this is known to miss things, but shouldn't in the cases - # where getsitepackages() has been removed (inside a virtualenv) - system_sites = [get_purelib(), get_platlib()] - return {os.path.normcase(path) for path in system_sites} - - -class BuildEnvironment: - """Creates and manages an isolated environment to install build deps""" - - def __init__(self) -> None: - temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True) - - self._prefixes = OrderedDict( - (name, _Prefix(os.path.join(temp_dir.path, name))) - for name in ("normal", "overlay") - ) - - self._bin_dirs: List[str] = [] - self._lib_dirs: List[str] = [] - for prefix in reversed(list(self._prefixes.values())): - self._bin_dirs.append(prefix.bin_dir) - self._lib_dirs.extend(prefix.lib_dirs) - - # Customize site to: - # - ensure .pth files are honored - # - prevent access to system site packages - system_sites = _get_system_sitepackages() - - self._site_dir = os.path.join(temp_dir.path, "site") - if not os.path.exists(self._site_dir): - os.mkdir(self._site_dir) - with open( - os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8" - ) as fp: - fp.write( - textwrap.dedent( - """ - import os, site, sys - - # First, drop system-sites related paths. - original_sys_path = sys.path[:] - known_paths = set() - for path in {system_sites!r}: - site.addsitedir(path, known_paths=known_paths) - system_paths = set( - os.path.normcase(path) - for path in sys.path[len(original_sys_path):] - ) - original_sys_path = [ - path for path in original_sys_path - if os.path.normcase(path) not in system_paths - ] - sys.path = original_sys_path - - # Second, add lib directories. - # ensuring .pth file are processed. - for path in {lib_dirs!r}: - assert not path in sys.path - site.addsitedir(path) - """ - ).format(system_sites=system_sites, lib_dirs=self._lib_dirs) - ) - - def __enter__(self) -> None: - self._save_env = { - name: os.environ.get(name, None) - for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH") - } - - path = self._bin_dirs[:] - old_path = self._save_env["PATH"] - if old_path: - path.extend(old_path.split(os.pathsep)) - - pythonpath = [self._site_dir] - - os.environ.update( - { - "PATH": os.pathsep.join(path), - "PYTHONNOUSERSITE": "1", - "PYTHONPATH": os.pathsep.join(pythonpath), - } - ) - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - for varname, old_value in self._save_env.items(): - if old_value is None: - os.environ.pop(varname, None) - else: - os.environ[varname] = old_value - - def check_requirements( - self, reqs: Iterable[str] - ) -> Tuple[Set[Tuple[str, str]], Set[str]]: - """Return 2 sets: - - conflicting requirements: set of (installed, wanted) reqs tuples - - missing requirements: set of reqs - """ - missing = set() - conflicting = set() - if reqs: - env = ( - get_environment(self._lib_dirs) - if hasattr(self, "_lib_dirs") - else get_default_environment() - ) - for req_str in reqs: - req = get_requirement(req_str) - # We're explicitly evaluating with an empty extra value, since build - # environments are not provided any mechanism to select specific extras. - if req.marker is not None and not req.marker.evaluate({"extra": ""}): - continue - dist = env.get_distribution(req.name) - if not dist: - missing.add(req_str) - continue - if isinstance(dist.version, Version): - installed_req_str = f"{req.name}=={dist.version}" - else: - installed_req_str = f"{req.name}==={dist.version}" - if not req.specifier.contains(dist.version, prereleases=True): - conflicting.add((installed_req_str, req_str)) - # FIXME: Consider direct URL? - return conflicting, missing - - def install_requirements( - self, - finder: "PackageFinder", - requirements: Iterable[str], - prefix_as_string: str, - *, - kind: str, - ) -> None: - prefix = self._prefixes[prefix_as_string] - assert not prefix.setup - prefix.setup = True - if not requirements: - return - self._install_requirements( - get_runnable_pip(), - finder, - requirements, - prefix, - kind=kind, - ) - - @staticmethod - def _install_requirements( - pip_runnable: str, - finder: "PackageFinder", - requirements: Iterable[str], - prefix: _Prefix, - *, - kind: str, - ) -> None: - args: List[str] = [ - sys.executable, - pip_runnable, - "install", - "--ignore-installed", - "--no-user", - "--prefix", - prefix.path, - "--no-warn-script-location", - "--disable-pip-version-check", - # The prefix specified two lines above, thus - # target from config file or env var should be ignored - "--target", - "", - ] - if logger.getEffectiveLevel() <= logging.DEBUG: - args.append("-vv") - elif logger.getEffectiveLevel() <= VERBOSE: - args.append("-v") - for format_control in ("no_binary", "only_binary"): - formats = getattr(finder.format_control, format_control) - args.extend( - ( - "--" + format_control.replace("_", "-"), - ",".join(sorted(formats or {":none:"})), - ) - ) - - index_urls = finder.index_urls - if index_urls: - args.extend(["-i", index_urls[0]]) - for extra_index in index_urls[1:]: - args.extend(["--extra-index-url", extra_index]) - else: - args.append("--no-index") - for link in finder.find_links: - args.extend(["--find-links", link]) - - if finder.proxy: - args.extend(["--proxy", finder.proxy]) - for host in finder.trusted_hosts: - args.extend(["--trusted-host", host]) - if finder.custom_cert: - args.extend(["--cert", finder.custom_cert]) - if finder.client_cert: - args.extend(["--client-cert", finder.client_cert]) - if finder.allow_all_prereleases: - args.append("--pre") - if finder.prefer_binary: - args.append("--prefer-binary") - args.append("--") - args.extend(requirements) - with open_spinner(f"Installing {kind}") as spinner: - call_subprocess( - args, - command_desc=f"pip subprocess to install {kind}", - spinner=spinner, - ) - - -class NoOpBuildEnvironment(BuildEnvironment): - """A no-op drop-in replacement for BuildEnvironment""" - - def __init__(self) -> None: - pass - - def __enter__(self) -> None: - pass - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - pass - - def cleanup(self) -> None: - pass - - def install_requirements( - self, - finder: "PackageFinder", - requirements: Iterable[str], - prefix_as_string: str, - *, - kind: str, - ) -> None: - raise NotImplementedError() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cache.py b/myenv/lib/python3.12/site-packages/pip/_internal/cache.py deleted file mode 100644 index 6b45126..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cache.py +++ /dev/null @@ -1,290 +0,0 @@ -"""Cache Management -""" - -import hashlib -import json -import logging -import os -from pathlib import Path -from typing import Any, Dict, List, Optional - -from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import InvalidWheelFilename -from pip._internal.models.direct_url import DirectUrl -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds -from pip._internal.utils.urls import path_to_url - -logger = logging.getLogger(__name__) - -ORIGIN_JSON_NAME = "origin.json" - - -def _hash_dict(d: Dict[str, str]) -> str: - """Return a stable sha224 of a dictionary.""" - s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True) - return hashlib.sha224(s.encode("ascii")).hexdigest() - - -class Cache: - """An abstract class - provides cache directories for data from links - - :param cache_dir: The root of the cache. - """ - - def __init__(self, cache_dir: str) -> None: - super().__init__() - assert not cache_dir or os.path.isabs(cache_dir) - self.cache_dir = cache_dir or None - - def _get_cache_path_parts(self, link: Link) -> List[str]: - """Get parts of part that must be os.path.joined with cache_dir""" - - # We want to generate an url to use as our cache key, we don't want to - # just reuse the URL because it might have other items in the fragment - # and we don't care about those. - key_parts = {"url": link.url_without_fragment} - if link.hash_name is not None and link.hash is not None: - key_parts[link.hash_name] = link.hash - if link.subdirectory_fragment: - key_parts["subdirectory"] = link.subdirectory_fragment - - # Include interpreter name, major and minor version in cache key - # to cope with ill-behaved sdists that build a different wheel - # depending on the python version their setup.py is being run on, - # and don't encode the difference in compatibility tags. - # https://github.com/pypa/pip/issues/7296 - key_parts["interpreter_name"] = interpreter_name() - key_parts["interpreter_version"] = interpreter_version() - - # Encode our key url with sha224, we'll use this because it has similar - # security properties to sha256, but with a shorter total output (and - # thus less secure). However the differences don't make a lot of - # difference for our use case here. - hashed = _hash_dict(key_parts) - - # We want to nest the directories some to prevent having a ton of top - # level directories where we might run out of sub directories on some - # FS. - parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] - - return parts - - def _get_candidates(self, link: Link, canonical_package_name: str) -> List[Any]: - can_not_cache = not self.cache_dir or not canonical_package_name or not link - if can_not_cache: - return [] - - path = self.get_path_for_link(link) - if os.path.isdir(path): - return [(candidate, path) for candidate in os.listdir(path)] - return [] - - def get_path_for_link(self, link: Link) -> str: - """Return a directory to store cached items in for link.""" - raise NotImplementedError() - - def get( - self, - link: Link, - package_name: Optional[str], - supported_tags: List[Tag], - ) -> Link: - """Returns a link to a cached item if it exists, otherwise returns the - passed link. - """ - raise NotImplementedError() - - -class SimpleWheelCache(Cache): - """A cache of wheels for future installs.""" - - def __init__(self, cache_dir: str) -> None: - super().__init__(cache_dir) - - def get_path_for_link(self, link: Link) -> str: - """Return a directory to store cached wheels for link - - Because there are M wheels for any one sdist, we provide a directory - to cache them in, and then consult that directory when looking up - cache hits. - - We only insert things into the cache if they have plausible version - numbers, so that we don't contaminate the cache with things that were - not unique. E.g. ./package might have dozens of installs done for it - and build a version of 0.0...and if we built and cached a wheel, we'd - end up using the same wheel even if the source has been edited. - - :param link: The link of the sdist for which this will cache wheels. - """ - parts = self._get_cache_path_parts(link) - assert self.cache_dir - # Store wheels within the root cache_dir - return os.path.join(self.cache_dir, "wheels", *parts) - - def get( - self, - link: Link, - package_name: Optional[str], - supported_tags: List[Tag], - ) -> Link: - candidates = [] - - if not package_name: - return link - - canonical_package_name = canonicalize_name(package_name) - for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name): - try: - wheel = Wheel(wheel_name) - except InvalidWheelFilename: - continue - if canonicalize_name(wheel.name) != canonical_package_name: - logger.debug( - "Ignoring cached wheel %s for %s as it " - "does not match the expected distribution name %s.", - wheel_name, - link, - package_name, - ) - continue - if not wheel.supported(supported_tags): - # Built for a different python/arch/etc - continue - candidates.append( - ( - wheel.support_index_min(supported_tags), - wheel_name, - wheel_dir, - ) - ) - - if not candidates: - return link - - _, wheel_name, wheel_dir = min(candidates) - return Link(path_to_url(os.path.join(wheel_dir, wheel_name))) - - -class EphemWheelCache(SimpleWheelCache): - """A SimpleWheelCache that creates it's own temporary cache directory""" - - def __init__(self) -> None: - self._temp_dir = TempDirectory( - kind=tempdir_kinds.EPHEM_WHEEL_CACHE, - globally_managed=True, - ) - - super().__init__(self._temp_dir.path) - - -class CacheEntry: - def __init__( - self, - link: Link, - persistent: bool, - ): - self.link = link - self.persistent = persistent - self.origin: Optional[DirectUrl] = None - origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME - if origin_direct_url_path.exists(): - try: - self.origin = DirectUrl.from_json( - origin_direct_url_path.read_text(encoding="utf-8") - ) - except Exception as e: - logger.warning( - "Ignoring invalid cache entry origin file %s for %s (%s)", - origin_direct_url_path, - link.filename, - e, - ) - - -class WheelCache(Cache): - """Wraps EphemWheelCache and SimpleWheelCache into a single Cache - - This Cache allows for gracefully degradation, using the ephem wheel cache - when a certain link is not found in the simple wheel cache first. - """ - - def __init__(self, cache_dir: str) -> None: - super().__init__(cache_dir) - self._wheel_cache = SimpleWheelCache(cache_dir) - self._ephem_cache = EphemWheelCache() - - def get_path_for_link(self, link: Link) -> str: - return self._wheel_cache.get_path_for_link(link) - - def get_ephem_path_for_link(self, link: Link) -> str: - return self._ephem_cache.get_path_for_link(link) - - def get( - self, - link: Link, - package_name: Optional[str], - supported_tags: List[Tag], - ) -> Link: - cache_entry = self.get_cache_entry(link, package_name, supported_tags) - if cache_entry is None: - return link - return cache_entry.link - - def get_cache_entry( - self, - link: Link, - package_name: Optional[str], - supported_tags: List[Tag], - ) -> Optional[CacheEntry]: - """Returns a CacheEntry with a link to a cached item if it exists or - None. The cache entry indicates if the item was found in the persistent - or ephemeral cache. - """ - retval = self._wheel_cache.get( - link=link, - package_name=package_name, - supported_tags=supported_tags, - ) - if retval is not link: - return CacheEntry(retval, persistent=True) - - retval = self._ephem_cache.get( - link=link, - package_name=package_name, - supported_tags=supported_tags, - ) - if retval is not link: - return CacheEntry(retval, persistent=False) - - return None - - @staticmethod - def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None: - origin_path = Path(cache_dir) / ORIGIN_JSON_NAME - if origin_path.exists(): - try: - origin = DirectUrl.from_json(origin_path.read_text(encoding="utf-8")) - except Exception as e: - logger.warning( - "Could not read origin file %s in cache entry (%s). " - "Will attempt to overwrite it.", - origin_path, - e, - ) - else: - # TODO: use DirectUrl.equivalent when - # https://github.com/pypa/pip/pull/10564 is merged. - if origin.url != download_info.url: - logger.warning( - "Origin URL %s in cache entry %s does not match download URL " - "%s. This is likely a pip bug or a cache corruption issue. " - "Will overwrite it with the new value.", - origin.url, - cache_dir, - download_info.url, - ) - origin_path.write_text(download_info.to_json(), encoding="utf-8") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py deleted file mode 100644 index e589bb9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -"""Subpackage containing all of pip's command line interface related code -""" - -# This file intentionally does not import submodules diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 3dbddd9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc deleted file mode 100644 index 687f71d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc deleted file mode 100644 index e7944fd..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc deleted file mode 100644 index 19bd36c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc deleted file mode 100644 index aabd0fc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-312.pyc deleted file mode 100644 index 14d77bf..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc deleted file mode 100644 index 20a1706..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc deleted file mode 100644 index 14b153a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc deleted file mode 100644 index 0b8d32f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc deleted file mode 100644 index 50faef1..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc deleted file mode 100644 index 1b74754..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc deleted file mode 100644 index 9b94588..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc deleted file mode 100644 index 83b3e08..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py deleted file mode 100644 index f3f70ac..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py +++ /dev/null @@ -1,176 +0,0 @@ -"""Logic that powers autocompletion installed by ``pip completion``. -""" - -import optparse -import os -import sys -from itertools import chain -from typing import Any, Iterable, List, Optional - -from pip._internal.cli.main_parser import create_main_parser -from pip._internal.commands import commands_dict, create_command -from pip._internal.metadata import get_default_environment - - -def autocomplete() -> None: - """Entry Point for completion of main and subcommand options.""" - # Don't complete if user hasn't sourced bash_completion file. - if "PIP_AUTO_COMPLETE" not in os.environ: - return - # Don't complete if autocompletion environment variables - # are not present - if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"): - return - cwords = os.environ["COMP_WORDS"].split()[1:] - cword = int(os.environ["COMP_CWORD"]) - try: - current = cwords[cword - 1] - except IndexError: - current = "" - - parser = create_main_parser() - subcommands = list(commands_dict) - options = [] - - # subcommand - subcommand_name: Optional[str] = None - for word in cwords: - if word in subcommands: - subcommand_name = word - break - # subcommand options - if subcommand_name is not None: - # special case: 'help' subcommand has no options - if subcommand_name == "help": - sys.exit(1) - # special case: list locally installed dists for show and uninstall - should_list_installed = not current.startswith("-") and subcommand_name in [ - "show", - "uninstall", - ] - if should_list_installed: - env = get_default_environment() - lc = current.lower() - installed = [ - dist.canonical_name - for dist in env.iter_installed_distributions(local_only=True) - if dist.canonical_name.startswith(lc) - and dist.canonical_name not in cwords[1:] - ] - # if there are no dists installed, fall back to option completion - if installed: - for dist in installed: - print(dist) - sys.exit(1) - - should_list_installables = ( - not current.startswith("-") and subcommand_name == "install" - ) - if should_list_installables: - for path in auto_complete_paths(current, "path"): - print(path) - sys.exit(1) - - subcommand = create_command(subcommand_name) - - for opt in subcommand.parser.option_list_all: - if opt.help != optparse.SUPPRESS_HELP: - options += [ - (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts - ] - - # filter out previously specified options from available options - prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]] - options = [(x, v) for (x, v) in options if x not in prev_opts] - # filter options by current input - options = [(k, v) for k, v in options if k.startswith(current)] - # get completion type given cwords and available subcommand options - completion_type = get_path_completion_type( - cwords, - cword, - subcommand.parser.option_list_all, - ) - # get completion files and directories if ``completion_type`` is - # ````, ``
`` or ```` - if completion_type: - paths = auto_complete_paths(current, completion_type) - options = [(path, 0) for path in paths] - for option in options: - opt_label = option[0] - # append '=' to options which require args - if option[1] and option[0][:2] == "--": - opt_label += "=" - print(opt_label) - else: - # show main parser options only when necessary - - opts = [i.option_list for i in parser.option_groups] - opts.append(parser.option_list) - flattened_opts = chain.from_iterable(opts) - if current.startswith("-"): - for opt in flattened_opts: - if opt.help != optparse.SUPPRESS_HELP: - subcommands += opt._long_opts + opt._short_opts - else: - # get completion type given cwords and all available options - completion_type = get_path_completion_type(cwords, cword, flattened_opts) - if completion_type: - subcommands = list(auto_complete_paths(current, completion_type)) - - print(" ".join([x for x in subcommands if x.startswith(current)])) - sys.exit(1) - - -def get_path_completion_type( - cwords: List[str], cword: int, opts: Iterable[Any] -) -> Optional[str]: - """Get the type of path completion (``file``, ``dir``, ``path`` or None) - - :param cwords: same as the environmental variable ``COMP_WORDS`` - :param cword: same as the environmental variable ``COMP_CWORD`` - :param opts: The available options to check - :return: path completion type (``file``, ``dir``, ``path`` or None) - """ - if cword < 2 or not cwords[cword - 2].startswith("-"): - return None - for opt in opts: - if opt.help == optparse.SUPPRESS_HELP: - continue - for o in str(opt).split("/"): - if cwords[cword - 2].split("=")[0] == o: - if not opt.metavar or any( - x in ("path", "file", "dir") for x in opt.metavar.split("/") - ): - return opt.metavar - return None - - -def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]: - """If ``completion_type`` is ``file`` or ``path``, list all regular files - and directories starting with ``current``; otherwise only list directories - starting with ``current``. - - :param current: The word to be completed - :param completion_type: path completion type(``file``, ``path`` or ``dir``) - :return: A generator of regular files and/or directories - """ - directory, filename = os.path.split(current) - current_path = os.path.abspath(directory) - # Don't complete paths if they can't be accessed - if not os.access(current_path, os.R_OK): - return - filename = os.path.normcase(filename) - # list all files that start with ``filename`` - file_list = ( - x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename) - ) - for f in file_list: - opt = os.path.join(current_path, f) - comp_file = os.path.normcase(os.path.join(directory, f)) - # complete regular files when there is not ```` after option - # complete directories when there is ````, ```` or - # ````after option - if completion_type != "dir" and os.path.isfile(opt): - yield comp_file - elif os.path.isdir(opt): - yield os.path.join(comp_file, "") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py deleted file mode 100644 index 362f84b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py +++ /dev/null @@ -1,240 +0,0 @@ -"""Base Command class, and related routines""" - -import logging -import logging.config -import optparse -import os -import sys -import traceback -from optparse import Values -from typing import List, Optional, Tuple - -from pip._vendor.rich import reconfigure -from pip._vendor.rich import traceback as rich_traceback - -from pip._internal.cli import cmdoptions -from pip._internal.cli.command_context import CommandContextMixIn -from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter -from pip._internal.cli.status_codes import ( - ERROR, - PREVIOUS_BUILD_DIR_ERROR, - UNKNOWN_ERROR, - VIRTUALENV_NOT_FOUND, -) -from pip._internal.exceptions import ( - BadCommand, - CommandError, - DiagnosticPipError, - InstallationError, - NetworkConnectionError, - PreviousBuildDirError, -) -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging -from pip._internal.utils.misc import get_prog, normalize_path -from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry -from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry -from pip._internal.utils.virtualenv import running_under_virtualenv - -__all__ = ["Command"] - -logger = logging.getLogger(__name__) - - -class Command(CommandContextMixIn): - usage: str = "" - ignore_require_venv: bool = False - - def __init__(self, name: str, summary: str, isolated: bool = False) -> None: - super().__init__() - - self.name = name - self.summary = summary - self.parser = ConfigOptionParser( - usage=self.usage, - prog=f"{get_prog()} {name}", - formatter=UpdatingDefaultsHelpFormatter(), - add_help_option=False, - name=name, - description=self.__doc__, - isolated=isolated, - ) - - self.tempdir_registry: Optional[TempDirRegistry] = None - - # Commands should add options to this option group - optgroup_name = f"{self.name.capitalize()} Options" - self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) - - # Add the general options - gen_opts = cmdoptions.make_option_group( - cmdoptions.general_group, - self.parser, - ) - self.parser.add_option_group(gen_opts) - - self.add_options() - - def add_options(self) -> None: - pass - - def handle_pip_version_check(self, options: Values) -> None: - """ - This is a no-op so that commands by default do not do the pip version - check. - """ - # Make sure we do the pip version check if the index_group options - # are present. - assert not hasattr(options, "no_index") - - def run(self, options: Values, args: List[str]) -> int: - raise NotImplementedError - - def _run_wrapper(self, level_number: int, options: Values, args: List[str]) -> int: - def _inner_run() -> int: - try: - return self.run(options, args) - finally: - self.handle_pip_version_check(options) - - if options.debug_mode: - rich_traceback.install(show_locals=True) - return _inner_run() - - try: - status = _inner_run() - assert isinstance(status, int) - return status - except DiagnosticPipError as exc: - logger.error("%s", exc, extra={"rich": True}) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except PreviousBuildDirError as exc: - logger.critical(str(exc)) - logger.debug("Exception information:", exc_info=True) - - return PREVIOUS_BUILD_DIR_ERROR - except ( - InstallationError, - BadCommand, - NetworkConnectionError, - ) as exc: - logger.critical(str(exc)) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except CommandError as exc: - logger.critical("%s", exc) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except BrokenStdoutLoggingError: - # Bypass our logger and write any remaining messages to - # stderr because stdout no longer works. - print("ERROR: Pipe to stdout was broken", file=sys.stderr) - if level_number <= logging.DEBUG: - traceback.print_exc(file=sys.stderr) - - return ERROR - except KeyboardInterrupt: - logger.critical("Operation cancelled by user") - logger.debug("Exception information:", exc_info=True) - - return ERROR - except BaseException: - logger.critical("Exception:", exc_info=True) - - return UNKNOWN_ERROR - - def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]: - # factored out for testability - return self.parser.parse_args(args) - - def main(self, args: List[str]) -> int: - try: - with self.main_context(): - return self._main(args) - finally: - logging.shutdown() - - def _main(self, args: List[str]) -> int: - # We must initialize this before the tempdir manager, otherwise the - # configuration would not be accessible by the time we clean up the - # tempdir manager. - self.tempdir_registry = self.enter_context(tempdir_registry()) - # Intentionally set as early as possible so globally-managed temporary - # directories are available to the rest of the code. - self.enter_context(global_tempdir_manager()) - - options, args = self.parse_args(args) - - # Set verbosity so that it can be used elsewhere. - self.verbosity = options.verbose - options.quiet - - reconfigure(no_color=options.no_color) - level_number = setup_logging( - verbosity=self.verbosity, - no_color=options.no_color, - user_log_file=options.log, - ) - - always_enabled_features = set(options.features_enabled) & set( - cmdoptions.ALWAYS_ENABLED_FEATURES - ) - if always_enabled_features: - logger.warning( - "The following features are always enabled: %s. ", - ", ".join(sorted(always_enabled_features)), - ) - - # Make sure that the --python argument isn't specified after the - # subcommand. We can tell, because if --python was specified, - # we should only reach this point if we're running in the created - # subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment - # variable set. - if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: - logger.critical( - "The --python option must be placed before the pip subcommand name" - ) - sys.exit(ERROR) - - # TODO: Try to get these passing down from the command? - # without resorting to os.environ to hold these. - # This also affects isolated builds and it should. - - if options.no_input: - os.environ["PIP_NO_INPUT"] = "1" - - if options.exists_action: - os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action) - - if options.require_venv and not self.ignore_require_venv: - # If a venv is required check if it can really be found - if not running_under_virtualenv(): - logger.critical("Could not find an activated virtualenv (required).") - sys.exit(VIRTUALENV_NOT_FOUND) - - if options.cache_dir: - options.cache_dir = normalize_path(options.cache_dir) - if not check_path_owner(options.cache_dir): - logger.warning( - "The directory '%s' or its parent directory is not owned " - "or is not writable by the current user. The cache " - "has been disabled. Check the permissions and owner of " - "that directory. If executing pip with sudo, you should " - "use sudo's -H flag.", - options.cache_dir, - ) - options.cache_dir = None - - if options.no_python_version_warning: - deprecated( - reason="--no-python-version-warning is deprecated.", - replacement="to remove the flag as it's a no-op", - gone_in="25.1", - issue=13154, - ) - - return self._run_wrapper(level_number, options, args) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py deleted file mode 100644 index eeb7e65..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py +++ /dev/null @@ -1,1075 +0,0 @@ -""" -shared options and groups - -The principle here is to define options once, but *not* instantiate them -globally. One reason being that options with action='append' can carry state -between parses. pip parses general options twice internally, and shouldn't -pass on state. To be consistent, all options will follow this design. -""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False - -import importlib.util -import logging -import os -import textwrap -from functools import partial -from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values -from textwrap import dedent -from typing import Any, Callable, Dict, Optional, Tuple - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli.parser import ConfigOptionParser -from pip._internal.exceptions import CommandError -from pip._internal.locations import USER_CACHE_DIR, get_src_prefix -from pip._internal.models.format_control import FormatControl -from pip._internal.models.index import PyPI -from pip._internal.models.target_python import TargetPython -from pip._internal.utils.hashes import STRONG_HASHES -from pip._internal.utils.misc import strtobool - -logger = logging.getLogger(__name__) - - -def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None: - """ - Raise an option parsing error using parser.error(). - - Args: - parser: an OptionParser instance. - option: an Option instance. - msg: the error text. - """ - msg = f"{option} error: {msg}" - msg = textwrap.fill(" ".join(msg.split())) - parser.error(msg) - - -def make_option_group(group: Dict[str, Any], parser: ConfigOptionParser) -> OptionGroup: - """ - Return an OptionGroup object - group -- assumed to be dict with 'name' and 'options' keys - parser -- an optparse Parser - """ - option_group = OptionGroup(parser, group["name"]) - for option in group["options"]: - option_group.add_option(option()) - return option_group - - -def check_dist_restriction(options: Values, check_target: bool = False) -> None: - """Function for determining if custom platform options are allowed. - - :param options: The OptionParser options. - :param check_target: Whether or not to check if --target is being used. - """ - dist_restriction_set = any( - [ - options.python_version, - options.platforms, - options.abis, - options.implementation, - ] - ) - - binary_only = FormatControl(set(), {":all:"}) - sdist_dependencies_allowed = ( - options.format_control != binary_only and not options.ignore_dependencies - ) - - # Installations or downloads using dist restrictions must not combine - # source distributions and dist-specific wheels, as they are not - # guaranteed to be locally compatible. - if dist_restriction_set and sdist_dependencies_allowed: - raise CommandError( - "When restricting platform and interpreter constraints using " - "--python-version, --platform, --abi, or --implementation, " - "either --no-deps must be set, or --only-binary=:all: must be " - "set and --no-binary must not be set (or must be set to " - ":none:)." - ) - - if check_target: - if not options.dry_run and dist_restriction_set and not options.target_dir: - raise CommandError( - "Can not use any platform or abi specific options unless " - "installing via '--target' or using '--dry-run'" - ) - - -def _path_option_check(option: Option, opt: str, value: str) -> str: - return os.path.expanduser(value) - - -def _package_name_option_check(option: Option, opt: str, value: str) -> str: - return canonicalize_name(value) - - -class PipOption(Option): - TYPES = Option.TYPES + ("path", "package_name") - TYPE_CHECKER = Option.TYPE_CHECKER.copy() - TYPE_CHECKER["package_name"] = _package_name_option_check - TYPE_CHECKER["path"] = _path_option_check - - -########### -# options # -########### - -help_: Callable[..., Option] = partial( - Option, - "-h", - "--help", - dest="help", - action="help", - help="Show help.", -) - -debug_mode: Callable[..., Option] = partial( - Option, - "--debug", - dest="debug_mode", - action="store_true", - default=False, - help=( - "Let unhandled exceptions propagate outside the main subroutine, " - "instead of logging them to stderr." - ), -) - -isolated_mode: Callable[..., Option] = partial( - Option, - "--isolated", - dest="isolated_mode", - action="store_true", - default=False, - help=( - "Run pip in an isolated mode, ignoring environment variables and user " - "configuration." - ), -) - -require_virtualenv: Callable[..., Option] = partial( - Option, - "--require-virtualenv", - "--require-venv", - dest="require_venv", - action="store_true", - default=False, - help=( - "Allow pip to only run in a virtual environment; " - "exit with an error otherwise." - ), -) - -override_externally_managed: Callable[..., Option] = partial( - Option, - "--break-system-packages", - dest="override_externally_managed", - action="store_true", - help="Allow pip to modify an EXTERNALLY-MANAGED Python installation", -) - -python: Callable[..., Option] = partial( - Option, - "--python", - dest="python", - help="Run pip with the specified Python interpreter.", -) - -verbose: Callable[..., Option] = partial( - Option, - "-v", - "--verbose", - dest="verbose", - action="count", - default=0, - help="Give more output. Option is additive, and can be used up to 3 times.", -) - -no_color: Callable[..., Option] = partial( - Option, - "--no-color", - dest="no_color", - action="store_true", - default=False, - help="Suppress colored output.", -) - -version: Callable[..., Option] = partial( - Option, - "-V", - "--version", - dest="version", - action="store_true", - help="Show version and exit.", -) - -quiet: Callable[..., Option] = partial( - Option, - "-q", - "--quiet", - dest="quiet", - action="count", - default=0, - help=( - "Give less output. Option is additive, and can be used up to 3" - " times (corresponding to WARNING, ERROR, and CRITICAL logging" - " levels)." - ), -) - -progress_bar: Callable[..., Option] = partial( - Option, - "--progress-bar", - dest="progress_bar", - type="choice", - choices=["on", "off", "raw"], - default="on", - help="Specify whether the progress bar should be used [on, off, raw] (default: on)", -) - -log: Callable[..., Option] = partial( - PipOption, - "--log", - "--log-file", - "--local-log", - dest="log", - metavar="path", - type="path", - help="Path to a verbose appending log.", -) - -no_input: Callable[..., Option] = partial( - Option, - # Don't ask for input - "--no-input", - dest="no_input", - action="store_true", - default=False, - help="Disable prompting for input.", -) - -keyring_provider: Callable[..., Option] = partial( - Option, - "--keyring-provider", - dest="keyring_provider", - choices=["auto", "disabled", "import", "subprocess"], - default="auto", - help=( - "Enable the credential lookup via the keyring library if user input is allowed." - " Specify which mechanism to use [auto, disabled, import, subprocess]." - " (default: %default)" - ), -) - -proxy: Callable[..., Option] = partial( - Option, - "--proxy", - dest="proxy", - type="str", - default="", - help="Specify a proxy in the form scheme://[user:passwd@]proxy.server:port.", -) - -retries: Callable[..., Option] = partial( - Option, - "--retries", - dest="retries", - type="int", - default=5, - help="Maximum number of retries each connection should attempt " - "(default %default times).", -) - -timeout: Callable[..., Option] = partial( - Option, - "--timeout", - "--default-timeout", - metavar="sec", - dest="timeout", - type="float", - default=15, - help="Set the socket timeout (default %default seconds).", -) - - -def exists_action() -> Option: - return Option( - # Option when path already exist - "--exists-action", - dest="exists_action", - type="choice", - choices=["s", "i", "w", "b", "a"], - default=[], - action="append", - metavar="action", - help="Default action when a path already exists: " - "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.", - ) - - -cert: Callable[..., Option] = partial( - PipOption, - "--cert", - dest="cert", - type="path", - metavar="path", - help=( - "Path to PEM-encoded CA certificate bundle. " - "If provided, overrides the default. " - "See 'SSL Certificate Verification' in pip documentation " - "for more information." - ), -) - -client_cert: Callable[..., Option] = partial( - PipOption, - "--client-cert", - dest="client_cert", - type="path", - default=None, - metavar="path", - help="Path to SSL client certificate, a single file containing the " - "private key and the certificate in PEM format.", -) - -index_url: Callable[..., Option] = partial( - Option, - "-i", - "--index-url", - "--pypi-url", - dest="index_url", - metavar="URL", - default=PyPI.simple_url, - help="Base URL of the Python Package Index (default %default). " - "This should point to a repository compliant with PEP 503 " - "(the simple repository API) or a local directory laid out " - "in the same format.", -) - - -def extra_index_url() -> Option: - return Option( - "--extra-index-url", - dest="extra_index_urls", - metavar="URL", - action="append", - default=[], - help="Extra URLs of package indexes to use in addition to " - "--index-url. Should follow the same rules as " - "--index-url.", - ) - - -no_index: Callable[..., Option] = partial( - Option, - "--no-index", - dest="no_index", - action="store_true", - default=False, - help="Ignore package index (only looking at --find-links URLs instead).", -) - - -def find_links() -> Option: - return Option( - "-f", - "--find-links", - dest="find_links", - action="append", - default=[], - metavar="url", - help="If a URL or path to an html file, then parse for links to " - "archives such as sdist (.tar.gz) or wheel (.whl) files. " - "If a local path or file:// URL that's a directory, " - "then look for archives in the directory listing. " - "Links to VCS project URLs are not supported.", - ) - - -def trusted_host() -> Option: - return Option( - "--trusted-host", - dest="trusted_hosts", - action="append", - metavar="HOSTNAME", - default=[], - help="Mark this host or host:port pair as trusted, even though it " - "does not have valid or any HTTPS.", - ) - - -def constraints() -> Option: - return Option( - "-c", - "--constraint", - dest="constraints", - action="append", - default=[], - metavar="file", - help="Constrain versions using the given constraints file. " - "This option can be used multiple times.", - ) - - -def requirements() -> Option: - return Option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help="Install from the given requirements file. " - "This option can be used multiple times.", - ) - - -def editable() -> Option: - return Option( - "-e", - "--editable", - dest="editables", - action="append", - default=[], - metavar="path/url", - help=( - "Install a project in editable mode (i.e. setuptools " - '"develop mode") from a local project path or a VCS url.' - ), - ) - - -def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None: - value = os.path.abspath(value) - setattr(parser.values, option.dest, value) - - -src: Callable[..., Option] = partial( - PipOption, - "--src", - "--source", - "--source-dir", - "--source-directory", - dest="src_dir", - type="path", - metavar="dir", - default=get_src_prefix(), - action="callback", - callback=_handle_src, - help="Directory to check out editable projects into. " - 'The default in a virtualenv is "/src". ' - 'The default for global installs is "/src".', -) - - -def _get_format_control(values: Values, option: Option) -> Any: - """Get a format_control object.""" - return getattr(values, option.dest) - - -def _handle_no_binary( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_format_control(parser.values, option) - FormatControl.handle_mutual_excludes( - value, - existing.no_binary, - existing.only_binary, - ) - - -def _handle_only_binary( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_format_control(parser.values, option) - FormatControl.handle_mutual_excludes( - value, - existing.only_binary, - existing.no_binary, - ) - - -def no_binary() -> Option: - format_control = FormatControl(set(), set()) - return Option( - "--no-binary", - dest="format_control", - action="callback", - callback=_handle_no_binary, - type="str", - default=format_control, - help="Do not use binary packages. Can be supplied multiple times, and " - 'each time adds to the existing value. Accepts either ":all:" to ' - 'disable all binary packages, ":none:" to empty the set (notice ' - "the colons), or one or more package names with commas between " - "them (no colons). Note that some packages are tricky to compile " - "and may fail to install when this option is used on them.", - ) - - -def only_binary() -> Option: - format_control = FormatControl(set(), set()) - return Option( - "--only-binary", - dest="format_control", - action="callback", - callback=_handle_only_binary, - type="str", - default=format_control, - help="Do not use source packages. Can be supplied multiple times, and " - 'each time adds to the existing value. Accepts either ":all:" to ' - 'disable all source packages, ":none:" to empty the set, or one ' - "or more package names with commas between them. Packages " - "without binary distributions will fail to install when this " - "option is used on them.", - ) - - -platforms: Callable[..., Option] = partial( - Option, - "--platform", - dest="platforms", - metavar="platform", - action="append", - default=None, - help=( - "Only use wheels compatible with . Defaults to the " - "platform of the running system. Use this option multiple times to " - "specify multiple platforms supported by the target interpreter." - ), -) - - -# This was made a separate function for unit-testing purposes. -def _convert_python_version(value: str) -> Tuple[Tuple[int, ...], Optional[str]]: - """ - Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. - - :return: A 2-tuple (version_info, error_msg), where `error_msg` is - non-None if and only if there was a parsing error. - """ - if not value: - # The empty string is the same as not providing a value. - return (None, None) - - parts = value.split(".") - if len(parts) > 3: - return ((), "at most three version parts are allowed") - - if len(parts) == 1: - # Then we are in the case of "3" or "37". - value = parts[0] - if len(value) > 1: - parts = [value[0], value[1:]] - - try: - version_info = tuple(int(part) for part in parts) - except ValueError: - return ((), "each version part must be an integer") - - return (version_info, None) - - -def _handle_python_version( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - """ - Handle a provided --python-version value. - """ - version_info, error_msg = _convert_python_version(value) - if error_msg is not None: - msg = f"invalid --python-version value: {value!r}: {error_msg}" - raise_option_error(parser, option=option, msg=msg) - - parser.values.python_version = version_info - - -python_version: Callable[..., Option] = partial( - Option, - "--python-version", - dest="python_version", - metavar="python_version", - action="callback", - callback=_handle_python_version, - type="str", - default=None, - help=dedent( - """\ - The Python interpreter version to use for wheel and "Requires-Python" - compatibility checks. Defaults to a version derived from the running - interpreter. The version can be specified using up to three dot-separated - integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor - version can also be given as a string without dots (e.g. "37" for 3.7.0). - """ - ), -) - - -implementation: Callable[..., Option] = partial( - Option, - "--implementation", - dest="implementation", - metavar="implementation", - default=None, - help=( - "Only use wheels compatible with Python " - "implementation , e.g. 'pp', 'jy', 'cp', " - " or 'ip'. If not specified, then the current " - "interpreter implementation is used. Use 'py' to force " - "implementation-agnostic wheels." - ), -) - - -abis: Callable[..., Option] = partial( - Option, - "--abi", - dest="abis", - metavar="abi", - action="append", - default=None, - help=( - "Only use wheels compatible with Python abi , e.g. 'pypy_41'. " - "If not specified, then the current interpreter abi tag is used. " - "Use this option multiple times to specify multiple abis supported " - "by the target interpreter. Generally you will need to specify " - "--implementation, --platform, and --python-version when using this " - "option." - ), -) - - -def add_target_python_options(cmd_opts: OptionGroup) -> None: - cmd_opts.add_option(platforms()) - cmd_opts.add_option(python_version()) - cmd_opts.add_option(implementation()) - cmd_opts.add_option(abis()) - - -def make_target_python(options: Values) -> TargetPython: - target_python = TargetPython( - platforms=options.platforms, - py_version_info=options.python_version, - abis=options.abis, - implementation=options.implementation, - ) - - return target_python - - -def prefer_binary() -> Option: - return Option( - "--prefer-binary", - dest="prefer_binary", - action="store_true", - default=False, - help=( - "Prefer binary packages over source packages, even if the " - "source packages are newer." - ), - ) - - -cache_dir: Callable[..., Option] = partial( - PipOption, - "--cache-dir", - dest="cache_dir", - default=USER_CACHE_DIR, - metavar="dir", - type="path", - help="Store the cache data in .", -) - - -def _handle_no_cache_dir( - option: Option, opt: str, value: str, parser: OptionParser -) -> None: - """ - Process a value provided for the --no-cache-dir option. - - This is an optparse.Option callback for the --no-cache-dir option. - """ - # The value argument will be None if --no-cache-dir is passed via the - # command-line, since the option doesn't accept arguments. However, - # the value can be non-None if the option is triggered e.g. by an - # environment variable, like PIP_NO_CACHE_DIR=true. - if value is not None: - # Then parse the string value to get argument error-checking. - try: - strtobool(value) - except ValueError as exc: - raise_option_error(parser, option=option, msg=str(exc)) - - # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() - # converted to 0 (like "false" or "no") caused cache_dir to be disabled - # rather than enabled (logic would say the latter). Thus, we disable - # the cache directory not just on values that parse to True, but (for - # backwards compatibility reasons) also on values that parse to False. - # In other words, always set it to False if the option is provided in - # some (valid) form. - parser.values.cache_dir = False - - -no_cache: Callable[..., Option] = partial( - Option, - "--no-cache-dir", - dest="cache_dir", - action="callback", - callback=_handle_no_cache_dir, - help="Disable the cache.", -) - -no_deps: Callable[..., Option] = partial( - Option, - "--no-deps", - "--no-dependencies", - dest="ignore_dependencies", - action="store_true", - default=False, - help="Don't install package dependencies.", -) - -ignore_requires_python: Callable[..., Option] = partial( - Option, - "--ignore-requires-python", - dest="ignore_requires_python", - action="store_true", - help="Ignore the Requires-Python information.", -) - -no_build_isolation: Callable[..., Option] = partial( - Option, - "--no-build-isolation", - dest="build_isolation", - action="store_false", - default=True, - help="Disable isolation when building a modern source distribution. " - "Build dependencies specified by PEP 518 must be already installed " - "if this option is used.", -) - -check_build_deps: Callable[..., Option] = partial( - Option, - "--check-build-dependencies", - dest="check_build_deps", - action="store_true", - default=False, - help="Check the build dependencies when PEP517 is used.", -) - - -def _handle_no_use_pep517( - option: Option, opt: str, value: str, parser: OptionParser -) -> None: - """ - Process a value provided for the --no-use-pep517 option. - - This is an optparse.Option callback for the no_use_pep517 option. - """ - # Since --no-use-pep517 doesn't accept arguments, the value argument - # will be None if --no-use-pep517 is passed via the command-line. - # However, the value can be non-None if the option is triggered e.g. - # by an environment variable, for example "PIP_NO_USE_PEP517=true". - if value is not None: - msg = """A value was passed for --no-use-pep517, - probably using either the PIP_NO_USE_PEP517 environment variable - or the "no-use-pep517" config file option. Use an appropriate value - of the PIP_USE_PEP517 environment variable or the "use-pep517" - config file option instead. - """ - raise_option_error(parser, option=option, msg=msg) - - # If user doesn't wish to use pep517, we check if setuptools and wheel are installed - # and raise error if it is not. - packages = ("setuptools", "wheel") - if not all(importlib.util.find_spec(package) for package in packages): - msg = ( - f"It is not possible to use --no-use-pep517 " - f"without {' and '.join(packages)} installed." - ) - raise_option_error(parser, option=option, msg=msg) - - # Otherwise, --no-use-pep517 was passed via the command-line. - parser.values.use_pep517 = False - - -use_pep517: Any = partial( - Option, - "--use-pep517", - dest="use_pep517", - action="store_true", - default=None, - help="Use PEP 517 for building source distributions " - "(use --no-use-pep517 to force legacy behaviour).", -) - -no_use_pep517: Any = partial( - Option, - "--no-use-pep517", - dest="use_pep517", - action="callback", - callback=_handle_no_use_pep517, - default=None, - help=SUPPRESS_HELP, -) - - -def _handle_config_settings( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - key, sep, val = value.partition("=") - if sep != "=": - parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL") - dest = getattr(parser.values, option.dest) - if dest is None: - dest = {} - setattr(parser.values, option.dest, dest) - if key in dest: - if isinstance(dest[key], list): - dest[key].append(val) - else: - dest[key] = [dest[key], val] - else: - dest[key] = val - - -config_settings: Callable[..., Option] = partial( - Option, - "-C", - "--config-settings", - dest="config_settings", - type=str, - action="callback", - callback=_handle_config_settings, - metavar="settings", - help="Configuration settings to be passed to the PEP 517 build backend. " - "Settings take the form KEY=VALUE. Use multiple --config-settings options " - "to pass multiple keys to the backend.", -) - -build_options: Callable[..., Option] = partial( - Option, - "--build-option", - dest="build_options", - metavar="options", - action="append", - help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", -) - -global_options: Callable[..., Option] = partial( - Option, - "--global-option", - dest="global_options", - action="append", - metavar="options", - help="Extra global options to be supplied to the setup.py " - "call before the install or bdist_wheel command.", -) - -no_clean: Callable[..., Option] = partial( - Option, - "--no-clean", - action="store_true", - default=False, - help="Don't clean up build directories.", -) - -pre: Callable[..., Option] = partial( - Option, - "--pre", - action="store_true", - default=False, - help="Include pre-release and development versions. By default, " - "pip only finds stable versions.", -) - -disable_pip_version_check: Callable[..., Option] = partial( - Option, - "--disable-pip-version-check", - dest="disable_pip_version_check", - action="store_true", - default=False, - help="Don't periodically check PyPI to determine whether a new version " - "of pip is available for download. Implied with --no-index.", -) - -root_user_action: Callable[..., Option] = partial( - Option, - "--root-user-action", - dest="root_user_action", - default="warn", - choices=["warn", "ignore"], - help="Action if pip is run as a root user [warn, ignore] (default: warn)", -) - - -def _handle_merge_hash( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - """Given a value spelled "algo:digest", append the digest to a list - pointed to in a dict by the algo name.""" - if not parser.values.hashes: - parser.values.hashes = {} - try: - algo, digest = value.split(":", 1) - except ValueError: - parser.error( - f"Arguments to {opt_str} must be a hash name " - "followed by a value, like --hash=sha256:" - "abcde..." - ) - if algo not in STRONG_HASHES: - parser.error( - "Allowed hash algorithms for {} are {}.".format( - opt_str, ", ".join(STRONG_HASHES) - ) - ) - parser.values.hashes.setdefault(algo, []).append(digest) - - -hash: Callable[..., Option] = partial( - Option, - "--hash", - # Hash values eventually end up in InstallRequirement.hashes due to - # __dict__ copying in process_line(). - dest="hashes", - action="callback", - callback=_handle_merge_hash, - type="string", - help="Verify that the package's archive matches this " - "hash before installing. Example: --hash=sha256:abcdef...", -) - - -require_hashes: Callable[..., Option] = partial( - Option, - "--require-hashes", - dest="require_hashes", - action="store_true", - default=False, - help="Require a hash to check each requirement against, for " - "repeatable installs. This option is implied when any package in a " - "requirements file has a --hash option.", -) - - -list_path: Callable[..., Option] = partial( - PipOption, - "--path", - dest="path", - type="path", - action="append", - help="Restrict to the specified installation path for listing " - "packages (can be used multiple times).", -) - - -def check_list_path_option(options: Values) -> None: - if options.path and (options.user or options.local): - raise CommandError("Cannot combine '--path' with '--user' or '--local'") - - -list_exclude: Callable[..., Option] = partial( - PipOption, - "--exclude", - dest="excludes", - action="append", - metavar="package", - type="package_name", - help="Exclude specified package from the output", -) - - -no_python_version_warning: Callable[..., Option] = partial( - Option, - "--no-python-version-warning", - dest="no_python_version_warning", - action="store_true", - default=False, - help="Silence deprecation warnings for upcoming unsupported Pythons.", -) - - -# Features that are now always on. A warning is printed if they are used. -ALWAYS_ENABLED_FEATURES = [ - "truststore", # always on since 24.2 - "no-binary-enable-wheel-cache", # always on since 23.1 -] - -use_new_feature: Callable[..., Option] = partial( - Option, - "--use-feature", - dest="features_enabled", - metavar="feature", - action="append", - default=[], - choices=[ - "fast-deps", - ] - + ALWAYS_ENABLED_FEATURES, - help="Enable new functionality, that may be backward incompatible.", -) - -use_deprecated_feature: Callable[..., Option] = partial( - Option, - "--use-deprecated", - dest="deprecated_features_enabled", - metavar="feature", - action="append", - default=[], - choices=[ - "legacy-resolver", - "legacy-certs", - ], - help=("Enable deprecated functionality, that will be removed in the future."), -) - - -########## -# groups # -########## - -general_group: Dict[str, Any] = { - "name": "General Options", - "options": [ - help_, - debug_mode, - isolated_mode, - require_virtualenv, - python, - verbose, - version, - quiet, - log, - no_input, - keyring_provider, - proxy, - retries, - timeout, - exists_action, - trusted_host, - cert, - client_cert, - cache_dir, - no_cache, - disable_pip_version_check, - no_color, - no_python_version_warning, - use_new_feature, - use_deprecated_feature, - ], -} - -index_group: Dict[str, Any] = { - "name": "Package Index Options", - "options": [ - index_url, - extra_index_url, - no_index, - find_links, - ], -} diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py deleted file mode 100644 index 139995a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py +++ /dev/null @@ -1,27 +0,0 @@ -from contextlib import ExitStack, contextmanager -from typing import ContextManager, Generator, TypeVar - -_T = TypeVar("_T", covariant=True) - - -class CommandContextMixIn: - def __init__(self) -> None: - super().__init__() - self._in_main_context = False - self._main_context = ExitStack() - - @contextmanager - def main_context(self) -> Generator[None, None, None]: - assert not self._in_main_context - - self._in_main_context = True - try: - with self._main_context: - yield - finally: - self._in_main_context = False - - def enter_context(self, context_provider: ContextManager[_T]) -> _T: - assert self._in_main_context - - return self._main_context.enter_context(context_provider) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/index_command.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/index_command.py deleted file mode 100644 index 295108e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/index_command.py +++ /dev/null @@ -1,171 +0,0 @@ -""" -Contains command classes which may interact with an index / the network. - -Unlike its sister module, req_command, this module still uses lazy imports -so commands which don't always hit the network (e.g. list w/o --outdated or ---uptodate) don't need waste time importing PipSession and friends. -""" - -import logging -import os -import sys -from optparse import Values -from typing import TYPE_CHECKING, List, Optional - -from pip._vendor import certifi - -from pip._internal.cli.base_command import Command -from pip._internal.cli.command_context import CommandContextMixIn - -if TYPE_CHECKING: - from ssl import SSLContext - - from pip._internal.network.session import PipSession - -logger = logging.getLogger(__name__) - - -def _create_truststore_ssl_context() -> Optional["SSLContext"]: - if sys.version_info < (3, 10): - logger.debug("Disabling truststore because Python version isn't 3.10+") - return None - - try: - import ssl - except ImportError: - logger.warning("Disabling truststore since ssl support is missing") - return None - - try: - from pip._vendor import truststore - except ImportError: - logger.warning("Disabling truststore because platform isn't supported") - return None - - ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - ctx.load_verify_locations(certifi.where()) - return ctx - - -class SessionCommandMixin(CommandContextMixIn): - """ - A class mixin for command classes needing _build_session(). - """ - - def __init__(self) -> None: - super().__init__() - self._session: Optional[PipSession] = None - - @classmethod - def _get_index_urls(cls, options: Values) -> Optional[List[str]]: - """Return a list of index urls from user-provided options.""" - index_urls = [] - if not getattr(options, "no_index", False): - url = getattr(options, "index_url", None) - if url: - index_urls.append(url) - urls = getattr(options, "extra_index_urls", None) - if urls: - index_urls.extend(urls) - # Return None rather than an empty list - return index_urls or None - - def get_default_session(self, options: Values) -> "PipSession": - """Get a default-managed session.""" - if self._session is None: - self._session = self.enter_context(self._build_session(options)) - # there's no type annotation on requests.Session, so it's - # automatically ContextManager[Any] and self._session becomes Any, - # then https://github.com/python/mypy/issues/7696 kicks in - assert self._session is not None - return self._session - - def _build_session( - self, - options: Values, - retries: Optional[int] = None, - timeout: Optional[int] = None, - ) -> "PipSession": - from pip._internal.network.session import PipSession - - cache_dir = options.cache_dir - assert not cache_dir or os.path.isabs(cache_dir) - - if "legacy-certs" not in options.deprecated_features_enabled: - ssl_context = _create_truststore_ssl_context() - else: - ssl_context = None - - session = PipSession( - cache=os.path.join(cache_dir, "http-v2") if cache_dir else None, - retries=retries if retries is not None else options.retries, - trusted_hosts=options.trusted_hosts, - index_urls=self._get_index_urls(options), - ssl_context=ssl_context, - ) - - # Handle custom ca-bundles from the user - if options.cert: - session.verify = options.cert - - # Handle SSL client certificate - if options.client_cert: - session.cert = options.client_cert - - # Handle timeouts - if options.timeout or timeout: - session.timeout = timeout if timeout is not None else options.timeout - - # Handle configured proxies - if options.proxy: - session.proxies = { - "http": options.proxy, - "https": options.proxy, - } - session.trust_env = False - session.pip_proxy = options.proxy - - # Determine if we can prompt the user for authentication or not - session.auth.prompting = not options.no_input - session.auth.keyring_provider = options.keyring_provider - - return session - - -def _pip_self_version_check(session: "PipSession", options: Values) -> None: - from pip._internal.self_outdated_check import pip_self_version_check as check - - check(session, options) - - -class IndexGroupCommand(Command, SessionCommandMixin): - """ - Abstract base class for commands with the index_group options. - - This also corresponds to the commands that permit the pip version check. - """ - - def handle_pip_version_check(self, options: Values) -> None: - """ - Do the pip version check if not disabled. - - This overrides the default behavior of not doing the check. - """ - # Make sure the index_group options are present. - assert hasattr(options, "no_index") - - if options.disable_pip_version_check or options.no_index: - return - - try: - # Otherwise, check if we're using the latest version of pip available. - session = self._build_session( - options, - retries=0, - timeout=min(5, options.timeout), - ) - with session: - _pip_self_version_check(session, options) - except Exception: - logger.warning("There was an error checking the latest version of pip.") - logger.debug("See below for error", exc_info=True) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/main.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/main.py deleted file mode 100644 index 563ac79..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/main.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Primary application entrypoint. -""" - -import locale -import logging -import os -import sys -import warnings -from typing import List, Optional - -from pip._internal.cli.autocompletion import autocomplete -from pip._internal.cli.main_parser import parse_command -from pip._internal.commands import create_command -from pip._internal.exceptions import PipError -from pip._internal.utils import deprecation - -logger = logging.getLogger(__name__) - - -# Do not import and use main() directly! Using it directly is actively -# discouraged by pip's maintainers. The name, location and behavior of -# this function is subject to change, so calling it directly is not -# portable across different pip versions. - -# In addition, running pip in-process is unsupported and unsafe. This is -# elaborated in detail at -# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program. -# That document also provides suggestions that should work for nearly -# all users that are considering importing and using main() directly. - -# However, we know that certain users will still want to invoke pip -# in-process. If you understand and accept the implications of using pip -# in an unsupported manner, the best approach is to use runpy to avoid -# depending on the exact location of this entry point. - -# The following example shows how to use runpy to invoke pip in that -# case: -# -# sys.argv = ["pip", your, args, here] -# runpy.run_module("pip", run_name="__main__") -# -# Note that this will exit the process after running, unlike a direct -# call to main. As it is not safe to do any processing after calling -# main, this should not be an issue in practice. - - -def main(args: Optional[List[str]] = None) -> int: - if args is None: - args = sys.argv[1:] - - # Suppress the pkg_resources deprecation warning - # Note - we use a module of .*pkg_resources to cover - # the normal case (pip._vendor.pkg_resources) and the - # devendored case (a bare pkg_resources) - warnings.filterwarnings( - action="ignore", category=DeprecationWarning, module=".*pkg_resources" - ) - - # Configure our deprecation warnings to be sent through loggers - deprecation.install_warning_logger() - - autocomplete() - - try: - cmd_name, cmd_args = parse_command(args) - except PipError as exc: - sys.stderr.write(f"ERROR: {exc}") - sys.stderr.write(os.linesep) - sys.exit(1) - - # Needed for locale.getpreferredencoding(False) to work - # in pip._internal.utils.encoding.auto_decode - try: - locale.setlocale(locale.LC_ALL, "") - except locale.Error as e: - # setlocale can apparently crash if locale are uninitialized - logger.debug("Ignoring error %s when setting locale", e) - command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) - - return command.main(cmd_args) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py deleted file mode 100644 index 5ade356..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py +++ /dev/null @@ -1,134 +0,0 @@ -"""A single place for constructing and exposing the main parser -""" - -import os -import subprocess -import sys -from typing import List, Optional, Tuple - -from pip._internal.build_env import get_runnable_pip -from pip._internal.cli import cmdoptions -from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter -from pip._internal.commands import commands_dict, get_similar_commands -from pip._internal.exceptions import CommandError -from pip._internal.utils.misc import get_pip_version, get_prog - -__all__ = ["create_main_parser", "parse_command"] - - -def create_main_parser() -> ConfigOptionParser: - """Creates and returns the main parser for pip's CLI""" - - parser = ConfigOptionParser( - usage="\n%prog [options]", - add_help_option=False, - formatter=UpdatingDefaultsHelpFormatter(), - name="global", - prog=get_prog(), - ) - parser.disable_interspersed_args() - - parser.version = get_pip_version() - - # add the general options - gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) - parser.add_option_group(gen_opts) - - # so the help formatter knows - parser.main = True # type: ignore - - # create command listing for description - description = [""] + [ - f"{name:27} {command_info.summary}" - for name, command_info in commands_dict.items() - ] - parser.description = "\n".join(description) - - return parser - - -def identify_python_interpreter(python: str) -> Optional[str]: - # If the named file exists, use it. - # If it's a directory, assume it's a virtual environment and - # look for the environment's Python executable. - if os.path.exists(python): - if os.path.isdir(python): - # bin/python for Unix, Scripts/python.exe for Windows - # Try both in case of odd cases like cygwin. - for exe in ("bin/python", "Scripts/python.exe"): - py = os.path.join(python, exe) - if os.path.exists(py): - return py - else: - return python - - # Could not find the interpreter specified - return None - - -def parse_command(args: List[str]) -> Tuple[str, List[str]]: - parser = create_main_parser() - - # Note: parser calls disable_interspersed_args(), so the result of this - # call is to split the initial args into the general options before the - # subcommand and everything else. - # For example: - # args: ['--timeout=5', 'install', '--user', 'INITools'] - # general_options: ['--timeout==5'] - # args_else: ['install', '--user', 'INITools'] - general_options, args_else = parser.parse_args(args) - - # --python - if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: - # Re-invoke pip using the specified Python interpreter - interpreter = identify_python_interpreter(general_options.python) - if interpreter is None: - raise CommandError( - f"Could not locate Python interpreter {general_options.python}" - ) - - pip_cmd = [ - interpreter, - get_runnable_pip(), - ] - pip_cmd.extend(args) - - # Set a flag so the child doesn't re-invoke itself, causing - # an infinite loop. - os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1" - returncode = 0 - try: - proc = subprocess.run(pip_cmd) - returncode = proc.returncode - except (subprocess.SubprocessError, OSError) as exc: - raise CommandError(f"Failed to run pip under {interpreter}: {exc}") - sys.exit(returncode) - - # --version - if general_options.version: - sys.stdout.write(parser.version) - sys.stdout.write(os.linesep) - sys.exit() - - # pip || pip help -> print_help() - if not args_else or (args_else[0] == "help" and len(args_else) == 1): - parser.print_help() - sys.exit() - - # the subcommand name - cmd_name = args_else[0] - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = [f'unknown command "{cmd_name}"'] - if guess: - msg.append(f'maybe you meant "{guess}"') - - raise CommandError(" - ".join(msg)) - - # all the args without the subcommand - cmd_args = args[:] - cmd_args.remove(cmd_name) - - return cmd_name, cmd_args diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/parser.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/parser.py deleted file mode 100644 index bc4aca0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/parser.py +++ /dev/null @@ -1,294 +0,0 @@ -"""Base option parser setup""" - -import logging -import optparse -import shutil -import sys -import textwrap -from contextlib import suppress -from typing import Any, Dict, Generator, List, NoReturn, Optional, Tuple - -from pip._internal.cli.status_codes import UNKNOWN_ERROR -from pip._internal.configuration import Configuration, ConfigurationError -from pip._internal.utils.misc import redact_auth_from_url, strtobool - -logger = logging.getLogger(__name__) - - -class PrettyHelpFormatter(optparse.IndentedHelpFormatter): - """A prettier/less verbose help formatter for optparse.""" - - def __init__(self, *args: Any, **kwargs: Any) -> None: - # help position must be aligned with __init__.parseopts.description - kwargs["max_help_position"] = 30 - kwargs["indent_increment"] = 1 - kwargs["width"] = shutil.get_terminal_size()[0] - 2 - super().__init__(*args, **kwargs) - - def format_option_strings(self, option: optparse.Option) -> str: - return self._format_option_strings(option) - - def _format_option_strings( - self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", " - ) -> str: - """ - Return a comma-separated list of option strings and metavars. - - :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') - :param mvarfmt: metavar format string - :param optsep: separator - """ - opts = [] - - if option._short_opts: - opts.append(option._short_opts[0]) - if option._long_opts: - opts.append(option._long_opts[0]) - if len(opts) > 1: - opts.insert(1, optsep) - - if option.takes_value(): - assert option.dest is not None - metavar = option.metavar or option.dest.lower() - opts.append(mvarfmt.format(metavar.lower())) - - return "".join(opts) - - def format_heading(self, heading: str) -> str: - if heading == "Options": - return "" - return heading + ":\n" - - def format_usage(self, usage: str) -> str: - """ - Ensure there is only one newline between usage and the first heading - if there is no description. - """ - msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " ")) - return msg - - def format_description(self, description: Optional[str]) -> str: - # leave full control over description to us - if description: - if hasattr(self.parser, "main"): - label = "Commands" - else: - label = "Description" - # some doc strings have initial newlines, some don't - description = description.lstrip("\n") - # some doc strings have final newlines and spaces, some don't - description = description.rstrip() - # dedent, then reindent - description = self.indent_lines(textwrap.dedent(description), " ") - description = f"{label}:\n{description}\n" - return description - else: - return "" - - def format_epilog(self, epilog: Optional[str]) -> str: - # leave full control over epilog to us - if epilog: - return epilog - else: - return "" - - def indent_lines(self, text: str, indent: str) -> str: - new_lines = [indent + line for line in text.split("\n")] - return "\n".join(new_lines) - - -class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): - """Custom help formatter for use in ConfigOptionParser. - - This is updates the defaults before expanding them, allowing - them to show up correctly in the help listing. - - Also redact auth from url type options - """ - - def expand_default(self, option: optparse.Option) -> str: - default_values = None - if self.parser is not None: - assert isinstance(self.parser, ConfigOptionParser) - self.parser._update_defaults(self.parser.defaults) - assert option.dest is not None - default_values = self.parser.defaults.get(option.dest) - help_text = super().expand_default(option) - - if default_values and option.metavar == "URL": - if isinstance(default_values, str): - default_values = [default_values] - - # If its not a list, we should abort and just return the help text - if not isinstance(default_values, list): - default_values = [] - - for val in default_values: - help_text = help_text.replace(val, redact_auth_from_url(val)) - - return help_text - - -class CustomOptionParser(optparse.OptionParser): - def insert_option_group( - self, idx: int, *args: Any, **kwargs: Any - ) -> optparse.OptionGroup: - """Insert an OptionGroup at a given position.""" - group = self.add_option_group(*args, **kwargs) - - self.option_groups.pop() - self.option_groups.insert(idx, group) - - return group - - @property - def option_list_all(self) -> List[optparse.Option]: - """Get a list of all options, including those in option groups.""" - res = self.option_list[:] - for i in self.option_groups: - res.extend(i.option_list) - - return res - - -class ConfigOptionParser(CustomOptionParser): - """Custom option parser which updates its defaults by checking the - configuration files and environmental variables""" - - def __init__( - self, - *args: Any, - name: str, - isolated: bool = False, - **kwargs: Any, - ) -> None: - self.name = name - self.config = Configuration(isolated) - - assert self.name - super().__init__(*args, **kwargs) - - def check_default(self, option: optparse.Option, key: str, val: Any) -> Any: - try: - return option.check_value(key, val) - except optparse.OptionValueError as exc: - print(f"An error occurred during configuration: {exc}") - sys.exit(3) - - def _get_ordered_configuration_items( - self, - ) -> Generator[Tuple[str, Any], None, None]: - # Configuration gives keys in an unordered manner. Order them. - override_order = ["global", self.name, ":env:"] - - # Pool the options into different groups - section_items: Dict[str, List[Tuple[str, Any]]] = { - name: [] for name in override_order - } - for section_key, val in self.config.items(): - # ignore empty values - if not val: - logger.debug( - "Ignoring configuration key '%s' as it's value is empty.", - section_key, - ) - continue - - section, key = section_key.split(".", 1) - if section in override_order: - section_items[section].append((key, val)) - - # Yield each group in their override order - for section in override_order: - for key, val in section_items[section]: - yield key, val - - def _update_defaults(self, defaults: Dict[str, Any]) -> Dict[str, Any]: - """Updates the given defaults with values from the config files and - the environ. Does a little special handling for certain types of - options (lists).""" - - # Accumulate complex default state. - self.values = optparse.Values(self.defaults) - late_eval = set() - # Then set the options with those values - for key, val in self._get_ordered_configuration_items(): - # '--' because configuration supports only long names - option = self.get_option("--" + key) - - # Ignore options not present in this parser. E.g. non-globals put - # in [global] by users that want them to apply to all applicable - # commands. - if option is None: - continue - - assert option.dest is not None - - if option.action in ("store_true", "store_false"): - try: - val = strtobool(val) - except ValueError: - self.error( - f"{val} is not a valid value for {key} option, " - "please specify a boolean value like yes/no, " - "true/false or 1/0 instead." - ) - elif option.action == "count": - with suppress(ValueError): - val = strtobool(val) - with suppress(ValueError): - val = int(val) - if not isinstance(val, int) or val < 0: - self.error( - f"{val} is not a valid value for {key} option, " - "please instead specify either a non-negative integer " - "or a boolean value like yes/no or false/true " - "which is equivalent to 1/0." - ) - elif option.action == "append": - val = val.split() - val = [self.check_default(option, key, v) for v in val] - elif option.action == "callback": - assert option.callback is not None - late_eval.add(option.dest) - opt_str = option.get_opt_string() - val = option.convert_value(opt_str, val) - # From take_action - args = option.callback_args or () - kwargs = option.callback_kwargs or {} - option.callback(option, opt_str, val, self, *args, **kwargs) - else: - val = self.check_default(option, key, val) - - defaults[option.dest] = val - - for key in late_eval: - defaults[key] = getattr(self.values, key) - self.values = None - return defaults - - def get_default_values(self) -> optparse.Values: - """Overriding to make updating the defaults after instantiation of - the option parser possible, _update_defaults() does the dirty work.""" - if not self.process_default_values: - # Old, pre-Optik 1.5 behaviour. - return optparse.Values(self.defaults) - - # Load the configuration, or error out in case of an error - try: - self.config.load() - except ConfigurationError as err: - self.exit(UNKNOWN_ERROR, str(err)) - - defaults = self._update_defaults(self.defaults.copy()) # ours - for option in self._get_all_options(): - assert option.dest is not None - default = defaults.get(option.dest) - if isinstance(default, str): - opt_str = option.get_opt_string() - defaults[option.dest] = option.check_value(opt_str, default) - return optparse.Values(defaults) - - def error(self, msg: str) -> NoReturn: - self.print_usage(sys.stderr) - self.exit(UNKNOWN_ERROR, f"{msg}\n") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py deleted file mode 100644 index 3d9dde8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py +++ /dev/null @@ -1,94 +0,0 @@ -import functools -import sys -from typing import Callable, Generator, Iterable, Iterator, Optional, Tuple - -from pip._vendor.rich.progress import ( - BarColumn, - DownloadColumn, - FileSizeColumn, - Progress, - ProgressColumn, - SpinnerColumn, - TextColumn, - TimeElapsedColumn, - TimeRemainingColumn, - TransferSpeedColumn, -) - -from pip._internal.cli.spinners import RateLimiter -from pip._internal.utils.logging import get_indentation - -DownloadProgressRenderer = Callable[[Iterable[bytes]], Iterator[bytes]] - - -def _rich_progress_bar( - iterable: Iterable[bytes], - *, - bar_type: str, - size: Optional[int], -) -> Generator[bytes, None, None]: - assert bar_type == "on", "This should only be used in the default mode." - - if not size: - total = float("inf") - columns: Tuple[ProgressColumn, ...] = ( - TextColumn("[progress.description]{task.description}"), - SpinnerColumn("line", speed=1.5), - FileSizeColumn(), - TransferSpeedColumn(), - TimeElapsedColumn(), - ) - else: - total = size - columns = ( - TextColumn("[progress.description]{task.description}"), - BarColumn(), - DownloadColumn(), - TransferSpeedColumn(), - TextColumn("eta"), - TimeRemainingColumn(), - ) - - progress = Progress(*columns, refresh_per_second=5) - task_id = progress.add_task(" " * (get_indentation() + 2), total=total) - with progress: - for chunk in iterable: - yield chunk - progress.update(task_id, advance=len(chunk)) - - -def _raw_progress_bar( - iterable: Iterable[bytes], - *, - size: Optional[int], -) -> Generator[bytes, None, None]: - def write_progress(current: int, total: int) -> None: - sys.stdout.write(f"Progress {current} of {total}\n") - sys.stdout.flush() - - current = 0 - total = size or 0 - rate_limiter = RateLimiter(0.25) - - write_progress(current, total) - for chunk in iterable: - current += len(chunk) - if rate_limiter.ready() or current == total: - write_progress(current, total) - rate_limiter.reset() - yield chunk - - -def get_download_progress_renderer( - *, bar_type: str, size: Optional[int] = None -) -> DownloadProgressRenderer: - """Get an object that can be used to render the download progress. - - Returns a callable, that takes an iterable to "wrap". - """ - if bar_type == "on": - return functools.partial(_rich_progress_bar, bar_type=bar_type, size=size) - elif bar_type == "raw": - return functools.partial(_raw_progress_bar, size=size) - else: - return iter # no-op, when passed an iterator diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py deleted file mode 100644 index 92900f9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py +++ /dev/null @@ -1,329 +0,0 @@ -"""Contains the RequirementCommand base class. - -This class is in a separate module so the commands that do not always -need PackageFinder capability don't unnecessarily import the -PackageFinder machinery and all its vendored dependencies, etc. -""" - -import logging -from functools import partial -from optparse import Values -from typing import Any, List, Optional, Tuple - -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.index_command import IndexGroupCommand -from pip._internal.cli.index_command import SessionCommandMixin as SessionCommandMixin -from pip._internal.exceptions import CommandError, PreviousBuildDirError -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.network.session import PipSession -from pip._internal.operations.build.build_tracker import BuildTracker -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, - install_req_from_parsed_requirement, - install_req_from_req_string, -) -from pip._internal.req.req_file import parse_requirements -from pip._internal.req.req_install import InstallRequirement -from pip._internal.resolution.base import BaseResolver -from pip._internal.utils.temp_dir import ( - TempDirectory, - TempDirectoryTypeRegistry, - tempdir_kinds, -) - -logger = logging.getLogger(__name__) - - -KEEPABLE_TEMPDIR_TYPES = [ - tempdir_kinds.BUILD_ENV, - tempdir_kinds.EPHEM_WHEEL_CACHE, - tempdir_kinds.REQ_BUILD, -] - - -def with_cleanup(func: Any) -> Any: - """Decorator for common logic related to managing temporary - directories. - """ - - def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None: - for t in KEEPABLE_TEMPDIR_TYPES: - registry.set_delete(t, False) - - def wrapper( - self: RequirementCommand, options: Values, args: List[Any] - ) -> Optional[int]: - assert self.tempdir_registry is not None - if options.no_clean: - configure_tempdir_registry(self.tempdir_registry) - - try: - return func(self, options, args) - except PreviousBuildDirError: - # This kind of conflict can occur when the user passes an explicit - # build directory with a pre-existing folder. In that case we do - # not want to accidentally remove it. - configure_tempdir_registry(self.tempdir_registry) - raise - - return wrapper - - -class RequirementCommand(IndexGroupCommand): - def __init__(self, *args: Any, **kw: Any) -> None: - super().__init__(*args, **kw) - - self.cmd_opts.add_option(cmdoptions.no_clean()) - - @staticmethod - def determine_resolver_variant(options: Values) -> str: - """Determines which resolver should be used, based on the given options.""" - if "legacy-resolver" in options.deprecated_features_enabled: - return "legacy" - - return "resolvelib" - - @classmethod - def make_requirement_preparer( - cls, - temp_build_dir: TempDirectory, - options: Values, - build_tracker: BuildTracker, - session: PipSession, - finder: PackageFinder, - use_user_site: bool, - download_dir: Optional[str] = None, - verbosity: int = 0, - ) -> RequirementPreparer: - """ - Create a RequirementPreparer instance for the given parameters. - """ - temp_build_dir_path = temp_build_dir.path - assert temp_build_dir_path is not None - legacy_resolver = False - - resolver_variant = cls.determine_resolver_variant(options) - if resolver_variant == "resolvelib": - lazy_wheel = "fast-deps" in options.features_enabled - if lazy_wheel: - logger.warning( - "pip is using lazily downloaded wheels using HTTP " - "range requests to obtain dependency information. " - "This experimental feature is enabled through " - "--use-feature=fast-deps and it is not ready for " - "production." - ) - else: - legacy_resolver = True - lazy_wheel = False - if "fast-deps" in options.features_enabled: - logger.warning( - "fast-deps has no effect when used with the legacy resolver." - ) - - return RequirementPreparer( - build_dir=temp_build_dir_path, - src_dir=options.src_dir, - download_dir=download_dir, - build_isolation=options.build_isolation, - check_build_deps=options.check_build_deps, - build_tracker=build_tracker, - session=session, - progress_bar=options.progress_bar, - finder=finder, - require_hashes=options.require_hashes, - use_user_site=use_user_site, - lazy_wheel=lazy_wheel, - verbosity=verbosity, - legacy_resolver=legacy_resolver, - ) - - @classmethod - def make_resolver( - cls, - preparer: RequirementPreparer, - finder: PackageFinder, - options: Values, - wheel_cache: Optional[WheelCache] = None, - use_user_site: bool = False, - ignore_installed: bool = True, - ignore_requires_python: bool = False, - force_reinstall: bool = False, - upgrade_strategy: str = "to-satisfy-only", - use_pep517: Optional[bool] = None, - py_version_info: Optional[Tuple[int, ...]] = None, - ) -> BaseResolver: - """ - Create a Resolver instance for the given parameters. - """ - make_install_req = partial( - install_req_from_req_string, - isolated=options.isolated_mode, - use_pep517=use_pep517, - ) - resolver_variant = cls.determine_resolver_variant(options) - # The long import name and duplicated invocation is needed to convince - # Mypy into correctly typechecking. Otherwise it would complain the - # "Resolver" class being redefined. - if resolver_variant == "resolvelib": - import pip._internal.resolution.resolvelib.resolver - - return pip._internal.resolution.resolvelib.resolver.Resolver( - preparer=preparer, - finder=finder, - wheel_cache=wheel_cache, - make_install_req=make_install_req, - use_user_site=use_user_site, - ignore_dependencies=options.ignore_dependencies, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - force_reinstall=force_reinstall, - upgrade_strategy=upgrade_strategy, - py_version_info=py_version_info, - ) - import pip._internal.resolution.legacy.resolver - - return pip._internal.resolution.legacy.resolver.Resolver( - preparer=preparer, - finder=finder, - wheel_cache=wheel_cache, - make_install_req=make_install_req, - use_user_site=use_user_site, - ignore_dependencies=options.ignore_dependencies, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - force_reinstall=force_reinstall, - upgrade_strategy=upgrade_strategy, - py_version_info=py_version_info, - ) - - def get_requirements( - self, - args: List[str], - options: Values, - finder: PackageFinder, - session: PipSession, - ) -> List[InstallRequirement]: - """ - Parse command-line arguments into the corresponding requirements. - """ - requirements: List[InstallRequirement] = [] - for filename in options.constraints: - for parsed_req in parse_requirements( - filename, - constraint=True, - finder=finder, - options=options, - session=session, - ): - req_to_add = install_req_from_parsed_requirement( - parsed_req, - isolated=options.isolated_mode, - user_supplied=False, - ) - requirements.append(req_to_add) - - for req in args: - req_to_add = install_req_from_line( - req, - comes_from=None, - isolated=options.isolated_mode, - use_pep517=options.use_pep517, - user_supplied=True, - config_settings=getattr(options, "config_settings", None), - ) - requirements.append(req_to_add) - - for req in options.editables: - req_to_add = install_req_from_editable( - req, - user_supplied=True, - isolated=options.isolated_mode, - use_pep517=options.use_pep517, - config_settings=getattr(options, "config_settings", None), - ) - requirements.append(req_to_add) - - # NOTE: options.require_hashes may be set if --require-hashes is True - for filename in options.requirements: - for parsed_req in parse_requirements( - filename, finder=finder, options=options, session=session - ): - req_to_add = install_req_from_parsed_requirement( - parsed_req, - isolated=options.isolated_mode, - use_pep517=options.use_pep517, - user_supplied=True, - config_settings=( - parsed_req.options.get("config_settings") - if parsed_req.options - else None - ), - ) - requirements.append(req_to_add) - - # If any requirement has hash options, enable hash checking. - if any(req.has_hash_options for req in requirements): - options.require_hashes = True - - if not (args or options.editables or options.requirements): - opts = {"name": self.name} - if options.find_links: - raise CommandError( - "You must give at least one requirement to {name} " - '(maybe you meant "pip {name} {links}"?)'.format( - **dict(opts, links=" ".join(options.find_links)) - ) - ) - else: - raise CommandError( - "You must give at least one requirement to {name} " - '(see "pip help {name}")'.format(**opts) - ) - - return requirements - - @staticmethod - def trace_basic_info(finder: PackageFinder) -> None: - """ - Trace basic information about the provided objects. - """ - # Display where finder is looking for packages - search_scope = finder.search_scope - locations = search_scope.get_formatted_locations() - if locations: - logger.info(locations) - - def _build_package_finder( - self, - options: Values, - session: PipSession, - target_python: Optional[TargetPython] = None, - ignore_requires_python: Optional[bool] = None, - ) -> PackageFinder: - """ - Create a package finder appropriate to this requirement command. - - :param ignore_requires_python: Whether to ignore incompatible - "Requires-Python" values in links. Defaults to False. - """ - link_collector = LinkCollector.create(session, options=options) - selection_prefs = SelectionPreferences( - allow_yanked=True, - format_control=options.format_control, - allow_all_prereleases=options.pre, - prefer_binary=options.prefer_binary, - ignore_requires_python=ignore_requires_python, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - target_python=target_python, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py deleted file mode 100644 index cf2b976..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py +++ /dev/null @@ -1,159 +0,0 @@ -import contextlib -import itertools -import logging -import sys -import time -from typing import IO, Generator, Optional - -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.logging import get_indentation - -logger = logging.getLogger(__name__) - - -class SpinnerInterface: - def spin(self) -> None: - raise NotImplementedError() - - def finish(self, final_status: str) -> None: - raise NotImplementedError() - - -class InteractiveSpinner(SpinnerInterface): - def __init__( - self, - message: str, - file: Optional[IO[str]] = None, - spin_chars: str = "-\\|/", - # Empirically, 8 updates/second looks nice - min_update_interval_seconds: float = 0.125, - ): - self._message = message - if file is None: - file = sys.stdout - self._file = file - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._finished = False - - self._spin_cycle = itertools.cycle(spin_chars) - - self._file.write(" " * get_indentation() + self._message + " ... ") - self._width = 0 - - def _write(self, status: str) -> None: - assert not self._finished - # Erase what we wrote before by backspacing to the beginning, writing - # spaces to overwrite the old text, and then backspacing again - backup = "\b" * self._width - self._file.write(backup + " " * self._width + backup) - # Now we have a blank slate to add our status - self._file.write(status) - self._width = len(status) - self._file.flush() - self._rate_limiter.reset() - - def spin(self) -> None: - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._write(next(self._spin_cycle)) - - def finish(self, final_status: str) -> None: - if self._finished: - return - self._write(final_status) - self._file.write("\n") - self._file.flush() - self._finished = True - - -# Used for dumb terminals, non-interactive installs (no tty), etc. -# We still print updates occasionally (once every 60 seconds by default) to -# act as a keep-alive for systems like Travis-CI that take lack-of-output as -# an indication that a task has frozen. -class NonInteractiveSpinner(SpinnerInterface): - def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None: - self._message = message - self._finished = False - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._update("started") - - def _update(self, status: str) -> None: - assert not self._finished - self._rate_limiter.reset() - logger.info("%s: %s", self._message, status) - - def spin(self) -> None: - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._update("still running...") - - def finish(self, final_status: str) -> None: - if self._finished: - return - self._update(f"finished with status '{final_status}'") - self._finished = True - - -class RateLimiter: - def __init__(self, min_update_interval_seconds: float) -> None: - self._min_update_interval_seconds = min_update_interval_seconds - self._last_update: float = 0 - - def ready(self) -> bool: - now = time.time() - delta = now - self._last_update - return delta >= self._min_update_interval_seconds - - def reset(self) -> None: - self._last_update = time.time() - - -@contextlib.contextmanager -def open_spinner(message: str) -> Generator[SpinnerInterface, None, None]: - # Interactive spinner goes directly to sys.stdout rather than being routed - # through the logging system, but it acts like it has level INFO, - # i.e. it's only displayed if we're at level INFO or better. - # Non-interactive spinner goes through the logging system, so it is always - # in sync with logging configuration. - if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: - spinner: SpinnerInterface = InteractiveSpinner(message) - else: - spinner = NonInteractiveSpinner(message) - try: - with hidden_cursor(sys.stdout): - yield spinner - except KeyboardInterrupt: - spinner.finish("canceled") - raise - except Exception: - spinner.finish("error") - raise - else: - spinner.finish("done") - - -HIDE_CURSOR = "\x1b[?25l" -SHOW_CURSOR = "\x1b[?25h" - - -@contextlib.contextmanager -def hidden_cursor(file: IO[str]) -> Generator[None, None, None]: - # The Windows terminal does not support the hide/show cursor ANSI codes, - # even via colorama. So don't even try. - if WINDOWS: - yield - # We don't want to clutter the output with control characters if we're - # writing to a file, or if the user is running with --quiet. - # See https://github.com/pypa/pip/issues/3418 - elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: - yield - else: - file.write(HIDE_CURSOR) - try: - yield - finally: - file.write(SHOW_CURSOR) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py b/myenv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py deleted file mode 100644 index 5e29502..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py +++ /dev/null @@ -1,6 +0,0 @@ -SUCCESS = 0 -ERROR = 1 -UNKNOWN_ERROR = 2 -VIRTUALENV_NOT_FOUND = 3 -PREVIOUS_BUILD_DIR_ERROR = 4 -NO_MATCHES_FOUND = 23 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py deleted file mode 100644 index 858a410..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -Package containing all pip commands -""" - -import importlib -from collections import namedtuple -from typing import Any, Dict, Optional - -from pip._internal.cli.base_command import Command - -CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") - -# This dictionary does a bunch of heavy lifting for help output: -# - Enables avoiding additional (costly) imports for presenting `--help`. -# - The ordering matters for help display. -# -# Even though the module path starts with the same "pip._internal.commands" -# prefix, the full path makes testing easier (specifically when modifying -# `commands_dict` in test setup / teardown). -commands_dict: Dict[str, CommandInfo] = { - "install": CommandInfo( - "pip._internal.commands.install", - "InstallCommand", - "Install packages.", - ), - "download": CommandInfo( - "pip._internal.commands.download", - "DownloadCommand", - "Download packages.", - ), - "uninstall": CommandInfo( - "pip._internal.commands.uninstall", - "UninstallCommand", - "Uninstall packages.", - ), - "freeze": CommandInfo( - "pip._internal.commands.freeze", - "FreezeCommand", - "Output installed packages in requirements format.", - ), - "inspect": CommandInfo( - "pip._internal.commands.inspect", - "InspectCommand", - "Inspect the python environment.", - ), - "list": CommandInfo( - "pip._internal.commands.list", - "ListCommand", - "List installed packages.", - ), - "show": CommandInfo( - "pip._internal.commands.show", - "ShowCommand", - "Show information about installed packages.", - ), - "check": CommandInfo( - "pip._internal.commands.check", - "CheckCommand", - "Verify installed packages have compatible dependencies.", - ), - "config": CommandInfo( - "pip._internal.commands.configuration", - "ConfigurationCommand", - "Manage local and global configuration.", - ), - "search": CommandInfo( - "pip._internal.commands.search", - "SearchCommand", - "Search PyPI for packages.", - ), - "cache": CommandInfo( - "pip._internal.commands.cache", - "CacheCommand", - "Inspect and manage pip's wheel cache.", - ), - "index": CommandInfo( - "pip._internal.commands.index", - "IndexCommand", - "Inspect information available from package indexes.", - ), - "wheel": CommandInfo( - "pip._internal.commands.wheel", - "WheelCommand", - "Build wheels from your requirements.", - ), - "hash": CommandInfo( - "pip._internal.commands.hash", - "HashCommand", - "Compute hashes of package archives.", - ), - "completion": CommandInfo( - "pip._internal.commands.completion", - "CompletionCommand", - "A helper command used for command completion.", - ), - "debug": CommandInfo( - "pip._internal.commands.debug", - "DebugCommand", - "Show information useful for debugging.", - ), - "help": CommandInfo( - "pip._internal.commands.help", - "HelpCommand", - "Show help for commands.", - ), -} - - -def create_command(name: str, **kwargs: Any) -> Command: - """ - Create an instance of the Command class with the given name. - """ - module_path, class_name, summary = commands_dict[name] - module = importlib.import_module(module_path) - command_class = getattr(module, class_name) - command = command_class(name=name, summary=summary, **kwargs) - - return command - - -def get_similar_commands(name: str) -> Optional[str]: - """Command name auto-correct.""" - from difflib import get_close_matches - - name = name.lower() - - close_commands = get_close_matches(name, commands_dict.keys()) - - if close_commands: - return close_commands[0] - else: - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 64711a2..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc deleted file mode 100644 index 917904e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc deleted file mode 100644 index d2172bc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc deleted file mode 100644 index 6be54e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc deleted file mode 100644 index b6534e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc deleted file mode 100644 index 429198c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc deleted file mode 100644 index 536195d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc deleted file mode 100644 index 75b0f0c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc deleted file mode 100644 index 3674afe..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc deleted file mode 100644 index d714956..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc deleted file mode 100644 index d381540..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc deleted file mode 100644 index f9a9e4b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc deleted file mode 100644 index e61895f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc deleted file mode 100644 index d3d3ad6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc deleted file mode 100644 index d2f700c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc deleted file mode 100644 index 755b490..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc deleted file mode 100644 index ce61ebc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index 168c062..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/cache.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/cache.py deleted file mode 100644 index ad65641..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/cache.py +++ /dev/null @@ -1,228 +0,0 @@ -import os -import textwrap -from optparse import Values -from typing import Any, List - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.exceptions import CommandError, PipError -from pip._internal.utils import filesystem -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import format_size - -logger = getLogger(__name__) - - -class CacheCommand(Command): - """ - Inspect and manage pip's wheel cache. - - Subcommands: - - - dir: Show the cache directory. - - info: Show information about the cache. - - list: List filenames of packages stored in the cache. - - remove: Remove one or more package from the cache. - - purge: Remove all items from the cache. - - ```` can be a glob expression or a package name. - """ - - ignore_require_venv = True - usage = """ - %prog dir - %prog info - %prog list [] [--format=[human, abspath]] - %prog remove - %prog purge - """ - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--format", - action="store", - dest="list_format", - default="human", - choices=("human", "abspath"), - help="Select the output format among: human (default) or abspath", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - handlers = { - "dir": self.get_cache_dir, - "info": self.get_cache_info, - "list": self.list_cache_items, - "remove": self.remove_cache_items, - "purge": self.purge_cache, - } - - if not options.cache_dir: - logger.error("pip cache commands can not function since cache is disabled.") - return ERROR - - # Determine action - if not args or args[0] not in handlers: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handlers)), - ) - return ERROR - - action = args[0] - - # Error handling happens here, not in the action-handlers. - try: - handlers[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def get_cache_dir(self, options: Values, args: List[Any]) -> None: - if args: - raise CommandError("Too many arguments") - - logger.info(options.cache_dir) - - def get_cache_info(self, options: Values, args: List[Any]) -> None: - if args: - raise CommandError("Too many arguments") - - num_http_files = len(self._find_http_files(options)) - num_packages = len(self._find_wheels(options, "*")) - - http_cache_location = self._cache_dir(options, "http-v2") - old_http_cache_location = self._cache_dir(options, "http") - wheels_cache_location = self._cache_dir(options, "wheels") - http_cache_size = filesystem.format_size( - filesystem.directory_size(http_cache_location) - + filesystem.directory_size(old_http_cache_location) - ) - wheels_cache_size = filesystem.format_directory_size(wheels_cache_location) - - message = ( - textwrap.dedent( - """ - Package index page cache location (pip v23.3+): {http_cache_location} - Package index page cache location (older pips): {old_http_cache_location} - Package index page cache size: {http_cache_size} - Number of HTTP files: {num_http_files} - Locally built wheels location: {wheels_cache_location} - Locally built wheels size: {wheels_cache_size} - Number of locally built wheels: {package_count} - """ # noqa: E501 - ) - .format( - http_cache_location=http_cache_location, - old_http_cache_location=old_http_cache_location, - http_cache_size=http_cache_size, - num_http_files=num_http_files, - wheels_cache_location=wheels_cache_location, - package_count=num_packages, - wheels_cache_size=wheels_cache_size, - ) - .strip() - ) - - logger.info(message) - - def list_cache_items(self, options: Values, args: List[Any]) -> None: - if len(args) > 1: - raise CommandError("Too many arguments") - - if args: - pattern = args[0] - else: - pattern = "*" - - files = self._find_wheels(options, pattern) - if options.list_format == "human": - self.format_for_human(files) - else: - self.format_for_abspath(files) - - def format_for_human(self, files: List[str]) -> None: - if not files: - logger.info("No locally built wheels cached.") - return - - results = [] - for filename in files: - wheel = os.path.basename(filename) - size = filesystem.format_file_size(filename) - results.append(f" - {wheel} ({size})") - logger.info("Cache contents:\n") - logger.info("\n".join(sorted(results))) - - def format_for_abspath(self, files: List[str]) -> None: - if files: - logger.info("\n".join(sorted(files))) - - def remove_cache_items(self, options: Values, args: List[Any]) -> None: - if len(args) > 1: - raise CommandError("Too many arguments") - - if not args: - raise CommandError("Please provide a pattern") - - files = self._find_wheels(options, args[0]) - - no_matching_msg = "No matching packages" - if args[0] == "*": - # Only fetch http files if no specific pattern given - files += self._find_http_files(options) - else: - # Add the pattern to the log message - no_matching_msg += f' for pattern "{args[0]}"' - - if not files: - logger.warning(no_matching_msg) - - bytes_removed = 0 - for filename in files: - bytes_removed += os.stat(filename).st_size - os.unlink(filename) - logger.verbose("Removed %s", filename) - logger.info("Files removed: %s (%s)", len(files), format_size(bytes_removed)) - - def purge_cache(self, options: Values, args: List[Any]) -> None: - if args: - raise CommandError("Too many arguments") - - return self.remove_cache_items(options, ["*"]) - - def _cache_dir(self, options: Values, subdir: str) -> str: - return os.path.join(options.cache_dir, subdir) - - def _find_http_files(self, options: Values) -> List[str]: - old_http_dir = self._cache_dir(options, "http") - new_http_dir = self._cache_dir(options, "http-v2") - return filesystem.find_files(old_http_dir, "*") + filesystem.find_files( - new_http_dir, "*" - ) - - def _find_wheels(self, options: Values, pattern: str) -> List[str]: - wheel_dir = self._cache_dir(options, "wheels") - - # The wheel filename format, as specified in PEP 427, is: - # {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl - # - # Additionally, non-alphanumeric values in the distribution are - # normalized to underscores (_), meaning hyphens can never occur - # before `-{version}`. - # - # Given that information: - # - If the pattern we're given contains a hyphen (-), the user is - # providing at least the version. Thus, we can just append `*.whl` - # to match the rest of it. - # - If the pattern we're given doesn't contain a hyphen (-), the - # user is only providing the name. Thus, we append `-*.whl` to - # match the hyphen before the version, followed by anything else. - # - # PEP 427: https://www.python.org/dev/peps/pep-0427/ - pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl") - - return filesystem.find_files(wheel_dir, pattern) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/check.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/check.py deleted file mode 100644 index f54a16d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/check.py +++ /dev/null @@ -1,67 +0,0 @@ -import logging -from optparse import Values -from typing import List - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.metadata import get_default_environment -from pip._internal.operations.check import ( - check_package_set, - check_unsupported, - create_package_set_from_installed, -) -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -class CheckCommand(Command): - """Verify installed packages have compatible dependencies.""" - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def run(self, options: Values, args: List[str]) -> int: - package_set, parsing_probs = create_package_set_from_installed() - missing, conflicting = check_package_set(package_set) - unsupported = list( - check_unsupported( - get_default_environment().iter_installed_distributions(), - get_supported(), - ) - ) - - for project_name in missing: - version = package_set[project_name].version - for dependency in missing[project_name]: - write_output( - "%s %s requires %s, which is not installed.", - project_name, - version, - dependency[0], - ) - - for project_name in conflicting: - version = package_set[project_name].version - for dep_name, dep_version, req in conflicting[project_name]: - write_output( - "%s %s has requirement %s, but you have %s %s.", - project_name, - version, - req, - dep_name, - dep_version, - ) - for package in unsupported: - write_output( - "%s %s is not supported on this platform", - package.raw_name, - package.version, - ) - if missing or conflicting or parsing_probs or unsupported: - return ERROR - else: - write_output("No broken requirements found.") - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/completion.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/completion.py deleted file mode 100644 index 9e89e27..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/completion.py +++ /dev/null @@ -1,130 +0,0 @@ -import sys -import textwrap -from optparse import Values -from typing import List - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.utils.misc import get_prog - -BASE_COMPLETION = """ -# pip {shell} completion start{script}# pip {shell} completion end -""" - -COMPLETION_SCRIPTS = { - "bash": """ - _pip_completion() - {{ - COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\ - COMP_CWORD=$COMP_CWORD \\ - PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) ) - }} - complete -o default -F _pip_completion {prog} - """, - "zsh": """ - #compdef -P pip[0-9.]# - __pip() {{ - compadd $( COMP_WORDS="$words[*]" \\ - COMP_CWORD=$((CURRENT-1)) \\ - PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ) - }} - if [[ $zsh_eval_context[-1] == loadautofunc ]]; then - # autoload from fpath, call function directly - __pip "$@" - else - # eval/source/. command, register function for later - compdef __pip -P 'pip[0-9.]#' - fi - """, - "fish": """ - function __fish_complete_pip - set -lx COMP_WORDS (commandline -o) "" - set -lx COMP_CWORD ( \\ - math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\ - ) - set -lx PIP_AUTO_COMPLETE 1 - string split \\ -- (eval $COMP_WORDS[1]) - end - complete -fa "(__fish_complete_pip)" -c {prog} - """, - "powershell": """ - if ((Test-Path Function:\\TabExpansion) -and -not ` - (Test-Path Function:\\_pip_completeBackup)) {{ - Rename-Item Function:\\TabExpansion _pip_completeBackup - }} - function TabExpansion($line, $lastWord) {{ - $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart() - if ($lastBlock.StartsWith("{prog} ")) {{ - $Env:COMP_WORDS=$lastBlock - $Env:COMP_CWORD=$lastBlock.Split().Length - 1 - $Env:PIP_AUTO_COMPLETE=1 - (& {prog}).Split() - Remove-Item Env:COMP_WORDS - Remove-Item Env:COMP_CWORD - Remove-Item Env:PIP_AUTO_COMPLETE - }} - elseif (Test-Path Function:\\_pip_completeBackup) {{ - # Fall back on existing tab expansion - _pip_completeBackup $line $lastWord - }} - }} - """, -} - - -class CompletionCommand(Command): - """A helper command to be used for command completion.""" - - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--bash", - "-b", - action="store_const", - const="bash", - dest="shell", - help="Emit completion code for bash", - ) - self.cmd_opts.add_option( - "--zsh", - "-z", - action="store_const", - const="zsh", - dest="shell", - help="Emit completion code for zsh", - ) - self.cmd_opts.add_option( - "--fish", - "-f", - action="store_const", - const="fish", - dest="shell", - help="Emit completion code for fish", - ) - self.cmd_opts.add_option( - "--powershell", - "-p", - action="store_const", - const="powershell", - dest="shell", - help="Emit completion code for powershell", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - """Prints the completion code of the given shell""" - shells = COMPLETION_SCRIPTS.keys() - shell_options = ["--" + shell for shell in sorted(shells)] - if options.shell in shells: - script = textwrap.dedent( - COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog()) - ) - print(BASE_COMPLETION.format(script=script, shell=options.shell)) - return SUCCESS - else: - sys.stderr.write( - "ERROR: You must pass {}\n".format(" or ".join(shell_options)) - ) - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py deleted file mode 100644 index 1a1dc6b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py +++ /dev/null @@ -1,280 +0,0 @@ -import logging -import os -import subprocess -from optparse import Values -from typing import Any, List, Optional - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.configuration import ( - Configuration, - Kind, - get_configuration_files, - kinds, -) -from pip._internal.exceptions import PipError -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import get_prog, write_output - -logger = logging.getLogger(__name__) - - -class ConfigurationCommand(Command): - """ - Manage local and global configuration. - - Subcommands: - - - list: List the active configuration (or from the file specified) - - edit: Edit the configuration file in an editor - - get: Get the value associated with command.option - - set: Set the command.option=value - - unset: Unset the value associated with command.option - - debug: List the configuration files and values defined under them - - Configuration keys should be dot separated command and option name, - with the special prefix "global" affecting any command. For example, - "pip config set global.index-url https://example.org/" would configure - the index url for all commands, but "pip config set download.timeout 10" - would configure a 10 second timeout only for "pip download" commands. - - If none of --user, --global and --site are passed, a virtual - environment configuration file is used if one is active and the file - exists. Otherwise, all modifications happen to the user file by - default. - """ - - ignore_require_venv = True - usage = """ - %prog [] list - %prog [] [--editor ] edit - - %prog [] get command.option - %prog [] set command.option value - %prog [] unset command.option - %prog [] debug - """ - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--editor", - dest="editor", - action="store", - default=None, - help=( - "Editor to use to edit the file. Uses VISUAL or EDITOR " - "environment variables if not provided." - ), - ) - - self.cmd_opts.add_option( - "--global", - dest="global_file", - action="store_true", - default=False, - help="Use the system-wide configuration file only", - ) - - self.cmd_opts.add_option( - "--user", - dest="user_file", - action="store_true", - default=False, - help="Use the user configuration file only", - ) - - self.cmd_opts.add_option( - "--site", - dest="site_file", - action="store_true", - default=False, - help="Use the current environment configuration file only", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - handlers = { - "list": self.list_values, - "edit": self.open_in_editor, - "get": self.get_name, - "set": self.set_name_value, - "unset": self.unset_name, - "debug": self.list_config_values, - } - - # Determine action - if not args or args[0] not in handlers: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handlers)), - ) - return ERROR - - action = args[0] - - # Determine which configuration files are to be loaded - # Depends on whether the command is modifying. - try: - load_only = self._determine_file( - options, need_value=(action in ["get", "set", "unset", "edit"]) - ) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - # Load a new configuration - self.configuration = Configuration( - isolated=options.isolated_mode, load_only=load_only - ) - self.configuration.load() - - # Error handling happens here, not in the action-handlers. - try: - handlers[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def _determine_file(self, options: Values, need_value: bool) -> Optional[Kind]: - file_options = [ - key - for key, value in ( - (kinds.USER, options.user_file), - (kinds.GLOBAL, options.global_file), - (kinds.SITE, options.site_file), - ) - if value - ] - - if not file_options: - if not need_value: - return None - # Default to user, unless there's a site file. - elif any( - os.path.exists(site_config_file) - for site_config_file in get_configuration_files()[kinds.SITE] - ): - return kinds.SITE - else: - return kinds.USER - elif len(file_options) == 1: - return file_options[0] - - raise PipError( - "Need exactly one file to operate upon " - "(--user, --site, --global) to perform." - ) - - def list_values(self, options: Values, args: List[str]) -> None: - self._get_n_args(args, "list", n=0) - - for key, value in sorted(self.configuration.items()): - write_output("%s=%r", key, value) - - def get_name(self, options: Values, args: List[str]) -> None: - key = self._get_n_args(args, "get [name]", n=1) - value = self.configuration.get_value(key) - - write_output("%s", value) - - def set_name_value(self, options: Values, args: List[str]) -> None: - key, value = self._get_n_args(args, "set [name] [value]", n=2) - self.configuration.set_value(key, value) - - self._save_configuration() - - def unset_name(self, options: Values, args: List[str]) -> None: - key = self._get_n_args(args, "unset [name]", n=1) - self.configuration.unset_value(key) - - self._save_configuration() - - def list_config_values(self, options: Values, args: List[str]) -> None: - """List config key-value pairs across different config files""" - self._get_n_args(args, "debug", n=0) - - self.print_env_var_values() - # Iterate over config files and print if they exist, and the - # key-value pairs present in them if they do - for variant, files in sorted(self.configuration.iter_config_files()): - write_output("%s:", variant) - for fname in files: - with indent_log(): - file_exists = os.path.exists(fname) - write_output("%s, exists: %r", fname, file_exists) - if file_exists: - self.print_config_file_values(variant) - - def print_config_file_values(self, variant: Kind) -> None: - """Get key-value pairs from the file of a variant""" - for name, value in self.configuration.get_values_in_config(variant).items(): - with indent_log(): - write_output("%s: %s", name, value) - - def print_env_var_values(self) -> None: - """Get key-values pairs present as environment variables""" - write_output("%s:", "env_var") - with indent_log(): - for key, value in sorted(self.configuration.get_environ_vars()): - env_var = f"PIP_{key.upper()}" - write_output("%s=%r", env_var, value) - - def open_in_editor(self, options: Values, args: List[str]) -> None: - editor = self._determine_editor(options) - - fname = self.configuration.get_file_to_edit() - if fname is None: - raise PipError("Could not determine appropriate file.") - elif '"' in fname: - # This shouldn't happen, unless we see a username like that. - # If that happens, we'd appreciate a pull request fixing this. - raise PipError( - f'Can not open an editor for a file name containing "\n{fname}' - ) - - try: - subprocess.check_call(f'{editor} "{fname}"', shell=True) - except FileNotFoundError as e: - if not e.filename: - e.filename = editor - raise - except subprocess.CalledProcessError as e: - raise PipError(f"Editor Subprocess exited with exit code {e.returncode}") - - def _get_n_args(self, args: List[str], example: str, n: int) -> Any: - """Helper to make sure the command got the right number of arguments""" - if len(args) != n: - msg = ( - f"Got unexpected number of arguments, expected {n}. " - f'(example: "{get_prog()} config {example}")' - ) - raise PipError(msg) - - if n == 1: - return args[0] - else: - return args - - def _save_configuration(self) -> None: - # We successfully ran a modifying command. Need to save the - # configuration. - try: - self.configuration.save() - except Exception: - logger.exception( - "Unable to save configuration. Please report this as a bug." - ) - raise PipError("Internal Error.") - - def _determine_editor(self, options: Values) -> str: - if options.editor is not None: - return options.editor - elif "VISUAL" in os.environ: - return os.environ["VISUAL"] - elif "EDITOR" in os.environ: - return os.environ["EDITOR"] - else: - raise PipError("Could not determine editor to use.") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/debug.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/debug.py deleted file mode 100644 index 567ca96..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/debug.py +++ /dev/null @@ -1,201 +0,0 @@ -import locale -import logging -import os -import sys -from optparse import Values -from types import ModuleType -from typing import Any, Dict, List, Optional - -import pip._vendor -from pip._vendor.certifi import where -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.configuration import Configuration -from pip._internal.metadata import get_environment -from pip._internal.utils.compat import open_text_resource -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import get_pip_version - -logger = logging.getLogger(__name__) - - -def show_value(name: str, value: Any) -> None: - logger.info("%s: %s", name, value) - - -def show_sys_implementation() -> None: - logger.info("sys.implementation:") - implementation_name = sys.implementation.name - with indent_log(): - show_value("name", implementation_name) - - -def create_vendor_txt_map() -> Dict[str, str]: - with open_text_resource("pip._vendor", "vendor.txt") as f: - # Purge non version specifying lines. - # Also, remove any space prefix or suffixes (including comments). - lines = [ - line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line - ] - - # Transform into "module" -> version dict. - return dict(line.split("==", 1) for line in lines) - - -def get_module_from_module_name(module_name: str) -> Optional[ModuleType]: - # Module name can be uppercase in vendor.txt for some reason... - module_name = module_name.lower().replace("-", "_") - # PATCH: setuptools is actually only pkg_resources. - if module_name == "setuptools": - module_name = "pkg_resources" - - try: - __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0) - return getattr(pip._vendor, module_name) - except ImportError: - # We allow 'truststore' to fail to import due - # to being unavailable on Python 3.9 and earlier. - if module_name == "truststore" and sys.version_info < (3, 10): - return None - raise - - -def get_vendor_version_from_module(module_name: str) -> Optional[str]: - module = get_module_from_module_name(module_name) - version = getattr(module, "__version__", None) - - if module and not version: - # Try to find version in debundled module info. - assert module.__file__ is not None - env = get_environment([os.path.dirname(module.__file__)]) - dist = env.get_distribution(module_name) - if dist: - version = str(dist.version) - - return version - - -def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None: - """Log the actual version and print extra info if there is - a conflict or if the actual version could not be imported. - """ - for module_name, expected_version in vendor_txt_versions.items(): - extra_message = "" - actual_version = get_vendor_version_from_module(module_name) - if not actual_version: - extra_message = ( - " (Unable to locate actual module version, using" - " vendor.txt specified version)" - ) - actual_version = expected_version - elif parse_version(actual_version) != parse_version(expected_version): - extra_message = ( - " (CONFLICT: vendor.txt suggests version should" - f" be {expected_version})" - ) - logger.info("%s==%s%s", module_name, actual_version, extra_message) - - -def show_vendor_versions() -> None: - logger.info("vendored library versions:") - - vendor_txt_versions = create_vendor_txt_map() - with indent_log(): - show_actual_vendor_versions(vendor_txt_versions) - - -def show_tags(options: Values) -> None: - tag_limit = 10 - - target_python = make_target_python(options) - tags = target_python.get_sorted_tags() - - # Display the target options that were explicitly provided. - formatted_target = target_python.format_given() - suffix = "" - if formatted_target: - suffix = f" (target: {formatted_target})" - - msg = f"Compatible tags: {len(tags)}{suffix}" - logger.info(msg) - - if options.verbose < 1 and len(tags) > tag_limit: - tags_limited = True - tags = tags[:tag_limit] - else: - tags_limited = False - - with indent_log(): - for tag in tags: - logger.info(str(tag)) - - if tags_limited: - msg = f"...\n[First {tag_limit} tags shown. Pass --verbose to show all.]" - logger.info(msg) - - -def ca_bundle_info(config: Configuration) -> str: - levels = {key.split(".", 1)[0] for key, _ in config.items()} - if not levels: - return "Not specified" - - levels_that_override_global = ["install", "wheel", "download"] - global_overriding_level = [ - level for level in levels if level in levels_that_override_global - ] - if not global_overriding_level: - return "global" - - if "global" in levels: - levels.remove("global") - return ", ".join(levels) - - -class DebugCommand(Command): - """ - Display debug information. - """ - - usage = """ - %prog """ - ignore_require_venv = True - - def add_options(self) -> None: - cmdoptions.add_target_python_options(self.cmd_opts) - self.parser.insert_option_group(0, self.cmd_opts) - self.parser.config.load() - - def run(self, options: Values, args: List[str]) -> int: - logger.warning( - "This command is only meant for debugging. " - "Do not use this with automation for parsing and getting these " - "details, since the output and options of this command may " - "change without notice." - ) - show_value("pip version", get_pip_version()) - show_value("sys.version", sys.version) - show_value("sys.executable", sys.executable) - show_value("sys.getdefaultencoding", sys.getdefaultencoding()) - show_value("sys.getfilesystemencoding", sys.getfilesystemencoding()) - show_value( - "locale.getpreferredencoding", - locale.getpreferredencoding(), - ) - show_value("sys.platform", sys.platform) - show_sys_implementation() - - show_value("'cert' config value", ca_bundle_info(self.parser.config)) - show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE")) - show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE")) - show_value("pip._vendor.certifi.where()", where()) - show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED) - - show_vendor_versions() - - show_tags(options) - - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/download.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/download.py deleted file mode 100644 index 917bbb9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/download.py +++ /dev/null @@ -1,146 +0,0 @@ -import logging -import os -from optparse import Values -from typing import List - -from pip._internal.cli import cmdoptions -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.req_command import RequirementCommand, with_cleanup -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.req.req_install import check_legacy_setup_py_options -from pip._internal.utils.misc import ensure_dir, normalize_path, write_output -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -class DownloadCommand(RequirementCommand): - """ - Download packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports downloading from "requirements files", which provide - an easy way to specify a whole environment to be downloaded. - """ - - usage = """ - %prog [options] [package-index-options] ... - %prog [options] -r [package-index-options] ... - %prog [options] ... - %prog [options] ... - %prog [options] ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - self.cmd_opts.add_option(cmdoptions.global_options()) - self.cmd_opts.add_option(cmdoptions.no_binary()) - self.cmd_opts.add_option(cmdoptions.only_binary()) - self.cmd_opts.add_option(cmdoptions.prefer_binary()) - self.cmd_opts.add_option(cmdoptions.src()) - self.cmd_opts.add_option(cmdoptions.pre()) - self.cmd_opts.add_option(cmdoptions.require_hashes()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.no_use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - - self.cmd_opts.add_option( - "-d", - "--dest", - "--destination-dir", - "--destination-directory", - dest="download_dir", - metavar="dir", - default=os.curdir, - help="Download packages into .", - ) - - cmdoptions.add_target_python_options(self.cmd_opts) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - @with_cleanup - def run(self, options: Values, args: List[str]) -> int: - options.ignore_installed = True - # editable doesn't really make sense for `pip download`, but the bowels - # of the RequirementSet code require that property. - options.editables = [] - - cmdoptions.check_dist_restriction(options) - - options.download_dir = normalize_path(options.download_dir) - ensure_dir(options.download_dir) - - session = self.get_default_session(options) - - target_python = make_target_python(options) - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="download", - globally_managed=True, - ) - - reqs = self.get_requirements(args, options, finder, session) - check_legacy_setup_py_options(options, reqs) - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - download_dir=options.download_dir, - use_user_site=False, - verbosity=self.verbosity, - ) - - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - ignore_requires_python=options.ignore_requires_python, - use_pep517=options.use_pep517, - py_version_info=options.python_version, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve(reqs, check_supported_wheels=True) - - downloaded: List[str] = [] - for req in requirement_set.requirements.values(): - if req.satisfied_by is None: - assert req.name is not None - preparer.save_linked_requirement(req) - downloaded.append(req.name) - - preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) - - if downloaded: - write_output("Successfully downloaded %s", " ".join(downloaded)) - - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py deleted file mode 100644 index 885fdfe..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py +++ /dev/null @@ -1,109 +0,0 @@ -import sys -from optparse import Values -from typing import AbstractSet, List - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.operations.freeze import freeze -from pip._internal.utils.compat import stdlib_pkgs - - -def _should_suppress_build_backends() -> bool: - return sys.version_info < (3, 12) - - -def _dev_pkgs() -> AbstractSet[str]: - pkgs = {"pip"} - - if _should_suppress_build_backends(): - pkgs |= {"setuptools", "distribute", "wheel"} - - return pkgs - - -class FreezeCommand(Command): - """ - Output installed packages in requirements format. - - packages are listed in a case-insensitive sorted order. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - log_streams = ("ext://sys.stderr", "ext://sys.stderr") - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help=( - "Use the order in the given requirements file and its " - "comments when generating output. This option can be " - "used multiple times." - ), - ) - self.cmd_opts.add_option( - "-l", - "--local", - dest="local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not output " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - self.cmd_opts.add_option( - "--all", - dest="freeze_all", - action="store_true", - help=( - "Do not skip these packages in the output:" - " {}".format(", ".join(_dev_pkgs())) - ), - ) - self.cmd_opts.add_option( - "--exclude-editable", - dest="exclude_editable", - action="store_true", - help="Exclude editable package from output.", - ) - self.cmd_opts.add_option(cmdoptions.list_exclude()) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - skip = set(stdlib_pkgs) - if not options.freeze_all: - skip.update(_dev_pkgs()) - - if options.excludes: - skip.update(options.excludes) - - cmdoptions.check_list_path_option(options) - - for line in freeze( - requirement=options.requirements, - local_only=options.local, - user_only=options.user, - paths=options.path, - isolated=options.isolated_mode, - skip=skip, - exclude_editable=options.exclude_editable, - ): - sys.stdout.write(line + "\n") - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/hash.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/hash.py deleted file mode 100644 index 042dac8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/hash.py +++ /dev/null @@ -1,59 +0,0 @@ -import hashlib -import logging -import sys -from optparse import Values -from typing import List - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES -from pip._internal.utils.misc import read_chunks, write_output - -logger = logging.getLogger(__name__) - - -class HashCommand(Command): - """ - Compute a hash of a local package archive. - - These can be used with --hash in a requirements file to do repeatable - installs. - """ - - usage = "%prog [options] ..." - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-a", - "--algorithm", - dest="algorithm", - choices=STRONG_HASHES, - action="store", - default=FAVORITE_HASH, - help="The hash algorithm to use: one of {}".format( - ", ".join(STRONG_HASHES) - ), - ) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - if not args: - self.parser.print_usage(sys.stderr) - return ERROR - - algorithm = options.algorithm - for path in args: - write_output( - "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm) - ) - return SUCCESS - - -def _hash_of_file(path: str, algorithm: str) -> str: - """Return the hash digest of a file.""" - with open(path, "rb") as archive: - hash = hashlib.new(algorithm) - for chunk in read_chunks(archive): - hash.update(chunk) - return hash.hexdigest() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/help.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/help.py deleted file mode 100644 index 6206631..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/help.py +++ /dev/null @@ -1,41 +0,0 @@ -from optparse import Values -from typing import List - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError - - -class HelpCommand(Command): - """Show help for commands""" - - usage = """ - %prog """ - ignore_require_venv = True - - def run(self, options: Values, args: List[str]) -> int: - from pip._internal.commands import ( - commands_dict, - create_command, - get_similar_commands, - ) - - try: - # 'pip help' with no args is handled by pip.__init__.parseopt() - cmd_name = args[0] # the command we need help for - except IndexError: - return SUCCESS - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = [f'unknown command "{cmd_name}"'] - if guess: - msg.append(f'maybe you meant "{guess}"') - - raise CommandError(" - ".join(msg)) - - command = create_command(cmd_name) - command.parser.print_help() - - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/index.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/index.py deleted file mode 100644 index 2e2661b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/index.py +++ /dev/null @@ -1,139 +0,0 @@ -import logging -from optparse import Values -from typing import Any, Iterable, List, Optional - -from pip._vendor.packaging.version import Version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.req_command import IndexGroupCommand -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.commands.search import print_dist_installation_info -from pip._internal.exceptions import CommandError, DistributionNotFound, PipError -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.network.session import PipSession -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -class IndexCommand(IndexGroupCommand): - """ - Inspect information available from package indexes. - """ - - ignore_require_venv = True - usage = """ - %prog versions - """ - - def add_options(self) -> None: - cmdoptions.add_target_python_options(self.cmd_opts) - - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.pre()) - self.cmd_opts.add_option(cmdoptions.no_binary()) - self.cmd_opts.add_option(cmdoptions.only_binary()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - handlers = { - "versions": self.get_available_package_versions, - } - - logger.warning( - "pip index is currently an experimental command. " - "It may be removed/changed in a future release " - "without prior warning." - ) - - # Determine action - if not args or args[0] not in handlers: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handlers)), - ) - return ERROR - - action = args[0] - - # Error handling happens here, not in the action-handlers. - try: - handlers[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def _build_package_finder( - self, - options: Values, - session: PipSession, - target_python: Optional[TargetPython] = None, - ignore_requires_python: Optional[bool] = None, - ) -> PackageFinder: - """ - Create a package finder appropriate to the index command. - """ - link_collector = LinkCollector.create(session, options=options) - - # Pass allow_yanked=False to ignore yanked versions. - selection_prefs = SelectionPreferences( - allow_yanked=False, - allow_all_prereleases=options.pre, - ignore_requires_python=ignore_requires_python, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - target_python=target_python, - ) - - def get_available_package_versions(self, options: Values, args: List[Any]) -> None: - if len(args) != 1: - raise CommandError("You need to specify exactly one argument") - - target_python = cmdoptions.make_target_python(options) - query = args[0] - - with self._build_session(options) as session: - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - - versions: Iterable[Version] = ( - candidate.version for candidate in finder.find_all_candidates(query) - ) - - if not options.pre: - # Remove prereleases - versions = ( - version for version in versions if not version.is_prerelease - ) - versions = set(versions) - - if not versions: - raise DistributionNotFound( - f"No matching distribution found for {query}" - ) - - formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)] - latest = formatted_versions[0] - - write_output(f"{query} ({latest})") - write_output("Available versions: {}".format(", ".join(formatted_versions))) - print_dist_installation_info(query, latest) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py deleted file mode 100644 index e810c13..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py +++ /dev/null @@ -1,92 +0,0 @@ -import logging -from optparse import Values -from typing import Any, Dict, List - -from pip._vendor.packaging.markers import default_environment -from pip._vendor.rich import print_json - -from pip import __version__ -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.utils.compat import stdlib_pkgs -from pip._internal.utils.urls import path_to_url - -logger = logging.getLogger(__name__) - - -class InspectCommand(Command): - """ - Inspect the content of a Python environment and produce a report in JSON format. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not list " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - cmdoptions.check_list_path_option(options) - dists = get_environment(options.path).iter_installed_distributions( - local_only=options.local, - user_only=options.user, - skip=set(stdlib_pkgs), - ) - output = { - "version": "1", - "pip_version": __version__, - "installed": [self._dist_to_dict(dist) for dist in dists], - "environment": default_environment(), - # TODO tags? scheme? - } - print_json(data=output) - return SUCCESS - - def _dist_to_dict(self, dist: BaseDistribution) -> Dict[str, Any]: - res: Dict[str, Any] = { - "metadata": dist.metadata_dict, - "metadata_location": dist.info_location, - } - # direct_url. Note that we don't have download_info (as in the installation - # report) since it is not recorded in installed metadata. - direct_url = dist.direct_url - if direct_url is not None: - res["direct_url"] = direct_url.to_dict() - else: - # Emulate direct_url for legacy editable installs. - editable_project_location = dist.editable_project_location - if editable_project_location is not None: - res["direct_url"] = { - "url": path_to_url(editable_project_location), - "dir_info": { - "editable": True, - }, - } - # installer - installer = dist.installer - if dist.installer: - res["installer"] = installer - # requested - if dist.installed_with_dist_info: - res["requested"] = dist.requested - return res diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/install.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/install.py deleted file mode 100644 index 232a34a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/install.py +++ /dev/null @@ -1,784 +0,0 @@ -import errno -import json -import operator -import os -import shutil -import site -from optparse import SUPPRESS_HELP, Values -from typing import List, Optional - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.rich import print_json - -# Eagerly import self_outdated_check to avoid crashes. Otherwise, -# this module would be imported *after* pip was replaced, resulting -# in crashes if the new self_outdated_check module was incompatible -# with the rest of pip that's already imported, or allowing a -# wheel to execute arbitrary code on install by replacing -# self_outdated_check. -import pip._internal.self_outdated_check # noqa: F401 -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.req_command import ( - RequirementCommand, - with_cleanup, -) -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.exceptions import CommandError, InstallationError -from pip._internal.locations import get_scheme -from pip._internal.metadata import get_environment -from pip._internal.models.installation_report import InstallationReport -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.operations.check import ConflictDetails, check_install_conflicts -from pip._internal.req import install_given_reqs -from pip._internal.req.req_install import ( - InstallRequirement, - check_legacy_setup_py_options, -) -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.filesystem import test_writable_dir -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ( - check_externally_managed, - ensure_dir, - get_pip_version, - protect_pip_from_modification_on_windows, - warn_if_run_as_root, - write_output, -) -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.virtualenv import ( - running_under_virtualenv, - virtualenv_no_global, -) -from pip._internal.wheel_builder import build, should_build_for_install_command - -logger = getLogger(__name__) - - -class InstallCommand(RequirementCommand): - """ - Install packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports installing from "requirements files", which provide - an easy way to specify a whole environment to be installed. - """ - - usage = """ - %prog [options] [package-index-options] ... - %prog [options] -r [package-index-options] ... - %prog [options] [-e] ... - %prog [options] [-e] ... - %prog [options] ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - self.cmd_opts.add_option(cmdoptions.pre()) - - self.cmd_opts.add_option(cmdoptions.editable()) - self.cmd_opts.add_option( - "--dry-run", - action="store_true", - dest="dry_run", - default=False, - help=( - "Don't actually install anything, just print what would be. " - "Can be used in combination with --ignore-installed " - "to 'resolve' the requirements." - ), - ) - self.cmd_opts.add_option( - "-t", - "--target", - dest="target_dir", - metavar="dir", - default=None, - help=( - "Install packages into . " - "By default this will not replace existing files/folders in " - ". Use --upgrade to replace existing packages in " - "with new versions." - ), - ) - cmdoptions.add_target_python_options(self.cmd_opts) - - self.cmd_opts.add_option( - "--user", - dest="use_user_site", - action="store_true", - help=( - "Install to the Python user install directory for your " - "platform. Typically ~/.local/, or %APPDATA%\\Python on " - "Windows. (See the Python documentation for site.USER_BASE " - "for full details.)" - ), - ) - self.cmd_opts.add_option( - "--no-user", - dest="use_user_site", - action="store_false", - help=SUPPRESS_HELP, - ) - self.cmd_opts.add_option( - "--root", - dest="root_path", - metavar="dir", - default=None, - help="Install everything relative to this alternate root directory.", - ) - self.cmd_opts.add_option( - "--prefix", - dest="prefix_path", - metavar="dir", - default=None, - help=( - "Installation prefix where lib, bin and other top-level " - "folders are placed. Note that the resulting installation may " - "contain scripts and other resources which reference the " - "Python interpreter of pip, and not that of ``--prefix``. " - "See also the ``--python`` option if the intention is to " - "install packages into another (possibly pip-free) " - "environment." - ), - ) - - self.cmd_opts.add_option(cmdoptions.src()) - - self.cmd_opts.add_option( - "-U", - "--upgrade", - dest="upgrade", - action="store_true", - help=( - "Upgrade all specified packages to the newest available " - "version. The handling of dependencies depends on the " - "upgrade-strategy used." - ), - ) - - self.cmd_opts.add_option( - "--upgrade-strategy", - dest="upgrade_strategy", - default="only-if-needed", - choices=["only-if-needed", "eager"], - help=( - "Determines how dependency upgrading should be handled " - "[default: %default]. " - '"eager" - dependencies are upgraded regardless of ' - "whether the currently installed version satisfies the " - "requirements of the upgraded package(s). " - '"only-if-needed" - are upgraded only when they do not ' - "satisfy the requirements of the upgraded package(s)." - ), - ) - - self.cmd_opts.add_option( - "--force-reinstall", - dest="force_reinstall", - action="store_true", - help="Reinstall all packages even if they are already up-to-date.", - ) - - self.cmd_opts.add_option( - "-I", - "--ignore-installed", - dest="ignore_installed", - action="store_true", - help=( - "Ignore the installed packages, overwriting them. " - "This can break your system if the existing package " - "is of a different version or was installed " - "with a different package manager!" - ), - ) - - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.no_use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.override_externally_managed()) - - self.cmd_opts.add_option(cmdoptions.config_settings()) - self.cmd_opts.add_option(cmdoptions.global_options()) - - self.cmd_opts.add_option( - "--compile", - action="store_true", - dest="compile", - default=True, - help="Compile Python source files to bytecode", - ) - - self.cmd_opts.add_option( - "--no-compile", - action="store_false", - dest="compile", - help="Do not compile Python source files to bytecode", - ) - - self.cmd_opts.add_option( - "--no-warn-script-location", - action="store_false", - dest="warn_script_location", - default=True, - help="Do not warn when installing scripts outside PATH", - ) - self.cmd_opts.add_option( - "--no-warn-conflicts", - action="store_false", - dest="warn_about_conflicts", - default=True, - help="Do not warn about broken dependencies", - ) - self.cmd_opts.add_option(cmdoptions.no_binary()) - self.cmd_opts.add_option(cmdoptions.only_binary()) - self.cmd_opts.add_option(cmdoptions.prefer_binary()) - self.cmd_opts.add_option(cmdoptions.require_hashes()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - self.cmd_opts.add_option(cmdoptions.root_user_action()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - self.cmd_opts.add_option( - "--report", - dest="json_report_file", - metavar="file", - default=None, - help=( - "Generate a JSON file describing what pip did to install " - "the provided requirements. " - "Can be used in combination with --dry-run and --ignore-installed " - "to 'resolve' the requirements. " - "When - is used as file name it writes to stdout. " - "When writing to stdout, please combine with the --quiet option " - "to avoid mixing pip logging output with JSON output." - ), - ) - - @with_cleanup - def run(self, options: Values, args: List[str]) -> int: - if options.use_user_site and options.target_dir is not None: - raise CommandError("Can not combine '--user' and '--target'") - - # Check whether the environment we're installing into is externally - # managed, as specified in PEP 668. Specifying --root, --target, or - # --prefix disables the check, since there's no reliable way to locate - # the EXTERNALLY-MANAGED file for those cases. An exception is also - # made specifically for "--dry-run --report" for convenience. - installing_into_current_environment = ( - not (options.dry_run and options.json_report_file) - and options.root_path is None - and options.target_dir is None - and options.prefix_path is None - ) - if ( - installing_into_current_environment - and not options.override_externally_managed - ): - check_externally_managed() - - upgrade_strategy = "to-satisfy-only" - if options.upgrade: - upgrade_strategy = options.upgrade_strategy - - cmdoptions.check_dist_restriction(options, check_target=True) - - logger.verbose("Using %s", get_pip_version()) - options.use_user_site = decide_user_install( - options.use_user_site, - prefix_path=options.prefix_path, - target_dir=options.target_dir, - root_path=options.root_path, - isolated_mode=options.isolated_mode, - ) - - target_temp_dir: Optional[TempDirectory] = None - target_temp_dir_path: Optional[str] = None - if options.target_dir: - options.ignore_installed = True - options.target_dir = os.path.abspath(options.target_dir) - if ( - # fmt: off - os.path.exists(options.target_dir) and - not os.path.isdir(options.target_dir) - # fmt: on - ): - raise CommandError( - "Target path exists but is not a directory, will not continue." - ) - - # Create a target directory for using with the target option - target_temp_dir = TempDirectory(kind="target") - target_temp_dir_path = target_temp_dir.path - self.enter_context(target_temp_dir) - - global_options = options.global_options or [] - - session = self.get_default_session(options) - - target_python = make_target_python(options) - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="install", - globally_managed=True, - ) - - try: - reqs = self.get_requirements(args, options, finder, session) - check_legacy_setup_py_options(options, reqs) - - wheel_cache = WheelCache(options.cache_dir) - - # Only when installing is it permitted to use PEP 660. - # In other circumstances (pip wheel, pip download) we generate - # regular (i.e. non editable) metadata and wheels. - for req in reqs: - req.permit_editable_wheels = True - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - use_user_site=options.use_user_site, - verbosity=self.verbosity, - ) - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - wheel_cache=wheel_cache, - use_user_site=options.use_user_site, - ignore_installed=options.ignore_installed, - ignore_requires_python=options.ignore_requires_python, - force_reinstall=options.force_reinstall, - upgrade_strategy=upgrade_strategy, - use_pep517=options.use_pep517, - py_version_info=options.python_version, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve( - reqs, check_supported_wheels=not options.target_dir - ) - - if options.json_report_file: - report = InstallationReport(requirement_set.requirements_to_install) - if options.json_report_file == "-": - print_json(data=report.to_dict()) - else: - with open(options.json_report_file, "w", encoding="utf-8") as f: - json.dump(report.to_dict(), f, indent=2, ensure_ascii=False) - - if options.dry_run: - would_install_items = sorted( - (r.metadata["name"], r.metadata["version"]) - for r in requirement_set.requirements_to_install - ) - if would_install_items: - write_output( - "Would install %s", - " ".join("-".join(item) for item in would_install_items), - ) - return SUCCESS - - try: - pip_req = requirement_set.get_requirement("pip") - except KeyError: - modifying_pip = False - else: - # If we're not replacing an already installed pip, - # we're not modifying it. - modifying_pip = pip_req.satisfied_by is None - protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) - - reqs_to_build = [ - r - for r in requirement_set.requirements.values() - if should_build_for_install_command(r) - ] - - _, build_failures = build( - reqs_to_build, - wheel_cache=wheel_cache, - verify=True, - build_options=[], - global_options=global_options, - ) - - if build_failures: - raise InstallationError( - "Failed to build installable wheels for some " - "pyproject.toml based projects ({})".format( - ", ".join(r.name for r in build_failures) # type: ignore - ) - ) - - to_install = resolver.get_installation_order(requirement_set) - - # Check for conflicts in the package set we're installing. - conflicts: Optional[ConflictDetails] = None - should_warn_about_conflicts = ( - not options.ignore_dependencies and options.warn_about_conflicts - ) - if should_warn_about_conflicts: - conflicts = self._determine_conflicts(to_install) - - # Don't warn about script install locations if - # --target or --prefix has been specified - warn_script_location = options.warn_script_location - if options.target_dir or options.prefix_path: - warn_script_location = False - - installed = install_given_reqs( - to_install, - global_options, - root=options.root_path, - home=target_temp_dir_path, - prefix=options.prefix_path, - warn_script_location=warn_script_location, - use_user_site=options.use_user_site, - pycompile=options.compile, - ) - - lib_locations = get_lib_location_guesses( - user=options.use_user_site, - home=target_temp_dir_path, - root=options.root_path, - prefix=options.prefix_path, - isolated=options.isolated_mode, - ) - env = get_environment(lib_locations) - - # Display a summary of installed packages, with extra care to - # display a package name as it was requested by the user. - installed.sort(key=operator.attrgetter("name")) - summary = [] - installed_versions = {} - for distribution in env.iter_all_distributions(): - installed_versions[distribution.canonical_name] = distribution.version - for package in installed: - display_name = package.name - version = installed_versions.get(canonicalize_name(display_name), None) - if version: - text = f"{display_name}-{version}" - else: - text = display_name - summary.append(text) - - if conflicts is not None: - self._warn_about_conflicts( - conflicts, - resolver_variant=self.determine_resolver_variant(options), - ) - - installed_desc = " ".join(summary) - if installed_desc: - write_output( - "Successfully installed %s", - installed_desc, - ) - except OSError as error: - show_traceback = self.verbosity >= 1 - - message = create_os_error_message( - error, - show_traceback, - options.use_user_site, - ) - logger.error(message, exc_info=show_traceback) - - return ERROR - - if options.target_dir: - assert target_temp_dir - self._handle_target_dir( - options.target_dir, target_temp_dir, options.upgrade - ) - if options.root_user_action == "warn": - warn_if_run_as_root() - return SUCCESS - - def _handle_target_dir( - self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool - ) -> None: - ensure_dir(target_dir) - - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - lib_dir_list = [] - - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - scheme = get_scheme("", home=target_temp_dir.path) - purelib_dir = scheme.purelib - platlib_dir = scheme.platlib - data_dir = scheme.data - - if os.path.exists(purelib_dir): - lib_dir_list.append(purelib_dir) - if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: - lib_dir_list.append(platlib_dir) - if os.path.exists(data_dir): - lib_dir_list.append(data_dir) - - for lib_dir in lib_dir_list: - for item in os.listdir(lib_dir): - if lib_dir == data_dir: - ddir = os.path.join(data_dir, item) - if any(s.startswith(ddir) for s in lib_dir_list[:-1]): - continue - target_item_dir = os.path.join(target_dir, item) - if os.path.exists(target_item_dir): - if not upgrade: - logger.warning( - "Target directory %s already exists. Specify " - "--upgrade to force replacement.", - target_item_dir, - ) - continue - if os.path.islink(target_item_dir): - logger.warning( - "Target directory %s already exists and is " - "a link. pip will not automatically replace " - "links, please remove if replacement is " - "desired.", - target_item_dir, - ) - continue - if os.path.isdir(target_item_dir): - shutil.rmtree(target_item_dir) - else: - os.remove(target_item_dir) - - shutil.move(os.path.join(lib_dir, item), target_item_dir) - - def _determine_conflicts( - self, to_install: List[InstallRequirement] - ) -> Optional[ConflictDetails]: - try: - return check_install_conflicts(to_install) - except Exception: - logger.exception( - "Error while checking for conflicts. Please file an issue on " - "pip's issue tracker: https://github.com/pypa/pip/issues/new" - ) - return None - - def _warn_about_conflicts( - self, conflict_details: ConflictDetails, resolver_variant: str - ) -> None: - package_set, (missing, conflicting) = conflict_details - if not missing and not conflicting: - return - - parts: List[str] = [] - if resolver_variant == "legacy": - parts.append( - "pip's legacy dependency resolver does not consider dependency " - "conflicts when selecting packages. This behaviour is the " - "source of the following dependency conflicts." - ) - else: - assert resolver_variant == "resolvelib" - parts.append( - "pip's dependency resolver does not currently take into account " - "all the packages that are installed. This behaviour is the " - "source of the following dependency conflicts." - ) - - # NOTE: There is some duplication here, with commands/check.py - for project_name in missing: - version = package_set[project_name][0] - for dependency in missing[project_name]: - message = ( - f"{project_name} {version} requires {dependency[1]}, " - "which is not installed." - ) - parts.append(message) - - for project_name in conflicting: - version = package_set[project_name][0] - for dep_name, dep_version, req in conflicting[project_name]: - message = ( - "{name} {version} requires {requirement}, but {you} have " - "{dep_name} {dep_version} which is incompatible." - ).format( - name=project_name, - version=version, - requirement=req, - dep_name=dep_name, - dep_version=dep_version, - you=("you" if resolver_variant == "resolvelib" else "you'll"), - ) - parts.append(message) - - logger.critical("\n".join(parts)) - - -def get_lib_location_guesses( - user: bool = False, - home: Optional[str] = None, - root: Optional[str] = None, - isolated: bool = False, - prefix: Optional[str] = None, -) -> List[str]: - scheme = get_scheme( - "", - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - return [scheme.purelib, scheme.platlib] - - -def site_packages_writable(root: Optional[str], isolated: bool) -> bool: - return all( - test_writable_dir(d) - for d in set(get_lib_location_guesses(root=root, isolated=isolated)) - ) - - -def decide_user_install( - use_user_site: Optional[bool], - prefix_path: Optional[str] = None, - target_dir: Optional[str] = None, - root_path: Optional[str] = None, - isolated_mode: bool = False, -) -> bool: - """Determine whether to do a user install based on the input options. - - If use_user_site is False, no additional checks are done. - If use_user_site is True, it is checked for compatibility with other - options. - If use_user_site is None, the default behaviour depends on the environment, - which is provided by the other arguments. - """ - # In some cases (config from tox), use_user_site can be set to an integer - # rather than a bool, which 'use_user_site is False' wouldn't catch. - if (use_user_site is not None) and (not use_user_site): - logger.debug("Non-user install by explicit request") - return False - - if use_user_site: - if prefix_path: - raise CommandError( - "Can not combine '--user' and '--prefix' as they imply " - "different installation locations" - ) - if virtualenv_no_global(): - raise InstallationError( - "Can not perform a '--user' install. User site-packages " - "are not visible in this virtualenv." - ) - logger.debug("User install by explicit request") - return True - - # If we are here, user installs have not been explicitly requested/avoided - assert use_user_site is None - - # user install incompatible with --prefix/--target - if prefix_path or target_dir: - logger.debug("Non-user install due to --prefix or --target option") - return False - - # If user installs are not enabled, choose a non-user install - if not site.ENABLE_USER_SITE: - logger.debug("Non-user install because user site-packages disabled") - return False - - # If we have permission for a non-user install, do that, - # otherwise do a user install. - if site_packages_writable(root=root_path, isolated=isolated_mode): - logger.debug("Non-user install because site-packages writeable") - return False - - logger.info( - "Defaulting to user installation because normal site-packages " - "is not writeable" - ) - return True - - -def create_os_error_message( - error: OSError, show_traceback: bool, using_user_site: bool -) -> str: - """Format an error message for an OSError - - It may occur anytime during the execution of the install command. - """ - parts = [] - - # Mention the error if we are not going to show a traceback - parts.append("Could not install packages due to an OSError") - if not show_traceback: - parts.append(": ") - parts.append(str(error)) - else: - parts.append(".") - - # Spilt the error indication from a helper message (if any) - parts[-1] += "\n" - - # Suggest useful actions to the user: - # (1) using user site-packages or (2) verifying the permissions - if error.errno == errno.EACCES: - user_option_part = "Consider using the `--user` option" - permissions_part = "Check the permissions" - - if not running_under_virtualenv() and not using_user_site: - parts.extend( - [ - user_option_part, - " or ", - permissions_part.lower(), - ] - ) - else: - parts.append(permissions_part) - parts.append(".\n") - - # Suggest the user to enable Long Paths if path length is - # more than 260 - if ( - WINDOWS - and error.errno == errno.ENOENT - and error.filename - and len(error.filename) > 260 - ): - parts.append( - "HINT: This error might have occurred since " - "this system does not have Windows Long Path " - "support enabled. You can find information on " - "how to enable this at " - "https://pip.pypa.io/warnings/enable-long-paths\n" - ) - - return "".join(parts).strip() + "\n" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/list.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/list.py deleted file mode 100644 index 8494370..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/list.py +++ /dev/null @@ -1,375 +0,0 @@ -import json -import logging -from optparse import Values -from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.index_command import IndexGroupCommand -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.utils.compat import stdlib_pkgs -from pip._internal.utils.misc import tabulate, write_output - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - from pip._internal.network.session import PipSession - - class _DistWithLatestInfo(BaseDistribution): - """Give the distribution object a couple of extra fields. - - These will be populated during ``get_outdated()``. This is dirty but - makes the rest of the code much cleaner. - """ - - latest_version: Version - latest_filetype: str - - _ProcessedDists = Sequence[_DistWithLatestInfo] - - -logger = logging.getLogger(__name__) - - -class ListCommand(IndexGroupCommand): - """ - List installed packages, including editables. - - Packages are listed in a case-insensitive sorted order. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-o", - "--outdated", - action="store_true", - default=False, - help="List outdated packages", - ) - self.cmd_opts.add_option( - "-u", - "--uptodate", - action="store_true", - default=False, - help="List uptodate packages", - ) - self.cmd_opts.add_option( - "-e", - "--editable", - action="store_true", - default=False, - help="List editable projects.", - ) - self.cmd_opts.add_option( - "-l", - "--local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not list " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - self.cmd_opts.add_option( - "--pre", - action="store_true", - default=False, - help=( - "Include pre-release and development versions. By default, " - "pip only finds stable versions." - ), - ) - - self.cmd_opts.add_option( - "--format", - action="store", - dest="list_format", - default="columns", - choices=("columns", "freeze", "json"), - help=( - "Select the output format among: columns (default), freeze, or json. " - "The 'freeze' format cannot be used with the --outdated option." - ), - ) - - self.cmd_opts.add_option( - "--not-required", - action="store_true", - dest="not_required", - help="List packages that are not dependencies of installed packages.", - ) - - self.cmd_opts.add_option( - "--exclude-editable", - action="store_false", - dest="include_editable", - help="Exclude editable package from output.", - ) - self.cmd_opts.add_option( - "--include-editable", - action="store_true", - dest="include_editable", - help="Include editable package from output.", - default=True, - ) - self.cmd_opts.add_option(cmdoptions.list_exclude()) - index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - def handle_pip_version_check(self, options: Values) -> None: - if options.outdated or options.uptodate: - super().handle_pip_version_check(options) - - def _build_package_finder( - self, options: Values, session: "PipSession" - ) -> "PackageFinder": - """ - Create a package finder appropriate to this list command. - """ - # Lazy import the heavy index modules as most list invocations won't need 'em. - from pip._internal.index.collector import LinkCollector - from pip._internal.index.package_finder import PackageFinder - - link_collector = LinkCollector.create(session, options=options) - - # Pass allow_yanked=False to ignore yanked versions. - selection_prefs = SelectionPreferences( - allow_yanked=False, - allow_all_prereleases=options.pre, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - ) - - def run(self, options: Values, args: List[str]) -> int: - if options.outdated and options.uptodate: - raise CommandError("Options --outdated and --uptodate cannot be combined.") - - if options.outdated and options.list_format == "freeze": - raise CommandError( - "List format 'freeze' cannot be used with the --outdated option." - ) - - cmdoptions.check_list_path_option(options) - - skip = set(stdlib_pkgs) - if options.excludes: - skip.update(canonicalize_name(n) for n in options.excludes) - - packages: _ProcessedDists = [ - cast("_DistWithLatestInfo", d) - for d in get_environment(options.path).iter_installed_distributions( - local_only=options.local, - user_only=options.user, - editables_only=options.editable, - include_editables=options.include_editable, - skip=skip, - ) - ] - - # get_not_required must be called firstly in order to find and - # filter out all dependencies correctly. Otherwise a package - # can't be identified as requirement because some parent packages - # could be filtered out before. - if options.not_required: - packages = self.get_not_required(packages, options) - - if options.outdated: - packages = self.get_outdated(packages, options) - elif options.uptodate: - packages = self.get_uptodate(packages, options) - - self.output_package_listing(packages, options) - return SUCCESS - - def get_outdated( - self, packages: "_ProcessedDists", options: Values - ) -> "_ProcessedDists": - return [ - dist - for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version > dist.version - ] - - def get_uptodate( - self, packages: "_ProcessedDists", options: Values - ) -> "_ProcessedDists": - return [ - dist - for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version == dist.version - ] - - def get_not_required( - self, packages: "_ProcessedDists", options: Values - ) -> "_ProcessedDists": - dep_keys = { - canonicalize_name(dep.name) - for dist in packages - for dep in (dist.iter_dependencies() or ()) - } - - # Create a set to remove duplicate packages, and cast it to a list - # to keep the return type consistent with get_outdated and - # get_uptodate - return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys}) - - def iter_packages_latest_infos( - self, packages: "_ProcessedDists", options: Values - ) -> Generator["_DistWithLatestInfo", None, None]: - with self._build_session(options) as session: - finder = self._build_package_finder(options, session) - - def latest_info( - dist: "_DistWithLatestInfo", - ) -> Optional["_DistWithLatestInfo"]: - all_candidates = finder.find_all_candidates(dist.canonical_name) - if not options.pre: - # Remove prereleases - all_candidates = [ - candidate - for candidate in all_candidates - if not candidate.version.is_prerelease - ] - - evaluator = finder.make_candidate_evaluator( - project_name=dist.canonical_name, - ) - best_candidate = evaluator.sort_best_candidate(all_candidates) - if best_candidate is None: - return None - - remote_version = best_candidate.version - if best_candidate.link.is_wheel: - typ = "wheel" - else: - typ = "sdist" - dist.latest_version = remote_version - dist.latest_filetype = typ - return dist - - for dist in map(latest_info, packages): - if dist is not None: - yield dist - - def output_package_listing( - self, packages: "_ProcessedDists", options: Values - ) -> None: - packages = sorted( - packages, - key=lambda dist: dist.canonical_name, - ) - if options.list_format == "columns" and packages: - data, header = format_for_columns(packages, options) - self.output_package_listing_columns(data, header) - elif options.list_format == "freeze": - for dist in packages: - if options.verbose >= 1: - write_output( - "%s==%s (%s)", dist.raw_name, dist.version, dist.location - ) - else: - write_output("%s==%s", dist.raw_name, dist.version) - elif options.list_format == "json": - write_output(format_for_json(packages, options)) - - def output_package_listing_columns( - self, data: List[List[str]], header: List[str] - ) -> None: - # insert the header first: we need to know the size of column names - if len(data) > 0: - data.insert(0, header) - - pkg_strings, sizes = tabulate(data) - - # Create and add a separator. - if len(data) > 0: - pkg_strings.insert(1, " ".join("-" * x for x in sizes)) - - for val in pkg_strings: - write_output(val) - - -def format_for_columns( - pkgs: "_ProcessedDists", options: Values -) -> Tuple[List[List[str]], List[str]]: - """ - Convert the package data into something usable - by output_package_listing_columns. - """ - header = ["Package", "Version"] - - running_outdated = options.outdated - if running_outdated: - header.extend(["Latest", "Type"]) - - has_editables = any(x.editable for x in pkgs) - if has_editables: - header.append("Editable project location") - - if options.verbose >= 1: - header.append("Location") - if options.verbose >= 1: - header.append("Installer") - - data = [] - for proj in pkgs: - # if we're working on the 'outdated' list, separate out the - # latest_version and type - row = [proj.raw_name, proj.raw_version] - - if running_outdated: - row.append(str(proj.latest_version)) - row.append(proj.latest_filetype) - - if has_editables: - row.append(proj.editable_project_location or "") - - if options.verbose >= 1: - row.append(proj.location or "") - if options.verbose >= 1: - row.append(proj.installer) - - data.append(row) - - return data, header - - -def format_for_json(packages: "_ProcessedDists", options: Values) -> str: - data = [] - for dist in packages: - info = { - "name": dist.raw_name, - "version": str(dist.version), - } - if options.verbose >= 1: - info["location"] = dist.location or "" - info["installer"] = dist.installer - if options.outdated: - info["latest_version"] = str(dist.latest_version) - info["latest_filetype"] = dist.latest_filetype - editable_project_location = dist.editable_project_location - if editable_project_location: - info["editable_project_location"] = editable_project_location - data.append(info) - return json.dumps(data) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/search.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/search.py deleted file mode 100644 index 74b8d65..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/search.py +++ /dev/null @@ -1,172 +0,0 @@ -import logging -import shutil -import sys -import textwrap -import xmlrpc.client -from collections import OrderedDict -from optparse import Values -from typing import TYPE_CHECKING, Dict, List, Optional, TypedDict - -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.cli.base_command import Command -from pip._internal.cli.req_command import SessionCommandMixin -from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.metadata import get_default_environment -from pip._internal.models.index import PyPI -from pip._internal.network.xmlrpc import PipXmlrpcTransport -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import write_output - -if TYPE_CHECKING: - - class TransformedHit(TypedDict): - name: str - summary: str - versions: List[str] - - -logger = logging.getLogger(__name__) - - -class SearchCommand(Command, SessionCommandMixin): - """Search for PyPI packages whose name or summary contains .""" - - usage = """ - %prog [options] """ - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-i", - "--index", - dest="index", - metavar="URL", - default=PyPI.pypi_url, - help="Base URL of Python Package Index (default %default)", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - if not args: - raise CommandError("Missing required argument (search query).") - query = args - pypi_hits = self.search(query, options) - hits = transform_hits(pypi_hits) - - terminal_width = None - if sys.stdout.isatty(): - terminal_width = shutil.get_terminal_size()[0] - - print_results(hits, terminal_width=terminal_width) - if pypi_hits: - return SUCCESS - return NO_MATCHES_FOUND - - def search(self, query: List[str], options: Values) -> List[Dict[str, str]]: - index_url = options.index - - session = self.get_default_session(options) - - transport = PipXmlrpcTransport(index_url, session) - pypi = xmlrpc.client.ServerProxy(index_url, transport) - try: - hits = pypi.search({"name": query, "summary": query}, "or") - except xmlrpc.client.Fault as fault: - message = ( - f"XMLRPC request failed [code: {fault.faultCode}]\n{fault.faultString}" - ) - raise CommandError(message) - assert isinstance(hits, list) - return hits - - -def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]: - """ - The list from pypi is really a list of versions. We want a list of - packages with the list of versions stored inline. This converts the - list from pypi into one we can use. - """ - packages: Dict[str, TransformedHit] = OrderedDict() - for hit in hits: - name = hit["name"] - summary = hit["summary"] - version = hit["version"] - - if name not in packages.keys(): - packages[name] = { - "name": name, - "summary": summary, - "versions": [version], - } - else: - packages[name]["versions"].append(version) - - # if this is the highest version, replace summary and score - if version == highest_version(packages[name]["versions"]): - packages[name]["summary"] = summary - - return list(packages.values()) - - -def print_dist_installation_info(name: str, latest: str) -> None: - env = get_default_environment() - dist = env.get_distribution(name) - if dist is not None: - with indent_log(): - if dist.version == latest: - write_output("INSTALLED: %s (latest)", dist.version) - else: - write_output("INSTALLED: %s", dist.version) - if parse_version(latest).pre: - write_output( - "LATEST: %s (pre-release; install" - " with `pip install --pre`)", - latest, - ) - else: - write_output("LATEST: %s", latest) - - -def print_results( - hits: List["TransformedHit"], - name_column_width: Optional[int] = None, - terminal_width: Optional[int] = None, -) -> None: - if not hits: - return - if name_column_width is None: - name_column_width = ( - max( - [ - len(hit["name"]) + len(highest_version(hit.get("versions", ["-"]))) - for hit in hits - ] - ) - + 4 - ) - - for hit in hits: - name = hit["name"] - summary = hit["summary"] or "" - latest = highest_version(hit.get("versions", ["-"])) - if terminal_width is not None: - target_width = terminal_width - name_column_width - 5 - if target_width > 10: - # wrap and indent summary to fit terminal - summary_lines = textwrap.wrap(summary, target_width) - summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines) - - name_latest = f"{name} ({latest})" - line = f"{name_latest:{name_column_width}} - {summary}" - try: - write_output(line) - print_dist_installation_info(name, latest) - except UnicodeEncodeError: - pass - - -def highest_version(versions: List[str]) -> str: - return max(versions, key=parse_version) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/show.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/show.py deleted file mode 100644 index b47500c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/show.py +++ /dev/null @@ -1,224 +0,0 @@ -import logging -from optparse import Values -from typing import Generator, Iterable, Iterator, List, NamedTuple, Optional - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.metadata import BaseDistribution, get_default_environment -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -class ShowCommand(Command): - """ - Show information about one or more installed packages. - - The output is in RFC-compliant mail header format. - """ - - usage = """ - %prog [options] ...""" - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-f", - "--files", - dest="files", - action="store_true", - default=False, - help="Show the full list of installed files for each package.", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - if not args: - logger.warning("ERROR: Please provide a package name or names.") - return ERROR - query = args - - results = search_packages_info(query) - if not print_results( - results, list_files=options.files, verbose=options.verbose - ): - return ERROR - return SUCCESS - - -class _PackageInfo(NamedTuple): - name: str - version: str - location: str - editable_project_location: Optional[str] - requires: List[str] - required_by: List[str] - installer: str - metadata_version: str - classifiers: List[str] - summary: str - homepage: str - project_urls: List[str] - author: str - author_email: str - license: str - license_expression: str - entry_points: List[str] - files: Optional[List[str]] - - -def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]: - """ - Gather details from installed distributions. Print distribution name, - version, location, and installed files. Installed files requires a - pip generated 'installed-files.txt' in the distributions '.egg-info' - directory. - """ - env = get_default_environment() - - installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()} - query_names = [canonicalize_name(name) for name in query] - missing = sorted( - [name for name, pkg in zip(query, query_names) if pkg not in installed] - ) - if missing: - logger.warning("Package(s) not found: %s", ", ".join(missing)) - - def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: - return ( - dist.metadata["Name"] or "UNKNOWN" - for dist in installed.values() - if current_dist.canonical_name - in {canonicalize_name(d.name) for d in dist.iter_dependencies()} - ) - - for query_name in query_names: - try: - dist = installed[query_name] - except KeyError: - continue - - try: - requires = sorted( - # Avoid duplicates in requirements (e.g. due to environment markers). - {req.name for req in dist.iter_dependencies()}, - key=str.lower, - ) - except InvalidRequirement: - requires = sorted(dist.iter_raw_dependencies(), key=str.lower) - - try: - required_by = sorted(_get_requiring_packages(dist), key=str.lower) - except InvalidRequirement: - required_by = ["#N/A"] - - try: - entry_points_text = dist.read_text("entry_points.txt") - entry_points = entry_points_text.splitlines(keepends=False) - except FileNotFoundError: - entry_points = [] - - files_iter = dist.iter_declared_entries() - if files_iter is None: - files: Optional[List[str]] = None - else: - files = sorted(files_iter) - - metadata = dist.metadata - - project_urls = metadata.get_all("Project-URL", []) - homepage = metadata.get("Home-page", "") - if not homepage: - # It's common that there is a "homepage" Project-URL, but Home-page - # remains unset (especially as PEP 621 doesn't surface the field). - # - # This logic was taken from PyPI's codebase. - for url in project_urls: - url_label, url = url.split(",", maxsplit=1) - normalized_label = ( - url_label.casefold().replace("-", "").replace("_", "").strip() - ) - if normalized_label == "homepage": - homepage = url.strip() - break - - yield _PackageInfo( - name=dist.raw_name, - version=dist.raw_version, - location=dist.location or "", - editable_project_location=dist.editable_project_location, - requires=requires, - required_by=required_by, - installer=dist.installer, - metadata_version=dist.metadata_version or "", - classifiers=metadata.get_all("Classifier", []), - summary=metadata.get("Summary", ""), - homepage=homepage, - project_urls=project_urls, - author=metadata.get("Author", ""), - author_email=metadata.get("Author-email", ""), - license=metadata.get("License", ""), - license_expression=metadata.get("License-Expression", ""), - entry_points=entry_points, - files=files, - ) - - -def print_results( - distributions: Iterable[_PackageInfo], - list_files: bool, - verbose: bool, -) -> bool: - """ - Print the information from installed distributions found. - """ - results_printed = False - for i, dist in enumerate(distributions): - results_printed = True - if i > 0: - write_output("---") - - metadata_version_tuple = tuple(map(int, dist.metadata_version.split("."))) - - write_output("Name: %s", dist.name) - write_output("Version: %s", dist.version) - write_output("Summary: %s", dist.summary) - write_output("Home-page: %s", dist.homepage) - write_output("Author: %s", dist.author) - write_output("Author-email: %s", dist.author_email) - if metadata_version_tuple >= (2, 4) and dist.license_expression: - write_output("License-Expression: %s", dist.license_expression) - else: - write_output("License: %s", dist.license) - write_output("Location: %s", dist.location) - if dist.editable_project_location is not None: - write_output( - "Editable project location: %s", dist.editable_project_location - ) - write_output("Requires: %s", ", ".join(dist.requires)) - write_output("Required-by: %s", ", ".join(dist.required_by)) - - if verbose: - write_output("Metadata-Version: %s", dist.metadata_version) - write_output("Installer: %s", dist.installer) - write_output("Classifiers:") - for classifier in dist.classifiers: - write_output(" %s", classifier) - write_output("Entry-points:") - for entry in dist.entry_points: - write_output(" %s", entry.strip()) - write_output("Project-URLs:") - for project_url in dist.project_urls: - write_output(" %s", project_url) - if list_files: - write_output("Files:") - if dist.files is None: - write_output("Cannot locate RECORD or installed-files.txt") - else: - for line in dist.files: - write_output(" %s", line.strip()) - return results_printed diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py deleted file mode 100644 index bc0edea..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py +++ /dev/null @@ -1,114 +0,0 @@ -import logging -from optparse import Values -from typing import List - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.index_command import SessionCommandMixin -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import InstallationError -from pip._internal.req import parse_requirements -from pip._internal.req.constructors import ( - install_req_from_line, - install_req_from_parsed_requirement, -) -from pip._internal.utils.misc import ( - check_externally_managed, - protect_pip_from_modification_on_windows, - warn_if_run_as_root, -) - -logger = logging.getLogger(__name__) - - -class UninstallCommand(Command, SessionCommandMixin): - """ - Uninstall packages. - - pip is able to uninstall most installed packages. Known exceptions are: - - - Pure distutils packages installed with ``python setup.py install``, which - leave behind no metadata to determine what files were installed. - - Script wrappers installed by ``python setup.py develop``. - """ - - usage = """ - %prog [options] ... - %prog [options] -r ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help=( - "Uninstall all the packages listed in the given requirements " - "file. This option can be used multiple times." - ), - ) - self.cmd_opts.add_option( - "-y", - "--yes", - dest="yes", - action="store_true", - help="Don't ask for confirmation of uninstall deletions.", - ) - self.cmd_opts.add_option(cmdoptions.root_user_action()) - self.cmd_opts.add_option(cmdoptions.override_externally_managed()) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: List[str]) -> int: - session = self.get_default_session(options) - - reqs_to_uninstall = {} - for name in args: - req = install_req_from_line( - name, - isolated=options.isolated_mode, - ) - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - else: - logger.warning( - "Invalid requirement: %r ignored -" - " the uninstall command expects named" - " requirements.", - name, - ) - for filename in options.requirements: - for parsed_req in parse_requirements( - filename, options=options, session=session - ): - req = install_req_from_parsed_requirement( - parsed_req, isolated=options.isolated_mode - ) - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - if not reqs_to_uninstall: - raise InstallationError( - f"You must give at least one requirement to {self.name} (see " - f'"pip help {self.name}")' - ) - - if not options.override_externally_managed: - check_externally_managed() - - protect_pip_from_modification_on_windows( - modifying_pip="pip" in reqs_to_uninstall - ) - - for req in reqs_to_uninstall.values(): - uninstall_pathset = req.uninstall( - auto_confirm=options.yes, - verbose=self.verbosity > 0, - ) - if uninstall_pathset: - uninstall_pathset.commit() - if options.root_user_action == "warn": - warn_if_run_as_root() - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py deleted file mode 100644 index 278719f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py +++ /dev/null @@ -1,182 +0,0 @@ -import logging -import os -import shutil -from optparse import Values -from typing import List - -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.req_command import RequirementCommand, with_cleanup -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.req.req_install import ( - InstallRequirement, - check_legacy_setup_py_options, -) -from pip._internal.utils.misc import ensure_dir, normalize_path -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.wheel_builder import build, should_build_for_wheel_command - -logger = logging.getLogger(__name__) - - -class WheelCommand(RequirementCommand): - """ - Build Wheel archives for your requirements and dependencies. - - Wheel is a built-package format, and offers the advantage of not - recompiling your software during every install. For more details, see the - wheel docs: https://wheel.readthedocs.io/en/latest/ - - 'pip wheel' uses the build system interface as described here: - https://pip.pypa.io/en/stable/reference/build-system/ - - """ - - usage = """ - %prog [options] ... - %prog [options] -r ... - %prog [options] [-e] ... - %prog [options] [-e] ... - %prog [options] ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-w", - "--wheel-dir", - dest="wheel_dir", - metavar="dir", - default=os.curdir, - help=( - "Build wheels into , where the default is the " - "current working directory." - ), - ) - self.cmd_opts.add_option(cmdoptions.no_binary()) - self.cmd_opts.add_option(cmdoptions.only_binary()) - self.cmd_opts.add_option(cmdoptions.prefer_binary()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.no_use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.editable()) - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.src()) - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - - self.cmd_opts.add_option( - "--no-verify", - dest="no_verify", - action="store_true", - default=False, - help="Don't verify if built wheel is valid.", - ) - - self.cmd_opts.add_option(cmdoptions.config_settings()) - self.cmd_opts.add_option(cmdoptions.build_options()) - self.cmd_opts.add_option(cmdoptions.global_options()) - - self.cmd_opts.add_option( - "--pre", - action="store_true", - default=False, - help=( - "Include pre-release and development versions. By default, " - "pip only finds stable versions." - ), - ) - - self.cmd_opts.add_option(cmdoptions.require_hashes()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - @with_cleanup - def run(self, options: Values, args: List[str]) -> int: - session = self.get_default_session(options) - - finder = self._build_package_finder(options, session) - - options.wheel_dir = normalize_path(options.wheel_dir) - ensure_dir(options.wheel_dir) - - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="wheel", - globally_managed=True, - ) - - reqs = self.get_requirements(args, options, finder, session) - check_legacy_setup_py_options(options, reqs) - - wheel_cache = WheelCache(options.cache_dir) - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - download_dir=options.wheel_dir, - use_user_site=False, - verbosity=self.verbosity, - ) - - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - wheel_cache=wheel_cache, - ignore_requires_python=options.ignore_requires_python, - use_pep517=options.use_pep517, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve(reqs, check_supported_wheels=True) - - reqs_to_build: List[InstallRequirement] = [] - for req in requirement_set.requirements.values(): - if req.is_wheel: - preparer.save_linked_requirement(req) - elif should_build_for_wheel_command(req): - reqs_to_build.append(req) - - preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) - - # build wheels - build_successes, build_failures = build( - reqs_to_build, - wheel_cache=wheel_cache, - verify=(not options.no_verify), - build_options=options.build_options or [], - global_options=options.global_options or [], - ) - for req in build_successes: - assert req.link and req.link.is_wheel - assert req.local_file_path - # copy from cache to target directory - try: - shutil.copy(req.local_file_path, options.wheel_dir) - except OSError as e: - logger.warning( - "Building wheel for %s failed: %s", - req.name, - e, - ) - build_failures.append(req) - if len(build_failures) != 0: - raise CommandError("Failed to build one or more wheels") - - return SUCCESS diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/configuration.py b/myenv/lib/python3.12/site-packages/pip/_internal/configuration.py deleted file mode 100644 index ffeda1d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/configuration.py +++ /dev/null @@ -1,383 +0,0 @@ -"""Configuration management setup - -Some terminology: -- name - As written in config files. -- value - Value associated with a name -- key - Name combined with it's section (section.name) -- variant - A single word describing where the configuration key-value pair came from -""" - -import configparser -import locale -import os -import sys -from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple - -from pip._internal.exceptions import ( - ConfigurationError, - ConfigurationFileCouldNotBeLoaded, -) -from pip._internal.utils import appdirs -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ensure_dir, enum - -RawConfigParser = configparser.RawConfigParser # Shorthand -Kind = NewType("Kind", str) - -CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf" -ENV_NAMES_IGNORED = "version", "help" - -# The kinds of configurations there are. -kinds = enum( - USER="user", # User Specific - GLOBAL="global", # System Wide - SITE="site", # [Virtual] Environment Specific - ENV="env", # from PIP_CONFIG_FILE - ENV_VAR="env-var", # from Environment Variables -) -OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR -VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE - -logger = getLogger(__name__) - - -# NOTE: Maybe use the optionx attribute to normalize keynames. -def _normalize_name(name: str) -> str: - """Make a name consistent regardless of source (environment or file)""" - name = name.lower().replace("_", "-") - if name.startswith("--"): - name = name[2:] # only prefer long opts - return name - - -def _disassemble_key(name: str) -> List[str]: - if "." not in name: - error_message = ( - "Key does not contain dot separated section and key. " - f"Perhaps you wanted to use 'global.{name}' instead?" - ) - raise ConfigurationError(error_message) - return name.split(".", 1) - - -def get_configuration_files() -> Dict[Kind, List[str]]: - global_config_files = [ - os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip") - ] - - site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) - legacy_config_file = os.path.join( - os.path.expanduser("~"), - "pip" if WINDOWS else ".pip", - CONFIG_BASENAME, - ) - new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME) - return { - kinds.GLOBAL: global_config_files, - kinds.SITE: [site_config_file], - kinds.USER: [legacy_config_file, new_config_file], - } - - -class Configuration: - """Handles management of configuration. - - Provides an interface to accessing and managing configuration files. - - This class converts provides an API that takes "section.key-name" style - keys and stores the value associated with it as "key-name" under the - section "section". - - This allows for a clean interface wherein the both the section and the - key-name are preserved in an easy to manage form in the configuration files - and the data stored is also nice. - """ - - def __init__(self, isolated: bool, load_only: Optional[Kind] = None) -> None: - super().__init__() - - if load_only is not None and load_only not in VALID_LOAD_ONLY: - raise ConfigurationError( - "Got invalid value for load_only - should be one of {}".format( - ", ".join(map(repr, VALID_LOAD_ONLY)) - ) - ) - self.isolated = isolated - self.load_only = load_only - - # Because we keep track of where we got the data from - self._parsers: Dict[Kind, List[Tuple[str, RawConfigParser]]] = { - variant: [] for variant in OVERRIDE_ORDER - } - self._config: Dict[Kind, Dict[str, Any]] = { - variant: {} for variant in OVERRIDE_ORDER - } - self._modified_parsers: List[Tuple[str, RawConfigParser]] = [] - - def load(self) -> None: - """Loads configuration from configuration files and environment""" - self._load_config_files() - if not self.isolated: - self._load_environment_vars() - - def get_file_to_edit(self) -> Optional[str]: - """Returns the file with highest priority in configuration""" - assert self.load_only is not None, "Need to be specified a file to be editing" - - try: - return self._get_parser_to_modify()[0] - except IndexError: - return None - - def items(self) -> Iterable[Tuple[str, Any]]: - """Returns key-value pairs like dict.items() representing the loaded - configuration - """ - return self._dictionary.items() - - def get_value(self, key: str) -> Any: - """Get a value from the configuration.""" - orig_key = key - key = _normalize_name(key) - try: - return self._dictionary[key] - except KeyError: - # disassembling triggers a more useful error message than simply - # "No such key" in the case that the key isn't in the form command.option - _disassemble_key(key) - raise ConfigurationError(f"No such key - {orig_key}") - - def set_value(self, key: str, value: Any) -> None: - """Modify a value in the configuration.""" - key = _normalize_name(key) - self._ensure_have_load_only() - - assert self.load_only - fname, parser = self._get_parser_to_modify() - - if parser is not None: - section, name = _disassemble_key(key) - - # Modify the parser and the configuration - if not parser.has_section(section): - parser.add_section(section) - parser.set(section, name, value) - - self._config[self.load_only][key] = value - self._mark_as_modified(fname, parser) - - def unset_value(self, key: str) -> None: - """Unset a value in the configuration.""" - orig_key = key - key = _normalize_name(key) - self._ensure_have_load_only() - - assert self.load_only - if key not in self._config[self.load_only]: - raise ConfigurationError(f"No such key - {orig_key}") - - fname, parser = self._get_parser_to_modify() - - if parser is not None: - section, name = _disassemble_key(key) - if not ( - parser.has_section(section) and parser.remove_option(section, name) - ): - # The option was not removed. - raise ConfigurationError( - "Fatal Internal error [id=1]. Please report as a bug." - ) - - # The section may be empty after the option was removed. - if not parser.items(section): - parser.remove_section(section) - self._mark_as_modified(fname, parser) - - del self._config[self.load_only][key] - - def save(self) -> None: - """Save the current in-memory state.""" - self._ensure_have_load_only() - - for fname, parser in self._modified_parsers: - logger.info("Writing to %s", fname) - - # Ensure directory exists. - ensure_dir(os.path.dirname(fname)) - - # Ensure directory's permission(need to be writeable) - try: - with open(fname, "w") as f: - parser.write(f) - except OSError as error: - raise ConfigurationError( - f"An error occurred while writing to the configuration file " - f"{fname}: {error}" - ) - - # - # Private routines - # - - def _ensure_have_load_only(self) -> None: - if self.load_only is None: - raise ConfigurationError("Needed a specific file to be modifying.") - logger.debug("Will be working with %s variant only", self.load_only) - - @property - def _dictionary(self) -> Dict[str, Any]: - """A dictionary representing the loaded configuration.""" - # NOTE: Dictionaries are not populated if not loaded. So, conditionals - # are not needed here. - retval = {} - - for variant in OVERRIDE_ORDER: - retval.update(self._config[variant]) - - return retval - - def _load_config_files(self) -> None: - """Loads configuration from configuration files""" - config_files = dict(self.iter_config_files()) - if config_files[kinds.ENV][0:1] == [os.devnull]: - logger.debug( - "Skipping loading configuration files due to " - "environment's PIP_CONFIG_FILE being os.devnull" - ) - return - - for variant, files in config_files.items(): - for fname in files: - # If there's specific variant set in `load_only`, load only - # that variant, not the others. - if self.load_only is not None and variant != self.load_only: - logger.debug("Skipping file '%s' (variant: %s)", fname, variant) - continue - - parser = self._load_file(variant, fname) - - # Keeping track of the parsers used - self._parsers[variant].append((fname, parser)) - - def _load_file(self, variant: Kind, fname: str) -> RawConfigParser: - logger.verbose("For variant '%s', will try loading '%s'", variant, fname) - parser = self._construct_parser(fname) - - for section in parser.sections(): - items = parser.items(section) - self._config[variant].update(self._normalized_keys(section, items)) - - return parser - - def _construct_parser(self, fname: str) -> RawConfigParser: - parser = configparser.RawConfigParser() - # If there is no such file, don't bother reading it but create the - # parser anyway, to hold the data. - # Doing this is useful when modifying and saving files, where we don't - # need to construct a parser. - if os.path.exists(fname): - locale_encoding = locale.getpreferredencoding(False) - try: - parser.read(fname, encoding=locale_encoding) - except UnicodeDecodeError: - # See https://github.com/pypa/pip/issues/4963 - raise ConfigurationFileCouldNotBeLoaded( - reason=f"contains invalid {locale_encoding} characters", - fname=fname, - ) - except configparser.Error as error: - # See https://github.com/pypa/pip/issues/4893 - raise ConfigurationFileCouldNotBeLoaded(error=error) - return parser - - def _load_environment_vars(self) -> None: - """Loads configuration from environment variables""" - self._config[kinds.ENV_VAR].update( - self._normalized_keys(":env:", self.get_environ_vars()) - ) - - def _normalized_keys( - self, section: str, items: Iterable[Tuple[str, Any]] - ) -> Dict[str, Any]: - """Normalizes items to construct a dictionary with normalized keys. - - This routine is where the names become keys and are made the same - regardless of source - configuration files or environment. - """ - normalized = {} - for name, val in items: - key = section + "." + _normalize_name(name) - normalized[key] = val - return normalized - - def get_environ_vars(self) -> Iterable[Tuple[str, str]]: - """Returns a generator with all environmental vars with prefix PIP_""" - for key, val in os.environ.items(): - if key.startswith("PIP_"): - name = key[4:].lower() - if name not in ENV_NAMES_IGNORED: - yield name, val - - # XXX: This is patched in the tests. - def iter_config_files(self) -> Iterable[Tuple[Kind, List[str]]]: - """Yields variant and configuration files associated with it. - - This should be treated like items of a dictionary. The order - here doesn't affect what gets overridden. That is controlled - by OVERRIDE_ORDER. However this does control the order they are - displayed to the user. It's probably most ergonomic to display - things in the same order as OVERRIDE_ORDER - """ - # SMELL: Move the conditions out of this function - - env_config_file = os.environ.get("PIP_CONFIG_FILE", None) - config_files = get_configuration_files() - - yield kinds.GLOBAL, config_files[kinds.GLOBAL] - - # per-user config is not loaded when env_config_file exists - should_load_user_config = not self.isolated and not ( - env_config_file and os.path.exists(env_config_file) - ) - if should_load_user_config: - # The legacy config file is overridden by the new config file - yield kinds.USER, config_files[kinds.USER] - - # virtualenv config - yield kinds.SITE, config_files[kinds.SITE] - - if env_config_file is not None: - yield kinds.ENV, [env_config_file] - else: - yield kinds.ENV, [] - - def get_values_in_config(self, variant: Kind) -> Dict[str, Any]: - """Get values present in a config file""" - return self._config[variant] - - def _get_parser_to_modify(self) -> Tuple[str, RawConfigParser]: - # Determine which parser to modify - assert self.load_only - parsers = self._parsers[self.load_only] - if not parsers: - # This should not happen if everything works correctly. - raise ConfigurationError( - "Fatal Internal error [id=2]. Please report as a bug." - ) - - # Use the highest priority parser. - return parsers[-1] - - # XXX: This is patched in the tests. - def _mark_as_modified(self, fname: str, parser: RawConfigParser) -> None: - file_parser_tuple = (fname, parser) - if file_parser_tuple not in self._modified_parsers: - self._modified_parsers.append(file_parser_tuple) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self._dictionary!r})" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py deleted file mode 100644 index 9a89a83..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.distributions.sdist import SourceDistribution -from pip._internal.distributions.wheel import WheelDistribution -from pip._internal.req.req_install import InstallRequirement - - -def make_distribution_for_install_requirement( - install_req: InstallRequirement, -) -> AbstractDistribution: - """Returns a Distribution for the given InstallRequirement""" - # Editable requirements will always be source distributions. They use the - # legacy logic until we create a modern standard for them. - if install_req.editable: - return SourceDistribution(install_req) - - # If it's a wheel, it's a WheelDistribution - if install_req.is_wheel: - return WheelDistribution(install_req) - - # Otherwise, a SourceDistribution - return SourceDistribution(install_req) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 930fcca..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc deleted file mode 100644 index db32442..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc deleted file mode 100644 index e54f03c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc deleted file mode 100644 index a55c0ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index 0ac2bc6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/base.py b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/base.py deleted file mode 100644 index 6e4d0c9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/base.py +++ /dev/null @@ -1,53 +0,0 @@ -import abc -from typing import TYPE_CHECKING, Optional - -from pip._internal.metadata.base import BaseDistribution -from pip._internal.req import InstallRequirement - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - - -class AbstractDistribution(metaclass=abc.ABCMeta): - """A base class for handling installable artifacts. - - The requirements for anything installable are as follows: - - - we must be able to determine the requirement name - (or we can't correctly handle the non-upgrade case). - - - for packages with setup requirements, we must also be able - to determine their requirements without installing additional - packages (for the same reason as run-time dependencies) - - - we must be able to create a Distribution object exposing the - above metadata. - - - if we need to do work in the build tracker, we must be able to generate a unique - string to identify the requirement in the build tracker. - """ - - def __init__(self, req: InstallRequirement) -> None: - super().__init__() - self.req = req - - @abc.abstractproperty - def build_tracker_id(self) -> Optional[str]: - """A string that uniquely identifies this requirement to the build tracker. - - If None, then this dist has no work to do in the build tracker, and - ``.prepare_distribution_metadata()`` will not be called.""" - raise NotImplementedError() - - @abc.abstractmethod - def get_metadata_distribution(self) -> BaseDistribution: - raise NotImplementedError() - - @abc.abstractmethod - def prepare_distribution_metadata( - self, - finder: "PackageFinder", - build_isolation: bool, - check_build_deps: bool, - ) -> None: - raise NotImplementedError() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py deleted file mode 100644 index ab8d53b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py +++ /dev/null @@ -1,29 +0,0 @@ -from typing import Optional - -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution - - -class InstalledDistribution(AbstractDistribution): - """Represents an installed package. - - This does not need any preparation as the required information has already - been computed. - """ - - @property - def build_tracker_id(self) -> Optional[str]: - return None - - def get_metadata_distribution(self) -> BaseDistribution: - assert self.req.satisfied_by is not None, "not actually installed" - return self.req.satisfied_by - - def prepare_distribution_metadata( - self, - finder: PackageFinder, - build_isolation: bool, - check_build_deps: bool, - ) -> None: - pass diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py deleted file mode 100644 index 28ea5ce..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py +++ /dev/null @@ -1,158 +0,0 @@ -import logging -from typing import TYPE_CHECKING, Iterable, Optional, Set, Tuple - -from pip._internal.build_env import BuildEnvironment -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.exceptions import InstallationError -from pip._internal.metadata import BaseDistribution -from pip._internal.utils.subprocess import runner_with_spinner_message - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - -logger = logging.getLogger(__name__) - - -class SourceDistribution(AbstractDistribution): - """Represents a source distribution. - - The preparation step for these needs metadata for the packages to be - generated, either using PEP 517 or using the legacy `setup.py egg_info`. - """ - - @property - def build_tracker_id(self) -> Optional[str]: - """Identify this requirement uniquely by its link.""" - assert self.req.link - return self.req.link.url_without_fragment - - def get_metadata_distribution(self) -> BaseDistribution: - return self.req.get_dist() - - def prepare_distribution_metadata( - self, - finder: "PackageFinder", - build_isolation: bool, - check_build_deps: bool, - ) -> None: - # Load pyproject.toml, to determine whether PEP 517 is to be used - self.req.load_pyproject_toml() - - # Set up the build isolation, if this requirement should be isolated - should_isolate = self.req.use_pep517 and build_isolation - if should_isolate: - # Setup an isolated environment and install the build backend static - # requirements in it. - self._prepare_build_backend(finder) - # Check that if the requirement is editable, it either supports PEP 660 or - # has a setup.py or a setup.cfg. This cannot be done earlier because we need - # to setup the build backend to verify it supports build_editable, nor can - # it be done later, because we want to avoid installing build requirements - # needlessly. Doing it here also works around setuptools generating - # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory - # without setup.py nor setup.cfg. - self.req.isolated_editable_sanity_check() - # Install the dynamic build requirements. - self._install_build_reqs(finder) - # Check if the current environment provides build dependencies - should_check_deps = self.req.use_pep517 and check_build_deps - if should_check_deps: - pyproject_requires = self.req.pyproject_requires - assert pyproject_requires is not None - conflicting, missing = self.req.build_env.check_requirements( - pyproject_requires - ) - if conflicting: - self._raise_conflicts("the backend dependencies", conflicting) - if missing: - self._raise_missing_reqs(missing) - self.req.prepare_metadata() - - def _prepare_build_backend(self, finder: "PackageFinder") -> None: - # Isolate in a BuildEnvironment and install the build-time - # requirements. - pyproject_requires = self.req.pyproject_requires - assert pyproject_requires is not None - - self.req.build_env = BuildEnvironment() - self.req.build_env.install_requirements( - finder, pyproject_requires, "overlay", kind="build dependencies" - ) - conflicting, missing = self.req.build_env.check_requirements( - self.req.requirements_to_check - ) - if conflicting: - self._raise_conflicts("PEP 517/518 supported requirements", conflicting) - if missing: - logger.warning( - "Missing build requirements in pyproject.toml for %s.", - self.req, - ) - logger.warning( - "The project does not specify a build backend, and " - "pip cannot fall back to setuptools without %s.", - " and ".join(map(repr, sorted(missing))), - ) - - def _get_build_requires_wheel(self) -> Iterable[str]: - with self.req.build_env: - runner = runner_with_spinner_message("Getting requirements to build wheel") - backend = self.req.pep517_backend - assert backend is not None - with backend.subprocess_runner(runner): - return backend.get_requires_for_build_wheel() - - def _get_build_requires_editable(self) -> Iterable[str]: - with self.req.build_env: - runner = runner_with_spinner_message( - "Getting requirements to build editable" - ) - backend = self.req.pep517_backend - assert backend is not None - with backend.subprocess_runner(runner): - return backend.get_requires_for_build_editable() - - def _install_build_reqs(self, finder: "PackageFinder") -> None: - # Install any extra build dependencies that the backend requests. - # This must be done in a second pass, as the pyproject.toml - # dependencies must be installed before we can call the backend. - if ( - self.req.editable - and self.req.permit_editable_wheels - and self.req.supports_pyproject_editable - ): - build_reqs = self._get_build_requires_editable() - else: - build_reqs = self._get_build_requires_wheel() - conflicting, missing = self.req.build_env.check_requirements(build_reqs) - if conflicting: - self._raise_conflicts("the backend dependencies", conflicting) - self.req.build_env.install_requirements( - finder, missing, "normal", kind="backend dependencies" - ) - - def _raise_conflicts( - self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]] - ) -> None: - format_string = ( - "Some build dependencies for {requirement} " - "conflict with {conflicting_with}: {description}." - ) - error_message = format_string.format( - requirement=self.req, - conflicting_with=conflicting_with, - description=", ".join( - f"{installed} is incompatible with {wanted}" - for installed, wanted in sorted(conflicting_reqs) - ), - ) - raise InstallationError(error_message) - - def _raise_missing_reqs(self, missing: Set[str]) -> None: - format_string = ( - "Some build dependencies for {requirement} are missing: {missing}." - ) - error_message = format_string.format( - requirement=self.req, missing=", ".join(map(repr, sorted(missing))) - ) - raise InstallationError(error_message) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py deleted file mode 100644 index bfadd39..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import TYPE_CHECKING, Optional - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.metadata import ( - BaseDistribution, - FilesystemWheel, - get_wheel_distribution, -) - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - - -class WheelDistribution(AbstractDistribution): - """Represents a wheel distribution. - - This does not need any preparation as wheels can be directly unpacked. - """ - - @property - def build_tracker_id(self) -> Optional[str]: - return None - - def get_metadata_distribution(self) -> BaseDistribution: - """Loads the metadata from the wheel file into memory and returns a - Distribution that uses it, not relying on the wheel file or - requirement. - """ - assert self.req.local_file_path, "Set as part of preparation during download" - assert self.req.name, "Wheels are never unnamed" - wheel = FilesystemWheel(self.req.local_file_path) - return get_wheel_distribution(wheel, canonicalize_name(self.req.name)) - - def prepare_distribution_metadata( - self, - finder: "PackageFinder", - build_isolation: bool, - check_build_deps: bool, - ) -> None: - pass diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/exceptions.py b/myenv/lib/python3.12/site-packages/pip/_internal/exceptions.py deleted file mode 100644 index 45a876a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/exceptions.py +++ /dev/null @@ -1,809 +0,0 @@ -"""Exceptions used throughout package. - -This module MUST NOT try to import from anything within `pip._internal` to -operate. This is expected to be importable from any/all files within the -subpackage and, thus, should not depend on them. -""" - -import configparser -import contextlib -import locale -import logging -import pathlib -import re -import sys -from itertools import chain, groupby, repeat -from typing import TYPE_CHECKING, Dict, Iterator, List, Literal, Optional, Union - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.version import InvalidVersion -from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult -from pip._vendor.rich.markup import escape -from pip._vendor.rich.text import Text - -if TYPE_CHECKING: - from hashlib import _Hash - - from pip._vendor.requests.models import Request, Response - - from pip._internal.metadata import BaseDistribution - from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -# -# Scaffolding -# -def _is_kebab_case(s: str) -> bool: - return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None - - -def _prefix_with_indent( - s: Union[Text, str], - console: Console, - *, - prefix: str, - indent: str, -) -> Text: - if isinstance(s, Text): - text = s - else: - text = console.render_str(s) - - return console.render_str(prefix, overflow="ignore") + console.render_str( - f"\n{indent}", overflow="ignore" - ).join(text.split(allow_blank=True)) - - -class PipError(Exception): - """The base pip error.""" - - -class DiagnosticPipError(PipError): - """An error, that presents diagnostic information to the user. - - This contains a bunch of logic, to enable pretty presentation of our error - messages. Each error gets a unique reference. Each error can also include - additional context, a hint and/or a note -- which are presented with the - main error message in a consistent style. - - This is adapted from the error output styling in `sphinx-theme-builder`. - """ - - reference: str - - def __init__( - self, - *, - kind: 'Literal["error", "warning"]' = "error", - reference: Optional[str] = None, - message: Union[str, Text], - context: Optional[Union[str, Text]], - hint_stmt: Optional[Union[str, Text]], - note_stmt: Optional[Union[str, Text]] = None, - link: Optional[str] = None, - ) -> None: - # Ensure a proper reference is provided. - if reference is None: - assert hasattr(self, "reference"), "error reference not provided!" - reference = self.reference - assert _is_kebab_case(reference), "error reference must be kebab-case!" - - self.kind = kind - self.reference = reference - - self.message = message - self.context = context - - self.note_stmt = note_stmt - self.hint_stmt = hint_stmt - - self.link = link - - super().__init__(f"<{self.__class__.__name__}: {self.reference}>") - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__name__}(" - f"reference={self.reference!r}, " - f"message={self.message!r}, " - f"context={self.context!r}, " - f"note_stmt={self.note_stmt!r}, " - f"hint_stmt={self.hint_stmt!r}" - ")>" - ) - - def __rich_console__( - self, - console: Console, - options: ConsoleOptions, - ) -> RenderResult: - colour = "red" if self.kind == "error" else "yellow" - - yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]" - yield "" - - if not options.ascii_only: - # Present the main message, with relevant context indented. - if self.context is not None: - yield _prefix_with_indent( - self.message, - console, - prefix=f"[{colour}]×[/] ", - indent=f"[{colour}]│[/] ", - ) - yield _prefix_with_indent( - self.context, - console, - prefix=f"[{colour}]╰─>[/] ", - indent=f"[{colour}] [/] ", - ) - else: - yield _prefix_with_indent( - self.message, - console, - prefix="[red]×[/] ", - indent=" ", - ) - else: - yield self.message - if self.context is not None: - yield "" - yield self.context - - if self.note_stmt is not None or self.hint_stmt is not None: - yield "" - - if self.note_stmt is not None: - yield _prefix_with_indent( - self.note_stmt, - console, - prefix="[magenta bold]note[/]: ", - indent=" ", - ) - if self.hint_stmt is not None: - yield _prefix_with_indent( - self.hint_stmt, - console, - prefix="[cyan bold]hint[/]: ", - indent=" ", - ) - - if self.link is not None: - yield "" - yield f"Link: {self.link}" - - -# -# Actual Errors -# -class ConfigurationError(PipError): - """General exception in configuration""" - - -class InstallationError(PipError): - """General exception during installation""" - - -class MissingPyProjectBuildRequires(DiagnosticPipError): - """Raised when pyproject.toml has `build-system`, but no `build-system.requires`.""" - - reference = "missing-pyproject-build-system-requires" - - def __init__(self, *, package: str) -> None: - super().__init__( - message=f"Can not process {escape(package)}", - context=Text( - "This package has an invalid pyproject.toml file.\n" - "The [build-system] table is missing the mandatory `requires` key." - ), - note_stmt="This is an issue with the package mentioned above, not pip.", - hint_stmt=Text("See PEP 518 for the detailed specification."), - ) - - -class InvalidPyProjectBuildRequires(DiagnosticPipError): - """Raised when pyproject.toml an invalid `build-system.requires`.""" - - reference = "invalid-pyproject-build-system-requires" - - def __init__(self, *, package: str, reason: str) -> None: - super().__init__( - message=f"Can not process {escape(package)}", - context=Text( - "This package has an invalid `build-system.requires` key in " - f"pyproject.toml.\n{reason}" - ), - note_stmt="This is an issue with the package mentioned above, not pip.", - hint_stmt=Text("See PEP 518 for the detailed specification."), - ) - - -class NoneMetadataError(PipError): - """Raised when accessing a Distribution's "METADATA" or "PKG-INFO". - - This signifies an inconsistency, when the Distribution claims to have - the metadata file (if not, raise ``FileNotFoundError`` instead), but is - not actually able to produce its content. This may be due to permission - errors. - """ - - def __init__( - self, - dist: "BaseDistribution", - metadata_name: str, - ) -> None: - """ - :param dist: A Distribution object. - :param metadata_name: The name of the metadata being accessed - (can be "METADATA" or "PKG-INFO"). - """ - self.dist = dist - self.metadata_name = metadata_name - - def __str__(self) -> str: - # Use `dist` in the error message because its stringification - # includes more information, like the version and location. - return f"None {self.metadata_name} metadata found for distribution: {self.dist}" - - -class UserInstallationInvalid(InstallationError): - """A --user install is requested on an environment without user site.""" - - def __str__(self) -> str: - return "User base directory is not specified" - - -class InvalidSchemeCombination(InstallationError): - def __str__(self) -> str: - before = ", ".join(str(a) for a in self.args[:-1]) - return f"Cannot set {before} and {self.args[-1]} together" - - -class DistributionNotFound(InstallationError): - """Raised when a distribution cannot be found to satisfy a requirement""" - - -class RequirementsFileParseError(InstallationError): - """Raised when a general error occurs parsing a requirements file line.""" - - -class BestVersionAlreadyInstalled(PipError): - """Raised when the most up-to-date version of a package is already - installed.""" - - -class BadCommand(PipError): - """Raised when virtualenv or a command is not found""" - - -class CommandError(PipError): - """Raised when there is an error in command-line arguments""" - - -class PreviousBuildDirError(PipError): - """Raised when there's a previous conflicting build directory""" - - -class NetworkConnectionError(PipError): - """HTTP connection error""" - - def __init__( - self, - error_msg: str, - response: Optional["Response"] = None, - request: Optional["Request"] = None, - ) -> None: - """ - Initialize NetworkConnectionError with `request` and `response` - objects. - """ - self.response = response - self.request = request - self.error_msg = error_msg - if ( - self.response is not None - and not self.request - and hasattr(response, "request") - ): - self.request = self.response.request - super().__init__(error_msg, response, request) - - def __str__(self) -> str: - return str(self.error_msg) - - -class InvalidWheelFilename(InstallationError): - """Invalid wheel filename.""" - - -class UnsupportedWheel(InstallationError): - """Unsupported wheel.""" - - -class InvalidWheel(InstallationError): - """Invalid (e.g. corrupt) wheel.""" - - def __init__(self, location: str, name: str): - self.location = location - self.name = name - - def __str__(self) -> str: - return f"Wheel '{self.name}' located at {self.location} is invalid." - - -class MetadataInconsistent(InstallationError): - """Built metadata contains inconsistent information. - - This is raised when the metadata contains values (e.g. name and version) - that do not match the information previously obtained from sdist filename, - user-supplied ``#egg=`` value, or an install requirement name. - """ - - def __init__( - self, ireq: "InstallRequirement", field: str, f_val: str, m_val: str - ) -> None: - self.ireq = ireq - self.field = field - self.f_val = f_val - self.m_val = m_val - - def __str__(self) -> str: - return ( - f"Requested {self.ireq} has inconsistent {self.field}: " - f"expected {self.f_val!r}, but metadata has {self.m_val!r}" - ) - - -class MetadataInvalid(InstallationError): - """Metadata is invalid.""" - - def __init__(self, ireq: "InstallRequirement", error: str) -> None: - self.ireq = ireq - self.error = error - - def __str__(self) -> str: - return f"Requested {self.ireq} has invalid metadata: {self.error}" - - -class InstallationSubprocessError(DiagnosticPipError, InstallationError): - """A subprocess call failed.""" - - reference = "subprocess-exited-with-error" - - def __init__( - self, - *, - command_description: str, - exit_code: int, - output_lines: Optional[List[str]], - ) -> None: - if output_lines is None: - output_prompt = Text("See above for output.") - else: - output_prompt = ( - Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n") - + Text("".join(output_lines)) - + Text.from_markup(R"[red]\[end of output][/]") - ) - - super().__init__( - message=( - f"[green]{escape(command_description)}[/] did not run successfully.\n" - f"exit code: {exit_code}" - ), - context=output_prompt, - hint_stmt=None, - note_stmt=( - "This error originates from a subprocess, and is likely not a " - "problem with pip." - ), - ) - - self.command_description = command_description - self.exit_code = exit_code - - def __str__(self) -> str: - return f"{self.command_description} exited with {self.exit_code}" - - -class MetadataGenerationFailed(InstallationSubprocessError, InstallationError): - reference = "metadata-generation-failed" - - def __init__( - self, - *, - package_details: str, - ) -> None: - super(InstallationSubprocessError, self).__init__( - message="Encountered error while generating package metadata.", - context=escape(package_details), - hint_stmt="See above for details.", - note_stmt="This is an issue with the package mentioned above, not pip.", - ) - - def __str__(self) -> str: - return "metadata generation failed" - - -class HashErrors(InstallationError): - """Multiple HashError instances rolled into one for reporting""" - - def __init__(self) -> None: - self.errors: List[HashError] = [] - - def append(self, error: "HashError") -> None: - self.errors.append(error) - - def __str__(self) -> str: - lines = [] - self.errors.sort(key=lambda e: e.order) - for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): - lines.append(cls.head) - lines.extend(e.body() for e in errors_of_cls) - if lines: - return "\n".join(lines) - return "" - - def __bool__(self) -> bool: - return bool(self.errors) - - -class HashError(InstallationError): - """ - A failure to verify a package against known-good hashes - - :cvar order: An int sorting hash exception classes by difficulty of - recovery (lower being harder), so the user doesn't bother fretting - about unpinned packages when he has deeper issues, like VCS - dependencies, to deal with. Also keeps error reports in a - deterministic order. - :cvar head: A section heading for display above potentially many - exceptions of this kind - :ivar req: The InstallRequirement that triggered this error. This is - pasted on after the exception is instantiated, because it's not - typically available earlier. - - """ - - req: Optional["InstallRequirement"] = None - head = "" - order: int = -1 - - def body(self) -> str: - """Return a summary of me for display under the heading. - - This default implementation simply prints a description of the - triggering requirement. - - :param req: The InstallRequirement that provoked this error, with - its link already populated by the resolver's _populate_link(). - - """ - return f" {self._requirement_name()}" - - def __str__(self) -> str: - return f"{self.head}\n{self.body()}" - - def _requirement_name(self) -> str: - """Return a description of the requirement that triggered me. - - This default implementation returns long description of the req, with - line numbers - - """ - return str(self.req) if self.req else "unknown package" - - -class VcsHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 0 - head = ( - "Can't verify hashes for these requirements because we don't " - "have a way to hash version control repositories:" - ) - - -class DirectoryUrlHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 1 - head = ( - "Can't verify hashes for these file:// requirements because they " - "point to directories:" - ) - - -class HashMissing(HashError): - """A hash was needed for a requirement but is absent.""" - - order = 2 - head = ( - "Hashes are required in --require-hashes mode, but they are " - "missing from some requirements. Here is a list of those " - "requirements along with the hashes their downloaded archives " - "actually had. Add lines like these to your requirements files to " - "prevent tampering. (If you did not enable --require-hashes " - "manually, note that it turns on automatically when any package " - "has a hash.)" - ) - - def __init__(self, gotten_hash: str) -> None: - """ - :param gotten_hash: The hash of the (possibly malicious) archive we - just downloaded - """ - self.gotten_hash = gotten_hash - - def body(self) -> str: - # Dodge circular import. - from pip._internal.utils.hashes import FAVORITE_HASH - - package = None - if self.req: - # In the case of URL-based requirements, display the original URL - # seen in the requirements file rather than the package name, - # so the output can be directly copied into the requirements file. - package = ( - self.req.original_link - if self.req.is_direct - # In case someone feeds something downright stupid - # to InstallRequirement's constructor. - else getattr(self.req, "req", None) - ) - return " {} --hash={}:{}".format( - package or "unknown package", FAVORITE_HASH, self.gotten_hash - ) - - -class HashUnpinned(HashError): - """A requirement had a hash specified but was not pinned to a specific - version.""" - - order = 3 - head = ( - "In --require-hashes mode, all requirements must have their " - "versions pinned with ==. These do not:" - ) - - -class HashMismatch(HashError): - """ - Distribution file hash values don't match. - - :ivar package_name: The name of the package that triggered the hash - mismatch. Feel free to write to this after the exception is raise to - improve its error message. - - """ - - order = 4 - head = ( - "THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS " - "FILE. If you have updated the package versions, please update " - "the hashes. Otherwise, examine the package contents carefully; " - "someone may have tampered with them." - ) - - def __init__(self, allowed: Dict[str, List[str]], gots: Dict[str, "_Hash"]) -> None: - """ - :param allowed: A dict of algorithm names pointing to lists of allowed - hex digests - :param gots: A dict of algorithm names pointing to hashes we - actually got from the files under suspicion - """ - self.allowed = allowed - self.gots = gots - - def body(self) -> str: - return f" {self._requirement_name()}:\n{self._hash_comparison()}" - - def _hash_comparison(self) -> str: - """ - Return a comparison of actual and expected hash values. - - Example:: - - Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde - or 123451234512345123451234512345123451234512345 - Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef - - """ - - def hash_then_or(hash_name: str) -> "chain[str]": - # For now, all the decent hashes have 6-char names, so we can get - # away with hard-coding space literals. - return chain([hash_name], repeat(" or")) - - lines: List[str] = [] - for hash_name, expecteds in self.allowed.items(): - prefix = hash_then_or(hash_name) - lines.extend((f" Expected {next(prefix)} {e}") for e in expecteds) - lines.append( - f" Got {self.gots[hash_name].hexdigest()}\n" - ) - return "\n".join(lines) - - -class UnsupportedPythonVersion(InstallationError): - """Unsupported python version according to Requires-Python package - metadata.""" - - -class ConfigurationFileCouldNotBeLoaded(ConfigurationError): - """When there are errors while loading a configuration file""" - - def __init__( - self, - reason: str = "could not be loaded", - fname: Optional[str] = None, - error: Optional[configparser.Error] = None, - ) -> None: - super().__init__(error) - self.reason = reason - self.fname = fname - self.error = error - - def __str__(self) -> str: - if self.fname is not None: - message_part = f" in {self.fname}." - else: - assert self.error is not None - message_part = f".\n{self.error}\n" - return f"Configuration file {self.reason}{message_part}" - - -_DEFAULT_EXTERNALLY_MANAGED_ERROR = f"""\ -The Python environment under {sys.prefix} is managed externally, and may not be -manipulated by the user. Please use specific tooling from the distributor of -the Python installation to interact with this environment instead. -""" - - -class ExternallyManagedEnvironment(DiagnosticPipError): - """The current environment is externally managed. - - This is raised when the current environment is externally managed, as - defined by `PEP 668`_. The ``EXTERNALLY-MANAGED`` configuration is checked - and displayed when the error is bubbled up to the user. - - :param error: The error message read from ``EXTERNALLY-MANAGED``. - """ - - reference = "externally-managed-environment" - - def __init__(self, error: Optional[str]) -> None: - if error is None: - context = Text(_DEFAULT_EXTERNALLY_MANAGED_ERROR) - else: - context = Text(error) - super().__init__( - message="This environment is externally managed", - context=context, - note_stmt=( - "If you believe this is a mistake, please contact your " - "Python installation or OS distribution provider. " - "You can override this, at the risk of breaking your Python " - "installation or OS, by passing --break-system-packages." - ), - hint_stmt=Text("See PEP 668 for the detailed specification."), - ) - - @staticmethod - def _iter_externally_managed_error_keys() -> Iterator[str]: - # LC_MESSAGES is in POSIX, but not the C standard. The most common - # platform that does not implement this category is Windows, where - # using other categories for console message localization is equally - # unreliable, so we fall back to the locale-less vendor message. This - # can always be re-evaluated when a vendor proposes a new alternative. - try: - category = locale.LC_MESSAGES - except AttributeError: - lang: Optional[str] = None - else: - lang, _ = locale.getlocale(category) - if lang is not None: - yield f"Error-{lang}" - for sep in ("-", "_"): - before, found, _ = lang.partition(sep) - if not found: - continue - yield f"Error-{before}" - yield "Error" - - @classmethod - def from_config( - cls, - config: Union[pathlib.Path, str], - ) -> "ExternallyManagedEnvironment": - parser = configparser.ConfigParser(interpolation=None) - try: - parser.read(config, encoding="utf-8") - section = parser["externally-managed"] - for key in cls._iter_externally_managed_error_keys(): - with contextlib.suppress(KeyError): - return cls(section[key]) - except KeyError: - pass - except (OSError, UnicodeDecodeError, configparser.ParsingError): - from pip._internal.utils._log import VERBOSE - - exc_info = logger.isEnabledFor(VERBOSE) - logger.warning("Failed to read %s", config, exc_info=exc_info) - return cls(None) - - -class UninstallMissingRecord(DiagnosticPipError): - reference = "uninstall-no-record-file" - - def __init__(self, *, distribution: "BaseDistribution") -> None: - installer = distribution.installer - if not installer or installer == "pip": - dep = f"{distribution.raw_name}=={distribution.version}" - hint = Text.assemble( - "You might be able to recover from this via: ", - (f"pip install --force-reinstall --no-deps {dep}", "green"), - ) - else: - hint = Text( - f"The package was installed by {installer}. " - "You should check if it can uninstall the package." - ) - - super().__init__( - message=Text(f"Cannot uninstall {distribution}"), - context=( - "The package's contents are unknown: " - f"no RECORD file was found for {distribution.raw_name}." - ), - hint_stmt=hint, - ) - - -class LegacyDistutilsInstall(DiagnosticPipError): - reference = "uninstall-distutils-installed-package" - - def __init__(self, *, distribution: "BaseDistribution") -> None: - super().__init__( - message=Text(f"Cannot uninstall {distribution}"), - context=( - "It is a distutils installed project and thus we cannot accurately " - "determine which files belong to it which would lead to only a partial " - "uninstall." - ), - hint_stmt=None, - ) - - -class InvalidInstalledPackage(DiagnosticPipError): - reference = "invalid-installed-package" - - def __init__( - self, - *, - dist: "BaseDistribution", - invalid_exc: Union[InvalidRequirement, InvalidVersion], - ) -> None: - installed_location = dist.installed_location - - if isinstance(invalid_exc, InvalidRequirement): - invalid_type = "requirement" - else: - invalid_type = "version" - - super().__init__( - message=Text( - f"Cannot process installed package {dist} " - + (f"in {installed_location!r} " if installed_location else "") - + f"because it has an invalid {invalid_type}:\n{invalid_exc.args[0]}" - ), - context=( - "Starting with pip 24.1, packages with invalid " - f"{invalid_type}s can not be processed." - ), - hint_stmt="To proceed this package must be uninstalled.", - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/index/__init__.py deleted file mode 100644 index 7a17b7b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/index/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""Index interaction code -""" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 668724b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc deleted file mode 100644 index 61665cf..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc deleted file mode 100644 index d702845..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc deleted file mode 100644 index c95aa13..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/collector.py b/myenv/lib/python3.12/site-packages/pip/_internal/index/collector.py deleted file mode 100644 index 5f8fdee..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/index/collector.py +++ /dev/null @@ -1,494 +0,0 @@ -""" -The main purpose of this module is to expose LinkCollector.collect_sources(). -""" - -import collections -import email.message -import functools -import itertools -import json -import logging -import os -import urllib.parse -import urllib.request -from dataclasses import dataclass -from html.parser import HTMLParser -from optparse import Values -from typing import ( - Callable, - Dict, - Iterable, - List, - MutableMapping, - NamedTuple, - Optional, - Protocol, - Sequence, - Tuple, - Union, -) - -from pip._vendor import requests -from pip._vendor.requests import Response -from pip._vendor.requests.exceptions import RetryError, SSLError - -from pip._internal.exceptions import NetworkConnectionError -from pip._internal.models.link import Link -from pip._internal.models.search_scope import SearchScope -from pip._internal.network.session import PipSession -from pip._internal.network.utils import raise_for_status -from pip._internal.utils.filetypes import is_archive_file -from pip._internal.utils.misc import redact_auth_from_url -from pip._internal.vcs import vcs - -from .sources import CandidatesFromPage, LinkSource, build_source - -logger = logging.getLogger(__name__) - -ResponseHeaders = MutableMapping[str, str] - - -def _match_vcs_scheme(url: str) -> Optional[str]: - """Look for VCS schemes in the URL. - - Returns the matched VCS scheme, or None if there's no match. - """ - for scheme in vcs.schemes: - if url.lower().startswith(scheme) and url[len(scheme)] in "+:": - return scheme - return None - - -class _NotAPIContent(Exception): - def __init__(self, content_type: str, request_desc: str) -> None: - super().__init__(content_type, request_desc) - self.content_type = content_type - self.request_desc = request_desc - - -def _ensure_api_header(response: Response) -> None: - """ - Check the Content-Type header to ensure the response contains a Simple - API Response. - - Raises `_NotAPIContent` if the content type is not a valid content-type. - """ - content_type = response.headers.get("Content-Type", "Unknown") - - content_type_l = content_type.lower() - if content_type_l.startswith( - ( - "text/html", - "application/vnd.pypi.simple.v1+html", - "application/vnd.pypi.simple.v1+json", - ) - ): - return - - raise _NotAPIContent(content_type, response.request.method) - - -class _NotHTTP(Exception): - pass - - -def _ensure_api_response(url: str, session: PipSession) -> None: - """ - Send a HEAD request to the URL, and ensure the response contains a simple - API Response. - - Raises `_NotHTTP` if the URL is not available for a HEAD request, or - `_NotAPIContent` if the content type is not a valid content type. - """ - scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url) - if scheme not in {"http", "https"}: - raise _NotHTTP() - - resp = session.head(url, allow_redirects=True) - raise_for_status(resp) - - _ensure_api_header(resp) - - -def _get_simple_response(url: str, session: PipSession) -> Response: - """Access an Simple API response with GET, and return the response. - - This consists of three parts: - - 1. If the URL looks suspiciously like an archive, send a HEAD first to - check the Content-Type is HTML or Simple API, to avoid downloading a - large file. Raise `_NotHTTP` if the content type cannot be determined, or - `_NotAPIContent` if it is not HTML or a Simple API. - 2. Actually perform the request. Raise HTTP exceptions on network failures. - 3. Check the Content-Type header to make sure we got a Simple API response, - and raise `_NotAPIContent` otherwise. - """ - if is_archive_file(Link(url).filename): - _ensure_api_response(url, session=session) - - logger.debug("Getting page %s", redact_auth_from_url(url)) - - resp = session.get( - url, - headers={ - "Accept": ", ".join( - [ - "application/vnd.pypi.simple.v1+json", - "application/vnd.pypi.simple.v1+html; q=0.1", - "text/html; q=0.01", - ] - ), - # We don't want to blindly returned cached data for - # /simple/, because authors generally expecting that - # twine upload && pip install will function, but if - # they've done a pip install in the last ~10 minutes - # it won't. Thus by setting this to zero we will not - # blindly use any cached data, however the benefit of - # using max-age=0 instead of no-cache, is that we will - # still support conditional requests, so we will still - # minimize traffic sent in cases where the page hasn't - # changed at all, we will just always incur the round - # trip for the conditional GET now instead of only - # once per 10 minutes. - # For more information, please see pypa/pip#5670. - "Cache-Control": "max-age=0", - }, - ) - raise_for_status(resp) - - # The check for archives above only works if the url ends with - # something that looks like an archive. However that is not a - # requirement of an url. Unless we issue a HEAD request on every - # url we cannot know ahead of time for sure if something is a - # Simple API response or not. However we can check after we've - # downloaded it. - _ensure_api_header(resp) - - logger.debug( - "Fetched page %s as %s", - redact_auth_from_url(url), - resp.headers.get("Content-Type", "Unknown"), - ) - - return resp - - -def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]: - """Determine if we have any encoding information in our headers.""" - if headers and "Content-Type" in headers: - m = email.message.Message() - m["content-type"] = headers["Content-Type"] - charset = m.get_param("charset") - if charset: - return str(charset) - return None - - -class CacheablePageContent: - def __init__(self, page: "IndexContent") -> None: - assert page.cache_link_parsing - self.page = page - - def __eq__(self, other: object) -> bool: - return isinstance(other, type(self)) and self.page.url == other.page.url - - def __hash__(self) -> int: - return hash(self.page.url) - - -class ParseLinks(Protocol): - def __call__(self, page: "IndexContent") -> Iterable[Link]: ... - - -def with_cached_index_content(fn: ParseLinks) -> ParseLinks: - """ - Given a function that parses an Iterable[Link] from an IndexContent, cache the - function's result (keyed by CacheablePageContent), unless the IndexContent - `page` has `page.cache_link_parsing == False`. - """ - - @functools.lru_cache(maxsize=None) - def wrapper(cacheable_page: CacheablePageContent) -> List[Link]: - return list(fn(cacheable_page.page)) - - @functools.wraps(fn) - def wrapper_wrapper(page: "IndexContent") -> List[Link]: - if page.cache_link_parsing: - return wrapper(CacheablePageContent(page)) - return list(fn(page)) - - return wrapper_wrapper - - -@with_cached_index_content -def parse_links(page: "IndexContent") -> Iterable[Link]: - """ - Parse a Simple API's Index Content, and yield its anchor elements as Link objects. - """ - - content_type_l = page.content_type.lower() - if content_type_l.startswith("application/vnd.pypi.simple.v1+json"): - data = json.loads(page.content) - for file in data.get("files", []): - link = Link.from_json(file, page.url) - if link is None: - continue - yield link - return - - parser = HTMLLinkParser(page.url) - encoding = page.encoding or "utf-8" - parser.feed(page.content.decode(encoding)) - - url = page.url - base_url = parser.base_url or url - for anchor in parser.anchors: - link = Link.from_element(anchor, page_url=url, base_url=base_url) - if link is None: - continue - yield link - - -@dataclass(frozen=True) -class IndexContent: - """Represents one response (or page), along with its URL. - - :param encoding: the encoding to decode the given content. - :param url: the URL from which the HTML was downloaded. - :param cache_link_parsing: whether links parsed from this page's url - should be cached. PyPI index urls should - have this set to False, for example. - """ - - content: bytes - content_type: str - encoding: Optional[str] - url: str - cache_link_parsing: bool = True - - def __str__(self) -> str: - return redact_auth_from_url(self.url) - - -class HTMLLinkParser(HTMLParser): - """ - HTMLParser that keeps the first base HREF and a list of all anchor - elements' attributes. - """ - - def __init__(self, url: str) -> None: - super().__init__(convert_charrefs=True) - - self.url: str = url - self.base_url: Optional[str] = None - self.anchors: List[Dict[str, Optional[str]]] = [] - - def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None: - if tag == "base" and self.base_url is None: - href = self.get_href(attrs) - if href is not None: - self.base_url = href - elif tag == "a": - self.anchors.append(dict(attrs)) - - def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]: - for name, value in attrs: - if name == "href": - return value - return None - - -def _handle_get_simple_fail( - link: Link, - reason: Union[str, Exception], - meth: Optional[Callable[..., None]] = None, -) -> None: - if meth is None: - meth = logger.debug - meth("Could not fetch URL %s: %s - skipping", link, reason) - - -def _make_index_content( - response: Response, cache_link_parsing: bool = True -) -> IndexContent: - encoding = _get_encoding_from_headers(response.headers) - return IndexContent( - response.content, - response.headers["Content-Type"], - encoding=encoding, - url=response.url, - cache_link_parsing=cache_link_parsing, - ) - - -def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]: - url = link.url.split("#", 1)[0] - - # Check for VCS schemes that do not support lookup as web pages. - vcs_scheme = _match_vcs_scheme(url) - if vcs_scheme: - logger.warning( - "Cannot look at %s URL %s because it does not support lookup as web pages.", - vcs_scheme, - link, - ) - return None - - # Tack index.html onto file:// URLs that point to directories - scheme, _, path, _, _, _ = urllib.parse.urlparse(url) - if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)): - # add trailing slash if not present so urljoin doesn't trim - # final segment - if not url.endswith("/"): - url += "/" - # TODO: In the future, it would be nice if pip supported PEP 691 - # style responses in the file:// URLs, however there's no - # standard file extension for application/vnd.pypi.simple.v1+json - # so we'll need to come up with something on our own. - url = urllib.parse.urljoin(url, "index.html") - logger.debug(" file: URL is directory, getting %s", url) - - try: - resp = _get_simple_response(url, session=session) - except _NotHTTP: - logger.warning( - "Skipping page %s because it looks like an archive, and cannot " - "be checked by a HTTP HEAD request.", - link, - ) - except _NotAPIContent as exc: - logger.warning( - "Skipping page %s because the %s request got Content-Type: %s. " - "The only supported Content-Types are application/vnd.pypi.simple.v1+json, " - "application/vnd.pypi.simple.v1+html, and text/html", - link, - exc.request_desc, - exc.content_type, - ) - except NetworkConnectionError as exc: - _handle_get_simple_fail(link, exc) - except RetryError as exc: - _handle_get_simple_fail(link, exc) - except SSLError as exc: - reason = "There was a problem confirming the ssl certificate: " - reason += str(exc) - _handle_get_simple_fail(link, reason, meth=logger.info) - except requests.ConnectionError as exc: - _handle_get_simple_fail(link, f"connection error: {exc}") - except requests.Timeout: - _handle_get_simple_fail(link, "timed out") - else: - return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing) - return None - - -class CollectedSources(NamedTuple): - find_links: Sequence[Optional[LinkSource]] - index_urls: Sequence[Optional[LinkSource]] - - -class LinkCollector: - """ - Responsible for collecting Link objects from all configured locations, - making network requests as needed. - - The class's main method is its collect_sources() method. - """ - - def __init__( - self, - session: PipSession, - search_scope: SearchScope, - ) -> None: - self.search_scope = search_scope - self.session = session - - @classmethod - def create( - cls, - session: PipSession, - options: Values, - suppress_no_index: bool = False, - ) -> "LinkCollector": - """ - :param session: The Session to use to make requests. - :param suppress_no_index: Whether to ignore the --no-index option - when constructing the SearchScope object. - """ - index_urls = [options.index_url] + options.extra_index_urls - if options.no_index and not suppress_no_index: - logger.debug( - "Ignoring indexes: %s", - ",".join(redact_auth_from_url(url) for url in index_urls), - ) - index_urls = [] - - # Make sure find_links is a list before passing to create(). - find_links = options.find_links or [] - - search_scope = SearchScope.create( - find_links=find_links, - index_urls=index_urls, - no_index=options.no_index, - ) - link_collector = LinkCollector( - session=session, - search_scope=search_scope, - ) - return link_collector - - @property - def find_links(self) -> List[str]: - return self.search_scope.find_links - - def fetch_response(self, location: Link) -> Optional[IndexContent]: - """ - Fetch an HTML page containing package links. - """ - return _get_index_content(location, session=self.session) - - def collect_sources( - self, - project_name: str, - candidates_from_page: CandidatesFromPage, - ) -> CollectedSources: - # The OrderedDict calls deduplicate sources by URL. - index_url_sources = collections.OrderedDict( - build_source( - loc, - candidates_from_page=candidates_from_page, - page_validator=self.session.is_secure_origin, - expand_dir=False, - cache_link_parsing=False, - project_name=project_name, - ) - for loc in self.search_scope.get_index_urls_locations(project_name) - ).values() - find_links_sources = collections.OrderedDict( - build_source( - loc, - candidates_from_page=candidates_from_page, - page_validator=self.session.is_secure_origin, - expand_dir=True, - cache_link_parsing=True, - project_name=project_name, - ) - for loc in self.find_links - ).values() - - if logger.isEnabledFor(logging.DEBUG): - lines = [ - f"* {s.link}" - for s in itertools.chain(find_links_sources, index_url_sources) - if s is not None and s.link is not None - ] - lines = [ - f"{len(lines)} location(s) to search " - f"for versions of {project_name}:" - ] + lines - logger.debug("\n".join(lines)) - - return CollectedSources( - find_links=list(find_links_sources), - index_urls=list(index_url_sources), - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py b/myenv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py deleted file mode 100644 index 85628ee..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py +++ /dev/null @@ -1,1029 +0,0 @@ -"""Routines related to PyPI, indexes""" - -import enum -import functools -import itertools -import logging -import re -from dataclasses import dataclass -from typing import TYPE_CHECKING, FrozenSet, Iterable, List, Optional, Set, Tuple, Union - -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.tags import Tag -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import InvalidVersion, _BaseVersion -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, - DistributionNotFound, - InvalidWheelFilename, - UnsupportedWheel, -) -from pip._internal.index.collector import LinkCollector, parse_links -from pip._internal.models.candidate import InstallationCandidate -from pip._internal.models.format_control import FormatControl -from pip._internal.models.link import Link -from pip._internal.models.search_scope import SearchScope -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.models.wheel import Wheel -from pip._internal.req import InstallRequirement -from pip._internal.utils._log import getLogger -from pip._internal.utils.filetypes import WHEEL_EXTENSION -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import build_netloc -from pip._internal.utils.packaging import check_requires_python -from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS - -if TYPE_CHECKING: - from pip._vendor.typing_extensions import TypeGuard - -__all__ = ["FormatControl", "BestCandidateResult", "PackageFinder"] - - -logger = getLogger(__name__) - -BuildTag = Union[Tuple[()], Tuple[int, str]] -CandidateSortingKey = Tuple[int, int, int, _BaseVersion, Optional[int], BuildTag] - - -def _check_link_requires_python( - link: Link, - version_info: Tuple[int, int, int], - ignore_requires_python: bool = False, -) -> bool: - """ - Return whether the given Python version is compatible with a link's - "Requires-Python" value. - - :param version_info: A 3-tuple of ints representing the Python - major-minor-micro version to check. - :param ignore_requires_python: Whether to ignore the "Requires-Python" - value if the given Python version isn't compatible. - """ - try: - is_compatible = check_requires_python( - link.requires_python, - version_info=version_info, - ) - except specifiers.InvalidSpecifier: - logger.debug( - "Ignoring invalid Requires-Python (%r) for link: %s", - link.requires_python, - link, - ) - else: - if not is_compatible: - version = ".".join(map(str, version_info)) - if not ignore_requires_python: - logger.verbose( - "Link requires a different Python (%s not in: %r): %s", - version, - link.requires_python, - link, - ) - return False - - logger.debug( - "Ignoring failed Requires-Python check (%s not in: %r) for link: %s", - version, - link.requires_python, - link, - ) - - return True - - -class LinkType(enum.Enum): - candidate = enum.auto() - different_project = enum.auto() - yanked = enum.auto() - format_unsupported = enum.auto() - format_invalid = enum.auto() - platform_mismatch = enum.auto() - requires_python_mismatch = enum.auto() - - -class LinkEvaluator: - """ - Responsible for evaluating links for a particular project. - """ - - _py_version_re = re.compile(r"-py([123]\.?[0-9]?)$") - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - def __init__( - self, - project_name: str, - canonical_name: str, - formats: FrozenSet[str], - target_python: TargetPython, - allow_yanked: bool, - ignore_requires_python: Optional[bool] = None, - ) -> None: - """ - :param project_name: The user supplied package name. - :param canonical_name: The canonical package name. - :param formats: The formats allowed for this package. Should be a set - with 'binary' or 'source' or both in it. - :param target_python: The target Python interpreter to use when - evaluating link compatibility. This is used, for example, to - check wheel compatibility, as well as when checking the Python - version, e.g. the Python version embedded in a link filename - (or egg fragment) and against an HTML link's optional PEP 503 - "data-requires-python" attribute. - :param allow_yanked: Whether files marked as yanked (in the sense - of PEP 592) are permitted to be candidates for install. - :param ignore_requires_python: Whether to ignore incompatible - PEP 503 "data-requires-python" values in HTML links. Defaults - to False. - """ - if ignore_requires_python is None: - ignore_requires_python = False - - self._allow_yanked = allow_yanked - self._canonical_name = canonical_name - self._ignore_requires_python = ignore_requires_python - self._formats = formats - self._target_python = target_python - - self.project_name = project_name - - def evaluate_link(self, link: Link) -> Tuple[LinkType, str]: - """ - Determine whether a link is a candidate for installation. - - :return: A tuple (result, detail), where *result* is an enum - representing whether the evaluation found a candidate, or the reason - why one is not found. If a candidate is found, *detail* will be the - candidate's version string; if one is not found, it contains the - reason the link fails to qualify. - """ - version = None - if link.is_yanked and not self._allow_yanked: - reason = link.yanked_reason or "" - return (LinkType.yanked, f"yanked for reason: {reason}") - - if link.egg_fragment: - egg_info = link.egg_fragment - ext = link.ext - else: - egg_info, ext = link.splitext() - if not ext: - return (LinkType.format_unsupported, "not a file") - if ext not in SUPPORTED_EXTENSIONS: - return ( - LinkType.format_unsupported, - f"unsupported archive format: {ext}", - ) - if "binary" not in self._formats and ext == WHEEL_EXTENSION: - reason = f"No binaries permitted for {self.project_name}" - return (LinkType.format_unsupported, reason) - if "macosx10" in link.path and ext == ".zip": - return (LinkType.format_unsupported, "macosx10 one") - if ext == WHEEL_EXTENSION: - try: - wheel = Wheel(link.filename) - except InvalidWheelFilename: - return ( - LinkType.format_invalid, - "invalid wheel filename", - ) - if canonicalize_name(wheel.name) != self._canonical_name: - reason = f"wrong project name (not {self.project_name})" - return (LinkType.different_project, reason) - - supported_tags = self._target_python.get_unsorted_tags() - if not wheel.supported(supported_tags): - # Include the wheel's tags in the reason string to - # simplify troubleshooting compatibility issues. - file_tags = ", ".join(wheel.get_formatted_file_tags()) - reason = ( - f"none of the wheel's tags ({file_tags}) are compatible " - f"(run pip debug --verbose to show compatible tags)" - ) - return (LinkType.platform_mismatch, reason) - - version = wheel.version - - # This should be up by the self.ok_binary check, but see issue 2700. - if "source" not in self._formats and ext != WHEEL_EXTENSION: - reason = f"No sources permitted for {self.project_name}" - return (LinkType.format_unsupported, reason) - - if not version: - version = _extract_version_from_fragment( - egg_info, - self._canonical_name, - ) - if not version: - reason = f"Missing project version for {self.project_name}" - return (LinkType.format_invalid, reason) - - match = self._py_version_re.search(version) - if match: - version = version[: match.start()] - py_version = match.group(1) - if py_version != self._target_python.py_version: - return ( - LinkType.platform_mismatch, - "Python version is incorrect", - ) - - supports_python = _check_link_requires_python( - link, - version_info=self._target_python.py_version_info, - ignore_requires_python=self._ignore_requires_python, - ) - if not supports_python: - reason = f"{version} Requires-Python {link.requires_python}" - return (LinkType.requires_python_mismatch, reason) - - logger.debug("Found link %s, version: %s", link, version) - - return (LinkType.candidate, version) - - -def filter_unallowed_hashes( - candidates: List[InstallationCandidate], - hashes: Optional[Hashes], - project_name: str, -) -> List[InstallationCandidate]: - """ - Filter out candidates whose hashes aren't allowed, and return a new - list of candidates. - - If at least one candidate has an allowed hash, then all candidates with - either an allowed hash or no hash specified are returned. Otherwise, - the given candidates are returned. - - Including the candidates with no hash specified when there is a match - allows a warning to be logged if there is a more preferred candidate - with no hash specified. Returning all candidates in the case of no - matches lets pip report the hash of the candidate that would otherwise - have been installed (e.g. permitting the user to more easily update - their requirements file with the desired hash). - """ - if not hashes: - logger.debug( - "Given no hashes to check %s links for project %r: " - "discarding no candidates", - len(candidates), - project_name, - ) - # Make sure we're not returning back the given value. - return list(candidates) - - matches_or_no_digest = [] - # Collect the non-matches for logging purposes. - non_matches = [] - match_count = 0 - for candidate in candidates: - link = candidate.link - if not link.has_hash: - pass - elif link.is_hash_allowed(hashes=hashes): - match_count += 1 - else: - non_matches.append(candidate) - continue - - matches_or_no_digest.append(candidate) - - if match_count: - filtered = matches_or_no_digest - else: - # Make sure we're not returning back the given value. - filtered = list(candidates) - - if len(filtered) == len(candidates): - discard_message = "discarding no candidates" - else: - discard_message = "discarding {} non-matches:\n {}".format( - len(non_matches), - "\n ".join(str(candidate.link) for candidate in non_matches), - ) - - logger.debug( - "Checked %s links for project %r against %s hashes " - "(%s matches, %s no digest): %s", - len(candidates), - project_name, - hashes.digest_count, - match_count, - len(matches_or_no_digest) - match_count, - discard_message, - ) - - return filtered - - -@dataclass -class CandidatePreferences: - """ - Encapsulates some of the preferences for filtering and sorting - InstallationCandidate objects. - """ - - prefer_binary: bool = False - allow_all_prereleases: bool = False - - -@dataclass(frozen=True) -class BestCandidateResult: - """A collection of candidates, returned by `PackageFinder.find_best_candidate`. - - This class is only intended to be instantiated by CandidateEvaluator's - `compute_best_candidate()` method. - - :param all_candidates: A sequence of all available candidates found. - :param applicable_candidates: The applicable candidates. - :param best_candidate: The most preferred candidate found, or None - if no applicable candidates were found. - """ - - all_candidates: List[InstallationCandidate] - applicable_candidates: List[InstallationCandidate] - best_candidate: Optional[InstallationCandidate] - - def __post_init__(self) -> None: - assert set(self.applicable_candidates) <= set(self.all_candidates) - - if self.best_candidate is None: - assert not self.applicable_candidates - else: - assert self.best_candidate in self.applicable_candidates - - -class CandidateEvaluator: - """ - Responsible for filtering and sorting candidates for installation based - on what tags are valid. - """ - - @classmethod - def create( - cls, - project_name: str, - target_python: Optional[TargetPython] = None, - prefer_binary: bool = False, - allow_all_prereleases: bool = False, - specifier: Optional[specifiers.BaseSpecifier] = None, - hashes: Optional[Hashes] = None, - ) -> "CandidateEvaluator": - """Create a CandidateEvaluator object. - - :param target_python: The target Python interpreter to use when - checking compatibility. If None (the default), a TargetPython - object will be constructed from the running Python. - :param specifier: An optional object implementing `filter` - (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable - versions. - :param hashes: An optional collection of allowed hashes. - """ - if target_python is None: - target_python = TargetPython() - if specifier is None: - specifier = specifiers.SpecifierSet() - - supported_tags = target_python.get_sorted_tags() - - return cls( - project_name=project_name, - supported_tags=supported_tags, - specifier=specifier, - prefer_binary=prefer_binary, - allow_all_prereleases=allow_all_prereleases, - hashes=hashes, - ) - - def __init__( - self, - project_name: str, - supported_tags: List[Tag], - specifier: specifiers.BaseSpecifier, - prefer_binary: bool = False, - allow_all_prereleases: bool = False, - hashes: Optional[Hashes] = None, - ) -> None: - """ - :param supported_tags: The PEP 425 tags supported by the target - Python in order of preference (most preferred first). - """ - self._allow_all_prereleases = allow_all_prereleases - self._hashes = hashes - self._prefer_binary = prefer_binary - self._project_name = project_name - self._specifier = specifier - self._supported_tags = supported_tags - # Since the index of the tag in the _supported_tags list is used - # as a priority, precompute a map from tag to index/priority to be - # used in wheel.find_most_preferred_tag. - self._wheel_tag_preferences = { - tag: idx for idx, tag in enumerate(supported_tags) - } - - def get_applicable_candidates( - self, - candidates: List[InstallationCandidate], - ) -> List[InstallationCandidate]: - """ - Return the applicable candidates from a list of candidates. - """ - # Using None infers from the specifier instead. - allow_prereleases = self._allow_all_prereleases or None - specifier = self._specifier - - # We turn the version object into a str here because otherwise - # when we're debundled but setuptools isn't, Python will see - # packaging.version.Version and - # pkg_resources._vendor.packaging.version.Version as different - # types. This way we'll use a str as a common data interchange - # format. If we stop using the pkg_resources provided specifier - # and start using our own, we can drop the cast to str(). - candidates_and_versions = [(c, str(c.version)) for c in candidates] - versions = set( - specifier.filter( - (v for _, v in candidates_and_versions), - prereleases=allow_prereleases, - ) - ) - - applicable_candidates = [c for c, v in candidates_and_versions if v in versions] - filtered_applicable_candidates = filter_unallowed_hashes( - candidates=applicable_candidates, - hashes=self._hashes, - project_name=self._project_name, - ) - - return sorted(filtered_applicable_candidates, key=self._sort_key) - - def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey: - """ - Function to pass as the `key` argument to a call to sorted() to sort - InstallationCandidates by preference. - - Returns a tuple such that tuples sorting as greater using Python's - default comparison operator are more preferred. - - The preference is as follows: - - First and foremost, candidates with allowed (matching) hashes are - always preferred over candidates without matching hashes. This is - because e.g. if the only candidate with an allowed hash is yanked, - we still want to use that candidate. - - Second, excepting hash considerations, candidates that have been - yanked (in the sense of PEP 592) are always less preferred than - candidates that haven't been yanked. Then: - - If not finding wheels, they are sorted by version only. - If finding wheels, then the sort order is by version, then: - 1. existing installs - 2. wheels ordered via Wheel.support_index_min(self._supported_tags) - 3. source archives - If prefer_binary was set, then all wheels are sorted above sources. - - Note: it was considered to embed this logic into the Link - comparison operators, but then different sdist links - with the same version, would have to be considered equal - """ - valid_tags = self._supported_tags - support_num = len(valid_tags) - build_tag: BuildTag = () - binary_preference = 0 - link = candidate.link - if link.is_wheel: - # can raise InvalidWheelFilename - wheel = Wheel(link.filename) - try: - pri = -( - wheel.find_most_preferred_tag( - valid_tags, self._wheel_tag_preferences - ) - ) - except ValueError: - raise UnsupportedWheel( - f"{wheel.filename} is not a supported wheel for this platform. It " - "can't be sorted." - ) - if self._prefer_binary: - binary_preference = 1 - if wheel.build_tag is not None: - match = re.match(r"^(\d+)(.*)$", wheel.build_tag) - assert match is not None, "guaranteed by filename validation" - build_tag_groups = match.groups() - build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) - else: # sdist - pri = -(support_num) - has_allowed_hash = int(link.is_hash_allowed(self._hashes)) - yank_value = -1 * int(link.is_yanked) # -1 for yanked. - return ( - has_allowed_hash, - yank_value, - binary_preference, - candidate.version, - pri, - build_tag, - ) - - def sort_best_candidate( - self, - candidates: List[InstallationCandidate], - ) -> Optional[InstallationCandidate]: - """ - Return the best candidate per the instance's sort order, or None if - no candidate is acceptable. - """ - if not candidates: - return None - best_candidate = max(candidates, key=self._sort_key) - return best_candidate - - def compute_best_candidate( - self, - candidates: List[InstallationCandidate], - ) -> BestCandidateResult: - """ - Compute and return a `BestCandidateResult` instance. - """ - applicable_candidates = self.get_applicable_candidates(candidates) - - best_candidate = self.sort_best_candidate(applicable_candidates) - - return BestCandidateResult( - candidates, - applicable_candidates=applicable_candidates, - best_candidate=best_candidate, - ) - - -class PackageFinder: - """This finds packages. - - This is meant to match easy_install's technique for looking for - packages, by reading pages and looking for appropriate links. - """ - - def __init__( - self, - link_collector: LinkCollector, - target_python: TargetPython, - allow_yanked: bool, - format_control: Optional[FormatControl] = None, - candidate_prefs: Optional[CandidatePreferences] = None, - ignore_requires_python: Optional[bool] = None, - ) -> None: - """ - This constructor is primarily meant to be used by the create() class - method and from tests. - - :param format_control: A FormatControl object, used to control - the selection of source packages / binary packages when consulting - the index and links. - :param candidate_prefs: Options to use when creating a - CandidateEvaluator object. - """ - if candidate_prefs is None: - candidate_prefs = CandidatePreferences() - - format_control = format_control or FormatControl(set(), set()) - - self._allow_yanked = allow_yanked - self._candidate_prefs = candidate_prefs - self._ignore_requires_python = ignore_requires_python - self._link_collector = link_collector - self._target_python = target_python - - self.format_control = format_control - - # These are boring links that have already been logged somehow. - self._logged_links: Set[Tuple[Link, LinkType, str]] = set() - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - @classmethod - def create( - cls, - link_collector: LinkCollector, - selection_prefs: SelectionPreferences, - target_python: Optional[TargetPython] = None, - ) -> "PackageFinder": - """Create a PackageFinder. - - :param selection_prefs: The candidate selection preferences, as a - SelectionPreferences object. - :param target_python: The target Python interpreter to use when - checking compatibility. If None (the default), a TargetPython - object will be constructed from the running Python. - """ - if target_python is None: - target_python = TargetPython() - - candidate_prefs = CandidatePreferences( - prefer_binary=selection_prefs.prefer_binary, - allow_all_prereleases=selection_prefs.allow_all_prereleases, - ) - - return cls( - candidate_prefs=candidate_prefs, - link_collector=link_collector, - target_python=target_python, - allow_yanked=selection_prefs.allow_yanked, - format_control=selection_prefs.format_control, - ignore_requires_python=selection_prefs.ignore_requires_python, - ) - - @property - def target_python(self) -> TargetPython: - return self._target_python - - @property - def search_scope(self) -> SearchScope: - return self._link_collector.search_scope - - @search_scope.setter - def search_scope(self, search_scope: SearchScope) -> None: - self._link_collector.search_scope = search_scope - - @property - def find_links(self) -> List[str]: - return self._link_collector.find_links - - @property - def index_urls(self) -> List[str]: - return self.search_scope.index_urls - - @property - def proxy(self) -> Optional[str]: - return self._link_collector.session.pip_proxy - - @property - def trusted_hosts(self) -> Iterable[str]: - for host_port in self._link_collector.session.pip_trusted_origins: - yield build_netloc(*host_port) - - @property - def custom_cert(self) -> Optional[str]: - # session.verify is either a boolean (use default bundle/no SSL - # verification) or a string path to a custom CA bundle to use. We only - # care about the latter. - verify = self._link_collector.session.verify - return verify if isinstance(verify, str) else None - - @property - def client_cert(self) -> Optional[str]: - cert = self._link_collector.session.cert - assert not isinstance(cert, tuple), "pip only supports PEM client certs" - return cert - - @property - def allow_all_prereleases(self) -> bool: - return self._candidate_prefs.allow_all_prereleases - - def set_allow_all_prereleases(self) -> None: - self._candidate_prefs.allow_all_prereleases = True - - @property - def prefer_binary(self) -> bool: - return self._candidate_prefs.prefer_binary - - def set_prefer_binary(self) -> None: - self._candidate_prefs.prefer_binary = True - - def requires_python_skipped_reasons(self) -> List[str]: - reasons = { - detail - for _, result, detail in self._logged_links - if result == LinkType.requires_python_mismatch - } - return sorted(reasons) - - def make_link_evaluator(self, project_name: str) -> LinkEvaluator: - canonical_name = canonicalize_name(project_name) - formats = self.format_control.get_allowed_formats(canonical_name) - - return LinkEvaluator( - project_name=project_name, - canonical_name=canonical_name, - formats=formats, - target_python=self._target_python, - allow_yanked=self._allow_yanked, - ignore_requires_python=self._ignore_requires_python, - ) - - def _sort_links(self, links: Iterable[Link]) -> List[Link]: - """ - Returns elements of links in order, non-egg links first, egg links - second, while eliminating duplicates - """ - eggs, no_eggs = [], [] - seen: Set[Link] = set() - for link in links: - if link not in seen: - seen.add(link) - if link.egg_fragment: - eggs.append(link) - else: - no_eggs.append(link) - return no_eggs + eggs - - def _log_skipped_link(self, link: Link, result: LinkType, detail: str) -> None: - # This is a hot method so don't waste time hashing links unless we're - # actually going to log 'em. - if not logger.isEnabledFor(logging.DEBUG): - return - - entry = (link, result, detail) - if entry not in self._logged_links: - # Put the link at the end so the reason is more visible and because - # the link string is usually very long. - logger.debug("Skipping link: %s: %s", detail, link) - self._logged_links.add(entry) - - def get_install_candidate( - self, link_evaluator: LinkEvaluator, link: Link - ) -> Optional[InstallationCandidate]: - """ - If the link is a candidate for install, convert it to an - InstallationCandidate and return it. Otherwise, return None. - """ - result, detail = link_evaluator.evaluate_link(link) - if result != LinkType.candidate: - self._log_skipped_link(link, result, detail) - return None - - try: - return InstallationCandidate( - name=link_evaluator.project_name, - link=link, - version=detail, - ) - except InvalidVersion: - return None - - def evaluate_links( - self, link_evaluator: LinkEvaluator, links: Iterable[Link] - ) -> List[InstallationCandidate]: - """ - Convert links that are candidates to InstallationCandidate objects. - """ - candidates = [] - for link in self._sort_links(links): - candidate = self.get_install_candidate(link_evaluator, link) - if candidate is not None: - candidates.append(candidate) - - return candidates - - def process_project_url( - self, project_url: Link, link_evaluator: LinkEvaluator - ) -> List[InstallationCandidate]: - logger.debug( - "Fetching project page and analyzing links: %s", - project_url, - ) - index_response = self._link_collector.fetch_response(project_url) - if index_response is None: - return [] - - page_links = list(parse_links(index_response)) - - with indent_log(): - package_links = self.evaluate_links( - link_evaluator, - links=page_links, - ) - - return package_links - - @functools.lru_cache(maxsize=None) - def find_all_candidates(self, project_name: str) -> List[InstallationCandidate]: - """Find all available InstallationCandidate for project_name - - This checks index_urls and find_links. - All versions found are returned as an InstallationCandidate list. - - See LinkEvaluator.evaluate_link() for details on which files - are accepted. - """ - link_evaluator = self.make_link_evaluator(project_name) - - collected_sources = self._link_collector.collect_sources( - project_name=project_name, - candidates_from_page=functools.partial( - self.process_project_url, - link_evaluator=link_evaluator, - ), - ) - - page_candidates_it = itertools.chain.from_iterable( - source.page_candidates() - for sources in collected_sources - for source in sources - if source is not None - ) - page_candidates = list(page_candidates_it) - - file_links_it = itertools.chain.from_iterable( - source.file_links() - for sources in collected_sources - for source in sources - if source is not None - ) - file_candidates = self.evaluate_links( - link_evaluator, - sorted(file_links_it, reverse=True), - ) - - if logger.isEnabledFor(logging.DEBUG) and file_candidates: - paths = [] - for candidate in file_candidates: - assert candidate.link.url # we need to have a URL - try: - paths.append(candidate.link.file_path) - except Exception: - paths.append(candidate.link.url) # it's not a local file - - logger.debug("Local files found: %s", ", ".join(paths)) - - # This is an intentional priority ordering - return file_candidates + page_candidates - - def make_candidate_evaluator( - self, - project_name: str, - specifier: Optional[specifiers.BaseSpecifier] = None, - hashes: Optional[Hashes] = None, - ) -> CandidateEvaluator: - """Create a CandidateEvaluator object to use.""" - candidate_prefs = self._candidate_prefs - return CandidateEvaluator.create( - project_name=project_name, - target_python=self._target_python, - prefer_binary=candidate_prefs.prefer_binary, - allow_all_prereleases=candidate_prefs.allow_all_prereleases, - specifier=specifier, - hashes=hashes, - ) - - @functools.lru_cache(maxsize=None) - def find_best_candidate( - self, - project_name: str, - specifier: Optional[specifiers.BaseSpecifier] = None, - hashes: Optional[Hashes] = None, - ) -> BestCandidateResult: - """Find matches for the given project and specifier. - - :param specifier: An optional object implementing `filter` - (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable - versions. - - :return: A `BestCandidateResult` instance. - """ - candidates = self.find_all_candidates(project_name) - candidate_evaluator = self.make_candidate_evaluator( - project_name=project_name, - specifier=specifier, - hashes=hashes, - ) - return candidate_evaluator.compute_best_candidate(candidates) - - def find_requirement( - self, req: InstallRequirement, upgrade: bool - ) -> Optional[InstallationCandidate]: - """Try to find a Link matching req - - Expects req, an InstallRequirement and upgrade, a boolean - Returns a InstallationCandidate if found, - Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise - """ - hashes = req.hashes(trust_internet=False) - best_candidate_result = self.find_best_candidate( - req.name, - specifier=req.specifier, - hashes=hashes, - ) - best_candidate = best_candidate_result.best_candidate - - installed_version: Optional[_BaseVersion] = None - if req.satisfied_by is not None: - installed_version = req.satisfied_by.version - - def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str: - # This repeated parse_version and str() conversion is needed to - # handle different vendoring sources from pip and pkg_resources. - # If we stop using the pkg_resources provided specifier and start - # using our own, we can drop the cast to str(). - return ( - ", ".join( - sorted( - {str(c.version) for c in cand_iter}, - key=parse_version, - ) - ) - or "none" - ) - - if installed_version is None and best_candidate is None: - logger.critical( - "Could not find a version that satisfies the requirement %s " - "(from versions: %s)", - req, - _format_versions(best_candidate_result.all_candidates), - ) - - raise DistributionNotFound(f"No matching distribution found for {req}") - - def _should_install_candidate( - candidate: Optional[InstallationCandidate], - ) -> "TypeGuard[InstallationCandidate]": - if installed_version is None: - return True - if best_candidate is None: - return False - return best_candidate.version > installed_version - - if not upgrade and installed_version is not None: - if _should_install_candidate(best_candidate): - logger.debug( - "Existing installed version (%s) satisfies requirement " - "(most up-to-date version is %s)", - installed_version, - best_candidate.version, - ) - else: - logger.debug( - "Existing installed version (%s) is most up-to-date and " - "satisfies requirement", - installed_version, - ) - return None - - if _should_install_candidate(best_candidate): - logger.debug( - "Using version %s (newest of versions: %s)", - best_candidate.version, - _format_versions(best_candidate_result.applicable_candidates), - ) - return best_candidate - - # We have an existing version, and its the best version - logger.debug( - "Installed version (%s) is most up-to-date (past versions: %s)", - installed_version, - _format_versions(best_candidate_result.applicable_candidates), - ) - raise BestVersionAlreadyInstalled - - -def _find_name_version_sep(fragment: str, canonical_name: str) -> int: - """Find the separator's index based on the package's canonical name. - - :param fragment: A + filename "fragment" (stem) or - egg fragment. - :param canonical_name: The package's canonical name. - - This function is needed since the canonicalized name does not necessarily - have the same length as the egg info's name part. An example:: - - >>> fragment = 'foo__bar-1.0' - >>> canonical_name = 'foo-bar' - >>> _find_name_version_sep(fragment, canonical_name) - 8 - """ - # Project name and version must be separated by one single dash. Find all - # occurrences of dashes; if the string in front of it matches the canonical - # name, this is the one separating the name and version parts. - for i, c in enumerate(fragment): - if c != "-": - continue - if canonicalize_name(fragment[:i]) == canonical_name: - return i - raise ValueError(f"{fragment} does not match {canonical_name}") - - -def _extract_version_from_fragment(fragment: str, canonical_name: str) -> Optional[str]: - """Parse the version string from a + filename - "fragment" (stem) or egg fragment. - - :param fragment: The string to parse. E.g. foo-2.1 - :param canonical_name: The canonicalized name of the package this - belongs to. - """ - try: - version_start = _find_name_version_sep(fragment, canonical_name) + 1 - except ValueError: - return None - version = fragment[version_start:] - if not version: - return None - return version diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/index/sources.py b/myenv/lib/python3.12/site-packages/pip/_internal/index/sources.py deleted file mode 100644 index 3dafb30..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/index/sources.py +++ /dev/null @@ -1,284 +0,0 @@ -import logging -import mimetypes -import os -from collections import defaultdict -from typing import Callable, Dict, Iterable, List, Optional, Tuple - -from pip._vendor.packaging.utils import ( - InvalidSdistFilename, - InvalidWheelFilename, - canonicalize_name, - parse_sdist_filename, - parse_wheel_filename, -) - -from pip._internal.models.candidate import InstallationCandidate -from pip._internal.models.link import Link -from pip._internal.utils.urls import path_to_url, url_to_path -from pip._internal.vcs import is_url - -logger = logging.getLogger(__name__) - -FoundCandidates = Iterable[InstallationCandidate] -FoundLinks = Iterable[Link] -CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]] -PageValidator = Callable[[Link], bool] - - -class LinkSource: - @property - def link(self) -> Optional[Link]: - """Returns the underlying link, if there's one.""" - raise NotImplementedError() - - def page_candidates(self) -> FoundCandidates: - """Candidates found by parsing an archive listing HTML file.""" - raise NotImplementedError() - - def file_links(self) -> FoundLinks: - """Links found by specifying archives directly.""" - raise NotImplementedError() - - -def _is_html_file(file_url: str) -> bool: - return mimetypes.guess_type(file_url, strict=False)[0] == "text/html" - - -class _FlatDirectoryToUrls: - """Scans directory and caches results""" - - def __init__(self, path: str) -> None: - self._path = path - self._page_candidates: List[str] = [] - self._project_name_to_urls: Dict[str, List[str]] = defaultdict(list) - self._scanned_directory = False - - def _scan_directory(self) -> None: - """Scans directory once and populates both page_candidates - and project_name_to_urls at the same time - """ - for entry in os.scandir(self._path): - url = path_to_url(entry.path) - if _is_html_file(url): - self._page_candidates.append(url) - continue - - # File must have a valid wheel or sdist name, - # otherwise not worth considering as a package - try: - project_filename = parse_wheel_filename(entry.name)[0] - except InvalidWheelFilename: - try: - project_filename = parse_sdist_filename(entry.name)[0] - except InvalidSdistFilename: - continue - - self._project_name_to_urls[project_filename].append(url) - self._scanned_directory = True - - @property - def page_candidates(self) -> List[str]: - if not self._scanned_directory: - self._scan_directory() - - return self._page_candidates - - @property - def project_name_to_urls(self) -> Dict[str, List[str]]: - if not self._scanned_directory: - self._scan_directory() - - return self._project_name_to_urls - - -class _FlatDirectorySource(LinkSource): - """Link source specified by ``--find-links=``. - - This looks the content of the directory, and returns: - - * ``page_candidates``: Links listed on each HTML file in the directory. - * ``file_candidates``: Archives in the directory. - """ - - _paths_to_urls: Dict[str, _FlatDirectoryToUrls] = {} - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - path: str, - project_name: str, - ) -> None: - self._candidates_from_page = candidates_from_page - self._project_name = canonicalize_name(project_name) - - # Get existing instance of _FlatDirectoryToUrls if it exists - if path in self._paths_to_urls: - self._path_to_urls = self._paths_to_urls[path] - else: - self._path_to_urls = _FlatDirectoryToUrls(path=path) - self._paths_to_urls[path] = self._path_to_urls - - @property - def link(self) -> Optional[Link]: - return None - - def page_candidates(self) -> FoundCandidates: - for url in self._path_to_urls.page_candidates: - yield from self._candidates_from_page(Link(url)) - - def file_links(self) -> FoundLinks: - for url in self._path_to_urls.project_name_to_urls[self._project_name]: - yield Link(url) - - -class _LocalFileSource(LinkSource): - """``--find-links=`` or ``--[extra-]index-url=``. - - If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to - the option, it is converted to a URL first. This returns: - - * ``page_candidates``: Links listed on an HTML file. - * ``file_candidates``: The non-HTML file. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._link = link - - @property - def link(self) -> Optional[Link]: - return self._link - - def page_candidates(self) -> FoundCandidates: - if not _is_html_file(self._link.url): - return - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - if _is_html_file(self._link.url): - return - yield self._link - - -class _RemoteFileSource(LinkSource): - """``--find-links=`` or ``--[extra-]index-url=``. - - This returns: - - * ``page_candidates``: Links listed on an HTML file. - * ``file_candidates``: The non-HTML file. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - page_validator: PageValidator, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._page_validator = page_validator - self._link = link - - @property - def link(self) -> Optional[Link]: - return self._link - - def page_candidates(self) -> FoundCandidates: - if not self._page_validator(self._link): - return - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - yield self._link - - -class _IndexDirectorySource(LinkSource): - """``--[extra-]index-url=``. - - This is treated like a remote URL; ``candidates_from_page`` contains logic - for this by appending ``index.html`` to the link. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._link = link - - @property - def link(self) -> Optional[Link]: - return self._link - - def page_candidates(self) -> FoundCandidates: - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - return () - - -def build_source( - location: str, - *, - candidates_from_page: CandidatesFromPage, - page_validator: PageValidator, - expand_dir: bool, - cache_link_parsing: bool, - project_name: str, -) -> Tuple[Optional[str], Optional[LinkSource]]: - path: Optional[str] = None - url: Optional[str] = None - if os.path.exists(location): # Is a local path. - url = path_to_url(location) - path = location - elif location.startswith("file:"): # A file: URL. - url = location - path = url_to_path(location) - elif is_url(location): - url = location - - if url is None: - msg = ( - "Location '%s' is ignored: " - "it is either a non-existing path or lacks a specific scheme." - ) - logger.warning(msg, location) - return (None, None) - - if path is None: - source: LinkSource = _RemoteFileSource( - candidates_from_page=candidates_from_page, - page_validator=page_validator, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - - if os.path.isdir(path): - if expand_dir: - source = _FlatDirectorySource( - candidates_from_page=candidates_from_page, - path=path, - project_name=project_name, - ) - else: - source = _IndexDirectorySource( - candidates_from_page=candidates_from_page, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - elif os.path.isfile(path): - source = _LocalFileSource( - candidates_from_page=candidates_from_page, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - logger.warning( - "Location '%s' is ignored: it is neither a file nor a directory.", - location, - ) - return (url, None) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py deleted file mode 100644 index 32382be..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py +++ /dev/null @@ -1,456 +0,0 @@ -import functools -import logging -import os -import pathlib -import sys -import sysconfig -from typing import Any, Dict, Generator, Optional, Tuple - -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.virtualenv import running_under_virtualenv - -from . import _sysconfig -from .base import ( - USER_CACHE_DIR, - get_major_minor_version, - get_src_prefix, - is_osx_framework, - site_packages, - user_site, -) - -__all__ = [ - "USER_CACHE_DIR", - "get_bin_prefix", - "get_bin_user", - "get_major_minor_version", - "get_platlib", - "get_purelib", - "get_scheme", - "get_src_prefix", - "site_packages", - "user_site", -] - - -logger = logging.getLogger(__name__) - - -_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib") - -_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10) - - -def _should_use_sysconfig() -> bool: - """This function determines the value of _USE_SYSCONFIG. - - By default, pip uses sysconfig on Python 3.10+. - But Python distributors can override this decision by setting: - sysconfig._PIP_USE_SYSCONFIG = True / False - Rationale in https://github.com/pypa/pip/issues/10647 - - This is a function for testability, but should be constant during any one - run. - """ - return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT)) - - -_USE_SYSCONFIG = _should_use_sysconfig() - -if not _USE_SYSCONFIG: - # Import distutils lazily to avoid deprecation warnings, - # but import it soon enough that it is in memory and available during - # a pip reinstall. - from . import _distutils - -# Be noisy about incompatibilities if this platforms "should" be using -# sysconfig, but is explicitly opting out and using distutils instead. -if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG: - _MISMATCH_LEVEL = logging.WARNING -else: - _MISMATCH_LEVEL = logging.DEBUG - - -def _looks_like_bpo_44860() -> bool: - """The resolution to bpo-44860 will change this incorrect platlib. - - See . - """ - from distutils.command.install import INSTALL_SCHEMES - - try: - unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"] - except KeyError: - return False - return unix_user_platlib == "$usersite" - - -def _looks_like_red_hat_patched_platlib_purelib(scheme: Dict[str, str]) -> bool: - platlib = scheme["platlib"] - if "/$platlibdir/" in platlib: - platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/") - if "/lib64/" not in platlib: - return False - unpatched = platlib.replace("/lib64/", "/lib/") - return unpatched.replace("$platbase/", "$base/") == scheme["purelib"] - - -@functools.lru_cache(maxsize=None) -def _looks_like_red_hat_lib() -> bool: - """Red Hat patches platlib in unix_prefix and unix_home, but not purelib. - - This is the only way I can see to tell a Red Hat-patched Python. - """ - from distutils.command.install import INSTALL_SCHEMES - - return all( - k in INSTALL_SCHEMES - and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k]) - for k in ("unix_prefix", "unix_home") - ) - - -@functools.lru_cache(maxsize=None) -def _looks_like_debian_scheme() -> bool: - """Debian adds two additional schemes.""" - from distutils.command.install import INSTALL_SCHEMES - - return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES - - -@functools.lru_cache(maxsize=None) -def _looks_like_red_hat_scheme() -> bool: - """Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``. - - Red Hat's ``00251-change-user-install-location.patch`` changes the install - command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is - (fortunately?) done quite unconditionally, so we create a default command - object without any configuration to detect this. - """ - from distutils.command.install import install - from distutils.dist import Distribution - - cmd: Any = install(Distribution()) - cmd.finalize_options() - return ( - cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local" - and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local" - ) - - -@functools.lru_cache(maxsize=None) -def _looks_like_slackware_scheme() -> bool: - """Slackware patches sysconfig but fails to patch distutils and site. - - Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib - path, but does not do the same to the site module. - """ - if user_site is None: # User-site not available. - return False - try: - paths = sysconfig.get_paths(scheme="posix_user", expand=False) - except KeyError: # User-site not available. - return False - return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site - - -@functools.lru_cache(maxsize=None) -def _looks_like_msys2_mingw_scheme() -> bool: - """MSYS2 patches distutils and sysconfig to use a UNIX-like scheme. - - However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is - likely going to be included in their 3.10 release, so we ignore the warning. - See msys2/MINGW-packages#9319. - - MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase, - and is missing the final ``"site-packages"``. - """ - paths = sysconfig.get_paths("nt", expand=False) - return all( - "Lib" not in p and "lib" in p and not p.endswith("site-packages") - for p in (paths[key] for key in ("platlib", "purelib")) - ) - - -def _fix_abiflags(parts: Tuple[str]) -> Generator[str, None, None]: - ldversion = sysconfig.get_config_var("LDVERSION") - abiflags = getattr(sys, "abiflags", None) - - # LDVERSION does not end with sys.abiflags. Just return the path unchanged. - if not ldversion or not abiflags or not ldversion.endswith(abiflags): - yield from parts - return - - # Strip sys.abiflags from LDVERSION-based path components. - for part in parts: - if part.endswith(ldversion): - part = part[: (0 - len(abiflags))] - yield part - - -@functools.lru_cache(maxsize=None) -def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None: - issue_url = "https://github.com/pypa/pip/issues/10151" - message = ( - "Value for %s does not match. Please report this to <%s>" - "\ndistutils: %s" - "\nsysconfig: %s" - ) - logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new) - - -def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool: - if old == new: - return False - _warn_mismatched(old, new, key=key) - return True - - -@functools.lru_cache(maxsize=None) -def _log_context( - *, - user: bool = False, - home: Optional[str] = None, - root: Optional[str] = None, - prefix: Optional[str] = None, -) -> None: - parts = [ - "Additional context:", - "user = %r", - "home = %r", - "root = %r", - "prefix = %r", - ] - - logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix) - - -def get_scheme( - dist_name: str, - user: bool = False, - home: Optional[str] = None, - root: Optional[str] = None, - isolated: bool = False, - prefix: Optional[str] = None, -) -> Scheme: - new = _sysconfig.get_scheme( - dist_name, - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - if _USE_SYSCONFIG: - return new - - old = _distutils.get_scheme( - dist_name, - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - - warning_contexts = [] - for k in SCHEME_KEYS: - old_v = pathlib.Path(getattr(old, k)) - new_v = pathlib.Path(getattr(new, k)) - - if old_v == new_v: - continue - - # distutils incorrectly put PyPy packages under ``site-packages/python`` - # in the ``posix_home`` scheme, but PyPy devs said they expect the - # directory name to be ``pypy`` instead. So we treat this as a bug fix - # and not warn about it. See bpo-43307 and python/cpython#24628. - skip_pypy_special_case = ( - sys.implementation.name == "pypy" - and home is not None - and k in ("platlib", "purelib") - and old_v.parent == new_v.parent - and old_v.name.startswith("python") - and new_v.name.startswith("pypy") - ) - if skip_pypy_special_case: - continue - - # sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in - # the ``include`` value, but distutils's ``headers`` does. We'll let - # CPython decide whether this is a bug or feature. See bpo-43948. - skip_osx_framework_user_special_case = ( - user - and is_osx_framework() - and k == "headers" - and old_v.parent.parent == new_v.parent - and old_v.parent.name.startswith("python") - ) - if skip_osx_framework_user_special_case: - continue - - # On Red Hat and derived Linux distributions, distutils is patched to - # use "lib64" instead of "lib" for platlib. - if k == "platlib" and _looks_like_red_hat_lib(): - continue - - # On Python 3.9+, sysconfig's posix_user scheme sets platlib against - # sys.platlibdir, but distutils's unix_user incorrectly coninutes - # using the same $usersite for both platlib and purelib. This creates a - # mismatch when sys.platlibdir is not "lib". - skip_bpo_44860 = ( - user - and k == "platlib" - and not WINDOWS - and sys.version_info >= (3, 9) - and _PLATLIBDIR != "lib" - and _looks_like_bpo_44860() - ) - if skip_bpo_44860: - continue - - # Slackware incorrectly patches posix_user to use lib64 instead of lib, - # but not usersite to match the location. - skip_slackware_user_scheme = ( - user - and k in ("platlib", "purelib") - and not WINDOWS - and _looks_like_slackware_scheme() - ) - if skip_slackware_user_scheme: - continue - - # Both Debian and Red Hat patch Python to place the system site under - # /usr/local instead of /usr. Debian also places lib in dist-packages - # instead of site-packages, but the /usr/local check should cover it. - skip_linux_system_special_case = ( - not (user or home or prefix or running_under_virtualenv()) - and old_v.parts[1:3] == ("usr", "local") - and len(new_v.parts) > 1 - and new_v.parts[1] == "usr" - and (len(new_v.parts) < 3 or new_v.parts[2] != "local") - and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme()) - ) - if skip_linux_system_special_case: - continue - - # MSYS2 MINGW's sysconfig patch does not include the "site-packages" - # part of the path. This is incorrect and will be fixed in MSYS. - skip_msys2_mingw_bug = ( - WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme() - ) - if skip_msys2_mingw_bug: - continue - - # CPython's POSIX install script invokes pip (via ensurepip) against the - # interpreter located in the source tree, not the install site. This - # triggers special logic in sysconfig that's not present in distutils. - # https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194 - skip_cpython_build = ( - sysconfig.is_python_build(check_home=True) - and not WINDOWS - and k in ("headers", "include", "platinclude") - ) - if skip_cpython_build: - continue - - warning_contexts.append((old_v, new_v, f"scheme.{k}")) - - if not warning_contexts: - return old - - # Check if this path mismatch is caused by distutils config files. Those - # files will no longer work once we switch to sysconfig, so this raises a - # deprecation message for them. - default_old = _distutils.distutils_scheme( - dist_name, - user, - home, - root, - isolated, - prefix, - ignore_config_files=True, - ) - if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS): - deprecated( - reason=( - "Configuring installation scheme with distutils config files " - "is deprecated and will no longer work in the near future. If you " - "are using a Homebrew or Linuxbrew Python, please see discussion " - "at https://github.com/Homebrew/homebrew-core/issues/76621" - ), - replacement=None, - gone_in=None, - ) - return old - - # Post warnings about this mismatch so user can report them back. - for old_v, new_v, key in warning_contexts: - _warn_mismatched(old_v, new_v, key=key) - _log_context(user=user, home=home, root=root, prefix=prefix) - - return old - - -def get_bin_prefix() -> str: - new = _sysconfig.get_bin_prefix() - if _USE_SYSCONFIG: - return new - - old = _distutils.get_bin_prefix() - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"): - _log_context() - return old - - -def get_bin_user() -> str: - return _sysconfig.get_scheme("", user=True).scripts - - -def _looks_like_deb_system_dist_packages(value: str) -> bool: - """Check if the value is Debian's APT-controlled dist-packages. - - Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the - default package path controlled by APT, but does not patch ``sysconfig`` to - do the same. This is similar to the bug worked around in ``get_scheme()``, - but here the default is ``deb_system`` instead of ``unix_local``. Ultimately - we can't do anything about this Debian bug, and this detection allows us to - skip the warning when needed. - """ - if not _looks_like_debian_scheme(): - return False - if value == "/usr/lib/python3/dist-packages": - return True - return False - - -def get_purelib() -> str: - """Return the default pure-Python lib location.""" - new = _sysconfig.get_purelib() - if _USE_SYSCONFIG: - return new - - old = _distutils.get_purelib() - if _looks_like_deb_system_dist_packages(old): - return old - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"): - _log_context() - return old - - -def get_platlib() -> str: - """Return the default platform-shared lib location.""" - new = _sysconfig.get_platlib() - if _USE_SYSCONFIG: - return new - - from . import _distutils - - old = _distutils.get_platlib() - if _looks_like_deb_system_dist_packages(old): - return old - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"): - _log_context() - return old diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f6da394..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc deleted file mode 100644 index ef4125d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc deleted file mode 100644 index 183e0f1..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc deleted file mode 100644 index 71c1347..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py b/myenv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py deleted file mode 100644 index 3d85625..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py +++ /dev/null @@ -1,172 +0,0 @@ -"""Locations where we look for configs, install stuff, etc""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False - -# If pip's going to use distutils, it should not be using the copy that setuptools -# might have injected into the environment. This is done by removing the injected -# shim, if it's injected. -# -# See https://github.com/pypa/pip/issues/8761 for the original discussion and -# rationale for why this is done within pip. -try: - __import__("_distutils_hack").remove_shim() -except (ImportError, AttributeError): - pass - -import logging -import os -import sys -from distutils.cmd import Command as DistutilsCommand -from distutils.command.install import SCHEME_KEYS -from distutils.command.install import install as distutils_install_command -from distutils.sysconfig import get_python_lib -from typing import Dict, List, Optional, Union - -from pip._internal.models.scheme import Scheme -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import get_major_minor_version - -logger = logging.getLogger(__name__) - - -def distutils_scheme( - dist_name: str, - user: bool = False, - home: Optional[str] = None, - root: Optional[str] = None, - isolated: bool = False, - prefix: Optional[str] = None, - *, - ignore_config_files: bool = False, -) -> Dict[str, str]: - """ - Return a distutils install scheme - """ - from distutils.dist import Distribution - - dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name} - if isolated: - dist_args["script_args"] = ["--no-user-cfg"] - - d = Distribution(dist_args) - if not ignore_config_files: - try: - d.parse_config_files() - except UnicodeDecodeError: - paths = d.find_config_files() - logger.warning( - "Ignore distutils configs in %s due to encoding errors.", - ", ".join(os.path.basename(p) for p in paths), - ) - obj: Optional[DistutilsCommand] = None - obj = d.get_command_obj("install", create=True) - assert obj is not None - i: distutils_install_command = obj - # NOTE: setting user or home has the side-effect of creating the home dir - # or user base for installations during finalize_options() - # ideally, we'd prefer a scheme class that has no side-effects. - assert not (user and prefix), f"user={user} prefix={prefix}" - assert not (home and prefix), f"home={home} prefix={prefix}" - i.user = user or i.user - if user or home: - i.prefix = "" - i.prefix = prefix or i.prefix - i.home = home or i.home - i.root = root or i.root - i.finalize_options() - - scheme: Dict[str, str] = {} - for key in SCHEME_KEYS: - scheme[key] = getattr(i, "install_" + key) - - # install_lib specified in setup.cfg should install *everything* - # into there (i.e. it takes precedence over both purelib and - # platlib). Note, i.install_lib is *always* set after - # finalize_options(); we only want to override here if the user - # has explicitly requested it hence going back to the config - if "install_lib" in d.get_option_dict("install"): - scheme.update({"purelib": i.install_lib, "platlib": i.install_lib}) - - if running_under_virtualenv(): - if home: - prefix = home - elif user: - prefix = i.install_userbase - else: - prefix = i.prefix - scheme["headers"] = os.path.join( - prefix, - "include", - "site", - f"python{get_major_minor_version()}", - dist_name, - ) - - if root is not None: - path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1] - scheme["headers"] = os.path.join(root, path_no_drive[1:]) - - return scheme - - -def get_scheme( - dist_name: str, - user: bool = False, - home: Optional[str] = None, - root: Optional[str] = None, - isolated: bool = False, - prefix: Optional[str] = None, -) -> Scheme: - """ - Get the "scheme" corresponding to the input parameters. The distutils - documentation provides the context for the available schemes: - https://docs.python.org/3/install/index.html#alternate-installation - - :param dist_name: the name of the package to retrieve the scheme for, used - in the headers scheme path - :param user: indicates to use the "user" scheme - :param home: indicates to use the "home" scheme and provides the base - directory for the same - :param root: root under which other directories are re-based - :param isolated: equivalent to --no-user-cfg, i.e. do not consider - ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for - scheme paths - :param prefix: indicates to use the "prefix" scheme and provides the - base directory for the same - """ - scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) - return Scheme( - platlib=scheme["platlib"], - purelib=scheme["purelib"], - headers=scheme["headers"], - scripts=scheme["scripts"], - data=scheme["data"], - ) - - -def get_bin_prefix() -> str: - # XXX: In old virtualenv versions, sys.prefix can contain '..' components, - # so we need to call normpath to eliminate them. - prefix = os.path.normpath(sys.prefix) - if WINDOWS: - bin_py = os.path.join(prefix, "Scripts") - # buildout uses 'bin' on Windows too? - if not os.path.exists(bin_py): - bin_py = os.path.join(prefix, "bin") - return bin_py - # Forcing to use /usr/local/bin for standard macOS framework installs - # Also log to ~/Library/Logs/ for use with the Console.app log viewer - if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/": - return "/usr/local/bin" - return os.path.join(prefix, "bin") - - -def get_purelib() -> str: - return get_python_lib(plat_specific=False) - - -def get_platlib() -> str: - return get_python_lib(plat_specific=True) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py b/myenv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py deleted file mode 100644 index ca860ea..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py +++ /dev/null @@ -1,214 +0,0 @@ -import logging -import os -import sys -import sysconfig -import typing - -from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import change_root, get_major_minor_version, is_osx_framework - -logger = logging.getLogger(__name__) - - -# Notes on _infer_* functions. -# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no -# way to ask things like "what is the '_prefix' scheme on this platform". These -# functions try to answer that with some heuristics while accounting for ad-hoc -# platforms not covered by CPython's default sysconfig implementation. If the -# ad-hoc implementation does not fully implement sysconfig, we'll fall back to -# a POSIX scheme. - -_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) - -_PREFERRED_SCHEME_API = getattr(sysconfig, "get_preferred_scheme", None) - - -def _should_use_osx_framework_prefix() -> bool: - """Check for Apple's ``osx_framework_library`` scheme. - - Python distributed by Apple's Command Line Tools has this special scheme - that's used when: - - * This is a framework build. - * We are installing into the system prefix. - - This does not account for ``pip install --prefix`` (also means we're not - installing to the system prefix), which should use ``posix_prefix``, but - logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But - since ``prefix`` is not available for ``sysconfig.get_default_scheme()``, - which is the stdlib replacement for ``_infer_prefix()``, presumably Apple - wouldn't be able to magically switch between ``osx_framework_library`` and - ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library`` - means its behavior is consistent whether we use the stdlib implementation - or our own, and we deal with this special case in ``get_scheme()`` instead. - """ - return ( - "osx_framework_library" in _AVAILABLE_SCHEMES - and not running_under_virtualenv() - and is_osx_framework() - ) - - -def _infer_prefix() -> str: - """Try to find a prefix scheme for the current platform. - - This tries: - - * A special ``osx_framework_library`` for Python distributed by Apple's - Command Line Tools, when not running in a virtual environment. - * Implementation + OS, used by PyPy on Windows (``pypy_nt``). - * Implementation without OS, used by PyPy on POSIX (``pypy``). - * OS + "prefix", used by CPython on POSIX (``posix_prefix``). - * Just the OS name, used by CPython on Windows (``nt``). - - If none of the above works, fall back to ``posix_prefix``. - """ - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("prefix") - if _should_use_osx_framework_prefix(): - return "osx_framework_library" - implementation_suffixed = f"{sys.implementation.name}_{os.name}" - if implementation_suffixed in _AVAILABLE_SCHEMES: - return implementation_suffixed - if sys.implementation.name in _AVAILABLE_SCHEMES: - return sys.implementation.name - suffixed = f"{os.name}_prefix" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". - return os.name - return "posix_prefix" - - -def _infer_user() -> str: - """Try to find a user scheme for the current platform.""" - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("user") - if is_osx_framework() and not running_under_virtualenv(): - suffixed = "osx_framework_user" - else: - suffixed = f"{os.name}_user" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. - raise UserInstallationInvalid() - return "posix_user" - - -def _infer_home() -> str: - """Try to find a home for the current platform.""" - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("home") - suffixed = f"{os.name}_home" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - return "posix_home" - - -# Update these keys if the user sets a custom home. -_HOME_KEYS = [ - "installed_base", - "base", - "installed_platbase", - "platbase", - "prefix", - "exec_prefix", -] -if sysconfig.get_config_var("userbase") is not None: - _HOME_KEYS.append("userbase") - - -def get_scheme( - dist_name: str, - user: bool = False, - home: typing.Optional[str] = None, - root: typing.Optional[str] = None, - isolated: bool = False, - prefix: typing.Optional[str] = None, -) -> Scheme: - """ - Get the "scheme" corresponding to the input parameters. - - :param dist_name: the name of the package to retrieve the scheme for, used - in the headers scheme path - :param user: indicates to use the "user" scheme - :param home: indicates to use the "home" scheme - :param root: root under which other directories are re-based - :param isolated: ignored, but kept for distutils compatibility (where - this controls whether the user-site pydistutils.cfg is honored) - :param prefix: indicates to use the "prefix" scheme and provides the - base directory for the same - """ - if user and prefix: - raise InvalidSchemeCombination("--user", "--prefix") - if home and prefix: - raise InvalidSchemeCombination("--home", "--prefix") - - if home is not None: - scheme_name = _infer_home() - elif user: - scheme_name = _infer_user() - else: - scheme_name = _infer_prefix() - - # Special case: When installing into a custom prefix, use posix_prefix - # instead of osx_framework_library. See _should_use_osx_framework_prefix() - # docstring for details. - if prefix is not None and scheme_name == "osx_framework_library": - scheme_name = "posix_prefix" - - if home is not None: - variables = {k: home for k in _HOME_KEYS} - elif prefix is not None: - variables = {k: prefix for k in _HOME_KEYS} - else: - variables = {} - - paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) - - # Logic here is very arbitrary, we're doing it for compatibility, don't ask. - # 1. Pip historically uses a special header path in virtual environments. - # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We - # only do the same when not running in a virtual environment because - # pip's historical header path logic (see point 1) did not do this. - if running_under_virtualenv(): - if user: - base = variables.get("userbase", sys.prefix) - else: - base = variables.get("base", sys.prefix) - python_xy = f"python{get_major_minor_version()}" - paths["include"] = os.path.join(base, "include", "site", python_xy) - elif not dist_name: - dist_name = "UNKNOWN" - - scheme = Scheme( - platlib=paths["platlib"], - purelib=paths["purelib"], - headers=os.path.join(paths["include"], dist_name), - scripts=paths["scripts"], - data=paths["data"], - ) - if root is not None: - converted_keys = {} - for key in SCHEME_KEYS: - converted_keys[key] = change_root(root, getattr(scheme, key)) - scheme = Scheme(**converted_keys) - return scheme - - -def get_bin_prefix() -> str: - # Forcing to use /usr/local/bin for standard macOS framework installs. - if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": - return "/usr/local/bin" - return sysconfig.get_paths()["scripts"] - - -def get_purelib() -> str: - return sysconfig.get_paths()["purelib"] - - -def get_platlib() -> str: - return sysconfig.get_paths()["platlib"] diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/locations/base.py b/myenv/lib/python3.12/site-packages/pip/_internal/locations/base.py deleted file mode 100644 index 3f9f896..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/locations/base.py +++ /dev/null @@ -1,81 +0,0 @@ -import functools -import os -import site -import sys -import sysconfig -import typing - -from pip._internal.exceptions import InstallationError -from pip._internal.utils import appdirs -from pip._internal.utils.virtualenv import running_under_virtualenv - -# Application Directories -USER_CACHE_DIR = appdirs.user_cache_dir("pip") - -# FIXME doesn't account for venv linked to global site-packages -site_packages: str = sysconfig.get_path("purelib") - - -def get_major_minor_version() -> str: - """ - Return the major-minor version of the current Python as a string, e.g. - "3.7" or "3.10". - """ - return "{}.{}".format(*sys.version_info) - - -def change_root(new_root: str, pathname: str) -> str: - """Return 'pathname' with 'new_root' prepended. - - If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname). - Otherwise, it requires making 'pathname' relative and then joining the - two, which is tricky on DOS/Windows and Mac OS. - - This is borrowed from Python's standard library's distutils module. - """ - if os.name == "posix": - if not os.path.isabs(pathname): - return os.path.join(new_root, pathname) - else: - return os.path.join(new_root, pathname[1:]) - - elif os.name == "nt": - (drive, path) = os.path.splitdrive(pathname) - if path[0] == "\\": - path = path[1:] - return os.path.join(new_root, path) - - else: - raise InstallationError( - f"Unknown platform: {os.name}\n" - "Can not change root path prefix on unknown platform." - ) - - -def get_src_prefix() -> str: - if running_under_virtualenv(): - src_prefix = os.path.join(sys.prefix, "src") - else: - # FIXME: keep src in cwd for now (it is not a temporary folder) - try: - src_prefix = os.path.join(os.getcwd(), "src") - except OSError: - # In case the current working directory has been renamed or deleted - sys.exit("The folder you are executing pip from can no longer be found.") - - # under macOS + virtualenv sys.prefix is not properly resolved - # it is something like /path/to/python/bin/.. - return os.path.abspath(src_prefix) - - -try: - # Use getusersitepackages if this is present, as it ensures that the - # value is initialised properly. - user_site: typing.Optional[str] = site.getusersitepackages() -except AttributeError: - user_site = site.USER_SITE - - -@functools.lru_cache(maxsize=None) -def is_osx_framework() -> bool: - return bool(sysconfig.get_config_var("PYTHONFRAMEWORK")) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/main.py b/myenv/lib/python3.12/site-packages/pip/_internal/main.py deleted file mode 100644 index 33c6d24..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/main.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import List, Optional - - -def main(args: Optional[List[str]] = None) -> int: - """This is preserved for old console scripts that may still be referencing - it. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py deleted file mode 100644 index 1ea1e7f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py +++ /dev/null @@ -1,128 +0,0 @@ -import contextlib -import functools -import os -import sys -from typing import TYPE_CHECKING, List, Optional, Type, cast - -from pip._internal.utils.misc import strtobool - -from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel - -if TYPE_CHECKING: - from typing import Literal, Protocol -else: - Protocol = object - -__all__ = [ - "BaseDistribution", - "BaseEnvironment", - "FilesystemWheel", - "MemoryWheel", - "Wheel", - "get_default_environment", - "get_environment", - "get_wheel_distribution", - "select_backend", -] - - -def _should_use_importlib_metadata() -> bool: - """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend. - - By default, pip uses ``importlib.metadata`` on Python 3.11+, and - ``pkg_resources`` otherwise. This can be overridden by a couple of ways: - - * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it - dictates whether ``importlib.metadata`` is used, regardless of Python - version. - * On Python 3.11+, Python distributors can patch ``importlib.metadata`` - to add a global constant ``_PIP_USE_IMPORTLIB_METADATA = False``. This - makes pip use ``pkg_resources`` (unless the user set the aforementioned - environment variable to *True*). - """ - with contextlib.suppress(KeyError, ValueError): - return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"])) - if sys.version_info < (3, 11): - return False - import importlib.metadata - - return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True)) - - -class Backend(Protocol): - NAME: 'Literal["importlib", "pkg_resources"]' - Distribution: Type[BaseDistribution] - Environment: Type[BaseEnvironment] - - -@functools.lru_cache(maxsize=None) -def select_backend() -> Backend: - if _should_use_importlib_metadata(): - from . import importlib - - return cast(Backend, importlib) - from . import pkg_resources - - return cast(Backend, pkg_resources) - - -def get_default_environment() -> BaseEnvironment: - """Get the default representation for the current environment. - - This returns an Environment instance from the chosen backend. The default - Environment instance should be built from ``sys.path`` and may use caching - to share instance state across calls. - """ - return select_backend().Environment.default() - - -def get_environment(paths: Optional[List[str]]) -> BaseEnvironment: - """Get a representation of the environment specified by ``paths``. - - This returns an Environment instance from the chosen backend based on the - given import paths. The backend must build a fresh instance representing - the state of installed distributions when this function is called. - """ - return select_backend().Environment.from_paths(paths) - - -def get_directory_distribution(directory: str) -> BaseDistribution: - """Get the distribution metadata representation in the specified directory. - - This returns a Distribution instance from the chosen backend based on - the given on-disk ``.dist-info`` directory. - """ - return select_backend().Distribution.from_directory(directory) - - -def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution: - """Get the representation of the specified wheel's distribution metadata. - - This returns a Distribution instance from the chosen backend based on - the given wheel's ``.dist-info`` directory. - - :param canonical_name: Normalized project name of the given wheel. - """ - return select_backend().Distribution.from_wheel(wheel, canonical_name) - - -def get_metadata_distribution( - metadata_contents: bytes, - filename: str, - canonical_name: str, -) -> BaseDistribution: - """Get the dist representation of the specified METADATA file contents. - - This returns a Distribution instance from the chosen backend sourced from the data - in `metadata_contents`. - - :param metadata_contents: Contents of a METADATA file within a dist, or one served - via PEP 658. - :param filename: Filename for the dist this metadata represents. - :param canonical_name: Normalized project name of the given dist. - """ - return select_backend().Distribution.from_metadata_file_contents( - metadata_contents, - filename, - canonical_name, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 08567e3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc deleted file mode 100644 index 41cce72..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc deleted file mode 100644 index e92af56..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc deleted file mode 100644 index c46b2f4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py deleted file mode 100644 index f3aeab3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py +++ /dev/null @@ -1,86 +0,0 @@ -# Extracted from https://github.com/pfmoore/pkg_metadata - -from email.header import Header, decode_header, make_header -from email.message import Message -from typing import Any, Dict, List, Union, cast - -METADATA_FIELDS = [ - # Name, Multiple-Use - ("Metadata-Version", False), - ("Name", False), - ("Version", False), - ("Dynamic", True), - ("Platform", True), - ("Supported-Platform", True), - ("Summary", False), - ("Description", False), - ("Description-Content-Type", False), - ("Keywords", False), - ("Home-page", False), - ("Download-URL", False), - ("Author", False), - ("Author-email", False), - ("Maintainer", False), - ("Maintainer-email", False), - ("License", False), - ("License-Expression", False), - ("License-File", True), - ("Classifier", True), - ("Requires-Dist", True), - ("Requires-Python", False), - ("Requires-External", True), - ("Project-URL", True), - ("Provides-Extra", True), - ("Provides-Dist", True), - ("Obsoletes-Dist", True), -] - - -def json_name(field: str) -> str: - return field.lower().replace("-", "_") - - -def msg_to_json(msg: Message) -> Dict[str, Any]: - """Convert a Message object into a JSON-compatible dictionary.""" - - def sanitise_header(h: Union[Header, str]) -> str: - if isinstance(h, Header): - chunks = [] - for bytes, encoding in decode_header(h): - if encoding == "unknown-8bit": - try: - # See if UTF-8 works - bytes.decode("utf-8") - encoding = "utf-8" - except UnicodeDecodeError: - # If not, latin1 at least won't fail - encoding = "latin1" - chunks.append((bytes, encoding)) - return str(make_header(chunks)) - return str(h) - - result = {} - for field, multi in METADATA_FIELDS: - if field not in msg: - continue - key = json_name(field) - if multi: - value: Union[str, List[str]] = [ - sanitise_header(v) for v in msg.get_all(field) # type: ignore - ] - else: - value = sanitise_header(msg.get(field)) # type: ignore - if key == "keywords": - # Accept both comma-separated and space-separated - # forms, for better compatibility with old data. - if "," in value: - value = [v.strip() for v in value.split(",")] - else: - value = value.split() - result[key] = value - - payload = cast(str, msg.get_payload()) - if payload: - result["description"] = payload - - return result diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/base.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/base.py deleted file mode 100644 index 9eabcdb..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/base.py +++ /dev/null @@ -1,688 +0,0 @@ -import csv -import email.message -import functools -import json -import logging -import pathlib -import re -import zipfile -from typing import ( - IO, - Any, - Collection, - Container, - Dict, - Iterable, - Iterator, - List, - NamedTuple, - Optional, - Protocol, - Tuple, - Union, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.exceptions import NoneMetadataError -from pip._internal.locations import site_packages, user_site -from pip._internal.models.direct_url import ( - DIRECT_URL_METADATA_NAME, - DirectUrl, - DirectUrlValidationError, -) -from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here. -from pip._internal.utils.egg_link import egg_link_path_from_sys_path -from pip._internal.utils.misc import is_local, normalize_path -from pip._internal.utils.urls import url_to_path - -from ._json import msg_to_json - -InfoPath = Union[str, pathlib.PurePath] - -logger = logging.getLogger(__name__) - - -class BaseEntryPoint(Protocol): - @property - def name(self) -> str: - raise NotImplementedError() - - @property - def value(self) -> str: - raise NotImplementedError() - - @property - def group(self) -> str: - raise NotImplementedError() - - -def _convert_installed_files_path( - entry: Tuple[str, ...], - info: Tuple[str, ...], -) -> str: - """Convert a legacy installed-files.txt path into modern RECORD path. - - The legacy format stores paths relative to the info directory, while the - modern format stores paths relative to the package root, e.g. the - site-packages directory. - - :param entry: Path parts of the installed-files.txt entry. - :param info: Path parts of the egg-info directory relative to package root. - :returns: The converted entry. - - For best compatibility with symlinks, this does not use ``abspath()`` or - ``Path.resolve()``, but tries to work with path parts: - - 1. While ``entry`` starts with ``..``, remove the equal amounts of parts - from ``info``; if ``info`` is empty, start appending ``..`` instead. - 2. Join the two directly. - """ - while entry and entry[0] == "..": - if not info or info[-1] == "..": - info += ("..",) - else: - info = info[:-1] - entry = entry[1:] - return str(pathlib.Path(*info, *entry)) - - -class RequiresEntry(NamedTuple): - requirement: str - extra: str - marker: str - - -class BaseDistribution(Protocol): - @classmethod - def from_directory(cls, directory: str) -> "BaseDistribution": - """Load the distribution from a metadata directory. - - :param directory: Path to a metadata directory, e.g. ``.dist-info``. - """ - raise NotImplementedError() - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> "BaseDistribution": - """Load the distribution from the contents of a METADATA file. - - This is used to implement PEP 658 by generating a "shallow" dist object that can - be used for resolution without downloading or building the actual dist yet. - - :param metadata_contents: The contents of a METADATA file. - :param filename: File name for the dist with this metadata. - :param project_name: Name of the project this dist represents. - """ - raise NotImplementedError() - - @classmethod - def from_wheel(cls, wheel: "Wheel", name: str) -> "BaseDistribution": - """Load the distribution from a given wheel. - - :param wheel: A concrete wheel definition. - :param name: File name of the wheel. - - :raises InvalidWheel: Whenever loading of the wheel causes a - :py:exc:`zipfile.BadZipFile` exception to be thrown. - :raises UnsupportedWheel: If the wheel is a valid zip, but malformed - internally. - """ - raise NotImplementedError() - - def __repr__(self) -> str: - return f"{self.raw_name} {self.raw_version} ({self.location})" - - def __str__(self) -> str: - return f"{self.raw_name} {self.raw_version}" - - @property - def location(self) -> Optional[str]: - """Where the distribution is loaded from. - - A string value is not necessarily a filesystem path, since distributions - can be loaded from other sources, e.g. arbitrary zip archives. ``None`` - means the distribution is created in-memory. - - Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If - this is a symbolic link, we want to preserve the relative path between - it and files in the distribution. - """ - raise NotImplementedError() - - @property - def editable_project_location(self) -> Optional[str]: - """The project location for editable distributions. - - This is the directory where pyproject.toml or setup.py is located. - None if the distribution is not installed in editable mode. - """ - # TODO: this property is relatively costly to compute, memoize it ? - direct_url = self.direct_url - if direct_url: - if direct_url.is_local_editable(): - return url_to_path(direct_url.url) - else: - # Search for an .egg-link file by walking sys.path, as it was - # done before by dist_is_editable(). - egg_link_path = egg_link_path_from_sys_path(self.raw_name) - if egg_link_path: - # TODO: get project location from second line of egg_link file - # (https://github.com/pypa/pip/issues/10243) - return self.location - return None - - @property - def installed_location(self) -> Optional[str]: - """The distribution's "installed" location. - - This should generally be a ``site-packages`` directory. This is - usually ``dist.location``, except for legacy develop-installed packages, - where ``dist.location`` is the source code location, and this is where - the ``.egg-link`` file is. - - The returned location is normalized (in particular, with symlinks removed). - """ - raise NotImplementedError() - - @property - def info_location(self) -> Optional[str]: - """Location of the .[egg|dist]-info directory or file. - - Similarly to ``location``, a string value is not necessarily a - filesystem path. ``None`` means the distribution is created in-memory. - - For a modern .dist-info installation on disk, this should be something - like ``{location}/{raw_name}-{version}.dist-info``. - - Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If - this is a symbolic link, we want to preserve the relative path between - it and other files in the distribution. - """ - raise NotImplementedError() - - @property - def installed_by_distutils(self) -> bool: - """Whether this distribution is installed with legacy distutils format. - - A distribution installed with "raw" distutils not patched by setuptools - uses one single file at ``info_location`` to store metadata. We need to - treat this specially on uninstallation. - """ - info_location = self.info_location - if not info_location: - return False - return pathlib.Path(info_location).is_file() - - @property - def installed_as_egg(self) -> bool: - """Whether this distribution is installed as an egg. - - This usually indicates the distribution was installed by (older versions - of) easy_install. - """ - location = self.location - if not location: - return False - return location.endswith(".egg") - - @property - def installed_with_setuptools_egg_info(self) -> bool: - """Whether this distribution is installed with the ``.egg-info`` format. - - This usually indicates the distribution was installed with setuptools - with an old pip version or with ``single-version-externally-managed``. - - Note that this ensure the metadata store is a directory. distutils can - also installs an ``.egg-info``, but as a file, not a directory. This - property is *False* for that case. Also see ``installed_by_distutils``. - """ - info_location = self.info_location - if not info_location: - return False - if not info_location.endswith(".egg-info"): - return False - return pathlib.Path(info_location).is_dir() - - @property - def installed_with_dist_info(self) -> bool: - """Whether this distribution is installed with the "modern format". - - This indicates a "modern" installation, e.g. storing metadata in the - ``.dist-info`` directory. This applies to installations made by - setuptools (but through pip, not directly), or anything using the - standardized build backend interface (PEP 517). - """ - info_location = self.info_location - if not info_location: - return False - if not info_location.endswith(".dist-info"): - return False - return pathlib.Path(info_location).is_dir() - - @property - def canonical_name(self) -> NormalizedName: - raise NotImplementedError() - - @property - def version(self) -> Version: - raise NotImplementedError() - - @property - def raw_version(self) -> str: - raise NotImplementedError() - - @property - def setuptools_filename(self) -> str: - """Convert a project name to its setuptools-compatible filename. - - This is a copy of ``pkg_resources.to_filename()`` for compatibility. - """ - return self.raw_name.replace("-", "_") - - @property - def direct_url(self) -> Optional[DirectUrl]: - """Obtain a DirectUrl from this distribution. - - Returns None if the distribution has no `direct_url.json` metadata, - or if `direct_url.json` is invalid. - """ - try: - content = self.read_text(DIRECT_URL_METADATA_NAME) - except FileNotFoundError: - return None - try: - return DirectUrl.from_json(content) - except ( - UnicodeDecodeError, - json.JSONDecodeError, - DirectUrlValidationError, - ) as e: - logger.warning( - "Error parsing %s for %s: %s", - DIRECT_URL_METADATA_NAME, - self.canonical_name, - e, - ) - return None - - @property - def installer(self) -> str: - try: - installer_text = self.read_text("INSTALLER") - except (OSError, ValueError, NoneMetadataError): - return "" # Fail silently if the installer file cannot be read. - for line in installer_text.splitlines(): - cleaned_line = line.strip() - if cleaned_line: - return cleaned_line - return "" - - @property - def requested(self) -> bool: - return self.is_file("REQUESTED") - - @property - def editable(self) -> bool: - return bool(self.editable_project_location) - - @property - def local(self) -> bool: - """If distribution is installed in the current virtual environment. - - Always True if we're not in a virtualenv. - """ - if self.installed_location is None: - return False - return is_local(self.installed_location) - - @property - def in_usersite(self) -> bool: - if self.installed_location is None or user_site is None: - return False - return self.installed_location.startswith(normalize_path(user_site)) - - @property - def in_site_packages(self) -> bool: - if self.installed_location is None or site_packages is None: - return False - return self.installed_location.startswith(normalize_path(site_packages)) - - def is_file(self, path: InfoPath) -> bool: - """Check whether an entry in the info directory is a file.""" - raise NotImplementedError() - - def iter_distutils_script_names(self) -> Iterator[str]: - """Find distutils 'scripts' entries metadata. - - If 'scripts' is supplied in ``setup.py``, distutils records those in the - installed distribution's ``scripts`` directory, a file for each script. - """ - raise NotImplementedError() - - def read_text(self, path: InfoPath) -> str: - """Read a file in the info directory. - - :raise FileNotFoundError: If ``path`` does not exist in the directory. - :raise NoneMetadataError: If ``path`` exists in the info directory, but - cannot be read. - """ - raise NotImplementedError() - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - raise NotImplementedError() - - def _metadata_impl(self) -> email.message.Message: - raise NotImplementedError() - - @functools.cached_property - def metadata(self) -> email.message.Message: - """Metadata of distribution parsed from e.g. METADATA or PKG-INFO. - - This should return an empty message if the metadata file is unavailable. - - :raises NoneMetadataError: If the metadata file is available, but does - not contain valid metadata. - """ - metadata = self._metadata_impl() - self._add_egg_info_requires(metadata) - return metadata - - @property - def metadata_dict(self) -> Dict[str, Any]: - """PEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO. - - This should return an empty dict if the metadata file is unavailable. - - :raises NoneMetadataError: If the metadata file is available, but does - not contain valid metadata. - """ - return msg_to_json(self.metadata) - - @property - def metadata_version(self) -> Optional[str]: - """Value of "Metadata-Version:" in distribution metadata, if available.""" - return self.metadata.get("Metadata-Version") - - @property - def raw_name(self) -> str: - """Value of "Name:" in distribution metadata.""" - # The metadata should NEVER be missing the Name: key, but if it somehow - # does, fall back to the known canonical name. - return self.metadata.get("Name", self.canonical_name) - - @property - def requires_python(self) -> SpecifierSet: - """Value of "Requires-Python:" in distribution metadata. - - If the key does not exist or contains an invalid value, an empty - SpecifierSet should be returned. - """ - value = self.metadata.get("Requires-Python") - if value is None: - return SpecifierSet() - try: - # Convert to str to satisfy the type checker; this can be a Header object. - spec = SpecifierSet(str(value)) - except InvalidSpecifier as e: - message = "Package %r has an invalid Requires-Python: %s" - logger.warning(message, self.raw_name, e) - return SpecifierSet() - return spec - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - """Dependencies of this distribution. - - For modern .dist-info distributions, this is the collection of - "Requires-Dist:" entries in distribution metadata. - """ - raise NotImplementedError() - - def iter_raw_dependencies(self) -> Iterable[str]: - """Raw Requires-Dist metadata.""" - return self.metadata.get_all("Requires-Dist", []) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - """Extras provided by this distribution. - - For modern .dist-info distributions, this is the collection of - "Provides-Extra:" entries in distribution metadata. - - The return value of this function is expected to be normalised names, - per PEP 685, with the returned value being handled appropriately by - `iter_dependencies`. - """ - raise NotImplementedError() - - def _iter_declared_entries_from_record(self) -> Optional[Iterator[str]]: - try: - text = self.read_text("RECORD") - except FileNotFoundError: - return None - # This extra Path-str cast normalizes entries. - return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines())) - - def _iter_declared_entries_from_legacy(self) -> Optional[Iterator[str]]: - try: - text = self.read_text("installed-files.txt") - except FileNotFoundError: - return None - paths = (p for p in text.splitlines(keepends=False) if p) - root = self.location - info = self.info_location - if root is None or info is None: - return paths - try: - info_rel = pathlib.Path(info).relative_to(root) - except ValueError: # info is not relative to root. - return paths - if not info_rel.parts: # info *is* root. - return paths - return ( - _convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts) - for p in paths - ) - - def iter_declared_entries(self) -> Optional[Iterator[str]]: - """Iterate through file entries declared in this distribution. - - For modern .dist-info distributions, this is the files listed in the - ``RECORD`` metadata file. For legacy setuptools distributions, this - comes from ``installed-files.txt``, with entries normalized to be - compatible with the format used by ``RECORD``. - - :return: An iterator for listed entries, or None if the distribution - contains neither ``RECORD`` nor ``installed-files.txt``. - """ - return ( - self._iter_declared_entries_from_record() - or self._iter_declared_entries_from_legacy() - ) - - def _iter_requires_txt_entries(self) -> Iterator[RequiresEntry]: - """Parse a ``requires.txt`` in an egg-info directory. - - This is an INI-ish format where an egg-info stores dependencies. A - section name describes extra other environment markers, while each entry - is an arbitrary string (not a key-value pair) representing a dependency - as a requirement string (no markers). - - There is a construct in ``importlib.metadata`` called ``Sectioned`` that - does mostly the same, but the format is currently considered private. - """ - try: - content = self.read_text("requires.txt") - except FileNotFoundError: - return - extra = marker = "" # Section-less entries don't have markers. - for line in content.splitlines(): - line = line.strip() - if not line or line.startswith("#"): # Comment; ignored. - continue - if line.startswith("[") and line.endswith("]"): # A section header. - extra, _, marker = line.strip("[]").partition(":") - continue - yield RequiresEntry(requirement=line, extra=extra, marker=marker) - - def _iter_egg_info_extras(self) -> Iterable[str]: - """Get extras from the egg-info directory.""" - known_extras = {""} - for entry in self._iter_requires_txt_entries(): - extra = canonicalize_name(entry.extra) - if extra in known_extras: - continue - known_extras.add(extra) - yield extra - - def _iter_egg_info_dependencies(self) -> Iterable[str]: - """Get distribution dependencies from the egg-info directory. - - To ease parsing, this converts a legacy dependency entry into a PEP 508 - requirement string. Like ``_iter_requires_txt_entries()``, there is code - in ``importlib.metadata`` that does mostly the same, but not do exactly - what we need. - - Namely, ``importlib.metadata`` does not normalize the extra name before - putting it into the requirement string, which causes marker comparison - to fail because the dist-info format do normalize. This is consistent in - all currently available PEP 517 backends, although not standardized. - """ - for entry in self._iter_requires_txt_entries(): - extra = canonicalize_name(entry.extra) - if extra and entry.marker: - marker = f'({entry.marker}) and extra == "{extra}"' - elif extra: - marker = f'extra == "{extra}"' - elif entry.marker: - marker = entry.marker - else: - marker = "" - if marker: - yield f"{entry.requirement} ; {marker}" - else: - yield entry.requirement - - def _add_egg_info_requires(self, metadata: email.message.Message) -> None: - """Add egg-info requires.txt information to the metadata.""" - if not metadata.get_all("Requires-Dist"): - for dep in self._iter_egg_info_dependencies(): - metadata["Requires-Dist"] = dep - if not metadata.get_all("Provides-Extra"): - for extra in self._iter_egg_info_extras(): - metadata["Provides-Extra"] = extra - - -class BaseEnvironment: - """An environment containing distributions to introspect.""" - - @classmethod - def default(cls) -> "BaseEnvironment": - raise NotImplementedError() - - @classmethod - def from_paths(cls, paths: Optional[List[str]]) -> "BaseEnvironment": - raise NotImplementedError() - - def get_distribution(self, name: str) -> Optional["BaseDistribution"]: - """Given a requirement name, return the installed distributions. - - The name may not be normalized. The implementation must canonicalize - it for lookup. - """ - raise NotImplementedError() - - def _iter_distributions(self) -> Iterator["BaseDistribution"]: - """Iterate through installed distributions. - - This function should be implemented by subclass, but never called - directly. Use the public ``iter_distribution()`` instead, which - implements additional logic to make sure the distributions are valid. - """ - raise NotImplementedError() - - def iter_all_distributions(self) -> Iterator[BaseDistribution]: - """Iterate through all installed distributions without any filtering.""" - for dist in self._iter_distributions(): - # Make sure the distribution actually comes from a valid Python - # packaging distribution. Pip's AdjacentTempDirectory leaves folders - # e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The - # valid project name pattern is taken from PEP 508. - project_name_valid = re.match( - r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", - dist.canonical_name, - flags=re.IGNORECASE, - ) - if not project_name_valid: - logger.warning( - "Ignoring invalid distribution %s (%s)", - dist.canonical_name, - dist.location, - ) - continue - yield dist - - def iter_installed_distributions( - self, - local_only: bool = True, - skip: Container[str] = stdlib_pkgs, - include_editables: bool = True, - editables_only: bool = False, - user_only: bool = False, - ) -> Iterator[BaseDistribution]: - """Return a list of installed distributions. - - This is based on ``iter_all_distributions()`` with additional filtering - options. Note that ``iter_installed_distributions()`` without arguments - is *not* equal to ``iter_all_distributions()``, since some of the - configurations exclude packages by default. - - :param local_only: If True (default), only return installations - local to the current virtualenv, if in a virtualenv. - :param skip: An iterable of canonicalized project names to ignore; - defaults to ``stdlib_pkgs``. - :param include_editables: If False, don't report editables. - :param editables_only: If True, only report editables. - :param user_only: If True, only report installations in the user - site directory. - """ - it = self.iter_all_distributions() - if local_only: - it = (d for d in it if d.local) - if not include_editables: - it = (d for d in it if not d.editable) - if editables_only: - it = (d for d in it if d.editable) - if user_only: - it = (d for d in it if d.in_usersite) - return (d for d in it if d.canonical_name not in skip) - - -class Wheel(Protocol): - location: str - - def as_zipfile(self) -> zipfile.ZipFile: - raise NotImplementedError() - - -class FilesystemWheel(Wheel): - def __init__(self, location: str) -> None: - self.location = location - - def as_zipfile(self) -> zipfile.ZipFile: - return zipfile.ZipFile(self.location, allowZip64=True) - - -class MemoryWheel(Wheel): - def __init__(self, location: str, stream: IO[bytes]) -> None: - self.location = location - self.stream = stream - - def as_zipfile(self) -> zipfile.ZipFile: - return zipfile.ZipFile(self.stream, allowZip64=True) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py deleted file mode 100644 index a779138..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from ._dists import Distribution -from ._envs import Environment - -__all__ = ["NAME", "Distribution", "Environment"] - -NAME = "importlib" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 8023847..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc deleted file mode 100644 index 6290f6b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc deleted file mode 100644 index ae5e605..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc deleted file mode 100644 index c24ffc0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py deleted file mode 100644 index ec1e815..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py +++ /dev/null @@ -1,85 +0,0 @@ -import importlib.metadata -import os -from typing import Any, Optional, Protocol, Tuple, cast - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - - -class BadMetadata(ValueError): - def __init__(self, dist: importlib.metadata.Distribution, *, reason: str) -> None: - self.dist = dist - self.reason = reason - - def __str__(self) -> str: - return f"Bad metadata in {self.dist} ({self.reason})" - - -class BasePath(Protocol): - """A protocol that various path objects conform. - - This exists because importlib.metadata uses both ``pathlib.Path`` and - ``zipfile.Path``, and we need a common base for type hints (Union does not - work well since ``zipfile.Path`` is too new for our linter setup). - - This does not mean to be exhaustive, but only contains things that present - in both classes *that we need*. - """ - - @property - def name(self) -> str: - raise NotImplementedError() - - @property - def parent(self) -> "BasePath": - raise NotImplementedError() - - -def get_info_location(d: importlib.metadata.Distribution) -> Optional[BasePath]: - """Find the path to the distribution's metadata directory. - - HACK: This relies on importlib.metadata's private ``_path`` attribute. Not - all distributions exist on disk, so importlib.metadata is correct to not - expose the attribute as public. But pip's code base is old and not as clean, - so we do this to avoid having to rewrite too many things. Hopefully we can - eliminate this some day. - """ - return getattr(d, "_path", None) - - -def parse_name_and_version_from_info_directory( - dist: importlib.metadata.Distribution, -) -> Tuple[Optional[str], Optional[str]]: - """Get a name and version from the metadata directory name. - - This is much faster than reading distribution metadata. - """ - info_location = get_info_location(dist) - if info_location is None: - return None, None - - stem, suffix = os.path.splitext(info_location.name) - if suffix == ".dist-info": - name, sep, version = stem.partition("-") - if sep: - return name, version - - if suffix == ".egg-info": - name = stem.split("-", 1)[0] - return name, None - - return None, None - - -def get_dist_canonical_name(dist: importlib.metadata.Distribution) -> NormalizedName: - """Get the distribution's normalized name. - - The ``name`` attribute is only available in Python 3.10 or later. We are - targeting exactly that, but Mypy does not know this. - """ - if name := parse_name_and_version_from_info_directory(dist)[0]: - return canonicalize_name(name) - - name = cast(Any, dist).name - if not isinstance(name, str): - raise BadMetadata(dist, reason="invalid metadata entry 'name'") - return canonicalize_name(name) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py deleted file mode 100644 index d220b61..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py +++ /dev/null @@ -1,228 +0,0 @@ -import email.message -import importlib.metadata -import pathlib -import zipfile -from os import PathLike -from typing import ( - Collection, - Dict, - Iterable, - Iterator, - Mapping, - Optional, - Sequence, - Union, - cast, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import InvalidWheel, UnsupportedWheel -from pip._internal.metadata.base import ( - BaseDistribution, - BaseEntryPoint, - InfoPath, - Wheel, -) -from pip._internal.utils.misc import normalize_path -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file - -from ._compat import ( - BasePath, - get_dist_canonical_name, - parse_name_and_version_from_info_directory, -) - - -class WheelDistribution(importlib.metadata.Distribution): - """An ``importlib.metadata.Distribution`` read from a wheel. - - Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``, - its implementation is too "lazy" for pip's needs (we can't keep the ZipFile - handle open for the entire lifetime of the distribution object). - - This implementation eagerly reads the entire metadata directory into the - memory instead, and operates from that. - """ - - def __init__( - self, - files: Mapping[pathlib.PurePosixPath, bytes], - info_location: pathlib.PurePosixPath, - ) -> None: - self._files = files - self.info_location = info_location - - @classmethod - def from_zipfile( - cls, - zf: zipfile.ZipFile, - name: str, - location: str, - ) -> "WheelDistribution": - info_dir, _ = parse_wheel(zf, name) - paths = ( - (name, pathlib.PurePosixPath(name.split("/", 1)[-1])) - for name in zf.namelist() - if name.startswith(f"{info_dir}/") - ) - files = { - relpath: read_wheel_metadata_file(zf, fullpath) - for fullpath, relpath in paths - } - info_location = pathlib.PurePosixPath(location, info_dir) - return cls(files, info_location) - - def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: - # Only allow iterating through the metadata directory. - if pathlib.PurePosixPath(str(path)) in self._files: - return iter(self._files) - raise FileNotFoundError(path) - - def read_text(self, filename: str) -> Optional[str]: - try: - data = self._files[pathlib.PurePosixPath(filename)] - except KeyError: - return None - try: - text = data.decode("utf-8") - except UnicodeDecodeError as e: - wheel = self.info_location.parent - error = f"Error decoding metadata for {wheel}: {e} in {filename} file" - raise UnsupportedWheel(error) - return text - - def locate_file(self, path: Union[str, "PathLike[str]"]) -> pathlib.Path: - # This method doesn't make sense for our in-memory wheel, but the API - # requires us to define it. - raise NotImplementedError - - -class Distribution(BaseDistribution): - def __init__( - self, - dist: importlib.metadata.Distribution, - info_location: Optional[BasePath], - installed_location: Optional[BasePath], - ) -> None: - self._dist = dist - self._info_location = info_location - self._installed_location = installed_location - - @classmethod - def from_directory(cls, directory: str) -> BaseDistribution: - info_location = pathlib.Path(directory) - dist = importlib.metadata.Distribution.at(info_location) - return cls(dist, info_location, info_location.parent) - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> BaseDistribution: - # Generate temp dir to contain the metadata file, and write the file contents. - temp_dir = pathlib.Path( - TempDirectory(kind="metadata", globally_managed=True).path - ) - metadata_path = temp_dir / "METADATA" - metadata_path.write_bytes(metadata_contents) - # Construct dist pointing to the newly created directory. - dist = importlib.metadata.Distribution.at(metadata_path.parent) - return cls(dist, metadata_path.parent, None) - - @classmethod - def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: - try: - with wheel.as_zipfile() as zf: - dist = WheelDistribution.from_zipfile(zf, name, wheel.location) - except zipfile.BadZipFile as e: - raise InvalidWheel(wheel.location, name) from e - return cls(dist, dist.info_location, pathlib.PurePosixPath(wheel.location)) - - @property - def location(self) -> Optional[str]: - if self._info_location is None: - return None - return str(self._info_location.parent) - - @property - def info_location(self) -> Optional[str]: - if self._info_location is None: - return None - return str(self._info_location) - - @property - def installed_location(self) -> Optional[str]: - if self._installed_location is None: - return None - return normalize_path(str(self._installed_location)) - - @property - def canonical_name(self) -> NormalizedName: - return get_dist_canonical_name(self._dist) - - @property - def version(self) -> Version: - if version := parse_name_and_version_from_info_directory(self._dist)[1]: - return parse_version(version) - return parse_version(self._dist.version) - - @property - def raw_version(self) -> str: - return self._dist.version - - def is_file(self, path: InfoPath) -> bool: - return self._dist.read_text(str(path)) is not None - - def iter_distutils_script_names(self) -> Iterator[str]: - # A distutils installation is always "flat" (not in e.g. egg form), so - # if this distribution's info location is NOT a pathlib.Path (but e.g. - # zipfile.Path), it can never contain any distutils scripts. - if not isinstance(self._info_location, pathlib.Path): - return - for child in self._info_location.joinpath("scripts").iterdir(): - yield child.name - - def read_text(self, path: InfoPath) -> str: - content = self._dist.read_text(str(path)) - if content is None: - raise FileNotFoundError(path) - return content - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - # importlib.metadata's EntryPoint structure satisfies BaseEntryPoint. - return self._dist.entry_points - - def _metadata_impl(self) -> email.message.Message: - # From Python 3.10+, importlib.metadata declares PackageMetadata as the - # return type. This protocol is unfortunately a disaster now and misses - # a ton of fields that we need, including get() and get_payload(). We - # rely on the implementation that the object is actually a Message now, - # until upstream can improve the protocol. (python/cpython#94952) - return cast(email.message.Message, self._dist.metadata) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - return [ - canonicalize_name(extra) - for extra in self.metadata.get_all("Provides-Extra", []) - ] - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - contexts: Sequence[Dict[str, str]] = [{"extra": e} for e in extras] - for req_string in self.metadata.get_all("Requires-Dist", []): - # strip() because email.message.Message.get_all() may return a leading \n - # in case a long header was wrapped. - req = get_requirement(req_string.strip()) - if not req.marker: - yield req - elif not extras and req.marker.evaluate({"extra": ""}): - yield req - elif any(req.marker.evaluate(context) for context in contexts): - yield req diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py deleted file mode 100644 index 4d906fd..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py +++ /dev/null @@ -1,189 +0,0 @@ -import functools -import importlib.metadata -import logging -import os -import pathlib -import sys -import zipfile -import zipimport -from typing import Iterator, List, Optional, Sequence, Set, Tuple - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - -from pip._internal.metadata.base import BaseDistribution, BaseEnvironment -from pip._internal.models.wheel import Wheel -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.filetypes import WHEEL_EXTENSION - -from ._compat import BadMetadata, BasePath, get_dist_canonical_name, get_info_location -from ._dists import Distribution - -logger = logging.getLogger(__name__) - - -def _looks_like_wheel(location: str) -> bool: - if not location.endswith(WHEEL_EXTENSION): - return False - if not os.path.isfile(location): - return False - if not Wheel.wheel_file_re.match(os.path.basename(location)): - return False - return zipfile.is_zipfile(location) - - -class _DistributionFinder: - """Finder to locate distributions. - - The main purpose of this class is to memoize found distributions' names, so - only one distribution is returned for each package name. At lot of pip code - assumes this (because it is setuptools's behavior), and not doing the same - can potentially cause a distribution in lower precedence path to override a - higher precedence one if the caller is not careful. - - Eventually we probably want to make it possible to see lower precedence - installations as well. It's useful feature, after all. - """ - - FoundResult = Tuple[importlib.metadata.Distribution, Optional[BasePath]] - - def __init__(self) -> None: - self._found_names: Set[NormalizedName] = set() - - def _find_impl(self, location: str) -> Iterator[FoundResult]: - """Find distributions in a location.""" - # Skip looking inside a wheel. Since a package inside a wheel is not - # always valid (due to .data directories etc.), its .dist-info entry - # should not be considered an installed distribution. - if _looks_like_wheel(location): - return - # To know exactly where we find a distribution, we have to feed in the - # paths one by one, instead of dumping the list to importlib.metadata. - for dist in importlib.metadata.distributions(path=[location]): - info_location = get_info_location(dist) - try: - name = get_dist_canonical_name(dist) - except BadMetadata as e: - logger.warning("Skipping %s due to %s", info_location, e.reason) - continue - if name in self._found_names: - continue - self._found_names.add(name) - yield dist, info_location - - def find(self, location: str) -> Iterator[BaseDistribution]: - """Find distributions in a location. - - The path can be either a directory, or a ZIP archive. - """ - for dist, info_location in self._find_impl(location): - if info_location is None: - installed_location: Optional[BasePath] = None - else: - installed_location = info_location.parent - yield Distribution(dist, info_location, installed_location) - - def find_linked(self, location: str) -> Iterator[BaseDistribution]: - """Read location in egg-link files and return distributions in there. - - The path should be a directory; otherwise this returns nothing. This - follows how setuptools does this for compatibility. The first non-empty - line in the egg-link is read as a path (resolved against the egg-link's - containing directory if relative). Distributions found at that linked - location are returned. - """ - path = pathlib.Path(location) - if not path.is_dir(): - return - for child in path.iterdir(): - if child.suffix != ".egg-link": - continue - with child.open() as f: - lines = (line.strip() for line in f) - target_rel = next((line for line in lines if line), "") - if not target_rel: - continue - target_location = str(path.joinpath(target_rel)) - for dist, info_location in self._find_impl(target_location): - yield Distribution(dist, info_location, path) - - def _find_eggs_in_dir(self, location: str) -> Iterator[BaseDistribution]: - from pip._vendor.pkg_resources import find_distributions - - from pip._internal.metadata import pkg_resources as legacy - - with os.scandir(location) as it: - for entry in it: - if not entry.name.endswith(".egg"): - continue - for dist in find_distributions(entry.path): - yield legacy.Distribution(dist) - - def _find_eggs_in_zip(self, location: str) -> Iterator[BaseDistribution]: - from pip._vendor.pkg_resources import find_eggs_in_zip - - from pip._internal.metadata import pkg_resources as legacy - - try: - importer = zipimport.zipimporter(location) - except zipimport.ZipImportError: - return - for dist in find_eggs_in_zip(importer, location): - yield legacy.Distribution(dist) - - def find_eggs(self, location: str) -> Iterator[BaseDistribution]: - """Find eggs in a location. - - This actually uses the old *pkg_resources* backend. We likely want to - deprecate this so we can eventually remove the *pkg_resources* - dependency entirely. Before that, this should first emit a deprecation - warning for some versions when using the fallback since importing - *pkg_resources* is slow for those who don't need it. - """ - if os.path.isdir(location): - yield from self._find_eggs_in_dir(location) - if zipfile.is_zipfile(location): - yield from self._find_eggs_in_zip(location) - - -@functools.lru_cache(maxsize=None) # Warn a distribution exactly once. -def _emit_egg_deprecation(location: Optional[str]) -> None: - deprecated( - reason=f"Loading egg at {location} is deprecated.", - replacement="to use pip for package installation", - gone_in="25.1", - issue=12330, - ) - - -class Environment(BaseEnvironment): - def __init__(self, paths: Sequence[str]) -> None: - self._paths = paths - - @classmethod - def default(cls) -> BaseEnvironment: - return cls(sys.path) - - @classmethod - def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: - if paths is None: - return cls(sys.path) - return cls(paths) - - def _iter_distributions(self) -> Iterator[BaseDistribution]: - finder = _DistributionFinder() - for location in self._paths: - yield from finder.find(location) - for dist in finder.find_eggs(location): - _emit_egg_deprecation(dist.location) - yield dist - # This must go last because that's how pkg_resources tie-breaks. - yield from finder.find_linked(location) - - def get_distribution(self, name: str) -> Optional[BaseDistribution]: - canonical_name = canonicalize_name(name) - matches = ( - distribution - for distribution in self.iter_all_distributions() - if distribution.canonical_name == canonical_name - ) - return next(matches, None) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py b/myenv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py deleted file mode 100644 index 4ea84f9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py +++ /dev/null @@ -1,301 +0,0 @@ -import email.message -import email.parser -import logging -import os -import zipfile -from typing import ( - Collection, - Iterable, - Iterator, - List, - Mapping, - NamedTuple, - Optional, -) - -from pip._vendor import pkg_resources -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel -from pip._internal.utils.egg_link import egg_link_path_from_location -from pip._internal.utils.misc import display_path, normalize_path -from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file - -from .base import ( - BaseDistribution, - BaseEntryPoint, - BaseEnvironment, - InfoPath, - Wheel, -) - -__all__ = ["NAME", "Distribution", "Environment"] - -logger = logging.getLogger(__name__) - -NAME = "pkg_resources" - - -class EntryPoint(NamedTuple): - name: str - value: str - group: str - - -class InMemoryMetadata: - """IMetadataProvider that reads metadata files from a dictionary. - - This also maps metadata decoding exceptions to our internal exception type. - """ - - def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None: - self._metadata = metadata - self._wheel_name = wheel_name - - def has_metadata(self, name: str) -> bool: - return name in self._metadata - - def get_metadata(self, name: str) -> str: - try: - return self._metadata[name].decode() - except UnicodeDecodeError as e: - # Augment the default error with the origin of the file. - raise UnsupportedWheel( - f"Error decoding metadata for {self._wheel_name}: {e} in {name} file" - ) - - def get_metadata_lines(self, name: str) -> Iterable[str]: - return pkg_resources.yield_lines(self.get_metadata(name)) - - def metadata_isdir(self, name: str) -> bool: - return False - - def metadata_listdir(self, name: str) -> List[str]: - return [] - - def run_script(self, script_name: str, namespace: str) -> None: - pass - - -class Distribution(BaseDistribution): - def __init__(self, dist: pkg_resources.Distribution) -> None: - self._dist = dist - # This is populated lazily, to avoid loading metadata for all possible - # distributions eagerly. - self.__extra_mapping: Optional[Mapping[NormalizedName, str]] = None - - @property - def _extra_mapping(self) -> Mapping[NormalizedName, str]: - if self.__extra_mapping is None: - self.__extra_mapping = { - canonicalize_name(extra): extra for extra in self._dist.extras - } - - return self.__extra_mapping - - @classmethod - def from_directory(cls, directory: str) -> BaseDistribution: - dist_dir = directory.rstrip(os.sep) - - # Build a PathMetadata object, from path to metadata. :wink: - base_dir, dist_dir_name = os.path.split(dist_dir) - metadata = pkg_resources.PathMetadata(base_dir, dist_dir) - - # Determine the correct Distribution object type. - if dist_dir.endswith(".egg-info"): - dist_cls = pkg_resources.Distribution - dist_name = os.path.splitext(dist_dir_name)[0] - else: - assert dist_dir.endswith(".dist-info") - dist_cls = pkg_resources.DistInfoDistribution - dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0] - - dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata) - return cls(dist) - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> BaseDistribution: - metadata_dict = { - "METADATA": metadata_contents, - } - dist = pkg_resources.DistInfoDistribution( - location=filename, - metadata=InMemoryMetadata(metadata_dict, filename), - project_name=project_name, - ) - return cls(dist) - - @classmethod - def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: - try: - with wheel.as_zipfile() as zf: - info_dir, _ = parse_wheel(zf, name) - metadata_dict = { - path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path) - for path in zf.namelist() - if path.startswith(f"{info_dir}/") - } - except zipfile.BadZipFile as e: - raise InvalidWheel(wheel.location, name) from e - except UnsupportedWheel as e: - raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") - dist = pkg_resources.DistInfoDistribution( - location=wheel.location, - metadata=InMemoryMetadata(metadata_dict, wheel.location), - project_name=name, - ) - return cls(dist) - - @property - def location(self) -> Optional[str]: - return self._dist.location - - @property - def installed_location(self) -> Optional[str]: - egg_link = egg_link_path_from_location(self.raw_name) - if egg_link: - location = egg_link - elif self.location: - location = self.location - else: - return None - return normalize_path(location) - - @property - def info_location(self) -> Optional[str]: - return self._dist.egg_info - - @property - def installed_by_distutils(self) -> bool: - # A distutils-installed distribution is provided by FileMetadata. This - # provider has a "path" attribute not present anywhere else. Not the - # best introspection logic, but pip has been doing this for a long time. - try: - return bool(self._dist._provider.path) - except AttributeError: - return False - - @property - def canonical_name(self) -> NormalizedName: - return canonicalize_name(self._dist.project_name) - - @property - def version(self) -> Version: - return parse_version(self._dist.version) - - @property - def raw_version(self) -> str: - return self._dist.version - - def is_file(self, path: InfoPath) -> bool: - return self._dist.has_metadata(str(path)) - - def iter_distutils_script_names(self) -> Iterator[str]: - yield from self._dist.metadata_listdir("scripts") - - def read_text(self, path: InfoPath) -> str: - name = str(path) - if not self._dist.has_metadata(name): - raise FileNotFoundError(name) - content = self._dist.get_metadata(name) - if content is None: - raise NoneMetadataError(self, name) - return content - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - for group, entries in self._dist.get_entry_map().items(): - for name, entry_point in entries.items(): - name, _, value = str(entry_point).partition("=") - yield EntryPoint(name=name.strip(), value=value.strip(), group=group) - - def _metadata_impl(self) -> email.message.Message: - """ - :raises NoneMetadataError: if the distribution reports `has_metadata()` - True but `get_metadata()` returns None. - """ - if isinstance(self._dist, pkg_resources.DistInfoDistribution): - metadata_name = "METADATA" - else: - metadata_name = "PKG-INFO" - try: - metadata = self.read_text(metadata_name) - except FileNotFoundError: - if self.location: - displaying_path = display_path(self.location) - else: - displaying_path = repr(self.location) - logger.warning("No metadata found in %s", displaying_path) - metadata = "" - feed_parser = email.parser.FeedParser() - feed_parser.feed(metadata) - return feed_parser.close() - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - if extras: - relevant_extras = set(self._extra_mapping) & set( - map(canonicalize_name, extras) - ) - extras = [self._extra_mapping[extra] for extra in relevant_extras] - return self._dist.requires(extras) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - return self._extra_mapping.keys() - - -class Environment(BaseEnvironment): - def __init__(self, ws: pkg_resources.WorkingSet) -> None: - self._ws = ws - - @classmethod - def default(cls) -> BaseEnvironment: - return cls(pkg_resources.working_set) - - @classmethod - def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: - return cls(pkg_resources.WorkingSet(paths)) - - def _iter_distributions(self) -> Iterator[BaseDistribution]: - for dist in self._ws: - yield Distribution(dist) - - def _search_distribution(self, name: str) -> Optional[BaseDistribution]: - """Find a distribution matching the ``name`` in the environment. - - This searches from *all* distributions available in the environment, to - match the behavior of ``pkg_resources.get_distribution()``. - """ - canonical_name = canonicalize_name(name) - for dist in self.iter_all_distributions(): - if dist.canonical_name == canonical_name: - return dist - return None - - def get_distribution(self, name: str) -> Optional[BaseDistribution]: - # Search the distribution by looking through the working set. - dist = self._search_distribution(name) - if dist: - return dist - - # If distribution could not be found, call working_set.require to - # update the working set, and try to find the distribution again. - # This might happen for e.g. when you install a package twice, once - # using setup.py develop and again using setup.py install. Now when - # running pip uninstall twice, the package gets removed from the - # working set in the first uninstall, so we have to populate the - # working set again so that pip knows about it and the packages gets - # picked up and is successfully uninstalled the second time too. - try: - # We didn't pass in any version specifiers, so this can never - # raise pkg_resources.VersionConflict. - self._ws.require(name) - except pkg_resources.DistributionNotFound: - return None - return self._search_distribution(name) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/__init__.py deleted file mode 100644 index 7855226..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""A package that contains models that represent entities. -""" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c513c9b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc deleted file mode 100644 index db32edb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc deleted file mode 100644 index 55613e0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc deleted file mode 100644 index 9fb0572..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc deleted file mode 100644 index 8068b7a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc deleted file mode 100644 index 2687750..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc deleted file mode 100644 index faba61d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc deleted file mode 100644 index 8e8095a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc deleted file mode 100644 index 3fb8558..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc deleted file mode 100644 index d1de32e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc deleted file mode 100644 index 389ed5f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index cf336dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/candidate.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/candidate.py deleted file mode 100644 index f27f283..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/candidate.py +++ /dev/null @@ -1,25 +0,0 @@ -from dataclasses import dataclass - -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.models.link import Link - - -@dataclass(frozen=True) -class InstallationCandidate: - """Represents a potential "candidate" for installation.""" - - __slots__ = ["name", "version", "link"] - - name: str - version: Version - link: Link - - def __init__(self, name: str, version: str, link: Link) -> None: - object.__setattr__(self, "name", name) - object.__setattr__(self, "version", parse_version(version)) - object.__setattr__(self, "link", link) - - def __str__(self) -> str: - return f"{self.name!r} candidate (version {self.version} at {self.link})" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py deleted file mode 100644 index fc5ec8d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py +++ /dev/null @@ -1,224 +0,0 @@ -""" PEP 610 """ - -import json -import re -import urllib.parse -from dataclasses import dataclass -from typing import Any, ClassVar, Dict, Iterable, Optional, Type, TypeVar, Union - -__all__ = [ - "DirectUrl", - "DirectUrlValidationError", - "DirInfo", - "ArchiveInfo", - "VcsInfo", -] - -T = TypeVar("T") - -DIRECT_URL_METADATA_NAME = "direct_url.json" -ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$") - - -class DirectUrlValidationError(Exception): - pass - - -def _get( - d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None -) -> Optional[T]: - """Get value from dictionary and verify expected type.""" - if key not in d: - return default - value = d[key] - if not isinstance(value, expected_type): - raise DirectUrlValidationError( - f"{value!r} has unexpected type for {key} (expected {expected_type})" - ) - return value - - -def _get_required( - d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None -) -> T: - value = _get(d, expected_type, key, default) - if value is None: - raise DirectUrlValidationError(f"{key} must have a value") - return value - - -def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType": - infos = [info for info in infos if info is not None] - if not infos: - raise DirectUrlValidationError( - "missing one of archive_info, dir_info, vcs_info" - ) - if len(infos) > 1: - raise DirectUrlValidationError( - "more than one of archive_info, dir_info, vcs_info" - ) - assert infos[0] is not None - return infos[0] - - -def _filter_none(**kwargs: Any) -> Dict[str, Any]: - """Make dict excluding None values.""" - return {k: v for k, v in kwargs.items() if v is not None} - - -@dataclass -class VcsInfo: - name: ClassVar = "vcs_info" - - vcs: str - commit_id: str - requested_revision: Optional[str] = None - - @classmethod - def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]: - if d is None: - return None - return cls( - vcs=_get_required(d, str, "vcs"), - commit_id=_get_required(d, str, "commit_id"), - requested_revision=_get(d, str, "requested_revision"), - ) - - def _to_dict(self) -> Dict[str, Any]: - return _filter_none( - vcs=self.vcs, - requested_revision=self.requested_revision, - commit_id=self.commit_id, - ) - - -class ArchiveInfo: - name = "archive_info" - - def __init__( - self, - hash: Optional[str] = None, - hashes: Optional[Dict[str, str]] = None, - ) -> None: - # set hashes before hash, since the hash setter will further populate hashes - self.hashes = hashes - self.hash = hash - - @property - def hash(self) -> Optional[str]: - return self._hash - - @hash.setter - def hash(self, value: Optional[str]) -> None: - if value is not None: - # Auto-populate the hashes key to upgrade to the new format automatically. - # We don't back-populate the legacy hash key from hashes. - try: - hash_name, hash_value = value.split("=", 1) - except ValueError: - raise DirectUrlValidationError( - f"invalid archive_info.hash format: {value!r}" - ) - if self.hashes is None: - self.hashes = {hash_name: hash_value} - elif hash_name not in self.hashes: - self.hashes = self.hashes.copy() - self.hashes[hash_name] = hash_value - self._hash = value - - @classmethod - def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]: - if d is None: - return None - return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes")) - - def _to_dict(self) -> Dict[str, Any]: - return _filter_none(hash=self.hash, hashes=self.hashes) - - -@dataclass -class DirInfo: - name: ClassVar = "dir_info" - - editable: bool = False - - @classmethod - def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]: - if d is None: - return None - return cls(editable=_get_required(d, bool, "editable", default=False)) - - def _to_dict(self) -> Dict[str, Any]: - return _filter_none(editable=self.editable or None) - - -InfoType = Union[ArchiveInfo, DirInfo, VcsInfo] - - -@dataclass -class DirectUrl: - url: str - info: InfoType - subdirectory: Optional[str] = None - - def _remove_auth_from_netloc(self, netloc: str) -> str: - if "@" not in netloc: - return netloc - user_pass, netloc_no_user_pass = netloc.split("@", 1) - if ( - isinstance(self.info, VcsInfo) - and self.info.vcs == "git" - and user_pass == "git" - ): - return netloc - if ENV_VAR_RE.match(user_pass): - return netloc - return netloc_no_user_pass - - @property - def redacted_url(self) -> str: - """url with user:password part removed unless it is formed with - environment variables as specified in PEP 610, or it is ``git`` - in the case of a git URL. - """ - purl = urllib.parse.urlsplit(self.url) - netloc = self._remove_auth_from_netloc(purl.netloc) - surl = urllib.parse.urlunsplit( - (purl.scheme, netloc, purl.path, purl.query, purl.fragment) - ) - return surl - - def validate(self) -> None: - self.from_dict(self.to_dict()) - - @classmethod - def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl": - return DirectUrl( - url=_get_required(d, str, "url"), - subdirectory=_get(d, str, "subdirectory"), - info=_exactly_one_of( - [ - ArchiveInfo._from_dict(_get(d, dict, "archive_info")), - DirInfo._from_dict(_get(d, dict, "dir_info")), - VcsInfo._from_dict(_get(d, dict, "vcs_info")), - ] - ), - ) - - def to_dict(self) -> Dict[str, Any]: - res = _filter_none( - url=self.redacted_url, - subdirectory=self.subdirectory, - ) - res[self.info.name] = self.info._to_dict() - return res - - @classmethod - def from_json(cls, s: str) -> "DirectUrl": - return cls.from_dict(json.loads(s)) - - def to_json(self) -> str: - return json.dumps(self.to_dict(), sort_keys=True) - - def is_local_editable(self) -> bool: - return isinstance(self.info, DirInfo) and self.info.editable diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/format_control.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/format_control.py deleted file mode 100644 index ccd1127..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/format_control.py +++ /dev/null @@ -1,78 +0,0 @@ -from typing import FrozenSet, Optional, Set - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import CommandError - - -class FormatControl: - """Helper for managing formats from which a package can be installed.""" - - __slots__ = ["no_binary", "only_binary"] - - def __init__( - self, - no_binary: Optional[Set[str]] = None, - only_binary: Optional[Set[str]] = None, - ) -> None: - if no_binary is None: - no_binary = set() - if only_binary is None: - only_binary = set() - - self.no_binary = no_binary - self.only_binary = only_binary - - def __eq__(self, other: object) -> bool: - if not isinstance(other, self.__class__): - return NotImplemented - - if self.__slots__ != other.__slots__: - return False - - return all(getattr(self, k) == getattr(other, k) for k in self.__slots__) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.no_binary}, {self.only_binary})" - - @staticmethod - def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None: - if value.startswith("-"): - raise CommandError( - "--no-binary / --only-binary option requires 1 argument." - ) - new = value.split(",") - while ":all:" in new: - other.clear() - target.clear() - target.add(":all:") - del new[: new.index(":all:") + 1] - # Without a none, we want to discard everything as :all: covers it - if ":none:" not in new: - return - for name in new: - if name == ":none:": - target.clear() - continue - name = canonicalize_name(name) - other.discard(name) - target.add(name) - - def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]: - result = {"binary", "source"} - if canonical_name in self.only_binary: - result.discard("source") - elif canonical_name in self.no_binary: - result.discard("binary") - elif ":all:" in self.only_binary: - result.discard("source") - elif ":all:" in self.no_binary: - result.discard("binary") - return frozenset(result) - - def disallow_binaries(self) -> None: - self.handle_mutual_excludes( - ":all:", - self.no_binary, - self.only_binary, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/index.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/index.py deleted file mode 100644 index b94c325..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/index.py +++ /dev/null @@ -1,28 +0,0 @@ -import urllib.parse - - -class PackageIndex: - """Represents a Package Index and provides easier access to endpoints""" - - __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"] - - def __init__(self, url: str, file_storage_domain: str) -> None: - super().__init__() - self.url = url - self.netloc = urllib.parse.urlsplit(url).netloc - self.simple_url = self._url_for_path("simple") - self.pypi_url = self._url_for_path("pypi") - - # This is part of a temporary hack used to block installs of PyPI - # packages which depend on external urls only necessary until PyPI can - # block such packages themselves - self.file_storage_domain = file_storage_domain - - def _url_for_path(self, path: str) -> str: - return urllib.parse.urljoin(self.url, path) - - -PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org") -TestPyPI = PackageIndex( - "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org" -) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py deleted file mode 100644 index b9c6330..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py +++ /dev/null @@ -1,56 +0,0 @@ -from typing import Any, Dict, Sequence - -from pip._vendor.packaging.markers import default_environment - -from pip import __version__ -from pip._internal.req.req_install import InstallRequirement - - -class InstallationReport: - def __init__(self, install_requirements: Sequence[InstallRequirement]): - self._install_requirements = install_requirements - - @classmethod - def _install_req_to_dict(cls, ireq: InstallRequirement) -> Dict[str, Any]: - assert ireq.download_info, f"No download_info for {ireq}" - res = { - # PEP 610 json for the download URL. download_info.archive_info.hashes may - # be absent when the requirement was installed from the wheel cache - # and the cache entry was populated by an older pip version that did not - # record origin.json. - "download_info": ireq.download_info.to_dict(), - # is_direct is true if the requirement was a direct URL reference (which - # includes editable requirements), and false if the requirement was - # downloaded from a PEP 503 index or --find-links. - "is_direct": ireq.is_direct, - # is_yanked is true if the requirement was yanked from the index, but - # was still selected by pip to conform to PEP 592. - "is_yanked": ireq.link.is_yanked if ireq.link else False, - # requested is true if the requirement was specified by the user (aka - # top level requirement), and false if it was installed as a dependency of a - # requirement. https://peps.python.org/pep-0376/#requested - "requested": ireq.user_supplied, - # PEP 566 json encoding for metadata - # https://www.python.org/dev/peps/pep-0566/#json-compatible-metadata - "metadata": ireq.get_dist().metadata_dict, - } - if ireq.user_supplied and ireq.extras: - # For top level requirements, the list of requested extras, if any. - res["requested_extras"] = sorted(ireq.extras) - return res - - def to_dict(self) -> Dict[str, Any]: - return { - "version": "1", - "pip_version": __version__, - "install": [ - self._install_req_to_dict(ireq) for ireq in self._install_requirements - ], - # https://peps.python.org/pep-0508/#environment-markers - # TODO: currently, the resolver uses the default environment to evaluate - # environment markers, so that is what we report here. In the future, it - # should also take into account options such as --python-version or - # --platform, perhaps under the form of an environment_override field? - # https://github.com/pypa/pip/issues/11198 - "environment": default_environment(), - } diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/link.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/link.py deleted file mode 100644 index 27ad016..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/link.py +++ /dev/null @@ -1,604 +0,0 @@ -import functools -import itertools -import logging -import os -import posixpath -import re -import urllib.parse -from dataclasses import dataclass -from typing import ( - TYPE_CHECKING, - Any, - Dict, - List, - Mapping, - NamedTuple, - Optional, - Tuple, - Union, -) - -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.filetypes import WHEEL_EXTENSION -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.misc import ( - pairwise, - redact_auth_from_url, - split_auth_from_netloc, - splitext, -) -from pip._internal.utils.urls import path_to_url, url_to_path - -if TYPE_CHECKING: - from pip._internal.index.collector import IndexContent - -logger = logging.getLogger(__name__) - - -# Order matters, earlier hashes have a precedence over later hashes for what -# we will pick to use. -_SUPPORTED_HASHES = ("sha512", "sha384", "sha256", "sha224", "sha1", "md5") - - -@dataclass(frozen=True) -class LinkHash: - """Links to content may have embedded hash values. This class parses those. - - `name` must be any member of `_SUPPORTED_HASHES`. - - This class can be converted to and from `ArchiveInfo`. While ArchiveInfo intends to - be JSON-serializable to conform to PEP 610, this class contains the logic for - parsing a hash name and value for correctness, and then checking whether that hash - conforms to a schema with `.is_hash_allowed()`.""" - - name: str - value: str - - _hash_url_fragment_re = re.compile( - # NB: we do not validate that the second group (.*) is a valid hex - # digest. Instead, we simply keep that string in this class, and then check it - # against Hashes when hash-checking is needed. This is easier to debug than - # proactively discarding an invalid hex digest, as we handle incorrect hashes - # and malformed hashes in the same place. - r"[#&]({choices})=([^&]*)".format( - choices="|".join(re.escape(hash_name) for hash_name in _SUPPORTED_HASHES) - ), - ) - - def __post_init__(self) -> None: - assert self.name in _SUPPORTED_HASHES - - @classmethod - @functools.lru_cache(maxsize=None) - def find_hash_url_fragment(cls, url: str) -> Optional["LinkHash"]: - """Search a string for a checksum algorithm name and encoded output value.""" - match = cls._hash_url_fragment_re.search(url) - if match is None: - return None - name, value = match.groups() - return cls(name=name, value=value) - - def as_dict(self) -> Dict[str, str]: - return {self.name: self.value} - - def as_hashes(self) -> Hashes: - """Return a Hashes instance which checks only for the current hash.""" - return Hashes({self.name: [self.value]}) - - def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: - """ - Return True if the current hash is allowed by `hashes`. - """ - if hashes is None: - return False - return hashes.is_hash_allowed(self.name, hex_digest=self.value) - - -@dataclass(frozen=True) -class MetadataFile: - """Information about a core metadata file associated with a distribution.""" - - hashes: Optional[Dict[str, str]] - - def __post_init__(self) -> None: - if self.hashes is not None: - assert all(name in _SUPPORTED_HASHES for name in self.hashes) - - -def supported_hashes(hashes: Optional[Dict[str, str]]) -> Optional[Dict[str, str]]: - # Remove any unsupported hash types from the mapping. If this leaves no - # supported hashes, return None - if hashes is None: - return None - hashes = {n: v for n, v in hashes.items() if n in _SUPPORTED_HASHES} - if not hashes: - return None - return hashes - - -def _clean_url_path_part(part: str) -> str: - """ - Clean a "part" of a URL path (i.e. after splitting on "@" characters). - """ - # We unquote prior to quoting to make sure nothing is double quoted. - return urllib.parse.quote(urllib.parse.unquote(part)) - - -def _clean_file_url_path(part: str) -> str: - """ - Clean the first part of a URL path that corresponds to a local - filesystem path (i.e. the first part after splitting on "@" characters). - """ - # We unquote prior to quoting to make sure nothing is double quoted. - # Also, on Windows the path part might contain a drive letter which - # should not be quoted. On Linux where drive letters do not - # exist, the colon should be quoted. We rely on urllib.request - # to do the right thing here. - return urllib.request.pathname2url(urllib.request.url2pathname(part)) - - -# percent-encoded: / -_reserved_chars_re = re.compile("(@|%2F)", re.IGNORECASE) - - -def _clean_url_path(path: str, is_local_path: bool) -> str: - """ - Clean the path portion of a URL. - """ - if is_local_path: - clean_func = _clean_file_url_path - else: - clean_func = _clean_url_path_part - - # Split on the reserved characters prior to cleaning so that - # revision strings in VCS URLs are properly preserved. - parts = _reserved_chars_re.split(path) - - cleaned_parts = [] - for to_clean, reserved in pairwise(itertools.chain(parts, [""])): - cleaned_parts.append(clean_func(to_clean)) - # Normalize %xx escapes (e.g. %2f -> %2F) - cleaned_parts.append(reserved.upper()) - - return "".join(cleaned_parts) - - -def _ensure_quoted_url(url: str) -> str: - """ - Make sure a link is fully quoted. - For example, if ' ' occurs in the URL, it will be replaced with "%20", - and without double-quoting other characters. - """ - # Split the URL into parts according to the general structure - # `scheme://netloc/path?query#fragment`. - result = urllib.parse.urlsplit(url) - # If the netloc is empty, then the URL refers to a local filesystem path. - is_local_path = not result.netloc - path = _clean_url_path(result.path, is_local_path=is_local_path) - return urllib.parse.urlunsplit(result._replace(path=path)) - - -def _absolute_link_url(base_url: str, url: str) -> str: - """ - A faster implementation of urllib.parse.urljoin with a shortcut - for absolute http/https URLs. - """ - if url.startswith(("https://", "http://")): - return url - else: - return urllib.parse.urljoin(base_url, url) - - -@functools.total_ordering -class Link: - """Represents a parsed link from a Package Index's simple URL""" - - __slots__ = [ - "_parsed_url", - "_url", - "_path", - "_hashes", - "comes_from", - "requires_python", - "yanked_reason", - "metadata_file_data", - "cache_link_parsing", - "egg_fragment", - ] - - def __init__( - self, - url: str, - comes_from: Optional[Union[str, "IndexContent"]] = None, - requires_python: Optional[str] = None, - yanked_reason: Optional[str] = None, - metadata_file_data: Optional[MetadataFile] = None, - cache_link_parsing: bool = True, - hashes: Optional[Mapping[str, str]] = None, - ) -> None: - """ - :param url: url of the resource pointed to (href of the link) - :param comes_from: instance of IndexContent where the link was found, - or string. - :param requires_python: String containing the `Requires-Python` - metadata field, specified in PEP 345. This may be specified by - a data-requires-python attribute in the HTML link tag, as - described in PEP 503. - :param yanked_reason: the reason the file has been yanked, if the - file has been yanked, or None if the file hasn't been yanked. - This is the value of the "data-yanked" attribute, if present, in - a simple repository HTML link. If the file has been yanked but - no reason was provided, this should be the empty string. See - PEP 592 for more information and the specification. - :param metadata_file_data: the metadata attached to the file, or None if - no such metadata is provided. This argument, if not None, indicates - that a separate metadata file exists, and also optionally supplies - hashes for that file. - :param cache_link_parsing: A flag that is used elsewhere to determine - whether resources retrieved from this link should be cached. PyPI - URLs should generally have this set to False, for example. - :param hashes: A mapping of hash names to digests to allow us to - determine the validity of a download. - """ - - # The comes_from, requires_python, and metadata_file_data arguments are - # only used by classmethods of this class, and are not used in client - # code directly. - - # url can be a UNC windows share - if url.startswith("\\\\"): - url = path_to_url(url) - - self._parsed_url = urllib.parse.urlsplit(url) - # Store the url as a private attribute to prevent accidentally - # trying to set a new value. - self._url = url - # The .path property is hot, so calculate its value ahead of time. - self._path = urllib.parse.unquote(self._parsed_url.path) - - link_hash = LinkHash.find_hash_url_fragment(url) - hashes_from_link = {} if link_hash is None else link_hash.as_dict() - if hashes is None: - self._hashes = hashes_from_link - else: - self._hashes = {**hashes, **hashes_from_link} - - self.comes_from = comes_from - self.requires_python = requires_python if requires_python else None - self.yanked_reason = yanked_reason - self.metadata_file_data = metadata_file_data - - self.cache_link_parsing = cache_link_parsing - self.egg_fragment = self._egg_fragment() - - @classmethod - def from_json( - cls, - file_data: Dict[str, Any], - page_url: str, - ) -> Optional["Link"]: - """ - Convert an pypi json document from a simple repository page into a Link. - """ - file_url = file_data.get("url") - if file_url is None: - return None - - url = _ensure_quoted_url(_absolute_link_url(page_url, file_url)) - pyrequire = file_data.get("requires-python") - yanked_reason = file_data.get("yanked") - hashes = file_data.get("hashes", {}) - - # PEP 714: Indexes must use the name core-metadata, but - # clients should support the old name as a fallback for compatibility. - metadata_info = file_data.get("core-metadata") - if metadata_info is None: - metadata_info = file_data.get("dist-info-metadata") - - # The metadata info value may be a boolean, or a dict of hashes. - if isinstance(metadata_info, dict): - # The file exists, and hashes have been supplied - metadata_file_data = MetadataFile(supported_hashes(metadata_info)) - elif metadata_info: - # The file exists, but there are no hashes - metadata_file_data = MetadataFile(None) - else: - # False or not present: the file does not exist - metadata_file_data = None - - # The Link.yanked_reason expects an empty string instead of a boolean. - if yanked_reason and not isinstance(yanked_reason, str): - yanked_reason = "" - # The Link.yanked_reason expects None instead of False. - elif not yanked_reason: - yanked_reason = None - - return cls( - url, - comes_from=page_url, - requires_python=pyrequire, - yanked_reason=yanked_reason, - hashes=hashes, - metadata_file_data=metadata_file_data, - ) - - @classmethod - def from_element( - cls, - anchor_attribs: Dict[str, Optional[str]], - page_url: str, - base_url: str, - ) -> Optional["Link"]: - """ - Convert an anchor element's attributes in a simple repository page to a Link. - """ - href = anchor_attribs.get("href") - if not href: - return None - - url = _ensure_quoted_url(_absolute_link_url(base_url, href)) - pyrequire = anchor_attribs.get("data-requires-python") - yanked_reason = anchor_attribs.get("data-yanked") - - # PEP 714: Indexes must use the name data-core-metadata, but - # clients should support the old name as a fallback for compatibility. - metadata_info = anchor_attribs.get("data-core-metadata") - if metadata_info is None: - metadata_info = anchor_attribs.get("data-dist-info-metadata") - # The metadata info value may be the string "true", or a string of - # the form "hashname=hashval" - if metadata_info == "true": - # The file exists, but there are no hashes - metadata_file_data = MetadataFile(None) - elif metadata_info is None: - # The file does not exist - metadata_file_data = None - else: - # The file exists, and hashes have been supplied - hashname, sep, hashval = metadata_info.partition("=") - if sep == "=": - metadata_file_data = MetadataFile(supported_hashes({hashname: hashval})) - else: - # Error - data is wrong. Treat as no hashes supplied. - logger.debug( - "Index returned invalid data-dist-info-metadata value: %s", - metadata_info, - ) - metadata_file_data = MetadataFile(None) - - return cls( - url, - comes_from=page_url, - requires_python=pyrequire, - yanked_reason=yanked_reason, - metadata_file_data=metadata_file_data, - ) - - def __str__(self) -> str: - if self.requires_python: - rp = f" (requires-python:{self.requires_python})" - else: - rp = "" - if self.comes_from: - return f"{redact_auth_from_url(self._url)} (from {self.comes_from}){rp}" - else: - return redact_auth_from_url(str(self._url)) - - def __repr__(self) -> str: - return f"" - - def __hash__(self) -> int: - return hash(self.url) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Link): - return NotImplemented - return self.url == other.url - - def __lt__(self, other: Any) -> bool: - if not isinstance(other, Link): - return NotImplemented - return self.url < other.url - - @property - def url(self) -> str: - return self._url - - @property - def filename(self) -> str: - path = self.path.rstrip("/") - name = posixpath.basename(path) - if not name: - # Make sure we don't leak auth information if the netloc - # includes a username and password. - netloc, user_pass = split_auth_from_netloc(self.netloc) - return netloc - - name = urllib.parse.unquote(name) - assert name, f"URL {self._url!r} produced no filename" - return name - - @property - def file_path(self) -> str: - return url_to_path(self.url) - - @property - def scheme(self) -> str: - return self._parsed_url.scheme - - @property - def netloc(self) -> str: - """ - This can contain auth information. - """ - return self._parsed_url.netloc - - @property - def path(self) -> str: - return self._path - - def splitext(self) -> Tuple[str, str]: - return splitext(posixpath.basename(self.path.rstrip("/"))) - - @property - def ext(self) -> str: - return self.splitext()[1] - - @property - def url_without_fragment(self) -> str: - scheme, netloc, path, query, fragment = self._parsed_url - return urllib.parse.urlunsplit((scheme, netloc, path, query, "")) - - _egg_fragment_re = re.compile(r"[#&]egg=([^&]*)") - - # Per PEP 508. - _project_name_re = re.compile( - r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE - ) - - def _egg_fragment(self) -> Optional[str]: - match = self._egg_fragment_re.search(self._url) - if not match: - return None - - # An egg fragment looks like a PEP 508 project name, along with - # an optional extras specifier. Anything else is invalid. - project_name = match.group(1) - if not self._project_name_re.match(project_name): - deprecated( - reason=f"{self} contains an egg fragment with a non-PEP 508 name.", - replacement="to use the req @ url syntax, and remove the egg fragment", - gone_in="25.1", - issue=13157, - ) - - return project_name - - _subdirectory_fragment_re = re.compile(r"[#&]subdirectory=([^&]*)") - - @property - def subdirectory_fragment(self) -> Optional[str]: - match = self._subdirectory_fragment_re.search(self._url) - if not match: - return None - return match.group(1) - - def metadata_link(self) -> Optional["Link"]: - """Return a link to the associated core metadata file (if any).""" - if self.metadata_file_data is None: - return None - metadata_url = f"{self.url_without_fragment}.metadata" - if self.metadata_file_data.hashes is None: - return Link(metadata_url) - return Link(metadata_url, hashes=self.metadata_file_data.hashes) - - def as_hashes(self) -> Hashes: - return Hashes({k: [v] for k, v in self._hashes.items()}) - - @property - def hash(self) -> Optional[str]: - return next(iter(self._hashes.values()), None) - - @property - def hash_name(self) -> Optional[str]: - return next(iter(self._hashes), None) - - @property - def show_url(self) -> str: - return posixpath.basename(self._url.split("#", 1)[0].split("?", 1)[0]) - - @property - def is_file(self) -> bool: - return self.scheme == "file" - - def is_existing_dir(self) -> bool: - return self.is_file and os.path.isdir(self.file_path) - - @property - def is_wheel(self) -> bool: - return self.ext == WHEEL_EXTENSION - - @property - def is_vcs(self) -> bool: - from pip._internal.vcs import vcs - - return self.scheme in vcs.all_schemes - - @property - def is_yanked(self) -> bool: - return self.yanked_reason is not None - - @property - def has_hash(self) -> bool: - return bool(self._hashes) - - def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: - """ - Return True if the link has a hash and it is allowed by `hashes`. - """ - if hashes is None: - return False - return any(hashes.is_hash_allowed(k, v) for k, v in self._hashes.items()) - - -class _CleanResult(NamedTuple): - """Convert link for equivalency check. - - This is used in the resolver to check whether two URL-specified requirements - likely point to the same distribution and can be considered equivalent. This - equivalency logic avoids comparing URLs literally, which can be too strict - (e.g. "a=1&b=2" vs "b=2&a=1") and produce conflicts unexpecting to users. - - Currently this does three things: - - 1. Drop the basic auth part. This is technically wrong since a server can - serve different content based on auth, but if it does that, it is even - impossible to guarantee two URLs without auth are equivalent, since - the user can input different auth information when prompted. So the - practical solution is to assume the auth doesn't affect the response. - 2. Parse the query to avoid the ordering issue. Note that ordering under the - same key in the query are NOT cleaned; i.e. "a=1&a=2" and "a=2&a=1" are - still considered different. - 3. Explicitly drop most of the fragment part, except ``subdirectory=`` and - hash values, since it should have no impact the downloaded content. Note - that this drops the "egg=" part historically used to denote the requested - project (and extras), which is wrong in the strictest sense, but too many - people are supplying it inconsistently to cause superfluous resolution - conflicts, so we choose to also ignore them. - """ - - parsed: urllib.parse.SplitResult - query: Dict[str, List[str]] - subdirectory: str - hashes: Dict[str, str] - - -def _clean_link(link: Link) -> _CleanResult: - parsed = link._parsed_url - netloc = parsed.netloc.rsplit("@", 1)[-1] - # According to RFC 8089, an empty host in file: means localhost. - if parsed.scheme == "file" and not netloc: - netloc = "localhost" - fragment = urllib.parse.parse_qs(parsed.fragment) - if "egg" in fragment: - logger.debug("Ignoring egg= fragment in %s", link) - try: - # If there are multiple subdirectory values, use the first one. - # This matches the behavior of Link.subdirectory_fragment. - subdirectory = fragment["subdirectory"][0] - except (IndexError, KeyError): - subdirectory = "" - # If there are multiple hash values under the same algorithm, use the - # first one. This matches the behavior of Link.hash_value. - hashes = {k: fragment[k][0] for k in _SUPPORTED_HASHES if k in fragment} - return _CleanResult( - parsed=parsed._replace(netloc=netloc, query="", fragment=""), - query=urllib.parse.parse_qs(parsed.query), - subdirectory=subdirectory, - hashes=hashes, - ) - - -@functools.lru_cache(maxsize=None) -def links_equivalent(link1: Link, link2: Link) -> bool: - return _clean_link(link1) == _clean_link(link2) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/scheme.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/scheme.py deleted file mode 100644 index 06a9a55..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/scheme.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -For types associated with installation schemes. - -For a general overview of available schemes and their context, see -https://docs.python.org/3/install/index.html#alternate-installation. -""" - -from dataclasses import dataclass - -SCHEME_KEYS = ["platlib", "purelib", "headers", "scripts", "data"] - - -@dataclass(frozen=True) -class Scheme: - """A Scheme holds paths which are used as the base directories for - artifacts associated with a Python package. - """ - - __slots__ = SCHEME_KEYS - - platlib: str - purelib: str - headers: str - scripts: str - data: str diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py deleted file mode 100644 index ee7bc86..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py +++ /dev/null @@ -1,127 +0,0 @@ -import itertools -import logging -import os -import posixpath -import urllib.parse -from dataclasses import dataclass -from typing import List - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.models.index import PyPI -from pip._internal.utils.compat import has_tls -from pip._internal.utils.misc import normalize_path, redact_auth_from_url - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class SearchScope: - """ - Encapsulates the locations that pip is configured to search. - """ - - __slots__ = ["find_links", "index_urls", "no_index"] - - find_links: List[str] - index_urls: List[str] - no_index: bool - - @classmethod - def create( - cls, - find_links: List[str], - index_urls: List[str], - no_index: bool, - ) -> "SearchScope": - """ - Create a SearchScope object after normalizing the `find_links`. - """ - # Build find_links. If an argument starts with ~, it may be - # a local file relative to a home directory. So try normalizing - # it and if it exists, use the normalized version. - # This is deliberately conservative - it might be fine just to - # blindly normalize anything starting with a ~... - built_find_links: List[str] = [] - for link in find_links: - if link.startswith("~"): - new_link = normalize_path(link) - if os.path.exists(new_link): - link = new_link - built_find_links.append(link) - - # If we don't have TLS enabled, then WARN if anyplace we're looking - # relies on TLS. - if not has_tls(): - for link in itertools.chain(index_urls, built_find_links): - parsed = urllib.parse.urlparse(link) - if parsed.scheme == "https": - logger.warning( - "pip is configured with locations that require " - "TLS/SSL, however the ssl module in Python is not " - "available." - ) - break - - return cls( - find_links=built_find_links, - index_urls=index_urls, - no_index=no_index, - ) - - def get_formatted_locations(self) -> str: - lines = [] - redacted_index_urls = [] - if self.index_urls and self.index_urls != [PyPI.simple_url]: - for url in self.index_urls: - redacted_index_url = redact_auth_from_url(url) - - # Parse the URL - purl = urllib.parse.urlsplit(redacted_index_url) - - # URL is generally invalid if scheme and netloc is missing - # there are issues with Python and URL parsing, so this test - # is a bit crude. See bpo-20271, bpo-23505. Python doesn't - # always parse invalid URLs correctly - it should raise - # exceptions for malformed URLs - if not purl.scheme and not purl.netloc: - logger.warning( - 'The index url "%s" seems invalid, please provide a scheme.', - redacted_index_url, - ) - - redacted_index_urls.append(redacted_index_url) - - lines.append( - "Looking in indexes: {}".format(", ".join(redacted_index_urls)) - ) - - if self.find_links: - lines.append( - "Looking in links: {}".format( - ", ".join(redact_auth_from_url(url) for url in self.find_links) - ) - ) - return "\n".join(lines) - - def get_index_urls_locations(self, project_name: str) -> List[str]: - """Returns the locations found via self.index_urls - - Checks the url_name on the main (first in the list) index and - use this url_name to produce all locations - """ - - def mkurl_pypi_url(url: str) -> str: - loc = posixpath.join( - url, urllib.parse.quote(canonicalize_name(project_name)) - ) - # For maximum compatibility with easy_install, ensure the path - # ends in a trailing slash. Although this isn't in the spec - # (and PyPI can handle it without the slash) some other index - # implementations might break if they relied on easy_install's - # behavior. - if not loc.endswith("/"): - loc = loc + "/" - return loc - - return [mkurl_pypi_url(url) for url in self.index_urls] diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py deleted file mode 100644 index e9b50aa..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py +++ /dev/null @@ -1,53 +0,0 @@ -from typing import Optional - -from pip._internal.models.format_control import FormatControl - - -# TODO: This needs Python 3.10's improved slots support for dataclasses -# to be converted into a dataclass. -class SelectionPreferences: - """ - Encapsulates the candidate selection preferences for downloading - and installing files. - """ - - __slots__ = [ - "allow_yanked", - "allow_all_prereleases", - "format_control", - "prefer_binary", - "ignore_requires_python", - ] - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - def __init__( - self, - allow_yanked: bool, - allow_all_prereleases: bool = False, - format_control: Optional[FormatControl] = None, - prefer_binary: bool = False, - ignore_requires_python: Optional[bool] = None, - ) -> None: - """Create a SelectionPreferences object. - - :param allow_yanked: Whether files marked as yanked (in the sense - of PEP 592) are permitted to be candidates for install. - :param format_control: A FormatControl object or None. Used to control - the selection of source packages / binary packages when consulting - the index and links. - :param prefer_binary: Whether to prefer an old, but valid, binary - dist over a new source dist. - :param ignore_requires_python: Whether to ignore incompatible - "Requires-Python" values in links. Defaults to False. - """ - if ignore_requires_python is None: - ignore_requires_python = False - - self.allow_yanked = allow_yanked - self.allow_all_prereleases = allow_all_prereleases - self.format_control = format_control - self.prefer_binary = prefer_binary - self.ignore_requires_python = ignore_requires_python diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/target_python.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/target_python.py deleted file mode 100644 index 88925a9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/target_python.py +++ /dev/null @@ -1,121 +0,0 @@ -import sys -from typing import List, Optional, Set, Tuple - -from pip._vendor.packaging.tags import Tag - -from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot -from pip._internal.utils.misc import normalize_version_info - - -class TargetPython: - """ - Encapsulates the properties of a Python interpreter one is targeting - for a package install, download, etc. - """ - - __slots__ = [ - "_given_py_version_info", - "abis", - "implementation", - "platforms", - "py_version", - "py_version_info", - "_valid_tags", - "_valid_tags_set", - ] - - def __init__( - self, - platforms: Optional[List[str]] = None, - py_version_info: Optional[Tuple[int, ...]] = None, - abis: Optional[List[str]] = None, - implementation: Optional[str] = None, - ) -> None: - """ - :param platforms: A list of strings or None. If None, searches for - packages that are supported by the current system. Otherwise, will - find packages that can be built on the platforms passed in. These - packages will only be downloaded for distribution: they will - not be built locally. - :param py_version_info: An optional tuple of ints representing the - Python version information to use (e.g. `sys.version_info[:3]`). - This can have length 1, 2, or 3 when provided. - :param abis: A list of strings or None. This is passed to - compatibility_tags.py's get_supported() function as is. - :param implementation: A string or None. This is passed to - compatibility_tags.py's get_supported() function as is. - """ - # Store the given py_version_info for when we call get_supported(). - self._given_py_version_info = py_version_info - - if py_version_info is None: - py_version_info = sys.version_info[:3] - else: - py_version_info = normalize_version_info(py_version_info) - - py_version = ".".join(map(str, py_version_info[:2])) - - self.abis = abis - self.implementation = implementation - self.platforms = platforms - self.py_version = py_version - self.py_version_info = py_version_info - - # This is used to cache the return value of get_(un)sorted_tags. - self._valid_tags: Optional[List[Tag]] = None - self._valid_tags_set: Optional[Set[Tag]] = None - - def format_given(self) -> str: - """ - Format the given, non-None attributes for display. - """ - display_version = None - if self._given_py_version_info is not None: - display_version = ".".join( - str(part) for part in self._given_py_version_info - ) - - key_values = [ - ("platforms", self.platforms), - ("version_info", display_version), - ("abis", self.abis), - ("implementation", self.implementation), - ] - return " ".join( - f"{key}={value!r}" for key, value in key_values if value is not None - ) - - def get_sorted_tags(self) -> List[Tag]: - """ - Return the supported PEP 425 tags to check wheel candidates against. - - The tags are returned in order of preference (most preferred first). - """ - if self._valid_tags is None: - # Pass versions=None if no py_version_info was given since - # versions=None uses special default logic. - py_version_info = self._given_py_version_info - if py_version_info is None: - version = None - else: - version = version_info_to_nodot(py_version_info) - - tags = get_supported( - version=version, - platforms=self.platforms, - abis=self.abis, - impl=self.implementation, - ) - self._valid_tags = tags - - return self._valid_tags - - def get_unsorted_tags(self) -> Set[Tag]: - """Exactly the same as get_sorted_tags, but returns a set. - - This is important for performance. - """ - if self._valid_tags_set is None: - self._valid_tags_set = set(self.get_sorted_tags()) - - return self._valid_tags_set diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/models/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/models/wheel.py deleted file mode 100644 index ea85600..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/models/wheel.py +++ /dev/null @@ -1,118 +0,0 @@ -"""Represents a wheel file and provides access to the various parts of the -name that have meaning. -""" - -import re -from typing import Dict, Iterable, List - -from pip._vendor.packaging.tags import Tag -from pip._vendor.packaging.utils import ( - InvalidWheelFilename as PackagingInvalidWheelName, -) -from pip._vendor.packaging.utils import parse_wheel_filename - -from pip._internal.exceptions import InvalidWheelFilename -from pip._internal.utils.deprecation import deprecated - - -class Wheel: - """A wheel file""" - - wheel_file_re = re.compile( - r"""^(?P(?P[^\s-]+?)-(?P[^\s-]*?)) - ((-(?P\d[^-]*?))?-(?P[^\s-]+?)-(?P[^\s-]+?)-(?P[^\s-]+?) - \.whl|\.dist-info)$""", - re.VERBOSE, - ) - - def __init__(self, filename: str) -> None: - """ - :raises InvalidWheelFilename: when the filename is invalid for a wheel - """ - wheel_info = self.wheel_file_re.match(filename) - if not wheel_info: - raise InvalidWheelFilename(f"{filename} is not a valid wheel filename.") - self.filename = filename - self.name = wheel_info.group("name").replace("_", "-") - _version = wheel_info.group("ver") - if "_" in _version: - try: - parse_wheel_filename(filename) - except PackagingInvalidWheelName as e: - deprecated( - reason=( - f"Wheel filename {filename!r} is not correctly normalised. " - "Future versions of pip will raise the following error:\n" - f"{e.args[0]}\n\n" - ), - replacement=( - "to rename the wheel to use a correctly normalised " - "name (this may require updating the version in " - "the project metadata)" - ), - gone_in="25.1", - issue=12938, - ) - - _version = _version.replace("_", "-") - - self.version = _version - self.build_tag = wheel_info.group("build") - self.pyversions = wheel_info.group("pyver").split(".") - self.abis = wheel_info.group("abi").split(".") - self.plats = wheel_info.group("plat").split(".") - - # All the tag combinations from this file - self.file_tags = { - Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats - } - - def get_formatted_file_tags(self) -> List[str]: - """Return the wheel's tags as a sorted list of strings.""" - return sorted(str(tag) for tag in self.file_tags) - - def support_index_min(self, tags: List[Tag]) -> int: - """Return the lowest index that one of the wheel's file_tag combinations - achieves in the given list of supported tags. - - For example, if there are 8 supported tags and one of the file tags - is first in the list, then return 0. - - :param tags: the PEP 425 tags to check the wheel against, in order - with most preferred first. - - :raises ValueError: If none of the wheel's file tags match one of - the supported tags. - """ - try: - return next(i for i, t in enumerate(tags) if t in self.file_tags) - except StopIteration: - raise ValueError() - - def find_most_preferred_tag( - self, tags: List[Tag], tag_to_priority: Dict[Tag, int] - ) -> int: - """Return the priority of the most preferred tag that one of the wheel's file - tag combinations achieves in the given list of supported tags using the given - tag_to_priority mapping, where lower priorities are more-preferred. - - This is used in place of support_index_min in some cases in order to avoid - an expensive linear scan of a large list of tags. - - :param tags: the PEP 425 tags to check the wheel against. - :param tag_to_priority: a mapping from tag to priority of that tag, where - lower is more preferred. - - :raises ValueError: If none of the wheel's file tags match one of - the supported tags. - """ - return min( - tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority - ) - - def supported(self, tags: Iterable[Tag]) -> bool: - """Return whether the wheel is compatible with one of the given tags. - - :param tags: the PEP 425 tags to check the wheel against. - """ - return not self.file_tags.isdisjoint(tags) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/__init__.py deleted file mode 100644 index b51bde9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""Contains purely network-related utilities. -""" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5896c6d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc deleted file mode 100644 index 74742d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc deleted file mode 100644 index 7bfa22a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc deleted file mode 100644 index d0fc4e6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc deleted file mode 100644 index 77d9f32..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc deleted file mode 100644 index 914a75a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 0e345d4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc deleted file mode 100644 index 53eac08..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/auth.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/auth.py deleted file mode 100644 index 1a2606e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/auth.py +++ /dev/null @@ -1,566 +0,0 @@ -"""Network Authentication Helpers - -Contains interface (MultiDomainBasicAuth) and associated glue code for -providing credentials in the context of network requests. -""" - -import logging -import os -import shutil -import subprocess -import sysconfig -import typing -import urllib.parse -from abc import ABC, abstractmethod -from functools import lru_cache -from os.path import commonprefix -from pathlib import Path -from typing import Any, Dict, List, NamedTuple, Optional, Tuple - -from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth -from pip._vendor.requests.models import Request, Response -from pip._vendor.requests.utils import get_netrc_auth - -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ( - ask, - ask_input, - ask_password, - remove_auth_from_url, - split_auth_netloc_from_url, -) -from pip._internal.vcs.versioncontrol import AuthInfo - -logger = getLogger(__name__) - -KEYRING_DISABLED = False - - -class Credentials(NamedTuple): - url: str - username: str - password: str - - -class KeyRingBaseProvider(ABC): - """Keyring base provider interface""" - - has_keyring: bool - - @abstractmethod - def get_auth_info( - self, url: str, username: Optional[str] - ) -> Optional[AuthInfo]: ... - - @abstractmethod - def save_auth_info(self, url: str, username: str, password: str) -> None: ... - - -class KeyRingNullProvider(KeyRingBaseProvider): - """Keyring null provider""" - - has_keyring = False - - def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - return None - - -class KeyRingPythonProvider(KeyRingBaseProvider): - """Keyring interface which uses locally imported `keyring`""" - - has_keyring = True - - def __init__(self) -> None: - import keyring - - self.keyring = keyring - - def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: - # Support keyring's get_credential interface which supports getting - # credentials without a username. This is only available for - # keyring>=15.2.0. - if hasattr(self.keyring, "get_credential"): - logger.debug("Getting credentials from keyring for %s", url) - cred = self.keyring.get_credential(url, username) - if cred is not None: - return cred.username, cred.password - return None - - if username is not None: - logger.debug("Getting password from keyring for %s", url) - password = self.keyring.get_password(url, username) - if password: - return username, password - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - self.keyring.set_password(url, username, password) - - -class KeyRingCliProvider(KeyRingBaseProvider): - """Provider which uses `keyring` cli - - Instead of calling the keyring package installed alongside pip - we call keyring on the command line which will enable pip to - use which ever installation of keyring is available first in - PATH. - """ - - has_keyring = True - - def __init__(self, cmd: str) -> None: - self.keyring = cmd - - def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: - # This is the default implementation of keyring.get_credential - # https://github.com/jaraco/keyring/blob/97689324abcf01bd1793d49063e7ca01e03d7d07/keyring/backend.py#L134-L139 - if username is not None: - password = self._get_password(url, username) - if password is not None: - return username, password - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - return self._set_password(url, username, password) - - def _get_password(self, service_name: str, username: str) -> Optional[str]: - """Mirror the implementation of keyring.get_password using cli""" - if self.keyring is None: - return None - - cmd = [self.keyring, "get", service_name, username] - env = os.environ.copy() - env["PYTHONIOENCODING"] = "utf-8" - res = subprocess.run( - cmd, - stdin=subprocess.DEVNULL, - stdout=subprocess.PIPE, - env=env, - ) - if res.returncode: - return None - return res.stdout.decode("utf-8").strip(os.linesep) - - def _set_password(self, service_name: str, username: str, password: str) -> None: - """Mirror the implementation of keyring.set_password using cli""" - if self.keyring is None: - return None - env = os.environ.copy() - env["PYTHONIOENCODING"] = "utf-8" - subprocess.run( - [self.keyring, "set", service_name, username], - input=f"{password}{os.linesep}".encode(), - env=env, - check=True, - ) - return None - - -@lru_cache(maxsize=None) -def get_keyring_provider(provider: str) -> KeyRingBaseProvider: - logger.verbose("Keyring provider requested: %s", provider) - - # keyring has previously failed and been disabled - if KEYRING_DISABLED: - provider = "disabled" - if provider in ["import", "auto"]: - try: - impl = KeyRingPythonProvider() - logger.verbose("Keyring provider set: import") - return impl - except ImportError: - pass - except Exception as exc: - # In the event of an unexpected exception - # we should warn the user - msg = "Installed copy of keyring fails with exception %s" - if provider == "auto": - msg = msg + ", trying to find a keyring executable as a fallback" - logger.warning(msg, exc, exc_info=logger.isEnabledFor(logging.DEBUG)) - if provider in ["subprocess", "auto"]: - cli = shutil.which("keyring") - if cli and cli.startswith(sysconfig.get_path("scripts")): - # all code within this function is stolen from shutil.which implementation - @typing.no_type_check - def PATH_as_shutil_which_determines_it() -> str: - path = os.environ.get("PATH", None) - if path is None: - try: - path = os.confstr("CS_PATH") - except (AttributeError, ValueError): - # os.confstr() or CS_PATH is not available - path = os.defpath - # bpo-35755: Don't use os.defpath if the PATH environment variable is - # set to an empty string - - return path - - scripts = Path(sysconfig.get_path("scripts")) - - paths = [] - for path in PATH_as_shutil_which_determines_it().split(os.pathsep): - p = Path(path) - try: - if not p.samefile(scripts): - paths.append(path) - except FileNotFoundError: - pass - - path = os.pathsep.join(paths) - - cli = shutil.which("keyring", path=path) - - if cli: - logger.verbose("Keyring provider set: subprocess with executable %s", cli) - return KeyRingCliProvider(cli) - - logger.verbose("Keyring provider set: disabled") - return KeyRingNullProvider() - - -class MultiDomainBasicAuth(AuthBase): - def __init__( - self, - prompting: bool = True, - index_urls: Optional[List[str]] = None, - keyring_provider: str = "auto", - ) -> None: - self.prompting = prompting - self.index_urls = index_urls - self.keyring_provider = keyring_provider # type: ignore[assignment] - self.passwords: Dict[str, AuthInfo] = {} - # When the user is prompted to enter credentials and keyring is - # available, we will offer to save them. If the user accepts, - # this value is set to the credentials they entered. After the - # request authenticates, the caller should call - # ``save_credentials`` to save these. - self._credentials_to_save: Optional[Credentials] = None - - @property - def keyring_provider(self) -> KeyRingBaseProvider: - return get_keyring_provider(self._keyring_provider) - - @keyring_provider.setter - def keyring_provider(self, provider: str) -> None: - # The free function get_keyring_provider has been decorated with - # functools.cache. If an exception occurs in get_keyring_auth that - # cache will be cleared and keyring disabled, take that into account - # if you want to remove this indirection. - self._keyring_provider = provider - - @property - def use_keyring(self) -> bool: - # We won't use keyring when --no-input is passed unless - # a specific provider is requested because it might require - # user interaction - return self.prompting or self._keyring_provider not in ["auto", "disabled"] - - def _get_keyring_auth( - self, - url: Optional[str], - username: Optional[str], - ) -> Optional[AuthInfo]: - """Return the tuple auth for a given url from keyring.""" - # Do nothing if no url was provided - if not url: - return None - - try: - return self.keyring_provider.get_auth_info(url, username) - except Exception as exc: - # Log the full exception (with stacktrace) at debug, so it'll only - # show up when running in verbose mode. - logger.debug("Keyring is skipped due to an exception", exc_info=True) - # Always log a shortened version of the exception. - logger.warning( - "Keyring is skipped due to an exception: %s", - str(exc), - ) - global KEYRING_DISABLED - KEYRING_DISABLED = True - get_keyring_provider.cache_clear() - return None - - def _get_index_url(self, url: str) -> Optional[str]: - """Return the original index URL matching the requested URL. - - Cached or dynamically generated credentials may work against - the original index URL rather than just the netloc. - - The provided url should have had its username and password - removed already. If the original index url had credentials then - they will be included in the return value. - - Returns None if no matching index was found, or if --no-index - was specified by the user. - """ - if not url or not self.index_urls: - return None - - url = remove_auth_from_url(url).rstrip("/") + "/" - parsed_url = urllib.parse.urlsplit(url) - - candidates = [] - - for index in self.index_urls: - index = index.rstrip("/") + "/" - parsed_index = urllib.parse.urlsplit(remove_auth_from_url(index)) - if parsed_url == parsed_index: - return index - - if parsed_url.netloc != parsed_index.netloc: - continue - - candidate = urllib.parse.urlsplit(index) - candidates.append(candidate) - - if not candidates: - return None - - candidates.sort( - reverse=True, - key=lambda candidate: commonprefix( - [ - parsed_url.path, - candidate.path, - ] - ).rfind("/"), - ) - - return urllib.parse.urlunsplit(candidates[0]) - - def _get_new_credentials( - self, - original_url: str, - *, - allow_netrc: bool = True, - allow_keyring: bool = False, - ) -> AuthInfo: - """Find and return credentials for the specified URL.""" - # Split the credentials and netloc from the url. - url, netloc, url_user_password = split_auth_netloc_from_url( - original_url, - ) - - # Start with the credentials embedded in the url - username, password = url_user_password - if username is not None and password is not None: - logger.debug("Found credentials in url for %s", netloc) - return url_user_password - - # Find a matching index url for this request - index_url = self._get_index_url(url) - if index_url: - # Split the credentials from the url. - index_info = split_auth_netloc_from_url(index_url) - if index_info: - index_url, _, index_url_user_password = index_info - logger.debug("Found index url %s", index_url) - - # If an index URL was found, try its embedded credentials - if index_url and index_url_user_password[0] is not None: - username, password = index_url_user_password - if username is not None and password is not None: - logger.debug("Found credentials in index url for %s", netloc) - return index_url_user_password - - # Get creds from netrc if we still don't have them - if allow_netrc: - netrc_auth = get_netrc_auth(original_url) - if netrc_auth: - logger.debug("Found credentials in netrc for %s", netloc) - return netrc_auth - - # If we don't have a password and keyring is available, use it. - if allow_keyring: - # The index url is more specific than the netloc, so try it first - # fmt: off - kr_auth = ( - self._get_keyring_auth(index_url, username) or - self._get_keyring_auth(netloc, username) - ) - # fmt: on - if kr_auth: - logger.debug("Found credentials in keyring for %s", netloc) - return kr_auth - - return username, password - - def _get_url_and_credentials( - self, original_url: str - ) -> Tuple[str, Optional[str], Optional[str]]: - """Return the credentials to use for the provided URL. - - If allowed, netrc and keyring may be used to obtain the - correct credentials. - - Returns (url_without_credentials, username, password). Note - that even if the original URL contains credentials, this - function may return a different username and password. - """ - url, netloc, _ = split_auth_netloc_from_url(original_url) - - # Try to get credentials from original url - username, password = self._get_new_credentials(original_url) - - # If credentials not found, use any stored credentials for this netloc. - # Do this if either the username or the password is missing. - # This accounts for the situation in which the user has specified - # the username in the index url, but the password comes from keyring. - if (username is None or password is None) and netloc in self.passwords: - un, pw = self.passwords[netloc] - # It is possible that the cached credentials are for a different username, - # in which case the cache should be ignored. - if username is None or username == un: - username, password = un, pw - - if username is not None or password is not None: - # Convert the username and password if they're None, so that - # this netloc will show up as "cached" in the conditional above. - # Further, HTTPBasicAuth doesn't accept None, so it makes sense to - # cache the value that is going to be used. - username = username or "" - password = password or "" - - # Store any acquired credentials. - self.passwords[netloc] = (username, password) - - assert ( - # Credentials were found - (username is not None and password is not None) - # Credentials were not found - or (username is None and password is None) - ), f"Could not load credentials from url: {original_url}" - - return url, username, password - - def __call__(self, req: Request) -> Request: - # Get credentials for this request - url, username, password = self._get_url_and_credentials(req.url) - - # Set the url of the request to the url without any credentials - req.url = url - - if username is not None and password is not None: - # Send the basic auth with this request - req = HTTPBasicAuth(username, password)(req) - - # Attach a hook to handle 401 responses - req.register_hook("response", self.handle_401) - - return req - - # Factored out to allow for easy patching in tests - def _prompt_for_password( - self, netloc: str - ) -> Tuple[Optional[str], Optional[str], bool]: - username = ask_input(f"User for {netloc}: ") if self.prompting else None - if not username: - return None, None, False - if self.use_keyring: - auth = self._get_keyring_auth(netloc, username) - if auth and auth[0] is not None and auth[1] is not None: - return auth[0], auth[1], False - password = ask_password("Password: ") - return username, password, True - - # Factored out to allow for easy patching in tests - def _should_save_password_to_keyring(self) -> bool: - if ( - not self.prompting - or not self.use_keyring - or not self.keyring_provider.has_keyring - ): - return False - return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" - - def handle_401(self, resp: Response, **kwargs: Any) -> Response: - # We only care about 401 responses, anything else we want to just - # pass through the actual response - if resp.status_code != 401: - return resp - - username, password = None, None - - # Query the keyring for credentials: - if self.use_keyring: - username, password = self._get_new_credentials( - resp.url, - allow_netrc=False, - allow_keyring=True, - ) - - # We are not able to prompt the user so simply return the response - if not self.prompting and not username and not password: - return resp - - parsed = urllib.parse.urlparse(resp.url) - - # Prompt the user for a new username and password - save = False - if not username and not password: - username, password, save = self._prompt_for_password(parsed.netloc) - - # Store the new username and password to use for future requests - self._credentials_to_save = None - if username is not None and password is not None: - self.passwords[parsed.netloc] = (username, password) - - # Prompt to save the password to keyring - if save and self._should_save_password_to_keyring(): - self._credentials_to_save = Credentials( - url=parsed.netloc, - username=username, - password=password, - ) - - # Consume content and release the original connection to allow our new - # request to reuse the same one. - # The result of the assignment isn't used, it's just needed to consume - # the content. - _ = resp.content - resp.raw.release_conn() - - # Add our new username and password to the request - req = HTTPBasicAuth(username or "", password or "")(resp.request) - req.register_hook("response", self.warn_on_401) - - # On successful request, save the credentials that were used to - # keyring. (Note that if the user responded "no" above, this member - # is not set and nothing will be saved.) - if self._credentials_to_save: - req.register_hook("response", self.save_credentials) - - # Send our new request - new_resp = resp.connection.send(req, **kwargs) - new_resp.history.append(resp) - - return new_resp - - def warn_on_401(self, resp: Response, **kwargs: Any) -> None: - """Response callback to warn about incorrect credentials.""" - if resp.status_code == 401: - logger.warning( - "401 Error, Credentials not correct for %s", - resp.request.url, - ) - - def save_credentials(self, resp: Response, **kwargs: Any) -> None: - """Response callback to save credentials on success.""" - assert ( - self.keyring_provider.has_keyring - ), "should never reach here without keyring" - - creds = self._credentials_to_save - self._credentials_to_save = None - if creds and resp.status_code < 400: - try: - logger.info("Saving credentials to keyring") - self.keyring_provider.save_auth_info( - creds.url, creds.username, creds.password - ) - except Exception: - logger.exception("Failed to save credentials") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/cache.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/cache.py deleted file mode 100644 index fca04e6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/cache.py +++ /dev/null @@ -1,118 +0,0 @@ -"""HTTP cache implementation. -""" - -import os -from contextlib import contextmanager -from datetime import datetime -from typing import BinaryIO, Generator, Optional, Union - -from pip._vendor.cachecontrol.cache import SeparateBodyBaseCache -from pip._vendor.cachecontrol.caches import SeparateBodyFileCache -from pip._vendor.requests.models import Response - -from pip._internal.utils.filesystem import adjacent_tmp_file, replace -from pip._internal.utils.misc import ensure_dir - - -def is_from_cache(response: Response) -> bool: - return getattr(response, "from_cache", False) - - -@contextmanager -def suppressed_cache_errors() -> Generator[None, None, None]: - """If we can't access the cache then we can just skip caching and process - requests as if caching wasn't enabled. - """ - try: - yield - except OSError: - pass - - -class SafeFileCache(SeparateBodyBaseCache): - """ - A file based cache which is safe to use even when the target directory may - not be accessible or writable. - - There is a race condition when two processes try to write and/or read the - same entry at the same time, since each entry consists of two separate - files (https://github.com/psf/cachecontrol/issues/324). We therefore have - additional logic that makes sure that both files to be present before - returning an entry; this fixes the read side of the race condition. - - For the write side, we assume that the server will only ever return the - same data for the same URL, which ought to be the case for files pip is - downloading. PyPI does not have a mechanism to swap out a wheel for - another wheel, for example. If this assumption is not true, the - CacheControl issue will need to be fixed. - """ - - def __init__(self, directory: str) -> None: - assert directory is not None, "Cache directory must not be None." - super().__init__() - self.directory = directory - - def _get_cache_path(self, name: str) -> str: - # From cachecontrol.caches.file_cache.FileCache._fn, brought into our - # class for backwards-compatibility and to avoid using a non-public - # method. - hashed = SeparateBodyFileCache.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key: str) -> Optional[bytes]: - # The cache entry is only valid if both metadata and body exist. - metadata_path = self._get_cache_path(key) - body_path = metadata_path + ".body" - if not (os.path.exists(metadata_path) and os.path.exists(body_path)): - return None - with suppressed_cache_errors(): - with open(metadata_path, "rb") as f: - return f.read() - - def _write(self, path: str, data: bytes) -> None: - with suppressed_cache_errors(): - ensure_dir(os.path.dirname(path)) - - with adjacent_tmp_file(path) as f: - f.write(data) - # Inherit the read/write permissions of the cache directory - # to enable multi-user cache use-cases. - mode = ( - os.stat(self.directory).st_mode - & 0o666 # select read/write permissions of cache directory - | 0o600 # set owner read/write permissions - ) - # Change permissions only if there is no risk of following a symlink. - if os.chmod in os.supports_fd: - os.chmod(f.fileno(), mode) - elif os.chmod in os.supports_follow_symlinks: - os.chmod(f.name, mode, follow_symlinks=False) - - replace(f.name, path) - - def set( - self, key: str, value: bytes, expires: Union[int, datetime, None] = None - ) -> None: - path = self._get_cache_path(key) - self._write(path, value) - - def delete(self, key: str) -> None: - path = self._get_cache_path(key) - with suppressed_cache_errors(): - os.remove(path) - with suppressed_cache_errors(): - os.remove(path + ".body") - - def get_body(self, key: str) -> Optional[BinaryIO]: - # The cache entry is only valid if both metadata and body exist. - metadata_path = self._get_cache_path(key) - body_path = metadata_path + ".body" - if not (os.path.exists(metadata_path) and os.path.exists(body_path)): - return None - with suppressed_cache_errors(): - return open(body_path, "rb") - - def set_body(self, key: str, body: bytes) -> None: - path = self._get_cache_path(key) + ".body" - self._write(path, body) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/download.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/download.py deleted file mode 100644 index 5c3bce3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/download.py +++ /dev/null @@ -1,187 +0,0 @@ -"""Download files with progress indicators. -""" - -import email.message -import logging -import mimetypes -import os -from typing import Iterable, Optional, Tuple - -from pip._vendor.requests.models import Response - -from pip._internal.cli.progress_bars import get_download_progress_renderer -from pip._internal.exceptions import NetworkConnectionError -from pip._internal.models.index import PyPI -from pip._internal.models.link import Link -from pip._internal.network.cache import is_from_cache -from pip._internal.network.session import PipSession -from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks -from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext - -logger = logging.getLogger(__name__) - - -def _get_http_response_size(resp: Response) -> Optional[int]: - try: - return int(resp.headers["content-length"]) - except (ValueError, KeyError, TypeError): - return None - - -def _prepare_download( - resp: Response, - link: Link, - progress_bar: str, -) -> Iterable[bytes]: - total_length = _get_http_response_size(resp) - - if link.netloc == PyPI.file_storage_domain: - url = link.show_url - else: - url = link.url_without_fragment - - logged_url = redact_auth_from_url(url) - - if total_length: - logged_url = f"{logged_url} ({format_size(total_length)})" - - if is_from_cache(resp): - logger.info("Using cached %s", logged_url) - else: - logger.info("Downloading %s", logged_url) - - if logger.getEffectiveLevel() > logging.INFO: - show_progress = False - elif is_from_cache(resp): - show_progress = False - elif not total_length: - show_progress = True - elif total_length > (512 * 1024): - show_progress = True - else: - show_progress = False - - chunks = response_chunks(resp) - - if not show_progress: - return chunks - - renderer = get_download_progress_renderer(bar_type=progress_bar, size=total_length) - return renderer(chunks) - - -def sanitize_content_filename(filename: str) -> str: - """ - Sanitize the "filename" value from a Content-Disposition header. - """ - return os.path.basename(filename) - - -def parse_content_disposition(content_disposition: str, default_filename: str) -> str: - """ - Parse the "filename" value from a Content-Disposition header, and - return the default filename if the result is empty. - """ - m = email.message.Message() - m["content-type"] = content_disposition - filename = m.get_param("filename") - if filename: - # We need to sanitize the filename to prevent directory traversal - # in case the filename contains ".." path parts. - filename = sanitize_content_filename(str(filename)) - return filename or default_filename - - -def _get_http_response_filename(resp: Response, link: Link) -> str: - """Get an ideal filename from the given HTTP response, falling back to - the link filename if not provided. - """ - filename = link.filename # fallback - # Have a look at the Content-Disposition header for a better guess - content_disposition = resp.headers.get("content-disposition") - if content_disposition: - filename = parse_content_disposition(content_disposition, filename) - ext: Optional[str] = splitext(filename)[1] - if not ext: - ext = mimetypes.guess_extension(resp.headers.get("content-type", "")) - if ext: - filename += ext - if not ext and link.url != resp.url: - ext = os.path.splitext(resp.url)[1] - if ext: - filename += ext - return filename - - -def _http_get_download(session: PipSession, link: Link) -> Response: - target_url = link.url.split("#", 1)[0] - resp = session.get(target_url, headers=HEADERS, stream=True) - raise_for_status(resp) - return resp - - -class Downloader: - def __init__( - self, - session: PipSession, - progress_bar: str, - ) -> None: - self._session = session - self._progress_bar = progress_bar - - def __call__(self, link: Link, location: str) -> Tuple[str, str]: - """Download the file given by link into location.""" - try: - resp = _http_get_download(self._session, link) - except NetworkConnectionError as e: - assert e.response is not None - logger.critical( - "HTTP error %s while getting %s", e.response.status_code, link - ) - raise - - filename = _get_http_response_filename(resp, link) - filepath = os.path.join(location, filename) - - chunks = _prepare_download(resp, link, self._progress_bar) - with open(filepath, "wb") as content_file: - for chunk in chunks: - content_file.write(chunk) - content_type = resp.headers.get("Content-Type", "") - return filepath, content_type - - -class BatchDownloader: - def __init__( - self, - session: PipSession, - progress_bar: str, - ) -> None: - self._session = session - self._progress_bar = progress_bar - - def __call__( - self, links: Iterable[Link], location: str - ) -> Iterable[Tuple[Link, Tuple[str, str]]]: - """Download the files given by links into location.""" - for link in links: - try: - resp = _http_get_download(self._session, link) - except NetworkConnectionError as e: - assert e.response is not None - logger.critical( - "HTTP error %s while getting %s", - e.response.status_code, - link, - ) - raise - - filename = _get_http_response_filename(resp, link) - filepath = os.path.join(location, filename) - - chunks = _prepare_download(resp, link, self._progress_bar) - with open(filepath, "wb") as content_file: - for chunk in chunks: - content_file.write(chunk) - content_type = resp.headers.get("Content-Type", "") - yield link, (filepath, content_type) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py deleted file mode 100644 index 03f883c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py +++ /dev/null @@ -1,210 +0,0 @@ -"""Lazy ZIP over HTTP""" - -__all__ = ["HTTPRangeRequestUnsupported", "dist_from_wheel_url"] - -from bisect import bisect_left, bisect_right -from contextlib import contextmanager -from tempfile import NamedTemporaryFile -from typing import Any, Dict, Generator, List, Optional, Tuple -from zipfile import BadZipFile, ZipFile - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response - -from pip._internal.metadata import BaseDistribution, MemoryWheel, get_wheel_distribution -from pip._internal.network.session import PipSession -from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks - - -class HTTPRangeRequestUnsupported(Exception): - pass - - -def dist_from_wheel_url(name: str, url: str, session: PipSession) -> BaseDistribution: - """Return a distribution object from the given wheel URL. - - This uses HTTP range requests to only fetch the portion of the wheel - containing metadata, just enough for the object to be constructed. - If such requests are not supported, HTTPRangeRequestUnsupported - is raised. - """ - with LazyZipOverHTTP(url, session) as zf: - # For read-only ZIP files, ZipFile only needs methods read, - # seek, seekable and tell, not the whole IO protocol. - wheel = MemoryWheel(zf.name, zf) # type: ignore - # After context manager exit, wheel.name - # is an invalid file by intention. - return get_wheel_distribution(wheel, canonicalize_name(name)) - - -class LazyZipOverHTTP: - """File-like object mapped to a ZIP file over HTTP. - - This uses HTTP range requests to lazily fetch the file's content, - which is supposed to be fed to ZipFile. If such requests are not - supported by the server, raise HTTPRangeRequestUnsupported - during initialization. - """ - - def __init__( - self, url: str, session: PipSession, chunk_size: int = CONTENT_CHUNK_SIZE - ) -> None: - head = session.head(url, headers=HEADERS) - raise_for_status(head) - assert head.status_code == 200 - self._session, self._url, self._chunk_size = session, url, chunk_size - self._length = int(head.headers["Content-Length"]) - self._file = NamedTemporaryFile() - self.truncate(self._length) - self._left: List[int] = [] - self._right: List[int] = [] - if "bytes" not in head.headers.get("Accept-Ranges", "none"): - raise HTTPRangeRequestUnsupported("range request is not supported") - self._check_zip() - - @property - def mode(self) -> str: - """Opening mode, which is always rb.""" - return "rb" - - @property - def name(self) -> str: - """Path to the underlying file.""" - return self._file.name - - def seekable(self) -> bool: - """Return whether random access is supported, which is True.""" - return True - - def close(self) -> None: - """Close the file.""" - self._file.close() - - @property - def closed(self) -> bool: - """Whether the file is closed.""" - return self._file.closed - - def read(self, size: int = -1) -> bytes: - """Read up to size bytes from the object and return them. - - As a convenience, if size is unspecified or -1, - all bytes until EOF are returned. Fewer than - size bytes may be returned if EOF is reached. - """ - download_size = max(size, self._chunk_size) - start, length = self.tell(), self._length - stop = length if size < 0 else min(start + download_size, length) - start = max(0, stop - download_size) - self._download(start, stop - 1) - return self._file.read(size) - - def readable(self) -> bool: - """Return whether the file is readable, which is True.""" - return True - - def seek(self, offset: int, whence: int = 0) -> int: - """Change stream position and return the new absolute position. - - Seek to offset relative position indicated by whence: - * 0: Start of stream (the default). pos should be >= 0; - * 1: Current position - pos may be negative; - * 2: End of stream - pos usually negative. - """ - return self._file.seek(offset, whence) - - def tell(self) -> int: - """Return the current position.""" - return self._file.tell() - - def truncate(self, size: Optional[int] = None) -> int: - """Resize the stream to the given size in bytes. - - If size is unspecified resize to the current position. - The current stream position isn't changed. - - Return the new file size. - """ - return self._file.truncate(size) - - def writable(self) -> bool: - """Return False.""" - return False - - def __enter__(self) -> "LazyZipOverHTTP": - self._file.__enter__() - return self - - def __exit__(self, *exc: Any) -> None: - self._file.__exit__(*exc) - - @contextmanager - def _stay(self) -> Generator[None, None, None]: - """Return a context manager keeping the position. - - At the end of the block, seek back to original position. - """ - pos = self.tell() - try: - yield - finally: - self.seek(pos) - - def _check_zip(self) -> None: - """Check and download until the file is a valid ZIP.""" - end = self._length - 1 - for start in reversed(range(0, end, self._chunk_size)): - self._download(start, end) - with self._stay(): - try: - # For read-only ZIP files, ZipFile only needs - # methods read, seek, seekable and tell. - ZipFile(self) - except BadZipFile: - pass - else: - break - - def _stream_response( - self, start: int, end: int, base_headers: Dict[str, str] = HEADERS - ) -> Response: - """Return HTTP response to a range request from start to end.""" - headers = base_headers.copy() - headers["Range"] = f"bytes={start}-{end}" - # TODO: Get range requests to be correctly cached - headers["Cache-Control"] = "no-cache" - return self._session.get(self._url, headers=headers, stream=True) - - def _merge( - self, start: int, end: int, left: int, right: int - ) -> Generator[Tuple[int, int], None, None]: - """Return a generator of intervals to be fetched. - - Args: - start (int): Start of needed interval - end (int): End of needed interval - left (int): Index of first overlapping downloaded data - right (int): Index after last overlapping downloaded data - """ - lslice, rslice = self._left[left:right], self._right[left:right] - i = start = min([start] + lslice[:1]) - end = max([end] + rslice[-1:]) - for j, k in zip(lslice, rslice): - if j > i: - yield i, j - 1 - i = k + 1 - if i <= end: - yield i, end - self._left[left:right], self._right[left:right] = [start], [end] - - def _download(self, start: int, end: int) -> None: - """Download bytes from start to end inclusively.""" - with self._stay(): - left = bisect_left(self._right, start) - right = bisect_right(self._left, end) - for start, end in self._merge(start, end, left, right): - response = self._stream_response(start, end) - response.raise_for_status() - self.seek(start) - for chunk in response_chunks(response, self._chunk_size): - self._file.write(chunk) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/session.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/session.py deleted file mode 100644 index 5e10f8f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/session.py +++ /dev/null @@ -1,523 +0,0 @@ -"""PipSession and supporting code, containing all pip-specific -network request configuration and behavior. -""" - -import email.utils -import functools -import io -import ipaddress -import json -import logging -import mimetypes -import os -import platform -import shutil -import subprocess -import sys -import urllib.parse -import warnings -from typing import ( - TYPE_CHECKING, - Any, - Dict, - Generator, - List, - Mapping, - Optional, - Sequence, - Tuple, - Union, -) - -from pip._vendor import requests, urllib3 -from pip._vendor.cachecontrol import CacheControlAdapter as _BaseCacheControlAdapter -from pip._vendor.requests.adapters import DEFAULT_POOLBLOCK, BaseAdapter -from pip._vendor.requests.adapters import HTTPAdapter as _BaseHTTPAdapter -from pip._vendor.requests.models import PreparedRequest, Response -from pip._vendor.requests.structures import CaseInsensitiveDict -from pip._vendor.urllib3.connectionpool import ConnectionPool -from pip._vendor.urllib3.exceptions import InsecureRequestWarning - -from pip import __version__ -from pip._internal.metadata import get_default_environment -from pip._internal.models.link import Link -from pip._internal.network.auth import MultiDomainBasicAuth -from pip._internal.network.cache import SafeFileCache - -# Import ssl from compat so the initial import occurs in only one place. -from pip._internal.utils.compat import has_tls -from pip._internal.utils.glibc import libc_ver -from pip._internal.utils.misc import build_url_from_netloc, parse_netloc -from pip._internal.utils.urls import url_to_path - -if TYPE_CHECKING: - from ssl import SSLContext - - from pip._vendor.urllib3.poolmanager import PoolManager - - -logger = logging.getLogger(__name__) - -SecureOrigin = Tuple[str, str, Optional[Union[int, str]]] - - -# Ignore warning raised when using --trusted-host. -warnings.filterwarnings("ignore", category=InsecureRequestWarning) - - -SECURE_ORIGINS: List[SecureOrigin] = [ - # protocol, hostname, port - # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) - ("https", "*", "*"), - ("*", "localhost", "*"), - ("*", "127.0.0.0/8", "*"), - ("*", "::1/128", "*"), - ("file", "*", None), - # ssh is always secure. - ("ssh", "*", "*"), -] - - -# These are environment variables present when running under various -# CI systems. For each variable, some CI systems that use the variable -# are indicated. The collection was chosen so that for each of a number -# of popular systems, at least one of the environment variables is used. -# This list is used to provide some indication of and lower bound for -# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. -# For more background, see: https://github.com/pypa/pip/issues/5499 -CI_ENVIRONMENT_VARIABLES = ( - # Azure Pipelines - "BUILD_BUILDID", - # Jenkins - "BUILD_ID", - # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI - "CI", - # Explicit environment variable. - "PIP_IS_CI", -) - - -def looks_like_ci() -> bool: - """ - Return whether it looks like pip is running under CI. - """ - # We don't use the method of checking for a tty (e.g. using isatty()) - # because some CI systems mimic a tty (e.g. Travis CI). Thus that - # method doesn't provide definitive information in either direction. - return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) - - -@functools.lru_cache(maxsize=1) -def user_agent() -> str: - """ - Return a string representing the user agent. - """ - data: Dict[str, Any] = { - "installer": {"name": "pip", "version": __version__}, - "python": platform.python_version(), - "implementation": { - "name": platform.python_implementation(), - }, - } - - if data["implementation"]["name"] == "CPython": - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == "PyPy": - pypy_version_info = sys.pypy_version_info # type: ignore - if pypy_version_info.releaselevel == "final": - pypy_version_info = pypy_version_info[:3] - data["implementation"]["version"] = ".".join( - [str(x) for x in pypy_version_info] - ) - elif data["implementation"]["name"] == "Jython": - # Complete Guess - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == "IronPython": - # Complete Guess - data["implementation"]["version"] = platform.python_version() - - if sys.platform.startswith("linux"): - from pip._vendor import distro - - linux_distribution = distro.name(), distro.version(), distro.codename() - distro_infos: Dict[str, Any] = dict( - filter( - lambda x: x[1], - zip(["name", "version", "id"], linux_distribution), - ) - ) - libc = dict( - filter( - lambda x: x[1], - zip(["lib", "version"], libc_ver()), - ) - ) - if libc: - distro_infos["libc"] = libc - if distro_infos: - data["distro"] = distro_infos - - if sys.platform.startswith("darwin") and platform.mac_ver()[0]: - data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} - - if platform.system(): - data.setdefault("system", {})["name"] = platform.system() - - if platform.release(): - data.setdefault("system", {})["release"] = platform.release() - - if platform.machine(): - data["cpu"] = platform.machine() - - if has_tls(): - import _ssl as ssl - - data["openssl_version"] = ssl.OPENSSL_VERSION - - setuptools_dist = get_default_environment().get_distribution("setuptools") - if setuptools_dist is not None: - data["setuptools_version"] = str(setuptools_dist.version) - - if shutil.which("rustc") is not None: - # If for any reason `rustc --version` fails, silently ignore it - try: - rustc_output = subprocess.check_output( - ["rustc", "--version"], stderr=subprocess.STDOUT, timeout=0.5 - ) - except Exception: - pass - else: - if rustc_output.startswith(b"rustc "): - # The format of `rustc --version` is: - # `b'rustc 1.52.1 (9bc8c42bb 2021-05-09)\n'` - # We extract just the middle (1.52.1) part - data["rustc_version"] = rustc_output.split(b" ")[1].decode() - - # Use None rather than False so as not to give the impression that - # pip knows it is not being run under CI. Rather, it is a null or - # inconclusive result. Also, we include some value rather than no - # value to make it easier to know that the check has been run. - data["ci"] = True if looks_like_ci() else None - - user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") - if user_data is not None: - data["user_data"] = user_data - - return "{data[installer][name]}/{data[installer][version]} {json}".format( - data=data, - json=json.dumps(data, separators=(",", ":"), sort_keys=True), - ) - - -class LocalFSAdapter(BaseAdapter): - def send( - self, - request: PreparedRequest, - stream: bool = False, - timeout: Optional[Union[float, Tuple[float, float]]] = None, - verify: Union[bool, str] = True, - cert: Optional[Union[str, Tuple[str, str]]] = None, - proxies: Optional[Mapping[str, str]] = None, - ) -> Response: - pathname = url_to_path(request.url) - - resp = Response() - resp.status_code = 200 - resp.url = request.url - - try: - stats = os.stat(pathname) - except OSError as exc: - # format the exception raised as a io.BytesIO object, - # to return a better error message: - resp.status_code = 404 - resp.reason = type(exc).__name__ - resp.raw = io.BytesIO(f"{resp.reason}: {exc}".encode()) - else: - modified = email.utils.formatdate(stats.st_mtime, usegmt=True) - content_type = mimetypes.guess_type(pathname)[0] or "text/plain" - resp.headers = CaseInsensitiveDict( - { - "Content-Type": content_type, - "Content-Length": stats.st_size, - "Last-Modified": modified, - } - ) - - resp.raw = open(pathname, "rb") - resp.close = resp.raw.close - - return resp - - def close(self) -> None: - pass - - -class _SSLContextAdapterMixin: - """Mixin to add the ``ssl_context`` constructor argument to HTTP adapters. - - The additional argument is forwarded directly to the pool manager. This allows us - to dynamically decide what SSL store to use at runtime, which is used to implement - the optional ``truststore`` backend. - """ - - def __init__( - self, - *, - ssl_context: Optional["SSLContext"] = None, - **kwargs: Any, - ) -> None: - self._ssl_context = ssl_context - super().__init__(**kwargs) - - def init_poolmanager( - self, - connections: int, - maxsize: int, - block: bool = DEFAULT_POOLBLOCK, - **pool_kwargs: Any, - ) -> "PoolManager": - if self._ssl_context is not None: - pool_kwargs.setdefault("ssl_context", self._ssl_context) - return super().init_poolmanager( # type: ignore[misc] - connections=connections, - maxsize=maxsize, - block=block, - **pool_kwargs, - ) - - -class HTTPAdapter(_SSLContextAdapterMixin, _BaseHTTPAdapter): - pass - - -class CacheControlAdapter(_SSLContextAdapterMixin, _BaseCacheControlAdapter): - pass - - -class InsecureHTTPAdapter(HTTPAdapter): - def cert_verify( - self, - conn: ConnectionPool, - url: str, - verify: Union[bool, str], - cert: Optional[Union[str, Tuple[str, str]]], - ) -> None: - super().cert_verify(conn=conn, url=url, verify=False, cert=cert) - - -class InsecureCacheControlAdapter(CacheControlAdapter): - def cert_verify( - self, - conn: ConnectionPool, - url: str, - verify: Union[bool, str], - cert: Optional[Union[str, Tuple[str, str]]], - ) -> None: - super().cert_verify(conn=conn, url=url, verify=False, cert=cert) - - -class PipSession(requests.Session): - timeout: Optional[int] = None - - def __init__( - self, - *args: Any, - retries: int = 0, - cache: Optional[str] = None, - trusted_hosts: Sequence[str] = (), - index_urls: Optional[List[str]] = None, - ssl_context: Optional["SSLContext"] = None, - **kwargs: Any, - ) -> None: - """ - :param trusted_hosts: Domains not to emit warnings for when not using - HTTPS. - """ - super().__init__(*args, **kwargs) - - # Namespace the attribute with "pip_" just in case to prevent - # possible conflicts with the base class. - self.pip_trusted_origins: List[Tuple[str, Optional[int]]] = [] - self.pip_proxy = None - - # Attach our User Agent to the request - self.headers["User-Agent"] = user_agent() - - # Attach our Authentication handler to the session - self.auth = MultiDomainBasicAuth(index_urls=index_urls) - - # Create our urllib3.Retry instance which will allow us to customize - # how we handle retries. - retries = urllib3.Retry( - # Set the total number of retries that a particular request can - # have. - total=retries, - # A 503 error from PyPI typically means that the Fastly -> Origin - # connection got interrupted in some way. A 503 error in general - # is typically considered a transient error so we'll go ahead and - # retry it. - # A 500 may indicate transient error in Amazon S3 - # A 502 may be a transient error from a CDN like CloudFlare or CloudFront - # A 520 or 527 - may indicate transient error in CloudFlare - status_forcelist=[500, 502, 503, 520, 527], - # Add a small amount of back off between failed requests in - # order to prevent hammering the service. - backoff_factor=0.25, - ) # type: ignore - - # Our Insecure HTTPAdapter disables HTTPS validation. It does not - # support caching so we'll use it for all http:// URLs. - # If caching is disabled, we will also use it for - # https:// hosts that we've marked as ignoring - # TLS errors for (trusted-hosts). - insecure_adapter = InsecureHTTPAdapter(max_retries=retries) - - # We want to _only_ cache responses on securely fetched origins or when - # the host is specified as trusted. We do this because - # we can't validate the response of an insecurely/untrusted fetched - # origin, and we don't want someone to be able to poison the cache and - # require manual eviction from the cache to fix it. - if cache: - secure_adapter = CacheControlAdapter( - cache=SafeFileCache(cache), - max_retries=retries, - ssl_context=ssl_context, - ) - self._trusted_host_adapter = InsecureCacheControlAdapter( - cache=SafeFileCache(cache), - max_retries=retries, - ) - else: - secure_adapter = HTTPAdapter(max_retries=retries, ssl_context=ssl_context) - self._trusted_host_adapter = insecure_adapter - - self.mount("https://", secure_adapter) - self.mount("http://", insecure_adapter) - - # Enable file:// urls - self.mount("file://", LocalFSAdapter()) - - for host in trusted_hosts: - self.add_trusted_host(host, suppress_logging=True) - - def update_index_urls(self, new_index_urls: List[str]) -> None: - """ - :param new_index_urls: New index urls to update the authentication - handler with. - """ - self.auth.index_urls = new_index_urls - - def add_trusted_host( - self, host: str, source: Optional[str] = None, suppress_logging: bool = False - ) -> None: - """ - :param host: It is okay to provide a host that has previously been - added. - :param source: An optional source string, for logging where the host - string came from. - """ - if not suppress_logging: - msg = f"adding trusted host: {host!r}" - if source is not None: - msg += f" (from {source})" - logger.info(msg) - - parsed_host, parsed_port = parse_netloc(host) - if parsed_host is None: - raise ValueError(f"Trusted host URL must include a host part: {host!r}") - if (parsed_host, parsed_port) not in self.pip_trusted_origins: - self.pip_trusted_origins.append((parsed_host, parsed_port)) - - self.mount( - build_url_from_netloc(host, scheme="http") + "/", self._trusted_host_adapter - ) - self.mount(build_url_from_netloc(host) + "/", self._trusted_host_adapter) - if not parsed_port: - self.mount( - build_url_from_netloc(host, scheme="http") + ":", - self._trusted_host_adapter, - ) - # Mount wildcard ports for the same host. - self.mount(build_url_from_netloc(host) + ":", self._trusted_host_adapter) - - def iter_secure_origins(self) -> Generator[SecureOrigin, None, None]: - yield from SECURE_ORIGINS - for host, port in self.pip_trusted_origins: - yield ("*", host, "*" if port is None else port) - - def is_secure_origin(self, location: Link) -> bool: - # Determine if this url used a secure transport mechanism - parsed = urllib.parse.urlparse(str(location)) - origin_protocol, origin_host, origin_port = ( - parsed.scheme, - parsed.hostname, - parsed.port, - ) - - # The protocol to use to see if the protocol matches. - # Don't count the repository type as part of the protocol: in - # cases such as "git+ssh", only use "ssh". (I.e., Only verify against - # the last scheme.) - origin_protocol = origin_protocol.rsplit("+", 1)[-1] - - # Determine if our origin is a secure origin by looking through our - # hardcoded list of secure origins, as well as any additional ones - # configured on this PackageFinder instance. - for secure_origin in self.iter_secure_origins(): - secure_protocol, secure_host, secure_port = secure_origin - if origin_protocol != secure_protocol and secure_protocol != "*": - continue - - try: - addr = ipaddress.ip_address(origin_host or "") - network = ipaddress.ip_network(secure_host) - except ValueError: - # We don't have both a valid address or a valid network, so - # we'll check this origin against hostnames. - if ( - origin_host - and origin_host.lower() != secure_host.lower() - and secure_host != "*" - ): - continue - else: - # We have a valid address and network, so see if the address - # is contained within the network. - if addr not in network: - continue - - # Check to see if the port matches. - if ( - origin_port != secure_port - and secure_port != "*" - and secure_port is not None - ): - continue - - # If we've gotten here, then this origin matches the current - # secure origin and we should return True - return True - - # If we've gotten to this point, then the origin isn't secure and we - # will not accept it as a valid location to search. We will however - # log a warning that we are ignoring it. - logger.warning( - "The repository located at %s is not a trusted or secure host and " - "is being ignored. If this repository is available via HTTPS we " - "recommend you use HTTPS instead, otherwise you may silence " - "this warning and allow it anyway with '--trusted-host %s'.", - origin_host, - origin_host, - ) - - return False - - def request(self, method: str, url: str, *args: Any, **kwargs: Any) -> Response: - # Allow setting a default timeout on a session - kwargs.setdefault("timeout", self.timeout) - # Allow setting a default proxies on a session - kwargs.setdefault("proxies", self.proxies) - - # Dispatch the actual request - return super().request(method, url, *args, **kwargs) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/utils.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/utils.py deleted file mode 100644 index bba4c26..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/utils.py +++ /dev/null @@ -1,98 +0,0 @@ -from typing import Dict, Generator - -from pip._vendor.requests.models import Response - -from pip._internal.exceptions import NetworkConnectionError - -# The following comments and HTTP headers were originally added by -# Donald Stufft in git commit 22c562429a61bb77172039e480873fb239dd8c03. -# -# We use Accept-Encoding: identity here because requests defaults to -# accepting compressed responses. This breaks in a variety of ways -# depending on how the server is configured. -# - Some servers will notice that the file isn't a compressible file -# and will leave the file alone and with an empty Content-Encoding -# - Some servers will notice that the file is already compressed and -# will leave the file alone, adding a Content-Encoding: gzip header -# - Some servers won't notice anything at all and will take a file -# that's already been compressed and compress it again, and set -# the Content-Encoding: gzip header -# By setting this to request only the identity encoding we're hoping -# to eliminate the third case. Hopefully there does not exist a server -# which when given a file will notice it is already compressed and that -# you're not asking for a compressed file and will then decompress it -# before sending because if that's the case I don't think it'll ever be -# possible to make this work. -HEADERS: Dict[str, str] = {"Accept-Encoding": "identity"} - -DOWNLOAD_CHUNK_SIZE = 256 * 1024 - - -def raise_for_status(resp: Response) -> None: - http_error_msg = "" - if isinstance(resp.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. - try: - reason = resp.reason.decode("utf-8") - except UnicodeDecodeError: - reason = resp.reason.decode("iso-8859-1") - else: - reason = resp.reason - - if 400 <= resp.status_code < 500: - http_error_msg = ( - f"{resp.status_code} Client Error: {reason} for url: {resp.url}" - ) - - elif 500 <= resp.status_code < 600: - http_error_msg = ( - f"{resp.status_code} Server Error: {reason} for url: {resp.url}" - ) - - if http_error_msg: - raise NetworkConnectionError(http_error_msg, response=resp) - - -def response_chunks( - response: Response, chunk_size: int = DOWNLOAD_CHUNK_SIZE -) -> Generator[bytes, None, None]: - """Given a requests Response, provide the data chunks.""" - try: - # Special case for urllib3. - for chunk in response.raw.stream( - chunk_size, - # We use decode_content=False here because we don't - # want urllib3 to mess with the raw bytes we get - # from the server. If we decompress inside of - # urllib3 then we cannot verify the checksum - # because the checksum will be of the compressed - # file. This breakage will only occur if the - # server adds a Content-Encoding header, which - # depends on how the server was configured: - # - Some servers will notice that the file isn't a - # compressible file and will leave the file alone - # and with an empty Content-Encoding - # - Some servers will notice that the file is - # already compressed and will leave the file - # alone and will add a Content-Encoding: gzip - # header - # - Some servers won't notice anything at all and - # will take a file that's already been compressed - # and compress it again and set the - # Content-Encoding: gzip header - # - # By setting this not to decode automatically we - # hope to eliminate problems with the second case. - decode_content=False, - ): - yield chunk - except AttributeError: - # Standard file-like object. - while True: - chunk = response.raw.read(chunk_size) - if not chunk: - break - yield chunk diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py b/myenv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py deleted file mode 100644 index 22ec8d2..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py +++ /dev/null @@ -1,62 +0,0 @@ -"""xmlrpclib.Transport implementation -""" - -import logging -import urllib.parse -import xmlrpc.client -from typing import TYPE_CHECKING, Tuple - -from pip._internal.exceptions import NetworkConnectionError -from pip._internal.network.session import PipSession -from pip._internal.network.utils import raise_for_status - -if TYPE_CHECKING: - from xmlrpc.client import _HostType, _Marshallable - - from _typeshed import SizedBuffer - -logger = logging.getLogger(__name__) - - -class PipXmlrpcTransport(xmlrpc.client.Transport): - """Provide a `xmlrpclib.Transport` implementation via a `PipSession` - object. - """ - - def __init__( - self, index_url: str, session: PipSession, use_datetime: bool = False - ) -> None: - super().__init__(use_datetime) - index_parts = urllib.parse.urlparse(index_url) - self._scheme = index_parts.scheme - self._session = session - - def request( - self, - host: "_HostType", - handler: str, - request_body: "SizedBuffer", - verbose: bool = False, - ) -> Tuple["_Marshallable", ...]: - assert isinstance(host, str) - parts = (self._scheme, host, handler, None, None, None) - url = urllib.parse.urlunparse(parts) - try: - headers = {"Content-Type": "text/xml"} - response = self._session.post( - url, - data=request_body, - headers=headers, - stream=True, - ) - raise_for_status(response) - self.verbose = verbose - return self.parse_response(response.raw) - except NetworkConnectionError as exc: - assert exc.response - logger.critical( - "HTTP error %s while getting %s", - exc.response.status_code, - url, - ) - raise diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 95e2abb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc deleted file mode 100644 index 0d9f17e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc deleted file mode 100644 index add0504..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc deleted file mode 100644 index c1a216e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0067068..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc deleted file mode 100644 index 0577527..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc deleted file mode 100644 index d3d69c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc deleted file mode 100644 index 5dcb354..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc deleted file mode 100644 index 153b828..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index b6c75dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc deleted file mode 100644 index 937b9a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc deleted file mode 100644 index 0db1f4e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py deleted file mode 100644 index 0ed8dd2..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py +++ /dev/null @@ -1,138 +0,0 @@ -import contextlib -import hashlib -import logging -import os -from types import TracebackType -from typing import Dict, Generator, Optional, Type, Union - -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -@contextlib.contextmanager -def update_env_context_manager(**changes: str) -> Generator[None, None, None]: - target = os.environ - - # Save values from the target and change them. - non_existent_marker = object() - saved_values: Dict[str, Union[object, str]] = {} - for name, new_value in changes.items(): - try: - saved_values[name] = target[name] - except KeyError: - saved_values[name] = non_existent_marker - target[name] = new_value - - try: - yield - finally: - # Restore original values in the target. - for name, original_value in saved_values.items(): - if original_value is non_existent_marker: - del target[name] - else: - assert isinstance(original_value, str) # for mypy - target[name] = original_value - - -@contextlib.contextmanager -def get_build_tracker() -> Generator["BuildTracker", None, None]: - root = os.environ.get("PIP_BUILD_TRACKER") - with contextlib.ExitStack() as ctx: - if root is None: - root = ctx.enter_context(TempDirectory(kind="build-tracker")).path - ctx.enter_context(update_env_context_manager(PIP_BUILD_TRACKER=root)) - logger.debug("Initialized build tracking at %s", root) - - with BuildTracker(root) as tracker: - yield tracker - - -class TrackerId(str): - """Uniquely identifying string provided to the build tracker.""" - - -class BuildTracker: - """Ensure that an sdist cannot request itself as a setup requirement. - - When an sdist is prepared, it identifies its setup requirements in the - context of ``BuildTracker.track()``. If a requirement shows up recursively, this - raises an exception. - - This stops fork bombs embedded in malicious packages.""" - - def __init__(self, root: str) -> None: - self._root = root - self._entries: Dict[TrackerId, InstallRequirement] = {} - logger.debug("Created build tracker: %s", self._root) - - def __enter__(self) -> "BuildTracker": - logger.debug("Entered build tracker: %s", self._root) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.cleanup() - - def _entry_path(self, key: TrackerId) -> str: - hashed = hashlib.sha224(key.encode()).hexdigest() - return os.path.join(self._root, hashed) - - def add(self, req: InstallRequirement, key: TrackerId) -> None: - """Add an InstallRequirement to build tracking.""" - - # Get the file to write information about this requirement. - entry_path = self._entry_path(key) - - # Try reading from the file. If it exists and can be read from, a build - # is already in progress, so a LookupError is raised. - try: - with open(entry_path) as fp: - contents = fp.read() - except FileNotFoundError: - pass - else: - message = f"{req.link} is already being built: {contents}" - raise LookupError(message) - - # If we're here, req should really not be building already. - assert key not in self._entries - - # Start tracking this requirement. - with open(entry_path, "w", encoding="utf-8") as fp: - fp.write(str(req)) - self._entries[key] = req - - logger.debug("Added %s to build tracker %r", req, self._root) - - def remove(self, req: InstallRequirement, key: TrackerId) -> None: - """Remove an InstallRequirement from build tracking.""" - - # Delete the created file and the corresponding entry. - os.unlink(self._entry_path(key)) - del self._entries[key] - - logger.debug("Removed %s from build tracker %r", req, self._root) - - def cleanup(self) -> None: - for key, req in list(self._entries.items()): - self.remove(req, key) - - logger.debug("Removed build tracker: %r", self._root) - - @contextlib.contextmanager - def track(self, req: InstallRequirement, key: str) -> Generator[None, None, None]: - """Ensure that `key` cannot install itself as a setup requirement. - - :raises LookupError: If `key` was already provided in a parent invocation of - the context introduced by this method.""" - tracker_id = TrackerId(key) - self.add(req, tracker_id) - yield - self.remove(req, tracker_id) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py deleted file mode 100644 index c66ac35..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Metadata generation logic for source distributions. -""" - -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment -from pip._internal.exceptions import ( - InstallationSubprocessError, - MetadataGenerationFailed, -) -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory - - -def generate_metadata( - build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str -) -> str: - """Generate metadata using mechanisms described in PEP 517. - - Returns the generated metadata directory. - """ - metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) - - metadata_dir = metadata_tmpdir.path - - with build_env: - # Note that BuildBackendHookCaller implements a fallback for - # prepare_metadata_for_build_wheel, so we don't have to - # consider the possibility that this hook doesn't exist. - runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)") - with backend.subprocess_runner(runner): - try: - distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir) - except InstallationSubprocessError as error: - raise MetadataGenerationFailed(package_details=details) from error - - return os.path.join(metadata_dir, distinfo_dir) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py deleted file mode 100644 index 3397ccf..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Metadata generation logic for source distributions. -""" - -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment -from pip._internal.exceptions import ( - InstallationSubprocessError, - MetadataGenerationFailed, -) -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory - - -def generate_editable_metadata( - build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str -) -> str: - """Generate metadata using mechanisms described in PEP 660. - - Returns the generated metadata directory. - """ - metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) - - metadata_dir = metadata_tmpdir.path - - with build_env: - # Note that BuildBackendHookCaller implements a fallback for - # prepare_metadata_for_build_wheel/editable, so we don't have to - # consider the possibility that this hook doesn't exist. - runner = runner_with_spinner_message( - "Preparing editable metadata (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - try: - distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) - except InstallationSubprocessError as error: - raise MetadataGenerationFailed(package_details=details) from error - - assert distinfo_dir is not None - return os.path.join(metadata_dir, distinfo_dir) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py deleted file mode 100644 index c01dd1c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py +++ /dev/null @@ -1,74 +0,0 @@ -"""Metadata generation logic for legacy source distributions. -""" - -import logging -import os - -from pip._internal.build_env import BuildEnvironment -from pip._internal.cli.spinners import open_spinner -from pip._internal.exceptions import ( - InstallationError, - InstallationSubprocessError, - MetadataGenerationFailed, -) -from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args -from pip._internal.utils.subprocess import call_subprocess -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -def _find_egg_info(directory: str) -> str: - """Find an .egg-info subdirectory in `directory`.""" - filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")] - - if not filenames: - raise InstallationError(f"No .egg-info directory found in {directory}") - - if len(filenames) > 1: - raise InstallationError( - f"More than one .egg-info directory found in {directory}" - ) - - return os.path.join(directory, filenames[0]) - - -def generate_metadata( - build_env: BuildEnvironment, - setup_py_path: str, - source_dir: str, - isolated: bool, - details: str, -) -> str: - """Generate metadata using setup.py-based defacto mechanisms. - - Returns the generated metadata directory. - """ - logger.debug( - "Running setup.py (path:%s) egg_info for package %s", - setup_py_path, - details, - ) - - egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path - - args = make_setuptools_egg_info_args( - setup_py_path, - egg_info_dir=egg_info_dir, - no_user_config=isolated, - ) - - with build_env: - with open_spinner("Preparing metadata (setup.py)") as spinner: - try: - call_subprocess( - args, - cwd=source_dir, - command_desc="python setup.py egg_info", - spinner=spinner, - ) - except InstallationSubprocessError as error: - raise MetadataGenerationFailed(package_details=details) from error - - # Return the .egg-info directory. - return _find_egg_info(egg_info_dir) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py deleted file mode 100644 index 064811a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py +++ /dev/null @@ -1,37 +0,0 @@ -import logging -import os -from typing import Optional - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.utils.subprocess import runner_with_spinner_message - -logger = logging.getLogger(__name__) - - -def build_wheel_pep517( - name: str, - backend: BuildBackendHookCaller, - metadata_directory: str, - tempd: str, -) -> Optional[str]: - """Build one InstallRequirement using the PEP 517 build process. - - Returns path to wheel if successfully built. Otherwise, returns None. - """ - assert metadata_directory is not None - try: - logger.debug("Destination directory: %s", tempd) - - runner = runner_with_spinner_message( - f"Building wheel for {name} (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - wheel_name = backend.build_wheel( - tempd, - metadata_directory=metadata_directory, - ) - except Exception: - logger.error("Failed building wheel for %s", name) - return None - return os.path.join(tempd, wheel_name) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py deleted file mode 100644 index 719d69d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py +++ /dev/null @@ -1,46 +0,0 @@ -import logging -import os -from typing import Optional - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller, HookMissing - -from pip._internal.utils.subprocess import runner_with_spinner_message - -logger = logging.getLogger(__name__) - - -def build_wheel_editable( - name: str, - backend: BuildBackendHookCaller, - metadata_directory: str, - tempd: str, -) -> Optional[str]: - """Build one InstallRequirement using the PEP 660 build process. - - Returns path to wheel if successfully built. Otherwise, returns None. - """ - assert metadata_directory is not None - try: - logger.debug("Destination directory: %s", tempd) - - runner = runner_with_spinner_message( - f"Building editable for {name} (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - try: - wheel_name = backend.build_editable( - tempd, - metadata_directory=metadata_directory, - ) - except HookMissing as e: - logger.error( - "Cannot build editable %s because the build " - "backend does not have the %s hook", - name, - e, - ) - return None - except Exception: - logger.error("Failed building editable for %s", name) - return None - return os.path.join(tempd, wheel_name) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py deleted file mode 100644 index 3ee2a70..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py +++ /dev/null @@ -1,102 +0,0 @@ -import logging -import os.path -from typing import List, Optional - -from pip._internal.cli.spinners import open_spinner -from pip._internal.utils.setuptools_build import make_setuptools_bdist_wheel_args -from pip._internal.utils.subprocess import call_subprocess, format_command_args - -logger = logging.getLogger(__name__) - - -def format_command_result( - command_args: List[str], - command_output: str, -) -> str: - """Format command information for logging.""" - command_desc = format_command_args(command_args) - text = f"Command arguments: {command_desc}\n" - - if not command_output: - text += "Command output: None" - elif logger.getEffectiveLevel() > logging.DEBUG: - text += "Command output: [use --verbose to show]" - else: - if not command_output.endswith("\n"): - command_output += "\n" - text += f"Command output:\n{command_output}" - - return text - - -def get_legacy_build_wheel_path( - names: List[str], - temp_dir: str, - name: str, - command_args: List[str], - command_output: str, -) -> Optional[str]: - """Return the path to the wheel in the temporary build directory.""" - # Sort for determinism. - names = sorted(names) - if not names: - msg = f"Legacy build of wheel for {name!r} created no files.\n" - msg += format_command_result(command_args, command_output) - logger.warning(msg) - return None - - if len(names) > 1: - msg = ( - f"Legacy build of wheel for {name!r} created more than one file.\n" - f"Filenames (choosing first): {names}\n" - ) - msg += format_command_result(command_args, command_output) - logger.warning(msg) - - return os.path.join(temp_dir, names[0]) - - -def build_wheel_legacy( - name: str, - setup_py_path: str, - source_dir: str, - global_options: List[str], - build_options: List[str], - tempd: str, -) -> Optional[str]: - """Build one unpacked package using the "legacy" build process. - - Returns path to wheel if successfully built. Otherwise, returns None. - """ - wheel_args = make_setuptools_bdist_wheel_args( - setup_py_path, - global_options=global_options, - build_options=build_options, - destination_dir=tempd, - ) - - spin_message = f"Building wheel for {name} (setup.py)" - with open_spinner(spin_message) as spinner: - logger.debug("Destination directory: %s", tempd) - - try: - output = call_subprocess( - wheel_args, - command_desc="python setup.py bdist_wheel", - cwd=source_dir, - spinner=spinner, - ) - except Exception: - spinner.finish("error") - logger.error("Failed building wheel for %s", name) - return None - - names = os.listdir(tempd) - wheel_path = get_legacy_build_wheel_path( - names=names, - temp_dir=tempd, - name=name, - command_args=wheel_args, - command_output=output, - ) - return wheel_path diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/check.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/check.py deleted file mode 100644 index 4b6fbc4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/check.py +++ /dev/null @@ -1,181 +0,0 @@ -"""Validation of dependencies of packages -""" - -import logging -from contextlib import suppress -from email.parser import Parser -from functools import reduce -from typing import ( - Callable, - Dict, - FrozenSet, - Generator, - Iterable, - List, - NamedTuple, - Optional, - Set, - Tuple, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.tags import Tag, parse_tag -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.distributions import make_distribution_for_install_requirement -from pip._internal.metadata import get_default_environment -from pip._internal.metadata.base import BaseDistribution -from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -class PackageDetails(NamedTuple): - version: Version - dependencies: List[Requirement] - - -# Shorthands -PackageSet = Dict[NormalizedName, PackageDetails] -Missing = Tuple[NormalizedName, Requirement] -Conflicting = Tuple[NormalizedName, Version, Requirement] - -MissingDict = Dict[NormalizedName, List[Missing]] -ConflictingDict = Dict[NormalizedName, List[Conflicting]] -CheckResult = Tuple[MissingDict, ConflictingDict] -ConflictDetails = Tuple[PackageSet, CheckResult] - - -def create_package_set_from_installed() -> Tuple[PackageSet, bool]: - """Converts a list of distributions into a PackageSet.""" - package_set = {} - problems = False - env = get_default_environment() - for dist in env.iter_installed_distributions(local_only=False, skip=()): - name = dist.canonical_name - try: - dependencies = list(dist.iter_dependencies()) - package_set[name] = PackageDetails(dist.version, dependencies) - except (OSError, ValueError) as e: - # Don't crash on unreadable or broken metadata. - logger.warning("Error parsing dependencies of %s: %s", name, e) - problems = True - return package_set, problems - - -def check_package_set( - package_set: PackageSet, should_ignore: Optional[Callable[[str], bool]] = None -) -> CheckResult: - """Check if a package set is consistent - - If should_ignore is passed, it should be a callable that takes a - package name and returns a boolean. - """ - - missing = {} - conflicting = {} - - for package_name, package_detail in package_set.items(): - # Info about dependencies of package_name - missing_deps: Set[Missing] = set() - conflicting_deps: Set[Conflicting] = set() - - if should_ignore and should_ignore(package_name): - continue - - for req in package_detail.dependencies: - name = canonicalize_name(req.name) - - # Check if it's missing - if name not in package_set: - missed = True - if req.marker is not None: - missed = req.marker.evaluate({"extra": ""}) - if missed: - missing_deps.add((name, req)) - continue - - # Check if there's a conflict - version = package_set[name].version - if not req.specifier.contains(version, prereleases=True): - conflicting_deps.add((name, version, req)) - - if missing_deps: - missing[package_name] = sorted(missing_deps, key=str) - if conflicting_deps: - conflicting[package_name] = sorted(conflicting_deps, key=str) - - return missing, conflicting - - -def check_install_conflicts(to_install: List[InstallRequirement]) -> ConflictDetails: - """For checking if the dependency graph would be consistent after \ - installing given requirements - """ - # Start from the current state - package_set, _ = create_package_set_from_installed() - # Install packages - would_be_installed = _simulate_installation_of(to_install, package_set) - - # Only warn about directly-dependent packages; create a whitelist of them - whitelist = _create_whitelist(would_be_installed, package_set) - - return ( - package_set, - check_package_set( - package_set, should_ignore=lambda name: name not in whitelist - ), - ) - - -def check_unsupported( - packages: Iterable[BaseDistribution], - supported_tags: Iterable[Tag], -) -> Generator[BaseDistribution, None, None]: - for p in packages: - with suppress(FileNotFoundError): - wheel_file = p.read_text("WHEEL") - wheel_tags: FrozenSet[Tag] = reduce( - frozenset.union, - map(parse_tag, Parser().parsestr(wheel_file).get_all("Tag", [])), - frozenset(), - ) - if wheel_tags.isdisjoint(supported_tags): - yield p - - -def _simulate_installation_of( - to_install: List[InstallRequirement], package_set: PackageSet -) -> Set[NormalizedName]: - """Computes the version of packages after installing to_install.""" - # Keep track of packages that were installed - installed = set() - - # Modify it as installing requirement_set would (assuming no errors) - for inst_req in to_install: - abstract_dist = make_distribution_for_install_requirement(inst_req) - dist = abstract_dist.get_metadata_distribution() - name = dist.canonical_name - package_set[name] = PackageDetails(dist.version, list(dist.iter_dependencies())) - - installed.add(name) - - return installed - - -def _create_whitelist( - would_be_installed: Set[NormalizedName], package_set: PackageSet -) -> Set[NormalizedName]: - packages_affected = set(would_be_installed) - - for package_name in package_set: - if package_name in packages_affected: - continue - - for req in package_set[package_name].dependencies: - if canonicalize_name(req.name) in packages_affected: - packages_affected.add(package_name) - break - - return packages_affected diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py deleted file mode 100644 index ae5dd37..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py +++ /dev/null @@ -1,256 +0,0 @@ -import collections -import logging -import os -from dataclasses import dataclass, field -from typing import Container, Dict, Generator, Iterable, List, NamedTuple, Optional, Set - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import InvalidVersion - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, -) -from pip._internal.req.req_file import COMMENT_RE -from pip._internal.utils.direct_url_helpers import direct_url_as_pep440_direct_reference - -logger = logging.getLogger(__name__) - - -class _EditableInfo(NamedTuple): - requirement: str - comments: List[str] - - -def freeze( - requirement: Optional[List[str]] = None, - local_only: bool = False, - user_only: bool = False, - paths: Optional[List[str]] = None, - isolated: bool = False, - exclude_editable: bool = False, - skip: Container[str] = (), -) -> Generator[str, None, None]: - installations: Dict[str, FrozenRequirement] = {} - - dists = get_environment(paths).iter_installed_distributions( - local_only=local_only, - skip=(), - user_only=user_only, - ) - for dist in dists: - req = FrozenRequirement.from_dist(dist) - if exclude_editable and req.editable: - continue - installations[req.canonical_name] = req - - if requirement: - # the options that don't get turned into an InstallRequirement - # should only be emitted once, even if the same option is in multiple - # requirements files, so we need to keep track of what has been emitted - # so that we don't emit it again if it's seen again - emitted_options: Set[str] = set() - # keep track of which files a requirement is in so that we can - # give an accurate warning if a requirement appears multiple times. - req_files: Dict[str, List[str]] = collections.defaultdict(list) - for req_file_path in requirement: - with open(req_file_path) as req_file: - for line in req_file: - if ( - not line.strip() - or line.strip().startswith("#") - or line.startswith( - ( - "-r", - "--requirement", - "-f", - "--find-links", - "-i", - "--index-url", - "--pre", - "--trusted-host", - "--process-dependency-links", - "--extra-index-url", - "--use-feature", - ) - ) - ): - line = line.rstrip() - if line not in emitted_options: - emitted_options.add(line) - yield line - continue - - if line.startswith("-e") or line.startswith("--editable"): - if line.startswith("-e"): - line = line[2:].strip() - else: - line = line[len("--editable") :].strip().lstrip("=") - line_req = install_req_from_editable( - line, - isolated=isolated, - ) - else: - line_req = install_req_from_line( - COMMENT_RE.sub("", line).strip(), - isolated=isolated, - ) - - if not line_req.name: - logger.info( - "Skipping line in requirement file [%s] because " - "it's not clear what it would install: %s", - req_file_path, - line.strip(), - ) - logger.info( - " (add #egg=PackageName to the URL to avoid" - " this warning)" - ) - else: - line_req_canonical_name = canonicalize_name(line_req.name) - if line_req_canonical_name not in installations: - # either it's not installed, or it is installed - # but has been processed already - if not req_files[line_req.name]: - logger.warning( - "Requirement file [%s] contains %s, but " - "package %r is not installed", - req_file_path, - COMMENT_RE.sub("", line).strip(), - line_req.name, - ) - else: - req_files[line_req.name].append(req_file_path) - else: - yield str(installations[line_req_canonical_name]).rstrip() - del installations[line_req_canonical_name] - req_files[line_req.name].append(req_file_path) - - # Warn about requirements that were included multiple times (in a - # single requirements file or in different requirements files). - for name, files in req_files.items(): - if len(files) > 1: - logger.warning( - "Requirement %s included multiple times [%s]", - name, - ", ".join(sorted(set(files))), - ) - - yield ("## The following requirements were added by pip freeze:") - for installation in sorted(installations.values(), key=lambda x: x.name.lower()): - if installation.canonical_name not in skip: - yield str(installation).rstrip() - - -def _format_as_name_version(dist: BaseDistribution) -> str: - try: - dist_version = dist.version - except InvalidVersion: - # legacy version - return f"{dist.raw_name}==={dist.raw_version}" - else: - return f"{dist.raw_name}=={dist_version}" - - -def _get_editable_info(dist: BaseDistribution) -> _EditableInfo: - """ - Compute and return values (req, comments) for use in - FrozenRequirement.from_dist(). - """ - editable_project_location = dist.editable_project_location - assert editable_project_location - location = os.path.normcase(os.path.abspath(editable_project_location)) - - from pip._internal.vcs import RemoteNotFoundError, RemoteNotValidError, vcs - - vcs_backend = vcs.get_backend_for_dir(location) - - if vcs_backend is None: - display = _format_as_name_version(dist) - logger.debug( - 'No VCS found for editable requirement "%s" in: %r', - display, - location, - ) - return _EditableInfo( - requirement=location, - comments=[f"# Editable install with no version control ({display})"], - ) - - vcs_name = type(vcs_backend).__name__ - - try: - req = vcs_backend.get_src_requirement(location, dist.raw_name) - except RemoteNotFoundError: - display = _format_as_name_version(dist) - return _EditableInfo( - requirement=location, - comments=[f"# Editable {vcs_name} install with no remote ({display})"], - ) - except RemoteNotValidError as ex: - display = _format_as_name_version(dist) - return _EditableInfo( - requirement=location, - comments=[ - f"# Editable {vcs_name} install ({display}) with either a deleted " - f"local remote or invalid URI:", - f"# '{ex.url}'", - ], - ) - except BadCommand: - logger.warning( - "cannot determine version of editable source in %s " - "(%s command not found in path)", - location, - vcs_backend.name, - ) - return _EditableInfo(requirement=location, comments=[]) - except InstallationError as exc: - logger.warning("Error when trying to get requirement for VCS system %s", exc) - else: - return _EditableInfo(requirement=req, comments=[]) - - logger.warning("Could not determine repository location of %s", location) - - return _EditableInfo( - requirement=location, - comments=["## !! Could not determine repository location"], - ) - - -@dataclass(frozen=True) -class FrozenRequirement: - name: str - req: str - editable: bool - comments: Iterable[str] = field(default_factory=tuple) - - @property - def canonical_name(self) -> NormalizedName: - return canonicalize_name(self.name) - - @classmethod - def from_dist(cls, dist: BaseDistribution) -> "FrozenRequirement": - editable = dist.editable - if editable: - req, comments = _get_editable_info(dist) - else: - comments = [] - direct_url = dist.direct_url - if direct_url: - # if PEP 610 metadata is present, use it - req = direct_url_as_pep440_direct_reference(direct_url, dist.raw_name) - else: - # name==version requirement - req = _format_as_name_version(dist) - - return cls(dist.raw_name, req, editable, comments=comments) - - def __str__(self) -> str: - req = self.req - if self.editable: - req = f"-e {req}" - return "\n".join(list(self.comments) + [str(req)]) + "\n" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py deleted file mode 100644 index 24d6a5d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""For modules related to installing packages. -""" diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1dcb68e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc deleted file mode 100644 index 7935daa..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index 9c320cb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py deleted file mode 100644 index 9aaa699..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py +++ /dev/null @@ -1,47 +0,0 @@ -"""Legacy editable installation process, i.e. `setup.py develop`. -""" - -import logging -from typing import Optional, Sequence - -from pip._internal.build_env import BuildEnvironment -from pip._internal.utils.logging import indent_log -from pip._internal.utils.setuptools_build import make_setuptools_develop_args -from pip._internal.utils.subprocess import call_subprocess - -logger = logging.getLogger(__name__) - - -def install_editable( - *, - global_options: Sequence[str], - prefix: Optional[str], - home: Optional[str], - use_user_site: bool, - name: str, - setup_py_path: str, - isolated: bool, - build_env: BuildEnvironment, - unpacked_source_directory: str, -) -> None: - """Install a package in editable mode. Most arguments are pass-through - to setuptools. - """ - logger.info("Running setup.py develop for %s", name) - - args = make_setuptools_develop_args( - setup_py_path, - global_options=global_options, - no_user_config=isolated, - prefix=prefix, - home=home, - use_user_site=use_user_site, - ) - - with indent_log(): - with build_env: - call_subprocess( - args, - command_desc="python setup.py develop", - cwd=unpacked_source_directory, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py deleted file mode 100644 index aef42aa..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py +++ /dev/null @@ -1,741 +0,0 @@ -"""Support for installing and building the "wheel" binary package format. -""" - -import collections -import compileall -import contextlib -import csv -import importlib -import logging -import os.path -import re -import shutil -import sys -import warnings -from base64 import urlsafe_b64encode -from email.message import Message -from itertools import chain, filterfalse, starmap -from typing import ( - IO, - TYPE_CHECKING, - Any, - BinaryIO, - Callable, - Dict, - Generator, - Iterable, - Iterator, - List, - NewType, - Optional, - Protocol, - Sequence, - Set, - Tuple, - Union, - cast, -) -from zipfile import ZipFile, ZipInfo - -from pip._vendor.distlib.scripts import ScriptMaker -from pip._vendor.distlib.util import get_export_entry -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import InstallationError -from pip._internal.locations import get_major_minor_version -from pip._internal.metadata import ( - BaseDistribution, - FilesystemWheel, - get_wheel_distribution, -) -from pip._internal.models.direct_url import DIRECT_URL_METADATA_NAME, DirectUrl -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.filesystem import adjacent_tmp_file, replace -from pip._internal.utils.misc import StreamWrapper, ensure_dir, hash_file, partition -from pip._internal.utils.unpacking import ( - current_umask, - is_within_directory, - set_extracted_file_to_default_mode_plus_executable, - zip_item_is_executable, -) -from pip._internal.utils.wheel import parse_wheel - -if TYPE_CHECKING: - - class File(Protocol): - src_record_path: "RecordPath" - dest_path: str - changed: bool - - def save(self) -> None: - pass - - -logger = logging.getLogger(__name__) - -RecordPath = NewType("RecordPath", str) -InstalledCSVRow = Tuple[RecordPath, str, Union[int, str]] - - -def rehash(path: str, blocksize: int = 1 << 20) -> Tuple[str, str]: - """Return (encoded_digest, length) for path using hashlib.sha256()""" - h, length = hash_file(path, blocksize) - digest = "sha256=" + urlsafe_b64encode(h.digest()).decode("latin1").rstrip("=") - return (digest, str(length)) - - -def csv_io_kwargs(mode: str) -> Dict[str, Any]: - """Return keyword arguments to properly open a CSV file - in the given mode. - """ - return {"mode": mode, "newline": "", "encoding": "utf-8"} - - -def fix_script(path: str) -> bool: - """Replace #!python with #!/path/to/python - Return True if file was changed. - """ - # XXX RECORD hashes will need to be updated - assert os.path.isfile(path) - - with open(path, "rb") as script: - firstline = script.readline() - if not firstline.startswith(b"#!python"): - return False - exename = sys.executable.encode(sys.getfilesystemencoding()) - firstline = b"#!" + exename + os.linesep.encode("ascii") - rest = script.read() - with open(path, "wb") as script: - script.write(firstline) - script.write(rest) - return True - - -def wheel_root_is_purelib(metadata: Message) -> bool: - return metadata.get("Root-Is-Purelib", "").lower() == "true" - - -def get_entrypoints(dist: BaseDistribution) -> Tuple[Dict[str, str], Dict[str, str]]: - console_scripts = {} - gui_scripts = {} - for entry_point in dist.iter_entry_points(): - if entry_point.group == "console_scripts": - console_scripts[entry_point.name] = entry_point.value - elif entry_point.group == "gui_scripts": - gui_scripts[entry_point.name] = entry_point.value - return console_scripts, gui_scripts - - -def message_about_scripts_not_on_PATH(scripts: Sequence[str]) -> Optional[str]: - """Determine if any scripts are not on PATH and format a warning. - Returns a warning message if one or more scripts are not on PATH, - otherwise None. - """ - if not scripts: - return None - - # Group scripts by the path they were installed in - grouped_by_dir: Dict[str, Set[str]] = collections.defaultdict(set) - for destfile in scripts: - parent_dir = os.path.dirname(destfile) - script_name = os.path.basename(destfile) - grouped_by_dir[parent_dir].add(script_name) - - # We don't want to warn for directories that are on PATH. - not_warn_dirs = [ - os.path.normcase(os.path.normpath(i)).rstrip(os.sep) - for i in os.environ.get("PATH", "").split(os.pathsep) - ] - # If an executable sits with sys.executable, we don't warn for it. - # This covers the case of venv invocations without activating the venv. - not_warn_dirs.append( - os.path.normcase(os.path.normpath(os.path.dirname(sys.executable))) - ) - warn_for: Dict[str, Set[str]] = { - parent_dir: scripts - for parent_dir, scripts in grouped_by_dir.items() - if os.path.normcase(os.path.normpath(parent_dir)) not in not_warn_dirs - } - if not warn_for: - return None - - # Format a message - msg_lines = [] - for parent_dir, dir_scripts in warn_for.items(): - sorted_scripts: List[str] = sorted(dir_scripts) - if len(sorted_scripts) == 1: - start_text = f"script {sorted_scripts[0]} is" - else: - start_text = "scripts {} are".format( - ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] - ) - - msg_lines.append( - f"The {start_text} installed in '{parent_dir}' which is not on PATH." - ) - - last_line_fmt = ( - "Consider adding {} to PATH or, if you prefer " - "to suppress this warning, use --no-warn-script-location." - ) - if len(msg_lines) == 1: - msg_lines.append(last_line_fmt.format("this directory")) - else: - msg_lines.append(last_line_fmt.format("these directories")) - - # Add a note if any directory starts with ~ - warn_for_tilde = any( - i[0] == "~" for i in os.environ.get("PATH", "").split(os.pathsep) if i - ) - if warn_for_tilde: - tilde_warning_msg = ( - "NOTE: The current PATH contains path(s) starting with `~`, " - "which may not be expanded by all applications." - ) - msg_lines.append(tilde_warning_msg) - - # Returns the formatted multiline message - return "\n".join(msg_lines) - - -def _normalized_outrows( - outrows: Iterable[InstalledCSVRow], -) -> List[Tuple[str, str, str]]: - """Normalize the given rows of a RECORD file. - - Items in each row are converted into str. Rows are then sorted to make - the value more predictable for tests. - - Each row is a 3-tuple (path, hash, size) and corresponds to a record of - a RECORD file (see PEP 376 and PEP 427 for details). For the rows - passed to this function, the size can be an integer as an int or string, - or the empty string. - """ - # Normally, there should only be one row per path, in which case the - # second and third elements don't come into play when sorting. - # However, in cases in the wild where a path might happen to occur twice, - # we don't want the sort operation to trigger an error (but still want - # determinism). Since the third element can be an int or string, we - # coerce each element to a string to avoid a TypeError in this case. - # For additional background, see-- - # https://github.com/pypa/pip/issues/5868 - return sorted( - (record_path, hash_, str(size)) for record_path, hash_, size in outrows - ) - - -def _record_to_fs_path(record_path: RecordPath, lib_dir: str) -> str: - return os.path.join(lib_dir, record_path) - - -def _fs_to_record_path(path: str, lib_dir: str) -> RecordPath: - # On Windows, do not handle relative paths if they belong to different - # logical disks - if os.path.splitdrive(path)[0].lower() == os.path.splitdrive(lib_dir)[0].lower(): - path = os.path.relpath(path, lib_dir) - - path = path.replace(os.path.sep, "/") - return cast("RecordPath", path) - - -def get_csv_rows_for_installed( - old_csv_rows: List[List[str]], - installed: Dict[RecordPath, RecordPath], - changed: Set[RecordPath], - generated: List[str], - lib_dir: str, -) -> List[InstalledCSVRow]: - """ - :param installed: A map from archive RECORD path to installation RECORD - path. - """ - installed_rows: List[InstalledCSVRow] = [] - for row in old_csv_rows: - if len(row) > 3: - logger.warning("RECORD line has more than three elements: %s", row) - old_record_path = cast("RecordPath", row[0]) - new_record_path = installed.pop(old_record_path, old_record_path) - if new_record_path in changed: - digest, length = rehash(_record_to_fs_path(new_record_path, lib_dir)) - else: - digest = row[1] if len(row) > 1 else "" - length = row[2] if len(row) > 2 else "" - installed_rows.append((new_record_path, digest, length)) - for f in generated: - path = _fs_to_record_path(f, lib_dir) - digest, length = rehash(f) - installed_rows.append((path, digest, length)) - return installed_rows + [ - (installed_record_path, "", "") for installed_record_path in installed.values() - ] - - -def get_console_script_specs(console: Dict[str, str]) -> List[str]: - """ - Given the mapping from entrypoint name to callable, return the relevant - console script specs. - """ - # Don't mutate caller's version - console = console.copy() - - scripts_to_generate = [] - - # Special case pip and setuptools to generate versioned wrappers - # - # The issue is that some projects (specifically, pip and setuptools) use - # code in setup.py to create "versioned" entry points - pip2.7 on Python - # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into - # the wheel metadata at build time, and so if the wheel is installed with - # a *different* version of Python the entry points will be wrong. The - # correct fix for this is to enhance the metadata to be able to describe - # such versioned entry points. - # Currently, projects using versioned entry points will either have - # incorrect versioned entry points, or they will not be able to distribute - # "universal" wheels (i.e., they will need a wheel per Python version). - # - # Because setuptools and pip are bundled with _ensurepip and virtualenv, - # we need to use universal wheels. As a workaround, we - # override the versioned entry points in the wheel and generate the - # correct ones. - # - # To add the level of hack in this section of code, in order to support - # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment - # variable which will control which version scripts get installed. - # - # ENSUREPIP_OPTIONS=altinstall - # - Only pipX.Y and easy_install-X.Y will be generated and installed - # ENSUREPIP_OPTIONS=install - # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note - # that this option is technically if ENSUREPIP_OPTIONS is set and is - # not altinstall - # DEFAULT - # - The default behavior is to install pip, pipX, pipX.Y, easy_install - # and easy_install-X.Y. - pip_script = console.pop("pip", None) - if pip_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - scripts_to_generate.append("pip = " + pip_script) - - if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": - scripts_to_generate.append(f"pip{sys.version_info[0]} = {pip_script}") - - scripts_to_generate.append(f"pip{get_major_minor_version()} = {pip_script}") - # Delete any other versioned pip entry points - pip_ep = [k for k in console if re.match(r"pip(\d+(\.\d+)?)?$", k)] - for k in pip_ep: - del console[k] - easy_install_script = console.pop("easy_install", None) - if easy_install_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - scripts_to_generate.append("easy_install = " + easy_install_script) - - scripts_to_generate.append( - f"easy_install-{get_major_minor_version()} = {easy_install_script}" - ) - # Delete any other versioned easy_install entry points - easy_install_ep = [ - k for k in console if re.match(r"easy_install(-\d+\.\d+)?$", k) - ] - for k in easy_install_ep: - del console[k] - - # Generate the console entry points specified in the wheel - scripts_to_generate.extend(starmap("{} = {}".format, console.items())) - - return scripts_to_generate - - -class ZipBackedFile: - def __init__( - self, src_record_path: RecordPath, dest_path: str, zip_file: ZipFile - ) -> None: - self.src_record_path = src_record_path - self.dest_path = dest_path - self._zip_file = zip_file - self.changed = False - - def _getinfo(self) -> ZipInfo: - return self._zip_file.getinfo(self.src_record_path) - - def save(self) -> None: - # When we open the output file below, any existing file is truncated - # before we start writing the new contents. This is fine in most - # cases, but can cause a segfault if pip has loaded a shared - # object (e.g. from pyopenssl through its vendored urllib3) - # Since the shared object is mmap'd an attempt to call a - # symbol in it will then cause a segfault. Unlinking the file - # allows writing of new contents while allowing the process to - # continue to use the old copy. - if os.path.exists(self.dest_path): - os.unlink(self.dest_path) - - zipinfo = self._getinfo() - - # optimization: the file is created by open(), - # skip the decompression when there is 0 bytes to decompress. - with open(self.dest_path, "wb") as dest: - if zipinfo.file_size > 0: - with self._zip_file.open(zipinfo) as f: - blocksize = min(zipinfo.file_size, 1024 * 1024) - shutil.copyfileobj(f, dest, blocksize) - - if zip_item_is_executable(zipinfo): - set_extracted_file_to_default_mode_plus_executable(self.dest_path) - - -class ScriptFile: - def __init__(self, file: "File") -> None: - self._file = file - self.src_record_path = self._file.src_record_path - self.dest_path = self._file.dest_path - self.changed = False - - def save(self) -> None: - self._file.save() - self.changed = fix_script(self.dest_path) - - -class MissingCallableSuffix(InstallationError): - def __init__(self, entry_point: str) -> None: - super().__init__( - f"Invalid script entry point: {entry_point} - A callable " - "suffix is required. Cf https://packaging.python.org/" - "specifications/entry-points/#use-for-scripts for more " - "information." - ) - - -def _raise_for_invalid_entrypoint(specification: str) -> None: - entry = get_export_entry(specification) - if entry is not None and entry.suffix is None: - raise MissingCallableSuffix(str(entry)) - - -class PipScriptMaker(ScriptMaker): - def make( - self, specification: str, options: Optional[Dict[str, Any]] = None - ) -> List[str]: - _raise_for_invalid_entrypoint(specification) - return super().make(specification, options) - - -def _install_wheel( # noqa: C901, PLR0915 function is too long - name: str, - wheel_zip: ZipFile, - wheel_path: str, - scheme: Scheme, - pycompile: bool = True, - warn_script_location: bool = True, - direct_url: Optional[DirectUrl] = None, - requested: bool = False, -) -> None: - """Install a wheel. - - :param name: Name of the project to install - :param wheel_zip: open ZipFile for wheel being installed - :param scheme: Distutils scheme dictating the install directories - :param req_description: String used in place of the requirement, for - logging - :param pycompile: Whether to byte-compile installed Python files - :param warn_script_location: Whether to check that scripts are installed - into a directory on PATH - :raises UnsupportedWheel: - * when the directory holds an unpacked wheel with incompatible - Wheel-Version - * when the .dist-info dir does not match the wheel - """ - info_dir, metadata = parse_wheel(wheel_zip, name) - - if wheel_root_is_purelib(metadata): - lib_dir = scheme.purelib - else: - lib_dir = scheme.platlib - - # Record details of the files moved - # installed = files copied from the wheel to the destination - # changed = files changed while installing (scripts #! line typically) - # generated = files newly generated during the install (script wrappers) - installed: Dict[RecordPath, RecordPath] = {} - changed: Set[RecordPath] = set() - generated: List[str] = [] - - def record_installed( - srcfile: RecordPath, destfile: str, modified: bool = False - ) -> None: - """Map archive RECORD paths to installation RECORD paths.""" - newpath = _fs_to_record_path(destfile, lib_dir) - installed[srcfile] = newpath - if modified: - changed.add(newpath) - - def is_dir_path(path: RecordPath) -> bool: - return path.endswith("/") - - def assert_no_path_traversal(dest_dir_path: str, target_path: str) -> None: - if not is_within_directory(dest_dir_path, target_path): - message = ( - "The wheel {!r} has a file {!r} trying to install" - " outside the target directory {!r}" - ) - raise InstallationError( - message.format(wheel_path, target_path, dest_dir_path) - ) - - def root_scheme_file_maker( - zip_file: ZipFile, dest: str - ) -> Callable[[RecordPath], "File"]: - def make_root_scheme_file(record_path: RecordPath) -> "File": - normed_path = os.path.normpath(record_path) - dest_path = os.path.join(dest, normed_path) - assert_no_path_traversal(dest, dest_path) - return ZipBackedFile(record_path, dest_path, zip_file) - - return make_root_scheme_file - - def data_scheme_file_maker( - zip_file: ZipFile, scheme: Scheme - ) -> Callable[[RecordPath], "File"]: - scheme_paths = {key: getattr(scheme, key) for key in SCHEME_KEYS} - - def make_data_scheme_file(record_path: RecordPath) -> "File": - normed_path = os.path.normpath(record_path) - try: - _, scheme_key, dest_subpath = normed_path.split(os.path.sep, 2) - except ValueError: - message = ( - f"Unexpected file in {wheel_path}: {record_path!r}. .data directory" - " contents should be named like: '/'." - ) - raise InstallationError(message) - - try: - scheme_path = scheme_paths[scheme_key] - except KeyError: - valid_scheme_keys = ", ".join(sorted(scheme_paths)) - message = ( - f"Unknown scheme key used in {wheel_path}: {scheme_key} " - f"(for file {record_path!r}). .data directory contents " - f"should be in subdirectories named with a valid scheme " - f"key ({valid_scheme_keys})" - ) - raise InstallationError(message) - - dest_path = os.path.join(scheme_path, dest_subpath) - assert_no_path_traversal(scheme_path, dest_path) - return ZipBackedFile(record_path, dest_path, zip_file) - - return make_data_scheme_file - - def is_data_scheme_path(path: RecordPath) -> bool: - return path.split("/", 1)[0].endswith(".data") - - paths = cast(List[RecordPath], wheel_zip.namelist()) - file_paths = filterfalse(is_dir_path, paths) - root_scheme_paths, data_scheme_paths = partition(is_data_scheme_path, file_paths) - - make_root_scheme_file = root_scheme_file_maker(wheel_zip, lib_dir) - files: Iterator[File] = map(make_root_scheme_file, root_scheme_paths) - - def is_script_scheme_path(path: RecordPath) -> bool: - parts = path.split("/", 2) - return len(parts) > 2 and parts[0].endswith(".data") and parts[1] == "scripts" - - other_scheme_paths, script_scheme_paths = partition( - is_script_scheme_path, data_scheme_paths - ) - - make_data_scheme_file = data_scheme_file_maker(wheel_zip, scheme) - other_scheme_files = map(make_data_scheme_file, other_scheme_paths) - files = chain(files, other_scheme_files) - - # Get the defined entry points - distribution = get_wheel_distribution( - FilesystemWheel(wheel_path), - canonicalize_name(name), - ) - console, gui = get_entrypoints(distribution) - - def is_entrypoint_wrapper(file: "File") -> bool: - # EP, EP.exe and EP-script.py are scripts generated for - # entry point EP by setuptools - path = file.dest_path - name = os.path.basename(path) - if name.lower().endswith(".exe"): - matchname = name[:-4] - elif name.lower().endswith("-script.py"): - matchname = name[:-10] - elif name.lower().endswith(".pya"): - matchname = name[:-4] - else: - matchname = name - # Ignore setuptools-generated scripts - return matchname in console or matchname in gui - - script_scheme_files: Iterator[File] = map( - make_data_scheme_file, script_scheme_paths - ) - script_scheme_files = filterfalse(is_entrypoint_wrapper, script_scheme_files) - script_scheme_files = map(ScriptFile, script_scheme_files) - files = chain(files, script_scheme_files) - - existing_parents = set() - for file in files: - # directory creation is lazy and after file filtering - # to ensure we don't install empty dirs; empty dirs can't be - # uninstalled. - parent_dir = os.path.dirname(file.dest_path) - if parent_dir not in existing_parents: - ensure_dir(parent_dir) - existing_parents.add(parent_dir) - file.save() - record_installed(file.src_record_path, file.dest_path, file.changed) - - def pyc_source_file_paths() -> Generator[str, None, None]: - # We de-duplicate installation paths, since there can be overlap (e.g. - # file in .data maps to same location as file in wheel root). - # Sorting installation paths makes it easier to reproduce and debug - # issues related to permissions on existing files. - for installed_path in sorted(set(installed.values())): - full_installed_path = os.path.join(lib_dir, installed_path) - if not os.path.isfile(full_installed_path): - continue - if not full_installed_path.endswith(".py"): - continue - yield full_installed_path - - def pyc_output_path(path: str) -> str: - """Return the path the pyc file would have been written to.""" - return importlib.util.cache_from_source(path) - - # Compile all of the pyc files for the installed files - if pycompile: - with contextlib.redirect_stdout( - StreamWrapper.from_stream(sys.stdout) - ) as stdout: - with warnings.catch_warnings(): - warnings.filterwarnings("ignore") - for path in pyc_source_file_paths(): - success = compileall.compile_file(path, force=True, quiet=True) - if success: - pyc_path = pyc_output_path(path) - assert os.path.exists(pyc_path) - pyc_record_path = cast( - "RecordPath", pyc_path.replace(os.path.sep, "/") - ) - record_installed(pyc_record_path, pyc_path) - logger.debug(stdout.getvalue()) - - maker = PipScriptMaker(None, scheme.scripts) - - # Ensure old scripts are overwritten. - # See https://github.com/pypa/pip/issues/1800 - maker.clobber = True - - # Ensure we don't generate any variants for scripts because this is almost - # never what somebody wants. - # See https://bitbucket.org/pypa/distlib/issue/35/ - maker.variants = {""} - - # This is required because otherwise distlib creates scripts that are not - # executable. - # See https://bitbucket.org/pypa/distlib/issue/32/ - maker.set_mode = True - - # Generate the console and GUI entry points specified in the wheel - scripts_to_generate = get_console_script_specs(console) - - gui_scripts_to_generate = list(starmap("{} = {}".format, gui.items())) - - generated_console_scripts = maker.make_multiple(scripts_to_generate) - generated.extend(generated_console_scripts) - - generated.extend(maker.make_multiple(gui_scripts_to_generate, {"gui": True})) - - if warn_script_location: - msg = message_about_scripts_not_on_PATH(generated_console_scripts) - if msg is not None: - logger.warning(msg) - - generated_file_mode = 0o666 & ~current_umask() - - @contextlib.contextmanager - def _generate_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: - with adjacent_tmp_file(path, **kwargs) as f: - yield f - os.chmod(f.name, generated_file_mode) - replace(f.name, path) - - dest_info_dir = os.path.join(lib_dir, info_dir) - - # Record pip as the installer - installer_path = os.path.join(dest_info_dir, "INSTALLER") - with _generate_file(installer_path) as installer_file: - installer_file.write(b"pip\n") - generated.append(installer_path) - - # Record the PEP 610 direct URL reference - if direct_url is not None: - direct_url_path = os.path.join(dest_info_dir, DIRECT_URL_METADATA_NAME) - with _generate_file(direct_url_path) as direct_url_file: - direct_url_file.write(direct_url.to_json().encode("utf-8")) - generated.append(direct_url_path) - - # Record the REQUESTED file - if requested: - requested_path = os.path.join(dest_info_dir, "REQUESTED") - with open(requested_path, "wb"): - pass - generated.append(requested_path) - - record_text = distribution.read_text("RECORD") - record_rows = list(csv.reader(record_text.splitlines())) - - rows = get_csv_rows_for_installed( - record_rows, - installed=installed, - changed=changed, - generated=generated, - lib_dir=lib_dir, - ) - - # Record details of all files installed - record_path = os.path.join(dest_info_dir, "RECORD") - - with _generate_file(record_path, **csv_io_kwargs("w")) as record_file: - # Explicitly cast to typing.IO[str] as a workaround for the mypy error: - # "writer" has incompatible type "BinaryIO"; expected "_Writer" - writer = csv.writer(cast("IO[str]", record_file)) - writer.writerows(_normalized_outrows(rows)) - - -@contextlib.contextmanager -def req_error_context(req_description: str) -> Generator[None, None, None]: - try: - yield - except InstallationError as e: - message = f"For req: {req_description}. {e.args[0]}" - raise InstallationError(message) from e - - -def install_wheel( - name: str, - wheel_path: str, - scheme: Scheme, - req_description: str, - pycompile: bool = True, - warn_script_location: bool = True, - direct_url: Optional[DirectUrl] = None, - requested: bool = False, -) -> None: - with ZipFile(wheel_path, allowZip64=True) as z: - with req_error_context(req_description): - _install_wheel( - name=name, - wheel_zip=z, - wheel_path=wheel_path, - scheme=scheme, - pycompile=pycompile, - warn_script_location=warn_script_location, - direct_url=direct_url, - requested=requested, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py b/myenv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py deleted file mode 100644 index e6aa344..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py +++ /dev/null @@ -1,732 +0,0 @@ -"""Prepares a distribution for installation -""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False - -import mimetypes -import os -import shutil -from dataclasses import dataclass -from pathlib import Path -from typing import Dict, Iterable, List, Optional - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.distributions import make_distribution_for_install_requirement -from pip._internal.distributions.installed import InstalledDistribution -from pip._internal.exceptions import ( - DirectoryUrlHashUnsupported, - HashMismatch, - HashUnpinned, - InstallationError, - MetadataInconsistent, - NetworkConnectionError, - VcsHashUnsupported, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution, get_metadata_distribution -from pip._internal.models.direct_url import ArchiveInfo -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.network.download import BatchDownloader, Downloader -from pip._internal.network.lazy_wheel import ( - HTTPRangeRequestUnsupported, - dist_from_wheel_url, -) -from pip._internal.network.session import PipSession -from pip._internal.operations.build.build_tracker import BuildTracker -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils._log import getLogger -from pip._internal.utils.direct_url_helpers import ( - direct_url_for_editable, - direct_url_from_link, -) -from pip._internal.utils.hashes import Hashes, MissingHashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - display_path, - hash_file, - hide_url, - redact_auth_from_requirement, -) -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.unpacking import unpack_file -from pip._internal.vcs import vcs - -logger = getLogger(__name__) - - -def _get_prepared_distribution( - req: InstallRequirement, - build_tracker: BuildTracker, - finder: PackageFinder, - build_isolation: bool, - check_build_deps: bool, -) -> BaseDistribution: - """Prepare a distribution for installation.""" - abstract_dist = make_distribution_for_install_requirement(req) - tracker_id = abstract_dist.build_tracker_id - if tracker_id is not None: - with build_tracker.track(req, tracker_id): - abstract_dist.prepare_distribution_metadata( - finder, build_isolation, check_build_deps - ) - return abstract_dist.get_metadata_distribution() - - -def unpack_vcs_link(link: Link, location: str, verbosity: int) -> None: - vcs_backend = vcs.get_backend_for_scheme(link.scheme) - assert vcs_backend is not None - vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity) - - -@dataclass -class File: - path: str - content_type: Optional[str] = None - - def __post_init__(self) -> None: - if self.content_type is None: - self.content_type = mimetypes.guess_type(self.path)[0] - - -def get_http_url( - link: Link, - download: Downloader, - download_dir: Optional[str] = None, - hashes: Optional[Hashes] = None, -) -> File: - temp_dir = TempDirectory(kind="unpack", globally_managed=True) - # If a download dir is specified, is the file already downloaded there? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, download_dir, hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - content_type = None - else: - # let's download to a tmp dir - from_path, content_type = download(link, temp_dir.path) - if hashes: - hashes.check_against_path(from_path) - - return File(from_path, content_type) - - -def get_file_url( - link: Link, download_dir: Optional[str] = None, hashes: Optional[Hashes] = None -) -> File: - """Get file and optionally check its hash.""" - # If a download dir is specified, is the file already there and valid? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, download_dir, hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - else: - from_path = link.file_path - - # If --require-hashes is off, `hashes` is either empty, the - # link's embedded hash, or MissingHashes; it is required to - # match. If --require-hashes is on, we are satisfied by any - # hash in `hashes` matching: a URL-based or an option-based - # one; no internet-sourced hash will be in `hashes`. - if hashes: - hashes.check_against_path(from_path) - return File(from_path, None) - - -def unpack_url( - link: Link, - location: str, - download: Downloader, - verbosity: int, - download_dir: Optional[str] = None, - hashes: Optional[Hashes] = None, -) -> Optional[File]: - """Unpack link into location, downloading if required. - - :param hashes: A Hashes object, one of whose embedded hashes must match, - or HashMismatch will be raised. If the Hashes is empty, no matches are - required, and unhashable types of requirements (like VCS ones, which - would ordinarily raise HashUnsupported) are allowed. - """ - # non-editable vcs urls - if link.is_vcs: - unpack_vcs_link(link, location, verbosity=verbosity) - return None - - assert not link.is_existing_dir() - - # file urls - if link.is_file: - file = get_file_url(link, download_dir, hashes=hashes) - - # http urls - else: - file = get_http_url( - link, - download, - download_dir, - hashes=hashes, - ) - - # unpack the archive to the build dir location. even when only downloading - # archives, they have to be unpacked to parse dependencies, except wheels - if not link.is_wheel: - unpack_file(file.path, location, file.content_type) - - return file - - -def _check_download_dir( - link: Link, - download_dir: str, - hashes: Optional[Hashes], - warn_on_hash_mismatch: bool = True, -) -> Optional[str]: - """Check download_dir for previously downloaded file with correct hash - If a correct file is found return its path else None - """ - download_path = os.path.join(download_dir, link.filename) - - if not os.path.exists(download_path): - return None - - # If already downloaded, does its hash match? - logger.info("File was already downloaded %s", download_path) - if hashes: - try: - hashes.check_against_path(download_path) - except HashMismatch: - if warn_on_hash_mismatch: - logger.warning( - "Previously-downloaded file %s has bad hash. Re-downloading.", - download_path, - ) - os.unlink(download_path) - return None - return download_path - - -class RequirementPreparer: - """Prepares a Requirement""" - - def __init__( - self, - build_dir: str, - download_dir: Optional[str], - src_dir: str, - build_isolation: bool, - check_build_deps: bool, - build_tracker: BuildTracker, - session: PipSession, - progress_bar: str, - finder: PackageFinder, - require_hashes: bool, - use_user_site: bool, - lazy_wheel: bool, - verbosity: int, - legacy_resolver: bool, - ) -> None: - super().__init__() - - self.src_dir = src_dir - self.build_dir = build_dir - self.build_tracker = build_tracker - self._session = session - self._download = Downloader(session, progress_bar) - self._batch_download = BatchDownloader(session, progress_bar) - self.finder = finder - - # Where still-packed archives should be written to. If None, they are - # not saved, and are deleted immediately after unpacking. - self.download_dir = download_dir - - # Is build isolation allowed? - self.build_isolation = build_isolation - - # Should check build dependencies? - self.check_build_deps = check_build_deps - - # Should hash-checking be required? - self.require_hashes = require_hashes - - # Should install in user site-packages? - self.use_user_site = use_user_site - - # Should wheels be downloaded lazily? - self.use_lazy_wheel = lazy_wheel - - # How verbose should underlying tooling be? - self.verbosity = verbosity - - # Are we using the legacy resolver? - self.legacy_resolver = legacy_resolver - - # Memoized downloaded files, as mapping of url: path. - self._downloaded: Dict[str, str] = {} - - # Previous "header" printed for a link-based InstallRequirement - self._previous_requirement_header = ("", "") - - def _log_preparing_link(self, req: InstallRequirement) -> None: - """Provide context for the requirement being prepared.""" - if req.link.is_file and not req.is_wheel_from_cache: - message = "Processing %s" - information = str(display_path(req.link.file_path)) - else: - message = "Collecting %s" - information = redact_auth_from_requirement(req.req) if req.req else str(req) - - # If we used req.req, inject requirement source if available (this - # would already be included if we used req directly) - if req.req and req.comes_from: - if isinstance(req.comes_from, str): - comes_from: Optional[str] = req.comes_from - else: - comes_from = req.comes_from.from_path() - if comes_from: - information += f" (from {comes_from})" - - if (message, information) != self._previous_requirement_header: - self._previous_requirement_header = (message, information) - logger.info(message, information) - - if req.is_wheel_from_cache: - with indent_log(): - logger.info("Using cached %s", req.link.filename) - - def _ensure_link_req_src_dir( - self, req: InstallRequirement, parallel_builds: bool - ) -> None: - """Ensure source_dir of a linked InstallRequirement.""" - # Since source_dir is only set for editable requirements. - if req.link.is_wheel: - # We don't need to unpack wheels, so no need for a source - # directory. - return - assert req.source_dir is None - if req.link.is_existing_dir(): - # build local directories in-tree - req.source_dir = req.link.file_path - return - - # We always delete unpacked sdists after pip runs. - req.ensure_has_source_dir( - self.build_dir, - autodelete=True, - parallel_builds=parallel_builds, - ) - req.ensure_pristine_source_checkout() - - def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes: - # By the time this is called, the requirement's link should have - # been checked so we can tell what kind of requirements req is - # and raise some more informative errors than otherwise. - # (For example, we can raise VcsHashUnsupported for a VCS URL - # rather than HashMissing.) - if not self.require_hashes: - return req.hashes(trust_internet=True) - - # We could check these first 2 conditions inside unpack_url - # and save repetition of conditions, but then we would - # report less-useful error messages for unhashable - # requirements, complaining that there's no hash provided. - if req.link.is_vcs: - raise VcsHashUnsupported() - if req.link.is_existing_dir(): - raise DirectoryUrlHashUnsupported() - - # Unpinned packages are asking for trouble when a new version - # is uploaded. This isn't a security check, but it saves users - # a surprising hash mismatch in the future. - # file:/// URLs aren't pinnable, so don't complain about them - # not being pinned. - if not req.is_direct and not req.is_pinned: - raise HashUnpinned() - - # If known-good hashes are missing for this requirement, - # shim it with a facade object that will provoke hash - # computation and then raise a HashMissing exception - # showing the user what the hash should be. - return req.hashes(trust_internet=False) or MissingHashes() - - def _fetch_metadata_only( - self, - req: InstallRequirement, - ) -> Optional[BaseDistribution]: - if self.legacy_resolver: - logger.debug( - "Metadata-only fetching is not used in the legacy resolver", - ) - return None - if self.require_hashes: - logger.debug( - "Metadata-only fetching is not used as hash checking is required", - ) - return None - # Try PEP 658 metadata first, then fall back to lazy wheel if unavailable. - return self._fetch_metadata_using_link_data_attr( - req - ) or self._fetch_metadata_using_lazy_wheel(req.link) - - def _fetch_metadata_using_link_data_attr( - self, - req: InstallRequirement, - ) -> Optional[BaseDistribution]: - """Fetch metadata from the data-dist-info-metadata attribute, if possible.""" - # (1) Get the link to the metadata file, if provided by the backend. - metadata_link = req.link.metadata_link() - if metadata_link is None: - return None - assert req.req is not None - logger.verbose( - "Obtaining dependency information for %s from %s", - req.req, - metadata_link, - ) - # (2) Download the contents of the METADATA file, separate from the dist itself. - metadata_file = get_http_url( - metadata_link, - self._download, - hashes=metadata_link.as_hashes(), - ) - with open(metadata_file.path, "rb") as f: - metadata_contents = f.read() - # (3) Generate a dist just from those file contents. - metadata_dist = get_metadata_distribution( - metadata_contents, - req.link.filename, - req.req.name, - ) - # (4) Ensure the Name: field from the METADATA file matches the name from the - # install requirement. - # - # NB: raw_name will fall back to the name from the install requirement if - # the Name: field is not present, but it's noted in the raw_name docstring - # that that should NEVER happen anyway. - if canonicalize_name(metadata_dist.raw_name) != canonicalize_name(req.req.name): - raise MetadataInconsistent( - req, "Name", req.req.name, metadata_dist.raw_name - ) - return metadata_dist - - def _fetch_metadata_using_lazy_wheel( - self, - link: Link, - ) -> Optional[BaseDistribution]: - """Fetch metadata using lazy wheel, if possible.""" - # --use-feature=fast-deps must be provided. - if not self.use_lazy_wheel: - return None - if link.is_file or not link.is_wheel: - logger.debug( - "Lazy wheel is not used as %r does not point to a remote wheel", - link, - ) - return None - - wheel = Wheel(link.filename) - name = canonicalize_name(wheel.name) - logger.info( - "Obtaining dependency information from %s %s", - name, - wheel.version, - ) - url = link.url.split("#", 1)[0] - try: - return dist_from_wheel_url(name, url, self._session) - except HTTPRangeRequestUnsupported: - logger.debug("%s does not support range requests", url) - return None - - def _complete_partial_requirements( - self, - partially_downloaded_reqs: Iterable[InstallRequirement], - parallel_builds: bool = False, - ) -> None: - """Download any requirements which were only fetched by metadata.""" - # Download to a temporary directory. These will be copied over as - # needed for downstream 'download', 'wheel', and 'install' commands. - temp_dir = TempDirectory(kind="unpack", globally_managed=True).path - - # Map each link to the requirement that owns it. This allows us to set - # `req.local_file_path` on the appropriate requirement after passing - # all the links at once into BatchDownloader. - links_to_fully_download: Dict[Link, InstallRequirement] = {} - for req in partially_downloaded_reqs: - assert req.link - links_to_fully_download[req.link] = req - - batch_download = self._batch_download( - links_to_fully_download.keys(), - temp_dir, - ) - for link, (filepath, _) in batch_download: - logger.debug("Downloading link %s to %s", link, filepath) - req = links_to_fully_download[link] - # Record the downloaded file path so wheel reqs can extract a Distribution - # in .get_dist(). - req.local_file_path = filepath - # Record that the file is downloaded so we don't do it again in - # _prepare_linked_requirement(). - self._downloaded[req.link.url] = filepath - - # If this is an sdist, we need to unpack it after downloading, but the - # .source_dir won't be set up until we are in _prepare_linked_requirement(). - # Add the downloaded archive to the install requirement to unpack after - # preparing the source dir. - if not req.is_wheel: - req.needs_unpacked_archive(Path(filepath)) - - # This step is necessary to ensure all lazy wheels are processed - # successfully by the 'download', 'wheel', and 'install' commands. - for req in partially_downloaded_reqs: - self._prepare_linked_requirement(req, parallel_builds) - - def prepare_linked_requirement( - self, req: InstallRequirement, parallel_builds: bool = False - ) -> BaseDistribution: - """Prepare a requirement to be obtained from req.link.""" - assert req.link - self._log_preparing_link(req) - with indent_log(): - # Check if the relevant file is already available - # in the download directory - file_path = None - if self.download_dir is not None and req.link.is_wheel: - hashes = self._get_linked_req_hashes(req) - file_path = _check_download_dir( - req.link, - self.download_dir, - hashes, - # When a locally built wheel has been found in cache, we don't warn - # about re-downloading when the already downloaded wheel hash does - # not match. This is because the hash must be checked against the - # original link, not the cached link. It that case the already - # downloaded file will be removed and re-fetched from cache (which - # implies a hash check against the cache entry's origin.json). - warn_on_hash_mismatch=not req.is_wheel_from_cache, - ) - - if file_path is not None: - # The file is already available, so mark it as downloaded - self._downloaded[req.link.url] = file_path - else: - # The file is not available, attempt to fetch only metadata - metadata_dist = self._fetch_metadata_only(req) - if metadata_dist is not None: - req.needs_more_preparation = True - return metadata_dist - - # None of the optimizations worked, fully prepare the requirement - return self._prepare_linked_requirement(req, parallel_builds) - - def prepare_linked_requirements_more( - self, reqs: Iterable[InstallRequirement], parallel_builds: bool = False - ) -> None: - """Prepare linked requirements more, if needed.""" - reqs = [req for req in reqs if req.needs_more_preparation] - for req in reqs: - # Determine if any of these requirements were already downloaded. - if self.download_dir is not None and req.link.is_wheel: - hashes = self._get_linked_req_hashes(req) - file_path = _check_download_dir(req.link, self.download_dir, hashes) - if file_path is not None: - self._downloaded[req.link.url] = file_path - req.needs_more_preparation = False - - # Prepare requirements we found were already downloaded for some - # reason. The other downloads will be completed separately. - partially_downloaded_reqs: List[InstallRequirement] = [] - for req in reqs: - if req.needs_more_preparation: - partially_downloaded_reqs.append(req) - else: - self._prepare_linked_requirement(req, parallel_builds) - - # TODO: separate this part out from RequirementPreparer when the v1 - # resolver can be removed! - self._complete_partial_requirements( - partially_downloaded_reqs, - parallel_builds=parallel_builds, - ) - - def _prepare_linked_requirement( - self, req: InstallRequirement, parallel_builds: bool - ) -> BaseDistribution: - assert req.link - link = req.link - - hashes = self._get_linked_req_hashes(req) - - if hashes and req.is_wheel_from_cache: - assert req.download_info is not None - assert link.is_wheel - assert link.is_file - # We need to verify hashes, and we have found the requirement in the cache - # of locally built wheels. - if ( - isinstance(req.download_info.info, ArchiveInfo) - and req.download_info.info.hashes - and hashes.has_one_of(req.download_info.info.hashes) - ): - # At this point we know the requirement was built from a hashable source - # artifact, and we verified that the cache entry's hash of the original - # artifact matches one of the hashes we expect. We don't verify hashes - # against the cached wheel, because the wheel is not the original. - hashes = None - else: - logger.warning( - "The hashes of the source archive found in cache entry " - "don't match, ignoring cached built wheel " - "and re-downloading source." - ) - req.link = req.cached_wheel_source_link - link = req.link - - self._ensure_link_req_src_dir(req, parallel_builds) - - if link.is_existing_dir(): - local_file = None - elif link.url not in self._downloaded: - try: - local_file = unpack_url( - link, - req.source_dir, - self._download, - self.verbosity, - self.download_dir, - hashes, - ) - except NetworkConnectionError as exc: - raise InstallationError( - f"Could not install requirement {req} because of HTTP " - f"error {exc} for URL {link}" - ) - else: - file_path = self._downloaded[link.url] - if hashes: - hashes.check_against_path(file_path) - local_file = File(file_path, content_type=None) - - # If download_info is set, we got it from the wheel cache. - if req.download_info is None: - # Editables don't go through this function (see - # prepare_editable_requirement). - assert not req.editable - req.download_info = direct_url_from_link(link, req.source_dir) - # Make sure we have a hash in download_info. If we got it as part of the - # URL, it will have been verified and we can rely on it. Otherwise we - # compute it from the downloaded file. - # FIXME: https://github.com/pypa/pip/issues/11943 - if ( - isinstance(req.download_info.info, ArchiveInfo) - and not req.download_info.info.hashes - and local_file - ): - hash = hash_file(local_file.path)[0].hexdigest() - # We populate info.hash for backward compatibility. - # This will automatically populate info.hashes. - req.download_info.info.hash = f"sha256={hash}" - - # For use in later processing, - # preserve the file path on the requirement. - if local_file: - req.local_file_path = local_file.path - - dist = _get_prepared_distribution( - req, - self.build_tracker, - self.finder, - self.build_isolation, - self.check_build_deps, - ) - return dist - - def save_linked_requirement(self, req: InstallRequirement) -> None: - assert self.download_dir is not None - assert req.link is not None - link = req.link - if link.is_vcs or (link.is_existing_dir() and req.editable): - # Make a .zip of the source_dir we already created. - req.archive(self.download_dir) - return - - if link.is_existing_dir(): - logger.debug( - "Not copying link to destination directory " - "since it is a directory: %s", - link, - ) - return - if req.local_file_path is None: - # No distribution was downloaded for this requirement. - return - - download_location = os.path.join(self.download_dir, link.filename) - if not os.path.exists(download_location): - shutil.copy(req.local_file_path, download_location) - download_path = display_path(download_location) - logger.info("Saved %s", download_path) - - def prepare_editable_requirement( - self, - req: InstallRequirement, - ) -> BaseDistribution: - """Prepare an editable requirement.""" - assert req.editable, "cannot prepare a non-editable req as editable" - - logger.info("Obtaining %s", req) - - with indent_log(): - if self.require_hashes: - raise InstallationError( - f"The editable requirement {req} cannot be installed when " - "requiring hashes, because there is no single file to " - "hash." - ) - req.ensure_has_source_dir(self.src_dir) - req.update_editable() - assert req.source_dir - req.download_info = direct_url_for_editable(req.unpacked_source_directory) - - dist = _get_prepared_distribution( - req, - self.build_tracker, - self.finder, - self.build_isolation, - self.check_build_deps, - ) - - req.check_if_exists(self.use_user_site) - - return dist - - def prepare_installed_requirement( - self, - req: InstallRequirement, - skip_reason: str, - ) -> BaseDistribution: - """Prepare an already-installed requirement.""" - assert req.satisfied_by, "req should have been satisfied but isn't" - assert skip_reason is not None, ( - "did not get skip reason skipped but req.satisfied_by " - f"is set to {req.satisfied_by}" - ) - logger.info( - "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version - ) - with indent_log(): - if self.require_hashes: - logger.debug( - "Since it is already installed, we are trusting this " - "package without checking its hash. To ensure a " - "completely repeatable environment, install into an " - "empty virtualenv." - ) - return InstalledDistribution(req).get_metadata_distribution() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/pyproject.py b/myenv/lib/python3.12/site-packages/pip/_internal/pyproject.py deleted file mode 100644 index 0e8452f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/pyproject.py +++ /dev/null @@ -1,185 +0,0 @@ -import importlib.util -import os -import sys -from collections import namedtuple -from typing import Any, List, Optional - -if sys.version_info >= (3, 11): - import tomllib -else: - from pip._vendor import tomli as tomllib - -from pip._vendor.packaging.requirements import InvalidRequirement - -from pip._internal.exceptions import ( - InstallationError, - InvalidPyProjectBuildRequires, - MissingPyProjectBuildRequires, -) -from pip._internal.utils.packaging import get_requirement - - -def _is_list_of_str(obj: Any) -> bool: - return isinstance(obj, list) and all(isinstance(item, str) for item in obj) - - -def make_pyproject_path(unpacked_source_directory: str) -> str: - return os.path.join(unpacked_source_directory, "pyproject.toml") - - -BuildSystemDetails = namedtuple( - "BuildSystemDetails", ["requires", "backend", "check", "backend_path"] -) - - -def load_pyproject_toml( - use_pep517: Optional[bool], pyproject_toml: str, setup_py: str, req_name: str -) -> Optional[BuildSystemDetails]: - """Load the pyproject.toml file. - - Parameters: - use_pep517 - Has the user requested PEP 517 processing? None - means the user hasn't explicitly specified. - pyproject_toml - Location of the project's pyproject.toml file - setup_py - Location of the project's setup.py file - req_name - The name of the requirement we're processing (for - error reporting) - - Returns: - None if we should use the legacy code path, otherwise a tuple - ( - requirements from pyproject.toml, - name of PEP 517 backend, - requirements we should check are installed after setting - up the build environment - directory paths to import the backend from (backend-path), - relative to the project root. - ) - """ - has_pyproject = os.path.isfile(pyproject_toml) - has_setup = os.path.isfile(setup_py) - - if not has_pyproject and not has_setup: - raise InstallationError( - f"{req_name} does not appear to be a Python project: " - f"neither 'setup.py' nor 'pyproject.toml' found." - ) - - if has_pyproject: - with open(pyproject_toml, encoding="utf-8") as f: - pp_toml = tomllib.loads(f.read()) - build_system = pp_toml.get("build-system") - else: - build_system = None - - # The following cases must use PEP 517 - # We check for use_pep517 being non-None and falsy because that means - # the user explicitly requested --no-use-pep517. The value 0 as - # opposed to False can occur when the value is provided via an - # environment variable or config file option (due to the quirk of - # strtobool() returning an integer in pip's configuration code). - if has_pyproject and not has_setup: - if use_pep517 is not None and not use_pep517: - raise InstallationError( - "Disabling PEP 517 processing is invalid: " - "project does not have a setup.py" - ) - use_pep517 = True - elif build_system and "build-backend" in build_system: - if use_pep517 is not None and not use_pep517: - raise InstallationError( - "Disabling PEP 517 processing is invalid: " - "project specifies a build backend of {} " - "in pyproject.toml".format(build_system["build-backend"]) - ) - use_pep517 = True - - # If we haven't worked out whether to use PEP 517 yet, - # and the user hasn't explicitly stated a preference, - # we do so if the project has a pyproject.toml file - # or if we cannot import setuptools or wheels. - - # We fallback to PEP 517 when without setuptools or without the wheel package, - # so setuptools can be installed as a default build backend. - # For more info see: - # https://discuss.python.org/t/pip-without-setuptools-could-the-experience-be-improved/11810/9 - # https://github.com/pypa/pip/issues/8559 - elif use_pep517 is None: - use_pep517 = ( - has_pyproject - or not importlib.util.find_spec("setuptools") - or not importlib.util.find_spec("wheel") - ) - - # At this point, we know whether we're going to use PEP 517. - assert use_pep517 is not None - - # If we're using the legacy code path, there is nothing further - # for us to do here. - if not use_pep517: - return None - - if build_system is None: - # Either the user has a pyproject.toml with no build-system - # section, or the user has no pyproject.toml, but has opted in - # explicitly via --use-pep517. - # In the absence of any explicit backend specification, we - # assume the setuptools backend that most closely emulates the - # traditional direct setup.py execution, and require wheel and - # a version of setuptools that supports that backend. - - build_system = { - "requires": ["setuptools>=40.8.0"], - "build-backend": "setuptools.build_meta:__legacy__", - } - - # If we're using PEP 517, we have build system information (either - # from pyproject.toml, or defaulted by the code above). - # Note that at this point, we do not know if the user has actually - # specified a backend, though. - assert build_system is not None - - # Ensure that the build-system section in pyproject.toml conforms - # to PEP 518. - - # Specifying the build-system table but not the requires key is invalid - if "requires" not in build_system: - raise MissingPyProjectBuildRequires(package=req_name) - - # Error out if requires is not a list of strings - requires = build_system["requires"] - if not _is_list_of_str(requires): - raise InvalidPyProjectBuildRequires( - package=req_name, - reason="It is not a list of strings.", - ) - - # Each requirement must be valid as per PEP 508 - for requirement in requires: - try: - get_requirement(requirement) - except InvalidRequirement as error: - raise InvalidPyProjectBuildRequires( - package=req_name, - reason=f"It contains an invalid requirement: {requirement!r}", - ) from error - - backend = build_system.get("build-backend") - backend_path = build_system.get("backend-path", []) - check: List[str] = [] - if backend is None: - # If the user didn't specify a backend, we assume they want to use - # the setuptools backend. But we can't be sure they have included - # a version of setuptools which supplies the backend. So we - # make a note to check that this requirement is present once - # we have set up the environment. - # This is quite a lot of work to check for a very specific case. But - # the problem is, that case is potentially quite common - projects that - # adopted PEP 518 early for the ability to specify requirements to - # execute setup.py, but never considered needing to mention the build - # tools themselves. The original PEP 518 code had a similar check (but - # implemented in a different way). - backend = "setuptools.build_meta:__legacy__" - check = ["setuptools>=40.8.0"] - - return BuildSystemDetails(requires, backend, check, backend_path) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/__init__.py deleted file mode 100644 index 422d851..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/__init__.py +++ /dev/null @@ -1,90 +0,0 @@ -import collections -import logging -from dataclasses import dataclass -from typing import Generator, List, Optional, Sequence, Tuple - -from pip._internal.utils.logging import indent_log - -from .req_file import parse_requirements -from .req_install import InstallRequirement -from .req_set import RequirementSet - -__all__ = [ - "RequirementSet", - "InstallRequirement", - "parse_requirements", - "install_given_reqs", -] - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class InstallationResult: - name: str - - -def _validate_requirements( - requirements: List[InstallRequirement], -) -> Generator[Tuple[str, InstallRequirement], None, None]: - for req in requirements: - assert req.name, f"invalid to-be-installed requirement: {req}" - yield req.name, req - - -def install_given_reqs( - requirements: List[InstallRequirement], - global_options: Sequence[str], - root: Optional[str], - home: Optional[str], - prefix: Optional[str], - warn_script_location: bool, - use_user_site: bool, - pycompile: bool, -) -> List[InstallationResult]: - """ - Install everything in the given list. - - (to be called after having downloaded and unpacked the packages) - """ - to_install = collections.OrderedDict(_validate_requirements(requirements)) - - if to_install: - logger.info( - "Installing collected packages: %s", - ", ".join(to_install.keys()), - ) - - installed = [] - - with indent_log(): - for req_name, requirement in to_install.items(): - if requirement.should_reinstall: - logger.info("Attempting uninstall: %s", req_name) - with indent_log(): - uninstalled_pathset = requirement.uninstall(auto_confirm=True) - else: - uninstalled_pathset = None - - try: - requirement.install( - global_options, - root=root, - home=home, - prefix=prefix, - warn_script_location=warn_script_location, - use_user_site=use_user_site, - pycompile=pycompile, - ) - except Exception: - # if install did not succeed, rollback previous uninstall - if uninstalled_pathset and not requirement.install_succeeded: - uninstalled_pathset.rollback() - raise - else: - if uninstalled_pathset and requirement.install_succeeded: - uninstalled_pathset.commit() - - installed.append(InstallationResult(req_name)) - - return installed diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2789b84..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc deleted file mode 100644 index 4854c40..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc deleted file mode 100644 index e9d141f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc deleted file mode 100644 index 6b7e38b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc deleted file mode 100644 index b901882..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc deleted file mode 100644 index 0fb256c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/constructors.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/constructors.py deleted file mode 100644 index 56a964f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/constructors.py +++ /dev/null @@ -1,560 +0,0 @@ -"""Backing implementation for InstallRequirement's various constructors - -The idea here is that these formed a major chunk of InstallRequirement's size -so, moving them and support code dedicated to them outside of that class -helps creates for better understandability for the rest of the code. - -These are meant to be used elsewhere within pip to create instances of -InstallRequirement. -""" - -import copy -import logging -import os -import re -from dataclasses import dataclass -from typing import Collection, Dict, List, Optional, Set, Tuple, Union - -from pip._vendor.packaging.markers import Marker -from pip._vendor.packaging.requirements import InvalidRequirement, Requirement -from pip._vendor.packaging.specifiers import Specifier - -from pip._internal.exceptions import InstallationError -from pip._internal.models.index import PyPI, TestPyPI -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.req.req_file import ParsedRequirement -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.filetypes import is_archive_file -from pip._internal.utils.misc import is_installable_dir -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import is_url, vcs - -__all__ = [ - "install_req_from_editable", - "install_req_from_line", - "parse_editable", -] - -logger = logging.getLogger(__name__) -operators = Specifier._operators.keys() - - -def _strip_extras(path: str) -> Tuple[str, Optional[str]]: - m = re.match(r"^(.+)(\[[^\]]+\])$", path) - extras = None - if m: - path_no_extras = m.group(1) - extras = m.group(2) - else: - path_no_extras = path - - return path_no_extras, extras - - -def convert_extras(extras: Optional[str]) -> Set[str]: - if not extras: - return set() - return get_requirement("placeholder" + extras.lower()).extras - - -def _set_requirement_extras(req: Requirement, new_extras: Set[str]) -> Requirement: - """ - Returns a new requirement based on the given one, with the supplied extras. If the - given requirement already has extras those are replaced (or dropped if no new extras - are given). - """ - match: Optional[re.Match[str]] = re.fullmatch( - # see https://peps.python.org/pep-0508/#complete-grammar - r"([\w\t .-]+)(\[[^\]]*\])?(.*)", - str(req), - flags=re.ASCII, - ) - # ireq.req is a valid requirement so the regex should always match - assert ( - match is not None - ), f"regex match on requirement {req} failed, this should never happen" - pre: Optional[str] = match.group(1) - post: Optional[str] = match.group(3) - assert ( - pre is not None and post is not None - ), f"regex group selection for requirement {req} failed, this should never happen" - extras: str = "[{}]".format(",".join(sorted(new_extras)) if new_extras else "") - return get_requirement(f"{pre}{extras}{post}") - - -def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]: - """Parses an editable requirement into: - - a requirement name - - an URL - - extras - - editable options - Accepted requirements: - svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir - .[some_extra] - """ - - url = editable_req - - # If a file path is specified with extras, strip off the extras. - url_no_extras, extras = _strip_extras(url) - - if os.path.isdir(url_no_extras): - # Treating it as code that has already been checked out - url_no_extras = path_to_url(url_no_extras) - - if url_no_extras.lower().startswith("file:"): - package_name = Link(url_no_extras).egg_fragment - if extras: - return ( - package_name, - url_no_extras, - get_requirement("placeholder" + extras.lower()).extras, - ) - else: - return package_name, url_no_extras, set() - - for version_control in vcs: - if url.lower().startswith(f"{version_control}:"): - url = f"{version_control}+{url}" - break - - link = Link(url) - - if not link.is_vcs: - backends = ", ".join(vcs.all_schemes) - raise InstallationError( - f"{editable_req} is not a valid editable requirement. " - f"It should either be a path to a local project or a VCS URL " - f"(beginning with {backends})." - ) - - package_name = link.egg_fragment - if not package_name: - raise InstallationError( - f"Could not detect requirement name for '{editable_req}', " - "please specify one with #egg=your_package_name" - ) - return package_name, url, set() - - -def check_first_requirement_in_file(filename: str) -> None: - """Check if file is parsable as a requirements file. - - This is heavily based on ``pkg_resources.parse_requirements``, but - simplified to just check the first meaningful line. - - :raises InvalidRequirement: If the first meaningful line cannot be parsed - as an requirement. - """ - with open(filename, encoding="utf-8", errors="ignore") as f: - # Create a steppable iterator, so we can handle \-continuations. - lines = ( - line - for line in (line.strip() for line in f) - if line and not line.startswith("#") # Skip blank lines/comments. - ) - - for line in lines: - # Drop comments -- a hash without a space may be in a URL. - if " #" in line: - line = line[: line.find(" #")] - # If there is a line continuation, drop it, and append the next line. - if line.endswith("\\"): - line = line[:-2].strip() + next(lines, "") - get_requirement(line) - return - - -def deduce_helpful_msg(req: str) -> str: - """Returns helpful msg in case requirements file does not exist, - or cannot be parsed. - - :params req: Requirements file path - """ - if not os.path.exists(req): - return f" File '{req}' does not exist." - msg = " The path does exist. " - # Try to parse and check if it is a requirements file. - try: - check_first_requirement_in_file(req) - except InvalidRequirement: - logger.debug("Cannot parse '%s' as requirements file", req) - else: - msg += ( - f"The argument you provided " - f"({req}) appears to be a" - f" requirements file. If that is the" - f" case, use the '-r' flag to install" - f" the packages specified within it." - ) - return msg - - -@dataclass(frozen=True) -class RequirementParts: - requirement: Optional[Requirement] - link: Optional[Link] - markers: Optional[Marker] - extras: Set[str] - - -def parse_req_from_editable(editable_req: str) -> RequirementParts: - name, url, extras_override = parse_editable(editable_req) - - if name is not None: - try: - req: Optional[Requirement] = get_requirement(name) - except InvalidRequirement as exc: - raise InstallationError(f"Invalid requirement: {name!r}: {exc}") - else: - req = None - - link = Link(url) - - return RequirementParts(req, link, None, extras_override) - - -# ---- The actual constructors follow ---- - - -def install_req_from_editable( - editable_req: str, - comes_from: Optional[Union[InstallRequirement, str]] = None, - *, - use_pep517: Optional[bool] = None, - isolated: bool = False, - global_options: Optional[List[str]] = None, - hash_options: Optional[Dict[str, List[str]]] = None, - constraint: bool = False, - user_supplied: bool = False, - permit_editable_wheels: bool = False, - config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, -) -> InstallRequirement: - parts = parse_req_from_editable(editable_req) - - return InstallRequirement( - parts.requirement, - comes_from=comes_from, - user_supplied=user_supplied, - editable=True, - permit_editable_wheels=permit_editable_wheels, - link=parts.link, - constraint=constraint, - use_pep517=use_pep517, - isolated=isolated, - global_options=global_options, - hash_options=hash_options, - config_settings=config_settings, - extras=parts.extras, - ) - - -def _looks_like_path(name: str) -> bool: - """Checks whether the string "looks like" a path on the filesystem. - - This does not check whether the target actually exists, only judge from the - appearance. - - Returns true if any of the following conditions is true: - * a path separator is found (either os.path.sep or os.path.altsep); - * a dot is found (which represents the current directory). - """ - if os.path.sep in name: - return True - if os.path.altsep is not None and os.path.altsep in name: - return True - if name.startswith("."): - return True - return False - - -def _get_url_from_path(path: str, name: str) -> Optional[str]: - """ - First, it checks whether a provided path is an installable directory. If it - is, returns the path. - - If false, check if the path is an archive file (such as a .whl). - The function checks if the path is a file. If false, if the path has - an @, it will treat it as a PEP 440 URL requirement and return the path. - """ - if _looks_like_path(name) and os.path.isdir(path): - if is_installable_dir(path): - return path_to_url(path) - # TODO: The is_installable_dir test here might not be necessary - # now that it is done in load_pyproject_toml too. - raise InstallationError( - f"Directory {name!r} is not installable. Neither 'setup.py' " - "nor 'pyproject.toml' found." - ) - if not is_archive_file(path): - return None - if os.path.isfile(path): - return path_to_url(path) - urlreq_parts = name.split("@", 1) - if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): - # If the path contains '@' and the part before it does not look - # like a path, try to treat it as a PEP 440 URL req instead. - return None - logger.warning( - "Requirement %r looks like a filename, but the file does not exist", - name, - ) - return path_to_url(path) - - -def parse_req_from_line(name: str, line_source: Optional[str]) -> RequirementParts: - if is_url(name): - marker_sep = "; " - else: - marker_sep = ";" - if marker_sep in name: - name, markers_as_string = name.split(marker_sep, 1) - markers_as_string = markers_as_string.strip() - if not markers_as_string: - markers = None - else: - markers = Marker(markers_as_string) - else: - markers = None - name = name.strip() - req_as_string = None - path = os.path.normpath(os.path.abspath(name)) - link = None - extras_as_string = None - - if is_url(name): - link = Link(name) - else: - p, extras_as_string = _strip_extras(path) - url = _get_url_from_path(p, name) - if url is not None: - link = Link(url) - - # it's a local file, dir, or url - if link: - # Handle relative file URLs - if link.scheme == "file" and re.search(r"\.\./", link.url): - link = Link(path_to_url(os.path.normpath(os.path.abspath(link.path)))) - # wheel file - if link.is_wheel: - wheel = Wheel(link.filename) # can raise InvalidWheelFilename - req_as_string = f"{wheel.name}=={wheel.version}" - else: - # set the req to the egg fragment. when it's not there, this - # will become an 'unnamed' requirement - req_as_string = link.egg_fragment - - # a requirement specifier - else: - req_as_string = name - - extras = convert_extras(extras_as_string) - - def with_source(text: str) -> str: - if not line_source: - return text - return f"{text} (from {line_source})" - - def _parse_req_string(req_as_string: str) -> Requirement: - try: - return get_requirement(req_as_string) - except InvalidRequirement as exc: - if os.path.sep in req_as_string: - add_msg = "It looks like a path." - add_msg += deduce_helpful_msg(req_as_string) - elif "=" in req_as_string and not any( - op in req_as_string for op in operators - ): - add_msg = "= is not a valid operator. Did you mean == ?" - else: - add_msg = "" - msg = with_source(f"Invalid requirement: {req_as_string!r}: {exc}") - if add_msg: - msg += f"\nHint: {add_msg}" - raise InstallationError(msg) - - if req_as_string is not None: - req: Optional[Requirement] = _parse_req_string(req_as_string) - else: - req = None - - return RequirementParts(req, link, markers, extras) - - -def install_req_from_line( - name: str, - comes_from: Optional[Union[str, InstallRequirement]] = None, - *, - use_pep517: Optional[bool] = None, - isolated: bool = False, - global_options: Optional[List[str]] = None, - hash_options: Optional[Dict[str, List[str]]] = None, - constraint: bool = False, - line_source: Optional[str] = None, - user_supplied: bool = False, - config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, -) -> InstallRequirement: - """Creates an InstallRequirement from a name, which might be a - requirement, directory containing 'setup.py', filename, or URL. - - :param line_source: An optional string describing where the line is from, - for logging purposes in case of an error. - """ - parts = parse_req_from_line(name, line_source) - - return InstallRequirement( - parts.requirement, - comes_from, - link=parts.link, - markers=parts.markers, - use_pep517=use_pep517, - isolated=isolated, - global_options=global_options, - hash_options=hash_options, - config_settings=config_settings, - constraint=constraint, - extras=parts.extras, - user_supplied=user_supplied, - ) - - -def install_req_from_req_string( - req_string: str, - comes_from: Optional[InstallRequirement] = None, - isolated: bool = False, - use_pep517: Optional[bool] = None, - user_supplied: bool = False, -) -> InstallRequirement: - try: - req = get_requirement(req_string) - except InvalidRequirement as exc: - raise InstallationError(f"Invalid requirement: {req_string!r}: {exc}") - - domains_not_allowed = [ - PyPI.file_storage_domain, - TestPyPI.file_storage_domain, - ] - if ( - req.url - and comes_from - and comes_from.link - and comes_from.link.netloc in domains_not_allowed - ): - # Explicitly disallow pypi packages that depend on external urls - raise InstallationError( - "Packages installed from PyPI cannot depend on packages " - "which are not also hosted on PyPI.\n" - f"{comes_from.name} depends on {req} " - ) - - return InstallRequirement( - req, - comes_from, - isolated=isolated, - use_pep517=use_pep517, - user_supplied=user_supplied, - ) - - -def install_req_from_parsed_requirement( - parsed_req: ParsedRequirement, - isolated: bool = False, - use_pep517: Optional[bool] = None, - user_supplied: bool = False, - config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, -) -> InstallRequirement: - if parsed_req.is_editable: - req = install_req_from_editable( - parsed_req.requirement, - comes_from=parsed_req.comes_from, - use_pep517=use_pep517, - constraint=parsed_req.constraint, - isolated=isolated, - user_supplied=user_supplied, - config_settings=config_settings, - ) - - else: - req = install_req_from_line( - parsed_req.requirement, - comes_from=parsed_req.comes_from, - use_pep517=use_pep517, - isolated=isolated, - global_options=( - parsed_req.options.get("global_options", []) - if parsed_req.options - else [] - ), - hash_options=( - parsed_req.options.get("hashes", {}) if parsed_req.options else {} - ), - constraint=parsed_req.constraint, - line_source=parsed_req.line_source, - user_supplied=user_supplied, - config_settings=config_settings, - ) - return req - - -def install_req_from_link_and_ireq( - link: Link, ireq: InstallRequirement -) -> InstallRequirement: - return InstallRequirement( - req=ireq.req, - comes_from=ireq.comes_from, - editable=ireq.editable, - link=link, - markers=ireq.markers, - use_pep517=ireq.use_pep517, - isolated=ireq.isolated, - global_options=ireq.global_options, - hash_options=ireq.hash_options, - config_settings=ireq.config_settings, - user_supplied=ireq.user_supplied, - ) - - -def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement: - """ - Creates a new InstallationRequirement using the given template but without - any extras. Sets the original requirement as the new one's parent - (comes_from). - """ - return InstallRequirement( - req=( - _set_requirement_extras(ireq.req, set()) if ireq.req is not None else None - ), - comes_from=ireq, - editable=ireq.editable, - link=ireq.link, - markers=ireq.markers, - use_pep517=ireq.use_pep517, - isolated=ireq.isolated, - global_options=ireq.global_options, - hash_options=ireq.hash_options, - constraint=ireq.constraint, - extras=[], - config_settings=ireq.config_settings, - user_supplied=ireq.user_supplied, - permit_editable_wheels=ireq.permit_editable_wheels, - ) - - -def install_req_extend_extras( - ireq: InstallRequirement, - extras: Collection[str], -) -> InstallRequirement: - """ - Returns a copy of an installation requirement with some additional extras. - Makes a shallow copy of the ireq object. - """ - result = copy.copy(ireq) - result.extras = {*ireq.extras, *extras} - result.req = ( - _set_requirement_extras(ireq.req, result.extras) - if ireq.req is not None - else None - ) - return result diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_file.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/req_file.py deleted file mode 100644 index f6ba70f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_file.py +++ /dev/null @@ -1,623 +0,0 @@ -""" -Requirements file parsing -""" - -import codecs -import locale -import logging -import optparse -import os -import re -import shlex -import sys -import urllib.parse -from dataclasses import dataclass -from optparse import Values -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - Generator, - Iterable, - List, - NoReturn, - Optional, - Tuple, -) - -from pip._internal.cli import cmdoptions -from pip._internal.exceptions import InstallationError, RequirementsFileParseError -from pip._internal.models.search_scope import SearchScope - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - from pip._internal.network.session import PipSession - -__all__ = ["parse_requirements"] - -ReqFileLines = Iterable[Tuple[int, str]] - -LineParser = Callable[[str], Tuple[str, Values]] - -SCHEME_RE = re.compile(r"^(http|https|file):", re.I) -COMMENT_RE = re.compile(r"(^|\s+)#.*$") - -# Matches environment variable-style values in '${MY_VARIABLE_1}' with the -# variable name consisting of only uppercase letters, digits or the '_' -# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, -# 2013 Edition. -ENV_VAR_RE = re.compile(r"(?P\$\{(?P[A-Z0-9_]+)\})") - -SUPPORTED_OPTIONS: List[Callable[..., optparse.Option]] = [ - cmdoptions.index_url, - cmdoptions.extra_index_url, - cmdoptions.no_index, - cmdoptions.constraints, - cmdoptions.requirements, - cmdoptions.editable, - cmdoptions.find_links, - cmdoptions.no_binary, - cmdoptions.only_binary, - cmdoptions.prefer_binary, - cmdoptions.require_hashes, - cmdoptions.pre, - cmdoptions.trusted_host, - cmdoptions.use_new_feature, -] - -# options to be passed to requirements -SUPPORTED_OPTIONS_REQ: List[Callable[..., optparse.Option]] = [ - cmdoptions.global_options, - cmdoptions.hash, - cmdoptions.config_settings, -] - -SUPPORTED_OPTIONS_EDITABLE_REQ: List[Callable[..., optparse.Option]] = [ - cmdoptions.config_settings, -] - - -# the 'dest' string values -SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] -SUPPORTED_OPTIONS_EDITABLE_REQ_DEST = [ - str(o().dest) for o in SUPPORTED_OPTIONS_EDITABLE_REQ -] - -# order of BOMS is important: codecs.BOM_UTF16_LE is a prefix of codecs.BOM_UTF32_LE -# so data.startswith(BOM_UTF16_LE) would be true for UTF32_LE data -BOMS: List[Tuple[bytes, str]] = [ - (codecs.BOM_UTF8, "utf-8"), - (codecs.BOM_UTF32, "utf-32"), - (codecs.BOM_UTF32_BE, "utf-32-be"), - (codecs.BOM_UTF32_LE, "utf-32-le"), - (codecs.BOM_UTF16, "utf-16"), - (codecs.BOM_UTF16_BE, "utf-16-be"), - (codecs.BOM_UTF16_LE, "utf-16-le"), -] - -PEP263_ENCODING_RE = re.compile(rb"coding[:=]\s*([-\w.]+)") -DEFAULT_ENCODING = "utf-8" - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class ParsedRequirement: - # TODO: replace this with slots=True when dropping Python 3.9 support. - __slots__ = ( - "requirement", - "is_editable", - "comes_from", - "constraint", - "options", - "line_source", - ) - - requirement: str - is_editable: bool - comes_from: str - constraint: bool - options: Optional[Dict[str, Any]] - line_source: Optional[str] - - -@dataclass(frozen=True) -class ParsedLine: - __slots__ = ("filename", "lineno", "args", "opts", "constraint") - - filename: str - lineno: int - args: str - opts: Values - constraint: bool - - @property - def is_editable(self) -> bool: - return bool(self.opts.editables) - - @property - def requirement(self) -> Optional[str]: - if self.args: - return self.args - elif self.is_editable: - # We don't support multiple -e on one line - return self.opts.editables[0] - return None - - -def parse_requirements( - filename: str, - session: "PipSession", - finder: Optional["PackageFinder"] = None, - options: Optional[optparse.Values] = None, - constraint: bool = False, -) -> Generator[ParsedRequirement, None, None]: - """Parse a requirements file and yield ParsedRequirement instances. - - :param filename: Path or url of requirements file. - :param session: PipSession instance. - :param finder: Instance of pip.index.PackageFinder. - :param options: cli options. - :param constraint: If true, parsing a constraint file rather than - requirements file. - """ - line_parser = get_line_parser(finder) - parser = RequirementsFileParser(session, line_parser) - - for parsed_line in parser.parse(filename, constraint): - parsed_req = handle_line( - parsed_line, options=options, finder=finder, session=session - ) - if parsed_req is not None: - yield parsed_req - - -def preprocess(content: str) -> ReqFileLines: - """Split, filter, and join lines, and return a line iterator - - :param content: the content of the requirements file - """ - lines_enum: ReqFileLines = enumerate(content.splitlines(), start=1) - lines_enum = join_lines(lines_enum) - lines_enum = ignore_comments(lines_enum) - lines_enum = expand_env_variables(lines_enum) - return lines_enum - - -def handle_requirement_line( - line: ParsedLine, - options: Optional[optparse.Values] = None, -) -> ParsedRequirement: - # preserve for the nested code path - line_comes_from = "{} {} (line {})".format( - "-c" if line.constraint else "-r", - line.filename, - line.lineno, - ) - - assert line.requirement is not None - - # get the options that apply to requirements - if line.is_editable: - supported_dest = SUPPORTED_OPTIONS_EDITABLE_REQ_DEST - else: - supported_dest = SUPPORTED_OPTIONS_REQ_DEST - req_options = {} - for dest in supported_dest: - if dest in line.opts.__dict__ and line.opts.__dict__[dest]: - req_options[dest] = line.opts.__dict__[dest] - - line_source = f"line {line.lineno} of {line.filename}" - return ParsedRequirement( - requirement=line.requirement, - is_editable=line.is_editable, - comes_from=line_comes_from, - constraint=line.constraint, - options=req_options, - line_source=line_source, - ) - - -def handle_option_line( - opts: Values, - filename: str, - lineno: int, - finder: Optional["PackageFinder"] = None, - options: Optional[optparse.Values] = None, - session: Optional["PipSession"] = None, -) -> None: - if opts.hashes: - logger.warning( - "%s line %s has --hash but no requirement, and will be ignored.", - filename, - lineno, - ) - - if options: - # percolate options upward - if opts.require_hashes: - options.require_hashes = opts.require_hashes - if opts.features_enabled: - options.features_enabled.extend( - f for f in opts.features_enabled if f not in options.features_enabled - ) - - # set finder options - if finder: - find_links = finder.find_links - index_urls = finder.index_urls - no_index = finder.search_scope.no_index - if opts.no_index is True: - no_index = True - index_urls = [] - if opts.index_url and not no_index: - index_urls = [opts.index_url] - if opts.extra_index_urls and not no_index: - index_urls.extend(opts.extra_index_urls) - if opts.find_links: - # FIXME: it would be nice to keep track of the source - # of the find_links: support a find-links local path - # relative to a requirements file. - value = opts.find_links[0] - req_dir = os.path.dirname(os.path.abspath(filename)) - relative_to_reqs_file = os.path.join(req_dir, value) - if os.path.exists(relative_to_reqs_file): - value = relative_to_reqs_file - find_links.append(value) - - if session: - # We need to update the auth urls in session - session.update_index_urls(index_urls) - - search_scope = SearchScope( - find_links=find_links, - index_urls=index_urls, - no_index=no_index, - ) - finder.search_scope = search_scope - - if opts.pre: - finder.set_allow_all_prereleases() - - if opts.prefer_binary: - finder.set_prefer_binary() - - if session: - for host in opts.trusted_hosts or []: - source = f"line {lineno} of {filename}" - session.add_trusted_host(host, source=source) - - -def handle_line( - line: ParsedLine, - options: Optional[optparse.Values] = None, - finder: Optional["PackageFinder"] = None, - session: Optional["PipSession"] = None, -) -> Optional[ParsedRequirement]: - """Handle a single parsed requirements line; This can result in - creating/yielding requirements, or updating the finder. - - :param line: The parsed line to be processed. - :param options: CLI options. - :param finder: The finder - updated by non-requirement lines. - :param session: The session - updated by non-requirement lines. - - Returns a ParsedRequirement object if the line is a requirement line, - otherwise returns None. - - For lines that contain requirements, the only options that have an effect - are from SUPPORTED_OPTIONS_REQ, and they are scoped to the - requirement. Other options from SUPPORTED_OPTIONS may be present, but are - ignored. - - For lines that do not contain requirements, the only options that have an - effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may - be present, but are ignored. These lines may contain multiple options - (although our docs imply only one is supported), and all our parsed and - affect the finder. - """ - - if line.requirement is not None: - parsed_req = handle_requirement_line(line, options) - return parsed_req - else: - handle_option_line( - line.opts, - line.filename, - line.lineno, - finder, - options, - session, - ) - return None - - -class RequirementsFileParser: - def __init__( - self, - session: "PipSession", - line_parser: LineParser, - ) -> None: - self._session = session - self._line_parser = line_parser - - def parse( - self, filename: str, constraint: bool - ) -> Generator[ParsedLine, None, None]: - """Parse a given file, yielding parsed lines.""" - yield from self._parse_and_recurse( - filename, constraint, [{os.path.abspath(filename): None}] - ) - - def _parse_and_recurse( - self, - filename: str, - constraint: bool, - parsed_files_stack: List[Dict[str, Optional[str]]], - ) -> Generator[ParsedLine, None, None]: - for line in self._parse_file(filename, constraint): - if line.requirement is None and ( - line.opts.requirements or line.opts.constraints - ): - # parse a nested requirements file - if line.opts.requirements: - req_path = line.opts.requirements[0] - nested_constraint = False - else: - req_path = line.opts.constraints[0] - nested_constraint = True - - # original file is over http - if SCHEME_RE.search(filename): - # do a url join so relative paths work - req_path = urllib.parse.urljoin(filename, req_path) - # original file and nested file are paths - elif not SCHEME_RE.search(req_path): - # do a join so relative paths work - # and then abspath so that we can identify recursive references - req_path = os.path.abspath( - os.path.join( - os.path.dirname(filename), - req_path, - ) - ) - parsed_files = parsed_files_stack[0] - if req_path in parsed_files: - initial_file = parsed_files[req_path] - tail = ( - f" and again in {initial_file}" - if initial_file is not None - else "" - ) - raise RequirementsFileParseError( - f"{req_path} recursively references itself in {filename}{tail}" - ) - # Keeping a track where was each file first included in - new_parsed_files = parsed_files.copy() - new_parsed_files[req_path] = filename - yield from self._parse_and_recurse( - req_path, nested_constraint, [new_parsed_files, *parsed_files_stack] - ) - else: - yield line - - def _parse_file( - self, filename: str, constraint: bool - ) -> Generator[ParsedLine, None, None]: - _, content = get_file_content(filename, self._session) - - lines_enum = preprocess(content) - - for line_number, line in lines_enum: - try: - args_str, opts = self._line_parser(line) - except OptionParsingError as e: - # add offending line - msg = f"Invalid requirement: {line}\n{e.msg}" - raise RequirementsFileParseError(msg) - - yield ParsedLine( - filename, - line_number, - args_str, - opts, - constraint, - ) - - -def get_line_parser(finder: Optional["PackageFinder"]) -> LineParser: - def parse_line(line: str) -> Tuple[str, Values]: - # Build new parser for each line since it accumulates appendable - # options. - parser = build_parser() - defaults = parser.get_default_values() - defaults.index_url = None - if finder: - defaults.format_control = finder.format_control - - args_str, options_str = break_args_options(line) - - try: - options = shlex.split(options_str) - except ValueError as e: - raise OptionParsingError(f"Could not split options: {options_str}") from e - - opts, _ = parser.parse_args(options, defaults) - - return args_str, opts - - return parse_line - - -def break_args_options(line: str) -> Tuple[str, str]: - """Break up the line into an args and options string. We only want to shlex - (and then optparse) the options, not the args. args can contain markers - which are corrupted by shlex. - """ - tokens = line.split(" ") - args = [] - options = tokens[:] - for token in tokens: - if token.startswith("-") or token.startswith("--"): - break - else: - args.append(token) - options.pop(0) - return " ".join(args), " ".join(options) - - -class OptionParsingError(Exception): - def __init__(self, msg: str) -> None: - self.msg = msg - - -def build_parser() -> optparse.OptionParser: - """ - Return a parser for parsing requirement lines - """ - parser = optparse.OptionParser(add_help_option=False) - - option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ - for option_factory in option_factories: - option = option_factory() - parser.add_option(option) - - # By default optparse sys.exits on parsing errors. We want to wrap - # that in our own exception. - def parser_exit(self: Any, msg: str) -> "NoReturn": - raise OptionParsingError(msg) - - # NOTE: mypy disallows assigning to a method - # https://github.com/python/mypy/issues/2427 - parser.exit = parser_exit # type: ignore - - return parser - - -def join_lines(lines_enum: ReqFileLines) -> ReqFileLines: - """Joins a line ending in '\' with the previous line (except when following - comments). The joined line takes on the index of the first line. - """ - primary_line_number = None - new_line: List[str] = [] - for line_number, line in lines_enum: - if not line.endswith("\\") or COMMENT_RE.match(line): - if COMMENT_RE.match(line): - # this ensures comments are always matched later - line = " " + line - if new_line: - new_line.append(line) - assert primary_line_number is not None - yield primary_line_number, "".join(new_line) - new_line = [] - else: - yield line_number, line - else: - if not new_line: - primary_line_number = line_number - new_line.append(line.strip("\\")) - - # last line contains \ - if new_line: - assert primary_line_number is not None - yield primary_line_number, "".join(new_line) - - # TODO: handle space after '\'. - - -def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines: - """ - Strips comments and filter empty lines. - """ - for line_number, line in lines_enum: - line = COMMENT_RE.sub("", line) - line = line.strip() - if line: - yield line_number, line - - -def expand_env_variables(lines_enum: ReqFileLines) -> ReqFileLines: - """Replace all environment variables that can be retrieved via `os.getenv`. - - The only allowed format for environment variables defined in the - requirement file is `${MY_VARIABLE_1}` to ensure two things: - - 1. Strings that contain a `$` aren't accidentally (partially) expanded. - 2. Ensure consistency across platforms for requirement files. - - These points are the result of a discussion on the `github pull - request #3514 `_. - - Valid characters in variable names follow the `POSIX standard - `_ and are limited - to uppercase letter, digits and the `_` (underscore). - """ - for line_number, line in lines_enum: - for env_var, var_name in ENV_VAR_RE.findall(line): - value = os.getenv(var_name) - if not value: - continue - - line = line.replace(env_var, value) - - yield line_number, line - - -def get_file_content(url: str, session: "PipSession") -> Tuple[str, str]: - """Gets the content of a file; it may be a filename, file: URL, or - http: URL. Returns (location, content). Content is unicode. - Respects # -*- coding: declarations on the retrieved files. - - :param url: File path or url. - :param session: PipSession instance. - """ - scheme = urllib.parse.urlsplit(url).scheme - # Pip has special support for file:// URLs (LocalFSAdapter). - if scheme in ["http", "https", "file"]: - # Delay importing heavy network modules until absolutely necessary. - from pip._internal.network.utils import raise_for_status - - resp = session.get(url) - raise_for_status(resp) - return resp.url, resp.text - - # Assume this is a bare path. - try: - with open(url, "rb") as f: - raw_content = f.read() - except OSError as exc: - raise InstallationError(f"Could not open requirements file: {exc}") - - content = _decode_req_file(raw_content, url) - - return url, content - - -def _decode_req_file(data: bytes, url: str) -> str: - for bom, encoding in BOMS: - if data.startswith(bom): - return data[len(bom) :].decode(encoding) - - for line in data.split(b"\n")[:2]: - if line[0:1] == b"#": - result = PEP263_ENCODING_RE.search(line) - if result is not None: - encoding = result.groups()[0].decode("ascii") - return data.decode(encoding) - - try: - return data.decode(DEFAULT_ENCODING) - except UnicodeDecodeError: - locale_encoding = locale.getpreferredencoding(False) or sys.getdefaultencoding() - logging.warning( - "unable to decode data from %s with default encoding %s, " - "falling back to encoding from locale: %s. " - "If this is intentional you should specify the encoding with a " - "PEP-263 style comment, e.g. '# -*- coding: %s -*-'", - url, - DEFAULT_ENCODING, - locale_encoding, - locale_encoding, - ) - return data.decode(locale_encoding) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_install.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/req_install.py deleted file mode 100644 index 3262d82..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_install.py +++ /dev/null @@ -1,934 +0,0 @@ -import functools -import logging -import os -import shutil -import sys -import uuid -import zipfile -from optparse import Values -from pathlib import Path -from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, Union - -from pip._vendor.packaging.markers import Marker -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment -from pip._internal.exceptions import InstallationError, PreviousBuildDirError -from pip._internal.locations import get_scheme -from pip._internal.metadata import ( - BaseDistribution, - get_default_environment, - get_directory_distribution, - get_wheel_distribution, -) -from pip._internal.metadata.base import FilesystemWheel -from pip._internal.models.direct_url import DirectUrl -from pip._internal.models.link import Link -from pip._internal.operations.build.metadata import generate_metadata -from pip._internal.operations.build.metadata_editable import generate_editable_metadata -from pip._internal.operations.build.metadata_legacy import ( - generate_metadata as generate_metadata_legacy, -) -from pip._internal.operations.install.editable_legacy import ( - install_editable as install_editable_legacy, -) -from pip._internal.operations.install.wheel import install_wheel -from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path -from pip._internal.req.req_uninstall import UninstallPathSet -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.misc import ( - ConfiguredBuildBackendHookCaller, - ask_path_exists, - backup_dir, - display_path, - hide_url, - is_installable_dir, - redact_auth_from_requirement, - redact_auth_from_url, -) -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds -from pip._internal.utils.unpacking import unpack_file -from pip._internal.utils.virtualenv import running_under_virtualenv -from pip._internal.vcs import vcs - -logger = logging.getLogger(__name__) - - -class InstallRequirement: - """ - Represents something that may be installed later on, may have information - about where to fetch the relevant requirement and also contains logic for - installing the said requirement. - """ - - def __init__( - self, - req: Optional[Requirement], - comes_from: Optional[Union[str, "InstallRequirement"]], - editable: bool = False, - link: Optional[Link] = None, - markers: Optional[Marker] = None, - use_pep517: Optional[bool] = None, - isolated: bool = False, - *, - global_options: Optional[List[str]] = None, - hash_options: Optional[Dict[str, List[str]]] = None, - config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, - constraint: bool = False, - extras: Collection[str] = (), - user_supplied: bool = False, - permit_editable_wheels: bool = False, - ) -> None: - assert req is None or isinstance(req, Requirement), req - self.req = req - self.comes_from = comes_from - self.constraint = constraint - self.editable = editable - self.permit_editable_wheels = permit_editable_wheels - - # source_dir is the local directory where the linked requirement is - # located, or unpacked. In case unpacking is needed, creating and - # populating source_dir is done by the RequirementPreparer. Note this - # is not necessarily the directory where pyproject.toml or setup.py is - # located - that one is obtained via unpacked_source_directory. - self.source_dir: Optional[str] = None - if self.editable: - assert link - if link.is_file: - self.source_dir = os.path.normpath(os.path.abspath(link.file_path)) - - # original_link is the direct URL that was provided by the user for the - # requirement, either directly or via a constraints file. - if link is None and req and req.url: - # PEP 508 URL requirement - link = Link(req.url) - self.link = self.original_link = link - - # When this InstallRequirement is a wheel obtained from the cache of locally - # built wheels, this is the source link corresponding to the cache entry, which - # was used to download and build the cached wheel. - self.cached_wheel_source_link: Optional[Link] = None - - # Information about the location of the artifact that was downloaded . This - # property is guaranteed to be set in resolver results. - self.download_info: Optional[DirectUrl] = None - - # Path to any downloaded or already-existing package. - self.local_file_path: Optional[str] = None - if self.link and self.link.is_file: - self.local_file_path = self.link.file_path - - if extras: - self.extras = extras - elif req: - self.extras = req.extras - else: - self.extras = set() - if markers is None and req: - markers = req.marker - self.markers = markers - - # This holds the Distribution object if this requirement is already installed. - self.satisfied_by: Optional[BaseDistribution] = None - # Whether the installation process should try to uninstall an existing - # distribution before installing this requirement. - self.should_reinstall = False - # Temporary build location - self._temp_build_dir: Optional[TempDirectory] = None - # Set to True after successful installation - self.install_succeeded: Optional[bool] = None - # Supplied options - self.global_options = global_options if global_options else [] - self.hash_options = hash_options if hash_options else {} - self.config_settings = config_settings - # Set to True after successful preparation of this requirement - self.prepared = False - # User supplied requirement are explicitly requested for installation - # by the user via CLI arguments or requirements files, as opposed to, - # e.g. dependencies, extras or constraints. - self.user_supplied = user_supplied - - self.isolated = isolated - self.build_env: BuildEnvironment = NoOpBuildEnvironment() - - # For PEP 517, the directory where we request the project metadata - # gets stored. We need this to pass to build_wheel, so the backend - # can ensure that the wheel matches the metadata (see the PEP for - # details). - self.metadata_directory: Optional[str] = None - - # The static build requirements (from pyproject.toml) - self.pyproject_requires: Optional[List[str]] = None - - # Build requirements that we will check are available - self.requirements_to_check: List[str] = [] - - # The PEP 517 backend we should use to build the project - self.pep517_backend: Optional[BuildBackendHookCaller] = None - - # Are we using PEP 517 for this requirement? - # After pyproject.toml has been loaded, the only valid values are True - # and False. Before loading, None is valid (meaning "use the default"). - # Setting an explicit value before loading pyproject.toml is supported, - # but after loading this flag should be treated as read only. - self.use_pep517 = use_pep517 - - # If config settings are provided, enforce PEP 517. - if self.config_settings: - if self.use_pep517 is False: - logger.warning( - "--no-use-pep517 ignored for %s " - "because --config-settings are specified.", - self, - ) - self.use_pep517 = True - - # This requirement needs more preparation before it can be built - self.needs_more_preparation = False - - # This requirement needs to be unpacked before it can be installed. - self._archive_source: Optional[Path] = None - - def __str__(self) -> str: - if self.req: - s = redact_auth_from_requirement(self.req) - if self.link: - s += f" from {redact_auth_from_url(self.link.url)}" - elif self.link: - s = redact_auth_from_url(self.link.url) - else: - s = "" - if self.satisfied_by is not None: - if self.satisfied_by.location is not None: - location = display_path(self.satisfied_by.location) - else: - location = "" - s += f" in {location}" - if self.comes_from: - if isinstance(self.comes_from, str): - comes_from: Optional[str] = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += f" (from {comes_from})" - return s - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__name__} object: " - f"{str(self)} editable={self.editable!r}>" - ) - - def format_debug(self) -> str: - """An un-tested helper for getting state, for debugging.""" - attributes = vars(self) - names = sorted(attributes) - - state = (f"{attr}={attributes[attr]!r}" for attr in sorted(names)) - return "<{name} object: {{{state}}}>".format( - name=self.__class__.__name__, - state=", ".join(state), - ) - - # Things that are valid for all kinds of requirements? - @property - def name(self) -> Optional[str]: - if self.req is None: - return None - return self.req.name - - @functools.cached_property - def supports_pyproject_editable(self) -> bool: - if not self.use_pep517: - return False - assert self.pep517_backend - with self.build_env: - runner = runner_with_spinner_message( - "Checking if build backend supports build_editable" - ) - with self.pep517_backend.subprocess_runner(runner): - return "build_editable" in self.pep517_backend._supported_features() - - @property - def specifier(self) -> SpecifierSet: - assert self.req is not None - return self.req.specifier - - @property - def is_direct(self) -> bool: - """Whether this requirement was specified as a direct URL.""" - return self.original_link is not None - - @property - def is_pinned(self) -> bool: - """Return whether I am pinned to an exact version. - - For example, some-package==1.2 is pinned; some-package>1.2 is not. - """ - assert self.req is not None - specifiers = self.req.specifier - return len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="} - - def match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> bool: - if not extras_requested: - # Provide an extra to safely evaluate the markers - # without matching any extra - extras_requested = ("",) - if self.markers is not None: - return any( - self.markers.evaluate({"extra": extra}) for extra in extras_requested - ) - else: - return True - - @property - def has_hash_options(self) -> bool: - """Return whether any known-good hashes are specified as options. - - These activate --require-hashes mode; hashes specified as part of a - URL do not. - - """ - return bool(self.hash_options) - - def hashes(self, trust_internet: bool = True) -> Hashes: - """Return a hash-comparer that considers my option- and URL-based - hashes to be known-good. - - Hashes in URLs--ones embedded in the requirements file, not ones - downloaded from an index server--are almost peers with ones from - flags. They satisfy --require-hashes (whether it was implicitly or - explicitly activated) but do not activate it. md5 and sha224 are not - allowed in flags, which should nudge people toward good algos. We - always OR all hashes together, even ones from URLs. - - :param trust_internet: Whether to trust URL-based (#md5=...) hashes - downloaded from the internet, as by populate_link() - - """ - good_hashes = self.hash_options.copy() - if trust_internet: - link = self.link - elif self.is_direct and self.user_supplied: - link = self.original_link - else: - link = None - if link and link.hash: - assert link.hash_name is not None - good_hashes.setdefault(link.hash_name, []).append(link.hash) - return Hashes(good_hashes) - - def from_path(self) -> Optional[str]: - """Format a nice indicator to show where this "comes from" """ - if self.req is None: - return None - s = str(self.req) - if self.comes_from: - comes_from: Optional[str] - if isinstance(self.comes_from, str): - comes_from = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += "->" + comes_from - return s - - def ensure_build_location( - self, build_dir: str, autodelete: bool, parallel_builds: bool - ) -> str: - assert build_dir is not None - if self._temp_build_dir is not None: - assert self._temp_build_dir.path - return self._temp_build_dir.path - if self.req is None: - # Some systems have /tmp as a symlink which confuses custom - # builds (such as numpy). Thus, we ensure that the real path - # is returned. - self._temp_build_dir = TempDirectory( - kind=tempdir_kinds.REQ_BUILD, globally_managed=True - ) - - return self._temp_build_dir.path - - # This is the only remaining place where we manually determine the path - # for the temporary directory. It is only needed for editables where - # it is the value of the --src option. - - # When parallel builds are enabled, add a UUID to the build directory - # name so multiple builds do not interfere with each other. - dir_name: str = canonicalize_name(self.req.name) - if parallel_builds: - dir_name = f"{dir_name}_{uuid.uuid4().hex}" - - # FIXME: Is there a better place to create the build_dir? (hg and bzr - # need this) - if not os.path.exists(build_dir): - logger.debug("Creating directory %s", build_dir) - os.makedirs(build_dir) - actual_build_dir = os.path.join(build_dir, dir_name) - # `None` indicates that we respect the globally-configured deletion - # settings, which is what we actually want when auto-deleting. - delete_arg = None if autodelete else False - return TempDirectory( - path=actual_build_dir, - delete=delete_arg, - kind=tempdir_kinds.REQ_BUILD, - globally_managed=True, - ).path - - def _set_requirement(self) -> None: - """Set requirement after generating metadata.""" - assert self.req is None - assert self.metadata is not None - assert self.source_dir is not None - - # Construct a Requirement object from the generated metadata - if isinstance(parse_version(self.metadata["Version"]), Version): - op = "==" - else: - op = "===" - - self.req = get_requirement( - "".join( - [ - self.metadata["Name"], - op, - self.metadata["Version"], - ] - ) - ) - - def warn_on_mismatching_name(self) -> None: - assert self.req is not None - metadata_name = canonicalize_name(self.metadata["Name"]) - if canonicalize_name(self.req.name) == metadata_name: - # Everything is fine. - return - - # If we're here, there's a mismatch. Log a warning about it. - logger.warning( - "Generating metadata for package %s " - "produced metadata for project name %s. Fix your " - "#egg=%s fragments.", - self.name, - metadata_name, - self.name, - ) - self.req = get_requirement(metadata_name) - - def check_if_exists(self, use_user_site: bool) -> None: - """Find an installed distribution that satisfies or conflicts - with this requirement, and set self.satisfied_by or - self.should_reinstall appropriately. - """ - if self.req is None: - return - existing_dist = get_default_environment().get_distribution(self.req.name) - if not existing_dist: - return - - version_compatible = self.req.specifier.contains( - existing_dist.version, - prereleases=True, - ) - if not version_compatible: - self.satisfied_by = None - if use_user_site: - if existing_dist.in_usersite: - self.should_reinstall = True - elif running_under_virtualenv() and existing_dist.in_site_packages: - raise InstallationError( - f"Will not install to the user site because it will " - f"lack sys.path precedence to {existing_dist.raw_name} " - f"in {existing_dist.location}" - ) - else: - self.should_reinstall = True - else: - if self.editable: - self.should_reinstall = True - # when installing editables, nothing pre-existing should ever - # satisfy - self.satisfied_by = None - else: - self.satisfied_by = existing_dist - - # Things valid for wheels - @property - def is_wheel(self) -> bool: - if not self.link: - return False - return self.link.is_wheel - - @property - def is_wheel_from_cache(self) -> bool: - # When True, it means that this InstallRequirement is a local wheel file in the - # cache of locally built wheels. - return self.cached_wheel_source_link is not None - - # Things valid for sdists - @property - def unpacked_source_directory(self) -> str: - assert self.source_dir, f"No source dir for {self}" - return os.path.join( - self.source_dir, self.link and self.link.subdirectory_fragment or "" - ) - - @property - def setup_py_path(self) -> str: - assert self.source_dir, f"No source dir for {self}" - setup_py = os.path.join(self.unpacked_source_directory, "setup.py") - - return setup_py - - @property - def setup_cfg_path(self) -> str: - assert self.source_dir, f"No source dir for {self}" - setup_cfg = os.path.join(self.unpacked_source_directory, "setup.cfg") - - return setup_cfg - - @property - def pyproject_toml_path(self) -> str: - assert self.source_dir, f"No source dir for {self}" - return make_pyproject_path(self.unpacked_source_directory) - - def load_pyproject_toml(self) -> None: - """Load the pyproject.toml file. - - After calling this routine, all of the attributes related to PEP 517 - processing for this requirement have been set. In particular, the - use_pep517 attribute can be used to determine whether we should - follow the PEP 517 or legacy (setup.py) code path. - """ - pyproject_toml_data = load_pyproject_toml( - self.use_pep517, self.pyproject_toml_path, self.setup_py_path, str(self) - ) - - if pyproject_toml_data is None: - assert not self.config_settings - self.use_pep517 = False - return - - self.use_pep517 = True - requires, backend, check, backend_path = pyproject_toml_data - self.requirements_to_check = check - self.pyproject_requires = requires - self.pep517_backend = ConfiguredBuildBackendHookCaller( - self, - self.unpacked_source_directory, - backend, - backend_path=backend_path, - ) - - def isolated_editable_sanity_check(self) -> None: - """Check that an editable requirement if valid for use with PEP 517/518. - - This verifies that an editable that has a pyproject.toml either supports PEP 660 - or as a setup.py or a setup.cfg - """ - if ( - self.editable - and self.use_pep517 - and not self.supports_pyproject_editable - and not os.path.isfile(self.setup_py_path) - and not os.path.isfile(self.setup_cfg_path) - ): - raise InstallationError( - f"Project {self} has a 'pyproject.toml' and its build " - f"backend is missing the 'build_editable' hook. Since it does not " - f"have a 'setup.py' nor a 'setup.cfg', " - f"it cannot be installed in editable mode. " - f"Consider using a build backend that supports PEP 660." - ) - - def prepare_metadata(self) -> None: - """Ensure that project metadata is available. - - Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. - Under legacy processing, call setup.py egg-info. - """ - assert self.source_dir, f"No source dir for {self}" - details = self.name or f"from {self.link}" - - if self.use_pep517: - assert self.pep517_backend is not None - if ( - self.editable - and self.permit_editable_wheels - and self.supports_pyproject_editable - ): - self.metadata_directory = generate_editable_metadata( - build_env=self.build_env, - backend=self.pep517_backend, - details=details, - ) - else: - self.metadata_directory = generate_metadata( - build_env=self.build_env, - backend=self.pep517_backend, - details=details, - ) - else: - self.metadata_directory = generate_metadata_legacy( - build_env=self.build_env, - setup_py_path=self.setup_py_path, - source_dir=self.unpacked_source_directory, - isolated=self.isolated, - details=details, - ) - - # Act on the newly generated metadata, based on the name and version. - if not self.name: - self._set_requirement() - else: - self.warn_on_mismatching_name() - - self.assert_source_matches_version() - - @property - def metadata(self) -> Any: - if not hasattr(self, "_metadata"): - self._metadata = self.get_dist().metadata - - return self._metadata - - def get_dist(self) -> BaseDistribution: - if self.metadata_directory: - return get_directory_distribution(self.metadata_directory) - elif self.local_file_path and self.is_wheel: - assert self.req is not None - return get_wheel_distribution( - FilesystemWheel(self.local_file_path), - canonicalize_name(self.req.name), - ) - raise AssertionError( - f"InstallRequirement {self} has no metadata directory and no wheel: " - f"can't make a distribution." - ) - - def assert_source_matches_version(self) -> None: - assert self.source_dir, f"No source dir for {self}" - version = self.metadata["version"] - if self.req and self.req.specifier and version not in self.req.specifier: - logger.warning( - "Requested %s, but installing version %s", - self, - version, - ) - else: - logger.debug( - "Source in %s has version %s, which satisfies requirement %s", - display_path(self.source_dir), - version, - self, - ) - - # For both source distributions and editables - def ensure_has_source_dir( - self, - parent_dir: str, - autodelete: bool = False, - parallel_builds: bool = False, - ) -> None: - """Ensure that a source_dir is set. - - This will create a temporary build dir if the name of the requirement - isn't known yet. - - :param parent_dir: The ideal pip parent_dir for the source_dir. - Generally src_dir for editables and build_dir for sdists. - :return: self.source_dir - """ - if self.source_dir is None: - self.source_dir = self.ensure_build_location( - parent_dir, - autodelete=autodelete, - parallel_builds=parallel_builds, - ) - - def needs_unpacked_archive(self, archive_source: Path) -> None: - assert self._archive_source is None - self._archive_source = archive_source - - def ensure_pristine_source_checkout(self) -> None: - """Ensure the source directory has not yet been built in.""" - assert self.source_dir is not None - if self._archive_source is not None: - unpack_file(str(self._archive_source), self.source_dir) - elif is_installable_dir(self.source_dir): - # If a checkout exists, it's unwise to keep going. - # version inconsistencies are logged later, but do not fail - # the installation. - raise PreviousBuildDirError( - f"pip can't proceed with requirements '{self}' due to a " - f"pre-existing build directory ({self.source_dir}). This is likely " - "due to a previous installation that failed . pip is " - "being responsible and not assuming it can delete this. " - "Please delete it and try again." - ) - - # For editable installations - def update_editable(self) -> None: - if not self.link: - logger.debug( - "Cannot update repository at %s; repository location is unknown", - self.source_dir, - ) - return - assert self.editable - assert self.source_dir - if self.link.scheme == "file": - # Static paths don't get updated - return - vcs_backend = vcs.get_backend_for_scheme(self.link.scheme) - # Editable requirements are validated in Requirement constructors. - # So here, if it's neither a path nor a valid VCS URL, it's a bug. - assert vcs_backend, f"Unsupported VCS URL {self.link.url}" - hidden_url = hide_url(self.link.url) - vcs_backend.obtain(self.source_dir, url=hidden_url, verbosity=0) - - # Top-level Actions - def uninstall( - self, auto_confirm: bool = False, verbose: bool = False - ) -> Optional[UninstallPathSet]: - """ - Uninstall the distribution currently satisfying this requirement. - - Prompts before removing or modifying files unless - ``auto_confirm`` is True. - - Refuses to delete or modify files outside of ``sys.prefix`` - - thus uninstallation within a virtual environment can only - modify that virtual environment, even if the virtualenv is - linked to global site-packages. - - """ - assert self.req - dist = get_default_environment().get_distribution(self.req.name) - if not dist: - logger.warning("Skipping %s as it is not installed.", self.name) - return None - logger.info("Found existing installation: %s", dist) - - uninstalled_pathset = UninstallPathSet.from_dist(dist) - uninstalled_pathset.remove(auto_confirm, verbose) - return uninstalled_pathset - - def _get_archive_name(self, path: str, parentdir: str, rootdir: str) -> str: - def _clean_zip_name(name: str, prefix: str) -> str: - assert name.startswith( - prefix + os.path.sep - ), f"name {name!r} doesn't start with prefix {prefix!r}" - name = name[len(prefix) + 1 :] - name = name.replace(os.path.sep, "/") - return name - - assert self.req is not None - path = os.path.join(parentdir, path) - name = _clean_zip_name(path, rootdir) - return self.req.name + "/" + name - - def archive(self, build_dir: Optional[str]) -> None: - """Saves archive to provided build_dir. - - Used for saving downloaded VCS requirements as part of `pip download`. - """ - assert self.source_dir - if build_dir is None: - return - - create_archive = True - archive_name = "{}-{}.zip".format(self.name, self.metadata["version"]) - archive_path = os.path.join(build_dir, archive_name) - - if os.path.exists(archive_path): - response = ask_path_exists( - f"The file {display_path(archive_path)} exists. (i)gnore, (w)ipe, " - "(b)ackup, (a)bort ", - ("i", "w", "b", "a"), - ) - if response == "i": - create_archive = False - elif response == "w": - logger.warning("Deleting %s", display_path(archive_path)) - os.remove(archive_path) - elif response == "b": - dest_file = backup_dir(archive_path) - logger.warning( - "Backing up %s to %s", - display_path(archive_path), - display_path(dest_file), - ) - shutil.move(archive_path, dest_file) - elif response == "a": - sys.exit(-1) - - if not create_archive: - return - - zip_output = zipfile.ZipFile( - archive_path, - "w", - zipfile.ZIP_DEFLATED, - allowZip64=True, - ) - with zip_output: - dir = os.path.normcase(os.path.abspath(self.unpacked_source_directory)) - for dirpath, dirnames, filenames in os.walk(dir): - for dirname in dirnames: - dir_arcname = self._get_archive_name( - dirname, - parentdir=dirpath, - rootdir=dir, - ) - zipdir = zipfile.ZipInfo(dir_arcname + "/") - zipdir.external_attr = 0x1ED << 16 # 0o755 - zip_output.writestr(zipdir, "") - for filename in filenames: - file_arcname = self._get_archive_name( - filename, - parentdir=dirpath, - rootdir=dir, - ) - filename = os.path.join(dirpath, filename) - zip_output.write(filename, file_arcname) - - logger.info("Saved %s", display_path(archive_path)) - - def install( - self, - global_options: Optional[Sequence[str]] = None, - root: Optional[str] = None, - home: Optional[str] = None, - prefix: Optional[str] = None, - warn_script_location: bool = True, - use_user_site: bool = False, - pycompile: bool = True, - ) -> None: - assert self.req is not None - scheme = get_scheme( - self.req.name, - user=use_user_site, - home=home, - root=root, - isolated=self.isolated, - prefix=prefix, - ) - - if self.editable and not self.is_wheel: - deprecated( - reason=( - f"Legacy editable install of {self} (setup.py develop) " - "is deprecated." - ), - replacement=( - "to add a pyproject.toml or enable --use-pep517, " - "and use setuptools >= 64. " - "If the resulting installation is not behaving as expected, " - "try using --config-settings editable_mode=compat. " - "Please consult the setuptools documentation for more information" - ), - gone_in="25.1", - issue=11457, - ) - if self.config_settings: - logger.warning( - "--config-settings ignored for legacy editable install of %s. " - "Consider upgrading to a version of setuptools " - "that supports PEP 660 (>= 64).", - self, - ) - install_editable_legacy( - global_options=global_options if global_options is not None else [], - prefix=prefix, - home=home, - use_user_site=use_user_site, - name=self.req.name, - setup_py_path=self.setup_py_path, - isolated=self.isolated, - build_env=self.build_env, - unpacked_source_directory=self.unpacked_source_directory, - ) - self.install_succeeded = True - return - - assert self.is_wheel - assert self.local_file_path - - install_wheel( - self.req.name, - self.local_file_path, - scheme=scheme, - req_description=str(self.req), - pycompile=pycompile, - warn_script_location=warn_script_location, - direct_url=self.download_info if self.is_direct else None, - requested=self.user_supplied, - ) - self.install_succeeded = True - - -def check_invalid_constraint_type(req: InstallRequirement) -> str: - # Check for unsupported forms - problem = "" - if not req.name: - problem = "Unnamed requirements are not allowed as constraints" - elif req.editable: - problem = "Editable requirements are not allowed as constraints" - elif req.extras: - problem = "Constraints cannot have extras" - - if problem: - deprecated( - reason=( - "Constraints are only allowed to take the form of a package " - "name and a version specifier. Other forms were originally " - "permitted as an accident of the implementation, but were " - "undocumented. The new implementation of the resolver no " - "longer supports these forms." - ), - replacement="replacing the constraint with a requirement", - # No plan yet for when the new resolver becomes default - gone_in=None, - issue=8210, - ) - - return problem - - -def _has_option(options: Values, reqs: List[InstallRequirement], option: str) -> bool: - if getattr(options, option, None): - return True - for req in reqs: - if getattr(req, option, None): - return True - return False - - -def check_legacy_setup_py_options( - options: Values, - reqs: List[InstallRequirement], -) -> None: - has_build_options = _has_option(options, reqs, "build_options") - has_global_options = _has_option(options, reqs, "global_options") - if has_build_options or has_global_options: - deprecated( - reason="--build-option and --global-option are deprecated.", - issue=11859, - replacement="to use --config-settings", - gone_in=None, - ) - logger.warning( - "Implying --no-binary=:all: due to the presence of " - "--build-option / --global-option. " - ) - options.format_control.disallow_binaries() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_set.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/req_set.py deleted file mode 100644 index ec7a6e0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_set.py +++ /dev/null @@ -1,82 +0,0 @@ -import logging -from collections import OrderedDict -from typing import Dict, List - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -class RequirementSet: - def __init__(self, check_supported_wheels: bool = True) -> None: - """Create a RequirementSet.""" - - self.requirements: Dict[str, InstallRequirement] = OrderedDict() - self.check_supported_wheels = check_supported_wheels - - self.unnamed_requirements: List[InstallRequirement] = [] - - def __str__(self) -> str: - requirements = sorted( - (req for req in self.requirements.values() if not req.comes_from), - key=lambda req: canonicalize_name(req.name or ""), - ) - return " ".join(str(req.req) for req in requirements) - - def __repr__(self) -> str: - requirements = sorted( - self.requirements.values(), - key=lambda req: canonicalize_name(req.name or ""), - ) - - format_string = "<{classname} object; {count} requirement(s): {reqs}>" - return format_string.format( - classname=self.__class__.__name__, - count=len(requirements), - reqs=", ".join(str(req.req) for req in requirements), - ) - - def add_unnamed_requirement(self, install_req: InstallRequirement) -> None: - assert not install_req.name - self.unnamed_requirements.append(install_req) - - def add_named_requirement(self, install_req: InstallRequirement) -> None: - assert install_req.name - - project_name = canonicalize_name(install_req.name) - self.requirements[project_name] = install_req - - def has_requirement(self, name: str) -> bool: - project_name = canonicalize_name(name) - - return ( - project_name in self.requirements - and not self.requirements[project_name].constraint - ) - - def get_requirement(self, name: str) -> InstallRequirement: - project_name = canonicalize_name(name) - - if project_name in self.requirements: - return self.requirements[project_name] - - raise KeyError(f"No project with the name {name!r}") - - @property - def all_requirements(self) -> List[InstallRequirement]: - return self.unnamed_requirements + list(self.requirements.values()) - - @property - def requirements_to_install(self) -> List[InstallRequirement]: - """Return the list of requirements that need to be installed. - - TODO remove this property together with the legacy resolver, since the new - resolver only returns requirements that need to be installed. - """ - return [ - install_req - for install_req in self.all_requirements - if not install_req.constraint and not install_req.satisfied_by - ] diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py b/myenv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py deleted file mode 100644 index 26df208..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py +++ /dev/null @@ -1,633 +0,0 @@ -import functools -import os -import sys -import sysconfig -from importlib.util import cache_from_source -from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Set, Tuple - -from pip._internal.exceptions import LegacyDistutilsInstall, UninstallMissingRecord -from pip._internal.locations import get_bin_prefix, get_bin_user -from pip._internal.metadata import BaseDistribution -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.egg_link import egg_link_path_from_location -from pip._internal.utils.logging import getLogger, indent_log -from pip._internal.utils.misc import ask, normalize_path, renames, rmtree -from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory -from pip._internal.utils.virtualenv import running_under_virtualenv - -logger = getLogger(__name__) - - -def _script_names( - bin_dir: str, script_name: str, is_gui: bool -) -> Generator[str, None, None]: - """Create the fully qualified name of the files created by - {console,gui}_scripts for the given ``dist``. - Returns the list of file names - """ - exe_name = os.path.join(bin_dir, script_name) - yield exe_name - if not WINDOWS: - return - yield f"{exe_name}.exe" - yield f"{exe_name}.exe.manifest" - if is_gui: - yield f"{exe_name}-script.pyw" - else: - yield f"{exe_name}-script.py" - - -def _unique( - fn: Callable[..., Generator[Any, None, None]] -) -> Callable[..., Generator[Any, None, None]]: - @functools.wraps(fn) - def unique(*args: Any, **kw: Any) -> Generator[Any, None, None]: - seen: Set[Any] = set() - for item in fn(*args, **kw): - if item not in seen: - seen.add(item) - yield item - - return unique - - -@_unique -def uninstallation_paths(dist: BaseDistribution) -> Generator[str, None, None]: - """ - Yield all the uninstallation paths for dist based on RECORD-without-.py[co] - - Yield paths to all the files in RECORD. For each .py file in RECORD, add - the .pyc and .pyo in the same directory. - - UninstallPathSet.add() takes care of the __pycache__ .py[co]. - - If RECORD is not found, raises an error, - with possible information from the INSTALLER file. - - https://packaging.python.org/specifications/recording-installed-packages/ - """ - location = dist.location - assert location is not None, "not installed" - - entries = dist.iter_declared_entries() - if entries is None: - raise UninstallMissingRecord(distribution=dist) - - for entry in entries: - path = os.path.join(location, entry) - yield path - if path.endswith(".py"): - dn, fn = os.path.split(path) - base = fn[:-3] - path = os.path.join(dn, base + ".pyc") - yield path - path = os.path.join(dn, base + ".pyo") - yield path - - -def compact(paths: Iterable[str]) -> Set[str]: - """Compact a path set to contain the minimal number of paths - necessary to contain all paths in the set. If /a/path/ and - /a/path/to/a/file.txt are both in the set, leave only the - shorter path.""" - - sep = os.path.sep - short_paths: Set[str] = set() - for path in sorted(paths, key=len): - should_skip = any( - path.startswith(shortpath.rstrip("*")) - and path[len(shortpath.rstrip("*").rstrip(sep))] == sep - for shortpath in short_paths - ) - if not should_skip: - short_paths.add(path) - return short_paths - - -def compress_for_rename(paths: Iterable[str]) -> Set[str]: - """Returns a set containing the paths that need to be renamed. - - This set may include directories when the original sequence of paths - included every file on disk. - """ - case_map = {os.path.normcase(p): p for p in paths} - remaining = set(case_map) - unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len) - wildcards: Set[str] = set() - - def norm_join(*a: str) -> str: - return os.path.normcase(os.path.join(*a)) - - for root in unchecked: - if any(os.path.normcase(root).startswith(w) for w in wildcards): - # This directory has already been handled. - continue - - all_files: Set[str] = set() - all_subdirs: Set[str] = set() - for dirname, subdirs, files in os.walk(root): - all_subdirs.update(norm_join(root, dirname, d) for d in subdirs) - all_files.update(norm_join(root, dirname, f) for f in files) - # If all the files we found are in our remaining set of files to - # remove, then remove them from the latter set and add a wildcard - # for the directory. - if not (all_files - remaining): - remaining.difference_update(all_files) - wildcards.add(root + os.sep) - - return set(map(case_map.__getitem__, remaining)) | wildcards - - -def compress_for_output_listing(paths: Iterable[str]) -> Tuple[Set[str], Set[str]]: - """Returns a tuple of 2 sets of which paths to display to user - - The first set contains paths that would be deleted. Files of a package - are not added and the top-level directory of the package has a '*' added - at the end - to signify that all it's contents are removed. - - The second set contains files that would have been skipped in the above - folders. - """ - - will_remove = set(paths) - will_skip = set() - - # Determine folders and files - folders = set() - files = set() - for path in will_remove: - if path.endswith(".pyc"): - continue - if path.endswith("__init__.py") or ".dist-info" in path: - folders.add(os.path.dirname(path)) - files.add(path) - - _normcased_files = set(map(os.path.normcase, files)) - - folders = compact(folders) - - # This walks the tree using os.walk to not miss extra folders - # that might get added. - for folder in folders: - for dirpath, _, dirfiles in os.walk(folder): - for fname in dirfiles: - if fname.endswith(".pyc"): - continue - - file_ = os.path.join(dirpath, fname) - if ( - os.path.isfile(file_) - and os.path.normcase(file_) not in _normcased_files - ): - # We are skipping this file. Add it to the set. - will_skip.add(file_) - - will_remove = files | {os.path.join(folder, "*") for folder in folders} - - return will_remove, will_skip - - -class StashedUninstallPathSet: - """A set of file rename operations to stash files while - tentatively uninstalling them.""" - - def __init__(self) -> None: - # Mapping from source file root to [Adjacent]TempDirectory - # for files under that directory. - self._save_dirs: Dict[str, TempDirectory] = {} - # (old path, new path) tuples for each move that may need - # to be undone. - self._moves: List[Tuple[str, str]] = [] - - def _get_directory_stash(self, path: str) -> str: - """Stashes a directory. - - Directories are stashed adjacent to their original location if - possible, or else moved/copied into the user's temp dir.""" - - try: - save_dir: TempDirectory = AdjacentTempDirectory(path) - except OSError: - save_dir = TempDirectory(kind="uninstall") - self._save_dirs[os.path.normcase(path)] = save_dir - - return save_dir.path - - def _get_file_stash(self, path: str) -> str: - """Stashes a file. - - If no root has been provided, one will be created for the directory - in the user's temp directory.""" - path = os.path.normcase(path) - head, old_head = os.path.dirname(path), None - save_dir = None - - while head != old_head: - try: - save_dir = self._save_dirs[head] - break - except KeyError: - pass - head, old_head = os.path.dirname(head), head - else: - # Did not find any suitable root - head = os.path.dirname(path) - save_dir = TempDirectory(kind="uninstall") - self._save_dirs[head] = save_dir - - relpath = os.path.relpath(path, head) - if relpath and relpath != os.path.curdir: - return os.path.join(save_dir.path, relpath) - return save_dir.path - - def stash(self, path: str) -> str: - """Stashes the directory or file and returns its new location. - Handle symlinks as files to avoid modifying the symlink targets. - """ - path_is_dir = os.path.isdir(path) and not os.path.islink(path) - if path_is_dir: - new_path = self._get_directory_stash(path) - else: - new_path = self._get_file_stash(path) - - self._moves.append((path, new_path)) - if path_is_dir and os.path.isdir(new_path): - # If we're moving a directory, we need to - # remove the destination first or else it will be - # moved to inside the existing directory. - # We just created new_path ourselves, so it will - # be removable. - os.rmdir(new_path) - renames(path, new_path) - return new_path - - def commit(self) -> None: - """Commits the uninstall by removing stashed files.""" - for save_dir in self._save_dirs.values(): - save_dir.cleanup() - self._moves = [] - self._save_dirs = {} - - def rollback(self) -> None: - """Undoes the uninstall by moving stashed files back.""" - for p in self._moves: - logger.info("Moving to %s\n from %s", *p) - - for new_path, path in self._moves: - try: - logger.debug("Replacing %s from %s", new_path, path) - if os.path.isfile(new_path) or os.path.islink(new_path): - os.unlink(new_path) - elif os.path.isdir(new_path): - rmtree(new_path) - renames(path, new_path) - except OSError as ex: - logger.error("Failed to restore %s", new_path) - logger.debug("Exception: %s", ex) - - self.commit() - - @property - def can_rollback(self) -> bool: - return bool(self._moves) - - -class UninstallPathSet: - """A set of file paths to be removed in the uninstallation of a - requirement.""" - - def __init__(self, dist: BaseDistribution) -> None: - self._paths: Set[str] = set() - self._refuse: Set[str] = set() - self._pth: Dict[str, UninstallPthEntries] = {} - self._dist = dist - self._moved_paths = StashedUninstallPathSet() - # Create local cache of normalize_path results. Creating an UninstallPathSet - # can result in hundreds/thousands of redundant calls to normalize_path with - # the same args, which hurts performance. - self._normalize_path_cached = functools.lru_cache(normalize_path) - - def _permitted(self, path: str) -> bool: - """ - Return True if the given path is one we are permitted to - remove/modify, False otherwise. - - """ - # aka is_local, but caching normalized sys.prefix - if not running_under_virtualenv(): - return True - return path.startswith(self._normalize_path_cached(sys.prefix)) - - def add(self, path: str) -> None: - head, tail = os.path.split(path) - - # we normalize the head to resolve parent directory symlinks, but not - # the tail, since we only want to uninstall symlinks, not their targets - path = os.path.join(self._normalize_path_cached(head), os.path.normcase(tail)) - - if not os.path.exists(path): - return - if self._permitted(path): - self._paths.add(path) - else: - self._refuse.add(path) - - # __pycache__ files can show up after 'installed-files.txt' is created, - # due to imports - if os.path.splitext(path)[1] == ".py": - self.add(cache_from_source(path)) - - def add_pth(self, pth_file: str, entry: str) -> None: - pth_file = self._normalize_path_cached(pth_file) - if self._permitted(pth_file): - if pth_file not in self._pth: - self._pth[pth_file] = UninstallPthEntries(pth_file) - self._pth[pth_file].add(entry) - else: - self._refuse.add(pth_file) - - def remove(self, auto_confirm: bool = False, verbose: bool = False) -> None: - """Remove paths in ``self._paths`` with confirmation (unless - ``auto_confirm`` is True).""" - - if not self._paths: - logger.info( - "Can't uninstall '%s'. No files were found to uninstall.", - self._dist.raw_name, - ) - return - - dist_name_version = f"{self._dist.raw_name}-{self._dist.raw_version}" - logger.info("Uninstalling %s:", dist_name_version) - - with indent_log(): - if auto_confirm or self._allowed_to_proceed(verbose): - moved = self._moved_paths - - for_rename = compress_for_rename(self._paths) - - for path in sorted(compact(for_rename)): - moved.stash(path) - logger.verbose("Removing file or directory %s", path) - - for pth in self._pth.values(): - pth.remove() - - logger.info("Successfully uninstalled %s", dist_name_version) - - def _allowed_to_proceed(self, verbose: bool) -> bool: - """Display which files would be deleted and prompt for confirmation""" - - def _display(msg: str, paths: Iterable[str]) -> None: - if not paths: - return - - logger.info(msg) - with indent_log(): - for path in sorted(compact(paths)): - logger.info(path) - - if not verbose: - will_remove, will_skip = compress_for_output_listing(self._paths) - else: - # In verbose mode, display all the files that are going to be - # deleted. - will_remove = set(self._paths) - will_skip = set() - - _display("Would remove:", will_remove) - _display("Would not remove (might be manually added):", will_skip) - _display("Would not remove (outside of prefix):", self._refuse) - if verbose: - _display("Will actually move:", compress_for_rename(self._paths)) - - return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n" - - def rollback(self) -> None: - """Rollback the changes previously made by remove().""" - if not self._moved_paths.can_rollback: - logger.error( - "Can't roll back %s; was not uninstalled", - self._dist.raw_name, - ) - return - logger.info("Rolling back uninstall of %s", self._dist.raw_name) - self._moved_paths.rollback() - for pth in self._pth.values(): - pth.rollback() - - def commit(self) -> None: - """Remove temporary save dir: rollback will no longer be possible.""" - self._moved_paths.commit() - - @classmethod - def from_dist(cls, dist: BaseDistribution) -> "UninstallPathSet": - dist_location = dist.location - info_location = dist.info_location - if dist_location is None: - logger.info( - "Not uninstalling %s since it is not installed", - dist.canonical_name, - ) - return cls(dist) - - normalized_dist_location = normalize_path(dist_location) - if not dist.local: - logger.info( - "Not uninstalling %s at %s, outside environment %s", - dist.canonical_name, - normalized_dist_location, - sys.prefix, - ) - return cls(dist) - - if normalized_dist_location in { - p - for p in {sysconfig.get_path("stdlib"), sysconfig.get_path("platstdlib")} - if p - }: - logger.info( - "Not uninstalling %s at %s, as it is in the standard library.", - dist.canonical_name, - normalized_dist_location, - ) - return cls(dist) - - paths_to_remove = cls(dist) - develop_egg_link = egg_link_path_from_location(dist.raw_name) - - # Distribution is installed with metadata in a "flat" .egg-info - # directory. This means it is not a modern .dist-info installation, an - # egg, or legacy editable. - setuptools_flat_installation = ( - dist.installed_with_setuptools_egg_info - and info_location is not None - and os.path.exists(info_location) - # If dist is editable and the location points to a ``.egg-info``, - # we are in fact in the legacy editable case. - and not info_location.endswith(f"{dist.setuptools_filename}.egg-info") - ) - - # Uninstall cases order do matter as in the case of 2 installs of the - # same package, pip needs to uninstall the currently detected version - if setuptools_flat_installation: - if info_location is not None: - paths_to_remove.add(info_location) - installed_files = dist.iter_declared_entries() - if installed_files is not None: - for installed_file in installed_files: - paths_to_remove.add(os.path.join(dist_location, installed_file)) - # FIXME: need a test for this elif block - # occurs with --single-version-externally-managed/--record outside - # of pip - elif dist.is_file("top_level.txt"): - try: - namespace_packages = dist.read_text("namespace_packages.txt") - except FileNotFoundError: - namespaces = [] - else: - namespaces = namespace_packages.splitlines(keepends=False) - for top_level_pkg in [ - p - for p in dist.read_text("top_level.txt").splitlines() - if p and p not in namespaces - ]: - path = os.path.join(dist_location, top_level_pkg) - paths_to_remove.add(path) - paths_to_remove.add(f"{path}.py") - paths_to_remove.add(f"{path}.pyc") - paths_to_remove.add(f"{path}.pyo") - - elif dist.installed_by_distutils: - raise LegacyDistutilsInstall(distribution=dist) - - elif dist.installed_as_egg: - # package installed by easy_install - # We cannot match on dist.egg_name because it can slightly vary - # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg - paths_to_remove.add(dist_location) - easy_install_egg = os.path.split(dist_location)[1] - easy_install_pth = os.path.join( - os.path.dirname(dist_location), - "easy-install.pth", - ) - paths_to_remove.add_pth(easy_install_pth, "./" + easy_install_egg) - - elif dist.installed_with_dist_info: - for path in uninstallation_paths(dist): - paths_to_remove.add(path) - - elif develop_egg_link: - # PEP 660 modern editable is handled in the ``.dist-info`` case - # above, so this only covers the setuptools-style editable. - with open(develop_egg_link) as fh: - link_pointer = os.path.normcase(fh.readline().strip()) - normalized_link_pointer = paths_to_remove._normalize_path_cached( - link_pointer - ) - assert os.path.samefile( - normalized_link_pointer, normalized_dist_location - ), ( - f"Egg-link {develop_egg_link} (to {link_pointer}) does not match " - f"installed location of {dist.raw_name} (at {dist_location})" - ) - paths_to_remove.add(develop_egg_link) - easy_install_pth = os.path.join( - os.path.dirname(develop_egg_link), "easy-install.pth" - ) - paths_to_remove.add_pth(easy_install_pth, dist_location) - - else: - logger.debug( - "Not sure how to uninstall: %s - Check: %s", - dist, - dist_location, - ) - - if dist.in_usersite: - bin_dir = get_bin_user() - else: - bin_dir = get_bin_prefix() - - # find distutils scripts= scripts - try: - for script in dist.iter_distutils_script_names(): - paths_to_remove.add(os.path.join(bin_dir, script)) - if WINDOWS: - paths_to_remove.add(os.path.join(bin_dir, f"{script}.bat")) - except (FileNotFoundError, NotADirectoryError): - pass - - # find console_scripts and gui_scripts - def iter_scripts_to_remove( - dist: BaseDistribution, - bin_dir: str, - ) -> Generator[str, None, None]: - for entry_point in dist.iter_entry_points(): - if entry_point.group == "console_scripts": - yield from _script_names(bin_dir, entry_point.name, False) - elif entry_point.group == "gui_scripts": - yield from _script_names(bin_dir, entry_point.name, True) - - for s in iter_scripts_to_remove(dist, bin_dir): - paths_to_remove.add(s) - - return paths_to_remove - - -class UninstallPthEntries: - def __init__(self, pth_file: str) -> None: - self.file = pth_file - self.entries: Set[str] = set() - self._saved_lines: Optional[List[bytes]] = None - - def add(self, entry: str) -> None: - entry = os.path.normcase(entry) - # On Windows, os.path.normcase converts the entry to use - # backslashes. This is correct for entries that describe absolute - # paths outside of site-packages, but all the others use forward - # slashes. - # os.path.splitdrive is used instead of os.path.isabs because isabs - # treats non-absolute paths with drive letter markings like c:foo\bar - # as absolute paths. It also does not recognize UNC paths if they don't - # have more than "\\sever\share". Valid examples: "\\server\share\" or - # "\\server\share\folder". - if WINDOWS and not os.path.splitdrive(entry)[0]: - entry = entry.replace("\\", "/") - self.entries.add(entry) - - def remove(self) -> None: - logger.verbose("Removing pth entries from %s:", self.file) - - # If the file doesn't exist, log a warning and return - if not os.path.isfile(self.file): - logger.warning("Cannot remove entries from nonexistent file %s", self.file) - return - with open(self.file, "rb") as fh: - # windows uses '\r\n' with py3k, but uses '\n' with py2.x - lines = fh.readlines() - self._saved_lines = lines - if any(b"\r\n" in line for line in lines): - endline = "\r\n" - else: - endline = "\n" - # handle missing trailing newline - if lines and not lines[-1].endswith(endline.encode("utf-8")): - lines[-1] = lines[-1] + endline.encode("utf-8") - for entry in self.entries: - try: - logger.verbose("Removing entry: %s", entry) - lines.remove((entry + endline).encode("utf-8")) - except ValueError: - pass - with open(self.file, "wb") as fh: - fh.writelines(lines) - - def rollback(self) -> bool: - if self._saved_lines is None: - logger.error("Cannot roll back changes to %s, none were made", self.file) - return False - logger.debug("Rolling %s back to previous state", self.file) - with open(self.file, "wb") as fh: - fh.writelines(self._saved_lines) - return True diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 358b7df..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc deleted file mode 100644 index 0622d41..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/base.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/base.py deleted file mode 100644 index 42dade1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/base.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Callable, List, Optional - -from pip._internal.req.req_install import InstallRequirement -from pip._internal.req.req_set import RequirementSet - -InstallRequirementProvider = Callable[ - [str, Optional[InstallRequirement]], InstallRequirement -] - - -class BaseResolver: - def resolve( - self, root_reqs: List[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - raise NotImplementedError() - - def get_installation_order( - self, req_set: RequirementSet - ) -> List[InstallRequirement]: - raise NotImplementedError() diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5efa6e4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc deleted file mode 100644 index 260e2f6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py deleted file mode 100644 index 1dd0d70..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py +++ /dev/null @@ -1,597 +0,0 @@ -"""Dependency Resolution - -The dependency resolution in pip is performed as follows: - -for top-level requirements: - a. only one spec allowed per project, regardless of conflicts or not. - otherwise a "double requirement" exception is raised - b. they override sub-dependency requirements. -for sub-dependencies - a. "first found, wins" (where the order is breadth first) -""" - -import logging -import sys -from collections import defaultdict -from itertools import chain -from typing import DefaultDict, Iterable, List, Optional, Set, Tuple - -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.requirements import Requirement - -from pip._internal.cache import WheelCache -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, - DistributionNotFound, - HashError, - HashErrors, - InstallationError, - NoneMetadataError, - UnsupportedPythonVersion, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.req_install import ( - InstallRequirement, - check_invalid_constraint_type, -) -from pip._internal.req.req_set import RequirementSet -from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider -from pip._internal.utils import compatibility_tags -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.direct_url_helpers import direct_url_from_link -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import normalize_version_info -from pip._internal.utils.packaging import check_requires_python - -logger = logging.getLogger(__name__) - -DiscoveredDependencies = DefaultDict[Optional[str], List[InstallRequirement]] - - -def _check_dist_requires_python( - dist: BaseDistribution, - version_info: Tuple[int, int, int], - ignore_requires_python: bool = False, -) -> None: - """ - Check whether the given Python version is compatible with a distribution's - "Requires-Python" value. - - :param version_info: A 3-tuple of ints representing the Python - major-minor-micro version to check. - :param ignore_requires_python: Whether to ignore the "Requires-Python" - value if the given Python version isn't compatible. - - :raises UnsupportedPythonVersion: When the given Python version isn't - compatible. - """ - # This idiosyncratically converts the SpecifierSet to str and let - # check_requires_python then parse it again into SpecifierSet. But this - # is the legacy resolver so I'm just not going to bother refactoring. - try: - requires_python = str(dist.requires_python) - except FileNotFoundError as e: - raise NoneMetadataError(dist, str(e)) - try: - is_compatible = check_requires_python( - requires_python, - version_info=version_info, - ) - except specifiers.InvalidSpecifier as exc: - logger.warning( - "Package %r has an invalid Requires-Python: %s", dist.raw_name, exc - ) - return - - if is_compatible: - return - - version = ".".join(map(str, version_info)) - if ignore_requires_python: - logger.debug( - "Ignoring failed Requires-Python check for package %r: %s not in %r", - dist.raw_name, - version, - requires_python, - ) - return - - raise UnsupportedPythonVersion( - f"Package {dist.raw_name!r} requires a different Python: " - f"{version} not in {requires_python!r}" - ) - - -class Resolver(BaseResolver): - """Resolves which packages need to be installed/uninstalled to perform \ - the requested operation without breaking the requirements of any package. - """ - - _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} - - def __init__( - self, - preparer: RequirementPreparer, - finder: PackageFinder, - wheel_cache: Optional[WheelCache], - make_install_req: InstallRequirementProvider, - use_user_site: bool, - ignore_dependencies: bool, - ignore_installed: bool, - ignore_requires_python: bool, - force_reinstall: bool, - upgrade_strategy: str, - py_version_info: Optional[Tuple[int, ...]] = None, - ) -> None: - super().__init__() - assert upgrade_strategy in self._allowed_strategies - - if py_version_info is None: - py_version_info = sys.version_info[:3] - else: - py_version_info = normalize_version_info(py_version_info) - - self._py_version_info = py_version_info - - self.preparer = preparer - self.finder = finder - self.wheel_cache = wheel_cache - - self.upgrade_strategy = upgrade_strategy - self.force_reinstall = force_reinstall - self.ignore_dependencies = ignore_dependencies - self.ignore_installed = ignore_installed - self.ignore_requires_python = ignore_requires_python - self.use_user_site = use_user_site - self._make_install_req = make_install_req - - self._discovered_dependencies: DiscoveredDependencies = defaultdict(list) - - def resolve( - self, root_reqs: List[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - """Resolve what operations need to be done - - As a side-effect of this method, the packages (and their dependencies) - are downloaded, unpacked and prepared for installation. This - preparation is done by ``pip.operations.prepare``. - - Once PyPI has static dependency metadata available, it would be - possible to move the preparation to become a step separated from - dependency resolution. - """ - requirement_set = RequirementSet(check_supported_wheels=check_supported_wheels) - for req in root_reqs: - if req.constraint: - check_invalid_constraint_type(req) - self._add_requirement_to_set(requirement_set, req) - - # Actually prepare the files, and collect any exceptions. Most hash - # exceptions cannot be checked ahead of time, because - # _populate_link() needs to be called before we can make decisions - # based on link type. - discovered_reqs: List[InstallRequirement] = [] - hash_errors = HashErrors() - for req in chain(requirement_set.all_requirements, discovered_reqs): - try: - discovered_reqs.extend(self._resolve_one(requirement_set, req)) - except HashError as exc: - exc.req = req - hash_errors.append(exc) - - if hash_errors: - raise hash_errors - - return requirement_set - - def _add_requirement_to_set( - self, - requirement_set: RequirementSet, - install_req: InstallRequirement, - parent_req_name: Optional[str] = None, - extras_requested: Optional[Iterable[str]] = None, - ) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]]: - """Add install_req as a requirement to install. - - :param parent_req_name: The name of the requirement that needed this - added. The name is used because when multiple unnamed requirements - resolve to the same name, we could otherwise end up with dependency - links that point outside the Requirements set. parent_req must - already be added. Note that None implies that this is a user - supplied requirement, vs an inferred one. - :param extras_requested: an iterable of extras used to evaluate the - environment markers. - :return: Additional requirements to scan. That is either [] if - the requirement is not applicable, or [install_req] if the - requirement is applicable and has just been added. - """ - # If the markers do not match, ignore this requirement. - if not install_req.match_markers(extras_requested): - logger.info( - "Ignoring %s: markers '%s' don't match your environment", - install_req.name, - install_req.markers, - ) - return [], None - - # If the wheel is not supported, raise an error. - # Should check this after filtering out based on environment markers to - # allow specifying different wheels based on the environment/OS, in a - # single requirements file. - if install_req.link and install_req.link.is_wheel: - wheel = Wheel(install_req.link.filename) - tags = compatibility_tags.get_supported() - if requirement_set.check_supported_wheels and not wheel.supported(tags): - raise InstallationError( - f"{wheel.filename} is not a supported wheel on this platform." - ) - - # This next bit is really a sanity check. - assert ( - not install_req.user_supplied or parent_req_name is None - ), "a user supplied req shouldn't have a parent" - - # Unnamed requirements are scanned again and the requirement won't be - # added as a dependency until after scanning. - if not install_req.name: - requirement_set.add_unnamed_requirement(install_req) - return [install_req], None - - try: - existing_req: Optional[InstallRequirement] = ( - requirement_set.get_requirement(install_req.name) - ) - except KeyError: - existing_req = None - - has_conflicting_requirement = ( - parent_req_name is None - and existing_req - and not existing_req.constraint - and existing_req.extras == install_req.extras - and existing_req.req - and install_req.req - and existing_req.req.specifier != install_req.req.specifier - ) - if has_conflicting_requirement: - raise InstallationError( - f"Double requirement given: {install_req} " - f"(already in {existing_req}, name={install_req.name!r})" - ) - - # When no existing requirement exists, add the requirement as a - # dependency and it will be scanned again after. - if not existing_req: - requirement_set.add_named_requirement(install_req) - # We'd want to rescan this requirement later - return [install_req], install_req - - # Assume there's no need to scan, and that we've already - # encountered this for scanning. - if install_req.constraint or not existing_req.constraint: - return [], existing_req - - does_not_satisfy_constraint = install_req.link and not ( - existing_req.link and install_req.link.path == existing_req.link.path - ) - if does_not_satisfy_constraint: - raise InstallationError( - f"Could not satisfy constraints for '{install_req.name}': " - "installation from path or url cannot be " - "constrained to a version" - ) - # If we're now installing a constraint, mark the existing - # object for real installation. - existing_req.constraint = False - # If we're now installing a user supplied requirement, - # mark the existing object as such. - if install_req.user_supplied: - existing_req.user_supplied = True - existing_req.extras = tuple( - sorted(set(existing_req.extras) | set(install_req.extras)) - ) - logger.debug( - "Setting %s extras to: %s", - existing_req, - existing_req.extras, - ) - # Return the existing requirement for addition to the parent and - # scanning again. - return [existing_req], existing_req - - def _is_upgrade_allowed(self, req: InstallRequirement) -> bool: - if self.upgrade_strategy == "to-satisfy-only": - return False - elif self.upgrade_strategy == "eager": - return True - else: - assert self.upgrade_strategy == "only-if-needed" - return req.user_supplied or req.constraint - - def _set_req_to_reinstall(self, req: InstallRequirement) -> None: - """ - Set a requirement to be installed. - """ - # Don't uninstall the conflict if doing a user install and the - # conflict is not a user install. - assert req.satisfied_by is not None - if not self.use_user_site or req.satisfied_by.in_usersite: - req.should_reinstall = True - req.satisfied_by = None - - def _check_skip_installed( - self, req_to_install: InstallRequirement - ) -> Optional[str]: - """Check if req_to_install should be skipped. - - This will check if the req is installed, and whether we should upgrade - or reinstall it, taking into account all the relevant user options. - - After calling this req_to_install will only have satisfied_by set to - None if the req_to_install is to be upgraded/reinstalled etc. Any - other value will be a dist recording the current thing installed that - satisfies the requirement. - - Note that for vcs urls and the like we can't assess skipping in this - routine - we simply identify that we need to pull the thing down, - then later on it is pulled down and introspected to assess upgrade/ - reinstalls etc. - - :return: A text reason for why it was skipped, or None. - """ - if self.ignore_installed: - return None - - req_to_install.check_if_exists(self.use_user_site) - if not req_to_install.satisfied_by: - return None - - if self.force_reinstall: - self._set_req_to_reinstall(req_to_install) - return None - - if not self._is_upgrade_allowed(req_to_install): - if self.upgrade_strategy == "only-if-needed": - return "already satisfied, skipping upgrade" - return "already satisfied" - - # Check for the possibility of an upgrade. For link-based - # requirements we have to pull the tree down and inspect to assess - # the version #, so it's handled way down. - if not req_to_install.link: - try: - self.finder.find_requirement(req_to_install, upgrade=True) - except BestVersionAlreadyInstalled: - # Then the best version is installed. - return "already up-to-date" - except DistributionNotFound: - # No distribution found, so we squash the error. It will - # be raised later when we re-try later to do the install. - # Why don't we just raise here? - pass - - self._set_req_to_reinstall(req_to_install) - return None - - def _find_requirement_link(self, req: InstallRequirement) -> Optional[Link]: - upgrade = self._is_upgrade_allowed(req) - best_candidate = self.finder.find_requirement(req, upgrade) - if not best_candidate: - return None - - # Log a warning per PEP 592 if necessary before returning. - link = best_candidate.link - if link.is_yanked: - reason = link.yanked_reason or "" - msg = ( - # Mark this as a unicode string to prevent - # "UnicodeEncodeError: 'ascii' codec can't encode character" - # in Python 2 when the reason contains non-ascii characters. - "The candidate selected for download or install is a " - f"yanked version: {best_candidate}\n" - f"Reason for being yanked: {reason}" - ) - logger.warning(msg) - - return link - - def _populate_link(self, req: InstallRequirement) -> None: - """Ensure that if a link can be found for this, that it is found. - - Note that req.link may still be None - if the requirement is already - installed and not needed to be upgraded based on the return value of - _is_upgrade_allowed(). - - If preparer.require_hashes is True, don't use the wheel cache, because - cached wheels, always built locally, have different hashes than the - files downloaded from the index server and thus throw false hash - mismatches. Furthermore, cached wheels at present have undeterministic - contents due to file modification times. - """ - if req.link is None: - req.link = self._find_requirement_link(req) - - if self.wheel_cache is None or self.preparer.require_hashes: - return - - assert req.link is not None, "_find_requirement_link unexpectedly returned None" - cache_entry = self.wheel_cache.get_cache_entry( - link=req.link, - package_name=req.name, - supported_tags=get_supported(), - ) - if cache_entry is not None: - logger.debug("Using cached wheel link: %s", cache_entry.link) - if req.link is req.original_link and cache_entry.persistent: - req.cached_wheel_source_link = req.link - if cache_entry.origin is not None: - req.download_info = cache_entry.origin - else: - # Legacy cache entry that does not have origin.json. - # download_info may miss the archive_info.hashes field. - req.download_info = direct_url_from_link( - req.link, link_is_in_wheel_cache=cache_entry.persistent - ) - req.link = cache_entry.link - - def _get_dist_for(self, req: InstallRequirement) -> BaseDistribution: - """Takes a InstallRequirement and returns a single AbstractDist \ - representing a prepared variant of the same. - """ - if req.editable: - return self.preparer.prepare_editable_requirement(req) - - # satisfied_by is only evaluated by calling _check_skip_installed, - # so it must be None here. - assert req.satisfied_by is None - skip_reason = self._check_skip_installed(req) - - if req.satisfied_by: - return self.preparer.prepare_installed_requirement(req, skip_reason) - - # We eagerly populate the link, since that's our "legacy" behavior. - self._populate_link(req) - dist = self.preparer.prepare_linked_requirement(req) - - # NOTE - # The following portion is for determining if a certain package is - # going to be re-installed/upgraded or not and reporting to the user. - # This should probably get cleaned up in a future refactor. - - # req.req is only avail after unpack for URL - # pkgs repeat check_if_exists to uninstall-on-upgrade - # (#14) - if not self.ignore_installed: - req.check_if_exists(self.use_user_site) - - if req.satisfied_by: - should_modify = ( - self.upgrade_strategy != "to-satisfy-only" - or self.force_reinstall - or self.ignore_installed - or req.link.scheme == "file" - ) - if should_modify: - self._set_req_to_reinstall(req) - else: - logger.info( - "Requirement already satisfied (use --upgrade to upgrade): %s", - req, - ) - return dist - - def _resolve_one( - self, - requirement_set: RequirementSet, - req_to_install: InstallRequirement, - ) -> List[InstallRequirement]: - """Prepare a single requirements file. - - :return: A list of additional InstallRequirements to also install. - """ - # Tell user what we are doing for this requirement: - # obtain (editable), skipping, processing (local url), collecting - # (remote url or package name) - if req_to_install.constraint or req_to_install.prepared: - return [] - - req_to_install.prepared = True - - # Parse and return dependencies - dist = self._get_dist_for(req_to_install) - # This will raise UnsupportedPythonVersion if the given Python - # version isn't compatible with the distribution's Requires-Python. - _check_dist_requires_python( - dist, - version_info=self._py_version_info, - ignore_requires_python=self.ignore_requires_python, - ) - - more_reqs: List[InstallRequirement] = [] - - def add_req(subreq: Requirement, extras_requested: Iterable[str]) -> None: - # This idiosyncratically converts the Requirement to str and let - # make_install_req then parse it again into Requirement. But this is - # the legacy resolver so I'm just not going to bother refactoring. - sub_install_req = self._make_install_req(str(subreq), req_to_install) - parent_req_name = req_to_install.name - to_scan_again, add_to_parent = self._add_requirement_to_set( - requirement_set, - sub_install_req, - parent_req_name=parent_req_name, - extras_requested=extras_requested, - ) - if parent_req_name and add_to_parent: - self._discovered_dependencies[parent_req_name].append(add_to_parent) - more_reqs.extend(to_scan_again) - - with indent_log(): - # We add req_to_install before its dependencies, so that we - # can refer to it when adding dependencies. - assert req_to_install.name is not None - if not requirement_set.has_requirement(req_to_install.name): - # 'unnamed' requirements will get added here - # 'unnamed' requirements can only come from being directly - # provided by the user. - assert req_to_install.user_supplied - self._add_requirement_to_set( - requirement_set, req_to_install, parent_req_name=None - ) - - if not self.ignore_dependencies: - if req_to_install.extras: - logger.debug( - "Installing extra requirements: %r", - ",".join(req_to_install.extras), - ) - missing_requested = sorted( - set(req_to_install.extras) - set(dist.iter_provided_extras()) - ) - for missing in missing_requested: - logger.warning( - "%s %s does not provide the extra '%s'", - dist.raw_name, - dist.version, - missing, - ) - - available_requested = sorted( - set(dist.iter_provided_extras()) & set(req_to_install.extras) - ) - for subreq in dist.iter_dependencies(available_requested): - add_req(subreq, extras_requested=available_requested) - - return more_reqs - - def get_installation_order( - self, req_set: RequirementSet - ) -> List[InstallRequirement]: - """Create the installation order. - - The installation order is topological - requirements are installed - before the requiring thing. We break cycles at an arbitrary point, - and make no other guarantees. - """ - # The current implementation, which we may change at any point - # installs the user specified things in the order given, except when - # dependencies must come earlier to achieve topological order. - order = [] - ordered_reqs: Set[InstallRequirement] = set() - - def schedule(req: InstallRequirement) -> None: - if req.satisfied_by or req in ordered_reqs: - return - if req.constraint: - return - ordered_reqs.add(req) - for dep in self._discovered_dependencies[req.name]: - schedule(dep) - order.append(req) - - for install_req in req_set.requirements.values(): - schedule(install_req) - return order diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c3e9b5c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc deleted file mode 100644 index c0de083..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc deleted file mode 100644 index e7c3812..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc deleted file mode 100644 index cdcd7ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc deleted file mode 100644 index 77bfb7c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc deleted file mode 100644 index b85a2b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc deleted file mode 100644 index d4524d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc deleted file mode 100644 index a903ed3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc deleted file mode 100644 index ea9d307..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py deleted file mode 100644 index 0f31dc9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py +++ /dev/null @@ -1,139 +0,0 @@ -from dataclasses import dataclass -from typing import FrozenSet, Iterable, Optional, Tuple - -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName -from pip._vendor.packaging.version import Version - -from pip._internal.models.link import Link, links_equivalent -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.hashes import Hashes - -CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]] - - -def format_name(project: NormalizedName, extras: FrozenSet[NormalizedName]) -> str: - if not extras: - return project - extras_expr = ",".join(sorted(extras)) - return f"{project}[{extras_expr}]" - - -@dataclass(frozen=True) -class Constraint: - specifier: SpecifierSet - hashes: Hashes - links: FrozenSet[Link] - - @classmethod - def empty(cls) -> "Constraint": - return Constraint(SpecifierSet(), Hashes(), frozenset()) - - @classmethod - def from_ireq(cls, ireq: InstallRequirement) -> "Constraint": - links = frozenset([ireq.link]) if ireq.link else frozenset() - return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links) - - def __bool__(self) -> bool: - return bool(self.specifier) or bool(self.hashes) or bool(self.links) - - def __and__(self, other: InstallRequirement) -> "Constraint": - if not isinstance(other, InstallRequirement): - return NotImplemented - specifier = self.specifier & other.specifier - hashes = self.hashes & other.hashes(trust_internet=False) - links = self.links - if other.link: - links = links.union([other.link]) - return Constraint(specifier, hashes, links) - - def is_satisfied_by(self, candidate: "Candidate") -> bool: - # Reject if there are any mismatched URL constraints on this package. - if self.links and not all(_match_link(link, candidate) for link in self.links): - return False - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - return self.specifier.contains(candidate.version, prereleases=True) - - -class Requirement: - @property - def project_name(self) -> NormalizedName: - """The "project name" of a requirement. - - This is different from ``name`` if this requirement contains extras, - in which case ``name`` would contain the ``[...]`` part, while this - refers to the name of the project. - """ - raise NotImplementedError("Subclass should override") - - @property - def name(self) -> str: - """The name identifying this requirement in the resolver. - - This is different from ``project_name`` if this requirement contains - extras, where ``project_name`` would not contain the ``[...]`` part. - """ - raise NotImplementedError("Subclass should override") - - def is_satisfied_by(self, candidate: "Candidate") -> bool: - return False - - def get_candidate_lookup(self) -> CandidateLookup: - raise NotImplementedError("Subclass should override") - - def format_for_error(self) -> str: - raise NotImplementedError("Subclass should override") - - -def _match_link(link: Link, candidate: "Candidate") -> bool: - if candidate.source_link: - return links_equivalent(link, candidate.source_link) - return False - - -class Candidate: - @property - def project_name(self) -> NormalizedName: - """The "project name" of the candidate. - - This is different from ``name`` if this candidate contains extras, - in which case ``name`` would contain the ``[...]`` part, while this - refers to the name of the project. - """ - raise NotImplementedError("Override in subclass") - - @property - def name(self) -> str: - """The name identifying this candidate in the resolver. - - This is different from ``project_name`` if this candidate contains - extras, where ``project_name`` would not contain the ``[...]`` part. - """ - raise NotImplementedError("Override in subclass") - - @property - def version(self) -> Version: - raise NotImplementedError("Override in subclass") - - @property - def is_installed(self) -> bool: - raise NotImplementedError("Override in subclass") - - @property - def is_editable(self) -> bool: - raise NotImplementedError("Override in subclass") - - @property - def source_link(self) -> Optional[Link]: - raise NotImplementedError("Override in subclass") - - def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: - raise NotImplementedError("Override in subclass") - - def get_install_requirement(self) -> Optional[InstallRequirement]: - raise NotImplementedError("Override in subclass") - - def format_for_error(self) -> str: - raise NotImplementedError("Subclass should override") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py deleted file mode 100644 index 6617644..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py +++ /dev/null @@ -1,574 +0,0 @@ -import logging -import sys -from typing import TYPE_CHECKING, Any, FrozenSet, Iterable, Optional, Tuple, Union, cast - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.exceptions import ( - HashError, - InstallationSubprocessError, - InvalidInstalledPackage, - MetadataInconsistent, - MetadataInvalid, -) -from pip._internal.metadata import BaseDistribution -from pip._internal.models.link import Link, links_equivalent -from pip._internal.models.wheel import Wheel -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, -) -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.direct_url_helpers import direct_url_from_link -from pip._internal.utils.misc import normalize_version_info - -from .base import Candidate, Requirement, format_name - -if TYPE_CHECKING: - from .factory import Factory - -logger = logging.getLogger(__name__) - -BaseCandidate = Union[ - "AlreadyInstalledCandidate", - "EditableCandidate", - "LinkCandidate", -] - -# Avoid conflicting with the PyPI package "Python". -REQUIRES_PYTHON_IDENTIFIER = cast(NormalizedName, "") - - -def as_base_candidate(candidate: Candidate) -> Optional[BaseCandidate]: - """The runtime version of BaseCandidate.""" - base_candidate_classes = ( - AlreadyInstalledCandidate, - EditableCandidate, - LinkCandidate, - ) - if isinstance(candidate, base_candidate_classes): - return candidate - return None - - -def make_install_req_from_link( - link: Link, template: InstallRequirement -) -> InstallRequirement: - assert not template.editable, "template is editable" - if template.req: - line = str(template.req) - else: - line = link.url - ireq = install_req_from_line( - line, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - use_pep517=template.use_pep517, - isolated=template.isolated, - constraint=template.constraint, - global_options=template.global_options, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.original_link = template.original_link - ireq.link = link - ireq.extras = template.extras - return ireq - - -def make_install_req_from_editable( - link: Link, template: InstallRequirement -) -> InstallRequirement: - assert template.editable, "template not editable" - ireq = install_req_from_editable( - link.url, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - use_pep517=template.use_pep517, - isolated=template.isolated, - constraint=template.constraint, - permit_editable_wheels=template.permit_editable_wheels, - global_options=template.global_options, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.extras = template.extras - return ireq - - -def _make_install_req_from_dist( - dist: BaseDistribution, template: InstallRequirement -) -> InstallRequirement: - if template.req: - line = str(template.req) - elif template.link: - line = f"{dist.canonical_name} @ {template.link.url}" - else: - line = f"{dist.canonical_name}=={dist.version}" - ireq = install_req_from_line( - line, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - use_pep517=template.use_pep517, - isolated=template.isolated, - constraint=template.constraint, - global_options=template.global_options, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.satisfied_by = dist - return ireq - - -class _InstallRequirementBackedCandidate(Candidate): - """A candidate backed by an ``InstallRequirement``. - - This represents a package request with the target not being already - in the environment, and needs to be fetched and installed. The backing - ``InstallRequirement`` is responsible for most of the leg work; this - class exposes appropriate information to the resolver. - - :param link: The link passed to the ``InstallRequirement``. The backing - ``InstallRequirement`` will use this link to fetch the distribution. - :param source_link: The link this candidate "originates" from. This is - different from ``link`` when the link is found in the wheel cache. - ``link`` would point to the wheel cache, while this points to the - found remote link (e.g. from pypi.org). - """ - - dist: BaseDistribution - is_installed = False - - def __init__( - self, - link: Link, - source_link: Link, - ireq: InstallRequirement, - factory: "Factory", - name: Optional[NormalizedName] = None, - version: Optional[Version] = None, - ) -> None: - self._link = link - self._source_link = source_link - self._factory = factory - self._ireq = ireq - self._name = name - self._version = version - self.dist = self._prepare() - self._hash: Optional[int] = None - - def __str__(self) -> str: - return f"{self.name} {self.version}" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._link)!r})" - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash((self.__class__, self._link)) - return self._hash - - def __eq__(self, other: Any) -> bool: - if isinstance(other, self.__class__): - return links_equivalent(self._link, other._link) - return False - - @property - def source_link(self) -> Optional[Link]: - return self._source_link - - @property - def project_name(self) -> NormalizedName: - """The normalised name of the project the candidate refers to""" - if self._name is None: - self._name = self.dist.canonical_name - return self._name - - @property - def name(self) -> str: - return self.project_name - - @property - def version(self) -> Version: - if self._version is None: - self._version = self.dist.version - return self._version - - def format_for_error(self) -> str: - return ( - f"{self.name} {self.version} " - f"(from {self._link.file_path if self._link.is_file else self._link})" - ) - - def _prepare_distribution(self) -> BaseDistribution: - raise NotImplementedError("Override in subclass") - - def _check_metadata_consistency(self, dist: BaseDistribution) -> None: - """Check for consistency of project name and version of dist.""" - if self._name is not None and self._name != dist.canonical_name: - raise MetadataInconsistent( - self._ireq, - "name", - self._name, - dist.canonical_name, - ) - if self._version is not None and self._version != dist.version: - raise MetadataInconsistent( - self._ireq, - "version", - str(self._version), - str(dist.version), - ) - # check dependencies are valid - # TODO performance: this means we iterate the dependencies at least twice, - # we may want to cache parsed Requires-Dist - try: - list(dist.iter_dependencies(list(dist.iter_provided_extras()))) - except InvalidRequirement as e: - raise MetadataInvalid(self._ireq, str(e)) - - def _prepare(self) -> BaseDistribution: - try: - dist = self._prepare_distribution() - except HashError as e: - # Provide HashError the underlying ireq that caused it. This - # provides context for the resulting error message to show the - # offending line to the user. - e.req = self._ireq - raise - except InstallationSubprocessError as exc: - # The output has been presented already, so don't duplicate it. - exc.context = "See above for output." - raise - - self._check_metadata_consistency(dist) - return dist - - def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: - requires = self.dist.iter_dependencies() if with_requires else () - for r in requires: - yield from self._factory.make_requirements_from_spec(str(r), self._ireq) - yield self._factory.make_requires_python_requirement(self.dist.requires_python) - - def get_install_requirement(self) -> Optional[InstallRequirement]: - return self._ireq - - -class LinkCandidate(_InstallRequirementBackedCandidate): - is_editable = False - - def __init__( - self, - link: Link, - template: InstallRequirement, - factory: "Factory", - name: Optional[NormalizedName] = None, - version: Optional[Version] = None, - ) -> None: - source_link = link - cache_entry = factory.get_wheel_cache_entry(source_link, name) - if cache_entry is not None: - logger.debug("Using cached wheel link: %s", cache_entry.link) - link = cache_entry.link - ireq = make_install_req_from_link(link, template) - assert ireq.link == link - if ireq.link.is_wheel and not ireq.link.is_file: - wheel = Wheel(ireq.link.filename) - wheel_name = canonicalize_name(wheel.name) - assert name == wheel_name, f"{name!r} != {wheel_name!r} for wheel" - # Version may not be present for PEP 508 direct URLs - if version is not None: - wheel_version = Version(wheel.version) - assert ( - version == wheel_version - ), f"{version!r} != {wheel_version!r} for wheel {name}" - - if cache_entry is not None: - assert ireq.link.is_wheel - assert ireq.link.is_file - if cache_entry.persistent and template.link is template.original_link: - ireq.cached_wheel_source_link = source_link - if cache_entry.origin is not None: - ireq.download_info = cache_entry.origin - else: - # Legacy cache entry that does not have origin.json. - # download_info may miss the archive_info.hashes field. - ireq.download_info = direct_url_from_link( - source_link, link_is_in_wheel_cache=cache_entry.persistent - ) - - super().__init__( - link=link, - source_link=source_link, - ireq=ireq, - factory=factory, - name=name, - version=version, - ) - - def _prepare_distribution(self) -> BaseDistribution: - preparer = self._factory.preparer - return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) - - -class EditableCandidate(_InstallRequirementBackedCandidate): - is_editable = True - - def __init__( - self, - link: Link, - template: InstallRequirement, - factory: "Factory", - name: Optional[NormalizedName] = None, - version: Optional[Version] = None, - ) -> None: - super().__init__( - link=link, - source_link=link, - ireq=make_install_req_from_editable(link, template), - factory=factory, - name=name, - version=version, - ) - - def _prepare_distribution(self) -> BaseDistribution: - return self._factory.preparer.prepare_editable_requirement(self._ireq) - - -class AlreadyInstalledCandidate(Candidate): - is_installed = True - source_link = None - - def __init__( - self, - dist: BaseDistribution, - template: InstallRequirement, - factory: "Factory", - ) -> None: - self.dist = dist - self._ireq = _make_install_req_from_dist(dist, template) - self._factory = factory - self._version = None - - # This is just logging some messages, so we can do it eagerly. - # The returned dist would be exactly the same as self.dist because we - # set satisfied_by in _make_install_req_from_dist. - # TODO: Supply reason based on force_reinstall and upgrade_strategy. - skip_reason = "already satisfied" - factory.preparer.prepare_installed_requirement(self._ireq, skip_reason) - - def __str__(self) -> str: - return str(self.dist) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.dist!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, AlreadyInstalledCandidate): - return NotImplemented - return self.name == other.name and self.version == other.version - - def __hash__(self) -> int: - return hash((self.name, self.version)) - - @property - def project_name(self) -> NormalizedName: - return self.dist.canonical_name - - @property - def name(self) -> str: - return self.project_name - - @property - def version(self) -> Version: - if self._version is None: - self._version = self.dist.version - return self._version - - @property - def is_editable(self) -> bool: - return self.dist.editable - - def format_for_error(self) -> str: - return f"{self.name} {self.version} (Installed)" - - def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: - if not with_requires: - return - - try: - for r in self.dist.iter_dependencies(): - yield from self._factory.make_requirements_from_spec(str(r), self._ireq) - except InvalidRequirement as exc: - raise InvalidInstalledPackage(dist=self.dist, invalid_exc=exc) from None - - def get_install_requirement(self) -> Optional[InstallRequirement]: - return None - - -class ExtrasCandidate(Candidate): - """A candidate that has 'extras', indicating additional dependencies. - - Requirements can be for a project with dependencies, something like - foo[extra]. The extras don't affect the project/version being installed - directly, but indicate that we need additional dependencies. We model that - by having an artificial ExtrasCandidate that wraps the "base" candidate. - - The ExtrasCandidate differs from the base in the following ways: - - 1. It has a unique name, of the form foo[extra]. This causes the resolver - to treat it as a separate node in the dependency graph. - 2. When we're getting the candidate's dependencies, - a) We specify that we want the extra dependencies as well. - b) We add a dependency on the base candidate. - See below for why this is needed. - 3. We return None for the underlying InstallRequirement, as the base - candidate will provide it, and we don't want to end up with duplicates. - - The dependency on the base candidate is needed so that the resolver can't - decide that it should recommend foo[extra1] version 1.0 and foo[extra2] - version 2.0. Having those candidates depend on foo=1.0 and foo=2.0 - respectively forces the resolver to recognise that this is a conflict. - """ - - def __init__( - self, - base: BaseCandidate, - extras: FrozenSet[str], - *, - comes_from: Optional[InstallRequirement] = None, - ) -> None: - """ - :param comes_from: the InstallRequirement that led to this candidate if it - differs from the base's InstallRequirement. This will often be the - case in the sense that this candidate's requirement has the extras - while the base's does not. Unlike the InstallRequirement backed - candidates, this requirement is used solely for reporting purposes, - it does not do any leg work. - """ - self.base = base - self.extras = frozenset(canonicalize_name(e) for e in extras) - self._comes_from = comes_from if comes_from is not None else self.base._ireq - - def __str__(self) -> str: - name, rest = str(self.base).split(" ", 1) - return "{}[{}] {}".format(name, ",".join(self.extras), rest) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(base={self.base!r}, extras={self.extras!r})" - - def __hash__(self) -> int: - return hash((self.base, self.extras)) - - def __eq__(self, other: Any) -> bool: - if isinstance(other, self.__class__): - return self.base == other.base and self.extras == other.extras - return False - - @property - def project_name(self) -> NormalizedName: - return self.base.project_name - - @property - def name(self) -> str: - """The normalised name of the project the candidate refers to""" - return format_name(self.base.project_name, self.extras) - - @property - def version(self) -> Version: - return self.base.version - - def format_for_error(self) -> str: - return "{} [{}]".format( - self.base.format_for_error(), ", ".join(sorted(self.extras)) - ) - - @property - def is_installed(self) -> bool: - return self.base.is_installed - - @property - def is_editable(self) -> bool: - return self.base.is_editable - - @property - def source_link(self) -> Optional[Link]: - return self.base.source_link - - def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: - factory = self.base._factory - - # Add a dependency on the exact base - # (See note 2b in the class docstring) - yield factory.make_requirement_from_candidate(self.base) - if not with_requires: - return - - # The user may have specified extras that the candidate doesn't - # support. We ignore any unsupported extras here. - valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras()) - invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras()) - for extra in sorted(invalid_extras): - logger.warning( - "%s %s does not provide the extra '%s'", - self.base.name, - self.version, - extra, - ) - - for r in self.base.dist.iter_dependencies(valid_extras): - yield from factory.make_requirements_from_spec( - str(r), - self._comes_from, - valid_extras, - ) - - def get_install_requirement(self) -> Optional[InstallRequirement]: - # We don't return anything here, because we always - # depend on the base candidate, and we'll get the - # install requirement from that. - return None - - -class RequiresPythonCandidate(Candidate): - is_installed = False - source_link = None - - def __init__(self, py_version_info: Optional[Tuple[int, ...]]) -> None: - if py_version_info is not None: - version_info = normalize_version_info(py_version_info) - else: - version_info = sys.version_info[:3] - self._version = Version(".".join(str(c) for c in version_info)) - - # We don't need to implement __eq__() and __ne__() since there is always - # only one RequiresPythonCandidate in a resolution, i.e. the host Python. - # The built-in object.__eq__() and object.__ne__() do exactly what we want. - - def __str__(self) -> str: - return f"Python {self._version}" - - @property - def project_name(self) -> NormalizedName: - return REQUIRES_PYTHON_IDENTIFIER - - @property - def name(self) -> str: - return REQUIRES_PYTHON_IDENTIFIER - - @property - def version(self) -> Version: - return self._version - - def format_for_error(self) -> str: - return f"Python {self.version}" - - def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: - return () - - def get_install_requirement(self) -> Optional[InstallRequirement]: - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py deleted file mode 100644 index 6c273eb..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py +++ /dev/null @@ -1,823 +0,0 @@ -import contextlib -import functools -import logging -from typing import ( - TYPE_CHECKING, - Callable, - Dict, - FrozenSet, - Iterable, - Iterator, - List, - Mapping, - NamedTuple, - Optional, - Protocol, - Sequence, - Set, - Tuple, - TypeVar, - cast, -) - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import InvalidVersion, Version -from pip._vendor.resolvelib import ResolutionImpossible - -from pip._internal.cache import CacheEntry, WheelCache -from pip._internal.exceptions import ( - DistributionNotFound, - InstallationError, - InvalidInstalledPackage, - MetadataInconsistent, - MetadataInvalid, - UnsupportedPythonVersion, - UnsupportedWheel, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution, get_default_environment -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import ( - install_req_drop_extras, - install_req_from_link_and_ireq, -) -from pip._internal.req.req_install import ( - InstallRequirement, - check_invalid_constraint_type, -) -from pip._internal.resolution.base import InstallRequirementProvider -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import Candidate, Constraint, Requirement -from .candidates import ( - AlreadyInstalledCandidate, - BaseCandidate, - EditableCandidate, - ExtrasCandidate, - LinkCandidate, - RequiresPythonCandidate, - as_base_candidate, -) -from .found_candidates import FoundCandidates, IndexCandidateInfo -from .requirements import ( - ExplicitRequirement, - RequiresPythonRequirement, - SpecifierRequirement, - SpecifierWithoutExtrasRequirement, - UnsatisfiableRequirement, -) - -if TYPE_CHECKING: - - class ConflictCause(Protocol): - requirement: RequiresPythonRequirement - parent: Candidate - - -logger = logging.getLogger(__name__) - -C = TypeVar("C") -Cache = Dict[Link, C] - - -class CollectedRootRequirements(NamedTuple): - requirements: List[Requirement] - constraints: Dict[str, Constraint] - user_requested: Dict[str, int] - - -class Factory: - def __init__( - self, - finder: PackageFinder, - preparer: RequirementPreparer, - make_install_req: InstallRequirementProvider, - wheel_cache: Optional[WheelCache], - use_user_site: bool, - force_reinstall: bool, - ignore_installed: bool, - ignore_requires_python: bool, - py_version_info: Optional[Tuple[int, ...]] = None, - ) -> None: - self._finder = finder - self.preparer = preparer - self._wheel_cache = wheel_cache - self._python_candidate = RequiresPythonCandidate(py_version_info) - self._make_install_req_from_spec = make_install_req - self._use_user_site = use_user_site - self._force_reinstall = force_reinstall - self._ignore_requires_python = ignore_requires_python - - self._build_failures: Cache[InstallationError] = {} - self._link_candidate_cache: Cache[LinkCandidate] = {} - self._editable_candidate_cache: Cache[EditableCandidate] = {} - self._installed_candidate_cache: Dict[str, AlreadyInstalledCandidate] = {} - self._extras_candidate_cache: Dict[ - Tuple[int, FrozenSet[NormalizedName]], ExtrasCandidate - ] = {} - self._supported_tags_cache = get_supported() - - if not ignore_installed: - env = get_default_environment() - self._installed_dists = { - dist.canonical_name: dist - for dist in env.iter_installed_distributions(local_only=False) - } - else: - self._installed_dists = {} - - @property - def force_reinstall(self) -> bool: - return self._force_reinstall - - def _fail_if_link_is_unsupported_wheel(self, link: Link) -> None: - if not link.is_wheel: - return - wheel = Wheel(link.filename) - if wheel.supported(self._finder.target_python.get_unsorted_tags()): - return - msg = f"{link.filename} is not a supported wheel on this platform." - raise UnsupportedWheel(msg) - - def _make_extras_candidate( - self, - base: BaseCandidate, - extras: FrozenSet[str], - *, - comes_from: Optional[InstallRequirement] = None, - ) -> ExtrasCandidate: - cache_key = (id(base), frozenset(canonicalize_name(e) for e in extras)) - try: - candidate = self._extras_candidate_cache[cache_key] - except KeyError: - candidate = ExtrasCandidate(base, extras, comes_from=comes_from) - self._extras_candidate_cache[cache_key] = candidate - return candidate - - def _make_candidate_from_dist( - self, - dist: BaseDistribution, - extras: FrozenSet[str], - template: InstallRequirement, - ) -> Candidate: - try: - base = self._installed_candidate_cache[dist.canonical_name] - except KeyError: - base = AlreadyInstalledCandidate(dist, template, factory=self) - self._installed_candidate_cache[dist.canonical_name] = base - if not extras: - return base - return self._make_extras_candidate(base, extras, comes_from=template) - - def _make_candidate_from_link( - self, - link: Link, - extras: FrozenSet[str], - template: InstallRequirement, - name: Optional[NormalizedName], - version: Optional[Version], - ) -> Optional[Candidate]: - base: Optional[BaseCandidate] = self._make_base_candidate_from_link( - link, template, name, version - ) - if not extras or base is None: - return base - return self._make_extras_candidate(base, extras, comes_from=template) - - def _make_base_candidate_from_link( - self, - link: Link, - template: InstallRequirement, - name: Optional[NormalizedName], - version: Optional[Version], - ) -> Optional[BaseCandidate]: - # TODO: Check already installed candidate, and use it if the link and - # editable flag match. - - if link in self._build_failures: - # We already tried this candidate before, and it does not build. - # Don't bother trying again. - return None - - if template.editable: - if link not in self._editable_candidate_cache: - try: - self._editable_candidate_cache[link] = EditableCandidate( - link, - template, - factory=self, - name=name, - version=version, - ) - except (MetadataInconsistent, MetadataInvalid) as e: - logger.info( - "Discarding [blue underline]%s[/]: [yellow]%s[reset]", - link, - e, - extra={"markup": True}, - ) - self._build_failures[link] = e - return None - - return self._editable_candidate_cache[link] - else: - if link not in self._link_candidate_cache: - try: - self._link_candidate_cache[link] = LinkCandidate( - link, - template, - factory=self, - name=name, - version=version, - ) - except MetadataInconsistent as e: - logger.info( - "Discarding [blue underline]%s[/]: [yellow]%s[reset]", - link, - e, - extra={"markup": True}, - ) - self._build_failures[link] = e - return None - return self._link_candidate_cache[link] - - def _iter_found_candidates( - self, - ireqs: Sequence[InstallRequirement], - specifier: SpecifierSet, - hashes: Hashes, - prefers_installed: bool, - incompatible_ids: Set[int], - ) -> Iterable[Candidate]: - if not ireqs: - return () - - # The InstallRequirement implementation requires us to give it a - # "template". Here we just choose the first requirement to represent - # all of them. - # Hopefully the Project model can correct this mismatch in the future. - template = ireqs[0] - assert template.req, "Candidates found on index must be PEP 508" - name = canonicalize_name(template.req.name) - - extras: FrozenSet[str] = frozenset() - for ireq in ireqs: - assert ireq.req, "Candidates found on index must be PEP 508" - specifier &= ireq.req.specifier - hashes &= ireq.hashes(trust_internet=False) - extras |= frozenset(ireq.extras) - - def _get_installed_candidate() -> Optional[Candidate]: - """Get the candidate for the currently-installed version.""" - # If --force-reinstall is set, we want the version from the index - # instead, so we "pretend" there is nothing installed. - if self._force_reinstall: - return None - try: - installed_dist = self._installed_dists[name] - except KeyError: - return None - - try: - # Don't use the installed distribution if its version - # does not fit the current dependency graph. - if not specifier.contains(installed_dist.version, prereleases=True): - return None - except InvalidVersion as e: - raise InvalidInstalledPackage(dist=installed_dist, invalid_exc=e) - - candidate = self._make_candidate_from_dist( - dist=installed_dist, - extras=extras, - template=template, - ) - # The candidate is a known incompatibility. Don't use it. - if id(candidate) in incompatible_ids: - return None - return candidate - - def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]: - result = self._finder.find_best_candidate( - project_name=name, - specifier=specifier, - hashes=hashes, - ) - icans = result.applicable_candidates - - # PEP 592: Yanked releases are ignored unless the specifier - # explicitly pins a version (via '==' or '===') that can be - # solely satisfied by a yanked release. - all_yanked = all(ican.link.is_yanked for ican in icans) - - def is_pinned(specifier: SpecifierSet) -> bool: - for sp in specifier: - if sp.operator == "===": - return True - if sp.operator != "==": - continue - if sp.version.endswith(".*"): - continue - return True - return False - - pinned = is_pinned(specifier) - - # PackageFinder returns earlier versions first, so we reverse. - for ican in reversed(icans): - if not (all_yanked and pinned) and ican.link.is_yanked: - continue - func = functools.partial( - self._make_candidate_from_link, - link=ican.link, - extras=extras, - template=template, - name=name, - version=ican.version, - ) - yield ican.version, func - - return FoundCandidates( - iter_index_candidate_infos, - _get_installed_candidate(), - prefers_installed, - incompatible_ids, - ) - - def _iter_explicit_candidates_from_base( - self, - base_requirements: Iterable[Requirement], - extras: FrozenSet[str], - ) -> Iterator[Candidate]: - """Produce explicit candidates from the base given an extra-ed package. - - :param base_requirements: Requirements known to the resolver. The - requirements are guaranteed to not have extras. - :param extras: The extras to inject into the explicit requirements' - candidates. - """ - for req in base_requirements: - lookup_cand, _ = req.get_candidate_lookup() - if lookup_cand is None: # Not explicit. - continue - # We've stripped extras from the identifier, and should always - # get a BaseCandidate here, unless there's a bug elsewhere. - base_cand = as_base_candidate(lookup_cand) - assert base_cand is not None, "no extras here" - yield self._make_extras_candidate(base_cand, extras) - - def _iter_candidates_from_constraints( - self, - identifier: str, - constraint: Constraint, - template: InstallRequirement, - ) -> Iterator[Candidate]: - """Produce explicit candidates from constraints. - - This creates "fake" InstallRequirement objects that are basically clones - of what "should" be the template, but with original_link set to link. - """ - for link in constraint.links: - self._fail_if_link_is_unsupported_wheel(link) - candidate = self._make_base_candidate_from_link( - link, - template=install_req_from_link_and_ireq(link, template), - name=canonicalize_name(identifier), - version=None, - ) - if candidate: - yield candidate - - def find_candidates( - self, - identifier: str, - requirements: Mapping[str, Iterable[Requirement]], - incompatibilities: Mapping[str, Iterator[Candidate]], - constraint: Constraint, - prefers_installed: bool, - is_satisfied_by: Callable[[Requirement, Candidate], bool], - ) -> Iterable[Candidate]: - # Collect basic lookup information from the requirements. - explicit_candidates: Set[Candidate] = set() - ireqs: List[InstallRequirement] = [] - for req in requirements[identifier]: - cand, ireq = req.get_candidate_lookup() - if cand is not None: - explicit_candidates.add(cand) - if ireq is not None: - ireqs.append(ireq) - - # If the current identifier contains extras, add requires and explicit - # candidates from entries from extra-less identifier. - with contextlib.suppress(InvalidRequirement): - parsed_requirement = get_requirement(identifier) - if parsed_requirement.name != identifier: - explicit_candidates.update( - self._iter_explicit_candidates_from_base( - requirements.get(parsed_requirement.name, ()), - frozenset(parsed_requirement.extras), - ), - ) - for req in requirements.get(parsed_requirement.name, []): - _, ireq = req.get_candidate_lookup() - if ireq is not None: - ireqs.append(ireq) - - # Add explicit candidates from constraints. We only do this if there are - # known ireqs, which represent requirements not already explicit. If - # there are no ireqs, we're constraining already-explicit requirements, - # which is handled later when we return the explicit candidates. - if ireqs: - try: - explicit_candidates.update( - self._iter_candidates_from_constraints( - identifier, - constraint, - template=ireqs[0], - ), - ) - except UnsupportedWheel: - # If we're constrained to install a wheel incompatible with the - # target architecture, no candidates will ever be valid. - return () - - # Since we cache all the candidates, incompatibility identification - # can be made quicker by comparing only the id() values. - incompat_ids = {id(c) for c in incompatibilities.get(identifier, ())} - - # If none of the requirements want an explicit candidate, we can ask - # the finder for candidates. - if not explicit_candidates: - return self._iter_found_candidates( - ireqs, - constraint.specifier, - constraint.hashes, - prefers_installed, - incompat_ids, - ) - - return ( - c - for c in explicit_candidates - if id(c) not in incompat_ids - and constraint.is_satisfied_by(c) - and all(is_satisfied_by(req, c) for req in requirements[identifier]) - ) - - def _make_requirements_from_install_req( - self, ireq: InstallRequirement, requested_extras: Iterable[str] - ) -> Iterator[Requirement]: - """ - Returns requirement objects associated with the given InstallRequirement. In - most cases this will be a single object but the following special cases exist: - - the InstallRequirement has markers that do not apply -> result is empty - - the InstallRequirement has both a constraint (or link) and extras - -> result is split in two requirement objects: one with the constraint - (or link) and one with the extra. This allows centralized constraint - handling for the base, resulting in fewer candidate rejections. - """ - if not ireq.match_markers(requested_extras): - logger.info( - "Ignoring %s: markers '%s' don't match your environment", - ireq.name, - ireq.markers, - ) - elif not ireq.link: - if ireq.extras and ireq.req is not None and ireq.req.specifier: - yield SpecifierWithoutExtrasRequirement(ireq) - yield SpecifierRequirement(ireq) - else: - self._fail_if_link_is_unsupported_wheel(ireq.link) - # Always make the link candidate for the base requirement to make it - # available to `find_candidates` for explicit candidate lookup for any - # set of extras. - # The extras are required separately via a second requirement. - cand = self._make_base_candidate_from_link( - ireq.link, - template=install_req_drop_extras(ireq) if ireq.extras else ireq, - name=canonicalize_name(ireq.name) if ireq.name else None, - version=None, - ) - if cand is None: - # There's no way we can satisfy a URL requirement if the underlying - # candidate fails to build. An unnamed URL must be user-supplied, so - # we fail eagerly. If the URL is named, an unsatisfiable requirement - # can make the resolver do the right thing, either backtrack (and - # maybe find some other requirement that's buildable) or raise a - # ResolutionImpossible eventually. - if not ireq.name: - raise self._build_failures[ireq.link] - yield UnsatisfiableRequirement(canonicalize_name(ireq.name)) - else: - # require the base from the link - yield self.make_requirement_from_candidate(cand) - if ireq.extras: - # require the extras on top of the base candidate - yield self.make_requirement_from_candidate( - self._make_extras_candidate(cand, frozenset(ireq.extras)) - ) - - def collect_root_requirements( - self, root_ireqs: List[InstallRequirement] - ) -> CollectedRootRequirements: - collected = CollectedRootRequirements([], {}, {}) - for i, ireq in enumerate(root_ireqs): - if ireq.constraint: - # Ensure we only accept valid constraints - problem = check_invalid_constraint_type(ireq) - if problem: - raise InstallationError(problem) - if not ireq.match_markers(): - continue - assert ireq.name, "Constraint must be named" - name = canonicalize_name(ireq.name) - if name in collected.constraints: - collected.constraints[name] &= ireq - else: - collected.constraints[name] = Constraint.from_ireq(ireq) - else: - reqs = list( - self._make_requirements_from_install_req( - ireq, - requested_extras=(), - ) - ) - if not reqs: - continue - template = reqs[0] - if ireq.user_supplied and template.name not in collected.user_requested: - collected.user_requested[template.name] = i - collected.requirements.extend(reqs) - # Put requirements with extras at the end of the root requires. This does not - # affect resolvelib's picking preference but it does affect its initial criteria - # population: by putting extras at the end we enable the candidate finder to - # present resolvelib with a smaller set of candidates to resolvelib, already - # taking into account any non-transient constraints on the associated base. This - # means resolvelib will have fewer candidates to visit and reject. - # Python's list sort is stable, meaning relative order is kept for objects with - # the same key. - collected.requirements.sort(key=lambda r: r.name != r.project_name) - return collected - - def make_requirement_from_candidate( - self, candidate: Candidate - ) -> ExplicitRequirement: - return ExplicitRequirement(candidate) - - def make_requirements_from_spec( - self, - specifier: str, - comes_from: Optional[InstallRequirement], - requested_extras: Iterable[str] = (), - ) -> Iterator[Requirement]: - """ - Returns requirement objects associated with the given specifier. In most cases - this will be a single object but the following special cases exist: - - the specifier has markers that do not apply -> result is empty - - the specifier has both a constraint and extras -> result is split - in two requirement objects: one with the constraint and one with the - extra. This allows centralized constraint handling for the base, - resulting in fewer candidate rejections. - """ - ireq = self._make_install_req_from_spec(specifier, comes_from) - return self._make_requirements_from_install_req(ireq, requested_extras) - - def make_requires_python_requirement( - self, - specifier: SpecifierSet, - ) -> Optional[Requirement]: - if self._ignore_requires_python: - return None - # Don't bother creating a dependency for an empty Requires-Python. - if not str(specifier): - return None - return RequiresPythonRequirement(specifier, self._python_candidate) - - def get_wheel_cache_entry( - self, link: Link, name: Optional[str] - ) -> Optional[CacheEntry]: - """Look up the link in the wheel cache. - - If ``preparer.require_hashes`` is True, don't use the wheel cache, - because cached wheels, always built locally, have different hashes - than the files downloaded from the index server and thus throw false - hash mismatches. Furthermore, cached wheels at present have - nondeterministic contents due to file modification times. - """ - if self._wheel_cache is None: - return None - return self._wheel_cache.get_cache_entry( - link=link, - package_name=name, - supported_tags=self._supported_tags_cache, - ) - - def get_dist_to_uninstall(self, candidate: Candidate) -> Optional[BaseDistribution]: - # TODO: Are there more cases this needs to return True? Editable? - dist = self._installed_dists.get(candidate.project_name) - if dist is None: # Not installed, no uninstallation required. - return None - - # We're installing into global site. The current installation must - # be uninstalled, no matter it's in global or user site, because the - # user site installation has precedence over global. - if not self._use_user_site: - return dist - - # We're installing into user site. Remove the user site installation. - if dist.in_usersite: - return dist - - # We're installing into user site, but the installed incompatible - # package is in global site. We can't uninstall that, and would let - # the new user installation to "shadow" it. But shadowing won't work - # in virtual environments, so we error out. - if running_under_virtualenv() and dist.in_site_packages: - message = ( - f"Will not install to the user site because it will lack " - f"sys.path precedence to {dist.raw_name} in {dist.location}" - ) - raise InstallationError(message) - return None - - def _report_requires_python_error( - self, causes: Sequence["ConflictCause"] - ) -> UnsupportedPythonVersion: - assert causes, "Requires-Python error reported with no cause" - - version = self._python_candidate.version - - if len(causes) == 1: - specifier = str(causes[0].requirement.specifier) - message = ( - f"Package {causes[0].parent.name!r} requires a different " - f"Python: {version} not in {specifier!r}" - ) - return UnsupportedPythonVersion(message) - - message = f"Packages require a different Python. {version} not in:" - for cause in causes: - package = cause.parent.format_for_error() - specifier = str(cause.requirement.specifier) - message += f"\n{specifier!r} (required by {package})" - return UnsupportedPythonVersion(message) - - def _report_single_requirement_conflict( - self, req: Requirement, parent: Optional[Candidate] - ) -> DistributionNotFound: - if parent is None: - req_disp = str(req) - else: - req_disp = f"{req} (from {parent.name})" - - cands = self._finder.find_all_candidates(req.project_name) - skipped_by_requires_python = self._finder.requires_python_skipped_reasons() - - versions_set: Set[Version] = set() - yanked_versions_set: Set[Version] = set() - for c in cands: - is_yanked = c.link.is_yanked if c.link else False - if is_yanked: - yanked_versions_set.add(c.version) - else: - versions_set.add(c.version) - - versions = [str(v) for v in sorted(versions_set)] - yanked_versions = [str(v) for v in sorted(yanked_versions_set)] - - if yanked_versions: - # Saying "version X is yanked" isn't entirely accurate. - # https://github.com/pypa/pip/issues/11745#issuecomment-1402805842 - logger.critical( - "Ignored the following yanked versions: %s", - ", ".join(yanked_versions) or "none", - ) - if skipped_by_requires_python: - logger.critical( - "Ignored the following versions that require a different python " - "version: %s", - "; ".join(skipped_by_requires_python) or "none", - ) - logger.critical( - "Could not find a version that satisfies the requirement %s " - "(from versions: %s)", - req_disp, - ", ".join(versions) or "none", - ) - if str(req) == "requirements.txt": - logger.info( - "HINT: You are attempting to install a package literally " - 'named "requirements.txt" (which cannot exist). Consider ' - "using the '-r' flag to install the packages listed in " - "requirements.txt" - ) - - return DistributionNotFound(f"No matching distribution found for {req}") - - def get_installation_error( - self, - e: "ResolutionImpossible[Requirement, Candidate]", - constraints: Dict[str, Constraint], - ) -> InstallationError: - assert e.causes, "Installation error reported with no cause" - - # If one of the things we can't solve is "we need Python X.Y", - # that is what we report. - requires_python_causes = [ - cause - for cause in e.causes - if isinstance(cause.requirement, RequiresPythonRequirement) - and not cause.requirement.is_satisfied_by(self._python_candidate) - ] - if requires_python_causes: - # The comprehension above makes sure all Requirement instances are - # RequiresPythonRequirement, so let's cast for convenience. - return self._report_requires_python_error( - cast("Sequence[ConflictCause]", requires_python_causes), - ) - - # Otherwise, we have a set of causes which can't all be satisfied - # at once. - - # The simplest case is when we have *one* cause that can't be - # satisfied. We just report that case. - if len(e.causes) == 1: - req, parent = e.causes[0] - if req.name not in constraints: - return self._report_single_requirement_conflict(req, parent) - - # OK, we now have a list of requirements that can't all be - # satisfied at once. - - # A couple of formatting helpers - def text_join(parts: List[str]) -> str: - if len(parts) == 1: - return parts[0] - - return ", ".join(parts[:-1]) + " and " + parts[-1] - - def describe_trigger(parent: Candidate) -> str: - ireq = parent.get_install_requirement() - if not ireq or not ireq.comes_from: - return f"{parent.name}=={parent.version}" - if isinstance(ireq.comes_from, InstallRequirement): - return str(ireq.comes_from.name) - return str(ireq.comes_from) - - triggers = set() - for req, parent in e.causes: - if parent is None: - # This is a root requirement, so we can report it directly - trigger = req.format_for_error() - else: - trigger = describe_trigger(parent) - triggers.add(trigger) - - if triggers: - info = text_join(sorted(triggers)) - else: - info = "the requested packages" - - msg = ( - f"Cannot install {info} because these package versions " - "have conflicting dependencies." - ) - logger.critical(msg) - msg = "\nThe conflict is caused by:" - - relevant_constraints = set() - for req, parent in e.causes: - if req.name in constraints: - relevant_constraints.add(req.name) - msg = msg + "\n " - if parent: - msg = msg + f"{parent.name} {parent.version} depends on " - else: - msg = msg + "The user requested " - msg = msg + req.format_for_error() - for key in relevant_constraints: - spec = constraints[key].specifier - msg += f"\n The user requested (constraint) {key}{spec}" - - msg = ( - msg - + "\n\n" - + "To fix this you could try to:\n" - + "1. loosen the range of package versions you've specified\n" - + "2. remove package versions to allow pip to attempt to solve " - + "the dependency conflict\n" - ) - - logger.info(msg) - - return DistributionNotFound( - "ResolutionImpossible: for help visit " - "https://pip.pypa.io/en/latest/topics/dependency-resolution/" - "#dealing-with-dependency-conflicts" - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py deleted file mode 100644 index a1d57e0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +++ /dev/null @@ -1,174 +0,0 @@ -"""Utilities to lazily create and visit candidates found. - -Creating and visiting a candidate is a *very* costly operation. It involves -fetching, extracting, potentially building modules from source, and verifying -distribution metadata. It is therefore crucial for performance to keep -everything here lazy all the way down, so we only touch candidates that we -absolutely need, and not "download the world" when we only need one version of -something. -""" - -import functools -import logging -from collections.abc import Sequence -from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Set, Tuple - -from pip._vendor.packaging.version import _BaseVersion - -from pip._internal.exceptions import MetadataInvalid - -from .base import Candidate - -logger = logging.getLogger(__name__) - -IndexCandidateInfo = Tuple[_BaseVersion, Callable[[], Optional[Candidate]]] - -if TYPE_CHECKING: - SequenceCandidate = Sequence[Candidate] -else: - # For compatibility: Python before 3.9 does not support using [] on the - # Sequence class. - # - # >>> from collections.abc import Sequence - # >>> Sequence[str] - # Traceback (most recent call last): - # File "", line 1, in - # TypeError: 'ABCMeta' object is not subscriptable - # - # TODO: Remove this block after dropping Python 3.8 support. - SequenceCandidate = Sequence - - -def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the package is not already installed. Candidates - from index come later in their normal ordering. - """ - versions_found: Set[_BaseVersion] = set() - for version, func in infos: - if version in versions_found: - continue - try: - candidate = func() - except MetadataInvalid as e: - logger.warning( - "Ignoring version %s of %s since it has invalid metadata:\n" - "%s\n" - "Please use pip<24.1 if you need to use this version.", - version, - e.ireq.name, - e, - ) - # Mark version as found to avoid trying other candidates with the same - # version, since they most likely have invalid metadata as well. - versions_found.add(version) - else: - if candidate is None: - continue - yield candidate - versions_found.add(version) - - -def _iter_built_with_prepended( - installed: Candidate, infos: Iterator[IndexCandidateInfo] -) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the resolver prefers the already-installed - candidate and NOT to upgrade. The installed candidate is therefore - always yielded first, and candidates from index come later in their - normal ordering, except skipped when the version is already installed. - """ - yield installed - versions_found: Set[_BaseVersion] = {installed.version} - for version, func in infos: - if version in versions_found: - continue - candidate = func() - if candidate is None: - continue - yield candidate - versions_found.add(version) - - -def _iter_built_with_inserted( - installed: Candidate, infos: Iterator[IndexCandidateInfo] -) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the resolver prefers to upgrade an - already-installed package. Candidates from index are returned in their - normal ordering, except replaced when the version is already installed. - - The implementation iterates through and yields other candidates, inserting - the installed candidate exactly once before we start yielding older or - equivalent candidates, or after all other candidates if they are all newer. - """ - versions_found: Set[_BaseVersion] = set() - for version, func in infos: - if version in versions_found: - continue - # If the installed candidate is better, yield it first. - if installed.version >= version: - yield installed - versions_found.add(installed.version) - candidate = func() - if candidate is None: - continue - yield candidate - versions_found.add(version) - - # If the installed candidate is older than all other candidates. - if installed.version not in versions_found: - yield installed - - -class FoundCandidates(SequenceCandidate): - """A lazy sequence to provide candidates to the resolver. - - The intended usage is to return this from `find_matches()` so the resolver - can iterate through the sequence multiple times, but only access the index - page when remote packages are actually needed. This improve performances - when suitable candidates are already installed on disk. - """ - - def __init__( - self, - get_infos: Callable[[], Iterator[IndexCandidateInfo]], - installed: Optional[Candidate], - prefers_installed: bool, - incompatible_ids: Set[int], - ): - self._get_infos = get_infos - self._installed = installed - self._prefers_installed = prefers_installed - self._incompatible_ids = incompatible_ids - - def __getitem__(self, index: Any) -> Any: - # Implemented to satisfy the ABC check. This is not needed by the - # resolver, and should not be used by the provider either (for - # performance reasons). - raise NotImplementedError("don't do this") - - def __iter__(self) -> Iterator[Candidate]: - infos = self._get_infos() - if not self._installed: - iterator = _iter_built(infos) - elif self._prefers_installed: - iterator = _iter_built_with_prepended(self._installed, infos) - else: - iterator = _iter_built_with_inserted(self._installed, infos) - return (c for c in iterator if id(c) not in self._incompatible_ids) - - def __len__(self) -> int: - # Implemented to satisfy the ABC check. This is not needed by the - # resolver, and should not be used by the provider either (for - # performance reasons). - raise NotImplementedError("don't do this") - - @functools.lru_cache(maxsize=1) - def __bool__(self) -> bool: - if self._prefers_installed and self._installed: - return True - return any(self) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py deleted file mode 100644 index fb0dd85..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py +++ /dev/null @@ -1,258 +0,0 @@ -import collections -import math -from functools import lru_cache -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - Iterator, - Mapping, - Sequence, - TypeVar, - Union, -) - -from pip._vendor.resolvelib.providers import AbstractProvider - -from .base import Candidate, Constraint, Requirement -from .candidates import REQUIRES_PYTHON_IDENTIFIER -from .factory import Factory - -if TYPE_CHECKING: - from pip._vendor.resolvelib.providers import Preference - from pip._vendor.resolvelib.resolvers import RequirementInformation - - PreferenceInformation = RequirementInformation[Requirement, Candidate] - - _ProviderBase = AbstractProvider[Requirement, Candidate, str] -else: - _ProviderBase = AbstractProvider - -# Notes on the relationship between the provider, the factory, and the -# candidate and requirement classes. -# -# The provider is a direct implementation of the resolvelib class. Its role -# is to deliver the API that resolvelib expects. -# -# Rather than work with completely abstract "requirement" and "candidate" -# concepts as resolvelib does, pip has concrete classes implementing these two -# ideas. The API of Requirement and Candidate objects are defined in the base -# classes, but essentially map fairly directly to the equivalent provider -# methods. In particular, `find_matches` and `is_satisfied_by` are -# requirement methods, and `get_dependencies` is a candidate method. -# -# The factory is the interface to pip's internal mechanisms. It is stateless, -# and is created by the resolver and held as a property of the provider. It is -# responsible for creating Requirement and Candidate objects, and provides -# services to those objects (access to pip's finder and preparer). - - -D = TypeVar("D") -V = TypeVar("V") - - -def _get_with_identifier( - mapping: Mapping[str, V], - identifier: str, - default: D, -) -> Union[D, V]: - """Get item from a package name lookup mapping with a resolver identifier. - - This extra logic is needed when the target mapping is keyed by package - name, which cannot be directly looked up with an identifier (which may - contain requested extras). Additional logic is added to also look up a value - by "cleaning up" the extras from the identifier. - """ - if identifier in mapping: - return mapping[identifier] - # HACK: Theoretically we should check whether this identifier is a valid - # "NAME[EXTRAS]" format, and parse out the name part with packaging or - # some regular expression. But since pip's resolver only spits out three - # kinds of identifiers: normalized PEP 503 names, normalized names plus - # extras, and Requires-Python, we can cheat a bit here. - name, open_bracket, _ = identifier.partition("[") - if open_bracket and name in mapping: - return mapping[name] - return default - - -class PipProvider(_ProviderBase): - """Pip's provider implementation for resolvelib. - - :params constraints: A mapping of constraints specified by the user. Keys - are canonicalized project names. - :params ignore_dependencies: Whether the user specified ``--no-deps``. - :params upgrade_strategy: The user-specified upgrade strategy. - :params user_requested: A set of canonicalized package names that the user - supplied for pip to install/upgrade. - """ - - def __init__( - self, - factory: Factory, - constraints: Dict[str, Constraint], - ignore_dependencies: bool, - upgrade_strategy: str, - user_requested: Dict[str, int], - ) -> None: - self._factory = factory - self._constraints = constraints - self._ignore_dependencies = ignore_dependencies - self._upgrade_strategy = upgrade_strategy - self._user_requested = user_requested - self._known_depths: Dict[str, float] = collections.defaultdict(lambda: math.inf) - - def identify(self, requirement_or_candidate: Union[Requirement, Candidate]) -> str: - return requirement_or_candidate.name - - def get_preference( - self, - identifier: str, - resolutions: Mapping[str, Candidate], - candidates: Mapping[str, Iterator[Candidate]], - information: Mapping[str, Iterable["PreferenceInformation"]], - backtrack_causes: Sequence["PreferenceInformation"], - ) -> "Preference": - """Produce a sort key for given requirement based on preference. - - The lower the return value is, the more preferred this group of - arguments is. - - Currently pip considers the following in order: - - * Prefer if any of the known requirements is "direct", e.g. points to an - explicit URL. - * If equal, prefer if any requirement is "pinned", i.e. contains - operator ``===`` or ``==``. - * If equal, calculate an approximate "depth" and resolve requirements - closer to the user-specified requirements first. If the depth cannot - by determined (eg: due to no matching parents), it is considered - infinite. - * Order user-specified requirements by the order they are specified. - * If equal, prefers "non-free" requirements, i.e. contains at least one - operator, such as ``>=`` or ``<``. - * If equal, order alphabetically for consistency (helps debuggability). - """ - try: - next(iter(information[identifier])) - except StopIteration: - # There is no information for this identifier, so there's no known - # candidates. - has_information = False - else: - has_information = True - - if has_information: - lookups = (r.get_candidate_lookup() for r, _ in information[identifier]) - candidate, ireqs = zip(*lookups) - else: - candidate, ireqs = None, () - - operators = [ - specifier.operator - for specifier_set in (ireq.specifier for ireq in ireqs if ireq) - for specifier in specifier_set - ] - - direct = candidate is not None - pinned = any(op[:2] == "==" for op in operators) - unfree = bool(operators) - - try: - requested_order: Union[int, float] = self._user_requested[identifier] - except KeyError: - requested_order = math.inf - if has_information: - parent_depths = ( - self._known_depths[parent.name] if parent is not None else 0.0 - for _, parent in information[identifier] - ) - inferred_depth = min(d for d in parent_depths) + 1.0 - else: - inferred_depth = math.inf - else: - inferred_depth = 1.0 - self._known_depths[identifier] = inferred_depth - - requested_order = self._user_requested.get(identifier, math.inf) - - # Requires-Python has only one candidate and the check is basically - # free, so we always do it first to avoid needless work if it fails. - requires_python = identifier == REQUIRES_PYTHON_IDENTIFIER - - # Prefer the causes of backtracking on the assumption that the problem - # resolving the dependency tree is related to the failures that caused - # the backtracking - backtrack_cause = self.is_backtrack_cause(identifier, backtrack_causes) - - return ( - not requires_python, - not direct, - not pinned, - not backtrack_cause, - inferred_depth, - requested_order, - not unfree, - identifier, - ) - - def find_matches( - self, - identifier: str, - requirements: Mapping[str, Iterator[Requirement]], - incompatibilities: Mapping[str, Iterator[Candidate]], - ) -> Iterable[Candidate]: - def _eligible_for_upgrade(identifier: str) -> bool: - """Are upgrades allowed for this project? - - This checks the upgrade strategy, and whether the project was one - that the user specified in the command line, in order to decide - whether we should upgrade if there's a newer version available. - - (Note that we don't need access to the `--upgrade` flag, because - an upgrade strategy of "to-satisfy-only" means that `--upgrade` - was not specified). - """ - if self._upgrade_strategy == "eager": - return True - elif self._upgrade_strategy == "only-if-needed": - user_order = _get_with_identifier( - self._user_requested, - identifier, - default=None, - ) - return user_order is not None - return False - - constraint = _get_with_identifier( - self._constraints, - identifier, - default=Constraint.empty(), - ) - return self._factory.find_candidates( - identifier=identifier, - requirements=requirements, - constraint=constraint, - prefers_installed=(not _eligible_for_upgrade(identifier)), - incompatibilities=incompatibilities, - is_satisfied_by=self.is_satisfied_by, - ) - - @lru_cache(maxsize=None) - def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool: - return requirement.is_satisfied_by(candidate) - - def get_dependencies(self, candidate: Candidate) -> Sequence[Requirement]: - with_requires = not self._ignore_dependencies - return [r for r in candidate.iter_dependencies(with_requires) if r is not None] - - @staticmethod - def is_backtrack_cause( - identifier: str, backtrack_causes: Sequence["PreferenceInformation"] - ) -> bool: - for backtrack_cause in backtrack_causes: - if identifier == backtrack_cause.requirement.name: - return True - if backtrack_cause.parent and identifier == backtrack_cause.parent.name: - return True - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py deleted file mode 100644 index 0594569..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py +++ /dev/null @@ -1,81 +0,0 @@ -from collections import defaultdict -from logging import getLogger -from typing import Any, DefaultDict - -from pip._vendor.resolvelib.reporters import BaseReporter - -from .base import Candidate, Requirement - -logger = getLogger(__name__) - - -class PipReporter(BaseReporter): - def __init__(self) -> None: - self.reject_count_by_package: DefaultDict[str, int] = defaultdict(int) - - self._messages_at_reject_count = { - 1: ( - "pip is looking at multiple versions of {package_name} to " - "determine which version is compatible with other " - "requirements. This could take a while." - ), - 8: ( - "pip is still looking at multiple versions of {package_name} to " - "determine which version is compatible with other " - "requirements. This could take a while." - ), - 13: ( - "This is taking longer than usual. You might need to provide " - "the dependency resolver with stricter constraints to reduce " - "runtime. See https://pip.pypa.io/warnings/backtracking for " - "guidance. If you want to abort this run, press Ctrl + C." - ), - } - - def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: - self.reject_count_by_package[candidate.name] += 1 - - count = self.reject_count_by_package[candidate.name] - if count not in self._messages_at_reject_count: - return - - message = self._messages_at_reject_count[count] - logger.info("INFO: %s", message.format(package_name=candidate.name)) - - msg = "Will try a different candidate, due to conflict:" - for req_info in criterion.information: - req, parent = req_info.requirement, req_info.parent - # Inspired by Factory.get_installation_error - msg += "\n " - if parent: - msg += f"{parent.name} {parent.version} depends on " - else: - msg += "The user requested " - msg += req.format_for_error() - logger.debug(msg) - - -class PipDebuggingReporter(BaseReporter): - """A reporter that does an info log for every event it sees.""" - - def starting(self) -> None: - logger.info("Reporter.starting()") - - def starting_round(self, index: int) -> None: - logger.info("Reporter.starting_round(%r)", index) - - def ending_round(self, index: int, state: Any) -> None: - logger.info("Reporter.ending_round(%r, state)", index) - logger.debug("Reporter.ending_round(%r, %r)", index, state) - - def ending(self, state: Any) -> None: - logger.info("Reporter.ending(%r)", state) - - def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None: - logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent) - - def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: - logger.info("Reporter.rejecting_candidate(%r, %r)", criterion, candidate) - - def pinning(self, candidate: Candidate) -> None: - logger.info("Reporter.pinning(%r)", candidate) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py deleted file mode 100644 index b04f41b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py +++ /dev/null @@ -1,245 +0,0 @@ -from typing import Any, Optional - -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - -from pip._internal.req.constructors import install_req_drop_extras -from pip._internal.req.req_install import InstallRequirement - -from .base import Candidate, CandidateLookup, Requirement, format_name - - -class ExplicitRequirement(Requirement): - def __init__(self, candidate: Candidate) -> None: - self.candidate = candidate - - def __str__(self) -> str: - return str(self.candidate) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.candidate!r})" - - def __hash__(self) -> int: - return hash(self.candidate) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, ExplicitRequirement): - return False - return self.candidate == other.candidate - - @property - def project_name(self) -> NormalizedName: - # No need to canonicalize - the candidate did this - return self.candidate.project_name - - @property - def name(self) -> str: - # No need to canonicalize - the candidate did this - return self.candidate.name - - def format_for_error(self) -> str: - return self.candidate.format_for_error() - - def get_candidate_lookup(self) -> CandidateLookup: - return self.candidate, None - - def is_satisfied_by(self, candidate: Candidate) -> bool: - return candidate == self.candidate - - -class SpecifierRequirement(Requirement): - def __init__(self, ireq: InstallRequirement) -> None: - assert ireq.link is None, "This is a link, not a specifier" - self._ireq = ireq - self._equal_cache: Optional[str] = None - self._hash: Optional[int] = None - self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) - - @property - def _equal(self) -> str: - if self._equal_cache is not None: - return self._equal_cache - - self._equal_cache = str(self._ireq) - return self._equal_cache - - def __str__(self) -> str: - return str(self._ireq.req) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._ireq.req)!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SpecifierRequirement): - return NotImplemented - return self._equal == other._equal - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash(self._equal) - return self._hash - - @property - def project_name(self) -> NormalizedName: - assert self._ireq.req, "Specifier-backed ireq is always PEP 508" - return canonicalize_name(self._ireq.req.name) - - @property - def name(self) -> str: - return format_name(self.project_name, self._extras) - - def format_for_error(self) -> str: - # Convert comma-separated specifiers into "A, B, ..., F and G" - # This makes the specifier a bit more "human readable", without - # risking a change in meaning. (Hopefully! Not all edge cases have - # been checked) - parts = [s.strip() for s in str(self).split(",")] - if len(parts) == 0: - return "" - elif len(parts) == 1: - return parts[0] - - return ", ".join(parts[:-1]) + " and " + parts[-1] - - def get_candidate_lookup(self) -> CandidateLookup: - return None, self._ireq - - def is_satisfied_by(self, candidate: Candidate) -> bool: - assert candidate.name == self.name, ( - f"Internal issue: Candidate is not for this requirement " - f"{candidate.name} vs {self.name}" - ) - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - assert self._ireq.req, "Specifier-backed ireq is always PEP 508" - spec = self._ireq.req.specifier - return spec.contains(candidate.version, prereleases=True) - - -class SpecifierWithoutExtrasRequirement(SpecifierRequirement): - """ - Requirement backed by an install requirement on a base package. - Trims extras from its install requirement if there are any. - """ - - def __init__(self, ireq: InstallRequirement) -> None: - assert ireq.link is None, "This is a link, not a specifier" - self._ireq = install_req_drop_extras(ireq) - self._equal_cache: Optional[str] = None - self._hash: Optional[int] = None - self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) - - @property - def _equal(self) -> str: - if self._equal_cache is not None: - return self._equal_cache - - self._equal_cache = str(self._ireq) - return self._equal_cache - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SpecifierWithoutExtrasRequirement): - return NotImplemented - return self._equal == other._equal - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash(self._equal) - return self._hash - - -class RequiresPythonRequirement(Requirement): - """A requirement representing Requires-Python metadata.""" - - def __init__(self, specifier: SpecifierSet, match: Candidate) -> None: - self.specifier = specifier - self._specifier_string = str(specifier) # for faster __eq__ - self._hash: Optional[int] = None - self._candidate = match - - def __str__(self) -> str: - return f"Python {self.specifier}" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self.specifier)!r})" - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash((self._specifier_string, self._candidate)) - return self._hash - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, RequiresPythonRequirement): - return False - return ( - self._specifier_string == other._specifier_string - and self._candidate == other._candidate - ) - - @property - def project_name(self) -> NormalizedName: - return self._candidate.project_name - - @property - def name(self) -> str: - return self._candidate.name - - def format_for_error(self) -> str: - return str(self) - - def get_candidate_lookup(self) -> CandidateLookup: - if self.specifier.contains(self._candidate.version, prereleases=True): - return self._candidate, None - return None, None - - def is_satisfied_by(self, candidate: Candidate) -> bool: - assert candidate.name == self._candidate.name, "Not Python candidate" - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - return self.specifier.contains(candidate.version, prereleases=True) - - -class UnsatisfiableRequirement(Requirement): - """A requirement that cannot be satisfied.""" - - def __init__(self, name: NormalizedName) -> None: - self._name = name - - def __str__(self) -> str: - return f"{self._name} (unavailable)" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._name)!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, UnsatisfiableRequirement): - return NotImplemented - return self._name == other._name - - def __hash__(self) -> int: - return hash(self._name) - - @property - def project_name(self) -> NormalizedName: - return self._name - - @property - def name(self) -> str: - return self._name - - def format_for_error(self) -> str: - return str(self) - - def get_candidate_lookup(self) -> CandidateLookup: - return None, None - - def is_satisfied_by(self, candidate: Candidate) -> bool: - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py deleted file mode 100644 index c12beef..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py +++ /dev/null @@ -1,317 +0,0 @@ -import contextlib -import functools -import logging -import os -from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, cast - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.resolvelib import BaseReporter, ResolutionImpossible -from pip._vendor.resolvelib import Resolver as RLResolver -from pip._vendor.resolvelib.structs import DirectedGraph - -from pip._internal.cache import WheelCache -from pip._internal.index.package_finder import PackageFinder -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import install_req_extend_extras -from pip._internal.req.req_install import InstallRequirement -from pip._internal.req.req_set import RequirementSet -from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider -from pip._internal.resolution.resolvelib.provider import PipProvider -from pip._internal.resolution.resolvelib.reporter import ( - PipDebuggingReporter, - PipReporter, -) -from pip._internal.utils.packaging import get_requirement - -from .base import Candidate, Requirement -from .factory import Factory - -if TYPE_CHECKING: - from pip._vendor.resolvelib.resolvers import Result as RLResult - - Result = RLResult[Requirement, Candidate, str] - - -logger = logging.getLogger(__name__) - - -class Resolver(BaseResolver): - _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} - - def __init__( - self, - preparer: RequirementPreparer, - finder: PackageFinder, - wheel_cache: Optional[WheelCache], - make_install_req: InstallRequirementProvider, - use_user_site: bool, - ignore_dependencies: bool, - ignore_installed: bool, - ignore_requires_python: bool, - force_reinstall: bool, - upgrade_strategy: str, - py_version_info: Optional[Tuple[int, ...]] = None, - ): - super().__init__() - assert upgrade_strategy in self._allowed_strategies - - self.factory = Factory( - finder=finder, - preparer=preparer, - make_install_req=make_install_req, - wheel_cache=wheel_cache, - use_user_site=use_user_site, - force_reinstall=force_reinstall, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - py_version_info=py_version_info, - ) - self.ignore_dependencies = ignore_dependencies - self.upgrade_strategy = upgrade_strategy - self._result: Optional[Result] = None - - def resolve( - self, root_reqs: List[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - collected = self.factory.collect_root_requirements(root_reqs) - provider = PipProvider( - factory=self.factory, - constraints=collected.constraints, - ignore_dependencies=self.ignore_dependencies, - upgrade_strategy=self.upgrade_strategy, - user_requested=collected.user_requested, - ) - if "PIP_RESOLVER_DEBUG" in os.environ: - reporter: BaseReporter = PipDebuggingReporter() - else: - reporter = PipReporter() - resolver: RLResolver[Requirement, Candidate, str] = RLResolver( - provider, - reporter, - ) - - try: - limit_how_complex_resolution_can_be = 200000 - result = self._result = resolver.resolve( - collected.requirements, max_rounds=limit_how_complex_resolution_can_be - ) - - except ResolutionImpossible as e: - error = self.factory.get_installation_error( - cast("ResolutionImpossible[Requirement, Candidate]", e), - collected.constraints, - ) - raise error from e - - req_set = RequirementSet(check_supported_wheels=check_supported_wheels) - # process candidates with extras last to ensure their base equivalent is - # already in the req_set if appropriate. - # Python's sort is stable so using a binary key function keeps relative order - # within both subsets. - for candidate in sorted( - result.mapping.values(), key=lambda c: c.name != c.project_name - ): - ireq = candidate.get_install_requirement() - if ireq is None: - if candidate.name != candidate.project_name: - # extend existing req's extras - with contextlib.suppress(KeyError): - req = req_set.get_requirement(candidate.project_name) - req_set.add_named_requirement( - install_req_extend_extras( - req, get_requirement(candidate.name).extras - ) - ) - continue - - # Check if there is already an installation under the same name, - # and set a flag for later stages to uninstall it, if needed. - installed_dist = self.factory.get_dist_to_uninstall(candidate) - if installed_dist is None: - # There is no existing installation -- nothing to uninstall. - ireq.should_reinstall = False - elif self.factory.force_reinstall: - # The --force-reinstall flag is set -- reinstall. - ireq.should_reinstall = True - elif installed_dist.version != candidate.version: - # The installation is different in version -- reinstall. - ireq.should_reinstall = True - elif candidate.is_editable or installed_dist.editable: - # The incoming distribution is editable, or different in - # editable-ness to installation -- reinstall. - ireq.should_reinstall = True - elif candidate.source_link and candidate.source_link.is_file: - # The incoming distribution is under file:// - if candidate.source_link.is_wheel: - # is a local wheel -- do nothing. - logger.info( - "%s is already installed with the same version as the " - "provided wheel. Use --force-reinstall to force an " - "installation of the wheel.", - ireq.name, - ) - continue - - # is a local sdist or path -- reinstall - ireq.should_reinstall = True - else: - continue - - link = candidate.source_link - if link and link.is_yanked: - # The reason can contain non-ASCII characters, Unicode - # is required for Python 2. - msg = ( - "The candidate selected for download or install is a " - "yanked version: {name!r} candidate (version {version} " - "at {link})\nReason for being yanked: {reason}" - ).format( - name=candidate.name, - version=candidate.version, - link=link, - reason=link.yanked_reason or "", - ) - logger.warning(msg) - - req_set.add_named_requirement(ireq) - - reqs = req_set.all_requirements - self.factory.preparer.prepare_linked_requirements_more(reqs) - for req in reqs: - req.prepared = True - req.needs_more_preparation = False - return req_set - - def get_installation_order( - self, req_set: RequirementSet - ) -> List[InstallRequirement]: - """Get order for installation of requirements in RequirementSet. - - The returned list contains a requirement before another that depends on - it. This helps ensure that the environment is kept consistent as they - get installed one-by-one. - - The current implementation creates a topological ordering of the - dependency graph, giving more weight to packages with less - or no dependencies, while breaking any cycles in the graph at - arbitrary points. We make no guarantees about where the cycle - would be broken, other than it *would* be broken. - """ - assert self._result is not None, "must call resolve() first" - - if not req_set.requirements: - # Nothing is left to install, so we do not need an order. - return [] - - graph = self._result.graph - weights = get_topological_weights(graph, set(req_set.requirements.keys())) - - sorted_items = sorted( - req_set.requirements.items(), - key=functools.partial(_req_set_item_sorter, weights=weights), - reverse=True, - ) - return [ireq for _, ireq in sorted_items] - - -def get_topological_weights( - graph: "DirectedGraph[Optional[str]]", requirement_keys: Set[str] -) -> Dict[Optional[str], int]: - """Assign weights to each node based on how "deep" they are. - - This implementation may change at any point in the future without prior - notice. - - We first simplify the dependency graph by pruning any leaves and giving them - the highest weight: a package without any dependencies should be installed - first. This is done again and again in the same way, giving ever less weight - to the newly found leaves. The loop stops when no leaves are left: all - remaining packages have at least one dependency left in the graph. - - Then we continue with the remaining graph, by taking the length for the - longest path to any node from root, ignoring any paths that contain a single - node twice (i.e. cycles). This is done through a depth-first search through - the graph, while keeping track of the path to the node. - - Cycles in the graph result would result in node being revisited while also - being on its own path. In this case, take no action. This helps ensure we - don't get stuck in a cycle. - - When assigning weight, the longer path (i.e. larger length) is preferred. - - We are only interested in the weights of packages that are in the - requirement_keys. - """ - path: Set[Optional[str]] = set() - weights: Dict[Optional[str], int] = {} - - def visit(node: Optional[str]) -> None: - if node in path: - # We hit a cycle, so we'll break it here. - return - - # Time to visit the children! - path.add(node) - for child in graph.iter_children(node): - visit(child) - path.remove(node) - - if node not in requirement_keys: - return - - last_known_parent_count = weights.get(node, 0) - weights[node] = max(last_known_parent_count, len(path)) - - # Simplify the graph, pruning leaves that have no dependencies. - # This is needed for large graphs (say over 200 packages) because the - # `visit` function is exponentially slower then, taking minutes. - # See https://github.com/pypa/pip/issues/10557 - # We will loop until we explicitly break the loop. - while True: - leaves = set() - for key in graph: - if key is None: - continue - for _child in graph.iter_children(key): - # This means we have at least one child - break - else: - # No child. - leaves.add(key) - if not leaves: - # We are done simplifying. - break - # Calculate the weight for the leaves. - weight = len(graph) - 1 - for leaf in leaves: - if leaf not in requirement_keys: - continue - weights[leaf] = weight - # Remove the leaves from the graph, making it simpler. - for leaf in leaves: - graph.remove(leaf) - - # Visit the remaining graph. - # `None` is guaranteed to be the root node by resolvelib. - visit(None) - - # Sanity check: all requirement keys should be in the weights, - # and no other keys should be in the weights. - difference = set(weights.keys()).difference(requirement_keys) - assert not difference, difference - - return weights - - -def _req_set_item_sorter( - item: Tuple[str, InstallRequirement], - weights: Dict[Optional[str], int], -) -> Tuple[int, str]: - """Key function used to sort install requirements for installation. - - Based on the "weight" mapping calculated in ``get_installation_order()``. - The canonical package name is returned as the second member as a tie- - breaker to ensure the result is predictable, which is useful in tests. - """ - name = canonicalize_name(item[0]) - return weights[name], name diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py b/myenv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py deleted file mode 100644 index 2e0e3df..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py +++ /dev/null @@ -1,252 +0,0 @@ -import datetime -import functools -import hashlib -import json -import logging -import optparse -import os.path -import sys -from dataclasses import dataclass -from typing import Any, Callable, Dict, Optional - -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.rich.console import Group -from pip._vendor.rich.markup import escape -from pip._vendor.rich.text import Text - -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import get_default_environment -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.network.session import PipSession -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.entrypoints import ( - get_best_invocation_for_this_pip, - get_best_invocation_for_this_python, -) -from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace -from pip._internal.utils.misc import ( - ExternallyManagedEnvironment, - check_externally_managed, - ensure_dir, -) - -_WEEK = datetime.timedelta(days=7) - -logger = logging.getLogger(__name__) - - -def _get_statefile_name(key: str) -> str: - key_bytes = key.encode() - name = hashlib.sha224(key_bytes).hexdigest() - return name - - -def _convert_date(isodate: str) -> datetime.datetime: - """Convert an ISO format string to a date. - - Handles the format 2020-01-22T14:24:01Z (trailing Z) - which is not supported by older versions of fromisoformat. - """ - return datetime.datetime.fromisoformat(isodate.replace("Z", "+00:00")) - - -class SelfCheckState: - def __init__(self, cache_dir: str) -> None: - self._state: Dict[str, Any] = {} - self._statefile_path = None - - # Try to load the existing state - if cache_dir: - self._statefile_path = os.path.join( - cache_dir, "selfcheck", _get_statefile_name(self.key) - ) - try: - with open(self._statefile_path, encoding="utf-8") as statefile: - self._state = json.load(statefile) - except (OSError, ValueError, KeyError): - # Explicitly suppressing exceptions, since we don't want to - # error out if the cache file is invalid. - pass - - @property - def key(self) -> str: - return sys.prefix - - def get(self, current_time: datetime.datetime) -> Optional[str]: - """Check if we have a not-outdated version loaded already.""" - if not self._state: - return None - - if "last_check" not in self._state: - return None - - if "pypi_version" not in self._state: - return None - - # Determine if we need to refresh the state - last_check = _convert_date(self._state["last_check"]) - time_since_last_check = current_time - last_check - if time_since_last_check > _WEEK: - return None - - return self._state["pypi_version"] - - def set(self, pypi_version: str, current_time: datetime.datetime) -> None: - # If we do not have a path to cache in, don't bother saving. - if not self._statefile_path: - return - - # Check to make sure that we own the directory - if not check_path_owner(os.path.dirname(self._statefile_path)): - return - - # Now that we've ensured the directory is owned by this user, we'll go - # ahead and make sure that all our directories are created. - ensure_dir(os.path.dirname(self._statefile_path)) - - state = { - # Include the key so it's easy to tell which pip wrote the - # file. - "key": self.key, - "last_check": current_time.isoformat(), - "pypi_version": pypi_version, - } - - text = json.dumps(state, sort_keys=True, separators=(",", ":")) - - with adjacent_tmp_file(self._statefile_path) as f: - f.write(text.encode()) - - try: - # Since we have a prefix-specific state file, we can just - # overwrite whatever is there, no need to check. - replace(f.name, self._statefile_path) - except OSError: - # Best effort. - pass - - -@dataclass -class UpgradePrompt: - old: str - new: str - - def __rich__(self) -> Group: - if WINDOWS: - pip_cmd = f"{get_best_invocation_for_this_python()} -m pip" - else: - pip_cmd = get_best_invocation_for_this_pip() - - notice = "[bold][[reset][blue]notice[reset][bold]][reset]" - return Group( - Text(), - Text.from_markup( - f"{notice} A new release of pip is available: " - f"[red]{self.old}[reset] -> [green]{self.new}[reset]" - ), - Text.from_markup( - f"{notice} To update, run: " - f"[green]{escape(pip_cmd)} install --upgrade pip" - ), - ) - - -def was_installed_by_pip(pkg: str) -> bool: - """Checks whether pkg was installed by pip - - This is used not to display the upgrade message when pip is in fact - installed by system package manager, such as dnf on Fedora. - """ - dist = get_default_environment().get_distribution(pkg) - return dist is not None and "pip" == dist.installer - - -def _get_current_remote_pip_version( - session: PipSession, options: optparse.Values -) -> Optional[str]: - # Lets use PackageFinder to see what the latest pip version is - link_collector = LinkCollector.create( - session, - options=options, - suppress_no_index=True, - ) - - # Pass allow_yanked=False so we don't suggest upgrading to a - # yanked version. - selection_prefs = SelectionPreferences( - allow_yanked=False, - allow_all_prereleases=False, # Explicitly set to False - ) - - finder = PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - ) - best_candidate = finder.find_best_candidate("pip").best_candidate - if best_candidate is None: - return None - - return str(best_candidate.version) - - -def _self_version_check_logic( - *, - state: SelfCheckState, - current_time: datetime.datetime, - local_version: Version, - get_remote_version: Callable[[], Optional[str]], -) -> Optional[UpgradePrompt]: - remote_version_str = state.get(current_time) - if remote_version_str is None: - remote_version_str = get_remote_version() - if remote_version_str is None: - logger.debug("No remote pip version found") - return None - state.set(remote_version_str, current_time) - - remote_version = parse_version(remote_version_str) - logger.debug("Remote version of pip: %s", remote_version) - logger.debug("Local version of pip: %s", local_version) - - pip_installed_by_pip = was_installed_by_pip("pip") - logger.debug("Was pip installed by pip? %s", pip_installed_by_pip) - if not pip_installed_by_pip: - return None # Only suggest upgrade if pip is installed by pip. - - local_version_is_older = ( - local_version < remote_version - and local_version.base_version != remote_version.base_version - ) - if local_version_is_older: - return UpgradePrompt(old=str(local_version), new=remote_version_str) - - return None - - -def pip_self_version_check(session: PipSession, options: optparse.Values) -> None: - """Check for an update for pip. - - Limit the frequency of checks to once per week. State is stored either in - the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix - of the pip script path. - """ - installed_dist = get_default_environment().get_distribution("pip") - if not installed_dist: - return - try: - check_externally_managed() - except ExternallyManagedEnvironment: - return - - upgrade_prompt = _self_version_check_logic( - state=SelfCheckState(cache_dir=options.cache_dir), - current_time=datetime.datetime.now(datetime.timezone.utc), - local_version=installed_dist.version, - get_remote_version=functools.partial( - _get_current_remote_pip_version, session, options - ), - ) - if upgrade_prompt is not None: - logger.warning("%s", upgrade_prompt, extra={"rich": True}) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 459d8f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc deleted file mode 100644 index 7fa8006..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc deleted file mode 100644 index 57633fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc deleted file mode 100644 index 561288f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc deleted file mode 100644 index 3ef7a7d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc deleted file mode 100644 index ead8216..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc deleted file mode 100644 index 3ee555e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc deleted file mode 100644 index e0d156b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc deleted file mode 100644 index 3a0e1a7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc deleted file mode 100644 index 97c9dee..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc deleted file mode 100644 index ad82b41..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc deleted file mode 100644 index 68ea7cb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc deleted file mode 100644 index b3d2a39..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc deleted file mode 100644 index ba8f007..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc deleted file mode 100644 index 80ab45c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc deleted file mode 100644 index 71c4503..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc deleted file mode 100644 index 8eeddc2..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc deleted file mode 100644 index bdc7222..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/retry.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/retry.cpython-312.pyc deleted file mode 100644 index bae3018..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/retry.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc deleted file mode 100644 index 2f4bcd0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc deleted file mode 100644 index f71d5b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc deleted file mode 100644 index f713954..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc deleted file mode 100644 index 4ed376a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc deleted file mode 100644 index 4d866b5..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc deleted file mode 100644 index 3e3117a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index 73de465..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py deleted file mode 100644 index 6ccf53b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Functions brought over from jaraco.text. - -These functions are not supposed to be used within `pip._internal`. These are -helper functions brought over from `jaraco.text` to enable vendoring newer -copies of `pkg_resources` without having to vendor `jaraco.text` and its entire -dependency cone; something that our vendoring setup is not currently capable of -handling. - -License reproduced from original source below: - -Copyright Jason R. Coombs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -import functools -import itertools - - -def _nonblank(str): - return str and not str.startswith("#") - - -@functools.singledispatch -def yield_lines(iterable): - r""" - Yield valid lines of a string or iterable. - - >>> list(yield_lines('')) - [] - >>> list(yield_lines(['foo', 'bar'])) - ['foo', 'bar'] - >>> list(yield_lines('foo\nbar')) - ['foo', 'bar'] - >>> list(yield_lines('\nfoo\n#bar\nbaz #comment')) - ['foo', 'baz #comment'] - >>> list(yield_lines(['foo\nbar', 'baz', 'bing\n\n\n'])) - ['foo', 'bar', 'baz', 'bing'] - """ - return itertools.chain.from_iterable(map(yield_lines, iterable)) - - -@yield_lines.register(str) -def _(text): - return filter(_nonblank, map(str.strip, text.splitlines())) - - -def drop_comment(line): - """ - Drop comments. - - >>> drop_comment('foo # bar') - 'foo' - - A hash without a space may be in a URL. - - >>> drop_comment('http://example.com/foo#bar') - 'http://example.com/foo#bar' - """ - return line.partition(" #")[0] - - -def join_continuation(lines): - r""" - Join lines continued by a trailing backslash. - - >>> list(join_continuation(['foo \\', 'bar', 'baz'])) - ['foobar', 'baz'] - >>> list(join_continuation(['foo \\', 'bar', 'baz'])) - ['foobar', 'baz'] - >>> list(join_continuation(['foo \\', 'bar \\', 'baz'])) - ['foobarbaz'] - - Not sure why, but... - The character preceding the backslash is also elided. - - >>> list(join_continuation(['goo\\', 'dly'])) - ['godly'] - - A terrible idea, but... - If no line is available to continue, suppress the lines. - - >>> list(join_continuation(['foo', 'bar\\', 'baz\\'])) - ['foo'] - """ - lines = iter(lines) - for item in lines: - while item.endswith("\\"): - try: - item = item[:-2].strip() + next(lines) - except StopIteration: - return - yield item diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/_log.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/_log.py deleted file mode 100644 index 92c4c6a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/_log.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Customize logging - -Defines custom logger class for the `logger.verbose(...)` method. - -init_logging() must be called before any other modules that call logging.getLogger. -""" - -import logging -from typing import Any, cast - -# custom log level for `--verbose` output -# between DEBUG and INFO -VERBOSE = 15 - - -class VerboseLogger(logging.Logger): - """Custom Logger, defining a verbose log-level - - VERBOSE is between INFO and DEBUG. - """ - - def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None: - return self.log(VERBOSE, msg, *args, **kwargs) - - -def getLogger(name: str) -> VerboseLogger: - """logging.getLogger, but ensures our VerboseLogger class is returned""" - return cast(VerboseLogger, logging.getLogger(name)) - - -def init_logging() -> None: - """Register our VerboseLogger and VERBOSE log level. - - Should be called before any calls to getLogger(), - i.e. in pip._internal.__init__ - """ - logging.setLoggerClass(VerboseLogger) - logging.addLevelName(VERBOSE, "VERBOSE") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py deleted file mode 100644 index 16933bf..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -This code wraps the vendored appdirs module to so the return values are -compatible for the current pip code base. - -The intention is to rewrite current usages gradually, keeping the tests pass, -and eventually drop this after all usages are changed. -""" - -import os -import sys -from typing import List - -from pip._vendor import platformdirs as _appdirs - - -def user_cache_dir(appname: str) -> str: - return _appdirs.user_cache_dir(appname, appauthor=False) - - -def _macos_user_config_dir(appname: str, roaming: bool = True) -> str: - # Use ~/Application Support/pip, if the directory exists. - path = _appdirs.user_data_dir(appname, appauthor=False, roaming=roaming) - if os.path.isdir(path): - return path - - # Use a Linux-like ~/.config/pip, by default. - linux_like_path = "~/.config/" - if appname: - linux_like_path = os.path.join(linux_like_path, appname) - - return os.path.expanduser(linux_like_path) - - -def user_config_dir(appname: str, roaming: bool = True) -> str: - if sys.platform == "darwin": - return _macos_user_config_dir(appname, roaming) - - return _appdirs.user_config_dir(appname, appauthor=False, roaming=roaming) - - -# for the discussion regarding site_config_dir locations -# see -def site_config_dirs(appname: str) -> List[str]: - if sys.platform == "darwin": - return [_appdirs.site_data_dir(appname, appauthor=False, multipath=True)] - - dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) - if sys.platform == "win32": - return [dirval] - - # Unix-y system. Look in /etc as well. - return dirval.split(os.pathsep) + ["/etc"] diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/compat.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/compat.py deleted file mode 100644 index d8b54e4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/compat.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Stuff that differs in different Python versions and platform -distributions.""" - -import importlib.resources -import logging -import os -import sys -from typing import IO - -__all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] - - -logger = logging.getLogger(__name__) - - -def has_tls() -> bool: - try: - import _ssl # noqa: F401 # ignore unused - - return True - except ImportError: - pass - - from pip._vendor.urllib3.util import IS_PYOPENSSL - - return IS_PYOPENSSL - - -def get_path_uid(path: str) -> int: - """ - Return path's uid. - - Does not follow symlinks: - https://github.com/pypa/pip/pull/935#discussion_r5307003 - - Placed this function in compat due to differences on AIX and - Jython, that should eventually go away. - - :raises OSError: When path is a symlink or can't be read. - """ - if hasattr(os, "O_NOFOLLOW"): - fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) - file_uid = os.fstat(fd).st_uid - os.close(fd) - else: # AIX and Jython - # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW - if not os.path.islink(path): - # older versions of Jython don't have `os.fstat` - file_uid = os.stat(path).st_uid - else: - # raise OSError for parity with os.O_NOFOLLOW above - raise OSError(f"{path} is a symlink; Will not return uid for symlinks") - return file_uid - - -# The importlib.resources.open_text function was deprecated in 3.11 with suggested -# replacement we use below. -if sys.version_info < (3, 11): - open_text_resource = importlib.resources.open_text -else: - - def open_text_resource( - package: str, resource: str, encoding: str = "utf-8", errors: str = "strict" - ) -> IO[str]: - return (importlib.resources.files(package) / resource).open( - "r", encoding=encoding, errors=errors - ) - - -# packages in the stdlib that may have installation metadata, but should not be -# considered 'installed'. this theoretically could be determined based on -# dist.location (py27:`sysconfig.get_paths()['stdlib']`, -# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may -# make this ineffective, so hard-coding -stdlib_pkgs = {"python", "wsgiref", "argparse"} - - -# windows detection, covers cpython and ironpython -WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py deleted file mode 100644 index 2e7b745..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py +++ /dev/null @@ -1,188 +0,0 @@ -"""Generate and work with PEP 425 Compatibility Tags. -""" - -import re -from typing import List, Optional, Tuple - -from pip._vendor.packaging.tags import ( - PythonVersion, - Tag, - compatible_tags, - cpython_tags, - generic_tags, - interpreter_name, - interpreter_version, - ios_platforms, - mac_platforms, -) - -_apple_arch_pat = re.compile(r"(.+)_(\d+)_(\d+)_(.+)") - - -def version_info_to_nodot(version_info: Tuple[int, ...]) -> str: - # Only use up to the first two numbers. - return "".join(map(str, version_info[:2])) - - -def _mac_platforms(arch: str) -> List[str]: - match = _apple_arch_pat.match(arch) - if match: - name, major, minor, actual_arch = match.groups() - mac_version = (int(major), int(minor)) - arches = [ - # Since we have always only checked that the platform starts - # with "macosx", for backwards-compatibility we extract the - # actual prefix provided by the user in case they provided - # something like "macosxcustom_". It may be good to remove - # this as undocumented or deprecate it in the future. - "{}_{}".format(name, arch[len("macosx_") :]) - for arch in mac_platforms(mac_version, actual_arch) - ] - else: - # arch pattern didn't match (?!) - arches = [arch] - return arches - - -def _ios_platforms(arch: str) -> List[str]: - match = _apple_arch_pat.match(arch) - if match: - name, major, minor, actual_multiarch = match.groups() - ios_version = (int(major), int(minor)) - arches = [ - # Since we have always only checked that the platform starts - # with "ios", for backwards-compatibility we extract the - # actual prefix provided by the user in case they provided - # something like "ioscustom_". It may be good to remove - # this as undocumented or deprecate it in the future. - "{}_{}".format(name, arch[len("ios_") :]) - for arch in ios_platforms(ios_version, actual_multiarch) - ] - else: - # arch pattern didn't match (?!) - arches = [arch] - return arches - - -def _custom_manylinux_platforms(arch: str) -> List[str]: - arches = [arch] - arch_prefix, arch_sep, arch_suffix = arch.partition("_") - if arch_prefix == "manylinux2014": - # manylinux1/manylinux2010 wheels run on most manylinux2014 systems - # with the exception of wheels depending on ncurses. PEP 599 states - # manylinux1/manylinux2010 wheels should be considered - # manylinux2014 wheels: - # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels - if arch_suffix in {"i686", "x86_64"}: - arches.append("manylinux2010" + arch_sep + arch_suffix) - arches.append("manylinux1" + arch_sep + arch_suffix) - elif arch_prefix == "manylinux2010": - # manylinux1 wheels run on most manylinux2010 systems with the - # exception of wheels depending on ncurses. PEP 571 states - # manylinux1 wheels should be considered manylinux2010 wheels: - # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels - arches.append("manylinux1" + arch_sep + arch_suffix) - return arches - - -def _get_custom_platforms(arch: str) -> List[str]: - arch_prefix, arch_sep, arch_suffix = arch.partition("_") - if arch.startswith("macosx"): - arches = _mac_platforms(arch) - elif arch.startswith("ios"): - arches = _ios_platforms(arch) - elif arch_prefix in ["manylinux2014", "manylinux2010"]: - arches = _custom_manylinux_platforms(arch) - else: - arches = [arch] - return arches - - -def _expand_allowed_platforms(platforms: Optional[List[str]]) -> Optional[List[str]]: - if not platforms: - return None - - seen = set() - result = [] - - for p in platforms: - if p in seen: - continue - additions = [c for c in _get_custom_platforms(p) if c not in seen] - seen.update(additions) - result.extend(additions) - - return result - - -def _get_python_version(version: str) -> PythonVersion: - if len(version) > 1: - return int(version[0]), int(version[1:]) - else: - return (int(version[0]),) - - -def _get_custom_interpreter( - implementation: Optional[str] = None, version: Optional[str] = None -) -> str: - if implementation is None: - implementation = interpreter_name() - if version is None: - version = interpreter_version() - return f"{implementation}{version}" - - -def get_supported( - version: Optional[str] = None, - platforms: Optional[List[str]] = None, - impl: Optional[str] = None, - abis: Optional[List[str]] = None, -) -> List[Tag]: - """Return a list of supported tags for each version specified in - `versions`. - - :param version: a string version, of the form "33" or "32", - or None. The version will be assumed to support our ABI. - :param platform: specify a list of platforms you want valid - tags for, or None. If None, use the local system platform. - :param impl: specify the exact implementation you want valid - tags for, or None. If None, use the local interpreter impl. - :param abis: specify a list of abis you want valid - tags for, or None. If None, use the local interpreter abi. - """ - supported: List[Tag] = [] - - python_version: Optional[PythonVersion] = None - if version is not None: - python_version = _get_python_version(version) - - interpreter = _get_custom_interpreter(impl, version) - - platforms = _expand_allowed_platforms(platforms) - - is_cpython = (impl or interpreter_name()) == "cp" - if is_cpython: - supported.extend( - cpython_tags( - python_version=python_version, - abis=abis, - platforms=platforms, - ) - ) - else: - supported.extend( - generic_tags( - interpreter=interpreter, - abis=abis, - platforms=platforms, - ) - ) - supported.extend( - compatible_tags( - python_version=python_version, - interpreter=interpreter, - platforms=platforms, - ) - ) - - return supported diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py deleted file mode 100644 index 8668b3b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py +++ /dev/null @@ -1,11 +0,0 @@ -"""For when pip wants to check the date or time. -""" - -import datetime - - -def today_is_later_than(year: int, month: int, day: int) -> bool: - today = datetime.date.today() - given = datetime.date(year, month, day) - - return today > given diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py deleted file mode 100644 index 0911147..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py +++ /dev/null @@ -1,124 +0,0 @@ -""" -A module that implements tooling to enable easy warnings about deprecations. -""" - -import logging -import warnings -from typing import Any, Optional, TextIO, Type, Union - -from pip._vendor.packaging.version import parse - -from pip import __version__ as current_version # NOTE: tests patch this name. - -DEPRECATION_MSG_PREFIX = "DEPRECATION: " - - -class PipDeprecationWarning(Warning): - pass - - -_original_showwarning: Any = None - - -# Warnings <-> Logging Integration -def _showwarning( - message: Union[Warning, str], - category: Type[Warning], - filename: str, - lineno: int, - file: Optional[TextIO] = None, - line: Optional[str] = None, -) -> None: - if file is not None: - if _original_showwarning is not None: - _original_showwarning(message, category, filename, lineno, file, line) - elif issubclass(category, PipDeprecationWarning): - # We use a specially named logger which will handle all of the - # deprecation messages for pip. - logger = logging.getLogger("pip._internal.deprecations") - logger.warning(message) - else: - _original_showwarning(message, category, filename, lineno, file, line) - - -def install_warning_logger() -> None: - # Enable our Deprecation Warnings - warnings.simplefilter("default", PipDeprecationWarning, append=True) - - global _original_showwarning - - if _original_showwarning is None: - _original_showwarning = warnings.showwarning - warnings.showwarning = _showwarning - - -def deprecated( - *, - reason: str, - replacement: Optional[str], - gone_in: Optional[str], - feature_flag: Optional[str] = None, - issue: Optional[int] = None, -) -> None: - """Helper to deprecate existing functionality. - - reason: - Textual reason shown to the user about why this functionality has - been deprecated. Should be a complete sentence. - replacement: - Textual suggestion shown to the user about what alternative - functionality they can use. - gone_in: - The version of pip does this functionality should get removed in. - Raises an error if pip's current version is greater than or equal to - this. - feature_flag: - Command-line flag of the form --use-feature={feature_flag} for testing - upcoming functionality. - issue: - Issue number on the tracker that would serve as a useful place for - users to find related discussion and provide feedback. - """ - - # Determine whether or not the feature is already gone in this version. - is_gone = gone_in is not None and parse(current_version) >= parse(gone_in) - - message_parts = [ - (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"), - ( - gone_in, - ( - "pip {} will enforce this behaviour change." - if not is_gone - else "Since pip {}, this is no longer supported." - ), - ), - ( - replacement, - "A possible replacement is {}.", - ), - ( - feature_flag, - ( - "You can use the flag --use-feature={} to test the upcoming behaviour." - if not is_gone - else None - ), - ), - ( - issue, - "Discussion can be found at https://github.com/pypa/pip/issues/{}", - ), - ] - - message = " ".join( - format_str.format(value) - for value, format_str in message_parts - if format_str is not None and value is not None - ) - - # Raise as an error if this behaviour is deprecated. - if is_gone: - raise PipDeprecationWarning(message) - - warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py deleted file mode 100644 index 66020d3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py +++ /dev/null @@ -1,87 +0,0 @@ -from typing import Optional - -from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo -from pip._internal.models.link import Link -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import vcs - - -def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str: - """Convert a DirectUrl to a pip requirement string.""" - direct_url.validate() # if invalid, this is a pip bug - requirement = name + " @ " - fragments = [] - if isinstance(direct_url.info, VcsInfo): - requirement += ( - f"{direct_url.info.vcs}+{direct_url.url}@{direct_url.info.commit_id}" - ) - elif isinstance(direct_url.info, ArchiveInfo): - requirement += direct_url.url - if direct_url.info.hash: - fragments.append(direct_url.info.hash) - else: - assert isinstance(direct_url.info, DirInfo) - requirement += direct_url.url - if direct_url.subdirectory: - fragments.append("subdirectory=" + direct_url.subdirectory) - if fragments: - requirement += "#" + "&".join(fragments) - return requirement - - -def direct_url_for_editable(source_dir: str) -> DirectUrl: - return DirectUrl( - url=path_to_url(source_dir), - info=DirInfo(editable=True), - ) - - -def direct_url_from_link( - link: Link, source_dir: Optional[str] = None, link_is_in_wheel_cache: bool = False -) -> DirectUrl: - if link.is_vcs: - vcs_backend = vcs.get_backend_for_scheme(link.scheme) - assert vcs_backend - url, requested_revision, _ = vcs_backend.get_url_rev_and_auth( - link.url_without_fragment - ) - # For VCS links, we need to find out and add commit_id. - if link_is_in_wheel_cache: - # If the requested VCS link corresponds to a cached - # wheel, it means the requested revision was an - # immutable commit hash, otherwise it would not have - # been cached. In that case we don't have a source_dir - # with the VCS checkout. - assert requested_revision - commit_id = requested_revision - else: - # If the wheel was not in cache, it means we have - # had to checkout from VCS to build and we have a source_dir - # which we can inspect to find out the commit id. - assert source_dir - commit_id = vcs_backend.get_revision(source_dir) - return DirectUrl( - url=url, - info=VcsInfo( - vcs=vcs_backend.name, - commit_id=commit_id, - requested_revision=requested_revision, - ), - subdirectory=link.subdirectory_fragment, - ) - elif link.is_existing_dir(): - return DirectUrl( - url=link.url_without_fragment, - info=DirInfo(), - subdirectory=link.subdirectory_fragment, - ) - else: - hash = None - hash_name = link.hash_name - if hash_name: - hash = f"{hash_name}={link.hash}" - return DirectUrl( - url=link.url_without_fragment, - info=ArchiveInfo(hash=hash), - subdirectory=link.subdirectory_fragment, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py deleted file mode 100644 index 4a384a6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py +++ /dev/null @@ -1,80 +0,0 @@ -import os -import re -import sys -from typing import List, Optional - -from pip._internal.locations import site_packages, user_site -from pip._internal.utils.virtualenv import ( - running_under_virtualenv, - virtualenv_no_global, -) - -__all__ = [ - "egg_link_path_from_sys_path", - "egg_link_path_from_location", -] - - -def _egg_link_names(raw_name: str) -> List[str]: - """ - Convert a Name metadata value to a .egg-link name, by applying - the same substitution as pkg_resources's safe_name function. - Note: we cannot use canonicalize_name because it has a different logic. - - We also look for the raw name (without normalization) as setuptools 69 changed - the way it names .egg-link files (https://github.com/pypa/setuptools/issues/4167). - """ - return [ - re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link", - f"{raw_name}.egg-link", - ] - - -def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: - """ - Look for a .egg-link file for project name, by walking sys.path. - """ - egg_link_names = _egg_link_names(raw_name) - for path_item in sys.path: - for egg_link_name in egg_link_names: - egg_link = os.path.join(path_item, egg_link_name) - if os.path.isfile(egg_link): - return egg_link - return None - - -def egg_link_path_from_location(raw_name: str) -> Optional[str]: - """ - Return the path for the .egg-link file if it exists, otherwise, None. - - There's 3 scenarios: - 1) not in a virtualenv - try to find in site.USER_SITE, then site_packages - 2) in a no-global virtualenv - try to find in site_packages - 3) in a yes-global virtualenv - try to find in site_packages, then site.USER_SITE - (don't look in global location) - - For #1 and #3, there could be odd cases, where there's an egg-link in 2 - locations. - - This method will just return the first one found. - """ - sites: List[str] = [] - if running_under_virtualenv(): - sites.append(site_packages) - if not virtualenv_no_global() and user_site: - sites.append(user_site) - else: - if user_site: - sites.append(user_site) - sites.append(site_packages) - - egg_link_names = _egg_link_names(raw_name) - for site in sites: - for egg_link_name in egg_link_names: - egglink = os.path.join(site, egg_link_name) - if os.path.isfile(egglink): - return egglink - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py deleted file mode 100644 index 1501369..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py +++ /dev/null @@ -1,84 +0,0 @@ -import itertools -import os -import shutil -import sys -from typing import List, Optional - -from pip._internal.cli.main import main -from pip._internal.utils.compat import WINDOWS - -_EXECUTABLE_NAMES = [ - "pip", - f"pip{sys.version_info.major}", - f"pip{sys.version_info.major}.{sys.version_info.minor}", -] -if WINDOWS: - _allowed_extensions = {"", ".exe"} - _EXECUTABLE_NAMES = [ - "".join(parts) - for parts in itertools.product(_EXECUTABLE_NAMES, _allowed_extensions) - ] - - -def _wrapper(args: Optional[List[str]] = None) -> int: - """Central wrapper for all old entrypoints. - - Historically pip has had several entrypoints defined. Because of issues - arising from PATH, sys.path, multiple Pythons, their interactions, and most - of them having a pip installed, users suffer every time an entrypoint gets - moved. - - To alleviate this pain, and provide a mechanism for warning users and - directing them to an appropriate place for help, we now define all of - our old entrypoints as wrappers for the current one. - """ - sys.stderr.write( - "WARNING: pip is being invoked by an old script wrapper. This will " - "fail in a future version of pip.\n" - "Please see https://github.com/pypa/pip/issues/5599 for advice on " - "fixing the underlying issue.\n" - "To avoid this problem you can invoke Python with '-m pip' instead of " - "running pip directly.\n" - ) - return main(args) - - -def get_best_invocation_for_this_pip() -> str: - """Try to figure out the best way to invoke pip in the current environment.""" - binary_directory = "Scripts" if WINDOWS else "bin" - binary_prefix = os.path.join(sys.prefix, binary_directory) - - # Try to use pip[X[.Y]] names, if those executables for this environment are - # the first on PATH with that name. - path_parts = os.path.normcase(os.environ.get("PATH", "")).split(os.pathsep) - exe_are_in_PATH = os.path.normcase(binary_prefix) in path_parts - if exe_are_in_PATH: - for exe_name in _EXECUTABLE_NAMES: - found_executable = shutil.which(exe_name) - binary_executable = os.path.join(binary_prefix, exe_name) - if ( - found_executable - and os.path.exists(binary_executable) - and os.path.samefile( - found_executable, - binary_executable, - ) - ): - return exe_name - - # Use the `-m` invocation, if there's no "nice" invocation. - return f"{get_best_invocation_for_this_python()} -m pip" - - -def get_best_invocation_for_this_python() -> str: - """Try to figure out the best way to invoke the current Python.""" - exe = sys.executable - exe_name = os.path.basename(exe) - - # Try to use the basename, if it's the first executable. - found_executable = shutil.which(exe_name) - if found_executable and os.path.samefile(found_executable, exe): - return exe_name - - # Use the full executable name, because we couldn't find something simpler. - return exe diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py deleted file mode 100644 index 22e356c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py +++ /dev/null @@ -1,149 +0,0 @@ -import fnmatch -import os -import os.path -import random -import sys -from contextlib import contextmanager -from tempfile import NamedTemporaryFile -from typing import Any, BinaryIO, Generator, List, Union, cast - -from pip._internal.utils.compat import get_path_uid -from pip._internal.utils.misc import format_size -from pip._internal.utils.retry import retry - - -def check_path_owner(path: str) -> bool: - # If we don't have a way to check the effective uid of this process, then - # we'll just assume that we own the directory. - if sys.platform == "win32" or not hasattr(os, "geteuid"): - return True - - assert os.path.isabs(path) - - previous = None - while path != previous: - if os.path.lexists(path): - # Check if path is writable by current user. - if os.geteuid() == 0: - # Special handling for root user in order to handle properly - # cases where users use sudo without -H flag. - try: - path_uid = get_path_uid(path) - except OSError: - return False - return path_uid == 0 - else: - return os.access(path, os.W_OK) - else: - previous, path = path, os.path.dirname(path) - return False # assume we don't own the path - - -@contextmanager -def adjacent_tmp_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: - """Return a file-like object pointing to a tmp file next to path. - - The file is created securely and is ensured to be written to disk - after the context reaches its end. - - kwargs will be passed to tempfile.NamedTemporaryFile to control - the way the temporary file will be opened. - """ - with NamedTemporaryFile( - delete=False, - dir=os.path.dirname(path), - prefix=os.path.basename(path), - suffix=".tmp", - **kwargs, - ) as f: - result = cast(BinaryIO, f) - try: - yield result - finally: - result.flush() - os.fsync(result.fileno()) - - -replace = retry(stop_after_delay=1, wait=0.25)(os.replace) - - -# test_writable_dir and _test_writable_dir_win are copied from Flit, -# with the author's agreement to also place them under pip's license. -def test_writable_dir(path: str) -> bool: - """Check if a directory is writable. - - Uses os.access() on POSIX, tries creating files on Windows. - """ - # If the directory doesn't exist, find the closest parent that does. - while not os.path.isdir(path): - parent = os.path.dirname(path) - if parent == path: - break # Should never get here, but infinite loops are bad - path = parent - - if os.name == "posix": - return os.access(path, os.W_OK) - - return _test_writable_dir_win(path) - - -def _test_writable_dir_win(path: str) -> bool: - # os.access doesn't work on Windows: http://bugs.python.org/issue2528 - # and we can't use tempfile: http://bugs.python.org/issue22107 - basename = "accesstest_deleteme_fishfingers_custard_" - alphabet = "abcdefghijklmnopqrstuvwxyz0123456789" - for _ in range(10): - name = basename + "".join(random.choice(alphabet) for _ in range(6)) - file = os.path.join(path, name) - try: - fd = os.open(file, os.O_RDWR | os.O_CREAT | os.O_EXCL) - except FileExistsError: - pass - except PermissionError: - # This could be because there's a directory with the same name. - # But it's highly unlikely there's a directory called that, - # so we'll assume it's because the parent dir is not writable. - # This could as well be because the parent dir is not readable, - # due to non-privileged user access. - return False - else: - os.close(fd) - os.unlink(file) - return True - - # This should never be reached - raise OSError("Unexpected condition testing for writable directory") - - -def find_files(path: str, pattern: str) -> List[str]: - """Returns a list of absolute paths of files beneath path, recursively, - with filenames which match the UNIX-style shell glob pattern.""" - result: List[str] = [] - for root, _, files in os.walk(path): - matches = fnmatch.filter(files, pattern) - result.extend(os.path.join(root, f) for f in matches) - return result - - -def file_size(path: str) -> Union[int, float]: - # If it's a symlink, return 0. - if os.path.islink(path): - return 0 - return os.path.getsize(path) - - -def format_file_size(path: str) -> str: - return format_size(file_size(path)) - - -def directory_size(path: str) -> Union[int, float]: - size = 0.0 - for root, _dirs, files in os.walk(path): - for filename in files: - file_path = os.path.join(root, filename) - size += file_size(file_path) - return size - - -def format_directory_size(path: str) -> str: - return format_size(directory_size(path)) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py deleted file mode 100644 index 5948570..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Filetype information. -""" - -from typing import Tuple - -from pip._internal.utils.misc import splitext - -WHEEL_EXTENSION = ".whl" -BZ2_EXTENSIONS: Tuple[str, ...] = (".tar.bz2", ".tbz") -XZ_EXTENSIONS: Tuple[str, ...] = ( - ".tar.xz", - ".txz", - ".tlz", - ".tar.lz", - ".tar.lzma", -) -ZIP_EXTENSIONS: Tuple[str, ...] = (".zip", WHEEL_EXTENSION) -TAR_EXTENSIONS: Tuple[str, ...] = (".tar.gz", ".tgz", ".tar") -ARCHIVE_EXTENSIONS = ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS - - -def is_archive_file(name: str) -> bool: - """Return True if `name` is a considered as an archive file.""" - ext = splitext(name)[1].lower() - if ext in ARCHIVE_EXTENSIONS: - return True - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py deleted file mode 100644 index 998868f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py +++ /dev/null @@ -1,101 +0,0 @@ -import os -import sys -from typing import Optional, Tuple - - -def glibc_version_string() -> Optional[str]: - "Returns glibc version string, or None if not using glibc." - return glibc_version_string_confstr() or glibc_version_string_ctypes() - - -def glibc_version_string_confstr() -> Optional[str]: - "Primary implementation of glibc_version_string using os.confstr." - # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely - # to be broken or missing. This strategy is used in the standard library - # platform module: - # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 - if sys.platform == "win32": - return None - try: - gnu_libc_version = os.confstr("CS_GNU_LIBC_VERSION") - if gnu_libc_version is None: - return None - # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": - _, version = gnu_libc_version.split() - except (AttributeError, OSError, ValueError): - # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... - return None - return version - - -def glibc_version_string_ctypes() -> Optional[str]: - "Fallback implementation of glibc_version_string using ctypes." - - try: - import ctypes - except ImportError: - return None - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - # - # We must also handle the special case where the executable is not a - # dynamically linked executable. This can occur when using musl libc, - # for example. In this situation, dlopen() will error, leading to an - # OSError. Interestingly, at least in the case of musl, there is no - # errno set on the OSError. The single string argument used to construct - # OSError comes from libc itself and is therefore not portable to - # hard code here. In any case, failure to call dlopen() means we - # can't proceed, so we bail on our attempt. - try: - process_namespace = ctypes.CDLL(None) - except OSError: - return None - - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str: str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -# platform.libc_ver regularly returns completely nonsensical glibc -# versions. E.g. on my computer, platform says: -# -# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.7') -# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.9') -# -# But the truth is: -# -# ~$ ldd --version -# ldd (Debian GLIBC 2.22-11) 2.22 -# -# This is unfortunate, because it means that the linehaul data on libc -# versions that was generated by pip 8.1.2 and earlier is useless and -# misleading. Solution: instead of using platform, use our code that actually -# works. -def libc_ver() -> Tuple[str, str]: - """Try to determine the glibc version - - Returns a tuple of strings (lib, version) which default to empty strings - in case the lookup fails. - """ - glibc_version = glibc_version_string() - if glibc_version is None: - return ("", "") - else: - return ("glibc", glibc_version) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py deleted file mode 100644 index 535e94f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py +++ /dev/null @@ -1,147 +0,0 @@ -import hashlib -from typing import TYPE_CHECKING, BinaryIO, Dict, Iterable, List, NoReturn, Optional - -from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError -from pip._internal.utils.misc import read_chunks - -if TYPE_CHECKING: - from hashlib import _Hash - - -# The recommended hash algo of the moment. Change this whenever the state of -# the art changes; it won't hurt backward compatibility. -FAVORITE_HASH = "sha256" - - -# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` -# Currently, those are the ones at least as collision-resistant as sha256. -STRONG_HASHES = ["sha256", "sha384", "sha512"] - - -class Hashes: - """A wrapper that builds multiple hashes at once and checks them against - known-good values - - """ - - def __init__(self, hashes: Optional[Dict[str, List[str]]] = None) -> None: - """ - :param hashes: A dict of algorithm names pointing to lists of allowed - hex digests - """ - allowed = {} - if hashes is not None: - for alg, keys in hashes.items(): - # Make sure values are always sorted (to ease equality checks) - allowed[alg] = [k.lower() for k in sorted(keys)] - self._allowed = allowed - - def __and__(self, other: "Hashes") -> "Hashes": - if not isinstance(other, Hashes): - return NotImplemented - - # If either of the Hashes object is entirely empty (i.e. no hash - # specified at all), all hashes from the other object are allowed. - if not other: - return self - if not self: - return other - - # Otherwise only hashes that present in both objects are allowed. - new = {} - for alg, values in other._allowed.items(): - if alg not in self._allowed: - continue - new[alg] = [v for v in values if v in self._allowed[alg]] - return Hashes(new) - - @property - def digest_count(self) -> int: - return sum(len(digests) for digests in self._allowed.values()) - - def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool: - """Return whether the given hex digest is allowed.""" - return hex_digest in self._allowed.get(hash_name, []) - - def check_against_chunks(self, chunks: Iterable[bytes]) -> None: - """Check good hashes against ones built from iterable of chunks of - data. - - Raise HashMismatch if none match. - - """ - gots = {} - for hash_name in self._allowed.keys(): - try: - gots[hash_name] = hashlib.new(hash_name) - except (ValueError, TypeError): - raise InstallationError(f"Unknown hash name: {hash_name}") - - for chunk in chunks: - for hash in gots.values(): - hash.update(chunk) - - for hash_name, got in gots.items(): - if got.hexdigest() in self._allowed[hash_name]: - return - self._raise(gots) - - def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": - raise HashMismatch(self._allowed, gots) - - def check_against_file(self, file: BinaryIO) -> None: - """Check good hashes against a file-like object - - Raise HashMismatch if none match. - - """ - return self.check_against_chunks(read_chunks(file)) - - def check_against_path(self, path: str) -> None: - with open(path, "rb") as file: - return self.check_against_file(file) - - def has_one_of(self, hashes: Dict[str, str]) -> bool: - """Return whether any of the given hashes are allowed.""" - for hash_name, hex_digest in hashes.items(): - if self.is_hash_allowed(hash_name, hex_digest): - return True - return False - - def __bool__(self) -> bool: - """Return whether I know any known-good hashes.""" - return bool(self._allowed) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Hashes): - return NotImplemented - return self._allowed == other._allowed - - def __hash__(self) -> int: - return hash( - ",".join( - sorted( - ":".join((alg, digest)) - for alg, digest_list in self._allowed.items() - for digest in digest_list - ) - ) - ) - - -class MissingHashes(Hashes): - """A workalike for Hashes used when we're missing a hash for a requirement - - It computes the actual hash of the requirement and raises a HashMissing - exception showing it to the user. - - """ - - def __init__(self) -> None: - """Don't offer the ``hashes`` kwarg.""" - # Pass our favorite hash in to generate a "gotten hash". With the - # empty list, it will never match, so an error will always raise. - super().__init__(hashes={FAVORITE_HASH: []}) - - def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": - raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/logging.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/logging.py deleted file mode 100644 index 62035fc..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/logging.py +++ /dev/null @@ -1,354 +0,0 @@ -import contextlib -import errno -import logging -import logging.handlers -import os -import sys -import threading -from dataclasses import dataclass -from io import TextIOWrapper -from logging import Filter -from typing import Any, ClassVar, Generator, List, Optional, TextIO, Type - -from pip._vendor.rich.console import ( - Console, - ConsoleOptions, - ConsoleRenderable, - RenderableType, - RenderResult, - RichCast, -) -from pip._vendor.rich.highlighter import NullHighlighter -from pip._vendor.rich.logging import RichHandler -from pip._vendor.rich.segment import Segment -from pip._vendor.rich.style import Style - -from pip._internal.utils._log import VERBOSE, getLogger -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX -from pip._internal.utils.misc import ensure_dir - -_log_state = threading.local() -subprocess_logger = getLogger("pip.subprocessor") - - -class BrokenStdoutLoggingError(Exception): - """ - Raised if BrokenPipeError occurs for the stdout stream while logging. - """ - - -def _is_broken_pipe_error(exc_class: Type[BaseException], exc: BaseException) -> bool: - if exc_class is BrokenPipeError: - return True - - # On Windows, a broken pipe can show up as EINVAL rather than EPIPE: - # https://bugs.python.org/issue19612 - # https://bugs.python.org/issue30418 - if not WINDOWS: - return False - - return isinstance(exc, OSError) and exc.errno in (errno.EINVAL, errno.EPIPE) - - -@contextlib.contextmanager -def indent_log(num: int = 2) -> Generator[None, None, None]: - """ - A context manager which will cause the log output to be indented for any - log messages emitted inside it. - """ - # For thread-safety - _log_state.indentation = get_indentation() - _log_state.indentation += num - try: - yield - finally: - _log_state.indentation -= num - - -def get_indentation() -> int: - return getattr(_log_state, "indentation", 0) - - -class IndentingFormatter(logging.Formatter): - default_time_format = "%Y-%m-%dT%H:%M:%S" - - def __init__( - self, - *args: Any, - add_timestamp: bool = False, - **kwargs: Any, - ) -> None: - """ - A logging.Formatter that obeys the indent_log() context manager. - - :param add_timestamp: A bool indicating output lines should be prefixed - with their record's timestamp. - """ - self.add_timestamp = add_timestamp - super().__init__(*args, **kwargs) - - def get_message_start(self, formatted: str, levelno: int) -> str: - """ - Return the start of the formatted log message (not counting the - prefix to add to each line). - """ - if levelno < logging.WARNING: - return "" - if formatted.startswith(DEPRECATION_MSG_PREFIX): - # Then the message already has a prefix. We don't want it to - # look like "WARNING: DEPRECATION: ...." - return "" - if levelno < logging.ERROR: - return "WARNING: " - - return "ERROR: " - - def format(self, record: logging.LogRecord) -> str: - """ - Calls the standard formatter, but will indent all of the log message - lines by our current indentation level. - """ - formatted = super().format(record) - message_start = self.get_message_start(formatted, record.levelno) - formatted = message_start + formatted - - prefix = "" - if self.add_timestamp: - prefix = f"{self.formatTime(record)} " - prefix += " " * get_indentation() - formatted = "".join([prefix + line for line in formatted.splitlines(True)]) - return formatted - - -@dataclass -class IndentedRenderable: - renderable: RenderableType - indent: int - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - segments = console.render(self.renderable, options) - lines = Segment.split_lines(segments) - for line in lines: - yield Segment(" " * self.indent) - yield from line - yield Segment("\n") - - -class PipConsole(Console): - def on_broken_pipe(self) -> None: - # Reraise the original exception, rich 13.8.0+ exits by default - # instead, preventing our handler from firing. - raise BrokenPipeError() from None - - -class RichPipStreamHandler(RichHandler): - KEYWORDS: ClassVar[Optional[List[str]]] = [] - - def __init__(self, stream: Optional[TextIO], no_color: bool) -> None: - super().__init__( - console=PipConsole(file=stream, no_color=no_color, soft_wrap=True), - show_time=False, - show_level=False, - show_path=False, - highlighter=NullHighlighter(), - ) - - # Our custom override on Rich's logger, to make things work as we need them to. - def emit(self, record: logging.LogRecord) -> None: - style: Optional[Style] = None - - # If we are given a diagnostic error to present, present it with indentation. - if getattr(record, "rich", False): - assert isinstance(record.args, tuple) - (rich_renderable,) = record.args - assert isinstance( - rich_renderable, (ConsoleRenderable, RichCast, str) - ), f"{rich_renderable} is not rich-console-renderable" - - renderable: RenderableType = IndentedRenderable( - rich_renderable, indent=get_indentation() - ) - else: - message = self.format(record) - renderable = self.render_message(record, message) - if record.levelno is not None: - if record.levelno >= logging.ERROR: - style = Style(color="red") - elif record.levelno >= logging.WARNING: - style = Style(color="yellow") - - try: - self.console.print(renderable, overflow="ignore", crop=False, style=style) - except Exception: - self.handleError(record) - - def handleError(self, record: logging.LogRecord) -> None: - """Called when logging is unable to log some output.""" - - exc_class, exc = sys.exc_info()[:2] - # If a broken pipe occurred while calling write() or flush() on the - # stdout stream in logging's Handler.emit(), then raise our special - # exception so we can handle it in main() instead of logging the - # broken pipe error and continuing. - if ( - exc_class - and exc - and self.console.file is sys.stdout - and _is_broken_pipe_error(exc_class, exc) - ): - raise BrokenStdoutLoggingError() - - return super().handleError(record) - - -class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): - def _open(self) -> TextIOWrapper: - ensure_dir(os.path.dirname(self.baseFilename)) - return super()._open() - - -class MaxLevelFilter(Filter): - def __init__(self, level: int) -> None: - self.level = level - - def filter(self, record: logging.LogRecord) -> bool: - return record.levelno < self.level - - -class ExcludeLoggerFilter(Filter): - """ - A logging Filter that excludes records from a logger (or its children). - """ - - def filter(self, record: logging.LogRecord) -> bool: - # The base Filter class allows only records from a logger (or its - # children). - return not super().filter(record) - - -def setup_logging(verbosity: int, no_color: bool, user_log_file: Optional[str]) -> int: - """Configures and sets up all of the logging - - Returns the requested logging level, as its integer value. - """ - - # Determine the level to be logging at. - if verbosity >= 2: - level_number = logging.DEBUG - elif verbosity == 1: - level_number = VERBOSE - elif verbosity == -1: - level_number = logging.WARNING - elif verbosity == -2: - level_number = logging.ERROR - elif verbosity <= -3: - level_number = logging.CRITICAL - else: - level_number = logging.INFO - - level = logging.getLevelName(level_number) - - # The "root" logger should match the "console" level *unless* we also need - # to log to a user log file. - include_user_log = user_log_file is not None - if include_user_log: - additional_log_file = user_log_file - root_level = "DEBUG" - else: - additional_log_file = "/dev/null" - root_level = level - - # Disable any logging besides WARNING unless we have DEBUG level logging - # enabled for vendored libraries. - vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" - - # Shorthands for clarity - log_streams = { - "stdout": "ext://sys.stdout", - "stderr": "ext://sys.stderr", - } - handler_classes = { - "stream": "pip._internal.utils.logging.RichPipStreamHandler", - "file": "pip._internal.utils.logging.BetterRotatingFileHandler", - } - handlers = ["console", "console_errors", "console_subprocess"] + ( - ["user_log"] if include_user_log else [] - ) - - logging.config.dictConfig( - { - "version": 1, - "disable_existing_loggers": False, - "filters": { - "exclude_warnings": { - "()": "pip._internal.utils.logging.MaxLevelFilter", - "level": logging.WARNING, - }, - "restrict_to_subprocess": { - "()": "logging.Filter", - "name": subprocess_logger.name, - }, - "exclude_subprocess": { - "()": "pip._internal.utils.logging.ExcludeLoggerFilter", - "name": subprocess_logger.name, - }, - }, - "formatters": { - "indent": { - "()": IndentingFormatter, - "format": "%(message)s", - }, - "indent_with_timestamp": { - "()": IndentingFormatter, - "format": "%(message)s", - "add_timestamp": True, - }, - }, - "handlers": { - "console": { - "level": level, - "class": handler_classes["stream"], - "no_color": no_color, - "stream": log_streams["stdout"], - "filters": ["exclude_subprocess", "exclude_warnings"], - "formatter": "indent", - }, - "console_errors": { - "level": "WARNING", - "class": handler_classes["stream"], - "no_color": no_color, - "stream": log_streams["stderr"], - "filters": ["exclude_subprocess"], - "formatter": "indent", - }, - # A handler responsible for logging to the console messages - # from the "subprocessor" logger. - "console_subprocess": { - "level": level, - "class": handler_classes["stream"], - "stream": log_streams["stderr"], - "no_color": no_color, - "filters": ["restrict_to_subprocess"], - "formatter": "indent", - }, - "user_log": { - "level": "DEBUG", - "class": handler_classes["file"], - "filename": additional_log_file, - "encoding": "utf-8", - "delay": True, - "formatter": "indent_with_timestamp", - }, - }, - "root": { - "level": root_level, - "handlers": handlers, - }, - "loggers": {"pip._vendor": {"level": vendored_log_level}}, - } - ) - - return level_number diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/misc.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/misc.py deleted file mode 100644 index 44f6a05..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/misc.py +++ /dev/null @@ -1,773 +0,0 @@ -import errno -import getpass -import hashlib -import logging -import os -import posixpath -import shutil -import stat -import sys -import sysconfig -import urllib.parse -from dataclasses import dataclass -from functools import partial -from io import StringIO -from itertools import filterfalse, tee, zip_longest -from pathlib import Path -from types import FunctionType, TracebackType -from typing import ( - Any, - BinaryIO, - Callable, - Generator, - Iterable, - Iterator, - List, - Mapping, - Optional, - Sequence, - TextIO, - Tuple, - Type, - TypeVar, - Union, - cast, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip import __version__ -from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment -from pip._internal.locations import get_major_minor_version -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.retry import retry -from pip._internal.utils.virtualenv import running_under_virtualenv - -__all__ = [ - "rmtree", - "display_path", - "backup_dir", - "ask", - "splitext", - "format_size", - "is_installable_dir", - "normalize_path", - "renames", - "get_prog", - "ensure_dir", - "remove_auth_from_url", - "check_externally_managed", - "ConfiguredBuildBackendHookCaller", -] - -logger = logging.getLogger(__name__) - -T = TypeVar("T") -ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] -VersionInfo = Tuple[int, int, int] -NetlocTuple = Tuple[str, Tuple[Optional[str], Optional[str]]] -OnExc = Callable[[FunctionType, Path, BaseException], Any] -OnErr = Callable[[FunctionType, Path, ExcInfo], Any] - -FILE_CHUNK_SIZE = 1024 * 1024 - - -def get_pip_version() -> str: - pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") - pip_pkg_dir = os.path.abspath(pip_pkg_dir) - - return f"pip {__version__} from {pip_pkg_dir} (python {get_major_minor_version()})" - - -def normalize_version_info(py_version_info: Tuple[int, ...]) -> Tuple[int, int, int]: - """ - Convert a tuple of ints representing a Python version to one of length - three. - - :param py_version_info: a tuple of ints representing a Python version, - or None to specify no version. The tuple can have any length. - - :return: a tuple of length three if `py_version_info` is non-None. - Otherwise, return `py_version_info` unchanged (i.e. None). - """ - if len(py_version_info) < 3: - py_version_info += (3 - len(py_version_info)) * (0,) - elif len(py_version_info) > 3: - py_version_info = py_version_info[:3] - - return cast("VersionInfo", py_version_info) - - -def ensure_dir(path: str) -> None: - """os.path.makedirs without EEXIST.""" - try: - os.makedirs(path) - except OSError as e: - # Windows can raise spurious ENOTEMPTY errors. See #6426. - if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY: - raise - - -def get_prog() -> str: - try: - prog = os.path.basename(sys.argv[0]) - if prog in ("__main__.py", "-c"): - return f"{sys.executable} -m pip" - else: - return prog - except (AttributeError, TypeError, IndexError): - pass - return "pip" - - -# Retry every half second for up to 3 seconds -@retry(stop_after_delay=3, wait=0.5) -def rmtree( - dir: str, ignore_errors: bool = False, onexc: Optional[OnExc] = None -) -> None: - if ignore_errors: - onexc = _onerror_ignore - if onexc is None: - onexc = _onerror_reraise - handler: OnErr = partial(rmtree_errorhandler, onexc=onexc) - if sys.version_info >= (3, 12): - # See https://docs.python.org/3.12/whatsnew/3.12.html#shutil. - shutil.rmtree(dir, onexc=handler) # type: ignore - else: - shutil.rmtree(dir, onerror=handler) # type: ignore - - -def _onerror_ignore(*_args: Any) -> None: - pass - - -def _onerror_reraise(*_args: Any) -> None: - raise # noqa: PLE0704 - Bare exception used to reraise existing exception - - -def rmtree_errorhandler( - func: FunctionType, - path: Path, - exc_info: Union[ExcInfo, BaseException], - *, - onexc: OnExc = _onerror_reraise, -) -> None: - """ - `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`). - - * If a file is readonly then it's write flag is set and operation is - retried. - - * `onerror` is the original callback from `rmtree(... onerror=onerror)` - that is chained at the end if the "rm -f" still fails. - """ - try: - st_mode = os.stat(path).st_mode - except OSError: - # it's equivalent to os.path.exists - return - - if not st_mode & stat.S_IWRITE: - # convert to read/write - try: - os.chmod(path, st_mode | stat.S_IWRITE) - except OSError: - pass - else: - # use the original function to repeat the operation - try: - func(path) - return - except OSError: - pass - - if not isinstance(exc_info, BaseException): - _, exc_info, _ = exc_info - onexc(func, path, exc_info) - - -def display_path(path: str) -> str: - """Gives the display value for a given path, making it relative to cwd - if possible.""" - path = os.path.normcase(os.path.abspath(path)) - if path.startswith(os.getcwd() + os.path.sep): - path = "." + path[len(os.getcwd()) :] - return path - - -def backup_dir(dir: str, ext: str = ".bak") -> str: - """Figure out the name of a directory to back up the given dir to - (adding .bak, .bak2, etc)""" - n = 1 - extension = ext - while os.path.exists(dir + extension): - n += 1 - extension = ext + str(n) - return dir + extension - - -def ask_path_exists(message: str, options: Iterable[str]) -> str: - for action in os.environ.get("PIP_EXISTS_ACTION", "").split(): - if action in options: - return action - return ask(message, options) - - -def _check_no_input(message: str) -> None: - """Raise an error if no input is allowed.""" - if os.environ.get("PIP_NO_INPUT"): - raise Exception( - f"No input was expected ($PIP_NO_INPUT set); question: {message}" - ) - - -def ask(message: str, options: Iterable[str]) -> str: - """Ask the message interactively, with the given possible responses""" - while 1: - _check_no_input(message) - response = input(message) - response = response.strip().lower() - if response not in options: - print( - "Your response ({!r}) was not one of the expected responses: " - "{}".format(response, ", ".join(options)) - ) - else: - return response - - -def ask_input(message: str) -> str: - """Ask for input interactively.""" - _check_no_input(message) - return input(message) - - -def ask_password(message: str) -> str: - """Ask for a password interactively.""" - _check_no_input(message) - return getpass.getpass(message) - - -def strtobool(val: str) -> int: - """Convert a string representation of truth to true (1) or false (0). - - True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values - are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if - 'val' is anything else. - """ - val = val.lower() - if val in ("y", "yes", "t", "true", "on", "1"): - return 1 - elif val in ("n", "no", "f", "false", "off", "0"): - return 0 - else: - raise ValueError(f"invalid truth value {val!r}") - - -def format_size(bytes: float) -> str: - if bytes > 1000 * 1000: - return f"{bytes / 1000.0 / 1000:.1f} MB" - elif bytes > 10 * 1000: - return f"{int(bytes / 1000)} kB" - elif bytes > 1000: - return f"{bytes / 1000.0:.1f} kB" - else: - return f"{int(bytes)} bytes" - - -def tabulate(rows: Iterable[Iterable[Any]]) -> Tuple[List[str], List[int]]: - """Return a list of formatted rows and a list of column sizes. - - For example:: - - >>> tabulate([['foobar', 2000], [0xdeadbeef]]) - (['foobar 2000', '3735928559'], [10, 4]) - """ - rows = [tuple(map(str, row)) for row in rows] - sizes = [max(map(len, col)) for col in zip_longest(*rows, fillvalue="")] - table = [" ".join(map(str.ljust, row, sizes)).rstrip() for row in rows] - return table, sizes - - -def is_installable_dir(path: str) -> bool: - """Is path is a directory containing pyproject.toml or setup.py? - - If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for - a legacy setuptools layout by identifying setup.py. We don't check for the - setup.cfg because using it without setup.py is only available for PEP 517 - projects, which are already covered by the pyproject.toml check. - """ - if not os.path.isdir(path): - return False - if os.path.isfile(os.path.join(path, "pyproject.toml")): - return True - if os.path.isfile(os.path.join(path, "setup.py")): - return True - return False - - -def read_chunks( - file: BinaryIO, size: int = FILE_CHUNK_SIZE -) -> Generator[bytes, None, None]: - """Yield pieces of data from a file-like object until EOF.""" - while True: - chunk = file.read(size) - if not chunk: - break - yield chunk - - -def normalize_path(path: str, resolve_symlinks: bool = True) -> str: - """ - Convert a path to its canonical, case-normalized, absolute version. - - """ - path = os.path.expanduser(path) - if resolve_symlinks: - path = os.path.realpath(path) - else: - path = os.path.abspath(path) - return os.path.normcase(path) - - -def splitext(path: str) -> Tuple[str, str]: - """Like os.path.splitext, but take off .tar too""" - base, ext = posixpath.splitext(path) - if base.lower().endswith(".tar"): - ext = base[-4:] + ext - base = base[:-4] - return base, ext - - -def renames(old: str, new: str) -> None: - """Like os.renames(), but handles renaming across devices.""" - # Implementation borrowed from os.renames(). - head, tail = os.path.split(new) - if head and tail and not os.path.exists(head): - os.makedirs(head) - - shutil.move(old, new) - - head, tail = os.path.split(old) - if head and tail: - try: - os.removedirs(head) - except OSError: - pass - - -def is_local(path: str) -> bool: - """ - Return True if path is within sys.prefix, if we're running in a virtualenv. - - If we're not in a virtualenv, all paths are considered "local." - - Caution: this function assumes the head of path has been normalized - with normalize_path. - """ - if not running_under_virtualenv(): - return True - return path.startswith(normalize_path(sys.prefix)) - - -def write_output(msg: Any, *args: Any) -> None: - logger.info(msg, *args) - - -class StreamWrapper(StringIO): - orig_stream: TextIO - - @classmethod - def from_stream(cls, orig_stream: TextIO) -> "StreamWrapper": - ret = cls() - ret.orig_stream = orig_stream - return ret - - # compileall.compile_dir() needs stdout.encoding to print to stdout - # type ignore is because TextIOBase.encoding is writeable - @property - def encoding(self) -> str: # type: ignore - return self.orig_stream.encoding - - -# Simulates an enum -def enum(*sequential: Any, **named: Any) -> Type[Any]: - enums = dict(zip(sequential, range(len(sequential))), **named) - reverse = {value: key for key, value in enums.items()} - enums["reverse_mapping"] = reverse - return type("Enum", (), enums) - - -def build_netloc(host: str, port: Optional[int]) -> str: - """ - Build a netloc from a host-port pair - """ - if port is None: - return host - if ":" in host: - # Only wrap host with square brackets when it is IPv6 - host = f"[{host}]" - return f"{host}:{port}" - - -def build_url_from_netloc(netloc: str, scheme: str = "https") -> str: - """ - Build a full URL from a netloc. - """ - if netloc.count(":") >= 2 and "@" not in netloc and "[" not in netloc: - # It must be a bare IPv6 address, so wrap it with brackets. - netloc = f"[{netloc}]" - return f"{scheme}://{netloc}" - - -def parse_netloc(netloc: str) -> Tuple[Optional[str], Optional[int]]: - """ - Return the host-port pair from a netloc. - """ - url = build_url_from_netloc(netloc) - parsed = urllib.parse.urlparse(url) - return parsed.hostname, parsed.port - - -def split_auth_from_netloc(netloc: str) -> NetlocTuple: - """ - Parse out and remove the auth information from a netloc. - - Returns: (netloc, (username, password)). - """ - if "@" not in netloc: - return netloc, (None, None) - - # Split from the right because that's how urllib.parse.urlsplit() - # behaves if more than one @ is present (which can be checked using - # the password attribute of urlsplit()'s return value). - auth, netloc = netloc.rsplit("@", 1) - pw: Optional[str] = None - if ":" in auth: - # Split from the left because that's how urllib.parse.urlsplit() - # behaves if more than one : is present (which again can be checked - # using the password attribute of the return value) - user, pw = auth.split(":", 1) - else: - user, pw = auth, None - - user = urllib.parse.unquote(user) - if pw is not None: - pw = urllib.parse.unquote(pw) - - return netloc, (user, pw) - - -def redact_netloc(netloc: str) -> str: - """ - Replace the sensitive data in a netloc with "****", if it exists. - - For example: - - "user:pass@example.com" returns "user:****@example.com" - - "accesstoken@example.com" returns "****@example.com" - """ - netloc, (user, password) = split_auth_from_netloc(netloc) - if user is None: - return netloc - if password is None: - user = "****" - password = "" - else: - user = urllib.parse.quote(user) - password = ":****" - return f"{user}{password}@{netloc}" - - -def _transform_url( - url: str, transform_netloc: Callable[[str], Tuple[Any, ...]] -) -> Tuple[str, NetlocTuple]: - """Transform and replace netloc in a url. - - transform_netloc is a function taking the netloc and returning a - tuple. The first element of this tuple is the new netloc. The - entire tuple is returned. - - Returns a tuple containing the transformed url as item 0 and the - original tuple returned by transform_netloc as item 1. - """ - purl = urllib.parse.urlsplit(url) - netloc_tuple = transform_netloc(purl.netloc) - # stripped url - url_pieces = (purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment) - surl = urllib.parse.urlunsplit(url_pieces) - return surl, cast("NetlocTuple", netloc_tuple) - - -def _get_netloc(netloc: str) -> NetlocTuple: - return split_auth_from_netloc(netloc) - - -def _redact_netloc(netloc: str) -> Tuple[str]: - return (redact_netloc(netloc),) - - -def split_auth_netloc_from_url( - url: str, -) -> Tuple[str, str, Tuple[Optional[str], Optional[str]]]: - """ - Parse a url into separate netloc, auth, and url with no auth. - - Returns: (url_without_auth, netloc, (username, password)) - """ - url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) - return url_without_auth, netloc, auth - - -def remove_auth_from_url(url: str) -> str: - """Return a copy of url with 'username:password@' removed.""" - # username/pass params are passed to subversion through flags - # and are not recognized in the url. - return _transform_url(url, _get_netloc)[0] - - -def redact_auth_from_url(url: str) -> str: - """Replace the password in a given url with ****.""" - return _transform_url(url, _redact_netloc)[0] - - -def redact_auth_from_requirement(req: Requirement) -> str: - """Replace the password in a given requirement url with ****.""" - if not req.url: - return str(req) - return str(req).replace(req.url, redact_auth_from_url(req.url)) - - -@dataclass(frozen=True) -class HiddenText: - secret: str - redacted: str - - def __repr__(self) -> str: - return f"" - - def __str__(self) -> str: - return self.redacted - - # This is useful for testing. - def __eq__(self, other: Any) -> bool: - if type(self) is not type(other): - return False - - # The string being used for redaction doesn't also have to match, - # just the raw, original string. - return self.secret == other.secret - - -def hide_value(value: str) -> HiddenText: - return HiddenText(value, redacted="****") - - -def hide_url(url: str) -> HiddenText: - redacted = redact_auth_from_url(url) - return HiddenText(url, redacted=redacted) - - -def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None: - """Protection of pip.exe from modification on Windows - - On Windows, any operation modifying pip should be run as: - python -m pip ... - """ - pip_names = [ - "pip", - f"pip{sys.version_info.major}", - f"pip{sys.version_info.major}.{sys.version_info.minor}", - ] - - # See https://github.com/pypa/pip/issues/1299 for more discussion - should_show_use_python_msg = ( - modifying_pip and WINDOWS and os.path.basename(sys.argv[0]) in pip_names - ) - - if should_show_use_python_msg: - new_command = [sys.executable, "-m", "pip"] + sys.argv[1:] - raise CommandError( - "To modify pip, please run the following command:\n{}".format( - " ".join(new_command) - ) - ) - - -def check_externally_managed() -> None: - """Check whether the current environment is externally managed. - - If the ``EXTERNALLY-MANAGED`` config file is found, the current environment - is considered externally managed, and an ExternallyManagedEnvironment is - raised. - """ - if running_under_virtualenv(): - return - marker = os.path.join(sysconfig.get_path("stdlib"), "EXTERNALLY-MANAGED") - if not os.path.isfile(marker): - return - raise ExternallyManagedEnvironment.from_config(marker) - - -def is_console_interactive() -> bool: - """Is this console interactive?""" - return sys.stdin is not None and sys.stdin.isatty() - - -def hash_file(path: str, blocksize: int = 1 << 20) -> Tuple[Any, int]: - """Return (hash, length) for path using hashlib.sha256()""" - - h = hashlib.sha256() - length = 0 - with open(path, "rb") as f: - for block in read_chunks(f, size=blocksize): - length += len(block) - h.update(block) - return h, length - - -def pairwise(iterable: Iterable[Any]) -> Iterator[Tuple[Any, Any]]: - """ - Return paired elements. - - For example: - s -> (s0, s1), (s2, s3), (s4, s5), ... - """ - iterable = iter(iterable) - return zip_longest(iterable, iterable) - - -def partition( - pred: Callable[[T], bool], iterable: Iterable[T] -) -> Tuple[Iterable[T], Iterable[T]]: - """ - Use a predicate to partition entries into false entries and true entries, - like - - partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 - """ - t1, t2 = tee(iterable) - return filterfalse(pred, t1), filter(pred, t2) - - -class ConfiguredBuildBackendHookCaller(BuildBackendHookCaller): - def __init__( - self, - config_holder: Any, - source_dir: str, - build_backend: str, - backend_path: Optional[str] = None, - runner: Optional[Callable[..., None]] = None, - python_executable: Optional[str] = None, - ): - super().__init__( - source_dir, build_backend, backend_path, runner, python_executable - ) - self.config_holder = config_holder - - def build_wheel( - self, - wheel_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - metadata_directory: Optional[str] = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_wheel( - wheel_directory, config_settings=cs, metadata_directory=metadata_directory - ) - - def build_sdist( - self, - sdist_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_sdist(sdist_directory, config_settings=cs) - - def build_editable( - self, - wheel_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - metadata_directory: Optional[str] = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_editable( - wheel_directory, config_settings=cs, metadata_directory=metadata_directory - ) - - def get_requires_for_build_wheel( - self, config_settings: Optional[Mapping[str, Any]] = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_wheel(config_settings=cs) - - def get_requires_for_build_sdist( - self, config_settings: Optional[Mapping[str, Any]] = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_sdist(config_settings=cs) - - def get_requires_for_build_editable( - self, config_settings: Optional[Mapping[str, Any]] = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_editable(config_settings=cs) - - def prepare_metadata_for_build_wheel( - self, - metadata_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - _allow_fallback: bool = True, - ) -> str: - cs = self.config_holder.config_settings - return super().prepare_metadata_for_build_wheel( - metadata_directory=metadata_directory, - config_settings=cs, - _allow_fallback=_allow_fallback, - ) - - def prepare_metadata_for_build_editable( - self, - metadata_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - _allow_fallback: bool = True, - ) -> Optional[str]: - cs = self.config_holder.config_settings - return super().prepare_metadata_for_build_editable( - metadata_directory=metadata_directory, - config_settings=cs, - _allow_fallback=_allow_fallback, - ) - - -def warn_if_run_as_root() -> None: - """Output a warning for sudo users on Unix. - - In a virtual environment, sudo pip still writes to virtualenv. - On Windows, users may run pip as Administrator without issues. - This warning only applies to Unix root users outside of virtualenv. - """ - if running_under_virtualenv(): - return - if not hasattr(os, "getuid"): - return - # On Windows, there are no "system managed" Python packages. Installing as - # Administrator via pip is the correct way of updating system environments. - # - # We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform - # checks: https://mypy.readthedocs.io/en/stable/common_issues.html - if sys.platform == "win32" or sys.platform == "cygwin": - return - - if os.getuid() != 0: - return - - logger.warning( - "Running pip as the 'root' user can result in broken permissions and " - "conflicting behaviour with the system package manager, possibly " - "rendering your system unusable. " - "It is recommended to use a virtual environment instead: " - "https://pip.pypa.io/warnings/venv. " - "Use the --root-user-action option if you know what you are doing and " - "want to suppress this warning." - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py deleted file mode 100644 index caad70f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py +++ /dev/null @@ -1,58 +0,0 @@ -import functools -import logging -import re -from typing import NewType, Optional, Tuple, cast - -from pip._vendor.packaging import specifiers, version -from pip._vendor.packaging.requirements import Requirement - -NormalizedExtra = NewType("NormalizedExtra", str) - -logger = logging.getLogger(__name__) - - -@functools.lru_cache(maxsize=32) -def check_requires_python( - requires_python: Optional[str], version_info: Tuple[int, ...] -) -> bool: - """ - Check if the given Python version matches a "Requires-Python" specifier. - - :param version_info: A 3-tuple of ints representing a Python - major-minor-micro version to check (e.g. `sys.version_info[:3]`). - - :return: `True` if the given Python version satisfies the requirement. - Otherwise, return `False`. - - :raises InvalidSpecifier: If `requires_python` has an invalid format. - """ - if requires_python is None: - # The package provides no information - return True - requires_python_specifier = specifiers.SpecifierSet(requires_python) - - python_version = version.parse(".".join(map(str, version_info))) - return python_version in requires_python_specifier - - -@functools.lru_cache(maxsize=2048) -def get_requirement(req_string: str) -> Requirement: - """Construct a packaging.Requirement object with caching""" - # Parsing requirement strings is expensive, and is also expected to happen - # with a low diversity of different arguments (at least relative the number - # constructed). This method adds a cache to requirement object creation to - # minimize repeated parsing of the same string to construct equivalent - # Requirement objects. - return Requirement(req_string) - - -def safe_extra(extra: str) -> NormalizedExtra: - """Convert an arbitrary string to a standard 'extra' name - - Any runs of non-alphanumeric characters are replaced with a single '_', - and the result is always lowercased. - - This function is duplicated from ``pkg_resources``. Note that this is not - the same to either ``canonicalize_name`` or ``_egg_link_name``. - """ - return cast(NormalizedExtra, re.sub("[^A-Za-z0-9.-]+", "_", extra).lower()) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/retry.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/retry.py deleted file mode 100644 index abfe072..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/retry.py +++ /dev/null @@ -1,42 +0,0 @@ -import functools -from time import perf_counter, sleep -from typing import Callable, TypeVar - -from pip._vendor.typing_extensions import ParamSpec - -T = TypeVar("T") -P = ParamSpec("P") - - -def retry( - wait: float, stop_after_delay: float -) -> Callable[[Callable[P, T]], Callable[P, T]]: - """Decorator to automatically retry a function on error. - - If the function raises, the function is recalled with the same arguments - until it returns or the time limit is reached. When the time limit is - surpassed, the last exception raised is reraised. - - :param wait: The time to wait after an error before retrying, in seconds. - :param stop_after_delay: The time limit after which retries will cease, - in seconds. - """ - - def wrapper(func: Callable[P, T]) -> Callable[P, T]: - - @functools.wraps(func) - def retry_wrapped(*args: P.args, **kwargs: P.kwargs) -> T: - # The performance counter is monotonic on all platforms we care - # about and has much better resolution than time.monotonic(). - start_time = perf_counter() - while True: - try: - return func(*args, **kwargs) - except Exception: - if perf_counter() - start_time > stop_after_delay: - raise - sleep(wait) - - return retry_wrapped - - return wrapper diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py deleted file mode 100644 index 96d1b24..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py +++ /dev/null @@ -1,146 +0,0 @@ -import sys -import textwrap -from typing import List, Optional, Sequence - -# Shim to wrap setup.py invocation with setuptools -# Note that __file__ is handled via two {!r} *and* %r, to ensure that paths on -# Windows are correctly handled (it should be "C:\\Users" not "C:\Users"). -_SETUPTOOLS_SHIM = textwrap.dedent( - """ - exec(compile(''' - # This is -- a caller that pip uses to run setup.py - # - # - It imports setuptools before invoking setup.py, to enable projects that directly - # import from `distutils.core` to work with newer packaging standards. - # - It provides a clear error message when setuptools is not installed. - # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so - # setuptools doesn't think the script is `-c`. This avoids the following warning: - # manifest_maker: standard file '-c' not found". - # - It generates a shim setup.py, for handling setup.cfg-only projects. - import os, sys, tokenize - - try: - import setuptools - except ImportError as error: - print( - "ERROR: Can not execute `setup.py` since setuptools is not available in " - "the build environment.", - file=sys.stderr, - ) - sys.exit(1) - - __file__ = %r - sys.argv[0] = __file__ - - if os.path.exists(__file__): - filename = __file__ - with tokenize.open(__file__) as f: - setup_py_code = f.read() - else: - filename = "" - setup_py_code = "from setuptools import setup; setup()" - - exec(compile(setup_py_code, filename, "exec")) - ''' % ({!r},), "", "exec")) - """ -).rstrip() - - -def make_setuptools_shim_args( - setup_py_path: str, - global_options: Optional[Sequence[str]] = None, - no_user_config: bool = False, - unbuffered_output: bool = False, -) -> List[str]: - """ - Get setuptools command arguments with shim wrapped setup file invocation. - - :param setup_py_path: The path to setup.py to be wrapped. - :param global_options: Additional global options. - :param no_user_config: If True, disables personal user configuration. - :param unbuffered_output: If True, adds the unbuffered switch to the - argument list. - """ - args = [sys.executable] - if unbuffered_output: - args += ["-u"] - args += ["-c", _SETUPTOOLS_SHIM.format(setup_py_path)] - if global_options: - args += global_options - if no_user_config: - args += ["--no-user-cfg"] - return args - - -def make_setuptools_bdist_wheel_args( - setup_py_path: str, - global_options: Sequence[str], - build_options: Sequence[str], - destination_dir: str, -) -> List[str]: - # NOTE: Eventually, we'd want to also -S to the flags here, when we're - # isolating. Currently, it breaks Python in virtualenvs, because it - # relies on site.py to find parts of the standard library outside the - # virtualenv. - args = make_setuptools_shim_args( - setup_py_path, global_options=global_options, unbuffered_output=True - ) - args += ["bdist_wheel", "-d", destination_dir] - args += build_options - return args - - -def make_setuptools_clean_args( - setup_py_path: str, - global_options: Sequence[str], -) -> List[str]: - args = make_setuptools_shim_args( - setup_py_path, global_options=global_options, unbuffered_output=True - ) - args += ["clean", "--all"] - return args - - -def make_setuptools_develop_args( - setup_py_path: str, - *, - global_options: Sequence[str], - no_user_config: bool, - prefix: Optional[str], - home: Optional[str], - use_user_site: bool, -) -> List[str]: - assert not (use_user_site and prefix) - - args = make_setuptools_shim_args( - setup_py_path, - global_options=global_options, - no_user_config=no_user_config, - ) - - args += ["develop", "--no-deps"] - - if prefix: - args += ["--prefix", prefix] - if home is not None: - args += ["--install-dir", home] - - if use_user_site: - args += ["--user", "--prefix="] - - return args - - -def make_setuptools_egg_info_args( - setup_py_path: str, - egg_info_dir: Optional[str], - no_user_config: bool, -) -> List[str]: - args = make_setuptools_shim_args(setup_py_path, no_user_config=no_user_config) - - args += ["egg_info"] - - if egg_info_dir: - args += ["--egg-base", egg_info_dir] - - return args diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py deleted file mode 100644 index cb2e23f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py +++ /dev/null @@ -1,245 +0,0 @@ -import logging -import os -import shlex -import subprocess -from typing import Any, Callable, Iterable, List, Literal, Mapping, Optional, Union - -from pip._vendor.rich.markup import escape - -from pip._internal.cli.spinners import SpinnerInterface, open_spinner -from pip._internal.exceptions import InstallationSubprocessError -from pip._internal.utils.logging import VERBOSE, subprocess_logger -from pip._internal.utils.misc import HiddenText - -CommandArgs = List[Union[str, HiddenText]] - - -def make_command(*args: Union[str, HiddenText, CommandArgs]) -> CommandArgs: - """ - Create a CommandArgs object. - """ - command_args: CommandArgs = [] - for arg in args: - # Check for list instead of CommandArgs since CommandArgs is - # only known during type-checking. - if isinstance(arg, list): - command_args.extend(arg) - else: - # Otherwise, arg is str or HiddenText. - command_args.append(arg) - - return command_args - - -def format_command_args(args: Union[List[str], CommandArgs]) -> str: - """ - Format command arguments for display. - """ - # For HiddenText arguments, display the redacted form by calling str(). - # Also, we don't apply str() to arguments that aren't HiddenText since - # this can trigger a UnicodeDecodeError in Python 2 if the argument - # has type unicode and includes a non-ascii character. (The type - # checker doesn't ensure the annotations are correct in all cases.) - return " ".join( - shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg) - for arg in args - ) - - -def reveal_command_args(args: Union[List[str], CommandArgs]) -> List[str]: - """ - Return the arguments in their raw, unredacted form. - """ - return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args] - - -def call_subprocess( - cmd: Union[List[str], CommandArgs], - show_stdout: bool = False, - cwd: Optional[str] = None, - on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", - extra_ok_returncodes: Optional[Iterable[int]] = None, - extra_environ: Optional[Mapping[str, Any]] = None, - unset_environ: Optional[Iterable[str]] = None, - spinner: Optional[SpinnerInterface] = None, - log_failed_cmd: Optional[bool] = True, - stdout_only: Optional[bool] = False, - *, - command_desc: str, -) -> str: - """ - Args: - show_stdout: if true, use INFO to log the subprocess's stderr and - stdout streams. Otherwise, use DEBUG. Defaults to False. - extra_ok_returncodes: an iterable of integer return codes that are - acceptable, in addition to 0. Defaults to None, which means []. - unset_environ: an iterable of environment variable names to unset - prior to calling subprocess.Popen(). - log_failed_cmd: if false, failed commands are not logged, only raised. - stdout_only: if true, return only stdout, else return both. When true, - logging of both stdout and stderr occurs when the subprocess has - terminated, else logging occurs as subprocess output is produced. - """ - if extra_ok_returncodes is None: - extra_ok_returncodes = [] - if unset_environ is None: - unset_environ = [] - # Most places in pip use show_stdout=False. What this means is-- - # - # - We connect the child's output (combined stderr and stdout) to a - # single pipe, which we read. - # - We log this output to stderr at DEBUG level as it is received. - # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't - # requested), then we show a spinner so the user can still see the - # subprocess is in progress. - # - If the subprocess exits with an error, we log the output to stderr - # at ERROR level if it hasn't already been displayed to the console - # (e.g. if --verbose logging wasn't enabled). This way we don't log - # the output to the console twice. - # - # If show_stdout=True, then the above is still done, but with DEBUG - # replaced by INFO. - if show_stdout: - # Then log the subprocess output at INFO level. - log_subprocess: Callable[..., None] = subprocess_logger.info - used_level = logging.INFO - else: - # Then log the subprocess output using VERBOSE. This also ensures - # it will be logged to the log file (aka user_log), if enabled. - log_subprocess = subprocess_logger.verbose - used_level = VERBOSE - - # Whether the subprocess will be visible in the console. - showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level - - # Only use the spinner if we're not showing the subprocess output - # and we have a spinner. - use_spinner = not showing_subprocess and spinner is not None - - log_subprocess("Running command %s", command_desc) - env = os.environ.copy() - if extra_environ: - env.update(extra_environ) - for name in unset_environ: - env.pop(name, None) - try: - proc = subprocess.Popen( - # Convert HiddenText objects to the underlying str. - reveal_command_args(cmd), - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE, - cwd=cwd, - env=env, - errors="backslashreplace", - ) - except Exception as exc: - if log_failed_cmd: - subprocess_logger.critical( - "Error %s while executing command %s", - exc, - command_desc, - ) - raise - all_output = [] - if not stdout_only: - assert proc.stdout - assert proc.stdin - proc.stdin.close() - # In this mode, stdout and stderr are in the same pipe. - while True: - line: str = proc.stdout.readline() - if not line: - break - line = line.rstrip() - all_output.append(line + "\n") - - # Show the line immediately. - log_subprocess(line) - # Update the spinner. - if use_spinner: - assert spinner - spinner.spin() - try: - proc.wait() - finally: - if proc.stdout: - proc.stdout.close() - output = "".join(all_output) - else: - # In this mode, stdout and stderr are in different pipes. - # We must use communicate() which is the only safe way to read both. - out, err = proc.communicate() - # log line by line to preserve pip log indenting - for out_line in out.splitlines(): - log_subprocess(out_line) - all_output.append(out) - for err_line in err.splitlines(): - log_subprocess(err_line) - all_output.append(err) - output = out - - proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes - if use_spinner: - assert spinner - if proc_had_error: - spinner.finish("error") - else: - spinner.finish("done") - if proc_had_error: - if on_returncode == "raise": - error = InstallationSubprocessError( - command_description=command_desc, - exit_code=proc.returncode, - output_lines=all_output if not showing_subprocess else None, - ) - if log_failed_cmd: - subprocess_logger.error("%s", error, extra={"rich": True}) - subprocess_logger.verbose( - "[bold magenta]full command[/]: [blue]%s[/]", - escape(format_command_args(cmd)), - extra={"markup": True}, - ) - subprocess_logger.verbose( - "[bold magenta]cwd[/]: %s", - escape(cwd or "[inherit]"), - extra={"markup": True}, - ) - - raise error - elif on_returncode == "warn": - subprocess_logger.warning( - 'Command "%s" had error code %s in %s', - command_desc, - proc.returncode, - cwd, - ) - elif on_returncode == "ignore": - pass - else: - raise ValueError(f"Invalid value: on_returncode={on_returncode!r}") - return output - - -def runner_with_spinner_message(message: str) -> Callable[..., None]: - """Provide a subprocess_runner that shows a spinner message. - - Intended for use with for BuildBackendHookCaller. Thus, the runner has - an API that matches what's expected by BuildBackendHookCaller.subprocess_runner. - """ - - def runner( - cmd: List[str], - cwd: Optional[str] = None, - extra_environ: Optional[Mapping[str, Any]] = None, - ) -> None: - with open_spinner(message) as spinner: - call_subprocess( - cmd, - command_desc=message, - cwd=cwd, - extra_environ=extra_environ, - spinner=spinner, - ) - - return runner diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py deleted file mode 100644 index 06668e8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py +++ /dev/null @@ -1,296 +0,0 @@ -import errno -import itertools -import logging -import os.path -import tempfile -import traceback -from contextlib import ExitStack, contextmanager -from pathlib import Path -from typing import ( - Any, - Callable, - Dict, - Generator, - List, - Optional, - TypeVar, - Union, -) - -from pip._internal.utils.misc import enum, rmtree - -logger = logging.getLogger(__name__) - -_T = TypeVar("_T", bound="TempDirectory") - - -# Kinds of temporary directories. Only needed for ones that are -# globally-managed. -tempdir_kinds = enum( - BUILD_ENV="build-env", - EPHEM_WHEEL_CACHE="ephem-wheel-cache", - REQ_BUILD="req-build", -) - - -_tempdir_manager: Optional[ExitStack] = None - - -@contextmanager -def global_tempdir_manager() -> Generator[None, None, None]: - global _tempdir_manager - with ExitStack() as stack: - old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack - try: - yield - finally: - _tempdir_manager = old_tempdir_manager - - -class TempDirectoryTypeRegistry: - """Manages temp directory behavior""" - - def __init__(self) -> None: - self._should_delete: Dict[str, bool] = {} - - def set_delete(self, kind: str, value: bool) -> None: - """Indicate whether a TempDirectory of the given kind should be - auto-deleted. - """ - self._should_delete[kind] = value - - def get_delete(self, kind: str) -> bool: - """Get configured auto-delete flag for a given TempDirectory type, - default True. - """ - return self._should_delete.get(kind, True) - - -_tempdir_registry: Optional[TempDirectoryTypeRegistry] = None - - -@contextmanager -def tempdir_registry() -> Generator[TempDirectoryTypeRegistry, None, None]: - """Provides a scoped global tempdir registry that can be used to dictate - whether directories should be deleted. - """ - global _tempdir_registry - old_tempdir_registry = _tempdir_registry - _tempdir_registry = TempDirectoryTypeRegistry() - try: - yield _tempdir_registry - finally: - _tempdir_registry = old_tempdir_registry - - -class _Default: - pass - - -_default = _Default() - - -class TempDirectory: - """Helper class that owns and cleans up a temporary directory. - - This class can be used as a context manager or as an OO representation of a - temporary directory. - - Attributes: - path - Location to the created temporary directory - delete - Whether the directory should be deleted when exiting - (when used as a contextmanager) - - Methods: - cleanup() - Deletes the temporary directory - - When used as a context manager, if the delete attribute is True, on - exiting the context the temporary directory is deleted. - """ - - def __init__( - self, - path: Optional[str] = None, - delete: Union[bool, None, _Default] = _default, - kind: str = "temp", - globally_managed: bool = False, - ignore_cleanup_errors: bool = True, - ): - super().__init__() - - if delete is _default: - if path is not None: - # If we were given an explicit directory, resolve delete option - # now. - delete = False - else: - # Otherwise, we wait until cleanup and see what - # tempdir_registry says. - delete = None - - # The only time we specify path is in for editables where it - # is the value of the --src option. - if path is None: - path = self._create(kind) - - self._path = path - self._deleted = False - self.delete = delete - self.kind = kind - self.ignore_cleanup_errors = ignore_cleanup_errors - - if globally_managed: - assert _tempdir_manager is not None - _tempdir_manager.enter_context(self) - - @property - def path(self) -> str: - assert not self._deleted, f"Attempted to access deleted path: {self._path}" - return self._path - - def __repr__(self) -> str: - return f"<{self.__class__.__name__} {self.path!r}>" - - def __enter__(self: _T) -> _T: - return self - - def __exit__(self, exc: Any, value: Any, tb: Any) -> None: - if self.delete is not None: - delete = self.delete - elif _tempdir_registry: - delete = _tempdir_registry.get_delete(self.kind) - else: - delete = True - - if delete: - self.cleanup() - - def _create(self, kind: str) -> str: - """Create a temporary directory and store its path in self.path""" - # We realpath here because some systems have their default tmpdir - # symlinked to another directory. This tends to confuse build - # scripts, so we canonicalize the path by traversing potential - # symlinks here. - path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) - logger.debug("Created temporary directory: %s", path) - return path - - def cleanup(self) -> None: - """Remove the temporary directory created and reset state""" - self._deleted = True - if not os.path.exists(self._path): - return - - errors: List[BaseException] = [] - - def onerror( - func: Callable[..., Any], - path: Path, - exc_val: BaseException, - ) -> None: - """Log a warning for a `rmtree` error and continue""" - formatted_exc = "\n".join( - traceback.format_exception_only(type(exc_val), exc_val) - ) - formatted_exc = formatted_exc.rstrip() # remove trailing new line - if func in (os.unlink, os.remove, os.rmdir): - logger.debug( - "Failed to remove a temporary file '%s' due to %s.\n", - path, - formatted_exc, - ) - else: - logger.debug("%s failed with %s.", func.__qualname__, formatted_exc) - errors.append(exc_val) - - if self.ignore_cleanup_errors: - try: - # first try with @retry; retrying to handle ephemeral errors - rmtree(self._path, ignore_errors=False) - except OSError: - # last pass ignore/log all errors - rmtree(self._path, onexc=onerror) - if errors: - logger.warning( - "Failed to remove contents in a temporary directory '%s'.\n" - "You can safely remove it manually.", - self._path, - ) - else: - rmtree(self._path) - - -class AdjacentTempDirectory(TempDirectory): - """Helper class that creates a temporary directory adjacent to a real one. - - Attributes: - original - The original directory to create a temp directory for. - path - After calling create() or entering, contains the full - path to the temporary directory. - delete - Whether the directory should be deleted when exiting - (when used as a contextmanager) - - """ - - # The characters that may be used to name the temp directory - # We always prepend a ~ and then rotate through these until - # a usable name is found. - # pkg_resources raises a different error for .dist-info folder - # with leading '-' and invalid metadata - LEADING_CHARS = "-~.=%0123456789" - - def __init__(self, original: str, delete: Optional[bool] = None) -> None: - self.original = original.rstrip("/\\") - super().__init__(delete=delete) - - @classmethod - def _generate_names(cls, name: str) -> Generator[str, None, None]: - """Generates a series of temporary names. - - The algorithm replaces the leading characters in the name - with ones that are valid filesystem characters, but are not - valid package names (for both Python and pip definitions of - package). - """ - for i in range(1, len(name)): - for candidate in itertools.combinations_with_replacement( - cls.LEADING_CHARS, i - 1 - ): - new_name = "~" + "".join(candidate) + name[i:] - if new_name != name: - yield new_name - - # If we make it this far, we will have to make a longer name - for i in range(len(cls.LEADING_CHARS)): - for candidate in itertools.combinations_with_replacement( - cls.LEADING_CHARS, i - ): - new_name = "~" + "".join(candidate) + name - if new_name != name: - yield new_name - - def _create(self, kind: str) -> str: - root, name = os.path.split(self.original) - for candidate in self._generate_names(name): - path = os.path.join(root, candidate) - try: - os.mkdir(path) - except OSError as ex: - # Continue if the name exists already - if ex.errno != errno.EEXIST: - raise - else: - path = os.path.realpath(path) - break - else: - # Final fallback on the default behavior. - path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) - - logger.debug("Created temporary directory: %s", path) - return path diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py deleted file mode 100644 index 87a6d19..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py +++ /dev/null @@ -1,337 +0,0 @@ -"""Utilities related archives. -""" - -import logging -import os -import shutil -import stat -import sys -import tarfile -import zipfile -from typing import Iterable, List, Optional -from zipfile import ZipInfo - -from pip._internal.exceptions import InstallationError -from pip._internal.utils.filetypes import ( - BZ2_EXTENSIONS, - TAR_EXTENSIONS, - XZ_EXTENSIONS, - ZIP_EXTENSIONS, -) -from pip._internal.utils.misc import ensure_dir - -logger = logging.getLogger(__name__) - - -SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS - -try: - import bz2 # noqa - - SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS -except ImportError: - logger.debug("bz2 module is not available") - -try: - # Only for Python 3.3+ - import lzma # noqa - - SUPPORTED_EXTENSIONS += XZ_EXTENSIONS -except ImportError: - logger.debug("lzma module is not available") - - -def current_umask() -> int: - """Get the current umask which involves having to set it temporarily.""" - mask = os.umask(0) - os.umask(mask) - return mask - - -def split_leading_dir(path: str) -> List[str]: - path = path.lstrip("/").lstrip("\\") - if "/" in path and ( - ("\\" in path and path.find("/") < path.find("\\")) or "\\" not in path - ): - return path.split("/", 1) - elif "\\" in path: - return path.split("\\", 1) - else: - return [path, ""] - - -def has_leading_dir(paths: Iterable[str]) -> bool: - """Returns true if all the paths have the same leading path name - (i.e., everything is in one subdirectory in an archive)""" - common_prefix = None - for path in paths: - prefix, rest = split_leading_dir(path) - if not prefix: - return False - elif common_prefix is None: - common_prefix = prefix - elif prefix != common_prefix: - return False - return True - - -def is_within_directory(directory: str, target: str) -> bool: - """ - Return true if the absolute path of target is within the directory - """ - abs_directory = os.path.abspath(directory) - abs_target = os.path.abspath(target) - - prefix = os.path.commonprefix([abs_directory, abs_target]) - return prefix == abs_directory - - -def _get_default_mode_plus_executable() -> int: - return 0o777 & ~current_umask() | 0o111 - - -def set_extracted_file_to_default_mode_plus_executable(path: str) -> None: - """ - Make file present at path have execute for user/group/world - (chmod +x) is no-op on windows per python docs - """ - os.chmod(path, _get_default_mode_plus_executable()) - - -def zip_item_is_executable(info: ZipInfo) -> bool: - mode = info.external_attr >> 16 - # if mode and regular file and any execute permissions for - # user/group/world? - return bool(mode and stat.S_ISREG(mode) and mode & 0o111) - - -def unzip_file(filename: str, location: str, flatten: bool = True) -> None: - """ - Unzip the file (with path `filename`) to the destination `location`. All - files are written based on system defaults and umask (i.e. permissions are - not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied after being - written. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - zipfp = open(filename, "rb") - try: - zip = zipfile.ZipFile(zipfp, allowZip64=True) - leading = has_leading_dir(zip.namelist()) and flatten - for info in zip.infolist(): - name = info.filename - fn = name - if leading: - fn = split_leading_dir(name)[1] - fn = os.path.join(location, fn) - dir = os.path.dirname(fn) - if not is_within_directory(location, fn): - message = ( - "The zip file ({}) has a file ({}) trying to install " - "outside target directory ({})" - ) - raise InstallationError(message.format(filename, fn, location)) - if fn.endswith("/") or fn.endswith("\\"): - # A directory - ensure_dir(fn) - else: - ensure_dir(dir) - # Don't use read() to avoid allocating an arbitrarily large - # chunk of memory for the file's content - fp = zip.open(name) - try: - with open(fn, "wb") as destfp: - shutil.copyfileobj(fp, destfp) - finally: - fp.close() - if zip_item_is_executable(info): - set_extracted_file_to_default_mode_plus_executable(fn) - finally: - zipfp.close() - - -def untar_file(filename: str, location: str) -> None: - """ - Untar the file (with path `filename`) to the destination `location`. - All files are written based on system defaults and umask (i.e. permissions - are not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied on top of the - default. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - if filename.lower().endswith(".gz") or filename.lower().endswith(".tgz"): - mode = "r:gz" - elif filename.lower().endswith(BZ2_EXTENSIONS): - mode = "r:bz2" - elif filename.lower().endswith(XZ_EXTENSIONS): - mode = "r:xz" - elif filename.lower().endswith(".tar"): - mode = "r" - else: - logger.warning( - "Cannot determine compression type for file %s", - filename, - ) - mode = "r:*" - - tar = tarfile.open(filename, mode, encoding="utf-8") # type: ignore - try: - leading = has_leading_dir([member.name for member in tar.getmembers()]) - - # PEP 706 added `tarfile.data_filter`, and made some other changes to - # Python's tarfile module (see below). The features were backported to - # security releases. - try: - data_filter = tarfile.data_filter - except AttributeError: - _untar_without_filter(filename, location, tar, leading) - else: - default_mode_plus_executable = _get_default_mode_plus_executable() - - if leading: - # Strip the leading directory from all files in the archive, - # including hardlink targets (which are relative to the - # unpack location). - for member in tar.getmembers(): - name_lead, name_rest = split_leading_dir(member.name) - member.name = name_rest - if member.islnk(): - lnk_lead, lnk_rest = split_leading_dir(member.linkname) - if lnk_lead == name_lead: - member.linkname = lnk_rest - - def pip_filter(member: tarfile.TarInfo, path: str) -> tarfile.TarInfo: - orig_mode = member.mode - try: - try: - member = data_filter(member, location) - except tarfile.LinkOutsideDestinationError: - if sys.version_info[:3] in { - (3, 8, 17), - (3, 9, 17), - (3, 10, 12), - (3, 11, 4), - }: - # The tarfile filter in specific Python versions - # raises LinkOutsideDestinationError on valid input - # (https://github.com/python/cpython/issues/107845) - # Ignore the error there, but do use the - # more lax `tar_filter` - member = tarfile.tar_filter(member, location) - else: - raise - except tarfile.TarError as exc: - message = "Invalid member in the tar file {}: {}" - # Filter error messages mention the member name. - # No need to add it here. - raise InstallationError( - message.format( - filename, - exc, - ) - ) - if member.isfile() and orig_mode & 0o111: - member.mode = default_mode_plus_executable - else: - # See PEP 706 note above. - # The PEP changed this from `int` to `Optional[int]`, - # where None means "use the default". Mypy doesn't - # know this yet. - member.mode = None # type: ignore [assignment] - return member - - tar.extractall(location, filter=pip_filter) - - finally: - tar.close() - - -def _untar_without_filter( - filename: str, - location: str, - tar: tarfile.TarFile, - leading: bool, -) -> None: - """Fallback for Python without tarfile.data_filter""" - for member in tar.getmembers(): - fn = member.name - if leading: - fn = split_leading_dir(fn)[1] - path = os.path.join(location, fn) - if not is_within_directory(location, path): - message = ( - "The tar file ({}) has a file ({}) trying to install " - "outside target directory ({})" - ) - raise InstallationError(message.format(filename, path, location)) - if member.isdir(): - ensure_dir(path) - elif member.issym(): - try: - tar._extract_member(member, path) - except Exception as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - "In the tar file %s the member %s is invalid: %s", - filename, - member.name, - exc, - ) - continue - else: - try: - fp = tar.extractfile(member) - except (KeyError, AttributeError) as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - "In the tar file %s the member %s is invalid: %s", - filename, - member.name, - exc, - ) - continue - ensure_dir(os.path.dirname(path)) - assert fp is not None - with open(path, "wb") as destfp: - shutil.copyfileobj(fp, destfp) - fp.close() - # Update the timestamp (useful for cython compiled files) - tar.utime(member, path) - # member have any execute permissions for user/group/world? - if member.mode & 0o111: - set_extracted_file_to_default_mode_plus_executable(path) - - -def unpack_file( - filename: str, - location: str, - content_type: Optional[str] = None, -) -> None: - filename = os.path.realpath(filename) - if ( - content_type == "application/zip" - or filename.lower().endswith(ZIP_EXTENSIONS) - or zipfile.is_zipfile(filename) - ): - unzip_file(filename, location, flatten=not filename.endswith(".whl")) - elif ( - content_type == "application/x-gzip" - or tarfile.is_tarfile(filename) - or filename.lower().endswith(TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS) - ): - untar_file(filename, location) - else: - # FIXME: handle? - # FIXME: magic signatures? - logger.critical( - "Cannot unpack file %s (downloaded from %s, content-type: %s); " - "cannot detect archive format", - filename, - location, - content_type, - ) - raise InstallationError(f"Cannot determine archive format of {location}") diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/urls.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/urls.py deleted file mode 100644 index 9f34f88..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/urls.py +++ /dev/null @@ -1,55 +0,0 @@ -import os -import string -import urllib.parse -import urllib.request - -from .compat import WINDOWS - - -def path_to_url(path: str) -> str: - """ - Convert a path to a file: URL. The path will be made absolute and have - quoted path parts. - """ - path = os.path.normpath(os.path.abspath(path)) - url = urllib.parse.urljoin("file:", urllib.request.pathname2url(path)) - return url - - -def url_to_path(url: str) -> str: - """ - Convert a file: URL to a path. - """ - assert url.startswith( - "file:" - ), f"You can only turn file: urls into filenames (not {url!r})" - - _, netloc, path, _, _ = urllib.parse.urlsplit(url) - - if not netloc or netloc == "localhost": - # According to RFC 8089, same as empty authority. - netloc = "" - elif WINDOWS: - # If we have a UNC path, prepend UNC share notation. - netloc = "\\\\" + netloc - else: - raise ValueError( - f"non-local file URIs are not supported on this platform: {url!r}" - ) - - path = urllib.request.url2pathname(netloc + path) - - # On Windows, urlsplit parses the path as something like "/C:/Users/foo". - # This creates issues for path-related functions like io.open(), so we try - # to detect and strip the leading slash. - if ( - WINDOWS - and not netloc # Not UNC. - and len(path) >= 3 - and path[0] == "/" # Leading slash to strip. - and path[1] in string.ascii_letters # Drive letter. - and path[2:4] in (":", ":/") # Colon + end of string, or colon + absolute path. - ): - path = path[1:] - - return path diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py deleted file mode 100644 index 882e36f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py +++ /dev/null @@ -1,104 +0,0 @@ -import logging -import os -import re -import site -import sys -from typing import List, Optional - -logger = logging.getLogger(__name__) -_INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( - r"include-system-site-packages\s*=\s*(?Ptrue|false)" -) - - -def _running_under_venv() -> bool: - """Checks if sys.base_prefix and sys.prefix match. - - This handles PEP 405 compliant virtual environments. - """ - return sys.prefix != getattr(sys, "base_prefix", sys.prefix) - - -def _running_under_legacy_virtualenv() -> bool: - """Checks if sys.real_prefix is set. - - This handles virtual environments created with pypa's virtualenv. - """ - # pypa/virtualenv case - return hasattr(sys, "real_prefix") - - -def running_under_virtualenv() -> bool: - """True if we're running inside a virtual environment, False otherwise.""" - return _running_under_venv() or _running_under_legacy_virtualenv() - - -def _get_pyvenv_cfg_lines() -> Optional[List[str]]: - """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines - - Returns None, if it could not read/access the file. - """ - pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg") - try: - # Although PEP 405 does not specify, the built-in venv module always - # writes with UTF-8. (pypa/pip#8717) - with open(pyvenv_cfg_file, encoding="utf-8") as f: - return f.read().splitlines() # avoids trailing newlines - except OSError: - return None - - -def _no_global_under_venv() -> bool: - """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion - - PEP 405 specifies that when system site-packages are not supposed to be - visible from a virtual environment, `pyvenv.cfg` must contain the following - line: - - include-system-site-packages = false - - Additionally, log a warning if accessing the file fails. - """ - cfg_lines = _get_pyvenv_cfg_lines() - if cfg_lines is None: - # We're not in a "sane" venv, so assume there is no system - # site-packages access (since that's PEP 405's default state). - logger.warning( - "Could not access 'pyvenv.cfg' despite a virtual environment " - "being active. Assuming global site-packages is not accessible " - "in this environment." - ) - return True - - for line in cfg_lines: - match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) - if match is not None and match.group("value") == "false": - return True - return False - - -def _no_global_under_legacy_virtualenv() -> bool: - """Check if "no-global-site-packages.txt" exists beside site.py - - This mirrors logic in pypa/virtualenv for determining whether system - site-packages are visible in the virtual environment. - """ - site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) - no_global_site_packages_file = os.path.join( - site_mod_dir, - "no-global-site-packages.txt", - ) - return os.path.exists(no_global_site_packages_file) - - -def virtualenv_no_global() -> bool: - """Returns a boolean, whether running in venv with no system site-packages.""" - # PEP 405 compliance needs to be checked first since virtualenv >=20 would - # return True for both checks, but is only able to use the PEP 405 config. - if _running_under_venv(): - return _no_global_under_venv() - - if _running_under_legacy_virtualenv(): - return _no_global_under_legacy_virtualenv() - - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py b/myenv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py deleted file mode 100644 index f85aee8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Support functions for working with wheel files. -""" - -import logging -from email.message import Message -from email.parser import Parser -from typing import Tuple -from zipfile import BadZipFile, ZipFile - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import UnsupportedWheel - -VERSION_COMPATIBLE = (1, 0) - - -logger = logging.getLogger(__name__) - - -def parse_wheel(wheel_zip: ZipFile, name: str) -> Tuple[str, Message]: - """Extract information from the provided wheel, ensuring it meets basic - standards. - - Returns the name of the .dist-info directory and the parsed WHEEL metadata. - """ - try: - info_dir = wheel_dist_info_dir(wheel_zip, name) - metadata = wheel_metadata(wheel_zip, info_dir) - version = wheel_version(metadata) - except UnsupportedWheel as e: - raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") - - check_compatibility(version, name) - - return info_dir, metadata - - -def wheel_dist_info_dir(source: ZipFile, name: str) -> str: - """Returns the name of the contained .dist-info directory. - - Raises AssertionError or UnsupportedWheel if not found, >1 found, or - it doesn't match the provided name. - """ - # Zip file path separators must be / - subdirs = {p.split("/", 1)[0] for p in source.namelist()} - - info_dirs = [s for s in subdirs if s.endswith(".dist-info")] - - if not info_dirs: - raise UnsupportedWheel(".dist-info directory not found") - - if len(info_dirs) > 1: - raise UnsupportedWheel( - "multiple .dist-info directories found: {}".format(", ".join(info_dirs)) - ) - - info_dir = info_dirs[0] - - info_dir_name = canonicalize_name(info_dir) - canonical_name = canonicalize_name(name) - if not info_dir_name.startswith(canonical_name): - raise UnsupportedWheel( - f".dist-info directory {info_dir!r} does not start with {canonical_name!r}" - ) - - return info_dir - - -def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes: - try: - return source.read(path) - # BadZipFile for general corruption, KeyError for missing entry, - # and RuntimeError for password-protected files - except (BadZipFile, KeyError, RuntimeError) as e: - raise UnsupportedWheel(f"could not read {path!r} file: {e!r}") - - -def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message: - """Return the WHEEL metadata of an extracted wheel, if possible. - Otherwise, raise UnsupportedWheel. - """ - path = f"{dist_info_dir}/WHEEL" - # Zip file path separators must be / - wheel_contents = read_wheel_metadata_file(source, path) - - try: - wheel_text = wheel_contents.decode() - except UnicodeDecodeError as e: - raise UnsupportedWheel(f"error decoding {path!r}: {e!r}") - - # FeedParser (used by Parser) does not raise any exceptions. The returned - # message may have .defects populated, but for backwards-compatibility we - # currently ignore them. - return Parser().parsestr(wheel_text) - - -def wheel_version(wheel_data: Message) -> Tuple[int, ...]: - """Given WHEEL metadata, return the parsed Wheel-Version. - Otherwise, raise UnsupportedWheel. - """ - version_text = wheel_data["Wheel-Version"] - if version_text is None: - raise UnsupportedWheel("WHEEL is missing Wheel-Version") - - version = version_text.strip() - - try: - return tuple(map(int, version.split("."))) - except ValueError: - raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}") - - -def check_compatibility(version: Tuple[int, ...], name: str) -> None: - """Raises errors or warns if called with an incompatible Wheel-Version. - - pip should refuse to install a Wheel-Version that's a major series - ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when - installing a version only minor version ahead (e.g 1.2 > 1.1). - - version: a 2-tuple representing a Wheel-Version (Major, Minor) - name: name of wheel or package to raise exception about - - :raises UnsupportedWheel: when an incompatible Wheel-Version is given - """ - if version[0] > VERSION_COMPATIBLE[0]: - raise UnsupportedWheel( - "{}'s Wheel-Version ({}) is not compatible with this version " - "of pip".format(name, ".".join(map(str, version))) - ) - elif version > VERSION_COMPATIBLE: - logger.warning( - "Installing from a newer Wheel-Version (%s)", - ".".join(map(str, version)), - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py deleted file mode 100644 index b6beddb..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Expose a limited set of classes and functions so callers outside of -# the vcs package don't need to import deeper than `pip._internal.vcs`. -# (The test directory may still need to import from a vcs sub-package.) -# Import all vcs modules to register each VCS in the VcsSupport object. -import pip._internal.vcs.bazaar -import pip._internal.vcs.git -import pip._internal.vcs.mercurial -import pip._internal.vcs.subversion # noqa: F401 -from pip._internal.vcs.versioncontrol import ( # noqa: F401 - RemoteNotFoundError, - RemoteNotValidError, - is_url, - make_vcs_requirement_url, - vcs, -) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f61fc5f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc deleted file mode 100644 index 97e5039..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc deleted file mode 100644 index 6b0ccb8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc deleted file mode 100644 index c9c7205..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc deleted file mode 100644 index 175868c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc deleted file mode 100644 index d1fa76b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py deleted file mode 100644 index c754b7c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py +++ /dev/null @@ -1,112 +0,0 @@ -import logging -from typing import List, Optional, Tuple - -from pip._internal.utils.misc import HiddenText, display_path -from pip._internal.utils.subprocess import make_command -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RevOptions, - VersionControl, - vcs, -) - -logger = logging.getLogger(__name__) - - -class Bazaar(VersionControl): - name = "bzr" - dirname = ".bzr" - repo_name = "branch" - schemes = ( - "bzr+http", - "bzr+https", - "bzr+ssh", - "bzr+sftp", - "bzr+ftp", - "bzr+lp", - "bzr+file", - ) - - @staticmethod - def get_base_rev_args(rev: str) -> List[str]: - return ["-r", rev] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Checking out %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags = ["--quiet"] - elif verbosity == 1: - flags = [] - else: - flags = [f"-{'v'*verbosity}"] - cmd_args = make_command( - "checkout", "--lightweight", *flags, rev_options.to_args(), url, dest - ) - self.run_command(cmd_args) - - def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - self.run_command(make_command("switch", url), cwd=dest) - - def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - output = self.run_command( - make_command("info"), show_stdout=False, stdout_only=True, cwd=dest - ) - if output.startswith("Standalone "): - # Older versions of pip used to create standalone branches. - # Convert the standalone branch to a checkout by calling "bzr bind". - cmd_args = make_command("bind", "-q", url) - self.run_command(cmd_args, cwd=dest) - - cmd_args = make_command("update", "-q", rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: - # hotfix the URL scheme after removing bzr+ from bzr+ssh:// re-add it - url, rev, user_pass = super().get_url_rev_and_auth(url) - if url.startswith("ssh://"): - url = "bzr+" + url - return url, rev, user_pass - - @classmethod - def get_remote_url(cls, location: str) -> str: - urls = cls.run_command( - ["info"], show_stdout=False, stdout_only=True, cwd=location - ) - for line in urls.splitlines(): - line = line.strip() - for x in ("checkout of branch: ", "parent branch: "): - if line.startswith(x): - repo = line.split(x)[1] - if cls._is_local_repository(repo): - return path_to_url(repo) - return repo - raise RemoteNotFoundError - - @classmethod - def get_revision(cls, location: str) -> str: - revision = cls.run_command( - ["revno"], - show_stdout=False, - stdout_only=True, - cwd=location, - ) - return revision.splitlines()[-1] - - @classmethod - def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: - """Always assume the versions don't match""" - return False - - -vcs.register(Bazaar) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/git.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/git.py deleted file mode 100644 index 0425deb..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/git.py +++ /dev/null @@ -1,527 +0,0 @@ -import logging -import os.path -import pathlib -import re -import urllib.parse -import urllib.request -from dataclasses import replace -from typing import List, Optional, Tuple - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import HiddenText, display_path, hide_url -from pip._internal.utils.subprocess import make_command -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RemoteNotValidError, - RevOptions, - VersionControl, - find_path_to_project_root_from_repo_root, - vcs, -) - -urlsplit = urllib.parse.urlsplit -urlunsplit = urllib.parse.urlunsplit - - -logger = logging.getLogger(__name__) - - -GIT_VERSION_REGEX = re.compile( - r"^git version " # Prefix. - r"(\d+)" # Major. - r"\.(\d+)" # Dot, minor. - r"(?:\.(\d+))?" # Optional dot, patch. - r".*$" # Suffix, including any pre- and post-release segments we don't care about. -) - -HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$") - -# SCP (Secure copy protocol) shorthand. e.g. 'git@example.com:foo/bar.git' -SCP_REGEX = re.compile( - r"""^ - # Optional user, e.g. 'git@' - (\w+@)? - # Server, e.g. 'github.com'. - ([^/:]+): - # The server-side path. e.g. 'user/project.git'. Must start with an - # alphanumeric character so as not to be confusable with a Windows paths - # like 'C:/foo/bar' or 'C:\foo\bar'. - (\w[^:]*) - $""", - re.VERBOSE, -) - - -def looks_like_hash(sha: str) -> bool: - return bool(HASH_REGEX.match(sha)) - - -class Git(VersionControl): - name = "git" - dirname = ".git" - repo_name = "clone" - schemes = ( - "git+http", - "git+https", - "git+ssh", - "git+git", - "git+file", - ) - # Prevent the user's environment variables from interfering with pip: - # https://github.com/pypa/pip/issues/1130 - unset_environ = ("GIT_DIR", "GIT_WORK_TREE") - default_arg_rev = "HEAD" - - @staticmethod - def get_base_rev_args(rev: str) -> List[str]: - return [rev] - - def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: - _, rev_options = self.get_url_rev_options(hide_url(url)) - if not rev_options.rev: - return False - if not self.is_commit_id_equal(dest, rev_options.rev): - # the current commit is different from rev, - # which means rev was something else than a commit hash - return False - # return False in the rare case rev is both a commit hash - # and a tag or a branch; we don't want to cache in that case - # because that branch/tag could point to something else in the future - is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0]) - return not is_tag_or_branch - - def get_git_version(self) -> Tuple[int, ...]: - version = self.run_command( - ["version"], - command_desc="git version", - show_stdout=False, - stdout_only=True, - ) - match = GIT_VERSION_REGEX.match(version) - if not match: - logger.warning("Can't parse git version: %s", version) - return () - return (int(match.group(1)), int(match.group(2))) - - @classmethod - def get_current_branch(cls, location: str) -> Optional[str]: - """ - Return the current branch, or None if HEAD isn't at a branch - (e.g. detached HEAD). - """ - # git-symbolic-ref exits with empty stdout if "HEAD" is a detached - # HEAD rather than a symbolic ref. In addition, the -q causes the - # command to exit with status code 1 instead of 128 in this case - # and to suppress the message to stderr. - args = ["symbolic-ref", "-q", "HEAD"] - output = cls.run_command( - args, - extra_ok_returncodes=(1,), - show_stdout=False, - stdout_only=True, - cwd=location, - ) - ref = output.strip() - - if ref.startswith("refs/heads/"): - return ref[len("refs/heads/") :] - - return None - - @classmethod - def get_revision_sha(cls, dest: str, rev: str) -> Tuple[Optional[str], bool]: - """ - Return (sha_or_none, is_branch), where sha_or_none is a commit hash - if the revision names a remote branch or tag, otherwise None. - - Args: - dest: the repository directory. - rev: the revision name. - """ - # Pass rev to pre-filter the list. - output = cls.run_command( - ["show-ref", rev], - cwd=dest, - show_stdout=False, - stdout_only=True, - on_returncode="ignore", - ) - refs = {} - # NOTE: We do not use splitlines here since that would split on other - # unicode separators, which can be maliciously used to install a - # different revision. - for line in output.strip().split("\n"): - line = line.rstrip("\r") - if not line: - continue - try: - ref_sha, ref_name = line.split(" ", maxsplit=2) - except ValueError: - # Include the offending line to simplify troubleshooting if - # this error ever occurs. - raise ValueError(f"unexpected show-ref line: {line!r}") - - refs[ref_name] = ref_sha - - branch_ref = f"refs/remotes/origin/{rev}" - tag_ref = f"refs/tags/{rev}" - - sha = refs.get(branch_ref) - if sha is not None: - return (sha, True) - - sha = refs.get(tag_ref) - - return (sha, False) - - @classmethod - def _should_fetch(cls, dest: str, rev: str) -> bool: - """ - Return true if rev is a ref or is a commit that we don't have locally. - - Branches and tags are not considered in this method because they are - assumed to be always available locally (which is a normal outcome of - ``git clone`` and ``git fetch --tags``). - """ - if rev.startswith("refs/"): - # Always fetch remote refs. - return True - - if not looks_like_hash(rev): - # Git fetch would fail with abbreviated commits. - return False - - if cls.has_commit(dest, rev): - # Don't fetch if we have the commit locally. - return False - - return True - - @classmethod - def resolve_revision( - cls, dest: str, url: HiddenText, rev_options: RevOptions - ) -> RevOptions: - """ - Resolve a revision to a new RevOptions object with the SHA1 of the - branch, tag, or ref if found. - - Args: - rev_options: a RevOptions object. - """ - rev = rev_options.arg_rev - # The arg_rev property's implementation for Git ensures that the - # rev return value is always non-None. - assert rev is not None - - sha, is_branch = cls.get_revision_sha(dest, rev) - - if sha is not None: - rev_options = rev_options.make_new(sha) - rev_options = replace(rev_options, branch_name=(rev if is_branch else None)) - - return rev_options - - # Do not show a warning for the common case of something that has - # the form of a Git commit hash. - if not looks_like_hash(rev): - logger.warning( - "Did not find branch or tag '%s', assuming revision or ref.", - rev, - ) - - if not cls._should_fetch(dest, rev): - return rev_options - - # fetch the requested revision - cls.run_command( - make_command("fetch", "-q", url, rev_options.to_args()), - cwd=dest, - ) - # Change the revision to the SHA of the ref we fetched - sha = cls.get_revision(dest, rev="FETCH_HEAD") - rev_options = rev_options.make_new(sha) - - return rev_options - - @classmethod - def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: - """ - Return whether the current commit hash equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - if not name: - # Then avoid an unnecessary subprocess call. - return False - - return cls.get_revision(dest) == name - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest)) - if verbosity <= 0: - flags: Tuple[str, ...] = ("--quiet",) - elif verbosity == 1: - flags = () - else: - flags = ("--verbose", "--progress") - if self.get_git_version() >= (2, 17): - # Git added support for partial clone in 2.17 - # https://git-scm.com/docs/partial-clone - # Speeds up cloning by functioning without a complete copy of repository - self.run_command( - make_command( - "clone", - "--filter=blob:none", - *flags, - url, - dest, - ) - ) - else: - self.run_command(make_command("clone", *flags, url, dest)) - - if rev_options.rev: - # Then a specific revision was requested. - rev_options = self.resolve_revision(dest, url, rev_options) - branch_name = getattr(rev_options, "branch_name", None) - logger.debug("Rev options %s, branch_name %s", rev_options, branch_name) - if branch_name is None: - # Only do a checkout if the current commit id doesn't match - # the requested revision. - if not self.is_commit_id_equal(dest, rev_options.rev): - cmd_args = make_command( - "checkout", - "-q", - rev_options.to_args(), - ) - self.run_command(cmd_args, cwd=dest) - elif self.get_current_branch(dest) != branch_name: - # Then a specific branch was requested, and that branch - # is not yet checked out. - track_branch = f"origin/{branch_name}" - cmd_args = [ - "checkout", - "-b", - branch_name, - "--track", - track_branch, - ] - self.run_command(cmd_args, cwd=dest) - else: - sha = self.get_revision(dest) - rev_options = rev_options.make_new(sha) - - logger.info("Resolved %s to commit %s", url, rev_options.rev) - - #: repo may contain submodules - self.update_submodules(dest) - - def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - self.run_command( - make_command("config", "remote.origin.url", url), - cwd=dest, - ) - cmd_args = make_command("checkout", "-q", rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - self.update_submodules(dest) - - def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - # First fetch changes from the default remote - if self.get_git_version() >= (1, 9): - # fetch tags in addition to everything else - self.run_command(["fetch", "-q", "--tags"], cwd=dest) - else: - self.run_command(["fetch", "-q"], cwd=dest) - # Then reset to wanted revision (maybe even origin/master) - rev_options = self.resolve_revision(dest, url, rev_options) - cmd_args = make_command("reset", "--hard", "-q", rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - #: update submodules - self.update_submodules(dest) - - @classmethod - def get_remote_url(cls, location: str) -> str: - """ - Return URL of the first remote encountered. - - Raises RemoteNotFoundError if the repository does not have a remote - url configured. - """ - # We need to pass 1 for extra_ok_returncodes since the command - # exits with return code 1 if there are no matching lines. - stdout = cls.run_command( - ["config", "--get-regexp", r"remote\..*\.url"], - extra_ok_returncodes=(1,), - show_stdout=False, - stdout_only=True, - cwd=location, - ) - remotes = stdout.splitlines() - try: - found_remote = remotes[0] - except IndexError: - raise RemoteNotFoundError - - for remote in remotes: - if remote.startswith("remote.origin.url "): - found_remote = remote - break - url = found_remote.split(" ")[1] - return cls._git_remote_to_pip_url(url.strip()) - - @staticmethod - def _git_remote_to_pip_url(url: str) -> str: - """ - Convert a remote url from what git uses to what pip accepts. - - There are 3 legal forms **url** may take: - - 1. A fully qualified url: ssh://git@example.com/foo/bar.git - 2. A local project.git folder: /path/to/bare/repository.git - 3. SCP shorthand for form 1: git@example.com:foo/bar.git - - Form 1 is output as-is. Form 2 must be converted to URI and form 3 must - be converted to form 1. - - See the corresponding test test_git_remote_url_to_pip() for examples of - sample inputs/outputs. - """ - if re.match(r"\w+://", url): - # This is already valid. Pass it though as-is. - return url - if os.path.exists(url): - # A local bare remote (git clone --mirror). - # Needs a file:// prefix. - return pathlib.PurePath(url).as_uri() - scp_match = SCP_REGEX.match(url) - if scp_match: - # Add an ssh:// prefix and replace the ':' with a '/'. - return scp_match.expand(r"ssh://\1\2/\3") - # Otherwise, bail out. - raise RemoteNotValidError(url) - - @classmethod - def has_commit(cls, location: str, rev: str) -> bool: - """ - Check if rev is a commit that is available in the local repository. - """ - try: - cls.run_command( - ["rev-parse", "-q", "--verify", "sha^" + rev], - cwd=location, - log_failed_cmd=False, - ) - except InstallationError: - return False - else: - return True - - @classmethod - def get_revision(cls, location: str, rev: Optional[str] = None) -> str: - if rev is None: - rev = "HEAD" - current_rev = cls.run_command( - ["rev-parse", rev], - show_stdout=False, - stdout_only=True, - cwd=location, - ) - return current_rev.strip() - - @classmethod - def get_subdirectory(cls, location: str) -> Optional[str]: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - # find the repo root - git_dir = cls.run_command( - ["rev-parse", "--git-dir"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - if not os.path.isabs(git_dir): - git_dir = os.path.join(location, git_dir) - repo_root = os.path.abspath(os.path.join(git_dir, "..")) - return find_path_to_project_root_from_repo_root(location, repo_root) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: - """ - Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. - That's required because although they use SSH they sometimes don't - work with a ssh:// scheme (e.g. GitHub). But we need a scheme for - parsing. Hence we remove it again afterwards and return it as a stub. - """ - # Works around an apparent Git bug - # (see https://article.gmane.org/gmane.comp.version-control.git/146500) - scheme, netloc, path, query, fragment = urlsplit(url) - if scheme.endswith("file"): - initial_slashes = path[: -len(path.lstrip("/"))] - newpath = initial_slashes + urllib.request.url2pathname(path).replace( - "\\", "/" - ).lstrip("/") - after_plus = scheme.find("+") + 1 - url = scheme[:after_plus] + urlunsplit( - (scheme[after_plus:], netloc, newpath, query, fragment), - ) - - if "://" not in url: - assert "file:" not in url - url = url.replace("git+", "git+ssh://") - url, rev, user_pass = super().get_url_rev_and_auth(url) - url = url.replace("ssh://", "") - else: - url, rev, user_pass = super().get_url_rev_and_auth(url) - - return url, rev, user_pass - - @classmethod - def update_submodules(cls, location: str) -> None: - if not os.path.exists(os.path.join(location, ".gitmodules")): - return - cls.run_command( - ["submodule", "update", "--init", "--recursive", "-q"], - cwd=location, - ) - - @classmethod - def get_repository_root(cls, location: str) -> Optional[str]: - loc = super().get_repository_root(location) - if loc: - return loc - try: - r = cls.run_command( - ["rev-parse", "--show-toplevel"], - cwd=location, - show_stdout=False, - stdout_only=True, - on_returncode="raise", - log_failed_cmd=False, - ) - except BadCommand: - logger.debug( - "could not determine if %s is under git control " - "because git is not available", - location, - ) - return None - except InstallationError: - return None - return os.path.normpath(r.rstrip("\r\n")) - - @staticmethod - def should_add_vcs_url_prefix(repo_url: str) -> bool: - """In either https or ssh form, requirements must be prefixed with git+.""" - return True - - -vcs.register(Git) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py deleted file mode 100644 index c183d41..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py +++ /dev/null @@ -1,163 +0,0 @@ -import configparser -import logging -import os -from typing import List, Optional, Tuple - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import HiddenText, display_path -from pip._internal.utils.subprocess import make_command -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs.versioncontrol import ( - RevOptions, - VersionControl, - find_path_to_project_root_from_repo_root, - vcs, -) - -logger = logging.getLogger(__name__) - - -class Mercurial(VersionControl): - name = "hg" - dirname = ".hg" - repo_name = "clone" - schemes = ( - "hg+file", - "hg+http", - "hg+https", - "hg+ssh", - "hg+static-http", - ) - - @staticmethod - def get_base_rev_args(rev: str) -> List[str]: - return [f"--rev={rev}"] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Cloning hg %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags: Tuple[str, ...] = ("--quiet",) - elif verbosity == 1: - flags = () - elif verbosity == 2: - flags = ("--verbose",) - else: - flags = ("--verbose", "--debug") - self.run_command(make_command("clone", "--noupdate", *flags, url, dest)) - self.run_command( - make_command("update", *flags, rev_options.to_args()), - cwd=dest, - ) - - def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - repo_config = os.path.join(dest, self.dirname, "hgrc") - config = configparser.RawConfigParser() - try: - config.read(repo_config) - config.set("paths", "default", url.secret) - with open(repo_config, "w") as config_file: - config.write(config_file) - except (OSError, configparser.NoSectionError) as exc: - logger.warning("Could not switch Mercurial repository to %s: %s", url, exc) - else: - cmd_args = make_command("update", "-q", rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - self.run_command(["pull", "-q"], cwd=dest) - cmd_args = make_command("update", "-q", rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - @classmethod - def get_remote_url(cls, location: str) -> str: - url = cls.run_command( - ["showconfig", "paths.default"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - if cls._is_local_repository(url): - url = path_to_url(url) - return url.strip() - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the repository-local changeset revision number, as an integer. - """ - current_revision = cls.run_command( - ["parents", "--template={rev}"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - return current_revision - - @classmethod - def get_requirement_revision(cls, location: str) -> str: - """ - Return the changeset identification hash, as a 40-character - hexadecimal string - """ - current_rev_hash = cls.run_command( - ["parents", "--template={node}"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - return current_rev_hash - - @classmethod - def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: - """Always assume the versions don't match""" - return False - - @classmethod - def get_subdirectory(cls, location: str) -> Optional[str]: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - # find the repo root - repo_root = cls.run_command( - ["root"], show_stdout=False, stdout_only=True, cwd=location - ).strip() - if not os.path.isabs(repo_root): - repo_root = os.path.abspath(os.path.join(location, repo_root)) - return find_path_to_project_root_from_repo_root(location, repo_root) - - @classmethod - def get_repository_root(cls, location: str) -> Optional[str]: - loc = super().get_repository_root(location) - if loc: - return loc - try: - r = cls.run_command( - ["root"], - cwd=location, - show_stdout=False, - stdout_only=True, - on_returncode="raise", - log_failed_cmd=False, - ) - except BadCommand: - logger.debug( - "could not determine if %s is under hg control " - "because hg is not available", - location, - ) - return None - except InstallationError: - return None - return os.path.normpath(r.rstrip("\r\n")) - - -vcs.register(Mercurial) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py deleted file mode 100644 index f359266..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py +++ /dev/null @@ -1,324 +0,0 @@ -import logging -import os -import re -from typing import List, Optional, Tuple - -from pip._internal.utils.misc import ( - HiddenText, - display_path, - is_console_interactive, - is_installable_dir, - split_auth_from_netloc, -) -from pip._internal.utils.subprocess import CommandArgs, make_command -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RevOptions, - VersionControl, - vcs, -) - -logger = logging.getLogger(__name__) - -_svn_xml_url_re = re.compile('url="([^"]+)"') -_svn_rev_re = re.compile(r'committed-rev="(\d+)"') -_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') -_svn_info_xml_url_re = re.compile(r"(.*)") - - -class Subversion(VersionControl): - name = "svn" - dirname = ".svn" - repo_name = "checkout" - schemes = ("svn+ssh", "svn+http", "svn+https", "svn+svn", "svn+file") - - @classmethod - def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: - return True - - @staticmethod - def get_base_rev_args(rev: str) -> List[str]: - return ["-r", rev] - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the maximum revision for all files under a given location - """ - # Note: taken from setuptools.command.egg_info - revision = 0 - - for base, dirs, _ in os.walk(location): - if cls.dirname not in dirs: - dirs[:] = [] - continue # no sense walking uncontrolled subdirs - dirs.remove(cls.dirname) - entries_fn = os.path.join(base, cls.dirname, "entries") - if not os.path.exists(entries_fn): - # FIXME: should we warn? - continue - - dirurl, localrev = cls._get_svn_url_rev(base) - - if base == location: - assert dirurl is not None - base = dirurl + "/" # save the root url - elif not dirurl or not dirurl.startswith(base): - dirs[:] = [] - continue # not part of the same svn tree, skip it - revision = max(revision, localrev) - return str(revision) - - @classmethod - def get_netloc_and_auth( - cls, netloc: str, scheme: str - ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: - """ - This override allows the auth information to be passed to svn via the - --username and --password options instead of via the URL. - """ - if scheme == "ssh": - # The --username and --password options can't be used for - # svn+ssh URLs, so keep the auth information in the URL. - return super().get_netloc_and_auth(netloc, scheme) - - return split_auth_from_netloc(netloc) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: - # hotfix the URL scheme after removing svn+ from svn+ssh:// re-add it - url, rev, user_pass = super().get_url_rev_and_auth(url) - if url.startswith("ssh://"): - url = "svn+" + url - return url, rev, user_pass - - @staticmethod - def make_rev_args( - username: Optional[str], password: Optional[HiddenText] - ) -> CommandArgs: - extra_args: CommandArgs = [] - if username: - extra_args += ["--username", username] - if password: - extra_args += ["--password", password] - - return extra_args - - @classmethod - def get_remote_url(cls, location: str) -> str: - # In cases where the source is in a subdirectory, we have to look up in - # the location until we find a valid project root. - orig_location = location - while not is_installable_dir(location): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding a Python project. - logger.warning( - "Could not find Python project for directory %s (tried all " - "parent directories)", - orig_location, - ) - raise RemoteNotFoundError - - url, _rev = cls._get_svn_url_rev(location) - if url is None: - raise RemoteNotFoundError - - return url - - @classmethod - def _get_svn_url_rev(cls, location: str) -> Tuple[Optional[str], int]: - from pip._internal.exceptions import InstallationError - - entries_path = os.path.join(location, cls.dirname, "entries") - if os.path.exists(entries_path): - with open(entries_path) as f: - data = f.read() - else: # subversion >= 1.7 does not have the 'entries' file - data = "" - - url = None - if data.startswith("8") or data.startswith("9") or data.startswith("10"): - entries = list(map(str.splitlines, data.split("\n\x0c\n"))) - del entries[0][0] # get rid of the '8' - url = entries[0][3] - revs = [int(d[9]) for d in entries if len(d) > 9 and d[9]] + [0] - elif data.startswith("= 1.7 - # Note that using get_remote_call_options is not necessary here - # because `svn info` is being run against a local directory. - # We don't need to worry about making sure interactive mode - # is being used to prompt for passwords, because passwords - # are only potentially needed for remote server requests. - xml = cls.run_command( - ["info", "--xml", location], - show_stdout=False, - stdout_only=True, - ) - match = _svn_info_xml_url_re.search(xml) - assert match is not None - url = match.group(1) - revs = [int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)] - except InstallationError: - url, revs = None, [] - - if revs: - rev = max(revs) - else: - rev = 0 - - return url, rev - - @classmethod - def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: - """Always assume the versions don't match""" - return False - - def __init__(self, use_interactive: Optional[bool] = None) -> None: - if use_interactive is None: - use_interactive = is_console_interactive() - self.use_interactive = use_interactive - - # This member is used to cache the fetched version of the current - # ``svn`` client. - # Special value definitions: - # None: Not evaluated yet. - # Empty tuple: Could not parse version. - self._vcs_version: Optional[Tuple[int, ...]] = None - - super().__init__() - - def call_vcs_version(self) -> Tuple[int, ...]: - """Query the version of the currently installed Subversion client. - - :return: A tuple containing the parts of the version information or - ``()`` if the version returned from ``svn`` could not be parsed. - :raises: BadCommand: If ``svn`` is not installed. - """ - # Example versions: - # svn, version 1.10.3 (r1842928) - # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 - # svn, version 1.7.14 (r1542130) - # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu - # svn, version 1.12.0-SlikSvn (SlikSvn/1.12.0) - # compiled May 28 2019, 13:44:56 on x86_64-microsoft-windows6.2 - version_prefix = "svn, version " - version = self.run_command(["--version"], show_stdout=False, stdout_only=True) - if not version.startswith(version_prefix): - return () - - version = version[len(version_prefix) :].split()[0] - version_list = version.partition("-")[0].split(".") - try: - parsed_version = tuple(map(int, version_list)) - except ValueError: - return () - - return parsed_version - - def get_vcs_version(self) -> Tuple[int, ...]: - """Return the version of the currently installed Subversion client. - - If the version of the Subversion client has already been queried, - a cached value will be used. - - :return: A tuple containing the parts of the version information or - ``()`` if the version returned from ``svn`` could not be parsed. - :raises: BadCommand: If ``svn`` is not installed. - """ - if self._vcs_version is not None: - # Use cached version, if available. - # If parsing the version failed previously (empty tuple), - # do not attempt to parse it again. - return self._vcs_version - - vcs_version = self.call_vcs_version() - self._vcs_version = vcs_version - return vcs_version - - def get_remote_call_options(self) -> CommandArgs: - """Return options to be used on calls to Subversion that contact the server. - - These options are applicable for the following ``svn`` subcommands used - in this class. - - - checkout - - switch - - update - - :return: A list of command line arguments to pass to ``svn``. - """ - if not self.use_interactive: - # --non-interactive switch is available since Subversion 0.14.4. - # Subversion < 1.8 runs in interactive mode by default. - return ["--non-interactive"] - - svn_version = self.get_vcs_version() - # By default, Subversion >= 1.8 runs in non-interactive mode if - # stdin is not a TTY. Since that is how pip invokes SVN, in - # call_subprocess(), pip must pass --force-interactive to ensure - # the user can be prompted for a password, if required. - # SVN added the --force-interactive option in SVN 1.8. Since - # e.g. RHEL/CentOS 7, which is supported until 2024, ships with - # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip - # can't safely add the option if the SVN version is < 1.8 (or unknown). - if svn_version >= (1, 8): - return ["--force-interactive"] - - return [] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Checking out %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags = ["--quiet"] - else: - flags = [] - cmd_args = make_command( - "checkout", - *flags, - self.get_remote_call_options(), - rev_options.to_args(), - url, - dest, - ) - self.run_command(cmd_args) - - def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - cmd_args = make_command( - "switch", - self.get_remote_call_options(), - rev_options.to_args(), - url, - dest, - ) - self.run_command(cmd_args) - - def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - cmd_args = make_command( - "update", - self.get_remote_call_options(), - rev_options.to_args(), - dest, - ) - self.run_command(cmd_args) - - -vcs.register(Subversion) diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py b/myenv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py deleted file mode 100644 index a413316..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py +++ /dev/null @@ -1,688 +0,0 @@ -"""Handles all VCS (version control) support""" - -import logging -import os -import shutil -import sys -import urllib.parse -from dataclasses import dataclass, field -from typing import ( - Any, - Dict, - Iterable, - Iterator, - List, - Literal, - Mapping, - Optional, - Tuple, - Type, - Union, -) - -from pip._internal.cli.spinners import SpinnerInterface -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import ( - HiddenText, - ask_path_exists, - backup_dir, - display_path, - hide_url, - hide_value, - is_installable_dir, - rmtree, -) -from pip._internal.utils.subprocess import ( - CommandArgs, - call_subprocess, - format_command_args, - make_command, -) - -__all__ = ["vcs"] - - -logger = logging.getLogger(__name__) - -AuthInfo = Tuple[Optional[str], Optional[str]] - - -def is_url(name: str) -> bool: - """ - Return true if the name looks like a URL. - """ - scheme = urllib.parse.urlsplit(name).scheme - if not scheme: - return False - return scheme in ["http", "https", "file", "ftp"] + vcs.all_schemes - - -def make_vcs_requirement_url( - repo_url: str, rev: str, project_name: str, subdir: Optional[str] = None -) -> str: - """ - Return the URL for a VCS requirement. - - Args: - repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). - project_name: the (unescaped) project name. - """ - egg_project_name = project_name.replace("-", "_") - req = f"{repo_url}@{rev}#egg={egg_project_name}" - if subdir: - req += f"&subdirectory={subdir}" - - return req - - -def find_path_to_project_root_from_repo_root( - location: str, repo_root: str -) -> Optional[str]: - """ - Find the the Python project's root by searching up the filesystem from - `location`. Return the path to project root relative to `repo_root`. - Return None if the project root is `repo_root`, or cannot be found. - """ - # find project root. - orig_location = location - while not is_installable_dir(location): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding a Python project. - logger.warning( - "Could not find a Python project for directory %s (tried all " - "parent directories)", - orig_location, - ) - return None - - if os.path.samefile(repo_root, location): - return None - - return os.path.relpath(location, repo_root) - - -class RemoteNotFoundError(Exception): - pass - - -class RemoteNotValidError(Exception): - def __init__(self, url: str): - super().__init__(url) - self.url = url - - -@dataclass(frozen=True) -class RevOptions: - """ - Encapsulates a VCS-specific revision to install, along with any VCS - install options. - - Args: - vc_class: a VersionControl subclass. - rev: the name of the revision to install. - extra_args: a list of extra options. - """ - - vc_class: Type["VersionControl"] - rev: Optional[str] = None - extra_args: CommandArgs = field(default_factory=list) - branch_name: Optional[str] = None - - def __repr__(self) -> str: - return f"" - - @property - def arg_rev(self) -> Optional[str]: - if self.rev is None: - return self.vc_class.default_arg_rev - - return self.rev - - def to_args(self) -> CommandArgs: - """ - Return the VCS-specific command arguments. - """ - args: CommandArgs = [] - rev = self.arg_rev - if rev is not None: - args += self.vc_class.get_base_rev_args(rev) - args += self.extra_args - - return args - - def to_display(self) -> str: - if not self.rev: - return "" - - return f" (to revision {self.rev})" - - def make_new(self, rev: str) -> "RevOptions": - """ - Make a copy of the current instance, but with a new rev. - - Args: - rev: the name of the revision for the new object. - """ - return self.vc_class.make_rev_options(rev, extra_args=self.extra_args) - - -class VcsSupport: - _registry: Dict[str, "VersionControl"] = {} - schemes = ["ssh", "git", "hg", "bzr", "sftp", "svn"] - - def __init__(self) -> None: - # Register more schemes with urlparse for various version control - # systems - urllib.parse.uses_netloc.extend(self.schemes) - super().__init__() - - def __iter__(self) -> Iterator[str]: - return self._registry.__iter__() - - @property - def backends(self) -> List["VersionControl"]: - return list(self._registry.values()) - - @property - def dirnames(self) -> List[str]: - return [backend.dirname for backend in self.backends] - - @property - def all_schemes(self) -> List[str]: - schemes: List[str] = [] - for backend in self.backends: - schemes.extend(backend.schemes) - return schemes - - def register(self, cls: Type["VersionControl"]) -> None: - if not hasattr(cls, "name"): - logger.warning("Cannot register VCS %s", cls.__name__) - return - if cls.name not in self._registry: - self._registry[cls.name] = cls() - logger.debug("Registered VCS backend: %s", cls.name) - - def unregister(self, name: str) -> None: - if name in self._registry: - del self._registry[name] - - def get_backend_for_dir(self, location: str) -> Optional["VersionControl"]: - """ - Return a VersionControl object if a repository of that type is found - at the given directory. - """ - vcs_backends = {} - for vcs_backend in self._registry.values(): - repo_path = vcs_backend.get_repository_root(location) - if not repo_path: - continue - logger.debug("Determine that %s uses VCS: %s", location, vcs_backend.name) - vcs_backends[repo_path] = vcs_backend - - if not vcs_backends: - return None - - # Choose the VCS in the inner-most directory. Since all repository - # roots found here would be either `location` or one of its - # parents, the longest path should have the most path components, - # i.e. the backend representing the inner-most repository. - inner_most_repo_path = max(vcs_backends, key=len) - return vcs_backends[inner_most_repo_path] - - def get_backend_for_scheme(self, scheme: str) -> Optional["VersionControl"]: - """ - Return a VersionControl object or None. - """ - for vcs_backend in self._registry.values(): - if scheme in vcs_backend.schemes: - return vcs_backend - return None - - def get_backend(self, name: str) -> Optional["VersionControl"]: - """ - Return a VersionControl object or None. - """ - name = name.lower() - return self._registry.get(name) - - -vcs = VcsSupport() - - -class VersionControl: - name = "" - dirname = "" - repo_name = "" - # List of supported schemes for this Version Control - schemes: Tuple[str, ...] = () - # Iterable of environment variable names to pass to call_subprocess(). - unset_environ: Tuple[str, ...] = () - default_arg_rev: Optional[str] = None - - @classmethod - def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: - """ - Return whether the vcs prefix (e.g. "git+") should be added to a - repository's remote url when used in a requirement. - """ - return not remote_url.lower().startswith(f"{cls.name}:") - - @classmethod - def get_subdirectory(cls, location: str) -> Optional[str]: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - return None - - @classmethod - def get_requirement_revision(cls, repo_dir: str) -> str: - """ - Return the revision string that should be used in a requirement. - """ - return cls.get_revision(repo_dir) - - @classmethod - def get_src_requirement(cls, repo_dir: str, project_name: str) -> str: - """ - Return the requirement string to use to redownload the files - currently at the given repository directory. - - Args: - project_name: the (unescaped) project name. - - The return value has a form similar to the following: - - {repository_url}@{revision}#egg={project_name} - """ - repo_url = cls.get_remote_url(repo_dir) - - if cls.should_add_vcs_url_prefix(repo_url): - repo_url = f"{cls.name}+{repo_url}" - - revision = cls.get_requirement_revision(repo_dir) - subdir = cls.get_subdirectory(repo_dir) - req = make_vcs_requirement_url(repo_url, revision, project_name, subdir=subdir) - - return req - - @staticmethod - def get_base_rev_args(rev: str) -> List[str]: - """ - Return the base revision arguments for a vcs command. - - Args: - rev: the name of a revision to install. Cannot be None. - """ - raise NotImplementedError - - def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: - """ - Return true if the commit hash checked out at dest matches - the revision in url. - - Always return False, if the VCS does not support immutable commit - hashes. - - This method does not check if there are local uncommitted changes - in dest after checkout, as pip currently has no use case for that. - """ - return False - - @classmethod - def make_rev_options( - cls, rev: Optional[str] = None, extra_args: Optional[CommandArgs] = None - ) -> RevOptions: - """ - Return a RevOptions object. - - Args: - rev: the name of a revision to install. - extra_args: a list of extra options. - """ - return RevOptions(cls, rev, extra_args=extra_args or []) - - @classmethod - def _is_local_repository(cls, repo: str) -> bool: - """ - posix absolute paths start with os.path.sep, - win32 ones start with drive (like c:\\folder) - """ - drive, tail = os.path.splitdrive(repo) - return repo.startswith(os.path.sep) or bool(drive) - - @classmethod - def get_netloc_and_auth( - cls, netloc: str, scheme: str - ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: - """ - Parse the repository URL's netloc, and return the new netloc to use - along with auth information. - - Args: - netloc: the original repository URL netloc. - scheme: the repository URL's scheme without the vcs prefix. - - This is mainly for the Subversion class to override, so that auth - information can be provided via the --username and --password options - instead of through the URL. For other subclasses like Git without - such an option, auth information must stay in the URL. - - Returns: (netloc, (username, password)). - """ - return netloc, (None, None) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: - """ - Parse the repository URL to use, and return the URL, revision, - and auth info to use. - - Returns: (url, rev, (username, password)). - """ - scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) - if "+" not in scheme: - raise ValueError( - f"Sorry, {url!r} is a malformed VCS url. " - "The format is +://, " - "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" - ) - # Remove the vcs prefix. - scheme = scheme.split("+", 1)[1] - netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) - rev = None - if "@" in path: - path, rev = path.rsplit("@", 1) - if not rev: - raise InstallationError( - f"The URL {url!r} has an empty revision (after @) " - "which is not supported. Include a revision after @ " - "or remove @ from the URL." - ) - url = urllib.parse.urlunsplit((scheme, netloc, path, query, "")) - return url, rev, user_pass - - @staticmethod - def make_rev_args( - username: Optional[str], password: Optional[HiddenText] - ) -> CommandArgs: - """ - Return the RevOptions "extra arguments" to use in obtain(). - """ - return [] - - def get_url_rev_options(self, url: HiddenText) -> Tuple[HiddenText, RevOptions]: - """ - Return the URL and RevOptions object to use in obtain(), - as a tuple (url, rev_options). - """ - secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) - username, secret_password = user_pass - password: Optional[HiddenText] = None - if secret_password is not None: - password = hide_value(secret_password) - extra_args = self.make_rev_args(username, password) - rev_options = self.make_rev_options(rev, extra_args=extra_args) - - return hide_url(secret_url), rev_options - - @staticmethod - def normalize_url(url: str) -> str: - """ - Normalize a URL for comparison by unquoting it and removing any - trailing slash. - """ - return urllib.parse.unquote(url).rstrip("/") - - @classmethod - def compare_urls(cls, url1: str, url2: str) -> bool: - """ - Compare two repo URLs for identity, ignoring incidental differences. - """ - return cls.normalize_url(url1) == cls.normalize_url(url2) - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - """ - Fetch a revision from a repository, in the case that this is the - first fetch from the repository. - - Args: - dest: the directory to fetch the repository to. - rev_options: a RevOptions object. - verbosity: verbosity level. - """ - raise NotImplementedError - - def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - """ - Switch the repo at ``dest`` to point to ``URL``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: - """ - Update an already-existing repo to the given ``rev_options``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - @classmethod - def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: - """ - Return whether the id of the current commit equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - raise NotImplementedError - - def obtain(self, dest: str, url: HiddenText, verbosity: int) -> None: - """ - Install or update in editable mode the package represented by this - VersionControl object. - - :param dest: the repository directory in which to install or update. - :param url: the repository URL starting with a vcs prefix. - :param verbosity: verbosity level. - """ - url, rev_options = self.get_url_rev_options(url) - - if not os.path.exists(dest): - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - rev_display = rev_options.to_display() - if self.is_repository_directory(dest): - existing_url = self.get_remote_url(dest) - if self.compare_urls(existing_url, url.secret): - logger.debug( - "%s in %s exists, and has correct URL (%s)", - self.repo_name.title(), - display_path(dest), - url, - ) - if not self.is_commit_id_equal(dest, rev_options.rev): - logger.info( - "Updating %s %s%s", - display_path(dest), - self.repo_name, - rev_display, - ) - self.update(dest, url, rev_options) - else: - logger.info("Skipping because already up-to-date.") - return - - logger.warning( - "%s %s in %s exists with URL %s", - self.name, - self.repo_name, - display_path(dest), - existing_url, - ) - prompt = ("(s)witch, (i)gnore, (w)ipe, (b)ackup ", ("s", "i", "w", "b")) - else: - logger.warning( - "Directory %s already exists, and is not a %s %s.", - dest, - self.name, - self.repo_name, - ) - # https://github.com/python/mypy/issues/1174 - prompt = ("(i)gnore, (w)ipe, (b)ackup ", ("i", "w", "b")) # type: ignore - - logger.warning( - "The plan is to install the %s repository %s", - self.name, - url, - ) - response = ask_path_exists(f"What to do? {prompt[0]}", prompt[1]) - - if response == "a": - sys.exit(-1) - - if response == "w": - logger.warning("Deleting %s", display_path(dest)) - rmtree(dest) - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - if response == "b": - dest_dir = backup_dir(dest) - logger.warning("Backing up %s to %s", display_path(dest), dest_dir) - shutil.move(dest, dest_dir) - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - # Do nothing if the response is "i". - if response == "s": - logger.info( - "Switching %s %s to %s%s", - self.repo_name, - display_path(dest), - url, - rev_display, - ) - self.switch(dest, url, rev_options) - - def unpack(self, location: str, url: HiddenText, verbosity: int) -> None: - """ - Clean up current location and download the url repository - (and vcs infos) into location - - :param url: the repository URL starting with a vcs prefix. - :param verbosity: verbosity level. - """ - if os.path.exists(location): - rmtree(location) - self.obtain(location, url=url, verbosity=verbosity) - - @classmethod - def get_remote_url(cls, location: str) -> str: - """ - Return the url used at location - - Raises RemoteNotFoundError if the repository does not have a remote - url configured. - """ - raise NotImplementedError - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the current commit id of the files at the given location. - """ - raise NotImplementedError - - @classmethod - def run_command( - cls, - cmd: Union[List[str], CommandArgs], - show_stdout: bool = True, - cwd: Optional[str] = None, - on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", - extra_ok_returncodes: Optional[Iterable[int]] = None, - command_desc: Optional[str] = None, - extra_environ: Optional[Mapping[str, Any]] = None, - spinner: Optional[SpinnerInterface] = None, - log_failed_cmd: bool = True, - stdout_only: bool = False, - ) -> str: - """ - Run a VCS subcommand - This is simply a wrapper around call_subprocess that adds the VCS - command name, and checks that the VCS is available - """ - cmd = make_command(cls.name, *cmd) - if command_desc is None: - command_desc = format_command_args(cmd) - try: - return call_subprocess( - cmd, - show_stdout, - cwd, - on_returncode=on_returncode, - extra_ok_returncodes=extra_ok_returncodes, - command_desc=command_desc, - extra_environ=extra_environ, - unset_environ=cls.unset_environ, - spinner=spinner, - log_failed_cmd=log_failed_cmd, - stdout_only=stdout_only, - ) - except NotADirectoryError: - raise BadCommand(f"Cannot find command {cls.name!r} - invalid PATH") - except FileNotFoundError: - # errno.ENOENT = no such file or directory - # In other words, the VCS executable isn't available - raise BadCommand( - f"Cannot find command {cls.name!r} - do you have " - f"{cls.name!r} installed and in your PATH?" - ) - except PermissionError: - # errno.EACCES = Permission denied - # This error occurs, for instance, when the command is installed - # only for another user. So, the current user don't have - # permission to call the other user command. - raise BadCommand( - f"No permission to execute {cls.name!r} - install it " - f"locally, globally (ask admin), or check your PATH. " - f"See possible solutions at " - f"https://pip.pypa.io/en/latest/reference/pip_freeze/" - f"#fixing-permission-denied." - ) - - @classmethod - def is_repository_directory(cls, path: str) -> bool: - """ - Return whether a directory path is a repository directory. - """ - logger.debug("Checking in %s for %s (%s)...", path, cls.dirname, cls.name) - return os.path.exists(os.path.join(path, cls.dirname)) - - @classmethod - def get_repository_root(cls, location: str) -> Optional[str]: - """ - Return the "root" (top-level) directory controlled by the vcs, - or `None` if the directory is not in any. - - It is meant to be overridden to implement smarter detection - mechanisms for specific vcs. - - This can do more than is_repository_directory() alone. For - example, the Git override checks that Git is actually available. - """ - if cls.is_repository_directory(location): - return location - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py b/myenv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py deleted file mode 100644 index 93f8e1f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py +++ /dev/null @@ -1,354 +0,0 @@ -"""Orchestrator for building wheels from InstallRequirements. -""" - -import logging -import os.path -import re -import shutil -from typing import Iterable, List, Optional, Tuple - -from pip._vendor.packaging.utils import canonicalize_name, canonicalize_version -from pip._vendor.packaging.version import InvalidVersion, Version - -from pip._internal.cache import WheelCache -from pip._internal.exceptions import InvalidWheelFilename, UnsupportedWheel -from pip._internal.metadata import FilesystemWheel, get_wheel_distribution -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.build.wheel import build_wheel_pep517 -from pip._internal.operations.build.wheel_editable import build_wheel_editable -from pip._internal.operations.build.wheel_legacy import build_wheel_legacy -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ensure_dir, hash_file -from pip._internal.utils.setuptools_build import make_setuptools_clean_args -from pip._internal.utils.subprocess import call_subprocess -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import vcs - -logger = logging.getLogger(__name__) - -_egg_info_re = re.compile(r"([a-z0-9_.]+)-([a-z0-9_.!+-]+)", re.IGNORECASE) - -BuildResult = Tuple[List[InstallRequirement], List[InstallRequirement]] - - -def _contains_egg_info(s: str) -> bool: - """Determine whether the string looks like an egg_info. - - :param s: The string to parse. E.g. foo-2.1 - """ - return bool(_egg_info_re.search(s)) - - -def _should_build( - req: InstallRequirement, - need_wheel: bool, -) -> bool: - """Return whether an InstallRequirement should be built into a wheel.""" - if req.constraint: - # never build requirements that are merely constraints - return False - if req.is_wheel: - if need_wheel: - logger.info( - "Skipping %s, due to already being wheel.", - req.name, - ) - return False - - if need_wheel: - # i.e. pip wheel, not pip install - return True - - # From this point, this concerns the pip install command only - # (need_wheel=False). - - if not req.source_dir: - return False - - if req.editable: - # we only build PEP 660 editable requirements - return req.supports_pyproject_editable - - return True - - -def should_build_for_wheel_command( - req: InstallRequirement, -) -> bool: - return _should_build(req, need_wheel=True) - - -def should_build_for_install_command( - req: InstallRequirement, -) -> bool: - return _should_build(req, need_wheel=False) - - -def _should_cache( - req: InstallRequirement, -) -> Optional[bool]: - """ - Return whether a built InstallRequirement can be stored in the persistent - wheel cache, assuming the wheel cache is available, and _should_build() - has determined a wheel needs to be built. - """ - if req.editable or not req.source_dir: - # never cache editable requirements - return False - - if req.link and req.link.is_vcs: - # VCS checkout. Do not cache - # unless it points to an immutable commit hash. - assert not req.editable - assert req.source_dir - vcs_backend = vcs.get_backend_for_scheme(req.link.scheme) - assert vcs_backend - if vcs_backend.is_immutable_rev_checkout(req.link.url, req.source_dir): - return True - return False - - assert req.link - base, ext = req.link.splitext() - if _contains_egg_info(base): - return True - - # Otherwise, do not cache. - return False - - -def _get_cache_dir( - req: InstallRequirement, - wheel_cache: WheelCache, -) -> str: - """Return the persistent or temporary cache directory where the built - wheel need to be stored. - """ - cache_available = bool(wheel_cache.cache_dir) - assert req.link - if cache_available and _should_cache(req): - cache_dir = wheel_cache.get_path_for_link(req.link) - else: - cache_dir = wheel_cache.get_ephem_path_for_link(req.link) - return cache_dir - - -def _verify_one(req: InstallRequirement, wheel_path: str) -> None: - canonical_name = canonicalize_name(req.name or "") - w = Wheel(os.path.basename(wheel_path)) - if canonicalize_name(w.name) != canonical_name: - raise InvalidWheelFilename( - f"Wheel has unexpected file name: expected {canonical_name!r}, " - f"got {w.name!r}", - ) - dist = get_wheel_distribution(FilesystemWheel(wheel_path), canonical_name) - dist_verstr = str(dist.version) - if canonicalize_version(dist_verstr) != canonicalize_version(w.version): - raise InvalidWheelFilename( - f"Wheel has unexpected file name: expected {dist_verstr!r}, " - f"got {w.version!r}", - ) - metadata_version_value = dist.metadata_version - if metadata_version_value is None: - raise UnsupportedWheel("Missing Metadata-Version") - try: - metadata_version = Version(metadata_version_value) - except InvalidVersion: - msg = f"Invalid Metadata-Version: {metadata_version_value}" - raise UnsupportedWheel(msg) - if metadata_version >= Version("1.2") and not isinstance(dist.version, Version): - raise UnsupportedWheel( - f"Metadata 1.2 mandates PEP 440 version, but {dist_verstr!r} is not" - ) - - -def _build_one( - req: InstallRequirement, - output_dir: str, - verify: bool, - build_options: List[str], - global_options: List[str], - editable: bool, -) -> Optional[str]: - """Build one wheel. - - :return: The filename of the built wheel, or None if the build failed. - """ - artifact = "editable" if editable else "wheel" - try: - ensure_dir(output_dir) - except OSError as e: - logger.warning( - "Building %s for %s failed: %s", - artifact, - req.name, - e, - ) - return None - - # Install build deps into temporary directory (PEP 518) - with req.build_env: - wheel_path = _build_one_inside_env( - req, output_dir, build_options, global_options, editable - ) - if wheel_path and verify: - try: - _verify_one(req, wheel_path) - except (InvalidWheelFilename, UnsupportedWheel) as e: - logger.warning("Built %s for %s is invalid: %s", artifact, req.name, e) - return None - return wheel_path - - -def _build_one_inside_env( - req: InstallRequirement, - output_dir: str, - build_options: List[str], - global_options: List[str], - editable: bool, -) -> Optional[str]: - with TempDirectory(kind="wheel") as temp_dir: - assert req.name - if req.use_pep517: - assert req.metadata_directory - assert req.pep517_backend - if global_options: - logger.warning( - "Ignoring --global-option when building %s using PEP 517", req.name - ) - if build_options: - logger.warning( - "Ignoring --build-option when building %s using PEP 517", req.name - ) - if editable: - wheel_path = build_wheel_editable( - name=req.name, - backend=req.pep517_backend, - metadata_directory=req.metadata_directory, - tempd=temp_dir.path, - ) - else: - wheel_path = build_wheel_pep517( - name=req.name, - backend=req.pep517_backend, - metadata_directory=req.metadata_directory, - tempd=temp_dir.path, - ) - else: - wheel_path = build_wheel_legacy( - name=req.name, - setup_py_path=req.setup_py_path, - source_dir=req.unpacked_source_directory, - global_options=global_options, - build_options=build_options, - tempd=temp_dir.path, - ) - - if wheel_path is not None: - wheel_name = os.path.basename(wheel_path) - dest_path = os.path.join(output_dir, wheel_name) - try: - wheel_hash, length = hash_file(wheel_path) - shutil.move(wheel_path, dest_path) - logger.info( - "Created wheel for %s: filename=%s size=%d sha256=%s", - req.name, - wheel_name, - length, - wheel_hash.hexdigest(), - ) - logger.info("Stored in directory: %s", output_dir) - return dest_path - except Exception as e: - logger.warning( - "Building wheel for %s failed: %s", - req.name, - e, - ) - # Ignore return, we can't do anything else useful. - if not req.use_pep517: - _clean_one_legacy(req, global_options) - return None - - -def _clean_one_legacy(req: InstallRequirement, global_options: List[str]) -> bool: - clean_args = make_setuptools_clean_args( - req.setup_py_path, - global_options=global_options, - ) - - logger.info("Running setup.py clean for %s", req.name) - try: - call_subprocess( - clean_args, command_desc="python setup.py clean", cwd=req.source_dir - ) - return True - except Exception: - logger.error("Failed cleaning build dir for %s", req.name) - return False - - -def build( - requirements: Iterable[InstallRequirement], - wheel_cache: WheelCache, - verify: bool, - build_options: List[str], - global_options: List[str], -) -> BuildResult: - """Build wheels. - - :return: The list of InstallRequirement that succeeded to build and - the list of InstallRequirement that failed to build. - """ - if not requirements: - return [], [] - - # Build the wheels. - logger.info( - "Building wheels for collected packages: %s", - ", ".join(req.name for req in requirements), # type: ignore - ) - - with indent_log(): - build_successes, build_failures = [], [] - for req in requirements: - assert req.name - cache_dir = _get_cache_dir(req, wheel_cache) - wheel_file = _build_one( - req, - cache_dir, - verify, - build_options, - global_options, - req.editable and req.permit_editable_wheels, - ) - if wheel_file: - # Record the download origin in the cache - if req.download_info is not None: - # download_info is guaranteed to be set because when we build an - # InstallRequirement it has been through the preparer before, but - # let's be cautious. - wheel_cache.record_download_origin(cache_dir, req.download_info) - # Update the link for this. - req.link = Link(path_to_url(wheel_file)) - req.local_file_path = req.link.file_path - assert req.link.is_wheel - build_successes.append(req) - else: - build_failures.append(req) - - # notify success/failure - if build_successes: - logger.info( - "Successfully built %s", - " ".join([req.name for req in build_successes]), # type: ignore - ) - if build_failures: - logger.info( - "Failed to build %s", - " ".join([req.name for req in build_failures]), # type: ignore - ) - # Return a list of requirements that failed to build - return build_successes, build_failures diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/__init__.py deleted file mode 100644 index 561089c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/__init__.py +++ /dev/null @@ -1,116 +0,0 @@ -""" -pip._vendor is for vendoring dependencies of pip to prevent needing pip to -depend on something external. - -Files inside of pip._vendor should be considered immutable and should only be -updated to versions from upstream. -""" -from __future__ import absolute_import - -import glob -import os.path -import sys - -# Downstream redistributors which have debundled our dependencies should also -# patch this value to be true. This will trigger the additional patching -# to cause things like "six" to be available as pip. -DEBUNDLED = False - -# By default, look in this directory for a bunch of .whl files which we will -# add to the beginning of sys.path before attempting to import anything. This -# is done to support downstream re-distributors like Debian and Fedora who -# wish to create their own Wheels for our dependencies to aid in debundling. -WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) - - -# Define a small helper function to alias our vendored modules to the real ones -# if the vendored ones do not exist. This idea of this was taken from -# https://github.com/kennethreitz/requests/pull/2567. -def vendored(modulename): - vendored_name = "{0}.{1}".format(__name__, modulename) - - try: - __import__(modulename, globals(), locals(), level=0) - except ImportError: - # We can just silently allow import failures to pass here. If we - # got to this point it means that ``import pip._vendor.whatever`` - # failed and so did ``import whatever``. Since we're importing this - # upfront in an attempt to alias imports, not erroring here will - # just mean we get a regular import error whenever pip *actually* - # tries to import one of these modules to use it, which actually - # gives us a better error message than we would have otherwise - # gotten. - pass - else: - sys.modules[vendored_name] = sys.modules[modulename] - base, head = vendored_name.rsplit(".", 1) - setattr(sys.modules[base], head, sys.modules[modulename]) - - -# If we're operating in a debundled setup, then we want to go ahead and trigger -# the aliasing of our vendored libraries as well as looking for wheels to add -# to our sys.path. This will cause all of this code to be a no-op typically -# however downstream redistributors can enable it in a consistent way across -# all platforms. -if DEBUNDLED: - # Actually look inside of WHEEL_DIR to find .whl files and add them to the - # front of our sys.path. - sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path - - # Actually alias all of our vendored dependencies. - vendored("cachecontrol") - vendored("certifi") - vendored("distlib") - vendored("distro") - vendored("packaging") - vendored("packaging.version") - vendored("packaging.specifiers") - vendored("pkg_resources") - vendored("platformdirs") - vendored("progress") - vendored("pyproject_hooks") - vendored("requests") - vendored("requests.exceptions") - vendored("requests.packages") - vendored("requests.packages.urllib3") - vendored("requests.packages.urllib3._collections") - vendored("requests.packages.urllib3.connection") - vendored("requests.packages.urllib3.connectionpool") - vendored("requests.packages.urllib3.contrib") - vendored("requests.packages.urllib3.contrib.ntlmpool") - vendored("requests.packages.urllib3.contrib.pyopenssl") - vendored("requests.packages.urllib3.exceptions") - vendored("requests.packages.urllib3.fields") - vendored("requests.packages.urllib3.filepost") - vendored("requests.packages.urllib3.packages") - vendored("requests.packages.urllib3.packages.ordered_dict") - vendored("requests.packages.urllib3.packages.six") - vendored("requests.packages.urllib3.packages.ssl_match_hostname") - vendored("requests.packages.urllib3.packages.ssl_match_hostname." - "_implementation") - vendored("requests.packages.urllib3.poolmanager") - vendored("requests.packages.urllib3.request") - vendored("requests.packages.urllib3.response") - vendored("requests.packages.urllib3.util") - vendored("requests.packages.urllib3.util.connection") - vendored("requests.packages.urllib3.util.request") - vendored("requests.packages.urllib3.util.response") - vendored("requests.packages.urllib3.util.retry") - vendored("requests.packages.urllib3.util.ssl_") - vendored("requests.packages.urllib3.util.timeout") - vendored("requests.packages.urllib3.util.url") - vendored("resolvelib") - vendored("rich") - vendored("rich.console") - vendored("rich.highlighter") - vendored("rich.logging") - vendored("rich.markup") - vendored("rich.progress") - vendored("rich.segment") - vendored("rich.style") - vendored("rich.text") - vendored("rich.traceback") - if sys.version_info < (3, 11): - vendored("tomli") - vendored("truststore") - vendored("urllib3") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0a53621..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc deleted file mode 100644 index a9e2d62..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py deleted file mode 100644 index 2191624..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -"""CacheControl import Interface. - -Make it easy to import from cachecontrol without long namespaces. -""" - -__author__ = "Eric Larson" -__email__ = "eric@ionrock.org" -__version__ = "0.14.1" - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.controller import CacheController -from pip._vendor.cachecontrol.wrapper import CacheControl - -__all__ = [ - "__author__", - "__email__", - "__version__", - "CacheControlAdapter", - "CacheController", - "CacheControl", -] - -import logging - -logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index cdb79a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc deleted file mode 100644 index 5f05a30..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc deleted file mode 100644 index 57955ad..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc deleted file mode 100644 index 86ae80b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc deleted file mode 100644 index 8f6b67e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc deleted file mode 100644 index 02f43da..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc deleted file mode 100644 index 688f807..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc deleted file mode 100644 index 2376a1d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc deleted file mode 100644 index ef243cf..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py deleted file mode 100644 index 2c84208..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py +++ /dev/null @@ -1,70 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import logging -from argparse import ArgumentParser -from typing import TYPE_CHECKING - -from pip._vendor import requests - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import logger - -if TYPE_CHECKING: - from argparse import Namespace - - from pip._vendor.cachecontrol.controller import CacheController - - -def setup_logging() -> None: - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler() - logger.addHandler(handler) - - -def get_session() -> requests.Session: - adapter = CacheControlAdapter( - DictCache(), cache_etags=True, serializer=None, heuristic=None - ) - sess = requests.Session() - sess.mount("http://", adapter) - sess.mount("https://", adapter) - - sess.cache_controller = adapter.controller # type: ignore[attr-defined] - return sess - - -def get_args() -> Namespace: - parser = ArgumentParser() - parser.add_argument("url", help="The URL to try and cache") - return parser.parse_args() - - -def main() -> None: - args = get_args() - sess = get_session() - - # Make a request to get a response - resp = sess.get(args.url) - - # Turn on logging - setup_logging() - - # try setting the cache - cache_controller: CacheController = ( - sess.cache_controller # type: ignore[attr-defined] - ) - cache_controller.cache_response(resp.request, resp.raw) - - # Now try to get it - if cache_controller.cached_request(resp.request): - print("Cached!") - else: - print("Not cached :(") - - -if __name__ == "__main__": - main() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py deleted file mode 100644 index 34a9eb8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py +++ /dev/null @@ -1,161 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import functools -import types -import zlib -from typing import TYPE_CHECKING, Any, Collection, Mapping - -from pip._vendor.requests.adapters import HTTPAdapter - -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import PERMANENT_REDIRECT_STATUSES, CacheController -from pip._vendor.cachecontrol.filewrapper import CallbackFileWrapper - -if TYPE_CHECKING: - from pip._vendor.requests import PreparedRequest, Response - from pip._vendor.urllib3 import HTTPResponse - - from pip._vendor.cachecontrol.cache import BaseCache - from pip._vendor.cachecontrol.heuristics import BaseHeuristic - from pip._vendor.cachecontrol.serialize import Serializer - - -class CacheControlAdapter(HTTPAdapter): - invalidating_methods = {"PUT", "PATCH", "DELETE"} - - def __init__( - self, - cache: BaseCache | None = None, - cache_etags: bool = True, - controller_class: type[CacheController] | None = None, - serializer: Serializer | None = None, - heuristic: BaseHeuristic | None = None, - cacheable_methods: Collection[str] | None = None, - *args: Any, - **kw: Any, - ) -> None: - super().__init__(*args, **kw) - self.cache = DictCache() if cache is None else cache - self.heuristic = heuristic - self.cacheable_methods = cacheable_methods or ("GET",) - - controller_factory = controller_class or CacheController - self.controller = controller_factory( - self.cache, cache_etags=cache_etags, serializer=serializer - ) - - def send( - self, - request: PreparedRequest, - stream: bool = False, - timeout: None | float | tuple[float, float] | tuple[float, None] = None, - verify: bool | str = True, - cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None, - proxies: Mapping[str, str] | None = None, - cacheable_methods: Collection[str] | None = None, - ) -> Response: - """ - Send a request. Use the request information to see if it - exists in the cache and cache the response if we need to and can. - """ - cacheable = cacheable_methods or self.cacheable_methods - if request.method in cacheable: - try: - cached_response = self.controller.cached_request(request) - except zlib.error: - cached_response = None - if cached_response: - return self.build_response(request, cached_response, from_cache=True) - - # check for etags and add headers if appropriate - request.headers.update(self.controller.conditional_headers(request)) - - resp = super().send(request, stream, timeout, verify, cert, proxies) - - return resp - - def build_response( # type: ignore[override] - self, - request: PreparedRequest, - response: HTTPResponse, - from_cache: bool = False, - cacheable_methods: Collection[str] | None = None, - ) -> Response: - """ - Build a response by making a request or using the cache. - - This will end up calling send and returning a potentially - cached response - """ - cacheable = cacheable_methods or self.cacheable_methods - if not from_cache and request.method in cacheable: - # Check for any heuristics that might update headers - # before trying to cache. - if self.heuristic: - response = self.heuristic.apply(response) - - # apply any expiration heuristics - if response.status == 304: - # We must have sent an ETag request. This could mean - # that we've been expired already or that we simply - # have an etag. In either case, we want to try and - # update the cache if that is the case. - cached_response = self.controller.update_cached_response( - request, response - ) - - if cached_response is not response: - from_cache = True - - # We are done with the server response, read a - # possible response body (compliant servers will - # not return one, but we cannot be 100% sure) and - # release the connection back to the pool. - response.read(decode_content=False) - response.release_conn() - - response = cached_response - - # We always cache the 301 responses - elif int(response.status) in PERMANENT_REDIRECT_STATUSES: - self.controller.cache_response(request, response) - else: - # Wrap the response file with a wrapper that will cache the - # response when the stream has been consumed. - response._fp = CallbackFileWrapper( # type: ignore[assignment] - response._fp, # type: ignore[arg-type] - functools.partial( - self.controller.cache_response, request, response - ), - ) - if response.chunked: - super_update_chunk_length = response._update_chunk_length - - def _update_chunk_length(self: HTTPResponse) -> None: - super_update_chunk_length() - if self.chunk_left == 0: - self._fp._close() # type: ignore[union-attr] - - response._update_chunk_length = types.MethodType( # type: ignore[method-assign] - _update_chunk_length, response - ) - - resp: Response = super().build_response(request, response) - - # See if we should invalidate the cache. - if request.method in self.invalidating_methods and resp.ok: - assert request.url is not None - cache_url = self.controller.cache_url(request.url) - self.cache.delete(cache_url) - - # Give the request a from_cache attr to let people use it - resp.from_cache = from_cache # type: ignore[attr-defined] - - return resp - - def close(self) -> None: - self.cache.close() - super().close() # type: ignore[no-untyped-call] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py deleted file mode 100644 index 91598e9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py +++ /dev/null @@ -1,75 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -""" -The cache object API for implementing caches. The default is a thread -safe in-memory dictionary. -""" - -from __future__ import annotations - -from threading import Lock -from typing import IO, TYPE_CHECKING, MutableMapping - -if TYPE_CHECKING: - from datetime import datetime - - -class BaseCache: - def get(self, key: str) -> bytes | None: - raise NotImplementedError() - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - raise NotImplementedError() - - def delete(self, key: str) -> None: - raise NotImplementedError() - - def close(self) -> None: - pass - - -class DictCache(BaseCache): - def __init__(self, init_dict: MutableMapping[str, bytes] | None = None) -> None: - self.lock = Lock() - self.data = init_dict or {} - - def get(self, key: str) -> bytes | None: - return self.data.get(key, None) - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - with self.lock: - self.data.update({key: value}) - - def delete(self, key: str) -> None: - with self.lock: - if key in self.data: - self.data.pop(key) - - -class SeparateBodyBaseCache(BaseCache): - """ - In this variant, the body is not stored mixed in with the metadata, but is - passed in (as a bytes-like object) in a separate call to ``set_body()``. - - That is, the expected interaction pattern is:: - - cache.set(key, serialized_metadata) - cache.set_body(key) - - Similarly, the body should be loaded separately via ``get_body()``. - """ - - def set_body(self, key: str, body: bytes) -> None: - raise NotImplementedError() - - def get_body(self, key: str) -> IO[bytes] | None: - """ - Return the body as file-like object. - """ - raise NotImplementedError() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py deleted file mode 100644 index 24ff469..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -from pip._vendor.cachecontrol.caches.file_cache import FileCache, SeparateBodyFileCache -from pip._vendor.cachecontrol.caches.redis_cache import RedisCache - -__all__ = ["FileCache", "SeparateBodyFileCache", "RedisCache"] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index b6334a9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc deleted file mode 100644 index fc9f745..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc deleted file mode 100644 index 298bdbc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py deleted file mode 100644 index 81d2ef4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +++ /dev/null @@ -1,182 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import hashlib -import os -from textwrap import dedent -from typing import IO, TYPE_CHECKING -from pathlib import Path - -from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache -from pip._vendor.cachecontrol.controller import CacheController - -if TYPE_CHECKING: - from datetime import datetime - - from filelock import BaseFileLock - - -def _secure_open_write(filename: str, fmode: int) -> IO[bytes]: - # We only want to write to this file, so open it in write only mode - flags = os.O_WRONLY - - # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only - # will open *new* files. - # We specify this because we want to ensure that the mode we pass is the - # mode of the file. - flags |= os.O_CREAT | os.O_EXCL - - # Do not follow symlinks to prevent someone from making a symlink that - # we follow and insecurely open a cache file. - if hasattr(os, "O_NOFOLLOW"): - flags |= os.O_NOFOLLOW - - # On Windows we'll mark this file as binary - if hasattr(os, "O_BINARY"): - flags |= os.O_BINARY - - # Before we open our file, we want to delete any existing file that is - # there - try: - os.remove(filename) - except OSError: - # The file must not exist already, so we can just skip ahead to opening - pass - - # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a - # race condition happens between the os.remove and this line, that an - # error will be raised. Because we utilize a lockfile this should only - # happen if someone is attempting to attack us. - fd = os.open(filename, flags, fmode) - try: - return os.fdopen(fd, "wb") - - except: - # An error occurred wrapping our FD in a file object - os.close(fd) - raise - - -class _FileCacheMixin: - """Shared implementation for both FileCache variants.""" - - def __init__( - self, - directory: str | Path, - forever: bool = False, - filemode: int = 0o0600, - dirmode: int = 0o0700, - lock_class: type[BaseFileLock] | None = None, - ) -> None: - try: - if lock_class is None: - from filelock import FileLock - - lock_class = FileLock - except ImportError: - notice = dedent( - """ - NOTE: In order to use the FileCache you must have - filelock installed. You can install it via pip: - pip install cachecontrol[filecache] - """ - ) - raise ImportError(notice) - - self.directory = directory - self.forever = forever - self.filemode = filemode - self.dirmode = dirmode - self.lock_class = lock_class - - @staticmethod - def encode(x: str) -> str: - return hashlib.sha224(x.encode()).hexdigest() - - def _fn(self, name: str) -> str: - # NOTE: This method should not change as some may depend on it. - # See: https://github.com/ionrock/cachecontrol/issues/63 - hashed = self.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key: str) -> bytes | None: - name = self._fn(key) - try: - with open(name, "rb") as fh: - return fh.read() - - except FileNotFoundError: - return None - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - name = self._fn(key) - self._write(name, value) - - def _write(self, path: str, data: bytes) -> None: - """ - Safely write the data to the given path. - """ - # Make sure the directory exists - try: - os.makedirs(os.path.dirname(path), self.dirmode) - except OSError: - pass - - with self.lock_class(path + ".lock"): - # Write our actual file - with _secure_open_write(path, self.filemode) as fh: - fh.write(data) - - def _delete(self, key: str, suffix: str) -> None: - name = self._fn(key) + suffix - if not self.forever: - try: - os.remove(name) - except FileNotFoundError: - pass - - -class FileCache(_FileCacheMixin, BaseCache): - """ - Traditional FileCache: body is stored in memory, so not suitable for large - downloads. - """ - - def delete(self, key: str) -> None: - self._delete(key, "") - - -class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache): - """ - Memory-efficient FileCache: body is stored in a separate file, reducing - peak memory usage. - """ - - def get_body(self, key: str) -> IO[bytes] | None: - name = self._fn(key) + ".body" - try: - return open(name, "rb") - except FileNotFoundError: - return None - - def set_body(self, key: str, body: bytes) -> None: - name = self._fn(key) + ".body" - self._write(name, body) - - def delete(self, key: str) -> None: - self._delete(key, "") - self._delete(key, ".body") - - -def url_to_file_path(url: str, filecache: FileCache) -> str: - """Return the file cache path based on the URL. - - This does not ensure the file exists! - """ - key = CacheController.cache_url(url) - return filecache._fn(key) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py deleted file mode 100644 index f4f68c4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - - -from datetime import datetime, timezone -from typing import TYPE_CHECKING - -from pip._vendor.cachecontrol.cache import BaseCache - -if TYPE_CHECKING: - from redis import Redis - - -class RedisCache(BaseCache): - def __init__(self, conn: Redis[bytes]) -> None: - self.conn = conn - - def get(self, key: str) -> bytes | None: - return self.conn.get(key) - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - if not expires: - self.conn.set(key, value) - elif isinstance(expires, datetime): - now_utc = datetime.now(timezone.utc) - if expires.tzinfo is None: - now_utc = now_utc.replace(tzinfo=None) - delta = expires - now_utc - self.conn.setex(key, int(delta.total_seconds()), value) - else: - self.conn.setex(key, expires, value) - - def delete(self, key: str) -> None: - self.conn.delete(key) - - def clear(self) -> None: - """Helper for clearing all the keys in a database. Use with - caution!""" - for key in self.conn.keys(): - self.conn.delete(key) - - def close(self) -> None: - """Redis uses connection pooling, no need to close the connection.""" - pass diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py deleted file mode 100644 index f0ff6e1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py +++ /dev/null @@ -1,500 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -""" -The httplib2 algorithms ported for use with requests. -""" - -from __future__ import annotations - -import calendar -import logging -import re -import time -from email.utils import parsedate_tz -from typing import TYPE_CHECKING, Collection, Mapping - -from pip._vendor.requests.structures import CaseInsensitiveDict - -from pip._vendor.cachecontrol.cache import DictCache, SeparateBodyBaseCache -from pip._vendor.cachecontrol.serialize import Serializer - -if TYPE_CHECKING: - from typing import Literal - - from pip._vendor.requests import PreparedRequest - from pip._vendor.urllib3 import HTTPResponse - - from pip._vendor.cachecontrol.cache import BaseCache - -logger = logging.getLogger(__name__) - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - -PERMANENT_REDIRECT_STATUSES = (301, 308) - - -def parse_uri(uri: str) -> tuple[str, str, str, str, str]: - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - match = URI.match(uri) - assert match is not None - groups = match.groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -class CacheController: - """An interface to see if request should cached or not.""" - - def __init__( - self, - cache: BaseCache | None = None, - cache_etags: bool = True, - serializer: Serializer | None = None, - status_codes: Collection[int] | None = None, - ): - self.cache = DictCache() if cache is None else cache - self.cache_etags = cache_etags - self.serializer = serializer or Serializer() - self.cacheable_status_codes = status_codes or (200, 203, 300, 301, 308) - - @classmethod - def _urlnorm(cls, uri: str) -> str: - """Normalize the URL to create a safe key for the cache""" - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise Exception("Only absolute URIs are allowed. uri = %s" % uri) - - scheme = scheme.lower() - authority = authority.lower() - - if not path: - path = "/" - - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - defrag_uri = scheme + "://" + authority + request_uri - - return defrag_uri - - @classmethod - def cache_url(cls, uri: str) -> str: - return cls._urlnorm(uri) - - def parse_cache_control(self, headers: Mapping[str, str]) -> dict[str, int | None]: - known_directives = { - # https://tools.ietf.org/html/rfc7234#section-5.2 - "max-age": (int, True), - "max-stale": (int, False), - "min-fresh": (int, True), - "no-cache": (None, False), - "no-store": (None, False), - "no-transform": (None, False), - "only-if-cached": (None, False), - "must-revalidate": (None, False), - "public": (None, False), - "private": (None, False), - "proxy-revalidate": (None, False), - "s-maxage": (int, True), - } - - cc_headers = headers.get("cache-control", headers.get("Cache-Control", "")) - - retval: dict[str, int | None] = {} - - for cc_directive in cc_headers.split(","): - if not cc_directive.strip(): - continue - - parts = cc_directive.split("=", 1) - directive = parts[0].strip() - - try: - typ, required = known_directives[directive] - except KeyError: - logger.debug("Ignoring unknown cache-control directive: %s", directive) - continue - - if not typ or not required: - retval[directive] = None - if typ: - try: - retval[directive] = typ(parts[1].strip()) - except IndexError: - if required: - logger.debug( - "Missing value for cache-control " "directive: %s", - directive, - ) - except ValueError: - logger.debug( - "Invalid value for cache-control directive " "%s, must be %s", - directive, - typ.__name__, - ) - - return retval - - def _load_from_cache(self, request: PreparedRequest) -> HTTPResponse | None: - """ - Load a cached response, or return None if it's not available. - """ - # We do not support caching of partial content: so if the request contains a - # Range header then we don't want to load anything from the cache. - if "Range" in request.headers: - return None - - cache_url = request.url - assert cache_url is not None - cache_data = self.cache.get(cache_url) - if cache_data is None: - logger.debug("No cache entry available") - return None - - if isinstance(self.cache, SeparateBodyBaseCache): - body_file = self.cache.get_body(cache_url) - else: - body_file = None - - result = self.serializer.loads(request, cache_data, body_file) - if result is None: - logger.warning("Cache entry deserialization failed, entry ignored") - return result - - def cached_request(self, request: PreparedRequest) -> HTTPResponse | Literal[False]: - """ - Return a cached response if it exists in the cache, otherwise - return False. - """ - assert request.url is not None - cache_url = self.cache_url(request.url) - logger.debug('Looking up "%s" in the cache', cache_url) - cc = self.parse_cache_control(request.headers) - - # Bail out if the request insists on fresh data - if "no-cache" in cc: - logger.debug('Request header has "no-cache", cache bypassed') - return False - - if "max-age" in cc and cc["max-age"] == 0: - logger.debug('Request header has "max_age" as 0, cache bypassed') - return False - - # Check whether we can load the response from the cache: - resp = self._load_from_cache(request) - if not resp: - return False - - # If we have a cached permanent redirect, return it immediately. We - # don't need to test our response for other headers b/c it is - # intrinsically "cacheable" as it is Permanent. - # - # See: - # https://tools.ietf.org/html/rfc7231#section-6.4.2 - # - # Client can try to refresh the value by repeating the request - # with cache busting headers as usual (ie no-cache). - if int(resp.status) in PERMANENT_REDIRECT_STATUSES: - msg = ( - "Returning cached permanent redirect response " - "(ignoring date and etag information)" - ) - logger.debug(msg) - return resp - - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) - if not headers or "date" not in headers: - if "etag" not in headers: - # Without date or etag, the cached response can never be used - # and should be deleted. - logger.debug("Purging cached response: no date or etag") - self.cache.delete(cache_url) - logger.debug("Ignoring cached response: no date") - return False - - now = time.time() - time_tuple = parsedate_tz(headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - current_age = max(0, now - date) - logger.debug("Current age based on date: %i", current_age) - - # TODO: There is an assumption that the result will be a - # urllib3 response object. This may not be best since we - # could probably avoid instantiating or constructing the - # response until we know we need it. - resp_cc = self.parse_cache_control(headers) - - # determine freshness - freshness_lifetime = 0 - - # Check the max-age pragma in the cache control header - max_age = resp_cc.get("max-age") - if max_age is not None: - freshness_lifetime = max_age - logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime) - - # If there isn't a max-age, check for an expires header - elif "expires" in headers: - expires = parsedate_tz(headers["expires"]) - if expires is not None: - expire_time = calendar.timegm(expires[:6]) - date - freshness_lifetime = max(0, expire_time) - logger.debug("Freshness lifetime from expires: %i", freshness_lifetime) - - # Determine if we are setting freshness limit in the - # request. Note, this overrides what was in the response. - max_age = cc.get("max-age") - if max_age is not None: - freshness_lifetime = max_age - logger.debug( - "Freshness lifetime from request max-age: %i", freshness_lifetime - ) - - min_fresh = cc.get("min-fresh") - if min_fresh is not None: - # adjust our current age by our min fresh - current_age += min_fresh - logger.debug("Adjusted current age from min-fresh: %i", current_age) - - # Return entry if it is fresh enough - if freshness_lifetime > current_age: - logger.debug('The response is "fresh", returning cached response') - logger.debug("%i > %i", freshness_lifetime, current_age) - return resp - - # we're not fresh. If we don't have an Etag, clear it out - if "etag" not in headers: - logger.debug('The cached response is "stale" with no etag, purging') - self.cache.delete(cache_url) - - # return the original handler - return False - - def conditional_headers(self, request: PreparedRequest) -> dict[str, str]: - resp = self._load_from_cache(request) - new_headers = {} - - if resp: - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) - - if "etag" in headers: - new_headers["If-None-Match"] = headers["ETag"] - - if "last-modified" in headers: - new_headers["If-Modified-Since"] = headers["Last-Modified"] - - return new_headers - - def _cache_set( - self, - cache_url: str, - request: PreparedRequest, - response: HTTPResponse, - body: bytes | None = None, - expires_time: int | None = None, - ) -> None: - """ - Store the data in the cache. - """ - if isinstance(self.cache, SeparateBodyBaseCache): - # We pass in the body separately; just put a placeholder empty - # string in the metadata. - self.cache.set( - cache_url, - self.serializer.dumps(request, response, b""), - expires=expires_time, - ) - # body is None can happen when, for example, we're only updating - # headers, as is the case in update_cached_response(). - if body is not None: - self.cache.set_body(cache_url, body) - else: - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body), - expires=expires_time, - ) - - def cache_response( - self, - request: PreparedRequest, - response: HTTPResponse, - body: bytes | None = None, - status_codes: Collection[int] | None = None, - ) -> None: - """ - Algorithm for caching requests. - - This assumes a requests Response object. - """ - # From httplib2: Don't cache 206's since we aren't going to - # handle byte range requests - cacheable_status_codes = status_codes or self.cacheable_status_codes - if response.status not in cacheable_status_codes: - logger.debug( - "Status code %s not in %s", response.status, cacheable_status_codes - ) - return - - response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - response.headers - ) - - if "date" in response_headers: - time_tuple = parsedate_tz(response_headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - else: - date = 0 - - # If we've been given a body, our response has a Content-Length, that - # Content-Length is valid then we can check to see if the body we've - # been given matches the expected size, and if it doesn't we'll just - # skip trying to cache it. - if ( - body is not None - and "content-length" in response_headers - and response_headers["content-length"].isdigit() - and int(response_headers["content-length"]) != len(body) - ): - return - - cc_req = self.parse_cache_control(request.headers) - cc = self.parse_cache_control(response_headers) - - assert request.url is not None - cache_url = self.cache_url(request.url) - logger.debug('Updating cache with response from "%s"', cache_url) - - # Delete it from the cache if we happen to have it stored there - no_store = False - if "no-store" in cc: - no_store = True - logger.debug('Response header has "no-store"') - if "no-store" in cc_req: - no_store = True - logger.debug('Request header has "no-store"') - if no_store and self.cache.get(cache_url): - logger.debug('Purging existing cache entry to honor "no-store"') - self.cache.delete(cache_url) - if no_store: - return - - # https://tools.ietf.org/html/rfc7234#section-4.1: - # A Vary header field-value of "*" always fails to match. - # Storing such a response leads to a deserialization warning - # during cache lookup and is not allowed to ever be served, - # so storing it can be avoided. - if "*" in response_headers.get("vary", ""): - logger.debug('Response header has "Vary: *"') - return - - # If we've been given an etag, then keep the response - if self.cache_etags and "etag" in response_headers: - expires_time = 0 - if response_headers.get("expires"): - expires = parsedate_tz(response_headers["expires"]) - if expires is not None: - expires_time = calendar.timegm(expires[:6]) - date - - expires_time = max(expires_time, 14 * 86400) - - logger.debug(f"etag object cached for {expires_time} seconds") - logger.debug("Caching due to etag") - self._cache_set(cache_url, request, response, body, expires_time) - - # Add to the cache any permanent redirects. We do this before looking - # that the Date headers. - elif int(response.status) in PERMANENT_REDIRECT_STATUSES: - logger.debug("Caching permanent redirect") - self._cache_set(cache_url, request, response, b"") - - # Add to the cache if the response headers demand it. If there - # is no date header then we can't do anything about expiring - # the cache. - elif "date" in response_headers: - time_tuple = parsedate_tz(response_headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - # cache when there is a max-age > 0 - max_age = cc.get("max-age") - if max_age is not None and max_age > 0: - logger.debug("Caching b/c date exists and max-age > 0") - expires_time = max_age - self._cache_set( - cache_url, - request, - response, - body, - expires_time, - ) - - # If the request can expire, it means we should cache it - # in the meantime. - elif "expires" in response_headers: - if response_headers["expires"]: - expires = parsedate_tz(response_headers["expires"]) - if expires is not None: - expires_time = calendar.timegm(expires[:6]) - date - else: - expires_time = None - - logger.debug( - "Caching b/c of expires header. expires in {} seconds".format( - expires_time - ) - ) - self._cache_set( - cache_url, - request, - response, - body, - expires_time, - ) - - def update_cached_response( - self, request: PreparedRequest, response: HTTPResponse - ) -> HTTPResponse: - """On a 304 we will get a new set of headers that we want to - update our cached value with, assuming we have one. - - This should only ever be called when we've sent an ETag and - gotten a 304 as the response. - """ - assert request.url is not None - cache_url = self.cache_url(request.url) - cached_response = self._load_from_cache(request) - - if not cached_response: - # we didn't have a cached response - return response - - # Lets update our headers with the headers from the new request: - # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 - # - # The server isn't supposed to send headers that would make - # the cached body invalid. But... just in case, we'll be sure - # to strip out ones we know that might be problmatic due to - # typical assumptions. - excluded_headers = ["content-length"] - - cached_response.headers.update( - { - k: v - for k, v in response.headers.items() - if k.lower() not in excluded_headers - } - ) - - # we want a 200 b/c we have content via the cache - cached_response.status = 200 - - # update our cache - self._cache_set(cache_url, request, cached_response) - - return cached_response diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py deleted file mode 100644 index 37d2fa5..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py +++ /dev/null @@ -1,119 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import mmap -from tempfile import NamedTemporaryFile -from typing import TYPE_CHECKING, Any, Callable - -if TYPE_CHECKING: - from http.client import HTTPResponse - - -class CallbackFileWrapper: - """ - Small wrapper around a fp object which will tee everything read into a - buffer, and when that file is closed it will execute a callback with the - contents of that buffer. - - All attributes are proxied to the underlying file object. - - This class uses members with a double underscore (__) leading prefix so as - not to accidentally shadow an attribute. - - The data is stored in a temporary file until it is all available. As long - as the temporary files directory is disk-based (sometimes it's a - memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory - pressure is high. For small files the disk usually won't be used at all, - it'll all be in the filesystem memory cache, so there should be no - performance impact. - """ - - def __init__( - self, fp: HTTPResponse, callback: Callable[[bytes], None] | None - ) -> None: - self.__buf = NamedTemporaryFile("rb+", delete=True) - self.__fp = fp - self.__callback = callback - - def __getattr__(self, name: str) -> Any: - # The vagaries of garbage collection means that self.__fp is - # not always set. By using __getattribute__ and the private - # name[0] allows looking up the attribute value and raising an - # AttributeError when it doesn't exist. This stop things from - # infinitely recursing calls to getattr in the case where - # self.__fp hasn't been set. - # - # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers - fp = self.__getattribute__("_CallbackFileWrapper__fp") - return getattr(fp, name) - - def __is_fp_closed(self) -> bool: - try: - return self.__fp.fp is None - - except AttributeError: - pass - - try: - closed: bool = self.__fp.closed - return closed - - except AttributeError: - pass - - # We just don't cache it then. - # TODO: Add some logging here... - return False - - def _close(self) -> None: - if self.__callback: - if self.__buf.tell() == 0: - # Empty file: - result = b"" - else: - # Return the data without actually loading it into memory, - # relying on Python's buffer API and mmap(). mmap() just gives - # a view directly into the filesystem's memory cache, so it - # doesn't result in duplicate memory use. - self.__buf.seek(0, 0) - result = memoryview( - mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ) - ) - self.__callback(result) - - # We assign this to None here, because otherwise we can get into - # really tricky problems where the CPython interpreter dead locks - # because the callback is holding a reference to something which - # has a __del__ method. Setting this to None breaks the cycle - # and allows the garbage collector to do it's thing normally. - self.__callback = None - - # Closing the temporary file releases memory and frees disk space. - # Important when caching big files. - self.__buf.close() - - def read(self, amt: int | None = None) -> bytes: - data: bytes = self.__fp.read(amt) - if data: - # We may be dealing with b'', a sign that things are over: - # it's passed e.g. after we've already closed self.__buf. - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data - - def _safe_read(self, amt: int) -> bytes: - data: bytes = self.__fp._safe_read(amt) # type: ignore[attr-defined] - if amt == 2 and data == b"\r\n": - # urllib executes this read to toss the CRLF at the end - # of the chunk. - return data - - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py deleted file mode 100644 index b778c4f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py +++ /dev/null @@ -1,157 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import calendar -import time -from datetime import datetime, timedelta, timezone -from email.utils import formatdate, parsedate, parsedate_tz -from typing import TYPE_CHECKING, Any, Mapping - -if TYPE_CHECKING: - from pip._vendor.urllib3 import HTTPResponse - -TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" - - -def expire_after(delta: timedelta, date: datetime | None = None) -> datetime: - date = date or datetime.now(timezone.utc) - return date + delta - - -def datetime_to_header(dt: datetime) -> str: - return formatdate(calendar.timegm(dt.timetuple())) - - -class BaseHeuristic: - def warning(self, response: HTTPResponse) -> str | None: - """ - Return a valid 1xx warning header value describing the cache - adjustments. - - The response is provided too allow warnings like 113 - http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need - to explicitly say response is over 24 hours old. - """ - return '110 - "Response is Stale"' - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - """Update the response headers with any new headers. - - NOTE: This SHOULD always include some Warning header to - signify that the response was cached by the client, not - by way of the provided headers. - """ - return {} - - def apply(self, response: HTTPResponse) -> HTTPResponse: - updated_headers = self.update_headers(response) - - if updated_headers: - response.headers.update(updated_headers) - warning_header_value = self.warning(response) - if warning_header_value is not None: - response.headers.update({"Warning": warning_header_value}) - - return response - - -class OneDayCache(BaseHeuristic): - """ - Cache the response by providing an expires 1 day in the - future. - """ - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - headers = {} - - if "expires" not in response.headers: - date = parsedate(response.headers["date"]) - expires = expire_after( - timedelta(days=1), - date=datetime(*date[:6], tzinfo=timezone.utc), # type: ignore[index,misc] - ) - headers["expires"] = datetime_to_header(expires) - headers["cache-control"] = "public" - return headers - - -class ExpiresAfter(BaseHeuristic): - """ - Cache **all** requests for a defined time period. - """ - - def __init__(self, **kw: Any) -> None: - self.delta = timedelta(**kw) - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - expires = expire_after(self.delta) - return {"expires": datetime_to_header(expires), "cache-control": "public"} - - def warning(self, response: HTTPResponse) -> str | None: - tmpl = "110 - Automatically cached for %s. Response might be stale" - return tmpl % self.delta - - -class LastModified(BaseHeuristic): - """ - If there is no Expires header already, fall back on Last-Modified - using the heuristic from - http://tools.ietf.org/html/rfc7234#section-4.2.2 - to calculate a reasonable value. - - Firefox also does something like this per - https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ - http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 - Unlike mozilla we limit this to 24-hr. - """ - - cacheable_by_default_statuses = { - 200, - 203, - 204, - 206, - 300, - 301, - 404, - 405, - 410, - 414, - 501, - } - - def update_headers(self, resp: HTTPResponse) -> dict[str, str]: - headers: Mapping[str, str] = resp.headers - - if "expires" in headers: - return {} - - if "cache-control" in headers and headers["cache-control"] != "public": - return {} - - if resp.status not in self.cacheable_by_default_statuses: - return {} - - if "date" not in headers or "last-modified" not in headers: - return {} - - time_tuple = parsedate_tz(headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - last_modified = parsedate(headers["last-modified"]) - if last_modified is None: - return {} - - now = time.time() - current_age = max(0, now - date) - delta = date - calendar.timegm(last_modified) - freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) - if freshness_lifetime <= current_age: - return {} - - expires = date + freshness_lifetime - return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))} - - def warning(self, resp: HTTPResponse) -> str | None: - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py deleted file mode 100644 index a49487a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py +++ /dev/null @@ -1,146 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import io -from typing import IO, TYPE_CHECKING, Any, Mapping, cast - -from pip._vendor import msgpack -from pip._vendor.requests.structures import CaseInsensitiveDict -from pip._vendor.urllib3 import HTTPResponse - -if TYPE_CHECKING: - from pip._vendor.requests import PreparedRequest - - -class Serializer: - serde_version = "4" - - def dumps( - self, - request: PreparedRequest, - response: HTTPResponse, - body: bytes | None = None, - ) -> bytes: - response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - response.headers - ) - - if body is None: - # When a body isn't passed in, we'll read the response. We - # also update the response with a new file handler to be - # sure it acts as though it was never read. - body = response.read(decode_content=False) - response._fp = io.BytesIO(body) # type: ignore[assignment] - response.length_remaining = len(body) - - data = { - "response": { - "body": body, # Empty bytestring if body is stored separately - "headers": {str(k): str(v) for k, v in response.headers.items()}, - "status": response.status, - "version": response.version, - "reason": str(response.reason), - "decode_content": response.decode_content, - } - } - - # Construct our vary headers - data["vary"] = {} - if "vary" in response_headers: - varied_headers = response_headers["vary"].split(",") - for header in varied_headers: - header = str(header).strip() - header_value = request.headers.get(header, None) - if header_value is not None: - header_value = str(header_value) - data["vary"][header] = header_value - - return b",".join([f"cc={self.serde_version}".encode(), self.serialize(data)]) - - def serialize(self, data: dict[str, Any]) -> bytes: - return cast(bytes, msgpack.dumps(data, use_bin_type=True)) - - def loads( - self, - request: PreparedRequest, - data: bytes, - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - # Short circuit if we've been given an empty set of data - if not data: - return None - - # Previous versions of this library supported other serialization - # formats, but these have all been removed. - if not data.startswith(f"cc={self.serde_version},".encode()): - return None - - data = data[5:] - return self._loads_v4(request, data, body_file) - - def prepare_response( - self, - request: PreparedRequest, - cached: Mapping[str, Any], - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - """Verify our vary headers match and construct a real urllib3 - HTTPResponse object. - """ - # Special case the '*' Vary value as it means we cannot actually - # determine if the cached response is suitable for this request. - # This case is also handled in the controller code when creating - # a cache entry, but is left here for backwards compatibility. - if "*" in cached.get("vary", {}): - return None - - # Ensure that the Vary headers for the cached response match our - # request - for header, value in cached.get("vary", {}).items(): - if request.headers.get(header, None) != value: - return None - - body_raw = cached["response"].pop("body") - - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - data=cached["response"]["headers"] - ) - if headers.get("transfer-encoding", "") == "chunked": - headers.pop("transfer-encoding") - - cached["response"]["headers"] = headers - - try: - body: IO[bytes] - if body_file is None: - body = io.BytesIO(body_raw) - else: - body = body_file - except TypeError: - # This can happen if cachecontrol serialized to v1 format (pickle) - # using Python 2. A Python 2 str(byte string) will be unpickled as - # a Python 3 str (unicode string), which will cause the above to - # fail with: - # - # TypeError: 'str' does not support the buffer interface - body = io.BytesIO(body_raw.encode("utf8")) - - # Discard any `strict` parameter serialized by older version of cachecontrol. - cached["response"].pop("strict", None) - - return HTTPResponse(body=body, preload_content=False, **cached["response"]) - - def _loads_v4( - self, - request: PreparedRequest, - data: bytes, - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - try: - cached = msgpack.loads(data, raw=False) - except ValueError: - return None - - return self.prepare_response(request, cached, body_file) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py b/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py deleted file mode 100644 index f618bc3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -from typing import TYPE_CHECKING, Collection - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache - -if TYPE_CHECKING: - from pip._vendor import requests - - from pip._vendor.cachecontrol.cache import BaseCache - from pip._vendor.cachecontrol.controller import CacheController - from pip._vendor.cachecontrol.heuristics import BaseHeuristic - from pip._vendor.cachecontrol.serialize import Serializer - - -def CacheControl( - sess: requests.Session, - cache: BaseCache | None = None, - cache_etags: bool = True, - serializer: Serializer | None = None, - heuristic: BaseHeuristic | None = None, - controller_class: type[CacheController] | None = None, - adapter_class: type[CacheControlAdapter] | None = None, - cacheable_methods: Collection[str] | None = None, -) -> requests.Session: - cache = DictCache() if cache is None else cache - adapter_class = adapter_class or CacheControlAdapter - adapter = adapter_class( - cache, - cache_etags=cache_etags, - serializer=serializer, - heuristic=heuristic, - controller_class=controller_class, - cacheable_methods=cacheable_methods, - ) - sess.mount("http://", adapter) - sess.mount("https://", adapter) - - return sess diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py deleted file mode 100644 index f61d77f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .core import contents, where - -__all__ = ["contents", "where"] -__version__ = "2024.08.30" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py deleted file mode 100644 index 0037634..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py +++ /dev/null @@ -1,12 +0,0 @@ -import argparse - -from pip._vendor.certifi import contents, where - -parser = argparse.ArgumentParser() -parser.add_argument("-c", "--contents", action="store_true") -args = parser.parse_args() - -if args.contents: - print(contents()) -else: - print(where()) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c20a40a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index 536c7b6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc deleted file mode 100644 index 675b0ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem deleted file mode 100644 index 3c165a1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem +++ /dev/null @@ -1,4929 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G4" -# Serial: 289383649854506086828220374796556676440 -# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 -# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 -# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw -gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL -Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg -MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw -BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 -MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 -c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ -bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ -2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E -T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j -5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM -C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T -DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX -wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A -2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm -nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 -dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl -N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj -c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS -5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS -Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr -hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ -B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI -AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw -H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ -b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk -2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol -IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk -5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY -n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV -BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk -YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV -BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN -MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF -UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD -VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v -dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj -cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q -yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH -2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX -H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL -zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR -p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz -W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ -SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn -LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 -n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B -u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj -o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC -AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L -9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej -rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK -pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 -vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq -OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ -/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 -2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI -+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 -MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo -tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 -MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu -MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV -BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw -MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg -U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ -n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q -p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq -NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF -8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 -HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa -mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi -7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF -ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P -qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ -v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 -Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 -vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD -ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 -WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo -zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR -5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ -GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf -5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq -0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D -P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM -qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP -0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf -E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 1977337328857672817 -# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 -# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe -# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 -MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc -tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd -IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j -b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC -AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw -ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m -iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF -Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ -hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P -Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE -EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV -1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t -CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR -5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw -f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 -ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK -GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV ------END CERTIFICATE----- - -# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus ECC Root CA" -# Serial: 630369271402956006249506845124680065938238527194 -# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 -# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 -# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 ------BEGIN CERTIFICATE----- -MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw -RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY -BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz -MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u -LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 -v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd -e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw -V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA -AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG -GJTO ------END CERTIFICATE----- - -# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus Root CA" -# Serial: 387574501246983434957692974888460947164905180485 -# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc -# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 -# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 ------BEGIN CERTIFICATE----- -MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL -BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x -FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx -MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s -THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc -IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU -AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ -GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 -8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH -flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt -J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim -0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN -pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ -UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW -OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB -AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet -8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd -nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j -bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM -Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv -TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS -S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr -I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 -b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB -UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P -Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven -sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X2 O=Internet Security Research Group -# Subject: CN=ISRG Root X2 O=Internet Security Research Group -# Label: "ISRG Root X2" -# Serial: 87493402998870891108772069816698636114 -# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 -# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af -# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- - -# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Label: "HiPKI Root CA - G1" -# Serial: 60966262342023497858655262305426234976 -# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 -# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 -# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc ------BEGIN CERTIFICATE----- -MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa -Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 -YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw -qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv -Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 -lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz -Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ -KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK -FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj -HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr -y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ -/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM -a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 -fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG -SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi -7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc -SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza -ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc -XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg -iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho -L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF -Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr -kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ -vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU -YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 159662223612894884239637590694 -# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc -# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 -# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 ------BEGIN CERTIFICATE----- -MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD -VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw -MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g -UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT -BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx -uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV -HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ -+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 -bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 159662320309726417404178440727 -# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 -# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a -# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo -27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w -Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw -TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl -qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH -szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 -Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk -MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p -aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN -VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb -C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe -QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy -h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 -7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J -ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef -MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ -Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT -6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ -0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm -2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb -bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 159662449406622349769042896298 -# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc -# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 -# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt -nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY -6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu -MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k -RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg -f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV -+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo -dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa -G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq -gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H -vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 -0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC -B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u -NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg -yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev -HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 -xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR -TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg -JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV -7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl -6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 159662495401136852707857743206 -# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 -# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 -# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G -jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 -4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 -VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm -ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 159662532700760215368942768210 -# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 -# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 -# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi -QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR -HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D -9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 -p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD ------END CERTIFICATE----- - -# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj -# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj -# Label: "Telia Root CA v2" -# Serial: 7288924052977061235122729490515358 -# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 -# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd -# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx -CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE -AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 -NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ -MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq -AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 -vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 -lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD -n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT -7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o -6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC -TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 -WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R -DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI -pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj -YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy -rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ -8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi -0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM -A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS -SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K -TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF -6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er -3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt -Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT -VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW -ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA -rBPuUBQemMc= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 1 2020" -# Serial: 165870826978392376648679885835942448534 -# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed -# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 -# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 -NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS -zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 -QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ -VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW -wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV -dWNbFJWcHwHP2NVypw87 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 1 2020" -# Serial: 126288379621884218666039612629459926992 -# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e -# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 -# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 -NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC -/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD -wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 -OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA -y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb -gfM0agPnIjhQW+0ZT0MW ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS ECC P384 Root G5" -# Serial: 13129116028163249804115411775095713523 -# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed -# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee -# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 ------BEGIN CERTIFICATE----- -MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp -Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 -MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ -bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS -7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp -0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS -B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 -BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ -LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 -DXZDjC5Ty3zfDBeWUA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS RSA4096 Root G5" -# Serial: 11930366277458970227240571539258396554 -# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 -# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 -# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN -MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT -HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN -NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs -IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ -ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 -2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp -wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM -pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD -nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po -sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx -Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd -Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX -KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe -XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL -tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv -TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw -GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H -PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF -O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ -REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik -AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv -/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ -p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw -MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF -qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK -ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root R1 O=Certainly -# Subject: CN=Certainly Root R1 O=Certainly -# Label: "Certainly Root R1" -# Serial: 188833316161142517227353805653483829216 -# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 -# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af -# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw -PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy -dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 -YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 -1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT -vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed -aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 -1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 -r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 -cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ -wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ -6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA -2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH -Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR -eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u -d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr -PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d -8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi -1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd -rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di -taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 -lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj -yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn -Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy -yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n -wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 -OV+KmalBWQewLK8= ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root E1 O=Certainly -# Subject: CN=Certainly Root E1 O=Certainly -# Label: "Certainly Root E1" -# Serial: 8168531406727139161245376702891150584 -# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 -# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b -# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 ------BEGIN CERTIFICATE----- -MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw -CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu -bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ -BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s -eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK -+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 -QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 -hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm -ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG -BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR ------END CERTIFICATE----- - -# Issuer: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication RootCA3" -# Serial: 16247922307909811815 -# MD5 Fingerprint: 1c:9a:16:ff:9e:5c:e0:4d:8a:14:01:f4:35:5d:29:26 -# SHA1 Fingerprint: c3:03:c8:22:74:92:e5:61:a2:9c:5f:79:91:2b:1e:44:13:91:30:3a -# SHA256 Fingerprint: 24:a5:5c:2a:b0:51:44:2d:06:17:76:65:41:23:9a:4a:d0:32:d7:c5:51:75:aa:34:ff:de:2f:bc:4f:5c:52:94 ------BEGIN CERTIFICATE----- -MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNV -BAYTAkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScw -JQYDVQQDEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2 -MDYxNzE2WhcNMzgwMTE4MDYxNzE2WjBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UEAxMeU2VjdXJpdHkg -Q29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltzkBtnTCHsXzW7OT4r -CmDvu20rhvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOzQD11EKzA -lrenfna84xtSGc4RHwsENPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MG -TfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF7 -9+qMHIjH7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGmnpjKIG58u4iFW/vAEGK7 -8vknR+/RiTlDxN/e4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtYXLVqAvO4 -g160a75BflcJdURQVc1aEWEhCmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3we -GVPKp7FKFSBWFHA9K4IsD50VHUeAR/94mQ4xr28+j+2GaR57GIgUssL8gjMunEst -+3A7caoreyYn8xrC3PsXuKHqy6C0rtOUfnrQq8PsOC0RLoi/1D+tEjtCrI8Cbn3M -0V9hvqG8OmpI6iZVIhZdXw3/JzOfGAN0iltSIEdrRU0id4xVJ/CvHozJgyJUt5rQ -T9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0VcwCBEF/VfR2ccCAwEAAaNCMEAw -HQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybS -YpOnpSNyByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PA -FNr0Y/Dq9HHuTofjcan0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd -9XbXv8S2gVj/yP9kaWJ5rW4OH3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQI -UYWg9by0F1jqClx6vWPGOi//lkkZhOpn2ASxYfQAW0q3nHE3GYV5v4GwxxMOdnE+ -OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQDdwj98ClZXSEIx2C/pHF7uNke -gr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO0QR4ynKudtml+LLf -iAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU1cXrvMUV -nuiZIesnKwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD -2NCcnWXL0CsnMQMeNuE9dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI// -1ZqmfHAuc1Uh6N//g7kdPjIe1qZ9LPFm6Vwdp6POXiUyK+OVrCoHzrQoeIY8Laad -TdJ0MN1kURXbg4NR16/9M51NZg== ------END CERTIFICATE----- - -# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication ECC RootCA1" -# Serial: 15446673492073852651 -# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 -# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 -# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 ------BEGIN CERTIFICATE----- -MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT -AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD -VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx -NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT -HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 -IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl -dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK -ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu -9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O -be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA1" -# Serial: 113562791157148395269083148143378328608 -# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 -# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a -# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU -MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI -T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz -MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF -SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh -bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z -xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ -spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 -58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR -at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll -5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq -nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK -V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ -pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO -z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn -jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ -WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF -7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 -YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli -awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u -+2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 -X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN -SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo -P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI -+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz -znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 -eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 -YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy -r/6zcCwupvI= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA2" -# Serial: 58605626836079930195615843123109055211 -# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c -# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 -# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 ------BEGIN CERTIFICATE----- -MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw -CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ -VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy -MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ -TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS -b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B -IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ -+kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK -sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA -94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B -43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root E46" -# Serial: 88989738453351742415770396670917916916 -# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 -# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a -# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 ------BEGIN CERTIFICATE----- -MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw -CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T -ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN -MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG -A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT -ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC -WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ -6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B -Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa -qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q -4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root R46" -# Serial: 156256931880233212765902055439220583700 -# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 -# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 -# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD -Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw -HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY -MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp -YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa -ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz -SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf -iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X -ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 -IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS -VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE -SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu -+Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt -8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L -HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt -zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P -AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c -mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ -YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 -gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA -Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB -JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX -DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui -TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 -dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 -LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp -0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY -QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS RSA Root CA 2022" -# Serial: 148535279242832292258835760425842727825 -# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da -# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca -# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed ------BEGIN CERTIFICATE----- -MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO -MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD -DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX -DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw -b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP -L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY -t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins -S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 -PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO -L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 -R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w -dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS -+YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS -d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG -AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f -gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z -NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt -hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM -QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf -R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ -DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW -P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy -lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq -bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w -AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q -r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji -Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU -98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS ECC Root CA 2022" -# Serial: 26605119622390491762507526719404364228 -# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 -# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 -# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT -U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 -MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh -dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm -acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN -SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME -GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW -uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp -15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN -b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA ECC TLS 2021" -# Serial: 81873346711060652204712539181482831616 -# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 -# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd -# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 ------BEGIN CERTIFICATE----- -MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w -LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w -CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 -MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF -Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X -tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 -AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 -KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD -aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu -CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo -9H1/IISpQuQo ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA RSA TLS 2021" -# Serial: 111436099570196163832749341232207667876 -# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 -# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 -# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f ------BEGIN CERTIFICATE----- -MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM -MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx -MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 -MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD -QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z -4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv -Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ -kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs -GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln -nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh -3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD -0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy -geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 -ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB -c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI -pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS -4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs -o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ -qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw -xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM -rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 -AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR -0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY -o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 -dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE -oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G3" -# Serial: 576386314500428537169965010905813481816650257167 -# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 -# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 -# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 ------BEGIN CERTIFICATE----- -MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM -BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe -Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw -IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU -cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS -T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK -AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 -nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep -qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA -yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs -hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX -zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv -kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT -f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA -uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB -o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih -MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E -BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 -wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 -XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 -JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j -ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV -VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx -xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on -AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d -7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj -gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV -+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo -FGWsJwt0ivKH ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G4" -# Serial: 451799571007117016466790293371524403291602933463 -# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb -# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a -# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c ------BEGIN CERTIFICATE----- -MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw -WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y -MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD -VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz -dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx -s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw -LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD -pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE -AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR -UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj -/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Label: "CommScope Public Trust ECC Root-01" -# Serial: 385011430473757362783587124273108818652468453534 -# MD5 Fingerprint: 3a:40:a7:fc:03:8c:9c:38:79:2f:3a:a2:6c:b6:0a:16 -# SHA1 Fingerprint: 07:86:c0:d8:dd:8e:c0:80:98:06:98:d0:58:7a:ef:de:a6:cc:a2:5d -# SHA256 Fingerprint: 11:43:7c:da:7b:b4:5e:41:36:5f:45:b3:9a:38:98:6b:0d:e0:0d:ef:34:8e:0c:7b:b0:87:36:33:80:0b:c3:8b ------BEGIN CERTIFICATE----- -MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNa -Fw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDEw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLxeP0C -flfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJE -hRGnSjot6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggq -hkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg -2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liWpDVfG2XqYZpwI7UNo5uS -Um9poIyNStDuiw7LR47QjRE= ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Label: "CommScope Public Trust ECC Root-02" -# Serial: 234015080301808452132356021271193974922492992893 -# MD5 Fingerprint: 59:b0:44:d5:65:4d:b8:5c:55:19:92:02:b6:d1:94:b2 -# SHA1 Fingerprint: 3c:3f:ef:57:0f:fe:65:93:86:9e:a0:fe:b0:f6:ed:8e:d1:13:c7:e5 -# SHA256 Fingerprint: 2f:fb:7f:81:3b:bb:b3:c8:9a:b4:e8:16:2d:0f:16:d7:15:09:a8:30:cc:9d:73:c2:62:e5:14:08:75:d1:ad:4a ------BEGIN CERTIFICATE----- -MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRa -Fw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/MMDAL -j2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmU -v4RDsNuESgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggq -hkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/n -ich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs73u1Z/GtMMH9ZzkXpc2AV -mkzw5l4lIhVtwodZ0LKOag== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Label: "CommScope Public Trust RSA Root-01" -# Serial: 354030733275608256394402989253558293562031411421 -# MD5 Fingerprint: 0e:b4:15:bc:87:63:5d:5d:02:73:d4:26:38:68:73:d8 -# SHA1 Fingerprint: 6d:0a:5f:f7:b4:23:06:b4:85:b3:b7:97:64:fc:ac:75:f5:33:f2:93 -# SHA256 Fingerprint: 02:bd:f9:6e:2a:45:dd:9b:f1:8f:c7:e1:db:df:21:a0:37:9b:a3:c9:c2:61:03:44:cf:d8:d6:06:fe:c1:ed:81 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1 -NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45FtnYSk -YZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslh -suitQDy6uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0al -DrJLpA6lfO741GIDuZNqihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3Oj -WiE260f6GBfZumbCk6SP/F2krfxQapWsvCQz0b2If4b19bJzKo98rwjyGpg/qYFl -P8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/cZip8UlF1y5mO6D1cv547 -KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTifBSeolz7p -UcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/ -kQO9lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JO -Hg9O5j9ZpSPcPYeoKFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkB -Ea801M/XrmLTBQe0MXXgDW1XT2mH+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6U -CBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm45P3luG0wDQYJ -KoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 -NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQ -nmhUQo8mUuJM3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+ -QgvfKNmwrZggvkN80V4aCRckjXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2v -trV0KnahP/t1MJ+UXjulYPPLXAziDslg+MkfFoom3ecnf+slpoq9uC02EJqxWE2a -aE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/WNyVntHKLr4W96ioD -j8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+o/E4 -Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0w -lREQKC6/oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHn -YfkUyq+Dj7+vsQpZXdxc1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVoc -icCMb3SgazNNtQEo/a2tiRc7ppqEvOuM6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Label: "CommScope Public Trust RSA Root-02" -# Serial: 480062499834624527752716769107743131258796508494 -# MD5 Fingerprint: e1:29:f9:62:7b:76:e2:96:6d:f3:d4:d7:0f:ae:1f:aa -# SHA1 Fingerprint: ea:b0:e2:52:1b:89:93:4c:11:68:f2:d8:9a:ac:22:4c:a3:8a:57:ae -# SHA256 Fingerprint: ff:e9:43:d7:93:42:4b:4f:7c:44:0c:1c:3d:64:8d:53:63:f3:4b:82:dc:87:aa:7a:9f:11:8f:c5:de:e1:01:f1 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2 -NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3VrCLE -NQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0 -kyI9p+Kx7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1C -rWDaSWqVcN3SAOLMV2MCe5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxz -hkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2WWy09X6GDRl224yW4fKcZgBzqZUPckXk2 -LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rpM9kzXzehxfCrPfp4sOcs -n/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIfhs1w/tku -FT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5 -kQMreyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3 -wNemKfrb3vOTlycEVS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6v -wQcQeKwRoi9C8DfF8rhW3Q5iLc4tVn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs -5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7GxcJXvYXowDQYJ -KoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB -KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3 -+VGXu6TwYofF1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbyme -APnCKfWxkxlSaRosTKCL4BWaMS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3Nyq -pgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xdgSGn2rtO/+YHqP65DSdsu3BaVXoT -6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2OHG1QAk8mGEPej1WF -sQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+NmYWvt -PjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2d -lklyALKrdVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670 -v64fG9PiO/yzcnMcmyiQiRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17O -rg3bhzjlP1v9mxnhMUF6cKojawHhRUzNlM47ni3niAIi9G7oyOzWPPO5std3eqx7 ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS ECC Root 2020" -# Serial: 72082518505882327255703894282316633856 -# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd -# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec -# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 ------BEGIN CERTIFICATE----- -MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw -CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH -bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw -MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx -JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE -AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O -tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP -f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA -MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di -z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn -27iQ7t0l ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS RSA Root 2023" -# Serial: 44676229530606711399881795178081572759 -# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 -# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 -# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj -MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 -eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy -MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC -REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG -A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 -cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV -cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA -U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 -Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug -BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy -8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J -co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg -8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 -rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 -mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg -+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX -gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 -p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ -pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm -9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw -M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd -GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ -CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t -xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ -w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK -L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj -X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q -ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm -dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= ------END CERTIFICATE----- - -# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" -# Serial: 65916896770016886708751106294915943533 -# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 -# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 -# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a ------BEGIN CERTIFICATE----- -MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf -e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C -cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O -BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO -PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw -hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG -XSaQpYXFuXqUPoeovQA= ------END CERTIFICATE----- - -# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA CYBER Root CA" -# Serial: 85076849864375384482682434040119489222 -# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 -# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 -# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ -MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 -IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 -WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO -LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P -40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF -avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ -34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i -JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu -j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf -Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP -2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA -S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA -oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC -kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW -5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd -BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB -AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t -tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn -68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn -TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t -RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx -f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI -Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz -8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 -NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX -xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 -t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA12" -# Serial: 587887345431707215246142177076162061960426065942 -# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 -# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 -# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw -NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF -KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt -p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd -J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur -FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J -hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K -h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF -AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld -mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ -mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA -8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV -55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ -yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA14" -# Serial: 575790784512929437950770173562378038616896959179 -# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 -# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f -# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw -NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ -FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg -vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy -6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo -/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J -kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ -0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib -y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac -18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs -0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB -SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL -ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk -86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E -rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib -ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT -zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS -DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 -2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo -FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy -K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 -dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl -Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB -365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c -JRNItX+S ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA15" -# Serial: 126083514594751269499665114766174399806381178503 -# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 -# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d -# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a ------BEGIN CERTIFICATE----- -MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw -UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM -dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy -NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl -cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 -IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 -wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR -ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT -9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp -4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 -bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= ------END CERTIFICATE----- diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py deleted file mode 100644 index 70e0c3b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem or its contents. -""" -import sys -import atexit - -def exit_cacert_ctx() -> None: - _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] - - -if sys.version_info >= (3, 11): - - from importlib.resources import as_file, files - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the file - # in cases where we're inside of a zipimport situation until someone - # actually calls where(), but we don't want to re-extract the file - # on every call of where(), so we'll do it once then store it in a - # global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you to - # manage the cleanup of this file, so it doesn't actually return a - # path, it returns a context manager that will give you the path - # when you enter it and will do any cleanup when you leave it. In - # the common case of not needing a temporary file, it will just - # return the file system location and the __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem")) - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii") - -elif sys.version_info >= (3, 7): - - from importlib.resources import path as get_path, read_text - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the - # file in cases where we're inside of a zipimport situation until - # someone actually calls where(), but we don't want to re-extract - # the file on every call of where(), so we'll do it once then store - # it in a global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you - # to manage the cleanup of this file, so it doesn't actually - # return a path, it returns a context manager that will give - # you the path when you enter it and will do any cleanup when - # you leave it. In the common case of not needing a temporary - # file, it will just return the file system location and the - # __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem") - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") - -else: - import os - import types - from typing import Union - - Package = Union[types.ModuleType, str] - Resource = Union[str, "os.PathLike"] - - # This fallback will work for Python versions prior to 3.7 that lack the - # importlib.resources module but relies on the existing `where` function - # so won't address issues with environments like PyOxidizer that don't set - # __file__ on modules. - def read_text( - package: Package, - resource: Resource, - encoding: str = 'utf-8', - errors: str = 'strict' - ) -> str: - with open(where(), encoding=encoding) as data: - return data.read() - - # If we don't have importlib.resources, then we will just do the old logic - # of assuming we're on the filesystem and munge the path directly. - def where() -> str: - f = os.path.dirname(__file__) - - return os.path.join(f, "cacert.pem") - - def contents() -> str: - return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py deleted file mode 100644 index bf0d6c6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import logging - -__version__ = '0.3.9' - - -class DistlibException(Exception): - pass - - -try: - from logging import NullHandler -except ImportError: # pragma: no cover - - class NullHandler(logging.Handler): - - def handle(self, record): - pass - - def emit(self, record): - pass - - def createLock(self): - self.lock = None - - -logger = logging.getLogger(__name__) -logger.addHandler(NullHandler()) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 222ace4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc deleted file mode 100644 index 822bb9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc deleted file mode 100644 index fcd00b0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc deleted file mode 100644 index 3b1e1e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc deleted file mode 100644 index 8b13b45..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc deleted file mode 100644 index cd55feb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc deleted file mode 100644 index 139e663..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc deleted file mode 100644 index 7fa576e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc deleted file mode 100644 index 58220aa..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc deleted file mode 100644 index 0c4d3c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc deleted file mode 100644 index 4ffb404..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc deleted file mode 100644 index f3ee9a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc deleted file mode 100644 index 19b9400..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py deleted file mode 100644 index ca561dd..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py +++ /dev/null @@ -1,1137 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import absolute_import - -import os -import re -import shutil -import sys - -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -if sys.version_info[0] < 3: # pragma: no cover - from StringIO import StringIO - string_types = basestring, - text_type = unicode - from types import FileType as file_type - import __builtin__ as builtins - import ConfigParser as configparser - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit - from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, - pathname2url, ContentTooShortError, splittype) - - def quote(s): - if isinstance(s, unicode): - s = s.encode('utf-8') - return _quote(s) - - import urllib2 - from urllib2 import (Request, urlopen, URLError, HTTPError, - HTTPBasicAuthHandler, HTTPPasswordMgr, HTTPHandler, - HTTPRedirectHandler, build_opener) - if ssl: - from urllib2 import HTTPSHandler - import httplib - import xmlrpclib - import Queue as queue - from HTMLParser import HTMLParser - import htmlentitydefs - raw_input = raw_input - from itertools import ifilter as filter - from itertools import ifilterfalse as filterfalse - - # Leaving this around for now, in case it needs resurrecting in some way - # _userprog = None - # def splituser(host): - # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - # global _userprog - # if _userprog is None: - # import re - # _userprog = re.compile('^(.*)@(.*)$') - - # match = _userprog.match(host) - # if match: return match.group(1, 2) - # return None, host - -else: # pragma: no cover - from io import StringIO - string_types = str, - text_type = str - from io import TextIOWrapper as file_type - import builtins - import configparser - from urllib.parse import (urlparse, urlunparse, urljoin, quote, unquote, - urlsplit, urlunsplit, splittype) - from urllib.request import (urlopen, urlretrieve, Request, url2pathname, - pathname2url, HTTPBasicAuthHandler, - HTTPPasswordMgr, HTTPHandler, - HTTPRedirectHandler, build_opener) - if ssl: - from urllib.request import HTTPSHandler - from urllib.error import HTTPError, URLError, ContentTooShortError - import http.client as httplib - import urllib.request as urllib2 - import xmlrpc.client as xmlrpclib - import queue - from html.parser import HTMLParser - import html.entities as htmlentitydefs - raw_input = input - from itertools import filterfalse - filter = filter - -try: - from ssl import match_hostname, CertificateError -except ImportError: # pragma: no cover - - class CertificateError(ValueError): - pass - - def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - parts = dn.split('.') - leftmost, remainder = parts[0], parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" % - (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" % - (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") - - -try: - from types import SimpleNamespace as Container -except ImportError: # pragma: no cover - - class Container(object): - """ - A generic container for when multiple values need to be returned - """ - - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -try: - from shutil import which -except ImportError: # pragma: no cover - # Implementation from Python 3.3 - def which(cmd, mode=os.F_OK | os.X_OK, path=None): - """Given a command, mode, and a PATH string, return the path which - conforms to the given mode on the PATH, or None if there is no such - file. - - `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result - of os.environ.get("PATH"), or can be overridden with a custom search - path. - - """ - - # Check that a given file can be accessed with the correct mode. - # Additionally check that `file` is not a directory, as on Windows - # directories pass the os.access check. - def _access_check(fn, mode): - return (os.path.exists(fn) and os.access(fn, mode) and not os.path.isdir(fn)) - - # If we're given a path with a directory part, look it up directly rather - # than referring to PATH directories. This includes checking relative to the - # current directory, e.g. ./script - if os.path.dirname(cmd): - if _access_check(cmd, mode): - return cmd - return None - - if path is None: - path = os.environ.get("PATH", os.defpath) - if not path: - return None - path = path.split(os.pathsep) - - if sys.platform == "win32": - # The current directory takes precedence on Windows. - if os.curdir not in path: - path.insert(0, os.curdir) - - # PATHEXT is necessary to check on Windows. - pathext = os.environ.get("PATHEXT", "").split(os.pathsep) - # See if the given file matches any of the expected path extensions. - # This will allow us to short circuit when given "python.exe". - # If it does match, only test that one, otherwise we have to try - # others. - if any(cmd.lower().endswith(ext.lower()) for ext in pathext): - files = [cmd] - else: - files = [cmd + ext for ext in pathext] - else: - # On other platforms you don't have things like PATHEXT to tell you - # what file suffixes are executable, so just pass on cmd as-is. - files = [cmd] - - seen = set() - for dir in path: - normdir = os.path.normcase(dir) - if normdir not in seen: - seen.add(normdir) - for thefile in files: - name = os.path.join(dir, thefile) - if _access_check(name, mode): - return name - return None - - -# ZipFile is a context manager in 2.7, but not in 2.6 - -from zipfile import ZipFile as BaseZipFile - -if hasattr(BaseZipFile, '__enter__'): # pragma: no cover - ZipFile = BaseZipFile -else: # pragma: no cover - from zipfile import ZipExtFile as BaseZipExtFile - - class ZipExtFile(BaseZipExtFile): - - def __init__(self, base): - self.__dict__.update(base.__dict__) - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - class ZipFile(BaseZipFile): - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - def open(self, *args, **kwargs): - base = BaseZipFile.open(self, *args, **kwargs) - return ZipExtFile(base) - - -try: - from platform import python_implementation -except ImportError: # pragma: no cover - - def python_implementation(): - """Return a string identifying the Python implementation.""" - if 'PyPy' in sys.version: - return 'PyPy' - if os.name == 'java': - return 'Jython' - if sys.version.startswith('IronPython'): - return 'IronPython' - return 'CPython' - - -import sysconfig - -try: - callable = callable -except NameError: # pragma: no cover - from collections.abc import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode - fsdecode = os.fsdecode -except AttributeError: # pragma: no cover - # Issue #99: on some systems (e.g. containerised), - # sys.getfilesystemencoding() returns None, and we need a real value, - # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and - # sys.getfilesystemencoding(): the return value is "the user’s preference - # according to the result of nl_langinfo(CODESET), or None if the - # nl_langinfo(CODESET) failed." - _fsencoding = sys.getfilesystemencoding() or 'utf-8' - if _fsencoding == 'mbcs': - _fserrors = 'strict' - else: - _fserrors = 'surrogateescape' - - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, text_type): - return filename.encode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - def fsdecode(filename): - if isinstance(filename, text_type): - return filename - elif isinstance(filename, bytes): - return filename.decode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - -try: - from tokenize import detect_encoding -except ImportError: # pragma: no cover - from codecs import BOM_UTF8, lookup - - cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") - - def _get_normal_name(orig_enc): - """Imitates get_normal_name in tokenizer.c.""" - # Only care about the first 12 characters. - enc = orig_enc[:12].lower().replace("_", "-") - if enc == "utf-8" or enc.startswith("utf-8-"): - return "utf-8" - if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ - enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): - return "iso-8859-1" - return orig_enc - - def detect_encoding(readline): - """ - The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argument, readline, - in the same way as the tokenize() generator. - - It will call readline a maximum of twice, and return the encoding used - (as a string) and a list of any lines (left as bytes) it has read in. - - It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, - 'utf-8-sig' is returned. - - If no encoding is specified, then the default of 'utf-8' will be returned. - """ - try: - filename = readline.__self__.name - except AttributeError: - filename = None - bom_found = False - encoding = None - default = 'utf-8' - - def read_or_stop(): - try: - return readline() - except StopIteration: - return b'' - - def find_cookie(line): - try: - # Decode as UTF-8. Either the line is an encoding declaration, - # in which case it should be pure ASCII, or it must be UTF-8 - # per default encoding. - line_string = line.decode('utf-8') - except UnicodeDecodeError: - msg = "invalid or missing encoding declaration" - if filename is not None: - msg = '{} for {!r}'.format(msg, filename) - raise SyntaxError(msg) - - matches = cookie_re.findall(line_string) - if not matches: - return None - encoding = _get_normal_name(matches[0]) - try: - codec = lookup(encoding) - except LookupError: - # This behaviour mimics the Python interpreter - if filename is None: - msg = "unknown encoding: " + encoding - else: - msg = "unknown encoding for {!r}: {}".format( - filename, encoding) - raise SyntaxError(msg) - - if bom_found: - if codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - if filename is None: - msg = 'encoding problem: utf-8' - else: - msg = 'encoding problem for {!r}: utf-8'.format( - filename) - raise SyntaxError(msg) - encoding += '-sig' - return encoding - - first = read_or_stop() - if first.startswith(BOM_UTF8): - bom_found = True - first = first[3:] - default = 'utf-8-sig' - if not first: - return default, [] - - encoding = find_cookie(first) - if encoding: - return encoding, [first] - - second = read_or_stop() - if not second: - return default, [first] - - encoding = find_cookie(second) - if encoding: - return encoding, [first, second] - - return default, [first, second] - - -# For converting & <-> & etc. -try: - from html import escape -except ImportError: - from cgi import escape -if sys.version_info[:2] < (3, 4): - unescape = HTMLParser().unescape -else: - from html import unescape - -try: - from collections import ChainMap -except ImportError: # pragma: no cover - from collections import MutableMapping - - try: - from reprlib import recursive_repr as _recursive_repr - except ImportError: - - def _recursive_repr(fillvalue='...'): - ''' - Decorator to make a repr function return fillvalue for a recursive - call - ''' - - def decorating_function(user_function): - repr_running = set() - - def wrapper(self): - key = id(self), get_ident() - if key in repr_running: - return fillvalue - repr_running.add(key) - try: - result = user_function(self) - finally: - repr_running.discard(key) - return result - - # Can't use functools.wraps() here because of bootstrap issues - wrapper.__module__ = getattr(user_function, '__module__') - wrapper.__doc__ = getattr(user_function, '__doc__') - wrapper.__name__ = getattr(user_function, '__name__') - wrapper.__annotations__ = getattr(user_function, - '__annotations__', {}) - return wrapper - - return decorating_function - - class ChainMap(MutableMapping): - ''' - A ChainMap groups multiple dicts (or other mappings) together - to create a single, updateable view. - - The underlying mappings are stored in a list. That list is public and can - accessed or updated using the *maps* attribute. There is no other state. - - Lookups search the underlying mappings successively until a key is found. - In contrast, writes, updates, and deletions only operate on the first - mapping. - ''' - - def __init__(self, *maps): - '''Initialize a ChainMap by setting *maps* to the given mappings. - If no mappings are provided, a single empty dictionary is used. - - ''' - self.maps = list(maps) or [{}] # always at least one map - - def __missing__(self, key): - raise KeyError(key) - - def __getitem__(self, key): - for mapping in self.maps: - try: - return mapping[ - key] # can't use 'key in mapping' with defaultdict - except KeyError: - pass - return self.__missing__( - key) # support subclasses that define __missing__ - - def get(self, key, default=None): - return self[key] if key in self else default - - def __len__(self): - return len(set().union( - *self.maps)) # reuses stored hash values if possible - - def __iter__(self): - return iter(set().union(*self.maps)) - - def __contains__(self, key): - return any(key in m for m in self.maps) - - def __bool__(self): - return any(self.maps) - - @_recursive_repr() - def __repr__(self): - return '{0.__class__.__name__}({1})'.format( - self, ', '.join(map(repr, self.maps))) - - @classmethod - def fromkeys(cls, iterable, *args): - 'Create a ChainMap with a single dict created from the iterable.' - return cls(dict.fromkeys(iterable, *args)) - - def copy(self): - 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' - return self.__class__(self.maps[0].copy(), *self.maps[1:]) - - __copy__ = copy - - def new_child(self): # like Django's Context.push() - 'New ChainMap with a new dict followed by all previous maps.' - return self.__class__({}, *self.maps) - - @property - def parents(self): # like Django's Context.pop() - 'New ChainMap from maps[1:].' - return self.__class__(*self.maps[1:]) - - def __setitem__(self, key, value): - self.maps[0][key] = value - - def __delitem__(self, key): - try: - del self.maps[0][key] - except KeyError: - raise KeyError( - 'Key not found in the first mapping: {!r}'.format(key)) - - def popitem(self): - 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' - try: - return self.maps[0].popitem() - except KeyError: - raise KeyError('No keys found in the first mapping.') - - def pop(self, key, *args): - 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' - try: - return self.maps[0].pop(key, *args) - except KeyError: - raise KeyError( - 'Key not found in the first mapping: {!r}'.format(key)) - - def clear(self): - 'Clear maps[0], leaving maps[1:] intact.' - self.maps[0].clear() - - -try: - from importlib.util import cache_from_source # Python >= 3.4 -except ImportError: # pragma: no cover - - def cache_from_source(path, debug_override=None): - assert path.endswith('.py') - if debug_override is None: - debug_override = __debug__ - if debug_override: - suffix = 'c' - else: - suffix = 'o' - return path + suffix - - -try: - from collections import OrderedDict -except ImportError: # pragma: no cover - # {{{ http://code.activestate.com/recipes/576693/ (r9) - # Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. - # Passes Python2.7's test suite and incorporates all the latest updates. - try: - from thread import get_ident as _get_ident - except ImportError: - from dummy_thread import get_ident as _get_ident - - try: - from _abcoll import KeysView, ValuesView, ItemsView - except ImportError: - pass - - class OrderedDict(dict): - 'Dictionary that remembers insertion order' - - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % - len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args), )) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running=None): - 'od.__repr__() <==> repr(od)' - if not _repr_running: - _repr_running = {} - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__, ) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items, ), inst_dict) - return self.__class__, (items, ) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self) == len( - other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) - - -try: - from logging.config import BaseConfigurator, valid_ident -except ImportError: # pragma: no cover - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) - - def valid_ident(s): - m = IDENTIFIER.match(s) - if not m: - raise ValueError('Not a valid Python identifier: %r' % s) - return True - - # The ConvertingXXX classes are wrappers around standard Python containers, - # and they serve to convert any suitable values in the container. The - # conversion converts base dicts, lists and tuples to their wrapped - # equivalents, whereas strings which match a conversion format are converted - # appropriately. - # - # Each wrapper should have a configurator attribute holding the actual - # configurator to use for conversion. - - class ConvertingDict(dict): - """A converting dictionary wrapper.""" - - def __getitem__(self, key): - value = dict.__getitem__(self, key) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def get(self, key, default=None): - value = dict.get(self, key, default) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, key, default=None): - value = dict.pop(self, key, default) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class ConvertingList(list): - """A converting list wrapper.""" - - def __getitem__(self, key): - value = list.__getitem__(self, key) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, idx=-1): - value = list.pop(self, idx) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result - - class ConvertingTuple(tuple): - """A converting tuple wrapper.""" - - def __getitem__(self, key): - value = tuple.__getitem__(self, key) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class BaseConfigurator(object): - """ - The configurator base class which defines some useful defaults. - """ - - CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') - - WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') - DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') - INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') - DIGIT_PATTERN = re.compile(r'^\d+$') - - value_converters = { - 'ext': 'ext_convert', - 'cfg': 'cfg_convert', - } - - # We might want to use a different one, e.g. importlib - importer = staticmethod(__import__) - - def __init__(self, config): - self.config = ConvertingDict(config) - self.config.configurator = self - - def resolve(self, s): - """ - Resolve strings to objects using standard import and attribute - syntax. - """ - name = s.split('.') - used = name.pop(0) - try: - found = self.importer(used) - for frag in name: - used += '.' + frag - try: - found = getattr(found, frag) - except AttributeError: - self.importer(used) - found = getattr(found, frag) - return found - except ImportError: - e, tb = sys.exc_info()[1:] - v = ValueError('Cannot resolve %r: %s' % (s, e)) - v.__cause__, v.__traceback__ = e, tb - raise v - - def ext_convert(self, value): - """Default converter for the ext:// protocol.""" - return self.resolve(value) - - def cfg_convert(self, value): - """Default converter for the cfg:// protocol.""" - rest = value - m = self.WORD_PATTERN.match(rest) - if m is None: - raise ValueError("Unable to convert %r" % value) - else: - rest = rest[m.end():] - d = self.config[m.groups()[0]] - while rest: - m = self.DOT_PATTERN.match(rest) - if m: - d = d[m.groups()[0]] - else: - m = self.INDEX_PATTERN.match(rest) - if m: - idx = m.groups()[0] - if not self.DIGIT_PATTERN.match(idx): - d = d[idx] - else: - try: - n = int( - idx - ) # try as number first (most likely) - d = d[n] - except TypeError: - d = d[idx] - if m: - rest = rest[m.end():] - else: - raise ValueError('Unable to convert ' - '%r at %r' % (value, rest)) - # rest should be empty - return d - - def convert(self, value): - """ - Convert values to an appropriate type. dicts, lists and tuples are - replaced by their converting alternatives. Strings are checked to - see if they have a conversion format and are converted if they do. - """ - if not isinstance(value, ConvertingDict) and isinstance( - value, dict): - value = ConvertingDict(value) - value.configurator = self - elif not isinstance(value, ConvertingList) and isinstance( - value, list): - value = ConvertingList(value) - value.configurator = self - elif not isinstance(value, ConvertingTuple) and isinstance(value, tuple): - value = ConvertingTuple(value) - value.configurator = self - elif isinstance(value, string_types): - m = self.CONVERT_PATTERN.match(value) - if m: - d = m.groupdict() - prefix = d['prefix'] - converter = self.value_converters.get(prefix, None) - if converter: - suffix = d['suffix'] - converter = getattr(self, converter) - value = converter(suffix) - return value - - def configure_custom(self, config): - """Configure an object with a user-supplied factory.""" - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) - result = c(**kwargs) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def as_tuple(self, value): - """Utility function which converts lists to tuples.""" - if isinstance(value, list): - value = tuple(value) - return value diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py deleted file mode 100644 index c0f896a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py +++ /dev/null @@ -1,1329 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2023 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""PEP 376 implementation.""" - -from __future__ import unicode_literals - -import base64 -import codecs -import contextlib -import hashlib -import logging -import os -import posixpath -import sys -import zipimport - -from . import DistlibException, resources -from .compat import StringIO -from .version import get_scheme, UnsupportedVersionError -from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME) -from .util import (parse_requirement, cached_property, parse_name_and_version, read_exports, write_exports, CSVReader, - CSVWriter) - -__all__ = [ - 'Distribution', 'BaseInstalledDistribution', 'InstalledDistribution', 'EggInfoDistribution', 'DistributionPath' -] - -logger = logging.getLogger(__name__) - -EXPORTS_FILENAME = 'pydist-exports.json' -COMMANDS_FILENAME = 'pydist-commands.json' - -DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', 'RESOURCES', EXPORTS_FILENAME, 'SHARED') - -DISTINFO_EXT = '.dist-info' - - -class _Cache(object): - """ - A simple cache mapping names and .dist-info paths to distributions - """ - - def __init__(self): - """ - Initialise an instance. There is normally one for each DistributionPath. - """ - self.name = {} - self.path = {} - self.generated = False - - def clear(self): - """ - Clear the cache, setting it to its initial state. - """ - self.name.clear() - self.path.clear() - self.generated = False - - def add(self, dist): - """ - Add a distribution to the cache. - :param dist: The distribution to add. - """ - if dist.path not in self.path: - self.path[dist.path] = dist - self.name.setdefault(dist.key, []).append(dist) - - -class DistributionPath(object): - """ - Represents a set of distributions installed on a path (typically sys.path). - """ - - def __init__(self, path=None, include_egg=False): - """ - Create an instance from a path, optionally including legacy (distutils/ - setuptools/distribute) distributions. - :param path: The path to use, as a list of directories. If not specified, - sys.path is used. - :param include_egg: If True, this instance will look for and return legacy - distributions as well as those based on PEP 376. - """ - if path is None: - path = sys.path - self.path = path - self._include_dist = True - self._include_egg = include_egg - - self._cache = _Cache() - self._cache_egg = _Cache() - self._cache_enabled = True - self._scheme = get_scheme('default') - - def _get_cache_enabled(self): - return self._cache_enabled - - def _set_cache_enabled(self, value): - self._cache_enabled = value - - cache_enabled = property(_get_cache_enabled, _set_cache_enabled) - - def clear_cache(self): - """ - Clears the internal cache. - """ - self._cache.clear() - self._cache_egg.clear() - - def _yield_distributions(self): - """ - Yield .dist-info and/or .egg(-info) distributions. - """ - # We need to check if we've seen some resources already, because on - # some Linux systems (e.g. some Debian/Ubuntu variants) there are - # symlinks which alias other files in the environment. - seen = set() - for path in self.path: - finder = resources.finder_for_path(path) - if finder is None: - continue - r = finder.find('') - if not r or not r.is_container: - continue - rset = sorted(r.resources) - for entry in rset: - r = finder.find(entry) - if not r or r.path in seen: - continue - try: - if self._include_dist and entry.endswith(DISTINFO_EXT): - possible_filenames = [METADATA_FILENAME, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] - for metadata_filename in possible_filenames: - metadata_path = posixpath.join(entry, metadata_filename) - pydist = finder.find(metadata_path) - if pydist: - break - else: - continue - - with contextlib.closing(pydist.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - logger.debug('Found %s', r.path) - seen.add(r.path) - yield new_dist_class(r.path, metadata=metadata, env=self) - elif self._include_egg and entry.endswith(('.egg-info', '.egg')): - logger.debug('Found %s', r.path) - seen.add(r.path) - yield old_dist_class(r.path, self) - except Exception as e: - msg = 'Unable to read distribution at %s, perhaps due to bad metadata: %s' - logger.warning(msg, r.path, e) - import warnings - warnings.warn(msg % (r.path, e), stacklevel=2) - - def _generate_cache(self): - """ - Scan the path for distributions and populate the cache with - those that are found. - """ - gen_dist = not self._cache.generated - gen_egg = self._include_egg and not self._cache_egg.generated - if gen_dist or gen_egg: - for dist in self._yield_distributions(): - if isinstance(dist, InstalledDistribution): - self._cache.add(dist) - else: - self._cache_egg.add(dist) - - if gen_dist: - self._cache.generated = True - if gen_egg: - self._cache_egg.generated = True - - @classmethod - def distinfo_dirname(cls, name, version): - """ - The *name* and *version* parameters are converted into their - filename-escaped form, i.e. any ``'-'`` characters are replaced - with ``'_'`` other than the one in ``'dist-info'`` and the one - separating the name from the version number. - - :parameter name: is converted to a standard distribution name by replacing - any runs of non- alphanumeric characters with a single - ``'-'``. - :type name: string - :parameter version: is converted to a standard version string. Spaces - become dots, and all other non-alphanumeric characters - (except dots) become dashes, with runs of multiple - dashes condensed to a single dash. - :type version: string - :returns: directory name - :rtype: string""" - name = name.replace('-', '_') - return '-'.join([name, version]) + DISTINFO_EXT - - def get_distributions(self): - """ - Provides an iterator that looks for distributions and returns - :class:`InstalledDistribution` or - :class:`EggInfoDistribution` instances for each one of them. - - :rtype: iterator of :class:`InstalledDistribution` and - :class:`EggInfoDistribution` instances - """ - if not self._cache_enabled: - for dist in self._yield_distributions(): - yield dist - else: - self._generate_cache() - - for dist in self._cache.path.values(): - yield dist - - if self._include_egg: - for dist in self._cache_egg.path.values(): - yield dist - - def get_distribution(self, name): - """ - Looks for a named distribution on the path. - - This function only returns the first result found, as no more than one - value is expected. If nothing is found, ``None`` is returned. - - :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` - or ``None`` - """ - result = None - name = name.lower() - if not self._cache_enabled: - for dist in self._yield_distributions(): - if dist.key == name: - result = dist - break - else: - self._generate_cache() - - if name in self._cache.name: - result = self._cache.name[name][0] - elif self._include_egg and name in self._cache_egg.name: - result = self._cache_egg.name[name][0] - return result - - def provides_distribution(self, name, version=None): - """ - Iterates over all distributions to find which distributions provide *name*. - If a *version* is provided, it will be used to filter the results. - - This function only returns the first result found, since no more than - one values are expected. If the directory is not found, returns ``None``. - - :parameter version: a version specifier that indicates the version - required, conforming to the format in ``PEP-345`` - - :type name: string - :type version: string - """ - matcher = None - if version is not None: - try: - matcher = self._scheme.matcher('%s (%s)' % (name, version)) - except ValueError: - raise DistlibException('invalid name or version: %r, %r' % (name, version)) - - for dist in self.get_distributions(): - # We hit a problem on Travis where enum34 was installed and doesn't - # have a provides attribute ... - if not hasattr(dist, 'provides'): - logger.debug('No "provides": %s', dist) - else: - provided = dist.provides - - for p in provided: - p_name, p_ver = parse_name_and_version(p) - if matcher is None: - if p_name == name: - yield dist - break - else: - if p_name == name and matcher.match(p_ver): - yield dist - break - - def get_file_path(self, name, relative_path): - """ - Return the path to a resource file. - """ - dist = self.get_distribution(name) - if dist is None: - raise LookupError('no distribution named %r found' % name) - return dist.get_resource_path(relative_path) - - def get_exported_entries(self, category, name=None): - """ - Return all of the exported entries in a particular category. - - :param category: The category to search for entries. - :param name: If specified, only entries with that name are returned. - """ - for dist in self.get_distributions(): - r = dist.exports - if category in r: - d = r[category] - if name is not None: - if name in d: - yield d[name] - else: - for v in d.values(): - yield v - - -class Distribution(object): - """ - A base class for distributions, whether installed or from indexes. - Either way, it must have some metadata, so that's all that's needed - for construction. - """ - - build_time_dependency = False - """ - Set to True if it's known to be only a build-time dependency (i.e. - not needed after installation). - """ - - requested = False - """A boolean that indicates whether the ``REQUESTED`` metadata file is - present (in other words, whether the package was installed by user - request or it was installed as a dependency).""" - - def __init__(self, metadata): - """ - Initialise an instance. - :param metadata: The instance of :class:`Metadata` describing this - distribution. - """ - self.metadata = metadata - self.name = metadata.name - self.key = self.name.lower() # for case-insensitive comparisons - self.version = metadata.version - self.locator = None - self.digest = None - self.extras = None # additional features requested - self.context = None # environment marker overrides - self.download_urls = set() - self.digests = {} - - @property - def source_url(self): - """ - The source archive download URL for this distribution. - """ - return self.metadata.source_url - - download_url = source_url # Backward compatibility - - @property - def name_and_version(self): - """ - A utility property which displays the name and version in parentheses. - """ - return '%s (%s)' % (self.name, self.version) - - @property - def provides(self): - """ - A set of distribution names and versions provided by this distribution. - :return: A set of "name (version)" strings. - """ - plist = self.metadata.provides - s = '%s (%s)' % (self.name, self.version) - if s not in plist: - plist.append(s) - return plist - - def _get_requirements(self, req_attr): - md = self.metadata - reqts = getattr(md, req_attr) - logger.debug('%s: got requirements %r from metadata: %r', self.name, req_attr, reqts) - return set(md.get_requirements(reqts, extras=self.extras, env=self.context)) - - @property - def run_requires(self): - return self._get_requirements('run_requires') - - @property - def meta_requires(self): - return self._get_requirements('meta_requires') - - @property - def build_requires(self): - return self._get_requirements('build_requires') - - @property - def test_requires(self): - return self._get_requirements('test_requires') - - @property - def dev_requires(self): - return self._get_requirements('dev_requires') - - def matches_requirement(self, req): - """ - Say if this instance matches (fulfills) a requirement. - :param req: The requirement to match. - :rtype req: str - :return: True if it matches, else False. - """ - # Requirement may contain extras - parse to lose those - # from what's passed to the matcher - r = parse_requirement(req) - scheme = get_scheme(self.metadata.scheme) - try: - matcher = scheme.matcher(r.requirement) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - result = False - for p in self.provides: - p_name, p_ver = parse_name_and_version(p) - if p_name != name: - continue - try: - result = matcher.match(p_ver) - break - except UnsupportedVersionError: - pass - return result - - def __repr__(self): - """ - Return a textual representation of this instance, - """ - if self.source_url: - suffix = ' [%s]' % self.source_url - else: - suffix = '' - return '' % (self.name, self.version, suffix) - - def __eq__(self, other): - """ - See if this distribution is the same as another. - :param other: The distribution to compare with. To be equal to one - another. distributions must have the same type, name, - version and source_url. - :return: True if it is the same, else False. - """ - if type(other) is not type(self): - result = False - else: - result = (self.name == other.name and self.version == other.version and self.source_url == other.source_url) - return result - - def __hash__(self): - """ - Compute hash in a way which matches the equality test. - """ - return hash(self.name) + hash(self.version) + hash(self.source_url) - - -class BaseInstalledDistribution(Distribution): - """ - This is the base class for installed distributions (whether PEP 376 or - legacy). - """ - - hasher = None - - def __init__(self, metadata, path, env=None): - """ - Initialise an instance. - :param metadata: An instance of :class:`Metadata` which describes the - distribution. This will normally have been initialised - from a metadata file in the ``path``. - :param path: The path of the ``.dist-info`` or ``.egg-info`` - directory for the distribution. - :param env: This is normally the :class:`DistributionPath` - instance where this distribution was found. - """ - super(BaseInstalledDistribution, self).__init__(metadata) - self.path = path - self.dist_path = env - - def get_hash(self, data, hasher=None): - """ - Get the hash of some data, using a particular hash algorithm, if - specified. - - :param data: The data to be hashed. - :type data: bytes - :param hasher: The name of a hash implementation, supported by hashlib, - or ``None``. Examples of valid values are ``'sha1'``, - ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and - ``'sha512'``. If no hasher is specified, the ``hasher`` - attribute of the :class:`InstalledDistribution` instance - is used. If the hasher is determined to be ``None``, MD5 - is used as the hashing algorithm. - :returns: The hash of the data. If a hasher was explicitly specified, - the returned hash will be prefixed with the specified hasher - followed by '='. - :rtype: str - """ - if hasher is None: - hasher = self.hasher - if hasher is None: - hasher = hashlib.md5 - prefix = '' - else: - hasher = getattr(hashlib, hasher) - prefix = '%s=' % self.hasher - digest = hasher(data).digest() - digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') - return '%s%s' % (prefix, digest) - - -class InstalledDistribution(BaseInstalledDistribution): - """ - Created with the *path* of the ``.dist-info`` directory provided to the - constructor. It reads the metadata contained in ``pydist.json`` when it is - instantiated., or uses a passed in Metadata instance (useful for when - dry-run mode is being used). - """ - - hasher = 'sha256' - - def __init__(self, path, metadata=None, env=None): - self.modules = [] - self.finder = finder = resources.finder_for_path(path) - if finder is None: - raise ValueError('finder unavailable for %s' % path) - if env and env._cache_enabled and path in env._cache.path: - metadata = env._cache.path[path].metadata - elif metadata is None: - r = finder.find(METADATA_FILENAME) - # Temporary - for Wheel 0.23 support - if r is None: - r = finder.find(WHEEL_METADATA_FILENAME) - # Temporary - for legacy support - if r is None: - r = finder.find(LEGACY_METADATA_FILENAME) - if r is None: - raise ValueError('no %s found in %s' % (METADATA_FILENAME, path)) - with contextlib.closing(r.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - - super(InstalledDistribution, self).__init__(metadata, path, env) - - if env and env._cache_enabled: - env._cache.add(self) - - r = finder.find('REQUESTED') - self.requested = r is not None - p = os.path.join(path, 'top_level.txt') - if os.path.exists(p): - with open(p, 'rb') as f: - data = f.read().decode('utf-8') - self.modules = data.splitlines() - - def __repr__(self): - return '' % (self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def _get_records(self): - """ - Get the list of installed files for the distribution - :return: A list of tuples of path, hash and size. Note that hash and - size might be ``None`` for some entries. The path is exactly - as stored in the file (which is as in PEP 376). - """ - results = [] - r = self.get_distinfo_resource('RECORD') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as record_reader: - # Base location is parent dir of .dist-info dir - # base_location = os.path.dirname(self.path) - # base_location = os.path.abspath(base_location) - for row in record_reader: - missing = [None for i in range(len(row), 3)] - path, checksum, size = row + missing - # if not os.path.isabs(path): - # path = path.replace('/', os.sep) - # path = os.path.join(base_location, path) - results.append((path, checksum, size)) - return results - - @cached_property - def exports(self): - """ - Return the information exported by this distribution. - :return: A dictionary of exports, mapping an export category to a dict - of :class:`ExportEntry` instances describing the individual - export entries, and keyed by name. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - result = self.read_exports() - return result - - def read_exports(self): - """ - Read exports data from a file in .ini format. - - :return: A dictionary of exports, mapping an export category to a list - of :class:`ExportEntry` instances describing the individual - export entries. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - with contextlib.closing(r.as_stream()) as stream: - result = read_exports(stream) - return result - - def write_exports(self, exports): - """ - Write a dictionary of exports to a file in .ini format. - :param exports: A dictionary of exports, mapping an export category to - a list of :class:`ExportEntry` instances describing the - individual export entries. - """ - rf = self.get_distinfo_file(EXPORTS_FILENAME) - with open(rf, 'w') as f: - write_exports(exports, f) - - def get_resource_path(self, relative_path): - """ - NOTE: This API may change in the future. - - Return the absolute path to a resource file with the given relative - path. - - :param relative_path: The path, relative to .dist-info, of the resource - of interest. - :return: The absolute path where the resource is to be found. - """ - r = self.get_distinfo_resource('RESOURCES') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as resources_reader: - for relative, destination in resources_reader: - if relative == relative_path: - return destination - raise KeyError('no resource file with relative path %r ' - 'is installed' % relative_path) - - def list_installed_files(self): - """ - Iterates over the ``RECORD`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: iterator of (path, hash, size) - """ - for result in self._get_records(): - yield result - - def write_installed_files(self, paths, prefix, dry_run=False): - """ - Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any - existing ``RECORD`` file is silently overwritten. - - prefix is used to determine when to write absolute paths. - """ - prefix = os.path.join(prefix, '') - base = os.path.dirname(self.path) - base_under_prefix = base.startswith(prefix) - base = os.path.join(base, '') - record_path = self.get_distinfo_file('RECORD') - logger.info('creating %s', record_path) - if dry_run: - return None - with CSVWriter(record_path) as writer: - for path in paths: - if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): - # do not put size and hash, as in PEP-376 - hash_value = size = '' - else: - size = '%d' % os.path.getsize(path) - with open(path, 'rb') as fp: - hash_value = self.get_hash(fp.read()) - if path.startswith(base) or (base_under_prefix and path.startswith(prefix)): - path = os.path.relpath(path, base) - writer.writerow((path, hash_value, size)) - - # add the RECORD file itself - if record_path.startswith(base): - record_path = os.path.relpath(record_path, base) - writer.writerow((record_path, '', '')) - return record_path - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - base = os.path.dirname(self.path) - record_path = self.get_distinfo_file('RECORD') - for path, hash_value, size in self.list_installed_files(): - if not os.path.isabs(path): - path = os.path.join(base, path) - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - elif os.path.isfile(path): - actual_size = str(os.path.getsize(path)) - if size and actual_size != size: - mismatches.append((path, 'size', size, actual_size)) - elif hash_value: - if '=' in hash_value: - hasher = hash_value.split('=', 1)[0] - else: - hasher = None - - with open(path, 'rb') as f: - actual_hash = self.get_hash(f.read(), hasher) - if actual_hash != hash_value: - mismatches.append((path, 'hash', hash_value, actual_hash)) - return mismatches - - @cached_property - def shared_locations(self): - """ - A dictionary of shared locations whose keys are in the set 'prefix', - 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. - The corresponding value is the absolute path of that category for - this distribution, and takes into account any paths selected by the - user at installation time (e.g. via command-line arguments). In the - case of the 'namespace' key, this would be a list of absolute paths - for the roots of namespace packages in this distribution. - - The first time this property is accessed, the relevant information is - read from the SHARED file in the .dist-info directory. - """ - result = {} - shared_path = os.path.join(self.path, 'SHARED') - if os.path.isfile(shared_path): - with codecs.open(shared_path, 'r', encoding='utf-8') as f: - lines = f.read().splitlines() - for line in lines: - key, value = line.split('=', 1) - if key == 'namespace': - result.setdefault(key, []).append(value) - else: - result[key] = value - return result - - def write_shared_locations(self, paths, dry_run=False): - """ - Write shared location information to the SHARED file in .dist-info. - :param paths: A dictionary as described in the documentation for - :meth:`shared_locations`. - :param dry_run: If True, the action is logged but no file is actually - written. - :return: The path of the file written to. - """ - shared_path = os.path.join(self.path, 'SHARED') - logger.info('creating %s', shared_path) - if dry_run: - return None - lines = [] - for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): - path = paths[key] - if os.path.isdir(paths[key]): - lines.append('%s=%s' % (key, path)) - for ns in paths.get('namespace', ()): - lines.append('namespace=%s' % ns) - - with codecs.open(shared_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(lines)) - return shared_path - - def get_distinfo_resource(self, path): - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - finder = resources.finder_for_path(self.path) - if finder is None: - raise DistlibException('Unable to get a finder for %s' % self.path) - return finder.find(path) - - def get_distinfo_file(self, path): - """ - Returns a path located under the ``.dist-info`` directory. Returns a - string representing the path. - - :parameter path: a ``'/'``-separated path relative to the - ``.dist-info`` directory or an absolute path; - If *path* is an absolute path and doesn't start - with the ``.dist-info`` directory path, - a :class:`DistlibException` is raised - :type path: str - :rtype: str - """ - # Check if it is an absolute path # XXX use relpath, add tests - if path.find(os.sep) >= 0: - # it's an absolute path? - distinfo_dirname, path = path.split(os.sep)[-2:] - if distinfo_dirname != self.path.split(os.sep)[-1]: - raise DistlibException('dist-info file %r does not belong to the %r %s ' - 'distribution' % (path, self.name, self.version)) - - # The file must be relative - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - - return os.path.join(self.path, path) - - def list_distinfo_files(self): - """ - Iterates over the ``RECORD`` entries and returns paths for each line if - the path is pointing to a file located in the ``.dist-info`` directory - or one of its subdirectories. - - :returns: iterator of paths - """ - base = os.path.dirname(self.path) - for path, checksum, size in self._get_records(): - # XXX add separator or use real relpath algo - if not os.path.isabs(path): - path = os.path.join(base, path) - if path.startswith(self.path): - yield path - - def __eq__(self, other): - return (isinstance(other, InstalledDistribution) and self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - - -class EggInfoDistribution(BaseInstalledDistribution): - """Created with the *path* of the ``.egg-info`` directory or file provided - to the constructor. It reads the metadata contained in the file itself, or - if the given path happens to be a directory, the metadata is read from the - file ``PKG-INFO`` under that directory.""" - - requested = True # as we have no way of knowing, assume it was - shared_locations = {} - - def __init__(self, path, env=None): - - def set_name_and_version(s, n, v): - s.name = n - s.key = n.lower() # for case-insensitive comparisons - s.version = v - - self.path = path - self.dist_path = env - if env and env._cache_enabled and path in env._cache_egg.path: - metadata = env._cache_egg.path[path].metadata - set_name_and_version(self, metadata.name, metadata.version) - else: - metadata = self._get_metadata(path) - - # Need to be set before caching - set_name_and_version(self, metadata.name, metadata.version) - - if env and env._cache_enabled: - env._cache_egg.add(self) - super(EggInfoDistribution, self).__init__(metadata, path, env) - - def _get_metadata(self, path): - requires = None - - def parse_requires_data(data): - """Create a list of dependencies from a requires.txt file. - - *data*: the contents of a setuptools-produced requires.txt file. - """ - reqs = [] - lines = data.splitlines() - for line in lines: - line = line.strip() - # sectioned files have bare newlines (separating sections) - if not line: # pragma: no cover - continue - if line.startswith('['): # pragma: no cover - logger.warning('Unexpected line: quitting requirement scan: %r', line) - break - r = parse_requirement(line) - if not r: # pragma: no cover - logger.warning('Not recognised as a requirement: %r', line) - continue - if r.extras: # pragma: no cover - logger.warning('extra requirements in requires.txt are ' - 'not supported') - if not r.constraints: - reqs.append(r.name) - else: - cons = ', '.join('%s%s' % c for c in r.constraints) - reqs.append('%s (%s)' % (r.name, cons)) - return reqs - - def parse_requires_path(req_path): - """Create a list of dependencies from a requires.txt file. - - *req_path*: the path to a setuptools-produced requires.txt file. - """ - - reqs = [] - try: - with codecs.open(req_path, 'r', 'utf-8') as fp: - reqs = parse_requires_data(fp.read()) - except IOError: - pass - return reqs - - tl_path = tl_data = None - if path.endswith('.egg'): - if os.path.isdir(path): - p = os.path.join(path, 'EGG-INFO') - meta_path = os.path.join(p, 'PKG-INFO') - metadata = Metadata(path=meta_path, scheme='legacy') - req_path = os.path.join(p, 'requires.txt') - tl_path = os.path.join(p, 'top_level.txt') - requires = parse_requires_path(req_path) - else: - # FIXME handle the case where zipfile is not available - zipf = zipimport.zipimporter(path) - fileobj = StringIO(zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) - metadata = Metadata(fileobj=fileobj, scheme='legacy') - try: - data = zipf.get_data('EGG-INFO/requires.txt') - tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') - requires = parse_requires_data(data.decode('utf-8')) - except IOError: - requires = None - elif path.endswith('.egg-info'): - if os.path.isdir(path): - req_path = os.path.join(path, 'requires.txt') - requires = parse_requires_path(req_path) - path = os.path.join(path, 'PKG-INFO') - tl_path = os.path.join(path, 'top_level.txt') - metadata = Metadata(path=path, scheme='legacy') - else: - raise DistlibException('path must end with .egg-info or .egg, ' - 'got %r' % path) - - if requires: - metadata.add_requirements(requires) - # look for top-level modules in top_level.txt, if present - if tl_data is None: - if tl_path is not None and os.path.exists(tl_path): - with open(tl_path, 'rb') as f: - tl_data = f.read().decode('utf-8') - if not tl_data: - tl_data = [] - else: - tl_data = tl_data.splitlines() - self.modules = tl_data - return metadata - - def __repr__(self): - return '' % (self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - record_path = os.path.join(self.path, 'installed-files.txt') - if os.path.exists(record_path): - for path, _, _ in self.list_installed_files(): - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - return mismatches - - def list_installed_files(self): - """ - Iterates over the ``installed-files.txt`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: a list of (path, hash, size) - """ - - def _md5(path): - f = open(path, 'rb') - try: - content = f.read() - finally: - f.close() - return hashlib.md5(content).hexdigest() - - def _size(path): - return os.stat(path).st_size - - record_path = os.path.join(self.path, 'installed-files.txt') - result = [] - if os.path.exists(record_path): - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - p = os.path.normpath(os.path.join(self.path, line)) - # "./" is present as a marker between installed files - # and installation metadata files - if not os.path.exists(p): - logger.warning('Non-existent file: %s', p) - if p.endswith(('.pyc', '.pyo')): - continue - # otherwise fall through and fail - if not os.path.isdir(p): - result.append((p, _md5(p), _size(p))) - result.append((record_path, None, None)) - return result - - def list_distinfo_files(self, absolute=False): - """ - Iterates over the ``installed-files.txt`` entries and returns paths for - each line if the path is pointing to a file located in the - ``.egg-info`` directory or one of its subdirectories. - - :parameter absolute: If *absolute* is ``True``, each returned path is - transformed into a local absolute path. Otherwise the - raw value from ``installed-files.txt`` is returned. - :type absolute: boolean - :returns: iterator of paths - """ - record_path = os.path.join(self.path, 'installed-files.txt') - if os.path.exists(record_path): - skip = True - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - if line == './': - skip = False - continue - if not skip: - p = os.path.normpath(os.path.join(self.path, line)) - if p.startswith(self.path): - if absolute: - yield p - else: - yield line - - def __eq__(self, other): - return (isinstance(other, EggInfoDistribution) and self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - - -new_dist_class = InstalledDistribution -old_dist_class = EggInfoDistribution - - -class DependencyGraph(object): - """ - Represents a dependency graph between distributions. - - The dependency relationships are stored in an ``adjacency_list`` that maps - distributions to a list of ``(other, label)`` tuples where ``other`` - is a distribution and the edge is labeled with ``label`` (i.e. the version - specifier, if such was provided). Also, for more efficient traversal, for - every distribution ``x``, a list of predecessors is kept in - ``reverse_list[x]``. An edge from distribution ``a`` to - distribution ``b`` means that ``a`` depends on ``b``. If any missing - dependencies are found, they are stored in ``missing``, which is a - dictionary that maps distributions to a list of requirements that were not - provided by any other distributions. - """ - - def __init__(self): - self.adjacency_list = {} - self.reverse_list = {} - self.missing = {} - - def add_distribution(self, distribution): - """Add the *distribution* to the graph. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - """ - self.adjacency_list[distribution] = [] - self.reverse_list[distribution] = [] - # self.missing[distribution] = [] - - def add_edge(self, x, y, label=None): - """Add an edge from distribution *x* to distribution *y* with the given - *label*. - - :type x: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type y: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type label: ``str`` or ``None`` - """ - self.adjacency_list[x].append((y, label)) - # multiple edges are allowed, so be careful - if x not in self.reverse_list[y]: - self.reverse_list[y].append(x) - - def add_missing(self, distribution, requirement): - """ - Add a missing *requirement* for the given *distribution*. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - :type requirement: ``str`` - """ - logger.debug('%s missing %r', distribution, requirement) - self.missing.setdefault(distribution, []).append(requirement) - - def _repr_dist(self, dist): - return '%s %s' % (dist.name, dist.version) - - def repr_node(self, dist, level=1): - """Prints only a subgraph""" - output = [self._repr_dist(dist)] - for other, label in self.adjacency_list[dist]: - dist = self._repr_dist(other) - if label is not None: - dist = '%s [%s]' % (dist, label) - output.append(' ' * level + str(dist)) - suboutput = self.repr_node(other, level + 1) - subs = suboutput.split('\n') - output.extend(subs[1:]) - return '\n'.join(output) - - def to_dot(self, f, skip_disconnected=True): - """Writes a DOT output for the graph to the provided file *f*. - - If *skip_disconnected* is set to ``True``, then all distributions - that are not dependent on any other distribution are skipped. - - :type f: has to support ``file``-like operations - :type skip_disconnected: ``bool`` - """ - disconnected = [] - - f.write("digraph dependencies {\n") - for dist, adjs in self.adjacency_list.items(): - if len(adjs) == 0 and not skip_disconnected: - disconnected.append(dist) - for other, label in adjs: - if label is not None: - f.write('"%s" -> "%s" [label="%s"]\n' % (dist.name, other.name, label)) - else: - f.write('"%s" -> "%s"\n' % (dist.name, other.name)) - if not skip_disconnected and len(disconnected) > 0: - f.write('subgraph disconnected {\n') - f.write('label = "Disconnected"\n') - f.write('bgcolor = red\n') - - for dist in disconnected: - f.write('"%s"' % dist.name) - f.write('\n') - f.write('}\n') - f.write('}\n') - - def topological_sort(self): - """ - Perform a topological sort of the graph. - :return: A tuple, the first element of which is a topologically sorted - list of distributions, and the second element of which is a - list of distributions that cannot be sorted because they have - circular dependencies and so form a cycle. - """ - result = [] - # Make a shallow copy of the adjacency list - alist = {} - for k, v in self.adjacency_list.items(): - alist[k] = v[:] - while True: - # See what we can remove in this run - to_remove = [] - for k, v in list(alist.items())[:]: - if not v: - to_remove.append(k) - del alist[k] - if not to_remove: - # What's left in alist (if anything) is a cycle. - break - # Remove from the adjacency list of others - for k, v in alist.items(): - alist[k] = [(d, r) for d, r in v if d not in to_remove] - logger.debug('Moving to result: %s', ['%s (%s)' % (d.name, d.version) for d in to_remove]) - result.extend(to_remove) - return result, list(alist.keys()) - - def __repr__(self): - """Representation of the graph""" - output = [] - for dist, adjs in self.adjacency_list.items(): - output.append(self.repr_node(dist)) - return '\n'.join(output) - - -def make_graph(dists, scheme='default'): - """Makes a dependency graph from the given distributions. - - :parameter dists: a list of distributions - :type dists: list of :class:`distutils2.database.InstalledDistribution` and - :class:`distutils2.database.EggInfoDistribution` instances - :rtype: a :class:`DependencyGraph` instance - """ - scheme = get_scheme(scheme) - graph = DependencyGraph() - provided = {} # maps names to lists of (version, dist) tuples - - # first, build the graph and find out what's provided - for dist in dists: - graph.add_distribution(dist) - - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - provided.setdefault(name, []).append((version, dist)) - - # now make the edges - for dist in dists: - requires = (dist.run_requires | dist.meta_requires | dist.build_requires | dist.dev_requires) - for req in requires: - try: - matcher = scheme.matcher(req) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - matched = False - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - graph.add_edge(dist, provider, req) - matched = True - break - if not matched: - graph.add_missing(dist, req) - return graph - - -def get_dependent_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - dependent on *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - dep = [dist] # dependent distributions - todo = graph.reverse_list[dist] # list of nodes we should inspect - - while todo: - d = todo.pop() - dep.append(d) - for succ in graph.reverse_list[d]: - if succ not in dep: - todo.append(succ) - - dep.pop(0) # remove dist from dep, was there to prevent infinite loops - return dep - - -def get_required_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - required by *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - in finding the dependencies. - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - req = set() # required distributions - todo = graph.adjacency_list[dist] # list of nodes we should inspect - seen = set(t[0] for t in todo) # already added to todo - - while todo: - d = todo.pop()[0] - req.add(d) - pred_list = graph.adjacency_list[d] - for pred in pred_list: - d = pred[0] - if d not in req and d not in seen: - seen.add(d) - todo.append(pred) - return req - - -def make_dist(name, version, **kwargs): - """ - A convenience method for making a dist given just a name and version. - """ - summary = kwargs.pop('summary', 'Placeholder for summary') - md = Metadata(**kwargs) - md.name = name - md.version = version - md.summary = summary or 'Placeholder for summary' - return Distribution(md) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py deleted file mode 100644 index 56cd286..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py +++ /dev/null @@ -1,508 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import hashlib -import logging -import os -import shutil -import subprocess -import tempfile -try: - from threading import Thread -except ImportError: # pragma: no cover - from dummy_threading import Thread - -from . import DistlibException -from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, - urlparse, build_opener, string_types) -from .util import zip_dir, ServerProxy - -logger = logging.getLogger(__name__) - -DEFAULT_INDEX = 'https://pypi.org/pypi' -DEFAULT_REALM = 'pypi' - - -class PackageIndex(object): - """ - This class represents a package index compatible with PyPI, the Python - Package Index. - """ - - boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' - - def __init__(self, url=None): - """ - Initialise an instance. - - :param url: The URL of the index. If not specified, the URL for PyPI is - used. - """ - self.url = url or DEFAULT_INDEX - self.read_configuration() - scheme, netloc, path, params, query, frag = urlparse(self.url) - if params or query or frag or scheme not in ('http', 'https'): - raise DistlibException('invalid repository: %s' % self.url) - self.password_handler = None - self.ssl_verifier = None - self.gpg = None - self.gpg_home = None - with open(os.devnull, 'w') as sink: - # Use gpg by default rather than gpg2, as gpg2 insists on - # prompting for passwords - for s in ('gpg', 'gpg2'): - try: - rc = subprocess.check_call([s, '--version'], stdout=sink, - stderr=sink) - if rc == 0: - self.gpg = s - break - except OSError: - pass - - def _get_pypirc_command(self): - """ - Get the distutils command for interacting with PyPI configurations. - :return: the command. - """ - from .util import _get_pypirc_command as cmd - return cmd() - - def read_configuration(self): - """ - Read the PyPI access configuration as supported by distutils. This populates - ``username``, ``password``, ``realm`` and ``url`` attributes from the - configuration. - """ - from .util import _load_pypirc - cfg = _load_pypirc(self) - self.username = cfg.get('username') - self.password = cfg.get('password') - self.realm = cfg.get('realm', 'pypi') - self.url = cfg.get('repository', self.url) - - def save_configuration(self): - """ - Save the PyPI access configuration. You must have set ``username`` and - ``password`` attributes before calling this method. - """ - self.check_credentials() - from .util import _store_pypirc - _store_pypirc(self) - - def check_credentials(self): - """ - Check that ``username`` and ``password`` have been set, and raise an - exception if not. - """ - if self.username is None or self.password is None: - raise DistlibException('username and password must be set') - pm = HTTPPasswordMgr() - _, netloc, _, _, _, _ = urlparse(self.url) - pm.add_password(self.realm, netloc, self.username, self.password) - self.password_handler = HTTPBasicAuthHandler(pm) - - def register(self, metadata): # pragma: no cover - """ - Register a distribution on PyPI, using the provided metadata. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the distribution to be - registered. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - metadata.validate() - d = metadata.todict() - d[':action'] = 'verify' - request = self.encode_request(d.items(), []) - self.send_request(request) - d[':action'] = 'submit' - request = self.encode_request(d.items(), []) - return self.send_request(request) - - def _reader(self, name, stream, outbuf): - """ - Thread runner for reading lines of from a subprocess into a buffer. - - :param name: The logical name of the stream (used for logging only). - :param stream: The stream to read from. This will typically a pipe - connected to the output stream of a subprocess. - :param outbuf: The list to append the read lines to. - """ - while True: - s = stream.readline() - if not s: - break - s = s.decode('utf-8').rstrip() - outbuf.append(s) - logger.debug('%s: %s' % (name, s)) - stream.close() - - def get_sign_command(self, filename, signer, sign_password, keystore=None): # pragma: no cover - """ - Return a suitable command for signing a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The signing command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - if sign_password is not None: - cmd.extend(['--batch', '--passphrase-fd', '0']) - td = tempfile.mkdtemp() - sf = os.path.join(td, os.path.basename(filename) + '.asc') - cmd.extend(['--detach-sign', '--armor', '--local-user', - signer, '--output', sf, filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd, sf - - def run_command(self, cmd, input_data=None): - """ - Run a command in a child process , passing it any input data specified. - - :param cmd: The command to run. - :param input_data: If specified, this must be a byte string containing - data to be sent to the child process. - :return: A tuple consisting of the subprocess' exit code, a list of - lines read from the subprocess' ``stdout``, and a list of - lines read from the subprocess' ``stderr``. - """ - kwargs = { - 'stdout': subprocess.PIPE, - 'stderr': subprocess.PIPE, - } - if input_data is not None: - kwargs['stdin'] = subprocess.PIPE - stdout = [] - stderr = [] - p = subprocess.Popen(cmd, **kwargs) - # We don't use communicate() here because we may need to - # get clever with interacting with the command - t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) - t1.start() - t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) - t2.start() - if input_data is not None: - p.stdin.write(input_data) - p.stdin.close() - - p.wait() - t1.join() - t2.join() - return p.returncode, stdout, stderr - - def sign_file(self, filename, signer, sign_password, keystore=None): # pragma: no cover - """ - Sign a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The absolute pathname of the file where the signature is - stored. - """ - cmd, sig_file = self.get_sign_command(filename, signer, sign_password, - keystore) - rc, stdout, stderr = self.run_command(cmd, - sign_password.encode('utf-8')) - if rc != 0: - raise DistlibException('sign command failed with error ' - 'code %s' % rc) - return sig_file - - def upload_file(self, metadata, filename, signer=None, sign_password=None, - filetype='sdist', pyversion='source', keystore=None): - """ - Upload a release file to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the file to be uploaded. - :param filename: The pathname of the file to be uploaded. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param filetype: The type of the file being uploaded. This is the - distutils command which produced that file, e.g. - ``sdist`` or ``bdist_wheel``. - :param pyversion: The version of Python which the release relates - to. For code compatible with any Python, this would - be ``source``, otherwise it would be e.g. ``3.2``. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.exists(filename): - raise DistlibException('not found: %s' % filename) - metadata.validate() - d = metadata.todict() - sig_file = None - if signer: - if not self.gpg: - logger.warning('no signing program available - not signed') - else: - sig_file = self.sign_file(filename, signer, sign_password, - keystore) - with open(filename, 'rb') as f: - file_data = f.read() - md5_digest = hashlib.md5(file_data).hexdigest() - sha256_digest = hashlib.sha256(file_data).hexdigest() - d.update({ - ':action': 'file_upload', - 'protocol_version': '1', - 'filetype': filetype, - 'pyversion': pyversion, - 'md5_digest': md5_digest, - 'sha256_digest': sha256_digest, - }) - files = [('content', os.path.basename(filename), file_data)] - if sig_file: - with open(sig_file, 'rb') as f: - sig_data = f.read() - files.append(('gpg_signature', os.path.basename(sig_file), - sig_data)) - shutil.rmtree(os.path.dirname(sig_file)) - request = self.encode_request(d.items(), files) - return self.send_request(request) - - def upload_documentation(self, metadata, doc_dir): # pragma: no cover - """ - Upload documentation to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the documentation to be - uploaded. - :param doc_dir: The pathname of the directory which contains the - documentation. This should be the directory that - contains the ``index.html`` for the documentation. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.isdir(doc_dir): - raise DistlibException('not a directory: %r' % doc_dir) - fn = os.path.join(doc_dir, 'index.html') - if not os.path.exists(fn): - raise DistlibException('not found: %r' % fn) - metadata.validate() - name, version = metadata.name, metadata.version - zip_data = zip_dir(doc_dir).getvalue() - fields = [(':action', 'doc_upload'), - ('name', name), ('version', version)] - files = [('content', name, zip_data)] - request = self.encode_request(fields, files) - return self.send_request(request) - - def get_verify_command(self, signature_filename, data_filename, - keystore=None): - """ - Return a suitable command for verifying a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The verifying command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - cmd.extend(['--verify', signature_filename, data_filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd - - def verify_signature(self, signature_filename, data_filename, - keystore=None): - """ - Verify a signature for a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: True if the signature was verified, else False. - """ - if not self.gpg: - raise DistlibException('verification unavailable because gpg ' - 'unavailable') - cmd = self.get_verify_command(signature_filename, data_filename, - keystore) - rc, stdout, stderr = self.run_command(cmd) - if rc not in (0, 1): - raise DistlibException('verify command failed with error code %s' % rc) - return rc == 0 - - def download_file(self, url, destfile, digest=None, reporthook=None): - """ - This is a convenience method for downloading a file from an URL. - Normally, this will be a file from the index, though currently - no check is made for this (i.e. a file can be downloaded from - anywhere). - - The method is just like the :func:`urlretrieve` function in the - standard library, except that it allows digest computation to be - done during download and checking that the downloaded data - matched any expected value. - - :param url: The URL of the file to be downloaded (assumed to be - available via an HTTP GET request). - :param destfile: The pathname where the downloaded file is to be - saved. - :param digest: If specified, this must be a (hasher, value) - tuple, where hasher is the algorithm used (e.g. - ``'md5'``) and ``value`` is the expected value. - :param reporthook: The same as for :func:`urlretrieve` in the - standard library. - """ - if digest is None: - digester = None - logger.debug('No digest specified') - else: - if isinstance(digest, (list, tuple)): - hasher, digest = digest - else: - hasher = 'md5' - digester = getattr(hashlib, hasher)() - logger.debug('Digest specified: %s' % digest) - # The following code is equivalent to urlretrieve. - # We need to do it this way so that we can compute the - # digest of the file as we go. - with open(destfile, 'wb') as dfp: - # addinfourl is not a context manager on 2.x - # so we have to use try/finally - sfp = self.send_request(Request(url)) - try: - headers = sfp.info() - blocksize = 8192 - size = -1 - read = 0 - blocknum = 0 - if "content-length" in headers: - size = int(headers["Content-Length"]) - if reporthook: - reporthook(blocknum, blocksize, size) - while True: - block = sfp.read(blocksize) - if not block: - break - read += len(block) - dfp.write(block) - if digester: - digester.update(block) - blocknum += 1 - if reporthook: - reporthook(blocknum, blocksize, size) - finally: - sfp.close() - - # check that we got the whole file, if we can - if size >= 0 and read < size: - raise DistlibException( - 'retrieval incomplete: got only %d out of %d bytes' - % (read, size)) - # if we have a digest, it must match. - if digester: - actual = digester.hexdigest() - if digest != actual: - raise DistlibException('%s digest mismatch for %s: expected ' - '%s, got %s' % (hasher, destfile, - digest, actual)) - logger.debug('Digest verified: %s', digest) - - def send_request(self, req): - """ - Send a standard library :class:`Request` to PyPI and return its - response. - - :param req: The request to send. - :return: The HTTP response from PyPI (a standard library HTTPResponse). - """ - handlers = [] - if self.password_handler: - handlers.append(self.password_handler) - if self.ssl_verifier: - handlers.append(self.ssl_verifier) - opener = build_opener(*handlers) - return opener.open(req) - - def encode_request(self, fields, files): - """ - Encode fields and files for posting to an HTTP server. - - :param fields: The fields to send as a list of (fieldname, value) - tuples. - :param files: The files to send as a list of (fieldname, filename, - file_bytes) tuple. - """ - # Adapted from packaging, which in turn was adapted from - # http://code.activestate.com/recipes/146306 - - parts = [] - boundary = self.boundary - for k, values in fields: - if not isinstance(values, (list, tuple)): - values = [values] - - for v in values: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"' % - k).encode('utf-8'), - b'', - v.encode('utf-8'))) - for key, filename, value in files: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"; filename="%s"' % - (key, filename)).encode('utf-8'), - b'', - value)) - - parts.extend((b'--' + boundary + b'--', b'')) - - body = b'\r\n'.join(parts) - ct = b'multipart/form-data; boundary=' + boundary - headers = { - 'Content-type': ct, - 'Content-length': str(len(body)) - } - return Request(self.url, body, headers) - - def search(self, terms, operator=None): # pragma: no cover - if isinstance(terms, string_types): - terms = {'name': terms} - rpc_proxy = ServerProxy(self.url, timeout=3.0) - try: - return rpc_proxy.search(terms, operator or 'and') - finally: - rpc_proxy('close')() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py deleted file mode 100644 index 222c1bf..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py +++ /dev/null @@ -1,1295 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# - -import gzip -from io import BytesIO -import json -import logging -import os -import posixpath -import re -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import zlib - -from . import DistlibException -from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, queue, quote, unescape, build_opener, - HTTPRedirectHandler as BaseRedirectHandler, text_type, Request, HTTPError, URLError) -from .database import Distribution, DistributionPath, make_dist -from .metadata import Metadata, MetadataInvalidError -from .util import (cached_property, ensure_slash, split_filename, get_project_data, parse_requirement, - parse_name_and_version, ServerProxy, normalize_name) -from .version import get_scheme, UnsupportedVersionError -from .wheel import Wheel, is_compatible - -logger = logging.getLogger(__name__) - -HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') -CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) -HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') -DEFAULT_INDEX = 'https://pypi.org/pypi' - - -def get_all_distribution_names(url=None): - """ - Return all distribution names known by an index. - :param url: The URL of the index. - :return: A list of all known distribution names. - """ - if url is None: - url = DEFAULT_INDEX - client = ServerProxy(url, timeout=3.0) - try: - return client.list_packages() - finally: - client('close')() - - -class RedirectHandler(BaseRedirectHandler): - """ - A class to work around a bug in some Python 3.2.x releases. - """ - - # There's a bug in the base version for some 3.2.x - # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header - # returns e.g. /abc, it bails because it says the scheme '' - # is bogus, when actually it should use the request's - # URL for the scheme. See Python issue #13696. - def http_error_302(self, req, fp, code, msg, headers): - # Some servers (incorrectly) return multiple Location headers - # (so probably same goes for URI). Use first header. - newurl = None - for key in ('location', 'uri'): - if key in headers: - newurl = headers[key] - break - if newurl is None: # pragma: no cover - return - urlparts = urlparse(newurl) - if urlparts.scheme == '': - newurl = urljoin(req.get_full_url(), newurl) - if hasattr(headers, 'replace_header'): - headers.replace_header(key, newurl) - else: - headers[key] = newurl - return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, headers) - - http_error_301 = http_error_303 = http_error_307 = http_error_302 - - -class Locator(object): - """ - A base class for locators - things that locate distributions. - """ - source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') - binary_extensions = ('.egg', '.exe', '.whl') - excluded_extensions = ('.pdf', ) - - # A list of tags indicating which wheels you want to match. The default - # value of None matches against the tags compatible with the running - # Python. If you want to match other values, set wheel_tags on a locator - # instance to a list of tuples (pyver, abi, arch) which you want to match. - wheel_tags = None - - downloadable_extensions = source_extensions + ('.whl', ) - - def __init__(self, scheme='default'): - """ - Initialise an instance. - :param scheme: Because locators look for most recent versions, they - need to know the version scheme to use. This specifies - the current PEP-recommended scheme - use ``'legacy'`` - if you need to support existing distributions on PyPI. - """ - self._cache = {} - self.scheme = scheme - # Because of bugs in some of the handlers on some of the platforms, - # we use our own opener rather than just using urlopen. - self.opener = build_opener(RedirectHandler()) - # If get_project() is called from locate(), the matcher instance - # is set from the requirement passed to locate(). See issue #18 for - # why this can be useful to know. - self.matcher = None - self.errors = queue.Queue() - - def get_errors(self): - """ - Return any errors which have occurred. - """ - result = [] - while not self.errors.empty(): # pragma: no cover - try: - e = self.errors.get(False) - result.append(e) - except self.errors.Empty: - continue - self.errors.task_done() - return result - - def clear_errors(self): - """ - Clear any errors which may have been logged. - """ - # Just get the errors and throw them away - self.get_errors() - - def clear_cache(self): - self._cache.clear() - - def _get_scheme(self): - return self._scheme - - def _set_scheme(self, value): - self._scheme = value - - scheme = property(_get_scheme, _set_scheme) - - def _get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This should be implemented in subclasses. - - If called from a locate() request, self.matcher will be set to a - matcher for the requirement to satisfy, otherwise it will be None. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This calls _get_project to do all the work, and just implements a caching layer on top. - """ - if self._cache is None: # pragma: no cover - result = self._get_project(name) - elif name in self._cache: - result = self._cache[name] - else: - self.clear_errors() - result = self._get_project(name) - self._cache[name] = result - return result - - def score_url(self, url): - """ - Give an url a score which can be used to choose preferred URLs - for a given project release. - """ - t = urlparse(url) - basename = posixpath.basename(t.path) - compatible = True - is_wheel = basename.endswith('.whl') - is_downloadable = basename.endswith(self.downloadable_extensions) - if is_wheel: - compatible = is_compatible(Wheel(basename), self.wheel_tags) - return (t.scheme == 'https', 'pypi.org' in t.netloc, is_downloadable, is_wheel, compatible, basename) - - def prefer_url(self, url1, url2): - """ - Choose one of two URLs where both are candidates for distribution - archives for the same version of a distribution (for example, - .tar.gz vs. zip). - - The current implementation favours https:// URLs over http://, archives - from PyPI over those from other locations, wheel compatibility (if a - wheel) and then the archive name. - """ - result = url2 - if url1: - s1 = self.score_url(url1) - s2 = self.score_url(url2) - if s1 > s2: - result = url1 - if result != url2: - logger.debug('Not replacing %r with %r', url1, url2) - else: - logger.debug('Replacing %r with %r', url1, url2) - return result - - def split_filename(self, filename, project_name): - """ - Attempt to split a filename in project name, version and Python version. - """ - return split_filename(filename, project_name) - - def convert_url_to_download_info(self, url, project_name): - """ - See if a URL is a candidate for a download URL for a project (the URL - has typically been scraped from an HTML page). - - If it is, a dictionary is returned with keys "name", "version", - "filename" and "url"; otherwise, None is returned. - """ - - def same_project(name1, name2): - return normalize_name(name1) == normalize_name(name2) - - result = None - scheme, netloc, path, params, query, frag = urlparse(url) - if frag.lower().startswith('egg='): # pragma: no cover - logger.debug('%s: version hint in fragment: %r', project_name, frag) - m = HASHER_HASH.match(frag) - if m: - algo, digest = m.groups() - else: - algo, digest = None, None - origpath = path - if path and path[-1] == '/': # pragma: no cover - path = path[:-1] - if path.endswith('.whl'): - try: - wheel = Wheel(path) - if not is_compatible(wheel, self.wheel_tags): - logger.debug('Wheel not compatible: %s', path) - else: - if project_name is None: - include = True - else: - include = same_project(wheel.name, project_name) - if include: - result = { - 'name': wheel.name, - 'version': wheel.version, - 'filename': wheel.filename, - 'url': urlunparse((scheme, netloc, origpath, params, query, '')), - 'python-version': ', '.join(['.'.join(list(v[2:])) for v in wheel.pyver]), - } - except Exception: # pragma: no cover - logger.warning('invalid path for wheel: %s', path) - elif not path.endswith(self.downloadable_extensions): # pragma: no cover - logger.debug('Not downloadable: %s', path) - else: # downloadable extension - path = filename = posixpath.basename(path) - for ext in self.downloadable_extensions: - if path.endswith(ext): - path = path[:-len(ext)] - t = self.split_filename(path, project_name) - if not t: # pragma: no cover - logger.debug('No match for project/version: %s', path) - else: - name, version, pyver = t - if not project_name or same_project(project_name, name): - result = { - 'name': name, - 'version': version, - 'filename': filename, - 'url': urlunparse((scheme, netloc, origpath, params, query, '')), - } - if pyver: # pragma: no cover - result['python-version'] = pyver - break - if result and algo: - result['%s_digest' % algo] = digest - return result - - def _get_digest(self, info): - """ - Get a digest from a dictionary by looking at a "digests" dictionary - or keys of the form 'algo_digest'. - - Returns a 2-tuple (algo, digest) if found, else None. Currently - looks only for SHA256, then MD5. - """ - result = None - if 'digests' in info: - digests = info['digests'] - for algo in ('sha256', 'md5'): - if algo in digests: - result = (algo, digests[algo]) - break - if not result: - for algo in ('sha256', 'md5'): - key = '%s_digest' % algo - if key in info: - result = (algo, info[key]) - break - return result - - def _update_version_data(self, result, info): - """ - Update a result dictionary (the final result from _get_project) with a - dictionary for a specific version, which typically holds information - gleaned from a filename or URL for an archive for the distribution. - """ - name = info.pop('name') - version = info.pop('version') - if version in result: - dist = result[version] - md = dist.metadata - else: - dist = make_dist(name, version, scheme=self.scheme) - md = dist.metadata - dist.digest = digest = self._get_digest(info) - url = info['url'] - result['digests'][url] = digest - if md.source_url != info['url']: - md.source_url = self.prefer_url(md.source_url, url) - result['urls'].setdefault(version, set()).add(url) - dist.locator = self - result[version] = dist - - def locate(self, requirement, prereleases=False): - """ - Find the most recent distribution which matches the given - requirement. - - :param requirement: A requirement of the form 'foo (1.0)' or perhaps - 'foo (>= 1.0, < 2.0, != 1.3)' - :param prereleases: If ``True``, allow pre-release versions - to be located. Otherwise, pre-release versions - are not returned. - :return: A :class:`Distribution` instance, or ``None`` if no such - distribution could be located. - """ - result = None - r = parse_requirement(requirement) - if r is None: # pragma: no cover - raise DistlibException('Not a valid requirement: %r' % requirement) - scheme = get_scheme(self.scheme) - self.matcher = matcher = scheme.matcher(r.requirement) - logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) - versions = self.get_project(r.name) - if len(versions) > 2: # urls and digests keys are present - # sometimes, versions are invalid - slist = [] - vcls = matcher.version_class - for k in versions: - if k in ('urls', 'digests'): - continue - try: - if not matcher.match(k): - pass # logger.debug('%s did not match %r', matcher, k) - else: - if prereleases or not vcls(k).is_prerelease: - slist.append(k) - except Exception: # pragma: no cover - logger.warning('error matching %s with %r', matcher, k) - pass # slist.append(k) - if len(slist) > 1: - slist = sorted(slist, key=scheme.key) - if slist: - logger.debug('sorted list: %s', slist) - version = slist[-1] - result = versions[version] - if result: - if r.extras: - result.extras = r.extras - result.download_urls = versions.get('urls', {}).get(version, set()) - d = {} - sd = versions.get('digests', {}) - for url in result.download_urls: - if url in sd: # pragma: no cover - d[url] = sd[url] - result.digests = d - self.matcher = None - return result - - -class PyPIRPCLocator(Locator): - """ - This locator uses XML-RPC to locate distributions. It therefore - cannot be used with simple mirrors (that only mirror file content). - """ - - def __init__(self, url, **kwargs): - """ - Initialise an instance. - - :param url: The URL to use for XML-RPC. - :param kwargs: Passed to the superclass constructor. - """ - super(PyPIRPCLocator, self).__init__(**kwargs) - self.base_url = url - self.client = ServerProxy(url, timeout=3.0) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - return set(self.client.list_packages()) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - versions = self.client.package_releases(name, True) - for v in versions: - urls = self.client.release_urls(name, v) - data = self.client.release_data(name, v) - metadata = Metadata(scheme=self.scheme) - metadata.name = data['name'] - metadata.version = data['version'] - metadata.license = data.get('license') - metadata.keywords = data.get('keywords', []) - metadata.summary = data.get('summary') - dist = Distribution(metadata) - if urls: - info = urls[0] - metadata.source_url = info['url'] - dist.digest = self._get_digest(info) - dist.locator = self - result[v] = dist - for info in urls: - url = info['url'] - digest = self._get_digest(info) - result['urls'].setdefault(v, set()).add(url) - result['digests'][url] = digest - return result - - -class PyPIJSONLocator(Locator): - """ - This locator uses PyPI's JSON interface. It's very limited in functionality - and probably not worth using. - """ - - def __init__(self, url, **kwargs): - super(PyPIJSONLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - url = urljoin(self.base_url, '%s/json' % quote(name)) - try: - resp = self.opener.open(url) - data = resp.read().decode() # for now - d = json.loads(data) - md = Metadata(scheme=self.scheme) - data = d['info'] - md.name = data['name'] - md.version = data['version'] - md.license = data.get('license') - md.keywords = data.get('keywords', []) - md.summary = data.get('summary') - dist = Distribution(md) - dist.locator = self - # urls = d['urls'] - result[md.version] = dist - for info in d['urls']: - url = info['url'] - dist.download_urls.add(url) - dist.digests[url] = self._get_digest(info) - result['urls'].setdefault(md.version, set()).add(url) - result['digests'][url] = self._get_digest(info) - # Now get other releases - for version, infos in d['releases'].items(): - if version == md.version: - continue # already done - omd = Metadata(scheme=self.scheme) - omd.name = md.name - omd.version = version - odist = Distribution(omd) - odist.locator = self - result[version] = odist - for info in infos: - url = info['url'] - odist.download_urls.add(url) - odist.digests[url] = self._get_digest(info) - result['urls'].setdefault(version, set()).add(url) - result['digests'][url] = self._get_digest(info) - - -# for info in urls: -# md.source_url = info['url'] -# dist.digest = self._get_digest(info) -# dist.locator = self -# for info in urls: -# url = info['url'] -# result['urls'].setdefault(md.version, set()).add(url) -# result['digests'][url] = self._get_digest(info) - except Exception as e: - self.errors.put(text_type(e)) - logger.exception('JSON fetch failed: %s', e) - return result - - -class Page(object): - """ - This class represents a scraped HTML page. - """ - # The following slightly hairy-looking regex just looks for the contents of - # an anchor link, which has an attribute "href" either immediately preceded - # or immediately followed by a "rel" attribute. The attribute values can be - # declared with double quotes, single quotes or no quotes - which leads to - # the length of the expression. - _href = re.compile( - """ -(rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? -href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) -(\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? -""", re.I | re.S | re.X) - _base = re.compile(r"""]+)""", re.I | re.S) - - def __init__(self, data, url): - """ - Initialise an instance with the Unicode page contents and the URL they - came from. - """ - self.data = data - self.base_url = self.url = url - m = self._base.search(self.data) - if m: - self.base_url = m.group(1) - - _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) - - @cached_property - def links(self): - """ - Return the URLs of all the links on a page together with information - about their "rel" attribute, for determining which ones to treat as - downloads and which ones to queue for further scraping. - """ - - def clean(url): - "Tidy up an URL." - scheme, netloc, path, params, query, frag = urlparse(url) - return urlunparse((scheme, netloc, quote(path), params, query, frag)) - - result = set() - for match in self._href.finditer(self.data): - d = match.groupdict('') - rel = (d['rel1'] or d['rel2'] or d['rel3'] or d['rel4'] or d['rel5'] or d['rel6']) - url = d['url1'] or d['url2'] or d['url3'] - url = urljoin(self.base_url, url) - url = unescape(url) - url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) - result.add((url, rel)) - # We sort the result, hoping to bring the most recent versions - # to the front - result = sorted(result, key=lambda t: t[0], reverse=True) - return result - - -class SimpleScrapingLocator(Locator): - """ - A locator which scrapes HTML pages to locate downloads for a distribution. - This runs multiple threads to do the I/O; performance is at least as good - as pip's PackageFinder, which works in an analogous fashion. - """ - - # These are used to deal with various Content-Encoding schemes. - decoders = { - 'deflate': zlib.decompress, - 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(b)).read(), - 'none': lambda b: b, - } - - def __init__(self, url, timeout=None, num_workers=10, **kwargs): - """ - Initialise an instance. - :param url: The root URL to use for scraping. - :param timeout: The timeout, in seconds, to be applied to requests. - This defaults to ``None`` (no timeout specified). - :param num_workers: The number of worker threads you want to do I/O, - This defaults to 10. - :param kwargs: Passed to the superclass. - """ - super(SimpleScrapingLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - self.timeout = timeout - self._page_cache = {} - self._seen = set() - self._to_fetch = queue.Queue() - self._bad_hosts = set() - self.skip_externals = False - self.num_workers = num_workers - self._lock = threading.RLock() - # See issue #45: we need to be resilient when the locator is used - # in a thread, e.g. with concurrent.futures. We can't use self._lock - # as it is for coordinating our internal threads - the ones created - # in _prepare_threads. - self._gplock = threading.RLock() - self.platform_check = False # See issue #112 - - def _prepare_threads(self): - """ - Threads are created only when get_project is called, and terminate - before it returns. They are there primarily to parallelise I/O (i.e. - fetching web pages). - """ - self._threads = [] - for i in range(self.num_workers): - t = threading.Thread(target=self._fetch) - t.daemon = True - t.start() - self._threads.append(t) - - def _wait_threads(self): - """ - Tell all the threads to terminate (by sending a sentinel value) and - wait for them to do so. - """ - # Note that you need two loops, since you can't say which - # thread will get each sentinel - for t in self._threads: - self._to_fetch.put(None) # sentinel - for t in self._threads: - t.join() - self._threads = [] - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - with self._gplock: - self.result = result - self.project_name = name - url = urljoin(self.base_url, '%s/' % quote(name)) - self._seen.clear() - self._page_cache.clear() - self._prepare_threads() - try: - logger.debug('Queueing %s', url) - self._to_fetch.put(url) - self._to_fetch.join() - finally: - self._wait_threads() - del self.result - return result - - platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' - r'win(32|_amd64)|macosx_?\d+)\b', re.I) - - def _is_platform_dependent(self, url): - """ - Does an URL refer to a platform-specific download? - """ - return self.platform_dependent.search(url) - - def _process_download(self, url): - """ - See if an URL is a suitable download for a project. - - If it is, register information in the result dictionary (for - _get_project) about the specific version it's for. - - Note that the return value isn't actually used other than as a boolean - value. - """ - if self.platform_check and self._is_platform_dependent(url): - info = None - else: - info = self.convert_url_to_download_info(url, self.project_name) - logger.debug('process_download: %s -> %s', url, info) - if info: - with self._lock: # needed because self.result is shared - self._update_version_data(self.result, info) - return info - - def _should_queue(self, link, referrer, rel): - """ - Determine whether a link URL from a referring page and with a - particular "rel" attribute should be queued for scraping. - """ - scheme, netloc, path, _, _, _ = urlparse(link) - if path.endswith(self.source_extensions + self.binary_extensions + self.excluded_extensions): - result = False - elif self.skip_externals and not link.startswith(self.base_url): - result = False - elif not referrer.startswith(self.base_url): - result = False - elif rel not in ('homepage', 'download'): - result = False - elif scheme not in ('http', 'https', 'ftp'): - result = False - elif self._is_platform_dependent(link): - result = False - else: - host = netloc.split(':', 1)[0] - if host.lower() == 'localhost': - result = False - else: - result = True - logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, referrer, result) - return result - - def _fetch(self): - """ - Get a URL to fetch from the work queue, get the HTML page, examine its - links for download candidates and candidates for further scraping. - - This is a handy method to run in a thread. - """ - while True: - url = self._to_fetch.get() - try: - if url: - page = self.get_page(url) - if page is None: # e.g. after an error - continue - for link, rel in page.links: - if link not in self._seen: - try: - self._seen.add(link) - if (not self._process_download(link) and self._should_queue(link, url, rel)): - logger.debug('Queueing %s from %s', link, url) - self._to_fetch.put(link) - except MetadataInvalidError: # e.g. invalid versions - pass - except Exception as e: # pragma: no cover - self.errors.put(text_type(e)) - finally: - # always do this, to avoid hangs :-) - self._to_fetch.task_done() - if not url: - # logger.debug('Sentinel seen, quitting.') - break - - def get_page(self, url): - """ - Get the HTML for an URL, possibly from an in-memory cache. - - XXX TODO Note: this cache is never actually cleared. It's assumed that - the data won't get stale over the lifetime of a locator instance (not - necessarily true for the default_locator). - """ - # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api - scheme, netloc, path, _, _, _ = urlparse(url) - if scheme == 'file' and os.path.isdir(url2pathname(path)): - url = urljoin(ensure_slash(url), 'index.html') - - if url in self._page_cache: - result = self._page_cache[url] - logger.debug('Returning %s from cache: %s', url, result) - else: - host = netloc.split(':', 1)[0] - result = None - if host in self._bad_hosts: - logger.debug('Skipping %s due to bad host %s', url, host) - else: - req = Request(url, headers={'Accept-encoding': 'identity'}) - try: - logger.debug('Fetching %s', url) - resp = self.opener.open(req, timeout=self.timeout) - logger.debug('Fetched %s', url) - headers = resp.info() - content_type = headers.get('Content-Type', '') - if HTML_CONTENT_TYPE.match(content_type): - final_url = resp.geturl() - data = resp.read() - encoding = headers.get('Content-Encoding') - if encoding: - decoder = self.decoders[encoding] # fail if not found - data = decoder(data) - encoding = 'utf-8' - m = CHARSET.search(content_type) - if m: - encoding = m.group(1) - try: - data = data.decode(encoding) - except UnicodeError: # pragma: no cover - data = data.decode('latin-1') # fallback - result = Page(data, final_url) - self._page_cache[final_url] = result - except HTTPError as e: - if e.code != 404: - logger.exception('Fetch failed: %s: %s', url, e) - except URLError as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - with self._lock: - self._bad_hosts.add(host) - except Exception as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - finally: - self._page_cache[url] = result # even if None (failure) - return result - - _distname_re = re.compile(']*>([^<]+)<') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - page = self.get_page(self.base_url) - if not page: - raise DistlibException('Unable to get %s' % self.base_url) - for match in self._distname_re.finditer(page.data): - result.add(match.group(1)) - return result - - -class DirectoryLocator(Locator): - """ - This class locates distributions in a directory tree. - """ - - def __init__(self, path, **kwargs): - """ - Initialise an instance. - :param path: The root of the directory tree to search. - :param kwargs: Passed to the superclass constructor, - except for: - * recursive - if True (the default), subdirectories are - recursed into. If False, only the top-level directory - is searched, - """ - self.recursive = kwargs.pop('recursive', True) - super(DirectoryLocator, self).__init__(**kwargs) - path = os.path.abspath(path) - if not os.path.isdir(path): # pragma: no cover - raise DistlibException('Not a directory: %r' % path) - self.base_dir = path - - def should_include(self, filename, parent): - """ - Should a filename be considered as a candidate for a distribution - archive? As well as the filename, the directory which contains it - is provided, though not used by the current implementation. - """ - return filename.endswith(self.downloadable_extensions) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', pathname2url(os.path.abspath(fn)), '', '', '')) - info = self.convert_url_to_download_info(url, name) - if info: - self._update_version_data(result, info) - if not self.recursive: - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', pathname2url(os.path.abspath(fn)), '', '', '')) - info = self.convert_url_to_download_info(url, None) - if info: - result.add(info['name']) - if not self.recursive: - break - return result - - -class JSONLocator(Locator): - """ - This locator uses special extended metadata (not available on PyPI) and is - the basis of performant dependency resolution in distlib. Other locators - require archive downloads before dependencies can be determined! As you - might imagine, that can be slow. - """ - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - data = get_project_data(name) - if data: - for info in data.get('files', []): - if info['ptype'] != 'sdist' or info['pyversion'] != 'source': - continue - # We don't store summary in project metadata as it makes - # the data bigger for no benefit during dependency - # resolution - dist = make_dist(data['name'], - info['version'], - summary=data.get('summary', 'Placeholder for summary'), - scheme=self.scheme) - md = dist.metadata - md.source_url = info['url'] - # TODO SHA256 digest - if 'digest' in info and info['digest']: - dist.digest = ('md5', info['digest']) - md.dependencies = info.get('requirements', {}) - dist.exports = info.get('exports', {}) - result[dist.version] = dist - result['urls'].setdefault(dist.version, set()).add(info['url']) - return result - - -class DistPathLocator(Locator): - """ - This locator finds installed distributions in a path. It can be useful for - adding to an :class:`AggregatingLocator`. - """ - - def __init__(self, distpath, **kwargs): - """ - Initialise an instance. - - :param distpath: A :class:`DistributionPath` instance to search. - """ - super(DistPathLocator, self).__init__(**kwargs) - assert isinstance(distpath, DistributionPath) - self.distpath = distpath - - def _get_project(self, name): - dist = self.distpath.get_distribution(name) - if dist is None: - result = {'urls': {}, 'digests': {}} - else: - result = { - dist.version: dist, - 'urls': { - dist.version: set([dist.source_url]) - }, - 'digests': { - dist.version: set([None]) - } - } - return result - - -class AggregatingLocator(Locator): - """ - This class allows you to chain and/or merge a list of locators. - """ - - def __init__(self, *locators, **kwargs): - """ - Initialise an instance. - - :param locators: The list of locators to search. - :param kwargs: Passed to the superclass constructor, - except for: - * merge - if False (the default), the first successful - search from any of the locators is returned. If True, - the results from all locators are merged (this can be - slow). - """ - self.merge = kwargs.pop('merge', False) - self.locators = locators - super(AggregatingLocator, self).__init__(**kwargs) - - def clear_cache(self): - super(AggregatingLocator, self).clear_cache() - for locator in self.locators: - locator.clear_cache() - - def _set_scheme(self, value): - self._scheme = value - for locator in self.locators: - locator.scheme = value - - scheme = property(Locator.scheme.fget, _set_scheme) - - def _get_project(self, name): - result = {} - for locator in self.locators: - d = locator.get_project(name) - if d: - if self.merge: - files = result.get('urls', {}) - digests = result.get('digests', {}) - # next line could overwrite result['urls'], result['digests'] - result.update(d) - df = result.get('urls') - if files and df: - for k, v in files.items(): - if k in df: - df[k] |= v - else: - df[k] = v - dd = result.get('digests') - if digests and dd: - dd.update(digests) - else: - # See issue #18. If any dists are found and we're looking - # for specific constraints, we only return something if - # a match is found. For example, if a DirectoryLocator - # returns just foo (1.0) while we're looking for - # foo (>= 2.0), we'll pretend there was nothing there so - # that subsequent locators can be queried. Otherwise we - # would just return foo (1.0) which would then lead to a - # failure to find foo (>= 2.0), because other locators - # weren't searched. Note that this only matters when - # merge=False. - if self.matcher is None: - found = True - else: - found = False - for k in d: - if self.matcher.match(k): - found = True - break - if found: - result = d - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for locator in self.locators: - try: - result |= locator.get_distribution_names() - except NotImplementedError: - pass - return result - - -# We use a legacy scheme simply because most of the dists on PyPI use legacy -# versions which don't conform to PEP 440. -default_locator = AggregatingLocator( - # JSONLocator(), # don't use as PEP 426 is withdrawn - SimpleScrapingLocator('https://pypi.org/simple/', timeout=3.0), - scheme='legacy') - -locate = default_locator.locate - - -class DependencyFinder(object): - """ - Locate dependencies for distributions. - """ - - def __init__(self, locator=None): - """ - Initialise an instance, using the specified locator - to locate distributions. - """ - self.locator = locator or default_locator - self.scheme = get_scheme(self.locator.scheme) - - def add_distribution(self, dist): - """ - Add a distribution to the finder. This will update internal information - about who provides what. - :param dist: The distribution to add. - """ - logger.debug('adding distribution %s', dist) - name = dist.key - self.dists_by_name[name] = dist - self.dists[(name, dist.version)] = dist - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - self.provided.setdefault(name, set()).add((version, dist)) - - def remove_distribution(self, dist): - """ - Remove a distribution from the finder. This will update internal - information about who provides what. - :param dist: The distribution to remove. - """ - logger.debug('removing distribution %s', dist) - name = dist.key - del self.dists_by_name[name] - del self.dists[(name, dist.version)] - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Remove from provided: %s, %s, %s', name, version, dist) - s = self.provided[name] - s.remove((version, dist)) - if not s: - del self.provided[name] - - def get_matcher(self, reqt): - """ - Get a version matcher for a requirement. - :param reqt: The requirement - :type reqt: str - :return: A version matcher (an instance of - :class:`distlib.version.Matcher`). - """ - try: - matcher = self.scheme.matcher(reqt) - except UnsupportedVersionError: # pragma: no cover - # XXX compat-mode if cannot read the version - name = reqt.split()[0] - matcher = self.scheme.matcher(name) - return matcher - - def find_providers(self, reqt): - """ - Find the distributions which can fulfill a requirement. - - :param reqt: The requirement. - :type reqt: str - :return: A set of distribution which can fulfill the requirement. - """ - matcher = self.get_matcher(reqt) - name = matcher.key # case-insensitive - result = set() - provided = self.provided - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - result.add(provider) - break - return result - - def try_to_replace(self, provider, other, problems): - """ - Attempt to replace one provider with another. This is typically used - when resolving dependencies from multiple sources, e.g. A requires - (B >= 1.0) while C requires (B >= 1.1). - - For successful replacement, ``provider`` must meet all the requirements - which ``other`` fulfills. - - :param provider: The provider we are trying to replace with. - :param other: The provider we're trying to replace. - :param problems: If False is returned, this will contain what - problems prevented replacement. This is currently - a tuple of the literal string 'cantreplace', - ``provider``, ``other`` and the set of requirements - that ``provider`` couldn't fulfill. - :return: True if we can replace ``other`` with ``provider``, else - False. - """ - rlist = self.reqts[other] - unmatched = set() - for s in rlist: - matcher = self.get_matcher(s) - if not matcher.match(provider.version): - unmatched.add(s) - if unmatched: - # can't replace other with provider - problems.add(('cantreplace', provider, other, frozenset(unmatched))) - result = False - else: - # can replace other with provider - self.remove_distribution(other) - del self.reqts[other] - for s in rlist: - self.reqts.setdefault(provider, set()).add(s) - self.add_distribution(provider) - result = True - return result - - def find(self, requirement, meta_extras=None, prereleases=False): - """ - Find a distribution and all distributions it depends on. - - :param requirement: The requirement specifying the distribution to - find, or a Distribution instance. - :param meta_extras: A list of meta extras such as :test:, :build: and - so on. - :param prereleases: If ``True``, allow pre-release versions to be - returned - otherwise, don't return prereleases - unless they're all that's available. - - Return a set of :class:`Distribution` instances and a set of - problems. - - The distributions returned should be such that they have the - :attr:`required` attribute set to ``True`` if they were - from the ``requirement`` passed to ``find()``, and they have the - :attr:`build_time_dependency` attribute set to ``True`` unless they - are post-installation dependencies of the ``requirement``. - - The problems should be a tuple consisting of the string - ``'unsatisfied'`` and the requirement which couldn't be satisfied - by any distribution known to the locator. - """ - - self.provided = {} - self.dists = {} - self.dists_by_name = {} - self.reqts = {} - - meta_extras = set(meta_extras or []) - if ':*:' in meta_extras: - meta_extras.remove(':*:') - # :meta: and :run: are implicitly included - meta_extras |= set([':test:', ':build:', ':dev:']) - - if isinstance(requirement, Distribution): - dist = odist = requirement - logger.debug('passed %s as requirement', odist) - else: - dist = odist = self.locator.locate(requirement, prereleases=prereleases) - if dist is None: - raise DistlibException('Unable to locate %r' % requirement) - logger.debug('located %s', odist) - dist.requested = True - problems = set() - todo = set([dist]) - install_dists = set([odist]) - while todo: - dist = todo.pop() - name = dist.key # case-insensitive - if name not in self.dists_by_name: - self.add_distribution(dist) - else: - # import pdb; pdb.set_trace() - other = self.dists_by_name[name] - if other != dist: - self.try_to_replace(dist, other, problems) - - ireqts = dist.run_requires | dist.meta_requires - sreqts = dist.build_requires - ereqts = set() - if meta_extras and dist in install_dists: - for key in ('test', 'build', 'dev'): - e = ':%s:' % key - if e in meta_extras: - ereqts |= getattr(dist, '%s_requires' % key) - all_reqts = ireqts | sreqts | ereqts - for r in all_reqts: - providers = self.find_providers(r) - if not providers: - logger.debug('No providers found for %r', r) - provider = self.locator.locate(r, prereleases=prereleases) - # If no provider is found and we didn't consider - # prereleases, consider them now. - if provider is None and not prereleases: - provider = self.locator.locate(r, prereleases=True) - if provider is None: - logger.debug('Cannot satisfy %r', r) - problems.add(('unsatisfied', r)) - else: - n, v = provider.key, provider.version - if (n, v) not in self.dists: - todo.add(provider) - providers.add(provider) - if r in ireqts and dist in install_dists: - install_dists.add(provider) - logger.debug('Adding %s to install_dists', provider.name_and_version) - for p in providers: - name = p.key - if name not in self.dists_by_name: - self.reqts.setdefault(p, set()).add(r) - else: - other = self.dists_by_name[name] - if other != p: - # see if other can be replaced by p - self.try_to_replace(p, other, problems) - - dists = set(self.dists.values()) - for dist in dists: - dist.build_time_dependency = dist not in install_dists - if dist.build_time_dependency: - logger.debug('%s is a build-time dependency only.', dist.name_and_version) - logger.debug('find done for %s', odist) - return dists, problems diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py deleted file mode 100644 index 420dcf1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py +++ /dev/null @@ -1,384 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2023 Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Class representing the list of files in a distribution. - -Equivalent to distutils.filelist, but fixes some problems. -""" -import fnmatch -import logging -import os -import re -import sys - -from . import DistlibException -from .compat import fsdecode -from .util import convert_path - - -__all__ = ['Manifest'] - -logger = logging.getLogger(__name__) - -# a \ followed by some spaces + EOL -_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) -_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) - -# -# Due to the different results returned by fnmatch.translate, we need -# to do slightly different processing for Python 2.7 and 3.2 ... this needed -# to be brought in for Python 3.6 onwards. -# -_PYTHON_VERSION = sys.version_info[:2] - - -class Manifest(object): - """ - A list of files built by exploring the filesystem and filtered by applying various - patterns to what we find there. - """ - - def __init__(self, base=None): - """ - Initialise an instance. - - :param base: The base directory to explore under. - """ - self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) - self.prefix = self.base + os.sep - self.allfiles = None - self.files = set() - - # - # Public API - # - - def findall(self): - """Find all files under the base and set ``allfiles`` to the absolute - pathnames of files found. - """ - from stat import S_ISREG, S_ISDIR, S_ISLNK - - self.allfiles = allfiles = [] - root = self.base - stack = [root] - pop = stack.pop - push = stack.append - - while stack: - root = pop() - names = os.listdir(root) - - for name in names: - fullname = os.path.join(root, name) - - # Avoid excess stat calls -- just one will do, thank you! - stat = os.stat(fullname) - mode = stat.st_mode - if S_ISREG(mode): - allfiles.append(fsdecode(fullname)) - elif S_ISDIR(mode) and not S_ISLNK(mode): - push(fullname) - - def add(self, item): - """ - Add a file to the manifest. - - :param item: The pathname to add. This can be relative to the base. - """ - if not item.startswith(self.prefix): - item = os.path.join(self.base, item) - self.files.add(os.path.normpath(item)) - - def add_many(self, items): - """ - Add a list of files to the manifest. - - :param items: The pathnames to add. These can be relative to the base. - """ - for item in items: - self.add(item) - - def sorted(self, wantdirs=False): - """ - Return sorted files in directory order - """ - - def add_dir(dirs, d): - dirs.add(d) - logger.debug('add_dir added %s', d) - if d != self.base: - parent, _ = os.path.split(d) - assert parent not in ('', '/') - add_dir(dirs, parent) - - result = set(self.files) # make a copy! - if wantdirs: - dirs = set() - for f in result: - add_dir(dirs, os.path.dirname(f)) - result |= dirs - return [os.path.join(*path_tuple) for path_tuple in - sorted(os.path.split(path) for path in result)] - - def clear(self): - """Clear all collected files.""" - self.files = set() - self.allfiles = [] - - def process_directive(self, directive): - """ - Process a directive which either adds some files from ``allfiles`` to - ``files``, or removes some files from ``files``. - - :param directive: The directive to process. This should be in a format - compatible with distutils ``MANIFEST.in`` files: - - http://docs.python.org/distutils/sourcedist.html#commands - """ - # Parse the line: split it up, make sure the right number of words - # is there, and return the relevant words. 'action' is always - # defined: it's the first word of the line. Which of the other - # three are defined depends on the action; it'll be either - # patterns, (dir and patterns), or (dirpattern). - action, patterns, thedir, dirpattern = self._parse_directive(directive) - - # OK, now we know that the action is valid and we have the - # right number of words on the line for that action -- so we - # can proceed with minimal error-checking. - if action == 'include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=True): - logger.warning('no files found matching %r', pattern) - - elif action == 'exclude': - for pattern in patterns: - self._exclude_pattern(pattern, anchor=True) - - elif action == 'global-include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=False): - logger.warning('no files found matching %r ' - 'anywhere in distribution', pattern) - - elif action == 'global-exclude': - for pattern in patterns: - self._exclude_pattern(pattern, anchor=False) - - elif action == 'recursive-include': - for pattern in patterns: - if not self._include_pattern(pattern, prefix=thedir): - logger.warning('no files found matching %r ' - 'under directory %r', pattern, thedir) - - elif action == 'recursive-exclude': - for pattern in patterns: - self._exclude_pattern(pattern, prefix=thedir) - - elif action == 'graft': - if not self._include_pattern(None, prefix=dirpattern): - logger.warning('no directories found matching %r', - dirpattern) - - elif action == 'prune': - if not self._exclude_pattern(None, prefix=dirpattern): - logger.warning('no previously-included directories found ' - 'matching %r', dirpattern) - else: # pragma: no cover - # This should never happen, as it should be caught in - # _parse_template_line - raise DistlibException( - 'invalid action %r' % action) - - # - # Private API - # - - def _parse_directive(self, directive): - """ - Validate a directive. - :param directive: The directive to validate. - :return: A tuple of action, patterns, thedir, dir_patterns - """ - words = directive.split() - if len(words) == 1 and words[0] not in ('include', 'exclude', - 'global-include', - 'global-exclude', - 'recursive-include', - 'recursive-exclude', - 'graft', 'prune'): - # no action given, let's use the default 'include' - words.insert(0, 'include') - - action = words[0] - patterns = thedir = dir_pattern = None - - if action in ('include', 'exclude', - 'global-include', 'global-exclude'): - if len(words) < 2: - raise DistlibException( - '%r expects ...' % action) - - patterns = [convert_path(word) for word in words[1:]] - - elif action in ('recursive-include', 'recursive-exclude'): - if len(words) < 3: - raise DistlibException( - '%r expects ...' % action) - - thedir = convert_path(words[1]) - patterns = [convert_path(word) for word in words[2:]] - - elif action in ('graft', 'prune'): - if len(words) != 2: - raise DistlibException( - '%r expects a single ' % action) - - dir_pattern = convert_path(words[1]) - - else: - raise DistlibException('unknown action %r' % action) - - return action, patterns, thedir, dir_pattern - - def _include_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Select strings (presumably filenames) from 'self.files' that - match 'pattern', a Unix-style wildcard (glob) pattern. - - Patterns are not quite the same as implemented by the 'fnmatch' - module: '*' and '?' match non-special characters, where "special" - is platform-dependent: slash on Unix; colon, slash, and backslash on - DOS/Windows; and colon on Mac OS. - - If 'anchor' is true (the default), then the pattern match is more - stringent: "*.py" will match "foo.py" but not "foo/bar.py". If - 'anchor' is false, both of these will match. - - If 'prefix' is supplied, then only filenames starting with 'prefix' - (itself a pattern) and ending with 'pattern', with anything in between - them, will match. 'anchor' is ignored in this case. - - If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and - 'pattern' is assumed to be either a string containing a regex or a - regex object -- no translation is done, the regex is just compiled - and used as-is. - - Selected strings will be added to self.files. - - Return True if files are found. - """ - # XXX docstring lying about what the special chars are? - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - - # delayed loading of allfiles list - if self.allfiles is None: - self.findall() - - for name in self.allfiles: - if pattern_re.search(name): - self.files.add(name) - found = True - return found - - def _exclude_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Remove strings (presumably filenames) from 'files' that match - 'pattern'. - - Other parameters are the same as for 'include_pattern()', above. - The list 'self.files' is modified in place. Return True if files are - found. - - This API is public to allow e.g. exclusion of SCM subdirs, e.g. when - packaging source distributions - """ - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - for f in list(self.files): - if pattern_re.search(f): - self.files.remove(f) - found = True - return found - - def _translate_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Translate a shell-like wildcard pattern to a compiled regular - expression. - - Return the compiled regex. If 'is_regex' true, - then 'pattern' is directly compiled to a regex (if it's a string) - or just returned as-is (assumes it's a regex object). - """ - if is_regex: - if isinstance(pattern, str): - return re.compile(pattern) - else: - return pattern - - if _PYTHON_VERSION > (3, 2): - # ditch start and end characters - start, _, end = self._glob_to_re('_').partition('_') - - if pattern: - pattern_re = self._glob_to_re(pattern) - if _PYTHON_VERSION > (3, 2): - assert pattern_re.startswith(start) and pattern_re.endswith(end) - else: - pattern_re = '' - - base = re.escape(os.path.join(self.base, '')) - if prefix is not None: - # ditch end of pattern character - if _PYTHON_VERSION <= (3, 2): - empty_pattern = self._glob_to_re('') - prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] - else: - prefix_re = self._glob_to_re(prefix) - assert prefix_re.startswith(start) and prefix_re.endswith(end) - prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] - sep = os.sep - if os.sep == '\\': - sep = r'\\' - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + sep.join((prefix_re, - '.*' + pattern_re)) - else: - pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] - pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, - pattern_re, end) - else: # no prefix -- respect anchor flag - if anchor: - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + pattern_re - else: - pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) - - return re.compile(pattern_re) - - def _glob_to_re(self, pattern): - """Translate a shell-like glob pattern to a regular expression. - - Return a string containing the regex. Differs from - 'fnmatch.translate()' in that '*' does not match "special characters" - (which are platform-specific). - """ - pattern_re = fnmatch.translate(pattern) - - # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which - # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, - # and by extension they shouldn't match such "special characters" under - # any OS. So change all non-escaped dots in the RE to match any - # character except the special characters (currently: just os.sep). - sep = os.sep - if os.sep == '\\': - # we're using a regex to manipulate a regex, so we need - # to escape the backslash twice - sep = r'\\\\' - escaped = r'\1[^%s]' % sep - pattern_re = re.sub(r'((? y, - '!=': lambda x, y: x != y, - '<': lambda x, y: x < y, - '<=': lambda x, y: x == y or x < y, - '>': lambda x, y: x > y, - '>=': lambda x, y: x == y or x > y, - 'and': lambda x, y: x and y, - 'or': lambda x, y: x or y, - 'in': lambda x, y: x in y, - 'not in': lambda x, y: x not in y, - } - - def evaluate(self, expr, context): - """ - Evaluate a marker expression returned by the :func:`parse_requirement` - function in the specified context. - """ - if isinstance(expr, string_types): - if expr[0] in '\'"': - result = expr[1:-1] - else: - if expr not in context: - raise SyntaxError('unknown variable: %s' % expr) - result = context[expr] - else: - assert isinstance(expr, dict) - op = expr['op'] - if op not in self.operations: - raise NotImplementedError('op not implemented: %s' % op) - elhs = expr['lhs'] - erhs = expr['rhs'] - if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): - raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) - - lhs = self.evaluate(elhs, context) - rhs = self.evaluate(erhs, context) - if ((_is_version_marker(elhs) or _is_version_marker(erhs)) and - op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): - lhs = LV(lhs) - rhs = LV(rhs) - elif _is_version_marker(elhs) and op in ('in', 'not in'): - lhs = LV(lhs) - rhs = _get_versions(rhs) - result = self.operations[op](lhs, rhs) - return result - - -_DIGITS = re.compile(r'\d+\.\d+') - - -def default_context(): - - def format_full_version(info): - version = '%s.%s.%s' % (info.major, info.minor, info.micro) - kind = info.releaselevel - if kind != 'final': - version += kind[0] + str(info.serial) - return version - - if hasattr(sys, 'implementation'): - implementation_version = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - else: - implementation_version = '0' - implementation_name = '' - - ppv = platform.python_version() - m = _DIGITS.match(ppv) - pv = m.group(0) - result = { - 'implementation_name': implementation_name, - 'implementation_version': implementation_version, - 'os_name': os.name, - 'platform_machine': platform.machine(), - 'platform_python_implementation': platform.python_implementation(), - 'platform_release': platform.release(), - 'platform_system': platform.system(), - 'platform_version': platform.version(), - 'platform_in_venv': str(in_venv()), - 'python_full_version': ppv, - 'python_version': pv, - 'sys_platform': sys.platform, - } - return result - - -DEFAULT_CONTEXT = default_context() -del default_context - -evaluator = Evaluator() - - -def interpret(marker, execution_context=None): - """ - Interpret a marker and return a result depending on environment. - - :param marker: The marker to interpret. - :type marker: str - :param execution_context: The context used for name lookup. - :type execution_context: mapping - """ - try: - expr, rest = parse_marker(marker) - except Exception as e: - raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) - if rest and rest[0] != '#': - raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) - context = dict(DEFAULT_CONTEXT) - if execution_context: - context.update(execution_context) - return evaluator.evaluate(expr, context) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py deleted file mode 100644 index ce9a34b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py +++ /dev/null @@ -1,1031 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Implementation of the Metadata for Python packages PEPs. - -Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and 2.2). -""" -from __future__ import unicode_literals - -import codecs -from email import message_from_file -import json -import logging -import re - -from . import DistlibException, __version__ -from .compat import StringIO, string_types, text_type -from .markers import interpret -from .util import extract_by_key, get_extras -from .version import get_scheme, PEP440_VERSION_RE - -logger = logging.getLogger(__name__) - - -class MetadataMissingError(DistlibException): - """A required metadata is missing""" - - -class MetadataConflictError(DistlibException): - """Attempt to read or write metadata fields that are conflictual.""" - - -class MetadataUnrecognizedVersionError(DistlibException): - """Unknown metadata version number.""" - - -class MetadataInvalidError(DistlibException): - """A metadata value is invalid""" - - -# public API of this module -__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] - -# Encoding used for the PKG-INFO files -PKG_INFO_ENCODING = 'utf-8' - -# preferred version. Hopefully will be changed -# to 1.2 once PEP 345 is supported everywhere -PKG_INFO_PREFERRED_VERSION = '1.1' - -_LINE_PREFIX_1_2 = re.compile('\n \\|') -_LINE_PREFIX_PRE_1_2 = re.compile('\n ') -_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Summary', 'Description', 'Keywords', 'Home-page', - 'Author', 'Author-email', 'License') - -_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes', - 'Provides', 'Requires') - -_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', 'Download-URL') - -_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External') - -_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Obsoletes-Dist', 'Requires-External', - 'Maintainer', 'Maintainer-email', 'Project-URL') - -_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External', 'Private-Version', 'Obsoleted-By', 'Setup-Requires-Dist', - 'Extension', 'Provides-Extra') - -_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension') - -# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in -# the metadata. Include them in the tuple literal below to allow them -# (for now). -# Ditto for Obsoletes - see issue #140. -_566_FIELDS = _426_FIELDS + ('Description-Content-Type', 'Requires', 'Provides', 'Obsoletes') - -_566_MARKERS = ('Description-Content-Type', ) - -_643_MARKERS = ('Dynamic', 'License-File') - -_643_FIELDS = _566_FIELDS + _643_MARKERS - -_ALL_FIELDS = set() -_ALL_FIELDS.update(_241_FIELDS) -_ALL_FIELDS.update(_314_FIELDS) -_ALL_FIELDS.update(_345_FIELDS) -_ALL_FIELDS.update(_426_FIELDS) -_ALL_FIELDS.update(_566_FIELDS) -_ALL_FIELDS.update(_643_FIELDS) - -EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') - - -def _version2fieldlist(version): - if version == '1.0': - return _241_FIELDS - elif version == '1.1': - return _314_FIELDS - elif version == '1.2': - return _345_FIELDS - elif version in ('1.3', '2.1'): - # avoid adding field names if already there - return _345_FIELDS + tuple(f for f in _566_FIELDS if f not in _345_FIELDS) - elif version == '2.0': - raise ValueError('Metadata 2.0 is withdrawn and not supported') - # return _426_FIELDS - elif version == '2.2': - return _643_FIELDS - raise MetadataUnrecognizedVersionError(version) - - -def _best_version(fields): - """Detect the best version depending on the fields used.""" - - def _has_marker(keys, markers): - return any(marker in keys for marker in markers) - - keys = [key for key, value in fields.items() if value not in ([], 'UNKNOWN', None)] - possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.1', '2.2'] # 2.0 removed - - # first let's try to see if a field is not part of one of the version - for key in keys: - if key not in _241_FIELDS and '1.0' in possible_versions: - possible_versions.remove('1.0') - logger.debug('Removed 1.0 due to %s', key) - if key not in _314_FIELDS and '1.1' in possible_versions: - possible_versions.remove('1.1') - logger.debug('Removed 1.1 due to %s', key) - if key not in _345_FIELDS and '1.2' in possible_versions: - possible_versions.remove('1.2') - logger.debug('Removed 1.2 due to %s', key) - if key not in _566_FIELDS and '1.3' in possible_versions: - possible_versions.remove('1.3') - logger.debug('Removed 1.3 due to %s', key) - if key not in _566_FIELDS and '2.1' in possible_versions: - if key != 'Description': # In 2.1, description allowed after headers - possible_versions.remove('2.1') - logger.debug('Removed 2.1 due to %s', key) - if key not in _643_FIELDS and '2.2' in possible_versions: - possible_versions.remove('2.2') - logger.debug('Removed 2.2 due to %s', key) - # if key not in _426_FIELDS and '2.0' in possible_versions: - # possible_versions.remove('2.0') - # logger.debug('Removed 2.0 due to %s', key) - - # possible_version contains qualified versions - if len(possible_versions) == 1: - return possible_versions[0] # found ! - elif len(possible_versions) == 0: - logger.debug('Out of options - unknown metadata set: %s', fields) - raise MetadataConflictError('Unknown metadata set') - - # let's see if one unique marker is found - is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) - is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) - is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) - # is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) - is_2_2 = '2.2' in possible_versions and _has_marker(keys, _643_MARKERS) - if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_2) > 1: - raise MetadataConflictError('You used incompatible 1.1/1.2/2.1/2.2 fields') - - # we have the choice, 1.0, or 1.2, 2.1 or 2.2 - # - 1.0 has a broken Summary field but works with all tools - # - 1.1 is to avoid - # - 1.2 fixes Summary but has little adoption - # - 2.1 adds more features - # - 2.2 is the latest - if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_2: - # we couldn't find any specific marker - if PKG_INFO_PREFERRED_VERSION in possible_versions: - return PKG_INFO_PREFERRED_VERSION - if is_1_1: - return '1.1' - if is_1_2: - return '1.2' - if is_2_1: - return '2.1' - # if is_2_2: - # return '2.2' - - return '2.2' - - -# This follows the rules about transforming keys as described in -# https://www.python.org/dev/peps/pep-0566/#id17 -_ATTR2FIELD = {name.lower().replace("-", "_"): name for name in _ALL_FIELDS} -_FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()} - -_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') -_VERSIONS_FIELDS = ('Requires-Python', ) -_VERSION_FIELDS = ('Version', ) -_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', 'Requires', 'Provides', 'Obsoletes-Dist', 'Provides-Dist', - 'Requires-Dist', 'Requires-External', 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', - 'Provides-Extra', 'Extension', 'License-File') -_LISTTUPLEFIELDS = ('Project-URL', ) - -_ELEMENTSFIELD = ('Keywords', ) - -_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') - -_MISSING = object() - -_FILESAFE = re.compile('[^A-Za-z0-9.]+') - - -def _get_name_and_version(name, version, for_filename=False): - """Return the distribution name with version. - - If for_filename is true, return a filename-escaped form.""" - if for_filename: - # For both name and version any runs of non-alphanumeric or '.' - # characters are replaced with a single '-'. Additionally any - # spaces in the version string become '.' - name = _FILESAFE.sub('-', name) - version = _FILESAFE.sub('-', version.replace(' ', '.')) - return '%s-%s' % (name, version) - - -class LegacyMetadata(object): - """The legacy metadata of a release. - - Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can - instantiate the class with one of these arguments (or none): - - *path*, the path to a metadata file - - *fileobj* give a file-like object with metadata as content - - *mapping* is a dict-like object - - *scheme* is a version scheme name - """ - - # TODO document the mapping API and UNKNOWN default key - - def __init__(self, path=None, fileobj=None, mapping=None, scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._fields = {} - self.requires_files = [] - self._dependencies = None - self.scheme = scheme - if path is not None: - self.read(path) - elif fileobj is not None: - self.read_file(fileobj) - elif mapping is not None: - self.update(mapping) - self.set_metadata_version() - - def set_metadata_version(self): - self._fields['Metadata-Version'] = _best_version(self._fields) - - def _write_field(self, fileobj, name, value): - fileobj.write('%s: %s\n' % (name, value)) - - def __getitem__(self, name): - return self.get(name) - - def __setitem__(self, name, value): - return self.set(name, value) - - def __delitem__(self, name): - field_name = self._convert_name(name) - try: - del self._fields[field_name] - except KeyError: - raise KeyError(name) - - def __contains__(self, name): - return (name in self._fields or self._convert_name(name) in self._fields) - - def _convert_name(self, name): - if name in _ALL_FIELDS: - return name - name = name.replace('-', '_').lower() - return _ATTR2FIELD.get(name, name) - - def _default_value(self, name): - if name in _LISTFIELDS or name in _ELEMENTSFIELD: - return [] - return 'UNKNOWN' - - def _remove_line_prefix(self, value): - if self.metadata_version in ('1.0', '1.1'): - return _LINE_PREFIX_PRE_1_2.sub('\n', value) - else: - return _LINE_PREFIX_1_2.sub('\n', value) - - def __getattr__(self, name): - if name in _ATTR2FIELD: - return self[name] - raise AttributeError(name) - - # - # Public API - # - - def get_fullname(self, filesafe=False): - """ - Return the distribution name with version. - - If filesafe is true, return a filename-escaped form. - """ - return _get_name_and_version(self['Name'], self['Version'], filesafe) - - def is_field(self, name): - """return True if name is a valid metadata key""" - name = self._convert_name(name) - return name in _ALL_FIELDS - - def is_multi_field(self, name): - name = self._convert_name(name) - return name in _LISTFIELDS - - def read(self, filepath): - """Read the metadata values from a file path.""" - fp = codecs.open(filepath, 'r', encoding='utf-8') - try: - self.read_file(fp) - finally: - fp.close() - - def read_file(self, fileob): - """Read the metadata values from a file object.""" - msg = message_from_file(fileob) - self._fields['Metadata-Version'] = msg['metadata-version'] - - # When reading, get all the fields we can - for field in _ALL_FIELDS: - if field not in msg: - continue - if field in _LISTFIELDS: - # we can have multiple lines - values = msg.get_all(field) - if field in _LISTTUPLEFIELDS and values is not None: - values = [tuple(value.split(',')) for value in values] - self.set(field, values) - else: - # single line - value = msg[field] - if value is not None and value != 'UNKNOWN': - self.set(field, value) - - # PEP 566 specifies that the body be used for the description, if - # available - body = msg.get_payload() - self["Description"] = body if body else self["Description"] - # logger.debug('Attempting to set metadata for %s', self) - # self.set_metadata_version() - - def write(self, filepath, skip_unknown=False): - """Write the metadata fields to filepath.""" - fp = codecs.open(filepath, 'w', encoding='utf-8') - try: - self.write_file(fp, skip_unknown) - finally: - fp.close() - - def write_file(self, fileobject, skip_unknown=False): - """Write the PKG-INFO format data to a file object.""" - self.set_metadata_version() - - for field in _version2fieldlist(self['Metadata-Version']): - values = self.get(field) - if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): - continue - if field in _ELEMENTSFIELD: - self._write_field(fileobject, field, ','.join(values)) - continue - if field not in _LISTFIELDS: - if field == 'Description': - if self.metadata_version in ('1.0', '1.1'): - values = values.replace('\n', '\n ') - else: - values = values.replace('\n', '\n |') - values = [values] - - if field in _LISTTUPLEFIELDS: - values = [','.join(value) for value in values] - - for value in values: - self._write_field(fileobject, field, value) - - def update(self, other=None, **kwargs): - """Set metadata values from the given iterable `other` and kwargs. - - Behavior is like `dict.update`: If `other` has a ``keys`` method, - they are looped over and ``self[key]`` is assigned ``other[key]``. - Else, ``other`` is an iterable of ``(key, value)`` iterables. - - Keys that don't match a metadata field or that have an empty value are - dropped. - """ - - def _set(key, value): - if key in _ATTR2FIELD and value: - self.set(self._convert_name(key), value) - - if not other: - # other is None or empty container - pass - elif hasattr(other, 'keys'): - for k in other.keys(): - _set(k, other[k]) - else: - for k, v in other: - _set(k, v) - - if kwargs: - for k, v in kwargs.items(): - _set(k, v) - - def set(self, name, value): - """Control then set a metadata field.""" - name = self._convert_name(name) - - if ((name in _ELEMENTSFIELD or name == 'Platform') and not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [v.strip() for v in value.split(',')] - else: - value = [] - elif (name in _LISTFIELDS and not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [value] - else: - value = [] - - if logger.isEnabledFor(logging.WARNING): - project_name = self['Name'] - - scheme = get_scheme(self.scheme) - if name in _PREDICATE_FIELDS and value is not None: - for v in value: - # check that the values are valid - if not scheme.is_valid_matcher(v.split(';')[0]): - logger.warning("'%s': '%s' is not valid (field '%s')", project_name, v, name) - # FIXME this rejects UNKNOWN, is that right? - elif name in _VERSIONS_FIELDS and value is not None: - if not scheme.is_valid_constraint_list(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", project_name, value, name) - elif name in _VERSION_FIELDS and value is not None: - if not scheme.is_valid_version(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", project_name, value, name) - - if name in _UNICODEFIELDS: - if name == 'Description': - value = self._remove_line_prefix(value) - - self._fields[name] = value - - def get(self, name, default=_MISSING): - """Get a metadata field.""" - name = self._convert_name(name) - if name not in self._fields: - if default is _MISSING: - default = self._default_value(name) - return default - if name in _UNICODEFIELDS: - value = self._fields[name] - return value - elif name in _LISTFIELDS: - value = self._fields[name] - if value is None: - return [] - res = [] - for val in value: - if name not in _LISTTUPLEFIELDS: - res.append(val) - else: - # That's for Project-URL - res.append((val[0], val[1])) - return res - - elif name in _ELEMENTSFIELD: - value = self._fields[name] - if isinstance(value, string_types): - return value.split(',') - return self._fields[name] - - def check(self, strict=False): - """Check if the metadata is compliant. If strict is True then raise if - no Name or Version are provided""" - self.set_metadata_version() - - # XXX should check the versions (if the file was loaded) - missing, warnings = [], [] - - for attr in ('Name', 'Version'): # required by PEP 345 - if attr not in self: - missing.append(attr) - - if strict and missing != []: - msg = 'missing required metadata: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - - for attr in ('Home-page', 'Author'): - if attr not in self: - missing.append(attr) - - # checking metadata 1.2 (XXX needs to check 1.1, 1.0) - if self['Metadata-Version'] != '1.2': - return missing, warnings - - scheme = get_scheme(self.scheme) - - def are_valid_constraints(value): - for v in value: - if not scheme.is_valid_matcher(v.split(';')[0]): - return False - return True - - for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), - (_VERSIONS_FIELDS, scheme.is_valid_constraint_list), (_VERSION_FIELDS, - scheme.is_valid_version)): - for field in fields: - value = self.get(field, None) - if value is not None and not controller(value): - warnings.append("Wrong value for '%s': %s" % (field, value)) - - return missing, warnings - - def todict(self, skip_missing=False): - """Return fields as a dict. - - Field names will be converted to use the underscore-lowercase style - instead of hyphen-mixed case (i.e. home_page instead of Home-page). - This is as per https://www.python.org/dev/peps/pep-0566/#id17. - """ - self.set_metadata_version() - - fields = _version2fieldlist(self['Metadata-Version']) - - data = {} - - for field_name in fields: - if not skip_missing or field_name in self._fields: - key = _FIELD2ATTR[field_name] - if key != 'project_url': - data[key] = self[field_name] - else: - data[key] = [','.join(u) for u in self[field_name]] - - return data - - def add_requirements(self, requirements): - if self['Metadata-Version'] == '1.1': - # we can't have 1.1 metadata *and* Setuptools requires - for field in ('Obsoletes', 'Requires', 'Provides'): - if field in self: - del self[field] - self['Requires-Dist'] += requirements - - # Mapping API - # TODO could add iter* variants - - def keys(self): - return list(_version2fieldlist(self['Metadata-Version'])) - - def __iter__(self): - for key in self.keys(): - yield key - - def values(self): - return [self[key] for key in self.keys()] - - def items(self): - return [(key, self[key]) for key in self.keys()] - - def __repr__(self): - return '<%s %s %s>' % (self.__class__.__name__, self.name, self.version) - - -METADATA_FILENAME = 'pydist.json' -WHEEL_METADATA_FILENAME = 'metadata.json' -LEGACY_METADATA_FILENAME = 'METADATA' - - -class Metadata(object): - """ - The metadata of a release. This implementation uses 2.1 - metadata where possible. If not possible, it wraps a LegacyMetadata - instance which handles the key-value metadata format. - """ - - METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') - - NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) - - FIELDNAME_MATCHER = re.compile('^[A-Z]([0-9A-Z-]*[0-9A-Z])?$', re.I) - - VERSION_MATCHER = PEP440_VERSION_RE - - SUMMARY_MATCHER = re.compile('.{1,2047}') - - METADATA_VERSION = '2.0' - - GENERATOR = 'distlib (%s)' % __version__ - - MANDATORY_KEYS = { - 'name': (), - 'version': (), - 'summary': ('legacy', ), - } - - INDEX_KEYS = ('name version license summary description author ' - 'author_email keywords platform home_page classifiers ' - 'download_url') - - DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' - 'dev_requires provides meta_requires obsoleted_by ' - 'supports_environments') - - SYNTAX_VALIDATORS = { - 'metadata_version': (METADATA_VERSION_MATCHER, ()), - 'name': (NAME_MATCHER, ('legacy', )), - 'version': (VERSION_MATCHER, ('legacy', )), - 'summary': (SUMMARY_MATCHER, ('legacy', )), - 'dynamic': (FIELDNAME_MATCHER, ('legacy', )), - } - - __slots__ = ('_legacy', '_data', 'scheme') - - def __init__(self, path=None, fileobj=None, mapping=None, scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._legacy = None - self._data = None - self.scheme = scheme - # import pdb; pdb.set_trace() - if mapping is not None: - try: - self._validate_mapping(mapping, scheme) - self._data = mapping - except MetadataUnrecognizedVersionError: - self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) - self.validate() - else: - data = None - if path: - with open(path, 'rb') as f: - data = f.read() - elif fileobj: - data = fileobj.read() - if data is None: - # Initialised with no args - to be added - self._data = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - else: - if not isinstance(data, text_type): - data = data.decode('utf-8') - try: - self._data = json.loads(data) - self._validate_mapping(self._data, scheme) - except ValueError: - # Note: MetadataUnrecognizedVersionError does not - # inherit from ValueError (it's a DistlibException, - # which should not inherit from ValueError). - # The ValueError comes from the json.load - if that - # succeeds and we get a validation error, we want - # that to propagate - self._legacy = LegacyMetadata(fileobj=StringIO(data), scheme=scheme) - self.validate() - - common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) - - none_list = (None, list) - none_dict = (None, dict) - - mapped_keys = { - 'run_requires': ('Requires-Dist', list), - 'build_requires': ('Setup-Requires-Dist', list), - 'dev_requires': none_list, - 'test_requires': none_list, - 'meta_requires': none_list, - 'extras': ('Provides-Extra', list), - 'modules': none_list, - 'namespaces': none_list, - 'exports': none_dict, - 'commands': none_dict, - 'classifiers': ('Classifier', list), - 'source_url': ('Download-URL', None), - 'metadata_version': ('Metadata-Version', None), - } - - del none_list, none_dict - - def __getattribute__(self, key): - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, maker = mapped[key] - if self._legacy: - if lk is None: - result = None if maker is None else maker() - else: - result = self._legacy.get(lk) - else: - value = None if maker is None else maker() - if key not in ('commands', 'exports', 'modules', 'namespaces', 'classifiers'): - result = self._data.get(key, value) - else: - # special cases for PEP 459 - sentinel = object() - result = sentinel - d = self._data.get('extensions') - if d: - if key == 'commands': - result = d.get('python.commands', value) - elif key == 'classifiers': - d = d.get('python.details') - if d: - result = d.get(key, value) - else: - d = d.get('python.exports') - if not d: - d = self._data.get('python.exports') - if d: - result = d.get(key, value) - if result is sentinel: - result = value - elif key not in common: - result = object.__getattribute__(self, key) - elif self._legacy: - result = self._legacy.get(key) - else: - result = self._data.get(key) - return result - - def _validate_value(self, key, value, scheme=None): - if key in self.SYNTAX_VALIDATORS: - pattern, exclusions = self.SYNTAX_VALIDATORS[key] - if (scheme or self.scheme) not in exclusions: - m = pattern.match(value) - if not m: - raise MetadataInvalidError("'%s' is an invalid value for " - "the '%s' property" % (value, key)) - - def __setattr__(self, key, value): - self._validate_value(key, value) - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, _ = mapped[key] - if self._legacy: - if lk is None: - raise NotImplementedError - self._legacy[lk] = value - elif key not in ('commands', 'exports', 'modules', 'namespaces', 'classifiers'): - self._data[key] = value - else: - # special cases for PEP 459 - d = self._data.setdefault('extensions', {}) - if key == 'commands': - d['python.commands'] = value - elif key == 'classifiers': - d = d.setdefault('python.details', {}) - d[key] = value - else: - d = d.setdefault('python.exports', {}) - d[key] = value - elif key not in common: - object.__setattr__(self, key, value) - else: - if key == 'keywords': - if isinstance(value, string_types): - value = value.strip() - if value: - value = value.split() - else: - value = [] - if self._legacy: - self._legacy[key] = value - else: - self._data[key] = value - - @property - def name_and_version(self): - return _get_name_and_version(self.name, self.version, True) - - @property - def provides(self): - if self._legacy: - result = self._legacy['Provides-Dist'] - else: - result = self._data.setdefault('provides', []) - s = '%s (%s)' % (self.name, self.version) - if s not in result: - result.append(s) - return result - - @provides.setter - def provides(self, value): - if self._legacy: - self._legacy['Provides-Dist'] = value - else: - self._data['provides'] = value - - def get_requirements(self, reqts, extras=None, env=None): - """ - Base method to get dependencies, given a set of extras - to satisfy and an optional environment context. - :param reqts: A list of sometimes-wanted dependencies, - perhaps dependent on extras and environment. - :param extras: A list of optional components being requested. - :param env: An optional environment for marker evaluation. - """ - if self._legacy: - result = reqts - else: - result = [] - extras = get_extras(extras or [], self.extras) - for d in reqts: - if 'extra' not in d and 'environment' not in d: - # unconditional - include = True - else: - if 'extra' not in d: - # Not extra-dependent - only environment-dependent - include = True - else: - include = d.get('extra') in extras - if include: - # Not excluded because of extras, check environment - marker = d.get('environment') - if marker: - include = interpret(marker, env) - if include: - result.extend(d['requires']) - for key in ('build', 'dev', 'test'): - e = ':%s:' % key - if e in extras: - extras.remove(e) - # A recursive call, but it should terminate since 'test' - # has been removed from the extras - reqts = self._data.get('%s_requires' % key, []) - result.extend(self.get_requirements(reqts, extras=extras, env=env)) - return result - - @property - def dictionary(self): - if self._legacy: - return self._from_legacy() - return self._data - - @property - def dependencies(self): - if self._legacy: - raise NotImplementedError - else: - return extract_by_key(self._data, self.DEPENDENCY_KEYS) - - @dependencies.setter - def dependencies(self, value): - if self._legacy: - raise NotImplementedError - else: - self._data.update(value) - - def _validate_mapping(self, mapping, scheme): - if mapping.get('metadata_version') != self.METADATA_VERSION: - raise MetadataUnrecognizedVersionError() - missing = [] - for key, exclusions in self.MANDATORY_KEYS.items(): - if key not in mapping: - if scheme not in exclusions: - missing.append(key) - if missing: - msg = 'Missing metadata items: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - for k, v in mapping.items(): - self._validate_value(k, v, scheme) - - def validate(self): - if self._legacy: - missing, warnings = self._legacy.check(True) - if missing or warnings: - logger.warning('Metadata: missing: %s, warnings: %s', missing, warnings) - else: - self._validate_mapping(self._data, self.scheme) - - def todict(self): - if self._legacy: - return self._legacy.todict(True) - else: - result = extract_by_key(self._data, self.INDEX_KEYS) - return result - - def _from_legacy(self): - assert self._legacy and not self._data - result = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - lmd = self._legacy.todict(True) # skip missing ones - for k in ('name', 'version', 'license', 'summary', 'description', 'classifier'): - if k in lmd: - if k == 'classifier': - nk = 'classifiers' - else: - nk = k - result[nk] = lmd[k] - kw = lmd.get('Keywords', []) - if kw == ['']: - kw = [] - result['keywords'] = kw - keys = (('requires_dist', 'run_requires'), ('setup_requires_dist', 'build_requires')) - for ok, nk in keys: - if ok in lmd and lmd[ok]: - result[nk] = [{'requires': lmd[ok]}] - result['provides'] = self.provides - # author = {} - # maintainer = {} - return result - - LEGACY_MAPPING = { - 'name': 'Name', - 'version': 'Version', - ('extensions', 'python.details', 'license'): 'License', - 'summary': 'Summary', - 'description': 'Description', - ('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page', - ('extensions', 'python.project', 'contacts', 0, 'name'): 'Author', - ('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email', - 'source_url': 'Download-URL', - ('extensions', 'python.details', 'classifiers'): 'Classifier', - } - - def _to_legacy(self): - - def process_entries(entries): - reqts = set() - for e in entries: - extra = e.get('extra') - env = e.get('environment') - rlist = e['requires'] - for r in rlist: - if not env and not extra: - reqts.add(r) - else: - marker = '' - if extra: - marker = 'extra == "%s"' % extra - if env: - if marker: - marker = '(%s) and %s' % (env, marker) - else: - marker = env - reqts.add(';'.join((r, marker))) - return reqts - - assert self._data and not self._legacy - result = LegacyMetadata() - nmd = self._data - # import pdb; pdb.set_trace() - for nk, ok in self.LEGACY_MAPPING.items(): - if not isinstance(nk, tuple): - if nk in nmd: - result[ok] = nmd[nk] - else: - d = nmd - found = True - for k in nk: - try: - d = d[k] - except (KeyError, IndexError): - found = False - break - if found: - result[ok] = d - r1 = process_entries(self.run_requires + self.meta_requires) - r2 = process_entries(self.build_requires + self.dev_requires) - if self.extras: - result['Provides-Extra'] = sorted(self.extras) - result['Requires-Dist'] = sorted(r1) - result['Setup-Requires-Dist'] = sorted(r2) - # TODO: any other fields wanted - return result - - def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): - if [path, fileobj].count(None) != 1: - raise ValueError('Exactly one of path and fileobj is needed') - self.validate() - if legacy: - if self._legacy: - legacy_md = self._legacy - else: - legacy_md = self._to_legacy() - if path: - legacy_md.write(path, skip_unknown=skip_unknown) - else: - legacy_md.write_file(fileobj, skip_unknown=skip_unknown) - else: - if self._legacy: - d = self._from_legacy() - else: - d = self._data - if fileobj: - json.dump(d, fileobj, ensure_ascii=True, indent=2, sort_keys=True) - else: - with codecs.open(path, 'w', 'utf-8') as f: - json.dump(d, f, ensure_ascii=True, indent=2, sort_keys=True) - - def add_requirements(self, requirements): - if self._legacy: - self._legacy.add_requirements(requirements) - else: - run_requires = self._data.setdefault('run_requires', []) - always = None - for entry in run_requires: - if 'environment' not in entry and 'extra' not in entry: - always = entry - break - if always is None: - always = {'requires': requirements} - run_requires.insert(0, always) - else: - rset = set(always['requires']) | set(requirements) - always['requires'] = sorted(rset) - - def __repr__(self): - name = self.name or '(no name)' - version = self.version or 'no version' - return '<%s %s %s (%s)>' % (self.__class__.__name__, self.metadata_version, name, version) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py deleted file mode 100644 index fef52aa..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py +++ /dev/null @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import bisect -import io -import logging -import os -import pkgutil -import sys -import types -import zipimport - -from . import DistlibException -from .util import cached_property, get_cache_base, Cache - -logger = logging.getLogger(__name__) - - -cache = None # created when needed - - -class ResourceCache(Cache): - def __init__(self, base=None): - if base is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('resource-cache')) - super(ResourceCache, self).__init__(base) - - def is_stale(self, resource, path): - """ - Is the cache stale for the given resource? - - :param resource: The :class:`Resource` being cached. - :param path: The path of the resource in the cache. - :return: True if the cache is stale. - """ - # Cache invalidation is a hard problem :-) - return True - - def get(self, resource): - """ - Get a resource into the cache, - - :param resource: A :class:`Resource` instance. - :return: The pathname of the resource in the cache. - """ - prefix, path = resource.finder.get_cache_info(resource) - if prefix is None: - result = path - else: - result = os.path.join(self.base, self.prefix_to_dir(prefix), path) - dirname = os.path.dirname(result) - if not os.path.isdir(dirname): - os.makedirs(dirname) - if not os.path.exists(result): - stale = True - else: - stale = self.is_stale(resource, path) - if stale: - # write the bytes of the resource to the cache location - with open(result, 'wb') as f: - f.write(resource.bytes) - return result - - -class ResourceBase(object): - def __init__(self, finder, name): - self.finder = finder - self.name = name - - -class Resource(ResourceBase): - """ - A class representing an in-package resource, such as a data file. This is - not normally instantiated by user code, but rather by a - :class:`ResourceFinder` which manages the resource. - """ - is_container = False # Backwards compatibility - - def as_stream(self): - """ - Get the resource as a stream. - - This is not a property to make it obvious that it returns a new stream - each time. - """ - return self.finder.get_stream(self) - - @cached_property - def file_path(self): - global cache - if cache is None: - cache = ResourceCache() - return cache.get(self) - - @cached_property - def bytes(self): - return self.finder.get_bytes(self) - - @cached_property - def size(self): - return self.finder.get_size(self) - - -class ResourceContainer(ResourceBase): - is_container = True # Backwards compatibility - - @cached_property - def resources(self): - return self.finder.get_resources(self) - - -class ResourceFinder(object): - """ - Resource finder for file system resources. - """ - - if sys.platform.startswith('java'): - skipped_extensions = ('.pyc', '.pyo', '.class') - else: - skipped_extensions = ('.pyc', '.pyo') - - def __init__(self, module): - self.module = module - self.loader = getattr(module, '__loader__', None) - self.base = os.path.dirname(getattr(module, '__file__', '')) - - def _adjust_path(self, path): - return os.path.realpath(path) - - def _make_path(self, resource_name): - # Issue #50: need to preserve type of path on Python 2.x - # like os.path._get_sep - if isinstance(resource_name, bytes): # should only happen on 2.x - sep = b'/' - else: - sep = '/' - parts = resource_name.split(sep) - parts.insert(0, self.base) - result = os.path.join(*parts) - return self._adjust_path(result) - - def _find(self, path): - return os.path.exists(path) - - def get_cache_info(self, resource): - return None, resource.path - - def find(self, resource_name): - path = self._make_path(resource_name) - if not self._find(path): - result = None - else: - if self._is_directory(path): - result = ResourceContainer(self, resource_name) - else: - result = Resource(self, resource_name) - result.path = path - return result - - def get_stream(self, resource): - return open(resource.path, 'rb') - - def get_bytes(self, resource): - with open(resource.path, 'rb') as f: - return f.read() - - def get_size(self, resource): - return os.path.getsize(resource.path) - - def get_resources(self, resource): - def allowed(f): - return (f != '__pycache__' and not - f.endswith(self.skipped_extensions)) - return set([f for f in os.listdir(resource.path) if allowed(f)]) - - def is_container(self, resource): - return self._is_directory(resource.path) - - _is_directory = staticmethod(os.path.isdir) - - def iterator(self, resource_name): - resource = self.find(resource_name) - if resource is not None: - todo = [resource] - while todo: - resource = todo.pop(0) - yield resource - if resource.is_container: - rname = resource.name - for name in resource.resources: - if not rname: - new_name = name - else: - new_name = '/'.join([rname, name]) - child = self.find(new_name) - if child.is_container: - todo.append(child) - else: - yield child - - -class ZipResourceFinder(ResourceFinder): - """ - Resource finder for resources in .zip files. - """ - def __init__(self, module): - super(ZipResourceFinder, self).__init__(module) - archive = self.loader.archive - self.prefix_len = 1 + len(archive) - # PyPy doesn't have a _files attr on zipimporter, and you can't set one - if hasattr(self.loader, '_files'): - self._files = self.loader._files - else: - self._files = zipimport._zip_directory_cache[archive] - self.index = sorted(self._files) - - def _adjust_path(self, path): - return path - - def _find(self, path): - path = path[self.prefix_len:] - if path in self._files: - result = True - else: - if path and path[-1] != os.sep: - path = path + os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - if not result: - logger.debug('_find failed: %r %r', path, self.loader.prefix) - else: - logger.debug('_find worked: %r %r', path, self.loader.prefix) - return result - - def get_cache_info(self, resource): - prefix = self.loader.archive - path = resource.path[1 + len(prefix):] - return prefix, path - - def get_bytes(self, resource): - return self.loader.get_data(resource.path) - - def get_stream(self, resource): - return io.BytesIO(self.get_bytes(resource)) - - def get_size(self, resource): - path = resource.path[self.prefix_len:] - return self._files[path][3] - - def get_resources(self, resource): - path = resource.path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - plen = len(path) - result = set() - i = bisect.bisect(self.index, path) - while i < len(self.index): - if not self.index[i].startswith(path): - break - s = self.index[i][plen:] - result.add(s.split(os.sep, 1)[0]) # only immediate children - i += 1 - return result - - def _is_directory(self, path): - path = path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - return result - - -_finder_registry = { - type(None): ResourceFinder, - zipimport.zipimporter: ZipResourceFinder -} - -try: - # In Python 3.6, _frozen_importlib -> _frozen_importlib_external - try: - import _frozen_importlib_external as _fi - except ImportError: - import _frozen_importlib as _fi - _finder_registry[_fi.SourceFileLoader] = ResourceFinder - _finder_registry[_fi.FileFinder] = ResourceFinder - # See issue #146 - _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder - del _fi -except (ImportError, AttributeError): - pass - - -def register_finder(loader, finder_maker): - _finder_registry[type(loader)] = finder_maker - - -_finder_cache = {} - - -def finder(package): - """ - Return a resource finder for a package. - :param package: The name of the package. - :return: A :class:`ResourceFinder` instance for the package. - """ - if package in _finder_cache: - result = _finder_cache[package] - else: - if package not in sys.modules: - __import__(package) - module = sys.modules[package] - path = getattr(module, '__path__', None) - if path is None: - raise DistlibException('You cannot get a finder for a module, ' - 'only for a package') - loader = getattr(module, '__loader__', None) - finder_maker = _finder_registry.get(type(loader)) - if finder_maker is None: - raise DistlibException('Unable to locate finder for %r' % package) - result = finder_maker(module) - _finder_cache[package] = result - return result - - -_dummy_module = types.ModuleType(str('__dummy__')) - - -def finder_for_path(path): - """ - Return a resource finder for a path, which should represent a container. - - :param path: The path. - :return: A :class:`ResourceFinder` instance for the path. - """ - result = None - # calls any path hooks, gets importer into cache - pkgutil.get_importer(path) - loader = sys.path_importer_cache.get(path) - finder = _finder_registry.get(type(loader)) - if finder: - module = _dummy_module - module.__file__ = os.path.join(path, '') - module.__loader__ = loader - result = finder(module) - return result diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py deleted file mode 100644 index b1fc705..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py +++ /dev/null @@ -1,447 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from io import BytesIO -import logging -import os -import re -import struct -import sys -import time -from zipfile import ZipInfo - -from .compat import sysconfig, detect_encoding, ZipFile -from .resources import finder -from .util import (FileOperator, get_export_entry, convert_path, get_executable, get_platform, in_venv) - -logger = logging.getLogger(__name__) - -_DEFAULT_MANIFEST = ''' - - - - - - - - - - - - -'''.strip() - -# check if Python is called on the first line with this expression -FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') -SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- -import re -import sys -from %(module)s import %(import_name)s -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(%(func)s()) -''' - -# Pre-fetch the contents of all executable wrapper stubs. -# This is to address https://github.com/pypa/pip/issues/12666. -# When updating pip, we rename the old pip in place before installing the -# new version. If we try to fetch a wrapper *after* that rename, the finder -# machinery will be confused as the package is no longer available at the -# location where it was imported from. So we load everything into memory in -# advance. - -if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): - # Issue 31: don't hardcode an absolute package name, but - # determine it relative to the current package - DISTLIB_PACKAGE = __name__.rsplit('.', 1)[0] - - WRAPPERS = { - r.name: r.bytes - for r in finder(DISTLIB_PACKAGE).iterator("") - if r.name.endswith(".exe") - } - - -def enquote_executable(executable): - if ' ' in executable: - # make sure we quote only the executable in case of env - # for example /usr/bin/env "/dir with spaces/bin/jython" - # instead of "/usr/bin/env /dir with spaces/bin/jython" - # otherwise whole - if executable.startswith('/usr/bin/env '): - env, _executable = executable.split(' ', 1) - if ' ' in _executable and not _executable.startswith('"'): - executable = '%s "%s"' % (env, _executable) - else: - if not executable.startswith('"'): - executable = '"%s"' % executable - return executable - - -# Keep the old name around (for now), as there is at least one project using it! -_enquote_executable = enquote_executable - - -class ScriptMaker(object): - """ - A class to copy or create scripts from source scripts or callable - specifications. - """ - script_template = SCRIPT_TEMPLATE - - executable = None # for shebangs - - def __init__(self, source_dir, target_dir, add_launchers=True, dry_run=False, fileop=None): - self.source_dir = source_dir - self.target_dir = target_dir - self.add_launchers = add_launchers - self.force = False - self.clobber = False - # It only makes sense to set mode bits on POSIX. - self.set_mode = (os.name == 'posix') or (os.name == 'java' and os._name == 'posix') - self.variants = set(('', 'X.Y')) - self._fileop = fileop or FileOperator(dry_run) - - self._is_nt = os.name == 'nt' or (os.name == 'java' and os._name == 'nt') - self.version_info = sys.version_info - - def _get_alternate_executable(self, executable, options): - if options.get('gui', False) and self._is_nt: # pragma: no cover - dn, fn = os.path.split(executable) - fn = fn.replace('python', 'pythonw') - executable = os.path.join(dn, fn) - return executable - - if sys.platform.startswith('java'): # pragma: no cover - - def _is_shell(self, executable): - """ - Determine if the specified executable is a script - (contains a #! line) - """ - try: - with open(executable) as fp: - return fp.read(2) == '#!' - except (OSError, IOError): - logger.warning('Failed to open %s', executable) - return False - - def _fix_jython_executable(self, executable): - if self._is_shell(executable): - # Workaround for Jython is not needed on Linux systems. - import java - - if java.lang.System.getProperty('os.name') == 'Linux': - return executable - elif executable.lower().endswith('jython.exe'): - # Use wrapper exe for Jython on Windows - return executable - return '/usr/bin/env %s' % executable - - def _build_shebang(self, executable, post_interp): - """ - Build a shebang line. In the simple case (on Windows, or a shebang line - which is not too long or contains spaces) use a simple formulation for - the shebang. Otherwise, use /bin/sh as the executable, with a contrived - shebang which allows the script to run either under Python or sh, using - suitable quoting. Thanks to Harald Nordgren for his input. - - See also: http://www.in-ulm.de/~mascheck/various/shebang/#length - https://hg.mozilla.org/mozilla-central/file/tip/mach - """ - if os.name != 'posix': - simple_shebang = True - elif getattr(sys, "cross_compiling", False): - # In a cross-compiling environment, the shebang will likely be a - # script; this *must* be invoked with the "safe" version of the - # shebang, or else using os.exec() to run the entry script will - # fail, raising "OSError 8 [Errno 8] Exec format error". - simple_shebang = False - else: - # Add 3 for '#!' prefix and newline suffix. - shebang_length = len(executable) + len(post_interp) + 3 - if sys.platform == 'darwin': - max_shebang_length = 512 - else: - max_shebang_length = 127 - simple_shebang = ((b' ' not in executable) and (shebang_length <= max_shebang_length)) - - if simple_shebang: - result = b'#!' + executable + post_interp + b'\n' - else: - result = b'#!/bin/sh\n' - result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' - result += b"' '''\n" - return result - - def _get_shebang(self, encoding, post_interp=b'', options=None): - enquote = True - if self.executable: - executable = self.executable - enquote = False # assume this will be taken care of - elif not sysconfig.is_python_build(): - executable = get_executable() - elif in_venv(): # pragma: no cover - executable = os.path.join(sysconfig.get_path('scripts'), 'python%s' % sysconfig.get_config_var('EXE')) - else: # pragma: no cover - if os.name == 'nt': - # for Python builds from source on Windows, no Python executables with - # a version suffix are created, so we use python.exe - executable = os.path.join(sysconfig.get_config_var('BINDIR'), - 'python%s' % (sysconfig.get_config_var('EXE'))) - else: - executable = os.path.join( - sysconfig.get_config_var('BINDIR'), - 'python%s%s' % (sysconfig.get_config_var('VERSION'), sysconfig.get_config_var('EXE'))) - if options: - executable = self._get_alternate_executable(executable, options) - - if sys.platform.startswith('java'): # pragma: no cover - executable = self._fix_jython_executable(executable) - - # Normalise case for Windows - COMMENTED OUT - # executable = os.path.normcase(executable) - # N.B. The normalising operation above has been commented out: See - # issue #124. Although paths in Windows are generally case-insensitive, - # they aren't always. For example, a path containing a ẞ (which is a - # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a - # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by - # Windows as equivalent in path names. - - # If the user didn't specify an executable, it may be necessary to - # cater for executable paths with spaces (not uncommon on Windows) - if enquote: - executable = enquote_executable(executable) - # Issue #51: don't use fsencode, since we later try to - # check that the shebang is decodable using utf-8. - executable = executable.encode('utf-8') - # in case of IronPython, play safe and enable frames support - if (sys.platform == 'cli' and '-X:Frames' not in post_interp and - '-X:FullFrames' not in post_interp): # pragma: no cover - post_interp += b' -X:Frames' - shebang = self._build_shebang(executable, post_interp) - # Python parser starts to read a script using UTF-8 until - # it gets a #coding:xxx cookie. The shebang has to be the - # first line of a file, the #coding:xxx cookie cannot be - # written before. So the shebang has to be decodable from - # UTF-8. - try: - shebang.decode('utf-8') - except UnicodeDecodeError: # pragma: no cover - raise ValueError('The shebang (%r) is not decodable from utf-8' % shebang) - # If the script is encoded to a custom encoding (use a - # #coding:xxx cookie), the shebang has to be decodable from - # the script encoding too. - if encoding != 'utf-8': - try: - shebang.decode(encoding) - except UnicodeDecodeError: # pragma: no cover - raise ValueError('The shebang (%r) is not decodable ' - 'from the script encoding (%r)' % (shebang, encoding)) - return shebang - - def _get_script_text(self, entry): - return self.script_template % dict( - module=entry.prefix, import_name=entry.suffix.split('.')[0], func=entry.suffix) - - manifest = _DEFAULT_MANIFEST - - def get_manifest(self, exename): - base = os.path.basename(exename) - return self.manifest % base - - def _write_script(self, names, shebang, script_bytes, filenames, ext): - use_launcher = self.add_launchers and self._is_nt - if not use_launcher: - script_bytes = shebang + script_bytes - else: # pragma: no cover - if ext == 'py': - launcher = self._get_launcher('t') - else: - launcher = self._get_launcher('w') - stream = BytesIO() - with ZipFile(stream, 'w') as zf: - source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') - if source_date_epoch: - date_time = time.gmtime(int(source_date_epoch))[:6] - zinfo = ZipInfo(filename='__main__.py', date_time=date_time) - zf.writestr(zinfo, script_bytes) - else: - zf.writestr('__main__.py', script_bytes) - zip_data = stream.getvalue() - script_bytes = launcher + shebang + zip_data - for name in names: - outname = os.path.join(self.target_dir, name) - if use_launcher: # pragma: no cover - n, e = os.path.splitext(outname) - if e.startswith('.py'): - outname = n - outname = '%s.exe' % outname - try: - self._fileop.write_binary_file(outname, script_bytes) - except Exception: - # Failed writing an executable - it might be in use. - logger.warning('Failed to write executable - trying to ' - 'use .deleteme logic') - dfname = '%s.deleteme' % outname - if os.path.exists(dfname): - os.remove(dfname) # Not allowed to fail here - os.rename(outname, dfname) # nor here - self._fileop.write_binary_file(outname, script_bytes) - logger.debug('Able to replace executable using ' - '.deleteme logic') - try: - os.remove(dfname) - except Exception: - pass # still in use - ignore error - else: - if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover - outname = '%s.%s' % (outname, ext) - if os.path.exists(outname) and not self.clobber: - logger.warning('Skipping existing file %s', outname) - continue - self._fileop.write_binary_file(outname, script_bytes) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - - variant_separator = '-' - - def get_script_filenames(self, name): - result = set() - if '' in self.variants: - result.add(name) - if 'X' in self.variants: - result.add('%s%s' % (name, self.version_info[0])) - if 'X.Y' in self.variants: - result.add('%s%s%s.%s' % (name, self.variant_separator, self.version_info[0], self.version_info[1])) - return result - - def _make_script(self, entry, filenames, options=None): - post_interp = b'' - if options: - args = options.get('interpreter_args', []) - if args: - args = ' %s' % ' '.join(args) - post_interp = args.encode('utf-8') - shebang = self._get_shebang('utf-8', post_interp, options=options) - script = self._get_script_text(entry).encode('utf-8') - scriptnames = self.get_script_filenames(entry.name) - if options and options.get('gui', False): - ext = 'pyw' - else: - ext = 'py' - self._write_script(scriptnames, shebang, script, filenames, ext) - - def _copy_script(self, script, filenames): - adjust = False - script = os.path.join(self.source_dir, convert_path(script)) - outname = os.path.join(self.target_dir, os.path.basename(script)) - if not self.force and not self._fileop.newer(script, outname): - logger.debug('not copying %s (up-to-date)', script) - return - - # Always open the file, but ignore failures in dry-run mode -- - # that way, we'll get accurate feedback if we can read the - # script. - try: - f = open(script, 'rb') - except IOError: # pragma: no cover - if not self.dry_run: - raise - f = None - else: - first_line = f.readline() - if not first_line: # pragma: no cover - logger.warning('%s is an empty file (skipping)', script) - return - - match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) - if match: - adjust = True - post_interp = match.group(1) or b'' - - if not adjust: - if f: - f.close() - self._fileop.copy_file(script, outname) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - else: - logger.info('copying and adjusting %s -> %s', script, self.target_dir) - if not self._fileop.dry_run: - encoding, lines = detect_encoding(f.readline) - f.seek(0) - shebang = self._get_shebang(encoding, post_interp) - if b'pythonw' in first_line: # pragma: no cover - ext = 'pyw' - else: - ext = 'py' - n = os.path.basename(outname) - self._write_script([n], shebang, f.read(), filenames, ext) - if f: - f.close() - - @property - def dry_run(self): - return self._fileop.dry_run - - @dry_run.setter - def dry_run(self, value): - self._fileop.dry_run = value - - if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover - # Executable launcher support. - # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ - - def _get_launcher(self, kind): - if struct.calcsize('P') == 8: # 64-bit - bits = '64' - else: - bits = '32' - platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' - name = '%s%s%s.exe' % (kind, bits, platform_suffix) - if name not in WRAPPERS: - msg = ('Unable to find resource %s in package %s' % - (name, DISTLIB_PACKAGE)) - raise ValueError(msg) - return WRAPPERS[name] - - # Public API follows - - def make(self, specification, options=None): - """ - Make a script. - - :param specification: The specification, which is either a valid export - entry specification (to make a script from a - callable) or a filename (to make a script by - copying from a source location). - :param options: A dictionary of options controlling script generation. - :return: A list of all absolute pathnames written to. - """ - filenames = [] - entry = get_export_entry(specification) - if entry is None: - self._copy_script(specification, filenames) - else: - self._make_script(entry, filenames, options=options) - return filenames - - def make_multiple(self, specifications, options=None): - """ - Take a list of specifications and make scripts from them, - :param specifications: A list of specifications. - :return: A list of all absolute pathnames written to, - """ - filenames = [] - for specification in specifications: - filenames.extend(self.make(specification, options)) - return filenames diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe deleted file mode 100644 index 52154f0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe deleted file mode 100644 index e1ab8f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe deleted file mode 100644 index e8bebdb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py deleted file mode 100644 index 0d5bd7a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py +++ /dev/null @@ -1,1984 +0,0 @@ -# -# Copyright (C) 2012-2023 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import codecs -from collections import deque -import contextlib -import csv -from glob import iglob as std_iglob -import io -import json -import logging -import os -import py_compile -import re -import socket -try: - import ssl -except ImportError: # pragma: no cover - ssl = None -import subprocess -import sys -import tarfile -import tempfile -import textwrap - -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import time - -from . import DistlibException -from .compat import (string_types, text_type, shutil, raw_input, StringIO, cache_from_source, urlopen, urljoin, httplib, - xmlrpclib, HTTPHandler, BaseConfigurator, valid_ident, Container, configparser, URLError, ZipFile, - fsdecode, unquote, urlparse) - -logger = logging.getLogger(__name__) - -# -# Requirement parsing code as per PEP 508 -# - -IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') -VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') -COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') -MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') -OR = re.compile(r'^or\b\s*') -AND = re.compile(r'^and\b\s*') -NON_SPACE = re.compile(r'(\S+)\s*') -STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') - - -def parse_marker(marker_string): - """ - Parse a marker string and return a dictionary containing a marker expression. - - The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in - the expression grammar, or strings. A string contained in quotes is to be - interpreted as a literal string, and a string not contained in quotes is a - variable (such as os_name). - """ - - def marker_var(remaining): - # either identifier, or literal string - m = IDENTIFIER.match(remaining) - if m: - result = m.groups()[0] - remaining = remaining[m.end():] - elif not remaining: - raise SyntaxError('unexpected end of input') - else: - q = remaining[0] - if q not in '\'"': - raise SyntaxError('invalid expression: %s' % remaining) - oq = '\'"'.replace(q, '') - remaining = remaining[1:] - parts = [q] - while remaining: - # either a string chunk, or oq, or q to terminate - if remaining[0] == q: - break - elif remaining[0] == oq: - parts.append(oq) - remaining = remaining[1:] - else: - m = STRING_CHUNK.match(remaining) - if not m: - raise SyntaxError('error in string literal: %s' % remaining) - parts.append(m.groups()[0]) - remaining = remaining[m.end():] - else: - s = ''.join(parts) - raise SyntaxError('unterminated string: %s' % s) - parts.append(q) - result = ''.join(parts) - remaining = remaining[1:].lstrip() # skip past closing quote - return result, remaining - - def marker_expr(remaining): - if remaining and remaining[0] == '(': - result, remaining = marker(remaining[1:].lstrip()) - if remaining[0] != ')': - raise SyntaxError('unterminated parenthesis: %s' % remaining) - remaining = remaining[1:].lstrip() - else: - lhs, remaining = marker_var(remaining) - while remaining: - m = MARKER_OP.match(remaining) - if not m: - break - op = m.groups()[0] - remaining = remaining[m.end():] - rhs, remaining = marker_var(remaining) - lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} - result = lhs - return result, remaining - - def marker_and(remaining): - lhs, remaining = marker_expr(remaining) - while remaining: - m = AND.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_expr(remaining) - lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - def marker(remaining): - lhs, remaining = marker_and(remaining) - while remaining: - m = OR.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_and(remaining) - lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - return marker(marker_string) - - -def parse_requirement(req): - """ - Parse a requirement passed in as a string. Return a Container - whose attributes contain the various parts of the requirement. - """ - remaining = req.strip() - if not remaining or remaining.startswith('#'): - return None - m = IDENTIFIER.match(remaining) - if not m: - raise SyntaxError('name expected: %s' % remaining) - distname = m.groups()[0] - remaining = remaining[m.end():] - extras = mark_expr = versions = uri = None - if remaining and remaining[0] == '[': - i = remaining.find(']', 1) - if i < 0: - raise SyntaxError('unterminated extra: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - extras = [] - while s: - m = IDENTIFIER.match(s) - if not m: - raise SyntaxError('malformed extra: %s' % s) - extras.append(m.groups()[0]) - s = s[m.end():] - if not s: - break - if s[0] != ',': - raise SyntaxError('comma expected in extras: %s' % s) - s = s[1:].lstrip() - if not extras: - extras = None - if remaining: - if remaining[0] == '@': - # it's a URI - remaining = remaining[1:].lstrip() - m = NON_SPACE.match(remaining) - if not m: - raise SyntaxError('invalid URI: %s' % remaining) - uri = m.groups()[0] - t = urlparse(uri) - # there are issues with Python and URL parsing, so this test - # is a bit crude. See bpo-20271, bpo-23505. Python doesn't - # always parse invalid URLs correctly - it should raise - # exceptions for malformed URLs - if not (t.scheme and t.netloc): - raise SyntaxError('Invalid URL: %s' % uri) - remaining = remaining[m.end():].lstrip() - else: - - def get_versions(ver_remaining): - """ - Return a list of operator, version tuples if any are - specified, else None. - """ - m = COMPARE_OP.match(ver_remaining) - versions = None - if m: - versions = [] - while True: - op = m.groups()[0] - ver_remaining = ver_remaining[m.end():] - m = VERSION_IDENTIFIER.match(ver_remaining) - if not m: - raise SyntaxError('invalid version: %s' % ver_remaining) - v = m.groups()[0] - versions.append((op, v)) - ver_remaining = ver_remaining[m.end():] - if not ver_remaining or ver_remaining[0] != ',': - break - ver_remaining = ver_remaining[1:].lstrip() - # Some packages have a trailing comma which would break things - # See issue #148 - if not ver_remaining: - break - m = COMPARE_OP.match(ver_remaining) - if not m: - raise SyntaxError('invalid constraint: %s' % ver_remaining) - if not versions: - versions = None - return versions, ver_remaining - - if remaining[0] != '(': - versions, remaining = get_versions(remaining) - else: - i = remaining.find(')', 1) - if i < 0: - raise SyntaxError('unterminated parenthesis: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - # As a special diversion from PEP 508, allow a version number - # a.b.c in parentheses as a synonym for ~= a.b.c (because this - # is allowed in earlier PEPs) - if COMPARE_OP.match(s): - versions, _ = get_versions(s) - else: - m = VERSION_IDENTIFIER.match(s) - if not m: - raise SyntaxError('invalid constraint: %s' % s) - v = m.groups()[0] - s = s[m.end():].lstrip() - if s: - raise SyntaxError('invalid constraint: %s' % s) - versions = [('~=', v)] - - if remaining: - if remaining[0] != ';': - raise SyntaxError('invalid requirement: %s' % remaining) - remaining = remaining[1:].lstrip() - - mark_expr, remaining = parse_marker(remaining) - - if remaining and remaining[0] != '#': - raise SyntaxError('unexpected trailing data: %s' % remaining) - - if not versions: - rs = distname - else: - rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) - return Container(name=distname, extras=extras, constraints=versions, marker=mark_expr, url=uri, requirement=rs) - - -def get_resources_dests(resources_root, rules): - """Find destinations for resources files""" - - def get_rel_path(root, path): - # normalizes and returns a lstripped-/-separated path - root = root.replace(os.path.sep, '/') - path = path.replace(os.path.sep, '/') - assert path.startswith(root) - return path[len(root):].lstrip('/') - - destinations = {} - for base, suffix, dest in rules: - prefix = os.path.join(resources_root, base) - for abs_base in iglob(prefix): - abs_glob = os.path.join(abs_base, suffix) - for abs_path in iglob(abs_glob): - resource_file = get_rel_path(resources_root, abs_path) - if dest is None: # remove the entry if it was here - destinations.pop(resource_file, None) - else: - rel_path = get_rel_path(abs_base, abs_path) - rel_dest = dest.replace(os.path.sep, '/').rstrip('/') - destinations[resource_file] = rel_dest + '/' + rel_path - return destinations - - -def in_venv(): - if hasattr(sys, 'real_prefix'): - # virtualenv venvs - result = True - else: - # PEP 405 venvs - result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) - return result - - -def get_executable(): - # The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as - # changes to the stub launcher mean that sys.executable always points - # to the stub on OS X - # if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' - # in os.environ): - # result = os.environ['__PYVENV_LAUNCHER__'] - # else: - # result = sys.executable - # return result - # Avoid normcasing: see issue #143 - # result = os.path.normcase(sys.executable) - result = sys.executable - if not isinstance(result, text_type): - result = fsdecode(result) - return result - - -def proceed(prompt, allowed_chars, error_prompt=None, default=None): - p = prompt - while True: - s = raw_input(p) - p = prompt - if not s and default: - s = default - if s: - c = s[0].lower() - if c in allowed_chars: - break - if error_prompt: - p = '%c: %s\n%s' % (c, error_prompt, prompt) - return c - - -def extract_by_key(d, keys): - if isinstance(keys, string_types): - keys = keys.split() - result = {} - for key in keys: - if key in d: - result[key] = d[key] - return result - - -def read_exports(stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - # Try to load as JSON, falling back on legacy format - data = stream.read() - stream = StringIO(data) - try: - jdata = json.load(stream) - result = jdata['extensions']['python.exports']['exports'] - for group, entries in result.items(): - for k, v in entries.items(): - s = '%s = %s' % (k, v) - entry = get_export_entry(s) - assert entry is not None - entries[k] = entry - return result - except Exception: - stream.seek(0, 0) - - def read_stream(cp, stream): - if hasattr(cp, 'read_file'): - cp.read_file(stream) - else: - cp.readfp(stream) - - cp = configparser.ConfigParser() - try: - read_stream(cp, stream) - except configparser.MissingSectionHeaderError: - stream.close() - data = textwrap.dedent(data) - stream = StringIO(data) - read_stream(cp, stream) - - result = {} - for key in cp.sections(): - result[key] = entries = {} - for name, value in cp.items(key): - s = '%s = %s' % (name, value) - entry = get_export_entry(s) - assert entry is not None - # entry.dist = self - entries[name] = entry - return result - - -def write_exports(exports, stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getwriter('utf-8')(stream) - cp = configparser.ConfigParser() - for k, v in exports.items(): - # TODO check k, v for valid values - cp.add_section(k) - for entry in v.values(): - if entry.suffix is None: - s = entry.prefix - else: - s = '%s:%s' % (entry.prefix, entry.suffix) - if entry.flags: - s = '%s [%s]' % (s, ', '.join(entry.flags)) - cp.set(k, entry.name, s) - cp.write(stream) - - -@contextlib.contextmanager -def tempdir(): - td = tempfile.mkdtemp() - try: - yield td - finally: - shutil.rmtree(td) - - -@contextlib.contextmanager -def chdir(d): - cwd = os.getcwd() - try: - os.chdir(d) - yield - finally: - os.chdir(cwd) - - -@contextlib.contextmanager -def socket_timeout(seconds=15): - cto = socket.getdefaulttimeout() - try: - socket.setdefaulttimeout(seconds) - yield - finally: - socket.setdefaulttimeout(cto) - - -class cached_property(object): - - def __init__(self, func): - self.func = func - # for attr in ('__name__', '__module__', '__doc__'): - # setattr(self, attr, getattr(func, attr, None)) - - def __get__(self, obj, cls=None): - if obj is None: - return self - value = self.func(obj) - object.__setattr__(obj, self.func.__name__, value) - # obj.__dict__[self.func.__name__] = value = self.func(obj) - return value - - -def convert_path(pathname): - """Return 'pathname' as a name that will work on the native filesystem. - - The path is split on '/' and put back together again using the current - directory separator. Needed because filenames in the setup script are - always supplied in Unix style, and have to be converted to the local - convention before we can actually use them in the filesystem. Raises - ValueError on non-Unix-ish systems if 'pathname' either starts or - ends with a slash. - """ - if os.sep == '/': - return pathname - if not pathname: - return pathname - if pathname[0] == '/': - raise ValueError("path '%s' cannot be absolute" % pathname) - if pathname[-1] == '/': - raise ValueError("path '%s' cannot end with '/'" % pathname) - - paths = pathname.split('/') - while os.curdir in paths: - paths.remove(os.curdir) - if not paths: - return os.curdir - return os.path.join(*paths) - - -class FileOperator(object): - - def __init__(self, dry_run=False): - self.dry_run = dry_run - self.ensured = set() - self._init_record() - - def _init_record(self): - self.record = False - self.files_written = set() - self.dirs_created = set() - - def record_as_written(self, path): - if self.record: - self.files_written.add(path) - - def newer(self, source, target): - """Tell if the target is newer than the source. - - Returns true if 'source' exists and is more recently modified than - 'target', or if 'source' exists and 'target' doesn't. - - Returns false if both exist and 'target' is the same age or younger - than 'source'. Raise PackagingFileError if 'source' does not exist. - - Note that this test is not very accurate: files created in the same - second will have the same "age". - """ - if not os.path.exists(source): - raise DistlibException("file '%r' does not exist" % os.path.abspath(source)) - if not os.path.exists(target): - return True - - return os.stat(source).st_mtime > os.stat(target).st_mtime - - def copy_file(self, infile, outfile, check=True): - """Copy a file respecting dry-run and force flags. - """ - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying %s to %s', infile, outfile) - if not self.dry_run: - msg = None - if check: - if os.path.islink(outfile): - msg = '%s is a symlink' % outfile - elif os.path.exists(outfile) and not os.path.isfile(outfile): - msg = '%s is a non-regular file' % outfile - if msg: - raise ValueError(msg + ' which would be overwritten') - shutil.copyfile(infile, outfile) - self.record_as_written(outfile) - - def copy_stream(self, instream, outfile, encoding=None): - assert not os.path.isdir(outfile) - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying stream %s to %s', instream, outfile) - if not self.dry_run: - if encoding is None: - outstream = open(outfile, 'wb') - else: - outstream = codecs.open(outfile, 'w', encoding=encoding) - try: - shutil.copyfileobj(instream, outstream) - finally: - outstream.close() - self.record_as_written(outfile) - - def write_binary_file(self, path, data): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - if os.path.exists(path): - os.remove(path) - with open(path, 'wb') as f: - f.write(data) - self.record_as_written(path) - - def write_text_file(self, path, data, encoding): - self.write_binary_file(path, data.encode(encoding)) - - def set_mode(self, bits, mask, files): - if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): - # Set the executable bits (owner, group, and world) on - # all the files specified. - for f in files: - if self.dry_run: - logger.info("changing mode of %s", f) - else: - mode = (os.stat(f).st_mode | bits) & mask - logger.info("changing mode of %s to %o", f, mode) - os.chmod(f, mode) - - set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) - - def ensure_dir(self, path): - path = os.path.abspath(path) - if path not in self.ensured and not os.path.exists(path): - self.ensured.add(path) - d, f = os.path.split(path) - self.ensure_dir(d) - logger.info('Creating %s' % path) - if not self.dry_run: - os.mkdir(path) - if self.record: - self.dirs_created.add(path) - - def byte_compile(self, path, optimize=False, force=False, prefix=None, hashed_invalidation=False): - dpath = cache_from_source(path, not optimize) - logger.info('Byte-compiling %s to %s', path, dpath) - if not self.dry_run: - if force or self.newer(path, dpath): - if not prefix: - diagpath = None - else: - assert path.startswith(prefix) - diagpath = path[len(prefix):] - compile_kwargs = {} - if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): - if not isinstance(hashed_invalidation, py_compile.PycInvalidationMode): - hashed_invalidation = py_compile.PycInvalidationMode.CHECKED_HASH - compile_kwargs['invalidation_mode'] = hashed_invalidation - py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # raise error - self.record_as_written(dpath) - return dpath - - def ensure_removed(self, path): - if os.path.exists(path): - if os.path.isdir(path) and not os.path.islink(path): - logger.debug('Removing directory tree at %s', path) - if not self.dry_run: - shutil.rmtree(path) - if self.record: - if path in self.dirs_created: - self.dirs_created.remove(path) - else: - if os.path.islink(path): - s = 'link' - else: - s = 'file' - logger.debug('Removing %s %s', s, path) - if not self.dry_run: - os.remove(path) - if self.record: - if path in self.files_written: - self.files_written.remove(path) - - def is_writable(self, path): - result = False - while not result: - if os.path.exists(path): - result = os.access(path, os.W_OK) - break - parent = os.path.dirname(path) - if parent == path: - break - path = parent - return result - - def commit(self): - """ - Commit recorded changes, turn off recording, return - changes. - """ - assert self.record - result = self.files_written, self.dirs_created - self._init_record() - return result - - def rollback(self): - if not self.dry_run: - for f in list(self.files_written): - if os.path.exists(f): - os.remove(f) - # dirs should all be empty now, except perhaps for - # __pycache__ subdirs - # reverse so that subdirs appear before their parents - dirs = sorted(self.dirs_created, reverse=True) - for d in dirs: - flist = os.listdir(d) - if flist: - assert flist == ['__pycache__'] - sd = os.path.join(d, flist[0]) - os.rmdir(sd) - os.rmdir(d) # should fail if non-empty - self._init_record() - - -def resolve(module_name, dotted_path): - if module_name in sys.modules: - mod = sys.modules[module_name] - else: - mod = __import__(module_name) - if dotted_path is None: - result = mod - else: - parts = dotted_path.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - -class ExportEntry(object): - - def __init__(self, name, prefix, suffix, flags): - self.name = name - self.prefix = prefix - self.suffix = suffix - self.flags = flags - - @cached_property - def value(self): - return resolve(self.prefix, self.suffix) - - def __repr__(self): # pragma: no cover - return '' % (self.name, self.prefix, self.suffix, self.flags) - - def __eq__(self, other): - if not isinstance(other, ExportEntry): - result = False - else: - result = (self.name == other.name and self.prefix == other.prefix and self.suffix == other.suffix and - self.flags == other.flags) - return result - - __hash__ = object.__hash__ - - -ENTRY_RE = re.compile( - r'''(?P([^\[]\S*)) - \s*=\s*(?P(\w+)([:\.]\w+)*) - \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? - ''', re.VERBOSE) - - -def get_export_entry(specification): - m = ENTRY_RE.search(specification) - if not m: - result = None - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - else: - d = m.groupdict() - name = d['name'] - path = d['callable'] - colons = path.count(':') - if colons == 0: - prefix, suffix = path, None - else: - if colons != 1: - raise DistlibException("Invalid specification " - "'%s'" % specification) - prefix, suffix = path.split(':') - flags = d['flags'] - if flags is None: - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - flags = [] - else: - flags = [f.strip() for f in flags.split(',')] - result = ExportEntry(name, prefix, suffix, flags) - return result - - -def get_cache_base(suffix=None): - """ - Return the default base location for distlib caches. If the directory does - not exist, it is created. Use the suffix provided for the base directory, - and default to '.distlib' if it isn't provided. - - On Windows, if LOCALAPPDATA is defined in the environment, then it is - assumed to be a directory, and will be the parent directory of the result. - On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home - directory - using os.expanduser('~') - will be the parent directory of - the result. - - The result is just the directory '.distlib' in the parent directory as - determined above, or with the name specified with ``suffix``. - """ - if suffix is None: - suffix = '.distlib' - if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: - result = os.path.expandvars('$localappdata') - else: - # Assume posix, or old Windows - result = os.path.expanduser('~') - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if os.path.isdir(result): - usable = os.access(result, os.W_OK) - if not usable: - logger.warning('Directory exists but is not writable: %s', result) - else: - try: - os.makedirs(result) - usable = True - except OSError: - logger.warning('Unable to create %s', result, exc_info=True) - usable = False - if not usable: - result = tempfile.mkdtemp() - logger.warning('Default location unusable, using %s', result) - return os.path.join(result, suffix) - - -def path_to_cache_dir(path, use_abspath=True): - """ - Convert an absolute path to a directory name for use in a cache. - - The algorithm used is: - - #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. - #. Any occurrence of ``os.sep`` is replaced with ``'--'``. - #. ``'.cache'`` is appended. - """ - d, p = os.path.splitdrive(os.path.abspath(path) if use_abspath else path) - if d: - d = d.replace(':', '---') - p = p.replace(os.sep, '--') - return d + p + '.cache' - - -def ensure_slash(s): - if not s.endswith('/'): - return s + '/' - return s - - -def parse_credentials(netloc): - username = password = None - if '@' in netloc: - prefix, netloc = netloc.rsplit('@', 1) - if ':' not in prefix: - username = prefix - else: - username, password = prefix.split(':', 1) - if username: - username = unquote(username) - if password: - password = unquote(password) - return username, password, netloc - - -def get_process_umask(): - result = os.umask(0o22) - os.umask(result) - return result - - -def is_string_sequence(seq): - result = True - i = None - for i, s in enumerate(seq): - if not isinstance(s, string_types): - result = False - break - assert i is not None - return result - - -PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' - '([a-z0-9_.+-]+)', re.I) -PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') - - -def split_filename(filename, project_name=None): - """ - Extract name, version, python version from a filename (no extension) - - Return name, version, pyver or None - """ - result = None - pyver = None - filename = unquote(filename).replace(' ', '-') - m = PYTHON_VERSION.search(filename) - if m: - pyver = m.group(1) - filename = filename[:m.start()] - if project_name and len(filename) > len(project_name) + 1: - m = re.match(re.escape(project_name) + r'\b', filename) - if m: - n = m.end() - result = filename[:n], filename[n + 1:], pyver - if result is None: - m = PROJECT_NAME_AND_VERSION.match(filename) - if m: - result = m.group(1), m.group(3), pyver - return result - - -# Allow spaces in name because of legacy dists like "Twisted Core" -NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' - r'\(\s*(?P[^\s)]+)\)$') - - -def parse_name_and_version(p): - """ - A utility method used to get name and version from a string. - - From e.g. a Provides-Dist value. - - :param p: A value in a form 'foo (1.0)' - :return: The name and version as a tuple. - """ - m = NAME_VERSION_RE.match(p) - if not m: - raise DistlibException('Ill-formed name/version string: \'%s\'' % p) - d = m.groupdict() - return d['name'].strip().lower(), d['ver'] - - -def get_extras(requested, available): - result = set() - requested = set(requested or []) - available = set(available or []) - if '*' in requested: - requested.remove('*') - result |= available - for r in requested: - if r == '-': - result.add(r) - elif r.startswith('-'): - unwanted = r[1:] - if unwanted not in available: - logger.warning('undeclared extra: %s' % unwanted) - if unwanted in result: - result.remove(unwanted) - else: - if r not in available: - logger.warning('undeclared extra: %s' % r) - result.add(r) - return result - - -# -# Extended metadata functionality -# - - -def _get_external_data(url): - result = {} - try: - # urlopen might fail if it runs into redirections, - # because of Python issue #13696. Fixed in locators - # using a custom redirect handler. - resp = urlopen(url) - headers = resp.info() - ct = headers.get('Content-Type') - if not ct.startswith('application/json'): - logger.debug('Unexpected response for JSON request: %s', ct) - else: - reader = codecs.getreader('utf-8')(resp) - # data = reader.read().decode('utf-8') - # result = json.loads(data) - result = json.load(reader) - except Exception as e: - logger.exception('Failed to get external data for %s: %s', url, e) - return result - - -_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' - - -def get_project_data(name): - url = '%s/%s/project.json' % (name[0].upper(), name) - url = urljoin(_external_data_base_url, url) - result = _get_external_data(url) - return result - - -def get_package_data(name, version): - url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) - url = urljoin(_external_data_base_url, url) - return _get_external_data(url) - - -class Cache(object): - """ - A class implementing a cache for resources that need to live in the file system - e.g. shared libraries. This class was moved from resources to here because it - could be used by other modules, e.g. the wheel module. - """ - - def __init__(self, base): - """ - Initialise an instance. - - :param base: The base directory where the cache should be located. - """ - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if not os.path.isdir(base): # pragma: no cover - os.makedirs(base) - if (os.stat(base).st_mode & 0o77) != 0: - logger.warning('Directory \'%s\' is not private', base) - self.base = os.path.abspath(os.path.normpath(base)) - - def prefix_to_dir(self, prefix, use_abspath=True): - """ - Converts a resource prefix to a directory name in the cache. - """ - return path_to_cache_dir(prefix, use_abspath=use_abspath) - - def clear(self): - """ - Clear the cache. - """ - not_removed = [] - for fn in os.listdir(self.base): - fn = os.path.join(self.base, fn) - try: - if os.path.islink(fn) or os.path.isfile(fn): - os.remove(fn) - elif os.path.isdir(fn): - shutil.rmtree(fn) - except Exception: - not_removed.append(fn) - return not_removed - - -class EventMixin(object): - """ - A very simple publish/subscribe system. - """ - - def __init__(self): - self._subscribers = {} - - def add(self, event, subscriber, append=True): - """ - Add a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be added (and called when the - event is published). - :param append: Whether to append or prepend the subscriber to an - existing subscriber list for the event. - """ - subs = self._subscribers - if event not in subs: - subs[event] = deque([subscriber]) - else: - sq = subs[event] - if append: - sq.append(subscriber) - else: - sq.appendleft(subscriber) - - def remove(self, event, subscriber): - """ - Remove a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be removed. - """ - subs = self._subscribers - if event not in subs: - raise ValueError('No subscribers: %r' % event) - subs[event].remove(subscriber) - - def get_subscribers(self, event): - """ - Return an iterator for the subscribers for an event. - :param event: The event to return subscribers for. - """ - return iter(self._subscribers.get(event, ())) - - def publish(self, event, *args, **kwargs): - """ - Publish a event and return a list of values returned by its - subscribers. - - :param event: The event to publish. - :param args: The positional arguments to pass to the event's - subscribers. - :param kwargs: The keyword arguments to pass to the event's - subscribers. - """ - result = [] - for subscriber in self.get_subscribers(event): - try: - value = subscriber(event, *args, **kwargs) - except Exception: - logger.exception('Exception during event publication') - value = None - result.append(value) - logger.debug('publish %s: args = %s, kwargs = %s, result = %s', event, args, kwargs, result) - return result - - -# -# Simple sequencing -# -class Sequencer(object): - - def __init__(self): - self._preds = {} - self._succs = {} - self._nodes = set() # nodes with no preds/succs - - def add_node(self, node): - self._nodes.add(node) - - def remove_node(self, node, edges=False): - if node in self._nodes: - self._nodes.remove(node) - if edges: - for p in set(self._preds.get(node, ())): - self.remove(p, node) - for s in set(self._succs.get(node, ())): - self.remove(node, s) - # Remove empties - for k, v in list(self._preds.items()): - if not v: - del self._preds[k] - for k, v in list(self._succs.items()): - if not v: - del self._succs[k] - - def add(self, pred, succ): - assert pred != succ - self._preds.setdefault(succ, set()).add(pred) - self._succs.setdefault(pred, set()).add(succ) - - def remove(self, pred, succ): - assert pred != succ - try: - preds = self._preds[succ] - succs = self._succs[pred] - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of anything' % succ) - try: - preds.remove(pred) - succs.remove(succ) - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of %r' % (succ, pred)) - - def is_step(self, step): - return (step in self._preds or step in self._succs or step in self._nodes) - - def get_steps(self, final): - if not self.is_step(final): - raise ValueError('Unknown: %r' % final) - result = [] - todo = [] - seen = set() - todo.append(final) - while todo: - step = todo.pop(0) - if step in seen: - # if a step was already seen, - # move it to the end (so it will appear earlier - # when reversed on return) ... but not for the - # final step, as that would be confusing for - # users - if step != final: - result.remove(step) - result.append(step) - else: - seen.add(step) - result.append(step) - preds = self._preds.get(step, ()) - todo.extend(preds) - return reversed(result) - - @property - def strong_connections(self): - # http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm - index_counter = [0] - stack = [] - lowlinks = {} - index = {} - result = [] - - graph = self._succs - - def strongconnect(node): - # set the depth index for this node to the smallest unused index - index[node] = index_counter[0] - lowlinks[node] = index_counter[0] - index_counter[0] += 1 - stack.append(node) - - # Consider successors - try: - successors = graph[node] - except Exception: - successors = [] - for successor in successors: - if successor not in lowlinks: - # Successor has not yet been visited - strongconnect(successor) - lowlinks[node] = min(lowlinks[node], lowlinks[successor]) - elif successor in stack: - # the successor is in the stack and hence in the current - # strongly connected component (SCC) - lowlinks[node] = min(lowlinks[node], index[successor]) - - # If `node` is a root node, pop the stack and generate an SCC - if lowlinks[node] == index[node]: - connected_component = [] - - while True: - successor = stack.pop() - connected_component.append(successor) - if successor == node: - break - component = tuple(connected_component) - # storing the result - result.append(component) - - for node in graph: - if node not in lowlinks: - strongconnect(node) - - return result - - @property - def dot(self): - result = ['digraph G {'] - for succ in self._preds: - preds = self._preds[succ] - for pred in preds: - result.append(' %s -> %s;' % (pred, succ)) - for node in self._nodes: - result.append(' %s;' % node) - result.append('}') - return '\n'.join(result) - - -# -# Unarchiving functionality for zip, tar, tgz, tbz, whl -# - -ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz', '.whl') - - -def unarchive(archive_filename, dest_dir, format=None, check=True): - - def check_path(path): - if not isinstance(path, text_type): - path = path.decode('utf-8') - p = os.path.abspath(os.path.join(dest_dir, path)) - if not p.startswith(dest_dir) or p[plen] != os.sep: - raise ValueError('path outside destination: %r' % p) - - dest_dir = os.path.abspath(dest_dir) - plen = len(dest_dir) - archive = None - if format is None: - if archive_filename.endswith(('.zip', '.whl')): - format = 'zip' - elif archive_filename.endswith(('.tar.gz', '.tgz')): - format = 'tgz' - mode = 'r:gz' - elif archive_filename.endswith(('.tar.bz2', '.tbz')): - format = 'tbz' - mode = 'r:bz2' - elif archive_filename.endswith('.tar'): - format = 'tar' - mode = 'r' - else: # pragma: no cover - raise ValueError('Unknown format for %r' % archive_filename) - try: - if format == 'zip': - archive = ZipFile(archive_filename, 'r') - if check: - names = archive.namelist() - for name in names: - check_path(name) - else: - archive = tarfile.open(archive_filename, mode) - if check: - names = archive.getnames() - for name in names: - check_path(name) - if format != 'zip' and sys.version_info[0] < 3: - # See Python issue 17153. If the dest path contains Unicode, - # tarfile extraction fails on Python 2.x if a member path name - # contains non-ASCII characters - it leads to an implicit - # bytes -> unicode conversion using ASCII to decode. - for tarinfo in archive.getmembers(): - if not isinstance(tarinfo.name, text_type): - tarinfo.name = tarinfo.name.decode('utf-8') - - # Limit extraction of dangerous items, if this Python - # allows it easily. If not, just trust the input. - # See: https://docs.python.org/3/library/tarfile.html#extraction-filters - def extraction_filter(member, path): - """Run tarfile.tar_filter, but raise the expected ValueError""" - # This is only called if the current Python has tarfile filters - try: - return tarfile.tar_filter(member, path) - except tarfile.FilterError as exc: - raise ValueError(str(exc)) - - archive.extraction_filter = extraction_filter - - archive.extractall(dest_dir) - - finally: - if archive: - archive.close() - - -def zip_dir(directory): - """zip a directory tree into a BytesIO object""" - result = io.BytesIO() - dlen = len(directory) - with ZipFile(result, "w") as zf: - for root, dirs, files in os.walk(directory): - for name in files: - full = os.path.join(root, name) - rel = root[dlen:] - dest = os.path.join(rel, name) - zf.write(full, dest) - return result - - -# -# Simple progress bar -# - -UNITS = ('', 'K', 'M', 'G', 'T', 'P') - - -class Progress(object): - unknown = 'UNKNOWN' - - def __init__(self, minval=0, maxval=100): - assert maxval is None or maxval >= minval - self.min = self.cur = minval - self.max = maxval - self.started = None - self.elapsed = 0 - self.done = False - - def update(self, curval): - assert self.min <= curval - assert self.max is None or curval <= self.max - self.cur = curval - now = time.time() - if self.started is None: - self.started = now - else: - self.elapsed = now - self.started - - def increment(self, incr): - assert incr >= 0 - self.update(self.cur + incr) - - def start(self): - self.update(self.min) - return self - - def stop(self): - if self.max is not None: - self.update(self.max) - self.done = True - - @property - def maximum(self): - return self.unknown if self.max is None else self.max - - @property - def percentage(self): - if self.done: - result = '100 %' - elif self.max is None: - result = ' ?? %' - else: - v = 100.0 * (self.cur - self.min) / (self.max - self.min) - result = '%3d %%' % v - return result - - def format_duration(self, duration): - if (duration <= 0) and self.max is None or self.cur == self.min: - result = '??:??:??' - # elif duration < 1: - # result = '--:--:--' - else: - result = time.strftime('%H:%M:%S', time.gmtime(duration)) - return result - - @property - def ETA(self): - if self.done: - prefix = 'Done' - t = self.elapsed - # import pdb; pdb.set_trace() - else: - prefix = 'ETA ' - if self.max is None: - t = -1 - elif self.elapsed == 0 or (self.cur == self.min): - t = 0 - else: - # import pdb; pdb.set_trace() - t = float(self.max - self.min) - t /= self.cur - self.min - t = (t - 1) * self.elapsed - return '%s: %s' % (prefix, self.format_duration(t)) - - @property - def speed(self): - if self.elapsed == 0: - result = 0.0 - else: - result = (self.cur - self.min) / self.elapsed - for unit in UNITS: - if result < 1000: - break - result /= 1000.0 - return '%d %sB/s' % (result, unit) - - -# -# Glob functionality -# - -RICH_GLOB = re.compile(r'\{([^}]*)\}') -_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') -_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') - - -def iglob(path_glob): - """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" - if _CHECK_RECURSIVE_GLOB.search(path_glob): - msg = """invalid glob %r: recursive glob "**" must be used alone""" - raise ValueError(msg % path_glob) - if _CHECK_MISMATCH_SET.search(path_glob): - msg = """invalid glob %r: mismatching set marker '{' or '}'""" - raise ValueError(msg % path_glob) - return _iglob(path_glob) - - -def _iglob(path_glob): - rich_path_glob = RICH_GLOB.split(path_glob, 1) - if len(rich_path_glob) > 1: - assert len(rich_path_glob) == 3, rich_path_glob - prefix, set, suffix = rich_path_glob - for item in set.split(','): - for path in _iglob(''.join((prefix, item, suffix))): - yield path - else: - if '**' not in path_glob: - for item in std_iglob(path_glob): - yield item - else: - prefix, radical = path_glob.split('**', 1) - if prefix == '': - prefix = '.' - if radical == '': - radical = '*' - else: - # we support both - radical = radical.lstrip('/') - radical = radical.lstrip('\\') - for path, dir, files in os.walk(prefix): - path = os.path.normpath(path) - for fn in _iglob(os.path.join(path, radical)): - yield fn - - -if ssl: - from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, CertificateError) - - # - # HTTPSConnection which verifies certificates/matches domains - # - - class HTTPSConnection(httplib.HTTPSConnection): - ca_certs = None # set this to the path to the certs file (.pem) - check_domain = True # only used if ca_certs is not None - - # noinspection PyPropertyAccess - def connect(self): - sock = socket.create_connection((self.host, self.port), self.timeout) - if getattr(self, '_tunnel_host', False): - self.sock = sock - self._tunnel() - - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - if hasattr(ssl, 'OP_NO_SSLv2'): - context.options |= ssl.OP_NO_SSLv2 - if getattr(self, 'cert_file', None): - context.load_cert_chain(self.cert_file, self.key_file) - kwargs = {} - if self.ca_certs: - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(cafile=self.ca_certs) - if getattr(ssl, 'HAS_SNI', False): - kwargs['server_hostname'] = self.host - - self.sock = context.wrap_socket(sock, **kwargs) - if self.ca_certs and self.check_domain: - try: - match_hostname(self.sock.getpeercert(), self.host) - logger.debug('Host verified: %s', self.host) - except CertificateError: # pragma: no cover - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - - class HTTPSHandler(BaseHTTPSHandler): - - def __init__(self, ca_certs, check_domain=True): - BaseHTTPSHandler.__init__(self) - self.ca_certs = ca_certs - self.check_domain = check_domain - - def _conn_maker(self, *args, **kwargs): - """ - This is called to create a connection instance. Normally you'd - pass a connection class to do_open, but it doesn't actually check for - a class, and just expects a callable. As long as we behave just as a - constructor would have, we should be OK. If it ever changes so that - we *must* pass a class, we'll create an UnsafeHTTPSConnection class - which just sets check_domain to False in the class definition, and - choose which one to pass to do_open. - """ - result = HTTPSConnection(*args, **kwargs) - if self.ca_certs: - result.ca_certs = self.ca_certs - result.check_domain = self.check_domain - return result - - def https_open(self, req): - try: - return self.do_open(self._conn_maker, req) - except URLError as e: - if 'certificate verify failed' in str(e.reason): - raise CertificateError('Unable to verify server certificate ' - 'for %s' % req.host) - else: - raise - - # - # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- - # Middle proxy using HTTP listens on port 443, or an index mistakenly serves - # HTML containing a http://xyz link when it should be https://xyz), - # you can use the following handler class, which does not allow HTTP traffic. - # - # It works by inheriting from HTTPHandler - so build_opener won't add a - # handler for HTTP itself. - # - class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): - - def http_open(self, req): - raise URLError('Unexpected HTTP request on what should be a secure ' - 'connection: %s' % req) - - -# -# XML-RPC with timeouts -# -class Transport(xmlrpclib.Transport): - - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.Transport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, x509 = self.get_host_info(host) - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPConnection(h) - return self._connection[1] - - -if ssl: - - class SafeTransport(xmlrpclib.SafeTransport): - - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.SafeTransport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, kwargs = self.get_host_info(host) - if not kwargs: - kwargs = {} - kwargs['timeout'] = self.timeout - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPSConnection(h, None, **kwargs) - return self._connection[1] - - -class ServerProxy(xmlrpclib.ServerProxy): - - def __init__(self, uri, **kwargs): - self.timeout = timeout = kwargs.pop('timeout', None) - # The above classes only come into play if a timeout - # is specified - if timeout is not None: - # scheme = splittype(uri) # deprecated as of Python 3.8 - scheme = urlparse(uri)[0] - use_datetime = kwargs.get('use_datetime', 0) - if scheme == 'https': - tcls = SafeTransport - else: - tcls = Transport - kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) - self.transport = t - xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) - - -# -# CSV functionality. This is provided because on 2.x, the csv module can't -# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. -# - - -def _csv_open(fn, mode, **kwargs): - if sys.version_info[0] < 3: - mode += 'b' - else: - kwargs['newline'] = '' - # Python 3 determines encoding from locale. Force 'utf-8' - # file encoding to match other forced utf-8 encoding - kwargs['encoding'] = 'utf-8' - return open(fn, mode, **kwargs) - - -class CSVBase(object): - defaults = { - 'delimiter': str(','), # The strs are used because we need native - 'quotechar': str('"'), # str in the csv API (2.x won't take - 'lineterminator': str('\n') # Unicode) - } - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.stream.close() - - -class CSVReader(CSVBase): - - def __init__(self, **kwargs): - if 'stream' in kwargs: - stream = kwargs['stream'] - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - self.stream = stream - else: - self.stream = _csv_open(kwargs['path'], 'r') - self.reader = csv.reader(self.stream, **self.defaults) - - def __iter__(self): - return self - - def next(self): - result = next(self.reader) - if sys.version_info[0] < 3: - for i, item in enumerate(result): - if not isinstance(item, text_type): - result[i] = item.decode('utf-8') - return result - - __next__ = next - - -class CSVWriter(CSVBase): - - def __init__(self, fn, **kwargs): - self.stream = _csv_open(fn, 'w') - self.writer = csv.writer(self.stream, **self.defaults) - - def writerow(self, row): - if sys.version_info[0] < 3: - r = [] - for item in row: - if isinstance(item, text_type): - item = item.encode('utf-8') - r.append(item) - row = r - self.writer.writerow(row) - - -# -# Configurator functionality -# - - -class Configurator(BaseConfigurator): - - value_converters = dict(BaseConfigurator.value_converters) - value_converters['inc'] = 'inc_convert' - - def __init__(self, config, base=None): - super(Configurator, self).__init__(config) - self.base = base or os.getcwd() - - def configure_custom(self, config): - - def convert(o): - if isinstance(o, (list, tuple)): - result = type(o)([convert(i) for i in o]) - elif isinstance(o, dict): - if '()' in o: - result = self.configure_custom(o) - else: - result = {} - for k in o: - result[k] = convert(o[k]) - else: - result = self.convert(o) - return result - - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - args = config.pop('[]', ()) - if args: - args = tuple([convert(o) for o in args]) - items = [(k, convert(config[k])) for k in config if valid_ident(k)] - kwargs = dict(items) - result = c(*args, **kwargs) - if props: - for n, v in props.items(): - setattr(result, n, convert(v)) - return result - - def __getitem__(self, key): - result = self.config[key] - if isinstance(result, dict) and '()' in result: - self.config[key] = result = self.configure_custom(result) - return result - - def inc_convert(self, value): - """Default converter for the inc:// protocol.""" - if not os.path.isabs(value): - value = os.path.join(self.base, value) - with codecs.open(value, 'r', encoding='utf-8') as f: - result = json.load(f) - return result - - -class SubprocessMixin(object): - """ - Mixin for running subprocesses and capturing their output - """ - - def __init__(self, verbose=False, progress=None): - self.verbose = verbose - self.progress = progress - - def reader(self, stream, context): - """ - Read lines from a subprocess' output stream and either pass to a progress - callable (if specified) or write progress information to sys.stderr. - """ - progress = self.progress - verbose = self.verbose - while True: - s = stream.readline() - if not s: - break - if progress is not None: - progress(s, context) - else: - if not verbose: - sys.stderr.write('.') - else: - sys.stderr.write(s.decode('utf-8')) - sys.stderr.flush() - stream.close() - - def run_command(self, cmd, **kwargs): - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) - t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) - t1.start() - t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) - t2.start() - p.wait() - t1.join() - t2.join() - if self.progress is not None: - self.progress('done.', 'main') - elif self.verbose: - sys.stderr.write('done.\n') - return p - - -def normalize_name(name): - """Normalize a python package name a la PEP 503""" - # https://www.python.org/dev/peps/pep-0503/#normalized-names - return re.sub('[-_.]+', '-', name).lower() - - -# def _get_pypirc_command(): -# """ -# Get the distutils command for interacting with PyPI configurations. -# :return: the command. -# """ -# from distutils.core import Distribution -# from distutils.config import PyPIRCCommand -# d = Distribution() -# return PyPIRCCommand(d) - - -class PyPIRCFile(object): - - DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' - DEFAULT_REALM = 'pypi' - - def __init__(self, fn=None, url=None): - if fn is None: - fn = os.path.join(os.path.expanduser('~'), '.pypirc') - self.filename = fn - self.url = url - - def read(self): - result = {} - - if os.path.exists(self.filename): - repository = self.url or self.DEFAULT_REPOSITORY - - config = configparser.RawConfigParser() - config.read(self.filename) - sections = config.sections() - if 'distutils' in sections: - # let's get the list of servers - index_servers = config.get('distutils', 'index-servers') - _servers = [server.strip() for server in index_servers.split('\n') if server.strip() != ''] - if _servers == []: - # nothing set, let's try to get the default pypi - if 'pypi' in sections: - _servers = ['pypi'] - else: - for server in _servers: - result = {'server': server} - result['username'] = config.get(server, 'username') - - # optional params - for key, default in (('repository', self.DEFAULT_REPOSITORY), ('realm', self.DEFAULT_REALM), - ('password', None)): - if config.has_option(server, key): - result[key] = config.get(server, key) - else: - result[key] = default - - # work around people having "repository" for the "pypi" - # section of their config set to the HTTP (rather than - # HTTPS) URL - if (server == 'pypi' and repository in (self.DEFAULT_REPOSITORY, 'pypi')): - result['repository'] = self.DEFAULT_REPOSITORY - elif (result['server'] != repository and result['repository'] != repository): - result = {} - elif 'server-login' in sections: - # old format - server = 'server-login' - if config.has_option(server, 'repository'): - repository = config.get(server, 'repository') - else: - repository = self.DEFAULT_REPOSITORY - result = { - 'username': config.get(server, 'username'), - 'password': config.get(server, 'password'), - 'repository': repository, - 'server': server, - 'realm': self.DEFAULT_REALM - } - return result - - def update(self, username, password): - # import pdb; pdb.set_trace() - config = configparser.RawConfigParser() - fn = self.filename - config.read(fn) - if not config.has_section('pypi'): - config.add_section('pypi') - config.set('pypi', 'username', username) - config.set('pypi', 'password', password) - with open(fn, 'w') as f: - config.write(f) - - -def _load_pypirc(index): - """ - Read the PyPI access configuration as supported by distutils. - """ - return PyPIRCFile(url=index.url).read() - - -def _store_pypirc(index): - PyPIRCFile().update(index.username, index.password) - - -# -# get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor -# tweaks -# - - -def get_host_platform(): - """Return a string that identifies the current platform. This is used mainly to - distinguish platform-specific build directories and platform-specific built - distributions. Typically includes the OS name and version and the - architecture (as supplied by 'os.uname()'), although the exact information - included depends on the OS; eg. on Linux, the kernel version isn't - particularly important. - - Examples of returned values: - linux-i586 - linux-alpha (?) - solaris-2.6-sun4u - - Windows will return one of: - win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) - win32 (all others - specifically, sys.platform is returned) - - For other non-POSIX platforms, currently just returns 'sys.platform'. - - """ - if os.name == 'nt': - if 'amd64' in sys.version.lower(): - return 'win-amd64' - if '(arm)' in sys.version.lower(): - return 'win-arm32' - if '(arm64)' in sys.version.lower(): - return 'win-arm64' - return sys.platform - - # Set for cross builds explicitly - if "_PYTHON_HOST_PLATFORM" in os.environ: - return os.environ["_PYTHON_HOST_PLATFORM"] - - if os.name != 'posix' or not hasattr(os, 'uname'): - # XXX what about the architecture? NT is Intel or Alpha, - # Mac OS is M68k or PPC, etc. - return sys.platform - - # Try to distinguish various flavours of Unix - - (osname, host, release, version, machine) = os.uname() - - # Convert the OS name to lowercase, remove '/' characters, and translate - # spaces (for "Power Macintosh") - osname = osname.lower().replace('/', '') - machine = machine.replace(' ', '_').replace('/', '-') - - if osname[:5] == 'linux': - # At least on Linux/Intel, 'machine' is the processor -- - # i386, etc. - # XXX what about Alpha, SPARC, etc? - return "%s-%s" % (osname, machine) - - elif osname[:5] == 'sunos': - if release[0] >= '5': # SunOS 5 == Solaris 2 - osname = 'solaris' - release = '%d.%s' % (int(release[0]) - 3, release[2:]) - # We can't use 'platform.architecture()[0]' because a - # bootstrap problem. We use a dict to get an error - # if some suspicious happens. - bitness = {2147483647: '32bit', 9223372036854775807: '64bit'} - machine += '.%s' % bitness[sys.maxsize] - # fall through to standard osname-release-machine representation - elif osname[:3] == 'aix': - from _aix_support import aix_platform - return aix_platform() - elif osname[:6] == 'cygwin': - osname = 'cygwin' - rel_re = re.compile(r'[\d.]+', re.ASCII) - m = rel_re.match(release) - if m: - release = m.group() - elif osname[:6] == 'darwin': - import _osx_support - try: - from distutils import sysconfig - except ImportError: - import sysconfig - osname, release, machine = _osx_support.get_platform_osx(sysconfig.get_config_vars(), osname, release, machine) - - return '%s-%s-%s' % (osname, release, machine) - - -_TARGET_TO_PLAT = { - 'x86': 'win32', - 'x64': 'win-amd64', - 'arm': 'win-arm32', -} - - -def get_platform(): - if os.name != 'nt': - return get_host_platform() - cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') - if cross_compilation_target not in _TARGET_TO_PLAT: - return get_host_platform() - return _TARGET_TO_PLAT[cross_compilation_target] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py deleted file mode 100644 index d70a96e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py +++ /dev/null @@ -1,750 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2023 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Implementation of a flexible versioning scheme providing support for PEP-440, -setuptools-compatible and semantic versioning. -""" - -import logging -import re - -from .compat import string_types -from .util import parse_requirement - -__all__ = ['NormalizedVersion', 'NormalizedMatcher', - 'LegacyVersion', 'LegacyMatcher', - 'SemanticVersion', 'SemanticMatcher', - 'UnsupportedVersionError', 'get_scheme'] - -logger = logging.getLogger(__name__) - - -class UnsupportedVersionError(ValueError): - """This is an unsupported version.""" - pass - - -class Version(object): - def __init__(self, s): - self._string = s = s.strip() - self._parts = parts = self.parse(s) - assert isinstance(parts, tuple) - assert len(parts) > 0 - - def parse(self, s): - raise NotImplementedError('please implement in a subclass') - - def _check_compatible(self, other): - if type(self) != type(other): - raise TypeError('cannot compare %r and %r' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - self._check_compatible(other) - return self._parts < other._parts - - def __gt__(self, other): - return not (self.__lt__(other) or self.__eq__(other)) - - def __le__(self, other): - return self.__lt__(other) or self.__eq__(other) - - def __ge__(self, other): - return self.__gt__(other) or self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self._parts) - - def __repr__(self): - return "%s('%s')" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - @property - def is_prerelease(self): - raise NotImplementedError('Please implement in subclasses.') - - -class Matcher(object): - version_class = None - - # value is either a callable or the name of a method - _operators = { - '<': lambda v, c, p: v < c, - '>': lambda v, c, p: v > c, - '<=': lambda v, c, p: v == c or v < c, - '>=': lambda v, c, p: v == c or v > c, - '==': lambda v, c, p: v == c, - '===': lambda v, c, p: v == c, - # by default, compatible => >=. - '~=': lambda v, c, p: v == c or v > c, - '!=': lambda v, c, p: v != c, - } - - # this is a method only to support alternative implementations - # via overriding - def parse_requirement(self, s): - return parse_requirement(s) - - def __init__(self, s): - if self.version_class is None: - raise ValueError('Please specify a version class') - self._string = s = s.strip() - r = self.parse_requirement(s) - if not r: - raise ValueError('Not valid: %r' % s) - self.name = r.name - self.key = self.name.lower() # for case-insensitive comparisons - clist = [] - if r.constraints: - # import pdb; pdb.set_trace() - for op, s in r.constraints: - if s.endswith('.*'): - if op not in ('==', '!='): - raise ValueError('\'.*\' not allowed for ' - '%r constraints' % op) - # Could be a partial version (e.g. for '2.*') which - # won't parse as a version, so keep it as a string - vn, prefix = s[:-2], True - # Just to check that vn is a valid version - self.version_class(vn) - else: - # Should parse as a version, so we can create an - # instance for the comparison - vn, prefix = self.version_class(s), False - clist.append((op, vn, prefix)) - self._parts = tuple(clist) - - def match(self, version): - """ - Check if the provided version matches the constraints. - - :param version: The version to match against this instance. - :type version: String or :class:`Version` instance. - """ - if isinstance(version, string_types): - version = self.version_class(version) - for operator, constraint, prefix in self._parts: - f = self._operators.get(operator) - if isinstance(f, string_types): - f = getattr(self, f) - if not f: - msg = ('%r not implemented ' - 'for %s' % (operator, self.__class__.__name__)) - raise NotImplementedError(msg) - if not f(version, constraint, prefix): - return False - return True - - @property - def exact_version(self): - result = None - if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): - result = self._parts[0][1] - return result - - def _check_compatible(self, other): - if type(self) != type(other) or self.name != other.name: - raise TypeError('cannot compare %s and %s' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self.key == other.key and self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self.key) + hash(self._parts) - - def __repr__(self): - return "%s(%r)" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - -PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|alpha|b|beta|c|rc|pre|preview)(\d+)?)?' - r'(\.(post|r|rev)(\d+)?)?([._-]?(dev)(\d+)?)?' - r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$', re.I) - - -def _pep_440_key(s): - s = s.strip() - m = PEP440_VERSION_RE.match(s) - if not m: - raise UnsupportedVersionError('Not a valid version: %s' % s) - groups = m.groups() - nums = tuple(int(v) for v in groups[1].split('.')) - while len(nums) > 1 and nums[-1] == 0: - nums = nums[:-1] - - if not groups[0]: - epoch = 0 - else: - epoch = int(groups[0][:-1]) - pre = groups[4:6] - post = groups[7:9] - dev = groups[10:12] - local = groups[13] - if pre == (None, None): - pre = () - else: - if pre[1] is None: - pre = pre[0], 0 - else: - pre = pre[0], int(pre[1]) - if post == (None, None): - post = () - else: - if post[1] is None: - post = post[0], 0 - else: - post = post[0], int(post[1]) - if dev == (None, None): - dev = () - else: - if dev[1] is None: - dev = dev[0], 0 - else: - dev = dev[0], int(dev[1]) - if local is None: - local = () - else: - parts = [] - for part in local.split('.'): - # to ensure that numeric compares as > lexicographic, avoid - # comparing them directly, but encode a tuple which ensures - # correct sorting - if part.isdigit(): - part = (1, int(part)) - else: - part = (0, part) - parts.append(part) - local = tuple(parts) - if not pre: - # either before pre-release, or final release and after - if not post and dev: - # before pre-release - pre = ('a', -1) # to sort before a0 - else: - pre = ('z',) # to sort after all pre-releases - # now look at the state of post and dev. - if not post: - post = ('_',) # sort before 'a' - if not dev: - dev = ('final',) - - return epoch, nums, pre, post, dev, local - - -_normalized_key = _pep_440_key - - -class NormalizedVersion(Version): - """A rational version. - - Good: - 1.2 # equivalent to "1.2.0" - 1.2.0 - 1.2a1 - 1.2.3a2 - 1.2.3b1 - 1.2.3c1 - 1.2.3.4 - TODO: fill this out - - Bad: - 1 # minimum two numbers - 1.2a # release level must have a release serial - 1.2.3b - """ - def parse(self, s): - result = _normalized_key(s) - # _normalized_key loses trailing zeroes in the release - # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 - # However, PEP 440 prefix matching needs it: for example, - # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). - m = PEP440_VERSION_RE.match(s) # must succeed - groups = m.groups() - self._release_clause = tuple(int(v) for v in groups[1].split('.')) - return result - - PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) - - @property - def is_prerelease(self): - return any(t[0] in self.PREREL_TAGS for t in self._parts if t) - - -def _match_prefix(x, y): - x = str(x) - y = str(y) - if x == y: - return True - if not x.startswith(y): - return False - n = len(y) - return x[n] == '.' - - -class NormalizedMatcher(Matcher): - version_class = NormalizedVersion - - # value is either a callable or the name of a method - _operators = { - '~=': '_match_compatible', - '<': '_match_lt', - '>': '_match_gt', - '<=': '_match_le', - '>=': '_match_ge', - '==': '_match_eq', - '===': '_match_arbitrary', - '!=': '_match_ne', - } - - def _adjust_local(self, version, constraint, prefix): - if prefix: - strip_local = '+' not in constraint and version._parts[-1] - else: - # both constraint and version are - # NormalizedVersion instances. - # If constraint does not have a local component, - # ensure the version doesn't, either. - strip_local = not constraint._parts[-1] and version._parts[-1] - if strip_local: - s = version._string.split('+', 1)[0] - version = self.version_class(s) - return version, constraint - - def _match_lt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version >= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_gt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version <= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_le(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version <= constraint - - def _match_ge(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version >= constraint - - def _match_eq(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version == constraint) - else: - result = _match_prefix(version, constraint) - return result - - def _match_arbitrary(self, version, constraint, prefix): - return str(version) == str(constraint) - - def _match_ne(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version != constraint) - else: - result = not _match_prefix(version, constraint) - return result - - def _match_compatible(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version == constraint: - return True - if version < constraint: - return False -# if not prefix: -# return True - release_clause = constraint._release_clause - if len(release_clause) > 1: - release_clause = release_clause[:-1] - pfx = '.'.join([str(i) for i in release_clause]) - return _match_prefix(version, pfx) - - -_REPLACEMENTS = ( - (re.compile('[.+-]$'), ''), # remove trailing puncts - (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start - (re.compile('^[.-]'), ''), # remove leading puncts - (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses - (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha - (re.compile(r'\b(pre-alpha|prealpha)\b'), - 'pre.alpha'), # standardise - (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses -) - -_SUFFIX_REPLACEMENTS = ( - (re.compile('^[:~._+-]+'), ''), # remove leading puncts - (re.compile('[,*")([\\]]'), ''), # remove unwanted chars - (re.compile('[~:+_ -]'), '.'), # replace illegal chars - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\.$'), ''), # trailing '.' -) - -_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') - - -def _suggest_semantic_version(s): - """ - Try to suggest a semantic form for a version for which - _suggest_normalized_version couldn't come up with anything. - """ - result = s.strip().lower() - for pat, repl in _REPLACEMENTS: - result = pat.sub(repl, result) - if not result: - result = '0.0.0' - - # Now look for numeric prefix, and separate it out from - # the rest. - # import pdb; pdb.set_trace() - m = _NUMERIC_PREFIX.match(result) - if not m: - prefix = '0.0.0' - suffix = result - else: - prefix = m.groups()[0].split('.') - prefix = [int(i) for i in prefix] - while len(prefix) < 3: - prefix.append(0) - if len(prefix) == 3: - suffix = result[m.end():] - else: - suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] - prefix = prefix[:3] - prefix = '.'.join([str(i) for i in prefix]) - suffix = suffix.strip() - if suffix: - # import pdb; pdb.set_trace() - # massage the suffix. - for pat, repl in _SUFFIX_REPLACEMENTS: - suffix = pat.sub(repl, suffix) - - if not suffix: - result = prefix - else: - sep = '-' if 'dev' in suffix else '+' - result = prefix + sep + suffix - if not is_semver(result): - result = None - return result - - -def _suggest_normalized_version(s): - """Suggest a normalized version close to the given version string. - - If you have a version string that isn't rational (i.e. NormalizedVersion - doesn't like it) then you might be able to get an equivalent (or close) - rational version from this function. - - This does a number of simple normalizations to the given string, based - on observation of versions currently in use on PyPI. Given a dump of - those version during PyCon 2009, 4287 of them: - - 2312 (53.93%) match NormalizedVersion without change - with the automatic suggestion - - 3474 (81.04%) match when using this suggestion method - - @param s {str} An irrational version string. - @returns A rational version string, or None, if couldn't determine one. - """ - try: - _normalized_key(s) - return s # already rational - except UnsupportedVersionError: - pass - - rs = s.lower() - - # part of this could use maketrans - for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), - ('beta', 'b'), ('rc', 'c'), ('-final', ''), - ('-pre', 'c'), - ('-release', ''), ('.release', ''), ('-stable', ''), - ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), - ('final', '')): - rs = rs.replace(orig, repl) - - # if something ends with dev or pre, we add a 0 - rs = re.sub(r"pre$", r"pre0", rs) - rs = re.sub(r"dev$", r"dev0", rs) - - # if we have something like "b-2" or "a.2" at the end of the - # version, that is probably beta, alpha, etc - # let's remove the dash or dot - rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) - - # 1.0-dev-r371 -> 1.0.dev371 - # 0.1-dev-r79 -> 0.1.dev79 - rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) - - # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 - rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) - - # Clean: v0.3, v1.0 - if rs.startswith('v'): - rs = rs[1:] - - # Clean leading '0's on numbers. - # TODO: unintended side-effect on, e.g., "2003.05.09" - # PyPI stats: 77 (~2%) better - rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) - - # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers - # zero. - # PyPI stats: 245 (7.56%) better - rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) - - # the 'dev-rNNN' tag is a dev tag - rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) - - # clean the - when used as a pre delimiter - rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) - - # a terminal "dev" or "devel" can be changed into ".dev0" - rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) - - # a terminal "dev" can be changed into ".dev0" - rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) - - # a terminal "final" or "stable" can be removed - rs = re.sub(r"(final|stable)$", "", rs) - - # The 'r' and the '-' tags are post release tags - # 0.4a1.r10 -> 0.4a1.post10 - # 0.9.33-17222 -> 0.9.33.post17222 - # 0.9.33-r17222 -> 0.9.33.post17222 - rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) - - # Clean 'r' instead of 'dev' usage: - # 0.9.33+r17222 -> 0.9.33.dev17222 - # 1.0dev123 -> 1.0.dev123 - # 1.0.git123 -> 1.0.dev123 - # 1.0.bzr123 -> 1.0.dev123 - # 0.1a0dev.123 -> 0.1a0.dev123 - # PyPI stats: ~150 (~4%) better - rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) - - # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: - # 0.2.pre1 -> 0.2c1 - # 0.2-c1 -> 0.2c1 - # 1.0preview123 -> 1.0c123 - # PyPI stats: ~21 (0.62%) better - rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) - - # Tcl/Tk uses "px" for their post release markers - rs = re.sub(r"p(\d+)$", r".post\1", rs) - - try: - _normalized_key(rs) - except UnsupportedVersionError: - rs = None - return rs - -# -# Legacy version processing (distribute-compatible) -# - - -_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) -_VERSION_REPLACE = { - 'pre': 'c', - 'preview': 'c', - '-': 'final-', - 'rc': 'c', - 'dev': '@', - '': None, - '.': None, -} - - -def _legacy_key(s): - def get_parts(s): - result = [] - for p in _VERSION_PART.split(s.lower()): - p = _VERSION_REPLACE.get(p, p) - if p: - if '0' <= p[:1] <= '9': - p = p.zfill(8) - else: - p = '*' + p - result.append(p) - result.append('*final') - return result - - result = [] - for p in get_parts(s): - if p.startswith('*'): - if p < '*final': - while result and result[-1] == '*final-': - result.pop() - while result and result[-1] == '00000000': - result.pop() - result.append(p) - return tuple(result) - - -class LegacyVersion(Version): - def parse(self, s): - return _legacy_key(s) - - @property - def is_prerelease(self): - result = False - for x in self._parts: - if (isinstance(x, string_types) and x.startswith('*') and x < '*final'): - result = True - break - return result - - -class LegacyMatcher(Matcher): - version_class = LegacyVersion - - _operators = dict(Matcher._operators) - _operators['~='] = '_match_compatible' - - numeric_re = re.compile(r'^(\d+(\.\d+)*)') - - def _match_compatible(self, version, constraint, prefix): - if version < constraint: - return False - m = self.numeric_re.match(str(constraint)) - if not m: - logger.warning('Cannot compute compatible match for version %s ' - ' and constraint %s', version, constraint) - return True - s = m.groups()[0] - if '.' in s: - s = s.rsplit('.', 1)[0] - return _match_prefix(version, s) - -# -# Semantic versioning -# - - -_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' - r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' - r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) - - -def is_semver(s): - return _SEMVER_RE.match(s) - - -def _semantic_key(s): - def make_tuple(s, absent): - if s is None: - result = (absent,) - else: - parts = s[1:].split('.') - # We can't compare ints and strings on Python 3, so fudge it - # by zero-filling numeric values so simulate a numeric comparison - result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) - return result - - m = is_semver(s) - if not m: - raise UnsupportedVersionError(s) - groups = m.groups() - major, minor, patch = [int(i) for i in groups[:3]] - # choose the '|' and '*' so that versions sort correctly - pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') - return (major, minor, patch), pre, build - - -class SemanticVersion(Version): - def parse(self, s): - return _semantic_key(s) - - @property - def is_prerelease(self): - return self._parts[1][0] != '|' - - -class SemanticMatcher(Matcher): - version_class = SemanticVersion - - -class VersionScheme(object): - def __init__(self, key, matcher, suggester=None): - self.key = key - self.matcher = matcher - self.suggester = suggester - - def is_valid_version(self, s): - try: - self.matcher.version_class(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_matcher(self, s): - try: - self.matcher(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_constraint_list(self, s): - """ - Used for processing some metadata fields - """ - # See issue #140. Be tolerant of a single trailing comma. - if s.endswith(','): - s = s[:-1] - return self.is_valid_matcher('dummy_name (%s)' % s) - - def suggest(self, s): - if self.suggester is None: - result = None - else: - result = self.suggester(s) - return result - - -_SCHEMES = { - 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, - _suggest_normalized_version), - 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), - 'semantic': VersionScheme(_semantic_key, SemanticMatcher, - _suggest_semantic_version), -} - -_SCHEMES['default'] = _SCHEMES['normalized'] - - -def get_scheme(name): - if name not in _SCHEMES: - raise ValueError('unknown scheme name: %r' % name) - return _SCHEMES[name] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe deleted file mode 100644 index 4ee2d3a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe deleted file mode 100644 index 951d581..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe deleted file mode 100644 index 5763076..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py deleted file mode 100644 index 62ab10f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py +++ /dev/null @@ -1,1100 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import base64 -import codecs -import datetime -from email import message_from_file -import hashlib -import json -import logging -import os -import posixpath -import re -import shutil -import sys -import tempfile -import zipfile - -from . import __version__, DistlibException -from .compat import sysconfig, ZipFile, fsdecode, text_type, filter -from .database import InstalledDistribution -from .metadata import Metadata, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME -from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, cached_property, get_cache_base, - read_exports, tempdir, get_platform) -from .version import NormalizedVersion, UnsupportedVersionError - -logger = logging.getLogger(__name__) - -cache = None # created when needed - -if hasattr(sys, 'pypy_version_info'): # pragma: no cover - IMP_PREFIX = 'pp' -elif sys.platform.startswith('java'): # pragma: no cover - IMP_PREFIX = 'jy' -elif sys.platform == 'cli': # pragma: no cover - IMP_PREFIX = 'ip' -else: - IMP_PREFIX = 'cp' - -VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') -if not VER_SUFFIX: # pragma: no cover - VER_SUFFIX = '%s%s' % sys.version_info[:2] -PYVER = 'py' + VER_SUFFIX -IMPVER = IMP_PREFIX + VER_SUFFIX - -ARCH = get_platform().replace('-', '_').replace('.', '_') - -ABI = sysconfig.get_config_var('SOABI') -if ABI and ABI.startswith('cpython-'): - ABI = ABI.replace('cpython-', 'cp').split('-')[0] -else: - - def _derive_abi(): - parts = ['cp', VER_SUFFIX] - if sysconfig.get_config_var('Py_DEBUG'): - parts.append('d') - if IMP_PREFIX == 'cp': - vi = sys.version_info[:2] - if vi < (3, 8): - wpm = sysconfig.get_config_var('WITH_PYMALLOC') - if wpm is None: - wpm = True - if wpm: - parts.append('m') - if vi < (3, 3): - us = sysconfig.get_config_var('Py_UNICODE_SIZE') - if us == 4 or (us is None and sys.maxunicode == 0x10FFFF): - parts.append('u') - return ''.join(parts) - - ABI = _derive_abi() - del _derive_abi - -FILENAME_RE = re.compile( - r''' -(?P[^-]+) --(?P\d+[^-]*) -(-(?P\d+[^-]*))? --(?P\w+\d+(\.\w+\d+)*) --(?P\w+) --(?P\w+(\.\w+)*) -\.whl$ -''', re.IGNORECASE | re.VERBOSE) - -NAME_VERSION_RE = re.compile(r''' -(?P[^-]+) --(?P\d+[^-]*) -(-(?P\d+[^-]*))?$ -''', re.IGNORECASE | re.VERBOSE) - -SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') -SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') -SHEBANG_PYTHON = b'#!python' -SHEBANG_PYTHONW = b'#!pythonw' - -if os.sep == '/': - to_posix = lambda o: o -else: - to_posix = lambda o: o.replace(os.sep, '/') - -if sys.version_info[0] < 3: - import imp -else: - imp = None - import importlib.machinery - import importlib.util - - -def _get_suffixes(): - if imp: - return [s[0] for s in imp.get_suffixes()] - else: - return importlib.machinery.EXTENSION_SUFFIXES - - -def _load_dynamic(name, path): - # https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly - if imp: - return imp.load_dynamic(name, path) - else: - spec = importlib.util.spec_from_file_location(name, path) - module = importlib.util.module_from_spec(spec) - sys.modules[name] = module - spec.loader.exec_module(module) - return module - - -class Mounter(object): - - def __init__(self): - self.impure_wheels = {} - self.libs = {} - - def add(self, pathname, extensions): - self.impure_wheels[pathname] = extensions - self.libs.update(extensions) - - def remove(self, pathname): - extensions = self.impure_wheels.pop(pathname) - for k, v in extensions: - if k in self.libs: - del self.libs[k] - - def find_module(self, fullname, path=None): - if fullname in self.libs: - result = self - else: - result = None - return result - - def load_module(self, fullname): - if fullname in sys.modules: - result = sys.modules[fullname] - else: - if fullname not in self.libs: - raise ImportError('unable to find extension for %s' % fullname) - result = _load_dynamic(fullname, self.libs[fullname]) - result.__loader__ = self - parts = fullname.rsplit('.', 1) - if len(parts) > 1: - result.__package__ = parts[0] - return result - - -_hook = Mounter() - - -class Wheel(object): - """ - Class to build and install from Wheel files (PEP 427). - """ - - wheel_version = (1, 1) - hash_kind = 'sha256' - - def __init__(self, filename=None, sign=False, verify=False): - """ - Initialise an instance using a (valid) filename. - """ - self.sign = sign - self.should_verify = verify - self.buildver = '' - self.pyver = [PYVER] - self.abi = ['none'] - self.arch = ['any'] - self.dirname = os.getcwd() - if filename is None: - self.name = 'dummy' - self.version = '0.1' - self._filename = self.filename - else: - m = NAME_VERSION_RE.match(filename) - if m: - info = m.groupdict('') - self.name = info['nm'] - # Reinstate the local version separator - self.version = info['vn'].replace('_', '-') - self.buildver = info['bn'] - self._filename = self.filename - else: - dirname, filename = os.path.split(filename) - m = FILENAME_RE.match(filename) - if not m: - raise DistlibException('Invalid name or ' - 'filename: %r' % filename) - if dirname: - self.dirname = os.path.abspath(dirname) - self._filename = filename - info = m.groupdict('') - self.name = info['nm'] - self.version = info['vn'] - self.buildver = info['bn'] - self.pyver = info['py'].split('.') - self.abi = info['bi'].split('.') - self.arch = info['ar'].split('.') - - @property - def filename(self): - """ - Build and return a filename from the various components. - """ - if self.buildver: - buildver = '-' + self.buildver - else: - buildver = '' - pyver = '.'.join(self.pyver) - abi = '.'.join(self.abi) - arch = '.'.join(self.arch) - # replace - with _ as a local version separator - version = self.version.replace('-', '_') - return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, pyver, abi, arch) - - @property - def exists(self): - path = os.path.join(self.dirname, self.filename) - return os.path.isfile(path) - - @property - def tags(self): - for pyver in self.pyver: - for abi in self.abi: - for arch in self.arch: - yield pyver, abi, arch - - @cached_property - def metadata(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - wrapper = codecs.getreader('utf-8') - with ZipFile(pathname, 'r') as zf: - self.get_wheel_metadata(zf) - # wv = wheel_metadata['Wheel-Version'].split('.', 1) - # file_version = tuple([int(i) for i in wv]) - # if file_version < (1, 1): - # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, - # LEGACY_METADATA_FILENAME] - # else: - # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] - fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] - result = None - for fn in fns: - try: - metadata_filename = posixpath.join(info_dir, fn) - with zf.open(metadata_filename) as bf: - wf = wrapper(bf) - result = Metadata(fileobj=wf) - if result: - break - except KeyError: - pass - if not result: - raise ValueError('Invalid wheel, because metadata is ' - 'missing: looked in %s' % ', '.join(fns)) - return result - - def get_wheel_metadata(self, zf): - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - metadata_filename = posixpath.join(info_dir, 'WHEEL') - with zf.open(metadata_filename) as bf: - wf = codecs.getreader('utf-8')(bf) - message = message_from_file(wf) - return dict(message) - - @cached_property - def info(self): - pathname = os.path.join(self.dirname, self.filename) - with ZipFile(pathname, 'r') as zf: - result = self.get_wheel_metadata(zf) - return result - - def process_shebang(self, data): - m = SHEBANG_RE.match(data) - if m: - end = m.end() - shebang, data_after_shebang = data[:end], data[end:] - # Preserve any arguments after the interpreter - if b'pythonw' in shebang.lower(): - shebang_python = SHEBANG_PYTHONW - else: - shebang_python = SHEBANG_PYTHON - m = SHEBANG_DETAIL_RE.match(shebang) - if m: - args = b' ' + m.groups()[-1] - else: - args = b'' - shebang = shebang_python + args - data = shebang + data_after_shebang - else: - cr = data.find(b'\r') - lf = data.find(b'\n') - if cr < 0 or cr > lf: - term = b'\n' - else: - if data[cr:cr + 2] == b'\r\n': - term = b'\r\n' - else: - term = b'\r' - data = SHEBANG_PYTHON + term + data - return data - - def get_hash(self, data, hash_kind=None): - if hash_kind is None: - hash_kind = self.hash_kind - try: - hasher = getattr(hashlib, hash_kind) - except AttributeError: - raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) - result = hasher(data).digest() - result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') - return hash_kind, result - - def write_record(self, records, record_path, archive_record_path): - records = list(records) # make a copy, as mutated - records.append((archive_record_path, '', '')) - with CSVWriter(record_path) as writer: - for row in records: - writer.writerow(row) - - def write_records(self, info, libdir, archive_paths): - records = [] - distinfo, info_dir = info - # hasher = getattr(hashlib, self.hash_kind) - for ap, p in archive_paths: - with open(p, 'rb') as f: - data = f.read() - digest = '%s=%s' % self.get_hash(data) - size = os.path.getsize(p) - records.append((ap, digest, size)) - - p = os.path.join(distinfo, 'RECORD') - ap = to_posix(os.path.join(info_dir, 'RECORD')) - self.write_record(records, p, ap) - archive_paths.append((ap, p)) - - def build_zip(self, pathname, archive_paths): - with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: - for ap, p in archive_paths: - logger.debug('Wrote %s to %s in wheel', p, ap) - zf.write(p, ap) - - def build(self, paths, tags=None, wheel_version=None): - """ - Build a wheel from files in specified paths, and use any specified tags - when determining the name of the wheel. - """ - if tags is None: - tags = {} - - libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] - if libkey == 'platlib': - is_pure = 'false' - default_pyver = [IMPVER] - default_abi = [ABI] - default_arch = [ARCH] - else: - is_pure = 'true' - default_pyver = [PYVER] - default_abi = ['none'] - default_arch = ['any'] - - self.pyver = tags.get('pyver', default_pyver) - self.abi = tags.get('abi', default_abi) - self.arch = tags.get('arch', default_arch) - - libdir = paths[libkey] - - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - archive_paths = [] - - # First, stuff which is not in site-packages - for key in ('data', 'headers', 'scripts'): - if key not in paths: - continue - path = paths[key] - if os.path.isdir(path): - for root, dirs, files in os.walk(path): - for fn in files: - p = fsdecode(os.path.join(root, fn)) - rp = os.path.relpath(p, path) - ap = to_posix(os.path.join(data_dir, key, rp)) - archive_paths.append((ap, p)) - if key == 'scripts' and not p.endswith('.exe'): - with open(p, 'rb') as f: - data = f.read() - data = self.process_shebang(data) - with open(p, 'wb') as f: - f.write(data) - - # Now, stuff which is in site-packages, other than the - # distinfo stuff. - path = libdir - distinfo = None - for root, dirs, files in os.walk(path): - if root == path: - # At the top level only, save distinfo for later - # and skip it for now - for i, dn in enumerate(dirs): - dn = fsdecode(dn) - if dn.endswith('.dist-info'): - distinfo = os.path.join(root, dn) - del dirs[i] - break - assert distinfo, '.dist-info directory expected, not found' - - for fn in files: - # comment out next suite to leave .pyc files in - if fsdecode(fn).endswith(('.pyc', '.pyo')): - continue - p = os.path.join(root, fn) - rp = to_posix(os.path.relpath(p, path)) - archive_paths.append((rp, p)) - - # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. - files = os.listdir(distinfo) - for fn in files: - if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): - p = fsdecode(os.path.join(distinfo, fn)) - ap = to_posix(os.path.join(info_dir, fn)) - archive_paths.append((ap, p)) - - wheel_metadata = [ - 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), - 'Generator: distlib %s' % __version__, - 'Root-Is-Purelib: %s' % is_pure, - ] - for pyver, abi, arch in self.tags: - wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) - p = os.path.join(distinfo, 'WHEEL') - with open(p, 'w') as f: - f.write('\n'.join(wheel_metadata)) - ap = to_posix(os.path.join(info_dir, 'WHEEL')) - archive_paths.append((ap, p)) - - # sort the entries by archive path. Not needed by any spec, but it - # keeps the archive listing and RECORD tidier than they would otherwise - # be. Use the number of path segments to keep directory entries together, - # and keep the dist-info stuff at the end. - def sorter(t): - ap = t[0] - n = ap.count('/') - if '.dist-info' in ap: - n += 10000 - return (n, ap) - - archive_paths = sorted(archive_paths, key=sorter) - - # Now, at last, RECORD. - # Paths in here are archive paths - nothing else makes sense. - self.write_records((distinfo, info_dir), libdir, archive_paths) - # Now, ready to build the zip file - pathname = os.path.join(self.dirname, self.filename) - self.build_zip(pathname, archive_paths) - return pathname - - def skip_entry(self, arcname): - """ - Determine whether an archive entry should be skipped when verifying - or installing. - """ - # The signature file won't be in RECORD, - # and we don't currently don't do anything with it - # We also skip directories, as they won't be in RECORD - # either. See: - # - # https://github.com/pypa/wheel/issues/294 - # https://github.com/pypa/wheel/issues/287 - # https://github.com/pypa/wheel/pull/289 - # - return arcname.endswith(('/', '/RECORD.jws')) - - def install(self, paths, maker, **kwargs): - """ - Install a wheel to the specified paths. If kwarg ``warner`` is - specified, it should be a callable, which will be called with two - tuples indicating the wheel version of this software and the wheel - version in the file, if there is a discrepancy in the versions. - This can be used to issue any warnings to raise any exceptions. - If kwarg ``lib_only`` is True, only the purelib/platlib files are - installed, and the headers, scripts, data and dist-info metadata are - not written. If kwarg ``bytecode_hashed_invalidation`` is True, written - bytecode will try to use file-hash based invalidation (PEP-552) on - supported interpreter versions (CPython 3.7+). - - The return value is a :class:`InstalledDistribution` instance unless - ``options.lib_only`` is True, in which case the return value is ``None``. - """ - - dry_run = maker.dry_run - warner = kwargs.get('warner') - lib_only = kwargs.get('lib_only', False) - bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message = message_from_file(wf) - wv = message['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - if (file_version != self.wheel_version) and warner: - warner(self.wheel_version, file_version) - - if message['Root-Is-Purelib'] == 'true': - libdir = paths['purelib'] - else: - libdir = paths['platlib'] - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - data_pfx = posixpath.join(data_dir, '') - info_pfx = posixpath.join(info_dir, '') - script_pfx = posixpath.join(data_dir, 'scripts', '') - - # make a new instance rather than a copy of maker's, - # as we mutate it - fileop = FileOperator(dry_run=dry_run) - fileop.record = True # so we can rollback if needed - - bc = not sys.dont_write_bytecode # Double negatives. Lovely! - - outfiles = [] # for RECORD writing - - # for script copying/shebang processing - workdir = tempfile.mkdtemp() - # set target dir later - # we default add_launchers to False, as the - # Python Launcher should be used instead - maker.source_dir = workdir - maker.target_dir = None - try: - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if self.skip_entry(u_arcname): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - if lib_only and u_arcname.startswith((info_pfx, data_pfx)): - logger.debug('lib_only: skipping %s', u_arcname) - continue - is_script = (u_arcname.startswith(script_pfx) and not u_arcname.endswith('.exe')) - - if u_arcname.startswith(data_pfx): - _, where, rp = u_arcname.split('/', 2) - outfile = os.path.join(paths[where], convert_path(rp)) - else: - # meant for site-packages. - if u_arcname in (wheel_metadata_name, record_name): - continue - outfile = os.path.join(libdir, convert_path(u_arcname)) - if not is_script: - with zf.open(arcname) as bf: - fileop.copy_stream(bf, outfile) - # Issue #147: permission bits aren't preserved. Using - # zf.extract(zinfo, libdir) should have worked, but didn't, - # see https://www.thetopsites.net/article/53834422.shtml - # So ... manually preserve permission bits as given in zinfo - if os.name == 'posix': - # just set the normal permission bits - os.chmod(outfile, (zinfo.external_attr >> 16) & 0x1FF) - outfiles.append(outfile) - # Double check the digest of the written file - if not dry_run and row[1]: - with open(outfile, 'rb') as bf: - data = bf.read() - _, newdigest = self.get_hash(data, kind) - if newdigest != digest: - raise DistlibException('digest mismatch ' - 'on write for ' - '%s' % outfile) - if bc and outfile.endswith('.py'): - try: - pyc = fileop.byte_compile(outfile, hashed_invalidation=bc_hashed_invalidation) - outfiles.append(pyc) - except Exception: - # Don't give up if byte-compilation fails, - # but log it and perhaps warn the user - logger.warning('Byte-compilation failed', exc_info=True) - else: - fn = os.path.basename(convert_path(arcname)) - workname = os.path.join(workdir, fn) - with zf.open(arcname) as bf: - fileop.copy_stream(bf, workname) - - dn, fn = os.path.split(outfile) - maker.target_dir = dn - filenames = maker.make(fn) - fileop.set_executable_mode(filenames) - outfiles.extend(filenames) - - if lib_only: - logger.debug('lib_only: returning None') - dist = None - else: - # Generate scripts - - # Try to get pydist.json so we can see if there are - # any commands to generate. If this fails (e.g. because - # of a legacy wheel), log a warning but don't give up. - commands = None - file_version = self.info['Wheel-Version'] - if file_version == '1.0': - # Use legacy info - ep = posixpath.join(info_dir, 'entry_points.txt') - try: - with zf.open(ep) as bwf: - epdata = read_exports(bwf) - commands = {} - for key in ('console', 'gui'): - k = '%s_scripts' % key - if k in epdata: - commands['wrap_%s' % key] = d = {} - for v in epdata[k].values(): - s = '%s:%s' % (v.prefix, v.suffix) - if v.flags: - s += ' [%s]' % ','.join(v.flags) - d[v.name] = s - except Exception: - logger.warning('Unable to read legacy script ' - 'metadata, so cannot generate ' - 'scripts') - else: - try: - with zf.open(metadata_name) as bwf: - wf = wrapper(bwf) - commands = json.load(wf).get('extensions') - if commands: - commands = commands.get('python.commands') - except Exception: - logger.warning('Unable to read JSON metadata, so ' - 'cannot generate scripts') - if commands: - console_scripts = commands.get('wrap_console', {}) - gui_scripts = commands.get('wrap_gui', {}) - if console_scripts or gui_scripts: - script_dir = paths.get('scripts', '') - if not os.path.isdir(script_dir): - raise ValueError('Valid script path not ' - 'specified') - maker.target_dir = script_dir - for k, v in console_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script) - fileop.set_executable_mode(filenames) - - if gui_scripts: - options = {'gui': True} - for k, v in gui_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script, options) - fileop.set_executable_mode(filenames) - - p = os.path.join(libdir, info_dir) - dist = InstalledDistribution(p) - - # Write SHARED - paths = dict(paths) # don't change passed in dict - del paths['purelib'] - del paths['platlib'] - paths['lib'] = libdir - p = dist.write_shared_locations(paths, dry_run) - if p: - outfiles.append(p) - - # Write RECORD - dist.write_installed_files(outfiles, paths['prefix'], dry_run) - return dist - except Exception: # pragma: no cover - logger.exception('installation failed.') - fileop.rollback() - raise - finally: - shutil.rmtree(workdir) - - def _get_dylib_cache(self): - global cache - if cache is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('dylib-cache'), '%s.%s' % sys.version_info[:2]) - cache = Cache(base) - return cache - - def _get_extensions(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - arcname = posixpath.join(info_dir, 'EXTENSIONS') - wrapper = codecs.getreader('utf-8') - result = [] - with ZipFile(pathname, 'r') as zf: - try: - with zf.open(arcname) as bf: - wf = wrapper(bf) - extensions = json.load(wf) - cache = self._get_dylib_cache() - prefix = cache.prefix_to_dir(self.filename, use_abspath=False) - cache_base = os.path.join(cache.base, prefix) - if not os.path.isdir(cache_base): - os.makedirs(cache_base) - for name, relpath in extensions.items(): - dest = os.path.join(cache_base, convert_path(relpath)) - if not os.path.exists(dest): - extract = True - else: - file_time = os.stat(dest).st_mtime - file_time = datetime.datetime.fromtimestamp(file_time) - info = zf.getinfo(relpath) - wheel_time = datetime.datetime(*info.date_time) - extract = wheel_time > file_time - if extract: - zf.extract(relpath, cache_base) - result.append((name, dest)) - except KeyError: - pass - return result - - def is_compatible(self): - """ - Determine if a wheel is compatible with the running system. - """ - return is_compatible(self) - - def is_mountable(self): - """ - Determine if a wheel is asserted as mountable by its metadata. - """ - return True # for now - metadata details TBD - - def mount(self, append=False): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if not self.is_compatible(): - msg = 'Wheel %s not compatible with this Python.' % pathname - raise DistlibException(msg) - if not self.is_mountable(): - msg = 'Wheel %s is marked as not mountable.' % pathname - raise DistlibException(msg) - if pathname in sys.path: - logger.debug('%s already in path', pathname) - else: - if append: - sys.path.append(pathname) - else: - sys.path.insert(0, pathname) - extensions = self._get_extensions() - if extensions: - if _hook not in sys.meta_path: - sys.meta_path.append(_hook) - _hook.add(pathname, extensions) - - def unmount(self): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if pathname not in sys.path: - logger.debug('%s not in path', pathname) - else: - sys.path.remove(pathname) - if pathname in _hook.impure_wheels: - _hook.remove(pathname) - if not _hook.impure_wheels: - if _hook in sys.meta_path: - sys.meta_path.remove(_hook) - - def verify(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - # data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - # metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message_from_file(wf) - # wv = message['Wheel-Version'].split('.', 1) - # file_version = tuple([int(i) for i in wv]) - # TODO version verification - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - # See issue #115: some wheels have .. in their entries, but - # in the filename ... e.g. __main__..py ! So the check is - # updated to look for .. in the directory portions - p = u_arcname.split('/') - if '..' in p: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - - if self.skip_entry(u_arcname): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - def update(self, modifier, dest_dir=None, **kwargs): - """ - Update the contents of a wheel in a generic way. The modifier should - be a callable which expects a dictionary argument: its keys are - archive-entry paths, and its values are absolute filesystem paths - where the contents the corresponding archive entries can be found. The - modifier is free to change the contents of the files pointed to, add - new entries and remove entries, before returning. This method will - extract the entire contents of the wheel to a temporary location, call - the modifier, and then use the passed (and possibly updated) - dictionary to write a new wheel. If ``dest_dir`` is specified, the new - wheel is written there -- otherwise, the original wheel is overwritten. - - The modifier should return True if it updated the wheel, else False. - This method returns the same value the modifier returns. - """ - - def get_version(path_map, info_dir): - version = path = None - key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME) - if key not in path_map: - key = '%s/PKG-INFO' % info_dir - if key in path_map: - path = path_map[key] - version = Metadata(path=path).version - return version, path - - def update_version(version, path): - updated = None - try: - NormalizedVersion(version) - i = version.find('-') - if i < 0: - updated = '%s+1' % version - else: - parts = [int(s) for s in version[i + 1:].split('.')] - parts[-1] += 1 - updated = '%s+%s' % (version[:i], '.'.join(str(i) for i in parts)) - except UnsupportedVersionError: - logger.debug('Cannot update non-compliant (PEP-440) ' - 'version %r', version) - if updated: - md = Metadata(path=path) - md.version = updated - legacy = path.endswith(LEGACY_METADATA_FILENAME) - md.write(path=path, legacy=legacy) - logger.debug('Version updated from %r to %r', version, updated) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - record_name = posixpath.join(info_dir, 'RECORD') - with tempdir() as workdir: - with ZipFile(pathname, 'r') as zf: - path_map = {} - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if u_arcname == record_name: - continue - if '..' in u_arcname: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - zf.extract(zinfo, workdir) - path = os.path.join(workdir, convert_path(u_arcname)) - path_map[u_arcname] = path - - # Remember the version. - original_version, _ = get_version(path_map, info_dir) - # Files extracted. Call the modifier. - modified = modifier(path_map, **kwargs) - if modified: - # Something changed - need to build a new wheel. - current_version, path = get_version(path_map, info_dir) - if current_version and (current_version == original_version): - # Add or update local version to signify changes. - update_version(current_version, path) - # Decide where the new wheel goes. - if dest_dir is None: - fd, newpath = tempfile.mkstemp(suffix='.whl', prefix='wheel-update-', dir=workdir) - os.close(fd) - else: - if not os.path.isdir(dest_dir): - raise DistlibException('Not a directory: %r' % dest_dir) - newpath = os.path.join(dest_dir, self.filename) - archive_paths = list(path_map.items()) - distinfo = os.path.join(workdir, info_dir) - info = distinfo, info_dir - self.write_records(info, workdir, archive_paths) - self.build_zip(newpath, archive_paths) - if dest_dir is None: - shutil.copyfile(newpath, pathname) - return modified - - -def _get_glibc_version(): - import platform - ver = platform.libc_ver() - result = [] - if ver[0] == 'glibc': - for s in ver[1].split('.'): - result.append(int(s) if s.isdigit() else 0) - result = tuple(result) - return result - - -def compatible_tags(): - """ - Return (pyver, abi, arch) tuples compatible with this Python. - """ - class _Version: - def __init__(self, major, minor): - self.major = major - self.major_minor = (major, minor) - self.string = ''.join((str(major), str(minor))) - - def __str__(self): - return self.string - - - versions = [ - _Version(sys.version_info.major, minor_version) - for minor_version in range(sys.version_info.minor, -1, -1) - ] - abis = [] - for suffix in _get_suffixes(): - if suffix.startswith('.abi'): - abis.append(suffix.split('.', 2)[1]) - abis.sort() - if ABI != 'none': - abis.insert(0, ABI) - abis.append('none') - result = [] - - arches = [ARCH] - if sys.platform == 'darwin': - m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) - if m: - name, major, minor, arch = m.groups() - minor = int(minor) - matches = [arch] - if arch in ('i386', 'ppc'): - matches.append('fat') - if arch in ('i386', 'ppc', 'x86_64'): - matches.append('fat3') - if arch in ('ppc64', 'x86_64'): - matches.append('fat64') - if arch in ('i386', 'x86_64'): - matches.append('intel') - if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): - matches.append('universal') - while minor >= 0: - for match in matches: - s = '%s_%s_%s_%s' % (name, major, minor, match) - if s != ARCH: # already there - arches.append(s) - minor -= 1 - - # Most specific - our Python version, ABI and arch - for i, version_object in enumerate(versions): - version = str(version_object) - add_abis = [] - - if i == 0: - add_abis = abis - - if IMP_PREFIX == 'cp' and version_object.major_minor >= (3, 2): - limited_api_abi = 'abi' + str(version_object.major) - if limited_api_abi not in add_abis: - add_abis.append(limited_api_abi) - - for abi in add_abis: - for arch in arches: - result.append((''.join((IMP_PREFIX, version)), abi, arch)) - # manylinux - if abi != 'none' and sys.platform.startswith('linux'): - arch = arch.replace('linux_', '') - parts = _get_glibc_version() - if len(parts) == 2: - if parts >= (2, 5): - result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux1_%s' % arch)) - if parts >= (2, 12): - result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux2010_%s' % arch)) - if parts >= (2, 17): - result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux2014_%s' % arch)) - result.append((''.join( - (IMP_PREFIX, version)), abi, 'manylinux_%s_%s_%s' % (parts[0], parts[1], arch))) - - # where no ABI / arch dependency, but IMP_PREFIX dependency - for i, version_object in enumerate(versions): - version = str(version_object) - result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) - if i == 0: - result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) - - # no IMP_PREFIX, ABI or arch dependency - for i, version_object in enumerate(versions): - version = str(version_object) - result.append((''.join(('py', version)), 'none', 'any')) - if i == 0: - result.append((''.join(('py', version[0])), 'none', 'any')) - - return set(result) - - -COMPATIBLE_TAGS = compatible_tags() - -del compatible_tags - - -def is_compatible(wheel, tags=None): - if not isinstance(wheel, Wheel): - wheel = Wheel(wheel) # assume it's a filename - result = False - if tags is None: - tags = COMPATIBLE_TAGS - for ver, abi, arch in tags: - if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: - result = True - break - return result diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py deleted file mode 100644 index 7686fe8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -from .distro import ( - NORMALIZED_DISTRO_ID, - NORMALIZED_LSB_ID, - NORMALIZED_OS_ID, - LinuxDistribution, - __version__, - build_number, - codename, - distro_release_attr, - distro_release_info, - id, - info, - like, - linux_distribution, - lsb_release_attr, - lsb_release_info, - major_version, - minor_version, - name, - os_release_attr, - os_release_info, - uname_attr, - uname_info, - version, - version_parts, -) - -__all__ = [ - "NORMALIZED_DISTRO_ID", - "NORMALIZED_LSB_ID", - "NORMALIZED_OS_ID", - "LinuxDistribution", - "build_number", - "codename", - "distro_release_attr", - "distro_release_info", - "id", - "info", - "like", - "linux_distribution", - "lsb_release_attr", - "lsb_release_info", - "major_version", - "minor_version", - "name", - "os_release_attr", - "os_release_info", - "uname_attr", - "uname_info", - "version", - "version_parts", -] - -__version__ = __version__ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py deleted file mode 100644 index 0c01d5b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .distro import main - -if __name__ == "__main__": - main() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f3b894f..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index a56dc80..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc deleted file mode 100644 index 54de170..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py deleted file mode 100644 index 78ccdfa..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py +++ /dev/null @@ -1,1403 +0,0 @@ -#!/usr/bin/env python -# Copyright 2015-2021 Nir Cohen -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -The ``distro`` package (``distro`` stands for Linux Distribution) provides -information about the Linux distribution it runs on, such as a reliable -machine-readable distro ID, or version information. - -It is the recommended replacement for Python's original -:py:func:`platform.linux_distribution` function, but it provides much more -functionality. An alternative implementation became necessary because Python -3.5 deprecated this function, and Python 3.8 removed it altogether. Its -predecessor function :py:func:`platform.dist` was already deprecated since -Python 2.6 and removed in Python 3.8. Still, there are many cases in which -access to OS distribution information is needed. See `Python issue 1322 -`_ for more information. -""" - -import argparse -import json -import logging -import os -import re -import shlex -import subprocess -import sys -import warnings -from typing import ( - Any, - Callable, - Dict, - Iterable, - Optional, - Sequence, - TextIO, - Tuple, - Type, -) - -try: - from typing import TypedDict -except ImportError: - # Python 3.7 - TypedDict = dict - -__version__ = "1.9.0" - - -class VersionDict(TypedDict): - major: str - minor: str - build_number: str - - -class InfoDict(TypedDict): - id: str - version: str - version_parts: VersionDict - like: str - codename: str - - -_UNIXCONFDIR = os.environ.get("UNIXCONFDIR", "/etc") -_UNIXUSRLIBDIR = os.environ.get("UNIXUSRLIBDIR", "/usr/lib") -_OS_RELEASE_BASENAME = "os-release" - -#: Translation table for normalizing the "ID" attribute defined in os-release -#: files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as defined in the os-release file, translated to lower case, -#: with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_OS_ID = { - "ol": "oracle", # Oracle Linux - "opensuse-leap": "opensuse", # Newer versions of OpenSuSE report as opensuse-leap -} - -#: Translation table for normalizing the "Distributor ID" attribute returned by -#: the lsb_release command, for use by the :func:`distro.id` method. -#: -#: * Key: Value as returned by the lsb_release command, translated to lower -#: case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_LSB_ID = { - "enterpriseenterpriseas": "oracle", # Oracle Enterprise Linux 4 - "enterpriseenterpriseserver": "oracle", # Oracle Linux 5 - "redhatenterpriseworkstation": "rhel", # RHEL 6, 7 Workstation - "redhatenterpriseserver": "rhel", # RHEL 6, 7 Server - "redhatenterprisecomputenode": "rhel", # RHEL 6 ComputeNode -} - -#: Translation table for normalizing the distro ID derived from the file name -#: of distro release files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as derived from the file name of a distro release file, -#: translated to lower case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_DISTRO_ID = { - "redhat": "rhel", # RHEL 6.x, 7.x -} - -# Pattern for content of distro release file (reversed) -_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( - r"(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)" -) - -# Pattern for base file name of distro release file -_DISTRO_RELEASE_BASENAME_PATTERN = re.compile(r"(\w+)[-_](release|version)$") - -# Base file names to be looked up for if _UNIXCONFDIR is not readable. -_DISTRO_RELEASE_BASENAMES = [ - "SuSE-release", - "altlinux-release", - "arch-release", - "base-release", - "centos-release", - "fedora-release", - "gentoo-release", - "mageia-release", - "mandrake-release", - "mandriva-release", - "mandrivalinux-release", - "manjaro-release", - "oracle-release", - "redhat-release", - "rocky-release", - "sl-release", - "slackware-version", -] - -# Base file names to be ignored when searching for distro release file -_DISTRO_RELEASE_IGNORE_BASENAMES = ( - "debian_version", - "lsb-release", - "oem-release", - _OS_RELEASE_BASENAME, - "system-release", - "plesk-release", - "iredmail-release", - "board-release", - "ec2_version", -) - - -def linux_distribution(full_distribution_name: bool = True) -> Tuple[str, str, str]: - """ - .. deprecated:: 1.6.0 - - :func:`distro.linux_distribution()` is deprecated. It should only be - used as a compatibility shim with Python's - :py:func:`platform.linux_distribution()`. Please use :func:`distro.id`, - :func:`distro.version` and :func:`distro.name` instead. - - Return information about the current OS distribution as a tuple - ``(id_name, version, codename)`` with items as follows: - - * ``id_name``: If *full_distribution_name* is false, the result of - :func:`distro.id`. Otherwise, the result of :func:`distro.name`. - - * ``version``: The result of :func:`distro.version`. - - * ``codename``: The extra item (usually in parentheses) after the - os-release version number, or the result of :func:`distro.codename`. - - The interface of this function is compatible with the original - :py:func:`platform.linux_distribution` function, supporting a subset of - its parameters. - - The data it returns may not exactly be the same, because it uses more data - sources than the original function, and that may lead to different data if - the OS distribution is not consistent across multiple data sources it - provides (there are indeed such distributions ...). - - Another reason for differences is the fact that the :func:`distro.id` - method normalizes the distro ID string to a reliable machine-readable value - for a number of popular OS distributions. - """ - warnings.warn( - "distro.linux_distribution() is deprecated. It should only be used as a " - "compatibility shim with Python's platform.linux_distribution(). Please use " - "distro.id(), distro.version() and distro.name() instead.", - DeprecationWarning, - stacklevel=2, - ) - return _distro.linux_distribution(full_distribution_name) - - -def id() -> str: - """ - Return the distro ID of the current distribution, as a - machine-readable string. - - For a number of OS distributions, the returned distro ID value is - *reliable*, in the sense that it is documented and that it does not change - across releases of the distribution. - - This package maintains the following reliable distro ID values: - - ============== ========================================= - Distro ID Distribution - ============== ========================================= - "ubuntu" Ubuntu - "debian" Debian - "rhel" RedHat Enterprise Linux - "centos" CentOS - "fedora" Fedora - "sles" SUSE Linux Enterprise Server - "opensuse" openSUSE - "amzn" Amazon Linux - "arch" Arch Linux - "buildroot" Buildroot - "cloudlinux" CloudLinux OS - "exherbo" Exherbo Linux - "gentoo" GenToo Linux - "ibm_powerkvm" IBM PowerKVM - "kvmibm" KVM for IBM z Systems - "linuxmint" Linux Mint - "mageia" Mageia - "mandriva" Mandriva Linux - "parallels" Parallels - "pidora" Pidora - "raspbian" Raspbian - "oracle" Oracle Linux (and Oracle Enterprise Linux) - "scientific" Scientific Linux - "slackware" Slackware - "xenserver" XenServer - "openbsd" OpenBSD - "netbsd" NetBSD - "freebsd" FreeBSD - "midnightbsd" MidnightBSD - "rocky" Rocky Linux - "aix" AIX - "guix" Guix System - "altlinux" ALT Linux - ============== ========================================= - - If you have a need to get distros for reliable IDs added into this set, - or if you find that the :func:`distro.id` function returns a different - distro ID for one of the listed distros, please create an issue in the - `distro issue tracker`_. - - **Lookup hierarchy and transformations:** - - First, the ID is obtained from the following sources, in the specified - order. The first available and non-empty value is used: - - * the value of the "ID" attribute of the os-release file, - - * the value of the "Distributor ID" attribute returned by the lsb_release - command, - - * the first part of the file name of the distro release file, - - The so determined ID value then passes the following transformations, - before it is returned by this method: - - * it is translated to lower case, - - * blanks (which should not be there anyway) are translated to underscores, - - * a normalization of the ID is performed, based upon - `normalization tables`_. The purpose of this normalization is to ensure - that the ID is as reliable as possible, even across incompatible changes - in the OS distributions. A common reason for an incompatible change is - the addition of an os-release file, or the addition of the lsb_release - command, with ID values that differ from what was previously determined - from the distro release file name. - """ - return _distro.id() - - -def name(pretty: bool = False) -> str: - """ - Return the name of the current OS distribution, as a human-readable - string. - - If *pretty* is false, the name is returned without version or codename. - (e.g. "CentOS Linux") - - If *pretty* is true, the version and codename are appended. - (e.g. "CentOS Linux 7.1.1503 (Core)") - - **Lookup hierarchy:** - - The name is obtained from the following sources, in the specified order. - The first available and non-empty value is used: - - * If *pretty* is false: - - - the value of the "NAME" attribute of the os-release file, - - - the value of the "Distributor ID" attribute returned by the lsb_release - command, - - - the value of the "" field of the distro release file. - - * If *pretty* is true: - - - the value of the "PRETTY_NAME" attribute of the os-release file, - - - the value of the "Description" attribute returned by the lsb_release - command, - - - the value of the "" field of the distro release file, appended - with the value of the pretty version ("" and "" - fields) of the distro release file, if available. - """ - return _distro.name(pretty) - - -def version(pretty: bool = False, best: bool = False) -> str: - """ - Return the version of the current OS distribution, as a human-readable - string. - - If *pretty* is false, the version is returned without codename (e.g. - "7.0"). - - If *pretty* is true, the codename in parenthesis is appended, if the - codename is non-empty (e.g. "7.0 (Maipo)"). - - Some distributions provide version numbers with different precisions in - the different sources of distribution information. Examining the different - sources in a fixed priority order does not always yield the most precise - version (e.g. for Debian 8.2, or CentOS 7.1). - - Some other distributions may not provide this kind of information. In these - cases, an empty string would be returned. This behavior can be observed - with rolling releases distributions (e.g. Arch Linux). - - The *best* parameter can be used to control the approach for the returned - version: - - If *best* is false, the first non-empty version number in priority order of - the examined sources is returned. - - If *best* is true, the most precise version number out of all examined - sources is returned. - - **Lookup hierarchy:** - - In all cases, the version number is obtained from the following sources. - If *best* is false, this order represents the priority order: - - * the value of the "VERSION_ID" attribute of the os-release file, - * the value of the "Release" attribute returned by the lsb_release - command, - * the version number parsed from the "" field of the first line - of the distro release file, - * the version number parsed from the "PRETTY_NAME" attribute of the - os-release file, if it follows the format of the distro release files. - * the version number parsed from the "Description" attribute returned by - the lsb_release command, if it follows the format of the distro release - files. - """ - return _distro.version(pretty, best) - - -def version_parts(best: bool = False) -> Tuple[str, str, str]: - """ - Return the version of the current OS distribution as a tuple - ``(major, minor, build_number)`` with items as follows: - - * ``major``: The result of :func:`distro.major_version`. - - * ``minor``: The result of :func:`distro.minor_version`. - - * ``build_number``: The result of :func:`distro.build_number`. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.version_parts(best) - - -def major_version(best: bool = False) -> str: - """ - Return the major version of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The major version is the first - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.major_version(best) - - -def minor_version(best: bool = False) -> str: - """ - Return the minor version of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The minor version is the second - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.minor_version(best) - - -def build_number(best: bool = False) -> str: - """ - Return the build number of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The build number is the third part - of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.build_number(best) - - -def like() -> str: - """ - Return a space-separated list of distro IDs of distributions that are - closely related to the current OS distribution in regards to packaging - and programming interfaces, for example distributions the current - distribution is a derivative from. - - **Lookup hierarchy:** - - This information item is only provided by the os-release file. - For details, see the description of the "ID_LIKE" attribute in the - `os-release man page - `_. - """ - return _distro.like() - - -def codename() -> str: - """ - Return the codename for the release of the current OS distribution, - as a string. - - If the distribution does not have a codename, an empty string is returned. - - Note that the returned codename is not always really a codename. For - example, openSUSE returns "x86_64". This function does not handle such - cases in any special way and just returns the string it finds, if any. - - **Lookup hierarchy:** - - * the codename within the "VERSION" attribute of the os-release file, if - provided, - - * the value of the "Codename" attribute returned by the lsb_release - command, - - * the value of the "" field of the distro release file. - """ - return _distro.codename() - - -def info(pretty: bool = False, best: bool = False) -> InfoDict: - """ - Return certain machine-readable information items about the current OS - distribution in a dictionary, as shown in the following example: - - .. sourcecode:: python - - { - 'id': 'rhel', - 'version': '7.0', - 'version_parts': { - 'major': '7', - 'minor': '0', - 'build_number': '' - }, - 'like': 'fedora', - 'codename': 'Maipo' - } - - The dictionary structure and keys are always the same, regardless of which - information items are available in the underlying data sources. The values - for the various keys are as follows: - - * ``id``: The result of :func:`distro.id`. - - * ``version``: The result of :func:`distro.version`. - - * ``version_parts -> major``: The result of :func:`distro.major_version`. - - * ``version_parts -> minor``: The result of :func:`distro.minor_version`. - - * ``version_parts -> build_number``: The result of - :func:`distro.build_number`. - - * ``like``: The result of :func:`distro.like`. - - * ``codename``: The result of :func:`distro.codename`. - - For a description of the *pretty* and *best* parameters, see the - :func:`distro.version` method. - """ - return _distro.info(pretty, best) - - -def os_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the os-release file data source of the current OS distribution. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_info() - - -def lsb_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the lsb_release command data source of the current OS distribution. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_info() - - -def distro_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current OS distribution. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_info() - - -def uname_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current OS distribution. - """ - return _distro.uname_info() - - -def os_release_attr(attribute: str) -> str: - """ - Return a single named information item from the os-release file data source - of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_attr(attribute) - - -def lsb_release_attr(attribute: str) -> str: - """ - Return a single named information item from the lsb_release command output - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_attr(attribute) - - -def distro_release_attr(attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_attr(attribute) - - -def uname_attr(attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - """ - return _distro.uname_attr(attribute) - - -try: - from functools import cached_property -except ImportError: - # Python < 3.8 - class cached_property: # type: ignore - """A version of @property which caches the value. On access, it calls the - underlying function and sets the value in `__dict__` so future accesses - will not re-call the property. - """ - - def __init__(self, f: Callable[[Any], Any]) -> None: - self._fname = f.__name__ - self._f = f - - def __get__(self, obj: Any, owner: Type[Any]) -> Any: - assert obj is not None, f"call {self._fname} on an instance" - ret = obj.__dict__[self._fname] = self._f(obj) - return ret - - -class LinuxDistribution: - """ - Provides information about a OS distribution. - - This package creates a private module-global instance of this class with - default initialization arguments, that is used by the - `consolidated accessor functions`_ and `single source accessor functions`_. - By using default initialization arguments, that module-global instance - returns data about the current OS distribution (i.e. the distro this - package runs on). - - Normally, it is not necessary to create additional instances of this class. - However, in situations where control is needed over the exact data sources - that are used, instances of this class can be created with a specific - distro release file, or a specific os-release file, or without invoking the - lsb_release command. - """ - - def __init__( - self, - include_lsb: Optional[bool] = None, - os_release_file: str = "", - distro_release_file: str = "", - include_uname: Optional[bool] = None, - root_dir: Optional[str] = None, - include_oslevel: Optional[bool] = None, - ) -> None: - """ - The initialization method of this class gathers information from the - available data sources, and stores that in private instance attributes. - Subsequent access to the information items uses these private instance - attributes, so that the data sources are read only once. - - Parameters: - - * ``include_lsb`` (bool): Controls whether the - `lsb_release command output`_ is included as a data source. - - If the lsb_release command is not available in the program execution - path, the data source for the lsb_release command will be empty. - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is to be used as a data source. - - An empty string (the default) will cause the default path name to - be used (see `os-release file`_ for details). - - If the specified or defaulted os-release file does not exist, the - data source for the os-release file will be empty. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is to be used as a data source. - - An empty string (the default) will cause a default search algorithm - to be used (see `distro release file`_ for details). - - If the specified distro release file does not exist, or if no default - distro release file can be found, the data source for the distro - release file will be empty. - - * ``include_uname`` (bool): Controls whether uname command output is - included as a data source. If the uname command is not available in - the program execution path the data source for the uname command will - be empty. - - * ``root_dir`` (string): The absolute path to the root directory to use - to find distro-related information files. Note that ``include_*`` - parameters must not be enabled in combination with ``root_dir``. - - * ``include_oslevel`` (bool): Controls whether (AIX) oslevel command - output is included as a data source. If the oslevel command is not - available in the program execution path the data source will be - empty. - - Public instance attributes: - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. - This controls whether the lsb information will be loaded. - - * ``include_uname`` (bool): The result of the ``include_uname`` - parameter. This controls whether the uname information will - be loaded. - - * ``include_oslevel`` (bool): The result of the ``include_oslevel`` - parameter. This controls whether (AIX) oslevel information will be - loaded. - - * ``root_dir`` (string): The result of the ``root_dir`` parameter. - The absolute path to the root directory to use to find distro-related - information files. - - Raises: - - * :py:exc:`ValueError`: Initialization parameters combination is not - supported. - - * :py:exc:`OSError`: Some I/O issue with an os-release file or distro - release file. - - * :py:exc:`UnicodeError`: A data source has unexpected characters or - uses an unexpected encoding. - """ - self.root_dir = root_dir - self.etc_dir = os.path.join(root_dir, "etc") if root_dir else _UNIXCONFDIR - self.usr_lib_dir = ( - os.path.join(root_dir, "usr/lib") if root_dir else _UNIXUSRLIBDIR - ) - - if os_release_file: - self.os_release_file = os_release_file - else: - etc_dir_os_release_file = os.path.join(self.etc_dir, _OS_RELEASE_BASENAME) - usr_lib_os_release_file = os.path.join( - self.usr_lib_dir, _OS_RELEASE_BASENAME - ) - - # NOTE: The idea is to respect order **and** have it set - # at all times for API backwards compatibility. - if os.path.isfile(etc_dir_os_release_file) or not os.path.isfile( - usr_lib_os_release_file - ): - self.os_release_file = etc_dir_os_release_file - else: - self.os_release_file = usr_lib_os_release_file - - self.distro_release_file = distro_release_file or "" # updated later - - is_root_dir_defined = root_dir is not None - if is_root_dir_defined and (include_lsb or include_uname or include_oslevel): - raise ValueError( - "Including subprocess data sources from specific root_dir is disallowed" - " to prevent false information" - ) - self.include_lsb = ( - include_lsb if include_lsb is not None else not is_root_dir_defined - ) - self.include_uname = ( - include_uname if include_uname is not None else not is_root_dir_defined - ) - self.include_oslevel = ( - include_oslevel if include_oslevel is not None else not is_root_dir_defined - ) - - def __repr__(self) -> str: - """Return repr of all info""" - return ( - "LinuxDistribution(" - "os_release_file={self.os_release_file!r}, " - "distro_release_file={self.distro_release_file!r}, " - "include_lsb={self.include_lsb!r}, " - "include_uname={self.include_uname!r}, " - "include_oslevel={self.include_oslevel!r}, " - "root_dir={self.root_dir!r}, " - "_os_release_info={self._os_release_info!r}, " - "_lsb_release_info={self._lsb_release_info!r}, " - "_distro_release_info={self._distro_release_info!r}, " - "_uname_info={self._uname_info!r}, " - "_oslevel_info={self._oslevel_info!r})".format(self=self) - ) - - def linux_distribution( - self, full_distribution_name: bool = True - ) -> Tuple[str, str, str]: - """ - Return information about the OS distribution that is compatible - with Python's :func:`platform.linux_distribution`, supporting a subset - of its parameters. - - For details, see :func:`distro.linux_distribution`. - """ - return ( - self.name() if full_distribution_name else self.id(), - self.version(), - self._os_release_info.get("release_codename") or self.codename(), - ) - - def id(self) -> str: - """Return the distro ID of the OS distribution, as a string. - - For details, see :func:`distro.id`. - """ - - def normalize(distro_id: str, table: Dict[str, str]) -> str: - distro_id = distro_id.lower().replace(" ", "_") - return table.get(distro_id, distro_id) - - distro_id = self.os_release_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_OS_ID) - - distro_id = self.lsb_release_attr("distributor_id") - if distro_id: - return normalize(distro_id, NORMALIZED_LSB_ID) - - distro_id = self.distro_release_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - distro_id = self.uname_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - return "" - - def name(self, pretty: bool = False) -> str: - """ - Return the name of the OS distribution, as a string. - - For details, see :func:`distro.name`. - """ - name = ( - self.os_release_attr("name") - or self.lsb_release_attr("distributor_id") - or self.distro_release_attr("name") - or self.uname_attr("name") - ) - if pretty: - name = self.os_release_attr("pretty_name") or self.lsb_release_attr( - "description" - ) - if not name: - name = self.distro_release_attr("name") or self.uname_attr("name") - version = self.version(pretty=True) - if version: - name = f"{name} {version}" - return name or "" - - def version(self, pretty: bool = False, best: bool = False) -> str: - """ - Return the version of the OS distribution, as a string. - - For details, see :func:`distro.version`. - """ - versions = [ - self.os_release_attr("version_id"), - self.lsb_release_attr("release"), - self.distro_release_attr("version_id"), - self._parse_distro_release_content(self.os_release_attr("pretty_name")).get( - "version_id", "" - ), - self._parse_distro_release_content( - self.lsb_release_attr("description") - ).get("version_id", ""), - self.uname_attr("release"), - ] - if self.uname_attr("id").startswith("aix"): - # On AIX platforms, prefer oslevel command output. - versions.insert(0, self.oslevel_info()) - elif self.id() == "debian" or "debian" in self.like().split(): - # On Debian-like, add debian_version file content to candidates list. - versions.append(self._debian_version) - version = "" - if best: - # This algorithm uses the last version in priority order that has - # the best precision. If the versions are not in conflict, that - # does not matter; otherwise, using the last one instead of the - # first one might be considered a surprise. - for v in versions: - if v.count(".") > version.count(".") or version == "": - version = v - else: - for v in versions: - if v != "": - version = v - break - if pretty and version and self.codename(): - version = f"{version} ({self.codename()})" - return version - - def version_parts(self, best: bool = False) -> Tuple[str, str, str]: - """ - Return the version of the OS distribution, as a tuple of version - numbers. - - For details, see :func:`distro.version_parts`. - """ - version_str = self.version(best=best) - if version_str: - version_regex = re.compile(r"(\d+)\.?(\d+)?\.?(\d+)?") - matches = version_regex.match(version_str) - if matches: - major, minor, build_number = matches.groups() - return major, minor or "", build_number or "" - return "", "", "" - - def major_version(self, best: bool = False) -> str: - """ - Return the major version number of the current distribution. - - For details, see :func:`distro.major_version`. - """ - return self.version_parts(best)[0] - - def minor_version(self, best: bool = False) -> str: - """ - Return the minor version number of the current distribution. - - For details, see :func:`distro.minor_version`. - """ - return self.version_parts(best)[1] - - def build_number(self, best: bool = False) -> str: - """ - Return the build number of the current distribution. - - For details, see :func:`distro.build_number`. - """ - return self.version_parts(best)[2] - - def like(self) -> str: - """ - Return the IDs of distributions that are like the OS distribution. - - For details, see :func:`distro.like`. - """ - return self.os_release_attr("id_like") or "" - - def codename(self) -> str: - """ - Return the codename of the OS distribution. - - For details, see :func:`distro.codename`. - """ - try: - # Handle os_release specially since distros might purposefully set - # this to empty string to have no codename - return self._os_release_info["codename"] - except KeyError: - return ( - self.lsb_release_attr("codename") - or self.distro_release_attr("codename") - or "" - ) - - def info(self, pretty: bool = False, best: bool = False) -> InfoDict: - """ - Return certain machine-readable information about the OS - distribution. - - For details, see :func:`distro.info`. - """ - return InfoDict( - id=self.id(), - version=self.version(pretty, best), - version_parts=VersionDict( - major=self.major_version(best), - minor=self.minor_version(best), - build_number=self.build_number(best), - ), - like=self.like(), - codename=self.codename(), - ) - - def os_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the os-release file data source of the OS distribution. - - For details, see :func:`distro.os_release_info`. - """ - return self._os_release_info - - def lsb_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the lsb_release command data source of the OS - distribution. - - For details, see :func:`distro.lsb_release_info`. - """ - return self._lsb_release_info - - def distro_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the distro release file data source of the OS - distribution. - - For details, see :func:`distro.distro_release_info`. - """ - return self._distro_release_info - - def uname_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the uname command data source of the OS distribution. - - For details, see :func:`distro.uname_info`. - """ - return self._uname_info - - def oslevel_info(self) -> str: - """ - Return AIX' oslevel command output. - """ - return self._oslevel_info - - def os_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the os-release file data - source of the OS distribution. - - For details, see :func:`distro.os_release_attr`. - """ - return self._os_release_info.get(attribute, "") - - def lsb_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the lsb_release command - output data source of the OS distribution. - - For details, see :func:`distro.lsb_release_attr`. - """ - return self._lsb_release_info.get(attribute, "") - - def distro_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the OS distribution. - - For details, see :func:`distro.distro_release_attr`. - """ - return self._distro_release_info.get(attribute, "") - - def uname_attr(self, attribute: str) -> str: - """ - Return a single named information item from the uname command - output data source of the OS distribution. - - For details, see :func:`distro.uname_attr`. - """ - return self._uname_info.get(attribute, "") - - @cached_property - def _os_release_info(self) -> Dict[str, str]: - """ - Get the information items from the specified os-release file. - - Returns: - A dictionary containing all information items. - """ - if os.path.isfile(self.os_release_file): - with open(self.os_release_file, encoding="utf-8") as release_file: - return self._parse_os_release_content(release_file) - return {} - - @staticmethod - def _parse_os_release_content(lines: TextIO) -> Dict[str, str]: - """ - Parse the lines of an os-release file. - - Parameters: - - * lines: Iterable through the lines in the os-release file. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - lexer = shlex.shlex(lines, posix=True) - lexer.whitespace_split = True - - tokens = list(lexer) - for token in tokens: - # At this point, all shell-like parsing has been done (i.e. - # comments processed, quotes and backslash escape sequences - # processed, multi-line values assembled, trailing newlines - # stripped, etc.), so the tokens are now either: - # * variable assignments: var=value - # * commands or their arguments (not allowed in os-release) - # Ignore any tokens that are not variable assignments - if "=" in token: - k, v = token.split("=", 1) - props[k.lower()] = v - - if "version" in props: - # extract release codename (if any) from version attribute - match = re.search(r"\((\D+)\)|,\s*(\D+)", props["version"]) - if match: - release_codename = match.group(1) or match.group(2) - props["codename"] = props["release_codename"] = release_codename - - if "version_codename" in props: - # os-release added a version_codename field. Use that in - # preference to anything else Note that some distros purposefully - # do not have code names. They should be setting - # version_codename="" - props["codename"] = props["version_codename"] - elif "ubuntu_codename" in props: - # Same as above but a non-standard field name used on older Ubuntus - props["codename"] = props["ubuntu_codename"] - - return props - - @cached_property - def _lsb_release_info(self) -> Dict[str, str]: - """ - Get the information items from the lsb_release command output. - - Returns: - A dictionary containing all information items. - """ - if not self.include_lsb: - return {} - try: - cmd = ("lsb_release", "-a") - stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) - # Command not found or lsb_release returned error - except (OSError, subprocess.CalledProcessError): - return {} - content = self._to_str(stdout).splitlines() - return self._parse_lsb_release_content(content) - - @staticmethod - def _parse_lsb_release_content(lines: Iterable[str]) -> Dict[str, str]: - """ - Parse the output of the lsb_release command. - - Parameters: - - * lines: Iterable through the lines of the lsb_release output. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - for line in lines: - kv = line.strip("\n").split(":", 1) - if len(kv) != 2: - # Ignore lines without colon. - continue - k, v = kv - props.update({k.replace(" ", "_").lower(): v.strip()}) - return props - - @cached_property - def _uname_info(self) -> Dict[str, str]: - if not self.include_uname: - return {} - try: - cmd = ("uname", "-rs") - stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) - except OSError: - return {} - content = self._to_str(stdout).splitlines() - return self._parse_uname_content(content) - - @cached_property - def _oslevel_info(self) -> str: - if not self.include_oslevel: - return "" - try: - stdout = subprocess.check_output("oslevel", stderr=subprocess.DEVNULL) - except (OSError, subprocess.CalledProcessError): - return "" - return self._to_str(stdout).strip() - - @cached_property - def _debian_version(self) -> str: - try: - with open( - os.path.join(self.etc_dir, "debian_version"), encoding="ascii" - ) as fp: - return fp.readline().rstrip() - except FileNotFoundError: - return "" - - @staticmethod - def _parse_uname_content(lines: Sequence[str]) -> Dict[str, str]: - if not lines: - return {} - props = {} - match = re.search(r"^([^\s]+)\s+([\d\.]+)", lines[0].strip()) - if match: - name, version = match.groups() - - # This is to prevent the Linux kernel version from - # appearing as the 'best' version on otherwise - # identifiable distributions. - if name == "Linux": - return {} - props["id"] = name.lower() - props["name"] = name - props["release"] = version - return props - - @staticmethod - def _to_str(bytestring: bytes) -> str: - encoding = sys.getfilesystemencoding() - return bytestring.decode(encoding) - - @cached_property - def _distro_release_info(self) -> Dict[str, str]: - """ - Get the information items from the specified distro release file. - - Returns: - A dictionary containing all information items. - """ - if self.distro_release_file: - # If it was specified, we use it and parse what we can, even if - # its file name or content does not match the expected pattern. - distro_info = self._parse_distro_release_file(self.distro_release_file) - basename = os.path.basename(self.distro_release_file) - # The file name pattern for user-specified distro release files - # is somewhat more tolerant (compared to when searching for the - # file), because we want to use what was specified as best as - # possible. - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - else: - try: - basenames = [ - basename - for basename in os.listdir(self.etc_dir) - if basename not in _DISTRO_RELEASE_IGNORE_BASENAMES - and os.path.isfile(os.path.join(self.etc_dir, basename)) - ] - # We sort for repeatability in cases where there are multiple - # distro specific files; e.g. CentOS, Oracle, Enterprise all - # containing `redhat-release` on top of their own. - basenames.sort() - except OSError: - # This may occur when /etc is not readable but we can't be - # sure about the *-release files. Check common entries of - # /etc for information. If they turn out to not be there the - # error is handled in `_parse_distro_release_file()`. - basenames = _DISTRO_RELEASE_BASENAMES - for basename in basenames: - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match is None: - continue - filepath = os.path.join(self.etc_dir, basename) - distro_info = self._parse_distro_release_file(filepath) - # The name is always present if the pattern matches. - if "name" not in distro_info: - continue - self.distro_release_file = filepath - break - else: # the loop didn't "break": no candidate. - return {} - - if match is not None: - distro_info["id"] = match.group(1) - - # CloudLinux < 7: manually enrich info with proper id. - if "cloudlinux" in distro_info.get("name", "").lower(): - distro_info["id"] = "cloudlinux" - - return distro_info - - def _parse_distro_release_file(self, filepath: str) -> Dict[str, str]: - """ - Parse a distro release file. - - Parameters: - - * filepath: Path name of the distro release file. - - Returns: - A dictionary containing all information items. - """ - try: - with open(filepath, encoding="utf-8") as fp: - # Only parse the first line. For instance, on SLES there - # are multiple lines. We don't want them... - return self._parse_distro_release_content(fp.readline()) - except OSError: - # Ignore not being able to read a specific, seemingly version - # related file. - # See https://github.com/python-distro/distro/issues/162 - return {} - - @staticmethod - def _parse_distro_release_content(line: str) -> Dict[str, str]: - """ - Parse a line from a distro release file. - - Parameters: - * line: Line from the distro release file. Must be a unicode string - or a UTF-8 encoded byte string. - - Returns: - A dictionary containing all information items. - """ - matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match(line.strip()[::-1]) - distro_info = {} - if matches: - # regexp ensures non-None - distro_info["name"] = matches.group(3)[::-1] - if matches.group(2): - distro_info["version_id"] = matches.group(2)[::-1] - if matches.group(1): - distro_info["codename"] = matches.group(1)[::-1] - elif line: - distro_info["name"] = line.strip() - return distro_info - - -_distro = LinuxDistribution() - - -def main() -> None: - logger = logging.getLogger(__name__) - logger.setLevel(logging.DEBUG) - logger.addHandler(logging.StreamHandler(sys.stdout)) - - parser = argparse.ArgumentParser(description="OS distro info tool") - parser.add_argument( - "--json", "-j", help="Output in machine readable format", action="store_true" - ) - - parser.add_argument( - "--root-dir", - "-r", - type=str, - dest="root_dir", - help="Path to the root filesystem directory (defaults to /)", - ) - - args = parser.parse_args() - - if args.root_dir: - dist = LinuxDistribution( - include_lsb=False, - include_uname=False, - include_oslevel=False, - root_dir=args.root_dir, - ) - else: - dist = _distro - - if args.json: - logger.info(json.dumps(dist.info(), indent=4, sort_keys=True)) - else: - logger.info("Name: %s", dist.name(pretty=True)) - distribution_version = dist.version(pretty=True) - logger.info("Version: %s", distribution_version) - distribution_codename = dist.codename() - logger.info("Codename: %s", distribution_codename) - - -if __name__ == "__main__": - main() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/distro/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/distro/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py deleted file mode 100644 index cfdc030..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py +++ /dev/null @@ -1,45 +0,0 @@ -from .core import ( - IDNABidiError, - IDNAError, - InvalidCodepoint, - InvalidCodepointContext, - alabel, - check_bidi, - check_hyphen_ok, - check_initial_combiner, - check_label, - check_nfc, - decode, - encode, - ulabel, - uts46_remap, - valid_contextj, - valid_contexto, - valid_label_length, - valid_string_length, -) -from .intranges import intranges_contain -from .package_data import __version__ - -__all__ = [ - "__version__", - "IDNABidiError", - "IDNAError", - "InvalidCodepoint", - "InvalidCodepointContext", - "alabel", - "check_bidi", - "check_hyphen_ok", - "check_initial_combiner", - "check_label", - "check_nfc", - "decode", - "encode", - "intranges_contain", - "ulabel", - "uts46_remap", - "valid_contextj", - "valid_contexto", - "valid_label_length", - "valid_string_length", -] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index eafd5be..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc deleted file mode 100644 index 1d3b582..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc deleted file mode 100644 index a88fdb6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc deleted file mode 100644 index 849ba29..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc deleted file mode 100644 index ae487e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc deleted file mode 100644 index e3094a1..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc deleted file mode 100644 index a566641..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc deleted file mode 100644 index 1a38968..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py deleted file mode 100644 index 913abfd..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py +++ /dev/null @@ -1,122 +0,0 @@ -import codecs -import re -from typing import Any, Optional, Tuple - -from .core import IDNAError, alabel, decode, encode, ulabel - -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class Codec(codecs.Codec): - def encode(self, data: str, errors: str = "strict") -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - return encode(data), len(data) - - def decode(self, data: bytes, errors: str = "strict") -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return "", 0 - - return decode(data), len(data) - - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - labels = _unicode_dots_re.split(data) - trailing_dot = b"" - if labels: - if not labels[-1]: - trailing_dot = b"." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = b"." - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result_bytes = b".".join(result) + trailing_dot - size += len(trailing_dot) - return result_bytes, size - - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return ("", 0) - - if not isinstance(data, str): - data = str(data, "ascii") - - labels = _unicode_dots_re.split(data) - trailing_dot = "" - if labels: - if not labels[-1]: - trailing_dot = "." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = "." - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result_str = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result_str, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - - -class StreamReader(Codec, codecs.StreamReader): - pass - - -def search_function(name: str) -> Optional[codecs.CodecInfo]: - if name != "idna2008": - return None - return codecs.CodecInfo( - name=name, - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) - - -codecs.register(search_function) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py deleted file mode 100644 index 1df9f2a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any, Union - -from .core import decode, encode - - -def ToASCII(label: str) -> bytes: - return encode(label) - - -def ToUnicode(label: Union[bytes, bytearray]) -> str: - return decode(label) - - -def nameprep(s: Any) -> None: - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/core.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/core.py deleted file mode 100644 index 9115f12..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/core.py +++ /dev/null @@ -1,437 +0,0 @@ -import bisect -import re -import unicodedata -from typing import Optional, Union - -from . import idnadata -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b"xn--" -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class IDNAError(UnicodeError): - """Base exception for all IDNA-encoding related problems""" - - pass - - -class IDNABidiError(IDNAError): - """Exception when bidirectional requirements are not satisfied""" - - pass - - -class InvalidCodepoint(IDNAError): - """Exception when a disallowed or unallocated codepoint is used""" - - pass - - -class InvalidCodepointContext(IDNAError): - """Exception when the codepoint is not valid in the context it is used""" - - pass - - -def _combining_class(cp: int) -> int: - v = unicodedata.combining(chr(cp)) - if v == 0: - if not unicodedata.name(chr(cp)): - raise ValueError("Unknown character in unicodedata") - return v - - -def _is_script(cp: str, script: str) -> bool: - return intranges_contain(ord(cp), idnadata.scripts[script]) - - -def _punycode(s: str) -> bytes: - return s.encode("punycode") - - -def _unot(s: int) -> str: - return "U+{:04X}".format(s) - - -def valid_label_length(label: Union[bytes, str]) -> bool: - if len(label) > 63: - return False - return True - - -def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label: str, check_ltr: bool = False) -> bool: - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == "": - # String likely comes from a newer version of Unicode - raise IDNABidiError("Unknown directionality in label {} at position {}".format(repr(label), idx)) - if direction in ["R", "AL", "AN"]: - bidi_label = True - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ["R", "AL"]: - rtl = True - elif direction == "L": - rtl = False - else: - raise IDNABidiError("First codepoint in label {} must be directionality L, R or AL".format(repr(label))) - - valid_ending = False - number_type: Optional[str] = None - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if direction not in [ - "R", - "AL", - "AN", - "EN", - "ES", - "CS", - "ET", - "ON", - "BN", - "NSM", - ]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a right-to-left label".format(idx)) - # Bidi rule 3 - if direction in ["R", "AL", "EN", "AN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - # Bidi rule 4 - if direction in ["AN", "EN"]: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError("Can not mix numeral types in a right-to-left label") - else: - # Bidi rule 5 - if direction not in ["L", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a left-to-right label".format(idx)) - # Bidi rule 6 - if direction in ["L", "EN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - - if not valid_ending: - raise IDNABidiError("Label ends with illegal codepoint directionality") - - return True - - -def check_initial_combiner(label: str) -> bool: - if unicodedata.category(label[0])[0] == "M": - raise IDNAError("Label begins with an illegal combining character") - return True - - -def check_hyphen_ok(label: str) -> bool: - if label[2:4] == "--": - raise IDNAError("Label has disallowed hyphens in 3rd and 4th position") - if label[0] == "-" or label[-1] == "-": - raise IDNAError("Label must not start or end with a hyphen") - return True - - -def check_nfc(label: str) -> None: - if unicodedata.normalize("NFC", label) != label: - raise IDNAError("Label must be in Normalization Form C") - - -def valid_contextj(label: str, pos: int) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x200C: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos - 1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("L"), ord("D")]: - ok = True - break - else: - break - - if not ok: - return False - - ok = False - for i in range(pos + 1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("R"), ord("D")]: - ok = True - break - else: - break - return ok - - if cp_value == 0x200D: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - return False - - -def valid_contexto(label: str, pos: int, exception: bool = False) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x00B7: - if 0 < pos < len(label) - 1: - if ord(label[pos - 1]) == 0x006C and ord(label[pos + 1]) == 0x006C: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label) - 1 and len(label) > 1: - return _is_script(label[pos + 1], "Greek") - return False - - elif cp_value == 0x05F3 or cp_value == 0x05F4: - if pos > 0: - return _is_script(label[pos - 1], "Hebrew") - return False - - elif cp_value == 0x30FB: - for cp in label: - if cp == "\u30fb": - continue - if _is_script(cp, "Hiragana") or _is_script(cp, "Katakana") or _is_script(cp, "Han"): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6F0 <= ord(cp) <= 0x06F9: - return False - return True - - elif 0x6F0 <= cp_value <= 0x6F9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - return False - - -def check_label(label: Union[str, bytes, bytearray]) -> None: - if isinstance(label, (bytes, bytearray)): - label = label.decode("utf-8") - if len(label) == 0: - raise IDNAError("Empty Label") - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for pos, cp in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes["PVALID"]): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTJ"]): - try: - if not valid_contextj(label, pos): - raise InvalidCodepointContext( - "Joiner {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - except ValueError: - raise IDNAError( - "Unknown codepoint adjacent to joiner {} at position {} in {}".format( - _unot(cp_value), pos + 1, repr(label) - ) - ) - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTO"]): - if not valid_contexto(label, pos): - raise InvalidCodepointContext( - "Codepoint {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - else: - raise InvalidCodepoint( - "Codepoint {} at position {} of {} not allowed".format(_unot(cp_value), pos + 1, repr(label)) - ) - - check_bidi(label) - - -def alabel(label: str) -> bytes: - try: - label_bytes = label.encode("ascii") - ulabel(label_bytes) - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - return label_bytes - except UnicodeEncodeError: - pass - - check_label(label) - label_bytes = _alabel_prefix + _punycode(label) - - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - - return label_bytes - - -def ulabel(label: Union[str, bytes, bytearray]) -> str: - if not isinstance(label, (bytes, bytearray)): - try: - label_bytes = label.encode("ascii") - except UnicodeEncodeError: - check_label(label) - return label - else: - label_bytes = label - - label_bytes = label_bytes.lower() - if label_bytes.startswith(_alabel_prefix): - label_bytes = label_bytes[len(_alabel_prefix) :] - if not label_bytes: - raise IDNAError("Malformed A-label, no Punycode eligible content found") - if label_bytes.decode("ascii")[-1] == "-": - raise IDNAError("A-label must not end with a hyphen") - else: - check_label(label_bytes) - return label_bytes.decode("ascii") - - try: - label = label_bytes.decode("punycode") - except UnicodeError: - raise IDNAError("Invalid A-label") - check_label(label) - return label - - -def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - - output = "" - - for pos, char in enumerate(domain): - code_point = ord(char) - try: - uts46row = uts46data[code_point if code_point < 256 else bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement: Optional[str] = None - if len(uts46row) == 3: - replacement = uts46row[2] - if ( - status == "V" - or (status == "D" and not transitional) - or (status == "3" and not std3_rules and replacement is None) - ): - output += char - elif replacement is not None and ( - status == "M" or (status == "3" and not std3_rules) or (status == "D" and transitional) - ): - output += replacement - elif status != "I": - raise IndexError() - except IndexError: - raise InvalidCodepoint( - "Codepoint {} not allowed at position {} in {}".format(_unot(code_point), pos + 1, repr(domain)) - ) - - return unicodedata.normalize("NFC", output) - - -def encode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, - transitional: bool = False, -) -> bytes: - if not isinstance(s, str): - try: - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("should pass a unicode string to the function rather than a byte string.") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split(".") - else: - labels = _unicode_dots_re.split(s) - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if labels[-1] == "": - del labels[-1] - trailing_dot = True - for label in labels: - s = alabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append(b"") - s = b".".join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError("Domain too long") - return s - - -def decode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, -) -> str: - try: - if not isinstance(s, str): - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("Invalid ASCII in A-label") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(".") - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - s = ulabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append("") - return ".".join(result) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py deleted file mode 100644 index 4be6004..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py +++ /dev/null @@ -1,4243 +0,0 @@ -# This file is automatically generated by tools/idna-data - -__version__ = "15.1.0" -scripts = { - "Greek": ( - 0x37000000374, - 0x37500000378, - 0x37A0000037E, - 0x37F00000380, - 0x38400000385, - 0x38600000387, - 0x3880000038B, - 0x38C0000038D, - 0x38E000003A2, - 0x3A3000003E2, - 0x3F000000400, - 0x1D2600001D2B, - 0x1D5D00001D62, - 0x1D6600001D6B, - 0x1DBF00001DC0, - 0x1F0000001F16, - 0x1F1800001F1E, - 0x1F2000001F46, - 0x1F4800001F4E, - 0x1F5000001F58, - 0x1F5900001F5A, - 0x1F5B00001F5C, - 0x1F5D00001F5E, - 0x1F5F00001F7E, - 0x1F8000001FB5, - 0x1FB600001FC5, - 0x1FC600001FD4, - 0x1FD600001FDC, - 0x1FDD00001FF0, - 0x1FF200001FF5, - 0x1FF600001FFF, - 0x212600002127, - 0xAB650000AB66, - 0x101400001018F, - 0x101A0000101A1, - 0x1D2000001D246, - ), - "Han": ( - 0x2E8000002E9A, - 0x2E9B00002EF4, - 0x2F0000002FD6, - 0x300500003006, - 0x300700003008, - 0x30210000302A, - 0x30380000303C, - 0x340000004DC0, - 0x4E000000A000, - 0xF9000000FA6E, - 0xFA700000FADA, - 0x16FE200016FE4, - 0x16FF000016FF2, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x2F8000002FA1E, - 0x300000003134B, - 0x31350000323B0, - ), - "Hebrew": ( - 0x591000005C8, - 0x5D0000005EB, - 0x5EF000005F5, - 0xFB1D0000FB37, - 0xFB380000FB3D, - 0xFB3E0000FB3F, - 0xFB400000FB42, - 0xFB430000FB45, - 0xFB460000FB50, - ), - "Hiragana": ( - 0x304100003097, - 0x309D000030A0, - 0x1B0010001B120, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1F2000001F201, - ), - "Katakana": ( - 0x30A1000030FB, - 0x30FD00003100, - 0x31F000003200, - 0x32D0000032FF, - 0x330000003358, - 0xFF660000FF70, - 0xFF710000FF9E, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B001, - 0x1B1200001B123, - 0x1B1550001B156, - 0x1B1640001B168, - ), -} -joining_types = { - 0xAD: 84, - 0x300: 84, - 0x301: 84, - 0x302: 84, - 0x303: 84, - 0x304: 84, - 0x305: 84, - 0x306: 84, - 0x307: 84, - 0x308: 84, - 0x309: 84, - 0x30A: 84, - 0x30B: 84, - 0x30C: 84, - 0x30D: 84, - 0x30E: 84, - 0x30F: 84, - 0x310: 84, - 0x311: 84, - 0x312: 84, - 0x313: 84, - 0x314: 84, - 0x315: 84, - 0x316: 84, - 0x317: 84, - 0x318: 84, - 0x319: 84, - 0x31A: 84, - 0x31B: 84, - 0x31C: 84, - 0x31D: 84, - 0x31E: 84, - 0x31F: 84, - 0x320: 84, - 0x321: 84, - 0x322: 84, - 0x323: 84, - 0x324: 84, - 0x325: 84, - 0x326: 84, - 0x327: 84, - 0x328: 84, - 0x329: 84, - 0x32A: 84, - 0x32B: 84, - 0x32C: 84, - 0x32D: 84, - 0x32E: 84, - 0x32F: 84, - 0x330: 84, - 0x331: 84, - 0x332: 84, - 0x333: 84, - 0x334: 84, - 0x335: 84, - 0x336: 84, - 0x337: 84, - 0x338: 84, - 0x339: 84, - 0x33A: 84, - 0x33B: 84, - 0x33C: 84, - 0x33D: 84, - 0x33E: 84, - 0x33F: 84, - 0x340: 84, - 0x341: 84, - 0x342: 84, - 0x343: 84, - 0x344: 84, - 0x345: 84, - 0x346: 84, - 0x347: 84, - 0x348: 84, - 0x349: 84, - 0x34A: 84, - 0x34B: 84, - 0x34C: 84, - 0x34D: 84, - 0x34E: 84, - 0x34F: 84, - 0x350: 84, - 0x351: 84, - 0x352: 84, - 0x353: 84, - 0x354: 84, - 0x355: 84, - 0x356: 84, - 0x357: 84, - 0x358: 84, - 0x359: 84, - 0x35A: 84, - 0x35B: 84, - 0x35C: 84, - 0x35D: 84, - 0x35E: 84, - 0x35F: 84, - 0x360: 84, - 0x361: 84, - 0x362: 84, - 0x363: 84, - 0x364: 84, - 0x365: 84, - 0x366: 84, - 0x367: 84, - 0x368: 84, - 0x369: 84, - 0x36A: 84, - 0x36B: 84, - 0x36C: 84, - 0x36D: 84, - 0x36E: 84, - 0x36F: 84, - 0x483: 84, - 0x484: 84, - 0x485: 84, - 0x486: 84, - 0x487: 84, - 0x488: 84, - 0x489: 84, - 0x591: 84, - 0x592: 84, - 0x593: 84, - 0x594: 84, - 0x595: 84, - 0x596: 84, - 0x597: 84, - 0x598: 84, - 0x599: 84, - 0x59A: 84, - 0x59B: 84, - 0x59C: 84, - 0x59D: 84, - 0x59E: 84, - 0x59F: 84, - 0x5A0: 84, - 0x5A1: 84, - 0x5A2: 84, - 0x5A3: 84, - 0x5A4: 84, - 0x5A5: 84, - 0x5A6: 84, - 0x5A7: 84, - 0x5A8: 84, - 0x5A9: 84, - 0x5AA: 84, - 0x5AB: 84, - 0x5AC: 84, - 0x5AD: 84, - 0x5AE: 84, - 0x5AF: 84, - 0x5B0: 84, - 0x5B1: 84, - 0x5B2: 84, - 0x5B3: 84, - 0x5B4: 84, - 0x5B5: 84, - 0x5B6: 84, - 0x5B7: 84, - 0x5B8: 84, - 0x5B9: 84, - 0x5BA: 84, - 0x5BB: 84, - 0x5BC: 84, - 0x5BD: 84, - 0x5BF: 84, - 0x5C1: 84, - 0x5C2: 84, - 0x5C4: 84, - 0x5C5: 84, - 0x5C7: 84, - 0x610: 84, - 0x611: 84, - 0x612: 84, - 0x613: 84, - 0x614: 84, - 0x615: 84, - 0x616: 84, - 0x617: 84, - 0x618: 84, - 0x619: 84, - 0x61A: 84, - 0x61C: 84, - 0x620: 68, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62A: 68, - 0x62B: 68, - 0x62C: 68, - 0x62D: 68, - 0x62E: 68, - 0x62F: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63A: 68, - 0x63B: 68, - 0x63C: 68, - 0x63D: 68, - 0x63E: 68, - 0x63F: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64A: 68, - 0x64B: 84, - 0x64C: 84, - 0x64D: 84, - 0x64E: 84, - 0x64F: 84, - 0x650: 84, - 0x651: 84, - 0x652: 84, - 0x653: 84, - 0x654: 84, - 0x655: 84, - 0x656: 84, - 0x657: 84, - 0x658: 84, - 0x659: 84, - 0x65A: 84, - 0x65B: 84, - 0x65C: 84, - 0x65D: 84, - 0x65E: 84, - 0x65F: 84, - 0x66E: 68, - 0x66F: 68, - 0x670: 84, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67A: 68, - 0x67B: 68, - 0x67C: 68, - 0x67D: 68, - 0x67E: 68, - 0x67F: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68A: 82, - 0x68B: 82, - 0x68C: 82, - 0x68D: 82, - 0x68E: 82, - 0x68F: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69A: 68, - 0x69B: 68, - 0x69C: 68, - 0x69D: 68, - 0x69E: 68, - 0x69F: 68, - 0x6A0: 68, - 0x6A1: 68, - 0x6A2: 68, - 0x6A3: 68, - 0x6A4: 68, - 0x6A5: 68, - 0x6A6: 68, - 0x6A7: 68, - 0x6A8: 68, - 0x6A9: 68, - 0x6AA: 68, - 0x6AB: 68, - 0x6AC: 68, - 0x6AD: 68, - 0x6AE: 68, - 0x6AF: 68, - 0x6B0: 68, - 0x6B1: 68, - 0x6B2: 68, - 0x6B3: 68, - 0x6B4: 68, - 0x6B5: 68, - 0x6B6: 68, - 0x6B7: 68, - 0x6B8: 68, - 0x6B9: 68, - 0x6BA: 68, - 0x6BB: 68, - 0x6BC: 68, - 0x6BD: 68, - 0x6BE: 68, - 0x6BF: 68, - 0x6C0: 82, - 0x6C1: 68, - 0x6C2: 68, - 0x6C3: 82, - 0x6C4: 82, - 0x6C5: 82, - 0x6C6: 82, - 0x6C7: 82, - 0x6C8: 82, - 0x6C9: 82, - 0x6CA: 82, - 0x6CB: 82, - 0x6CC: 68, - 0x6CD: 82, - 0x6CE: 68, - 0x6CF: 82, - 0x6D0: 68, - 0x6D1: 68, - 0x6D2: 82, - 0x6D3: 82, - 0x6D5: 82, - 0x6D6: 84, - 0x6D7: 84, - 0x6D8: 84, - 0x6D9: 84, - 0x6DA: 84, - 0x6DB: 84, - 0x6DC: 84, - 0x6DF: 84, - 0x6E0: 84, - 0x6E1: 84, - 0x6E2: 84, - 0x6E3: 84, - 0x6E4: 84, - 0x6E7: 84, - 0x6E8: 84, - 0x6EA: 84, - 0x6EB: 84, - 0x6EC: 84, - 0x6ED: 84, - 0x6EE: 82, - 0x6EF: 82, - 0x6FA: 68, - 0x6FB: 68, - 0x6FC: 68, - 0x6FF: 68, - 0x70F: 84, - 0x710: 82, - 0x711: 84, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71A: 68, - 0x71B: 68, - 0x71C: 68, - 0x71D: 68, - 0x71E: 82, - 0x71F: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72A: 82, - 0x72B: 68, - 0x72C: 82, - 0x72D: 68, - 0x72E: 68, - 0x72F: 82, - 0x730: 84, - 0x731: 84, - 0x732: 84, - 0x733: 84, - 0x734: 84, - 0x735: 84, - 0x736: 84, - 0x737: 84, - 0x738: 84, - 0x739: 84, - 0x73A: 84, - 0x73B: 84, - 0x73C: 84, - 0x73D: 84, - 0x73E: 84, - 0x73F: 84, - 0x740: 84, - 0x741: 84, - 0x742: 84, - 0x743: 84, - 0x744: 84, - 0x745: 84, - 0x746: 84, - 0x747: 84, - 0x748: 84, - 0x749: 84, - 0x74A: 84, - 0x74D: 82, - 0x74E: 68, - 0x74F: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75A: 82, - 0x75B: 82, - 0x75C: 68, - 0x75D: 68, - 0x75E: 68, - 0x75F: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76A: 68, - 0x76B: 82, - 0x76C: 82, - 0x76D: 68, - 0x76E: 68, - 0x76F: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77A: 68, - 0x77B: 68, - 0x77C: 68, - 0x77D: 68, - 0x77E: 68, - 0x77F: 68, - 0x7A6: 84, - 0x7A7: 84, - 0x7A8: 84, - 0x7A9: 84, - 0x7AA: 84, - 0x7AB: 84, - 0x7AC: 84, - 0x7AD: 84, - 0x7AE: 84, - 0x7AF: 84, - 0x7B0: 84, - 0x7CA: 68, - 0x7CB: 68, - 0x7CC: 68, - 0x7CD: 68, - 0x7CE: 68, - 0x7CF: 68, - 0x7D0: 68, - 0x7D1: 68, - 0x7D2: 68, - 0x7D3: 68, - 0x7D4: 68, - 0x7D5: 68, - 0x7D6: 68, - 0x7D7: 68, - 0x7D8: 68, - 0x7D9: 68, - 0x7DA: 68, - 0x7DB: 68, - 0x7DC: 68, - 0x7DD: 68, - 0x7DE: 68, - 0x7DF: 68, - 0x7E0: 68, - 0x7E1: 68, - 0x7E2: 68, - 0x7E3: 68, - 0x7E4: 68, - 0x7E5: 68, - 0x7E6: 68, - 0x7E7: 68, - 0x7E8: 68, - 0x7E9: 68, - 0x7EA: 68, - 0x7EB: 84, - 0x7EC: 84, - 0x7ED: 84, - 0x7EE: 84, - 0x7EF: 84, - 0x7F0: 84, - 0x7F1: 84, - 0x7F2: 84, - 0x7F3: 84, - 0x7FA: 67, - 0x7FD: 84, - 0x816: 84, - 0x817: 84, - 0x818: 84, - 0x819: 84, - 0x81B: 84, - 0x81C: 84, - 0x81D: 84, - 0x81E: 84, - 0x81F: 84, - 0x820: 84, - 0x821: 84, - 0x822: 84, - 0x823: 84, - 0x825: 84, - 0x826: 84, - 0x827: 84, - 0x829: 84, - 0x82A: 84, - 0x82B: 84, - 0x82C: 84, - 0x82D: 84, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 82, - 0x848: 68, - 0x849: 82, - 0x84A: 68, - 0x84B: 68, - 0x84C: 68, - 0x84D: 68, - 0x84E: 68, - 0x84F: 68, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 82, - 0x857: 82, - 0x858: 82, - 0x859: 84, - 0x85A: 84, - 0x85B: 84, - 0x860: 68, - 0x862: 68, - 0x863: 68, - 0x864: 68, - 0x865: 68, - 0x867: 82, - 0x868: 68, - 0x869: 82, - 0x86A: 82, - 0x870: 82, - 0x871: 82, - 0x872: 82, - 0x873: 82, - 0x874: 82, - 0x875: 82, - 0x876: 82, - 0x877: 82, - 0x878: 82, - 0x879: 82, - 0x87A: 82, - 0x87B: 82, - 0x87C: 82, - 0x87D: 82, - 0x87E: 82, - 0x87F: 82, - 0x880: 82, - 0x881: 82, - 0x882: 82, - 0x883: 67, - 0x884: 67, - 0x885: 67, - 0x886: 68, - 0x889: 68, - 0x88A: 68, - 0x88B: 68, - 0x88C: 68, - 0x88D: 68, - 0x88E: 82, - 0x898: 84, - 0x899: 84, - 0x89A: 84, - 0x89B: 84, - 0x89C: 84, - 0x89D: 84, - 0x89E: 84, - 0x89F: 84, - 0x8A0: 68, - 0x8A1: 68, - 0x8A2: 68, - 0x8A3: 68, - 0x8A4: 68, - 0x8A5: 68, - 0x8A6: 68, - 0x8A7: 68, - 0x8A8: 68, - 0x8A9: 68, - 0x8AA: 82, - 0x8AB: 82, - 0x8AC: 82, - 0x8AE: 82, - 0x8AF: 68, - 0x8B0: 68, - 0x8B1: 82, - 0x8B2: 82, - 0x8B3: 68, - 0x8B4: 68, - 0x8B5: 68, - 0x8B6: 68, - 0x8B7: 68, - 0x8B8: 68, - 0x8B9: 82, - 0x8BA: 68, - 0x8BB: 68, - 0x8BC: 68, - 0x8BD: 68, - 0x8BE: 68, - 0x8BF: 68, - 0x8C0: 68, - 0x8C1: 68, - 0x8C2: 68, - 0x8C3: 68, - 0x8C4: 68, - 0x8C5: 68, - 0x8C6: 68, - 0x8C7: 68, - 0x8C8: 68, - 0x8CA: 84, - 0x8CB: 84, - 0x8CC: 84, - 0x8CD: 84, - 0x8CE: 84, - 0x8CF: 84, - 0x8D0: 84, - 0x8D1: 84, - 0x8D2: 84, - 0x8D3: 84, - 0x8D4: 84, - 0x8D5: 84, - 0x8D6: 84, - 0x8D7: 84, - 0x8D8: 84, - 0x8D9: 84, - 0x8DA: 84, - 0x8DB: 84, - 0x8DC: 84, - 0x8DD: 84, - 0x8DE: 84, - 0x8DF: 84, - 0x8E0: 84, - 0x8E1: 84, - 0x8E3: 84, - 0x8E4: 84, - 0x8E5: 84, - 0x8E6: 84, - 0x8E7: 84, - 0x8E8: 84, - 0x8E9: 84, - 0x8EA: 84, - 0x8EB: 84, - 0x8EC: 84, - 0x8ED: 84, - 0x8EE: 84, - 0x8EF: 84, - 0x8F0: 84, - 0x8F1: 84, - 0x8F2: 84, - 0x8F3: 84, - 0x8F4: 84, - 0x8F5: 84, - 0x8F6: 84, - 0x8F7: 84, - 0x8F8: 84, - 0x8F9: 84, - 0x8FA: 84, - 0x8FB: 84, - 0x8FC: 84, - 0x8FD: 84, - 0x8FE: 84, - 0x8FF: 84, - 0x900: 84, - 0x901: 84, - 0x902: 84, - 0x93A: 84, - 0x93C: 84, - 0x941: 84, - 0x942: 84, - 0x943: 84, - 0x944: 84, - 0x945: 84, - 0x946: 84, - 0x947: 84, - 0x948: 84, - 0x94D: 84, - 0x951: 84, - 0x952: 84, - 0x953: 84, - 0x954: 84, - 0x955: 84, - 0x956: 84, - 0x957: 84, - 0x962: 84, - 0x963: 84, - 0x981: 84, - 0x9BC: 84, - 0x9C1: 84, - 0x9C2: 84, - 0x9C3: 84, - 0x9C4: 84, - 0x9CD: 84, - 0x9E2: 84, - 0x9E3: 84, - 0x9FE: 84, - 0xA01: 84, - 0xA02: 84, - 0xA3C: 84, - 0xA41: 84, - 0xA42: 84, - 0xA47: 84, - 0xA48: 84, - 0xA4B: 84, - 0xA4C: 84, - 0xA4D: 84, - 0xA51: 84, - 0xA70: 84, - 0xA71: 84, - 0xA75: 84, - 0xA81: 84, - 0xA82: 84, - 0xABC: 84, - 0xAC1: 84, - 0xAC2: 84, - 0xAC3: 84, - 0xAC4: 84, - 0xAC5: 84, - 0xAC7: 84, - 0xAC8: 84, - 0xACD: 84, - 0xAE2: 84, - 0xAE3: 84, - 0xAFA: 84, - 0xAFB: 84, - 0xAFC: 84, - 0xAFD: 84, - 0xAFE: 84, - 0xAFF: 84, - 0xB01: 84, - 0xB3C: 84, - 0xB3F: 84, - 0xB41: 84, - 0xB42: 84, - 0xB43: 84, - 0xB44: 84, - 0xB4D: 84, - 0xB55: 84, - 0xB56: 84, - 0xB62: 84, - 0xB63: 84, - 0xB82: 84, - 0xBC0: 84, - 0xBCD: 84, - 0xC00: 84, - 0xC04: 84, - 0xC3C: 84, - 0xC3E: 84, - 0xC3F: 84, - 0xC40: 84, - 0xC46: 84, - 0xC47: 84, - 0xC48: 84, - 0xC4A: 84, - 0xC4B: 84, - 0xC4C: 84, - 0xC4D: 84, - 0xC55: 84, - 0xC56: 84, - 0xC62: 84, - 0xC63: 84, - 0xC81: 84, - 0xCBC: 84, - 0xCBF: 84, - 0xCC6: 84, - 0xCCC: 84, - 0xCCD: 84, - 0xCE2: 84, - 0xCE3: 84, - 0xD00: 84, - 0xD01: 84, - 0xD3B: 84, - 0xD3C: 84, - 0xD41: 84, - 0xD42: 84, - 0xD43: 84, - 0xD44: 84, - 0xD4D: 84, - 0xD62: 84, - 0xD63: 84, - 0xD81: 84, - 0xDCA: 84, - 0xDD2: 84, - 0xDD3: 84, - 0xDD4: 84, - 0xDD6: 84, - 0xE31: 84, - 0xE34: 84, - 0xE35: 84, - 0xE36: 84, - 0xE37: 84, - 0xE38: 84, - 0xE39: 84, - 0xE3A: 84, - 0xE47: 84, - 0xE48: 84, - 0xE49: 84, - 0xE4A: 84, - 0xE4B: 84, - 0xE4C: 84, - 0xE4D: 84, - 0xE4E: 84, - 0xEB1: 84, - 0xEB4: 84, - 0xEB5: 84, - 0xEB6: 84, - 0xEB7: 84, - 0xEB8: 84, - 0xEB9: 84, - 0xEBA: 84, - 0xEBB: 84, - 0xEBC: 84, - 0xEC8: 84, - 0xEC9: 84, - 0xECA: 84, - 0xECB: 84, - 0xECC: 84, - 0xECD: 84, - 0xECE: 84, - 0xF18: 84, - 0xF19: 84, - 0xF35: 84, - 0xF37: 84, - 0xF39: 84, - 0xF71: 84, - 0xF72: 84, - 0xF73: 84, - 0xF74: 84, - 0xF75: 84, - 0xF76: 84, - 0xF77: 84, - 0xF78: 84, - 0xF79: 84, - 0xF7A: 84, - 0xF7B: 84, - 0xF7C: 84, - 0xF7D: 84, - 0xF7E: 84, - 0xF80: 84, - 0xF81: 84, - 0xF82: 84, - 0xF83: 84, - 0xF84: 84, - 0xF86: 84, - 0xF87: 84, - 0xF8D: 84, - 0xF8E: 84, - 0xF8F: 84, - 0xF90: 84, - 0xF91: 84, - 0xF92: 84, - 0xF93: 84, - 0xF94: 84, - 0xF95: 84, - 0xF96: 84, - 0xF97: 84, - 0xF99: 84, - 0xF9A: 84, - 0xF9B: 84, - 0xF9C: 84, - 0xF9D: 84, - 0xF9E: 84, - 0xF9F: 84, - 0xFA0: 84, - 0xFA1: 84, - 0xFA2: 84, - 0xFA3: 84, - 0xFA4: 84, - 0xFA5: 84, - 0xFA6: 84, - 0xFA7: 84, - 0xFA8: 84, - 0xFA9: 84, - 0xFAA: 84, - 0xFAB: 84, - 0xFAC: 84, - 0xFAD: 84, - 0xFAE: 84, - 0xFAF: 84, - 0xFB0: 84, - 0xFB1: 84, - 0xFB2: 84, - 0xFB3: 84, - 0xFB4: 84, - 0xFB5: 84, - 0xFB6: 84, - 0xFB7: 84, - 0xFB8: 84, - 0xFB9: 84, - 0xFBA: 84, - 0xFBB: 84, - 0xFBC: 84, - 0xFC6: 84, - 0x102D: 84, - 0x102E: 84, - 0x102F: 84, - 0x1030: 84, - 0x1032: 84, - 0x1033: 84, - 0x1034: 84, - 0x1035: 84, - 0x1036: 84, - 0x1037: 84, - 0x1039: 84, - 0x103A: 84, - 0x103D: 84, - 0x103E: 84, - 0x1058: 84, - 0x1059: 84, - 0x105E: 84, - 0x105F: 84, - 0x1060: 84, - 0x1071: 84, - 0x1072: 84, - 0x1073: 84, - 0x1074: 84, - 0x1082: 84, - 0x1085: 84, - 0x1086: 84, - 0x108D: 84, - 0x109D: 84, - 0x135D: 84, - 0x135E: 84, - 0x135F: 84, - 0x1712: 84, - 0x1713: 84, - 0x1714: 84, - 0x1732: 84, - 0x1733: 84, - 0x1752: 84, - 0x1753: 84, - 0x1772: 84, - 0x1773: 84, - 0x17B4: 84, - 0x17B5: 84, - 0x17B7: 84, - 0x17B8: 84, - 0x17B9: 84, - 0x17BA: 84, - 0x17BB: 84, - 0x17BC: 84, - 0x17BD: 84, - 0x17C6: 84, - 0x17C9: 84, - 0x17CA: 84, - 0x17CB: 84, - 0x17CC: 84, - 0x17CD: 84, - 0x17CE: 84, - 0x17CF: 84, - 0x17D0: 84, - 0x17D1: 84, - 0x17D2: 84, - 0x17D3: 84, - 0x17DD: 84, - 0x1807: 68, - 0x180A: 67, - 0x180B: 84, - 0x180C: 84, - 0x180D: 84, - 0x180F: 84, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182A: 68, - 0x182B: 68, - 0x182C: 68, - 0x182D: 68, - 0x182E: 68, - 0x182F: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183A: 68, - 0x183B: 68, - 0x183C: 68, - 0x183D: 68, - 0x183E: 68, - 0x183F: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184A: 68, - 0x184B: 68, - 0x184C: 68, - 0x184D: 68, - 0x184E: 68, - 0x184F: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185A: 68, - 0x185B: 68, - 0x185C: 68, - 0x185D: 68, - 0x185E: 68, - 0x185F: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186A: 68, - 0x186B: 68, - 0x186C: 68, - 0x186D: 68, - 0x186E: 68, - 0x186F: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1878: 68, - 0x1885: 84, - 0x1886: 84, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188A: 68, - 0x188B: 68, - 0x188C: 68, - 0x188D: 68, - 0x188E: 68, - 0x188F: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189A: 68, - 0x189B: 68, - 0x189C: 68, - 0x189D: 68, - 0x189E: 68, - 0x189F: 68, - 0x18A0: 68, - 0x18A1: 68, - 0x18A2: 68, - 0x18A3: 68, - 0x18A4: 68, - 0x18A5: 68, - 0x18A6: 68, - 0x18A7: 68, - 0x18A8: 68, - 0x18A9: 84, - 0x18AA: 68, - 0x1920: 84, - 0x1921: 84, - 0x1922: 84, - 0x1927: 84, - 0x1928: 84, - 0x1932: 84, - 0x1939: 84, - 0x193A: 84, - 0x193B: 84, - 0x1A17: 84, - 0x1A18: 84, - 0x1A1B: 84, - 0x1A56: 84, - 0x1A58: 84, - 0x1A59: 84, - 0x1A5A: 84, - 0x1A5B: 84, - 0x1A5C: 84, - 0x1A5D: 84, - 0x1A5E: 84, - 0x1A60: 84, - 0x1A62: 84, - 0x1A65: 84, - 0x1A66: 84, - 0x1A67: 84, - 0x1A68: 84, - 0x1A69: 84, - 0x1A6A: 84, - 0x1A6B: 84, - 0x1A6C: 84, - 0x1A73: 84, - 0x1A74: 84, - 0x1A75: 84, - 0x1A76: 84, - 0x1A77: 84, - 0x1A78: 84, - 0x1A79: 84, - 0x1A7A: 84, - 0x1A7B: 84, - 0x1A7C: 84, - 0x1A7F: 84, - 0x1AB0: 84, - 0x1AB1: 84, - 0x1AB2: 84, - 0x1AB3: 84, - 0x1AB4: 84, - 0x1AB5: 84, - 0x1AB6: 84, - 0x1AB7: 84, - 0x1AB8: 84, - 0x1AB9: 84, - 0x1ABA: 84, - 0x1ABB: 84, - 0x1ABC: 84, - 0x1ABD: 84, - 0x1ABE: 84, - 0x1ABF: 84, - 0x1AC0: 84, - 0x1AC1: 84, - 0x1AC2: 84, - 0x1AC3: 84, - 0x1AC4: 84, - 0x1AC5: 84, - 0x1AC6: 84, - 0x1AC7: 84, - 0x1AC8: 84, - 0x1AC9: 84, - 0x1ACA: 84, - 0x1ACB: 84, - 0x1ACC: 84, - 0x1ACD: 84, - 0x1ACE: 84, - 0x1B00: 84, - 0x1B01: 84, - 0x1B02: 84, - 0x1B03: 84, - 0x1B34: 84, - 0x1B36: 84, - 0x1B37: 84, - 0x1B38: 84, - 0x1B39: 84, - 0x1B3A: 84, - 0x1B3C: 84, - 0x1B42: 84, - 0x1B6B: 84, - 0x1B6C: 84, - 0x1B6D: 84, - 0x1B6E: 84, - 0x1B6F: 84, - 0x1B70: 84, - 0x1B71: 84, - 0x1B72: 84, - 0x1B73: 84, - 0x1B80: 84, - 0x1B81: 84, - 0x1BA2: 84, - 0x1BA3: 84, - 0x1BA4: 84, - 0x1BA5: 84, - 0x1BA8: 84, - 0x1BA9: 84, - 0x1BAB: 84, - 0x1BAC: 84, - 0x1BAD: 84, - 0x1BE6: 84, - 0x1BE8: 84, - 0x1BE9: 84, - 0x1BED: 84, - 0x1BEF: 84, - 0x1BF0: 84, - 0x1BF1: 84, - 0x1C2C: 84, - 0x1C2D: 84, - 0x1C2E: 84, - 0x1C2F: 84, - 0x1C30: 84, - 0x1C31: 84, - 0x1C32: 84, - 0x1C33: 84, - 0x1C36: 84, - 0x1C37: 84, - 0x1CD0: 84, - 0x1CD1: 84, - 0x1CD2: 84, - 0x1CD4: 84, - 0x1CD5: 84, - 0x1CD6: 84, - 0x1CD7: 84, - 0x1CD8: 84, - 0x1CD9: 84, - 0x1CDA: 84, - 0x1CDB: 84, - 0x1CDC: 84, - 0x1CDD: 84, - 0x1CDE: 84, - 0x1CDF: 84, - 0x1CE0: 84, - 0x1CE2: 84, - 0x1CE3: 84, - 0x1CE4: 84, - 0x1CE5: 84, - 0x1CE6: 84, - 0x1CE7: 84, - 0x1CE8: 84, - 0x1CED: 84, - 0x1CF4: 84, - 0x1CF8: 84, - 0x1CF9: 84, - 0x1DC0: 84, - 0x1DC1: 84, - 0x1DC2: 84, - 0x1DC3: 84, - 0x1DC4: 84, - 0x1DC5: 84, - 0x1DC6: 84, - 0x1DC7: 84, - 0x1DC8: 84, - 0x1DC9: 84, - 0x1DCA: 84, - 0x1DCB: 84, - 0x1DCC: 84, - 0x1DCD: 84, - 0x1DCE: 84, - 0x1DCF: 84, - 0x1DD0: 84, - 0x1DD1: 84, - 0x1DD2: 84, - 0x1DD3: 84, - 0x1DD4: 84, - 0x1DD5: 84, - 0x1DD6: 84, - 0x1DD7: 84, - 0x1DD8: 84, - 0x1DD9: 84, - 0x1DDA: 84, - 0x1DDB: 84, - 0x1DDC: 84, - 0x1DDD: 84, - 0x1DDE: 84, - 0x1DDF: 84, - 0x1DE0: 84, - 0x1DE1: 84, - 0x1DE2: 84, - 0x1DE3: 84, - 0x1DE4: 84, - 0x1DE5: 84, - 0x1DE6: 84, - 0x1DE7: 84, - 0x1DE8: 84, - 0x1DE9: 84, - 0x1DEA: 84, - 0x1DEB: 84, - 0x1DEC: 84, - 0x1DED: 84, - 0x1DEE: 84, - 0x1DEF: 84, - 0x1DF0: 84, - 0x1DF1: 84, - 0x1DF2: 84, - 0x1DF3: 84, - 0x1DF4: 84, - 0x1DF5: 84, - 0x1DF6: 84, - 0x1DF7: 84, - 0x1DF8: 84, - 0x1DF9: 84, - 0x1DFA: 84, - 0x1DFB: 84, - 0x1DFC: 84, - 0x1DFD: 84, - 0x1DFE: 84, - 0x1DFF: 84, - 0x200B: 84, - 0x200D: 67, - 0x200E: 84, - 0x200F: 84, - 0x202A: 84, - 0x202B: 84, - 0x202C: 84, - 0x202D: 84, - 0x202E: 84, - 0x2060: 84, - 0x2061: 84, - 0x2062: 84, - 0x2063: 84, - 0x2064: 84, - 0x206A: 84, - 0x206B: 84, - 0x206C: 84, - 0x206D: 84, - 0x206E: 84, - 0x206F: 84, - 0x20D0: 84, - 0x20D1: 84, - 0x20D2: 84, - 0x20D3: 84, - 0x20D4: 84, - 0x20D5: 84, - 0x20D6: 84, - 0x20D7: 84, - 0x20D8: 84, - 0x20D9: 84, - 0x20DA: 84, - 0x20DB: 84, - 0x20DC: 84, - 0x20DD: 84, - 0x20DE: 84, - 0x20DF: 84, - 0x20E0: 84, - 0x20E1: 84, - 0x20E2: 84, - 0x20E3: 84, - 0x20E4: 84, - 0x20E5: 84, - 0x20E6: 84, - 0x20E7: 84, - 0x20E8: 84, - 0x20E9: 84, - 0x20EA: 84, - 0x20EB: 84, - 0x20EC: 84, - 0x20ED: 84, - 0x20EE: 84, - 0x20EF: 84, - 0x20F0: 84, - 0x2CEF: 84, - 0x2CF0: 84, - 0x2CF1: 84, - 0x2D7F: 84, - 0x2DE0: 84, - 0x2DE1: 84, - 0x2DE2: 84, - 0x2DE3: 84, - 0x2DE4: 84, - 0x2DE5: 84, - 0x2DE6: 84, - 0x2DE7: 84, - 0x2DE8: 84, - 0x2DE9: 84, - 0x2DEA: 84, - 0x2DEB: 84, - 0x2DEC: 84, - 0x2DED: 84, - 0x2DEE: 84, - 0x2DEF: 84, - 0x2DF0: 84, - 0x2DF1: 84, - 0x2DF2: 84, - 0x2DF3: 84, - 0x2DF4: 84, - 0x2DF5: 84, - 0x2DF6: 84, - 0x2DF7: 84, - 0x2DF8: 84, - 0x2DF9: 84, - 0x2DFA: 84, - 0x2DFB: 84, - 0x2DFC: 84, - 0x2DFD: 84, - 0x2DFE: 84, - 0x2DFF: 84, - 0x302A: 84, - 0x302B: 84, - 0x302C: 84, - 0x302D: 84, - 0x3099: 84, - 0x309A: 84, - 0xA66F: 84, - 0xA670: 84, - 0xA671: 84, - 0xA672: 84, - 0xA674: 84, - 0xA675: 84, - 0xA676: 84, - 0xA677: 84, - 0xA678: 84, - 0xA679: 84, - 0xA67A: 84, - 0xA67B: 84, - 0xA67C: 84, - 0xA67D: 84, - 0xA69E: 84, - 0xA69F: 84, - 0xA6F0: 84, - 0xA6F1: 84, - 0xA802: 84, - 0xA806: 84, - 0xA80B: 84, - 0xA825: 84, - 0xA826: 84, - 0xA82C: 84, - 0xA840: 68, - 0xA841: 68, - 0xA842: 68, - 0xA843: 68, - 0xA844: 68, - 0xA845: 68, - 0xA846: 68, - 0xA847: 68, - 0xA848: 68, - 0xA849: 68, - 0xA84A: 68, - 0xA84B: 68, - 0xA84C: 68, - 0xA84D: 68, - 0xA84E: 68, - 0xA84F: 68, - 0xA850: 68, - 0xA851: 68, - 0xA852: 68, - 0xA853: 68, - 0xA854: 68, - 0xA855: 68, - 0xA856: 68, - 0xA857: 68, - 0xA858: 68, - 0xA859: 68, - 0xA85A: 68, - 0xA85B: 68, - 0xA85C: 68, - 0xA85D: 68, - 0xA85E: 68, - 0xA85F: 68, - 0xA860: 68, - 0xA861: 68, - 0xA862: 68, - 0xA863: 68, - 0xA864: 68, - 0xA865: 68, - 0xA866: 68, - 0xA867: 68, - 0xA868: 68, - 0xA869: 68, - 0xA86A: 68, - 0xA86B: 68, - 0xA86C: 68, - 0xA86D: 68, - 0xA86E: 68, - 0xA86F: 68, - 0xA870: 68, - 0xA871: 68, - 0xA872: 76, - 0xA8C4: 84, - 0xA8C5: 84, - 0xA8E0: 84, - 0xA8E1: 84, - 0xA8E2: 84, - 0xA8E3: 84, - 0xA8E4: 84, - 0xA8E5: 84, - 0xA8E6: 84, - 0xA8E7: 84, - 0xA8E8: 84, - 0xA8E9: 84, - 0xA8EA: 84, - 0xA8EB: 84, - 0xA8EC: 84, - 0xA8ED: 84, - 0xA8EE: 84, - 0xA8EF: 84, - 0xA8F0: 84, - 0xA8F1: 84, - 0xA8FF: 84, - 0xA926: 84, - 0xA927: 84, - 0xA928: 84, - 0xA929: 84, - 0xA92A: 84, - 0xA92B: 84, - 0xA92C: 84, - 0xA92D: 84, - 0xA947: 84, - 0xA948: 84, - 0xA949: 84, - 0xA94A: 84, - 0xA94B: 84, - 0xA94C: 84, - 0xA94D: 84, - 0xA94E: 84, - 0xA94F: 84, - 0xA950: 84, - 0xA951: 84, - 0xA980: 84, - 0xA981: 84, - 0xA982: 84, - 0xA9B3: 84, - 0xA9B6: 84, - 0xA9B7: 84, - 0xA9B8: 84, - 0xA9B9: 84, - 0xA9BC: 84, - 0xA9BD: 84, - 0xA9E5: 84, - 0xAA29: 84, - 0xAA2A: 84, - 0xAA2B: 84, - 0xAA2C: 84, - 0xAA2D: 84, - 0xAA2E: 84, - 0xAA31: 84, - 0xAA32: 84, - 0xAA35: 84, - 0xAA36: 84, - 0xAA43: 84, - 0xAA4C: 84, - 0xAA7C: 84, - 0xAAB0: 84, - 0xAAB2: 84, - 0xAAB3: 84, - 0xAAB4: 84, - 0xAAB7: 84, - 0xAAB8: 84, - 0xAABE: 84, - 0xAABF: 84, - 0xAAC1: 84, - 0xAAEC: 84, - 0xAAED: 84, - 0xAAF6: 84, - 0xABE5: 84, - 0xABE8: 84, - 0xABED: 84, - 0xFB1E: 84, - 0xFE00: 84, - 0xFE01: 84, - 0xFE02: 84, - 0xFE03: 84, - 0xFE04: 84, - 0xFE05: 84, - 0xFE06: 84, - 0xFE07: 84, - 0xFE08: 84, - 0xFE09: 84, - 0xFE0A: 84, - 0xFE0B: 84, - 0xFE0C: 84, - 0xFE0D: 84, - 0xFE0E: 84, - 0xFE0F: 84, - 0xFE20: 84, - 0xFE21: 84, - 0xFE22: 84, - 0xFE23: 84, - 0xFE24: 84, - 0xFE25: 84, - 0xFE26: 84, - 0xFE27: 84, - 0xFE28: 84, - 0xFE29: 84, - 0xFE2A: 84, - 0xFE2B: 84, - 0xFE2C: 84, - 0xFE2D: 84, - 0xFE2E: 84, - 0xFE2F: 84, - 0xFEFF: 84, - 0xFFF9: 84, - 0xFFFA: 84, - 0xFFFB: 84, - 0x101FD: 84, - 0x102E0: 84, - 0x10376: 84, - 0x10377: 84, - 0x10378: 84, - 0x10379: 84, - 0x1037A: 84, - 0x10A01: 84, - 0x10A02: 84, - 0x10A03: 84, - 0x10A05: 84, - 0x10A06: 84, - 0x10A0C: 84, - 0x10A0D: 84, - 0x10A0E: 84, - 0x10A0F: 84, - 0x10A38: 84, - 0x10A39: 84, - 0x10A3A: 84, - 0x10A3F: 84, - 0x10AC0: 68, - 0x10AC1: 68, - 0x10AC2: 68, - 0x10AC3: 68, - 0x10AC4: 68, - 0x10AC5: 82, - 0x10AC7: 82, - 0x10AC9: 82, - 0x10ACA: 82, - 0x10ACD: 76, - 0x10ACE: 82, - 0x10ACF: 82, - 0x10AD0: 82, - 0x10AD1: 82, - 0x10AD2: 82, - 0x10AD3: 68, - 0x10AD4: 68, - 0x10AD5: 68, - 0x10AD6: 68, - 0x10AD7: 76, - 0x10AD8: 68, - 0x10AD9: 68, - 0x10ADA: 68, - 0x10ADB: 68, - 0x10ADC: 68, - 0x10ADD: 82, - 0x10ADE: 68, - 0x10ADF: 68, - 0x10AE0: 68, - 0x10AE1: 82, - 0x10AE4: 82, - 0x10AE5: 84, - 0x10AE6: 84, - 0x10AEB: 68, - 0x10AEC: 68, - 0x10AED: 68, - 0x10AEE: 68, - 0x10AEF: 82, - 0x10B80: 68, - 0x10B81: 82, - 0x10B82: 68, - 0x10B83: 82, - 0x10B84: 82, - 0x10B85: 82, - 0x10B86: 68, - 0x10B87: 68, - 0x10B88: 68, - 0x10B89: 82, - 0x10B8A: 68, - 0x10B8B: 68, - 0x10B8C: 82, - 0x10B8D: 68, - 0x10B8E: 82, - 0x10B8F: 82, - 0x10B90: 68, - 0x10B91: 82, - 0x10BA9: 82, - 0x10BAA: 82, - 0x10BAB: 82, - 0x10BAC: 82, - 0x10BAD: 68, - 0x10BAE: 68, - 0x10D00: 76, - 0x10D01: 68, - 0x10D02: 68, - 0x10D03: 68, - 0x10D04: 68, - 0x10D05: 68, - 0x10D06: 68, - 0x10D07: 68, - 0x10D08: 68, - 0x10D09: 68, - 0x10D0A: 68, - 0x10D0B: 68, - 0x10D0C: 68, - 0x10D0D: 68, - 0x10D0E: 68, - 0x10D0F: 68, - 0x10D10: 68, - 0x10D11: 68, - 0x10D12: 68, - 0x10D13: 68, - 0x10D14: 68, - 0x10D15: 68, - 0x10D16: 68, - 0x10D17: 68, - 0x10D18: 68, - 0x10D19: 68, - 0x10D1A: 68, - 0x10D1B: 68, - 0x10D1C: 68, - 0x10D1D: 68, - 0x10D1E: 68, - 0x10D1F: 68, - 0x10D20: 68, - 0x10D21: 68, - 0x10D22: 82, - 0x10D23: 68, - 0x10D24: 84, - 0x10D25: 84, - 0x10D26: 84, - 0x10D27: 84, - 0x10EAB: 84, - 0x10EAC: 84, - 0x10EFD: 84, - 0x10EFE: 84, - 0x10EFF: 84, - 0x10F30: 68, - 0x10F31: 68, - 0x10F32: 68, - 0x10F33: 82, - 0x10F34: 68, - 0x10F35: 68, - 0x10F36: 68, - 0x10F37: 68, - 0x10F38: 68, - 0x10F39: 68, - 0x10F3A: 68, - 0x10F3B: 68, - 0x10F3C: 68, - 0x10F3D: 68, - 0x10F3E: 68, - 0x10F3F: 68, - 0x10F40: 68, - 0x10F41: 68, - 0x10F42: 68, - 0x10F43: 68, - 0x10F44: 68, - 0x10F46: 84, - 0x10F47: 84, - 0x10F48: 84, - 0x10F49: 84, - 0x10F4A: 84, - 0x10F4B: 84, - 0x10F4C: 84, - 0x10F4D: 84, - 0x10F4E: 84, - 0x10F4F: 84, - 0x10F50: 84, - 0x10F51: 68, - 0x10F52: 68, - 0x10F53: 68, - 0x10F54: 82, - 0x10F70: 68, - 0x10F71: 68, - 0x10F72: 68, - 0x10F73: 68, - 0x10F74: 82, - 0x10F75: 82, - 0x10F76: 68, - 0x10F77: 68, - 0x10F78: 68, - 0x10F79: 68, - 0x10F7A: 68, - 0x10F7B: 68, - 0x10F7C: 68, - 0x10F7D: 68, - 0x10F7E: 68, - 0x10F7F: 68, - 0x10F80: 68, - 0x10F81: 68, - 0x10F82: 84, - 0x10F83: 84, - 0x10F84: 84, - 0x10F85: 84, - 0x10FB0: 68, - 0x10FB2: 68, - 0x10FB3: 68, - 0x10FB4: 82, - 0x10FB5: 82, - 0x10FB6: 82, - 0x10FB8: 68, - 0x10FB9: 82, - 0x10FBA: 82, - 0x10FBB: 68, - 0x10FBC: 68, - 0x10FBD: 82, - 0x10FBE: 68, - 0x10FBF: 68, - 0x10FC1: 68, - 0x10FC2: 82, - 0x10FC3: 82, - 0x10FC4: 68, - 0x10FC9: 82, - 0x10FCA: 68, - 0x10FCB: 76, - 0x11001: 84, - 0x11038: 84, - 0x11039: 84, - 0x1103A: 84, - 0x1103B: 84, - 0x1103C: 84, - 0x1103D: 84, - 0x1103E: 84, - 0x1103F: 84, - 0x11040: 84, - 0x11041: 84, - 0x11042: 84, - 0x11043: 84, - 0x11044: 84, - 0x11045: 84, - 0x11046: 84, - 0x11070: 84, - 0x11073: 84, - 0x11074: 84, - 0x1107F: 84, - 0x11080: 84, - 0x11081: 84, - 0x110B3: 84, - 0x110B4: 84, - 0x110B5: 84, - 0x110B6: 84, - 0x110B9: 84, - 0x110BA: 84, - 0x110C2: 84, - 0x11100: 84, - 0x11101: 84, - 0x11102: 84, - 0x11127: 84, - 0x11128: 84, - 0x11129: 84, - 0x1112A: 84, - 0x1112B: 84, - 0x1112D: 84, - 0x1112E: 84, - 0x1112F: 84, - 0x11130: 84, - 0x11131: 84, - 0x11132: 84, - 0x11133: 84, - 0x11134: 84, - 0x11173: 84, - 0x11180: 84, - 0x11181: 84, - 0x111B6: 84, - 0x111B7: 84, - 0x111B8: 84, - 0x111B9: 84, - 0x111BA: 84, - 0x111BB: 84, - 0x111BC: 84, - 0x111BD: 84, - 0x111BE: 84, - 0x111C9: 84, - 0x111CA: 84, - 0x111CB: 84, - 0x111CC: 84, - 0x111CF: 84, - 0x1122F: 84, - 0x11230: 84, - 0x11231: 84, - 0x11234: 84, - 0x11236: 84, - 0x11237: 84, - 0x1123E: 84, - 0x11241: 84, - 0x112DF: 84, - 0x112E3: 84, - 0x112E4: 84, - 0x112E5: 84, - 0x112E6: 84, - 0x112E7: 84, - 0x112E8: 84, - 0x112E9: 84, - 0x112EA: 84, - 0x11300: 84, - 0x11301: 84, - 0x1133B: 84, - 0x1133C: 84, - 0x11340: 84, - 0x11366: 84, - 0x11367: 84, - 0x11368: 84, - 0x11369: 84, - 0x1136A: 84, - 0x1136B: 84, - 0x1136C: 84, - 0x11370: 84, - 0x11371: 84, - 0x11372: 84, - 0x11373: 84, - 0x11374: 84, - 0x11438: 84, - 0x11439: 84, - 0x1143A: 84, - 0x1143B: 84, - 0x1143C: 84, - 0x1143D: 84, - 0x1143E: 84, - 0x1143F: 84, - 0x11442: 84, - 0x11443: 84, - 0x11444: 84, - 0x11446: 84, - 0x1145E: 84, - 0x114B3: 84, - 0x114B4: 84, - 0x114B5: 84, - 0x114B6: 84, - 0x114B7: 84, - 0x114B8: 84, - 0x114BA: 84, - 0x114BF: 84, - 0x114C0: 84, - 0x114C2: 84, - 0x114C3: 84, - 0x115B2: 84, - 0x115B3: 84, - 0x115B4: 84, - 0x115B5: 84, - 0x115BC: 84, - 0x115BD: 84, - 0x115BF: 84, - 0x115C0: 84, - 0x115DC: 84, - 0x115DD: 84, - 0x11633: 84, - 0x11634: 84, - 0x11635: 84, - 0x11636: 84, - 0x11637: 84, - 0x11638: 84, - 0x11639: 84, - 0x1163A: 84, - 0x1163D: 84, - 0x1163F: 84, - 0x11640: 84, - 0x116AB: 84, - 0x116AD: 84, - 0x116B0: 84, - 0x116B1: 84, - 0x116B2: 84, - 0x116B3: 84, - 0x116B4: 84, - 0x116B5: 84, - 0x116B7: 84, - 0x1171D: 84, - 0x1171E: 84, - 0x1171F: 84, - 0x11722: 84, - 0x11723: 84, - 0x11724: 84, - 0x11725: 84, - 0x11727: 84, - 0x11728: 84, - 0x11729: 84, - 0x1172A: 84, - 0x1172B: 84, - 0x1182F: 84, - 0x11830: 84, - 0x11831: 84, - 0x11832: 84, - 0x11833: 84, - 0x11834: 84, - 0x11835: 84, - 0x11836: 84, - 0x11837: 84, - 0x11839: 84, - 0x1183A: 84, - 0x1193B: 84, - 0x1193C: 84, - 0x1193E: 84, - 0x11943: 84, - 0x119D4: 84, - 0x119D5: 84, - 0x119D6: 84, - 0x119D7: 84, - 0x119DA: 84, - 0x119DB: 84, - 0x119E0: 84, - 0x11A01: 84, - 0x11A02: 84, - 0x11A03: 84, - 0x11A04: 84, - 0x11A05: 84, - 0x11A06: 84, - 0x11A07: 84, - 0x11A08: 84, - 0x11A09: 84, - 0x11A0A: 84, - 0x11A33: 84, - 0x11A34: 84, - 0x11A35: 84, - 0x11A36: 84, - 0x11A37: 84, - 0x11A38: 84, - 0x11A3B: 84, - 0x11A3C: 84, - 0x11A3D: 84, - 0x11A3E: 84, - 0x11A47: 84, - 0x11A51: 84, - 0x11A52: 84, - 0x11A53: 84, - 0x11A54: 84, - 0x11A55: 84, - 0x11A56: 84, - 0x11A59: 84, - 0x11A5A: 84, - 0x11A5B: 84, - 0x11A8A: 84, - 0x11A8B: 84, - 0x11A8C: 84, - 0x11A8D: 84, - 0x11A8E: 84, - 0x11A8F: 84, - 0x11A90: 84, - 0x11A91: 84, - 0x11A92: 84, - 0x11A93: 84, - 0x11A94: 84, - 0x11A95: 84, - 0x11A96: 84, - 0x11A98: 84, - 0x11A99: 84, - 0x11C30: 84, - 0x11C31: 84, - 0x11C32: 84, - 0x11C33: 84, - 0x11C34: 84, - 0x11C35: 84, - 0x11C36: 84, - 0x11C38: 84, - 0x11C39: 84, - 0x11C3A: 84, - 0x11C3B: 84, - 0x11C3C: 84, - 0x11C3D: 84, - 0x11C3F: 84, - 0x11C92: 84, - 0x11C93: 84, - 0x11C94: 84, - 0x11C95: 84, - 0x11C96: 84, - 0x11C97: 84, - 0x11C98: 84, - 0x11C99: 84, - 0x11C9A: 84, - 0x11C9B: 84, - 0x11C9C: 84, - 0x11C9D: 84, - 0x11C9E: 84, - 0x11C9F: 84, - 0x11CA0: 84, - 0x11CA1: 84, - 0x11CA2: 84, - 0x11CA3: 84, - 0x11CA4: 84, - 0x11CA5: 84, - 0x11CA6: 84, - 0x11CA7: 84, - 0x11CAA: 84, - 0x11CAB: 84, - 0x11CAC: 84, - 0x11CAD: 84, - 0x11CAE: 84, - 0x11CAF: 84, - 0x11CB0: 84, - 0x11CB2: 84, - 0x11CB3: 84, - 0x11CB5: 84, - 0x11CB6: 84, - 0x11D31: 84, - 0x11D32: 84, - 0x11D33: 84, - 0x11D34: 84, - 0x11D35: 84, - 0x11D36: 84, - 0x11D3A: 84, - 0x11D3C: 84, - 0x11D3D: 84, - 0x11D3F: 84, - 0x11D40: 84, - 0x11D41: 84, - 0x11D42: 84, - 0x11D43: 84, - 0x11D44: 84, - 0x11D45: 84, - 0x11D47: 84, - 0x11D90: 84, - 0x11D91: 84, - 0x11D95: 84, - 0x11D97: 84, - 0x11EF3: 84, - 0x11EF4: 84, - 0x11F00: 84, - 0x11F01: 84, - 0x11F36: 84, - 0x11F37: 84, - 0x11F38: 84, - 0x11F39: 84, - 0x11F3A: 84, - 0x11F40: 84, - 0x11F42: 84, - 0x13430: 84, - 0x13431: 84, - 0x13432: 84, - 0x13433: 84, - 0x13434: 84, - 0x13435: 84, - 0x13436: 84, - 0x13437: 84, - 0x13438: 84, - 0x13439: 84, - 0x1343A: 84, - 0x1343B: 84, - 0x1343C: 84, - 0x1343D: 84, - 0x1343E: 84, - 0x1343F: 84, - 0x13440: 84, - 0x13447: 84, - 0x13448: 84, - 0x13449: 84, - 0x1344A: 84, - 0x1344B: 84, - 0x1344C: 84, - 0x1344D: 84, - 0x1344E: 84, - 0x1344F: 84, - 0x13450: 84, - 0x13451: 84, - 0x13452: 84, - 0x13453: 84, - 0x13454: 84, - 0x13455: 84, - 0x16AF0: 84, - 0x16AF1: 84, - 0x16AF2: 84, - 0x16AF3: 84, - 0x16AF4: 84, - 0x16B30: 84, - 0x16B31: 84, - 0x16B32: 84, - 0x16B33: 84, - 0x16B34: 84, - 0x16B35: 84, - 0x16B36: 84, - 0x16F4F: 84, - 0x16F8F: 84, - 0x16F90: 84, - 0x16F91: 84, - 0x16F92: 84, - 0x16FE4: 84, - 0x1BC9D: 84, - 0x1BC9E: 84, - 0x1BCA0: 84, - 0x1BCA1: 84, - 0x1BCA2: 84, - 0x1BCA3: 84, - 0x1CF00: 84, - 0x1CF01: 84, - 0x1CF02: 84, - 0x1CF03: 84, - 0x1CF04: 84, - 0x1CF05: 84, - 0x1CF06: 84, - 0x1CF07: 84, - 0x1CF08: 84, - 0x1CF09: 84, - 0x1CF0A: 84, - 0x1CF0B: 84, - 0x1CF0C: 84, - 0x1CF0D: 84, - 0x1CF0E: 84, - 0x1CF0F: 84, - 0x1CF10: 84, - 0x1CF11: 84, - 0x1CF12: 84, - 0x1CF13: 84, - 0x1CF14: 84, - 0x1CF15: 84, - 0x1CF16: 84, - 0x1CF17: 84, - 0x1CF18: 84, - 0x1CF19: 84, - 0x1CF1A: 84, - 0x1CF1B: 84, - 0x1CF1C: 84, - 0x1CF1D: 84, - 0x1CF1E: 84, - 0x1CF1F: 84, - 0x1CF20: 84, - 0x1CF21: 84, - 0x1CF22: 84, - 0x1CF23: 84, - 0x1CF24: 84, - 0x1CF25: 84, - 0x1CF26: 84, - 0x1CF27: 84, - 0x1CF28: 84, - 0x1CF29: 84, - 0x1CF2A: 84, - 0x1CF2B: 84, - 0x1CF2C: 84, - 0x1CF2D: 84, - 0x1CF30: 84, - 0x1CF31: 84, - 0x1CF32: 84, - 0x1CF33: 84, - 0x1CF34: 84, - 0x1CF35: 84, - 0x1CF36: 84, - 0x1CF37: 84, - 0x1CF38: 84, - 0x1CF39: 84, - 0x1CF3A: 84, - 0x1CF3B: 84, - 0x1CF3C: 84, - 0x1CF3D: 84, - 0x1CF3E: 84, - 0x1CF3F: 84, - 0x1CF40: 84, - 0x1CF41: 84, - 0x1CF42: 84, - 0x1CF43: 84, - 0x1CF44: 84, - 0x1CF45: 84, - 0x1CF46: 84, - 0x1D167: 84, - 0x1D168: 84, - 0x1D169: 84, - 0x1D173: 84, - 0x1D174: 84, - 0x1D175: 84, - 0x1D176: 84, - 0x1D177: 84, - 0x1D178: 84, - 0x1D179: 84, - 0x1D17A: 84, - 0x1D17B: 84, - 0x1D17C: 84, - 0x1D17D: 84, - 0x1D17E: 84, - 0x1D17F: 84, - 0x1D180: 84, - 0x1D181: 84, - 0x1D182: 84, - 0x1D185: 84, - 0x1D186: 84, - 0x1D187: 84, - 0x1D188: 84, - 0x1D189: 84, - 0x1D18A: 84, - 0x1D18B: 84, - 0x1D1AA: 84, - 0x1D1AB: 84, - 0x1D1AC: 84, - 0x1D1AD: 84, - 0x1D242: 84, - 0x1D243: 84, - 0x1D244: 84, - 0x1DA00: 84, - 0x1DA01: 84, - 0x1DA02: 84, - 0x1DA03: 84, - 0x1DA04: 84, - 0x1DA05: 84, - 0x1DA06: 84, - 0x1DA07: 84, - 0x1DA08: 84, - 0x1DA09: 84, - 0x1DA0A: 84, - 0x1DA0B: 84, - 0x1DA0C: 84, - 0x1DA0D: 84, - 0x1DA0E: 84, - 0x1DA0F: 84, - 0x1DA10: 84, - 0x1DA11: 84, - 0x1DA12: 84, - 0x1DA13: 84, - 0x1DA14: 84, - 0x1DA15: 84, - 0x1DA16: 84, - 0x1DA17: 84, - 0x1DA18: 84, - 0x1DA19: 84, - 0x1DA1A: 84, - 0x1DA1B: 84, - 0x1DA1C: 84, - 0x1DA1D: 84, - 0x1DA1E: 84, - 0x1DA1F: 84, - 0x1DA20: 84, - 0x1DA21: 84, - 0x1DA22: 84, - 0x1DA23: 84, - 0x1DA24: 84, - 0x1DA25: 84, - 0x1DA26: 84, - 0x1DA27: 84, - 0x1DA28: 84, - 0x1DA29: 84, - 0x1DA2A: 84, - 0x1DA2B: 84, - 0x1DA2C: 84, - 0x1DA2D: 84, - 0x1DA2E: 84, - 0x1DA2F: 84, - 0x1DA30: 84, - 0x1DA31: 84, - 0x1DA32: 84, - 0x1DA33: 84, - 0x1DA34: 84, - 0x1DA35: 84, - 0x1DA36: 84, - 0x1DA3B: 84, - 0x1DA3C: 84, - 0x1DA3D: 84, - 0x1DA3E: 84, - 0x1DA3F: 84, - 0x1DA40: 84, - 0x1DA41: 84, - 0x1DA42: 84, - 0x1DA43: 84, - 0x1DA44: 84, - 0x1DA45: 84, - 0x1DA46: 84, - 0x1DA47: 84, - 0x1DA48: 84, - 0x1DA49: 84, - 0x1DA4A: 84, - 0x1DA4B: 84, - 0x1DA4C: 84, - 0x1DA4D: 84, - 0x1DA4E: 84, - 0x1DA4F: 84, - 0x1DA50: 84, - 0x1DA51: 84, - 0x1DA52: 84, - 0x1DA53: 84, - 0x1DA54: 84, - 0x1DA55: 84, - 0x1DA56: 84, - 0x1DA57: 84, - 0x1DA58: 84, - 0x1DA59: 84, - 0x1DA5A: 84, - 0x1DA5B: 84, - 0x1DA5C: 84, - 0x1DA5D: 84, - 0x1DA5E: 84, - 0x1DA5F: 84, - 0x1DA60: 84, - 0x1DA61: 84, - 0x1DA62: 84, - 0x1DA63: 84, - 0x1DA64: 84, - 0x1DA65: 84, - 0x1DA66: 84, - 0x1DA67: 84, - 0x1DA68: 84, - 0x1DA69: 84, - 0x1DA6A: 84, - 0x1DA6B: 84, - 0x1DA6C: 84, - 0x1DA75: 84, - 0x1DA84: 84, - 0x1DA9B: 84, - 0x1DA9C: 84, - 0x1DA9D: 84, - 0x1DA9E: 84, - 0x1DA9F: 84, - 0x1DAA1: 84, - 0x1DAA2: 84, - 0x1DAA3: 84, - 0x1DAA4: 84, - 0x1DAA5: 84, - 0x1DAA6: 84, - 0x1DAA7: 84, - 0x1DAA8: 84, - 0x1DAA9: 84, - 0x1DAAA: 84, - 0x1DAAB: 84, - 0x1DAAC: 84, - 0x1DAAD: 84, - 0x1DAAE: 84, - 0x1DAAF: 84, - 0x1E000: 84, - 0x1E001: 84, - 0x1E002: 84, - 0x1E003: 84, - 0x1E004: 84, - 0x1E005: 84, - 0x1E006: 84, - 0x1E008: 84, - 0x1E009: 84, - 0x1E00A: 84, - 0x1E00B: 84, - 0x1E00C: 84, - 0x1E00D: 84, - 0x1E00E: 84, - 0x1E00F: 84, - 0x1E010: 84, - 0x1E011: 84, - 0x1E012: 84, - 0x1E013: 84, - 0x1E014: 84, - 0x1E015: 84, - 0x1E016: 84, - 0x1E017: 84, - 0x1E018: 84, - 0x1E01B: 84, - 0x1E01C: 84, - 0x1E01D: 84, - 0x1E01E: 84, - 0x1E01F: 84, - 0x1E020: 84, - 0x1E021: 84, - 0x1E023: 84, - 0x1E024: 84, - 0x1E026: 84, - 0x1E027: 84, - 0x1E028: 84, - 0x1E029: 84, - 0x1E02A: 84, - 0x1E08F: 84, - 0x1E130: 84, - 0x1E131: 84, - 0x1E132: 84, - 0x1E133: 84, - 0x1E134: 84, - 0x1E135: 84, - 0x1E136: 84, - 0x1E2AE: 84, - 0x1E2EC: 84, - 0x1E2ED: 84, - 0x1E2EE: 84, - 0x1E2EF: 84, - 0x1E4EC: 84, - 0x1E4ED: 84, - 0x1E4EE: 84, - 0x1E4EF: 84, - 0x1E8D0: 84, - 0x1E8D1: 84, - 0x1E8D2: 84, - 0x1E8D3: 84, - 0x1E8D4: 84, - 0x1E8D5: 84, - 0x1E8D6: 84, - 0x1E900: 68, - 0x1E901: 68, - 0x1E902: 68, - 0x1E903: 68, - 0x1E904: 68, - 0x1E905: 68, - 0x1E906: 68, - 0x1E907: 68, - 0x1E908: 68, - 0x1E909: 68, - 0x1E90A: 68, - 0x1E90B: 68, - 0x1E90C: 68, - 0x1E90D: 68, - 0x1E90E: 68, - 0x1E90F: 68, - 0x1E910: 68, - 0x1E911: 68, - 0x1E912: 68, - 0x1E913: 68, - 0x1E914: 68, - 0x1E915: 68, - 0x1E916: 68, - 0x1E917: 68, - 0x1E918: 68, - 0x1E919: 68, - 0x1E91A: 68, - 0x1E91B: 68, - 0x1E91C: 68, - 0x1E91D: 68, - 0x1E91E: 68, - 0x1E91F: 68, - 0x1E920: 68, - 0x1E921: 68, - 0x1E922: 68, - 0x1E923: 68, - 0x1E924: 68, - 0x1E925: 68, - 0x1E926: 68, - 0x1E927: 68, - 0x1E928: 68, - 0x1E929: 68, - 0x1E92A: 68, - 0x1E92B: 68, - 0x1E92C: 68, - 0x1E92D: 68, - 0x1E92E: 68, - 0x1E92F: 68, - 0x1E930: 68, - 0x1E931: 68, - 0x1E932: 68, - 0x1E933: 68, - 0x1E934: 68, - 0x1E935: 68, - 0x1E936: 68, - 0x1E937: 68, - 0x1E938: 68, - 0x1E939: 68, - 0x1E93A: 68, - 0x1E93B: 68, - 0x1E93C: 68, - 0x1E93D: 68, - 0x1E93E: 68, - 0x1E93F: 68, - 0x1E940: 68, - 0x1E941: 68, - 0x1E942: 68, - 0x1E943: 68, - 0x1E944: 84, - 0x1E945: 84, - 0x1E946: 84, - 0x1E947: 84, - 0x1E948: 84, - 0x1E949: 84, - 0x1E94A: 84, - 0x1E94B: 84, - 0xE0001: 84, - 0xE0020: 84, - 0xE0021: 84, - 0xE0022: 84, - 0xE0023: 84, - 0xE0024: 84, - 0xE0025: 84, - 0xE0026: 84, - 0xE0027: 84, - 0xE0028: 84, - 0xE0029: 84, - 0xE002A: 84, - 0xE002B: 84, - 0xE002C: 84, - 0xE002D: 84, - 0xE002E: 84, - 0xE002F: 84, - 0xE0030: 84, - 0xE0031: 84, - 0xE0032: 84, - 0xE0033: 84, - 0xE0034: 84, - 0xE0035: 84, - 0xE0036: 84, - 0xE0037: 84, - 0xE0038: 84, - 0xE0039: 84, - 0xE003A: 84, - 0xE003B: 84, - 0xE003C: 84, - 0xE003D: 84, - 0xE003E: 84, - 0xE003F: 84, - 0xE0040: 84, - 0xE0041: 84, - 0xE0042: 84, - 0xE0043: 84, - 0xE0044: 84, - 0xE0045: 84, - 0xE0046: 84, - 0xE0047: 84, - 0xE0048: 84, - 0xE0049: 84, - 0xE004A: 84, - 0xE004B: 84, - 0xE004C: 84, - 0xE004D: 84, - 0xE004E: 84, - 0xE004F: 84, - 0xE0050: 84, - 0xE0051: 84, - 0xE0052: 84, - 0xE0053: 84, - 0xE0054: 84, - 0xE0055: 84, - 0xE0056: 84, - 0xE0057: 84, - 0xE0058: 84, - 0xE0059: 84, - 0xE005A: 84, - 0xE005B: 84, - 0xE005C: 84, - 0xE005D: 84, - 0xE005E: 84, - 0xE005F: 84, - 0xE0060: 84, - 0xE0061: 84, - 0xE0062: 84, - 0xE0063: 84, - 0xE0064: 84, - 0xE0065: 84, - 0xE0066: 84, - 0xE0067: 84, - 0xE0068: 84, - 0xE0069: 84, - 0xE006A: 84, - 0xE006B: 84, - 0xE006C: 84, - 0xE006D: 84, - 0xE006E: 84, - 0xE006F: 84, - 0xE0070: 84, - 0xE0071: 84, - 0xE0072: 84, - 0xE0073: 84, - 0xE0074: 84, - 0xE0075: 84, - 0xE0076: 84, - 0xE0077: 84, - 0xE0078: 84, - 0xE0079: 84, - 0xE007A: 84, - 0xE007B: 84, - 0xE007C: 84, - 0xE007D: 84, - 0xE007E: 84, - 0xE007F: 84, - 0xE0100: 84, - 0xE0101: 84, - 0xE0102: 84, - 0xE0103: 84, - 0xE0104: 84, - 0xE0105: 84, - 0xE0106: 84, - 0xE0107: 84, - 0xE0108: 84, - 0xE0109: 84, - 0xE010A: 84, - 0xE010B: 84, - 0xE010C: 84, - 0xE010D: 84, - 0xE010E: 84, - 0xE010F: 84, - 0xE0110: 84, - 0xE0111: 84, - 0xE0112: 84, - 0xE0113: 84, - 0xE0114: 84, - 0xE0115: 84, - 0xE0116: 84, - 0xE0117: 84, - 0xE0118: 84, - 0xE0119: 84, - 0xE011A: 84, - 0xE011B: 84, - 0xE011C: 84, - 0xE011D: 84, - 0xE011E: 84, - 0xE011F: 84, - 0xE0120: 84, - 0xE0121: 84, - 0xE0122: 84, - 0xE0123: 84, - 0xE0124: 84, - 0xE0125: 84, - 0xE0126: 84, - 0xE0127: 84, - 0xE0128: 84, - 0xE0129: 84, - 0xE012A: 84, - 0xE012B: 84, - 0xE012C: 84, - 0xE012D: 84, - 0xE012E: 84, - 0xE012F: 84, - 0xE0130: 84, - 0xE0131: 84, - 0xE0132: 84, - 0xE0133: 84, - 0xE0134: 84, - 0xE0135: 84, - 0xE0136: 84, - 0xE0137: 84, - 0xE0138: 84, - 0xE0139: 84, - 0xE013A: 84, - 0xE013B: 84, - 0xE013C: 84, - 0xE013D: 84, - 0xE013E: 84, - 0xE013F: 84, - 0xE0140: 84, - 0xE0141: 84, - 0xE0142: 84, - 0xE0143: 84, - 0xE0144: 84, - 0xE0145: 84, - 0xE0146: 84, - 0xE0147: 84, - 0xE0148: 84, - 0xE0149: 84, - 0xE014A: 84, - 0xE014B: 84, - 0xE014C: 84, - 0xE014D: 84, - 0xE014E: 84, - 0xE014F: 84, - 0xE0150: 84, - 0xE0151: 84, - 0xE0152: 84, - 0xE0153: 84, - 0xE0154: 84, - 0xE0155: 84, - 0xE0156: 84, - 0xE0157: 84, - 0xE0158: 84, - 0xE0159: 84, - 0xE015A: 84, - 0xE015B: 84, - 0xE015C: 84, - 0xE015D: 84, - 0xE015E: 84, - 0xE015F: 84, - 0xE0160: 84, - 0xE0161: 84, - 0xE0162: 84, - 0xE0163: 84, - 0xE0164: 84, - 0xE0165: 84, - 0xE0166: 84, - 0xE0167: 84, - 0xE0168: 84, - 0xE0169: 84, - 0xE016A: 84, - 0xE016B: 84, - 0xE016C: 84, - 0xE016D: 84, - 0xE016E: 84, - 0xE016F: 84, - 0xE0170: 84, - 0xE0171: 84, - 0xE0172: 84, - 0xE0173: 84, - 0xE0174: 84, - 0xE0175: 84, - 0xE0176: 84, - 0xE0177: 84, - 0xE0178: 84, - 0xE0179: 84, - 0xE017A: 84, - 0xE017B: 84, - 0xE017C: 84, - 0xE017D: 84, - 0xE017E: 84, - 0xE017F: 84, - 0xE0180: 84, - 0xE0181: 84, - 0xE0182: 84, - 0xE0183: 84, - 0xE0184: 84, - 0xE0185: 84, - 0xE0186: 84, - 0xE0187: 84, - 0xE0188: 84, - 0xE0189: 84, - 0xE018A: 84, - 0xE018B: 84, - 0xE018C: 84, - 0xE018D: 84, - 0xE018E: 84, - 0xE018F: 84, - 0xE0190: 84, - 0xE0191: 84, - 0xE0192: 84, - 0xE0193: 84, - 0xE0194: 84, - 0xE0195: 84, - 0xE0196: 84, - 0xE0197: 84, - 0xE0198: 84, - 0xE0199: 84, - 0xE019A: 84, - 0xE019B: 84, - 0xE019C: 84, - 0xE019D: 84, - 0xE019E: 84, - 0xE019F: 84, - 0xE01A0: 84, - 0xE01A1: 84, - 0xE01A2: 84, - 0xE01A3: 84, - 0xE01A4: 84, - 0xE01A5: 84, - 0xE01A6: 84, - 0xE01A7: 84, - 0xE01A8: 84, - 0xE01A9: 84, - 0xE01AA: 84, - 0xE01AB: 84, - 0xE01AC: 84, - 0xE01AD: 84, - 0xE01AE: 84, - 0xE01AF: 84, - 0xE01B0: 84, - 0xE01B1: 84, - 0xE01B2: 84, - 0xE01B3: 84, - 0xE01B4: 84, - 0xE01B5: 84, - 0xE01B6: 84, - 0xE01B7: 84, - 0xE01B8: 84, - 0xE01B9: 84, - 0xE01BA: 84, - 0xE01BB: 84, - 0xE01BC: 84, - 0xE01BD: 84, - 0xE01BE: 84, - 0xE01BF: 84, - 0xE01C0: 84, - 0xE01C1: 84, - 0xE01C2: 84, - 0xE01C3: 84, - 0xE01C4: 84, - 0xE01C5: 84, - 0xE01C6: 84, - 0xE01C7: 84, - 0xE01C8: 84, - 0xE01C9: 84, - 0xE01CA: 84, - 0xE01CB: 84, - 0xE01CC: 84, - 0xE01CD: 84, - 0xE01CE: 84, - 0xE01CF: 84, - 0xE01D0: 84, - 0xE01D1: 84, - 0xE01D2: 84, - 0xE01D3: 84, - 0xE01D4: 84, - 0xE01D5: 84, - 0xE01D6: 84, - 0xE01D7: 84, - 0xE01D8: 84, - 0xE01D9: 84, - 0xE01DA: 84, - 0xE01DB: 84, - 0xE01DC: 84, - 0xE01DD: 84, - 0xE01DE: 84, - 0xE01DF: 84, - 0xE01E0: 84, - 0xE01E1: 84, - 0xE01E2: 84, - 0xE01E3: 84, - 0xE01E4: 84, - 0xE01E5: 84, - 0xE01E6: 84, - 0xE01E7: 84, - 0xE01E8: 84, - 0xE01E9: 84, - 0xE01EA: 84, - 0xE01EB: 84, - 0xE01EC: 84, - 0xE01ED: 84, - 0xE01EE: 84, - 0xE01EF: 84, -} -codepoint_classes = { - "PVALID": ( - 0x2D0000002E, - 0x300000003A, - 0x610000007B, - 0xDF000000F7, - 0xF800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010A, - 0x10B0000010C, - 0x10D0000010E, - 0x10F00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011A, - 0x11B0000011C, - 0x11D0000011E, - 0x11F00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012A, - 0x12B0000012C, - 0x12D0000012E, - 0x12F00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13A0000013B, - 0x13C0000013D, - 0x13E0000013F, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14B0000014C, - 0x14D0000014E, - 0x14F00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015A, - 0x15B0000015C, - 0x15D0000015E, - 0x15F00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016A, - 0x16B0000016C, - 0x16D0000016E, - 0x16F00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17A0000017B, - 0x17C0000017D, - 0x17E0000017F, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18C0000018E, - 0x19200000193, - 0x19500000196, - 0x1990000019C, - 0x19E0000019F, - 0x1A1000001A2, - 0x1A3000001A4, - 0x1A5000001A6, - 0x1A8000001A9, - 0x1AA000001AC, - 0x1AD000001AE, - 0x1B0000001B1, - 0x1B4000001B5, - 0x1B6000001B7, - 0x1B9000001BC, - 0x1BD000001C4, - 0x1CE000001CF, - 0x1D0000001D1, - 0x1D2000001D3, - 0x1D4000001D5, - 0x1D6000001D7, - 0x1D8000001D9, - 0x1DA000001DB, - 0x1DC000001DE, - 0x1DF000001E0, - 0x1E1000001E2, - 0x1E3000001E4, - 0x1E5000001E6, - 0x1E7000001E8, - 0x1E9000001EA, - 0x1EB000001EC, - 0x1ED000001EE, - 0x1EF000001F1, - 0x1F5000001F6, - 0x1F9000001FA, - 0x1FB000001FC, - 0x1FD000001FE, - 0x1FF00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020A, - 0x20B0000020C, - 0x20D0000020E, - 0x20F00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021A, - 0x21B0000021C, - 0x21D0000021E, - 0x21F00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022A, - 0x22B0000022C, - 0x22D0000022E, - 0x22F00000230, - 0x23100000232, - 0x2330000023A, - 0x23C0000023D, - 0x23F00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024A, - 0x24B0000024C, - 0x24D0000024E, - 0x24F000002B0, - 0x2B9000002C2, - 0x2C6000002D2, - 0x2EC000002ED, - 0x2EE000002EF, - 0x30000000340, - 0x34200000343, - 0x3460000034F, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37B0000037E, - 0x39000000391, - 0x3AC000003CF, - 0x3D7000003D8, - 0x3D9000003DA, - 0x3DB000003DC, - 0x3DD000003DE, - 0x3DF000003E0, - 0x3E1000003E2, - 0x3E3000003E4, - 0x3E5000003E6, - 0x3E7000003E8, - 0x3E9000003EA, - 0x3EB000003EC, - 0x3ED000003EE, - 0x3EF000003F0, - 0x3F3000003F4, - 0x3F8000003F9, - 0x3FB000003FD, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046A, - 0x46B0000046C, - 0x46D0000046E, - 0x46F00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047A, - 0x47B0000047C, - 0x47D0000047E, - 0x47F00000480, - 0x48100000482, - 0x48300000488, - 0x48B0000048C, - 0x48D0000048E, - 0x48F00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049A, - 0x49B0000049C, - 0x49D0000049E, - 0x49F000004A0, - 0x4A1000004A2, - 0x4A3000004A4, - 0x4A5000004A6, - 0x4A7000004A8, - 0x4A9000004AA, - 0x4AB000004AC, - 0x4AD000004AE, - 0x4AF000004B0, - 0x4B1000004B2, - 0x4B3000004B4, - 0x4B5000004B6, - 0x4B7000004B8, - 0x4B9000004BA, - 0x4BB000004BC, - 0x4BD000004BE, - 0x4BF000004C0, - 0x4C2000004C3, - 0x4C4000004C5, - 0x4C6000004C7, - 0x4C8000004C9, - 0x4CA000004CB, - 0x4CC000004CD, - 0x4CE000004D0, - 0x4D1000004D2, - 0x4D3000004D4, - 0x4D5000004D6, - 0x4D7000004D8, - 0x4D9000004DA, - 0x4DB000004DC, - 0x4DD000004DE, - 0x4DF000004E0, - 0x4E1000004E2, - 0x4E3000004E4, - 0x4E5000004E6, - 0x4E7000004E8, - 0x4E9000004EA, - 0x4EB000004EC, - 0x4ED000004EE, - 0x4EF000004F0, - 0x4F1000004F2, - 0x4F3000004F4, - 0x4F5000004F6, - 0x4F7000004F8, - 0x4F9000004FA, - 0x4FB000004FC, - 0x4FD000004FE, - 0x4FF00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050A, - 0x50B0000050C, - 0x50D0000050E, - 0x50F00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051A, - 0x51B0000051C, - 0x51D0000051E, - 0x51F00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5290000052A, - 0x52B0000052C, - 0x52D0000052E, - 0x52F00000530, - 0x5590000055A, - 0x56000000587, - 0x58800000589, - 0x591000005BE, - 0x5BF000005C0, - 0x5C1000005C3, - 0x5C4000005C6, - 0x5C7000005C8, - 0x5D0000005EB, - 0x5EF000005F3, - 0x6100000061B, - 0x62000000640, - 0x64100000660, - 0x66E00000675, - 0x679000006D4, - 0x6D5000006DD, - 0x6DF000006E9, - 0x6EA000006F0, - 0x6FA00000700, - 0x7100000074B, - 0x74D000007B2, - 0x7C0000007F6, - 0x7FD000007FE, - 0x8000000082E, - 0x8400000085C, - 0x8600000086B, - 0x87000000888, - 0x8890000088F, - 0x898000008E2, - 0x8E300000958, - 0x96000000964, - 0x96600000970, - 0x97100000984, - 0x9850000098D, - 0x98F00000991, - 0x993000009A9, - 0x9AA000009B1, - 0x9B2000009B3, - 0x9B6000009BA, - 0x9BC000009C5, - 0x9C7000009C9, - 0x9CB000009CF, - 0x9D7000009D8, - 0x9E0000009E4, - 0x9E6000009F2, - 0x9FC000009FD, - 0x9FE000009FF, - 0xA0100000A04, - 0xA0500000A0B, - 0xA0F00000A11, - 0xA1300000A29, - 0xA2A00000A31, - 0xA3200000A33, - 0xA3500000A36, - 0xA3800000A3A, - 0xA3C00000A3D, - 0xA3E00000A43, - 0xA4700000A49, - 0xA4B00000A4E, - 0xA5100000A52, - 0xA5C00000A5D, - 0xA6600000A76, - 0xA8100000A84, - 0xA8500000A8E, - 0xA8F00000A92, - 0xA9300000AA9, - 0xAAA00000AB1, - 0xAB200000AB4, - 0xAB500000ABA, - 0xABC00000AC6, - 0xAC700000ACA, - 0xACB00000ACE, - 0xAD000000AD1, - 0xAE000000AE4, - 0xAE600000AF0, - 0xAF900000B00, - 0xB0100000B04, - 0xB0500000B0D, - 0xB0F00000B11, - 0xB1300000B29, - 0xB2A00000B31, - 0xB3200000B34, - 0xB3500000B3A, - 0xB3C00000B45, - 0xB4700000B49, - 0xB4B00000B4E, - 0xB5500000B58, - 0xB5F00000B64, - 0xB6600000B70, - 0xB7100000B72, - 0xB8200000B84, - 0xB8500000B8B, - 0xB8E00000B91, - 0xB9200000B96, - 0xB9900000B9B, - 0xB9C00000B9D, - 0xB9E00000BA0, - 0xBA300000BA5, - 0xBA800000BAB, - 0xBAE00000BBA, - 0xBBE00000BC3, - 0xBC600000BC9, - 0xBCA00000BCE, - 0xBD000000BD1, - 0xBD700000BD8, - 0xBE600000BF0, - 0xC0000000C0D, - 0xC0E00000C11, - 0xC1200000C29, - 0xC2A00000C3A, - 0xC3C00000C45, - 0xC4600000C49, - 0xC4A00000C4E, - 0xC5500000C57, - 0xC5800000C5B, - 0xC5D00000C5E, - 0xC6000000C64, - 0xC6600000C70, - 0xC8000000C84, - 0xC8500000C8D, - 0xC8E00000C91, - 0xC9200000CA9, - 0xCAA00000CB4, - 0xCB500000CBA, - 0xCBC00000CC5, - 0xCC600000CC9, - 0xCCA00000CCE, - 0xCD500000CD7, - 0xCDD00000CDF, - 0xCE000000CE4, - 0xCE600000CF0, - 0xCF100000CF4, - 0xD0000000D0D, - 0xD0E00000D11, - 0xD1200000D45, - 0xD4600000D49, - 0xD4A00000D4F, - 0xD5400000D58, - 0xD5F00000D64, - 0xD6600000D70, - 0xD7A00000D80, - 0xD8100000D84, - 0xD8500000D97, - 0xD9A00000DB2, - 0xDB300000DBC, - 0xDBD00000DBE, - 0xDC000000DC7, - 0xDCA00000DCB, - 0xDCF00000DD5, - 0xDD600000DD7, - 0xDD800000DE0, - 0xDE600000DF0, - 0xDF200000DF4, - 0xE0100000E33, - 0xE3400000E3B, - 0xE4000000E4F, - 0xE5000000E5A, - 0xE8100000E83, - 0xE8400000E85, - 0xE8600000E8B, - 0xE8C00000EA4, - 0xEA500000EA6, - 0xEA700000EB3, - 0xEB400000EBE, - 0xEC000000EC5, - 0xEC600000EC7, - 0xEC800000ECF, - 0xED000000EDA, - 0xEDE00000EE0, - 0xF0000000F01, - 0xF0B00000F0C, - 0xF1800000F1A, - 0xF2000000F2A, - 0xF3500000F36, - 0xF3700000F38, - 0xF3900000F3A, - 0xF3E00000F43, - 0xF4400000F48, - 0xF4900000F4D, - 0xF4E00000F52, - 0xF5300000F57, - 0xF5800000F5C, - 0xF5D00000F69, - 0xF6A00000F6D, - 0xF7100000F73, - 0xF7400000F75, - 0xF7A00000F81, - 0xF8200000F85, - 0xF8600000F93, - 0xF9400000F98, - 0xF9900000F9D, - 0xF9E00000FA2, - 0xFA300000FA7, - 0xFA800000FAC, - 0xFAD00000FB9, - 0xFBA00000FBD, - 0xFC600000FC7, - 0x10000000104A, - 0x10500000109E, - 0x10D0000010FB, - 0x10FD00001100, - 0x120000001249, - 0x124A0000124E, - 0x125000001257, - 0x125800001259, - 0x125A0000125E, - 0x126000001289, - 0x128A0000128E, - 0x1290000012B1, - 0x12B2000012B6, - 0x12B8000012BF, - 0x12C0000012C1, - 0x12C2000012C6, - 0x12C8000012D7, - 0x12D800001311, - 0x131200001316, - 0x13180000135B, - 0x135D00001360, - 0x138000001390, - 0x13A0000013F6, - 0x14010000166D, - 0x166F00001680, - 0x16810000169B, - 0x16A0000016EB, - 0x16F1000016F9, - 0x170000001716, - 0x171F00001735, - 0x174000001754, - 0x17600000176D, - 0x176E00001771, - 0x177200001774, - 0x1780000017B4, - 0x17B6000017D4, - 0x17D7000017D8, - 0x17DC000017DE, - 0x17E0000017EA, - 0x18100000181A, - 0x182000001879, - 0x1880000018AB, - 0x18B0000018F6, - 0x19000000191F, - 0x19200000192C, - 0x19300000193C, - 0x19460000196E, - 0x197000001975, - 0x1980000019AC, - 0x19B0000019CA, - 0x19D0000019DA, - 0x1A0000001A1C, - 0x1A2000001A5F, - 0x1A6000001A7D, - 0x1A7F00001A8A, - 0x1A9000001A9A, - 0x1AA700001AA8, - 0x1AB000001ABE, - 0x1ABF00001ACF, - 0x1B0000001B4D, - 0x1B5000001B5A, - 0x1B6B00001B74, - 0x1B8000001BF4, - 0x1C0000001C38, - 0x1C4000001C4A, - 0x1C4D00001C7E, - 0x1CD000001CD3, - 0x1CD400001CFB, - 0x1D0000001D2C, - 0x1D2F00001D30, - 0x1D3B00001D3C, - 0x1D4E00001D4F, - 0x1D6B00001D78, - 0x1D7900001D9B, - 0x1DC000001E00, - 0x1E0100001E02, - 0x1E0300001E04, - 0x1E0500001E06, - 0x1E0700001E08, - 0x1E0900001E0A, - 0x1E0B00001E0C, - 0x1E0D00001E0E, - 0x1E0F00001E10, - 0x1E1100001E12, - 0x1E1300001E14, - 0x1E1500001E16, - 0x1E1700001E18, - 0x1E1900001E1A, - 0x1E1B00001E1C, - 0x1E1D00001E1E, - 0x1E1F00001E20, - 0x1E2100001E22, - 0x1E2300001E24, - 0x1E2500001E26, - 0x1E2700001E28, - 0x1E2900001E2A, - 0x1E2B00001E2C, - 0x1E2D00001E2E, - 0x1E2F00001E30, - 0x1E3100001E32, - 0x1E3300001E34, - 0x1E3500001E36, - 0x1E3700001E38, - 0x1E3900001E3A, - 0x1E3B00001E3C, - 0x1E3D00001E3E, - 0x1E3F00001E40, - 0x1E4100001E42, - 0x1E4300001E44, - 0x1E4500001E46, - 0x1E4700001E48, - 0x1E4900001E4A, - 0x1E4B00001E4C, - 0x1E4D00001E4E, - 0x1E4F00001E50, - 0x1E5100001E52, - 0x1E5300001E54, - 0x1E5500001E56, - 0x1E5700001E58, - 0x1E5900001E5A, - 0x1E5B00001E5C, - 0x1E5D00001E5E, - 0x1E5F00001E60, - 0x1E6100001E62, - 0x1E6300001E64, - 0x1E6500001E66, - 0x1E6700001E68, - 0x1E6900001E6A, - 0x1E6B00001E6C, - 0x1E6D00001E6E, - 0x1E6F00001E70, - 0x1E7100001E72, - 0x1E7300001E74, - 0x1E7500001E76, - 0x1E7700001E78, - 0x1E7900001E7A, - 0x1E7B00001E7C, - 0x1E7D00001E7E, - 0x1E7F00001E80, - 0x1E8100001E82, - 0x1E8300001E84, - 0x1E8500001E86, - 0x1E8700001E88, - 0x1E8900001E8A, - 0x1E8B00001E8C, - 0x1E8D00001E8E, - 0x1E8F00001E90, - 0x1E9100001E92, - 0x1E9300001E94, - 0x1E9500001E9A, - 0x1E9C00001E9E, - 0x1E9F00001EA0, - 0x1EA100001EA2, - 0x1EA300001EA4, - 0x1EA500001EA6, - 0x1EA700001EA8, - 0x1EA900001EAA, - 0x1EAB00001EAC, - 0x1EAD00001EAE, - 0x1EAF00001EB0, - 0x1EB100001EB2, - 0x1EB300001EB4, - 0x1EB500001EB6, - 0x1EB700001EB8, - 0x1EB900001EBA, - 0x1EBB00001EBC, - 0x1EBD00001EBE, - 0x1EBF00001EC0, - 0x1EC100001EC2, - 0x1EC300001EC4, - 0x1EC500001EC6, - 0x1EC700001EC8, - 0x1EC900001ECA, - 0x1ECB00001ECC, - 0x1ECD00001ECE, - 0x1ECF00001ED0, - 0x1ED100001ED2, - 0x1ED300001ED4, - 0x1ED500001ED6, - 0x1ED700001ED8, - 0x1ED900001EDA, - 0x1EDB00001EDC, - 0x1EDD00001EDE, - 0x1EDF00001EE0, - 0x1EE100001EE2, - 0x1EE300001EE4, - 0x1EE500001EE6, - 0x1EE700001EE8, - 0x1EE900001EEA, - 0x1EEB00001EEC, - 0x1EED00001EEE, - 0x1EEF00001EF0, - 0x1EF100001EF2, - 0x1EF300001EF4, - 0x1EF500001EF6, - 0x1EF700001EF8, - 0x1EF900001EFA, - 0x1EFB00001EFC, - 0x1EFD00001EFE, - 0x1EFF00001F08, - 0x1F1000001F16, - 0x1F2000001F28, - 0x1F3000001F38, - 0x1F4000001F46, - 0x1F5000001F58, - 0x1F6000001F68, - 0x1F7000001F71, - 0x1F7200001F73, - 0x1F7400001F75, - 0x1F7600001F77, - 0x1F7800001F79, - 0x1F7A00001F7B, - 0x1F7C00001F7D, - 0x1FB000001FB2, - 0x1FB600001FB7, - 0x1FC600001FC7, - 0x1FD000001FD3, - 0x1FD600001FD8, - 0x1FE000001FE3, - 0x1FE400001FE8, - 0x1FF600001FF7, - 0x214E0000214F, - 0x218400002185, - 0x2C3000002C60, - 0x2C6100002C62, - 0x2C6500002C67, - 0x2C6800002C69, - 0x2C6A00002C6B, - 0x2C6C00002C6D, - 0x2C7100002C72, - 0x2C7300002C75, - 0x2C7600002C7C, - 0x2C8100002C82, - 0x2C8300002C84, - 0x2C8500002C86, - 0x2C8700002C88, - 0x2C8900002C8A, - 0x2C8B00002C8C, - 0x2C8D00002C8E, - 0x2C8F00002C90, - 0x2C9100002C92, - 0x2C9300002C94, - 0x2C9500002C96, - 0x2C9700002C98, - 0x2C9900002C9A, - 0x2C9B00002C9C, - 0x2C9D00002C9E, - 0x2C9F00002CA0, - 0x2CA100002CA2, - 0x2CA300002CA4, - 0x2CA500002CA6, - 0x2CA700002CA8, - 0x2CA900002CAA, - 0x2CAB00002CAC, - 0x2CAD00002CAE, - 0x2CAF00002CB0, - 0x2CB100002CB2, - 0x2CB300002CB4, - 0x2CB500002CB6, - 0x2CB700002CB8, - 0x2CB900002CBA, - 0x2CBB00002CBC, - 0x2CBD00002CBE, - 0x2CBF00002CC0, - 0x2CC100002CC2, - 0x2CC300002CC4, - 0x2CC500002CC6, - 0x2CC700002CC8, - 0x2CC900002CCA, - 0x2CCB00002CCC, - 0x2CCD00002CCE, - 0x2CCF00002CD0, - 0x2CD100002CD2, - 0x2CD300002CD4, - 0x2CD500002CD6, - 0x2CD700002CD8, - 0x2CD900002CDA, - 0x2CDB00002CDC, - 0x2CDD00002CDE, - 0x2CDF00002CE0, - 0x2CE100002CE2, - 0x2CE300002CE5, - 0x2CEC00002CED, - 0x2CEE00002CF2, - 0x2CF300002CF4, - 0x2D0000002D26, - 0x2D2700002D28, - 0x2D2D00002D2E, - 0x2D3000002D68, - 0x2D7F00002D97, - 0x2DA000002DA7, - 0x2DA800002DAF, - 0x2DB000002DB7, - 0x2DB800002DBF, - 0x2DC000002DC7, - 0x2DC800002DCF, - 0x2DD000002DD7, - 0x2DD800002DDF, - 0x2DE000002E00, - 0x2E2F00002E30, - 0x300500003008, - 0x302A0000302E, - 0x303C0000303D, - 0x304100003097, - 0x30990000309B, - 0x309D0000309F, - 0x30A1000030FB, - 0x30FC000030FF, - 0x310500003130, - 0x31A0000031C0, - 0x31F000003200, - 0x340000004DC0, - 0x4E000000A48D, - 0xA4D00000A4FE, - 0xA5000000A60D, - 0xA6100000A62C, - 0xA6410000A642, - 0xA6430000A644, - 0xA6450000A646, - 0xA6470000A648, - 0xA6490000A64A, - 0xA64B0000A64C, - 0xA64D0000A64E, - 0xA64F0000A650, - 0xA6510000A652, - 0xA6530000A654, - 0xA6550000A656, - 0xA6570000A658, - 0xA6590000A65A, - 0xA65B0000A65C, - 0xA65D0000A65E, - 0xA65F0000A660, - 0xA6610000A662, - 0xA6630000A664, - 0xA6650000A666, - 0xA6670000A668, - 0xA6690000A66A, - 0xA66B0000A66C, - 0xA66D0000A670, - 0xA6740000A67E, - 0xA67F0000A680, - 0xA6810000A682, - 0xA6830000A684, - 0xA6850000A686, - 0xA6870000A688, - 0xA6890000A68A, - 0xA68B0000A68C, - 0xA68D0000A68E, - 0xA68F0000A690, - 0xA6910000A692, - 0xA6930000A694, - 0xA6950000A696, - 0xA6970000A698, - 0xA6990000A69A, - 0xA69B0000A69C, - 0xA69E0000A6E6, - 0xA6F00000A6F2, - 0xA7170000A720, - 0xA7230000A724, - 0xA7250000A726, - 0xA7270000A728, - 0xA7290000A72A, - 0xA72B0000A72C, - 0xA72D0000A72E, - 0xA72F0000A732, - 0xA7330000A734, - 0xA7350000A736, - 0xA7370000A738, - 0xA7390000A73A, - 0xA73B0000A73C, - 0xA73D0000A73E, - 0xA73F0000A740, - 0xA7410000A742, - 0xA7430000A744, - 0xA7450000A746, - 0xA7470000A748, - 0xA7490000A74A, - 0xA74B0000A74C, - 0xA74D0000A74E, - 0xA74F0000A750, - 0xA7510000A752, - 0xA7530000A754, - 0xA7550000A756, - 0xA7570000A758, - 0xA7590000A75A, - 0xA75B0000A75C, - 0xA75D0000A75E, - 0xA75F0000A760, - 0xA7610000A762, - 0xA7630000A764, - 0xA7650000A766, - 0xA7670000A768, - 0xA7690000A76A, - 0xA76B0000A76C, - 0xA76D0000A76E, - 0xA76F0000A770, - 0xA7710000A779, - 0xA77A0000A77B, - 0xA77C0000A77D, - 0xA77F0000A780, - 0xA7810000A782, - 0xA7830000A784, - 0xA7850000A786, - 0xA7870000A789, - 0xA78C0000A78D, - 0xA78E0000A790, - 0xA7910000A792, - 0xA7930000A796, - 0xA7970000A798, - 0xA7990000A79A, - 0xA79B0000A79C, - 0xA79D0000A79E, - 0xA79F0000A7A0, - 0xA7A10000A7A2, - 0xA7A30000A7A4, - 0xA7A50000A7A6, - 0xA7A70000A7A8, - 0xA7A90000A7AA, - 0xA7AF0000A7B0, - 0xA7B50000A7B6, - 0xA7B70000A7B8, - 0xA7B90000A7BA, - 0xA7BB0000A7BC, - 0xA7BD0000A7BE, - 0xA7BF0000A7C0, - 0xA7C10000A7C2, - 0xA7C30000A7C4, - 0xA7C80000A7C9, - 0xA7CA0000A7CB, - 0xA7D10000A7D2, - 0xA7D30000A7D4, - 0xA7D50000A7D6, - 0xA7D70000A7D8, - 0xA7D90000A7DA, - 0xA7F60000A7F8, - 0xA7FA0000A828, - 0xA82C0000A82D, - 0xA8400000A874, - 0xA8800000A8C6, - 0xA8D00000A8DA, - 0xA8E00000A8F8, - 0xA8FB0000A8FC, - 0xA8FD0000A92E, - 0xA9300000A954, - 0xA9800000A9C1, - 0xA9CF0000A9DA, - 0xA9E00000A9FF, - 0xAA000000AA37, - 0xAA400000AA4E, - 0xAA500000AA5A, - 0xAA600000AA77, - 0xAA7A0000AAC3, - 0xAADB0000AADE, - 0xAAE00000AAF0, - 0xAAF20000AAF7, - 0xAB010000AB07, - 0xAB090000AB0F, - 0xAB110000AB17, - 0xAB200000AB27, - 0xAB280000AB2F, - 0xAB300000AB5B, - 0xAB600000AB69, - 0xABC00000ABEB, - 0xABEC0000ABEE, - 0xABF00000ABFA, - 0xAC000000D7A4, - 0xFA0E0000FA10, - 0xFA110000FA12, - 0xFA130000FA15, - 0xFA1F0000FA20, - 0xFA210000FA22, - 0xFA230000FA25, - 0xFA270000FA2A, - 0xFB1E0000FB1F, - 0xFE200000FE30, - 0xFE730000FE74, - 0x100000001000C, - 0x1000D00010027, - 0x100280001003B, - 0x1003C0001003E, - 0x1003F0001004E, - 0x100500001005E, - 0x10080000100FB, - 0x101FD000101FE, - 0x102800001029D, - 0x102A0000102D1, - 0x102E0000102E1, - 0x1030000010320, - 0x1032D00010341, - 0x103420001034A, - 0x103500001037B, - 0x103800001039E, - 0x103A0000103C4, - 0x103C8000103D0, - 0x104280001049E, - 0x104A0000104AA, - 0x104D8000104FC, - 0x1050000010528, - 0x1053000010564, - 0x10597000105A2, - 0x105A3000105B2, - 0x105B3000105BA, - 0x105BB000105BD, - 0x1060000010737, - 0x1074000010756, - 0x1076000010768, - 0x1078000010781, - 0x1080000010806, - 0x1080800010809, - 0x1080A00010836, - 0x1083700010839, - 0x1083C0001083D, - 0x1083F00010856, - 0x1086000010877, - 0x108800001089F, - 0x108E0000108F3, - 0x108F4000108F6, - 0x1090000010916, - 0x109200001093A, - 0x10980000109B8, - 0x109BE000109C0, - 0x10A0000010A04, - 0x10A0500010A07, - 0x10A0C00010A14, - 0x10A1500010A18, - 0x10A1900010A36, - 0x10A3800010A3B, - 0x10A3F00010A40, - 0x10A6000010A7D, - 0x10A8000010A9D, - 0x10AC000010AC8, - 0x10AC900010AE7, - 0x10B0000010B36, - 0x10B4000010B56, - 0x10B6000010B73, - 0x10B8000010B92, - 0x10C0000010C49, - 0x10CC000010CF3, - 0x10D0000010D28, - 0x10D3000010D3A, - 0x10E8000010EAA, - 0x10EAB00010EAD, - 0x10EB000010EB2, - 0x10EFD00010F1D, - 0x10F2700010F28, - 0x10F3000010F51, - 0x10F7000010F86, - 0x10FB000010FC5, - 0x10FE000010FF7, - 0x1100000011047, - 0x1106600011076, - 0x1107F000110BB, - 0x110C2000110C3, - 0x110D0000110E9, - 0x110F0000110FA, - 0x1110000011135, - 0x1113600011140, - 0x1114400011148, - 0x1115000011174, - 0x1117600011177, - 0x11180000111C5, - 0x111C9000111CD, - 0x111CE000111DB, - 0x111DC000111DD, - 0x1120000011212, - 0x1121300011238, - 0x1123E00011242, - 0x1128000011287, - 0x1128800011289, - 0x1128A0001128E, - 0x1128F0001129E, - 0x1129F000112A9, - 0x112B0000112EB, - 0x112F0000112FA, - 0x1130000011304, - 0x113050001130D, - 0x1130F00011311, - 0x1131300011329, - 0x1132A00011331, - 0x1133200011334, - 0x113350001133A, - 0x1133B00011345, - 0x1134700011349, - 0x1134B0001134E, - 0x1135000011351, - 0x1135700011358, - 0x1135D00011364, - 0x113660001136D, - 0x1137000011375, - 0x114000001144B, - 0x114500001145A, - 0x1145E00011462, - 0x11480000114C6, - 0x114C7000114C8, - 0x114D0000114DA, - 0x11580000115B6, - 0x115B8000115C1, - 0x115D8000115DE, - 0x1160000011641, - 0x1164400011645, - 0x116500001165A, - 0x11680000116B9, - 0x116C0000116CA, - 0x117000001171B, - 0x1171D0001172C, - 0x117300001173A, - 0x1174000011747, - 0x118000001183B, - 0x118C0000118EA, - 0x118FF00011907, - 0x119090001190A, - 0x1190C00011914, - 0x1191500011917, - 0x1191800011936, - 0x1193700011939, - 0x1193B00011944, - 0x119500001195A, - 0x119A0000119A8, - 0x119AA000119D8, - 0x119DA000119E2, - 0x119E3000119E5, - 0x11A0000011A3F, - 0x11A4700011A48, - 0x11A5000011A9A, - 0x11A9D00011A9E, - 0x11AB000011AF9, - 0x11C0000011C09, - 0x11C0A00011C37, - 0x11C3800011C41, - 0x11C5000011C5A, - 0x11C7200011C90, - 0x11C9200011CA8, - 0x11CA900011CB7, - 0x11D0000011D07, - 0x11D0800011D0A, - 0x11D0B00011D37, - 0x11D3A00011D3B, - 0x11D3C00011D3E, - 0x11D3F00011D48, - 0x11D5000011D5A, - 0x11D6000011D66, - 0x11D6700011D69, - 0x11D6A00011D8F, - 0x11D9000011D92, - 0x11D9300011D99, - 0x11DA000011DAA, - 0x11EE000011EF7, - 0x11F0000011F11, - 0x11F1200011F3B, - 0x11F3E00011F43, - 0x11F5000011F5A, - 0x11FB000011FB1, - 0x120000001239A, - 0x1248000012544, - 0x12F9000012FF1, - 0x1300000013430, - 0x1344000013456, - 0x1440000014647, - 0x1680000016A39, - 0x16A4000016A5F, - 0x16A6000016A6A, - 0x16A7000016ABF, - 0x16AC000016ACA, - 0x16AD000016AEE, - 0x16AF000016AF5, - 0x16B0000016B37, - 0x16B4000016B44, - 0x16B5000016B5A, - 0x16B6300016B78, - 0x16B7D00016B90, - 0x16E6000016E80, - 0x16F0000016F4B, - 0x16F4F00016F88, - 0x16F8F00016FA0, - 0x16FE000016FE2, - 0x16FE300016FE5, - 0x16FF000016FF2, - 0x17000000187F8, - 0x1880000018CD6, - 0x18D0000018D09, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B123, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1B1550001B156, - 0x1B1640001B168, - 0x1B1700001B2FC, - 0x1BC000001BC6B, - 0x1BC700001BC7D, - 0x1BC800001BC89, - 0x1BC900001BC9A, - 0x1BC9D0001BC9F, - 0x1CF000001CF2E, - 0x1CF300001CF47, - 0x1DA000001DA37, - 0x1DA3B0001DA6D, - 0x1DA750001DA76, - 0x1DA840001DA85, - 0x1DA9B0001DAA0, - 0x1DAA10001DAB0, - 0x1DF000001DF1F, - 0x1DF250001DF2B, - 0x1E0000001E007, - 0x1E0080001E019, - 0x1E01B0001E022, - 0x1E0230001E025, - 0x1E0260001E02B, - 0x1E08F0001E090, - 0x1E1000001E12D, - 0x1E1300001E13E, - 0x1E1400001E14A, - 0x1E14E0001E14F, - 0x1E2900001E2AF, - 0x1E2C00001E2FA, - 0x1E4D00001E4FA, - 0x1E7E00001E7E7, - 0x1E7E80001E7EC, - 0x1E7ED0001E7EF, - 0x1E7F00001E7FF, - 0x1E8000001E8C5, - 0x1E8D00001E8D7, - 0x1E9220001E94C, - 0x1E9500001E95A, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x300000003134B, - 0x31350000323B0, - ), - "CONTEXTJ": (0x200C0000200E,), - "CONTEXTO": ( - 0xB7000000B8, - 0x37500000376, - 0x5F3000005F5, - 0x6600000066A, - 0x6F0000006FA, - 0x30FB000030FC, - ), -} diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py deleted file mode 100644 index 7bfaa8d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect -from typing import List, Tuple - - -def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i + 1 < len(sorted_list): - if sorted_list[i] == sorted_list[i + 1] - 1: - continue - current_range = sorted_list[last_write + 1 : i + 1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - - -def _encode_range(start: int, end: int) -> int: - return (start << 32) | end - - -def _decode_range(r: int) -> Tuple[int, int]: - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos - 1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py deleted file mode 100644 index 514ff7e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "3.10" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py b/myenv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py deleted file mode 100644 index eb89432..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py +++ /dev/null @@ -1,8681 +0,0 @@ -# This file is automatically generated by tools/idna-data -# vim: set fileencoding=utf-8 : - -from typing import List, Tuple, Union - -"""IDNA Mapping Table from UTS46.""" - - -__version__ = "15.1.0" - - -def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x0, "3"), - (0x1, "3"), - (0x2, "3"), - (0x3, "3"), - (0x4, "3"), - (0x5, "3"), - (0x6, "3"), - (0x7, "3"), - (0x8, "3"), - (0x9, "3"), - (0xA, "3"), - (0xB, "3"), - (0xC, "3"), - (0xD, "3"), - (0xE, "3"), - (0xF, "3"), - (0x10, "3"), - (0x11, "3"), - (0x12, "3"), - (0x13, "3"), - (0x14, "3"), - (0x15, "3"), - (0x16, "3"), - (0x17, "3"), - (0x18, "3"), - (0x19, "3"), - (0x1A, "3"), - (0x1B, "3"), - (0x1C, "3"), - (0x1D, "3"), - (0x1E, "3"), - (0x1F, "3"), - (0x20, "3"), - (0x21, "3"), - (0x22, "3"), - (0x23, "3"), - (0x24, "3"), - (0x25, "3"), - (0x26, "3"), - (0x27, "3"), - (0x28, "3"), - (0x29, "3"), - (0x2A, "3"), - (0x2B, "3"), - (0x2C, "3"), - (0x2D, "V"), - (0x2E, "V"), - (0x2F, "3"), - (0x30, "V"), - (0x31, "V"), - (0x32, "V"), - (0x33, "V"), - (0x34, "V"), - (0x35, "V"), - (0x36, "V"), - (0x37, "V"), - (0x38, "V"), - (0x39, "V"), - (0x3A, "3"), - (0x3B, "3"), - (0x3C, "3"), - (0x3D, "3"), - (0x3E, "3"), - (0x3F, "3"), - (0x40, "3"), - (0x41, "M", "a"), - (0x42, "M", "b"), - (0x43, "M", "c"), - (0x44, "M", "d"), - (0x45, "M", "e"), - (0x46, "M", "f"), - (0x47, "M", "g"), - (0x48, "M", "h"), - (0x49, "M", "i"), - (0x4A, "M", "j"), - (0x4B, "M", "k"), - (0x4C, "M", "l"), - (0x4D, "M", "m"), - (0x4E, "M", "n"), - (0x4F, "M", "o"), - (0x50, "M", "p"), - (0x51, "M", "q"), - (0x52, "M", "r"), - (0x53, "M", "s"), - (0x54, "M", "t"), - (0x55, "M", "u"), - (0x56, "M", "v"), - (0x57, "M", "w"), - (0x58, "M", "x"), - (0x59, "M", "y"), - (0x5A, "M", "z"), - (0x5B, "3"), - (0x5C, "3"), - (0x5D, "3"), - (0x5E, "3"), - (0x5F, "3"), - (0x60, "3"), - (0x61, "V"), - (0x62, "V"), - (0x63, "V"), - ] - - -def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x64, "V"), - (0x65, "V"), - (0x66, "V"), - (0x67, "V"), - (0x68, "V"), - (0x69, "V"), - (0x6A, "V"), - (0x6B, "V"), - (0x6C, "V"), - (0x6D, "V"), - (0x6E, "V"), - (0x6F, "V"), - (0x70, "V"), - (0x71, "V"), - (0x72, "V"), - (0x73, "V"), - (0x74, "V"), - (0x75, "V"), - (0x76, "V"), - (0x77, "V"), - (0x78, "V"), - (0x79, "V"), - (0x7A, "V"), - (0x7B, "3"), - (0x7C, "3"), - (0x7D, "3"), - (0x7E, "3"), - (0x7F, "3"), - (0x80, "X"), - (0x81, "X"), - (0x82, "X"), - (0x83, "X"), - (0x84, "X"), - (0x85, "X"), - (0x86, "X"), - (0x87, "X"), - (0x88, "X"), - (0x89, "X"), - (0x8A, "X"), - (0x8B, "X"), - (0x8C, "X"), - (0x8D, "X"), - (0x8E, "X"), - (0x8F, "X"), - (0x90, "X"), - (0x91, "X"), - (0x92, "X"), - (0x93, "X"), - (0x94, "X"), - (0x95, "X"), - (0x96, "X"), - (0x97, "X"), - (0x98, "X"), - (0x99, "X"), - (0x9A, "X"), - (0x9B, "X"), - (0x9C, "X"), - (0x9D, "X"), - (0x9E, "X"), - (0x9F, "X"), - (0xA0, "3", " "), - (0xA1, "V"), - (0xA2, "V"), - (0xA3, "V"), - (0xA4, "V"), - (0xA5, "V"), - (0xA6, "V"), - (0xA7, "V"), - (0xA8, "3", " ̈"), - (0xA9, "V"), - (0xAA, "M", "a"), - (0xAB, "V"), - (0xAC, "V"), - (0xAD, "I"), - (0xAE, "V"), - (0xAF, "3", " ̄"), - (0xB0, "V"), - (0xB1, "V"), - (0xB2, "M", "2"), - (0xB3, "M", "3"), - (0xB4, "3", " ́"), - (0xB5, "M", "μ"), - (0xB6, "V"), - (0xB7, "V"), - (0xB8, "3", " ̧"), - (0xB9, "M", "1"), - (0xBA, "M", "o"), - (0xBB, "V"), - (0xBC, "M", "1⁄4"), - (0xBD, "M", "1⁄2"), - (0xBE, "M", "3⁄4"), - (0xBF, "V"), - (0xC0, "M", "à"), - (0xC1, "M", "á"), - (0xC2, "M", "â"), - (0xC3, "M", "ã"), - (0xC4, "M", "ä"), - (0xC5, "M", "å"), - (0xC6, "M", "æ"), - (0xC7, "M", "ç"), - ] - - -def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC8, "M", "è"), - (0xC9, "M", "é"), - (0xCA, "M", "ê"), - (0xCB, "M", "ë"), - (0xCC, "M", "ì"), - (0xCD, "M", "í"), - (0xCE, "M", "î"), - (0xCF, "M", "ï"), - (0xD0, "M", "ð"), - (0xD1, "M", "ñ"), - (0xD2, "M", "ò"), - (0xD3, "M", "ó"), - (0xD4, "M", "ô"), - (0xD5, "M", "õ"), - (0xD6, "M", "ö"), - (0xD7, "V"), - (0xD8, "M", "ø"), - (0xD9, "M", "ù"), - (0xDA, "M", "ú"), - (0xDB, "M", "û"), - (0xDC, "M", "ü"), - (0xDD, "M", "ý"), - (0xDE, "M", "þ"), - (0xDF, "D", "ss"), - (0xE0, "V"), - (0xE1, "V"), - (0xE2, "V"), - (0xE3, "V"), - (0xE4, "V"), - (0xE5, "V"), - (0xE6, "V"), - (0xE7, "V"), - (0xE8, "V"), - (0xE9, "V"), - (0xEA, "V"), - (0xEB, "V"), - (0xEC, "V"), - (0xED, "V"), - (0xEE, "V"), - (0xEF, "V"), - (0xF0, "V"), - (0xF1, "V"), - (0xF2, "V"), - (0xF3, "V"), - (0xF4, "V"), - (0xF5, "V"), - (0xF6, "V"), - (0xF7, "V"), - (0xF8, "V"), - (0xF9, "V"), - (0xFA, "V"), - (0xFB, "V"), - (0xFC, "V"), - (0xFD, "V"), - (0xFE, "V"), - (0xFF, "V"), - (0x100, "M", "ā"), - (0x101, "V"), - (0x102, "M", "ă"), - (0x103, "V"), - (0x104, "M", "ą"), - (0x105, "V"), - (0x106, "M", "ć"), - (0x107, "V"), - (0x108, "M", "ĉ"), - (0x109, "V"), - (0x10A, "M", "ċ"), - (0x10B, "V"), - (0x10C, "M", "č"), - (0x10D, "V"), - (0x10E, "M", "ď"), - (0x10F, "V"), - (0x110, "M", "đ"), - (0x111, "V"), - (0x112, "M", "ē"), - (0x113, "V"), - (0x114, "M", "ĕ"), - (0x115, "V"), - (0x116, "M", "ė"), - (0x117, "V"), - (0x118, "M", "ę"), - (0x119, "V"), - (0x11A, "M", "ě"), - (0x11B, "V"), - (0x11C, "M", "ĝ"), - (0x11D, "V"), - (0x11E, "M", "ğ"), - (0x11F, "V"), - (0x120, "M", "ġ"), - (0x121, "V"), - (0x122, "M", "ģ"), - (0x123, "V"), - (0x124, "M", "ĥ"), - (0x125, "V"), - (0x126, "M", "ħ"), - (0x127, "V"), - (0x128, "M", "ĩ"), - (0x129, "V"), - (0x12A, "M", "ī"), - (0x12B, "V"), - ] - - -def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x12C, "M", "ĭ"), - (0x12D, "V"), - (0x12E, "M", "į"), - (0x12F, "V"), - (0x130, "M", "i̇"), - (0x131, "V"), - (0x132, "M", "ij"), - (0x134, "M", "ĵ"), - (0x135, "V"), - (0x136, "M", "ķ"), - (0x137, "V"), - (0x139, "M", "ĺ"), - (0x13A, "V"), - (0x13B, "M", "ļ"), - (0x13C, "V"), - (0x13D, "M", "ľ"), - (0x13E, "V"), - (0x13F, "M", "l·"), - (0x141, "M", "ł"), - (0x142, "V"), - (0x143, "M", "ń"), - (0x144, "V"), - (0x145, "M", "ņ"), - (0x146, "V"), - (0x147, "M", "ň"), - (0x148, "V"), - (0x149, "M", "ʼn"), - (0x14A, "M", "ŋ"), - (0x14B, "V"), - (0x14C, "M", "ō"), - (0x14D, "V"), - (0x14E, "M", "ŏ"), - (0x14F, "V"), - (0x150, "M", "ő"), - (0x151, "V"), - (0x152, "M", "œ"), - (0x153, "V"), - (0x154, "M", "ŕ"), - (0x155, "V"), - (0x156, "M", "ŗ"), - (0x157, "V"), - (0x158, "M", "ř"), - (0x159, "V"), - (0x15A, "M", "ś"), - (0x15B, "V"), - (0x15C, "M", "ŝ"), - (0x15D, "V"), - (0x15E, "M", "ş"), - (0x15F, "V"), - (0x160, "M", "š"), - (0x161, "V"), - (0x162, "M", "ţ"), - (0x163, "V"), - (0x164, "M", "ť"), - (0x165, "V"), - (0x166, "M", "ŧ"), - (0x167, "V"), - (0x168, "M", "ũ"), - (0x169, "V"), - (0x16A, "M", "ū"), - (0x16B, "V"), - (0x16C, "M", "ŭ"), - (0x16D, "V"), - (0x16E, "M", "ů"), - (0x16F, "V"), - (0x170, "M", "ű"), - (0x171, "V"), - (0x172, "M", "ų"), - (0x173, "V"), - (0x174, "M", "ŵ"), - (0x175, "V"), - (0x176, "M", "ŷ"), - (0x177, "V"), - (0x178, "M", "ÿ"), - (0x179, "M", "ź"), - (0x17A, "V"), - (0x17B, "M", "ż"), - (0x17C, "V"), - (0x17D, "M", "ž"), - (0x17E, "V"), - (0x17F, "M", "s"), - (0x180, "V"), - (0x181, "M", "ɓ"), - (0x182, "M", "ƃ"), - (0x183, "V"), - (0x184, "M", "ƅ"), - (0x185, "V"), - (0x186, "M", "ɔ"), - (0x187, "M", "ƈ"), - (0x188, "V"), - (0x189, "M", "ɖ"), - (0x18A, "M", "ɗ"), - (0x18B, "M", "ƌ"), - (0x18C, "V"), - (0x18E, "M", "ǝ"), - (0x18F, "M", "ə"), - (0x190, "M", "ɛ"), - (0x191, "M", "ƒ"), - (0x192, "V"), - (0x193, "M", "ɠ"), - ] - - -def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x194, "M", "ɣ"), - (0x195, "V"), - (0x196, "M", "ɩ"), - (0x197, "M", "ɨ"), - (0x198, "M", "ƙ"), - (0x199, "V"), - (0x19C, "M", "ɯ"), - (0x19D, "M", "ɲ"), - (0x19E, "V"), - (0x19F, "M", "ɵ"), - (0x1A0, "M", "ơ"), - (0x1A1, "V"), - (0x1A2, "M", "ƣ"), - (0x1A3, "V"), - (0x1A4, "M", "ƥ"), - (0x1A5, "V"), - (0x1A6, "M", "ʀ"), - (0x1A7, "M", "ƨ"), - (0x1A8, "V"), - (0x1A9, "M", "ʃ"), - (0x1AA, "V"), - (0x1AC, "M", "ƭ"), - (0x1AD, "V"), - (0x1AE, "M", "ʈ"), - (0x1AF, "M", "ư"), - (0x1B0, "V"), - (0x1B1, "M", "ʊ"), - (0x1B2, "M", "ʋ"), - (0x1B3, "M", "ƴ"), - (0x1B4, "V"), - (0x1B5, "M", "ƶ"), - (0x1B6, "V"), - (0x1B7, "M", "ʒ"), - (0x1B8, "M", "ƹ"), - (0x1B9, "V"), - (0x1BC, "M", "ƽ"), - (0x1BD, "V"), - (0x1C4, "M", "dž"), - (0x1C7, "M", "lj"), - (0x1CA, "M", "nj"), - (0x1CD, "M", "ǎ"), - (0x1CE, "V"), - (0x1CF, "M", "ǐ"), - (0x1D0, "V"), - (0x1D1, "M", "ǒ"), - (0x1D2, "V"), - (0x1D3, "M", "ǔ"), - (0x1D4, "V"), - (0x1D5, "M", "ǖ"), - (0x1D6, "V"), - (0x1D7, "M", "ǘ"), - (0x1D8, "V"), - (0x1D9, "M", "ǚ"), - (0x1DA, "V"), - (0x1DB, "M", "ǜ"), - (0x1DC, "V"), - (0x1DE, "M", "ǟ"), - (0x1DF, "V"), - (0x1E0, "M", "ǡ"), - (0x1E1, "V"), - (0x1E2, "M", "ǣ"), - (0x1E3, "V"), - (0x1E4, "M", "ǥ"), - (0x1E5, "V"), - (0x1E6, "M", "ǧ"), - (0x1E7, "V"), - (0x1E8, "M", "ǩ"), - (0x1E9, "V"), - (0x1EA, "M", "ǫ"), - (0x1EB, "V"), - (0x1EC, "M", "ǭ"), - (0x1ED, "V"), - (0x1EE, "M", "ǯ"), - (0x1EF, "V"), - (0x1F1, "M", "dz"), - (0x1F4, "M", "ǵ"), - (0x1F5, "V"), - (0x1F6, "M", "ƕ"), - (0x1F7, "M", "ƿ"), - (0x1F8, "M", "ǹ"), - (0x1F9, "V"), - (0x1FA, "M", "ǻ"), - (0x1FB, "V"), - (0x1FC, "M", "ǽ"), - (0x1FD, "V"), - (0x1FE, "M", "ǿ"), - (0x1FF, "V"), - (0x200, "M", "ȁ"), - (0x201, "V"), - (0x202, "M", "ȃ"), - (0x203, "V"), - (0x204, "M", "ȅ"), - (0x205, "V"), - (0x206, "M", "ȇ"), - (0x207, "V"), - (0x208, "M", "ȉ"), - (0x209, "V"), - (0x20A, "M", "ȋ"), - (0x20B, "V"), - (0x20C, "M", "ȍ"), - ] - - -def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x20D, "V"), - (0x20E, "M", "ȏ"), - (0x20F, "V"), - (0x210, "M", "ȑ"), - (0x211, "V"), - (0x212, "M", "ȓ"), - (0x213, "V"), - (0x214, "M", "ȕ"), - (0x215, "V"), - (0x216, "M", "ȗ"), - (0x217, "V"), - (0x218, "M", "ș"), - (0x219, "V"), - (0x21A, "M", "ț"), - (0x21B, "V"), - (0x21C, "M", "ȝ"), - (0x21D, "V"), - (0x21E, "M", "ȟ"), - (0x21F, "V"), - (0x220, "M", "ƞ"), - (0x221, "V"), - (0x222, "M", "ȣ"), - (0x223, "V"), - (0x224, "M", "ȥ"), - (0x225, "V"), - (0x226, "M", "ȧ"), - (0x227, "V"), - (0x228, "M", "ȩ"), - (0x229, "V"), - (0x22A, "M", "ȫ"), - (0x22B, "V"), - (0x22C, "M", "ȭ"), - (0x22D, "V"), - (0x22E, "M", "ȯ"), - (0x22F, "V"), - (0x230, "M", "ȱ"), - (0x231, "V"), - (0x232, "M", "ȳ"), - (0x233, "V"), - (0x23A, "M", "ⱥ"), - (0x23B, "M", "ȼ"), - (0x23C, "V"), - (0x23D, "M", "ƚ"), - (0x23E, "M", "ⱦ"), - (0x23F, "V"), - (0x241, "M", "ɂ"), - (0x242, "V"), - (0x243, "M", "ƀ"), - (0x244, "M", "ʉ"), - (0x245, "M", "ʌ"), - (0x246, "M", "ɇ"), - (0x247, "V"), - (0x248, "M", "ɉ"), - (0x249, "V"), - (0x24A, "M", "ɋ"), - (0x24B, "V"), - (0x24C, "M", "ɍ"), - (0x24D, "V"), - (0x24E, "M", "ɏ"), - (0x24F, "V"), - (0x2B0, "M", "h"), - (0x2B1, "M", "ɦ"), - (0x2B2, "M", "j"), - (0x2B3, "M", "r"), - (0x2B4, "M", "ɹ"), - (0x2B5, "M", "ɻ"), - (0x2B6, "M", "ʁ"), - (0x2B7, "M", "w"), - (0x2B8, "M", "y"), - (0x2B9, "V"), - (0x2D8, "3", " ̆"), - (0x2D9, "3", " ̇"), - (0x2DA, "3", " ̊"), - (0x2DB, "3", " ̨"), - (0x2DC, "3", " ̃"), - (0x2DD, "3", " ̋"), - (0x2DE, "V"), - (0x2E0, "M", "ɣ"), - (0x2E1, "M", "l"), - (0x2E2, "M", "s"), - (0x2E3, "M", "x"), - (0x2E4, "M", "ʕ"), - (0x2E5, "V"), - (0x340, "M", "̀"), - (0x341, "M", "́"), - (0x342, "V"), - (0x343, "M", "̓"), - (0x344, "M", "̈́"), - (0x345, "M", "ι"), - (0x346, "V"), - (0x34F, "I"), - (0x350, "V"), - (0x370, "M", "ͱ"), - (0x371, "V"), - (0x372, "M", "ͳ"), - (0x373, "V"), - (0x374, "M", "ʹ"), - (0x375, "V"), - (0x376, "M", "ͷ"), - (0x377, "V"), - ] - - -def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x378, "X"), - (0x37A, "3", " ι"), - (0x37B, "V"), - (0x37E, "3", ";"), - (0x37F, "M", "ϳ"), - (0x380, "X"), - (0x384, "3", " ́"), - (0x385, "3", " ̈́"), - (0x386, "M", "ά"), - (0x387, "M", "·"), - (0x388, "M", "έ"), - (0x389, "M", "ή"), - (0x38A, "M", "ί"), - (0x38B, "X"), - (0x38C, "M", "ό"), - (0x38D, "X"), - (0x38E, "M", "ύ"), - (0x38F, "M", "ώ"), - (0x390, "V"), - (0x391, "M", "α"), - (0x392, "M", "β"), - (0x393, "M", "γ"), - (0x394, "M", "δ"), - (0x395, "M", "ε"), - (0x396, "M", "ζ"), - (0x397, "M", "η"), - (0x398, "M", "θ"), - (0x399, "M", "ι"), - (0x39A, "M", "κ"), - (0x39B, "M", "λ"), - (0x39C, "M", "μ"), - (0x39D, "M", "ν"), - (0x39E, "M", "ξ"), - (0x39F, "M", "ο"), - (0x3A0, "M", "π"), - (0x3A1, "M", "ρ"), - (0x3A2, "X"), - (0x3A3, "M", "σ"), - (0x3A4, "M", "τ"), - (0x3A5, "M", "υ"), - (0x3A6, "M", "φ"), - (0x3A7, "M", "χ"), - (0x3A8, "M", "ψ"), - (0x3A9, "M", "ω"), - (0x3AA, "M", "ϊ"), - (0x3AB, "M", "ϋ"), - (0x3AC, "V"), - (0x3C2, "D", "σ"), - (0x3C3, "V"), - (0x3CF, "M", "ϗ"), - (0x3D0, "M", "β"), - (0x3D1, "M", "θ"), - (0x3D2, "M", "υ"), - (0x3D3, "M", "ύ"), - (0x3D4, "M", "ϋ"), - (0x3D5, "M", "φ"), - (0x3D6, "M", "π"), - (0x3D7, "V"), - (0x3D8, "M", "ϙ"), - (0x3D9, "V"), - (0x3DA, "M", "ϛ"), - (0x3DB, "V"), - (0x3DC, "M", "ϝ"), - (0x3DD, "V"), - (0x3DE, "M", "ϟ"), - (0x3DF, "V"), - (0x3E0, "M", "ϡ"), - (0x3E1, "V"), - (0x3E2, "M", "ϣ"), - (0x3E3, "V"), - (0x3E4, "M", "ϥ"), - (0x3E5, "V"), - (0x3E6, "M", "ϧ"), - (0x3E7, "V"), - (0x3E8, "M", "ϩ"), - (0x3E9, "V"), - (0x3EA, "M", "ϫ"), - (0x3EB, "V"), - (0x3EC, "M", "ϭ"), - (0x3ED, "V"), - (0x3EE, "M", "ϯ"), - (0x3EF, "V"), - (0x3F0, "M", "κ"), - (0x3F1, "M", "ρ"), - (0x3F2, "M", "σ"), - (0x3F3, "V"), - (0x3F4, "M", "θ"), - (0x3F5, "M", "ε"), - (0x3F6, "V"), - (0x3F7, "M", "ϸ"), - (0x3F8, "V"), - (0x3F9, "M", "σ"), - (0x3FA, "M", "ϻ"), - (0x3FB, "V"), - (0x3FD, "M", "ͻ"), - (0x3FE, "M", "ͼ"), - (0x3FF, "M", "ͽ"), - (0x400, "M", "ѐ"), - (0x401, "M", "ё"), - (0x402, "M", "ђ"), - ] - - -def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x403, "M", "ѓ"), - (0x404, "M", "є"), - (0x405, "M", "ѕ"), - (0x406, "M", "і"), - (0x407, "M", "ї"), - (0x408, "M", "ј"), - (0x409, "M", "љ"), - (0x40A, "M", "њ"), - (0x40B, "M", "ћ"), - (0x40C, "M", "ќ"), - (0x40D, "M", "ѝ"), - (0x40E, "M", "ў"), - (0x40F, "M", "џ"), - (0x410, "M", "а"), - (0x411, "M", "б"), - (0x412, "M", "в"), - (0x413, "M", "г"), - (0x414, "M", "д"), - (0x415, "M", "е"), - (0x416, "M", "ж"), - (0x417, "M", "з"), - (0x418, "M", "и"), - (0x419, "M", "й"), - (0x41A, "M", "к"), - (0x41B, "M", "л"), - (0x41C, "M", "м"), - (0x41D, "M", "н"), - (0x41E, "M", "о"), - (0x41F, "M", "п"), - (0x420, "M", "р"), - (0x421, "M", "с"), - (0x422, "M", "т"), - (0x423, "M", "у"), - (0x424, "M", "ф"), - (0x425, "M", "х"), - (0x426, "M", "ц"), - (0x427, "M", "ч"), - (0x428, "M", "ш"), - (0x429, "M", "щ"), - (0x42A, "M", "ъ"), - (0x42B, "M", "ы"), - (0x42C, "M", "ь"), - (0x42D, "M", "э"), - (0x42E, "M", "ю"), - (0x42F, "M", "я"), - (0x430, "V"), - (0x460, "M", "ѡ"), - (0x461, "V"), - (0x462, "M", "ѣ"), - (0x463, "V"), - (0x464, "M", "ѥ"), - (0x465, "V"), - (0x466, "M", "ѧ"), - (0x467, "V"), - (0x468, "M", "ѩ"), - (0x469, "V"), - (0x46A, "M", "ѫ"), - (0x46B, "V"), - (0x46C, "M", "ѭ"), - (0x46D, "V"), - (0x46E, "M", "ѯ"), - (0x46F, "V"), - (0x470, "M", "ѱ"), - (0x471, "V"), - (0x472, "M", "ѳ"), - (0x473, "V"), - (0x474, "M", "ѵ"), - (0x475, "V"), - (0x476, "M", "ѷ"), - (0x477, "V"), - (0x478, "M", "ѹ"), - (0x479, "V"), - (0x47A, "M", "ѻ"), - (0x47B, "V"), - (0x47C, "M", "ѽ"), - (0x47D, "V"), - (0x47E, "M", "ѿ"), - (0x47F, "V"), - (0x480, "M", "ҁ"), - (0x481, "V"), - (0x48A, "M", "ҋ"), - (0x48B, "V"), - (0x48C, "M", "ҍ"), - (0x48D, "V"), - (0x48E, "M", "ҏ"), - (0x48F, "V"), - (0x490, "M", "ґ"), - (0x491, "V"), - (0x492, "M", "ғ"), - (0x493, "V"), - (0x494, "M", "ҕ"), - (0x495, "V"), - (0x496, "M", "җ"), - (0x497, "V"), - (0x498, "M", "ҙ"), - (0x499, "V"), - (0x49A, "M", "қ"), - (0x49B, "V"), - (0x49C, "M", "ҝ"), - (0x49D, "V"), - ] - - -def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x49E, "M", "ҟ"), - (0x49F, "V"), - (0x4A0, "M", "ҡ"), - (0x4A1, "V"), - (0x4A2, "M", "ң"), - (0x4A3, "V"), - (0x4A4, "M", "ҥ"), - (0x4A5, "V"), - (0x4A6, "M", "ҧ"), - (0x4A7, "V"), - (0x4A8, "M", "ҩ"), - (0x4A9, "V"), - (0x4AA, "M", "ҫ"), - (0x4AB, "V"), - (0x4AC, "M", "ҭ"), - (0x4AD, "V"), - (0x4AE, "M", "ү"), - (0x4AF, "V"), - (0x4B0, "M", "ұ"), - (0x4B1, "V"), - (0x4B2, "M", "ҳ"), - (0x4B3, "V"), - (0x4B4, "M", "ҵ"), - (0x4B5, "V"), - (0x4B6, "M", "ҷ"), - (0x4B7, "V"), - (0x4B8, "M", "ҹ"), - (0x4B9, "V"), - (0x4BA, "M", "һ"), - (0x4BB, "V"), - (0x4BC, "M", "ҽ"), - (0x4BD, "V"), - (0x4BE, "M", "ҿ"), - (0x4BF, "V"), - (0x4C0, "X"), - (0x4C1, "M", "ӂ"), - (0x4C2, "V"), - (0x4C3, "M", "ӄ"), - (0x4C4, "V"), - (0x4C5, "M", "ӆ"), - (0x4C6, "V"), - (0x4C7, "M", "ӈ"), - (0x4C8, "V"), - (0x4C9, "M", "ӊ"), - (0x4CA, "V"), - (0x4CB, "M", "ӌ"), - (0x4CC, "V"), - (0x4CD, "M", "ӎ"), - (0x4CE, "V"), - (0x4D0, "M", "ӑ"), - (0x4D1, "V"), - (0x4D2, "M", "ӓ"), - (0x4D3, "V"), - (0x4D4, "M", "ӕ"), - (0x4D5, "V"), - (0x4D6, "M", "ӗ"), - (0x4D7, "V"), - (0x4D8, "M", "ә"), - (0x4D9, "V"), - (0x4DA, "M", "ӛ"), - (0x4DB, "V"), - (0x4DC, "M", "ӝ"), - (0x4DD, "V"), - (0x4DE, "M", "ӟ"), - (0x4DF, "V"), - (0x4E0, "M", "ӡ"), - (0x4E1, "V"), - (0x4E2, "M", "ӣ"), - (0x4E3, "V"), - (0x4E4, "M", "ӥ"), - (0x4E5, "V"), - (0x4E6, "M", "ӧ"), - (0x4E7, "V"), - (0x4E8, "M", "ө"), - (0x4E9, "V"), - (0x4EA, "M", "ӫ"), - (0x4EB, "V"), - (0x4EC, "M", "ӭ"), - (0x4ED, "V"), - (0x4EE, "M", "ӯ"), - (0x4EF, "V"), - (0x4F0, "M", "ӱ"), - (0x4F1, "V"), - (0x4F2, "M", "ӳ"), - (0x4F3, "V"), - (0x4F4, "M", "ӵ"), - (0x4F5, "V"), - (0x4F6, "M", "ӷ"), - (0x4F7, "V"), - (0x4F8, "M", "ӹ"), - (0x4F9, "V"), - (0x4FA, "M", "ӻ"), - (0x4FB, "V"), - (0x4FC, "M", "ӽ"), - (0x4FD, "V"), - (0x4FE, "M", "ӿ"), - (0x4FF, "V"), - (0x500, "M", "ԁ"), - (0x501, "V"), - (0x502, "M", "ԃ"), - ] - - -def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x503, "V"), - (0x504, "M", "ԅ"), - (0x505, "V"), - (0x506, "M", "ԇ"), - (0x507, "V"), - (0x508, "M", "ԉ"), - (0x509, "V"), - (0x50A, "M", "ԋ"), - (0x50B, "V"), - (0x50C, "M", "ԍ"), - (0x50D, "V"), - (0x50E, "M", "ԏ"), - (0x50F, "V"), - (0x510, "M", "ԑ"), - (0x511, "V"), - (0x512, "M", "ԓ"), - (0x513, "V"), - (0x514, "M", "ԕ"), - (0x515, "V"), - (0x516, "M", "ԗ"), - (0x517, "V"), - (0x518, "M", "ԙ"), - (0x519, "V"), - (0x51A, "M", "ԛ"), - (0x51B, "V"), - (0x51C, "M", "ԝ"), - (0x51D, "V"), - (0x51E, "M", "ԟ"), - (0x51F, "V"), - (0x520, "M", "ԡ"), - (0x521, "V"), - (0x522, "M", "ԣ"), - (0x523, "V"), - (0x524, "M", "ԥ"), - (0x525, "V"), - (0x526, "M", "ԧ"), - (0x527, "V"), - (0x528, "M", "ԩ"), - (0x529, "V"), - (0x52A, "M", "ԫ"), - (0x52B, "V"), - (0x52C, "M", "ԭ"), - (0x52D, "V"), - (0x52E, "M", "ԯ"), - (0x52F, "V"), - (0x530, "X"), - (0x531, "M", "ա"), - (0x532, "M", "բ"), - (0x533, "M", "գ"), - (0x534, "M", "դ"), - (0x535, "M", "ե"), - (0x536, "M", "զ"), - (0x537, "M", "է"), - (0x538, "M", "ը"), - (0x539, "M", "թ"), - (0x53A, "M", "ժ"), - (0x53B, "M", "ի"), - (0x53C, "M", "լ"), - (0x53D, "M", "խ"), - (0x53E, "M", "ծ"), - (0x53F, "M", "կ"), - (0x540, "M", "հ"), - (0x541, "M", "ձ"), - (0x542, "M", "ղ"), - (0x543, "M", "ճ"), - (0x544, "M", "մ"), - (0x545, "M", "յ"), - (0x546, "M", "ն"), - (0x547, "M", "շ"), - (0x548, "M", "ո"), - (0x549, "M", "չ"), - (0x54A, "M", "պ"), - (0x54B, "M", "ջ"), - (0x54C, "M", "ռ"), - (0x54D, "M", "ս"), - (0x54E, "M", "վ"), - (0x54F, "M", "տ"), - (0x550, "M", "ր"), - (0x551, "M", "ց"), - (0x552, "M", "ւ"), - (0x553, "M", "փ"), - (0x554, "M", "ք"), - (0x555, "M", "օ"), - (0x556, "M", "ֆ"), - (0x557, "X"), - (0x559, "V"), - (0x587, "M", "եւ"), - (0x588, "V"), - (0x58B, "X"), - (0x58D, "V"), - (0x590, "X"), - (0x591, "V"), - (0x5C8, "X"), - (0x5D0, "V"), - (0x5EB, "X"), - (0x5EF, "V"), - (0x5F5, "X"), - (0x606, "V"), - (0x61C, "X"), - (0x61D, "V"), - ] - - -def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x675, "M", "اٴ"), - (0x676, "M", "وٴ"), - (0x677, "M", "ۇٴ"), - (0x678, "M", "يٴ"), - (0x679, "V"), - (0x6DD, "X"), - (0x6DE, "V"), - (0x70E, "X"), - (0x710, "V"), - (0x74B, "X"), - (0x74D, "V"), - (0x7B2, "X"), - (0x7C0, "V"), - (0x7FB, "X"), - (0x7FD, "V"), - (0x82E, "X"), - (0x830, "V"), - (0x83F, "X"), - (0x840, "V"), - (0x85C, "X"), - (0x85E, "V"), - (0x85F, "X"), - (0x860, "V"), - (0x86B, "X"), - (0x870, "V"), - (0x88F, "X"), - (0x898, "V"), - (0x8E2, "X"), - (0x8E3, "V"), - (0x958, "M", "क़"), - (0x959, "M", "ख़"), - (0x95A, "M", "ग़"), - (0x95B, "M", "ज़"), - (0x95C, "M", "ड़"), - (0x95D, "M", "ढ़"), - (0x95E, "M", "फ़"), - (0x95F, "M", "य़"), - (0x960, "V"), - (0x984, "X"), - (0x985, "V"), - (0x98D, "X"), - (0x98F, "V"), - (0x991, "X"), - (0x993, "V"), - (0x9A9, "X"), - (0x9AA, "V"), - (0x9B1, "X"), - (0x9B2, "V"), - (0x9B3, "X"), - (0x9B6, "V"), - (0x9BA, "X"), - (0x9BC, "V"), - (0x9C5, "X"), - (0x9C7, "V"), - (0x9C9, "X"), - (0x9CB, "V"), - (0x9CF, "X"), - (0x9D7, "V"), - (0x9D8, "X"), - (0x9DC, "M", "ড়"), - (0x9DD, "M", "ঢ়"), - (0x9DE, "X"), - (0x9DF, "M", "য়"), - (0x9E0, "V"), - (0x9E4, "X"), - (0x9E6, "V"), - (0x9FF, "X"), - (0xA01, "V"), - (0xA04, "X"), - (0xA05, "V"), - (0xA0B, "X"), - (0xA0F, "V"), - (0xA11, "X"), - (0xA13, "V"), - (0xA29, "X"), - (0xA2A, "V"), - (0xA31, "X"), - (0xA32, "V"), - (0xA33, "M", "ਲ਼"), - (0xA34, "X"), - (0xA35, "V"), - (0xA36, "M", "ਸ਼"), - (0xA37, "X"), - (0xA38, "V"), - (0xA3A, "X"), - (0xA3C, "V"), - (0xA3D, "X"), - (0xA3E, "V"), - (0xA43, "X"), - (0xA47, "V"), - (0xA49, "X"), - (0xA4B, "V"), - (0xA4E, "X"), - (0xA51, "V"), - (0xA52, "X"), - (0xA59, "M", "ਖ਼"), - (0xA5A, "M", "ਗ਼"), - (0xA5B, "M", "ਜ਼"), - (0xA5C, "V"), - (0xA5D, "X"), - ] - - -def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA5E, "M", "ਫ਼"), - (0xA5F, "X"), - (0xA66, "V"), - (0xA77, "X"), - (0xA81, "V"), - (0xA84, "X"), - (0xA85, "V"), - (0xA8E, "X"), - (0xA8F, "V"), - (0xA92, "X"), - (0xA93, "V"), - (0xAA9, "X"), - (0xAAA, "V"), - (0xAB1, "X"), - (0xAB2, "V"), - (0xAB4, "X"), - (0xAB5, "V"), - (0xABA, "X"), - (0xABC, "V"), - (0xAC6, "X"), - (0xAC7, "V"), - (0xACA, "X"), - (0xACB, "V"), - (0xACE, "X"), - (0xAD0, "V"), - (0xAD1, "X"), - (0xAE0, "V"), - (0xAE4, "X"), - (0xAE6, "V"), - (0xAF2, "X"), - (0xAF9, "V"), - (0xB00, "X"), - (0xB01, "V"), - (0xB04, "X"), - (0xB05, "V"), - (0xB0D, "X"), - (0xB0F, "V"), - (0xB11, "X"), - (0xB13, "V"), - (0xB29, "X"), - (0xB2A, "V"), - (0xB31, "X"), - (0xB32, "V"), - (0xB34, "X"), - (0xB35, "V"), - (0xB3A, "X"), - (0xB3C, "V"), - (0xB45, "X"), - (0xB47, "V"), - (0xB49, "X"), - (0xB4B, "V"), - (0xB4E, "X"), - (0xB55, "V"), - (0xB58, "X"), - (0xB5C, "M", "ଡ଼"), - (0xB5D, "M", "ଢ଼"), - (0xB5E, "X"), - (0xB5F, "V"), - (0xB64, "X"), - (0xB66, "V"), - (0xB78, "X"), - (0xB82, "V"), - (0xB84, "X"), - (0xB85, "V"), - (0xB8B, "X"), - (0xB8E, "V"), - (0xB91, "X"), - (0xB92, "V"), - (0xB96, "X"), - (0xB99, "V"), - (0xB9B, "X"), - (0xB9C, "V"), - (0xB9D, "X"), - (0xB9E, "V"), - (0xBA0, "X"), - (0xBA3, "V"), - (0xBA5, "X"), - (0xBA8, "V"), - (0xBAB, "X"), - (0xBAE, "V"), - (0xBBA, "X"), - (0xBBE, "V"), - (0xBC3, "X"), - (0xBC6, "V"), - (0xBC9, "X"), - (0xBCA, "V"), - (0xBCE, "X"), - (0xBD0, "V"), - (0xBD1, "X"), - (0xBD7, "V"), - (0xBD8, "X"), - (0xBE6, "V"), - (0xBFB, "X"), - (0xC00, "V"), - (0xC0D, "X"), - (0xC0E, "V"), - (0xC11, "X"), - (0xC12, "V"), - (0xC29, "X"), - (0xC2A, "V"), - ] - - -def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC3A, "X"), - (0xC3C, "V"), - (0xC45, "X"), - (0xC46, "V"), - (0xC49, "X"), - (0xC4A, "V"), - (0xC4E, "X"), - (0xC55, "V"), - (0xC57, "X"), - (0xC58, "V"), - (0xC5B, "X"), - (0xC5D, "V"), - (0xC5E, "X"), - (0xC60, "V"), - (0xC64, "X"), - (0xC66, "V"), - (0xC70, "X"), - (0xC77, "V"), - (0xC8D, "X"), - (0xC8E, "V"), - (0xC91, "X"), - (0xC92, "V"), - (0xCA9, "X"), - (0xCAA, "V"), - (0xCB4, "X"), - (0xCB5, "V"), - (0xCBA, "X"), - (0xCBC, "V"), - (0xCC5, "X"), - (0xCC6, "V"), - (0xCC9, "X"), - (0xCCA, "V"), - (0xCCE, "X"), - (0xCD5, "V"), - (0xCD7, "X"), - (0xCDD, "V"), - (0xCDF, "X"), - (0xCE0, "V"), - (0xCE4, "X"), - (0xCE6, "V"), - (0xCF0, "X"), - (0xCF1, "V"), - (0xCF4, "X"), - (0xD00, "V"), - (0xD0D, "X"), - (0xD0E, "V"), - (0xD11, "X"), - (0xD12, "V"), - (0xD45, "X"), - (0xD46, "V"), - (0xD49, "X"), - (0xD4A, "V"), - (0xD50, "X"), - (0xD54, "V"), - (0xD64, "X"), - (0xD66, "V"), - (0xD80, "X"), - (0xD81, "V"), - (0xD84, "X"), - (0xD85, "V"), - (0xD97, "X"), - (0xD9A, "V"), - (0xDB2, "X"), - (0xDB3, "V"), - (0xDBC, "X"), - (0xDBD, "V"), - (0xDBE, "X"), - (0xDC0, "V"), - (0xDC7, "X"), - (0xDCA, "V"), - (0xDCB, "X"), - (0xDCF, "V"), - (0xDD5, "X"), - (0xDD6, "V"), - (0xDD7, "X"), - (0xDD8, "V"), - (0xDE0, "X"), - (0xDE6, "V"), - (0xDF0, "X"), - (0xDF2, "V"), - (0xDF5, "X"), - (0xE01, "V"), - (0xE33, "M", "ํา"), - (0xE34, "V"), - (0xE3B, "X"), - (0xE3F, "V"), - (0xE5C, "X"), - (0xE81, "V"), - (0xE83, "X"), - (0xE84, "V"), - (0xE85, "X"), - (0xE86, "V"), - (0xE8B, "X"), - (0xE8C, "V"), - (0xEA4, "X"), - (0xEA5, "V"), - (0xEA6, "X"), - (0xEA7, "V"), - (0xEB3, "M", "ໍາ"), - (0xEB4, "V"), - ] - - -def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xEBE, "X"), - (0xEC0, "V"), - (0xEC5, "X"), - (0xEC6, "V"), - (0xEC7, "X"), - (0xEC8, "V"), - (0xECF, "X"), - (0xED0, "V"), - (0xEDA, "X"), - (0xEDC, "M", "ຫນ"), - (0xEDD, "M", "ຫມ"), - (0xEDE, "V"), - (0xEE0, "X"), - (0xF00, "V"), - (0xF0C, "M", "་"), - (0xF0D, "V"), - (0xF43, "M", "གྷ"), - (0xF44, "V"), - (0xF48, "X"), - (0xF49, "V"), - (0xF4D, "M", "ཌྷ"), - (0xF4E, "V"), - (0xF52, "M", "དྷ"), - (0xF53, "V"), - (0xF57, "M", "བྷ"), - (0xF58, "V"), - (0xF5C, "M", "ཛྷ"), - (0xF5D, "V"), - (0xF69, "M", "ཀྵ"), - (0xF6A, "V"), - (0xF6D, "X"), - (0xF71, "V"), - (0xF73, "M", "ཱི"), - (0xF74, "V"), - (0xF75, "M", "ཱུ"), - (0xF76, "M", "ྲྀ"), - (0xF77, "M", "ྲཱྀ"), - (0xF78, "M", "ླྀ"), - (0xF79, "M", "ླཱྀ"), - (0xF7A, "V"), - (0xF81, "M", "ཱྀ"), - (0xF82, "V"), - (0xF93, "M", "ྒྷ"), - (0xF94, "V"), - (0xF98, "X"), - (0xF99, "V"), - (0xF9D, "M", "ྜྷ"), - (0xF9E, "V"), - (0xFA2, "M", "ྡྷ"), - (0xFA3, "V"), - (0xFA7, "M", "ྦྷ"), - (0xFA8, "V"), - (0xFAC, "M", "ྫྷ"), - (0xFAD, "V"), - (0xFB9, "M", "ྐྵ"), - (0xFBA, "V"), - (0xFBD, "X"), - (0xFBE, "V"), - (0xFCD, "X"), - (0xFCE, "V"), - (0xFDB, "X"), - (0x1000, "V"), - (0x10A0, "X"), - (0x10C7, "M", "ⴧ"), - (0x10C8, "X"), - (0x10CD, "M", "ⴭ"), - (0x10CE, "X"), - (0x10D0, "V"), - (0x10FC, "M", "ნ"), - (0x10FD, "V"), - (0x115F, "X"), - (0x1161, "V"), - (0x1249, "X"), - (0x124A, "V"), - (0x124E, "X"), - (0x1250, "V"), - (0x1257, "X"), - (0x1258, "V"), - (0x1259, "X"), - (0x125A, "V"), - (0x125E, "X"), - (0x1260, "V"), - (0x1289, "X"), - (0x128A, "V"), - (0x128E, "X"), - (0x1290, "V"), - (0x12B1, "X"), - (0x12B2, "V"), - (0x12B6, "X"), - (0x12B8, "V"), - (0x12BF, "X"), - (0x12C0, "V"), - (0x12C1, "X"), - (0x12C2, "V"), - (0x12C6, "X"), - (0x12C8, "V"), - (0x12D7, "X"), - (0x12D8, "V"), - (0x1311, "X"), - (0x1312, "V"), - ] - - -def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1316, "X"), - (0x1318, "V"), - (0x135B, "X"), - (0x135D, "V"), - (0x137D, "X"), - (0x1380, "V"), - (0x139A, "X"), - (0x13A0, "V"), - (0x13F6, "X"), - (0x13F8, "M", "Ᏸ"), - (0x13F9, "M", "Ᏹ"), - (0x13FA, "M", "Ᏺ"), - (0x13FB, "M", "Ᏻ"), - (0x13FC, "M", "Ᏼ"), - (0x13FD, "M", "Ᏽ"), - (0x13FE, "X"), - (0x1400, "V"), - (0x1680, "X"), - (0x1681, "V"), - (0x169D, "X"), - (0x16A0, "V"), - (0x16F9, "X"), - (0x1700, "V"), - (0x1716, "X"), - (0x171F, "V"), - (0x1737, "X"), - (0x1740, "V"), - (0x1754, "X"), - (0x1760, "V"), - (0x176D, "X"), - (0x176E, "V"), - (0x1771, "X"), - (0x1772, "V"), - (0x1774, "X"), - (0x1780, "V"), - (0x17B4, "X"), - (0x17B6, "V"), - (0x17DE, "X"), - (0x17E0, "V"), - (0x17EA, "X"), - (0x17F0, "V"), - (0x17FA, "X"), - (0x1800, "V"), - (0x1806, "X"), - (0x1807, "V"), - (0x180B, "I"), - (0x180E, "X"), - (0x180F, "I"), - (0x1810, "V"), - (0x181A, "X"), - (0x1820, "V"), - (0x1879, "X"), - (0x1880, "V"), - (0x18AB, "X"), - (0x18B0, "V"), - (0x18F6, "X"), - (0x1900, "V"), - (0x191F, "X"), - (0x1920, "V"), - (0x192C, "X"), - (0x1930, "V"), - (0x193C, "X"), - (0x1940, "V"), - (0x1941, "X"), - (0x1944, "V"), - (0x196E, "X"), - (0x1970, "V"), - (0x1975, "X"), - (0x1980, "V"), - (0x19AC, "X"), - (0x19B0, "V"), - (0x19CA, "X"), - (0x19D0, "V"), - (0x19DB, "X"), - (0x19DE, "V"), - (0x1A1C, "X"), - (0x1A1E, "V"), - (0x1A5F, "X"), - (0x1A60, "V"), - (0x1A7D, "X"), - (0x1A7F, "V"), - (0x1A8A, "X"), - (0x1A90, "V"), - (0x1A9A, "X"), - (0x1AA0, "V"), - (0x1AAE, "X"), - (0x1AB0, "V"), - (0x1ACF, "X"), - (0x1B00, "V"), - (0x1B4D, "X"), - (0x1B50, "V"), - (0x1B7F, "X"), - (0x1B80, "V"), - (0x1BF4, "X"), - (0x1BFC, "V"), - (0x1C38, "X"), - (0x1C3B, "V"), - (0x1C4A, "X"), - (0x1C4D, "V"), - (0x1C80, "M", "в"), - ] - - -def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1C81, "M", "д"), - (0x1C82, "M", "о"), - (0x1C83, "M", "с"), - (0x1C84, "M", "т"), - (0x1C86, "M", "ъ"), - (0x1C87, "M", "ѣ"), - (0x1C88, "M", "ꙋ"), - (0x1C89, "X"), - (0x1C90, "M", "ა"), - (0x1C91, "M", "ბ"), - (0x1C92, "M", "გ"), - (0x1C93, "M", "დ"), - (0x1C94, "M", "ე"), - (0x1C95, "M", "ვ"), - (0x1C96, "M", "ზ"), - (0x1C97, "M", "თ"), - (0x1C98, "M", "ი"), - (0x1C99, "M", "კ"), - (0x1C9A, "M", "ლ"), - (0x1C9B, "M", "მ"), - (0x1C9C, "M", "ნ"), - (0x1C9D, "M", "ო"), - (0x1C9E, "M", "პ"), - (0x1C9F, "M", "ჟ"), - (0x1CA0, "M", "რ"), - (0x1CA1, "M", "ს"), - (0x1CA2, "M", "ტ"), - (0x1CA3, "M", "უ"), - (0x1CA4, "M", "ფ"), - (0x1CA5, "M", "ქ"), - (0x1CA6, "M", "ღ"), - (0x1CA7, "M", "ყ"), - (0x1CA8, "M", "შ"), - (0x1CA9, "M", "ჩ"), - (0x1CAA, "M", "ც"), - (0x1CAB, "M", "ძ"), - (0x1CAC, "M", "წ"), - (0x1CAD, "M", "ჭ"), - (0x1CAE, "M", "ხ"), - (0x1CAF, "M", "ჯ"), - (0x1CB0, "M", "ჰ"), - (0x1CB1, "M", "ჱ"), - (0x1CB2, "M", "ჲ"), - (0x1CB3, "M", "ჳ"), - (0x1CB4, "M", "ჴ"), - (0x1CB5, "M", "ჵ"), - (0x1CB6, "M", "ჶ"), - (0x1CB7, "M", "ჷ"), - (0x1CB8, "M", "ჸ"), - (0x1CB9, "M", "ჹ"), - (0x1CBA, "M", "ჺ"), - (0x1CBB, "X"), - (0x1CBD, "M", "ჽ"), - (0x1CBE, "M", "ჾ"), - (0x1CBF, "M", "ჿ"), - (0x1CC0, "V"), - (0x1CC8, "X"), - (0x1CD0, "V"), - (0x1CFB, "X"), - (0x1D00, "V"), - (0x1D2C, "M", "a"), - (0x1D2D, "M", "æ"), - (0x1D2E, "M", "b"), - (0x1D2F, "V"), - (0x1D30, "M", "d"), - (0x1D31, "M", "e"), - (0x1D32, "M", "ǝ"), - (0x1D33, "M", "g"), - (0x1D34, "M", "h"), - (0x1D35, "M", "i"), - (0x1D36, "M", "j"), - (0x1D37, "M", "k"), - (0x1D38, "M", "l"), - (0x1D39, "M", "m"), - (0x1D3A, "M", "n"), - (0x1D3B, "V"), - (0x1D3C, "M", "o"), - (0x1D3D, "M", "ȣ"), - (0x1D3E, "M", "p"), - (0x1D3F, "M", "r"), - (0x1D40, "M", "t"), - (0x1D41, "M", "u"), - (0x1D42, "M", "w"), - (0x1D43, "M", "a"), - (0x1D44, "M", "ɐ"), - (0x1D45, "M", "ɑ"), - (0x1D46, "M", "ᴂ"), - (0x1D47, "M", "b"), - (0x1D48, "M", "d"), - (0x1D49, "M", "e"), - (0x1D4A, "M", "ə"), - (0x1D4B, "M", "ɛ"), - (0x1D4C, "M", "ɜ"), - (0x1D4D, "M", "g"), - (0x1D4E, "V"), - (0x1D4F, "M", "k"), - (0x1D50, "M", "m"), - (0x1D51, "M", "ŋ"), - (0x1D52, "M", "o"), - (0x1D53, "M", "ɔ"), - ] - - -def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D54, "M", "ᴖ"), - (0x1D55, "M", "ᴗ"), - (0x1D56, "M", "p"), - (0x1D57, "M", "t"), - (0x1D58, "M", "u"), - (0x1D59, "M", "ᴝ"), - (0x1D5A, "M", "ɯ"), - (0x1D5B, "M", "v"), - (0x1D5C, "M", "ᴥ"), - (0x1D5D, "M", "β"), - (0x1D5E, "M", "γ"), - (0x1D5F, "M", "δ"), - (0x1D60, "M", "φ"), - (0x1D61, "M", "χ"), - (0x1D62, "M", "i"), - (0x1D63, "M", "r"), - (0x1D64, "M", "u"), - (0x1D65, "M", "v"), - (0x1D66, "M", "β"), - (0x1D67, "M", "γ"), - (0x1D68, "M", "ρ"), - (0x1D69, "M", "φ"), - (0x1D6A, "M", "χ"), - (0x1D6B, "V"), - (0x1D78, "M", "н"), - (0x1D79, "V"), - (0x1D9B, "M", "ɒ"), - (0x1D9C, "M", "c"), - (0x1D9D, "M", "ɕ"), - (0x1D9E, "M", "ð"), - (0x1D9F, "M", "ɜ"), - (0x1DA0, "M", "f"), - (0x1DA1, "M", "ɟ"), - (0x1DA2, "M", "ɡ"), - (0x1DA3, "M", "ɥ"), - (0x1DA4, "M", "ɨ"), - (0x1DA5, "M", "ɩ"), - (0x1DA6, "M", "ɪ"), - (0x1DA7, "M", "ᵻ"), - (0x1DA8, "M", "ʝ"), - (0x1DA9, "M", "ɭ"), - (0x1DAA, "M", "ᶅ"), - (0x1DAB, "M", "ʟ"), - (0x1DAC, "M", "ɱ"), - (0x1DAD, "M", "ɰ"), - (0x1DAE, "M", "ɲ"), - (0x1DAF, "M", "ɳ"), - (0x1DB0, "M", "ɴ"), - (0x1DB1, "M", "ɵ"), - (0x1DB2, "M", "ɸ"), - (0x1DB3, "M", "ʂ"), - (0x1DB4, "M", "ʃ"), - (0x1DB5, "M", "ƫ"), - (0x1DB6, "M", "ʉ"), - (0x1DB7, "M", "ʊ"), - (0x1DB8, "M", "ᴜ"), - (0x1DB9, "M", "ʋ"), - (0x1DBA, "M", "ʌ"), - (0x1DBB, "M", "z"), - (0x1DBC, "M", "ʐ"), - (0x1DBD, "M", "ʑ"), - (0x1DBE, "M", "ʒ"), - (0x1DBF, "M", "θ"), - (0x1DC0, "V"), - (0x1E00, "M", "ḁ"), - (0x1E01, "V"), - (0x1E02, "M", "ḃ"), - (0x1E03, "V"), - (0x1E04, "M", "ḅ"), - (0x1E05, "V"), - (0x1E06, "M", "ḇ"), - (0x1E07, "V"), - (0x1E08, "M", "ḉ"), - (0x1E09, "V"), - (0x1E0A, "M", "ḋ"), - (0x1E0B, "V"), - (0x1E0C, "M", "ḍ"), - (0x1E0D, "V"), - (0x1E0E, "M", "ḏ"), - (0x1E0F, "V"), - (0x1E10, "M", "ḑ"), - (0x1E11, "V"), - (0x1E12, "M", "ḓ"), - (0x1E13, "V"), - (0x1E14, "M", "ḕ"), - (0x1E15, "V"), - (0x1E16, "M", "ḗ"), - (0x1E17, "V"), - (0x1E18, "M", "ḙ"), - (0x1E19, "V"), - (0x1E1A, "M", "ḛ"), - (0x1E1B, "V"), - (0x1E1C, "M", "ḝ"), - (0x1E1D, "V"), - (0x1E1E, "M", "ḟ"), - (0x1E1F, "V"), - (0x1E20, "M", "ḡ"), - (0x1E21, "V"), - (0x1E22, "M", "ḣ"), - (0x1E23, "V"), - ] - - -def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E24, "M", "ḥ"), - (0x1E25, "V"), - (0x1E26, "M", "ḧ"), - (0x1E27, "V"), - (0x1E28, "M", "ḩ"), - (0x1E29, "V"), - (0x1E2A, "M", "ḫ"), - (0x1E2B, "V"), - (0x1E2C, "M", "ḭ"), - (0x1E2D, "V"), - (0x1E2E, "M", "ḯ"), - (0x1E2F, "V"), - (0x1E30, "M", "ḱ"), - (0x1E31, "V"), - (0x1E32, "M", "ḳ"), - (0x1E33, "V"), - (0x1E34, "M", "ḵ"), - (0x1E35, "V"), - (0x1E36, "M", "ḷ"), - (0x1E37, "V"), - (0x1E38, "M", "ḹ"), - (0x1E39, "V"), - (0x1E3A, "M", "ḻ"), - (0x1E3B, "V"), - (0x1E3C, "M", "ḽ"), - (0x1E3D, "V"), - (0x1E3E, "M", "ḿ"), - (0x1E3F, "V"), - (0x1E40, "M", "ṁ"), - (0x1E41, "V"), - (0x1E42, "M", "ṃ"), - (0x1E43, "V"), - (0x1E44, "M", "ṅ"), - (0x1E45, "V"), - (0x1E46, "M", "ṇ"), - (0x1E47, "V"), - (0x1E48, "M", "ṉ"), - (0x1E49, "V"), - (0x1E4A, "M", "ṋ"), - (0x1E4B, "V"), - (0x1E4C, "M", "ṍ"), - (0x1E4D, "V"), - (0x1E4E, "M", "ṏ"), - (0x1E4F, "V"), - (0x1E50, "M", "ṑ"), - (0x1E51, "V"), - (0x1E52, "M", "ṓ"), - (0x1E53, "V"), - (0x1E54, "M", "ṕ"), - (0x1E55, "V"), - (0x1E56, "M", "ṗ"), - (0x1E57, "V"), - (0x1E58, "M", "ṙ"), - (0x1E59, "V"), - (0x1E5A, "M", "ṛ"), - (0x1E5B, "V"), - (0x1E5C, "M", "ṝ"), - (0x1E5D, "V"), - (0x1E5E, "M", "ṟ"), - (0x1E5F, "V"), - (0x1E60, "M", "ṡ"), - (0x1E61, "V"), - (0x1E62, "M", "ṣ"), - (0x1E63, "V"), - (0x1E64, "M", "ṥ"), - (0x1E65, "V"), - (0x1E66, "M", "ṧ"), - (0x1E67, "V"), - (0x1E68, "M", "ṩ"), - (0x1E69, "V"), - (0x1E6A, "M", "ṫ"), - (0x1E6B, "V"), - (0x1E6C, "M", "ṭ"), - (0x1E6D, "V"), - (0x1E6E, "M", "ṯ"), - (0x1E6F, "V"), - (0x1E70, "M", "ṱ"), - (0x1E71, "V"), - (0x1E72, "M", "ṳ"), - (0x1E73, "V"), - (0x1E74, "M", "ṵ"), - (0x1E75, "V"), - (0x1E76, "M", "ṷ"), - (0x1E77, "V"), - (0x1E78, "M", "ṹ"), - (0x1E79, "V"), - (0x1E7A, "M", "ṻ"), - (0x1E7B, "V"), - (0x1E7C, "M", "ṽ"), - (0x1E7D, "V"), - (0x1E7E, "M", "ṿ"), - (0x1E7F, "V"), - (0x1E80, "M", "ẁ"), - (0x1E81, "V"), - (0x1E82, "M", "ẃ"), - (0x1E83, "V"), - (0x1E84, "M", "ẅ"), - (0x1E85, "V"), - (0x1E86, "M", "ẇ"), - (0x1E87, "V"), - ] - - -def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E88, "M", "ẉ"), - (0x1E89, "V"), - (0x1E8A, "M", "ẋ"), - (0x1E8B, "V"), - (0x1E8C, "M", "ẍ"), - (0x1E8D, "V"), - (0x1E8E, "M", "ẏ"), - (0x1E8F, "V"), - (0x1E90, "M", "ẑ"), - (0x1E91, "V"), - (0x1E92, "M", "ẓ"), - (0x1E93, "V"), - (0x1E94, "M", "ẕ"), - (0x1E95, "V"), - (0x1E9A, "M", "aʾ"), - (0x1E9B, "M", "ṡ"), - (0x1E9C, "V"), - (0x1E9E, "M", "ß"), - (0x1E9F, "V"), - (0x1EA0, "M", "ạ"), - (0x1EA1, "V"), - (0x1EA2, "M", "ả"), - (0x1EA3, "V"), - (0x1EA4, "M", "ấ"), - (0x1EA5, "V"), - (0x1EA6, "M", "ầ"), - (0x1EA7, "V"), - (0x1EA8, "M", "ẩ"), - (0x1EA9, "V"), - (0x1EAA, "M", "ẫ"), - (0x1EAB, "V"), - (0x1EAC, "M", "ậ"), - (0x1EAD, "V"), - (0x1EAE, "M", "ắ"), - (0x1EAF, "V"), - (0x1EB0, "M", "ằ"), - (0x1EB1, "V"), - (0x1EB2, "M", "ẳ"), - (0x1EB3, "V"), - (0x1EB4, "M", "ẵ"), - (0x1EB5, "V"), - (0x1EB6, "M", "ặ"), - (0x1EB7, "V"), - (0x1EB8, "M", "ẹ"), - (0x1EB9, "V"), - (0x1EBA, "M", "ẻ"), - (0x1EBB, "V"), - (0x1EBC, "M", "ẽ"), - (0x1EBD, "V"), - (0x1EBE, "M", "ế"), - (0x1EBF, "V"), - (0x1EC0, "M", "ề"), - (0x1EC1, "V"), - (0x1EC2, "M", "ể"), - (0x1EC3, "V"), - (0x1EC4, "M", "ễ"), - (0x1EC5, "V"), - (0x1EC6, "M", "ệ"), - (0x1EC7, "V"), - (0x1EC8, "M", "ỉ"), - (0x1EC9, "V"), - (0x1ECA, "M", "ị"), - (0x1ECB, "V"), - (0x1ECC, "M", "ọ"), - (0x1ECD, "V"), - (0x1ECE, "M", "ỏ"), - (0x1ECF, "V"), - (0x1ED0, "M", "ố"), - (0x1ED1, "V"), - (0x1ED2, "M", "ồ"), - (0x1ED3, "V"), - (0x1ED4, "M", "ổ"), - (0x1ED5, "V"), - (0x1ED6, "M", "ỗ"), - (0x1ED7, "V"), - (0x1ED8, "M", "ộ"), - (0x1ED9, "V"), - (0x1EDA, "M", "ớ"), - (0x1EDB, "V"), - (0x1EDC, "M", "ờ"), - (0x1EDD, "V"), - (0x1EDE, "M", "ở"), - (0x1EDF, "V"), - (0x1EE0, "M", "ỡ"), - (0x1EE1, "V"), - (0x1EE2, "M", "ợ"), - (0x1EE3, "V"), - (0x1EE4, "M", "ụ"), - (0x1EE5, "V"), - (0x1EE6, "M", "ủ"), - (0x1EE7, "V"), - (0x1EE8, "M", "ứ"), - (0x1EE9, "V"), - (0x1EEA, "M", "ừ"), - (0x1EEB, "V"), - (0x1EEC, "M", "ử"), - (0x1EED, "V"), - (0x1EEE, "M", "ữ"), - (0x1EEF, "V"), - (0x1EF0, "M", "ự"), - ] - - -def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EF1, "V"), - (0x1EF2, "M", "ỳ"), - (0x1EF3, "V"), - (0x1EF4, "M", "ỵ"), - (0x1EF5, "V"), - (0x1EF6, "M", "ỷ"), - (0x1EF7, "V"), - (0x1EF8, "M", "ỹ"), - (0x1EF9, "V"), - (0x1EFA, "M", "ỻ"), - (0x1EFB, "V"), - (0x1EFC, "M", "ỽ"), - (0x1EFD, "V"), - (0x1EFE, "M", "ỿ"), - (0x1EFF, "V"), - (0x1F08, "M", "ἀ"), - (0x1F09, "M", "ἁ"), - (0x1F0A, "M", "ἂ"), - (0x1F0B, "M", "ἃ"), - (0x1F0C, "M", "ἄ"), - (0x1F0D, "M", "ἅ"), - (0x1F0E, "M", "ἆ"), - (0x1F0F, "M", "ἇ"), - (0x1F10, "V"), - (0x1F16, "X"), - (0x1F18, "M", "ἐ"), - (0x1F19, "M", "ἑ"), - (0x1F1A, "M", "ἒ"), - (0x1F1B, "M", "ἓ"), - (0x1F1C, "M", "ἔ"), - (0x1F1D, "M", "ἕ"), - (0x1F1E, "X"), - (0x1F20, "V"), - (0x1F28, "M", "ἠ"), - (0x1F29, "M", "ἡ"), - (0x1F2A, "M", "ἢ"), - (0x1F2B, "M", "ἣ"), - (0x1F2C, "M", "ἤ"), - (0x1F2D, "M", "ἥ"), - (0x1F2E, "M", "ἦ"), - (0x1F2F, "M", "ἧ"), - (0x1F30, "V"), - (0x1F38, "M", "ἰ"), - (0x1F39, "M", "ἱ"), - (0x1F3A, "M", "ἲ"), - (0x1F3B, "M", "ἳ"), - (0x1F3C, "M", "ἴ"), - (0x1F3D, "M", "ἵ"), - (0x1F3E, "M", "ἶ"), - (0x1F3F, "M", "ἷ"), - (0x1F40, "V"), - (0x1F46, "X"), - (0x1F48, "M", "ὀ"), - (0x1F49, "M", "ὁ"), - (0x1F4A, "M", "ὂ"), - (0x1F4B, "M", "ὃ"), - (0x1F4C, "M", "ὄ"), - (0x1F4D, "M", "ὅ"), - (0x1F4E, "X"), - (0x1F50, "V"), - (0x1F58, "X"), - (0x1F59, "M", "ὑ"), - (0x1F5A, "X"), - (0x1F5B, "M", "ὓ"), - (0x1F5C, "X"), - (0x1F5D, "M", "ὕ"), - (0x1F5E, "X"), - (0x1F5F, "M", "ὗ"), - (0x1F60, "V"), - (0x1F68, "M", "ὠ"), - (0x1F69, "M", "ὡ"), - (0x1F6A, "M", "ὢ"), - (0x1F6B, "M", "ὣ"), - (0x1F6C, "M", "ὤ"), - (0x1F6D, "M", "ὥ"), - (0x1F6E, "M", "ὦ"), - (0x1F6F, "M", "ὧ"), - (0x1F70, "V"), - (0x1F71, "M", "ά"), - (0x1F72, "V"), - (0x1F73, "M", "έ"), - (0x1F74, "V"), - (0x1F75, "M", "ή"), - (0x1F76, "V"), - (0x1F77, "M", "ί"), - (0x1F78, "V"), - (0x1F79, "M", "ό"), - (0x1F7A, "V"), - (0x1F7B, "M", "ύ"), - (0x1F7C, "V"), - (0x1F7D, "M", "ώ"), - (0x1F7E, "X"), - (0x1F80, "M", "ἀι"), - (0x1F81, "M", "ἁι"), - (0x1F82, "M", "ἂι"), - (0x1F83, "M", "ἃι"), - (0x1F84, "M", "ἄι"), - (0x1F85, "M", "ἅι"), - (0x1F86, "M", "ἆι"), - (0x1F87, "M", "ἇι"), - ] - - -def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F88, "M", "ἀι"), - (0x1F89, "M", "ἁι"), - (0x1F8A, "M", "ἂι"), - (0x1F8B, "M", "ἃι"), - (0x1F8C, "M", "ἄι"), - (0x1F8D, "M", "ἅι"), - (0x1F8E, "M", "ἆι"), - (0x1F8F, "M", "ἇι"), - (0x1F90, "M", "ἠι"), - (0x1F91, "M", "ἡι"), - (0x1F92, "M", "ἢι"), - (0x1F93, "M", "ἣι"), - (0x1F94, "M", "ἤι"), - (0x1F95, "M", "ἥι"), - (0x1F96, "M", "ἦι"), - (0x1F97, "M", "ἧι"), - (0x1F98, "M", "ἠι"), - (0x1F99, "M", "ἡι"), - (0x1F9A, "M", "ἢι"), - (0x1F9B, "M", "ἣι"), - (0x1F9C, "M", "ἤι"), - (0x1F9D, "M", "ἥι"), - (0x1F9E, "M", "ἦι"), - (0x1F9F, "M", "ἧι"), - (0x1FA0, "M", "ὠι"), - (0x1FA1, "M", "ὡι"), - (0x1FA2, "M", "ὢι"), - (0x1FA3, "M", "ὣι"), - (0x1FA4, "M", "ὤι"), - (0x1FA5, "M", "ὥι"), - (0x1FA6, "M", "ὦι"), - (0x1FA7, "M", "ὧι"), - (0x1FA8, "M", "ὠι"), - (0x1FA9, "M", "ὡι"), - (0x1FAA, "M", "ὢι"), - (0x1FAB, "M", "ὣι"), - (0x1FAC, "M", "ὤι"), - (0x1FAD, "M", "ὥι"), - (0x1FAE, "M", "ὦι"), - (0x1FAF, "M", "ὧι"), - (0x1FB0, "V"), - (0x1FB2, "M", "ὰι"), - (0x1FB3, "M", "αι"), - (0x1FB4, "M", "άι"), - (0x1FB5, "X"), - (0x1FB6, "V"), - (0x1FB7, "M", "ᾶι"), - (0x1FB8, "M", "ᾰ"), - (0x1FB9, "M", "ᾱ"), - (0x1FBA, "M", "ὰ"), - (0x1FBB, "M", "ά"), - (0x1FBC, "M", "αι"), - (0x1FBD, "3", " ̓"), - (0x1FBE, "M", "ι"), - (0x1FBF, "3", " ̓"), - (0x1FC0, "3", " ͂"), - (0x1FC1, "3", " ̈͂"), - (0x1FC2, "M", "ὴι"), - (0x1FC3, "M", "ηι"), - (0x1FC4, "M", "ήι"), - (0x1FC5, "X"), - (0x1FC6, "V"), - (0x1FC7, "M", "ῆι"), - (0x1FC8, "M", "ὲ"), - (0x1FC9, "M", "έ"), - (0x1FCA, "M", "ὴ"), - (0x1FCB, "M", "ή"), - (0x1FCC, "M", "ηι"), - (0x1FCD, "3", " ̓̀"), - (0x1FCE, "3", " ̓́"), - (0x1FCF, "3", " ̓͂"), - (0x1FD0, "V"), - (0x1FD3, "M", "ΐ"), - (0x1FD4, "X"), - (0x1FD6, "V"), - (0x1FD8, "M", "ῐ"), - (0x1FD9, "M", "ῑ"), - (0x1FDA, "M", "ὶ"), - (0x1FDB, "M", "ί"), - (0x1FDC, "X"), - (0x1FDD, "3", " ̔̀"), - (0x1FDE, "3", " ̔́"), - (0x1FDF, "3", " ̔͂"), - (0x1FE0, "V"), - (0x1FE3, "M", "ΰ"), - (0x1FE4, "V"), - (0x1FE8, "M", "ῠ"), - (0x1FE9, "M", "ῡ"), - (0x1FEA, "M", "ὺ"), - (0x1FEB, "M", "ύ"), - (0x1FEC, "M", "ῥ"), - (0x1FED, "3", " ̈̀"), - (0x1FEE, "3", " ̈́"), - (0x1FEF, "3", "`"), - (0x1FF0, "X"), - (0x1FF2, "M", "ὼι"), - (0x1FF3, "M", "ωι"), - (0x1FF4, "M", "ώι"), - (0x1FF5, "X"), - (0x1FF6, "V"), - ] - - -def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1FF7, "M", "ῶι"), - (0x1FF8, "M", "ὸ"), - (0x1FF9, "M", "ό"), - (0x1FFA, "M", "ὼ"), - (0x1FFB, "M", "ώ"), - (0x1FFC, "M", "ωι"), - (0x1FFD, "3", " ́"), - (0x1FFE, "3", " ̔"), - (0x1FFF, "X"), - (0x2000, "3", " "), - (0x200B, "I"), - (0x200C, "D", ""), - (0x200E, "X"), - (0x2010, "V"), - (0x2011, "M", "‐"), - (0x2012, "V"), - (0x2017, "3", " ̳"), - (0x2018, "V"), - (0x2024, "X"), - (0x2027, "V"), - (0x2028, "X"), - (0x202F, "3", " "), - (0x2030, "V"), - (0x2033, "M", "′′"), - (0x2034, "M", "′′′"), - (0x2035, "V"), - (0x2036, "M", "‵‵"), - (0x2037, "M", "‵‵‵"), - (0x2038, "V"), - (0x203C, "3", "!!"), - (0x203D, "V"), - (0x203E, "3", " ̅"), - (0x203F, "V"), - (0x2047, "3", "??"), - (0x2048, "3", "?!"), - (0x2049, "3", "!?"), - (0x204A, "V"), - (0x2057, "M", "′′′′"), - (0x2058, "V"), - (0x205F, "3", " "), - (0x2060, "I"), - (0x2061, "X"), - (0x2064, "I"), - (0x2065, "X"), - (0x2070, "M", "0"), - (0x2071, "M", "i"), - (0x2072, "X"), - (0x2074, "M", "4"), - (0x2075, "M", "5"), - (0x2076, "M", "6"), - (0x2077, "M", "7"), - (0x2078, "M", "8"), - (0x2079, "M", "9"), - (0x207A, "3", "+"), - (0x207B, "M", "−"), - (0x207C, "3", "="), - (0x207D, "3", "("), - (0x207E, "3", ")"), - (0x207F, "M", "n"), - (0x2080, "M", "0"), - (0x2081, "M", "1"), - (0x2082, "M", "2"), - (0x2083, "M", "3"), - (0x2084, "M", "4"), - (0x2085, "M", "5"), - (0x2086, "M", "6"), - (0x2087, "M", "7"), - (0x2088, "M", "8"), - (0x2089, "M", "9"), - (0x208A, "3", "+"), - (0x208B, "M", "−"), - (0x208C, "3", "="), - (0x208D, "3", "("), - (0x208E, "3", ")"), - (0x208F, "X"), - (0x2090, "M", "a"), - (0x2091, "M", "e"), - (0x2092, "M", "o"), - (0x2093, "M", "x"), - (0x2094, "M", "ə"), - (0x2095, "M", "h"), - (0x2096, "M", "k"), - (0x2097, "M", "l"), - (0x2098, "M", "m"), - (0x2099, "M", "n"), - (0x209A, "M", "p"), - (0x209B, "M", "s"), - (0x209C, "M", "t"), - (0x209D, "X"), - (0x20A0, "V"), - (0x20A8, "M", "rs"), - (0x20A9, "V"), - (0x20C1, "X"), - (0x20D0, "V"), - (0x20F1, "X"), - (0x2100, "3", "a/c"), - (0x2101, "3", "a/s"), - (0x2102, "M", "c"), - (0x2103, "M", "°c"), - (0x2104, "V"), - ] - - -def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2105, "3", "c/o"), - (0x2106, "3", "c/u"), - (0x2107, "M", "ɛ"), - (0x2108, "V"), - (0x2109, "M", "°f"), - (0x210A, "M", "g"), - (0x210B, "M", "h"), - (0x210F, "M", "ħ"), - (0x2110, "M", "i"), - (0x2112, "M", "l"), - (0x2114, "V"), - (0x2115, "M", "n"), - (0x2116, "M", "no"), - (0x2117, "V"), - (0x2119, "M", "p"), - (0x211A, "M", "q"), - (0x211B, "M", "r"), - (0x211E, "V"), - (0x2120, "M", "sm"), - (0x2121, "M", "tel"), - (0x2122, "M", "tm"), - (0x2123, "V"), - (0x2124, "M", "z"), - (0x2125, "V"), - (0x2126, "M", "ω"), - (0x2127, "V"), - (0x2128, "M", "z"), - (0x2129, "V"), - (0x212A, "M", "k"), - (0x212B, "M", "å"), - (0x212C, "M", "b"), - (0x212D, "M", "c"), - (0x212E, "V"), - (0x212F, "M", "e"), - (0x2131, "M", "f"), - (0x2132, "X"), - (0x2133, "M", "m"), - (0x2134, "M", "o"), - (0x2135, "M", "א"), - (0x2136, "M", "ב"), - (0x2137, "M", "ג"), - (0x2138, "M", "ד"), - (0x2139, "M", "i"), - (0x213A, "V"), - (0x213B, "M", "fax"), - (0x213C, "M", "π"), - (0x213D, "M", "γ"), - (0x213F, "M", "π"), - (0x2140, "M", "∑"), - (0x2141, "V"), - (0x2145, "M", "d"), - (0x2147, "M", "e"), - (0x2148, "M", "i"), - (0x2149, "M", "j"), - (0x214A, "V"), - (0x2150, "M", "1⁄7"), - (0x2151, "M", "1⁄9"), - (0x2152, "M", "1⁄10"), - (0x2153, "M", "1⁄3"), - (0x2154, "M", "2⁄3"), - (0x2155, "M", "1⁄5"), - (0x2156, "M", "2⁄5"), - (0x2157, "M", "3⁄5"), - (0x2158, "M", "4⁄5"), - (0x2159, "M", "1⁄6"), - (0x215A, "M", "5⁄6"), - (0x215B, "M", "1⁄8"), - (0x215C, "M", "3⁄8"), - (0x215D, "M", "5⁄8"), - (0x215E, "M", "7⁄8"), - (0x215F, "M", "1⁄"), - (0x2160, "M", "i"), - (0x2161, "M", "ii"), - (0x2162, "M", "iii"), - (0x2163, "M", "iv"), - (0x2164, "M", "v"), - (0x2165, "M", "vi"), - (0x2166, "M", "vii"), - (0x2167, "M", "viii"), - (0x2168, "M", "ix"), - (0x2169, "M", "x"), - (0x216A, "M", "xi"), - (0x216B, "M", "xii"), - (0x216C, "M", "l"), - (0x216D, "M", "c"), - (0x216E, "M", "d"), - (0x216F, "M", "m"), - (0x2170, "M", "i"), - (0x2171, "M", "ii"), - (0x2172, "M", "iii"), - (0x2173, "M", "iv"), - (0x2174, "M", "v"), - (0x2175, "M", "vi"), - (0x2176, "M", "vii"), - (0x2177, "M", "viii"), - (0x2178, "M", "ix"), - (0x2179, "M", "x"), - (0x217A, "M", "xi"), - (0x217B, "M", "xii"), - (0x217C, "M", "l"), - ] - - -def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x217D, "M", "c"), - (0x217E, "M", "d"), - (0x217F, "M", "m"), - (0x2180, "V"), - (0x2183, "X"), - (0x2184, "V"), - (0x2189, "M", "0⁄3"), - (0x218A, "V"), - (0x218C, "X"), - (0x2190, "V"), - (0x222C, "M", "∫∫"), - (0x222D, "M", "∫∫∫"), - (0x222E, "V"), - (0x222F, "M", "∮∮"), - (0x2230, "M", "∮∮∮"), - (0x2231, "V"), - (0x2329, "M", "〈"), - (0x232A, "M", "〉"), - (0x232B, "V"), - (0x2427, "X"), - (0x2440, "V"), - (0x244B, "X"), - (0x2460, "M", "1"), - (0x2461, "M", "2"), - (0x2462, "M", "3"), - (0x2463, "M", "4"), - (0x2464, "M", "5"), - (0x2465, "M", "6"), - (0x2466, "M", "7"), - (0x2467, "M", "8"), - (0x2468, "M", "9"), - (0x2469, "M", "10"), - (0x246A, "M", "11"), - (0x246B, "M", "12"), - (0x246C, "M", "13"), - (0x246D, "M", "14"), - (0x246E, "M", "15"), - (0x246F, "M", "16"), - (0x2470, "M", "17"), - (0x2471, "M", "18"), - (0x2472, "M", "19"), - (0x2473, "M", "20"), - (0x2474, "3", "(1)"), - (0x2475, "3", "(2)"), - (0x2476, "3", "(3)"), - (0x2477, "3", "(4)"), - (0x2478, "3", "(5)"), - (0x2479, "3", "(6)"), - (0x247A, "3", "(7)"), - (0x247B, "3", "(8)"), - (0x247C, "3", "(9)"), - (0x247D, "3", "(10)"), - (0x247E, "3", "(11)"), - (0x247F, "3", "(12)"), - (0x2480, "3", "(13)"), - (0x2481, "3", "(14)"), - (0x2482, "3", "(15)"), - (0x2483, "3", "(16)"), - (0x2484, "3", "(17)"), - (0x2485, "3", "(18)"), - (0x2486, "3", "(19)"), - (0x2487, "3", "(20)"), - (0x2488, "X"), - (0x249C, "3", "(a)"), - (0x249D, "3", "(b)"), - (0x249E, "3", "(c)"), - (0x249F, "3", "(d)"), - (0x24A0, "3", "(e)"), - (0x24A1, "3", "(f)"), - (0x24A2, "3", "(g)"), - (0x24A3, "3", "(h)"), - (0x24A4, "3", "(i)"), - (0x24A5, "3", "(j)"), - (0x24A6, "3", "(k)"), - (0x24A7, "3", "(l)"), - (0x24A8, "3", "(m)"), - (0x24A9, "3", "(n)"), - (0x24AA, "3", "(o)"), - (0x24AB, "3", "(p)"), - (0x24AC, "3", "(q)"), - (0x24AD, "3", "(r)"), - (0x24AE, "3", "(s)"), - (0x24AF, "3", "(t)"), - (0x24B0, "3", "(u)"), - (0x24B1, "3", "(v)"), - (0x24B2, "3", "(w)"), - (0x24B3, "3", "(x)"), - (0x24B4, "3", "(y)"), - (0x24B5, "3", "(z)"), - (0x24B6, "M", "a"), - (0x24B7, "M", "b"), - (0x24B8, "M", "c"), - (0x24B9, "M", "d"), - (0x24BA, "M", "e"), - (0x24BB, "M", "f"), - (0x24BC, "M", "g"), - (0x24BD, "M", "h"), - (0x24BE, "M", "i"), - (0x24BF, "M", "j"), - (0x24C0, "M", "k"), - ] - - -def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x24C1, "M", "l"), - (0x24C2, "M", "m"), - (0x24C3, "M", "n"), - (0x24C4, "M", "o"), - (0x24C5, "M", "p"), - (0x24C6, "M", "q"), - (0x24C7, "M", "r"), - (0x24C8, "M", "s"), - (0x24C9, "M", "t"), - (0x24CA, "M", "u"), - (0x24CB, "M", "v"), - (0x24CC, "M", "w"), - (0x24CD, "M", "x"), - (0x24CE, "M", "y"), - (0x24CF, "M", "z"), - (0x24D0, "M", "a"), - (0x24D1, "M", "b"), - (0x24D2, "M", "c"), - (0x24D3, "M", "d"), - (0x24D4, "M", "e"), - (0x24D5, "M", "f"), - (0x24D6, "M", "g"), - (0x24D7, "M", "h"), - (0x24D8, "M", "i"), - (0x24D9, "M", "j"), - (0x24DA, "M", "k"), - (0x24DB, "M", "l"), - (0x24DC, "M", "m"), - (0x24DD, "M", "n"), - (0x24DE, "M", "o"), - (0x24DF, "M", "p"), - (0x24E0, "M", "q"), - (0x24E1, "M", "r"), - (0x24E2, "M", "s"), - (0x24E3, "M", "t"), - (0x24E4, "M", "u"), - (0x24E5, "M", "v"), - (0x24E6, "M", "w"), - (0x24E7, "M", "x"), - (0x24E8, "M", "y"), - (0x24E9, "M", "z"), - (0x24EA, "M", "0"), - (0x24EB, "V"), - (0x2A0C, "M", "∫∫∫∫"), - (0x2A0D, "V"), - (0x2A74, "3", "::="), - (0x2A75, "3", "=="), - (0x2A76, "3", "==="), - (0x2A77, "V"), - (0x2ADC, "M", "⫝̸"), - (0x2ADD, "V"), - (0x2B74, "X"), - (0x2B76, "V"), - (0x2B96, "X"), - (0x2B97, "V"), - (0x2C00, "M", "ⰰ"), - (0x2C01, "M", "ⰱ"), - (0x2C02, "M", "ⰲ"), - (0x2C03, "M", "ⰳ"), - (0x2C04, "M", "ⰴ"), - (0x2C05, "M", "ⰵ"), - (0x2C06, "M", "ⰶ"), - (0x2C07, "M", "ⰷ"), - (0x2C08, "M", "ⰸ"), - (0x2C09, "M", "ⰹ"), - (0x2C0A, "M", "ⰺ"), - (0x2C0B, "M", "ⰻ"), - (0x2C0C, "M", "ⰼ"), - (0x2C0D, "M", "ⰽ"), - (0x2C0E, "M", "ⰾ"), - (0x2C0F, "M", "ⰿ"), - (0x2C10, "M", "ⱀ"), - (0x2C11, "M", "ⱁ"), - (0x2C12, "M", "ⱂ"), - (0x2C13, "M", "ⱃ"), - (0x2C14, "M", "ⱄ"), - (0x2C15, "M", "ⱅ"), - (0x2C16, "M", "ⱆ"), - (0x2C17, "M", "ⱇ"), - (0x2C18, "M", "ⱈ"), - (0x2C19, "M", "ⱉ"), - (0x2C1A, "M", "ⱊ"), - (0x2C1B, "M", "ⱋ"), - (0x2C1C, "M", "ⱌ"), - (0x2C1D, "M", "ⱍ"), - (0x2C1E, "M", "ⱎ"), - (0x2C1F, "M", "ⱏ"), - (0x2C20, "M", "ⱐ"), - (0x2C21, "M", "ⱑ"), - (0x2C22, "M", "ⱒ"), - (0x2C23, "M", "ⱓ"), - (0x2C24, "M", "ⱔ"), - (0x2C25, "M", "ⱕ"), - (0x2C26, "M", "ⱖ"), - (0x2C27, "M", "ⱗ"), - (0x2C28, "M", "ⱘ"), - (0x2C29, "M", "ⱙ"), - (0x2C2A, "M", "ⱚ"), - (0x2C2B, "M", "ⱛ"), - (0x2C2C, "M", "ⱜ"), - ] - - -def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2C2D, "M", "ⱝ"), - (0x2C2E, "M", "ⱞ"), - (0x2C2F, "M", "ⱟ"), - (0x2C30, "V"), - (0x2C60, "M", "ⱡ"), - (0x2C61, "V"), - (0x2C62, "M", "ɫ"), - (0x2C63, "M", "ᵽ"), - (0x2C64, "M", "ɽ"), - (0x2C65, "V"), - (0x2C67, "M", "ⱨ"), - (0x2C68, "V"), - (0x2C69, "M", "ⱪ"), - (0x2C6A, "V"), - (0x2C6B, "M", "ⱬ"), - (0x2C6C, "V"), - (0x2C6D, "M", "ɑ"), - (0x2C6E, "M", "ɱ"), - (0x2C6F, "M", "ɐ"), - (0x2C70, "M", "ɒ"), - (0x2C71, "V"), - (0x2C72, "M", "ⱳ"), - (0x2C73, "V"), - (0x2C75, "M", "ⱶ"), - (0x2C76, "V"), - (0x2C7C, "M", "j"), - (0x2C7D, "M", "v"), - (0x2C7E, "M", "ȿ"), - (0x2C7F, "M", "ɀ"), - (0x2C80, "M", "ⲁ"), - (0x2C81, "V"), - (0x2C82, "M", "ⲃ"), - (0x2C83, "V"), - (0x2C84, "M", "ⲅ"), - (0x2C85, "V"), - (0x2C86, "M", "ⲇ"), - (0x2C87, "V"), - (0x2C88, "M", "ⲉ"), - (0x2C89, "V"), - (0x2C8A, "M", "ⲋ"), - (0x2C8B, "V"), - (0x2C8C, "M", "ⲍ"), - (0x2C8D, "V"), - (0x2C8E, "M", "ⲏ"), - (0x2C8F, "V"), - (0x2C90, "M", "ⲑ"), - (0x2C91, "V"), - (0x2C92, "M", "ⲓ"), - (0x2C93, "V"), - (0x2C94, "M", "ⲕ"), - (0x2C95, "V"), - (0x2C96, "M", "ⲗ"), - (0x2C97, "V"), - (0x2C98, "M", "ⲙ"), - (0x2C99, "V"), - (0x2C9A, "M", "ⲛ"), - (0x2C9B, "V"), - (0x2C9C, "M", "ⲝ"), - (0x2C9D, "V"), - (0x2C9E, "M", "ⲟ"), - (0x2C9F, "V"), - (0x2CA0, "M", "ⲡ"), - (0x2CA1, "V"), - (0x2CA2, "M", "ⲣ"), - (0x2CA3, "V"), - (0x2CA4, "M", "ⲥ"), - (0x2CA5, "V"), - (0x2CA6, "M", "ⲧ"), - (0x2CA7, "V"), - (0x2CA8, "M", "ⲩ"), - (0x2CA9, "V"), - (0x2CAA, "M", "ⲫ"), - (0x2CAB, "V"), - (0x2CAC, "M", "ⲭ"), - (0x2CAD, "V"), - (0x2CAE, "M", "ⲯ"), - (0x2CAF, "V"), - (0x2CB0, "M", "ⲱ"), - (0x2CB1, "V"), - (0x2CB2, "M", "ⲳ"), - (0x2CB3, "V"), - (0x2CB4, "M", "ⲵ"), - (0x2CB5, "V"), - (0x2CB6, "M", "ⲷ"), - (0x2CB7, "V"), - (0x2CB8, "M", "ⲹ"), - (0x2CB9, "V"), - (0x2CBA, "M", "ⲻ"), - (0x2CBB, "V"), - (0x2CBC, "M", "ⲽ"), - (0x2CBD, "V"), - (0x2CBE, "M", "ⲿ"), - (0x2CBF, "V"), - (0x2CC0, "M", "ⳁ"), - (0x2CC1, "V"), - (0x2CC2, "M", "ⳃ"), - (0x2CC3, "V"), - (0x2CC4, "M", "ⳅ"), - (0x2CC5, "V"), - (0x2CC6, "M", "ⳇ"), - ] - - -def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2CC7, "V"), - (0x2CC8, "M", "ⳉ"), - (0x2CC9, "V"), - (0x2CCA, "M", "ⳋ"), - (0x2CCB, "V"), - (0x2CCC, "M", "ⳍ"), - (0x2CCD, "V"), - (0x2CCE, "M", "ⳏ"), - (0x2CCF, "V"), - (0x2CD0, "M", "ⳑ"), - (0x2CD1, "V"), - (0x2CD2, "M", "ⳓ"), - (0x2CD3, "V"), - (0x2CD4, "M", "ⳕ"), - (0x2CD5, "V"), - (0x2CD6, "M", "ⳗ"), - (0x2CD7, "V"), - (0x2CD8, "M", "ⳙ"), - (0x2CD9, "V"), - (0x2CDA, "M", "ⳛ"), - (0x2CDB, "V"), - (0x2CDC, "M", "ⳝ"), - (0x2CDD, "V"), - (0x2CDE, "M", "ⳟ"), - (0x2CDF, "V"), - (0x2CE0, "M", "ⳡ"), - (0x2CE1, "V"), - (0x2CE2, "M", "ⳣ"), - (0x2CE3, "V"), - (0x2CEB, "M", "ⳬ"), - (0x2CEC, "V"), - (0x2CED, "M", "ⳮ"), - (0x2CEE, "V"), - (0x2CF2, "M", "ⳳ"), - (0x2CF3, "V"), - (0x2CF4, "X"), - (0x2CF9, "V"), - (0x2D26, "X"), - (0x2D27, "V"), - (0x2D28, "X"), - (0x2D2D, "V"), - (0x2D2E, "X"), - (0x2D30, "V"), - (0x2D68, "X"), - (0x2D6F, "M", "ⵡ"), - (0x2D70, "V"), - (0x2D71, "X"), - (0x2D7F, "V"), - (0x2D97, "X"), - (0x2DA0, "V"), - (0x2DA7, "X"), - (0x2DA8, "V"), - (0x2DAF, "X"), - (0x2DB0, "V"), - (0x2DB7, "X"), - (0x2DB8, "V"), - (0x2DBF, "X"), - (0x2DC0, "V"), - (0x2DC7, "X"), - (0x2DC8, "V"), - (0x2DCF, "X"), - (0x2DD0, "V"), - (0x2DD7, "X"), - (0x2DD8, "V"), - (0x2DDF, "X"), - (0x2DE0, "V"), - (0x2E5E, "X"), - (0x2E80, "V"), - (0x2E9A, "X"), - (0x2E9B, "V"), - (0x2E9F, "M", "母"), - (0x2EA0, "V"), - (0x2EF3, "M", "龟"), - (0x2EF4, "X"), - (0x2F00, "M", "一"), - (0x2F01, "M", "丨"), - (0x2F02, "M", "丶"), - (0x2F03, "M", "丿"), - (0x2F04, "M", "乙"), - (0x2F05, "M", "亅"), - (0x2F06, "M", "二"), - (0x2F07, "M", "亠"), - (0x2F08, "M", "人"), - (0x2F09, "M", "儿"), - (0x2F0A, "M", "入"), - (0x2F0B, "M", "八"), - (0x2F0C, "M", "冂"), - (0x2F0D, "M", "冖"), - (0x2F0E, "M", "冫"), - (0x2F0F, "M", "几"), - (0x2F10, "M", "凵"), - (0x2F11, "M", "刀"), - (0x2F12, "M", "力"), - (0x2F13, "M", "勹"), - (0x2F14, "M", "匕"), - (0x2F15, "M", "匚"), - (0x2F16, "M", "匸"), - (0x2F17, "M", "十"), - (0x2F18, "M", "卜"), - (0x2F19, "M", "卩"), - ] - - -def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F1A, "M", "厂"), - (0x2F1B, "M", "厶"), - (0x2F1C, "M", "又"), - (0x2F1D, "M", "口"), - (0x2F1E, "M", "囗"), - (0x2F1F, "M", "土"), - (0x2F20, "M", "士"), - (0x2F21, "M", "夂"), - (0x2F22, "M", "夊"), - (0x2F23, "M", "夕"), - (0x2F24, "M", "大"), - (0x2F25, "M", "女"), - (0x2F26, "M", "子"), - (0x2F27, "M", "宀"), - (0x2F28, "M", "寸"), - (0x2F29, "M", "小"), - (0x2F2A, "M", "尢"), - (0x2F2B, "M", "尸"), - (0x2F2C, "M", "屮"), - (0x2F2D, "M", "山"), - (0x2F2E, "M", "巛"), - (0x2F2F, "M", "工"), - (0x2F30, "M", "己"), - (0x2F31, "M", "巾"), - (0x2F32, "M", "干"), - (0x2F33, "M", "幺"), - (0x2F34, "M", "广"), - (0x2F35, "M", "廴"), - (0x2F36, "M", "廾"), - (0x2F37, "M", "弋"), - (0x2F38, "M", "弓"), - (0x2F39, "M", "彐"), - (0x2F3A, "M", "彡"), - (0x2F3B, "M", "彳"), - (0x2F3C, "M", "心"), - (0x2F3D, "M", "戈"), - (0x2F3E, "M", "戶"), - (0x2F3F, "M", "手"), - (0x2F40, "M", "支"), - (0x2F41, "M", "攴"), - (0x2F42, "M", "文"), - (0x2F43, "M", "斗"), - (0x2F44, "M", "斤"), - (0x2F45, "M", "方"), - (0x2F46, "M", "无"), - (0x2F47, "M", "日"), - (0x2F48, "M", "曰"), - (0x2F49, "M", "月"), - (0x2F4A, "M", "木"), - (0x2F4B, "M", "欠"), - (0x2F4C, "M", "止"), - (0x2F4D, "M", "歹"), - (0x2F4E, "M", "殳"), - (0x2F4F, "M", "毋"), - (0x2F50, "M", "比"), - (0x2F51, "M", "毛"), - (0x2F52, "M", "氏"), - (0x2F53, "M", "气"), - (0x2F54, "M", "水"), - (0x2F55, "M", "火"), - (0x2F56, "M", "爪"), - (0x2F57, "M", "父"), - (0x2F58, "M", "爻"), - (0x2F59, "M", "爿"), - (0x2F5A, "M", "片"), - (0x2F5B, "M", "牙"), - (0x2F5C, "M", "牛"), - (0x2F5D, "M", "犬"), - (0x2F5E, "M", "玄"), - (0x2F5F, "M", "玉"), - (0x2F60, "M", "瓜"), - (0x2F61, "M", "瓦"), - (0x2F62, "M", "甘"), - (0x2F63, "M", "生"), - (0x2F64, "M", "用"), - (0x2F65, "M", "田"), - (0x2F66, "M", "疋"), - (0x2F67, "M", "疒"), - (0x2F68, "M", "癶"), - (0x2F69, "M", "白"), - (0x2F6A, "M", "皮"), - (0x2F6B, "M", "皿"), - (0x2F6C, "M", "目"), - (0x2F6D, "M", "矛"), - (0x2F6E, "M", "矢"), - (0x2F6F, "M", "石"), - (0x2F70, "M", "示"), - (0x2F71, "M", "禸"), - (0x2F72, "M", "禾"), - (0x2F73, "M", "穴"), - (0x2F74, "M", "立"), - (0x2F75, "M", "竹"), - (0x2F76, "M", "米"), - (0x2F77, "M", "糸"), - (0x2F78, "M", "缶"), - (0x2F79, "M", "网"), - (0x2F7A, "M", "羊"), - (0x2F7B, "M", "羽"), - (0x2F7C, "M", "老"), - (0x2F7D, "M", "而"), - ] - - -def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F7E, "M", "耒"), - (0x2F7F, "M", "耳"), - (0x2F80, "M", "聿"), - (0x2F81, "M", "肉"), - (0x2F82, "M", "臣"), - (0x2F83, "M", "自"), - (0x2F84, "M", "至"), - (0x2F85, "M", "臼"), - (0x2F86, "M", "舌"), - (0x2F87, "M", "舛"), - (0x2F88, "M", "舟"), - (0x2F89, "M", "艮"), - (0x2F8A, "M", "色"), - (0x2F8B, "M", "艸"), - (0x2F8C, "M", "虍"), - (0x2F8D, "M", "虫"), - (0x2F8E, "M", "血"), - (0x2F8F, "M", "行"), - (0x2F90, "M", "衣"), - (0x2F91, "M", "襾"), - (0x2F92, "M", "見"), - (0x2F93, "M", "角"), - (0x2F94, "M", "言"), - (0x2F95, "M", "谷"), - (0x2F96, "M", "豆"), - (0x2F97, "M", "豕"), - (0x2F98, "M", "豸"), - (0x2F99, "M", "貝"), - (0x2F9A, "M", "赤"), - (0x2F9B, "M", "走"), - (0x2F9C, "M", "足"), - (0x2F9D, "M", "身"), - (0x2F9E, "M", "車"), - (0x2F9F, "M", "辛"), - (0x2FA0, "M", "辰"), - (0x2FA1, "M", "辵"), - (0x2FA2, "M", "邑"), - (0x2FA3, "M", "酉"), - (0x2FA4, "M", "釆"), - (0x2FA5, "M", "里"), - (0x2FA6, "M", "金"), - (0x2FA7, "M", "長"), - (0x2FA8, "M", "門"), - (0x2FA9, "M", "阜"), - (0x2FAA, "M", "隶"), - (0x2FAB, "M", "隹"), - (0x2FAC, "M", "雨"), - (0x2FAD, "M", "靑"), - (0x2FAE, "M", "非"), - (0x2FAF, "M", "面"), - (0x2FB0, "M", "革"), - (0x2FB1, "M", "韋"), - (0x2FB2, "M", "韭"), - (0x2FB3, "M", "音"), - (0x2FB4, "M", "頁"), - (0x2FB5, "M", "風"), - (0x2FB6, "M", "飛"), - (0x2FB7, "M", "食"), - (0x2FB8, "M", "首"), - (0x2FB9, "M", "香"), - (0x2FBA, "M", "馬"), - (0x2FBB, "M", "骨"), - (0x2FBC, "M", "高"), - (0x2FBD, "M", "髟"), - (0x2FBE, "M", "鬥"), - (0x2FBF, "M", "鬯"), - (0x2FC0, "M", "鬲"), - (0x2FC1, "M", "鬼"), - (0x2FC2, "M", "魚"), - (0x2FC3, "M", "鳥"), - (0x2FC4, "M", "鹵"), - (0x2FC5, "M", "鹿"), - (0x2FC6, "M", "麥"), - (0x2FC7, "M", "麻"), - (0x2FC8, "M", "黃"), - (0x2FC9, "M", "黍"), - (0x2FCA, "M", "黑"), - (0x2FCB, "M", "黹"), - (0x2FCC, "M", "黽"), - (0x2FCD, "M", "鼎"), - (0x2FCE, "M", "鼓"), - (0x2FCF, "M", "鼠"), - (0x2FD0, "M", "鼻"), - (0x2FD1, "M", "齊"), - (0x2FD2, "M", "齒"), - (0x2FD3, "M", "龍"), - (0x2FD4, "M", "龜"), - (0x2FD5, "M", "龠"), - (0x2FD6, "X"), - (0x3000, "3", " "), - (0x3001, "V"), - (0x3002, "M", "."), - (0x3003, "V"), - (0x3036, "M", "〒"), - (0x3037, "V"), - (0x3038, "M", "十"), - (0x3039, "M", "卄"), - (0x303A, "M", "卅"), - (0x303B, "V"), - (0x3040, "X"), - ] - - -def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3041, "V"), - (0x3097, "X"), - (0x3099, "V"), - (0x309B, "3", " ゙"), - (0x309C, "3", " ゚"), - (0x309D, "V"), - (0x309F, "M", "より"), - (0x30A0, "V"), - (0x30FF, "M", "コト"), - (0x3100, "X"), - (0x3105, "V"), - (0x3130, "X"), - (0x3131, "M", "ᄀ"), - (0x3132, "M", "ᄁ"), - (0x3133, "M", "ᆪ"), - (0x3134, "M", "ᄂ"), - (0x3135, "M", "ᆬ"), - (0x3136, "M", "ᆭ"), - (0x3137, "M", "ᄃ"), - (0x3138, "M", "ᄄ"), - (0x3139, "M", "ᄅ"), - (0x313A, "M", "ᆰ"), - (0x313B, "M", "ᆱ"), - (0x313C, "M", "ᆲ"), - (0x313D, "M", "ᆳ"), - (0x313E, "M", "ᆴ"), - (0x313F, "M", "ᆵ"), - (0x3140, "M", "ᄚ"), - (0x3141, "M", "ᄆ"), - (0x3142, "M", "ᄇ"), - (0x3143, "M", "ᄈ"), - (0x3144, "M", "ᄡ"), - (0x3145, "M", "ᄉ"), - (0x3146, "M", "ᄊ"), - (0x3147, "M", "ᄋ"), - (0x3148, "M", "ᄌ"), - (0x3149, "M", "ᄍ"), - (0x314A, "M", "ᄎ"), - (0x314B, "M", "ᄏ"), - (0x314C, "M", "ᄐ"), - (0x314D, "M", "ᄑ"), - (0x314E, "M", "ᄒ"), - (0x314F, "M", "ᅡ"), - (0x3150, "M", "ᅢ"), - (0x3151, "M", "ᅣ"), - (0x3152, "M", "ᅤ"), - (0x3153, "M", "ᅥ"), - (0x3154, "M", "ᅦ"), - (0x3155, "M", "ᅧ"), - (0x3156, "M", "ᅨ"), - (0x3157, "M", "ᅩ"), - (0x3158, "M", "ᅪ"), - (0x3159, "M", "ᅫ"), - (0x315A, "M", "ᅬ"), - (0x315B, "M", "ᅭ"), - (0x315C, "M", "ᅮ"), - (0x315D, "M", "ᅯ"), - (0x315E, "M", "ᅰ"), - (0x315F, "M", "ᅱ"), - (0x3160, "M", "ᅲ"), - (0x3161, "M", "ᅳ"), - (0x3162, "M", "ᅴ"), - (0x3163, "M", "ᅵ"), - (0x3164, "X"), - (0x3165, "M", "ᄔ"), - (0x3166, "M", "ᄕ"), - (0x3167, "M", "ᇇ"), - (0x3168, "M", "ᇈ"), - (0x3169, "M", "ᇌ"), - (0x316A, "M", "ᇎ"), - (0x316B, "M", "ᇓ"), - (0x316C, "M", "ᇗ"), - (0x316D, "M", "ᇙ"), - (0x316E, "M", "ᄜ"), - (0x316F, "M", "ᇝ"), - (0x3170, "M", "ᇟ"), - (0x3171, "M", "ᄝ"), - (0x3172, "M", "ᄞ"), - (0x3173, "M", "ᄠ"), - (0x3174, "M", "ᄢ"), - (0x3175, "M", "ᄣ"), - (0x3176, "M", "ᄧ"), - (0x3177, "M", "ᄩ"), - (0x3178, "M", "ᄫ"), - (0x3179, "M", "ᄬ"), - (0x317A, "M", "ᄭ"), - (0x317B, "M", "ᄮ"), - (0x317C, "M", "ᄯ"), - (0x317D, "M", "ᄲ"), - (0x317E, "M", "ᄶ"), - (0x317F, "M", "ᅀ"), - (0x3180, "M", "ᅇ"), - (0x3181, "M", "ᅌ"), - (0x3182, "M", "ᇱ"), - (0x3183, "M", "ᇲ"), - (0x3184, "M", "ᅗ"), - (0x3185, "M", "ᅘ"), - (0x3186, "M", "ᅙ"), - (0x3187, "M", "ᆄ"), - (0x3188, "M", "ᆅ"), - ] - - -def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3189, "M", "ᆈ"), - (0x318A, "M", "ᆑ"), - (0x318B, "M", "ᆒ"), - (0x318C, "M", "ᆔ"), - (0x318D, "M", "ᆞ"), - (0x318E, "M", "ᆡ"), - (0x318F, "X"), - (0x3190, "V"), - (0x3192, "M", "一"), - (0x3193, "M", "二"), - (0x3194, "M", "三"), - (0x3195, "M", "四"), - (0x3196, "M", "上"), - (0x3197, "M", "中"), - (0x3198, "M", "下"), - (0x3199, "M", "甲"), - (0x319A, "M", "乙"), - (0x319B, "M", "丙"), - (0x319C, "M", "丁"), - (0x319D, "M", "天"), - (0x319E, "M", "地"), - (0x319F, "M", "人"), - (0x31A0, "V"), - (0x31E4, "X"), - (0x31F0, "V"), - (0x3200, "3", "(ᄀ)"), - (0x3201, "3", "(ᄂ)"), - (0x3202, "3", "(ᄃ)"), - (0x3203, "3", "(ᄅ)"), - (0x3204, "3", "(ᄆ)"), - (0x3205, "3", "(ᄇ)"), - (0x3206, "3", "(ᄉ)"), - (0x3207, "3", "(ᄋ)"), - (0x3208, "3", "(ᄌ)"), - (0x3209, "3", "(ᄎ)"), - (0x320A, "3", "(ᄏ)"), - (0x320B, "3", "(ᄐ)"), - (0x320C, "3", "(ᄑ)"), - (0x320D, "3", "(ᄒ)"), - (0x320E, "3", "(가)"), - (0x320F, "3", "(나)"), - (0x3210, "3", "(다)"), - (0x3211, "3", "(라)"), - (0x3212, "3", "(마)"), - (0x3213, "3", "(바)"), - (0x3214, "3", "(사)"), - (0x3215, "3", "(아)"), - (0x3216, "3", "(자)"), - (0x3217, "3", "(차)"), - (0x3218, "3", "(카)"), - (0x3219, "3", "(타)"), - (0x321A, "3", "(파)"), - (0x321B, "3", "(하)"), - (0x321C, "3", "(주)"), - (0x321D, "3", "(오전)"), - (0x321E, "3", "(오후)"), - (0x321F, "X"), - (0x3220, "3", "(一)"), - (0x3221, "3", "(二)"), - (0x3222, "3", "(三)"), - (0x3223, "3", "(四)"), - (0x3224, "3", "(五)"), - (0x3225, "3", "(六)"), - (0x3226, "3", "(七)"), - (0x3227, "3", "(八)"), - (0x3228, "3", "(九)"), - (0x3229, "3", "(十)"), - (0x322A, "3", "(月)"), - (0x322B, "3", "(火)"), - (0x322C, "3", "(水)"), - (0x322D, "3", "(木)"), - (0x322E, "3", "(金)"), - (0x322F, "3", "(土)"), - (0x3230, "3", "(日)"), - (0x3231, "3", "(株)"), - (0x3232, "3", "(有)"), - (0x3233, "3", "(社)"), - (0x3234, "3", "(名)"), - (0x3235, "3", "(特)"), - (0x3236, "3", "(財)"), - (0x3237, "3", "(祝)"), - (0x3238, "3", "(労)"), - (0x3239, "3", "(代)"), - (0x323A, "3", "(呼)"), - (0x323B, "3", "(学)"), - (0x323C, "3", "(監)"), - (0x323D, "3", "(企)"), - (0x323E, "3", "(資)"), - (0x323F, "3", "(協)"), - (0x3240, "3", "(祭)"), - (0x3241, "3", "(休)"), - (0x3242, "3", "(自)"), - (0x3243, "3", "(至)"), - (0x3244, "M", "問"), - (0x3245, "M", "幼"), - (0x3246, "M", "文"), - (0x3247, "M", "箏"), - (0x3248, "V"), - (0x3250, "M", "pte"), - (0x3251, "M", "21"), - ] - - -def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3252, "M", "22"), - (0x3253, "M", "23"), - (0x3254, "M", "24"), - (0x3255, "M", "25"), - (0x3256, "M", "26"), - (0x3257, "M", "27"), - (0x3258, "M", "28"), - (0x3259, "M", "29"), - (0x325A, "M", "30"), - (0x325B, "M", "31"), - (0x325C, "M", "32"), - (0x325D, "M", "33"), - (0x325E, "M", "34"), - (0x325F, "M", "35"), - (0x3260, "M", "ᄀ"), - (0x3261, "M", "ᄂ"), - (0x3262, "M", "ᄃ"), - (0x3263, "M", "ᄅ"), - (0x3264, "M", "ᄆ"), - (0x3265, "M", "ᄇ"), - (0x3266, "M", "ᄉ"), - (0x3267, "M", "ᄋ"), - (0x3268, "M", "ᄌ"), - (0x3269, "M", "ᄎ"), - (0x326A, "M", "ᄏ"), - (0x326B, "M", "ᄐ"), - (0x326C, "M", "ᄑ"), - (0x326D, "M", "ᄒ"), - (0x326E, "M", "가"), - (0x326F, "M", "나"), - (0x3270, "M", "다"), - (0x3271, "M", "라"), - (0x3272, "M", "마"), - (0x3273, "M", "바"), - (0x3274, "M", "사"), - (0x3275, "M", "아"), - (0x3276, "M", "자"), - (0x3277, "M", "차"), - (0x3278, "M", "카"), - (0x3279, "M", "타"), - (0x327A, "M", "파"), - (0x327B, "M", "하"), - (0x327C, "M", "참고"), - (0x327D, "M", "주의"), - (0x327E, "M", "우"), - (0x327F, "V"), - (0x3280, "M", "一"), - (0x3281, "M", "二"), - (0x3282, "M", "三"), - (0x3283, "M", "四"), - (0x3284, "M", "五"), - (0x3285, "M", "六"), - (0x3286, "M", "七"), - (0x3287, "M", "八"), - (0x3288, "M", "九"), - (0x3289, "M", "十"), - (0x328A, "M", "月"), - (0x328B, "M", "火"), - (0x328C, "M", "水"), - (0x328D, "M", "木"), - (0x328E, "M", "金"), - (0x328F, "M", "土"), - (0x3290, "M", "日"), - (0x3291, "M", "株"), - (0x3292, "M", "有"), - (0x3293, "M", "社"), - (0x3294, "M", "名"), - (0x3295, "M", "特"), - (0x3296, "M", "財"), - (0x3297, "M", "祝"), - (0x3298, "M", "労"), - (0x3299, "M", "秘"), - (0x329A, "M", "男"), - (0x329B, "M", "女"), - (0x329C, "M", "適"), - (0x329D, "M", "優"), - (0x329E, "M", "印"), - (0x329F, "M", "注"), - (0x32A0, "M", "項"), - (0x32A1, "M", "休"), - (0x32A2, "M", "写"), - (0x32A3, "M", "正"), - (0x32A4, "M", "上"), - (0x32A5, "M", "中"), - (0x32A6, "M", "下"), - (0x32A7, "M", "左"), - (0x32A8, "M", "右"), - (0x32A9, "M", "医"), - (0x32AA, "M", "宗"), - (0x32AB, "M", "学"), - (0x32AC, "M", "監"), - (0x32AD, "M", "企"), - (0x32AE, "M", "資"), - (0x32AF, "M", "協"), - (0x32B0, "M", "夜"), - (0x32B1, "M", "36"), - (0x32B2, "M", "37"), - (0x32B3, "M", "38"), - (0x32B4, "M", "39"), - (0x32B5, "M", "40"), - ] - - -def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x32B6, "M", "41"), - (0x32B7, "M", "42"), - (0x32B8, "M", "43"), - (0x32B9, "M", "44"), - (0x32BA, "M", "45"), - (0x32BB, "M", "46"), - (0x32BC, "M", "47"), - (0x32BD, "M", "48"), - (0x32BE, "M", "49"), - (0x32BF, "M", "50"), - (0x32C0, "M", "1月"), - (0x32C1, "M", "2月"), - (0x32C2, "M", "3月"), - (0x32C3, "M", "4月"), - (0x32C4, "M", "5月"), - (0x32C5, "M", "6月"), - (0x32C6, "M", "7月"), - (0x32C7, "M", "8月"), - (0x32C8, "M", "9月"), - (0x32C9, "M", "10月"), - (0x32CA, "M", "11月"), - (0x32CB, "M", "12月"), - (0x32CC, "M", "hg"), - (0x32CD, "M", "erg"), - (0x32CE, "M", "ev"), - (0x32CF, "M", "ltd"), - (0x32D0, "M", "ア"), - (0x32D1, "M", "イ"), - (0x32D2, "M", "ウ"), - (0x32D3, "M", "エ"), - (0x32D4, "M", "オ"), - (0x32D5, "M", "カ"), - (0x32D6, "M", "キ"), - (0x32D7, "M", "ク"), - (0x32D8, "M", "ケ"), - (0x32D9, "M", "コ"), - (0x32DA, "M", "サ"), - (0x32DB, "M", "シ"), - (0x32DC, "M", "ス"), - (0x32DD, "M", "セ"), - (0x32DE, "M", "ソ"), - (0x32DF, "M", "タ"), - (0x32E0, "M", "チ"), - (0x32E1, "M", "ツ"), - (0x32E2, "M", "テ"), - (0x32E3, "M", "ト"), - (0x32E4, "M", "ナ"), - (0x32E5, "M", "ニ"), - (0x32E6, "M", "ヌ"), - (0x32E7, "M", "ネ"), - (0x32E8, "M", "ノ"), - (0x32E9, "M", "ハ"), - (0x32EA, "M", "ヒ"), - (0x32EB, "M", "フ"), - (0x32EC, "M", "ヘ"), - (0x32ED, "M", "ホ"), - (0x32EE, "M", "マ"), - (0x32EF, "M", "ミ"), - (0x32F0, "M", "ム"), - (0x32F1, "M", "メ"), - (0x32F2, "M", "モ"), - (0x32F3, "M", "ヤ"), - (0x32F4, "M", "ユ"), - (0x32F5, "M", "ヨ"), - (0x32F6, "M", "ラ"), - (0x32F7, "M", "リ"), - (0x32F8, "M", "ル"), - (0x32F9, "M", "レ"), - (0x32FA, "M", "ロ"), - (0x32FB, "M", "ワ"), - (0x32FC, "M", "ヰ"), - (0x32FD, "M", "ヱ"), - (0x32FE, "M", "ヲ"), - (0x32FF, "M", "令和"), - (0x3300, "M", "アパート"), - (0x3301, "M", "アルファ"), - (0x3302, "M", "アンペア"), - (0x3303, "M", "アール"), - (0x3304, "M", "イニング"), - (0x3305, "M", "インチ"), - (0x3306, "M", "ウォン"), - (0x3307, "M", "エスクード"), - (0x3308, "M", "エーカー"), - (0x3309, "M", "オンス"), - (0x330A, "M", "オーム"), - (0x330B, "M", "カイリ"), - (0x330C, "M", "カラット"), - (0x330D, "M", "カロリー"), - (0x330E, "M", "ガロン"), - (0x330F, "M", "ガンマ"), - (0x3310, "M", "ギガ"), - (0x3311, "M", "ギニー"), - (0x3312, "M", "キュリー"), - (0x3313, "M", "ギルダー"), - (0x3314, "M", "キロ"), - (0x3315, "M", "キログラム"), - (0x3316, "M", "キロメートル"), - (0x3317, "M", "キロワット"), - (0x3318, "M", "グラム"), - (0x3319, "M", "グラムトン"), - ] - - -def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x331A, "M", "クルゼイロ"), - (0x331B, "M", "クローネ"), - (0x331C, "M", "ケース"), - (0x331D, "M", "コルナ"), - (0x331E, "M", "コーポ"), - (0x331F, "M", "サイクル"), - (0x3320, "M", "サンチーム"), - (0x3321, "M", "シリング"), - (0x3322, "M", "センチ"), - (0x3323, "M", "セント"), - (0x3324, "M", "ダース"), - (0x3325, "M", "デシ"), - (0x3326, "M", "ドル"), - (0x3327, "M", "トン"), - (0x3328, "M", "ナノ"), - (0x3329, "M", "ノット"), - (0x332A, "M", "ハイツ"), - (0x332B, "M", "パーセント"), - (0x332C, "M", "パーツ"), - (0x332D, "M", "バーレル"), - (0x332E, "M", "ピアストル"), - (0x332F, "M", "ピクル"), - (0x3330, "M", "ピコ"), - (0x3331, "M", "ビル"), - (0x3332, "M", "ファラッド"), - (0x3333, "M", "フィート"), - (0x3334, "M", "ブッシェル"), - (0x3335, "M", "フラン"), - (0x3336, "M", "ヘクタール"), - (0x3337, "M", "ペソ"), - (0x3338, "M", "ペニヒ"), - (0x3339, "M", "ヘルツ"), - (0x333A, "M", "ペンス"), - (0x333B, "M", "ページ"), - (0x333C, "M", "ベータ"), - (0x333D, "M", "ポイント"), - (0x333E, "M", "ボルト"), - (0x333F, "M", "ホン"), - (0x3340, "M", "ポンド"), - (0x3341, "M", "ホール"), - (0x3342, "M", "ホーン"), - (0x3343, "M", "マイクロ"), - (0x3344, "M", "マイル"), - (0x3345, "M", "マッハ"), - (0x3346, "M", "マルク"), - (0x3347, "M", "マンション"), - (0x3348, "M", "ミクロン"), - (0x3349, "M", "ミリ"), - (0x334A, "M", "ミリバール"), - (0x334B, "M", "メガ"), - (0x334C, "M", "メガトン"), - (0x334D, "M", "メートル"), - (0x334E, "M", "ヤード"), - (0x334F, "M", "ヤール"), - (0x3350, "M", "ユアン"), - (0x3351, "M", "リットル"), - (0x3352, "M", "リラ"), - (0x3353, "M", "ルピー"), - (0x3354, "M", "ルーブル"), - (0x3355, "M", "レム"), - (0x3356, "M", "レントゲン"), - (0x3357, "M", "ワット"), - (0x3358, "M", "0点"), - (0x3359, "M", "1点"), - (0x335A, "M", "2点"), - (0x335B, "M", "3点"), - (0x335C, "M", "4点"), - (0x335D, "M", "5点"), - (0x335E, "M", "6点"), - (0x335F, "M", "7点"), - (0x3360, "M", "8点"), - (0x3361, "M", "9点"), - (0x3362, "M", "10点"), - (0x3363, "M", "11点"), - (0x3364, "M", "12点"), - (0x3365, "M", "13点"), - (0x3366, "M", "14点"), - (0x3367, "M", "15点"), - (0x3368, "M", "16点"), - (0x3369, "M", "17点"), - (0x336A, "M", "18点"), - (0x336B, "M", "19点"), - (0x336C, "M", "20点"), - (0x336D, "M", "21点"), - (0x336E, "M", "22点"), - (0x336F, "M", "23点"), - (0x3370, "M", "24点"), - (0x3371, "M", "hpa"), - (0x3372, "M", "da"), - (0x3373, "M", "au"), - (0x3374, "M", "bar"), - (0x3375, "M", "ov"), - (0x3376, "M", "pc"), - (0x3377, "M", "dm"), - (0x3378, "M", "dm2"), - (0x3379, "M", "dm3"), - (0x337A, "M", "iu"), - (0x337B, "M", "平成"), - (0x337C, "M", "昭和"), - (0x337D, "M", "大正"), - ] - - -def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x337E, "M", "明治"), - (0x337F, "M", "株式会社"), - (0x3380, "M", "pa"), - (0x3381, "M", "na"), - (0x3382, "M", "μa"), - (0x3383, "M", "ma"), - (0x3384, "M", "ka"), - (0x3385, "M", "kb"), - (0x3386, "M", "mb"), - (0x3387, "M", "gb"), - (0x3388, "M", "cal"), - (0x3389, "M", "kcal"), - (0x338A, "M", "pf"), - (0x338B, "M", "nf"), - (0x338C, "M", "μf"), - (0x338D, "M", "μg"), - (0x338E, "M", "mg"), - (0x338F, "M", "kg"), - (0x3390, "M", "hz"), - (0x3391, "M", "khz"), - (0x3392, "M", "mhz"), - (0x3393, "M", "ghz"), - (0x3394, "M", "thz"), - (0x3395, "M", "μl"), - (0x3396, "M", "ml"), - (0x3397, "M", "dl"), - (0x3398, "M", "kl"), - (0x3399, "M", "fm"), - (0x339A, "M", "nm"), - (0x339B, "M", "μm"), - (0x339C, "M", "mm"), - (0x339D, "M", "cm"), - (0x339E, "M", "km"), - (0x339F, "M", "mm2"), - (0x33A0, "M", "cm2"), - (0x33A1, "M", "m2"), - (0x33A2, "M", "km2"), - (0x33A3, "M", "mm3"), - (0x33A4, "M", "cm3"), - (0x33A5, "M", "m3"), - (0x33A6, "M", "km3"), - (0x33A7, "M", "m∕s"), - (0x33A8, "M", "m∕s2"), - (0x33A9, "M", "pa"), - (0x33AA, "M", "kpa"), - (0x33AB, "M", "mpa"), - (0x33AC, "M", "gpa"), - (0x33AD, "M", "rad"), - (0x33AE, "M", "rad∕s"), - (0x33AF, "M", "rad∕s2"), - (0x33B0, "M", "ps"), - (0x33B1, "M", "ns"), - (0x33B2, "M", "μs"), - (0x33B3, "M", "ms"), - (0x33B4, "M", "pv"), - (0x33B5, "M", "nv"), - (0x33B6, "M", "μv"), - (0x33B7, "M", "mv"), - (0x33B8, "M", "kv"), - (0x33B9, "M", "mv"), - (0x33BA, "M", "pw"), - (0x33BB, "M", "nw"), - (0x33BC, "M", "μw"), - (0x33BD, "M", "mw"), - (0x33BE, "M", "kw"), - (0x33BF, "M", "mw"), - (0x33C0, "M", "kω"), - (0x33C1, "M", "mω"), - (0x33C2, "X"), - (0x33C3, "M", "bq"), - (0x33C4, "M", "cc"), - (0x33C5, "M", "cd"), - (0x33C6, "M", "c∕kg"), - (0x33C7, "X"), - (0x33C8, "M", "db"), - (0x33C9, "M", "gy"), - (0x33CA, "M", "ha"), - (0x33CB, "M", "hp"), - (0x33CC, "M", "in"), - (0x33CD, "M", "kk"), - (0x33CE, "M", "km"), - (0x33CF, "M", "kt"), - (0x33D0, "M", "lm"), - (0x33D1, "M", "ln"), - (0x33D2, "M", "log"), - (0x33D3, "M", "lx"), - (0x33D4, "M", "mb"), - (0x33D5, "M", "mil"), - (0x33D6, "M", "mol"), - (0x33D7, "M", "ph"), - (0x33D8, "X"), - (0x33D9, "M", "ppm"), - (0x33DA, "M", "pr"), - (0x33DB, "M", "sr"), - (0x33DC, "M", "sv"), - (0x33DD, "M", "wb"), - (0x33DE, "M", "v∕m"), - (0x33DF, "M", "a∕m"), - (0x33E0, "M", "1日"), - (0x33E1, "M", "2日"), - ] - - -def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x33E2, "M", "3日"), - (0x33E3, "M", "4日"), - (0x33E4, "M", "5日"), - (0x33E5, "M", "6日"), - (0x33E6, "M", "7日"), - (0x33E7, "M", "8日"), - (0x33E8, "M", "9日"), - (0x33E9, "M", "10日"), - (0x33EA, "M", "11日"), - (0x33EB, "M", "12日"), - (0x33EC, "M", "13日"), - (0x33ED, "M", "14日"), - (0x33EE, "M", "15日"), - (0x33EF, "M", "16日"), - (0x33F0, "M", "17日"), - (0x33F1, "M", "18日"), - (0x33F2, "M", "19日"), - (0x33F3, "M", "20日"), - (0x33F4, "M", "21日"), - (0x33F5, "M", "22日"), - (0x33F6, "M", "23日"), - (0x33F7, "M", "24日"), - (0x33F8, "M", "25日"), - (0x33F9, "M", "26日"), - (0x33FA, "M", "27日"), - (0x33FB, "M", "28日"), - (0x33FC, "M", "29日"), - (0x33FD, "M", "30日"), - (0x33FE, "M", "31日"), - (0x33FF, "M", "gal"), - (0x3400, "V"), - (0xA48D, "X"), - (0xA490, "V"), - (0xA4C7, "X"), - (0xA4D0, "V"), - (0xA62C, "X"), - (0xA640, "M", "ꙁ"), - (0xA641, "V"), - (0xA642, "M", "ꙃ"), - (0xA643, "V"), - (0xA644, "M", "ꙅ"), - (0xA645, "V"), - (0xA646, "M", "ꙇ"), - (0xA647, "V"), - (0xA648, "M", "ꙉ"), - (0xA649, "V"), - (0xA64A, "M", "ꙋ"), - (0xA64B, "V"), - (0xA64C, "M", "ꙍ"), - (0xA64D, "V"), - (0xA64E, "M", "ꙏ"), - (0xA64F, "V"), - (0xA650, "M", "ꙑ"), - (0xA651, "V"), - (0xA652, "M", "ꙓ"), - (0xA653, "V"), - (0xA654, "M", "ꙕ"), - (0xA655, "V"), - (0xA656, "M", "ꙗ"), - (0xA657, "V"), - (0xA658, "M", "ꙙ"), - (0xA659, "V"), - (0xA65A, "M", "ꙛ"), - (0xA65B, "V"), - (0xA65C, "M", "ꙝ"), - (0xA65D, "V"), - (0xA65E, "M", "ꙟ"), - (0xA65F, "V"), - (0xA660, "M", "ꙡ"), - (0xA661, "V"), - (0xA662, "M", "ꙣ"), - (0xA663, "V"), - (0xA664, "M", "ꙥ"), - (0xA665, "V"), - (0xA666, "M", "ꙧ"), - (0xA667, "V"), - (0xA668, "M", "ꙩ"), - (0xA669, "V"), - (0xA66A, "M", "ꙫ"), - (0xA66B, "V"), - (0xA66C, "M", "ꙭ"), - (0xA66D, "V"), - (0xA680, "M", "ꚁ"), - (0xA681, "V"), - (0xA682, "M", "ꚃ"), - (0xA683, "V"), - (0xA684, "M", "ꚅ"), - (0xA685, "V"), - (0xA686, "M", "ꚇ"), - (0xA687, "V"), - (0xA688, "M", "ꚉ"), - (0xA689, "V"), - (0xA68A, "M", "ꚋ"), - (0xA68B, "V"), - (0xA68C, "M", "ꚍ"), - (0xA68D, "V"), - (0xA68E, "M", "ꚏ"), - (0xA68F, "V"), - (0xA690, "M", "ꚑ"), - (0xA691, "V"), - ] - - -def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA692, "M", "ꚓ"), - (0xA693, "V"), - (0xA694, "M", "ꚕ"), - (0xA695, "V"), - (0xA696, "M", "ꚗ"), - (0xA697, "V"), - (0xA698, "M", "ꚙ"), - (0xA699, "V"), - (0xA69A, "M", "ꚛ"), - (0xA69B, "V"), - (0xA69C, "M", "ъ"), - (0xA69D, "M", "ь"), - (0xA69E, "V"), - (0xA6F8, "X"), - (0xA700, "V"), - (0xA722, "M", "ꜣ"), - (0xA723, "V"), - (0xA724, "M", "ꜥ"), - (0xA725, "V"), - (0xA726, "M", "ꜧ"), - (0xA727, "V"), - (0xA728, "M", "ꜩ"), - (0xA729, "V"), - (0xA72A, "M", "ꜫ"), - (0xA72B, "V"), - (0xA72C, "M", "ꜭ"), - (0xA72D, "V"), - (0xA72E, "M", "ꜯ"), - (0xA72F, "V"), - (0xA732, "M", "ꜳ"), - (0xA733, "V"), - (0xA734, "M", "ꜵ"), - (0xA735, "V"), - (0xA736, "M", "ꜷ"), - (0xA737, "V"), - (0xA738, "M", "ꜹ"), - (0xA739, "V"), - (0xA73A, "M", "ꜻ"), - (0xA73B, "V"), - (0xA73C, "M", "ꜽ"), - (0xA73D, "V"), - (0xA73E, "M", "ꜿ"), - (0xA73F, "V"), - (0xA740, "M", "ꝁ"), - (0xA741, "V"), - (0xA742, "M", "ꝃ"), - (0xA743, "V"), - (0xA744, "M", "ꝅ"), - (0xA745, "V"), - (0xA746, "M", "ꝇ"), - (0xA747, "V"), - (0xA748, "M", "ꝉ"), - (0xA749, "V"), - (0xA74A, "M", "ꝋ"), - (0xA74B, "V"), - (0xA74C, "M", "ꝍ"), - (0xA74D, "V"), - (0xA74E, "M", "ꝏ"), - (0xA74F, "V"), - (0xA750, "M", "ꝑ"), - (0xA751, "V"), - (0xA752, "M", "ꝓ"), - (0xA753, "V"), - (0xA754, "M", "ꝕ"), - (0xA755, "V"), - (0xA756, "M", "ꝗ"), - (0xA757, "V"), - (0xA758, "M", "ꝙ"), - (0xA759, "V"), - (0xA75A, "M", "ꝛ"), - (0xA75B, "V"), - (0xA75C, "M", "ꝝ"), - (0xA75D, "V"), - (0xA75E, "M", "ꝟ"), - (0xA75F, "V"), - (0xA760, "M", "ꝡ"), - (0xA761, "V"), - (0xA762, "M", "ꝣ"), - (0xA763, "V"), - (0xA764, "M", "ꝥ"), - (0xA765, "V"), - (0xA766, "M", "ꝧ"), - (0xA767, "V"), - (0xA768, "M", "ꝩ"), - (0xA769, "V"), - (0xA76A, "M", "ꝫ"), - (0xA76B, "V"), - (0xA76C, "M", "ꝭ"), - (0xA76D, "V"), - (0xA76E, "M", "ꝯ"), - (0xA76F, "V"), - (0xA770, "M", "ꝯ"), - (0xA771, "V"), - (0xA779, "M", "ꝺ"), - (0xA77A, "V"), - (0xA77B, "M", "ꝼ"), - (0xA77C, "V"), - (0xA77D, "M", "ᵹ"), - (0xA77E, "M", "ꝿ"), - (0xA77F, "V"), - ] - - -def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA780, "M", "ꞁ"), - (0xA781, "V"), - (0xA782, "M", "ꞃ"), - (0xA783, "V"), - (0xA784, "M", "ꞅ"), - (0xA785, "V"), - (0xA786, "M", "ꞇ"), - (0xA787, "V"), - (0xA78B, "M", "ꞌ"), - (0xA78C, "V"), - (0xA78D, "M", "ɥ"), - (0xA78E, "V"), - (0xA790, "M", "ꞑ"), - (0xA791, "V"), - (0xA792, "M", "ꞓ"), - (0xA793, "V"), - (0xA796, "M", "ꞗ"), - (0xA797, "V"), - (0xA798, "M", "ꞙ"), - (0xA799, "V"), - (0xA79A, "M", "ꞛ"), - (0xA79B, "V"), - (0xA79C, "M", "ꞝ"), - (0xA79D, "V"), - (0xA79E, "M", "ꞟ"), - (0xA79F, "V"), - (0xA7A0, "M", "ꞡ"), - (0xA7A1, "V"), - (0xA7A2, "M", "ꞣ"), - (0xA7A3, "V"), - (0xA7A4, "M", "ꞥ"), - (0xA7A5, "V"), - (0xA7A6, "M", "ꞧ"), - (0xA7A7, "V"), - (0xA7A8, "M", "ꞩ"), - (0xA7A9, "V"), - (0xA7AA, "M", "ɦ"), - (0xA7AB, "M", "ɜ"), - (0xA7AC, "M", "ɡ"), - (0xA7AD, "M", "ɬ"), - (0xA7AE, "M", "ɪ"), - (0xA7AF, "V"), - (0xA7B0, "M", "ʞ"), - (0xA7B1, "M", "ʇ"), - (0xA7B2, "M", "ʝ"), - (0xA7B3, "M", "ꭓ"), - (0xA7B4, "M", "ꞵ"), - (0xA7B5, "V"), - (0xA7B6, "M", "ꞷ"), - (0xA7B7, "V"), - (0xA7B8, "M", "ꞹ"), - (0xA7B9, "V"), - (0xA7BA, "M", "ꞻ"), - (0xA7BB, "V"), - (0xA7BC, "M", "ꞽ"), - (0xA7BD, "V"), - (0xA7BE, "M", "ꞿ"), - (0xA7BF, "V"), - (0xA7C0, "M", "ꟁ"), - (0xA7C1, "V"), - (0xA7C2, "M", "ꟃ"), - (0xA7C3, "V"), - (0xA7C4, "M", "ꞔ"), - (0xA7C5, "M", "ʂ"), - (0xA7C6, "M", "ᶎ"), - (0xA7C7, "M", "ꟈ"), - (0xA7C8, "V"), - (0xA7C9, "M", "ꟊ"), - (0xA7CA, "V"), - (0xA7CB, "X"), - (0xA7D0, "M", "ꟑ"), - (0xA7D1, "V"), - (0xA7D2, "X"), - (0xA7D3, "V"), - (0xA7D4, "X"), - (0xA7D5, "V"), - (0xA7D6, "M", "ꟗ"), - (0xA7D7, "V"), - (0xA7D8, "M", "ꟙ"), - (0xA7D9, "V"), - (0xA7DA, "X"), - (0xA7F2, "M", "c"), - (0xA7F3, "M", "f"), - (0xA7F4, "M", "q"), - (0xA7F5, "M", "ꟶ"), - (0xA7F6, "V"), - (0xA7F8, "M", "ħ"), - (0xA7F9, "M", "œ"), - (0xA7FA, "V"), - (0xA82D, "X"), - (0xA830, "V"), - (0xA83A, "X"), - (0xA840, "V"), - (0xA878, "X"), - (0xA880, "V"), - (0xA8C6, "X"), - (0xA8CE, "V"), - (0xA8DA, "X"), - (0xA8E0, "V"), - (0xA954, "X"), - ] - - -def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA95F, "V"), - (0xA97D, "X"), - (0xA980, "V"), - (0xA9CE, "X"), - (0xA9CF, "V"), - (0xA9DA, "X"), - (0xA9DE, "V"), - (0xA9FF, "X"), - (0xAA00, "V"), - (0xAA37, "X"), - (0xAA40, "V"), - (0xAA4E, "X"), - (0xAA50, "V"), - (0xAA5A, "X"), - (0xAA5C, "V"), - (0xAAC3, "X"), - (0xAADB, "V"), - (0xAAF7, "X"), - (0xAB01, "V"), - (0xAB07, "X"), - (0xAB09, "V"), - (0xAB0F, "X"), - (0xAB11, "V"), - (0xAB17, "X"), - (0xAB20, "V"), - (0xAB27, "X"), - (0xAB28, "V"), - (0xAB2F, "X"), - (0xAB30, "V"), - (0xAB5C, "M", "ꜧ"), - (0xAB5D, "M", "ꬷ"), - (0xAB5E, "M", "ɫ"), - (0xAB5F, "M", "ꭒ"), - (0xAB60, "V"), - (0xAB69, "M", "ʍ"), - (0xAB6A, "V"), - (0xAB6C, "X"), - (0xAB70, "M", "Ꭰ"), - (0xAB71, "M", "Ꭱ"), - (0xAB72, "M", "Ꭲ"), - (0xAB73, "M", "Ꭳ"), - (0xAB74, "M", "Ꭴ"), - (0xAB75, "M", "Ꭵ"), - (0xAB76, "M", "Ꭶ"), - (0xAB77, "M", "Ꭷ"), - (0xAB78, "M", "Ꭸ"), - (0xAB79, "M", "Ꭹ"), - (0xAB7A, "M", "Ꭺ"), - (0xAB7B, "M", "Ꭻ"), - (0xAB7C, "M", "Ꭼ"), - (0xAB7D, "M", "Ꭽ"), - (0xAB7E, "M", "Ꭾ"), - (0xAB7F, "M", "Ꭿ"), - (0xAB80, "M", "Ꮀ"), - (0xAB81, "M", "Ꮁ"), - (0xAB82, "M", "Ꮂ"), - (0xAB83, "M", "Ꮃ"), - (0xAB84, "M", "Ꮄ"), - (0xAB85, "M", "Ꮅ"), - (0xAB86, "M", "Ꮆ"), - (0xAB87, "M", "Ꮇ"), - (0xAB88, "M", "Ꮈ"), - (0xAB89, "M", "Ꮉ"), - (0xAB8A, "M", "Ꮊ"), - (0xAB8B, "M", "Ꮋ"), - (0xAB8C, "M", "Ꮌ"), - (0xAB8D, "M", "Ꮍ"), - (0xAB8E, "M", "Ꮎ"), - (0xAB8F, "M", "Ꮏ"), - (0xAB90, "M", "Ꮐ"), - (0xAB91, "M", "Ꮑ"), - (0xAB92, "M", "Ꮒ"), - (0xAB93, "M", "Ꮓ"), - (0xAB94, "M", "Ꮔ"), - (0xAB95, "M", "Ꮕ"), - (0xAB96, "M", "Ꮖ"), - (0xAB97, "M", "Ꮗ"), - (0xAB98, "M", "Ꮘ"), - (0xAB99, "M", "Ꮙ"), - (0xAB9A, "M", "Ꮚ"), - (0xAB9B, "M", "Ꮛ"), - (0xAB9C, "M", "Ꮜ"), - (0xAB9D, "M", "Ꮝ"), - (0xAB9E, "M", "Ꮞ"), - (0xAB9F, "M", "Ꮟ"), - (0xABA0, "M", "Ꮠ"), - (0xABA1, "M", "Ꮡ"), - (0xABA2, "M", "Ꮢ"), - (0xABA3, "M", "Ꮣ"), - (0xABA4, "M", "Ꮤ"), - (0xABA5, "M", "Ꮥ"), - (0xABA6, "M", "Ꮦ"), - (0xABA7, "M", "Ꮧ"), - (0xABA8, "M", "Ꮨ"), - (0xABA9, "M", "Ꮩ"), - (0xABAA, "M", "Ꮪ"), - (0xABAB, "M", "Ꮫ"), - (0xABAC, "M", "Ꮬ"), - (0xABAD, "M", "Ꮭ"), - (0xABAE, "M", "Ꮮ"), - ] - - -def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xABAF, "M", "Ꮯ"), - (0xABB0, "M", "Ꮰ"), - (0xABB1, "M", "Ꮱ"), - (0xABB2, "M", "Ꮲ"), - (0xABB3, "M", "Ꮳ"), - (0xABB4, "M", "Ꮴ"), - (0xABB5, "M", "Ꮵ"), - (0xABB6, "M", "Ꮶ"), - (0xABB7, "M", "Ꮷ"), - (0xABB8, "M", "Ꮸ"), - (0xABB9, "M", "Ꮹ"), - (0xABBA, "M", "Ꮺ"), - (0xABBB, "M", "Ꮻ"), - (0xABBC, "M", "Ꮼ"), - (0xABBD, "M", "Ꮽ"), - (0xABBE, "M", "Ꮾ"), - (0xABBF, "M", "Ꮿ"), - (0xABC0, "V"), - (0xABEE, "X"), - (0xABF0, "V"), - (0xABFA, "X"), - (0xAC00, "V"), - (0xD7A4, "X"), - (0xD7B0, "V"), - (0xD7C7, "X"), - (0xD7CB, "V"), - (0xD7FC, "X"), - (0xF900, "M", "豈"), - (0xF901, "M", "更"), - (0xF902, "M", "車"), - (0xF903, "M", "賈"), - (0xF904, "M", "滑"), - (0xF905, "M", "串"), - (0xF906, "M", "句"), - (0xF907, "M", "龜"), - (0xF909, "M", "契"), - (0xF90A, "M", "金"), - (0xF90B, "M", "喇"), - (0xF90C, "M", "奈"), - (0xF90D, "M", "懶"), - (0xF90E, "M", "癩"), - (0xF90F, "M", "羅"), - (0xF910, "M", "蘿"), - (0xF911, "M", "螺"), - (0xF912, "M", "裸"), - (0xF913, "M", "邏"), - (0xF914, "M", "樂"), - (0xF915, "M", "洛"), - (0xF916, "M", "烙"), - (0xF917, "M", "珞"), - (0xF918, "M", "落"), - (0xF919, "M", "酪"), - (0xF91A, "M", "駱"), - (0xF91B, "M", "亂"), - (0xF91C, "M", "卵"), - (0xF91D, "M", "欄"), - (0xF91E, "M", "爛"), - (0xF91F, "M", "蘭"), - (0xF920, "M", "鸞"), - (0xF921, "M", "嵐"), - (0xF922, "M", "濫"), - (0xF923, "M", "藍"), - (0xF924, "M", "襤"), - (0xF925, "M", "拉"), - (0xF926, "M", "臘"), - (0xF927, "M", "蠟"), - (0xF928, "M", "廊"), - (0xF929, "M", "朗"), - (0xF92A, "M", "浪"), - (0xF92B, "M", "狼"), - (0xF92C, "M", "郎"), - (0xF92D, "M", "來"), - (0xF92E, "M", "冷"), - (0xF92F, "M", "勞"), - (0xF930, "M", "擄"), - (0xF931, "M", "櫓"), - (0xF932, "M", "爐"), - (0xF933, "M", "盧"), - (0xF934, "M", "老"), - (0xF935, "M", "蘆"), - (0xF936, "M", "虜"), - (0xF937, "M", "路"), - (0xF938, "M", "露"), - (0xF939, "M", "魯"), - (0xF93A, "M", "鷺"), - (0xF93B, "M", "碌"), - (0xF93C, "M", "祿"), - (0xF93D, "M", "綠"), - (0xF93E, "M", "菉"), - (0xF93F, "M", "錄"), - (0xF940, "M", "鹿"), - (0xF941, "M", "論"), - (0xF942, "M", "壟"), - (0xF943, "M", "弄"), - (0xF944, "M", "籠"), - (0xF945, "M", "聾"), - (0xF946, "M", "牢"), - (0xF947, "M", "磊"), - (0xF948, "M", "賂"), - (0xF949, "M", "雷"), - ] - - -def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF94A, "M", "壘"), - (0xF94B, "M", "屢"), - (0xF94C, "M", "樓"), - (0xF94D, "M", "淚"), - (0xF94E, "M", "漏"), - (0xF94F, "M", "累"), - (0xF950, "M", "縷"), - (0xF951, "M", "陋"), - (0xF952, "M", "勒"), - (0xF953, "M", "肋"), - (0xF954, "M", "凜"), - (0xF955, "M", "凌"), - (0xF956, "M", "稜"), - (0xF957, "M", "綾"), - (0xF958, "M", "菱"), - (0xF959, "M", "陵"), - (0xF95A, "M", "讀"), - (0xF95B, "M", "拏"), - (0xF95C, "M", "樂"), - (0xF95D, "M", "諾"), - (0xF95E, "M", "丹"), - (0xF95F, "M", "寧"), - (0xF960, "M", "怒"), - (0xF961, "M", "率"), - (0xF962, "M", "異"), - (0xF963, "M", "北"), - (0xF964, "M", "磻"), - (0xF965, "M", "便"), - (0xF966, "M", "復"), - (0xF967, "M", "不"), - (0xF968, "M", "泌"), - (0xF969, "M", "數"), - (0xF96A, "M", "索"), - (0xF96B, "M", "參"), - (0xF96C, "M", "塞"), - (0xF96D, "M", "省"), - (0xF96E, "M", "葉"), - (0xF96F, "M", "說"), - (0xF970, "M", "殺"), - (0xF971, "M", "辰"), - (0xF972, "M", "沈"), - (0xF973, "M", "拾"), - (0xF974, "M", "若"), - (0xF975, "M", "掠"), - (0xF976, "M", "略"), - (0xF977, "M", "亮"), - (0xF978, "M", "兩"), - (0xF979, "M", "凉"), - (0xF97A, "M", "梁"), - (0xF97B, "M", "糧"), - (0xF97C, "M", "良"), - (0xF97D, "M", "諒"), - (0xF97E, "M", "量"), - (0xF97F, "M", "勵"), - (0xF980, "M", "呂"), - (0xF981, "M", "女"), - (0xF982, "M", "廬"), - (0xF983, "M", "旅"), - (0xF984, "M", "濾"), - (0xF985, "M", "礪"), - (0xF986, "M", "閭"), - (0xF987, "M", "驪"), - (0xF988, "M", "麗"), - (0xF989, "M", "黎"), - (0xF98A, "M", "力"), - (0xF98B, "M", "曆"), - (0xF98C, "M", "歷"), - (0xF98D, "M", "轢"), - (0xF98E, "M", "年"), - (0xF98F, "M", "憐"), - (0xF990, "M", "戀"), - (0xF991, "M", "撚"), - (0xF992, "M", "漣"), - (0xF993, "M", "煉"), - (0xF994, "M", "璉"), - (0xF995, "M", "秊"), - (0xF996, "M", "練"), - (0xF997, "M", "聯"), - (0xF998, "M", "輦"), - (0xF999, "M", "蓮"), - (0xF99A, "M", "連"), - (0xF99B, "M", "鍊"), - (0xF99C, "M", "列"), - (0xF99D, "M", "劣"), - (0xF99E, "M", "咽"), - (0xF99F, "M", "烈"), - (0xF9A0, "M", "裂"), - (0xF9A1, "M", "說"), - (0xF9A2, "M", "廉"), - (0xF9A3, "M", "念"), - (0xF9A4, "M", "捻"), - (0xF9A5, "M", "殮"), - (0xF9A6, "M", "簾"), - (0xF9A7, "M", "獵"), - (0xF9A8, "M", "令"), - (0xF9A9, "M", "囹"), - (0xF9AA, "M", "寧"), - (0xF9AB, "M", "嶺"), - (0xF9AC, "M", "怜"), - (0xF9AD, "M", "玲"), - ] - - -def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF9AE, "M", "瑩"), - (0xF9AF, "M", "羚"), - (0xF9B0, "M", "聆"), - (0xF9B1, "M", "鈴"), - (0xF9B2, "M", "零"), - (0xF9B3, "M", "靈"), - (0xF9B4, "M", "領"), - (0xF9B5, "M", "例"), - (0xF9B6, "M", "禮"), - (0xF9B7, "M", "醴"), - (0xF9B8, "M", "隸"), - (0xF9B9, "M", "惡"), - (0xF9BA, "M", "了"), - (0xF9BB, "M", "僚"), - (0xF9BC, "M", "寮"), - (0xF9BD, "M", "尿"), - (0xF9BE, "M", "料"), - (0xF9BF, "M", "樂"), - (0xF9C0, "M", "燎"), - (0xF9C1, "M", "療"), - (0xF9C2, "M", "蓼"), - (0xF9C3, "M", "遼"), - (0xF9C4, "M", "龍"), - (0xF9C5, "M", "暈"), - (0xF9C6, "M", "阮"), - (0xF9C7, "M", "劉"), - (0xF9C8, "M", "杻"), - (0xF9C9, "M", "柳"), - (0xF9CA, "M", "流"), - (0xF9CB, "M", "溜"), - (0xF9CC, "M", "琉"), - (0xF9CD, "M", "留"), - (0xF9CE, "M", "硫"), - (0xF9CF, "M", "紐"), - (0xF9D0, "M", "類"), - (0xF9D1, "M", "六"), - (0xF9D2, "M", "戮"), - (0xF9D3, "M", "陸"), - (0xF9D4, "M", "倫"), - (0xF9D5, "M", "崙"), - (0xF9D6, "M", "淪"), - (0xF9D7, "M", "輪"), - (0xF9D8, "M", "律"), - (0xF9D9, "M", "慄"), - (0xF9DA, "M", "栗"), - (0xF9DB, "M", "率"), - (0xF9DC, "M", "隆"), - (0xF9DD, "M", "利"), - (0xF9DE, "M", "吏"), - (0xF9DF, "M", "履"), - (0xF9E0, "M", "易"), - (0xF9E1, "M", "李"), - (0xF9E2, "M", "梨"), - (0xF9E3, "M", "泥"), - (0xF9E4, "M", "理"), - (0xF9E5, "M", "痢"), - (0xF9E6, "M", "罹"), - (0xF9E7, "M", "裏"), - (0xF9E8, "M", "裡"), - (0xF9E9, "M", "里"), - (0xF9EA, "M", "離"), - (0xF9EB, "M", "匿"), - (0xF9EC, "M", "溺"), - (0xF9ED, "M", "吝"), - (0xF9EE, "M", "燐"), - (0xF9EF, "M", "璘"), - (0xF9F0, "M", "藺"), - (0xF9F1, "M", "隣"), - (0xF9F2, "M", "鱗"), - (0xF9F3, "M", "麟"), - (0xF9F4, "M", "林"), - (0xF9F5, "M", "淋"), - (0xF9F6, "M", "臨"), - (0xF9F7, "M", "立"), - (0xF9F8, "M", "笠"), - (0xF9F9, "M", "粒"), - (0xF9FA, "M", "狀"), - (0xF9FB, "M", "炙"), - (0xF9FC, "M", "識"), - (0xF9FD, "M", "什"), - (0xF9FE, "M", "茶"), - (0xF9FF, "M", "刺"), - (0xFA00, "M", "切"), - (0xFA01, "M", "度"), - (0xFA02, "M", "拓"), - (0xFA03, "M", "糖"), - (0xFA04, "M", "宅"), - (0xFA05, "M", "洞"), - (0xFA06, "M", "暴"), - (0xFA07, "M", "輻"), - (0xFA08, "M", "行"), - (0xFA09, "M", "降"), - (0xFA0A, "M", "見"), - (0xFA0B, "M", "廓"), - (0xFA0C, "M", "兀"), - (0xFA0D, "M", "嗀"), - (0xFA0E, "V"), - (0xFA10, "M", "塚"), - (0xFA11, "V"), - (0xFA12, "M", "晴"), - ] - - -def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFA13, "V"), - (0xFA15, "M", "凞"), - (0xFA16, "M", "猪"), - (0xFA17, "M", "益"), - (0xFA18, "M", "礼"), - (0xFA19, "M", "神"), - (0xFA1A, "M", "祥"), - (0xFA1B, "M", "福"), - (0xFA1C, "M", "靖"), - (0xFA1D, "M", "精"), - (0xFA1E, "M", "羽"), - (0xFA1F, "V"), - (0xFA20, "M", "蘒"), - (0xFA21, "V"), - (0xFA22, "M", "諸"), - (0xFA23, "V"), - (0xFA25, "M", "逸"), - (0xFA26, "M", "都"), - (0xFA27, "V"), - (0xFA2A, "M", "飯"), - (0xFA2B, "M", "飼"), - (0xFA2C, "M", "館"), - (0xFA2D, "M", "鶴"), - (0xFA2E, "M", "郞"), - (0xFA2F, "M", "隷"), - (0xFA30, "M", "侮"), - (0xFA31, "M", "僧"), - (0xFA32, "M", "免"), - (0xFA33, "M", "勉"), - (0xFA34, "M", "勤"), - (0xFA35, "M", "卑"), - (0xFA36, "M", "喝"), - (0xFA37, "M", "嘆"), - (0xFA38, "M", "器"), - (0xFA39, "M", "塀"), - (0xFA3A, "M", "墨"), - (0xFA3B, "M", "層"), - (0xFA3C, "M", "屮"), - (0xFA3D, "M", "悔"), - (0xFA3E, "M", "慨"), - (0xFA3F, "M", "憎"), - (0xFA40, "M", "懲"), - (0xFA41, "M", "敏"), - (0xFA42, "M", "既"), - (0xFA43, "M", "暑"), - (0xFA44, "M", "梅"), - (0xFA45, "M", "海"), - (0xFA46, "M", "渚"), - (0xFA47, "M", "漢"), - (0xFA48, "M", "煮"), - (0xFA49, "M", "爫"), - (0xFA4A, "M", "琢"), - (0xFA4B, "M", "碑"), - (0xFA4C, "M", "社"), - (0xFA4D, "M", "祉"), - (0xFA4E, "M", "祈"), - (0xFA4F, "M", "祐"), - (0xFA50, "M", "祖"), - (0xFA51, "M", "祝"), - (0xFA52, "M", "禍"), - (0xFA53, "M", "禎"), - (0xFA54, "M", "穀"), - (0xFA55, "M", "突"), - (0xFA56, "M", "節"), - (0xFA57, "M", "練"), - (0xFA58, "M", "縉"), - (0xFA59, "M", "繁"), - (0xFA5A, "M", "署"), - (0xFA5B, "M", "者"), - (0xFA5C, "M", "臭"), - (0xFA5D, "M", "艹"), - (0xFA5F, "M", "著"), - (0xFA60, "M", "褐"), - (0xFA61, "M", "視"), - (0xFA62, "M", "謁"), - (0xFA63, "M", "謹"), - (0xFA64, "M", "賓"), - (0xFA65, "M", "贈"), - (0xFA66, "M", "辶"), - (0xFA67, "M", "逸"), - (0xFA68, "M", "難"), - (0xFA69, "M", "響"), - (0xFA6A, "M", "頻"), - (0xFA6B, "M", "恵"), - (0xFA6C, "M", "𤋮"), - (0xFA6D, "M", "舘"), - (0xFA6E, "X"), - (0xFA70, "M", "並"), - (0xFA71, "M", "况"), - (0xFA72, "M", "全"), - (0xFA73, "M", "侀"), - (0xFA74, "M", "充"), - (0xFA75, "M", "冀"), - (0xFA76, "M", "勇"), - (0xFA77, "M", "勺"), - (0xFA78, "M", "喝"), - (0xFA79, "M", "啕"), - (0xFA7A, "M", "喙"), - (0xFA7B, "M", "嗢"), - (0xFA7C, "M", "塚"), - ] - - -def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFA7D, "M", "墳"), - (0xFA7E, "M", "奄"), - (0xFA7F, "M", "奔"), - (0xFA80, "M", "婢"), - (0xFA81, "M", "嬨"), - (0xFA82, "M", "廒"), - (0xFA83, "M", "廙"), - (0xFA84, "M", "彩"), - (0xFA85, "M", "徭"), - (0xFA86, "M", "惘"), - (0xFA87, "M", "慎"), - (0xFA88, "M", "愈"), - (0xFA89, "M", "憎"), - (0xFA8A, "M", "慠"), - (0xFA8B, "M", "懲"), - (0xFA8C, "M", "戴"), - (0xFA8D, "M", "揄"), - (0xFA8E, "M", "搜"), - (0xFA8F, "M", "摒"), - (0xFA90, "M", "敖"), - (0xFA91, "M", "晴"), - (0xFA92, "M", "朗"), - (0xFA93, "M", "望"), - (0xFA94, "M", "杖"), - (0xFA95, "M", "歹"), - (0xFA96, "M", "殺"), - (0xFA97, "M", "流"), - (0xFA98, "M", "滛"), - (0xFA99, "M", "滋"), - (0xFA9A, "M", "漢"), - (0xFA9B, "M", "瀞"), - (0xFA9C, "M", "煮"), - (0xFA9D, "M", "瞧"), - (0xFA9E, "M", "爵"), - (0xFA9F, "M", "犯"), - (0xFAA0, "M", "猪"), - (0xFAA1, "M", "瑱"), - (0xFAA2, "M", "甆"), - (0xFAA3, "M", "画"), - (0xFAA4, "M", "瘝"), - (0xFAA5, "M", "瘟"), - (0xFAA6, "M", "益"), - (0xFAA7, "M", "盛"), - (0xFAA8, "M", "直"), - (0xFAA9, "M", "睊"), - (0xFAAA, "M", "着"), - (0xFAAB, "M", "磌"), - (0xFAAC, "M", "窱"), - (0xFAAD, "M", "節"), - (0xFAAE, "M", "类"), - (0xFAAF, "M", "絛"), - (0xFAB0, "M", "練"), - (0xFAB1, "M", "缾"), - (0xFAB2, "M", "者"), - (0xFAB3, "M", "荒"), - (0xFAB4, "M", "華"), - (0xFAB5, "M", "蝹"), - (0xFAB6, "M", "襁"), - (0xFAB7, "M", "覆"), - (0xFAB8, "M", "視"), - (0xFAB9, "M", "調"), - (0xFABA, "M", "諸"), - (0xFABB, "M", "請"), - (0xFABC, "M", "謁"), - (0xFABD, "M", "諾"), - (0xFABE, "M", "諭"), - (0xFABF, "M", "謹"), - (0xFAC0, "M", "變"), - (0xFAC1, "M", "贈"), - (0xFAC2, "M", "輸"), - (0xFAC3, "M", "遲"), - (0xFAC4, "M", "醙"), - (0xFAC5, "M", "鉶"), - (0xFAC6, "M", "陼"), - (0xFAC7, "M", "難"), - (0xFAC8, "M", "靖"), - (0xFAC9, "M", "韛"), - (0xFACA, "M", "響"), - (0xFACB, "M", "頋"), - (0xFACC, "M", "頻"), - (0xFACD, "M", "鬒"), - (0xFACE, "M", "龜"), - (0xFACF, "M", "𢡊"), - (0xFAD0, "M", "𢡄"), - (0xFAD1, "M", "𣏕"), - (0xFAD2, "M", "㮝"), - (0xFAD3, "M", "䀘"), - (0xFAD4, "M", "䀹"), - (0xFAD5, "M", "𥉉"), - (0xFAD6, "M", "𥳐"), - (0xFAD7, "M", "𧻓"), - (0xFAD8, "M", "齃"), - (0xFAD9, "M", "龎"), - (0xFADA, "X"), - (0xFB00, "M", "ff"), - (0xFB01, "M", "fi"), - (0xFB02, "M", "fl"), - (0xFB03, "M", "ffi"), - (0xFB04, "M", "ffl"), - (0xFB05, "M", "st"), - ] - - -def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFB07, "X"), - (0xFB13, "M", "մն"), - (0xFB14, "M", "մե"), - (0xFB15, "M", "մի"), - (0xFB16, "M", "վն"), - (0xFB17, "M", "մխ"), - (0xFB18, "X"), - (0xFB1D, "M", "יִ"), - (0xFB1E, "V"), - (0xFB1F, "M", "ײַ"), - (0xFB20, "M", "ע"), - (0xFB21, "M", "א"), - (0xFB22, "M", "ד"), - (0xFB23, "M", "ה"), - (0xFB24, "M", "כ"), - (0xFB25, "M", "ל"), - (0xFB26, "M", "ם"), - (0xFB27, "M", "ר"), - (0xFB28, "M", "ת"), - (0xFB29, "3", "+"), - (0xFB2A, "M", "שׁ"), - (0xFB2B, "M", "שׂ"), - (0xFB2C, "M", "שּׁ"), - (0xFB2D, "M", "שּׂ"), - (0xFB2E, "M", "אַ"), - (0xFB2F, "M", "אָ"), - (0xFB30, "M", "אּ"), - (0xFB31, "M", "בּ"), - (0xFB32, "M", "גּ"), - (0xFB33, "M", "דּ"), - (0xFB34, "M", "הּ"), - (0xFB35, "M", "וּ"), - (0xFB36, "M", "זּ"), - (0xFB37, "X"), - (0xFB38, "M", "טּ"), - (0xFB39, "M", "יּ"), - (0xFB3A, "M", "ךּ"), - (0xFB3B, "M", "כּ"), - (0xFB3C, "M", "לּ"), - (0xFB3D, "X"), - (0xFB3E, "M", "מּ"), - (0xFB3F, "X"), - (0xFB40, "M", "נּ"), - (0xFB41, "M", "סּ"), - (0xFB42, "X"), - (0xFB43, "M", "ףּ"), - (0xFB44, "M", "פּ"), - (0xFB45, "X"), - (0xFB46, "M", "צּ"), - (0xFB47, "M", "קּ"), - (0xFB48, "M", "רּ"), - (0xFB49, "M", "שּ"), - (0xFB4A, "M", "תּ"), - (0xFB4B, "M", "וֹ"), - (0xFB4C, "M", "בֿ"), - (0xFB4D, "M", "כֿ"), - (0xFB4E, "M", "פֿ"), - (0xFB4F, "M", "אל"), - (0xFB50, "M", "ٱ"), - (0xFB52, "M", "ٻ"), - (0xFB56, "M", "پ"), - (0xFB5A, "M", "ڀ"), - (0xFB5E, "M", "ٺ"), - (0xFB62, "M", "ٿ"), - (0xFB66, "M", "ٹ"), - (0xFB6A, "M", "ڤ"), - (0xFB6E, "M", "ڦ"), - (0xFB72, "M", "ڄ"), - (0xFB76, "M", "ڃ"), - (0xFB7A, "M", "چ"), - (0xFB7E, "M", "ڇ"), - (0xFB82, "M", "ڍ"), - (0xFB84, "M", "ڌ"), - (0xFB86, "M", "ڎ"), - (0xFB88, "M", "ڈ"), - (0xFB8A, "M", "ژ"), - (0xFB8C, "M", "ڑ"), - (0xFB8E, "M", "ک"), - (0xFB92, "M", "گ"), - (0xFB96, "M", "ڳ"), - (0xFB9A, "M", "ڱ"), - (0xFB9E, "M", "ں"), - (0xFBA0, "M", "ڻ"), - (0xFBA4, "M", "ۀ"), - (0xFBA6, "M", "ہ"), - (0xFBAA, "M", "ھ"), - (0xFBAE, "M", "ے"), - (0xFBB0, "M", "ۓ"), - (0xFBB2, "V"), - (0xFBC3, "X"), - (0xFBD3, "M", "ڭ"), - (0xFBD7, "M", "ۇ"), - (0xFBD9, "M", "ۆ"), - (0xFBDB, "M", "ۈ"), - (0xFBDD, "M", "ۇٴ"), - (0xFBDE, "M", "ۋ"), - (0xFBE0, "M", "ۅ"), - (0xFBE2, "M", "ۉ"), - (0xFBE4, "M", "ې"), - (0xFBE8, "M", "ى"), - ] - - -def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFBEA, "M", "ئا"), - (0xFBEC, "M", "ئە"), - (0xFBEE, "M", "ئو"), - (0xFBF0, "M", "ئۇ"), - (0xFBF2, "M", "ئۆ"), - (0xFBF4, "M", "ئۈ"), - (0xFBF6, "M", "ئې"), - (0xFBF9, "M", "ئى"), - (0xFBFC, "M", "ی"), - (0xFC00, "M", "ئج"), - (0xFC01, "M", "ئح"), - (0xFC02, "M", "ئم"), - (0xFC03, "M", "ئى"), - (0xFC04, "M", "ئي"), - (0xFC05, "M", "بج"), - (0xFC06, "M", "بح"), - (0xFC07, "M", "بخ"), - (0xFC08, "M", "بم"), - (0xFC09, "M", "بى"), - (0xFC0A, "M", "بي"), - (0xFC0B, "M", "تج"), - (0xFC0C, "M", "تح"), - (0xFC0D, "M", "تخ"), - (0xFC0E, "M", "تم"), - (0xFC0F, "M", "تى"), - (0xFC10, "M", "تي"), - (0xFC11, "M", "ثج"), - (0xFC12, "M", "ثم"), - (0xFC13, "M", "ثى"), - (0xFC14, "M", "ثي"), - (0xFC15, "M", "جح"), - (0xFC16, "M", "جم"), - (0xFC17, "M", "حج"), - (0xFC18, "M", "حم"), - (0xFC19, "M", "خج"), - (0xFC1A, "M", "خح"), - (0xFC1B, "M", "خم"), - (0xFC1C, "M", "سج"), - (0xFC1D, "M", "سح"), - (0xFC1E, "M", "سخ"), - (0xFC1F, "M", "سم"), - (0xFC20, "M", "صح"), - (0xFC21, "M", "صم"), - (0xFC22, "M", "ضج"), - (0xFC23, "M", "ضح"), - (0xFC24, "M", "ضخ"), - (0xFC25, "M", "ضم"), - (0xFC26, "M", "طح"), - (0xFC27, "M", "طم"), - (0xFC28, "M", "ظم"), - (0xFC29, "M", "عج"), - (0xFC2A, "M", "عم"), - (0xFC2B, "M", "غج"), - (0xFC2C, "M", "غم"), - (0xFC2D, "M", "فج"), - (0xFC2E, "M", "فح"), - (0xFC2F, "M", "فخ"), - (0xFC30, "M", "فم"), - (0xFC31, "M", "فى"), - (0xFC32, "M", "في"), - (0xFC33, "M", "قح"), - (0xFC34, "M", "قم"), - (0xFC35, "M", "قى"), - (0xFC36, "M", "قي"), - (0xFC37, "M", "كا"), - (0xFC38, "M", "كج"), - (0xFC39, "M", "كح"), - (0xFC3A, "M", "كخ"), - (0xFC3B, "M", "كل"), - (0xFC3C, "M", "كم"), - (0xFC3D, "M", "كى"), - (0xFC3E, "M", "كي"), - (0xFC3F, "M", "لج"), - (0xFC40, "M", "لح"), - (0xFC41, "M", "لخ"), - (0xFC42, "M", "لم"), - (0xFC43, "M", "لى"), - (0xFC44, "M", "لي"), - (0xFC45, "M", "مج"), - (0xFC46, "M", "مح"), - (0xFC47, "M", "مخ"), - (0xFC48, "M", "مم"), - (0xFC49, "M", "مى"), - (0xFC4A, "M", "مي"), - (0xFC4B, "M", "نج"), - (0xFC4C, "M", "نح"), - (0xFC4D, "M", "نخ"), - (0xFC4E, "M", "نم"), - (0xFC4F, "M", "نى"), - (0xFC50, "M", "ني"), - (0xFC51, "M", "هج"), - (0xFC52, "M", "هم"), - (0xFC53, "M", "هى"), - (0xFC54, "M", "هي"), - (0xFC55, "M", "يج"), - (0xFC56, "M", "يح"), - (0xFC57, "M", "يخ"), - (0xFC58, "M", "يم"), - (0xFC59, "M", "يى"), - (0xFC5A, "M", "يي"), - ] - - -def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFC5B, "M", "ذٰ"), - (0xFC5C, "M", "رٰ"), - (0xFC5D, "M", "ىٰ"), - (0xFC5E, "3", " ٌّ"), - (0xFC5F, "3", " ٍّ"), - (0xFC60, "3", " َّ"), - (0xFC61, "3", " ُّ"), - (0xFC62, "3", " ِّ"), - (0xFC63, "3", " ّٰ"), - (0xFC64, "M", "ئر"), - (0xFC65, "M", "ئز"), - (0xFC66, "M", "ئم"), - (0xFC67, "M", "ئن"), - (0xFC68, "M", "ئى"), - (0xFC69, "M", "ئي"), - (0xFC6A, "M", "بر"), - (0xFC6B, "M", "بز"), - (0xFC6C, "M", "بم"), - (0xFC6D, "M", "بن"), - (0xFC6E, "M", "بى"), - (0xFC6F, "M", "بي"), - (0xFC70, "M", "تر"), - (0xFC71, "M", "تز"), - (0xFC72, "M", "تم"), - (0xFC73, "M", "تن"), - (0xFC74, "M", "تى"), - (0xFC75, "M", "تي"), - (0xFC76, "M", "ثر"), - (0xFC77, "M", "ثز"), - (0xFC78, "M", "ثم"), - (0xFC79, "M", "ثن"), - (0xFC7A, "M", "ثى"), - (0xFC7B, "M", "ثي"), - (0xFC7C, "M", "فى"), - (0xFC7D, "M", "في"), - (0xFC7E, "M", "قى"), - (0xFC7F, "M", "قي"), - (0xFC80, "M", "كا"), - (0xFC81, "M", "كل"), - (0xFC82, "M", "كم"), - (0xFC83, "M", "كى"), - (0xFC84, "M", "كي"), - (0xFC85, "M", "لم"), - (0xFC86, "M", "لى"), - (0xFC87, "M", "لي"), - (0xFC88, "M", "ما"), - (0xFC89, "M", "مم"), - (0xFC8A, "M", "نر"), - (0xFC8B, "M", "نز"), - (0xFC8C, "M", "نم"), - (0xFC8D, "M", "نن"), - (0xFC8E, "M", "نى"), - (0xFC8F, "M", "ني"), - (0xFC90, "M", "ىٰ"), - (0xFC91, "M", "ير"), - (0xFC92, "M", "يز"), - (0xFC93, "M", "يم"), - (0xFC94, "M", "ين"), - (0xFC95, "M", "يى"), - (0xFC96, "M", "يي"), - (0xFC97, "M", "ئج"), - (0xFC98, "M", "ئح"), - (0xFC99, "M", "ئخ"), - (0xFC9A, "M", "ئم"), - (0xFC9B, "M", "ئه"), - (0xFC9C, "M", "بج"), - (0xFC9D, "M", "بح"), - (0xFC9E, "M", "بخ"), - (0xFC9F, "M", "بم"), - (0xFCA0, "M", "به"), - (0xFCA1, "M", "تج"), - (0xFCA2, "M", "تح"), - (0xFCA3, "M", "تخ"), - (0xFCA4, "M", "تم"), - (0xFCA5, "M", "ته"), - (0xFCA6, "M", "ثم"), - (0xFCA7, "M", "جح"), - (0xFCA8, "M", "جم"), - (0xFCA9, "M", "حج"), - (0xFCAA, "M", "حم"), - (0xFCAB, "M", "خج"), - (0xFCAC, "M", "خم"), - (0xFCAD, "M", "سج"), - (0xFCAE, "M", "سح"), - (0xFCAF, "M", "سخ"), - (0xFCB0, "M", "سم"), - (0xFCB1, "M", "صح"), - (0xFCB2, "M", "صخ"), - (0xFCB3, "M", "صم"), - (0xFCB4, "M", "ضج"), - (0xFCB5, "M", "ضح"), - (0xFCB6, "M", "ضخ"), - (0xFCB7, "M", "ضم"), - (0xFCB8, "M", "طح"), - (0xFCB9, "M", "ظم"), - (0xFCBA, "M", "عج"), - (0xFCBB, "M", "عم"), - (0xFCBC, "M", "غج"), - (0xFCBD, "M", "غم"), - (0xFCBE, "M", "فج"), - ] - - -def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFCBF, "M", "فح"), - (0xFCC0, "M", "فخ"), - (0xFCC1, "M", "فم"), - (0xFCC2, "M", "قح"), - (0xFCC3, "M", "قم"), - (0xFCC4, "M", "كج"), - (0xFCC5, "M", "كح"), - (0xFCC6, "M", "كخ"), - (0xFCC7, "M", "كل"), - (0xFCC8, "M", "كم"), - (0xFCC9, "M", "لج"), - (0xFCCA, "M", "لح"), - (0xFCCB, "M", "لخ"), - (0xFCCC, "M", "لم"), - (0xFCCD, "M", "له"), - (0xFCCE, "M", "مج"), - (0xFCCF, "M", "مح"), - (0xFCD0, "M", "مخ"), - (0xFCD1, "M", "مم"), - (0xFCD2, "M", "نج"), - (0xFCD3, "M", "نح"), - (0xFCD4, "M", "نخ"), - (0xFCD5, "M", "نم"), - (0xFCD6, "M", "نه"), - (0xFCD7, "M", "هج"), - (0xFCD8, "M", "هم"), - (0xFCD9, "M", "هٰ"), - (0xFCDA, "M", "يج"), - (0xFCDB, "M", "يح"), - (0xFCDC, "M", "يخ"), - (0xFCDD, "M", "يم"), - (0xFCDE, "M", "يه"), - (0xFCDF, "M", "ئم"), - (0xFCE0, "M", "ئه"), - (0xFCE1, "M", "بم"), - (0xFCE2, "M", "به"), - (0xFCE3, "M", "تم"), - (0xFCE4, "M", "ته"), - (0xFCE5, "M", "ثم"), - (0xFCE6, "M", "ثه"), - (0xFCE7, "M", "سم"), - (0xFCE8, "M", "سه"), - (0xFCE9, "M", "شم"), - (0xFCEA, "M", "شه"), - (0xFCEB, "M", "كل"), - (0xFCEC, "M", "كم"), - (0xFCED, "M", "لم"), - (0xFCEE, "M", "نم"), - (0xFCEF, "M", "نه"), - (0xFCF0, "M", "يم"), - (0xFCF1, "M", "يه"), - (0xFCF2, "M", "ـَّ"), - (0xFCF3, "M", "ـُّ"), - (0xFCF4, "M", "ـِّ"), - (0xFCF5, "M", "طى"), - (0xFCF6, "M", "طي"), - (0xFCF7, "M", "عى"), - (0xFCF8, "M", "عي"), - (0xFCF9, "M", "غى"), - (0xFCFA, "M", "غي"), - (0xFCFB, "M", "سى"), - (0xFCFC, "M", "سي"), - (0xFCFD, "M", "شى"), - (0xFCFE, "M", "شي"), - (0xFCFF, "M", "حى"), - (0xFD00, "M", "حي"), - (0xFD01, "M", "جى"), - (0xFD02, "M", "جي"), - (0xFD03, "M", "خى"), - (0xFD04, "M", "خي"), - (0xFD05, "M", "صى"), - (0xFD06, "M", "صي"), - (0xFD07, "M", "ضى"), - (0xFD08, "M", "ضي"), - (0xFD09, "M", "شج"), - (0xFD0A, "M", "شح"), - (0xFD0B, "M", "شخ"), - (0xFD0C, "M", "شم"), - (0xFD0D, "M", "شر"), - (0xFD0E, "M", "سر"), - (0xFD0F, "M", "صر"), - (0xFD10, "M", "ضر"), - (0xFD11, "M", "طى"), - (0xFD12, "M", "طي"), - (0xFD13, "M", "عى"), - (0xFD14, "M", "عي"), - (0xFD15, "M", "غى"), - (0xFD16, "M", "غي"), - (0xFD17, "M", "سى"), - (0xFD18, "M", "سي"), - (0xFD19, "M", "شى"), - (0xFD1A, "M", "شي"), - (0xFD1B, "M", "حى"), - (0xFD1C, "M", "حي"), - (0xFD1D, "M", "جى"), - (0xFD1E, "M", "جي"), - (0xFD1F, "M", "خى"), - (0xFD20, "M", "خي"), - (0xFD21, "M", "صى"), - (0xFD22, "M", "صي"), - ] - - -def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFD23, "M", "ضى"), - (0xFD24, "M", "ضي"), - (0xFD25, "M", "شج"), - (0xFD26, "M", "شح"), - (0xFD27, "M", "شخ"), - (0xFD28, "M", "شم"), - (0xFD29, "M", "شر"), - (0xFD2A, "M", "سر"), - (0xFD2B, "M", "صر"), - (0xFD2C, "M", "ضر"), - (0xFD2D, "M", "شج"), - (0xFD2E, "M", "شح"), - (0xFD2F, "M", "شخ"), - (0xFD30, "M", "شم"), - (0xFD31, "M", "سه"), - (0xFD32, "M", "شه"), - (0xFD33, "M", "طم"), - (0xFD34, "M", "سج"), - (0xFD35, "M", "سح"), - (0xFD36, "M", "سخ"), - (0xFD37, "M", "شج"), - (0xFD38, "M", "شح"), - (0xFD39, "M", "شخ"), - (0xFD3A, "M", "طم"), - (0xFD3B, "M", "ظم"), - (0xFD3C, "M", "اً"), - (0xFD3E, "V"), - (0xFD50, "M", "تجم"), - (0xFD51, "M", "تحج"), - (0xFD53, "M", "تحم"), - (0xFD54, "M", "تخم"), - (0xFD55, "M", "تمج"), - (0xFD56, "M", "تمح"), - (0xFD57, "M", "تمخ"), - (0xFD58, "M", "جمح"), - (0xFD5A, "M", "حمي"), - (0xFD5B, "M", "حمى"), - (0xFD5C, "M", "سحج"), - (0xFD5D, "M", "سجح"), - (0xFD5E, "M", "سجى"), - (0xFD5F, "M", "سمح"), - (0xFD61, "M", "سمج"), - (0xFD62, "M", "سمم"), - (0xFD64, "M", "صحح"), - (0xFD66, "M", "صمم"), - (0xFD67, "M", "شحم"), - (0xFD69, "M", "شجي"), - (0xFD6A, "M", "شمخ"), - (0xFD6C, "M", "شمم"), - (0xFD6E, "M", "ضحى"), - (0xFD6F, "M", "ضخم"), - (0xFD71, "M", "طمح"), - (0xFD73, "M", "طمم"), - (0xFD74, "M", "طمي"), - (0xFD75, "M", "عجم"), - (0xFD76, "M", "عمم"), - (0xFD78, "M", "عمى"), - (0xFD79, "M", "غمم"), - (0xFD7A, "M", "غمي"), - (0xFD7B, "M", "غمى"), - (0xFD7C, "M", "فخم"), - (0xFD7E, "M", "قمح"), - (0xFD7F, "M", "قمم"), - (0xFD80, "M", "لحم"), - (0xFD81, "M", "لحي"), - (0xFD82, "M", "لحى"), - (0xFD83, "M", "لجج"), - (0xFD85, "M", "لخم"), - (0xFD87, "M", "لمح"), - (0xFD89, "M", "محج"), - (0xFD8A, "M", "محم"), - (0xFD8B, "M", "محي"), - (0xFD8C, "M", "مجح"), - (0xFD8D, "M", "مجم"), - (0xFD8E, "M", "مخج"), - (0xFD8F, "M", "مخم"), - (0xFD90, "X"), - (0xFD92, "M", "مجخ"), - (0xFD93, "M", "همج"), - (0xFD94, "M", "همم"), - (0xFD95, "M", "نحم"), - (0xFD96, "M", "نحى"), - (0xFD97, "M", "نجم"), - (0xFD99, "M", "نجى"), - (0xFD9A, "M", "نمي"), - (0xFD9B, "M", "نمى"), - (0xFD9C, "M", "يمم"), - (0xFD9E, "M", "بخي"), - (0xFD9F, "M", "تجي"), - (0xFDA0, "M", "تجى"), - (0xFDA1, "M", "تخي"), - (0xFDA2, "M", "تخى"), - (0xFDA3, "M", "تمي"), - (0xFDA4, "M", "تمى"), - (0xFDA5, "M", "جمي"), - (0xFDA6, "M", "جحى"), - (0xFDA7, "M", "جمى"), - (0xFDA8, "M", "سخى"), - (0xFDA9, "M", "صحي"), - (0xFDAA, "M", "شحي"), - ] - - -def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFDAB, "M", "ضحي"), - (0xFDAC, "M", "لجي"), - (0xFDAD, "M", "لمي"), - (0xFDAE, "M", "يحي"), - (0xFDAF, "M", "يجي"), - (0xFDB0, "M", "يمي"), - (0xFDB1, "M", "ممي"), - (0xFDB2, "M", "قمي"), - (0xFDB3, "M", "نحي"), - (0xFDB4, "M", "قمح"), - (0xFDB5, "M", "لحم"), - (0xFDB6, "M", "عمي"), - (0xFDB7, "M", "كمي"), - (0xFDB8, "M", "نجح"), - (0xFDB9, "M", "مخي"), - (0xFDBA, "M", "لجم"), - (0xFDBB, "M", "كمم"), - (0xFDBC, "M", "لجم"), - (0xFDBD, "M", "نجح"), - (0xFDBE, "M", "جحي"), - (0xFDBF, "M", "حجي"), - (0xFDC0, "M", "مجي"), - (0xFDC1, "M", "فمي"), - (0xFDC2, "M", "بحي"), - (0xFDC3, "M", "كمم"), - (0xFDC4, "M", "عجم"), - (0xFDC5, "M", "صمم"), - (0xFDC6, "M", "سخي"), - (0xFDC7, "M", "نجي"), - (0xFDC8, "X"), - (0xFDCF, "V"), - (0xFDD0, "X"), - (0xFDF0, "M", "صلے"), - (0xFDF1, "M", "قلے"), - (0xFDF2, "M", "الله"), - (0xFDF3, "M", "اكبر"), - (0xFDF4, "M", "محمد"), - (0xFDF5, "M", "صلعم"), - (0xFDF6, "M", "رسول"), - (0xFDF7, "M", "عليه"), - (0xFDF8, "M", "وسلم"), - (0xFDF9, "M", "صلى"), - (0xFDFA, "3", "صلى الله عليه وسلم"), - (0xFDFB, "3", "جل جلاله"), - (0xFDFC, "M", "ریال"), - (0xFDFD, "V"), - (0xFE00, "I"), - (0xFE10, "3", ","), - (0xFE11, "M", "、"), - (0xFE12, "X"), - (0xFE13, "3", ":"), - (0xFE14, "3", ";"), - (0xFE15, "3", "!"), - (0xFE16, "3", "?"), - (0xFE17, "M", "〖"), - (0xFE18, "M", "〗"), - (0xFE19, "X"), - (0xFE20, "V"), - (0xFE30, "X"), - (0xFE31, "M", "—"), - (0xFE32, "M", "–"), - (0xFE33, "3", "_"), - (0xFE35, "3", "("), - (0xFE36, "3", ")"), - (0xFE37, "3", "{"), - (0xFE38, "3", "}"), - (0xFE39, "M", "〔"), - (0xFE3A, "M", "〕"), - (0xFE3B, "M", "【"), - (0xFE3C, "M", "】"), - (0xFE3D, "M", "《"), - (0xFE3E, "M", "》"), - (0xFE3F, "M", "〈"), - (0xFE40, "M", "〉"), - (0xFE41, "M", "「"), - (0xFE42, "M", "」"), - (0xFE43, "M", "『"), - (0xFE44, "M", "』"), - (0xFE45, "V"), - (0xFE47, "3", "["), - (0xFE48, "3", "]"), - (0xFE49, "3", " ̅"), - (0xFE4D, "3", "_"), - (0xFE50, "3", ","), - (0xFE51, "M", "、"), - (0xFE52, "X"), - (0xFE54, "3", ";"), - (0xFE55, "3", ":"), - (0xFE56, "3", "?"), - (0xFE57, "3", "!"), - (0xFE58, "M", "—"), - (0xFE59, "3", "("), - (0xFE5A, "3", ")"), - (0xFE5B, "3", "{"), - (0xFE5C, "3", "}"), - (0xFE5D, "M", "〔"), - (0xFE5E, "M", "〕"), - (0xFE5F, "3", "#"), - (0xFE60, "3", "&"), - (0xFE61, "3", "*"), - ] - - -def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFE62, "3", "+"), - (0xFE63, "M", "-"), - (0xFE64, "3", "<"), - (0xFE65, "3", ">"), - (0xFE66, "3", "="), - (0xFE67, "X"), - (0xFE68, "3", "\\"), - (0xFE69, "3", "$"), - (0xFE6A, "3", "%"), - (0xFE6B, "3", "@"), - (0xFE6C, "X"), - (0xFE70, "3", " ً"), - (0xFE71, "M", "ـً"), - (0xFE72, "3", " ٌ"), - (0xFE73, "V"), - (0xFE74, "3", " ٍ"), - (0xFE75, "X"), - (0xFE76, "3", " َ"), - (0xFE77, "M", "ـَ"), - (0xFE78, "3", " ُ"), - (0xFE79, "M", "ـُ"), - (0xFE7A, "3", " ِ"), - (0xFE7B, "M", "ـِ"), - (0xFE7C, "3", " ّ"), - (0xFE7D, "M", "ـّ"), - (0xFE7E, "3", " ْ"), - (0xFE7F, "M", "ـْ"), - (0xFE80, "M", "ء"), - (0xFE81, "M", "آ"), - (0xFE83, "M", "أ"), - (0xFE85, "M", "ؤ"), - (0xFE87, "M", "إ"), - (0xFE89, "M", "ئ"), - (0xFE8D, "M", "ا"), - (0xFE8F, "M", "ب"), - (0xFE93, "M", "ة"), - (0xFE95, "M", "ت"), - (0xFE99, "M", "ث"), - (0xFE9D, "M", "ج"), - (0xFEA1, "M", "ح"), - (0xFEA5, "M", "خ"), - (0xFEA9, "M", "د"), - (0xFEAB, "M", "ذ"), - (0xFEAD, "M", "ر"), - (0xFEAF, "M", "ز"), - (0xFEB1, "M", "س"), - (0xFEB5, "M", "ش"), - (0xFEB9, "M", "ص"), - (0xFEBD, "M", "ض"), - (0xFEC1, "M", "ط"), - (0xFEC5, "M", "ظ"), - (0xFEC9, "M", "ع"), - (0xFECD, "M", "غ"), - (0xFED1, "M", "ف"), - (0xFED5, "M", "ق"), - (0xFED9, "M", "ك"), - (0xFEDD, "M", "ل"), - (0xFEE1, "M", "م"), - (0xFEE5, "M", "ن"), - (0xFEE9, "M", "ه"), - (0xFEED, "M", "و"), - (0xFEEF, "M", "ى"), - (0xFEF1, "M", "ي"), - (0xFEF5, "M", "لآ"), - (0xFEF7, "M", "لأ"), - (0xFEF9, "M", "لإ"), - (0xFEFB, "M", "لا"), - (0xFEFD, "X"), - (0xFEFF, "I"), - (0xFF00, "X"), - (0xFF01, "3", "!"), - (0xFF02, "3", '"'), - (0xFF03, "3", "#"), - (0xFF04, "3", "$"), - (0xFF05, "3", "%"), - (0xFF06, "3", "&"), - (0xFF07, "3", "'"), - (0xFF08, "3", "("), - (0xFF09, "3", ")"), - (0xFF0A, "3", "*"), - (0xFF0B, "3", "+"), - (0xFF0C, "3", ","), - (0xFF0D, "M", "-"), - (0xFF0E, "M", "."), - (0xFF0F, "3", "/"), - (0xFF10, "M", "0"), - (0xFF11, "M", "1"), - (0xFF12, "M", "2"), - (0xFF13, "M", "3"), - (0xFF14, "M", "4"), - (0xFF15, "M", "5"), - (0xFF16, "M", "6"), - (0xFF17, "M", "7"), - (0xFF18, "M", "8"), - (0xFF19, "M", "9"), - (0xFF1A, "3", ":"), - (0xFF1B, "3", ";"), - (0xFF1C, "3", "<"), - (0xFF1D, "3", "="), - (0xFF1E, "3", ">"), - ] - - -def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFF1F, "3", "?"), - (0xFF20, "3", "@"), - (0xFF21, "M", "a"), - (0xFF22, "M", "b"), - (0xFF23, "M", "c"), - (0xFF24, "M", "d"), - (0xFF25, "M", "e"), - (0xFF26, "M", "f"), - (0xFF27, "M", "g"), - (0xFF28, "M", "h"), - (0xFF29, "M", "i"), - (0xFF2A, "M", "j"), - (0xFF2B, "M", "k"), - (0xFF2C, "M", "l"), - (0xFF2D, "M", "m"), - (0xFF2E, "M", "n"), - (0xFF2F, "M", "o"), - (0xFF30, "M", "p"), - (0xFF31, "M", "q"), - (0xFF32, "M", "r"), - (0xFF33, "M", "s"), - (0xFF34, "M", "t"), - (0xFF35, "M", "u"), - (0xFF36, "M", "v"), - (0xFF37, "M", "w"), - (0xFF38, "M", "x"), - (0xFF39, "M", "y"), - (0xFF3A, "M", "z"), - (0xFF3B, "3", "["), - (0xFF3C, "3", "\\"), - (0xFF3D, "3", "]"), - (0xFF3E, "3", "^"), - (0xFF3F, "3", "_"), - (0xFF40, "3", "`"), - (0xFF41, "M", "a"), - (0xFF42, "M", "b"), - (0xFF43, "M", "c"), - (0xFF44, "M", "d"), - (0xFF45, "M", "e"), - (0xFF46, "M", "f"), - (0xFF47, "M", "g"), - (0xFF48, "M", "h"), - (0xFF49, "M", "i"), - (0xFF4A, "M", "j"), - (0xFF4B, "M", "k"), - (0xFF4C, "M", "l"), - (0xFF4D, "M", "m"), - (0xFF4E, "M", "n"), - (0xFF4F, "M", "o"), - (0xFF50, "M", "p"), - (0xFF51, "M", "q"), - (0xFF52, "M", "r"), - (0xFF53, "M", "s"), - (0xFF54, "M", "t"), - (0xFF55, "M", "u"), - (0xFF56, "M", "v"), - (0xFF57, "M", "w"), - (0xFF58, "M", "x"), - (0xFF59, "M", "y"), - (0xFF5A, "M", "z"), - (0xFF5B, "3", "{"), - (0xFF5C, "3", "|"), - (0xFF5D, "3", "}"), - (0xFF5E, "3", "~"), - (0xFF5F, "M", "⦅"), - (0xFF60, "M", "⦆"), - (0xFF61, "M", "."), - (0xFF62, "M", "「"), - (0xFF63, "M", "」"), - (0xFF64, "M", "、"), - (0xFF65, "M", "・"), - (0xFF66, "M", "ヲ"), - (0xFF67, "M", "ァ"), - (0xFF68, "M", "ィ"), - (0xFF69, "M", "ゥ"), - (0xFF6A, "M", "ェ"), - (0xFF6B, "M", "ォ"), - (0xFF6C, "M", "ャ"), - (0xFF6D, "M", "ュ"), - (0xFF6E, "M", "ョ"), - (0xFF6F, "M", "ッ"), - (0xFF70, "M", "ー"), - (0xFF71, "M", "ア"), - (0xFF72, "M", "イ"), - (0xFF73, "M", "ウ"), - (0xFF74, "M", "エ"), - (0xFF75, "M", "オ"), - (0xFF76, "M", "カ"), - (0xFF77, "M", "キ"), - (0xFF78, "M", "ク"), - (0xFF79, "M", "ケ"), - (0xFF7A, "M", "コ"), - (0xFF7B, "M", "サ"), - (0xFF7C, "M", "シ"), - (0xFF7D, "M", "ス"), - (0xFF7E, "M", "セ"), - (0xFF7F, "M", "ソ"), - (0xFF80, "M", "タ"), - (0xFF81, "M", "チ"), - (0xFF82, "M", "ツ"), - ] - - -def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFF83, "M", "テ"), - (0xFF84, "M", "ト"), - (0xFF85, "M", "ナ"), - (0xFF86, "M", "ニ"), - (0xFF87, "M", "ヌ"), - (0xFF88, "M", "ネ"), - (0xFF89, "M", "ノ"), - (0xFF8A, "M", "ハ"), - (0xFF8B, "M", "ヒ"), - (0xFF8C, "M", "フ"), - (0xFF8D, "M", "ヘ"), - (0xFF8E, "M", "ホ"), - (0xFF8F, "M", "マ"), - (0xFF90, "M", "ミ"), - (0xFF91, "M", "ム"), - (0xFF92, "M", "メ"), - (0xFF93, "M", "モ"), - (0xFF94, "M", "ヤ"), - (0xFF95, "M", "ユ"), - (0xFF96, "M", "ヨ"), - (0xFF97, "M", "ラ"), - (0xFF98, "M", "リ"), - (0xFF99, "M", "ル"), - (0xFF9A, "M", "レ"), - (0xFF9B, "M", "ロ"), - (0xFF9C, "M", "ワ"), - (0xFF9D, "M", "ン"), - (0xFF9E, "M", "゙"), - (0xFF9F, "M", "゚"), - (0xFFA0, "X"), - (0xFFA1, "M", "ᄀ"), - (0xFFA2, "M", "ᄁ"), - (0xFFA3, "M", "ᆪ"), - (0xFFA4, "M", "ᄂ"), - (0xFFA5, "M", "ᆬ"), - (0xFFA6, "M", "ᆭ"), - (0xFFA7, "M", "ᄃ"), - (0xFFA8, "M", "ᄄ"), - (0xFFA9, "M", "ᄅ"), - (0xFFAA, "M", "ᆰ"), - (0xFFAB, "M", "ᆱ"), - (0xFFAC, "M", "ᆲ"), - (0xFFAD, "M", "ᆳ"), - (0xFFAE, "M", "ᆴ"), - (0xFFAF, "M", "ᆵ"), - (0xFFB0, "M", "ᄚ"), - (0xFFB1, "M", "ᄆ"), - (0xFFB2, "M", "ᄇ"), - (0xFFB3, "M", "ᄈ"), - (0xFFB4, "M", "ᄡ"), - (0xFFB5, "M", "ᄉ"), - (0xFFB6, "M", "ᄊ"), - (0xFFB7, "M", "ᄋ"), - (0xFFB8, "M", "ᄌ"), - (0xFFB9, "M", "ᄍ"), - (0xFFBA, "M", "ᄎ"), - (0xFFBB, "M", "ᄏ"), - (0xFFBC, "M", "ᄐ"), - (0xFFBD, "M", "ᄑ"), - (0xFFBE, "M", "ᄒ"), - (0xFFBF, "X"), - (0xFFC2, "M", "ᅡ"), - (0xFFC3, "M", "ᅢ"), - (0xFFC4, "M", "ᅣ"), - (0xFFC5, "M", "ᅤ"), - (0xFFC6, "M", "ᅥ"), - (0xFFC7, "M", "ᅦ"), - (0xFFC8, "X"), - (0xFFCA, "M", "ᅧ"), - (0xFFCB, "M", "ᅨ"), - (0xFFCC, "M", "ᅩ"), - (0xFFCD, "M", "ᅪ"), - (0xFFCE, "M", "ᅫ"), - (0xFFCF, "M", "ᅬ"), - (0xFFD0, "X"), - (0xFFD2, "M", "ᅭ"), - (0xFFD3, "M", "ᅮ"), - (0xFFD4, "M", "ᅯ"), - (0xFFD5, "M", "ᅰ"), - (0xFFD6, "M", "ᅱ"), - (0xFFD7, "M", "ᅲ"), - (0xFFD8, "X"), - (0xFFDA, "M", "ᅳ"), - (0xFFDB, "M", "ᅴ"), - (0xFFDC, "M", "ᅵ"), - (0xFFDD, "X"), - (0xFFE0, "M", "¢"), - (0xFFE1, "M", "£"), - (0xFFE2, "M", "¬"), - (0xFFE3, "3", " ̄"), - (0xFFE4, "M", "¦"), - (0xFFE5, "M", "¥"), - (0xFFE6, "M", "₩"), - (0xFFE7, "X"), - (0xFFE8, "M", "│"), - (0xFFE9, "M", "←"), - (0xFFEA, "M", "↑"), - (0xFFEB, "M", "→"), - (0xFFEC, "M", "↓"), - (0xFFED, "M", "■"), - ] - - -def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFFEE, "M", "○"), - (0xFFEF, "X"), - (0x10000, "V"), - (0x1000C, "X"), - (0x1000D, "V"), - (0x10027, "X"), - (0x10028, "V"), - (0x1003B, "X"), - (0x1003C, "V"), - (0x1003E, "X"), - (0x1003F, "V"), - (0x1004E, "X"), - (0x10050, "V"), - (0x1005E, "X"), - (0x10080, "V"), - (0x100FB, "X"), - (0x10100, "V"), - (0x10103, "X"), - (0x10107, "V"), - (0x10134, "X"), - (0x10137, "V"), - (0x1018F, "X"), - (0x10190, "V"), - (0x1019D, "X"), - (0x101A0, "V"), - (0x101A1, "X"), - (0x101D0, "V"), - (0x101FE, "X"), - (0x10280, "V"), - (0x1029D, "X"), - (0x102A0, "V"), - (0x102D1, "X"), - (0x102E0, "V"), - (0x102FC, "X"), - (0x10300, "V"), - (0x10324, "X"), - (0x1032D, "V"), - (0x1034B, "X"), - (0x10350, "V"), - (0x1037B, "X"), - (0x10380, "V"), - (0x1039E, "X"), - (0x1039F, "V"), - (0x103C4, "X"), - (0x103C8, "V"), - (0x103D6, "X"), - (0x10400, "M", "𐐨"), - (0x10401, "M", "𐐩"), - (0x10402, "M", "𐐪"), - (0x10403, "M", "𐐫"), - (0x10404, "M", "𐐬"), - (0x10405, "M", "𐐭"), - (0x10406, "M", "𐐮"), - (0x10407, "M", "𐐯"), - (0x10408, "M", "𐐰"), - (0x10409, "M", "𐐱"), - (0x1040A, "M", "𐐲"), - (0x1040B, "M", "𐐳"), - (0x1040C, "M", "𐐴"), - (0x1040D, "M", "𐐵"), - (0x1040E, "M", "𐐶"), - (0x1040F, "M", "𐐷"), - (0x10410, "M", "𐐸"), - (0x10411, "M", "𐐹"), - (0x10412, "M", "𐐺"), - (0x10413, "M", "𐐻"), - (0x10414, "M", "𐐼"), - (0x10415, "M", "𐐽"), - (0x10416, "M", "𐐾"), - (0x10417, "M", "𐐿"), - (0x10418, "M", "𐑀"), - (0x10419, "M", "𐑁"), - (0x1041A, "M", "𐑂"), - (0x1041B, "M", "𐑃"), - (0x1041C, "M", "𐑄"), - (0x1041D, "M", "𐑅"), - (0x1041E, "M", "𐑆"), - (0x1041F, "M", "𐑇"), - (0x10420, "M", "𐑈"), - (0x10421, "M", "𐑉"), - (0x10422, "M", "𐑊"), - (0x10423, "M", "𐑋"), - (0x10424, "M", "𐑌"), - (0x10425, "M", "𐑍"), - (0x10426, "M", "𐑎"), - (0x10427, "M", "𐑏"), - (0x10428, "V"), - (0x1049E, "X"), - (0x104A0, "V"), - (0x104AA, "X"), - (0x104B0, "M", "𐓘"), - (0x104B1, "M", "𐓙"), - (0x104B2, "M", "𐓚"), - (0x104B3, "M", "𐓛"), - (0x104B4, "M", "𐓜"), - (0x104B5, "M", "𐓝"), - (0x104B6, "M", "𐓞"), - (0x104B7, "M", "𐓟"), - (0x104B8, "M", "𐓠"), - (0x104B9, "M", "𐓡"), - ] - - -def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x104BA, "M", "𐓢"), - (0x104BB, "M", "𐓣"), - (0x104BC, "M", "𐓤"), - (0x104BD, "M", "𐓥"), - (0x104BE, "M", "𐓦"), - (0x104BF, "M", "𐓧"), - (0x104C0, "M", "𐓨"), - (0x104C1, "M", "𐓩"), - (0x104C2, "M", "𐓪"), - (0x104C3, "M", "𐓫"), - (0x104C4, "M", "𐓬"), - (0x104C5, "M", "𐓭"), - (0x104C6, "M", "𐓮"), - (0x104C7, "M", "𐓯"), - (0x104C8, "M", "𐓰"), - (0x104C9, "M", "𐓱"), - (0x104CA, "M", "𐓲"), - (0x104CB, "M", "𐓳"), - (0x104CC, "M", "𐓴"), - (0x104CD, "M", "𐓵"), - (0x104CE, "M", "𐓶"), - (0x104CF, "M", "𐓷"), - (0x104D0, "M", "𐓸"), - (0x104D1, "M", "𐓹"), - (0x104D2, "M", "𐓺"), - (0x104D3, "M", "𐓻"), - (0x104D4, "X"), - (0x104D8, "V"), - (0x104FC, "X"), - (0x10500, "V"), - (0x10528, "X"), - (0x10530, "V"), - (0x10564, "X"), - (0x1056F, "V"), - (0x10570, "M", "𐖗"), - (0x10571, "M", "𐖘"), - (0x10572, "M", "𐖙"), - (0x10573, "M", "𐖚"), - (0x10574, "M", "𐖛"), - (0x10575, "M", "𐖜"), - (0x10576, "M", "𐖝"), - (0x10577, "M", "𐖞"), - (0x10578, "M", "𐖟"), - (0x10579, "M", "𐖠"), - (0x1057A, "M", "𐖡"), - (0x1057B, "X"), - (0x1057C, "M", "𐖣"), - (0x1057D, "M", "𐖤"), - (0x1057E, "M", "𐖥"), - (0x1057F, "M", "𐖦"), - (0x10580, "M", "𐖧"), - (0x10581, "M", "𐖨"), - (0x10582, "M", "𐖩"), - (0x10583, "M", "𐖪"), - (0x10584, "M", "𐖫"), - (0x10585, "M", "𐖬"), - (0x10586, "M", "𐖭"), - (0x10587, "M", "𐖮"), - (0x10588, "M", "𐖯"), - (0x10589, "M", "𐖰"), - (0x1058A, "M", "𐖱"), - (0x1058B, "X"), - (0x1058C, "M", "𐖳"), - (0x1058D, "M", "𐖴"), - (0x1058E, "M", "𐖵"), - (0x1058F, "M", "𐖶"), - (0x10590, "M", "𐖷"), - (0x10591, "M", "𐖸"), - (0x10592, "M", "𐖹"), - (0x10593, "X"), - (0x10594, "M", "𐖻"), - (0x10595, "M", "𐖼"), - (0x10596, "X"), - (0x10597, "V"), - (0x105A2, "X"), - (0x105A3, "V"), - (0x105B2, "X"), - (0x105B3, "V"), - (0x105BA, "X"), - (0x105BB, "V"), - (0x105BD, "X"), - (0x10600, "V"), - (0x10737, "X"), - (0x10740, "V"), - (0x10756, "X"), - (0x10760, "V"), - (0x10768, "X"), - (0x10780, "V"), - (0x10781, "M", "ː"), - (0x10782, "M", "ˑ"), - (0x10783, "M", "æ"), - (0x10784, "M", "ʙ"), - (0x10785, "M", "ɓ"), - (0x10786, "X"), - (0x10787, "M", "ʣ"), - (0x10788, "M", "ꭦ"), - (0x10789, "M", "ʥ"), - (0x1078A, "M", "ʤ"), - (0x1078B, "M", "ɖ"), - (0x1078C, "M", "ɗ"), - ] - - -def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1078D, "M", "ᶑ"), - (0x1078E, "M", "ɘ"), - (0x1078F, "M", "ɞ"), - (0x10790, "M", "ʩ"), - (0x10791, "M", "ɤ"), - (0x10792, "M", "ɢ"), - (0x10793, "M", "ɠ"), - (0x10794, "M", "ʛ"), - (0x10795, "M", "ħ"), - (0x10796, "M", "ʜ"), - (0x10797, "M", "ɧ"), - (0x10798, "M", "ʄ"), - (0x10799, "M", "ʪ"), - (0x1079A, "M", "ʫ"), - (0x1079B, "M", "ɬ"), - (0x1079C, "M", "𝼄"), - (0x1079D, "M", "ꞎ"), - (0x1079E, "M", "ɮ"), - (0x1079F, "M", "𝼅"), - (0x107A0, "M", "ʎ"), - (0x107A1, "M", "𝼆"), - (0x107A2, "M", "ø"), - (0x107A3, "M", "ɶ"), - (0x107A4, "M", "ɷ"), - (0x107A5, "M", "q"), - (0x107A6, "M", "ɺ"), - (0x107A7, "M", "𝼈"), - (0x107A8, "M", "ɽ"), - (0x107A9, "M", "ɾ"), - (0x107AA, "M", "ʀ"), - (0x107AB, "M", "ʨ"), - (0x107AC, "M", "ʦ"), - (0x107AD, "M", "ꭧ"), - (0x107AE, "M", "ʧ"), - (0x107AF, "M", "ʈ"), - (0x107B0, "M", "ⱱ"), - (0x107B1, "X"), - (0x107B2, "M", "ʏ"), - (0x107B3, "M", "ʡ"), - (0x107B4, "M", "ʢ"), - (0x107B5, "M", "ʘ"), - (0x107B6, "M", "ǀ"), - (0x107B7, "M", "ǁ"), - (0x107B8, "M", "ǂ"), - (0x107B9, "M", "𝼊"), - (0x107BA, "M", "𝼞"), - (0x107BB, "X"), - (0x10800, "V"), - (0x10806, "X"), - (0x10808, "V"), - (0x10809, "X"), - (0x1080A, "V"), - (0x10836, "X"), - (0x10837, "V"), - (0x10839, "X"), - (0x1083C, "V"), - (0x1083D, "X"), - (0x1083F, "V"), - (0x10856, "X"), - (0x10857, "V"), - (0x1089F, "X"), - (0x108A7, "V"), - (0x108B0, "X"), - (0x108E0, "V"), - (0x108F3, "X"), - (0x108F4, "V"), - (0x108F6, "X"), - (0x108FB, "V"), - (0x1091C, "X"), - (0x1091F, "V"), - (0x1093A, "X"), - (0x1093F, "V"), - (0x10940, "X"), - (0x10980, "V"), - (0x109B8, "X"), - (0x109BC, "V"), - (0x109D0, "X"), - (0x109D2, "V"), - (0x10A04, "X"), - (0x10A05, "V"), - (0x10A07, "X"), - (0x10A0C, "V"), - (0x10A14, "X"), - (0x10A15, "V"), - (0x10A18, "X"), - (0x10A19, "V"), - (0x10A36, "X"), - (0x10A38, "V"), - (0x10A3B, "X"), - (0x10A3F, "V"), - (0x10A49, "X"), - (0x10A50, "V"), - (0x10A59, "X"), - (0x10A60, "V"), - (0x10AA0, "X"), - (0x10AC0, "V"), - (0x10AE7, "X"), - (0x10AEB, "V"), - (0x10AF7, "X"), - (0x10B00, "V"), - ] - - -def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10B36, "X"), - (0x10B39, "V"), - (0x10B56, "X"), - (0x10B58, "V"), - (0x10B73, "X"), - (0x10B78, "V"), - (0x10B92, "X"), - (0x10B99, "V"), - (0x10B9D, "X"), - (0x10BA9, "V"), - (0x10BB0, "X"), - (0x10C00, "V"), - (0x10C49, "X"), - (0x10C80, "M", "𐳀"), - (0x10C81, "M", "𐳁"), - (0x10C82, "M", "𐳂"), - (0x10C83, "M", "𐳃"), - (0x10C84, "M", "𐳄"), - (0x10C85, "M", "𐳅"), - (0x10C86, "M", "𐳆"), - (0x10C87, "M", "𐳇"), - (0x10C88, "M", "𐳈"), - (0x10C89, "M", "𐳉"), - (0x10C8A, "M", "𐳊"), - (0x10C8B, "M", "𐳋"), - (0x10C8C, "M", "𐳌"), - (0x10C8D, "M", "𐳍"), - (0x10C8E, "M", "𐳎"), - (0x10C8F, "M", "𐳏"), - (0x10C90, "M", "𐳐"), - (0x10C91, "M", "𐳑"), - (0x10C92, "M", "𐳒"), - (0x10C93, "M", "𐳓"), - (0x10C94, "M", "𐳔"), - (0x10C95, "M", "𐳕"), - (0x10C96, "M", "𐳖"), - (0x10C97, "M", "𐳗"), - (0x10C98, "M", "𐳘"), - (0x10C99, "M", "𐳙"), - (0x10C9A, "M", "𐳚"), - (0x10C9B, "M", "𐳛"), - (0x10C9C, "M", "𐳜"), - (0x10C9D, "M", "𐳝"), - (0x10C9E, "M", "𐳞"), - (0x10C9F, "M", "𐳟"), - (0x10CA0, "M", "𐳠"), - (0x10CA1, "M", "𐳡"), - (0x10CA2, "M", "𐳢"), - (0x10CA3, "M", "𐳣"), - (0x10CA4, "M", "𐳤"), - (0x10CA5, "M", "𐳥"), - (0x10CA6, "M", "𐳦"), - (0x10CA7, "M", "𐳧"), - (0x10CA8, "M", "𐳨"), - (0x10CA9, "M", "𐳩"), - (0x10CAA, "M", "𐳪"), - (0x10CAB, "M", "𐳫"), - (0x10CAC, "M", "𐳬"), - (0x10CAD, "M", "𐳭"), - (0x10CAE, "M", "𐳮"), - (0x10CAF, "M", "𐳯"), - (0x10CB0, "M", "𐳰"), - (0x10CB1, "M", "𐳱"), - (0x10CB2, "M", "𐳲"), - (0x10CB3, "X"), - (0x10CC0, "V"), - (0x10CF3, "X"), - (0x10CFA, "V"), - (0x10D28, "X"), - (0x10D30, "V"), - (0x10D3A, "X"), - (0x10E60, "V"), - (0x10E7F, "X"), - (0x10E80, "V"), - (0x10EAA, "X"), - (0x10EAB, "V"), - (0x10EAE, "X"), - (0x10EB0, "V"), - (0x10EB2, "X"), - (0x10EFD, "V"), - (0x10F28, "X"), - (0x10F30, "V"), - (0x10F5A, "X"), - (0x10F70, "V"), - (0x10F8A, "X"), - (0x10FB0, "V"), - (0x10FCC, "X"), - (0x10FE0, "V"), - (0x10FF7, "X"), - (0x11000, "V"), - (0x1104E, "X"), - (0x11052, "V"), - (0x11076, "X"), - (0x1107F, "V"), - (0x110BD, "X"), - (0x110BE, "V"), - (0x110C3, "X"), - (0x110D0, "V"), - (0x110E9, "X"), - (0x110F0, "V"), - ] - - -def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x110FA, "X"), - (0x11100, "V"), - (0x11135, "X"), - (0x11136, "V"), - (0x11148, "X"), - (0x11150, "V"), - (0x11177, "X"), - (0x11180, "V"), - (0x111E0, "X"), - (0x111E1, "V"), - (0x111F5, "X"), - (0x11200, "V"), - (0x11212, "X"), - (0x11213, "V"), - (0x11242, "X"), - (0x11280, "V"), - (0x11287, "X"), - (0x11288, "V"), - (0x11289, "X"), - (0x1128A, "V"), - (0x1128E, "X"), - (0x1128F, "V"), - (0x1129E, "X"), - (0x1129F, "V"), - (0x112AA, "X"), - (0x112B0, "V"), - (0x112EB, "X"), - (0x112F0, "V"), - (0x112FA, "X"), - (0x11300, "V"), - (0x11304, "X"), - (0x11305, "V"), - (0x1130D, "X"), - (0x1130F, "V"), - (0x11311, "X"), - (0x11313, "V"), - (0x11329, "X"), - (0x1132A, "V"), - (0x11331, "X"), - (0x11332, "V"), - (0x11334, "X"), - (0x11335, "V"), - (0x1133A, "X"), - (0x1133B, "V"), - (0x11345, "X"), - (0x11347, "V"), - (0x11349, "X"), - (0x1134B, "V"), - (0x1134E, "X"), - (0x11350, "V"), - (0x11351, "X"), - (0x11357, "V"), - (0x11358, "X"), - (0x1135D, "V"), - (0x11364, "X"), - (0x11366, "V"), - (0x1136D, "X"), - (0x11370, "V"), - (0x11375, "X"), - (0x11400, "V"), - (0x1145C, "X"), - (0x1145D, "V"), - (0x11462, "X"), - (0x11480, "V"), - (0x114C8, "X"), - (0x114D0, "V"), - (0x114DA, "X"), - (0x11580, "V"), - (0x115B6, "X"), - (0x115B8, "V"), - (0x115DE, "X"), - (0x11600, "V"), - (0x11645, "X"), - (0x11650, "V"), - (0x1165A, "X"), - (0x11660, "V"), - (0x1166D, "X"), - (0x11680, "V"), - (0x116BA, "X"), - (0x116C0, "V"), - (0x116CA, "X"), - (0x11700, "V"), - (0x1171B, "X"), - (0x1171D, "V"), - (0x1172C, "X"), - (0x11730, "V"), - (0x11747, "X"), - (0x11800, "V"), - (0x1183C, "X"), - (0x118A0, "M", "𑣀"), - (0x118A1, "M", "𑣁"), - (0x118A2, "M", "𑣂"), - (0x118A3, "M", "𑣃"), - (0x118A4, "M", "𑣄"), - (0x118A5, "M", "𑣅"), - (0x118A6, "M", "𑣆"), - (0x118A7, "M", "𑣇"), - (0x118A8, "M", "𑣈"), - (0x118A9, "M", "𑣉"), - (0x118AA, "M", "𑣊"), - ] - - -def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x118AB, "M", "𑣋"), - (0x118AC, "M", "𑣌"), - (0x118AD, "M", "𑣍"), - (0x118AE, "M", "𑣎"), - (0x118AF, "M", "𑣏"), - (0x118B0, "M", "𑣐"), - (0x118B1, "M", "𑣑"), - (0x118B2, "M", "𑣒"), - (0x118B3, "M", "𑣓"), - (0x118B4, "M", "𑣔"), - (0x118B5, "M", "𑣕"), - (0x118B6, "M", "𑣖"), - (0x118B7, "M", "𑣗"), - (0x118B8, "M", "𑣘"), - (0x118B9, "M", "𑣙"), - (0x118BA, "M", "𑣚"), - (0x118BB, "M", "𑣛"), - (0x118BC, "M", "𑣜"), - (0x118BD, "M", "𑣝"), - (0x118BE, "M", "𑣞"), - (0x118BF, "M", "𑣟"), - (0x118C0, "V"), - (0x118F3, "X"), - (0x118FF, "V"), - (0x11907, "X"), - (0x11909, "V"), - (0x1190A, "X"), - (0x1190C, "V"), - (0x11914, "X"), - (0x11915, "V"), - (0x11917, "X"), - (0x11918, "V"), - (0x11936, "X"), - (0x11937, "V"), - (0x11939, "X"), - (0x1193B, "V"), - (0x11947, "X"), - (0x11950, "V"), - (0x1195A, "X"), - (0x119A0, "V"), - (0x119A8, "X"), - (0x119AA, "V"), - (0x119D8, "X"), - (0x119DA, "V"), - (0x119E5, "X"), - (0x11A00, "V"), - (0x11A48, "X"), - (0x11A50, "V"), - (0x11AA3, "X"), - (0x11AB0, "V"), - (0x11AF9, "X"), - (0x11B00, "V"), - (0x11B0A, "X"), - (0x11C00, "V"), - (0x11C09, "X"), - (0x11C0A, "V"), - (0x11C37, "X"), - (0x11C38, "V"), - (0x11C46, "X"), - (0x11C50, "V"), - (0x11C6D, "X"), - (0x11C70, "V"), - (0x11C90, "X"), - (0x11C92, "V"), - (0x11CA8, "X"), - (0x11CA9, "V"), - (0x11CB7, "X"), - (0x11D00, "V"), - (0x11D07, "X"), - (0x11D08, "V"), - (0x11D0A, "X"), - (0x11D0B, "V"), - (0x11D37, "X"), - (0x11D3A, "V"), - (0x11D3B, "X"), - (0x11D3C, "V"), - (0x11D3E, "X"), - (0x11D3F, "V"), - (0x11D48, "X"), - (0x11D50, "V"), - (0x11D5A, "X"), - (0x11D60, "V"), - (0x11D66, "X"), - (0x11D67, "V"), - (0x11D69, "X"), - (0x11D6A, "V"), - (0x11D8F, "X"), - (0x11D90, "V"), - (0x11D92, "X"), - (0x11D93, "V"), - (0x11D99, "X"), - (0x11DA0, "V"), - (0x11DAA, "X"), - (0x11EE0, "V"), - (0x11EF9, "X"), - (0x11F00, "V"), - (0x11F11, "X"), - (0x11F12, "V"), - (0x11F3B, "X"), - (0x11F3E, "V"), - ] - - -def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x11F5A, "X"), - (0x11FB0, "V"), - (0x11FB1, "X"), - (0x11FC0, "V"), - (0x11FF2, "X"), - (0x11FFF, "V"), - (0x1239A, "X"), - (0x12400, "V"), - (0x1246F, "X"), - (0x12470, "V"), - (0x12475, "X"), - (0x12480, "V"), - (0x12544, "X"), - (0x12F90, "V"), - (0x12FF3, "X"), - (0x13000, "V"), - (0x13430, "X"), - (0x13440, "V"), - (0x13456, "X"), - (0x14400, "V"), - (0x14647, "X"), - (0x16800, "V"), - (0x16A39, "X"), - (0x16A40, "V"), - (0x16A5F, "X"), - (0x16A60, "V"), - (0x16A6A, "X"), - (0x16A6E, "V"), - (0x16ABF, "X"), - (0x16AC0, "V"), - (0x16ACA, "X"), - (0x16AD0, "V"), - (0x16AEE, "X"), - (0x16AF0, "V"), - (0x16AF6, "X"), - (0x16B00, "V"), - (0x16B46, "X"), - (0x16B50, "V"), - (0x16B5A, "X"), - (0x16B5B, "V"), - (0x16B62, "X"), - (0x16B63, "V"), - (0x16B78, "X"), - (0x16B7D, "V"), - (0x16B90, "X"), - (0x16E40, "M", "𖹠"), - (0x16E41, "M", "𖹡"), - (0x16E42, "M", "𖹢"), - (0x16E43, "M", "𖹣"), - (0x16E44, "M", "𖹤"), - (0x16E45, "M", "𖹥"), - (0x16E46, "M", "𖹦"), - (0x16E47, "M", "𖹧"), - (0x16E48, "M", "𖹨"), - (0x16E49, "M", "𖹩"), - (0x16E4A, "M", "𖹪"), - (0x16E4B, "M", "𖹫"), - (0x16E4C, "M", "𖹬"), - (0x16E4D, "M", "𖹭"), - (0x16E4E, "M", "𖹮"), - (0x16E4F, "M", "𖹯"), - (0x16E50, "M", "𖹰"), - (0x16E51, "M", "𖹱"), - (0x16E52, "M", "𖹲"), - (0x16E53, "M", "𖹳"), - (0x16E54, "M", "𖹴"), - (0x16E55, "M", "𖹵"), - (0x16E56, "M", "𖹶"), - (0x16E57, "M", "𖹷"), - (0x16E58, "M", "𖹸"), - (0x16E59, "M", "𖹹"), - (0x16E5A, "M", "𖹺"), - (0x16E5B, "M", "𖹻"), - (0x16E5C, "M", "𖹼"), - (0x16E5D, "M", "𖹽"), - (0x16E5E, "M", "𖹾"), - (0x16E5F, "M", "𖹿"), - (0x16E60, "V"), - (0x16E9B, "X"), - (0x16F00, "V"), - (0x16F4B, "X"), - (0x16F4F, "V"), - (0x16F88, "X"), - (0x16F8F, "V"), - (0x16FA0, "X"), - (0x16FE0, "V"), - (0x16FE5, "X"), - (0x16FF0, "V"), - (0x16FF2, "X"), - (0x17000, "V"), - (0x187F8, "X"), - (0x18800, "V"), - (0x18CD6, "X"), - (0x18D00, "V"), - (0x18D09, "X"), - (0x1AFF0, "V"), - (0x1AFF4, "X"), - (0x1AFF5, "V"), - (0x1AFFC, "X"), - (0x1AFFD, "V"), - ] - - -def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1AFFF, "X"), - (0x1B000, "V"), - (0x1B123, "X"), - (0x1B132, "V"), - (0x1B133, "X"), - (0x1B150, "V"), - (0x1B153, "X"), - (0x1B155, "V"), - (0x1B156, "X"), - (0x1B164, "V"), - (0x1B168, "X"), - (0x1B170, "V"), - (0x1B2FC, "X"), - (0x1BC00, "V"), - (0x1BC6B, "X"), - (0x1BC70, "V"), - (0x1BC7D, "X"), - (0x1BC80, "V"), - (0x1BC89, "X"), - (0x1BC90, "V"), - (0x1BC9A, "X"), - (0x1BC9C, "V"), - (0x1BCA0, "I"), - (0x1BCA4, "X"), - (0x1CF00, "V"), - (0x1CF2E, "X"), - (0x1CF30, "V"), - (0x1CF47, "X"), - (0x1CF50, "V"), - (0x1CFC4, "X"), - (0x1D000, "V"), - (0x1D0F6, "X"), - (0x1D100, "V"), - (0x1D127, "X"), - (0x1D129, "V"), - (0x1D15E, "M", "𝅗𝅥"), - (0x1D15F, "M", "𝅘𝅥"), - (0x1D160, "M", "𝅘𝅥𝅮"), - (0x1D161, "M", "𝅘𝅥𝅯"), - (0x1D162, "M", "𝅘𝅥𝅰"), - (0x1D163, "M", "𝅘𝅥𝅱"), - (0x1D164, "M", "𝅘𝅥𝅲"), - (0x1D165, "V"), - (0x1D173, "X"), - (0x1D17B, "V"), - (0x1D1BB, "M", "𝆹𝅥"), - (0x1D1BC, "M", "𝆺𝅥"), - (0x1D1BD, "M", "𝆹𝅥𝅮"), - (0x1D1BE, "M", "𝆺𝅥𝅮"), - (0x1D1BF, "M", "𝆹𝅥𝅯"), - (0x1D1C0, "M", "𝆺𝅥𝅯"), - (0x1D1C1, "V"), - (0x1D1EB, "X"), - (0x1D200, "V"), - (0x1D246, "X"), - (0x1D2C0, "V"), - (0x1D2D4, "X"), - (0x1D2E0, "V"), - (0x1D2F4, "X"), - (0x1D300, "V"), - (0x1D357, "X"), - (0x1D360, "V"), - (0x1D379, "X"), - (0x1D400, "M", "a"), - (0x1D401, "M", "b"), - (0x1D402, "M", "c"), - (0x1D403, "M", "d"), - (0x1D404, "M", "e"), - (0x1D405, "M", "f"), - (0x1D406, "M", "g"), - (0x1D407, "M", "h"), - (0x1D408, "M", "i"), - (0x1D409, "M", "j"), - (0x1D40A, "M", "k"), - (0x1D40B, "M", "l"), - (0x1D40C, "M", "m"), - (0x1D40D, "M", "n"), - (0x1D40E, "M", "o"), - (0x1D40F, "M", "p"), - (0x1D410, "M", "q"), - (0x1D411, "M", "r"), - (0x1D412, "M", "s"), - (0x1D413, "M", "t"), - (0x1D414, "M", "u"), - (0x1D415, "M", "v"), - (0x1D416, "M", "w"), - (0x1D417, "M", "x"), - (0x1D418, "M", "y"), - (0x1D419, "M", "z"), - (0x1D41A, "M", "a"), - (0x1D41B, "M", "b"), - (0x1D41C, "M", "c"), - (0x1D41D, "M", "d"), - (0x1D41E, "M", "e"), - (0x1D41F, "M", "f"), - (0x1D420, "M", "g"), - (0x1D421, "M", "h"), - (0x1D422, "M", "i"), - (0x1D423, "M", "j"), - (0x1D424, "M", "k"), - ] - - -def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D425, "M", "l"), - (0x1D426, "M", "m"), - (0x1D427, "M", "n"), - (0x1D428, "M", "o"), - (0x1D429, "M", "p"), - (0x1D42A, "M", "q"), - (0x1D42B, "M", "r"), - (0x1D42C, "M", "s"), - (0x1D42D, "M", "t"), - (0x1D42E, "M", "u"), - (0x1D42F, "M", "v"), - (0x1D430, "M", "w"), - (0x1D431, "M", "x"), - (0x1D432, "M", "y"), - (0x1D433, "M", "z"), - (0x1D434, "M", "a"), - (0x1D435, "M", "b"), - (0x1D436, "M", "c"), - (0x1D437, "M", "d"), - (0x1D438, "M", "e"), - (0x1D439, "M", "f"), - (0x1D43A, "M", "g"), - (0x1D43B, "M", "h"), - (0x1D43C, "M", "i"), - (0x1D43D, "M", "j"), - (0x1D43E, "M", "k"), - (0x1D43F, "M", "l"), - (0x1D440, "M", "m"), - (0x1D441, "M", "n"), - (0x1D442, "M", "o"), - (0x1D443, "M", "p"), - (0x1D444, "M", "q"), - (0x1D445, "M", "r"), - (0x1D446, "M", "s"), - (0x1D447, "M", "t"), - (0x1D448, "M", "u"), - (0x1D449, "M", "v"), - (0x1D44A, "M", "w"), - (0x1D44B, "M", "x"), - (0x1D44C, "M", "y"), - (0x1D44D, "M", "z"), - (0x1D44E, "M", "a"), - (0x1D44F, "M", "b"), - (0x1D450, "M", "c"), - (0x1D451, "M", "d"), - (0x1D452, "M", "e"), - (0x1D453, "M", "f"), - (0x1D454, "M", "g"), - (0x1D455, "X"), - (0x1D456, "M", "i"), - (0x1D457, "M", "j"), - (0x1D458, "M", "k"), - (0x1D459, "M", "l"), - (0x1D45A, "M", "m"), - (0x1D45B, "M", "n"), - (0x1D45C, "M", "o"), - (0x1D45D, "M", "p"), - (0x1D45E, "M", "q"), - (0x1D45F, "M", "r"), - (0x1D460, "M", "s"), - (0x1D461, "M", "t"), - (0x1D462, "M", "u"), - (0x1D463, "M", "v"), - (0x1D464, "M", "w"), - (0x1D465, "M", "x"), - (0x1D466, "M", "y"), - (0x1D467, "M", "z"), - (0x1D468, "M", "a"), - (0x1D469, "M", "b"), - (0x1D46A, "M", "c"), - (0x1D46B, "M", "d"), - (0x1D46C, "M", "e"), - (0x1D46D, "M", "f"), - (0x1D46E, "M", "g"), - (0x1D46F, "M", "h"), - (0x1D470, "M", "i"), - (0x1D471, "M", "j"), - (0x1D472, "M", "k"), - (0x1D473, "M", "l"), - (0x1D474, "M", "m"), - (0x1D475, "M", "n"), - (0x1D476, "M", "o"), - (0x1D477, "M", "p"), - (0x1D478, "M", "q"), - (0x1D479, "M", "r"), - (0x1D47A, "M", "s"), - (0x1D47B, "M", "t"), - (0x1D47C, "M", "u"), - (0x1D47D, "M", "v"), - (0x1D47E, "M", "w"), - (0x1D47F, "M", "x"), - (0x1D480, "M", "y"), - (0x1D481, "M", "z"), - (0x1D482, "M", "a"), - (0x1D483, "M", "b"), - (0x1D484, "M", "c"), - (0x1D485, "M", "d"), - (0x1D486, "M", "e"), - (0x1D487, "M", "f"), - (0x1D488, "M", "g"), - ] - - -def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D489, "M", "h"), - (0x1D48A, "M", "i"), - (0x1D48B, "M", "j"), - (0x1D48C, "M", "k"), - (0x1D48D, "M", "l"), - (0x1D48E, "M", "m"), - (0x1D48F, "M", "n"), - (0x1D490, "M", "o"), - (0x1D491, "M", "p"), - (0x1D492, "M", "q"), - (0x1D493, "M", "r"), - (0x1D494, "M", "s"), - (0x1D495, "M", "t"), - (0x1D496, "M", "u"), - (0x1D497, "M", "v"), - (0x1D498, "M", "w"), - (0x1D499, "M", "x"), - (0x1D49A, "M", "y"), - (0x1D49B, "M", "z"), - (0x1D49C, "M", "a"), - (0x1D49D, "X"), - (0x1D49E, "M", "c"), - (0x1D49F, "M", "d"), - (0x1D4A0, "X"), - (0x1D4A2, "M", "g"), - (0x1D4A3, "X"), - (0x1D4A5, "M", "j"), - (0x1D4A6, "M", "k"), - (0x1D4A7, "X"), - (0x1D4A9, "M", "n"), - (0x1D4AA, "M", "o"), - (0x1D4AB, "M", "p"), - (0x1D4AC, "M", "q"), - (0x1D4AD, "X"), - (0x1D4AE, "M", "s"), - (0x1D4AF, "M", "t"), - (0x1D4B0, "M", "u"), - (0x1D4B1, "M", "v"), - (0x1D4B2, "M", "w"), - (0x1D4B3, "M", "x"), - (0x1D4B4, "M", "y"), - (0x1D4B5, "M", "z"), - (0x1D4B6, "M", "a"), - (0x1D4B7, "M", "b"), - (0x1D4B8, "M", "c"), - (0x1D4B9, "M", "d"), - (0x1D4BA, "X"), - (0x1D4BB, "M", "f"), - (0x1D4BC, "X"), - (0x1D4BD, "M", "h"), - (0x1D4BE, "M", "i"), - (0x1D4BF, "M", "j"), - (0x1D4C0, "M", "k"), - (0x1D4C1, "M", "l"), - (0x1D4C2, "M", "m"), - (0x1D4C3, "M", "n"), - (0x1D4C4, "X"), - (0x1D4C5, "M", "p"), - (0x1D4C6, "M", "q"), - (0x1D4C7, "M", "r"), - (0x1D4C8, "M", "s"), - (0x1D4C9, "M", "t"), - (0x1D4CA, "M", "u"), - (0x1D4CB, "M", "v"), - (0x1D4CC, "M", "w"), - (0x1D4CD, "M", "x"), - (0x1D4CE, "M", "y"), - (0x1D4CF, "M", "z"), - (0x1D4D0, "M", "a"), - (0x1D4D1, "M", "b"), - (0x1D4D2, "M", "c"), - (0x1D4D3, "M", "d"), - (0x1D4D4, "M", "e"), - (0x1D4D5, "M", "f"), - (0x1D4D6, "M", "g"), - (0x1D4D7, "M", "h"), - (0x1D4D8, "M", "i"), - (0x1D4D9, "M", "j"), - (0x1D4DA, "M", "k"), - (0x1D4DB, "M", "l"), - (0x1D4DC, "M", "m"), - (0x1D4DD, "M", "n"), - (0x1D4DE, "M", "o"), - (0x1D4DF, "M", "p"), - (0x1D4E0, "M", "q"), - (0x1D4E1, "M", "r"), - (0x1D4E2, "M", "s"), - (0x1D4E3, "M", "t"), - (0x1D4E4, "M", "u"), - (0x1D4E5, "M", "v"), - (0x1D4E6, "M", "w"), - (0x1D4E7, "M", "x"), - (0x1D4E8, "M", "y"), - (0x1D4E9, "M", "z"), - (0x1D4EA, "M", "a"), - (0x1D4EB, "M", "b"), - (0x1D4EC, "M", "c"), - (0x1D4ED, "M", "d"), - (0x1D4EE, "M", "e"), - (0x1D4EF, "M", "f"), - ] - - -def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D4F0, "M", "g"), - (0x1D4F1, "M", "h"), - (0x1D4F2, "M", "i"), - (0x1D4F3, "M", "j"), - (0x1D4F4, "M", "k"), - (0x1D4F5, "M", "l"), - (0x1D4F6, "M", "m"), - (0x1D4F7, "M", "n"), - (0x1D4F8, "M", "o"), - (0x1D4F9, "M", "p"), - (0x1D4FA, "M", "q"), - (0x1D4FB, "M", "r"), - (0x1D4FC, "M", "s"), - (0x1D4FD, "M", "t"), - (0x1D4FE, "M", "u"), - (0x1D4FF, "M", "v"), - (0x1D500, "M", "w"), - (0x1D501, "M", "x"), - (0x1D502, "M", "y"), - (0x1D503, "M", "z"), - (0x1D504, "M", "a"), - (0x1D505, "M", "b"), - (0x1D506, "X"), - (0x1D507, "M", "d"), - (0x1D508, "M", "e"), - (0x1D509, "M", "f"), - (0x1D50A, "M", "g"), - (0x1D50B, "X"), - (0x1D50D, "M", "j"), - (0x1D50E, "M", "k"), - (0x1D50F, "M", "l"), - (0x1D510, "M", "m"), - (0x1D511, "M", "n"), - (0x1D512, "M", "o"), - (0x1D513, "M", "p"), - (0x1D514, "M", "q"), - (0x1D515, "X"), - (0x1D516, "M", "s"), - (0x1D517, "M", "t"), - (0x1D518, "M", "u"), - (0x1D519, "M", "v"), - (0x1D51A, "M", "w"), - (0x1D51B, "M", "x"), - (0x1D51C, "M", "y"), - (0x1D51D, "X"), - (0x1D51E, "M", "a"), - (0x1D51F, "M", "b"), - (0x1D520, "M", "c"), - (0x1D521, "M", "d"), - (0x1D522, "M", "e"), - (0x1D523, "M", "f"), - (0x1D524, "M", "g"), - (0x1D525, "M", "h"), - (0x1D526, "M", "i"), - (0x1D527, "M", "j"), - (0x1D528, "M", "k"), - (0x1D529, "M", "l"), - (0x1D52A, "M", "m"), - (0x1D52B, "M", "n"), - (0x1D52C, "M", "o"), - (0x1D52D, "M", "p"), - (0x1D52E, "M", "q"), - (0x1D52F, "M", "r"), - (0x1D530, "M", "s"), - (0x1D531, "M", "t"), - (0x1D532, "M", "u"), - (0x1D533, "M", "v"), - (0x1D534, "M", "w"), - (0x1D535, "M", "x"), - (0x1D536, "M", "y"), - (0x1D537, "M", "z"), - (0x1D538, "M", "a"), - (0x1D539, "M", "b"), - (0x1D53A, "X"), - (0x1D53B, "M", "d"), - (0x1D53C, "M", "e"), - (0x1D53D, "M", "f"), - (0x1D53E, "M", "g"), - (0x1D53F, "X"), - (0x1D540, "M", "i"), - (0x1D541, "M", "j"), - (0x1D542, "M", "k"), - (0x1D543, "M", "l"), - (0x1D544, "M", "m"), - (0x1D545, "X"), - (0x1D546, "M", "o"), - (0x1D547, "X"), - (0x1D54A, "M", "s"), - (0x1D54B, "M", "t"), - (0x1D54C, "M", "u"), - (0x1D54D, "M", "v"), - (0x1D54E, "M", "w"), - (0x1D54F, "M", "x"), - (0x1D550, "M", "y"), - (0x1D551, "X"), - (0x1D552, "M", "a"), - (0x1D553, "M", "b"), - (0x1D554, "M", "c"), - (0x1D555, "M", "d"), - (0x1D556, "M", "e"), - ] - - -def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D557, "M", "f"), - (0x1D558, "M", "g"), - (0x1D559, "M", "h"), - (0x1D55A, "M", "i"), - (0x1D55B, "M", "j"), - (0x1D55C, "M", "k"), - (0x1D55D, "M", "l"), - (0x1D55E, "M", "m"), - (0x1D55F, "M", "n"), - (0x1D560, "M", "o"), - (0x1D561, "M", "p"), - (0x1D562, "M", "q"), - (0x1D563, "M", "r"), - (0x1D564, "M", "s"), - (0x1D565, "M", "t"), - (0x1D566, "M", "u"), - (0x1D567, "M", "v"), - (0x1D568, "M", "w"), - (0x1D569, "M", "x"), - (0x1D56A, "M", "y"), - (0x1D56B, "M", "z"), - (0x1D56C, "M", "a"), - (0x1D56D, "M", "b"), - (0x1D56E, "M", "c"), - (0x1D56F, "M", "d"), - (0x1D570, "M", "e"), - (0x1D571, "M", "f"), - (0x1D572, "M", "g"), - (0x1D573, "M", "h"), - (0x1D574, "M", "i"), - (0x1D575, "M", "j"), - (0x1D576, "M", "k"), - (0x1D577, "M", "l"), - (0x1D578, "M", "m"), - (0x1D579, "M", "n"), - (0x1D57A, "M", "o"), - (0x1D57B, "M", "p"), - (0x1D57C, "M", "q"), - (0x1D57D, "M", "r"), - (0x1D57E, "M", "s"), - (0x1D57F, "M", "t"), - (0x1D580, "M", "u"), - (0x1D581, "M", "v"), - (0x1D582, "M", "w"), - (0x1D583, "M", "x"), - (0x1D584, "M", "y"), - (0x1D585, "M", "z"), - (0x1D586, "M", "a"), - (0x1D587, "M", "b"), - (0x1D588, "M", "c"), - (0x1D589, "M", "d"), - (0x1D58A, "M", "e"), - (0x1D58B, "M", "f"), - (0x1D58C, "M", "g"), - (0x1D58D, "M", "h"), - (0x1D58E, "M", "i"), - (0x1D58F, "M", "j"), - (0x1D590, "M", "k"), - (0x1D591, "M", "l"), - (0x1D592, "M", "m"), - (0x1D593, "M", "n"), - (0x1D594, "M", "o"), - (0x1D595, "M", "p"), - (0x1D596, "M", "q"), - (0x1D597, "M", "r"), - (0x1D598, "M", "s"), - (0x1D599, "M", "t"), - (0x1D59A, "M", "u"), - (0x1D59B, "M", "v"), - (0x1D59C, "M", "w"), - (0x1D59D, "M", "x"), - (0x1D59E, "M", "y"), - (0x1D59F, "M", "z"), - (0x1D5A0, "M", "a"), - (0x1D5A1, "M", "b"), - (0x1D5A2, "M", "c"), - (0x1D5A3, "M", "d"), - (0x1D5A4, "M", "e"), - (0x1D5A5, "M", "f"), - (0x1D5A6, "M", "g"), - (0x1D5A7, "M", "h"), - (0x1D5A8, "M", "i"), - (0x1D5A9, "M", "j"), - (0x1D5AA, "M", "k"), - (0x1D5AB, "M", "l"), - (0x1D5AC, "M", "m"), - (0x1D5AD, "M", "n"), - (0x1D5AE, "M", "o"), - (0x1D5AF, "M", "p"), - (0x1D5B0, "M", "q"), - (0x1D5B1, "M", "r"), - (0x1D5B2, "M", "s"), - (0x1D5B3, "M", "t"), - (0x1D5B4, "M", "u"), - (0x1D5B5, "M", "v"), - (0x1D5B6, "M", "w"), - (0x1D5B7, "M", "x"), - (0x1D5B8, "M", "y"), - (0x1D5B9, "M", "z"), - (0x1D5BA, "M", "a"), - ] - - -def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D5BB, "M", "b"), - (0x1D5BC, "M", "c"), - (0x1D5BD, "M", "d"), - (0x1D5BE, "M", "e"), - (0x1D5BF, "M", "f"), - (0x1D5C0, "M", "g"), - (0x1D5C1, "M", "h"), - (0x1D5C2, "M", "i"), - (0x1D5C3, "M", "j"), - (0x1D5C4, "M", "k"), - (0x1D5C5, "M", "l"), - (0x1D5C6, "M", "m"), - (0x1D5C7, "M", "n"), - (0x1D5C8, "M", "o"), - (0x1D5C9, "M", "p"), - (0x1D5CA, "M", "q"), - (0x1D5CB, "M", "r"), - (0x1D5CC, "M", "s"), - (0x1D5CD, "M", "t"), - (0x1D5CE, "M", "u"), - (0x1D5CF, "M", "v"), - (0x1D5D0, "M", "w"), - (0x1D5D1, "M", "x"), - (0x1D5D2, "M", "y"), - (0x1D5D3, "M", "z"), - (0x1D5D4, "M", "a"), - (0x1D5D5, "M", "b"), - (0x1D5D6, "M", "c"), - (0x1D5D7, "M", "d"), - (0x1D5D8, "M", "e"), - (0x1D5D9, "M", "f"), - (0x1D5DA, "M", "g"), - (0x1D5DB, "M", "h"), - (0x1D5DC, "M", "i"), - (0x1D5DD, "M", "j"), - (0x1D5DE, "M", "k"), - (0x1D5DF, "M", "l"), - (0x1D5E0, "M", "m"), - (0x1D5E1, "M", "n"), - (0x1D5E2, "M", "o"), - (0x1D5E3, "M", "p"), - (0x1D5E4, "M", "q"), - (0x1D5E5, "M", "r"), - (0x1D5E6, "M", "s"), - (0x1D5E7, "M", "t"), - (0x1D5E8, "M", "u"), - (0x1D5E9, "M", "v"), - (0x1D5EA, "M", "w"), - (0x1D5EB, "M", "x"), - (0x1D5EC, "M", "y"), - (0x1D5ED, "M", "z"), - (0x1D5EE, "M", "a"), - (0x1D5EF, "M", "b"), - (0x1D5F0, "M", "c"), - (0x1D5F1, "M", "d"), - (0x1D5F2, "M", "e"), - (0x1D5F3, "M", "f"), - (0x1D5F4, "M", "g"), - (0x1D5F5, "M", "h"), - (0x1D5F6, "M", "i"), - (0x1D5F7, "M", "j"), - (0x1D5F8, "M", "k"), - (0x1D5F9, "M", "l"), - (0x1D5FA, "M", "m"), - (0x1D5FB, "M", "n"), - (0x1D5FC, "M", "o"), - (0x1D5FD, "M", "p"), - (0x1D5FE, "M", "q"), - (0x1D5FF, "M", "r"), - (0x1D600, "M", "s"), - (0x1D601, "M", "t"), - (0x1D602, "M", "u"), - (0x1D603, "M", "v"), - (0x1D604, "M", "w"), - (0x1D605, "M", "x"), - (0x1D606, "M", "y"), - (0x1D607, "M", "z"), - (0x1D608, "M", "a"), - (0x1D609, "M", "b"), - (0x1D60A, "M", "c"), - (0x1D60B, "M", "d"), - (0x1D60C, "M", "e"), - (0x1D60D, "M", "f"), - (0x1D60E, "M", "g"), - (0x1D60F, "M", "h"), - (0x1D610, "M", "i"), - (0x1D611, "M", "j"), - (0x1D612, "M", "k"), - (0x1D613, "M", "l"), - (0x1D614, "M", "m"), - (0x1D615, "M", "n"), - (0x1D616, "M", "o"), - (0x1D617, "M", "p"), - (0x1D618, "M", "q"), - (0x1D619, "M", "r"), - (0x1D61A, "M", "s"), - (0x1D61B, "M", "t"), - (0x1D61C, "M", "u"), - (0x1D61D, "M", "v"), - (0x1D61E, "M", "w"), - ] - - -def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D61F, "M", "x"), - (0x1D620, "M", "y"), - (0x1D621, "M", "z"), - (0x1D622, "M", "a"), - (0x1D623, "M", "b"), - (0x1D624, "M", "c"), - (0x1D625, "M", "d"), - (0x1D626, "M", "e"), - (0x1D627, "M", "f"), - (0x1D628, "M", "g"), - (0x1D629, "M", "h"), - (0x1D62A, "M", "i"), - (0x1D62B, "M", "j"), - (0x1D62C, "M", "k"), - (0x1D62D, "M", "l"), - (0x1D62E, "M", "m"), - (0x1D62F, "M", "n"), - (0x1D630, "M", "o"), - (0x1D631, "M", "p"), - (0x1D632, "M", "q"), - (0x1D633, "M", "r"), - (0x1D634, "M", "s"), - (0x1D635, "M", "t"), - (0x1D636, "M", "u"), - (0x1D637, "M", "v"), - (0x1D638, "M", "w"), - (0x1D639, "M", "x"), - (0x1D63A, "M", "y"), - (0x1D63B, "M", "z"), - (0x1D63C, "M", "a"), - (0x1D63D, "M", "b"), - (0x1D63E, "M", "c"), - (0x1D63F, "M", "d"), - (0x1D640, "M", "e"), - (0x1D641, "M", "f"), - (0x1D642, "M", "g"), - (0x1D643, "M", "h"), - (0x1D644, "M", "i"), - (0x1D645, "M", "j"), - (0x1D646, "M", "k"), - (0x1D647, "M", "l"), - (0x1D648, "M", "m"), - (0x1D649, "M", "n"), - (0x1D64A, "M", "o"), - (0x1D64B, "M", "p"), - (0x1D64C, "M", "q"), - (0x1D64D, "M", "r"), - (0x1D64E, "M", "s"), - (0x1D64F, "M", "t"), - (0x1D650, "M", "u"), - (0x1D651, "M", "v"), - (0x1D652, "M", "w"), - (0x1D653, "M", "x"), - (0x1D654, "M", "y"), - (0x1D655, "M", "z"), - (0x1D656, "M", "a"), - (0x1D657, "M", "b"), - (0x1D658, "M", "c"), - (0x1D659, "M", "d"), - (0x1D65A, "M", "e"), - (0x1D65B, "M", "f"), - (0x1D65C, "M", "g"), - (0x1D65D, "M", "h"), - (0x1D65E, "M", "i"), - (0x1D65F, "M", "j"), - (0x1D660, "M", "k"), - (0x1D661, "M", "l"), - (0x1D662, "M", "m"), - (0x1D663, "M", "n"), - (0x1D664, "M", "o"), - (0x1D665, "M", "p"), - (0x1D666, "M", "q"), - (0x1D667, "M", "r"), - (0x1D668, "M", "s"), - (0x1D669, "M", "t"), - (0x1D66A, "M", "u"), - (0x1D66B, "M", "v"), - (0x1D66C, "M", "w"), - (0x1D66D, "M", "x"), - (0x1D66E, "M", "y"), - (0x1D66F, "M", "z"), - (0x1D670, "M", "a"), - (0x1D671, "M", "b"), - (0x1D672, "M", "c"), - (0x1D673, "M", "d"), - (0x1D674, "M", "e"), - (0x1D675, "M", "f"), - (0x1D676, "M", "g"), - (0x1D677, "M", "h"), - (0x1D678, "M", "i"), - (0x1D679, "M", "j"), - (0x1D67A, "M", "k"), - (0x1D67B, "M", "l"), - (0x1D67C, "M", "m"), - (0x1D67D, "M", "n"), - (0x1D67E, "M", "o"), - (0x1D67F, "M", "p"), - (0x1D680, "M", "q"), - (0x1D681, "M", "r"), - (0x1D682, "M", "s"), - ] - - -def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D683, "M", "t"), - (0x1D684, "M", "u"), - (0x1D685, "M", "v"), - (0x1D686, "M", "w"), - (0x1D687, "M", "x"), - (0x1D688, "M", "y"), - (0x1D689, "M", "z"), - (0x1D68A, "M", "a"), - (0x1D68B, "M", "b"), - (0x1D68C, "M", "c"), - (0x1D68D, "M", "d"), - (0x1D68E, "M", "e"), - (0x1D68F, "M", "f"), - (0x1D690, "M", "g"), - (0x1D691, "M", "h"), - (0x1D692, "M", "i"), - (0x1D693, "M", "j"), - (0x1D694, "M", "k"), - (0x1D695, "M", "l"), - (0x1D696, "M", "m"), - (0x1D697, "M", "n"), - (0x1D698, "M", "o"), - (0x1D699, "M", "p"), - (0x1D69A, "M", "q"), - (0x1D69B, "M", "r"), - (0x1D69C, "M", "s"), - (0x1D69D, "M", "t"), - (0x1D69E, "M", "u"), - (0x1D69F, "M", "v"), - (0x1D6A0, "M", "w"), - (0x1D6A1, "M", "x"), - (0x1D6A2, "M", "y"), - (0x1D6A3, "M", "z"), - (0x1D6A4, "M", "ı"), - (0x1D6A5, "M", "ȷ"), - (0x1D6A6, "X"), - (0x1D6A8, "M", "α"), - (0x1D6A9, "M", "β"), - (0x1D6AA, "M", "γ"), - (0x1D6AB, "M", "δ"), - (0x1D6AC, "M", "ε"), - (0x1D6AD, "M", "ζ"), - (0x1D6AE, "M", "η"), - (0x1D6AF, "M", "θ"), - (0x1D6B0, "M", "ι"), - (0x1D6B1, "M", "κ"), - (0x1D6B2, "M", "λ"), - (0x1D6B3, "M", "μ"), - (0x1D6B4, "M", "ν"), - (0x1D6B5, "M", "ξ"), - (0x1D6B6, "M", "ο"), - (0x1D6B7, "M", "π"), - (0x1D6B8, "M", "ρ"), - (0x1D6B9, "M", "θ"), - (0x1D6BA, "M", "σ"), - (0x1D6BB, "M", "τ"), - (0x1D6BC, "M", "υ"), - (0x1D6BD, "M", "φ"), - (0x1D6BE, "M", "χ"), - (0x1D6BF, "M", "ψ"), - (0x1D6C0, "M", "ω"), - (0x1D6C1, "M", "∇"), - (0x1D6C2, "M", "α"), - (0x1D6C3, "M", "β"), - (0x1D6C4, "M", "γ"), - (0x1D6C5, "M", "δ"), - (0x1D6C6, "M", "ε"), - (0x1D6C7, "M", "ζ"), - (0x1D6C8, "M", "η"), - (0x1D6C9, "M", "θ"), - (0x1D6CA, "M", "ι"), - (0x1D6CB, "M", "κ"), - (0x1D6CC, "M", "λ"), - (0x1D6CD, "M", "μ"), - (0x1D6CE, "M", "ν"), - (0x1D6CF, "M", "ξ"), - (0x1D6D0, "M", "ο"), - (0x1D6D1, "M", "π"), - (0x1D6D2, "M", "ρ"), - (0x1D6D3, "M", "σ"), - (0x1D6D5, "M", "τ"), - (0x1D6D6, "M", "υ"), - (0x1D6D7, "M", "φ"), - (0x1D6D8, "M", "χ"), - (0x1D6D9, "M", "ψ"), - (0x1D6DA, "M", "ω"), - (0x1D6DB, "M", "∂"), - (0x1D6DC, "M", "ε"), - (0x1D6DD, "M", "θ"), - (0x1D6DE, "M", "κ"), - (0x1D6DF, "M", "φ"), - (0x1D6E0, "M", "ρ"), - (0x1D6E1, "M", "π"), - (0x1D6E2, "M", "α"), - (0x1D6E3, "M", "β"), - (0x1D6E4, "M", "γ"), - (0x1D6E5, "M", "δ"), - (0x1D6E6, "M", "ε"), - (0x1D6E7, "M", "ζ"), - (0x1D6E8, "M", "η"), - ] - - -def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D6E9, "M", "θ"), - (0x1D6EA, "M", "ι"), - (0x1D6EB, "M", "κ"), - (0x1D6EC, "M", "λ"), - (0x1D6ED, "M", "μ"), - (0x1D6EE, "M", "ν"), - (0x1D6EF, "M", "ξ"), - (0x1D6F0, "M", "ο"), - (0x1D6F1, "M", "π"), - (0x1D6F2, "M", "ρ"), - (0x1D6F3, "M", "θ"), - (0x1D6F4, "M", "σ"), - (0x1D6F5, "M", "τ"), - (0x1D6F6, "M", "υ"), - (0x1D6F7, "M", "φ"), - (0x1D6F8, "M", "χ"), - (0x1D6F9, "M", "ψ"), - (0x1D6FA, "M", "ω"), - (0x1D6FB, "M", "∇"), - (0x1D6FC, "M", "α"), - (0x1D6FD, "M", "β"), - (0x1D6FE, "M", "γ"), - (0x1D6FF, "M", "δ"), - (0x1D700, "M", "ε"), - (0x1D701, "M", "ζ"), - (0x1D702, "M", "η"), - (0x1D703, "M", "θ"), - (0x1D704, "M", "ι"), - (0x1D705, "M", "κ"), - (0x1D706, "M", "λ"), - (0x1D707, "M", "μ"), - (0x1D708, "M", "ν"), - (0x1D709, "M", "ξ"), - (0x1D70A, "M", "ο"), - (0x1D70B, "M", "π"), - (0x1D70C, "M", "ρ"), - (0x1D70D, "M", "σ"), - (0x1D70F, "M", "τ"), - (0x1D710, "M", "υ"), - (0x1D711, "M", "φ"), - (0x1D712, "M", "χ"), - (0x1D713, "M", "ψ"), - (0x1D714, "M", "ω"), - (0x1D715, "M", "∂"), - (0x1D716, "M", "ε"), - (0x1D717, "M", "θ"), - (0x1D718, "M", "κ"), - (0x1D719, "M", "φ"), - (0x1D71A, "M", "ρ"), - (0x1D71B, "M", "π"), - (0x1D71C, "M", "α"), - (0x1D71D, "M", "β"), - (0x1D71E, "M", "γ"), - (0x1D71F, "M", "δ"), - (0x1D720, "M", "ε"), - (0x1D721, "M", "ζ"), - (0x1D722, "M", "η"), - (0x1D723, "M", "θ"), - (0x1D724, "M", "ι"), - (0x1D725, "M", "κ"), - (0x1D726, "M", "λ"), - (0x1D727, "M", "μ"), - (0x1D728, "M", "ν"), - (0x1D729, "M", "ξ"), - (0x1D72A, "M", "ο"), - (0x1D72B, "M", "π"), - (0x1D72C, "M", "ρ"), - (0x1D72D, "M", "θ"), - (0x1D72E, "M", "σ"), - (0x1D72F, "M", "τ"), - (0x1D730, "M", "υ"), - (0x1D731, "M", "φ"), - (0x1D732, "M", "χ"), - (0x1D733, "M", "ψ"), - (0x1D734, "M", "ω"), - (0x1D735, "M", "∇"), - (0x1D736, "M", "α"), - (0x1D737, "M", "β"), - (0x1D738, "M", "γ"), - (0x1D739, "M", "δ"), - (0x1D73A, "M", "ε"), - (0x1D73B, "M", "ζ"), - (0x1D73C, "M", "η"), - (0x1D73D, "M", "θ"), - (0x1D73E, "M", "ι"), - (0x1D73F, "M", "κ"), - (0x1D740, "M", "λ"), - (0x1D741, "M", "μ"), - (0x1D742, "M", "ν"), - (0x1D743, "M", "ξ"), - (0x1D744, "M", "ο"), - (0x1D745, "M", "π"), - (0x1D746, "M", "ρ"), - (0x1D747, "M", "σ"), - (0x1D749, "M", "τ"), - (0x1D74A, "M", "υ"), - (0x1D74B, "M", "φ"), - (0x1D74C, "M", "χ"), - (0x1D74D, "M", "ψ"), - (0x1D74E, "M", "ω"), - ] - - -def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D74F, "M", "∂"), - (0x1D750, "M", "ε"), - (0x1D751, "M", "θ"), - (0x1D752, "M", "κ"), - (0x1D753, "M", "φ"), - (0x1D754, "M", "ρ"), - (0x1D755, "M", "π"), - (0x1D756, "M", "α"), - (0x1D757, "M", "β"), - (0x1D758, "M", "γ"), - (0x1D759, "M", "δ"), - (0x1D75A, "M", "ε"), - (0x1D75B, "M", "ζ"), - (0x1D75C, "M", "η"), - (0x1D75D, "M", "θ"), - (0x1D75E, "M", "ι"), - (0x1D75F, "M", "κ"), - (0x1D760, "M", "λ"), - (0x1D761, "M", "μ"), - (0x1D762, "M", "ν"), - (0x1D763, "M", "ξ"), - (0x1D764, "M", "ο"), - (0x1D765, "M", "π"), - (0x1D766, "M", "ρ"), - (0x1D767, "M", "θ"), - (0x1D768, "M", "σ"), - (0x1D769, "M", "τ"), - (0x1D76A, "M", "υ"), - (0x1D76B, "M", "φ"), - (0x1D76C, "M", "χ"), - (0x1D76D, "M", "ψ"), - (0x1D76E, "M", "ω"), - (0x1D76F, "M", "∇"), - (0x1D770, "M", "α"), - (0x1D771, "M", "β"), - (0x1D772, "M", "γ"), - (0x1D773, "M", "δ"), - (0x1D774, "M", "ε"), - (0x1D775, "M", "ζ"), - (0x1D776, "M", "η"), - (0x1D777, "M", "θ"), - (0x1D778, "M", "ι"), - (0x1D779, "M", "κ"), - (0x1D77A, "M", "λ"), - (0x1D77B, "M", "μ"), - (0x1D77C, "M", "ν"), - (0x1D77D, "M", "ξ"), - (0x1D77E, "M", "ο"), - (0x1D77F, "M", "π"), - (0x1D780, "M", "ρ"), - (0x1D781, "M", "σ"), - (0x1D783, "M", "τ"), - (0x1D784, "M", "υ"), - (0x1D785, "M", "φ"), - (0x1D786, "M", "χ"), - (0x1D787, "M", "ψ"), - (0x1D788, "M", "ω"), - (0x1D789, "M", "∂"), - (0x1D78A, "M", "ε"), - (0x1D78B, "M", "θ"), - (0x1D78C, "M", "κ"), - (0x1D78D, "M", "φ"), - (0x1D78E, "M", "ρ"), - (0x1D78F, "M", "π"), - (0x1D790, "M", "α"), - (0x1D791, "M", "β"), - (0x1D792, "M", "γ"), - (0x1D793, "M", "δ"), - (0x1D794, "M", "ε"), - (0x1D795, "M", "ζ"), - (0x1D796, "M", "η"), - (0x1D797, "M", "θ"), - (0x1D798, "M", "ι"), - (0x1D799, "M", "κ"), - (0x1D79A, "M", "λ"), - (0x1D79B, "M", "μ"), - (0x1D79C, "M", "ν"), - (0x1D79D, "M", "ξ"), - (0x1D79E, "M", "ο"), - (0x1D79F, "M", "π"), - (0x1D7A0, "M", "ρ"), - (0x1D7A1, "M", "θ"), - (0x1D7A2, "M", "σ"), - (0x1D7A3, "M", "τ"), - (0x1D7A4, "M", "υ"), - (0x1D7A5, "M", "φ"), - (0x1D7A6, "M", "χ"), - (0x1D7A7, "M", "ψ"), - (0x1D7A8, "M", "ω"), - (0x1D7A9, "M", "∇"), - (0x1D7AA, "M", "α"), - (0x1D7AB, "M", "β"), - (0x1D7AC, "M", "γ"), - (0x1D7AD, "M", "δ"), - (0x1D7AE, "M", "ε"), - (0x1D7AF, "M", "ζ"), - (0x1D7B0, "M", "η"), - (0x1D7B1, "M", "θ"), - (0x1D7B2, "M", "ι"), - (0x1D7B3, "M", "κ"), - ] - - -def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D7B4, "M", "λ"), - (0x1D7B5, "M", "μ"), - (0x1D7B6, "M", "ν"), - (0x1D7B7, "M", "ξ"), - (0x1D7B8, "M", "ο"), - (0x1D7B9, "M", "π"), - (0x1D7BA, "M", "ρ"), - (0x1D7BB, "M", "σ"), - (0x1D7BD, "M", "τ"), - (0x1D7BE, "M", "υ"), - (0x1D7BF, "M", "φ"), - (0x1D7C0, "M", "χ"), - (0x1D7C1, "M", "ψ"), - (0x1D7C2, "M", "ω"), - (0x1D7C3, "M", "∂"), - (0x1D7C4, "M", "ε"), - (0x1D7C5, "M", "θ"), - (0x1D7C6, "M", "κ"), - (0x1D7C7, "M", "φ"), - (0x1D7C8, "M", "ρ"), - (0x1D7C9, "M", "π"), - (0x1D7CA, "M", "ϝ"), - (0x1D7CC, "X"), - (0x1D7CE, "M", "0"), - (0x1D7CF, "M", "1"), - (0x1D7D0, "M", "2"), - (0x1D7D1, "M", "3"), - (0x1D7D2, "M", "4"), - (0x1D7D3, "M", "5"), - (0x1D7D4, "M", "6"), - (0x1D7D5, "M", "7"), - (0x1D7D6, "M", "8"), - (0x1D7D7, "M", "9"), - (0x1D7D8, "M", "0"), - (0x1D7D9, "M", "1"), - (0x1D7DA, "M", "2"), - (0x1D7DB, "M", "3"), - (0x1D7DC, "M", "4"), - (0x1D7DD, "M", "5"), - (0x1D7DE, "M", "6"), - (0x1D7DF, "M", "7"), - (0x1D7E0, "M", "8"), - (0x1D7E1, "M", "9"), - (0x1D7E2, "M", "0"), - (0x1D7E3, "M", "1"), - (0x1D7E4, "M", "2"), - (0x1D7E5, "M", "3"), - (0x1D7E6, "M", "4"), - (0x1D7E7, "M", "5"), - (0x1D7E8, "M", "6"), - (0x1D7E9, "M", "7"), - (0x1D7EA, "M", "8"), - (0x1D7EB, "M", "9"), - (0x1D7EC, "M", "0"), - (0x1D7ED, "M", "1"), - (0x1D7EE, "M", "2"), - (0x1D7EF, "M", "3"), - (0x1D7F0, "M", "4"), - (0x1D7F1, "M", "5"), - (0x1D7F2, "M", "6"), - (0x1D7F3, "M", "7"), - (0x1D7F4, "M", "8"), - (0x1D7F5, "M", "9"), - (0x1D7F6, "M", "0"), - (0x1D7F7, "M", "1"), - (0x1D7F8, "M", "2"), - (0x1D7F9, "M", "3"), - (0x1D7FA, "M", "4"), - (0x1D7FB, "M", "5"), - (0x1D7FC, "M", "6"), - (0x1D7FD, "M", "7"), - (0x1D7FE, "M", "8"), - (0x1D7FF, "M", "9"), - (0x1D800, "V"), - (0x1DA8C, "X"), - (0x1DA9B, "V"), - (0x1DAA0, "X"), - (0x1DAA1, "V"), - (0x1DAB0, "X"), - (0x1DF00, "V"), - (0x1DF1F, "X"), - (0x1DF25, "V"), - (0x1DF2B, "X"), - (0x1E000, "V"), - (0x1E007, "X"), - (0x1E008, "V"), - (0x1E019, "X"), - (0x1E01B, "V"), - (0x1E022, "X"), - (0x1E023, "V"), - (0x1E025, "X"), - (0x1E026, "V"), - (0x1E02B, "X"), - (0x1E030, "M", "а"), - (0x1E031, "M", "б"), - (0x1E032, "M", "в"), - (0x1E033, "M", "г"), - (0x1E034, "M", "д"), - (0x1E035, "M", "е"), - (0x1E036, "M", "ж"), - ] - - -def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E037, "M", "з"), - (0x1E038, "M", "и"), - (0x1E039, "M", "к"), - (0x1E03A, "M", "л"), - (0x1E03B, "M", "м"), - (0x1E03C, "M", "о"), - (0x1E03D, "M", "п"), - (0x1E03E, "M", "р"), - (0x1E03F, "M", "с"), - (0x1E040, "M", "т"), - (0x1E041, "M", "у"), - (0x1E042, "M", "ф"), - (0x1E043, "M", "х"), - (0x1E044, "M", "ц"), - (0x1E045, "M", "ч"), - (0x1E046, "M", "ш"), - (0x1E047, "M", "ы"), - (0x1E048, "M", "э"), - (0x1E049, "M", "ю"), - (0x1E04A, "M", "ꚉ"), - (0x1E04B, "M", "ә"), - (0x1E04C, "M", "і"), - (0x1E04D, "M", "ј"), - (0x1E04E, "M", "ө"), - (0x1E04F, "M", "ү"), - (0x1E050, "M", "ӏ"), - (0x1E051, "M", "а"), - (0x1E052, "M", "б"), - (0x1E053, "M", "в"), - (0x1E054, "M", "г"), - (0x1E055, "M", "д"), - (0x1E056, "M", "е"), - (0x1E057, "M", "ж"), - (0x1E058, "M", "з"), - (0x1E059, "M", "и"), - (0x1E05A, "M", "к"), - (0x1E05B, "M", "л"), - (0x1E05C, "M", "о"), - (0x1E05D, "M", "п"), - (0x1E05E, "M", "с"), - (0x1E05F, "M", "у"), - (0x1E060, "M", "ф"), - (0x1E061, "M", "х"), - (0x1E062, "M", "ц"), - (0x1E063, "M", "ч"), - (0x1E064, "M", "ш"), - (0x1E065, "M", "ъ"), - (0x1E066, "M", "ы"), - (0x1E067, "M", "ґ"), - (0x1E068, "M", "і"), - (0x1E069, "M", "ѕ"), - (0x1E06A, "M", "џ"), - (0x1E06B, "M", "ҫ"), - (0x1E06C, "M", "ꙑ"), - (0x1E06D, "M", "ұ"), - (0x1E06E, "X"), - (0x1E08F, "V"), - (0x1E090, "X"), - (0x1E100, "V"), - (0x1E12D, "X"), - (0x1E130, "V"), - (0x1E13E, "X"), - (0x1E140, "V"), - (0x1E14A, "X"), - (0x1E14E, "V"), - (0x1E150, "X"), - (0x1E290, "V"), - (0x1E2AF, "X"), - (0x1E2C0, "V"), - (0x1E2FA, "X"), - (0x1E2FF, "V"), - (0x1E300, "X"), - (0x1E4D0, "V"), - (0x1E4FA, "X"), - (0x1E7E0, "V"), - (0x1E7E7, "X"), - (0x1E7E8, "V"), - (0x1E7EC, "X"), - (0x1E7ED, "V"), - (0x1E7EF, "X"), - (0x1E7F0, "V"), - (0x1E7FF, "X"), - (0x1E800, "V"), - (0x1E8C5, "X"), - (0x1E8C7, "V"), - (0x1E8D7, "X"), - (0x1E900, "M", "𞤢"), - (0x1E901, "M", "𞤣"), - (0x1E902, "M", "𞤤"), - (0x1E903, "M", "𞤥"), - (0x1E904, "M", "𞤦"), - (0x1E905, "M", "𞤧"), - (0x1E906, "M", "𞤨"), - (0x1E907, "M", "𞤩"), - (0x1E908, "M", "𞤪"), - (0x1E909, "M", "𞤫"), - (0x1E90A, "M", "𞤬"), - (0x1E90B, "M", "𞤭"), - (0x1E90C, "M", "𞤮"), - (0x1E90D, "M", "𞤯"), - ] - - -def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E90E, "M", "𞤰"), - (0x1E90F, "M", "𞤱"), - (0x1E910, "M", "𞤲"), - (0x1E911, "M", "𞤳"), - (0x1E912, "M", "𞤴"), - (0x1E913, "M", "𞤵"), - (0x1E914, "M", "𞤶"), - (0x1E915, "M", "𞤷"), - (0x1E916, "M", "𞤸"), - (0x1E917, "M", "𞤹"), - (0x1E918, "M", "𞤺"), - (0x1E919, "M", "𞤻"), - (0x1E91A, "M", "𞤼"), - (0x1E91B, "M", "𞤽"), - (0x1E91C, "M", "𞤾"), - (0x1E91D, "M", "𞤿"), - (0x1E91E, "M", "𞥀"), - (0x1E91F, "M", "𞥁"), - (0x1E920, "M", "𞥂"), - (0x1E921, "M", "𞥃"), - (0x1E922, "V"), - (0x1E94C, "X"), - (0x1E950, "V"), - (0x1E95A, "X"), - (0x1E95E, "V"), - (0x1E960, "X"), - (0x1EC71, "V"), - (0x1ECB5, "X"), - (0x1ED01, "V"), - (0x1ED3E, "X"), - (0x1EE00, "M", "ا"), - (0x1EE01, "M", "ب"), - (0x1EE02, "M", "ج"), - (0x1EE03, "M", "د"), - (0x1EE04, "X"), - (0x1EE05, "M", "و"), - (0x1EE06, "M", "ز"), - (0x1EE07, "M", "ح"), - (0x1EE08, "M", "ط"), - (0x1EE09, "M", "ي"), - (0x1EE0A, "M", "ك"), - (0x1EE0B, "M", "ل"), - (0x1EE0C, "M", "م"), - (0x1EE0D, "M", "ن"), - (0x1EE0E, "M", "س"), - (0x1EE0F, "M", "ع"), - (0x1EE10, "M", "ف"), - (0x1EE11, "M", "ص"), - (0x1EE12, "M", "ق"), - (0x1EE13, "M", "ر"), - (0x1EE14, "M", "ش"), - (0x1EE15, "M", "ت"), - (0x1EE16, "M", "ث"), - (0x1EE17, "M", "خ"), - (0x1EE18, "M", "ذ"), - (0x1EE19, "M", "ض"), - (0x1EE1A, "M", "ظ"), - (0x1EE1B, "M", "غ"), - (0x1EE1C, "M", "ٮ"), - (0x1EE1D, "M", "ں"), - (0x1EE1E, "M", "ڡ"), - (0x1EE1F, "M", "ٯ"), - (0x1EE20, "X"), - (0x1EE21, "M", "ب"), - (0x1EE22, "M", "ج"), - (0x1EE23, "X"), - (0x1EE24, "M", "ه"), - (0x1EE25, "X"), - (0x1EE27, "M", "ح"), - (0x1EE28, "X"), - (0x1EE29, "M", "ي"), - (0x1EE2A, "M", "ك"), - (0x1EE2B, "M", "ل"), - (0x1EE2C, "M", "م"), - (0x1EE2D, "M", "ن"), - (0x1EE2E, "M", "س"), - (0x1EE2F, "M", "ع"), - (0x1EE30, "M", "ف"), - (0x1EE31, "M", "ص"), - (0x1EE32, "M", "ق"), - (0x1EE33, "X"), - (0x1EE34, "M", "ش"), - (0x1EE35, "M", "ت"), - (0x1EE36, "M", "ث"), - (0x1EE37, "M", "خ"), - (0x1EE38, "X"), - (0x1EE39, "M", "ض"), - (0x1EE3A, "X"), - (0x1EE3B, "M", "غ"), - (0x1EE3C, "X"), - (0x1EE42, "M", "ج"), - (0x1EE43, "X"), - (0x1EE47, "M", "ح"), - (0x1EE48, "X"), - (0x1EE49, "M", "ي"), - (0x1EE4A, "X"), - (0x1EE4B, "M", "ل"), - (0x1EE4C, "X"), - (0x1EE4D, "M", "ن"), - (0x1EE4E, "M", "س"), - ] - - -def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EE4F, "M", "ع"), - (0x1EE50, "X"), - (0x1EE51, "M", "ص"), - (0x1EE52, "M", "ق"), - (0x1EE53, "X"), - (0x1EE54, "M", "ش"), - (0x1EE55, "X"), - (0x1EE57, "M", "خ"), - (0x1EE58, "X"), - (0x1EE59, "M", "ض"), - (0x1EE5A, "X"), - (0x1EE5B, "M", "غ"), - (0x1EE5C, "X"), - (0x1EE5D, "M", "ں"), - (0x1EE5E, "X"), - (0x1EE5F, "M", "ٯ"), - (0x1EE60, "X"), - (0x1EE61, "M", "ب"), - (0x1EE62, "M", "ج"), - (0x1EE63, "X"), - (0x1EE64, "M", "ه"), - (0x1EE65, "X"), - (0x1EE67, "M", "ح"), - (0x1EE68, "M", "ط"), - (0x1EE69, "M", "ي"), - (0x1EE6A, "M", "ك"), - (0x1EE6B, "X"), - (0x1EE6C, "M", "م"), - (0x1EE6D, "M", "ن"), - (0x1EE6E, "M", "س"), - (0x1EE6F, "M", "ع"), - (0x1EE70, "M", "ف"), - (0x1EE71, "M", "ص"), - (0x1EE72, "M", "ق"), - (0x1EE73, "X"), - (0x1EE74, "M", "ش"), - (0x1EE75, "M", "ت"), - (0x1EE76, "M", "ث"), - (0x1EE77, "M", "خ"), - (0x1EE78, "X"), - (0x1EE79, "M", "ض"), - (0x1EE7A, "M", "ظ"), - (0x1EE7B, "M", "غ"), - (0x1EE7C, "M", "ٮ"), - (0x1EE7D, "X"), - (0x1EE7E, "M", "ڡ"), - (0x1EE7F, "X"), - (0x1EE80, "M", "ا"), - (0x1EE81, "M", "ب"), - (0x1EE82, "M", "ج"), - (0x1EE83, "M", "د"), - (0x1EE84, "M", "ه"), - (0x1EE85, "M", "و"), - (0x1EE86, "M", "ز"), - (0x1EE87, "M", "ح"), - (0x1EE88, "M", "ط"), - (0x1EE89, "M", "ي"), - (0x1EE8A, "X"), - (0x1EE8B, "M", "ل"), - (0x1EE8C, "M", "م"), - (0x1EE8D, "M", "ن"), - (0x1EE8E, "M", "س"), - (0x1EE8F, "M", "ع"), - (0x1EE90, "M", "ف"), - (0x1EE91, "M", "ص"), - (0x1EE92, "M", "ق"), - (0x1EE93, "M", "ر"), - (0x1EE94, "M", "ش"), - (0x1EE95, "M", "ت"), - (0x1EE96, "M", "ث"), - (0x1EE97, "M", "خ"), - (0x1EE98, "M", "ذ"), - (0x1EE99, "M", "ض"), - (0x1EE9A, "M", "ظ"), - (0x1EE9B, "M", "غ"), - (0x1EE9C, "X"), - (0x1EEA1, "M", "ب"), - (0x1EEA2, "M", "ج"), - (0x1EEA3, "M", "د"), - (0x1EEA4, "X"), - (0x1EEA5, "M", "و"), - (0x1EEA6, "M", "ز"), - (0x1EEA7, "M", "ح"), - (0x1EEA8, "M", "ط"), - (0x1EEA9, "M", "ي"), - (0x1EEAA, "X"), - (0x1EEAB, "M", "ل"), - (0x1EEAC, "M", "م"), - (0x1EEAD, "M", "ن"), - (0x1EEAE, "M", "س"), - (0x1EEAF, "M", "ع"), - (0x1EEB0, "M", "ف"), - (0x1EEB1, "M", "ص"), - (0x1EEB2, "M", "ق"), - (0x1EEB3, "M", "ر"), - (0x1EEB4, "M", "ش"), - (0x1EEB5, "M", "ت"), - (0x1EEB6, "M", "ث"), - (0x1EEB7, "M", "خ"), - (0x1EEB8, "M", "ذ"), - ] - - -def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EEB9, "M", "ض"), - (0x1EEBA, "M", "ظ"), - (0x1EEBB, "M", "غ"), - (0x1EEBC, "X"), - (0x1EEF0, "V"), - (0x1EEF2, "X"), - (0x1F000, "V"), - (0x1F02C, "X"), - (0x1F030, "V"), - (0x1F094, "X"), - (0x1F0A0, "V"), - (0x1F0AF, "X"), - (0x1F0B1, "V"), - (0x1F0C0, "X"), - (0x1F0C1, "V"), - (0x1F0D0, "X"), - (0x1F0D1, "V"), - (0x1F0F6, "X"), - (0x1F101, "3", "0,"), - (0x1F102, "3", "1,"), - (0x1F103, "3", "2,"), - (0x1F104, "3", "3,"), - (0x1F105, "3", "4,"), - (0x1F106, "3", "5,"), - (0x1F107, "3", "6,"), - (0x1F108, "3", "7,"), - (0x1F109, "3", "8,"), - (0x1F10A, "3", "9,"), - (0x1F10B, "V"), - (0x1F110, "3", "(a)"), - (0x1F111, "3", "(b)"), - (0x1F112, "3", "(c)"), - (0x1F113, "3", "(d)"), - (0x1F114, "3", "(e)"), - (0x1F115, "3", "(f)"), - (0x1F116, "3", "(g)"), - (0x1F117, "3", "(h)"), - (0x1F118, "3", "(i)"), - (0x1F119, "3", "(j)"), - (0x1F11A, "3", "(k)"), - (0x1F11B, "3", "(l)"), - (0x1F11C, "3", "(m)"), - (0x1F11D, "3", "(n)"), - (0x1F11E, "3", "(o)"), - (0x1F11F, "3", "(p)"), - (0x1F120, "3", "(q)"), - (0x1F121, "3", "(r)"), - (0x1F122, "3", "(s)"), - (0x1F123, "3", "(t)"), - (0x1F124, "3", "(u)"), - (0x1F125, "3", "(v)"), - (0x1F126, "3", "(w)"), - (0x1F127, "3", "(x)"), - (0x1F128, "3", "(y)"), - (0x1F129, "3", "(z)"), - (0x1F12A, "M", "〔s〕"), - (0x1F12B, "M", "c"), - (0x1F12C, "M", "r"), - (0x1F12D, "M", "cd"), - (0x1F12E, "M", "wz"), - (0x1F12F, "V"), - (0x1F130, "M", "a"), - (0x1F131, "M", "b"), - (0x1F132, "M", "c"), - (0x1F133, "M", "d"), - (0x1F134, "M", "e"), - (0x1F135, "M", "f"), - (0x1F136, "M", "g"), - (0x1F137, "M", "h"), - (0x1F138, "M", "i"), - (0x1F139, "M", "j"), - (0x1F13A, "M", "k"), - (0x1F13B, "M", "l"), - (0x1F13C, "M", "m"), - (0x1F13D, "M", "n"), - (0x1F13E, "M", "o"), - (0x1F13F, "M", "p"), - (0x1F140, "M", "q"), - (0x1F141, "M", "r"), - (0x1F142, "M", "s"), - (0x1F143, "M", "t"), - (0x1F144, "M", "u"), - (0x1F145, "M", "v"), - (0x1F146, "M", "w"), - (0x1F147, "M", "x"), - (0x1F148, "M", "y"), - (0x1F149, "M", "z"), - (0x1F14A, "M", "hv"), - (0x1F14B, "M", "mv"), - (0x1F14C, "M", "sd"), - (0x1F14D, "M", "ss"), - (0x1F14E, "M", "ppv"), - (0x1F14F, "M", "wc"), - (0x1F150, "V"), - (0x1F16A, "M", "mc"), - (0x1F16B, "M", "md"), - (0x1F16C, "M", "mr"), - (0x1F16D, "V"), - (0x1F190, "M", "dj"), - (0x1F191, "V"), - ] - - -def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F1AE, "X"), - (0x1F1E6, "V"), - (0x1F200, "M", "ほか"), - (0x1F201, "M", "ココ"), - (0x1F202, "M", "サ"), - (0x1F203, "X"), - (0x1F210, "M", "手"), - (0x1F211, "M", "字"), - (0x1F212, "M", "双"), - (0x1F213, "M", "デ"), - (0x1F214, "M", "二"), - (0x1F215, "M", "多"), - (0x1F216, "M", "解"), - (0x1F217, "M", "天"), - (0x1F218, "M", "交"), - (0x1F219, "M", "映"), - (0x1F21A, "M", "無"), - (0x1F21B, "M", "料"), - (0x1F21C, "M", "前"), - (0x1F21D, "M", "後"), - (0x1F21E, "M", "再"), - (0x1F21F, "M", "新"), - (0x1F220, "M", "初"), - (0x1F221, "M", "終"), - (0x1F222, "M", "生"), - (0x1F223, "M", "販"), - (0x1F224, "M", "声"), - (0x1F225, "M", "吹"), - (0x1F226, "M", "演"), - (0x1F227, "M", "投"), - (0x1F228, "M", "捕"), - (0x1F229, "M", "一"), - (0x1F22A, "M", "三"), - (0x1F22B, "M", "遊"), - (0x1F22C, "M", "左"), - (0x1F22D, "M", "中"), - (0x1F22E, "M", "右"), - (0x1F22F, "M", "指"), - (0x1F230, "M", "走"), - (0x1F231, "M", "打"), - (0x1F232, "M", "禁"), - (0x1F233, "M", "空"), - (0x1F234, "M", "合"), - (0x1F235, "M", "満"), - (0x1F236, "M", "有"), - (0x1F237, "M", "月"), - (0x1F238, "M", "申"), - (0x1F239, "M", "割"), - (0x1F23A, "M", "営"), - (0x1F23B, "M", "配"), - (0x1F23C, "X"), - (0x1F240, "M", "〔本〕"), - (0x1F241, "M", "〔三〕"), - (0x1F242, "M", "〔二〕"), - (0x1F243, "M", "〔安〕"), - (0x1F244, "M", "〔点〕"), - (0x1F245, "M", "〔打〕"), - (0x1F246, "M", "〔盗〕"), - (0x1F247, "M", "〔勝〕"), - (0x1F248, "M", "〔敗〕"), - (0x1F249, "X"), - (0x1F250, "M", "得"), - (0x1F251, "M", "可"), - (0x1F252, "X"), - (0x1F260, "V"), - (0x1F266, "X"), - (0x1F300, "V"), - (0x1F6D8, "X"), - (0x1F6DC, "V"), - (0x1F6ED, "X"), - (0x1F6F0, "V"), - (0x1F6FD, "X"), - (0x1F700, "V"), - (0x1F777, "X"), - (0x1F77B, "V"), - (0x1F7DA, "X"), - (0x1F7E0, "V"), - (0x1F7EC, "X"), - (0x1F7F0, "V"), - (0x1F7F1, "X"), - (0x1F800, "V"), - (0x1F80C, "X"), - (0x1F810, "V"), - (0x1F848, "X"), - (0x1F850, "V"), - (0x1F85A, "X"), - (0x1F860, "V"), - (0x1F888, "X"), - (0x1F890, "V"), - (0x1F8AE, "X"), - (0x1F8B0, "V"), - (0x1F8B2, "X"), - (0x1F900, "V"), - (0x1FA54, "X"), - (0x1FA60, "V"), - (0x1FA6E, "X"), - (0x1FA70, "V"), - (0x1FA7D, "X"), - (0x1FA80, "V"), - (0x1FA89, "X"), - ] - - -def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1FA90, "V"), - (0x1FABE, "X"), - (0x1FABF, "V"), - (0x1FAC6, "X"), - (0x1FACE, "V"), - (0x1FADC, "X"), - (0x1FAE0, "V"), - (0x1FAE9, "X"), - (0x1FAF0, "V"), - (0x1FAF9, "X"), - (0x1FB00, "V"), - (0x1FB93, "X"), - (0x1FB94, "V"), - (0x1FBCB, "X"), - (0x1FBF0, "M", "0"), - (0x1FBF1, "M", "1"), - (0x1FBF2, "M", "2"), - (0x1FBF3, "M", "3"), - (0x1FBF4, "M", "4"), - (0x1FBF5, "M", "5"), - (0x1FBF6, "M", "6"), - (0x1FBF7, "M", "7"), - (0x1FBF8, "M", "8"), - (0x1FBF9, "M", "9"), - (0x1FBFA, "X"), - (0x20000, "V"), - (0x2A6E0, "X"), - (0x2A700, "V"), - (0x2B73A, "X"), - (0x2B740, "V"), - (0x2B81E, "X"), - (0x2B820, "V"), - (0x2CEA2, "X"), - (0x2CEB0, "V"), - (0x2EBE1, "X"), - (0x2EBF0, "V"), - (0x2EE5E, "X"), - (0x2F800, "M", "丽"), - (0x2F801, "M", "丸"), - (0x2F802, "M", "乁"), - (0x2F803, "M", "𠄢"), - (0x2F804, "M", "你"), - (0x2F805, "M", "侮"), - (0x2F806, "M", "侻"), - (0x2F807, "M", "倂"), - (0x2F808, "M", "偺"), - (0x2F809, "M", "備"), - (0x2F80A, "M", "僧"), - (0x2F80B, "M", "像"), - (0x2F80C, "M", "㒞"), - (0x2F80D, "M", "𠘺"), - (0x2F80E, "M", "免"), - (0x2F80F, "M", "兔"), - (0x2F810, "M", "兤"), - (0x2F811, "M", "具"), - (0x2F812, "M", "𠔜"), - (0x2F813, "M", "㒹"), - (0x2F814, "M", "內"), - (0x2F815, "M", "再"), - (0x2F816, "M", "𠕋"), - (0x2F817, "M", "冗"), - (0x2F818, "M", "冤"), - (0x2F819, "M", "仌"), - (0x2F81A, "M", "冬"), - (0x2F81B, "M", "况"), - (0x2F81C, "M", "𩇟"), - (0x2F81D, "M", "凵"), - (0x2F81E, "M", "刃"), - (0x2F81F, "M", "㓟"), - (0x2F820, "M", "刻"), - (0x2F821, "M", "剆"), - (0x2F822, "M", "割"), - (0x2F823, "M", "剷"), - (0x2F824, "M", "㔕"), - (0x2F825, "M", "勇"), - (0x2F826, "M", "勉"), - (0x2F827, "M", "勤"), - (0x2F828, "M", "勺"), - (0x2F829, "M", "包"), - (0x2F82A, "M", "匆"), - (0x2F82B, "M", "北"), - (0x2F82C, "M", "卉"), - (0x2F82D, "M", "卑"), - (0x2F82E, "M", "博"), - (0x2F82F, "M", "即"), - (0x2F830, "M", "卽"), - (0x2F831, "M", "卿"), - (0x2F834, "M", "𠨬"), - (0x2F835, "M", "灰"), - (0x2F836, "M", "及"), - (0x2F837, "M", "叟"), - (0x2F838, "M", "𠭣"), - (0x2F839, "M", "叫"), - (0x2F83A, "M", "叱"), - (0x2F83B, "M", "吆"), - (0x2F83C, "M", "咞"), - (0x2F83D, "M", "吸"), - (0x2F83E, "M", "呈"), - (0x2F83F, "M", "周"), - (0x2F840, "M", "咢"), - ] - - -def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F841, "M", "哶"), - (0x2F842, "M", "唐"), - (0x2F843, "M", "啓"), - (0x2F844, "M", "啣"), - (0x2F845, "M", "善"), - (0x2F847, "M", "喙"), - (0x2F848, "M", "喫"), - (0x2F849, "M", "喳"), - (0x2F84A, "M", "嗂"), - (0x2F84B, "M", "圖"), - (0x2F84C, "M", "嘆"), - (0x2F84D, "M", "圗"), - (0x2F84E, "M", "噑"), - (0x2F84F, "M", "噴"), - (0x2F850, "M", "切"), - (0x2F851, "M", "壮"), - (0x2F852, "M", "城"), - (0x2F853, "M", "埴"), - (0x2F854, "M", "堍"), - (0x2F855, "M", "型"), - (0x2F856, "M", "堲"), - (0x2F857, "M", "報"), - (0x2F858, "M", "墬"), - (0x2F859, "M", "𡓤"), - (0x2F85A, "M", "売"), - (0x2F85B, "M", "壷"), - (0x2F85C, "M", "夆"), - (0x2F85D, "M", "多"), - (0x2F85E, "M", "夢"), - (0x2F85F, "M", "奢"), - (0x2F860, "M", "𡚨"), - (0x2F861, "M", "𡛪"), - (0x2F862, "M", "姬"), - (0x2F863, "M", "娛"), - (0x2F864, "M", "娧"), - (0x2F865, "M", "姘"), - (0x2F866, "M", "婦"), - (0x2F867, "M", "㛮"), - (0x2F868, "X"), - (0x2F869, "M", "嬈"), - (0x2F86A, "M", "嬾"), - (0x2F86C, "M", "𡧈"), - (0x2F86D, "M", "寃"), - (0x2F86E, "M", "寘"), - (0x2F86F, "M", "寧"), - (0x2F870, "M", "寳"), - (0x2F871, "M", "𡬘"), - (0x2F872, "M", "寿"), - (0x2F873, "M", "将"), - (0x2F874, "X"), - (0x2F875, "M", "尢"), - (0x2F876, "M", "㞁"), - (0x2F877, "M", "屠"), - (0x2F878, "M", "屮"), - (0x2F879, "M", "峀"), - (0x2F87A, "M", "岍"), - (0x2F87B, "M", "𡷤"), - (0x2F87C, "M", "嵃"), - (0x2F87D, "M", "𡷦"), - (0x2F87E, "M", "嵮"), - (0x2F87F, "M", "嵫"), - (0x2F880, "M", "嵼"), - (0x2F881, "M", "巡"), - (0x2F882, "M", "巢"), - (0x2F883, "M", "㠯"), - (0x2F884, "M", "巽"), - (0x2F885, "M", "帨"), - (0x2F886, "M", "帽"), - (0x2F887, "M", "幩"), - (0x2F888, "M", "㡢"), - (0x2F889, "M", "𢆃"), - (0x2F88A, "M", "㡼"), - (0x2F88B, "M", "庰"), - (0x2F88C, "M", "庳"), - (0x2F88D, "M", "庶"), - (0x2F88E, "M", "廊"), - (0x2F88F, "M", "𪎒"), - (0x2F890, "M", "廾"), - (0x2F891, "M", "𢌱"), - (0x2F893, "M", "舁"), - (0x2F894, "M", "弢"), - (0x2F896, "M", "㣇"), - (0x2F897, "M", "𣊸"), - (0x2F898, "M", "𦇚"), - (0x2F899, "M", "形"), - (0x2F89A, "M", "彫"), - (0x2F89B, "M", "㣣"), - (0x2F89C, "M", "徚"), - (0x2F89D, "M", "忍"), - (0x2F89E, "M", "志"), - (0x2F89F, "M", "忹"), - (0x2F8A0, "M", "悁"), - (0x2F8A1, "M", "㤺"), - (0x2F8A2, "M", "㤜"), - (0x2F8A3, "M", "悔"), - (0x2F8A4, "M", "𢛔"), - (0x2F8A5, "M", "惇"), - (0x2F8A6, "M", "慈"), - (0x2F8A7, "M", "慌"), - (0x2F8A8, "M", "慎"), - ] - - -def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F8A9, "M", "慌"), - (0x2F8AA, "M", "慺"), - (0x2F8AB, "M", "憎"), - (0x2F8AC, "M", "憲"), - (0x2F8AD, "M", "憤"), - (0x2F8AE, "M", "憯"), - (0x2F8AF, "M", "懞"), - (0x2F8B0, "M", "懲"), - (0x2F8B1, "M", "懶"), - (0x2F8B2, "M", "成"), - (0x2F8B3, "M", "戛"), - (0x2F8B4, "M", "扝"), - (0x2F8B5, "M", "抱"), - (0x2F8B6, "M", "拔"), - (0x2F8B7, "M", "捐"), - (0x2F8B8, "M", "𢬌"), - (0x2F8B9, "M", "挽"), - (0x2F8BA, "M", "拼"), - (0x2F8BB, "M", "捨"), - (0x2F8BC, "M", "掃"), - (0x2F8BD, "M", "揤"), - (0x2F8BE, "M", "𢯱"), - (0x2F8BF, "M", "搢"), - (0x2F8C0, "M", "揅"), - (0x2F8C1, "M", "掩"), - (0x2F8C2, "M", "㨮"), - (0x2F8C3, "M", "摩"), - (0x2F8C4, "M", "摾"), - (0x2F8C5, "M", "撝"), - (0x2F8C6, "M", "摷"), - (0x2F8C7, "M", "㩬"), - (0x2F8C8, "M", "敏"), - (0x2F8C9, "M", "敬"), - (0x2F8CA, "M", "𣀊"), - (0x2F8CB, "M", "旣"), - (0x2F8CC, "M", "書"), - (0x2F8CD, "M", "晉"), - (0x2F8CE, "M", "㬙"), - (0x2F8CF, "M", "暑"), - (0x2F8D0, "M", "㬈"), - (0x2F8D1, "M", "㫤"), - (0x2F8D2, "M", "冒"), - (0x2F8D3, "M", "冕"), - (0x2F8D4, "M", "最"), - (0x2F8D5, "M", "暜"), - (0x2F8D6, "M", "肭"), - (0x2F8D7, "M", "䏙"), - (0x2F8D8, "M", "朗"), - (0x2F8D9, "M", "望"), - (0x2F8DA, "M", "朡"), - (0x2F8DB, "M", "杞"), - (0x2F8DC, "M", "杓"), - (0x2F8DD, "M", "𣏃"), - (0x2F8DE, "M", "㭉"), - (0x2F8DF, "M", "柺"), - (0x2F8E0, "M", "枅"), - (0x2F8E1, "M", "桒"), - (0x2F8E2, "M", "梅"), - (0x2F8E3, "M", "𣑭"), - (0x2F8E4, "M", "梎"), - (0x2F8E5, "M", "栟"), - (0x2F8E6, "M", "椔"), - (0x2F8E7, "M", "㮝"), - (0x2F8E8, "M", "楂"), - (0x2F8E9, "M", "榣"), - (0x2F8EA, "M", "槪"), - (0x2F8EB, "M", "檨"), - (0x2F8EC, "M", "𣚣"), - (0x2F8ED, "M", "櫛"), - (0x2F8EE, "M", "㰘"), - (0x2F8EF, "M", "次"), - (0x2F8F0, "M", "𣢧"), - (0x2F8F1, "M", "歔"), - (0x2F8F2, "M", "㱎"), - (0x2F8F3, "M", "歲"), - (0x2F8F4, "M", "殟"), - (0x2F8F5, "M", "殺"), - (0x2F8F6, "M", "殻"), - (0x2F8F7, "M", "𣪍"), - (0x2F8F8, "M", "𡴋"), - (0x2F8F9, "M", "𣫺"), - (0x2F8FA, "M", "汎"), - (0x2F8FB, "M", "𣲼"), - (0x2F8FC, "M", "沿"), - (0x2F8FD, "M", "泍"), - (0x2F8FE, "M", "汧"), - (0x2F8FF, "M", "洖"), - (0x2F900, "M", "派"), - (0x2F901, "M", "海"), - (0x2F902, "M", "流"), - (0x2F903, "M", "浩"), - (0x2F904, "M", "浸"), - (0x2F905, "M", "涅"), - (0x2F906, "M", "𣴞"), - (0x2F907, "M", "洴"), - (0x2F908, "M", "港"), - (0x2F909, "M", "湮"), - (0x2F90A, "M", "㴳"), - (0x2F90B, "M", "滋"), - (0x2F90C, "M", "滇"), - ] - - -def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F90D, "M", "𣻑"), - (0x2F90E, "M", "淹"), - (0x2F90F, "M", "潮"), - (0x2F910, "M", "𣽞"), - (0x2F911, "M", "𣾎"), - (0x2F912, "M", "濆"), - (0x2F913, "M", "瀹"), - (0x2F914, "M", "瀞"), - (0x2F915, "M", "瀛"), - (0x2F916, "M", "㶖"), - (0x2F917, "M", "灊"), - (0x2F918, "M", "災"), - (0x2F919, "M", "灷"), - (0x2F91A, "M", "炭"), - (0x2F91B, "M", "𠔥"), - (0x2F91C, "M", "煅"), - (0x2F91D, "M", "𤉣"), - (0x2F91E, "M", "熜"), - (0x2F91F, "X"), - (0x2F920, "M", "爨"), - (0x2F921, "M", "爵"), - (0x2F922, "M", "牐"), - (0x2F923, "M", "𤘈"), - (0x2F924, "M", "犀"), - (0x2F925, "M", "犕"), - (0x2F926, "M", "𤜵"), - (0x2F927, "M", "𤠔"), - (0x2F928, "M", "獺"), - (0x2F929, "M", "王"), - (0x2F92A, "M", "㺬"), - (0x2F92B, "M", "玥"), - (0x2F92C, "M", "㺸"), - (0x2F92E, "M", "瑇"), - (0x2F92F, "M", "瑜"), - (0x2F930, "M", "瑱"), - (0x2F931, "M", "璅"), - (0x2F932, "M", "瓊"), - (0x2F933, "M", "㼛"), - (0x2F934, "M", "甤"), - (0x2F935, "M", "𤰶"), - (0x2F936, "M", "甾"), - (0x2F937, "M", "𤲒"), - (0x2F938, "M", "異"), - (0x2F939, "M", "𢆟"), - (0x2F93A, "M", "瘐"), - (0x2F93B, "M", "𤾡"), - (0x2F93C, "M", "𤾸"), - (0x2F93D, "M", "𥁄"), - (0x2F93E, "M", "㿼"), - (0x2F93F, "M", "䀈"), - (0x2F940, "M", "直"), - (0x2F941, "M", "𥃳"), - (0x2F942, "M", "𥃲"), - (0x2F943, "M", "𥄙"), - (0x2F944, "M", "𥄳"), - (0x2F945, "M", "眞"), - (0x2F946, "M", "真"), - (0x2F948, "M", "睊"), - (0x2F949, "M", "䀹"), - (0x2F94A, "M", "瞋"), - (0x2F94B, "M", "䁆"), - (0x2F94C, "M", "䂖"), - (0x2F94D, "M", "𥐝"), - (0x2F94E, "M", "硎"), - (0x2F94F, "M", "碌"), - (0x2F950, "M", "磌"), - (0x2F951, "M", "䃣"), - (0x2F952, "M", "𥘦"), - (0x2F953, "M", "祖"), - (0x2F954, "M", "𥚚"), - (0x2F955, "M", "𥛅"), - (0x2F956, "M", "福"), - (0x2F957, "M", "秫"), - (0x2F958, "M", "䄯"), - (0x2F959, "M", "穀"), - (0x2F95A, "M", "穊"), - (0x2F95B, "M", "穏"), - (0x2F95C, "M", "𥥼"), - (0x2F95D, "M", "𥪧"), - (0x2F95F, "X"), - (0x2F960, "M", "䈂"), - (0x2F961, "M", "𥮫"), - (0x2F962, "M", "篆"), - (0x2F963, "M", "築"), - (0x2F964, "M", "䈧"), - (0x2F965, "M", "𥲀"), - (0x2F966, "M", "糒"), - (0x2F967, "M", "䊠"), - (0x2F968, "M", "糨"), - (0x2F969, "M", "糣"), - (0x2F96A, "M", "紀"), - (0x2F96B, "M", "𥾆"), - (0x2F96C, "M", "絣"), - (0x2F96D, "M", "䌁"), - (0x2F96E, "M", "緇"), - (0x2F96F, "M", "縂"), - (0x2F970, "M", "繅"), - (0x2F971, "M", "䌴"), - (0x2F972, "M", "𦈨"), - (0x2F973, "M", "𦉇"), - ] - - -def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F974, "M", "䍙"), - (0x2F975, "M", "𦋙"), - (0x2F976, "M", "罺"), - (0x2F977, "M", "𦌾"), - (0x2F978, "M", "羕"), - (0x2F979, "M", "翺"), - (0x2F97A, "M", "者"), - (0x2F97B, "M", "𦓚"), - (0x2F97C, "M", "𦔣"), - (0x2F97D, "M", "聠"), - (0x2F97E, "M", "𦖨"), - (0x2F97F, "M", "聰"), - (0x2F980, "M", "𣍟"), - (0x2F981, "M", "䏕"), - (0x2F982, "M", "育"), - (0x2F983, "M", "脃"), - (0x2F984, "M", "䐋"), - (0x2F985, "M", "脾"), - (0x2F986, "M", "媵"), - (0x2F987, "M", "𦞧"), - (0x2F988, "M", "𦞵"), - (0x2F989, "M", "𣎓"), - (0x2F98A, "M", "𣎜"), - (0x2F98B, "M", "舁"), - (0x2F98C, "M", "舄"), - (0x2F98D, "M", "辞"), - (0x2F98E, "M", "䑫"), - (0x2F98F, "M", "芑"), - (0x2F990, "M", "芋"), - (0x2F991, "M", "芝"), - (0x2F992, "M", "劳"), - (0x2F993, "M", "花"), - (0x2F994, "M", "芳"), - (0x2F995, "M", "芽"), - (0x2F996, "M", "苦"), - (0x2F997, "M", "𦬼"), - (0x2F998, "M", "若"), - (0x2F999, "M", "茝"), - (0x2F99A, "M", "荣"), - (0x2F99B, "M", "莭"), - (0x2F99C, "M", "茣"), - (0x2F99D, "M", "莽"), - (0x2F99E, "M", "菧"), - (0x2F99F, "M", "著"), - (0x2F9A0, "M", "荓"), - (0x2F9A1, "M", "菊"), - (0x2F9A2, "M", "菌"), - (0x2F9A3, "M", "菜"), - (0x2F9A4, "M", "𦰶"), - (0x2F9A5, "M", "𦵫"), - (0x2F9A6, "M", "𦳕"), - (0x2F9A7, "M", "䔫"), - (0x2F9A8, "M", "蓱"), - (0x2F9A9, "M", "蓳"), - (0x2F9AA, "M", "蔖"), - (0x2F9AB, "M", "𧏊"), - (0x2F9AC, "M", "蕤"), - (0x2F9AD, "M", "𦼬"), - (0x2F9AE, "M", "䕝"), - (0x2F9AF, "M", "䕡"), - (0x2F9B0, "M", "𦾱"), - (0x2F9B1, "M", "𧃒"), - (0x2F9B2, "M", "䕫"), - (0x2F9B3, "M", "虐"), - (0x2F9B4, "M", "虜"), - (0x2F9B5, "M", "虧"), - (0x2F9B6, "M", "虩"), - (0x2F9B7, "M", "蚩"), - (0x2F9B8, "M", "蚈"), - (0x2F9B9, "M", "蜎"), - (0x2F9BA, "M", "蛢"), - (0x2F9BB, "M", "蝹"), - (0x2F9BC, "M", "蜨"), - (0x2F9BD, "M", "蝫"), - (0x2F9BE, "M", "螆"), - (0x2F9BF, "X"), - (0x2F9C0, "M", "蟡"), - (0x2F9C1, "M", "蠁"), - (0x2F9C2, "M", "䗹"), - (0x2F9C3, "M", "衠"), - (0x2F9C4, "M", "衣"), - (0x2F9C5, "M", "𧙧"), - (0x2F9C6, "M", "裗"), - (0x2F9C7, "M", "裞"), - (0x2F9C8, "M", "䘵"), - (0x2F9C9, "M", "裺"), - (0x2F9CA, "M", "㒻"), - (0x2F9CB, "M", "𧢮"), - (0x2F9CC, "M", "𧥦"), - (0x2F9CD, "M", "䚾"), - (0x2F9CE, "M", "䛇"), - (0x2F9CF, "M", "誠"), - (0x2F9D0, "M", "諭"), - (0x2F9D1, "M", "變"), - (0x2F9D2, "M", "豕"), - (0x2F9D3, "M", "𧲨"), - (0x2F9D4, "M", "貫"), - (0x2F9D5, "M", "賁"), - (0x2F9D6, "M", "贛"), - (0x2F9D7, "M", "起"), - ] - - -def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F9D8, "M", "𧼯"), - (0x2F9D9, "M", "𠠄"), - (0x2F9DA, "M", "跋"), - (0x2F9DB, "M", "趼"), - (0x2F9DC, "M", "跰"), - (0x2F9DD, "M", "𠣞"), - (0x2F9DE, "M", "軔"), - (0x2F9DF, "M", "輸"), - (0x2F9E0, "M", "𨗒"), - (0x2F9E1, "M", "𨗭"), - (0x2F9E2, "M", "邔"), - (0x2F9E3, "M", "郱"), - (0x2F9E4, "M", "鄑"), - (0x2F9E5, "M", "𨜮"), - (0x2F9E6, "M", "鄛"), - (0x2F9E7, "M", "鈸"), - (0x2F9E8, "M", "鋗"), - (0x2F9E9, "M", "鋘"), - (0x2F9EA, "M", "鉼"), - (0x2F9EB, "M", "鏹"), - (0x2F9EC, "M", "鐕"), - (0x2F9ED, "M", "𨯺"), - (0x2F9EE, "M", "開"), - (0x2F9EF, "M", "䦕"), - (0x2F9F0, "M", "閷"), - (0x2F9F1, "M", "𨵷"), - (0x2F9F2, "M", "䧦"), - (0x2F9F3, "M", "雃"), - (0x2F9F4, "M", "嶲"), - (0x2F9F5, "M", "霣"), - (0x2F9F6, "M", "𩅅"), - (0x2F9F7, "M", "𩈚"), - (0x2F9F8, "M", "䩮"), - (0x2F9F9, "M", "䩶"), - (0x2F9FA, "M", "韠"), - (0x2F9FB, "M", "𩐊"), - (0x2F9FC, "M", "䪲"), - (0x2F9FD, "M", "𩒖"), - (0x2F9FE, "M", "頋"), - (0x2FA00, "M", "頩"), - (0x2FA01, "M", "𩖶"), - (0x2FA02, "M", "飢"), - (0x2FA03, "M", "䬳"), - (0x2FA04, "M", "餩"), - (0x2FA05, "M", "馧"), - (0x2FA06, "M", "駂"), - (0x2FA07, "M", "駾"), - (0x2FA08, "M", "䯎"), - (0x2FA09, "M", "𩬰"), - (0x2FA0A, "M", "鬒"), - (0x2FA0B, "M", "鱀"), - (0x2FA0C, "M", "鳽"), - (0x2FA0D, "M", "䳎"), - (0x2FA0E, "M", "䳭"), - (0x2FA0F, "M", "鵧"), - (0x2FA10, "M", "𪃎"), - (0x2FA11, "M", "䳸"), - (0x2FA12, "M", "𪄅"), - (0x2FA13, "M", "𪈎"), - (0x2FA14, "M", "𪊑"), - (0x2FA15, "M", "麻"), - (0x2FA16, "M", "䵖"), - (0x2FA17, "M", "黹"), - (0x2FA18, "M", "黾"), - (0x2FA19, "M", "鼅"), - (0x2FA1A, "M", "鼏"), - (0x2FA1B, "M", "鼖"), - (0x2FA1C, "M", "鼻"), - (0x2FA1D, "M", "𪘀"), - (0x2FA1E, "X"), - (0x30000, "V"), - (0x3134B, "X"), - (0x31350, "V"), - (0x323B0, "X"), - (0xE0100, "I"), - (0xE01F0, "X"), - ] - - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() - + _seg_73() - + _seg_74() - + _seg_75() - + _seg_76() - + _seg_77() - + _seg_78() - + _seg_79() - + _seg_80() - + _seg_81() -) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py deleted file mode 100644 index b615105..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py +++ /dev/null @@ -1,55 +0,0 @@ -# ruff: noqa: F401 -import os - -from .exceptions import * # noqa: F403 -from .ext import ExtType, Timestamp - -version = (1, 1, 0) -__version__ = "1.1.0" - - -if os.environ.get("MSGPACK_PUREPYTHON"): - from .fallback import Packer, Unpacker, unpackb -else: - try: - from ._cmsgpack import Packer, Unpacker, unpackb - except ImportError: - from .fallback import Packer, Unpacker, unpackb - - -def pack(o, stream, **kwargs): - """ - Pack object `o` and write it to `stream` - - See :class:`Packer` for options. - """ - packer = Packer(**kwargs) - stream.write(packer.pack(o)) - - -def packb(o, **kwargs): - """ - Pack object `o` and return packed bytes - - See :class:`Packer` for options. - """ - return Packer(**kwargs).pack(o) - - -def unpack(stream, **kwargs): - """ - Unpack an object from `stream`. - - Raises `ExtraData` when `stream` contains extra bytes. - See :class:`Unpacker` for options. - """ - data = stream.read() - return unpackb(data, **kwargs) - - -# alias for compatibility to simplejson/marshal/pickle. -load = unpack -loads = unpackb - -dump = pack -dumps = packb diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 26a4a35..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 4f049d3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc deleted file mode 100644 index 2259045..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc deleted file mode 100644 index 53f7e89..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py deleted file mode 100644 index d6d2615..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py +++ /dev/null @@ -1,48 +0,0 @@ -class UnpackException(Exception): - """Base class for some exceptions raised while unpacking. - - NOTE: unpack may raise exception other than subclass of - UnpackException. If you want to catch all error, catch - Exception instead. - """ - - -class BufferFull(UnpackException): - pass - - -class OutOfData(UnpackException): - pass - - -class FormatError(ValueError, UnpackException): - """Invalid msgpack format""" - - -class StackError(ValueError, UnpackException): - """Too nested""" - - -# Deprecated. Use ValueError instead -UnpackValueError = ValueError - - -class ExtraData(UnpackValueError): - """ExtraData is raised when there is trailing data. - - This exception is raised while only one-shot (not streaming) - unpack. - """ - - def __init__(self, unpacked, extra): - self.unpacked = unpacked - self.extra = extra - - def __str__(self): - return "unpack(b) received extra data." - - -# Deprecated. Use Exception instead to catch all exception during packing. -PackException = Exception -PackValueError = ValueError -PackOverflowError = OverflowError diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py deleted file mode 100644 index 9694819..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py +++ /dev/null @@ -1,170 +0,0 @@ -import datetime -import struct -from collections import namedtuple - - -class ExtType(namedtuple("ExtType", "code data")): - """ExtType represents ext type in msgpack.""" - - def __new__(cls, code, data): - if not isinstance(code, int): - raise TypeError("code must be int") - if not isinstance(data, bytes): - raise TypeError("data must be bytes") - if not 0 <= code <= 127: - raise ValueError("code must be 0~127") - return super().__new__(cls, code, data) - - -class Timestamp: - """Timestamp represents the Timestamp extension type in msgpack. - - When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`. - When using pure-Python msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and - unpack `Timestamp`. - - This class is immutable: Do not override seconds and nanoseconds. - """ - - __slots__ = ["seconds", "nanoseconds"] - - def __init__(self, seconds, nanoseconds=0): - """Initialize a Timestamp object. - - :param int seconds: - Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds). - May be negative. - - :param int nanoseconds: - Number of nanoseconds to add to `seconds` to get fractional time. - Maximum is 999_999_999. Default is 0. - - Note: Negative times (before the UNIX epoch) are represented as neg. seconds + pos. ns. - """ - if not isinstance(seconds, int): - raise TypeError("seconds must be an integer") - if not isinstance(nanoseconds, int): - raise TypeError("nanoseconds must be an integer") - if not (0 <= nanoseconds < 10**9): - raise ValueError("nanoseconds must be a non-negative integer less than 999999999.") - self.seconds = seconds - self.nanoseconds = nanoseconds - - def __repr__(self): - """String representation of Timestamp.""" - return f"Timestamp(seconds={self.seconds}, nanoseconds={self.nanoseconds})" - - def __eq__(self, other): - """Check for equality with another Timestamp object""" - if type(other) is self.__class__: - return self.seconds == other.seconds and self.nanoseconds == other.nanoseconds - return False - - def __ne__(self, other): - """not-equals method (see :func:`__eq__()`)""" - return not self.__eq__(other) - - def __hash__(self): - return hash((self.seconds, self.nanoseconds)) - - @staticmethod - def from_bytes(b): - """Unpack bytes into a `Timestamp` object. - - Used for pure-Python msgpack unpacking. - - :param b: Payload from msgpack ext message with code -1 - :type b: bytes - - :returns: Timestamp object unpacked from msgpack ext payload - :rtype: Timestamp - """ - if len(b) == 4: - seconds = struct.unpack("!L", b)[0] - nanoseconds = 0 - elif len(b) == 8: - data64 = struct.unpack("!Q", b)[0] - seconds = data64 & 0x00000003FFFFFFFF - nanoseconds = data64 >> 34 - elif len(b) == 12: - nanoseconds, seconds = struct.unpack("!Iq", b) - else: - raise ValueError( - "Timestamp type can only be created from 32, 64, or 96-bit byte objects" - ) - return Timestamp(seconds, nanoseconds) - - def to_bytes(self): - """Pack this Timestamp object into bytes. - - Used for pure-Python msgpack packing. - - :returns data: Payload for EXT message with code -1 (timestamp type) - :rtype: bytes - """ - if (self.seconds >> 34) == 0: # seconds is non-negative and fits in 34 bits - data64 = self.nanoseconds << 34 | self.seconds - if data64 & 0xFFFFFFFF00000000 == 0: - # nanoseconds is zero and seconds < 2**32, so timestamp 32 - data = struct.pack("!L", data64) - else: - # timestamp 64 - data = struct.pack("!Q", data64) - else: - # timestamp 96 - data = struct.pack("!Iq", self.nanoseconds, self.seconds) - return data - - @staticmethod - def from_unix(unix_sec): - """Create a Timestamp from posix timestamp in seconds. - - :param unix_float: Posix timestamp in seconds. - :type unix_float: int or float - """ - seconds = int(unix_sec // 1) - nanoseconds = int((unix_sec % 1) * 10**9) - return Timestamp(seconds, nanoseconds) - - def to_unix(self): - """Get the timestamp as a floating-point value. - - :returns: posix timestamp - :rtype: float - """ - return self.seconds + self.nanoseconds / 1e9 - - @staticmethod - def from_unix_nano(unix_ns): - """Create a Timestamp from posix timestamp in nanoseconds. - - :param int unix_ns: Posix timestamp in nanoseconds. - :rtype: Timestamp - """ - return Timestamp(*divmod(unix_ns, 10**9)) - - def to_unix_nano(self): - """Get the timestamp as a unixtime in nanoseconds. - - :returns: posix timestamp in nanoseconds - :rtype: int - """ - return self.seconds * 10**9 + self.nanoseconds - - def to_datetime(self): - """Get the timestamp as a UTC datetime. - - :rtype: `datetime.datetime` - """ - utc = datetime.timezone.utc - return datetime.datetime.fromtimestamp(0, utc) + datetime.timedelta( - seconds=self.seconds, microseconds=self.nanoseconds // 1000 - ) - - @staticmethod - def from_datetime(dt): - """Create a Timestamp from datetime with tzinfo. - - :rtype: Timestamp - """ - return Timestamp(seconds=int(dt.timestamp()), nanoseconds=dt.microsecond * 1000) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py b/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py deleted file mode 100644 index b02e47c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py +++ /dev/null @@ -1,929 +0,0 @@ -"""Fallback pure Python implementation of msgpack""" - -import struct -import sys -from datetime import datetime as _DateTime - -if hasattr(sys, "pypy_version_info"): - from __pypy__ import newlist_hint - from __pypy__.builders import BytesBuilder - - _USING_STRINGBUILDER = True - - class BytesIO: - def __init__(self, s=b""): - if s: - self.builder = BytesBuilder(len(s)) - self.builder.append(s) - else: - self.builder = BytesBuilder() - - def write(self, s): - if isinstance(s, memoryview): - s = s.tobytes() - elif isinstance(s, bytearray): - s = bytes(s) - self.builder.append(s) - - def getvalue(self): - return self.builder.build() - -else: - from io import BytesIO - - _USING_STRINGBUILDER = False - - def newlist_hint(size): - return [] - - -from .exceptions import BufferFull, ExtraData, FormatError, OutOfData, StackError -from .ext import ExtType, Timestamp - -EX_SKIP = 0 -EX_CONSTRUCT = 1 -EX_READ_ARRAY_HEADER = 2 -EX_READ_MAP_HEADER = 3 - -TYPE_IMMEDIATE = 0 -TYPE_ARRAY = 1 -TYPE_MAP = 2 -TYPE_RAW = 3 -TYPE_BIN = 4 -TYPE_EXT = 5 - -DEFAULT_RECURSE_LIMIT = 511 - - -def _check_type_strict(obj, t, type=type, tuple=tuple): - if type(t) is tuple: - return type(obj) in t - else: - return type(obj) is t - - -def _get_data_from_buffer(obj): - view = memoryview(obj) - if view.itemsize != 1: - raise ValueError("cannot unpack from multi-byte object") - return view - - -def unpackb(packed, **kwargs): - """ - Unpack an object from `packed`. - - Raises ``ExtraData`` when *packed* contains extra bytes. - Raises ``ValueError`` when *packed* is incomplete. - Raises ``FormatError`` when *packed* is not valid msgpack. - Raises ``StackError`` when *packed* contains too nested. - Other exceptions can be raised during unpacking. - - See :class:`Unpacker` for options. - """ - unpacker = Unpacker(None, max_buffer_size=len(packed), **kwargs) - unpacker.feed(packed) - try: - ret = unpacker._unpack() - except OutOfData: - raise ValueError("Unpack failed: incomplete input") - except RecursionError: - raise StackError - if unpacker._got_extradata(): - raise ExtraData(ret, unpacker._get_extradata()) - return ret - - -_NO_FORMAT_USED = "" -_MSGPACK_HEADERS = { - 0xC4: (1, _NO_FORMAT_USED, TYPE_BIN), - 0xC5: (2, ">H", TYPE_BIN), - 0xC6: (4, ">I", TYPE_BIN), - 0xC7: (2, "Bb", TYPE_EXT), - 0xC8: (3, ">Hb", TYPE_EXT), - 0xC9: (5, ">Ib", TYPE_EXT), - 0xCA: (4, ">f"), - 0xCB: (8, ">d"), - 0xCC: (1, _NO_FORMAT_USED), - 0xCD: (2, ">H"), - 0xCE: (4, ">I"), - 0xCF: (8, ">Q"), - 0xD0: (1, "b"), - 0xD1: (2, ">h"), - 0xD2: (4, ">i"), - 0xD3: (8, ">q"), - 0xD4: (1, "b1s", TYPE_EXT), - 0xD5: (2, "b2s", TYPE_EXT), - 0xD6: (4, "b4s", TYPE_EXT), - 0xD7: (8, "b8s", TYPE_EXT), - 0xD8: (16, "b16s", TYPE_EXT), - 0xD9: (1, _NO_FORMAT_USED, TYPE_RAW), - 0xDA: (2, ">H", TYPE_RAW), - 0xDB: (4, ">I", TYPE_RAW), - 0xDC: (2, ">H", TYPE_ARRAY), - 0xDD: (4, ">I", TYPE_ARRAY), - 0xDE: (2, ">H", TYPE_MAP), - 0xDF: (4, ">I", TYPE_MAP), -} - - -class Unpacker: - """Streaming unpacker. - - Arguments: - - :param file_like: - File-like object having `.read(n)` method. - If specified, unpacker reads serialized data from it and `.feed()` is not usable. - - :param int read_size: - Used as `file_like.read(read_size)`. (default: `min(16*1024, max_buffer_size)`) - - :param bool use_list: - If true, unpack msgpack array to Python list. - Otherwise, unpack to Python tuple. (default: True) - - :param bool raw: - If true, unpack msgpack raw to Python bytes. - Otherwise, unpack to Python str by decoding with UTF-8 encoding (default). - - :param int timestamp: - Control how timestamp type is unpacked: - - 0 - Timestamp - 1 - float (Seconds from the EPOCH) - 2 - int (Nanoseconds from the EPOCH) - 3 - datetime.datetime (UTC). - - :param bool strict_map_key: - If true (default), only str or bytes are accepted for map (dict) keys. - - :param object_hook: - When specified, it should be callable. - Unpacker calls it with a dict argument after unpacking msgpack map. - (See also simplejson) - - :param object_pairs_hook: - When specified, it should be callable. - Unpacker calls it with a list of key-value pairs after unpacking msgpack map. - (See also simplejson) - - :param str unicode_errors: - The error handler for decoding unicode. (default: 'strict') - This option should be used only when you have msgpack data which - contains invalid UTF-8 string. - - :param int max_buffer_size: - Limits size of data waiting unpacked. 0 means 2**32-1. - The default value is 100*1024*1024 (100MiB). - Raises `BufferFull` exception when it is insufficient. - You should set this parameter when unpacking data from untrusted source. - - :param int max_str_len: - Deprecated, use *max_buffer_size* instead. - Limits max length of str. (default: max_buffer_size) - - :param int max_bin_len: - Deprecated, use *max_buffer_size* instead. - Limits max length of bin. (default: max_buffer_size) - - :param int max_array_len: - Limits max length of array. - (default: max_buffer_size) - - :param int max_map_len: - Limits max length of map. - (default: max_buffer_size//2) - - :param int max_ext_len: - Deprecated, use *max_buffer_size* instead. - Limits max size of ext type. (default: max_buffer_size) - - Example of streaming deserialize from file-like object:: - - unpacker = Unpacker(file_like) - for o in unpacker: - process(o) - - Example of streaming deserialize from socket:: - - unpacker = Unpacker() - while True: - buf = sock.recv(1024**2) - if not buf: - break - unpacker.feed(buf) - for o in unpacker: - process(o) - - Raises ``ExtraData`` when *packed* contains extra bytes. - Raises ``OutOfData`` when *packed* is incomplete. - Raises ``FormatError`` when *packed* is not valid msgpack. - Raises ``StackError`` when *packed* contains too nested. - Other exceptions can be raised during unpacking. - """ - - def __init__( - self, - file_like=None, - *, - read_size=0, - use_list=True, - raw=False, - timestamp=0, - strict_map_key=True, - object_hook=None, - object_pairs_hook=None, - list_hook=None, - unicode_errors=None, - max_buffer_size=100 * 1024 * 1024, - ext_hook=ExtType, - max_str_len=-1, - max_bin_len=-1, - max_array_len=-1, - max_map_len=-1, - max_ext_len=-1, - ): - if unicode_errors is None: - unicode_errors = "strict" - - if file_like is None: - self._feeding = True - else: - if not callable(file_like.read): - raise TypeError("`file_like.read` must be callable") - self.file_like = file_like - self._feeding = False - - #: array of bytes fed. - self._buffer = bytearray() - #: Which position we currently reads - self._buff_i = 0 - - # When Unpacker is used as an iterable, between the calls to next(), - # the buffer is not "consumed" completely, for efficiency sake. - # Instead, it is done sloppily. To make sure we raise BufferFull at - # the correct moments, we have to keep track of how sloppy we were. - # Furthermore, when the buffer is incomplete (that is: in the case - # we raise an OutOfData) we need to rollback the buffer to the correct - # state, which _buf_checkpoint records. - self._buf_checkpoint = 0 - - if not max_buffer_size: - max_buffer_size = 2**31 - 1 - if max_str_len == -1: - max_str_len = max_buffer_size - if max_bin_len == -1: - max_bin_len = max_buffer_size - if max_array_len == -1: - max_array_len = max_buffer_size - if max_map_len == -1: - max_map_len = max_buffer_size // 2 - if max_ext_len == -1: - max_ext_len = max_buffer_size - - self._max_buffer_size = max_buffer_size - if read_size > self._max_buffer_size: - raise ValueError("read_size must be smaller than max_buffer_size") - self._read_size = read_size or min(self._max_buffer_size, 16 * 1024) - self._raw = bool(raw) - self._strict_map_key = bool(strict_map_key) - self._unicode_errors = unicode_errors - self._use_list = use_list - if not (0 <= timestamp <= 3): - raise ValueError("timestamp must be 0..3") - self._timestamp = timestamp - self._list_hook = list_hook - self._object_hook = object_hook - self._object_pairs_hook = object_pairs_hook - self._ext_hook = ext_hook - self._max_str_len = max_str_len - self._max_bin_len = max_bin_len - self._max_array_len = max_array_len - self._max_map_len = max_map_len - self._max_ext_len = max_ext_len - self._stream_offset = 0 - - if list_hook is not None and not callable(list_hook): - raise TypeError("`list_hook` is not callable") - if object_hook is not None and not callable(object_hook): - raise TypeError("`object_hook` is not callable") - if object_pairs_hook is not None and not callable(object_pairs_hook): - raise TypeError("`object_pairs_hook` is not callable") - if object_hook is not None and object_pairs_hook is not None: - raise TypeError("object_pairs_hook and object_hook are mutually exclusive") - if not callable(ext_hook): - raise TypeError("`ext_hook` is not callable") - - def feed(self, next_bytes): - assert self._feeding - view = _get_data_from_buffer(next_bytes) - if len(self._buffer) - self._buff_i + len(view) > self._max_buffer_size: - raise BufferFull - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[: self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - # Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython - self._buffer.extend(view) - view.release() - - def _consume(self): - """Gets rid of the used parts of the buffer.""" - self._stream_offset += self._buff_i - self._buf_checkpoint - self._buf_checkpoint = self._buff_i - - def _got_extradata(self): - return self._buff_i < len(self._buffer) - - def _get_extradata(self): - return self._buffer[self._buff_i :] - - def read_bytes(self, n): - ret = self._read(n, raise_outofdata=False) - self._consume() - return ret - - def _read(self, n, raise_outofdata=True): - # (int) -> bytearray - self._reserve(n, raise_outofdata=raise_outofdata) - i = self._buff_i - ret = self._buffer[i : i + n] - self._buff_i = i + len(ret) - return ret - - def _reserve(self, n, raise_outofdata=True): - remain_bytes = len(self._buffer) - self._buff_i - n - - # Fast path: buffer has n bytes already - if remain_bytes >= 0: - return - - if self._feeding: - self._buff_i = self._buf_checkpoint - raise OutOfData - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[: self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - # Read from file - remain_bytes = -remain_bytes - if remain_bytes + len(self._buffer) > self._max_buffer_size: - raise BufferFull - while remain_bytes > 0: - to_read_bytes = max(self._read_size, remain_bytes) - read_data = self.file_like.read(to_read_bytes) - if not read_data: - break - assert isinstance(read_data, bytes) - self._buffer += read_data - remain_bytes -= len(read_data) - - if len(self._buffer) < n + self._buff_i and raise_outofdata: - self._buff_i = 0 # rollback - raise OutOfData - - def _read_header(self): - typ = TYPE_IMMEDIATE - n = 0 - obj = None - self._reserve(1) - b = self._buffer[self._buff_i] - self._buff_i += 1 - if b & 0b10000000 == 0: - obj = b - elif b & 0b11100000 == 0b11100000: - obj = -1 - (b ^ 0xFF) - elif b & 0b11100000 == 0b10100000: - n = b & 0b00011111 - typ = TYPE_RAW - if n > self._max_str_len: - raise ValueError(f"{n} exceeds max_str_len({self._max_str_len})") - obj = self._read(n) - elif b & 0b11110000 == 0b10010000: - n = b & 0b00001111 - typ = TYPE_ARRAY - if n > self._max_array_len: - raise ValueError(f"{n} exceeds max_array_len({self._max_array_len})") - elif b & 0b11110000 == 0b10000000: - n = b & 0b00001111 - typ = TYPE_MAP - if n > self._max_map_len: - raise ValueError(f"{n} exceeds max_map_len({self._max_map_len})") - elif b == 0xC0: - obj = None - elif b == 0xC2: - obj = False - elif b == 0xC3: - obj = True - elif 0xC4 <= b <= 0xC6: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - n = struct.unpack_from(fmt, self._buffer, self._buff_i)[0] - else: - n = self._buffer[self._buff_i] - self._buff_i += size - if n > self._max_bin_len: - raise ValueError(f"{n} exceeds max_bin_len({self._max_bin_len})") - obj = self._read(n) - elif 0xC7 <= b <= 0xC9: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - L, n = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if L > self._max_ext_len: - raise ValueError(f"{L} exceeds max_ext_len({self._max_ext_len})") - obj = self._read(L) - elif 0xCA <= b <= 0xD3: - size, fmt = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - obj = struct.unpack_from(fmt, self._buffer, self._buff_i)[0] - else: - obj = self._buffer[self._buff_i] - self._buff_i += size - elif 0xD4 <= b <= 0xD8: - size, fmt, typ = _MSGPACK_HEADERS[b] - if self._max_ext_len < size: - raise ValueError(f"{size} exceeds max_ext_len({self._max_ext_len})") - self._reserve(size + 1) - n, obj = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size + 1 - elif 0xD9 <= b <= 0xDB: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - else: - n = self._buffer[self._buff_i] - self._buff_i += size - if n > self._max_str_len: - raise ValueError(f"{n} exceeds max_str_len({self._max_str_len})") - obj = self._read(n) - elif 0xDC <= b <= 0xDD: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if n > self._max_array_len: - raise ValueError(f"{n} exceeds max_array_len({self._max_array_len})") - elif 0xDE <= b <= 0xDF: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if n > self._max_map_len: - raise ValueError(f"{n} exceeds max_map_len({self._max_map_len})") - else: - raise FormatError("Unknown header: 0x%x" % b) - return typ, n, obj - - def _unpack(self, execute=EX_CONSTRUCT): - typ, n, obj = self._read_header() - - if execute == EX_READ_ARRAY_HEADER: - if typ != TYPE_ARRAY: - raise ValueError("Expected array") - return n - if execute == EX_READ_MAP_HEADER: - if typ != TYPE_MAP: - raise ValueError("Expected map") - return n - # TODO should we eliminate the recursion? - if typ == TYPE_ARRAY: - if execute == EX_SKIP: - for i in range(n): - # TODO check whether we need to call `list_hook` - self._unpack(EX_SKIP) - return - ret = newlist_hint(n) - for i in range(n): - ret.append(self._unpack(EX_CONSTRUCT)) - if self._list_hook is not None: - ret = self._list_hook(ret) - # TODO is the interaction between `list_hook` and `use_list` ok? - return ret if self._use_list else tuple(ret) - if typ == TYPE_MAP: - if execute == EX_SKIP: - for i in range(n): - # TODO check whether we need to call hooks - self._unpack(EX_SKIP) - self._unpack(EX_SKIP) - return - if self._object_pairs_hook is not None: - ret = self._object_pairs_hook( - (self._unpack(EX_CONSTRUCT), self._unpack(EX_CONSTRUCT)) for _ in range(n) - ) - else: - ret = {} - for _ in range(n): - key = self._unpack(EX_CONSTRUCT) - if self._strict_map_key and type(key) not in (str, bytes): - raise ValueError("%s is not allowed for map key" % str(type(key))) - if isinstance(key, str): - key = sys.intern(key) - ret[key] = self._unpack(EX_CONSTRUCT) - if self._object_hook is not None: - ret = self._object_hook(ret) - return ret - if execute == EX_SKIP: - return - if typ == TYPE_RAW: - if self._raw: - obj = bytes(obj) - else: - obj = obj.decode("utf_8", self._unicode_errors) - return obj - if typ == TYPE_BIN: - return bytes(obj) - if typ == TYPE_EXT: - if n == -1: # timestamp - ts = Timestamp.from_bytes(bytes(obj)) - if self._timestamp == 1: - return ts.to_unix() - elif self._timestamp == 2: - return ts.to_unix_nano() - elif self._timestamp == 3: - return ts.to_datetime() - else: - return ts - else: - return self._ext_hook(n, bytes(obj)) - assert typ == TYPE_IMMEDIATE - return obj - - def __iter__(self): - return self - - def __next__(self): - try: - ret = self._unpack(EX_CONSTRUCT) - self._consume() - return ret - except OutOfData: - self._consume() - raise StopIteration - except RecursionError: - raise StackError - - next = __next__ - - def skip(self): - self._unpack(EX_SKIP) - self._consume() - - def unpack(self): - try: - ret = self._unpack(EX_CONSTRUCT) - except RecursionError: - raise StackError - self._consume() - return ret - - def read_array_header(self): - ret = self._unpack(EX_READ_ARRAY_HEADER) - self._consume() - return ret - - def read_map_header(self): - ret = self._unpack(EX_READ_MAP_HEADER) - self._consume() - return ret - - def tell(self): - return self._stream_offset - - -class Packer: - """ - MessagePack Packer - - Usage:: - - packer = Packer() - astream.write(packer.pack(a)) - astream.write(packer.pack(b)) - - Packer's constructor has some keyword arguments: - - :param default: - When specified, it should be callable. - Convert user type to builtin type that Packer supports. - See also simplejson's document. - - :param bool use_single_float: - Use single precision float type for float. (default: False) - - :param bool autoreset: - Reset buffer after each pack and return its content as `bytes`. (default: True). - If set this to false, use `bytes()` to get content and `.reset()` to clear buffer. - - :param bool use_bin_type: - Use bin type introduced in msgpack spec 2.0 for bytes. - It also enables str8 type for unicode. (default: True) - - :param bool strict_types: - If set to true, types will be checked to be exact. Derived classes - from serializable types will not be serialized and will be - treated as unsupported type and forwarded to default. - Additionally tuples will not be serialized as lists. - This is useful when trying to implement accurate serialization - for python types. - - :param bool datetime: - If set to true, datetime with tzinfo is packed into Timestamp type. - Note that the tzinfo is stripped in the timestamp. - You can get UTC datetime with `timestamp=3` option of the Unpacker. - - :param str unicode_errors: - The error handler for encoding unicode. (default: 'strict') - DO NOT USE THIS!! This option is kept for very specific usage. - - :param int buf_size: - Internal buffer size. This option is used only for C implementation. - """ - - def __init__( - self, - *, - default=None, - use_single_float=False, - autoreset=True, - use_bin_type=True, - strict_types=False, - datetime=False, - unicode_errors=None, - buf_size=None, - ): - self._strict_types = strict_types - self._use_float = use_single_float - self._autoreset = autoreset - self._use_bin_type = use_bin_type - self._buffer = BytesIO() - self._datetime = bool(datetime) - self._unicode_errors = unicode_errors or "strict" - if default is not None and not callable(default): - raise TypeError("default must be callable") - self._default = default - - def _pack( - self, - obj, - nest_limit=DEFAULT_RECURSE_LIMIT, - check=isinstance, - check_type_strict=_check_type_strict, - ): - default_used = False - if self._strict_types: - check = check_type_strict - list_types = list - else: - list_types = (list, tuple) - while True: - if nest_limit < 0: - raise ValueError("recursion limit exceeded") - if obj is None: - return self._buffer.write(b"\xc0") - if check(obj, bool): - if obj: - return self._buffer.write(b"\xc3") - return self._buffer.write(b"\xc2") - if check(obj, int): - if 0 <= obj < 0x80: - return self._buffer.write(struct.pack("B", obj)) - if -0x20 <= obj < 0: - return self._buffer.write(struct.pack("b", obj)) - if 0x80 <= obj <= 0xFF: - return self._buffer.write(struct.pack("BB", 0xCC, obj)) - if -0x80 <= obj < 0: - return self._buffer.write(struct.pack(">Bb", 0xD0, obj)) - if 0xFF < obj <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xCD, obj)) - if -0x8000 <= obj < -0x80: - return self._buffer.write(struct.pack(">Bh", 0xD1, obj)) - if 0xFFFF < obj <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xCE, obj)) - if -0x80000000 <= obj < -0x8000: - return self._buffer.write(struct.pack(">Bi", 0xD2, obj)) - if 0xFFFFFFFF < obj <= 0xFFFFFFFFFFFFFFFF: - return self._buffer.write(struct.pack(">BQ", 0xCF, obj)) - if -0x8000000000000000 <= obj < -0x80000000: - return self._buffer.write(struct.pack(">Bq", 0xD3, obj)) - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = True - continue - raise OverflowError("Integer value out of range") - if check(obj, (bytes, bytearray)): - n = len(obj) - if n >= 2**32: - raise ValueError("%s is too large" % type(obj).__name__) - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, str): - obj = obj.encode("utf-8", self._unicode_errors) - n = len(obj) - if n >= 2**32: - raise ValueError("String is too large") - self._pack_raw_header(n) - return self._buffer.write(obj) - if check(obj, memoryview): - n = obj.nbytes - if n >= 2**32: - raise ValueError("Memoryview is too large") - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, float): - if self._use_float: - return self._buffer.write(struct.pack(">Bf", 0xCA, obj)) - return self._buffer.write(struct.pack(">Bd", 0xCB, obj)) - if check(obj, (ExtType, Timestamp)): - if check(obj, Timestamp): - code = -1 - data = obj.to_bytes() - else: - code = obj.code - data = obj.data - assert isinstance(code, int) - assert isinstance(data, bytes) - L = len(data) - if L == 1: - self._buffer.write(b"\xd4") - elif L == 2: - self._buffer.write(b"\xd5") - elif L == 4: - self._buffer.write(b"\xd6") - elif L == 8: - self._buffer.write(b"\xd7") - elif L == 16: - self._buffer.write(b"\xd8") - elif L <= 0xFF: - self._buffer.write(struct.pack(">BB", 0xC7, L)) - elif L <= 0xFFFF: - self._buffer.write(struct.pack(">BH", 0xC8, L)) - else: - self._buffer.write(struct.pack(">BI", 0xC9, L)) - self._buffer.write(struct.pack("b", code)) - self._buffer.write(data) - return - if check(obj, list_types): - n = len(obj) - self._pack_array_header(n) - for i in range(n): - self._pack(obj[i], nest_limit - 1) - return - if check(obj, dict): - return self._pack_map_pairs(len(obj), obj.items(), nest_limit - 1) - - if self._datetime and check(obj, _DateTime) and obj.tzinfo is not None: - obj = Timestamp.from_datetime(obj) - default_used = 1 - continue - - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = 1 - continue - - if self._datetime and check(obj, _DateTime): - raise ValueError(f"Cannot serialize {obj!r} where tzinfo=None") - - raise TypeError(f"Cannot serialize {obj!r}") - - def pack(self, obj): - try: - self._pack(obj) - except: - self._buffer = BytesIO() # force reset - raise - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_map_pairs(self, pairs): - self._pack_map_pairs(len(pairs), pairs) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_array_header(self, n): - if n >= 2**32: - raise ValueError - self._pack_array_header(n) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_map_header(self, n): - if n >= 2**32: - raise ValueError - self._pack_map_header(n) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_ext_type(self, typecode, data): - if not isinstance(typecode, int): - raise TypeError("typecode must have int type.") - if not 0 <= typecode <= 127: - raise ValueError("typecode should be 0-127") - if not isinstance(data, bytes): - raise TypeError("data must have bytes type") - L = len(data) - if L > 0xFFFFFFFF: - raise ValueError("Too large data") - if L == 1: - self._buffer.write(b"\xd4") - elif L == 2: - self._buffer.write(b"\xd5") - elif L == 4: - self._buffer.write(b"\xd6") - elif L == 8: - self._buffer.write(b"\xd7") - elif L == 16: - self._buffer.write(b"\xd8") - elif L <= 0xFF: - self._buffer.write(b"\xc7" + struct.pack("B", L)) - elif L <= 0xFFFF: - self._buffer.write(b"\xc8" + struct.pack(">H", L)) - else: - self._buffer.write(b"\xc9" + struct.pack(">I", L)) - self._buffer.write(struct.pack("B", typecode)) - self._buffer.write(data) - - def _pack_array_header(self, n): - if n <= 0x0F: - return self._buffer.write(struct.pack("B", 0x90 + n)) - if n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xDC, n)) - if n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xDD, n)) - raise ValueError("Array is too large") - - def _pack_map_header(self, n): - if n <= 0x0F: - return self._buffer.write(struct.pack("B", 0x80 + n)) - if n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xDE, n)) - if n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xDF, n)) - raise ValueError("Dict is too large") - - def _pack_map_pairs(self, n, pairs, nest_limit=DEFAULT_RECURSE_LIMIT): - self._pack_map_header(n) - for k, v in pairs: - self._pack(k, nest_limit - 1) - self._pack(v, nest_limit - 1) - - def _pack_raw_header(self, n): - if n <= 0x1F: - self._buffer.write(struct.pack("B", 0xA0 + n)) - elif self._use_bin_type and n <= 0xFF: - self._buffer.write(struct.pack(">BB", 0xD9, n)) - elif n <= 0xFFFF: - self._buffer.write(struct.pack(">BH", 0xDA, n)) - elif n <= 0xFFFFFFFF: - self._buffer.write(struct.pack(">BI", 0xDB, n)) - else: - raise ValueError("Raw is too large") - - def _pack_bin_header(self, n): - if not self._use_bin_type: - return self._pack_raw_header(n) - elif n <= 0xFF: - return self._buffer.write(struct.pack(">BB", 0xC4, n)) - elif n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xC5, n)) - elif n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xC6, n)) - else: - raise ValueError("Bin is too large") - - def bytes(self): - """Return internal buffer contents as bytes object""" - return self._buffer.getvalue() - - def reset(self): - """Reset internal buffer. - - This method is useful only when autoreset=False. - """ - self._buffer = BytesIO() - - def getbuffer(self): - """Return view of internal buffer.""" - if _USING_STRINGBUILDER: - return memoryview(self.bytes()) - else: - return self._buffer.getbuffer() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py deleted file mode 100644 index d79f73c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -__title__ = "packaging" -__summary__ = "Core utilities for Python packages" -__uri__ = "https://github.com/pypa/packaging" - -__version__ = "24.2" - -__author__ = "Donald Stufft and individual contributors" -__email__ = "donald@stufft.io" - -__license__ = "BSD-2-Clause or Apache-2.0" -__copyright__ = f"2014 {__author__}" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 61620ba..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc deleted file mode 100644 index 8615209..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc deleted file mode 100644 index 62845f8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc deleted file mode 100644 index bfc2b9c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc deleted file mode 100644 index c75e4b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc deleted file mode 100644 index 325c42d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc deleted file mode 100644 index a50ec06..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc deleted file mode 100644 index afa2276..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc deleted file mode 100644 index ff71a2a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc deleted file mode 100644 index 9608c0c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc deleted file mode 100644 index 359866c..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc deleted file mode 100644 index 84f776b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 7f3a670..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc deleted file mode 100644 index 9132fb8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py deleted file mode 100644 index 25f4282..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -ELF file parser. - -This provides a class ``ELFFile`` that parses an ELF executable in a similar -interface to ``ZipFile``. Only the read interface is implemented. - -Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca -ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html -""" - -from __future__ import annotations - -import enum -import os -import struct -from typing import IO - - -class ELFInvalid(ValueError): - pass - - -class EIClass(enum.IntEnum): - C32 = 1 - C64 = 2 - - -class EIData(enum.IntEnum): - Lsb = 1 - Msb = 2 - - -class EMachine(enum.IntEnum): - I386 = 3 - S390 = 22 - Arm = 40 - X8664 = 62 - AArc64 = 183 - - -class ELFFile: - """ - Representation of an ELF executable. - """ - - def __init__(self, f: IO[bytes]) -> None: - self._f = f - - try: - ident = self._read("16B") - except struct.error as e: - raise ELFInvalid("unable to parse identification") from e - magic = bytes(ident[:4]) - if magic != b"\x7fELF": - raise ELFInvalid(f"invalid magic: {magic!r}") - - self.capacity = ident[4] # Format for program header (bitness). - self.encoding = ident[5] # Data structure encoding (endianness). - - try: - # e_fmt: Format for program header. - # p_fmt: Format for section header. - # p_idx: Indexes to find p_type, p_offset, and p_filesz. - e_fmt, self._p_fmt, self._p_idx = { - (1, 1): ("HHIIIIIHHH", ">IIIIIIII", (0, 1, 4)), # 32-bit MSB. - (2, 1): ("HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB. - }[(self.capacity, self.encoding)] - except KeyError as e: - raise ELFInvalid( - f"unrecognized capacity ({self.capacity}) or " - f"encoding ({self.encoding})" - ) from e - - try: - ( - _, - self.machine, # Architecture type. - _, - _, - self._e_phoff, # Offset of program header. - _, - self.flags, # Processor-specific flags. - _, - self._e_phentsize, # Size of section. - self._e_phnum, # Number of sections. - ) = self._read(e_fmt) - except struct.error as e: - raise ELFInvalid("unable to parse machine and section information") from e - - def _read(self, fmt: str) -> tuple[int, ...]: - return struct.unpack(fmt, self._f.read(struct.calcsize(fmt))) - - @property - def interpreter(self) -> str | None: - """ - The path recorded in the ``PT_INTERP`` section header. - """ - for index in range(self._e_phnum): - self._f.seek(self._e_phoff + self._e_phentsize * index) - try: - data = self._read(self._p_fmt) - except struct.error: - continue - if data[self._p_idx[0]] != 3: # Not PT_INTERP. - continue - self._f.seek(data[self._p_idx[1]]) - return os.fsdecode(self._f.read(data[self._p_idx[2]])).strip("\0") - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py deleted file mode 100644 index 61339a6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py +++ /dev/null @@ -1,263 +0,0 @@ -from __future__ import annotations - -import collections -import contextlib -import functools -import os -import re -import sys -import warnings -from typing import Generator, Iterator, NamedTuple, Sequence - -from ._elffile import EIClass, EIData, ELFFile, EMachine - -EF_ARM_ABIMASK = 0xFF000000 -EF_ARM_ABI_VER5 = 0x05000000 -EF_ARM_ABI_FLOAT_HARD = 0x00000400 - - -# `os.PathLike` not a generic type until Python 3.9, so sticking with `str` -# as the type for `path` until then. -@contextlib.contextmanager -def _parse_elf(path: str) -> Generator[ELFFile | None, None, None]: - try: - with open(path, "rb") as f: - yield ELFFile(f) - except (OSError, TypeError, ValueError): - yield None - - -def _is_linux_armhf(executable: str) -> bool: - # hard-float ABI can be detected from the ELF header of the running - # process - # https://static.docs.arm.com/ihi0044/g/aaelf32.pdf - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.Arm - and f.flags & EF_ARM_ABIMASK == EF_ARM_ABI_VER5 - and f.flags & EF_ARM_ABI_FLOAT_HARD == EF_ARM_ABI_FLOAT_HARD - ) - - -def _is_linux_i686(executable: str) -> bool: - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.I386 - ) - - -def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool: - if "armv7l" in archs: - return _is_linux_armhf(executable) - if "i686" in archs: - return _is_linux_i686(executable) - allowed_archs = { - "x86_64", - "aarch64", - "ppc64", - "ppc64le", - "s390x", - "loongarch64", - "riscv64", - } - return any(arch in allowed_archs for arch in archs) - - -# If glibc ever changes its major version, we need to know what the last -# minor version was, so we can build the complete list of all versions. -# For now, guess what the highest minor version might be, assume it will -# be 50 for testing. Once this actually happens, update the dictionary -# with the actual value. -_LAST_GLIBC_MINOR: dict[int, int] = collections.defaultdict(lambda: 50) - - -class _GLibCVersion(NamedTuple): - major: int - minor: int - - -def _glibc_version_string_confstr() -> str | None: - """ - Primary implementation of glibc_version_string using os.confstr. - """ - # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely - # to be broken or missing. This strategy is used in the standard library - # platform module. - # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 - try: - # Should be a string like "glibc 2.17". - version_string: str | None = os.confstr("CS_GNU_LIBC_VERSION") - assert version_string is not None - _, version = version_string.rsplit() - except (AssertionError, AttributeError, OSError, ValueError): - # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... - return None - return version - - -def _glibc_version_string_ctypes() -> str | None: - """ - Fallback implementation of glibc_version_string using ctypes. - """ - try: - import ctypes - except ImportError: - return None - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - # - # We must also handle the special case where the executable is not a - # dynamically linked executable. This can occur when using musl libc, - # for example. In this situation, dlopen() will error, leading to an - # OSError. Interestingly, at least in the case of musl, there is no - # errno set on the OSError. The single string argument used to construct - # OSError comes from libc itself and is therefore not portable to - # hard code here. In any case, failure to call dlopen() means we - # can proceed, so we bail on our attempt. - try: - process_namespace = ctypes.CDLL(None) - except OSError: - return None - - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str: str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -def _glibc_version_string() -> str | None: - """Returns glibc version string, or None if not using glibc.""" - return _glibc_version_string_confstr() or _glibc_version_string_ctypes() - - -def _parse_glibc_version(version_str: str) -> tuple[int, int]: - """Parse glibc version. - - We use a regexp instead of str.split because we want to discard any - random junk that might come after the minor version -- this might happen - in patched/forked versions of glibc (e.g. Linaro's version of glibc - uses version strings like "2.20-2014.11"). See gh-3588. - """ - m = re.match(r"(?P[0-9]+)\.(?P[0-9]+)", version_str) - if not m: - warnings.warn( - f"Expected glibc version with 2 components major.minor," - f" got: {version_str}", - RuntimeWarning, - stacklevel=2, - ) - return -1, -1 - return int(m.group("major")), int(m.group("minor")) - - -@functools.lru_cache -def _get_glibc_version() -> tuple[int, int]: - version_str = _glibc_version_string() - if version_str is None: - return (-1, -1) - return _parse_glibc_version(version_str) - - -# From PEP 513, PEP 600 -def _is_compatible(arch: str, version: _GLibCVersion) -> bool: - sys_glibc = _get_glibc_version() - if sys_glibc < version: - return False - # Check for presence of _manylinux module. - try: - import _manylinux - except ImportError: - return True - if hasattr(_manylinux, "manylinux_compatible"): - result = _manylinux.manylinux_compatible(version[0], version[1], arch) - if result is not None: - return bool(result) - return True - if version == _GLibCVersion(2, 5): - if hasattr(_manylinux, "manylinux1_compatible"): - return bool(_manylinux.manylinux1_compatible) - if version == _GLibCVersion(2, 12): - if hasattr(_manylinux, "manylinux2010_compatible"): - return bool(_manylinux.manylinux2010_compatible) - if version == _GLibCVersion(2, 17): - if hasattr(_manylinux, "manylinux2014_compatible"): - return bool(_manylinux.manylinux2014_compatible) - return True - - -_LEGACY_MANYLINUX_MAP = { - # CentOS 7 w/ glibc 2.17 (PEP 599) - (2, 17): "manylinux2014", - # CentOS 6 w/ glibc 2.12 (PEP 571) - (2, 12): "manylinux2010", - # CentOS 5 w/ glibc 2.5 (PEP 513) - (2, 5): "manylinux1", -} - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate manylinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be manylinux-compatible. - - :returns: An iterator of compatible manylinux tags. - """ - if not _have_compatible_abi(sys.executable, archs): - return - # Oldest glibc to be supported regardless of architecture is (2, 17). - too_old_glibc2 = _GLibCVersion(2, 16) - if set(archs) & {"x86_64", "i686"}: - # On x86/i686 also oldest glibc to be supported is (2, 5). - too_old_glibc2 = _GLibCVersion(2, 4) - current_glibc = _GLibCVersion(*_get_glibc_version()) - glibc_max_list = [current_glibc] - # We can assume compatibility across glibc major versions. - # https://sourceware.org/bugzilla/show_bug.cgi?id=24636 - # - # Build a list of maximum glibc versions so that we can - # output the canonical list of all glibc from current_glibc - # down to too_old_glibc2, including all intermediary versions. - for glibc_major in range(current_glibc.major - 1, 1, -1): - glibc_minor = _LAST_GLIBC_MINOR[glibc_major] - glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) - for arch in archs: - for glibc_max in glibc_max_list: - if glibc_max.major == too_old_glibc2.major: - min_minor = too_old_glibc2.minor - else: - # For other glibc major versions oldest supported is (x, 0). - min_minor = -1 - for glibc_minor in range(glibc_max.minor, min_minor, -1): - glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) - tag = "manylinux_{}_{}".format(*glibc_version) - if _is_compatible(arch, glibc_version): - yield f"{tag}_{arch}" - # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. - if glibc_version in _LEGACY_MANYLINUX_MAP: - legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] - if _is_compatible(arch, glibc_version): - yield f"{legacy_tag}_{arch}" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py deleted file mode 100644 index d2bf30b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py +++ /dev/null @@ -1,85 +0,0 @@ -"""PEP 656 support. - -This module implements logic to detect if the currently running Python is -linked against musl, and what musl version is used. -""" - -from __future__ import annotations - -import functools -import re -import subprocess -import sys -from typing import Iterator, NamedTuple, Sequence - -from ._elffile import ELFFile - - -class _MuslVersion(NamedTuple): - major: int - minor: int - - -def _parse_musl_version(output: str) -> _MuslVersion | None: - lines = [n for n in (n.strip() for n in output.splitlines()) if n] - if len(lines) < 2 or lines[0][:4] != "musl": - return None - m = re.match(r"Version (\d+)\.(\d+)", lines[1]) - if not m: - return None - return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2))) - - -@functools.lru_cache -def _get_musl_version(executable: str) -> _MuslVersion | None: - """Detect currently-running musl runtime version. - - This is done by checking the specified executable's dynamic linking - information, and invoking the loader to parse its output for a version - string. If the loader is musl, the output would be something like:: - - musl libc (x86_64) - Version 1.2.2 - Dynamic Program Loader - """ - try: - with open(executable, "rb") as f: - ld = ELFFile(f).interpreter - except (OSError, TypeError, ValueError): - return None - if ld is None or "musl" not in ld: - return None - proc = subprocess.run([ld], stderr=subprocess.PIPE, text=True) - return _parse_musl_version(proc.stderr) - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate musllinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be musllinux-compatible. - - :returns: An iterator of compatible musllinux tags. - """ - sys_musl = _get_musl_version(sys.executable) - if sys_musl is None: # Python not dynamically linked against musl. - return - for arch in archs: - for minor in range(sys_musl.minor, -1, -1): - yield f"musllinux_{sys_musl.major}_{minor}_{arch}" - - -if __name__ == "__main__": # pragma: no cover - import sysconfig - - plat = sysconfig.get_platform() - assert plat.startswith("linux-"), "not linux" - - print("plat:", plat) - print("musl:", _get_musl_version(sys.executable)) - print("tags:", end=" ") - for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])): - print(t, end="\n ") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py deleted file mode 100644 index c1238c0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py +++ /dev/null @@ -1,354 +0,0 @@ -"""Handwritten parser of dependency specifiers. - -The docstring for each __parse_* function contains EBNF-inspired grammar representing -the implementation. -""" - -from __future__ import annotations - -import ast -from typing import NamedTuple, Sequence, Tuple, Union - -from ._tokenizer import DEFAULT_RULES, Tokenizer - - -class Node: - def __init__(self, value: str) -> None: - self.value = value - - def __str__(self) -> str: - return self.value - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}('{self}')>" - - def serialize(self) -> str: - raise NotImplementedError - - -class Variable(Node): - def serialize(self) -> str: - return str(self) - - -class Value(Node): - def serialize(self) -> str: - return f'"{self}"' - - -class Op(Node): - def serialize(self) -> str: - return str(self) - - -MarkerVar = Union[Variable, Value] -MarkerItem = Tuple[MarkerVar, Op, MarkerVar] -MarkerAtom = Union[MarkerItem, Sequence["MarkerAtom"]] -MarkerList = Sequence[Union["MarkerList", MarkerAtom, str]] - - -class ParsedRequirement(NamedTuple): - name: str - url: str - extras: list[str] - specifier: str - marker: MarkerList | None - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for dependency specifier -# -------------------------------------------------------------------------------------- -def parse_requirement(source: str) -> ParsedRequirement: - return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement: - """ - requirement = WS? IDENTIFIER WS? extras WS? requirement_details - """ - tokenizer.consume("WS") - - name_token = tokenizer.expect( - "IDENTIFIER", expected="package name at the start of dependency specifier" - ) - name = name_token.text - tokenizer.consume("WS") - - extras = _parse_extras(tokenizer) - tokenizer.consume("WS") - - url, specifier, marker = _parse_requirement_details(tokenizer) - tokenizer.expect("END", expected="end of dependency specifier") - - return ParsedRequirement(name, url, extras, specifier, marker) - - -def _parse_requirement_details( - tokenizer: Tokenizer, -) -> tuple[str, str, MarkerList | None]: - """ - requirement_details = AT URL (WS requirement_marker?)? - | specifier WS? (requirement_marker)? - """ - - specifier = "" - url = "" - marker = None - - if tokenizer.check("AT"): - tokenizer.read() - tokenizer.consume("WS") - - url_start = tokenizer.position - url = tokenizer.expect("URL", expected="URL after @").text - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - tokenizer.expect("WS", expected="whitespace after URL") - - # The input might end after whitespace. - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, span_start=url_start, after="URL and whitespace" - ) - else: - specifier_start = tokenizer.position - specifier = _parse_specifier(tokenizer) - tokenizer.consume("WS") - - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, - span_start=specifier_start, - after=( - "version specifier" - if specifier - else "name and no valid version specifier" - ), - ) - - return (url, specifier, marker) - - -def _parse_requirement_marker( - tokenizer: Tokenizer, *, span_start: int, after: str -) -> MarkerList: - """ - requirement_marker = SEMICOLON marker WS? - """ - - if not tokenizer.check("SEMICOLON"): - tokenizer.raise_syntax_error( - f"Expected end or semicolon (after {after})", - span_start=span_start, - ) - tokenizer.read() - - marker = _parse_marker(tokenizer) - tokenizer.consume("WS") - - return marker - - -def _parse_extras(tokenizer: Tokenizer) -> list[str]: - """ - extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? - """ - if not tokenizer.check("LEFT_BRACKET", peek=True): - return [] - - with tokenizer.enclosing_tokens( - "LEFT_BRACKET", - "RIGHT_BRACKET", - around="extras", - ): - tokenizer.consume("WS") - extras = _parse_extras_list(tokenizer) - tokenizer.consume("WS") - - return extras - - -def _parse_extras_list(tokenizer: Tokenizer) -> list[str]: - """ - extras_list = identifier (wsp* ',' wsp* identifier)* - """ - extras: list[str] = [] - - if not tokenizer.check("IDENTIFIER"): - return extras - - extras.append(tokenizer.read().text) - - while True: - tokenizer.consume("WS") - if tokenizer.check("IDENTIFIER", peek=True): - tokenizer.raise_syntax_error("Expected comma between extra names") - elif not tokenizer.check("COMMA"): - break - - tokenizer.read() - tokenizer.consume("WS") - - extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma") - extras.append(extra_token.text) - - return extras - - -def _parse_specifier(tokenizer: Tokenizer) -> str: - """ - specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS - | WS? version_many WS? - """ - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="version specifier", - ): - tokenizer.consume("WS") - parsed_specifiers = _parse_version_many(tokenizer) - tokenizer.consume("WS") - - return parsed_specifiers - - -def _parse_version_many(tokenizer: Tokenizer) -> str: - """ - version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? - """ - parsed_specifiers = "" - while tokenizer.check("SPECIFIER"): - span_start = tokenizer.position - parsed_specifiers += tokenizer.read().text - if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True): - tokenizer.raise_syntax_error( - ".* suffix can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position + 1, - ) - if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True): - tokenizer.raise_syntax_error( - "Local version label can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position, - ) - tokenizer.consume("WS") - if not tokenizer.check("COMMA"): - break - parsed_specifiers += tokenizer.read().text - tokenizer.consume("WS") - - return parsed_specifiers - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for marker expression -# -------------------------------------------------------------------------------------- -def parse_marker(source: str) -> MarkerList: - return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList: - retval = _parse_marker(tokenizer) - tokenizer.expect("END", expected="end of marker expression") - return retval - - -def _parse_marker(tokenizer: Tokenizer) -> MarkerList: - """ - marker = marker_atom (BOOLOP marker_atom)+ - """ - expression = [_parse_marker_atom(tokenizer)] - while tokenizer.check("BOOLOP"): - token = tokenizer.read() - expr_right = _parse_marker_atom(tokenizer) - expression.extend((token.text, expr_right)) - return expression - - -def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom: - """ - marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? - | WS? marker_item WS? - """ - - tokenizer.consume("WS") - if tokenizer.check("LEFT_PARENTHESIS", peek=True): - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="marker expression", - ): - tokenizer.consume("WS") - marker: MarkerAtom = _parse_marker(tokenizer) - tokenizer.consume("WS") - else: - marker = _parse_marker_item(tokenizer) - tokenizer.consume("WS") - return marker - - -def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem: - """ - marker_item = WS? marker_var WS? marker_op WS? marker_var WS? - """ - tokenizer.consume("WS") - marker_var_left = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - marker_op = _parse_marker_op(tokenizer) - tokenizer.consume("WS") - marker_var_right = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - return (marker_var_left, marker_op, marker_var_right) - - -def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar: - """ - marker_var = VARIABLE | QUOTED_STRING - """ - if tokenizer.check("VARIABLE"): - return process_env_var(tokenizer.read().text.replace(".", "_")) - elif tokenizer.check("QUOTED_STRING"): - return process_python_str(tokenizer.read().text) - else: - tokenizer.raise_syntax_error( - message="Expected a marker variable or quoted string" - ) - - -def process_env_var(env_var: str) -> Variable: - if env_var in ("platform_python_implementation", "python_implementation"): - return Variable("platform_python_implementation") - else: - return Variable(env_var) - - -def process_python_str(python_str: str) -> Value: - value = ast.literal_eval(python_str) - return Value(str(value)) - - -def _parse_marker_op(tokenizer: Tokenizer) -> Op: - """ - marker_op = IN | NOT IN | OP - """ - if tokenizer.check("IN"): - tokenizer.read() - return Op("in") - elif tokenizer.check("NOT"): - tokenizer.read() - tokenizer.expect("WS", expected="whitespace after 'not'") - tokenizer.expect("IN", expected="'in' after 'not'") - return Op("not in") - elif tokenizer.check("OP"): - return Op(tokenizer.read().text) - else: - return tokenizer.raise_syntax_error( - "Expected marker operator, one of " - "<=, <, !=, ==, >=, >, ~=, ===, in, not in" - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py deleted file mode 100644 index 90a6465..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py +++ /dev/null @@ -1,61 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - - -class InfinityType: - def __repr__(self) -> str: - return "Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return False - - def __le__(self, other: object) -> bool: - return False - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return True - - def __ge__(self, other: object) -> bool: - return True - - def __neg__(self: object) -> "NegativeInfinityType": - return NegativeInfinity - - -Infinity = InfinityType() - - -class NegativeInfinityType: - def __repr__(self) -> str: - return "-Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return True - - def __le__(self, other: object) -> bool: - return True - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return False - - def __ge__(self, other: object) -> bool: - return False - - def __neg__(self: object) -> InfinityType: - return Infinity - - -NegativeInfinity = NegativeInfinityType() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py deleted file mode 100644 index 89d0416..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py +++ /dev/null @@ -1,194 +0,0 @@ -from __future__ import annotations - -import contextlib -import re -from dataclasses import dataclass -from typing import Iterator, NoReturn - -from .specifiers import Specifier - - -@dataclass -class Token: - name: str - text: str - position: int - - -class ParserSyntaxError(Exception): - """The provided source text could not be parsed correctly.""" - - def __init__( - self, - message: str, - *, - source: str, - span: tuple[int, int], - ) -> None: - self.span = span - self.message = message - self.source = source - - super().__init__() - - def __str__(self) -> str: - marker = " " * self.span[0] + "~" * (self.span[1] - self.span[0]) + "^" - return "\n ".join([self.message, self.source, marker]) - - -DEFAULT_RULES: dict[str, str | re.Pattern[str]] = { - "LEFT_PARENTHESIS": r"\(", - "RIGHT_PARENTHESIS": r"\)", - "LEFT_BRACKET": r"\[", - "RIGHT_BRACKET": r"\]", - "SEMICOLON": r";", - "COMMA": r",", - "QUOTED_STRING": re.compile( - r""" - ( - ('[^']*') - | - ("[^"]*") - ) - """, - re.VERBOSE, - ), - "OP": r"(===|==|~=|!=|<=|>=|<|>)", - "BOOLOP": r"\b(or|and)\b", - "IN": r"\bin\b", - "NOT": r"\bnot\b", - "VARIABLE": re.compile( - r""" - \b( - python_version - |python_full_version - |os[._]name - |sys[._]platform - |platform_(release|system) - |platform[._](version|machine|python_implementation) - |python_implementation - |implementation_(name|version) - |extra - )\b - """, - re.VERBOSE, - ), - "SPECIFIER": re.compile( - Specifier._operator_regex_str + Specifier._version_regex_str, - re.VERBOSE | re.IGNORECASE, - ), - "AT": r"\@", - "URL": r"[^ \t]+", - "IDENTIFIER": r"\b[a-zA-Z0-9][a-zA-Z0-9._-]*\b", - "VERSION_PREFIX_TRAIL": r"\.\*", - "VERSION_LOCAL_LABEL_TRAIL": r"\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*", - "WS": r"[ \t]+", - "END": r"$", -} - - -class Tokenizer: - """Context-sensitive token parsing. - - Provides methods to examine the input stream to check whether the next token - matches. - """ - - def __init__( - self, - source: str, - *, - rules: dict[str, str | re.Pattern[str]], - ) -> None: - self.source = source - self.rules: dict[str, re.Pattern[str]] = { - name: re.compile(pattern) for name, pattern in rules.items() - } - self.next_token: Token | None = None - self.position = 0 - - def consume(self, name: str) -> None: - """Move beyond provided token name, if at current position.""" - if self.check(name): - self.read() - - def check(self, name: str, *, peek: bool = False) -> bool: - """Check whether the next token has the provided name. - - By default, if the check succeeds, the token *must* be read before - another check. If `peek` is set to `True`, the token is not loaded and - would need to be checked again. - """ - assert ( - self.next_token is None - ), f"Cannot check for {name!r}, already have {self.next_token!r}" - assert name in self.rules, f"Unknown token name: {name!r}" - - expression = self.rules[name] - - match = expression.match(self.source, self.position) - if match is None: - return False - if not peek: - self.next_token = Token(name, match[0], self.position) - return True - - def expect(self, name: str, *, expected: str) -> Token: - """Expect a certain token name next, failing with a syntax error otherwise. - - The token is *not* read. - """ - if not self.check(name): - raise self.raise_syntax_error(f"Expected {expected}") - return self.read() - - def read(self) -> Token: - """Consume the next token and return it.""" - token = self.next_token - assert token is not None - - self.position += len(token.text) - self.next_token = None - - return token - - def raise_syntax_error( - self, - message: str, - *, - span_start: int | None = None, - span_end: int | None = None, - ) -> NoReturn: - """Raise ParserSyntaxError at the given position.""" - span = ( - self.position if span_start is None else span_start, - self.position if span_end is None else span_end, - ) - raise ParserSyntaxError( - message, - source=self.source, - span=span, - ) - - @contextlib.contextmanager - def enclosing_tokens( - self, open_token: str, close_token: str, *, around: str - ) -> Iterator[None]: - if self.check(open_token): - open_position = self.position - self.read() - else: - open_position = None - - yield - - if open_position is None: - return - - if not self.check(close_token): - self.raise_syntax_error( - f"Expected matching {close_token} for {open_token}, after {around}", - span_start=open_position, - ) - - self.read() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py deleted file mode 100644 index 71a1a77..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py +++ /dev/null @@ -1,145 +0,0 @@ -####################################################################################### -# -# Adapted from: -# https://github.com/pypa/hatch/blob/5352e44/backend/src/hatchling/licenses/parse.py -# -# MIT License -# -# Copyright (c) 2017-present Ofek Lev -# -# Permission is hereby granted, free of charge, to any person obtaining a copy of this -# software and associated documentation files (the "Software"), to deal in the Software -# without restriction, including without limitation the rights to use, copy, modify, -# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be included in all copies -# or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# -# With additional allowance of arbitrary `LicenseRef-` identifiers, not just -# `LicenseRef-Public-Domain` and `LicenseRef-Proprietary`. -# -####################################################################################### -from __future__ import annotations - -import re -from typing import NewType, cast - -from pip._vendor.packaging.licenses._spdx import EXCEPTIONS, LICENSES - -__all__ = [ - "NormalizedLicenseExpression", - "InvalidLicenseExpression", - "canonicalize_license_expression", -] - -license_ref_allowed = re.compile("^[A-Za-z0-9.-]*$") - -NormalizedLicenseExpression = NewType("NormalizedLicenseExpression", str) - - -class InvalidLicenseExpression(ValueError): - """Raised when a license-expression string is invalid - - >>> canonicalize_license_expression("invalid") - Traceback (most recent call last): - ... - packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid' - """ - - -def canonicalize_license_expression( - raw_license_expression: str, -) -> NormalizedLicenseExpression: - if not raw_license_expression: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - - # Pad any parentheses so tokenization can be achieved by merely splitting on - # whitespace. - license_expression = raw_license_expression.replace("(", " ( ").replace(")", " ) ") - licenseref_prefix = "LicenseRef-" - license_refs = { - ref.lower(): "LicenseRef-" + ref[len(licenseref_prefix) :] - for ref in license_expression.split() - if ref.lower().startswith(licenseref_prefix.lower()) - } - - # Normalize to lower case so we can look up licenses/exceptions - # and so boolean operators are Python-compatible. - license_expression = license_expression.lower() - - tokens = license_expression.split() - - # Rather than implementing boolean logic, we create an expression that Python can - # parse. Everything that is not involved with the grammar itself is treated as - # `False` and the expression should evaluate as such. - python_tokens = [] - for token in tokens: - if token not in {"or", "and", "with", "(", ")"}: - python_tokens.append("False") - elif token == "with": - python_tokens.append("or") - elif token == "(" and python_tokens and python_tokens[-1] not in {"or", "and"}: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - else: - python_tokens.append(token) - - python_expression = " ".join(python_tokens) - try: - invalid = eval(python_expression, globals(), locals()) - except Exception: - invalid = True - - if invalid is not False: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) from None - - # Take a final pass to check for unknown licenses/exceptions. - normalized_tokens = [] - for token in tokens: - if token in {"or", "and", "with", "(", ")"}: - normalized_tokens.append(token.upper()) - continue - - if normalized_tokens and normalized_tokens[-1] == "WITH": - if token not in EXCEPTIONS: - message = f"Unknown license exception: {token!r}" - raise InvalidLicenseExpression(message) - - normalized_tokens.append(EXCEPTIONS[token]["id"]) - else: - if token.endswith("+"): - final_token = token[:-1] - suffix = "+" - else: - final_token = token - suffix = "" - - if final_token.startswith("licenseref-"): - if not license_ref_allowed.match(final_token): - message = f"Invalid licenseref: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(license_refs[final_token] + suffix) - else: - if final_token not in LICENSES: - message = f"Unknown license: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(LICENSES[final_token]["id"] + suffix) - - normalized_expression = " ".join(normalized_tokens) - - return cast( - NormalizedLicenseExpression, - normalized_expression.replace("( ", "(").replace(" )", ")"), - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e5cf99e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc deleted file mode 100644 index e6720ce..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py deleted file mode 100644 index eac2227..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py +++ /dev/null @@ -1,759 +0,0 @@ - -from __future__ import annotations - -from typing import TypedDict - -class SPDXLicense(TypedDict): - id: str - deprecated: bool - -class SPDXException(TypedDict): - id: str - deprecated: bool - - -VERSION = '3.25.0' - -LICENSES: dict[str, SPDXLicense] = { - '0bsd': {'id': '0BSD', 'deprecated': False}, - '3d-slicer-1.0': {'id': '3D-Slicer-1.0', 'deprecated': False}, - 'aal': {'id': 'AAL', 'deprecated': False}, - 'abstyles': {'id': 'Abstyles', 'deprecated': False}, - 'adacore-doc': {'id': 'AdaCore-doc', 'deprecated': False}, - 'adobe-2006': {'id': 'Adobe-2006', 'deprecated': False}, - 'adobe-display-postscript': {'id': 'Adobe-Display-PostScript', 'deprecated': False}, - 'adobe-glyph': {'id': 'Adobe-Glyph', 'deprecated': False}, - 'adobe-utopia': {'id': 'Adobe-Utopia', 'deprecated': False}, - 'adsl': {'id': 'ADSL', 'deprecated': False}, - 'afl-1.1': {'id': 'AFL-1.1', 'deprecated': False}, - 'afl-1.2': {'id': 'AFL-1.2', 'deprecated': False}, - 'afl-2.0': {'id': 'AFL-2.0', 'deprecated': False}, - 'afl-2.1': {'id': 'AFL-2.1', 'deprecated': False}, - 'afl-3.0': {'id': 'AFL-3.0', 'deprecated': False}, - 'afmparse': {'id': 'Afmparse', 'deprecated': False}, - 'agpl-1.0': {'id': 'AGPL-1.0', 'deprecated': True}, - 'agpl-1.0-only': {'id': 'AGPL-1.0-only', 'deprecated': False}, - 'agpl-1.0-or-later': {'id': 'AGPL-1.0-or-later', 'deprecated': False}, - 'agpl-3.0': {'id': 'AGPL-3.0', 'deprecated': True}, - 'agpl-3.0-only': {'id': 'AGPL-3.0-only', 'deprecated': False}, - 'agpl-3.0-or-later': {'id': 'AGPL-3.0-or-later', 'deprecated': False}, - 'aladdin': {'id': 'Aladdin', 'deprecated': False}, - 'amd-newlib': {'id': 'AMD-newlib', 'deprecated': False}, - 'amdplpa': {'id': 'AMDPLPA', 'deprecated': False}, - 'aml': {'id': 'AML', 'deprecated': False}, - 'aml-glslang': {'id': 'AML-glslang', 'deprecated': False}, - 'ampas': {'id': 'AMPAS', 'deprecated': False}, - 'antlr-pd': {'id': 'ANTLR-PD', 'deprecated': False}, - 'antlr-pd-fallback': {'id': 'ANTLR-PD-fallback', 'deprecated': False}, - 'any-osi': {'id': 'any-OSI', 'deprecated': False}, - 'apache-1.0': {'id': 'Apache-1.0', 'deprecated': False}, - 'apache-1.1': {'id': 'Apache-1.1', 'deprecated': False}, - 'apache-2.0': {'id': 'Apache-2.0', 'deprecated': False}, - 'apafml': {'id': 'APAFML', 'deprecated': False}, - 'apl-1.0': {'id': 'APL-1.0', 'deprecated': False}, - 'app-s2p': {'id': 'App-s2p', 'deprecated': False}, - 'apsl-1.0': {'id': 'APSL-1.0', 'deprecated': False}, - 'apsl-1.1': {'id': 'APSL-1.1', 'deprecated': False}, - 'apsl-1.2': {'id': 'APSL-1.2', 'deprecated': False}, - 'apsl-2.0': {'id': 'APSL-2.0', 'deprecated': False}, - 'arphic-1999': {'id': 'Arphic-1999', 'deprecated': False}, - 'artistic-1.0': {'id': 'Artistic-1.0', 'deprecated': False}, - 'artistic-1.0-cl8': {'id': 'Artistic-1.0-cl8', 'deprecated': False}, - 'artistic-1.0-perl': {'id': 'Artistic-1.0-Perl', 'deprecated': False}, - 'artistic-2.0': {'id': 'Artistic-2.0', 'deprecated': False}, - 'aswf-digital-assets-1.0': {'id': 'ASWF-Digital-Assets-1.0', 'deprecated': False}, - 'aswf-digital-assets-1.1': {'id': 'ASWF-Digital-Assets-1.1', 'deprecated': False}, - 'baekmuk': {'id': 'Baekmuk', 'deprecated': False}, - 'bahyph': {'id': 'Bahyph', 'deprecated': False}, - 'barr': {'id': 'Barr', 'deprecated': False}, - 'bcrypt-solar-designer': {'id': 'bcrypt-Solar-Designer', 'deprecated': False}, - 'beerware': {'id': 'Beerware', 'deprecated': False}, - 'bitstream-charter': {'id': 'Bitstream-Charter', 'deprecated': False}, - 'bitstream-vera': {'id': 'Bitstream-Vera', 'deprecated': False}, - 'bittorrent-1.0': {'id': 'BitTorrent-1.0', 'deprecated': False}, - 'bittorrent-1.1': {'id': 'BitTorrent-1.1', 'deprecated': False}, - 'blessing': {'id': 'blessing', 'deprecated': False}, - 'blueoak-1.0.0': {'id': 'BlueOak-1.0.0', 'deprecated': False}, - 'boehm-gc': {'id': 'Boehm-GC', 'deprecated': False}, - 'borceux': {'id': 'Borceux', 'deprecated': False}, - 'brian-gladman-2-clause': {'id': 'Brian-Gladman-2-Clause', 'deprecated': False}, - 'brian-gladman-3-clause': {'id': 'Brian-Gladman-3-Clause', 'deprecated': False}, - 'bsd-1-clause': {'id': 'BSD-1-Clause', 'deprecated': False}, - 'bsd-2-clause': {'id': 'BSD-2-Clause', 'deprecated': False}, - 'bsd-2-clause-darwin': {'id': 'BSD-2-Clause-Darwin', 'deprecated': False}, - 'bsd-2-clause-first-lines': {'id': 'BSD-2-Clause-first-lines', 'deprecated': False}, - 'bsd-2-clause-freebsd': {'id': 'BSD-2-Clause-FreeBSD', 'deprecated': True}, - 'bsd-2-clause-netbsd': {'id': 'BSD-2-Clause-NetBSD', 'deprecated': True}, - 'bsd-2-clause-patent': {'id': 'BSD-2-Clause-Patent', 'deprecated': False}, - 'bsd-2-clause-views': {'id': 'BSD-2-Clause-Views', 'deprecated': False}, - 'bsd-3-clause': {'id': 'BSD-3-Clause', 'deprecated': False}, - 'bsd-3-clause-acpica': {'id': 'BSD-3-Clause-acpica', 'deprecated': False}, - 'bsd-3-clause-attribution': {'id': 'BSD-3-Clause-Attribution', 'deprecated': False}, - 'bsd-3-clause-clear': {'id': 'BSD-3-Clause-Clear', 'deprecated': False}, - 'bsd-3-clause-flex': {'id': 'BSD-3-Clause-flex', 'deprecated': False}, - 'bsd-3-clause-hp': {'id': 'BSD-3-Clause-HP', 'deprecated': False}, - 'bsd-3-clause-lbnl': {'id': 'BSD-3-Clause-LBNL', 'deprecated': False}, - 'bsd-3-clause-modification': {'id': 'BSD-3-Clause-Modification', 'deprecated': False}, - 'bsd-3-clause-no-military-license': {'id': 'BSD-3-Clause-No-Military-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license': {'id': 'BSD-3-Clause-No-Nuclear-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license-2014': {'id': 'BSD-3-Clause-No-Nuclear-License-2014', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-warranty': {'id': 'BSD-3-Clause-No-Nuclear-Warranty', 'deprecated': False}, - 'bsd-3-clause-open-mpi': {'id': 'BSD-3-Clause-Open-MPI', 'deprecated': False}, - 'bsd-3-clause-sun': {'id': 'BSD-3-Clause-Sun', 'deprecated': False}, - 'bsd-4-clause': {'id': 'BSD-4-Clause', 'deprecated': False}, - 'bsd-4-clause-shortened': {'id': 'BSD-4-Clause-Shortened', 'deprecated': False}, - 'bsd-4-clause-uc': {'id': 'BSD-4-Clause-UC', 'deprecated': False}, - 'bsd-4.3reno': {'id': 'BSD-4.3RENO', 'deprecated': False}, - 'bsd-4.3tahoe': {'id': 'BSD-4.3TAHOE', 'deprecated': False}, - 'bsd-advertising-acknowledgement': {'id': 'BSD-Advertising-Acknowledgement', 'deprecated': False}, - 'bsd-attribution-hpnd-disclaimer': {'id': 'BSD-Attribution-HPND-disclaimer', 'deprecated': False}, - 'bsd-inferno-nettverk': {'id': 'BSD-Inferno-Nettverk', 'deprecated': False}, - 'bsd-protection': {'id': 'BSD-Protection', 'deprecated': False}, - 'bsd-source-beginning-file': {'id': 'BSD-Source-beginning-file', 'deprecated': False}, - 'bsd-source-code': {'id': 'BSD-Source-Code', 'deprecated': False}, - 'bsd-systemics': {'id': 'BSD-Systemics', 'deprecated': False}, - 'bsd-systemics-w3works': {'id': 'BSD-Systemics-W3Works', 'deprecated': False}, - 'bsl-1.0': {'id': 'BSL-1.0', 'deprecated': False}, - 'busl-1.1': {'id': 'BUSL-1.1', 'deprecated': False}, - 'bzip2-1.0.5': {'id': 'bzip2-1.0.5', 'deprecated': True}, - 'bzip2-1.0.6': {'id': 'bzip2-1.0.6', 'deprecated': False}, - 'c-uda-1.0': {'id': 'C-UDA-1.0', 'deprecated': False}, - 'cal-1.0': {'id': 'CAL-1.0', 'deprecated': False}, - 'cal-1.0-combined-work-exception': {'id': 'CAL-1.0-Combined-Work-Exception', 'deprecated': False}, - 'caldera': {'id': 'Caldera', 'deprecated': False}, - 'caldera-no-preamble': {'id': 'Caldera-no-preamble', 'deprecated': False}, - 'catharon': {'id': 'Catharon', 'deprecated': False}, - 'catosl-1.1': {'id': 'CATOSL-1.1', 'deprecated': False}, - 'cc-by-1.0': {'id': 'CC-BY-1.0', 'deprecated': False}, - 'cc-by-2.0': {'id': 'CC-BY-2.0', 'deprecated': False}, - 'cc-by-2.5': {'id': 'CC-BY-2.5', 'deprecated': False}, - 'cc-by-2.5-au': {'id': 'CC-BY-2.5-AU', 'deprecated': False}, - 'cc-by-3.0': {'id': 'CC-BY-3.0', 'deprecated': False}, - 'cc-by-3.0-at': {'id': 'CC-BY-3.0-AT', 'deprecated': False}, - 'cc-by-3.0-au': {'id': 'CC-BY-3.0-AU', 'deprecated': False}, - 'cc-by-3.0-de': {'id': 'CC-BY-3.0-DE', 'deprecated': False}, - 'cc-by-3.0-igo': {'id': 'CC-BY-3.0-IGO', 'deprecated': False}, - 'cc-by-3.0-nl': {'id': 'CC-BY-3.0-NL', 'deprecated': False}, - 'cc-by-3.0-us': {'id': 'CC-BY-3.0-US', 'deprecated': False}, - 'cc-by-4.0': {'id': 'CC-BY-4.0', 'deprecated': False}, - 'cc-by-nc-1.0': {'id': 'CC-BY-NC-1.0', 'deprecated': False}, - 'cc-by-nc-2.0': {'id': 'CC-BY-NC-2.0', 'deprecated': False}, - 'cc-by-nc-2.5': {'id': 'CC-BY-NC-2.5', 'deprecated': False}, - 'cc-by-nc-3.0': {'id': 'CC-BY-NC-3.0', 'deprecated': False}, - 'cc-by-nc-3.0-de': {'id': 'CC-BY-NC-3.0-DE', 'deprecated': False}, - 'cc-by-nc-4.0': {'id': 'CC-BY-NC-4.0', 'deprecated': False}, - 'cc-by-nc-nd-1.0': {'id': 'CC-BY-NC-ND-1.0', 'deprecated': False}, - 'cc-by-nc-nd-2.0': {'id': 'CC-BY-NC-ND-2.0', 'deprecated': False}, - 'cc-by-nc-nd-2.5': {'id': 'CC-BY-NC-ND-2.5', 'deprecated': False}, - 'cc-by-nc-nd-3.0': {'id': 'CC-BY-NC-ND-3.0', 'deprecated': False}, - 'cc-by-nc-nd-3.0-de': {'id': 'CC-BY-NC-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nc-nd-3.0-igo': {'id': 'CC-BY-NC-ND-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-nd-4.0': {'id': 'CC-BY-NC-ND-4.0', 'deprecated': False}, - 'cc-by-nc-sa-1.0': {'id': 'CC-BY-NC-SA-1.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0': {'id': 'CC-BY-NC-SA-2.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0-de': {'id': 'CC-BY-NC-SA-2.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-2.0-fr': {'id': 'CC-BY-NC-SA-2.0-FR', 'deprecated': False}, - 'cc-by-nc-sa-2.0-uk': {'id': 'CC-BY-NC-SA-2.0-UK', 'deprecated': False}, - 'cc-by-nc-sa-2.5': {'id': 'CC-BY-NC-SA-2.5', 'deprecated': False}, - 'cc-by-nc-sa-3.0': {'id': 'CC-BY-NC-SA-3.0', 'deprecated': False}, - 'cc-by-nc-sa-3.0-de': {'id': 'CC-BY-NC-SA-3.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-3.0-igo': {'id': 'CC-BY-NC-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-sa-4.0': {'id': 'CC-BY-NC-SA-4.0', 'deprecated': False}, - 'cc-by-nd-1.0': {'id': 'CC-BY-ND-1.0', 'deprecated': False}, - 'cc-by-nd-2.0': {'id': 'CC-BY-ND-2.0', 'deprecated': False}, - 'cc-by-nd-2.5': {'id': 'CC-BY-ND-2.5', 'deprecated': False}, - 'cc-by-nd-3.0': {'id': 'CC-BY-ND-3.0', 'deprecated': False}, - 'cc-by-nd-3.0-de': {'id': 'CC-BY-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nd-4.0': {'id': 'CC-BY-ND-4.0', 'deprecated': False}, - 'cc-by-sa-1.0': {'id': 'CC-BY-SA-1.0', 'deprecated': False}, - 'cc-by-sa-2.0': {'id': 'CC-BY-SA-2.0', 'deprecated': False}, - 'cc-by-sa-2.0-uk': {'id': 'CC-BY-SA-2.0-UK', 'deprecated': False}, - 'cc-by-sa-2.1-jp': {'id': 'CC-BY-SA-2.1-JP', 'deprecated': False}, - 'cc-by-sa-2.5': {'id': 'CC-BY-SA-2.5', 'deprecated': False}, - 'cc-by-sa-3.0': {'id': 'CC-BY-SA-3.0', 'deprecated': False}, - 'cc-by-sa-3.0-at': {'id': 'CC-BY-SA-3.0-AT', 'deprecated': False}, - 'cc-by-sa-3.0-de': {'id': 'CC-BY-SA-3.0-DE', 'deprecated': False}, - 'cc-by-sa-3.0-igo': {'id': 'CC-BY-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-sa-4.0': {'id': 'CC-BY-SA-4.0', 'deprecated': False}, - 'cc-pddc': {'id': 'CC-PDDC', 'deprecated': False}, - 'cc0-1.0': {'id': 'CC0-1.0', 'deprecated': False}, - 'cddl-1.0': {'id': 'CDDL-1.0', 'deprecated': False}, - 'cddl-1.1': {'id': 'CDDL-1.1', 'deprecated': False}, - 'cdl-1.0': {'id': 'CDL-1.0', 'deprecated': False}, - 'cdla-permissive-1.0': {'id': 'CDLA-Permissive-1.0', 'deprecated': False}, - 'cdla-permissive-2.0': {'id': 'CDLA-Permissive-2.0', 'deprecated': False}, - 'cdla-sharing-1.0': {'id': 'CDLA-Sharing-1.0', 'deprecated': False}, - 'cecill-1.0': {'id': 'CECILL-1.0', 'deprecated': False}, - 'cecill-1.1': {'id': 'CECILL-1.1', 'deprecated': False}, - 'cecill-2.0': {'id': 'CECILL-2.0', 'deprecated': False}, - 'cecill-2.1': {'id': 'CECILL-2.1', 'deprecated': False}, - 'cecill-b': {'id': 'CECILL-B', 'deprecated': False}, - 'cecill-c': {'id': 'CECILL-C', 'deprecated': False}, - 'cern-ohl-1.1': {'id': 'CERN-OHL-1.1', 'deprecated': False}, - 'cern-ohl-1.2': {'id': 'CERN-OHL-1.2', 'deprecated': False}, - 'cern-ohl-p-2.0': {'id': 'CERN-OHL-P-2.0', 'deprecated': False}, - 'cern-ohl-s-2.0': {'id': 'CERN-OHL-S-2.0', 'deprecated': False}, - 'cern-ohl-w-2.0': {'id': 'CERN-OHL-W-2.0', 'deprecated': False}, - 'cfitsio': {'id': 'CFITSIO', 'deprecated': False}, - 'check-cvs': {'id': 'check-cvs', 'deprecated': False}, - 'checkmk': {'id': 'checkmk', 'deprecated': False}, - 'clartistic': {'id': 'ClArtistic', 'deprecated': False}, - 'clips': {'id': 'Clips', 'deprecated': False}, - 'cmu-mach': {'id': 'CMU-Mach', 'deprecated': False}, - 'cmu-mach-nodoc': {'id': 'CMU-Mach-nodoc', 'deprecated': False}, - 'cnri-jython': {'id': 'CNRI-Jython', 'deprecated': False}, - 'cnri-python': {'id': 'CNRI-Python', 'deprecated': False}, - 'cnri-python-gpl-compatible': {'id': 'CNRI-Python-GPL-Compatible', 'deprecated': False}, - 'coil-1.0': {'id': 'COIL-1.0', 'deprecated': False}, - 'community-spec-1.0': {'id': 'Community-Spec-1.0', 'deprecated': False}, - 'condor-1.1': {'id': 'Condor-1.1', 'deprecated': False}, - 'copyleft-next-0.3.0': {'id': 'copyleft-next-0.3.0', 'deprecated': False}, - 'copyleft-next-0.3.1': {'id': 'copyleft-next-0.3.1', 'deprecated': False}, - 'cornell-lossless-jpeg': {'id': 'Cornell-Lossless-JPEG', 'deprecated': False}, - 'cpal-1.0': {'id': 'CPAL-1.0', 'deprecated': False}, - 'cpl-1.0': {'id': 'CPL-1.0', 'deprecated': False}, - 'cpol-1.02': {'id': 'CPOL-1.02', 'deprecated': False}, - 'cronyx': {'id': 'Cronyx', 'deprecated': False}, - 'crossword': {'id': 'Crossword', 'deprecated': False}, - 'crystalstacker': {'id': 'CrystalStacker', 'deprecated': False}, - 'cua-opl-1.0': {'id': 'CUA-OPL-1.0', 'deprecated': False}, - 'cube': {'id': 'Cube', 'deprecated': False}, - 'curl': {'id': 'curl', 'deprecated': False}, - 'cve-tou': {'id': 'cve-tou', 'deprecated': False}, - 'd-fsl-1.0': {'id': 'D-FSL-1.0', 'deprecated': False}, - 'dec-3-clause': {'id': 'DEC-3-Clause', 'deprecated': False}, - 'diffmark': {'id': 'diffmark', 'deprecated': False}, - 'dl-de-by-2.0': {'id': 'DL-DE-BY-2.0', 'deprecated': False}, - 'dl-de-zero-2.0': {'id': 'DL-DE-ZERO-2.0', 'deprecated': False}, - 'doc': {'id': 'DOC', 'deprecated': False}, - 'docbook-schema': {'id': 'DocBook-Schema', 'deprecated': False}, - 'docbook-xml': {'id': 'DocBook-XML', 'deprecated': False}, - 'dotseqn': {'id': 'Dotseqn', 'deprecated': False}, - 'drl-1.0': {'id': 'DRL-1.0', 'deprecated': False}, - 'drl-1.1': {'id': 'DRL-1.1', 'deprecated': False}, - 'dsdp': {'id': 'DSDP', 'deprecated': False}, - 'dtoa': {'id': 'dtoa', 'deprecated': False}, - 'dvipdfm': {'id': 'dvipdfm', 'deprecated': False}, - 'ecl-1.0': {'id': 'ECL-1.0', 'deprecated': False}, - 'ecl-2.0': {'id': 'ECL-2.0', 'deprecated': False}, - 'ecos-2.0': {'id': 'eCos-2.0', 'deprecated': True}, - 'efl-1.0': {'id': 'EFL-1.0', 'deprecated': False}, - 'efl-2.0': {'id': 'EFL-2.0', 'deprecated': False}, - 'egenix': {'id': 'eGenix', 'deprecated': False}, - 'elastic-2.0': {'id': 'Elastic-2.0', 'deprecated': False}, - 'entessa': {'id': 'Entessa', 'deprecated': False}, - 'epics': {'id': 'EPICS', 'deprecated': False}, - 'epl-1.0': {'id': 'EPL-1.0', 'deprecated': False}, - 'epl-2.0': {'id': 'EPL-2.0', 'deprecated': False}, - 'erlpl-1.1': {'id': 'ErlPL-1.1', 'deprecated': False}, - 'etalab-2.0': {'id': 'etalab-2.0', 'deprecated': False}, - 'eudatagrid': {'id': 'EUDatagrid', 'deprecated': False}, - 'eupl-1.0': {'id': 'EUPL-1.0', 'deprecated': False}, - 'eupl-1.1': {'id': 'EUPL-1.1', 'deprecated': False}, - 'eupl-1.2': {'id': 'EUPL-1.2', 'deprecated': False}, - 'eurosym': {'id': 'Eurosym', 'deprecated': False}, - 'fair': {'id': 'Fair', 'deprecated': False}, - 'fbm': {'id': 'FBM', 'deprecated': False}, - 'fdk-aac': {'id': 'FDK-AAC', 'deprecated': False}, - 'ferguson-twofish': {'id': 'Ferguson-Twofish', 'deprecated': False}, - 'frameworx-1.0': {'id': 'Frameworx-1.0', 'deprecated': False}, - 'freebsd-doc': {'id': 'FreeBSD-DOC', 'deprecated': False}, - 'freeimage': {'id': 'FreeImage', 'deprecated': False}, - 'fsfap': {'id': 'FSFAP', 'deprecated': False}, - 'fsfap-no-warranty-disclaimer': {'id': 'FSFAP-no-warranty-disclaimer', 'deprecated': False}, - 'fsful': {'id': 'FSFUL', 'deprecated': False}, - 'fsfullr': {'id': 'FSFULLR', 'deprecated': False}, - 'fsfullrwd': {'id': 'FSFULLRWD', 'deprecated': False}, - 'ftl': {'id': 'FTL', 'deprecated': False}, - 'furuseth': {'id': 'Furuseth', 'deprecated': False}, - 'fwlw': {'id': 'fwlw', 'deprecated': False}, - 'gcr-docs': {'id': 'GCR-docs', 'deprecated': False}, - 'gd': {'id': 'GD', 'deprecated': False}, - 'gfdl-1.1': {'id': 'GFDL-1.1', 'deprecated': True}, - 'gfdl-1.1-invariants-only': {'id': 'GFDL-1.1-invariants-only', 'deprecated': False}, - 'gfdl-1.1-invariants-or-later': {'id': 'GFDL-1.1-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-no-invariants-only': {'id': 'GFDL-1.1-no-invariants-only', 'deprecated': False}, - 'gfdl-1.1-no-invariants-or-later': {'id': 'GFDL-1.1-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-only': {'id': 'GFDL-1.1-only', 'deprecated': False}, - 'gfdl-1.1-or-later': {'id': 'GFDL-1.1-or-later', 'deprecated': False}, - 'gfdl-1.2': {'id': 'GFDL-1.2', 'deprecated': True}, - 'gfdl-1.2-invariants-only': {'id': 'GFDL-1.2-invariants-only', 'deprecated': False}, - 'gfdl-1.2-invariants-or-later': {'id': 'GFDL-1.2-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-no-invariants-only': {'id': 'GFDL-1.2-no-invariants-only', 'deprecated': False}, - 'gfdl-1.2-no-invariants-or-later': {'id': 'GFDL-1.2-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-only': {'id': 'GFDL-1.2-only', 'deprecated': False}, - 'gfdl-1.2-or-later': {'id': 'GFDL-1.2-or-later', 'deprecated': False}, - 'gfdl-1.3': {'id': 'GFDL-1.3', 'deprecated': True}, - 'gfdl-1.3-invariants-only': {'id': 'GFDL-1.3-invariants-only', 'deprecated': False}, - 'gfdl-1.3-invariants-or-later': {'id': 'GFDL-1.3-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-no-invariants-only': {'id': 'GFDL-1.3-no-invariants-only', 'deprecated': False}, - 'gfdl-1.3-no-invariants-or-later': {'id': 'GFDL-1.3-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-only': {'id': 'GFDL-1.3-only', 'deprecated': False}, - 'gfdl-1.3-or-later': {'id': 'GFDL-1.3-or-later', 'deprecated': False}, - 'giftware': {'id': 'Giftware', 'deprecated': False}, - 'gl2ps': {'id': 'GL2PS', 'deprecated': False}, - 'glide': {'id': 'Glide', 'deprecated': False}, - 'glulxe': {'id': 'Glulxe', 'deprecated': False}, - 'glwtpl': {'id': 'GLWTPL', 'deprecated': False}, - 'gnuplot': {'id': 'gnuplot', 'deprecated': False}, - 'gpl-1.0': {'id': 'GPL-1.0', 'deprecated': True}, - 'gpl-1.0+': {'id': 'GPL-1.0+', 'deprecated': True}, - 'gpl-1.0-only': {'id': 'GPL-1.0-only', 'deprecated': False}, - 'gpl-1.0-or-later': {'id': 'GPL-1.0-or-later', 'deprecated': False}, - 'gpl-2.0': {'id': 'GPL-2.0', 'deprecated': True}, - 'gpl-2.0+': {'id': 'GPL-2.0+', 'deprecated': True}, - 'gpl-2.0-only': {'id': 'GPL-2.0-only', 'deprecated': False}, - 'gpl-2.0-or-later': {'id': 'GPL-2.0-or-later', 'deprecated': False}, - 'gpl-2.0-with-autoconf-exception': {'id': 'GPL-2.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-2.0-with-bison-exception': {'id': 'GPL-2.0-with-bison-exception', 'deprecated': True}, - 'gpl-2.0-with-classpath-exception': {'id': 'GPL-2.0-with-classpath-exception', 'deprecated': True}, - 'gpl-2.0-with-font-exception': {'id': 'GPL-2.0-with-font-exception', 'deprecated': True}, - 'gpl-2.0-with-gcc-exception': {'id': 'GPL-2.0-with-GCC-exception', 'deprecated': True}, - 'gpl-3.0': {'id': 'GPL-3.0', 'deprecated': True}, - 'gpl-3.0+': {'id': 'GPL-3.0+', 'deprecated': True}, - 'gpl-3.0-only': {'id': 'GPL-3.0-only', 'deprecated': False}, - 'gpl-3.0-or-later': {'id': 'GPL-3.0-or-later', 'deprecated': False}, - 'gpl-3.0-with-autoconf-exception': {'id': 'GPL-3.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-3.0-with-gcc-exception': {'id': 'GPL-3.0-with-GCC-exception', 'deprecated': True}, - 'graphics-gems': {'id': 'Graphics-Gems', 'deprecated': False}, - 'gsoap-1.3b': {'id': 'gSOAP-1.3b', 'deprecated': False}, - 'gtkbook': {'id': 'gtkbook', 'deprecated': False}, - 'gutmann': {'id': 'Gutmann', 'deprecated': False}, - 'haskellreport': {'id': 'HaskellReport', 'deprecated': False}, - 'hdparm': {'id': 'hdparm', 'deprecated': False}, - 'hidapi': {'id': 'HIDAPI', 'deprecated': False}, - 'hippocratic-2.1': {'id': 'Hippocratic-2.1', 'deprecated': False}, - 'hp-1986': {'id': 'HP-1986', 'deprecated': False}, - 'hp-1989': {'id': 'HP-1989', 'deprecated': False}, - 'hpnd': {'id': 'HPND', 'deprecated': False}, - 'hpnd-dec': {'id': 'HPND-DEC', 'deprecated': False}, - 'hpnd-doc': {'id': 'HPND-doc', 'deprecated': False}, - 'hpnd-doc-sell': {'id': 'HPND-doc-sell', 'deprecated': False}, - 'hpnd-export-us': {'id': 'HPND-export-US', 'deprecated': False}, - 'hpnd-export-us-acknowledgement': {'id': 'HPND-export-US-acknowledgement', 'deprecated': False}, - 'hpnd-export-us-modify': {'id': 'HPND-export-US-modify', 'deprecated': False}, - 'hpnd-export2-us': {'id': 'HPND-export2-US', 'deprecated': False}, - 'hpnd-fenneberg-livingston': {'id': 'HPND-Fenneberg-Livingston', 'deprecated': False}, - 'hpnd-inria-imag': {'id': 'HPND-INRIA-IMAG', 'deprecated': False}, - 'hpnd-intel': {'id': 'HPND-Intel', 'deprecated': False}, - 'hpnd-kevlin-henney': {'id': 'HPND-Kevlin-Henney', 'deprecated': False}, - 'hpnd-markus-kuhn': {'id': 'HPND-Markus-Kuhn', 'deprecated': False}, - 'hpnd-merchantability-variant': {'id': 'HPND-merchantability-variant', 'deprecated': False}, - 'hpnd-mit-disclaimer': {'id': 'HPND-MIT-disclaimer', 'deprecated': False}, - 'hpnd-netrek': {'id': 'HPND-Netrek', 'deprecated': False}, - 'hpnd-pbmplus': {'id': 'HPND-Pbmplus', 'deprecated': False}, - 'hpnd-sell-mit-disclaimer-xserver': {'id': 'HPND-sell-MIT-disclaimer-xserver', 'deprecated': False}, - 'hpnd-sell-regexpr': {'id': 'HPND-sell-regexpr', 'deprecated': False}, - 'hpnd-sell-variant': {'id': 'HPND-sell-variant', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer': {'id': 'HPND-sell-variant-MIT-disclaimer', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer-rev': {'id': 'HPND-sell-variant-MIT-disclaimer-rev', 'deprecated': False}, - 'hpnd-uc': {'id': 'HPND-UC', 'deprecated': False}, - 'hpnd-uc-export-us': {'id': 'HPND-UC-export-US', 'deprecated': False}, - 'htmltidy': {'id': 'HTMLTIDY', 'deprecated': False}, - 'ibm-pibs': {'id': 'IBM-pibs', 'deprecated': False}, - 'icu': {'id': 'ICU', 'deprecated': False}, - 'iec-code-components-eula': {'id': 'IEC-Code-Components-EULA', 'deprecated': False}, - 'ijg': {'id': 'IJG', 'deprecated': False}, - 'ijg-short': {'id': 'IJG-short', 'deprecated': False}, - 'imagemagick': {'id': 'ImageMagick', 'deprecated': False}, - 'imatix': {'id': 'iMatix', 'deprecated': False}, - 'imlib2': {'id': 'Imlib2', 'deprecated': False}, - 'info-zip': {'id': 'Info-ZIP', 'deprecated': False}, - 'inner-net-2.0': {'id': 'Inner-Net-2.0', 'deprecated': False}, - 'intel': {'id': 'Intel', 'deprecated': False}, - 'intel-acpi': {'id': 'Intel-ACPI', 'deprecated': False}, - 'interbase-1.0': {'id': 'Interbase-1.0', 'deprecated': False}, - 'ipa': {'id': 'IPA', 'deprecated': False}, - 'ipl-1.0': {'id': 'IPL-1.0', 'deprecated': False}, - 'isc': {'id': 'ISC', 'deprecated': False}, - 'isc-veillard': {'id': 'ISC-Veillard', 'deprecated': False}, - 'jam': {'id': 'Jam', 'deprecated': False}, - 'jasper-2.0': {'id': 'JasPer-2.0', 'deprecated': False}, - 'jpl-image': {'id': 'JPL-image', 'deprecated': False}, - 'jpnic': {'id': 'JPNIC', 'deprecated': False}, - 'json': {'id': 'JSON', 'deprecated': False}, - 'kastrup': {'id': 'Kastrup', 'deprecated': False}, - 'kazlib': {'id': 'Kazlib', 'deprecated': False}, - 'knuth-ctan': {'id': 'Knuth-CTAN', 'deprecated': False}, - 'lal-1.2': {'id': 'LAL-1.2', 'deprecated': False}, - 'lal-1.3': {'id': 'LAL-1.3', 'deprecated': False}, - 'latex2e': {'id': 'Latex2e', 'deprecated': False}, - 'latex2e-translated-notice': {'id': 'Latex2e-translated-notice', 'deprecated': False}, - 'leptonica': {'id': 'Leptonica', 'deprecated': False}, - 'lgpl-2.0': {'id': 'LGPL-2.0', 'deprecated': True}, - 'lgpl-2.0+': {'id': 'LGPL-2.0+', 'deprecated': True}, - 'lgpl-2.0-only': {'id': 'LGPL-2.0-only', 'deprecated': False}, - 'lgpl-2.0-or-later': {'id': 'LGPL-2.0-or-later', 'deprecated': False}, - 'lgpl-2.1': {'id': 'LGPL-2.1', 'deprecated': True}, - 'lgpl-2.1+': {'id': 'LGPL-2.1+', 'deprecated': True}, - 'lgpl-2.1-only': {'id': 'LGPL-2.1-only', 'deprecated': False}, - 'lgpl-2.1-or-later': {'id': 'LGPL-2.1-or-later', 'deprecated': False}, - 'lgpl-3.0': {'id': 'LGPL-3.0', 'deprecated': True}, - 'lgpl-3.0+': {'id': 'LGPL-3.0+', 'deprecated': True}, - 'lgpl-3.0-only': {'id': 'LGPL-3.0-only', 'deprecated': False}, - 'lgpl-3.0-or-later': {'id': 'LGPL-3.0-or-later', 'deprecated': False}, - 'lgpllr': {'id': 'LGPLLR', 'deprecated': False}, - 'libpng': {'id': 'Libpng', 'deprecated': False}, - 'libpng-2.0': {'id': 'libpng-2.0', 'deprecated': False}, - 'libselinux-1.0': {'id': 'libselinux-1.0', 'deprecated': False}, - 'libtiff': {'id': 'libtiff', 'deprecated': False}, - 'libutil-david-nugent': {'id': 'libutil-David-Nugent', 'deprecated': False}, - 'liliq-p-1.1': {'id': 'LiLiQ-P-1.1', 'deprecated': False}, - 'liliq-r-1.1': {'id': 'LiLiQ-R-1.1', 'deprecated': False}, - 'liliq-rplus-1.1': {'id': 'LiLiQ-Rplus-1.1', 'deprecated': False}, - 'linux-man-pages-1-para': {'id': 'Linux-man-pages-1-para', 'deprecated': False}, - 'linux-man-pages-copyleft': {'id': 'Linux-man-pages-copyleft', 'deprecated': False}, - 'linux-man-pages-copyleft-2-para': {'id': 'Linux-man-pages-copyleft-2-para', 'deprecated': False}, - 'linux-man-pages-copyleft-var': {'id': 'Linux-man-pages-copyleft-var', 'deprecated': False}, - 'linux-openib': {'id': 'Linux-OpenIB', 'deprecated': False}, - 'loop': {'id': 'LOOP', 'deprecated': False}, - 'lpd-document': {'id': 'LPD-document', 'deprecated': False}, - 'lpl-1.0': {'id': 'LPL-1.0', 'deprecated': False}, - 'lpl-1.02': {'id': 'LPL-1.02', 'deprecated': False}, - 'lppl-1.0': {'id': 'LPPL-1.0', 'deprecated': False}, - 'lppl-1.1': {'id': 'LPPL-1.1', 'deprecated': False}, - 'lppl-1.2': {'id': 'LPPL-1.2', 'deprecated': False}, - 'lppl-1.3a': {'id': 'LPPL-1.3a', 'deprecated': False}, - 'lppl-1.3c': {'id': 'LPPL-1.3c', 'deprecated': False}, - 'lsof': {'id': 'lsof', 'deprecated': False}, - 'lucida-bitmap-fonts': {'id': 'Lucida-Bitmap-Fonts', 'deprecated': False}, - 'lzma-sdk-9.11-to-9.20': {'id': 'LZMA-SDK-9.11-to-9.20', 'deprecated': False}, - 'lzma-sdk-9.22': {'id': 'LZMA-SDK-9.22', 'deprecated': False}, - 'mackerras-3-clause': {'id': 'Mackerras-3-Clause', 'deprecated': False}, - 'mackerras-3-clause-acknowledgment': {'id': 'Mackerras-3-Clause-acknowledgment', 'deprecated': False}, - 'magaz': {'id': 'magaz', 'deprecated': False}, - 'mailprio': {'id': 'mailprio', 'deprecated': False}, - 'makeindex': {'id': 'MakeIndex', 'deprecated': False}, - 'martin-birgmeier': {'id': 'Martin-Birgmeier', 'deprecated': False}, - 'mcphee-slideshow': {'id': 'McPhee-slideshow', 'deprecated': False}, - 'metamail': {'id': 'metamail', 'deprecated': False}, - 'minpack': {'id': 'Minpack', 'deprecated': False}, - 'miros': {'id': 'MirOS', 'deprecated': False}, - 'mit': {'id': 'MIT', 'deprecated': False}, - 'mit-0': {'id': 'MIT-0', 'deprecated': False}, - 'mit-advertising': {'id': 'MIT-advertising', 'deprecated': False}, - 'mit-cmu': {'id': 'MIT-CMU', 'deprecated': False}, - 'mit-enna': {'id': 'MIT-enna', 'deprecated': False}, - 'mit-feh': {'id': 'MIT-feh', 'deprecated': False}, - 'mit-festival': {'id': 'MIT-Festival', 'deprecated': False}, - 'mit-khronos-old': {'id': 'MIT-Khronos-old', 'deprecated': False}, - 'mit-modern-variant': {'id': 'MIT-Modern-Variant', 'deprecated': False}, - 'mit-open-group': {'id': 'MIT-open-group', 'deprecated': False}, - 'mit-testregex': {'id': 'MIT-testregex', 'deprecated': False}, - 'mit-wu': {'id': 'MIT-Wu', 'deprecated': False}, - 'mitnfa': {'id': 'MITNFA', 'deprecated': False}, - 'mmixware': {'id': 'MMIXware', 'deprecated': False}, - 'motosoto': {'id': 'Motosoto', 'deprecated': False}, - 'mpeg-ssg': {'id': 'MPEG-SSG', 'deprecated': False}, - 'mpi-permissive': {'id': 'mpi-permissive', 'deprecated': False}, - 'mpich2': {'id': 'mpich2', 'deprecated': False}, - 'mpl-1.0': {'id': 'MPL-1.0', 'deprecated': False}, - 'mpl-1.1': {'id': 'MPL-1.1', 'deprecated': False}, - 'mpl-2.0': {'id': 'MPL-2.0', 'deprecated': False}, - 'mpl-2.0-no-copyleft-exception': {'id': 'MPL-2.0-no-copyleft-exception', 'deprecated': False}, - 'mplus': {'id': 'mplus', 'deprecated': False}, - 'ms-lpl': {'id': 'MS-LPL', 'deprecated': False}, - 'ms-pl': {'id': 'MS-PL', 'deprecated': False}, - 'ms-rl': {'id': 'MS-RL', 'deprecated': False}, - 'mtll': {'id': 'MTLL', 'deprecated': False}, - 'mulanpsl-1.0': {'id': 'MulanPSL-1.0', 'deprecated': False}, - 'mulanpsl-2.0': {'id': 'MulanPSL-2.0', 'deprecated': False}, - 'multics': {'id': 'Multics', 'deprecated': False}, - 'mup': {'id': 'Mup', 'deprecated': False}, - 'naist-2003': {'id': 'NAIST-2003', 'deprecated': False}, - 'nasa-1.3': {'id': 'NASA-1.3', 'deprecated': False}, - 'naumen': {'id': 'Naumen', 'deprecated': False}, - 'nbpl-1.0': {'id': 'NBPL-1.0', 'deprecated': False}, - 'ncbi-pd': {'id': 'NCBI-PD', 'deprecated': False}, - 'ncgl-uk-2.0': {'id': 'NCGL-UK-2.0', 'deprecated': False}, - 'ncl': {'id': 'NCL', 'deprecated': False}, - 'ncsa': {'id': 'NCSA', 'deprecated': False}, - 'net-snmp': {'id': 'Net-SNMP', 'deprecated': True}, - 'netcdf': {'id': 'NetCDF', 'deprecated': False}, - 'newsletr': {'id': 'Newsletr', 'deprecated': False}, - 'ngpl': {'id': 'NGPL', 'deprecated': False}, - 'nicta-1.0': {'id': 'NICTA-1.0', 'deprecated': False}, - 'nist-pd': {'id': 'NIST-PD', 'deprecated': False}, - 'nist-pd-fallback': {'id': 'NIST-PD-fallback', 'deprecated': False}, - 'nist-software': {'id': 'NIST-Software', 'deprecated': False}, - 'nlod-1.0': {'id': 'NLOD-1.0', 'deprecated': False}, - 'nlod-2.0': {'id': 'NLOD-2.0', 'deprecated': False}, - 'nlpl': {'id': 'NLPL', 'deprecated': False}, - 'nokia': {'id': 'Nokia', 'deprecated': False}, - 'nosl': {'id': 'NOSL', 'deprecated': False}, - 'noweb': {'id': 'Noweb', 'deprecated': False}, - 'npl-1.0': {'id': 'NPL-1.0', 'deprecated': False}, - 'npl-1.1': {'id': 'NPL-1.1', 'deprecated': False}, - 'nposl-3.0': {'id': 'NPOSL-3.0', 'deprecated': False}, - 'nrl': {'id': 'NRL', 'deprecated': False}, - 'ntp': {'id': 'NTP', 'deprecated': False}, - 'ntp-0': {'id': 'NTP-0', 'deprecated': False}, - 'nunit': {'id': 'Nunit', 'deprecated': True}, - 'o-uda-1.0': {'id': 'O-UDA-1.0', 'deprecated': False}, - 'oar': {'id': 'OAR', 'deprecated': False}, - 'occt-pl': {'id': 'OCCT-PL', 'deprecated': False}, - 'oclc-2.0': {'id': 'OCLC-2.0', 'deprecated': False}, - 'odbl-1.0': {'id': 'ODbL-1.0', 'deprecated': False}, - 'odc-by-1.0': {'id': 'ODC-By-1.0', 'deprecated': False}, - 'offis': {'id': 'OFFIS', 'deprecated': False}, - 'ofl-1.0': {'id': 'OFL-1.0', 'deprecated': False}, - 'ofl-1.0-no-rfn': {'id': 'OFL-1.0-no-RFN', 'deprecated': False}, - 'ofl-1.0-rfn': {'id': 'OFL-1.0-RFN', 'deprecated': False}, - 'ofl-1.1': {'id': 'OFL-1.1', 'deprecated': False}, - 'ofl-1.1-no-rfn': {'id': 'OFL-1.1-no-RFN', 'deprecated': False}, - 'ofl-1.1-rfn': {'id': 'OFL-1.1-RFN', 'deprecated': False}, - 'ogc-1.0': {'id': 'OGC-1.0', 'deprecated': False}, - 'ogdl-taiwan-1.0': {'id': 'OGDL-Taiwan-1.0', 'deprecated': False}, - 'ogl-canada-2.0': {'id': 'OGL-Canada-2.0', 'deprecated': False}, - 'ogl-uk-1.0': {'id': 'OGL-UK-1.0', 'deprecated': False}, - 'ogl-uk-2.0': {'id': 'OGL-UK-2.0', 'deprecated': False}, - 'ogl-uk-3.0': {'id': 'OGL-UK-3.0', 'deprecated': False}, - 'ogtsl': {'id': 'OGTSL', 'deprecated': False}, - 'oldap-1.1': {'id': 'OLDAP-1.1', 'deprecated': False}, - 'oldap-1.2': {'id': 'OLDAP-1.2', 'deprecated': False}, - 'oldap-1.3': {'id': 'OLDAP-1.3', 'deprecated': False}, - 'oldap-1.4': {'id': 'OLDAP-1.4', 'deprecated': False}, - 'oldap-2.0': {'id': 'OLDAP-2.0', 'deprecated': False}, - 'oldap-2.0.1': {'id': 'OLDAP-2.0.1', 'deprecated': False}, - 'oldap-2.1': {'id': 'OLDAP-2.1', 'deprecated': False}, - 'oldap-2.2': {'id': 'OLDAP-2.2', 'deprecated': False}, - 'oldap-2.2.1': {'id': 'OLDAP-2.2.1', 'deprecated': False}, - 'oldap-2.2.2': {'id': 'OLDAP-2.2.2', 'deprecated': False}, - 'oldap-2.3': {'id': 'OLDAP-2.3', 'deprecated': False}, - 'oldap-2.4': {'id': 'OLDAP-2.4', 'deprecated': False}, - 'oldap-2.5': {'id': 'OLDAP-2.5', 'deprecated': False}, - 'oldap-2.6': {'id': 'OLDAP-2.6', 'deprecated': False}, - 'oldap-2.7': {'id': 'OLDAP-2.7', 'deprecated': False}, - 'oldap-2.8': {'id': 'OLDAP-2.8', 'deprecated': False}, - 'olfl-1.3': {'id': 'OLFL-1.3', 'deprecated': False}, - 'oml': {'id': 'OML', 'deprecated': False}, - 'openpbs-2.3': {'id': 'OpenPBS-2.3', 'deprecated': False}, - 'openssl': {'id': 'OpenSSL', 'deprecated': False}, - 'openssl-standalone': {'id': 'OpenSSL-standalone', 'deprecated': False}, - 'openvision': {'id': 'OpenVision', 'deprecated': False}, - 'opl-1.0': {'id': 'OPL-1.0', 'deprecated': False}, - 'opl-uk-3.0': {'id': 'OPL-UK-3.0', 'deprecated': False}, - 'opubl-1.0': {'id': 'OPUBL-1.0', 'deprecated': False}, - 'oset-pl-2.1': {'id': 'OSET-PL-2.1', 'deprecated': False}, - 'osl-1.0': {'id': 'OSL-1.0', 'deprecated': False}, - 'osl-1.1': {'id': 'OSL-1.1', 'deprecated': False}, - 'osl-2.0': {'id': 'OSL-2.0', 'deprecated': False}, - 'osl-2.1': {'id': 'OSL-2.1', 'deprecated': False}, - 'osl-3.0': {'id': 'OSL-3.0', 'deprecated': False}, - 'padl': {'id': 'PADL', 'deprecated': False}, - 'parity-6.0.0': {'id': 'Parity-6.0.0', 'deprecated': False}, - 'parity-7.0.0': {'id': 'Parity-7.0.0', 'deprecated': False}, - 'pddl-1.0': {'id': 'PDDL-1.0', 'deprecated': False}, - 'php-3.0': {'id': 'PHP-3.0', 'deprecated': False}, - 'php-3.01': {'id': 'PHP-3.01', 'deprecated': False}, - 'pixar': {'id': 'Pixar', 'deprecated': False}, - 'pkgconf': {'id': 'pkgconf', 'deprecated': False}, - 'plexus': {'id': 'Plexus', 'deprecated': False}, - 'pnmstitch': {'id': 'pnmstitch', 'deprecated': False}, - 'polyform-noncommercial-1.0.0': {'id': 'PolyForm-Noncommercial-1.0.0', 'deprecated': False}, - 'polyform-small-business-1.0.0': {'id': 'PolyForm-Small-Business-1.0.0', 'deprecated': False}, - 'postgresql': {'id': 'PostgreSQL', 'deprecated': False}, - 'ppl': {'id': 'PPL', 'deprecated': False}, - 'psf-2.0': {'id': 'PSF-2.0', 'deprecated': False}, - 'psfrag': {'id': 'psfrag', 'deprecated': False}, - 'psutils': {'id': 'psutils', 'deprecated': False}, - 'python-2.0': {'id': 'Python-2.0', 'deprecated': False}, - 'python-2.0.1': {'id': 'Python-2.0.1', 'deprecated': False}, - 'python-ldap': {'id': 'python-ldap', 'deprecated': False}, - 'qhull': {'id': 'Qhull', 'deprecated': False}, - 'qpl-1.0': {'id': 'QPL-1.0', 'deprecated': False}, - 'qpl-1.0-inria-2004': {'id': 'QPL-1.0-INRIA-2004', 'deprecated': False}, - 'radvd': {'id': 'radvd', 'deprecated': False}, - 'rdisc': {'id': 'Rdisc', 'deprecated': False}, - 'rhecos-1.1': {'id': 'RHeCos-1.1', 'deprecated': False}, - 'rpl-1.1': {'id': 'RPL-1.1', 'deprecated': False}, - 'rpl-1.5': {'id': 'RPL-1.5', 'deprecated': False}, - 'rpsl-1.0': {'id': 'RPSL-1.0', 'deprecated': False}, - 'rsa-md': {'id': 'RSA-MD', 'deprecated': False}, - 'rscpl': {'id': 'RSCPL', 'deprecated': False}, - 'ruby': {'id': 'Ruby', 'deprecated': False}, - 'ruby-pty': {'id': 'Ruby-pty', 'deprecated': False}, - 'sax-pd': {'id': 'SAX-PD', 'deprecated': False}, - 'sax-pd-2.0': {'id': 'SAX-PD-2.0', 'deprecated': False}, - 'saxpath': {'id': 'Saxpath', 'deprecated': False}, - 'scea': {'id': 'SCEA', 'deprecated': False}, - 'schemereport': {'id': 'SchemeReport', 'deprecated': False}, - 'sendmail': {'id': 'Sendmail', 'deprecated': False}, - 'sendmail-8.23': {'id': 'Sendmail-8.23', 'deprecated': False}, - 'sgi-b-1.0': {'id': 'SGI-B-1.0', 'deprecated': False}, - 'sgi-b-1.1': {'id': 'SGI-B-1.1', 'deprecated': False}, - 'sgi-b-2.0': {'id': 'SGI-B-2.0', 'deprecated': False}, - 'sgi-opengl': {'id': 'SGI-OpenGL', 'deprecated': False}, - 'sgp4': {'id': 'SGP4', 'deprecated': False}, - 'shl-0.5': {'id': 'SHL-0.5', 'deprecated': False}, - 'shl-0.51': {'id': 'SHL-0.51', 'deprecated': False}, - 'simpl-2.0': {'id': 'SimPL-2.0', 'deprecated': False}, - 'sissl': {'id': 'SISSL', 'deprecated': False}, - 'sissl-1.2': {'id': 'SISSL-1.2', 'deprecated': False}, - 'sl': {'id': 'SL', 'deprecated': False}, - 'sleepycat': {'id': 'Sleepycat', 'deprecated': False}, - 'smlnj': {'id': 'SMLNJ', 'deprecated': False}, - 'smppl': {'id': 'SMPPL', 'deprecated': False}, - 'snia': {'id': 'SNIA', 'deprecated': False}, - 'snprintf': {'id': 'snprintf', 'deprecated': False}, - 'softsurfer': {'id': 'softSurfer', 'deprecated': False}, - 'soundex': {'id': 'Soundex', 'deprecated': False}, - 'spencer-86': {'id': 'Spencer-86', 'deprecated': False}, - 'spencer-94': {'id': 'Spencer-94', 'deprecated': False}, - 'spencer-99': {'id': 'Spencer-99', 'deprecated': False}, - 'spl-1.0': {'id': 'SPL-1.0', 'deprecated': False}, - 'ssh-keyscan': {'id': 'ssh-keyscan', 'deprecated': False}, - 'ssh-openssh': {'id': 'SSH-OpenSSH', 'deprecated': False}, - 'ssh-short': {'id': 'SSH-short', 'deprecated': False}, - 'ssleay-standalone': {'id': 'SSLeay-standalone', 'deprecated': False}, - 'sspl-1.0': {'id': 'SSPL-1.0', 'deprecated': False}, - 'standardml-nj': {'id': 'StandardML-NJ', 'deprecated': True}, - 'sugarcrm-1.1.3': {'id': 'SugarCRM-1.1.3', 'deprecated': False}, - 'sun-ppp': {'id': 'Sun-PPP', 'deprecated': False}, - 'sun-ppp-2000': {'id': 'Sun-PPP-2000', 'deprecated': False}, - 'sunpro': {'id': 'SunPro', 'deprecated': False}, - 'swl': {'id': 'SWL', 'deprecated': False}, - 'swrule': {'id': 'swrule', 'deprecated': False}, - 'symlinks': {'id': 'Symlinks', 'deprecated': False}, - 'tapr-ohl-1.0': {'id': 'TAPR-OHL-1.0', 'deprecated': False}, - 'tcl': {'id': 'TCL', 'deprecated': False}, - 'tcp-wrappers': {'id': 'TCP-wrappers', 'deprecated': False}, - 'termreadkey': {'id': 'TermReadKey', 'deprecated': False}, - 'tgppl-1.0': {'id': 'TGPPL-1.0', 'deprecated': False}, - 'threeparttable': {'id': 'threeparttable', 'deprecated': False}, - 'tmate': {'id': 'TMate', 'deprecated': False}, - 'torque-1.1': {'id': 'TORQUE-1.1', 'deprecated': False}, - 'tosl': {'id': 'TOSL', 'deprecated': False}, - 'tpdl': {'id': 'TPDL', 'deprecated': False}, - 'tpl-1.0': {'id': 'TPL-1.0', 'deprecated': False}, - 'ttwl': {'id': 'TTWL', 'deprecated': False}, - 'ttyp0': {'id': 'TTYP0', 'deprecated': False}, - 'tu-berlin-1.0': {'id': 'TU-Berlin-1.0', 'deprecated': False}, - 'tu-berlin-2.0': {'id': 'TU-Berlin-2.0', 'deprecated': False}, - 'ubuntu-font-1.0': {'id': 'Ubuntu-font-1.0', 'deprecated': False}, - 'ucar': {'id': 'UCAR', 'deprecated': False}, - 'ucl-1.0': {'id': 'UCL-1.0', 'deprecated': False}, - 'ulem': {'id': 'ulem', 'deprecated': False}, - 'umich-merit': {'id': 'UMich-Merit', 'deprecated': False}, - 'unicode-3.0': {'id': 'Unicode-3.0', 'deprecated': False}, - 'unicode-dfs-2015': {'id': 'Unicode-DFS-2015', 'deprecated': False}, - 'unicode-dfs-2016': {'id': 'Unicode-DFS-2016', 'deprecated': False}, - 'unicode-tou': {'id': 'Unicode-TOU', 'deprecated': False}, - 'unixcrypt': {'id': 'UnixCrypt', 'deprecated': False}, - 'unlicense': {'id': 'Unlicense', 'deprecated': False}, - 'upl-1.0': {'id': 'UPL-1.0', 'deprecated': False}, - 'urt-rle': {'id': 'URT-RLE', 'deprecated': False}, - 'vim': {'id': 'Vim', 'deprecated': False}, - 'vostrom': {'id': 'VOSTROM', 'deprecated': False}, - 'vsl-1.0': {'id': 'VSL-1.0', 'deprecated': False}, - 'w3c': {'id': 'W3C', 'deprecated': False}, - 'w3c-19980720': {'id': 'W3C-19980720', 'deprecated': False}, - 'w3c-20150513': {'id': 'W3C-20150513', 'deprecated': False}, - 'w3m': {'id': 'w3m', 'deprecated': False}, - 'watcom-1.0': {'id': 'Watcom-1.0', 'deprecated': False}, - 'widget-workshop': {'id': 'Widget-Workshop', 'deprecated': False}, - 'wsuipa': {'id': 'Wsuipa', 'deprecated': False}, - 'wtfpl': {'id': 'WTFPL', 'deprecated': False}, - 'wxwindows': {'id': 'wxWindows', 'deprecated': True}, - 'x11': {'id': 'X11', 'deprecated': False}, - 'x11-distribute-modifications-variant': {'id': 'X11-distribute-modifications-variant', 'deprecated': False}, - 'x11-swapped': {'id': 'X11-swapped', 'deprecated': False}, - 'xdebug-1.03': {'id': 'Xdebug-1.03', 'deprecated': False}, - 'xerox': {'id': 'Xerox', 'deprecated': False}, - 'xfig': {'id': 'Xfig', 'deprecated': False}, - 'xfree86-1.1': {'id': 'XFree86-1.1', 'deprecated': False}, - 'xinetd': {'id': 'xinetd', 'deprecated': False}, - 'xkeyboard-config-zinoviev': {'id': 'xkeyboard-config-Zinoviev', 'deprecated': False}, - 'xlock': {'id': 'xlock', 'deprecated': False}, - 'xnet': {'id': 'Xnet', 'deprecated': False}, - 'xpp': {'id': 'xpp', 'deprecated': False}, - 'xskat': {'id': 'XSkat', 'deprecated': False}, - 'xzoom': {'id': 'xzoom', 'deprecated': False}, - 'ypl-1.0': {'id': 'YPL-1.0', 'deprecated': False}, - 'ypl-1.1': {'id': 'YPL-1.1', 'deprecated': False}, - 'zed': {'id': 'Zed', 'deprecated': False}, - 'zeeff': {'id': 'Zeeff', 'deprecated': False}, - 'zend-2.0': {'id': 'Zend-2.0', 'deprecated': False}, - 'zimbra-1.3': {'id': 'Zimbra-1.3', 'deprecated': False}, - 'zimbra-1.4': {'id': 'Zimbra-1.4', 'deprecated': False}, - 'zlib': {'id': 'Zlib', 'deprecated': False}, - 'zlib-acknowledgement': {'id': 'zlib-acknowledgement', 'deprecated': False}, - 'zpl-1.1': {'id': 'ZPL-1.1', 'deprecated': False}, - 'zpl-2.0': {'id': 'ZPL-2.0', 'deprecated': False}, - 'zpl-2.1': {'id': 'ZPL-2.1', 'deprecated': False}, -} - -EXCEPTIONS: dict[str, SPDXException] = { - '389-exception': {'id': '389-exception', 'deprecated': False}, - 'asterisk-exception': {'id': 'Asterisk-exception', 'deprecated': False}, - 'asterisk-linking-protocols-exception': {'id': 'Asterisk-linking-protocols-exception', 'deprecated': False}, - 'autoconf-exception-2.0': {'id': 'Autoconf-exception-2.0', 'deprecated': False}, - 'autoconf-exception-3.0': {'id': 'Autoconf-exception-3.0', 'deprecated': False}, - 'autoconf-exception-generic': {'id': 'Autoconf-exception-generic', 'deprecated': False}, - 'autoconf-exception-generic-3.0': {'id': 'Autoconf-exception-generic-3.0', 'deprecated': False}, - 'autoconf-exception-macro': {'id': 'Autoconf-exception-macro', 'deprecated': False}, - 'bison-exception-1.24': {'id': 'Bison-exception-1.24', 'deprecated': False}, - 'bison-exception-2.2': {'id': 'Bison-exception-2.2', 'deprecated': False}, - 'bootloader-exception': {'id': 'Bootloader-exception', 'deprecated': False}, - 'classpath-exception-2.0': {'id': 'Classpath-exception-2.0', 'deprecated': False}, - 'clisp-exception-2.0': {'id': 'CLISP-exception-2.0', 'deprecated': False}, - 'cryptsetup-openssl-exception': {'id': 'cryptsetup-OpenSSL-exception', 'deprecated': False}, - 'digirule-foss-exception': {'id': 'DigiRule-FOSS-exception', 'deprecated': False}, - 'ecos-exception-2.0': {'id': 'eCos-exception-2.0', 'deprecated': False}, - 'erlang-otp-linking-exception': {'id': 'erlang-otp-linking-exception', 'deprecated': False}, - 'fawkes-runtime-exception': {'id': 'Fawkes-Runtime-exception', 'deprecated': False}, - 'fltk-exception': {'id': 'FLTK-exception', 'deprecated': False}, - 'fmt-exception': {'id': 'fmt-exception', 'deprecated': False}, - 'font-exception-2.0': {'id': 'Font-exception-2.0', 'deprecated': False}, - 'freertos-exception-2.0': {'id': 'freertos-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0': {'id': 'GCC-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0-note': {'id': 'GCC-exception-2.0-note', 'deprecated': False}, - 'gcc-exception-3.1': {'id': 'GCC-exception-3.1', 'deprecated': False}, - 'gmsh-exception': {'id': 'Gmsh-exception', 'deprecated': False}, - 'gnat-exception': {'id': 'GNAT-exception', 'deprecated': False}, - 'gnome-examples-exception': {'id': 'GNOME-examples-exception', 'deprecated': False}, - 'gnu-compiler-exception': {'id': 'GNU-compiler-exception', 'deprecated': False}, - 'gnu-javamail-exception': {'id': 'gnu-javamail-exception', 'deprecated': False}, - 'gpl-3.0-interface-exception': {'id': 'GPL-3.0-interface-exception', 'deprecated': False}, - 'gpl-3.0-linking-exception': {'id': 'GPL-3.0-linking-exception', 'deprecated': False}, - 'gpl-3.0-linking-source-exception': {'id': 'GPL-3.0-linking-source-exception', 'deprecated': False}, - 'gpl-cc-1.0': {'id': 'GPL-CC-1.0', 'deprecated': False}, - 'gstreamer-exception-2005': {'id': 'GStreamer-exception-2005', 'deprecated': False}, - 'gstreamer-exception-2008': {'id': 'GStreamer-exception-2008', 'deprecated': False}, - 'i2p-gpl-java-exception': {'id': 'i2p-gpl-java-exception', 'deprecated': False}, - 'kicad-libraries-exception': {'id': 'KiCad-libraries-exception', 'deprecated': False}, - 'lgpl-3.0-linking-exception': {'id': 'LGPL-3.0-linking-exception', 'deprecated': False}, - 'libpri-openh323-exception': {'id': 'libpri-OpenH323-exception', 'deprecated': False}, - 'libtool-exception': {'id': 'Libtool-exception', 'deprecated': False}, - 'linux-syscall-note': {'id': 'Linux-syscall-note', 'deprecated': False}, - 'llgpl': {'id': 'LLGPL', 'deprecated': False}, - 'llvm-exception': {'id': 'LLVM-exception', 'deprecated': False}, - 'lzma-exception': {'id': 'LZMA-exception', 'deprecated': False}, - 'mif-exception': {'id': 'mif-exception', 'deprecated': False}, - 'nokia-qt-exception-1.1': {'id': 'Nokia-Qt-exception-1.1', 'deprecated': True}, - 'ocaml-lgpl-linking-exception': {'id': 'OCaml-LGPL-linking-exception', 'deprecated': False}, - 'occt-exception-1.0': {'id': 'OCCT-exception-1.0', 'deprecated': False}, - 'openjdk-assembly-exception-1.0': {'id': 'OpenJDK-assembly-exception-1.0', 'deprecated': False}, - 'openvpn-openssl-exception': {'id': 'openvpn-openssl-exception', 'deprecated': False}, - 'pcre2-exception': {'id': 'PCRE2-exception', 'deprecated': False}, - 'ps-or-pdf-font-exception-20170817': {'id': 'PS-or-PDF-font-exception-20170817', 'deprecated': False}, - 'qpl-1.0-inria-2004-exception': {'id': 'QPL-1.0-INRIA-2004-exception', 'deprecated': False}, - 'qt-gpl-exception-1.0': {'id': 'Qt-GPL-exception-1.0', 'deprecated': False}, - 'qt-lgpl-exception-1.1': {'id': 'Qt-LGPL-exception-1.1', 'deprecated': False}, - 'qwt-exception-1.0': {'id': 'Qwt-exception-1.0', 'deprecated': False}, - 'romic-exception': {'id': 'romic-exception', 'deprecated': False}, - 'rrdtool-floss-exception-2.0': {'id': 'RRDtool-FLOSS-exception-2.0', 'deprecated': False}, - 'sane-exception': {'id': 'SANE-exception', 'deprecated': False}, - 'shl-2.0': {'id': 'SHL-2.0', 'deprecated': False}, - 'shl-2.1': {'id': 'SHL-2.1', 'deprecated': False}, - 'stunnel-exception': {'id': 'stunnel-exception', 'deprecated': False}, - 'swi-exception': {'id': 'SWI-exception', 'deprecated': False}, - 'swift-exception': {'id': 'Swift-exception', 'deprecated': False}, - 'texinfo-exception': {'id': 'Texinfo-exception', 'deprecated': False}, - 'u-boot-exception-2.0': {'id': 'u-boot-exception-2.0', 'deprecated': False}, - 'ubdl-exception': {'id': 'UBDL-exception', 'deprecated': False}, - 'universal-foss-exception-1.0': {'id': 'Universal-FOSS-exception-1.0', 'deprecated': False}, - 'vsftpd-openssl-exception': {'id': 'vsftpd-openssl-exception', 'deprecated': False}, - 'wxwindows-exception-3.1': {'id': 'WxWindows-exception-3.1', 'deprecated': False}, - 'x11vnc-openssl-exception': {'id': 'x11vnc-openssl-exception', 'deprecated': False}, -} diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py deleted file mode 100644 index fb7f49c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py +++ /dev/null @@ -1,331 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import operator -import os -import platform -import sys -from typing import Any, Callable, TypedDict, cast - -from ._parser import MarkerAtom, MarkerList, Op, Value, Variable -from ._parser import parse_marker as _parse_marker -from ._tokenizer import ParserSyntaxError -from .specifiers import InvalidSpecifier, Specifier -from .utils import canonicalize_name - -__all__ = [ - "InvalidMarker", - "Marker", - "UndefinedComparison", - "UndefinedEnvironmentName", - "default_environment", -] - -Operator = Callable[[str, str], bool] - - -class InvalidMarker(ValueError): - """ - An invalid marker was found, users should refer to PEP 508. - """ - - -class UndefinedComparison(ValueError): - """ - An invalid operation was attempted on a value that doesn't support it. - """ - - -class UndefinedEnvironmentName(ValueError): - """ - A name was attempted to be used that does not exist inside of the - environment. - """ - - -class Environment(TypedDict): - implementation_name: str - """The implementation's identifier, e.g. ``'cpython'``.""" - - implementation_version: str - """ - The implementation's version, e.g. ``'3.13.0a2'`` for CPython 3.13.0a2, or - ``'7.3.13'`` for PyPy3.10 v7.3.13. - """ - - os_name: str - """ - The value of :py:data:`os.name`. The name of the operating system dependent module - imported, e.g. ``'posix'``. - """ - - platform_machine: str - """ - Returns the machine type, e.g. ``'i386'``. - - An empty string if the value cannot be determined. - """ - - platform_release: str - """ - The system's release, e.g. ``'2.2.0'`` or ``'NT'``. - - An empty string if the value cannot be determined. - """ - - platform_system: str - """ - The system/OS name, e.g. ``'Linux'``, ``'Windows'`` or ``'Java'``. - - An empty string if the value cannot be determined. - """ - - platform_version: str - """ - The system's release version, e.g. ``'#3 on degas'``. - - An empty string if the value cannot be determined. - """ - - python_full_version: str - """ - The Python version as string ``'major.minor.patchlevel'``. - - Note that unlike the Python :py:data:`sys.version`, this value will always include - the patchlevel (it defaults to 0). - """ - - platform_python_implementation: str - """ - A string identifying the Python implementation, e.g. ``'CPython'``. - """ - - python_version: str - """The Python version as string ``'major.minor'``.""" - - sys_platform: str - """ - This string contains a platform identifier that can be used to append - platform-specific components to :py:data:`sys.path`, for instance. - - For Unix systems, except on Linux and AIX, this is the lowercased OS name as - returned by ``uname -s`` with the first part of the version as returned by - ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, at the time when Python - was built. - """ - - -def _normalize_extra_values(results: Any) -> Any: - """ - Normalize extra values. - """ - if isinstance(results[0], tuple): - lhs, op, rhs = results[0] - if isinstance(lhs, Variable) and lhs.value == "extra": - normalized_extra = canonicalize_name(rhs.value) - rhs = Value(normalized_extra) - elif isinstance(rhs, Variable) and rhs.value == "extra": - normalized_extra = canonicalize_name(lhs.value) - lhs = Value(normalized_extra) - results[0] = lhs, op, rhs - return results - - -def _format_marker( - marker: list[str] | MarkerAtom | str, first: bool | None = True -) -> str: - assert isinstance(marker, (list, tuple, str)) - - # Sometimes we have a structure like [[...]] which is a single item list - # where the single item is itself it's own list. In that case we want skip - # the rest of this function so that we don't get extraneous () on the - # outside. - if ( - isinstance(marker, list) - and len(marker) == 1 - and isinstance(marker[0], (list, tuple)) - ): - return _format_marker(marker[0]) - - if isinstance(marker, list): - inner = (_format_marker(m, first=False) for m in marker) - if first: - return " ".join(inner) - else: - return "(" + " ".join(inner) + ")" - elif isinstance(marker, tuple): - return " ".join([m.serialize() for m in marker]) - else: - return marker - - -_operators: dict[str, Operator] = { - "in": lambda lhs, rhs: lhs in rhs, - "not in": lambda lhs, rhs: lhs not in rhs, - "<": operator.lt, - "<=": operator.le, - "==": operator.eq, - "!=": operator.ne, - ">=": operator.ge, - ">": operator.gt, -} - - -def _eval_op(lhs: str, op: Op, rhs: str) -> bool: - try: - spec = Specifier("".join([op.serialize(), rhs])) - except InvalidSpecifier: - pass - else: - return spec.contains(lhs, prereleases=True) - - oper: Operator | None = _operators.get(op.serialize()) - if oper is None: - raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.") - - return oper(lhs, rhs) - - -def _normalize(*values: str, key: str) -> tuple[str, ...]: - # PEP 685 – Comparison of extra names for optional distribution dependencies - # https://peps.python.org/pep-0685/ - # > When comparing extra names, tools MUST normalize the names being - # > compared using the semantics outlined in PEP 503 for names - if key == "extra": - return tuple(canonicalize_name(v) for v in values) - - # other environment markers don't have such standards - return values - - -def _evaluate_markers(markers: MarkerList, environment: dict[str, str]) -> bool: - groups: list[list[bool]] = [[]] - - for marker in markers: - assert isinstance(marker, (list, tuple, str)) - - if isinstance(marker, list): - groups[-1].append(_evaluate_markers(marker, environment)) - elif isinstance(marker, tuple): - lhs, op, rhs = marker - - if isinstance(lhs, Variable): - environment_key = lhs.value - lhs_value = environment[environment_key] - rhs_value = rhs.value - else: - lhs_value = lhs.value - environment_key = rhs.value - rhs_value = environment[environment_key] - - lhs_value, rhs_value = _normalize(lhs_value, rhs_value, key=environment_key) - groups[-1].append(_eval_op(lhs_value, op, rhs_value)) - else: - assert marker in ["and", "or"] - if marker == "or": - groups.append([]) - - return any(all(item) for item in groups) - - -def format_full_version(info: sys._version_info) -> str: - version = f"{info.major}.{info.minor}.{info.micro}" - kind = info.releaselevel - if kind != "final": - version += kind[0] + str(info.serial) - return version - - -def default_environment() -> Environment: - iver = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - return { - "implementation_name": implementation_name, - "implementation_version": iver, - "os_name": os.name, - "platform_machine": platform.machine(), - "platform_release": platform.release(), - "platform_system": platform.system(), - "platform_version": platform.version(), - "python_full_version": platform.python_version(), - "platform_python_implementation": platform.python_implementation(), - "python_version": ".".join(platform.python_version_tuple()[:2]), - "sys_platform": sys.platform, - } - - -class Marker: - def __init__(self, marker: str) -> None: - # Note: We create a Marker object without calling this constructor in - # packaging.requirements.Requirement. If any additional logic is - # added here, make sure to mirror/adapt Requirement. - try: - self._markers = _normalize_extra_values(_parse_marker(marker)) - # The attribute `_markers` can be described in terms of a recursive type: - # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]] - # - # For example, the following expression: - # python_version > "3.6" or (python_version == "3.6" and os_name == "unix") - # - # is parsed into: - # [ - # (, ')>, ), - # 'and', - # [ - # (, , ), - # 'or', - # (, , ) - # ] - # ] - except ParserSyntaxError as e: - raise InvalidMarker(str(e)) from e - - def __str__(self) -> str: - return _format_marker(self._markers) - - def __repr__(self) -> str: - return f"" - - def __hash__(self) -> int: - return hash((self.__class__.__name__, str(self))) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Marker): - return NotImplemented - - return str(self) == str(other) - - def evaluate(self, environment: dict[str, str] | None = None) -> bool: - """Evaluate a marker. - - Return the boolean from evaluating the given marker against the - environment. environment is an optional argument to override all or - part of the determined environment. - - The environment is determined from the current Python process. - """ - current_environment = cast("dict[str, str]", default_environment()) - current_environment["extra"] = "" - if environment is not None: - current_environment.update(environment) - # The API used to allow setting extra to None. We need to handle this - # case for backwards compatibility. - if current_environment["extra"] is None: - current_environment["extra"] = "" - - return _evaluate_markers( - self._markers, _repair_python_full_version(current_environment) - ) - - -def _repair_python_full_version(env: dict[str, str]) -> dict[str, str]: - """ - Work around platform.python_version() returning something that is not PEP 440 - compliant for non-tagged Python builds. - """ - if env["python_full_version"].endswith("+"): - env["python_full_version"] += "local" - return env diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py deleted file mode 100644 index 721f411..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py +++ /dev/null @@ -1,863 +0,0 @@ -from __future__ import annotations - -import email.feedparser -import email.header -import email.message -import email.parser -import email.policy -import pathlib -import sys -import typing -from typing import ( - Any, - Callable, - Generic, - Literal, - TypedDict, - cast, -) - -from . import licenses, requirements, specifiers, utils -from . import version as version_module -from .licenses import NormalizedLicenseExpression - -T = typing.TypeVar("T") - - -if sys.version_info >= (3, 11): # pragma: no cover - ExceptionGroup = ExceptionGroup -else: # pragma: no cover - - class ExceptionGroup(Exception): - """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. - - If :external:exc:`ExceptionGroup` is already defined by Python itself, - that version is used instead. - """ - - message: str - exceptions: list[Exception] - - def __init__(self, message: str, exceptions: list[Exception]) -> None: - self.message = message - self.exceptions = exceptions - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})" - - -class InvalidMetadata(ValueError): - """A metadata field contains invalid data.""" - - field: str - """The name of the field that contains invalid data.""" - - def __init__(self, field: str, message: str) -> None: - self.field = field - super().__init__(message) - - -# The RawMetadata class attempts to make as few assumptions about the underlying -# serialization formats as possible. The idea is that as long as a serialization -# formats offer some very basic primitives in *some* way then we can support -# serializing to and from that format. -class RawMetadata(TypedDict, total=False): - """A dictionary of raw core metadata. - - Each field in core metadata maps to a key of this dictionary (when data is - provided). The key is lower-case and underscores are used instead of dashes - compared to the equivalent core metadata field. Any core metadata field that - can be specified multiple times or can hold multiple values in a single - field have a key with a plural name. See :class:`Metadata` whose attributes - match the keys of this dictionary. - - Core metadata fields that can be specified multiple times are stored as a - list or dict depending on which is appropriate for the field. Any fields - which hold multiple values in a single field are stored as a list. - - """ - - # Metadata 1.0 - PEP 241 - metadata_version: str - name: str - version: str - platforms: list[str] - summary: str - description: str - keywords: list[str] - home_page: str - author: str - author_email: str - license: str - - # Metadata 1.1 - PEP 314 - supported_platforms: list[str] - download_url: str - classifiers: list[str] - requires: list[str] - provides: list[str] - obsoletes: list[str] - - # Metadata 1.2 - PEP 345 - maintainer: str - maintainer_email: str - requires_dist: list[str] - provides_dist: list[str] - obsoletes_dist: list[str] - requires_python: str - requires_external: list[str] - project_urls: dict[str, str] - - # Metadata 2.0 - # PEP 426 attempted to completely revamp the metadata format - # but got stuck without ever being able to build consensus on - # it and ultimately ended up withdrawn. - # - # However, a number of tools had started emitting METADATA with - # `2.0` Metadata-Version, so for historical reasons, this version - # was skipped. - - # Metadata 2.1 - PEP 566 - description_content_type: str - provides_extra: list[str] - - # Metadata 2.2 - PEP 643 - dynamic: list[str] - - # Metadata 2.3 - PEP 685 - # No new fields were added in PEP 685, just some edge case were - # tightened up to provide better interoptability. - - # Metadata 2.4 - PEP 639 - license_expression: str - license_files: list[str] - - -_STRING_FIELDS = { - "author", - "author_email", - "description", - "description_content_type", - "download_url", - "home_page", - "license", - "license_expression", - "maintainer", - "maintainer_email", - "metadata_version", - "name", - "requires_python", - "summary", - "version", -} - -_LIST_FIELDS = { - "classifiers", - "dynamic", - "license_files", - "obsoletes", - "obsoletes_dist", - "platforms", - "provides", - "provides_dist", - "provides_extra", - "requires", - "requires_dist", - "requires_external", - "supported_platforms", -} - -_DICT_FIELDS = { - "project_urls", -} - - -def _parse_keywords(data: str) -> list[str]: - """Split a string of comma-separated keywords into a list of keywords.""" - return [k.strip() for k in data.split(",")] - - -def _parse_project_urls(data: list[str]) -> dict[str, str]: - """Parse a list of label/URL string pairings separated by a comma.""" - urls = {} - for pair in data: - # Our logic is slightly tricky here as we want to try and do - # *something* reasonable with malformed data. - # - # The main thing that we have to worry about, is data that does - # not have a ',' at all to split the label from the Value. There - # isn't a singular right answer here, and we will fail validation - # later on (if the caller is validating) so it doesn't *really* - # matter, but since the missing value has to be an empty str - # and our return value is dict[str, str], if we let the key - # be the missing value, then they'd have multiple '' values that - # overwrite each other in a accumulating dict. - # - # The other potentional issue is that it's possible to have the - # same label multiple times in the metadata, with no solid "right" - # answer with what to do in that case. As such, we'll do the only - # thing we can, which is treat the field as unparseable and add it - # to our list of unparsed fields. - parts = [p.strip() for p in pair.split(",", 1)] - parts.extend([""] * (max(0, 2 - len(parts)))) # Ensure 2 items - - # TODO: The spec doesn't say anything about if the keys should be - # considered case sensitive or not... logically they should - # be case-preserving and case-insensitive, but doing that - # would open up more cases where we might have duplicate - # entries. - label, url = parts - if label in urls: - # The label already exists in our set of urls, so this field - # is unparseable, and we can just add the whole thing to our - # unparseable data and stop processing it. - raise KeyError("duplicate labels in project urls") - urls[label] = url - - return urls - - -def _get_payload(msg: email.message.Message, source: bytes | str) -> str: - """Get the body of the message.""" - # If our source is a str, then our caller has managed encodings for us, - # and we don't need to deal with it. - if isinstance(source, str): - payload = msg.get_payload() - assert isinstance(payload, str) - return payload - # If our source is a bytes, then we're managing the encoding and we need - # to deal with it. - else: - bpayload = msg.get_payload(decode=True) - assert isinstance(bpayload, bytes) - try: - return bpayload.decode("utf8", "strict") - except UnicodeDecodeError as exc: - raise ValueError("payload in an invalid encoding") from exc - - -# The various parse_FORMAT functions here are intended to be as lenient as -# possible in their parsing, while still returning a correctly typed -# RawMetadata. -# -# To aid in this, we also generally want to do as little touching of the -# data as possible, except where there are possibly some historic holdovers -# that make valid data awkward to work with. -# -# While this is a lower level, intermediate format than our ``Metadata`` -# class, some light touch ups can make a massive difference in usability. - -# Map METADATA fields to RawMetadata. -_EMAIL_TO_RAW_MAPPING = { - "author": "author", - "author-email": "author_email", - "classifier": "classifiers", - "description": "description", - "description-content-type": "description_content_type", - "download-url": "download_url", - "dynamic": "dynamic", - "home-page": "home_page", - "keywords": "keywords", - "license": "license", - "license-expression": "license_expression", - "license-file": "license_files", - "maintainer": "maintainer", - "maintainer-email": "maintainer_email", - "metadata-version": "metadata_version", - "name": "name", - "obsoletes": "obsoletes", - "obsoletes-dist": "obsoletes_dist", - "platform": "platforms", - "project-url": "project_urls", - "provides": "provides", - "provides-dist": "provides_dist", - "provides-extra": "provides_extra", - "requires": "requires", - "requires-dist": "requires_dist", - "requires-external": "requires_external", - "requires-python": "requires_python", - "summary": "summary", - "supported-platform": "supported_platforms", - "version": "version", -} -_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()} - - -def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]: - """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). - - This function returns a two-item tuple of dicts. The first dict is of - recognized fields from the core metadata specification. Fields that can be - parsed and translated into Python's built-in types are converted - appropriately. All other fields are left as-is. Fields that are allowed to - appear multiple times are stored as lists. - - The second dict contains all other fields from the metadata. This includes - any unrecognized fields. It also includes any fields which are expected to - be parsed into a built-in type but were not formatted appropriately. Finally, - any fields that are expected to appear only once but are repeated are - included in this dict. - - """ - raw: dict[str, str | list[str] | dict[str, str]] = {} - unparsed: dict[str, list[str]] = {} - - if isinstance(data, str): - parsed = email.parser.Parser(policy=email.policy.compat32).parsestr(data) - else: - parsed = email.parser.BytesParser(policy=email.policy.compat32).parsebytes(data) - - # We have to wrap parsed.keys() in a set, because in the case of multiple - # values for a key (a list), the key will appear multiple times in the - # list of keys, but we're avoiding that by using get_all(). - for name in frozenset(parsed.keys()): - # Header names in RFC are case insensitive, so we'll normalize to all - # lower case to make comparisons easier. - name = name.lower() - - # We use get_all() here, even for fields that aren't multiple use, - # because otherwise someone could have e.g. two Name fields, and we - # would just silently ignore it rather than doing something about it. - headers = parsed.get_all(name) or [] - - # The way the email module works when parsing bytes is that it - # unconditionally decodes the bytes as ascii using the surrogateescape - # handler. When you pull that data back out (such as with get_all() ), - # it looks to see if the str has any surrogate escapes, and if it does - # it wraps it in a Header object instead of returning the string. - # - # As such, we'll look for those Header objects, and fix up the encoding. - value = [] - # Flag if we have run into any issues processing the headers, thus - # signalling that the data belongs in 'unparsed'. - valid_encoding = True - for h in headers: - # It's unclear if this can return more types than just a Header or - # a str, so we'll just assert here to make sure. - assert isinstance(h, (email.header.Header, str)) - - # If it's a header object, we need to do our little dance to get - # the real data out of it. In cases where there is invalid data - # we're going to end up with mojibake, but there's no obvious, good - # way around that without reimplementing parts of the Header object - # ourselves. - # - # That should be fine since, if mojibacked happens, this key is - # going into the unparsed dict anyways. - if isinstance(h, email.header.Header): - # The Header object stores it's data as chunks, and each chunk - # can be independently encoded, so we'll need to check each - # of them. - chunks: list[tuple[bytes, str | None]] = [] - for bin, encoding in email.header.decode_header(h): - try: - bin.decode("utf8", "strict") - except UnicodeDecodeError: - # Enable mojibake. - encoding = "latin1" - valid_encoding = False - else: - encoding = "utf8" - chunks.append((bin, encoding)) - - # Turn our chunks back into a Header object, then let that - # Header object do the right thing to turn them into a - # string for us. - value.append(str(email.header.make_header(chunks))) - # This is already a string, so just add it. - else: - value.append(h) - - # We've processed all of our values to get them into a list of str, - # but we may have mojibake data, in which case this is an unparsed - # field. - if not valid_encoding: - unparsed[name] = value - continue - - raw_name = _EMAIL_TO_RAW_MAPPING.get(name) - if raw_name is None: - # This is a bit of a weird situation, we've encountered a key that - # we don't know what it means, so we don't know whether it's meant - # to be a list or not. - # - # Since we can't really tell one way or another, we'll just leave it - # as a list, even though it may be a single item list, because that's - # what makes the most sense for email headers. - unparsed[name] = value - continue - - # If this is one of our string fields, then we'll check to see if our - # value is a list of a single item. If it is then we'll assume that - # it was emitted as a single string, and unwrap the str from inside - # the list. - # - # If it's any other kind of data, then we haven't the faintest clue - # what we should parse it as, and we have to just add it to our list - # of unparsed stuff. - if raw_name in _STRING_FIELDS and len(value) == 1: - raw[raw_name] = value[0] - # If this is one of our list of string fields, then we can just assign - # the value, since email *only* has strings, and our get_all() call - # above ensures that this is a list. - elif raw_name in _LIST_FIELDS: - raw[raw_name] = value - # Special Case: Keywords - # The keywords field is implemented in the metadata spec as a str, - # but it conceptually is a list of strings, and is serialized using - # ", ".join(keywords), so we'll do some light data massaging to turn - # this into what it logically is. - elif raw_name == "keywords" and len(value) == 1: - raw[raw_name] = _parse_keywords(value[0]) - # Special Case: Project-URL - # The project urls is implemented in the metadata spec as a list of - # specially-formatted strings that represent a key and a value, which - # is fundamentally a mapping, however the email format doesn't support - # mappings in a sane way, so it was crammed into a list of strings - # instead. - # - # We will do a little light data massaging to turn this into a map as - # it logically should be. - elif raw_name == "project_urls": - try: - raw[raw_name] = _parse_project_urls(value) - except KeyError: - unparsed[name] = value - # Nothing that we've done has managed to parse this, so it'll just - # throw it in our unparseable data and move on. - else: - unparsed[name] = value - - # We need to support getting the Description from the message payload in - # addition to getting it from the the headers. This does mean, though, there - # is the possibility of it being set both ways, in which case we put both - # in 'unparsed' since we don't know which is right. - try: - payload = _get_payload(parsed, data) - except ValueError: - unparsed.setdefault("description", []).append( - parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload] - ) - else: - if payload: - # Check to see if we've already got a description, if so then both - # it, and this body move to unparseable. - if "description" in raw: - description_header = cast(str, raw.pop("description")) - unparsed.setdefault("description", []).extend( - [description_header, payload] - ) - elif "description" in unparsed: - unparsed["description"].append(payload) - else: - raw["description"] = payload - - # We need to cast our `raw` to a metadata, because a TypedDict only support - # literal key names, but we're computing our key names on purpose, but the - # way this function is implemented, our `TypedDict` can only have valid key - # names. - return cast(RawMetadata, raw), unparsed - - -_NOT_FOUND = object() - - -# Keep the two values in sync. -_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"] -_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"] - -_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"]) - - -class _Validator(Generic[T]): - """Validate a metadata field. - - All _process_*() methods correspond to a core metadata field. The method is - called with the field's raw value. If the raw value is valid it is returned - in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). - If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause - as appropriate). - """ - - name: str - raw_name: str - added: _MetadataVersion - - def __init__( - self, - *, - added: _MetadataVersion = "1.0", - ) -> None: - self.added = added - - def __set_name__(self, _owner: Metadata, name: str) -> None: - self.name = name - self.raw_name = _RAW_TO_EMAIL_MAPPING[name] - - def __get__(self, instance: Metadata, _owner: type[Metadata]) -> T: - # With Python 3.8, the caching can be replaced with functools.cached_property(). - # No need to check the cache as attribute lookup will resolve into the - # instance's __dict__ before __get__ is called. - cache = instance.__dict__ - value = instance._raw.get(self.name) - - # To make the _process_* methods easier, we'll check if the value is None - # and if this field is NOT a required attribute, and if both of those - # things are true, we'll skip the the converter. This will mean that the - # converters never have to deal with the None union. - if self.name in _REQUIRED_ATTRS or value is not None: - try: - converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}") - except AttributeError: - pass - else: - value = converter(value) - - cache[self.name] = value - try: - del instance._raw[self.name] # type: ignore[misc] - except KeyError: - pass - - return cast(T, value) - - def _invalid_metadata( - self, msg: str, cause: Exception | None = None - ) -> InvalidMetadata: - exc = InvalidMetadata( - self.raw_name, msg.format_map({"field": repr(self.raw_name)}) - ) - exc.__cause__ = cause - return exc - - def _process_metadata_version(self, value: str) -> _MetadataVersion: - # Implicitly makes Metadata-Version required. - if value not in _VALID_METADATA_VERSIONS: - raise self._invalid_metadata(f"{value!r} is not a valid metadata version") - return cast(_MetadataVersion, value) - - def _process_name(self, value: str) -> str: - if not value: - raise self._invalid_metadata("{field} is a required field") - # Validate the name as a side-effect. - try: - utils.canonicalize_name(value, validate=True) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return value - - def _process_version(self, value: str) -> version_module.Version: - if not value: - raise self._invalid_metadata("{field} is a required field") - try: - return version_module.parse(value) - except version_module.InvalidVersion as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_summary(self, value: str) -> str: - """Check the field contains no newlines.""" - if "\n" in value: - raise self._invalid_metadata("{field} must be a single line") - return value - - def _process_description_content_type(self, value: str) -> str: - content_types = {"text/plain", "text/x-rst", "text/markdown"} - message = email.message.EmailMessage() - message["content-type"] = value - - content_type, parameters = ( - # Defaults to `text/plain` if parsing failed. - message.get_content_type().lower(), - message["content-type"].params, - ) - # Check if content-type is valid or defaulted to `text/plain` and thus was - # not parseable. - if content_type not in content_types or content_type not in value.lower(): - raise self._invalid_metadata( - f"{{field}} must be one of {list(content_types)}, not {value!r}" - ) - - charset = parameters.get("charset", "UTF-8") - if charset != "UTF-8": - raise self._invalid_metadata( - f"{{field}} can only specify the UTF-8 charset, not {list(charset)}" - ) - - markdown_variants = {"GFM", "CommonMark"} - variant = parameters.get("variant", "GFM") # Use an acceptable default. - if content_type == "text/markdown" and variant not in markdown_variants: - raise self._invalid_metadata( - f"valid Markdown variants for {{field}} are {list(markdown_variants)}, " - f"not {variant!r}", - ) - return value - - def _process_dynamic(self, value: list[str]) -> list[str]: - for dynamic_field in map(str.lower, value): - if dynamic_field in {"name", "version", "metadata-version"}: - raise self._invalid_metadata( - f"{dynamic_field!r} is not allowed as a dynamic field" - ) - elif dynamic_field not in _EMAIL_TO_RAW_MAPPING: - raise self._invalid_metadata( - f"{dynamic_field!r} is not a valid dynamic field" - ) - return list(map(str.lower, value)) - - def _process_provides_extra( - self, - value: list[str], - ) -> list[utils.NormalizedName]: - normalized_names = [] - try: - for name in value: - normalized_names.append(utils.canonicalize_name(name, validate=True)) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return normalized_names - - def _process_requires_python(self, value: str) -> specifiers.SpecifierSet: - try: - return specifiers.SpecifierSet(value) - except specifiers.InvalidSpecifier as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_requires_dist( - self, - value: list[str], - ) -> list[requirements.Requirement]: - reqs = [] - try: - for req in value: - reqs.append(requirements.Requirement(req)) - except requirements.InvalidRequirement as exc: - raise self._invalid_metadata( - f"{req!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return reqs - - def _process_license_expression( - self, value: str - ) -> NormalizedLicenseExpression | None: - try: - return licenses.canonicalize_license_expression(value) - except ValueError as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_license_files(self, value: list[str]) -> list[str]: - paths = [] - for path in value: - if ".." in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, " - "parent directory indicators are not allowed" - ) - if "*" in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be resolved" - ) - if ( - pathlib.PurePosixPath(path).is_absolute() - or pathlib.PureWindowsPath(path).is_absolute() - ): - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be relative" - ) - if pathlib.PureWindowsPath(path).as_posix() != path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, " - "paths must use '/' delimiter" - ) - paths.append(path) - return paths - - -class Metadata: - """Representation of distribution metadata. - - Compared to :class:`RawMetadata`, this class provides objects representing - metadata fields instead of only using built-in types. Any invalid metadata - will cause :exc:`InvalidMetadata` to be raised (with a - :py:attr:`~BaseException.__cause__` attribute as appropriate). - """ - - _raw: RawMetadata - - @classmethod - def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> Metadata: - """Create an instance from :class:`RawMetadata`. - - If *validate* is true, all metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - ins = cls() - ins._raw = data.copy() # Mutations occur due to caching enriched values. - - if validate: - exceptions: list[Exception] = [] - try: - metadata_version = ins.metadata_version - metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version) - except InvalidMetadata as metadata_version_exc: - exceptions.append(metadata_version_exc) - metadata_version = None - - # Make sure to check for the fields that are present, the required - # fields (so their absence can be reported). - fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS - # Remove fields that have already been checked. - fields_to_check -= {"metadata_version"} - - for key in fields_to_check: - try: - if metadata_version: - # Can't use getattr() as that triggers descriptor protocol which - # will fail due to no value for the instance argument. - try: - field_metadata_version = cls.__dict__[key].added - except KeyError: - exc = InvalidMetadata(key, f"unrecognized field: {key!r}") - exceptions.append(exc) - continue - field_age = _VALID_METADATA_VERSIONS.index( - field_metadata_version - ) - if field_age > metadata_age: - field = _RAW_TO_EMAIL_MAPPING[key] - exc = InvalidMetadata( - field, - f"{field} introduced in metadata version " - f"{field_metadata_version}, not {metadata_version}", - ) - exceptions.append(exc) - continue - getattr(ins, key) - except InvalidMetadata as exc: - exceptions.append(exc) - - if exceptions: - raise ExceptionGroup("invalid metadata", exceptions) - - return ins - - @classmethod - def from_email(cls, data: bytes | str, *, validate: bool = True) -> Metadata: - """Parse metadata from email headers. - - If *validate* is true, the metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - raw, unparsed = parse_email(data) - - if validate: - exceptions: list[Exception] = [] - for unparsed_key in unparsed: - if unparsed_key in _EMAIL_TO_RAW_MAPPING: - message = f"{unparsed_key!r} has invalid data" - else: - message = f"unrecognized field: {unparsed_key!r}" - exceptions.append(InvalidMetadata(unparsed_key, message)) - - if exceptions: - raise ExceptionGroup("unparsed", exceptions) - - try: - return cls.from_raw(raw, validate=validate) - except ExceptionGroup as exc_group: - raise ExceptionGroup( - "invalid or unparsed metadata", exc_group.exceptions - ) from None - - metadata_version: _Validator[_MetadataVersion] = _Validator() - """:external:ref:`core-metadata-metadata-version` - (required; validated to be a valid metadata version)""" - # `name` is not normalized/typed to NormalizedName so as to provide access to - # the original/raw name. - name: _Validator[str] = _Validator() - """:external:ref:`core-metadata-name` - (required; validated using :func:`~packaging.utils.canonicalize_name` and its - *validate* parameter)""" - version: _Validator[version_module.Version] = _Validator() - """:external:ref:`core-metadata-version` (required)""" - dynamic: _Validator[list[str] | None] = _Validator( - added="2.2", - ) - """:external:ref:`core-metadata-dynamic` - (validated against core metadata field names and lowercased)""" - platforms: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-platform`""" - supported_platforms: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-supported-platform`""" - summary: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-summary` (validated to contain no newlines)""" - description: _Validator[str | None] = _Validator() # TODO 2.1: can be in body - """:external:ref:`core-metadata-description`""" - description_content_type: _Validator[str | None] = _Validator(added="2.1") - """:external:ref:`core-metadata-description-content-type` (validated)""" - keywords: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-keywords`""" - home_page: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-home-page`""" - download_url: _Validator[str | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-download-url`""" - author: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author`""" - author_email: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author-email`""" - maintainer: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer`""" - maintainer_email: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer-email`""" - license: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-license`""" - license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator( - added="2.4" - ) - """:external:ref:`core-metadata-license-expression`""" - license_files: _Validator[list[str] | None] = _Validator(added="2.4") - """:external:ref:`core-metadata-license-file`""" - classifiers: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-classifier`""" - requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-dist`""" - requires_python: _Validator[specifiers.SpecifierSet | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-python`""" - # Because `Requires-External` allows for non-PEP 440 version specifiers, we - # don't do any processing on the values. - requires_external: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-requires-external`""" - project_urls: _Validator[dict[str, str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-project-url`""" - # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation - # regardless of metadata version. - provides_extra: _Validator[list[utils.NormalizedName] | None] = _Validator( - added="2.1", - ) - """:external:ref:`core-metadata-provides-extra`""" - provides_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-provides-dist`""" - obsoletes_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-obsoletes-dist`""" - requires: _Validator[list[str] | None] = _Validator(added="1.1") - """``Requires`` (deprecated)""" - provides: _Validator[list[str] | None] = _Validator(added="1.1") - """``Provides`` (deprecated)""" - obsoletes: _Validator[list[str] | None] = _Validator(added="1.1") - """``Obsoletes`` (deprecated)""" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py deleted file mode 100644 index 4e068c9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py +++ /dev/null @@ -1,91 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import annotations - -from typing import Any, Iterator - -from ._parser import parse_requirement as _parse_requirement -from ._tokenizer import ParserSyntaxError -from .markers import Marker, _normalize_extra_values -from .specifiers import SpecifierSet -from .utils import canonicalize_name - - -class InvalidRequirement(ValueError): - """ - An invalid requirement was found, users should refer to PEP 508. - """ - - -class Requirement: - """Parse a requirement. - - Parse a given requirement string into its parts, such as name, specifier, - URL, and extras. Raises InvalidRequirement on a badly-formed requirement - string. - """ - - # TODO: Can we test whether something is contained within a requirement? - # If so how do we do that? Do we need to test against the _name_ of - # the thing as well as the version? What about the markers? - # TODO: Can we normalize the name and extra name? - - def __init__(self, requirement_string: str) -> None: - try: - parsed = _parse_requirement(requirement_string) - except ParserSyntaxError as e: - raise InvalidRequirement(str(e)) from e - - self.name: str = parsed.name - self.url: str | None = parsed.url or None - self.extras: set[str] = set(parsed.extras or []) - self.specifier: SpecifierSet = SpecifierSet(parsed.specifier) - self.marker: Marker | None = None - if parsed.marker is not None: - self.marker = Marker.__new__(Marker) - self.marker._markers = _normalize_extra_values(parsed.marker) - - def _iter_parts(self, name: str) -> Iterator[str]: - yield name - - if self.extras: - formatted_extras = ",".join(sorted(self.extras)) - yield f"[{formatted_extras}]" - - if self.specifier: - yield str(self.specifier) - - if self.url: - yield f"@ {self.url}" - if self.marker: - yield " " - - if self.marker: - yield f"; {self.marker}" - - def __str__(self) -> str: - return "".join(self._iter_parts(self.name)) - - def __repr__(self) -> str: - return f"" - - def __hash__(self) -> int: - return hash( - ( - self.__class__.__name__, - *self._iter_parts(canonicalize_name(self.name)), - ) - ) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Requirement): - return NotImplemented - - return ( - canonicalize_name(self.name) == canonicalize_name(other.name) - and self.extras == other.extras - and self.specifier == other.specifier - and self.url == other.url - and self.marker == other.marker - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py deleted file mode 100644 index f18016e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py +++ /dev/null @@ -1,1020 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier - from pip._vendor.packaging.version import Version -""" - -from __future__ import annotations - -import abc -import itertools -import re -from typing import Callable, Iterable, Iterator, TypeVar, Union - -from .utils import canonicalize_version -from .version import Version - -UnparsedVersion = Union[Version, str] -UnparsedVersionVar = TypeVar("UnparsedVersionVar", bound=UnparsedVersion) -CallableOperator = Callable[[Version, str], bool] - - -def _coerce_version(version: UnparsedVersion) -> Version: - if not isinstance(version, Version): - version = Version(version) - return version - - -class InvalidSpecifier(ValueError): - """ - Raised when attempting to create a :class:`Specifier` with a specifier - string that is invalid. - - >>> Specifier("lolwat") - Traceback (most recent call last): - ... - packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat' - """ - - -class BaseSpecifier(metaclass=abc.ABCMeta): - @abc.abstractmethod - def __str__(self) -> str: - """ - Returns the str representation of this Specifier-like object. This - should be representative of the Specifier itself. - """ - - @abc.abstractmethod - def __hash__(self) -> int: - """ - Returns a hash value for this Specifier-like object. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Returns a boolean representing whether or not the two Specifier-like - objects are equal. - - :param other: The other object to check against. - """ - - @property - @abc.abstractmethod - def prereleases(self) -> bool | None: - """Whether or not pre-releases as a whole are allowed. - - This can be set to either ``True`` or ``False`` to explicitly enable or disable - prereleases or it can be set to ``None`` (the default) to use default semantics. - """ - - @prereleases.setter - def prereleases(self, value: bool) -> None: - """Setter for :attr:`prereleases`. - - :param value: The value to set. - """ - - @abc.abstractmethod - def contains(self, item: str, prereleases: bool | None = None) -> bool: - """ - Determines if the given item is contained within this specifier. - """ - - @abc.abstractmethod - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """ - Takes an iterable of items and filters them so that only items which - are contained within this specifier are allowed in it. - """ - - -class Specifier(BaseSpecifier): - """This class abstracts handling of version specifiers. - - .. tip:: - - It is generally not required to instantiate this manually. You should instead - prefer to work with :class:`SpecifierSet` instead, which can parse - comma-separated version specifiers (which is what package metadata contains). - """ - - _operator_regex_str = r""" - (?P(~=|==|!=|<=|>=|<|>|===)) - """ - _version_regex_str = r""" - (?P - (?: - # The identity operators allow for an escape hatch that will - # do an exact string match of the version you wish to install. - # This will not be parsed by PEP 440 and we cannot determine - # any semantic meaning from it. This operator is discouraged - # but included entirely as an escape hatch. - (?<====) # Only match for the identity operator - \s* - [^\s;)]* # The arbitrary version can be just about anything, - # we match everything except for whitespace, a - # semi-colon for marker support, and a closing paren - # since versions can be enclosed in them. - ) - | - (?: - # The (non)equality operators allow for wild card and local - # versions to be specified so we have to define these two - # operators separately to enable that. - (?<===|!=) # Only match for equals and not equals - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - - # You cannot use a wild card and a pre-release, post-release, a dev or - # local version together so group them with a | and make them optional. - (?: - \.\* # Wild card syntax of .* - | - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local - )? - ) - | - (?: - # The compatible operator requires at least two digits in the - # release segment. - (?<=~=) # Only match for the compatible operator - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - | - (?: - # All other operators only allow a sub set of what the - # (non)equality operators do. Specifically they do not allow - # local versions to be specified nor do they allow the prefix - # matching wild cards. - (?=": "greater_than_equal", - "<": "less_than", - ">": "greater_than", - "===": "arbitrary", - } - - def __init__(self, spec: str = "", prereleases: bool | None = None) -> None: - """Initialize a Specifier instance. - - :param spec: - The string representation of a specifier which will be parsed and - normalized before use. - :param prereleases: - This tells the specifier if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - :raises InvalidSpecifier: - If the given specifier is invalid (i.e. bad syntax). - """ - match = self._regex.search(spec) - if not match: - raise InvalidSpecifier(f"Invalid specifier: {spec!r}") - - self._spec: tuple[str, str] = ( - match.group("operator").strip(), - match.group("version").strip(), - ) - - # Store whether or not this Specifier should accept prereleases - self._prereleases = prereleases - - # https://github.com/python/mypy/pull/13475#pullrequestreview-1079784515 - @property # type: ignore[override] - def prereleases(self) -> bool: - # If there is an explicit prereleases set for this, then we'll just - # blindly use that. - if self._prereleases is not None: - return self._prereleases - - # Look at all of our specifiers and determine if they are inclusive - # operators, and if they are if they are including an explicit - # prerelease. - operator, version = self._spec - if operator in ["==", ">=", "<=", "~=", "===", ">", "<"]: - # The == specifier can include a trailing .*, if it does we - # want to remove before parsing. - if operator == "==" and version.endswith(".*"): - version = version[:-2] - - # Parse the version, and if it is a pre-release than this - # specifier allows pre-releases. - if Version(version).is_prerelease: - return True - - return False - - @prereleases.setter - def prereleases(self, value: bool) -> None: - self._prereleases = value - - @property - def operator(self) -> str: - """The operator of this specifier. - - >>> Specifier("==1.2.3").operator - '==' - """ - return self._spec[0] - - @property - def version(self) -> str: - """The version of this specifier. - - >>> Specifier("==1.2.3").version - '1.2.3' - """ - return self._spec[1] - - def __repr__(self) -> str: - """A representation of the Specifier that shows all internal state. - - >>> Specifier('>=1.0.0') - =1.0.0')> - >>> Specifier('>=1.0.0', prereleases=False) - =1.0.0', prereleases=False)> - >>> Specifier('>=1.0.0', prereleases=True) - =1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"<{self.__class__.__name__}({str(self)!r}{pre})>" - - def __str__(self) -> str: - """A string representation of the Specifier that can be round-tripped. - - >>> str(Specifier('>=1.0.0')) - '>=1.0.0' - >>> str(Specifier('>=1.0.0', prereleases=False)) - '>=1.0.0' - """ - return "{}{}".format(*self._spec) - - @property - def _canonical_spec(self) -> tuple[str, str]: - canonical_version = canonicalize_version( - self._spec[1], - strip_trailing_zero=(self._spec[0] != "~="), - ) - return self._spec[0], canonical_version - - def __hash__(self) -> int: - return hash(self._canonical_spec) - - def __eq__(self, other: object) -> bool: - """Whether or not the two Specifier-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0") - True - >>> (Specifier("==1.2.3", prereleases=False) == - ... Specifier("==1.2.3", prereleases=True)) - True - >>> Specifier("==1.2.3") == "==1.2.3" - True - >>> Specifier("==1.2.3") == Specifier("==1.2.4") - False - >>> Specifier("==1.2.3") == Specifier("~=1.2.3") - False - """ - if isinstance(other, str): - try: - other = self.__class__(str(other)) - except InvalidSpecifier: - return NotImplemented - elif not isinstance(other, self.__class__): - return NotImplemented - - return self._canonical_spec == other._canonical_spec - - def _get_operator(self, op: str) -> CallableOperator: - operator_callable: CallableOperator = getattr( - self, f"_compare_{self._operators[op]}" - ) - return operator_callable - - def _compare_compatible(self, prospective: Version, spec: str) -> bool: - # Compatible releases have an equivalent combination of >= and ==. That - # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to - # implement this in terms of the other specifiers instead of - # implementing it ourselves. The only thing we need to do is construct - # the other specifiers. - - # We want everything but the last item in the version, but we want to - # ignore suffix segments. - prefix = _version_join( - list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] - ) - - # Add the prefix notation to the end of our string - prefix += ".*" - - return self._get_operator(">=")(prospective, spec) and self._get_operator("==")( - prospective, prefix - ) - - def _compare_equal(self, prospective: Version, spec: str) -> bool: - # We need special logic to handle prefix matching - if spec.endswith(".*"): - # In the case of prefix matching we want to ignore local segment. - normalized_prospective = canonicalize_version( - prospective.public, strip_trailing_zero=False - ) - # Get the normalized version string ignoring the trailing .* - normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False) - # Split the spec out by bangs and dots, and pretend that there is - # an implicit dot in between a release segment and a pre-release segment. - split_spec = _version_split(normalized_spec) - - # Split the prospective version out by bangs and dots, and pretend - # that there is an implicit dot in between a release segment and - # a pre-release segment. - split_prospective = _version_split(normalized_prospective) - - # 0-pad the prospective version before shortening it to get the correct - # shortened version. - padded_prospective, _ = _pad_version(split_prospective, split_spec) - - # Shorten the prospective version to be the same length as the spec - # so that we can determine if the specifier is a prefix of the - # prospective version or not. - shortened_prospective = padded_prospective[: len(split_spec)] - - return shortened_prospective == split_spec - else: - # Convert our spec string into a Version - spec_version = Version(spec) - - # If the specifier does not have a local segment, then we want to - # act as if the prospective version also does not have a local - # segment. - if not spec_version.local: - prospective = Version(prospective.public) - - return prospective == spec_version - - def _compare_not_equal(self, prospective: Version, spec: str) -> bool: - return not self._compare_equal(prospective, spec) - - def _compare_less_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return Version(prospective.public) <= Version(spec) - - def _compare_greater_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return Version(prospective.public) >= Version(spec) - - def _compare_less_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = Version(spec_str) - - # Check to see if the prospective version is less than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective < spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a pre-release version, that we do not accept pre-release - # versions for the version mentioned in the specifier (e.g. <3.1 should - # not match 3.1.dev0, but should match 3.0.dev0). - if not spec.is_prerelease and prospective.is_prerelease: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # If we've gotten to here, it means that prospective version is both - # less than the spec version *and* it's not a pre-release of the same - # version in the spec. - return True - - def _compare_greater_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = Version(spec_str) - - # Check to see if the prospective version is greater than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective > spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a post-release version, that we do not accept - # post-release versions for the version mentioned in the specifier - # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). - if not spec.is_postrelease and prospective.is_postrelease: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # Ensure that we do not allow a local version of the version mentioned - # in the specifier, which is technically greater than, to match. - if prospective.local is not None: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # If we've gotten to here, it means that prospective version is both - # greater than the spec version *and* it's not a pre-release of the - # same version in the spec. - return True - - def _compare_arbitrary(self, prospective: Version, spec: str) -> bool: - return str(prospective).lower() == str(spec).lower() - - def __contains__(self, item: str | Version) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in Specifier(">=1.2.3") - True - >>> Version("1.2.3") in Specifier(">=1.2.3") - True - >>> "1.0.0" in Specifier(">=1.2.3") - False - >>> "1.3.0a1" in Specifier(">=1.2.3") - False - >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True) - True - """ - return self.contains(item) - - def contains(self, item: UnparsedVersion, prereleases: bool | None = None) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this Specifier. If set to - ``None`` (the default), it uses :attr:`prereleases` to determine - whether or not prereleases are allowed. - - >>> Specifier(">=1.2.3").contains("1.2.3") - True - >>> Specifier(">=1.2.3").contains(Version("1.2.3")) - True - >>> Specifier(">=1.2.3").contains("1.0.0") - False - >>> Specifier(">=1.2.3").contains("1.3.0a1") - False - >>> Specifier(">=1.2.3", prereleases=True).contains("1.3.0a1") - True - >>> Specifier(">=1.2.3").contains("1.3.0a1", prereleases=True) - True - """ - - # Determine if prereleases are to be allowed or not. - if prereleases is None: - prereleases = self.prereleases - - # Normalize item to a Version, this allows us to have a shortcut for - # "2.0" in Specifier(">=2") - normalized_item = _coerce_version(item) - - # Determine if we should be supporting prereleases in this specifier - # or not, if we do not support prereleases than we can short circuit - # logic if this version is a prereleases. - if normalized_item.is_prerelease and not prereleases: - return False - - # Actually do the comparison to determine if this item is contained - # within this Specifier or not. - operator_callable: CallableOperator = self._get_operator(self.operator) - return operator_callable(normalized_item, self.version) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifier. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will be intelligently decide whether to allow - prereleases or not (based on the :attr:`prereleases` attribute, and - whether the only versions matching are prereleases). - - This method is smarter than just ``filter(Specifier().contains, [...])`` - because it implements the rule from :pep:`440` that a prerelease item - SHOULD be accepted if no other versions match the given specifier. - - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")])) - ['1.2.3', '1.3', ] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"])) - ['1.5a1'] - >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - """ - - yielded = False - found_prereleases = [] - - kw = {"prereleases": prereleases if prereleases is not None else True} - - # Attempt to iterate over all the values in the iterable and if any of - # them match, yield them. - for version in iterable: - parsed_version = _coerce_version(version) - - if self.contains(parsed_version, **kw): - # If our version is a prerelease, and we were not set to allow - # prereleases, then we'll store it for later in case nothing - # else matches this specifier. - if parsed_version.is_prerelease and not ( - prereleases or self.prereleases - ): - found_prereleases.append(version) - # Either this is not a prerelease, or we should have been - # accepting prereleases from the beginning. - else: - yielded = True - yield version - - # Now that we've iterated over everything, determine if we've yielded - # any values, and if we have not and we have any prereleases stored up - # then we will go ahead and yield the prereleases. - if not yielded and found_prereleases: - for version in found_prereleases: - yield version - - -_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") - - -def _version_split(version: str) -> list[str]: - """Split version into components. - - The split components are intended for version comparison. The logic does - not attempt to retain the original version string, so joining the - components back with :func:`_version_join` may not produce the original - version string. - """ - result: list[str] = [] - - epoch, _, rest = version.rpartition("!") - result.append(epoch or "0") - - for item in rest.split("."): - match = _prefix_regex.search(item) - if match: - result.extend(match.groups()) - else: - result.append(item) - return result - - -def _version_join(components: list[str]) -> str: - """Join split version components into a version string. - - This function assumes the input came from :func:`_version_split`, where the - first component must be the epoch (either empty or numeric), and all other - components numeric. - """ - epoch, *rest = components - return f"{epoch}!{'.'.join(rest)}" - - -def _is_not_suffix(segment: str) -> bool: - return not any( - segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") - ) - - -def _pad_version(left: list[str], right: list[str]) -> tuple[list[str], list[str]]: - left_split, right_split = [], [] - - # Get the release segment of our versions - left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) - right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) - - # Get the rest of our versions - left_split.append(left[len(left_split[0]) :]) - right_split.append(right[len(right_split[0]) :]) - - # Insert our padding - left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) - right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) - - return ( - list(itertools.chain.from_iterable(left_split)), - list(itertools.chain.from_iterable(right_split)), - ) - - -class SpecifierSet(BaseSpecifier): - """This class abstracts handling of a set of version specifiers. - - It can be passed a single specifier (``>=3.0``), a comma-separated list of - specifiers (``>=3.0,!=3.1``), or no specifier at all. - """ - - def __init__( - self, - specifiers: str | Iterable[Specifier] = "", - prereleases: bool | None = None, - ) -> None: - """Initialize a SpecifierSet instance. - - :param specifiers: - The string representation of a specifier or a comma-separated list of - specifiers which will be parsed and normalized before use. - May also be an iterable of ``Specifier`` instances, which will be used - as is. - :param prereleases: - This tells the SpecifierSet if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - - :raises InvalidSpecifier: - If the given ``specifiers`` are not parseable than this exception will be - raised. - """ - - if isinstance(specifiers, str): - # Split on `,` to break each individual specifier into its own item, and - # strip each item to remove leading/trailing whitespace. - split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - - # Make each individual specifier a Specifier and save in a frozen set - # for later. - self._specs = frozenset(map(Specifier, split_specifiers)) - else: - # Save the supplied specifiers in a frozen set. - self._specs = frozenset(specifiers) - - # Store our prereleases value so we can use it later to determine if - # we accept prereleases or not. - self._prereleases = prereleases - - @property - def prereleases(self) -> bool | None: - # If we have been given an explicit prerelease modifier, then we'll - # pass that through here. - if self._prereleases is not None: - return self._prereleases - - # If we don't have any specifiers, and we don't have a forced value, - # then we'll just return None since we don't know if this should have - # pre-releases or not. - if not self._specs: - return None - - # Otherwise we'll see if any of the given specifiers accept - # prereleases, if any of them do we'll return True, otherwise False. - return any(s.prereleases for s in self._specs) - - @prereleases.setter - def prereleases(self, value: bool) -> None: - self._prereleases = value - - def __repr__(self) -> str: - """A representation of the specifier set that shows all internal state. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> SpecifierSet('>=1.0.0,!=2.0.0') - =1.0.0')> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False) - =1.0.0', prereleases=False)> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True) - =1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"" - - def __str__(self) -> str: - """A string representation of the specifier set that can be round-tripped. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> str(SpecifierSet(">=1.0.0,!=1.0.1")) - '!=1.0.1,>=1.0.0' - >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False)) - '!=1.0.1,>=1.0.0' - """ - return ",".join(sorted(str(s) for s in self._specs)) - - def __hash__(self) -> int: - return hash(self._specs) - - def __and__(self, other: SpecifierSet | str) -> SpecifierSet: - """Return a SpecifierSet which is a combination of the two sets. - - :param other: The other object to combine with. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1' - =1.0.0')> - >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1') - =1.0.0')> - """ - if isinstance(other, str): - other = SpecifierSet(other) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - specifier = SpecifierSet() - specifier._specs = frozenset(self._specs | other._specs) - - if self._prereleases is None and other._prereleases is not None: - specifier._prereleases = other._prereleases - elif self._prereleases is not None and other._prereleases is None: - specifier._prereleases = self._prereleases - elif self._prereleases == other._prereleases: - specifier._prereleases = self._prereleases - else: - raise ValueError( - "Cannot combine SpecifierSets with True and False prerelease " - "overrides." - ) - - return specifier - - def __eq__(self, other: object) -> bool: - """Whether or not the two SpecifierSet-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) == - ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1" - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2") - False - """ - if isinstance(other, (str, Specifier)): - other = SpecifierSet(str(other)) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - return self._specs == other._specs - - def __len__(self) -> int: - """Returns the number of specifiers in this specifier set.""" - return len(self._specs) - - def __iter__(self) -> Iterator[Specifier]: - """ - Returns an iterator over all the underlying :class:`Specifier` instances - in this specifier set. - - >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str) - [, =1.0.0')>] - """ - return iter(self._specs) - - def __contains__(self, item: UnparsedVersion) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1") - False - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1") - False - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True) - True - """ - return self.contains(item) - - def contains( - self, - item: UnparsedVersion, - prereleases: bool | None = None, - installed: bool | None = None, - ) -> bool: - """Return whether or not the item is contained in this SpecifierSet. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this SpecifierSet. If set to - ``None`` (the default), it uses :attr:`prereleases` to determine - whether or not prereleases are allowed. - - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3")) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True).contains("1.3.0a1") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True) - True - """ - # Ensure that our item is a Version instance. - if not isinstance(item, Version): - item = Version(item) - - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None: - prereleases = self.prereleases - - # We can determine if we're going to allow pre-releases by looking to - # see if any of the underlying items supports them. If none of them do - # and this item is a pre-release then we do not allow it and we can - # short circuit that here. - # Note: This means that 1.0.dev1 would not be contained in something - # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 - if not prereleases and item.is_prerelease: - return False - - if installed and item.is_prerelease: - item = Version(item.base_version) - - # We simply dispatch to the underlying specs here to make sure that the - # given version is contained within all of them. - # Note: This use of all() here means that an empty set of specifiers - # will always return True, this is an explicit design decision. - return all(s.contains(item, prereleases=prereleases) for s in self._specs) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifiers in this set. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will be intelligently decide whether to allow - prereleases or not (based on the :attr:`prereleases` attribute, and - whether the only versions matching are prereleases). - - This method is smarter than just ``filter(SpecifierSet(...).contains, [...])`` - because it implements the rule from :pep:`440` that a prerelease item - SHOULD be accepted if no other versions match the given specifier. - - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")])) - ['1.3', ] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"])) - [] - >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - - An "empty" SpecifierSet will filter items based on the presence of prerelease - versions in the set. - - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet("").filter(["1.5a1"])) - ['1.5a1'] - >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - """ - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None: - prereleases = self.prereleases - - # If we have any specifiers, then we want to wrap our iterable in the - # filter method for each one, this will act as a logical AND amongst - # each specifier. - if self._specs: - for spec in self._specs: - iterable = spec.filter(iterable, prereleases=bool(prereleases)) - return iter(iterable) - # If we do not have any specifiers, then we need to have a rough filter - # which will filter out any pre-releases, unless there are no final - # releases. - else: - filtered: list[UnparsedVersionVar] = [] - found_prereleases: list[UnparsedVersionVar] = [] - - for item in iterable: - parsed_version = _coerce_version(item) - - # Store any item which is a pre-release for later unless we've - # already found a final version or we are accepting prereleases - if parsed_version.is_prerelease and not prereleases: - if not filtered: - found_prereleases.append(item) - else: - filtered.append(item) - - # If we've found no items except for pre-releases, then we'll go - # ahead and use the pre-releases - if not filtered and found_prereleases and prereleases is None: - return iter(found_prereleases) - - return iter(filtered) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py deleted file mode 100644 index f590340..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py +++ /dev/null @@ -1,617 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import logging -import platform -import re -import struct -import subprocess -import sys -import sysconfig -from importlib.machinery import EXTENSION_SUFFIXES -from typing import ( - Iterable, - Iterator, - Sequence, - Tuple, - cast, -) - -from . import _manylinux, _musllinux - -logger = logging.getLogger(__name__) - -PythonVersion = Sequence[int] -AppleVersion = Tuple[int, int] - -INTERPRETER_SHORT_NAMES: dict[str, str] = { - "python": "py", # Generic. - "cpython": "cp", - "pypy": "pp", - "ironpython": "ip", - "jython": "jy", -} - - -_32_BIT_INTERPRETER = struct.calcsize("P") == 4 - - -class Tag: - """ - A representation of the tag triple for a wheel. - - Instances are considered immutable and thus are hashable. Equality checking - is also supported. - """ - - __slots__ = ["_abi", "_hash", "_interpreter", "_platform"] - - def __init__(self, interpreter: str, abi: str, platform: str) -> None: - self._interpreter = interpreter.lower() - self._abi = abi.lower() - self._platform = platform.lower() - # The __hash__ of every single element in a Set[Tag] will be evaluated each time - # that a set calls its `.disjoint()` method, which may be called hundreds of - # times when scanning a page of links for packages with tags matching that - # Set[Tag]. Pre-computing the value here produces significant speedups for - # downstream consumers. - self._hash = hash((self._interpreter, self._abi, self._platform)) - - @property - def interpreter(self) -> str: - return self._interpreter - - @property - def abi(self) -> str: - return self._abi - - @property - def platform(self) -> str: - return self._platform - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Tag): - return NotImplemented - - return ( - (self._hash == other._hash) # Short-circuit ASAP for perf reasons. - and (self._platform == other._platform) - and (self._abi == other._abi) - and (self._interpreter == other._interpreter) - ) - - def __hash__(self) -> int: - return self._hash - - def __str__(self) -> str: - return f"{self._interpreter}-{self._abi}-{self._platform}" - - def __repr__(self) -> str: - return f"<{self} @ {id(self)}>" - - -def parse_tag(tag: str) -> frozenset[Tag]: - """ - Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances. - - Returning a set is required due to the possibility that the tag is a - compressed tag set. - """ - tags = set() - interpreters, abis, platforms = tag.split("-") - for interpreter in interpreters.split("."): - for abi in abis.split("."): - for platform_ in platforms.split("."): - tags.add(Tag(interpreter, abi, platform_)) - return frozenset(tags) - - -def _get_config_var(name: str, warn: bool = False) -> int | str | None: - value: int | str | None = sysconfig.get_config_var(name) - if value is None and warn: - logger.debug( - "Config variable '%s' is unset, Python ABI tag may be incorrect", name - ) - return value - - -def _normalize_string(string: str) -> str: - return string.replace(".", "_").replace("-", "_").replace(" ", "_") - - -def _is_threaded_cpython(abis: list[str]) -> bool: - """ - Determine if the ABI corresponds to a threaded (`--disable-gil`) build. - - The threaded builds are indicated by a "t" in the abiflags. - """ - if len(abis) == 0: - return False - # expect e.g., cp313 - m = re.match(r"cp\d+(.*)", abis[0]) - if not m: - return False - abiflags = m.group(1) - return "t" in abiflags - - -def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool: - """ - Determine if the Python version supports abi3. - - PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`) - builds do not support abi3. - """ - return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading - - -def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> list[str]: - py_version = tuple(py_version) # To allow for version comparison. - abis = [] - version = _version_nodot(py_version[:2]) - threading = debug = pymalloc = ucs4 = "" - with_debug = _get_config_var("Py_DEBUG", warn) - has_refcount = hasattr(sys, "gettotalrefcount") - # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled - # extension modules is the best option. - # https://github.com/pypa/pip/issues/3383#issuecomment-173267692 - has_ext = "_d.pyd" in EXTENSION_SUFFIXES - if with_debug or (with_debug is None and (has_refcount or has_ext)): - debug = "d" - if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn): - threading = "t" - if py_version < (3, 8): - with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) - if with_pymalloc or with_pymalloc is None: - pymalloc = "m" - if py_version < (3, 3): - unicode_size = _get_config_var("Py_UNICODE_SIZE", warn) - if unicode_size == 4 or ( - unicode_size is None and sys.maxunicode == 0x10FFFF - ): - ucs4 = "u" - elif debug: - # Debug builds can also load "normal" extension modules. - # We can also assume no UCS-4 or pymalloc requirement. - abis.append(f"cp{version}{threading}") - abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}") - return abis - - -def cpython_tags( - python_version: PythonVersion | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a CPython interpreter. - - The tags consist of: - - cp-- - - cp-abi3- - - cp-none- - - cp-abi3- # Older Python versions down to 3.2. - - If python_version only specifies a major version then user-provided ABIs and - the 'none' ABItag will be used. - - If 'abi3' or 'none' are specified in 'abis' then they will be yielded at - their normal position and not at the beginning. - """ - if not python_version: - python_version = sys.version_info[:2] - - interpreter = f"cp{_version_nodot(python_version[:2])}" - - if abis is None: - if len(python_version) > 1: - abis = _cpython_abis(python_version, warn) - else: - abis = [] - abis = list(abis) - # 'abi3' and 'none' are explicitly handled later. - for explicit_abi in ("abi3", "none"): - try: - abis.remove(explicit_abi) - except ValueError: - pass - - platforms = list(platforms or platform_tags()) - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - threading = _is_threaded_cpython(abis) - use_abi3 = _abi3_applies(python_version, threading) - if use_abi3: - yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) - yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) - - if use_abi3: - for minor_version in range(python_version[1] - 1, 1, -1): - for platform_ in platforms: - version = _version_nodot((python_version[0], minor_version)) - interpreter = f"cp{version}" - yield Tag(interpreter, "abi3", platform_) - - -def _generic_abi() -> list[str]: - """ - Return the ABI tag based on EXT_SUFFIX. - """ - # The following are examples of `EXT_SUFFIX`. - # We want to keep the parts which are related to the ABI and remove the - # parts which are related to the platform: - # - linux: '.cpython-310-x86_64-linux-gnu.so' => cp310 - # - mac: '.cpython-310-darwin.so' => cp310 - # - win: '.cp310-win_amd64.pyd' => cp310 - # - win: '.pyd' => cp37 (uses _cpython_abis()) - # - pypy: '.pypy38-pp73-x86_64-linux-gnu.so' => pypy38_pp73 - # - graalpy: '.graalpy-38-native-x86_64-darwin.dylib' - # => graalpy_38_native - - ext_suffix = _get_config_var("EXT_SUFFIX", warn=True) - if not isinstance(ext_suffix, str) or ext_suffix[0] != ".": - raise SystemError("invalid sysconfig.get_config_var('EXT_SUFFIX')") - parts = ext_suffix.split(".") - if len(parts) < 3: - # CPython3.7 and earlier uses ".pyd" on Windows. - return _cpython_abis(sys.version_info[:2]) - soabi = parts[1] - if soabi.startswith("cpython"): - # non-windows - abi = "cp" + soabi.split("-")[1] - elif soabi.startswith("cp"): - # windows - abi = soabi.split("-")[0] - elif soabi.startswith("pypy"): - abi = "-".join(soabi.split("-")[:2]) - elif soabi.startswith("graalpy"): - abi = "-".join(soabi.split("-")[:3]) - elif soabi: - # pyston, ironpython, others? - abi = soabi - else: - return [] - return [_normalize_string(abi)] - - -def generic_tags( - interpreter: str | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a generic interpreter. - - The tags consist of: - - -- - - The "none" ABI will be added if it was not explicitly provided. - """ - if not interpreter: - interp_name = interpreter_name() - interp_version = interpreter_version(warn=warn) - interpreter = "".join([interp_name, interp_version]) - if abis is None: - abis = _generic_abi() - else: - abis = list(abis) - platforms = list(platforms or platform_tags()) - if "none" not in abis: - abis.append("none") - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - -def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]: - """ - Yields Python versions in descending order. - - After the latest version, the major-only version will be yielded, and then - all previous versions of that major version. - """ - if len(py_version) > 1: - yield f"py{_version_nodot(py_version[:2])}" - yield f"py{py_version[0]}" - if len(py_version) > 1: - for minor in range(py_version[1] - 1, -1, -1): - yield f"py{_version_nodot((py_version[0], minor))}" - - -def compatible_tags( - python_version: PythonVersion | None = None, - interpreter: str | None = None, - platforms: Iterable[str] | None = None, -) -> Iterator[Tag]: - """ - Yields the sequence of tags that are compatible with a specific version of Python. - - The tags consist of: - - py*-none- - - -none-any # ... if `interpreter` is provided. - - py*-none-any - """ - if not python_version: - python_version = sys.version_info[:2] - platforms = list(platforms or platform_tags()) - for version in _py_interpreter_range(python_version): - for platform_ in platforms: - yield Tag(version, "none", platform_) - if interpreter: - yield Tag(interpreter, "none", "any") - for version in _py_interpreter_range(python_version): - yield Tag(version, "none", "any") - - -def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str: - if not is_32bit: - return arch - - if arch.startswith("ppc"): - return "ppc" - - return "i386" - - -def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]: - formats = [cpu_arch] - if cpu_arch == "x86_64": - if version < (10, 4): - return [] - formats.extend(["intel", "fat64", "fat32"]) - - elif cpu_arch == "i386": - if version < (10, 4): - return [] - formats.extend(["intel", "fat32", "fat"]) - - elif cpu_arch == "ppc64": - # TODO: Need to care about 32-bit PPC for ppc64 through 10.2? - if version > (10, 5) or version < (10, 4): - return [] - formats.append("fat64") - - elif cpu_arch == "ppc": - if version > (10, 6): - return [] - formats.extend(["fat32", "fat"]) - - if cpu_arch in {"arm64", "x86_64"}: - formats.append("universal2") - - if cpu_arch in {"x86_64", "i386", "ppc64", "ppc", "intel"}: - formats.append("universal") - - return formats - - -def mac_platforms( - version: AppleVersion | None = None, arch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for a macOS system. - - The `version` parameter is a two-item tuple specifying the macOS version to - generate platform tags for. The `arch` parameter is the CPU architecture to - generate platform tags for. Both parameters default to the appropriate value - for the current system. - """ - version_str, _, cpu_arch = platform.mac_ver() - if version is None: - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - if version == (10, 16): - # When built against an older macOS SDK, Python will report macOS 10.16 - # instead of the real version. - version_str = subprocess.run( - [ - sys.executable, - "-sS", - "-c", - "import platform; print(platform.mac_ver()[0])", - ], - check=True, - env={"SYSTEM_VERSION_COMPAT": "0"}, - stdout=subprocess.PIPE, - text=True, - ).stdout - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - else: - version = version - if arch is None: - arch = _mac_arch(cpu_arch) - else: - arch = arch - - if (10, 0) <= version and version < (11, 0): - # Prior to Mac OS 11, each yearly release of Mac OS bumped the - # "minor" version number. The major version was always 10. - major_version = 10 - for minor_version in range(version[1], -1, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Starting with Mac OS 11, each yearly release bumps the major version - # number. The minor versions are now the midyear updates. - minor_version = 0 - for major_version in range(version[0], 10, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Mac OS 11 on x86_64 is compatible with binaries from previous releases. - # Arm64 support was introduced in 11.0, so no Arm binaries from previous - # releases exist. - # - # However, the "universal2" binary format can have a - # macOS version earlier than 11.0 when the x86_64 part of the binary supports - # that version of macOS. - major_version = 10 - if arch == "x86_64": - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - else: - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_format = "universal2" - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - -def ios_platforms( - version: AppleVersion | None = None, multiarch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for an iOS system. - - :param version: A two-item tuple specifying the iOS version to generate - platform tags for. Defaults to the current iOS version. - :param multiarch: The CPU architecture+ABI to generate platform tags for - - (the value used by `sys.implementation._multiarch` e.g., - `arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current - multiarch value. - """ - if version is None: - # if iOS is the current platform, ios_ver *must* be defined. However, - # it won't exist for CPython versions before 3.13, which causes a mypy - # error. - _, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore] - version = cast("AppleVersion", tuple(map(int, release.split(".")[:2]))) - - if multiarch is None: - multiarch = sys.implementation._multiarch - multiarch = multiarch.replace("-", "_") - - ios_platform_template = "ios_{major}_{minor}_{multiarch}" - - # Consider any iOS major.minor version from the version requested, down to - # 12.0. 12.0 is the first iOS version that is known to have enough features - # to support CPython. Consider every possible minor release up to X.9. There - # highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra - # candidates that won't ever match doesn't really hurt, and it saves us from - # having to keep an explicit list of known iOS versions in the code. Return - # the results descending order of version number. - - # If the requested major version is less than 12, there won't be any matches. - if version[0] < 12: - return - - # Consider the actual X.Y version that was requested. - yield ios_platform_template.format( - major=version[0], minor=version[1], multiarch=multiarch - ) - - # Consider every minor version from X.0 to the minor version prior to the - # version requested by the platform. - for minor in range(version[1] - 1, -1, -1): - yield ios_platform_template.format( - major=version[0], minor=minor, multiarch=multiarch - ) - - for major in range(version[0] - 1, 11, -1): - for minor in range(9, -1, -1): - yield ios_platform_template.format( - major=major, minor=minor, multiarch=multiarch - ) - - -def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: - linux = _normalize_string(sysconfig.get_platform()) - if not linux.startswith("linux_"): - # we should never be here, just yield the sysconfig one and return - yield linux - return - if is_32bit: - if linux == "linux_x86_64": - linux = "linux_i686" - elif linux == "linux_aarch64": - linux = "linux_armv8l" - _, arch = linux.split("_", 1) - archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) - yield from _manylinux.platform_tags(archs) - yield from _musllinux.platform_tags(archs) - for arch in archs: - yield f"linux_{arch}" - - -def _generic_platforms() -> Iterator[str]: - yield _normalize_string(sysconfig.get_platform()) - - -def platform_tags() -> Iterator[str]: - """ - Provides the platform tags for this installation. - """ - if platform.system() == "Darwin": - return mac_platforms() - elif platform.system() == "iOS": - return ios_platforms() - elif platform.system() == "Linux": - return _linux_platforms() - else: - return _generic_platforms() - - -def interpreter_name() -> str: - """ - Returns the name of the running interpreter. - - Some implementations have a reserved, two-letter abbreviation which will - be returned when appropriate. - """ - name = sys.implementation.name - return INTERPRETER_SHORT_NAMES.get(name) or name - - -def interpreter_version(*, warn: bool = False) -> str: - """ - Returns the version of the running interpreter. - """ - version = _get_config_var("py_version_nodot", warn=warn) - if version: - version = str(version) - else: - version = _version_nodot(sys.version_info[:2]) - return version - - -def _version_nodot(version: PythonVersion) -> str: - return "".join(map(str, version)) - - -def sys_tags(*, warn: bool = False) -> Iterator[Tag]: - """ - Returns the sequence of tag triples for the running interpreter. - - The order of the sequence corresponds to priority order for the - interpreter, from most to least important. - """ - - interp_name = interpreter_name() - if interp_name == "cp": - yield from cpython_tags(warn=warn) - else: - yield from generic_tags() - - if interp_name == "pp": - interp = "pp3" - elif interp_name == "cp": - interp = "cp" + interpreter_version(warn=warn) - else: - interp = None - yield from compatible_tags(interpreter=interp) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py deleted file mode 100644 index 2345095..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py +++ /dev/null @@ -1,163 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import functools -import re -from typing import NewType, Tuple, Union, cast - -from .tags import Tag, parse_tag -from .version import InvalidVersion, Version, _TrimmedRelease - -BuildTag = Union[Tuple[()], Tuple[int, str]] -NormalizedName = NewType("NormalizedName", str) - - -class InvalidName(ValueError): - """ - An invalid distribution name; users should refer to the packaging user guide. - """ - - -class InvalidWheelFilename(ValueError): - """ - An invalid wheel filename was found, users should refer to PEP 427. - """ - - -class InvalidSdistFilename(ValueError): - """ - An invalid sdist filename was found, users should refer to the packaging user guide. - """ - - -# Core metadata spec for `Name` -_validate_regex = re.compile( - r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE -) -_canonicalize_regex = re.compile(r"[-_.]+") -_normalized_regex = re.compile(r"^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$") -# PEP 427: The build number must start with a digit. -_build_tag_regex = re.compile(r"(\d+)(.*)") - - -def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName: - if validate and not _validate_regex.match(name): - raise InvalidName(f"name is invalid: {name!r}") - # This is taken from PEP 503. - value = _canonicalize_regex.sub("-", name).lower() - return cast(NormalizedName, value) - - -def is_normalized_name(name: str) -> bool: - return _normalized_regex.match(name) is not None - - -@functools.singledispatch -def canonicalize_version( - version: Version | str, *, strip_trailing_zero: bool = True -) -> str: - """ - Return a canonical form of a version as a string. - - >>> canonicalize_version('1.0.1') - '1.0.1' - - Per PEP 625, versions may have multiple canonical forms, differing - only by trailing zeros. - - >>> canonicalize_version('1.0.0') - '1' - >>> canonicalize_version('1.0.0', strip_trailing_zero=False) - '1.0.0' - - Invalid versions are returned unaltered. - - >>> canonicalize_version('foo bar baz') - 'foo bar baz' - """ - return str(_TrimmedRelease(str(version)) if strip_trailing_zero else version) - - -@canonicalize_version.register -def _(version: str, *, strip_trailing_zero: bool = True) -> str: - try: - parsed = Version(version) - except InvalidVersion: - # Legacy versions cannot be normalized - return version - return canonicalize_version(parsed, strip_trailing_zero=strip_trailing_zero) - - -def parse_wheel_filename( - filename: str, -) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]: - if not filename.endswith(".whl"): - raise InvalidWheelFilename( - f"Invalid wheel filename (extension must be '.whl'): {filename!r}" - ) - - filename = filename[:-4] - dashes = filename.count("-") - if dashes not in (4, 5): - raise InvalidWheelFilename( - f"Invalid wheel filename (wrong number of parts): {filename!r}" - ) - - parts = filename.split("-", dashes - 2) - name_part = parts[0] - # See PEP 427 for the rules on escaping the project name. - if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: - raise InvalidWheelFilename(f"Invalid project name: {filename!r}") - name = canonicalize_name(name_part) - - try: - version = Version(parts[1]) - except InvalidVersion as e: - raise InvalidWheelFilename( - f"Invalid wheel filename (invalid version): {filename!r}" - ) from e - - if dashes == 5: - build_part = parts[2] - build_match = _build_tag_regex.match(build_part) - if build_match is None: - raise InvalidWheelFilename( - f"Invalid build number: {build_part} in {filename!r}" - ) - build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2))) - else: - build = () - tags = parse_tag(parts[-1]) - return (name, version, build, tags) - - -def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]: - if filename.endswith(".tar.gz"): - file_stem = filename[: -len(".tar.gz")] - elif filename.endswith(".zip"): - file_stem = filename[: -len(".zip")] - else: - raise InvalidSdistFilename( - f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):" - f" {filename!r}" - ) - - # We are requiring a PEP 440 version, which cannot contain dashes, - # so we split on the last dash. - name_part, sep, version_part = file_stem.rpartition("-") - if not sep: - raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}") - - name = canonicalize_name(name_part) - - try: - version = Version(version_part) - except InvalidVersion as e: - raise InvalidSdistFilename( - f"Invalid sdist filename (invalid version): {filename!r}" - ) from e - - return (name, version) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py b/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py deleted file mode 100644 index 21f44ca..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py +++ /dev/null @@ -1,582 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from pip._vendor.packaging.version import parse, Version -""" - -from __future__ import annotations - -import itertools -import re -from typing import Any, Callable, NamedTuple, SupportsInt, Tuple, Union - -from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType - -__all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"] - -LocalType = Tuple[Union[int, str], ...] - -CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]] -CmpLocalType = Union[ - NegativeInfinityType, - Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...], -] -CmpKey = Tuple[ - int, - Tuple[int, ...], - CmpPrePostDevType, - CmpPrePostDevType, - CmpPrePostDevType, - CmpLocalType, -] -VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool] - - -class _Version(NamedTuple): - epoch: int - release: tuple[int, ...] - dev: tuple[str, int] | None - pre: tuple[str, int] | None - post: tuple[str, int] | None - local: LocalType | None - - -def parse(version: str) -> Version: - """Parse the given version string. - - >>> parse('1.0.dev1') - - - :param version: The version string to parse. - :raises InvalidVersion: When the version string is not a valid version. - """ - return Version(version) - - -class InvalidVersion(ValueError): - """Raised when a version string is not a valid version. - - >>> Version("invalid") - Traceback (most recent call last): - ... - packaging.version.InvalidVersion: Invalid version: 'invalid' - """ - - -class _BaseVersion: - _key: tuple[Any, ...] - - def __hash__(self) -> int: - return hash(self._key) - - # Please keep the duplicated `isinstance` check - # in the six comparisons hereunder - # unless you find a way to avoid adding overhead function calls. - def __lt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key < other._key - - def __le__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key <= other._key - - def __eq__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key == other._key - - def __ge__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key >= other._key - - def __gt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key > other._key - - def __ne__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key != other._key - - -# Deliberately not anchored to the start and end of the string, to make it -# easier for 3rd party code to reuse -_VERSION_PATTERN = r""" - v? - (?: - (?:(?P[0-9]+)!)? # epoch - (?P[0-9]+(?:\.[0-9]+)*) # release segment - (?P
                                          # pre-release
-            [-_\.]?
-            (?Palpha|a|beta|b|preview|pre|c|rc)
-            [-_\.]?
-            (?P[0-9]+)?
-        )?
-        (?P                                         # post release
-            (?:-(?P[0-9]+))
-            |
-            (?:
-                [-_\.]?
-                (?Ppost|rev|r)
-                [-_\.]?
-                (?P[0-9]+)?
-            )
-        )?
-        (?P                                          # dev release
-            [-_\.]?
-            (?Pdev)
-            [-_\.]?
-            (?P[0-9]+)?
-        )?
-    )
-    (?:\+(?P[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
-"""
-
-VERSION_PATTERN = _VERSION_PATTERN
-"""
-A string containing the regular expression used to match a valid version.
-
-The pattern is not anchored at either end, and is intended for embedding in larger
-expressions (for example, matching a version number as part of a file name). The
-regular expression should be compiled with the ``re.VERBOSE`` and ``re.IGNORECASE``
-flags set.
-
-:meta hide-value:
-"""
-
-
-class Version(_BaseVersion):
-    """This class abstracts handling of a project's versions.
-
-    A :class:`Version` instance is comparison aware and can be compared and
-    sorted using the standard Python interfaces.
-
-    >>> v1 = Version("1.0a5")
-    >>> v2 = Version("1.0")
-    >>> v1
-    
-    >>> v2
-    
-    >>> v1 < v2
-    True
-    >>> v1 == v2
-    False
-    >>> v1 > v2
-    False
-    >>> v1 >= v2
-    False
-    >>> v1 <= v2
-    True
-    """
-
-    _regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE)
-    _key: CmpKey
-
-    def __init__(self, version: str) -> None:
-        """Initialize a Version object.
-
-        :param version:
-            The string representation of a version which will be parsed and normalized
-            before use.
-        :raises InvalidVersion:
-            If the ``version`` does not conform to PEP 440 in any way then this
-            exception will be raised.
-        """
-
-        # Validate the version and parse it into pieces
-        match = self._regex.search(version)
-        if not match:
-            raise InvalidVersion(f"Invalid version: {version!r}")
-
-        # Store the parsed out pieces of the version
-        self._version = _Version(
-            epoch=int(match.group("epoch")) if match.group("epoch") else 0,
-            release=tuple(int(i) for i in match.group("release").split(".")),
-            pre=_parse_letter_version(match.group("pre_l"), match.group("pre_n")),
-            post=_parse_letter_version(
-                match.group("post_l"), match.group("post_n1") or match.group("post_n2")
-            ),
-            dev=_parse_letter_version(match.group("dev_l"), match.group("dev_n")),
-            local=_parse_local_version(match.group("local")),
-        )
-
-        # Generate a key which will be used for sorting
-        self._key = _cmpkey(
-            self._version.epoch,
-            self._version.release,
-            self._version.pre,
-            self._version.post,
-            self._version.dev,
-            self._version.local,
-        )
-
-    def __repr__(self) -> str:
-        """A representation of the Version that shows all internal state.
-
-        >>> Version('1.0.0')
-        
-        """
-        return f""
-
-    def __str__(self) -> str:
-        """A string representation of the version that can be round-tripped.
-
-        >>> str(Version("1.0a5"))
-        '1.0a5'
-        """
-        parts = []
-
-        # Epoch
-        if self.epoch != 0:
-            parts.append(f"{self.epoch}!")
-
-        # Release segment
-        parts.append(".".join(str(x) for x in self.release))
-
-        # Pre-release
-        if self.pre is not None:
-            parts.append("".join(str(x) for x in self.pre))
-
-        # Post-release
-        if self.post is not None:
-            parts.append(f".post{self.post}")
-
-        # Development release
-        if self.dev is not None:
-            parts.append(f".dev{self.dev}")
-
-        # Local version segment
-        if self.local is not None:
-            parts.append(f"+{self.local}")
-
-        return "".join(parts)
-
-    @property
-    def epoch(self) -> int:
-        """The epoch of the version.
-
-        >>> Version("2.0.0").epoch
-        0
-        >>> Version("1!2.0.0").epoch
-        1
-        """
-        return self._version.epoch
-
-    @property
-    def release(self) -> tuple[int, ...]:
-        """The components of the "release" segment of the version.
-
-        >>> Version("1.2.3").release
-        (1, 2, 3)
-        >>> Version("2.0.0").release
-        (2, 0, 0)
-        >>> Version("1!2.0.0.post0").release
-        (2, 0, 0)
-
-        Includes trailing zeroes but not the epoch or any pre-release / development /
-        post-release suffixes.
-        """
-        return self._version.release
-
-    @property
-    def pre(self) -> tuple[str, int] | None:
-        """The pre-release segment of the version.
-
-        >>> print(Version("1.2.3").pre)
-        None
-        >>> Version("1.2.3a1").pre
-        ('a', 1)
-        >>> Version("1.2.3b1").pre
-        ('b', 1)
-        >>> Version("1.2.3rc1").pre
-        ('rc', 1)
-        """
-        return self._version.pre
-
-    @property
-    def post(self) -> int | None:
-        """The post-release number of the version.
-
-        >>> print(Version("1.2.3").post)
-        None
-        >>> Version("1.2.3.post1").post
-        1
-        """
-        return self._version.post[1] if self._version.post else None
-
-    @property
-    def dev(self) -> int | None:
-        """The development number of the version.
-
-        >>> print(Version("1.2.3").dev)
-        None
-        >>> Version("1.2.3.dev1").dev
-        1
-        """
-        return self._version.dev[1] if self._version.dev else None
-
-    @property
-    def local(self) -> str | None:
-        """The local version segment of the version.
-
-        >>> print(Version("1.2.3").local)
-        None
-        >>> Version("1.2.3+abc").local
-        'abc'
-        """
-        if self._version.local:
-            return ".".join(str(x) for x in self._version.local)
-        else:
-            return None
-
-    @property
-    def public(self) -> str:
-        """The public portion of the version.
-
-        >>> Version("1.2.3").public
-        '1.2.3'
-        >>> Version("1.2.3+abc").public
-        '1.2.3'
-        >>> Version("1!1.2.3dev1+abc").public
-        '1!1.2.3.dev1'
-        """
-        return str(self).split("+", 1)[0]
-
-    @property
-    def base_version(self) -> str:
-        """The "base version" of the version.
-
-        >>> Version("1.2.3").base_version
-        '1.2.3'
-        >>> Version("1.2.3+abc").base_version
-        '1.2.3'
-        >>> Version("1!1.2.3dev1+abc").base_version
-        '1!1.2.3'
-
-        The "base version" is the public version of the project without any pre or post
-        release markers.
-        """
-        parts = []
-
-        # Epoch
-        if self.epoch != 0:
-            parts.append(f"{self.epoch}!")
-
-        # Release segment
-        parts.append(".".join(str(x) for x in self.release))
-
-        return "".join(parts)
-
-    @property
-    def is_prerelease(self) -> bool:
-        """Whether this version is a pre-release.
-
-        >>> Version("1.2.3").is_prerelease
-        False
-        >>> Version("1.2.3a1").is_prerelease
-        True
-        >>> Version("1.2.3b1").is_prerelease
-        True
-        >>> Version("1.2.3rc1").is_prerelease
-        True
-        >>> Version("1.2.3dev1").is_prerelease
-        True
-        """
-        return self.dev is not None or self.pre is not None
-
-    @property
-    def is_postrelease(self) -> bool:
-        """Whether this version is a post-release.
-
-        >>> Version("1.2.3").is_postrelease
-        False
-        >>> Version("1.2.3.post1").is_postrelease
-        True
-        """
-        return self.post is not None
-
-    @property
-    def is_devrelease(self) -> bool:
-        """Whether this version is a development release.
-
-        >>> Version("1.2.3").is_devrelease
-        False
-        >>> Version("1.2.3.dev1").is_devrelease
-        True
-        """
-        return self.dev is not None
-
-    @property
-    def major(self) -> int:
-        """The first item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").major
-        1
-        """
-        return self.release[0] if len(self.release) >= 1 else 0
-
-    @property
-    def minor(self) -> int:
-        """The second item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").minor
-        2
-        >>> Version("1").minor
-        0
-        """
-        return self.release[1] if len(self.release) >= 2 else 0
-
-    @property
-    def micro(self) -> int:
-        """The third item of :attr:`release` or ``0`` if unavailable.
-
-        >>> Version("1.2.3").micro
-        3
-        >>> Version("1").micro
-        0
-        """
-        return self.release[2] if len(self.release) >= 3 else 0
-
-
-class _TrimmedRelease(Version):
-    @property
-    def release(self) -> tuple[int, ...]:
-        """
-        Release segment without any trailing zeros.
-
-        >>> _TrimmedRelease('1.0.0').release
-        (1,)
-        >>> _TrimmedRelease('0.0').release
-        (0,)
-        """
-        rel = super().release
-        nonzeros = (index for index, val in enumerate(rel) if val)
-        last_nonzero = max(nonzeros, default=0)
-        return rel[: last_nonzero + 1]
-
-
-def _parse_letter_version(
-    letter: str | None, number: str | bytes | SupportsInt | None
-) -> tuple[str, int] | None:
-    if letter:
-        # We consider there to be an implicit 0 in a pre-release if there is
-        # not a numeral associated with it.
-        if number is None:
-            number = 0
-
-        # We normalize any letters to their lower case form
-        letter = letter.lower()
-
-        # We consider some words to be alternate spellings of other words and
-        # in those cases we want to normalize the spellings to our preferred
-        # spelling.
-        if letter == "alpha":
-            letter = "a"
-        elif letter == "beta":
-            letter = "b"
-        elif letter in ["c", "pre", "preview"]:
-            letter = "rc"
-        elif letter in ["rev", "r"]:
-            letter = "post"
-
-        return letter, int(number)
-
-    assert not letter
-    if number:
-        # We assume if we are given a number, but we are not given a letter
-        # then this is using the implicit post release syntax (e.g. 1.0-1)
-        letter = "post"
-
-        return letter, int(number)
-
-    return None
-
-
-_local_version_separators = re.compile(r"[\._-]")
-
-
-def _parse_local_version(local: str | None) -> LocalType | None:
-    """
-    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
-    """
-    if local is not None:
-        return tuple(
-            part.lower() if not part.isdigit() else int(part)
-            for part in _local_version_separators.split(local)
-        )
-    return None
-
-
-def _cmpkey(
-    epoch: int,
-    release: tuple[int, ...],
-    pre: tuple[str, int] | None,
-    post: tuple[str, int] | None,
-    dev: tuple[str, int] | None,
-    local: LocalType | None,
-) -> CmpKey:
-    # When we compare a release version, we want to compare it with all of the
-    # trailing zeros removed. So we'll use a reverse the list, drop all the now
-    # leading zeros until we come to something non zero, then take the rest
-    # re-reverse it back into the correct order and make it a tuple and use
-    # that for our sorting key.
-    _release = tuple(
-        reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release))))
-    )
-
-    # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0.
-    # We'll do this by abusing the pre segment, but we _only_ want to do this
-    # if there is not a pre or a post segment. If we have one of those then
-    # the normal sorting rules will handle this case correctly.
-    if pre is None and post is None and dev is not None:
-        _pre: CmpPrePostDevType = NegativeInfinity
-    # Versions without a pre-release (except as noted above) should sort after
-    # those with one.
-    elif pre is None:
-        _pre = Infinity
-    else:
-        _pre = pre
-
-    # Versions without a post segment should sort before those with one.
-    if post is None:
-        _post: CmpPrePostDevType = NegativeInfinity
-
-    else:
-        _post = post
-
-    # Versions without a development segment should sort after those with one.
-    if dev is None:
-        _dev: CmpPrePostDevType = Infinity
-
-    else:
-        _dev = dev
-
-    if local is None:
-        # Versions without a local segment should sort before those with one.
-        _local: CmpLocalType = NegativeInfinity
-    else:
-        # Versions with a local segment need that segment parsed to implement
-        # the sorting rules in PEP440.
-        # - Alpha numeric segments sort before numeric segments
-        # - Alpha numeric segments sort lexicographically
-        # - Numeric segments sort numerically
-        # - Shorter versions sort before longer versions when the prefixes
-        #   match exactly
-        _local = tuple(
-            (i, "") if isinstance(i, int) else (NegativeInfinity, i) for i in local
-        )
-
-    return epoch, _release, _pre, _post, _dev, _local
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py
deleted file mode 100644
index 57ce7f1..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py
+++ /dev/null
@@ -1,3676 +0,0 @@
-# TODO: Add Generic type annotations to initialized collections.
-# For now we'd simply use implicit Any/Unknown which would add redundant annotations
-# mypy: disable-error-code="var-annotated"
-"""
-Package resource API
---------------------
-
-A resource is a logical file contained within a package, or a logical
-subdirectory thereof.  The package resource API expects resource names
-to have their path parts separated with ``/``, *not* whatever the local
-path separator is.  Do not use os.path operations to manipulate resource
-names being passed into the API.
-
-The package resource API is designed to work with normal filesystem packages,
-.egg files, and unpacked .egg files.  It can also work in a limited way with
-.zip files and with custom PEP 302 loaders that support the ``get_data()``
-method.
-
-This module is deprecated. Users are directed to :mod:`importlib.resources`,
-:mod:`importlib.metadata` and :pypi:`packaging` instead.
-"""
-
-from __future__ import annotations
-
-import sys
-
-if sys.version_info < (3, 8):  # noqa: UP036 # Check for unsupported versions
-    raise RuntimeError("Python 3.8 or later is required")
-
-import os
-import io
-import time
-import re
-import types
-from typing import (
-    Any,
-    Literal,
-    Dict,
-    Iterator,
-    Mapping,
-    MutableSequence,
-    NamedTuple,
-    NoReturn,
-    Tuple,
-    Union,
-    TYPE_CHECKING,
-    Protocol,
-    Callable,
-    Iterable,
-    TypeVar,
-    overload,
-)
-import zipfile
-import zipimport
-import warnings
-import stat
-import functools
-import pkgutil
-import operator
-import platform
-import collections
-import plistlib
-import email.parser
-import errno
-import tempfile
-import textwrap
-import inspect
-import ntpath
-import posixpath
-import importlib
-import importlib.abc
-import importlib.machinery
-from pkgutil import get_importer
-
-import _imp
-
-# capture these to bypass sandboxing
-from os import utime
-from os import open as os_open
-from os.path import isdir, split
-
-try:
-    from os import mkdir, rename, unlink
-
-    WRITE_SUPPORT = True
-except ImportError:
-    # no write support, probably under GAE
-    WRITE_SUPPORT = False
-
-from pip._internal.utils._jaraco_text import (
-    yield_lines,
-    drop_comment,
-    join_continuation,
-)
-from pip._vendor.packaging import markers as _packaging_markers
-from pip._vendor.packaging import requirements as _packaging_requirements
-from pip._vendor.packaging import utils as _packaging_utils
-from pip._vendor.packaging import version as _packaging_version
-from pip._vendor.platformdirs import user_cache_dir as _user_cache_dir
-
-if TYPE_CHECKING:
-    from _typeshed import BytesPath, StrPath, StrOrBytesPath
-    from pip._vendor.typing_extensions import Self
-
-
-# Patch: Remove deprecation warning from vendored pkg_resources.
-# Setting PYTHONWARNINGS=error to verify builds produce no warnings
-# causes immediate exceptions.
-# See https://github.com/pypa/pip/issues/12243
-
-
-_T = TypeVar("_T")
-_DistributionT = TypeVar("_DistributionT", bound="Distribution")
-# Type aliases
-_NestedStr = Union[str, Iterable[Union[str, Iterable["_NestedStr"]]]]
-_InstallerTypeT = Callable[["Requirement"], "_DistributionT"]
-_InstallerType = Callable[["Requirement"], Union["Distribution", None]]
-_PkgReqType = Union[str, "Requirement"]
-_EPDistType = Union["Distribution", _PkgReqType]
-_MetadataType = Union["IResourceProvider", None]
-_ResolvedEntryPoint = Any  # Can be any attribute in the module
-_ResourceStream = Any  # TODO / Incomplete: A readable file-like object
-# Any object works, but let's indicate we expect something like a module (optionally has __loader__ or __file__)
-_ModuleLike = Union[object, types.ModuleType]
-# Any: Should be _ModuleLike but we end up with issues where _ModuleLike doesn't have _ZipLoaderModule's __loader__
-_ProviderFactoryType = Callable[[Any], "IResourceProvider"]
-_DistFinderType = Callable[[_T, str, bool], Iterable["Distribution"]]
-_NSHandlerType = Callable[[_T, str, str, types.ModuleType], Union[str, None]]
-_AdapterT = TypeVar(
-    "_AdapterT", _DistFinderType[Any], _ProviderFactoryType, _NSHandlerType[Any]
-)
-
-
-# Use _typeshed.importlib.LoaderProtocol once available https://github.com/python/typeshed/pull/11890
-class _LoaderProtocol(Protocol):
-    def load_module(self, fullname: str, /) -> types.ModuleType: ...
-
-
-class _ZipLoaderModule(Protocol):
-    __loader__: zipimport.zipimporter
-
-
-_PEP440_FALLBACK = re.compile(r"^v?(?P(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)", re.I)
-
-
-class PEP440Warning(RuntimeWarning):
-    """
-    Used when there is an issue with a version or specifier not complying with
-    PEP 440.
-    """
-
-
-parse_version = _packaging_version.Version
-
-
-_state_vars: dict[str, str] = {}
-
-
-def _declare_state(vartype: str, varname: str, initial_value: _T) -> _T:
-    _state_vars[varname] = vartype
-    return initial_value
-
-
-def __getstate__() -> dict[str, Any]:
-    state = {}
-    g = globals()
-    for k, v in _state_vars.items():
-        state[k] = g['_sget_' + v](g[k])
-    return state
-
-
-def __setstate__(state: dict[str, Any]) -> dict[str, Any]:
-    g = globals()
-    for k, v in state.items():
-        g['_sset_' + _state_vars[k]](k, g[k], v)
-    return state
-
-
-def _sget_dict(val):
-    return val.copy()
-
-
-def _sset_dict(key, ob, state):
-    ob.clear()
-    ob.update(state)
-
-
-def _sget_object(val):
-    return val.__getstate__()
-
-
-def _sset_object(key, ob, state):
-    ob.__setstate__(state)
-
-
-_sget_none = _sset_none = lambda *args: None
-
-
-def get_supported_platform():
-    """Return this platform's maximum compatible version.
-
-    distutils.util.get_platform() normally reports the minimum version
-    of macOS that would be required to *use* extensions produced by
-    distutils.  But what we want when checking compatibility is to know the
-    version of macOS that we are *running*.  To allow usage of packages that
-    explicitly require a newer version of macOS, we must also know the
-    current version of the OS.
-
-    If this condition occurs for any other platform with a version in its
-    platform strings, this function should be extended accordingly.
-    """
-    plat = get_build_platform()
-    m = macosVersionString.match(plat)
-    if m is not None and sys.platform == "darwin":
-        try:
-            plat = 'macosx-%s-%s' % ('.'.join(_macos_vers()[:2]), m.group(3))
-        except ValueError:
-            # not macOS
-            pass
-    return plat
-
-
-__all__ = [
-    # Basic resource access and distribution/entry point discovery
-    'require',
-    'run_script',
-    'get_provider',
-    'get_distribution',
-    'load_entry_point',
-    'get_entry_map',
-    'get_entry_info',
-    'iter_entry_points',
-    'resource_string',
-    'resource_stream',
-    'resource_filename',
-    'resource_listdir',
-    'resource_exists',
-    'resource_isdir',
-    # Environmental control
-    'declare_namespace',
-    'working_set',
-    'add_activation_listener',
-    'find_distributions',
-    'set_extraction_path',
-    'cleanup_resources',
-    'get_default_cache',
-    # Primary implementation classes
-    'Environment',
-    'WorkingSet',
-    'ResourceManager',
-    'Distribution',
-    'Requirement',
-    'EntryPoint',
-    # Exceptions
-    'ResolutionError',
-    'VersionConflict',
-    'DistributionNotFound',
-    'UnknownExtra',
-    'ExtractionError',
-    # Warnings
-    'PEP440Warning',
-    # Parsing functions and string utilities
-    'parse_requirements',
-    'parse_version',
-    'safe_name',
-    'safe_version',
-    'get_platform',
-    'compatible_platforms',
-    'yield_lines',
-    'split_sections',
-    'safe_extra',
-    'to_filename',
-    'invalid_marker',
-    'evaluate_marker',
-    # filesystem utilities
-    'ensure_directory',
-    'normalize_path',
-    # Distribution "precedence" constants
-    'EGG_DIST',
-    'BINARY_DIST',
-    'SOURCE_DIST',
-    'CHECKOUT_DIST',
-    'DEVELOP_DIST',
-    # "Provider" interfaces, implementations, and registration/lookup APIs
-    'IMetadataProvider',
-    'IResourceProvider',
-    'FileMetadata',
-    'PathMetadata',
-    'EggMetadata',
-    'EmptyProvider',
-    'empty_provider',
-    'NullProvider',
-    'EggProvider',
-    'DefaultProvider',
-    'ZipProvider',
-    'register_finder',
-    'register_namespace_handler',
-    'register_loader_type',
-    'fixup_namespace_packages',
-    'get_importer',
-    # Warnings
-    'PkgResourcesDeprecationWarning',
-    # Deprecated/backward compatibility only
-    'run_main',
-    'AvailableDistributions',
-]
-
-
-class ResolutionError(Exception):
-    """Abstract base for dependency resolution errors"""
-
-    def __repr__(self):
-        return self.__class__.__name__ + repr(self.args)
-
-
-class VersionConflict(ResolutionError):
-    """
-    An already-installed version conflicts with the requested version.
-
-    Should be initialized with the installed Distribution and the requested
-    Requirement.
-    """
-
-    _template = "{self.dist} is installed but {self.req} is required"
-
-    @property
-    def dist(self) -> Distribution:
-        return self.args[0]
-
-    @property
-    def req(self) -> Requirement:
-        return self.args[1]
-
-    def report(self):
-        return self._template.format(**locals())
-
-    def with_context(self, required_by: set[Distribution | str]):
-        """
-        If required_by is non-empty, return a version of self that is a
-        ContextualVersionConflict.
-        """
-        if not required_by:
-            return self
-        args = self.args + (required_by,)
-        return ContextualVersionConflict(*args)
-
-
-class ContextualVersionConflict(VersionConflict):
-    """
-    A VersionConflict that accepts a third parameter, the set of the
-    requirements that required the installed Distribution.
-    """
-
-    _template = VersionConflict._template + ' by {self.required_by}'
-
-    @property
-    def required_by(self) -> set[str]:
-        return self.args[2]
-
-
-class DistributionNotFound(ResolutionError):
-    """A requested distribution was not found"""
-
-    _template = (
-        "The '{self.req}' distribution was not found "
-        "and is required by {self.requirers_str}"
-    )
-
-    @property
-    def req(self) -> Requirement:
-        return self.args[0]
-
-    @property
-    def requirers(self) -> set[str] | None:
-        return self.args[1]
-
-    @property
-    def requirers_str(self):
-        if not self.requirers:
-            return 'the application'
-        return ', '.join(self.requirers)
-
-    def report(self):
-        return self._template.format(**locals())
-
-    def __str__(self):
-        return self.report()
-
-
-class UnknownExtra(ResolutionError):
-    """Distribution doesn't have an "extra feature" of the given name"""
-
-
-_provider_factories: dict[type[_ModuleLike], _ProviderFactoryType] = {}
-
-PY_MAJOR = '{}.{}'.format(*sys.version_info)
-EGG_DIST = 3
-BINARY_DIST = 2
-SOURCE_DIST = 1
-CHECKOUT_DIST = 0
-DEVELOP_DIST = -1
-
-
-def register_loader_type(
-    loader_type: type[_ModuleLike], provider_factory: _ProviderFactoryType
-):
-    """Register `provider_factory` to make providers for `loader_type`
-
-    `loader_type` is the type or class of a PEP 302 ``module.__loader__``,
-    and `provider_factory` is a function that, passed a *module* object,
-    returns an ``IResourceProvider`` for that module.
-    """
-    _provider_factories[loader_type] = provider_factory
-
-
-@overload
-def get_provider(moduleOrReq: str) -> IResourceProvider: ...
-@overload
-def get_provider(moduleOrReq: Requirement) -> Distribution: ...
-def get_provider(moduleOrReq: str | Requirement) -> IResourceProvider | Distribution:
-    """Return an IResourceProvider for the named module or requirement"""
-    if isinstance(moduleOrReq, Requirement):
-        return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
-    try:
-        module = sys.modules[moduleOrReq]
-    except KeyError:
-        __import__(moduleOrReq)
-        module = sys.modules[moduleOrReq]
-    loader = getattr(module, '__loader__', None)
-    return _find_adapter(_provider_factories, loader)(module)
-
-
-@functools.lru_cache(maxsize=None)
-def _macos_vers():
-    version = platform.mac_ver()[0]
-    # fallback for MacPorts
-    if version == '':
-        plist = '/System/Library/CoreServices/SystemVersion.plist'
-        if os.path.exists(plist):
-            with open(plist, 'rb') as fh:
-                plist_content = plistlib.load(fh)
-            if 'ProductVersion' in plist_content:
-                version = plist_content['ProductVersion']
-    return version.split('.')
-
-
-def _macos_arch(machine):
-    return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine)
-
-
-def get_build_platform():
-    """Return this platform's string for platform-specific distributions
-
-    XXX Currently this is the same as ``distutils.util.get_platform()``, but it
-    needs some hacks for Linux and macOS.
-    """
-    from sysconfig import get_platform
-
-    plat = get_platform()
-    if sys.platform == "darwin" and not plat.startswith('macosx-'):
-        try:
-            version = _macos_vers()
-            machine = os.uname()[4].replace(" ", "_")
-            return "macosx-%d.%d-%s" % (
-                int(version[0]),
-                int(version[1]),
-                _macos_arch(machine),
-            )
-        except ValueError:
-            # if someone is running a non-Mac darwin system, this will fall
-            # through to the default implementation
-            pass
-    return plat
-
-
-macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)")
-darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)")
-# XXX backward compat
-get_platform = get_build_platform
-
-
-def compatible_platforms(provided: str | None, required: str | None):
-    """Can code for the `provided` platform run on the `required` platform?
-
-    Returns true if either platform is ``None``, or the platforms are equal.
-
-    XXX Needs compatibility checks for Linux and other unixy OSes.
-    """
-    if provided is None or required is None or provided == required:
-        # easy case
-        return True
-
-    # macOS special cases
-    reqMac = macosVersionString.match(required)
-    if reqMac:
-        provMac = macosVersionString.match(provided)
-
-        # is this a Mac package?
-        if not provMac:
-            # this is backwards compatibility for packages built before
-            # setuptools 0.6. All packages built after this point will
-            # use the new macOS designation.
-            provDarwin = darwinVersionString.match(provided)
-            if provDarwin:
-                dversion = int(provDarwin.group(1))
-                macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2))
-                if (
-                    dversion == 7
-                    and macosversion >= "10.3"
-                    or dversion == 8
-                    and macosversion >= "10.4"
-                ):
-                    return True
-            # egg isn't macOS or legacy darwin
-            return False
-
-        # are they the same major version and machine type?
-        if provMac.group(1) != reqMac.group(1) or provMac.group(3) != reqMac.group(3):
-            return False
-
-        # is the required OS major update >= the provided one?
-        if int(provMac.group(2)) > int(reqMac.group(2)):
-            return False
-
-        return True
-
-    # XXX Linux and other platforms' special cases should go here
-    return False
-
-
-@overload
-def get_distribution(dist: _DistributionT) -> _DistributionT: ...
-@overload
-def get_distribution(dist: _PkgReqType) -> Distribution: ...
-def get_distribution(dist: Distribution | _PkgReqType) -> Distribution:
-    """Return a current distribution object for a Requirement or string"""
-    if isinstance(dist, str):
-        dist = Requirement.parse(dist)
-    if isinstance(dist, Requirement):
-        # Bad type narrowing, dist has to be a Requirement here, so get_provider has to return Distribution
-        dist = get_provider(dist)  # type: ignore[assignment]
-    if not isinstance(dist, Distribution):
-        raise TypeError("Expected str, Requirement, or Distribution", dist)
-    return dist
-
-
-def load_entry_point(dist: _EPDistType, group: str, name: str) -> _ResolvedEntryPoint:
-    """Return `name` entry point of `group` for `dist` or raise ImportError"""
-    return get_distribution(dist).load_entry_point(group, name)
-
-
-@overload
-def get_entry_map(
-    dist: _EPDistType, group: None = None
-) -> dict[str, dict[str, EntryPoint]]: ...
-@overload
-def get_entry_map(dist: _EPDistType, group: str) -> dict[str, EntryPoint]: ...
-def get_entry_map(dist: _EPDistType, group: str | None = None):
-    """Return the entry point map for `group`, or the full entry map"""
-    return get_distribution(dist).get_entry_map(group)
-
-
-def get_entry_info(dist: _EPDistType, group: str, name: str):
-    """Return the EntryPoint object for `group`+`name`, or ``None``"""
-    return get_distribution(dist).get_entry_info(group, name)
-
-
-class IMetadataProvider(Protocol):
-    def has_metadata(self, name: str) -> bool:
-        """Does the package's distribution contain the named metadata?"""
-
-    def get_metadata(self, name: str) -> str:
-        """The named metadata resource as a string"""
-
-    def get_metadata_lines(self, name: str) -> Iterator[str]:
-        """Yield named metadata resource as list of non-blank non-comment lines
-
-        Leading and trailing whitespace is stripped from each line, and lines
-        with ``#`` as the first non-blank character are omitted."""
-
-    def metadata_isdir(self, name: str) -> bool:
-        """Is the named metadata a directory?  (like ``os.path.isdir()``)"""
-
-    def metadata_listdir(self, name: str) -> list[str]:
-        """List of metadata names in the directory (like ``os.listdir()``)"""
-
-    def run_script(self, script_name: str, namespace: dict[str, Any]) -> None:
-        """Execute the named script in the supplied namespace dictionary"""
-
-
-class IResourceProvider(IMetadataProvider, Protocol):
-    """An object that provides access to package resources"""
-
-    def get_resource_filename(
-        self, manager: ResourceManager, resource_name: str
-    ) -> str:
-        """Return a true filesystem path for `resource_name`
-
-        `manager` must be a ``ResourceManager``"""
-
-    def get_resource_stream(
-        self, manager: ResourceManager, resource_name: str
-    ) -> _ResourceStream:
-        """Return a readable file-like object for `resource_name`
-
-        `manager` must be a ``ResourceManager``"""
-
-    def get_resource_string(
-        self, manager: ResourceManager, resource_name: str
-    ) -> bytes:
-        """Return the contents of `resource_name` as :obj:`bytes`
-
-        `manager` must be a ``ResourceManager``"""
-
-    def has_resource(self, resource_name: str) -> bool:
-        """Does the package contain the named resource?"""
-
-    def resource_isdir(self, resource_name: str) -> bool:
-        """Is the named resource a directory?  (like ``os.path.isdir()``)"""
-
-    def resource_listdir(self, resource_name: str) -> list[str]:
-        """List of resource names in the directory (like ``os.listdir()``)"""
-
-
-class WorkingSet:
-    """A collection of active distributions on sys.path (or a similar list)"""
-
-    def __init__(self, entries: Iterable[str] | None = None):
-        """Create working set from list of path entries (default=sys.path)"""
-        self.entries: list[str] = []
-        self.entry_keys = {}
-        self.by_key = {}
-        self.normalized_to_canonical_keys = {}
-        self.callbacks = []
-
-        if entries is None:
-            entries = sys.path
-
-        for entry in entries:
-            self.add_entry(entry)
-
-    @classmethod
-    def _build_master(cls):
-        """
-        Prepare the master working set.
-        """
-        ws = cls()
-        try:
-            from __main__ import __requires__
-        except ImportError:
-            # The main program does not list any requirements
-            return ws
-
-        # ensure the requirements are met
-        try:
-            ws.require(__requires__)
-        except VersionConflict:
-            return cls._build_from_requirements(__requires__)
-
-        return ws
-
-    @classmethod
-    def _build_from_requirements(cls, req_spec):
-        """
-        Build a working set from a requirement spec. Rewrites sys.path.
-        """
-        # try it without defaults already on sys.path
-        # by starting with an empty path
-        ws = cls([])
-        reqs = parse_requirements(req_spec)
-        dists = ws.resolve(reqs, Environment())
-        for dist in dists:
-            ws.add(dist)
-
-        # add any missing entries from sys.path
-        for entry in sys.path:
-            if entry not in ws.entries:
-                ws.add_entry(entry)
-
-        # then copy back to sys.path
-        sys.path[:] = ws.entries
-        return ws
-
-    def add_entry(self, entry: str):
-        """Add a path item to ``.entries``, finding any distributions on it
-
-        ``find_distributions(entry, True)`` is used to find distributions
-        corresponding to the path entry, and they are added.  `entry` is
-        always appended to ``.entries``, even if it is already present.
-        (This is because ``sys.path`` can contain the same value more than
-        once, and the ``.entries`` of the ``sys.path`` WorkingSet should always
-        equal ``sys.path``.)
-        """
-        self.entry_keys.setdefault(entry, [])
-        self.entries.append(entry)
-        for dist in find_distributions(entry, True):
-            self.add(dist, entry, False)
-
-    def __contains__(self, dist: Distribution) -> bool:
-        """True if `dist` is the active distribution for its project"""
-        return self.by_key.get(dist.key) == dist
-
-    def find(self, req: Requirement) -> Distribution | None:
-        """Find a distribution matching requirement `req`
-
-        If there is an active distribution for the requested project, this
-        returns it as long as it meets the version requirement specified by
-        `req`.  But, if there is an active distribution for the project and it
-        does *not* meet the `req` requirement, ``VersionConflict`` is raised.
-        If there is no active distribution for the requested project, ``None``
-        is returned.
-        """
-        dist = self.by_key.get(req.key)
-
-        if dist is None:
-            canonical_key = self.normalized_to_canonical_keys.get(req.key)
-
-            if canonical_key is not None:
-                req.key = canonical_key
-                dist = self.by_key.get(canonical_key)
-
-        if dist is not None and dist not in req:
-            # XXX add more info
-            raise VersionConflict(dist, req)
-        return dist
-
-    def iter_entry_points(self, group: str, name: str | None = None):
-        """Yield entry point objects from `group` matching `name`
-
-        If `name` is None, yields all entry points in `group` from all
-        distributions in the working set, otherwise only ones matching
-        both `group` and `name` are yielded (in distribution order).
-        """
-        return (
-            entry
-            for dist in self
-            for entry in dist.get_entry_map(group).values()
-            if name is None or name == entry.name
-        )
-
-    def run_script(self, requires: str, script_name: str):
-        """Locate distribution for `requires` and run `script_name` script"""
-        ns = sys._getframe(1).f_globals
-        name = ns['__name__']
-        ns.clear()
-        ns['__name__'] = name
-        self.require(requires)[0].run_script(script_name, ns)
-
-    def __iter__(self) -> Iterator[Distribution]:
-        """Yield distributions for non-duplicate projects in the working set
-
-        The yield order is the order in which the items' path entries were
-        added to the working set.
-        """
-        seen = set()
-        for item in self.entries:
-            if item not in self.entry_keys:
-                # workaround a cache issue
-                continue
-
-            for key in self.entry_keys[item]:
-                if key not in seen:
-                    seen.add(key)
-                    yield self.by_key[key]
-
-    def add(
-        self,
-        dist: Distribution,
-        entry: str | None = None,
-        insert: bool = True,
-        replace: bool = False,
-    ):
-        """Add `dist` to working set, associated with `entry`
-
-        If `entry` is unspecified, it defaults to the ``.location`` of `dist`.
-        On exit from this routine, `entry` is added to the end of the working
-        set's ``.entries`` (if it wasn't already present).
-
-        `dist` is only added to the working set if it's for a project that
-        doesn't already have a distribution in the set, unless `replace=True`.
-        If it's added, any callbacks registered with the ``subscribe()`` method
-        will be called.
-        """
-        if insert:
-            dist.insert_on(self.entries, entry, replace=replace)
-
-        if entry is None:
-            entry = dist.location
-        keys = self.entry_keys.setdefault(entry, [])
-        keys2 = self.entry_keys.setdefault(dist.location, [])
-        if not replace and dist.key in self.by_key:
-            # ignore hidden distros
-            return
-
-        self.by_key[dist.key] = dist
-        normalized_name = _packaging_utils.canonicalize_name(dist.key)
-        self.normalized_to_canonical_keys[normalized_name] = dist.key
-        if dist.key not in keys:
-            keys.append(dist.key)
-        if dist.key not in keys2:
-            keys2.append(dist.key)
-        self._added_new(dist)
-
-    @overload
-    def resolve(
-        self,
-        requirements: Iterable[Requirement],
-        env: Environment | None,
-        installer: _InstallerTypeT[_DistributionT],
-        replace_conflicting: bool = False,
-        extras: tuple[str, ...] | None = None,
-    ) -> list[_DistributionT]: ...
-    @overload
-    def resolve(
-        self,
-        requirements: Iterable[Requirement],
-        env: Environment | None = None,
-        *,
-        installer: _InstallerTypeT[_DistributionT],
-        replace_conflicting: bool = False,
-        extras: tuple[str, ...] | None = None,
-    ) -> list[_DistributionT]: ...
-    @overload
-    def resolve(
-        self,
-        requirements: Iterable[Requirement],
-        env: Environment | None = None,
-        installer: _InstallerType | None = None,
-        replace_conflicting: bool = False,
-        extras: tuple[str, ...] | None = None,
-    ) -> list[Distribution]: ...
-    def resolve(
-        self,
-        requirements: Iterable[Requirement],
-        env: Environment | None = None,
-        installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None,
-        replace_conflicting: bool = False,
-        extras: tuple[str, ...] | None = None,
-    ) -> list[Distribution] | list[_DistributionT]:
-        """List all distributions needed to (recursively) meet `requirements`
-
-        `requirements` must be a sequence of ``Requirement`` objects.  `env`,
-        if supplied, should be an ``Environment`` instance.  If
-        not supplied, it defaults to all distributions available within any
-        entry or distribution in the working set.  `installer`, if supplied,
-        will be invoked with each requirement that cannot be met by an
-        already-installed distribution; it should return a ``Distribution`` or
-        ``None``.
-
-        Unless `replace_conflicting=True`, raises a VersionConflict exception
-        if
-        any requirements are found on the path that have the correct name but
-        the wrong version.  Otherwise, if an `installer` is supplied it will be
-        invoked to obtain the correct version of the requirement and activate
-        it.
-
-        `extras` is a list of the extras to be used with these requirements.
-        This is important because extra requirements may look like `my_req;
-        extra = "my_extra"`, which would otherwise be interpreted as a purely
-        optional requirement.  Instead, we want to be able to assert that these
-        requirements are truly required.
-        """
-
-        # set up the stack
-        requirements = list(requirements)[::-1]
-        # set of processed requirements
-        processed = set()
-        # key -> dist
-        best = {}
-        to_activate = []
-
-        req_extras = _ReqExtras()
-
-        # Mapping of requirement to set of distributions that required it;
-        # useful for reporting info about conflicts.
-        required_by = collections.defaultdict(set)
-
-        while requirements:
-            # process dependencies breadth-first
-            req = requirements.pop(0)
-            if req in processed:
-                # Ignore cyclic or redundant dependencies
-                continue
-
-            if not req_extras.markers_pass(req, extras):
-                continue
-
-            dist = self._resolve_dist(
-                req, best, replace_conflicting, env, installer, required_by, to_activate
-            )
-
-            # push the new requirements onto the stack
-            new_requirements = dist.requires(req.extras)[::-1]
-            requirements.extend(new_requirements)
-
-            # Register the new requirements needed by req
-            for new_requirement in new_requirements:
-                required_by[new_requirement].add(req.project_name)
-                req_extras[new_requirement] = req.extras
-
-            processed.add(req)
-
-        # return list of distros to activate
-        return to_activate
-
-    def _resolve_dist(
-        self, req, best, replace_conflicting, env, installer, required_by, to_activate
-    ) -> Distribution:
-        dist = best.get(req.key)
-        if dist is None:
-            # Find the best distribution and add it to the map
-            dist = self.by_key.get(req.key)
-            if dist is None or (dist not in req and replace_conflicting):
-                ws = self
-                if env is None:
-                    if dist is None:
-                        env = Environment(self.entries)
-                    else:
-                        # Use an empty environment and workingset to avoid
-                        # any further conflicts with the conflicting
-                        # distribution
-                        env = Environment([])
-                        ws = WorkingSet([])
-                dist = best[req.key] = env.best_match(
-                    req, ws, installer, replace_conflicting=replace_conflicting
-                )
-                if dist is None:
-                    requirers = required_by.get(req, None)
-                    raise DistributionNotFound(req, requirers)
-            to_activate.append(dist)
-        if dist not in req:
-            # Oops, the "best" so far conflicts with a dependency
-            dependent_req = required_by[req]
-            raise VersionConflict(dist, req).with_context(dependent_req)
-        return dist
-
-    @overload
-    def find_plugins(
-        self,
-        plugin_env: Environment,
-        full_env: Environment | None,
-        installer: _InstallerTypeT[_DistributionT],
-        fallback: bool = True,
-    ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ...
-    @overload
-    def find_plugins(
-        self,
-        plugin_env: Environment,
-        full_env: Environment | None = None,
-        *,
-        installer: _InstallerTypeT[_DistributionT],
-        fallback: bool = True,
-    ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ...
-    @overload
-    def find_plugins(
-        self,
-        plugin_env: Environment,
-        full_env: Environment | None = None,
-        installer: _InstallerType | None = None,
-        fallback: bool = True,
-    ) -> tuple[list[Distribution], dict[Distribution, Exception]]: ...
-    def find_plugins(
-        self,
-        plugin_env: Environment,
-        full_env: Environment | None = None,
-        installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None,
-        fallback: bool = True,
-    ) -> tuple[
-        list[Distribution] | list[_DistributionT],
-        dict[Distribution, Exception],
-    ]:
-        """Find all activatable distributions in `plugin_env`
-
-        Example usage::
-
-            distributions, errors = working_set.find_plugins(
-                Environment(plugin_dirlist)
-            )
-            # add plugins+libs to sys.path
-            map(working_set.add, distributions)
-            # display errors
-            print('Could not load', errors)
-
-        The `plugin_env` should be an ``Environment`` instance that contains
-        only distributions that are in the project's "plugin directory" or
-        directories. The `full_env`, if supplied, should be an ``Environment``
-        contains all currently-available distributions.  If `full_env` is not
-        supplied, one is created automatically from the ``WorkingSet`` this
-        method is called on, which will typically mean that every directory on
-        ``sys.path`` will be scanned for distributions.
-
-        `installer` is a standard installer callback as used by the
-        ``resolve()`` method. The `fallback` flag indicates whether we should
-        attempt to resolve older versions of a plugin if the newest version
-        cannot be resolved.
-
-        This method returns a 2-tuple: (`distributions`, `error_info`), where
-        `distributions` is a list of the distributions found in `plugin_env`
-        that were loadable, along with any other distributions that are needed
-        to resolve their dependencies.  `error_info` is a dictionary mapping
-        unloadable plugin distributions to an exception instance describing the
-        error that occurred. Usually this will be a ``DistributionNotFound`` or
-        ``VersionConflict`` instance.
-        """
-
-        plugin_projects = list(plugin_env)
-        # scan project names in alphabetic order
-        plugin_projects.sort()
-
-        error_info: dict[Distribution, Exception] = {}
-        distributions: dict[Distribution, Exception | None] = {}
-
-        if full_env is None:
-            env = Environment(self.entries)
-            env += plugin_env
-        else:
-            env = full_env + plugin_env
-
-        shadow_set = self.__class__([])
-        # put all our entries in shadow_set
-        list(map(shadow_set.add, self))
-
-        for project_name in plugin_projects:
-            for dist in plugin_env[project_name]:
-                req = [dist.as_requirement()]
-
-                try:
-                    resolvees = shadow_set.resolve(req, env, installer)
-
-                except ResolutionError as v:
-                    # save error info
-                    error_info[dist] = v
-                    if fallback:
-                        # try the next older version of project
-                        continue
-                    else:
-                        # give up on this project, keep going
-                        break
-
-                else:
-                    list(map(shadow_set.add, resolvees))
-                    distributions.update(dict.fromkeys(resolvees))
-
-                    # success, no need to try any more versions of this project
-                    break
-
-        sorted_distributions = list(distributions)
-        sorted_distributions.sort()
-
-        return sorted_distributions, error_info
-
-    def require(self, *requirements: _NestedStr):
-        """Ensure that distributions matching `requirements` are activated
-
-        `requirements` must be a string or a (possibly-nested) sequence
-        thereof, specifying the distributions and versions required.  The
-        return value is a sequence of the distributions that needed to be
-        activated to fulfill the requirements; all relevant distributions are
-        included, even if they were already activated in this working set.
-        """
-        needed = self.resolve(parse_requirements(requirements))
-
-        for dist in needed:
-            self.add(dist)
-
-        return needed
-
-    def subscribe(
-        self, callback: Callable[[Distribution], object], existing: bool = True
-    ):
-        """Invoke `callback` for all distributions
-
-        If `existing=True` (default),
-        call on all existing ones, as well.
-        """
-        if callback in self.callbacks:
-            return
-        self.callbacks.append(callback)
-        if not existing:
-            return
-        for dist in self:
-            callback(dist)
-
-    def _added_new(self, dist):
-        for callback in self.callbacks:
-            callback(dist)
-
-    def __getstate__(self):
-        return (
-            self.entries[:],
-            self.entry_keys.copy(),
-            self.by_key.copy(),
-            self.normalized_to_canonical_keys.copy(),
-            self.callbacks[:],
-        )
-
-    def __setstate__(self, e_k_b_n_c):
-        entries, keys, by_key, normalized_to_canonical_keys, callbacks = e_k_b_n_c
-        self.entries = entries[:]
-        self.entry_keys = keys.copy()
-        self.by_key = by_key.copy()
-        self.normalized_to_canonical_keys = normalized_to_canonical_keys.copy()
-        self.callbacks = callbacks[:]
-
-
-class _ReqExtras(Dict["Requirement", Tuple[str, ...]]):
-    """
-    Map each requirement to the extras that demanded it.
-    """
-
-    def markers_pass(self, req: Requirement, extras: tuple[str, ...] | None = None):
-        """
-        Evaluate markers for req against each extra that
-        demanded it.
-
-        Return False if the req has a marker and fails
-        evaluation. Otherwise, return True.
-        """
-        extra_evals = (
-            req.marker.evaluate({'extra': extra})
-            for extra in self.get(req, ()) + (extras or (None,))
-        )
-        return not req.marker or any(extra_evals)
-
-
-class Environment:
-    """Searchable snapshot of distributions on a search path"""
-
-    def __init__(
-        self,
-        search_path: Iterable[str] | None = None,
-        platform: str | None = get_supported_platform(),
-        python: str | None = PY_MAJOR,
-    ):
-        """Snapshot distributions available on a search path
-
-        Any distributions found on `search_path` are added to the environment.
-        `search_path` should be a sequence of ``sys.path`` items.  If not
-        supplied, ``sys.path`` is used.
-
-        `platform` is an optional string specifying the name of the platform
-        that platform-specific distributions must be compatible with.  If
-        unspecified, it defaults to the current platform.  `python` is an
-        optional string naming the desired version of Python (e.g. ``'3.6'``);
-        it defaults to the current version.
-
-        You may explicitly set `platform` (and/or `python`) to ``None`` if you
-        wish to map *all* distributions, not just those compatible with the
-        running platform or Python version.
-        """
-        self._distmap = {}
-        self.platform = platform
-        self.python = python
-        self.scan(search_path)
-
-    def can_add(self, dist: Distribution):
-        """Is distribution `dist` acceptable for this environment?
-
-        The distribution must match the platform and python version
-        requirements specified when this environment was created, or False
-        is returned.
-        """
-        py_compat = (
-            self.python is None
-            or dist.py_version is None
-            or dist.py_version == self.python
-        )
-        return py_compat and compatible_platforms(dist.platform, self.platform)
-
-    def remove(self, dist: Distribution):
-        """Remove `dist` from the environment"""
-        self._distmap[dist.key].remove(dist)
-
-    def scan(self, search_path: Iterable[str] | None = None):
-        """Scan `search_path` for distributions usable in this environment
-
-        Any distributions found are added to the environment.
-        `search_path` should be a sequence of ``sys.path`` items.  If not
-        supplied, ``sys.path`` is used.  Only distributions conforming to
-        the platform/python version defined at initialization are added.
-        """
-        if search_path is None:
-            search_path = sys.path
-
-        for item in search_path:
-            for dist in find_distributions(item):
-                self.add(dist)
-
-    def __getitem__(self, project_name: str) -> list[Distribution]:
-        """Return a newest-to-oldest list of distributions for `project_name`
-
-        Uses case-insensitive `project_name` comparison, assuming all the
-        project's distributions use their project's name converted to all
-        lowercase as their key.
-
-        """
-        distribution_key = project_name.lower()
-        return self._distmap.get(distribution_key, [])
-
-    def add(self, dist: Distribution):
-        """Add `dist` if we ``can_add()`` it and it has not already been added"""
-        if self.can_add(dist) and dist.has_version():
-            dists = self._distmap.setdefault(dist.key, [])
-            if dist not in dists:
-                dists.append(dist)
-                dists.sort(key=operator.attrgetter('hashcmp'), reverse=True)
-
-    @overload
-    def best_match(
-        self,
-        req: Requirement,
-        working_set: WorkingSet,
-        installer: _InstallerTypeT[_DistributionT],
-        replace_conflicting: bool = False,
-    ) -> _DistributionT: ...
-    @overload
-    def best_match(
-        self,
-        req: Requirement,
-        working_set: WorkingSet,
-        installer: _InstallerType | None = None,
-        replace_conflicting: bool = False,
-    ) -> Distribution | None: ...
-    def best_match(
-        self,
-        req: Requirement,
-        working_set: WorkingSet,
-        installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None,
-        replace_conflicting: bool = False,
-    ) -> Distribution | None:
-        """Find distribution best matching `req` and usable on `working_set`
-
-        This calls the ``find(req)`` method of the `working_set` to see if a
-        suitable distribution is already active.  (This may raise
-        ``VersionConflict`` if an unsuitable version of the project is already
-        active in the specified `working_set`.)  If a suitable distribution
-        isn't active, this method returns the newest distribution in the
-        environment that meets the ``Requirement`` in `req`.  If no suitable
-        distribution is found, and `installer` is supplied, then the result of
-        calling the environment's ``obtain(req, installer)`` method will be
-        returned.
-        """
-        try:
-            dist = working_set.find(req)
-        except VersionConflict:
-            if not replace_conflicting:
-                raise
-            dist = None
-        if dist is not None:
-            return dist
-        for dist in self[req.key]:
-            if dist in req:
-                return dist
-        # try to download/install
-        return self.obtain(req, installer)
-
-    @overload
-    def obtain(
-        self,
-        requirement: Requirement,
-        installer: _InstallerTypeT[_DistributionT],
-    ) -> _DistributionT: ...
-    @overload
-    def obtain(
-        self,
-        requirement: Requirement,
-        installer: Callable[[Requirement], None] | None = None,
-    ) -> None: ...
-    @overload
-    def obtain(
-        self,
-        requirement: Requirement,
-        installer: _InstallerType | None = None,
-    ) -> Distribution | None: ...
-    def obtain(
-        self,
-        requirement: Requirement,
-        installer: Callable[[Requirement], None]
-        | _InstallerType
-        | None
-        | _InstallerTypeT[_DistributionT] = None,
-    ) -> Distribution | None:
-        """Obtain a distribution matching `requirement` (e.g. via download)
-
-        Obtain a distro that matches requirement (e.g. via download).  In the
-        base ``Environment`` class, this routine just returns
-        ``installer(requirement)``, unless `installer` is None, in which case
-        None is returned instead.  This method is a hook that allows subclasses
-        to attempt other ways of obtaining a distribution before falling back
-        to the `installer` argument."""
-        return installer(requirement) if installer else None
-
-    def __iter__(self) -> Iterator[str]:
-        """Yield the unique project names of the available distributions"""
-        for key in self._distmap.keys():
-            if self[key]:
-                yield key
-
-    def __iadd__(self, other: Distribution | Environment):
-        """In-place addition of a distribution or environment"""
-        if isinstance(other, Distribution):
-            self.add(other)
-        elif isinstance(other, Environment):
-            for project in other:
-                for dist in other[project]:
-                    self.add(dist)
-        else:
-            raise TypeError("Can't add %r to environment" % (other,))
-        return self
-
-    def __add__(self, other: Distribution | Environment):
-        """Add an environment or distribution to an environment"""
-        new = self.__class__([], platform=None, python=None)
-        for env in self, other:
-            new += env
-        return new
-
-
-# XXX backward compatibility
-AvailableDistributions = Environment
-
-
-class ExtractionError(RuntimeError):
-    """An error occurred extracting a resource
-
-    The following attributes are available from instances of this exception:
-
-    manager
-        The resource manager that raised this exception
-
-    cache_path
-        The base directory for resource extraction
-
-    original_error
-        The exception instance that caused extraction to fail
-    """
-
-    manager: ResourceManager
-    cache_path: str
-    original_error: BaseException | None
-
-
-class ResourceManager:
-    """Manage resource extraction and packages"""
-
-    extraction_path: str | None = None
-
-    def __init__(self):
-        self.cached_files = {}
-
-    def resource_exists(self, package_or_requirement: _PkgReqType, resource_name: str):
-        """Does the named resource exist?"""
-        return get_provider(package_or_requirement).has_resource(resource_name)
-
-    def resource_isdir(self, package_or_requirement: _PkgReqType, resource_name: str):
-        """Is the named resource an existing directory?"""
-        return get_provider(package_or_requirement).resource_isdir(resource_name)
-
-    def resource_filename(
-        self, package_or_requirement: _PkgReqType, resource_name: str
-    ):
-        """Return a true filesystem path for specified resource"""
-        return get_provider(package_or_requirement).get_resource_filename(
-            self, resource_name
-        )
-
-    def resource_stream(self, package_or_requirement: _PkgReqType, resource_name: str):
-        """Return a readable file-like object for specified resource"""
-        return get_provider(package_or_requirement).get_resource_stream(
-            self, resource_name
-        )
-
-    def resource_string(
-        self, package_or_requirement: _PkgReqType, resource_name: str
-    ) -> bytes:
-        """Return specified resource as :obj:`bytes`"""
-        return get_provider(package_or_requirement).get_resource_string(
-            self, resource_name
-        )
-
-    def resource_listdir(self, package_or_requirement: _PkgReqType, resource_name: str):
-        """List the contents of the named resource directory"""
-        return get_provider(package_or_requirement).resource_listdir(resource_name)
-
-    def extraction_error(self) -> NoReturn:
-        """Give an error message for problems extracting file(s)"""
-
-        old_exc = sys.exc_info()[1]
-        cache_path = self.extraction_path or get_default_cache()
-
-        tmpl = textwrap.dedent(
-            """
-            Can't extract file(s) to egg cache
-
-            The following error occurred while trying to extract file(s)
-            to the Python egg cache:
-
-              {old_exc}
-
-            The Python egg cache directory is currently set to:
-
-              {cache_path}
-
-            Perhaps your account does not have write access to this directory?
-            You can change the cache directory by setting the PYTHON_EGG_CACHE
-            environment variable to point to an accessible directory.
-            """
-        ).lstrip()
-        err = ExtractionError(tmpl.format(**locals()))
-        err.manager = self
-        err.cache_path = cache_path
-        err.original_error = old_exc
-        raise err
-
-    def get_cache_path(self, archive_name: str, names: Iterable[StrPath] = ()):
-        """Return absolute location in cache for `archive_name` and `names`
-
-        The parent directory of the resulting path will be created if it does
-        not already exist.  `archive_name` should be the base filename of the
-        enclosing egg (which may not be the name of the enclosing zipfile!),
-        including its ".egg" extension.  `names`, if provided, should be a
-        sequence of path name parts "under" the egg's extraction location.
-
-        This method should only be called by resource providers that need to
-        obtain an extraction location, and only for names they intend to
-        extract, as it tracks the generated names for possible cleanup later.
-        """
-        extract_path = self.extraction_path or get_default_cache()
-        target_path = os.path.join(extract_path, archive_name + '-tmp', *names)
-        try:
-            _bypass_ensure_directory(target_path)
-        except Exception:
-            self.extraction_error()
-
-        self._warn_unsafe_extraction_path(extract_path)
-
-        self.cached_files[target_path] = True
-        return target_path
-
-    @staticmethod
-    def _warn_unsafe_extraction_path(path):
-        """
-        If the default extraction path is overridden and set to an insecure
-        location, such as /tmp, it opens up an opportunity for an attacker to
-        replace an extracted file with an unauthorized payload. Warn the user
-        if a known insecure location is used.
-
-        See Distribute #375 for more details.
-        """
-        if os.name == 'nt' and not path.startswith(os.environ['windir']):
-            # On Windows, permissions are generally restrictive by default
-            #  and temp directories are not writable by other users, so
-            #  bypass the warning.
-            return
-        mode = os.stat(path).st_mode
-        if mode & stat.S_IWOTH or mode & stat.S_IWGRP:
-            msg = (
-                "Extraction path is writable by group/others "
-                "and vulnerable to attack when "
-                "used with get_resource_filename ({path}). "
-                "Consider a more secure "
-                "location (set with .set_extraction_path or the "
-                "PYTHON_EGG_CACHE environment variable)."
-            ).format(**locals())
-            warnings.warn(msg, UserWarning)
-
-    def postprocess(self, tempname: StrOrBytesPath, filename: StrOrBytesPath):
-        """Perform any platform-specific postprocessing of `tempname`
-
-        This is where Mac header rewrites should be done; other platforms don't
-        have anything special they should do.
-
-        Resource providers should call this method ONLY after successfully
-        extracting a compressed resource.  They must NOT call it on resources
-        that are already in the filesystem.
-
-        `tempname` is the current (temporary) name of the file, and `filename`
-        is the name it will be renamed to by the caller after this routine
-        returns.
-        """
-
-        if os.name == 'posix':
-            # Make the resource executable
-            mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777
-            os.chmod(tempname, mode)
-
-    def set_extraction_path(self, path: str):
-        """Set the base path where resources will be extracted to, if needed.
-
-        If you do not call this routine before any extractions take place, the
-        path defaults to the return value of ``get_default_cache()``.  (Which
-        is based on the ``PYTHON_EGG_CACHE`` environment variable, with various
-        platform-specific fallbacks.  See that routine's documentation for more
-        details.)
-
-        Resources are extracted to subdirectories of this path based upon
-        information given by the ``IResourceProvider``.  You may set this to a
-        temporary directory, but then you must call ``cleanup_resources()`` to
-        delete the extracted files when done.  There is no guarantee that
-        ``cleanup_resources()`` will be able to remove all extracted files.
-
-        (Note: you may not change the extraction path for a given resource
-        manager once resources have been extracted, unless you first call
-        ``cleanup_resources()``.)
-        """
-        if self.cached_files:
-            raise ValueError("Can't change extraction path, files already extracted")
-
-        self.extraction_path = path
-
-    def cleanup_resources(self, force: bool = False) -> list[str]:
-        """
-        Delete all extracted resource files and directories, returning a list
-        of the file and directory names that could not be successfully removed.
-        This function does not have any concurrency protection, so it should
-        generally only be called when the extraction path is a temporary
-        directory exclusive to a single process.  This method is not
-        automatically called; you must call it explicitly or register it as an
-        ``atexit`` function if you wish to ensure cleanup of a temporary
-        directory used for extractions.
-        """
-        # XXX
-        return []
-
-
-def get_default_cache() -> str:
-    """
-    Return the ``PYTHON_EGG_CACHE`` environment variable
-    or a platform-relevant user cache dir for an app
-    named "Python-Eggs".
-    """
-    return os.environ.get('PYTHON_EGG_CACHE') or _user_cache_dir(appname='Python-Eggs')
-
-
-def safe_name(name: str):
-    """Convert an arbitrary string to a standard distribution name
-
-    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
-    """
-    return re.sub('[^A-Za-z0-9.]+', '-', name)
-
-
-def safe_version(version: str):
-    """
-    Convert an arbitrary string to a standard version string
-    """
-    try:
-        # normalize the version
-        return str(_packaging_version.Version(version))
-    except _packaging_version.InvalidVersion:
-        version = version.replace(' ', '.')
-        return re.sub('[^A-Za-z0-9.]+', '-', version)
-
-
-def _forgiving_version(version):
-    """Fallback when ``safe_version`` is not safe enough
-    >>> parse_version(_forgiving_version('0.23ubuntu1'))
-    
-    >>> parse_version(_forgiving_version('0.23-'))
-    
-    >>> parse_version(_forgiving_version('0.-_'))
-    
-    >>> parse_version(_forgiving_version('42.+?1'))
-    
-    >>> parse_version(_forgiving_version('hello world'))
-    
-    """
-    version = version.replace(' ', '.')
-    match = _PEP440_FALLBACK.search(version)
-    if match:
-        safe = match["safe"]
-        rest = version[len(safe) :]
-    else:
-        safe = "0"
-        rest = version
-    local = f"sanitized.{_safe_segment(rest)}".strip(".")
-    return f"{safe}.dev0+{local}"
-
-
-def _safe_segment(segment):
-    """Convert an arbitrary string into a safe segment"""
-    segment = re.sub('[^A-Za-z0-9.]+', '-', segment)
-    segment = re.sub('-[^A-Za-z0-9]+', '-', segment)
-    return re.sub(r'\.[^A-Za-z0-9]+', '.', segment).strip(".-")
-
-
-def safe_extra(extra: str):
-    """Convert an arbitrary string to a standard 'extra' name
-
-    Any runs of non-alphanumeric characters are replaced with a single '_',
-    and the result is always lowercased.
-    """
-    return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower()
-
-
-def to_filename(name: str):
-    """Convert a project or version name to its filename-escaped form
-
-    Any '-' characters are currently replaced with '_'.
-    """
-    return name.replace('-', '_')
-
-
-def invalid_marker(text: str):
-    """
-    Validate text as a PEP 508 environment marker; return an exception
-    if invalid or False otherwise.
-    """
-    try:
-        evaluate_marker(text)
-    except SyntaxError as e:
-        e.filename = None
-        e.lineno = None
-        return e
-    return False
-
-
-def evaluate_marker(text: str, extra: str | None = None) -> bool:
-    """
-    Evaluate a PEP 508 environment marker.
-    Return a boolean indicating the marker result in this environment.
-    Raise SyntaxError if marker is invalid.
-
-    This implementation uses the 'pyparsing' module.
-    """
-    try:
-        marker = _packaging_markers.Marker(text)
-        return marker.evaluate()
-    except _packaging_markers.InvalidMarker as e:
-        raise SyntaxError(e) from e
-
-
-class NullProvider:
-    """Try to implement resources and metadata for arbitrary PEP 302 loaders"""
-
-    egg_name: str | None = None
-    egg_info: str | None = None
-    loader: _LoaderProtocol | None = None
-
-    def __init__(self, module: _ModuleLike):
-        self.loader = getattr(module, '__loader__', None)
-        self.module_path = os.path.dirname(getattr(module, '__file__', ''))
-
-    def get_resource_filename(self, manager: ResourceManager, resource_name: str):
-        return self._fn(self.module_path, resource_name)
-
-    def get_resource_stream(self, manager: ResourceManager, resource_name: str):
-        return io.BytesIO(self.get_resource_string(manager, resource_name))
-
-    def get_resource_string(
-        self, manager: ResourceManager, resource_name: str
-    ) -> bytes:
-        return self._get(self._fn(self.module_path, resource_name))
-
-    def has_resource(self, resource_name: str):
-        return self._has(self._fn(self.module_path, resource_name))
-
-    def _get_metadata_path(self, name):
-        return self._fn(self.egg_info, name)
-
-    def has_metadata(self, name: str) -> bool:
-        if not self.egg_info:
-            return False
-
-        path = self._get_metadata_path(name)
-        return self._has(path)
-
-    def get_metadata(self, name: str):
-        if not self.egg_info:
-            return ""
-        path = self._get_metadata_path(name)
-        value = self._get(path)
-        try:
-            return value.decode('utf-8')
-        except UnicodeDecodeError as exc:
-            # Include the path in the error message to simplify
-            # troubleshooting, and without changing the exception type.
-            exc.reason += ' in {} file at path: {}'.format(name, path)
-            raise
-
-    def get_metadata_lines(self, name: str) -> Iterator[str]:
-        return yield_lines(self.get_metadata(name))
-
-    def resource_isdir(self, resource_name: str):
-        return self._isdir(self._fn(self.module_path, resource_name))
-
-    def metadata_isdir(self, name: str) -> bool:
-        return bool(self.egg_info and self._isdir(self._fn(self.egg_info, name)))
-
-    def resource_listdir(self, resource_name: str):
-        return self._listdir(self._fn(self.module_path, resource_name))
-
-    def metadata_listdir(self, name: str) -> list[str]:
-        if self.egg_info:
-            return self._listdir(self._fn(self.egg_info, name))
-        return []
-
-    def run_script(self, script_name: str, namespace: dict[str, Any]):
-        script = 'scripts/' + script_name
-        if not self.has_metadata(script):
-            raise ResolutionError(
-                "Script {script!r} not found in metadata at {self.egg_info!r}".format(
-                    **locals()
-                ),
-            )
-
-        script_text = self.get_metadata(script).replace('\r\n', '\n')
-        script_text = script_text.replace('\r', '\n')
-        script_filename = self._fn(self.egg_info, script)
-        namespace['__file__'] = script_filename
-        if os.path.exists(script_filename):
-            source = _read_utf8_with_fallback(script_filename)
-            code = compile(source, script_filename, 'exec')
-            exec(code, namespace, namespace)
-        else:
-            from linecache import cache
-
-            cache[script_filename] = (
-                len(script_text),
-                0,
-                script_text.split('\n'),
-                script_filename,
-            )
-            script_code = compile(script_text, script_filename, 'exec')
-            exec(script_code, namespace, namespace)
-
-    def _has(self, path) -> bool:
-        raise NotImplementedError(
-            "Can't perform this operation for unregistered loader type"
-        )
-
-    def _isdir(self, path) -> bool:
-        raise NotImplementedError(
-            "Can't perform this operation for unregistered loader type"
-        )
-
-    def _listdir(self, path) -> list[str]:
-        raise NotImplementedError(
-            "Can't perform this operation for unregistered loader type"
-        )
-
-    def _fn(self, base: str | None, resource_name: str):
-        if base is None:
-            raise TypeError(
-                "`base` parameter in `_fn` is `None`. Either override this method or check the parameter first."
-            )
-        self._validate_resource_path(resource_name)
-        if resource_name:
-            return os.path.join(base, *resource_name.split('/'))
-        return base
-
-    @staticmethod
-    def _validate_resource_path(path):
-        """
-        Validate the resource paths according to the docs.
-        https://setuptools.pypa.io/en/latest/pkg_resources.html#basic-resource-access
-
-        >>> warned = getfixture('recwarn')
-        >>> warnings.simplefilter('always')
-        >>> vrp = NullProvider._validate_resource_path
-        >>> vrp('foo/bar.txt')
-        >>> bool(warned)
-        False
-        >>> vrp('../foo/bar.txt')
-        >>> bool(warned)
-        True
-        >>> warned.clear()
-        >>> vrp('/foo/bar.txt')
-        >>> bool(warned)
-        True
-        >>> vrp('foo/../../bar.txt')
-        >>> bool(warned)
-        True
-        >>> warned.clear()
-        >>> vrp('foo/f../bar.txt')
-        >>> bool(warned)
-        False
-
-        Windows path separators are straight-up disallowed.
-        >>> vrp(r'\\foo/bar.txt')
-        Traceback (most recent call last):
-        ...
-        ValueError: Use of .. or absolute path in a resource path \
-is not allowed.
-
-        >>> vrp(r'C:\\foo/bar.txt')
-        Traceback (most recent call last):
-        ...
-        ValueError: Use of .. or absolute path in a resource path \
-is not allowed.
-
-        Blank values are allowed
-
-        >>> vrp('')
-        >>> bool(warned)
-        False
-
-        Non-string values are not.
-
-        >>> vrp(None)
-        Traceback (most recent call last):
-        ...
-        AttributeError: ...
-        """
-        invalid = (
-            os.path.pardir in path.split(posixpath.sep)
-            or posixpath.isabs(path)
-            or ntpath.isabs(path)
-            or path.startswith("\\")
-        )
-        if not invalid:
-            return
-
-        msg = "Use of .. or absolute path in a resource path is not allowed."
-
-        # Aggressively disallow Windows absolute paths
-        if (path.startswith("\\") or ntpath.isabs(path)) and not posixpath.isabs(path):
-            raise ValueError(msg)
-
-        # for compatibility, warn; in future
-        # raise ValueError(msg)
-        issue_warning(
-            msg[:-1] + " and will raise exceptions in a future release.",
-            DeprecationWarning,
-        )
-
-    def _get(self, path) -> bytes:
-        if hasattr(self.loader, 'get_data') and self.loader:
-            # Already checked get_data exists
-            return self.loader.get_data(path)  # type: ignore[attr-defined]
-        raise NotImplementedError(
-            "Can't perform this operation for loaders without 'get_data()'"
-        )
-
-
-register_loader_type(object, NullProvider)
-
-
-def _parents(path):
-    """
-    yield all parents of path including path
-    """
-    last = None
-    while path != last:
-        yield path
-        last = path
-        path, _ = os.path.split(path)
-
-
-class EggProvider(NullProvider):
-    """Provider based on a virtual filesystem"""
-
-    def __init__(self, module: _ModuleLike):
-        super().__init__(module)
-        self._setup_prefix()
-
-    def _setup_prefix(self):
-        # Assume that metadata may be nested inside a "basket"
-        # of multiple eggs and use module_path instead of .archive.
-        eggs = filter(_is_egg_path, _parents(self.module_path))
-        egg = next(eggs, None)
-        egg and self._set_egg(egg)
-
-    def _set_egg(self, path: str):
-        self.egg_name = os.path.basename(path)
-        self.egg_info = os.path.join(path, 'EGG-INFO')
-        self.egg_root = path
-
-
-class DefaultProvider(EggProvider):
-    """Provides access to package resources in the filesystem"""
-
-    def _has(self, path) -> bool:
-        return os.path.exists(path)
-
-    def _isdir(self, path) -> bool:
-        return os.path.isdir(path)
-
-    def _listdir(self, path):
-        return os.listdir(path)
-
-    def get_resource_stream(self, manager: object, resource_name: str):
-        return open(self._fn(self.module_path, resource_name), 'rb')
-
-    def _get(self, path) -> bytes:
-        with open(path, 'rb') as stream:
-            return stream.read()
-
-    @classmethod
-    def _register(cls):
-        loader_names = (
-            'SourceFileLoader',
-            'SourcelessFileLoader',
-        )
-        for name in loader_names:
-            loader_cls = getattr(importlib.machinery, name, type(None))
-            register_loader_type(loader_cls, cls)
-
-
-DefaultProvider._register()
-
-
-class EmptyProvider(NullProvider):
-    """Provider that returns nothing for all requests"""
-
-    # A special case, we don't want all Providers inheriting from NullProvider to have a potentially None module_path
-    module_path: str | None = None  # type: ignore[assignment]
-
-    _isdir = _has = lambda self, path: False
-
-    def _get(self, path) -> bytes:
-        return b''
-
-    def _listdir(self, path):
-        return []
-
-    def __init__(self):
-        pass
-
-
-empty_provider = EmptyProvider()
-
-
-class ZipManifests(Dict[str, "MemoizedZipManifests.manifest_mod"]):
-    """
-    zip manifest builder
-    """
-
-    # `path` could be `StrPath | IO[bytes]` but that violates the LSP for `MemoizedZipManifests.load`
-    @classmethod
-    def build(cls, path: str):
-        """
-        Build a dictionary similar to the zipimport directory
-        caches, except instead of tuples, store ZipInfo objects.
-
-        Use a platform-specific path separator (os.sep) for the path keys
-        for compatibility with pypy on Windows.
-        """
-        with zipfile.ZipFile(path) as zfile:
-            items = (
-                (
-                    name.replace('/', os.sep),
-                    zfile.getinfo(name),
-                )
-                for name in zfile.namelist()
-            )
-            return dict(items)
-
-    load = build
-
-
-class MemoizedZipManifests(ZipManifests):
-    """
-    Memoized zipfile manifests.
-    """
-
-    class manifest_mod(NamedTuple):
-        manifest: dict[str, zipfile.ZipInfo]
-        mtime: float
-
-    def load(self, path: str) -> dict[str, zipfile.ZipInfo]:  # type: ignore[override] # ZipManifests.load is a classmethod
-        """
-        Load a manifest at path or return a suitable manifest already loaded.
-        """
-        path = os.path.normpath(path)
-        mtime = os.stat(path).st_mtime
-
-        if path not in self or self[path].mtime != mtime:
-            manifest = self.build(path)
-            self[path] = self.manifest_mod(manifest, mtime)
-
-        return self[path].manifest
-
-
-class ZipProvider(EggProvider):
-    """Resource support for zips and eggs"""
-
-    eagers: list[str] | None = None
-    _zip_manifests = MemoizedZipManifests()
-    # ZipProvider's loader should always be a zipimporter or equivalent
-    loader: zipimport.zipimporter
-
-    def __init__(self, module: _ZipLoaderModule):
-        super().__init__(module)
-        self.zip_pre = self.loader.archive + os.sep
-
-    def _zipinfo_name(self, fspath):
-        # Convert a virtual filename (full path to file) into a zipfile subpath
-        # usable with the zipimport directory cache for our target archive
-        fspath = fspath.rstrip(os.sep)
-        if fspath == self.loader.archive:
-            return ''
-        if fspath.startswith(self.zip_pre):
-            return fspath[len(self.zip_pre) :]
-        raise AssertionError("%s is not a subpath of %s" % (fspath, self.zip_pre))
-
-    def _parts(self, zip_path):
-        # Convert a zipfile subpath into an egg-relative path part list.
-        # pseudo-fs path
-        fspath = self.zip_pre + zip_path
-        if fspath.startswith(self.egg_root + os.sep):
-            return fspath[len(self.egg_root) + 1 :].split(os.sep)
-        raise AssertionError("%s is not a subpath of %s" % (fspath, self.egg_root))
-
-    @property
-    def zipinfo(self):
-        return self._zip_manifests.load(self.loader.archive)
-
-    def get_resource_filename(self, manager: ResourceManager, resource_name: str):
-        if not self.egg_name:
-            raise NotImplementedError(
-                "resource_filename() only supported for .egg, not .zip"
-            )
-        # no need to lock for extraction, since we use temp names
-        zip_path = self._resource_to_zip(resource_name)
-        eagers = self._get_eager_resources()
-        if '/'.join(self._parts(zip_path)) in eagers:
-            for name in eagers:
-                self._extract_resource(manager, self._eager_to_zip(name))
-        return self._extract_resource(manager, zip_path)
-
-    @staticmethod
-    def _get_date_and_size(zip_stat):
-        size = zip_stat.file_size
-        # ymdhms+wday, yday, dst
-        date_time = zip_stat.date_time + (0, 0, -1)
-        # 1980 offset already done
-        timestamp = time.mktime(date_time)
-        return timestamp, size
-
-    # FIXME: 'ZipProvider._extract_resource' is too complex (12)
-    def _extract_resource(self, manager: ResourceManager, zip_path) -> str:  # noqa: C901
-        if zip_path in self._index():
-            for name in self._index()[zip_path]:
-                last = self._extract_resource(manager, os.path.join(zip_path, name))
-            # return the extracted directory name
-            return os.path.dirname(last)
-
-        timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
-
-        if not WRITE_SUPPORT:
-            raise OSError(
-                '"os.rename" and "os.unlink" are not supported on this platform'
-            )
-        try:
-            if not self.egg_name:
-                raise OSError(
-                    '"egg_name" is empty. This likely means no egg could be found from the "module_path".'
-                )
-            real_path = manager.get_cache_path(self.egg_name, self._parts(zip_path))
-
-            if self._is_current(real_path, zip_path):
-                return real_path
-
-            outf, tmpnam = _mkstemp(
-                ".$extract",
-                dir=os.path.dirname(real_path),
-            )
-            os.write(outf, self.loader.get_data(zip_path))
-            os.close(outf)
-            utime(tmpnam, (timestamp, timestamp))
-            manager.postprocess(tmpnam, real_path)
-
-            try:
-                rename(tmpnam, real_path)
-
-            except OSError:
-                if os.path.isfile(real_path):
-                    if self._is_current(real_path, zip_path):
-                        # the file became current since it was checked above,
-                        #  so proceed.
-                        return real_path
-                    # Windows, del old file and retry
-                    elif os.name == 'nt':
-                        unlink(real_path)
-                        rename(tmpnam, real_path)
-                        return real_path
-                raise
-
-        except OSError:
-            # report a user-friendly error
-            manager.extraction_error()
-
-        return real_path
-
-    def _is_current(self, file_path, zip_path):
-        """
-        Return True if the file_path is current for this zip_path
-        """
-        timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
-        if not os.path.isfile(file_path):
-            return False
-        stat = os.stat(file_path)
-        if stat.st_size != size or stat.st_mtime != timestamp:
-            return False
-        # check that the contents match
-        zip_contents = self.loader.get_data(zip_path)
-        with open(file_path, 'rb') as f:
-            file_contents = f.read()
-        return zip_contents == file_contents
-
-    def _get_eager_resources(self):
-        if self.eagers is None:
-            eagers = []
-            for name in ('native_libs.txt', 'eager_resources.txt'):
-                if self.has_metadata(name):
-                    eagers.extend(self.get_metadata_lines(name))
-            self.eagers = eagers
-        return self.eagers
-
-    def _index(self):
-        try:
-            return self._dirindex
-        except AttributeError:
-            ind = {}
-            for path in self.zipinfo:
-                parts = path.split(os.sep)
-                while parts:
-                    parent = os.sep.join(parts[:-1])
-                    if parent in ind:
-                        ind[parent].append(parts[-1])
-                        break
-                    else:
-                        ind[parent] = [parts.pop()]
-            self._dirindex = ind
-            return ind
-
-    def _has(self, fspath) -> bool:
-        zip_path = self._zipinfo_name(fspath)
-        return zip_path in self.zipinfo or zip_path in self._index()
-
-    def _isdir(self, fspath) -> bool:
-        return self._zipinfo_name(fspath) in self._index()
-
-    def _listdir(self, fspath):
-        return list(self._index().get(self._zipinfo_name(fspath), ()))
-
-    def _eager_to_zip(self, resource_name: str):
-        return self._zipinfo_name(self._fn(self.egg_root, resource_name))
-
-    def _resource_to_zip(self, resource_name: str):
-        return self._zipinfo_name(self._fn(self.module_path, resource_name))
-
-
-register_loader_type(zipimport.zipimporter, ZipProvider)
-
-
-class FileMetadata(EmptyProvider):
-    """Metadata handler for standalone PKG-INFO files
-
-    Usage::
-
-        metadata = FileMetadata("/path/to/PKG-INFO")
-
-    This provider rejects all data and metadata requests except for PKG-INFO,
-    which is treated as existing, and will be the contents of the file at
-    the provided location.
-    """
-
-    def __init__(self, path: StrPath):
-        self.path = path
-
-    def _get_metadata_path(self, name):
-        return self.path
-
-    def has_metadata(self, name: str) -> bool:
-        return name == 'PKG-INFO' and os.path.isfile(self.path)
-
-    def get_metadata(self, name: str):
-        if name != 'PKG-INFO':
-            raise KeyError("No metadata except PKG-INFO is available")
-
-        with open(self.path, encoding='utf-8', errors="replace") as f:
-            metadata = f.read()
-        self._warn_on_replacement(metadata)
-        return metadata
-
-    def _warn_on_replacement(self, metadata):
-        replacement_char = '�'
-        if replacement_char in metadata:
-            tmpl = "{self.path} could not be properly decoded in UTF-8"
-            msg = tmpl.format(**locals())
-            warnings.warn(msg)
-
-    def get_metadata_lines(self, name: str) -> Iterator[str]:
-        return yield_lines(self.get_metadata(name))
-
-
-class PathMetadata(DefaultProvider):
-    """Metadata provider for egg directories
-
-    Usage::
-
-        # Development eggs:
-
-        egg_info = "/path/to/PackageName.egg-info"
-        base_dir = os.path.dirname(egg_info)
-        metadata = PathMetadata(base_dir, egg_info)
-        dist_name = os.path.splitext(os.path.basename(egg_info))[0]
-        dist = Distribution(basedir, project_name=dist_name, metadata=metadata)
-
-        # Unpacked egg directories:
-
-        egg_path = "/path/to/PackageName-ver-pyver-etc.egg"
-        metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO'))
-        dist = Distribution.from_filename(egg_path, metadata=metadata)
-    """
-
-    def __init__(self, path: str, egg_info: str):
-        self.module_path = path
-        self.egg_info = egg_info
-
-
-class EggMetadata(ZipProvider):
-    """Metadata provider for .egg files"""
-
-    def __init__(self, importer: zipimport.zipimporter):
-        """Create a metadata provider from a zipimporter"""
-
-        self.zip_pre = importer.archive + os.sep
-        self.loader = importer
-        if importer.prefix:
-            self.module_path = os.path.join(importer.archive, importer.prefix)
-        else:
-            self.module_path = importer.archive
-        self._setup_prefix()
-
-
-_distribution_finders: dict[type, _DistFinderType[Any]] = _declare_state(
-    'dict', '_distribution_finders', {}
-)
-
-
-def register_finder(importer_type: type[_T], distribution_finder: _DistFinderType[_T]):
-    """Register `distribution_finder` to find distributions in sys.path items
-
-    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
-    handler), and `distribution_finder` is a callable that, passed a path
-    item and the importer instance, yields ``Distribution`` instances found on
-    that path item.  See ``pkg_resources.find_on_path`` for an example."""
-    _distribution_finders[importer_type] = distribution_finder
-
-
-def find_distributions(path_item: str, only: bool = False):
-    """Yield distributions accessible via `path_item`"""
-    importer = get_importer(path_item)
-    finder = _find_adapter(_distribution_finders, importer)
-    return finder(importer, path_item, only)
-
-
-def find_eggs_in_zip(
-    importer: zipimport.zipimporter, path_item: str, only: bool = False
-) -> Iterator[Distribution]:
-    """
-    Find eggs in zip files; possibly multiple nested eggs.
-    """
-    if importer.archive.endswith('.whl'):
-        # wheels are not supported with this finder
-        # they don't have PKG-INFO metadata, and won't ever contain eggs
-        return
-    metadata = EggMetadata(importer)
-    if metadata.has_metadata('PKG-INFO'):
-        yield Distribution.from_filename(path_item, metadata=metadata)
-    if only:
-        # don't yield nested distros
-        return
-    for subitem in metadata.resource_listdir(''):
-        if _is_egg_path(subitem):
-            subpath = os.path.join(path_item, subitem)
-            dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath)
-            yield from dists
-        elif subitem.lower().endswith(('.dist-info', '.egg-info')):
-            subpath = os.path.join(path_item, subitem)
-            submeta = EggMetadata(zipimport.zipimporter(subpath))
-            submeta.egg_info = subpath
-            yield Distribution.from_location(path_item, subitem, submeta)
-
-
-register_finder(zipimport.zipimporter, find_eggs_in_zip)
-
-
-def find_nothing(
-    importer: object | None, path_item: str | None, only: bool | None = False
-):
-    return ()
-
-
-register_finder(object, find_nothing)
-
-
-def find_on_path(importer: object | None, path_item, only=False):
-    """Yield distributions accessible on a sys.path directory"""
-    path_item = _normalize_cached(path_item)
-
-    if _is_unpacked_egg(path_item):
-        yield Distribution.from_filename(
-            path_item,
-            metadata=PathMetadata(path_item, os.path.join(path_item, 'EGG-INFO')),
-        )
-        return
-
-    entries = (os.path.join(path_item, child) for child in safe_listdir(path_item))
-
-    # scan for .egg and .egg-info in directory
-    for entry in sorted(entries):
-        fullpath = os.path.join(path_item, entry)
-        factory = dist_factory(path_item, entry, only)
-        yield from factory(fullpath)
-
-
-def dist_factory(path_item, entry, only):
-    """Return a dist_factory for the given entry."""
-    lower = entry.lower()
-    is_egg_info = lower.endswith('.egg-info')
-    is_dist_info = lower.endswith('.dist-info') and os.path.isdir(
-        os.path.join(path_item, entry)
-    )
-    is_meta = is_egg_info or is_dist_info
-    return (
-        distributions_from_metadata
-        if is_meta
-        else find_distributions
-        if not only and _is_egg_path(entry)
-        else resolve_egg_link
-        if not only and lower.endswith('.egg-link')
-        else NoDists()
-    )
-
-
-class NoDists:
-    """
-    >>> bool(NoDists())
-    False
-
-    >>> list(NoDists()('anything'))
-    []
-    """
-
-    def __bool__(self):
-        return False
-
-    def __call__(self, fullpath):
-        return iter(())
-
-
-def safe_listdir(path: StrOrBytesPath):
-    """
-    Attempt to list contents of path, but suppress some exceptions.
-    """
-    try:
-        return os.listdir(path)
-    except (PermissionError, NotADirectoryError):
-        pass
-    except OSError as e:
-        # Ignore the directory if does not exist, not a directory or
-        # permission denied
-        if e.errno not in (errno.ENOTDIR, errno.EACCES, errno.ENOENT):
-            raise
-    return ()
-
-
-def distributions_from_metadata(path: str):
-    root = os.path.dirname(path)
-    if os.path.isdir(path):
-        if len(os.listdir(path)) == 0:
-            # empty metadata dir; skip
-            return
-        metadata: _MetadataType = PathMetadata(root, path)
-    else:
-        metadata = FileMetadata(path)
-    entry = os.path.basename(path)
-    yield Distribution.from_location(
-        root,
-        entry,
-        metadata,
-        precedence=DEVELOP_DIST,
-    )
-
-
-def non_empty_lines(path):
-    """
-    Yield non-empty lines from file at path
-    """
-    for line in _read_utf8_with_fallback(path).splitlines():
-        line = line.strip()
-        if line:
-            yield line
-
-
-def resolve_egg_link(path):
-    """
-    Given a path to an .egg-link, resolve distributions
-    present in the referenced path.
-    """
-    referenced_paths = non_empty_lines(path)
-    resolved_paths = (
-        os.path.join(os.path.dirname(path), ref) for ref in referenced_paths
-    )
-    dist_groups = map(find_distributions, resolved_paths)
-    return next(dist_groups, ())
-
-
-if hasattr(pkgutil, 'ImpImporter'):
-    register_finder(pkgutil.ImpImporter, find_on_path)
-
-register_finder(importlib.machinery.FileFinder, find_on_path)
-
-_namespace_handlers: dict[type, _NSHandlerType[Any]] = _declare_state(
-    'dict', '_namespace_handlers', {}
-)
-_namespace_packages: dict[str | None, list[str]] = _declare_state(
-    'dict', '_namespace_packages', {}
-)
-
-
-def register_namespace_handler(
-    importer_type: type[_T], namespace_handler: _NSHandlerType[_T]
-):
-    """Register `namespace_handler` to declare namespace packages
-
-    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
-    handler), and `namespace_handler` is a callable like this::
-
-        def namespace_handler(importer, path_entry, moduleName, module):
-            # return a path_entry to use for child packages
-
-    Namespace handlers are only called if the importer object has already
-    agreed that it can handle the relevant path item, and they should only
-    return a subpath if the module __path__ does not already contain an
-    equivalent subpath.  For an example namespace handler, see
-    ``pkg_resources.file_ns_handler``.
-    """
-    _namespace_handlers[importer_type] = namespace_handler
-
-
-def _handle_ns(packageName, path_item):
-    """Ensure that named package includes a subpath of path_item (if needed)"""
-
-    importer = get_importer(path_item)
-    if importer is None:
-        return None
-
-    # use find_spec (PEP 451) and fall-back to find_module (PEP 302)
-    try:
-        spec = importer.find_spec(packageName)
-    except AttributeError:
-        # capture warnings due to #1111
-        with warnings.catch_warnings():
-            warnings.simplefilter("ignore")
-            loader = importer.find_module(packageName)
-    else:
-        loader = spec.loader if spec else None
-
-    if loader is None:
-        return None
-    module = sys.modules.get(packageName)
-    if module is None:
-        module = sys.modules[packageName] = types.ModuleType(packageName)
-        module.__path__ = []
-        _set_parent_ns(packageName)
-    elif not hasattr(module, '__path__'):
-        raise TypeError("Not a package:", packageName)
-    handler = _find_adapter(_namespace_handlers, importer)
-    subpath = handler(importer, path_item, packageName, module)
-    if subpath is not None:
-        path = module.__path__
-        path.append(subpath)
-        importlib.import_module(packageName)
-        _rebuild_mod_path(path, packageName, module)
-    return subpath
-
-
-def _rebuild_mod_path(orig_path, package_name, module: types.ModuleType):
-    """
-    Rebuild module.__path__ ensuring that all entries are ordered
-    corresponding to their sys.path order
-    """
-    sys_path = [_normalize_cached(p) for p in sys.path]
-
-    def safe_sys_path_index(entry):
-        """
-        Workaround for #520 and #513.
-        """
-        try:
-            return sys_path.index(entry)
-        except ValueError:
-            return float('inf')
-
-    def position_in_sys_path(path):
-        """
-        Return the ordinal of the path based on its position in sys.path
-        """
-        path_parts = path.split(os.sep)
-        module_parts = package_name.count('.') + 1
-        parts = path_parts[:-module_parts]
-        return safe_sys_path_index(_normalize_cached(os.sep.join(parts)))
-
-    new_path = sorted(orig_path, key=position_in_sys_path)
-    new_path = [_normalize_cached(p) for p in new_path]
-
-    if isinstance(module.__path__, list):
-        module.__path__[:] = new_path
-    else:
-        module.__path__ = new_path
-
-
-def declare_namespace(packageName: str):
-    """Declare that package 'packageName' is a namespace package"""
-
-    msg = (
-        f"Deprecated call to `pkg_resources.declare_namespace({packageName!r})`.\n"
-        "Implementing implicit namespace packages (as specified in PEP 420) "
-        "is preferred to `pkg_resources.declare_namespace`. "
-        "See https://setuptools.pypa.io/en/latest/references/"
-        "keywords.html#keyword-namespace-packages"
-    )
-    warnings.warn(msg, DeprecationWarning, stacklevel=2)
-
-    _imp.acquire_lock()
-    try:
-        if packageName in _namespace_packages:
-            return
-
-        path: MutableSequence[str] = sys.path
-        parent, _, _ = packageName.rpartition('.')
-
-        if parent:
-            declare_namespace(parent)
-            if parent not in _namespace_packages:
-                __import__(parent)
-            try:
-                path = sys.modules[parent].__path__
-            except AttributeError as e:
-                raise TypeError("Not a package:", parent) from e
-
-        # Track what packages are namespaces, so when new path items are added,
-        # they can be updated
-        _namespace_packages.setdefault(parent or None, []).append(packageName)
-        _namespace_packages.setdefault(packageName, [])
-
-        for path_item in path:
-            # Ensure all the parent's path items are reflected in the child,
-            # if they apply
-            _handle_ns(packageName, path_item)
-
-    finally:
-        _imp.release_lock()
-
-
-def fixup_namespace_packages(path_item: str, parent: str | None = None):
-    """Ensure that previously-declared namespace packages include path_item"""
-    _imp.acquire_lock()
-    try:
-        for package in _namespace_packages.get(parent, ()):
-            subpath = _handle_ns(package, path_item)
-            if subpath:
-                fixup_namespace_packages(subpath, package)
-    finally:
-        _imp.release_lock()
-
-
-def file_ns_handler(
-    importer: object,
-    path_item: StrPath,
-    packageName: str,
-    module: types.ModuleType,
-):
-    """Compute an ns-package subpath for a filesystem or zipfile importer"""
-
-    subpath = os.path.join(path_item, packageName.split('.')[-1])
-    normalized = _normalize_cached(subpath)
-    for item in module.__path__:
-        if _normalize_cached(item) == normalized:
-            break
-    else:
-        # Only return the path if it's not already there
-        return subpath
-
-
-if hasattr(pkgutil, 'ImpImporter'):
-    register_namespace_handler(pkgutil.ImpImporter, file_ns_handler)
-
-register_namespace_handler(zipimport.zipimporter, file_ns_handler)
-register_namespace_handler(importlib.machinery.FileFinder, file_ns_handler)
-
-
-def null_ns_handler(
-    importer: object,
-    path_item: str | None,
-    packageName: str | None,
-    module: _ModuleLike | None,
-):
-    return None
-
-
-register_namespace_handler(object, null_ns_handler)
-
-
-@overload
-def normalize_path(filename: StrPath) -> str: ...
-@overload
-def normalize_path(filename: BytesPath) -> bytes: ...
-def normalize_path(filename: StrOrBytesPath):
-    """Normalize a file/dir name for comparison purposes"""
-    return os.path.normcase(os.path.realpath(os.path.normpath(_cygwin_patch(filename))))
-
-
-def _cygwin_patch(filename: StrOrBytesPath):  # pragma: nocover
-    """
-    Contrary to POSIX 2008, on Cygwin, getcwd (3) contains
-    symlink components. Using
-    os.path.abspath() works around this limitation. A fix in os.getcwd()
-    would probably better, in Cygwin even more so, except
-    that this seems to be by design...
-    """
-    return os.path.abspath(filename) if sys.platform == 'cygwin' else filename
-
-
-if TYPE_CHECKING:
-    # https://github.com/python/mypy/issues/16261
-    # https://github.com/python/typeshed/issues/6347
-    @overload
-    def _normalize_cached(filename: StrPath) -> str: ...
-    @overload
-    def _normalize_cached(filename: BytesPath) -> bytes: ...
-    def _normalize_cached(filename: StrOrBytesPath) -> str | bytes: ...
-else:
-
-    @functools.lru_cache(maxsize=None)
-    def _normalize_cached(filename):
-        return normalize_path(filename)
-
-
-def _is_egg_path(path):
-    """
-    Determine if given path appears to be an egg.
-    """
-    return _is_zip_egg(path) or _is_unpacked_egg(path)
-
-
-def _is_zip_egg(path):
-    return (
-        path.lower().endswith('.egg')
-        and os.path.isfile(path)
-        and zipfile.is_zipfile(path)
-    )
-
-
-def _is_unpacked_egg(path):
-    """
-    Determine if given path appears to be an unpacked egg.
-    """
-    return path.lower().endswith('.egg') and os.path.isfile(
-        os.path.join(path, 'EGG-INFO', 'PKG-INFO')
-    )
-
-
-def _set_parent_ns(packageName):
-    parts = packageName.split('.')
-    name = parts.pop()
-    if parts:
-        parent = '.'.join(parts)
-        setattr(sys.modules[parent], name, sys.modules[packageName])
-
-
-MODULE = re.compile(r"\w+(\.\w+)*$").match
-EGG_NAME = re.compile(
-    r"""
-    (?P[^-]+) (
-        -(?P[^-]+) (
-            -py(?P[^-]+) (
-                -(?P.+)
-            )?
-        )?
-    )?
-    """,
-    re.VERBOSE | re.IGNORECASE,
-).match
-
-
-class EntryPoint:
-    """Object representing an advertised importable object"""
-
-    def __init__(
-        self,
-        name: str,
-        module_name: str,
-        attrs: Iterable[str] = (),
-        extras: Iterable[str] = (),
-        dist: Distribution | None = None,
-    ):
-        if not MODULE(module_name):
-            raise ValueError("Invalid module name", module_name)
-        self.name = name
-        self.module_name = module_name
-        self.attrs = tuple(attrs)
-        self.extras = tuple(extras)
-        self.dist = dist
-
-    def __str__(self):
-        s = "%s = %s" % (self.name, self.module_name)
-        if self.attrs:
-            s += ':' + '.'.join(self.attrs)
-        if self.extras:
-            s += ' [%s]' % ','.join(self.extras)
-        return s
-
-    def __repr__(self):
-        return "EntryPoint.parse(%r)" % str(self)
-
-    @overload
-    def load(
-        self,
-        require: Literal[True] = True,
-        env: Environment | None = None,
-        installer: _InstallerType | None = None,
-    ) -> _ResolvedEntryPoint: ...
-    @overload
-    def load(
-        self,
-        require: Literal[False],
-        *args: Any,
-        **kwargs: Any,
-    ) -> _ResolvedEntryPoint: ...
-    def load(
-        self,
-        require: bool = True,
-        *args: Environment | _InstallerType | None,
-        **kwargs: Environment | _InstallerType | None,
-    ) -> _ResolvedEntryPoint:
-        """
-        Require packages for this EntryPoint, then resolve it.
-        """
-        if not require or args or kwargs:
-            warnings.warn(
-                "Parameters to load are deprecated.  Call .resolve and "
-                ".require separately.",
-                PkgResourcesDeprecationWarning,
-                stacklevel=2,
-            )
-        if require:
-            # We could pass `env` and `installer` directly,
-            # but keeping `*args` and `**kwargs` for backwards compatibility
-            self.require(*args, **kwargs)  # type: ignore
-        return self.resolve()
-
-    def resolve(self) -> _ResolvedEntryPoint:
-        """
-        Resolve the entry point from its module and attrs.
-        """
-        module = __import__(self.module_name, fromlist=['__name__'], level=0)
-        try:
-            return functools.reduce(getattr, self.attrs, module)
-        except AttributeError as exc:
-            raise ImportError(str(exc)) from exc
-
-    def require(
-        self,
-        env: Environment | None = None,
-        installer: _InstallerType | None = None,
-    ):
-        if not self.dist:
-            error_cls = UnknownExtra if self.extras else AttributeError
-            raise error_cls("Can't require() without a distribution", self)
-
-        # Get the requirements for this entry point with all its extras and
-        # then resolve them. We have to pass `extras` along when resolving so
-        # that the working set knows what extras we want. Otherwise, for
-        # dist-info distributions, the working set will assume that the
-        # requirements for that extra are purely optional and skip over them.
-        reqs = self.dist.requires(self.extras)
-        items = working_set.resolve(reqs, env, installer, extras=self.extras)
-        list(map(working_set.add, items))
-
-    pattern = re.compile(
-        r'\s*'
-        r'(?P.+?)\s*'
-        r'=\s*'
-        r'(?P[\w.]+)\s*'
-        r'(:\s*(?P[\w.]+))?\s*'
-        r'(?P\[.*\])?\s*$'
-    )
-
-    @classmethod
-    def parse(cls, src: str, dist: Distribution | None = None):
-        """Parse a single entry point from string `src`
-
-        Entry point syntax follows the form::
-
-            name = some.module:some.attr [extra1, extra2]
-
-        The entry name and module name are required, but the ``:attrs`` and
-        ``[extras]`` parts are optional
-        """
-        m = cls.pattern.match(src)
-        if not m:
-            msg = "EntryPoint must be in 'name=module:attrs [extras]' format"
-            raise ValueError(msg, src)
-        res = m.groupdict()
-        extras = cls._parse_extras(res['extras'])
-        attrs = res['attr'].split('.') if res['attr'] else ()
-        return cls(res['name'], res['module'], attrs, extras, dist)
-
-    @classmethod
-    def _parse_extras(cls, extras_spec):
-        if not extras_spec:
-            return ()
-        req = Requirement.parse('x' + extras_spec)
-        if req.specs:
-            raise ValueError
-        return req.extras
-
-    @classmethod
-    def parse_group(
-        cls,
-        group: str,
-        lines: _NestedStr,
-        dist: Distribution | None = None,
-    ):
-        """Parse an entry point group"""
-        if not MODULE(group):
-            raise ValueError("Invalid group name", group)
-        this: dict[str, Self] = {}
-        for line in yield_lines(lines):
-            ep = cls.parse(line, dist)
-            if ep.name in this:
-                raise ValueError("Duplicate entry point", group, ep.name)
-            this[ep.name] = ep
-        return this
-
-    @classmethod
-    def parse_map(
-        cls,
-        data: str | Iterable[str] | dict[str, str | Iterable[str]],
-        dist: Distribution | None = None,
-    ):
-        """Parse a map of entry point groups"""
-        _data: Iterable[tuple[str | None, str | Iterable[str]]]
-        if isinstance(data, dict):
-            _data = data.items()
-        else:
-            _data = split_sections(data)
-        maps: dict[str, dict[str, Self]] = {}
-        for group, lines in _data:
-            if group is None:
-                if not lines:
-                    continue
-                raise ValueError("Entry points must be listed in groups")
-            group = group.strip()
-            if group in maps:
-                raise ValueError("Duplicate group name", group)
-            maps[group] = cls.parse_group(group, lines, dist)
-        return maps
-
-
-def _version_from_file(lines):
-    """
-    Given an iterable of lines from a Metadata file, return
-    the value of the Version field, if present, or None otherwise.
-    """
-
-    def is_version_line(line):
-        return line.lower().startswith('version:')
-
-    version_lines = filter(is_version_line, lines)
-    line = next(iter(version_lines), '')
-    _, _, value = line.partition(':')
-    return safe_version(value.strip()) or None
-
-
-class Distribution:
-    """Wrap an actual or potential sys.path entry w/metadata"""
-
-    PKG_INFO = 'PKG-INFO'
-
-    def __init__(
-        self,
-        location: str | None = None,
-        metadata: _MetadataType = None,
-        project_name: str | None = None,
-        version: str | None = None,
-        py_version: str | None = PY_MAJOR,
-        platform: str | None = None,
-        precedence: int = EGG_DIST,
-    ):
-        self.project_name = safe_name(project_name or 'Unknown')
-        if version is not None:
-            self._version = safe_version(version)
-        self.py_version = py_version
-        self.platform = platform
-        self.location = location
-        self.precedence = precedence
-        self._provider = metadata or empty_provider
-
-    @classmethod
-    def from_location(
-        cls,
-        location: str,
-        basename: StrPath,
-        metadata: _MetadataType = None,
-        **kw: int,  # We could set `precedence` explicitly, but keeping this as `**kw` for full backwards and subclassing compatibility
-    ) -> Distribution:
-        project_name, version, py_version, platform = [None] * 4
-        basename, ext = os.path.splitext(basename)
-        if ext.lower() in _distributionImpl:
-            cls = _distributionImpl[ext.lower()]
-
-            match = EGG_NAME(basename)
-            if match:
-                project_name, version, py_version, platform = match.group(
-                    'name', 'ver', 'pyver', 'plat'
-                )
-        return cls(
-            location,
-            metadata,
-            project_name=project_name,
-            version=version,
-            py_version=py_version,
-            platform=platform,
-            **kw,
-        )._reload_version()
-
-    def _reload_version(self):
-        return self
-
-    @property
-    def hashcmp(self):
-        return (
-            self._forgiving_parsed_version,
-            self.precedence,
-            self.key,
-            self.location,
-            self.py_version or '',
-            self.platform or '',
-        )
-
-    def __hash__(self):
-        return hash(self.hashcmp)
-
-    def __lt__(self, other: Distribution):
-        return self.hashcmp < other.hashcmp
-
-    def __le__(self, other: Distribution):
-        return self.hashcmp <= other.hashcmp
-
-    def __gt__(self, other: Distribution):
-        return self.hashcmp > other.hashcmp
-
-    def __ge__(self, other: Distribution):
-        return self.hashcmp >= other.hashcmp
-
-    def __eq__(self, other: object):
-        if not isinstance(other, self.__class__):
-            # It's not a Distribution, so they are not equal
-            return False
-        return self.hashcmp == other.hashcmp
-
-    def __ne__(self, other: object):
-        return not self == other
-
-    # These properties have to be lazy so that we don't have to load any
-    # metadata until/unless it's actually needed.  (i.e., some distributions
-    # may not know their name or version without loading PKG-INFO)
-
-    @property
-    def key(self):
-        try:
-            return self._key
-        except AttributeError:
-            self._key = key = self.project_name.lower()
-            return key
-
-    @property
-    def parsed_version(self):
-        if not hasattr(self, "_parsed_version"):
-            try:
-                self._parsed_version = parse_version(self.version)
-            except _packaging_version.InvalidVersion as ex:
-                info = f"(package: {self.project_name})"
-                if hasattr(ex, "add_note"):
-                    ex.add_note(info)  # PEP 678
-                    raise
-                raise _packaging_version.InvalidVersion(f"{str(ex)} {info}") from None
-
-        return self._parsed_version
-
-    @property
-    def _forgiving_parsed_version(self):
-        try:
-            return self.parsed_version
-        except _packaging_version.InvalidVersion as ex:
-            self._parsed_version = parse_version(_forgiving_version(self.version))
-
-            notes = "\n".join(getattr(ex, "__notes__", []))  # PEP 678
-            msg = f"""!!\n\n
-            *************************************************************************
-            {str(ex)}\n{notes}
-
-            This is a long overdue deprecation.
-            For the time being, `pkg_resources` will use `{self._parsed_version}`
-            as a replacement to avoid breaking existing environments,
-            but no future compatibility is guaranteed.
-
-            If you maintain package {self.project_name} you should implement
-            the relevant changes to adequate the project to PEP 440 immediately.
-            *************************************************************************
-            \n\n!!
-            """
-            warnings.warn(msg, DeprecationWarning)
-
-            return self._parsed_version
-
-    @property
-    def version(self):
-        try:
-            return self._version
-        except AttributeError as e:
-            version = self._get_version()
-            if version is None:
-                path = self._get_metadata_path_for_display(self.PKG_INFO)
-                msg = ("Missing 'Version:' header and/or {} file at path: {}").format(
-                    self.PKG_INFO, path
-                )
-                raise ValueError(msg, self) from e
-
-            return version
-
-    @property
-    def _dep_map(self):
-        """
-        A map of extra to its list of (direct) requirements
-        for this distribution, including the null extra.
-        """
-        try:
-            return self.__dep_map
-        except AttributeError:
-            self.__dep_map = self._filter_extras(self._build_dep_map())
-        return self.__dep_map
-
-    @staticmethod
-    def _filter_extras(dm: dict[str | None, list[Requirement]]):
-        """
-        Given a mapping of extras to dependencies, strip off
-        environment markers and filter out any dependencies
-        not matching the markers.
-        """
-        for extra in list(filter(None, dm)):
-            new_extra: str | None = extra
-            reqs = dm.pop(extra)
-            new_extra, _, marker = extra.partition(':')
-            fails_marker = marker and (
-                invalid_marker(marker) or not evaluate_marker(marker)
-            )
-            if fails_marker:
-                reqs = []
-            new_extra = safe_extra(new_extra) or None
-
-            dm.setdefault(new_extra, []).extend(reqs)
-        return dm
-
-    def _build_dep_map(self):
-        dm = {}
-        for name in 'requires.txt', 'depends.txt':
-            for extra, reqs in split_sections(self._get_metadata(name)):
-                dm.setdefault(extra, []).extend(parse_requirements(reqs))
-        return dm
-
-    def requires(self, extras: Iterable[str] = ()):
-        """List of Requirements needed for this distro if `extras` are used"""
-        dm = self._dep_map
-        deps: list[Requirement] = []
-        deps.extend(dm.get(None, ()))
-        for ext in extras:
-            try:
-                deps.extend(dm[safe_extra(ext)])
-            except KeyError as e:
-                raise UnknownExtra(
-                    "%s has no such extra feature %r" % (self, ext)
-                ) from e
-        return deps
-
-    def _get_metadata_path_for_display(self, name):
-        """
-        Return the path to the given metadata file, if available.
-        """
-        try:
-            # We need to access _get_metadata_path() on the provider object
-            # directly rather than through this class's __getattr__()
-            # since _get_metadata_path() is marked private.
-            path = self._provider._get_metadata_path(name)
-
-        # Handle exceptions e.g. in case the distribution's metadata
-        # provider doesn't support _get_metadata_path().
-        except Exception:
-            return '[could not detect]'
-
-        return path
-
-    def _get_metadata(self, name):
-        if self.has_metadata(name):
-            yield from self.get_metadata_lines(name)
-
-    def _get_version(self):
-        lines = self._get_metadata(self.PKG_INFO)
-        return _version_from_file(lines)
-
-    def activate(self, path: list[str] | None = None, replace: bool = False):
-        """Ensure distribution is importable on `path` (default=sys.path)"""
-        if path is None:
-            path = sys.path
-        self.insert_on(path, replace=replace)
-        if path is sys.path and self.location is not None:
-            fixup_namespace_packages(self.location)
-            for pkg in self._get_metadata('namespace_packages.txt'):
-                if pkg in sys.modules:
-                    declare_namespace(pkg)
-
-    def egg_name(self):
-        """Return what this distribution's standard .egg filename should be"""
-        filename = "%s-%s-py%s" % (
-            to_filename(self.project_name),
-            to_filename(self.version),
-            self.py_version or PY_MAJOR,
-        )
-
-        if self.platform:
-            filename += '-' + self.platform
-        return filename
-
-    def __repr__(self):
-        if self.location:
-            return "%s (%s)" % (self, self.location)
-        else:
-            return str(self)
-
-    def __str__(self):
-        try:
-            version = getattr(self, 'version', None)
-        except ValueError:
-            version = None
-        version = version or "[unknown version]"
-        return "%s %s" % (self.project_name, version)
-
-    def __getattr__(self, attr):
-        """Delegate all unrecognized public attributes to .metadata provider"""
-        if attr.startswith('_'):
-            raise AttributeError(attr)
-        return getattr(self._provider, attr)
-
-    def __dir__(self):
-        return list(
-            set(super().__dir__())
-            | set(attr for attr in self._provider.__dir__() if not attr.startswith('_'))
-        )
-
-    @classmethod
-    def from_filename(
-        cls,
-        filename: StrPath,
-        metadata: _MetadataType = None,
-        **kw: int,  # We could set `precedence` explicitly, but keeping this as `**kw` for full backwards and subclassing compatibility
-    ):
-        return cls.from_location(
-            _normalize_cached(filename), os.path.basename(filename), metadata, **kw
-        )
-
-    def as_requirement(self):
-        """Return a ``Requirement`` that matches this distribution exactly"""
-        if isinstance(self.parsed_version, _packaging_version.Version):
-            spec = "%s==%s" % (self.project_name, self.parsed_version)
-        else:
-            spec = "%s===%s" % (self.project_name, self.parsed_version)
-
-        return Requirement.parse(spec)
-
-    def load_entry_point(self, group: str, name: str) -> _ResolvedEntryPoint:
-        """Return the `name` entry point of `group` or raise ImportError"""
-        ep = self.get_entry_info(group, name)
-        if ep is None:
-            raise ImportError("Entry point %r not found" % ((group, name),))
-        return ep.load()
-
-    @overload
-    def get_entry_map(self, group: None = None) -> dict[str, dict[str, EntryPoint]]: ...
-    @overload
-    def get_entry_map(self, group: str) -> dict[str, EntryPoint]: ...
-    def get_entry_map(self, group: str | None = None):
-        """Return the entry point map for `group`, or the full entry map"""
-        if not hasattr(self, "_ep_map"):
-            self._ep_map = EntryPoint.parse_map(
-                self._get_metadata('entry_points.txt'), self
-            )
-        if group is not None:
-            return self._ep_map.get(group, {})
-        return self._ep_map
-
-    def get_entry_info(self, group: str, name: str):
-        """Return the EntryPoint object for `group`+`name`, or ``None``"""
-        return self.get_entry_map(group).get(name)
-
-    # FIXME: 'Distribution.insert_on' is too complex (13)
-    def insert_on(  # noqa: C901
-        self,
-        path: list[str],
-        loc=None,
-        replace: bool = False,
-    ):
-        """Ensure self.location is on path
-
-        If replace=False (default):
-            - If location is already in path anywhere, do nothing.
-            - Else:
-              - If it's an egg and its parent directory is on path,
-                insert just ahead of the parent.
-              - Else: add to the end of path.
-        If replace=True:
-            - If location is already on path anywhere (not eggs)
-              or higher priority than its parent (eggs)
-              do nothing.
-            - Else:
-              - If it's an egg and its parent directory is on path,
-                insert just ahead of the parent,
-                removing any lower-priority entries.
-              - Else: add it to the front of path.
-        """
-
-        loc = loc or self.location
-        if not loc:
-            return
-
-        nloc = _normalize_cached(loc)
-        bdir = os.path.dirname(nloc)
-        npath = [(p and _normalize_cached(p) or p) for p in path]
-
-        for p, item in enumerate(npath):
-            if item == nloc:
-                if replace:
-                    break
-                else:
-                    # don't modify path (even removing duplicates) if
-                    # found and not replace
-                    return
-            elif item == bdir and self.precedence == EGG_DIST:
-                # if it's an .egg, give it precedence over its directory
-                # UNLESS it's already been added to sys.path and replace=False
-                if (not replace) and nloc in npath[p:]:
-                    return
-                if path is sys.path:
-                    self.check_version_conflict()
-                path.insert(p, loc)
-                npath.insert(p, nloc)
-                break
-        else:
-            if path is sys.path:
-                self.check_version_conflict()
-            if replace:
-                path.insert(0, loc)
-            else:
-                path.append(loc)
-            return
-
-        # p is the spot where we found or inserted loc; now remove duplicates
-        while True:
-            try:
-                np = npath.index(nloc, p + 1)
-            except ValueError:
-                break
-            else:
-                del npath[np], path[np]
-                # ha!
-                p = np
-
-        return
-
-    def check_version_conflict(self):
-        if self.key == 'setuptools':
-            # ignore the inevitable setuptools self-conflicts  :(
-            return
-
-        nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt'))
-        loc = normalize_path(self.location)
-        for modname in self._get_metadata('top_level.txt'):
-            if (
-                modname not in sys.modules
-                or modname in nsp
-                or modname in _namespace_packages
-            ):
-                continue
-            if modname in ('pkg_resources', 'setuptools', 'site'):
-                continue
-            fn = getattr(sys.modules[modname], '__file__', None)
-            if fn and (
-                normalize_path(fn).startswith(loc) or fn.startswith(self.location)
-            ):
-                continue
-            issue_warning(
-                "Module %s was already imported from %s, but %s is being added"
-                " to sys.path" % (modname, fn, self.location),
-            )
-
-    def has_version(self):
-        try:
-            self.version
-        except ValueError:
-            issue_warning("Unbuilt egg for " + repr(self))
-            return False
-        except SystemError:
-            # TODO: remove this except clause when python/cpython#103632 is fixed.
-            return False
-        return True
-
-    def clone(self, **kw: str | int | IResourceProvider | None):
-        """Copy this distribution, substituting in any changed keyword args"""
-        names = 'project_name version py_version platform location precedence'
-        for attr in names.split():
-            kw.setdefault(attr, getattr(self, attr, None))
-        kw.setdefault('metadata', self._provider)
-        # Unsafely unpacking. But keeping **kw for backwards and subclassing compatibility
-        return self.__class__(**kw)  # type:ignore[arg-type]
-
-    @property
-    def extras(self):
-        return [dep for dep in self._dep_map if dep]
-
-
-class EggInfoDistribution(Distribution):
-    def _reload_version(self):
-        """
-        Packages installed by distutils (e.g. numpy or scipy),
-        which uses an old safe_version, and so
-        their version numbers can get mangled when
-        converted to filenames (e.g., 1.11.0.dev0+2329eae to
-        1.11.0.dev0_2329eae). These distributions will not be
-        parsed properly
-        downstream by Distribution and safe_version, so
-        take an extra step and try to get the version number from
-        the metadata file itself instead of the filename.
-        """
-        md_version = self._get_version()
-        if md_version:
-            self._version = md_version
-        return self
-
-
-class DistInfoDistribution(Distribution):
-    """
-    Wrap an actual or potential sys.path entry
-    w/metadata, .dist-info style.
-    """
-
-    PKG_INFO = 'METADATA'
-    EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])")
-
-    @property
-    def _parsed_pkg_info(self):
-        """Parse and cache metadata"""
-        try:
-            return self._pkg_info
-        except AttributeError:
-            metadata = self.get_metadata(self.PKG_INFO)
-            self._pkg_info = email.parser.Parser().parsestr(metadata)
-            return self._pkg_info
-
-    @property
-    def _dep_map(self):
-        try:
-            return self.__dep_map
-        except AttributeError:
-            self.__dep_map = self._compute_dependencies()
-            return self.__dep_map
-
-    def _compute_dependencies(self) -> dict[str | None, list[Requirement]]:
-        """Recompute this distribution's dependencies."""
-        self.__dep_map: dict[str | None, list[Requirement]] = {None: []}
-
-        reqs: list[Requirement] = []
-        # Including any condition expressions
-        for req in self._parsed_pkg_info.get_all('Requires-Dist') or []:
-            reqs.extend(parse_requirements(req))
-
-        def reqs_for_extra(extra):
-            for req in reqs:
-                if not req.marker or req.marker.evaluate({'extra': extra}):
-                    yield req
-
-        common = types.MappingProxyType(dict.fromkeys(reqs_for_extra(None)))
-        self.__dep_map[None].extend(common)
-
-        for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []:
-            s_extra = safe_extra(extra.strip())
-            self.__dep_map[s_extra] = [
-                r for r in reqs_for_extra(extra) if r not in common
-            ]
-
-        return self.__dep_map
-
-
-_distributionImpl = {
-    '.egg': Distribution,
-    '.egg-info': EggInfoDistribution,
-    '.dist-info': DistInfoDistribution,
-}
-
-
-def issue_warning(*args, **kw):
-    level = 1
-    g = globals()
-    try:
-        # find the first stack frame that is *not* code in
-        # the pkg_resources module, to use for the warning
-        while sys._getframe(level).f_globals is g:
-            level += 1
-    except ValueError:
-        pass
-    warnings.warn(stacklevel=level + 1, *args, **kw)
-
-
-def parse_requirements(strs: _NestedStr):
-    """
-    Yield ``Requirement`` objects for each specification in `strs`.
-
-    `strs` must be a string, or a (possibly-nested) iterable thereof.
-    """
-    return map(Requirement, join_continuation(map(drop_comment, yield_lines(strs))))
-
-
-class RequirementParseError(_packaging_requirements.InvalidRequirement):
-    "Compatibility wrapper for InvalidRequirement"
-
-
-class Requirement(_packaging_requirements.Requirement):
-    def __init__(self, requirement_string: str):
-        """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!"""
-        super().__init__(requirement_string)
-        self.unsafe_name = self.name
-        project_name = safe_name(self.name)
-        self.project_name, self.key = project_name, project_name.lower()
-        self.specs = [(spec.operator, spec.version) for spec in self.specifier]
-        # packaging.requirements.Requirement uses a set for its extras. We use a variable-length tuple
-        self.extras: tuple[str] = tuple(map(safe_extra, self.extras))
-        self.hashCmp = (
-            self.key,
-            self.url,
-            self.specifier,
-            frozenset(self.extras),
-            str(self.marker) if self.marker else None,
-        )
-        self.__hash = hash(self.hashCmp)
-
-    def __eq__(self, other: object):
-        return isinstance(other, Requirement) and self.hashCmp == other.hashCmp
-
-    def __ne__(self, other):
-        return not self == other
-
-    def __contains__(self, item: Distribution | str | tuple[str, ...]) -> bool:
-        if isinstance(item, Distribution):
-            if item.key != self.key:
-                return False
-
-            item = item.version
-
-        # Allow prereleases always in order to match the previous behavior of
-        # this method. In the future this should be smarter and follow PEP 440
-        # more accurately.
-        return self.specifier.contains(item, prereleases=True)
-
-    def __hash__(self):
-        return self.__hash
-
-    def __repr__(self):
-        return "Requirement.parse(%r)" % str(self)
-
-    @staticmethod
-    def parse(s: str | Iterable[str]):
-        (req,) = parse_requirements(s)
-        return req
-
-
-def _always_object(classes):
-    """
-    Ensure object appears in the mro even
-    for old-style classes.
-    """
-    if object not in classes:
-        return classes + (object,)
-    return classes
-
-
-def _find_adapter(registry: Mapping[type, _AdapterT], ob: object) -> _AdapterT:
-    """Return an adapter factory for `ob` from `registry`"""
-    types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob))))
-    for t in types:
-        if t in registry:
-            return registry[t]
-    # _find_adapter would previously return None, and immediately be called.
-    # So we're raising a TypeError to keep backward compatibility if anyone depended on that behaviour.
-    raise TypeError(f"Could not find adapter for {registry} and {ob}")
-
-
-def ensure_directory(path: StrOrBytesPath):
-    """Ensure that the parent directory of `path` exists"""
-    dirname = os.path.dirname(path)
-    os.makedirs(dirname, exist_ok=True)
-
-
-def _bypass_ensure_directory(path):
-    """Sandbox-bypassing version of ensure_directory()"""
-    if not WRITE_SUPPORT:
-        raise OSError('"os.mkdir" not supported on this platform.')
-    dirname, filename = split(path)
-    if dirname and filename and not isdir(dirname):
-        _bypass_ensure_directory(dirname)
-        try:
-            mkdir(dirname, 0o755)
-        except FileExistsError:
-            pass
-
-
-def split_sections(s: _NestedStr) -> Iterator[tuple[str | None, list[str]]]:
-    """Split a string or iterable thereof into (section, content) pairs
-
-    Each ``section`` is a stripped version of the section header ("[section]")
-    and each ``content`` is a list of stripped lines excluding blank lines and
-    comment-only lines.  If there are any such lines before the first section
-    header, they're returned in a first ``section`` of ``None``.
-    """
-    section = None
-    content = []
-    for line in yield_lines(s):
-        if line.startswith("["):
-            if line.endswith("]"):
-                if section or content:
-                    yield section, content
-                section = line[1:-1].strip()
-                content = []
-            else:
-                raise ValueError("Invalid section heading", line)
-        else:
-            content.append(line)
-
-    # wrap up last segment
-    yield section, content
-
-
-def _mkstemp(*args, **kw):
-    old_open = os.open
-    try:
-        # temporarily bypass sandboxing
-        os.open = os_open
-        return tempfile.mkstemp(*args, **kw)
-    finally:
-        # and then put it back
-        os.open = old_open
-
-
-# Silence the PEP440Warning by default, so that end users don't get hit by it
-# randomly just because they use pkg_resources. We want to append the rule
-# because we want earlier uses of filterwarnings to take precedence over this
-# one.
-warnings.filterwarnings("ignore", category=PEP440Warning, append=True)
-
-
-class PkgResourcesDeprecationWarning(Warning):
-    """
-    Base class for warning about deprecations in ``pkg_resources``
-
-    This class is not derived from ``DeprecationWarning``, and as such is
-    visible by default.
-    """
-
-
-# Ported from ``setuptools`` to avoid introducing an import inter-dependency:
-_LOCALE_ENCODING = "locale" if sys.version_info >= (3, 10) else None
-
-
-def _read_utf8_with_fallback(file: str, fallback_encoding=_LOCALE_ENCODING) -> str:
-    """See setuptools.unicode_utils._read_utf8_with_fallback"""
-    try:
-        with open(file, "r", encoding="utf-8") as f:
-            return f.read()
-    except UnicodeDecodeError:  # pragma: no cover
-        msg = f"""\
-        ********************************************************************************
-        `encoding="utf-8"` fails with {file!r}, trying `encoding={fallback_encoding!r}`.
-
-        This fallback behaviour is considered **deprecated** and future versions of
-        `setuptools/pkg_resources` may not implement it.
-
-        Please encode {file!r} with "utf-8" to ensure future builds will succeed.
-
-        If this file was produced by `setuptools` itself, cleaning up the cached files
-        and re-building/re-installing the package with a newer version of `setuptools`
-        (e.g. by updating `build-system.requires` in its `pyproject.toml`)
-        might solve the problem.
-        ********************************************************************************
-        """
-        # TODO: Add a deadline?
-        #       See comment in setuptools.unicode_utils._Utf8EncodingNeeded
-        warnings.warn(msg, PkgResourcesDeprecationWarning, stacklevel=2)
-        with open(file, "r", encoding=fallback_encoding) as f:
-            return f.read()
-
-
-# from jaraco.functools 1.3
-def _call_aside(f, *args, **kwargs):
-    f(*args, **kwargs)
-    return f
-
-
-@_call_aside
-def _initialize(g=globals()):
-    "Set up global resource manager (deliberately not state-saved)"
-    manager = ResourceManager()
-    g['_manager'] = manager
-    g.update(
-        (name, getattr(manager, name))
-        for name in dir(manager)
-        if not name.startswith('_')
-    )
-
-
-@_call_aside
-def _initialize_master_working_set():
-    """
-    Prepare the master working set and make the ``require()``
-    API available.
-
-    This function has explicit effects on the global state
-    of pkg_resources. It is intended to be invoked once at
-    the initialization of this module.
-
-    Invocation by other packages is unsupported and done
-    at their own risk.
-    """
-    working_set = _declare_state('object', 'working_set', WorkingSet._build_master())
-
-    require = working_set.require
-    iter_entry_points = working_set.iter_entry_points
-    add_activation_listener = working_set.subscribe
-    run_script = working_set.run_script
-    # backward compatibility
-    run_main = run_script
-    # Activate all distributions already on sys.path with replace=False and
-    # ensure that all distributions added to the working set in the future
-    # (e.g. by calling ``require()``) will get activated as well,
-    # with higher priority (replace=True).
-    tuple(dist.activate(replace=False) for dist in working_set)
-    add_activation_listener(
-        lambda dist: dist.activate(replace=True),
-        existing=False,
-    )
-    working_set.entries = []
-    # match order
-    list(map(working_set.add_entry, sys.path))
-    globals().update(locals())
-
-
-if TYPE_CHECKING:
-    # All of these are set by the @_call_aside methods above
-    __resource_manager = ResourceManager()  # Won't exist at runtime
-    resource_exists = __resource_manager.resource_exists
-    resource_isdir = __resource_manager.resource_isdir
-    resource_filename = __resource_manager.resource_filename
-    resource_stream = __resource_manager.resource_stream
-    resource_string = __resource_manager.resource_string
-    resource_listdir = __resource_manager.resource_listdir
-    set_extraction_path = __resource_manager.set_extraction_path
-    cleanup_resources = __resource_manager.cleanup_resources
-
-    working_set = WorkingSet()
-    require = working_set.require
-    iter_entry_points = working_set.iter_entry_points
-    add_activation_listener = working_set.subscribe
-    run_script = working_set.run_script
-    run_main = run_script
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index eba4a33..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py
deleted file mode 100644
index edc21fa..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py
+++ /dev/null
@@ -1,631 +0,0 @@
-"""
-Utilities for determining application-specific dirs.
-
-See  for details and usage.
-
-"""
-
-from __future__ import annotations
-
-import os
-import sys
-from typing import TYPE_CHECKING
-
-from .api import PlatformDirsABC
-from .version import __version__
-from .version import __version_tuple__ as __version_info__
-
-if TYPE_CHECKING:
-    from pathlib import Path
-    from typing import Literal
-
-if sys.platform == "win32":
-    from pip._vendor.platformdirs.windows import Windows as _Result
-elif sys.platform == "darwin":
-    from pip._vendor.platformdirs.macos import MacOS as _Result
-else:
-    from pip._vendor.platformdirs.unix import Unix as _Result
-
-
-def _set_platform_dir_class() -> type[PlatformDirsABC]:
-    if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system":
-        if os.getenv("SHELL") or os.getenv("PREFIX"):
-            return _Result
-
-        from pip._vendor.platformdirs.android import _android_folder  # noqa: PLC0415
-
-        if _android_folder() is not None:
-            from pip._vendor.platformdirs.android import Android  # noqa: PLC0415
-
-            return Android  # return to avoid redefinition of a result
-
-    return _Result
-
-
-if TYPE_CHECKING:
-    # Work around mypy issue: https://github.com/python/mypy/issues/10962
-    PlatformDirs = _Result
-else:
-    PlatformDirs = _set_platform_dir_class()  #: Currently active platform
-AppDirs = PlatformDirs  #: Backwards compatibility with appdirs
-
-
-def user_data_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: data directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_data_dir
-
-
-def site_data_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    multipath: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param multipath: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: data directory shared by users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        multipath=multipath,
-        ensure_exists=ensure_exists,
-    ).site_data_dir
-
-
-def user_config_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: config directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_config_dir
-
-
-def site_config_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    multipath: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param multipath: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: config directory shared by the users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        multipath=multipath,
-        ensure_exists=ensure_exists,
-    ).site_config_dir
-
-
-def user_cache_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: cache directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_cache_dir
-
-
-def site_cache_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: cache directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).site_cache_dir
-
-
-def user_state_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: state directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_state_dir
-
-
-def user_log_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: log directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_log_dir
-
-
-def user_documents_dir() -> str:
-    """:returns: documents directory tied to the user"""
-    return PlatformDirs().user_documents_dir
-
-
-def user_downloads_dir() -> str:
-    """:returns: downloads directory tied to the user"""
-    return PlatformDirs().user_downloads_dir
-
-
-def user_pictures_dir() -> str:
-    """:returns: pictures directory tied to the user"""
-    return PlatformDirs().user_pictures_dir
-
-
-def user_videos_dir() -> str:
-    """:returns: videos directory tied to the user"""
-    return PlatformDirs().user_videos_dir
-
-
-def user_music_dir() -> str:
-    """:returns: music directory tied to the user"""
-    return PlatformDirs().user_music_dir
-
-
-def user_desktop_dir() -> str:
-    """:returns: desktop directory tied to the user"""
-    return PlatformDirs().user_desktop_dir
-
-
-def user_runtime_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: runtime directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_runtime_dir
-
-
-def site_runtime_dir(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> str:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: runtime directory shared by users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).site_runtime_dir
-
-
-def user_data_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: data path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_data_path
-
-
-def site_data_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    multipath: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param multipath: See `multipath `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: data path shared by users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        multipath=multipath,
-        ensure_exists=ensure_exists,
-    ).site_data_path
-
-
-def user_config_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: config path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_config_path
-
-
-def site_config_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    multipath: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param multipath: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: config path shared by the users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        multipath=multipath,
-        ensure_exists=ensure_exists,
-    ).site_config_path
-
-
-def site_cache_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: cache directory tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).site_cache_path
-
-
-def user_cache_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: cache path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_cache_path
-
-
-def user_state_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    roaming: bool = False,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param roaming: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: state path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        roaming=roaming,
-        ensure_exists=ensure_exists,
-    ).user_state_path
-
-
-def user_log_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `roaming `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: log path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_log_path
-
-
-def user_documents_path() -> Path:
-    """:returns: documents a path tied to the user"""
-    return PlatformDirs().user_documents_path
-
-
-def user_downloads_path() -> Path:
-    """:returns: downloads path tied to the user"""
-    return PlatformDirs().user_downloads_path
-
-
-def user_pictures_path() -> Path:
-    """:returns: pictures path tied to the user"""
-    return PlatformDirs().user_pictures_path
-
-
-def user_videos_path() -> Path:
-    """:returns: videos path tied to the user"""
-    return PlatformDirs().user_videos_path
-
-
-def user_music_path() -> Path:
-    """:returns: music path tied to the user"""
-    return PlatformDirs().user_music_path
-
-
-def user_desktop_path() -> Path:
-    """:returns: desktop path tied to the user"""
-    return PlatformDirs().user_desktop_path
-
-
-def user_runtime_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: runtime path tied to the user
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).user_runtime_path
-
-
-def site_runtime_path(
-    appname: str | None = None,
-    appauthor: str | None | Literal[False] = None,
-    version: str | None = None,
-    opinion: bool = True,  # noqa: FBT001, FBT002
-    ensure_exists: bool = False,  # noqa: FBT001, FBT002
-) -> Path:
-    """
-    :param appname: See `appname `.
-    :param appauthor: See `appauthor `.
-    :param version: See `version `.
-    :param opinion: See `opinion `.
-    :param ensure_exists: See `ensure_exists `.
-    :returns: runtime path shared by users
-    """
-    return PlatformDirs(
-        appname=appname,
-        appauthor=appauthor,
-        version=version,
-        opinion=opinion,
-        ensure_exists=ensure_exists,
-    ).site_runtime_path
-
-
-__all__ = [
-    "AppDirs",
-    "PlatformDirs",
-    "PlatformDirsABC",
-    "__version__",
-    "__version_info__",
-    "site_cache_dir",
-    "site_cache_path",
-    "site_config_dir",
-    "site_config_path",
-    "site_data_dir",
-    "site_data_path",
-    "site_runtime_dir",
-    "site_runtime_path",
-    "user_cache_dir",
-    "user_cache_path",
-    "user_config_dir",
-    "user_config_path",
-    "user_data_dir",
-    "user_data_path",
-    "user_desktop_dir",
-    "user_desktop_path",
-    "user_documents_dir",
-    "user_documents_path",
-    "user_downloads_dir",
-    "user_downloads_path",
-    "user_log_dir",
-    "user_log_path",
-    "user_music_dir",
-    "user_music_path",
-    "user_pictures_dir",
-    "user_pictures_path",
-    "user_runtime_dir",
-    "user_runtime_path",
-    "user_state_dir",
-    "user_state_path",
-    "user_videos_dir",
-    "user_videos_path",
-]
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py
deleted file mode 100644
index fa8a677..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""Main entry point."""
-
-from __future__ import annotations
-
-from pip._vendor.platformdirs import PlatformDirs, __version__
-
-PROPS = (
-    "user_data_dir",
-    "user_config_dir",
-    "user_cache_dir",
-    "user_state_dir",
-    "user_log_dir",
-    "user_documents_dir",
-    "user_downloads_dir",
-    "user_pictures_dir",
-    "user_videos_dir",
-    "user_music_dir",
-    "user_runtime_dir",
-    "site_data_dir",
-    "site_config_dir",
-    "site_cache_dir",
-    "site_runtime_dir",
-)
-
-
-def main() -> None:
-    """Run the main entry point."""
-    app_name = "MyApp"
-    app_author = "MyCompany"
-
-    print(f"-- platformdirs {__version__} --")  # noqa: T201
-
-    print("-- app dirs (with optional 'version')")  # noqa: T201
-    dirs = PlatformDirs(app_name, app_author, version="1.0")
-    for prop in PROPS:
-        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
-
-    print("\n-- app dirs (without optional 'version')")  # noqa: T201
-    dirs = PlatformDirs(app_name, app_author)
-    for prop in PROPS:
-        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
-
-    print("\n-- app dirs (without optional 'appauthor')")  # noqa: T201
-    dirs = PlatformDirs(app_name)
-    for prop in PROPS:
-        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
-
-    print("\n-- app dirs (with disabled 'appauthor')")  # noqa: T201
-    dirs = PlatformDirs(app_name, appauthor=False)
-    for prop in PROPS:
-        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
-
-
-if __name__ == "__main__":
-    main()
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 88068fa..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc
deleted file mode 100644
index db61b90..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc
deleted file mode 100644
index ca033fd..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc
deleted file mode 100644
index 32dbcd3..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc
deleted file mode 100644
index 92ecd0a..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc
deleted file mode 100644
index 75da58e..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc
deleted file mode 100644
index 222ed7a..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc
deleted file mode 100644
index 1f18b52..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py
deleted file mode 100644
index 7004a85..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py
+++ /dev/null
@@ -1,249 +0,0 @@
-"""Android."""
-
-from __future__ import annotations
-
-import os
-import re
-import sys
-from functools import lru_cache
-from typing import TYPE_CHECKING, cast
-
-from .api import PlatformDirsABC
-
-
-class Android(PlatformDirsABC):
-    """
-    Follows the guidance `from here `_.
-
-    Makes use of the `appname `, `version
-    `, `ensure_exists `.
-
-    """
-
-    @property
-    def user_data_dir(self) -> str:
-        """:return: data directory tied to the user, e.g. ``/data/user///files/``"""
-        return self._append_app_name_and_version(cast(str, _android_folder()), "files")
-
-    @property
-    def site_data_dir(self) -> str:
-        """:return: data directory shared by users, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def user_config_dir(self) -> str:
-        """
-        :return: config directory tied to the user, e.g. \
-        ``/data/user///shared_prefs/``
-        """
-        return self._append_app_name_and_version(cast(str, _android_folder()), "shared_prefs")
-
-    @property
-    def site_config_dir(self) -> str:
-        """:return: config directory shared by the users, same as `user_config_dir`"""
-        return self.user_config_dir
-
-    @property
-    def user_cache_dir(self) -> str:
-        """:return: cache directory tied to the user, e.g.,``/data/user///cache/``"""
-        return self._append_app_name_and_version(cast(str, _android_folder()), "cache")
-
-    @property
-    def site_cache_dir(self) -> str:
-        """:return: cache directory shared by users, same as `user_cache_dir`"""
-        return self.user_cache_dir
-
-    @property
-    def user_state_dir(self) -> str:
-        """:return: state directory tied to the user, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def user_log_dir(self) -> str:
-        """
-        :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it,
-          e.g. ``/data/user///cache//log``
-        """
-        path = self.user_cache_dir
-        if self.opinion:
-            path = os.path.join(path, "log")  # noqa: PTH118
-        return path
-
-    @property
-    def user_documents_dir(self) -> str:
-        """:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``"""
-        return _android_documents_folder()
-
-    @property
-    def user_downloads_dir(self) -> str:
-        """:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``"""
-        return _android_downloads_folder()
-
-    @property
-    def user_pictures_dir(self) -> str:
-        """:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``"""
-        return _android_pictures_folder()
-
-    @property
-    def user_videos_dir(self) -> str:
-        """:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``"""
-        return _android_videos_folder()
-
-    @property
-    def user_music_dir(self) -> str:
-        """:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``"""
-        return _android_music_folder()
-
-    @property
-    def user_desktop_dir(self) -> str:
-        """:return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``"""
-        return "/storage/emulated/0/Desktop"
-
-    @property
-    def user_runtime_dir(self) -> str:
-        """
-        :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it,
-          e.g. ``/data/user///cache//tmp``
-        """
-        path = self.user_cache_dir
-        if self.opinion:
-            path = os.path.join(path, "tmp")  # noqa: PTH118
-        return path
-
-    @property
-    def site_runtime_dir(self) -> str:
-        """:return: runtime directory shared by users, same as `user_runtime_dir`"""
-        return self.user_runtime_dir
-
-
-@lru_cache(maxsize=1)
-def _android_folder() -> str | None:  # noqa: C901
-    """:return: base folder for the Android OS or None if it cannot be found"""
-    result: str | None = None
-    # type checker isn't happy with our "import android", just don't do this when type checking see
-    # https://stackoverflow.com/a/61394121
-    if not TYPE_CHECKING:
-        try:
-            # First try to get a path to android app using python4android (if available)...
-            from android import mActivity  # noqa: PLC0415
-
-            context = cast("android.content.Context", mActivity.getApplicationContext())  # noqa: F821
-            result = context.getFilesDir().getParentFile().getAbsolutePath()
-        except Exception:  # noqa: BLE001
-            result = None
-    if result is None:
-        try:
-            # ...and fall back to using plain pyjnius, if python4android isn't available or doesn't deliver any useful
-            # result...
-            from jnius import autoclass  # noqa: PLC0415
-
-            context = autoclass("android.content.Context")
-            result = context.getFilesDir().getParentFile().getAbsolutePath()
-        except Exception:  # noqa: BLE001
-            result = None
-    if result is None:
-        # and if that fails, too, find an android folder looking at path on the sys.path
-        # warning: only works for apps installed under /data, not adopted storage etc.
-        pattern = re.compile(r"/data/(data|user/\d+)/(.+)/files")
-        for path in sys.path:
-            if pattern.match(path):
-                result = path.split("/files")[0]
-                break
-        else:
-            result = None
-    if result is None:
-        # one last try: find an android folder looking at path on the sys.path taking adopted storage paths into
-        # account
-        pattern = re.compile(r"/mnt/expand/[a-fA-F0-9-]{36}/(data|user/\d+)/(.+)/files")
-        for path in sys.path:
-            if pattern.match(path):
-                result = path.split("/files")[0]
-                break
-        else:
-            result = None
-    return result
-
-
-@lru_cache(maxsize=1)
-def _android_documents_folder() -> str:
-    """:return: documents folder for the Android OS"""
-    # Get directories with pyjnius
-    try:
-        from jnius import autoclass  # noqa: PLC0415
-
-        context = autoclass("android.content.Context")
-        environment = autoclass("android.os.Environment")
-        documents_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOCUMENTS).getAbsolutePath()
-    except Exception:  # noqa: BLE001
-        documents_dir = "/storage/emulated/0/Documents"
-
-    return documents_dir
-
-
-@lru_cache(maxsize=1)
-def _android_downloads_folder() -> str:
-    """:return: downloads folder for the Android OS"""
-    # Get directories with pyjnius
-    try:
-        from jnius import autoclass  # noqa: PLC0415
-
-        context = autoclass("android.content.Context")
-        environment = autoclass("android.os.Environment")
-        downloads_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOWNLOADS).getAbsolutePath()
-    except Exception:  # noqa: BLE001
-        downloads_dir = "/storage/emulated/0/Downloads"
-
-    return downloads_dir
-
-
-@lru_cache(maxsize=1)
-def _android_pictures_folder() -> str:
-    """:return: pictures folder for the Android OS"""
-    # Get directories with pyjnius
-    try:
-        from jnius import autoclass  # noqa: PLC0415
-
-        context = autoclass("android.content.Context")
-        environment = autoclass("android.os.Environment")
-        pictures_dir: str = context.getExternalFilesDir(environment.DIRECTORY_PICTURES).getAbsolutePath()
-    except Exception:  # noqa: BLE001
-        pictures_dir = "/storage/emulated/0/Pictures"
-
-    return pictures_dir
-
-
-@lru_cache(maxsize=1)
-def _android_videos_folder() -> str:
-    """:return: videos folder for the Android OS"""
-    # Get directories with pyjnius
-    try:
-        from jnius import autoclass  # noqa: PLC0415
-
-        context = autoclass("android.content.Context")
-        environment = autoclass("android.os.Environment")
-        videos_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DCIM).getAbsolutePath()
-    except Exception:  # noqa: BLE001
-        videos_dir = "/storage/emulated/0/DCIM/Camera"
-
-    return videos_dir
-
-
-@lru_cache(maxsize=1)
-def _android_music_folder() -> str:
-    """:return: music folder for the Android OS"""
-    # Get directories with pyjnius
-    try:
-        from jnius import autoclass  # noqa: PLC0415
-
-        context = autoclass("android.content.Context")
-        environment = autoclass("android.os.Environment")
-        music_dir: str = context.getExternalFilesDir(environment.DIRECTORY_MUSIC).getAbsolutePath()
-    except Exception:  # noqa: BLE001
-        music_dir = "/storage/emulated/0/Music"
-
-    return music_dir
-
-
-__all__ = [
-    "Android",
-]
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py
deleted file mode 100644
index 18d660e..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py
+++ /dev/null
@@ -1,298 +0,0 @@
-"""Base API."""
-
-from __future__ import annotations
-
-import os
-from abc import ABC, abstractmethod
-from pathlib import Path
-from typing import TYPE_CHECKING
-
-if TYPE_CHECKING:
-    from typing import Iterator, Literal
-
-
-class PlatformDirsABC(ABC):  # noqa: PLR0904
-    """Abstract base class for platform directories."""
-
-    def __init__(  # noqa: PLR0913, PLR0917
-        self,
-        appname: str | None = None,
-        appauthor: str | None | Literal[False] = None,
-        version: str | None = None,
-        roaming: bool = False,  # noqa: FBT001, FBT002
-        multipath: bool = False,  # noqa: FBT001, FBT002
-        opinion: bool = True,  # noqa: FBT001, FBT002
-        ensure_exists: bool = False,  # noqa: FBT001, FBT002
-    ) -> None:
-        """
-        Create a new platform directory.
-
-        :param appname: See `appname`.
-        :param appauthor: See `appauthor`.
-        :param version: See `version`.
-        :param roaming: See `roaming`.
-        :param multipath: See `multipath`.
-        :param opinion: See `opinion`.
-        :param ensure_exists: See `ensure_exists`.
-
-        """
-        self.appname = appname  #: The name of application.
-        self.appauthor = appauthor
-        """
-        The name of the app author or distributing body for this application.
-
-        Typically, it is the owning company name. Defaults to `appname`. You may pass ``False`` to disable it.
-
-        """
-        self.version = version
-        """
-        An optional version path element to append to the path.
-
-        You might want to use this if you want multiple versions of your app to be able to run independently. If used,
-        this would typically be ``.``.
-
-        """
-        self.roaming = roaming
-        """
-        Whether to use the roaming appdata directory on Windows.
-
-        That means that for users on a Windows network setup for roaming profiles, this user data will be synced on
-        login (see
-        `here `_).
-
-        """
-        self.multipath = multipath
-        """
-        An optional parameter which indicates that the entire list of data dirs should be returned.
-
-        By default, the first item would only be returned.
-
-        """
-        self.opinion = opinion  #: A flag to indicating to use opinionated values.
-        self.ensure_exists = ensure_exists
-        """
-        Optionally create the directory (and any missing parents) upon access if it does not exist.
-
-        By default, no directories are created.
-
-        """
-
-    def _append_app_name_and_version(self, *base: str) -> str:
-        params = list(base[1:])
-        if self.appname:
-            params.append(self.appname)
-            if self.version:
-                params.append(self.version)
-        path = os.path.join(base[0], *params)  # noqa: PTH118
-        self._optionally_create_directory(path)
-        return path
-
-    def _optionally_create_directory(self, path: str) -> None:
-        if self.ensure_exists:
-            Path(path).mkdir(parents=True, exist_ok=True)
-
-    def _first_item_as_path_if_multipath(self, directory: str) -> Path:
-        if self.multipath:
-            # If multipath is True, the first path is returned.
-            directory = directory.split(os.pathsep)[0]
-        return Path(directory)
-
-    @property
-    @abstractmethod
-    def user_data_dir(self) -> str:
-        """:return: data directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def site_data_dir(self) -> str:
-        """:return: data directory shared by users"""
-
-    @property
-    @abstractmethod
-    def user_config_dir(self) -> str:
-        """:return: config directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def site_config_dir(self) -> str:
-        """:return: config directory shared by the users"""
-
-    @property
-    @abstractmethod
-    def user_cache_dir(self) -> str:
-        """:return: cache directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def site_cache_dir(self) -> str:
-        """:return: cache directory shared by users"""
-
-    @property
-    @abstractmethod
-    def user_state_dir(self) -> str:
-        """:return: state directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_log_dir(self) -> str:
-        """:return: log directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_documents_dir(self) -> str:
-        """:return: documents directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_downloads_dir(self) -> str:
-        """:return: downloads directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_pictures_dir(self) -> str:
-        """:return: pictures directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_videos_dir(self) -> str:
-        """:return: videos directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_music_dir(self) -> str:
-        """:return: music directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_desktop_dir(self) -> str:
-        """:return: desktop directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def user_runtime_dir(self) -> str:
-        """:return: runtime directory tied to the user"""
-
-    @property
-    @abstractmethod
-    def site_runtime_dir(self) -> str:
-        """:return: runtime directory shared by users"""
-
-    @property
-    def user_data_path(self) -> Path:
-        """:return: data path tied to the user"""
-        return Path(self.user_data_dir)
-
-    @property
-    def site_data_path(self) -> Path:
-        """:return: data path shared by users"""
-        return Path(self.site_data_dir)
-
-    @property
-    def user_config_path(self) -> Path:
-        """:return: config path tied to the user"""
-        return Path(self.user_config_dir)
-
-    @property
-    def site_config_path(self) -> Path:
-        """:return: config path shared by the users"""
-        return Path(self.site_config_dir)
-
-    @property
-    def user_cache_path(self) -> Path:
-        """:return: cache path tied to the user"""
-        return Path(self.user_cache_dir)
-
-    @property
-    def site_cache_path(self) -> Path:
-        """:return: cache path shared by users"""
-        return Path(self.site_cache_dir)
-
-    @property
-    def user_state_path(self) -> Path:
-        """:return: state path tied to the user"""
-        return Path(self.user_state_dir)
-
-    @property
-    def user_log_path(self) -> Path:
-        """:return: log path tied to the user"""
-        return Path(self.user_log_dir)
-
-    @property
-    def user_documents_path(self) -> Path:
-        """:return: documents a path tied to the user"""
-        return Path(self.user_documents_dir)
-
-    @property
-    def user_downloads_path(self) -> Path:
-        """:return: downloads path tied to the user"""
-        return Path(self.user_downloads_dir)
-
-    @property
-    def user_pictures_path(self) -> Path:
-        """:return: pictures path tied to the user"""
-        return Path(self.user_pictures_dir)
-
-    @property
-    def user_videos_path(self) -> Path:
-        """:return: videos path tied to the user"""
-        return Path(self.user_videos_dir)
-
-    @property
-    def user_music_path(self) -> Path:
-        """:return: music path tied to the user"""
-        return Path(self.user_music_dir)
-
-    @property
-    def user_desktop_path(self) -> Path:
-        """:return: desktop path tied to the user"""
-        return Path(self.user_desktop_dir)
-
-    @property
-    def user_runtime_path(self) -> Path:
-        """:return: runtime path tied to the user"""
-        return Path(self.user_runtime_dir)
-
-    @property
-    def site_runtime_path(self) -> Path:
-        """:return: runtime path shared by users"""
-        return Path(self.site_runtime_dir)
-
-    def iter_config_dirs(self) -> Iterator[str]:
-        """:yield: all user and site configuration directories."""
-        yield self.user_config_dir
-        yield self.site_config_dir
-
-    def iter_data_dirs(self) -> Iterator[str]:
-        """:yield: all user and site data directories."""
-        yield self.user_data_dir
-        yield self.site_data_dir
-
-    def iter_cache_dirs(self) -> Iterator[str]:
-        """:yield: all user and site cache directories."""
-        yield self.user_cache_dir
-        yield self.site_cache_dir
-
-    def iter_runtime_dirs(self) -> Iterator[str]:
-        """:yield: all user and site runtime directories."""
-        yield self.user_runtime_dir
-        yield self.site_runtime_dir
-
-    def iter_config_paths(self) -> Iterator[Path]:
-        """:yield: all user and site configuration paths."""
-        for path in self.iter_config_dirs():
-            yield Path(path)
-
-    def iter_data_paths(self) -> Iterator[Path]:
-        """:yield: all user and site data paths."""
-        for path in self.iter_data_dirs():
-            yield Path(path)
-
-    def iter_cache_paths(self) -> Iterator[Path]:
-        """:yield: all user and site cache paths."""
-        for path in self.iter_cache_dirs():
-            yield Path(path)
-
-    def iter_runtime_paths(self) -> Iterator[Path]:
-        """:yield: all user and site runtime paths."""
-        for path in self.iter_runtime_dirs():
-            yield Path(path)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py
deleted file mode 100644
index e4b0391..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py
+++ /dev/null
@@ -1,144 +0,0 @@
-"""macOS."""
-
-from __future__ import annotations
-
-import os.path
-import sys
-from typing import TYPE_CHECKING
-
-from .api import PlatformDirsABC
-
-if TYPE_CHECKING:
-    from pathlib import Path
-
-
-class MacOS(PlatformDirsABC):
-    """
-    Platform directories for the macOS operating system.
-
-    Follows the guidance from
-    `Apple documentation `_.
-    Makes use of the `appname `,
-    `version `,
-    `ensure_exists `.
-
-    """
-
-    @property
-    def user_data_dir(self) -> str:
-        """:return: data directory tied to the user, e.g. ``~/Library/Application Support/$appname/$version``"""
-        return self._append_app_name_and_version(os.path.expanduser("~/Library/Application Support"))  # noqa: PTH111
-
-    @property
-    def site_data_dir(self) -> str:
-        """
-        :return: data directory shared by users, e.g. ``/Library/Application Support/$appname/$version``.
-          If we're using a Python binary managed by `Homebrew `_, the directory
-          will be under the Homebrew prefix, e.g. ``/opt/homebrew/share/$appname/$version``.
-          If `multipath ` is enabled, and we're in Homebrew,
-          the response is a multi-path string separated by ":", e.g.
-          ``/opt/homebrew/share/$appname/$version:/Library/Application Support/$appname/$version``
-        """
-        is_homebrew = sys.prefix.startswith("/opt/homebrew")
-        path_list = [self._append_app_name_and_version("/opt/homebrew/share")] if is_homebrew else []
-        path_list.append(self._append_app_name_and_version("/Library/Application Support"))
-        if self.multipath:
-            return os.pathsep.join(path_list)
-        return path_list[0]
-
-    @property
-    def site_data_path(self) -> Path:
-        """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
-        return self._first_item_as_path_if_multipath(self.site_data_dir)
-
-    @property
-    def user_config_dir(self) -> str:
-        """:return: config directory tied to the user, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def site_config_dir(self) -> str:
-        """:return: config directory shared by the users, same as `site_data_dir`"""
-        return self.site_data_dir
-
-    @property
-    def user_cache_dir(self) -> str:
-        """:return: cache directory tied to the user, e.g. ``~/Library/Caches/$appname/$version``"""
-        return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches"))  # noqa: PTH111
-
-    @property
-    def site_cache_dir(self) -> str:
-        """
-        :return: cache directory shared by users, e.g. ``/Library/Caches/$appname/$version``.
-          If we're using a Python binary managed by `Homebrew `_, the directory
-          will be under the Homebrew prefix, e.g. ``/opt/homebrew/var/cache/$appname/$version``.
-          If `multipath ` is enabled, and we're in Homebrew,
-          the response is a multi-path string separated by ":", e.g.
-          ``/opt/homebrew/var/cache/$appname/$version:/Library/Caches/$appname/$version``
-        """
-        is_homebrew = sys.prefix.startswith("/opt/homebrew")
-        path_list = [self._append_app_name_and_version("/opt/homebrew/var/cache")] if is_homebrew else []
-        path_list.append(self._append_app_name_and_version("/Library/Caches"))
-        if self.multipath:
-            return os.pathsep.join(path_list)
-        return path_list[0]
-
-    @property
-    def site_cache_path(self) -> Path:
-        """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
-        return self._first_item_as_path_if_multipath(self.site_cache_dir)
-
-    @property
-    def user_state_dir(self) -> str:
-        """:return: state directory tied to the user, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def user_log_dir(self) -> str:
-        """:return: log directory tied to the user, e.g. ``~/Library/Logs/$appname/$version``"""
-        return self._append_app_name_and_version(os.path.expanduser("~/Library/Logs"))  # noqa: PTH111
-
-    @property
-    def user_documents_dir(self) -> str:
-        """:return: documents directory tied to the user, e.g. ``~/Documents``"""
-        return os.path.expanduser("~/Documents")  # noqa: PTH111
-
-    @property
-    def user_downloads_dir(self) -> str:
-        """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
-        return os.path.expanduser("~/Downloads")  # noqa: PTH111
-
-    @property
-    def user_pictures_dir(self) -> str:
-        """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
-        return os.path.expanduser("~/Pictures")  # noqa: PTH111
-
-    @property
-    def user_videos_dir(self) -> str:
-        """:return: videos directory tied to the user, e.g. ``~/Movies``"""
-        return os.path.expanduser("~/Movies")  # noqa: PTH111
-
-    @property
-    def user_music_dir(self) -> str:
-        """:return: music directory tied to the user, e.g. ``~/Music``"""
-        return os.path.expanduser("~/Music")  # noqa: PTH111
-
-    @property
-    def user_desktop_dir(self) -> str:
-        """:return: desktop directory tied to the user, e.g. ``~/Desktop``"""
-        return os.path.expanduser("~/Desktop")  # noqa: PTH111
-
-    @property
-    def user_runtime_dir(self) -> str:
-        """:return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``"""
-        return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches/TemporaryItems"))  # noqa: PTH111
-
-    @property
-    def site_runtime_dir(self) -> str:
-        """:return: runtime directory shared by users, same as `user_runtime_dir`"""
-        return self.user_runtime_dir
-
-
-__all__ = [
-    "MacOS",
-]
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed
deleted file mode 100644
index e69de29..0000000
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py
deleted file mode 100644
index f1942e9..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py
+++ /dev/null
@@ -1,269 +0,0 @@
-"""Unix."""
-
-from __future__ import annotations
-
-import os
-import sys
-from configparser import ConfigParser
-from pathlib import Path
-from typing import Iterator, NoReturn
-
-from .api import PlatformDirsABC
-
-if sys.platform == "win32":
-
-    def getuid() -> NoReturn:
-        msg = "should only be used on Unix"
-        raise RuntimeError(msg)
-
-else:
-    from os import getuid
-
-
-class Unix(PlatformDirsABC):  # noqa: PLR0904
-    """
-    On Unix/Linux, we follow the `XDG Basedir Spec `_.
-
-    The spec allows overriding directories with environment variables. The examples shown are the default values,
-    alongside the name of the environment variable that overrides them. Makes use of the `appname
-    `, `version `, `multipath
-    `, `opinion `, `ensure_exists
-    `.
-
-    """
-
-    @property
-    def user_data_dir(self) -> str:
-        """
-        :return: data directory tied to the user, e.g. ``~/.local/share/$appname/$version`` or
-         ``$XDG_DATA_HOME/$appname/$version``
-        """
-        path = os.environ.get("XDG_DATA_HOME", "")
-        if not path.strip():
-            path = os.path.expanduser("~/.local/share")  # noqa: PTH111
-        return self._append_app_name_and_version(path)
-
-    @property
-    def _site_data_dirs(self) -> list[str]:
-        path = os.environ.get("XDG_DATA_DIRS", "")
-        if not path.strip():
-            path = f"/usr/local/share{os.pathsep}/usr/share"
-        return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)]
-
-    @property
-    def site_data_dir(self) -> str:
-        """
-        :return: data directories shared by users (if `multipath ` is
-         enabled and ``XDG_DATA_DIRS`` is set and a multi path the response is also a multi path separated by the
-         OS path separator), e.g. ``/usr/local/share/$appname/$version`` or ``/usr/share/$appname/$version``
-        """
-        # XDG default for $XDG_DATA_DIRS; only first, if multipath is False
-        dirs = self._site_data_dirs
-        if not self.multipath:
-            return dirs[0]
-        return os.pathsep.join(dirs)
-
-    @property
-    def user_config_dir(self) -> str:
-        """
-        :return: config directory tied to the user, e.g. ``~/.config/$appname/$version`` or
-         ``$XDG_CONFIG_HOME/$appname/$version``
-        """
-        path = os.environ.get("XDG_CONFIG_HOME", "")
-        if not path.strip():
-            path = os.path.expanduser("~/.config")  # noqa: PTH111
-        return self._append_app_name_and_version(path)
-
-    @property
-    def _site_config_dirs(self) -> list[str]:
-        path = os.environ.get("XDG_CONFIG_DIRS", "")
-        if not path.strip():
-            path = "/etc/xdg"
-        return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)]
-
-    @property
-    def site_config_dir(self) -> str:
-        """
-        :return: config directories shared by users (if `multipath `
-         is enabled and ``XDG_CONFIG_DIRS`` is set and a multi path the response is also a multi path separated by
-         the OS path separator), e.g. ``/etc/xdg/$appname/$version``
-        """
-        # XDG default for $XDG_CONFIG_DIRS only first, if multipath is False
-        dirs = self._site_config_dirs
-        if not self.multipath:
-            return dirs[0]
-        return os.pathsep.join(dirs)
-
-    @property
-    def user_cache_dir(self) -> str:
-        """
-        :return: cache directory tied to the user, e.g. ``~/.cache/$appname/$version`` or
-         ``~/$XDG_CACHE_HOME/$appname/$version``
-        """
-        path = os.environ.get("XDG_CACHE_HOME", "")
-        if not path.strip():
-            path = os.path.expanduser("~/.cache")  # noqa: PTH111
-        return self._append_app_name_and_version(path)
-
-    @property
-    def site_cache_dir(self) -> str:
-        """:return: cache directory shared by users, e.g. ``/var/cache/$appname/$version``"""
-        return self._append_app_name_and_version("/var/cache")
-
-    @property
-    def user_state_dir(self) -> str:
-        """
-        :return: state directory tied to the user, e.g. ``~/.local/state/$appname/$version`` or
-         ``$XDG_STATE_HOME/$appname/$version``
-        """
-        path = os.environ.get("XDG_STATE_HOME", "")
-        if not path.strip():
-            path = os.path.expanduser("~/.local/state")  # noqa: PTH111
-        return self._append_app_name_and_version(path)
-
-    @property
-    def user_log_dir(self) -> str:
-        """:return: log directory tied to the user, same as `user_state_dir` if not opinionated else ``log`` in it"""
-        path = self.user_state_dir
-        if self.opinion:
-            path = os.path.join(path, "log")  # noqa: PTH118
-            self._optionally_create_directory(path)
-        return path
-
-    @property
-    def user_documents_dir(self) -> str:
-        """:return: documents directory tied to the user, e.g. ``~/Documents``"""
-        return _get_user_media_dir("XDG_DOCUMENTS_DIR", "~/Documents")
-
-    @property
-    def user_downloads_dir(self) -> str:
-        """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
-        return _get_user_media_dir("XDG_DOWNLOAD_DIR", "~/Downloads")
-
-    @property
-    def user_pictures_dir(self) -> str:
-        """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
-        return _get_user_media_dir("XDG_PICTURES_DIR", "~/Pictures")
-
-    @property
-    def user_videos_dir(self) -> str:
-        """:return: videos directory tied to the user, e.g. ``~/Videos``"""
-        return _get_user_media_dir("XDG_VIDEOS_DIR", "~/Videos")
-
-    @property
-    def user_music_dir(self) -> str:
-        """:return: music directory tied to the user, e.g. ``~/Music``"""
-        return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music")
-
-    @property
-    def user_desktop_dir(self) -> str:
-        """:return: desktop directory tied to the user, e.g. ``~/Desktop``"""
-        return _get_user_media_dir("XDG_DESKTOP_DIR", "~/Desktop")
-
-    @property
-    def user_runtime_dir(self) -> str:
-        """
-        :return: runtime directory tied to the user, e.g. ``/run/user/$(id -u)/$appname/$version`` or
-         ``$XDG_RUNTIME_DIR/$appname/$version``.
-
-         For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/user/$(id -u)/$appname/$version`` if
-         exists, otherwise ``/tmp/runtime-$(id -u)/$appname/$version``, if``$XDG_RUNTIME_DIR``
-         is not set.
-        """
-        path = os.environ.get("XDG_RUNTIME_DIR", "")
-        if not path.strip():
-            if sys.platform.startswith(("freebsd", "openbsd", "netbsd")):
-                path = f"/var/run/user/{getuid()}"
-                if not Path(path).exists():
-                    path = f"/tmp/runtime-{getuid()}"  # noqa: S108
-            else:
-                path = f"/run/user/{getuid()}"
-        return self._append_app_name_and_version(path)
-
-    @property
-    def site_runtime_dir(self) -> str:
-        """
-        :return: runtime directory shared by users, e.g. ``/run/$appname/$version`` or \
-        ``$XDG_RUNTIME_DIR/$appname/$version``.
-
-        Note that this behaves almost exactly like `user_runtime_dir` if ``$XDG_RUNTIME_DIR`` is set, but will
-        fall back to paths associated to the root user instead of a regular logged-in user if it's not set.
-
-        If you wish to ensure that a logged-in root user path is returned e.g. ``/run/user/0``, use `user_runtime_dir`
-        instead.
-
-        For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/$appname/$version`` if ``$XDG_RUNTIME_DIR`` is not set.
-        """
-        path = os.environ.get("XDG_RUNTIME_DIR", "")
-        if not path.strip():
-            if sys.platform.startswith(("freebsd", "openbsd", "netbsd")):
-                path = "/var/run"
-            else:
-                path = "/run"
-        return self._append_app_name_and_version(path)
-
-    @property
-    def site_data_path(self) -> Path:
-        """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
-        return self._first_item_as_path_if_multipath(self.site_data_dir)
-
-    @property
-    def site_config_path(self) -> Path:
-        """:return: config path shared by the users, returns the first item, even if ``multipath`` is set to ``True``"""
-        return self._first_item_as_path_if_multipath(self.site_config_dir)
-
-    @property
-    def site_cache_path(self) -> Path:
-        """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``"""
-        return self._first_item_as_path_if_multipath(self.site_cache_dir)
-
-    def iter_config_dirs(self) -> Iterator[str]:
-        """:yield: all user and site configuration directories."""
-        yield self.user_config_dir
-        yield from self._site_config_dirs
-
-    def iter_data_dirs(self) -> Iterator[str]:
-        """:yield: all user and site data directories."""
-        yield self.user_data_dir
-        yield from self._site_data_dirs
-
-
-def _get_user_media_dir(env_var: str, fallback_tilde_path: str) -> str:
-    media_dir = _get_user_dirs_folder(env_var)
-    if media_dir is None:
-        media_dir = os.environ.get(env_var, "").strip()
-        if not media_dir:
-            media_dir = os.path.expanduser(fallback_tilde_path)  # noqa: PTH111
-
-    return media_dir
-
-
-def _get_user_dirs_folder(key: str) -> str | None:
-    """
-    Return directory from user-dirs.dirs config file.
-
-    See https://freedesktop.org/wiki/Software/xdg-user-dirs/.
-
-    """
-    user_dirs_config_path = Path(Unix().user_config_dir) / "user-dirs.dirs"
-    if user_dirs_config_path.exists():
-        parser = ConfigParser()
-
-        with user_dirs_config_path.open() as stream:
-            # Add fake section header, so ConfigParser doesn't complain
-            parser.read_string(f"[top]\n{stream.read()}")
-
-        if key not in parser["top"]:
-            return None
-
-        path = parser["top"][key].strip('"')
-        # Handle relative home paths
-        return path.replace("$HOME", os.path.expanduser("~"))  # noqa: PTH111
-
-    return None
-
-
-__all__ = [
-    "Unix",
-]
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py
deleted file mode 100644
index afb4924..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# file generated by setuptools_scm
-# don't change, don't track in version control
-TYPE_CHECKING = False
-if TYPE_CHECKING:
-    from typing import Tuple, Union
-    VERSION_TUPLE = Tuple[Union[int, str], ...]
-else:
-    VERSION_TUPLE = object
-
-version: str
-__version__: str
-__version_tuple__: VERSION_TUPLE
-version_tuple: VERSION_TUPLE
-
-__version__ = version = '4.3.6'
-__version_tuple__ = version_tuple = (4, 3, 6)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py b/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py
deleted file mode 100644
index d7bc960..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py
+++ /dev/null
@@ -1,272 +0,0 @@
-"""Windows."""
-
-from __future__ import annotations
-
-import os
-import sys
-from functools import lru_cache
-from typing import TYPE_CHECKING
-
-from .api import PlatformDirsABC
-
-if TYPE_CHECKING:
-    from collections.abc import Callable
-
-
-class Windows(PlatformDirsABC):
-    """
-    `MSDN on where to store app data files `_.
-
-    Makes use of the `appname `, `appauthor
-    `, `version `, `roaming
-    `, `opinion `, `ensure_exists
-    `.
-
-    """
-
-    @property
-    def user_data_dir(self) -> str:
-        """
-        :return: data directory tied to the user, e.g.
-         ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname`` (not roaming) or
-         ``%USERPROFILE%\\AppData\\Roaming\\$appauthor\\$appname`` (roaming)
-        """
-        const = "CSIDL_APPDATA" if self.roaming else "CSIDL_LOCAL_APPDATA"
-        path = os.path.normpath(get_win_folder(const))
-        return self._append_parts(path)
-
-    def _append_parts(self, path: str, *, opinion_value: str | None = None) -> str:
-        params = []
-        if self.appname:
-            if self.appauthor is not False:
-                author = self.appauthor or self.appname
-                params.append(author)
-            params.append(self.appname)
-            if opinion_value is not None and self.opinion:
-                params.append(opinion_value)
-            if self.version:
-                params.append(self.version)
-        path = os.path.join(path, *params)  # noqa: PTH118
-        self._optionally_create_directory(path)
-        return path
-
-    @property
-    def site_data_dir(self) -> str:
-        """:return: data directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname``"""
-        path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA"))
-        return self._append_parts(path)
-
-    @property
-    def user_config_dir(self) -> str:
-        """:return: config directory tied to the user, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def site_config_dir(self) -> str:
-        """:return: config directory shared by the users, same as `site_data_dir`"""
-        return self.site_data_dir
-
-    @property
-    def user_cache_dir(self) -> str:
-        """
-        :return: cache directory tied to the user (if opinionated with ``Cache`` folder within ``$appname``) e.g.
-         ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname\\Cache\\$version``
-        """
-        path = os.path.normpath(get_win_folder("CSIDL_LOCAL_APPDATA"))
-        return self._append_parts(path, opinion_value="Cache")
-
-    @property
-    def site_cache_dir(self) -> str:
-        """:return: cache directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname\\Cache\\$version``"""
-        path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA"))
-        return self._append_parts(path, opinion_value="Cache")
-
-    @property
-    def user_state_dir(self) -> str:
-        """:return: state directory tied to the user, same as `user_data_dir`"""
-        return self.user_data_dir
-
-    @property
-    def user_log_dir(self) -> str:
-        """:return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in it"""
-        path = self.user_data_dir
-        if self.opinion:
-            path = os.path.join(path, "Logs")  # noqa: PTH118
-            self._optionally_create_directory(path)
-        return path
-
-    @property
-    def user_documents_dir(self) -> str:
-        """:return: documents directory tied to the user e.g. ``%USERPROFILE%\\Documents``"""
-        return os.path.normpath(get_win_folder("CSIDL_PERSONAL"))
-
-    @property
-    def user_downloads_dir(self) -> str:
-        """:return: downloads directory tied to the user e.g. ``%USERPROFILE%\\Downloads``"""
-        return os.path.normpath(get_win_folder("CSIDL_DOWNLOADS"))
-
-    @property
-    def user_pictures_dir(self) -> str:
-        """:return: pictures directory tied to the user e.g. ``%USERPROFILE%\\Pictures``"""
-        return os.path.normpath(get_win_folder("CSIDL_MYPICTURES"))
-
-    @property
-    def user_videos_dir(self) -> str:
-        """:return: videos directory tied to the user e.g. ``%USERPROFILE%\\Videos``"""
-        return os.path.normpath(get_win_folder("CSIDL_MYVIDEO"))
-
-    @property
-    def user_music_dir(self) -> str:
-        """:return: music directory tied to the user e.g. ``%USERPROFILE%\\Music``"""
-        return os.path.normpath(get_win_folder("CSIDL_MYMUSIC"))
-
-    @property
-    def user_desktop_dir(self) -> str:
-        """:return: desktop directory tied to the user, e.g. ``%USERPROFILE%\\Desktop``"""
-        return os.path.normpath(get_win_folder("CSIDL_DESKTOPDIRECTORY"))
-
-    @property
-    def user_runtime_dir(self) -> str:
-        """
-        :return: runtime directory tied to the user, e.g.
-         ``%USERPROFILE%\\AppData\\Local\\Temp\\$appauthor\\$appname``
-        """
-        path = os.path.normpath(os.path.join(get_win_folder("CSIDL_LOCAL_APPDATA"), "Temp"))  # noqa: PTH118
-        return self._append_parts(path)
-
-    @property
-    def site_runtime_dir(self) -> str:
-        """:return: runtime directory shared by users, same as `user_runtime_dir`"""
-        return self.user_runtime_dir
-
-
-def get_win_folder_from_env_vars(csidl_name: str) -> str:
-    """Get folder from environment variables."""
-    result = get_win_folder_if_csidl_name_not_env_var(csidl_name)
-    if result is not None:
-        return result
-
-    env_var_name = {
-        "CSIDL_APPDATA": "APPDATA",
-        "CSIDL_COMMON_APPDATA": "ALLUSERSPROFILE",
-        "CSIDL_LOCAL_APPDATA": "LOCALAPPDATA",
-    }.get(csidl_name)
-    if env_var_name is None:
-        msg = f"Unknown CSIDL name: {csidl_name}"
-        raise ValueError(msg)
-    result = os.environ.get(env_var_name)
-    if result is None:
-        msg = f"Unset environment variable: {env_var_name}"
-        raise ValueError(msg)
-    return result
-
-
-def get_win_folder_if_csidl_name_not_env_var(csidl_name: str) -> str | None:
-    """Get a folder for a CSIDL name that does not exist as an environment variable."""
-    if csidl_name == "CSIDL_PERSONAL":
-        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Documents")  # noqa: PTH118
-
-    if csidl_name == "CSIDL_DOWNLOADS":
-        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Downloads")  # noqa: PTH118
-
-    if csidl_name == "CSIDL_MYPICTURES":
-        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Pictures")  # noqa: PTH118
-
-    if csidl_name == "CSIDL_MYVIDEO":
-        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Videos")  # noqa: PTH118
-
-    if csidl_name == "CSIDL_MYMUSIC":
-        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Music")  # noqa: PTH118
-    return None
-
-
-def get_win_folder_from_registry(csidl_name: str) -> str:
-    """
-    Get folder from the registry.
-
-    This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer
-    for all CSIDL_* names.
-
-    """
-    shell_folder_name = {
-        "CSIDL_APPDATA": "AppData",
-        "CSIDL_COMMON_APPDATA": "Common AppData",
-        "CSIDL_LOCAL_APPDATA": "Local AppData",
-        "CSIDL_PERSONAL": "Personal",
-        "CSIDL_DOWNLOADS": "{374DE290-123F-4565-9164-39C4925E467B}",
-        "CSIDL_MYPICTURES": "My Pictures",
-        "CSIDL_MYVIDEO": "My Video",
-        "CSIDL_MYMUSIC": "My Music",
-    }.get(csidl_name)
-    if shell_folder_name is None:
-        msg = f"Unknown CSIDL name: {csidl_name}"
-        raise ValueError(msg)
-    if sys.platform != "win32":  # only needed for mypy type checker to know that this code runs only on Windows
-        raise NotImplementedError
-    import winreg  # noqa: PLC0415
-
-    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
-    directory, _ = winreg.QueryValueEx(key, shell_folder_name)
-    return str(directory)
-
-
-def get_win_folder_via_ctypes(csidl_name: str) -> str:
-    """Get folder with ctypes."""
-    # There is no 'CSIDL_DOWNLOADS'.
-    # Use 'CSIDL_PROFILE' (40) and append the default folder 'Downloads' instead.
-    # https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid
-
-    import ctypes  # noqa: PLC0415
-
-    csidl_const = {
-        "CSIDL_APPDATA": 26,
-        "CSIDL_COMMON_APPDATA": 35,
-        "CSIDL_LOCAL_APPDATA": 28,
-        "CSIDL_PERSONAL": 5,
-        "CSIDL_MYPICTURES": 39,
-        "CSIDL_MYVIDEO": 14,
-        "CSIDL_MYMUSIC": 13,
-        "CSIDL_DOWNLOADS": 40,
-        "CSIDL_DESKTOPDIRECTORY": 16,
-    }.get(csidl_name)
-    if csidl_const is None:
-        msg = f"Unknown CSIDL name: {csidl_name}"
-        raise ValueError(msg)
-
-    buf = ctypes.create_unicode_buffer(1024)
-    windll = getattr(ctypes, "windll")  # noqa: B009 # using getattr to avoid false positive with mypy type checker
-    windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)
-
-    # Downgrade to short path name if it has high-bit chars.
-    if any(ord(c) > 255 for c in buf):  # noqa: PLR2004
-        buf2 = ctypes.create_unicode_buffer(1024)
-        if windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024):
-            buf = buf2
-
-    if csidl_name == "CSIDL_DOWNLOADS":
-        return os.path.join(buf.value, "Downloads")  # noqa: PTH118
-
-    return buf.value
-
-
-def _pick_get_win_folder() -> Callable[[str], str]:
-    try:
-        import ctypes  # noqa: PLC0415
-    except ImportError:
-        pass
-    else:
-        if hasattr(ctypes, "windll"):
-            return get_win_folder_via_ctypes
-    try:
-        import winreg  # noqa: PLC0415, F401
-    except ImportError:
-        return get_win_folder_from_env_vars
-    else:
-        return get_win_folder_from_registry
-
-
-get_win_folder = lru_cache(maxsize=None)(_pick_get_win_folder())
-
-__all__ = [
-    "Windows",
-]
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py
deleted file mode 100644
index 60ae9bb..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-    Pygments
-    ~~~~~~~~
-
-    Pygments is a syntax highlighting package written in Python.
-
-    It is a generic syntax highlighter for general use in all kinds of software
-    such as forum systems, wikis or other applications that need to prettify
-    source code. Highlights are:
-
-    * a wide range of common languages and markup formats is supported
-    * special attention is paid to details, increasing quality by a fair amount
-    * support for new languages and formats are added easily
-    * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image
-      formats that PIL supports, and ANSI sequences
-    * it is usable as a command-line tool and as a library
-    * ... and it highlights even Brainfuck!
-
-    The `Pygments master branch`_ is installable with ``easy_install Pygments==dev``.
-
-    .. _Pygments master branch:
-       https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-from io import StringIO, BytesIO
-
-__version__ = '2.18.0'
-__docformat__ = 'restructuredtext'
-
-__all__ = ['lex', 'format', 'highlight']
-
-
-def lex(code, lexer):
-    """
-    Lex `code` with the `lexer` (must be a `Lexer` instance)
-    and return an iterable of tokens. Currently, this only calls
-    `lexer.get_tokens()`.
-    """
-    try:
-        return lexer.get_tokens(code)
-    except TypeError:
-        # Heuristic to catch a common mistake.
-        from pip._vendor.pygments.lexer import RegexLexer
-        if isinstance(lexer, type) and issubclass(lexer, RegexLexer):
-            raise TypeError('lex() argument must be a lexer instance, '
-                            'not a class')
-        raise
-
-
-def format(tokens, formatter, outfile=None):  # pylint: disable=redefined-builtin
-    """
-    Format ``tokens`` (an iterable of tokens) with the formatter ``formatter``
-    (a `Formatter` instance).
-
-    If ``outfile`` is given and a valid file object (an object with a
-    ``write`` method), the result will be written to it, otherwise it
-    is returned as a string.
-    """
-    try:
-        if not outfile:
-            realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO()
-            formatter.format(tokens, realoutfile)
-            return realoutfile.getvalue()
-        else:
-            formatter.format(tokens, outfile)
-    except TypeError:
-        # Heuristic to catch a common mistake.
-        from pip._vendor.pygments.formatter import Formatter
-        if isinstance(formatter, type) and issubclass(formatter, Formatter):
-            raise TypeError('format() argument must be a formatter instance, '
-                            'not a class')
-        raise
-
-
-def highlight(code, lexer, formatter, outfile=None):
-    """
-    This is the most high-level highlighting function. It combines `lex` and
-    `format` in one function.
-    """
-    return format(lex(code, lexer), formatter, outfile)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py
deleted file mode 100644
index dcc6e5a..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-    pygments.__main__
-    ~~~~~~~~~~~~~~~~~
-
-    Main entry point for ``python -m pygments``.
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-
-import sys
-from pip._vendor.pygments.cmdline import main
-
-try:
-    sys.exit(main(sys.argv))
-except KeyboardInterrupt:
-    sys.exit(1)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 078e9b0..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc
deleted file mode 100644
index 61bcc4a..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc
deleted file mode 100644
index 86fe546..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc
deleted file mode 100644
index ef1cefd..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc
deleted file mode 100644
index 9dc6dc7..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc
deleted file mode 100644
index 6a687c8..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc
deleted file mode 100644
index 6db5862..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc
deleted file mode 100644
index bfc6196..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc
deleted file mode 100644
index 7cb5122..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc
deleted file mode 100644
index d2d8f0e..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc
deleted file mode 100644
index eeb54bd..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc
deleted file mode 100644
index ed23a4e..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc
deleted file mode 100644
index 11dc865..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc
deleted file mode 100644
index 47069f9..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc
deleted file mode 100644
index cf4d7a5..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc
deleted file mode 100644
index 0bfdbfe..0000000
Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc and /dev/null differ
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py
deleted file mode 100644
index 0a7072e..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py
+++ /dev/null
@@ -1,668 +0,0 @@
-"""
-    pygments.cmdline
-    ~~~~~~~~~~~~~~~~
-
-    Command line interface.
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-
-import os
-import sys
-import shutil
-import argparse
-from textwrap import dedent
-
-from pip._vendor.pygments import __version__, highlight
-from pip._vendor.pygments.util import ClassNotFound, OptionError, docstring_headline, \
-    guess_decode, guess_decode_from_terminal, terminal_encoding, \
-    UnclosingTextIOWrapper
-from pip._vendor.pygments.lexers import get_all_lexers, get_lexer_by_name, guess_lexer, \
-    load_lexer_from_file, get_lexer_for_filename, find_lexer_class_for_filename
-from pip._vendor.pygments.lexers.special import TextLexer
-from pip._vendor.pygments.formatters.latex import LatexEmbeddedLexer, LatexFormatter
-from pip._vendor.pygments.formatters import get_all_formatters, get_formatter_by_name, \
-    load_formatter_from_file, get_formatter_for_filename, find_formatter_class
-from pip._vendor.pygments.formatters.terminal import TerminalFormatter
-from pip._vendor.pygments.formatters.terminal256 import Terminal256Formatter, TerminalTrueColorFormatter
-from pip._vendor.pygments.filters import get_all_filters, find_filter_class
-from pip._vendor.pygments.styles import get_all_styles, get_style_by_name
-
-
-def _parse_options(o_strs):
-    opts = {}
-    if not o_strs:
-        return opts
-    for o_str in o_strs:
-        if not o_str.strip():
-            continue
-        o_args = o_str.split(',')
-        for o_arg in o_args:
-            o_arg = o_arg.strip()
-            try:
-                o_key, o_val = o_arg.split('=', 1)
-                o_key = o_key.strip()
-                o_val = o_val.strip()
-            except ValueError:
-                opts[o_arg] = True
-            else:
-                opts[o_key] = o_val
-    return opts
-
-
-def _parse_filters(f_strs):
-    filters = []
-    if not f_strs:
-        return filters
-    for f_str in f_strs:
-        if ':' in f_str:
-            fname, fopts = f_str.split(':', 1)
-            filters.append((fname, _parse_options([fopts])))
-        else:
-            filters.append((f_str, {}))
-    return filters
-
-
-def _print_help(what, name):
-    try:
-        if what == 'lexer':
-            cls = get_lexer_by_name(name)
-            print(f"Help on the {cls.name} lexer:")
-            print(dedent(cls.__doc__))
-        elif what == 'formatter':
-            cls = find_formatter_class(name)
-            print(f"Help on the {cls.name} formatter:")
-            print(dedent(cls.__doc__))
-        elif what == 'filter':
-            cls = find_filter_class(name)
-            print(f"Help on the {name} filter:")
-            print(dedent(cls.__doc__))
-        return 0
-    except (AttributeError, ValueError):
-        print(f"{what} not found!", file=sys.stderr)
-        return 1
-
-
-def _print_list(what):
-    if what == 'lexer':
-        print()
-        print("Lexers:")
-        print("~~~~~~~")
-
-        info = []
-        for fullname, names, exts, _ in get_all_lexers():
-            tup = (', '.join(names)+':', fullname,
-                   exts and '(filenames ' + ', '.join(exts) + ')' or '')
-            info.append(tup)
-        info.sort()
-        for i in info:
-            print(('* {}\n    {} {}').format(*i))
-
-    elif what == 'formatter':
-        print()
-        print("Formatters:")
-        print("~~~~~~~~~~~")
-
-        info = []
-        for cls in get_all_formatters():
-            doc = docstring_headline(cls)
-            tup = (', '.join(cls.aliases) + ':', doc, cls.filenames and
-                   '(filenames ' + ', '.join(cls.filenames) + ')' or '')
-            info.append(tup)
-        info.sort()
-        for i in info:
-            print(('* {}\n    {} {}').format(*i))
-
-    elif what == 'filter':
-        print()
-        print("Filters:")
-        print("~~~~~~~~")
-
-        for name in get_all_filters():
-            cls = find_filter_class(name)
-            print("* " + name + ':')
-            print(f"    {docstring_headline(cls)}")
-
-    elif what == 'style':
-        print()
-        print("Styles:")
-        print("~~~~~~~")
-
-        for name in get_all_styles():
-            cls = get_style_by_name(name)
-            print("* " + name + ':')
-            print(f"    {docstring_headline(cls)}")
-
-
-def _print_list_as_json(requested_items):
-    import json
-    result = {}
-    if 'lexer' in requested_items:
-        info = {}
-        for fullname, names, filenames, mimetypes in get_all_lexers():
-            info[fullname] = {
-                'aliases': names,
-                'filenames': filenames,
-                'mimetypes': mimetypes
-            }
-        result['lexers'] = info
-
-    if 'formatter' in requested_items:
-        info = {}
-        for cls in get_all_formatters():
-            doc = docstring_headline(cls)
-            info[cls.name] = {
-                'aliases': cls.aliases,
-                'filenames': cls.filenames,
-                'doc': doc
-            }
-        result['formatters'] = info
-
-    if 'filter' in requested_items:
-        info = {}
-        for name in get_all_filters():
-            cls = find_filter_class(name)
-            info[name] = {
-                'doc': docstring_headline(cls)
-            }
-        result['filters'] = info
-
-    if 'style' in requested_items:
-        info = {}
-        for name in get_all_styles():
-            cls = get_style_by_name(name)
-            info[name] = {
-                'doc': docstring_headline(cls)
-            }
-        result['styles'] = info
-
-    json.dump(result, sys.stdout)
-
-def main_inner(parser, argns):
-    if argns.help:
-        parser.print_help()
-        return 0
-
-    if argns.V:
-        print(f'Pygments version {__version__}, (c) 2006-2024 by Georg Brandl, Matthäus '
-              'Chajdas and contributors.')
-        return 0
-
-    def is_only_option(opt):
-        return not any(v for (k, v) in vars(argns).items() if k != opt)
-
-    # handle ``pygmentize -L``
-    if argns.L is not None:
-        arg_set = set()
-        for k, v in vars(argns).items():
-            if v:
-                arg_set.add(k)
-
-        arg_set.discard('L')
-        arg_set.discard('json')
-
-        if arg_set:
-            parser.print_help(sys.stderr)
-            return 2
-
-        # print version
-        if not argns.json:
-            main(['', '-V'])
-        allowed_types = {'lexer', 'formatter', 'filter', 'style'}
-        largs = [arg.rstrip('s') for arg in argns.L]
-        if any(arg not in allowed_types for arg in largs):
-            parser.print_help(sys.stderr)
-            return 0
-        if not largs:
-            largs = allowed_types
-        if not argns.json:
-            for arg in largs:
-                _print_list(arg)
-        else:
-            _print_list_as_json(largs)
-        return 0
-
-    # handle ``pygmentize -H``
-    if argns.H:
-        if not is_only_option('H'):
-            parser.print_help(sys.stderr)
-            return 2
-        what, name = argns.H
-        if what not in ('lexer', 'formatter', 'filter'):
-            parser.print_help(sys.stderr)
-            return 2
-        return _print_help(what, name)
-
-    # parse -O options
-    parsed_opts = _parse_options(argns.O or [])
-
-    # parse -P options
-    for p_opt in argns.P or []:
-        try:
-            name, value = p_opt.split('=', 1)
-        except ValueError:
-            parsed_opts[p_opt] = True
-        else:
-            parsed_opts[name] = value
-
-    # encodings
-    inencoding = parsed_opts.get('inencoding', parsed_opts.get('encoding'))
-    outencoding = parsed_opts.get('outencoding', parsed_opts.get('encoding'))
-
-    # handle ``pygmentize -N``
-    if argns.N:
-        lexer = find_lexer_class_for_filename(argns.N)
-        if lexer is None:
-            lexer = TextLexer
-
-        print(lexer.aliases[0])
-        return 0
-
-    # handle ``pygmentize -C``
-    if argns.C:
-        inp = sys.stdin.buffer.read()
-        try:
-            lexer = guess_lexer(inp, inencoding=inencoding)
-        except ClassNotFound:
-            lexer = TextLexer
-
-        print(lexer.aliases[0])
-        return 0
-
-    # handle ``pygmentize -S``
-    S_opt = argns.S
-    a_opt = argns.a
-    if S_opt is not None:
-        f_opt = argns.f
-        if not f_opt:
-            parser.print_help(sys.stderr)
-            return 2
-        if argns.l or argns.INPUTFILE:
-            parser.print_help(sys.stderr)
-            return 2
-
-        try:
-            parsed_opts['style'] = S_opt
-            fmter = get_formatter_by_name(f_opt, **parsed_opts)
-        except ClassNotFound as err:
-            print(err, file=sys.stderr)
-            return 1
-
-        print(fmter.get_style_defs(a_opt or ''))
-        return 0
-
-    # if no -S is given, -a is not allowed
-    if argns.a is not None:
-        parser.print_help(sys.stderr)
-        return 2
-
-    # parse -F options
-    F_opts = _parse_filters(argns.F or [])
-
-    # -x: allow custom (eXternal) lexers and formatters
-    allow_custom_lexer_formatter = bool(argns.x)
-
-    # select lexer
-    lexer = None
-
-    # given by name?
-    lexername = argns.l
-    if lexername:
-        # custom lexer, located relative to user's cwd
-        if allow_custom_lexer_formatter and '.py' in lexername:
-            try:
-                filename = None
-                name = None
-                if ':' in lexername:
-                    filename, name = lexername.rsplit(':', 1)
-
-                    if '.py' in name:
-                        # This can happen on Windows: If the lexername is
-                        # C:\lexer.py -- return to normal load path in that case
-                        name = None
-
-                if filename and name:
-                    lexer = load_lexer_from_file(filename, name,
-                                                 **parsed_opts)
-                else:
-                    lexer = load_lexer_from_file(lexername, **parsed_opts)
-            except ClassNotFound as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-        else:
-            try:
-                lexer = get_lexer_by_name(lexername, **parsed_opts)
-            except (OptionError, ClassNotFound) as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-
-    # read input code
-    code = None
-
-    if argns.INPUTFILE:
-        if argns.s:
-            print('Error: -s option not usable when input file specified',
-                  file=sys.stderr)
-            return 2
-
-        infn = argns.INPUTFILE
-        try:
-            with open(infn, 'rb') as infp:
-                code = infp.read()
-        except Exception as err:
-            print('Error: cannot read infile:', err, file=sys.stderr)
-            return 1
-        if not inencoding:
-            code, inencoding = guess_decode(code)
-
-        # do we have to guess the lexer?
-        if not lexer:
-            try:
-                lexer = get_lexer_for_filename(infn, code, **parsed_opts)
-            except ClassNotFound as err:
-                if argns.g:
-                    try:
-                        lexer = guess_lexer(code, **parsed_opts)
-                    except ClassNotFound:
-                        lexer = TextLexer(**parsed_opts)
-                else:
-                    print('Error:', err, file=sys.stderr)
-                    return 1
-            except OptionError as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-
-    elif not argns.s:  # treat stdin as full file (-s support is later)
-        # read code from terminal, always in binary mode since we want to
-        # decode ourselves and be tolerant with it
-        code = sys.stdin.buffer.read()  # use .buffer to get a binary stream
-        if not inencoding:
-            code, inencoding = guess_decode_from_terminal(code, sys.stdin)
-            # else the lexer will do the decoding
-        if not lexer:
-            try:
-                lexer = guess_lexer(code, **parsed_opts)
-            except ClassNotFound:
-                lexer = TextLexer(**parsed_opts)
-
-    else:  # -s option needs a lexer with -l
-        if not lexer:
-            print('Error: when using -s a lexer has to be selected with -l',
-                  file=sys.stderr)
-            return 2
-
-    # process filters
-    for fname, fopts in F_opts:
-        try:
-            lexer.add_filter(fname, **fopts)
-        except ClassNotFound as err:
-            print('Error:', err, file=sys.stderr)
-            return 1
-
-    # select formatter
-    outfn = argns.o
-    fmter = argns.f
-    if fmter:
-        # custom formatter, located relative to user's cwd
-        if allow_custom_lexer_formatter and '.py' in fmter:
-            try:
-                filename = None
-                name = None
-                if ':' in fmter:
-                    # Same logic as above for custom lexer
-                    filename, name = fmter.rsplit(':', 1)
-
-                    if '.py' in name:
-                        name = None
-
-                if filename and name:
-                    fmter = load_formatter_from_file(filename, name,
-                                                     **parsed_opts)
-                else:
-                    fmter = load_formatter_from_file(fmter, **parsed_opts)
-            except ClassNotFound as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-        else:
-            try:
-                fmter = get_formatter_by_name(fmter, **parsed_opts)
-            except (OptionError, ClassNotFound) as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-
-    if outfn:
-        if not fmter:
-            try:
-                fmter = get_formatter_for_filename(outfn, **parsed_opts)
-            except (OptionError, ClassNotFound) as err:
-                print('Error:', err, file=sys.stderr)
-                return 1
-        try:
-            outfile = open(outfn, 'wb')
-        except Exception as err:
-            print('Error: cannot open outfile:', err, file=sys.stderr)
-            return 1
-    else:
-        if not fmter:
-            if os.environ.get('COLORTERM','') in ('truecolor', '24bit'):
-                fmter = TerminalTrueColorFormatter(**parsed_opts)
-            elif '256' in os.environ.get('TERM', ''):
-                fmter = Terminal256Formatter(**parsed_opts)
-            else:
-                fmter = TerminalFormatter(**parsed_opts)
-        outfile = sys.stdout.buffer
-
-    # determine output encoding if not explicitly selected
-    if not outencoding:
-        if outfn:
-            # output file? use lexer encoding for now (can still be None)
-            fmter.encoding = inencoding
-        else:
-            # else use terminal encoding
-            fmter.encoding = terminal_encoding(sys.stdout)
-
-    # provide coloring under Windows, if possible
-    if not outfn and sys.platform in ('win32', 'cygwin') and \
-       fmter.name in ('Terminal', 'Terminal256'):  # pragma: no cover
-        # unfortunately colorama doesn't support binary streams on Py3
-        outfile = UnclosingTextIOWrapper(outfile, encoding=fmter.encoding)
-        fmter.encoding = None
-        try:
-            import colorama.initialise
-        except ImportError:
-            pass
-        else:
-            outfile = colorama.initialise.wrap_stream(
-                outfile, convert=None, strip=None, autoreset=False, wrap=True)
-
-    # When using the LaTeX formatter and the option `escapeinside` is
-    # specified, we need a special lexer which collects escaped text
-    # before running the chosen language lexer.
-    escapeinside = parsed_opts.get('escapeinside', '')
-    if len(escapeinside) == 2 and isinstance(fmter, LatexFormatter):
-        left = escapeinside[0]
-        right = escapeinside[1]
-        lexer = LatexEmbeddedLexer(left, right, lexer)
-
-    # ... and do it!
-    if not argns.s:
-        # process whole input as per normal...
-        try:
-            highlight(code, lexer, fmter, outfile)
-        finally:
-            if outfn:
-                outfile.close()
-        return 0
-    else:
-        # line by line processing of stdin (eg: for 'tail -f')...
-        try:
-            while 1:
-                line = sys.stdin.buffer.readline()
-                if not line:
-                    break
-                if not inencoding:
-                    line = guess_decode_from_terminal(line, sys.stdin)[0]
-                highlight(line, lexer, fmter, outfile)
-                if hasattr(outfile, 'flush'):
-                    outfile.flush()
-            return 0
-        except KeyboardInterrupt:  # pragma: no cover
-            return 0
-        finally:
-            if outfn:
-                outfile.close()
-
-
-class HelpFormatter(argparse.HelpFormatter):
-    def __init__(self, prog, indent_increment=2, max_help_position=16, width=None):
-        if width is None:
-            try:
-                width = shutil.get_terminal_size().columns - 2
-            except Exception:
-                pass
-        argparse.HelpFormatter.__init__(self, prog, indent_increment,
-                                        max_help_position, width)
-
-
-def main(args=sys.argv):
-    """
-    Main command line entry point.
-    """
-    desc = "Highlight an input file and write the result to an output file."
-    parser = argparse.ArgumentParser(description=desc, add_help=False,
-                                     formatter_class=HelpFormatter)
-
-    operation = parser.add_argument_group('Main operation')
-    lexersel = operation.add_mutually_exclusive_group()
-    lexersel.add_argument(
-        '-l', metavar='LEXER',
-        help='Specify the lexer to use.  (Query names with -L.)  If not '
-        'given and -g is not present, the lexer is guessed from the filename.')
-    lexersel.add_argument(
-        '-g', action='store_true',
-        help='Guess the lexer from the file contents, or pass through '
-        'as plain text if nothing can be guessed.')
-    operation.add_argument(
-        '-F', metavar='FILTER[:options]', action='append',
-        help='Add a filter to the token stream.  (Query names with -L.) '
-        'Filter options are given after a colon if necessary.')
-    operation.add_argument(
-        '-f', metavar='FORMATTER',
-        help='Specify the formatter to use.  (Query names with -L.) '
-        'If not given, the formatter is guessed from the output filename, '
-        'and defaults to the terminal formatter if the output is to the '
-        'terminal or an unknown file extension.')
-    operation.add_argument(
-        '-O', metavar='OPTION=value[,OPTION=value,...]', action='append',
-        help='Give options to the lexer and formatter as a comma-separated '
-        'list of key-value pairs. '
-        'Example: `-O bg=light,python=cool`.')
-    operation.add_argument(
-        '-P', metavar='OPTION=value', action='append',
-        help='Give a single option to the lexer and formatter - with this '
-        'you can pass options whose value contains commas and equal signs. '
-        'Example: `-P "heading=Pygments, the Python highlighter"`.')
-    operation.add_argument(
-        '-o', metavar='OUTPUTFILE',
-        help='Where to write the output.  Defaults to standard output.')
-
-    operation.add_argument(
-        'INPUTFILE', nargs='?',
-        help='Where to read the input.  Defaults to standard input.')
-
-    flags = parser.add_argument_group('Operation flags')
-    flags.add_argument(
-        '-v', action='store_true',
-        help='Print a detailed traceback on unhandled exceptions, which '
-        'is useful for debugging and bug reports.')
-    flags.add_argument(
-        '-s', action='store_true',
-        help='Process lines one at a time until EOF, rather than waiting to '
-        'process the entire file.  This only works for stdin, only for lexers '
-        'with no line-spanning constructs, and is intended for streaming '
-        'input such as you get from `tail -f`. '
-        'Example usage: `tail -f sql.log | pygmentize -s -l sql`.')
-    flags.add_argument(
-        '-x', action='store_true',
-        help='Allow custom lexers and formatters to be loaded from a .py file '
-        'relative to the current working directory. For example, '
-        '`-l ./customlexer.py -x`. By default, this option expects a file '
-        'with a class named CustomLexer or CustomFormatter; you can also '
-        'specify your own class name with a colon (`-l ./lexer.py:MyLexer`). '
-        'Users should be very careful not to use this option with untrusted '
-        'files, because it will import and run them.')
-    flags.add_argument('--json', help='Output as JSON. This can '
-        'be only used in conjunction with -L.',
-        default=False,
-        action='store_true')
-
-    special_modes_group = parser.add_argument_group(
-        'Special modes - do not do any highlighting')
-    special_modes = special_modes_group.add_mutually_exclusive_group()
-    special_modes.add_argument(
-        '-S', metavar='STYLE -f formatter',
-        help='Print style definitions for STYLE for a formatter '
-        'given with -f. The argument given by -a is formatter '
-        'dependent.')
-    special_modes.add_argument(
-        '-L', nargs='*', metavar='WHAT',
-        help='List lexers, formatters, styles or filters -- '
-        'give additional arguments for the thing(s) you want to list '
-        '(e.g. "styles"), or omit them to list everything.')
-    special_modes.add_argument(
-        '-N', metavar='FILENAME',
-        help='Guess and print out a lexer name based solely on the given '
-        'filename. Does not take input or highlight anything. If no specific '
-        'lexer can be determined, "text" is printed.')
-    special_modes.add_argument(
-        '-C', action='store_true',
-        help='Like -N, but print out a lexer name based solely on '
-        'a given content from standard input.')
-    special_modes.add_argument(
-        '-H', action='store', nargs=2, metavar=('NAME', 'TYPE'),
-        help='Print detailed help for the object  of type , '
-        'where  is one of "lexer", "formatter" or "filter".')
-    special_modes.add_argument(
-        '-V', action='store_true',
-        help='Print the package version.')
-    special_modes.add_argument(
-        '-h', '--help', action='store_true',
-        help='Print this help.')
-    special_modes_group.add_argument(
-        '-a', metavar='ARG',
-        help='Formatter-specific additional argument for the -S (print '
-        'style sheet) mode.')
-
-    argns = parser.parse_args(args[1:])
-
-    try:
-        return main_inner(parser, argns)
-    except BrokenPipeError:
-        # someone closed our stdout, e.g. by quitting a pager.
-        return 0
-    except Exception:
-        if argns.v:
-            print(file=sys.stderr)
-            print('*' * 65, file=sys.stderr)
-            print('An unhandled exception occurred while highlighting.',
-                  file=sys.stderr)
-            print('Please report the whole traceback to the issue tracker at',
-                  file=sys.stderr)
-            print('.',
-                  file=sys.stderr)
-            print('*' * 65, file=sys.stderr)
-            print(file=sys.stderr)
-            raise
-        import traceback
-        info = traceback.format_exception(*sys.exc_info())
-        msg = info[-1].strip()
-        if len(info) >= 3:
-            # extract relevant file and position info
-            msg += '\n   (f{})'.format(info[-2].split('\n')[0].strip()[1:])
-        print(file=sys.stderr)
-        print('*** Error while highlighting:', file=sys.stderr)
-        print(msg, file=sys.stderr)
-        print('*** If this is a bug you want to report, please rerun with -v.',
-              file=sys.stderr)
-        return 1
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py
deleted file mode 100644
index 4c1a062..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-    pygments.console
-    ~~~~~~~~~~~~~~~~
-
-    Format colored console output.
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-
-esc = "\x1b["
-
-codes = {}
-codes[""] = ""
-codes["reset"] = esc + "39;49;00m"
-
-codes["bold"] = esc + "01m"
-codes["faint"] = esc + "02m"
-codes["standout"] = esc + "03m"
-codes["underline"] = esc + "04m"
-codes["blink"] = esc + "05m"
-codes["overline"] = esc + "06m"
-
-dark_colors = ["black", "red", "green", "yellow", "blue",
-               "magenta", "cyan", "gray"]
-light_colors = ["brightblack", "brightred", "brightgreen", "brightyellow", "brightblue",
-                "brightmagenta", "brightcyan", "white"]
-
-x = 30
-for dark, light in zip(dark_colors, light_colors):
-    codes[dark] = esc + "%im" % x
-    codes[light] = esc + "%im" % (60 + x)
-    x += 1
-
-del dark, light, x
-
-codes["white"] = codes["bold"]
-
-
-def reset_color():
-    return codes["reset"]
-
-
-def colorize(color_key, text):
-    return codes[color_key] + text + codes["reset"]
-
-
-def ansiformat(attr, text):
-    """
-    Format ``text`` with a color and/or some attributes::
-
-        color       normal color
-        *color*     bold color
-        _color_     underlined color
-        +color+     blinking color
-    """
-    result = []
-    if attr[:1] == attr[-1:] == '+':
-        result.append(codes['blink'])
-        attr = attr[1:-1]
-    if attr[:1] == attr[-1:] == '*':
-        result.append(codes['bold'])
-        attr = attr[1:-1]
-    if attr[:1] == attr[-1:] == '_':
-        result.append(codes['underline'])
-        attr = attr[1:-1]
-    result.append(codes[attr])
-    result.append(text)
-    result.append(codes['reset'])
-    return ''.join(result)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py
deleted file mode 100644
index aa6f760..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-    pygments.filter
-    ~~~~~~~~~~~~~~~
-
-    Module that implements the default filter.
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-
-
-def apply_filters(stream, filters, lexer=None):
-    """
-    Use this method to apply an iterable of filters to
-    a stream. If lexer is given it's forwarded to the
-    filter, otherwise the filter receives `None`.
-    """
-    def _apply(filter_, stream):
-        yield from filter_.filter(lexer, stream)
-    for filter_ in filters:
-        stream = _apply(filter_, stream)
-    return stream
-
-
-def simplefilter(f):
-    """
-    Decorator that converts a function into a filter::
-
-        @simplefilter
-        def lowercase(self, lexer, stream, options):
-            for ttype, value in stream:
-                yield ttype, value.lower()
-    """
-    return type(f.__name__, (FunctionFilter,), {
-        '__module__': getattr(f, '__module__'),
-        '__doc__': f.__doc__,
-        'function': f,
-    })
-
-
-class Filter:
-    """
-    Default filter. Subclass this class or use the `simplefilter`
-    decorator to create own filters.
-    """
-
-    def __init__(self, **options):
-        self.options = options
-
-    def filter(self, lexer, stream):
-        raise NotImplementedError()
-
-
-class FunctionFilter(Filter):
-    """
-    Abstract class used by `simplefilter` to create simple
-    function filters on the fly. The `simplefilter` decorator
-    automatically creates subclasses of this class for
-    functions passed to it.
-    """
-    function = None
-
-    def __init__(self, **options):
-        if not hasattr(self, 'function'):
-            raise TypeError(f'{self.__class__.__name__!r} used without bound function')
-        Filter.__init__(self, **options)
-
-    def filter(self, lexer, stream):
-        # pylint: disable=not-callable
-        yield from self.function(lexer, stream, self.options)
diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py
deleted file mode 100644
index 9255ca2..0000000
--- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py
+++ /dev/null
@@ -1,940 +0,0 @@
-"""
-    pygments.filters
-    ~~~~~~~~~~~~~~~~
-
-    Module containing filter lookup functions and default
-    filters.
-
-    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
-"""
-
-import re
-
-from pip._vendor.pygments.token import String, Comment, Keyword, Name, Error, Whitespace, \
-    string_to_tokentype
-from pip._vendor.pygments.filter import Filter
-from pip._vendor.pygments.util import get_list_opt, get_int_opt, get_bool_opt, \
-    get_choice_opt, ClassNotFound, OptionError
-from pip._vendor.pygments.plugin import find_plugin_filters
-
-
-def find_filter_class(filtername):
-    """Lookup a filter by name. Return None if not found."""
-    if filtername in FILTERS:
-        return FILTERS[filtername]
-    for name, cls in find_plugin_filters():
-        if name == filtername:
-            return cls
-    return None
-
-
-def get_filter_by_name(filtername, **options):
-    """Return an instantiated filter.
-
-    Options are passed to the filter initializer if wanted.
-    Raise a ClassNotFound if not found.
-    """
-    cls = find_filter_class(filtername)
-    if cls:
-        return cls(**options)
-    else:
-        raise ClassNotFound(f'filter {filtername!r} not found')
-
-
-def get_all_filters():
-    """Return a generator of all filter names."""
-    yield from FILTERS
-    for name, _ in find_plugin_filters():
-        yield name
-
-
-def _replace_special(ttype, value, regex, specialttype,
-                     replacefunc=lambda x: x):
-    last = 0
-    for match in regex.finditer(value):
-        start, end = match.start(), match.end()
-        if start != last:
-            yield ttype, value[last:start]
-        yield specialttype, replacefunc(value[start:end])
-        last = end
-    if last != len(value):
-        yield ttype, value[last:]
-
-
-class CodeTagFilter(Filter):
-    """Highlight special code tags in comments and docstrings.
-
-    Options accepted:
-
-    `codetags` : list of strings
-       A list of strings that are flagged as code tags.  The default is to
-       highlight ``XXX``, ``TODO``, ``FIXME``, ``BUG`` and ``NOTE``.
-
-    .. versionchanged:: 2.13
-       Now recognizes ``FIXME`` by default.
-    """
-
-    def __init__(self, **options):
-        Filter.__init__(self, **options)
-        tags = get_list_opt(options, 'codetags',
-                            ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE'])
-        self.tag_re = re.compile(r'\b({})\b'.format('|'.join([
-            re.escape(tag) for tag in tags if tag
-        ])))
-
-    def filter(self, lexer, stream):
-        regex = self.tag_re
-        for ttype, value in stream:
-            if ttype in String.Doc or \
-               ttype in Comment and \
-               ttype not in Comment.Preproc:
-                yield from _replace_special(ttype, value, regex, Comment.Special)
-            else:
-                yield ttype, value
-
-
-class SymbolFilter(Filter):
-    """Convert mathematical symbols such as \\ in Isabelle
-    or \\longrightarrow in LaTeX into Unicode characters.
-
-    This is mostly useful for HTML or console output when you want to
-    approximate the source rendering you'd see in an IDE.
-
-    Options accepted:
-
-    `lang` : string
-       The symbol language. Must be one of ``'isabelle'`` or
-       ``'latex'``.  The default is ``'isabelle'``.
-    """
-
-    latex_symbols = {
-        '\\alpha'                : '\U000003b1',
-        '\\beta'                 : '\U000003b2',
-        '\\gamma'                : '\U000003b3',
-        '\\delta'                : '\U000003b4',
-        '\\varepsilon'           : '\U000003b5',
-        '\\zeta'                 : '\U000003b6',
-        '\\eta'                  : '\U000003b7',
-        '\\vartheta'             : '\U000003b8',
-        '\\iota'                 : '\U000003b9',
-        '\\kappa'                : '\U000003ba',
-        '\\lambda'               : '\U000003bb',
-        '\\mu'                   : '\U000003bc',
-        '\\nu'                   : '\U000003bd',
-        '\\xi'                   : '\U000003be',
-        '\\pi'                   : '\U000003c0',
-        '\\varrho'               : '\U000003c1',
-        '\\sigma'                : '\U000003c3',
-        '\\tau'                  : '\U000003c4',
-        '\\upsilon'              : '\U000003c5',
-        '\\varphi'               : '\U000003c6',
-        '\\chi'                  : '\U000003c7',
-        '\\psi'                  : '\U000003c8',
-        '\\omega'                : '\U000003c9',
-        '\\Gamma'                : '\U00000393',
-        '\\Delta'                : '\U00000394',
-        '\\Theta'                : '\U00000398',
-        '\\Lambda'               : '\U0000039b',
-        '\\Xi'                   : '\U0000039e',
-        '\\Pi'                   : '\U000003a0',
-        '\\Sigma'                : '\U000003a3',
-        '\\Upsilon'              : '\U000003a5',
-        '\\Phi'                  : '\U000003a6',
-        '\\Psi'                  : '\U000003a8',
-        '\\Omega'                : '\U000003a9',
-        '\\leftarrow'            : '\U00002190',
-        '\\longleftarrow'        : '\U000027f5',
-        '\\rightarrow'           : '\U00002192',
-        '\\longrightarrow'       : '\U000027f6',
-        '\\Leftarrow'            : '\U000021d0',
-        '\\Longleftarrow'        : '\U000027f8',
-        '\\Rightarrow'           : '\U000021d2',
-        '\\Longrightarrow'       : '\U000027f9',
-        '\\leftrightarrow'       : '\U00002194',
-        '\\longleftrightarrow'   : '\U000027f7',
-        '\\Leftrightarrow'       : '\U000021d4',
-        '\\Longleftrightarrow'   : '\U000027fa',
-        '\\mapsto'               : '\U000021a6',
-        '\\longmapsto'           : '\U000027fc',
-        '\\relbar'               : '\U00002500',
-        '\\Relbar'               : '\U00002550',
-        '\\hookleftarrow'        : '\U000021a9',
-        '\\hookrightarrow'       : '\U000021aa',
-        '\\leftharpoondown'      : '\U000021bd',
-        '\\rightharpoondown'     : '\U000021c1',
-        '\\leftharpoonup'        : '\U000021bc',
-        '\\rightharpoonup'       : '\U000021c0',
-        '\\rightleftharpoons'    : '\U000021cc',
-        '\\leadsto'              : '\U0000219d',
-        '\\downharpoonleft'      : '\U000021c3',
-        '\\downharpoonright'     : '\U000021c2',
-        '\\upharpoonleft'        : '\U000021bf',
-        '\\upharpoonright'       : '\U000021be',
-        '\\restriction'          : '\U000021be',
-        '\\uparrow'              : '\U00002191',
-        '\\Uparrow'              : '\U000021d1',
-        '\\downarrow'            : '\U00002193',
-        '\\Downarrow'            : '\U000021d3',
-        '\\updownarrow'          : '\U00002195',
-        '\\Updownarrow'          : '\U000021d5',
-        '\\langle'               : '\U000027e8',
-        '\\rangle'               : '\U000027e9',
-        '\\lceil'                : '\U00002308',
-        '\\rceil'                : '\U00002309',
-        '\\lfloor'               : '\U0000230a',
-        '\\rfloor'               : '\U0000230b',
-        '\\flqq'                 : '\U000000ab',
-        '\\frqq'                 : '\U000000bb',
-        '\\bot'                  : '\U000022a5',
-        '\\top'                  : '\U000022a4',
-        '\\wedge'                : '\U00002227',
-        '\\bigwedge'             : '\U000022c0',
-        '\\vee'                  : '\U00002228',
-        '\\bigvee'               : '\U000022c1',
-        '\\forall'               : '\U00002200',
-        '\\exists'               : '\U00002203',
-        '\\nexists'              : '\U00002204',
-        '\\neg'                  : '\U000000ac',
-        '\\Box'                  : '\U000025a1',
-        '\\Diamond'              : '\U000025c7',
-        '\\vdash'                : '\U000022a2',
-        '\\models'               : '\U000022a8',
-        '\\dashv'                : '\U000022a3',
-        '\\surd'                 : '\U0000221a',
-        '\\le'                   : '\U00002264',
-        '\\ge'                   : '\U00002265',
-        '\\ll'                   : '\U0000226a',
-        '\\gg'                   : '\U0000226b',
-        '\\lesssim'              : '\U00002272',
-        '\\gtrsim'               : '\U00002273',
-        '\\lessapprox'           : '\U00002a85',
-        '\\gtrapprox'            : '\U00002a86',
-        '\\in'                   : '\U00002208',
-        '\\notin'                : '\U00002209',
-        '\\subset'               : '\U00002282',
-        '\\supset'               : '\U00002283',
-        '\\subseteq'             : '\U00002286',
-        '\\supseteq'             : '\U00002287',
-        '\\sqsubset'             : '\U0000228f',
-        '\\sqsupset'             : '\U00002290',
-        '\\sqsubseteq'           : '\U00002291',
-        '\\sqsupseteq'           : '\U00002292',
-        '\\cap'                  : '\U00002229',
-        '\\bigcap'               : '\U000022c2',
-        '\\cup'                  : '\U0000222a',
-        '\\bigcup'               : '\U000022c3',
-        '\\sqcup'                : '\U00002294',
-        '\\bigsqcup'             : '\U00002a06',
-        '\\sqcap'                : '\U00002293',
-        '\\Bigsqcap'             : '\U00002a05',
-        '\\setminus'             : '\U00002216',
-        '\\propto'               : '\U0000221d',
-        '\\uplus'                : '\U0000228e',
-        '\\bigplus'              : '\U00002a04',
-        '\\sim'                  : '\U0000223c',
-        '\\doteq'                : '\U00002250',
-        '\\simeq'                : '\U00002243',
-        '\\approx'               : '\U00002248',
-        '\\asymp'                : '\U0000224d',
-        '\\cong'                 : '\U00002245',
-        '\\equiv'                : '\U00002261',
-        '\\Join'                 : '\U000022c8',
-        '\\bowtie'               : '\U00002a1d',
-        '\\prec'                 : '\U0000227a',
-        '\\succ'                 : '\U0000227b',
-        '\\preceq'               : '\U0000227c',
-        '\\succeq'               : '\U0000227d',
-        '\\parallel'             : '\U00002225',
-        '\\mid'                  : '\U000000a6',
-        '\\pm'                   : '\U000000b1',
-        '\\mp'                   : '\U00002213',
-        '\\times'                : '\U000000d7',
-        '\\div'                  : '\U000000f7',
-        '\\cdot'                 : '\U000022c5',
-        '\\star'                 : '\U000022c6',
-        '\\circ'                 : '\U00002218',
-        '\\dagger'               : '\U00002020',
-        '\\ddagger'              : '\U00002021',
-        '\\lhd'                  : '\U000022b2',
-        '\\rhd'                  : '\U000022b3',
-        '\\unlhd'                : '\U000022b4',
-        '\\unrhd'                : '\U000022b5',
-        '\\triangleleft'         : '\U000025c3',
-        '\\triangleright'        : '\U000025b9',
-        '\\triangle'             : '\U000025b3',
-        '\\triangleq'            : '\U0000225c',
-        '\\oplus'                : '\U00002295',
-        '\\bigoplus'             : '\U00002a01',
-        '\\otimes'               : '\U00002297',
-        '\\bigotimes'            : '\U00002a02',
-        '\\odot'                 : '\U00002299',
-        '\\bigodot'              : '\U00002a00',
-        '\\ominus'               : '\U00002296',
-        '\\oslash'               : '\U00002298',
-        '\\dots'                 : '\U00002026',
-        '\\cdots'                : '\U000022ef',
-        '\\sum'                  : '\U00002211',
-        '\\prod'                 : '\U0000220f',
-        '\\coprod'               : '\U00002210',
-        '\\infty'                : '\U0000221e',
-        '\\int'                  : '\U0000222b',
-        '\\oint'                 : '\U0000222e',
-        '\\clubsuit'             : '\U00002663',
-        '\\diamondsuit'          : '\U00002662',
-        '\\heartsuit'            : '\U00002661',
-        '\\spadesuit'            : '\U00002660',
-        '\\aleph'                : '\U00002135',
-        '\\emptyset'             : '\U00002205',
-        '\\nabla'                : '\U00002207',
-        '\\partial'              : '\U00002202',
-        '\\flat'                 : '\U0000266d',
-        '\\natural'              : '\U0000266e',
-        '\\sharp'                : '\U0000266f',
-        '\\angle'                : '\U00002220',
-        '\\copyright'            : '\U000000a9',
-        '\\textregistered'       : '\U000000ae',
-        '\\textonequarter'       : '\U000000bc',
-        '\\textonehalf'          : '\U000000bd',
-        '\\textthreequarters'    : '\U000000be',
-        '\\textordfeminine'      : '\U000000aa',
-        '\\textordmasculine'     : '\U000000ba',
-        '\\euro'                 : '\U000020ac',
-        '\\pounds'               : '\U000000a3',
-        '\\yen'                  : '\U000000a5',
-        '\\textcent'             : '\U000000a2',
-        '\\textcurrency'         : '\U000000a4',
-        '\\textdegree'           : '\U000000b0',
-    }
-
-    isabelle_symbols = {
-        '\\'                 : '\U0001d7ec',
-        '\\'                  : '\U0001d7ed',
-        '\\'                  : '\U0001d7ee',
-        '\\'                : '\U0001d7ef',
-        '\\'                 : '\U0001d7f0',
-        '\\'                 : '\U0001d7f1',
-        '\\'                  : '\U0001d7f2',
-        '\\'                : '\U0001d7f3',
-        '\\'                : '\U0001d7f4',
-        '\\'                 : '\U0001d7f5',
-        '\\'                    : '\U0001d49c',
-        '\\'                    : '\U0000212c',
-        '\\'                    : '\U0001d49e',
-        '\\'                    : '\U0001d49f',
-        '\\'                    : '\U00002130',
-        '\\'                    : '\U00002131',
-        '\\'                    : '\U0001d4a2',
-        '\\'                    : '\U0000210b',
-        '\\'                    : '\U00002110',
-        '\\'                    : '\U0001d4a5',
-        '\\'                    : '\U0001d4a6',
-        '\\'                    : '\U00002112',
-        '\\'                    : '\U00002133',
-        '\\'                    : '\U0001d4a9',
-        '\\'                    : '\U0001d4aa',
-        '\\

' : '\U0001d5c9', - '\\' : '\U0001d5ca', - '\\' : '\U0001d5cb', - '\\' : '\U0001d5cc', - '\\' : '\U0001d5cd', - '\\' : '\U0001d5ce', - '\\' : '\U0001d5cf', - '\\' : '\U0001d5d0', - '\\' : '\U0001d5d1', - '\\' : '\U0001d5d2', - '\\' : '\U0001d5d3', - '\\' : '\U0001d504', - '\\' : '\U0001d505', - '\\' : '\U0000212d', - '\\

' : '\U0001d507', - '\\' : '\U0001d508', - '\\' : '\U0001d509', - '\\' : '\U0001d50a', - '\\' : '\U0000210c', - '\\' : '\U00002111', - '\\' : '\U0001d50d', - '\\' : '\U0001d50e', - '\\' : '\U0001d50f', - '\\' : '\U0001d510', - '\\' : '\U0001d511', - '\\' : '\U0001d512', - '\\' : '\U0001d513', - '\\' : '\U0001d514', - '\\' : '\U0000211c', - '\\' : '\U0001d516', - '\\' : '\U0001d517', - '\\' : '\U0001d518', - '\\' : '\U0001d519', - '\\' : '\U0001d51a', - '\\' : '\U0001d51b', - '\\' : '\U0001d51c', - '\\' : '\U00002128', - '\\' : '\U0001d51e', - '\\' : '\U0001d51f', - '\\' : '\U0001d520', - '\\

' : '\U0001d4ab', - '\\' : '\U0001d4ac', - '\\' : '\U0000211b', - '\\' : '\U0001d4ae', - '\\' : '\U0001d4af', - '\\' : '\U0001d4b0', - '\\' : '\U0001d4b1', - '\\' : '\U0001d4b2', - '\\' : '\U0001d4b3', - '\\' : '\U0001d4b4', - '\\' : '\U0001d4b5', - '\\' : '\U0001d5ba', - '\\' : '\U0001d5bb', - '\\' : '\U0001d5bc', - '\\' : '\U0001d5bd', - '\\' : '\U0001d5be', - '\\' : '\U0001d5bf', - '\\' : '\U0001d5c0', - '\\' : '\U0001d5c1', - '\\' : '\U0001d5c2', - '\\' : '\U0001d5c3', - '\\' : '\U0001d5c4', - '\\' : '\U0001d5c5', - '\\' : '\U0001d5c6', - '\\' : '\U0001d5c7', - '\\' : '\U0001d5c8', - '\\

' : '\U0001d521', - '\\' : '\U0001d522', - '\\' : '\U0001d523', - '\\' : '\U0001d524', - '\\' : '\U0001d525', - '\\' : '\U0001d526', - '\\' : '\U0001d527', - '\\' : '\U0001d528', - '\\' : '\U0001d529', - '\\' : '\U0001d52a', - '\\' : '\U0001d52b', - '\\' : '\U0001d52c', - '\\' : '\U0001d52d', - '\\' : '\U0001d52e', - '\\' : '\U0001d52f', - '\\' : '\U0001d530', - '\\' : '\U0001d531', - '\\' : '\U0001d532', - '\\' : '\U0001d533', - '\\' : '\U0001d534', - '\\' : '\U0001d535', - '\\' : '\U0001d536', - '\\' : '\U0001d537', - '\\' : '\U000003b1', - '\\' : '\U000003b2', - '\\' : '\U000003b3', - '\\' : '\U000003b4', - '\\' : '\U000003b5', - '\\' : '\U000003b6', - '\\' : '\U000003b7', - '\\' : '\U000003b8', - '\\' : '\U000003b9', - '\\' : '\U000003ba', - '\\' : '\U000003bb', - '\\' : '\U000003bc', - '\\' : '\U000003bd', - '\\' : '\U000003be', - '\\' : '\U000003c0', - '\\' : '\U000003c1', - '\\' : '\U000003c3', - '\\' : '\U000003c4', - '\\' : '\U000003c5', - '\\' : '\U000003c6', - '\\' : '\U000003c7', - '\\' : '\U000003c8', - '\\' : '\U000003c9', - '\\' : '\U00000393', - '\\' : '\U00000394', - '\\' : '\U00000398', - '\\' : '\U0000039b', - '\\' : '\U0000039e', - '\\' : '\U000003a0', - '\\' : '\U000003a3', - '\\' : '\U000003a5', - '\\' : '\U000003a6', - '\\' : '\U000003a8', - '\\' : '\U000003a9', - '\\' : '\U0001d539', - '\\' : '\U00002102', - '\\' : '\U00002115', - '\\' : '\U0000211a', - '\\' : '\U0000211d', - '\\' : '\U00002124', - '\\' : '\U00002190', - '\\' : '\U000027f5', - '\\' : '\U00002192', - '\\' : '\U000027f6', - '\\' : '\U000021d0', - '\\' : '\U000027f8', - '\\' : '\U000021d2', - '\\' : '\U000027f9', - '\\' : '\U00002194', - '\\' : '\U000027f7', - '\\' : '\U000021d4', - '\\' : '\U000027fa', - '\\' : '\U000021a6', - '\\' : '\U000027fc', - '\\' : '\U00002500', - '\\' : '\U00002550', - '\\' : '\U000021a9', - '\\' : '\U000021aa', - '\\' : '\U000021bd', - '\\' : '\U000021c1', - '\\' : '\U000021bc', - '\\' : '\U000021c0', - '\\' : '\U000021cc', - '\\' : '\U0000219d', - '\\' : '\U000021c3', - '\\' : '\U000021c2', - '\\' : '\U000021bf', - '\\' : '\U000021be', - '\\' : '\U000021be', - '\\' : '\U00002237', - '\\' : '\U00002191', - '\\' : '\U000021d1', - '\\' : '\U00002193', - '\\' : '\U000021d3', - '\\' : '\U00002195', - '\\' : '\U000021d5', - '\\' : '\U000027e8', - '\\' : '\U000027e9', - '\\' : '\U00002308', - '\\' : '\U00002309', - '\\' : '\U0000230a', - '\\' : '\U0000230b', - '\\' : '\U00002987', - '\\' : '\U00002988', - '\\' : '\U000027e6', - '\\' : '\U000027e7', - '\\' : '\U00002983', - '\\' : '\U00002984', - '\\' : '\U000000ab', - '\\' : '\U000000bb', - '\\' : '\U000022a5', - '\\' : '\U000022a4', - '\\' : '\U00002227', - '\\' : '\U000022c0', - '\\' : '\U00002228', - '\\' : '\U000022c1', - '\\' : '\U00002200', - '\\' : '\U00002203', - '\\' : '\U00002204', - '\\' : '\U000000ac', - '\\' : '\U000025a1', - '\\' : '\U000025c7', - '\\' : '\U000022a2', - '\\' : '\U000022a8', - '\\' : '\U000022a9', - '\\' : '\U000022ab', - '\\' : '\U000022a3', - '\\' : '\U0000221a', - '\\' : '\U00002264', - '\\' : '\U00002265', - '\\' : '\U0000226a', - '\\' : '\U0000226b', - '\\' : '\U00002272', - '\\' : '\U00002273', - '\\' : '\U00002a85', - '\\' : '\U00002a86', - '\\' : '\U00002208', - '\\' : '\U00002209', - '\\' : '\U00002282', - '\\' : '\U00002283', - '\\' : '\U00002286', - '\\' : '\U00002287', - '\\' : '\U0000228f', - '\\' : '\U00002290', - '\\' : '\U00002291', - '\\' : '\U00002292', - '\\' : '\U00002229', - '\\' : '\U000022c2', - '\\' : '\U0000222a', - '\\' : '\U000022c3', - '\\' : '\U00002294', - '\\' : '\U00002a06', - '\\' : '\U00002293', - '\\' : '\U00002a05', - '\\' : '\U00002216', - '\\' : '\U0000221d', - '\\' : '\U0000228e', - '\\' : '\U00002a04', - '\\' : '\U00002260', - '\\' : '\U0000223c', - '\\' : '\U00002250', - '\\' : '\U00002243', - '\\' : '\U00002248', - '\\' : '\U0000224d', - '\\' : '\U00002245', - '\\' : '\U00002323', - '\\' : '\U00002261', - '\\' : '\U00002322', - '\\' : '\U000022c8', - '\\' : '\U00002a1d', - '\\' : '\U0000227a', - '\\' : '\U0000227b', - '\\' : '\U0000227c', - '\\' : '\U0000227d', - '\\' : '\U00002225', - '\\' : '\U000000a6', - '\\' : '\U000000b1', - '\\' : '\U00002213', - '\\' : '\U000000d7', - '\\
' : '\U000000f7', - '\\' : '\U000022c5', - '\\' : '\U000022c6', - '\\' : '\U00002219', - '\\' : '\U00002218', - '\\' : '\U00002020', - '\\' : '\U00002021', - '\\' : '\U000022b2', - '\\' : '\U000022b3', - '\\' : '\U000022b4', - '\\' : '\U000022b5', - '\\' : '\U000025c3', - '\\' : '\U000025b9', - '\\' : '\U000025b3', - '\\' : '\U0000225c', - '\\' : '\U00002295', - '\\' : '\U00002a01', - '\\' : '\U00002297', - '\\' : '\U00002a02', - '\\' : '\U00002299', - '\\' : '\U00002a00', - '\\' : '\U00002296', - '\\' : '\U00002298', - '\\' : '\U00002026', - '\\' : '\U000022ef', - '\\' : '\U00002211', - '\\' : '\U0000220f', - '\\' : '\U00002210', - '\\' : '\U0000221e', - '\\' : '\U0000222b', - '\\' : '\U0000222e', - '\\' : '\U00002663', - '\\' : '\U00002662', - '\\' : '\U00002661', - '\\' : '\U00002660', - '\\' : '\U00002135', - '\\' : '\U00002205', - '\\' : '\U00002207', - '\\' : '\U00002202', - '\\' : '\U0000266d', - '\\' : '\U0000266e', - '\\' : '\U0000266f', - '\\' : '\U00002220', - '\\' : '\U000000a9', - '\\' : '\U000000ae', - '\\' : '\U000000ad', - '\\' : '\U000000af', - '\\' : '\U000000bc', - '\\' : '\U000000bd', - '\\' : '\U000000be', - '\\' : '\U000000aa', - '\\' : '\U000000ba', - '\\
' : '\U000000a7', - '\\' : '\U000000b6', - '\\' : '\U000000a1', - '\\' : '\U000000bf', - '\\' : '\U000020ac', - '\\' : '\U000000a3', - '\\' : '\U000000a5', - '\\' : '\U000000a2', - '\\' : '\U000000a4', - '\\' : '\U000000b0', - '\\' : '\U00002a3f', - '\\' : '\U00002127', - '\\' : '\U000025ca', - '\\' : '\U00002118', - '\\' : '\U00002240', - '\\' : '\U000022c4', - '\\' : '\U000000b4', - '\\' : '\U00000131', - '\\' : '\U000000a8', - '\\' : '\U000000b8', - '\\' : '\U000002dd', - '\\' : '\U000003f5', - '\\' : '\U000023ce', - '\\' : '\U00002039', - '\\' : '\U0000203a', - '\\' : '\U00002302', - '\\<^sub>' : '\U000021e9', - '\\<^sup>' : '\U000021e7', - '\\<^bold>' : '\U00002759', - '\\<^bsub>' : '\U000021d8', - '\\<^esub>' : '\U000021d9', - '\\<^bsup>' : '\U000021d7', - '\\<^esup>' : '\U000021d6', - } - - lang_map = {'isabelle' : isabelle_symbols, 'latex' : latex_symbols} - - def __init__(self, **options): - Filter.__init__(self, **options) - lang = get_choice_opt(options, 'lang', - ['isabelle', 'latex'], 'isabelle') - self.symbols = self.lang_map[lang] - - def filter(self, lexer, stream): - for ttype, value in stream: - if value in self.symbols: - yield ttype, self.symbols[value] - else: - yield ttype, value - - -class KeywordCaseFilter(Filter): - """Convert keywords to lowercase or uppercase or capitalize them, which - means first letter uppercase, rest lowercase. - - This can be useful e.g. if you highlight Pascal code and want to adapt the - code to your styleguide. - - Options accepted: - - `case` : string - The casing to convert keywords to. Must be one of ``'lower'``, - ``'upper'`` or ``'capitalize'``. The default is ``'lower'``. - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - case = get_choice_opt(options, 'case', - ['lower', 'upper', 'capitalize'], 'lower') - self.convert = getattr(str, case) - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype in Keyword: - yield ttype, self.convert(value) - else: - yield ttype, value - - -class NameHighlightFilter(Filter): - """Highlight a normal Name (and Name.*) token with a different token type. - - Example:: - - filter = NameHighlightFilter( - names=['foo', 'bar', 'baz'], - tokentype=Name.Function, - ) - - This would highlight the names "foo", "bar" and "baz" - as functions. `Name.Function` is the default token type. - - Options accepted: - - `names` : list of strings - A list of names that should be given the different token type. - There is no default. - `tokentype` : TokenType or string - A token type or a string containing a token type name that is - used for highlighting the strings in `names`. The default is - `Name.Function`. - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - self.names = set(get_list_opt(options, 'names', [])) - tokentype = options.get('tokentype') - if tokentype: - self.tokentype = string_to_tokentype(tokentype) - else: - self.tokentype = Name.Function - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype in Name and value in self.names: - yield self.tokentype, value - else: - yield ttype, value - - -class ErrorToken(Exception): - pass - - -class RaiseOnErrorTokenFilter(Filter): - """Raise an exception when the lexer generates an error token. - - Options accepted: - - `excclass` : Exception class - The exception class to raise. - The default is `pygments.filters.ErrorToken`. - - .. versionadded:: 0.8 - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - self.exception = options.get('excclass', ErrorToken) - try: - # issubclass() will raise TypeError if first argument is not a class - if not issubclass(self.exception, Exception): - raise TypeError - except TypeError: - raise OptionError('excclass option is not an exception class') - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype is Error: - raise self.exception(value) - yield ttype, value - - -class VisibleWhitespaceFilter(Filter): - """Convert tabs, newlines and/or spaces to visible characters. - - Options accepted: - - `spaces` : string or bool - If this is a one-character string, spaces will be replaces by this string. - If it is another true value, spaces will be replaced by ``·`` (unicode - MIDDLE DOT). If it is a false value, spaces will not be replaced. The - default is ``False``. - `tabs` : string or bool - The same as for `spaces`, but the default replacement character is ``»`` - (unicode RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK). The default value - is ``False``. Note: this will not work if the `tabsize` option for the - lexer is nonzero, as tabs will already have been expanded then. - `tabsize` : int - If tabs are to be replaced by this filter (see the `tabs` option), this - is the total number of characters that a tab should be expanded to. - The default is ``8``. - `newlines` : string or bool - The same as for `spaces`, but the default replacement character is ``¶`` - (unicode PILCROW SIGN). The default value is ``False``. - `wstokentype` : bool - If true, give whitespace the special `Whitespace` token type. This allows - styling the visible whitespace differently (e.g. greyed out), but it can - disrupt background colors. The default is ``True``. - - .. versionadded:: 0.8 - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - for name, default in [('spaces', '·'), - ('tabs', '»'), - ('newlines', '¶')]: - opt = options.get(name, False) - if isinstance(opt, str) and len(opt) == 1: - setattr(self, name, opt) - else: - setattr(self, name, (opt and default or '')) - tabsize = get_int_opt(options, 'tabsize', 8) - if self.tabs: - self.tabs += ' ' * (tabsize - 1) - if self.newlines: - self.newlines += '\n' - self.wstt = get_bool_opt(options, 'wstokentype', True) - - def filter(self, lexer, stream): - if self.wstt: - spaces = self.spaces or ' ' - tabs = self.tabs or '\t' - newlines = self.newlines or '\n' - regex = re.compile(r'\s') - - def replacefunc(wschar): - if wschar == ' ': - return spaces - elif wschar == '\t': - return tabs - elif wschar == '\n': - return newlines - return wschar - - for ttype, value in stream: - yield from _replace_special(ttype, value, regex, Whitespace, - replacefunc) - else: - spaces, tabs, newlines = self.spaces, self.tabs, self.newlines - # simpler processing - for ttype, value in stream: - if spaces: - value = value.replace(' ', spaces) - if tabs: - value = value.replace('\t', tabs) - if newlines: - value = value.replace('\n', newlines) - yield ttype, value - - -class GobbleFilter(Filter): - """Gobbles source code lines (eats initial characters). - - This filter drops the first ``n`` characters off every line of code. This - may be useful when the source code fed to the lexer is indented by a fixed - amount of space that isn't desired in the output. - - Options accepted: - - `n` : int - The number of characters to gobble. - - .. versionadded:: 1.2 - """ - def __init__(self, **options): - Filter.__init__(self, **options) - self.n = get_int_opt(options, 'n', 0) - - def gobble(self, value, left): - if left < len(value): - return value[left:], 0 - else: - return '', left - len(value) - - def filter(self, lexer, stream): - n = self.n - left = n # How many characters left to gobble. - for ttype, value in stream: - # Remove ``left`` tokens from first line, ``n`` from all others. - parts = value.split('\n') - (parts[0], left) = self.gobble(parts[0], left) - for i in range(1, len(parts)): - (parts[i], left) = self.gobble(parts[i], n) - value = '\n'.join(parts) - - if value != '': - yield ttype, value - - -class TokenMergeFilter(Filter): - """Merges consecutive tokens with the same token type in the output - stream of a lexer. - - .. versionadded:: 1.2 - """ - def __init__(self, **options): - Filter.__init__(self, **options) - - def filter(self, lexer, stream): - current_type = None - current_value = None - for ttype, value in stream: - if ttype is current_type: - current_value += value - else: - if current_type is not None: - yield current_type, current_value - current_type = ttype - current_value = value - if current_type is not None: - yield current_type, current_value - - -FILTERS = { - 'codetagify': CodeTagFilter, - 'keywordcase': KeywordCaseFilter, - 'highlight': NameHighlightFilter, - 'raiseonerror': RaiseOnErrorTokenFilter, - 'whitespace': VisibleWhitespaceFilter, - 'gobble': GobbleFilter, - 'tokenmerge': TokenMergeFilter, - 'symbols': SymbolFilter, -} diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index d062f32..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py deleted file mode 100644 index d266603..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py +++ /dev/null @@ -1,129 +0,0 @@ -""" - pygments.formatter - ~~~~~~~~~~~~~~~~~~ - - Base formatter class. - - :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import codecs - -from pip._vendor.pygments.util import get_bool_opt -from pip._vendor.pygments.styles import get_style_by_name - -__all__ = ['Formatter'] - - -def _lookup_style(style): - if isinstance(style, str): - return get_style_by_name(style) - return style - - -class Formatter: - """ - Converts a token stream to text. - - Formatters should have attributes to help selecting them. These - are similar to the corresponding :class:`~pygments.lexer.Lexer` - attributes. - - .. autoattribute:: name - :no-value: - - .. autoattribute:: aliases - :no-value: - - .. autoattribute:: filenames - :no-value: - - You can pass options as keyword arguments to the constructor. - All formatters accept these basic options: - - ``style`` - The style to use, can be a string or a Style subclass - (default: "default"). Not used by e.g. the - TerminalFormatter. - ``full`` - Tells the formatter to output a "full" document, i.e. - a complete self-contained document. This doesn't have - any effect for some formatters (default: false). - ``title`` - If ``full`` is true, the title that should be used to - caption the document (default: ''). - ``encoding`` - If given, must be an encoding name. This will be used to - convert the Unicode token strings to byte strings in the - output. If it is "" or None, Unicode strings will be written - to the output file, which most file-like objects do not - support (default: None). - ``outencoding`` - Overrides ``encoding`` if given. - - """ - - #: Full name for the formatter, in human-readable form. - name = None - - #: A list of short, unique identifiers that can be used to lookup - #: the formatter from a list, e.g. using :func:`.get_formatter_by_name()`. - aliases = [] - - #: A list of fnmatch patterns that match filenames for which this - #: formatter can produce output. The patterns in this list should be unique - #: among all formatters. - filenames = [] - - #: If True, this formatter outputs Unicode strings when no encoding - #: option is given. - unicodeoutput = True - - def __init__(self, **options): - """ - As with lexers, this constructor takes arbitrary optional arguments, - and if you override it, you should first process your own options, then - call the base class implementation. - """ - self.style = _lookup_style(options.get('style', 'default')) - self.full = get_bool_opt(options, 'full', False) - self.title = options.get('title', '') - self.encoding = options.get('encoding', None) or None - if self.encoding in ('guess', 'chardet'): - # can happen for e.g. pygmentize -O encoding=guess - self.encoding = 'utf-8' - self.encoding = options.get('outencoding') or self.encoding - self.options = options - - def get_style_defs(self, arg=''): - """ - This method must return statements or declarations suitable to define - the current style for subsequent highlighted text (e.g. CSS classes - in the `HTMLFormatter`). - - The optional argument `arg` can be used to modify the generation and - is formatter dependent (it is standardized because it can be given on - the command line). - - This method is called by the ``-S`` :doc:`command-line option `, - the `arg` is then given by the ``-a`` option. - """ - return '' - - def format(self, tokensource, outfile): - """ - This method must format the tokens from the `tokensource` iterable and - write the formatted version to the file object `outfile`. - - Formatter options can control how exactly the tokens are converted. - """ - if self.encoding: - # wrap the outfile in a StreamWriter - outfile = codecs.lookup(self.encoding)[3](outfile) - return self.format_unencoded(tokensource, outfile) - - # Allow writing Formatter[str] or Formatter[bytes]. That's equivalent to - # Formatter. This helps when using third-party type stubs from typeshed. - def __class_getitem__(cls, name): - return cls diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py deleted file mode 100644 index f19e993..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py +++ /dev/null @@ -1,157 +0,0 @@ -""" - pygments.formatters - ~~~~~~~~~~~~~~~~~~~ - - Pygments formatters. - - :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -import sys -import types -import fnmatch -from os.path import basename - -from pip._vendor.pygments.formatters._mapping import FORMATTERS -from pip._vendor.pygments.plugin import find_plugin_formatters -from pip._vendor.pygments.util import ClassNotFound - -__all__ = ['get_formatter_by_name', 'get_formatter_for_filename', - 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS) - -_formatter_cache = {} # classes by name -_pattern_cache = {} - - -def _fn_matches(fn, glob): - """Return whether the supplied file name fn matches pattern filename.""" - if glob not in _pattern_cache: - pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob)) - return pattern.match(fn) - return _pattern_cache[glob].match(fn) - - -def _load_formatters(module_name): - """Load a formatter (and all others in the module too).""" - mod = __import__(module_name, None, None, ['__all__']) - for formatter_name in mod.__all__: - cls = getattr(mod, formatter_name) - _formatter_cache[cls.name] = cls - - -def get_all_formatters(): - """Return a generator for all formatter classes.""" - # NB: this returns formatter classes, not info like get_all_lexers(). - for info in FORMATTERS.values(): - if info[1] not in _formatter_cache: - _load_formatters(info[0]) - yield _formatter_cache[info[1]] - for _, formatter in find_plugin_formatters(): - yield formatter - - -def find_formatter_class(alias): - """Lookup a formatter by alias. - - Returns None if not found. - """ - for module_name, name, aliases, _, _ in FORMATTERS.values(): - if alias in aliases: - if name not in _formatter_cache: - _load_formatters(module_name) - return _formatter_cache[name] - for _, cls in find_plugin_formatters(): - if alias in cls.aliases: - return cls - - -def get_formatter_by_name(_alias, **options): - """ - Return an instance of a :class:`.Formatter` subclass that has `alias` in its - aliases list. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that - alias is found. - """ - cls = find_formatter_class(_alias) - if cls is None: - raise ClassNotFound(f"no formatter found for name {_alias!r}") - return cls(**options) - - -def load_formatter_from_file(filename, formattername="CustomFormatter", **options): - """ - Return a `Formatter` subclass instance loaded from the provided file, relative - to the current directory. - - The file is expected to contain a Formatter class named ``formattername`` - (by default, CustomFormatter). Users should be very careful with the input, because - this method is equivalent to running ``eval()`` on the input file. The formatter is - given the `options` at its instantiation. - - :exc:`pygments.util.ClassNotFound` is raised if there are any errors loading - the formatter. - - .. versionadded:: 2.2 - """ - try: - # This empty dict will contain the namespace for the exec'd file - custom_namespace = {} - with open(filename, 'rb') as f: - exec(f.read(), custom_namespace) - # Retrieve the class `formattername` from that namespace - if formattername not in custom_namespace: - raise ClassNotFound(f'no valid {formattername} class found in {filename}') - formatter_class = custom_namespace[formattername] - # And finally instantiate it with the options - return formatter_class(**options) - except OSError as err: - raise ClassNotFound(f'cannot read {filename}: {err}') - except ClassNotFound: - raise - except Exception as err: - raise ClassNotFound(f'error when loading custom formatter: {err}') - - -def get_formatter_for_filename(fn, **options): - """ - Return a :class:`.Formatter` subclass instance that has a filename pattern - matching `fn`. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename - is found. - """ - fn = basename(fn) - for modname, name, _, filenames, _ in FORMATTERS.values(): - for filename in filenames: - if _fn_matches(fn, filename): - if name not in _formatter_cache: - _load_formatters(modname) - return _formatter_cache[name](**options) - for _name, cls in find_plugin_formatters(): - for filename in cls.filenames: - if _fn_matches(fn, filename): - return cls(**options) - raise ClassNotFound(f"no formatter found for file name {fn!r}") - - -class _automodule(types.ModuleType): - """Automatically import formatters.""" - - def __getattr__(self, name): - info = FORMATTERS.get(name) - if info: - _load_formatters(info[0]) - cls = _formatter_cache[info[1]] - setattr(self, name, cls) - return cls - raise AttributeError(name) - - -oldmod = sys.modules[__name__] -newmod = _automodule(__name__) -newmod.__dict__.update(oldmod.__dict__) -sys.modules[__name__] = newmod -del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 43a795e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc deleted file mode 100644 index d027f6b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc deleted file mode 100644 index 6598629..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc deleted file mode 100644 index e5cbd55..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc deleted file mode 100644 index 4293424..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc deleted file mode 100644 index 55500e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc deleted file mode 100644 index b3ec1b8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc deleted file mode 100644 index 87c0b40..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc deleted file mode 100644 index 312abbc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc deleted file mode 100644 index fbf987a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc deleted file mode 100644 index deedc85..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc deleted file mode 100644 index e8583ae..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc deleted file mode 100644 index f164c6a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc deleted file mode 100644 index a5c5fc8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py deleted file mode 100644 index 72ca840..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py +++ /dev/null @@ -1,23 +0,0 @@ -# Automatically generated by scripts/gen_mapfiles.py. -# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead. - -FORMATTERS = { - 'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'), - 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'), - 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ```` tags. By default, the content is enclosed in a ``
`` tag, itself wrapped in a ``
`` tag (but see the `nowrap` option). The ``
``'s CSS class can be set by the `cssclass` option."), - 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'), - 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'), - 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'), - 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'), - 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'), - 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'), - 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ```` element with explicit ``x`` and ``y`` coordinates containing ```` elements with the individual token styles.'), - 'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'), -} diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py deleted file mode 100644 index 5a05bd9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py +++ /dev/null @@ -1,108 +0,0 @@ -""" - pygments.formatters.bbcode - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - - BBcode formatter. - - :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - - -from pip._vendor.pygments.formatter import Formatter -from pip._vendor.pygments.util import get_bool_opt - -__all__ = ['BBCodeFormatter'] - - -class BBCodeFormatter(Formatter): - """ - Format tokens with BBcodes. These formatting codes are used by many - bulletin boards, so you can highlight your sourcecode with pygments before - posting it there. - - This formatter has no support for background colors and borders, as there - are no common BBcode tags for that. - - Some board systems (e.g. phpBB) don't support colors in their [code] tag, - so you can't use the highlighting together with that tag. - Text in a [code] tag usually is shown with a monospace font (which this - formatter can do with the ``monofont`` option) and no spaces (which you - need for indentation) are removed. - - Additional options accepted: - - `style` - The style to use, can be a string or a Style subclass (default: - ``'default'``). - - `codetag` - If set to true, put the output into ``[code]`` tags (default: - ``false``) - - `monofont` - If set to true, add a tag to show the code with a monospace font - (default: ``false``). - """ - name = 'BBCode' - aliases = ['bbcode', 'bb'] - filenames = [] - - def __init__(self, **options): - Formatter.__init__(self, **options) - self._code = get_bool_opt(options, 'codetag', False) - self._mono = get_bool_opt(options, 'monofont', False) - - self.styles = {} - self._make_styles() - - def _make_styles(self): - for ttype, ndef in self.style: - start = end = '' - if ndef['color']: - start += '[color=#{}]'.format(ndef['color']) - end = '[/color]' + end - if ndef['bold']: - start += '[b]' - end = '[/b]' + end - if ndef['italic']: - start += '[i]' - end = '[/i]' + end - if ndef['underline']: - start += '[u]' - end = '[/u]' + end - # there are no common BBcodes for background-color and border - - self.styles[ttype] = start, end - - def format_unencoded(self, tokensource, outfile): - if self._code: - outfile.write('[code]') - if self._mono: - outfile.write('[font=monospace]') - - lastval = '' - lasttype = None - - for ttype, value in tokensource: - while ttype not in self.styles: - ttype = ttype.parent - if ttype == lasttype: - lastval += value - else: - if lastval: - start, end = self.styles[lasttype] - outfile.write(''.join((start, lastval, end))) - lastval = value - lasttype = ttype - - if lastval: - start, end = self.styles[lasttype] - outfile.write(''.join((start, lastval, end))) - - if self._mono: - outfile.write('[/font]') - if self._code: - outfile.write('[/code]') - if self._code or self._mono: - outfile.write('\n') diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py deleted file mode 100644 index 5c8a958..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py +++ /dev/null @@ -1,170 +0,0 @@ -""" - pygments.formatters.groff - ~~~~~~~~~~~~~~~~~~~~~~~~~ - - Formatter for groff output. - - :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import math -from pip._vendor.pygments.formatter import Formatter -from pip._vendor.pygments.util import get_bool_opt, get_int_opt - -__all__ = ['GroffFormatter'] - - -class GroffFormatter(Formatter): - """ - Format tokens with groff escapes to change their color and font style. - - .. versionadded:: 2.11 - - Additional options accepted: - - `style` - The style to use, can be a string or a Style subclass (default: - ``'default'``). - - `monospaced` - If set to true, monospace font will be used (default: ``true``). - - `linenos` - If set to true, print the line numbers (default: ``false``). - - `wrap` - Wrap lines to the specified number of characters. Disabled if set to 0 - (default: ``0``). - """ - - name = 'groff' - aliases = ['groff','troff','roff'] - filenames = [] - - def __init__(self, **options): - Formatter.__init__(self, **options) - - self.monospaced = get_bool_opt(options, 'monospaced', True) - self.linenos = get_bool_opt(options, 'linenos', False) - self._lineno = 0 - self.wrap = get_int_opt(options, 'wrap', 0) - self._linelen = 0 - - self.styles = {} - self._make_styles() - - - def _make_styles(self): - regular = '\\f[CR]' if self.monospaced else '\\f[R]' - bold = '\\f[CB]' if self.monospaced else '\\f[B]' - italic = '\\f[CI]' if self.monospaced else '\\f[I]' - - for ttype, ndef in self.style: - start = end = '' - if ndef['color']: - start += '\\m[{}]'.format(ndef['color']) - end = '\\m[]' + end - if ndef['bold']: - start += bold - end = regular + end - if ndef['italic']: - start += italic - end = regular + end - if ndef['bgcolor']: - start += '\\M[{}]'.format(ndef['bgcolor']) - end = '\\M[]' + end - - self.styles[ttype] = start, end - - - def _define_colors(self, outfile): - colors = set() - for _, ndef in self.style: - if ndef['color'] is not None: - colors.add(ndef['color']) - - for color in sorted(colors): - outfile.write('.defcolor ' + color + ' rgb #' + color + '\n') - - - def _write_lineno(self, outfile): - self._lineno += 1 - outfile.write("%s% 4d " % (self._lineno != 1 and '\n' or '', self._lineno)) - - - def _wrap_line(self, line): - length = len(line.rstrip('\n')) - space = ' ' if self.linenos else '' - newline = '' - - if length > self.wrap: - for i in range(0, math.floor(length / self.wrap)): - chunk = line[i*self.wrap:i*self.wrap+self.wrap] - newline += (chunk + '\n' + space) - remainder = length % self.wrap - if remainder > 0: - newline += line[-remainder-1:] - self._linelen = remainder - elif self._linelen + length > self.wrap: - newline = ('\n' + space) + line - self._linelen = length - else: - newline = line - self._linelen += length - - return newline - - - def _escape_chars(self, text): - text = text.replace('\\', '\\[u005C]'). \ - replace('.', '\\[char46]'). \ - replace('\'', '\\[u0027]'). \ - replace('`', '\\[u0060]'). \ - replace('~', '\\[u007E]') - copy = text - - for char in copy: - if len(char) != len(char.encode()): - uni = char.encode('unicode_escape') \ - .decode()[1:] \ - .replace('x', 'u00') \ - .upper() - text = text.replace(char, '\\[u' + uni[1:] + ']') - - return text - - - def format_unencoded(self, tokensource, outfile): - self._define_colors(outfile) - - outfile.write('.nf\n\\f[CR]\n') - - if self.linenos: - self._write_lineno(outfile) - - for ttype, value in tokensource: - while ttype not in self.styles: - ttype = ttype.parent - start, end = self.styles[ttype] - - for line in value.splitlines(True): - if self.wrap > 0: - line = self._wrap_line(line) - - if start and end: - text = self._escape_chars(line.rstrip('\n')) - if text != '': - outfile.write(''.join((start, text, end))) - else: - outfile.write(self._escape_chars(line.rstrip('\n'))) - - if line.endswith('\n'): - if self.linenos: - self._write_lineno(outfile) - self._linelen = 0 - else: - outfile.write('\n') - self._linelen = 0 - - outfile.write('\n.fi') diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py b/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py deleted file mode 100644 index 7aa938f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py +++ /dev/null @@ -1,987 +0,0 @@ -""" - pygments.formatters.html - ~~~~~~~~~~~~~~~~~~~~~~~~ - - Formatter for HTML output. - - :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import functools -import os -import sys -import os.path -from io import StringIO - -from pip._vendor.pygments.formatter import Formatter -from pip._vendor.pygments.token import Token, Text, STANDARD_TYPES -from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt - -try: - import ctags -except ImportError: - ctags = None - -__all__ = ['HtmlFormatter'] - - -_escape_html_table = { - ord('&'): '&', - ord('<'): '<', - ord('>'): '>', - ord('"'): '"', - ord("'"): ''', -} - - -def escape_html(text, table=_escape_html_table): - """Escape &, <, > as well as single and double quotes for HTML.""" - return text.translate(table) - - -def webify(color): - if color.startswith('calc') or color.startswith('var'): - return color - else: - return '#' + color - - -def _get_ttype_class(ttype): - fname = STANDARD_TYPES.get(ttype) - if fname: - return fname - aname = '' - while fname is None: - aname = '-' + ttype[-1] + aname - ttype = ttype.parent - fname = STANDARD_TYPES.get(ttype) - return fname + aname - - -CSSFILE_TEMPLATE = '''\ -/* -generated by Pygments -Copyright 2006-2024 by the Pygments team. -Licensed under the BSD license, see LICENSE for details. -*/ -%(styledefs)s -''' - -DOC_HEADER = '''\ - - - - - %(title)s - - - - -

%(title)s

- -''' - -DOC_HEADER_EXTERNALCSS = '''\ - - - - - %(title)s - - - - -

%(title)s

- -''' - -DOC_FOOTER = '''\ - - -''' - - -class HtmlFormatter(Formatter): - r""" - Format tokens as HTML 4 ```` tags. By default, the content is enclosed - in a ``
`` tag, itself wrapped in a ``
`` tag (but see the `nowrap` option). - The ``
``'s CSS class can be set by the `cssclass` option. - - If the `linenos` option is set to ``"table"``, the ``
`` is
-    additionally wrapped inside a ```` which has one row and two
-    cells: one containing the line numbers and one containing the code.
-    Example:
-
-    .. sourcecode:: html
-
-        
-
- - -
-
1
-            2
-
-
def foo(bar):
-              pass
-            
-
- - (whitespace added to improve clarity). - - A list of lines can be specified using the `hl_lines` option to make these - lines highlighted (as of Pygments 0.11). - - With the `full` option, a complete HTML 4 document is output, including - the style definitions inside a `` - - -
{code}
- - -""" - -CONSOLE_SVG_FORMAT = """\ - - - - - - - - - {lines} - - - {chrome} - - {backgrounds} - - {matrix} - - - -""" - -_SVG_FONT_FAMILY = "Rich Fira Code" -_SVG_CLASSES_PREFIX = "rich-svg" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py deleted file mode 100644 index cbd6da9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py +++ /dev/null @@ -1,10 +0,0 @@ -from typing import Any - - -def load_ipython_extension(ip: Any) -> None: # pragma: no cover - # prevent circular import - from pip._vendor.rich.pretty import install - from pip._vendor.rich.traceback import install as tr_install - - install() - tr_install() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py deleted file mode 100644 index b17ee65..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py +++ /dev/null @@ -1,24 +0,0 @@ -from __future__ import annotations - -from typing import IO, Callable - - -def get_fileno(file_like: IO[str]) -> int | None: - """Get fileno() from a file, accounting for poorly implemented file-like objects. - - Args: - file_like (IO): A file-like object. - - Returns: - int | None: The result of fileno if available, or None if operation failed. - """ - fileno: Callable[[], int] | None = getattr(file_like, "fileno", None) - if fileno is not None: - try: - return fileno() - except Exception: - # `fileno` is documented as potentially raising a OSError - # Alas, from the issues, there are so many poorly implemented file-like objects, - # that `fileno()` can raise just about anything. - return None - return None diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py deleted file mode 100644 index e87698d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py +++ /dev/null @@ -1,268 +0,0 @@ -import inspect -from inspect import cleandoc, getdoc, getfile, isclass, ismodule, signature -from typing import Any, Collection, Iterable, Optional, Tuple, Type, Union - -from .console import Group, RenderableType -from .control import escape_control_codes -from .highlighter import ReprHighlighter -from .jupyter import JupyterMixin -from .panel import Panel -from .pretty import Pretty -from .table import Table -from .text import Text, TextType - - -def _first_paragraph(doc: str) -> str: - """Get the first paragraph from a docstring.""" - paragraph, _, _ = doc.partition("\n\n") - return paragraph - - -class Inspect(JupyterMixin): - """A renderable to inspect any Python Object. - - Args: - obj (Any): An object to inspect. - title (str, optional): Title to display over inspect result, or None use type. Defaults to None. - help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. - methods (bool, optional): Enable inspection of callables. Defaults to False. - docs (bool, optional): Also render doc strings. Defaults to True. - private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. - dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. - sort (bool, optional): Sort attributes alphabetically. Defaults to True. - all (bool, optional): Show all attributes. Defaults to False. - value (bool, optional): Pretty print value of object. Defaults to True. - """ - - def __init__( - self, - obj: Any, - *, - title: Optional[TextType] = None, - help: bool = False, - methods: bool = False, - docs: bool = True, - private: bool = False, - dunder: bool = False, - sort: bool = True, - all: bool = True, - value: bool = True, - ) -> None: - self.highlighter = ReprHighlighter() - self.obj = obj - self.title = title or self._make_title(obj) - if all: - methods = private = dunder = True - self.help = help - self.methods = methods - self.docs = docs or help - self.private = private or dunder - self.dunder = dunder - self.sort = sort - self.value = value - - def _make_title(self, obj: Any) -> Text: - """Make a default title.""" - title_str = ( - str(obj) - if (isclass(obj) or callable(obj) or ismodule(obj)) - else str(type(obj)) - ) - title_text = self.highlighter(title_str) - return title_text - - def __rich__(self) -> Panel: - return Panel.fit( - Group(*self._render()), - title=self.title, - border_style="scope.border", - padding=(0, 1), - ) - - def _get_signature(self, name: str, obj: Any) -> Optional[Text]: - """Get a signature for a callable.""" - try: - _signature = str(signature(obj)) + ":" - except ValueError: - _signature = "(...)" - except TypeError: - return None - - source_filename: Optional[str] = None - try: - source_filename = getfile(obj) - except (OSError, TypeError): - # OSError is raised if obj has no source file, e.g. when defined in REPL. - pass - - callable_name = Text(name, style="inspect.callable") - if source_filename: - callable_name.stylize(f"link file://{source_filename}") - signature_text = self.highlighter(_signature) - - qualname = name or getattr(obj, "__qualname__", name) - - # If obj is a module, there may be classes (which are callable) to display - if inspect.isclass(obj): - prefix = "class" - elif inspect.iscoroutinefunction(obj): - prefix = "async def" - else: - prefix = "def" - - qual_signature = Text.assemble( - (f"{prefix} ", f"inspect.{prefix.replace(' ', '_')}"), - (qualname, "inspect.callable"), - signature_text, - ) - - return qual_signature - - def _render(self) -> Iterable[RenderableType]: - """Render object.""" - - def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]: - key, (_error, value) = item - return (callable(value), key.strip("_").lower()) - - def safe_getattr(attr_name: str) -> Tuple[Any, Any]: - """Get attribute or any exception.""" - try: - return (None, getattr(obj, attr_name)) - except Exception as error: - return (error, None) - - obj = self.obj - keys = dir(obj) - total_items = len(keys) - if not self.dunder: - keys = [key for key in keys if not key.startswith("__")] - if not self.private: - keys = [key for key in keys if not key.startswith("_")] - not_shown_count = total_items - len(keys) - items = [(key, safe_getattr(key)) for key in keys] - if self.sort: - items.sort(key=sort_items) - - items_table = Table.grid(padding=(0, 1), expand=False) - items_table.add_column(justify="right") - add_row = items_table.add_row - highlighter = self.highlighter - - if callable(obj): - signature = self._get_signature("", obj) - if signature is not None: - yield signature - yield "" - - if self.docs: - _doc = self._get_formatted_doc(obj) - if _doc is not None: - doc_text = Text(_doc, style="inspect.help") - doc_text = highlighter(doc_text) - yield doc_text - yield "" - - if self.value and not (isclass(obj) or callable(obj) or ismodule(obj)): - yield Panel( - Pretty(obj, indent_guides=True, max_length=10, max_string=60), - border_style="inspect.value.border", - ) - yield "" - - for key, (error, value) in items: - key_text = Text.assemble( - ( - key, - "inspect.attr.dunder" if key.startswith("__") else "inspect.attr", - ), - (" =", "inspect.equals"), - ) - if error is not None: - warning = key_text.copy() - warning.stylize("inspect.error") - add_row(warning, highlighter(repr(error))) - continue - - if callable(value): - if not self.methods: - continue - - _signature_text = self._get_signature(key, value) - if _signature_text is None: - add_row(key_text, Pretty(value, highlighter=highlighter)) - else: - if self.docs: - docs = self._get_formatted_doc(value) - if docs is not None: - _signature_text.append("\n" if "\n" in docs else " ") - doc = highlighter(docs) - doc.stylize("inspect.doc") - _signature_text.append(doc) - - add_row(key_text, _signature_text) - else: - add_row(key_text, Pretty(value, highlighter=highlighter)) - if items_table.row_count: - yield items_table - elif not_shown_count: - yield Text.from_markup( - f"[b cyan]{not_shown_count}[/][i] attribute(s) not shown.[/i] " - f"Run [b][magenta]inspect[/]([not b]inspect[/])[/b] for options." - ) - - def _get_formatted_doc(self, object_: Any) -> Optional[str]: - """ - Extract the docstring of an object, process it and returns it. - The processing consists in cleaning up the doctring's indentation, - taking only its 1st paragraph if `self.help` is not True, - and escape its control codes. - - Args: - object_ (Any): the object to get the docstring from. - - Returns: - Optional[str]: the processed docstring, or None if no docstring was found. - """ - docs = getdoc(object_) - if docs is None: - return None - docs = cleandoc(docs).strip() - if not self.help: - docs = _first_paragraph(docs) - return escape_control_codes(docs) - - -def get_object_types_mro(obj: Union[object, Type[Any]]) -> Tuple[type, ...]: - """Returns the MRO of an object's class, or of the object itself if it's a class.""" - if not hasattr(obj, "__mro__"): - # N.B. we cannot use `if type(obj) is type` here because it doesn't work with - # some types of classes, such as the ones that use abc.ABCMeta. - obj = type(obj) - return getattr(obj, "__mro__", ()) - - -def get_object_types_mro_as_strings(obj: object) -> Collection[str]: - """ - Returns the MRO of an object's class as full qualified names, or of the object itself if it's a class. - - Examples: - `object_types_mro_as_strings(JSONDecoder)` will return `['json.decoder.JSONDecoder', 'builtins.object']` - """ - return [ - f'{getattr(type_, "__module__", "")}.{getattr(type_, "__qualname__", "")}' - for type_ in get_object_types_mro(obj) - ] - - -def is_object_one_of_types( - obj: object, fully_qualified_types_names: Collection[str] -) -> bool: - """ - Returns `True` if the given object's class (or the object itself, if it's a class) has one of the - fully qualified names in its MRO. - """ - for type_name in get_object_types_mro_as_strings(obj): - if type_name in fully_qualified_types_names: - return True - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py deleted file mode 100644 index fc16c84..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py +++ /dev/null @@ -1,94 +0,0 @@ -from datetime import datetime -from typing import Iterable, List, Optional, TYPE_CHECKING, Union, Callable - - -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import Console, ConsoleRenderable, RenderableType - from .table import Table - -FormatTimeCallable = Callable[[datetime], Text] - - -class LogRender: - def __init__( - self, - show_time: bool = True, - show_level: bool = False, - show_path: bool = True, - time_format: Union[str, FormatTimeCallable] = "[%x %X]", - omit_repeated_times: bool = True, - level_width: Optional[int] = 8, - ) -> None: - self.show_time = show_time - self.show_level = show_level - self.show_path = show_path - self.time_format = time_format - self.omit_repeated_times = omit_repeated_times - self.level_width = level_width - self._last_time: Optional[Text] = None - - def __call__( - self, - console: "Console", - renderables: Iterable["ConsoleRenderable"], - log_time: Optional[datetime] = None, - time_format: Optional[Union[str, FormatTimeCallable]] = None, - level: TextType = "", - path: Optional[str] = None, - line_no: Optional[int] = None, - link_path: Optional[str] = None, - ) -> "Table": - from .containers import Renderables - from .table import Table - - output = Table.grid(padding=(0, 1)) - output.expand = True - if self.show_time: - output.add_column(style="log.time") - if self.show_level: - output.add_column(style="log.level", width=self.level_width) - output.add_column(ratio=1, style="log.message", overflow="fold") - if self.show_path and path: - output.add_column(style="log.path") - row: List["RenderableType"] = [] - if self.show_time: - log_time = log_time or console.get_datetime() - time_format = time_format or self.time_format - if callable(time_format): - log_time_display = time_format(log_time) - else: - log_time_display = Text(log_time.strftime(time_format)) - if log_time_display == self._last_time and self.omit_repeated_times: - row.append(Text(" " * len(log_time_display))) - else: - row.append(log_time_display) - self._last_time = log_time_display - if self.show_level: - row.append(level) - - row.append(Renderables(renderables)) - if self.show_path and path: - path_text = Text() - path_text.append( - path, style=f"link file://{link_path}" if link_path else "" - ) - if line_no: - path_text.append(":") - path_text.append( - f"{line_no}", - style=f"link file://{link_path}#{line_no}" if link_path else "", - ) - row.append(path_text) - - output.add_row(*row) - return output - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - c = Console() - c.print("[on blue]Hello", justify="right") - c.log("[on blue]hello", justify="right") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py deleted file mode 100644 index 01c6caf..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py +++ /dev/null @@ -1,43 +0,0 @@ -from typing import Iterable, Tuple, TypeVar - -T = TypeVar("T") - - -def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for first value.""" - iter_values = iter(values) - try: - value = next(iter_values) - except StopIteration: - return - yield True, value - for value in iter_values: - yield False, value - - -def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value - - -def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: - """Iterate and generate a tuple with a flag for first and last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - first = True - for value in iter_values: - yield first, False, previous_value - first = False - previous_value = value - yield first, True, previous_value diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py deleted file mode 100644 index 6ae05d3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py +++ /dev/null @@ -1,69 +0,0 @@ -from types import TracebackType -from typing import IO, Iterable, Iterator, List, Optional, Type - - -class NullFile(IO[str]): - def close(self) -> None: - pass - - def isatty(self) -> bool: - return False - - def read(self, __n: int = 1) -> str: - return "" - - def readable(self) -> bool: - return False - - def readline(self, __limit: int = 1) -> str: - return "" - - def readlines(self, __hint: int = 1) -> List[str]: - return [] - - def seek(self, __offset: int, __whence: int = 1) -> int: - return 0 - - def seekable(self) -> bool: - return False - - def tell(self) -> int: - return 0 - - def truncate(self, __size: Optional[int] = 1) -> int: - return 0 - - def writable(self) -> bool: - return False - - def writelines(self, __lines: Iterable[str]) -> None: - pass - - def __next__(self) -> str: - return "" - - def __iter__(self) -> Iterator[str]: - return iter([""]) - - def __enter__(self) -> IO[str]: - return self - - def __exit__( - self, - __t: Optional[Type[BaseException]], - __value: Optional[BaseException], - __traceback: Optional[TracebackType], - ) -> None: - pass - - def write(self, text: str) -> int: - return 0 - - def flush(self) -> None: - pass - - def fileno(self) -> int: - return -1 - - -NULL_FILE = NullFile() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py deleted file mode 100644 index 3c748d3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py +++ /dev/null @@ -1,309 +0,0 @@ -from .palette import Palette - - -# Taken from https://en.wikipedia.org/wiki/ANSI_escape_code (Windows 10 column) -WINDOWS_PALETTE = Palette( - [ - (12, 12, 12), - (197, 15, 31), - (19, 161, 14), - (193, 156, 0), - (0, 55, 218), - (136, 23, 152), - (58, 150, 221), - (204, 204, 204), - (118, 118, 118), - (231, 72, 86), - (22, 198, 12), - (249, 241, 165), - (59, 120, 255), - (180, 0, 158), - (97, 214, 214), - (242, 242, 242), - ] -) - -# # The standard ansi colors (including bright variants) -STANDARD_PALETTE = Palette( - [ - (0, 0, 0), - (170, 0, 0), - (0, 170, 0), - (170, 85, 0), - (0, 0, 170), - (170, 0, 170), - (0, 170, 170), - (170, 170, 170), - (85, 85, 85), - (255, 85, 85), - (85, 255, 85), - (255, 255, 85), - (85, 85, 255), - (255, 85, 255), - (85, 255, 255), - (255, 255, 255), - ] -) - - -# The 256 color palette -EIGHT_BIT_PALETTE = Palette( - [ - (0, 0, 0), - (128, 0, 0), - (0, 128, 0), - (128, 128, 0), - (0, 0, 128), - (128, 0, 128), - (0, 128, 128), - (192, 192, 192), - (128, 128, 128), - (255, 0, 0), - (0, 255, 0), - (255, 255, 0), - (0, 0, 255), - (255, 0, 255), - (0, 255, 255), - (255, 255, 255), - (0, 0, 0), - (0, 0, 95), - (0, 0, 135), - (0, 0, 175), - (0, 0, 215), - (0, 0, 255), - (0, 95, 0), - (0, 95, 95), - (0, 95, 135), - (0, 95, 175), - (0, 95, 215), - (0, 95, 255), - (0, 135, 0), - (0, 135, 95), - (0, 135, 135), - (0, 135, 175), - (0, 135, 215), - (0, 135, 255), - (0, 175, 0), - (0, 175, 95), - (0, 175, 135), - (0, 175, 175), - (0, 175, 215), - (0, 175, 255), - (0, 215, 0), - (0, 215, 95), - (0, 215, 135), - (0, 215, 175), - (0, 215, 215), - (0, 215, 255), - (0, 255, 0), - (0, 255, 95), - (0, 255, 135), - (0, 255, 175), - (0, 255, 215), - (0, 255, 255), - (95, 0, 0), - (95, 0, 95), - (95, 0, 135), - (95, 0, 175), - (95, 0, 215), - (95, 0, 255), - (95, 95, 0), - (95, 95, 95), - (95, 95, 135), - (95, 95, 175), - (95, 95, 215), - (95, 95, 255), - (95, 135, 0), - (95, 135, 95), - (95, 135, 135), - (95, 135, 175), - (95, 135, 215), - (95, 135, 255), - (95, 175, 0), - (95, 175, 95), - (95, 175, 135), - (95, 175, 175), - (95, 175, 215), - (95, 175, 255), - (95, 215, 0), - (95, 215, 95), - (95, 215, 135), - (95, 215, 175), - (95, 215, 215), - (95, 215, 255), - (95, 255, 0), - (95, 255, 95), - (95, 255, 135), - (95, 255, 175), - (95, 255, 215), - (95, 255, 255), - (135, 0, 0), - (135, 0, 95), - (135, 0, 135), - (135, 0, 175), - (135, 0, 215), - (135, 0, 255), - (135, 95, 0), - (135, 95, 95), - (135, 95, 135), - (135, 95, 175), - (135, 95, 215), - (135, 95, 255), - (135, 135, 0), - (135, 135, 95), - (135, 135, 135), - (135, 135, 175), - (135, 135, 215), - (135, 135, 255), - (135, 175, 0), - (135, 175, 95), - (135, 175, 135), - (135, 175, 175), - (135, 175, 215), - (135, 175, 255), - (135, 215, 0), - (135, 215, 95), - (135, 215, 135), - (135, 215, 175), - (135, 215, 215), - (135, 215, 255), - (135, 255, 0), - (135, 255, 95), - (135, 255, 135), - (135, 255, 175), - (135, 255, 215), - (135, 255, 255), - (175, 0, 0), - (175, 0, 95), - (175, 0, 135), - (175, 0, 175), - (175, 0, 215), - (175, 0, 255), - (175, 95, 0), - (175, 95, 95), - (175, 95, 135), - (175, 95, 175), - (175, 95, 215), - (175, 95, 255), - (175, 135, 0), - (175, 135, 95), - (175, 135, 135), - (175, 135, 175), - (175, 135, 215), - (175, 135, 255), - (175, 175, 0), - (175, 175, 95), - (175, 175, 135), - (175, 175, 175), - (175, 175, 215), - (175, 175, 255), - (175, 215, 0), - (175, 215, 95), - (175, 215, 135), - (175, 215, 175), - (175, 215, 215), - (175, 215, 255), - (175, 255, 0), - (175, 255, 95), - (175, 255, 135), - (175, 255, 175), - (175, 255, 215), - (175, 255, 255), - (215, 0, 0), - (215, 0, 95), - (215, 0, 135), - (215, 0, 175), - (215, 0, 215), - (215, 0, 255), - (215, 95, 0), - (215, 95, 95), - (215, 95, 135), - (215, 95, 175), - (215, 95, 215), - (215, 95, 255), - (215, 135, 0), - (215, 135, 95), - (215, 135, 135), - (215, 135, 175), - (215, 135, 215), - (215, 135, 255), - (215, 175, 0), - (215, 175, 95), - (215, 175, 135), - (215, 175, 175), - (215, 175, 215), - (215, 175, 255), - (215, 215, 0), - (215, 215, 95), - (215, 215, 135), - (215, 215, 175), - (215, 215, 215), - (215, 215, 255), - (215, 255, 0), - (215, 255, 95), - (215, 255, 135), - (215, 255, 175), - (215, 255, 215), - (215, 255, 255), - (255, 0, 0), - (255, 0, 95), - (255, 0, 135), - (255, 0, 175), - (255, 0, 215), - (255, 0, 255), - (255, 95, 0), - (255, 95, 95), - (255, 95, 135), - (255, 95, 175), - (255, 95, 215), - (255, 95, 255), - (255, 135, 0), - (255, 135, 95), - (255, 135, 135), - (255, 135, 175), - (255, 135, 215), - (255, 135, 255), - (255, 175, 0), - (255, 175, 95), - (255, 175, 135), - (255, 175, 175), - (255, 175, 215), - (255, 175, 255), - (255, 215, 0), - (255, 215, 95), - (255, 215, 135), - (255, 215, 175), - (255, 215, 215), - (255, 215, 255), - (255, 255, 0), - (255, 255, 95), - (255, 255, 135), - (255, 255, 175), - (255, 255, 215), - (255, 255, 255), - (8, 8, 8), - (18, 18, 18), - (28, 28, 28), - (38, 38, 38), - (48, 48, 48), - (58, 58, 58), - (68, 68, 68), - (78, 78, 78), - (88, 88, 88), - (98, 98, 98), - (108, 108, 108), - (118, 118, 118), - (128, 128, 128), - (138, 138, 138), - (148, 148, 148), - (158, 158, 158), - (168, 168, 168), - (178, 178, 178), - (188, 188, 188), - (198, 198, 198), - (208, 208, 208), - (218, 218, 218), - (228, 228, 228), - (238, 238, 238), - ] -) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py deleted file mode 100644 index 4f6d8b2..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py +++ /dev/null @@ -1,17 +0,0 @@ -from typing import Optional - - -def pick_bool(*values: Optional[bool]) -> bool: - """Pick the first non-none bool or return the last value. - - Args: - *values (bool): Any number of boolean or None values. - - Returns: - bool: First non-none boolean. - """ - assert values, "1 or more values required" - for value in values: - if value is not None: - return value - return bool(value) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py deleted file mode 100644 index 95267b0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py +++ /dev/null @@ -1,159 +0,0 @@ -import sys -from fractions import Fraction -from math import ceil -from typing import cast, List, Optional, Sequence - -if sys.version_info >= (3, 8): - from typing import Protocol -else: - from pip._vendor.typing_extensions import Protocol # pragma: no cover - - -class Edge(Protocol): - """Any object that defines an edge (such as Layout).""" - - size: Optional[int] = None - ratio: int = 1 - minimum_size: int = 1 - - -def ratio_resolve(total: int, edges: Sequence[Edge]) -> List[int]: - """Divide total space to satisfy size, ratio, and minimum_size, constraints. - - The returned list of integers should add up to total in most cases, unless it is - impossible to satisfy all the constraints. For instance, if there are two edges - with a minimum size of 20 each and `total` is 30 then the returned list will be - greater than total. In practice, this would mean that a Layout object would - clip the rows that would overflow the screen height. - - Args: - total (int): Total number of characters. - edges (List[Edge]): Edges within total space. - - Returns: - List[int]: Number of characters for each edge. - """ - # Size of edge or None for yet to be determined - sizes = [(edge.size or None) for edge in edges] - - _Fraction = Fraction - - # While any edges haven't been calculated - while None in sizes: - # Get flexible edges and index to map these back on to sizes list - flexible_edges = [ - (index, edge) - for index, (size, edge) in enumerate(zip(sizes, edges)) - if size is None - ] - # Remaining space in total - remaining = total - sum(size or 0 for size in sizes) - if remaining <= 0: - # No room for flexible edges - return [ - ((edge.minimum_size or 1) if size is None else size) - for size, edge in zip(sizes, edges) - ] - # Calculate number of characters in a ratio portion - portion = _Fraction( - remaining, sum((edge.ratio or 1) for _, edge in flexible_edges) - ) - - # If any edges will be less than their minimum, replace size with the minimum - for index, edge in flexible_edges: - if portion * edge.ratio <= edge.minimum_size: - sizes[index] = edge.minimum_size - # New fixed size will invalidate calculations, so we need to repeat the process - break - else: - # Distribute flexible space and compensate for rounding error - # Since edge sizes can only be integers we need to add the remainder - # to the following line - remainder = _Fraction(0) - for index, edge in flexible_edges: - size, remainder = divmod(portion * edge.ratio + remainder, 1) - sizes[index] = size - break - # Sizes now contains integers only - return cast(List[int], sizes) - - -def ratio_reduce( - total: int, ratios: List[int], maximums: List[int], values: List[int] -) -> List[int]: - """Divide an integer total in to parts based on ratios. - - Args: - total (int): The total to divide. - ratios (List[int]): A list of integer ratios. - maximums (List[int]): List of maximums values for each slot. - values (List[int]): List of values - - Returns: - List[int]: A list of integers guaranteed to sum to total. - """ - ratios = [ratio if _max else 0 for ratio, _max in zip(ratios, maximums)] - total_ratio = sum(ratios) - if not total_ratio: - return values[:] - total_remaining = total - result: List[int] = [] - append = result.append - for ratio, maximum, value in zip(ratios, maximums, values): - if ratio and total_ratio > 0: - distributed = min(maximum, round(ratio * total_remaining / total_ratio)) - append(value - distributed) - total_remaining -= distributed - total_ratio -= ratio - else: - append(value) - return result - - -def ratio_distribute( - total: int, ratios: List[int], minimums: Optional[List[int]] = None -) -> List[int]: - """Distribute an integer total in to parts based on ratios. - - Args: - total (int): The total to divide. - ratios (List[int]): A list of integer ratios. - minimums (List[int]): List of minimum values for each slot. - - Returns: - List[int]: A list of integers guaranteed to sum to total. - """ - if minimums: - ratios = [ratio if _min else 0 for ratio, _min in zip(ratios, minimums)] - total_ratio = sum(ratios) - assert total_ratio > 0, "Sum of ratios must be > 0" - - total_remaining = total - distributed_total: List[int] = [] - append = distributed_total.append - if minimums is None: - _minimums = [0] * len(ratios) - else: - _minimums = minimums - for ratio, minimum in zip(ratios, _minimums): - if total_ratio > 0: - distributed = max(minimum, ceil(ratio * total_remaining / total_ratio)) - else: - distributed = total_remaining - append(distributed) - total_ratio -= ratio - total_remaining -= distributed - return distributed_total - - -if __name__ == "__main__": - from dataclasses import dataclass - - @dataclass - class E: - size: Optional[int] = None - ratio: int = 1 - minimum_size: int = 1 - - resolved = ratio_resolve(110, [E(None, 1, 1), E(None, 1, 1), E(None, 1, 1)]) - print(sum(resolved)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py deleted file mode 100644 index d0bb1fe..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py +++ /dev/null @@ -1,482 +0,0 @@ -""" -Spinners are from: -* cli-spinners: - MIT License - Copyright (c) Sindre Sorhus (sindresorhus.com) - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE - FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -""" - -SPINNERS = { - "dots": { - "interval": 80, - "frames": "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏", - }, - "dots2": {"interval": 80, "frames": "⣾⣽⣻⢿⡿⣟⣯⣷"}, - "dots3": { - "interval": 80, - "frames": "⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓", - }, - "dots4": { - "interval": 80, - "frames": "⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆", - }, - "dots5": { - "interval": 80, - "frames": "⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋", - }, - "dots6": { - "interval": 80, - "frames": "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁", - }, - "dots7": { - "interval": 80, - "frames": "⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈", - }, - "dots8": { - "interval": 80, - "frames": "⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈", - }, - "dots9": {"interval": 80, "frames": "⢹⢺⢼⣸⣇⡧⡗⡏"}, - "dots10": {"interval": 80, "frames": "⢄⢂⢁⡁⡈⡐⡠"}, - "dots11": {"interval": 100, "frames": "⠁⠂⠄⡀⢀⠠⠐⠈"}, - "dots12": { - "interval": 80, - "frames": [ - "⢀⠀", - "⡀⠀", - "⠄⠀", - "⢂⠀", - "⡂⠀", - "⠅⠀", - "⢃⠀", - "⡃⠀", - "⠍⠀", - "⢋⠀", - "⡋⠀", - "⠍⠁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⢈⠩", - "⡀⢙", - "⠄⡙", - "⢂⠩", - "⡂⢘", - "⠅⡘", - "⢃⠨", - "⡃⢐", - "⠍⡐", - "⢋⠠", - "⡋⢀", - "⠍⡁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⠈⠩", - "⠀⢙", - "⠀⡙", - "⠀⠩", - "⠀⢘", - "⠀⡘", - "⠀⠨", - "⠀⢐", - "⠀⡐", - "⠀⠠", - "⠀⢀", - "⠀⡀", - ], - }, - "dots8Bit": { - "interval": 80, - "frames": "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙" - "⡚⡛⡜⡝⡞⡟⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻" - "⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕" - "⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷" - "⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿", - }, - "line": {"interval": 130, "frames": ["-", "\\", "|", "/"]}, - "line2": {"interval": 100, "frames": "⠂-–—–-"}, - "pipe": {"interval": 100, "frames": "┤┘┴└├┌┬┐"}, - "simpleDots": {"interval": 400, "frames": [". ", ".. ", "...", " "]}, - "simpleDotsScrolling": { - "interval": 200, - "frames": [". ", ".. ", "...", " ..", " .", " "], - }, - "star": {"interval": 70, "frames": "✶✸✹✺✹✷"}, - "star2": {"interval": 80, "frames": "+x*"}, - "flip": { - "interval": 70, - "frames": "___-``'´-___", - }, - "hamburger": {"interval": 100, "frames": "☱☲☴"}, - "growVertical": { - "interval": 120, - "frames": "▁▃▄▅▆▇▆▅▄▃", - }, - "growHorizontal": { - "interval": 120, - "frames": "▏▎▍▌▋▊▉▊▋▌▍▎", - }, - "balloon": {"interval": 140, "frames": " .oO@* "}, - "balloon2": {"interval": 120, "frames": ".oO°Oo."}, - "noise": {"interval": 100, "frames": "▓▒░"}, - "bounce": {"interval": 120, "frames": "⠁⠂⠄⠂"}, - "boxBounce": {"interval": 120, "frames": "▖▘▝▗"}, - "boxBounce2": {"interval": 100, "frames": "▌▀▐▄"}, - "triangle": {"interval": 50, "frames": "◢◣◤◥"}, - "arc": {"interval": 100, "frames": "◜◠◝◞◡◟"}, - "circle": {"interval": 120, "frames": "◡⊙◠"}, - "squareCorners": {"interval": 180, "frames": "◰◳◲◱"}, - "circleQuarters": {"interval": 120, "frames": "◴◷◶◵"}, - "circleHalves": {"interval": 50, "frames": "◐◓◑◒"}, - "squish": {"interval": 100, "frames": "╫╪"}, - "toggle": {"interval": 250, "frames": "⊶⊷"}, - "toggle2": {"interval": 80, "frames": "▫▪"}, - "toggle3": {"interval": 120, "frames": "□■"}, - "toggle4": {"interval": 100, "frames": "■□▪▫"}, - "toggle5": {"interval": 100, "frames": "▮▯"}, - "toggle6": {"interval": 300, "frames": "ဝ၀"}, - "toggle7": {"interval": 80, "frames": "⦾⦿"}, - "toggle8": {"interval": 100, "frames": "◍◌"}, - "toggle9": {"interval": 100, "frames": "◉◎"}, - "toggle10": {"interval": 100, "frames": "㊂㊀㊁"}, - "toggle11": {"interval": 50, "frames": "⧇⧆"}, - "toggle12": {"interval": 120, "frames": "☗☖"}, - "toggle13": {"interval": 80, "frames": "=*-"}, - "arrow": {"interval": 100, "frames": "←↖↑↗→↘↓↙"}, - "arrow2": { - "interval": 80, - "frames": ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "], - }, - "arrow3": { - "interval": 120, - "frames": ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"], - }, - "bouncingBar": { - "interval": 80, - "frames": [ - "[ ]", - "[= ]", - "[== ]", - "[=== ]", - "[ ===]", - "[ ==]", - "[ =]", - "[ ]", - "[ =]", - "[ ==]", - "[ ===]", - "[====]", - "[=== ]", - "[== ]", - "[= ]", - ], - }, - "bouncingBall": { - "interval": 80, - "frames": [ - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "( ●)", - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "(● )", - ], - }, - "smiley": {"interval": 200, "frames": ["😄 ", "😝 "]}, - "monkey": {"interval": 300, "frames": ["🙈 ", "🙈 ", "🙉 ", "🙊 "]}, - "hearts": {"interval": 100, "frames": ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]}, - "clock": { - "interval": 100, - "frames": [ - "🕛 ", - "🕐 ", - "🕑 ", - "🕒 ", - "🕓 ", - "🕔 ", - "🕕 ", - "🕖 ", - "🕗 ", - "🕘 ", - "🕙 ", - "🕚 ", - ], - }, - "earth": {"interval": 180, "frames": ["🌍 ", "🌎 ", "🌏 "]}, - "material": { - "interval": 17, - "frames": [ - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "██████████▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "█████████████▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁██████████████▁▁▁▁", - "▁▁▁██████████████▁▁▁", - "▁▁▁▁█████████████▁▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁▁▁████████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁▁█████████████▁▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁▁███████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁▁█████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - ], - }, - "moon": { - "interval": 80, - "frames": ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "], - }, - "runner": {"interval": 140, "frames": ["🚶 ", "🏃 "]}, - "pong": { - "interval": 80, - "frames": [ - "▐⠂ ▌", - "▐⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂▌", - "▐ ⠠▌", - "▐ ⡀▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐⠠ ▌", - ], - }, - "shark": { - "interval": 120, - "frames": [ - "▐|\\____________▌", - "▐_|\\___________▌", - "▐__|\\__________▌", - "▐___|\\_________▌", - "▐____|\\________▌", - "▐_____|\\_______▌", - "▐______|\\______▌", - "▐_______|\\_____▌", - "▐________|\\____▌", - "▐_________|\\___▌", - "▐__________|\\__▌", - "▐___________|\\_▌", - "▐____________|\\▌", - "▐____________/|▌", - "▐___________/|_▌", - "▐__________/|__▌", - "▐_________/|___▌", - "▐________/|____▌", - "▐_______/|_____▌", - "▐______/|______▌", - "▐_____/|_______▌", - "▐____/|________▌", - "▐___/|_________▌", - "▐__/|__________▌", - "▐_/|___________▌", - "▐/|____________▌", - ], - }, - "dqpb": {"interval": 100, "frames": "dqpb"}, - "weather": { - "interval": 100, - "frames": [ - "☀️ ", - "☀️ ", - "☀️ ", - "🌤 ", - "⛅️ ", - "🌥 ", - "☁️ ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "⛈ ", - "🌨 ", - "🌧 ", - "🌨 ", - "☁️ ", - "🌥 ", - "⛅️ ", - "🌤 ", - "☀️ ", - "☀️ ", - ], - }, - "christmas": {"interval": 400, "frames": "🌲🎄"}, - "grenade": { - "interval": 80, - "frames": [ - "، ", - "′ ", - " ´ ", - " ‾ ", - " ⸌", - " ⸊", - " |", - " ⁎", - " ⁕", - " ෴ ", - " ⁓", - " ", - " ", - " ", - ], - }, - "point": {"interval": 125, "frames": ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"]}, - "layer": {"interval": 150, "frames": "-=≡"}, - "betaWave": { - "interval": 80, - "frames": [ - "ρββββββ", - "βρβββββ", - "ββρββββ", - "βββρβββ", - "ββββρββ", - "βββββρβ", - "ββββββρ", - ], - }, - "aesthetic": { - "interval": 80, - "frames": [ - "▰▱▱▱▱▱▱", - "▰▰▱▱▱▱▱", - "▰▰▰▱▱▱▱", - "▰▰▰▰▱▱▱", - "▰▰▰▰▰▱▱", - "▰▰▰▰▰▰▱", - "▰▰▰▰▰▰▰", - "▰▱▱▱▱▱▱", - ], - }, -} diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py deleted file mode 100644 index 194564e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py +++ /dev/null @@ -1,16 +0,0 @@ -from typing import List, TypeVar - -T = TypeVar("T") - - -class Stack(List[T]): - """A small shim over builtin list.""" - - @property - def top(self) -> T: - """Get top of stack.""" - return self[-1] - - def push(self, item: T) -> None: - """Push an item on to the stack (append in stack nomenclature).""" - self.append(item) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py deleted file mode 100644 index a2ca6be..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py +++ /dev/null @@ -1,19 +0,0 @@ -""" -Timer context manager, only used in debug. - -""" - -from time import time - -import contextlib -from typing import Generator - - -@contextlib.contextmanager -def timer(subject: str = "time") -> Generator[None, None, None]: - """print the elapsed time. (only used in debugging)""" - start = time() - yield - elapsed = time() - start - elapsed_ms = elapsed * 1000 - print(f"{subject} elapsed {elapsed_ms:.1f}ms") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py deleted file mode 100644 index 2eba1b9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py +++ /dev/null @@ -1,661 +0,0 @@ -"""Light wrapper around the Win32 Console API - this module should only be imported on Windows - -The API that this module wraps is documented at https://docs.microsoft.com/en-us/windows/console/console-functions -""" - -import ctypes -import sys -from typing import Any - -windll: Any = None -if sys.platform == "win32": - windll = ctypes.LibraryLoader(ctypes.WinDLL) -else: - raise ImportError(f"{__name__} can only be imported on Windows") - -import time -from ctypes import Structure, byref, wintypes -from typing import IO, NamedTuple, Type, cast - -from pip._vendor.rich.color import ColorSystem -from pip._vendor.rich.style import Style - -STDOUT = -11 -ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4 - -COORD = wintypes._COORD - - -class LegacyWindowsError(Exception): - pass - - -class WindowsCoordinates(NamedTuple): - """Coordinates in the Windows Console API are (y, x), not (x, y). - This class is intended to prevent that confusion. - Rows and columns are indexed from 0. - This class can be used in place of wintypes._COORD in arguments and argtypes. - """ - - row: int - col: int - - @classmethod - def from_param(cls, value: "WindowsCoordinates") -> COORD: - """Converts a WindowsCoordinates into a wintypes _COORD structure. - This classmethod is internally called by ctypes to perform the conversion. - - Args: - value (WindowsCoordinates): The input coordinates to convert. - - Returns: - wintypes._COORD: The converted coordinates struct. - """ - return COORD(value.col, value.row) - - -class CONSOLE_SCREEN_BUFFER_INFO(Structure): - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", wintypes.WORD), - ("srWindow", wintypes.SMALL_RECT), - ("dwMaximumWindowSize", COORD), - ] - - -class CONSOLE_CURSOR_INFO(ctypes.Structure): - _fields_ = [("dwSize", wintypes.DWORD), ("bVisible", wintypes.BOOL)] - - -_GetStdHandle = windll.kernel32.GetStdHandle -_GetStdHandle.argtypes = [ - wintypes.DWORD, -] -_GetStdHandle.restype = wintypes.HANDLE - - -def GetStdHandle(handle: int = STDOUT) -> wintypes.HANDLE: - """Retrieves a handle to the specified standard device (standard input, standard output, or standard error). - - Args: - handle (int): Integer identifier for the handle. Defaults to -11 (stdout). - - Returns: - wintypes.HANDLE: The handle - """ - return cast(wintypes.HANDLE, _GetStdHandle(handle)) - - -_GetConsoleMode = windll.kernel32.GetConsoleMode -_GetConsoleMode.argtypes = [wintypes.HANDLE, wintypes.LPDWORD] -_GetConsoleMode.restype = wintypes.BOOL - - -def GetConsoleMode(std_handle: wintypes.HANDLE) -> int: - """Retrieves the current input mode of a console's input buffer - or the current output mode of a console screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - - Raises: - LegacyWindowsError: If any error occurs while calling the Windows console API. - - Returns: - int: Value representing the current console mode as documented at - https://docs.microsoft.com/en-us/windows/console/getconsolemode#parameters - """ - - console_mode = wintypes.DWORD() - success = bool(_GetConsoleMode(std_handle, console_mode)) - if not success: - raise LegacyWindowsError("Unable to get legacy Windows Console Mode") - return console_mode.value - - -_FillConsoleOutputCharacterW = windll.kernel32.FillConsoleOutputCharacterW -_FillConsoleOutputCharacterW.argtypes = [ - wintypes.HANDLE, - ctypes.c_char, - wintypes.DWORD, - cast(Type[COORD], WindowsCoordinates), - ctypes.POINTER(wintypes.DWORD), -] -_FillConsoleOutputCharacterW.restype = wintypes.BOOL - - -def FillConsoleOutputCharacter( - std_handle: wintypes.HANDLE, - char: str, - length: int, - start: WindowsCoordinates, -) -> int: - """Writes a character to the console screen buffer a specified number of times, beginning at the specified coordinates. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - char (str): The character to write. Must be a string of length 1. - length (int): The number of times to write the character. - start (WindowsCoordinates): The coordinates to start writing at. - - Returns: - int: The number of characters written. - """ - character = ctypes.c_char(char.encode()) - num_characters = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - _FillConsoleOutputCharacterW( - std_handle, - character, - num_characters, - start, - byref(num_written), - ) - return num_written.value - - -_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute -_FillConsoleOutputAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - wintypes.DWORD, - cast(Type[COORD], WindowsCoordinates), - ctypes.POINTER(wintypes.DWORD), -] -_FillConsoleOutputAttribute.restype = wintypes.BOOL - - -def FillConsoleOutputAttribute( - std_handle: wintypes.HANDLE, - attributes: int, - length: int, - start: WindowsCoordinates, -) -> int: - """Sets the character attributes for a specified number of character cells, - beginning at the specified coordinates in a screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - attributes (int): Integer value representing the foreground and background colours of the cells. - length (int): The number of cells to set the output attribute of. - start (WindowsCoordinates): The coordinates of the first cell whose attributes are to be set. - - Returns: - int: The number of cells whose attributes were actually set. - """ - num_cells = wintypes.DWORD(length) - style_attrs = wintypes.WORD(attributes) - num_written = wintypes.DWORD(0) - _FillConsoleOutputAttribute( - std_handle, style_attrs, num_cells, start, byref(num_written) - ) - return num_written.value - - -_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute -_SetConsoleTextAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, -] -_SetConsoleTextAttribute.restype = wintypes.BOOL - - -def SetConsoleTextAttribute( - std_handle: wintypes.HANDLE, attributes: wintypes.WORD -) -> bool: - """Set the colour attributes for all text written after this function is called. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - attributes (int): Integer value representing the foreground and background colours. - - - Returns: - bool: True if the attribute was set successfully, otherwise False. - """ - return bool(_SetConsoleTextAttribute(std_handle, attributes)) - - -_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo -_GetConsoleScreenBufferInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO), -] -_GetConsoleScreenBufferInfo.restype = wintypes.BOOL - - -def GetConsoleScreenBufferInfo( - std_handle: wintypes.HANDLE, -) -> CONSOLE_SCREEN_BUFFER_INFO: - """Retrieves information about the specified console screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - - Returns: - CONSOLE_SCREEN_BUFFER_INFO: A CONSOLE_SCREEN_BUFFER_INFO ctype struct contain information about - screen size, cursor position, colour attributes, and more.""" - console_screen_buffer_info = CONSOLE_SCREEN_BUFFER_INFO() - _GetConsoleScreenBufferInfo(std_handle, byref(console_screen_buffer_info)) - return console_screen_buffer_info - - -_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition -_SetConsoleCursorPosition.argtypes = [ - wintypes.HANDLE, - cast(Type[COORD], WindowsCoordinates), -] -_SetConsoleCursorPosition.restype = wintypes.BOOL - - -def SetConsoleCursorPosition( - std_handle: wintypes.HANDLE, coords: WindowsCoordinates -) -> bool: - """Set the position of the cursor in the console screen - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - coords (WindowsCoordinates): The coordinates to move the cursor to. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleCursorPosition(std_handle, coords)) - - -_GetConsoleCursorInfo = windll.kernel32.GetConsoleCursorInfo -_GetConsoleCursorInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_CURSOR_INFO), -] -_GetConsoleCursorInfo.restype = wintypes.BOOL - - -def GetConsoleCursorInfo( - std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO -) -> bool: - """Get the cursor info - used to get cursor visibility and width - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct that receives information - about the console's cursor. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_GetConsoleCursorInfo(std_handle, byref(cursor_info))) - - -_SetConsoleCursorInfo = windll.kernel32.SetConsoleCursorInfo -_SetConsoleCursorInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_CURSOR_INFO), -] -_SetConsoleCursorInfo.restype = wintypes.BOOL - - -def SetConsoleCursorInfo( - std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO -) -> bool: - """Set the cursor info - used for adjusting cursor visibility and width - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct containing the new cursor info. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleCursorInfo(std_handle, byref(cursor_info))) - - -_SetConsoleTitle = windll.kernel32.SetConsoleTitleW -_SetConsoleTitle.argtypes = [wintypes.LPCWSTR] -_SetConsoleTitle.restype = wintypes.BOOL - - -def SetConsoleTitle(title: str) -> bool: - """Sets the title of the current console window - - Args: - title (str): The new title of the console window. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleTitle(title)) - - -class LegacyWindowsTerm: - """This class allows interaction with the legacy Windows Console API. It should only be used in the context - of environments where virtual terminal processing is not available. However, if it is used in a Windows environment, - the entire API should work. - - Args: - file (IO[str]): The file which the Windows Console API HANDLE is retrieved from, defaults to sys.stdout. - """ - - BRIGHT_BIT = 8 - - # Indices are ANSI color numbers, values are the corresponding Windows Console API color numbers - ANSI_TO_WINDOWS = [ - 0, # black The Windows colours are defined in wincon.h as follows: - 4, # red define FOREGROUND_BLUE 0x0001 -- 0000 0001 - 2, # green define FOREGROUND_GREEN 0x0002 -- 0000 0010 - 6, # yellow define FOREGROUND_RED 0x0004 -- 0000 0100 - 1, # blue define FOREGROUND_INTENSITY 0x0008 -- 0000 1000 - 5, # magenta define BACKGROUND_BLUE 0x0010 -- 0001 0000 - 3, # cyan define BACKGROUND_GREEN 0x0020 -- 0010 0000 - 7, # white define BACKGROUND_RED 0x0040 -- 0100 0000 - 8, # bright black (grey) define BACKGROUND_INTENSITY 0x0080 -- 1000 0000 - 12, # bright red - 10, # bright green - 14, # bright yellow - 9, # bright blue - 13, # bright magenta - 11, # bright cyan - 15, # bright white - ] - - def __init__(self, file: "IO[str]") -> None: - handle = GetStdHandle(STDOUT) - self._handle = handle - default_text = GetConsoleScreenBufferInfo(handle).wAttributes - self._default_text = default_text - - self._default_fore = default_text & 7 - self._default_back = (default_text >> 4) & 7 - self._default_attrs = self._default_fore | (self._default_back << 4) - - self._file = file - self.write = file.write - self.flush = file.flush - - @property - def cursor_position(self) -> WindowsCoordinates: - """Returns the current position of the cursor (0-based) - - Returns: - WindowsCoordinates: The current cursor position. - """ - coord: COORD = GetConsoleScreenBufferInfo(self._handle).dwCursorPosition - return WindowsCoordinates(row=coord.Y, col=coord.X) - - @property - def screen_size(self) -> WindowsCoordinates: - """Returns the current size of the console screen buffer, in character columns and rows - - Returns: - WindowsCoordinates: The width and height of the screen as WindowsCoordinates. - """ - screen_size: COORD = GetConsoleScreenBufferInfo(self._handle).dwSize - return WindowsCoordinates(row=screen_size.Y, col=screen_size.X) - - def write_text(self, text: str) -> None: - """Write text directly to the terminal without any modification of styles - - Args: - text (str): The text to write to the console - """ - self.write(text) - self.flush() - - def write_styled(self, text: str, style: Style) -> None: - """Write styled text to the terminal. - - Args: - text (str): The text to write - style (Style): The style of the text - """ - color = style.color - bgcolor = style.bgcolor - if style.reverse: - color, bgcolor = bgcolor, color - - if color: - fore = color.downgrade(ColorSystem.WINDOWS).number - fore = fore if fore is not None else 7 # Default to ANSI 7: White - if style.bold: - fore = fore | self.BRIGHT_BIT - if style.dim: - fore = fore & ~self.BRIGHT_BIT - fore = self.ANSI_TO_WINDOWS[fore] - else: - fore = self._default_fore - - if bgcolor: - back = bgcolor.downgrade(ColorSystem.WINDOWS).number - back = back if back is not None else 0 # Default to ANSI 0: Black - back = self.ANSI_TO_WINDOWS[back] - else: - back = self._default_back - - assert fore is not None - assert back is not None - - SetConsoleTextAttribute( - self._handle, attributes=ctypes.c_ushort(fore | (back << 4)) - ) - self.write_text(text) - SetConsoleTextAttribute(self._handle, attributes=self._default_text) - - def move_cursor_to(self, new_position: WindowsCoordinates) -> None: - """Set the position of the cursor - - Args: - new_position (WindowsCoordinates): The WindowsCoordinates representing the new position of the cursor. - """ - if new_position.col < 0 or new_position.row < 0: - return - SetConsoleCursorPosition(self._handle, coords=new_position) - - def erase_line(self) -> None: - """Erase all content on the line the cursor is currently located at""" - screen_size = self.screen_size - cursor_position = self.cursor_position - cells_to_erase = screen_size.col - start_coordinates = WindowsCoordinates(row=cursor_position.row, col=0) - FillConsoleOutputCharacter( - self._handle, " ", length=cells_to_erase, start=start_coordinates - ) - FillConsoleOutputAttribute( - self._handle, - self._default_attrs, - length=cells_to_erase, - start=start_coordinates, - ) - - def erase_end_of_line(self) -> None: - """Erase all content from the cursor position to the end of that line""" - cursor_position = self.cursor_position - cells_to_erase = self.screen_size.col - cursor_position.col - FillConsoleOutputCharacter( - self._handle, " ", length=cells_to_erase, start=cursor_position - ) - FillConsoleOutputAttribute( - self._handle, - self._default_attrs, - length=cells_to_erase, - start=cursor_position, - ) - - def erase_start_of_line(self) -> None: - """Erase all content from the cursor position to the start of that line""" - row, col = self.cursor_position - start = WindowsCoordinates(row, 0) - FillConsoleOutputCharacter(self._handle, " ", length=col, start=start) - FillConsoleOutputAttribute( - self._handle, self._default_attrs, length=col, start=start - ) - - def move_cursor_up(self) -> None: - """Move the cursor up a single cell""" - cursor_position = self.cursor_position - SetConsoleCursorPosition( - self._handle, - coords=WindowsCoordinates( - row=cursor_position.row - 1, col=cursor_position.col - ), - ) - - def move_cursor_down(self) -> None: - """Move the cursor down a single cell""" - cursor_position = self.cursor_position - SetConsoleCursorPosition( - self._handle, - coords=WindowsCoordinates( - row=cursor_position.row + 1, - col=cursor_position.col, - ), - ) - - def move_cursor_forward(self) -> None: - """Move the cursor forward a single cell. Wrap to the next line if required.""" - row, col = self.cursor_position - if col == self.screen_size.col - 1: - row += 1 - col = 0 - else: - col += 1 - SetConsoleCursorPosition( - self._handle, coords=WindowsCoordinates(row=row, col=col) - ) - - def move_cursor_to_column(self, column: int) -> None: - """Move cursor to the column specified by the zero-based column index, staying on the same row - - Args: - column (int): The zero-based column index to move the cursor to. - """ - row, _ = self.cursor_position - SetConsoleCursorPosition(self._handle, coords=WindowsCoordinates(row, column)) - - def move_cursor_backward(self) -> None: - """Move the cursor backward a single cell. Wrap to the previous line if required.""" - row, col = self.cursor_position - if col == 0: - row -= 1 - col = self.screen_size.col - 1 - else: - col -= 1 - SetConsoleCursorPosition( - self._handle, coords=WindowsCoordinates(row=row, col=col) - ) - - def hide_cursor(self) -> None: - """Hide the cursor""" - current_cursor_size = self._get_cursor_size() - invisible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=0) - SetConsoleCursorInfo(self._handle, cursor_info=invisible_cursor) - - def show_cursor(self) -> None: - """Show the cursor""" - current_cursor_size = self._get_cursor_size() - visible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=1) - SetConsoleCursorInfo(self._handle, cursor_info=visible_cursor) - - def set_title(self, title: str) -> None: - """Set the title of the terminal window - - Args: - title (str): The new title of the console window - """ - assert len(title) < 255, "Console title must be less than 255 characters" - SetConsoleTitle(title) - - def _get_cursor_size(self) -> int: - """Get the percentage of the character cell that is filled by the cursor""" - cursor_info = CONSOLE_CURSOR_INFO() - GetConsoleCursorInfo(self._handle, cursor_info=cursor_info) - return int(cursor_info.dwSize) - - -if __name__ == "__main__": - handle = GetStdHandle() - - from pip._vendor.rich.console import Console - - console = Console() - - term = LegacyWindowsTerm(sys.stdout) - term.set_title("Win32 Console Examples") - - style = Style(color="black", bgcolor="red") - - heading = Style.parse("black on green") - - # Check colour output - console.rule("Checking colour output") - console.print("[on red]on red!") - console.print("[blue]blue!") - console.print("[yellow]yellow!") - console.print("[bold yellow]bold yellow!") - console.print("[bright_yellow]bright_yellow!") - console.print("[dim bright_yellow]dim bright_yellow!") - console.print("[italic cyan]italic cyan!") - console.print("[bold white on blue]bold white on blue!") - console.print("[reverse bold white on blue]reverse bold white on blue!") - console.print("[bold black on cyan]bold black on cyan!") - console.print("[black on green]black on green!") - console.print("[blue on green]blue on green!") - console.print("[white on black]white on black!") - console.print("[black on white]black on white!") - console.print("[#1BB152 on #DA812D]#1BB152 on #DA812D!") - - # Check cursor movement - console.rule("Checking cursor movement") - console.print() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("went back and wrapped to prev line") - time.sleep(1) - term.move_cursor_up() - term.write_text("we go up") - time.sleep(1) - term.move_cursor_down() - term.write_text("and down") - time.sleep(1) - term.move_cursor_up() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("we went up and back 2") - time.sleep(1) - term.move_cursor_down() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("we went down and back 2") - time.sleep(1) - - # Check erasing of lines - term.hide_cursor() - console.print() - console.rule("Checking line erasing") - console.print("\n...Deleting to the start of the line...") - term.write_text("The red arrow shows the cursor location, and direction of erase") - time.sleep(1) - term.move_cursor_to_column(16) - term.write_styled("<", Style.parse("black on red")) - term.move_cursor_backward() - time.sleep(1) - term.erase_start_of_line() - time.sleep(1) - - console.print("\n\n...And to the end of the line...") - term.write_text("The red arrow shows the cursor location, and direction of erase") - time.sleep(1) - - term.move_cursor_to_column(16) - term.write_styled(">", Style.parse("black on red")) - time.sleep(1) - term.erase_end_of_line() - time.sleep(1) - - console.print("\n\n...Now the whole line will be erased...") - term.write_styled("I'm going to disappear!", style=Style.parse("black on cyan")) - time.sleep(1) - term.erase_line() - - term.show_cursor() - print("\n") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py deleted file mode 100644 index 7520a9f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py +++ /dev/null @@ -1,71 +0,0 @@ -import sys -from dataclasses import dataclass - - -@dataclass -class WindowsConsoleFeatures: - """Windows features available.""" - - vt: bool = False - """The console supports VT codes.""" - truecolor: bool = False - """The console supports truecolor.""" - - -try: - import ctypes - from ctypes import LibraryLoader - - if sys.platform == "win32": - windll = LibraryLoader(ctypes.WinDLL) - else: - windll = None - raise ImportError("Not windows") - - from pip._vendor.rich._win32_console import ( - ENABLE_VIRTUAL_TERMINAL_PROCESSING, - GetConsoleMode, - GetStdHandle, - LegacyWindowsError, - ) - -except (AttributeError, ImportError, ValueError): - # Fallback if we can't load the Windows DLL - def get_windows_console_features() -> WindowsConsoleFeatures: - features = WindowsConsoleFeatures() - return features - -else: - - def get_windows_console_features() -> WindowsConsoleFeatures: - """Get windows console features. - - Returns: - WindowsConsoleFeatures: An instance of WindowsConsoleFeatures. - """ - handle = GetStdHandle() - try: - console_mode = GetConsoleMode(handle) - success = True - except LegacyWindowsError: - console_mode = 0 - success = False - vt = bool(success and console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) - truecolor = False - if vt: - win_version = sys.getwindowsversion() - truecolor = win_version.major > 10 or ( - win_version.major == 10 and win_version.build >= 15063 - ) - features = WindowsConsoleFeatures(vt=vt, truecolor=truecolor) - return features - - -if __name__ == "__main__": - import platform - - features = get_windows_console_features() - from pip._vendor.rich import print - - print(f'platform="{platform.system()}"') - print(repr(features)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py deleted file mode 100644 index 5ece056..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py +++ /dev/null @@ -1,56 +0,0 @@ -from typing import Iterable, Sequence, Tuple, cast - -from pip._vendor.rich._win32_console import LegacyWindowsTerm, WindowsCoordinates -from pip._vendor.rich.segment import ControlCode, ControlType, Segment - - -def legacy_windows_render(buffer: Iterable[Segment], term: LegacyWindowsTerm) -> None: - """Makes appropriate Windows Console API calls based on the segments in the buffer. - - Args: - buffer (Iterable[Segment]): Iterable of Segments to convert to Win32 API calls. - term (LegacyWindowsTerm): Used to call the Windows Console API. - """ - for text, style, control in buffer: - if not control: - if style: - term.write_styled(text, style) - else: - term.write_text(text) - else: - control_codes: Sequence[ControlCode] = control - for control_code in control_codes: - control_type = control_code[0] - if control_type == ControlType.CURSOR_MOVE_TO: - _, x, y = cast(Tuple[ControlType, int, int], control_code) - term.move_cursor_to(WindowsCoordinates(row=y - 1, col=x - 1)) - elif control_type == ControlType.CARRIAGE_RETURN: - term.write_text("\r") - elif control_type == ControlType.HOME: - term.move_cursor_to(WindowsCoordinates(0, 0)) - elif control_type == ControlType.CURSOR_UP: - term.move_cursor_up() - elif control_type == ControlType.CURSOR_DOWN: - term.move_cursor_down() - elif control_type == ControlType.CURSOR_FORWARD: - term.move_cursor_forward() - elif control_type == ControlType.CURSOR_BACKWARD: - term.move_cursor_backward() - elif control_type == ControlType.CURSOR_MOVE_TO_COLUMN: - _, column = cast(Tuple[ControlType, int], control_code) - term.move_cursor_to_column(column - 1) - elif control_type == ControlType.HIDE_CURSOR: - term.hide_cursor() - elif control_type == ControlType.SHOW_CURSOR: - term.show_cursor() - elif control_type == ControlType.ERASE_IN_LINE: - _, mode = cast(Tuple[ControlType, int], control_code) - if mode == 0: - term.erase_end_of_line() - elif mode == 1: - term.erase_start_of_line() - elif mode == 2: - term.erase_line() - elif control_type == ControlType.SET_WINDOW_TITLE: - _, title = cast(Tuple[ControlType, str], control_code) - term.set_title(title) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py deleted file mode 100644 index 2e94ff6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py +++ /dev/null @@ -1,93 +0,0 @@ -from __future__ import annotations - -import re -from typing import Iterable - -from ._loop import loop_last -from .cells import cell_len, chop_cells - -re_word = re.compile(r"\s*\S+\s*") - - -def words(text: str) -> Iterable[tuple[int, int, str]]: - """Yields each word from the text as a tuple - containing (start_index, end_index, word). A "word" in this context may - include the actual word and any whitespace to the right. - """ - position = 0 - word_match = re_word.match(text, position) - while word_match is not None: - start, end = word_match.span() - word = word_match.group(0) - yield start, end, word - word_match = re_word.match(text, end) - - -def divide_line(text: str, width: int, fold: bool = True) -> list[int]: - """Given a string of text, and a width (measured in cells), return a list - of cell offsets which the string should be split at in order for it to fit - within the given width. - - Args: - text: The text to examine. - width: The available cell width. - fold: If True, words longer than `width` will be folded onto a new line. - - Returns: - A list of indices to break the line at. - """ - break_positions: list[int] = [] # offsets to insert the breaks at - append = break_positions.append - cell_offset = 0 - _cell_len = cell_len - - for start, _end, word in words(text): - word_length = _cell_len(word.rstrip()) - remaining_space = width - cell_offset - word_fits_remaining_space = remaining_space >= word_length - - if word_fits_remaining_space: - # Simplest case - the word fits within the remaining width for this line. - cell_offset += _cell_len(word) - else: - # Not enough space remaining for this word on the current line. - if word_length > width: - # The word doesn't fit on any line, so we can't simply - # place it on the next line... - if fold: - # Fold the word across multiple lines. - folded_word = chop_cells(word, width=width) - for last, line in loop_last(folded_word): - if start: - append(start) - if last: - cell_offset = _cell_len(line) - else: - start += len(line) - else: - # Folding isn't allowed, so crop the word. - if start: - append(start) - cell_offset = _cell_len(word) - elif cell_offset and start: - # The word doesn't fit within the remaining space on the current - # line, but it *can* fit on to the next (empty) line. - append(start) - cell_offset = _cell_len(word) - - return break_positions - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - - console = Console(width=10) - console.print("12345 abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ 12345") - print(chop_cells("abcdefghijklmnopqrstuvwxyz", 10)) - - console = Console(width=20) - console.rule() - console.print("TextualはPythonの高速アプリケーション開発フレームワークです") - - console.rule() - console.print("アプリケーションは1670万色を使用でき") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py deleted file mode 100644 index e6e498e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py +++ /dev/null @@ -1,33 +0,0 @@ -from abc import ABC - - -class RichRenderable(ABC): - """An abstract base class for Rich renderables. - - Note that there is no need to extend this class, the intended use is to check if an - object supports the Rich renderable protocol. For example:: - - if isinstance(my_object, RichRenderable): - console.print(my_object) - - """ - - @classmethod - def __subclasshook__(cls, other: type) -> bool: - """Check if this class supports the rich render protocol.""" - return hasattr(other, "__rich_console__") or hasattr(other, "__rich__") - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.text import Text - - t = Text() - print(isinstance(Text, RichRenderable)) - print(isinstance(t, RichRenderable)) - - class Foo: - pass - - f = Foo() - print(isinstance(f, RichRenderable)) - print(isinstance("", RichRenderable)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/align.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/align.py deleted file mode 100644 index 330dcc5..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/align.py +++ /dev/null @@ -1,312 +0,0 @@ -import sys -from itertools import chain -from typing import TYPE_CHECKING, Iterable, Optional - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from pip._vendor.typing_extensions import Literal # pragma: no cover - -from .constrain import Constrain -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - -AlignMethod = Literal["left", "center", "right"] -VerticalAlignMethod = Literal["top", "middle", "bottom"] - - -class Align(JupyterMixin): - """Align a renderable by adding spaces if necessary. - - Args: - renderable (RenderableType): A console renderable. - align (AlignMethod): One of "left", "center", or "right"" - style (StyleType, optional): An optional style to apply to the background. - vertical (Optional[VerticalAlignMethod], optional): Optional vertical align, one of "top", "middle", or "bottom". Defaults to None. - pad (bool, optional): Pad the right with spaces. Defaults to True. - width (int, optional): Restrict contents to given width, or None to use default width. Defaults to None. - height (int, optional): Set height of align renderable, or None to fit to contents. Defaults to None. - - Raises: - ValueError: if ``align`` is not one of the expected values. - """ - - def __init__( - self, - renderable: "RenderableType", - align: AlignMethod = "left", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> None: - if align not in ("left", "center", "right"): - raise ValueError( - f'invalid value for align, expected "left", "center", or "right" (not {align!r})' - ) - if vertical is not None and vertical not in ("top", "middle", "bottom"): - raise ValueError( - f'invalid value for vertical, expected "top", "middle", or "bottom" (not {vertical!r})' - ) - self.renderable = renderable - self.align = align - self.style = style - self.vertical = vertical - self.pad = pad - self.width = width - self.height = height - - def __repr__(self) -> str: - return f"Align({self.renderable!r}, {self.align!r})" - - @classmethod - def left( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the left.""" - return cls( - renderable, - "left", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - @classmethod - def center( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the center.""" - return cls( - renderable, - "center", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - @classmethod - def right( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the right.""" - return cls( - renderable, - "right", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - align = self.align - width = console.measure(self.renderable, options=options).maximum - rendered = console.render( - Constrain( - self.renderable, width if self.width is None else min(width, self.width) - ), - options.update(height=None), - ) - lines = list(Segment.split_lines(rendered)) - width, height = Segment.get_shape(lines) - lines = Segment.set_shape(lines, width, height) - new_line = Segment.line() - excess_space = options.max_width - width - style = console.get_style(self.style) if self.style is not None else None - - def generate_segments() -> Iterable[Segment]: - if excess_space <= 0: - # Exact fit - for line in lines: - yield from line - yield new_line - - elif align == "left": - # Pad on the right - pad = Segment(" " * excess_space, style) if self.pad else None - for line in lines: - yield from line - if pad: - yield pad - yield new_line - - elif align == "center": - # Pad left and right - left = excess_space // 2 - pad = Segment(" " * left, style) - pad_right = ( - Segment(" " * (excess_space - left), style) if self.pad else None - ) - for line in lines: - if left: - yield pad - yield from line - if pad_right: - yield pad_right - yield new_line - - elif align == "right": - # Padding on left - pad = Segment(" " * excess_space, style) - for line in lines: - yield pad - yield from line - yield new_line - - blank_line = ( - Segment(f"{' ' * (self.width or options.max_width)}\n", style) - if self.pad - else Segment("\n") - ) - - def blank_lines(count: int) -> Iterable[Segment]: - if count > 0: - for _ in range(count): - yield blank_line - - vertical_height = self.height or options.height - iter_segments: Iterable[Segment] - if self.vertical and vertical_height is not None: - if self.vertical == "top": - bottom_space = vertical_height - height - iter_segments = chain(generate_segments(), blank_lines(bottom_space)) - elif self.vertical == "middle": - top_space = (vertical_height - height) // 2 - bottom_space = vertical_height - top_space - height - iter_segments = chain( - blank_lines(top_space), - generate_segments(), - blank_lines(bottom_space), - ) - else: # self.vertical == "bottom": - top_space = vertical_height - height - iter_segments = chain(blank_lines(top_space), generate_segments()) - else: - iter_segments = generate_segments() - if self.style: - style = console.get_style(self.style) - iter_segments = Segment.apply_style(iter_segments, style) - yield from iter_segments - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - measurement = Measurement.get(console, options, self.renderable) - return measurement - - -class VerticalCenter(JupyterMixin): - """Vertically aligns a renderable. - - Warn: - This class is deprecated and may be removed in a future version. Use Align class with - `vertical="middle"`. - - Args: - renderable (RenderableType): A renderable object. - style (StyleType, optional): An optional style to apply to the background. Defaults to None. - """ - - def __init__( - self, - renderable: "RenderableType", - style: Optional[StyleType] = None, - ) -> None: - self.renderable = renderable - self.style = style - - def __repr__(self) -> str: - return f"VerticalCenter({self.renderable!r})" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) if self.style is not None else None - lines = console.render_lines( - self.renderable, options.update(height=None), pad=False - ) - width, _height = Segment.get_shape(lines) - new_line = Segment.line() - height = options.height or options.size.height - top_space = (height - len(lines)) // 2 - bottom_space = height - top_space - len(lines) - blank_line = Segment(f"{' ' * width}", style) - - def blank_lines(count: int) -> Iterable[Segment]: - for _ in range(count): - yield blank_line - yield new_line - - if top_space > 0: - yield from blank_lines(top_space) - for line in lines: - yield from line - yield new_line - if bottom_space > 0: - yield from blank_lines(bottom_space) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - measurement = Measurement.get(console, options, self.renderable) - return measurement - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console, Group - from pip._vendor.rich.highlighter import ReprHighlighter - from pip._vendor.rich.panel import Panel - - highlighter = ReprHighlighter() - console = Console() - - panel = Panel( - Group( - Align.left(highlighter("align='left'")), - Align.center(highlighter("align='center'")), - Align.right(highlighter("align='right'")), - ), - width=60, - style="on dark_blue", - title="Align", - ) - - console.print( - Align.center(panel, vertical="middle", style="on red", height=console.height) - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py deleted file mode 100644 index 7de86ce..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py +++ /dev/null @@ -1,241 +0,0 @@ -import re -import sys -from contextlib import suppress -from typing import Iterable, NamedTuple, Optional - -from .color import Color -from .style import Style -from .text import Text - -re_ansi = re.compile( - r""" -(?:\x1b[0-?])| -(?:\x1b\](.*?)\x1b\\)| -(?:\x1b([(@-Z\\-_]|\[[0-?]*[ -/]*[@-~])) -""", - re.VERBOSE, -) - - -class _AnsiToken(NamedTuple): - """Result of ansi tokenized string.""" - - plain: str = "" - sgr: Optional[str] = "" - osc: Optional[str] = "" - - -def _ansi_tokenize(ansi_text: str) -> Iterable[_AnsiToken]: - """Tokenize a string in to plain text and ANSI codes. - - Args: - ansi_text (str): A String containing ANSI codes. - - Yields: - AnsiToken: A named tuple of (plain, sgr, osc) - """ - - position = 0 - sgr: Optional[str] - osc: Optional[str] - for match in re_ansi.finditer(ansi_text): - start, end = match.span(0) - osc, sgr = match.groups() - if start > position: - yield _AnsiToken(ansi_text[position:start]) - if sgr: - if sgr == "(": - position = end + 1 - continue - if sgr.endswith("m"): - yield _AnsiToken("", sgr[1:-1], osc) - else: - yield _AnsiToken("", sgr, osc) - position = end - if position < len(ansi_text): - yield _AnsiToken(ansi_text[position:]) - - -SGR_STYLE_MAP = { - 1: "bold", - 2: "dim", - 3: "italic", - 4: "underline", - 5: "blink", - 6: "blink2", - 7: "reverse", - 8: "conceal", - 9: "strike", - 21: "underline2", - 22: "not dim not bold", - 23: "not italic", - 24: "not underline", - 25: "not blink", - 26: "not blink2", - 27: "not reverse", - 28: "not conceal", - 29: "not strike", - 30: "color(0)", - 31: "color(1)", - 32: "color(2)", - 33: "color(3)", - 34: "color(4)", - 35: "color(5)", - 36: "color(6)", - 37: "color(7)", - 39: "default", - 40: "on color(0)", - 41: "on color(1)", - 42: "on color(2)", - 43: "on color(3)", - 44: "on color(4)", - 45: "on color(5)", - 46: "on color(6)", - 47: "on color(7)", - 49: "on default", - 51: "frame", - 52: "encircle", - 53: "overline", - 54: "not frame not encircle", - 55: "not overline", - 90: "color(8)", - 91: "color(9)", - 92: "color(10)", - 93: "color(11)", - 94: "color(12)", - 95: "color(13)", - 96: "color(14)", - 97: "color(15)", - 100: "on color(8)", - 101: "on color(9)", - 102: "on color(10)", - 103: "on color(11)", - 104: "on color(12)", - 105: "on color(13)", - 106: "on color(14)", - 107: "on color(15)", -} - - -class AnsiDecoder: - """Translate ANSI code in to styled Text.""" - - def __init__(self) -> None: - self.style = Style.null() - - def decode(self, terminal_text: str) -> Iterable[Text]: - """Decode ANSI codes in an iterable of lines. - - Args: - lines (Iterable[str]): An iterable of lines of terminal output. - - Yields: - Text: Marked up Text. - """ - for line in terminal_text.splitlines(): - yield self.decode_line(line) - - def decode_line(self, line: str) -> Text: - """Decode a line containing ansi codes. - - Args: - line (str): A line of terminal output. - - Returns: - Text: A Text instance marked up according to ansi codes. - """ - from_ansi = Color.from_ansi - from_rgb = Color.from_rgb - _Style = Style - text = Text() - append = text.append - line = line.rsplit("\r", 1)[-1] - for plain_text, sgr, osc in _ansi_tokenize(line): - if plain_text: - append(plain_text, self.style or None) - elif osc is not None: - if osc.startswith("8;"): - _params, semicolon, link = osc[2:].partition(";") - if semicolon: - self.style = self.style.update_link(link or None) - elif sgr is not None: - # Translate in to semi-colon separated codes - # Ignore invalid codes, because we want to be lenient - codes = [ - min(255, int(_code) if _code else 0) - for _code in sgr.split(";") - if _code.isdigit() or _code == "" - ] - iter_codes = iter(codes) - for code in iter_codes: - if code == 0: - # reset - self.style = _Style.null() - elif code in SGR_STYLE_MAP: - # styles - self.style += _Style.parse(SGR_STYLE_MAP[code]) - elif code == 38: - #  Foreground - with suppress(StopIteration): - color_type = next(iter_codes) - if color_type == 5: - self.style += _Style.from_color( - from_ansi(next(iter_codes)) - ) - elif color_type == 2: - self.style += _Style.from_color( - from_rgb( - next(iter_codes), - next(iter_codes), - next(iter_codes), - ) - ) - elif code == 48: - # Background - with suppress(StopIteration): - color_type = next(iter_codes) - if color_type == 5: - self.style += _Style.from_color( - None, from_ansi(next(iter_codes)) - ) - elif color_type == 2: - self.style += _Style.from_color( - None, - from_rgb( - next(iter_codes), - next(iter_codes), - next(iter_codes), - ), - ) - - return text - - -if sys.platform != "win32" and __name__ == "__main__": # pragma: no cover - import io - import os - import pty - import sys - - decoder = AnsiDecoder() - - stdout = io.BytesIO() - - def read(fd: int) -> bytes: - data = os.read(fd, 1024) - stdout.write(data) - return data - - pty.spawn(sys.argv[1:], read) - - from .console import Console - - console = Console(record=True) - - stdout_result = stdout.getvalue().decode("utf-8") - print(stdout_result) - - for line in decoder.decode(stdout_result): - console.print(line) - - console.save_html("stdout.html") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py deleted file mode 100644 index 022284b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py +++ /dev/null @@ -1,93 +0,0 @@ -from typing import Optional, Union - -from .color import Color -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style - -# There are left-aligned characters for 1/8 to 7/8, but -# the right-aligned characters exist only for 1/8 and 4/8. -BEGIN_BLOCK_ELEMENTS = ["█", "█", "█", "▐", "▐", "▐", "▕", "▕"] -END_BLOCK_ELEMENTS = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉"] -FULL_BLOCK = "█" - - -class Bar(JupyterMixin): - """Renders a solid block bar. - - Args: - size (float): Value for the end of the bar. - begin (float): Begin point (between 0 and size, inclusive). - end (float): End point (between 0 and size, inclusive). - width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None. - color (Union[Color, str], optional): Color of the bar. Defaults to "default". - bgcolor (Union[Color, str], optional): Color of bar background. Defaults to "default". - """ - - def __init__( - self, - size: float, - begin: float, - end: float, - *, - width: Optional[int] = None, - color: Union[Color, str] = "default", - bgcolor: Union[Color, str] = "default", - ): - self.size = size - self.begin = max(begin, 0) - self.end = min(end, size) - self.width = width - self.style = Style(color=color, bgcolor=bgcolor) - - def __repr__(self) -> str: - return f"Bar({self.size}, {self.begin}, {self.end})" - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = min( - self.width if self.width is not None else options.max_width, - options.max_width, - ) - - if self.begin >= self.end: - yield Segment(" " * width, self.style) - yield Segment.line() - return - - prefix_complete_eights = int(width * 8 * self.begin / self.size) - prefix_bar_count = prefix_complete_eights // 8 - prefix_eights_count = prefix_complete_eights % 8 - - body_complete_eights = int(width * 8 * self.end / self.size) - body_bar_count = body_complete_eights // 8 - body_eights_count = body_complete_eights % 8 - - # When start and end fall into the same cell, we ideally should render - # a symbol that's "center-aligned", but there is no good symbol in Unicode. - # In this case, we fall back to right-aligned block symbol for simplicity. - - prefix = " " * prefix_bar_count - if prefix_eights_count: - prefix += BEGIN_BLOCK_ELEMENTS[prefix_eights_count] - - body = FULL_BLOCK * body_bar_count - if body_eights_count: - body += END_BLOCK_ELEMENTS[body_eights_count] - - suffix = " " * (width - len(body)) - - yield Segment(prefix + body[len(prefix) :] + suffix, self.style) - yield Segment.line() - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return ( - Measurement(self.width, self.width) - if self.width is not None - else Measurement(4, options.max_width) - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/box.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/box.py deleted file mode 100644 index 0511a9e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/box.py +++ /dev/null @@ -1,480 +0,0 @@ -import sys -from typing import TYPE_CHECKING, Iterable, List - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from pip._vendor.typing_extensions import Literal # pragma: no cover - - -from ._loop import loop_last - -if TYPE_CHECKING: - from pip._vendor.rich.console import ConsoleOptions - - -class Box: - """Defines characters to render boxes. - - ┌─┬┐ top - │ ││ head - ├─┼┤ head_row - │ ││ mid - ├─┼┤ row - ├─┼┤ foot_row - │ ││ foot - └─┴┘ bottom - - Args: - box (str): Characters making up box. - ascii (bool, optional): True if this box uses ascii characters only. Default is False. - """ - - def __init__(self, box: str, *, ascii: bool = False) -> None: - self._box = box - self.ascii = ascii - line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines() - # top - self.top_left, self.top, self.top_divider, self.top_right = iter(line1) - # head - self.head_left, _, self.head_vertical, self.head_right = iter(line2) - # head_row - ( - self.head_row_left, - self.head_row_horizontal, - self.head_row_cross, - self.head_row_right, - ) = iter(line3) - - # mid - self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4) - # row - self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5) - # foot_row - ( - self.foot_row_left, - self.foot_row_horizontal, - self.foot_row_cross, - self.foot_row_right, - ) = iter(line6) - # foot - self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7) - # bottom - self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter( - line8 - ) - - def __repr__(self) -> str: - return "Box(...)" - - def __str__(self) -> str: - return self._box - - def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box": - """Substitute this box for another if it won't render due to platform issues. - - Args: - options (ConsoleOptions): Console options used in rendering. - safe (bool, optional): Substitute this for another Box if there are known problems - displaying on the platform (currently only relevant on Windows). Default is True. - - Returns: - Box: A different Box or the same Box. - """ - box = self - if options.legacy_windows and safe: - box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box) - if options.ascii_only and not box.ascii: - box = ASCII - return box - - def get_plain_headed_box(self) -> "Box": - """If this box uses special characters for the borders of the header, then - return the equivalent box that does not. - - Returns: - Box: The most similar Box that doesn't use header-specific box characters. - If the current Box already satisfies this criterion, then it's returned. - """ - return PLAIN_HEADED_SUBSTITUTIONS.get(self, self) - - def get_top(self, widths: Iterable[int]) -> str: - """Get the top of a simple box. - - Args: - widths (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - - parts: List[str] = [] - append = parts.append - append(self.top_left) - for last, width in loop_last(widths): - append(self.top * width) - if not last: - append(self.top_divider) - append(self.top_right) - return "".join(parts) - - def get_row( - self, - widths: Iterable[int], - level: Literal["head", "row", "foot", "mid"] = "row", - edge: bool = True, - ) -> str: - """Get the top of a simple box. - - Args: - width (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - if level == "head": - left = self.head_row_left - horizontal = self.head_row_horizontal - cross = self.head_row_cross - right = self.head_row_right - elif level == "row": - left = self.row_left - horizontal = self.row_horizontal - cross = self.row_cross - right = self.row_right - elif level == "mid": - left = self.mid_left - horizontal = " " - cross = self.mid_vertical - right = self.mid_right - elif level == "foot": - left = self.foot_row_left - horizontal = self.foot_row_horizontal - cross = self.foot_row_cross - right = self.foot_row_right - else: - raise ValueError("level must be 'head', 'row' or 'foot'") - - parts: List[str] = [] - append = parts.append - if edge: - append(left) - for last, width in loop_last(widths): - append(horizontal * width) - if not last: - append(cross) - if edge: - append(right) - return "".join(parts) - - def get_bottom(self, widths: Iterable[int]) -> str: - """Get the bottom of a simple box. - - Args: - widths (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - - parts: List[str] = [] - append = parts.append - append(self.bottom_left) - for last, width in loop_last(widths): - append(self.bottom * width) - if not last: - append(self.bottom_divider) - append(self.bottom_right) - return "".join(parts) - - -# fmt: off -ASCII: Box = Box( - "+--+\n" - "| ||\n" - "|-+|\n" - "| ||\n" - "|-+|\n" - "|-+|\n" - "| ||\n" - "+--+\n", - ascii=True, -) - -ASCII2: Box = Box( - "+-++\n" - "| ||\n" - "+-++\n" - "| ||\n" - "+-++\n" - "+-++\n" - "| ||\n" - "+-++\n", - ascii=True, -) - -ASCII_DOUBLE_HEAD: Box = Box( - "+-++\n" - "| ||\n" - "+=++\n" - "| ||\n" - "+-++\n" - "+-++\n" - "| ||\n" - "+-++\n", - ascii=True, -) - -SQUARE: Box = Box( - "┌─┬┐\n" - "│ ││\n" - "├─┼┤\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -SQUARE_DOUBLE_HEAD: Box = Box( - "┌─┬┐\n" - "│ ││\n" - "╞═╪╡\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -MINIMAL: Box = Box( - " ╷ \n" - " │ \n" - "╶─┼╴\n" - " │ \n" - "╶─┼╴\n" - "╶─┼╴\n" - " │ \n" - " ╵ \n" -) - - -MINIMAL_HEAVY_HEAD: Box = Box( - " ╷ \n" - " │ \n" - "╺━┿╸\n" - " │ \n" - "╶─┼╴\n" - "╶─┼╴\n" - " │ \n" - " ╵ \n" -) - -MINIMAL_DOUBLE_HEAD: Box = Box( - " ╷ \n" - " │ \n" - " ═╪ \n" - " │ \n" - " ─┼ \n" - " ─┼ \n" - " │ \n" - " ╵ \n" -) - - -SIMPLE: Box = Box( - " \n" - " \n" - " ── \n" - " \n" - " \n" - " ── \n" - " \n" - " \n" -) - -SIMPLE_HEAD: Box = Box( - " \n" - " \n" - " ── \n" - " \n" - " \n" - " \n" - " \n" - " \n" -) - - -SIMPLE_HEAVY: Box = Box( - " \n" - " \n" - " ━━ \n" - " \n" - " \n" - " ━━ \n" - " \n" - " \n" -) - - -HORIZONTALS: Box = Box( - " ── \n" - " \n" - " ── \n" - " \n" - " ── \n" - " ── \n" - " \n" - " ── \n" -) - -ROUNDED: Box = Box( - "╭─┬╮\n" - "│ ││\n" - "├─┼┤\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "╰─┴╯\n" -) - -HEAVY: Box = Box( - "┏━┳┓\n" - "┃ ┃┃\n" - "┣━╋┫\n" - "┃ ┃┃\n" - "┣━╋┫\n" - "┣━╋┫\n" - "┃ ┃┃\n" - "┗━┻┛\n" -) - -HEAVY_EDGE: Box = Box( - "┏━┯┓\n" - "┃ │┃\n" - "┠─┼┨\n" - "┃ │┃\n" - "┠─┼┨\n" - "┠─┼┨\n" - "┃ │┃\n" - "┗━┷┛\n" -) - -HEAVY_HEAD: Box = Box( - "┏━┳┓\n" - "┃ ┃┃\n" - "┡━╇┩\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -DOUBLE: Box = Box( - "╔═╦╗\n" - "║ ║║\n" - "╠═╬╣\n" - "║ ║║\n" - "╠═╬╣\n" - "╠═╬╣\n" - "║ ║║\n" - "╚═╩╝\n" -) - -DOUBLE_EDGE: Box = Box( - "╔═╤╗\n" - "║ │║\n" - "╟─┼╢\n" - "║ │║\n" - "╟─┼╢\n" - "╟─┼╢\n" - "║ │║\n" - "╚═╧╝\n" -) - -MARKDOWN: Box = Box( - " \n" - "| ||\n" - "|-||\n" - "| ||\n" - "|-||\n" - "|-||\n" - "| ||\n" - " \n", - ascii=True, -) -# fmt: on - -# Map Boxes that don't render with raster fonts on to equivalent that do -LEGACY_WINDOWS_SUBSTITUTIONS = { - ROUNDED: SQUARE, - MINIMAL_HEAVY_HEAD: MINIMAL, - SIMPLE_HEAVY: SIMPLE, - HEAVY: SQUARE, - HEAVY_EDGE: SQUARE, - HEAVY_HEAD: SQUARE, -} - -# Map headed boxes to their headerless equivalents -PLAIN_HEADED_SUBSTITUTIONS = { - HEAVY_HEAD: SQUARE, - SQUARE_DOUBLE_HEAD: SQUARE, - MINIMAL_DOUBLE_HEAD: MINIMAL, - MINIMAL_HEAVY_HEAD: MINIMAL, - ASCII_DOUBLE_HEAD: ASCII2, -} - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.columns import Columns - from pip._vendor.rich.panel import Panel - - from . import box as box - from .console import Console - from .table import Table - from .text import Text - - console = Console(record=True) - - BOXES = [ - "ASCII", - "ASCII2", - "ASCII_DOUBLE_HEAD", - "SQUARE", - "SQUARE_DOUBLE_HEAD", - "MINIMAL", - "MINIMAL_HEAVY_HEAD", - "MINIMAL_DOUBLE_HEAD", - "SIMPLE", - "SIMPLE_HEAD", - "SIMPLE_HEAVY", - "HORIZONTALS", - "ROUNDED", - "HEAVY", - "HEAVY_EDGE", - "HEAVY_HEAD", - "DOUBLE", - "DOUBLE_EDGE", - "MARKDOWN", - ] - - console.print(Panel("[bold green]Box Constants", style="green"), justify="center") - console.print() - - columns = Columns(expand=True, padding=2) - for box_name in sorted(BOXES): - table = Table( - show_footer=True, style="dim", border_style="not dim", expand=True - ) - table.add_column("Header 1", "Footer 1") - table.add_column("Header 2", "Footer 2") - table.add_row("Cell", "Cell") - table.add_row("Cell", "Cell") - table.box = getattr(box, box_name) - table.title = Text(f"box.{box_name}", style="magenta") - columns.add_renderable(table) - console.print(columns) - - # console.save_svg("box.svg") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py deleted file mode 100644 index a854622..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py +++ /dev/null @@ -1,174 +0,0 @@ -from __future__ import annotations - -from functools import lru_cache -from typing import Callable - -from ._cell_widths import CELL_WIDTHS - -# Ranges of unicode ordinals that produce a 1-cell wide character -# This is non-exhaustive, but covers most common Western characters -_SINGLE_CELL_UNICODE_RANGES: list[tuple[int, int]] = [ - (0x20, 0x7E), # Latin (excluding non-printable) - (0xA0, 0xAC), - (0xAE, 0x002FF), - (0x00370, 0x00482), # Greek / Cyrillic - (0x02500, 0x025FC), # Box drawing, box elements, geometric shapes - (0x02800, 0x028FF), # Braille -] - -# A set of characters that are a single cell wide -_SINGLE_CELLS = frozenset( - [ - character - for _start, _end in _SINGLE_CELL_UNICODE_RANGES - for character in map(chr, range(_start, _end + 1)) - ] -) - -# When called with a string this will return True if all -# characters are single-cell, otherwise False -_is_single_cell_widths: Callable[[str], bool] = _SINGLE_CELLS.issuperset - - -@lru_cache(4096) -def cached_cell_len(text: str) -> int: - """Get the number of cells required to display text. - - This method always caches, which may use up a lot of memory. It is recommended to use - `cell_len` over this method. - - Args: - text (str): Text to display. - - Returns: - int: Get the number of cells required to display text. - """ - if _is_single_cell_widths(text): - return len(text) - return sum(map(get_character_cell_size, text)) - - -def cell_len(text: str, _cell_len: Callable[[str], int] = cached_cell_len) -> int: - """Get the number of cells required to display text. - - Args: - text (str): Text to display. - - Returns: - int: Get the number of cells required to display text. - """ - if len(text) < 512: - return _cell_len(text) - if _is_single_cell_widths(text): - return len(text) - return sum(map(get_character_cell_size, text)) - - -@lru_cache(maxsize=4096) -def get_character_cell_size(character: str) -> int: - """Get the cell size of a character. - - Args: - character (str): A single character. - - Returns: - int: Number of cells (0, 1 or 2) occupied by that character. - """ - codepoint = ord(character) - _table = CELL_WIDTHS - lower_bound = 0 - upper_bound = len(_table) - 1 - index = (lower_bound + upper_bound) // 2 - while True: - start, end, width = _table[index] - if codepoint < start: - upper_bound = index - 1 - elif codepoint > end: - lower_bound = index + 1 - else: - return 0 if width == -1 else width - if upper_bound < lower_bound: - break - index = (lower_bound + upper_bound) // 2 - return 1 - - -def set_cell_size(text: str, total: int) -> str: - """Set the length of a string to fit within given number of cells.""" - - if _is_single_cell_widths(text): - size = len(text) - if size < total: - return text + " " * (total - size) - return text[:total] - - if total <= 0: - return "" - cell_size = cell_len(text) - if cell_size == total: - return text - if cell_size < total: - return text + " " * (total - cell_size) - - start = 0 - end = len(text) - - # Binary search until we find the right size - while True: - pos = (start + end) // 2 - before = text[: pos + 1] - before_len = cell_len(before) - if before_len == total + 1 and cell_len(before[-1]) == 2: - return before[:-1] + " " - if before_len == total: - return before - if before_len > total: - end = pos - else: - start = pos - - -def chop_cells( - text: str, - width: int, -) -> list[str]: - """Split text into lines such that each line fits within the available (cell) width. - - Args: - text: The text to fold such that it fits in the given width. - width: The width available (number of cells). - - Returns: - A list of strings such that each string in the list has cell width - less than or equal to the available width. - """ - _get_character_cell_size = get_character_cell_size - lines: list[list[str]] = [[]] - - append_new_line = lines.append - append_to_last_line = lines[-1].append - - total_width = 0 - - for character in text: - cell_width = _get_character_cell_size(character) - char_doesnt_fit = total_width + cell_width > width - - if char_doesnt_fit: - append_new_line([character]) - append_to_last_line = lines[-1].append - total_width = cell_width - else: - append_to_last_line(character) - total_width += cell_width - - return ["".join(line) for line in lines] - - -if __name__ == "__main__": # pragma: no cover - print(get_character_cell_size("😽")) - for line in chop_cells("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", 8): - print(line) - for n in range(80, 1, -1): - print(set_cell_size("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", n) + "|") - print("x" * n) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color.py deleted file mode 100644 index e2c23a6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color.py +++ /dev/null @@ -1,621 +0,0 @@ -import re -import sys -from colorsys import rgb_to_hls -from enum import IntEnum -from functools import lru_cache -from typing import TYPE_CHECKING, NamedTuple, Optional, Tuple - -from ._palettes import EIGHT_BIT_PALETTE, STANDARD_PALETTE, WINDOWS_PALETTE -from .color_triplet import ColorTriplet -from .repr import Result, rich_repr -from .terminal_theme import DEFAULT_TERMINAL_THEME - -if TYPE_CHECKING: # pragma: no cover - from .terminal_theme import TerminalTheme - from .text import Text - - -WINDOWS = sys.platform == "win32" - - -class ColorSystem(IntEnum): - """One of the 3 color system supported by terminals.""" - - STANDARD = 1 - EIGHT_BIT = 2 - TRUECOLOR = 3 - WINDOWS = 4 - - def __repr__(self) -> str: - return f"ColorSystem.{self.name}" - - def __str__(self) -> str: - return repr(self) - - -class ColorType(IntEnum): - """Type of color stored in Color class.""" - - DEFAULT = 0 - STANDARD = 1 - EIGHT_BIT = 2 - TRUECOLOR = 3 - WINDOWS = 4 - - def __repr__(self) -> str: - return f"ColorType.{self.name}" - - -ANSI_COLOR_NAMES = { - "black": 0, - "red": 1, - "green": 2, - "yellow": 3, - "blue": 4, - "magenta": 5, - "cyan": 6, - "white": 7, - "bright_black": 8, - "bright_red": 9, - "bright_green": 10, - "bright_yellow": 11, - "bright_blue": 12, - "bright_magenta": 13, - "bright_cyan": 14, - "bright_white": 15, - "grey0": 16, - "gray0": 16, - "navy_blue": 17, - "dark_blue": 18, - "blue3": 20, - "blue1": 21, - "dark_green": 22, - "deep_sky_blue4": 25, - "dodger_blue3": 26, - "dodger_blue2": 27, - "green4": 28, - "spring_green4": 29, - "turquoise4": 30, - "deep_sky_blue3": 32, - "dodger_blue1": 33, - "green3": 40, - "spring_green3": 41, - "dark_cyan": 36, - "light_sea_green": 37, - "deep_sky_blue2": 38, - "deep_sky_blue1": 39, - "spring_green2": 47, - "cyan3": 43, - "dark_turquoise": 44, - "turquoise2": 45, - "green1": 46, - "spring_green1": 48, - "medium_spring_green": 49, - "cyan2": 50, - "cyan1": 51, - "dark_red": 88, - "deep_pink4": 125, - "purple4": 55, - "purple3": 56, - "blue_violet": 57, - "orange4": 94, - "grey37": 59, - "gray37": 59, - "medium_purple4": 60, - "slate_blue3": 62, - "royal_blue1": 63, - "chartreuse4": 64, - "dark_sea_green4": 71, - "pale_turquoise4": 66, - "steel_blue": 67, - "steel_blue3": 68, - "cornflower_blue": 69, - "chartreuse3": 76, - "cadet_blue": 73, - "sky_blue3": 74, - "steel_blue1": 81, - "pale_green3": 114, - "sea_green3": 78, - "aquamarine3": 79, - "medium_turquoise": 80, - "chartreuse2": 112, - "sea_green2": 83, - "sea_green1": 85, - "aquamarine1": 122, - "dark_slate_gray2": 87, - "dark_magenta": 91, - "dark_violet": 128, - "purple": 129, - "light_pink4": 95, - "plum4": 96, - "medium_purple3": 98, - "slate_blue1": 99, - "yellow4": 106, - "wheat4": 101, - "grey53": 102, - "gray53": 102, - "light_slate_grey": 103, - "light_slate_gray": 103, - "medium_purple": 104, - "light_slate_blue": 105, - "dark_olive_green3": 149, - "dark_sea_green": 108, - "light_sky_blue3": 110, - "sky_blue2": 111, - "dark_sea_green3": 150, - "dark_slate_gray3": 116, - "sky_blue1": 117, - "chartreuse1": 118, - "light_green": 120, - "pale_green1": 156, - "dark_slate_gray1": 123, - "red3": 160, - "medium_violet_red": 126, - "magenta3": 164, - "dark_orange3": 166, - "indian_red": 167, - "hot_pink3": 168, - "medium_orchid3": 133, - "medium_orchid": 134, - "medium_purple2": 140, - "dark_goldenrod": 136, - "light_salmon3": 173, - "rosy_brown": 138, - "grey63": 139, - "gray63": 139, - "medium_purple1": 141, - "gold3": 178, - "dark_khaki": 143, - "navajo_white3": 144, - "grey69": 145, - "gray69": 145, - "light_steel_blue3": 146, - "light_steel_blue": 147, - "yellow3": 184, - "dark_sea_green2": 157, - "light_cyan3": 152, - "light_sky_blue1": 153, - "green_yellow": 154, - "dark_olive_green2": 155, - "dark_sea_green1": 193, - "pale_turquoise1": 159, - "deep_pink3": 162, - "magenta2": 200, - "hot_pink2": 169, - "orchid": 170, - "medium_orchid1": 207, - "orange3": 172, - "light_pink3": 174, - "pink3": 175, - "plum3": 176, - "violet": 177, - "light_goldenrod3": 179, - "tan": 180, - "misty_rose3": 181, - "thistle3": 182, - "plum2": 183, - "khaki3": 185, - "light_goldenrod2": 222, - "light_yellow3": 187, - "grey84": 188, - "gray84": 188, - "light_steel_blue1": 189, - "yellow2": 190, - "dark_olive_green1": 192, - "honeydew2": 194, - "light_cyan1": 195, - "red1": 196, - "deep_pink2": 197, - "deep_pink1": 199, - "magenta1": 201, - "orange_red1": 202, - "indian_red1": 204, - "hot_pink": 206, - "dark_orange": 208, - "salmon1": 209, - "light_coral": 210, - "pale_violet_red1": 211, - "orchid2": 212, - "orchid1": 213, - "orange1": 214, - "sandy_brown": 215, - "light_salmon1": 216, - "light_pink1": 217, - "pink1": 218, - "plum1": 219, - "gold1": 220, - "navajo_white1": 223, - "misty_rose1": 224, - "thistle1": 225, - "yellow1": 226, - "light_goldenrod1": 227, - "khaki1": 228, - "wheat1": 229, - "cornsilk1": 230, - "grey100": 231, - "gray100": 231, - "grey3": 232, - "gray3": 232, - "grey7": 233, - "gray7": 233, - "grey11": 234, - "gray11": 234, - "grey15": 235, - "gray15": 235, - "grey19": 236, - "gray19": 236, - "grey23": 237, - "gray23": 237, - "grey27": 238, - "gray27": 238, - "grey30": 239, - "gray30": 239, - "grey35": 240, - "gray35": 240, - "grey39": 241, - "gray39": 241, - "grey42": 242, - "gray42": 242, - "grey46": 243, - "gray46": 243, - "grey50": 244, - "gray50": 244, - "grey54": 245, - "gray54": 245, - "grey58": 246, - "gray58": 246, - "grey62": 247, - "gray62": 247, - "grey66": 248, - "gray66": 248, - "grey70": 249, - "gray70": 249, - "grey74": 250, - "gray74": 250, - "grey78": 251, - "gray78": 251, - "grey82": 252, - "gray82": 252, - "grey85": 253, - "gray85": 253, - "grey89": 254, - "gray89": 254, - "grey93": 255, - "gray93": 255, -} - - -class ColorParseError(Exception): - """The color could not be parsed.""" - - -RE_COLOR = re.compile( - r"""^ -\#([0-9a-f]{6})$| -color\(([0-9]{1,3})\)$| -rgb\(([\d\s,]+)\)$ -""", - re.VERBOSE, -) - - -@rich_repr -class Color(NamedTuple): - """Terminal color definition.""" - - name: str - """The name of the color (typically the input to Color.parse).""" - type: ColorType - """The type of the color.""" - number: Optional[int] = None - """The color number, if a standard color, or None.""" - triplet: Optional[ColorTriplet] = None - """A triplet of color components, if an RGB color.""" - - def __rich__(self) -> "Text": - """Displays the actual color if Rich printed.""" - from .style import Style - from .text import Text - - return Text.assemble( - f"", - ) - - def __rich_repr__(self) -> Result: - yield self.name - yield self.type - yield "number", self.number, None - yield "triplet", self.triplet, None - - @property - def system(self) -> ColorSystem: - """Get the native color system for this color.""" - if self.type == ColorType.DEFAULT: - return ColorSystem.STANDARD - return ColorSystem(int(self.type)) - - @property - def is_system_defined(self) -> bool: - """Check if the color is ultimately defined by the system.""" - return self.system not in (ColorSystem.EIGHT_BIT, ColorSystem.TRUECOLOR) - - @property - def is_default(self) -> bool: - """Check if the color is a default color.""" - return self.type == ColorType.DEFAULT - - def get_truecolor( - self, theme: Optional["TerminalTheme"] = None, foreground: bool = True - ) -> ColorTriplet: - """Get an equivalent color triplet for this color. - - Args: - theme (TerminalTheme, optional): Optional terminal theme, or None to use default. Defaults to None. - foreground (bool, optional): True for a foreground color, or False for background. Defaults to True. - - Returns: - ColorTriplet: A color triplet containing RGB components. - """ - - if theme is None: - theme = DEFAULT_TERMINAL_THEME - if self.type == ColorType.TRUECOLOR: - assert self.triplet is not None - return self.triplet - elif self.type == ColorType.EIGHT_BIT: - assert self.number is not None - return EIGHT_BIT_PALETTE[self.number] - elif self.type == ColorType.STANDARD: - assert self.number is not None - return theme.ansi_colors[self.number] - elif self.type == ColorType.WINDOWS: - assert self.number is not None - return WINDOWS_PALETTE[self.number] - else: # self.type == ColorType.DEFAULT: - assert self.number is None - return theme.foreground_color if foreground else theme.background_color - - @classmethod - def from_ansi(cls, number: int) -> "Color": - """Create a Color number from it's 8-bit ansi number. - - Args: - number (int): A number between 0-255 inclusive. - - Returns: - Color: A new Color instance. - """ - return cls( - name=f"color({number})", - type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), - number=number, - ) - - @classmethod - def from_triplet(cls, triplet: "ColorTriplet") -> "Color": - """Create a truecolor RGB color from a triplet of values. - - Args: - triplet (ColorTriplet): A color triplet containing red, green and blue components. - - Returns: - Color: A new color object. - """ - return cls(name=triplet.hex, type=ColorType.TRUECOLOR, triplet=triplet) - - @classmethod - def from_rgb(cls, red: float, green: float, blue: float) -> "Color": - """Create a truecolor from three color components in the range(0->255). - - Args: - red (float): Red component in range 0-255. - green (float): Green component in range 0-255. - blue (float): Blue component in range 0-255. - - Returns: - Color: A new color object. - """ - return cls.from_triplet(ColorTriplet(int(red), int(green), int(blue))) - - @classmethod - def default(cls) -> "Color": - """Get a Color instance representing the default color. - - Returns: - Color: Default color. - """ - return cls(name="default", type=ColorType.DEFAULT) - - @classmethod - @lru_cache(maxsize=1024) - def parse(cls, color: str) -> "Color": - """Parse a color definition.""" - original_color = color - color = color.lower().strip() - - if color == "default": - return cls(color, type=ColorType.DEFAULT) - - color_number = ANSI_COLOR_NAMES.get(color) - if color_number is not None: - return cls( - color, - type=(ColorType.STANDARD if color_number < 16 else ColorType.EIGHT_BIT), - number=color_number, - ) - - color_match = RE_COLOR.match(color) - if color_match is None: - raise ColorParseError(f"{original_color!r} is not a valid color") - - color_24, color_8, color_rgb = color_match.groups() - if color_24: - triplet = ColorTriplet( - int(color_24[0:2], 16), int(color_24[2:4], 16), int(color_24[4:6], 16) - ) - return cls(color, ColorType.TRUECOLOR, triplet=triplet) - - elif color_8: - number = int(color_8) - if number > 255: - raise ColorParseError(f"color number must be <= 255 in {color!r}") - return cls( - color, - type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), - number=number, - ) - - else: # color_rgb: - components = color_rgb.split(",") - if len(components) != 3: - raise ColorParseError( - f"expected three components in {original_color!r}" - ) - red, green, blue = components - triplet = ColorTriplet(int(red), int(green), int(blue)) - if not all(component <= 255 for component in triplet): - raise ColorParseError( - f"color components must be <= 255 in {original_color!r}" - ) - return cls(color, ColorType.TRUECOLOR, triplet=triplet) - - @lru_cache(maxsize=1024) - def get_ansi_codes(self, foreground: bool = True) -> Tuple[str, ...]: - """Get the ANSI escape codes for this color.""" - _type = self.type - if _type == ColorType.DEFAULT: - return ("39" if foreground else "49",) - - elif _type == ColorType.WINDOWS: - number = self.number - assert number is not None - fore, back = (30, 40) if number < 8 else (82, 92) - return (str(fore + number if foreground else back + number),) - - elif _type == ColorType.STANDARD: - number = self.number - assert number is not None - fore, back = (30, 40) if number < 8 else (82, 92) - return (str(fore + number if foreground else back + number),) - - elif _type == ColorType.EIGHT_BIT: - assert self.number is not None - return ("38" if foreground else "48", "5", str(self.number)) - - else: # self.standard == ColorStandard.TRUECOLOR: - assert self.triplet is not None - red, green, blue = self.triplet - return ("38" if foreground else "48", "2", str(red), str(green), str(blue)) - - @lru_cache(maxsize=1024) - def downgrade(self, system: ColorSystem) -> "Color": - """Downgrade a color system to a system with fewer colors.""" - - if self.type in (ColorType.DEFAULT, system): - return self - # Convert to 8-bit color from truecolor color - if system == ColorSystem.EIGHT_BIT and self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - _h, l, s = rgb_to_hls(*self.triplet.normalized) - # If saturation is under 15% assume it is grayscale - if s < 0.15: - gray = round(l * 25.0) - if gray == 0: - color_number = 16 - elif gray == 25: - color_number = 231 - else: - color_number = 231 + gray - return Color(self.name, ColorType.EIGHT_BIT, number=color_number) - - red, green, blue = self.triplet - six_red = red / 95 if red < 95 else 1 + (red - 95) / 40 - six_green = green / 95 if green < 95 else 1 + (green - 95) / 40 - six_blue = blue / 95 if blue < 95 else 1 + (blue - 95) / 40 - - color_number = ( - 16 + 36 * round(six_red) + 6 * round(six_green) + round(six_blue) - ) - return Color(self.name, ColorType.EIGHT_BIT, number=color_number) - - # Convert to standard from truecolor or 8-bit - elif system == ColorSystem.STANDARD: - if self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - triplet = self.triplet - else: # self.system == ColorSystem.EIGHT_BIT - assert self.number is not None - triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) - - color_number = STANDARD_PALETTE.match(triplet) - return Color(self.name, ColorType.STANDARD, number=color_number) - - elif system == ColorSystem.WINDOWS: - if self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - triplet = self.triplet - else: # self.system == ColorSystem.EIGHT_BIT - assert self.number is not None - if self.number < 16: - return Color(self.name, ColorType.WINDOWS, number=self.number) - triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) - - color_number = WINDOWS_PALETTE.match(triplet) - return Color(self.name, ColorType.WINDOWS, number=color_number) - - return self - - -def parse_rgb_hex(hex_color: str) -> ColorTriplet: - """Parse six hex characters in to RGB triplet.""" - assert len(hex_color) == 6, "must be 6 characters" - color = ColorTriplet( - int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16) - ) - return color - - -def blend_rgb( - color1: ColorTriplet, color2: ColorTriplet, cross_fade: float = 0.5 -) -> ColorTriplet: - """Blend one RGB color in to another.""" - r1, g1, b1 = color1 - r2, g2, b2 = color2 - new_color = ColorTriplet( - int(r1 + (r2 - r1) * cross_fade), - int(g1 + (g2 - g1) * cross_fade), - int(b1 + (b2 - b1) * cross_fade), - ) - return new_color - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - from .table import Table - from .text import Text - - console = Console() - - table = Table(show_footer=False, show_edge=True) - table.add_column("Color", width=10, overflow="ellipsis") - table.add_column("Number", justify="right", style="yellow") - table.add_column("Name", style="green") - table.add_column("Hex", style="blue") - table.add_column("RGB", style="magenta") - - colors = sorted((v, k) for k, v in ANSI_COLOR_NAMES.items()) - for color_number, name in colors: - if "grey" in name: - continue - color_cell = Text(" " * 10, style=f"on {name}") - if color_number < 16: - table.add_row(color_cell, f"{color_number}", Text(f'"{name}"')) - else: - color = EIGHT_BIT_PALETTE[color_number] # type: ignore[has-type] - table.add_row( - color_cell, str(color_number), Text(f'"{name}"'), color.hex, color.rgb - ) - - console.print(table) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py deleted file mode 100644 index 02cab32..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py +++ /dev/null @@ -1,38 +0,0 @@ -from typing import NamedTuple, Tuple - - -class ColorTriplet(NamedTuple): - """The red, green, and blue components of a color.""" - - red: int - """Red component in 0 to 255 range.""" - green: int - """Green component in 0 to 255 range.""" - blue: int - """Blue component in 0 to 255 range.""" - - @property - def hex(self) -> str: - """get the color triplet in CSS style.""" - red, green, blue = self - return f"#{red:02x}{green:02x}{blue:02x}" - - @property - def rgb(self) -> str: - """The color in RGB format. - - Returns: - str: An rgb color, e.g. ``"rgb(100,23,255)"``. - """ - red, green, blue = self - return f"rgb({red},{green},{blue})" - - @property - def normalized(self) -> Tuple[float, float, float]: - """Convert components into floats between 0 and 1. - - Returns: - Tuple[float, float, float]: A tuple of three normalized colour components. - """ - red, green, blue = self - return red / 255.0, green / 255.0, blue / 255.0 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py deleted file mode 100644 index 669a3a7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py +++ /dev/null @@ -1,187 +0,0 @@ -from collections import defaultdict -from itertools import chain -from operator import itemgetter -from typing import Dict, Iterable, List, Optional, Tuple - -from .align import Align, AlignMethod -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .constrain import Constrain -from .measure import Measurement -from .padding import Padding, PaddingDimensions -from .table import Table -from .text import TextType -from .jupyter import JupyterMixin - - -class Columns(JupyterMixin): - """Display renderables in neat columns. - - Args: - renderables (Iterable[RenderableType]): Any number of Rich renderables (including str). - width (int, optional): The desired width of the columns, or None to auto detect. Defaults to None. - padding (PaddingDimensions, optional): Optional padding around cells. Defaults to (0, 1). - expand (bool, optional): Expand columns to full width. Defaults to False. - equal (bool, optional): Arrange in to equal sized columns. Defaults to False. - column_first (bool, optional): Align items from top to bottom (rather than left to right). Defaults to False. - right_to_left (bool, optional): Start column from right hand side. Defaults to False. - align (str, optional): Align value ("left", "right", or "center") or None for default. Defaults to None. - title (TextType, optional): Optional title for Columns. - """ - - def __init__( - self, - renderables: Optional[Iterable[RenderableType]] = None, - padding: PaddingDimensions = (0, 1), - *, - width: Optional[int] = None, - expand: bool = False, - equal: bool = False, - column_first: bool = False, - right_to_left: bool = False, - align: Optional[AlignMethod] = None, - title: Optional[TextType] = None, - ) -> None: - self.renderables = list(renderables or []) - self.width = width - self.padding = padding - self.expand = expand - self.equal = equal - self.column_first = column_first - self.right_to_left = right_to_left - self.align: Optional[AlignMethod] = align - self.title = title - - def add_renderable(self, renderable: RenderableType) -> None: - """Add a renderable to the columns. - - Args: - renderable (RenderableType): Any renderable object. - """ - self.renderables.append(renderable) - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - render_str = console.render_str - renderables = [ - render_str(renderable) if isinstance(renderable, str) else renderable - for renderable in self.renderables - ] - if not renderables: - return - _top, right, _bottom, left = Padding.unpack(self.padding) - width_padding = max(left, right) - max_width = options.max_width - widths: Dict[int, int] = defaultdict(int) - column_count = len(renderables) - - get_measurement = Measurement.get - renderable_widths = [ - get_measurement(console, options, renderable).maximum - for renderable in renderables - ] - if self.equal: - renderable_widths = [max(renderable_widths)] * len(renderable_widths) - - def iter_renderables( - column_count: int, - ) -> Iterable[Tuple[int, Optional[RenderableType]]]: - item_count = len(renderables) - if self.column_first: - width_renderables = list(zip(renderable_widths, renderables)) - - column_lengths: List[int] = [item_count // column_count] * column_count - for col_no in range(item_count % column_count): - column_lengths[col_no] += 1 - - row_count = (item_count + column_count - 1) // column_count - cells = [[-1] * column_count for _ in range(row_count)] - row = col = 0 - for index in range(item_count): - cells[row][col] = index - column_lengths[col] -= 1 - if column_lengths[col]: - row += 1 - else: - col += 1 - row = 0 - for index in chain.from_iterable(cells): - if index == -1: - break - yield width_renderables[index] - else: - yield from zip(renderable_widths, renderables) - # Pad odd elements with spaces - if item_count % column_count: - for _ in range(column_count - (item_count % column_count)): - yield 0, None - - table = Table.grid(padding=self.padding, collapse_padding=True, pad_edge=False) - table.expand = self.expand - table.title = self.title - - if self.width is not None: - column_count = (max_width) // (self.width + width_padding) - for _ in range(column_count): - table.add_column(width=self.width) - else: - while column_count > 1: - widths.clear() - column_no = 0 - for renderable_width, _ in iter_renderables(column_count): - widths[column_no] = max(widths[column_no], renderable_width) - total_width = sum(widths.values()) + width_padding * ( - len(widths) - 1 - ) - if total_width > max_width: - column_count = len(widths) - 1 - break - else: - column_no = (column_no + 1) % column_count - else: - break - - get_renderable = itemgetter(1) - _renderables = [ - get_renderable(_renderable) - for _renderable in iter_renderables(column_count) - ] - if self.equal: - _renderables = [ - None - if renderable is None - else Constrain(renderable, renderable_widths[0]) - for renderable in _renderables - ] - if self.align: - align = self.align - _Align = Align - _renderables = [ - None if renderable is None else _Align(renderable, align) - for renderable in _renderables - ] - - right_to_left = self.right_to_left - add_row = table.add_row - for start in range(0, len(_renderables), column_count): - row = _renderables[start : start + column_count] - if right_to_left: - row = row[::-1] - add_row(*row) - yield table - - -if __name__ == "__main__": # pragma: no cover - import os - - console = Console() - - files = [f"{i} {s}" for i, s in enumerate(sorted(os.listdir()))] - columns = Columns(files, padding=(0, 1), expand=False, equal=False) - console.print(columns) - console.rule() - columns.column_first = True - console.print(columns) - columns.right_to_left = True - console.rule() - console.print(columns) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/console.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/console.py deleted file mode 100644 index 5728845..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/console.py +++ /dev/null @@ -1,2661 +0,0 @@ -import inspect -import os -import sys -import threading -import zlib -from abc import ABC, abstractmethod -from dataclasses import dataclass, field -from datetime import datetime -from functools import wraps -from getpass import getpass -from html import escape -from inspect import isclass -from itertools import islice -from math import ceil -from time import monotonic -from types import FrameType, ModuleType, TracebackType -from typing import ( - IO, - TYPE_CHECKING, - Any, - Callable, - Dict, - Iterable, - List, - Mapping, - NamedTuple, - Optional, - TextIO, - Tuple, - Type, - Union, - cast, -) - -from pip._vendor.rich._null_file import NULL_FILE - -if sys.version_info >= (3, 8): - from typing import Literal, Protocol, runtime_checkable -else: - from pip._vendor.typing_extensions import ( - Literal, - Protocol, - runtime_checkable, - ) # pragma: no cover - -from . import errors, themes -from ._emoji_replace import _emoji_replace -from ._export_format import CONSOLE_HTML_FORMAT, CONSOLE_SVG_FORMAT -from ._fileno import get_fileno -from ._log_render import FormatTimeCallable, LogRender -from .align import Align, AlignMethod -from .color import ColorSystem, blend_rgb -from .control import Control -from .emoji import EmojiVariant -from .highlighter import NullHighlighter, ReprHighlighter -from .markup import render as render_markup -from .measure import Measurement, measure_renderables -from .pager import Pager, SystemPager -from .pretty import Pretty, is_expandable -from .protocol import rich_cast -from .region import Region -from .scope import render_scope -from .screen import Screen -from .segment import Segment -from .style import Style, StyleType -from .styled import Styled -from .terminal_theme import DEFAULT_TERMINAL_THEME, SVG_EXPORT_THEME, TerminalTheme -from .text import Text, TextType -from .theme import Theme, ThemeStack - -if TYPE_CHECKING: - from ._windows import WindowsConsoleFeatures - from .live import Live - from .status import Status - -JUPYTER_DEFAULT_COLUMNS = 115 -JUPYTER_DEFAULT_LINES = 100 -WINDOWS = sys.platform == "win32" - -HighlighterType = Callable[[Union[str, "Text"]], "Text"] -JustifyMethod = Literal["default", "left", "center", "right", "full"] -OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"] - - -class NoChange: - pass - - -NO_CHANGE = NoChange() - -try: - _STDIN_FILENO = sys.__stdin__.fileno() # type: ignore[union-attr] -except Exception: - _STDIN_FILENO = 0 -try: - _STDOUT_FILENO = sys.__stdout__.fileno() # type: ignore[union-attr] -except Exception: - _STDOUT_FILENO = 1 -try: - _STDERR_FILENO = sys.__stderr__.fileno() # type: ignore[union-attr] -except Exception: - _STDERR_FILENO = 2 - -_STD_STREAMS = (_STDIN_FILENO, _STDOUT_FILENO, _STDERR_FILENO) -_STD_STREAMS_OUTPUT = (_STDOUT_FILENO, _STDERR_FILENO) - - -_TERM_COLORS = { - "kitty": ColorSystem.EIGHT_BIT, - "256color": ColorSystem.EIGHT_BIT, - "16color": ColorSystem.STANDARD, -} - - -class ConsoleDimensions(NamedTuple): - """Size of the terminal.""" - - width: int - """The width of the console in 'cells'.""" - height: int - """The height of the console in lines.""" - - -@dataclass -class ConsoleOptions: - """Options for __rich_console__ method.""" - - size: ConsoleDimensions - """Size of console.""" - legacy_windows: bool - """legacy_windows: flag for legacy windows.""" - min_width: int - """Minimum width of renderable.""" - max_width: int - """Maximum width of renderable.""" - is_terminal: bool - """True if the target is a terminal, otherwise False.""" - encoding: str - """Encoding of terminal.""" - max_height: int - """Height of container (starts as terminal)""" - justify: Optional[JustifyMethod] = None - """Justify value override for renderable.""" - overflow: Optional[OverflowMethod] = None - """Overflow value override for renderable.""" - no_wrap: Optional[bool] = False - """Disable wrapping for text.""" - highlight: Optional[bool] = None - """Highlight override for render_str.""" - markup: Optional[bool] = None - """Enable markup when rendering strings.""" - height: Optional[int] = None - - @property - def ascii_only(self) -> bool: - """Check if renderables should use ascii only.""" - return not self.encoding.startswith("utf") - - def copy(self) -> "ConsoleOptions": - """Return a copy of the options. - - Returns: - ConsoleOptions: a copy of self. - """ - options: ConsoleOptions = ConsoleOptions.__new__(ConsoleOptions) - options.__dict__ = self.__dict__.copy() - return options - - def update( - self, - *, - width: Union[int, NoChange] = NO_CHANGE, - min_width: Union[int, NoChange] = NO_CHANGE, - max_width: Union[int, NoChange] = NO_CHANGE, - justify: Union[Optional[JustifyMethod], NoChange] = NO_CHANGE, - overflow: Union[Optional[OverflowMethod], NoChange] = NO_CHANGE, - no_wrap: Union[Optional[bool], NoChange] = NO_CHANGE, - highlight: Union[Optional[bool], NoChange] = NO_CHANGE, - markup: Union[Optional[bool], NoChange] = NO_CHANGE, - height: Union[Optional[int], NoChange] = NO_CHANGE, - ) -> "ConsoleOptions": - """Update values, return a copy.""" - options = self.copy() - if not isinstance(width, NoChange): - options.min_width = options.max_width = max(0, width) - if not isinstance(min_width, NoChange): - options.min_width = min_width - if not isinstance(max_width, NoChange): - options.max_width = max_width - if not isinstance(justify, NoChange): - options.justify = justify - if not isinstance(overflow, NoChange): - options.overflow = overflow - if not isinstance(no_wrap, NoChange): - options.no_wrap = no_wrap - if not isinstance(highlight, NoChange): - options.highlight = highlight - if not isinstance(markup, NoChange): - options.markup = markup - if not isinstance(height, NoChange): - if height is not None: - options.max_height = height - options.height = None if height is None else max(0, height) - return options - - def update_width(self, width: int) -> "ConsoleOptions": - """Update just the width, return a copy. - - Args: - width (int): New width (sets both min_width and max_width) - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.min_width = options.max_width = max(0, width) - return options - - def update_height(self, height: int) -> "ConsoleOptions": - """Update the height, and return a copy. - - Args: - height (int): New height - - Returns: - ~ConsoleOptions: New Console options instance. - """ - options = self.copy() - options.max_height = options.height = height - return options - - def reset_height(self) -> "ConsoleOptions": - """Return a copy of the options with height set to ``None``. - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.height = None - return options - - def update_dimensions(self, width: int, height: int) -> "ConsoleOptions": - """Update the width and height, and return a copy. - - Args: - width (int): New width (sets both min_width and max_width). - height (int): New height. - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.min_width = options.max_width = max(0, width) - options.height = options.max_height = height - return options - - -@runtime_checkable -class RichCast(Protocol): - """An object that may be 'cast' to a console renderable.""" - - def __rich__( - self, - ) -> Union["ConsoleRenderable", "RichCast", str]: # pragma: no cover - ... - - -@runtime_checkable -class ConsoleRenderable(Protocol): - """An object that supports the console protocol.""" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": # pragma: no cover - ... - - -# A type that may be rendered by Console. -RenderableType = Union[ConsoleRenderable, RichCast, str] -"""A string or any object that may be rendered by Rich.""" - -# The result of calling a __rich_console__ method. -RenderResult = Iterable[Union[RenderableType, Segment]] - -_null_highlighter = NullHighlighter() - - -class CaptureError(Exception): - """An error in the Capture context manager.""" - - -class NewLine: - """A renderable to generate new line(s)""" - - def __init__(self, count: int = 1) -> None: - self.count = count - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> Iterable[Segment]: - yield Segment("\n" * self.count) - - -class ScreenUpdate: - """Render a list of lines at a given offset.""" - - def __init__(self, lines: List[List[Segment]], x: int, y: int) -> None: - self._lines = lines - self.x = x - self.y = y - - def __rich_console__( - self, console: "Console", options: ConsoleOptions - ) -> RenderResult: - x = self.x - move_to = Control.move_to - for offset, line in enumerate(self._lines, self.y): - yield move_to(x, offset) - yield from line - - -class Capture: - """Context manager to capture the result of printing to the console. - See :meth:`~rich.console.Console.capture` for how to use. - - Args: - console (Console): A console instance to capture output. - """ - - def __init__(self, console: "Console") -> None: - self._console = console - self._result: Optional[str] = None - - def __enter__(self) -> "Capture": - self._console.begin_capture() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self._result = self._console.end_capture() - - def get(self) -> str: - """Get the result of the capture.""" - if self._result is None: - raise CaptureError( - "Capture result is not available until context manager exits." - ) - return self._result - - -class ThemeContext: - """A context manager to use a temporary theme. See :meth:`~rich.console.Console.use_theme` for usage.""" - - def __init__(self, console: "Console", theme: Theme, inherit: bool = True) -> None: - self.console = console - self.theme = theme - self.inherit = inherit - - def __enter__(self) -> "ThemeContext": - self.console.push_theme(self.theme) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.console.pop_theme() - - -class PagerContext: - """A context manager that 'pages' content. See :meth:`~rich.console.Console.pager` for usage.""" - - def __init__( - self, - console: "Console", - pager: Optional[Pager] = None, - styles: bool = False, - links: bool = False, - ) -> None: - self._console = console - self.pager = SystemPager() if pager is None else pager - self.styles = styles - self.links = links - - def __enter__(self) -> "PagerContext": - self._console._enter_buffer() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - if exc_type is None: - with self._console._lock: - buffer: List[Segment] = self._console._buffer[:] - del self._console._buffer[:] - segments: Iterable[Segment] = buffer - if not self.styles: - segments = Segment.strip_styles(segments) - elif not self.links: - segments = Segment.strip_links(segments) - content = self._console._render_buffer(segments) - self.pager.show(content) - self._console._exit_buffer() - - -class ScreenContext: - """A context manager that enables an alternative screen. See :meth:`~rich.console.Console.screen` for usage.""" - - def __init__( - self, console: "Console", hide_cursor: bool, style: StyleType = "" - ) -> None: - self.console = console - self.hide_cursor = hide_cursor - self.screen = Screen(style=style) - self._changed = False - - def update( - self, *renderables: RenderableType, style: Optional[StyleType] = None - ) -> None: - """Update the screen. - - Args: - renderable (RenderableType, optional): Optional renderable to replace current renderable, - or None for no change. Defaults to None. - style: (Style, optional): Replacement style, or None for no change. Defaults to None. - """ - if renderables: - self.screen.renderable = ( - Group(*renderables) if len(renderables) > 1 else renderables[0] - ) - if style is not None: - self.screen.style = style - self.console.print(self.screen, end="") - - def __enter__(self) -> "ScreenContext": - self._changed = self.console.set_alt_screen(True) - if self._changed and self.hide_cursor: - self.console.show_cursor(False) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - if self._changed: - self.console.set_alt_screen(False) - if self.hide_cursor: - self.console.show_cursor(True) - - -class Group: - """Takes a group of renderables and returns a renderable object that renders the group. - - Args: - renderables (Iterable[RenderableType]): An iterable of renderable objects. - fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. - """ - - def __init__(self, *renderables: "RenderableType", fit: bool = True) -> None: - self._renderables = renderables - self.fit = fit - self._render: Optional[List[RenderableType]] = None - - @property - def renderables(self) -> List["RenderableType"]: - if self._render is None: - self._render = list(self._renderables) - return self._render - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - if self.fit: - return measure_renderables(console, options, self.renderables) - else: - return Measurement(options.max_width, options.max_width) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> RenderResult: - yield from self.renderables - - -def group(fit: bool = True) -> Callable[..., Callable[..., Group]]: - """A decorator that turns an iterable of renderables in to a group. - - Args: - fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. - """ - - def decorator( - method: Callable[..., Iterable[RenderableType]] - ) -> Callable[..., Group]: - """Convert a method that returns an iterable of renderables in to a Group.""" - - @wraps(method) - def _replace(*args: Any, **kwargs: Any) -> Group: - renderables = method(*args, **kwargs) - return Group(*renderables, fit=fit) - - return _replace - - return decorator - - -def _is_jupyter() -> bool: # pragma: no cover - """Check if we're running in a Jupyter notebook.""" - try: - get_ipython # type: ignore[name-defined] - except NameError: - return False - ipython = get_ipython() # type: ignore[name-defined] - shell = ipython.__class__.__name__ - if ( - "google.colab" in str(ipython.__class__) - or os.getenv("DATABRICKS_RUNTIME_VERSION") - or shell == "ZMQInteractiveShell" - ): - return True # Jupyter notebook or qtconsole - elif shell == "TerminalInteractiveShell": - return False # Terminal running IPython - else: - return False # Other type (?) - - -COLOR_SYSTEMS = { - "standard": ColorSystem.STANDARD, - "256": ColorSystem.EIGHT_BIT, - "truecolor": ColorSystem.TRUECOLOR, - "windows": ColorSystem.WINDOWS, -} - -_COLOR_SYSTEMS_NAMES = {system: name for name, system in COLOR_SYSTEMS.items()} - - -@dataclass -class ConsoleThreadLocals(threading.local): - """Thread local values for Console context.""" - - theme_stack: ThemeStack - buffer: List[Segment] = field(default_factory=list) - buffer_index: int = 0 - - -class RenderHook(ABC): - """Provides hooks in to the render process.""" - - @abstractmethod - def process_renderables( - self, renderables: List[ConsoleRenderable] - ) -> List[ConsoleRenderable]: - """Called with a list of objects to render. - - This method can return a new list of renderables, or modify and return the same list. - - Args: - renderables (List[ConsoleRenderable]): A number of renderable objects. - - Returns: - List[ConsoleRenderable]: A replacement list of renderables. - """ - - -_windows_console_features: Optional["WindowsConsoleFeatures"] = None - - -def get_windows_console_features() -> "WindowsConsoleFeatures": # pragma: no cover - global _windows_console_features - if _windows_console_features is not None: - return _windows_console_features - from ._windows import get_windows_console_features - - _windows_console_features = get_windows_console_features() - return _windows_console_features - - -def detect_legacy_windows() -> bool: - """Detect legacy Windows.""" - return WINDOWS and not get_windows_console_features().vt - - -class Console: - """A high level console interface. - - Args: - color_system (str, optional): The color system supported by your terminal, - either ``"standard"``, ``"256"`` or ``"truecolor"``. Leave as ``"auto"`` to autodetect. - force_terminal (Optional[bool], optional): Enable/disable terminal control codes, or None to auto-detect terminal. Defaults to None. - force_jupyter (Optional[bool], optional): Enable/disable Jupyter rendering, or None to auto-detect Jupyter. Defaults to None. - force_interactive (Optional[bool], optional): Enable/disable interactive mode, or None to auto detect. Defaults to None. - soft_wrap (Optional[bool], optional): Set soft wrap default on print method. Defaults to False. - theme (Theme, optional): An optional style theme object, or ``None`` for default theme. - stderr (bool, optional): Use stderr rather than stdout if ``file`` is not specified. Defaults to False. - file (IO, optional): A file object where the console should write to. Defaults to stdout. - quiet (bool, Optional): Boolean to suppress all output. Defaults to False. - width (int, optional): The width of the terminal. Leave as default to auto-detect width. - height (int, optional): The height of the terminal. Leave as default to auto-detect height. - style (StyleType, optional): Style to apply to all output, or None for no style. Defaults to None. - no_color (Optional[bool], optional): Enabled no color mode, or None to auto detect. Defaults to None. - tab_size (int, optional): Number of spaces used to replace a tab character. Defaults to 8. - record (bool, optional): Boolean to enable recording of terminal output, - required to call :meth:`export_html`, :meth:`export_svg`, and :meth:`export_text`. Defaults to False. - markup (bool, optional): Boolean to enable :ref:`console_markup`. Defaults to True. - emoji (bool, optional): Enable emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - highlight (bool, optional): Enable automatic highlighting. Defaults to True. - log_time (bool, optional): Boolean to enable logging of time by :meth:`log` methods. Defaults to True. - log_path (bool, optional): Boolean to enable the logging of the caller by :meth:`log`. Defaults to True. - log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%X] ". - highlighter (HighlighterType, optional): Default highlighter. - legacy_windows (bool, optional): Enable legacy Windows mode, or ``None`` to auto detect. Defaults to ``None``. - safe_box (bool, optional): Restrict box options that don't render on legacy Windows. - get_datetime (Callable[[], datetime], optional): Callable that gets the current time as a datetime.datetime object (used by Console.log), - or None for datetime.now. - get_time (Callable[[], time], optional): Callable that gets the current time in seconds, default uses time.monotonic. - """ - - _environ: Mapping[str, str] = os.environ - - def __init__( - self, - *, - color_system: Optional[ - Literal["auto", "standard", "256", "truecolor", "windows"] - ] = "auto", - force_terminal: Optional[bool] = None, - force_jupyter: Optional[bool] = None, - force_interactive: Optional[bool] = None, - soft_wrap: bool = False, - theme: Optional[Theme] = None, - stderr: bool = False, - file: Optional[IO[str]] = None, - quiet: bool = False, - width: Optional[int] = None, - height: Optional[int] = None, - style: Optional[StyleType] = None, - no_color: Optional[bool] = None, - tab_size: int = 8, - record: bool = False, - markup: bool = True, - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, - highlight: bool = True, - log_time: bool = True, - log_path: bool = True, - log_time_format: Union[str, FormatTimeCallable] = "[%X]", - highlighter: Optional["HighlighterType"] = ReprHighlighter(), - legacy_windows: Optional[bool] = None, - safe_box: bool = True, - get_datetime: Optional[Callable[[], datetime]] = None, - get_time: Optional[Callable[[], float]] = None, - _environ: Optional[Mapping[str, str]] = None, - ): - # Copy of os.environ allows us to replace it for testing - if _environ is not None: - self._environ = _environ - - self.is_jupyter = _is_jupyter() if force_jupyter is None else force_jupyter - if self.is_jupyter: - if width is None: - jupyter_columns = self._environ.get("JUPYTER_COLUMNS") - if jupyter_columns is not None and jupyter_columns.isdigit(): - width = int(jupyter_columns) - else: - width = JUPYTER_DEFAULT_COLUMNS - if height is None: - jupyter_lines = self._environ.get("JUPYTER_LINES") - if jupyter_lines is not None and jupyter_lines.isdigit(): - height = int(jupyter_lines) - else: - height = JUPYTER_DEFAULT_LINES - - self.tab_size = tab_size - self.record = record - self._markup = markup - self._emoji = emoji - self._emoji_variant: Optional[EmojiVariant] = emoji_variant - self._highlight = highlight - self.legacy_windows: bool = ( - (detect_legacy_windows() and not self.is_jupyter) - if legacy_windows is None - else legacy_windows - ) - - if width is None: - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - self.legacy_windows - if height is None: - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - self.soft_wrap = soft_wrap - self._width = width - self._height = height - - self._color_system: Optional[ColorSystem] - - self._force_terminal = None - if force_terminal is not None: - self._force_terminal = force_terminal - - self._file = file - self.quiet = quiet - self.stderr = stderr - - if color_system is None: - self._color_system = None - elif color_system == "auto": - self._color_system = self._detect_color_system() - else: - self._color_system = COLOR_SYSTEMS[color_system] - - self._lock = threading.RLock() - self._log_render = LogRender( - show_time=log_time, - show_path=log_path, - time_format=log_time_format, - ) - self.highlighter: HighlighterType = highlighter or _null_highlighter - self.safe_box = safe_box - self.get_datetime = get_datetime or datetime.now - self.get_time = get_time or monotonic - self.style = style - self.no_color = ( - no_color if no_color is not None else "NO_COLOR" in self._environ - ) - self.is_interactive = ( - (self.is_terminal and not self.is_dumb_terminal) - if force_interactive is None - else force_interactive - ) - - self._record_buffer_lock = threading.RLock() - self._thread_locals = ConsoleThreadLocals( - theme_stack=ThemeStack(themes.DEFAULT if theme is None else theme) - ) - self._record_buffer: List[Segment] = [] - self._render_hooks: List[RenderHook] = [] - self._live: Optional["Live"] = None - self._is_alt_screen = False - - def __repr__(self) -> str: - return f"" - - @property - def file(self) -> IO[str]: - """Get the file object to write to.""" - file = self._file or (sys.stderr if self.stderr else sys.stdout) - file = getattr(file, "rich_proxied_file", file) - if file is None: - file = NULL_FILE - return file - - @file.setter - def file(self, new_file: IO[str]) -> None: - """Set a new file object.""" - self._file = new_file - - @property - def _buffer(self) -> List[Segment]: - """Get a thread local buffer.""" - return self._thread_locals.buffer - - @property - def _buffer_index(self) -> int: - """Get a thread local buffer.""" - return self._thread_locals.buffer_index - - @_buffer_index.setter - def _buffer_index(self, value: int) -> None: - self._thread_locals.buffer_index = value - - @property - def _theme_stack(self) -> ThemeStack: - """Get the thread local theme stack.""" - return self._thread_locals.theme_stack - - def _detect_color_system(self) -> Optional[ColorSystem]: - """Detect color system from env vars.""" - if self.is_jupyter: - return ColorSystem.TRUECOLOR - if not self.is_terminal or self.is_dumb_terminal: - return None - if WINDOWS: # pragma: no cover - if self.legacy_windows: # pragma: no cover - return ColorSystem.WINDOWS - windows_console_features = get_windows_console_features() - return ( - ColorSystem.TRUECOLOR - if windows_console_features.truecolor - else ColorSystem.EIGHT_BIT - ) - else: - color_term = self._environ.get("COLORTERM", "").strip().lower() - if color_term in ("truecolor", "24bit"): - return ColorSystem.TRUECOLOR - term = self._environ.get("TERM", "").strip().lower() - _term_name, _hyphen, colors = term.rpartition("-") - color_system = _TERM_COLORS.get(colors, ColorSystem.STANDARD) - return color_system - - def _enter_buffer(self) -> None: - """Enter in to a buffer context, and buffer all output.""" - self._buffer_index += 1 - - def _exit_buffer(self) -> None: - """Leave buffer context, and render content if required.""" - self._buffer_index -= 1 - self._check_buffer() - - def set_live(self, live: "Live") -> None: - """Set Live instance. Used by Live context manager. - - Args: - live (Live): Live instance using this Console. - - Raises: - errors.LiveError: If this Console has a Live context currently active. - """ - with self._lock: - if self._live is not None: - raise errors.LiveError("Only one live display may be active at once") - self._live = live - - def clear_live(self) -> None: - """Clear the Live instance.""" - with self._lock: - self._live = None - - def push_render_hook(self, hook: RenderHook) -> None: - """Add a new render hook to the stack. - - Args: - hook (RenderHook): Render hook instance. - """ - with self._lock: - self._render_hooks.append(hook) - - def pop_render_hook(self) -> None: - """Pop the last renderhook from the stack.""" - with self._lock: - self._render_hooks.pop() - - def __enter__(self) -> "Console": - """Own context manager to enter buffer context.""" - self._enter_buffer() - return self - - def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: - """Exit buffer context.""" - self._exit_buffer() - - def begin_capture(self) -> None: - """Begin capturing console output. Call :meth:`end_capture` to exit capture mode and return output.""" - self._enter_buffer() - - def end_capture(self) -> str: - """End capture mode and return captured string. - - Returns: - str: Console output. - """ - render_result = self._render_buffer(self._buffer) - del self._buffer[:] - self._exit_buffer() - return render_result - - def push_theme(self, theme: Theme, *, inherit: bool = True) -> None: - """Push a new theme on to the top of the stack, replacing the styles from the previous theme. - Generally speaking, you should call :meth:`~rich.console.Console.use_theme` to get a context manager, rather - than calling this method directly. - - Args: - theme (Theme): A theme instance. - inherit (bool, optional): Inherit existing styles. Defaults to True. - """ - self._theme_stack.push_theme(theme, inherit=inherit) - - def pop_theme(self) -> None: - """Remove theme from top of stack, restoring previous theme.""" - self._theme_stack.pop_theme() - - def use_theme(self, theme: Theme, *, inherit: bool = True) -> ThemeContext: - """Use a different theme for the duration of the context manager. - - Args: - theme (Theme): Theme instance to user. - inherit (bool, optional): Inherit existing console styles. Defaults to True. - - Returns: - ThemeContext: [description] - """ - return ThemeContext(self, theme, inherit) - - @property - def color_system(self) -> Optional[str]: - """Get color system string. - - Returns: - Optional[str]: "standard", "256" or "truecolor". - """ - - if self._color_system is not None: - return _COLOR_SYSTEMS_NAMES[self._color_system] - else: - return None - - @property - def encoding(self) -> str: - """Get the encoding of the console file, e.g. ``"utf-8"``. - - Returns: - str: A standard encoding string. - """ - return (getattr(self.file, "encoding", "utf-8") or "utf-8").lower() - - @property - def is_terminal(self) -> bool: - """Check if the console is writing to a terminal. - - Returns: - bool: True if the console writing to a device capable of - understanding terminal codes, otherwise False. - """ - if self._force_terminal is not None: - return self._force_terminal - - if hasattr(sys.stdin, "__module__") and sys.stdin.__module__.startswith( - "idlelib" - ): - # Return False for Idle which claims to be a tty but can't handle ansi codes - return False - - if self.is_jupyter: - # return False for Jupyter, which may have FORCE_COLOR set - return False - - # If FORCE_COLOR env var has any value at all, we assume a terminal. - force_color = self._environ.get("FORCE_COLOR") - if force_color is not None: - self._force_terminal = True - return True - - isatty: Optional[Callable[[], bool]] = getattr(self.file, "isatty", None) - try: - return False if isatty is None else isatty() - except ValueError: - # in some situation (at the end of a pytest run for example) isatty() can raise - # ValueError: I/O operation on closed file - # return False because we aren't in a terminal anymore - return False - - @property - def is_dumb_terminal(self) -> bool: - """Detect dumb terminal. - - Returns: - bool: True if writing to a dumb terminal, otherwise False. - - """ - _term = self._environ.get("TERM", "") - is_dumb = _term.lower() in ("dumb", "unknown") - return self.is_terminal and is_dumb - - @property - def options(self) -> ConsoleOptions: - """Get default console options.""" - return ConsoleOptions( - max_height=self.size.height, - size=self.size, - legacy_windows=self.legacy_windows, - min_width=1, - max_width=self.width, - encoding=self.encoding, - is_terminal=self.is_terminal, - ) - - @property - def size(self) -> ConsoleDimensions: - """Get the size of the console. - - Returns: - ConsoleDimensions: A named tuple containing the dimensions. - """ - - if self._width is not None and self._height is not None: - return ConsoleDimensions(self._width - self.legacy_windows, self._height) - - if self.is_dumb_terminal: - return ConsoleDimensions(80, 25) - - width: Optional[int] = None - height: Optional[int] = None - - streams = _STD_STREAMS_OUTPUT if WINDOWS else _STD_STREAMS - for file_descriptor in streams: - try: - width, height = os.get_terminal_size(file_descriptor) - except (AttributeError, ValueError, OSError): # Probably not a terminal - pass - else: - break - - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - # get_terminal_size can report 0, 0 if run from pseudo-terminal - width = width or 80 - height = height or 25 - return ConsoleDimensions( - width - self.legacy_windows if self._width is None else self._width, - height if self._height is None else self._height, - ) - - @size.setter - def size(self, new_size: Tuple[int, int]) -> None: - """Set a new size for the terminal. - - Args: - new_size (Tuple[int, int]): New width and height. - """ - width, height = new_size - self._width = width - self._height = height - - @property - def width(self) -> int: - """Get the width of the console. - - Returns: - int: The width (in characters) of the console. - """ - return self.size.width - - @width.setter - def width(self, width: int) -> None: - """Set width. - - Args: - width (int): New width. - """ - self._width = width - - @property - def height(self) -> int: - """Get the height of the console. - - Returns: - int: The height (in lines) of the console. - """ - return self.size.height - - @height.setter - def height(self, height: int) -> None: - """Set height. - - Args: - height (int): new height. - """ - self._height = height - - def bell(self) -> None: - """Play a 'bell' sound (if supported by the terminal).""" - self.control(Control.bell()) - - def capture(self) -> Capture: - """A context manager to *capture* the result of print() or log() in a string, - rather than writing it to the console. - - Example: - >>> from rich.console import Console - >>> console = Console() - >>> with console.capture() as capture: - ... console.print("[bold magenta]Hello World[/]") - >>> print(capture.get()) - - Returns: - Capture: Context manager with disables writing to the terminal. - """ - capture = Capture(self) - return capture - - def pager( - self, pager: Optional[Pager] = None, styles: bool = False, links: bool = False - ) -> PagerContext: - """A context manager to display anything printed within a "pager". The pager application - is defined by the system and will typically support at least pressing a key to scroll. - - Args: - pager (Pager, optional): A pager object, or None to use :class:`~rich.pager.SystemPager`. Defaults to None. - styles (bool, optional): Show styles in pager. Defaults to False. - links (bool, optional): Show links in pager. Defaults to False. - - Example: - >>> from rich.console import Console - >>> from rich.__main__ import make_test_card - >>> console = Console() - >>> with console.pager(): - console.print(make_test_card()) - - Returns: - PagerContext: A context manager. - """ - return PagerContext(self, pager=pager, styles=styles, links=links) - - def line(self, count: int = 1) -> None: - """Write new line(s). - - Args: - count (int, optional): Number of new lines. Defaults to 1. - """ - - assert count >= 0, "count must be >= 0" - self.print(NewLine(count)) - - def clear(self, home: bool = True) -> None: - """Clear the screen. - - Args: - home (bool, optional): Also move the cursor to 'home' position. Defaults to True. - """ - if home: - self.control(Control.clear(), Control.home()) - else: - self.control(Control.clear()) - - def status( - self, - status: RenderableType, - *, - spinner: str = "dots", - spinner_style: StyleType = "status.spinner", - speed: float = 1.0, - refresh_per_second: float = 12.5, - ) -> "Status": - """Display a status and spinner. - - Args: - status (RenderableType): A status renderable (str or Text typically). - spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". - spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". - speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. - refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. - - Returns: - Status: A Status object that may be used as a context manager. - """ - from .status import Status - - status_renderable = Status( - status, - console=self, - spinner=spinner, - spinner_style=spinner_style, - speed=speed, - refresh_per_second=refresh_per_second, - ) - return status_renderable - - def show_cursor(self, show: bool = True) -> bool: - """Show or hide the cursor. - - Args: - show (bool, optional): Set visibility of the cursor. - """ - if self.is_terminal: - self.control(Control.show_cursor(show)) - return True - return False - - def set_alt_screen(self, enable: bool = True) -> bool: - """Enables alternative screen mode. - - Note, if you enable this mode, you should ensure that is disabled before - the application exits. See :meth:`~rich.Console.screen` for a context manager - that handles this for you. - - Args: - enable (bool, optional): Enable (True) or disable (False) alternate screen. Defaults to True. - - Returns: - bool: True if the control codes were written. - - """ - changed = False - if self.is_terminal and not self.legacy_windows: - self.control(Control.alt_screen(enable)) - changed = True - self._is_alt_screen = enable - return changed - - @property - def is_alt_screen(self) -> bool: - """Check if the alt screen was enabled. - - Returns: - bool: True if the alt screen was enabled, otherwise False. - """ - return self._is_alt_screen - - def set_window_title(self, title: str) -> bool: - """Set the title of the console terminal window. - - Warning: There is no means within Rich of "resetting" the window title to its - previous value, meaning the title you set will persist even after your application - exits. - - ``fish`` shell resets the window title before and after each command by default, - negating this issue. Windows Terminal and command prompt will also reset the title for you. - Most other shells and terminals, however, do not do this. - - Some terminals may require configuration changes before you can set the title. - Some terminals may not support setting the title at all. - - Other software (including the terminal itself, the shell, custom prompts, plugins, etc.) - may also set the terminal window title. This could result in whatever value you write - using this method being overwritten. - - Args: - title (str): The new title of the terminal window. - - Returns: - bool: True if the control code to change the terminal title was - written, otherwise False. Note that a return value of True - does not guarantee that the window title has actually changed, - since the feature may be unsupported/disabled in some terminals. - """ - if self.is_terminal: - self.control(Control.title(title)) - return True - return False - - def screen( - self, hide_cursor: bool = True, style: Optional[StyleType] = None - ) -> "ScreenContext": - """Context manager to enable and disable 'alternative screen' mode. - - Args: - hide_cursor (bool, optional): Also hide the cursor. Defaults to False. - style (Style, optional): Optional style for screen. Defaults to None. - - Returns: - ~ScreenContext: Context which enables alternate screen on enter, and disables it on exit. - """ - return ScreenContext(self, hide_cursor=hide_cursor, style=style or "") - - def measure( - self, renderable: RenderableType, *, options: Optional[ConsoleOptions] = None - ) -> Measurement: - """Measure a renderable. Returns a :class:`~rich.measure.Measurement` object which contains - information regarding the number of characters required to print the renderable. - - Args: - renderable (RenderableType): Any renderable or string. - options (Optional[ConsoleOptions], optional): Options to use when measuring, or None - to use default options. Defaults to None. - - Returns: - Measurement: A measurement of the renderable. - """ - measurement = Measurement.get(self, options or self.options, renderable) - return measurement - - def render( - self, renderable: RenderableType, options: Optional[ConsoleOptions] = None - ) -> Iterable[Segment]: - """Render an object in to an iterable of `Segment` instances. - - This method contains the logic for rendering objects with the console protocol. - You are unlikely to need to use it directly, unless you are extending the library. - - Args: - renderable (RenderableType): An object supporting the console protocol, or - an object that may be converted to a string. - options (ConsoleOptions, optional): An options object, or None to use self.options. Defaults to None. - - Returns: - Iterable[Segment]: An iterable of segments that may be rendered. - """ - - _options = options or self.options - if _options.max_width < 1: - # No space to render anything. This prevents potential recursion errors. - return - render_iterable: RenderResult - - renderable = rich_cast(renderable) - if hasattr(renderable, "__rich_console__") and not isclass(renderable): - render_iterable = renderable.__rich_console__(self, _options) - elif isinstance(renderable, str): - text_renderable = self.render_str( - renderable, highlight=_options.highlight, markup=_options.markup - ) - render_iterable = text_renderable.__rich_console__(self, _options) - else: - raise errors.NotRenderableError( - f"Unable to render {renderable!r}; " - "A str, Segment or object with __rich_console__ method is required" - ) - - try: - iter_render = iter(render_iterable) - except TypeError: - raise errors.NotRenderableError( - f"object {render_iterable!r} is not renderable" - ) - _Segment = Segment - _options = _options.reset_height() - for render_output in iter_render: - if isinstance(render_output, _Segment): - yield render_output - else: - yield from self.render(render_output, _options) - - def render_lines( - self, - renderable: RenderableType, - options: Optional[ConsoleOptions] = None, - *, - style: Optional[Style] = None, - pad: bool = True, - new_lines: bool = False, - ) -> List[List[Segment]]: - """Render objects in to a list of lines. - - The output of render_lines is useful when further formatting of rendered console text - is required, such as the Panel class which draws a border around any renderable object. - - Args: - renderable (RenderableType): Any object renderable in the console. - options (Optional[ConsoleOptions], optional): Console options, or None to use self.options. Default to ``None``. - style (Style, optional): Optional style to apply to renderables. Defaults to ``None``. - pad (bool, optional): Pad lines shorter than render width. Defaults to ``True``. - new_lines (bool, optional): Include "\n" characters at end of lines. - - Returns: - List[List[Segment]]: A list of lines, where a line is a list of Segment objects. - """ - with self._lock: - render_options = options or self.options - _rendered = self.render(renderable, render_options) - if style: - _rendered = Segment.apply_style(_rendered, style) - - render_height = render_options.height - if render_height is not None: - render_height = max(0, render_height) - - lines = list( - islice( - Segment.split_and_crop_lines( - _rendered, - render_options.max_width, - include_new_lines=new_lines, - pad=pad, - style=style, - ), - None, - render_height, - ) - ) - if render_options.height is not None: - extra_lines = render_options.height - len(lines) - if extra_lines > 0: - pad_line = [ - ( - [ - Segment(" " * render_options.max_width, style), - Segment("\n"), - ] - if new_lines - else [Segment(" " * render_options.max_width, style)] - ) - ] - lines.extend(pad_line * extra_lines) - - return lines - - def render_str( - self, - text: str, - *, - style: Union[str, Style] = "", - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - highlighter: Optional[HighlighterType] = None, - ) -> "Text": - """Convert a string to a Text instance. This is called automatically if - you print or log a string. - - Args: - text (str): Text to render. - style (Union[str, Style], optional): Style to apply to rendered text. - justify (str, optional): Justify method: "default", "left", "center", "full", or "right". Defaults to ``None``. - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji, or ``None`` to use Console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use Console default. - highlight (Optional[bool], optional): Enable highlighting, or ``None`` to use Console default. - highlighter (HighlighterType, optional): Optional highlighter to apply. - Returns: - ConsoleRenderable: Renderable object. - - """ - emoji_enabled = emoji or (emoji is None and self._emoji) - markup_enabled = markup or (markup is None and self._markup) - highlight_enabled = highlight or (highlight is None and self._highlight) - - if markup_enabled: - rich_text = render_markup( - text, - style=style, - emoji=emoji_enabled, - emoji_variant=self._emoji_variant, - ) - rich_text.justify = justify - rich_text.overflow = overflow - else: - rich_text = Text( - ( - _emoji_replace(text, default_variant=self._emoji_variant) - if emoji_enabled - else text - ), - justify=justify, - overflow=overflow, - style=style, - ) - - _highlighter = (highlighter or self.highlighter) if highlight_enabled else None - if _highlighter is not None: - highlight_text = _highlighter(str(rich_text)) - highlight_text.copy_styles(rich_text) - return highlight_text - - return rich_text - - def get_style( - self, name: Union[str, Style], *, default: Optional[Union[Style, str]] = None - ) -> Style: - """Get a Style instance by its theme name or parse a definition. - - Args: - name (str): The name of a style or a style definition. - - Returns: - Style: A Style object. - - Raises: - MissingStyle: If no style could be parsed from name. - - """ - if isinstance(name, Style): - return name - - try: - style = self._theme_stack.get(name) - if style is None: - style = Style.parse(name) - return style.copy() if style.link else style - except errors.StyleSyntaxError as error: - if default is not None: - return self.get_style(default) - raise errors.MissingStyle( - f"Failed to get style {name!r}; {error}" - ) from None - - def _collect_renderables( - self, - objects: Iterable[Any], - sep: str, - end: str, - *, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - ) -> List[ConsoleRenderable]: - """Combine a number of renderables and text into one renderable. - - Args: - objects (Iterable[Any]): Anything that Rich can render. - sep (str): String to write between print data. - end (str): String to write at end of print data. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. - - Returns: - List[ConsoleRenderable]: A list of things to render. - """ - renderables: List[ConsoleRenderable] = [] - _append = renderables.append - text: List[Text] = [] - append_text = text.append - - append = _append - if justify in ("left", "center", "right"): - - def align_append(renderable: RenderableType) -> None: - _append(Align(renderable, cast(AlignMethod, justify))) - - append = align_append - - _highlighter: HighlighterType = _null_highlighter - if highlight or (highlight is None and self._highlight): - _highlighter = self.highlighter - - def check_text() -> None: - if text: - sep_text = Text(sep, justify=justify, end=end) - append(sep_text.join(text)) - text.clear() - - for renderable in objects: - renderable = rich_cast(renderable) - if isinstance(renderable, str): - append_text( - self.render_str( - renderable, - emoji=emoji, - markup=markup, - highlight=highlight, - highlighter=_highlighter, - ) - ) - elif isinstance(renderable, Text): - append_text(renderable) - elif isinstance(renderable, ConsoleRenderable): - check_text() - append(renderable) - elif is_expandable(renderable): - check_text() - append(Pretty(renderable, highlighter=_highlighter)) - else: - append_text(_highlighter(str(renderable))) - - check_text() - - if self.style is not None: - style = self.get_style(self.style) - renderables = [Styled(renderable, style) for renderable in renderables] - - return renderables - - def rule( - self, - title: TextType = "", - *, - characters: str = "─", - style: Union[str, Style] = "rule.line", - align: AlignMethod = "center", - ) -> None: - """Draw a line with optional centered title. - - Args: - title (str, optional): Text to render over the rule. Defaults to "". - characters (str, optional): Character(s) to form the line. Defaults to "─". - style (str, optional): Style of line. Defaults to "rule.line". - align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". - """ - from .rule import Rule - - rule = Rule(title=title, characters=characters, style=style, align=align) - self.print(rule) - - def control(self, *control: Control) -> None: - """Insert non-printing control codes. - - Args: - control_codes (str): Control codes, such as those that may move the cursor. - """ - if not self.is_dumb_terminal: - with self: - self._buffer.extend(_control.segment for _control in control) - - def out( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - highlight: Optional[bool] = None, - ) -> None: - """Output to the terminal. This is a low-level way of writing to the terminal which unlike - :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markup, but will - optionally apply highlighting and a basic style. - - Args: - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use - console default. Defaults to ``None``. - """ - raw_output: str = sep.join(str(_object) for _object in objects) - self.print( - raw_output, - style=style, - highlight=highlight, - emoji=False, - markup=False, - no_wrap=True, - overflow="ignore", - crop=False, - end=end, - ) - - def print( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - no_wrap: Optional[bool] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - width: Optional[int] = None, - height: Optional[int] = None, - crop: bool = True, - soft_wrap: Optional[bool] = None, - new_line_start: bool = False, - ) -> None: - """Print to the console. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): Justify method: "default", "left", "right", "center", or "full". Defaults to ``None``. - overflow (str, optional): Overflow method: "ignore", "crop", "fold", or "ellipsis". Defaults to None. - no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to None. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to ``None``. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to ``None``. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to ``None``. - width (Optional[int], optional): Width of output, or ``None`` to auto-detect. Defaults to ``None``. - crop (Optional[bool], optional): Crop output to width of terminal. Defaults to True. - soft_wrap (bool, optional): Enable soft wrap mode which disables word wrapping and cropping of text or ``None`` for - Console default. Defaults to ``None``. - new_line_start (bool, False): Insert a new line at the start if the output contains more than one line. Defaults to ``False``. - """ - if not objects: - objects = (NewLine(),) - - if soft_wrap is None: - soft_wrap = self.soft_wrap - if soft_wrap: - if no_wrap is None: - no_wrap = True - if overflow is None: - overflow = "ignore" - crop = False - render_hooks = self._render_hooks[:] - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - render_options = self.options.update( - justify=justify, - overflow=overflow, - width=min(width, self.width) if width is not None else NO_CHANGE, - height=height, - no_wrap=no_wrap, - markup=markup, - highlight=highlight, - ) - - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - if style is None: - for renderable in renderables: - extend(render(renderable, render_options)) - else: - for renderable in renderables: - extend( - Segment.apply_style( - render(renderable, render_options), self.get_style(style) - ) - ) - if new_line_start: - if ( - len("".join(segment.text for segment in new_segments).splitlines()) - > 1 - ): - new_segments.insert(0, Segment.line()) - if crop: - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line) - else: - self._buffer.extend(new_segments) - - def print_json( - self, - json: Optional[str] = None, - *, - data: Any = None, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, - ) -> None: - """Pretty prints JSON. Output will be valid JSON. - - Args: - json (Optional[str]): A string containing JSON. - data (Any): If json is not supplied, then encode this data. - indent (Union[None, int, str], optional): Number of spaces to indent. Defaults to 2. - highlight (bool, optional): Enable highlighting of output: Defaults to True. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - """ - from pip._vendor.rich.json import JSON - - if json is None: - json_renderable = JSON.from_data( - data, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - else: - if not isinstance(json, str): - raise TypeError( - f"json must be str. Did you mean print_json(data={json!r}) ?" - ) - json_renderable = JSON( - json, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - self.print(json_renderable, soft_wrap=True) - - def update_screen( - self, - renderable: RenderableType, - *, - region: Optional[Region] = None, - options: Optional[ConsoleOptions] = None, - ) -> None: - """Update the screen at a given offset. - - Args: - renderable (RenderableType): A Rich renderable. - region (Region, optional): Region of screen to update, or None for entire screen. Defaults to None. - x (int, optional): x offset. Defaults to 0. - y (int, optional): y offset. Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - render_options = options or self.options - if region is None: - x = y = 0 - render_options = render_options.update_dimensions( - render_options.max_width, render_options.height or self.height - ) - else: - x, y, width, height = region - render_options = render_options.update_dimensions(width, height) - - lines = self.render_lines(renderable, options=render_options) - self.update_screen_lines(lines, x, y) - - def update_screen_lines( - self, lines: List[List[Segment]], x: int = 0, y: int = 0 - ) -> None: - """Update lines of the screen at a given offset. - - Args: - lines (List[List[Segment]]): Rendered lines (as produced by :meth:`~rich.Console.render_lines`). - x (int, optional): x offset (column no). Defaults to 0. - y (int, optional): y offset (column no). Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - screen_update = ScreenUpdate(lines, x, y) - segments = self.render(screen_update) - self._buffer.extend(segments) - self._check_buffer() - - def print_exception( - self, - *, - width: Optional[int] = 100, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ) -> None: - """Prints a rich render of the last exception and traceback. - - Args: - width (Optional[int], optional): Number of characters used to render code. Defaults to 100. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - """ - from .traceback import Traceback - - traceback = Traceback( - width=width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - suppress=suppress, - max_frames=max_frames, - ) - self.print(traceback) - - @staticmethod - def _caller_frame_info( - offset: int, - currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe, - ) -> Tuple[str, int, Dict[str, Any]]: - """Get caller frame information. - - Args: - offset (int): the caller offset within the current frame stack. - currentframe (Callable[[], Optional[FrameType]], optional): the callable to use to - retrieve the current frame. Defaults to ``inspect.currentframe``. - - Returns: - Tuple[str, int, Dict[str, Any]]: A tuple containing the filename, the line number and - the dictionary of local variables associated with the caller frame. - - Raises: - RuntimeError: If the stack offset is invalid. - """ - # Ignore the frame of this local helper - offset += 1 - - frame = currentframe() - if frame is not None: - # Use the faster currentframe where implemented - while offset and frame is not None: - frame = frame.f_back - offset -= 1 - assert frame is not None - return frame.f_code.co_filename, frame.f_lineno, frame.f_locals - else: - # Fallback to the slower stack - frame_info = inspect.stack()[offset] - return frame_info.filename, frame_info.lineno, frame_info.frame.f_locals - - def log( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - log_locals: bool = False, - _stack_offset: int = 1, - ) -> None: - """Log rich content to the terminal. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to None. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to None. - log_locals (bool, optional): Boolean to enable logging of locals where ``log()`` - was called. Defaults to False. - _stack_offset (int, optional): Offset of caller from end of call stack. Defaults to 1. - """ - if not objects: - objects = (NewLine(),) - - render_hooks = self._render_hooks[:] - - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - if style is not None: - renderables = [Styled(renderable, style) for renderable in renderables] - - filename, line_no, locals = self._caller_frame_info(_stack_offset) - link_path = None if filename.startswith("<") else os.path.abspath(filename) - path = filename.rpartition(os.sep)[-1] - if log_locals: - locals_map = { - key: value - for key, value in locals.items() - if not key.startswith("__") - } - renderables.append(render_scope(locals_map, title="[i]locals")) - - renderables = [ - self._log_render( - self, - renderables, - log_time=self.get_datetime(), - path=path, - line_no=line_no, - link_path=link_path, - ) - ] - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - render_options = self.options - for renderable in renderables: - extend(render(renderable, render_options)) - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line) - - def on_broken_pipe(self) -> None: - """This function is called when a `BrokenPipeError` is raised. - - This can occur when piping Textual output in Linux and macOS. - The default implementation is to exit the app, but you could implement - this method in a subclass to change the behavior. - - See https://docs.python.org/3/library/signal.html#note-on-sigpipe for details. - """ - self.quiet = True - devnull = os.open(os.devnull, os.O_WRONLY) - os.dup2(devnull, sys.stdout.fileno()) - raise SystemExit(1) - - def _check_buffer(self) -> None: - """Check if the buffer may be rendered. Render it if it can (e.g. Console.quiet is False) - Rendering is supported on Windows, Unix and Jupyter environments. For - legacy Windows consoles, the win32 API is called directly. - This method will also record what it renders if recording is enabled via Console.record. - """ - if self.quiet: - del self._buffer[:] - return - - try: - self._write_buffer() - except BrokenPipeError: - self.on_broken_pipe() - - def _write_buffer(self) -> None: - """Write the buffer to the output file.""" - - with self._lock: - if self.record and not self._buffer_index: - with self._record_buffer_lock: - self._record_buffer.extend(self._buffer[:]) - - if self._buffer_index == 0: - if self.is_jupyter: # pragma: no cover - from .jupyter import display - - display(self._buffer, self._render_buffer(self._buffer[:])) - del self._buffer[:] - else: - if WINDOWS: - use_legacy_windows_render = False - if self.legacy_windows: - fileno = get_fileno(self.file) - if fileno is not None: - use_legacy_windows_render = ( - fileno in _STD_STREAMS_OUTPUT - ) - - if use_legacy_windows_render: - from pip._vendor.rich._win32_console import LegacyWindowsTerm - from pip._vendor.rich._windows_renderer import legacy_windows_render - - buffer = self._buffer[:] - if self.no_color and self._color_system: - buffer = list(Segment.remove_color(buffer)) - - legacy_windows_render(buffer, LegacyWindowsTerm(self.file)) - else: - # Either a non-std stream on legacy Windows, or modern Windows. - text = self._render_buffer(self._buffer[:]) - # https://bugs.python.org/issue37871 - # https://github.com/python/cpython/issues/82052 - # We need to avoid writing more than 32Kb in a single write, due to the above bug - write = self.file.write - # Worse case scenario, every character is 4 bytes of utf-8 - MAX_WRITE = 32 * 1024 // 4 - try: - if len(text) <= MAX_WRITE: - write(text) - else: - batch: List[str] = [] - batch_append = batch.append - size = 0 - for line in text.splitlines(True): - if size + len(line) > MAX_WRITE and batch: - write("".join(batch)) - batch.clear() - size = 0 - batch_append(line) - size += len(line) - if batch: - write("".join(batch)) - batch.clear() - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - else: - text = self._render_buffer(self._buffer[:]) - try: - self.file.write(text) - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - - self.file.flush() - del self._buffer[:] - - def _render_buffer(self, buffer: Iterable[Segment]) -> str: - """Render buffered output, and clear buffer.""" - output: List[str] = [] - append = output.append - color_system = self._color_system - legacy_windows = self.legacy_windows - not_terminal = not self.is_terminal - if self.no_color and color_system: - buffer = Segment.remove_color(buffer) - for text, style, control in buffer: - if style: - append( - style.render( - text, - color_system=color_system, - legacy_windows=legacy_windows, - ) - ) - elif not (not_terminal and control): - append(text) - - rendered = "".join(output) - return rendered - - def input( - self, - prompt: TextType = "", - *, - markup: bool = True, - emoji: bool = True, - password: bool = False, - stream: Optional[TextIO] = None, - ) -> str: - """Displays a prompt and waits for input from the user. The prompt may contain color / style. - - It works in the same way as Python's builtin :func:`input` function and provides elaborate line editing and history features if Python's builtin :mod:`readline` module is previously loaded. - - Args: - prompt (Union[str, Text]): Text to render in the prompt. - markup (bool, optional): Enable console markup (requires a str prompt). Defaults to True. - emoji (bool, optional): Enable emoji (requires a str prompt). Defaults to True. - password: (bool, optional): Hide typed text. Defaults to False. - stream: (TextIO, optional): Optional file to read input from (rather than stdin). Defaults to None. - - Returns: - str: Text read from stdin. - """ - if prompt: - self.print(prompt, markup=markup, emoji=emoji, end="") - if password: - result = getpass("", stream=stream) - else: - if stream: - result = stream.readline() - else: - result = input() - return result - - def export_text(self, *, clear: bool = True, styles: bool = False) -> str: - """Generate text from console contents (requires record=True argument in constructor). - - Args: - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi escape codes will be included. ``False`` for plain text. - Defaults to ``False``. - - Returns: - str: String containing console contents. - - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - - with self._record_buffer_lock: - if styles: - text = "".join( - (style.render(text) if style else text) - for text, style, _ in self._record_buffer - ) - else: - text = "".join( - segment.text - for segment in self._record_buffer - if not segment.control - ) - if clear: - del self._record_buffer[:] - return text - - def save_text(self, path: str, *, clear: bool = True, styles: bool = False) -> None: - """Generate text from console and save to a given location (requires record=True argument in constructor). - - Args: - path (str): Path to write text files. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi style codes will be included. ``False`` for plain text. - Defaults to ``False``. - - """ - text = self.export_text(clear=clear, styles=styles) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(text) - - def export_html( - self, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: Optional[str] = None, - inline_styles: bool = False, - ) -> str: - """Generate HTML from console contents (requires record=True argument in constructor). - - Args: - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - Returns: - str: String containing console contents as HTML. - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - fragments: List[str] = [] - append = fragments.append - _theme = theme or DEFAULT_TERMINAL_THEME - stylesheet = "" - - render_code_format = CONSOLE_HTML_FORMAT if code_format is None else code_format - - with self._record_buffer_lock: - if inline_styles: - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - if style.link: - text = f'
{text}' - text = f'{text}' if rule else text - append(text) - else: - styles: Dict[str, int] = {} - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - style_number = styles.setdefault(rule, len(styles) + 1) - if style.link: - text = f'{text}' - else: - text = f'{text}' - append(text) - stylesheet_rules: List[str] = [] - stylesheet_append = stylesheet_rules.append - for style_rule, style_number in styles.items(): - if style_rule: - stylesheet_append(f".r{style_number} {{{style_rule}}}") - stylesheet = "\n".join(stylesheet_rules) - - rendered_code = render_code_format.format( - code="".join(fragments), - stylesheet=stylesheet, - foreground=_theme.foreground_color.hex, - background=_theme.background_color.hex, - ) - if clear: - del self._record_buffer[:] - return rendered_code - - def save_html( - self, - path: str, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_HTML_FORMAT, - inline_styles: bool = False, - ) -> None: - """Generate HTML from console contents and write to a file (requires record=True argument in constructor). - - Args: - path (str): Path to write html file. - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - """ - html = self.export_html( - theme=theme, - clear=clear, - code_format=code_format, - inline_styles=inline_styles, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(html) - - def export_svg( - self, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> str: - """ - Generate an SVG from the console contents (requires record=True in Console constructor). - - Args: - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - - from pip._vendor.rich.cells import cell_len - - style_cache: Dict[Style, str] = {} - - def get_svg_style(style: Style) -> str: - """Convert a Style to CSS rules for SVG.""" - if style in style_cache: - return style_cache[style] - css_rules = [] - color = ( - _theme.foreground_color - if (style.color is None or style.color.is_default) - else style.color.get_truecolor(_theme) - ) - bgcolor = ( - _theme.background_color - if (style.bgcolor is None or style.bgcolor.is_default) - else style.bgcolor.get_truecolor(_theme) - ) - if style.reverse: - color, bgcolor = bgcolor, color - if style.dim: - color = blend_rgb(color, bgcolor, 0.4) - css_rules.append(f"fill: {color.hex}") - if style.bold: - css_rules.append("font-weight: bold") - if style.italic: - css_rules.append("font-style: italic;") - if style.underline: - css_rules.append("text-decoration: underline;") - if style.strike: - css_rules.append("text-decoration: line-through;") - - css = ";".join(css_rules) - style_cache[style] = css - return css - - _theme = theme or SVG_EXPORT_THEME - - width = self.width - char_height = 20 - char_width = char_height * font_aspect_ratio - line_height = char_height * 1.22 - - margin_top = 1 - margin_right = 1 - margin_bottom = 1 - margin_left = 1 - - padding_top = 40 - padding_right = 8 - padding_bottom = 8 - padding_left = 8 - - padding_width = padding_left + padding_right - padding_height = padding_top + padding_bottom - margin_width = margin_left + margin_right - margin_height = margin_top + margin_bottom - - text_backgrounds: List[str] = [] - text_group: List[str] = [] - classes: Dict[str, int] = {} - style_no = 1 - - def escape_text(text: str) -> str: - """HTML escape text and replace spaces with nbsp.""" - return escape(text).replace(" ", " ") - - def make_tag( - name: str, content: Optional[str] = None, **attribs: object - ) -> str: - """Make a tag from name, content, and attributes.""" - - def stringify(value: object) -> str: - if isinstance(value, (float)): - return format(value, "g") - return str(value) - - tag_attribs = " ".join( - f'{k.lstrip("_").replace("_", "-")}="{stringify(v)}"' - for k, v in attribs.items() - ) - return ( - f"<{name} {tag_attribs}>{content}" - if content - else f"<{name} {tag_attribs}/>" - ) - - with self._record_buffer_lock: - segments = list(Segment.filter_control(self._record_buffer)) - if clear: - self._record_buffer.clear() - - if unique_id is None: - unique_id = "terminal-" + str( - zlib.adler32( - ("".join(repr(segment) for segment in segments)).encode( - "utf-8", - "ignore", - ) - + title.encode("utf-8", "ignore") - ) - ) - y = 0 - for y, line in enumerate(Segment.split_and_crop_lines(segments, length=width)): - x = 0 - for text, style, _control in line: - style = style or Style() - rules = get_svg_style(style) - if rules not in classes: - classes[rules] = style_no - style_no += 1 - class_name = f"r{classes[rules]}" - - if style.reverse: - has_background = True - background = ( - _theme.foreground_color.hex - if style.color is None - else style.color.get_truecolor(_theme).hex - ) - else: - bgcolor = style.bgcolor - has_background = bgcolor is not None and not bgcolor.is_default - background = ( - _theme.background_color.hex - if style.bgcolor is None - else style.bgcolor.get_truecolor(_theme).hex - ) - - text_length = cell_len(text) - if has_background: - text_backgrounds.append( - make_tag( - "rect", - fill=background, - x=x * char_width, - y=y * line_height + 1.5, - width=char_width * text_length, - height=line_height + 0.25, - shape_rendering="crispEdges", - ) - ) - - if text != " " * len(text): - text_group.append( - make_tag( - "text", - escape_text(text), - _class=f"{unique_id}-{class_name}", - x=x * char_width, - y=y * line_height + char_height, - textLength=char_width * len(text), - clip_path=f"url(#{unique_id}-line-{y})", - ) - ) - x += cell_len(text) - - line_offsets = [line_no * line_height + 1.5 for line_no in range(y)] - lines = "\n".join( - f""" - {make_tag("rect", x=0, y=offset, width=char_width * width, height=line_height + 0.25)} - """ - for line_no, offset in enumerate(line_offsets) - ) - - styles = "\n".join( - f".{unique_id}-r{rule_no} {{ {css} }}" for css, rule_no in classes.items() - ) - backgrounds = "".join(text_backgrounds) - matrix = "".join(text_group) - - terminal_width = ceil(width * char_width + padding_width) - terminal_height = (y + 1) * line_height + padding_height - chrome = make_tag( - "rect", - fill=_theme.background_color.hex, - stroke="rgba(255,255,255,0.35)", - stroke_width="1", - x=margin_left, - y=margin_top, - width=terminal_width, - height=terminal_height, - rx=8, - ) - - title_color = _theme.foreground_color.hex - if title: - chrome += make_tag( - "text", - escape_text(title), - _class=f"{unique_id}-title", - fill=title_color, - text_anchor="middle", - x=terminal_width // 2, - y=margin_top + char_height + 6, - ) - chrome += f""" - - - - - - """ - - svg = code_format.format( - unique_id=unique_id, - char_width=char_width, - char_height=char_height, - line_height=line_height, - terminal_width=char_width * width - 1, - terminal_height=(y + 1) * line_height - 1, - width=terminal_width + margin_width, - height=terminal_height + margin_height, - terminal_x=margin_left + padding_left, - terminal_y=margin_top + padding_top, - styles=styles, - chrome=chrome, - backgrounds=backgrounds, - matrix=matrix, - lines=lines, - ) - return svg - - def save_svg( - self, - path: str, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> None: - """Generate an SVG file from the console contents (requires record=True in Console constructor). - - Args: - path (str): The path to write the SVG to. - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - svg = self.export_svg( - title=title, - theme=theme, - clear=clear, - code_format=code_format, - font_aspect_ratio=font_aspect_ratio, - unique_id=unique_id, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(svg) - - -def _svg_hash(svg_main_code: str) -> str: - """Returns a unique hash for the given SVG main code. - - Args: - svg_main_code (str): The content we're going to inject in the SVG envelope. - - Returns: - str: a hash of the given content - """ - return str(zlib.adler32(svg_main_code.encode())) - - -if __name__ == "__main__": # pragma: no cover - console = Console(record=True) - - console.log( - "JSONRPC [i]request[/i]", - 5, - 1.3, - True, - False, - None, - { - "jsonrpc": "2.0", - "method": "subtract", - "params": {"minuend": 42, "subtrahend": 23}, - "id": 3, - }, - ) - - console.log("Hello, World!", "{'a': 1}", repr(console)) - - console.print( - { - "name": None, - "empty": [], - "quiz": { - "sport": { - "answered": True, - "q1": { - "question": "Which one is correct team name in NBA?", - "options": [ - "New York Bulls", - "Los Angeles Kings", - "Golden State Warriors", - "Huston Rocket", - ], - "answer": "Huston Rocket", - }, - }, - "maths": { - "answered": False, - "q1": { - "question": "5 + 7 = ?", - "options": [10, 11, 12, 13], - "answer": 12, - }, - "q2": { - "question": "12 - 8 = ?", - "options": [1, 2, 3, 4], - "answer": 4, - }, - }, - }, - } - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py deleted file mode 100644 index 65fdf56..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py +++ /dev/null @@ -1,37 +0,0 @@ -from typing import Optional, TYPE_CHECKING - -from .jupyter import JupyterMixin -from .measure import Measurement - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - - -class Constrain(JupyterMixin): - """Constrain the width of a renderable to a given number of characters. - - Args: - renderable (RenderableType): A renderable object. - width (int, optional): The maximum width (in characters) to render. Defaults to 80. - """ - - def __init__(self, renderable: "RenderableType", width: Optional[int] = 80) -> None: - self.renderable = renderable - self.width = width - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.width is None: - yield self.renderable - else: - child_options = options.update_width(min(self.width, options.max_width)) - yield from console.render(self.renderable, child_options) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - if self.width is not None: - options = options.update_width(self.width) - measurement = Measurement.get(console, options, self.renderable) - return measurement diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py deleted file mode 100644 index 901ff8b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py +++ /dev/null @@ -1,167 +0,0 @@ -from itertools import zip_longest -from typing import ( - TYPE_CHECKING, - Iterable, - Iterator, - List, - Optional, - TypeVar, - Union, - overload, -) - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - JustifyMethod, - OverflowMethod, - RenderResult, - RenderableType, - ) - from .text import Text - -from .cells import cell_len -from .measure import Measurement - -T = TypeVar("T") - - -class Renderables: - """A list subclass which renders its contents to the console.""" - - def __init__( - self, renderables: Optional[Iterable["RenderableType"]] = None - ) -> None: - self._renderables: List["RenderableType"] = ( - list(renderables) if renderables is not None else [] - ) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - """Console render method to insert line-breaks.""" - yield from self._renderables - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - dimensions = [ - Measurement.get(console, options, renderable) - for renderable in self._renderables - ] - if not dimensions: - return Measurement(1, 1) - _min = max(dimension.minimum for dimension in dimensions) - _max = max(dimension.maximum for dimension in dimensions) - return Measurement(_min, _max) - - def append(self, renderable: "RenderableType") -> None: - self._renderables.append(renderable) - - def __iter__(self) -> Iterable["RenderableType"]: - return iter(self._renderables) - - -class Lines: - """A list subclass which can render to the console.""" - - def __init__(self, lines: Iterable["Text"] = ()) -> None: - self._lines: List["Text"] = list(lines) - - def __repr__(self) -> str: - return f"Lines({self._lines!r})" - - def __iter__(self) -> Iterator["Text"]: - return iter(self._lines) - - @overload - def __getitem__(self, index: int) -> "Text": - ... - - @overload - def __getitem__(self, index: slice) -> List["Text"]: - ... - - def __getitem__(self, index: Union[slice, int]) -> Union["Text", List["Text"]]: - return self._lines[index] - - def __setitem__(self, index: int, value: "Text") -> "Lines": - self._lines[index] = value - return self - - def __len__(self) -> int: - return self._lines.__len__() - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - """Console render method to insert line-breaks.""" - yield from self._lines - - def append(self, line: "Text") -> None: - self._lines.append(line) - - def extend(self, lines: Iterable["Text"]) -> None: - self._lines.extend(lines) - - def pop(self, index: int = -1) -> "Text": - return self._lines.pop(index) - - def justify( - self, - console: "Console", - width: int, - justify: "JustifyMethod" = "left", - overflow: "OverflowMethod" = "fold", - ) -> None: - """Justify and overflow text to a given width. - - Args: - console (Console): Console instance. - width (int): Number of cells available per line. - justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left". - overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold". - - """ - from .text import Text - - if justify == "left": - for line in self._lines: - line.truncate(width, overflow=overflow, pad=True) - elif justify == "center": - for line in self._lines: - line.rstrip() - line.truncate(width, overflow=overflow) - line.pad_left((width - cell_len(line.plain)) // 2) - line.pad_right(width - cell_len(line.plain)) - elif justify == "right": - for line in self._lines: - line.rstrip() - line.truncate(width, overflow=overflow) - line.pad_left(width - cell_len(line.plain)) - elif justify == "full": - for line_index, line in enumerate(self._lines): - if line_index == len(self._lines) - 1: - break - words = line.split(" ") - words_size = sum(cell_len(word.plain) for word in words) - num_spaces = len(words) - 1 - spaces = [1 for _ in range(num_spaces)] - index = 0 - if spaces: - while words_size + num_spaces < width: - spaces[len(spaces) - index - 1] += 1 - num_spaces += 1 - index = (index + 1) % len(spaces) - tokens: List[Text] = [] - for index, (word, next_word) in enumerate( - zip_longest(words, words[1:]) - ): - tokens.append(word) - if index < len(spaces): - style = word.get_style_at_offset(console, -1) - next_style = next_word.get_style_at_offset(console, 0) - space_style = style if style == next_style else line.style - tokens.append(Text(" " * spaces[index], style=space_style)) - self[line_index] = Text("").join(tokens) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/control.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/control.py deleted file mode 100644 index 88fcb92..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/control.py +++ /dev/null @@ -1,225 +0,0 @@ -import sys -import time -from typing import TYPE_CHECKING, Callable, Dict, Iterable, List, Union - -if sys.version_info >= (3, 8): - from typing import Final -else: - from pip._vendor.typing_extensions import Final # pragma: no cover - -from .segment import ControlCode, ControlType, Segment - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - -STRIP_CONTROL_CODES: Final = [ - 7, # Bell - 8, # Backspace - 11, # Vertical tab - 12, # Form feed - 13, # Carriage return -] -_CONTROL_STRIP_TRANSLATE: Final = { - _codepoint: None for _codepoint in STRIP_CONTROL_CODES -} - -CONTROL_ESCAPE: Final = { - 7: "\\a", - 8: "\\b", - 11: "\\v", - 12: "\\f", - 13: "\\r", -} - -CONTROL_CODES_FORMAT: Dict[int, Callable[..., str]] = { - ControlType.BELL: lambda: "\x07", - ControlType.CARRIAGE_RETURN: lambda: "\r", - ControlType.HOME: lambda: "\x1b[H", - ControlType.CLEAR: lambda: "\x1b[2J", - ControlType.ENABLE_ALT_SCREEN: lambda: "\x1b[?1049h", - ControlType.DISABLE_ALT_SCREEN: lambda: "\x1b[?1049l", - ControlType.SHOW_CURSOR: lambda: "\x1b[?25h", - ControlType.HIDE_CURSOR: lambda: "\x1b[?25l", - ControlType.CURSOR_UP: lambda param: f"\x1b[{param}A", - ControlType.CURSOR_DOWN: lambda param: f"\x1b[{param}B", - ControlType.CURSOR_FORWARD: lambda param: f"\x1b[{param}C", - ControlType.CURSOR_BACKWARD: lambda param: f"\x1b[{param}D", - ControlType.CURSOR_MOVE_TO_COLUMN: lambda param: f"\x1b[{param+1}G", - ControlType.ERASE_IN_LINE: lambda param: f"\x1b[{param}K", - ControlType.CURSOR_MOVE_TO: lambda x, y: f"\x1b[{y+1};{x+1}H", - ControlType.SET_WINDOW_TITLE: lambda title: f"\x1b]0;{title}\x07", -} - - -class Control: - """A renderable that inserts a control code (non printable but may move cursor). - - Args: - *codes (str): Positional arguments are either a :class:`~rich.segment.ControlType` enum or a - tuple of ControlType and an integer parameter - """ - - __slots__ = ["segment"] - - def __init__(self, *codes: Union[ControlType, ControlCode]) -> None: - control_codes: List[ControlCode] = [ - (code,) if isinstance(code, ControlType) else code for code in codes - ] - _format_map = CONTROL_CODES_FORMAT - rendered_codes = "".join( - _format_map[code](*parameters) for code, *parameters in control_codes - ) - self.segment = Segment(rendered_codes, None, control_codes) - - @classmethod - def bell(cls) -> "Control": - """Ring the 'bell'.""" - return cls(ControlType.BELL) - - @classmethod - def home(cls) -> "Control": - """Move cursor to 'home' position.""" - return cls(ControlType.HOME) - - @classmethod - def move(cls, x: int = 0, y: int = 0) -> "Control": - """Move cursor relative to current position. - - Args: - x (int): X offset. - y (int): Y offset. - - Returns: - ~Control: Control object. - - """ - - def get_codes() -> Iterable[ControlCode]: - control = ControlType - if x: - yield ( - control.CURSOR_FORWARD if x > 0 else control.CURSOR_BACKWARD, - abs(x), - ) - if y: - yield ( - control.CURSOR_DOWN if y > 0 else control.CURSOR_UP, - abs(y), - ) - - control = cls(*get_codes()) - return control - - @classmethod - def move_to_column(cls, x: int, y: int = 0) -> "Control": - """Move to the given column, optionally add offset to row. - - Returns: - x (int): absolute x (column) - y (int): optional y offset (row) - - Returns: - ~Control: Control object. - """ - - return ( - cls( - (ControlType.CURSOR_MOVE_TO_COLUMN, x), - ( - ControlType.CURSOR_DOWN if y > 0 else ControlType.CURSOR_UP, - abs(y), - ), - ) - if y - else cls((ControlType.CURSOR_MOVE_TO_COLUMN, x)) - ) - - @classmethod - def move_to(cls, x: int, y: int) -> "Control": - """Move cursor to absolute position. - - Args: - x (int): x offset (column) - y (int): y offset (row) - - Returns: - ~Control: Control object. - """ - return cls((ControlType.CURSOR_MOVE_TO, x, y)) - - @classmethod - def clear(cls) -> "Control": - """Clear the screen.""" - return cls(ControlType.CLEAR) - - @classmethod - def show_cursor(cls, show: bool) -> "Control": - """Show or hide the cursor.""" - return cls(ControlType.SHOW_CURSOR if show else ControlType.HIDE_CURSOR) - - @classmethod - def alt_screen(cls, enable: bool) -> "Control": - """Enable or disable alt screen.""" - if enable: - return cls(ControlType.ENABLE_ALT_SCREEN, ControlType.HOME) - else: - return cls(ControlType.DISABLE_ALT_SCREEN) - - @classmethod - def title(cls, title: str) -> "Control": - """Set the terminal window title - - Args: - title (str): The new terminal window title - """ - return cls((ControlType.SET_WINDOW_TITLE, title)) - - def __str__(self) -> str: - return self.segment.text - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.segment.text: - yield self.segment - - -def strip_control_codes( - text: str, _translate_table: Dict[int, None] = _CONTROL_STRIP_TRANSLATE -) -> str: - """Remove control codes from text. - - Args: - text (str): A string possibly contain control codes. - - Returns: - str: String with control codes removed. - """ - return text.translate(_translate_table) - - -def escape_control_codes( - text: str, - _translate_table: Dict[int, str] = CONTROL_ESCAPE, -) -> str: - """Replace control codes with their "escaped" equivalent in the given text. - (e.g. "\b" becomes "\\b") - - Args: - text (str): A string possibly containing control codes. - - Returns: - str: String with control codes replaced with their escaped version. - """ - return text.translate(_translate_table) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - console = Console() - console.print("Look at the title of your terminal window ^") - # console.print(Control((ControlType.SET_WINDOW_TITLE, "Hello, world!"))) - for i in range(10): - console.set_window_title("🚀 Loading" + "." * i) - time.sleep(0.5) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py deleted file mode 100644 index 6c0d732..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py +++ /dev/null @@ -1,191 +0,0 @@ -from typing import Dict - -from .style import Style - -DEFAULT_STYLES: Dict[str, Style] = { - "none": Style.null(), - "reset": Style( - color="default", - bgcolor="default", - dim=False, - bold=False, - italic=False, - underline=False, - blink=False, - blink2=False, - reverse=False, - conceal=False, - strike=False, - ), - "dim": Style(dim=True), - "bright": Style(dim=False), - "bold": Style(bold=True), - "strong": Style(bold=True), - "code": Style(reverse=True, bold=True), - "italic": Style(italic=True), - "emphasize": Style(italic=True), - "underline": Style(underline=True), - "blink": Style(blink=True), - "blink2": Style(blink2=True), - "reverse": Style(reverse=True), - "strike": Style(strike=True), - "black": Style(color="black"), - "red": Style(color="red"), - "green": Style(color="green"), - "yellow": Style(color="yellow"), - "magenta": Style(color="magenta"), - "cyan": Style(color="cyan"), - "white": Style(color="white"), - "inspect.attr": Style(color="yellow", italic=True), - "inspect.attr.dunder": Style(color="yellow", italic=True, dim=True), - "inspect.callable": Style(bold=True, color="red"), - "inspect.async_def": Style(italic=True, color="bright_cyan"), - "inspect.def": Style(italic=True, color="bright_cyan"), - "inspect.class": Style(italic=True, color="bright_cyan"), - "inspect.error": Style(bold=True, color="red"), - "inspect.equals": Style(), - "inspect.help": Style(color="cyan"), - "inspect.doc": Style(dim=True), - "inspect.value.border": Style(color="green"), - "live.ellipsis": Style(bold=True, color="red"), - "layout.tree.row": Style(dim=False, color="red"), - "layout.tree.column": Style(dim=False, color="blue"), - "logging.keyword": Style(bold=True, color="yellow"), - "logging.level.notset": Style(dim=True), - "logging.level.debug": Style(color="green"), - "logging.level.info": Style(color="blue"), - "logging.level.warning": Style(color="yellow"), - "logging.level.error": Style(color="red", bold=True), - "logging.level.critical": Style(color="red", bold=True, reverse=True), - "log.level": Style.null(), - "log.time": Style(color="cyan", dim=True), - "log.message": Style.null(), - "log.path": Style(dim=True), - "repr.ellipsis": Style(color="yellow"), - "repr.indent": Style(color="green", dim=True), - "repr.error": Style(color="red", bold=True), - "repr.str": Style(color="green", italic=False, bold=False), - "repr.brace": Style(bold=True), - "repr.comma": Style(bold=True), - "repr.ipv4": Style(bold=True, color="bright_green"), - "repr.ipv6": Style(bold=True, color="bright_green"), - "repr.eui48": Style(bold=True, color="bright_green"), - "repr.eui64": Style(bold=True, color="bright_green"), - "repr.tag_start": Style(bold=True), - "repr.tag_name": Style(color="bright_magenta", bold=True), - "repr.tag_contents": Style(color="default"), - "repr.tag_end": Style(bold=True), - "repr.attrib_name": Style(color="yellow", italic=False), - "repr.attrib_equal": Style(bold=True), - "repr.attrib_value": Style(color="magenta", italic=False), - "repr.number": Style(color="cyan", bold=True, italic=False), - "repr.number_complex": Style(color="cyan", bold=True, italic=False), # same - "repr.bool_true": Style(color="bright_green", italic=True), - "repr.bool_false": Style(color="bright_red", italic=True), - "repr.none": Style(color="magenta", italic=True), - "repr.url": Style(underline=True, color="bright_blue", italic=False, bold=False), - "repr.uuid": Style(color="bright_yellow", bold=False), - "repr.call": Style(color="magenta", bold=True), - "repr.path": Style(color="magenta"), - "repr.filename": Style(color="bright_magenta"), - "rule.line": Style(color="bright_green"), - "rule.text": Style.null(), - "json.brace": Style(bold=True), - "json.bool_true": Style(color="bright_green", italic=True), - "json.bool_false": Style(color="bright_red", italic=True), - "json.null": Style(color="magenta", italic=True), - "json.number": Style(color="cyan", bold=True, italic=False), - "json.str": Style(color="green", italic=False, bold=False), - "json.key": Style(color="blue", bold=True), - "prompt": Style.null(), - "prompt.choices": Style(color="magenta", bold=True), - "prompt.default": Style(color="cyan", bold=True), - "prompt.invalid": Style(color="red"), - "prompt.invalid.choice": Style(color="red"), - "pretty": Style.null(), - "scope.border": Style(color="blue"), - "scope.key": Style(color="yellow", italic=True), - "scope.key.special": Style(color="yellow", italic=True, dim=True), - "scope.equals": Style(color="red"), - "table.header": Style(bold=True), - "table.footer": Style(bold=True), - "table.cell": Style.null(), - "table.title": Style(italic=True), - "table.caption": Style(italic=True, dim=True), - "traceback.error": Style(color="red", italic=True), - "traceback.border.syntax_error": Style(color="bright_red"), - "traceback.border": Style(color="red"), - "traceback.text": Style.null(), - "traceback.title": Style(color="red", bold=True), - "traceback.exc_type": Style(color="bright_red", bold=True), - "traceback.exc_value": Style.null(), - "traceback.offset": Style(color="bright_red", bold=True), - "traceback.error_range": Style(underline=True, bold=True, dim=False), - "bar.back": Style(color="grey23"), - "bar.complete": Style(color="rgb(249,38,114)"), - "bar.finished": Style(color="rgb(114,156,31)"), - "bar.pulse": Style(color="rgb(249,38,114)"), - "progress.description": Style.null(), - "progress.filesize": Style(color="green"), - "progress.filesize.total": Style(color="green"), - "progress.download": Style(color="green"), - "progress.elapsed": Style(color="yellow"), - "progress.percentage": Style(color="magenta"), - "progress.remaining": Style(color="cyan"), - "progress.data.speed": Style(color="red"), - "progress.spinner": Style(color="green"), - "status.spinner": Style(color="green"), - "tree": Style(), - "tree.line": Style(), - "markdown.paragraph": Style(), - "markdown.text": Style(), - "markdown.em": Style(italic=True), - "markdown.emph": Style(italic=True), # For commonmark backwards compatibility - "markdown.strong": Style(bold=True), - "markdown.code": Style(bold=True, color="cyan", bgcolor="black"), - "markdown.code_block": Style(color="cyan", bgcolor="black"), - "markdown.block_quote": Style(color="magenta"), - "markdown.list": Style(color="cyan"), - "markdown.item": Style(), - "markdown.item.bullet": Style(color="yellow", bold=True), - "markdown.item.number": Style(color="yellow", bold=True), - "markdown.hr": Style(color="yellow"), - "markdown.h1.border": Style(), - "markdown.h1": Style(bold=True), - "markdown.h2": Style(bold=True, underline=True), - "markdown.h3": Style(bold=True), - "markdown.h4": Style(bold=True, dim=True), - "markdown.h5": Style(underline=True), - "markdown.h6": Style(italic=True), - "markdown.h7": Style(italic=True, dim=True), - "markdown.link": Style(color="bright_blue"), - "markdown.link_url": Style(color="blue", underline=True), - "markdown.s": Style(strike=True), - "iso8601.date": Style(color="blue"), - "iso8601.time": Style(color="magenta"), - "iso8601.timezone": Style(color="yellow"), -} - - -if __name__ == "__main__": # pragma: no cover - import argparse - import io - - from pip._vendor.rich.console import Console - from pip._vendor.rich.table import Table - from pip._vendor.rich.text import Text - - parser = argparse.ArgumentParser() - parser.add_argument("--html", action="store_true", help="Export as HTML table") - args = parser.parse_args() - html: bool = args.html - console = Console(record=True, width=70, file=io.StringIO()) if html else Console() - - table = Table("Name", "Styling") - - for style_name, style in DEFAULT_STYLES.items(): - table.add_row(Text(style_name, style=style), str(style)) - - console.print(table) - if html: - print(console.export_html(inline_styles=True)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py deleted file mode 100644 index ad36183..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py +++ /dev/null @@ -1,37 +0,0 @@ -import os -import platform - -from pip._vendor.rich import inspect -from pip._vendor.rich.console import Console, get_windows_console_features -from pip._vendor.rich.panel import Panel -from pip._vendor.rich.pretty import Pretty - - -def report() -> None: # pragma: no cover - """Print a report to the terminal with debugging information""" - console = Console() - inspect(console) - features = get_windows_console_features() - inspect(features) - - env_names = ( - "TERM", - "COLORTERM", - "CLICOLOR", - "NO_COLOR", - "TERM_PROGRAM", - "COLUMNS", - "LINES", - "JUPYTER_COLUMNS", - "JUPYTER_LINES", - "JPY_PARENT_PID", - "VSCODE_VERBOSE_LOGGING", - ) - env = {name: os.getenv(name) for name in env_names} - console.print(Panel.fit((Pretty(env)), title="[b]Environment Variables")) - - console.print(f'platform="{platform.system()}"') - - -if __name__ == "__main__": # pragma: no cover - report() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py deleted file mode 100644 index 791f046..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py +++ /dev/null @@ -1,96 +0,0 @@ -import sys -from typing import TYPE_CHECKING, Optional, Union - -from .jupyter import JupyterMixin -from .segment import Segment -from .style import Style -from ._emoji_codes import EMOJI -from ._emoji_replace import _emoji_replace - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from pip._vendor.typing_extensions import Literal # pragma: no cover - - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - - -EmojiVariant = Literal["emoji", "text"] - - -class NoEmoji(Exception): - """No emoji by that name.""" - - -class Emoji(JupyterMixin): - __slots__ = ["name", "style", "_char", "variant"] - - VARIANTS = {"text": "\uFE0E", "emoji": "\uFE0F"} - - def __init__( - self, - name: str, - style: Union[str, Style] = "none", - variant: Optional[EmojiVariant] = None, - ) -> None: - """A single emoji character. - - Args: - name (str): Name of emoji. - style (Union[str, Style], optional): Optional style. Defaults to None. - - Raises: - NoEmoji: If the emoji doesn't exist. - """ - self.name = name - self.style = style - self.variant = variant - try: - self._char = EMOJI[name] - except KeyError: - raise NoEmoji(f"No emoji called {name!r}") - if variant is not None: - self._char += self.VARIANTS.get(variant, "") - - @classmethod - def replace(cls, text: str) -> str: - """Replace emoji markup with corresponding unicode characters. - - Args: - text (str): A string with emojis codes, e.g. "Hello :smiley:!" - - Returns: - str: A string with emoji codes replaces with actual emoji. - """ - return _emoji_replace(text) - - def __repr__(self) -> str: - return f"" - - def __str__(self) -> str: - return self._char - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - yield Segment(self._char, console.get_style(self.style)) - - -if __name__ == "__main__": # pragma: no cover - import sys - - from pip._vendor.rich.columns import Columns - from pip._vendor.rich.console import Console - - console = Console(record=True) - - columns = Columns( - (f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200D" not in name), - column_first=True, - ) - - console.print(columns) - if len(sys.argv) > 1: - console.save_html(sys.argv[1]) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py deleted file mode 100644 index 0bcbe53..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py +++ /dev/null @@ -1,34 +0,0 @@ -class ConsoleError(Exception): - """An error in console operation.""" - - -class StyleError(Exception): - """An error in styles.""" - - -class StyleSyntaxError(ConsoleError): - """Style was badly formatted.""" - - -class MissingStyle(StyleError): - """No such style.""" - - -class StyleStackError(ConsoleError): - """Style stack is invalid.""" - - -class NotRenderableError(ConsoleError): - """Object is not renderable.""" - - -class MarkupError(ConsoleError): - """Markup was badly formatted.""" - - -class LiveError(ConsoleError): - """Error related to Live display.""" - - -class NoAltScreen(ConsoleError): - """Alt screen mode was required.""" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py deleted file mode 100644 index 4b0b0da..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py +++ /dev/null @@ -1,57 +0,0 @@ -import io -from typing import IO, TYPE_CHECKING, Any, List - -from .ansi import AnsiDecoder -from .text import Text - -if TYPE_CHECKING: - from .console import Console - - -class FileProxy(io.TextIOBase): - """Wraps a file (e.g. sys.stdout) and redirects writes to a console.""" - - def __init__(self, console: "Console", file: IO[str]) -> None: - self.__console = console - self.__file = file - self.__buffer: List[str] = [] - self.__ansi_decoder = AnsiDecoder() - - @property - def rich_proxied_file(self) -> IO[str]: - """Get proxied file.""" - return self.__file - - def __getattr__(self, name: str) -> Any: - return getattr(self.__file, name) - - def write(self, text: str) -> int: - if not isinstance(text, str): - raise TypeError(f"write() argument must be str, not {type(text).__name__}") - buffer = self.__buffer - lines: List[str] = [] - while text: - line, new_line, text = text.partition("\n") - if new_line: - lines.append("".join(buffer) + line) - buffer.clear() - else: - buffer.append(line) - break - if lines: - console = self.__console - with console: - output = Text("\n").join( - self.__ansi_decoder.decode_line(line) for line in lines - ) - console.print(output) - return len(text) - - def flush(self) -> None: - output = "".join(self.__buffer) - if output: - self.__console.print(output) - del self.__buffer[:] - - def fileno(self) -> int: - return self.__file.fileno() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py deleted file mode 100644 index 83bc911..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py +++ /dev/null @@ -1,88 +0,0 @@ -"""Functions for reporting filesizes. Borrowed from https://github.com/PyFilesystem/pyfilesystem2 - -The functions declared in this module should cover the different -use cases needed to generate a string representation of a file size -using several different units. Since there are many standards regarding -file size units, three different functions have been implemented. - -See Also: - * `Wikipedia: Binary prefix `_ - -""" - -__all__ = ["decimal"] - -from typing import Iterable, List, Optional, Tuple - - -def _to_str( - size: int, - suffixes: Iterable[str], - base: int, - *, - precision: Optional[int] = 1, - separator: Optional[str] = " ", -) -> str: - if size == 1: - return "1 byte" - elif size < base: - return f"{size:,} bytes" - - for i, suffix in enumerate(suffixes, 2): # noqa: B007 - unit = base**i - if size < unit: - break - return "{:,.{precision}f}{separator}{}".format( - (base * size / unit), - suffix, - precision=precision, - separator=separator, - ) - - -def pick_unit_and_suffix(size: int, suffixes: List[str], base: int) -> Tuple[int, str]: - """Pick a suffix and base for the given size.""" - for i, suffix in enumerate(suffixes): - unit = base**i - if size < unit * base: - break - return unit, suffix - - -def decimal( - size: int, - *, - precision: Optional[int] = 1, - separator: Optional[str] = " ", -) -> str: - """Convert a filesize in to a string (powers of 1000, SI prefixes). - - In this convention, ``1000 B = 1 kB``. - - This is typically the format used to advertise the storage - capacity of USB flash drives and the like (*256 MB* meaning - actually a storage capacity of more than *256 000 000 B*), - or used by **Mac OS X** since v10.6 to report file sizes. - - Arguments: - int (size): A file size. - int (precision): The number of decimal places to include (default = 1). - str (separator): The string to separate the value from the units (default = " "). - - Returns: - `str`: A string containing a abbreviated file size and units. - - Example: - >>> filesize.decimal(30000) - '30.0 kB' - >>> filesize.decimal(30000, precision=2, separator="") - '30.00kB' - - """ - return _to_str( - size, - ("kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"), - 1000, - precision=precision, - separator=separator, - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py deleted file mode 100644 index e4c462e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py +++ /dev/null @@ -1,232 +0,0 @@ -import re -from abc import ABC, abstractmethod -from typing import List, Union - -from .text import Span, Text - - -def _combine_regex(*regexes: str) -> str: - """Combine a number of regexes in to a single regex. - - Returns: - str: New regex with all regexes ORed together. - """ - return "|".join(regexes) - - -class Highlighter(ABC): - """Abstract base class for highlighters.""" - - def __call__(self, text: Union[str, Text]) -> Text: - """Highlight a str or Text instance. - - Args: - text (Union[str, ~Text]): Text to highlight. - - Raises: - TypeError: If not called with text or str. - - Returns: - Text: A test instance with highlighting applied. - """ - if isinstance(text, str): - highlight_text = Text(text) - elif isinstance(text, Text): - highlight_text = text.copy() - else: - raise TypeError(f"str or Text instance required, not {text!r}") - self.highlight(highlight_text) - return highlight_text - - @abstractmethod - def highlight(self, text: Text) -> None: - """Apply highlighting in place to text. - - Args: - text (~Text): A text object highlight. - """ - - -class NullHighlighter(Highlighter): - """A highlighter object that doesn't highlight. - - May be used to disable highlighting entirely. - - """ - - def highlight(self, text: Text) -> None: - """Nothing to do""" - - -class RegexHighlighter(Highlighter): - """Applies highlighting from a list of regular expressions.""" - - highlights: List[str] = [] - base_style: str = "" - - def highlight(self, text: Text) -> None: - """Highlight :class:`rich.text.Text` using regular expressions. - - Args: - text (~Text): Text to highlighted. - - """ - - highlight_regex = text.highlight_regex - for re_highlight in self.highlights: - highlight_regex(re_highlight, style_prefix=self.base_style) - - -class ReprHighlighter(RegexHighlighter): - """Highlights the text typically produced from ``__repr__`` methods.""" - - base_style = "repr." - highlights = [ - r"(?P<)(?P[-\w.:|]*)(?P[\w\W]*)(?P>)", - r'(?P[\w_]{1,50})=(?P"?[\w_]+"?)?', - r"(?P[][{}()])", - _combine_regex( - r"(?P[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})", - r"(?P([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})", - r"(?P(?:[0-9A-Fa-f]{1,2}-){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){3}[0-9A-Fa-f]{4})", - r"(?P(?:[0-9A-Fa-f]{1,2}-){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})", - r"(?P[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})", - r"(?P[\w.]*?)\(", - r"\b(?PTrue)\b|\b(?PFalse)\b|\b(?PNone)\b", - r"(?P\.\.\.)", - r"(?P(?(?\B(/[-\w._+]+)*\/)(?P[-\w._+]*)?", - r"(?b?'''.*?(?(file|https|http|ws|wss)://[-0-9a-zA-Z$_+!`(),.?/;:&=%#~@]*)", - ), - ] - - -class JSONHighlighter(RegexHighlighter): - """Highlights JSON""" - - # Captures the start and end of JSON strings, handling escaped quotes - JSON_STR = r"(?b?\".*?(?[\{\[\(\)\]\}])", - r"\b(?Ptrue)\b|\b(?Pfalse)\b|\b(?Pnull)\b", - r"(?P(? None: - super().highlight(text) - - # Additional work to handle highlighting JSON keys - plain = text.plain - append = text.spans.append - whitespace = self.JSON_WHITESPACE - for match in re.finditer(self.JSON_STR, plain): - start, end = match.span() - cursor = end - while cursor < len(plain): - char = plain[cursor] - cursor += 1 - if char == ":": - append(Span(start, end, "json.key")) - elif char in whitespace: - continue - break - - -class ISO8601Highlighter(RegexHighlighter): - """Highlights the ISO8601 date time strings. - Regex reference: https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html - """ - - base_style = "iso8601." - highlights = [ - # - # Dates - # - # Calendar month (e.g. 2008-08). The hyphen is required - r"^(?P[0-9]{4})-(?P1[0-2]|0[1-9])$", - # Calendar date w/o hyphens (e.g. 20080830) - r"^(?P(?P[0-9]{4})(?P1[0-2]|0[1-9])(?P3[01]|0[1-9]|[12][0-9]))$", - # Ordinal date (e.g. 2008-243). The hyphen is optional - r"^(?P(?P[0-9]{4})-?(?P36[0-6]|3[0-5][0-9]|[12][0-9]{2}|0[1-9][0-9]|00[1-9]))$", - # - # Weeks - # - # Week of the year (e.g., 2008-W35). The hyphen is optional - r"^(?P(?P[0-9]{4})-?W(?P5[0-3]|[1-4][0-9]|0[1-9]))$", - # Week date (e.g., 2008-W35-6). The hyphens are optional - r"^(?P(?P[0-9]{4})-?W(?P5[0-3]|[1-4][0-9]|0[1-9])-?(?P[1-7]))$", - # - # Times - # - # Hours and minutes (e.g., 17:21). The colon is optional - r"^(?P
{text}' - append_fragment(text) - - code = "".join(fragments) - html = JUPYTER_HTML_FORMAT.format(code=code) - - return html - - -def display(segments: Iterable[Segment], text: str) -> None: - """Render segments to Jupyter.""" - html = _render_segments(segments) - jupyter_renderable = JupyterRenderable(html, text) - try: - from IPython.display import display as ipython_display - - ipython_display(jupyter_renderable) - except ModuleNotFoundError: - # Handle the case where the Console has force_jupyter=True, - # but IPython is not installed. - pass - - -def print(*args: Any, **kwargs: Any) -> None: - """Proxy for Console print.""" - console = get_console() - return console.print(*args, **kwargs) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/layout.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/layout.py deleted file mode 100644 index a6f1a31..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/layout.py +++ /dev/null @@ -1,442 +0,0 @@ -from abc import ABC, abstractmethod -from itertools import islice -from operator import itemgetter -from threading import RLock -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Union, -) - -from ._ratio import ratio_resolve -from .align import Align -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .highlighter import ReprHighlighter -from .panel import Panel -from .pretty import Pretty -from .region import Region -from .repr import Result, rich_repr -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from pip._vendor.rich.tree import Tree - - -class LayoutRender(NamedTuple): - """An individual layout render.""" - - region: Region - render: List[List[Segment]] - - -RegionMap = Dict["Layout", Region] -RenderMap = Dict["Layout", LayoutRender] - - -class LayoutError(Exception): - """Layout related error.""" - - -class NoSplitter(LayoutError): - """Requested splitter does not exist.""" - - -class _Placeholder: - """An internal renderable used as a Layout placeholder.""" - - highlighter = ReprHighlighter() - - def __init__(self, layout: "Layout", style: StyleType = "") -> None: - self.layout = layout - self.style = style - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = options.max_width - height = options.height or options.size.height - layout = self.layout - title = ( - f"{layout.name!r} ({width} x {height})" - if layout.name - else f"({width} x {height})" - ) - yield Panel( - Align.center(Pretty(layout), vertical="middle"), - style=self.style, - title=self.highlighter(title), - border_style="blue", - height=height, - ) - - -class Splitter(ABC): - """Base class for a splitter.""" - - name: str = "" - - @abstractmethod - def get_tree_icon(self) -> str: - """Get the icon (emoji) used in layout.tree""" - - @abstractmethod - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - """Divide a region amongst several child layouts. - - Args: - children (Sequence(Layout)): A number of child layouts. - region (Region): A rectangular region to divide. - """ - - -class RowSplitter(Splitter): - """Split a layout region in to rows.""" - - name = "row" - - def get_tree_icon(self) -> str: - return "[layout.tree.row]⬌" - - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - x, y, width, height = region - render_widths = ratio_resolve(width, children) - offset = 0 - _Region = Region - for child, child_width in zip(children, render_widths): - yield child, _Region(x + offset, y, child_width, height) - offset += child_width - - -class ColumnSplitter(Splitter): - """Split a layout region in to columns.""" - - name = "column" - - def get_tree_icon(self) -> str: - return "[layout.tree.column]⬍" - - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - x, y, width, height = region - render_heights = ratio_resolve(height, children) - offset = 0 - _Region = Region - for child, child_height in zip(children, render_heights): - yield child, _Region(x, y + offset, width, child_height) - offset += child_height - - -@rich_repr -class Layout: - """A renderable to divide a fixed height in to rows or columns. - - Args: - renderable (RenderableType, optional): Renderable content, or None for placeholder. Defaults to None. - name (str, optional): Optional identifier for Layout. Defaults to None. - size (int, optional): Optional fixed size of layout. Defaults to None. - minimum_size (int, optional): Minimum size of layout. Defaults to 1. - ratio (int, optional): Optional ratio for flexible layout. Defaults to 1. - visible (bool, optional): Visibility of layout. Defaults to True. - """ - - splitters = {"row": RowSplitter, "column": ColumnSplitter} - - def __init__( - self, - renderable: Optional[RenderableType] = None, - *, - name: Optional[str] = None, - size: Optional[int] = None, - minimum_size: int = 1, - ratio: int = 1, - visible: bool = True, - ) -> None: - self._renderable = renderable or _Placeholder(self) - self.size = size - self.minimum_size = minimum_size - self.ratio = ratio - self.name = name - self.visible = visible - self.splitter: Splitter = self.splitters["column"]() - self._children: List[Layout] = [] - self._render_map: RenderMap = {} - self._lock = RLock() - - def __rich_repr__(self) -> Result: - yield "name", self.name, None - yield "size", self.size, None - yield "minimum_size", self.minimum_size, 1 - yield "ratio", self.ratio, 1 - - @property - def renderable(self) -> RenderableType: - """Layout renderable.""" - return self if self._children else self._renderable - - @property - def children(self) -> List["Layout"]: - """Gets (visible) layout children.""" - return [child for child in self._children if child.visible] - - @property - def map(self) -> RenderMap: - """Get a map of the last render.""" - return self._render_map - - def get(self, name: str) -> Optional["Layout"]: - """Get a named layout, or None if it doesn't exist. - - Args: - name (str): Name of layout. - - Returns: - Optional[Layout]: Layout instance or None if no layout was found. - """ - if self.name == name: - return self - else: - for child in self._children: - named_layout = child.get(name) - if named_layout is not None: - return named_layout - return None - - def __getitem__(self, name: str) -> "Layout": - layout = self.get(name) - if layout is None: - raise KeyError(f"No layout with name {name!r}") - return layout - - @property - def tree(self) -> "Tree": - """Get a tree renderable to show layout structure.""" - from pip._vendor.rich.styled import Styled - from pip._vendor.rich.table import Table - from pip._vendor.rich.tree import Tree - - def summary(layout: "Layout") -> Table: - icon = layout.splitter.get_tree_icon() - - table = Table.grid(padding=(0, 1, 0, 0)) - - text: RenderableType = ( - Pretty(layout) if layout.visible else Styled(Pretty(layout), "dim") - ) - table.add_row(icon, text) - _summary = table - return _summary - - layout = self - tree = Tree( - summary(layout), - guide_style=f"layout.tree.{layout.splitter.name}", - highlight=True, - ) - - def recurse(tree: "Tree", layout: "Layout") -> None: - for child in layout._children: - recurse( - tree.add( - summary(child), - guide_style=f"layout.tree.{child.splitter.name}", - ), - child, - ) - - recurse(tree, self) - return tree - - def split( - self, - *layouts: Union["Layout", RenderableType], - splitter: Union[Splitter, str] = "column", - ) -> None: - """Split the layout in to multiple sub-layouts. - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - splitter (Union[Splitter, str]): Splitter instance or name of splitter. - """ - _layouts = [ - layout if isinstance(layout, Layout) else Layout(layout) - for layout in layouts - ] - try: - self.splitter = ( - splitter - if isinstance(splitter, Splitter) - else self.splitters[splitter]() - ) - except KeyError: - raise NoSplitter(f"No splitter called {splitter!r}") - self._children[:] = _layouts - - def add_split(self, *layouts: Union["Layout", RenderableType]) -> None: - """Add a new layout(s) to existing split. - - Args: - *layouts (Union[Layout, RenderableType]): Positional arguments should be renderables or (sub) Layout instances. - - """ - _layouts = ( - layout if isinstance(layout, Layout) else Layout(layout) - for layout in layouts - ) - self._children.extend(_layouts) - - def split_row(self, *layouts: Union["Layout", RenderableType]) -> None: - """Split the layout in to a row (layouts side by side). - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - """ - self.split(*layouts, splitter="row") - - def split_column(self, *layouts: Union["Layout", RenderableType]) -> None: - """Split the layout in to a column (layouts stacked on top of each other). - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - """ - self.split(*layouts, splitter="column") - - def unsplit(self) -> None: - """Reset splits to initial state.""" - del self._children[:] - - def update(self, renderable: RenderableType) -> None: - """Update renderable. - - Args: - renderable (RenderableType): New renderable object. - """ - with self._lock: - self._renderable = renderable - - def refresh_screen(self, console: "Console", layout_name: str) -> None: - """Refresh a sub-layout. - - Args: - console (Console): Console instance where Layout is to be rendered. - layout_name (str): Name of layout. - """ - with self._lock: - layout = self[layout_name] - region, _lines = self._render_map[layout] - (x, y, width, height) = region - lines = console.render_lines( - layout, console.options.update_dimensions(width, height) - ) - self._render_map[layout] = LayoutRender(region, lines) - console.update_screen_lines(lines, x, y) - - def _make_region_map(self, width: int, height: int) -> RegionMap: - """Create a dict that maps layout on to Region.""" - stack: List[Tuple[Layout, Region]] = [(self, Region(0, 0, width, height))] - push = stack.append - pop = stack.pop - layout_regions: List[Tuple[Layout, Region]] = [] - append_layout_region = layout_regions.append - while stack: - append_layout_region(pop()) - layout, region = layout_regions[-1] - children = layout.children - if children: - for child_and_region in layout.splitter.divide(children, region): - push(child_and_region) - - region_map = { - layout: region - for layout, region in sorted(layout_regions, key=itemgetter(1)) - } - return region_map - - def render(self, console: Console, options: ConsoleOptions) -> RenderMap: - """Render the sub_layouts. - - Args: - console (Console): Console instance. - options (ConsoleOptions): Console options. - - Returns: - RenderMap: A dict that maps Layout on to a tuple of Region, lines - """ - render_width = options.max_width - render_height = options.height or console.height - region_map = self._make_region_map(render_width, render_height) - layout_regions = [ - (layout, region) - for layout, region in region_map.items() - if not layout.children - ] - render_map: Dict["Layout", "LayoutRender"] = {} - render_lines = console.render_lines - update_dimensions = options.update_dimensions - - for layout, region in layout_regions: - lines = render_lines( - layout.renderable, update_dimensions(region.width, region.height) - ) - render_map[layout] = LayoutRender(region, lines) - return render_map - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - with self._lock: - width = options.max_width or console.width - height = options.height or console.height - render_map = self.render(console, options.update_dimensions(width, height)) - self._render_map = render_map - layout_lines: List[List[Segment]] = [[] for _ in range(height)] - _islice = islice - for region, lines in render_map.values(): - _x, y, _layout_width, layout_height = region - for row, line in zip( - _islice(layout_lines, y, y + layout_height), lines - ): - row.extend(line) - - new_line = Segment.line() - for layout_row in layout_lines: - yield from layout_row - yield new_line - - -if __name__ == "__main__": - from pip._vendor.rich.console import Console - - console = Console() - layout = Layout() - - layout.split_column( - Layout(name="header", size=3), - Layout(ratio=1, name="main"), - Layout(size=10, name="footer"), - ) - - layout["main"].split_row(Layout(name="side"), Layout(name="body", ratio=2)) - - layout["body"].split_row(Layout(name="content", ratio=2), Layout(name="s2")) - - layout["s2"].split_column( - Layout(name="top"), Layout(name="middle"), Layout(name="bottom") - ) - - layout["side"].split_column(Layout(layout.tree, name="left1"), Layout(name="left2")) - - layout["content"].update("foo") - - console.print(layout) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live.py deleted file mode 100644 index 8738cf0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live.py +++ /dev/null @@ -1,375 +0,0 @@ -import sys -from threading import Event, RLock, Thread -from types import TracebackType -from typing import IO, Any, Callable, List, Optional, TextIO, Type, cast - -from . import get_console -from .console import Console, ConsoleRenderable, RenderableType, RenderHook -from .control import Control -from .file_proxy import FileProxy -from .jupyter import JupyterMixin -from .live_render import LiveRender, VerticalOverflowMethod -from .screen import Screen -from .text import Text - - -class _RefreshThread(Thread): - """A thread that calls refresh() at regular intervals.""" - - def __init__(self, live: "Live", refresh_per_second: float) -> None: - self.live = live - self.refresh_per_second = refresh_per_second - self.done = Event() - super().__init__(daemon=True) - - def stop(self) -> None: - self.done.set() - - def run(self) -> None: - while not self.done.wait(1 / self.refresh_per_second): - with self.live._lock: - if not self.done.is_set(): - self.live.refresh() - - -class Live(JupyterMixin, RenderHook): - """Renders an auto-updating live display of any given renderable. - - Args: - renderable (RenderableType, optional): The renderable to live display. Defaults to displaying nothing. - console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout. - screen (bool, optional): Enable alternate screen mode. Defaults to False. - auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()` or `update()` with refresh flag. Defaults to True - refresh_per_second (float, optional): Number of times per second to refresh the live display. Defaults to 4. - transient (bool, optional): Clear the renderable on exit (has no effect when screen=True). Defaults to False. - redirect_stdout (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True. - redirect_stderr (bool, optional): Enable redirection of stderr. Defaults to True. - vertical_overflow (VerticalOverflowMethod, optional): How to handle renderable when it is too tall for the console. Defaults to "ellipsis". - get_renderable (Callable[[], RenderableType], optional): Optional callable to get renderable. Defaults to None. - """ - - def __init__( - self, - renderable: Optional[RenderableType] = None, - *, - console: Optional[Console] = None, - screen: bool = False, - auto_refresh: bool = True, - refresh_per_second: float = 4, - transient: bool = False, - redirect_stdout: bool = True, - redirect_stderr: bool = True, - vertical_overflow: VerticalOverflowMethod = "ellipsis", - get_renderable: Optional[Callable[[], RenderableType]] = None, - ) -> None: - assert refresh_per_second > 0, "refresh_per_second must be > 0" - self._renderable = renderable - self.console = console if console is not None else get_console() - self._screen = screen - self._alt_screen = False - - self._redirect_stdout = redirect_stdout - self._redirect_stderr = redirect_stderr - self._restore_stdout: Optional[IO[str]] = None - self._restore_stderr: Optional[IO[str]] = None - - self._lock = RLock() - self.ipy_widget: Optional[Any] = None - self.auto_refresh = auto_refresh - self._started: bool = False - self.transient = True if screen else transient - - self._refresh_thread: Optional[_RefreshThread] = None - self.refresh_per_second = refresh_per_second - - self.vertical_overflow = vertical_overflow - self._get_renderable = get_renderable - self._live_render = LiveRender( - self.get_renderable(), vertical_overflow=vertical_overflow - ) - - @property - def is_started(self) -> bool: - """Check if live display has been started.""" - return self._started - - def get_renderable(self) -> RenderableType: - renderable = ( - self._get_renderable() - if self._get_renderable is not None - else self._renderable - ) - return renderable or "" - - def start(self, refresh: bool = False) -> None: - """Start live rendering display. - - Args: - refresh (bool, optional): Also refresh. Defaults to False. - """ - with self._lock: - if self._started: - return - self.console.set_live(self) - self._started = True - if self._screen: - self._alt_screen = self.console.set_alt_screen(True) - self.console.show_cursor(False) - self._enable_redirect_io() - self.console.push_render_hook(self) - if refresh: - try: - self.refresh() - except Exception: - # If refresh fails, we want to stop the redirection of sys.stderr, - # so the error stacktrace is properly displayed in the terminal. - # (or, if the code that calls Rich captures the exception and wants to display something, - # let this be displayed in the terminal). - self.stop() - raise - if self.auto_refresh: - self._refresh_thread = _RefreshThread(self, self.refresh_per_second) - self._refresh_thread.start() - - def stop(self) -> None: - """Stop live rendering display.""" - with self._lock: - if not self._started: - return - self.console.clear_live() - self._started = False - - if self.auto_refresh and self._refresh_thread is not None: - self._refresh_thread.stop() - self._refresh_thread = None - # allow it to fully render on the last even if overflow - self.vertical_overflow = "visible" - with self.console: - try: - if not self._alt_screen and not self.console.is_jupyter: - self.refresh() - finally: - self._disable_redirect_io() - self.console.pop_render_hook() - if not self._alt_screen and self.console.is_terminal: - self.console.line() - self.console.show_cursor(True) - if self._alt_screen: - self.console.set_alt_screen(False) - - if self.transient and not self._alt_screen: - self.console.control(self._live_render.restore_cursor()) - if self.ipy_widget is not None and self.transient: - self.ipy_widget.close() # pragma: no cover - - def __enter__(self) -> "Live": - self.start(refresh=self._renderable is not None) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - def _enable_redirect_io(self) -> None: - """Enable redirecting of stdout / stderr.""" - if self.console.is_terminal or self.console.is_jupyter: - if self._redirect_stdout and not isinstance(sys.stdout, FileProxy): - self._restore_stdout = sys.stdout - sys.stdout = cast("TextIO", FileProxy(self.console, sys.stdout)) - if self._redirect_stderr and not isinstance(sys.stderr, FileProxy): - self._restore_stderr = sys.stderr - sys.stderr = cast("TextIO", FileProxy(self.console, sys.stderr)) - - def _disable_redirect_io(self) -> None: - """Disable redirecting of stdout / stderr.""" - if self._restore_stdout: - sys.stdout = cast("TextIO", self._restore_stdout) - self._restore_stdout = None - if self._restore_stderr: - sys.stderr = cast("TextIO", self._restore_stderr) - self._restore_stderr = None - - @property - def renderable(self) -> RenderableType: - """Get the renderable that is being displayed - - Returns: - RenderableType: Displayed renderable. - """ - renderable = self.get_renderable() - return Screen(renderable) if self._alt_screen else renderable - - def update(self, renderable: RenderableType, *, refresh: bool = False) -> None: - """Update the renderable that is being displayed - - Args: - renderable (RenderableType): New renderable to use. - refresh (bool, optional): Refresh the display. Defaults to False. - """ - if isinstance(renderable, str): - renderable = self.console.render_str(renderable) - with self._lock: - self._renderable = renderable - if refresh: - self.refresh() - - def refresh(self) -> None: - """Update the display of the Live Render.""" - with self._lock: - self._live_render.set_renderable(self.renderable) - if self.console.is_jupyter: # pragma: no cover - try: - from IPython.display import display - from ipywidgets import Output - except ImportError: - import warnings - - warnings.warn('install "ipywidgets" for Jupyter support') - else: - if self.ipy_widget is None: - self.ipy_widget = Output() - display(self.ipy_widget) - - with self.ipy_widget: - self.ipy_widget.clear_output(wait=True) - self.console.print(self._live_render.renderable) - elif self.console.is_terminal and not self.console.is_dumb_terminal: - with self.console: - self.console.print(Control()) - elif ( - not self._started and not self.transient - ): # if it is finished allow files or dumb-terminals to see final result - with self.console: - self.console.print(Control()) - - def process_renderables( - self, renderables: List[ConsoleRenderable] - ) -> List[ConsoleRenderable]: - """Process renderables to restore cursor and display progress.""" - self._live_render.vertical_overflow = self.vertical_overflow - if self.console.is_interactive: - # lock needs acquiring as user can modify live_render renderable at any time unlike in Progress. - with self._lock: - reset = ( - Control.home() - if self._alt_screen - else self._live_render.position_cursor() - ) - renderables = [reset, *renderables, self._live_render] - elif ( - not self._started and not self.transient - ): # if it is finished render the final output for files or dumb_terminals - renderables = [*renderables, self._live_render] - - return renderables - - -if __name__ == "__main__": # pragma: no cover - import random - import time - from itertools import cycle - from typing import Dict, List, Tuple - - from .align import Align - from .console import Console - from .live import Live as Live - from .panel import Panel - from .rule import Rule - from .syntax import Syntax - from .table import Table - - console = Console() - - syntax = Syntax( - '''def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value''', - "python", - line_numbers=True, - ) - - table = Table("foo", "bar", "baz") - table.add_row("1", "2", "3") - - progress_renderables = [ - "You can make the terminal shorter and taller to see the live table hide" - "Text may be printed while the progress bars are rendering.", - Panel("In fact, [i]any[/i] renderable will work"), - "Such as [magenta]tables[/]...", - table, - "Pretty printed structures...", - {"type": "example", "text": "Pretty printed"}, - "Syntax...", - syntax, - Rule("Give it a try!"), - ] - - examples = cycle(progress_renderables) - - exchanges = [ - "SGD", - "MYR", - "EUR", - "USD", - "AUD", - "JPY", - "CNH", - "HKD", - "CAD", - "INR", - "DKK", - "GBP", - "RUB", - "NZD", - "MXN", - "IDR", - "TWD", - "THB", - "VND", - ] - with Live(console=console) as live_table: - exchange_rate_dict: Dict[Tuple[str, str], float] = {} - - for index in range(100): - select_exchange = exchanges[index % len(exchanges)] - - for exchange in exchanges: - if exchange == select_exchange: - continue - time.sleep(0.4) - if random.randint(0, 10) < 1: - console.log(next(examples)) - exchange_rate_dict[(select_exchange, exchange)] = 200 / ( - (random.random() * 320) + 1 - ) - if len(exchange_rate_dict) > len(exchanges) - 1: - exchange_rate_dict.pop(list(exchange_rate_dict.keys())[0]) - table = Table(title="Exchange Rates") - - table.add_column("Source Currency") - table.add_column("Destination Currency") - table.add_column("Exchange Rate") - - for (source, dest), exchange_rate in exchange_rate_dict.items(): - table.add_row( - source, - dest, - Text( - f"{exchange_rate:.4f}", - style="red" if exchange_rate < 1.0 else "green", - ), - ) - - live_table.update(Align.center(table)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py deleted file mode 100644 index e20745d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py +++ /dev/null @@ -1,112 +0,0 @@ -import sys -from typing import Optional, Tuple - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from pip._vendor.typing_extensions import Literal # pragma: no cover - - -from ._loop import loop_last -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .control import Control -from .segment import ControlType, Segment -from .style import StyleType -from .text import Text - -VerticalOverflowMethod = Literal["crop", "ellipsis", "visible"] - - -class LiveRender: - """Creates a renderable that may be updated. - - Args: - renderable (RenderableType): Any renderable object. - style (StyleType, optional): An optional style to apply to the renderable. Defaults to "". - """ - - def __init__( - self, - renderable: RenderableType, - style: StyleType = "", - vertical_overflow: VerticalOverflowMethod = "ellipsis", - ) -> None: - self.renderable = renderable - self.style = style - self.vertical_overflow = vertical_overflow - self._shape: Optional[Tuple[int, int]] = None - - def set_renderable(self, renderable: RenderableType) -> None: - """Set a new renderable. - - Args: - renderable (RenderableType): Any renderable object, including str. - """ - self.renderable = renderable - - def position_cursor(self) -> Control: - """Get control codes to move cursor to beginning of live render. - - Returns: - Control: A control instance that may be printed. - """ - if self._shape is not None: - _, height = self._shape - return Control( - ControlType.CARRIAGE_RETURN, - (ControlType.ERASE_IN_LINE, 2), - *( - ( - (ControlType.CURSOR_UP, 1), - (ControlType.ERASE_IN_LINE, 2), - ) - * (height - 1) - ) - ) - return Control() - - def restore_cursor(self) -> Control: - """Get control codes to clear the render and restore the cursor to its previous position. - - Returns: - Control: A Control instance that may be printed. - """ - if self._shape is not None: - _, height = self._shape - return Control( - ControlType.CARRIAGE_RETURN, - *((ControlType.CURSOR_UP, 1), (ControlType.ERASE_IN_LINE, 2)) * height - ) - return Control() - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - renderable = self.renderable - style = console.get_style(self.style) - lines = console.render_lines(renderable, options, style=style, pad=False) - shape = Segment.get_shape(lines) - - _, height = shape - if height > options.size.height: - if self.vertical_overflow == "crop": - lines = lines[: options.size.height] - shape = Segment.get_shape(lines) - elif self.vertical_overflow == "ellipsis": - lines = lines[: (options.size.height - 1)] - overflow_text = Text( - "...", - overflow="crop", - justify="center", - end="", - style="live.ellipsis", - ) - lines.append(list(console.render(overflow_text))) - shape = Segment.get_shape(lines) - self._shape = shape - - new_line = Segment.line() - for last, line in loop_last(lines): - yield from line - if not last: - yield new_line diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py deleted file mode 100644 index ff8d5d9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py +++ /dev/null @@ -1,297 +0,0 @@ -import logging -from datetime import datetime -from logging import Handler, LogRecord -from pathlib import Path -from types import ModuleType -from typing import ClassVar, Iterable, List, Optional, Type, Union - -from pip._vendor.rich._null_file import NullFile - -from . import get_console -from ._log_render import FormatTimeCallable, LogRender -from .console import Console, ConsoleRenderable -from .highlighter import Highlighter, ReprHighlighter -from .text import Text -from .traceback import Traceback - - -class RichHandler(Handler): - """A logging handler that renders output with Rich. The time / level / message and file are displayed in columns. - The level is color coded, and the message is syntax highlighted. - - Note: - Be careful when enabling console markup in log messages if you have configured logging for libraries not - under your control. If a dependency writes messages containing square brackets, it may not produce the intended output. - - Args: - level (Union[int, str], optional): Log level. Defaults to logging.NOTSET. - console (:class:`~rich.console.Console`, optional): Optional console instance to write logs. - Default will use a global console instance writing to stdout. - show_time (bool, optional): Show a column for the time. Defaults to True. - omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True. - show_level (bool, optional): Show a column for the level. Defaults to True. - show_path (bool, optional): Show the path to the original log call. Defaults to True. - enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True. - highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None. - markup (bool, optional): Enable console markup in log messages. Defaults to False. - rich_tracebacks (bool, optional): Enable rich tracebacks with syntax highlighting and formatting. Defaults to False. - tracebacks_width (Optional[int], optional): Number of characters used to render tracebacks, or None for full width. Defaults to None. - tracebacks_code_width (int, optional): Number of code characters used to render tracebacks, or None for full width. Defaults to 88. - tracebacks_extra_lines (int, optional): Additional lines of code to render tracebacks, or None for full width. Defaults to None. - tracebacks_theme (str, optional): Override pygments theme used in traceback. - tracebacks_word_wrap (bool, optional): Enable word wrapping of long tracebacks lines. Defaults to True. - tracebacks_show_locals (bool, optional): Enable display of locals in tracebacks. Defaults to False. - tracebacks_suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - tracebacks_max_frames (int, optional): Optional maximum number of frames returned by traceback. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%x %X] ". - keywords (List[str], optional): List of words to highlight instead of ``RichHandler.KEYWORDS``. - """ - - KEYWORDS: ClassVar[Optional[List[str]]] = [ - "GET", - "POST", - "HEAD", - "PUT", - "DELETE", - "OPTIONS", - "TRACE", - "PATCH", - ] - HIGHLIGHTER_CLASS: ClassVar[Type[Highlighter]] = ReprHighlighter - - def __init__( - self, - level: Union[int, str] = logging.NOTSET, - console: Optional[Console] = None, - *, - show_time: bool = True, - omit_repeated_times: bool = True, - show_level: bool = True, - show_path: bool = True, - enable_link_path: bool = True, - highlighter: Optional[Highlighter] = None, - markup: bool = False, - rich_tracebacks: bool = False, - tracebacks_width: Optional[int] = None, - tracebacks_code_width: int = 88, - tracebacks_extra_lines: int = 3, - tracebacks_theme: Optional[str] = None, - tracebacks_word_wrap: bool = True, - tracebacks_show_locals: bool = False, - tracebacks_suppress: Iterable[Union[str, ModuleType]] = (), - tracebacks_max_frames: int = 100, - locals_max_length: int = 10, - locals_max_string: int = 80, - log_time_format: Union[str, FormatTimeCallable] = "[%x %X]", - keywords: Optional[List[str]] = None, - ) -> None: - super().__init__(level=level) - self.console = console or get_console() - self.highlighter = highlighter or self.HIGHLIGHTER_CLASS() - self._log_render = LogRender( - show_time=show_time, - show_level=show_level, - show_path=show_path, - time_format=log_time_format, - omit_repeated_times=omit_repeated_times, - level_width=None, - ) - self.enable_link_path = enable_link_path - self.markup = markup - self.rich_tracebacks = rich_tracebacks - self.tracebacks_width = tracebacks_width - self.tracebacks_extra_lines = tracebacks_extra_lines - self.tracebacks_theme = tracebacks_theme - self.tracebacks_word_wrap = tracebacks_word_wrap - self.tracebacks_show_locals = tracebacks_show_locals - self.tracebacks_suppress = tracebacks_suppress - self.tracebacks_max_frames = tracebacks_max_frames - self.tracebacks_code_width = tracebacks_code_width - self.locals_max_length = locals_max_length - self.locals_max_string = locals_max_string - self.keywords = keywords - - def get_level_text(self, record: LogRecord) -> Text: - """Get the level name from the record. - - Args: - record (LogRecord): LogRecord instance. - - Returns: - Text: A tuple of the style and level name. - """ - level_name = record.levelname - level_text = Text.styled( - level_name.ljust(8), f"logging.level.{level_name.lower()}" - ) - return level_text - - def emit(self, record: LogRecord) -> None: - """Invoked by logging.""" - message = self.format(record) - traceback = None - if ( - self.rich_tracebacks - and record.exc_info - and record.exc_info != (None, None, None) - ): - exc_type, exc_value, exc_traceback = record.exc_info - assert exc_type is not None - assert exc_value is not None - traceback = Traceback.from_exception( - exc_type, - exc_value, - exc_traceback, - width=self.tracebacks_width, - code_width=self.tracebacks_code_width, - extra_lines=self.tracebacks_extra_lines, - theme=self.tracebacks_theme, - word_wrap=self.tracebacks_word_wrap, - show_locals=self.tracebacks_show_locals, - locals_max_length=self.locals_max_length, - locals_max_string=self.locals_max_string, - suppress=self.tracebacks_suppress, - max_frames=self.tracebacks_max_frames, - ) - message = record.getMessage() - if self.formatter: - record.message = record.getMessage() - formatter = self.formatter - if hasattr(formatter, "usesTime") and formatter.usesTime(): - record.asctime = formatter.formatTime(record, formatter.datefmt) - message = formatter.formatMessage(record) - - message_renderable = self.render_message(record, message) - log_renderable = self.render( - record=record, traceback=traceback, message_renderable=message_renderable - ) - if isinstance(self.console.file, NullFile): - # Handles pythonw, where stdout/stderr are null, and we return NullFile - # instance from Console.file. In this case, we still want to make a log record - # even though we won't be writing anything to a file. - self.handleError(record) - else: - try: - self.console.print(log_renderable) - except Exception: - self.handleError(record) - - def render_message(self, record: LogRecord, message: str) -> "ConsoleRenderable": - """Render message text in to Text. - - Args: - record (LogRecord): logging Record. - message (str): String containing log message. - - Returns: - ConsoleRenderable: Renderable to display log message. - """ - use_markup = getattr(record, "markup", self.markup) - message_text = Text.from_markup(message) if use_markup else Text(message) - - highlighter = getattr(record, "highlighter", self.highlighter) - if highlighter: - message_text = highlighter(message_text) - - if self.keywords is None: - self.keywords = self.KEYWORDS - - if self.keywords: - message_text.highlight_words(self.keywords, "logging.keyword") - - return message_text - - def render( - self, - *, - record: LogRecord, - traceback: Optional[Traceback], - message_renderable: "ConsoleRenderable", - ) -> "ConsoleRenderable": - """Render log for display. - - Args: - record (LogRecord): logging Record. - traceback (Optional[Traceback]): Traceback instance or None for no Traceback. - message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents. - - Returns: - ConsoleRenderable: Renderable to display log. - """ - path = Path(record.pathname).name - level = self.get_level_text(record) - time_format = None if self.formatter is None else self.formatter.datefmt - log_time = datetime.fromtimestamp(record.created) - - log_renderable = self._log_render( - self.console, - [message_renderable] if not traceback else [message_renderable, traceback], - log_time=log_time, - time_format=time_format, - level=level, - path=path, - line_no=record.lineno, - link_path=record.pathname if self.enable_link_path else None, - ) - return log_renderable - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - FORMAT = "%(message)s" - # FORMAT = "%(asctime)-15s - %(levelname)s - %(message)s" - logging.basicConfig( - level="NOTSET", - format=FORMAT, - datefmt="[%X]", - handlers=[RichHandler(rich_tracebacks=True, tracebacks_show_locals=True)], - ) - log = logging.getLogger("rich") - - log.info("Server starting...") - log.info("Listening on http://127.0.0.1:8080") - sleep(1) - - log.info("GET /index.html 200 1298") - log.info("GET /imgs/backgrounds/back1.jpg 200 54386") - log.info("GET /css/styles.css 200 54386") - log.warning("GET /favicon.ico 404 242") - sleep(1) - - log.debug( - "JSONRPC request\n--> %r\n<-- %r", - { - "version": "1.1", - "method": "confirmFruitPurchase", - "params": [["apple", "orange", "mangoes", "pomelo"], 1.123], - "id": "194521489", - }, - {"version": "1.1", "result": True, "error": None, "id": "194521489"}, - ) - log.debug( - "Loading configuration file /adasd/asdasd/qeqwe/qwrqwrqwr/sdgsdgsdg/werwerwer/dfgerert/ertertert/ertetert/werwerwer" - ) - log.error("Unable to find 'pomelo' in database!") - log.info("POST /jsonrpc/ 200 65532") - log.info("POST /admin/ 401 42234") - log.warning("password was rejected for admin site.") - - def divide() -> None: - number = 1 - divisor = 0 - foos = ["foo"] * 100 - log.debug("in divide") - try: - number / divisor - except: - log.exception("An error of some kind occurred!") - - divide() - sleep(1) - log.critical("Out of memory!") - log.info("Server exited with code=-1") - log.info("[bold]EXITING...[/bold]", extra=dict(markup=True)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/markup.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/markup.py deleted file mode 100644 index f617187..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/markup.py +++ /dev/null @@ -1,251 +0,0 @@ -import re -from ast import literal_eval -from operator import attrgetter -from typing import Callable, Iterable, List, Match, NamedTuple, Optional, Tuple, Union - -from ._emoji_replace import _emoji_replace -from .emoji import EmojiVariant -from .errors import MarkupError -from .style import Style -from .text import Span, Text - -RE_TAGS = re.compile( - r"""((\\*)\[([a-z#/@][^[]*?)])""", - re.VERBOSE, -) - -RE_HANDLER = re.compile(r"^([\w.]*?)(\(.*?\))?$") - - -class Tag(NamedTuple): - """A tag in console markup.""" - - name: str - """The tag name. e.g. 'bold'.""" - parameters: Optional[str] - """Any additional parameters after the name.""" - - def __str__(self) -> str: - return ( - self.name if self.parameters is None else f"{self.name} {self.parameters}" - ) - - @property - def markup(self) -> str: - """Get the string representation of this tag.""" - return ( - f"[{self.name}]" - if self.parameters is None - else f"[{self.name}={self.parameters}]" - ) - - -_ReStringMatch = Match[str] # regex match object -_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub -_EscapeSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re - - -def escape( - markup: str, - _escape: _EscapeSubMethod = re.compile(r"(\\*)(\[[a-z#/@][^[]*?])").sub, -) -> str: - """Escapes text so that it won't be interpreted as markup. - - Args: - markup (str): Content to be inserted in to markup. - - Returns: - str: Markup with square brackets escaped. - """ - - def escape_backslashes(match: Match[str]) -> str: - """Called by re.sub replace matches.""" - backslashes, text = match.groups() - return f"{backslashes}{backslashes}\\{text}" - - markup = _escape(escape_backslashes, markup) - if markup.endswith("\\") and not markup.endswith("\\\\"): - return markup + "\\" - - return markup - - -def _parse(markup: str) -> Iterable[Tuple[int, Optional[str], Optional[Tag]]]: - """Parse markup in to an iterable of tuples of (position, text, tag). - - Args: - markup (str): A string containing console markup - - """ - position = 0 - _divmod = divmod - _Tag = Tag - for match in RE_TAGS.finditer(markup): - full_text, escapes, tag_text = match.groups() - start, end = match.span() - if start > position: - yield start, markup[position:start], None - if escapes: - backslashes, escaped = _divmod(len(escapes), 2) - if backslashes: - # Literal backslashes - yield start, "\\" * backslashes, None - start += backslashes * 2 - if escaped: - # Escape of tag - yield start, full_text[len(escapes) :], None - position = end - continue - text, equals, parameters = tag_text.partition("=") - yield start, None, _Tag(text, parameters if equals else None) - position = end - if position < len(markup): - yield position, markup[position:], None - - -def render( - markup: str, - style: Union[str, Style] = "", - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, -) -> Text: - """Render console markup in to a Text instance. - - Args: - markup (str): A string containing console markup. - style: (Union[str, Style]): The style to use. - emoji (bool, optional): Also render emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - - - Raises: - MarkupError: If there is a syntax error in the markup. - - Returns: - Text: A test instance. - """ - emoji_replace = _emoji_replace - if "[" not in markup: - return Text( - emoji_replace(markup, default_variant=emoji_variant) if emoji else markup, - style=style, - ) - text = Text(style=style) - append = text.append - normalize = Style.normalize - - style_stack: List[Tuple[int, Tag]] = [] - pop = style_stack.pop - - spans: List[Span] = [] - append_span = spans.append - - _Span = Span - _Tag = Tag - - def pop_style(style_name: str) -> Tuple[int, Tag]: - """Pop tag matching given style name.""" - for index, (_, tag) in enumerate(reversed(style_stack), 1): - if tag.name == style_name: - return pop(-index) - raise KeyError(style_name) - - for position, plain_text, tag in _parse(markup): - if plain_text is not None: - # Handle open brace escapes, where the brace is not part of a tag. - plain_text = plain_text.replace("\\[", "[") - append(emoji_replace(plain_text) if emoji else plain_text) - elif tag is not None: - if tag.name.startswith("/"): # Closing tag - style_name = tag.name[1:].strip() - - if style_name: # explicit close - style_name = normalize(style_name) - try: - start, open_tag = pop_style(style_name) - except KeyError: - raise MarkupError( - f"closing tag '{tag.markup}' at position {position} doesn't match any open tag" - ) from None - else: # implicit close - try: - start, open_tag = pop() - except IndexError: - raise MarkupError( - f"closing tag '[/]' at position {position} has nothing to close" - ) from None - - if open_tag.name.startswith("@"): - if open_tag.parameters: - handler_name = "" - parameters = open_tag.parameters.strip() - handler_match = RE_HANDLER.match(parameters) - if handler_match is not None: - handler_name, match_parameters = handler_match.groups() - parameters = ( - "()" if match_parameters is None else match_parameters - ) - - try: - meta_params = literal_eval(parameters) - except SyntaxError as error: - raise MarkupError( - f"error parsing {parameters!r} in {open_tag.parameters!r}; {error.msg}" - ) - except Exception as error: - raise MarkupError( - f"error parsing {open_tag.parameters!r}; {error}" - ) from None - - if handler_name: - meta_params = ( - handler_name, - meta_params - if isinstance(meta_params, tuple) - else (meta_params,), - ) - - else: - meta_params = () - - append_span( - _Span( - start, len(text), Style(meta={open_tag.name: meta_params}) - ) - ) - else: - append_span(_Span(start, len(text), str(open_tag))) - - else: # Opening tag - normalized_tag = _Tag(normalize(tag.name), tag.parameters) - style_stack.append((len(text), normalized_tag)) - - text_length = len(text) - while style_stack: - start, tag = style_stack.pop() - style = str(tag) - if style: - append_span(_Span(start, text_length, style)) - - text.spans = sorted(spans[::-1], key=attrgetter("start")) - return text - - -if __name__ == "__main__": # pragma: no cover - MARKUP = [ - "[red]Hello World[/red]", - "[magenta]Hello [b]World[/b]", - "[bold]Bold[italic] bold and italic [/bold]italic[/italic]", - "Click [link=https://www.willmcgugan.com]here[/link] to visit my Blog", - ":warning-emoji: [bold red blink] DANGER![/]", - ] - - from pip._vendor.rich import print - from pip._vendor.rich.table import Table - - grid = Table("Markup", "Result", padding=(0, 1)) - - for markup in MARKUP: - grid.add_row(Text(markup), markup) - - print(grid) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/measure.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/measure.py deleted file mode 100644 index a508ffa..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/measure.py +++ /dev/null @@ -1,151 +0,0 @@ -from operator import itemgetter -from typing import TYPE_CHECKING, Callable, NamedTuple, Optional, Sequence - -from . import errors -from .protocol import is_renderable, rich_cast - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType - - -class Measurement(NamedTuple): - """Stores the minimum and maximum widths (in characters) required to render an object.""" - - minimum: int - """Minimum number of cells required to render.""" - maximum: int - """Maximum number of cells required to render.""" - - @property - def span(self) -> int: - """Get difference between maximum and minimum.""" - return self.maximum - self.minimum - - def normalize(self) -> "Measurement": - """Get measurement that ensures that minimum <= maximum and minimum >= 0 - - Returns: - Measurement: A normalized measurement. - """ - minimum, maximum = self - minimum = min(max(0, minimum), maximum) - return Measurement(max(0, minimum), max(0, max(minimum, maximum))) - - def with_maximum(self, width: int) -> "Measurement": - """Get a RenderableWith where the widths are <= width. - - Args: - width (int): Maximum desired width. - - Returns: - Measurement: New Measurement object. - """ - minimum, maximum = self - return Measurement(min(minimum, width), min(maximum, width)) - - def with_minimum(self, width: int) -> "Measurement": - """Get a RenderableWith where the widths are >= width. - - Args: - width (int): Minimum desired width. - - Returns: - Measurement: New Measurement object. - """ - minimum, maximum = self - width = max(0, width) - return Measurement(max(minimum, width), max(maximum, width)) - - def clamp( - self, min_width: Optional[int] = None, max_width: Optional[int] = None - ) -> "Measurement": - """Clamp a measurement within the specified range. - - Args: - min_width (int): Minimum desired width, or ``None`` for no minimum. Defaults to None. - max_width (int): Maximum desired width, or ``None`` for no maximum. Defaults to None. - - Returns: - Measurement: New Measurement object. - """ - measurement = self - if min_width is not None: - measurement = measurement.with_minimum(min_width) - if max_width is not None: - measurement = measurement.with_maximum(max_width) - return measurement - - @classmethod - def get( - cls, console: "Console", options: "ConsoleOptions", renderable: "RenderableType" - ) -> "Measurement": - """Get a measurement for a renderable. - - Args: - console (~rich.console.Console): Console instance. - options (~rich.console.ConsoleOptions): Console options. - renderable (RenderableType): An object that may be rendered with Rich. - - Raises: - errors.NotRenderableError: If the object is not renderable. - - Returns: - Measurement: Measurement object containing range of character widths required to render the object. - """ - _max_width = options.max_width - if _max_width < 1: - return Measurement(0, 0) - if isinstance(renderable, str): - renderable = console.render_str( - renderable, markup=options.markup, highlight=False - ) - renderable = rich_cast(renderable) - if is_renderable(renderable): - get_console_width: Optional[ - Callable[["Console", "ConsoleOptions"], "Measurement"] - ] = getattr(renderable, "__rich_measure__", None) - if get_console_width is not None: - render_width = ( - get_console_width(console, options) - .normalize() - .with_maximum(_max_width) - ) - if render_width.maximum < 1: - return Measurement(0, 0) - return render_width.normalize() - else: - return Measurement(0, _max_width) - else: - raise errors.NotRenderableError( - f"Unable to get render width for {renderable!r}; " - "a str, Segment, or object with __rich_console__ method is required" - ) - - -def measure_renderables( - console: "Console", - options: "ConsoleOptions", - renderables: Sequence["RenderableType"], -) -> "Measurement": - """Get a measurement that would fit a number of renderables. - - Args: - console (~rich.console.Console): Console instance. - options (~rich.console.ConsoleOptions): Console options. - renderables (Iterable[RenderableType]): One or more renderable objects. - - Returns: - Measurement: Measurement object containing range of character widths required to - contain all given renderables. - """ - if not renderables: - return Measurement(0, 0) - get_measurement = Measurement.get - measurements = [ - get_measurement(console, options, renderable) for renderable in renderables - ] - measured_width = Measurement( - max(measurements, key=itemgetter(0)).minimum, - max(measurements, key=itemgetter(1)).maximum, - ) - return measured_width diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py deleted file mode 100644 index 0161cd1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py +++ /dev/null @@ -1,141 +0,0 @@ -from typing import TYPE_CHECKING, List, Optional, Tuple, Union - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - RenderableType, - RenderResult, - ) - -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style - -PaddingDimensions = Union[int, Tuple[int], Tuple[int, int], Tuple[int, int, int, int]] - - -class Padding(JupyterMixin): - """Draw space around content. - - Example: - >>> print(Padding("Hello", (2, 4), style="on blue")) - - Args: - renderable (RenderableType): String or other renderable. - pad (Union[int, Tuple[int]]): Padding for top, right, bottom, and left borders. - May be specified with 1, 2, or 4 integers (CSS style). - style (Union[str, Style], optional): Style for padding characters. Defaults to "none". - expand (bool, optional): Expand padding to fit available width. Defaults to True. - """ - - def __init__( - self, - renderable: "RenderableType", - pad: "PaddingDimensions" = (0, 0, 0, 0), - *, - style: Union[str, Style] = "none", - expand: bool = True, - ): - self.renderable = renderable - self.top, self.right, self.bottom, self.left = self.unpack(pad) - self.style = style - self.expand = expand - - @classmethod - def indent(cls, renderable: "RenderableType", level: int) -> "Padding": - """Make padding instance to render an indent. - - Args: - renderable (RenderableType): String or other renderable. - level (int): Number of characters to indent. - - Returns: - Padding: A Padding instance. - """ - - return Padding(renderable, pad=(0, 0, 0, level), expand=False) - - @staticmethod - def unpack(pad: "PaddingDimensions") -> Tuple[int, int, int, int]: - """Unpack padding specified in CSS style.""" - if isinstance(pad, int): - return (pad, pad, pad, pad) - if len(pad) == 1: - _pad = pad[0] - return (_pad, _pad, _pad, _pad) - if len(pad) == 2: - pad_top, pad_right = pad - return (pad_top, pad_right, pad_top, pad_right) - if len(pad) == 4: - top, right, bottom, left = pad - return (top, right, bottom, left) - raise ValueError(f"1, 2 or 4 integers required for padding; {len(pad)} given") - - def __repr__(self) -> str: - return f"Padding({self.renderable!r}, ({self.top},{self.right},{self.bottom},{self.left}))" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) - if self.expand: - width = options.max_width - else: - width = min( - Measurement.get(console, options, self.renderable).maximum - + self.left - + self.right, - options.max_width, - ) - render_options = options.update_width(width - self.left - self.right) - if render_options.height is not None: - render_options = render_options.update_height( - height=render_options.height - self.top - self.bottom - ) - lines = console.render_lines( - self.renderable, render_options, style=style, pad=True - ) - _Segment = Segment - - left = _Segment(" " * self.left, style) if self.left else None - right = ( - [_Segment(f'{" " * self.right}', style), _Segment.line()] - if self.right - else [_Segment.line()] - ) - blank_line: Optional[List[Segment]] = None - if self.top: - blank_line = [_Segment(f'{" " * width}\n', style)] - yield from blank_line * self.top - if left: - for line in lines: - yield left - yield from line - yield from right - else: - for line in lines: - yield from line - yield from right - if self.bottom: - blank_line = blank_line or [_Segment(f'{" " * width}\n', style)] - yield from blank_line * self.bottom - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - max_width = options.max_width - extra_width = self.left + self.right - if max_width - extra_width < 1: - return Measurement(max_width, max_width) - measure_min, measure_max = Measurement.get(console, options, self.renderable) - measurement = Measurement(measure_min + extra_width, measure_max + extra_width) - measurement = measurement.with_maximum(max_width) - return measurement - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - print(Padding("Hello, World", (2, 4), style="on blue")) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pager.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pager.py deleted file mode 100644 index a3f7aa6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pager.py +++ /dev/null @@ -1,34 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Any - - -class Pager(ABC): - """Base class for a pager.""" - - @abstractmethod - def show(self, content: str) -> None: - """Show content in pager. - - Args: - content (str): Content to be displayed. - """ - - -class SystemPager(Pager): - """Uses the pager installed on the system.""" - - def _pager(self, content: str) -> Any: #  pragma: no cover - return __import__("pydoc").pager(content) - - def show(self, content: str) -> None: - """Use the same pager used by pydoc.""" - self._pager(content) - - -if __name__ == "__main__": # pragma: no cover - from .__main__ import make_test_card - from .console import Console - - console = Console() - with console.pager(styles=True): - console.print(make_test_card()) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py deleted file mode 100644 index fa0c4dd..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py +++ /dev/null @@ -1,100 +0,0 @@ -from math import sqrt -from functools import lru_cache -from typing import Sequence, Tuple, TYPE_CHECKING - -from .color_triplet import ColorTriplet - -if TYPE_CHECKING: - from pip._vendor.rich.table import Table - - -class Palette: - """A palette of available colors.""" - - def __init__(self, colors: Sequence[Tuple[int, int, int]]): - self._colors = colors - - def __getitem__(self, number: int) -> ColorTriplet: - return ColorTriplet(*self._colors[number]) - - def __rich__(self) -> "Table": - from pip._vendor.rich.color import Color - from pip._vendor.rich.style import Style - from pip._vendor.rich.text import Text - from pip._vendor.rich.table import Table - - table = Table( - "index", - "RGB", - "Color", - title="Palette", - caption=f"{len(self._colors)} colors", - highlight=True, - caption_justify="right", - ) - for index, color in enumerate(self._colors): - table.add_row( - str(index), - repr(color), - Text(" " * 16, style=Style(bgcolor=Color.from_rgb(*color))), - ) - return table - - # This is somewhat inefficient and needs caching - @lru_cache(maxsize=1024) - def match(self, color: Tuple[int, int, int]) -> int: - """Find a color from a palette that most closely matches a given color. - - Args: - color (Tuple[int, int, int]): RGB components in range 0 > 255. - - Returns: - int: Index of closes matching color. - """ - red1, green1, blue1 = color - _sqrt = sqrt - get_color = self._colors.__getitem__ - - def get_color_distance(index: int) -> float: - """Get the distance to a color.""" - red2, green2, blue2 = get_color(index) - red_mean = (red1 + red2) // 2 - red = red1 - red2 - green = green1 - green2 - blue = blue1 - blue2 - return _sqrt( - (((512 + red_mean) * red * red) >> 8) - + 4 * green * green - + (((767 - red_mean) * blue * blue) >> 8) - ) - - min_index = min(range(len(self._colors)), key=get_color_distance) - return min_index - - -if __name__ == "__main__": # pragma: no cover - import colorsys - from typing import Iterable - from pip._vendor.rich.color import Color - from pip._vendor.rich.console import Console, ConsoleOptions - from pip._vendor.rich.segment import Segment - from pip._vendor.rich.style import Style - - class ColorBox: - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> Iterable[Segment]: - height = console.size.height - 3 - for y in range(0, height): - for x in range(options.max_width): - h = x / options.max_width - l = y / (height + 1) - r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0) - r2, g2, b2 = colorsys.hls_to_rgb(h, l + (1 / height / 2), 1.0) - bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255) - color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255) - yield Segment("▄", Style(color=color, bgcolor=bgcolor)) - yield Segment.line() - - console = Console() - console.print(ColorBox()) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/panel.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/panel.py deleted file mode 100644 index 8cfa6f4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/panel.py +++ /dev/null @@ -1,318 +0,0 @@ -from typing import TYPE_CHECKING, Optional - -from .align import AlignMethod -from .box import ROUNDED, Box -from .cells import cell_len -from .jupyter import JupyterMixin -from .measure import Measurement, measure_renderables -from .padding import Padding, PaddingDimensions -from .segment import Segment -from .style import Style, StyleType -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - - -class Panel(JupyterMixin): - """A console renderable that draws a border around its contents. - - Example: - >>> console.print(Panel("Hello, World!")) - - Args: - renderable (RenderableType): A console renderable object. - box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`. Defaults to box.ROUNDED. - title (Optional[TextType], optional): Optional title displayed in panel header. Defaults to None. - title_align (AlignMethod, optional): Alignment of title. Defaults to "center". - subtitle (Optional[TextType], optional): Optional subtitle displayed in panel footer. Defaults to None. - subtitle_align (AlignMethod, optional): Alignment of subtitle. Defaults to "center". - safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - expand (bool, optional): If True the panel will stretch to fill the console width, otherwise it will be sized to fit the contents. Defaults to True. - style (str, optional): The style of the panel (border and contents). Defaults to "none". - border_style (str, optional): The style of the border. Defaults to "none". - width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect. - height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect. - padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0. - highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False. - """ - - def __init__( - self, - renderable: "RenderableType", - box: Box = ROUNDED, - *, - title: Optional[TextType] = None, - title_align: AlignMethod = "center", - subtitle: Optional[TextType] = None, - subtitle_align: AlignMethod = "center", - safe_box: Optional[bool] = None, - expand: bool = True, - style: StyleType = "none", - border_style: StyleType = "none", - width: Optional[int] = None, - height: Optional[int] = None, - padding: PaddingDimensions = (0, 1), - highlight: bool = False, - ) -> None: - self.renderable = renderable - self.box = box - self.title = title - self.title_align: AlignMethod = title_align - self.subtitle = subtitle - self.subtitle_align = subtitle_align - self.safe_box = safe_box - self.expand = expand - self.style = style - self.border_style = border_style - self.width = width - self.height = height - self.padding = padding - self.highlight = highlight - - @classmethod - def fit( - cls, - renderable: "RenderableType", - box: Box = ROUNDED, - *, - title: Optional[TextType] = None, - title_align: AlignMethod = "center", - subtitle: Optional[TextType] = None, - subtitle_align: AlignMethod = "center", - safe_box: Optional[bool] = None, - style: StyleType = "none", - border_style: StyleType = "none", - width: Optional[int] = None, - height: Optional[int] = None, - padding: PaddingDimensions = (0, 1), - highlight: bool = False, - ) -> "Panel": - """An alternative constructor that sets expand=False.""" - return cls( - renderable, - box, - title=title, - title_align=title_align, - subtitle=subtitle, - subtitle_align=subtitle_align, - safe_box=safe_box, - style=style, - border_style=border_style, - width=width, - height=height, - padding=padding, - highlight=highlight, - expand=False, - ) - - @property - def _title(self) -> Optional[Text]: - if self.title: - title_text = ( - Text.from_markup(self.title) - if isinstance(self.title, str) - else self.title.copy() - ) - title_text.end = "" - title_text.plain = title_text.plain.replace("\n", " ") - title_text.no_wrap = True - title_text.expand_tabs() - title_text.pad(1) - return title_text - return None - - @property - def _subtitle(self) -> Optional[Text]: - if self.subtitle: - subtitle_text = ( - Text.from_markup(self.subtitle) - if isinstance(self.subtitle, str) - else self.subtitle.copy() - ) - subtitle_text.end = "" - subtitle_text.plain = subtitle_text.plain.replace("\n", " ") - subtitle_text.no_wrap = True - subtitle_text.expand_tabs() - subtitle_text.pad(1) - return subtitle_text - return None - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - _padding = Padding.unpack(self.padding) - renderable = ( - Padding(self.renderable, _padding) if any(_padding) else self.renderable - ) - style = console.get_style(self.style) - partial_border_style = console.get_style(self.border_style) - border_style = style + partial_border_style - width = ( - options.max_width - if self.width is None - else min(options.max_width, self.width) - ) - - safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box - box = self.box.substitute(options, safe=safe_box) - - def align_text( - text: Text, width: int, align: str, character: str, style: Style - ) -> Text: - """Gets new aligned text. - - Args: - text (Text): Title or subtitle text. - width (int): Desired width. - align (str): Alignment. - character (str): Character for alignment. - style (Style): Border style - - Returns: - Text: New text instance - """ - text = text.copy() - text.truncate(width) - excess_space = width - cell_len(text.plain) - if text.style: - text.stylize(console.get_style(text.style)) - - if excess_space: - if align == "left": - return Text.assemble( - text, - (character * excess_space, style), - no_wrap=True, - end="", - ) - elif align == "center": - left = excess_space // 2 - return Text.assemble( - (character * left, style), - text, - (character * (excess_space - left), style), - no_wrap=True, - end="", - ) - else: - return Text.assemble( - (character * excess_space, style), - text, - no_wrap=True, - end="", - ) - return text - - title_text = self._title - if title_text is not None: - title_text.stylize_before(partial_border_style) - - child_width = ( - width - 2 - if self.expand - else console.measure( - renderable, options=options.update_width(width - 2) - ).maximum - ) - child_height = self.height or options.height or None - if child_height: - child_height -= 2 - if title_text is not None: - child_width = min( - options.max_width - 2, max(child_width, title_text.cell_len + 2) - ) - - width = child_width + 2 - child_options = options.update( - width=child_width, height=child_height, highlight=self.highlight - ) - lines = console.render_lines(renderable, child_options, style=style) - - line_start = Segment(box.mid_left, border_style) - line_end = Segment(f"{box.mid_right}", border_style) - new_line = Segment.line() - if title_text is None or width <= 4: - yield Segment(box.get_top([width - 2]), border_style) - else: - title_text = align_text( - title_text, - width - 4, - self.title_align, - box.top, - border_style, - ) - yield Segment(box.top_left + box.top, border_style) - yield from console.render(title_text, child_options.update_width(width - 4)) - yield Segment(box.top + box.top_right, border_style) - - yield new_line - for line in lines: - yield line_start - yield from line - yield line_end - yield new_line - - subtitle_text = self._subtitle - if subtitle_text is not None: - subtitle_text.stylize_before(partial_border_style) - - if subtitle_text is None or width <= 4: - yield Segment(box.get_bottom([width - 2]), border_style) - else: - subtitle_text = align_text( - subtitle_text, - width - 4, - self.subtitle_align, - box.bottom, - border_style, - ) - yield Segment(box.bottom_left + box.bottom, border_style) - yield from console.render( - subtitle_text, child_options.update_width(width - 4) - ) - yield Segment(box.bottom + box.bottom_right, border_style) - - yield new_line - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - _title = self._title - _, right, _, left = Padding.unpack(self.padding) - padding = left + right - renderables = [self.renderable, _title] if _title else [self.renderable] - - if self.width is None: - width = ( - measure_renderables( - console, - options.update_width(options.max_width - padding - 2), - renderables, - ).maximum - + padding - + 2 - ) - else: - width = self.width - return Measurement(width, width) - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - - c = Console() - - from .box import DOUBLE, ROUNDED - from .padding import Padding - - p = Panel( - "Hello, World!", - title="rich.Panel", - style="white on blue", - box=DOUBLE, - padding=1, - ) - - c.print() - c.print(p) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py deleted file mode 100644 index c4a274f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py +++ /dev/null @@ -1,1016 +0,0 @@ -import builtins -import collections -import dataclasses -import inspect -import os -import reprlib -import sys -from array import array -from collections import Counter, UserDict, UserList, defaultdict, deque -from dataclasses import dataclass, fields, is_dataclass -from inspect import isclass -from itertools import islice -from types import MappingProxyType -from typing import ( - TYPE_CHECKING, - Any, - Callable, - DefaultDict, - Deque, - Dict, - Iterable, - List, - Optional, - Sequence, - Set, - Tuple, - Union, -) - -from pip._vendor.rich.repr import RichReprResult - -try: - import attr as _attr_module - - _has_attrs = hasattr(_attr_module, "ib") -except ImportError: # pragma: no cover - _has_attrs = False - -from . import get_console -from ._loop import loop_last -from ._pick import pick_bool -from .abc import RichRenderable -from .cells import cell_len -from .highlighter import ReprHighlighter -from .jupyter import JupyterMixin, JupyterRenderable -from .measure import Measurement -from .text import Text - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - HighlighterType, - JustifyMethod, - OverflowMethod, - RenderResult, - ) - - -def _is_attr_object(obj: Any) -> bool: - """Check if an object was created with attrs module.""" - return _has_attrs and _attr_module.has(type(obj)) - - -def _get_attr_fields(obj: Any) -> Sequence["_attr_module.Attribute[Any]"]: - """Get fields for an attrs object.""" - return _attr_module.fields(type(obj)) if _has_attrs else [] - - -def _is_dataclass_repr(obj: object) -> bool: - """Check if an instance of a dataclass contains the default repr. - - Args: - obj (object): A dataclass instance. - - Returns: - bool: True if the default repr is used, False if there is a custom repr. - """ - # Digging in to a lot of internals here - # Catching all exceptions in case something is missing on a non CPython implementation - try: - return obj.__repr__.__code__.co_filename in ( - dataclasses.__file__, - reprlib.__file__, - ) - except Exception: # pragma: no coverage - return False - - -_dummy_namedtuple = collections.namedtuple("_dummy_namedtuple", []) - - -def _has_default_namedtuple_repr(obj: object) -> bool: - """Check if an instance of namedtuple contains the default repr - - Args: - obj (object): A namedtuple - - Returns: - bool: True if the default repr is used, False if there's a custom repr. - """ - obj_file = None - try: - obj_file = inspect.getfile(obj.__repr__) - except (OSError, TypeError): - # OSError handles case where object is defined in __main__ scope, e.g. REPL - no filename available. - # TypeError trapped defensively, in case of object without filename slips through. - pass - default_repr_file = inspect.getfile(_dummy_namedtuple.__repr__) - return obj_file == default_repr_file - - -def _ipy_display_hook( - value: Any, - console: Optional["Console"] = None, - overflow: "OverflowMethod" = "ignore", - crop: bool = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> Union[str, None]: - # needed here to prevent circular import: - from .console import ConsoleRenderable - - # always skip rich generated jupyter renderables or None values - if _safe_isinstance(value, JupyterRenderable) or value is None: - return None - - console = console or get_console() - - with console.capture() as capture: - # certain renderables should start on a new line - if _safe_isinstance(value, ConsoleRenderable): - console.line() - console.print( - ( - value - if _safe_isinstance(value, RichRenderable) - else Pretty( - value, - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - margin=12, - ) - ), - crop=crop, - new_line_start=True, - end="", - ) - # strip trailing newline, not usually part of a text repr - # I'm not sure if this should be prevented at a lower level - return capture.get().rstrip("\n") - - -def _safe_isinstance( - obj: object, class_or_tuple: Union[type, Tuple[type, ...]] -) -> bool: - """isinstance can fail in rare cases, for example types with no __class__""" - try: - return isinstance(obj, class_or_tuple) - except Exception: - return False - - -def install( - console: Optional["Console"] = None, - overflow: "OverflowMethod" = "ignore", - crop: bool = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> None: - """Install automatic pretty printing in the Python REPL. - - Args: - console (Console, optional): Console instance or ``None`` to use global console. Defaults to None. - overflow (Optional[OverflowMethod], optional): Overflow method. Defaults to "ignore". - crop (Optional[bool], optional): Enable cropping of long lines. Defaults to False. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None. - expand_all (bool, optional): Expand all containers. Defaults to False. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - """ - from pip._vendor.rich import get_console - - console = console or get_console() - assert console is not None - - def display_hook(value: Any) -> None: - """Replacement sys.displayhook which prettifies objects with Rich.""" - if value is not None: - assert console is not None - builtins._ = None # type: ignore[attr-defined] - console.print( - ( - value - if _safe_isinstance(value, RichRenderable) - else Pretty( - value, - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - ) - ), - crop=crop, - ) - builtins._ = value # type: ignore[attr-defined] - - try: - ip = get_ipython() # type: ignore[name-defined] - except NameError: - sys.displayhook = display_hook - else: - from IPython.core.formatters import BaseFormatter - - class RichFormatter(BaseFormatter): # type: ignore[misc] - pprint: bool = True - - def __call__(self, value: Any) -> Any: - if self.pprint: - return _ipy_display_hook( - value, - console=get_console(), - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - ) - else: - return repr(value) - - # replace plain text formatter with rich formatter - rich_formatter = RichFormatter() - ip.display_formatter.formatters["text/plain"] = rich_formatter - - -class Pretty(JupyterMixin): - """A rich renderable that pretty prints an object. - - Args: - _object (Any): An object to pretty print. - highlighter (HighlighterType, optional): Highlighter object to apply to result, or None for ReprHighlighter. Defaults to None. - indent_size (int, optional): Number of spaces in indent. Defaults to 4. - justify (JustifyMethod, optional): Justify method, or None for default. Defaults to None. - overflow (OverflowMethod, optional): Overflow method, or None for default. Defaults to None. - no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to False. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None. - expand_all (bool, optional): Expand all containers. Defaults to False. - margin (int, optional): Subtrace a margin from width to force containers to expand earlier. Defaults to 0. - insert_line (bool, optional): Insert a new line if the output has multiple new lines. Defaults to False. - """ - - def __init__( - self, - _object: Any, - highlighter: Optional["HighlighterType"] = None, - *, - indent_size: int = 4, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, - margin: int = 0, - insert_line: bool = False, - ) -> None: - self._object = _object - self.highlighter = highlighter or ReprHighlighter() - self.indent_size = indent_size - self.justify: Optional["JustifyMethod"] = justify - self.overflow: Optional["OverflowMethod"] = overflow - self.no_wrap = no_wrap - self.indent_guides = indent_guides - self.max_length = max_length - self.max_string = max_string - self.max_depth = max_depth - self.expand_all = expand_all - self.margin = margin - self.insert_line = insert_line - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - pretty_str = pretty_repr( - self._object, - max_width=options.max_width - self.margin, - indent_size=self.indent_size, - max_length=self.max_length, - max_string=self.max_string, - max_depth=self.max_depth, - expand_all=self.expand_all, - ) - pretty_text = Text.from_ansi( - pretty_str, - justify=self.justify or options.justify, - overflow=self.overflow or options.overflow, - no_wrap=pick_bool(self.no_wrap, options.no_wrap), - style="pretty", - ) - pretty_text = ( - self.highlighter(pretty_text) - if pretty_text - else Text( - f"{type(self._object)}.__repr__ returned empty string", - style="dim italic", - ) - ) - if self.indent_guides and not options.ascii_only: - pretty_text = pretty_text.with_indent_guides( - self.indent_size, style="repr.indent" - ) - if self.insert_line and "\n" in pretty_text: - yield "" - yield pretty_text - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - pretty_str = pretty_repr( - self._object, - max_width=options.max_width, - indent_size=self.indent_size, - max_length=self.max_length, - max_string=self.max_string, - max_depth=self.max_depth, - expand_all=self.expand_all, - ) - text_width = ( - max(cell_len(line) for line in pretty_str.splitlines()) if pretty_str else 0 - ) - return Measurement(text_width, text_width) - - -def _get_braces_for_defaultdict(_object: DefaultDict[Any, Any]) -> Tuple[str, str, str]: - return ( - f"defaultdict({_object.default_factory!r}, {{", - "})", - f"defaultdict({_object.default_factory!r}, {{}})", - ) - - -def _get_braces_for_deque(_object: Deque[Any]) -> Tuple[str, str, str]: - if _object.maxlen is None: - return ("deque([", "])", "deque()") - return ( - "deque([", - f"], maxlen={_object.maxlen})", - f"deque(maxlen={_object.maxlen})", - ) - - -def _get_braces_for_array(_object: "array[Any]") -> Tuple[str, str, str]: - return (f"array({_object.typecode!r}, [", "])", f"array({_object.typecode!r})") - - -_BRACES: Dict[type, Callable[[Any], Tuple[str, str, str]]] = { - os._Environ: lambda _object: ("environ({", "})", "environ({})"), - array: _get_braces_for_array, - defaultdict: _get_braces_for_defaultdict, - Counter: lambda _object: ("Counter({", "})", "Counter()"), - deque: _get_braces_for_deque, - dict: lambda _object: ("{", "}", "{}"), - UserDict: lambda _object: ("{", "}", "{}"), - frozenset: lambda _object: ("frozenset({", "})", "frozenset()"), - list: lambda _object: ("[", "]", "[]"), - UserList: lambda _object: ("[", "]", "[]"), - set: lambda _object: ("{", "}", "set()"), - tuple: lambda _object: ("(", ")", "()"), - MappingProxyType: lambda _object: ("mappingproxy({", "})", "mappingproxy({})"), -} -_CONTAINERS = tuple(_BRACES.keys()) -_MAPPING_CONTAINERS = (dict, os._Environ, MappingProxyType, UserDict) - - -def is_expandable(obj: Any) -> bool: - """Check if an object may be expanded by pretty print.""" - return ( - _safe_isinstance(obj, _CONTAINERS) - or (is_dataclass(obj)) - or (hasattr(obj, "__rich_repr__")) - or _is_attr_object(obj) - ) and not isclass(obj) - - -@dataclass -class Node: - """A node in a repr tree. May be atomic or a container.""" - - key_repr: str = "" - value_repr: str = "" - open_brace: str = "" - close_brace: str = "" - empty: str = "" - last: bool = False - is_tuple: bool = False - is_namedtuple: bool = False - children: Optional[List["Node"]] = None - key_separator: str = ": " - separator: str = ", " - - def iter_tokens(self) -> Iterable[str]: - """Generate tokens for this node.""" - if self.key_repr: - yield self.key_repr - yield self.key_separator - if self.value_repr: - yield self.value_repr - elif self.children is not None: - if self.children: - yield self.open_brace - if self.is_tuple and not self.is_namedtuple and len(self.children) == 1: - yield from self.children[0].iter_tokens() - yield "," - else: - for child in self.children: - yield from child.iter_tokens() - if not child.last: - yield self.separator - yield self.close_brace - else: - yield self.empty - - def check_length(self, start_length: int, max_length: int) -> bool: - """Check the length fits within a limit. - - Args: - start_length (int): Starting length of the line (indent, prefix, suffix). - max_length (int): Maximum length. - - Returns: - bool: True if the node can be rendered within max length, otherwise False. - """ - total_length = start_length - for token in self.iter_tokens(): - total_length += cell_len(token) - if total_length > max_length: - return False - return True - - def __str__(self) -> str: - repr_text = "".join(self.iter_tokens()) - return repr_text - - def render( - self, max_width: int = 80, indent_size: int = 4, expand_all: bool = False - ) -> str: - """Render the node to a pretty repr. - - Args: - max_width (int, optional): Maximum width of the repr. Defaults to 80. - indent_size (int, optional): Size of indents. Defaults to 4. - expand_all (bool, optional): Expand all levels. Defaults to False. - - Returns: - str: A repr string of the original object. - """ - lines = [_Line(node=self, is_root=True)] - line_no = 0 - while line_no < len(lines): - line = lines[line_no] - if line.expandable and not line.expanded: - if expand_all or not line.check_length(max_width): - lines[line_no : line_no + 1] = line.expand(indent_size) - line_no += 1 - - repr_str = "\n".join(str(line) for line in lines) - return repr_str - - -@dataclass -class _Line: - """A line in repr output.""" - - parent: Optional["_Line"] = None - is_root: bool = False - node: Optional[Node] = None - text: str = "" - suffix: str = "" - whitespace: str = "" - expanded: bool = False - last: bool = False - - @property - def expandable(self) -> bool: - """Check if the line may be expanded.""" - return bool(self.node is not None and self.node.children) - - def check_length(self, max_length: int) -> bool: - """Check this line fits within a given number of cells.""" - start_length = ( - len(self.whitespace) + cell_len(self.text) + cell_len(self.suffix) - ) - assert self.node is not None - return self.node.check_length(start_length, max_length) - - def expand(self, indent_size: int) -> Iterable["_Line"]: - """Expand this line by adding children on their own line.""" - node = self.node - assert node is not None - whitespace = self.whitespace - assert node.children - if node.key_repr: - new_line = yield _Line( - text=f"{node.key_repr}{node.key_separator}{node.open_brace}", - whitespace=whitespace, - ) - else: - new_line = yield _Line(text=node.open_brace, whitespace=whitespace) - child_whitespace = self.whitespace + " " * indent_size - tuple_of_one = node.is_tuple and len(node.children) == 1 - for last, child in loop_last(node.children): - separator = "," if tuple_of_one else node.separator - line = _Line( - parent=new_line, - node=child, - whitespace=child_whitespace, - suffix=separator, - last=last and not tuple_of_one, - ) - yield line - - yield _Line( - text=node.close_brace, - whitespace=whitespace, - suffix=self.suffix, - last=self.last, - ) - - def __str__(self) -> str: - if self.last: - return f"{self.whitespace}{self.text}{self.node or ''}" - else: - return ( - f"{self.whitespace}{self.text}{self.node or ''}{self.suffix.rstrip()}" - ) - - -def _is_namedtuple(obj: Any) -> bool: - """Checks if an object is most likely a namedtuple. It is possible - to craft an object that passes this check and isn't a namedtuple, but - there is only a minuscule chance of this happening unintentionally. - - Args: - obj (Any): The object to test - - Returns: - bool: True if the object is a namedtuple. False otherwise. - """ - try: - fields = getattr(obj, "_fields", None) - except Exception: - # Being very defensive - if we cannot get the attr then its not a namedtuple - return False - return isinstance(obj, tuple) and isinstance(fields, tuple) - - -def traverse( - _object: Any, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, -) -> Node: - """Traverse object and generate a tree. - - Args: - _object (Any): Object to be traversed. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable truncating. - Defaults to None. - max_depth (int, optional): Maximum depth of data structures, or None for no maximum. - Defaults to None. - - Returns: - Node: The root of a tree structure which can be used to render a pretty repr. - """ - - def to_repr(obj: Any) -> str: - """Get repr string for an object, but catch errors.""" - if ( - max_string is not None - and _safe_isinstance(obj, (bytes, str)) - and len(obj) > max_string - ): - truncated = len(obj) - max_string - obj_repr = f"{obj[:max_string]!r}+{truncated}" - else: - try: - obj_repr = repr(obj) - except Exception as error: - obj_repr = f"" - return obj_repr - - visited_ids: Set[int] = set() - push_visited = visited_ids.add - pop_visited = visited_ids.remove - - def _traverse(obj: Any, root: bool = False, depth: int = 0) -> Node: - """Walk the object depth first.""" - - obj_id = id(obj) - if obj_id in visited_ids: - # Recursion detected - return Node(value_repr="...") - - obj_type = type(obj) - children: List[Node] - reached_max_depth = max_depth is not None and depth >= max_depth - - def iter_rich_args(rich_args: Any) -> Iterable[Union[Any, Tuple[str, Any]]]: - for arg in rich_args: - if _safe_isinstance(arg, tuple): - if len(arg) == 3: - key, child, default = arg - if default == child: - continue - yield key, child - elif len(arg) == 2: - key, child = arg - yield key, child - elif len(arg) == 1: - yield arg[0] - else: - yield arg - - try: - fake_attributes = hasattr( - obj, "awehoi234_wdfjwljet234_234wdfoijsdfmmnxpi492" - ) - except Exception: - fake_attributes = False - - rich_repr_result: Optional[RichReprResult] = None - if not fake_attributes: - try: - if hasattr(obj, "__rich_repr__") and not isclass(obj): - rich_repr_result = obj.__rich_repr__() - except Exception: - pass - - if rich_repr_result is not None: - push_visited(obj_id) - angular = getattr(obj.__rich_repr__, "angular", False) - args = list(iter_rich_args(rich_repr_result)) - class_name = obj.__class__.__name__ - - if args: - children = [] - append = children.append - - if reached_max_depth: - if angular: - node = Node(value_repr=f"<{class_name}...>") - else: - node = Node(value_repr=f"{class_name}(...)") - else: - if angular: - node = Node( - open_brace=f"<{class_name} ", - close_brace=">", - children=children, - last=root, - separator=" ", - ) - else: - node = Node( - open_brace=f"{class_name}(", - close_brace=")", - children=children, - last=root, - ) - for last, arg in loop_last(args): - if _safe_isinstance(arg, tuple): - key, child = arg - child_node = _traverse(child, depth=depth + 1) - child_node.last = last - child_node.key_repr = key - child_node.key_separator = "=" - append(child_node) - else: - child_node = _traverse(arg, depth=depth + 1) - child_node.last = last - append(child_node) - else: - node = Node( - value_repr=f"<{class_name}>" if angular else f"{class_name}()", - children=[], - last=root, - ) - pop_visited(obj_id) - elif _is_attr_object(obj) and not fake_attributes: - push_visited(obj_id) - children = [] - append = children.append - - attr_fields = _get_attr_fields(obj) - if attr_fields: - if reached_max_depth: - node = Node(value_repr=f"{obj.__class__.__name__}(...)") - else: - node = Node( - open_brace=f"{obj.__class__.__name__}(", - close_brace=")", - children=children, - last=root, - ) - - def iter_attrs() -> ( - Iterable[Tuple[str, Any, Optional[Callable[[Any], str]]]] - ): - """Iterate over attr fields and values.""" - for attr in attr_fields: - if attr.repr: - try: - value = getattr(obj, attr.name) - except Exception as error: - # Can happen, albeit rarely - yield (attr.name, error, None) - else: - yield ( - attr.name, - value, - attr.repr if callable(attr.repr) else None, - ) - - for last, (name, value, repr_callable) in loop_last(iter_attrs()): - if repr_callable: - child_node = Node(value_repr=str(repr_callable(value))) - else: - child_node = _traverse(value, depth=depth + 1) - child_node.last = last - child_node.key_repr = name - child_node.key_separator = "=" - append(child_node) - else: - node = Node( - value_repr=f"{obj.__class__.__name__}()", children=[], last=root - ) - pop_visited(obj_id) - elif ( - is_dataclass(obj) - and not _safe_isinstance(obj, type) - and not fake_attributes - and _is_dataclass_repr(obj) - ): - push_visited(obj_id) - children = [] - append = children.append - if reached_max_depth: - node = Node(value_repr=f"{obj.__class__.__name__}(...)") - else: - node = Node( - open_brace=f"{obj.__class__.__name__}(", - close_brace=")", - children=children, - last=root, - empty=f"{obj.__class__.__name__}()", - ) - - for last, field in loop_last( - field - for field in fields(obj) - if field.repr and hasattr(obj, field.name) - ): - child_node = _traverse(getattr(obj, field.name), depth=depth + 1) - child_node.key_repr = field.name - child_node.last = last - child_node.key_separator = "=" - append(child_node) - - pop_visited(obj_id) - elif _is_namedtuple(obj) and _has_default_namedtuple_repr(obj): - push_visited(obj_id) - class_name = obj.__class__.__name__ - if reached_max_depth: - # If we've reached the max depth, we still show the class name, but not its contents - node = Node( - value_repr=f"{class_name}(...)", - ) - else: - children = [] - append = children.append - node = Node( - open_brace=f"{class_name}(", - close_brace=")", - children=children, - empty=f"{class_name}()", - ) - for last, (key, value) in loop_last(obj._asdict().items()): - child_node = _traverse(value, depth=depth + 1) - child_node.key_repr = key - child_node.last = last - child_node.key_separator = "=" - append(child_node) - pop_visited(obj_id) - elif _safe_isinstance(obj, _CONTAINERS): - for container_type in _CONTAINERS: - if _safe_isinstance(obj, container_type): - obj_type = container_type - break - - push_visited(obj_id) - - open_brace, close_brace, empty = _BRACES[obj_type](obj) - - if reached_max_depth: - node = Node(value_repr=f"{open_brace}...{close_brace}") - elif obj_type.__repr__ != type(obj).__repr__: - node = Node(value_repr=to_repr(obj), last=root) - elif obj: - children = [] - node = Node( - open_brace=open_brace, - close_brace=close_brace, - children=children, - last=root, - ) - append = children.append - num_items = len(obj) - last_item_index = num_items - 1 - - if _safe_isinstance(obj, _MAPPING_CONTAINERS): - iter_items = iter(obj.items()) - if max_length is not None: - iter_items = islice(iter_items, max_length) - for index, (key, child) in enumerate(iter_items): - child_node = _traverse(child, depth=depth + 1) - child_node.key_repr = to_repr(key) - child_node.last = index == last_item_index - append(child_node) - else: - iter_values = iter(obj) - if max_length is not None: - iter_values = islice(iter_values, max_length) - for index, child in enumerate(iter_values): - child_node = _traverse(child, depth=depth + 1) - child_node.last = index == last_item_index - append(child_node) - if max_length is not None and num_items > max_length: - append(Node(value_repr=f"... +{num_items - max_length}", last=True)) - else: - node = Node(empty=empty, children=[], last=root) - - pop_visited(obj_id) - else: - node = Node(value_repr=to_repr(obj), last=root) - node.is_tuple = type(obj) == tuple - node.is_namedtuple = _is_namedtuple(obj) - return node - - node = _traverse(_object, root=True) - return node - - -def pretty_repr( - _object: Any, - *, - max_width: int = 80, - indent_size: int = 4, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> str: - """Prettify repr string by expanding on to new lines to fit within a given width. - - Args: - _object (Any): Object to repr. - max_width (int, optional): Desired maximum width of repr string. Defaults to 80. - indent_size (int, optional): Number of spaces to indent. Defaults to 4. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable truncating. - Defaults to None. - max_depth (int, optional): Maximum depth of nested data structure, or None for no depth. - Defaults to None. - expand_all (bool, optional): Expand all containers regardless of available width. Defaults to False. - - Returns: - str: A possibly multi-line representation of the object. - """ - - if _safe_isinstance(_object, Node): - node = _object - else: - node = traverse( - _object, max_length=max_length, max_string=max_string, max_depth=max_depth - ) - repr_str: str = node.render( - max_width=max_width, indent_size=indent_size, expand_all=expand_all - ) - return repr_str - - -def pprint( - _object: Any, - *, - console: Optional["Console"] = None, - indent_guides: bool = True, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> None: - """A convenience function for pretty printing. - - Args: - _object (Any): Object to pretty print. - console (Console, optional): Console instance, or None to use default. Defaults to None. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of strings before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth for nested data structures, or None for unlimited depth. Defaults to None. - indent_guides (bool, optional): Enable indentation guides. Defaults to True. - expand_all (bool, optional): Expand all containers. Defaults to False. - """ - _console = get_console() if console is None else console - _console.print( - Pretty( - _object, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - indent_guides=indent_guides, - expand_all=expand_all, - overflow="ignore", - ), - soft_wrap=True, - ) - - -if __name__ == "__main__": # pragma: no cover - - class BrokenRepr: - def __repr__(self) -> str: - 1 / 0 - return "this will fail" - - from typing import NamedTuple - - class StockKeepingUnit(NamedTuple): - name: str - description: str - price: float - category: str - reviews: List[str] - - d = defaultdict(int) - d["foo"] = 5 - data = { - "foo": [ - 1, - "Hello World!", - 100.123, - 323.232, - 432324.0, - {5, 6, 7, (1, 2, 3, 4), 8}, - ], - "bar": frozenset({1, 2, 3}), - "defaultdict": defaultdict( - list, {"crumble": ["apple", "rhubarb", "butter", "sugar", "flour"]} - ), - "counter": Counter( - [ - "apple", - "orange", - "pear", - "kumquat", - "kumquat", - "durian" * 100, - ] - ), - "atomic": (False, True, None), - "namedtuple": StockKeepingUnit( - "Sparkling British Spring Water", - "Carbonated spring water", - 0.9, - "water", - ["its amazing!", "its terrible!"], - ), - "Broken": BrokenRepr(), - } - data["foo"].append(data) # type: ignore[attr-defined] - - from pip._vendor.rich import print - - print(Pretty(data, indent_guides=True, max_string=20)) - - class Thing: - def __repr__(self) -> str: - return "Hello\x1b[38;5;239m World!" - - print(Pretty(Thing())) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress.py deleted file mode 100644 index ec086d9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress.py +++ /dev/null @@ -1,1715 +0,0 @@ -import io -import sys -import typing -import warnings -from abc import ABC, abstractmethod -from collections import deque -from dataclasses import dataclass, field -from datetime import timedelta -from io import RawIOBase, UnsupportedOperation -from math import ceil -from mmap import mmap -from operator import length_hint -from os import PathLike, stat -from threading import Event, RLock, Thread -from types import TracebackType -from typing import ( - Any, - BinaryIO, - Callable, - ContextManager, - Deque, - Dict, - Generic, - Iterable, - List, - NamedTuple, - NewType, - Optional, - Sequence, - TextIO, - Tuple, - Type, - TypeVar, - Union, -) - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from pip._vendor.typing_extensions import Literal # pragma: no cover - -if sys.version_info >= (3, 11): - from typing import Self -else: - from pip._vendor.typing_extensions import Self # pragma: no cover - -from . import filesize, get_console -from .console import Console, Group, JustifyMethod, RenderableType -from .highlighter import Highlighter -from .jupyter import JupyterMixin -from .live import Live -from .progress_bar import ProgressBar -from .spinner import Spinner -from .style import StyleType -from .table import Column, Table -from .text import Text, TextType - -TaskID = NewType("TaskID", int) - -ProgressType = TypeVar("ProgressType") - -GetTimeCallable = Callable[[], float] - - -_I = typing.TypeVar("_I", TextIO, BinaryIO) - - -class _TrackThread(Thread): - """A thread to periodically update progress.""" - - def __init__(self, progress: "Progress", task_id: "TaskID", update_period: float): - self.progress = progress - self.task_id = task_id - self.update_period = update_period - self.done = Event() - - self.completed = 0 - super().__init__(daemon=True) - - def run(self) -> None: - task_id = self.task_id - advance = self.progress.advance - update_period = self.update_period - last_completed = 0 - wait = self.done.wait - while not wait(update_period) and self.progress.live.is_started: - completed = self.completed - if last_completed != completed: - advance(task_id, completed - last_completed) - last_completed = completed - - self.progress.update(self.task_id, completed=self.completed, refresh=True) - - def __enter__(self) -> "_TrackThread": - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.done.set() - self.join() - - -def track( - sequence: Union[Sequence[ProgressType], Iterable[ProgressType]], - description: str = "Working...", - total: Optional[float] = None, - completed: int = 0, - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - update_period: float = 0.1, - disable: bool = False, - show_speed: bool = True, -) -> Iterable[ProgressType]: - """Track progress by iterating over a sequence. - - Args: - sequence (Iterable[ProgressType]): A sequence (must support "len") you wish to iterate over. - description (str, optional): Description of task show next to progress bar. Defaults to "Working". - total: (float, optional): Total number of steps. Default is len(sequence). - completed (int, optional): Number of steps completed so far. Defaults to 0. - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1. - disable (bool, optional): Disable display of progress. - show_speed (bool, optional): Show speed if total isn't known. Defaults to True. - Returns: - Iterable[ProgressType]: An iterable of the values in the sequence. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - TaskProgressColumn(show_speed=show_speed), - TimeRemainingColumn(elapsed_when_finished=True), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - with progress: - yield from progress.track( - sequence, - total=total, - completed=completed, - description=description, - update_period=update_period, - ) - - -class _Reader(RawIOBase, BinaryIO): - """A reader that tracks progress while it's being read from.""" - - def __init__( - self, - handle: BinaryIO, - progress: "Progress", - task: TaskID, - close_handle: bool = True, - ) -> None: - self.handle = handle - self.progress = progress - self.task = task - self.close_handle = close_handle - self._closed = False - - def __enter__(self) -> "_Reader": - self.handle.__enter__() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.close() - - def __iter__(self) -> BinaryIO: - return self - - def __next__(self) -> bytes: - line = next(self.handle) - self.progress.advance(self.task, advance=len(line)) - return line - - @property - def closed(self) -> bool: - return self._closed - - def fileno(self) -> int: - return self.handle.fileno() - - def isatty(self) -> bool: - return self.handle.isatty() - - @property - def mode(self) -> str: - return self.handle.mode - - @property - def name(self) -> str: - return self.handle.name - - def readable(self) -> bool: - return self.handle.readable() - - def seekable(self) -> bool: - return self.handle.seekable() - - def writable(self) -> bool: - return False - - def read(self, size: int = -1) -> bytes: - block = self.handle.read(size) - self.progress.advance(self.task, advance=len(block)) - return block - - def readinto(self, b: Union[bytearray, memoryview, mmap]): # type: ignore[no-untyped-def, override] - n = self.handle.readinto(b) # type: ignore[attr-defined] - self.progress.advance(self.task, advance=n) - return n - - def readline(self, size: int = -1) -> bytes: # type: ignore[override] - line = self.handle.readline(size) - self.progress.advance(self.task, advance=len(line)) - return line - - def readlines(self, hint: int = -1) -> List[bytes]: - lines = self.handle.readlines(hint) - self.progress.advance(self.task, advance=sum(map(len, lines))) - return lines - - def close(self) -> None: - if self.close_handle: - self.handle.close() - self._closed = True - - def seek(self, offset: int, whence: int = 0) -> int: - pos = self.handle.seek(offset, whence) - self.progress.update(self.task, completed=pos) - return pos - - def tell(self) -> int: - return self.handle.tell() - - def write(self, s: Any) -> int: - raise UnsupportedOperation("write") - - def writelines(self, lines: Iterable[Any]) -> None: - raise UnsupportedOperation("writelines") - - -class _ReadContext(ContextManager[_I], Generic[_I]): - """A utility class to handle a context for both a reader and a progress.""" - - def __init__(self, progress: "Progress", reader: _I) -> None: - self.progress = progress - self.reader: _I = reader - - def __enter__(self) -> _I: - self.progress.start() - return self.reader.__enter__() - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.progress.stop() - self.reader.__exit__(exc_type, exc_val, exc_tb) - - -def wrap_file( - file: BinaryIO, - total: int, - *, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[BinaryIO]: - """Read bytes from a file while tracking progress. - - Args: - file (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode. - total (int): Total number of bytes to read. - description (str, optional): Description of task show next to progress bar. Defaults to "Reading". - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - disable (bool, optional): Disable display of progress. - Returns: - ContextManager[BinaryIO]: A context manager yielding a progress reader. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - DownloadColumn(), - TimeRemainingColumn(), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - reader = progress.wrap_file(file, total=total, description=description) - return _ReadContext(progress, reader) - - -@typing.overload -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rt"], Literal["r"]], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[TextIO]: - pass - - -@typing.overload -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Literal["rb"], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[BinaryIO]: - pass - - -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rb"], Literal["rt"], Literal["r"]] = "r", - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> Union[ContextManager[BinaryIO], ContextManager[TextIO]]: - """Read bytes from a file while tracking progress. - - Args: - path (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode. - mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt". - buffering (int): The buffering strategy to use, see :func:`io.open`. - encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`. - errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`. - newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open` - total: (int, optional): Total number of bytes to read. Must be provided if reading from a file handle. Default for a path is os.stat(file).st_size. - description (str, optional): Description of task show next to progress bar. Defaults to "Reading". - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - disable (bool, optional): Disable display of progress. - encoding (str, optional): The encoding to use when reading in text mode. - - Returns: - ContextManager[BinaryIO]: A context manager yielding a progress reader. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - DownloadColumn(), - TimeRemainingColumn(), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - reader = progress.open( - file, - mode=mode, - buffering=buffering, - encoding=encoding, - errors=errors, - newline=newline, - total=total, - description=description, - ) - return _ReadContext(progress, reader) # type: ignore[return-value, type-var] - - -class ProgressColumn(ABC): - """Base class for a widget to use in progress display.""" - - max_refresh: Optional[float] = None - - def __init__(self, table_column: Optional[Column] = None) -> None: - self._table_column = table_column - self._renderable_cache: Dict[TaskID, Tuple[float, RenderableType]] = {} - self._update_time: Optional[float] = None - - def get_table_column(self) -> Column: - """Get a table column, used to build tasks table.""" - return self._table_column or Column() - - def __call__(self, task: "Task") -> RenderableType: - """Called by the Progress object to return a renderable for the given task. - - Args: - task (Task): An object containing information regarding the task. - - Returns: - RenderableType: Anything renderable (including str). - """ - current_time = task.get_time() - if self.max_refresh is not None and not task.completed: - try: - timestamp, renderable = self._renderable_cache[task.id] - except KeyError: - pass - else: - if timestamp + self.max_refresh > current_time: - return renderable - - renderable = self.render(task) - self._renderable_cache[task.id] = (current_time, renderable) - return renderable - - @abstractmethod - def render(self, task: "Task") -> RenderableType: - """Should return a renderable object.""" - - -class RenderableColumn(ProgressColumn): - """A column to insert an arbitrary column. - - Args: - renderable (RenderableType, optional): Any renderable. Defaults to empty string. - """ - - def __init__( - self, renderable: RenderableType = "", *, table_column: Optional[Column] = None - ): - self.renderable = renderable - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> RenderableType: - return self.renderable - - -class SpinnerColumn(ProgressColumn): - """A column with a 'spinner' animation. - - Args: - spinner_name (str, optional): Name of spinner animation. Defaults to "dots". - style (StyleType, optional): Style of spinner. Defaults to "progress.spinner". - speed (float, optional): Speed factor of spinner. Defaults to 1.0. - finished_text (TextType, optional): Text used when task is finished. Defaults to " ". - """ - - def __init__( - self, - spinner_name: str = "dots", - style: Optional[StyleType] = "progress.spinner", - speed: float = 1.0, - finished_text: TextType = " ", - table_column: Optional[Column] = None, - ): - self.spinner = Spinner(spinner_name, style=style, speed=speed) - self.finished_text = ( - Text.from_markup(finished_text) - if isinstance(finished_text, str) - else finished_text - ) - super().__init__(table_column=table_column) - - def set_spinner( - self, - spinner_name: str, - spinner_style: Optional[StyleType] = "progress.spinner", - speed: float = 1.0, - ) -> None: - """Set a new spinner. - - Args: - spinner_name (str): Spinner name, see python -m rich.spinner. - spinner_style (Optional[StyleType], optional): Spinner style. Defaults to "progress.spinner". - speed (float, optional): Speed factor of spinner. Defaults to 1.0. - """ - self.spinner = Spinner(spinner_name, style=spinner_style, speed=speed) - - def render(self, task: "Task") -> RenderableType: - text = ( - self.finished_text - if task.finished - else self.spinner.render(task.get_time()) - ) - return text - - -class TextColumn(ProgressColumn): - """A column containing text.""" - - def __init__( - self, - text_format: str, - style: StyleType = "none", - justify: JustifyMethod = "left", - markup: bool = True, - highlighter: Optional[Highlighter] = None, - table_column: Optional[Column] = None, - ) -> None: - self.text_format = text_format - self.justify: JustifyMethod = justify - self.style = style - self.markup = markup - self.highlighter = highlighter - super().__init__(table_column=table_column or Column(no_wrap=True)) - - def render(self, task: "Task") -> Text: - _text = self.text_format.format(task=task) - if self.markup: - text = Text.from_markup(_text, style=self.style, justify=self.justify) - else: - text = Text(_text, style=self.style, justify=self.justify) - if self.highlighter: - self.highlighter.highlight(text) - return text - - -class BarColumn(ProgressColumn): - """Renders a visual progress bar. - - Args: - bar_width (Optional[int], optional): Width of bar or None for full width. Defaults to 40. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - """ - - def __init__( - self, - bar_width: Optional[int] = 40, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - table_column: Optional[Column] = None, - ) -> None: - self.bar_width = bar_width - self.style = style - self.complete_style = complete_style - self.finished_style = finished_style - self.pulse_style = pulse_style - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> ProgressBar: - """Gets a progress bar widget for a task.""" - return ProgressBar( - total=max(0, task.total) if task.total is not None else None, - completed=max(0, task.completed), - width=None if self.bar_width is None else max(1, self.bar_width), - pulse=not task.started, - animation_time=task.get_time(), - style=self.style, - complete_style=self.complete_style, - finished_style=self.finished_style, - pulse_style=self.pulse_style, - ) - - -class TimeElapsedColumn(ProgressColumn): - """Renders time elapsed.""" - - def render(self, task: "Task") -> Text: - """Show time elapsed.""" - elapsed = task.finished_time if task.finished else task.elapsed - if elapsed is None: - return Text("-:--:--", style="progress.elapsed") - delta = timedelta(seconds=max(0, int(elapsed))) - return Text(str(delta), style="progress.elapsed") - - -class TaskProgressColumn(TextColumn): - """Show task progress as a percentage. - - Args: - text_format (str, optional): Format for percentage display. Defaults to "[progress.percentage]{task.percentage:>3.0f}%". - text_format_no_percentage (str, optional): Format if percentage is unknown. Defaults to "". - style (StyleType, optional): Style of output. Defaults to "none". - justify (JustifyMethod, optional): Text justification. Defaults to "left". - markup (bool, optional): Enable markup. Defaults to True. - highlighter (Optional[Highlighter], optional): Highlighter to apply to output. Defaults to None. - table_column (Optional[Column], optional): Table Column to use. Defaults to None. - show_speed (bool, optional): Show speed if total is unknown. Defaults to False. - """ - - def __init__( - self, - text_format: str = "[progress.percentage]{task.percentage:>3.0f}%", - text_format_no_percentage: str = "", - style: StyleType = "none", - justify: JustifyMethod = "left", - markup: bool = True, - highlighter: Optional[Highlighter] = None, - table_column: Optional[Column] = None, - show_speed: bool = False, - ) -> None: - self.text_format_no_percentage = text_format_no_percentage - self.show_speed = show_speed - super().__init__( - text_format=text_format, - style=style, - justify=justify, - markup=markup, - highlighter=highlighter, - table_column=table_column, - ) - - @classmethod - def render_speed(cls, speed: Optional[float]) -> Text: - """Render the speed in iterations per second. - - Args: - task (Task): A Task object. - - Returns: - Text: Text object containing the task speed. - """ - if speed is None: - return Text("", style="progress.percentage") - unit, suffix = filesize.pick_unit_and_suffix( - int(speed), - ["", "×10³", "×10⁶", "×10⁹", "×10¹²"], - 1000, - ) - data_speed = speed / unit - return Text(f"{data_speed:.1f}{suffix} it/s", style="progress.percentage") - - def render(self, task: "Task") -> Text: - if task.total is None and self.show_speed: - return self.render_speed(task.finished_speed or task.speed) - text_format = ( - self.text_format_no_percentage if task.total is None else self.text_format - ) - _text = text_format.format(task=task) - if self.markup: - text = Text.from_markup(_text, style=self.style, justify=self.justify) - else: - text = Text(_text, style=self.style, justify=self.justify) - if self.highlighter: - self.highlighter.highlight(text) - return text - - -class TimeRemainingColumn(ProgressColumn): - """Renders estimated time remaining. - - Args: - compact (bool, optional): Render MM:SS when time remaining is less than an hour. Defaults to False. - elapsed_when_finished (bool, optional): Render time elapsed when the task is finished. Defaults to False. - """ - - # Only refresh twice a second to prevent jitter - max_refresh = 0.5 - - def __init__( - self, - compact: bool = False, - elapsed_when_finished: bool = False, - table_column: Optional[Column] = None, - ): - self.compact = compact - self.elapsed_when_finished = elapsed_when_finished - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Show time remaining.""" - if self.elapsed_when_finished and task.finished: - task_time = task.finished_time - style = "progress.elapsed" - else: - task_time = task.time_remaining - style = "progress.remaining" - - if task.total is None: - return Text("", style=style) - - if task_time is None: - return Text("--:--" if self.compact else "-:--:--", style=style) - - # Based on https://github.com/tqdm/tqdm/blob/master/tqdm/std.py - minutes, seconds = divmod(int(task_time), 60) - hours, minutes = divmod(minutes, 60) - - if self.compact and not hours: - formatted = f"{minutes:02d}:{seconds:02d}" - else: - formatted = f"{hours:d}:{minutes:02d}:{seconds:02d}" - - return Text(formatted, style=style) - - -class FileSizeColumn(ProgressColumn): - """Renders completed filesize.""" - - def render(self, task: "Task") -> Text: - """Show data completed.""" - data_size = filesize.decimal(int(task.completed)) - return Text(data_size, style="progress.filesize") - - -class TotalFileSizeColumn(ProgressColumn): - """Renders total filesize.""" - - def render(self, task: "Task") -> Text: - """Show data completed.""" - data_size = filesize.decimal(int(task.total)) if task.total is not None else "" - return Text(data_size, style="progress.filesize.total") - - -class MofNCompleteColumn(ProgressColumn): - """Renders completed count/total, e.g. ' 10/1000'. - - Best for bounded tasks with int quantities. - - Space pads the completed count so that progress length does not change as task progresses - past powers of 10. - - Args: - separator (str, optional): Text to separate completed and total values. Defaults to "/". - """ - - def __init__(self, separator: str = "/", table_column: Optional[Column] = None): - self.separator = separator - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Show completed/total.""" - completed = int(task.completed) - total = int(task.total) if task.total is not None else "?" - total_width = len(str(total)) - return Text( - f"{completed:{total_width}d}{self.separator}{total}", - style="progress.download", - ) - - -class DownloadColumn(ProgressColumn): - """Renders file size downloaded and total, e.g. '0.5/2.3 GB'. - - Args: - binary_units (bool, optional): Use binary units, KiB, MiB etc. Defaults to False. - """ - - def __init__( - self, binary_units: bool = False, table_column: Optional[Column] = None - ) -> None: - self.binary_units = binary_units - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Calculate common unit for completed and total.""" - completed = int(task.completed) - - unit_and_suffix_calculation_base = ( - int(task.total) if task.total is not None else completed - ) - if self.binary_units: - unit, suffix = filesize.pick_unit_and_suffix( - unit_and_suffix_calculation_base, - ["bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"], - 1024, - ) - else: - unit, suffix = filesize.pick_unit_and_suffix( - unit_and_suffix_calculation_base, - ["bytes", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"], - 1000, - ) - precision = 0 if unit == 1 else 1 - - completed_ratio = completed / unit - completed_str = f"{completed_ratio:,.{precision}f}" - - if task.total is not None: - total = int(task.total) - total_ratio = total / unit - total_str = f"{total_ratio:,.{precision}f}" - else: - total_str = "?" - - download_status = f"{completed_str}/{total_str} {suffix}" - download_text = Text(download_status, style="progress.download") - return download_text - - -class TransferSpeedColumn(ProgressColumn): - """Renders human readable transfer speed.""" - - def render(self, task: "Task") -> Text: - """Show data transfer speed.""" - speed = task.finished_speed or task.speed - if speed is None: - return Text("?", style="progress.data.speed") - data_speed = filesize.decimal(int(speed)) - return Text(f"{data_speed}/s", style="progress.data.speed") - - -class ProgressSample(NamedTuple): - """Sample of progress for a given time.""" - - timestamp: float - """Timestamp of sample.""" - completed: float - """Number of steps completed.""" - - -@dataclass -class Task: - """Information regarding a progress task. - - This object should be considered read-only outside of the :class:`~Progress` class. - - """ - - id: TaskID - """Task ID associated with this task (used in Progress methods).""" - - description: str - """str: Description of the task.""" - - total: Optional[float] - """Optional[float]: Total number of steps in this task.""" - - completed: float - """float: Number of steps completed""" - - _get_time: GetTimeCallable - """Callable to get the current time.""" - - finished_time: Optional[float] = None - """float: Time task was finished.""" - - visible: bool = True - """bool: Indicates if this task is visible in the progress display.""" - - fields: Dict[str, Any] = field(default_factory=dict) - """dict: Arbitrary fields passed in via Progress.update.""" - - start_time: Optional[float] = field(default=None, init=False, repr=False) - """Optional[float]: Time this task was started, or None if not started.""" - - stop_time: Optional[float] = field(default=None, init=False, repr=False) - """Optional[float]: Time this task was stopped, or None if not stopped.""" - - finished_speed: Optional[float] = None - """Optional[float]: The last speed for a finished task.""" - - _progress: Deque[ProgressSample] = field( - default_factory=lambda: deque(maxlen=1000), init=False, repr=False - ) - - _lock: RLock = field(repr=False, default_factory=RLock) - """Thread lock.""" - - def get_time(self) -> float: - """float: Get the current time, in seconds.""" - return self._get_time() - - @property - def started(self) -> bool: - """bool: Check if the task as started.""" - return self.start_time is not None - - @property - def remaining(self) -> Optional[float]: - """Optional[float]: Get the number of steps remaining, if a non-None total was set.""" - if self.total is None: - return None - return self.total - self.completed - - @property - def elapsed(self) -> Optional[float]: - """Optional[float]: Time elapsed since task was started, or ``None`` if the task hasn't started.""" - if self.start_time is None: - return None - if self.stop_time is not None: - return self.stop_time - self.start_time - return self.get_time() - self.start_time - - @property - def finished(self) -> bool: - """Check if the task has finished.""" - return self.finished_time is not None - - @property - def percentage(self) -> float: - """float: Get progress of task as a percentage. If a None total was set, returns 0""" - if not self.total: - return 0.0 - completed = (self.completed / self.total) * 100.0 - completed = min(100.0, max(0.0, completed)) - return completed - - @property - def speed(self) -> Optional[float]: - """Optional[float]: Get the estimated speed in steps per second.""" - if self.start_time is None: - return None - with self._lock: - progress = self._progress - if not progress: - return None - total_time = progress[-1].timestamp - progress[0].timestamp - if total_time == 0: - return None - iter_progress = iter(progress) - next(iter_progress) - total_completed = sum(sample.completed for sample in iter_progress) - speed = total_completed / total_time - return speed - - @property - def time_remaining(self) -> Optional[float]: - """Optional[float]: Get estimated time to completion, or ``None`` if no data.""" - if self.finished: - return 0.0 - speed = self.speed - if not speed: - return None - remaining = self.remaining - if remaining is None: - return None - estimate = ceil(remaining / speed) - return estimate - - def _reset(self) -> None: - """Reset progress.""" - self._progress.clear() - self.finished_time = None - self.finished_speed = None - - -class Progress(JupyterMixin): - """Renders an auto-updating progress bar(s). - - Args: - console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout. - auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()`. - refresh_per_second (Optional[float], optional): Number of times per second to refresh the progress information or None to use default (10). Defaults to None. - speed_estimate_period: (float, optional): Period (in seconds) used to calculate the speed estimate. Defaults to 30. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - redirect_stdout: (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True. - redirect_stderr: (bool, optional): Enable redirection of stderr. Defaults to True. - get_time: (Callable, optional): A callable that gets the current time, or None to use Console.get_time. Defaults to None. - disable (bool, optional): Disable progress display. Defaults to False - expand (bool, optional): Expand tasks table to fit width. Defaults to False. - """ - - def __init__( - self, - *columns: Union[str, ProgressColumn], - console: Optional[Console] = None, - auto_refresh: bool = True, - refresh_per_second: float = 10, - speed_estimate_period: float = 30.0, - transient: bool = False, - redirect_stdout: bool = True, - redirect_stderr: bool = True, - get_time: Optional[GetTimeCallable] = None, - disable: bool = False, - expand: bool = False, - ) -> None: - assert refresh_per_second > 0, "refresh_per_second must be > 0" - self._lock = RLock() - self.columns = columns or self.get_default_columns() - self.speed_estimate_period = speed_estimate_period - - self.disable = disable - self.expand = expand - self._tasks: Dict[TaskID, Task] = {} - self._task_index: TaskID = TaskID(0) - self.live = Live( - console=console or get_console(), - auto_refresh=auto_refresh, - refresh_per_second=refresh_per_second, - transient=transient, - redirect_stdout=redirect_stdout, - redirect_stderr=redirect_stderr, - get_renderable=self.get_renderable, - ) - self.get_time = get_time or self.console.get_time - self.print = self.console.print - self.log = self.console.log - - @classmethod - def get_default_columns(cls) -> Tuple[ProgressColumn, ...]: - """Get the default columns used for a new Progress instance: - - a text column for the description (TextColumn) - - the bar itself (BarColumn) - - a text column showing completion percentage (TextColumn) - - an estimated-time-remaining column (TimeRemainingColumn) - If the Progress instance is created without passing a columns argument, - the default columns defined here will be used. - - You can also create a Progress instance using custom columns before - and/or after the defaults, as in this example: - - progress = Progress( - SpinnerColumn(), - *Progress.get_default_columns(), - "Elapsed:", - TimeElapsedColumn(), - ) - - This code shows the creation of a Progress display, containing - a spinner to the left, the default columns, and a labeled elapsed - time column. - """ - return ( - TextColumn("[progress.description]{task.description}"), - BarColumn(), - TaskProgressColumn(), - TimeRemainingColumn(), - ) - - @property - def console(self) -> Console: - return self.live.console - - @property - def tasks(self) -> List[Task]: - """Get a list of Task instances.""" - with self._lock: - return list(self._tasks.values()) - - @property - def task_ids(self) -> List[TaskID]: - """A list of task IDs.""" - with self._lock: - return list(self._tasks.keys()) - - @property - def finished(self) -> bool: - """Check if all tasks have been completed.""" - with self._lock: - if not self._tasks: - return True - return all(task.finished for task in self._tasks.values()) - - def start(self) -> None: - """Start the progress display.""" - if not self.disable: - self.live.start(refresh=True) - - def stop(self) -> None: - """Stop the progress display.""" - self.live.stop() - if not self.console.is_interactive and not self.console.is_jupyter: - self.console.print() - - def __enter__(self) -> Self: - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - def track( - self, - sequence: Union[Iterable[ProgressType], Sequence[ProgressType]], - total: Optional[float] = None, - completed: int = 0, - task_id: Optional[TaskID] = None, - description: str = "Working...", - update_period: float = 0.1, - ) -> Iterable[ProgressType]: - """Track progress by iterating over a sequence. - - Args: - sequence (Sequence[ProgressType]): A sequence of values you want to iterate over and track progress. - total: (float, optional): Total number of steps. Default is len(sequence). - completed (int, optional): Number of steps completed so far. Defaults to 0. - task_id: (TaskID): Task to track. Default is new task. - description: (str, optional): Description of task, if new task is created. - update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1. - - Returns: - Iterable[ProgressType]: An iterable of values taken from the provided sequence. - """ - if total is None: - total = float(length_hint(sequence)) or None - - if task_id is None: - task_id = self.add_task(description, total=total, completed=completed) - else: - self.update(task_id, total=total, completed=completed) - - if self.live.auto_refresh: - with _TrackThread(self, task_id, update_period) as track_thread: - for value in sequence: - yield value - track_thread.completed += 1 - else: - advance = self.advance - refresh = self.refresh - for value in sequence: - yield value - advance(task_id, 1) - refresh() - - def wrap_file( - self, - file: BinaryIO, - total: Optional[int] = None, - *, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> BinaryIO: - """Track progress file reading from a binary file. - - Args: - file (BinaryIO): A file-like object opened in binary mode. - total (int, optional): Total number of bytes to read. This must be provided unless a task with a total is also given. - task_id (TaskID): Task to track. Default is new task. - description (str, optional): Description of task, if new task is created. - - Returns: - BinaryIO: A readable file-like object in binary mode. - - Raises: - ValueError: When no total value can be extracted from the arguments or the task. - """ - # attempt to recover the total from the task - total_bytes: Optional[float] = None - if total is not None: - total_bytes = total - elif task_id is not None: - with self._lock: - total_bytes = self._tasks[task_id].total - if total_bytes is None: - raise ValueError( - f"unable to get the total number of bytes, please specify 'total'" - ) - - # update total of task or create new task - if task_id is None: - task_id = self.add_task(description, total=total_bytes) - else: - self.update(task_id, total=total_bytes) - - return _Reader(file, self, task_id, close_handle=False) - - @typing.overload - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Literal["rb"], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> BinaryIO: - pass - - @typing.overload - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["r"], Literal["rt"]], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> TextIO: - pass - - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rb"], Literal["rt"], Literal["r"]] = "r", - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> Union[BinaryIO, TextIO]: - """Track progress while reading from a binary file. - - Args: - path (Union[str, PathLike[str]]): The path to the file to read. - mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt". - buffering (int): The buffering strategy to use, see :func:`io.open`. - encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`. - errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`. - newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open`. - total (int, optional): Total number of bytes to read. If none given, os.stat(path).st_size is used. - task_id (TaskID): Task to track. Default is new task. - description (str, optional): Description of task, if new task is created. - - Returns: - BinaryIO: A readable file-like object in binary mode. - - Raises: - ValueError: When an invalid mode is given. - """ - # normalize the mode (always rb, rt) - _mode = "".join(sorted(mode, reverse=False)) - if _mode not in ("br", "rt", "r"): - raise ValueError(f"invalid mode {mode!r}") - - # patch buffering to provide the same behaviour as the builtin `open` - line_buffering = buffering == 1 - if _mode == "br" and buffering == 1: - warnings.warn( - "line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used", - RuntimeWarning, - ) - buffering = -1 - elif _mode in ("rt", "r"): - if buffering == 0: - raise ValueError("can't have unbuffered text I/O") - elif buffering == 1: - buffering = -1 - - # attempt to get the total with `os.stat` - if total is None: - total = stat(file).st_size - - # update total of task or create new task - if task_id is None: - task_id = self.add_task(description, total=total) - else: - self.update(task_id, total=total) - - # open the file in binary mode, - handle = io.open(file, "rb", buffering=buffering) - reader = _Reader(handle, self, task_id, close_handle=True) - - # wrap the reader in a `TextIOWrapper` if text mode - if mode in ("r", "rt"): - return io.TextIOWrapper( - reader, - encoding=encoding, - errors=errors, - newline=newline, - line_buffering=line_buffering, - ) - - return reader - - def start_task(self, task_id: TaskID) -> None: - """Start a task. - - Starts a task (used when calculating elapsed time). You may need to call this manually, - if you called ``add_task`` with ``start=False``. - - Args: - task_id (TaskID): ID of task. - """ - with self._lock: - task = self._tasks[task_id] - if task.start_time is None: - task.start_time = self.get_time() - - def stop_task(self, task_id: TaskID) -> None: - """Stop a task. - - This will freeze the elapsed time on the task. - - Args: - task_id (TaskID): ID of task. - """ - with self._lock: - task = self._tasks[task_id] - current_time = self.get_time() - if task.start_time is None: - task.start_time = current_time - task.stop_time = current_time - - def update( - self, - task_id: TaskID, - *, - total: Optional[float] = None, - completed: Optional[float] = None, - advance: Optional[float] = None, - description: Optional[str] = None, - visible: Optional[bool] = None, - refresh: bool = False, - **fields: Any, - ) -> None: - """Update information associated with a task. - - Args: - task_id (TaskID): Task id (returned by add_task). - total (float, optional): Updates task.total if not None. - completed (float, optional): Updates task.completed if not None. - advance (float, optional): Add a value to task.completed if not None. - description (str, optional): Change task description if not None. - visible (bool, optional): Set visible flag if not None. - refresh (bool): Force a refresh of progress information. Default is False. - **fields (Any): Additional data fields required for rendering. - """ - with self._lock: - task = self._tasks[task_id] - completed_start = task.completed - - if total is not None and total != task.total: - task.total = total - task._reset() - if advance is not None: - task.completed += advance - if completed is not None: - task.completed = completed - if description is not None: - task.description = description - if visible is not None: - task.visible = visible - task.fields.update(fields) - update_completed = task.completed - completed_start - - current_time = self.get_time() - old_sample_time = current_time - self.speed_estimate_period - _progress = task._progress - - popleft = _progress.popleft - while _progress and _progress[0].timestamp < old_sample_time: - popleft() - if update_completed > 0: - _progress.append(ProgressSample(current_time, update_completed)) - if ( - task.total is not None - and task.completed >= task.total - and task.finished_time is None - ): - task.finished_time = task.elapsed - - if refresh: - self.refresh() - - def reset( - self, - task_id: TaskID, - *, - start: bool = True, - total: Optional[float] = None, - completed: int = 0, - visible: Optional[bool] = None, - description: Optional[str] = None, - **fields: Any, - ) -> None: - """Reset a task so completed is 0 and the clock is reset. - - Args: - task_id (TaskID): ID of task. - start (bool, optional): Start the task after reset. Defaults to True. - total (float, optional): New total steps in task, or None to use current total. Defaults to None. - completed (int, optional): Number of steps completed. Defaults to 0. - visible (bool, optional): Enable display of the task. Defaults to True. - description (str, optional): Change task description if not None. Defaults to None. - **fields (str): Additional data fields required for rendering. - """ - current_time = self.get_time() - with self._lock: - task = self._tasks[task_id] - task._reset() - task.start_time = current_time if start else None - if total is not None: - task.total = total - task.completed = completed - if visible is not None: - task.visible = visible - if fields: - task.fields = fields - if description is not None: - task.description = description - task.finished_time = None - self.refresh() - - def advance(self, task_id: TaskID, advance: float = 1) -> None: - """Advance task by a number of steps. - - Args: - task_id (TaskID): ID of task. - advance (float): Number of steps to advance. Default is 1. - """ - current_time = self.get_time() - with self._lock: - task = self._tasks[task_id] - completed_start = task.completed - task.completed += advance - update_completed = task.completed - completed_start - old_sample_time = current_time - self.speed_estimate_period - _progress = task._progress - - popleft = _progress.popleft - while _progress and _progress[0].timestamp < old_sample_time: - popleft() - while len(_progress) > 1000: - popleft() - _progress.append(ProgressSample(current_time, update_completed)) - if ( - task.total is not None - and task.completed >= task.total - and task.finished_time is None - ): - task.finished_time = task.elapsed - task.finished_speed = task.speed - - def refresh(self) -> None: - """Refresh (render) the progress information.""" - if not self.disable and self.live.is_started: - self.live.refresh() - - def get_renderable(self) -> RenderableType: - """Get a renderable for the progress display.""" - renderable = Group(*self.get_renderables()) - return renderable - - def get_renderables(self) -> Iterable[RenderableType]: - """Get a number of renderables for the progress display.""" - table = self.make_tasks_table(self.tasks) - yield table - - def make_tasks_table(self, tasks: Iterable[Task]) -> Table: - """Get a table to render the Progress display. - - Args: - tasks (Iterable[Task]): An iterable of Task instances, one per row of the table. - - Returns: - Table: A table instance. - """ - table_columns = ( - ( - Column(no_wrap=True) - if isinstance(_column, str) - else _column.get_table_column().copy() - ) - for _column in self.columns - ) - table = Table.grid(*table_columns, padding=(0, 1), expand=self.expand) - - for task in tasks: - if task.visible: - table.add_row( - *( - ( - column.format(task=task) - if isinstance(column, str) - else column(task) - ) - for column in self.columns - ) - ) - return table - - def __rich__(self) -> RenderableType: - """Makes the Progress class itself renderable.""" - with self._lock: - return self.get_renderable() - - def add_task( - self, - description: str, - start: bool = True, - total: Optional[float] = 100.0, - completed: int = 0, - visible: bool = True, - **fields: Any, - ) -> TaskID: - """Add a new 'task' to the Progress display. - - Args: - description (str): A description of the task. - start (bool, optional): Start the task immediately (to calculate elapsed time). If set to False, - you will need to call `start` manually. Defaults to True. - total (float, optional): Number of total steps in the progress if known. - Set to None to render a pulsing animation. Defaults to 100. - completed (int, optional): Number of steps completed so far. Defaults to 0. - visible (bool, optional): Enable display of the task. Defaults to True. - **fields (str): Additional data fields required for rendering. - - Returns: - TaskID: An ID you can use when calling `update`. - """ - with self._lock: - task = Task( - self._task_index, - description, - total, - completed, - visible=visible, - fields=fields, - _get_time=self.get_time, - _lock=self._lock, - ) - self._tasks[self._task_index] = task - if start: - self.start_task(self._task_index) - new_task_index = self._task_index - self._task_index = TaskID(int(self._task_index) + 1) - self.refresh() - return new_task_index - - def remove_task(self, task_id: TaskID) -> None: - """Delete a task if it exists. - - Args: - task_id (TaskID): A task ID. - - """ - with self._lock: - del self._tasks[task_id] - - -if __name__ == "__main__": # pragma: no coverage - import random - import time - - from .panel import Panel - from .rule import Rule - from .syntax import Syntax - from .table import Table - - syntax = Syntax( - '''def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value''', - "python", - line_numbers=True, - ) - - table = Table("foo", "bar", "baz") - table.add_row("1", "2", "3") - - progress_renderables = [ - "Text may be printed while the progress bars are rendering.", - Panel("In fact, [i]any[/i] renderable will work"), - "Such as [magenta]tables[/]...", - table, - "Pretty printed structures...", - {"type": "example", "text": "Pretty printed"}, - "Syntax...", - syntax, - Rule("Give it a try!"), - ] - - from itertools import cycle - - examples = cycle(progress_renderables) - - console = Console(record=True) - - with Progress( - SpinnerColumn(), - *Progress.get_default_columns(), - TimeElapsedColumn(), - console=console, - transient=False, - ) as progress: - task1 = progress.add_task("[red]Downloading", total=1000) - task2 = progress.add_task("[green]Processing", total=1000) - task3 = progress.add_task("[yellow]Thinking", total=None) - - while not progress.finished: - progress.update(task1, advance=0.5) - progress.update(task2, advance=0.3) - time.sleep(0.01) - if random.randint(0, 100) < 1: - progress.log(next(examples)) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py deleted file mode 100644 index 41794f7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py +++ /dev/null @@ -1,223 +0,0 @@ -import math -from functools import lru_cache -from time import monotonic -from typing import Iterable, List, Optional - -from .color import Color, blend_rgb -from .color_triplet import ColorTriplet -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleType - -# Number of characters before 'pulse' animation repeats -PULSE_SIZE = 20 - - -class ProgressBar(JupyterMixin): - """Renders a (progress) bar. Used by rich.progress. - - Args: - total (float, optional): Number of steps in the bar. Defaults to 100. Set to None to render a pulsing animation. - completed (float, optional): Number of steps completed. Defaults to 0. - width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None. - pulse (bool, optional): Enable pulse effect. Defaults to False. Will pulse if a None total was passed. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - animation_time (Optional[float], optional): Time in seconds to use for animation, or None to use system time. - """ - - def __init__( - self, - total: Optional[float] = 100.0, - completed: float = 0, - width: Optional[int] = None, - pulse: bool = False, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - animation_time: Optional[float] = None, - ): - self.total = total - self.completed = completed - self.width = width - self.pulse = pulse - self.style = style - self.complete_style = complete_style - self.finished_style = finished_style - self.pulse_style = pulse_style - self.animation_time = animation_time - - self._pulse_segments: Optional[List[Segment]] = None - - def __repr__(self) -> str: - return f"" - - @property - def percentage_completed(self) -> Optional[float]: - """Calculate percentage complete.""" - if self.total is None: - return None - completed = (self.completed / self.total) * 100.0 - completed = min(100, max(0.0, completed)) - return completed - - @lru_cache(maxsize=16) - def _get_pulse_segments( - self, - fore_style: Style, - back_style: Style, - color_system: str, - no_color: bool, - ascii: bool = False, - ) -> List[Segment]: - """Get a list of segments to render a pulse animation. - - Returns: - List[Segment]: A list of segments, one segment per character. - """ - bar = "-" if ascii else "━" - segments: List[Segment] = [] - if color_system not in ("standard", "eight_bit", "truecolor") or no_color: - segments += [Segment(bar, fore_style)] * (PULSE_SIZE // 2) - segments += [Segment(" " if no_color else bar, back_style)] * ( - PULSE_SIZE - (PULSE_SIZE // 2) - ) - return segments - - append = segments.append - fore_color = ( - fore_style.color.get_truecolor() - if fore_style.color - else ColorTriplet(255, 0, 255) - ) - back_color = ( - back_style.color.get_truecolor() - if back_style.color - else ColorTriplet(0, 0, 0) - ) - cos = math.cos - pi = math.pi - _Segment = Segment - _Style = Style - from_triplet = Color.from_triplet - - for index in range(PULSE_SIZE): - position = index / PULSE_SIZE - fade = 0.5 + cos(position * pi * 2) / 2.0 - color = blend_rgb(fore_color, back_color, cross_fade=fade) - append(_Segment(bar, _Style(color=from_triplet(color)))) - return segments - - def update(self, completed: float, total: Optional[float] = None) -> None: - """Update progress with new values. - - Args: - completed (float): Number of steps completed. - total (float, optional): Total number of steps, or ``None`` to not change. Defaults to None. - """ - self.completed = completed - self.total = total if total is not None else self.total - - def _render_pulse( - self, console: Console, width: int, ascii: bool = False - ) -> Iterable[Segment]: - """Renders the pulse animation. - - Args: - console (Console): Console instance. - width (int): Width in characters of pulse animation. - - Returns: - RenderResult: [description] - - Yields: - Iterator[Segment]: Segments to render pulse - """ - fore_style = console.get_style(self.pulse_style, default="white") - back_style = console.get_style(self.style, default="black") - - pulse_segments = self._get_pulse_segments( - fore_style, back_style, console.color_system, console.no_color, ascii=ascii - ) - segment_count = len(pulse_segments) - current_time = ( - monotonic() if self.animation_time is None else self.animation_time - ) - segments = pulse_segments * (int(width / segment_count) + 2) - offset = int(-current_time * 15) % segment_count - segments = segments[offset : offset + width] - yield from segments - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = min(self.width or options.max_width, options.max_width) - ascii = options.legacy_windows or options.ascii_only - should_pulse = self.pulse or self.total is None - if should_pulse: - yield from self._render_pulse(console, width, ascii=ascii) - return - - completed: Optional[float] = ( - min(self.total, max(0, self.completed)) if self.total is not None else None - ) - - bar = "-" if ascii else "━" - half_bar_right = " " if ascii else "╸" - half_bar_left = " " if ascii else "╺" - complete_halves = ( - int(width * 2 * completed / self.total) - if self.total and completed is not None - else width * 2 - ) - bar_count = complete_halves // 2 - half_bar_count = complete_halves % 2 - style = console.get_style(self.style) - is_finished = self.total is None or self.completed >= self.total - complete_style = console.get_style( - self.finished_style if is_finished else self.complete_style - ) - _Segment = Segment - if bar_count: - yield _Segment(bar * bar_count, complete_style) - if half_bar_count: - yield _Segment(half_bar_right * half_bar_count, complete_style) - - if not console.no_color: - remaining_bars = width - bar_count - half_bar_count - if remaining_bars and console.color_system is not None: - if not half_bar_count and bar_count: - yield _Segment(half_bar_left, style) - remaining_bars -= 1 - if remaining_bars: - yield _Segment(bar * remaining_bars, style) - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return ( - Measurement(self.width, self.width) - if self.width is not None - else Measurement(4, options.max_width) - ) - - -if __name__ == "__main__": # pragma: no cover - console = Console() - bar = ProgressBar(width=50, total=100) - - import time - - console.show_cursor(False) - for n in range(0, 101, 1): - bar.update(n) - console.print(bar) - console.file.write("\r") - time.sleep(0.05) - console.show_cursor(True) - console.print() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py deleted file mode 100644 index fccb70d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py +++ /dev/null @@ -1,400 +0,0 @@ -from typing import Any, Generic, List, Optional, TextIO, TypeVar, Union, overload - -from . import get_console -from .console import Console -from .text import Text, TextType - -PromptType = TypeVar("PromptType") -DefaultType = TypeVar("DefaultType") - - -class PromptError(Exception): - """Exception base class for prompt related errors.""" - - -class InvalidResponse(PromptError): - """Exception to indicate a response was invalid. Raise this within process_response() to indicate an error - and provide an error message. - - Args: - message (Union[str, Text]): Error message. - """ - - def __init__(self, message: TextType) -> None: - self.message = message - - def __rich__(self) -> TextType: - return self.message - - -class PromptBase(Generic[PromptType]): - """Ask the user for input until a valid response is received. This is the base class, see one of - the concrete classes for examples. - - Args: - prompt (TextType, optional): Prompt text. Defaults to "". - console (Console, optional): A Console instance or None to use global console. Defaults to None. - password (bool, optional): Enable password input. Defaults to False. - choices (List[str], optional): A list of valid choices. Defaults to None. - case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True. - show_default (bool, optional): Show default in prompt. Defaults to True. - show_choices (bool, optional): Show choices in prompt. Defaults to True. - """ - - response_type: type = str - - validate_error_message = "[prompt.invalid]Please enter a valid value" - illegal_choice_message = ( - "[prompt.invalid.choice]Please select one of the available options" - ) - prompt_suffix = ": " - - choices: Optional[List[str]] = None - - def __init__( - self, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - ) -> None: - self.console = console or get_console() - self.prompt = ( - Text.from_markup(prompt, style="prompt") - if isinstance(prompt, str) - else prompt - ) - self.password = password - if choices is not None: - self.choices = choices - self.case_sensitive = case_sensitive - self.show_default = show_default - self.show_choices = show_choices - - @classmethod - @overload - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - default: DefaultType, - stream: Optional[TextIO] = None, - ) -> Union[DefaultType, PromptType]: - ... - - @classmethod - @overload - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - stream: Optional[TextIO] = None, - ) -> PromptType: - ... - - @classmethod - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - default: Any = ..., - stream: Optional[TextIO] = None, - ) -> Any: - """Shortcut to construct and run a prompt loop and return the result. - - Example: - >>> filename = Prompt.ask("Enter a filename") - - Args: - prompt (TextType, optional): Prompt text. Defaults to "". - console (Console, optional): A Console instance or None to use global console. Defaults to None. - password (bool, optional): Enable password input. Defaults to False. - choices (List[str], optional): A list of valid choices. Defaults to None. - case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True. - show_default (bool, optional): Show default in prompt. Defaults to True. - show_choices (bool, optional): Show choices in prompt. Defaults to True. - stream (TextIO, optional): Optional text file open for reading to get input. Defaults to None. - """ - _prompt = cls( - prompt, - console=console, - password=password, - choices=choices, - case_sensitive=case_sensitive, - show_default=show_default, - show_choices=show_choices, - ) - return _prompt(default=default, stream=stream) - - def render_default(self, default: DefaultType) -> Text: - """Turn the supplied default in to a Text instance. - - Args: - default (DefaultType): Default value. - - Returns: - Text: Text containing rendering of default value. - """ - return Text(f"({default})", "prompt.default") - - def make_prompt(self, default: DefaultType) -> Text: - """Make prompt text. - - Args: - default (DefaultType): Default value. - - Returns: - Text: Text to display in prompt. - """ - prompt = self.prompt.copy() - prompt.end = "" - - if self.show_choices and self.choices: - _choices = "/".join(self.choices) - choices = f"[{_choices}]" - prompt.append(" ") - prompt.append(choices, "prompt.choices") - - if ( - default != ... - and self.show_default - and isinstance(default, (str, self.response_type)) - ): - prompt.append(" ") - _default = self.render_default(default) - prompt.append(_default) - - prompt.append(self.prompt_suffix) - - return prompt - - @classmethod - def get_input( - cls, - console: Console, - prompt: TextType, - password: bool, - stream: Optional[TextIO] = None, - ) -> str: - """Get input from user. - - Args: - console (Console): Console instance. - prompt (TextType): Prompt text. - password (bool): Enable password entry. - - Returns: - str: String from user. - """ - return console.input(prompt, password=password, stream=stream) - - def check_choice(self, value: str) -> bool: - """Check value is in the list of valid choices. - - Args: - value (str): Value entered by user. - - Returns: - bool: True if choice was valid, otherwise False. - """ - assert self.choices is not None - if self.case_sensitive: - return value.strip() in self.choices - return value.strip().lower() in [choice.lower() for choice in self.choices] - - def process_response(self, value: str) -> PromptType: - """Process response from user, convert to prompt type. - - Args: - value (str): String typed by user. - - Raises: - InvalidResponse: If ``value`` is invalid. - - Returns: - PromptType: The value to be returned from ask method. - """ - value = value.strip() - try: - return_value: PromptType = self.response_type(value) - except ValueError: - raise InvalidResponse(self.validate_error_message) - - if self.choices is not None: - if not self.check_choice(value): - raise InvalidResponse(self.illegal_choice_message) - - if not self.case_sensitive: - # return the original choice, not the lower case version - return_value = self.response_type( - self.choices[ - [choice.lower() for choice in self.choices].index(value.lower()) - ] - ) - return return_value - - def on_validate_error(self, value: str, error: InvalidResponse) -> None: - """Called to handle validation error. - - Args: - value (str): String entered by user. - error (InvalidResponse): Exception instance the initiated the error. - """ - self.console.print(error) - - def pre_prompt(self) -> None: - """Hook to display something before the prompt.""" - - @overload - def __call__(self, *, stream: Optional[TextIO] = None) -> PromptType: - ... - - @overload - def __call__( - self, *, default: DefaultType, stream: Optional[TextIO] = None - ) -> Union[PromptType, DefaultType]: - ... - - def __call__(self, *, default: Any = ..., stream: Optional[TextIO] = None) -> Any: - """Run the prompt loop. - - Args: - default (Any, optional): Optional default value. - - Returns: - PromptType: Processed value. - """ - while True: - self.pre_prompt() - prompt = self.make_prompt(default) - value = self.get_input(self.console, prompt, self.password, stream=stream) - if value == "" and default != ...: - return default - try: - return_value = self.process_response(value) - except InvalidResponse as error: - self.on_validate_error(value, error) - continue - else: - return return_value - - -class Prompt(PromptBase[str]): - """A prompt that returns a str. - - Example: - >>> name = Prompt.ask("Enter your name") - - - """ - - response_type = str - - -class IntPrompt(PromptBase[int]): - """A prompt that returns an integer. - - Example: - >>> burrito_count = IntPrompt.ask("How many burritos do you want to order") - - """ - - response_type = int - validate_error_message = "[prompt.invalid]Please enter a valid integer number" - - -class FloatPrompt(PromptBase[float]): - """A prompt that returns a float. - - Example: - >>> temperature = FloatPrompt.ask("Enter desired temperature") - - """ - - response_type = float - validate_error_message = "[prompt.invalid]Please enter a number" - - -class Confirm(PromptBase[bool]): - """A yes / no confirmation prompt. - - Example: - >>> if Confirm.ask("Continue"): - run_job() - - """ - - response_type = bool - validate_error_message = "[prompt.invalid]Please enter Y or N" - choices: List[str] = ["y", "n"] - - def render_default(self, default: DefaultType) -> Text: - """Render the default as (y) or (n) rather than True/False.""" - yes, no = self.choices - return Text(f"({yes})" if default else f"({no})", style="prompt.default") - - def process_response(self, value: str) -> bool: - """Convert choices to a bool.""" - value = value.strip().lower() - if value not in self.choices: - raise InvalidResponse(self.validate_error_message) - return value == self.choices[0] - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - if Confirm.ask("Run [i]prompt[/i] tests?", default=True): - while True: - result = IntPrompt.ask( - ":rocket: Enter a number between [b]1[/b] and [b]10[/b]", default=5 - ) - if result >= 1 and result <= 10: - break - print(":pile_of_poo: [prompt.invalid]Number must be between 1 and 10") - print(f"number={result}") - - while True: - password = Prompt.ask( - "Please enter a password [cyan](must be at least 5 characters)", - password=True, - ) - if len(password) >= 5: - break - print("[prompt.invalid]password too short") - print(f"password={password!r}") - - fruit = Prompt.ask("Enter a fruit", choices=["apple", "orange", "pear"]) - print(f"fruit={fruit!r}") - - doggie = Prompt.ask( - "What's the best Dog? (Case INSENSITIVE)", - choices=["Border Terrier", "Collie", "Labradoodle"], - case_sensitive=False, - ) - print(f"doggie={doggie!r}") - - else: - print("[b]OK :loudly_crying_face:") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py deleted file mode 100644 index 12ab237..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import Any, cast, Set, TYPE_CHECKING -from inspect import isclass - -if TYPE_CHECKING: - from pip._vendor.rich.console import RenderableType - -_GIBBERISH = """aihwerij235234ljsdnp34ksodfipwoe234234jlskjdf""" - - -def is_renderable(check_object: Any) -> bool: - """Check if an object may be rendered by Rich.""" - return ( - isinstance(check_object, str) - or hasattr(check_object, "__rich__") - or hasattr(check_object, "__rich_console__") - ) - - -def rich_cast(renderable: object) -> "RenderableType": - """Cast an object to a renderable by calling __rich__ if present. - - Args: - renderable (object): A potentially renderable object - - Returns: - object: The result of recursively calling __rich__. - """ - from pip._vendor.rich.console import RenderableType - - rich_visited_set: Set[type] = set() # Prevent potential infinite loop - while hasattr(renderable, "__rich__") and not isclass(renderable): - # Detect object which claim to have all the attributes - if hasattr(renderable, _GIBBERISH): - return repr(renderable) - cast_method = getattr(renderable, "__rich__") - renderable = cast_method() - renderable_type = type(renderable) - if renderable_type in rich_visited_set: - break - rich_visited_set.add(renderable_type) - - return cast(RenderableType, renderable) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/region.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/region.py deleted file mode 100644 index 75b3631..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/region.py +++ /dev/null @@ -1,10 +0,0 @@ -from typing import NamedTuple - - -class Region(NamedTuple): - """Defines a rectangular region of the screen.""" - - x: int - y: int - width: int - height: int diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/repr.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/repr.py deleted file mode 100644 index 10efc42..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/repr.py +++ /dev/null @@ -1,149 +0,0 @@ -import inspect -from functools import partial -from typing import ( - Any, - Callable, - Iterable, - List, - Optional, - Tuple, - Type, - TypeVar, - Union, - overload, -) - -T = TypeVar("T") - - -Result = Iterable[Union[Any, Tuple[Any], Tuple[str, Any], Tuple[str, Any, Any]]] -RichReprResult = Result - - -class ReprError(Exception): - """An error occurred when attempting to build a repr.""" - - -@overload -def auto(cls: Optional[Type[T]]) -> Type[T]: - ... - - -@overload -def auto(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: - ... - - -def auto( - cls: Optional[Type[T]] = None, *, angular: Optional[bool] = None -) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: - """Class decorator to create __repr__ from __rich_repr__""" - - def do_replace(cls: Type[T], angular: Optional[bool] = None) -> Type[T]: - def auto_repr(self: T) -> str: - """Create repr string from __rich_repr__""" - repr_str: List[str] = [] - append = repr_str.append - - angular: bool = getattr(self.__rich_repr__, "angular", False) # type: ignore[attr-defined] - for arg in self.__rich_repr__(): # type: ignore[attr-defined] - if isinstance(arg, tuple): - if len(arg) == 1: - append(repr(arg[0])) - else: - key, value, *default = arg - if key is None: - append(repr(value)) - else: - if default and default[0] == value: - continue - append(f"{key}={value!r}") - else: - append(repr(arg)) - if angular: - return f"<{self.__class__.__name__} {' '.join(repr_str)}>" - else: - return f"{self.__class__.__name__}({', '.join(repr_str)})" - - def auto_rich_repr(self: Type[T]) -> Result: - """Auto generate __rich_rep__ from signature of __init__""" - try: - signature = inspect.signature(self.__init__) - for name, param in signature.parameters.items(): - if param.kind == param.POSITIONAL_ONLY: - yield getattr(self, name) - elif param.kind in ( - param.POSITIONAL_OR_KEYWORD, - param.KEYWORD_ONLY, - ): - if param.default is param.empty: - yield getattr(self, param.name) - else: - yield param.name, getattr(self, param.name), param.default - except Exception as error: - raise ReprError( - f"Failed to auto generate __rich_repr__; {error}" - ) from None - - if not hasattr(cls, "__rich_repr__"): - auto_rich_repr.__doc__ = "Build a rich repr" - cls.__rich_repr__ = auto_rich_repr # type: ignore[attr-defined] - - auto_repr.__doc__ = "Return repr(self)" - cls.__repr__ = auto_repr # type: ignore[assignment] - if angular is not None: - cls.__rich_repr__.angular = angular # type: ignore[attr-defined] - return cls - - if cls is None: - return partial(do_replace, angular=angular) - else: - return do_replace(cls, angular=angular) - - -@overload -def rich_repr(cls: Optional[Type[T]]) -> Type[T]: - ... - - -@overload -def rich_repr(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: - ... - - -def rich_repr( - cls: Optional[Type[T]] = None, *, angular: bool = False -) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: - if cls is None: - return auto(angular=angular) - else: - return auto(cls) - - -if __name__ == "__main__": - - @auto - class Foo: - def __rich_repr__(self) -> Result: - yield "foo" - yield "bar", {"shopping": ["eggs", "ham", "pineapple"]} - yield "buy", "hand sanitizer" - - foo = Foo() - from pip._vendor.rich.console import Console - - console = Console() - - console.rule("Standard repr") - console.print(foo) - - console.print(foo, width=60) - console.print(foo, width=30) - - console.rule("Angular repr") - Foo.__rich_repr__.angular = True # type: ignore[attr-defined] - - console.print(foo) - - console.print(foo, width=60) - console.print(foo, width=30) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py deleted file mode 100644 index fd00ce6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py +++ /dev/null @@ -1,130 +0,0 @@ -from typing import Union - -from .align import AlignMethod -from .cells import cell_len, set_cell_size -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .style import Style -from .text import Text - - -class Rule(JupyterMixin): - """A console renderable to draw a horizontal rule (line). - - Args: - title (Union[str, Text], optional): Text to render in the rule. Defaults to "". - characters (str, optional): Character(s) used to draw the line. Defaults to "─". - style (StyleType, optional): Style of Rule. Defaults to "rule.line". - end (str, optional): Character at end of Rule. defaults to "\\\\n" - align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". - """ - - def __init__( - self, - title: Union[str, Text] = "", - *, - characters: str = "─", - style: Union[str, Style] = "rule.line", - end: str = "\n", - align: AlignMethod = "center", - ) -> None: - if cell_len(characters) < 1: - raise ValueError( - "'characters' argument must have a cell width of at least 1" - ) - if align not in ("left", "center", "right"): - raise ValueError( - f'invalid value for align, expected "left", "center", "right" (not {align!r})' - ) - self.title = title - self.characters = characters - self.style = style - self.end = end - self.align = align - - def __repr__(self) -> str: - return f"Rule({self.title!r}, {self.characters!r})" - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = options.max_width - - characters = ( - "-" - if (options.ascii_only and not self.characters.isascii()) - else self.characters - ) - - chars_len = cell_len(characters) - if not self.title: - yield self._rule_line(chars_len, width) - return - - if isinstance(self.title, Text): - title_text = self.title - else: - title_text = console.render_str(self.title, style="rule.text") - - title_text.plain = title_text.plain.replace("\n", " ") - title_text.expand_tabs() - - required_space = 4 if self.align == "center" else 2 - truncate_width = max(0, width - required_space) - if not truncate_width: - yield self._rule_line(chars_len, width) - return - - rule_text = Text(end=self.end) - if self.align == "center": - title_text.truncate(truncate_width, overflow="ellipsis") - side_width = (width - cell_len(title_text.plain)) // 2 - left = Text(characters * (side_width // chars_len + 1)) - left.truncate(side_width - 1) - right_length = width - cell_len(left.plain) - cell_len(title_text.plain) - right = Text(characters * (side_width // chars_len + 1)) - right.truncate(right_length) - rule_text.append(left.plain + " ", self.style) - rule_text.append(title_text) - rule_text.append(" " + right.plain, self.style) - elif self.align == "left": - title_text.truncate(truncate_width, overflow="ellipsis") - rule_text.append(title_text) - rule_text.append(" ") - rule_text.append(characters * (width - rule_text.cell_len), self.style) - elif self.align == "right": - title_text.truncate(truncate_width, overflow="ellipsis") - rule_text.append(characters * (width - title_text.cell_len - 1), self.style) - rule_text.append(" ") - rule_text.append(title_text) - - rule_text.plain = set_cell_size(rule_text.plain, width) - yield rule_text - - def _rule_line(self, chars_len: int, width: int) -> Text: - rule_text = Text(self.characters * ((width // chars_len) + 1), self.style) - rule_text.truncate(width) - rule_text.plain = set_cell_size(rule_text.plain, width) - return rule_text - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return Measurement(1, 1) - - -if __name__ == "__main__": # pragma: no cover - import sys - - from pip._vendor.rich.console import Console - - try: - text = sys.argv[1] - except IndexError: - text = "Hello, World" - console = Console() - console.print(Rule(title=text)) - - console = Console() - console.print(Rule("foo"), width=4) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/scope.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/scope.py deleted file mode 100644 index c9d134c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/scope.py +++ /dev/null @@ -1,86 +0,0 @@ -from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, Optional, Tuple - -from .highlighter import ReprHighlighter -from .panel import Panel -from .pretty import Pretty -from .table import Table -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import ConsoleRenderable - - -def render_scope( - scope: "Mapping[str, Any]", - *, - title: Optional[TextType] = None, - sort_keys: bool = True, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, -) -> "ConsoleRenderable": - """Render python variables in a given scope. - - Args: - scope (Mapping): A mapping containing variable names and values. - title (str, optional): Optional title. Defaults to None. - sort_keys (bool, optional): Enable sorting of items. Defaults to True. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - - Returns: - ConsoleRenderable: A renderable object. - """ - highlighter = ReprHighlighter() - items_table = Table.grid(padding=(0, 1), expand=False) - items_table.add_column(justify="right") - - def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]: - """Sort special variables first, then alphabetically.""" - key, _ = item - return (not key.startswith("__"), key.lower()) - - items = sorted(scope.items(), key=sort_items) if sort_keys else scope.items() - for key, value in items: - key_text = Text.assemble( - (key, "scope.key.special" if key.startswith("__") else "scope.key"), - (" =", "scope.equals"), - ) - items_table.add_row( - key_text, - Pretty( - value, - highlighter=highlighter, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - ), - ) - return Panel.fit( - items_table, - title=title, - border_style="scope.border", - padding=(0, 1), - ) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - print() - - def test(foo: float, bar: float) -> None: - list_of_things = [1, 2, 3, None, 4, True, False, "Hello World"] - dict_of_things = { - "version": "1.1", - "method": "confirmFruitPurchase", - "params": [["apple", "orange", "mangoes", "pomelo"], 1.123], - "id": "194521489", - } - print(render_scope(locals(), title="[i]locals", sort_keys=False)) - - test(20.3423, 3.1427) - print() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/screen.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/screen.py deleted file mode 100644 index 7f416e1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/screen.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import Optional, TYPE_CHECKING - -from .segment import Segment -from .style import StyleType -from ._loop import loop_last - - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - RenderResult, - RenderableType, - Group, - ) - - -class Screen: - """A renderable that fills the terminal screen and crops excess. - - Args: - renderable (RenderableType): Child renderable. - style (StyleType, optional): Optional background style. Defaults to None. - """ - - renderable: "RenderableType" - - def __init__( - self, - *renderables: "RenderableType", - style: Optional[StyleType] = None, - application_mode: bool = False, - ) -> None: - from pip._vendor.rich.console import Group - - self.renderable = Group(*renderables) - self.style = style - self.application_mode = application_mode - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - width, height = options.size - style = console.get_style(self.style) if self.style else None - render_options = options.update(width=width, height=height) - lines = console.render_lines( - self.renderable or "", render_options, style=style, pad=True - ) - lines = Segment.set_shape(lines, width, height, style=style) - new_line = Segment("\n\r") if self.application_mode else Segment.line() - for last, line in loop_last(lines): - yield from line - if not last: - yield new_line diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/segment.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/segment.py deleted file mode 100644 index 4b5f997..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/segment.py +++ /dev/null @@ -1,752 +0,0 @@ -from enum import IntEnum -from functools import lru_cache -from itertools import filterfalse -from logging import getLogger -from operator import attrgetter -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Type, - Union, -) - -from .cells import ( - _is_single_cell_widths, - cached_cell_len, - cell_len, - get_character_cell_size, - set_cell_size, -) -from .repr import Result, rich_repr -from .style import Style - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - -log = getLogger("rich") - - -class ControlType(IntEnum): - """Non-printable control codes which typically translate to ANSI codes.""" - - BELL = 1 - CARRIAGE_RETURN = 2 - HOME = 3 - CLEAR = 4 - SHOW_CURSOR = 5 - HIDE_CURSOR = 6 - ENABLE_ALT_SCREEN = 7 - DISABLE_ALT_SCREEN = 8 - CURSOR_UP = 9 - CURSOR_DOWN = 10 - CURSOR_FORWARD = 11 - CURSOR_BACKWARD = 12 - CURSOR_MOVE_TO_COLUMN = 13 - CURSOR_MOVE_TO = 14 - ERASE_IN_LINE = 15 - SET_WINDOW_TITLE = 16 - - -ControlCode = Union[ - Tuple[ControlType], - Tuple[ControlType, Union[int, str]], - Tuple[ControlType, int, int], -] - - -@rich_repr() -class Segment(NamedTuple): - """A piece of text with associated style. Segments are produced by the Console render process and - are ultimately converted in to strings to be written to the terminal. - - Args: - text (str): A piece of text. - style (:class:`~rich.style.Style`, optional): An optional style to apply to the text. - control (Tuple[ControlCode], optional): Optional sequence of control codes. - - Attributes: - cell_length (int): The cell length of this Segment. - """ - - text: str - style: Optional[Style] = None - control: Optional[Sequence[ControlCode]] = None - - @property - def cell_length(self) -> int: - """The number of terminal cells required to display self.text. - - Returns: - int: A number of cells. - """ - text, _style, control = self - return 0 if control else cell_len(text) - - def __rich_repr__(self) -> Result: - yield self.text - if self.control is None: - if self.style is not None: - yield self.style - else: - yield self.style - yield self.control - - def __bool__(self) -> bool: - """Check if the segment contains text.""" - return bool(self.text) - - @property - def is_control(self) -> bool: - """Check if the segment contains control codes.""" - return self.control is not None - - @classmethod - @lru_cache(1024 * 16) - def _split_cells(cls, segment: "Segment", cut: int) -> Tuple["Segment", "Segment"]: - """Split a segment in to two at a given cell position. - - Note that splitting a double-width character, may result in that character turning - into two spaces. - - Args: - segment (Segment): A segment to split. - cut (int): A cell position to cut on. - - Returns: - A tuple of two segments. - """ - text, style, control = segment - _Segment = Segment - cell_length = segment.cell_length - if cut >= cell_length: - return segment, _Segment("", style, control) - - cell_size = get_character_cell_size - - pos = int((cut / cell_length) * len(text)) - - while True: - before = text[:pos] - cell_pos = cell_len(before) - out_by = cell_pos - cut - if not out_by: - return ( - _Segment(before, style, control), - _Segment(text[pos:], style, control), - ) - if out_by == -1 and cell_size(text[pos]) == 2: - return ( - _Segment(text[:pos] + " ", style, control), - _Segment(" " + text[pos + 1 :], style, control), - ) - if out_by == +1 and cell_size(text[pos - 1]) == 2: - return ( - _Segment(text[: pos - 1] + " ", style, control), - _Segment(" " + text[pos:], style, control), - ) - if cell_pos < cut: - pos += 1 - else: - pos -= 1 - - def split_cells(self, cut: int) -> Tuple["Segment", "Segment"]: - """Split segment in to two segments at the specified column. - - If the cut point falls in the middle of a 2-cell wide character then it is replaced - by two spaces, to preserve the display width of the parent segment. - - Args: - cut (int): Offset within the segment to cut. - - Returns: - Tuple[Segment, Segment]: Two segments. - """ - text, style, control = self - assert cut >= 0 - - if _is_single_cell_widths(text): - # Fast path with all 1 cell characters - if cut >= len(text): - return self, Segment("", style, control) - return ( - Segment(text[:cut], style, control), - Segment(text[cut:], style, control), - ) - - return self._split_cells(self, cut) - - @classmethod - def line(cls) -> "Segment": - """Make a new line segment.""" - return cls("\n") - - @classmethod - def apply_style( - cls, - segments: Iterable["Segment"], - style: Optional[Style] = None, - post_style: Optional[Style] = None, - ) -> Iterable["Segment"]: - """Apply style(s) to an iterable of segments. - - Returns an iterable of segments where the style is replaced by ``style + segment.style + post_style``. - - Args: - segments (Iterable[Segment]): Segments to process. - style (Style, optional): Base style. Defaults to None. - post_style (Style, optional): Style to apply on top of segment style. Defaults to None. - - Returns: - Iterable[Segments]: A new iterable of segments (possibly the same iterable). - """ - result_segments = segments - if style: - apply = style.__add__ - result_segments = ( - cls(text, None if control else apply(_style), control) - for text, _style, control in result_segments - ) - if post_style: - result_segments = ( - cls( - text, - ( - None - if control - else (_style + post_style if _style else post_style) - ), - control, - ) - for text, _style, control in result_segments - ) - return result_segments - - @classmethod - def filter_control( - cls, segments: Iterable["Segment"], is_control: bool = False - ) -> Iterable["Segment"]: - """Filter segments by ``is_control`` attribute. - - Args: - segments (Iterable[Segment]): An iterable of Segment instances. - is_control (bool, optional): is_control flag to match in search. - - Returns: - Iterable[Segment]: And iterable of Segment instances. - - """ - if is_control: - return filter(attrgetter("control"), segments) - else: - return filterfalse(attrgetter("control"), segments) - - @classmethod - def split_lines(cls, segments: Iterable["Segment"]) -> Iterable[List["Segment"]]: - """Split a sequence of segments in to a list of lines. - - Args: - segments (Iterable[Segment]): Segments potentially containing line feeds. - - Yields: - Iterable[List[Segment]]: Iterable of segment lists, one per line. - """ - line: List[Segment] = [] - append = line.append - - for segment in segments: - if "\n" in segment.text and not segment.control: - text, style, _ = segment - while text: - _text, new_line, text = text.partition("\n") - if _text: - append(cls(_text, style)) - if new_line: - yield line - line = [] - append = line.append - else: - append(segment) - if line: - yield line - - @classmethod - def split_and_crop_lines( - cls, - segments: Iterable["Segment"], - length: int, - style: Optional[Style] = None, - pad: bool = True, - include_new_lines: bool = True, - ) -> Iterable[List["Segment"]]: - """Split segments in to lines, and crop lines greater than a given length. - - Args: - segments (Iterable[Segment]): An iterable of segments, probably - generated from console.render. - length (int): Desired line length. - style (Style, optional): Style to use for any padding. - pad (bool): Enable padding of lines that are less than `length`. - - Returns: - Iterable[List[Segment]]: An iterable of lines of segments. - """ - line: List[Segment] = [] - append = line.append - - adjust_line_length = cls.adjust_line_length - new_line_segment = cls("\n") - - for segment in segments: - if "\n" in segment.text and not segment.control: - text, segment_style, _ = segment - while text: - _text, new_line, text = text.partition("\n") - if _text: - append(cls(_text, segment_style)) - if new_line: - cropped_line = adjust_line_length( - line, length, style=style, pad=pad - ) - if include_new_lines: - cropped_line.append(new_line_segment) - yield cropped_line - line.clear() - else: - append(segment) - if line: - yield adjust_line_length(line, length, style=style, pad=pad) - - @classmethod - def adjust_line_length( - cls, - line: List["Segment"], - length: int, - style: Optional[Style] = None, - pad: bool = True, - ) -> List["Segment"]: - """Adjust a line to a given width (cropping or padding as required). - - Args: - segments (Iterable[Segment]): A list of segments in a single line. - length (int): The desired width of the line. - style (Style, optional): The style of padding if used (space on the end). Defaults to None. - pad (bool, optional): Pad lines with spaces if they are shorter than `length`. Defaults to True. - - Returns: - List[Segment]: A line of segments with the desired length. - """ - line_length = sum(segment.cell_length for segment in line) - new_line: List[Segment] - - if line_length < length: - if pad: - new_line = line + [cls(" " * (length - line_length), style)] - else: - new_line = line[:] - elif line_length > length: - new_line = [] - append = new_line.append - line_length = 0 - for segment in line: - segment_length = segment.cell_length - if line_length + segment_length < length or segment.control: - append(segment) - line_length += segment_length - else: - text, segment_style, _ = segment - text = set_cell_size(text, length - line_length) - append(cls(text, segment_style)) - break - else: - new_line = line[:] - return new_line - - @classmethod - def get_line_length(cls, line: List["Segment"]) -> int: - """Get the length of list of segments. - - Args: - line (List[Segment]): A line encoded as a list of Segments (assumes no '\\\\n' characters), - - Returns: - int: The length of the line. - """ - _cell_len = cell_len - return sum(_cell_len(text) for text, style, control in line if not control) - - @classmethod - def get_shape(cls, lines: List[List["Segment"]]) -> Tuple[int, int]: - """Get the shape (enclosing rectangle) of a list of lines. - - Args: - lines (List[List[Segment]]): A list of lines (no '\\\\n' characters). - - Returns: - Tuple[int, int]: Width and height in characters. - """ - get_line_length = cls.get_line_length - max_width = max(get_line_length(line) for line in lines) if lines else 0 - return (max_width, len(lines)) - - @classmethod - def set_shape( - cls, - lines: List[List["Segment"]], - width: int, - height: Optional[int] = None, - style: Optional[Style] = None, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Set the shape of a list of lines (enclosing rectangle). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style, optional): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - _height = height or len(lines) - - blank = ( - [cls(" " * width + "\n", style)] if new_lines else [cls(" " * width, style)] - ) - - adjust_line_length = cls.adjust_line_length - shaped_lines = lines[:_height] - shaped_lines[:] = [ - adjust_line_length(line, width, style=style) for line in lines - ] - if len(shaped_lines) < _height: - shaped_lines.extend([blank] * (_height - len(shaped_lines))) - return shaped_lines - - @classmethod - def align_top( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns lines to top (adds extra lines to bottom as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - lines = lines + [[blank]] * extra_lines - return lines - - @classmethod - def align_bottom( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns render to bottom (adds extra lines above as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. Defaults to None. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - lines = [[blank]] * extra_lines + lines - return lines - - @classmethod - def align_middle( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns lines to middle (adds extra lines to above and below as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - top_lines = extra_lines // 2 - bottom_lines = extra_lines - top_lines - lines = [[blank]] * top_lines + lines + [[blank]] * bottom_lines - return lines - - @classmethod - def simplify(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Simplify an iterable of segments by combining contiguous segments with the same style. - - Args: - segments (Iterable[Segment]): An iterable of segments. - - Returns: - Iterable[Segment]: A possibly smaller iterable of segments that will render the same way. - """ - iter_segments = iter(segments) - try: - last_segment = next(iter_segments) - except StopIteration: - return - - _Segment = Segment - for segment in iter_segments: - if last_segment.style == segment.style and not segment.control: - last_segment = _Segment( - last_segment.text + segment.text, last_segment.style - ) - else: - yield last_segment - last_segment = segment - yield last_segment - - @classmethod - def strip_links(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all links from an iterable of styles. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with link removed. - """ - for segment in segments: - if segment.control or segment.style is None: - yield segment - else: - text, style, _control = segment - yield cls(text, style.update_link(None) if style else None) - - @classmethod - def strip_styles(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all styles from an iterable of segments. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with styles replace with None - """ - for text, _style, control in segments: - yield cls(text, None, control) - - @classmethod - def remove_color(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all color from an iterable of segments. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with colorless style. - """ - - cache: Dict[Style, Style] = {} - for text, style, control in segments: - if style: - colorless_style = cache.get(style) - if colorless_style is None: - colorless_style = style.without_color - cache[style] = colorless_style - yield cls(text, colorless_style, control) - else: - yield cls(text, None, control) - - @classmethod - def divide( - cls, segments: Iterable["Segment"], cuts: Iterable[int] - ) -> Iterable[List["Segment"]]: - """Divides an iterable of segments in to portions. - - Args: - cuts (Iterable[int]): Cell positions where to divide. - - Yields: - [Iterable[List[Segment]]]: An iterable of Segments in List. - """ - split_segments: List["Segment"] = [] - add_segment = split_segments.append - - iter_cuts = iter(cuts) - - while True: - cut = next(iter_cuts, -1) - if cut == -1: - return - if cut != 0: - break - yield [] - pos = 0 - - segments_clear = split_segments.clear - segments_copy = split_segments.copy - - _cell_len = cached_cell_len - for segment in segments: - text, _style, control = segment - while text: - end_pos = pos if control else pos + _cell_len(text) - if end_pos < cut: - add_segment(segment) - pos = end_pos - break - - if end_pos == cut: - add_segment(segment) - yield segments_copy() - segments_clear() - pos = end_pos - - cut = next(iter_cuts, -1) - if cut == -1: - if split_segments: - yield segments_copy() - return - - break - - else: - before, segment = segment.split_cells(cut - pos) - text, _style, control = segment - add_segment(before) - yield segments_copy() - segments_clear() - pos = cut - - cut = next(iter_cuts, -1) - if cut == -1: - if split_segments: - yield segments_copy() - return - - yield segments_copy() - - -class Segments: - """A simple renderable to render an iterable of segments. This class may be useful if - you want to print segments outside of a __rich_console__ method. - - Args: - segments (Iterable[Segment]): An iterable of segments. - new_lines (bool, optional): Add new lines between segments. Defaults to False. - """ - - def __init__(self, segments: Iterable[Segment], new_lines: bool = False) -> None: - self.segments = list(segments) - self.new_lines = new_lines - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.new_lines: - line = Segment.line() - for segment in self.segments: - yield segment - yield line - else: - yield from self.segments - - -class SegmentLines: - def __init__(self, lines: Iterable[List[Segment]], new_lines: bool = False) -> None: - """A simple renderable containing a number of lines of segments. May be used as an intermediate - in rendering process. - - Args: - lines (Iterable[List[Segment]]): Lists of segments forming lines. - new_lines (bool, optional): Insert new lines after each line. Defaults to False. - """ - self.lines = list(lines) - self.new_lines = new_lines - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.new_lines: - new_line = Segment.line() - for line in self.lines: - yield from line - yield new_line - else: - for line in self.lines: - yield from line - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - from pip._vendor.rich.syntax import Syntax - from pip._vendor.rich.text import Text - - code = """from rich.console import Console -console = Console() -text = Text.from_markup("Hello, [bold magenta]World[/]!") -console.print(text)""" - - text = Text.from_markup("Hello, [bold magenta]World[/]!") - - console = Console() - - console.rule("rich.Segment") - console.print( - "A Segment is the last step in the Rich render process before generating text with ANSI codes." - ) - console.print("\nConsider the following code:\n") - console.print(Syntax(code, "python", line_numbers=True)) - console.print() - console.print( - "When you call [b]print()[/b], Rich [i]renders[/i] the object in to the following:\n" - ) - fragments = list(console.render(text)) - console.print(fragments) - console.print() - console.print("The Segments are then processed to produce the following output:\n") - console.print(text) - console.print( - "\nYou will only need to know this if you are implementing your own Rich renderables." - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py deleted file mode 100644 index 70570b6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py +++ /dev/null @@ -1,138 +0,0 @@ -from typing import cast, List, Optional, TYPE_CHECKING, Union - -from ._spinners import SPINNERS -from .measure import Measurement -from .table import Table -from .text import Text - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult, RenderableType - from .style import StyleType - - -class Spinner: - """A spinner animation. - - Args: - name (str): Name of spinner (run python -m rich.spinner). - text (RenderableType, optional): A renderable to display at the right of the spinner (str or Text typically). Defaults to "". - style (StyleType, optional): Style for spinner animation. Defaults to None. - speed (float, optional): Speed factor for animation. Defaults to 1.0. - - Raises: - KeyError: If name isn't one of the supported spinner animations. - """ - - def __init__( - self, - name: str, - text: "RenderableType" = "", - *, - style: Optional["StyleType"] = None, - speed: float = 1.0, - ) -> None: - try: - spinner = SPINNERS[name] - except KeyError: - raise KeyError(f"no spinner called {name!r}") - self.text: "Union[RenderableType, Text]" = ( - Text.from_markup(text) if isinstance(text, str) else text - ) - self.name = name - self.frames = cast(List[str], spinner["frames"])[:] - self.interval = cast(float, spinner["interval"]) - self.start_time: Optional[float] = None - self.style = style - self.speed = speed - self.frame_no_offset: float = 0.0 - self._update_speed = 0.0 - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - yield self.render(console.get_time()) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - text = self.render(0) - return Measurement.get(console, options, text) - - def render(self, time: float) -> "RenderableType": - """Render the spinner for a given time. - - Args: - time (float): Time in seconds. - - Returns: - RenderableType: A renderable containing animation frame. - """ - if self.start_time is None: - self.start_time = time - - frame_no = ((time - self.start_time) * self.speed) / ( - self.interval / 1000.0 - ) + self.frame_no_offset - frame = Text( - self.frames[int(frame_no) % len(self.frames)], style=self.style or "" - ) - - if self._update_speed: - self.frame_no_offset = frame_no - self.start_time = time - self.speed = self._update_speed - self._update_speed = 0.0 - - if not self.text: - return frame - elif isinstance(self.text, (str, Text)): - return Text.assemble(frame, " ", self.text) - else: - table = Table.grid(padding=1) - table.add_row(frame, self.text) - return table - - def update( - self, - *, - text: "RenderableType" = "", - style: Optional["StyleType"] = None, - speed: Optional[float] = None, - ) -> None: - """Updates attributes of a spinner after it has been started. - - Args: - text (RenderableType, optional): A renderable to display at the right of the spinner (str or Text typically). Defaults to "". - style (StyleType, optional): Style for spinner animation. Defaults to None. - speed (float, optional): Speed factor for animation. Defaults to None. - """ - if text: - self.text = Text.from_markup(text) if isinstance(text, str) else text - if style: - self.style = style - if speed: - self._update_speed = speed - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - from .columns import Columns - from .panel import Panel - from .live import Live - - all_spinners = Columns( - [ - Spinner(spinner_name, text=Text(repr(spinner_name), style="green")) - for spinner_name in sorted(SPINNERS.keys()) - ], - column_first=True, - expand=True, - ) - - with Live( - Panel(all_spinners, title="Spinners", border_style="blue"), - refresh_per_second=20, - ) as live: - while True: - sleep(0.1) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/status.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/status.py deleted file mode 100644 index 6574483..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/status.py +++ /dev/null @@ -1,131 +0,0 @@ -from types import TracebackType -from typing import Optional, Type - -from .console import Console, RenderableType -from .jupyter import JupyterMixin -from .live import Live -from .spinner import Spinner -from .style import StyleType - - -class Status(JupyterMixin): - """Displays a status indicator with a 'spinner' animation. - - Args: - status (RenderableType): A status renderable (str or Text typically). - console (Console, optional): Console instance to use, or None for global console. Defaults to None. - spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". - spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". - speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. - refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. - """ - - def __init__( - self, - status: RenderableType, - *, - console: Optional[Console] = None, - spinner: str = "dots", - spinner_style: StyleType = "status.spinner", - speed: float = 1.0, - refresh_per_second: float = 12.5, - ): - self.status = status - self.spinner_style = spinner_style - self.speed = speed - self._spinner = Spinner(spinner, text=status, style=spinner_style, speed=speed) - self._live = Live( - self.renderable, - console=console, - refresh_per_second=refresh_per_second, - transient=True, - ) - - @property - def renderable(self) -> Spinner: - return self._spinner - - @property - def console(self) -> "Console": - """Get the Console used by the Status objects.""" - return self._live.console - - def update( - self, - status: Optional[RenderableType] = None, - *, - spinner: Optional[str] = None, - spinner_style: Optional[StyleType] = None, - speed: Optional[float] = None, - ) -> None: - """Update status. - - Args: - status (Optional[RenderableType], optional): New status renderable or None for no change. Defaults to None. - spinner (Optional[str], optional): New spinner or None for no change. Defaults to None. - spinner_style (Optional[StyleType], optional): New spinner style or None for no change. Defaults to None. - speed (Optional[float], optional): Speed factor for spinner animation or None for no change. Defaults to None. - """ - if status is not None: - self.status = status - if spinner_style is not None: - self.spinner_style = spinner_style - if speed is not None: - self.speed = speed - if spinner is not None: - self._spinner = Spinner( - spinner, text=self.status, style=self.spinner_style, speed=self.speed - ) - self._live.update(self.renderable, refresh=True) - else: - self._spinner.update( - text=self.status, style=self.spinner_style, speed=self.speed - ) - - def start(self) -> None: - """Start the status animation.""" - self._live.start() - - def stop(self) -> None: - """Stop the spinner animation.""" - self._live.stop() - - def __rich__(self) -> RenderableType: - return self.renderable - - def __enter__(self) -> "Status": - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - from .console import Console - - console = Console() - with console.status("[magenta]Covid detector booting up") as status: - sleep(3) - console.log("Importing advanced AI") - sleep(3) - console.log("Advanced Covid AI Ready") - sleep(3) - status.update(status="[bold blue] Scanning for Covid", spinner="earth") - sleep(3) - console.log("Found 10,000,000,000 copies of Covid32.exe") - sleep(3) - status.update( - status="[bold red]Moving Covid32.exe to Trash", - spinner="bouncingBall", - spinner_style="yellow", - ) - sleep(5) - console.print("[bold green]Covid deleted successfully") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/style.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/style.py deleted file mode 100644 index 262fd6e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/style.py +++ /dev/null @@ -1,796 +0,0 @@ -import sys -from functools import lru_cache -from marshal import dumps, loads -from random import randint -from typing import Any, Dict, Iterable, List, Optional, Type, Union, cast - -from . import errors -from .color import Color, ColorParseError, ColorSystem, blend_rgb -from .repr import Result, rich_repr -from .terminal_theme import DEFAULT_TERMINAL_THEME, TerminalTheme - -# Style instances and style definitions are often interchangeable -StyleType = Union[str, "Style"] - - -class _Bit: - """A descriptor to get/set a style attribute bit.""" - - __slots__ = ["bit"] - - def __init__(self, bit_no: int) -> None: - self.bit = 1 << bit_no - - def __get__(self, obj: "Style", objtype: Type["Style"]) -> Optional[bool]: - if obj._set_attributes & self.bit: - return obj._attributes & self.bit != 0 - return None - - -@rich_repr -class Style: - """A terminal style. - - A terminal style consists of a color (`color`), a background color (`bgcolor`), and a number of attributes, such - as bold, italic etc. The attributes have 3 states: they can either be on - (``True``), off (``False``), or not set (``None``). - - Args: - color (Union[Color, str], optional): Color of terminal text. Defaults to None. - bgcolor (Union[Color, str], optional): Color of terminal background. Defaults to None. - bold (bool, optional): Enable bold text. Defaults to None. - dim (bool, optional): Enable dim text. Defaults to None. - italic (bool, optional): Enable italic text. Defaults to None. - underline (bool, optional): Enable underlined text. Defaults to None. - blink (bool, optional): Enabled blinking text. Defaults to None. - blink2 (bool, optional): Enable fast blinking text. Defaults to None. - reverse (bool, optional): Enabled reverse text. Defaults to None. - conceal (bool, optional): Enable concealed text. Defaults to None. - strike (bool, optional): Enable strikethrough text. Defaults to None. - underline2 (bool, optional): Enable doubly underlined text. Defaults to None. - frame (bool, optional): Enable framed text. Defaults to None. - encircle (bool, optional): Enable encircled text. Defaults to None. - overline (bool, optional): Enable overlined text. Defaults to None. - link (str, link): Link URL. Defaults to None. - - """ - - _color: Optional[Color] - _bgcolor: Optional[Color] - _attributes: int - _set_attributes: int - _hash: Optional[int] - _null: bool - _meta: Optional[bytes] - - __slots__ = [ - "_color", - "_bgcolor", - "_attributes", - "_set_attributes", - "_link", - "_link_id", - "_ansi", - "_style_definition", - "_hash", - "_null", - "_meta", - ] - - # maps bits on to SGR parameter - _style_map = { - 0: "1", - 1: "2", - 2: "3", - 3: "4", - 4: "5", - 5: "6", - 6: "7", - 7: "8", - 8: "9", - 9: "21", - 10: "51", - 11: "52", - 12: "53", - } - - STYLE_ATTRIBUTES = { - "dim": "dim", - "d": "dim", - "bold": "bold", - "b": "bold", - "italic": "italic", - "i": "italic", - "underline": "underline", - "u": "underline", - "blink": "blink", - "blink2": "blink2", - "reverse": "reverse", - "r": "reverse", - "conceal": "conceal", - "c": "conceal", - "strike": "strike", - "s": "strike", - "underline2": "underline2", - "uu": "underline2", - "frame": "frame", - "encircle": "encircle", - "overline": "overline", - "o": "overline", - } - - def __init__( - self, - *, - color: Optional[Union[Color, str]] = None, - bgcolor: Optional[Union[Color, str]] = None, - bold: Optional[bool] = None, - dim: Optional[bool] = None, - italic: Optional[bool] = None, - underline: Optional[bool] = None, - blink: Optional[bool] = None, - blink2: Optional[bool] = None, - reverse: Optional[bool] = None, - conceal: Optional[bool] = None, - strike: Optional[bool] = None, - underline2: Optional[bool] = None, - frame: Optional[bool] = None, - encircle: Optional[bool] = None, - overline: Optional[bool] = None, - link: Optional[str] = None, - meta: Optional[Dict[str, Any]] = None, - ): - self._ansi: Optional[str] = None - self._style_definition: Optional[str] = None - - def _make_color(color: Union[Color, str]) -> Color: - return color if isinstance(color, Color) else Color.parse(color) - - self._color = None if color is None else _make_color(color) - self._bgcolor = None if bgcolor is None else _make_color(bgcolor) - self._set_attributes = sum( - ( - bold is not None, - dim is not None and 2, - italic is not None and 4, - underline is not None and 8, - blink is not None and 16, - blink2 is not None and 32, - reverse is not None and 64, - conceal is not None and 128, - strike is not None and 256, - underline2 is not None and 512, - frame is not None and 1024, - encircle is not None and 2048, - overline is not None and 4096, - ) - ) - self._attributes = ( - sum( - ( - bold and 1 or 0, - dim and 2 or 0, - italic and 4 or 0, - underline and 8 or 0, - blink and 16 or 0, - blink2 and 32 or 0, - reverse and 64 or 0, - conceal and 128 or 0, - strike and 256 or 0, - underline2 and 512 or 0, - frame and 1024 or 0, - encircle and 2048 or 0, - overline and 4096 or 0, - ) - ) - if self._set_attributes - else 0 - ) - - self._link = link - self._meta = None if meta is None else dumps(meta) - self._link_id = ( - f"{randint(0, 999999)}{hash(self._meta)}" if (link or meta) else "" - ) - self._hash: Optional[int] = None - self._null = not (self._set_attributes or color or bgcolor or link or meta) - - @classmethod - def null(cls) -> "Style": - """Create an 'null' style, equivalent to Style(), but more performant.""" - return NULL_STYLE - - @classmethod - def from_color( - cls, color: Optional[Color] = None, bgcolor: Optional[Color] = None - ) -> "Style": - """Create a new style with colors and no attributes. - - Returns: - color (Optional[Color]): A (foreground) color, or None for no color. Defaults to None. - bgcolor (Optional[Color]): A (background) color, or None for no color. Defaults to None. - """ - style: Style = cls.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = color - style._bgcolor = bgcolor - style._set_attributes = 0 - style._attributes = 0 - style._link = None - style._link_id = "" - style._meta = None - style._null = not (color or bgcolor) - style._hash = None - return style - - @classmethod - def from_meta(cls, meta: Optional[Dict[str, Any]]) -> "Style": - """Create a new style with meta data. - - Returns: - meta (Optional[Dict[str, Any]]): A dictionary of meta data. Defaults to None. - """ - style: Style = cls.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = None - style._bgcolor = None - style._set_attributes = 0 - style._attributes = 0 - style._link = None - style._meta = dumps(meta) - style._link_id = f"{randint(0, 999999)}{hash(style._meta)}" - style._hash = None - style._null = not (meta) - return style - - @classmethod - def on(cls, meta: Optional[Dict[str, Any]] = None, **handlers: Any) -> "Style": - """Create a blank style with meta information. - - Example: - style = Style.on(click=self.on_click) - - Args: - meta (Optional[Dict[str, Any]], optional): An optional dict of meta information. - **handlers (Any): Keyword arguments are translated in to handlers. - - Returns: - Style: A Style with meta information attached. - """ - meta = {} if meta is None else meta - meta.update({f"@{key}": value for key, value in handlers.items()}) - return cls.from_meta(meta) - - bold = _Bit(0) - dim = _Bit(1) - italic = _Bit(2) - underline = _Bit(3) - blink = _Bit(4) - blink2 = _Bit(5) - reverse = _Bit(6) - conceal = _Bit(7) - strike = _Bit(8) - underline2 = _Bit(9) - frame = _Bit(10) - encircle = _Bit(11) - overline = _Bit(12) - - @property - def link_id(self) -> str: - """Get a link id, used in ansi code for links.""" - return self._link_id - - def __str__(self) -> str: - """Re-generate style definition from attributes.""" - if self._style_definition is None: - attributes: List[str] = [] - append = attributes.append - bits = self._set_attributes - if bits & 0b0000000001111: - if bits & 1: - append("bold" if self.bold else "not bold") - if bits & (1 << 1): - append("dim" if self.dim else "not dim") - if bits & (1 << 2): - append("italic" if self.italic else "not italic") - if bits & (1 << 3): - append("underline" if self.underline else "not underline") - if bits & 0b0000111110000: - if bits & (1 << 4): - append("blink" if self.blink else "not blink") - if bits & (1 << 5): - append("blink2" if self.blink2 else "not blink2") - if bits & (1 << 6): - append("reverse" if self.reverse else "not reverse") - if bits & (1 << 7): - append("conceal" if self.conceal else "not conceal") - if bits & (1 << 8): - append("strike" if self.strike else "not strike") - if bits & 0b1111000000000: - if bits & (1 << 9): - append("underline2" if self.underline2 else "not underline2") - if bits & (1 << 10): - append("frame" if self.frame else "not frame") - if bits & (1 << 11): - append("encircle" if self.encircle else "not encircle") - if bits & (1 << 12): - append("overline" if self.overline else "not overline") - if self._color is not None: - append(self._color.name) - if self._bgcolor is not None: - append("on") - append(self._bgcolor.name) - if self._link: - append("link") - append(self._link) - self._style_definition = " ".join(attributes) or "none" - return self._style_definition - - def __bool__(self) -> bool: - """A Style is false if it has no attributes, colors, or links.""" - return not self._null - - def _make_ansi_codes(self, color_system: ColorSystem) -> str: - """Generate ANSI codes for this style. - - Args: - color_system (ColorSystem): Color system. - - Returns: - str: String containing codes. - """ - - if self._ansi is None: - sgr: List[str] = [] - append = sgr.append - _style_map = self._style_map - attributes = self._attributes & self._set_attributes - if attributes: - if attributes & 1: - append(_style_map[0]) - if attributes & 2: - append(_style_map[1]) - if attributes & 4: - append(_style_map[2]) - if attributes & 8: - append(_style_map[3]) - if attributes & 0b0000111110000: - for bit in range(4, 9): - if attributes & (1 << bit): - append(_style_map[bit]) - if attributes & 0b1111000000000: - for bit in range(9, 13): - if attributes & (1 << bit): - append(_style_map[bit]) - if self._color is not None: - sgr.extend(self._color.downgrade(color_system).get_ansi_codes()) - if self._bgcolor is not None: - sgr.extend( - self._bgcolor.downgrade(color_system).get_ansi_codes( - foreground=False - ) - ) - self._ansi = ";".join(sgr) - return self._ansi - - @classmethod - @lru_cache(maxsize=1024) - def normalize(cls, style: str) -> str: - """Normalize a style definition so that styles with the same effect have the same string - representation. - - Args: - style (str): A style definition. - - Returns: - str: Normal form of style definition. - """ - try: - return str(cls.parse(style)) - except errors.StyleSyntaxError: - return style.strip().lower() - - @classmethod - def pick_first(cls, *values: Optional[StyleType]) -> StyleType: - """Pick first non-None style.""" - for value in values: - if value is not None: - return value - raise ValueError("expected at least one non-None style") - - def __rich_repr__(self) -> Result: - yield "color", self.color, None - yield "bgcolor", self.bgcolor, None - yield "bold", self.bold, None, - yield "dim", self.dim, None, - yield "italic", self.italic, None - yield "underline", self.underline, None, - yield "blink", self.blink, None - yield "blink2", self.blink2, None - yield "reverse", self.reverse, None - yield "conceal", self.conceal, None - yield "strike", self.strike, None - yield "underline2", self.underline2, None - yield "frame", self.frame, None - yield "encircle", self.encircle, None - yield "link", self.link, None - if self._meta: - yield "meta", self.meta - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Style): - return NotImplemented - return self.__hash__() == other.__hash__() - - def __ne__(self, other: Any) -> bool: - if not isinstance(other, Style): - return NotImplemented - return self.__hash__() != other.__hash__() - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - self._hash = hash( - ( - self._color, - self._bgcolor, - self._attributes, - self._set_attributes, - self._link, - self._meta, - ) - ) - return self._hash - - @property - def color(self) -> Optional[Color]: - """The foreground color or None if it is not set.""" - return self._color - - @property - def bgcolor(self) -> Optional[Color]: - """The background color or None if it is not set.""" - return self._bgcolor - - @property - def link(self) -> Optional[str]: - """Link text, if set.""" - return self._link - - @property - def transparent_background(self) -> bool: - """Check if the style specified a transparent background.""" - return self.bgcolor is None or self.bgcolor.is_default - - @property - def background_style(self) -> "Style": - """A Style with background only.""" - return Style(bgcolor=self.bgcolor) - - @property - def meta(self) -> Dict[str, Any]: - """Get meta information (can not be changed after construction).""" - return {} if self._meta is None else cast(Dict[str, Any], loads(self._meta)) - - @property - def without_color(self) -> "Style": - """Get a copy of the style with color removed.""" - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = None - style._bgcolor = None - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = self._link - style._link_id = f"{randint(0, 999999)}" if self._link else "" - style._null = False - style._meta = None - style._hash = None - return style - - @classmethod - @lru_cache(maxsize=4096) - def parse(cls, style_definition: str) -> "Style": - """Parse a style definition. - - Args: - style_definition (str): A string containing a style. - - Raises: - errors.StyleSyntaxError: If the style definition syntax is invalid. - - Returns: - `Style`: A Style instance. - """ - if style_definition.strip() == "none" or not style_definition: - return cls.null() - - STYLE_ATTRIBUTES = cls.STYLE_ATTRIBUTES - color: Optional[str] = None - bgcolor: Optional[str] = None - attributes: Dict[str, Optional[Any]] = {} - link: Optional[str] = None - - words = iter(style_definition.split()) - for original_word in words: - word = original_word.lower() - if word == "on": - word = next(words, "") - if not word: - raise errors.StyleSyntaxError("color expected after 'on'") - try: - Color.parse(word) is None - except ColorParseError as error: - raise errors.StyleSyntaxError( - f"unable to parse {word!r} as background color; {error}" - ) from None - bgcolor = word - - elif word == "not": - word = next(words, "") - attribute = STYLE_ATTRIBUTES.get(word) - if attribute is None: - raise errors.StyleSyntaxError( - f"expected style attribute after 'not', found {word!r}" - ) - attributes[attribute] = False - - elif word == "link": - word = next(words, "") - if not word: - raise errors.StyleSyntaxError("URL expected after 'link'") - link = word - - elif word in STYLE_ATTRIBUTES: - attributes[STYLE_ATTRIBUTES[word]] = True - - else: - try: - Color.parse(word) - except ColorParseError as error: - raise errors.StyleSyntaxError( - f"unable to parse {word!r} as color; {error}" - ) from None - color = word - style = Style(color=color, bgcolor=bgcolor, link=link, **attributes) - return style - - @lru_cache(maxsize=1024) - def get_html_style(self, theme: Optional[TerminalTheme] = None) -> str: - """Get a CSS style rule.""" - theme = theme or DEFAULT_TERMINAL_THEME - css: List[str] = [] - append = css.append - - color = self.color - bgcolor = self.bgcolor - if self.reverse: - color, bgcolor = bgcolor, color - if self.dim: - foreground_color = ( - theme.foreground_color if color is None else color.get_truecolor(theme) - ) - color = Color.from_triplet( - blend_rgb(foreground_color, theme.background_color, 0.5) - ) - if color is not None: - theme_color = color.get_truecolor(theme) - append(f"color: {theme_color.hex}") - append(f"text-decoration-color: {theme_color.hex}") - if bgcolor is not None: - theme_color = bgcolor.get_truecolor(theme, foreground=False) - append(f"background-color: {theme_color.hex}") - if self.bold: - append("font-weight: bold") - if self.italic: - append("font-style: italic") - if self.underline: - append("text-decoration: underline") - if self.strike: - append("text-decoration: line-through") - if self.overline: - append("text-decoration: overline") - return "; ".join(css) - - @classmethod - def combine(cls, styles: Iterable["Style"]) -> "Style": - """Combine styles and get result. - - Args: - styles (Iterable[Style]): Styles to combine. - - Returns: - Style: A new style instance. - """ - iter_styles = iter(styles) - return sum(iter_styles, next(iter_styles)) - - @classmethod - def chain(cls, *styles: "Style") -> "Style": - """Combine styles from positional argument in to a single style. - - Args: - *styles (Iterable[Style]): Styles to combine. - - Returns: - Style: A new style instance. - """ - iter_styles = iter(styles) - return sum(iter_styles, next(iter_styles)) - - def copy(self) -> "Style": - """Get a copy of this style. - - Returns: - Style: A new Style instance with identical attributes. - """ - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = self._link - style._link_id = f"{randint(0, 999999)}" if self._link else "" - style._hash = self._hash - style._null = False - style._meta = self._meta - return style - - @lru_cache(maxsize=128) - def clear_meta_and_links(self) -> "Style": - """Get a copy of this style with link and meta information removed. - - Returns: - Style: New style object. - """ - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = None - style._link_id = "" - style._hash = None - style._null = False - style._meta = None - return style - - def update_link(self, link: Optional[str] = None) -> "Style": - """Get a copy with a different value for link. - - Args: - link (str, optional): New value for link. Defaults to None. - - Returns: - Style: A new Style instance. - """ - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = link - style._link_id = f"{randint(0, 999999)}" if link else "" - style._hash = None - style._null = False - style._meta = self._meta - return style - - def render( - self, - text: str = "", - *, - color_system: Optional[ColorSystem] = ColorSystem.TRUECOLOR, - legacy_windows: bool = False, - ) -> str: - """Render the ANSI codes for the style. - - Args: - text (str, optional): A string to style. Defaults to "". - color_system (Optional[ColorSystem], optional): Color system to render to. Defaults to ColorSystem.TRUECOLOR. - - Returns: - str: A string containing ANSI style codes. - """ - if not text or color_system is None: - return text - attrs = self._ansi or self._make_ansi_codes(color_system) - rendered = f"\x1b[{attrs}m{text}\x1b[0m" if attrs else text - if self._link and not legacy_windows: - rendered = ( - f"\x1b]8;id={self._link_id};{self._link}\x1b\\{rendered}\x1b]8;;\x1b\\" - ) - return rendered - - def test(self, text: Optional[str] = None) -> None: - """Write text with style directly to terminal. - - This method is for testing purposes only. - - Args: - text (Optional[str], optional): Text to style or None for style name. - - """ - text = text or str(self) - sys.stdout.write(f"{self.render(text)}\n") - - @lru_cache(maxsize=1024) - def _add(self, style: Optional["Style"]) -> "Style": - if style is None or style._null: - return self - if self._null: - return style - new_style: Style = self.__new__(Style) - new_style._ansi = None - new_style._style_definition = None - new_style._color = style._color or self._color - new_style._bgcolor = style._bgcolor or self._bgcolor - new_style._attributes = (self._attributes & ~style._set_attributes) | ( - style._attributes & style._set_attributes - ) - new_style._set_attributes = self._set_attributes | style._set_attributes - new_style._link = style._link or self._link - new_style._link_id = style._link_id or self._link_id - new_style._null = style._null - if self._meta and style._meta: - new_style._meta = dumps({**self.meta, **style.meta}) - else: - new_style._meta = self._meta or style._meta - new_style._hash = None - return new_style - - def __add__(self, style: Optional["Style"]) -> "Style": - combined_style = self._add(style) - return combined_style.copy() if combined_style.link else combined_style - - -NULL_STYLE = Style() - - -class StyleStack: - """A stack of styles.""" - - __slots__ = ["_stack"] - - def __init__(self, default_style: "Style") -> None: - self._stack: List[Style] = [default_style] - - def __repr__(self) -> str: - return f"" - - @property - def current(self) -> Style: - """Get the Style at the top of the stack.""" - return self._stack[-1] - - def push(self, style: Style) -> None: - """Push a new style on to the stack. - - Args: - style (Style): New style to combine with current style. - """ - self._stack.append(self._stack[-1] + style) - - def pop(self) -> Style: - """Pop last style and discard. - - Returns: - Style: New current style (also available as stack.current) - """ - self._stack.pop() - return self._stack[-1] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/styled.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/styled.py deleted file mode 100644 index 91cd0db..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/styled.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import TYPE_CHECKING - -from .measure import Measurement -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult, RenderableType - - -class Styled: - """Apply a style to a renderable. - - Args: - renderable (RenderableType): Any renderable. - style (StyleType): A style to apply across the entire renderable. - """ - - def __init__(self, renderable: "RenderableType", style: "StyleType") -> None: - self.renderable = renderable - self.style = style - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) - rendered_segments = console.render(self.renderable, options) - segments = Segment.apply_style(rendered_segments, style) - return segments - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - return Measurement.get(console, options, self.renderable) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - from pip._vendor.rich.panel import Panel - - panel = Styled(Panel("hello"), "on blue") - print(panel) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py deleted file mode 100644 index f3d483c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py +++ /dev/null @@ -1,966 +0,0 @@ -import os.path -import re -import sys -import textwrap -from abc import ABC, abstractmethod -from pathlib import Path -from typing import ( - Any, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Set, - Tuple, - Type, - Union, -) - -from pip._vendor.pygments.lexer import Lexer -from pip._vendor.pygments.lexers import get_lexer_by_name, guess_lexer_for_filename -from pip._vendor.pygments.style import Style as PygmentsStyle -from pip._vendor.pygments.styles import get_style_by_name -from pip._vendor.pygments.token import ( - Comment, - Error, - Generic, - Keyword, - Name, - Number, - Operator, - String, - Token, - Whitespace, -) -from pip._vendor.pygments.util import ClassNotFound - -from pip._vendor.rich.containers import Lines -from pip._vendor.rich.padding import Padding, PaddingDimensions - -from ._loop import loop_first -from .cells import cell_len -from .color import Color, blend_rgb -from .console import Console, ConsoleOptions, JustifyMethod, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment, Segments -from .style import Style, StyleType -from .text import Text - -TokenType = Tuple[str, ...] - -WINDOWS = sys.platform == "win32" -DEFAULT_THEME = "monokai" - -# The following styles are based on https://github.com/pygments/pygments/blob/master/pygments/formatters/terminal.py -# A few modifications were made - -ANSI_LIGHT: Dict[TokenType, Style] = { - Token: Style(), - Whitespace: Style(color="white"), - Comment: Style(dim=True), - Comment.Preproc: Style(color="cyan"), - Keyword: Style(color="blue"), - Keyword.Type: Style(color="cyan"), - Operator.Word: Style(color="magenta"), - Name.Builtin: Style(color="cyan"), - Name.Function: Style(color="green"), - Name.Namespace: Style(color="cyan", underline=True), - Name.Class: Style(color="green", underline=True), - Name.Exception: Style(color="cyan"), - Name.Decorator: Style(color="magenta", bold=True), - Name.Variable: Style(color="red"), - Name.Constant: Style(color="red"), - Name.Attribute: Style(color="cyan"), - Name.Tag: Style(color="bright_blue"), - String: Style(color="yellow"), - Number: Style(color="blue"), - Generic.Deleted: Style(color="bright_red"), - Generic.Inserted: Style(color="green"), - Generic.Heading: Style(bold=True), - Generic.Subheading: Style(color="magenta", bold=True), - Generic.Prompt: Style(bold=True), - Generic.Error: Style(color="bright_red"), - Error: Style(color="red", underline=True), -} - -ANSI_DARK: Dict[TokenType, Style] = { - Token: Style(), - Whitespace: Style(color="bright_black"), - Comment: Style(dim=True), - Comment.Preproc: Style(color="bright_cyan"), - Keyword: Style(color="bright_blue"), - Keyword.Type: Style(color="bright_cyan"), - Operator.Word: Style(color="bright_magenta"), - Name.Builtin: Style(color="bright_cyan"), - Name.Function: Style(color="bright_green"), - Name.Namespace: Style(color="bright_cyan", underline=True), - Name.Class: Style(color="bright_green", underline=True), - Name.Exception: Style(color="bright_cyan"), - Name.Decorator: Style(color="bright_magenta", bold=True), - Name.Variable: Style(color="bright_red"), - Name.Constant: Style(color="bright_red"), - Name.Attribute: Style(color="bright_cyan"), - Name.Tag: Style(color="bright_blue"), - String: Style(color="yellow"), - Number: Style(color="bright_blue"), - Generic.Deleted: Style(color="bright_red"), - Generic.Inserted: Style(color="bright_green"), - Generic.Heading: Style(bold=True), - Generic.Subheading: Style(color="bright_magenta", bold=True), - Generic.Prompt: Style(bold=True), - Generic.Error: Style(color="bright_red"), - Error: Style(color="red", underline=True), -} - -RICH_SYNTAX_THEMES = {"ansi_light": ANSI_LIGHT, "ansi_dark": ANSI_DARK} -NUMBERS_COLUMN_DEFAULT_PADDING = 2 - - -class SyntaxTheme(ABC): - """Base class for a syntax theme.""" - - @abstractmethod - def get_style_for_token(self, token_type: TokenType) -> Style: - """Get a style for a given Pygments token.""" - raise NotImplementedError # pragma: no cover - - @abstractmethod - def get_background_style(self) -> Style: - """Get the background color.""" - raise NotImplementedError # pragma: no cover - - -class PygmentsSyntaxTheme(SyntaxTheme): - """Syntax theme that delegates to Pygments theme.""" - - def __init__(self, theme: Union[str, Type[PygmentsStyle]]) -> None: - self._style_cache: Dict[TokenType, Style] = {} - if isinstance(theme, str): - try: - self._pygments_style_class = get_style_by_name(theme) - except ClassNotFound: - self._pygments_style_class = get_style_by_name("default") - else: - self._pygments_style_class = theme - - self._background_color = self._pygments_style_class.background_color - self._background_style = Style(bgcolor=self._background_color) - - def get_style_for_token(self, token_type: TokenType) -> Style: - """Get a style from a Pygments class.""" - try: - return self._style_cache[token_type] - except KeyError: - try: - pygments_style = self._pygments_style_class.style_for_token(token_type) - except KeyError: - style = Style.null() - else: - color = pygments_style["color"] - bgcolor = pygments_style["bgcolor"] - style = Style( - color="#" + color if color else "#000000", - bgcolor="#" + bgcolor if bgcolor else self._background_color, - bold=pygments_style["bold"], - italic=pygments_style["italic"], - underline=pygments_style["underline"], - ) - self._style_cache[token_type] = style - return style - - def get_background_style(self) -> Style: - return self._background_style - - -class ANSISyntaxTheme(SyntaxTheme): - """Syntax theme to use standard colors.""" - - def __init__(self, style_map: Dict[TokenType, Style]) -> None: - self.style_map = style_map - self._missing_style = Style.null() - self._background_style = Style.null() - self._style_cache: Dict[TokenType, Style] = {} - - def get_style_for_token(self, token_type: TokenType) -> Style: - """Look up style in the style map.""" - try: - return self._style_cache[token_type] - except KeyError: - # Styles form a hierarchy - # We need to go from most to least specific - # e.g. ("foo", "bar", "baz") to ("foo", "bar") to ("foo",) - get_style = self.style_map.get - token = tuple(token_type) - style = self._missing_style - while token: - _style = get_style(token) - if _style is not None: - style = _style - break - token = token[:-1] - self._style_cache[token_type] = style - return style - - def get_background_style(self) -> Style: - return self._background_style - - -SyntaxPosition = Tuple[int, int] - - -class _SyntaxHighlightRange(NamedTuple): - """ - A range to highlight in a Syntax object. - `start` and `end` are 2-integers tuples, where the first integer is the line number - (starting from 1) and the second integer is the column index (starting from 0). - """ - - style: StyleType - start: SyntaxPosition - end: SyntaxPosition - style_before: bool = False - - -class Syntax(JupyterMixin): - """Construct a Syntax object to render syntax highlighted code. - - Args: - code (str): Code to highlight. - lexer (Lexer | str): Lexer to use (see https://pygments.org/docs/lexers/) - theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "monokai". - dedent (bool, optional): Enable stripping of initial whitespace. Defaults to False. - line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False. - start_line (int, optional): Starting number for line numbers. Defaults to 1. - line_range (Tuple[int | None, int | None], optional): If given should be a tuple of the start and end line to render. - A value of None in the tuple indicates the range is open in that direction. - highlight_lines (Set[int]): A set of line numbers to highlight. - code_width: Width of code to render (not including line numbers), or ``None`` to use all available width. - tab_size (int, optional): Size of tabs. Defaults to 4. - word_wrap (bool, optional): Enable word wrapping. - background_color (str, optional): Optional background color, or None to use theme color. Defaults to None. - indent_guides (bool, optional): Show indent guides. Defaults to False. - padding (PaddingDimensions): Padding to apply around the syntax. Defaults to 0 (no padding). - """ - - _pygments_style_class: Type[PygmentsStyle] - _theme: SyntaxTheme - - @classmethod - def get_theme(cls, name: Union[str, SyntaxTheme]) -> SyntaxTheme: - """Get a syntax theme instance.""" - if isinstance(name, SyntaxTheme): - return name - theme: SyntaxTheme - if name in RICH_SYNTAX_THEMES: - theme = ANSISyntaxTheme(RICH_SYNTAX_THEMES[name]) - else: - theme = PygmentsSyntaxTheme(name) - return theme - - def __init__( - self, - code: str, - lexer: Union[Lexer, str], - *, - theme: Union[str, SyntaxTheme] = DEFAULT_THEME, - dedent: bool = False, - line_numbers: bool = False, - start_line: int = 1, - line_range: Optional[Tuple[Optional[int], Optional[int]]] = None, - highlight_lines: Optional[Set[int]] = None, - code_width: Optional[int] = None, - tab_size: int = 4, - word_wrap: bool = False, - background_color: Optional[str] = None, - indent_guides: bool = False, - padding: PaddingDimensions = 0, - ) -> None: - self.code = code - self._lexer = lexer - self.dedent = dedent - self.line_numbers = line_numbers - self.start_line = start_line - self.line_range = line_range - self.highlight_lines = highlight_lines or set() - self.code_width = code_width - self.tab_size = tab_size - self.word_wrap = word_wrap - self.background_color = background_color - self.background_style = ( - Style(bgcolor=background_color) if background_color else Style() - ) - self.indent_guides = indent_guides - self.padding = padding - - self._theme = self.get_theme(theme) - self._stylized_ranges: List[_SyntaxHighlightRange] = [] - - @classmethod - def from_path( - cls, - path: str, - encoding: str = "utf-8", - lexer: Optional[Union[Lexer, str]] = None, - theme: Union[str, SyntaxTheme] = DEFAULT_THEME, - dedent: bool = False, - line_numbers: bool = False, - line_range: Optional[Tuple[int, int]] = None, - start_line: int = 1, - highlight_lines: Optional[Set[int]] = None, - code_width: Optional[int] = None, - tab_size: int = 4, - word_wrap: bool = False, - background_color: Optional[str] = None, - indent_guides: bool = False, - padding: PaddingDimensions = 0, - ) -> "Syntax": - """Construct a Syntax object from a file. - - Args: - path (str): Path to file to highlight. - encoding (str): Encoding of file. - lexer (str | Lexer, optional): Lexer to use. If None, lexer will be auto-detected from path/file content. - theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "emacs". - dedent (bool, optional): Enable stripping of initial whitespace. Defaults to True. - line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False. - start_line (int, optional): Starting number for line numbers. Defaults to 1. - line_range (Tuple[int, int], optional): If given should be a tuple of the start and end line to render. - highlight_lines (Set[int]): A set of line numbers to highlight. - code_width: Width of code to render (not including line numbers), or ``None`` to use all available width. - tab_size (int, optional): Size of tabs. Defaults to 4. - word_wrap (bool, optional): Enable word wrapping of code. - background_color (str, optional): Optional background color, or None to use theme color. Defaults to None. - indent_guides (bool, optional): Show indent guides. Defaults to False. - padding (PaddingDimensions): Padding to apply around the syntax. Defaults to 0 (no padding). - - Returns: - [Syntax]: A Syntax object that may be printed to the console - """ - code = Path(path).read_text(encoding=encoding) - - if not lexer: - lexer = cls.guess_lexer(path, code=code) - - return cls( - code, - lexer, - theme=theme, - dedent=dedent, - line_numbers=line_numbers, - line_range=line_range, - start_line=start_line, - highlight_lines=highlight_lines, - code_width=code_width, - tab_size=tab_size, - word_wrap=word_wrap, - background_color=background_color, - indent_guides=indent_guides, - padding=padding, - ) - - @classmethod - def guess_lexer(cls, path: str, code: Optional[str] = None) -> str: - """Guess the alias of the Pygments lexer to use based on a path and an optional string of code. - If code is supplied, it will use a combination of the code and the filename to determine the - best lexer to use. For example, if the file is ``index.html`` and the file contains Django - templating syntax, then "html+django" will be returned. If the file is ``index.html``, and no - templating language is used, the "html" lexer will be used. If no string of code - is supplied, the lexer will be chosen based on the file extension.. - - Args: - path (AnyStr): The path to the file containing the code you wish to know the lexer for. - code (str, optional): Optional string of code that will be used as a fallback if no lexer - is found for the supplied path. - - Returns: - str: The name of the Pygments lexer that best matches the supplied path/code. - """ - lexer: Optional[Lexer] = None - lexer_name = "default" - if code: - try: - lexer = guess_lexer_for_filename(path, code) - except ClassNotFound: - pass - - if not lexer: - try: - _, ext = os.path.splitext(path) - if ext: - extension = ext.lstrip(".").lower() - lexer = get_lexer_by_name(extension) - except ClassNotFound: - pass - - if lexer: - if lexer.aliases: - lexer_name = lexer.aliases[0] - else: - lexer_name = lexer.name - - return lexer_name - - def _get_base_style(self) -> Style: - """Get the base style.""" - default_style = self._theme.get_background_style() + self.background_style - return default_style - - def _get_token_color(self, token_type: TokenType) -> Optional[Color]: - """Get a color (if any) for the given token. - - Args: - token_type (TokenType): A token type tuple from Pygments. - - Returns: - Optional[Color]: Color from theme, or None for no color. - """ - style = self._theme.get_style_for_token(token_type) - return style.color - - @property - def lexer(self) -> Optional[Lexer]: - """The lexer for this syntax, or None if no lexer was found. - - Tries to find the lexer by name if a string was passed to the constructor. - """ - - if isinstance(self._lexer, Lexer): - return self._lexer - try: - return get_lexer_by_name( - self._lexer, - stripnl=False, - ensurenl=True, - tabsize=self.tab_size, - ) - except ClassNotFound: - return None - - @property - def default_lexer(self) -> Lexer: - """A Pygments Lexer to use if one is not specified or invalid.""" - return get_lexer_by_name( - "text", - stripnl=False, - ensurenl=True, - tabsize=self.tab_size, - ) - - def highlight( - self, - code: str, - line_range: Optional[Tuple[Optional[int], Optional[int]]] = None, - ) -> Text: - """Highlight code and return a Text instance. - - Args: - code (str): Code to highlight. - line_range(Tuple[int, int], optional): Optional line range to highlight. - - Returns: - Text: A text instance containing highlighted syntax. - """ - - base_style = self._get_base_style() - justify: JustifyMethod = ( - "default" if base_style.transparent_background else "left" - ) - - text = Text( - justify=justify, - style=base_style, - tab_size=self.tab_size, - no_wrap=not self.word_wrap, - ) - _get_theme_style = self._theme.get_style_for_token - - lexer = self.lexer or self.default_lexer - - if lexer is None: - text.append(code) - else: - if line_range: - # More complicated path to only stylize a portion of the code - # This speeds up further operations as there are less spans to process - line_start, line_end = line_range - - def line_tokenize() -> Iterable[Tuple[Any, str]]: - """Split tokens to one per line.""" - assert lexer # required to make MyPy happy - we know lexer is not None at this point - - for token_type, token in lexer.get_tokens(code): - while token: - line_token, new_line, token = token.partition("\n") - yield token_type, line_token + new_line - - def tokens_to_spans() -> Iterable[Tuple[str, Optional[Style]]]: - """Convert tokens to spans.""" - tokens = iter(line_tokenize()) - line_no = 0 - _line_start = line_start - 1 if line_start else 0 - - # Skip over tokens until line start - while line_no < _line_start: - try: - _token_type, token = next(tokens) - except StopIteration: - break - yield (token, None) - if token.endswith("\n"): - line_no += 1 - # Generate spans until line end - for token_type, token in tokens: - yield (token, _get_theme_style(token_type)) - if token.endswith("\n"): - line_no += 1 - if line_end and line_no >= line_end: - break - - text.append_tokens(tokens_to_spans()) - - else: - text.append_tokens( - (token, _get_theme_style(token_type)) - for token_type, token in lexer.get_tokens(code) - ) - if self.background_color is not None: - text.stylize(f"on {self.background_color}") - - if self._stylized_ranges: - self._apply_stylized_ranges(text) - - return text - - def stylize_range( - self, - style: StyleType, - start: SyntaxPosition, - end: SyntaxPosition, - style_before: bool = False, - ) -> None: - """ - Adds a custom style on a part of the code, that will be applied to the syntax display when it's rendered. - Line numbers are 1-based, while column indexes are 0-based. - - Args: - style (StyleType): The style to apply. - start (Tuple[int, int]): The start of the range, in the form `[line number, column index]`. - end (Tuple[int, int]): The end of the range, in the form `[line number, column index]`. - style_before (bool): Apply the style before any existing styles. - """ - self._stylized_ranges.append( - _SyntaxHighlightRange(style, start, end, style_before) - ) - - def _get_line_numbers_color(self, blend: float = 0.3) -> Color: - background_style = self._theme.get_background_style() + self.background_style - background_color = background_style.bgcolor - if background_color is None or background_color.is_system_defined: - return Color.default() - foreground_color = self._get_token_color(Token.Text) - if foreground_color is None or foreground_color.is_system_defined: - return foreground_color or Color.default() - new_color = blend_rgb( - background_color.get_truecolor(), - foreground_color.get_truecolor(), - cross_fade=blend, - ) - return Color.from_triplet(new_color) - - @property - def _numbers_column_width(self) -> int: - """Get the number of characters used to render the numbers column.""" - column_width = 0 - if self.line_numbers: - column_width = ( - len(str(self.start_line + self.code.count("\n"))) - + NUMBERS_COLUMN_DEFAULT_PADDING - ) - return column_width - - def _get_number_styles(self, console: Console) -> Tuple[Style, Style, Style]: - """Get background, number, and highlight styles for line numbers.""" - background_style = self._get_base_style() - if background_style.transparent_background: - return Style.null(), Style(dim=True), Style.null() - if console.color_system in ("256", "truecolor"): - number_style = Style.chain( - background_style, - self._theme.get_style_for_token(Token.Text), - Style(color=self._get_line_numbers_color()), - self.background_style, - ) - highlight_number_style = Style.chain( - background_style, - self._theme.get_style_for_token(Token.Text), - Style(bold=True, color=self._get_line_numbers_color(0.9)), - self.background_style, - ) - else: - number_style = background_style + Style(dim=True) - highlight_number_style = background_style + Style(dim=False) - return background_style, number_style, highlight_number_style - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - _, right, _, left = Padding.unpack(self.padding) - padding = left + right - if self.code_width is not None: - width = self.code_width + self._numbers_column_width + padding + 1 - return Measurement(self._numbers_column_width, width) - lines = self.code.splitlines() - width = ( - self._numbers_column_width - + padding - + (max(cell_len(line) for line in lines) if lines else 0) - ) - if self.line_numbers: - width += 1 - return Measurement(self._numbers_column_width, width) - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - segments = Segments(self._get_syntax(console, options)) - if self.padding: - yield Padding(segments, style=self._get_base_style(), pad=self.padding) - else: - yield segments - - def _get_syntax( - self, - console: Console, - options: ConsoleOptions, - ) -> Iterable[Segment]: - """ - Get the Segments for the Syntax object, excluding any vertical/horizontal padding - """ - transparent_background = self._get_base_style().transparent_background - code_width = ( - ( - (options.max_width - self._numbers_column_width - 1) - if self.line_numbers - else options.max_width - ) - if self.code_width is None - else self.code_width - ) - - ends_on_nl, processed_code = self._process_code(self.code) - text = self.highlight(processed_code, self.line_range) - - if not self.line_numbers and not self.word_wrap and not self.line_range: - if not ends_on_nl: - text.remove_suffix("\n") - # Simple case of just rendering text - style = ( - self._get_base_style() - + self._theme.get_style_for_token(Comment) - + Style(dim=True) - + self.background_style - ) - if self.indent_guides and not options.ascii_only: - text = text.with_indent_guides(self.tab_size, style=style) - text.overflow = "crop" - if style.transparent_background: - yield from console.render( - text, options=options.update(width=code_width) - ) - else: - syntax_lines = console.render_lines( - text, - options.update(width=code_width, height=None, justify="left"), - style=self.background_style, - pad=True, - new_lines=True, - ) - for syntax_line in syntax_lines: - yield from syntax_line - return - - start_line, end_line = self.line_range or (None, None) - line_offset = 0 - if start_line: - line_offset = max(0, start_line - 1) - lines: Union[List[Text], Lines] = text.split("\n", allow_blank=ends_on_nl) - if self.line_range: - if line_offset > len(lines): - return - lines = lines[line_offset:end_line] - - if self.indent_guides and not options.ascii_only: - style = ( - self._get_base_style() - + self._theme.get_style_for_token(Comment) - + Style(dim=True) - + self.background_style - ) - lines = ( - Text("\n") - .join(lines) - .with_indent_guides(self.tab_size, style=style + Style(italic=False)) - .split("\n", allow_blank=True) - ) - - numbers_column_width = self._numbers_column_width - render_options = options.update(width=code_width) - - highlight_line = self.highlight_lines.__contains__ - _Segment = Segment - new_line = _Segment("\n") - - line_pointer = "> " if options.legacy_windows else "❱ " - - ( - background_style, - number_style, - highlight_number_style, - ) = self._get_number_styles(console) - - for line_no, line in enumerate(lines, self.start_line + line_offset): - if self.word_wrap: - wrapped_lines = console.render_lines( - line, - render_options.update(height=None, justify="left"), - style=background_style, - pad=not transparent_background, - ) - else: - segments = list(line.render(console, end="")) - if options.no_wrap: - wrapped_lines = [segments] - else: - wrapped_lines = [ - _Segment.adjust_line_length( - segments, - render_options.max_width, - style=background_style, - pad=not transparent_background, - ) - ] - - if self.line_numbers: - wrapped_line_left_pad = _Segment( - " " * numbers_column_width + " ", background_style - ) - for first, wrapped_line in loop_first(wrapped_lines): - if first: - line_column = str(line_no).rjust(numbers_column_width - 2) + " " - if highlight_line(line_no): - yield _Segment(line_pointer, Style(color="red")) - yield _Segment(line_column, highlight_number_style) - else: - yield _Segment(" ", highlight_number_style) - yield _Segment(line_column, number_style) - else: - yield wrapped_line_left_pad - yield from wrapped_line - yield new_line - else: - for wrapped_line in wrapped_lines: - yield from wrapped_line - yield new_line - - def _apply_stylized_ranges(self, text: Text) -> None: - """ - Apply stylized ranges to a text instance, - using the given code to determine the right portion to apply the style to. - - Args: - text (Text): Text instance to apply the style to. - """ - code = text.plain - newlines_offsets = [ - # Let's add outer boundaries at each side of the list: - 0, - # N.B. using "\n" here is much faster than using metacharacters such as "^" or "\Z": - *[ - match.start() + 1 - for match in re.finditer("\n", code, flags=re.MULTILINE) - ], - len(code) + 1, - ] - - for stylized_range in self._stylized_ranges: - start = _get_code_index_for_syntax_position( - newlines_offsets, stylized_range.start - ) - end = _get_code_index_for_syntax_position( - newlines_offsets, stylized_range.end - ) - if start is not None and end is not None: - if stylized_range.style_before: - text.stylize_before(stylized_range.style, start, end) - else: - text.stylize(stylized_range.style, start, end) - - def _process_code(self, code: str) -> Tuple[bool, str]: - """ - Applies various processing to a raw code string - (normalises it so it always ends with a line return, dedents it if necessary, etc.) - - Args: - code (str): The raw code string to process - - Returns: - Tuple[bool, str]: the boolean indicates whether the raw code ends with a line return, - while the string is the processed code. - """ - ends_on_nl = code.endswith("\n") - processed_code = code if ends_on_nl else code + "\n" - processed_code = ( - textwrap.dedent(processed_code) if self.dedent else processed_code - ) - processed_code = processed_code.expandtabs(self.tab_size) - return ends_on_nl, processed_code - - -def _get_code_index_for_syntax_position( - newlines_offsets: Sequence[int], position: SyntaxPosition -) -> Optional[int]: - """ - Returns the index of the code string for the given positions. - - Args: - newlines_offsets (Sequence[int]): The offset of each newline character found in the code snippet. - position (SyntaxPosition): The position to search for. - - Returns: - Optional[int]: The index of the code string for this position, or `None` - if the given position's line number is out of range (if it's the column that is out of range - we silently clamp its value so that it reaches the end of the line) - """ - lines_count = len(newlines_offsets) - - line_number, column_index = position - if line_number > lines_count or len(newlines_offsets) < (line_number + 1): - return None # `line_number` is out of range - line_index = line_number - 1 - line_length = newlines_offsets[line_index + 1] - newlines_offsets[line_index] - 1 - # If `column_index` is out of range: let's silently clamp it: - column_index = min(line_length, column_index) - return newlines_offsets[line_index] + column_index - - -if __name__ == "__main__": # pragma: no cover - import argparse - import sys - - parser = argparse.ArgumentParser( - description="Render syntax to the console with Rich" - ) - parser.add_argument( - "path", - metavar="PATH", - help="path to file, or - for stdin", - ) - parser.add_argument( - "-c", - "--force-color", - dest="force_color", - action="store_true", - default=None, - help="force color for non-terminals", - ) - parser.add_argument( - "-i", - "--indent-guides", - dest="indent_guides", - action="store_true", - default=False, - help="display indent guides", - ) - parser.add_argument( - "-l", - "--line-numbers", - dest="line_numbers", - action="store_true", - help="render line numbers", - ) - parser.add_argument( - "-w", - "--width", - type=int, - dest="width", - default=None, - help="width of output (default will auto-detect)", - ) - parser.add_argument( - "-r", - "--wrap", - dest="word_wrap", - action="store_true", - default=False, - help="word wrap long lines", - ) - parser.add_argument( - "-s", - "--soft-wrap", - action="store_true", - dest="soft_wrap", - default=False, - help="enable soft wrapping mode", - ) - parser.add_argument( - "-t", "--theme", dest="theme", default="monokai", help="pygments theme" - ) - parser.add_argument( - "-b", - "--background-color", - dest="background_color", - default=None, - help="Override background color", - ) - parser.add_argument( - "-x", - "--lexer", - default=None, - dest="lexer_name", - help="Lexer name", - ) - parser.add_argument( - "-p", "--padding", type=int, default=0, dest="padding", help="Padding" - ) - parser.add_argument( - "--highlight-line", - type=int, - default=None, - dest="highlight_line", - help="The line number (not index!) to highlight", - ) - args = parser.parse_args() - - from pip._vendor.rich.console import Console - - console = Console(force_terminal=args.force_color, width=args.width) - - if args.path == "-": - code = sys.stdin.read() - syntax = Syntax( - code=code, - lexer=args.lexer_name, - line_numbers=args.line_numbers, - word_wrap=args.word_wrap, - theme=args.theme, - background_color=args.background_color, - indent_guides=args.indent_guides, - padding=args.padding, - highlight_lines={args.highlight_line}, - ) - else: - syntax = Syntax.from_path( - args.path, - lexer=args.lexer_name, - line_numbers=args.line_numbers, - word_wrap=args.word_wrap, - theme=args.theme, - background_color=args.background_color, - indent_guides=args.indent_guides, - padding=args.padding, - highlight_lines={args.highlight_line}, - ) - console.print(syntax, soft_wrap=args.soft_wrap) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/table.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/table.py deleted file mode 100644 index 654c855..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/table.py +++ /dev/null @@ -1,1007 +0,0 @@ -from dataclasses import dataclass, field, replace -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Union, -) - -from . import box, errors -from ._loop import loop_first_last, loop_last -from ._pick import pick_bool -from ._ratio import ratio_distribute, ratio_reduce -from .align import VerticalAlignMethod -from .jupyter import JupyterMixin -from .measure import Measurement -from .padding import Padding, PaddingDimensions -from .protocol import is_renderable -from .segment import Segment -from .style import Style, StyleType -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - JustifyMethod, - OverflowMethod, - RenderableType, - RenderResult, - ) - - -@dataclass -class Column: - """Defines a column within a ~Table. - - Args: - title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. - caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. - width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. - min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. - box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. - safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. - pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - show_header (bool, optional): Show a header row. Defaults to True. - show_footer (bool, optional): Show a footer row. Defaults to False. - show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. - show_lines (bool, optional): Draw lines between every row. Defaults to False. - leading (int, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. - style (Union[str, Style], optional): Default style for the table. Defaults to "none". - row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. - header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". - footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". - border_style (Union[str, Style], optional): Style of the border. Defaults to None. - title_style (Union[str, Style], optional): Style of the title. Defaults to None. - caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. - title_justify (str, optional): Justify method for title. Defaults to "center". - caption_justify (str, optional): Justify method for caption. Defaults to "center". - highlight (bool, optional): Highlight cell contents (if str). Defaults to False. - """ - - header: "RenderableType" = "" - """RenderableType: Renderable for the header (typically a string)""" - - footer: "RenderableType" = "" - """RenderableType: Renderable for the footer (typically a string)""" - - header_style: StyleType = "" - """StyleType: The style of the header.""" - - footer_style: StyleType = "" - """StyleType: The style of the footer.""" - - style: StyleType = "" - """StyleType: The style of the column.""" - - justify: "JustifyMethod" = "left" - """str: How to justify text within the column ("left", "center", "right", or "full")""" - - vertical: "VerticalAlignMethod" = "top" - """str: How to vertically align content ("top", "middle", or "bottom")""" - - overflow: "OverflowMethod" = "ellipsis" - """str: Overflow method.""" - - width: Optional[int] = None - """Optional[int]: Width of the column, or ``None`` (default) to auto calculate width.""" - - min_width: Optional[int] = None - """Optional[int]: Minimum width of column, or ``None`` for no minimum. Defaults to None.""" - - max_width: Optional[int] = None - """Optional[int]: Maximum width of column, or ``None`` for no maximum. Defaults to None.""" - - ratio: Optional[int] = None - """Optional[int]: Ratio to use when calculating column width, or ``None`` (default) to adapt to column contents.""" - - no_wrap: bool = False - """bool: Prevent wrapping of text within the column. Defaults to ``False``.""" - - highlight: bool = False - """bool: Apply highlighter to column. Defaults to ``False``.""" - - _index: int = 0 - """Index of column.""" - - _cells: List["RenderableType"] = field(default_factory=list) - - def copy(self) -> "Column": - """Return a copy of this Column.""" - return replace(self, _cells=[]) - - @property - def cells(self) -> Iterable["RenderableType"]: - """Get all cells in the column, not including header.""" - yield from self._cells - - @property - def flexible(self) -> bool: - """Check if this column is flexible.""" - return self.ratio is not None - - -@dataclass -class Row: - """Information regarding a row.""" - - style: Optional[StyleType] = None - """Style to apply to row.""" - - end_section: bool = False - """Indicated end of section, which will force a line beneath the row.""" - - -class _Cell(NamedTuple): - """A single cell in a table.""" - - style: StyleType - """Style to apply to cell.""" - renderable: "RenderableType" - """Cell renderable.""" - vertical: VerticalAlignMethod - """Cell vertical alignment.""" - - -class Table(JupyterMixin): - """A console renderable to draw a table. - - Args: - *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. - title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. - caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. - width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. - min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. - box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. - safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. - pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - show_header (bool, optional): Show a header row. Defaults to True. - show_footer (bool, optional): Show a footer row. Defaults to False. - show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. - show_lines (bool, optional): Draw lines between every row. Defaults to False. - leading (int, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. - style (Union[str, Style], optional): Default style for the table. Defaults to "none". - row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. - header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". - footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". - border_style (Union[str, Style], optional): Style of the border. Defaults to None. - title_style (Union[str, Style], optional): Style of the title. Defaults to None. - caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. - title_justify (str, optional): Justify method for title. Defaults to "center". - caption_justify (str, optional): Justify method for caption. Defaults to "center". - highlight (bool, optional): Highlight cell contents (if str). Defaults to False. - """ - - columns: List[Column] - rows: List[Row] - - def __init__( - self, - *headers: Union[Column, str], - title: Optional[TextType] = None, - caption: Optional[TextType] = None, - width: Optional[int] = None, - min_width: Optional[int] = None, - box: Optional[box.Box] = box.HEAVY_HEAD, - safe_box: Optional[bool] = None, - padding: PaddingDimensions = (0, 1), - collapse_padding: bool = False, - pad_edge: bool = True, - expand: bool = False, - show_header: bool = True, - show_footer: bool = False, - show_edge: bool = True, - show_lines: bool = False, - leading: int = 0, - style: StyleType = "none", - row_styles: Optional[Iterable[StyleType]] = None, - header_style: Optional[StyleType] = "table.header", - footer_style: Optional[StyleType] = "table.footer", - border_style: Optional[StyleType] = None, - title_style: Optional[StyleType] = None, - caption_style: Optional[StyleType] = None, - title_justify: "JustifyMethod" = "center", - caption_justify: "JustifyMethod" = "center", - highlight: bool = False, - ) -> None: - self.columns: List[Column] = [] - self.rows: List[Row] = [] - self.title = title - self.caption = caption - self.width = width - self.min_width = min_width - self.box = box - self.safe_box = safe_box - self._padding = Padding.unpack(padding) - self.pad_edge = pad_edge - self._expand = expand - self.show_header = show_header - self.show_footer = show_footer - self.show_edge = show_edge - self.show_lines = show_lines - self.leading = leading - self.collapse_padding = collapse_padding - self.style = style - self.header_style = header_style or "" - self.footer_style = footer_style or "" - self.border_style = border_style - self.title_style = title_style - self.caption_style = caption_style - self.title_justify: "JustifyMethod" = title_justify - self.caption_justify: "JustifyMethod" = caption_justify - self.highlight = highlight - self.row_styles: Sequence[StyleType] = list(row_styles or []) - append_column = self.columns.append - for header in headers: - if isinstance(header, str): - self.add_column(header=header) - else: - header._index = len(self.columns) - append_column(header) - - @classmethod - def grid( - cls, - *headers: Union[Column, str], - padding: PaddingDimensions = 0, - collapse_padding: bool = True, - pad_edge: bool = False, - expand: bool = False, - ) -> "Table": - """Get a table with no lines, headers, or footer. - - Args: - *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. - padding (PaddingDimensions, optional): Get padding around cells. Defaults to 0. - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to True. - pad_edge (bool, optional): Enable padding around edges of table. Defaults to False. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - - Returns: - Table: A table instance. - """ - return cls( - *headers, - box=None, - padding=padding, - collapse_padding=collapse_padding, - show_header=False, - show_footer=False, - show_edge=False, - pad_edge=pad_edge, - expand=expand, - ) - - @property - def expand(self) -> bool: - """Setting a non-None self.width implies expand.""" - return self._expand or self.width is not None - - @expand.setter - def expand(self, expand: bool) -> None: - """Set expand.""" - self._expand = expand - - @property - def _extra_width(self) -> int: - """Get extra width to add to cell content.""" - width = 0 - if self.box and self.show_edge: - width += 2 - if self.box: - width += len(self.columns) - 1 - return width - - @property - def row_count(self) -> int: - """Get the current number of rows.""" - return len(self.rows) - - def get_row_style(self, console: "Console", index: int) -> StyleType: - """Get the current row style.""" - style = Style.null() - if self.row_styles: - style += console.get_style(self.row_styles[index % len(self.row_styles)]) - row_style = self.rows[index].style - if row_style is not None: - style += console.get_style(row_style) - return style - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - max_width = options.max_width - if self.width is not None: - max_width = self.width - if max_width < 0: - return Measurement(0, 0) - - extra_width = self._extra_width - max_width = sum( - self._calculate_column_widths( - console, options.update_width(max_width - extra_width) - ) - ) - _measure_column = self._measure_column - - measurements = [ - _measure_column(console, options.update_width(max_width), column) - for column in self.columns - ] - minimum_width = ( - sum(measurement.minimum for measurement in measurements) + extra_width - ) - maximum_width = ( - sum(measurement.maximum for measurement in measurements) + extra_width - if (self.width is None) - else self.width - ) - measurement = Measurement(minimum_width, maximum_width) - measurement = measurement.clamp(self.min_width) - return measurement - - @property - def padding(self) -> Tuple[int, int, int, int]: - """Get cell padding.""" - return self._padding - - @padding.setter - def padding(self, padding: PaddingDimensions) -> "Table": - """Set cell padding.""" - self._padding = Padding.unpack(padding) - return self - - def add_column( - self, - header: "RenderableType" = "", - footer: "RenderableType" = "", - *, - header_style: Optional[StyleType] = None, - highlight: Optional[bool] = None, - footer_style: Optional[StyleType] = None, - style: Optional[StyleType] = None, - justify: "JustifyMethod" = "left", - vertical: "VerticalAlignMethod" = "top", - overflow: "OverflowMethod" = "ellipsis", - width: Optional[int] = None, - min_width: Optional[int] = None, - max_width: Optional[int] = None, - ratio: Optional[int] = None, - no_wrap: bool = False, - ) -> None: - """Add a column to the table. - - Args: - header (RenderableType, optional): Text or renderable for the header. - Defaults to "". - footer (RenderableType, optional): Text or renderable for the footer. - Defaults to "". - header_style (Union[str, Style], optional): Style for the header, or None for default. Defaults to None. - highlight (bool, optional): Whether to highlight the text. The default of None uses the value of the table (self) object. - footer_style (Union[str, Style], optional): Style for the footer, or None for default. Defaults to None. - style (Union[str, Style], optional): Style for the column cells, or None for default. Defaults to None. - justify (JustifyMethod, optional): Alignment for cells. Defaults to "left". - vertical (VerticalAlignMethod, optional): Vertical alignment, one of "top", "middle", or "bottom". Defaults to "top". - overflow (OverflowMethod): Overflow method: "crop", "fold", "ellipsis". Defaults to "ellipsis". - width (int, optional): Desired width of column in characters, or None to fit to contents. Defaults to None. - min_width (Optional[int], optional): Minimum width of column, or ``None`` for no minimum. Defaults to None. - max_width (Optional[int], optional): Maximum width of column, or ``None`` for no maximum. Defaults to None. - ratio (int, optional): Flexible ratio for the column (requires ``Table.expand`` or ``Table.width``). Defaults to None. - no_wrap (bool, optional): Set to ``True`` to disable wrapping of this column. - """ - - column = Column( - _index=len(self.columns), - header=header, - footer=footer, - header_style=header_style or "", - highlight=highlight if highlight is not None else self.highlight, - footer_style=footer_style or "", - style=style or "", - justify=justify, - vertical=vertical, - overflow=overflow, - width=width, - min_width=min_width, - max_width=max_width, - ratio=ratio, - no_wrap=no_wrap, - ) - self.columns.append(column) - - def add_row( - self, - *renderables: Optional["RenderableType"], - style: Optional[StyleType] = None, - end_section: bool = False, - ) -> None: - """Add a row of renderables. - - Args: - *renderables (None or renderable): Each cell in a row must be a renderable object (including str), - or ``None`` for a blank cell. - style (StyleType, optional): An optional style to apply to the entire row. Defaults to None. - end_section (bool, optional): End a section and draw a line. Defaults to False. - - Raises: - errors.NotRenderableError: If you add something that can't be rendered. - """ - - def add_cell(column: Column, renderable: "RenderableType") -> None: - column._cells.append(renderable) - - cell_renderables: List[Optional["RenderableType"]] = list(renderables) - - columns = self.columns - if len(cell_renderables) < len(columns): - cell_renderables = [ - *cell_renderables, - *[None] * (len(columns) - len(cell_renderables)), - ] - for index, renderable in enumerate(cell_renderables): - if index == len(columns): - column = Column(_index=index, highlight=self.highlight) - for _ in self.rows: - add_cell(column, Text("")) - self.columns.append(column) - else: - column = columns[index] - if renderable is None: - add_cell(column, "") - elif is_renderable(renderable): - add_cell(column, renderable) - else: - raise errors.NotRenderableError( - f"unable to render {type(renderable).__name__}; a string or other renderable object is required" - ) - self.rows.append(Row(style=style, end_section=end_section)) - - def add_section(self) -> None: - """Add a new section (draw a line after current row).""" - - if self.rows: - self.rows[-1].end_section = True - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if not self.columns: - yield Segment("\n") - return - - max_width = options.max_width - if self.width is not None: - max_width = self.width - - extra_width = self._extra_width - widths = self._calculate_column_widths( - console, options.update_width(max_width - extra_width) - ) - table_width = sum(widths) + extra_width - - render_options = options.update( - width=table_width, highlight=self.highlight, height=None - ) - - def render_annotation( - text: TextType, style: StyleType, justify: "JustifyMethod" = "center" - ) -> "RenderResult": - render_text = ( - console.render_str(text, style=style, highlight=False) - if isinstance(text, str) - else text - ) - return console.render( - render_text, options=render_options.update(justify=justify) - ) - - if self.title: - yield from render_annotation( - self.title, - style=Style.pick_first(self.title_style, "table.title"), - justify=self.title_justify, - ) - yield from self._render(console, render_options, widths) - if self.caption: - yield from render_annotation( - self.caption, - style=Style.pick_first(self.caption_style, "table.caption"), - justify=self.caption_justify, - ) - - def _calculate_column_widths( - self, console: "Console", options: "ConsoleOptions" - ) -> List[int]: - """Calculate the widths of each column, including padding, not including borders.""" - max_width = options.max_width - columns = self.columns - width_ranges = [ - self._measure_column(console, options, column) for column in columns - ] - widths = [_range.maximum or 1 for _range in width_ranges] - get_padding_width = self._get_padding_width - extra_width = self._extra_width - if self.expand: - ratios = [col.ratio or 0 for col in columns if col.flexible] - if any(ratios): - fixed_widths = [ - 0 if column.flexible else _range.maximum - for _range, column in zip(width_ranges, columns) - ] - flex_minimum = [ - (column.width or 1) + get_padding_width(column._index) - for column in columns - if column.flexible - ] - flexible_width = max_width - sum(fixed_widths) - flex_widths = ratio_distribute(flexible_width, ratios, flex_minimum) - iter_flex_widths = iter(flex_widths) - for index, column in enumerate(columns): - if column.flexible: - widths[index] = fixed_widths[index] + next(iter_flex_widths) - table_width = sum(widths) - - if table_width > max_width: - widths = self._collapse_widths( - widths, - [(column.width is None and not column.no_wrap) for column in columns], - max_width, - ) - table_width = sum(widths) - # last resort, reduce columns evenly - if table_width > max_width: - excess_width = table_width - max_width - widths = ratio_reduce(excess_width, [1] * len(widths), widths, widths) - table_width = sum(widths) - - width_ranges = [ - self._measure_column(console, options.update_width(width), column) - for width, column in zip(widths, columns) - ] - widths = [_range.maximum or 0 for _range in width_ranges] - - if (table_width < max_width and self.expand) or ( - self.min_width is not None and table_width < (self.min_width - extra_width) - ): - _max_width = ( - max_width - if self.min_width is None - else min(self.min_width - extra_width, max_width) - ) - pad_widths = ratio_distribute(_max_width - table_width, widths) - widths = [_width + pad for _width, pad in zip(widths, pad_widths)] - - return widths - - @classmethod - def _collapse_widths( - cls, widths: List[int], wrapable: List[bool], max_width: int - ) -> List[int]: - """Reduce widths so that the total is under max_width. - - Args: - widths (List[int]): List of widths. - wrapable (List[bool]): List of booleans that indicate if a column may shrink. - max_width (int): Maximum width to reduce to. - - Returns: - List[int]: A new list of widths. - """ - total_width = sum(widths) - excess_width = total_width - max_width - if any(wrapable): - while total_width and excess_width > 0: - max_column = max( - width for width, allow_wrap in zip(widths, wrapable) if allow_wrap - ) - second_max_column = max( - width if allow_wrap and width != max_column else 0 - for width, allow_wrap in zip(widths, wrapable) - ) - column_difference = max_column - second_max_column - ratios = [ - (1 if (width == max_column and allow_wrap) else 0) - for width, allow_wrap in zip(widths, wrapable) - ] - if not any(ratios) or not column_difference: - break - max_reduce = [min(excess_width, column_difference)] * len(widths) - widths = ratio_reduce(excess_width, ratios, max_reduce, widths) - - total_width = sum(widths) - excess_width = total_width - max_width - return widths - - def _get_cells( - self, console: "Console", column_index: int, column: Column - ) -> Iterable[_Cell]: - """Get all the cells with padding and optional header.""" - - collapse_padding = self.collapse_padding - pad_edge = self.pad_edge - padding = self.padding - any_padding = any(padding) - - first_column = column_index == 0 - last_column = column_index == len(self.columns) - 1 - - _padding_cache: Dict[Tuple[bool, bool], Tuple[int, int, int, int]] = {} - - def get_padding(first_row: bool, last_row: bool) -> Tuple[int, int, int, int]: - cached = _padding_cache.get((first_row, last_row)) - if cached: - return cached - top, right, bottom, left = padding - - if collapse_padding: - if not first_column: - left = max(0, left - right) - if not last_row: - bottom = max(0, top - bottom) - - if not pad_edge: - if first_column: - left = 0 - if last_column: - right = 0 - if first_row: - top = 0 - if last_row: - bottom = 0 - _padding = (top, right, bottom, left) - _padding_cache[(first_row, last_row)] = _padding - return _padding - - raw_cells: List[Tuple[StyleType, "RenderableType"]] = [] - _append = raw_cells.append - get_style = console.get_style - if self.show_header: - header_style = get_style(self.header_style or "") + get_style( - column.header_style - ) - _append((header_style, column.header)) - cell_style = get_style(column.style or "") - for cell in column.cells: - _append((cell_style, cell)) - if self.show_footer: - footer_style = get_style(self.footer_style or "") + get_style( - column.footer_style - ) - _append((footer_style, column.footer)) - - if any_padding: - _Padding = Padding - for first, last, (style, renderable) in loop_first_last(raw_cells): - yield _Cell( - style, - _Padding(renderable, get_padding(first, last)), - getattr(renderable, "vertical", None) or column.vertical, - ) - else: - for style, renderable in raw_cells: - yield _Cell( - style, - renderable, - getattr(renderable, "vertical", None) or column.vertical, - ) - - def _get_padding_width(self, column_index: int) -> int: - """Get extra width from padding.""" - _, pad_right, _, pad_left = self.padding - if self.collapse_padding: - if column_index > 0: - pad_left = max(0, pad_left - pad_right) - return pad_left + pad_right - - def _measure_column( - self, - console: "Console", - options: "ConsoleOptions", - column: Column, - ) -> Measurement: - """Get the minimum and maximum width of the column.""" - - max_width = options.max_width - if max_width < 1: - return Measurement(0, 0) - - padding_width = self._get_padding_width(column._index) - - if column.width is not None: - # Fixed width column - return Measurement( - column.width + padding_width, column.width + padding_width - ).with_maximum(max_width) - # Flexible column, we need to measure contents - min_widths: List[int] = [] - max_widths: List[int] = [] - append_min = min_widths.append - append_max = max_widths.append - get_render_width = Measurement.get - for cell in self._get_cells(console, column._index, column): - _min, _max = get_render_width(console, options, cell.renderable) - append_min(_min) - append_max(_max) - - measurement = Measurement( - max(min_widths) if min_widths else 1, - max(max_widths) if max_widths else max_width, - ).with_maximum(max_width) - measurement = measurement.clamp( - None if column.min_width is None else column.min_width + padding_width, - None if column.max_width is None else column.max_width + padding_width, - ) - return measurement - - def _render( - self, console: "Console", options: "ConsoleOptions", widths: List[int] - ) -> "RenderResult": - table_style = console.get_style(self.style or "") - - border_style = table_style + console.get_style(self.border_style or "") - _column_cells = ( - self._get_cells(console, column_index, column) - for column_index, column in enumerate(self.columns) - ) - row_cells: List[Tuple[_Cell, ...]] = list(zip(*_column_cells)) - _box = ( - self.box.substitute( - options, safe=pick_bool(self.safe_box, console.safe_box) - ) - if self.box - else None - ) - _box = _box.get_plain_headed_box() if _box and not self.show_header else _box - - new_line = Segment.line() - - columns = self.columns - show_header = self.show_header - show_footer = self.show_footer - show_edge = self.show_edge - show_lines = self.show_lines - leading = self.leading - - _Segment = Segment - if _box: - box_segments = [ - ( - _Segment(_box.head_left, border_style), - _Segment(_box.head_right, border_style), - _Segment(_box.head_vertical, border_style), - ), - ( - _Segment(_box.mid_left, border_style), - _Segment(_box.mid_right, border_style), - _Segment(_box.mid_vertical, border_style), - ), - ( - _Segment(_box.foot_left, border_style), - _Segment(_box.foot_right, border_style), - _Segment(_box.foot_vertical, border_style), - ), - ] - if show_edge: - yield _Segment(_box.get_top(widths), border_style) - yield new_line - else: - box_segments = [] - - get_row_style = self.get_row_style - get_style = console.get_style - - for index, (first, last, row_cell) in enumerate(loop_first_last(row_cells)): - header_row = first and show_header - footer_row = last and show_footer - row = ( - self.rows[index - show_header] - if (not header_row and not footer_row) - else None - ) - max_height = 1 - cells: List[List[List[Segment]]] = [] - if header_row or footer_row: - row_style = Style.null() - else: - row_style = get_style( - get_row_style(console, index - 1 if show_header else index) - ) - for width, cell, column in zip(widths, row_cell, columns): - render_options = options.update( - width=width, - justify=column.justify, - no_wrap=column.no_wrap, - overflow=column.overflow, - height=None, - highlight=column.highlight, - ) - lines = console.render_lines( - cell.renderable, - render_options, - style=get_style(cell.style) + row_style, - ) - max_height = max(max_height, len(lines)) - cells.append(lines) - - row_height = max(len(cell) for cell in cells) - - def align_cell( - cell: List[List[Segment]], - vertical: "VerticalAlignMethod", - width: int, - style: Style, - ) -> List[List[Segment]]: - if header_row: - vertical = "bottom" - elif footer_row: - vertical = "top" - - if vertical == "top": - return _Segment.align_top(cell, width, row_height, style) - elif vertical == "middle": - return _Segment.align_middle(cell, width, row_height, style) - return _Segment.align_bottom(cell, width, row_height, style) - - cells[:] = [ - _Segment.set_shape( - align_cell( - cell, - _cell.vertical, - width, - get_style(_cell.style) + row_style, - ), - width, - max_height, - ) - for width, _cell, cell, column in zip(widths, row_cell, cells, columns) - ] - - if _box: - if last and show_footer: - yield _Segment( - _box.get_row(widths, "foot", edge=show_edge), border_style - ) - yield new_line - left, right, _divider = box_segments[0 if first else (2 if last else 1)] - - # If the column divider is whitespace also style it with the row background - divider = ( - _divider - if _divider.text.strip() - else _Segment( - _divider.text, row_style.background_style + _divider.style - ) - ) - for line_no in range(max_height): - if show_edge: - yield left - for last_cell, rendered_cell in loop_last(cells): - yield from rendered_cell[line_no] - if not last_cell: - yield divider - if show_edge: - yield right - yield new_line - else: - for line_no in range(max_height): - for rendered_cell in cells: - yield from rendered_cell[line_no] - yield new_line - if _box and first and show_header: - yield _Segment( - _box.get_row(widths, "head", edge=show_edge), border_style - ) - yield new_line - end_section = row and row.end_section - if _box and (show_lines or leading or end_section): - if ( - not last - and not (show_footer and index >= len(row_cells) - 2) - and not (show_header and header_row) - ): - if leading: - yield _Segment( - _box.get_row(widths, "mid", edge=show_edge) * leading, - border_style, - ) - else: - yield _Segment( - _box.get_row(widths, "row", edge=show_edge), border_style - ) - yield new_line - - if _box and show_edge: - yield _Segment(_box.get_bottom(widths), border_style) - yield new_line - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - from pip._vendor.rich.highlighter import ReprHighlighter - from pip._vendor.rich.table import Table as Table - - from ._timer import timer - - with timer("Table render"): - table = Table( - title="Star Wars Movies", - caption="Rich example table", - caption_justify="right", - ) - - table.add_column( - "Released", header_style="bright_cyan", style="cyan", no_wrap=True - ) - table.add_column("Title", style="magenta") - table.add_column("Box Office", justify="right", style="green") - - table.add_row( - "Dec 20, 2019", - "Star Wars: The Rise of Skywalker", - "$952,110,690", - ) - table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347") - table.add_row( - "Dec 15, 2017", - "Star Wars Ep. V111: The Last Jedi", - "$1,332,539,889", - style="on black", - end_section=True, - ) - table.add_row( - "Dec 16, 2016", - "Rogue One: A Star Wars Story", - "$1,332,439,889", - ) - - def header(text: str) -> None: - console.print() - console.rule(highlight(text)) - console.print() - - console = Console() - highlight = ReprHighlighter() - header("Example Table") - console.print(table, justify="center") - - table.expand = True - header("expand=True") - console.print(table) - - table.width = 50 - header("width=50") - - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - header("row_styles=['dim', 'none']") - - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - table.leading = 1 - header("leading=1, row_styles=['dim', 'none']") - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - table.show_lines = True - table.leading = 0 - header("show_lines=True, row_styles=['dim', 'none']") - console.print(table, justify="center") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py deleted file mode 100644 index 565e9d9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py +++ /dev/null @@ -1,153 +0,0 @@ -from typing import List, Optional, Tuple - -from .color_triplet import ColorTriplet -from .palette import Palette - -_ColorTuple = Tuple[int, int, int] - - -class TerminalTheme: - """A color theme used when exporting console content. - - Args: - background (Tuple[int, int, int]): The background color. - foreground (Tuple[int, int, int]): The foreground (text) color. - normal (List[Tuple[int, int, int]]): A list of 8 normal intensity colors. - bright (List[Tuple[int, int, int]], optional): A list of 8 bright colors, or None - to repeat normal intensity. Defaults to None. - """ - - def __init__( - self, - background: _ColorTuple, - foreground: _ColorTuple, - normal: List[_ColorTuple], - bright: Optional[List[_ColorTuple]] = None, - ) -> None: - self.background_color = ColorTriplet(*background) - self.foreground_color = ColorTriplet(*foreground) - self.ansi_colors = Palette(normal + (bright or normal)) - - -DEFAULT_TERMINAL_THEME = TerminalTheme( - (255, 255, 255), - (0, 0, 0), - [ - (0, 0, 0), - (128, 0, 0), - (0, 128, 0), - (128, 128, 0), - (0, 0, 128), - (128, 0, 128), - (0, 128, 128), - (192, 192, 192), - ], - [ - (128, 128, 128), - (255, 0, 0), - (0, 255, 0), - (255, 255, 0), - (0, 0, 255), - (255, 0, 255), - (0, 255, 255), - (255, 255, 255), - ], -) - -MONOKAI = TerminalTheme( - (12, 12, 12), - (217, 217, 217), - [ - (26, 26, 26), - (244, 0, 95), - (152, 224, 36), - (253, 151, 31), - (157, 101, 255), - (244, 0, 95), - (88, 209, 235), - (196, 197, 181), - (98, 94, 76), - ], - [ - (244, 0, 95), - (152, 224, 36), - (224, 213, 97), - (157, 101, 255), - (244, 0, 95), - (88, 209, 235), - (246, 246, 239), - ], -) -DIMMED_MONOKAI = TerminalTheme( - (25, 25, 25), - (185, 188, 186), - [ - (58, 61, 67), - (190, 63, 72), - (135, 154, 59), - (197, 166, 53), - (79, 118, 161), - (133, 92, 141), - (87, 143, 164), - (185, 188, 186), - (136, 137, 135), - ], - [ - (251, 0, 31), - (15, 114, 47), - (196, 112, 51), - (24, 109, 227), - (251, 0, 103), - (46, 112, 109), - (253, 255, 185), - ], -) -NIGHT_OWLISH = TerminalTheme( - (255, 255, 255), - (64, 63, 83), - [ - (1, 22, 39), - (211, 66, 62), - (42, 162, 152), - (218, 170, 1), - (72, 118, 214), - (64, 63, 83), - (8, 145, 106), - (122, 129, 129), - (122, 129, 129), - ], - [ - (247, 110, 110), - (73, 208, 197), - (218, 194, 107), - (92, 167, 228), - (105, 112, 152), - (0, 201, 144), - (152, 159, 177), - ], -) - -SVG_EXPORT_THEME = TerminalTheme( - (41, 41, 41), - (197, 200, 198), - [ - (75, 78, 85), - (204, 85, 90), - (152, 168, 75), - (208, 179, 68), - (96, 138, 177), - (152, 114, 159), - (104, 160, 179), - (197, 200, 198), - (154, 155, 153), - ], - [ - (255, 38, 39), - (0, 130, 61), - (208, 132, 66), - (25, 132, 233), - (255, 44, 122), - (57, 130, 128), - (253, 253, 197), - ], -) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/text.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/text.py deleted file mode 100644 index 5a0c6b1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/text.py +++ /dev/null @@ -1,1361 +0,0 @@ -import re -from functools import partial, reduce -from math import gcd -from operator import itemgetter -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Pattern, - Tuple, - Union, -) - -from ._loop import loop_last -from ._pick import pick_bool -from ._wrap import divide_line -from .align import AlignMethod -from .cells import cell_len, set_cell_size -from .containers import Lines -from .control import strip_control_codes -from .emoji import EmojiVariant -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleType - -if TYPE_CHECKING: # pragma: no cover - from .console import Console, ConsoleOptions, JustifyMethod, OverflowMethod - -DEFAULT_JUSTIFY: "JustifyMethod" = "default" -DEFAULT_OVERFLOW: "OverflowMethod" = "fold" - - -_re_whitespace = re.compile(r"\s+$") - -TextType = Union[str, "Text"] -"""A plain string or a :class:`Text` instance.""" - -GetStyleCallable = Callable[[str], Optional[StyleType]] - - -class Span(NamedTuple): - """A marked up region in some text.""" - - start: int - """Span start index.""" - end: int - """Span end index.""" - style: Union[str, Style] - """Style associated with the span.""" - - def __repr__(self) -> str: - return f"Span({self.start}, {self.end}, {self.style!r})" - - def __bool__(self) -> bool: - return self.end > self.start - - def split(self, offset: int) -> Tuple["Span", Optional["Span"]]: - """Split a span in to 2 from a given offset.""" - - if offset < self.start: - return self, None - if offset >= self.end: - return self, None - - start, end, style = self - span1 = Span(start, min(end, offset), style) - span2 = Span(span1.end, end, style) - return span1, span2 - - def move(self, offset: int) -> "Span": - """Move start and end by a given offset. - - Args: - offset (int): Number of characters to add to start and end. - - Returns: - TextSpan: A new TextSpan with adjusted position. - """ - start, end, style = self - return Span(start + offset, end + offset, style) - - def right_crop(self, offset: int) -> "Span": - """Crop the span at the given offset. - - Args: - offset (int): A value between start and end. - - Returns: - Span: A new (possibly smaller) span. - """ - start, end, style = self - if offset >= end: - return self - return Span(start, min(offset, end), style) - - def extend(self, cells: int) -> "Span": - """Extend the span by the given number of cells. - - Args: - cells (int): Additional space to add to end of span. - - Returns: - Span: A span. - """ - if cells: - start, end, style = self - return Span(start, end + cells, style) - else: - return self - - -class Text(JupyterMixin): - """Text with color / style. - - Args: - text (str, optional): Default unstyled text. Defaults to "". - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - spans (List[Span], optional). A list of predefined style spans. Defaults to None. - """ - - __slots__ = [ - "_text", - "style", - "justify", - "overflow", - "no_wrap", - "end", - "tab_size", - "_spans", - "_length", - ] - - def __init__( - self, - text: str = "", - style: Union[str, Style] = "", - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: Optional[int] = None, - spans: Optional[List[Span]] = None, - ) -> None: - sanitized_text = strip_control_codes(text) - self._text = [sanitized_text] - self.style = style - self.justify: Optional["JustifyMethod"] = justify - self.overflow: Optional["OverflowMethod"] = overflow - self.no_wrap = no_wrap - self.end = end - self.tab_size = tab_size - self._spans: List[Span] = spans or [] - self._length: int = len(sanitized_text) - - def __len__(self) -> int: - return self._length - - def __bool__(self) -> bool: - return bool(self._length) - - def __str__(self) -> str: - return self.plain - - def __repr__(self) -> str: - return f"" - - def __add__(self, other: Any) -> "Text": - if isinstance(other, (str, Text)): - result = self.copy() - result.append(other) - return result - return NotImplemented - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Text): - return NotImplemented - return self.plain == other.plain and self._spans == other._spans - - def __contains__(self, other: object) -> bool: - if isinstance(other, str): - return other in self.plain - elif isinstance(other, Text): - return other.plain in self.plain - return False - - def __getitem__(self, slice: Union[int, slice]) -> "Text": - def get_text_at(offset: int) -> "Text": - _Span = Span - text = Text( - self.plain[offset], - spans=[ - _Span(0, 1, style) - for start, end, style in self._spans - if end > offset >= start - ], - end="", - ) - return text - - if isinstance(slice, int): - return get_text_at(slice) - else: - start, stop, step = slice.indices(len(self.plain)) - if step == 1: - lines = self.divide([start, stop]) - return lines[1] - else: - # This would be a bit of work to implement efficiently - # For now, its not required - raise TypeError("slices with step!=1 are not supported") - - @property - def cell_len(self) -> int: - """Get the number of cells required to render this text.""" - return cell_len(self.plain) - - @property - def markup(self) -> str: - """Get console markup to render this Text. - - Returns: - str: A string potentially creating markup tags. - """ - from .markup import escape - - output: List[str] = [] - - plain = self.plain - markup_spans = [ - (0, False, self.style), - *((span.start, False, span.style) for span in self._spans), - *((span.end, True, span.style) for span in self._spans), - (len(plain), True, self.style), - ] - markup_spans.sort(key=itemgetter(0, 1)) - position = 0 - append = output.append - for offset, closing, style in markup_spans: - if offset > position: - append(escape(plain[position:offset])) - position = offset - if style: - append(f"[/{style}]" if closing else f"[{style}]") - markup = "".join(output) - return markup - - @classmethod - def from_markup( - cls, - text: str, - *, - style: Union[str, Style] = "", - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - end: str = "\n", - ) -> "Text": - """Create Text instance from markup. - - Args: - text (str): A string containing console markup. - style (Union[str, Style], optional): Base style for text. Defaults to "". - emoji (bool, optional): Also render emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - - Returns: - Text: A Text instance with markup rendered. - """ - from .markup import render - - rendered_text = render(text, style, emoji=emoji, emoji_variant=emoji_variant) - rendered_text.justify = justify - rendered_text.overflow = overflow - rendered_text.end = end - return rendered_text - - @classmethod - def from_ansi( - cls, - text: str, - *, - style: Union[str, Style] = "", - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: Optional[int] = 8, - ) -> "Text": - """Create a Text object from a string containing ANSI escape codes. - - Args: - text (str): A string containing escape codes. - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - """ - from .ansi import AnsiDecoder - - joiner = Text( - "\n", - justify=justify, - overflow=overflow, - no_wrap=no_wrap, - end=end, - tab_size=tab_size, - style=style, - ) - decoder = AnsiDecoder() - result = joiner.join(line for line in decoder.decode(text)) - return result - - @classmethod - def styled( - cls, - text: str, - style: StyleType = "", - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - ) -> "Text": - """Construct a Text instance with a pre-applied styled. A style applied in this way won't be used - to pad the text when it is justified. - - Args: - text (str): A string containing console markup. - style (Union[str, Style]): Style to apply to the text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - - Returns: - Text: A text instance with a style applied to the entire string. - """ - styled_text = cls(text, justify=justify, overflow=overflow) - styled_text.stylize(style) - return styled_text - - @classmethod - def assemble( - cls, - *parts: Union[str, "Text", Tuple[str, StyleType]], - style: Union[str, Style] = "", - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: int = 8, - meta: Optional[Dict[str, Any]] = None, - ) -> "Text": - """Construct a text instance by combining a sequence of strings with optional styles. - The positional arguments should be either strings, or a tuple of string + style. - - Args: - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - meta (Dict[str, Any], optional). Meta data to apply to text, or None for no meta data. Default to None - - Returns: - Text: A new text instance. - """ - text = cls( - style=style, - justify=justify, - overflow=overflow, - no_wrap=no_wrap, - end=end, - tab_size=tab_size, - ) - append = text.append - _Text = Text - for part in parts: - if isinstance(part, (_Text, str)): - append(part) - else: - append(*part) - if meta: - text.apply_meta(meta) - return text - - @property - def plain(self) -> str: - """Get the text as a single string.""" - if len(self._text) != 1: - self._text[:] = ["".join(self._text)] - return self._text[0] - - @plain.setter - def plain(self, new_text: str) -> None: - """Set the text to a new value.""" - if new_text != self.plain: - sanitized_text = strip_control_codes(new_text) - self._text[:] = [sanitized_text] - old_length = self._length - self._length = len(sanitized_text) - if old_length > self._length: - self._trim_spans() - - @property - def spans(self) -> List[Span]: - """Get a reference to the internal list of spans.""" - return self._spans - - @spans.setter - def spans(self, spans: List[Span]) -> None: - """Set spans.""" - self._spans = spans[:] - - def blank_copy(self, plain: str = "") -> "Text": - """Return a new Text instance with copied metadata (but not the string or spans).""" - copy_self = Text( - plain, - style=self.style, - justify=self.justify, - overflow=self.overflow, - no_wrap=self.no_wrap, - end=self.end, - tab_size=self.tab_size, - ) - return copy_self - - def copy(self) -> "Text": - """Return a copy of this instance.""" - copy_self = Text( - self.plain, - style=self.style, - justify=self.justify, - overflow=self.overflow, - no_wrap=self.no_wrap, - end=self.end, - tab_size=self.tab_size, - ) - copy_self._spans[:] = self._spans - return copy_self - - def stylize( - self, - style: Union[str, Style], - start: int = 0, - end: Optional[int] = None, - ) -> None: - """Apply a style to the text, or a portion of the text. - - Args: - style (Union[str, Style]): Style instance or style definition to apply. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - """ - if style: - length = len(self) - if start < 0: - start = length + start - if end is None: - end = length - if end < 0: - end = length + end - if start >= length or end <= start: - # Span not in text or not valid - return - self._spans.append(Span(start, min(length, end), style)) - - def stylize_before( - self, - style: Union[str, Style], - start: int = 0, - end: Optional[int] = None, - ) -> None: - """Apply a style to the text, or a portion of the text. Styles will be applied before other styles already present. - - Args: - style (Union[str, Style]): Style instance or style definition to apply. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - """ - if style: - length = len(self) - if start < 0: - start = length + start - if end is None: - end = length - if end < 0: - end = length + end - if start >= length or end <= start: - # Span not in text or not valid - return - self._spans.insert(0, Span(start, min(length, end), style)) - - def apply_meta( - self, meta: Dict[str, Any], start: int = 0, end: Optional[int] = None - ) -> None: - """Apply metadata to the text, or a portion of the text. - - Args: - meta (Dict[str, Any]): A dict of meta information. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - - """ - style = Style.from_meta(meta) - self.stylize(style, start=start, end=end) - - def on(self, meta: Optional[Dict[str, Any]] = None, **handlers: Any) -> "Text": - """Apply event handlers (used by Textual project). - - Example: - >>> from rich.text import Text - >>> text = Text("hello world") - >>> text.on(click="view.toggle('world')") - - Args: - meta (Dict[str, Any]): Mapping of meta information. - **handlers: Keyword args are prefixed with "@" to defined handlers. - - Returns: - Text: Self is returned to method may be chained. - """ - meta = {} if meta is None else meta - meta.update({f"@{key}": value for key, value in handlers.items()}) - self.stylize(Style.from_meta(meta)) - return self - - def remove_suffix(self, suffix: str) -> None: - """Remove a suffix if it exists. - - Args: - suffix (str): Suffix to remove. - """ - if self.plain.endswith(suffix): - self.right_crop(len(suffix)) - - def get_style_at_offset(self, console: "Console", offset: int) -> Style: - """Get the style of a character at give offset. - - Args: - console (~Console): Console where text will be rendered. - offset (int): Offset in to text (negative indexing supported) - - Returns: - Style: A Style instance. - """ - # TODO: This is a little inefficient, it is only used by full justify - if offset < 0: - offset = len(self) + offset - get_style = console.get_style - style = get_style(self.style).copy() - for start, end, span_style in self._spans: - if end > offset >= start: - style += get_style(span_style, default="") - return style - - def extend_style(self, spaces: int) -> None: - """Extend the Text given number of spaces where the spaces have the same style as the last character. - - Args: - spaces (int): Number of spaces to add to the Text. - """ - if spaces <= 0: - return - spans = self.spans - new_spaces = " " * spaces - if spans: - end_offset = len(self) - self._spans[:] = [ - span.extend(spaces) if span.end >= end_offset else span - for span in spans - ] - self._text.append(new_spaces) - self._length += spaces - else: - self.plain += new_spaces - - def highlight_regex( - self, - re_highlight: Union[Pattern[str], str], - style: Optional[Union[GetStyleCallable, StyleType]] = None, - *, - style_prefix: str = "", - ) -> int: - """Highlight text with a regular expression, where group names are - translated to styles. - - Args: - re_highlight (Union[re.Pattern, str]): A regular expression object or string. - style (Union[GetStyleCallable, StyleType]): Optional style to apply to whole match, or a callable - which accepts the matched text and returns a style. Defaults to None. - style_prefix (str, optional): Optional prefix to add to style group names. - - Returns: - int: Number of regex matches - """ - count = 0 - append_span = self._spans.append - _Span = Span - plain = self.plain - if isinstance(re_highlight, str): - re_highlight = re.compile(re_highlight) - for match in re_highlight.finditer(plain): - get_span = match.span - if style: - start, end = get_span() - match_style = style(plain[start:end]) if callable(style) else style - if match_style is not None and end > start: - append_span(_Span(start, end, match_style)) - - count += 1 - for name in match.groupdict().keys(): - start, end = get_span(name) - if start != -1 and end > start: - append_span(_Span(start, end, f"{style_prefix}{name}")) - return count - - def highlight_words( - self, - words: Iterable[str], - style: Union[str, Style], - *, - case_sensitive: bool = True, - ) -> int: - """Highlight words with a style. - - Args: - words (Iterable[str]): Words to highlight. - style (Union[str, Style]): Style to apply. - case_sensitive (bool, optional): Enable case sensitive matching. Defaults to True. - - Returns: - int: Number of words highlighted. - """ - re_words = "|".join(re.escape(word) for word in words) - add_span = self._spans.append - count = 0 - _Span = Span - for match in re.finditer( - re_words, self.plain, flags=0 if case_sensitive else re.IGNORECASE - ): - start, end = match.span(0) - add_span(_Span(start, end, style)) - count += 1 - return count - - def rstrip(self) -> None: - """Strip whitespace from end of text.""" - self.plain = self.plain.rstrip() - - def rstrip_end(self, size: int) -> None: - """Remove whitespace beyond a certain width at the end of the text. - - Args: - size (int): The desired size of the text. - """ - text_length = len(self) - if text_length > size: - excess = text_length - size - whitespace_match = _re_whitespace.search(self.plain) - if whitespace_match is not None: - whitespace_count = len(whitespace_match.group(0)) - self.right_crop(min(whitespace_count, excess)) - - def set_length(self, new_length: int) -> None: - """Set new length of the text, clipping or padding is required.""" - length = len(self) - if length != new_length: - if length < new_length: - self.pad_right(new_length - length) - else: - self.right_crop(length - new_length) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> Iterable[Segment]: - tab_size: int = console.tab_size if self.tab_size is None else self.tab_size - justify = self.justify or options.justify or DEFAULT_JUSTIFY - - overflow = self.overflow or options.overflow or DEFAULT_OVERFLOW - - lines = self.wrap( - console, - options.max_width, - justify=justify, - overflow=overflow, - tab_size=tab_size or 8, - no_wrap=pick_bool(self.no_wrap, options.no_wrap, False), - ) - all_lines = Text("\n").join(lines) - yield from all_lines.render(console, end=self.end) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - text = self.plain - lines = text.splitlines() - max_text_width = max(cell_len(line) for line in lines) if lines else 0 - words = text.split() - min_text_width = ( - max(cell_len(word) for word in words) if words else max_text_width - ) - return Measurement(min_text_width, max_text_width) - - def render(self, console: "Console", end: str = "") -> Iterable["Segment"]: - """Render the text as Segments. - - Args: - console (Console): Console instance. - end (Optional[str], optional): Optional end character. - - Returns: - Iterable[Segment]: Result of render that may be written to the console. - """ - _Segment = Segment - text = self.plain - if not self._spans: - yield Segment(text) - if end: - yield _Segment(end) - return - get_style = partial(console.get_style, default=Style.null()) - - enumerated_spans = list(enumerate(self._spans, 1)) - style_map = {index: get_style(span.style) for index, span in enumerated_spans} - style_map[0] = get_style(self.style) - - spans = [ - (0, False, 0), - *((span.start, False, index) for index, span in enumerated_spans), - *((span.end, True, index) for index, span in enumerated_spans), - (len(text), True, 0), - ] - spans.sort(key=itemgetter(0, 1)) - - stack: List[int] = [] - stack_append = stack.append - stack_pop = stack.remove - - style_cache: Dict[Tuple[Style, ...], Style] = {} - style_cache_get = style_cache.get - combine = Style.combine - - def get_current_style() -> Style: - """Construct current style from stack.""" - styles = tuple(style_map[_style_id] for _style_id in sorted(stack)) - cached_style = style_cache_get(styles) - if cached_style is not None: - return cached_style - current_style = combine(styles) - style_cache[styles] = current_style - return current_style - - for (offset, leaving, style_id), (next_offset, _, _) in zip(spans, spans[1:]): - if leaving: - stack_pop(style_id) - else: - stack_append(style_id) - if next_offset > offset: - yield _Segment(text[offset:next_offset], get_current_style()) - if end: - yield _Segment(end) - - def join(self, lines: Iterable["Text"]) -> "Text": - """Join text together with this instance as the separator. - - Args: - lines (Iterable[Text]): An iterable of Text instances to join. - - Returns: - Text: A new text instance containing join text. - """ - - new_text = self.blank_copy() - - def iter_text() -> Iterable["Text"]: - if self.plain: - for last, line in loop_last(lines): - yield line - if not last: - yield self - else: - yield from lines - - extend_text = new_text._text.extend - append_span = new_text._spans.append - extend_spans = new_text._spans.extend - offset = 0 - _Span = Span - - for text in iter_text(): - extend_text(text._text) - if text.style: - append_span(_Span(offset, offset + len(text), text.style)) - extend_spans( - _Span(offset + start, offset + end, style) - for start, end, style in text._spans - ) - offset += len(text) - new_text._length = offset - return new_text - - def expand_tabs(self, tab_size: Optional[int] = None) -> None: - """Converts tabs to spaces. - - Args: - tab_size (int, optional): Size of tabs. Defaults to 8. - - """ - if "\t" not in self.plain: - return - if tab_size is None: - tab_size = self.tab_size - if tab_size is None: - tab_size = 8 - - new_text: List[Text] = [] - append = new_text.append - - for line in self.split("\n", include_separator=True): - if "\t" not in line.plain: - append(line) - else: - cell_position = 0 - parts = line.split("\t", include_separator=True) - for part in parts: - if part.plain.endswith("\t"): - part._text[-1] = part._text[-1][:-1] + " " - cell_position += part.cell_len - tab_remainder = cell_position % tab_size - if tab_remainder: - spaces = tab_size - tab_remainder - part.extend_style(spaces) - cell_position += spaces - else: - cell_position += part.cell_len - append(part) - - result = Text("").join(new_text) - - self._text = [result.plain] - self._length = len(self.plain) - self._spans[:] = result._spans - - def truncate( - self, - max_width: int, - *, - overflow: Optional["OverflowMethod"] = None, - pad: bool = False, - ) -> None: - """Truncate text if it is longer that a given width. - - Args: - max_width (int): Maximum number of characters in text. - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None, to use self.overflow. - pad (bool, optional): Pad with spaces if the length is less than max_width. Defaults to False. - """ - _overflow = overflow or self.overflow or DEFAULT_OVERFLOW - if _overflow != "ignore": - length = cell_len(self.plain) - if length > max_width: - if _overflow == "ellipsis": - self.plain = set_cell_size(self.plain, max_width - 1) + "…" - else: - self.plain = set_cell_size(self.plain, max_width) - if pad and length < max_width: - spaces = max_width - length - self._text = [f"{self.plain}{' ' * spaces}"] - self._length = len(self.plain) - - def _trim_spans(self) -> None: - """Remove or modify any spans that are over the end of the text.""" - max_offset = len(self.plain) - _Span = Span - self._spans[:] = [ - ( - span - if span.end < max_offset - else _Span(span.start, min(max_offset, span.end), span.style) - ) - for span in self._spans - if span.start < max_offset - ] - - def pad(self, count: int, character: str = " ") -> None: - """Pad left and right with a given number of characters. - - Args: - count (int): Width of padding. - character (str): The character to pad with. Must be a string of length 1. - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - pad_characters = character * count - self.plain = f"{pad_characters}{self.plain}{pad_characters}" - _Span = Span - self._spans[:] = [ - _Span(start + count, end + count, style) - for start, end, style in self._spans - ] - - def pad_left(self, count: int, character: str = " ") -> None: - """Pad the left with a given character. - - Args: - count (int): Number of characters to pad. - character (str, optional): Character to pad with. Defaults to " ". - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - self.plain = f"{character * count}{self.plain}" - _Span = Span - self._spans[:] = [ - _Span(start + count, end + count, style) - for start, end, style in self._spans - ] - - def pad_right(self, count: int, character: str = " ") -> None: - """Pad the right with a given character. - - Args: - count (int): Number of characters to pad. - character (str, optional): Character to pad with. Defaults to " ". - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - self.plain = f"{self.plain}{character * count}" - - def align(self, align: AlignMethod, width: int, character: str = " ") -> None: - """Align text to a given width. - - Args: - align (AlignMethod): One of "left", "center", or "right". - width (int): Desired width. - character (str, optional): Character to pad with. Defaults to " ". - """ - self.truncate(width) - excess_space = width - cell_len(self.plain) - if excess_space: - if align == "left": - self.pad_right(excess_space, character) - elif align == "center": - left = excess_space // 2 - self.pad_left(left, character) - self.pad_right(excess_space - left, character) - else: - self.pad_left(excess_space, character) - - def append( - self, text: Union["Text", str], style: Optional[Union[str, "Style"]] = None - ) -> "Text": - """Add text with an optional style. - - Args: - text (Union[Text, str]): A str or Text to append. - style (str, optional): A style name. Defaults to None. - - Returns: - Text: Returns self for chaining. - """ - - if not isinstance(text, (str, Text)): - raise TypeError("Only str or Text can be appended to Text") - - if len(text): - if isinstance(text, str): - sanitized_text = strip_control_codes(text) - self._text.append(sanitized_text) - offset = len(self) - text_length = len(sanitized_text) - if style: - self._spans.append(Span(offset, offset + text_length, style)) - self._length += text_length - elif isinstance(text, Text): - _Span = Span - if style is not None: - raise ValueError( - "style must not be set when appending Text instance" - ) - text_length = self._length - if text.style: - self._spans.append( - _Span(text_length, text_length + len(text), text.style) - ) - self._text.append(text.plain) - self._spans.extend( - _Span(start + text_length, end + text_length, style) - for start, end, style in text._spans.copy() - ) - self._length += len(text) - return self - - def append_text(self, text: "Text") -> "Text": - """Append another Text instance. This method is more performant that Text.append, but - only works for Text. - - Args: - text (Text): The Text instance to append to this instance. - - Returns: - Text: Returns self for chaining. - """ - _Span = Span - text_length = self._length - if text.style: - self._spans.append(_Span(text_length, text_length + len(text), text.style)) - self._text.append(text.plain) - self._spans.extend( - _Span(start + text_length, end + text_length, style) - for start, end, style in text._spans.copy() - ) - self._length += len(text) - return self - - def append_tokens( - self, tokens: Iterable[Tuple[str, Optional[StyleType]]] - ) -> "Text": - """Append iterable of str and style. Style may be a Style instance or a str style definition. - - Args: - tokens (Iterable[Tuple[str, Optional[StyleType]]]): An iterable of tuples containing str content and style. - - Returns: - Text: Returns self for chaining. - """ - append_text = self._text.append - append_span = self._spans.append - _Span = Span - offset = len(self) - for content, style in tokens: - content = strip_control_codes(content) - append_text(content) - if style: - append_span(_Span(offset, offset + len(content), style)) - offset += len(content) - self._length = offset - return self - - def copy_styles(self, text: "Text") -> None: - """Copy styles from another Text instance. - - Args: - text (Text): A Text instance to copy styles from, must be the same length. - """ - self._spans.extend(text._spans) - - def split( - self, - separator: str = "\n", - *, - include_separator: bool = False, - allow_blank: bool = False, - ) -> Lines: - """Split rich text in to lines, preserving styles. - - Args: - separator (str, optional): String to split on. Defaults to "\\\\n". - include_separator (bool, optional): Include the separator in the lines. Defaults to False. - allow_blank (bool, optional): Return a blank line if the text ends with a separator. Defaults to False. - - Returns: - List[RichText]: A list of rich text, one per line of the original. - """ - assert separator, "separator must not be empty" - - text = self.plain - if separator not in text: - return Lines([self.copy()]) - - if include_separator: - lines = self.divide( - match.end() for match in re.finditer(re.escape(separator), text) - ) - else: - - def flatten_spans() -> Iterable[int]: - for match in re.finditer(re.escape(separator), text): - start, end = match.span() - yield start - yield end - - lines = Lines( - line for line in self.divide(flatten_spans()) if line.plain != separator - ) - - if not allow_blank and text.endswith(separator): - lines.pop() - - return lines - - def divide(self, offsets: Iterable[int]) -> Lines: - """Divide text in to a number of lines at given offsets. - - Args: - offsets (Iterable[int]): Offsets used to divide text. - - Returns: - Lines: New RichText instances between offsets. - """ - _offsets = list(offsets) - - if not _offsets: - return Lines([self.copy()]) - - text = self.plain - text_length = len(text) - divide_offsets = [0, *_offsets, text_length] - line_ranges = list(zip(divide_offsets, divide_offsets[1:])) - - style = self.style - justify = self.justify - overflow = self.overflow - _Text = Text - new_lines = Lines( - _Text( - text[start:end], - style=style, - justify=justify, - overflow=overflow, - ) - for start, end in line_ranges - ) - if not self._spans: - return new_lines - - _line_appends = [line._spans.append for line in new_lines._lines] - line_count = len(line_ranges) - _Span = Span - - for span_start, span_end, style in self._spans: - lower_bound = 0 - upper_bound = line_count - start_line_no = (lower_bound + upper_bound) // 2 - - while True: - line_start, line_end = line_ranges[start_line_no] - if span_start < line_start: - upper_bound = start_line_no - 1 - elif span_start > line_end: - lower_bound = start_line_no + 1 - else: - break - start_line_no = (lower_bound + upper_bound) // 2 - - if span_end < line_end: - end_line_no = start_line_no - else: - end_line_no = lower_bound = start_line_no - upper_bound = line_count - - while True: - line_start, line_end = line_ranges[end_line_no] - if span_end < line_start: - upper_bound = end_line_no - 1 - elif span_end > line_end: - lower_bound = end_line_no + 1 - else: - break - end_line_no = (lower_bound + upper_bound) // 2 - - for line_no in range(start_line_no, end_line_no + 1): - line_start, line_end = line_ranges[line_no] - new_start = max(0, span_start - line_start) - new_end = min(span_end - line_start, line_end - line_start) - if new_end > new_start: - _line_appends[line_no](_Span(new_start, new_end, style)) - - return new_lines - - def right_crop(self, amount: int = 1) -> None: - """Remove a number of characters from the end of the text.""" - max_offset = len(self.plain) - amount - _Span = Span - self._spans[:] = [ - ( - span - if span.end < max_offset - else _Span(span.start, min(max_offset, span.end), span.style) - ) - for span in self._spans - if span.start < max_offset - ] - self._text = [self.plain[:-amount]] - self._length -= amount - - def wrap( - self, - console: "Console", - width: int, - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - tab_size: int = 8, - no_wrap: Optional[bool] = None, - ) -> Lines: - """Word wrap the text. - - Args: - console (Console): Console instance. - width (int): Number of cells available per line. - justify (str, optional): Justify method: "default", "left", "center", "full", "right". Defaults to "default". - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None. - tab_size (int, optional): Default tab size. Defaults to 8. - no_wrap (bool, optional): Disable wrapping, Defaults to False. - - Returns: - Lines: Number of lines. - """ - wrap_justify = justify or self.justify or DEFAULT_JUSTIFY - wrap_overflow = overflow or self.overflow or DEFAULT_OVERFLOW - - no_wrap = pick_bool(no_wrap, self.no_wrap, False) or overflow == "ignore" - - lines = Lines() - for line in self.split(allow_blank=True): - if "\t" in line: - line.expand_tabs(tab_size) - if no_wrap: - new_lines = Lines([line]) - else: - offsets = divide_line(str(line), width, fold=wrap_overflow == "fold") - new_lines = line.divide(offsets) - for line in new_lines: - line.rstrip_end(width) - if wrap_justify: - new_lines.justify( - console, width, justify=wrap_justify, overflow=wrap_overflow - ) - for line in new_lines: - line.truncate(width, overflow=wrap_overflow) - lines.extend(new_lines) - return lines - - def fit(self, width: int) -> Lines: - """Fit the text in to given width by chopping in to lines. - - Args: - width (int): Maximum characters in a line. - - Returns: - Lines: Lines container. - """ - lines: Lines = Lines() - append = lines.append - for line in self.split(): - line.set_length(width) - append(line) - return lines - - def detect_indentation(self) -> int: - """Auto-detect indentation of code. - - Returns: - int: Number of spaces used to indent code. - """ - - _indentations = { - len(match.group(1)) - for match in re.finditer(r"^( *)(.*)$", self.plain, flags=re.MULTILINE) - } - - try: - indentation = ( - reduce(gcd, [indent for indent in _indentations if not indent % 2]) or 1 - ) - except TypeError: - indentation = 1 - - return indentation - - def with_indent_guides( - self, - indent_size: Optional[int] = None, - *, - character: str = "│", - style: StyleType = "dim green", - ) -> "Text": - """Adds indent guide lines to text. - - Args: - indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None. - character (str, optional): Character to use for indentation. Defaults to "│". - style (Union[Style, str], optional): Style of indent guides. - - Returns: - Text: New text with indentation guides. - """ - - _indent_size = self.detect_indentation() if indent_size is None else indent_size - - text = self.copy() - text.expand_tabs() - indent_line = f"{character}{' ' * (_indent_size - 1)}" - - re_indent = re.compile(r"^( *)(.*)$") - new_lines: List[Text] = [] - add_line = new_lines.append - blank_lines = 0 - for line in text.split(allow_blank=True): - match = re_indent.match(line.plain) - if not match or not match.group(2): - blank_lines += 1 - continue - indent = match.group(1) - full_indents, remaining_space = divmod(len(indent), _indent_size) - new_indent = f"{indent_line * full_indents}{' ' * remaining_space}" - line.plain = new_indent + line.plain[len(new_indent) :] - line.stylize(style, 0, len(new_indent)) - if blank_lines: - new_lines.extend([Text(new_indent, style=style)] * blank_lines) - blank_lines = 0 - add_line(line) - if blank_lines: - new_lines.extend([Text("", style=style)] * blank_lines) - - new_text = text.blank_copy("\n").join(new_lines) - return new_text - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - text = Text( - """\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n""" - ) - text.highlight_words(["Lorem"], "bold") - text.highlight_words(["ipsum"], "italic") - - console = Console() - - console.rule("justify='left'") - console.print(text, style="red") - console.print() - - console.rule("justify='center'") - console.print(text, style="green", justify="center") - console.print() - - console.rule("justify='right'") - console.print(text, style="blue", justify="right") - console.print() - - console.rule("justify='full'") - console.print(text, style="magenta", justify="full") - console.print() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/theme.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/theme.py deleted file mode 100644 index 227f1d8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/theme.py +++ /dev/null @@ -1,115 +0,0 @@ -import configparser -from typing import IO, Dict, List, Mapping, Optional - -from .default_styles import DEFAULT_STYLES -from .style import Style, StyleType - - -class Theme: - """A container for style information, used by :class:`~rich.console.Console`. - - Args: - styles (Dict[str, Style], optional): A mapping of style names on to styles. Defaults to None for a theme with no styles. - inherit (bool, optional): Inherit default styles. Defaults to True. - """ - - styles: Dict[str, Style] - - def __init__( - self, styles: Optional[Mapping[str, StyleType]] = None, inherit: bool = True - ): - self.styles = DEFAULT_STYLES.copy() if inherit else {} - if styles is not None: - self.styles.update( - { - name: style if isinstance(style, Style) else Style.parse(style) - for name, style in styles.items() - } - ) - - @property - def config(self) -> str: - """Get contents of a config file for this theme.""" - config = "[styles]\n" + "\n".join( - f"{name} = {style}" for name, style in sorted(self.styles.items()) - ) - return config - - @classmethod - def from_file( - cls, config_file: IO[str], source: Optional[str] = None, inherit: bool = True - ) -> "Theme": - """Load a theme from a text mode file. - - Args: - config_file (IO[str]): An open conf file. - source (str, optional): The filename of the open file. Defaults to None. - inherit (bool, optional): Inherit default styles. Defaults to True. - - Returns: - Theme: A New theme instance. - """ - config = configparser.ConfigParser() - config.read_file(config_file, source=source) - styles = {name: Style.parse(value) for name, value in config.items("styles")} - theme = Theme(styles, inherit=inherit) - return theme - - @classmethod - def read( - cls, path: str, inherit: bool = True, encoding: Optional[str] = None - ) -> "Theme": - """Read a theme from a path. - - Args: - path (str): Path to a config file readable by Python configparser module. - inherit (bool, optional): Inherit default styles. Defaults to True. - encoding (str, optional): Encoding of the config file. Defaults to None. - - Returns: - Theme: A new theme instance. - """ - with open(path, encoding=encoding) as config_file: - return cls.from_file(config_file, source=path, inherit=inherit) - - -class ThemeStackError(Exception): - """Base exception for errors related to the theme stack.""" - - -class ThemeStack: - """A stack of themes. - - Args: - theme (Theme): A theme instance - """ - - def __init__(self, theme: Theme) -> None: - self._entries: List[Dict[str, Style]] = [theme.styles] - self.get = self._entries[-1].get - - def push_theme(self, theme: Theme, inherit: bool = True) -> None: - """Push a theme on the top of the stack. - - Args: - theme (Theme): A Theme instance. - inherit (boolean, optional): Inherit styles from current top of stack. - """ - styles: Dict[str, Style] - styles = ( - {**self._entries[-1], **theme.styles} if inherit else theme.styles.copy() - ) - self._entries.append(styles) - self.get = self._entries[-1].get - - def pop_theme(self) -> None: - """Pop (and discard) the top-most theme.""" - if len(self._entries) == 1: - raise ThemeStackError("Unable to pop base theme") - self._entries.pop() - self.get = self._entries[-1].get - - -if __name__ == "__main__": # pragma: no cover - theme = Theme() - print(theme.config) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/themes.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/themes.py deleted file mode 100644 index bf6db10..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/themes.py +++ /dev/null @@ -1,5 +0,0 @@ -from .default_styles import DEFAULT_STYLES -from .theme import Theme - - -DEFAULT = Theme(DEFAULT_STYLES) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py deleted file mode 100644 index 28d742b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py +++ /dev/null @@ -1,797 +0,0 @@ -import inspect -import linecache -import os -import sys -from dataclasses import dataclass, field -from itertools import islice -from traceback import walk_tb -from types import ModuleType, TracebackType -from typing import ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Sequence, - Tuple, - Type, - Union, -) - -from pip._vendor.pygments.lexers import guess_lexer_for_filename -from pip._vendor.pygments.token import Comment, Keyword, Name, Number, Operator, String -from pip._vendor.pygments.token import Text as TextToken -from pip._vendor.pygments.token import Token -from pip._vendor.pygments.util import ClassNotFound - -from . import pretty -from ._loop import loop_last -from .columns import Columns -from .console import Console, ConsoleOptions, ConsoleRenderable, RenderResult, group -from .constrain import Constrain -from .highlighter import RegexHighlighter, ReprHighlighter -from .panel import Panel -from .scope import render_scope -from .style import Style -from .syntax import Syntax -from .text import Text -from .theme import Theme - -WINDOWS = sys.platform == "win32" - -LOCALS_MAX_LENGTH = 10 -LOCALS_MAX_STRING = 80 - - -def install( - *, - console: Optional[Console] = None, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: Optional[bool] = None, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, -) -> Callable[[Type[BaseException], BaseException, Optional[TracebackType]], Any]: - """Install a rich traceback handler. - - Once installed, any tracebacks will be printed with syntax highlighting and rich formatting. - - - Args: - console (Optional[Console], optional): Console to write exception to. Default uses internal Console instance. - width (Optional[int], optional): Width (in characters) of traceback. Defaults to 100. - code_width (Optional[int], optional): Code width (in characters) of traceback. Defaults to 88. - extra_lines (int, optional): Extra lines of code. Defaults to 3. - theme (Optional[str], optional): Pygments theme to use in traceback. Defaults to ``None`` which will pick - a theme appropriate for the platform. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - - Returns: - Callable: The previous exception handler that was replaced. - - """ - traceback_console = Console(stderr=True) if console is None else console - - locals_hide_sunder = ( - True - if (traceback_console.is_jupyter and locals_hide_sunder is None) - else locals_hide_sunder - ) - - def excepthook( - type_: Type[BaseException], - value: BaseException, - traceback: Optional[TracebackType], - ) -> None: - traceback_console.print( - Traceback.from_exception( - type_, - value, - traceback, - width=width, - code_width=code_width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=bool(locals_hide_sunder), - indent_guides=indent_guides, - suppress=suppress, - max_frames=max_frames, - ) - ) - - def ipy_excepthook_closure(ip: Any) -> None: # pragma: no cover - tb_data = {} # store information about showtraceback call - default_showtraceback = ip.showtraceback # keep reference of default traceback - - def ipy_show_traceback(*args: Any, **kwargs: Any) -> None: - """wrap the default ip.showtraceback to store info for ip._showtraceback""" - nonlocal tb_data - tb_data = kwargs - default_showtraceback(*args, **kwargs) - - def ipy_display_traceback( - *args: Any, is_syntax: bool = False, **kwargs: Any - ) -> None: - """Internally called traceback from ip._showtraceback""" - nonlocal tb_data - exc_tuple = ip._get_exc_info() - - # do not display trace on syntax error - tb: Optional[TracebackType] = None if is_syntax else exc_tuple[2] - - # determine correct tb_offset - compiled = tb_data.get("running_compiled_code", False) - tb_offset = tb_data.get("tb_offset", 1 if compiled else 0) - # remove ipython internal frames from trace with tb_offset - for _ in range(tb_offset): - if tb is None: - break - tb = tb.tb_next - - excepthook(exc_tuple[0], exc_tuple[1], tb) - tb_data = {} # clear data upon usage - - # replace _showtraceback instead of showtraceback to allow ipython features such as debugging to work - # this is also what the ipython docs recommends to modify when subclassing InteractiveShell - ip._showtraceback = ipy_display_traceback - # add wrapper to capture tb_data - ip.showtraceback = ipy_show_traceback - ip.showsyntaxerror = lambda *args, **kwargs: ipy_display_traceback( - *args, is_syntax=True, **kwargs - ) - - try: # pragma: no cover - # if within ipython, use customized traceback - ip = get_ipython() # type: ignore[name-defined] - ipy_excepthook_closure(ip) - return sys.excepthook - except Exception: - # otherwise use default system hook - old_excepthook = sys.excepthook - sys.excepthook = excepthook - return old_excepthook - - -@dataclass -class Frame: - filename: str - lineno: int - name: str - line: str = "" - locals: Optional[Dict[str, pretty.Node]] = None - last_instruction: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] = None - - -@dataclass -class _SyntaxError: - offset: int - filename: str - line: str - lineno: int - msg: str - - -@dataclass -class Stack: - exc_type: str - exc_value: str - syntax_error: Optional[_SyntaxError] = None - is_cause: bool = False - frames: List[Frame] = field(default_factory=list) - - -@dataclass -class Trace: - stacks: List[Stack] - - -class PathHighlighter(RegexHighlighter): - highlights = [r"(?P.*/)(?P.+)"] - - -class Traceback: - """A Console renderable that renders a traceback. - - Args: - trace (Trace, optional): A `Trace` object produced from `extract`. Defaults to None, which uses - the last exception. - width (Optional[int], optional): Number of characters used to traceback. Defaults to 100. - code_width (Optional[int], optional): Number of code characters used to traceback. Defaults to 88. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - - """ - - LEXERS = { - "": "text", - ".py": "python", - ".pxd": "cython", - ".pyx": "cython", - ".pxi": "pyrex", - } - - def __init__( - self, - trace: Optional[Trace] = None, - *, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ): - if trace is None: - exc_type, exc_value, traceback = sys.exc_info() - if exc_type is None or exc_value is None or traceback is None: - raise ValueError( - "Value for 'trace' required if not called in except: block" - ) - trace = self.extract( - exc_type, exc_value, traceback, show_locals=show_locals - ) - self.trace = trace - self.width = width - self.code_width = code_width - self.extra_lines = extra_lines - self.theme = Syntax.get_theme(theme or "ansi_dark") - self.word_wrap = word_wrap - self.show_locals = show_locals - self.indent_guides = indent_guides - self.locals_max_length = locals_max_length - self.locals_max_string = locals_max_string - self.locals_hide_dunder = locals_hide_dunder - self.locals_hide_sunder = locals_hide_sunder - - self.suppress: Sequence[str] = [] - for suppress_entity in suppress: - if not isinstance(suppress_entity, str): - assert ( - suppress_entity.__file__ is not None - ), f"{suppress_entity!r} must be a module with '__file__' attribute" - path = os.path.dirname(suppress_entity.__file__) - else: - path = suppress_entity - path = os.path.normpath(os.path.abspath(path)) - self.suppress.append(path) - self.max_frames = max(4, max_frames) if max_frames > 0 else 0 - - @classmethod - def from_exception( - cls, - exc_type: Type[Any], - exc_value: BaseException, - traceback: Optional[TracebackType], - *, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ) -> "Traceback": - """Create a traceback from exception info - - Args: - exc_type (Type[BaseException]): Exception type. - exc_value (BaseException): Exception value. - traceback (TracebackType): Python Traceback object. - width (Optional[int], optional): Number of characters used to traceback. Defaults to 100. - code_width (Optional[int], optional): Number of code characters used to traceback. Defaults to 88. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - - Returns: - Traceback: A Traceback instance that may be printed. - """ - rich_traceback = cls.extract( - exc_type, - exc_value, - traceback, - show_locals=show_locals, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=locals_hide_sunder, - ) - - return cls( - rich_traceback, - width=width, - code_width=code_width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - indent_guides=indent_guides, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=locals_hide_sunder, - suppress=suppress, - max_frames=max_frames, - ) - - @classmethod - def extract( - cls, - exc_type: Type[BaseException], - exc_value: BaseException, - traceback: Optional[TracebackType], - *, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - ) -> Trace: - """Extract traceback information. - - Args: - exc_type (Type[BaseException]): Exception type. - exc_value (BaseException): Exception value. - traceback (TracebackType): Python Traceback object. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - - Returns: - Trace: A Trace instance which you can use to construct a `Traceback`. - """ - - stacks: List[Stack] = [] - is_cause = False - - from pip._vendor.rich import _IMPORT_CWD - - def safe_str(_object: Any) -> str: - """Don't allow exceptions from __str__ to propagate.""" - try: - return str(_object) - except Exception: - return "" - - while True: - stack = Stack( - exc_type=safe_str(exc_type.__name__), - exc_value=safe_str(exc_value), - is_cause=is_cause, - ) - - if isinstance(exc_value, SyntaxError): - stack.syntax_error = _SyntaxError( - offset=exc_value.offset or 0, - filename=exc_value.filename or "?", - lineno=exc_value.lineno or 0, - line=exc_value.text or "", - msg=exc_value.msg, - ) - - stacks.append(stack) - append = stack.frames.append - - def get_locals( - iter_locals: Iterable[Tuple[str, object]] - ) -> Iterable[Tuple[str, object]]: - """Extract locals from an iterator of key pairs.""" - if not (locals_hide_dunder or locals_hide_sunder): - yield from iter_locals - return - for key, value in iter_locals: - if locals_hide_dunder and key.startswith("__"): - continue - if locals_hide_sunder and key.startswith("_"): - continue - yield key, value - - for frame_summary, line_no in walk_tb(traceback): - filename = frame_summary.f_code.co_filename - - last_instruction: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] - last_instruction = None - if sys.version_info >= (3, 11): - instruction_index = frame_summary.f_lasti // 2 - instruction_position = next( - islice( - frame_summary.f_code.co_positions(), - instruction_index, - instruction_index + 1, - ) - ) - ( - start_line, - end_line, - start_column, - end_column, - ) = instruction_position - if ( - start_line is not None - and end_line is not None - and start_column is not None - and end_column is not None - ): - last_instruction = ( - (start_line, start_column), - (end_line, end_column), - ) - - if filename and not filename.startswith("<"): - if not os.path.isabs(filename): - filename = os.path.join(_IMPORT_CWD, filename) - if frame_summary.f_locals.get("_rich_traceback_omit", False): - continue - - frame = Frame( - filename=filename or "?", - lineno=line_no, - name=frame_summary.f_code.co_name, - locals=( - { - key: pretty.traverse( - value, - max_length=locals_max_length, - max_string=locals_max_string, - ) - for key, value in get_locals(frame_summary.f_locals.items()) - if not (inspect.isfunction(value) or inspect.isclass(value)) - } - if show_locals - else None - ), - last_instruction=last_instruction, - ) - append(frame) - if frame_summary.f_locals.get("_rich_traceback_guard", False): - del stack.frames[:] - - cause = getattr(exc_value, "__cause__", None) - if cause: - exc_type = cause.__class__ - exc_value = cause - # __traceback__ can be None, e.g. for exceptions raised by the - # 'multiprocessing' module - traceback = cause.__traceback__ - is_cause = True - continue - - cause = exc_value.__context__ - if cause and not getattr(exc_value, "__suppress_context__", False): - exc_type = cause.__class__ - exc_value = cause - traceback = cause.__traceback__ - is_cause = False - continue - # No cover, code is reached but coverage doesn't recognize it. - break # pragma: no cover - - trace = Trace(stacks=stacks) - return trace - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - theme = self.theme - background_style = theme.get_background_style() - token_style = theme.get_style_for_token - - traceback_theme = Theme( - { - "pretty": token_style(TextToken), - "pygments.text": token_style(Token), - "pygments.string": token_style(String), - "pygments.function": token_style(Name.Function), - "pygments.number": token_style(Number), - "repr.indent": token_style(Comment) + Style(dim=True), - "repr.str": token_style(String), - "repr.brace": token_style(TextToken) + Style(bold=True), - "repr.number": token_style(Number), - "repr.bool_true": token_style(Keyword.Constant), - "repr.bool_false": token_style(Keyword.Constant), - "repr.none": token_style(Keyword.Constant), - "scope.border": token_style(String.Delimiter), - "scope.equals": token_style(Operator), - "scope.key": token_style(Name), - "scope.key.special": token_style(Name.Constant) + Style(dim=True), - }, - inherit=False, - ) - - highlighter = ReprHighlighter() - for last, stack in loop_last(reversed(self.trace.stacks)): - if stack.frames: - stack_renderable: ConsoleRenderable = Panel( - self._render_stack(stack), - title="[traceback.title]Traceback [dim](most recent call last)", - style=background_style, - border_style="traceback.border", - expand=True, - padding=(0, 1), - ) - stack_renderable = Constrain(stack_renderable, self.width) - with console.use_theme(traceback_theme): - yield stack_renderable - if stack.syntax_error is not None: - with console.use_theme(traceback_theme): - yield Constrain( - Panel( - self._render_syntax_error(stack.syntax_error), - style=background_style, - border_style="traceback.border.syntax_error", - expand=True, - padding=(0, 1), - width=self.width, - ), - self.width, - ) - yield Text.assemble( - (f"{stack.exc_type}: ", "traceback.exc_type"), - highlighter(stack.syntax_error.msg), - ) - elif stack.exc_value: - yield Text.assemble( - (f"{stack.exc_type}: ", "traceback.exc_type"), - highlighter(stack.exc_value), - ) - else: - yield Text.assemble((f"{stack.exc_type}", "traceback.exc_type")) - - if not last: - if stack.is_cause: - yield Text.from_markup( - "\n[i]The above exception was the direct cause of the following exception:\n", - ) - else: - yield Text.from_markup( - "\n[i]During handling of the above exception, another exception occurred:\n", - ) - - @group() - def _render_syntax_error(self, syntax_error: _SyntaxError) -> RenderResult: - highlighter = ReprHighlighter() - path_highlighter = PathHighlighter() - if syntax_error.filename != "": - if os.path.exists(syntax_error.filename): - text = Text.assemble( - (f" {syntax_error.filename}", "pygments.string"), - (":", "pygments.text"), - (str(syntax_error.lineno), "pygments.number"), - style="pygments.text", - ) - yield path_highlighter(text) - syntax_error_text = highlighter(syntax_error.line.rstrip()) - syntax_error_text.no_wrap = True - offset = min(syntax_error.offset - 1, len(syntax_error_text)) - syntax_error_text.stylize("bold underline", offset, offset) - syntax_error_text += Text.from_markup( - "\n" + " " * offset + "[traceback.offset]▲[/]", - style="pygments.text", - ) - yield syntax_error_text - - @classmethod - def _guess_lexer(cls, filename: str, code: str) -> str: - ext = os.path.splitext(filename)[-1] - if not ext: - # No extension, look at first line to see if it is a hashbang - # Note, this is an educated guess and not a guarantee - # If it fails, the only downside is that the code is highlighted strangely - new_line_index = code.index("\n") - first_line = code[:new_line_index] if new_line_index != -1 else code - if first_line.startswith("#!") and "python" in first_line.lower(): - return "python" - try: - return cls.LEXERS.get(ext) or guess_lexer_for_filename(filename, code).name - except ClassNotFound: - return "text" - - @group() - def _render_stack(self, stack: Stack) -> RenderResult: - path_highlighter = PathHighlighter() - theme = self.theme - - def read_code(filename: str) -> str: - """Read files, and cache results on filename. - - Args: - filename (str): Filename to read - - Returns: - str: Contents of file - """ - return "".join(linecache.getlines(filename)) - - def render_locals(frame: Frame) -> Iterable[ConsoleRenderable]: - if frame.locals: - yield render_scope( - frame.locals, - title="locals", - indent_guides=self.indent_guides, - max_length=self.locals_max_length, - max_string=self.locals_max_string, - ) - - exclude_frames: Optional[range] = None - if self.max_frames != 0: - exclude_frames = range( - self.max_frames // 2, - len(stack.frames) - self.max_frames // 2, - ) - - excluded = False - for frame_index, frame in enumerate(stack.frames): - if exclude_frames and frame_index in exclude_frames: - excluded = True - continue - - if excluded: - assert exclude_frames is not None - yield Text( - f"\n... {len(exclude_frames)} frames hidden ...", - justify="center", - style="traceback.error", - ) - excluded = False - - first = frame_index == 0 - frame_filename = frame.filename - suppressed = any(frame_filename.startswith(path) for path in self.suppress) - - if os.path.exists(frame.filename): - text = Text.assemble( - path_highlighter(Text(frame.filename, style="pygments.string")), - (":", "pygments.text"), - (str(frame.lineno), "pygments.number"), - " in ", - (frame.name, "pygments.function"), - style="pygments.text", - ) - else: - text = Text.assemble( - "in ", - (frame.name, "pygments.function"), - (":", "pygments.text"), - (str(frame.lineno), "pygments.number"), - style="pygments.text", - ) - if not frame.filename.startswith("<") and not first: - yield "" - yield text - if frame.filename.startswith("<"): - yield from render_locals(frame) - continue - if not suppressed: - try: - code = read_code(frame.filename) - if not code: - # code may be an empty string if the file doesn't exist, OR - # if the traceback filename is generated dynamically - continue - lexer_name = self._guess_lexer(frame.filename, code) - syntax = Syntax( - code, - lexer_name, - theme=theme, - line_numbers=True, - line_range=( - frame.lineno - self.extra_lines, - frame.lineno + self.extra_lines, - ), - highlight_lines={frame.lineno}, - word_wrap=self.word_wrap, - code_width=self.code_width, - indent_guides=self.indent_guides, - dedent=False, - ) - yield "" - except Exception as error: - yield Text.assemble( - (f"\n{error}", "traceback.error"), - ) - else: - if frame.last_instruction is not None: - start, end = frame.last_instruction - syntax.stylize_range( - style="traceback.error_range", - start=start, - end=end, - style_before=True, - ) - yield ( - Columns( - [ - syntax, - *render_locals(frame), - ], - padding=1, - ) - if frame.locals - else syntax - ) - - -if __name__ == "__main__": # pragma: no cover - install(show_locals=True) - import sys - - def bar( - a: Any, - ) -> None: # 这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑 - one = 1 - print(one / a) - - def foo(a: Any) -> None: - _rich_traceback_guard = True - zed = { - "characters": { - "Paul Atreides", - "Vladimir Harkonnen", - "Thufir Hawat", - "Duncan Idaho", - }, - "atomic_types": (None, False, True), - } - bar(a) - - def error() -> None: - foo(0) - - error() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/tree.py b/myenv/lib/python3.12/site-packages/pip/_vendor/rich/tree.py deleted file mode 100644 index 27c5cf7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/rich/tree.py +++ /dev/null @@ -1,257 +0,0 @@ -from typing import Iterator, List, Optional, Tuple - -from ._loop import loop_first, loop_last -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleStack, StyleType -from .styled import Styled - -GuideType = Tuple[str, str, str, str] - - -class Tree(JupyterMixin): - """A renderable for a tree structure. - - Attributes: - ASCII_GUIDES (GuideType): Guide lines used when Console.ascii_only is True. - TREE_GUIDES (List[GuideType, GuideType, GuideType]): Default guide lines. - - Args: - label (RenderableType): The renderable or str for the tree label. - style (StyleType, optional): Style of this tree. Defaults to "tree". - guide_style (StyleType, optional): Style of the guide lines. Defaults to "tree.line". - expanded (bool, optional): Also display children. Defaults to True. - highlight (bool, optional): Highlight renderable (if str). Defaults to False. - hide_root (bool, optional): Hide the root node. Defaults to False. - """ - - ASCII_GUIDES = (" ", "| ", "+-- ", "`-- ") - TREE_GUIDES = [ - (" ", "│ ", "├── ", "└── "), - (" ", "┃ ", "┣━━ ", "┗━━ "), - (" ", "║ ", "╠══ ", "╚══ "), - ] - - def __init__( - self, - label: RenderableType, - *, - style: StyleType = "tree", - guide_style: StyleType = "tree.line", - expanded: bool = True, - highlight: bool = False, - hide_root: bool = False, - ) -> None: - self.label = label - self.style = style - self.guide_style = guide_style - self.children: List[Tree] = [] - self.expanded = expanded - self.highlight = highlight - self.hide_root = hide_root - - def add( - self, - label: RenderableType, - *, - style: Optional[StyleType] = None, - guide_style: Optional[StyleType] = None, - expanded: bool = True, - highlight: Optional[bool] = False, - ) -> "Tree": - """Add a child tree. - - Args: - label (RenderableType): The renderable or str for the tree label. - style (StyleType, optional): Style of this tree. Defaults to "tree". - guide_style (StyleType, optional): Style of the guide lines. Defaults to "tree.line". - expanded (bool, optional): Also display children. Defaults to True. - highlight (Optional[bool], optional): Highlight renderable (if str). Defaults to False. - - Returns: - Tree: A new child Tree, which may be further modified. - """ - node = Tree( - label, - style=self.style if style is None else style, - guide_style=self.guide_style if guide_style is None else guide_style, - expanded=expanded, - highlight=self.highlight if highlight is None else highlight, - ) - self.children.append(node) - return node - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - stack: List[Iterator[Tuple[bool, Tree]]] = [] - pop = stack.pop - push = stack.append - new_line = Segment.line() - - get_style = console.get_style - null_style = Style.null() - guide_style = get_style(self.guide_style, default="") or null_style - SPACE, CONTINUE, FORK, END = range(4) - - _Segment = Segment - - def make_guide(index: int, style: Style) -> Segment: - """Make a Segment for a level of the guide lines.""" - if options.ascii_only: - line = self.ASCII_GUIDES[index] - else: - guide = 1 if style.bold else (2 if style.underline2 else 0) - line = self.TREE_GUIDES[0 if options.legacy_windows else guide][index] - return _Segment(line, style) - - levels: List[Segment] = [make_guide(CONTINUE, guide_style)] - push(iter(loop_last([self]))) - - guide_style_stack = StyleStack(get_style(self.guide_style)) - style_stack = StyleStack(get_style(self.style)) - remove_guide_styles = Style(bold=False, underline2=False) - - depth = 0 - - while stack: - stack_node = pop() - try: - last, node = next(stack_node) - except StopIteration: - levels.pop() - if levels: - guide_style = levels[-1].style or null_style - levels[-1] = make_guide(FORK, guide_style) - guide_style_stack.pop() - style_stack.pop() - continue - push(stack_node) - if last: - levels[-1] = make_guide(END, levels[-1].style or null_style) - - guide_style = guide_style_stack.current + get_style(node.guide_style) - style = style_stack.current + get_style(node.style) - prefix = levels[(2 if self.hide_root else 1) :] - renderable_lines = console.render_lines( - Styled(node.label, style), - options.update( - width=options.max_width - - sum(level.cell_length for level in prefix), - highlight=self.highlight, - height=None, - ), - pad=options.justify is not None, - ) - - if not (depth == 0 and self.hide_root): - for first, line in loop_first(renderable_lines): - if prefix: - yield from _Segment.apply_style( - prefix, - style.background_style, - post_style=remove_guide_styles, - ) - yield from line - yield new_line - if first and prefix: - prefix[-1] = make_guide( - SPACE if last else CONTINUE, prefix[-1].style or null_style - ) - - if node.expanded and node.children: - levels[-1] = make_guide( - SPACE if last else CONTINUE, levels[-1].style or null_style - ) - levels.append( - make_guide(END if len(node.children) == 1 else FORK, guide_style) - ) - style_stack.push(get_style(node.style)) - guide_style_stack.push(get_style(node.guide_style)) - push(iter(loop_last(node.children))) - depth += 1 - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - stack: List[Iterator[Tree]] = [iter([self])] - pop = stack.pop - push = stack.append - minimum = 0 - maximum = 0 - measure = Measurement.get - level = 0 - while stack: - iter_tree = pop() - try: - tree = next(iter_tree) - except StopIteration: - level -= 1 - continue - push(iter_tree) - min_measure, max_measure = measure(console, options, tree.label) - indent = level * 4 - minimum = max(min_measure + indent, minimum) - maximum = max(max_measure + indent, maximum) - if tree.expanded and tree.children: - push(iter(tree.children)) - level += 1 - return Measurement(minimum, maximum) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Group - from pip._vendor.rich.markdown import Markdown - from pip._vendor.rich.panel import Panel - from pip._vendor.rich.syntax import Syntax - from pip._vendor.rich.table import Table - - table = Table(row_styles=["", "dim"]) - - table.add_column("Released", style="cyan", no_wrap=True) - table.add_column("Title", style="magenta") - table.add_column("Box Office", justify="right", style="green") - - table.add_row("Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$952,110,690") - table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347") - table.add_row("Dec 15, 2017", "Star Wars Ep. V111: The Last Jedi", "$1,332,539,889") - table.add_row("Dec 16, 2016", "Rogue One: A Star Wars Story", "$1,332,439,889") - - code = """\ -class Segment(NamedTuple): - text: str = "" - style: Optional[Style] = None - is_control: bool = False -""" - syntax = Syntax(code, "python", theme="monokai", line_numbers=True) - - markdown = Markdown( - """\ -### example.md -> Hello, World! -> -> Markdown _all_ the things -""" - ) - - root = Tree("🌲 [b green]Rich Tree", highlight=True, hide_root=True) - - node = root.add(":file_folder: Renderables", guide_style="red") - simple_node = node.add(":file_folder: [bold yellow]Atomic", guide_style="uu green") - simple_node.add(Group("📄 Syntax", syntax)) - simple_node.add(Group("📄 Markdown", Panel(markdown, border_style="green"))) - - containers_node = node.add( - ":file_folder: [bold magenta]Containers", guide_style="bold magenta" - ) - containers_node.expanded = True - panel = Panel.fit("Just a panel", border_style="red") - containers_node.add(Group("📄 Panels", panel)) - - containers_node.add(Group("📄 [b magenta]Table", table)) - - console = Console() - - console.print(root) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py deleted file mode 100644 index 2b08d6e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -__all__ = ("loads", "load", "TOMLDecodeError") -__version__ = "2.2.1" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT - -from ._parser import TOMLDecodeError, load, loads diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 73d7ef7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc deleted file mode 100644 index 4ca48c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc deleted file mode 100644 index 20af9e3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc deleted file mode 100644 index a8963c6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py deleted file mode 100644 index b548e8b..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py +++ /dev/null @@ -1,770 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -from collections.abc import Iterable -import string -import sys -from types import MappingProxyType -from typing import IO, Any, Final, NamedTuple -import warnings - -from ._re import ( - RE_DATETIME, - RE_LOCALTIME, - RE_NUMBER, - match_to_datetime, - match_to_localtime, - match_to_number, -) -from ._types import Key, ParseFloat, Pos - -# Inline tables/arrays are implemented using recursion. Pathologically -# nested documents cause pure Python to raise RecursionError (which is OK), -# but mypyc binary wheels will crash unrecoverably (not OK). According to -# mypyc docs this will be fixed in the future: -# https://mypyc.readthedocs.io/en/latest/differences_from_python.html#stack-overflows -# Before mypyc's fix is in, recursion needs to be limited by this library. -# Choosing `sys.getrecursionlimit()` as maximum inline table/array nesting -# level, as it allows more nesting than pure Python, but still seems a far -# lower number than where mypyc binaries crash. -MAX_INLINE_NESTING: Final = sys.getrecursionlimit() - -ASCII_CTRL: Final = frozenset(chr(i) for i in range(32)) | frozenset(chr(127)) - -# Neither of these sets include quotation mark or backslash. They are -# currently handled as separate cases in the parser functions. -ILLEGAL_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t") -ILLEGAL_MULTILINE_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t\n") - -ILLEGAL_LITERAL_STR_CHARS: Final = ILLEGAL_BASIC_STR_CHARS -ILLEGAL_MULTILINE_LITERAL_STR_CHARS: Final = ILLEGAL_MULTILINE_BASIC_STR_CHARS - -ILLEGAL_COMMENT_CHARS: Final = ILLEGAL_BASIC_STR_CHARS - -TOML_WS: Final = frozenset(" \t") -TOML_WS_AND_NEWLINE: Final = TOML_WS | frozenset("\n") -BARE_KEY_CHARS: Final = frozenset(string.ascii_letters + string.digits + "-_") -KEY_INITIAL_CHARS: Final = BARE_KEY_CHARS | frozenset("\"'") -HEXDIGIT_CHARS: Final = frozenset(string.hexdigits) - -BASIC_STR_ESCAPE_REPLACEMENTS: Final = MappingProxyType( - { - "\\b": "\u0008", # backspace - "\\t": "\u0009", # tab - "\\n": "\u000A", # linefeed - "\\f": "\u000C", # form feed - "\\r": "\u000D", # carriage return - '\\"': "\u0022", # quote - "\\\\": "\u005C", # backslash - } -) - - -class DEPRECATED_DEFAULT: - """Sentinel to be used as default arg during deprecation - period of TOMLDecodeError's free-form arguments.""" - - -class TOMLDecodeError(ValueError): - """An error raised if a document is not valid TOML. - - Adds the following attributes to ValueError: - msg: The unformatted error message - doc: The TOML document being parsed - pos: The index of doc where parsing failed - lineno: The line corresponding to pos - colno: The column corresponding to pos - """ - - def __init__( - self, - msg: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - doc: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - pos: Pos | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - *args: Any, - ): - if ( - args - or not isinstance(msg, str) - or not isinstance(doc, str) - or not isinstance(pos, int) - ): - warnings.warn( - "Free-form arguments for TOMLDecodeError are deprecated. " - "Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.", - DeprecationWarning, - stacklevel=2, - ) - if pos is not DEPRECATED_DEFAULT: - args = pos, *args - if doc is not DEPRECATED_DEFAULT: - args = doc, *args - if msg is not DEPRECATED_DEFAULT: - args = msg, *args - ValueError.__init__(self, *args) - return - - lineno = doc.count("\n", 0, pos) + 1 - if lineno == 1: - colno = pos + 1 - else: - colno = pos - doc.rindex("\n", 0, pos) - - if pos >= len(doc): - coord_repr = "end of document" - else: - coord_repr = f"line {lineno}, column {colno}" - errmsg = f"{msg} (at {coord_repr})" - ValueError.__init__(self, errmsg) - - self.msg = msg - self.doc = doc - self.pos = pos - self.lineno = lineno - self.colno = colno - - -def load(__fp: IO[bytes], *, parse_float: ParseFloat = float) -> dict[str, Any]: - """Parse TOML from a binary file object.""" - b = __fp.read() - try: - s = b.decode() - except AttributeError: - raise TypeError( - "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`" - ) from None - return loads(s, parse_float=parse_float) - - -def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]: # noqa: C901 - """Parse TOML from a string.""" - - # The spec allows converting "\r\n" to "\n", even in string - # literals. Let's do so to simplify parsing. - try: - src = __s.replace("\r\n", "\n") - except (AttributeError, TypeError): - raise TypeError( - f"Expected str object, not '{type(__s).__qualname__}'" - ) from None - pos = 0 - out = Output(NestedDict(), Flags()) - header: Key = () - parse_float = make_safe_parse_float(parse_float) - - # Parse one statement at a time - # (typically means one line in TOML source) - while True: - # 1. Skip line leading whitespace - pos = skip_chars(src, pos, TOML_WS) - - # 2. Parse rules. Expect one of the following: - # - end of file - # - end of line - # - comment - # - key/value pair - # - append dict to list (and move to its namespace) - # - create dict (and move to its namespace) - # Skip trailing whitespace when applicable. - try: - char = src[pos] - except IndexError: - break - if char == "\n": - pos += 1 - continue - if char in KEY_INITIAL_CHARS: - pos = key_value_rule(src, pos, out, header, parse_float) - pos = skip_chars(src, pos, TOML_WS) - elif char == "[": - try: - second_char: str | None = src[pos + 1] - except IndexError: - second_char = None - out.flags.finalize_pending() - if second_char == "[": - pos, header = create_list_rule(src, pos, out) - else: - pos, header = create_dict_rule(src, pos, out) - pos = skip_chars(src, pos, TOML_WS) - elif char != "#": - raise TOMLDecodeError("Invalid statement", src, pos) - - # 3. Skip comment - pos = skip_comment(src, pos) - - # 4. Expect end of line or end of file - try: - char = src[pos] - except IndexError: - break - if char != "\n": - raise TOMLDecodeError( - "Expected newline or end of document after a statement", src, pos - ) - pos += 1 - - return out.data.dict - - -class Flags: - """Flags that map to parsed keys/namespaces.""" - - # Marks an immutable namespace (inline array or inline table). - FROZEN: Final = 0 - # Marks a nest that has been explicitly created and can no longer - # be opened using the "[table]" syntax. - EXPLICIT_NEST: Final = 1 - - def __init__(self) -> None: - self._flags: dict[str, dict] = {} - self._pending_flags: set[tuple[Key, int]] = set() - - def add_pending(self, key: Key, flag: int) -> None: - self._pending_flags.add((key, flag)) - - def finalize_pending(self) -> None: - for key, flag in self._pending_flags: - self.set(key, flag, recursive=False) - self._pending_flags.clear() - - def unset_all(self, key: Key) -> None: - cont = self._flags - for k in key[:-1]: - if k not in cont: - return - cont = cont[k]["nested"] - cont.pop(key[-1], None) - - def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003 - cont = self._flags - key_parent, key_stem = key[:-1], key[-1] - for k in key_parent: - if k not in cont: - cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont = cont[k]["nested"] - if key_stem not in cont: - cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag) - - def is_(self, key: Key, flag: int) -> bool: - if not key: - return False # document root has no flags - cont = self._flags - for k in key[:-1]: - if k not in cont: - return False - inner_cont = cont[k] - if flag in inner_cont["recursive_flags"]: - return True - cont = inner_cont["nested"] - key_stem = key[-1] - if key_stem in cont: - inner_cont = cont[key_stem] - return flag in inner_cont["flags"] or flag in inner_cont["recursive_flags"] - return False - - -class NestedDict: - def __init__(self) -> None: - # The parsed content of the TOML document - self.dict: dict[str, Any] = {} - - def get_or_create_nest( - self, - key: Key, - *, - access_lists: bool = True, - ) -> dict: - cont: Any = self.dict - for k in key: - if k not in cont: - cont[k] = {} - cont = cont[k] - if access_lists and isinstance(cont, list): - cont = cont[-1] - if not isinstance(cont, dict): - raise KeyError("There is no nest behind this key") - return cont - - def append_nest_to_list(self, key: Key) -> None: - cont = self.get_or_create_nest(key[:-1]) - last_key = key[-1] - if last_key in cont: - list_ = cont[last_key] - if not isinstance(list_, list): - raise KeyError("An object other than list found behind this key") - list_.append({}) - else: - cont[last_key] = [{}] - - -class Output(NamedTuple): - data: NestedDict - flags: Flags - - -def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos: - try: - while src[pos] in chars: - pos += 1 - except IndexError: - pass - return pos - - -def skip_until( - src: str, - pos: Pos, - expect: str, - *, - error_on: frozenset[str], - error_on_eof: bool, -) -> Pos: - try: - new_pos = src.index(expect, pos) - except ValueError: - new_pos = len(src) - if error_on_eof: - raise TOMLDecodeError(f"Expected {expect!r}", src, new_pos) from None - - if not error_on.isdisjoint(src[pos:new_pos]): - while src[pos] not in error_on: - pos += 1 - raise TOMLDecodeError(f"Found invalid character {src[pos]!r}", src, pos) - return new_pos - - -def skip_comment(src: str, pos: Pos) -> Pos: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char == "#": - return skip_until( - src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False - ) - return pos - - -def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos: - while True: - pos_before_skip = pos - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - pos = skip_comment(src, pos) - if pos == pos_before_skip: - return pos - - -def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 1 # Skip "[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot declare {key} twice", src, pos) - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.get_or_create_nest(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]", pos): - raise TOMLDecodeError( - "Expected ']' at the end of a table declaration", src, pos - ) - return pos + 1, key - - -def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 2 # Skip "[[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - # Free the namespace now that it points to another empty list item... - out.flags.unset_all(key) - # ...but this key precisely is still prohibited from table declaration - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.append_nest_to_list(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]]", pos): - raise TOMLDecodeError( - "Expected ']]' at the end of an array declaration", src, pos - ) - return pos + 2, key - - -def key_value_rule( - src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat -) -> Pos: - pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) - key_parent, key_stem = key[:-1], key[-1] - abs_key_parent = header + key_parent - - relative_path_cont_keys = (header + key[:i] for i in range(1, len(key))) - for cont_key in relative_path_cont_keys: - # Check that dotted key syntax does not redefine an existing table - if out.flags.is_(cont_key, Flags.EXPLICIT_NEST): - raise TOMLDecodeError(f"Cannot redefine namespace {cont_key}", src, pos) - # Containers in the relative path can't be opened with the table syntax or - # dotted key/value syntax in following table sections. - out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST) - - if out.flags.is_(abs_key_parent, Flags.FROZEN): - raise TOMLDecodeError( - f"Cannot mutate immutable namespace {abs_key_parent}", src, pos - ) - - try: - nest = out.data.get_or_create_nest(abs_key_parent) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) - # Mark inline table and array namespaces recursively immutable - if isinstance(value, (dict, list)): - out.flags.set(header + key, Flags.FROZEN, recursive=True) - nest[key_stem] = value - return pos - - -def parse_key_value_pair( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, Key, Any]: - pos, key = parse_key(src, pos) - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != "=": - raise TOMLDecodeError("Expected '=' after a key in a key/value pair", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, value = parse_value(src, pos, parse_float, nest_lvl) - return pos, key, value - - -def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]: - pos, key_part = parse_key_part(src, pos) - key: Key = (key_part,) - pos = skip_chars(src, pos, TOML_WS) - while True: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != ".": - return pos, key - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, key_part = parse_key_part(src, pos) - key += (key_part,) - pos = skip_chars(src, pos, TOML_WS) - - -def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char in BARE_KEY_CHARS: - start_pos = pos - pos = skip_chars(src, pos, BARE_KEY_CHARS) - return pos, src[start_pos:pos] - if char == "'": - return parse_literal_str(src, pos) - if char == '"': - return parse_one_line_basic_str(src, pos) - raise TOMLDecodeError("Invalid initial character for a key part", src, pos) - - -def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 - return parse_basic_str(src, pos, multiline=False) - - -def parse_array( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, list]: - pos += 1 - array: list = [] - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - while True: - pos, val = parse_value(src, pos, parse_float, nest_lvl) - array.append(val) - pos = skip_comments_and_array_ws(src, pos) - - c = src[pos : pos + 1] - if c == "]": - return pos + 1, array - if c != ",": - raise TOMLDecodeError("Unclosed array", src, pos) - pos += 1 - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - - -def parse_inline_table( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, dict]: - pos += 1 - nested_dict = NestedDict() - flags = Flags() - - pos = skip_chars(src, pos, TOML_WS) - if src.startswith("}", pos): - return pos + 1, nested_dict.dict - while True: - pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl) - key_parent, key_stem = key[:-1], key[-1] - if flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - try: - nest = nested_dict.get_or_create_nest(key_parent, access_lists=False) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError(f"Duplicate inline table key {key_stem!r}", src, pos) - nest[key_stem] = value - pos = skip_chars(src, pos, TOML_WS) - c = src[pos : pos + 1] - if c == "}": - return pos + 1, nested_dict.dict - if c != ",": - raise TOMLDecodeError("Unclosed inline table", src, pos) - if isinstance(value, (dict, list)): - flags.set(key, Flags.FROZEN, recursive=True) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - - -def parse_basic_str_escape( - src: str, pos: Pos, *, multiline: bool = False -) -> tuple[Pos, str]: - escape_id = src[pos : pos + 2] - pos += 2 - if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}: - # Skip whitespace until next non-whitespace character or end of - # the doc. Error if non-whitespace is found before newline. - if escape_id != "\\\n": - pos = skip_chars(src, pos, TOML_WS) - try: - char = src[pos] - except IndexError: - return pos, "" - if char != "\n": - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - return pos, "" - if escape_id == "\\u": - return parse_hex_char(src, pos, 4) - if escape_id == "\\U": - return parse_hex_char(src, pos, 8) - try: - return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id] - except KeyError: - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) from None - - -def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]: - return parse_basic_str_escape(src, pos, multiline=True) - - -def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]: - hex_str = src[pos : pos + hex_len] - if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str): - raise TOMLDecodeError("Invalid hex value", src, pos) - pos += hex_len - hex_int = int(hex_str, 16) - if not is_unicode_scalar_value(hex_int): - raise TOMLDecodeError( - "Escaped character is not a Unicode scalar value", src, pos - ) - return pos, chr(hex_int) - - -def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 # Skip starting apostrophe - start_pos = pos - pos = skip_until( - src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True - ) - return pos + 1, src[start_pos:pos] # Skip ending apostrophe - - -def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]: - pos += 3 - if src.startswith("\n", pos): - pos += 1 - - if literal: - delim = "'" - end_pos = skip_until( - src, - pos, - "'''", - error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS, - error_on_eof=True, - ) - result = src[pos:end_pos] - pos = end_pos + 3 - else: - delim = '"' - pos, result = parse_basic_str(src, pos, multiline=True) - - # Add at maximum two extra apostrophes/quotes if the end sequence - # is 4 or 5 chars long instead of just 3. - if not src.startswith(delim, pos): - return pos, result - pos += 1 - if not src.startswith(delim, pos): - return pos, result + delim - pos += 1 - return pos, result + (delim * 2) - - -def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]: - if multiline: - error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape_multiline - else: - error_on = ILLEGAL_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape - result = "" - start_pos = pos - while True: - try: - char = src[pos] - except IndexError: - raise TOMLDecodeError("Unterminated string", src, pos) from None - if char == '"': - if not multiline: - return pos + 1, result + src[start_pos:pos] - if src.startswith('"""', pos): - return pos + 3, result + src[start_pos:pos] - pos += 1 - continue - if char == "\\": - result += src[start_pos:pos] - pos, parsed_escape = parse_escapes(src, pos) - result += parsed_escape - start_pos = pos - continue - if char in error_on: - raise TOMLDecodeError(f"Illegal character {char!r}", src, pos) - pos += 1 - - -def parse_value( # noqa: C901 - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, Any]: - if nest_lvl > MAX_INLINE_NESTING: - # Pure Python should have raised RecursionError already. - # This ensures mypyc binaries eventually do the same. - raise RecursionError( # pragma: no cover - "TOML inline arrays/tables are nested more than the allowed" - f" {MAX_INLINE_NESTING} levels" - ) - - try: - char: str | None = src[pos] - except IndexError: - char = None - - # IMPORTANT: order conditions based on speed of checking and likelihood - - # Basic strings - if char == '"': - if src.startswith('"""', pos): - return parse_multiline_str(src, pos, literal=False) - return parse_one_line_basic_str(src, pos) - - # Literal strings - if char == "'": - if src.startswith("'''", pos): - return parse_multiline_str(src, pos, literal=True) - return parse_literal_str(src, pos) - - # Booleans - if char == "t": - if src.startswith("true", pos): - return pos + 4, True - if char == "f": - if src.startswith("false", pos): - return pos + 5, False - - # Arrays - if char == "[": - return parse_array(src, pos, parse_float, nest_lvl + 1) - - # Inline tables - if char == "{": - return parse_inline_table(src, pos, parse_float, nest_lvl + 1) - - # Dates and times - datetime_match = RE_DATETIME.match(src, pos) - if datetime_match: - try: - datetime_obj = match_to_datetime(datetime_match) - except ValueError as e: - raise TOMLDecodeError("Invalid date or datetime", src, pos) from e - return datetime_match.end(), datetime_obj - localtime_match = RE_LOCALTIME.match(src, pos) - if localtime_match: - return localtime_match.end(), match_to_localtime(localtime_match) - - # Integers and "normal" floats. - # The regex will greedily match any type starting with a decimal - # char, so needs to be located after handling of dates and times. - number_match = RE_NUMBER.match(src, pos) - if number_match: - return number_match.end(), match_to_number(number_match, parse_float) - - # Special floats - first_three = src[pos : pos + 3] - if first_three in {"inf", "nan"}: - return pos + 3, parse_float(first_three) - first_four = src[pos : pos + 4] - if first_four in {"-inf", "+inf", "-nan", "+nan"}: - return pos + 4, parse_float(first_four) - - raise TOMLDecodeError("Invalid value", src, pos) - - -def is_unicode_scalar_value(codepoint: int) -> bool: - return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111) - - -def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat: - """A decorator to make `parse_float` safe. - - `parse_float` must not return dicts or lists, because these types - would be mixed with parsed TOML tables and arrays, thus confusing - the parser. The returned decorated callable raises `ValueError` - instead of returning illegal types. - """ - # The default `float` callable never returns illegal types. Optimize it. - if parse_float is float: - return float - - def safe_parse_float(float_str: str) -> Any: - float_value = parse_float(float_str) - if isinstance(float_value, (dict, list)): - raise ValueError("parse_float must not return dicts or lists") - return float_value - - return safe_parse_float diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py deleted file mode 100644 index 5134866..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py +++ /dev/null @@ -1,112 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -from datetime import date, datetime, time, timedelta, timezone, tzinfo -from functools import lru_cache -import re -from typing import Any, Final - -from ._types import ParseFloat - -# E.g. -# - 00:32:00.999999 -# - 00:32:00 -_TIME_RE_STR: Final = ( - r"([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:\.([0-9]{1,6})[0-9]*)?" -) - -RE_NUMBER: Final = re.compile( - r""" -0 -(?: - x[0-9A-Fa-f](?:_?[0-9A-Fa-f])* # hex - | - b[01](?:_?[01])* # bin - | - o[0-7](?:_?[0-7])* # oct -) -| -[+-]?(?:0|[1-9](?:_?[0-9])*) # dec, integer part -(?P - (?:\.[0-9](?:_?[0-9])*)? # optional fractional part - (?:[eE][+-]?[0-9](?:_?[0-9])*)? # optional exponent part -) -""", - flags=re.VERBOSE, -) -RE_LOCALTIME: Final = re.compile(_TIME_RE_STR) -RE_DATETIME: Final = re.compile( - rf""" -([0-9]{{4}})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) # date, e.g. 1988-10-27 -(?: - [Tt ] - {_TIME_RE_STR} - (?:([Zz])|([+-])([01][0-9]|2[0-3]):([0-5][0-9]))? # optional time offset -)? -""", - flags=re.VERBOSE, -) - - -def match_to_datetime(match: re.Match) -> datetime | date: - """Convert a `RE_DATETIME` match to `datetime.datetime` or `datetime.date`. - - Raises ValueError if the match does not correspond to a valid date - or datetime. - """ - ( - year_str, - month_str, - day_str, - hour_str, - minute_str, - sec_str, - micros_str, - zulu_time, - offset_sign_str, - offset_hour_str, - offset_minute_str, - ) = match.groups() - year, month, day = int(year_str), int(month_str), int(day_str) - if hour_str is None: - return date(year, month, day) - hour, minute, sec = int(hour_str), int(minute_str), int(sec_str) - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - if offset_sign_str: - tz: tzinfo | None = cached_tz( - offset_hour_str, offset_minute_str, offset_sign_str - ) - elif zulu_time: - tz = timezone.utc - else: # local date-time - tz = None - return datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz) - - -# No need to limit cache size. This is only ever called on input -# that matched RE_DATETIME, so there is an implicit bound of -# 24 (hours) * 60 (minutes) * 2 (offset direction) = 2880. -@lru_cache(maxsize=None) -def cached_tz(hour_str: str, minute_str: str, sign_str: str) -> timezone: - sign = 1 if sign_str == "+" else -1 - return timezone( - timedelta( - hours=sign * int(hour_str), - minutes=sign * int(minute_str), - ) - ) - - -def match_to_localtime(match: re.Match) -> time: - hour_str, minute_str, sec_str, micros_str = match.groups() - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - return time(int(hour_str), int(minute_str), int(sec_str), micros) - - -def match_to_number(match: re.Match, parse_float: ParseFloat) -> Any: - if match.group("floatpart"): - return parse_float(match.group()) - return int(match.group(), 0) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py deleted file mode 100644 index d949412..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from typing import Any, Callable, Tuple - -# Type annotations -ParseFloat = Callable[[str], Any] -Key = Tuple[str, ...] -Pos = int diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed deleted file mode 100644 index 7632ecf..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py deleted file mode 100644 index e468bf8..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -"""Verify certificates using native system trust stores""" - -import sys as _sys - -if _sys.version_info < (3, 10): - raise ImportError("truststore requires Python 3.10 or later") - -# Detect Python runtimes which don't implement SSLObject.get_unverified_chain() API -# This API only became public in Python 3.13 but was available in CPython and PyPy since 3.10. -if _sys.version_info < (3, 13): - try: - import ssl as _ssl - except ImportError: - raise ImportError("truststore requires the 'ssl' module") - else: - _sslmem = _ssl.MemoryBIO() - _sslobj = _ssl.create_default_context().wrap_bio( - _sslmem, - _sslmem, - ) - try: - while not hasattr(_sslobj, "get_unverified_chain"): - _sslobj = _sslobj._sslobj # type: ignore[attr-defined] - except AttributeError: - raise ImportError( - "truststore requires peer certificate chain APIs to be available" - ) from None - - del _ssl, _sslobj, _sslmem # noqa: F821 - -from ._api import SSLContext, extract_from_ssl, inject_into_ssl # noqa: E402 - -del _api, _sys # type: ignore[name-defined] # noqa: F821 - -__all__ = ["SSLContext", "inject_into_ssl", "extract_from_ssl"] -__version__ = "0.10.0" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0b6d367..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc deleted file mode 100644 index 028a021..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc deleted file mode 100644 index 2e08709..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc deleted file mode 100644 index 8de68eb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc deleted file mode 100644 index 6df2b99..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc deleted file mode 100644 index e8aeaf0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py deleted file mode 100644 index aeb023a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py +++ /dev/null @@ -1,316 +0,0 @@ -import os -import platform -import socket -import ssl -import sys -import typing - -import _ssl # type: ignore[import-not-found] - -from ._ssl_constants import ( - _original_SSLContext, - _original_super_SSLContext, - _truststore_SSLContext_dunder_class, - _truststore_SSLContext_super_class, -) - -if platform.system() == "Windows": - from ._windows import _configure_context, _verify_peercerts_impl -elif platform.system() == "Darwin": - from ._macos import _configure_context, _verify_peercerts_impl -else: - from ._openssl import _configure_context, _verify_peercerts_impl - -if typing.TYPE_CHECKING: - from pip._vendor.typing_extensions import Buffer - -# From typeshed/stdlib/ssl.pyi -_StrOrBytesPath: typing.TypeAlias = str | bytes | os.PathLike[str] | os.PathLike[bytes] -_PasswordType: typing.TypeAlias = str | bytes | typing.Callable[[], str | bytes] - - -def inject_into_ssl() -> None: - """Injects the :class:`truststore.SSLContext` into the ``ssl`` - module by replacing :class:`ssl.SSLContext`. - """ - setattr(ssl, "SSLContext", SSLContext) - # urllib3 holds on to its own reference of ssl.SSLContext - # so we need to replace that reference too. - try: - import pip._vendor.urllib3.util.ssl_ as urllib3_ssl - - setattr(urllib3_ssl, "SSLContext", SSLContext) - except ImportError: - pass - - -def extract_from_ssl() -> None: - """Restores the :class:`ssl.SSLContext` class to its original state""" - setattr(ssl, "SSLContext", _original_SSLContext) - try: - import pip._vendor.urllib3.util.ssl_ as urllib3_ssl - - urllib3_ssl.SSLContext = _original_SSLContext # type: ignore[assignment] - except ImportError: - pass - - -class SSLContext(_truststore_SSLContext_super_class): # type: ignore[misc] - """SSLContext API that uses system certificates on all platforms""" - - @property # type: ignore[misc] - def __class__(self) -> type: - # Dirty hack to get around isinstance() checks - # for ssl.SSLContext instances in aiohttp/trustme - # when using non-CPython implementations. - return _truststore_SSLContext_dunder_class or SSLContext - - def __init__(self, protocol: int = None) -> None: # type: ignore[assignment] - self._ctx = _original_SSLContext(protocol) - - class TruststoreSSLObject(ssl.SSLObject): - # This object exists because wrap_bio() doesn't - # immediately do the handshake so we need to do - # certificate verifications after SSLObject.do_handshake() - - def do_handshake(self) -> None: - ret = super().do_handshake() - _verify_peercerts(self, server_hostname=self.server_hostname) - return ret - - self._ctx.sslobject_class = TruststoreSSLObject - - def wrap_socket( - self, - sock: socket.socket, - server_side: bool = False, - do_handshake_on_connect: bool = True, - suppress_ragged_eofs: bool = True, - server_hostname: str | None = None, - session: ssl.SSLSession | None = None, - ) -> ssl.SSLSocket: - # Use a context manager here because the - # inner SSLContext holds on to our state - # but also does the actual handshake. - with _configure_context(self._ctx): - ssl_sock = self._ctx.wrap_socket( - sock, - server_side=server_side, - server_hostname=server_hostname, - do_handshake_on_connect=do_handshake_on_connect, - suppress_ragged_eofs=suppress_ragged_eofs, - session=session, - ) - try: - _verify_peercerts(ssl_sock, server_hostname=server_hostname) - except Exception: - ssl_sock.close() - raise - return ssl_sock - - def wrap_bio( - self, - incoming: ssl.MemoryBIO, - outgoing: ssl.MemoryBIO, - server_side: bool = False, - server_hostname: str | None = None, - session: ssl.SSLSession | None = None, - ) -> ssl.SSLObject: - with _configure_context(self._ctx): - ssl_obj = self._ctx.wrap_bio( - incoming, - outgoing, - server_hostname=server_hostname, - server_side=server_side, - session=session, - ) - return ssl_obj - - def load_verify_locations( - self, - cafile: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None, - capath: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None, - cadata: typing.Union[str, "Buffer", None] = None, - ) -> None: - return self._ctx.load_verify_locations( - cafile=cafile, capath=capath, cadata=cadata - ) - - def load_cert_chain( - self, - certfile: _StrOrBytesPath, - keyfile: _StrOrBytesPath | None = None, - password: _PasswordType | None = None, - ) -> None: - return self._ctx.load_cert_chain( - certfile=certfile, keyfile=keyfile, password=password - ) - - def load_default_certs( - self, purpose: ssl.Purpose = ssl.Purpose.SERVER_AUTH - ) -> None: - return self._ctx.load_default_certs(purpose) - - def set_alpn_protocols(self, alpn_protocols: typing.Iterable[str]) -> None: - return self._ctx.set_alpn_protocols(alpn_protocols) - - def set_npn_protocols(self, npn_protocols: typing.Iterable[str]) -> None: - return self._ctx.set_npn_protocols(npn_protocols) - - def set_ciphers(self, __cipherlist: str) -> None: - return self._ctx.set_ciphers(__cipherlist) - - def get_ciphers(self) -> typing.Any: - return self._ctx.get_ciphers() - - def session_stats(self) -> dict[str, int]: - return self._ctx.session_stats() - - def cert_store_stats(self) -> dict[str, int]: - raise NotImplementedError() - - def set_default_verify_paths(self) -> None: - self._ctx.set_default_verify_paths() - - @typing.overload - def get_ca_certs( - self, binary_form: typing.Literal[False] = ... - ) -> list[typing.Any]: ... - - @typing.overload - def get_ca_certs(self, binary_form: typing.Literal[True] = ...) -> list[bytes]: ... - - @typing.overload - def get_ca_certs(self, binary_form: bool = ...) -> typing.Any: ... - - def get_ca_certs(self, binary_form: bool = False) -> list[typing.Any] | list[bytes]: - raise NotImplementedError() - - @property - def check_hostname(self) -> bool: - return self._ctx.check_hostname - - @check_hostname.setter - def check_hostname(self, value: bool) -> None: - self._ctx.check_hostname = value - - @property - def hostname_checks_common_name(self) -> bool: - return self._ctx.hostname_checks_common_name - - @hostname_checks_common_name.setter - def hostname_checks_common_name(self, value: bool) -> None: - self._ctx.hostname_checks_common_name = value - - @property - def keylog_filename(self) -> str: - return self._ctx.keylog_filename - - @keylog_filename.setter - def keylog_filename(self, value: str) -> None: - self._ctx.keylog_filename = value - - @property - def maximum_version(self) -> ssl.TLSVersion: - return self._ctx.maximum_version - - @maximum_version.setter - def maximum_version(self, value: ssl.TLSVersion) -> None: - _original_super_SSLContext.maximum_version.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def minimum_version(self) -> ssl.TLSVersion: - return self._ctx.minimum_version - - @minimum_version.setter - def minimum_version(self, value: ssl.TLSVersion) -> None: - _original_super_SSLContext.minimum_version.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def options(self) -> ssl.Options: - return self._ctx.options - - @options.setter - def options(self, value: ssl.Options) -> None: - _original_super_SSLContext.options.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def post_handshake_auth(self) -> bool: - return self._ctx.post_handshake_auth - - @post_handshake_auth.setter - def post_handshake_auth(self, value: bool) -> None: - self._ctx.post_handshake_auth = value - - @property - def protocol(self) -> ssl._SSLMethod: - return self._ctx.protocol - - @property - def security_level(self) -> int: - return self._ctx.security_level - - @property - def verify_flags(self) -> ssl.VerifyFlags: - return self._ctx.verify_flags - - @verify_flags.setter - def verify_flags(self, value: ssl.VerifyFlags) -> None: - _original_super_SSLContext.verify_flags.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def verify_mode(self) -> ssl.VerifyMode: - return self._ctx.verify_mode - - @verify_mode.setter - def verify_mode(self, value: ssl.VerifyMode) -> None: - _original_super_SSLContext.verify_mode.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - -# Python 3.13+ makes get_unverified_chain() a public API that only returns DER -# encoded certificates. We detect whether we need to call public_bytes() for 3.10->3.12 -# Pre-3.13 returned None instead of an empty list from get_unverified_chain() -if sys.version_info >= (3, 13): - - def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]: - unverified_chain = sslobj.get_unverified_chain() or () # type: ignore[attr-defined] - return [ - cert if isinstance(cert, bytes) else cert.public_bytes(_ssl.ENCODING_DER) - for cert in unverified_chain - ] - -else: - - def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]: - unverified_chain = sslobj.get_unverified_chain() or () # type: ignore[attr-defined] - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in unverified_chain] - - -def _verify_peercerts( - sock_or_sslobj: ssl.SSLSocket | ssl.SSLObject, server_hostname: str | None -) -> None: - """ - Verifies the peer certificates from an SSLSocket or SSLObject - against the certificates in the OS trust store. - """ - sslobj: ssl.SSLObject = sock_or_sslobj # type: ignore[assignment] - try: - while not hasattr(sslobj, "get_unverified_chain"): - sslobj = sslobj._sslobj # type: ignore[attr-defined] - except AttributeError: - pass - - cert_bytes = _get_unverified_chain_bytes(sslobj) - _verify_peercerts_impl( - sock_or_sslobj.context, cert_bytes, server_hostname=server_hostname - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py deleted file mode 100644 index 3450307..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py +++ /dev/null @@ -1,571 +0,0 @@ -import contextlib -import ctypes -import platform -import ssl -import typing -from ctypes import ( - CDLL, - POINTER, - c_bool, - c_char_p, - c_int32, - c_long, - c_uint32, - c_ulong, - c_void_p, -) -from ctypes.util import find_library - -from ._ssl_constants import _set_ssl_context_verify_mode - -_mac_version = platform.mac_ver()[0] -_mac_version_info = tuple(map(int, _mac_version.split("."))) -if _mac_version_info < (10, 8): - raise ImportError( - f"Only OS X 10.8 and newer are supported, not {_mac_version_info[0]}.{_mac_version_info[1]}" - ) - -_is_macos_version_10_14_or_later = _mac_version_info >= (10, 14) - - -def _load_cdll(name: str, macos10_16_path: str) -> CDLL: - """Loads a CDLL by name, falling back to known path on 10.16+""" - try: - # Big Sur is technically 11 but we use 10.16 due to the Big Sur - # beta being labeled as 10.16. - path: str | None - if _mac_version_info >= (10, 16): - path = macos10_16_path - else: - path = find_library(name) - if not path: - raise OSError # Caught and reraised as 'ImportError' - return CDLL(path, use_errno=True) - except OSError: - raise ImportError(f"The library {name} failed to load") from None - - -Security = _load_cdll( - "Security", "/System/Library/Frameworks/Security.framework/Security" -) -CoreFoundation = _load_cdll( - "CoreFoundation", - "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", -) - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFErrorRef = POINTER(CFError) -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFArrayCallBacks = c_void_p -CFOptionFlags = c_uint32 - -SecCertificateRef = POINTER(c_void_p) -SecPolicyRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 - -try: - Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [SecCertificateRef] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argtypes = [SecTrustRef, Boolean] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecPolicyCreateRevocation.argtypes = [CFOptionFlags] - Security.SecPolicyCreateRevocation.restype = SecPolicyRef - - Security.SecPolicyCreateSSL.argtypes = [Boolean, CFStringRef] - Security.SecPolicyCreateSSL.restype = SecPolicyRef - - Security.SecTrustCreateWithCertificates.argtypes = [ - CFTypeRef, - CFTypeRef, - POINTER(SecTrustRef), - ] - Security.SecTrustCreateWithCertificates.restype = OSStatus - - Security.SecTrustGetTrustResult.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType), - ] - Security.SecTrustGetTrustResult.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType), - ] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustRef = SecTrustRef # type: ignore[attr-defined] - Security.SecTrustResultType = SecTrustResultType # type: ignore[attr-defined] - Security.OSStatus = OSStatus # type: ignore[attr-defined] - - kSecRevocationUseAnyAvailableMethod = 3 - kSecRevocationRequirePositiveResponse = 8 - - CoreFoundation.CFRelease.argtypes = [CFTypeRef] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding, - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding, - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [CFDataRef] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.CFErrorGetCode.argtypes = [CFErrorRef] - CoreFoundation.CFErrorGetCode.restype = CFIndex - - CoreFoundation.CFErrorCopyDescription.argtypes = [CFErrorRef] - CoreFoundation.CFErrorCopyDescription.restype = CFStringRef - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( # type: ignore[attr-defined] - CoreFoundation, "kCFAllocatorDefault" - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( # type: ignore[attr-defined] - CoreFoundation, "kCFTypeArrayCallBacks" - ) - - CoreFoundation.CFTypeRef = CFTypeRef # type: ignore[attr-defined] - CoreFoundation.CFArrayRef = CFArrayRef # type: ignore[attr-defined] - CoreFoundation.CFStringRef = CFStringRef # type: ignore[attr-defined] - CoreFoundation.CFErrorRef = CFErrorRef # type: ignore[attr-defined] - -except AttributeError as e: - raise ImportError(f"Error initializing ctypes: {e}") from None - -# SecTrustEvaluateWithError is macOS 10.14+ -if _is_macos_version_10_14_or_later: - try: - Security.SecTrustEvaluateWithError.argtypes = [ - SecTrustRef, - POINTER(CFErrorRef), - ] - Security.SecTrustEvaluateWithError.restype = c_bool - except AttributeError as e: - raise ImportError(f"Error initializing ctypes: {e}") from None - - -def _handle_osstatus(result: OSStatus, _: typing.Any, args: typing.Any) -> typing.Any: - """ - Raises an error if the OSStatus value is non-zero. - """ - if int(result) == 0: - return args - - # Returns a CFString which we need to transform - # into a UTF-8 Python string. - error_message_cfstring = None - try: - error_message_cfstring = Security.SecCopyErrorMessageString(result, None) - - # First step is convert the CFString into a C string pointer. - # We try the fast no-copy way first. - error_message_cfstring_c_void_p = ctypes.cast( - error_message_cfstring, ctypes.POINTER(ctypes.c_void_p) - ) - message = CoreFoundation.CFStringGetCStringPtr( - error_message_cfstring_c_void_p, CFConst.kCFStringEncodingUTF8 - ) - - # Quoting the Apple dev docs: - # - # "A pointer to a C string or NULL if the internal - # storage of theString does not allow this to be - # returned efficiently." - # - # So we need to get our hands dirty. - if message is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - error_message_cfstring_c_void_p, - buffer, - 1024, - CFConst.kCFStringEncodingUTF8, - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - message = buffer.value - - finally: - if error_message_cfstring is not None: - CoreFoundation.CFRelease(error_message_cfstring) - - # If no message can be found for this status we come - # up with a generic one that forwards the status code. - if message is None or message == "": - message = f"SecureTransport operation returned a non-zero OSStatus: {result}" - - raise ssl.SSLError(message) - - -Security.SecTrustCreateWithCertificates.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustSetAnchorCertificates.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustSetAnchorCertificatesOnly.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustGetTrustResult.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustEvaluate.errcheck = _handle_osstatus # type: ignore[assignment] - - -class CFConst: - """CoreFoundation constants""" - - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - errSecIncompleteCertRevocationCheck = -67635 - errSecHostNameMismatch = -67602 - errSecCertificateExpired = -67818 - errSecNotTrusted = -67843 - - -def _bytes_to_cf_data_ref(value: bytes) -> CFDataRef: # type: ignore[valid-type] - return CoreFoundation.CFDataCreate( # type: ignore[no-any-return] - CoreFoundation.kCFAllocatorDefault, value, len(value) - ) - - -def _bytes_to_cf_string(value: bytes) -> CFString: - """ - Given a Python binary data, create a CFString. - The string must be CFReleased by the caller. - """ - c_str = ctypes.c_char_p(value) - cf_str = CoreFoundation.CFStringCreateWithCString( - CoreFoundation.kCFAllocatorDefault, - c_str, - CFConst.kCFStringEncodingUTF8, - ) - return cf_str # type: ignore[no-any-return] - - -def _cf_string_ref_to_str(cf_string_ref: CFStringRef) -> str | None: # type: ignore[valid-type] - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - Yes, it annoys me quite a lot that this function is this complex. - """ - - string = CoreFoundation.CFStringGetCStringPtr( - cf_string_ref, CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - cf_string_ref, buffer, 1024, CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - string = buffer.value - if string is not None: - string = string.decode("utf-8") - return string # type: ignore[no-any-return] - - -def _der_certs_to_cf_cert_array(certs: list[bytes]) -> CFMutableArrayRef: # type: ignore[valid-type] - """Builds a CFArray of SecCertificateRefs from a list of DER-encoded certificates. - Responsibility of the caller to call CoreFoundation.CFRelease on the CFArray. - """ - cf_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cf_array: - raise MemoryError("Unable to allocate memory!") - - for cert_data in certs: - cf_data = None - sec_cert_ref = None - try: - cf_data = _bytes_to_cf_data_ref(cert_data) - sec_cert_ref = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, cf_data - ) - CoreFoundation.CFArrayAppendValue(cf_array, sec_cert_ref) - finally: - if cf_data: - CoreFoundation.CFRelease(cf_data) - if sec_cert_ref: - CoreFoundation.CFRelease(sec_cert_ref) - - return cf_array # type: ignore[no-any-return] - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - check_hostname = ctx.check_hostname - verify_mode = ctx.verify_mode - ctx.check_hostname = False - _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE) - try: - yield - finally: - ctx.check_hostname = check_hostname - _set_ssl_context_verify_mode(ctx, verify_mode) - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - certs = None - policies = None - trust = None - try: - # Only set a hostname on the policy if we're verifying the hostname - # on the leaf certificate. - if server_hostname is not None and ssl_context.check_hostname: - cf_str_hostname = None - try: - cf_str_hostname = _bytes_to_cf_string(server_hostname.encode("ascii")) - ssl_policy = Security.SecPolicyCreateSSL(True, cf_str_hostname) - finally: - if cf_str_hostname: - CoreFoundation.CFRelease(cf_str_hostname) - else: - ssl_policy = Security.SecPolicyCreateSSL(True, None) - - policies = ssl_policy - if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN: - # Add explicit policy requiring positive revocation checks - policies = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - CoreFoundation.CFArrayAppendValue(policies, ssl_policy) - CoreFoundation.CFRelease(ssl_policy) - revocation_policy = Security.SecPolicyCreateRevocation( - kSecRevocationUseAnyAvailableMethod - | kSecRevocationRequirePositiveResponse - ) - CoreFoundation.CFArrayAppendValue(policies, revocation_policy) - CoreFoundation.CFRelease(revocation_policy) - elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF: - raise NotImplementedError("VERIFY_CRL_CHECK_LEAF not implemented for macOS") - - certs = None - try: - certs = _der_certs_to_cf_cert_array(cert_chain) - - # Now that we have certificates loaded and a SecPolicy - # we can finally create a SecTrust object! - trust = Security.SecTrustRef() - Security.SecTrustCreateWithCertificates( - certs, policies, ctypes.byref(trust) - ) - - finally: - # The certs are now being held by SecTrust so we can - # release our handles for the array. - if certs: - CoreFoundation.CFRelease(certs) - - # If there are additional trust anchors to load we need to transform - # the list of DER-encoded certificates into a CFArray. - ctx_ca_certs_der: list[bytes] | None = ssl_context.get_ca_certs( - binary_form=True - ) - if ctx_ca_certs_der: - ctx_ca_certs = None - try: - ctx_ca_certs = _der_certs_to_cf_cert_array(ctx_ca_certs_der) - Security.SecTrustSetAnchorCertificates(trust, ctx_ca_certs) - finally: - if ctx_ca_certs: - CoreFoundation.CFRelease(ctx_ca_certs) - - # We always want system certificates. - Security.SecTrustSetAnchorCertificatesOnly(trust, False) - - # macOS 10.13 and earlier don't support SecTrustEvaluateWithError() - # so we use SecTrustEvaluate() which means we need to construct error - # messages ourselves. - if _is_macos_version_10_14_or_later: - _verify_peercerts_impl_macos_10_14(ssl_context, trust) - else: - _verify_peercerts_impl_macos_10_13(ssl_context, trust) - finally: - if policies: - CoreFoundation.CFRelease(policies) - if trust: - CoreFoundation.CFRelease(trust) - - -def _verify_peercerts_impl_macos_10_13( - ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any -) -> None: - """Verify using 'SecTrustEvaluate' API for macOS 10.13 and earlier. - macOS 10.14 added the 'SecTrustEvaluateWithError' API. - """ - sec_trust_result_type = Security.SecTrustResultType() - Security.SecTrustEvaluate(sec_trust_ref, ctypes.byref(sec_trust_result_type)) - - try: - sec_trust_result_type_as_int = int(sec_trust_result_type.value) - except (ValueError, TypeError): - sec_trust_result_type_as_int = -1 - - # Apple doesn't document these values in their own API docs. - # See: https://github.com/xybp888/iOS-SDKs/blob/master/iPhoneOS13.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecTrust.h#L84 - if ( - ssl_context.verify_mode == ssl.CERT_REQUIRED - and sec_trust_result_type_as_int not in (1, 4) - ): - # Note that we're not able to ignore only hostname errors - # for macOS 10.13 and earlier, so check_hostname=False will - # still return an error. - sec_trust_result_type_to_message = { - 0: "Invalid trust result type", - # 1: "Trust evaluation succeeded", - 2: "User confirmation required", - 3: "User specified that certificate is not trusted", - # 4: "Trust result is unspecified", - 5: "Recoverable trust failure occurred", - 6: "Fatal trust failure occurred", - 7: "Other error occurred, certificate may be revoked", - } - error_message = sec_trust_result_type_to_message.get( - sec_trust_result_type_as_int, - f"Unknown trust result: {sec_trust_result_type_as_int}", - ) - - err = ssl.SSLCertVerificationError(error_message) - err.verify_message = error_message - err.verify_code = sec_trust_result_type_as_int - raise err - - -def _verify_peercerts_impl_macos_10_14( - ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any -) -> None: - """Verify using 'SecTrustEvaluateWithError' API for macOS 10.14+.""" - cf_error = CoreFoundation.CFErrorRef() - sec_trust_eval_result = Security.SecTrustEvaluateWithError( - sec_trust_ref, ctypes.byref(cf_error) - ) - # sec_trust_eval_result is a bool (0 or 1) - # where 1 means that the certs are trusted. - if sec_trust_eval_result == 1: - is_trusted = True - elif sec_trust_eval_result == 0: - is_trusted = False - else: - raise ssl.SSLError( - f"Unknown result from Security.SecTrustEvaluateWithError: {sec_trust_eval_result!r}" - ) - - cf_error_code = 0 - if not is_trusted: - cf_error_code = CoreFoundation.CFErrorGetCode(cf_error) - - # If the error is a known failure that we're - # explicitly okay with from SSLContext configuration - # we can set is_trusted accordingly. - if ssl_context.verify_mode != ssl.CERT_REQUIRED and ( - cf_error_code == CFConst.errSecNotTrusted - or cf_error_code == CFConst.errSecCertificateExpired - ): - is_trusted = True - - # If we're still not trusted then we start to - # construct and raise the SSLCertVerificationError. - if not is_trusted: - cf_error_string_ref = None - try: - cf_error_string_ref = CoreFoundation.CFErrorCopyDescription(cf_error) - - # Can this ever return 'None' if there's a CFError? - cf_error_message = ( - _cf_string_ref_to_str(cf_error_string_ref) - or "Certificate verification failed" - ) - - # TODO: Not sure if we need the SecTrustResultType for anything? - # We only care whether or not it's a success or failure for now. - sec_trust_result_type = Security.SecTrustResultType() - Security.SecTrustGetTrustResult( - sec_trust_ref, ctypes.byref(sec_trust_result_type) - ) - - err = ssl.SSLCertVerificationError(cf_error_message) - err.verify_message = cf_error_message - err.verify_code = cf_error_code - raise err - finally: - if cf_error_string_ref: - CoreFoundation.CFRelease(cf_error_string_ref) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py deleted file mode 100644 index 9951cf7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py +++ /dev/null @@ -1,66 +0,0 @@ -import contextlib -import os -import re -import ssl -import typing - -# candidates based on https://github.com/tiran/certifi-system-store by Christian Heimes -_CA_FILE_CANDIDATES = [ - # Alpine, Arch, Fedora 34+, OpenWRT, RHEL 9+, BSD - "/etc/ssl/cert.pem", - # Fedora <= 34, RHEL <= 9, CentOS <= 9 - "/etc/pki/tls/cert.pem", - # Debian, Ubuntu (requires ca-certificates) - "/etc/ssl/certs/ca-certificates.crt", - # SUSE - "/etc/ssl/ca-bundle.pem", -] - -_HASHED_CERT_FILENAME_RE = re.compile(r"^[0-9a-fA-F]{8}\.[0-9]$") - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - # First, check whether the default locations from OpenSSL - # seem like they will give us a usable set of CA certs. - # ssl.get_default_verify_paths already takes care of: - # - getting cafile from either the SSL_CERT_FILE env var - # or the path configured when OpenSSL was compiled, - # and verifying that that path exists - # - getting capath from either the SSL_CERT_DIR env var - # or the path configured when OpenSSL was compiled, - # and verifying that that path exists - # In addition we'll check whether capath appears to contain certs. - defaults = ssl.get_default_verify_paths() - if defaults.cafile or (defaults.capath and _capath_contains_certs(defaults.capath)): - ctx.set_default_verify_paths() - else: - # cafile from OpenSSL doesn't exist - # and capath from OpenSSL doesn't contain certs. - # Let's search other common locations instead. - for cafile in _CA_FILE_CANDIDATES: - if os.path.isfile(cafile): - ctx.load_verify_locations(cafile=cafile) - break - - yield - - -def _capath_contains_certs(capath: str) -> bool: - """Check whether capath exists and contains certs in the expected format.""" - if not os.path.isdir(capath): - return False - for name in os.listdir(capath): - if _HASHED_CERT_FILENAME_RE.match(name): - return True - return False - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - # This is a no-op because we've enabled SSLContext's built-in - # verification via verify_mode=CERT_REQUIRED, and don't need to repeat it. - pass diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py deleted file mode 100644 index b1ee7a3..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py +++ /dev/null @@ -1,31 +0,0 @@ -import ssl -import sys -import typing - -# Hold on to the original class so we can create it consistently -# even if we inject our own SSLContext into the ssl module. -_original_SSLContext = ssl.SSLContext -_original_super_SSLContext = super(_original_SSLContext, _original_SSLContext) - -# CPython is known to be good, but non-CPython implementations -# may implement SSLContext differently so to be safe we don't -# subclass the SSLContext. - -# This is returned by truststore.SSLContext.__class__() -_truststore_SSLContext_dunder_class: typing.Optional[type] - -# This value is the superclass of truststore.SSLContext. -_truststore_SSLContext_super_class: type - -if sys.implementation.name == "cpython": - _truststore_SSLContext_super_class = _original_SSLContext - _truststore_SSLContext_dunder_class = None -else: - _truststore_SSLContext_super_class = object - _truststore_SSLContext_dunder_class = _original_SSLContext - - -def _set_ssl_context_verify_mode( - ssl_context: ssl.SSLContext, verify_mode: ssl.VerifyMode -) -> None: - _original_super_SSLContext.verify_mode.__set__(ssl_context, verify_mode) # type: ignore[attr-defined] diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py deleted file mode 100644 index a9bf9ab..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py +++ /dev/null @@ -1,567 +0,0 @@ -import contextlib -import ssl -import typing -from ctypes import WinDLL # type: ignore -from ctypes import WinError # type: ignore -from ctypes import ( - POINTER, - Structure, - c_char_p, - c_ulong, - c_void_p, - c_wchar_p, - cast, - create_unicode_buffer, - pointer, - sizeof, -) -from ctypes.wintypes import ( - BOOL, - DWORD, - HANDLE, - LONG, - LPCSTR, - LPCVOID, - LPCWSTR, - LPFILETIME, - LPSTR, - LPWSTR, -) -from typing import TYPE_CHECKING, Any - -from ._ssl_constants import _set_ssl_context_verify_mode - -HCERTCHAINENGINE = HANDLE -HCERTSTORE = HANDLE -HCRYPTPROV_LEGACY = HANDLE - - -class CERT_CONTEXT(Structure): - _fields_ = ( - ("dwCertEncodingType", DWORD), - ("pbCertEncoded", c_void_p), - ("cbCertEncoded", DWORD), - ("pCertInfo", c_void_p), - ("hCertStore", HCERTSTORE), - ) - - -PCERT_CONTEXT = POINTER(CERT_CONTEXT) -PCCERT_CONTEXT = POINTER(PCERT_CONTEXT) - - -class CERT_ENHKEY_USAGE(Structure): - _fields_ = ( - ("cUsageIdentifier", DWORD), - ("rgpszUsageIdentifier", POINTER(LPSTR)), - ) - - -PCERT_ENHKEY_USAGE = POINTER(CERT_ENHKEY_USAGE) - - -class CERT_USAGE_MATCH(Structure): - _fields_ = ( - ("dwType", DWORD), - ("Usage", CERT_ENHKEY_USAGE), - ) - - -class CERT_CHAIN_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("RequestedUsage", CERT_USAGE_MATCH), - ("RequestedIssuancePolicy", CERT_USAGE_MATCH), - ("dwUrlRetrievalTimeout", DWORD), - ("fCheckRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ("pftCacheResync", LPFILETIME), - ("pStrongSignPara", c_void_p), - ("dwStrongSignFlags", DWORD), - ) - - -if TYPE_CHECKING: - PCERT_CHAIN_PARA = pointer[CERT_CHAIN_PARA] # type: ignore[misc] -else: - PCERT_CHAIN_PARA = POINTER(CERT_CHAIN_PARA) - - -class CERT_TRUST_STATUS(Structure): - _fields_ = ( - ("dwErrorStatus", DWORD), - ("dwInfoStatus", DWORD), - ) - - -class CERT_CHAIN_ELEMENT(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("pCertContext", PCERT_CONTEXT), - ("TrustStatus", CERT_TRUST_STATUS), - ("pRevocationInfo", c_void_p), - ("pIssuanceUsage", PCERT_ENHKEY_USAGE), - ("pApplicationUsage", PCERT_ENHKEY_USAGE), - ("pwszExtendedErrorInfo", LPCWSTR), - ) - - -PCERT_CHAIN_ELEMENT = POINTER(CERT_CHAIN_ELEMENT) - - -class CERT_SIMPLE_CHAIN(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("TrustStatus", CERT_TRUST_STATUS), - ("cElement", DWORD), - ("rgpElement", POINTER(PCERT_CHAIN_ELEMENT)), - ("pTrustListInfo", c_void_p), - ("fHasRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ) - - -PCERT_SIMPLE_CHAIN = POINTER(CERT_SIMPLE_CHAIN) - - -class CERT_CHAIN_CONTEXT(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("TrustStatus", CERT_TRUST_STATUS), - ("cChain", DWORD), - ("rgpChain", POINTER(PCERT_SIMPLE_CHAIN)), - ("cLowerQualityChainContext", DWORD), - ("rgpLowerQualityChainContext", c_void_p), - ("fHasRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ) - - -PCERT_CHAIN_CONTEXT = POINTER(CERT_CHAIN_CONTEXT) -PCCERT_CHAIN_CONTEXT = POINTER(PCERT_CHAIN_CONTEXT) - - -class SSL_EXTRA_CERT_CHAIN_POLICY_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwAuthType", DWORD), - ("fdwChecks", DWORD), - ("pwszServerName", LPCWSTR), - ) - - -class CERT_CHAIN_POLICY_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwFlags", DWORD), - ("pvExtraPolicyPara", c_void_p), - ) - - -PCERT_CHAIN_POLICY_PARA = POINTER(CERT_CHAIN_POLICY_PARA) - - -class CERT_CHAIN_POLICY_STATUS(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwError", DWORD), - ("lChainIndex", LONG), - ("lElementIndex", LONG), - ("pvExtraPolicyStatus", c_void_p), - ) - - -PCERT_CHAIN_POLICY_STATUS = POINTER(CERT_CHAIN_POLICY_STATUS) - - -class CERT_CHAIN_ENGINE_CONFIG(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("hRestrictedRoot", HCERTSTORE), - ("hRestrictedTrust", HCERTSTORE), - ("hRestrictedOther", HCERTSTORE), - ("cAdditionalStore", DWORD), - ("rghAdditionalStore", c_void_p), - ("dwFlags", DWORD), - ("dwUrlRetrievalTimeout", DWORD), - ("MaximumCachedCertificates", DWORD), - ("CycleDetectionModulus", DWORD), - ("hExclusiveRoot", HCERTSTORE), - ("hExclusiveTrustedPeople", HCERTSTORE), - ("dwExclusiveFlags", DWORD), - ) - - -PCERT_CHAIN_ENGINE_CONFIG = POINTER(CERT_CHAIN_ENGINE_CONFIG) -PHCERTCHAINENGINE = POINTER(HCERTCHAINENGINE) - -X509_ASN_ENCODING = 0x00000001 -PKCS_7_ASN_ENCODING = 0x00010000 -CERT_STORE_PROV_MEMORY = b"Memory" -CERT_STORE_ADD_USE_EXISTING = 2 -USAGE_MATCH_TYPE_OR = 1 -OID_PKIX_KP_SERVER_AUTH = c_char_p(b"1.3.6.1.5.5.7.3.1") -CERT_CHAIN_REVOCATION_CHECK_END_CERT = 0x10000000 -CERT_CHAIN_REVOCATION_CHECK_CHAIN = 0x20000000 -CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS = 0x00000007 -CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG = 0x00000008 -CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG = 0x00000010 -CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG = 0x00000040 -CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG = 0x00000020 -CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG = 0x00000080 -CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS = 0x00000F00 -CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG = 0x00008000 -CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG = 0x00004000 -SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000 -AUTHTYPE_SERVER = 2 -CERT_CHAIN_POLICY_SSL = 4 -FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 -FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200 - -# Flags to set for SSLContext.verify_mode=CERT_NONE -CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS = ( - CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS - | CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG - | CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG - | CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG - | CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG - | CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG - | CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS - | CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG - | CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG -) - -wincrypt = WinDLL("crypt32.dll") -kernel32 = WinDLL("kernel32.dll") - - -def _handle_win_error(result: bool, _: Any, args: Any) -> Any: - if not result: - # Note, actually raises OSError after calling GetLastError and FormatMessage - raise WinError() - return args - - -CertCreateCertificateChainEngine = wincrypt.CertCreateCertificateChainEngine -CertCreateCertificateChainEngine.argtypes = ( - PCERT_CHAIN_ENGINE_CONFIG, - PHCERTCHAINENGINE, -) -CertCreateCertificateChainEngine.errcheck = _handle_win_error - -CertOpenStore = wincrypt.CertOpenStore -CertOpenStore.argtypes = (LPCSTR, DWORD, HCRYPTPROV_LEGACY, DWORD, c_void_p) -CertOpenStore.restype = HCERTSTORE -CertOpenStore.errcheck = _handle_win_error - -CertAddEncodedCertificateToStore = wincrypt.CertAddEncodedCertificateToStore -CertAddEncodedCertificateToStore.argtypes = ( - HCERTSTORE, - DWORD, - c_char_p, - DWORD, - DWORD, - PCCERT_CONTEXT, -) -CertAddEncodedCertificateToStore.restype = BOOL - -CertCreateCertificateContext = wincrypt.CertCreateCertificateContext -CertCreateCertificateContext.argtypes = (DWORD, c_char_p, DWORD) -CertCreateCertificateContext.restype = PCERT_CONTEXT -CertCreateCertificateContext.errcheck = _handle_win_error - -CertGetCertificateChain = wincrypt.CertGetCertificateChain -CertGetCertificateChain.argtypes = ( - HCERTCHAINENGINE, - PCERT_CONTEXT, - LPFILETIME, - HCERTSTORE, - PCERT_CHAIN_PARA, - DWORD, - c_void_p, - PCCERT_CHAIN_CONTEXT, -) -CertGetCertificateChain.restype = BOOL -CertGetCertificateChain.errcheck = _handle_win_error - -CertVerifyCertificateChainPolicy = wincrypt.CertVerifyCertificateChainPolicy -CertVerifyCertificateChainPolicy.argtypes = ( - c_ulong, - PCERT_CHAIN_CONTEXT, - PCERT_CHAIN_POLICY_PARA, - PCERT_CHAIN_POLICY_STATUS, -) -CertVerifyCertificateChainPolicy.restype = BOOL - -CertCloseStore = wincrypt.CertCloseStore -CertCloseStore.argtypes = (HCERTSTORE, DWORD) -CertCloseStore.restype = BOOL -CertCloseStore.errcheck = _handle_win_error - -CertFreeCertificateChain = wincrypt.CertFreeCertificateChain -CertFreeCertificateChain.argtypes = (PCERT_CHAIN_CONTEXT,) - -CertFreeCertificateContext = wincrypt.CertFreeCertificateContext -CertFreeCertificateContext.argtypes = (PCERT_CONTEXT,) - -CertFreeCertificateChainEngine = wincrypt.CertFreeCertificateChainEngine -CertFreeCertificateChainEngine.argtypes = (HCERTCHAINENGINE,) - -FormatMessageW = kernel32.FormatMessageW -FormatMessageW.argtypes = ( - DWORD, - LPCVOID, - DWORD, - DWORD, - LPWSTR, - DWORD, - c_void_p, -) -FormatMessageW.restype = DWORD - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - """Verify the cert_chain from the server using Windows APIs.""" - - # If the peer didn't send any certificates then - # we can't do verification. Raise an error. - if not cert_chain: - raise ssl.SSLCertVerificationError("Peer sent no certificates to verify") - - pCertContext = None - hIntermediateCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None) - try: - # Add intermediate certs to an in-memory cert store - for cert_bytes in cert_chain[1:]: - CertAddEncodedCertificateToStore( - hIntermediateCertStore, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - cert_bytes, - len(cert_bytes), - CERT_STORE_ADD_USE_EXISTING, - None, - ) - - # Cert context for leaf cert - leaf_cert = cert_chain[0] - pCertContext = CertCreateCertificateContext( - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, leaf_cert, len(leaf_cert) - ) - - # Chain params to match certs for serverAuth extended usage - cert_enhkey_usage = CERT_ENHKEY_USAGE() - cert_enhkey_usage.cUsageIdentifier = 1 - cert_enhkey_usage.rgpszUsageIdentifier = (c_char_p * 1)(OID_PKIX_KP_SERVER_AUTH) - cert_usage_match = CERT_USAGE_MATCH() - cert_usage_match.Usage = cert_enhkey_usage - chain_params = CERT_CHAIN_PARA() - chain_params.RequestedUsage = cert_usage_match - chain_params.cbSize = sizeof(chain_params) - pChainPara = pointer(chain_params) - - if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN: - chain_flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN - elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF: - chain_flags = CERT_CHAIN_REVOCATION_CHECK_END_CERT - else: - chain_flags = 0 - - try: - # First attempt to verify using the default Windows system trust roots - # (default chain engine). - _get_and_verify_cert_chain( - ssl_context, - None, - hIntermediateCertStore, - pCertContext, - pChainPara, - server_hostname, - chain_flags=chain_flags, - ) - except ssl.SSLCertVerificationError as e: - # If that fails but custom CA certs have been added - # to the SSLContext using load_verify_locations, - # try verifying using a custom chain engine - # that trusts the custom CA certs. - custom_ca_certs: list[bytes] | None = ssl_context.get_ca_certs( - binary_form=True - ) - if custom_ca_certs: - try: - _verify_using_custom_ca_certs( - ssl_context, - custom_ca_certs, - hIntermediateCertStore, - pCertContext, - pChainPara, - server_hostname, - chain_flags=chain_flags, - ) - # Raise the original error, not the new error. - except ssl.SSLCertVerificationError: - raise e from None - else: - raise - finally: - CertCloseStore(hIntermediateCertStore, 0) - if pCertContext: - CertFreeCertificateContext(pCertContext) - - -def _get_and_verify_cert_chain( - ssl_context: ssl.SSLContext, - hChainEngine: HCERTCHAINENGINE | None, - hIntermediateCertStore: HCERTSTORE, - pPeerCertContext: c_void_p, - pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type] - server_hostname: str | None, - chain_flags: int, -) -> None: - ppChainContext = None - try: - # Get cert chain - ppChainContext = pointer(PCERT_CHAIN_CONTEXT()) - CertGetCertificateChain( - hChainEngine, # chain engine - pPeerCertContext, # leaf cert context - None, # current system time - hIntermediateCertStore, # additional in-memory cert store - pChainPara, # chain-building parameters - chain_flags, - None, # reserved - ppChainContext, # the resulting chain context - ) - pChainContext = ppChainContext.contents - - # Verify cert chain - ssl_extra_cert_chain_policy_para = SSL_EXTRA_CERT_CHAIN_POLICY_PARA() - ssl_extra_cert_chain_policy_para.cbSize = sizeof( - ssl_extra_cert_chain_policy_para - ) - ssl_extra_cert_chain_policy_para.dwAuthType = AUTHTYPE_SERVER - ssl_extra_cert_chain_policy_para.fdwChecks = 0 - if ssl_context.check_hostname is False: - ssl_extra_cert_chain_policy_para.fdwChecks = ( - SECURITY_FLAG_IGNORE_CERT_CN_INVALID - ) - if server_hostname: - ssl_extra_cert_chain_policy_para.pwszServerName = c_wchar_p(server_hostname) - - chain_policy = CERT_CHAIN_POLICY_PARA() - chain_policy.pvExtraPolicyPara = cast( - pointer(ssl_extra_cert_chain_policy_para), c_void_p - ) - if ssl_context.verify_mode == ssl.CERT_NONE: - chain_policy.dwFlags |= CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS - chain_policy.cbSize = sizeof(chain_policy) - - pPolicyPara = pointer(chain_policy) - policy_status = CERT_CHAIN_POLICY_STATUS() - policy_status.cbSize = sizeof(policy_status) - pPolicyStatus = pointer(policy_status) - CertVerifyCertificateChainPolicy( - CERT_CHAIN_POLICY_SSL, - pChainContext, - pPolicyPara, - pPolicyStatus, - ) - - # Check status - error_code = policy_status.dwError - if error_code: - # Try getting a human readable message for an error code. - error_message_buf = create_unicode_buffer(1024) - error_message_chars = FormatMessageW( - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - None, - error_code, - 0, - error_message_buf, - sizeof(error_message_buf), - None, - ) - - # See if we received a message for the error, - # otherwise we use a generic error with the - # error code and hope that it's search-able. - if error_message_chars <= 0: - error_message = f"Certificate chain policy error {error_code:#x} [{policy_status.lElementIndex}]" - else: - error_message = error_message_buf.value.strip() - - err = ssl.SSLCertVerificationError(error_message) - err.verify_message = error_message - err.verify_code = error_code - raise err from None - finally: - if ppChainContext: - CertFreeCertificateChain(ppChainContext.contents) - - -def _verify_using_custom_ca_certs( - ssl_context: ssl.SSLContext, - custom_ca_certs: list[bytes], - hIntermediateCertStore: HCERTSTORE, - pPeerCertContext: c_void_p, - pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type] - server_hostname: str | None, - chain_flags: int, -) -> None: - hChainEngine = None - hRootCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None) - try: - # Add custom CA certs to an in-memory cert store - for cert_bytes in custom_ca_certs: - CertAddEncodedCertificateToStore( - hRootCertStore, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - cert_bytes, - len(cert_bytes), - CERT_STORE_ADD_USE_EXISTING, - None, - ) - - # Create a custom cert chain engine which exclusively trusts - # certs from our hRootCertStore - cert_chain_engine_config = CERT_CHAIN_ENGINE_CONFIG() - cert_chain_engine_config.cbSize = sizeof(cert_chain_engine_config) - cert_chain_engine_config.hExclusiveRoot = hRootCertStore - pConfig = pointer(cert_chain_engine_config) - phChainEngine = pointer(HCERTCHAINENGINE()) - CertCreateCertificateChainEngine( - pConfig, - phChainEngine, - ) - hChainEngine = phChainEngine.contents - - # Get and verify a cert chain using the custom chain engine - _get_and_verify_cert_chain( - ssl_context, - hChainEngine, - hIntermediateCertStore, - pPeerCertContext, - pChainPara, - server_hostname, - chain_flags, - ) - finally: - if hChainEngine: - CertFreeCertificateChainEngine(hChainEngine) - CertCloseStore(hRootCertStore, 0) - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - check_hostname = ctx.check_hostname - verify_mode = ctx.verify_mode - ctx.check_hostname = False - _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE) - try: - yield - finally: - ctx.check_hostname = check_hostname - _set_ssl_context_verify_mode(ctx, verify_mode) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed b/myenv/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py b/myenv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py deleted file mode 100644 index e429384..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py +++ /dev/null @@ -1,3641 +0,0 @@ -import abc -import collections -import collections.abc -import contextlib -import functools -import inspect -import operator -import sys -import types as _types -import typing -import warnings - -__all__ = [ - # Super-special typing primitives. - 'Any', - 'ClassVar', - 'Concatenate', - 'Final', - 'LiteralString', - 'ParamSpec', - 'ParamSpecArgs', - 'ParamSpecKwargs', - 'Self', - 'Type', - 'TypeVar', - 'TypeVarTuple', - 'Unpack', - - # ABCs (from collections.abc). - 'Awaitable', - 'AsyncIterator', - 'AsyncIterable', - 'Coroutine', - 'AsyncGenerator', - 'AsyncContextManager', - 'Buffer', - 'ChainMap', - - # Concrete collection types. - 'ContextManager', - 'Counter', - 'Deque', - 'DefaultDict', - 'NamedTuple', - 'OrderedDict', - 'TypedDict', - - # Structural checks, a.k.a. protocols. - 'SupportsAbs', - 'SupportsBytes', - 'SupportsComplex', - 'SupportsFloat', - 'SupportsIndex', - 'SupportsInt', - 'SupportsRound', - - # One-off things. - 'Annotated', - 'assert_never', - 'assert_type', - 'clear_overloads', - 'dataclass_transform', - 'deprecated', - 'Doc', - 'get_overloads', - 'final', - 'get_args', - 'get_origin', - 'get_original_bases', - 'get_protocol_members', - 'get_type_hints', - 'IntVar', - 'is_protocol', - 'is_typeddict', - 'Literal', - 'NewType', - 'overload', - 'override', - 'Protocol', - 'reveal_type', - 'runtime', - 'runtime_checkable', - 'Text', - 'TypeAlias', - 'TypeAliasType', - 'TypeGuard', - 'TypeIs', - 'TYPE_CHECKING', - 'Never', - 'NoReturn', - 'ReadOnly', - 'Required', - 'NotRequired', - - # Pure aliases, have always been in typing - 'AbstractSet', - 'AnyStr', - 'BinaryIO', - 'Callable', - 'Collection', - 'Container', - 'Dict', - 'ForwardRef', - 'FrozenSet', - 'Generator', - 'Generic', - 'Hashable', - 'IO', - 'ItemsView', - 'Iterable', - 'Iterator', - 'KeysView', - 'List', - 'Mapping', - 'MappingView', - 'Match', - 'MutableMapping', - 'MutableSequence', - 'MutableSet', - 'NoDefault', - 'Optional', - 'Pattern', - 'Reversible', - 'Sequence', - 'Set', - 'Sized', - 'TextIO', - 'Tuple', - 'Union', - 'ValuesView', - 'cast', - 'no_type_check', - 'no_type_check_decorator', -] - -# for backward compatibility -PEP_560 = True -GenericMeta = type -_PEP_696_IMPLEMENTED = sys.version_info >= (3, 13, 0, "beta") - -# The functions below are modified copies of typing internal helpers. -# They are needed by _ProtocolMeta and they provide support for PEP 646. - - -class _Sentinel: - def __repr__(self): - return "" - - -_marker = _Sentinel() - - -if sys.version_info >= (3, 10): - def _should_collect_from_parameters(t): - return isinstance( - t, (typing._GenericAlias, _types.GenericAlias, _types.UnionType) - ) -elif sys.version_info >= (3, 9): - def _should_collect_from_parameters(t): - return isinstance(t, (typing._GenericAlias, _types.GenericAlias)) -else: - def _should_collect_from_parameters(t): - return isinstance(t, typing._GenericAlias) and not t._special - - -NoReturn = typing.NoReturn - -# Some unconstrained type variables. These are used by the container types. -# (These are not for export.) -T = typing.TypeVar('T') # Any type. -KT = typing.TypeVar('KT') # Key type. -VT = typing.TypeVar('VT') # Value type. -T_co = typing.TypeVar('T_co', covariant=True) # Any type covariant containers. -T_contra = typing.TypeVar('T_contra', contravariant=True) # Ditto contravariant. - - -if sys.version_info >= (3, 11): - from typing import Any -else: - - class _AnyMeta(type): - def __instancecheck__(self, obj): - if self is Any: - raise TypeError("typing_extensions.Any cannot be used with isinstance()") - return super().__instancecheck__(obj) - - def __repr__(self): - if self is Any: - return "typing_extensions.Any" - return super().__repr__() - - class Any(metaclass=_AnyMeta): - """Special type indicating an unconstrained type. - - Any is compatible with every type. - - Any assumed to have all methods. - - All values assumed to be instances of Any. - Note that all the above statements are true from the point of view of - static type checkers. At runtime, Any should not be used with instance - checks. - """ - def __new__(cls, *args, **kwargs): - if cls is Any: - raise TypeError("Any cannot be instantiated") - return super().__new__(cls, *args, **kwargs) - - -ClassVar = typing.ClassVar - - -class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): - def __repr__(self): - return 'typing_extensions.' + self._name - - -Final = typing.Final - -if sys.version_info >= (3, 11): - final = typing.final -else: - # @final exists in 3.8+, but we backport it for all versions - # before 3.11 to keep support for the __final__ attribute. - # See https://bugs.python.org/issue46342 - def final(f): - """This decorator can be used to indicate to type checkers that - the decorated method cannot be overridden, and decorated class - cannot be subclassed. For example: - - class Base: - @final - def done(self) -> None: - ... - class Sub(Base): - def done(self) -> None: # Error reported by type checker - ... - @final - class Leaf: - ... - class Other(Leaf): # Error reported by type checker - ... - - There is no runtime checking of these properties. The decorator - sets the ``__final__`` attribute to ``True`` on the decorated object - to allow runtime introspection. - """ - try: - f.__final__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return f - - -def IntVar(name): - return typing.TypeVar(name) - - -# A Literal bug was fixed in 3.11.0, 3.10.1 and 3.9.8 -if sys.version_info >= (3, 10, 1): - Literal = typing.Literal -else: - def _flatten_literal_params(parameters): - """An internal helper for Literal creation: flatten Literals among parameters""" - params = [] - for p in parameters: - if isinstance(p, _LiteralGenericAlias): - params.extend(p.__args__) - else: - params.append(p) - return tuple(params) - - def _value_and_type_iter(params): - for p in params: - yield p, type(p) - - class _LiteralGenericAlias(typing._GenericAlias, _root=True): - def __eq__(self, other): - if not isinstance(other, _LiteralGenericAlias): - return NotImplemented - these_args_deduped = set(_value_and_type_iter(self.__args__)) - other_args_deduped = set(_value_and_type_iter(other.__args__)) - return these_args_deduped == other_args_deduped - - def __hash__(self): - return hash(frozenset(_value_and_type_iter(self.__args__))) - - class _LiteralForm(_ExtensionsSpecialForm, _root=True): - def __init__(self, doc: str): - self._name = 'Literal' - self._doc = self.__doc__ = doc - - def __getitem__(self, parameters): - if not isinstance(parameters, tuple): - parameters = (parameters,) - - parameters = _flatten_literal_params(parameters) - - val_type_pairs = list(_value_and_type_iter(parameters)) - try: - deduped_pairs = set(val_type_pairs) - except TypeError: - # unhashable parameters - pass - else: - # similar logic to typing._deduplicate on Python 3.9+ - if len(deduped_pairs) < len(val_type_pairs): - new_parameters = [] - for pair in val_type_pairs: - if pair in deduped_pairs: - new_parameters.append(pair[0]) - deduped_pairs.remove(pair) - assert not deduped_pairs, deduped_pairs - parameters = tuple(new_parameters) - - return _LiteralGenericAlias(self, parameters) - - Literal = _LiteralForm(doc="""\ - A type that can be used to indicate to type checkers - that the corresponding value has a value literally equivalent - to the provided parameter. For example: - - var: Literal[4] = 4 - - The type checker understands that 'var' is literally equal to - the value 4 and no other value. - - Literal[...] cannot be subclassed. There is no runtime - checking verifying that the parameter is actually a value - instead of a type.""") - - -_overload_dummy = typing._overload_dummy - - -if hasattr(typing, "get_overloads"): # 3.11+ - overload = typing.overload - get_overloads = typing.get_overloads - clear_overloads = typing.clear_overloads -else: - # {module: {qualname: {firstlineno: func}}} - _overload_registry = collections.defaultdict( - functools.partial(collections.defaultdict, dict) - ) - - def overload(func): - """Decorator for overloaded functions/methods. - - In a stub file, place two or more stub definitions for the same - function in a row, each decorated with @overload. For example: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - - In a non-stub file (i.e. a regular .py file), do the same but - follow it with an implementation. The implementation should *not* - be decorated with @overload. For example: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - def utf8(value): - # implementation goes here - - The overloads for a function can be retrieved at runtime using the - get_overloads() function. - """ - # classmethod and staticmethod - f = getattr(func, "__func__", func) - try: - _overload_registry[f.__module__][f.__qualname__][ - f.__code__.co_firstlineno - ] = func - except AttributeError: - # Not a normal function; ignore. - pass - return _overload_dummy - - def get_overloads(func): - """Return all defined overloads for *func* as a sequence.""" - # classmethod and staticmethod - f = getattr(func, "__func__", func) - if f.__module__ not in _overload_registry: - return [] - mod_dict = _overload_registry[f.__module__] - if f.__qualname__ not in mod_dict: - return [] - return list(mod_dict[f.__qualname__].values()) - - def clear_overloads(): - """Clear all overloads in the registry.""" - _overload_registry.clear() - - -# This is not a real generic class. Don't use outside annotations. -Type = typing.Type - -# Various ABCs mimicking those in collections.abc. -# A few are simply re-exported for completeness. -Awaitable = typing.Awaitable -Coroutine = typing.Coroutine -AsyncIterable = typing.AsyncIterable -AsyncIterator = typing.AsyncIterator -Deque = typing.Deque -DefaultDict = typing.DefaultDict -OrderedDict = typing.OrderedDict -Counter = typing.Counter -ChainMap = typing.ChainMap -Text = typing.Text -TYPE_CHECKING = typing.TYPE_CHECKING - - -if sys.version_info >= (3, 13, 0, "beta"): - from typing import AsyncContextManager, AsyncGenerator, ContextManager, Generator -else: - def _is_dunder(attr): - return attr.startswith('__') and attr.endswith('__') - - # Python <3.9 doesn't have typing._SpecialGenericAlias - _special_generic_alias_base = getattr( - typing, "_SpecialGenericAlias", typing._GenericAlias - ) - - class _SpecialGenericAlias(_special_generic_alias_base, _root=True): - def __init__(self, origin, nparams, *, inst=True, name=None, defaults=()): - if _special_generic_alias_base is typing._GenericAlias: - # Python <3.9 - self.__origin__ = origin - self._nparams = nparams - super().__init__(origin, nparams, special=True, inst=inst, name=name) - else: - # Python >= 3.9 - super().__init__(origin, nparams, inst=inst, name=name) - self._defaults = defaults - - def __setattr__(self, attr, val): - allowed_attrs = {'_name', '_inst', '_nparams', '_defaults'} - if _special_generic_alias_base is typing._GenericAlias: - # Python <3.9 - allowed_attrs.add("__origin__") - if _is_dunder(attr) or attr in allowed_attrs: - object.__setattr__(self, attr, val) - else: - setattr(self.__origin__, attr, val) - - @typing._tp_cache - def __getitem__(self, params): - if not isinstance(params, tuple): - params = (params,) - msg = "Parameters to generic types must be types." - params = tuple(typing._type_check(p, msg) for p in params) - if ( - self._defaults - and len(params) < self._nparams - and len(params) + len(self._defaults) >= self._nparams - ): - params = (*params, *self._defaults[len(params) - self._nparams:]) - actual_len = len(params) - - if actual_len != self._nparams: - if self._defaults: - expected = f"at least {self._nparams - len(self._defaults)}" - else: - expected = str(self._nparams) - if not self._nparams: - raise TypeError(f"{self} is not a generic class") - raise TypeError( - f"Too {'many' if actual_len > self._nparams else 'few'}" - f" arguments for {self};" - f" actual {actual_len}, expected {expected}" - ) - return self.copy_with(params) - - _NoneType = type(None) - Generator = _SpecialGenericAlias( - collections.abc.Generator, 3, defaults=(_NoneType, _NoneType) - ) - AsyncGenerator = _SpecialGenericAlias( - collections.abc.AsyncGenerator, 2, defaults=(_NoneType,) - ) - ContextManager = _SpecialGenericAlias( - contextlib.AbstractContextManager, - 2, - name="ContextManager", - defaults=(typing.Optional[bool],) - ) - AsyncContextManager = _SpecialGenericAlias( - contextlib.AbstractAsyncContextManager, - 2, - name="AsyncContextManager", - defaults=(typing.Optional[bool],) - ) - - -_PROTO_ALLOWLIST = { - 'collections.abc': [ - 'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable', - 'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', 'Buffer', - ], - 'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'], - 'typing_extensions': ['Buffer'], -} - - -_EXCLUDED_ATTRS = frozenset(typing.EXCLUDED_ATTRIBUTES) | { - "__match_args__", "__protocol_attrs__", "__non_callable_proto_members__", - "__final__", -} - - -def _get_protocol_attrs(cls): - attrs = set() - for base in cls.__mro__[:-1]: # without object - if base.__name__ in {'Protocol', 'Generic'}: - continue - annotations = getattr(base, '__annotations__', {}) - for attr in (*base.__dict__, *annotations): - if (not attr.startswith('_abc_') and attr not in _EXCLUDED_ATTRS): - attrs.add(attr) - return attrs - - -def _caller(depth=2): - try: - return sys._getframe(depth).f_globals.get('__name__', '__main__') - except (AttributeError, ValueError): # For platforms without _getframe() - return None - - -# `__match_args__` attribute was removed from protocol members in 3.13, -# we want to backport this change to older Python versions. -if sys.version_info >= (3, 13): - Protocol = typing.Protocol -else: - def _allow_reckless_class_checks(depth=3): - """Allow instance and class checks for special stdlib modules. - The abc and functools modules indiscriminately call isinstance() and - issubclass() on the whole MRO of a user class, which may contain protocols. - """ - return _caller(depth) in {'abc', 'functools', None} - - def _no_init(self, *args, **kwargs): - if type(self)._is_protocol: - raise TypeError('Protocols cannot be instantiated') - - def _type_check_issubclass_arg_1(arg): - """Raise TypeError if `arg` is not an instance of `type` - in `issubclass(arg, )`. - - In most cases, this is verified by type.__subclasscheck__. - Checking it again unnecessarily would slow down issubclass() checks, - so, we don't perform this check unless we absolutely have to. - - For various error paths, however, - we want to ensure that *this* error message is shown to the user - where relevant, rather than a typing.py-specific error message. - """ - if not isinstance(arg, type): - # Same error message as for issubclass(1, int). - raise TypeError('issubclass() arg 1 must be a class') - - # Inheriting from typing._ProtocolMeta isn't actually desirable, - # but is necessary to allow typing.Protocol and typing_extensions.Protocol - # to mix without getting TypeErrors about "metaclass conflict" - class _ProtocolMeta(type(typing.Protocol)): - # This metaclass is somewhat unfortunate, - # but is necessary for several reasons... - # - # NOTE: DO NOT call super() in any methods in this class - # That would call the methods on typing._ProtocolMeta on Python 3.8-3.11 - # and those are slow - def __new__(mcls, name, bases, namespace, **kwargs): - if name == "Protocol" and len(bases) < 2: - pass - elif {Protocol, typing.Protocol} & set(bases): - for base in bases: - if not ( - base in {object, typing.Generic, Protocol, typing.Protocol} - or base.__name__ in _PROTO_ALLOWLIST.get(base.__module__, []) - or is_protocol(base) - ): - raise TypeError( - f"Protocols can only inherit from other protocols, " - f"got {base!r}" - ) - return abc.ABCMeta.__new__(mcls, name, bases, namespace, **kwargs) - - def __init__(cls, *args, **kwargs): - abc.ABCMeta.__init__(cls, *args, **kwargs) - if getattr(cls, "_is_protocol", False): - cls.__protocol_attrs__ = _get_protocol_attrs(cls) - - def __subclasscheck__(cls, other): - if cls is Protocol: - return type.__subclasscheck__(cls, other) - if ( - getattr(cls, '_is_protocol', False) - and not _allow_reckless_class_checks() - ): - if not getattr(cls, '_is_runtime_protocol', False): - _type_check_issubclass_arg_1(other) - raise TypeError( - "Instance and class checks can only be used with " - "@runtime_checkable protocols" - ) - if ( - # this attribute is set by @runtime_checkable: - cls.__non_callable_proto_members__ - and cls.__dict__.get("__subclasshook__") is _proto_hook - ): - _type_check_issubclass_arg_1(other) - non_method_attrs = sorted(cls.__non_callable_proto_members__) - raise TypeError( - "Protocols with non-method members don't support issubclass()." - f" Non-method members: {str(non_method_attrs)[1:-1]}." - ) - return abc.ABCMeta.__subclasscheck__(cls, other) - - def __instancecheck__(cls, instance): - # We need this method for situations where attributes are - # assigned in __init__. - if cls is Protocol: - return type.__instancecheck__(cls, instance) - if not getattr(cls, "_is_protocol", False): - # i.e., it's a concrete subclass of a protocol - return abc.ABCMeta.__instancecheck__(cls, instance) - - if ( - not getattr(cls, '_is_runtime_protocol', False) and - not _allow_reckless_class_checks() - ): - raise TypeError("Instance and class checks can only be used with" - " @runtime_checkable protocols") - - if abc.ABCMeta.__instancecheck__(cls, instance): - return True - - for attr in cls.__protocol_attrs__: - try: - val = inspect.getattr_static(instance, attr) - except AttributeError: - break - # this attribute is set by @runtime_checkable: - if val is None and attr not in cls.__non_callable_proto_members__: - break - else: - return True - - return False - - def __eq__(cls, other): - # Hack so that typing.Generic.__class_getitem__ - # treats typing_extensions.Protocol - # as equivalent to typing.Protocol - if abc.ABCMeta.__eq__(cls, other) is True: - return True - return cls is Protocol and other is typing.Protocol - - # This has to be defined, or the abc-module cache - # complains about classes with this metaclass being unhashable, - # if we define only __eq__! - def __hash__(cls) -> int: - return type.__hash__(cls) - - @classmethod - def _proto_hook(cls, other): - if not cls.__dict__.get('_is_protocol', False): - return NotImplemented - - for attr in cls.__protocol_attrs__: - for base in other.__mro__: - # Check if the members appears in the class dictionary... - if attr in base.__dict__: - if base.__dict__[attr] is None: - return NotImplemented - break - - # ...or in annotations, if it is a sub-protocol. - annotations = getattr(base, '__annotations__', {}) - if ( - isinstance(annotations, collections.abc.Mapping) - and attr in annotations - and is_protocol(other) - ): - break - else: - return NotImplemented - return True - - class Protocol(typing.Generic, metaclass=_ProtocolMeta): - __doc__ = typing.Protocol.__doc__ - __slots__ = () - _is_protocol = True - _is_runtime_protocol = False - - def __init_subclass__(cls, *args, **kwargs): - super().__init_subclass__(*args, **kwargs) - - # Determine if this is a protocol or a concrete subclass. - if not cls.__dict__.get('_is_protocol', False): - cls._is_protocol = any(b is Protocol for b in cls.__bases__) - - # Set (or override) the protocol subclass hook. - if '__subclasshook__' not in cls.__dict__: - cls.__subclasshook__ = _proto_hook - - # Prohibit instantiation for protocol classes - if cls._is_protocol and cls.__init__ is Protocol.__init__: - cls.__init__ = _no_init - - -if sys.version_info >= (3, 13): - runtime_checkable = typing.runtime_checkable -else: - def runtime_checkable(cls): - """Mark a protocol class as a runtime protocol. - - Such protocol can be used with isinstance() and issubclass(). - Raise TypeError if applied to a non-protocol class. - This allows a simple-minded structural check very similar to - one trick ponies in collections.abc such as Iterable. - - For example:: - - @runtime_checkable - class Closable(Protocol): - def close(self): ... - - assert isinstance(open('/some/file'), Closable) - - Warning: this will check only the presence of the required methods, - not their type signatures! - """ - if not issubclass(cls, typing.Generic) or not getattr(cls, '_is_protocol', False): - raise TypeError(f'@runtime_checkable can be only applied to protocol classes,' - f' got {cls!r}') - cls._is_runtime_protocol = True - - # typing.Protocol classes on <=3.11 break if we execute this block, - # because typing.Protocol classes on <=3.11 don't have a - # `__protocol_attrs__` attribute, and this block relies on the - # `__protocol_attrs__` attribute. Meanwhile, typing.Protocol classes on 3.12.2+ - # break if we *don't* execute this block, because *they* assume that all - # protocol classes have a `__non_callable_proto_members__` attribute - # (which this block sets) - if isinstance(cls, _ProtocolMeta) or sys.version_info >= (3, 12, 2): - # PEP 544 prohibits using issubclass() - # with protocols that have non-method members. - # See gh-113320 for why we compute this attribute here, - # rather than in `_ProtocolMeta.__init__` - cls.__non_callable_proto_members__ = set() - for attr in cls.__protocol_attrs__: - try: - is_callable = callable(getattr(cls, attr, None)) - except Exception as e: - raise TypeError( - f"Failed to determine whether protocol member {attr!r} " - "is a method member" - ) from e - else: - if not is_callable: - cls.__non_callable_proto_members__.add(attr) - - return cls - - -# The "runtime" alias exists for backwards compatibility. -runtime = runtime_checkable - - -# Our version of runtime-checkable protocols is faster on Python 3.8-3.11 -if sys.version_info >= (3, 12): - SupportsInt = typing.SupportsInt - SupportsFloat = typing.SupportsFloat - SupportsComplex = typing.SupportsComplex - SupportsBytes = typing.SupportsBytes - SupportsIndex = typing.SupportsIndex - SupportsAbs = typing.SupportsAbs - SupportsRound = typing.SupportsRound -else: - @runtime_checkable - class SupportsInt(Protocol): - """An ABC with one abstract method __int__.""" - __slots__ = () - - @abc.abstractmethod - def __int__(self) -> int: - pass - - @runtime_checkable - class SupportsFloat(Protocol): - """An ABC with one abstract method __float__.""" - __slots__ = () - - @abc.abstractmethod - def __float__(self) -> float: - pass - - @runtime_checkable - class SupportsComplex(Protocol): - """An ABC with one abstract method __complex__.""" - __slots__ = () - - @abc.abstractmethod - def __complex__(self) -> complex: - pass - - @runtime_checkable - class SupportsBytes(Protocol): - """An ABC with one abstract method __bytes__.""" - __slots__ = () - - @abc.abstractmethod - def __bytes__(self) -> bytes: - pass - - @runtime_checkable - class SupportsIndex(Protocol): - __slots__ = () - - @abc.abstractmethod - def __index__(self) -> int: - pass - - @runtime_checkable - class SupportsAbs(Protocol[T_co]): - """ - An ABC with one abstract method __abs__ that is covariant in its return type. - """ - __slots__ = () - - @abc.abstractmethod - def __abs__(self) -> T_co: - pass - - @runtime_checkable - class SupportsRound(Protocol[T_co]): - """ - An ABC with one abstract method __round__ that is covariant in its return type. - """ - __slots__ = () - - @abc.abstractmethod - def __round__(self, ndigits: int = 0) -> T_co: - pass - - -def _ensure_subclassable(mro_entries): - def inner(func): - if sys.implementation.name == "pypy" and sys.version_info < (3, 9): - cls_dict = { - "__call__": staticmethod(func), - "__mro_entries__": staticmethod(mro_entries) - } - t = type(func.__name__, (), cls_dict) - return functools.update_wrapper(t(), func) - else: - func.__mro_entries__ = mro_entries - return func - return inner - - -# Update this to something like >=3.13.0b1 if and when -# PEP 728 is implemented in CPython -_PEP_728_IMPLEMENTED = False - -if _PEP_728_IMPLEMENTED: - # The standard library TypedDict in Python 3.8 does not store runtime information - # about which (if any) keys are optional. See https://bugs.python.org/issue38834 - # The standard library TypedDict in Python 3.9.0/1 does not honour the "total" - # keyword with old-style TypedDict(). See https://bugs.python.org/issue42059 - # The standard library TypedDict below Python 3.11 does not store runtime - # information about optional and required keys when using Required or NotRequired. - # Generic TypedDicts are also impossible using typing.TypedDict on Python <3.11. - # Aaaand on 3.12 we add __orig_bases__ to TypedDict - # to enable better runtime introspection. - # On 3.13 we deprecate some odd ways of creating TypedDicts. - # Also on 3.13, PEP 705 adds the ReadOnly[] qualifier. - # PEP 728 (still pending) makes more changes. - TypedDict = typing.TypedDict - _TypedDictMeta = typing._TypedDictMeta - is_typeddict = typing.is_typeddict -else: - # 3.10.0 and later - _TAKES_MODULE = "module" in inspect.signature(typing._type_check).parameters - - def _get_typeddict_qualifiers(annotation_type): - while True: - annotation_origin = get_origin(annotation_type) - if annotation_origin is Annotated: - annotation_args = get_args(annotation_type) - if annotation_args: - annotation_type = annotation_args[0] - else: - break - elif annotation_origin is Required: - yield Required - annotation_type, = get_args(annotation_type) - elif annotation_origin is NotRequired: - yield NotRequired - annotation_type, = get_args(annotation_type) - elif annotation_origin is ReadOnly: - yield ReadOnly - annotation_type, = get_args(annotation_type) - else: - break - - class _TypedDictMeta(type): - def __new__(cls, name, bases, ns, *, total=True, closed=False): - """Create new typed dict class object. - - This method is called when TypedDict is subclassed, - or when TypedDict is instantiated. This way - TypedDict supports all three syntax forms described in its docstring. - Subclasses and instances of TypedDict return actual dictionaries. - """ - for base in bases: - if type(base) is not _TypedDictMeta and base is not typing.Generic: - raise TypeError('cannot inherit from both a TypedDict type ' - 'and a non-TypedDict base class') - - if any(issubclass(b, typing.Generic) for b in bases): - generic_base = (typing.Generic,) - else: - generic_base = () - - # typing.py generally doesn't let you inherit from plain Generic, unless - # the name of the class happens to be "Protocol" - tp_dict = type.__new__(_TypedDictMeta, "Protocol", (*generic_base, dict), ns) - tp_dict.__name__ = name - if tp_dict.__qualname__ == "Protocol": - tp_dict.__qualname__ = name - - if not hasattr(tp_dict, '__orig_bases__'): - tp_dict.__orig_bases__ = bases - - annotations = {} - if "__annotations__" in ns: - own_annotations = ns["__annotations__"] - elif "__annotate__" in ns: - # TODO: Use inspect.VALUE here, and make the annotations lazily evaluated - own_annotations = ns["__annotate__"](1) - else: - own_annotations = {} - msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type" - if _TAKES_MODULE: - own_annotations = { - n: typing._type_check(tp, msg, module=tp_dict.__module__) - for n, tp in own_annotations.items() - } - else: - own_annotations = { - n: typing._type_check(tp, msg) - for n, tp in own_annotations.items() - } - required_keys = set() - optional_keys = set() - readonly_keys = set() - mutable_keys = set() - extra_items_type = None - - for base in bases: - base_dict = base.__dict__ - - annotations.update(base_dict.get('__annotations__', {})) - required_keys.update(base_dict.get('__required_keys__', ())) - optional_keys.update(base_dict.get('__optional_keys__', ())) - readonly_keys.update(base_dict.get('__readonly_keys__', ())) - mutable_keys.update(base_dict.get('__mutable_keys__', ())) - base_extra_items_type = base_dict.get('__extra_items__', None) - if base_extra_items_type is not None: - extra_items_type = base_extra_items_type - - if closed and extra_items_type is None: - extra_items_type = Never - if closed and "__extra_items__" in own_annotations: - annotation_type = own_annotations.pop("__extra_items__") - qualifiers = set(_get_typeddict_qualifiers(annotation_type)) - if Required in qualifiers: - raise TypeError( - "Special key __extra_items__ does not support " - "Required" - ) - if NotRequired in qualifiers: - raise TypeError( - "Special key __extra_items__ does not support " - "NotRequired" - ) - extra_items_type = annotation_type - - annotations.update(own_annotations) - for annotation_key, annotation_type in own_annotations.items(): - qualifiers = set(_get_typeddict_qualifiers(annotation_type)) - - if Required in qualifiers: - required_keys.add(annotation_key) - elif NotRequired in qualifiers: - optional_keys.add(annotation_key) - elif total: - required_keys.add(annotation_key) - else: - optional_keys.add(annotation_key) - if ReadOnly in qualifiers: - mutable_keys.discard(annotation_key) - readonly_keys.add(annotation_key) - else: - mutable_keys.add(annotation_key) - readonly_keys.discard(annotation_key) - - tp_dict.__annotations__ = annotations - tp_dict.__required_keys__ = frozenset(required_keys) - tp_dict.__optional_keys__ = frozenset(optional_keys) - tp_dict.__readonly_keys__ = frozenset(readonly_keys) - tp_dict.__mutable_keys__ = frozenset(mutable_keys) - if not hasattr(tp_dict, '__total__'): - tp_dict.__total__ = total - tp_dict.__closed__ = closed - tp_dict.__extra_items__ = extra_items_type - return tp_dict - - __call__ = dict # static method - - def __subclasscheck__(cls, other): - # Typed dicts are only for static structural subtyping. - raise TypeError('TypedDict does not support instance and class checks') - - __instancecheck__ = __subclasscheck__ - - _TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {}) - - @_ensure_subclassable(lambda bases: (_TypedDict,)) - def TypedDict(typename, fields=_marker, /, *, total=True, closed=False, **kwargs): - """A simple typed namespace. At runtime it is equivalent to a plain dict. - - TypedDict creates a dictionary type such that a type checker will expect all - instances to have a certain set of keys, where each key is - associated with a value of a consistent type. This expectation - is not checked at runtime. - - Usage:: - - class Point2D(TypedDict): - x: int - y: int - label: str - - a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK - b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check - - assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') - - The type info can be accessed via the Point2D.__annotations__ dict, and - the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. - TypedDict supports an additional equivalent form:: - - Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) - - By default, all keys must be present in a TypedDict. It is possible - to override this by specifying totality:: - - class Point2D(TypedDict, total=False): - x: int - y: int - - This means that a Point2D TypedDict can have any of the keys omitted. A type - checker is only expected to support a literal False or True as the value of - the total argument. True is the default, and makes all items defined in the - class body be required. - - The Required and NotRequired special forms can also be used to mark - individual keys as being required or not required:: - - class Point2D(TypedDict): - x: int # the "x" key must always be present (Required is the default) - y: NotRequired[int] # the "y" key can be omitted - - See PEP 655 for more details on Required and NotRequired. - """ - if fields is _marker or fields is None: - if fields is _marker: - deprecated_thing = "Failing to pass a value for the 'fields' parameter" - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - - example = f"`{typename} = TypedDict({typename!r}, {{}})`" - deprecation_msg = ( - f"{deprecated_thing} is deprecated and will be disallowed in " - "Python 3.15. To create a TypedDict class with 0 fields " - "using the functional syntax, pass an empty dictionary, e.g. " - ) + example + "." - warnings.warn(deprecation_msg, DeprecationWarning, stacklevel=2) - if closed is not False and closed is not True: - kwargs["closed"] = closed - closed = False - fields = kwargs - elif kwargs: - raise TypeError("TypedDict takes either a dict or keyword arguments," - " but not both") - if kwargs: - if sys.version_info >= (3, 13): - raise TypeError("TypedDict takes no keyword arguments") - warnings.warn( - "The kwargs-based syntax for TypedDict definitions is deprecated " - "in Python 3.11, will be removed in Python 3.13, and may not be " - "understood by third-party type checkers.", - DeprecationWarning, - stacklevel=2, - ) - - ns = {'__annotations__': dict(fields)} - module = _caller() - if module is not None: - # Setting correct module is necessary to make typed dict classes pickleable. - ns['__module__'] = module - - td = _TypedDictMeta(typename, (), ns, total=total, closed=closed) - td.__orig_bases__ = (TypedDict,) - return td - - if hasattr(typing, "_TypedDictMeta"): - _TYPEDDICT_TYPES = (typing._TypedDictMeta, _TypedDictMeta) - else: - _TYPEDDICT_TYPES = (_TypedDictMeta,) - - def is_typeddict(tp): - """Check if an annotation is a TypedDict class - - For example:: - class Film(TypedDict): - title: str - year: int - - is_typeddict(Film) # => True - is_typeddict(Union[list, str]) # => False - """ - # On 3.8, this would otherwise return True - if hasattr(typing, "TypedDict") and tp is typing.TypedDict: - return False - return isinstance(tp, _TYPEDDICT_TYPES) - - -if hasattr(typing, "assert_type"): - assert_type = typing.assert_type - -else: - def assert_type(val, typ, /): - """Assert (to the type checker) that the value is of the given type. - - When the type checker encounters a call to assert_type(), it - emits an error if the value is not of the specified type:: - - def greet(name: str) -> None: - assert_type(name, str) # ok - assert_type(name, int) # type checker error - - At runtime this returns the first argument unchanged and otherwise - does nothing. - """ - return val - - -if hasattr(typing, "ReadOnly"): # 3.13+ - get_type_hints = typing.get_type_hints -else: # <=3.13 - # replaces _strip_annotations() - def _strip_extras(t): - """Strips Annotated, Required and NotRequired from a given type.""" - if isinstance(t, _AnnotatedAlias): - return _strip_extras(t.__origin__) - if hasattr(t, "__origin__") and t.__origin__ in (Required, NotRequired, ReadOnly): - return _strip_extras(t.__args__[0]) - if isinstance(t, typing._GenericAlias): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return t.copy_with(stripped_args) - if hasattr(_types, "GenericAlias") and isinstance(t, _types.GenericAlias): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return _types.GenericAlias(t.__origin__, stripped_args) - if hasattr(_types, "UnionType") and isinstance(t, _types.UnionType): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return functools.reduce(operator.or_, stripped_args) - - return t - - def get_type_hints(obj, globalns=None, localns=None, include_extras=False): - """Return type hints for an object. - - This is often the same as obj.__annotations__, but it handles - forward references encoded as string literals, adds Optional[t] if a - default value equal to None is set and recursively replaces all - 'Annotated[T, ...]', 'Required[T]' or 'NotRequired[T]' with 'T' - (unless 'include_extras=True'). - - The argument may be a module, class, method, or function. The annotations - are returned as a dictionary. For classes, annotations include also - inherited members. - - TypeError is raised if the argument is not of a type that can contain - annotations, and an empty dictionary is returned if no annotations are - present. - - BEWARE -- the behavior of globalns and localns is counterintuitive - (unless you are familiar with how eval() and exec() work). The - search order is locals first, then globals. - - - If no dict arguments are passed, an attempt is made to use the - globals from obj (or the respective module's globals for classes), - and these are also used as the locals. If the object does not appear - to have globals, an empty dictionary is used. - - - If one dict argument is passed, it is used for both globals and - locals. - - - If two dict arguments are passed, they specify globals and - locals, respectively. - """ - if hasattr(typing, "Annotated"): # 3.9+ - hint = typing.get_type_hints( - obj, globalns=globalns, localns=localns, include_extras=True - ) - else: # 3.8 - hint = typing.get_type_hints(obj, globalns=globalns, localns=localns) - if include_extras: - return hint - return {k: _strip_extras(t) for k, t in hint.items()} - - -# Python 3.9+ has PEP 593 (Annotated) -if hasattr(typing, 'Annotated'): - Annotated = typing.Annotated - # Not exported and not a public API, but needed for get_origin() and get_args() - # to work. - _AnnotatedAlias = typing._AnnotatedAlias -# 3.8 -else: - class _AnnotatedAlias(typing._GenericAlias, _root=True): - """Runtime representation of an annotated type. - - At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't' - with extra annotations. The alias behaves like a normal typing alias, - instantiating is the same as instantiating the underlying type, binding - it to types is also the same. - """ - def __init__(self, origin, metadata): - if isinstance(origin, _AnnotatedAlias): - metadata = origin.__metadata__ + metadata - origin = origin.__origin__ - super().__init__(origin, origin) - self.__metadata__ = metadata - - def copy_with(self, params): - assert len(params) == 1 - new_type = params[0] - return _AnnotatedAlias(new_type, self.__metadata__) - - def __repr__(self): - return (f"typing_extensions.Annotated[{typing._type_repr(self.__origin__)}, " - f"{', '.join(repr(a) for a in self.__metadata__)}]") - - def __reduce__(self): - return operator.getitem, ( - Annotated, (self.__origin__, *self.__metadata__) - ) - - def __eq__(self, other): - if not isinstance(other, _AnnotatedAlias): - return NotImplemented - if self.__origin__ != other.__origin__: - return False - return self.__metadata__ == other.__metadata__ - - def __hash__(self): - return hash((self.__origin__, self.__metadata__)) - - class Annotated: - """Add context specific metadata to a type. - - Example: Annotated[int, runtime_check.Unsigned] indicates to the - hypothetical runtime_check module that this type is an unsigned int. - Every other consumer of this type can ignore this metadata and treat - this type as int. - - The first argument to Annotated must be a valid type (and will be in - the __origin__ field), the remaining arguments are kept as a tuple in - the __extra__ field. - - Details: - - - It's an error to call `Annotated` with less than two arguments. - - Nested Annotated are flattened:: - - Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3] - - - Instantiating an annotated type is equivalent to instantiating the - underlying type:: - - Annotated[C, Ann1](5) == C(5) - - - Annotated can be used as a generic type alias:: - - Optimized = Annotated[T, runtime.Optimize()] - Optimized[int] == Annotated[int, runtime.Optimize()] - - OptimizedList = Annotated[List[T], runtime.Optimize()] - OptimizedList[int] == Annotated[List[int], runtime.Optimize()] - """ - - __slots__ = () - - def __new__(cls, *args, **kwargs): - raise TypeError("Type Annotated cannot be instantiated.") - - @typing._tp_cache - def __class_getitem__(cls, params): - if not isinstance(params, tuple) or len(params) < 2: - raise TypeError("Annotated[...] should be used " - "with at least two arguments (a type and an " - "annotation).") - allowed_special_forms = (ClassVar, Final) - if get_origin(params[0]) in allowed_special_forms: - origin = params[0] - else: - msg = "Annotated[t, ...]: t must be a type." - origin = typing._type_check(params[0], msg) - metadata = tuple(params[1:]) - return _AnnotatedAlias(origin, metadata) - - def __init_subclass__(cls, *args, **kwargs): - raise TypeError( - f"Cannot subclass {cls.__module__}.Annotated" - ) - -# Python 3.8 has get_origin() and get_args() but those implementations aren't -# Annotated-aware, so we can't use those. Python 3.9's versions don't support -# ParamSpecArgs and ParamSpecKwargs, so only Python 3.10's versions will do. -if sys.version_info[:2] >= (3, 10): - get_origin = typing.get_origin - get_args = typing.get_args -# 3.8-3.9 -else: - try: - # 3.9+ - from typing import _BaseGenericAlias - except ImportError: - _BaseGenericAlias = typing._GenericAlias - try: - # 3.9+ - from typing import GenericAlias as _typing_GenericAlias - except ImportError: - _typing_GenericAlias = typing._GenericAlias - - def get_origin(tp): - """Get the unsubscripted version of a type. - - This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar - and Annotated. Return None for unsupported types. Examples:: - - get_origin(Literal[42]) is Literal - get_origin(int) is None - get_origin(ClassVar[int]) is ClassVar - get_origin(Generic) is Generic - get_origin(Generic[T]) is Generic - get_origin(Union[T, int]) is Union - get_origin(List[Tuple[T, T]][int]) == list - get_origin(P.args) is P - """ - if isinstance(tp, _AnnotatedAlias): - return Annotated - if isinstance(tp, (typing._GenericAlias, _typing_GenericAlias, _BaseGenericAlias, - ParamSpecArgs, ParamSpecKwargs)): - return tp.__origin__ - if tp is typing.Generic: - return typing.Generic - return None - - def get_args(tp): - """Get type arguments with all substitutions performed. - - For unions, basic simplifications used by Union constructor are performed. - Examples:: - get_args(Dict[str, int]) == (str, int) - get_args(int) == () - get_args(Union[int, Union[T, int], str][int]) == (int, str) - get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int]) - get_args(Callable[[], T][int]) == ([], int) - """ - if isinstance(tp, _AnnotatedAlias): - return (tp.__origin__, *tp.__metadata__) - if isinstance(tp, (typing._GenericAlias, _typing_GenericAlias)): - if getattr(tp, "_special", False): - return () - res = tp.__args__ - if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis: - res = (list(res[:-1]), res[-1]) - return res - return () - - -# 3.10+ -if hasattr(typing, 'TypeAlias'): - TypeAlias = typing.TypeAlias -# 3.9 -elif sys.version_info[:2] >= (3, 9): - @_ExtensionsSpecialForm - def TypeAlias(self, parameters): - """Special marker indicating that an assignment should - be recognized as a proper type alias definition by type - checkers. - - For example:: - - Predicate: TypeAlias = Callable[..., bool] - - It's invalid when used anywhere except as in the example above. - """ - raise TypeError(f"{self} is not subscriptable") -# 3.8 -else: - TypeAlias = _ExtensionsSpecialForm( - 'TypeAlias', - doc="""Special marker indicating that an assignment should - be recognized as a proper type alias definition by type - checkers. - - For example:: - - Predicate: TypeAlias = Callable[..., bool] - - It's invalid when used anywhere except as in the example - above.""" - ) - - -if hasattr(typing, "NoDefault"): - NoDefault = typing.NoDefault -else: - class NoDefaultTypeMeta(type): - def __setattr__(cls, attr, value): - # TypeError is consistent with the behavior of NoneType - raise TypeError( - f"cannot set {attr!r} attribute of immutable type {cls.__name__!r}" - ) - - class NoDefaultType(metaclass=NoDefaultTypeMeta): - """The type of the NoDefault singleton.""" - - __slots__ = () - - def __new__(cls): - return globals().get("NoDefault") or object.__new__(cls) - - def __repr__(self): - return "typing_extensions.NoDefault" - - def __reduce__(self): - return "NoDefault" - - NoDefault = NoDefaultType() - del NoDefaultType, NoDefaultTypeMeta - - -def _set_default(type_param, default): - type_param.has_default = lambda: default is not NoDefault - type_param.__default__ = default - - -def _set_module(typevarlike): - # for pickling: - def_mod = _caller(depth=3) - if def_mod != 'typing_extensions': - typevarlike.__module__ = def_mod - - -class _DefaultMixin: - """Mixin for TypeVarLike defaults.""" - - __slots__ = () - __init__ = _set_default - - -# Classes using this metaclass must provide a _backported_typevarlike ClassVar -class _TypeVarLikeMeta(type): - def __instancecheck__(cls, __instance: Any) -> bool: - return isinstance(__instance, cls._backported_typevarlike) - - -if _PEP_696_IMPLEMENTED: - from typing import TypeVar -else: - # Add default and infer_variance parameters from PEP 696 and 695 - class TypeVar(metaclass=_TypeVarLikeMeta): - """Type variable.""" - - _backported_typevarlike = typing.TypeVar - - def __new__(cls, name, *constraints, bound=None, - covariant=False, contravariant=False, - default=NoDefault, infer_variance=False): - if hasattr(typing, "TypeAliasType"): - # PEP 695 implemented (3.12+), can pass infer_variance to typing.TypeVar - typevar = typing.TypeVar(name, *constraints, bound=bound, - covariant=covariant, contravariant=contravariant, - infer_variance=infer_variance) - else: - typevar = typing.TypeVar(name, *constraints, bound=bound, - covariant=covariant, contravariant=contravariant) - if infer_variance and (covariant or contravariant): - raise ValueError("Variance cannot be specified with infer_variance.") - typevar.__infer_variance__ = infer_variance - - _set_default(typevar, default) - _set_module(typevar) - - def _tvar_prepare_subst(alias, args): - if ( - typevar.has_default() - and alias.__parameters__.index(typevar) == len(args) - ): - args += (typevar.__default__,) - return args - - typevar.__typing_prepare_subst__ = _tvar_prepare_subst - return typevar - - def __init_subclass__(cls) -> None: - raise TypeError(f"type '{__name__}.TypeVar' is not an acceptable base type") - - -# Python 3.10+ has PEP 612 -if hasattr(typing, 'ParamSpecArgs'): - ParamSpecArgs = typing.ParamSpecArgs - ParamSpecKwargs = typing.ParamSpecKwargs -# 3.8-3.9 -else: - class _Immutable: - """Mixin to indicate that object should not be copied.""" - __slots__ = () - - def __copy__(self): - return self - - def __deepcopy__(self, memo): - return self - - class ParamSpecArgs(_Immutable): - """The args for a ParamSpec object. - - Given a ParamSpec object P, P.args is an instance of ParamSpecArgs. - - ParamSpecArgs objects have a reference back to their ParamSpec: - - P.args.__origin__ is P - - This type is meant for runtime introspection and has no special meaning to - static type checkers. - """ - def __init__(self, origin): - self.__origin__ = origin - - def __repr__(self): - return f"{self.__origin__.__name__}.args" - - def __eq__(self, other): - if not isinstance(other, ParamSpecArgs): - return NotImplemented - return self.__origin__ == other.__origin__ - - class ParamSpecKwargs(_Immutable): - """The kwargs for a ParamSpec object. - - Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs. - - ParamSpecKwargs objects have a reference back to their ParamSpec: - - P.kwargs.__origin__ is P - - This type is meant for runtime introspection and has no special meaning to - static type checkers. - """ - def __init__(self, origin): - self.__origin__ = origin - - def __repr__(self): - return f"{self.__origin__.__name__}.kwargs" - - def __eq__(self, other): - if not isinstance(other, ParamSpecKwargs): - return NotImplemented - return self.__origin__ == other.__origin__ - - -if _PEP_696_IMPLEMENTED: - from typing import ParamSpec - -# 3.10+ -elif hasattr(typing, 'ParamSpec'): - - # Add default parameter - PEP 696 - class ParamSpec(metaclass=_TypeVarLikeMeta): - """Parameter specification.""" - - _backported_typevarlike = typing.ParamSpec - - def __new__(cls, name, *, bound=None, - covariant=False, contravariant=False, - infer_variance=False, default=NoDefault): - if hasattr(typing, "TypeAliasType"): - # PEP 695 implemented, can pass infer_variance to typing.TypeVar - paramspec = typing.ParamSpec(name, bound=bound, - covariant=covariant, - contravariant=contravariant, - infer_variance=infer_variance) - else: - paramspec = typing.ParamSpec(name, bound=bound, - covariant=covariant, - contravariant=contravariant) - paramspec.__infer_variance__ = infer_variance - - _set_default(paramspec, default) - _set_module(paramspec) - - def _paramspec_prepare_subst(alias, args): - params = alias.__parameters__ - i = params.index(paramspec) - if i == len(args) and paramspec.has_default(): - args = [*args, paramspec.__default__] - if i >= len(args): - raise TypeError(f"Too few arguments for {alias}") - # Special case where Z[[int, str, bool]] == Z[int, str, bool] in PEP 612. - if len(params) == 1 and not typing._is_param_expr(args[0]): - assert i == 0 - args = (args,) - # Convert lists to tuples to help other libraries cache the results. - elif isinstance(args[i], list): - args = (*args[:i], tuple(args[i]), *args[i + 1:]) - return args - - paramspec.__typing_prepare_subst__ = _paramspec_prepare_subst - return paramspec - - def __init_subclass__(cls) -> None: - raise TypeError(f"type '{__name__}.ParamSpec' is not an acceptable base type") - -# 3.8-3.9 -else: - - # Inherits from list as a workaround for Callable checks in Python < 3.9.2. - class ParamSpec(list, _DefaultMixin): - """Parameter specification variable. - - Usage:: - - P = ParamSpec('P') - - Parameter specification variables exist primarily for the benefit of static - type checkers. They are used to forward the parameter types of one - callable to another callable, a pattern commonly found in higher order - functions and decorators. They are only valid when used in ``Concatenate``, - or s the first argument to ``Callable``. In Python 3.10 and higher, - they are also supported in user-defined Generics at runtime. - See class Generic for more information on generic types. An - example for annotating a decorator:: - - T = TypeVar('T') - P = ParamSpec('P') - - def add_logging(f: Callable[P, T]) -> Callable[P, T]: - '''A type-safe decorator to add logging to a function.''' - def inner(*args: P.args, **kwargs: P.kwargs) -> T: - logging.info(f'{f.__name__} was called') - return f(*args, **kwargs) - return inner - - @add_logging - def add_two(x: float, y: float) -> float: - '''Add two numbers together.''' - return x + y - - Parameter specification variables defined with covariant=True or - contravariant=True can be used to declare covariant or contravariant - generic types. These keyword arguments are valid, but their actual semantics - are yet to be decided. See PEP 612 for details. - - Parameter specification variables can be introspected. e.g.: - - P.__name__ == 'T' - P.__bound__ == None - P.__covariant__ == False - P.__contravariant__ == False - - Note that only parameter specification variables defined in global scope can - be pickled. - """ - - # Trick Generic __parameters__. - __class__ = typing.TypeVar - - @property - def args(self): - return ParamSpecArgs(self) - - @property - def kwargs(self): - return ParamSpecKwargs(self) - - def __init__(self, name, *, bound=None, covariant=False, contravariant=False, - infer_variance=False, default=NoDefault): - list.__init__(self, [self]) - self.__name__ = name - self.__covariant__ = bool(covariant) - self.__contravariant__ = bool(contravariant) - self.__infer_variance__ = bool(infer_variance) - if bound: - self.__bound__ = typing._type_check(bound, 'Bound must be a type.') - else: - self.__bound__ = None - _DefaultMixin.__init__(self, default) - - # for pickling: - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - def __repr__(self): - if self.__infer_variance__: - prefix = '' - elif self.__covariant__: - prefix = '+' - elif self.__contravariant__: - prefix = '-' - else: - prefix = '~' - return prefix + self.__name__ - - def __hash__(self): - return object.__hash__(self) - - def __eq__(self, other): - return self is other - - def __reduce__(self): - return self.__name__ - - # Hack to get typing._type_check to pass. - def __call__(self, *args, **kwargs): - pass - - -# 3.8-3.9 -if not hasattr(typing, 'Concatenate'): - # Inherits from list as a workaround for Callable checks in Python < 3.9.2. - class _ConcatenateGenericAlias(list): - - # Trick Generic into looking into this for __parameters__. - __class__ = typing._GenericAlias - - # Flag in 3.8. - _special = False - - def __init__(self, origin, args): - super().__init__(args) - self.__origin__ = origin - self.__args__ = args - - def __repr__(self): - _type_repr = typing._type_repr - return (f'{_type_repr(self.__origin__)}' - f'[{", ".join(_type_repr(arg) for arg in self.__args__)}]') - - def __hash__(self): - return hash((self.__origin__, self.__args__)) - - # Hack to get typing._type_check to pass in Generic. - def __call__(self, *args, **kwargs): - pass - - @property - def __parameters__(self): - return tuple( - tp for tp in self.__args__ if isinstance(tp, (typing.TypeVar, ParamSpec)) - ) - - -# 3.8-3.9 -@typing._tp_cache -def _concatenate_getitem(self, parameters): - if parameters == (): - raise TypeError("Cannot take a Concatenate of no types.") - if not isinstance(parameters, tuple): - parameters = (parameters,) - if not isinstance(parameters[-1], ParamSpec): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable.") - msg = "Concatenate[arg, ...]: each arg must be a type." - parameters = tuple(typing._type_check(p, msg) for p in parameters) - return _ConcatenateGenericAlias(self, parameters) - - -# 3.10+ -if hasattr(typing, 'Concatenate'): - Concatenate = typing.Concatenate - _ConcatenateGenericAlias = typing._ConcatenateGenericAlias -# 3.9 -elif sys.version_info[:2] >= (3, 9): - @_ExtensionsSpecialForm - def Concatenate(self, parameters): - """Used in conjunction with ``ParamSpec`` and ``Callable`` to represent a - higher order function which adds, removes or transforms parameters of a - callable. - - For example:: - - Callable[Concatenate[int, P], int] - - See PEP 612 for detailed information. - """ - return _concatenate_getitem(self, parameters) -# 3.8 -else: - class _ConcatenateForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - return _concatenate_getitem(self, parameters) - - Concatenate = _ConcatenateForm( - 'Concatenate', - doc="""Used in conjunction with ``ParamSpec`` and ``Callable`` to represent a - higher order function which adds, removes or transforms parameters of a - callable. - - For example:: - - Callable[Concatenate[int, P], int] - - See PEP 612 for detailed information. - """) - -# 3.10+ -if hasattr(typing, 'TypeGuard'): - TypeGuard = typing.TypeGuard -# 3.9 -elif sys.version_info[:2] >= (3, 9): - @_ExtensionsSpecialForm - def TypeGuard(self, parameters): - """Special typing form used to annotate the return type of a user-defined - type guard function. ``TypeGuard`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeGuard[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeGuard`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the type inside ``TypeGuard``. - - For example:: - - def is_str(val: Union[str, float]): - # "isinstance" type guard - if isinstance(val, str): - # Type of ``val`` is narrowed to ``str`` - ... - else: - # Else, type of ``val`` is narrowed to ``float``. - ... - - Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower - form of ``TypeA`` (it can even be a wider form) and this may lead to - type-unsafe results. The main reason is to allow for things like - narrowing ``List[object]`` to ``List[str]`` even though the latter is not - a subtype of the former, since ``List`` is invariant. The responsibility of - writing type-safe type guards is left to the user. - - ``TypeGuard`` also works with type variables. For more information, see - PEP 647 (User-Defined Type Guards). - """ - item = typing._type_check(parameters, f'{self} accepts only a single type.') - return typing._GenericAlias(self, (item,)) -# 3.8 -else: - class _TypeGuardForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - item = typing._type_check(parameters, - f'{self._name} accepts only a single type') - return typing._GenericAlias(self, (item,)) - - TypeGuard = _TypeGuardForm( - 'TypeGuard', - doc="""Special typing form used to annotate the return type of a user-defined - type guard function. ``TypeGuard`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeGuard[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeGuard`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the type inside ``TypeGuard``. - - For example:: - - def is_str(val: Union[str, float]): - # "isinstance" type guard - if isinstance(val, str): - # Type of ``val`` is narrowed to ``str`` - ... - else: - # Else, type of ``val`` is narrowed to ``float``. - ... - - Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower - form of ``TypeA`` (it can even be a wider form) and this may lead to - type-unsafe results. The main reason is to allow for things like - narrowing ``List[object]`` to ``List[str]`` even though the latter is not - a subtype of the former, since ``List`` is invariant. The responsibility of - writing type-safe type guards is left to the user. - - ``TypeGuard`` also works with type variables. For more information, see - PEP 647 (User-Defined Type Guards). - """) - -# 3.13+ -if hasattr(typing, 'TypeIs'): - TypeIs = typing.TypeIs -# 3.9 -elif sys.version_info[:2] >= (3, 9): - @_ExtensionsSpecialForm - def TypeIs(self, parameters): - """Special typing form used to annotate the return type of a user-defined - type narrower function. ``TypeIs`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeIs`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeIs[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeIs`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the intersection of the type inside ``TypeGuard`` and the argument's - previously known type. - - For example:: - - def is_awaitable(val: object) -> TypeIs[Awaitable[Any]]: - return hasattr(val, '__await__') - - def f(val: Union[int, Awaitable[int]]) -> int: - if is_awaitable(val): - assert_type(val, Awaitable[int]) - else: - assert_type(val, int) - - ``TypeIs`` also works with type variables. For more information, see - PEP 742 (Narrowing types with TypeIs). - """ - item = typing._type_check(parameters, f'{self} accepts only a single type.') - return typing._GenericAlias(self, (item,)) -# 3.8 -else: - class _TypeIsForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - item = typing._type_check(parameters, - f'{self._name} accepts only a single type') - return typing._GenericAlias(self, (item,)) - - TypeIs = _TypeIsForm( - 'TypeIs', - doc="""Special typing form used to annotate the return type of a user-defined - type narrower function. ``TypeIs`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeIs`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeIs[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeIs`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the intersection of the type inside ``TypeGuard`` and the argument's - previously known type. - - For example:: - - def is_awaitable(val: object) -> TypeIs[Awaitable[Any]]: - return hasattr(val, '__await__') - - def f(val: Union[int, Awaitable[int]]) -> int: - if is_awaitable(val): - assert_type(val, Awaitable[int]) - else: - assert_type(val, int) - - ``TypeIs`` also works with type variables. For more information, see - PEP 742 (Narrowing types with TypeIs). - """) - - -# Vendored from cpython typing._SpecialFrom -class _SpecialForm(typing._Final, _root=True): - __slots__ = ('_name', '__doc__', '_getitem') - - def __init__(self, getitem): - self._getitem = getitem - self._name = getitem.__name__ - self.__doc__ = getitem.__doc__ - - def __getattr__(self, item): - if item in {'__name__', '__qualname__'}: - return self._name - - raise AttributeError(item) - - def __mro_entries__(self, bases): - raise TypeError(f"Cannot subclass {self!r}") - - def __repr__(self): - return f'typing_extensions.{self._name}' - - def __reduce__(self): - return self._name - - def __call__(self, *args, **kwds): - raise TypeError(f"Cannot instantiate {self!r}") - - def __or__(self, other): - return typing.Union[self, other] - - def __ror__(self, other): - return typing.Union[other, self] - - def __instancecheck__(self, obj): - raise TypeError(f"{self} cannot be used with isinstance()") - - def __subclasscheck__(self, cls): - raise TypeError(f"{self} cannot be used with issubclass()") - - @typing._tp_cache - def __getitem__(self, parameters): - return self._getitem(self, parameters) - - -if hasattr(typing, "LiteralString"): # 3.11+ - LiteralString = typing.LiteralString -else: - @_SpecialForm - def LiteralString(self, params): - """Represents an arbitrary literal string. - - Example:: - - from pip._vendor.typing_extensions import LiteralString - - def query(sql: LiteralString) -> ...: - ... - - query("SELECT * FROM table") # ok - query(f"SELECT * FROM {input()}") # not ok - - See PEP 675 for details. - - """ - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, "Self"): # 3.11+ - Self = typing.Self -else: - @_SpecialForm - def Self(self, params): - """Used to spell the type of "self" in classes. - - Example:: - - from typing import Self - - class ReturnsSelf: - def parse(self, data: bytes) -> Self: - ... - return self - - """ - - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, "Never"): # 3.11+ - Never = typing.Never -else: - @_SpecialForm - def Never(self, params): - """The bottom type, a type that has no members. - - This can be used to define a function that should never be - called, or a function that never returns:: - - from pip._vendor.typing_extensions import Never - - def never_call_me(arg: Never) -> None: - pass - - def int_or_str(arg: int | str) -> None: - never_call_me(arg) # type checker error - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - never_call_me(arg) # ok, arg is of type Never - - """ - - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, 'Required'): # 3.11+ - Required = typing.Required - NotRequired = typing.NotRequired -elif sys.version_info[:2] >= (3, 9): # 3.9-3.10 - @_ExtensionsSpecialForm - def Required(self, parameters): - """A special typing construct to mark a key of a total=False TypedDict - as required. For example: - - class Movie(TypedDict, total=False): - title: Required[str] - year: int - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - - There is no runtime checking that a required key is actually provided - when instantiating a related TypedDict. - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - @_ExtensionsSpecialForm - def NotRequired(self, parameters): - """A special typing construct to mark a key of a TypedDict as - potentially missing. For example: - - class Movie(TypedDict): - title: str - year: NotRequired[int] - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - -else: # 3.8 - class _RequiredForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - item = typing._type_check(parameters, - f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - Required = _RequiredForm( - 'Required', - doc="""A special typing construct to mark a key of a total=False TypedDict - as required. For example: - - class Movie(TypedDict, total=False): - title: Required[str] - year: int - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - - There is no runtime checking that a required key is actually provided - when instantiating a related TypedDict. - """) - NotRequired = _RequiredForm( - 'NotRequired', - doc="""A special typing construct to mark a key of a TypedDict as - potentially missing. For example: - - class Movie(TypedDict): - title: str - year: NotRequired[int] - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - """) - - -if hasattr(typing, 'ReadOnly'): - ReadOnly = typing.ReadOnly -elif sys.version_info[:2] >= (3, 9): # 3.9-3.12 - @_ExtensionsSpecialForm - def ReadOnly(self, parameters): - """A special typing construct to mark an item of a TypedDict as read-only. - - For example: - - class Movie(TypedDict): - title: ReadOnly[str] - year: int - - def mutate_movie(m: Movie) -> None: - m["year"] = 1992 # allowed - m["title"] = "The Matrix" # typechecker error - - There is no runtime checking for this property. - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - -else: # 3.8 - class _ReadOnlyForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - item = typing._type_check(parameters, - f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - ReadOnly = _ReadOnlyForm( - 'ReadOnly', - doc="""A special typing construct to mark a key of a TypedDict as read-only. - - For example: - - class Movie(TypedDict): - title: ReadOnly[str] - year: int - - def mutate_movie(m: Movie) -> None: - m["year"] = 1992 # allowed - m["title"] = "The Matrix" # typechecker error - - There is no runtime checking for this propery. - """) - - -_UNPACK_DOC = """\ -Type unpack operator. - -The type unpack operator takes the child types from some container type, -such as `tuple[int, str]` or a `TypeVarTuple`, and 'pulls them out'. For -example: - - # For some generic class `Foo`: - Foo[Unpack[tuple[int, str]]] # Equivalent to Foo[int, str] - - Ts = TypeVarTuple('Ts') - # Specifies that `Bar` is generic in an arbitrary number of types. - # (Think of `Ts` as a tuple of an arbitrary number of individual - # `TypeVar`s, which the `Unpack` is 'pulling out' directly into the - # `Generic[]`.) - class Bar(Generic[Unpack[Ts]]): ... - Bar[int] # Valid - Bar[int, str] # Also valid - -From Python 3.11, this can also be done using the `*` operator: - - Foo[*tuple[int, str]] - class Bar(Generic[*Ts]): ... - -The operator can also be used along with a `TypedDict` to annotate -`**kwargs` in a function signature. For instance: - - class Movie(TypedDict): - name: str - year: int - - # This function expects two keyword arguments - *name* of type `str` and - # *year* of type `int`. - def foo(**kwargs: Unpack[Movie]): ... - -Note that there is only some runtime checking of this operator. Not -everything the runtime allows may be accepted by static type checkers. - -For more information, see PEP 646 and PEP 692. -""" - - -if sys.version_info >= (3, 12): # PEP 692 changed the repr of Unpack[] - Unpack = typing.Unpack - - def _is_unpack(obj): - return get_origin(obj) is Unpack - -elif sys.version_info[:2] >= (3, 9): # 3.9+ - class _UnpackSpecialForm(_ExtensionsSpecialForm, _root=True): - def __init__(self, getitem): - super().__init__(getitem) - self.__doc__ = _UNPACK_DOC - - class _UnpackAlias(typing._GenericAlias, _root=True): - __class__ = typing.TypeVar - - @property - def __typing_unpacked_tuple_args__(self): - assert self.__origin__ is Unpack - assert len(self.__args__) == 1 - arg, = self.__args__ - if isinstance(arg, (typing._GenericAlias, _types.GenericAlias)): - if arg.__origin__ is not tuple: - raise TypeError("Unpack[...] must be used with a tuple type") - return arg.__args__ - return None - - @_UnpackSpecialForm - def Unpack(self, parameters): - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return _UnpackAlias(self, (item,)) - - def _is_unpack(obj): - return isinstance(obj, _UnpackAlias) - -else: # 3.8 - class _UnpackAlias(typing._GenericAlias, _root=True): - __class__ = typing.TypeVar - - class _UnpackForm(_ExtensionsSpecialForm, _root=True): - def __getitem__(self, parameters): - item = typing._type_check(parameters, - f'{self._name} accepts only a single type.') - return _UnpackAlias(self, (item,)) - - Unpack = _UnpackForm('Unpack', doc=_UNPACK_DOC) - - def _is_unpack(obj): - return isinstance(obj, _UnpackAlias) - - -if _PEP_696_IMPLEMENTED: - from typing import TypeVarTuple - -elif hasattr(typing, "TypeVarTuple"): # 3.11+ - - def _unpack_args(*args): - newargs = [] - for arg in args: - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs is not None and not (subargs and subargs[-1] is ...): - newargs.extend(subargs) - else: - newargs.append(arg) - return newargs - - # Add default parameter - PEP 696 - class TypeVarTuple(metaclass=_TypeVarLikeMeta): - """Type variable tuple.""" - - _backported_typevarlike = typing.TypeVarTuple - - def __new__(cls, name, *, default=NoDefault): - tvt = typing.TypeVarTuple(name) - _set_default(tvt, default) - _set_module(tvt) - - def _typevartuple_prepare_subst(alias, args): - params = alias.__parameters__ - typevartuple_index = params.index(tvt) - for param in params[typevartuple_index + 1:]: - if isinstance(param, TypeVarTuple): - raise TypeError( - f"More than one TypeVarTuple parameter in {alias}" - ) - - alen = len(args) - plen = len(params) - left = typevartuple_index - right = plen - typevartuple_index - 1 - var_tuple_index = None - fillarg = None - for k, arg in enumerate(args): - if not isinstance(arg, type): - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs and len(subargs) == 2 and subargs[-1] is ...: - if var_tuple_index is not None: - raise TypeError( - "More than one unpacked " - "arbitrary-length tuple argument" - ) - var_tuple_index = k - fillarg = subargs[0] - if var_tuple_index is not None: - left = min(left, var_tuple_index) - right = min(right, alen - var_tuple_index - 1) - elif left + right > alen: - raise TypeError(f"Too few arguments for {alias};" - f" actual {alen}, expected at least {plen - 1}") - if left == alen - right and tvt.has_default(): - replacement = _unpack_args(tvt.__default__) - else: - replacement = args[left: alen - right] - - return ( - *args[:left], - *([fillarg] * (typevartuple_index - left)), - replacement, - *([fillarg] * (plen - right - left - typevartuple_index - 1)), - *args[alen - right:], - ) - - tvt.__typing_prepare_subst__ = _typevartuple_prepare_subst - return tvt - - def __init_subclass__(self, *args, **kwds): - raise TypeError("Cannot subclass special typing classes") - -else: # <=3.10 - class TypeVarTuple(_DefaultMixin): - """Type variable tuple. - - Usage:: - - Ts = TypeVarTuple('Ts') - - In the same way that a normal type variable is a stand-in for a single - type such as ``int``, a type variable *tuple* is a stand-in for a *tuple* - type such as ``Tuple[int, str]``. - - Type variable tuples can be used in ``Generic`` declarations. - Consider the following example:: - - class Array(Generic[*Ts]): ... - - The ``Ts`` type variable tuple here behaves like ``tuple[T1, T2]``, - where ``T1`` and ``T2`` are type variables. To use these type variables - as type parameters of ``Array``, we must *unpack* the type variable tuple using - the star operator: ``*Ts``. The signature of ``Array`` then behaves - as if we had simply written ``class Array(Generic[T1, T2]): ...``. - In contrast to ``Generic[T1, T2]``, however, ``Generic[*Shape]`` allows - us to parameterise the class with an *arbitrary* number of type parameters. - - Type variable tuples can be used anywhere a normal ``TypeVar`` can. - This includes class definitions, as shown above, as well as function - signatures and variable annotations:: - - class Array(Generic[*Ts]): - - def __init__(self, shape: Tuple[*Ts]): - self._shape: Tuple[*Ts] = shape - - def get_shape(self) -> Tuple[*Ts]: - return self._shape - - shape = (Height(480), Width(640)) - x: Array[Height, Width] = Array(shape) - y = abs(x) # Inferred type is Array[Height, Width] - z = x + x # ... is Array[Height, Width] - x.get_shape() # ... is tuple[Height, Width] - - """ - - # Trick Generic __parameters__. - __class__ = typing.TypeVar - - def __iter__(self): - yield self.__unpacked__ - - def __init__(self, name, *, default=NoDefault): - self.__name__ = name - _DefaultMixin.__init__(self, default) - - # for pickling: - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - self.__unpacked__ = Unpack[self] - - def __repr__(self): - return self.__name__ - - def __hash__(self): - return object.__hash__(self) - - def __eq__(self, other): - return self is other - - def __reduce__(self): - return self.__name__ - - def __init_subclass__(self, *args, **kwds): - if '_root' not in kwds: - raise TypeError("Cannot subclass special typing classes") - - -if hasattr(typing, "reveal_type"): # 3.11+ - reveal_type = typing.reveal_type -else: # <=3.10 - def reveal_type(obj: T, /) -> T: - """Reveal the inferred type of a variable. - - When a static type checker encounters a call to ``reveal_type()``, - it will emit the inferred type of the argument:: - - x: int = 1 - reveal_type(x) - - Running a static type checker (e.g., ``mypy``) on this example - will produce output similar to 'Revealed type is "builtins.int"'. - - At runtime, the function prints the runtime type of the - argument and returns it unchanged. - - """ - print(f"Runtime type is {type(obj).__name__!r}", file=sys.stderr) - return obj - - -if hasattr(typing, "_ASSERT_NEVER_REPR_MAX_LENGTH"): # 3.11+ - _ASSERT_NEVER_REPR_MAX_LENGTH = typing._ASSERT_NEVER_REPR_MAX_LENGTH -else: # <=3.10 - _ASSERT_NEVER_REPR_MAX_LENGTH = 100 - - -if hasattr(typing, "assert_never"): # 3.11+ - assert_never = typing.assert_never -else: # <=3.10 - def assert_never(arg: Never, /) -> Never: - """Assert to the type checker that a line of code is unreachable. - - Example:: - - def int_or_str(arg: int | str) -> None: - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - assert_never(arg) - - If a type checker finds that a call to assert_never() is - reachable, it will emit an error. - - At runtime, this throws an exception when called. - - """ - value = repr(arg) - if len(value) > _ASSERT_NEVER_REPR_MAX_LENGTH: - value = value[:_ASSERT_NEVER_REPR_MAX_LENGTH] + '...' - raise AssertionError(f"Expected code to be unreachable, but got: {value}") - - -if sys.version_info >= (3, 12): # 3.12+ - # dataclass_transform exists in 3.11 but lacks the frozen_default parameter - dataclass_transform = typing.dataclass_transform -else: # <=3.11 - def dataclass_transform( - *, - eq_default: bool = True, - order_default: bool = False, - kw_only_default: bool = False, - frozen_default: bool = False, - field_specifiers: typing.Tuple[ - typing.Union[typing.Type[typing.Any], typing.Callable[..., typing.Any]], - ... - ] = (), - **kwargs: typing.Any, - ) -> typing.Callable[[T], T]: - """Decorator that marks a function, class, or metaclass as providing - dataclass-like behavior. - - Example: - - from pip._vendor.typing_extensions import dataclass_transform - - _T = TypeVar("_T") - - # Used on a decorator function - @dataclass_transform() - def create_model(cls: type[_T]) -> type[_T]: - ... - return cls - - @create_model - class CustomerModel: - id: int - name: str - - # Used on a base class - @dataclass_transform() - class ModelBase: ... - - class CustomerModel(ModelBase): - id: int - name: str - - # Used on a metaclass - @dataclass_transform() - class ModelMeta(type): ... - - class ModelBase(metaclass=ModelMeta): ... - - class CustomerModel(ModelBase): - id: int - name: str - - Each of the ``CustomerModel`` classes defined in this example will now - behave similarly to a dataclass created with the ``@dataclasses.dataclass`` - decorator. For example, the type checker will synthesize an ``__init__`` - method. - - The arguments to this decorator can be used to customize this behavior: - - ``eq_default`` indicates whether the ``eq`` parameter is assumed to be - True or False if it is omitted by the caller. - - ``order_default`` indicates whether the ``order`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``kw_only_default`` indicates whether the ``kw_only`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``frozen_default`` indicates whether the ``frozen`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``field_specifiers`` specifies a static list of supported classes - or functions that describe fields, similar to ``dataclasses.field()``. - - At runtime, this decorator records its arguments in the - ``__dataclass_transform__`` attribute on the decorated object. - - See PEP 681 for details. - - """ - def decorator(cls_or_fn): - cls_or_fn.__dataclass_transform__ = { - "eq_default": eq_default, - "order_default": order_default, - "kw_only_default": kw_only_default, - "frozen_default": frozen_default, - "field_specifiers": field_specifiers, - "kwargs": kwargs, - } - return cls_or_fn - return decorator - - -if hasattr(typing, "override"): # 3.12+ - override = typing.override -else: # <=3.11 - _F = typing.TypeVar("_F", bound=typing.Callable[..., typing.Any]) - - def override(arg: _F, /) -> _F: - """Indicate that a method is intended to override a method in a base class. - - Usage: - - class Base: - def method(self) -> None: - pass - - class Child(Base): - @override - def method(self) -> None: - super().method() - - When this decorator is applied to a method, the type checker will - validate that it overrides a method with the same name on a base class. - This helps prevent bugs that may occur when a base class is changed - without an equivalent change to a child class. - - There is no runtime checking of these properties. The decorator - sets the ``__override__`` attribute to ``True`` on the decorated object - to allow runtime introspection. - - See PEP 698 for details. - - """ - try: - arg.__override__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return arg - - -if hasattr(warnings, "deprecated"): - deprecated = warnings.deprecated -else: - _T = typing.TypeVar("_T") - - class deprecated: - """Indicate that a class, function or overload is deprecated. - - When this decorator is applied to an object, the type checker - will generate a diagnostic on usage of the deprecated object. - - Usage: - - @deprecated("Use B instead") - class A: - pass - - @deprecated("Use g instead") - def f(): - pass - - @overload - @deprecated("int support is deprecated") - def g(x: int) -> int: ... - @overload - def g(x: str) -> int: ... - - The warning specified by *category* will be emitted at runtime - on use of deprecated objects. For functions, that happens on calls; - for classes, on instantiation and on creation of subclasses. - If the *category* is ``None``, no warning is emitted at runtime. - The *stacklevel* determines where the - warning is emitted. If it is ``1`` (the default), the warning - is emitted at the direct caller of the deprecated object; if it - is higher, it is emitted further up the stack. - Static type checker behavior is not affected by the *category* - and *stacklevel* arguments. - - The deprecation message passed to the decorator is saved in the - ``__deprecated__`` attribute on the decorated object. - If applied to an overload, the decorator - must be after the ``@overload`` decorator for the attribute to - exist on the overload as returned by ``get_overloads()``. - - See PEP 702 for details. - - """ - def __init__( - self, - message: str, - /, - *, - category: typing.Optional[typing.Type[Warning]] = DeprecationWarning, - stacklevel: int = 1, - ) -> None: - if not isinstance(message, str): - raise TypeError( - "Expected an object of type str for 'message', not " - f"{type(message).__name__!r}" - ) - self.message = message - self.category = category - self.stacklevel = stacklevel - - def __call__(self, arg: _T, /) -> _T: - # Make sure the inner functions created below don't - # retain a reference to self. - msg = self.message - category = self.category - stacklevel = self.stacklevel - if category is None: - arg.__deprecated__ = msg - return arg - elif isinstance(arg, type): - import functools - from types import MethodType - - original_new = arg.__new__ - - @functools.wraps(original_new) - def __new__(cls, *args, **kwargs): - if cls is arg: - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - if original_new is not object.__new__: - return original_new(cls, *args, **kwargs) - # Mirrors a similar check in object.__new__. - elif cls.__init__ is object.__init__ and (args or kwargs): - raise TypeError(f"{cls.__name__}() takes no arguments") - else: - return original_new(cls) - - arg.__new__ = staticmethod(__new__) - - original_init_subclass = arg.__init_subclass__ - # We need slightly different behavior if __init_subclass__ - # is a bound method (likely if it was implemented in Python) - if isinstance(original_init_subclass, MethodType): - original_init_subclass = original_init_subclass.__func__ - - @functools.wraps(original_init_subclass) - def __init_subclass__(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return original_init_subclass(*args, **kwargs) - - arg.__init_subclass__ = classmethod(__init_subclass__) - # Or otherwise, which likely means it's a builtin such as - # object's implementation of __init_subclass__. - else: - @functools.wraps(original_init_subclass) - def __init_subclass__(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return original_init_subclass(*args, **kwargs) - - arg.__init_subclass__ = __init_subclass__ - - arg.__deprecated__ = __new__.__deprecated__ = msg - __init_subclass__.__deprecated__ = msg - return arg - elif callable(arg): - import functools - - @functools.wraps(arg) - def wrapper(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return arg(*args, **kwargs) - - arg.__deprecated__ = wrapper.__deprecated__ = msg - return wrapper - else: - raise TypeError( - "@deprecated decorator with non-None category must be applied to " - f"a class or callable, not {arg!r}" - ) - - -# We have to do some monkey patching to deal with the dual nature of -# Unpack/TypeVarTuple: -# - We want Unpack to be a kind of TypeVar so it gets accepted in -# Generic[Unpack[Ts]] -# - We want it to *not* be treated as a TypeVar for the purposes of -# counting generic parameters, so that when we subscript a generic, -# the runtime doesn't try to substitute the Unpack with the subscripted type. -if not hasattr(typing, "TypeVarTuple"): - def _check_generic(cls, parameters, elen=_marker): - """Check correct count for parameters of a generic cls (internal helper). - - This gives a nice error message in case of count mismatch. - """ - if not elen: - raise TypeError(f"{cls} is not a generic class") - if elen is _marker: - if not hasattr(cls, "__parameters__") or not cls.__parameters__: - raise TypeError(f"{cls} is not a generic class") - elen = len(cls.__parameters__) - alen = len(parameters) - if alen != elen: - expect_val = elen - if hasattr(cls, "__parameters__"): - parameters = [p for p in cls.__parameters__ if not _is_unpack(p)] - num_tv_tuples = sum(isinstance(p, TypeVarTuple) for p in parameters) - if (num_tv_tuples > 0) and (alen >= elen - num_tv_tuples): - return - - # deal with TypeVarLike defaults - # required TypeVarLikes cannot appear after a defaulted one. - if alen < elen: - # since we validate TypeVarLike default in _collect_type_vars - # or _collect_parameters we can safely check parameters[alen] - if ( - getattr(parameters[alen], '__default__', NoDefault) - is not NoDefault - ): - return - - num_default_tv = sum(getattr(p, '__default__', NoDefault) - is not NoDefault for p in parameters) - - elen -= num_default_tv - - expect_val = f"at least {elen}" - - things = "arguments" if sys.version_info >= (3, 10) else "parameters" - raise TypeError(f"Too {'many' if alen > elen else 'few'} {things}" - f" for {cls}; actual {alen}, expected {expect_val}") -else: - # Python 3.11+ - - def _check_generic(cls, parameters, elen): - """Check correct count for parameters of a generic cls (internal helper). - - This gives a nice error message in case of count mismatch. - """ - if not elen: - raise TypeError(f"{cls} is not a generic class") - alen = len(parameters) - if alen != elen: - expect_val = elen - if hasattr(cls, "__parameters__"): - parameters = [p for p in cls.__parameters__ if not _is_unpack(p)] - - # deal with TypeVarLike defaults - # required TypeVarLikes cannot appear after a defaulted one. - if alen < elen: - # since we validate TypeVarLike default in _collect_type_vars - # or _collect_parameters we can safely check parameters[alen] - if ( - getattr(parameters[alen], '__default__', NoDefault) - is not NoDefault - ): - return - - num_default_tv = sum(getattr(p, '__default__', NoDefault) - is not NoDefault for p in parameters) - - elen -= num_default_tv - - expect_val = f"at least {elen}" - - raise TypeError(f"Too {'many' if alen > elen else 'few'} arguments" - f" for {cls}; actual {alen}, expected {expect_val}") - -if not _PEP_696_IMPLEMENTED: - typing._check_generic = _check_generic - - -def _has_generic_or_protocol_as_origin() -> bool: - try: - frame = sys._getframe(2) - # - Catch AttributeError: not all Python implementations have sys._getframe() - # - Catch ValueError: maybe we're called from an unexpected module - # and the call stack isn't deep enough - except (AttributeError, ValueError): - return False # err on the side of leniency - else: - # If we somehow get invoked from outside typing.py, - # also err on the side of leniency - if frame.f_globals.get("__name__") != "typing": - return False - origin = frame.f_locals.get("origin") - # Cannot use "in" because origin may be an object with a buggy __eq__ that - # throws an error. - return origin is typing.Generic or origin is Protocol or origin is typing.Protocol - - -_TYPEVARTUPLE_TYPES = {TypeVarTuple, getattr(typing, "TypeVarTuple", None)} - - -def _is_unpacked_typevartuple(x) -> bool: - if get_origin(x) is not Unpack: - return False - args = get_args(x) - return ( - bool(args) - and len(args) == 1 - and type(args[0]) in _TYPEVARTUPLE_TYPES - ) - - -# Python 3.11+ _collect_type_vars was renamed to _collect_parameters -if hasattr(typing, '_collect_type_vars'): - def _collect_type_vars(types, typevar_types=None): - """Collect all type variable contained in types in order of - first appearance (lexicographic order). For example:: - - _collect_type_vars((T, List[S, T])) == (T, S) - """ - if typevar_types is None: - typevar_types = typing.TypeVar - tvars = [] - - # A required TypeVarLike cannot appear after a TypeVarLike with a default - # if it was a direct call to `Generic[]` or `Protocol[]` - enforce_default_ordering = _has_generic_or_protocol_as_origin() - default_encountered = False - - # Also, a TypeVarLike with a default cannot appear after a TypeVarTuple - type_var_tuple_encountered = False - - for t in types: - if _is_unpacked_typevartuple(t): - type_var_tuple_encountered = True - elif isinstance(t, typevar_types) and t not in tvars: - if enforce_default_ordering: - has_default = getattr(t, '__default__', NoDefault) is not NoDefault - if has_default: - if type_var_tuple_encountered: - raise TypeError('Type parameter with a default' - ' follows TypeVarTuple') - default_encountered = True - elif default_encountered: - raise TypeError(f'Type parameter {t!r} without a default' - ' follows type parameter with a default') - - tvars.append(t) - if _should_collect_from_parameters(t): - tvars.extend([t for t in t.__parameters__ if t not in tvars]) - return tuple(tvars) - - typing._collect_type_vars = _collect_type_vars -else: - def _collect_parameters(args): - """Collect all type variables and parameter specifications in args - in order of first appearance (lexicographic order). - - For example:: - - assert _collect_parameters((T, Callable[P, T])) == (T, P) - """ - parameters = [] - - # A required TypeVarLike cannot appear after a TypeVarLike with default - # if it was a direct call to `Generic[]` or `Protocol[]` - enforce_default_ordering = _has_generic_or_protocol_as_origin() - default_encountered = False - - # Also, a TypeVarLike with a default cannot appear after a TypeVarTuple - type_var_tuple_encountered = False - - for t in args: - if isinstance(t, type): - # We don't want __parameters__ descriptor of a bare Python class. - pass - elif isinstance(t, tuple): - # `t` might be a tuple, when `ParamSpec` is substituted with - # `[T, int]`, or `[int, *Ts]`, etc. - for x in t: - for collected in _collect_parameters([x]): - if collected not in parameters: - parameters.append(collected) - elif hasattr(t, '__typing_subst__'): - if t not in parameters: - if enforce_default_ordering: - has_default = ( - getattr(t, '__default__', NoDefault) is not NoDefault - ) - - if type_var_tuple_encountered and has_default: - raise TypeError('Type parameter with a default' - ' follows TypeVarTuple') - - if has_default: - default_encountered = True - elif default_encountered: - raise TypeError(f'Type parameter {t!r} without a default' - ' follows type parameter with a default') - - parameters.append(t) - else: - if _is_unpacked_typevartuple(t): - type_var_tuple_encountered = True - for x in getattr(t, '__parameters__', ()): - if x not in parameters: - parameters.append(x) - - return tuple(parameters) - - if not _PEP_696_IMPLEMENTED: - typing._collect_parameters = _collect_parameters - -# Backport typing.NamedTuple as it exists in Python 3.13. -# In 3.11, the ability to define generic `NamedTuple`s was supported. -# This was explicitly disallowed in 3.9-3.10, and only half-worked in <=3.8. -# On 3.12, we added __orig_bases__ to call-based NamedTuples -# On 3.13, we deprecated kwargs-based NamedTuples -if sys.version_info >= (3, 13): - NamedTuple = typing.NamedTuple -else: - def _make_nmtuple(name, types, module, defaults=()): - fields = [n for n, t in types] - annotations = {n: typing._type_check(t, f"field {n} annotation must be a type") - for n, t in types} - nm_tpl = collections.namedtuple(name, fields, - defaults=defaults, module=module) - nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = annotations - # The `_field_types` attribute was removed in 3.9; - # in earlier versions, it is the same as the `__annotations__` attribute - if sys.version_info < (3, 9): - nm_tpl._field_types = annotations - return nm_tpl - - _prohibited_namedtuple_fields = typing._prohibited - _special_namedtuple_fields = frozenset({'__module__', '__name__', '__annotations__'}) - - class _NamedTupleMeta(type): - def __new__(cls, typename, bases, ns): - assert _NamedTuple in bases - for base in bases: - if base is not _NamedTuple and base is not typing.Generic: - raise TypeError( - 'can only inherit from a NamedTuple type and Generic') - bases = tuple(tuple if base is _NamedTuple else base for base in bases) - if "__annotations__" in ns: - types = ns["__annotations__"] - elif "__annotate__" in ns: - # TODO: Use inspect.VALUE here, and make the annotations lazily evaluated - types = ns["__annotate__"](1) - else: - types = {} - default_names = [] - for field_name in types: - if field_name in ns: - default_names.append(field_name) - elif default_names: - raise TypeError(f"Non-default namedtuple field {field_name} " - f"cannot follow default field" - f"{'s' if len(default_names) > 1 else ''} " - f"{', '.join(default_names)}") - nm_tpl = _make_nmtuple( - typename, types.items(), - defaults=[ns[n] for n in default_names], - module=ns['__module__'] - ) - nm_tpl.__bases__ = bases - if typing.Generic in bases: - if hasattr(typing, '_generic_class_getitem'): # 3.12+ - nm_tpl.__class_getitem__ = classmethod(typing._generic_class_getitem) - else: - class_getitem = typing.Generic.__class_getitem__.__func__ - nm_tpl.__class_getitem__ = classmethod(class_getitem) - # update from user namespace without overriding special namedtuple attributes - for key, val in ns.items(): - if key in _prohibited_namedtuple_fields: - raise AttributeError("Cannot overwrite NamedTuple attribute " + key) - elif key not in _special_namedtuple_fields: - if key not in nm_tpl._fields: - setattr(nm_tpl, key, ns[key]) - try: - set_name = type(val).__set_name__ - except AttributeError: - pass - else: - try: - set_name(val, nm_tpl, key) - except BaseException as e: - msg = ( - f"Error calling __set_name__ on {type(val).__name__!r} " - f"instance {key!r} in {typename!r}" - ) - # BaseException.add_note() existed on py311, - # but the __set_name__ machinery didn't start - # using add_note() until py312. - # Making sure exceptions are raised in the same way - # as in "normal" classes seems most important here. - if sys.version_info >= (3, 12): - e.add_note(msg) - raise - else: - raise RuntimeError(msg) from e - - if typing.Generic in bases: - nm_tpl.__init_subclass__() - return nm_tpl - - _NamedTuple = type.__new__(_NamedTupleMeta, 'NamedTuple', (), {}) - - def _namedtuple_mro_entries(bases): - assert NamedTuple in bases - return (_NamedTuple,) - - @_ensure_subclassable(_namedtuple_mro_entries) - def NamedTuple(typename, fields=_marker, /, **kwargs): - """Typed version of namedtuple. - - Usage:: - - class Employee(NamedTuple): - name: str - id: int - - This is equivalent to:: - - Employee = collections.namedtuple('Employee', ['name', 'id']) - - The resulting class has an extra __annotations__ attribute, giving a - dict that maps field names to types. (The field names are also in - the _fields attribute, which is part of the namedtuple API.) - An alternative equivalent functional syntax is also accepted:: - - Employee = NamedTuple('Employee', [('name', str), ('id', int)]) - """ - if fields is _marker: - if kwargs: - deprecated_thing = "Creating NamedTuple classes using keyword arguments" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "Use the class-based or functional syntax instead." - ) - else: - deprecated_thing = "Failing to pass a value for the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif fields is None: - if kwargs: - raise TypeError( - "Cannot pass `None` as the 'fields' parameter " - "and also specify fields using keyword arguments" - ) - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif kwargs: - raise TypeError("Either list of fields or keywords" - " can be provided to NamedTuple, not both") - if fields is _marker or fields is None: - warnings.warn( - deprecation_msg.format(name=deprecated_thing, remove="3.15"), - DeprecationWarning, - stacklevel=2, - ) - fields = kwargs.items() - nt = _make_nmtuple(typename, fields, module=_caller()) - nt.__orig_bases__ = (NamedTuple,) - return nt - - -if hasattr(collections.abc, "Buffer"): - Buffer = collections.abc.Buffer -else: - class Buffer(abc.ABC): # noqa: B024 - """Base class for classes that implement the buffer protocol. - - The buffer protocol allows Python objects to expose a low-level - memory buffer interface. Before Python 3.12, it is not possible - to implement the buffer protocol in pure Python code, or even - to check whether a class implements the buffer protocol. In - Python 3.12 and higher, the ``__buffer__`` method allows access - to the buffer protocol from Python code, and the - ``collections.abc.Buffer`` ABC allows checking whether a class - implements the buffer protocol. - - To indicate support for the buffer protocol in earlier versions, - inherit from this ABC, either in a stub file or at runtime, - or use ABC registration. This ABC provides no methods, because - there is no Python-accessible methods shared by pre-3.12 buffer - classes. It is useful primarily for static checks. - - """ - - # As a courtesy, register the most common stdlib buffer classes. - Buffer.register(memoryview) - Buffer.register(bytearray) - Buffer.register(bytes) - - -# Backport of types.get_original_bases, available on 3.12+ in CPython -if hasattr(_types, "get_original_bases"): - get_original_bases = _types.get_original_bases -else: - def get_original_bases(cls, /): - """Return the class's "original" bases prior to modification by `__mro_entries__`. - - Examples:: - - from typing import TypeVar, Generic - from pip._vendor.typing_extensions import NamedTuple, TypedDict - - T = TypeVar("T") - class Foo(Generic[T]): ... - class Bar(Foo[int], float): ... - class Baz(list[str]): ... - Eggs = NamedTuple("Eggs", [("a", int), ("b", str)]) - Spam = TypedDict("Spam", {"a": int, "b": str}) - - assert get_original_bases(Bar) == (Foo[int], float) - assert get_original_bases(Baz) == (list[str],) - assert get_original_bases(Eggs) == (NamedTuple,) - assert get_original_bases(Spam) == (TypedDict,) - assert get_original_bases(int) == (object,) - """ - try: - return cls.__dict__.get("__orig_bases__", cls.__bases__) - except AttributeError: - raise TypeError( - f'Expected an instance of type, not {type(cls).__name__!r}' - ) from None - - -# NewType is a class on Python 3.10+, making it pickleable -# The error message for subclassing instances of NewType was improved on 3.11+ -if sys.version_info >= (3, 11): - NewType = typing.NewType -else: - class NewType: - """NewType creates simple unique types with almost zero - runtime overhead. NewType(name, tp) is considered a subtype of tp - by static type checkers. At runtime, NewType(name, tp) returns - a dummy callable that simply returns its argument. Usage:: - UserId = NewType('UserId', int) - def name_by_id(user_id: UserId) -> str: - ... - UserId('user') # Fails type check - name_by_id(42) # Fails type check - name_by_id(UserId(42)) # OK - num = UserId(5) + 1 # type: int - """ - - def __call__(self, obj, /): - return obj - - def __init__(self, name, tp): - self.__qualname__ = name - if '.' in name: - name = name.rpartition('.')[-1] - self.__name__ = name - self.__supertype__ = tp - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - def __mro_entries__(self, bases): - # We defined __mro_entries__ to get a better error message - # if a user attempts to subclass a NewType instance. bpo-46170 - supercls_name = self.__name__ - - class Dummy: - def __init_subclass__(cls): - subcls_name = cls.__name__ - raise TypeError( - f"Cannot subclass an instance of NewType. " - f"Perhaps you were looking for: " - f"`{subcls_name} = NewType({subcls_name!r}, {supercls_name})`" - ) - - return (Dummy,) - - def __repr__(self): - return f'{self.__module__}.{self.__qualname__}' - - def __reduce__(self): - return self.__qualname__ - - if sys.version_info >= (3, 10): - # PEP 604 methods - # It doesn't make sense to have these methods on Python <3.10 - - def __or__(self, other): - return typing.Union[self, other] - - def __ror__(self, other): - return typing.Union[other, self] - - -if hasattr(typing, "TypeAliasType"): - TypeAliasType = typing.TypeAliasType -else: - def _is_unionable(obj): - """Corresponds to is_unionable() in unionobject.c in CPython.""" - return obj is None or isinstance(obj, ( - type, - _types.GenericAlias, - _types.UnionType, - TypeAliasType, - )) - - class TypeAliasType: - """Create named, parameterized type aliases. - - This provides a backport of the new `type` statement in Python 3.12: - - type ListOrSet[T] = list[T] | set[T] - - is equivalent to: - - T = TypeVar("T") - ListOrSet = TypeAliasType("ListOrSet", list[T] | set[T], type_params=(T,)) - - The name ListOrSet can then be used as an alias for the type it refers to. - - The type_params argument should contain all the type parameters used - in the value of the type alias. If the alias is not generic, this - argument is omitted. - - Static type checkers should only support type aliases declared using - TypeAliasType that follow these rules: - - - The first argument (the name) must be a string literal. - - The TypeAliasType instance must be immediately assigned to a variable - of the same name. (For example, 'X = TypeAliasType("Y", int)' is invalid, - as is 'X, Y = TypeAliasType("X", int), TypeAliasType("Y", int)'). - - """ - - def __init__(self, name: str, value, *, type_params=()): - if not isinstance(name, str): - raise TypeError("TypeAliasType name must be a string") - self.__value__ = value - self.__type_params__ = type_params - - parameters = [] - for type_param in type_params: - if isinstance(type_param, TypeVarTuple): - parameters.extend(type_param) - else: - parameters.append(type_param) - self.__parameters__ = tuple(parameters) - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - # Setting this attribute closes the TypeAliasType from further modification - self.__name__ = name - - def __setattr__(self, name: str, value: object, /) -> None: - if hasattr(self, "__name__"): - self._raise_attribute_error(name) - super().__setattr__(name, value) - - def __delattr__(self, name: str, /) -> Never: - self._raise_attribute_error(name) - - def _raise_attribute_error(self, name: str) -> Never: - # Match the Python 3.12 error messages exactly - if name == "__name__": - raise AttributeError("readonly attribute") - elif name in {"__value__", "__type_params__", "__parameters__", "__module__"}: - raise AttributeError( - f"attribute '{name}' of 'typing.TypeAliasType' objects " - "is not writable" - ) - else: - raise AttributeError( - f"'typing.TypeAliasType' object has no attribute '{name}'" - ) - - def __repr__(self) -> str: - return self.__name__ - - def __getitem__(self, parameters): - if not isinstance(parameters, tuple): - parameters = (parameters,) - parameters = [ - typing._type_check( - item, f'Subscripting {self.__name__} requires a type.' - ) - for item in parameters - ] - return typing._GenericAlias(self, tuple(parameters)) - - def __reduce__(self): - return self.__name__ - - def __init_subclass__(cls, *args, **kwargs): - raise TypeError( - "type 'typing_extensions.TypeAliasType' is not an acceptable base type" - ) - - # The presence of this method convinces typing._type_check - # that TypeAliasTypes are types. - def __call__(self): - raise TypeError("Type alias is not callable") - - if sys.version_info >= (3, 10): - def __or__(self, right): - # For forward compatibility with 3.12, reject Unions - # that are not accepted by the built-in Union. - if not _is_unionable(right): - return NotImplemented - return typing.Union[self, right] - - def __ror__(self, left): - if not _is_unionable(left): - return NotImplemented - return typing.Union[left, self] - - -if hasattr(typing, "is_protocol"): - is_protocol = typing.is_protocol - get_protocol_members = typing.get_protocol_members -else: - def is_protocol(tp: type, /) -> bool: - """Return True if the given type is a Protocol. - - Example:: - - >>> from typing_extensions import Protocol, is_protocol - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> is_protocol(P) - True - >>> is_protocol(int) - False - """ - return ( - isinstance(tp, type) - and getattr(tp, '_is_protocol', False) - and tp is not Protocol - and tp is not typing.Protocol - ) - - def get_protocol_members(tp: type, /) -> typing.FrozenSet[str]: - """Return the set of members defined in a Protocol. - - Example:: - - >>> from typing_extensions import Protocol, get_protocol_members - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> get_protocol_members(P) - frozenset({'a', 'b'}) - - Raise a TypeError for arguments that are not Protocols. - """ - if not is_protocol(tp): - raise TypeError(f'{tp!r} is not a Protocol') - if hasattr(tp, '__protocol_attrs__'): - return frozenset(tp.__protocol_attrs__) - return frozenset(_get_protocol_attrs(tp)) - - -if hasattr(typing, "Doc"): - Doc = typing.Doc -else: - class Doc: - """Define the documentation of a type annotation using ``Annotated``, to be - used in class attributes, function and method parameters, return values, - and variables. - - The value should be a positional-only string literal to allow static tools - like editors and documentation generators to use it. - - This complements docstrings. - - The string value passed is available in the attribute ``documentation``. - - Example:: - - >>> from typing_extensions import Annotated, Doc - >>> def hi(to: Annotated[str, Doc("Who to say hi to")]) -> None: ... - """ - def __init__(self, documentation: str, /) -> None: - self.documentation = documentation - - def __repr__(self) -> str: - return f"Doc({self.documentation!r})" - - def __hash__(self) -> int: - return hash(self.documentation) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Doc): - return NotImplemented - return self.documentation == other.documentation - - -_CapsuleType = getattr(_types, "CapsuleType", None) - -if _CapsuleType is None: - try: - import _socket - except ImportError: - pass - else: - _CAPI = getattr(_socket, "CAPI", None) - if _CAPI is not None: - _CapsuleType = type(_CAPI) - -if _CapsuleType is not None: - CapsuleType = _CapsuleType - __all__.append("CapsuleType") - - -# Aliases for items that have always been in typing. -# Explicitly assign these (rather than using `from typing import *` at the top), -# so that we get a CI error if one of these is deleted from typing.py -# in a future version of Python -AbstractSet = typing.AbstractSet -AnyStr = typing.AnyStr -BinaryIO = typing.BinaryIO -Callable = typing.Callable -Collection = typing.Collection -Container = typing.Container -Dict = typing.Dict -ForwardRef = typing.ForwardRef -FrozenSet = typing.FrozenSet -Generic = typing.Generic -Hashable = typing.Hashable -IO = typing.IO -ItemsView = typing.ItemsView -Iterable = typing.Iterable -Iterator = typing.Iterator -KeysView = typing.KeysView -List = typing.List -Mapping = typing.Mapping -MappingView = typing.MappingView -Match = typing.Match -MutableMapping = typing.MutableMapping -MutableSequence = typing.MutableSequence -MutableSet = typing.MutableSet -Optional = typing.Optional -Pattern = typing.Pattern -Reversible = typing.Reversible -Sequence = typing.Sequence -Set = typing.Set -Sized = typing.Sized -TextIO = typing.TextIO -Tuple = typing.Tuple -Union = typing.Union -ValuesView = typing.ValuesView -cast = typing.cast -no_type_check = typing.no_type_check -no_type_check_decorator = typing.no_type_check_decorator diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py deleted file mode 100644 index c6fa382..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more -""" -from __future__ import absolute_import - -# Set default logging handler to avoid "No handler found" warnings. -import logging -import warnings -from logging import NullHandler - -from . import exceptions -from ._version import __version__ -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host - -# === NOTE TO REPACKAGERS AND VENDORS === -# Please delete this block, this logic is only -# for urllib3 being distributed via PyPI. -# See: https://github.com/urllib3/urllib3/issues/2680 -try: - import urllib3_secure_extra # type: ignore # noqa: F401 -except ImportError: - pass -else: - warnings.warn( - "'urllib3[secure]' extra is deprecated and will be removed " - "in a future release of urllib3 2.x. Read more in this issue: " - "https://github.com/urllib3/urllib3/issues/2680", - category=DeprecationWarning, - stacklevel=2, - ) - -__author__ = "Andrey Petrov (andrey.petrov@shazow.net)" -__license__ = "MIT" -__version__ = __version__ - -__all__ = ( - "HTTPConnectionPool", - "HTTPSConnectionPool", - "PoolManager", - "ProxyManager", - "HTTPResponse", - "Retry", - "Timeout", - "add_stderr_logger", - "connection_from_url", - "disable_warnings", - "encode_multipart_formdata", - "get_host", - "make_headers", - "proxy_from_url", -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug("Added a stderr logging handler to logger: %s", __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter("always", exceptions.SecurityWarning, append=True) -# SubjectAltNameWarning's should go off once per host -warnings.simplefilter("default", exceptions.SubjectAltNameWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True) -# SNIMissingWarnings should go off only once. -warnings.simplefilter("default", exceptions.SNIMissingWarning, append=True) - - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter("ignore", category) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2322ca9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc deleted file mode 100644 index 24342ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc deleted file mode 100644 index 4fb36bb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index c6a42dd..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc deleted file mode 100644 index afb2567..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 88feeef..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc deleted file mode 100644 index 6acc512..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc deleted file mode 100644 index e013e84..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc deleted file mode 100644 index ef70cb7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc deleted file mode 100644 index 14be587..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc deleted file mode 100644 index 023fde3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py deleted file mode 100644 index bceb845..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py +++ /dev/null @@ -1,355 +0,0 @@ -from __future__ import absolute_import - -try: - from collections.abc import Mapping, MutableMapping -except ImportError: - from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -from collections import OrderedDict - -from .exceptions import InvalidHeader -from .packages import six -from .packages.six import iterkeys, itervalues - -__all__ = ["RecentlyUsedContainer", "HTTPHeaderDict"] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError( - "Iteration over this class is unlikely to be threadsafe." - ) - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -class HTTPHeaderDict(MutableMapping): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - super(HTTPHeaderDict, self).__init__() - self._container = OrderedDict() - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - self._container[key.lower()] = [key, val] - return self._container[key.lower()] - - def __getitem__(self, key): - val = self._container[key.lower()] - return ", ".join(val[1:]) - - def __delitem__(self, key): - del self._container[key.lower()] - - def __contains__(self, key): - return key.lower() in self._container - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, "keys"): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return dict((k.lower(), v) for k, v in self.itermerged()) == dict( - (k.lower(), v) for k, v in other.itermerged() - ) - - def __ne__(self, other): - return not self.__eq__(other) - - if six.PY2: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def __len__(self): - return len(self._container) - - def __iter__(self): - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def pop(self, key, default=__marker): - """D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - """ - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - vals.append(val) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError( - "extend() takes at most 1 positional " - "arguments ({0} given)".format(len(args)) - ) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key, default=__marker): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = self._container[key.lower()] - except KeyError: - if default is self.__marker: - return [] - return default - else: - return vals[1:] - - def _prepare_for_method_change(self): - """ - Remove content-specific header fields before changing the request - method to GET or HEAD according to RFC 9110, Section 15.4. - """ - content_specific_headers = [ - "Content-Encoding", - "Content-Language", - "Content-Location", - "Content-Type", - "Content-Length", - "Digest", - "Last-Modified", - ] - for header in content_specific_headers: - self.discard(header) - return self - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - # Backwards compatibility for http.cookiejar - get_all = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = other.getlist(key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - self._container[key.lower()] = [key] + val - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ", ".join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - obs_fold_continued_leaders = (" ", "\t") - headers = [] - - for line in message.headers: - if line.startswith(obs_fold_continued_leaders): - if not headers: - # We received a header line that starts with OWS as described - # in RFC-7230 S3.2.4. This indicates a multiline header, but - # there exists no previous header to which we can attach it. - raise InvalidHeader( - "Header continuation with no previous header: %s" % line - ) - else: - key, value = headers[-1] - headers[-1] = (key, value + " " + line.strip()) - continue - - key, value = line.split(":", 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py deleted file mode 100644 index d49df2a..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py +++ /dev/null @@ -1,2 +0,0 @@ -# This file is protected via CODEOWNERS -__version__ = "1.26.20" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py deleted file mode 100644 index de35b63..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py +++ /dev/null @@ -1,572 +0,0 @@ -from __future__ import absolute_import - -import datetime -import logging -import os -import re -import socket -import warnings -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from .packages import six -from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection -from .packages.six.moves.http_client import HTTPException # noqa: F401 -from .util.proxy import create_proxy_ssl_context - -try: # Compiled with SSL? - import ssl - - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: - # Python 3: not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: - # Python 2 - class ConnectionError(Exception): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - BrokenPipeError = BrokenPipeError -except NameError: # Python 2: - - class BrokenPipeError(Exception): - pass - - -from ._collections import HTTPHeaderDict # noqa (historical, removed in v2) -from ._version import __version__ -from .exceptions import ( - ConnectTimeoutError, - NewConnectionError, - SubjectAltNameWarning, - SystemTimeWarning, -) -from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection -from .util.ssl_ import ( - assert_fingerprint, - create_urllib3_context, - is_ipaddress, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .util.ssl_match_hostname import CertificateError, match_hostname - -log = logging.getLogger(__name__) - -port_by_scheme = {"http": 80, "https": 443} - -# When it comes time to update this value as a part of regular maintenance -# (ie test_recent_date is failing) update it to ~6 months before the current date. -RECENT_DATE = datetime.date(2024, 1, 1) - -_CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]") - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on :class:`http.client.HTTPConnection` but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass: - - .. code-block:: python - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme["http"] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - #: Whether this proxy connection (if used) verifies the proxy host's - #: certificate. - proxy_is_verified = None - - def __init__(self, *args, **kw): - if not six.PY2: - kw.pop("strict", None) - - # Pre-set source_address. - self.source_address = kw.get("source_address") - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop("socket_options", self.default_socket_options) - - # Proxy options provided by the user. - self.proxy = kw.pop("proxy", None) - self.proxy_config = kw.pop("proxy_config", None) - - _HTTPConnection.__init__(self, *args, **kw) - - @property - def host(self): - """ - Getter method to remove any trailing dots that indicate the hostname is an FQDN. - - In general, SSL certificates don't include the trailing dot indicating a - fully-qualified domain name, and thus, they don't validate properly when - checked against a domain name that includes the dot. In addition, some - servers may not expect to receive the trailing dot when provided. - - However, the hostname with trailing dot is critical to DNS resolution; doing a - lookup with the trailing dot will properly only resolve the appropriate FQDN, - whereas a lookup without a trailing dot will search the system's search domain - list. Thus, it's important to keep the original host around for use only in - those cases where it's appropriate (i.e., when doing DNS lookup to establish the - actual TCP connection across which we're going to send HTTP requests). - """ - return self._dns_host.rstrip(".") - - @host.setter - def host(self, value): - """ - Setter for the `host` property. - - We assume that only urllib3 uses the _dns_host attribute; httplib itself - only uses `host`, and it seems reasonable that other libraries follow suit. - """ - self._dns_host = value - - def _new_conn(self): - """Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw["source_address"] = self.source_address - - if self.socket_options: - extra_kw["socket_options"] = self.socket_options - - try: - conn = connection.create_connection( - (self._dns_host, self.port), self.timeout, **extra_kw - ) - - except SocketTimeout: - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - - except SocketError as e: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - return conn - - def _is_using_tunnel(self): - # Google App Engine's httplib does not define _tunnel_host - return getattr(self, "_tunnel_host", None) - - def _prepare_conn(self, conn): - self.sock = conn - if self._is_using_tunnel(): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - def putrequest(self, method, url, *args, **kwargs): - """ """ - # Empty docstring because the indentation of CPython's implementation - # is broken but we don't want this method in our documentation. - match = _CONTAINS_CONTROL_CHAR_RE.search(method) - if match: - raise ValueError( - "Method cannot contain non-token characters %r (found at least %r)" - % (method, match.group()) - ) - - return _HTTPConnection.putrequest(self, method, url, *args, **kwargs) - - def putheader(self, header, *values): - """ """ - if not any(isinstance(v, str) and v == SKIP_HEADER for v in values): - _HTTPConnection.putheader(self, header, *values) - elif six.ensure_str(header.lower()) not in SKIPPABLE_HEADERS: - raise ValueError( - "urllib3.util.SKIP_HEADER only supports '%s'" - % ("', '".join(map(str.title, sorted(SKIPPABLE_HEADERS))),) - ) - - def request(self, method, url, body=None, headers=None): - # Update the inner socket's timeout value to send the request. - # This only triggers if the connection is re-used. - if getattr(self, "sock", None) is not None: - self.sock.settimeout(self.timeout) - - if headers is None: - headers = {} - else: - # Avoid modifying the headers passed into .request() - headers = headers.copy() - if "user-agent" not in (six.ensure_str(k.lower()) for k in headers): - headers["User-Agent"] = _get_default_user_agent() - super(HTTPConnection, self).request(method, url, body=body, headers=headers) - - def request_chunked(self, method, url, body=None, headers=None): - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - headers = headers or {} - header_keys = set([six.ensure_str(k.lower()) for k in headers]) - skip_accept_encoding = "accept-encoding" in header_keys - skip_host = "host" in header_keys - self.putrequest( - method, url, skip_accept_encoding=skip_accept_encoding, skip_host=skip_host - ) - if "user-agent" not in header_keys: - self.putheader("User-Agent", _get_default_user_agent()) - for header, value in headers.items(): - self.putheader(header, value) - if "transfer-encoding" not in header_keys: - self.putheader("Transfer-Encoding", "chunked") - self.endheaders() - - if body is not None: - stringish_types = six.string_types + (bytes,) - if isinstance(body, stringish_types): - body = (body,) - for chunk in body: - if not chunk: - continue - if not isinstance(chunk, bytes): - chunk = chunk.encode("utf8") - len_str = hex(len(chunk))[2:] - to_send = bytearray(len_str.encode()) - to_send += b"\r\n" - to_send += chunk - to_send += b"\r\n" - self.send(to_send) - - # After the if clause, to always have a closed body - self.send(b"0\r\n\r\n") - - -class HTTPSConnection(HTTPConnection): - """ - Many of the parameters to this constructor are passed to the underlying SSL - socket by means of :py:func:`urllib3.util.ssl_wrap_socket`. - """ - - default_port = port_by_scheme["https"] - - cert_reqs = None - ca_certs = None - ca_cert_dir = None - ca_cert_data = None - ssl_version = None - assert_fingerprint = None - tls_in_tls_required = False - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - key_password=None, - strict=None, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - ssl_context=None, - server_hostname=None, - **kw - ): - - HTTPConnection.__init__(self, host, port, strict=strict, timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - self.ssl_context = ssl_context - self.server_hostname = server_hostname - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = "https" - - def set_cert( - self, - key_file=None, - cert_file=None, - cert_reqs=None, - key_password=None, - ca_certs=None, - assert_hostname=None, - assert_fingerprint=None, - ca_cert_dir=None, - ca_cert_data=None, - ): - """ - This method should only be called once, before the connection is used. - """ - # If cert_reqs is not provided we'll assume CERT_REQUIRED unless we also - # have an SSLContext object in which case we'll use its verify_mode. - if cert_reqs is None: - if self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - else: - cert_reqs = resolve_cert_reqs(None) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - self.ca_cert_data = ca_cert_data - - def connect(self): - # Add certificate verification - self.sock = conn = self._new_conn() - hostname = self.host - tls_in_tls = False - - if self._is_using_tunnel(): - if self.tls_in_tls_required: - self.sock = conn = self._connect_tls_proxy(hostname, conn) - tls_in_tls = True - - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - server_hostname = hostname - if self.server_hostname is not None: - server_hostname = self.server_hostname - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn( - ( - "System time is way off (before {0}). This will probably " - "lead to SSL verification errors" - ).format(RECENT_DATE), - SystemTimeWarning, - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - default_ssl_context = False - if self.ssl_context is None: - default_ssl_context = True - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(self.ssl_version), - cert_reqs=resolve_cert_reqs(self.cert_reqs), - ) - - context = self.ssl_context - context.verify_mode = resolve_cert_reqs(self.cert_reqs) - - # Try to load OS default certs if none are given. - # Works well on Windows (requires Python3.4+) - if ( - not self.ca_certs - and not self.ca_cert_dir - and not self.ca_cert_data - and default_ssl_context - and hasattr(context, "load_default_certs") - ): - context.load_default_certs() - - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - key_password=self.key_password, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - server_hostname=server_hostname, - ssl_context=context, - tls_in_tls=tls_in_tls, - ) - - # If we're using all defaults and the connection - # is TLSv1 or TLSv1.1 we throw a DeprecationWarning - # for the host. - if ( - default_ssl_context - and self.ssl_version is None - and hasattr(self.sock, "version") - and self.sock.version() in {"TLSv1", "TLSv1.1"} - ): # Defensive: - warnings.warn( - "Negotiating TLSv1/TLSv1.1 by default is deprecated " - "and will be disabled in urllib3 v2.0.0. Connecting to " - "'%s' with '%s' can be enabled by explicitly opting-in " - "with 'ssl_version'" % (self.host, self.sock.version()), - DeprecationWarning, - ) - - if self.assert_fingerprint: - assert_fingerprint( - self.sock.getpeercert(binary_form=True), self.assert_fingerprint - ) - elif ( - context.verify_mode != ssl.CERT_NONE - and not getattr(context, "check_hostname", False) - and self.assert_hostname is not False - ): - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = self.sock.getpeercert() - if not cert.get("subjectAltName", ()): - warnings.warn( - ( - "Certificate for {0} has no `subjectAltName`, falling back to check for a " - "`commonName` for now. This feature is being removed by major browsers and " - "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 " - "for details.)".format(hostname) - ), - SubjectAltNameWarning, - ) - _match_hostname(cert, self.assert_hostname or server_hostname) - - self.is_verified = ( - context.verify_mode == ssl.CERT_REQUIRED - or self.assert_fingerprint is not None - ) - - def _connect_tls_proxy(self, hostname, conn): - """ - Establish a TLS connection to the proxy using the provided SSL context. - """ - proxy_config = self.proxy_config - ssl_context = proxy_config.ssl_context - if ssl_context: - # If the user provided a proxy context, we assume CA and client - # certificates have already been set - return ssl_wrap_socket( - sock=conn, - server_hostname=hostname, - ssl_context=ssl_context, - ) - - ssl_context = create_proxy_ssl_context( - self.ssl_version, - self.cert_reqs, - self.ca_certs, - self.ca_cert_dir, - self.ca_cert_data, - ) - - # If no cert was provided, use only the default options for server - # certificate validation - socket = ssl_wrap_socket( - sock=conn, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - server_hostname=hostname, - ssl_context=ssl_context, - ) - - if ssl_context.verify_mode != ssl.CERT_NONE and not getattr( - ssl_context, "check_hostname", False - ): - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = socket.getpeercert() - if not cert.get("subjectAltName", ()): - warnings.warn( - ( - "Certificate for {0} has no `subjectAltName`, falling back to check for a " - "`commonName` for now. This feature is being removed by major browsers and " - "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 " - "for details.)".format(hostname) - ), - SubjectAltNameWarning, - ) - _match_hostname(cert, hostname) - - self.proxy_is_verified = ssl_context.verify_mode == ssl.CERT_REQUIRED - return socket - - -def _match_hostname(cert, asserted_hostname): - # Our upstream implementation of ssl.match_hostname() - # only applies this normalization to IP addresses so it doesn't - # match DNS SANs so we do the same thing! - stripped_hostname = asserted_hostname.strip("u[]") - if is_ipaddress(stripped_hostname): - asserted_hostname = stripped_hostname - - try: - match_hostname(cert, asserted_hostname) - except CertificateError as e: - log.warning( - "Certificate did not match expected hostname: %s. Certificate: %s", - asserted_hostname, - cert, - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert - raise - - -def _get_default_user_agent(): - return "python-urllib3/%s" % __version__ - - -class DummyConnection(object): - """Used to detect a failed ConnectionCls import.""" - - pass - - -if not ssl: - HTTPSConnection = DummyConnection # noqa: F811 - - -VerifiedHTTPSConnection = HTTPSConnection diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py deleted file mode 100644 index 0872ed7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py +++ /dev/null @@ -1,1140 +0,0 @@ -from __future__ import absolute_import - -import errno -import logging -import re -import socket -import sys -import warnings -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from ._collections import HTTPHeaderDict -from .connection import ( - BaseSSLError, - BrokenPipeError, - DummyConnection, - HTTPConnection, - HTTPException, - HTTPSConnection, - VerifiedHTTPSConnection, - port_by_scheme, -) -from .exceptions import ( - ClosedPoolError, - EmptyPoolError, - HeaderParsingError, - HostChangedError, - InsecureRequestWarning, - LocationValueError, - MaxRetryError, - NewConnectionError, - ProtocolError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, -) -from .packages import six -from .packages.six.moves import queue -from .request import RequestMethods -from .response import HTTPResponse -from .util.connection import is_connection_dropped -from .util.proxy import connection_requires_http_tunnel -from .util.queue import LifoQueue -from .util.request import set_file_position -from .util.response import assert_header_parsing -from .util.retry import Retry -from .util.ssl_match_hostname import CertificateError -from .util.timeout import Timeout -from .util.url import Url, _encode_target -from .util.url import _normalize_host as normalize_host -from .util.url import get_host, parse_url - -try: # Platform-specific: Python 3 - import weakref - - weakref_finalize = weakref.finalize -except AttributeError: # Platform-specific: Python 2 - from .packages.backports.weakref_finalize import weakref_finalize - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -# Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - - .. note:: - ConnectionPool.urlopen() does not normalize or percent-encode target URIs - which is useful if your target server doesn't support percent-encoded - target URIs. - """ - - scheme = None - QueueCls = LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - self.host = _normalize_host(host, scheme=self.scheme) - self._proxy_host = host.lower() - self.port = port - - def __str__(self): - return "%s(host=%r, port=%r)" % (type(self).__name__, self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`http.client.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`http.client.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`http.client.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.ProxyManager` - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.ProxyManager` - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = "http" - ConnectionCls = HTTPConnection - ResponseCls = HTTPResponse - - def __init__( - self, - host, - port=None, - strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, - maxsize=1, - block=False, - headers=None, - retries=None, - _proxy=None, - _proxy_headers=None, - _proxy_config=None, - **conn_kw - ): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - self.proxy_config = _proxy_config - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault("socket_options", []) - - self.conn_kw["proxy"] = self.proxy - self.conn_kw["proxy_config"] = self.proxy_config - - # Do not pass 'self' as callback to 'finalize'. - # Then the 'finalize' would keep an endless living (leak) to self. - # By just passing a reference to the pool allows the garbage collector - # to free self if nobody else has a reference to it. - pool = self.pool - - # Close all the HTTPConnections in the pool before the - # HTTPConnectionPool object is garbage collected. - weakref_finalize(self, _close_pool_connections, pool) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTP connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "80", - ) - - conn = self.ConnectionCls( - host=self.host, - port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, - **self.conn_kw - ) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except queue.Empty: - if self.block: - raise EmptyPoolError( - self, - "Pool reached maximum size and no more connections are allowed.", - ) - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - if getattr(conn, "auto_open", 1) == 0: - # This is a proxied connection that has been mutated by - # http.client._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s. Connection pool size: %s", - self.host, - self.pool.qsize(), - ) - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """Helper that always returns a :class:`urllib3.util.Timeout`""" - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, "errno") and err.errno in _blocking_errnos: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if "timed out" in str(err) or "did not complete (read)" in str( - err - ): # Python < 2.7.4 - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - def _make_request( - self, conn, method, url, timeout=_Default, chunked=False, **httplib_request_kw - ): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls http.client.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - try: - if chunked: - conn.request_chunked(method, url, **httplib_request_kw) - else: - conn.request(method, url, **httplib_request_kw) - - # We are swallowing BrokenPipeError (errno.EPIPE) since the server is - # legitimately able to close the connection after sending a valid response. - # With this behaviour, the received response is still readable. - except BrokenPipeError: - # Python 3 - pass - except IOError as e: - # Python 2 and macOS/Linux - # EPIPE and ESHUTDOWN are BrokenPipeError on Python 2, and EPROTOTYPE/ECONNRESET are needed on macOS - # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ - if e.errno not in { - errno.EPIPE, - errno.ESHUTDOWN, - errno.EPROTOTYPE, - errno.ECONNRESET, - }: - raise - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, "sock", None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout - ) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: - # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: - # Python 3 - try: - httplib_response = conn.getresponse() - except BaseException as e: - # Remove the TypeError from the exception chain in - # Python 3 (including for exceptions like SystemExit). - # Otherwise it looks like a bug in the code. - six.raise_from(e, None) - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, "_http_vsn_str", "HTTP/?") - log.debug( - '%s://%s:%s "%s %s %s" %s %s', - self.scheme, - self.host, - self.port, - method, - url, - http_version, - httplib_response.status, - httplib_response.length, - ) - - try: - assert_header_parsing(httplib_response.msg) - except (HeaderParsingError, TypeError) as hpe: # Platform-specific: Python 3 - log.warning( - "Failed to parse headers (url=%s): %s", - self._absolute_url(url), - hpe, - exc_info=True, - ) - - return httplib_response - - def _absolute_url(self, path): - return Url(scheme=self.scheme, host=self.host, port=self.port, path=path).url - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - if self.pool is None: - return - # Disable access to the pool - old_pool, self.pool = self.pool, None - - # Close all the HTTPConnections in the pool. - _close_pool_connections(old_pool) - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith("/"): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - if host is not None: - host = _normalize_host(host, scheme=scheme) - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=None, - redirect=True, - assert_same_host=True, - timeout=_Default, - pool_timeout=None, - release_conn=None, - chunked=False, - body_pos=None, - **response_kw - ): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When ``False``, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - - :param \\**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - - parsed_url = parse_url(url) - destination_scheme = parsed_url.scheme - - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get("preload_content", True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - # Ensure that the URL we're connecting to is properly encoded - if url.startswith("/"): - url = six.ensure_str(_encode_target(url)) - else: - url = six.ensure_str(parsed_url.url) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] - release_this_conn = release_conn - - http_tunnel_required = connection_requires_http_tunnel( - self.proxy, self.proxy_config, destination_scheme - ) - - # Merge the proxy headers. Only done when not using HTTP CONNECT. We - # have to copy the headers dict so we can safely change it without those - # changes being reflected in anyone else's copy. - if not http_tunnel_required: - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr( - conn, "sock", None - ) - if is_new_proxy_conn and http_tunnel_required: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request( - conn, - method, - url, - timeout=timeout_obj, - body=body, - headers=headers, - chunked=chunked, - ) - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Pass method to Response for length checking - response_kw["request_method"] = method - - # Import httplib's response into our own wrapper object - response = self.ResponseCls.from_httplib( - httplib_response, - pool=self, - connection=response_conn, - retries=retries, - **response_kw - ) - - # Everything went great! - clean_exit = True - - except EmptyPoolError: - # Didn't get a connection from the pool, no need to clean up - clean_exit = True - release_this_conn = False - raise - - except ( - TimeoutError, - HTTPException, - SocketError, - ProtocolError, - BaseSSLError, - SSLError, - CertificateError, - ) as e: - # Discard the connection for these exceptions. It will be - # replaced during the next _get_conn() call. - clean_exit = False - - def _is_ssl_error_message_from_http_proxy(ssl_error): - # We're trying to detect the message 'WRONG_VERSION_NUMBER' but - # SSLErrors are kinda all over the place when it comes to the message, - # so we try to cover our bases here! - message = " ".join(re.split("[^a-z]", str(ssl_error).lower())) - return ( - "wrong version number" in message - or "unknown protocol" in message - or "record layer failure" in message - ) - - # Try to detect a common user error with proxies which is to - # set an HTTP proxy to be HTTPS when it should be 'http://' - # (ie {'http': 'http://proxy', 'https': 'https://proxy'}) - # Instead we add a nice error message and point to a URL. - if ( - isinstance(e, BaseSSLError) - and self.proxy - and _is_ssl_error_message_from_http_proxy(e) - and conn.proxy - and conn.proxy.scheme == "https" - ): - e = ProxyError( - "Your proxy appears to only use HTTP and not HTTPS, " - "try changing your proxy URL to be HTTP. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#https-proxy-error-http-proxy", - SSLError(e), - ) - elif isinstance(e, (BaseSSLError, CertificateError)): - e = SSLError(e) - elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: - e = ProxyError("Cannot connect to proxy.", e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError("Connection aborted.", e) - - retries = retries.increment( - method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2] - ) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - conn = conn and conn.close() - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning( - "Retrying (%r) after connection broken by '%r': %s", retries, err, url - ) - return self.urlopen( - method, - url, - body, - headers, - retries, - redirect, - assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - body = None - headers = HTTPHeaderDict(headers)._prepare_for_method_change() - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, - redirect_location, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.headers.get("Retry-After")) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, - url, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - :class:`.HTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl` - is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = "https" - ConnectionCls = HTTPSConnection - - def __init__( - self, - host, - port=None, - strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, - maxsize=1, - block=False, - headers=None, - retries=None, - _proxy=None, - _proxy_headers=None, - key_file=None, - cert_file=None, - cert_reqs=None, - key_password=None, - ca_certs=None, - ssl_version=None, - assert_hostname=None, - assert_fingerprint=None, - ca_cert_dir=None, - **conn_kw - ): - - HTTPConnectionPool.__init__( - self, - host, - port, - strict, - timeout, - maxsize, - block, - headers, - retries, - _proxy, - _proxy_headers, - **conn_kw - ) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert( - key_file=self.key_file, - key_password=self.key_password, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint, - ) - conn.ssl_version = self.ssl_version - return conn - - def _prepare_proxy(self, conn): - """ - Establishes a tunnel connection through HTTP CONNECT. - - Tunnel connection is established early because otherwise httplib would - improperly set Host: header to proxy's IP:port. - """ - - conn.set_tunnel(self._proxy_host, self.port, self.proxy_headers) - - if self.proxy.scheme == "https": - conn.tls_in_tls_required = True - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`http.client.HTTPSConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTPS connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "443", - ) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError( - "Can't connect to HTTPS URL because the SSL module is not available." - ) - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls( - host=actual_host, - port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, - cert_file=self.cert_file, - key_file=self.key_file, - key_password=self.key_password, - **self.conn_kw - ) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, "sock", None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn( - ( - "Unverified HTTPS request is being made to host '%s'. " - "Adding certificate verification is strongly advised. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings" % conn.host - ), - InsecureRequestWarning, - ) - - if getattr(conn, "proxy_is_verified", None) is False: - warnings.warn( - ( - "Unverified HTTPS connection done to an HTTPS proxy. " - "Adding certificate verification is strongly advised. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings" - ), - InsecureRequestWarning, - ) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - port = port or port_by_scheme.get(scheme, 80) - if scheme == "https": - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) - - -def _normalize_host(host, scheme): - """ - Normalize hosts for comparisons and use with sockets. - """ - - host = normalize_host(host, scheme) - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - if host.startswith("[") and host.endswith("]"): - host = host[1:-1] - return host - - -def _close_pool_connections(pool): - """Drains a queue of connections and closes each one.""" - try: - while True: - conn = pool.get(block=False) - if conn: - conn.close() - except queue.Empty: - pass # Done. diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index d74aae0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc deleted file mode 100644 index 9530819..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc deleted file mode 100644 index 5527502..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc deleted file mode 100644 index 78ae2e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc deleted file mode 100644 index 5379b37..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc deleted file mode 100644 index 74d2fd9..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc deleted file mode 100644 index c6912ea..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py deleted file mode 100644 index 8765b90..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -This module provides means to detect the App Engine environment. -""" - -import os - - -def is_appengine(): - return is_local_appengine() or is_prod_appengine() - - -def is_appengine_sandbox(): - """Reports if the app is running in the first generation sandbox. - - The second generation runtimes are technically still in a sandbox, but it - is much less restrictive, so generally you shouldn't need to check for it. - see https://cloud.google.com/appengine/docs/standard/runtimes - """ - return is_appengine() and os.environ["APPENGINE_RUNTIME"] == "python27" - - -def is_local_appengine(): - return "APPENGINE_RUNTIME" in os.environ and os.environ.get( - "SERVER_SOFTWARE", "" - ).startswith("Development/") - - -def is_prod_appengine(): - return "APPENGINE_RUNTIME" in os.environ and os.environ.get( - "SERVER_SOFTWARE", "" - ).startswith("Google App Engine/") - - -def is_prod_appengine_mvms(): - """Deprecated.""" - return False diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 10f1aa2..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc deleted file mode 100644 index 69001cc..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc deleted file mode 100644 index 188e5c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py deleted file mode 100644 index 264d564..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +++ /dev/null @@ -1,519 +0,0 @@ -""" -This module uses ctypes to bind a whole bunch of functions and constants from -SecureTransport. The goal here is to provide the low-level API to -SecureTransport. These are essentially the C-level functions and constants, and -they're pretty gross to work with. - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - - Copyright (c) 2015-2016 Will Bond - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - -import platform -from ctypes import ( - CDLL, - CFUNCTYPE, - POINTER, - c_bool, - c_byte, - c_char_p, - c_int32, - c_long, - c_size_t, - c_uint32, - c_ulong, - c_void_p, -) -from ctypes.util import find_library - -from ...packages.six import raise_from - -if platform.system() != "Darwin": - raise ImportError("Only macOS is supported") - -version = platform.mac_ver()[0] -version_info = tuple(map(int, version.split("."))) -if version_info < (10, 8): - raise OSError( - "Only OS X 10.8 and newer are supported, not %s.%s" - % (version_info[0], version_info[1]) - ) - - -def load_cdll(name, macos10_16_path): - """Loads a CDLL by name, falling back to known path on 10.16+""" - try: - # Big Sur is technically 11 but we use 10.16 due to the Big Sur - # beta being labeled as 10.16. - if version_info >= (10, 16): - path = macos10_16_path - else: - path = find_library(name) - if not path: - raise OSError # Caught and reraised as 'ImportError' - return CDLL(path, use_errno=True) - except OSError: - raise_from(ImportError("The library %s failed to load" % name), None) - - -Security = load_cdll( - "Security", "/System/Library/Frameworks/Security.framework/Security" -) -CoreFoundation = load_cdll( - "CoreFoundation", - "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", -) - - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFDictionary = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong - -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFDictionaryRef = POINTER(CFDictionary) -CFArrayCallBacks = c_void_p -CFDictionaryKeyCallBacks = c_void_p -CFDictionaryValueCallBacks = c_void_p - -SecCertificateRef = POINTER(c_void_p) -SecExternalFormat = c_uint32 -SecExternalItemType = c_uint32 -SecIdentityRef = POINTER(c_void_p) -SecItemImportExportFlags = c_uint32 -SecItemImportExportKeyParameters = c_void_p -SecKeychainRef = POINTER(c_void_p) -SSLProtocol = c_uint32 -SSLCipherSuite = c_uint32 -SSLContextRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SSLConnectionRef = c_uint32 -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 -SSLProtocolSide = c_uint32 -SSLConnectionType = c_uint32 -SSLSessionOption = c_uint32 - - -try: - Security.SecItemImport.argtypes = [ - CFDataRef, - CFStringRef, - POINTER(SecExternalFormat), - POINTER(SecExternalItemType), - SecItemImportExportFlags, - POINTER(SecItemImportExportKeyParameters), - SecKeychainRef, - POINTER(CFArrayRef), - ] - Security.SecItemImport.restype = OSStatus - - Security.SecCertificateGetTypeID.argtypes = [] - Security.SecCertificateGetTypeID.restype = CFTypeID - - Security.SecIdentityGetTypeID.argtypes = [] - Security.SecIdentityGetTypeID.restype = CFTypeID - - Security.SecKeyGetTypeID.argtypes = [] - Security.SecKeyGetTypeID.restype = CFTypeID - - Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [SecCertificateRef] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecIdentityCreateWithCertificate.argtypes = [ - CFTypeRef, - SecCertificateRef, - POINTER(SecIdentityRef), - ] - Security.SecIdentityCreateWithCertificate.restype = OSStatus - - Security.SecKeychainCreate.argtypes = [ - c_char_p, - c_uint32, - c_void_p, - Boolean, - c_void_p, - POINTER(SecKeychainRef), - ] - Security.SecKeychainCreate.restype = OSStatus - - Security.SecKeychainDelete.argtypes = [SecKeychainRef] - Security.SecKeychainDelete.restype = OSStatus - - Security.SecPKCS12Import.argtypes = [ - CFDataRef, - CFDictionaryRef, - POINTER(CFArrayRef), - ] - Security.SecPKCS12Import.restype = OSStatus - - SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t)) - SSLWriteFunc = CFUNCTYPE( - OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t) - ) - - Security.SSLSetIOFuncs.argtypes = [SSLContextRef, SSLReadFunc, SSLWriteFunc] - Security.SSLSetIOFuncs.restype = OSStatus - - Security.SSLSetPeerID.argtypes = [SSLContextRef, c_char_p, c_size_t] - Security.SSLSetPeerID.restype = OSStatus - - Security.SSLSetCertificate.argtypes = [SSLContextRef, CFArrayRef] - Security.SSLSetCertificate.restype = OSStatus - - Security.SSLSetCertificateAuthorities.argtypes = [SSLContextRef, CFTypeRef, Boolean] - Security.SSLSetCertificateAuthorities.restype = OSStatus - - Security.SSLSetConnection.argtypes = [SSLContextRef, SSLConnectionRef] - Security.SSLSetConnection.restype = OSStatus - - Security.SSLSetPeerDomainName.argtypes = [SSLContextRef, c_char_p, c_size_t] - Security.SSLSetPeerDomainName.restype = OSStatus - - Security.SSLHandshake.argtypes = [SSLContextRef] - Security.SSLHandshake.restype = OSStatus - - Security.SSLRead.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)] - Security.SSLRead.restype = OSStatus - - Security.SSLWrite.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)] - Security.SSLWrite.restype = OSStatus - - Security.SSLClose.argtypes = [SSLContextRef] - Security.SSLClose.restype = OSStatus - - Security.SSLGetNumberSupportedCiphers.argtypes = [SSLContextRef, POINTER(c_size_t)] - Security.SSLGetNumberSupportedCiphers.restype = OSStatus - - Security.SSLGetSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t), - ] - Security.SSLGetSupportedCiphers.restype = OSStatus - - Security.SSLSetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - c_size_t, - ] - Security.SSLSetEnabledCiphers.restype = OSStatus - - Security.SSLGetNumberEnabledCiphers.argtype = [SSLContextRef, POINTER(c_size_t)] - Security.SSLGetNumberEnabledCiphers.restype = OSStatus - - Security.SSLGetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t), - ] - Security.SSLGetEnabledCiphers.restype = OSStatus - - Security.SSLGetNegotiatedCipher.argtypes = [SSLContextRef, POINTER(SSLCipherSuite)] - Security.SSLGetNegotiatedCipher.restype = OSStatus - - Security.SSLGetNegotiatedProtocolVersion.argtypes = [ - SSLContextRef, - POINTER(SSLProtocol), - ] - Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus - - Security.SSLCopyPeerTrust.argtypes = [SSLContextRef, POINTER(SecTrustRef)] - Security.SSLCopyPeerTrust.restype = OSStatus - - Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argstypes = [SecTrustRef, Boolean] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [SecTrustRef, POINTER(SecTrustResultType)] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustGetCertificateCount.argtypes = [SecTrustRef] - Security.SecTrustGetCertificateCount.restype = CFIndex - - Security.SecTrustGetCertificateAtIndex.argtypes = [SecTrustRef, CFIndex] - Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef - - Security.SSLCreateContext.argtypes = [ - CFAllocatorRef, - SSLProtocolSide, - SSLConnectionType, - ] - Security.SSLCreateContext.restype = SSLContextRef - - Security.SSLSetSessionOption.argtypes = [SSLContextRef, SSLSessionOption, Boolean] - Security.SSLSetSessionOption.restype = OSStatus - - Security.SSLSetProtocolVersionMin.argtypes = [SSLContextRef, SSLProtocol] - Security.SSLSetProtocolVersionMin.restype = OSStatus - - Security.SSLSetProtocolVersionMax.argtypes = [SSLContextRef, SSLProtocol] - Security.SSLSetProtocolVersionMax.restype = OSStatus - - try: - Security.SSLSetALPNProtocols.argtypes = [SSLContextRef, CFArrayRef] - Security.SSLSetALPNProtocols.restype = OSStatus - except AttributeError: - # Supported only in 10.12+ - pass - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SSLReadFunc = SSLReadFunc - Security.SSLWriteFunc = SSLWriteFunc - Security.SSLContextRef = SSLContextRef - Security.SSLProtocol = SSLProtocol - Security.SSLCipherSuite = SSLCipherSuite - Security.SecIdentityRef = SecIdentityRef - Security.SecKeychainRef = SecKeychainRef - Security.SecTrustRef = SecTrustRef - Security.SecTrustResultType = SecTrustResultType - Security.SecExternalFormat = SecExternalFormat - Security.OSStatus = OSStatus - - Security.kSecImportExportPassphrase = CFStringRef.in_dll( - Security, "kSecImportExportPassphrase" - ) - Security.kSecImportItemIdentity = CFStringRef.in_dll( - Security, "kSecImportItemIdentity" - ) - - # CoreFoundation time! - CoreFoundation.CFRetain.argtypes = [CFTypeRef] - CoreFoundation.CFRetain.restype = CFTypeRef - - CoreFoundation.CFRelease.argtypes = [CFTypeRef] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding, - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding, - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [CFDataRef] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFDictionaryCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - POINTER(CFTypeRef), - CFIndex, - CFDictionaryKeyCallBacks, - CFDictionaryValueCallBacks, - ] - CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef - - CoreFoundation.CFDictionaryGetValue.argtypes = [CFDictionaryRef, CFTypeRef] - CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( - CoreFoundation, "kCFAllocatorDefault" - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeArrayCallBacks" - ) - CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeDictionaryKeyCallBacks" - ) - CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeDictionaryValueCallBacks" - ) - - CoreFoundation.CFTypeRef = CFTypeRef - CoreFoundation.CFArrayRef = CFArrayRef - CoreFoundation.CFStringRef = CFStringRef - CoreFoundation.CFDictionaryRef = CFDictionaryRef - -except (AttributeError): - raise ImportError("Error initializing ctypes") - - -class CFConst(object): - """ - A class object that acts as essentially a namespace for CoreFoundation - constants. - """ - - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - -class SecurityConst(object): - """ - A class object that acts as essentially a namespace for Security constants. - """ - - kSSLSessionOptionBreakOnServerAuth = 0 - - kSSLProtocol2 = 1 - kSSLProtocol3 = 2 - kTLSProtocol1 = 4 - kTLSProtocol11 = 7 - kTLSProtocol12 = 8 - # SecureTransport does not support TLS 1.3 even if there's a constant for it - kTLSProtocol13 = 10 - kTLSProtocolMaxSupported = 999 - - kSSLClientSide = 1 - kSSLStreamType = 0 - - kSecFormatPEMSequence = 10 - - kSecTrustResultInvalid = 0 - kSecTrustResultProceed = 1 - # This gap is present on purpose: this was kSecTrustResultConfirm, which - # is deprecated. - kSecTrustResultDeny = 3 - kSecTrustResultUnspecified = 4 - kSecTrustResultRecoverableTrustFailure = 5 - kSecTrustResultFatalTrustFailure = 6 - kSecTrustResultOtherError = 7 - - errSSLProtocol = -9800 - errSSLWouldBlock = -9803 - errSSLClosedGraceful = -9805 - errSSLClosedNoNotify = -9816 - errSSLClosedAbort = -9806 - - errSSLXCertChainInvalid = -9807 - errSSLCrypto = -9809 - errSSLInternal = -9810 - errSSLCertExpired = -9814 - errSSLCertNotYetValid = -9815 - errSSLUnknownRootCert = -9812 - errSSLNoRootCert = -9813 - errSSLHostNameMismatch = -9843 - errSSLPeerHandshakeFail = -9824 - errSSLPeerUserCancelled = -9839 - errSSLWeakPeerEphemeralDHKey = -9850 - errSSLServerAuthCompleted = -9841 - errSSLRecordOverflow = -9847 - - errSecVerifyFailed = -67808 - errSecNoTrustSettings = -25263 - errSecItemNotFound = -25300 - errSecInvalidTrustSettings = -25262 - - # Cipher suites. We only pick the ones our default cipher string allows. - # Source: https://developer.apple.com/documentation/security/1550981-ssl_cipher_suite_values - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA8 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B - TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 - TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D - TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C - TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D - TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C - TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F - TLS_AES_128_GCM_SHA256 = 0x1301 - TLS_AES_256_GCM_SHA384 = 0x1302 - TLS_AES_128_CCM_8_SHA256 = 0x1305 - TLS_AES_128_CCM_SHA256 = 0x1304 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py deleted file mode 100644 index fa0b245..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +++ /dev/null @@ -1,397 +0,0 @@ -""" -Low-level helpers for the SecureTransport bindings. - -These are Python functions that are not directly related to the high-level APIs -but are necessary to get them to work. They include a whole bunch of low-level -CoreFoundation messing about and memory management. The concerns in this module -are almost entirely about trying to avoid memory leaks and providing -appropriate and useful assistance to the higher-level code. -""" -import base64 -import ctypes -import itertools -import os -import re -import ssl -import struct -import tempfile - -from .bindings import CFConst, CoreFoundation, Security - -# This regular expression is used to grab PEM data out of a PEM bundle. -_PEM_CERTS_RE = re.compile( - b"-----BEGIN CERTIFICATE-----\n(.*?)\n-----END CERTIFICATE-----", re.DOTALL -) - - -def _cf_data_from_bytes(bytestring): - """ - Given a bytestring, create a CFData object from it. This CFData object must - be CFReleased by the caller. - """ - return CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, bytestring, len(bytestring) - ) - - -def _cf_dictionary_from_tuples(tuples): - """ - Given a list of Python tuples, create an associated CFDictionary. - """ - dictionary_size = len(tuples) - - # We need to get the dictionary keys and values out in the same order. - keys = (t[0] for t in tuples) - values = (t[1] for t in tuples) - cf_keys = (CoreFoundation.CFTypeRef * dictionary_size)(*keys) - cf_values = (CoreFoundation.CFTypeRef * dictionary_size)(*values) - - return CoreFoundation.CFDictionaryCreate( - CoreFoundation.kCFAllocatorDefault, - cf_keys, - cf_values, - dictionary_size, - CoreFoundation.kCFTypeDictionaryKeyCallBacks, - CoreFoundation.kCFTypeDictionaryValueCallBacks, - ) - - -def _cfstr(py_bstr): - """ - Given a Python binary data, create a CFString. - The string must be CFReleased by the caller. - """ - c_str = ctypes.c_char_p(py_bstr) - cf_str = CoreFoundation.CFStringCreateWithCString( - CoreFoundation.kCFAllocatorDefault, - c_str, - CFConst.kCFStringEncodingUTF8, - ) - return cf_str - - -def _create_cfstring_array(lst): - """ - Given a list of Python binary data, create an associated CFMutableArray. - The array must be CFReleased by the caller. - - Raises an ssl.SSLError on failure. - """ - cf_arr = None - try: - cf_arr = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cf_arr: - raise MemoryError("Unable to allocate memory!") - for item in lst: - cf_str = _cfstr(item) - if not cf_str: - raise MemoryError("Unable to allocate memory!") - try: - CoreFoundation.CFArrayAppendValue(cf_arr, cf_str) - finally: - CoreFoundation.CFRelease(cf_str) - except BaseException as e: - if cf_arr: - CoreFoundation.CFRelease(cf_arr) - raise ssl.SSLError("Unable to allocate array: %s" % (e,)) - return cf_arr - - -def _cf_string_to_unicode(value): - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - - Yes, it annoys me quite a lot that this function is this complex. - """ - value_as_void_p = ctypes.cast(value, ctypes.POINTER(ctypes.c_void_p)) - - string = CoreFoundation.CFStringGetCStringPtr( - value_as_void_p, CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - value_as_void_p, buffer, 1024, CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - string = buffer.value - if string is not None: - string = string.decode("utf-8") - return string - - -def _assert_no_error(error, exception_class=None): - """ - Checks the return code and throws an exception if there is an error to - report - """ - if error == 0: - return - - cf_error_string = Security.SecCopyErrorMessageString(error, None) - output = _cf_string_to_unicode(cf_error_string) - CoreFoundation.CFRelease(cf_error_string) - - if output is None or output == u"": - output = u"OSStatus %s" % error - - if exception_class is None: - exception_class = ssl.SSLError - - raise exception_class(output) - - -def _cert_array_from_pem(pem_bundle): - """ - Given a bundle of certs in PEM format, turns them into a CFArray of certs - that can be used to validate a cert chain. - """ - # Normalize the PEM bundle's line endings. - pem_bundle = pem_bundle.replace(b"\r\n", b"\n") - - der_certs = [ - base64.b64decode(match.group(1)) for match in _PEM_CERTS_RE.finditer(pem_bundle) - ] - if not der_certs: - raise ssl.SSLError("No root certificates specified") - - cert_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cert_array: - raise ssl.SSLError("Unable to allocate memory!") - - try: - for der_bytes in der_certs: - certdata = _cf_data_from_bytes(der_bytes) - if not certdata: - raise ssl.SSLError("Unable to allocate memory!") - cert = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, certdata - ) - CoreFoundation.CFRelease(certdata) - if not cert: - raise ssl.SSLError("Unable to build cert object!") - - CoreFoundation.CFArrayAppendValue(cert_array, cert) - CoreFoundation.CFRelease(cert) - except Exception: - # We need to free the array before the exception bubbles further. - # We only want to do that if an error occurs: otherwise, the caller - # should free. - CoreFoundation.CFRelease(cert_array) - raise - - return cert_array - - -def _is_cert(item): - """ - Returns True if a given CFTypeRef is a certificate. - """ - expected = Security.SecCertificateGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _is_identity(item): - """ - Returns True if a given CFTypeRef is an identity. - """ - expected = Security.SecIdentityGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _temporary_keychain(): - """ - This function creates a temporary Mac keychain that we can use to work with - credentials. This keychain uses a one-time password and a temporary file to - store the data. We expect to have one keychain per socket. The returned - SecKeychainRef must be freed by the caller, including calling - SecKeychainDelete. - - Returns a tuple of the SecKeychainRef and the path to the temporary - directory that contains it. - """ - # Unfortunately, SecKeychainCreate requires a path to a keychain. This - # means we cannot use mkstemp to use a generic temporary file. Instead, - # we're going to create a temporary directory and a filename to use there. - # This filename will be 8 random bytes expanded into base64. We also need - # some random bytes to password-protect the keychain we're creating, so we - # ask for 40 random bytes. - random_bytes = os.urandom(40) - filename = base64.b16encode(random_bytes[:8]).decode("utf-8") - password = base64.b16encode(random_bytes[8:]) # Must be valid UTF-8 - tempdirectory = tempfile.mkdtemp() - - keychain_path = os.path.join(tempdirectory, filename).encode("utf-8") - - # We now want to create the keychain itself. - keychain = Security.SecKeychainRef() - status = Security.SecKeychainCreate( - keychain_path, len(password), password, False, None, ctypes.byref(keychain) - ) - _assert_no_error(status) - - # Having created the keychain, we want to pass it off to the caller. - return keychain, tempdirectory - - -def _load_items_from_file(keychain, path): - """ - Given a single file, loads all the trust objects from it into arrays and - the keychain. - Returns a tuple of lists: the first list is a list of identities, the - second a list of certs. - """ - certificates = [] - identities = [] - result_array = None - - with open(path, "rb") as f: - raw_filedata = f.read() - - try: - filedata = CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, raw_filedata, len(raw_filedata) - ) - result_array = CoreFoundation.CFArrayRef() - result = Security.SecItemImport( - filedata, # cert data - None, # Filename, leaving it out for now - None, # What the type of the file is, we don't care - None, # what's in the file, we don't care - 0, # import flags - None, # key params, can include passphrase in the future - keychain, # The keychain to insert into - ctypes.byref(result_array), # Results - ) - _assert_no_error(result) - - # A CFArray is not very useful to us as an intermediary - # representation, so we are going to extract the objects we want - # and then free the array. We don't need to keep hold of keys: the - # keychain already has them! - result_count = CoreFoundation.CFArrayGetCount(result_array) - for index in range(result_count): - item = CoreFoundation.CFArrayGetValueAtIndex(result_array, index) - item = ctypes.cast(item, CoreFoundation.CFTypeRef) - - if _is_cert(item): - CoreFoundation.CFRetain(item) - certificates.append(item) - elif _is_identity(item): - CoreFoundation.CFRetain(item) - identities.append(item) - finally: - if result_array: - CoreFoundation.CFRelease(result_array) - - CoreFoundation.CFRelease(filedata) - - return (identities, certificates) - - -def _load_client_cert_chain(keychain, *paths): - """ - Load certificates and maybe keys from a number of files. Has the end goal - of returning a CFArray containing one SecIdentityRef, and then zero or more - SecCertificateRef objects, suitable for use as a client certificate trust - chain. - """ - # Ok, the strategy. - # - # This relies on knowing that macOS will not give you a SecIdentityRef - # unless you have imported a key into a keychain. This is a somewhat - # artificial limitation of macOS (for example, it doesn't necessarily - # affect iOS), but there is nothing inside Security.framework that lets you - # get a SecIdentityRef without having a key in a keychain. - # - # So the policy here is we take all the files and iterate them in order. - # Each one will use SecItemImport to have one or more objects loaded from - # it. We will also point at a keychain that macOS can use to work with the - # private key. - # - # Once we have all the objects, we'll check what we actually have. If we - # already have a SecIdentityRef in hand, fab: we'll use that. Otherwise, - # we'll take the first certificate (which we assume to be our leaf) and - # ask the keychain to give us a SecIdentityRef with that cert's associated - # key. - # - # We'll then return a CFArray containing the trust chain: one - # SecIdentityRef and then zero-or-more SecCertificateRef objects. The - # responsibility for freeing this CFArray will be with the caller. This - # CFArray must remain alive for the entire connection, so in practice it - # will be stored with a single SSLSocket, along with the reference to the - # keychain. - certificates = [] - identities = [] - - # Filter out bad paths. - paths = (path for path in paths if path) - - try: - for file_path in paths: - new_identities, new_certs = _load_items_from_file(keychain, file_path) - identities.extend(new_identities) - certificates.extend(new_certs) - - # Ok, we have everything. The question is: do we have an identity? If - # not, we want to grab one from the first cert we have. - if not identities: - new_identity = Security.SecIdentityRef() - status = Security.SecIdentityCreateWithCertificate( - keychain, certificates[0], ctypes.byref(new_identity) - ) - _assert_no_error(status) - identities.append(new_identity) - - # We now want to release the original certificate, as we no longer - # need it. - CoreFoundation.CFRelease(certificates.pop(0)) - - # We now need to build a new CFArray that holds the trust chain. - trust_chain = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - for item in itertools.chain(identities, certificates): - # ArrayAppendValue does a CFRetain on the item. That's fine, - # because the finally block will release our other refs to them. - CoreFoundation.CFArrayAppendValue(trust_chain, item) - - return trust_chain - finally: - for obj in itertools.chain(identities, certificates): - CoreFoundation.CFRelease(obj) - - -TLS_PROTOCOL_VERSIONS = { - "SSLv2": (0, 2), - "SSLv3": (3, 0), - "TLSv1": (3, 1), - "TLSv1.1": (3, 2), - "TLSv1.2": (3, 3), -} - - -def _build_tls_unknown_ca_alert(version): - """ - Builds a TLS alert record for an unknown CA. - """ - ver_maj, ver_min = TLS_PROTOCOL_VERSIONS[version] - severity_fatal = 0x02 - description_unknown_ca = 0x30 - msg = struct.pack(">BB", severity_fatal, description_unknown_ca) - msg_len = len(msg) - record_type_alert = 0x15 - record = struct.pack(">BBBH", record_type_alert, ver_maj, ver_min, msg_len) + msg - return record diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py deleted file mode 100644 index 1717ee2..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py +++ /dev/null @@ -1,314 +0,0 @@ -""" -This module provides a pool manager that uses Google App Engine's -`URLFetch Service `_. - -Example usage:: - - from pip._vendor.urllib3 import PoolManager - from pip._vendor.urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox - - if is_appengine_sandbox(): - # AppEngineManager uses AppEngine's URLFetch API behind the scenes - http = AppEngineManager() - else: - # PoolManager uses a socket-level API behind the scenes - http = PoolManager() - - r = http.request('GET', 'https://google.com/') - -There are `limitations `_ to the URLFetch service and it may not be -the best choice for your application. There are three options for using -urllib3 on Google App Engine: - -1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is - cost-effective in many circumstances as long as your usage is within the - limitations. -2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets. - Sockets also have `limitations and restrictions - `_ and have a lower free quota than URLFetch. - To use sockets, be sure to specify the following in your ``app.yaml``:: - - env_variables: - GAE_USE_SOCKETS_HTTPLIB : 'true' - -3. If you are using `App Engine Flexible -`_, you can use the standard -:class:`PoolManager` without any configuration or special environment variables. -""" - -from __future__ import absolute_import - -import io -import logging -import warnings - -from ..exceptions import ( - HTTPError, - HTTPWarning, - MaxRetryError, - ProtocolError, - SSLError, - TimeoutError, -) -from ..packages.six.moves.urllib.parse import urljoin -from ..request import RequestMethods -from ..response import HTTPResponse -from ..util.retry import Retry -from ..util.timeout import Timeout -from . import _appengine_environ - -try: - from google.appengine.api import urlfetch -except ImportError: - urlfetch = None - - -log = logging.getLogger(__name__) - - -class AppEnginePlatformWarning(HTTPWarning): - pass - - -class AppEnginePlatformError(HTTPError): - pass - - -class AppEngineManager(RequestMethods): - """ - Connection manager for Google App Engine sandbox applications. - - This manager uses the URLFetch service directly instead of using the - emulated httplib, and is subject to URLFetch limitations as described in - the App Engine documentation `here - `_. - - Notably it will raise an :class:`AppEnginePlatformError` if: - * URLFetch is not available. - * If you attempt to use this on App Engine Flexible, as full socket - support is available. - * If a request size is more than 10 megabytes. - * If a response size is more than 32 megabytes. - * If you use an unsupported request method such as OPTIONS. - - Beyond those cases, it will raise normal urllib3 errors. - """ - - def __init__( - self, - headers=None, - retries=None, - validate_certificate=True, - urlfetch_retries=True, - ): - if not urlfetch: - raise AppEnginePlatformError( - "URLFetch is not available in this environment." - ) - - warnings.warn( - "urllib3 is using URLFetch on Google App Engine sandbox instead " - "of sockets. To use sockets directly instead of URLFetch see " - "https://urllib3.readthedocs.io/en/1.26.x/reference/urllib3.contrib.html.", - AppEnginePlatformWarning, - ) - - RequestMethods.__init__(self, headers) - self.validate_certificate = validate_certificate - self.urlfetch_retries = urlfetch_retries - - self.retries = retries or Retry.DEFAULT - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - # Return False to re-raise any potential exceptions - return False - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=None, - redirect=True, - timeout=Timeout.DEFAULT_TIMEOUT, - **response_kw - ): - - retries = self._get_retries(retries, redirect) - - try: - follow_redirects = redirect and retries.redirect != 0 and retries.total - response = urlfetch.fetch( - url, - payload=body, - method=method, - headers=headers or {}, - allow_truncated=False, - follow_redirects=self.urlfetch_retries and follow_redirects, - deadline=self._get_absolute_timeout(timeout), - validate_certificate=self.validate_certificate, - ) - except urlfetch.DeadlineExceededError as e: - raise TimeoutError(self, e) - - except urlfetch.InvalidURLError as e: - if "too large" in str(e): - raise AppEnginePlatformError( - "URLFetch request too large, URLFetch only " - "supports requests up to 10mb in size.", - e, - ) - raise ProtocolError(e) - - except urlfetch.DownloadError as e: - if "Too many redirects" in str(e): - raise MaxRetryError(self, url, reason=e) - raise ProtocolError(e) - - except urlfetch.ResponseTooLargeError as e: - raise AppEnginePlatformError( - "URLFetch response too large, URLFetch only supports" - "responses up to 32mb in size.", - e, - ) - - except urlfetch.SSLCertificateError as e: - raise SSLError(e) - - except urlfetch.InvalidMethodError as e: - raise AppEnginePlatformError( - "URLFetch does not support method: %s" % method, e - ) - - http_response = self._urlfetch_response_to_http_response( - response, retries=retries, **response_kw - ) - - # Handle redirect? - redirect_location = redirect and http_response.get_redirect_location() - if redirect_location: - # Check for redirect response - if self.urlfetch_retries and retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - else: - if http_response.status == 303: - method = "GET" - - try: - retries = retries.increment( - method, url, response=http_response, _pool=self - ) - except MaxRetryError: - if retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - return http_response - - retries.sleep_for_retry(http_response) - log.debug("Redirecting %s -> %s", url, redirect_location) - redirect_url = urljoin(url, redirect_location) - return self.urlopen( - method, - redirect_url, - body, - headers, - retries=retries, - redirect=redirect, - timeout=timeout, - **response_kw - ) - - # Check if we should retry the HTTP response. - has_retry_after = bool(http_response.headers.get("Retry-After")) - if retries.is_retry(method, http_response.status, has_retry_after): - retries = retries.increment(method, url, response=http_response, _pool=self) - log.debug("Retry: %s", url) - retries.sleep(http_response) - return self.urlopen( - method, - url, - body=body, - headers=headers, - retries=retries, - redirect=redirect, - timeout=timeout, - **response_kw - ) - - return http_response - - def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw): - - if is_prod_appengine(): - # Production GAE handles deflate encoding automatically, but does - # not remove the encoding header. - content_encoding = urlfetch_resp.headers.get("content-encoding") - - if content_encoding == "deflate": - del urlfetch_resp.headers["content-encoding"] - - transfer_encoding = urlfetch_resp.headers.get("transfer-encoding") - # We have a full response's content, - # so let's make sure we don't report ourselves as chunked data. - if transfer_encoding == "chunked": - encodings = transfer_encoding.split(",") - encodings.remove("chunked") - urlfetch_resp.headers["transfer-encoding"] = ",".join(encodings) - - original_response = HTTPResponse( - # In order for decoding to work, we must present the content as - # a file-like object. - body=io.BytesIO(urlfetch_resp.content), - msg=urlfetch_resp.header_msg, - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - **response_kw - ) - - return HTTPResponse( - body=io.BytesIO(urlfetch_resp.content), - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - original_response=original_response, - **response_kw - ) - - def _get_absolute_timeout(self, timeout): - if timeout is Timeout.DEFAULT_TIMEOUT: - return None # Defer to URLFetch's default. - if isinstance(timeout, Timeout): - if timeout._read is not None or timeout._connect is not None: - warnings.warn( - "URLFetch does not support granular timeout settings, " - "reverting to total or default URLFetch timeout.", - AppEnginePlatformWarning, - ) - return timeout.total - return timeout - - def _get_retries(self, retries, redirect): - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if retries.connect or retries.read or retries.redirect: - warnings.warn( - "URLFetch only supports total retries and does not " - "recognize connect, read, or redirect retry parameters.", - AppEnginePlatformWarning, - ) - - return retries - - -# Alias methods from _appengine_environ to maintain public API interface. - -is_appengine = _appengine_environ.is_appengine -is_appengine_sandbox = _appengine_environ.is_appengine_sandbox -is_local_appengine = _appengine_environ.is_local_appengine -is_prod_appengine = _appengine_environ.is_prod_appengine -is_prod_appengine_mvms = _appengine_environ.is_prod_appengine_mvms diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py deleted file mode 100644 index 4716657..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,130 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" -from __future__ import absolute_import - -import warnings -from logging import getLogger - -from ntlm import ntlm - -from .. import HTTPSConnectionPool -from ..packages.six.moves.http_client import HTTPSConnection - -warnings.warn( - "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed " - "in urllib3 v2.0 release, urllib3 is not able to support it properly due " - "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. " - "If you are a user of this module please comment in the mentioned issue.", - DeprecationWarning, -) - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = "https" - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split("\\", 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug( - "Starting NTLM HTTPS connection no. %d: https://%s%s", - self.num_connections, - self.host, - self.authurl, - ) - - headers = {"Connection": "Keep-Alive"} - req_header = "Authorization" - resp_header = "www-authenticate" - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = "NTLM %s" % ntlm.create_NTLM_NEGOTIATE_MESSAGE( - self.rawuser - ) - log.debug("Request headers: %s", headers) - conn.request("GET", self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.headers) - log.debug("Response status: %s %s", res.status, res.reason) - log.debug("Response headers: %s", reshdr) - log.debug("Response data: %s [...]", res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(", ") - auth_header_value = None - for s in auth_header_values: - if s[:5] == "NTLM ": - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception( - "Unexpected %s response header: %s" % (resp_header, reshdr[resp_header]) - ) - - # Send authentication message - ServerChallenge, NegotiateFlags = ntlm.parse_NTLM_CHALLENGE_MESSAGE( - auth_header_value - ) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE( - ServerChallenge, self.user, self.domain, self.pw, NegotiateFlags - ) - headers[req_header] = "NTLM %s" % auth_msg - log.debug("Request headers: %s", headers) - conn.request("GET", self.authurl, None, headers) - res = conn.getresponse() - log.debug("Response status: %s %s", res.status, res.reason) - log.debug("Response headers: %s", dict(res.headers)) - log.debug("Response data: %s [...]", res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception("Server rejected request: wrong username or password") - raise Exception("Wrong server response: %s %s" % (res.status, res.reason)) - - res.fp = None - log.debug("Connection established") - return conn - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=3, - redirect=True, - assert_same_host=True, - ): - if headers is None: - headers = {} - headers["Connection"] = "Keep-Alive" - return super(NTLMConnectionPool, self).urlopen( - method, url, body, headers, retries, redirect, assert_same_host - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py deleted file mode 100644 index 19e4aa9..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,518 +0,0 @@ -""" -TLS with SNI_-support for Python 2. Follow these instructions if you would -like to verify TLS certificates in Python 2. Note, the default libraries do -*not* do certificate checking; you need to do additional work to validate -certificates yourself. - -This needs the following packages installed: - -* `pyOpenSSL`_ (tested with 16.0.0) -* `cryptography`_ (minimum 1.3.4, from pyopenssl) -* `idna`_ (minimum 2.0, from cryptography) - -However, pyopenssl depends on cryptography, which depends on idna, so while we -use all three directly here we end up having relatively few packages required. - -You can install them with the following command: - -.. code-block:: bash - - $ python -m pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this: - -.. code-block:: python - - try: - import pip._vendor.urllib3.contrib.pyopenssl as pyopenssl - pyopenssl.inject_into_urllib3() - except ImportError: - pass - -Now you can use :mod:`urllib3` as you normally would, and it will support SNI -when the required modules are installed. - -Activating this module also has the positive side effect of disabling SSL/TLS -compression in Python 2 (see `CRIME attack`_). - -.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication -.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) -.. _pyopenssl: https://www.pyopenssl.org -.. _cryptography: https://cryptography.io -.. _idna: https://github.com/kjd/idna -""" -from __future__ import absolute_import - -import OpenSSL.crypto -import OpenSSL.SSL -from cryptography import x509 -from cryptography.hazmat.backends.openssl import backend as openssl_backend - -try: - from cryptography.x509 import UnsupportedExtension -except ImportError: - # UnsupportedExtension is gone in cryptography >= 2.1.0 - class UnsupportedExtension(Exception): - pass - - -from io import BytesIO -from socket import error as SocketError -from socket import timeout - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -import logging -import ssl -import sys -import warnings - -from .. import util -from ..packages import six -from ..util.ssl_ import PROTOCOL_TLS_CLIENT - -warnings.warn( - "'urllib3.contrib.pyopenssl' module is deprecated and will be removed " - "in a future release of urllib3 2.x. Read more in this issue: " - "https://github.com/urllib3/urllib3/issues/2680", - category=DeprecationWarning, - stacklevel=2, -) - -__all__ = ["inject_into_urllib3", "extract_from_urllib3"] - -# SNI always works. -HAS_SNI = True - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions = { - util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD, - PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD, - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, "PROTOCOL_SSLv3") and hasattr(OpenSSL.SSL, "SSLv3_METHOD"): - _openssl_versions[ssl.PROTOCOL_SSLv3] = OpenSSL.SSL.SSLv3_METHOD - -if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER - + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = dict((v, k) for k, v in _stdlib_to_openssl_verify.items()) - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3(): - "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support." - - _validate_dependencies_met() - - util.SSLContext = PyOpenSSLContext - util.ssl_.SSLContext = PyOpenSSLContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3(): - "Undo monkey-patching by :func:`inject_into_urllib3`." - - util.SSLContext = orig_util_SSLContext - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met(): - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError( - "'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer." - ) - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError( - "'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer." - ) - - -def _dnsname_to_stdlib(name): - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - - If the name cannot be idna-encoded then we return None signalling that - the name given should be skipped. - """ - - def idna_encode(name): - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - from pip._vendor import idna - - try: - for prefix in [u"*.", u"."]: - if name.startswith(prefix): - name = name[len(prefix) :] - return prefix.encode("ascii") + idna.encode(name) - return idna.encode(name) - except idna.core.IDNAError: - return None - - # Don't send IPv6 addresses through the IDNA encoder. - if ":" in name: - return name - - name = idna_encode(name) - if name is None: - return None - elif sys.version_info >= (3, 0): - name = name.decode("utf-8") - return name - - -def get_subj_alt_name(peer_cert): - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - # Pass the cert to cryptography, which has much better APIs for this. - if hasattr(peer_cert, "to_cryptography"): - cert = peer_cert.to_cryptography() - else: - der = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, peer_cert) - cert = x509.load_der_x509_certificate(der, openssl_backend) - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except ( - x509.DuplicateExtension, - UnsupportedExtension, - x509.UnsupportedGeneralNameType, - UnicodeError, - ) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - # We also want to skip over names which cannot be idna encoded. - names = [ - ("DNS", name) - for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName)) - if name is not None - ] - names.extend( - ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket(object): - """API-compatibility wrapper for Python OpenSSL's Connection-class. - - Note: _makefile_refs, _drop() and _reuse() are needed for the garbage - collector of pypy. - """ - - def __init__(self, connection, socket, suppress_ragged_eofs=True): - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 - self._closed = False - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args, **kwargs): - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return b"" - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b"" - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") - else: - return self.recv(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("read error: %r" % e) - else: - return data - - def recv_into(self, *args, **kwargs): - try: - return self.connection.recv_into(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return 0 - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") - else: - return self.recv_into(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("read error: %r" % e) - - def settimeout(self, timeout): - return self.socket.settimeout(timeout) - - def _send_until_done(self, data): - while True: - try: - return self.connection.send(data) - except OpenSSL.SSL.WantWriteError: - if not util.wait_for_write(self.socket, self.socket.gettimeout()): - raise timeout() - continue - except OpenSSL.SSL.SysCallError as e: - raise SocketError(str(e)) - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done( - data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE] - ) - total_sent += sent - - def shutdown(self): - # FIXME rethrow compatible exceptions should we ever use this - self.connection.shutdown() - - def close(self): - if self._makefile_refs < 1: - try: - self._closed = True - return self.connection.close() - except OpenSSL.SSL.Error: - return - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 - - if binary_form: - return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509) - - return { - "subject": ((("commonName", x509.get_subject().CN),),), - "subjectAltName": get_subj_alt_name(x509), - } - - def version(self): - return self.connection.get_protocol_version_name() - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) - -else: # Platform-specific: Python 3 - makefile = backport_makefile - -WrappedSocket.makefile = makefile - - -class PyOpenSSLContext(object): - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - - def __init__(self, protocol): - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - - @property - def options(self): - return self._options - - @options.setter - def options(self, value): - self._options = value - self._ctx.set_options(value) - - @property - def verify_mode(self): - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value): - self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback) - - def set_default_verify_paths(self): - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers): - if isinstance(ciphers, six.text_type): - ciphers = ciphers.encode("utf-8") - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - if cafile is not None: - cafile = cafile.encode("utf-8") - if capath is not None: - capath = capath.encode("utf-8") - try: - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("unable to load trusted certificates: %r" % e) - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._ctx.use_certificate_chain_file(certfile) - if password is not None: - if not isinstance(password, six.binary_type): - password = password.encode("utf-8") - self._ctx.set_passwd_cb(lambda *_: password) - self._ctx.use_privatekey_file(keyfile or certfile) - - def set_alpn_protocols(self, protocols): - protocols = [six.ensure_binary(p) for p in protocols] - return self._ctx.set_alpn_protos(protocols) - - def wrap_socket( - self, - sock, - server_side=False, - do_handshake_on_connect=True, - suppress_ragged_eofs=True, - server_hostname=None, - ): - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3 - server_hostname = server_hostname.encode("utf-8") - - if server_hostname is not None: - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(sock, sock.gettimeout()): - raise timeout("select timed out") - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("bad handshake: %r" % e) - break - - return WrappedSocket(cnx, sock) - - -def _verify_callback(cnx, x509, err_no, err_depth, return_code): - return err_no == 0 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py deleted file mode 100644 index 722ee4e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +++ /dev/null @@ -1,920 +0,0 @@ -""" -SecureTranport support for urllib3 via ctypes. - -This makes platform-native TLS available to urllib3 users on macOS without the -use of a compiler. This is an important feature because the Python Package -Index is moving to become a TLSv1.2-or-higher server, and the default OpenSSL -that ships with macOS is not capable of doing TLSv1.2. The only way to resolve -this is to give macOS users an alternative solution to the problem, and that -solution is to use SecureTransport. - -We use ctypes here because this solution must not require a compiler. That's -because pip is not allowed to require a compiler either. - -This is not intended to be a seriously long-term solution to this problem. -The hope is that PEP 543 will eventually solve this issue for us, at which -point we can retire this contrib module. But in the short term, we need to -solve the impending tire fire that is Python on Mac without this kind of -contrib module. So...here we are. - -To use this module, simply import and inject it:: - - import pip._vendor.urllib3.contrib.securetransport as securetransport - securetransport.inject_into_urllib3() - -Happy TLSing! - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - -.. code-block:: - - Copyright (c) 2015-2016 Will Bond - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - -import contextlib -import ctypes -import errno -import os.path -import shutil -import socket -import ssl -import struct -import threading -import weakref - -from .. import util -from ..packages import six -from ..util.ssl_ import PROTOCOL_TLS_CLIENT -from ._securetransport.bindings import CoreFoundation, Security, SecurityConst -from ._securetransport.low_level import ( - _assert_no_error, - _build_tls_unknown_ca_alert, - _cert_array_from_pem, - _create_cfstring_array, - _load_client_cert_chain, - _temporary_keychain, -) - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -__all__ = ["inject_into_urllib3", "extract_from_urllib3"] - -# SNI always works -HAS_SNI = True - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - -# This dictionary is used by the read callback to obtain a handle to the -# calling wrapped socket. This is a pretty silly approach, but for now it'll -# do. I feel like I should be able to smuggle a handle to the wrapped socket -# directly in the SSLConnectionRef, but for now this approach will work I -# guess. -# -# We need to lock around this structure for inserts, but we don't do it for -# reads/writes in the callbacks. The reasoning here goes as follows: -# -# 1. It is not possible to call into the callbacks before the dictionary is -# populated, so once in the callback the id must be in the dictionary. -# 2. The callbacks don't mutate the dictionary, they only read from it, and -# so cannot conflict with any of the insertions. -# -# This is good: if we had to lock in the callbacks we'd drastically slow down -# the performance of this code. -_connection_refs = weakref.WeakValueDictionary() -_connection_ref_lock = threading.Lock() - -# Limit writes to 16kB. This is OpenSSL's limit, but we'll cargo-cult it over -# for no better reason than we need *a* limit, and this one is right there. -SSL_WRITE_BLOCKSIZE = 16384 - -# This is our equivalent of util.ssl_.DEFAULT_CIPHERS, but expanded out to -# individual cipher suites. We need to do this because this is how -# SecureTransport wants them. -CIPHER_SUITES = [ - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_AES_256_GCM_SHA384, - SecurityConst.TLS_AES_128_GCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_AES_128_CCM_8_SHA256, - SecurityConst.TLS_AES_128_CCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA, -] - -# Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. -# TLSv1 to 1.2 are supported on macOS 10.8+ -_protocol_to_min_max = { - util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), - PROTOCOL_TLS_CLIENT: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), -} - -if hasattr(ssl, "PROTOCOL_SSLv2"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv2] = ( - SecurityConst.kSSLProtocol2, - SecurityConst.kSSLProtocol2, - ) -if hasattr(ssl, "PROTOCOL_SSLv3"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv3] = ( - SecurityConst.kSSLProtocol3, - SecurityConst.kSSLProtocol3, - ) -if hasattr(ssl, "PROTOCOL_TLSv1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1] = ( - SecurityConst.kTLSProtocol1, - SecurityConst.kTLSProtocol1, - ) -if hasattr(ssl, "PROTOCOL_TLSv1_1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_1] = ( - SecurityConst.kTLSProtocol11, - SecurityConst.kTLSProtocol11, - ) -if hasattr(ssl, "PROTOCOL_TLSv1_2"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_2] = ( - SecurityConst.kTLSProtocol12, - SecurityConst.kTLSProtocol12, - ) - - -def inject_into_urllib3(): - """ - Monkey-patch urllib3 with SecureTransport-backed SSL-support. - """ - util.SSLContext = SecureTransportContext - util.ssl_.SSLContext = SecureTransportContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_SECURETRANSPORT = True - util.ssl_.IS_SECURETRANSPORT = True - - -def extract_from_urllib3(): - """ - Undo monkey-patching by :func:`inject_into_urllib3`. - """ - util.SSLContext = orig_util_SSLContext - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_SECURETRANSPORT = False - util.ssl_.IS_SECURETRANSPORT = False - - -def _read_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport read callback. This is called by ST to request that data - be returned from the socket. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - requested_length = data_length_pointer[0] - - timeout = wrapped_socket.gettimeout() - error = None - read_count = 0 - - try: - while read_count < requested_length: - if timeout is None or timeout >= 0: - if not util.wait_for_read(base_socket, timeout): - raise socket.error(errno.EAGAIN, "timed out") - - remaining = requested_length - read_count - buffer = (ctypes.c_char * remaining).from_address( - data_buffer + read_count - ) - chunk_size = base_socket.recv_into(buffer, remaining) - read_count += chunk_size - if not chunk_size: - if not read_count: - return SecurityConst.errSSLClosedGraceful - break - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = read_count - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = read_count - - if read_count != requested_length: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -def _write_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport write callback. This is called by ST to request that data - actually be sent on the network. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - bytes_to_write = data_length_pointer[0] - data = ctypes.string_at(data_buffer, bytes_to_write) - - timeout = wrapped_socket.gettimeout() - error = None - sent = 0 - - try: - while sent < bytes_to_write: - if timeout is None or timeout >= 0: - if not util.wait_for_write(base_socket, timeout): - raise socket.error(errno.EAGAIN, "timed out") - chunk_sent = base_socket.send(data) - sent += chunk_sent - - # This has some needless copying here, but I'm not sure there's - # much value in optimising this data path. - data = data[chunk_sent:] - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = sent - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = sent - - if sent != bytes_to_write: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -# We need to keep these two objects references alive: if they get GC'd while -# in use then SecureTransport could attempt to call a function that is in freed -# memory. That would be...uh...bad. Yeah, that's the word. Bad. -_read_callback_pointer = Security.SSLReadFunc(_read_callback) -_write_callback_pointer = Security.SSLWriteFunc(_write_callback) - - -class WrappedSocket(object): - """ - API-compatibility wrapper for Python's OpenSSL wrapped socket object. - - Note: _makefile_refs, _drop(), and _reuse() are needed for the garbage - collector of PyPy. - """ - - def __init__(self, socket): - self.socket = socket - self.context = None - self._makefile_refs = 0 - self._closed = False - self._exception = None - self._keychain = None - self._keychain_dir = None - self._client_cert_chain = None - - # We save off the previously-configured timeout and then set it to - # zero. This is done because we use select and friends to handle the - # timeouts, but if we leave the timeout set on the lower socket then - # Python will "kindly" call select on that socket again for us. Avoid - # that by forcing the timeout to zero. - self._timeout = self.socket.gettimeout() - self.socket.settimeout(0) - - @contextlib.contextmanager - def _raise_on_error(self): - """ - A context manager that can be used to wrap calls that do I/O from - SecureTransport. If any of the I/O callbacks hit an exception, this - context manager will correctly propagate the exception after the fact. - This avoids silently swallowing those exceptions. - - It also correctly forces the socket closed. - """ - self._exception = None - - # We explicitly don't catch around this yield because in the unlikely - # event that an exception was hit in the block we don't want to swallow - # it. - yield - if self._exception is not None: - exception, self._exception = self._exception, None - self.close() - raise exception - - def _set_ciphers(self): - """ - Sets up the allowed ciphers. By default this matches the set in - util.ssl_.DEFAULT_CIPHERS, at least as supported by macOS. This is done - custom and doesn't allow changing at this time, mostly because parsing - OpenSSL cipher strings is going to be a freaking nightmare. - """ - ciphers = (Security.SSLCipherSuite * len(CIPHER_SUITES))(*CIPHER_SUITES) - result = Security.SSLSetEnabledCiphers( - self.context, ciphers, len(CIPHER_SUITES) - ) - _assert_no_error(result) - - def _set_alpn_protocols(self, protocols): - """ - Sets up the ALPN protocols on the context. - """ - if not protocols: - return - protocols_arr = _create_cfstring_array(protocols) - try: - result = Security.SSLSetALPNProtocols(self.context, protocols_arr) - _assert_no_error(result) - finally: - CoreFoundation.CFRelease(protocols_arr) - - def _custom_validate(self, verify, trust_bundle): - """ - Called when we have set custom validation. We do this in two cases: - first, when cert validation is entirely disabled; and second, when - using a custom trust DB. - Raises an SSLError if the connection is not trusted. - """ - # If we disabled cert validation, just say: cool. - if not verify: - return - - successes = ( - SecurityConst.kSecTrustResultUnspecified, - SecurityConst.kSecTrustResultProceed, - ) - try: - trust_result = self._evaluate_trust(trust_bundle) - if trust_result in successes: - return - reason = "error code: %d" % (trust_result,) - except Exception as e: - # Do not trust on error - reason = "exception: %r" % (e,) - - # SecureTransport does not send an alert nor shuts down the connection. - rec = _build_tls_unknown_ca_alert(self.version()) - self.socket.sendall(rec) - # close the connection immediately - # l_onoff = 1, activate linger - # l_linger = 0, linger for 0 seoncds - opts = struct.pack("ii", 1, 0) - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, opts) - self.close() - raise ssl.SSLError("certificate verify failed, %s" % reason) - - def _evaluate_trust(self, trust_bundle): - # We want data in memory, so load it up. - if os.path.isfile(trust_bundle): - with open(trust_bundle, "rb") as f: - trust_bundle = f.read() - - cert_array = None - trust = Security.SecTrustRef() - - try: - # Get a CFArray that contains the certs we want. - cert_array = _cert_array_from_pem(trust_bundle) - - # Ok, now the hard part. We want to get the SecTrustRef that ST has - # created for this connection, shove our CAs into it, tell ST to - # ignore everything else it knows, and then ask if it can build a - # chain. This is a buuuunch of code. - result = Security.SSLCopyPeerTrust(self.context, ctypes.byref(trust)) - _assert_no_error(result) - if not trust: - raise ssl.SSLError("Failed to copy trust reference") - - result = Security.SecTrustSetAnchorCertificates(trust, cert_array) - _assert_no_error(result) - - result = Security.SecTrustSetAnchorCertificatesOnly(trust, True) - _assert_no_error(result) - - trust_result = Security.SecTrustResultType() - result = Security.SecTrustEvaluate(trust, ctypes.byref(trust_result)) - _assert_no_error(result) - finally: - if trust: - CoreFoundation.CFRelease(trust) - - if cert_array is not None: - CoreFoundation.CFRelease(cert_array) - - return trust_result.value - - def handshake( - self, - server_hostname, - verify, - trust_bundle, - min_version, - max_version, - client_cert, - client_key, - client_key_passphrase, - alpn_protocols, - ): - """ - Actually performs the TLS handshake. This is run automatically by - wrapped socket, and shouldn't be needed in user code. - """ - # First, we do the initial bits of connection setup. We need to create - # a context, set its I/O funcs, and set the connection reference. - self.context = Security.SSLCreateContext( - None, SecurityConst.kSSLClientSide, SecurityConst.kSSLStreamType - ) - result = Security.SSLSetIOFuncs( - self.context, _read_callback_pointer, _write_callback_pointer - ) - _assert_no_error(result) - - # Here we need to compute the handle to use. We do this by taking the - # id of self modulo 2**31 - 1. If this is already in the dictionary, we - # just keep incrementing by one until we find a free space. - with _connection_ref_lock: - handle = id(self) % 2147483647 - while handle in _connection_refs: - handle = (handle + 1) % 2147483647 - _connection_refs[handle] = self - - result = Security.SSLSetConnection(self.context, handle) - _assert_no_error(result) - - # If we have a server hostname, we should set that too. - if server_hostname: - if not isinstance(server_hostname, bytes): - server_hostname = server_hostname.encode("utf-8") - - result = Security.SSLSetPeerDomainName( - self.context, server_hostname, len(server_hostname) - ) - _assert_no_error(result) - - # Setup the ciphers. - self._set_ciphers() - - # Setup the ALPN protocols. - self._set_alpn_protocols(alpn_protocols) - - # Set the minimum and maximum TLS versions. - result = Security.SSLSetProtocolVersionMin(self.context, min_version) - _assert_no_error(result) - - result = Security.SSLSetProtocolVersionMax(self.context, max_version) - _assert_no_error(result) - - # If there's a trust DB, we need to use it. We do that by telling - # SecureTransport to break on server auth. We also do that if we don't - # want to validate the certs at all: we just won't actually do any - # authing in that case. - if not verify or trust_bundle is not None: - result = Security.SSLSetSessionOption( - self.context, SecurityConst.kSSLSessionOptionBreakOnServerAuth, True - ) - _assert_no_error(result) - - # If there's a client cert, we need to use it. - if client_cert: - self._keychain, self._keychain_dir = _temporary_keychain() - self._client_cert_chain = _load_client_cert_chain( - self._keychain, client_cert, client_key - ) - result = Security.SSLSetCertificate(self.context, self._client_cert_chain) - _assert_no_error(result) - - while True: - with self._raise_on_error(): - result = Security.SSLHandshake(self.context) - - if result == SecurityConst.errSSLWouldBlock: - raise socket.timeout("handshake timed out") - elif result == SecurityConst.errSSLServerAuthCompleted: - self._custom_validate(verify, trust_bundle) - continue - else: - _assert_no_error(result) - break - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, bufsiz): - buffer = ctypes.create_string_buffer(bufsiz) - bytes_read = self.recv_into(buffer, bufsiz) - data = buffer[:bytes_read] - return data - - def recv_into(self, buffer, nbytes=None): - # Read short on EOF. - if self._closed: - return 0 - - if nbytes is None: - nbytes = len(buffer) - - buffer = (ctypes.c_char * nbytes).from_buffer(buffer) - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLRead( - self.context, buffer, nbytes, ctypes.byref(processed_bytes) - ) - - # There are some result codes that we want to treat as "not always - # errors". Specifically, those are errSSLWouldBlock, - # errSSLClosedGraceful, and errSSLClosedNoNotify. - if result == SecurityConst.errSSLWouldBlock: - # If we didn't process any bytes, then this was just a time out. - # However, we can get errSSLWouldBlock in situations when we *did* - # read some data, and in those cases we should just read "short" - # and return. - if processed_bytes.value == 0: - # Timed out, no data read. - raise socket.timeout("recv timed out") - elif result in ( - SecurityConst.errSSLClosedGraceful, - SecurityConst.errSSLClosedNoNotify, - ): - # The remote peer has closed this connection. We should do so as - # well. Note that we don't actually return here because in - # principle this could actually be fired along with return data. - # It's unlikely though. - self.close() - else: - _assert_no_error(result) - - # Ok, we read and probably succeeded. We should return whatever data - # was actually read. - return processed_bytes.value - - def settimeout(self, timeout): - self._timeout = timeout - - def gettimeout(self): - return self._timeout - - def send(self, data): - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLWrite( - self.context, data, len(data), ctypes.byref(processed_bytes) - ) - - if result == SecurityConst.errSSLWouldBlock and processed_bytes.value == 0: - # Timed out - raise socket.timeout("send timed out") - else: - _assert_no_error(result) - - # We sent, and probably succeeded. Tell them how much we sent. - return processed_bytes.value - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self.send(data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - with self._raise_on_error(): - Security.SSLClose(self.context) - - def close(self): - # TODO: should I do clean shutdown here? Do I have to? - if self._makefile_refs < 1: - self._closed = True - if self.context: - CoreFoundation.CFRelease(self.context) - self.context = None - if self._client_cert_chain: - CoreFoundation.CFRelease(self._client_cert_chain) - self._client_cert_chain = None - if self._keychain: - Security.SecKeychainDelete(self._keychain) - CoreFoundation.CFRelease(self._keychain) - shutil.rmtree(self._keychain_dir) - self._keychain = self._keychain_dir = None - return self.socket.close() - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - # Urgh, annoying. - # - # Here's how we do this: - # - # 1. Call SSLCopyPeerTrust to get hold of the trust object for this - # connection. - # 2. Call SecTrustGetCertificateAtIndex for index 0 to get the leaf. - # 3. To get the CN, call SecCertificateCopyCommonName and process that - # string so that it's of the appropriate type. - # 4. To get the SAN, we need to do something a bit more complex: - # a. Call SecCertificateCopyValues to get the data, requesting - # kSecOIDSubjectAltName. - # b. Mess about with this dictionary to try to get the SANs out. - # - # This is gross. Really gross. It's going to be a few hundred LoC extra - # just to repeat something that SecureTransport can *already do*. So my - # operating assumption at this time is that what we want to do is - # instead to just flag to urllib3 that it shouldn't do its own hostname - # validation when using SecureTransport. - if not binary_form: - raise ValueError("SecureTransport only supports dumping binary certs") - trust = Security.SecTrustRef() - certdata = None - der_bytes = None - - try: - # Grab the trust store. - result = Security.SSLCopyPeerTrust(self.context, ctypes.byref(trust)) - _assert_no_error(result) - if not trust: - # Probably we haven't done the handshake yet. No biggie. - return None - - cert_count = Security.SecTrustGetCertificateCount(trust) - if not cert_count: - # Also a case that might happen if we haven't handshaked. - # Handshook? Handshaken? - return None - - leaf = Security.SecTrustGetCertificateAtIndex(trust, 0) - assert leaf - - # Ok, now we want the DER bytes. - certdata = Security.SecCertificateCopyData(leaf) - assert certdata - - data_length = CoreFoundation.CFDataGetLength(certdata) - data_buffer = CoreFoundation.CFDataGetBytePtr(certdata) - der_bytes = ctypes.string_at(data_buffer, data_length) - finally: - if certdata: - CoreFoundation.CFRelease(certdata) - if trust: - CoreFoundation.CFRelease(trust) - - return der_bytes - - def version(self): - protocol = Security.SSLProtocol() - result = Security.SSLGetNegotiatedProtocolVersion( - self.context, ctypes.byref(protocol) - ) - _assert_no_error(result) - if protocol.value == SecurityConst.kTLSProtocol13: - raise ssl.SSLError("SecureTransport does not support TLS 1.3") - elif protocol.value == SecurityConst.kTLSProtocol12: - return "TLSv1.2" - elif protocol.value == SecurityConst.kTLSProtocol11: - return "TLSv1.1" - elif protocol.value == SecurityConst.kTLSProtocol1: - return "TLSv1" - elif protocol.value == SecurityConst.kSSLProtocol3: - return "SSLv3" - elif protocol.value == SecurityConst.kSSLProtocol2: - return "SSLv2" - else: - raise ssl.SSLError("Unknown TLS version: %r" % protocol) - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) - -else: # Platform-specific: Python 3 - - def makefile(self, mode="r", buffering=None, *args, **kwargs): - # We disable buffering with SecureTransport because it conflicts with - # the buffering that ST does internally (see issue #1153 for more). - buffering = 0 - return backport_makefile(self, mode, buffering, *args, **kwargs) - - -WrappedSocket.makefile = makefile - - -class SecureTransportContext(object): - """ - I am a wrapper class for the SecureTransport library, to translate the - interface of the standard library ``SSLContext`` object to calls into - SecureTransport. - """ - - def __init__(self, protocol): - self._min_version, self._max_version = _protocol_to_min_max[protocol] - self._options = 0 - self._verify = False - self._trust_bundle = None - self._client_cert = None - self._client_key = None - self._client_key_passphrase = None - self._alpn_protocols = None - - @property - def check_hostname(self): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - return True - - @check_hostname.setter - def check_hostname(self, value): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - pass - - @property - def options(self): - # TODO: Well, crap. - # - # So this is the bit of the code that is the most likely to cause us - # trouble. Essentially we need to enumerate all of the SSL options that - # users might want to use and try to see if we can sensibly translate - # them, or whether we should just ignore them. - return self._options - - @options.setter - def options(self, value): - # TODO: Update in line with above. - self._options = value - - @property - def verify_mode(self): - return ssl.CERT_REQUIRED if self._verify else ssl.CERT_NONE - - @verify_mode.setter - def verify_mode(self, value): - self._verify = True if value == ssl.CERT_REQUIRED else False - - def set_default_verify_paths(self): - # So, this has to do something a bit weird. Specifically, what it does - # is nothing. - # - # This means that, if we had previously had load_verify_locations - # called, this does not undo that. We need to do that because it turns - # out that the rest of the urllib3 code will attempt to load the - # default verify paths if it hasn't been told about any paths, even if - # the context itself was sometime earlier. We resolve that by just - # ignoring it. - pass - - def load_default_certs(self): - return self.set_default_verify_paths() - - def set_ciphers(self, ciphers): - # For now, we just require the default cipher string. - if ciphers != util.ssl_.DEFAULT_CIPHERS: - raise ValueError("SecureTransport doesn't support custom cipher strings") - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - # OK, we only really support cadata and cafile. - if capath is not None: - raise ValueError("SecureTransport does not support cert directories") - - # Raise if cafile does not exist. - if cafile is not None: - with open(cafile): - pass - - self._trust_bundle = cafile or cadata - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._client_cert = certfile - self._client_key = keyfile - self._client_cert_passphrase = password - - def set_alpn_protocols(self, protocols): - """ - Sets the ALPN protocols that will later be set on the context. - - Raises a NotImplementedError if ALPN is not supported. - """ - if not hasattr(Security, "SSLSetALPNProtocols"): - raise NotImplementedError( - "SecureTransport supports ALPN only in macOS 10.12+" - ) - self._alpn_protocols = [six.ensure_binary(p) for p in protocols] - - def wrap_socket( - self, - sock, - server_side=False, - do_handshake_on_connect=True, - suppress_ragged_eofs=True, - server_hostname=None, - ): - # So, what do we do here? Firstly, we assert some properties. This is a - # stripped down shim, so there is some functionality we don't support. - # See PEP 543 for the real deal. - assert not server_side - assert do_handshake_on_connect - assert suppress_ragged_eofs - - # Ok, we're good to go. Now we want to create the wrapped socket object - # and store it in the appropriate place. - wrapped_socket = WrappedSocket(sock) - - # Now we can handshake - wrapped_socket.handshake( - server_hostname, - self._verify, - self._trust_bundle, - self._min_version, - self._max_version, - self._client_cert, - self._client_key, - self._client_key_passphrase, - self._alpn_protocols, - ) - return wrapped_socket diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py deleted file mode 100644 index c326e80..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4, SOCKS4A (an extension of SOCKS4), and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4A (``proxy_url='socks4a://...``) -- SOCKS4 (``proxy_url='socks4://...``) -- SOCKS5 with remote DNS (``proxy_url='socks5h://...``) -- SOCKS5 with local DNS (``proxy_url='socks5://...``) -- Usernames and passwords for the SOCKS proxy - -.. note:: - It is recommended to use ``socks5h://`` or ``socks4a://`` schemes in - your ``proxy_url`` to ensure that DNS resolution is done from the remote - server instead of client-side when connecting to a domain name. - -SOCKS4 supports IPv4 and domain names with the SOCKS4A extension. SOCKS5 -supports IPv4, IPv6, and domain names. - -When connecting to a SOCKS4 proxy the ``username`` portion of the ``proxy_url`` -will be sent as the ``userid`` section of the SOCKS request: - -.. code-block:: python - - proxy_url="socks4a://@proxy-host" - -When connecting to a SOCKS5 proxy the ``username`` and ``password`` portion -of the ``proxy_url`` will be sent as the username/password to authenticate -with the proxy: - -.. code-block:: python - - proxy_url="socks5h://:@proxy-host" - -""" -from __future__ import absolute_import - -try: - import socks -except ImportError: - import warnings - - from ..exceptions import DependencyWarning - - warnings.warn( - ( - "SOCKS support in urllib3 requires the installation of optional " - "dependencies: specifically, PySocks. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/contrib.html#socks-proxies" - ), - DependencyWarning, - ) - raise - -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from ..connection import HTTPConnection, HTTPSConnection -from ..connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - - def __init__(self, *args, **kwargs): - self._socks_options = kwargs.pop("_socks_options") - super(SOCKSConnection, self).__init__(*args, **kwargs) - - def _new_conn(self): - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw = {} - if self.source_address: - extra_kw["source_address"] = self.source_address - - if self.socket_options: - extra_kw["socket_options"] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options["socks_version"], - proxy_addr=self._socks_options["proxy_host"], - proxy_port=self._socks_options["proxy_port"], - proxy_username=self._socks_options["username"], - proxy_password=self._socks_options["password"], - proxy_rdns=self._socks_options["rdns"], - timeout=self.timeout, - **extra_kw - ) - - except SocketTimeout: - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - else: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % error - ) - else: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - except SocketError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - - pool_classes_by_scheme = { - "http": SOCKSHTTPConnectionPool, - "https": SOCKSHTTPSConnectionPool, - } - - def __init__( - self, - proxy_url, - username=None, - password=None, - num_pools=10, - headers=None, - **connection_pool_kw - ): - parsed = parse_url(proxy_url) - - if username is None and password is None and parsed.auth is not None: - split = parsed.auth.split(":") - if len(split) == 2: - username, password = split - if parsed.scheme == "socks5": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == "socks5h": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == "socks4": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == "socks4a": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError("Unable to determine SOCKS version from %s" % proxy_url) - - self.proxy_url = proxy_url - - socks_options = { - "socks_version": socks_version, - "proxy_host": parsed.host, - "proxy_port": parsed.port, - "username": username, - "password": password, - "rdns": rdns, - } - connection_pool_kw["_socks_options"] = socks_options - - super(SOCKSProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw - ) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py deleted file mode 100644 index cba6f3f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py +++ /dev/null @@ -1,323 +0,0 @@ -from __future__ import absolute_import - -from .packages.six.moves.http_client import IncompleteRead as httplib_IncompleteRead - -# Base Exceptions - - -class HTTPError(Exception): - """Base exception used by this module.""" - - pass - - -class HTTPWarning(Warning): - """Base warning used by this module.""" - - pass - - -class PoolError(HTTPError): - """Base exception for errors caused within a pool.""" - - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - """Base exception for PoolErrors that have associated URLs.""" - - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - """Raised when SSL certificate fails in an HTTPS connection.""" - - pass - - -class ProxyError(HTTPError): - """Raised when the connection to a proxy fails.""" - - def __init__(self, message, error, *args): - super(ProxyError, self).__init__(message, error, *args) - self.original_error = error - - -class DecodeError(HTTPError): - """Raised when automatic decoding based on Content-Type fails.""" - - pass - - -class ProtocolError(HTTPError): - """Raised when something unexpected happens mid-request/response.""" - - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % (url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - """Raised when an existing pool gets a request for a foreign host.""" - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """Raised when passing an invalid state to a timeout""" - - pass - - -class TimeoutError(HTTPError): - """Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - ` and :exc:`ConnectTimeoutErrors `. - """ - - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - """Raised when a socket timeout occurs while receiving data from a server""" - - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - """Raised when a socket timeout occurs while connecting to a server""" - - pass - - -class NewConnectionError(ConnectTimeoutError, PoolError): - """Raised when we fail to establish a new connection. Usually ECONNREFUSED.""" - - pass - - -class EmptyPoolError(PoolError): - """Raised when a pool runs out of connections and no more are allowed.""" - - pass - - -class ClosedPoolError(PoolError): - """Raised when a request enters a pool after the pool has been closed.""" - - pass - - -class LocationValueError(ValueError, HTTPError): - """Raised when there is something wrong with a given URL input.""" - - pass - - -class LocationParseError(LocationValueError): - """Raised when get_host or similar fails to parse the URL input.""" - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class URLSchemeUnknown(LocationValueError): - """Raised when a URL input has an unsupported scheme.""" - - def __init__(self, scheme): - message = "Not supported URL scheme %s" % scheme - super(URLSchemeUnknown, self).__init__(message) - - self.scheme = scheme - - -class ResponseError(HTTPError): - """Used as a container for an error reason supplied in a MaxRetryError.""" - - GENERIC_ERROR = "too many error responses" - SPECIFIC_ERROR = "too many {status_code} error responses" - - -class SecurityWarning(HTTPWarning): - """Warned when performing security reducing actions""" - - pass - - -class SubjectAltNameWarning(SecurityWarning): - """Warned when connecting to a host with a certificate missing a SAN.""" - - pass - - -class InsecureRequestWarning(SecurityWarning): - """Warned when making an unverified HTTPS request.""" - - pass - - -class SystemTimeWarning(SecurityWarning): - """Warned when system time is suspected to be wrong""" - - pass - - -class InsecurePlatformWarning(SecurityWarning): - """Warned when certain TLS/SSL configuration is not available on a platform.""" - - pass - - -class SNIMissingWarning(HTTPWarning): - """Warned when making a HTTPS request without SNI available.""" - - pass - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - """Response needs to be chunked in order to read it as chunks.""" - - pass - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be :class:`http.client.HTTPResponse` like - (have an fp attribute which returns raw chunks) for read_chunked(). - """ - - pass - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of :class:`http.client.IncompleteRead` to allow int value - for ``partial`` to avoid creating large objects on streamed reads. - """ - - def __init__(self, partial, expected): - super(IncompleteRead, self).__init__(partial, expected) - - def __repr__(self): - return "IncompleteRead(%i bytes read, %i more expected)" % ( - self.partial, - self.expected, - ) - - -class InvalidChunkLength(HTTPError, httplib_IncompleteRead): - """Invalid chunk length in a chunked response.""" - - def __init__(self, response, length): - super(InvalidChunkLength, self).__init__( - response.tell(), response.length_remaining - ) - self.response = response - self.length = length - - def __repr__(self): - return "InvalidChunkLength(got length %r, %i bytes read)" % ( - self.length, - self.partial, - ) - - -class InvalidHeader(HTTPError): - """The header provided was somehow invalid.""" - - pass - - -class ProxySchemeUnknown(AssertionError, URLSchemeUnknown): - """ProxyManager does not support the supplied scheme""" - - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme): - # 'localhost' is here because our URL parser parses - # localhost:8080 -> scheme=localhost, remove if we fix this. - if scheme == "localhost": - scheme = None - if scheme is None: - message = "Proxy URL had no scheme, should start with http:// or https://" - else: - message = ( - "Proxy URL had unsupported scheme %s, should use http:// or https://" - % scheme - ) - super(ProxySchemeUnknown, self).__init__(message) - - -class ProxySchemeUnsupported(ValueError): - """Fetching HTTPS resources through HTTPS proxies is unsupported""" - - pass - - -class HeaderParsingError(HTTPError): - """Raised by assert_header_parsing, but we convert it to a log.warning statement.""" - - def __init__(self, defects, unparsed_data): - message = "%s, unparsed data: %r" % (defects or "Unknown", unparsed_data) - super(HeaderParsingError, self).__init__(message) - - -class UnrewindableBodyError(HTTPError): - """urllib3 encountered an error when trying to rewind a body""" - - pass diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py deleted file mode 100644 index 9d630f4..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py +++ /dev/null @@ -1,274 +0,0 @@ -from __future__ import absolute_import - -import email.utils -import mimetypes -import re - -from .packages import six - - -def guess_content_type(filename, default="application/octet-stream"): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param_rfc2231(name, value): - """ - Helper function to format and quote a single header parameter using the - strategy defined in RFC 2231. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows - `RFC 2388 Section 4.4 `_. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as ``bytes`` or `str``. - :ret: - An RFC-2231-formatted unicode string. - """ - if isinstance(value, six.binary_type): - value = value.decode("utf-8") - - if not any(ch in value for ch in '"\\\r\n'): - result = u'%s="%s"' % (name, value) - try: - result.encode("ascii") - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - - if six.PY2: # Python 2: - value = value.encode("utf-8") - - # encode_rfc2231 accepts an encoded string and returns an ascii-encoded - # string in Python 2 but accepts and returns unicode strings in Python 3 - value = email.utils.encode_rfc2231(value, "utf-8") - value = "%s*=%s" % (name, value) - - if six.PY2: # Python 2: - value = value.decode("utf-8") - - return value - - -_HTML5_REPLACEMENTS = { - u"\u0022": u"%22", - # Replace "\" with "\\". - u"\u005C": u"\u005C\u005C", -} - -# All control characters from 0x00 to 0x1F *except* 0x1B. -_HTML5_REPLACEMENTS.update( - { - six.unichr(cc): u"%{:02X}".format(cc) - for cc in range(0x00, 0x1F + 1) - if cc not in (0x1B,) - } -) - - -def _replace_multiple(value, needles_and_replacements): - def replacer(match): - return needles_and_replacements[match.group(0)] - - pattern = re.compile( - r"|".join([re.escape(needle) for needle in needles_and_replacements.keys()]) - ) - - result = pattern.sub(replacer, value) - - return result - - -def format_header_param_html5(name, value): - """ - Helper function to format and quote a single header parameter using the - HTML5 strategy. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows the `HTML5 Working Draft - Section 4.10.22.7`_ and matches the behavior of curl and modern browsers. - - .. _HTML5 Working Draft Section 4.10.22.7: - https://w3c.github.io/html/sec-forms.html#multipart-form-data - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as ``bytes`` or `str``. - :ret: - A unicode string, stripped of troublesome characters. - """ - if isinstance(value, six.binary_type): - value = value.decode("utf-8") - - value = _replace_multiple(value, _HTML5_REPLACEMENTS) - - return u'%s="%s"' % (name, value) - - -# For backwards-compatibility. -format_header_param = format_header_param_html5 - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. Must be unicode. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. Must be unicode. - :param headers: - An optional dict-like object of headers to initially use for the field. - :param header_formatter: - An optional callable that is used to encode and format the headers. By - default, this is :func:`format_header_param_html5`. - """ - - def __init__( - self, - name, - data, - filename=None, - headers=None, - header_formatter=format_header_param_html5, - ): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - self.header_formatter = header_formatter - - @classmethod - def from_tuples(cls, fieldname, value, header_formatter=format_header_param_html5): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls( - fieldname, data, filename=filename, header_formatter=header_formatter - ) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. By - default, this calls ``self.header_formatter``. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - - return self.header_formatter(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return u"; ".join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ["Content-Disposition", "Content-Type", "Content-Location"] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append(u"%s: %s" % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append(u"%s: %s" % (header_name, header_value)) - - lines.append(u"\r\n") - return u"\r\n".join(lines) - - def make_multipart( - self, content_disposition=None, content_type=None, content_location=None - ): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers["Content-Disposition"] = content_disposition or u"form-data" - self.headers["Content-Disposition"] += u"; ".join( - [ - u"", - self._render_parts( - ((u"name", self._name), (u"filename", self._filename)) - ), - ] - ) - self.headers["Content-Type"] = content_type - self.headers["Content-Location"] = content_location diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py deleted file mode 100644 index 36c9252..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import absolute_import - -import binascii -import codecs -import os -from io import BytesIO - -from .fields import RequestField -from .packages import six -from .packages.six import b - -writer = codecs.lookup("utf-8")[3] - - -def choose_boundary(): - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - boundary = binascii.hexlify(os.urandom(16)) - if not six.PY2: - boundary = boundary.decode("ascii") - return boundary - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`urllib3.filepost.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b("--%s\r\n" % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b"\r\n") - - body.write(b("--%s--\r\n" % (boundary))) - - content_type = str("multipart/form-data; boundary=%s" % boundary) - - return body.getvalue(), content_type diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index becded8..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc deleted file mode 100644 index 241ba58..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2aedc25..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc deleted file mode 100644 index 6707559..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc deleted file mode 100644 index ee6aaa7..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py deleted file mode 100644 index b8fb215..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.makefile -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``socket.makefile`` method for use with anything that -wants to create a "fake" socket object. -""" -import io -from socket import SocketIO - - -def backport_makefile( - self, mode="r", buffering=None, encoding=None, errors=None, newline=None -): - """ - Backport of ``socket.makefile`` from Python 3.5. - """ - if not set(mode) <= {"r", "w", "b"}: - raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._makefile_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py deleted file mode 100644 index a2f2966..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.weakref_finalize -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``weakref.finalize`` method. -""" -from __future__ import absolute_import - -import itertools -import sys -from weakref import ref - -__all__ = ["weakref_finalize"] - - -class weakref_finalize(object): - """Class for finalization of weakrefable objects - finalize(obj, func, *args, **kwargs) returns a callable finalizer - object which will be called when obj is garbage collected. The - first time the finalizer is called it evaluates func(*arg, **kwargs) - and returns the result. After this the finalizer is dead, and - calling it just returns None. - When the program exits any remaining finalizers for which the - atexit attribute is true will be run in reverse order of creation. - By default atexit is true. - """ - - # Finalizer objects don't have any state of their own. They are - # just used as keys to lookup _Info objects in the registry. This - # ensures that they cannot be part of a ref-cycle. - - __slots__ = () - _registry = {} - _shutdown = False - _index_iter = itertools.count() - _dirty = False - _registered_with_atexit = False - - class _Info(object): - __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index") - - def __init__(self, obj, func, *args, **kwargs): - if not self._registered_with_atexit: - # We may register the exit function more than once because - # of a thread race, but that is harmless - import atexit - - atexit.register(self._exitfunc) - weakref_finalize._registered_with_atexit = True - info = self._Info() - info.weakref = ref(obj, self) - info.func = func - info.args = args - info.kwargs = kwargs or None - info.atexit = True - info.index = next(self._index_iter) - self._registry[self] = info - weakref_finalize._dirty = True - - def __call__(self, _=None): - """If alive then mark as dead and return func(*args, **kwargs); - otherwise return None""" - info = self._registry.pop(self, None) - if info and not self._shutdown: - return info.func(*info.args, **(info.kwargs or {})) - - def detach(self): - """If alive then mark as dead and return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None and self._registry.pop(self, None): - return (obj, info.func, info.args, info.kwargs or {}) - - def peek(self): - """If alive then return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None: - return (obj, info.func, info.args, info.kwargs or {}) - - @property - def alive(self): - """Whether finalizer is alive""" - return self in self._registry - - @property - def atexit(self): - """Whether finalizer should be called at exit""" - info = self._registry.get(self) - return bool(info) and info.atexit - - @atexit.setter - def atexit(self, value): - info = self._registry.get(self) - if info: - info.atexit = bool(value) - - def __repr__(self): - info = self._registry.get(self) - obj = info and info.weakref() - if obj is None: - return "<%s object at %#x; dead>" % (type(self).__name__, id(self)) - else: - return "<%s object at %#x; for %r at %#x>" % ( - type(self).__name__, - id(self), - type(obj).__name__, - id(obj), - ) - - @classmethod - def _select_for_exit(cls): - # Return live finalizers marked for exit, oldest first - L = [(f, i) for (f, i) in cls._registry.items() if i.atexit] - L.sort(key=lambda item: item[1].index) - return [f for (f, i) in L] - - @classmethod - def _exitfunc(cls): - # At shutdown invoke finalizers for which atexit is true. - # This is called once all other non-daemonic threads have been - # joined. - reenable_gc = False - try: - if cls._registry: - import gc - - if gc.isenabled(): - reenable_gc = True - gc.disable() - pending = None - while True: - if pending is None or weakref_finalize._dirty: - pending = cls._select_for_exit() - weakref_finalize._dirty = False - if not pending: - break - f = pending.pop() - try: - # gc is disabled, so (assuming no daemonic - # threads) the following is the only line in - # this function which might trigger creation - # of a new finalizer - f() - except Exception: - sys.excepthook(*sys.exc_info()) - assert f not in cls._registry - finally: - # prevent any more finalizers from executing during shutdown - weakref_finalize._shutdown = True - if reenable_gc: - gc.enable() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py deleted file mode 100644 index f099a3d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py +++ /dev/null @@ -1,1076 +0,0 @@ -# Copyright (c) 2010-2020 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.16.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = (str,) - integer_types = (int,) - class_types = (type,) - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = (basestring,) - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - def __len__(self): - return 1 << 31 - - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - -if PY34: - from importlib.util import spec_from_loader -else: - spec_from_loader = None - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def find_spec(self, fullname, path, target=None): - if fullname in self.known_modules: - return spec_from_loader(fullname, self) - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - - get_source = get_code # same as get_code - - def create_module(self, spec): - return self.load_module(spec.name) - - def exec_module(self, module): - pass - - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute( - "filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse" - ), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute( - "reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload" - ), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute( - "zip_longest", "itertools", "itertools", "izip_longest", "zip_longest" - ), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule( - "collections_abc", - "collections", - "collections.abc" if sys.version_info >= (3, 3) else "collections", - ), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), - MovedModule( - "_dummy_thread", - "dummy_thread", - "_dummy_thread" if sys.version_info < (3, 9) else "_thread", - ), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule( - "email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart" - ), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute( - "unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes" - ), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", - "moves.urllib.parse", -) - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", - "moves.urllib.error", -) - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", - "moves.urllib.request", -) - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", - "moves.urllib.response", -) - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = ( - _urllib_robotparser_moved_attributes -) - -_importer._add_module( - Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", - "moves.urllib.robotparser", -) - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ["parse", "error", "request", "response", "robotparser"] - - -_importer._add_module( - Module_six_moves_urllib(__name__ + ".moves.urllib"), "moves.urllib" -) - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - - def advance_iterator(it): - return it.next() - - -next = advance_iterator - - -try: - callable = callable -except NameError: - - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc( - get_unbound_function, """Get the function out of a possibly unbound function""" -) - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc( - iterlists, "Return an iterator over the (key, [values]) pairs of a dictionary." -) - - -if PY3: - - def b(s): - return s.encode("latin-1") - - def u(s): - return s - - unichr = chr - import struct - - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - - StringIO = io.StringIO - BytesIO = io.BytesIO - del io - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" - _assertNotRegex = "assertNotRegex" -else: - - def b(s): - return s - - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r"\\", r"\\\\"), "unicode_escape") - - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -def assertNotRegex(self, *args, **kwargs): - return getattr(self, _assertNotRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec ("""exec _code_ in _globs_, _locs_""") - - exec_( - """def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""" - ) - - -if sys.version_info[:2] > (3,): - exec_( - """def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""" - ) -else: - - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if ( - isinstance(fp, file) - and isinstance(data, unicode) - and fp.encoding is not None - ): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) - - -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - # This does exactly the same what the :func:`py3:functools.update_wrapper` - # function does on Python versions after 3.2. It sets the ``__wrapped__`` - # attribute on ``wrapper`` object and it doesn't raise an error if any of - # the attributes mentioned in ``assigned`` and ``updated`` are missing on - # ``wrapped`` object. - def _update_wrapper( - wrapper, - wrapped, - assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES, - ): - for attr in assigned: - try: - value = getattr(wrapped, attr) - except AttributeError: - continue - else: - setattr(wrapper, attr, value) - for attr in updated: - getattr(wrapper, attr).update(getattr(wrapped, attr, {})) - wrapper.__wrapped__ = wrapped - return wrapper - - _update_wrapper.__doc__ = functools.update_wrapper.__doc__ - - def wraps( - wrapped, - assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES, - ): - return functools.partial( - _update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated - ) - - wraps.__doc__ = functools.wraps.__doc__ - -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - def __new__(cls, name, this_bases, d): - if sys.version_info[:2] >= (3, 7): - # This version introduced PEP 560 that requires a bit - # of extra care (we mimic what is done by __build_class__). - resolved_bases = types.resolve_bases(bases) - if resolved_bases is not bases: - d["__orig_bases__"] = bases - else: - resolved_bases = bases - return meta(name, resolved_bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - - return type.__new__(metaclass, "temporary_class", (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get("__slots__") - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop("__dict__", None) - orig_vars.pop("__weakref__", None) - if hasattr(cls, "__qualname__"): - orig_vars["__qualname__"] = cls.__qualname__ - return metaclass(cls.__name__, cls.__bases__, orig_vars) - - return wrapper - - -def ensure_binary(s, encoding="utf-8", errors="strict"): - """Coerce **s** to six.binary_type. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> encoded to `bytes` - - `bytes` -> `bytes` - """ - if isinstance(s, binary_type): - return s - if isinstance(s, text_type): - return s.encode(encoding, errors) - raise TypeError("not expecting type '%s'" % type(s)) - - -def ensure_str(s, encoding="utf-8", errors="strict"): - """Coerce *s* to `str`. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - # Optimization: Fast return for the common case. - if type(s) is str: - return s - if PY2 and isinstance(s, text_type): - return s.encode(encoding, errors) - elif PY3 and isinstance(s, binary_type): - return s.decode(encoding, errors) - elif not isinstance(s, (text_type, binary_type)): - raise TypeError("not expecting type '%s'" % type(s)) - return s - - -def ensure_text(s, encoding="utf-8", errors="strict"): - """Coerce *s* to six.text_type. - - For Python 2: - - `unicode` -> `unicode` - - `str` -> `unicode` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - if isinstance(s, binary_type): - return s.decode(encoding, errors) - elif isinstance(s, text_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) - - -def python_2_unicode_compatible(klass): - """ - A class decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if "__str__" not in klass.__dict__: - raise ValueError( - "@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % klass.__name__ - ) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode("utf-8") - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if ( - type(importer).__name__ == "_SixMetaPathImporter" - and importer.name == __name__ - ): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py deleted file mode 100644 index fb51bf7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py +++ /dev/null @@ -1,540 +0,0 @@ -from __future__ import absolute_import - -import collections -import functools -import logging - -from ._collections import HTTPHeaderDict, RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, port_by_scheme -from .exceptions import ( - LocationValueError, - MaxRetryError, - ProxySchemeUnknown, - ProxySchemeUnsupported, - URLSchemeUnknown, -) -from .packages import six -from .packages.six.moves.urllib.parse import urljoin -from .request import RequestMethods -from .util.proxy import connection_requires_http_tunnel -from .util.retry import Retry -from .util.url import parse_url - -__all__ = ["PoolManager", "ProxyManager", "proxy_from_url"] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ( - "key_file", - "cert_file", - "cert_reqs", - "ca_certs", - "ssl_version", - "ca_cert_dir", - "ssl_context", - "key_password", - "server_hostname", -) - -# All known keyword arguments that could be provided to the pool manager, its -# pools, or the underlying connections. This is used to construct a pool key. -_key_fields = ( - "key_scheme", # str - "key_host", # str - "key_port", # int - "key_timeout", # int or float or Timeout - "key_retries", # int or Retry - "key_strict", # bool - "key_block", # bool - "key_source_address", # str - "key_key_file", # str - "key_key_password", # str - "key_cert_file", # str - "key_cert_reqs", # str - "key_ca_certs", # str - "key_ssl_version", # str - "key_ca_cert_dir", # str - "key_ssl_context", # instance of ssl.SSLContext or urllib3.util.ssl_.SSLContext - "key_maxsize", # int - "key_headers", # dict - "key__proxy", # parsed proxy url - "key__proxy_headers", # dict - "key__proxy_config", # class - "key_socket_options", # list of (level (int), optname (int), value (int or str)) tuples - "key__socks_options", # dict - "key_assert_hostname", # bool or string - "key_assert_fingerprint", # str - "key_server_hostname", # str -) - -#: The namedtuple class used to construct keys for the connection pool. -#: All custom key schemes should include the fields in this key at a minimum. -PoolKey = collections.namedtuple("PoolKey", _key_fields) - -_proxy_config_fields = ("ssl_context", "use_forwarding_for_https") -ProxyConfig = collections.namedtuple("ProxyConfig", _proxy_config_fields) - - -def _default_key_normalizer(key_class, request_context): - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context["scheme"] = context["scheme"].lower() - context["host"] = context["host"].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ("headers", "_proxy_headers", "_socks_options"): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get("socket_options") - if socket_opts is not None: - context["socket_options"] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context["key_" + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - "http": functools.partial(_default_key_normalizer, PoolKey), - "https": functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = {"http": HTTPConnectionPool, "https": HTTPSConnectionPool} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - proxy_config = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port, request_context=None): - """ - Create a new :class:`urllib3.connectionpool.ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ("scheme", "host", "port"): - request_context.pop(key, None) - - if scheme == "http": - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme="http", pool_kwargs=None): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context["scheme"] = scheme or "http" - if not port: - port = port_by_scheme.get(request_context["scheme"].lower(), 80) - request_context["port"] = port - request_context["host"] = host - - return self.connection_from_context(request_context) - - def connection_from_context(self, request_context): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - scheme = request_context["scheme"].lower() - pool_key_constructor = self.key_fn_by_scheme.get(scheme) - if not pool_key_constructor: - raise URLSchemeUnknown(scheme) - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key(self, pool_key, request_context=None): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context["scheme"] - host = request_context["host"] - port = request_context["port"] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url, pool_kwargs=None): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host( - u.host, port=u.port, scheme=u.scheme, pool_kwargs=pool_kwargs - ) - - def _merge_pool_kwargs(self, override): - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def _proxy_requires_url_absolute_form(self, parsed_url): - """ - Indicates if the proxy requires the complete destination URL in the - request. Normally this is only needed when not using an HTTP CONNECT - tunnel. - """ - if self.proxy is None: - return False - - return not connection_requires_http_tunnel( - self.proxy, self.proxy_config, parsed_url.scheme - ) - - def _validate_proxy_scheme_url_selection(self, url_scheme): - """ - Validates that were not attempting to do TLS in TLS connections on - Python2 or with unsupported SSL implementations. - """ - if self.proxy is None or url_scheme != "https": - return - - if self.proxy.scheme != "https": - return - - if six.PY2 and not self.proxy_config.use_forwarding_for_https: - raise ProxySchemeUnsupported( - "Contacting HTTPS destinations through HTTPS proxies " - "'via CONNECT tunnels' is not supported in Python 2" - ) - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - self._validate_proxy_scheme_url_selection(u.scheme) - - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw["assert_same_host"] = False - kw["redirect"] = False - - if "headers" not in kw: - kw["headers"] = self.headers.copy() - - if self._proxy_requires_url_absolute_form(u): - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - kw["body"] = None - kw["headers"] = HTTPHeaderDict(kw["headers"])._prepare_for_method_change() - - retries = kw.get("retries") - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - # Strip headers marked as unsafe to forward to the redirected location. - # Check remove_headers_on_redirect to avoid a potential network call within - # conn.is_same_host() which may use socket.gethostbyname() in the future. - if retries.remove_headers_on_redirect and not conn.is_same_host( - redirect_location - ): - headers = list(six.iterkeys(kw["headers"])) - for header in headers: - if header.lower() in retries.remove_headers_on_redirect: - kw["headers"].pop(header, None) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - kw["retries"] = retries - kw["redirect"] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - - response.drain_conn() - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary containing headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - :param proxy_ssl_context: - The proxy SSL context is used to establish the TLS connection to the - proxy when using HTTPS proxies. - - :param use_forwarding_for_https: - (Defaults to False) If set to True will forward requests to the HTTPS - proxy to be made on behalf of the client instead of creating a TLS - tunnel via the CONNECT method. **Enabling this flag means that request - and response headers and content will be visible from the HTTPS proxy** - whereas tunneling keeps request and response headers and content - private. IP address, target hostname, SNI, and port are always visible - to an HTTPS proxy even when this flag is disabled. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__( - self, - proxy_url, - num_pools=10, - headers=None, - proxy_headers=None, - proxy_ssl_context=None, - use_forwarding_for_https=False, - **connection_pool_kw - ): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = "%s://%s:%i" % ( - proxy_url.scheme, - proxy_url.host, - proxy_url.port, - ) - proxy = parse_url(proxy_url) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - self.proxy_ssl_context = proxy_ssl_context - self.proxy_config = ProxyConfig(proxy_ssl_context, use_forwarding_for_https) - - connection_pool_kw["_proxy"] = self.proxy - connection_pool_kw["_proxy_headers"] = self.proxy_headers - connection_pool_kw["_proxy_config"] = self.proxy_config - - super(ProxyManager, self).__init__(num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme="http", pool_kwargs=None): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs - ) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs - ) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {"Accept": "*/*"} - - netloc = parse_url(url).netloc - if netloc: - headers_["Host"] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - if not connection_requires_http_tunnel(self.proxy, self.proxy_config, u.scheme): - # For connections using HTTP CONNECT, httplib sets the necessary - # headers on the CONNECT to the proxy. If we're not using CONNECT, - # we'll definitely need to set 'Host' at the very least. - headers = kw.get("headers", self.headers) - kw["headers"] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py deleted file mode 100644 index 3b4cf99..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py +++ /dev/null @@ -1,191 +0,0 @@ -from __future__ import absolute_import - -import sys - -from .filepost import encode_multipart_formdata -from .packages import six -from .packages.six.moves.urllib.parse import urlencode - -__all__ = ["RequestMethods"] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`urllib3.HTTPConnectionPool` and - :class:`urllib3.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"} - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen( - self, - method, - url, - body=None, - headers=None, - encode_multipart=True, - multipart_boundary=None, - **kw - ): # Abstract - raise NotImplementedError( - "Classes extending RequestMethods must implement " - "their own ``urlopen`` method." - ) - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - urlopen_kw["request_url"] = url - - if method in self._encode_url_methods: - return self.request_encode_url( - method, url, fields=fields, headers=headers, **urlopen_kw - ) - else: - return self.request_encode_body( - method, url, fields=fields, headers=headers, **urlopen_kw - ) - - def request_encode_url(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if headers is None: - headers = self.headers - - extra_kw = {"headers": headers} - extra_kw.update(urlopen_kw) - - if fields: - url += "?" + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body( - self, - method, - url, - fields=None, - headers=None, - encode_multipart=True, - multipart_boundary=None, - **urlopen_kw - ): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :func:`urllib3.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :func:`urllib.parse.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimic behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {"headers": {}} - - if fields: - if "body" in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one." - ) - - if encode_multipart: - body, content_type = encode_multipart_formdata( - fields, boundary=multipart_boundary - ) - else: - body, content_type = ( - urlencode(fields), - "application/x-www-form-urlencoded", - ) - - extra_kw["body"] = body - extra_kw["headers"] = {"Content-Type": content_type} - - extra_kw["headers"].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) - - -if not six.PY2: - - class RequestModule(sys.modules[__name__].__class__): - def __call__(self, *args, **kwargs): - """ - If user tries to call this module directly urllib3 v2.x style raise an error to the user - suggesting they may need urllib3 v2 - """ - raise TypeError( - "'module' object is not callable\n" - "urllib3.request() method is not supported in this release, " - "upgrade to urllib3 v2 to use it\n" - "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html" - ) - - sys.modules[__name__].__class__ = RequestModule diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py deleted file mode 100644 index 8909f84..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py +++ /dev/null @@ -1,879 +0,0 @@ -from __future__ import absolute_import - -import io -import logging -import sys -import warnings -import zlib -from contextlib import contextmanager -from socket import error as SocketError -from socket import timeout as SocketTimeout - -brotli = None - -from . import util -from ._collections import HTTPHeaderDict -from .connection import BaseSSLError, HTTPException -from .exceptions import ( - BodyNotHttplibCompatible, - DecodeError, - HTTPError, - IncompleteRead, - InvalidChunkLength, - InvalidHeader, - ProtocolError, - ReadTimeoutError, - ResponseNotChunked, - SSLError, -) -from .packages import six -from .util.response import is_fp_closed, is_response_to_head - -log = logging.getLogger(__name__) - - -class DeflateDecoder(object): - def __init__(self): - self._first_try = True - self._data = b"" - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - decompressed = self._obj.decompress(data) - if decompressed: - self._first_try = False - self._data = None - return decompressed - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoderState(object): - - FIRST_MEMBER = 0 - OTHER_MEMBERS = 1 - SWALLOW_DATA = 2 - - -class GzipDecoder(object): - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - self._state = GzipDecoderState.FIRST_MEMBER - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - ret = bytearray() - if self._state == GzipDecoderState.SWALLOW_DATA or not data: - return bytes(ret) - while True: - try: - ret += self._obj.decompress(data) - except zlib.error: - previous_state = self._state - # Ignore data after the first error - self._state = GzipDecoderState.SWALLOW_DATA - if previous_state == GzipDecoderState.OTHER_MEMBERS: - # Allow trailing garbage acceptable in other gzip clients - return bytes(ret) - raise - data = self._obj.unused_data - if not data: - return bytes(ret) - self._state = GzipDecoderState.OTHER_MEMBERS - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - -if brotli is not None: - - class BrotliDecoder(object): - # Supports both 'brotlipy' and 'Brotli' packages - # since they share an import name. The top branches - # are for 'brotlipy' and bottom branches for 'Brotli' - def __init__(self): - self._obj = brotli.Decompressor() - if hasattr(self._obj, "decompress"): - self.decompress = self._obj.decompress - else: - self.decompress = self._obj.process - - def flush(self): - if hasattr(self._obj, "flush"): - return self._obj.flush() - return b"" - - -class MultiDecoder(object): - """ - From RFC7231: - If one or more encodings have been applied to a representation, the - sender that applied the encodings MUST generate a Content-Encoding - header field that lists the content codings in the order in which - they were applied. - """ - - def __init__(self, modes): - self._decoders = [_get_decoder(m.strip()) for m in modes.split(",")] - - def flush(self): - return self._decoders[0].flush() - - def decompress(self, data): - for d in reversed(self._decoders): - data = d.decompress(data) - return data - - -def _get_decoder(mode): - if "," in mode: - return MultiDecoder(mode) - - if mode == "gzip": - return GzipDecoder() - - if brotli is not None and mode == "br": - return BrotliDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible with :class:`http.client.HTTPResponse` but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in :class:`http.client.HTTPResponse`: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param original_response: - When this HTTPResponse wrapper is generated from an :class:`http.client.HTTPResponse` - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - CONTENT_DECODERS = ["gzip", "deflate"] - if brotli is not None: - CONTENT_DECODERS += ["br"] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__( - self, - body="", - headers=None, - status=0, - version=0, - reason=None, - strict=0, - preload_content=True, - decode_content=True, - original_response=None, - pool=None, - connection=None, - msg=None, - retries=None, - enforce_content_length=False, - request_method=None, - request_url=None, - auto_close=True, - ): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - self.retries = retries - self.enforce_content_length = enforce_content_length - self.auto_close = auto_close - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - self.msg = msg - self._request_url = request_url - - if body and isinstance(body, (six.string_types, bytes)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, "read"): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get("transfer-encoding", "").lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get("location") - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - def drain_conn(self): - """ - Read and discard any remaining HTTP response data in the response connection. - - Unread data in the HTTPResponse connection blocks the connection from being released back to the pool. - """ - try: - self.read() - except (HTTPError, SocketError, BaseSSLError, HTTPException): - pass - - @property - def data(self): - # For backwards-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - @property - def connection(self): - return self._connection - - def isclosed(self): - return is_fp_closed(self._fp) - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``urllib3.response.HTTPResponse.read`` - if bytes are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method): - """ - Set initial length value for Response content if available. - """ - length = self.headers.get("content-length") - - if length is not None: - if self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning( - "Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked." - ) - return None - - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = set([int(val) for val in length.split(",")]) - if len(lengths) > 1: - raise InvalidHeader( - "Content-Length contained multiple " - "unmatching values (%s)" % length - ) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == "HEAD": - length = 0 - - return length - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get("content-encoding", "").lower() - if self._decoder is None: - if content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - elif "," in content_encoding: - encodings = [ - e.strip() - for e in content_encoding.split(",") - if e.strip() in self.CONTENT_DECODERS - ] - if len(encodings): - self._decoder = _get_decoder(content_encoding) - - DECODER_ERROR_CLASSES = (IOError, zlib.error) - if brotli is not None: - DECODER_ERROR_CLASSES += (brotli.error,) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - if not decode_content: - return data - - try: - if self._decoder: - data = self._decoder.decompress(data) - except self.DECODER_ERROR_CLASSES as e: - content_encoding = self.headers.get("content-encoding", "").lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, - e, - ) - if flush_decoder: - data += self._flush_decoder() - - return data - - def _flush_decoder(self): - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - buf = self._decoder.decompress(b"") - return buf + self._decoder.flush() - - return b"" - - @contextmanager - def _error_catcher(self): - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, "Read timed out.") - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if "read operation timed out" not in str(e): - # SSL errors related to framing/MAC get wrapped and reraised here - raise SSLError(e) - - raise ReadTimeoutError(self._pool, None, "Read timed out.") - - except (HTTPException, SocketError) as e: - # This includes IncompleteRead. - raise ProtocolError("Connection broken: %r" % e, e) - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def _fp_read(self, amt): - """ - Read a response with the thought that reading the number of bytes - larger than can fit in a 32-bit int at a time via SSL in some - known cases leads to an overflow error that has to be prevented - if `amt` or `self.length_remaining` indicate that a problem may - happen. - - The known cases: - * 3.8 <= CPython < 3.9.7 because of a bug - https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900. - * urllib3 injected with pyOpenSSL-backed SSL-support. - * CPython < 3.10 only when `amt` does not fit 32-bit int. - """ - assert self._fp - c_int_max = 2 ** 31 - 1 - if ( - ( - (amt and amt > c_int_max) - or (self.length_remaining and self.length_remaining > c_int_max) - ) - and not util.IS_SECURETRANSPORT - and (util.IS_PYOPENSSL or sys.version_info < (3, 10)) - ): - buffer = io.BytesIO() - # Besides `max_chunk_amt` being a maximum chunk size, it - # affects memory overhead of reading a response by this - # method in CPython. - # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum - # chunk size that does not lead to an overflow error, but - # 256 MiB is a compromise. - max_chunk_amt = 2 ** 28 - while amt is None or amt != 0: - if amt is not None: - chunk_amt = min(amt, max_chunk_amt) - amt -= chunk_amt - else: - chunk_amt = max_chunk_amt - data = self._fp.read(chunk_amt) - if not data: - break - buffer.write(data) - del data # to reduce peak memory usage by `max_chunk_amt`. - return buffer.getvalue() - else: - # StringIO doesn't like amt=None - return self._fp.read(amt) if amt is not None else self._fp.read() - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`http.client.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - fp_closed = getattr(self._fp, "closed", False) - - with self._error_catcher(): - data = self._fp_read(amt) if not fp_closed else b"" - if amt is None: - flush_decoder = True - else: - cache_content = False - if ( - amt != 0 and not data - ): # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - if self.enforce_content_length and self.length_remaining not in ( - 0, - None, - ): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - def stream(self, amt=2 ** 16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`http.client.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - - if not isinstance(headers, HTTPHeaderDict): - if six.PY2: - # Python 2.7 - headers = HTTPHeaderDict.from_httplib(headers) - else: - headers = HTTPHeaderDict(headers.items()) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, "strict", 0) - resp = ResponseCls( - body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw - ) - return resp - - # Backwards-compatibility methods for http.client.HTTPResponse - def getheaders(self): - warnings.warn( - "HTTPResponse.getheaders() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead access HTTPResponse.headers directly.", - category=DeprecationWarning, - stacklevel=2, - ) - return self.headers - - def getheader(self, name, default=None): - warnings.warn( - "HTTPResponse.getheader() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default).", - category=DeprecationWarning, - stacklevel=2, - ) - return self.headers.get(name, default) - - # Backwards compatibility for http.cookiejar - def info(self): - return self.headers - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - if self._connection: - self._connection.close() - - if not self.auto_close: - io.IOBase.close(self) - - @property - def closed(self): - if not self.auto_close: - return io.IOBase.closed.__get__(self) - elif self._fp is None: - return True - elif hasattr(self._fp, "isclosed"): - return self._fp.isclosed() - elif hasattr(self._fp, "closed"): - return self._fp.closed - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError( - "The file-like object this HTTPResponse is wrapped " - "around has no file descriptor" - ) - - def flush(self): - if ( - self._fp is not None - and hasattr(self._fp, "flush") - and not getattr(self._fp, "closed", False) - ): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[: len(temp)] = temp - return len(temp) - - def supports_chunked_reads(self): - """ - Checks if the underlying file-like object looks like a - :class:`http.client.HTTPResponse` object. We do this by testing for - the fp attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, "fp") - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b";", 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise InvalidChunkLength(self, line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing." - ) - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be http.client.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks." - ) - - with self._error_catcher(): - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return - - # If a response is already read and closed - # then return immediately. - if self._fp.fp is None: - return - - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode( - chunk, decode_content=decode_content, flush_decoder=False - ) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b"\r\n": - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() - - def geturl(self): - """ - Returns the URL that was the source of this response. - If the request that generated this response redirected, this method - will return the final redirect location. - """ - if self.retries is not None and len(self.retries.history): - return self.retries.history[-1].redirect_location - else: - return self._request_url - - def __iter__(self): - buffer = [] - for chunk in self.stream(decode_content=True): - if b"\n" in chunk: - chunk = chunk.split(b"\n") - yield b"".join(buffer) + chunk[0] + b"\n" - for x in chunk[1:-1]: - yield x + b"\n" - if chunk[-1]: - buffer = [chunk[-1]] - else: - buffer = [] - else: - buffer.append(chunk) - if buffer: - yield b"".join(buffer) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py deleted file mode 100644 index 4547fc5..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py +++ /dev/null @@ -1,49 +0,0 @@ -from __future__ import absolute_import - -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import SKIP_HEADER, SKIPPABLE_HEADERS, make_headers -from .response import is_fp_closed -from .retry import Retry -from .ssl_ import ( - ALPN_PROTOCOLS, - HAS_SNI, - IS_PYOPENSSL, - IS_SECURETRANSPORT, - PROTOCOL_TLS, - SSLContext, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import Timeout, current_time -from .url import Url, get_host, parse_url, split_first -from .wait import wait_for_read, wait_for_write - -__all__ = ( - "HAS_SNI", - "IS_PYOPENSSL", - "IS_SECURETRANSPORT", - "SSLContext", - "PROTOCOL_TLS", - "ALPN_PROTOCOLS", - "Retry", - "Timeout", - "Url", - "assert_fingerprint", - "current_time", - "is_connection_dropped", - "is_fp_closed", - "get_host", - "parse_url", - "make_headers", - "resolve_cert_reqs", - "resolve_ssl_version", - "split_first", - "ssl_wrap_socket", - "wait_for_read", - "wait_for_write", - "SKIP_HEADER", - "SKIPPABLE_HEADERS", -) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 9a711ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index cb27dd6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc deleted file mode 100644 index f7fdb40..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc deleted file mode 100644 index cd392c3..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc deleted file mode 100644 index 7f50332..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc deleted file mode 100644 index 2ed5a3b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc deleted file mode 100644 index 51c36ee..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc deleted file mode 100644 index c857b7b..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc deleted file mode 100644 index 6b3038a..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc deleted file mode 100644 index 7992613..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc deleted file mode 100644 index 60b35a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc deleted file mode 100644 index 638f2c6..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc deleted file mode 100644 index 3c8369d..0000000 Binary files a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py deleted file mode 100644 index 6af1138..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py +++ /dev/null @@ -1,149 +0,0 @@ -from __future__ import absolute_import - -import socket - -from ..contrib import _appengine_environ -from ..exceptions import LocationParseError -from ..packages import six -from .wait import NoWayToWaitForSocketError, wait_for_read - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`http.client.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, "sock", False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - try: - # Returns True if readable, which here means it's been dropped - return wait_for_read(sock, timeout=0.0) - except NoWayToWaitForSocketError: # Platform-specific: AppEngine - return False - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection( - address, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, - socket_options=None, -): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`socket.getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith("["): - host = host.strip("[]") - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - try: - host.encode("idna") - except UnicodeError: - return six.raise_from( - LocationParseError(u"'%s', label empty or too long" % host), None - ) - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as e: - err = e - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family(): - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host): - """Returns True if the system can bind an IPv6 address.""" - sock = None - has_ipv6 = False - - # App Engine doesn't support IPV6 sockets and actually has a quota on the - # number of sockets that can be used, so just early out here instead of - # creating a socket needlessly. - # See https://github.com/urllib3/urllib3/issues/1446 - if _appengine_environ.is_appengine_sandbox(): - return False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/urllib3/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6("::1") diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py deleted file mode 100644 index 2199cc7..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py +++ /dev/null @@ -1,57 +0,0 @@ -from .ssl_ import create_urllib3_context, resolve_cert_reqs, resolve_ssl_version - - -def connection_requires_http_tunnel( - proxy_url=None, proxy_config=None, destination_scheme=None -): - """ - Returns True if the connection requires an HTTP CONNECT through the proxy. - - :param URL proxy_url: - URL of the proxy. - :param ProxyConfig proxy_config: - Proxy configuration from poolmanager.py - :param str destination_scheme: - The scheme of the destination. (i.e https, http, etc) - """ - # If we're not using a proxy, no way to use a tunnel. - if proxy_url is None: - return False - - # HTTP destinations never require tunneling, we always forward. - if destination_scheme == "http": - return False - - # Support for forwarding with HTTPS proxies and HTTPS destinations. - if ( - proxy_url.scheme == "https" - and proxy_config - and proxy_config.use_forwarding_for_https - ): - return False - - # Otherwise always use a tunnel. - return True - - -def create_proxy_ssl_context( - ssl_version, cert_reqs, ca_certs=None, ca_cert_dir=None, ca_cert_data=None -): - """ - Generates a default proxy ssl context if one hasn't been provided by the - user. - """ - ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(ssl_version), - cert_reqs=resolve_cert_reqs(cert_reqs), - ) - - if ( - not ca_certs - and not ca_cert_dir - and not ca_cert_data - and hasattr(ssl_context, "load_default_certs") - ): - ssl_context.load_default_certs() - - return ssl_context diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py deleted file mode 100644 index 4178410..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py +++ /dev/null @@ -1,22 +0,0 @@ -import collections - -from ..packages import six -from ..packages.six.moves import queue - -if six.PY2: - # Queue is imported for side effects on MS Windows. See issue #229. - import Queue as _unused_module_Queue # noqa: F401 - - -class LifoQueue(queue.Queue): - def _init(self, _): - self.queue = collections.deque() - - def _qsize(self, len=len): - return len(self.queue) - - def _put(self, item): - self.queue.append(item) - - def _get(self): - return self.queue.pop() diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py deleted file mode 100644 index 330766e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py +++ /dev/null @@ -1,137 +0,0 @@ -from __future__ import absolute_import - -from base64 import b64encode - -from ..exceptions import UnrewindableBodyError -from ..packages.six import b, integer_types - -# Pass as a value within ``headers`` to skip -# emitting some HTTP headers that are added automatically. -# The only headers that are supported are ``Accept-Encoding``, -# ``Host``, and ``User-Agent``. -SKIP_HEADER = "@@@SKIP_HEADER@@@" -SKIPPABLE_HEADERS = frozenset(["accept-encoding", "host", "user-agent"]) - -ACCEPT_ENCODING = "gzip,deflate" - -_FAILEDTELL = object() - - -def make_headers( - keep_alive=None, - accept_encoding=None, - user_agent=None, - basic_auth=None, - proxy_basic_auth=None, - disable_cache=None, -): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ",".join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers["accept-encoding"] = accept_encoding - - if user_agent: - headers["user-agent"] = user_agent - - if keep_alive: - headers["connection"] = "keep-alive" - - if basic_auth: - headers["authorization"] = "Basic " + b64encode(b(basic_auth)).decode("utf-8") - - if proxy_basic_auth: - headers["proxy-authorization"] = "Basic " + b64encode( - b(proxy_basic_auth) - ).decode("utf-8") - - if disable_cache: - headers["cache-control"] = "no-cache" - - return headers - - -def set_file_position(body, pos): - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, "tell", None) is not None: - try: - pos = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body, body_pos): - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, "seek", None) - if body_seek is not None and isinstance(body_pos, integer_types): - try: - body_seek(body_pos) - except (IOError, OSError): - raise UnrewindableBodyError( - "An error occurred when rewinding request body for redirect/retry." - ) - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError( - "Unable to record file position for rewinding " - "request body during a redirect/retry." - ) - else: - raise ValueError( - "body_pos must be of type integer, instead it was %s." % type(body_pos) - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py deleted file mode 100644 index 5ea609c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py +++ /dev/null @@ -1,107 +0,0 @@ -from __future__ import absolute_import - -from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect - -from ..exceptions import HeaderParsingError -from ..packages.six.moves import http_client as httplib - - -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers): - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param http.client.HTTPMessage headers: Headers to verify. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError("expected httplib.Message, got {0}.".format(type(headers))) - - defects = getattr(headers, "defects", None) - get_payload = getattr(headers, "get_payload", None) - - unparsed_data = None - if get_payload: - # get_payload is actually email.message.Message.get_payload; - # we're only interested in the result if it's not a multipart message - if not headers.is_multipart(): - payload = get_payload() - - if isinstance(payload, (bytes, str)): - unparsed_data = payload - if defects: - # httplib is assuming a response body is available - # when parsing headers even when httplib only sends - # header data to parse_headers() This results in - # defects on multipart responses in particular. - # See: https://github.com/urllib3/urllib3/issues/800 - - # So we ignore the following defects: - # - StartBoundaryNotFoundDefect: - # The claimed start boundary was never found. - # - MultipartInvariantViolationDefect: - # A message claimed to be a multipart but no subparts were found. - defects = [ - defect - for defect in defects - if not isinstance( - defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect) - ) - ] - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response): - """ - Checks whether the request of a response has been a HEAD-request. - Handles the quirks of AppEngine. - - :param http.client.HTTPResponse response: - Response to check if the originating request - used 'HEAD' as a method. - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method = response._method - if isinstance(method, int): # Platform-specific: Appengine - return method == 3 - return method.upper() == "HEAD" diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py deleted file mode 100644 index 9a1e90d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py +++ /dev/null @@ -1,622 +0,0 @@ -from __future__ import absolute_import - -import email -import logging -import re -import time -import warnings -from collections import namedtuple -from itertools import takewhile - -from ..exceptions import ( - ConnectTimeoutError, - InvalidHeader, - MaxRetryError, - ProtocolError, - ProxyError, - ReadTimeoutError, - ResponseError, -) -from ..packages import six - -log = logging.getLogger(__name__) - - -# Data structure for representing the metadata of requests that result in a retry. -RequestHistory = namedtuple( - "RequestHistory", ["method", "url", "error", "status", "redirect_location"] -) - - -# TODO: In v2 we can remove this sentinel and metaclass with deprecated options. -_Default = object() - - -class _RetryMeta(type): - @property - def DEFAULT_METHOD_WHITELIST(cls): - warnings.warn( - "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead", - DeprecationWarning, - ) - return cls.DEFAULT_ALLOWED_METHODS - - @DEFAULT_METHOD_WHITELIST.setter - def DEFAULT_METHOD_WHITELIST(cls, value): - warnings.warn( - "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead", - DeprecationWarning, - ) - cls.DEFAULT_ALLOWED_METHODS = value - - @property - def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls): - warnings.warn( - "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead", - DeprecationWarning, - ) - return cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT - - @DEFAULT_REDIRECT_HEADERS_BLACKLIST.setter - def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls, value): - warnings.warn( - "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead", - DeprecationWarning, - ) - cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT = value - - @property - def BACKOFF_MAX(cls): - warnings.warn( - "Using 'Retry.BACKOFF_MAX' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead", - DeprecationWarning, - ) - return cls.DEFAULT_BACKOFF_MAX - - @BACKOFF_MAX.setter - def BACKOFF_MAX(cls, value): - warnings.warn( - "Using 'Retry.BACKOFF_MAX' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead", - DeprecationWarning, - ) - cls.DEFAULT_BACKOFF_MAX = value - - -@six.add_metaclass(_RetryMeta) -class Retry(object): - """Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param int other: - How many times to retry on other errors. - - Other errors are errors that are not connect, read, redirect or status errors. - These errors might be raised after the request was sent to the server, so the - request might have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - If ``total`` is not set, it's a good idea to set this to 0 to account - for unexpected edge cases and avoid infinite retry loops. - - :param iterable allowed_methods: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_ALLOWED_METHODS`. - - Set to a ``False`` value to retry on any verb. - - .. warning:: - - Previously this parameter was named ``method_whitelist``, that - usage is deprecated in v1.26.0 and will be removed in v2.0. - - :param iterable status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``allowed_methods`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ** ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.DEFAULT_BACKOFF_MAX`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - :param iterable remove_headers_on_redirect: - Sequence of headers to remove from the request when a response - indicating a redirect is returned before firing off the redirected - request. - """ - - #: Default methods to be used for ``allowed_methods`` - DEFAULT_ALLOWED_METHODS = frozenset( - ["HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"] - ) - - #: Default status codes to be used for ``status_forcelist`` - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - #: Default headers to be used for ``remove_headers_on_redirect`` - DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset( - ["Cookie", "Authorization", "Proxy-Authorization"] - ) - - #: Maximum backoff time. - DEFAULT_BACKOFF_MAX = 120 - - def __init__( - self, - total=10, - connect=None, - read=None, - redirect=None, - status=None, - other=None, - allowed_methods=_Default, - status_forcelist=None, - backoff_factor=0, - raise_on_redirect=True, - raise_on_status=True, - history=None, - respect_retry_after_header=True, - remove_headers_on_redirect=_Default, - # TODO: Deprecated, remove in v2.0 - method_whitelist=_Default, - ): - - if method_whitelist is not _Default: - if allowed_methods is not _Default: - raise ValueError( - "Using both 'allowed_methods' and " - "'method_whitelist' together is not allowed. " - "Instead only use 'allowed_methods'" - ) - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - stacklevel=2, - ) - allowed_methods = method_whitelist - if allowed_methods is _Default: - allowed_methods = self.DEFAULT_ALLOWED_METHODS - if remove_headers_on_redirect is _Default: - remove_headers_on_redirect = self.DEFAULT_REMOVE_HEADERS_ON_REDIRECT - - self.total = total - self.connect = connect - self.read = read - self.status = status - self.other = other - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.allowed_methods = allowed_methods - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or tuple() - self.respect_retry_after_header = respect_retry_after_header - self.remove_headers_on_redirect = frozenset( - [h.lower() for h in remove_headers_on_redirect] - ) - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, - read=self.read, - redirect=self.redirect, - status=self.status, - other=self.other, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - remove_headers_on_redirect=self.remove_headers_on_redirect, - respect_retry_after_header=self.respect_retry_after_header, - ) - - # TODO: If already given in **kw we use what's given to us - # If not given we need to figure out what to pass. We decide - # based on whether our class has the 'method_whitelist' property - # and if so we pass the deprecated 'method_whitelist' otherwise - # we use 'allowed_methods'. Remove in v2.0 - if "method_whitelist" not in kw and "allowed_methods" not in kw: - if "method_whitelist" in self.__dict__: - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - params["method_whitelist"] = self.allowed_methods - else: - params["allowed_methods"] = self.allowed_methods - - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self): - """Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len( - list( - takewhile(lambda x: x.redirect_location is None, reversed(self.history)) - ) - ) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - return min(self.DEFAULT_BACKOFF_MAX, backoff_value) - - def parse_retry_after(self, retry_after): - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate_tz(retry_after) - if retry_date_tuple is None: - raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) - if retry_date_tuple[9] is None: # Python 2 - # Assume UTC if no timezone was specified - # On Python2.7, parsedate_tz returns None for a timezone offset - # instead of 0 if no timezone is given, where mktime_tz treats - # a None timezone offset as local time. - retry_date_tuple = retry_date_tuple[:9] + (0,) + retry_date_tuple[10:] - - retry_date = email.utils.mktime_tz(retry_date_tuple) - seconds = retry_date - time.time() - - if seconds < 0: - seconds = 0 - - return seconds - - def get_retry_after(self, response): - """Get the value of Retry-After in seconds.""" - - retry_after = response.headers.get("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response=None): - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self): - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response=None): - """Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if self.respect_retry_after_header and response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err): - """Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - if isinstance(err, ProxyError): - err = err.original_error - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method): - """Checks if a given HTTP method should be retried upon, depending if - it is included in the allowed_methods - """ - # TODO: For now favor if the Retry implementation sets its own method_whitelist - # property outside of our constructor to avoid breaking custom implementations. - if "method_whitelist" in self.__dict__: - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - allowed_methods = self.method_whitelist - else: - allowed_methods = self.allowed_methods - - if allowed_methods and method.upper() not in allowed_methods: - return False - return True - - def is_retry(self, method, status_code, has_retry_after=False): - """Is this method/status code retryable? (Based on allowlists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return ( - self.total - and self.respect_retry_after_header - and has_retry_after - and (status_code in self.RETRY_AFTER_STATUS_CODES) - ) - - def is_exhausted(self): - """Are we out of retries?""" - retry_counts = ( - self.total, - self.connect, - self.read, - self.redirect, - self.status, - self.other, - ) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment( - self, - method=None, - url=None, - response=None, - error=None, - _pool=None, - _stacktrace=None, - ): - """Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - other = self.other - cause = "unknown" - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or not self._is_method_retryable(method): - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif error: - # Other retry? - if other is not None: - other -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = "too many redirects" - redirect_location = response.get_redirect_location() - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and the given method is in the allowed_methods - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) - status = response.status - - history = self.history + ( - RequestHistory(method, url, error, status, redirect_location), - ) - - new_retry = self.new( - total=total, - connect=connect, - read=read, - redirect=redirect, - status=status_count, - other=other, - history=history, - ) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self): - return ( - "{cls.__name__}(total={self.total}, connect={self.connect}, " - "read={self.read}, redirect={self.redirect}, status={self.status})" - ).format(cls=type(self), self=self) - - def __getattr__(self, item): - if item == "method_whitelist": - # TODO: Remove this deprecated alias in v2.0 - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - return self.allowed_methods - try: - return getattr(super(Retry, self), item) - except AttributeError: - return getattr(Retry, item) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py deleted file mode 100644 index 0a6a0e0..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py +++ /dev/null @@ -1,504 +0,0 @@ -from __future__ import absolute_import - -import hashlib -import hmac -import os -import sys -import warnings -from binascii import hexlify, unhexlify - -from ..exceptions import ( - InsecurePlatformWarning, - ProxySchemeUnsupported, - SNIMissingWarning, - SSLError, -) -from ..packages import six -from .url import BRACELESS_IPV6_ADDRZ_RE, IPV4_RE - -SSLContext = None -SSLTransport = None -HAS_SNI = False -IS_PYOPENSSL = False -IS_SECURETRANSPORT = False -ALPN_PROTOCOLS = ["http/1.1"] - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - length: getattr(hashlib, algorithm, None) - for length, algorithm in ((32, "md5"), (40, "sha1"), (64, "sha256")) -} - - -def _const_compare_digest_backport(a, b): - """ - Compare two digests of equal length in constant time. - - The digests must be of type str/bytes. - Returns True if the digests match, and False otherwise. - """ - result = abs(len(a) - len(b)) - for left, right in zip(bytearray(a), bytearray(b)): - result |= left ^ right - return result == 0 - - -_const_compare_digest = getattr(hmac, "compare_digest", _const_compare_digest_backport) - -try: # Test for SSL features - import ssl - from ssl import CERT_REQUIRED, wrap_socket -except ImportError: - pass - -try: - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - -try: - from .ssltransport import SSLTransport -except ImportError: - pass - - -try: # Platform-specific: Python 3.6 - from ssl import PROTOCOL_TLS - - PROTOCOL_SSLv23 = PROTOCOL_TLS -except ImportError: - try: - from ssl import PROTOCOL_SSLv23 as PROTOCOL_TLS - - PROTOCOL_SSLv23 = PROTOCOL_TLS - except ImportError: - PROTOCOL_SSLv23 = PROTOCOL_TLS = 2 - -try: - from ssl import PROTOCOL_TLS_CLIENT -except ImportError: - PROTOCOL_TLS_CLIENT = PROTOCOL_TLS - - -try: - from ssl import OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3 -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - - -try: # OP_NO_TICKET was added in Python 3.6 - from ssl import OP_NO_TICKET -except ImportError: - OP_NO_TICKET = 0x4000 - - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and -# security, -# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common, -# - disable NULL authentication, MD5 MACs, DSS, and other -# insecure ciphers for security reasons. -# - NOTE: TLS 1.3 cipher suites are managed through a different interface -# not exposed by CPython (yet!) and are enabled by default if they're available. -DEFAULT_CIPHERS = ":".join( - [ - "ECDHE+AESGCM", - "ECDHE+CHACHA20", - "DHE+AESGCM", - "DHE+CHACHA20", - "ECDH+AESGCM", - "DH+AESGCM", - "ECDH+AES", - "DH+AES", - "RSA+AESGCM", - "RSA+AES", - "!aNULL", - "!eNULL", - "!MD5", - "!DSS", - ] -) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - - class SSLContext(object): # Platform-specific: Python 2 - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - self.ca_certs = cafile - - if capath is not None: - raise SSLError("CA directories not supported in older Pythons") - - if cadata is not None: - raise SSLError("CA data not supported in older Pythons") - - def set_ciphers(self, cipher_suite): - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None, server_side=False): - warnings.warn( - "A true SSLContext object is not available. This prevents " - "urllib3 from configuring SSL appropriately and may cause " - "certain SSL connections to fail. You can upgrade to a newer " - "version of Python to solve this. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings", - InsecurePlatformWarning, - ) - kwargs = { - "keyfile": self.keyfile, - "certfile": self.certfile, - "ca_certs": self.ca_certs, - "cert_reqs": self.verify_mode, - "ssl_version": self.protocol, - "server_side": server_side, - } - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - fingerprint = fingerprint.replace(":", "").lower() - digest_length = len(fingerprint) - if digest_length not in HASHFUNC_MAP: - raise SSLError("Fingerprint of invalid length: {0}".format(fingerprint)) - hashfunc = HASHFUNC_MAP.get(digest_length) - if hashfunc is None: - raise SSLError( - "Hash function implementation unavailable for fingerprint length: {0}".format( - digest_length - ) - ) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not _const_compare_digest(cert_digest, fingerprint_bytes): - raise SSLError( - 'Fingerprints did not match. Expected "{0}", got "{1}".'.format( - fingerprint, hexlify(cert_digest) - ) - ) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_REQUIRED`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbreviation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_REQUIRED - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "CERT_" + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_TLS - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "PROTOCOL_" + candidate) - return res - - return candidate - - -def create_urllib3_context( - ssl_version=None, cert_reqs=None, options=None, ciphers=None -): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from pip._vendor.urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - # PROTOCOL_TLS is deprecated in Python 3.10 - if not ssl_version or ssl_version == PROTOCOL_TLS: - ssl_version = PROTOCOL_TLS_CLIENT - - context = SSLContext(ssl_version) - - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - # TLSv1.2 only. Unless set explicitly, do not request tickets. - # This may save some bandwidth on wire, and although the ticket is encrypted, - # there is a risk associated with it being on wire, - # if the server is not rotating its ticketing keys properly. - options |= OP_NO_TICKET - - context.options |= options - - # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is - # necessary for conditional client cert authentication with TLS 1.3. - # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older - # versions of Python. We only enable on Python 3.7.4+ or if certificate - # verification is enabled to work around Python issue #37428 - # See: https://bugs.python.org/issue37428 - if (cert_reqs == ssl.CERT_REQUIRED or sys.version_info >= (3, 7, 4)) and getattr( - context, "post_handshake_auth", None - ) is not None: - context.post_handshake_auth = True - - def disable_check_hostname(): - if ( - getattr(context, "check_hostname", None) is not None - ): # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - - # The order of the below lines setting verify_mode and check_hostname - # matter due to safe-guards SSLContext has to prevent an SSLContext with - # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more - # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used - # or not so we don't know the initial state of the freshly created SSLContext. - if cert_reqs == ssl.CERT_REQUIRED: - context.verify_mode = cert_reqs - disable_check_hostname() - else: - disable_check_hostname() - context.verify_mode = cert_reqs - - # Enable logging of TLS session keys via defacto standard environment variable - # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values. - if hasattr(context, "keylog_filename"): - sslkeylogfile = os.environ.get("SSLKEYLOGFILE") - if sslkeylogfile: - context.keylog_filename = sslkeylogfile - - return context - - -def ssl_wrap_socket( - sock, - keyfile=None, - certfile=None, - cert_reqs=None, - ca_certs=None, - server_hostname=None, - ssl_version=None, - ciphers=None, - ssl_context=None, - ca_cert_dir=None, - key_password=None, - ca_cert_data=None, - tls_in_tls=False, -): - """ - All arguments except for server_hostname, ssl_context, and ca_cert_dir have - the same meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - :param key_password: - Optional password if the keyfile is encrypted. - :param ca_cert_data: - Optional string containing CA certificates in PEM format suitable for - passing as the cadata parameter to SSLContext.load_verify_locations() - :param tls_in_tls: - Use SSLTransport to wrap the existing socket. - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are no longer - # used by urllib3 itself. We should consider deprecating and removing - # this code. - context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers) - - if ca_certs or ca_cert_dir or ca_cert_data: - try: - context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data) - except (IOError, OSError) as e: - raise SSLError(e) - - elif ssl_context is None and hasattr(context, "load_default_certs"): - # try to load OS default certs; works well on Windows (require Python3.4+) - context.load_default_certs() - - # Attempt to detect if we get the goofy behavior of the - # keyfile being encrypted and OpenSSL asking for the - # passphrase via the terminal and instead error out. - if keyfile and key_password is None and _is_key_file_encrypted(keyfile): - raise SSLError("Client private key is encrypted, password is required") - - if certfile: - if key_password is None: - context.load_cert_chain(certfile, keyfile) - else: - context.load_cert_chain(certfile, keyfile, key_password) - - try: - if hasattr(context, "set_alpn_protocols"): - context.set_alpn_protocols(ALPN_PROTOCOLS) - except NotImplementedError: # Defensive: in CI, we always have set_alpn_protocols - pass - - # If we detect server_hostname is an IP address then the SNI - # extension should not be used according to RFC3546 Section 3.1 - use_sni_hostname = server_hostname and not is_ipaddress(server_hostname) - # SecureTransport uses server_hostname in certificate verification. - send_sni = (use_sni_hostname and HAS_SNI) or ( - IS_SECURETRANSPORT and server_hostname - ) - # Do not warn the user if server_hostname is an invalid SNI hostname. - if not HAS_SNI and use_sni_hostname: - warnings.warn( - "An HTTPS request has been made, but the SNI (Server Name " - "Indication) extension to TLS is not available on this platform. " - "This may cause the server to present an incorrect TLS " - "certificate, which can cause validation failures. You can upgrade to " - "a newer version of Python to solve this. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings", - SNIMissingWarning, - ) - - if send_sni: - ssl_sock = _ssl_wrap_socket_impl( - sock, context, tls_in_tls, server_hostname=server_hostname - ) - else: - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls) - return ssl_sock - - -def is_ipaddress(hostname): - """Detects whether the hostname given is an IPv4 or IPv6 address. - Also detects IPv6 addresses with Zone IDs. - - :param str hostname: Hostname to examine. - :return: True if the hostname is an IP address, False otherwise. - """ - if not six.PY2 and isinstance(hostname, bytes): - # IDN A-label bytes are ASCII compatible. - hostname = hostname.decode("ascii") - return bool(IPV4_RE.match(hostname) or BRACELESS_IPV6_ADDRZ_RE.match(hostname)) - - -def _is_key_file_encrypted(key_file): - """Detects if a key file is encrypted or not.""" - with open(key_file, "r") as f: - for line in f: - # Look for Proc-Type: 4,ENCRYPTED - if "ENCRYPTED" in line: - return True - - return False - - -def _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None): - if tls_in_tls: - if not SSLTransport: - # Import error, ssl is not available. - raise ProxySchemeUnsupported( - "TLS in TLS requires support for the 'ssl' module" - ) - - SSLTransport._validate_ssl_context_for_tls_in_tls(ssl_context) - return SSLTransport(sock, ssl_context, server_hostname) - - if server_hostname: - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - else: - return ssl_context.wrap_socket(sock) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py deleted file mode 100644 index 1dd950c..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +++ /dev/null @@ -1,159 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re -import sys - -# ipaddress has been backported to 2.6+ in pypi. If it is installed on the -# system, use it to handle IPAddress ServerAltnames (this was added in -# python-3.5) otherwise only do DNS matching. This allows -# util.ssl_match_hostname to continue to be used in Python 2.7. -try: - import ipaddress -except ImportError: - ipaddress = None - -__version__ = "3.5.0.1" - - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r".") - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count("*") - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn) - ) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == "*": - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append("[^.]+") - elif leftmost.startswith("xn--") or hostname.startswith("xn--"): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r"\*", "[^.]*")) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r"\A" + r"\.".join(pats) + r"\Z", re.IGNORECASE) - return pat.match(hostname) - - -def _to_unicode(obj): - if isinstance(obj, str) and sys.version_info < (3,): - # ignored flake8 # F821 to support python 2.7 function - obj = unicode(obj, encoding="ascii", errors="strict") # noqa: F821 - return obj - - -def _ipaddress_match(ipname, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(_to_unicode(ipname).rstrip()) - return ip == host_ip - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError( - "empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED" - ) - try: - # Divergence from upstream: ipaddress can't handle byte str - host_ip = ipaddress.ip_address(_to_unicode(hostname)) - except (UnicodeError, ValueError): - # ValueError: Not an IP address (common case) - # UnicodeError: Divergence from upstream: Have to deal with ipaddress not taking - # byte strings. addresses should be all ascii, so we consider it not - # an ipaddress in this case - host_ip = None - except AttributeError: - # Divergence from upstream: Make ipaddress library optional - if ipaddress is None: - host_ip = None - else: # Defensive - raise - dnsnames = [] - san = cert.get("subjectAltName", ()) - for key, value in san: - if key == "DNS": - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == "IP Address": - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get("subject", ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == "commonName": - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError( - "hostname %r " - "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames))) - ) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0])) - else: - raise CertificateError( - "no appropriate commonName or subjectAltName fields were found" - ) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py deleted file mode 100644 index 4a7105d..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py +++ /dev/null @@ -1,221 +0,0 @@ -import io -import socket -import ssl - -from ..exceptions import ProxySchemeUnsupported -from ..packages import six - -SSL_BLOCKSIZE = 16384 - - -class SSLTransport: - """ - The SSLTransport wraps an existing socket and establishes an SSL connection. - - Contrary to Python's implementation of SSLSocket, it allows you to chain - multiple TLS connections together. It's particularly useful if you need to - implement TLS within TLS. - - The class supports most of the socket API operations. - """ - - @staticmethod - def _validate_ssl_context_for_tls_in_tls(ssl_context): - """ - Raises a ProxySchemeUnsupported if the provided ssl_context can't be used - for TLS in TLS. - - The only requirement is that the ssl_context provides the 'wrap_bio' - methods. - """ - - if not hasattr(ssl_context, "wrap_bio"): - if six.PY2: - raise ProxySchemeUnsupported( - "TLS in TLS requires SSLContext.wrap_bio() which isn't " - "supported on Python 2" - ) - else: - raise ProxySchemeUnsupported( - "TLS in TLS requires SSLContext.wrap_bio() which isn't " - "available on non-native SSLContext" - ) - - def __init__( - self, socket, ssl_context, server_hostname=None, suppress_ragged_eofs=True - ): - """ - Create an SSLTransport around socket using the provided ssl_context. - """ - self.incoming = ssl.MemoryBIO() - self.outgoing = ssl.MemoryBIO() - - self.suppress_ragged_eofs = suppress_ragged_eofs - self.socket = socket - - self.sslobj = ssl_context.wrap_bio( - self.incoming, self.outgoing, server_hostname=server_hostname - ) - - # Perform initial handshake. - self._ssl_io_loop(self.sslobj.do_handshake) - - def __enter__(self): - return self - - def __exit__(self, *_): - self.close() - - def fileno(self): - return self.socket.fileno() - - def read(self, len=1024, buffer=None): - return self._wrap_ssl_read(len, buffer) - - def recv(self, len=1024, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv") - return self._wrap_ssl_read(len) - - def recv_into(self, buffer, nbytes=None, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv_into") - if buffer and (nbytes is None): - nbytes = len(buffer) - elif nbytes is None: - nbytes = 1024 - return self.read(nbytes, buffer) - - def sendall(self, data, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to sendall") - count = 0 - with memoryview(data) as view, view.cast("B") as byte_view: - amount = len(byte_view) - while count < amount: - v = self.send(byte_view[count:]) - count += v - - def send(self, data, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to send") - response = self._ssl_io_loop(self.sslobj.write, data) - return response - - def makefile( - self, mode="r", buffering=None, encoding=None, errors=None, newline=None - ): - """ - Python's httpclient uses makefile and buffered io when reading HTTP - messages and we need to support it. - - This is unfortunately a copy and paste of socket.py makefile with small - changes to point to the socket directly. - """ - if not set(mode) <= {"r", "w", "b"}: - raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) - - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = socket.SocketIO(self, rawmode) - self.socket._io_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text - - def unwrap(self): - self._ssl_io_loop(self.sslobj.unwrap) - - def close(self): - self.socket.close() - - def getpeercert(self, binary_form=False): - return self.sslobj.getpeercert(binary_form) - - def version(self): - return self.sslobj.version() - - def cipher(self): - return self.sslobj.cipher() - - def selected_alpn_protocol(self): - return self.sslobj.selected_alpn_protocol() - - def selected_npn_protocol(self): - return self.sslobj.selected_npn_protocol() - - def shared_ciphers(self): - return self.sslobj.shared_ciphers() - - def compression(self): - return self.sslobj.compression() - - def settimeout(self, value): - self.socket.settimeout(value) - - def gettimeout(self): - return self.socket.gettimeout() - - def _decref_socketios(self): - self.socket._decref_socketios() - - def _wrap_ssl_read(self, len, buffer=None): - try: - return self._ssl_io_loop(self.sslobj.read, len, buffer) - except ssl.SSLError as e: - if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs: - return 0 # eof, return 0. - else: - raise - - def _ssl_io_loop(self, func, *args): - """Performs an I/O loop between incoming/outgoing and the socket.""" - should_loop = True - ret = None - - while should_loop: - errno = None - try: - ret = func(*args) - except ssl.SSLError as e: - if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE): - # WANT_READ, and WANT_WRITE are expected, others are not. - raise e - errno = e.errno - - buf = self.outgoing.read() - self.socket.sendall(buf) - - if errno is None: - should_loop = False - elif errno == ssl.SSL_ERROR_WANT_READ: - buf = self.socket.recv(SSL_BLOCKSIZE) - if buf: - self.incoming.write(buf) - else: - self.incoming.write_eof() - return ret diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py deleted file mode 100644 index 78e18a6..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py +++ /dev/null @@ -1,271 +0,0 @@ -from __future__ import absolute_import - -import time - -# The default socket timeout, used by httplib to indicate that no timeout was; specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - - -# Use time.monotonic if available. -current_time = getattr(time, "monotonic", time.time) - - -class Timeout(object): - """Timeout configuration. - - Timeouts can be defined as a default for a pool: - - .. code-block:: python - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool): - - .. code-block:: python - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``: - - .. code-block:: python - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: int, float, or None - - :param connect: - The maximum amount of time (in seconds) to wait for a connection - attempt to a server to succeed. Omitting the parameter will default the - connect timeout to the system default, probably `the global default - timeout in socket.py - `_. - None will set an infinite timeout for connection attempts. - - :type connect: int, float, or None - - :param read: - The maximum amount of time (in seconds) to wait between consecutive - read operations for a response from the server. Omitting the parameter - will default the read timeout to the system default, probably `the - global default timeout in socket.py - `_. - None will set an infinite timeout. - - :type read: int, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, "connect") - self._read = self._validate_timeout(read, "read") - self.total = self._validate_timeout(total, "total") - self._start_connect = None - - def __repr__(self): - return "%s(connect=%r, read=%r, total=%r)" % ( - type(self).__name__, - self._connect, - self._read, - self.total, - ) - - # __str__ provided for backwards compatibility - __str__ = __repr__ - - @classmethod - def resolve_default_timeout(cls, timeout): - return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout - - @classmethod - def _validate_timeout(cls, value, name): - """Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError( - "Timeout cannot be a boolean value. It must " - "be an int, float or None." - ) - try: - float(value) - except (TypeError, ValueError): - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) - - try: - if value <= 0: - raise ValueError( - "Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value) - ) - except TypeError: - # Python 3 - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) - - return value - - @classmethod - def from_float(cls, timeout): - """Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, total=self.total) - - def start_connect(self): - """Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time in seconds. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError( - "Can't get connect duration for timer that has not started." - ) - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if ( - self.total is not None - and self.total is not self.DEFAULT_TIMEOUT - and self._read is not None - and self._read is not self.DEFAULT_TIMEOUT - ): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py deleted file mode 100644 index a960b2f..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py +++ /dev/null @@ -1,435 +0,0 @@ -from __future__ import absolute_import - -import re -from collections import namedtuple - -from ..exceptions import LocationParseError -from ..packages import six - -url_attrs = ["scheme", "auth", "host", "port", "path", "query", "fragment"] - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -NORMALIZABLE_SCHEMES = ("http", "https", None) - -# Almost all of these patterns were derived from the -# 'rfc3986' module: https://github.com/python-hyper/rfc3986 -PERCENT_RE = re.compile(r"%[a-fA-F0-9]{2}") -SCHEME_RE = re.compile(r"^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)") -URI_RE = re.compile( - r"^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?" - r"(?://([^\\/?#]*))?" - r"([^?#]*)" - r"(?:\?([^#]*))?" - r"(?:#(.*))?$", - re.UNICODE | re.DOTALL, -) - -IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}" -HEX_PAT = "[0-9A-Fa-f]{1,4}" -LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=HEX_PAT, ipv4=IPV4_PAT) -_subs = {"hex": HEX_PAT, "ls32": LS32_PAT} -_variations = [ - # 6( h16 ":" ) ls32 - "(?:%(hex)s:){6}%(ls32)s", - # "::" 5( h16 ":" ) ls32 - "::(?:%(hex)s:){5}%(ls32)s", - # [ h16 ] "::" 4( h16 ":" ) ls32 - "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s", - # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s", - # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s", - # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s", - # [ *4( h16 ":" ) h16 ] "::" ls32 - "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s", - # [ *5( h16 ":" ) h16 ] "::" h16 - "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s", - # [ *6( h16 ":" ) h16 ] "::" - "(?:(?:%(hex)s:){0,6}%(hex)s)?::", -] - -UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~" -IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" -ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" -IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]" -REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*" -TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$") - -IPV4_RE = re.compile("^" + IPV4_PAT + "$") -IPV6_RE = re.compile("^" + IPV6_PAT + "$") -IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT + "$") -BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$") -ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$") - -_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % ( - REG_NAME_PAT, - IPV4_PAT, - IPV6_ADDRZ_PAT, -) -_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL) - -UNRESERVED_CHARS = set( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~" -) -SUB_DELIM_CHARS = set("!$&'()*+,;=") -USERINFO_CHARS = UNRESERVED_CHARS | SUB_DELIM_CHARS | {":"} -PATH_CHARS = USERINFO_CHARS | {"@", "/"} -QUERY_CHARS = FRAGMENT_CHARS = PATH_CHARS | {"?"} - - -class Url(namedtuple("Url", url_attrs)): - """ - Data structure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - - __slots__ = () - - def __new__( - cls, - scheme=None, - auth=None, - host=None, - port=None, - path=None, - query=None, - fragment=None, - ): - if path and not path.startswith("/"): - path = "/" + path - if scheme is not None: - scheme = scheme.lower() - return super(Url, cls).__new__( - cls, scheme, auth, host, port, path, query, fragment - ) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or "/" - - if self.query is not None: - uri += "?" + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return "%s:%d" % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = u"" - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + u"://" - if auth is not None: - url += auth + u"@" - if host is not None: - url += host - if port is not None: - url += u":" + str(port) - if path is not None: - url += path - if query is not None: - url += u"?" + query - if fragment is not None: - url += u"#" + fragment - - return url - - def __str__(self): - return self.url - - -def split_first(s, delims): - """ - .. deprecated:: 1.25 - - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, "", None - - return s[:min_idx], s[min_idx + 1 :], min_delim - - -def _encode_invalid_chars(component, allowed_chars, encoding="utf-8"): - """Percent-encodes a URI component without reapplying - onto an already percent-encoded component. - """ - if component is None: - return component - - component = six.ensure_text(component) - - # Normalize existing percent-encoded bytes. - # Try to see if the component we're encoding is already percent-encoded - # so we can skip all '%' characters but still encode all others. - component, percent_encodings = PERCENT_RE.subn( - lambda match: match.group(0).upper(), component - ) - - uri_bytes = component.encode("utf-8", "surrogatepass") - is_percent_encoded = percent_encodings == uri_bytes.count(b"%") - encoded_component = bytearray() - - for i in range(0, len(uri_bytes)): - # Will return a single character bytestring on both Python 2 & 3 - byte = uri_bytes[i : i + 1] - byte_ord = ord(byte) - if (is_percent_encoded and byte == b"%") or ( - byte_ord < 128 and byte.decode() in allowed_chars - ): - encoded_component += byte - continue - encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper())) - - return encoded_component.decode(encoding) - - -def _remove_path_dot_segments(path): - # See http://tools.ietf.org/html/rfc3986#section-5.2.4 for pseudo-code - segments = path.split("/") # Turn the path into a list of segments - output = [] # Initialize the variable to use to store output - - for segment in segments: - # '.' is the current directory, so ignore it, it is superfluous - if segment == ".": - continue - # Anything other than '..', should be appended to the output - elif segment != "..": - output.append(segment) - # In this case segment == '..', if we can, we should pop the last - # element - elif output: - output.pop() - - # If the path starts with '/' and the output is empty or the first string - # is non-empty - if path.startswith("/") and (not output or output[0]): - output.insert(0, "") - - # If the path starts with '/.' or '/..' ensure we add one more empty - # string to add a trailing '/' - if path.endswith(("/.", "/..")): - output.append("") - - return "/".join(output) - - -def _normalize_host(host, scheme): - if host: - if isinstance(host, six.binary_type): - host = six.ensure_str(host) - - if scheme in NORMALIZABLE_SCHEMES: - is_ipv6 = IPV6_ADDRZ_RE.match(host) - if is_ipv6: - # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as - # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID - # separator as necessary to return a valid RFC 4007 scoped IP. - match = ZONE_ID_RE.search(host) - if match: - start, end = match.span(1) - zone_id = host[start:end] - - if zone_id.startswith("%25") and zone_id != "%25": - zone_id = zone_id[3:] - else: - zone_id = zone_id[1:] - zone_id = "%" + _encode_invalid_chars(zone_id, UNRESERVED_CHARS) - return host[:start].lower() + zone_id + host[end:] - else: - return host.lower() - elif not IPV4_RE.match(host): - return six.ensure_str( - b".".join([_idna_encode(label) for label in host.split(".")]) - ) - return host - - -def _idna_encode(name): - if name and any(ord(x) >= 128 for x in name): - try: - from pip._vendor import idna - except ImportError: - six.raise_from( - LocationParseError("Unable to parse URL without the 'idna' module"), - None, - ) - try: - return idna.encode(name.lower(), strict=True, std3_rules=True) - except idna.IDNAError: - six.raise_from( - LocationParseError(u"Name '%s' is not a valid IDNA label" % name), None - ) - return name.lower().encode("ascii") - - -def _encode_target(target): - """Percent-encodes a request target so that there are no invalid characters""" - path, query = TARGET_RE.match(target).groups() - target = _encode_invalid_chars(path, PATH_CHARS) - query = _encode_invalid_chars(query, QUERY_CHARS) - if query is not None: - target += "?" + query - return target - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - This parser is RFC 3986 and RFC 6874 compliant. - - The parser logic and helper functions are based heavily on - work done in the ``rfc3986`` module. - - :param str url: URL to parse into a :class:`.Url` namedtuple. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - if not url: - # Empty - return Url() - - source_url = url - if not SCHEME_RE.search(url): - url = "//" + url - - try: - scheme, authority, path, query, fragment = URI_RE.match(url).groups() - normalize_uri = scheme is None or scheme.lower() in NORMALIZABLE_SCHEMES - - if scheme: - scheme = scheme.lower() - - if authority: - auth, _, host_port = authority.rpartition("@") - auth = auth or None - host, port = _HOST_PORT_RE.match(host_port).groups() - if auth and normalize_uri: - auth = _encode_invalid_chars(auth, USERINFO_CHARS) - if port == "": - port = None - else: - auth, host, port = None, None, None - - if port is not None: - port = int(port) - if not (0 <= port <= 65535): - raise LocationParseError(url) - - host = _normalize_host(host, scheme) - - if normalize_uri and path: - path = _remove_path_dot_segments(path) - path = _encode_invalid_chars(path, PATH_CHARS) - if normalize_uri and query: - query = _encode_invalid_chars(query, QUERY_CHARS) - if normalize_uri and fragment: - fragment = _encode_invalid_chars(fragment, FRAGMENT_CHARS) - - except (ValueError, AttributeError): - return six.raise_from(LocationParseError(source_url), None) - - # For the sake of backwards compatibility we put empty - # string values for path if there are any defined values - # beyond the path in the URL. - # TODO: Remove this when we break backwards compatibility. - if not path: - if query is not None or fragment is not None: - path = "" - else: - path = None - - # Ensure that each part of the URL is a `str` for - # backwards compatibility. - if isinstance(url, six.text_type): - ensure_func = six.ensure_text - else: - ensure_func = six.ensure_str - - def ensure_type(x): - return x if x is None else ensure_func(x) - - return Url( - scheme=ensure_type(scheme), - auth=ensure_type(auth), - host=ensure_type(host), - port=port, - path=ensure_type(path), - query=ensure_type(query), - fragment=ensure_type(fragment), - ) - - -def get_host(url): - """ - Deprecated. Use :func:`parse_url` instead. - """ - p = parse_url(url) - return p.scheme or "http", p.hostname, p.port diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py b/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py deleted file mode 100644 index 21b4590..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py +++ /dev/null @@ -1,152 +0,0 @@ -import errno -import select -import sys -from functools import partial - -try: - from time import monotonic -except ImportError: - from time import time as monotonic - -__all__ = ["NoWayToWaitForSocketError", "wait_for_read", "wait_for_write"] - - -class NoWayToWaitForSocketError(Exception): - pass - - -# How should we wait on sockets? -# -# There are two types of APIs you can use for waiting on sockets: the fancy -# modern stateful APIs like epoll/kqueue, and the older stateless APIs like -# select/poll. The stateful APIs are more efficient when you have a lots of -# sockets to keep track of, because you can set them up once and then use them -# lots of times. But we only ever want to wait on a single socket at a time -# and don't want to keep track of state, so the stateless APIs are actually -# more efficient. So we want to use select() or poll(). -# -# Now, how do we choose between select() and poll()? On traditional Unixes, -# select() has a strange calling convention that makes it slow, or fail -# altogether, for high-numbered file descriptors. The point of poll() is to fix -# that, so on Unixes, we prefer poll(). -# -# On Windows, there is no poll() (or at least Python doesn't provide a wrapper -# for it), but that's OK, because on Windows, select() doesn't have this -# strange calling convention; plain select() works fine. -# -# So: on Windows we use select(), and everywhere else we use poll(). We also -# fall back to select() in case poll() is somehow broken or missing. - -if sys.version_info >= (3, 5): - # Modern Python, that retries syscalls by default - def _retry_on_intr(fn, timeout): - return fn(timeout) - -else: - # Old and broken Pythons. - def _retry_on_intr(fn, timeout): - if timeout is None: - deadline = float("inf") - else: - deadline = monotonic() + timeout - - while True: - try: - return fn(timeout) - # OSError for 3 <= pyver < 3.5, select.error for pyver <= 2.7 - except (OSError, select.error) as e: - # 'e.args[0]' incantation works for both OSError and select.error - if e.args[0] != errno.EINTR: - raise - else: - timeout = deadline - monotonic() - if timeout < 0: - timeout = 0 - if timeout == float("inf"): - timeout = None - continue - - -def select_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - rcheck = [] - wcheck = [] - if read: - rcheck.append(sock) - if write: - wcheck.append(sock) - # When doing a non-blocking connect, most systems signal success by - # marking the socket writable. Windows, though, signals success by marked - # it as "exceptional". We paper over the difference by checking the write - # sockets for both conditions. (The stdlib selectors module does the same - # thing.) - fn = partial(select.select, rcheck, wcheck, wcheck) - rready, wready, xready = _retry_on_intr(fn, timeout) - return bool(rready or wready or xready) - - -def poll_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - mask = 0 - if read: - mask |= select.POLLIN - if write: - mask |= select.POLLOUT - poll_obj = select.poll() - poll_obj.register(sock, mask) - - # For some reason, poll() takes timeout in milliseconds - def do_poll(t): - if t is not None: - t *= 1000 - return poll_obj.poll(t) - - return bool(_retry_on_intr(do_poll, timeout)) - - -def null_wait_for_socket(*args, **kwargs): - raise NoWayToWaitForSocketError("no select-equivalent available") - - -def _have_working_poll(): - # Apparently some systems have a select.poll that fails as soon as you try - # to use it, either due to strange configuration or broken monkeypatching - # from libraries like eventlet/greenlet. - try: - poll_obj = select.poll() - _retry_on_intr(poll_obj.poll, 0) - except (AttributeError, OSError): - return False - else: - return True - - -def wait_for_socket(*args, **kwargs): - # We delay choosing which implementation to use until the first time we're - # called. We could do it at import time, but then we might make the wrong - # decision if someone goes wild with monkeypatching select.poll after - # we're imported. - global wait_for_socket - if _have_working_poll(): - wait_for_socket = poll_wait_for_socket - elif hasattr(select, "select"): - wait_for_socket = select_wait_for_socket - else: # Platform-specific: Appengine. - wait_for_socket = null_wait_for_socket - return wait_for_socket(*args, **kwargs) - - -def wait_for_read(sock, timeout=None): - """Waits for reading to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, read=True, timeout=timeout) - - -def wait_for_write(sock, timeout=None): - """Waits for writing to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, write=True, timeout=timeout) diff --git a/myenv/lib/python3.12/site-packages/pip/_vendor/vendor.txt b/myenv/lib/python3.12/site-packages/pip/_vendor/vendor.txt deleted file mode 100644 index f04a9c1..0000000 --- a/myenv/lib/python3.12/site-packages/pip/_vendor/vendor.txt +++ /dev/null @@ -1,18 +0,0 @@ -CacheControl==0.14.1 -distlib==0.3.9 -distro==1.9.0 -msgpack==1.1.0 -packaging==24.2 -platformdirs==4.3.6 -pyproject-hooks==1.2.0 -requests==2.32.3 - certifi==2024.8.30 - idna==3.10 - urllib3==1.26.20 -rich==13.9.4 - pygments==2.18.0 - typing_extensions==4.12.2 -resolvelib==1.0.1 -setuptools==70.3.0 -tomli==2.2.1 -truststore==0.10.0 diff --git a/myenv/lib/python3.12/site-packages/pip/py.typed b/myenv/lib/python3.12/site-packages/pip/py.typed deleted file mode 100644 index 493b53e..0000000 --- a/myenv/lib/python3.12/site-packages/pip/py.typed +++ /dev/null @@ -1,4 +0,0 @@ -pip is a command line program. While it is implemented in Python, and so is -available for import, you must not use pip's internal APIs in this way. Typing -information is provided as a convenience only and is not a guarantee. Expect -unannounced changes to the API and types in releases. diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/LICENSE deleted file mode 100644 index cff5eb7..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the psutil authors nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/METADATA b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/METADATA deleted file mode 100644 index 0c7c91f..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/METADATA +++ /dev/null @@ -1,553 +0,0 @@ -Metadata-Version: 2.1 -Name: psutil -Version: 7.1.3 -Summary: Cross-platform lib for process and system monitoring. -Home-page: https://github.com/giampaolo/psutil -Author: Giampaolo Rodola -Author-email: g.rodola@gmail.com -License: BSD-3-Clause -Keywords: ps,top,kill,free,lsof,netstat,nice,tty,ionice,uptime,taskmgr,process,df,iotop,iostat,ifconfig,taskset,who,pidof,pmap,smem,pstree,monitoring,ulimit,prlimit,smem,performance,metrics,agent,observability -Platform: Platform Independent -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: Information Technology -Classifier: Intended Audience :: System Administrators -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Operating System :: Microsoft :: Windows :: Windows 10 -Classifier: Operating System :: Microsoft :: Windows :: Windows 11 -Classifier: Operating System :: Microsoft :: Windows :: Windows 7 -Classifier: Operating System :: Microsoft :: Windows :: Windows 8 -Classifier: Operating System :: Microsoft :: Windows :: Windows 8.1 -Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2003 -Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2008 -Classifier: Operating System :: Microsoft :: Windows :: Windows Vista -Classifier: Operating System :: Microsoft :: Windows -Classifier: Operating System :: Microsoft -Classifier: Operating System :: OS Independent -Classifier: Operating System :: POSIX :: AIX -Classifier: Operating System :: POSIX :: BSD :: FreeBSD -Classifier: Operating System :: POSIX :: BSD :: NetBSD -Classifier: Operating System :: POSIX :: BSD :: OpenBSD -Classifier: Operating System :: POSIX :: BSD -Classifier: Operating System :: POSIX :: Linux -Classifier: Operating System :: POSIX :: SunOS/Solaris -Classifier: Operating System :: POSIX -Classifier: Programming Language :: C -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Programming Language :: Python -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Software Development :: Libraries -Classifier: Topic :: System :: Benchmark -Classifier: Topic :: System :: Hardware -Classifier: Topic :: System :: Monitoring -Classifier: Topic :: System :: Networking :: Monitoring :: Hardware Watchdog -Classifier: Topic :: System :: Networking :: Monitoring -Classifier: Topic :: System :: Networking -Classifier: Topic :: System :: Operating System -Classifier: Topic :: System :: Systems Administration -Classifier: Topic :: Utilities -Requires-Python: >=3.6 -Description-Content-Type: text/x-rst -License-File: LICENSE -Provides-Extra: dev -Requires-Dist: pytest ; extra == 'dev' -Requires-Dist: pytest-instafail ; extra == 'dev' -Requires-Dist: pytest-subtests ; extra == 'dev' -Requires-Dist: pytest-xdist ; extra == 'dev' -Requires-Dist: setuptools ; extra == 'dev' -Requires-Dist: abi3audit ; extra == 'dev' -Requires-Dist: black ; extra == 'dev' -Requires-Dist: check-manifest ; extra == 'dev' -Requires-Dist: coverage ; extra == 'dev' -Requires-Dist: packaging ; extra == 'dev' -Requires-Dist: pylint ; extra == 'dev' -Requires-Dist: pyperf ; extra == 'dev' -Requires-Dist: pypinfo ; extra == 'dev' -Requires-Dist: pytest-cov ; extra == 'dev' -Requires-Dist: requests ; extra == 'dev' -Requires-Dist: rstcheck ; extra == 'dev' -Requires-Dist: ruff ; extra == 'dev' -Requires-Dist: sphinx ; extra == 'dev' -Requires-Dist: sphinx-rtd-theme ; extra == 'dev' -Requires-Dist: toml-sort ; extra == 'dev' -Requires-Dist: twine ; extra == 'dev' -Requires-Dist: validate-pyproject[all] ; extra == 'dev' -Requires-Dist: virtualenv ; extra == 'dev' -Requires-Dist: vulture ; extra == 'dev' -Requires-Dist: wheel ; extra == 'dev' -Requires-Dist: colorama ; (os_name == "nt") and extra == 'dev' -Requires-Dist: pyreadline ; (os_name == "nt") and extra == 'dev' -Requires-Dist: pywin32 ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'dev' -Requires-Dist: wheel ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'dev' -Requires-Dist: wmi ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'dev' -Provides-Extra: test -Requires-Dist: pytest ; extra == 'test' -Requires-Dist: pytest-instafail ; extra == 'test' -Requires-Dist: pytest-subtests ; extra == 'test' -Requires-Dist: pytest-xdist ; extra == 'test' -Requires-Dist: setuptools ; extra == 'test' -Requires-Dist: pywin32 ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'test' -Requires-Dist: wheel ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'test' -Requires-Dist: wmi ; (os_name == "nt" and platform_python_implementation != "PyPy") and extra == 'test' - -| |downloads| |stars| |forks| |contributors| |coverage| -| |version| |packages| |license| -| |github-actions-wheels| |github-actions-bsd| |doc| |twitter| |tidelift| - -.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg - :target: https://clickpy.clickhouse.com/dashboard/psutil - :alt: Downloads - -.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg - :target: https://github.com/giampaolo/psutil/stargazers - :alt: Github stars - -.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg - :target: https://github.com/giampaolo/psutil/network/members - :alt: Github forks - -.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg - :target: https://github.com/giampaolo/psutil/graphs/contributors - :alt: Contributors - -.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows - :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild - :alt: Linux, macOS, Windows - -.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD - :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests - :alt: FreeBSD, NetBSD, OpenBSD - -.. |coverage| image:: https://coveralls.io/repos/github/giampaolo/psutil/badge.svg?branch=master - :target: https://coveralls.io/github/giampaolo/psutil?branch=master - :alt: Test coverage (coverall.io) - -.. |doc| image:: https://readthedocs.org/projects/psutil/badge/?version=latest - :target: https://psutil.readthedocs.io/en/latest/ - :alt: Documentation Status - -.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi - :target: https://pypi.org/project/psutil - :alt: Latest version - -.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg - :target: https://repology.org/metapackage/python:psutil/versions - :alt: Binary packages - -.. |license| image:: https://img.shields.io/pypi/l/psutil.svg - :target: https://github.com/giampaolo/psutil/blob/master/LICENSE - :alt: License - -.. |twitter| image:: https://img.shields.io/twitter/follow/grodola.svg?label=follow&style=flat&logo=twitter&logoColor=4FADFF - :target: https://twitter.com/grodola - :alt: Twitter Follow - -.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat - :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme - :alt: Tidelift - ------ - -Quick links -=========== - -- `Home page `_ -- `Install `_ -- `Documentation `_ -- `Download `_ -- `Forum `_ -- `StackOverflow `_ -- `Blog `_ -- `What's new `_ - - -Summary -======= - -psutil (process and system utilities) is a cross-platform library for -retrieving information on **running processes** and **system utilization** -(CPU, memory, disks, network, sensors) in Python. -It is useful mainly for **system monitoring**, **profiling and limiting process -resources** and **management of running processes**. -It implements many functionalities offered by classic UNIX command line tools -such as *ps, top, iotop, lsof, netstat, ifconfig, free* and others. -psutil currently supports the following platforms: - -- **Linux** -- **Windows** -- **macOS** -- **FreeBSD, OpenBSD**, **NetBSD** -- **Sun Solaris** -- **AIX** - -Supported Python versions are cPython 3.6+ and `PyPy `__. -Latest psutil version supporting Python 2.7 is -`psutil 6.1.1 `__. - -Funding -======= - -While psutil is free software and will always be, the project would benefit -immensely from some funding. -Keeping up with bug reports and maintenance has become hardly sustainable for -me alone in terms of time. -If you're a company that's making significant use of psutil you can consider -becoming a sponsor via `GitHub Sponsors `__, -`Open Collective `__ or -`PayPal `__ -and have your logo displayed in here and psutil `doc `__. - -Sponsors -======== - -.. image:: https://github.com/giampaolo/psutil/raw/master/docs/_static/tidelift-logo.png - :width: 200 - :alt: Alternative text - -`Add your logo `__. - -Example usages -============== - -This represents pretty much the whole psutil API. - -CPU ---- - -.. code-block:: python - - >>> import psutil - >>> - >>> psutil.cpu_times() - scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0) - >>> - >>> for x in range(3): - ... psutil.cpu_percent(interval=1) - ... - 4.0 - 5.9 - 3.8 - >>> - >>> for x in range(3): - ... psutil.cpu_percent(interval=1, percpu=True) - ... - [4.0, 6.9, 3.7, 9.2] - [7.0, 8.5, 2.4, 2.1] - [1.2, 9.0, 9.9, 7.2] - >>> - >>> for x in range(3): - ... psutil.cpu_times_percent(interval=1, percpu=False) - ... - scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) - scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) - scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) - >>> - >>> psutil.cpu_count() - 4 - >>> psutil.cpu_count(logical=False) - 2 - >>> - >>> psutil.cpu_stats() - scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0) - >>> - >>> psutil.cpu_freq() - scpufreq(current=931.42925, min=800.0, max=3500.0) - >>> - >>> psutil.getloadavg() # also on Windows (emulated) - (3.14, 3.89, 4.67) - -Memory ------- - -.. code-block:: python - - >>> psutil.virtual_memory() - svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304) - >>> psutil.swap_memory() - sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944) - >>> - -Disks ------ - -.. code-block:: python - - >>> psutil.disk_partitions() - [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'), - sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')] - >>> - >>> psutil.disk_usage('/') - sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5) - >>> - >>> psutil.disk_io_counters(perdisk=False) - sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412) - >>> - -Network -------- - -.. code-block:: python - - >>> psutil.net_io_counters(pernic=True) - {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0), - 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)} - >>> - >>> psutil.net_connections(kind='tcp') - [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254), - sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987), - ...] - >>> - >>> psutil.net_if_addrs() - {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None), - snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), - snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)], - 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None), - snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), - snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]} - >>> - >>> psutil.net_if_stats() - {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'), - 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')} - >>> - -Sensors -------- - -.. code-block:: python - - >>> import psutil - >>> psutil.sensors_temperatures() - {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)], - 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)], - 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0), - shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]} - >>> - >>> psutil.sensors_fans() - {'asus': [sfan(label='cpu_fan', current=3200)]} - >>> - >>> psutil.sensors_battery() - sbattery(percent=93, secsleft=16628, power_plugged=False) - >>> - -Other system info ------------------ - -.. code-block:: python - - >>> import psutil - >>> psutil.users() - [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352), - suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)] - >>> - >>> psutil.boot_time() - 1365519115.0 - >>> - -Process management ------------------- - -.. code-block:: python - - >>> import psutil - >>> psutil.pids() - [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215, - 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932, - 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311, - 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433, - 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054, - 7055, 7071] - >>> - >>> p = psutil.Process(7055) - >>> p - psutil.Process(pid=7055, name='python3', status='running', started='09:04:44') - >>> p.pid - 7055 - >>> p.name() - 'python3' - >>> p.exe() - '/usr/bin/python3' - >>> p.cwd() - '/home/giampaolo' - >>> p.cmdline() - ['/usr/bin/python3', 'main.py'] - >>> - >>> p.ppid() - 7054 - >>> p.parent() - psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44') - >>> p.parents() - [psutil.Process(pid=4699, name='bash', started='09:06:44'), - psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'), - psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')] - >>> p.children(recursive=True) - [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'), - psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')] - >>> - >>> p.status() - 'running' - >>> p.create_time() - 1267551141.5019531 - >>> p.terminal() - '/dev/pts/0' - >>> - >>> p.username() - 'giampaolo' - >>> p.uids() - puids(real=1000, effective=1000, saved=1000) - >>> p.gids() - pgids(real=1000, effective=1000, saved=1000) - >>> - >>> p.cpu_times() - pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0) - >>> p.cpu_percent(interval=1.0) - 12.1 - >>> p.cpu_affinity() - [0, 1, 2, 3] - >>> p.cpu_affinity([0, 1]) # set - >>> p.cpu_num() - 1 - >>> - >>> p.memory_info() - pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0) - >>> p.memory_full_info() # "real" USS memory usage (Linux, macOS, Win only) - pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0) - >>> p.memory_percent() - 0.7823 - >>> p.memory_maps() - [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0), - pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0), - pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0), - pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0), - ...] - >>> - >>> p.io_counters() - pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543) - >>> - >>> p.open_files() - [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768), - popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)] - >>> - >>> p.net_connections(kind='tcp') - [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'), - pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')] - >>> - >>> p.threads() - [pthread(id=5234, user_time=22.5, system_time=9.2891), - pthread(id=5237, user_time=0.0707, system_time=1.1)] - >>> - >>> p.num_threads() - 4 - >>> p.num_fds() - 8 - >>> p.num_ctx_switches() - pctxsw(voluntary=78, involuntary=19) - >>> - >>> p.nice() - 0 - >>> p.nice(10) # set - >>> - >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only) - >>> p.ionice() - pionice(ioclass=, value=0) - >>> - >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only) - >>> p.rlimit(psutil.RLIMIT_NOFILE) - (5, 5) - >>> - >>> p.environ() - {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto', - 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg', - ...} - >>> - >>> p.as_dict() - {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...} - >>> p.is_running() - True - >>> p.suspend() - >>> p.resume() - >>> - >>> p.terminate() - >>> p.kill() - >>> p.wait(timeout=3) - - >>> - >>> psutil.test() - USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND - root 1 0.0 0.0 24584 2240 Jun17 00:00 init - root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd - ... - giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4 - giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome - root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1 - >>> - -Further process APIs --------------------- - -.. code-block:: python - - >>> import psutil - >>> for proc in psutil.process_iter(['pid', 'name']): - ... print(proc.info) - ... - {'pid': 1, 'name': 'systemd'} - {'pid': 2, 'name': 'kthreadd'} - {'pid': 3, 'name': 'ksoftirqd/0'} - ... - >>> - >>> psutil.pid_exists(3) - True - >>> - >>> def on_terminate(proc): - ... print("process {} terminated".format(proc)) - ... - >>> # waits for multiple processes to terminate - >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate) - >>> - -Windows services ----------------- - -.. code-block:: python - - >>> list(psutil.win_service_iter()) - [, - , - , - , - ...] - >>> s = psutil.win_service_get('alg') - >>> s.as_dict() - {'binpath': 'C:\\Windows\\System32\\alg.exe', - 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing', - 'display_name': 'Application Layer Gateway Service', - 'name': 'alg', - 'pid': None, - 'start_type': 'manual', - 'status': 'stopped', - 'username': 'NT AUTHORITY\\LocalService'} - -Projects using psutil -===================== - -Here's some I find particularly interesting: - -- https://github.com/google/grr -- https://github.com/facebook/osquery/ -- https://github.com/nicolargo/glances -- https://github.com/aristocratos/bpytop -- https://github.com/Jahaja/psdash -- https://github.com/ajenti/ajenti -- https://github.com/home-assistant/home-assistant/ - -Portings -======== - -- Go: https://github.com/shirou/gopsutil -- C: https://github.com/hamon-in/cpslib -- Rust: https://github.com/rust-psutil/rust-psutil -- Nim: https://github.com/johnscillieri/psutil-nim - diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/RECORD b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/RECORD deleted file mode 100644 index 3a616e5..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/RECORD +++ /dev/null @@ -1,65 +0,0 @@ -psutil-7.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -psutil-7.1.3.dist-info/LICENSE,sha256=uJwGOzeG4o4MCjjxkx22H-015p3SopZvvs_-4PRsjRA,1548 -psutil-7.1.3.dist-info/METADATA,sha256=NXjcTuX0PlQtKYOXQbnj2HYMPA5djDiOwrC5gL2MZqE,23082 -psutil-7.1.3.dist-info/RECORD,, -psutil-7.1.3.dist-info/WHEEL,sha256=k0riQKE5_0GXActL4egeNSDuQ6nsFSKiWV91AD_j7xg,184 -psutil-7.1.3.dist-info/top_level.txt,sha256=gCNhn57wzksDjSAISmgMJ0aiXzQulk0GJhb2-BAyYgw,7 -psutil/__init__.py,sha256=7BTYRH1NsMvPBQyeRKqecd5d-JcxaeNFwnXtPYckDzo,87789 -psutil/__pycache__/__init__.cpython-312.pyc,, -psutil/__pycache__/_common.cpython-312.pyc,, -psutil/__pycache__/_psaix.cpython-312.pyc,, -psutil/__pycache__/_psbsd.cpython-312.pyc,, -psutil/__pycache__/_pslinux.cpython-312.pyc,, -psutil/__pycache__/_psosx.cpython-312.pyc,, -psutil/__pycache__/_psposix.cpython-312.pyc,, -psutil/__pycache__/_pssunos.cpython-312.pyc,, -psutil/__pycache__/_pswindows.cpython-312.pyc,, -psutil/_common.py,sha256=kDPOMktstdNqB0MbHgCvjR2wl8DQmwfIauBZXOsYLsI,28584 -psutil/_psaix.py,sha256=Pcos7TWAKSoU-eNFQ-u8wpMKlOS5xnA1f1TMgtmpC2s,18179 -psutil/_psbsd.py,sha256=K_Dn2NU6XsgW2ZTrVB5sH3AaQ6TGc3Q09a4rUcX-a6w,30701 -psutil/_pslinux.py,sha256=FFjrlyH8_vZndau5DBLpXFxePZ0AozDIKtF0Tn0_BgM,86321 -psutil/_psosx.py,sha256=ixb1t2ketUSzt8_AzVkixT8cly8qf7J5qet8KLZsZIo,16541 -psutil/_psposix.py,sha256=5pBE2Mk8LCWLthOpgKM5_S6AJOSankF0dHrozwtDi-Y,7141 -psutil/_pssunos.py,sha256=K99FU9-0k1W08ynXxX8LFaUaz4e59Iu-4vgp6gYSNCE,24848 -psutil/_psutil_linux.abi3.so,sha256=EiNyuoEmue7geZAxz5owrp6iFwHUfWsGEjtrDtgLJ_E,146080 -psutil/_pswindows.py,sha256=QInpXnEXWc_FyN0cHkgb53p-USMbWEgRqQG95iGnH64,36532 -psutil/tests/__init__.py,sha256=Q3__qjPt0V50DSfzMqjFEPyvDN2Tp8SmbZ-QRhPwPSM,62903 -psutil/tests/__main__.py,sha256=S1hzDPelhUBG_XfWAR0vh0bCeFFBOGpt_j1TAI5fnaM,305 -psutil/tests/__pycache__/__init__.cpython-312.pyc,, -psutil/tests/__pycache__/__main__.cpython-312.pyc,, -psutil/tests/__pycache__/test_aix.cpython-312.pyc,, -psutil/tests/__pycache__/test_bsd.cpython-312.pyc,, -psutil/tests/__pycache__/test_connections.cpython-312.pyc,, -psutil/tests/__pycache__/test_contracts.cpython-312.pyc,, -psutil/tests/__pycache__/test_linux.cpython-312.pyc,, -psutil/tests/__pycache__/test_memleaks.cpython-312.pyc,, -psutil/tests/__pycache__/test_misc.cpython-312.pyc,, -psutil/tests/__pycache__/test_osx.cpython-312.pyc,, -psutil/tests/__pycache__/test_posix.cpython-312.pyc,, -psutil/tests/__pycache__/test_process.cpython-312.pyc,, -psutil/tests/__pycache__/test_process_all.cpython-312.pyc,, -psutil/tests/__pycache__/test_scripts.cpython-312.pyc,, -psutil/tests/__pycache__/test_sudo.cpython-312.pyc,, -psutil/tests/__pycache__/test_sunos.cpython-312.pyc,, -psutil/tests/__pycache__/test_system.cpython-312.pyc,, -psutil/tests/__pycache__/test_testutils.cpython-312.pyc,, -psutil/tests/__pycache__/test_unicode.cpython-312.pyc,, -psutil/tests/__pycache__/test_windows.cpython-312.pyc,, -psutil/tests/test_aix.py,sha256=O5IqMAU3qw1NXvI-nhNb9v1LbNHb1q3iFRe5OkqgpoI,4408 -psutil/tests/test_bsd.py,sha256=Q2WmwU97yKuWYBE5qug_-MJdKW_AEKGoYs2RSYYWe7I,19997 -psutil/tests/test_connections.py,sha256=E8rOBe-jumVQ21ZWSo__JYepa9QNS1sdgQrQw75y47Q,21240 -psutil/tests/test_contracts.py,sha256=MQZN5981o_uXzmJnZMfzZo6NJGojekXDDCCbrZme7LQ,12183 -psutil/tests/test_linux.py,sha256=ELiN1bnDXBEArrAkQpvdOIG8YLxsG20NDkVxYWraYxA,88562 -psutil/tests/test_memleaks.py,sha256=MRc75HtM_LyK_Sq4OOtlHrsS0ykjx1CJkPwvpHn6wfs,15076 -psutil/tests/test_misc.py,sha256=ZrJCALG_JF2Wfe9cjJ7SgXx9EbPDZL0GGIhGiV3qS7s,29414 -psutil/tests/test_osx.py,sha256=-n81JFHAar8Ish7HDwyPxEChpsQZCS4d3egP1epkdH8,6668 -psutil/tests/test_posix.py,sha256=TREpzTFB02SpkDQLiFPdlyCtHjxgzk8y6LjvyX4PWe8,17391 -psutil/tests/test_process.py,sha256=PUfqA69CNKfwGSjeDQk0lciabpldFx_nxycZPIlQL5c,60114 -psutil/tests/test_process_all.py,sha256=EHZ4zJar6xHH-eAMyV92q0E4D__7LoVpB3wPJfDwk8A,18636 -psutil/tests/test_scripts.py,sha256=lIOH0ASZdsfVKN-SvefCSb4iZjlmEMT8pZ-XtTiOQ2w,7877 -psutil/tests/test_sudo.py,sha256=DdTBSh3l5pelXZ2O2plWcT2NZHF-29U2vK007S0OTfo,3837 -psutil/tests/test_sunos.py,sha256=78nUq_4I2ALidWLiOGRjgP7ykFiGm8eGV3JNAiIoOVs,1190 -psutil/tests/test_system.py,sha256=Juuk9qZ14yS4en5pteH5nxh2Xrbgu29MZklVqz4B8Qc,35533 -psutil/tests/test_testutils.py,sha256=8kf_h7Nezpbbqs7v2rNFw8bikhVpYnc-fS4hv8tFgE0,18788 -psutil/tests/test_unicode.py,sha256=m2fAfhg_2WzVHoKnkUu1dpPkA6TZ5-wmXJ1U7H3rcoo,10723 -psutil/tests/test_windows.py,sha256=P10qHGtzY0YLLPOJjuwU5B0eICy4sRpYes95DKnUtUk,34421 diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/WHEEL deleted file mode 100644 index 0c46bf3..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/WHEEL +++ /dev/null @@ -1,7 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.3.2) -Root-Is-Purelib: false -Tag: cp36-abi3-manylinux_2_12_x86_64 -Tag: cp36-abi3-manylinux2010_x86_64 -Tag: cp36-abi3-manylinux_2_28_x86_64 - diff --git a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/top_level.txt deleted file mode 100644 index a4d92cc..0000000 --- a/myenv/lib/python3.12/site-packages/psutil-7.1.3.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -psutil diff --git a/myenv/lib/python3.12/site-packages/psutil/__init__.py b/myenv/lib/python3.12/site-packages/psutil/__init__.py deleted file mode 100644 index 9251770..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/__init__.py +++ /dev/null @@ -1,2425 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""psutil is a cross-platform library for retrieving information on -running processes and system utilization (CPU, memory, disks, network, -sensors) in Python. Supported platforms: - - - Linux - - Windows - - macOS - - FreeBSD - - OpenBSD - - NetBSD - - Sun Solaris - - AIX - -Supported Python versions are cPython 3.6+ and PyPy. -""" - -import collections -import contextlib -import datetime -import functools -import os -import signal -import socket -import subprocess -import sys -import threading -import time - -try: - import pwd -except ImportError: - pwd = None - -from . import _common -from ._common import AIX -from ._common import BSD -from ._common import CONN_CLOSE -from ._common import CONN_CLOSE_WAIT -from ._common import CONN_CLOSING -from ._common import CONN_ESTABLISHED -from ._common import CONN_FIN_WAIT1 -from ._common import CONN_FIN_WAIT2 -from ._common import CONN_LAST_ACK -from ._common import CONN_LISTEN -from ._common import CONN_NONE -from ._common import CONN_SYN_RECV -from ._common import CONN_SYN_SENT -from ._common import CONN_TIME_WAIT -from ._common import FREEBSD -from ._common import LINUX -from ._common import MACOS -from ._common import NETBSD -from ._common import NIC_DUPLEX_FULL -from ._common import NIC_DUPLEX_HALF -from ._common import NIC_DUPLEX_UNKNOWN -from ._common import OPENBSD -from ._common import OSX # deprecated alias -from ._common import POSIX -from ._common import POWER_TIME_UNKNOWN -from ._common import POWER_TIME_UNLIMITED -from ._common import STATUS_DEAD -from ._common import STATUS_DISK_SLEEP -from ._common import STATUS_IDLE -from ._common import STATUS_LOCKED -from ._common import STATUS_PARKED -from ._common import STATUS_RUNNING -from ._common import STATUS_SLEEPING -from ._common import STATUS_STOPPED -from ._common import STATUS_TRACING_STOP -from ._common import STATUS_WAITING -from ._common import STATUS_WAKING -from ._common import STATUS_ZOMBIE -from ._common import SUNOS -from ._common import WINDOWS -from ._common import AccessDenied -from ._common import Error -from ._common import NoSuchProcess -from ._common import TimeoutExpired -from ._common import ZombieProcess -from ._common import debug -from ._common import memoize_when_activated -from ._common import wrap_numbers as _wrap_numbers - -if LINUX: - # This is public API and it will be retrieved from _pslinux.py - # via sys.modules. - PROCFS_PATH = "/proc" - - from . import _pslinux as _psplatform - from ._pslinux import IOPRIO_CLASS_BE # noqa: F401 - from ._pslinux import IOPRIO_CLASS_IDLE # noqa: F401 - from ._pslinux import IOPRIO_CLASS_NONE # noqa: F401 - from ._pslinux import IOPRIO_CLASS_RT # noqa: F401 - -elif WINDOWS: - from . import _pswindows as _psplatform - from ._psutil_windows import ABOVE_NORMAL_PRIORITY_CLASS # noqa: F401 - from ._psutil_windows import BELOW_NORMAL_PRIORITY_CLASS # noqa: F401 - from ._psutil_windows import HIGH_PRIORITY_CLASS # noqa: F401 - from ._psutil_windows import IDLE_PRIORITY_CLASS # noqa: F401 - from ._psutil_windows import NORMAL_PRIORITY_CLASS # noqa: F401 - from ._psutil_windows import REALTIME_PRIORITY_CLASS # noqa: F401 - from ._pswindows import CONN_DELETE_TCB # noqa: F401 - from ._pswindows import IOPRIO_HIGH # noqa: F401 - from ._pswindows import IOPRIO_LOW # noqa: F401 - from ._pswindows import IOPRIO_NORMAL # noqa: F401 - from ._pswindows import IOPRIO_VERYLOW # noqa: F401 - -elif MACOS: - from . import _psosx as _psplatform - -elif BSD: - from . import _psbsd as _psplatform - -elif SUNOS: - from . import _pssunos as _psplatform - from ._pssunos import CONN_BOUND # noqa: F401 - from ._pssunos import CONN_IDLE # noqa: F401 - - # This is public writable API which is read from _pslinux.py and - # _pssunos.py via sys.modules. - PROCFS_PATH = "/proc" - -elif AIX: - from . import _psaix as _psplatform - - # This is public API and it will be retrieved from _pslinux.py - # via sys.modules. - PROCFS_PATH = "/proc" - -else: # pragma: no cover - msg = f"platform {sys.platform} is not supported" - raise NotImplementedError(msg) - - -# fmt: off -__all__ = [ - # exceptions - "Error", "NoSuchProcess", "ZombieProcess", "AccessDenied", - "TimeoutExpired", - - # constants - "version_info", "__version__", - - "STATUS_RUNNING", "STATUS_IDLE", "STATUS_SLEEPING", "STATUS_DISK_SLEEP", - "STATUS_STOPPED", "STATUS_TRACING_STOP", "STATUS_ZOMBIE", "STATUS_DEAD", - "STATUS_WAKING", "STATUS_LOCKED", "STATUS_WAITING", "STATUS_LOCKED", - "STATUS_PARKED", - - "CONN_ESTABLISHED", "CONN_SYN_SENT", "CONN_SYN_RECV", "CONN_FIN_WAIT1", - "CONN_FIN_WAIT2", "CONN_TIME_WAIT", "CONN_CLOSE", "CONN_CLOSE_WAIT", - "CONN_LAST_ACK", "CONN_LISTEN", "CONN_CLOSING", "CONN_NONE", - # "CONN_IDLE", "CONN_BOUND", - - "AF_LINK", - - "NIC_DUPLEX_FULL", "NIC_DUPLEX_HALF", "NIC_DUPLEX_UNKNOWN", - - "POWER_TIME_UNKNOWN", "POWER_TIME_UNLIMITED", - - "BSD", "FREEBSD", "LINUX", "NETBSD", "OPENBSD", "MACOS", "OSX", "POSIX", - "SUNOS", "WINDOWS", "AIX", - - # "RLIM_INFINITY", "RLIMIT_AS", "RLIMIT_CORE", "RLIMIT_CPU", "RLIMIT_DATA", - # "RLIMIT_FSIZE", "RLIMIT_LOCKS", "RLIMIT_MEMLOCK", "RLIMIT_NOFILE", - # "RLIMIT_NPROC", "RLIMIT_RSS", "RLIMIT_STACK", "RLIMIT_MSGQUEUE", - # "RLIMIT_NICE", "RLIMIT_RTPRIO", "RLIMIT_RTTIME", "RLIMIT_SIGPENDING", - - # classes - "Process", "Popen", - - # functions - "pid_exists", "pids", "process_iter", "wait_procs", # proc - "virtual_memory", "swap_memory", # memory - "cpu_times", "cpu_percent", "cpu_times_percent", "cpu_count", # cpu - "cpu_stats", # "cpu_freq", "getloadavg" - "net_io_counters", "net_connections", "net_if_addrs", # network - "net_if_stats", - "disk_io_counters", "disk_partitions", "disk_usage", # disk - # "sensors_temperatures", "sensors_battery", "sensors_fans" # sensors - "users", "boot_time", # others -] -# fmt: on - - -__all__.extend(_psplatform.__extra__all__) - -# Linux, FreeBSD -if hasattr(_psplatform.Process, "rlimit"): - # Populate global namespace with RLIM* constants. - _globals = globals() - _name = None - for _name in dir(_psplatform.cext): - if _name.startswith('RLIM') and _name.isupper(): - _globals[_name] = getattr(_psplatform.cext, _name) - __all__.append(_name) - del _globals, _name - -AF_LINK = _psplatform.AF_LINK - -__author__ = "Giampaolo Rodola'" -__version__ = "7.1.3" -version_info = tuple(int(num) for num in __version__.split('.')) - -_timer = getattr(time, 'monotonic', time.time) -_TOTAL_PHYMEM = None -_LOWEST_PID = None -_SENTINEL = object() - -# Sanity check in case the user messed up with psutil installation -# or did something weird with sys.path. In this case we might end -# up importing a python module using a C extension module which -# was compiled for a different version of psutil. -# We want to prevent that by failing sooner rather than later. -# See: https://github.com/giampaolo/psutil/issues/564 -if int(__version__.replace('.', '')) != getattr( - _psplatform.cext, 'version', None -): - msg = f"version conflict: {_psplatform.cext.__file__!r} C extension " - msg += "module was built for another version of psutil" - if hasattr(_psplatform.cext, 'version'): - v = ".".join(list(str(_psplatform.cext.version))) - msg += f" ({v} instead of {__version__})" - else: - msg += f" (different than {__version__})" - what = getattr( - _psplatform.cext, - "__file__", - "the existing psutil install directory", - ) - msg += f"; you may try to 'pip uninstall psutil', manually remove {what}" - msg += " or clean the virtual env somehow, then reinstall" - raise ImportError(msg) - - -# ===================================================================== -# --- Utils -# ===================================================================== - - -if hasattr(_psplatform, 'ppid_map'): - # Faster version (Windows and Linux). - _ppid_map = _psplatform.ppid_map -else: # pragma: no cover - - def _ppid_map(): - """Return a {pid: ppid, ...} dict for all running processes in - one shot. Used to speed up Process.children(). - """ - ret = {} - for pid in pids(): - try: - ret[pid] = _psplatform.Process(pid).ppid() - except (NoSuchProcess, ZombieProcess): - pass - return ret - - -def _pprint_secs(secs): - """Format seconds in a human readable form.""" - now = time.time() - secs_ago = int(now - secs) - fmt = "%H:%M:%S" if secs_ago < 60 * 60 * 24 else "%Y-%m-%d %H:%M:%S" - return datetime.datetime.fromtimestamp(secs).strftime(fmt) - - -def _check_conn_kind(kind): - """Check net_connections()'s `kind` parameter.""" - kinds = tuple(_common.conn_tmap) - if kind not in kinds: - msg = f"invalid kind argument {kind!r}; valid ones are: {kinds}" - raise ValueError(msg) - - -# ===================================================================== -# --- Process class -# ===================================================================== - - -class Process: - """Represents an OS process with the given PID. - If PID is omitted current process PID (os.getpid()) is used. - Raise NoSuchProcess if PID does not exist. - - Note that most of the methods of this class do not make sure that - the PID of the process being queried has been reused. That means - that you may end up retrieving information for another process. - - The only exceptions for which process identity is pre-emptively - checked and guaranteed are: - - - parent() - - children() - - nice() (set) - - ionice() (set) - - rlimit() (set) - - cpu_affinity (set) - - suspend() - - resume() - - send_signal() - - terminate() - - kill() - - To prevent this problem for all other methods you can use - is_running() before querying the process. - """ - - def __init__(self, pid=None): - self._init(pid) - - def _init(self, pid, _ignore_nsp=False): - if pid is None: - pid = os.getpid() - else: - if pid < 0: - msg = f"pid must be a positive integer (got {pid})" - raise ValueError(msg) - try: - _psplatform.cext.check_pid_range(pid) - except OverflowError as err: - msg = "process PID out of range" - raise NoSuchProcess(pid, msg=msg) from err - - self._pid = pid - self._name = None - self._exe = None - self._create_time = None - self._gone = False - self._pid_reused = False - self._hash = None - self._lock = threading.RLock() - # used for caching on Windows only (on POSIX ppid may change) - self._ppid = None - # platform-specific modules define an _psplatform.Process - # implementation class - self._proc = _psplatform.Process(pid) - self._last_sys_cpu_times = None - self._last_proc_cpu_times = None - self._exitcode = _SENTINEL - self._ident = (self.pid, None) - try: - self._ident = self._get_ident() - except AccessDenied: - # This should happen on Windows only, since we use the fast - # create time method. AFAIK, on all other platforms we are - # able to get create time for all PIDs. - pass - except ZombieProcess: - # Zombies can still be queried by this class (although - # not always) and pids() return them so just go on. - pass - except NoSuchProcess: - if not _ignore_nsp: - msg = "process PID not found" - raise NoSuchProcess(pid, msg=msg) from None - self._gone = True - - def _get_ident(self): - """Return a (pid, uid) tuple which is supposed to identify a - Process instance univocally over time. The PID alone is not - enough, as it can be assigned to a new process after this one - terminates, so we add process creation time to the mix. We need - this in order to prevent killing the wrong process later on. - This is also known as PID reuse or PID recycling problem. - - The reliability of this strategy mostly depends on - create_time() precision, which is 0.01 secs on Linux. The - assumption is that, after a process terminates, the kernel - won't reuse the same PID after such a short period of time - (0.01 secs). Technically this is inherently racy, but - practically it should be good enough. - - NOTE: unreliable on FreeBSD and OpenBSD as ctime is subject to - system clock updates. - """ - - if WINDOWS: - # Use create_time() fast method in order to speedup - # `process_iter()`. This means we'll get AccessDenied for - # most ADMIN processes, but that's fine since it means - # we'll also get AccessDenied on kill(). - # https://github.com/giampaolo/psutil/issues/2366#issuecomment-2381646555 - self._create_time = self._proc.create_time(fast_only=True) - return (self.pid, self._create_time) - elif LINUX or NETBSD or OSX: - # Use 'monotonic' process starttime since boot to form unique - # process identity, since it is stable over changes to system - # time. - return (self.pid, self._proc.create_time(monotonic=True)) - else: - return (self.pid, self.create_time()) - - def __str__(self): - info = collections.OrderedDict() - info["pid"] = self.pid - if self._name: - info['name'] = self._name - with self.oneshot(): - if self._pid_reused: - info["status"] = "terminated + PID reused" - else: - try: - info["name"] = self.name() - info["status"] = self.status() - except ZombieProcess: - info["status"] = "zombie" - except NoSuchProcess: - info["status"] = "terminated" - except AccessDenied: - pass - - if self._exitcode not in {_SENTINEL, None}: - info["exitcode"] = self._exitcode - if self._create_time is not None: - info['started'] = _pprint_secs(self._create_time) - - return "{}.{}({})".format( - self.__class__.__module__, - self.__class__.__name__, - ", ".join([f"{k}={v!r}" for k, v in info.items()]), - ) - - __repr__ = __str__ - - def __eq__(self, other): - # Test for equality with another Process object based - # on PID and creation time. - if not isinstance(other, Process): - return NotImplemented - if OPENBSD or NETBSD or SUNOS: # pragma: no cover - # Zombie processes on Open/NetBSD/illumos/Solaris have a - # creation time of 0.0. This covers the case when a process - # started normally (so it has a ctime), then it turned into a - # zombie. It's important to do this because is_running() - # depends on __eq__. - pid1, ident1 = self._ident - pid2, ident2 = other._ident - if pid1 == pid2: - if ident1 and not ident2: - try: - return self.status() == STATUS_ZOMBIE - except Error: - pass - return self._ident == other._ident - - def __ne__(self, other): - return not self == other - - def __hash__(self): - if self._hash is None: - self._hash = hash(self._ident) - return self._hash - - def _raise_if_pid_reused(self): - """Raises NoSuchProcess in case process PID has been reused.""" - if self._pid_reused or (not self.is_running() and self._pid_reused): - # We may directly raise NSP in here already if PID is just - # not running, but I prefer NSP to be raised naturally by - # the actual Process API call. This way unit tests will tell - # us if the API is broken (aka don't raise NSP when it - # should). We also remain consistent with all other "get" - # APIs which don't use _raise_if_pid_reused(). - msg = "process no longer exists and its PID has been reused" - raise NoSuchProcess(self.pid, self._name, msg=msg) - - @property - def pid(self): - """The process PID.""" - return self._pid - - # --- utility methods - - @contextlib.contextmanager - def oneshot(self): - """Utility context manager which considerably speeds up the - retrieval of multiple process information at the same time. - - Internally different process info (e.g. name, ppid, uids, - gids, ...) may be fetched by using the same routine, but - only one information is returned and the others are discarded. - When using this context manager the internal routine is - executed once (in the example below on name()) and the - other info are cached. - - The cache is cleared when exiting the context manager block. - The advice is to use this every time you retrieve more than - one information about the process. If you're lucky, you'll - get a hell of a speedup. - - >>> import psutil - >>> p = psutil.Process() - >>> with p.oneshot(): - ... p.name() # collect multiple info - ... p.cpu_times() # return cached value - ... p.cpu_percent() # return cached value - ... p.create_time() # return cached value - ... - >>> - """ - with self._lock: - if hasattr(self, "_cache"): - # NOOP: this covers the use case where the user enters the - # context twice: - # - # >>> with p.oneshot(): - # ... with p.oneshot(): - # ... - # - # Also, since as_dict() internally uses oneshot() - # I expect that the code below will be a pretty common - # "mistake" that the user will make, so let's guard - # against that: - # - # >>> with p.oneshot(): - # ... p.as_dict() - # ... - yield - else: - try: - # cached in case cpu_percent() is used - self.cpu_times.cache_activate(self) - # cached in case memory_percent() is used - self.memory_info.cache_activate(self) - # cached in case parent() is used - self.ppid.cache_activate(self) - # cached in case username() is used - if POSIX: - self.uids.cache_activate(self) - # specific implementation cache - self._proc.oneshot_enter() - yield - finally: - self.cpu_times.cache_deactivate(self) - self.memory_info.cache_deactivate(self) - self.ppid.cache_deactivate(self) - if POSIX: - self.uids.cache_deactivate(self) - self._proc.oneshot_exit() - - def as_dict(self, attrs=None, ad_value=None): - """Utility method returning process information as a - hashable dictionary. - If *attrs* is specified it must be a list of strings - reflecting available Process class' attribute names - (e.g. ['cpu_times', 'name']) else all public (read - only) attributes are assumed. - *ad_value* is the value which gets assigned in case - AccessDenied or ZombieProcess exception is raised when - retrieving that particular process information. - """ - valid_names = _as_dict_attrnames - if attrs is not None: - if not isinstance(attrs, (list, tuple, set, frozenset)): - msg = f"invalid attrs type {type(attrs)}" - raise TypeError(msg) - attrs = set(attrs) - invalid_names = attrs - valid_names - if invalid_names: - msg = "invalid attr name{} {}".format( - "s" if len(invalid_names) > 1 else "", - ", ".join(map(repr, invalid_names)), - ) - raise ValueError(msg) - - retdict = {} - ls = attrs or valid_names - with self.oneshot(): - for name in ls: - try: - if name == 'pid': - ret = self.pid - else: - meth = getattr(self, name) - ret = meth() - except (AccessDenied, ZombieProcess): - ret = ad_value - except NotImplementedError: - # in case of not implemented functionality (may happen - # on old or exotic systems) we want to crash only if - # the user explicitly asked for that particular attr - if attrs: - raise - continue - retdict[name] = ret - return retdict - - def parent(self): - """Return the parent process as a Process object pre-emptively - checking whether PID has been reused. - If no parent is known return None. - """ - lowest_pid = _LOWEST_PID if _LOWEST_PID is not None else pids()[0] - if self.pid == lowest_pid: - return None - ppid = self.ppid() - if ppid is not None: - # Get a fresh (non-cached) ctime in case the system clock - # was updated. TODO: use a monotonic ctime on platforms - # where it's supported. - proc_ctime = Process(self.pid).create_time() - try: - parent = Process(ppid) - if parent.create_time() <= proc_ctime: - return parent - # ...else ppid has been reused by another process - except NoSuchProcess: - pass - - def parents(self): - """Return the parents of this process as a list of Process - instances. If no parents are known return an empty list. - """ - parents = [] - proc = self.parent() - while proc is not None: - parents.append(proc) - proc = proc.parent() - return parents - - def is_running(self): - """Return whether this process is running. - - It also checks if PID has been reused by another process, in - which case it will remove the process from `process_iter()` - internal cache and return False. - """ - if self._gone or self._pid_reused: - return False - try: - # Checking if PID is alive is not enough as the PID might - # have been reused by another process. Process identity / - # uniqueness over time is guaranteed by (PID + creation - # time) and that is verified in __eq__. - self._pid_reused = self != Process(self.pid) - if self._pid_reused: - _pids_reused.add(self.pid) - raise NoSuchProcess(self.pid) - return True - except ZombieProcess: - # We should never get here as it's already handled in - # Process.__init__; here just for extra safety. - return True - except NoSuchProcess: - self._gone = True - return False - - # --- actual API - - @memoize_when_activated - def ppid(self): - """The process parent PID. - On Windows the return value is cached after first call. - """ - # On POSIX we don't want to cache the ppid as it may unexpectedly - # change to 1 (init) in case this process turns into a zombie: - # https://github.com/giampaolo/psutil/issues/321 - # http://stackoverflow.com/questions/356722/ - - # XXX should we check creation time here rather than in - # Process.parent()? - self._raise_if_pid_reused() - if POSIX: - return self._proc.ppid() - else: # pragma: no cover - self._ppid = self._ppid or self._proc.ppid() - return self._ppid - - def name(self): - """The process name. The return value is cached after first call.""" - # Process name is only cached on Windows as on POSIX it may - # change, see: - # https://github.com/giampaolo/psutil/issues/692 - if WINDOWS and self._name is not None: - return self._name - name = self._proc.name() - if POSIX and len(name) >= 15: - # On UNIX the name gets truncated to the first 15 characters. - # If it matches the first part of the cmdline we return that - # one instead because it's usually more explicative. - # Examples are "gnome-keyring-d" vs. "gnome-keyring-daemon". - try: - cmdline = self.cmdline() - except (AccessDenied, ZombieProcess): - # Just pass and return the truncated name: it's better - # than nothing. Note: there are actual cases where a - # zombie process can return a name() but not a - # cmdline(), see: - # https://github.com/giampaolo/psutil/issues/2239 - pass - else: - if cmdline: - extended_name = os.path.basename(cmdline[0]) - if extended_name.startswith(name): - name = extended_name - self._name = name - self._proc._name = name - return name - - def exe(self): - """The process executable as an absolute path. - May also be an empty string. - The return value is cached after first call. - """ - - def guess_it(fallback): - # try to guess exe from cmdline[0] in absence of a native - # exe representation - cmdline = self.cmdline() - if cmdline and hasattr(os, 'access') and hasattr(os, 'X_OK'): - exe = cmdline[0] # the possible exe - # Attempt to guess only in case of an absolute path. - # It is not safe otherwise as the process might have - # changed cwd. - if ( - os.path.isabs(exe) - and os.path.isfile(exe) - and os.access(exe, os.X_OK) - ): - return exe - if isinstance(fallback, AccessDenied): - raise fallback - return fallback - - if self._exe is None: - try: - exe = self._proc.exe() - except AccessDenied as err: - return guess_it(fallback=err) - else: - if not exe: - # underlying implementation can legitimately return an - # empty string; if that's the case we don't want to - # raise AD while guessing from the cmdline - try: - exe = guess_it(fallback=exe) - except AccessDenied: - pass - self._exe = exe - return self._exe - - def cmdline(self): - """The command line this process has been called with.""" - return self._proc.cmdline() - - def status(self): - """The process current status as a STATUS_* constant.""" - try: - return self._proc.status() - except ZombieProcess: - return STATUS_ZOMBIE - - def username(self): - """The name of the user that owns the process. - On UNIX this is calculated by using *real* process uid. - """ - if POSIX: - if pwd is None: - # might happen if python was installed from sources - msg = "requires pwd module shipped with standard python" - raise ImportError(msg) - real_uid = self.uids().real - try: - return pwd.getpwuid(real_uid).pw_name - except KeyError: - # the uid can't be resolved by the system - return str(real_uid) - else: - return self._proc.username() - - def create_time(self): - """The process creation time as a floating point number - expressed in seconds since the epoch (seconds since January 1, - 1970, at midnight UTC). The return value, which is cached after - first call, is based on the system clock, which means it may be - affected by changes such as manual adjustments or time - synchronization (e.g. NTP). - """ - if self._create_time is None: - self._create_time = self._proc.create_time() - return self._create_time - - def cwd(self): - """Process current working directory as an absolute path.""" - return self._proc.cwd() - - def nice(self, value=None): - """Get or set process niceness (priority).""" - if value is None: - return self._proc.nice_get() - else: - self._raise_if_pid_reused() - self._proc.nice_set(value) - - if POSIX: - - @memoize_when_activated - def uids(self): - """Return process UIDs as a (real, effective, saved) - namedtuple. - """ - return self._proc.uids() - - def gids(self): - """Return process GIDs as a (real, effective, saved) - namedtuple. - """ - return self._proc.gids() - - def terminal(self): - """The terminal associated with this process, if any, - else None. - """ - return self._proc.terminal() - - def num_fds(self): - """Return the number of file descriptors opened by this - process (POSIX only). - """ - return self._proc.num_fds() - - # Linux, BSD, AIX and Windows only - if hasattr(_psplatform.Process, "io_counters"): - - def io_counters(self): - """Return process I/O statistics as a - (read_count, write_count, read_bytes, write_bytes) - namedtuple. - Those are the number of read/write calls performed and the - amount of bytes read and written by the process. - """ - return self._proc.io_counters() - - # Linux and Windows - if hasattr(_psplatform.Process, "ionice_get"): - - def ionice(self, ioclass=None, value=None): - """Get or set process I/O niceness (priority). - - On Linux *ioclass* is one of the IOPRIO_CLASS_* constants. - *value* is a number which goes from 0 to 7. The higher the - value, the lower the I/O priority of the process. - - On Windows only *ioclass* is used and it can be set to 2 - (normal), 1 (low) or 0 (very low). - - Available on Linux and Windows > Vista only. - """ - if ioclass is None: - if value is not None: - msg = "'ioclass' argument must be specified" - raise ValueError(msg) - return self._proc.ionice_get() - else: - self._raise_if_pid_reused() - return self._proc.ionice_set(ioclass, value) - - # Linux / FreeBSD only - if hasattr(_psplatform.Process, "rlimit"): - - def rlimit(self, resource, limits=None): - """Get or set process resource limits as a (soft, hard) - tuple. - - *resource* is one of the RLIMIT_* constants. - *limits* is supposed to be a (soft, hard) tuple. - - See "man prlimit" for further info. - Available on Linux and FreeBSD only. - """ - if limits is not None: - self._raise_if_pid_reused() - return self._proc.rlimit(resource, limits) - - # Windows, Linux and FreeBSD only - if hasattr(_psplatform.Process, "cpu_affinity_get"): - - def cpu_affinity(self, cpus=None): - """Get or set process CPU affinity. - If specified, *cpus* must be a list of CPUs for which you - want to set the affinity (e.g. [0, 1]). - If an empty list is passed, all egible CPUs are assumed - (and set). - (Windows, Linux and BSD only). - """ - if cpus is None: - return sorted(set(self._proc.cpu_affinity_get())) - else: - self._raise_if_pid_reused() - if not cpus: - if hasattr(self._proc, "_get_eligible_cpus"): - cpus = self._proc._get_eligible_cpus() - else: - cpus = tuple(range(len(cpu_times(percpu=True)))) - self._proc.cpu_affinity_set(list(set(cpus))) - - # Linux, FreeBSD, SunOS - if hasattr(_psplatform.Process, "cpu_num"): - - def cpu_num(self): - """Return what CPU this process is currently running on. - The returned number should be <= psutil.cpu_count() - and <= len(psutil.cpu_percent(percpu=True)). - It may be used in conjunction with - psutil.cpu_percent(percpu=True) to observe the system - workload distributed across CPUs. - """ - return self._proc.cpu_num() - - # All platforms has it, but maybe not in the future. - if hasattr(_psplatform.Process, "environ"): - - def environ(self): - """The environment variables of the process as a dict. Note: this - might not reflect changes made after the process started. - """ - return self._proc.environ() - - if WINDOWS: - - def num_handles(self): - """Return the number of handles opened by this process - (Windows only). - """ - return self._proc.num_handles() - - def num_ctx_switches(self): - """Return the number of voluntary and involuntary context - switches performed by this process. - """ - return self._proc.num_ctx_switches() - - def num_threads(self): - """Return the number of threads used by this process.""" - return self._proc.num_threads() - - if hasattr(_psplatform.Process, "threads"): - - def threads(self): - """Return threads opened by process as a list of - (id, user_time, system_time) namedtuples representing - thread id and thread CPU times (user/system). - On OpenBSD this method requires root access. - """ - return self._proc.threads() - - def children(self, recursive=False): - """Return the children of this process as a list of Process - instances, pre-emptively checking whether PID has been reused. - If *recursive* is True return all the parent descendants. - - Example (A == this process): - - A ─┐ - │ - ├─ B (child) ─┐ - │ └─ X (grandchild) ─┐ - │ └─ Y (great grandchild) - ├─ C (child) - └─ D (child) - - >>> import psutil - >>> p = psutil.Process() - >>> p.children() - B, C, D - >>> p.children(recursive=True) - B, X, Y, C, D - - Note that in the example above if process X disappears - process Y won't be listed as the reference to process A - is lost. - """ - self._raise_if_pid_reused() - ppid_map = _ppid_map() - # Get a fresh (non-cached) ctime in case the system clock was - # updated. TODO: use a monotonic ctime on platforms where it's - # supported. - proc_ctime = Process(self.pid).create_time() - ret = [] - if not recursive: - for pid, ppid in ppid_map.items(): - if ppid == self.pid: - try: - child = Process(pid) - # if child happens to be older than its parent - # (self) it means child's PID has been reused - if proc_ctime <= child.create_time(): - ret.append(child) - except (NoSuchProcess, ZombieProcess): - pass - else: - # Construct a {pid: [child pids]} dict - reverse_ppid_map = collections.defaultdict(list) - for pid, ppid in ppid_map.items(): - reverse_ppid_map[ppid].append(pid) - # Recursively traverse that dict, starting from self.pid, - # such that we only call Process() on actual children - seen = set() - stack = [self.pid] - while stack: - pid = stack.pop() - if pid in seen: - # Since pids can be reused while the ppid_map is - # constructed, there may be rare instances where - # there's a cycle in the recorded process "tree". - continue - seen.add(pid) - for child_pid in reverse_ppid_map[pid]: - try: - child = Process(child_pid) - # if child happens to be older than its parent - # (self) it means child's PID has been reused - intime = proc_ctime <= child.create_time() - if intime: - ret.append(child) - stack.append(child_pid) - except (NoSuchProcess, ZombieProcess): - pass - return ret - - def cpu_percent(self, interval=None): - """Return a float representing the current process CPU - utilization as a percentage. - - When *interval* is 0.0 or None (default) compares process times - to system CPU times elapsed since last call, returning - immediately (non-blocking). That means that the first time - this is called it will return a meaningful 0.0 value. - - When *interval* is > 0.0 compares process times to system CPU - times elapsed before and after the interval (blocking). - - In this case is recommended for accuracy that this function - be called with at least 0.1 seconds between calls. - - A value > 100.0 can be returned in case of processes running - multiple threads on different CPU cores. - - The returned value is explicitly NOT split evenly between - all available logical CPUs. This means that a busy loop process - running on a system with 2 logical CPUs will be reported as - having 100% CPU utilization instead of 50%. - - Examples: - - >>> import psutil - >>> p = psutil.Process(os.getpid()) - >>> # blocking - >>> p.cpu_percent(interval=1) - 2.0 - >>> # non-blocking (percentage since last call) - >>> p.cpu_percent(interval=None) - 2.9 - >>> - """ - blocking = interval is not None and interval > 0.0 - if interval is not None and interval < 0: - msg = f"interval is not positive (got {interval!r})" - raise ValueError(msg) - num_cpus = cpu_count() or 1 - - def timer(): - return _timer() * num_cpus - - if blocking: - st1 = timer() - pt1 = self._proc.cpu_times() - time.sleep(interval) - st2 = timer() - pt2 = self._proc.cpu_times() - else: - st1 = self._last_sys_cpu_times - pt1 = self._last_proc_cpu_times - st2 = timer() - pt2 = self._proc.cpu_times() - if st1 is None or pt1 is None: - self._last_sys_cpu_times = st2 - self._last_proc_cpu_times = pt2 - return 0.0 - - delta_proc = (pt2.user - pt1.user) + (pt2.system - pt1.system) - delta_time = st2 - st1 - # reset values for next call in case of interval == None - self._last_sys_cpu_times = st2 - self._last_proc_cpu_times = pt2 - - try: - # This is the utilization split evenly between all CPUs. - # E.g. a busy loop process on a 2-CPU-cores system at this - # point is reported as 50% instead of 100%. - overall_cpus_percent = (delta_proc / delta_time) * 100 - except ZeroDivisionError: - # interval was too low - return 0.0 - else: - # Note 1: - # in order to emulate "top" we multiply the value for the num - # of CPU cores. This way the busy process will be reported as - # having 100% (or more) usage. - # - # Note 2: - # taskmgr.exe on Windows differs in that it will show 50% - # instead. - # - # Note 3: - # a percentage > 100 is legitimate as it can result from a - # process with multiple threads running on different CPU - # cores (top does the same), see: - # http://stackoverflow.com/questions/1032357 - # https://github.com/giampaolo/psutil/issues/474 - single_cpu_percent = overall_cpus_percent * num_cpus - return round(single_cpu_percent, 1) - - @memoize_when_activated - def cpu_times(self): - """Return a (user, system, children_user, children_system) - namedtuple representing the accumulated process time, in - seconds. - This is similar to os.times() but per-process. - On macOS and Windows children_user and children_system are - always set to 0. - """ - return self._proc.cpu_times() - - @memoize_when_activated - def memory_info(self): - """Return a namedtuple with variable fields depending on the - platform, representing memory information about the process. - - The "portable" fields available on all platforms are `rss` and `vms`. - - All numbers are expressed in bytes. - """ - return self._proc.memory_info() - - def memory_full_info(self): - """This method returns the same information as memory_info(), - plus, on some platform (Linux, macOS, Windows), also provides - additional metrics (USS, PSS and swap). - The additional metrics provide a better representation of actual - process memory usage. - - Namely USS is the memory which is unique to a process and which - would be freed if the process was terminated right now. - - It does so by passing through the whole process address. - As such it usually requires higher user privileges than - memory_info() and is considerably slower. - """ - return self._proc.memory_full_info() - - def memory_percent(self, memtype="rss"): - """Compare process memory to total physical system memory and - calculate process memory utilization as a percentage. - *memtype* argument is a string that dictates what type of - process memory you want to compare against (defaults to "rss"). - The list of available strings can be obtained like this: - - >>> psutil.Process().memory_info()._fields - ('rss', 'vms', 'shared', 'text', 'lib', 'data', 'dirty', 'uss', 'pss') - """ - valid_types = list(_psplatform.pfullmem._fields) - if memtype not in valid_types: - msg = ( - f"invalid memtype {memtype!r}; valid types are" - f" {tuple(valid_types)!r}" - ) - raise ValueError(msg) - fun = ( - self.memory_info - if memtype in _psplatform.pmem._fields - else self.memory_full_info - ) - metrics = fun() - value = getattr(metrics, memtype) - - # use cached value if available - total_phymem = _TOTAL_PHYMEM or virtual_memory().total - if not total_phymem > 0: - # we should never get here - msg = ( - "can't calculate process memory percent because total physical" - f" system memory is not positive ({total_phymem!r})" - ) - raise ValueError(msg) - return (value / float(total_phymem)) * 100 - - if hasattr(_psplatform.Process, "memory_maps"): - - def memory_maps(self, grouped=True): - """Return process' mapped memory regions as a list of namedtuples - whose fields are variable depending on the platform. - - If *grouped* is True the mapped regions with the same 'path' - are grouped together and the different memory fields are summed. - - If *grouped* is False every mapped region is shown as a single - entity and the namedtuple will also include the mapped region's - address space ('addr') and permission set ('perms'). - """ - it = self._proc.memory_maps() - if grouped: - d = {} - for tupl in it: - path = tupl[2] - nums = tupl[3:] - try: - d[path] = list(map(lambda x, y: x + y, d[path], nums)) - except KeyError: - d[path] = nums - nt = _psplatform.pmmap_grouped - return [nt(path, *d[path]) for path in d] - else: - nt = _psplatform.pmmap_ext - return [nt(*x) for x in it] - - def open_files(self): - """Return files opened by process as a list of - (path, fd) namedtuples including the absolute file name - and file descriptor number. - """ - return self._proc.open_files() - - def net_connections(self, kind='inet'): - """Return socket connections opened by process as a list of - (fd, family, type, laddr, raddr, status) namedtuples. - The *kind* parameter filters for connections that match the - following criteria: - - +------------+----------------------------------------------------+ - | Kind Value | Connections using | - +------------+----------------------------------------------------+ - | inet | IPv4 and IPv6 | - | inet4 | IPv4 | - | inet6 | IPv6 | - | tcp | TCP | - | tcp4 | TCP over IPv4 | - | tcp6 | TCP over IPv6 | - | udp | UDP | - | udp4 | UDP over IPv4 | - | udp6 | UDP over IPv6 | - | unix | UNIX socket (both UDP and TCP protocols) | - | all | the sum of all the possible families and protocols | - +------------+----------------------------------------------------+ - """ - _check_conn_kind(kind) - return self._proc.net_connections(kind) - - @_common.deprecated_method(replacement="net_connections") - def connections(self, kind="inet"): - return self.net_connections(kind=kind) - - # --- signals - - if POSIX: - - def _send_signal(self, sig): - assert not self.pid < 0, self.pid - self._raise_if_pid_reused() - - pid, ppid, name = self.pid, self._ppid, self._name - if pid == 0: - # see "man 2 kill" - msg = ( - "preventing sending signal to process with PID 0 as it " - "would affect every process in the process group of the " - "calling process (os.getpid()) instead of PID 0" - ) - raise ValueError(msg) - try: - os.kill(pid, sig) - except ProcessLookupError as err: - if OPENBSD and pid_exists(pid): - # We do this because os.kill() lies in case of - # zombie processes. - raise ZombieProcess(pid, name, ppid) from err - self._gone = True - raise NoSuchProcess(pid, name) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - - def send_signal(self, sig): - """Send a signal *sig* to process pre-emptively checking - whether PID has been reused (see signal module constants) . - On Windows only SIGTERM is valid and is treated as an alias - for kill(). - """ - if POSIX: - self._send_signal(sig) - else: # pragma: no cover - self._raise_if_pid_reused() - if sig != signal.SIGTERM and not self.is_running(): - msg = "process no longer exists" - raise NoSuchProcess(self.pid, self._name, msg=msg) - self._proc.send_signal(sig) - - def suspend(self): - """Suspend process execution with SIGSTOP pre-emptively checking - whether PID has been reused. - On Windows this has the effect of suspending all process threads. - """ - if POSIX: - self._send_signal(signal.SIGSTOP) - else: # pragma: no cover - self._raise_if_pid_reused() - self._proc.suspend() - - def resume(self): - """Resume process execution with SIGCONT pre-emptively checking - whether PID has been reused. - On Windows this has the effect of resuming all process threads. - """ - if POSIX: - self._send_signal(signal.SIGCONT) - else: # pragma: no cover - self._raise_if_pid_reused() - self._proc.resume() - - def terminate(self): - """Terminate the process with SIGTERM pre-emptively checking - whether PID has been reused. - On Windows this is an alias for kill(). - """ - if POSIX: - self._send_signal(signal.SIGTERM) - else: # pragma: no cover - self._raise_if_pid_reused() - self._proc.kill() - - def kill(self): - """Kill the current process with SIGKILL pre-emptively checking - whether PID has been reused. - """ - if POSIX: - self._send_signal(signal.SIGKILL) - else: # pragma: no cover - self._raise_if_pid_reused() - self._proc.kill() - - def wait(self, timeout=None): - """Wait for process to terminate and, if process is a children - of os.getpid(), also return its exit code, else None. - On Windows there's no such limitation (exit code is always - returned). - - If the process is already terminated immediately return None - instead of raising NoSuchProcess. - - If *timeout* (in seconds) is specified and process is still - alive raise TimeoutExpired. - - To wait for multiple Process(es) use psutil.wait_procs(). - """ - if timeout is not None and not timeout >= 0: - msg = "timeout must be a positive integer" - raise ValueError(msg) - if self._exitcode is not _SENTINEL: - return self._exitcode - self._exitcode = self._proc.wait(timeout) - return self._exitcode - - -# The valid attr names which can be processed by Process.as_dict(). -# fmt: off -_as_dict_attrnames = { - x for x in dir(Process) if not x.startswith("_") and x not in - {'send_signal', 'suspend', 'resume', 'terminate', 'kill', 'wait', - 'is_running', 'as_dict', 'parent', 'parents', 'children', 'rlimit', - 'connections', 'oneshot'} -} -# fmt: on - - -# ===================================================================== -# --- Popen class -# ===================================================================== - - -class Popen(Process): - """Same as subprocess.Popen, but in addition it provides all - psutil.Process methods in a single class. - For the following methods which are common to both classes, psutil - implementation takes precedence: - - * send_signal() - * terminate() - * kill() - - This is done in order to avoid killing another process in case its - PID has been reused, fixing BPO-6973. - - >>> import psutil - >>> from subprocess import PIPE - >>> p = psutil.Popen(["python", "-c", "print 'hi'"], stdout=PIPE) - >>> p.name() - 'python' - >>> p.uids() - user(real=1000, effective=1000, saved=1000) - >>> p.username() - 'giampaolo' - >>> p.communicate() - ('hi', None) - >>> p.terminate() - >>> p.wait(timeout=2) - 0 - >>> - """ - - def __init__(self, *args, **kwargs): - # Explicitly avoid to raise NoSuchProcess in case the process - # spawned by subprocess.Popen terminates too quickly, see: - # https://github.com/giampaolo/psutil/issues/193 - self.__subproc = subprocess.Popen(*args, **kwargs) - self._init(self.__subproc.pid, _ignore_nsp=True) - - def __dir__(self): - return sorted(set(dir(Popen) + dir(subprocess.Popen))) - - def __enter__(self): - if hasattr(self.__subproc, '__enter__'): - self.__subproc.__enter__() - return self - - def __exit__(self, *args, **kwargs): - if hasattr(self.__subproc, '__exit__'): - return self.__subproc.__exit__(*args, **kwargs) - else: - if self.stdout: - self.stdout.close() - if self.stderr: - self.stderr.close() - try: - # Flushing a BufferedWriter may raise an error. - if self.stdin: - self.stdin.close() - finally: - # Wait for the process to terminate, to avoid zombies. - self.wait() - - def __getattribute__(self, name): - try: - return object.__getattribute__(self, name) - except AttributeError: - try: - return object.__getattribute__(self.__subproc, name) - except AttributeError: - msg = f"{self.__class__!r} has no attribute {name!r}" - raise AttributeError(msg) from None - - def wait(self, timeout=None): - if self.__subproc.returncode is not None: - return self.__subproc.returncode - ret = super().wait(timeout) - self.__subproc.returncode = ret - return ret - - -# ===================================================================== -# --- system processes related functions -# ===================================================================== - - -def pids(): - """Return a list of current running PIDs.""" - global _LOWEST_PID - ret = sorted(_psplatform.pids()) - _LOWEST_PID = ret[0] - return ret - - -def pid_exists(pid): - """Return True if given PID exists in the current process list. - This is faster than doing "pid in psutil.pids()" and - should be preferred. - """ - if pid < 0: - return False - elif pid == 0 and POSIX: - # On POSIX we use os.kill() to determine PID existence. - # According to "man 2 kill" PID 0 has a special meaning - # though: it refers to <> and that is not we want - # to do here. - return pid in pids() - else: - return _psplatform.pid_exists(pid) - - -_pmap = {} -_pids_reused = set() - - -def process_iter(attrs=None, ad_value=None): - """Return a generator yielding a Process instance for all - running processes. - - Every new Process instance is only created once and then cached - into an internal table which is updated every time this is used. - Cache can optionally be cleared via `process_iter.cache_clear()`. - - The sorting order in which processes are yielded is based on - their PIDs. - - *attrs* and *ad_value* have the same meaning as in - Process.as_dict(). If *attrs* is specified as_dict() is called - and the resulting dict is stored as a 'info' attribute attached - to returned Process instance. - If *attrs* is an empty list it will retrieve all process info - (slow). - """ - global _pmap - - def add(pid): - proc = Process(pid) - pmap[proc.pid] = proc - return proc - - def remove(pid): - pmap.pop(pid, None) - - pmap = _pmap.copy() - a = set(pids()) - b = set(pmap.keys()) - new_pids = a - b - gone_pids = b - a - for pid in gone_pids: - remove(pid) - while _pids_reused: - pid = _pids_reused.pop() - debug(f"refreshing Process instance for reused PID {pid}") - remove(pid) - try: - ls = sorted(list(pmap.items()) + list(dict.fromkeys(new_pids).items())) - for pid, proc in ls: - try: - if proc is None: # new process - proc = add(pid) - if attrs is not None: - proc.info = proc.as_dict(attrs=attrs, ad_value=ad_value) - yield proc - except NoSuchProcess: - remove(pid) - finally: - _pmap = pmap - - -process_iter.cache_clear = lambda: _pmap.clear() # noqa: PLW0108 -process_iter.cache_clear.__doc__ = "Clear process_iter() internal cache." - - -def wait_procs(procs, timeout=None, callback=None): - """Convenience function which waits for a list of processes to - terminate. - - Return a (gone, alive) tuple indicating which processes - are gone and which ones are still alive. - - The gone ones will have a new *returncode* attribute indicating - process exit status (may be None). - - *callback* is a function which gets called every time a process - terminates (a Process instance is passed as callback argument). - - Function will return as soon as all processes terminate or when - *timeout* occurs. - Differently from Process.wait() it will not raise TimeoutExpired if - *timeout* occurs. - - Typical use case is: - - - send SIGTERM to a list of processes - - give them some time to terminate - - send SIGKILL to those ones which are still alive - - Example: - - >>> def on_terminate(proc): - ... print("process {} terminated".format(proc)) - ... - >>> for p in procs: - ... p.terminate() - ... - >>> gone, alive = wait_procs(procs, timeout=3, callback=on_terminate) - >>> for p in alive: - ... p.kill() - """ - - def check_gone(proc, timeout): - try: - returncode = proc.wait(timeout=timeout) - except (TimeoutExpired, subprocess.TimeoutExpired): - pass - else: - if returncode is not None or not proc.is_running(): - # Set new Process instance attribute. - proc.returncode = returncode - gone.add(proc) - if callback is not None: - callback(proc) - - if timeout is not None and not timeout >= 0: - msg = f"timeout must be a positive integer, got {timeout}" - raise ValueError(msg) - gone = set() - alive = set(procs) - if callback is not None and not callable(callback): - msg = f"callback {callback!r} is not a callable" - raise TypeError(msg) - if timeout is not None: - deadline = _timer() + timeout - - while alive: - if timeout is not None and timeout <= 0: - break - for proc in alive: - # Make sure that every complete iteration (all processes) - # will last max 1 sec. - # We do this because we don't want to wait too long on a - # single process: in case it terminates too late other - # processes may disappear in the meantime and their PID - # reused. - max_timeout = 1.0 / len(alive) - if timeout is not None: - timeout = min((deadline - _timer()), max_timeout) - if timeout <= 0: - break - check_gone(proc, timeout) - else: - check_gone(proc, max_timeout) - alive = alive - gone # noqa: PLR6104 - - if alive: - # Last attempt over processes survived so far. - # timeout == 0 won't make this function wait any further. - for proc in alive: - check_gone(proc, 0) - alive = alive - gone # noqa: PLR6104 - - return (list(gone), list(alive)) - - -# ===================================================================== -# --- CPU related functions -# ===================================================================== - - -def cpu_count(logical=True): - """Return the number of logical CPUs in the system (same as - os.cpu_count()). - - If *logical* is False return the number of physical cores only - (e.g. hyper thread CPUs are excluded). - - Return None if undetermined. - - The return value is cached after first call. - If desired cache can be cleared like this: - - >>> psutil.cpu_count.cache_clear() - """ - if logical: - ret = _psplatform.cpu_count_logical() - else: - ret = _psplatform.cpu_count_cores() - if ret is not None and ret < 1: - ret = None - return ret - - -def cpu_times(percpu=False): - """Return system-wide CPU times as a namedtuple. - Every CPU time represents the seconds the CPU has spent in the - given mode. The namedtuple's fields availability varies depending on the - platform: - - - user - - system - - idle - - nice (UNIX) - - iowait (Linux) - - irq (Linux, FreeBSD) - - softirq (Linux) - - steal (Linux >= 2.6.11) - - guest (Linux >= 2.6.24) - - guest_nice (Linux >= 3.2.0) - - When *percpu* is True return a list of namedtuples for each CPU. - First element of the list refers to first CPU, second element - to second CPU and so on. - The order of the list is consistent across calls. - """ - if not percpu: - return _psplatform.cpu_times() - else: - return _psplatform.per_cpu_times() - - -try: - _last_cpu_times = {threading.current_thread().ident: cpu_times()} -except Exception: # noqa: BLE001 - # Don't want to crash at import time. - _last_cpu_times = {} - -try: - _last_per_cpu_times = { - threading.current_thread().ident: cpu_times(percpu=True) - } -except Exception: # noqa: BLE001 - # Don't want to crash at import time. - _last_per_cpu_times = {} - - -def _cpu_tot_time(times): - """Given a cpu_time() ntuple calculates the total CPU time - (including idle time). - """ - tot = sum(times) - if LINUX: - # On Linux guest times are already accounted in "user" or - # "nice" times, so we subtract them from total. - # Htop does the same. References: - # https://github.com/giampaolo/psutil/pull/940 - # http://unix.stackexchange.com/questions/178045 - # https://github.com/torvalds/linux/blob/ - # 447976ef4fd09b1be88b316d1a81553f1aa7cd07/kernel/sched/ - # cputime.c#L158 - tot -= getattr(times, "guest", 0) # Linux 2.6.24+ - tot -= getattr(times, "guest_nice", 0) # Linux 3.2.0+ - return tot - - -def _cpu_busy_time(times): - """Given a cpu_time() ntuple calculates the busy CPU time. - We do so by subtracting all idle CPU times. - """ - busy = _cpu_tot_time(times) - busy -= times.idle - # Linux: "iowait" is time during which the CPU does not do anything - # (waits for IO to complete). On Linux IO wait is *not* accounted - # in "idle" time so we subtract it. Htop does the same. - # References: - # https://github.com/torvalds/linux/blob/ - # 447976ef4fd09b1be88b316d1a81553f1aa7cd07/kernel/sched/cputime.c#L244 - busy -= getattr(times, "iowait", 0) - return busy - - -def _cpu_times_deltas(t1, t2): - assert t1._fields == t2._fields, (t1, t2) - field_deltas = [] - for field in _psplatform.scputimes._fields: - field_delta = getattr(t2, field) - getattr(t1, field) - # CPU times are always supposed to increase over time - # or at least remain the same and that's because time - # cannot go backwards. - # Surprisingly sometimes this might not be the case (at - # least on Windows and Linux), see: - # https://github.com/giampaolo/psutil/issues/392 - # https://github.com/giampaolo/psutil/issues/645 - # https://github.com/giampaolo/psutil/issues/1210 - # Trim negative deltas to zero to ignore decreasing fields. - # top does the same. Reference: - # https://gitlab.com/procps-ng/procps/blob/v3.3.12/top/top.c#L5063 - field_delta = max(0, field_delta) - field_deltas.append(field_delta) - return _psplatform.scputimes(*field_deltas) - - -def cpu_percent(interval=None, percpu=False): - """Return a float representing the current system-wide CPU - utilization as a percentage. - - When *interval* is > 0.0 compares system CPU times elapsed before - and after the interval (blocking). - - When *interval* is 0.0 or None compares system CPU times elapsed - since last call or module import, returning immediately (non - blocking). That means the first time this is called it will - return a meaningless 0.0 value which you should ignore. - In this case is recommended for accuracy that this function be - called with at least 0.1 seconds between calls. - - When *percpu* is True returns a list of floats representing the - utilization as a percentage for each CPU. - First element of the list refers to first CPU, second element - to second CPU and so on. - The order of the list is consistent across calls. - - Examples: - - >>> # blocking, system-wide - >>> psutil.cpu_percent(interval=1) - 2.0 - >>> - >>> # blocking, per-cpu - >>> psutil.cpu_percent(interval=1, percpu=True) - [2.0, 1.0] - >>> - >>> # non-blocking (percentage since last call) - >>> psutil.cpu_percent(interval=None) - 2.9 - >>> - """ - tid = threading.current_thread().ident - blocking = interval is not None and interval > 0.0 - if interval is not None and interval < 0: - msg = f"interval is not positive (got {interval})" - raise ValueError(msg) - - def calculate(t1, t2): - times_delta = _cpu_times_deltas(t1, t2) - all_delta = _cpu_tot_time(times_delta) - busy_delta = _cpu_busy_time(times_delta) - - try: - busy_perc = (busy_delta / all_delta) * 100 - except ZeroDivisionError: - return 0.0 - else: - return round(busy_perc, 1) - - # system-wide usage - if not percpu: - if blocking: - t1 = cpu_times() - time.sleep(interval) - else: - t1 = _last_cpu_times.get(tid) or cpu_times() - _last_cpu_times[tid] = cpu_times() - return calculate(t1, _last_cpu_times[tid]) - # per-cpu usage - else: - ret = [] - if blocking: - tot1 = cpu_times(percpu=True) - time.sleep(interval) - else: - tot1 = _last_per_cpu_times.get(tid) or cpu_times(percpu=True) - _last_per_cpu_times[tid] = cpu_times(percpu=True) - for t1, t2 in zip(tot1, _last_per_cpu_times[tid]): - ret.append(calculate(t1, t2)) - return ret - - -# Use a separate dict for cpu_times_percent(), so it's independent from -# cpu_percent() and they can both be used within the same program. -_last_cpu_times_2 = _last_cpu_times.copy() -_last_per_cpu_times_2 = _last_per_cpu_times.copy() - - -def cpu_times_percent(interval=None, percpu=False): - """Same as cpu_percent() but provides utilization percentages - for each specific CPU time as is returned by cpu_times(). - For instance, on Linux we'll get: - - >>> cpu_times_percent() - cpupercent(user=4.8, nice=0.0, system=4.8, idle=90.5, iowait=0.0, - irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) - >>> - - *interval* and *percpu* arguments have the same meaning as in - cpu_percent(). - """ - tid = threading.current_thread().ident - blocking = interval is not None and interval > 0.0 - if interval is not None and interval < 0: - msg = f"interval is not positive (got {interval!r})" - raise ValueError(msg) - - def calculate(t1, t2): - nums = [] - times_delta = _cpu_times_deltas(t1, t2) - all_delta = _cpu_tot_time(times_delta) - # "scale" is the value to multiply each delta with to get percentages. - # We use "max" to avoid division by zero (if all_delta is 0, then all - # fields are 0 so percentages will be 0 too. all_delta cannot be a - # fraction because cpu times are integers) - scale = 100.0 / max(1, all_delta) - for field_delta in times_delta: - field_perc = field_delta * scale - field_perc = round(field_perc, 1) - # make sure we don't return negative values or values over 100% - field_perc = min(max(0.0, field_perc), 100.0) - nums.append(field_perc) - return _psplatform.scputimes(*nums) - - # system-wide usage - if not percpu: - if blocking: - t1 = cpu_times() - time.sleep(interval) - else: - t1 = _last_cpu_times_2.get(tid) or cpu_times() - _last_cpu_times_2[tid] = cpu_times() - return calculate(t1, _last_cpu_times_2[tid]) - # per-cpu usage - else: - ret = [] - if blocking: - tot1 = cpu_times(percpu=True) - time.sleep(interval) - else: - tot1 = _last_per_cpu_times_2.get(tid) or cpu_times(percpu=True) - _last_per_cpu_times_2[tid] = cpu_times(percpu=True) - for t1, t2 in zip(tot1, _last_per_cpu_times_2[tid]): - ret.append(calculate(t1, t2)) - return ret - - -def cpu_stats(): - """Return CPU statistics.""" - return _psplatform.cpu_stats() - - -if hasattr(_psplatform, "cpu_freq"): - - def cpu_freq(percpu=False): - """Return CPU frequency as a namedtuple including current, - min and max frequency expressed in Mhz. - - If *percpu* is True and the system supports per-cpu frequency - retrieval (Linux only) a list of frequencies is returned for - each CPU. If not a list with one element is returned. - """ - ret = _psplatform.cpu_freq() - if percpu: - return ret - else: - num_cpus = float(len(ret)) - if num_cpus == 0: - return None - elif num_cpus == 1: - return ret[0] - else: - currs, mins, maxs = 0.0, 0.0, 0.0 - set_none = False - for cpu in ret: - currs += cpu.current - # On Linux if /proc/cpuinfo is used min/max are set - # to None. - if LINUX and cpu.min is None: - set_none = True - continue - mins += cpu.min - maxs += cpu.max - - current = currs / num_cpus - - if set_none: - min_ = max_ = None - else: - min_ = mins / num_cpus - max_ = maxs / num_cpus - - return _common.scpufreq(current, min_, max_) - - __all__.append("cpu_freq") - - -if hasattr(os, "getloadavg") or hasattr(_psplatform, "getloadavg"): - # Perform this hasattr check once on import time to either use the - # platform based code or proxy straight from the os module. - if hasattr(os, "getloadavg"): - getloadavg = os.getloadavg - else: - getloadavg = _psplatform.getloadavg - - __all__.append("getloadavg") - - -# ===================================================================== -# --- system memory related functions -# ===================================================================== - - -def virtual_memory(): - """Return statistics about system memory usage as a namedtuple - including the following fields, expressed in bytes: - - - total: - total physical memory available. - - - available: - the memory that can be given instantly to processes without the - system going into swap. - This is calculated by summing different memory values depending - on the platform and it is supposed to be used to monitor actual - memory usage in a cross platform fashion. - - - percent: - the percentage usage calculated as (total - available) / total * 100 - - - used: - memory used, calculated differently depending on the platform and - designed for informational purposes only: - macOS: active + wired - BSD: active + wired + cached - Linux: total - free - - - free: - memory not being used at all (zeroed) that is readily available; - note that this doesn't reflect the actual memory available - (use 'available' instead) - - Platform-specific fields: - - - active (UNIX): - memory currently in use or very recently used, and so it is in RAM. - - - inactive (UNIX): - memory that is marked as not used. - - - buffers (BSD, Linux): - cache for things like file system metadata. - - - cached (BSD, macOS): - cache for various things. - - - wired (macOS, BSD): - memory that is marked to always stay in RAM. It is never moved to disk. - - - shared (BSD): - memory that may be simultaneously accessed by multiple processes. - - The sum of 'used' and 'available' does not necessarily equal total. - On Windows 'available' and 'free' are the same. - """ - global _TOTAL_PHYMEM - ret = _psplatform.virtual_memory() - # cached for later use in Process.memory_percent() - _TOTAL_PHYMEM = ret.total - return ret - - -def swap_memory(): - """Return system swap memory statistics as a namedtuple including - the following fields: - - - total: total swap memory in bytes - - used: used swap memory in bytes - - free: free swap memory in bytes - - percent: the percentage usage - - sin: no. of bytes the system has swapped in from disk (cumulative) - - sout: no. of bytes the system has swapped out from disk (cumulative) - - 'sin' and 'sout' on Windows are meaningless and always set to 0. - """ - return _psplatform.swap_memory() - - -# ===================================================================== -# --- disks/partitions related functions -# ===================================================================== - - -def disk_usage(path): - """Return disk usage statistics about the given *path* as a - namedtuple including total, used and free space expressed in bytes - plus the percentage usage. - """ - return _psplatform.disk_usage(path) - - -def disk_partitions(all=False): - """Return mounted partitions as a list of - (device, mountpoint, fstype, opts) namedtuple. - 'opts' field is a raw string separated by commas indicating mount - options which may vary depending on the platform. - - If *all* parameter is False return physical devices only and ignore - all others. - """ - return _psplatform.disk_partitions(all) - - -def disk_io_counters(perdisk=False, nowrap=True): - """Return system disk I/O statistics as a namedtuple including - the following fields: - - - read_count: number of reads - - write_count: number of writes - - read_bytes: number of bytes read - - write_bytes: number of bytes written - - read_time: time spent reading from disk (in ms) - - write_time: time spent writing to disk (in ms) - - Platform specific: - - - busy_time: (Linux, FreeBSD) time spent doing actual I/Os (in ms) - - read_merged_count (Linux): number of merged reads - - write_merged_count (Linux): number of merged writes - - If *perdisk* is True return the same information for every - physical disk installed on the system as a dictionary - with partition names as the keys and the namedtuple - described above as the values. - - If *nowrap* is True it detects and adjust the numbers which overflow - and wrap (restart from 0) and add "old value" to "new value" so that - the returned numbers will always be increasing or remain the same, - but never decrease. - "disk_io_counters.cache_clear()" can be used to invalidate the - cache. - - On recent Windows versions 'diskperf -y' command may need to be - executed first otherwise this function won't find any disk. - """ - kwargs = dict(perdisk=perdisk) if LINUX else {} - rawdict = _psplatform.disk_io_counters(**kwargs) - if not rawdict: - return {} if perdisk else None - if nowrap: - rawdict = _wrap_numbers(rawdict, 'psutil.disk_io_counters') - nt = getattr(_psplatform, "sdiskio", _common.sdiskio) - if perdisk: - for disk, fields in rawdict.items(): - rawdict[disk] = nt(*fields) - return rawdict - else: - return nt(*(sum(x) for x in zip(*rawdict.values()))) - - -disk_io_counters.cache_clear = functools.partial( - _wrap_numbers.cache_clear, 'psutil.disk_io_counters' -) -disk_io_counters.cache_clear.__doc__ = "Clears nowrap argument cache" - - -# ===================================================================== -# --- network related functions -# ===================================================================== - - -def net_io_counters(pernic=False, nowrap=True): - """Return network I/O statistics as a namedtuple including - the following fields: - - - bytes_sent: number of bytes sent - - bytes_recv: number of bytes received - - packets_sent: number of packets sent - - packets_recv: number of packets received - - errin: total number of errors while receiving - - errout: total number of errors while sending - - dropin: total number of incoming packets which were dropped - - dropout: total number of outgoing packets which were dropped - (always 0 on macOS and BSD) - - If *pernic* is True return the same information for every - network interface installed on the system as a dictionary - with network interface names as the keys and the namedtuple - described above as the values. - - If *nowrap* is True it detects and adjust the numbers which overflow - and wrap (restart from 0) and add "old value" to "new value" so that - the returned numbers will always be increasing or remain the same, - but never decrease. - "net_io_counters.cache_clear()" can be used to invalidate the - cache. - """ - rawdict = _psplatform.net_io_counters() - if not rawdict: - return {} if pernic else None - if nowrap: - rawdict = _wrap_numbers(rawdict, 'psutil.net_io_counters') - if pernic: - for nic, fields in rawdict.items(): - rawdict[nic] = _common.snetio(*fields) - return rawdict - else: - return _common.snetio(*[sum(x) for x in zip(*rawdict.values())]) - - -net_io_counters.cache_clear = functools.partial( - _wrap_numbers.cache_clear, 'psutil.net_io_counters' -) -net_io_counters.cache_clear.__doc__ = "Clears nowrap argument cache" - - -def net_connections(kind='inet'): - """Return system-wide socket connections as a list of - (fd, family, type, laddr, raddr, status, pid) namedtuples. - In case of limited privileges 'fd' and 'pid' may be set to -1 - and None respectively. - The *kind* parameter filters for connections that fit the - following criteria: - - +------------+----------------------------------------------------+ - | Kind Value | Connections using | - +------------+----------------------------------------------------+ - | inet | IPv4 and IPv6 | - | inet4 | IPv4 | - | inet6 | IPv6 | - | tcp | TCP | - | tcp4 | TCP over IPv4 | - | tcp6 | TCP over IPv6 | - | udp | UDP | - | udp4 | UDP over IPv4 | - | udp6 | UDP over IPv6 | - | unix | UNIX socket (both UDP and TCP protocols) | - | all | the sum of all the possible families and protocols | - +------------+----------------------------------------------------+ - - On macOS this function requires root privileges. - """ - _check_conn_kind(kind) - return _psplatform.net_connections(kind) - - -def net_if_addrs(): - """Return the addresses associated to each NIC (network interface - card) installed on the system as a dictionary whose keys are the - NIC names and value is a list of namedtuples for each address - assigned to the NIC. Each namedtuple includes 5 fields: - - - family: can be either socket.AF_INET, socket.AF_INET6 or - psutil.AF_LINK, which refers to a MAC address. - - address: is the primary address and it is always set. - - netmask: and 'broadcast' and 'ptp' may be None. - - ptp: stands for "point to point" and references the - destination address on a point to point interface - (typically a VPN). - - broadcast: and *ptp* are mutually exclusive. - - Note: you can have more than one address of the same family - associated with each interface. - """ - rawlist = _psplatform.net_if_addrs() - rawlist.sort(key=lambda x: x[1]) # sort by family - ret = collections.defaultdict(list) - for name, fam, addr, mask, broadcast, ptp in rawlist: - try: - fam = socket.AddressFamily(fam) - except ValueError: - if WINDOWS and fam == -1: - fam = _psplatform.AF_LINK - elif ( - hasattr(_psplatform, "AF_LINK") and fam == _psplatform.AF_LINK - ): - # Linux defines AF_LINK as an alias for AF_PACKET. - # We re-set the family here so that repr(family) - # will show AF_LINK rather than AF_PACKET - fam = _psplatform.AF_LINK - - if fam == _psplatform.AF_LINK: - # The underlying C function may return an incomplete MAC - # address in which case we fill it with null bytes, see: - # https://github.com/giampaolo/psutil/issues/786 - separator = ":" if POSIX else "-" - while addr.count(separator) < 5: - addr += f"{separator}00" - - nt = _common.snicaddr(fam, addr, mask, broadcast, ptp) - - # On Windows broadcast is None, so we determine it via - # ipaddress module. - if WINDOWS and fam in {socket.AF_INET, socket.AF_INET6}: - try: - broadcast = _common.broadcast_addr(nt) - except Exception as err: # noqa: BLE001 - debug(err) - else: - if broadcast is not None: - nt._replace(broadcast=broadcast) - - ret[name].append(nt) - - return dict(ret) - - -def net_if_stats(): - """Return information about each NIC (network interface card) - installed on the system as a dictionary whose keys are the - NIC names and value is a namedtuple with the following fields: - - - isup: whether the interface is up (bool) - - duplex: can be either NIC_DUPLEX_FULL, NIC_DUPLEX_HALF or - NIC_DUPLEX_UNKNOWN - - speed: the NIC speed expressed in mega bits (MB); if it can't - be determined (e.g. 'localhost') it will be set to 0. - - mtu: the maximum transmission unit expressed in bytes. - """ - return _psplatform.net_if_stats() - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -# Linux, macOS -if hasattr(_psplatform, "sensors_temperatures"): - - def sensors_temperatures(fahrenheit=False): - """Return hardware temperatures. Each entry is a namedtuple - representing a certain hardware sensor (it may be a CPU, an - hard disk or something else, depending on the OS and its - configuration). - All temperatures are expressed in celsius unless *fahrenheit* - is set to True. - """ - - def convert(n): - if n is not None: - return (float(n) * 9 / 5) + 32 if fahrenheit else n - - ret = collections.defaultdict(list) - rawdict = _psplatform.sensors_temperatures() - - for name, values in rawdict.items(): - while values: - label, current, high, critical = values.pop(0) - current = convert(current) - high = convert(high) - critical = convert(critical) - - if high and not critical: - critical = high - elif critical and not high: - high = critical - - ret[name].append( - _common.shwtemp(label, current, high, critical) - ) - - return dict(ret) - - __all__.append("sensors_temperatures") - - -# Linux -if hasattr(_psplatform, "sensors_fans"): - - def sensors_fans(): - """Return fans speed. Each entry is a namedtuple - representing a certain hardware sensor. - All speed are expressed in RPM (rounds per minute). - """ - return _psplatform.sensors_fans() - - __all__.append("sensors_fans") - - -# Linux, Windows, FreeBSD, macOS -if hasattr(_psplatform, "sensors_battery"): - - def sensors_battery(): - """Return battery information. If no battery is installed - returns None. - - - percent: battery power left as a percentage. - - secsleft: a rough approximation of how many seconds are left - before the battery runs out of power. May be - POWER_TIME_UNLIMITED or POWER_TIME_UNLIMITED. - - power_plugged: True if the AC power cable is connected. - """ - return _psplatform.sensors_battery() - - __all__.append("sensors_battery") - - -# ===================================================================== -# --- other system related functions -# ===================================================================== - - -def boot_time(): - """Return the system boot time expressed in seconds since the epoch - (seconds since January 1, 1970, at midnight UTC). The returned - value is based on the system clock, which means it may be affected - by changes such as manual adjustments or time synchronization (e.g. - NTP). - """ - return _psplatform.boot_time() - - -def users(): - """Return users currently connected on the system as a list of - namedtuples including the following fields. - - - user: the name of the user - - terminal: the tty or pseudo-tty associated with the user, if any. - - host: the host name associated with the entry, if any. - - started: the creation time as a floating point number expressed in - seconds since the epoch. - """ - return _psplatform.users() - - -# ===================================================================== -# --- Windows services -# ===================================================================== - - -if WINDOWS: - - def win_service_iter(): - """Return a generator yielding a WindowsService instance for all - Windows services installed. - """ - return _psplatform.win_service_iter() - - def win_service_get(name): - """Get a Windows service by *name*. - Raise NoSuchProcess if no service with such name exists. - """ - return _psplatform.win_service_get(name) - - -# ===================================================================== - - -def _set_debug(value): - """Enable or disable PSUTIL_DEBUG option, which prints debugging - messages to stderr. - """ - import psutil._common - - psutil._common.PSUTIL_DEBUG = bool(value) - _psplatform.cext.set_debug(bool(value)) - - -del memoize_when_activated diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index ad7cd06..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_common.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_common.cpython-312.pyc deleted file mode 100644 index 081c459..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_common.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psaix.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psaix.cpython-312.pyc deleted file mode 100644 index 61b6ca6..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psaix.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psbsd.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psbsd.cpython-312.pyc deleted file mode 100644 index 24510b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psbsd.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pslinux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pslinux.cpython-312.pyc deleted file mode 100644 index d72f85d..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pslinux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psosx.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psosx.cpython-312.pyc deleted file mode 100644 index fe24363..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psosx.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psposix.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psposix.cpython-312.pyc deleted file mode 100644 index 6c16fcc..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_psposix.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pssunos.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pssunos.cpython-312.pyc deleted file mode 100644 index ea836db..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pssunos.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pswindows.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pswindows.cpython-312.pyc deleted file mode 100644 index 71d8702..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/__pycache__/_pswindows.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/_common.py b/myenv/lib/python3.12/site-packages/psutil/_common.py deleted file mode 100644 index 51c798b..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_common.py +++ /dev/null @@ -1,948 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Common objects shared by __init__.py and _ps*.py modules. - -Note: this module is imported by setup.py, so it should not import -psutil or third-party modules. -""" - -import collections -import enum -import functools -import os -import socket -import stat -import sys -import threading -import warnings -from collections import namedtuple -from socket import AF_INET -from socket import SOCK_DGRAM -from socket import SOCK_STREAM - -try: - from socket import AF_INET6 -except ImportError: - AF_INET6 = None -try: - from socket import AF_UNIX -except ImportError: - AF_UNIX = None - - -PSUTIL_DEBUG = bool(os.getenv('PSUTIL_DEBUG')) -_DEFAULT = object() - -# fmt: off -__all__ = [ - # OS constants - 'FREEBSD', 'BSD', 'LINUX', 'NETBSD', 'OPENBSD', 'MACOS', 'OSX', 'POSIX', - 'SUNOS', 'WINDOWS', - # connection constants - 'CONN_CLOSE', 'CONN_CLOSE_WAIT', 'CONN_CLOSING', 'CONN_ESTABLISHED', - 'CONN_FIN_WAIT1', 'CONN_FIN_WAIT2', 'CONN_LAST_ACK', 'CONN_LISTEN', - 'CONN_NONE', 'CONN_SYN_RECV', 'CONN_SYN_SENT', 'CONN_TIME_WAIT', - # net constants - 'NIC_DUPLEX_FULL', 'NIC_DUPLEX_HALF', 'NIC_DUPLEX_UNKNOWN', # noqa: F822 - # process status constants - 'STATUS_DEAD', 'STATUS_DISK_SLEEP', 'STATUS_IDLE', 'STATUS_LOCKED', - 'STATUS_RUNNING', 'STATUS_SLEEPING', 'STATUS_STOPPED', 'STATUS_SUSPENDED', - 'STATUS_TRACING_STOP', 'STATUS_WAITING', 'STATUS_WAKE_KILL', - 'STATUS_WAKING', 'STATUS_ZOMBIE', 'STATUS_PARKED', - # other constants - 'ENCODING', 'ENCODING_ERRS', 'AF_INET6', - # named tuples - 'pconn', 'pcputimes', 'pctxsw', 'pgids', 'pio', 'pionice', 'popenfile', - 'pthread', 'puids', 'sconn', 'scpustats', 'sdiskio', 'sdiskpart', - 'sdiskusage', 'snetio', 'snicaddr', 'snicstats', 'sswap', 'suser', - # utility functions - 'conn_tmap', 'deprecated_method', 'isfile_strict', 'memoize', - 'parse_environ_block', 'path_exists_strict', 'usage_percent', - 'supports_ipv6', 'sockfam_to_enum', 'socktype_to_enum', "wrap_numbers", - 'open_text', 'open_binary', 'cat', 'bcat', - 'bytes2human', 'conn_to_ntuple', 'debug', - # shell utils - 'hilite', 'term_supports_colors', 'print_color', -] -# fmt: on - - -# =================================================================== -# --- OS constants -# =================================================================== - - -POSIX = os.name == "posix" -WINDOWS = os.name == "nt" -LINUX = sys.platform.startswith("linux") -MACOS = sys.platform.startswith("darwin") -OSX = MACOS # deprecated alias -FREEBSD = sys.platform.startswith(("freebsd", "midnightbsd")) -OPENBSD = sys.platform.startswith("openbsd") -NETBSD = sys.platform.startswith("netbsd") -BSD = FREEBSD or OPENBSD or NETBSD -SUNOS = sys.platform.startswith(("sunos", "solaris")) -AIX = sys.platform.startswith("aix") - - -# =================================================================== -# --- API constants -# =================================================================== - - -# Process.status() -STATUS_RUNNING = "running" -STATUS_SLEEPING = "sleeping" -STATUS_DISK_SLEEP = "disk-sleep" -STATUS_STOPPED = "stopped" -STATUS_TRACING_STOP = "tracing-stop" -STATUS_ZOMBIE = "zombie" -STATUS_DEAD = "dead" -STATUS_WAKE_KILL = "wake-kill" -STATUS_WAKING = "waking" -STATUS_IDLE = "idle" # Linux, macOS, FreeBSD -STATUS_LOCKED = "locked" # FreeBSD -STATUS_WAITING = "waiting" # FreeBSD -STATUS_SUSPENDED = "suspended" # NetBSD -STATUS_PARKED = "parked" # Linux - -# Process.net_connections() and psutil.net_connections() -CONN_ESTABLISHED = "ESTABLISHED" -CONN_SYN_SENT = "SYN_SENT" -CONN_SYN_RECV = "SYN_RECV" -CONN_FIN_WAIT1 = "FIN_WAIT1" -CONN_FIN_WAIT2 = "FIN_WAIT2" -CONN_TIME_WAIT = "TIME_WAIT" -CONN_CLOSE = "CLOSE" -CONN_CLOSE_WAIT = "CLOSE_WAIT" -CONN_LAST_ACK = "LAST_ACK" -CONN_LISTEN = "LISTEN" -CONN_CLOSING = "CLOSING" -CONN_NONE = "NONE" - - -# net_if_stats() -class NicDuplex(enum.IntEnum): - NIC_DUPLEX_FULL = 2 - NIC_DUPLEX_HALF = 1 - NIC_DUPLEX_UNKNOWN = 0 - - -globals().update(NicDuplex.__members__) - - -# sensors_battery() -class BatteryTime(enum.IntEnum): - POWER_TIME_UNKNOWN = -1 - POWER_TIME_UNLIMITED = -2 - - -globals().update(BatteryTime.__members__) - -# --- others - -ENCODING = sys.getfilesystemencoding() -ENCODING_ERRS = sys.getfilesystemencodeerrors() - - -# =================================================================== -# --- namedtuples -# =================================================================== - -# --- for system functions - -# fmt: off -# psutil.swap_memory() -sswap = namedtuple('sswap', ['total', 'used', 'free', 'percent', 'sin', - 'sout']) -# psutil.disk_usage() -sdiskusage = namedtuple('sdiskusage', ['total', 'used', 'free', 'percent']) -# psutil.disk_io_counters() -sdiskio = namedtuple('sdiskio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes', - 'read_time', 'write_time']) -# psutil.disk_partitions() -sdiskpart = namedtuple('sdiskpart', ['device', 'mountpoint', 'fstype', 'opts']) -# psutil.net_io_counters() -snetio = namedtuple('snetio', ['bytes_sent', 'bytes_recv', - 'packets_sent', 'packets_recv', - 'errin', 'errout', - 'dropin', 'dropout']) -# psutil.users() -suser = namedtuple('suser', ['name', 'terminal', 'host', 'started', 'pid']) -# psutil.net_connections() -sconn = namedtuple('sconn', ['fd', 'family', 'type', 'laddr', 'raddr', - 'status', 'pid']) -# psutil.net_if_addrs() -snicaddr = namedtuple('snicaddr', - ['family', 'address', 'netmask', 'broadcast', 'ptp']) -# psutil.net_if_stats() -snicstats = namedtuple('snicstats', - ['isup', 'duplex', 'speed', 'mtu', 'flags']) -# psutil.cpu_stats() -scpustats = namedtuple( - 'scpustats', ['ctx_switches', 'interrupts', 'soft_interrupts', 'syscalls']) -# psutil.cpu_freq() -scpufreq = namedtuple('scpufreq', ['current', 'min', 'max']) -# psutil.sensors_temperatures() -shwtemp = namedtuple( - 'shwtemp', ['label', 'current', 'high', 'critical']) -# psutil.sensors_battery() -sbattery = namedtuple('sbattery', ['percent', 'secsleft', 'power_plugged']) -# psutil.sensors_fans() -sfan = namedtuple('sfan', ['label', 'current']) -# fmt: on - -# --- for Process methods - -# psutil.Process.cpu_times() -pcputimes = namedtuple( - 'pcputimes', ['user', 'system', 'children_user', 'children_system'] -) -# psutil.Process.open_files() -popenfile = namedtuple('popenfile', ['path', 'fd']) -# psutil.Process.threads() -pthread = namedtuple('pthread', ['id', 'user_time', 'system_time']) -# psutil.Process.uids() -puids = namedtuple('puids', ['real', 'effective', 'saved']) -# psutil.Process.gids() -pgids = namedtuple('pgids', ['real', 'effective', 'saved']) -# psutil.Process.io_counters() -pio = namedtuple( - 'pio', ['read_count', 'write_count', 'read_bytes', 'write_bytes'] -) -# psutil.Process.ionice() -pionice = namedtuple('pionice', ['ioclass', 'value']) -# psutil.Process.ctx_switches() -pctxsw = namedtuple('pctxsw', ['voluntary', 'involuntary']) -# psutil.Process.net_connections() -pconn = namedtuple( - 'pconn', ['fd', 'family', 'type', 'laddr', 'raddr', 'status'] -) - -# psutil.net_connections() and psutil.Process.net_connections() -addr = namedtuple('addr', ['ip', 'port']) - - -# =================================================================== -# --- Process.net_connections() 'kind' parameter mapping -# =================================================================== - - -conn_tmap = { - "all": ([AF_INET, AF_INET6, AF_UNIX], [SOCK_STREAM, SOCK_DGRAM]), - "tcp": ([AF_INET, AF_INET6], [SOCK_STREAM]), - "tcp4": ([AF_INET], [SOCK_STREAM]), - "udp": ([AF_INET, AF_INET6], [SOCK_DGRAM]), - "udp4": ([AF_INET], [SOCK_DGRAM]), - "inet": ([AF_INET, AF_INET6], [SOCK_STREAM, SOCK_DGRAM]), - "inet4": ([AF_INET], [SOCK_STREAM, SOCK_DGRAM]), - "inet6": ([AF_INET6], [SOCK_STREAM, SOCK_DGRAM]), -} - -if AF_INET6 is not None: - conn_tmap.update({ - "tcp6": ([AF_INET6], [SOCK_STREAM]), - "udp6": ([AF_INET6], [SOCK_DGRAM]), - }) - -if AF_UNIX is not None and not SUNOS: - conn_tmap.update({"unix": ([AF_UNIX], [SOCK_STREAM, SOCK_DGRAM])}) - - -# ===================================================================== -# --- Exceptions -# ===================================================================== - - -class Error(Exception): - """Base exception class. All other psutil exceptions inherit - from this one. - """ - - __module__ = 'psutil' - - def _infodict(self, attrs): - info = collections.OrderedDict() - for name in attrs: - value = getattr(self, name, None) - if value or (name == "pid" and value == 0): - info[name] = value - return info - - def __str__(self): - # invoked on `raise Error` - info = self._infodict(("pid", "ppid", "name")) - if info: - details = "({})".format( - ", ".join([f"{k}={v!r}" for k, v in info.items()]) - ) - else: - details = None - return " ".join([x for x in (getattr(self, "msg", ""), details) if x]) - - def __repr__(self): - # invoked on `repr(Error)` - info = self._infodict(("pid", "ppid", "name", "seconds", "msg")) - details = ", ".join([f"{k}={v!r}" for k, v in info.items()]) - return f"psutil.{self.__class__.__name__}({details})" - - -class NoSuchProcess(Error): - """Exception raised when a process with a certain PID doesn't - or no longer exists. - """ - - __module__ = 'psutil' - - def __init__(self, pid, name=None, msg=None): - Error.__init__(self) - self.pid = pid - self.name = name - self.msg = msg or "process no longer exists" - - def __reduce__(self): - return (self.__class__, (self.pid, self.name, self.msg)) - - -class ZombieProcess(NoSuchProcess): - """Exception raised when querying a zombie process. This is - raised on macOS, BSD and Solaris only, and not always: depending - on the query the OS may be able to succeed anyway. - On Linux all zombie processes are querable (hence this is never - raised). Windows doesn't have zombie processes. - """ - - __module__ = 'psutil' - - def __init__(self, pid, name=None, ppid=None, msg=None): - NoSuchProcess.__init__(self, pid, name, msg) - self.ppid = ppid - self.msg = msg or "PID still exists but it's a zombie" - - def __reduce__(self): - return (self.__class__, (self.pid, self.name, self.ppid, self.msg)) - - -class AccessDenied(Error): - """Exception raised when permission to perform an action is denied.""" - - __module__ = 'psutil' - - def __init__(self, pid=None, name=None, msg=None): - Error.__init__(self) - self.pid = pid - self.name = name - self.msg = msg or "" - - def __reduce__(self): - return (self.__class__, (self.pid, self.name, self.msg)) - - -class TimeoutExpired(Error): - """Raised on Process.wait(timeout) if timeout expires and process - is still alive. - """ - - __module__ = 'psutil' - - def __init__(self, seconds, pid=None, name=None): - Error.__init__(self) - self.seconds = seconds - self.pid = pid - self.name = name - self.msg = f"timeout after {seconds} seconds" - - def __reduce__(self): - return (self.__class__, (self.seconds, self.pid, self.name)) - - -# =================================================================== -# --- utils -# =================================================================== - - -def usage_percent(used, total, round_=None): - """Calculate percentage usage of 'used' against 'total'.""" - try: - ret = (float(used) / total) * 100 - except ZeroDivisionError: - return 0.0 - else: - if round_ is not None: - ret = round(ret, round_) - return ret - - -def memoize(fun): - """A simple memoize decorator for functions supporting (hashable) - positional arguments. - It also provides a cache_clear() function for clearing the cache: - - >>> @memoize - ... def foo() - ... return 1 - ... - >>> foo() - 1 - >>> foo.cache_clear() - >>> - - It supports: - - functions - - classes (acts as a @singleton) - - staticmethods - - classmethods - - It does NOT support: - - methods - """ - - @functools.wraps(fun) - def wrapper(*args, **kwargs): - key = (args, frozenset(sorted(kwargs.items()))) - try: - return cache[key] - except KeyError: - try: - ret = cache[key] = fun(*args, **kwargs) - except Exception as err: - raise err from None - return ret - - def cache_clear(): - """Clear cache.""" - cache.clear() - - cache = {} - wrapper.cache_clear = cache_clear - return wrapper - - -def memoize_when_activated(fun): - """A memoize decorator which is disabled by default. It can be - activated and deactivated on request. - For efficiency reasons it can be used only against class methods - accepting no arguments. - - >>> class Foo: - ... @memoize - ... def foo() - ... print(1) - ... - >>> f = Foo() - >>> # deactivated (default) - >>> foo() - 1 - >>> foo() - 1 - >>> - >>> # activated - >>> foo.cache_activate(self) - >>> foo() - 1 - >>> foo() - >>> foo() - >>> - """ - - @functools.wraps(fun) - def wrapper(self): - try: - # case 1: we previously entered oneshot() ctx - ret = self._cache[fun] - except AttributeError: - # case 2: we never entered oneshot() ctx - try: - return fun(self) - except Exception as err: - raise err from None - except KeyError: - # case 3: we entered oneshot() ctx but there's no cache - # for this entry yet - try: - ret = fun(self) - except Exception as err: - raise err from None - try: - self._cache[fun] = ret - except AttributeError: - # multi-threading race condition, see: - # https://github.com/giampaolo/psutil/issues/1948 - pass - return ret - - def cache_activate(proc): - """Activate cache. Expects a Process instance. Cache will be - stored as a "_cache" instance attribute. - """ - proc._cache = {} - - def cache_deactivate(proc): - """Deactivate and clear cache.""" - try: - del proc._cache - except AttributeError: - pass - - wrapper.cache_activate = cache_activate - wrapper.cache_deactivate = cache_deactivate - return wrapper - - -def isfile_strict(path): - """Same as os.path.isfile() but does not swallow EACCES / EPERM - exceptions, see: - http://mail.python.org/pipermail/python-dev/2012-June/120787.html. - """ - try: - st = os.stat(path) - except PermissionError: - raise - except OSError: - return False - else: - return stat.S_ISREG(st.st_mode) - - -def path_exists_strict(path): - """Same as os.path.exists() but does not swallow EACCES / EPERM - exceptions. See: - http://mail.python.org/pipermail/python-dev/2012-June/120787.html. - """ - try: - os.stat(path) - except PermissionError: - raise - except OSError: - return False - else: - return True - - -def supports_ipv6(): - """Return True if IPv6 is supported on this platform.""" - if not socket.has_ipv6 or AF_INET6 is None: - return False - try: - with socket.socket(AF_INET6, socket.SOCK_STREAM) as sock: - sock.bind(("::1", 0)) - return True - except OSError: - return False - - -def parse_environ_block(data): - """Parse a C environ block of environment variables into a dictionary.""" - # The block is usually raw data from the target process. It might contain - # trailing garbage and lines that do not look like assignments. - ret = {} - pos = 0 - - # localize global variable to speed up access. - WINDOWS_ = WINDOWS - while True: - next_pos = data.find("\0", pos) - # nul byte at the beginning or double nul byte means finish - if next_pos <= pos: - break - # there might not be an equals sign - equal_pos = data.find("=", pos, next_pos) - if equal_pos > pos: - key = data[pos:equal_pos] - value = data[equal_pos + 1 : next_pos] - # Windows expects environment variables to be uppercase only - if WINDOWS_: - key = key.upper() - ret[key] = value - pos = next_pos + 1 - - return ret - - -def sockfam_to_enum(num): - """Convert a numeric socket family value to an IntEnum member. - If it's not a known member, return the numeric value itself. - """ - try: - return socket.AddressFamily(num) - except ValueError: - return num - - -def socktype_to_enum(num): - """Convert a numeric socket type value to an IntEnum member. - If it's not a known member, return the numeric value itself. - """ - try: - return socket.SocketKind(num) - except ValueError: - return num - - -def conn_to_ntuple(fd, fam, type_, laddr, raddr, status, status_map, pid=None): - """Convert a raw connection tuple to a proper ntuple.""" - if fam in {socket.AF_INET, AF_INET6}: - if laddr: - laddr = addr(*laddr) - if raddr: - raddr = addr(*raddr) - if type_ == socket.SOCK_STREAM and fam in {AF_INET, AF_INET6}: - status = status_map.get(status, CONN_NONE) - else: - status = CONN_NONE # ignore whatever C returned to us - fam = sockfam_to_enum(fam) - type_ = socktype_to_enum(type_) - if pid is None: - return pconn(fd, fam, type_, laddr, raddr, status) - else: - return sconn(fd, fam, type_, laddr, raddr, status, pid) - - -def broadcast_addr(addr): - """Given the address ntuple returned by ``net_if_addrs()`` - calculates the broadcast address. - """ - import ipaddress - - if not addr.address or not addr.netmask: - return None - if addr.family == socket.AF_INET: - return str( - ipaddress.IPv4Network( - f"{addr.address}/{addr.netmask}", strict=False - ).broadcast_address - ) - if addr.family == socket.AF_INET6: - return str( - ipaddress.IPv6Network( - f"{addr.address}/{addr.netmask}", strict=False - ).broadcast_address - ) - - -def deprecated_method(replacement): - """A decorator which can be used to mark a method as deprecated - 'replcement' is the method name which will be called instead. - """ - - def outer(fun): - msg = ( - f"{fun.__name__}() is deprecated and will be removed; use" - f" {replacement}() instead" - ) - if fun.__doc__ is None: - fun.__doc__ = msg - - @functools.wraps(fun) - def inner(self, *args, **kwargs): - warnings.warn(msg, category=DeprecationWarning, stacklevel=2) - return getattr(self, replacement)(*args, **kwargs) - - return inner - - return outer - - -class _WrapNumbers: - """Watches numbers so that they don't overflow and wrap - (reset to zero). - """ - - def __init__(self): - self.lock = threading.Lock() - self.cache = {} - self.reminders = {} - self.reminder_keys = {} - - def _add_dict(self, input_dict, name): - assert name not in self.cache - assert name not in self.reminders - assert name not in self.reminder_keys - self.cache[name] = input_dict - self.reminders[name] = collections.defaultdict(int) - self.reminder_keys[name] = collections.defaultdict(set) - - def _remove_dead_reminders(self, input_dict, name): - """In case the number of keys changed between calls (e.g. a - disk disappears) this removes the entry from self.reminders. - """ - old_dict = self.cache[name] - gone_keys = set(old_dict.keys()) - set(input_dict.keys()) - for gone_key in gone_keys: - for remkey in self.reminder_keys[name][gone_key]: - del self.reminders[name][remkey] - del self.reminder_keys[name][gone_key] - - def run(self, input_dict, name): - """Cache dict and sum numbers which overflow and wrap. - Return an updated copy of `input_dict`. - """ - if name not in self.cache: - # This was the first call. - self._add_dict(input_dict, name) - return input_dict - - self._remove_dead_reminders(input_dict, name) - - old_dict = self.cache[name] - new_dict = {} - for key in input_dict: - input_tuple = input_dict[key] - try: - old_tuple = old_dict[key] - except KeyError: - # The input dict has a new key (e.g. a new disk or NIC) - # which didn't exist in the previous call. - new_dict[key] = input_tuple - continue - - bits = [] - for i in range(len(input_tuple)): - input_value = input_tuple[i] - old_value = old_tuple[i] - remkey = (key, i) - if input_value < old_value: - # it wrapped! - self.reminders[name][remkey] += old_value - self.reminder_keys[name][key].add(remkey) - bits.append(input_value + self.reminders[name][remkey]) - - new_dict[key] = tuple(bits) - - self.cache[name] = input_dict - return new_dict - - def cache_clear(self, name=None): - """Clear the internal cache, optionally only for function 'name'.""" - with self.lock: - if name is None: - self.cache.clear() - self.reminders.clear() - self.reminder_keys.clear() - else: - self.cache.pop(name, None) - self.reminders.pop(name, None) - self.reminder_keys.pop(name, None) - - def cache_info(self): - """Return internal cache dicts as a tuple of 3 elements.""" - with self.lock: - return (self.cache, self.reminders, self.reminder_keys) - - -def wrap_numbers(input_dict, name): - """Given an `input_dict` and a function `name`, adjust the numbers - which "wrap" (restart from zero) across different calls by adding - "old value" to "new value" and return an updated dict. - """ - with _wn.lock: - return _wn.run(input_dict, name) - - -_wn = _WrapNumbers() -wrap_numbers.cache_clear = _wn.cache_clear -wrap_numbers.cache_info = _wn.cache_info - - -# The read buffer size for open() builtin. This (also) dictates how -# much data we read(2) when iterating over file lines as in: -# >>> with open(file) as f: -# ... for line in f: -# ... ... -# Default per-line buffer size for binary files is 1K. For text files -# is 8K. We use a bigger buffer (32K) in order to have more consistent -# results when reading /proc pseudo files on Linux, see: -# https://github.com/giampaolo/psutil/issues/2050 -# https://github.com/giampaolo/psutil/issues/708 -FILE_READ_BUFFER_SIZE = 32 * 1024 - - -def open_binary(fname): - return open(fname, "rb", buffering=FILE_READ_BUFFER_SIZE) - - -def open_text(fname): - """Open a file in text mode by using the proper FS encoding and - en/decoding error handlers. - """ - # See: - # https://github.com/giampaolo/psutil/issues/675 - # https://github.com/giampaolo/psutil/pull/733 - fobj = open( # noqa: SIM115 - fname, - buffering=FILE_READ_BUFFER_SIZE, - encoding=ENCODING, - errors=ENCODING_ERRS, - ) - try: - # Dictates per-line read(2) buffer size. Defaults is 8k. See: - # https://github.com/giampaolo/psutil/issues/2050#issuecomment-1013387546 - fobj._CHUNK_SIZE = FILE_READ_BUFFER_SIZE - except AttributeError: - pass - except Exception: - fobj.close() - raise - - return fobj - - -def cat(fname, fallback=_DEFAULT, _open=open_text): - """Read entire file content and return it as a string. File is - opened in text mode. If specified, `fallback` is the value - returned in case of error, either if the file does not exist or - it can't be read(). - """ - if fallback is _DEFAULT: - with _open(fname) as f: - return f.read() - else: - try: - with _open(fname) as f: - return f.read() - except OSError: - return fallback - - -def bcat(fname, fallback=_DEFAULT): - """Same as above but opens file in binary mode.""" - return cat(fname, fallback=fallback, _open=open_binary) - - -def bytes2human(n, format="%(value).1f%(symbol)s"): - """Used by various scripts. See: https://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/?in=user-4178764. - - >>> bytes2human(10000) - '9.8K' - >>> bytes2human(100001221) - '95.4M' - """ - symbols = ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') - prefix = {} - for i, s in enumerate(symbols[1:]): - prefix[s] = 1 << (i + 1) * 10 - for symbol in reversed(symbols[1:]): - if abs(n) >= prefix[symbol]: - value = float(n) / prefix[symbol] - return format % locals() - return format % dict(symbol=symbols[0], value=n) - - -def get_procfs_path(): - """Return updated psutil.PROCFS_PATH constant.""" - return sys.modules['psutil'].PROCFS_PATH - - -def decode(s): - return s.decode(encoding=ENCODING, errors=ENCODING_ERRS) - - -# ===================================================================== -# --- shell utils -# ===================================================================== - - -@memoize -def term_supports_colors(file=sys.stdout): # pragma: no cover - if os.name == 'nt': - return True - try: - import curses - - assert file.isatty() - curses.setupterm() - assert curses.tigetnum("colors") > 0 - except Exception: # noqa: BLE001 - return False - else: - return True - - -def hilite(s, color=None, bold=False): # pragma: no cover - """Return an highlighted version of 'string'.""" - if not term_supports_colors(): - return s - attr = [] - colors = dict( - blue='34', - brown='33', - darkgrey='30', - green='32', - grey='37', - lightblue='36', - red='91', - violet='35', - yellow='93', - ) - colors[None] = '29' - try: - color = colors[color] - except KeyError: - msg = f"invalid color {color!r}; choose amongst {list(colors.keys())}" - raise ValueError(msg) from None - attr.append(color) - if bold: - attr.append('1') - return f"\x1b[{';'.join(attr)}m{s}\x1b[0m" - - -def print_color( - s, color=None, bold=False, file=sys.stdout -): # pragma: no cover - """Print a colorized version of string.""" - if not term_supports_colors(): - print(s, file=file) - elif POSIX: - print(hilite(s, color, bold), file=file) - else: - import ctypes - - DEFAULT_COLOR = 7 - GetStdHandle = ctypes.windll.Kernel32.GetStdHandle - SetConsoleTextAttribute = ( - ctypes.windll.Kernel32.SetConsoleTextAttribute - ) - - colors = dict(green=2, red=4, brown=6, yellow=6) - colors[None] = DEFAULT_COLOR - try: - color = colors[color] - except KeyError: - msg = ( - f"invalid color {color!r}; choose between" - f" {list(colors.keys())!r}" - ) - raise ValueError(msg) from None - if bold and color <= 7: - color += 8 - - handle_id = -12 if file is sys.stderr else -11 - GetStdHandle.restype = ctypes.c_ulong - handle = GetStdHandle(handle_id) - SetConsoleTextAttribute(handle, color) - try: - print(s, file=file) - finally: - SetConsoleTextAttribute(handle, DEFAULT_COLOR) - - -def debug(msg): - """If PSUTIL_DEBUG env var is set, print a debug message to stderr.""" - if PSUTIL_DEBUG: - import inspect - - fname, lineno, _, _lines, _index = inspect.getframeinfo( - inspect.currentframe().f_back - ) - if isinstance(msg, Exception): - if isinstance(msg, OSError): - # ...because str(exc) may contain info about the file name - msg = f"ignoring {msg}" - else: - msg = f"ignoring {msg!r}" - print( # noqa: T201 - f"psutil-debug [{fname}:{lineno}]> {msg}", file=sys.stderr - ) diff --git a/myenv/lib/python3.12/site-packages/psutil/_psaix.py b/myenv/lib/python3.12/site-packages/psutil/_psaix.py deleted file mode 100644 index a84abe3..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_psaix.py +++ /dev/null @@ -1,563 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola' -# Copyright (c) 2017, Arnon Yaari -# All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""AIX platform implementation.""" - -import functools -import glob -import os -import re -import subprocess -import sys -from collections import namedtuple - -from . import _common -from . import _psposix -from . import _psutil_aix as cext -from ._common import NIC_DUPLEX_FULL -from ._common import NIC_DUPLEX_HALF -from ._common import NIC_DUPLEX_UNKNOWN -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import ZombieProcess -from ._common import conn_to_ntuple -from ._common import get_procfs_path -from ._common import memoize_when_activated -from ._common import usage_percent - -__extra__all__ = ["PROCFS_PATH"] - - -# ===================================================================== -# --- globals -# ===================================================================== - - -HAS_THREADS = hasattr(cext, "proc_threads") -HAS_NET_IO_COUNTERS = hasattr(cext, "net_io_counters") -HAS_PROC_IO_COUNTERS = hasattr(cext, "proc_io_counters") - -PAGE_SIZE = cext.getpagesize() -AF_LINK = cext.AF_LINK - -PROC_STATUSES = { - cext.SIDL: _common.STATUS_IDLE, - cext.SZOMB: _common.STATUS_ZOMBIE, - cext.SACTIVE: _common.STATUS_RUNNING, - cext.SSWAP: _common.STATUS_RUNNING, # TODO what status is this? - cext.SSTOP: _common.STATUS_STOPPED, -} - -TCP_STATUSES = { - cext.TCPS_ESTABLISHED: _common.CONN_ESTABLISHED, - cext.TCPS_SYN_SENT: _common.CONN_SYN_SENT, - cext.TCPS_SYN_RCVD: _common.CONN_SYN_RECV, - cext.TCPS_FIN_WAIT_1: _common.CONN_FIN_WAIT1, - cext.TCPS_FIN_WAIT_2: _common.CONN_FIN_WAIT2, - cext.TCPS_TIME_WAIT: _common.CONN_TIME_WAIT, - cext.TCPS_CLOSED: _common.CONN_CLOSE, - cext.TCPS_CLOSE_WAIT: _common.CONN_CLOSE_WAIT, - cext.TCPS_LAST_ACK: _common.CONN_LAST_ACK, - cext.TCPS_LISTEN: _common.CONN_LISTEN, - cext.TCPS_CLOSING: _common.CONN_CLOSING, - cext.PSUTIL_CONN_NONE: _common.CONN_NONE, -} - -proc_info_map = dict( - ppid=0, - rss=1, - vms=2, - create_time=3, - nice=4, - num_threads=5, - status=6, - ttynr=7, -) - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# psutil.Process.memory_info() -pmem = namedtuple('pmem', ['rss', 'vms']) -# psutil.Process.memory_full_info() -pfullmem = pmem -# psutil.Process.cpu_times() -scputimes = namedtuple('scputimes', ['user', 'system', 'idle', 'iowait']) -# psutil.virtual_memory() -svmem = namedtuple('svmem', ['total', 'available', 'percent', 'used', 'free']) - - -# ===================================================================== -# --- memory -# ===================================================================== - - -def virtual_memory(): - total, avail, free, _pinned, inuse = cext.virtual_mem() - percent = usage_percent((total - avail), total, round_=1) - return svmem(total, avail, percent, inuse, free) - - -def swap_memory(): - """Swap system memory as a (total, used, free, sin, sout) tuple.""" - total, free, sin, sout = cext.swap_mem() - used = total - free - percent = usage_percent(used, total, round_=1) - return _common.sswap(total, used, free, percent, sin, sout) - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return system-wide CPU times as a named tuple.""" - ret = cext.per_cpu_times() - return scputimes(*[sum(x) for x in zip(*ret)]) - - -def per_cpu_times(): - """Return system per-CPU times as a list of named tuples.""" - ret = cext.per_cpu_times() - return [scputimes(*x) for x in ret] - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - try: - return os.sysconf("SC_NPROCESSORS_ONLN") - except ValueError: - # mimic os.cpu_count() behavior - return None - - -def cpu_count_cores(): - cmd = ["lsdev", "-Cc", "processor"] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = p.communicate() - stdout, stderr = (x.decode(sys.stdout.encoding) for x in (stdout, stderr)) - if p.returncode != 0: - msg = f"{cmd!r} command error\n{stderr}" - raise RuntimeError(msg) - processors = stdout.strip().splitlines() - return len(processors) or None - - -def cpu_stats(): - """Return various CPU stats as a named tuple.""" - ctx_switches, interrupts, soft_interrupts, syscalls = cext.cpu_stats() - return _common.scpustats( - ctx_switches, interrupts, soft_interrupts, syscalls - ) - - -# ===================================================================== -# --- disks -# ===================================================================== - - -disk_io_counters = cext.disk_io_counters -disk_usage = _psposix.disk_usage - - -def disk_partitions(all=False): - """Return system disk partitions.""" - # TODO - the filtering logic should be better checked so that - # it tries to reflect 'df' as much as possible - retlist = [] - partitions = cext.disk_partitions() - for partition in partitions: - device, mountpoint, fstype, opts = partition - if device == 'none': - device = '' - if not all: - # Differently from, say, Linux, we don't have a list of - # common fs types so the best we can do, AFAIK, is to - # filter by filesystem having a total size > 0. - if not disk_usage(mountpoint).total: - continue - ntuple = _common.sdiskpart(device, mountpoint, fstype, opts) - retlist.append(ntuple) - return retlist - - -# ===================================================================== -# --- network -# ===================================================================== - - -net_if_addrs = cext.net_if_addrs - -if HAS_NET_IO_COUNTERS: - net_io_counters = cext.net_io_counters - - -def net_connections(kind, _pid=-1): - """Return socket connections. If pid == -1 return system-wide - connections (as opposed to connections opened by one process only). - """ - families, types = _common.conn_tmap[kind] - rawlist = cext.net_connections(_pid) - ret = [] - for item in rawlist: - fd, fam, type_, laddr, raddr, status, pid = item - if fam not in families: - continue - if type_ not in types: - continue - nt = conn_to_ntuple( - fd, - fam, - type_, - laddr, - raddr, - status, - TCP_STATUSES, - pid=pid if _pid == -1 else None, - ) - ret.append(nt) - return ret - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - duplex_map = {"Full": NIC_DUPLEX_FULL, "Half": NIC_DUPLEX_HALF} - names = {x[0] for x in net_if_addrs()} - ret = {} - for name in names: - mtu = cext.net_if_mtu(name) - flags = cext.net_if_flags(name) - - # try to get speed and duplex - # TODO: rewrite this in C (entstat forks, so use truss -f to follow. - # looks like it is using an undocumented ioctl?) - duplex = "" - speed = 0 - p = subprocess.Popen( - ["/usr/bin/entstat", "-d", name], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - stdout, stderr = p.communicate() - stdout, stderr = ( - x.decode(sys.stdout.encoding) for x in (stdout, stderr) - ) - if p.returncode == 0: - re_result = re.search( - r"Running: (\d+) Mbps.*?(\w+) Duplex", stdout - ) - if re_result is not None: - speed = int(re_result.group(1)) - duplex = re_result.group(2) - - output_flags = ','.join(flags) - isup = 'running' in flags - duplex = duplex_map.get(duplex, NIC_DUPLEX_UNKNOWN) - ret[name] = _common.snicstats(isup, duplex, speed, mtu, output_flags) - return ret - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -def boot_time(): - """The system boot time expressed in seconds since the epoch.""" - return cext.boot_time() - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - localhost = (':0.0', ':0') - for item in rawlist: - user, tty, hostname, tstamp, user_process, pid = item - # note: the underlying C function includes entries about - # system boot, run level and others. We might want - # to use them in the future. - if not user_process: - continue - if hostname in localhost: - hostname = 'localhost' - nt = _common.suser(user, tty, hostname, tstamp, pid) - retlist.append(nt) - return retlist - - -# ===================================================================== -# --- processes -# ===================================================================== - - -def pids(): - """Returns a list of PIDs currently running on the system.""" - return [int(x) for x in os.listdir(get_procfs_path()) if x.isdigit()] - - -def pid_exists(pid): - """Check for the existence of a unix pid.""" - return os.path.exists(os.path.join(get_procfs_path(), str(pid), "psinfo")) - - -def wrap_exceptions(fun): - """Call callable into a try/except clause and translate ENOENT, - EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - pid, ppid, name = self.pid, self._ppid, self._name - try: - return fun(self, *args, **kwargs) - except (FileNotFoundError, ProcessLookupError) as err: - # ENOENT (no such file or directory) gets raised on open(). - # ESRCH (no such process) can get raised on read() if - # process is gone in meantime. - if not pid_exists(pid): - raise NoSuchProcess(pid, name) from err - raise ZombieProcess(pid, name, ppid) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - - return wrapper - - -class Process: - """Wrapper class around underlying C implementation.""" - - __slots__ = ["_cache", "_name", "_ppid", "_procfs_path", "pid"] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - self._procfs_path = get_procfs_path() - - def oneshot_enter(self): - self._proc_basic_info.cache_activate(self) - self._proc_cred.cache_activate(self) - - def oneshot_exit(self): - self._proc_basic_info.cache_deactivate(self) - self._proc_cred.cache_deactivate(self) - - @wrap_exceptions - @memoize_when_activated - def _proc_basic_info(self): - return cext.proc_basic_info(self.pid, self._procfs_path) - - @wrap_exceptions - @memoize_when_activated - def _proc_cred(self): - return cext.proc_cred(self.pid, self._procfs_path) - - @wrap_exceptions - def name(self): - if self.pid == 0: - return "swapper" - # note: max 16 characters - return cext.proc_name(self.pid, self._procfs_path).rstrip("\x00") - - @wrap_exceptions - def exe(self): - # there is no way to get executable path in AIX other than to guess, - # and guessing is more complex than what's in the wrapping class - cmdline = self.cmdline() - if not cmdline: - return '' - exe = cmdline[0] - if os.path.sep in exe: - # relative or absolute path - if not os.path.isabs(exe): - # if cwd has changed, we're out of luck - this may be wrong! - exe = os.path.abspath(os.path.join(self.cwd(), exe)) - if ( - os.path.isabs(exe) - and os.path.isfile(exe) - and os.access(exe, os.X_OK) - ): - return exe - # not found, move to search in PATH using basename only - exe = os.path.basename(exe) - # search for exe name PATH - for path in os.environ["PATH"].split(":"): - possible_exe = os.path.abspath(os.path.join(path, exe)) - if os.path.isfile(possible_exe) and os.access( - possible_exe, os.X_OK - ): - return possible_exe - return '' - - @wrap_exceptions - def cmdline(self): - return cext.proc_args(self.pid) - - @wrap_exceptions - def environ(self): - return cext.proc_environ(self.pid) - - @wrap_exceptions - def create_time(self): - return self._proc_basic_info()[proc_info_map['create_time']] - - @wrap_exceptions - def num_threads(self): - return self._proc_basic_info()[proc_info_map['num_threads']] - - if HAS_THREADS: - - @wrap_exceptions - def threads(self): - rawlist = cext.proc_threads(self.pid) - retlist = [] - for thread_id, utime, stime in rawlist: - ntuple = _common.pthread(thread_id, utime, stime) - retlist.append(ntuple) - # The underlying C implementation retrieves all OS threads - # and filters them by PID. At this point we can't tell whether - # an empty list means there were no connections for process or - # process is no longer active so we force NSP in case the PID - # is no longer there. - if not retlist: - # will raise NSP if process is gone - os.stat(f"{self._procfs_path}/{self.pid}") - return retlist - - @wrap_exceptions - def net_connections(self, kind='inet'): - ret = net_connections(kind, _pid=self.pid) - # The underlying C implementation retrieves all OS connections - # and filters them by PID. At this point we can't tell whether - # an empty list means there were no connections for process or - # process is no longer active so we force NSP in case the PID - # is no longer there. - if not ret: - # will raise NSP if process is gone - os.stat(f"{self._procfs_path}/{self.pid}") - return ret - - @wrap_exceptions - def nice_get(self): - return cext.proc_priority_get(self.pid) - - @wrap_exceptions - def nice_set(self, value): - return cext.proc_priority_set(self.pid, value) - - @wrap_exceptions - def ppid(self): - self._ppid = self._proc_basic_info()[proc_info_map['ppid']] - return self._ppid - - @wrap_exceptions - def uids(self): - real, effective, saved, _, _, _ = self._proc_cred() - return _common.puids(real, effective, saved) - - @wrap_exceptions - def gids(self): - _, _, _, real, effective, saved = self._proc_cred() - return _common.puids(real, effective, saved) - - @wrap_exceptions - def cpu_times(self): - t = cext.proc_cpu_times(self.pid, self._procfs_path) - return _common.pcputimes(*t) - - @wrap_exceptions - def terminal(self): - ttydev = self._proc_basic_info()[proc_info_map['ttynr']] - # convert from 64-bit dev_t to 32-bit dev_t and then map the device - ttydev = ((ttydev & 0x0000FFFF00000000) >> 16) | (ttydev & 0xFFFF) - # try to match rdev of /dev/pts/* files ttydev - for dev in glob.glob("/dev/**/*"): - if os.stat(dev).st_rdev == ttydev: - return dev - return None - - @wrap_exceptions - def cwd(self): - procfs_path = self._procfs_path - try: - result = os.readlink(f"{procfs_path}/{self.pid}/cwd") - return result.rstrip('/') - except FileNotFoundError: - os.stat(f"{procfs_path}/{self.pid}") # raise NSP or AD - return "" - - @wrap_exceptions - def memory_info(self): - ret = self._proc_basic_info() - rss = ret[proc_info_map['rss']] * 1024 - vms = ret[proc_info_map['vms']] * 1024 - return pmem(rss, vms) - - memory_full_info = memory_info - - @wrap_exceptions - def status(self): - code = self._proc_basic_info()[proc_info_map['status']] - # XXX is '?' legit? (we're not supposed to return it anyway) - return PROC_STATUSES.get(code, '?') - - def open_files(self): - # TODO rewrite without using procfiles (stat /proc/pid/fd/* and then - # find matching name of the inode) - p = subprocess.Popen( - ["/usr/bin/procfiles", "-n", str(self.pid)], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - stdout, stderr = p.communicate() - stdout, stderr = ( - x.decode(sys.stdout.encoding) for x in (stdout, stderr) - ) - if "no such process" in stderr.lower(): - raise NoSuchProcess(self.pid, self._name) - procfiles = re.findall(r"(\d+): S_IFREG.*name:(.*)\n", stdout) - retlist = [] - for fd, path in procfiles: - path = path.strip() - if path.startswith("//"): - path = path[1:] - if path.lower() == "cannot be retrieved": - continue - retlist.append(_common.popenfile(path, int(fd))) - return retlist - - @wrap_exceptions - def num_fds(self): - if self.pid == 0: # no /proc/0/fd - return 0 - return len(os.listdir(f"{self._procfs_path}/{self.pid}/fd")) - - @wrap_exceptions - def num_ctx_switches(self): - return _common.pctxsw(*cext.proc_num_ctx_switches(self.pid)) - - @wrap_exceptions - def wait(self, timeout=None): - return _psposix.wait_pid(self.pid, timeout, self._name) - - if HAS_PROC_IO_COUNTERS: - - @wrap_exceptions - def io_counters(self): - try: - rc, wc, rb, wb = cext.proc_io_counters(self.pid) - except OSError as err: - # if process is terminated, proc_io_counters returns OSError - # instead of NSP - if not pid_exists(self.pid): - raise NoSuchProcess(self.pid, self._name) from err - raise - return _common.pio(rc, wc, rb, wb) diff --git a/myenv/lib/python3.12/site-packages/psutil/_psbsd.py b/myenv/lib/python3.12/site-packages/psutil/_psbsd.py deleted file mode 100644 index ea58c76..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_psbsd.py +++ /dev/null @@ -1,939 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""FreeBSD, OpenBSD and NetBSD platforms implementation.""" - -import contextlib -import errno -import functools -import os -from collections import defaultdict -from collections import namedtuple -from xml.etree import ElementTree # noqa: ICN001 - -from . import _common -from . import _psposix -from . import _psutil_bsd as cext -from ._common import FREEBSD -from ._common import NETBSD -from ._common import OPENBSD -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import ZombieProcess -from ._common import conn_tmap -from ._common import conn_to_ntuple -from ._common import debug -from ._common import memoize -from ._common import memoize_when_activated -from ._common import usage_percent - -__extra__all__ = [] - - -# ===================================================================== -# --- globals -# ===================================================================== - - -if FREEBSD: - PROC_STATUSES = { - cext.SIDL: _common.STATUS_IDLE, - cext.SRUN: _common.STATUS_RUNNING, - cext.SSLEEP: _common.STATUS_SLEEPING, - cext.SSTOP: _common.STATUS_STOPPED, - cext.SZOMB: _common.STATUS_ZOMBIE, - cext.SWAIT: _common.STATUS_WAITING, - cext.SLOCK: _common.STATUS_LOCKED, - } -elif OPENBSD: - PROC_STATUSES = { - cext.SIDL: _common.STATUS_IDLE, - cext.SSLEEP: _common.STATUS_SLEEPING, - cext.SSTOP: _common.STATUS_STOPPED, - # According to /usr/include/sys/proc.h SZOMB is unused. - # test_zombie_process() shows that SDEAD is the right - # equivalent. Also it appears there's no equivalent of - # psutil.STATUS_DEAD. SDEAD really means STATUS_ZOMBIE. - # cext.SZOMB: _common.STATUS_ZOMBIE, - cext.SDEAD: _common.STATUS_ZOMBIE, - cext.SZOMB: _common.STATUS_ZOMBIE, - # From http://www.eecs.harvard.edu/~margo/cs161/videos/proc.h.txt - # OpenBSD has SRUN and SONPROC: SRUN indicates that a process - # is runnable but *not* yet running, i.e. is on a run queue. - # SONPROC indicates that the process is actually executing on - # a CPU, i.e. it is no longer on a run queue. - # As such we'll map SRUN to STATUS_WAKING and SONPROC to - # STATUS_RUNNING - cext.SRUN: _common.STATUS_WAKING, - cext.SONPROC: _common.STATUS_RUNNING, - } -elif NETBSD: - PROC_STATUSES = { - cext.SIDL: _common.STATUS_IDLE, - cext.SSLEEP: _common.STATUS_SLEEPING, - cext.SSTOP: _common.STATUS_STOPPED, - cext.SZOMB: _common.STATUS_ZOMBIE, - cext.SRUN: _common.STATUS_WAKING, - cext.SONPROC: _common.STATUS_RUNNING, - } - -TCP_STATUSES = { - cext.TCPS_ESTABLISHED: _common.CONN_ESTABLISHED, - cext.TCPS_SYN_SENT: _common.CONN_SYN_SENT, - cext.TCPS_SYN_RECEIVED: _common.CONN_SYN_RECV, - cext.TCPS_FIN_WAIT_1: _common.CONN_FIN_WAIT1, - cext.TCPS_FIN_WAIT_2: _common.CONN_FIN_WAIT2, - cext.TCPS_TIME_WAIT: _common.CONN_TIME_WAIT, - cext.TCPS_CLOSED: _common.CONN_CLOSE, - cext.TCPS_CLOSE_WAIT: _common.CONN_CLOSE_WAIT, - cext.TCPS_LAST_ACK: _common.CONN_LAST_ACK, - cext.TCPS_LISTEN: _common.CONN_LISTEN, - cext.TCPS_CLOSING: _common.CONN_CLOSING, - cext.PSUTIL_CONN_NONE: _common.CONN_NONE, -} - -PAGESIZE = cext.getpagesize() -AF_LINK = cext.AF_LINK - -HAS_PROC_NUM_THREADS = hasattr(cext, "proc_num_threads") - -kinfo_proc_map = dict( - ppid=0, - status=1, - real_uid=2, - effective_uid=3, - saved_uid=4, - real_gid=5, - effective_gid=6, - saved_gid=7, - ttynr=8, - create_time=9, - ctx_switches_vol=10, - ctx_switches_unvol=11, - read_io_count=12, - write_io_count=13, - user_time=14, - sys_time=15, - ch_user_time=16, - ch_sys_time=17, - rss=18, - vms=19, - memtext=20, - memdata=21, - memstack=22, - cpunum=23, - name=24, -) - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# fmt: off -# psutil.virtual_memory() -svmem = namedtuple( - 'svmem', ['total', 'available', 'percent', 'used', 'free', - 'active', 'inactive', 'buffers', 'cached', 'shared', 'wired']) -# psutil.cpu_times() -scputimes = namedtuple( - 'scputimes', ['user', 'nice', 'system', 'idle', 'irq']) -# psutil.Process.memory_info() -pmem = namedtuple('pmem', ['rss', 'vms', 'text', 'data', 'stack']) -# psutil.Process.memory_full_info() -pfullmem = pmem -# psutil.Process.cpu_times() -pcputimes = namedtuple('pcputimes', - ['user', 'system', 'children_user', 'children_system']) -# psutil.Process.memory_maps(grouped=True) -pmmap_grouped = namedtuple( - 'pmmap_grouped', 'path rss, private, ref_count, shadow_count') -# psutil.Process.memory_maps(grouped=False) -pmmap_ext = namedtuple( - 'pmmap_ext', 'addr, perms path rss, private, ref_count, shadow_count') -# psutil.disk_io_counters() -if FREEBSD: - sdiskio = namedtuple('sdiskio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes', - 'read_time', 'write_time', - 'busy_time']) -else: - sdiskio = namedtuple('sdiskio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes']) -# fmt: on - - -# ===================================================================== -# --- memory -# ===================================================================== - - -def virtual_memory(): - mem = cext.virtual_mem() - if NETBSD: - total, free, active, inactive, wired, cached = mem - # On NetBSD buffers and shared mem is determined via /proc. - # The C ext set them to 0. - with open('/proc/meminfo', 'rb') as f: - for line in f: - if line.startswith(b'Buffers:'): - buffers = int(line.split()[1]) * 1024 - elif line.startswith(b'MemShared:'): - shared = int(line.split()[1]) * 1024 - # Before avail was calculated as (inactive + cached + free), - # same as zabbix, but it turned out it could exceed total (see - # #2233), so zabbix seems to be wrong. Htop calculates it - # differently, and the used value seem more realistic, so let's - # match htop. - # https://github.com/htop-dev/htop/blob/e7f447b/netbsd/NetBSDProcessList.c#L162 - # https://github.com/zabbix/zabbix/blob/af5e0f8/src/libs/zbxsysinfo/netbsd/memory.c#L135 - used = active + wired - avail = total - used - else: - total, free, active, inactive, wired, cached, buffers, shared = mem - # matches freebsd-memory CLI: - # * https://people.freebsd.org/~rse/dist/freebsd-memory - # * https://www.cyberciti.biz/files/scripts/freebsd-memory.pl.txt - # matches zabbix: - # * https://github.com/zabbix/zabbix/blob/af5e0f8/src/libs/zbxsysinfo/freebsd/memory.c#L143 - avail = inactive + cached + free - used = active + wired + cached - - percent = usage_percent((total - avail), total, round_=1) - return svmem( - total, - avail, - percent, - used, - free, - active, - inactive, - buffers, - cached, - shared, - wired, - ) - - -def swap_memory(): - """System swap memory as (total, used, free, sin, sout) namedtuple.""" - total, used, free, sin, sout = cext.swap_mem() - percent = usage_percent(used, total, round_=1) - return _common.sswap(total, used, free, percent, sin, sout) - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return system per-CPU times as a namedtuple.""" - user, nice, system, idle, irq = cext.cpu_times() - return scputimes(user, nice, system, idle, irq) - - -def per_cpu_times(): - """Return system CPU times as a namedtuple.""" - ret = [] - for cpu_t in cext.per_cpu_times(): - user, nice, system, idle, irq = cpu_t - item = scputimes(user, nice, system, idle, irq) - ret.append(item) - return ret - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - return cext.cpu_count_logical() - - -if OPENBSD or NETBSD: - - def cpu_count_cores(): - # OpenBSD and NetBSD do not implement this. - return 1 if cpu_count_logical() == 1 else None - -else: - - def cpu_count_cores(): - """Return the number of CPU cores in the system.""" - # From the C module we'll get an XML string similar to this: - # http://manpages.ubuntu.com/manpages/precise/man4/smp.4freebsd.html - # We may get None in case "sysctl kern.sched.topology_spec" - # is not supported on this BSD version, in which case we'll mimic - # os.cpu_count() and return None. - ret = None - s = cext.cpu_topology() - if s is not None: - # get rid of padding chars appended at the end of the string - index = s.rfind("") - if index != -1: - s = s[: index + 9] - root = ElementTree.fromstring(s) - try: - ret = len(root.findall('group/children/group/cpu')) or None - finally: - # needed otherwise it will memleak - root.clear() - if not ret: - # If logical CPUs == 1 it's obvious we' have only 1 core. - if cpu_count_logical() == 1: - return 1 - return ret - - -def cpu_stats(): - """Return various CPU stats as a named tuple.""" - if FREEBSD: - # Note: the C ext is returning some metrics we are not exposing: - # traps. - ctxsw, intrs, soft_intrs, syscalls, _traps = cext.cpu_stats() - elif NETBSD: - # XXX - # Note about intrs: the C extension returns 0. intrs - # can be determined via /proc/stat; it has the same value as - # soft_intrs thought so the kernel is faking it (?). - # - # Note about syscalls: the C extension always sets it to 0 (?). - # - # Note: the C ext is returning some metrics we are not exposing: - # traps, faults and forks. - ctxsw, intrs, soft_intrs, syscalls, _traps, _faults, _forks = ( - cext.cpu_stats() - ) - with open('/proc/stat', 'rb') as f: - for line in f: - if line.startswith(b'intr'): - intrs = int(line.split()[1]) - elif OPENBSD: - # Note: the C ext is returning some metrics we are not exposing: - # traps, faults and forks. - ctxsw, intrs, soft_intrs, syscalls, _traps, _faults, _forks = ( - cext.cpu_stats() - ) - return _common.scpustats(ctxsw, intrs, soft_intrs, syscalls) - - -if FREEBSD: - - def cpu_freq(): - """Return frequency metrics for CPUs. As of Dec 2018 only - CPU 0 appears to be supported by FreeBSD and all other cores - match the frequency of CPU 0. - """ - ret = [] - num_cpus = cpu_count_logical() - for cpu in range(num_cpus): - try: - current, available_freq = cext.cpu_freq(cpu) - except NotImplementedError: - continue - if available_freq: - try: - min_freq = int(available_freq.split(" ")[-1].split("/")[0]) - except (IndexError, ValueError): - min_freq = None - try: - max_freq = int(available_freq.split(" ")[0].split("/")[0]) - except (IndexError, ValueError): - max_freq = None - ret.append(_common.scpufreq(current, min_freq, max_freq)) - return ret - -elif OPENBSD: - - def cpu_freq(): - curr = float(cext.cpu_freq()) - return [_common.scpufreq(curr, 0.0, 0.0)] - - -# ===================================================================== -# --- disks -# ===================================================================== - - -def disk_partitions(all=False): - """Return mounted disk partitions as a list of namedtuples. - 'all' argument is ignored, see: - https://github.com/giampaolo/psutil/issues/906. - """ - retlist = [] - partitions = cext.disk_partitions() - for partition in partitions: - device, mountpoint, fstype, opts = partition - ntuple = _common.sdiskpart(device, mountpoint, fstype, opts) - retlist.append(ntuple) - return retlist - - -disk_usage = _psposix.disk_usage -disk_io_counters = cext.disk_io_counters - - -# ===================================================================== -# --- network -# ===================================================================== - - -net_io_counters = cext.net_io_counters -net_if_addrs = cext.net_if_addrs - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - names = net_io_counters().keys() - ret = {} - for name in names: - try: - mtu = cext.net_if_mtu(name) - flags = cext.net_if_flags(name) - duplex, speed = cext.net_if_duplex_speed(name) - except OSError as err: - # https://github.com/giampaolo/psutil/issues/1279 - if err.errno != errno.ENODEV: - raise - else: - if hasattr(_common, 'NicDuplex'): - duplex = _common.NicDuplex(duplex) - output_flags = ','.join(flags) - isup = 'running' in flags - ret[name] = _common.snicstats( - isup, duplex, speed, mtu, output_flags - ) - return ret - - -def net_connections(kind): - """System-wide network connections.""" - families, types = conn_tmap[kind] - ret = set() - if OPENBSD: - rawlist = cext.net_connections(-1, families, types) - elif NETBSD: - rawlist = cext.net_connections(-1, kind) - else: # FreeBSD - rawlist = cext.net_connections(families, types) - - for item in rawlist: - fd, fam, type, laddr, raddr, status, pid = item - nt = conn_to_ntuple( - fd, fam, type, laddr, raddr, status, TCP_STATUSES, pid - ) - ret.add(nt) - return list(ret) - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -if FREEBSD: - - def sensors_battery(): - """Return battery info.""" - try: - percent, minsleft, power_plugged = cext.sensors_battery() - except NotImplementedError: - # See: https://github.com/giampaolo/psutil/issues/1074 - return None - power_plugged = power_plugged == 1 - if power_plugged: - secsleft = _common.POWER_TIME_UNLIMITED - elif minsleft == -1: - secsleft = _common.POWER_TIME_UNKNOWN - else: - secsleft = minsleft * 60 - return _common.sbattery(percent, secsleft, power_plugged) - - def sensors_temperatures(): - """Return CPU cores temperatures if available, else an empty dict.""" - ret = defaultdict(list) - num_cpus = cpu_count_logical() - for cpu in range(num_cpus): - try: - current, high = cext.sensors_cpu_temperature(cpu) - if high <= 0: - high = None - name = f"Core {cpu}" - ret["coretemp"].append( - _common.shwtemp(name, current, high, high) - ) - except NotImplementedError: - pass - - return ret - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -def boot_time(): - """The system boot time expressed in seconds since the epoch.""" - return cext.boot_time() - - -if NETBSD: - - try: - INIT_BOOT_TIME = boot_time() - except Exception as err: # noqa: BLE001 - # Don't want to crash at import time. - debug(f"ignoring exception on import: {err!r}") - INIT_BOOT_TIME = 0 - - def adjust_proc_create_time(ctime): - """Account for system clock updates.""" - if INIT_BOOT_TIME == 0: - return ctime - - diff = INIT_BOOT_TIME - boot_time() - if diff == 0 or abs(diff) < 1: - return ctime - - debug("system clock was updated; adjusting process create_time()") - if diff < 0: - return ctime - diff - return ctime + diff - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - for item in rawlist: - user, tty, hostname, tstamp, pid = item - if tty == '~': - continue # reboot or shutdown - nt = _common.suser(user, tty or None, hostname, tstamp, pid) - retlist.append(nt) - return retlist - - -# ===================================================================== -# --- processes -# ===================================================================== - - -@memoize -def _pid_0_exists(): - try: - Process(0).name() - except NoSuchProcess: - return False - except AccessDenied: - return True - else: - return True - - -def pids(): - """Returns a list of PIDs currently running on the system.""" - ret = cext.pids() - if OPENBSD and (0 not in ret) and _pid_0_exists(): - # On OpenBSD the kernel does not return PID 0 (neither does - # ps) but it's actually querable (Process(0) will succeed). - ret.insert(0, 0) - return ret - - -if NETBSD: - - def pid_exists(pid): - exists = _psposix.pid_exists(pid) - if not exists: - # We do this because _psposix.pid_exists() lies in case of - # zombie processes. - return pid in pids() - else: - return True - -elif OPENBSD: - - def pid_exists(pid): - exists = _psposix.pid_exists(pid) - if not exists: - return False - else: - # OpenBSD seems to be the only BSD platform where - # _psposix.pid_exists() returns True for thread IDs (tids), - # so we can't use it. - return pid in pids() - -else: # FreeBSD - pid_exists = _psposix.pid_exists - - -def wrap_exceptions(fun): - """Decorator which translates bare OSError exceptions into - NoSuchProcess and AccessDenied. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - pid, ppid, name = self.pid, self._ppid, self._name - try: - return fun(self, *args, **kwargs) - except ProcessLookupError as err: - if cext.proc_is_zombie(pid): - raise ZombieProcess(pid, name, ppid) from err - raise NoSuchProcess(pid, name) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - except cext.ZombieProcessError as err: - raise ZombieProcess(pid, name, ppid) from err - except OSError as err: - if pid == 0 and 0 in pids(): - raise AccessDenied(pid, name) from err - raise err from None - - return wrapper - - -@contextlib.contextmanager -def wrap_exceptions_procfs(inst): - """Same as above, for routines relying on reading /proc fs.""" - pid, name, ppid = inst.pid, inst._name, inst._ppid - try: - yield - except (ProcessLookupError, FileNotFoundError) as err: - # ENOENT (no such file or directory) gets raised on open(). - # ESRCH (no such process) can get raised on read() if - # process is gone in meantime. - if cext.proc_is_zombie(inst.pid): - raise ZombieProcess(pid, name, ppid) from err - else: - raise NoSuchProcess(pid, name) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - - -class Process: - """Wrapper class around underlying C implementation.""" - - __slots__ = ["_cache", "_name", "_ppid", "pid"] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - - def _assert_alive(self): - """Raise NSP if the process disappeared on us.""" - # For those C function who do not raise NSP, possibly returning - # incorrect or incomplete result. - cext.proc_name(self.pid) - - @wrap_exceptions - @memoize_when_activated - def oneshot(self): - """Retrieves multiple process info in one shot as a raw tuple.""" - ret = cext.proc_oneshot_info(self.pid) - assert len(ret) == len(kinfo_proc_map) - return ret - - def oneshot_enter(self): - self.oneshot.cache_activate(self) - - def oneshot_exit(self): - self.oneshot.cache_deactivate(self) - - @wrap_exceptions - def name(self): - name = self.oneshot()[kinfo_proc_map['name']] - return name if name is not None else cext.proc_name(self.pid) - - @wrap_exceptions - def exe(self): - if FREEBSD: - if self.pid == 0: - return '' # else NSP - return cext.proc_exe(self.pid) - elif NETBSD: - if self.pid == 0: - # /proc/0 dir exists but /proc/0/exe doesn't - return "" - with wrap_exceptions_procfs(self): - return os.readlink(f"/proc/{self.pid}/exe") - else: - # OpenBSD: exe cannot be determined; references: - # https://chromium.googlesource.com/chromium/src/base/+/ - # master/base_paths_posix.cc - # We try our best guess by using which against the first - # cmdline arg (may return None). - import shutil - - cmdline = self.cmdline() - if cmdline: - return shutil.which(cmdline[0]) or "" - else: - return "" - - @wrap_exceptions - def cmdline(self): - if OPENBSD and self.pid == 0: - return [] # ...else it crashes - elif NETBSD: - # XXX - most of the times the underlying sysctl() call on - # NetBSD and OpenBSD returns a truncated string. Also - # /proc/pid/cmdline behaves the same so it looks like this - # is a kernel bug. - try: - return cext.proc_cmdline(self.pid) - except OSError as err: - if err.errno == errno.EINVAL: - pid, name, ppid = self.pid, self._name, self._ppid - if cext.proc_is_zombie(self.pid): - raise ZombieProcess(pid, name, ppid) from err - if not pid_exists(self.pid): - raise NoSuchProcess(pid, name, ppid) from err - # XXX: this happens with unicode tests. It means the C - # routine is unable to decode invalid unicode chars. - debug(f"ignoring {err!r} and returning an empty list") - return [] - else: - raise - else: - return cext.proc_cmdline(self.pid) - - @wrap_exceptions - def environ(self): - return cext.proc_environ(self.pid) - - @wrap_exceptions - def terminal(self): - tty_nr = self.oneshot()[kinfo_proc_map['ttynr']] - tmap = _psposix.get_terminal_map() - try: - return tmap[tty_nr] - except KeyError: - return None - - @wrap_exceptions - def ppid(self): - self._ppid = self.oneshot()[kinfo_proc_map['ppid']] - return self._ppid - - @wrap_exceptions - def uids(self): - rawtuple = self.oneshot() - return _common.puids( - rawtuple[kinfo_proc_map['real_uid']], - rawtuple[kinfo_proc_map['effective_uid']], - rawtuple[kinfo_proc_map['saved_uid']], - ) - - @wrap_exceptions - def gids(self): - rawtuple = self.oneshot() - return _common.pgids( - rawtuple[kinfo_proc_map['real_gid']], - rawtuple[kinfo_proc_map['effective_gid']], - rawtuple[kinfo_proc_map['saved_gid']], - ) - - @wrap_exceptions - def cpu_times(self): - rawtuple = self.oneshot() - return _common.pcputimes( - rawtuple[kinfo_proc_map['user_time']], - rawtuple[kinfo_proc_map['sys_time']], - rawtuple[kinfo_proc_map['ch_user_time']], - rawtuple[kinfo_proc_map['ch_sys_time']], - ) - - if FREEBSD: - - @wrap_exceptions - def cpu_num(self): - return self.oneshot()[kinfo_proc_map['cpunum']] - - @wrap_exceptions - def memory_info(self): - rawtuple = self.oneshot() - return pmem( - rawtuple[kinfo_proc_map['rss']], - rawtuple[kinfo_proc_map['vms']], - rawtuple[kinfo_proc_map['memtext']], - rawtuple[kinfo_proc_map['memdata']], - rawtuple[kinfo_proc_map['memstack']], - ) - - memory_full_info = memory_info - - @wrap_exceptions - def create_time(self, monotonic=False): - ctime = self.oneshot()[kinfo_proc_map['create_time']] - if NETBSD and not monotonic: - # NetBSD: ctime subject to system clock updates. - ctime = adjust_proc_create_time(ctime) - return ctime - - @wrap_exceptions - def num_threads(self): - if HAS_PROC_NUM_THREADS: - # FreeBSD / NetBSD - return cext.proc_num_threads(self.pid) - else: - return len(self.threads()) - - @wrap_exceptions - def num_ctx_switches(self): - rawtuple = self.oneshot() - return _common.pctxsw( - rawtuple[kinfo_proc_map['ctx_switches_vol']], - rawtuple[kinfo_proc_map['ctx_switches_unvol']], - ) - - @wrap_exceptions - def threads(self): - # Note: on OpenSBD this (/dev/mem) requires root access. - rawlist = cext.proc_threads(self.pid) - retlist = [] - for thread_id, utime, stime in rawlist: - ntuple = _common.pthread(thread_id, utime, stime) - retlist.append(ntuple) - if OPENBSD: - self._assert_alive() - return retlist - - @wrap_exceptions - def net_connections(self, kind='inet'): - families, types = conn_tmap[kind] - ret = [] - - if NETBSD: - rawlist = cext.net_connections(self.pid, kind) - elif OPENBSD: - rawlist = cext.net_connections(self.pid, families, types) - else: - rawlist = cext.proc_net_connections(self.pid, families, types) - - for item in rawlist: - fd, fam, type, laddr, raddr, status = item[:6] - if FREEBSD: - if (fam not in families) or (type not in types): - continue - nt = conn_to_ntuple( - fd, fam, type, laddr, raddr, status, TCP_STATUSES - ) - ret.append(nt) - - self._assert_alive() - return ret - - @wrap_exceptions - def wait(self, timeout=None): - return _psposix.wait_pid(self.pid, timeout, self._name) - - @wrap_exceptions - def nice_get(self): - return cext.proc_priority_get(self.pid) - - @wrap_exceptions - def nice_set(self, value): - return cext.proc_priority_set(self.pid, value) - - @wrap_exceptions - def status(self): - code = self.oneshot()[kinfo_proc_map['status']] - # XXX is '?' legit? (we're not supposed to return it anyway) - return PROC_STATUSES.get(code, '?') - - @wrap_exceptions - def io_counters(self): - rawtuple = self.oneshot() - return _common.pio( - rawtuple[kinfo_proc_map['read_io_count']], - rawtuple[kinfo_proc_map['write_io_count']], - -1, - -1, - ) - - @wrap_exceptions - def cwd(self): - """Return process current working directory.""" - # sometimes we get an empty string, in which case we turn - # it into None - if OPENBSD and self.pid == 0: - return "" # ...else it would raise EINVAL - return cext.proc_cwd(self.pid) - - nt_mmap_grouped = namedtuple( - 'mmap', 'path rss, private, ref_count, shadow_count' - ) - nt_mmap_ext = namedtuple( - 'mmap', 'addr, perms path rss, private, ref_count, shadow_count' - ) - - @wrap_exceptions - def open_files(self): - """Return files opened by process as a list of namedtuples.""" - rawlist = cext.proc_open_files(self.pid) - return [_common.popenfile(path, fd) for path, fd in rawlist] - - @wrap_exceptions - def num_fds(self): - """Return the number of file descriptors opened by this process.""" - ret = cext.proc_num_fds(self.pid) - if NETBSD: - self._assert_alive() - return ret - - # --- FreeBSD only APIs - - if FREEBSD: - - @wrap_exceptions - def cpu_affinity_get(self): - return cext.proc_cpu_affinity_get(self.pid) - - @wrap_exceptions - def cpu_affinity_set(self, cpus): - # Pre-emptively check if CPUs are valid because the C - # function has a weird behavior in case of invalid CPUs, - # see: https://github.com/giampaolo/psutil/issues/586 - allcpus = set(range(len(per_cpu_times()))) - for cpu in cpus: - if cpu not in allcpus: - msg = f"invalid CPU {cpu!r} (choose between {allcpus})" - raise ValueError(msg) - try: - cext.proc_cpu_affinity_set(self.pid, cpus) - except OSError as err: - # 'man cpuset_setaffinity' about EDEADLK: - # <> - if err.errno in {errno.EINVAL, errno.EDEADLK}: - for cpu in cpus: - if cpu not in allcpus: - msg = ( - f"invalid CPU {cpu!r} (choose between" - f" {allcpus})" - ) - raise ValueError(msg) from err - raise - - @wrap_exceptions - def memory_maps(self): - return cext.proc_memory_maps(self.pid) - - @wrap_exceptions - def rlimit(self, resource, limits=None): - if limits is None: - return cext.proc_getrlimit(self.pid, resource) - else: - if len(limits) != 2: - msg = ( - "second argument must be a (soft, hard) tuple, got" - f" {limits!r}" - ) - raise ValueError(msg) - soft, hard = limits - return cext.proc_setrlimit(self.pid, resource, soft, hard) diff --git a/myenv/lib/python3.12/site-packages/psutil/_pslinux.py b/myenv/lib/python3.12/site-packages/psutil/_pslinux.py deleted file mode 100644 index 821c4eb..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_pslinux.py +++ /dev/null @@ -1,2306 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Linux platform implementation.""" - - -import base64 -import collections -import enum -import errno -import functools -import glob -import os -import re -import resource -import socket -import struct -import sys -import warnings -from collections import defaultdict -from collections import namedtuple - -from . import _common -from . import _psposix -from . import _psutil_linux as cext -from ._common import ENCODING -from ._common import NIC_DUPLEX_FULL -from ._common import NIC_DUPLEX_HALF -from ._common import NIC_DUPLEX_UNKNOWN -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import ZombieProcess -from ._common import bcat -from ._common import cat -from ._common import debug -from ._common import decode -from ._common import get_procfs_path -from ._common import isfile_strict -from ._common import memoize -from ._common import memoize_when_activated -from ._common import open_binary -from ._common import open_text -from ._common import parse_environ_block -from ._common import path_exists_strict -from ._common import supports_ipv6 -from ._common import usage_percent - -# fmt: off -__extra__all__ = [ - 'PROCFS_PATH', - # io prio constants - "IOPRIO_CLASS_NONE", "IOPRIO_CLASS_RT", "IOPRIO_CLASS_BE", - "IOPRIO_CLASS_IDLE", - # connection status constants - "CONN_ESTABLISHED", "CONN_SYN_SENT", "CONN_SYN_RECV", "CONN_FIN_WAIT1", - "CONN_FIN_WAIT2", "CONN_TIME_WAIT", "CONN_CLOSE", "CONN_CLOSE_WAIT", - "CONN_LAST_ACK", "CONN_LISTEN", "CONN_CLOSING", -] -# fmt: on - - -# ===================================================================== -# --- globals -# ===================================================================== - - -POWER_SUPPLY_PATH = "/sys/class/power_supply" -HAS_PROC_SMAPS = os.path.exists(f"/proc/{os.getpid()}/smaps") -HAS_PROC_SMAPS_ROLLUP = os.path.exists(f"/proc/{os.getpid()}/smaps_rollup") -HAS_PROC_IO_PRIORITY = hasattr(cext, "proc_ioprio_get") -HAS_CPU_AFFINITY = hasattr(cext, "proc_cpu_affinity_get") - -# Number of clock ticks per second -CLOCK_TICKS = os.sysconf("SC_CLK_TCK") -PAGESIZE = cext.getpagesize() -LITTLE_ENDIAN = sys.byteorder == 'little' -UNSET = object() - -# "man iostat" states that sectors are equivalent with blocks and have -# a size of 512 bytes. Despite this value can be queried at runtime -# via /sys/block/{DISK}/queue/hw_sector_size and results may vary -# between 1k, 2k, or 4k... 512 appears to be a magic constant used -# throughout Linux source code: -# * https://stackoverflow.com/a/38136179/376587 -# * https://lists.gt.net/linux/kernel/2241060 -# * https://github.com/giampaolo/psutil/issues/1305 -# * https://github.com/torvalds/linux/blob/ -# 4f671fe2f9523a1ea206f63fe60a7c7b3a56d5c7/include/linux/bio.h#L99 -# * https://lkml.org/lkml/2015/8/17/234 -DISK_SECTOR_SIZE = 512 - -AddressFamily = enum.IntEnum( - 'AddressFamily', {'AF_LINK': int(socket.AF_PACKET)} -) -AF_LINK = AddressFamily.AF_LINK - - -# ioprio_* constants http://linux.die.net/man/2/ioprio_get -class IOPriority(enum.IntEnum): - IOPRIO_CLASS_NONE = 0 - IOPRIO_CLASS_RT = 1 - IOPRIO_CLASS_BE = 2 - IOPRIO_CLASS_IDLE = 3 - - -globals().update(IOPriority.__members__) - -# See: -# https://github.com/torvalds/linux/blame/master/fs/proc/array.c -# ...and (TASK_* constants): -# https://github.com/torvalds/linux/blob/master/include/linux/sched.h -PROC_STATUSES = { - "R": _common.STATUS_RUNNING, - "S": _common.STATUS_SLEEPING, - "D": _common.STATUS_DISK_SLEEP, - "T": _common.STATUS_STOPPED, - "t": _common.STATUS_TRACING_STOP, - "Z": _common.STATUS_ZOMBIE, - "X": _common.STATUS_DEAD, - "x": _common.STATUS_DEAD, - "K": _common.STATUS_WAKE_KILL, - "W": _common.STATUS_WAKING, - "I": _common.STATUS_IDLE, - "P": _common.STATUS_PARKED, -} - -# https://github.com/torvalds/linux/blob/master/include/net/tcp_states.h -TCP_STATUSES = { - "01": _common.CONN_ESTABLISHED, - "02": _common.CONN_SYN_SENT, - "03": _common.CONN_SYN_RECV, - "04": _common.CONN_FIN_WAIT1, - "05": _common.CONN_FIN_WAIT2, - "06": _common.CONN_TIME_WAIT, - "07": _common.CONN_CLOSE, - "08": _common.CONN_CLOSE_WAIT, - "09": _common.CONN_LAST_ACK, - "0A": _common.CONN_LISTEN, - "0B": _common.CONN_CLOSING, -} - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# fmt: off -# psutil.virtual_memory() -svmem = namedtuple( - 'svmem', ['total', 'available', 'percent', 'used', 'free', - 'active', 'inactive', 'buffers', 'cached', 'shared', 'slab']) -# psutil.disk_io_counters() -sdiskio = namedtuple( - 'sdiskio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes', - 'read_time', 'write_time', - 'read_merged_count', 'write_merged_count', - 'busy_time']) -# psutil.Process().open_files() -popenfile = namedtuple( - 'popenfile', ['path', 'fd', 'position', 'mode', 'flags']) -# psutil.Process().memory_info() -pmem = namedtuple('pmem', 'rss vms shared text lib data dirty') -# psutil.Process().memory_full_info() -pfullmem = namedtuple('pfullmem', pmem._fields + ('uss', 'pss', 'swap')) -# psutil.Process().memory_maps(grouped=True) -pmmap_grouped = namedtuple( - 'pmmap_grouped', - ['path', 'rss', 'size', 'pss', 'shared_clean', 'shared_dirty', - 'private_clean', 'private_dirty', 'referenced', 'anonymous', 'swap']) -# psutil.Process().memory_maps(grouped=False) -pmmap_ext = namedtuple( - 'pmmap_ext', 'addr perms ' + ' '.join(pmmap_grouped._fields)) -# psutil.Process.io_counters() -pio = namedtuple('pio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes', - 'read_chars', 'write_chars']) -# psutil.Process.cpu_times() -pcputimes = namedtuple('pcputimes', - ['user', 'system', 'children_user', 'children_system', - 'iowait']) -# fmt: on - - -# ===================================================================== -# --- utils -# ===================================================================== - - -def readlink(path): - """Wrapper around os.readlink().""" - assert isinstance(path, str), path - path = os.readlink(path) - # readlink() might return paths containing null bytes ('\x00') - # resulting in "TypeError: must be encoded string without NULL - # bytes, not str" errors when the string is passed to other - # fs-related functions (os.*, open(), ...). - # Apparently everything after '\x00' is garbage (we can have - # ' (deleted)', 'new' and possibly others), see: - # https://github.com/giampaolo/psutil/issues/717 - path = path.split('\x00')[0] - # Certain paths have ' (deleted)' appended. Usually this is - # bogus as the file actually exists. Even if it doesn't we - # don't care. - if path.endswith(' (deleted)') and not path_exists_strict(path): - path = path[:-10] - return path - - -def file_flags_to_mode(flags): - """Convert file's open() flags into a readable string. - Used by Process.open_files(). - """ - modes_map = {os.O_RDONLY: 'r', os.O_WRONLY: 'w', os.O_RDWR: 'w+'} - mode = modes_map[flags & (os.O_RDONLY | os.O_WRONLY | os.O_RDWR)] - if flags & os.O_APPEND: - mode = mode.replace('w', 'a', 1) - mode = mode.replace('w+', 'r+') - # possible values: r, w, a, r+, a+ - return mode - - -def is_storage_device(name): - """Return True if the given name refers to a root device (e.g. - "sda", "nvme0n1") as opposed to a logical partition (e.g. "sda1", - "nvme0n1p1"). If name is a virtual device (e.g. "loop1", "ram") - return True. - """ - # Re-adapted from iostat source code, see: - # https://github.com/sysstat/sysstat/blob/ - # 97912938cd476645b267280069e83b1c8dc0e1c7/common.c#L208 - # Some devices may have a slash in their name (e.g. cciss/c0d0...). - name = name.replace('/', '!') - including_virtual = True - if including_virtual: - path = f"/sys/block/{name}" - else: - path = f"/sys/block/{name}/device" - return os.access(path, os.F_OK) - - -@memoize -def set_scputimes_ntuple(procfs_path): - """Set a namedtuple of variable fields depending on the CPU times - available on this Linux kernel version which may be: - (user, nice, system, idle, iowait, irq, softirq, [steal, [guest, - [guest_nice]]]) - Used by cpu_times() function. - """ - global scputimes - with open_binary(f"{procfs_path}/stat") as f: - values = f.readline().split()[1:] - fields = ['user', 'nice', 'system', 'idle', 'iowait', 'irq', 'softirq'] - vlen = len(values) - if vlen >= 8: - # Linux >= 2.6.11 - fields.append('steal') - if vlen >= 9: - # Linux >= 2.6.24 - fields.append('guest') - if vlen >= 10: - # Linux >= 3.2.0 - fields.append('guest_nice') - scputimes = namedtuple('scputimes', fields) - - -try: - set_scputimes_ntuple("/proc") -except Exception as err: # noqa: BLE001 - # Don't want to crash at import time. - debug(f"ignoring exception on import: {err!r}") - scputimes = namedtuple('scputimes', 'user system idle')(0.0, 0.0, 0.0) - - -# ===================================================================== -# --- system memory -# ===================================================================== - - -def calculate_avail_vmem(mems): - """Fallback for kernels < 3.14 where /proc/meminfo does not provide - "MemAvailable", see: - https://blog.famzah.net/2014/09/24/. - - This code reimplements the algorithm outlined here: - https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ - commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773 - - We use this function also when "MemAvailable" returns 0 (possibly a - kernel bug, see: https://github.com/giampaolo/psutil/issues/1915). - In that case this routine matches "free" CLI tool result ("available" - column). - - XXX: on recent kernels this calculation may differ by ~1.5% compared - to "MemAvailable:", as it's calculated slightly differently. - It is still way more realistic than doing (free + cached) though. - See: - * https://gitlab.com/procps-ng/procps/issues/42 - * https://github.com/famzah/linux-memavailable-procfs/issues/2 - """ - # Note about "fallback" value. According to: - # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ - # commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773 - # ...long ago "available" memory was calculated as (free + cached), - # We use fallback when one of these is missing from /proc/meminfo: - # "Active(file)": introduced in 2.6.28 / Dec 2008 - # "Inactive(file)": introduced in 2.6.28 / Dec 2008 - # "SReclaimable": introduced in 2.6.19 / Nov 2006 - # /proc/zoneinfo: introduced in 2.6.13 / Aug 2005 - free = mems[b'MemFree:'] - fallback = free + mems.get(b"Cached:", 0) - try: - lru_active_file = mems[b'Active(file):'] - lru_inactive_file = mems[b'Inactive(file):'] - slab_reclaimable = mems[b'SReclaimable:'] - except KeyError as err: - debug( - f"{err.args[0]} is missing from /proc/meminfo; using an" - " approximation for calculating available memory" - ) - return fallback - try: - f = open_binary(f"{get_procfs_path()}/zoneinfo") - except OSError: - return fallback # kernel 2.6.13 - - watermark_low = 0 - with f: - for line in f: - line = line.strip() - if line.startswith(b'low'): - watermark_low += int(line.split()[1]) - watermark_low *= PAGESIZE - - avail = free - watermark_low - pagecache = lru_active_file + lru_inactive_file - pagecache -= min(pagecache / 2, watermark_low) - avail += pagecache - avail += slab_reclaimable - min(slab_reclaimable / 2.0, watermark_low) - return int(avail) - - -def virtual_memory(): - """Report virtual memory stats. - This implementation mimics procps-ng-3.3.12, aka "free" CLI tool: - https://gitlab.com/procps-ng/procps/blob/ - 24fd2605c51fccc375ab0287cec33aa767f06718/proc/sysinfo.c#L778-791 - The returned values are supposed to match both "free" and "vmstat -s" - CLI tools. - """ - missing_fields = [] - mems = {} - with open_binary(f"{get_procfs_path()}/meminfo") as f: - for line in f: - fields = line.split() - mems[fields[0]] = int(fields[1]) * 1024 - - # /proc doc states that the available fields in /proc/meminfo vary - # by architecture and compile options, but these 3 values are also - # returned by sysinfo(2); as such we assume they are always there. - total = mems[b'MemTotal:'] - free = mems[b'MemFree:'] - try: - buffers = mems[b'Buffers:'] - except KeyError: - # https://github.com/giampaolo/psutil/issues/1010 - buffers = 0 - missing_fields.append('buffers') - try: - cached = mems[b"Cached:"] - except KeyError: - cached = 0 - missing_fields.append('cached') - else: - # "free" cmdline utility sums reclaimable to cached. - # Older versions of procps used to add slab memory instead. - # This got changed in: - # https://gitlab.com/procps-ng/procps/commit/ - # 05d751c4f076a2f0118b914c5e51cfbb4762ad8e - cached += mems.get(b"SReclaimable:", 0) # since kernel 2.6.19 - - try: - shared = mems[b'Shmem:'] # since kernel 2.6.32 - except KeyError: - try: - shared = mems[b'MemShared:'] # kernels 2.4 - except KeyError: - shared = 0 - missing_fields.append('shared') - - try: - active = mems[b"Active:"] - except KeyError: - active = 0 - missing_fields.append('active') - - try: - inactive = mems[b"Inactive:"] - except KeyError: - try: - inactive = ( - mems[b"Inact_dirty:"] - + mems[b"Inact_clean:"] - + mems[b"Inact_laundry:"] - ) - except KeyError: - inactive = 0 - missing_fields.append('inactive') - - try: - slab = mems[b"Slab:"] - except KeyError: - slab = 0 - - # - starting from 4.4.0 we match free's "available" column. - # Before 4.4.0 we calculated it as (free + buffers + cached) - # which matched htop. - # - free and htop available memory differs as per: - # http://askubuntu.com/a/369589 - # http://unix.stackexchange.com/a/65852/168884 - # - MemAvailable has been introduced in kernel 3.14 - try: - avail = mems[b'MemAvailable:'] - except KeyError: - avail = calculate_avail_vmem(mems) - else: - if avail == 0: - # Yes, it can happen (probably a kernel bug): - # https://github.com/giampaolo/psutil/issues/1915 - # In this case "free" CLI tool makes an estimate. We do the same, - # and it matches "free" CLI tool. - avail = calculate_avail_vmem(mems) - - if avail < 0: - avail = 0 - missing_fields.append('available') - elif avail > total: - # If avail is greater than total or our calculation overflows, - # that's symptomatic of running within a LCX container where such - # values will be dramatically distorted over those of the host. - # https://gitlab.com/procps-ng/procps/blob/ - # 24fd2605c51fccc375ab0287cec33aa767f06718/proc/sysinfo.c#L764 - avail = free - - used = total - avail - - percent = usage_percent((total - avail), total, round_=1) - - # Warn about missing metrics which are set to 0. - if missing_fields: - msg = "{} memory stats couldn't be determined and {} set to 0".format( - ", ".join(missing_fields), - "was" if len(missing_fields) == 1 else "were", - ) - warnings.warn(msg, RuntimeWarning, stacklevel=2) - - return svmem( - total, - avail, - percent, - used, - free, - active, - inactive, - buffers, - cached, - shared, - slab, - ) - - -def swap_memory(): - """Return swap memory metrics.""" - mems = {} - with open_binary(f"{get_procfs_path()}/meminfo") as f: - for line in f: - fields = line.split() - mems[fields[0]] = int(fields[1]) * 1024 - # We prefer /proc/meminfo over sysinfo() syscall so that - # psutil.PROCFS_PATH can be used in order to allow retrieval - # for linux containers, see: - # https://github.com/giampaolo/psutil/issues/1015 - try: - total = mems[b'SwapTotal:'] - free = mems[b'SwapFree:'] - except KeyError: - _, _, _, _, total, free, unit_multiplier = cext.linux_sysinfo() - total *= unit_multiplier - free *= unit_multiplier - - used = total - free - percent = usage_percent(used, total, round_=1) - # get pgin/pgouts - try: - f = open_binary(f"{get_procfs_path()}/vmstat") - except OSError as err: - # see https://github.com/giampaolo/psutil/issues/722 - msg = ( - "'sin' and 'sout' swap memory stats couldn't " - f"be determined and were set to 0 ({err})" - ) - warnings.warn(msg, RuntimeWarning, stacklevel=2) - sin = sout = 0 - else: - with f: - sin = sout = None - for line in f: - # values are expressed in 4 kilo bytes, we want - # bytes instead - if line.startswith(b'pswpin'): - sin = int(line.split(b' ')[1]) * 4 * 1024 - elif line.startswith(b'pswpout'): - sout = int(line.split(b' ')[1]) * 4 * 1024 - if sin is not None and sout is not None: - break - else: - # we might get here when dealing with exotic Linux - # flavors, see: - # https://github.com/giampaolo/psutil/issues/313 - msg = "'sin' and 'sout' swap memory stats couldn't " - msg += "be determined and were set to 0" - warnings.warn(msg, RuntimeWarning, stacklevel=2) - sin = sout = 0 - return _common.sswap(total, used, free, percent, sin, sout) - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return a named tuple representing the following system-wide - CPU times: - (user, nice, system, idle, iowait, irq, softirq [steal, [guest, - [guest_nice]]]) - Last 3 fields may not be available on all Linux kernel versions. - """ - procfs_path = get_procfs_path() - set_scputimes_ntuple(procfs_path) - with open_binary(f"{procfs_path}/stat") as f: - values = f.readline().split() - fields = values[1 : len(scputimes._fields) + 1] - fields = [float(x) / CLOCK_TICKS for x in fields] - return scputimes(*fields) - - -def per_cpu_times(): - """Return a list of namedtuple representing the CPU times - for every CPU available on the system. - """ - procfs_path = get_procfs_path() - set_scputimes_ntuple(procfs_path) - cpus = [] - with open_binary(f"{procfs_path}/stat") as f: - # get rid of the first line which refers to system wide CPU stats - f.readline() - for line in f: - if line.startswith(b'cpu'): - values = line.split() - fields = values[1 : len(scputimes._fields) + 1] - fields = [float(x) / CLOCK_TICKS for x in fields] - entry = scputimes(*fields) - cpus.append(entry) - return cpus - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - try: - return os.sysconf("SC_NPROCESSORS_ONLN") - except ValueError: - # as a second fallback we try to parse /proc/cpuinfo - num = 0 - with open_binary(f"{get_procfs_path()}/cpuinfo") as f: - for line in f: - if line.lower().startswith(b'processor'): - num += 1 - - # unknown format (e.g. amrel/sparc architectures), see: - # https://github.com/giampaolo/psutil/issues/200 - # try to parse /proc/stat as a last resort - if num == 0: - search = re.compile(r'cpu\d') - with open_text(f"{get_procfs_path()}/stat") as f: - for line in f: - line = line.split(' ')[0] - if search.match(line): - num += 1 - - if num == 0: - # mimic os.cpu_count() - return None - return num - - -def cpu_count_cores(): - """Return the number of CPU cores in the system.""" - # Method #1 - ls = set() - # These 2 files are the same but */core_cpus_list is newer while - # */thread_siblings_list is deprecated and may disappear in the future. - # https://www.kernel.org/doc/Documentation/admin-guide/cputopology.rst - # https://github.com/giampaolo/psutil/pull/1727#issuecomment-707624964 - # https://lkml.org/lkml/2019/2/26/41 - p1 = "/sys/devices/system/cpu/cpu[0-9]*/topology/core_cpus_list" - p2 = "/sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list" - for path in glob.glob(p1) or glob.glob(p2): - with open_binary(path) as f: - ls.add(f.read().strip()) - result = len(ls) - if result != 0: - return result - - # Method #2 - mapping = {} - current_info = {} - with open_binary(f"{get_procfs_path()}/cpuinfo") as f: - for line in f: - line = line.strip().lower() - if not line: - # new section - try: - mapping[current_info[b'physical id']] = current_info[ - b'cpu cores' - ] - except KeyError: - pass - current_info = {} - elif line.startswith((b'physical id', b'cpu cores')): - # ongoing section - key, value = line.split(b'\t:', 1) - current_info[key] = int(value) - - result = sum(mapping.values()) - return result or None # mimic os.cpu_count() - - -def cpu_stats(): - """Return various CPU stats as a named tuple.""" - with open_binary(f"{get_procfs_path()}/stat") as f: - ctx_switches = None - interrupts = None - soft_interrupts = None - for line in f: - if line.startswith(b'ctxt'): - ctx_switches = int(line.split()[1]) - elif line.startswith(b'intr'): - interrupts = int(line.split()[1]) - elif line.startswith(b'softirq'): - soft_interrupts = int(line.split()[1]) - if ( - ctx_switches is not None - and soft_interrupts is not None - and interrupts is not None - ): - break - syscalls = 0 - return _common.scpustats( - ctx_switches, interrupts, soft_interrupts, syscalls - ) - - -def _cpu_get_cpuinfo_freq(): - """Return current CPU frequency from cpuinfo if available.""" - with open_binary(f"{get_procfs_path()}/cpuinfo") as f: - return [ - float(line.split(b':', 1)[1]) - for line in f - if line.lower().startswith(b'cpu mhz') - ] - - -if os.path.exists("/sys/devices/system/cpu/cpufreq/policy0") or os.path.exists( - "/sys/devices/system/cpu/cpu0/cpufreq" -): - - def cpu_freq(): - """Return frequency metrics for all CPUs. - Contrarily to other OSes, Linux updates these values in - real-time. - """ - cpuinfo_freqs = _cpu_get_cpuinfo_freq() - paths = glob.glob( - "/sys/devices/system/cpu/cpufreq/policy[0-9]*" - ) or glob.glob("/sys/devices/system/cpu/cpu[0-9]*/cpufreq") - paths.sort(key=lambda x: int(re.search(r"[0-9]+", x).group())) - ret = [] - pjoin = os.path.join - for i, path in enumerate(paths): - if len(paths) == len(cpuinfo_freqs): - # take cached value from cpuinfo if available, see: - # https://github.com/giampaolo/psutil/issues/1851 - curr = cpuinfo_freqs[i] * 1000 - else: - curr = bcat(pjoin(path, "scaling_cur_freq"), fallback=None) - if curr is None: - # Likely an old RedHat, see: - # https://github.com/giampaolo/psutil/issues/1071 - curr = bcat(pjoin(path, "cpuinfo_cur_freq"), fallback=None) - if curr is None: - online_path = f"/sys/devices/system/cpu/cpu{i}/online" - # if cpu core is offline, set to all zeroes - if cat(online_path, fallback=None) == "0\n": - ret.append(_common.scpufreq(0.0, 0.0, 0.0)) - continue - msg = "can't find current frequency file" - raise NotImplementedError(msg) - curr = int(curr) / 1000 - max_ = int(bcat(pjoin(path, "scaling_max_freq"))) / 1000 - min_ = int(bcat(pjoin(path, "scaling_min_freq"))) / 1000 - ret.append(_common.scpufreq(curr, min_, max_)) - return ret - -else: - - def cpu_freq(): - """Alternate implementation using /proc/cpuinfo. - min and max frequencies are not available and are set to None. - """ - return [_common.scpufreq(x, 0.0, 0.0) for x in _cpu_get_cpuinfo_freq()] - - -# ===================================================================== -# --- network -# ===================================================================== - - -net_if_addrs = cext.net_if_addrs - - -class _Ipv6UnsupportedError(Exception): - pass - - -class NetConnections: - """A wrapper on top of /proc/net/* files, retrieving per-process - and system-wide open connections (TCP, UDP, UNIX) similarly to - "netstat -an". - - Note: in case of UNIX sockets we're only able to determine the - local endpoint/path, not the one it's connected to. - According to [1] it would be possible but not easily. - - [1] http://serverfault.com/a/417946 - """ - - def __init__(self): - # The string represents the basename of the corresponding - # /proc/net/{proto_name} file. - tcp4 = ("tcp", socket.AF_INET, socket.SOCK_STREAM) - tcp6 = ("tcp6", socket.AF_INET6, socket.SOCK_STREAM) - udp4 = ("udp", socket.AF_INET, socket.SOCK_DGRAM) - udp6 = ("udp6", socket.AF_INET6, socket.SOCK_DGRAM) - unix = ("unix", socket.AF_UNIX, None) - self.tmap = { - "all": (tcp4, tcp6, udp4, udp6, unix), - "tcp": (tcp4, tcp6), - "tcp4": (tcp4,), - "tcp6": (tcp6,), - "udp": (udp4, udp6), - "udp4": (udp4,), - "udp6": (udp6,), - "unix": (unix,), - "inet": (tcp4, tcp6, udp4, udp6), - "inet4": (tcp4, udp4), - "inet6": (tcp6, udp6), - } - self._procfs_path = None - - def get_proc_inodes(self, pid): - inodes = defaultdict(list) - for fd in os.listdir(f"{self._procfs_path}/{pid}/fd"): - try: - inode = readlink(f"{self._procfs_path}/{pid}/fd/{fd}") - except (FileNotFoundError, ProcessLookupError): - # ENOENT == file which is gone in the meantime; - # os.stat(f"/proc/{self.pid}") will be done later - # to force NSP (if it's the case) - continue - except OSError as err: - if err.errno == errno.EINVAL: - # not a link - continue - if err.errno == errno.ENAMETOOLONG: - # file name too long - debug(err) - continue - raise - else: - if inode.startswith('socket:['): - # the process is using a socket - inode = inode[8:][:-1] - inodes[inode].append((pid, int(fd))) - return inodes - - def get_all_inodes(self): - inodes = {} - for pid in pids(): - try: - inodes.update(self.get_proc_inodes(pid)) - except (FileNotFoundError, ProcessLookupError, PermissionError): - # os.listdir() is gonna raise a lot of access denied - # exceptions in case of unprivileged user; that's fine - # as we'll just end up returning a connection with PID - # and fd set to None anyway. - # Both netstat -an and lsof does the same so it's - # unlikely we can do any better. - # ENOENT just means a PID disappeared on us. - continue - return inodes - - @staticmethod - def decode_address(addr, family): - """Accept an "ip:port" address as displayed in /proc/net/* - and convert it into a human readable form, like: - - "0500000A:0016" -> ("10.0.0.5", 22) - "0000000000000000FFFF00000100007F:9E49" -> ("::ffff:127.0.0.1", 40521) - - The IP address portion is a little or big endian four-byte - hexadecimal number; that is, the least significant byte is listed - first, so we need to reverse the order of the bytes to convert it - to an IP address. - The port is represented as a two-byte hexadecimal number. - - Reference: - http://linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html - """ - ip, port = addr.split(':') - port = int(port, 16) - # this usually refers to a local socket in listen mode with - # no end-points connected - if not port: - return () - ip = ip.encode('ascii') - if family == socket.AF_INET: - # see: https://github.com/giampaolo/psutil/issues/201 - if LITTLE_ENDIAN: - ip = socket.inet_ntop(family, base64.b16decode(ip)[::-1]) - else: - ip = socket.inet_ntop(family, base64.b16decode(ip)) - else: # IPv6 - ip = base64.b16decode(ip) - try: - # see: https://github.com/giampaolo/psutil/issues/201 - if LITTLE_ENDIAN: - ip = socket.inet_ntop( - socket.AF_INET6, - struct.pack('>4I', *struct.unpack('<4I', ip)), - ) - else: - ip = socket.inet_ntop( - socket.AF_INET6, - struct.pack('<4I', *struct.unpack('<4I', ip)), - ) - except ValueError: - # see: https://github.com/giampaolo/psutil/issues/623 - if not supports_ipv6(): - raise _Ipv6UnsupportedError from None - raise - return _common.addr(ip, port) - - @staticmethod - def process_inet(file, family, type_, inodes, filter_pid=None): - """Parse /proc/net/tcp* and /proc/net/udp* files.""" - if file.endswith('6') and not os.path.exists(file): - # IPv6 not supported - return - with open_text(file) as f: - f.readline() # skip the first line - for lineno, line in enumerate(f, 1): - try: - _, laddr, raddr, status, _, _, _, _, _, inode = ( - line.split()[:10] - ) - except ValueError: - msg = ( - f"error while parsing {file}; malformed line" - f" {lineno} {line!r}" - ) - raise RuntimeError(msg) from None - if inode in inodes: - # # We assume inet sockets are unique, so we error - # # out if there are multiple references to the - # # same inode. We won't do this for UNIX sockets. - # if len(inodes[inode]) > 1 and family != socket.AF_UNIX: - # raise ValueError("ambiguous inode with multiple " - # "PIDs references") - pid, fd = inodes[inode][0] - else: - pid, fd = None, -1 - if filter_pid is not None and filter_pid != pid: - continue - else: - if type_ == socket.SOCK_STREAM: - status = TCP_STATUSES[status] - else: - status = _common.CONN_NONE - try: - laddr = NetConnections.decode_address(laddr, family) - raddr = NetConnections.decode_address(raddr, family) - except _Ipv6UnsupportedError: - continue - yield (fd, family, type_, laddr, raddr, status, pid) - - @staticmethod - def process_unix(file, family, inodes, filter_pid=None): - """Parse /proc/net/unix files.""" - with open_text(file) as f: - f.readline() # skip the first line - for line in f: - tokens = line.split() - try: - _, _, _, _, type_, _, inode = tokens[0:7] - except ValueError: - if ' ' not in line: - # see: https://github.com/giampaolo/psutil/issues/766 - continue - msg = ( - f"error while parsing {file}; malformed line {line!r}" - ) - raise RuntimeError(msg) # noqa: B904 - if inode in inodes: # noqa: SIM108 - # With UNIX sockets we can have a single inode - # referencing many file descriptors. - pairs = inodes[inode] - else: - pairs = [(None, -1)] - for pid, fd in pairs: - if filter_pid is not None and filter_pid != pid: - continue - else: - path = tokens[-1] if len(tokens) == 8 else '' - type_ = _common.socktype_to_enum(int(type_)) - # XXX: determining the remote endpoint of a - # UNIX socket on Linux is not possible, see: - # https://serverfault.com/questions/252723/ - raddr = "" - status = _common.CONN_NONE - yield (fd, family, type_, path, raddr, status, pid) - - def retrieve(self, kind, pid=None): - self._procfs_path = get_procfs_path() - if pid is not None: - inodes = self.get_proc_inodes(pid) - if not inodes: - # no connections for this process - return [] - else: - inodes = self.get_all_inodes() - ret = set() - for proto_name, family, type_ in self.tmap[kind]: - path = f"{self._procfs_path}/net/{proto_name}" - if family in {socket.AF_INET, socket.AF_INET6}: - ls = self.process_inet( - path, family, type_, inodes, filter_pid=pid - ) - else: - ls = self.process_unix(path, family, inodes, filter_pid=pid) - for fd, family, type_, laddr, raddr, status, bound_pid in ls: - if pid: - conn = _common.pconn( - fd, family, type_, laddr, raddr, status - ) - else: - conn = _common.sconn( - fd, family, type_, laddr, raddr, status, bound_pid - ) - ret.add(conn) - return list(ret) - - -_net_connections = NetConnections() - - -def net_connections(kind='inet'): - """Return system-wide open connections.""" - return _net_connections.retrieve(kind) - - -def net_io_counters(): - """Return network I/O statistics for every network interface - installed on the system as a dict of raw tuples. - """ - with open_text(f"{get_procfs_path()}/net/dev") as f: - lines = f.readlines() - retdict = {} - for line in lines[2:]: - colon = line.rfind(':') - assert colon > 0, repr(line) - name = line[:colon].strip() - fields = line[colon + 1 :].strip().split() - - ( - # in - bytes_recv, - packets_recv, - errin, - dropin, - _fifoin, # unused - _framein, # unused - _compressedin, # unused - _multicastin, # unused - # out - bytes_sent, - packets_sent, - errout, - dropout, - _fifoout, # unused - _collisionsout, # unused - _carrierout, # unused - _compressedout, # unused - ) = map(int, fields) - - retdict[name] = ( - bytes_sent, - bytes_recv, - packets_sent, - packets_recv, - errin, - errout, - dropin, - dropout, - ) - return retdict - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - duplex_map = { - cext.DUPLEX_FULL: NIC_DUPLEX_FULL, - cext.DUPLEX_HALF: NIC_DUPLEX_HALF, - cext.DUPLEX_UNKNOWN: NIC_DUPLEX_UNKNOWN, - } - names = net_io_counters().keys() - ret = {} - for name in names: - try: - mtu = cext.net_if_mtu(name) - flags = cext.net_if_flags(name) - duplex, speed = cext.net_if_duplex_speed(name) - except OSError as err: - # https://github.com/giampaolo/psutil/issues/1279 - if err.errno != errno.ENODEV: - raise - debug(err) - else: - output_flags = ','.join(flags) - isup = 'running' in flags - ret[name] = _common.snicstats( - isup, duplex_map[duplex], speed, mtu, output_flags - ) - return ret - - -# ===================================================================== -# --- disks -# ===================================================================== - - -disk_usage = _psposix.disk_usage - - -def disk_io_counters(perdisk=False): - """Return disk I/O statistics for every disk installed on the - system as a dict of raw tuples. - """ - - def read_procfs(): - # OK, this is a bit confusing. The format of /proc/diskstats can - # have 3 variations. - # On Linux 2.4 each line has always 15 fields, e.g.: - # "3 0 8 hda 8 8 8 8 8 8 8 8 8 8 8" - # On Linux 2.6+ each line *usually* has 14 fields, and the disk - # name is in another position, like this: - # "3 0 hda 8 8 8 8 8 8 8 8 8 8 8" - # ...unless (Linux 2.6) the line refers to a partition instead - # of a disk, in which case the line has less fields (7): - # "3 1 hda1 8 8 8 8" - # 4.18+ has 4 fields added: - # "3 0 hda 8 8 8 8 8 8 8 8 8 8 8 0 0 0 0" - # 5.5 has 2 more fields. - # See: - # https://www.kernel.org/doc/Documentation/iostats.txt - # https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats - with open_text(f"{get_procfs_path()}/diskstats") as f: - lines = f.readlines() - for line in lines: - fields = line.split() - flen = len(fields) - # fmt: off - if flen == 15: - # Linux 2.4 - name = fields[3] - reads = int(fields[2]) - (reads_merged, rbytes, rtime, writes, writes_merged, - wbytes, wtime, _, busy_time, _) = map(int, fields[4:14]) - elif flen == 14 or flen >= 18: - # Linux 2.6+, line referring to a disk - name = fields[2] - (reads, reads_merged, rbytes, rtime, writes, writes_merged, - wbytes, wtime, _, busy_time, _) = map(int, fields[3:14]) - elif flen == 7: - # Linux 2.6+, line referring to a partition - name = fields[2] - reads, rbytes, writes, wbytes = map(int, fields[3:]) - rtime = wtime = reads_merged = writes_merged = busy_time = 0 - else: - msg = f"not sure how to interpret line {line!r}" - raise ValueError(msg) - yield (name, reads, writes, rbytes, wbytes, rtime, wtime, - reads_merged, writes_merged, busy_time) - # fmt: on - - def read_sysfs(): - for block in os.listdir('/sys/block'): - for root, _, files in os.walk(os.path.join('/sys/block', block)): - if 'stat' not in files: - continue - with open_text(os.path.join(root, 'stat')) as f: - fields = f.read().strip().split() - name = os.path.basename(root) - # fmt: off - (reads, reads_merged, rbytes, rtime, writes, writes_merged, - wbytes, wtime, _, busy_time) = map(int, fields[:10]) - yield (name, reads, writes, rbytes, wbytes, rtime, - wtime, reads_merged, writes_merged, busy_time) - # fmt: on - - if os.path.exists(f"{get_procfs_path()}/diskstats"): - gen = read_procfs() - elif os.path.exists('/sys/block'): - gen = read_sysfs() - else: - msg = ( - f"{get_procfs_path()}/diskstats nor /sys/block are available on" - " this system" - ) - raise NotImplementedError(msg) - - retdict = {} - for entry in gen: - # fmt: off - (name, reads, writes, rbytes, wbytes, rtime, wtime, reads_merged, - writes_merged, busy_time) = entry - if not perdisk and not is_storage_device(name): - # perdisk=False means we want to calculate totals so we skip - # partitions (e.g. 'sda1', 'nvme0n1p1') and only include - # base disk devices (e.g. 'sda', 'nvme0n1'). Base disks - # include a total of all their partitions + some extra size - # of their own: - # $ cat /proc/diskstats - # 259 0 sda 10485760 ... - # 259 1 sda1 5186039 ... - # 259 1 sda2 5082039 ... - # See: - # https://github.com/giampaolo/psutil/pull/1313 - continue - - rbytes *= DISK_SECTOR_SIZE - wbytes *= DISK_SECTOR_SIZE - retdict[name] = (reads, writes, rbytes, wbytes, rtime, wtime, - reads_merged, writes_merged, busy_time) - # fmt: on - - return retdict - - -class RootFsDeviceFinder: - """disk_partitions() may return partitions with device == "/dev/root" - or "rootfs". This container class uses different strategies to try to - obtain the real device path. Resources: - https://bootlin.com/blog/find-root-device/ - https://www.systutorials.com/how-to-find-the-disk-where-root-is-on-in-bash-on-linux/. - """ - - __slots__ = ['major', 'minor'] - - def __init__(self): - dev = os.stat("/").st_dev - self.major = os.major(dev) - self.minor = os.minor(dev) - - def ask_proc_partitions(self): - with open_text(f"{get_procfs_path()}/partitions") as f: - for line in f.readlines()[2:]: - fields = line.split() - if len(fields) < 4: # just for extra safety - continue - major = int(fields[0]) if fields[0].isdigit() else None - minor = int(fields[1]) if fields[1].isdigit() else None - name = fields[3] - if major == self.major and minor == self.minor: - if name: # just for extra safety - return f"/dev/{name}" - - def ask_sys_dev_block(self): - path = f"/sys/dev/block/{self.major}:{self.minor}/uevent" - with open_text(path) as f: - for line in f: - if line.startswith("DEVNAME="): - name = line.strip().rpartition("DEVNAME=")[2] - if name: # just for extra safety - return f"/dev/{name}" - - def ask_sys_class_block(self): - needle = f"{self.major}:{self.minor}" - files = glob.iglob("/sys/class/block/*/dev") - for file in files: - try: - f = open_text(file) - except FileNotFoundError: # race condition - continue - else: - with f: - data = f.read().strip() - if data == needle: - name = os.path.basename(os.path.dirname(file)) - return f"/dev/{name}" - - def find(self): - path = None - if path is None: - try: - path = self.ask_proc_partitions() - except OSError as err: - debug(err) - if path is None: - try: - path = self.ask_sys_dev_block() - except OSError as err: - debug(err) - if path is None: - try: - path = self.ask_sys_class_block() - except OSError as err: - debug(err) - # We use exists() because the "/dev/*" part of the path is hard - # coded, so we want to be sure. - if path is not None and os.path.exists(path): - return path - - -def disk_partitions(all=False): - """Return mounted disk partitions as a list of namedtuples.""" - fstypes = set() - procfs_path = get_procfs_path() - if not all: - with open_text(f"{procfs_path}/filesystems") as f: - for line in f: - line = line.strip() - if not line.startswith("nodev"): - fstypes.add(line.strip()) - else: - # ignore all lines starting with "nodev" except "nodev zfs" - fstype = line.split("\t")[1] - if fstype == "zfs": - fstypes.add("zfs") - - # See: https://github.com/giampaolo/psutil/issues/1307 - if procfs_path == "/proc" and os.path.isfile('/etc/mtab'): - mounts_path = os.path.realpath("/etc/mtab") - else: - mounts_path = os.path.realpath(f"{procfs_path}/self/mounts") - - retlist = [] - partitions = cext.disk_partitions(mounts_path) - for partition in partitions: - device, mountpoint, fstype, opts = partition - if device == 'none': - device = '' - if device in {"/dev/root", "rootfs"}: - device = RootFsDeviceFinder().find() or device - if not all: - if not device or fstype not in fstypes: - continue - ntuple = _common.sdiskpart(device, mountpoint, fstype, opts) - retlist.append(ntuple) - - return retlist - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -def sensors_temperatures(): - """Return hardware (CPU and others) temperatures as a dict - including hardware name, label, current, max and critical - temperatures. - - Implementation notes: - - /sys/class/hwmon looks like the most recent interface to - retrieve this info, and this implementation relies on it - only (old distros will probably use something else) - - lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon - - /sys/class/thermal/thermal_zone* is another one but it's more - difficult to parse - """ - ret = collections.defaultdict(list) - basenames = glob.glob('/sys/class/hwmon/hwmon*/temp*_*') - # CentOS has an intermediate /device directory: - # https://github.com/giampaolo/psutil/issues/971 - # https://github.com/nicolargo/glances/issues/1060 - basenames.extend(glob.glob('/sys/class/hwmon/hwmon*/device/temp*_*')) - basenames = sorted({x.split('_')[0] for x in basenames}) - - # Only add the coretemp hwmon entries if they're not already in - # /sys/class/hwmon/ - # https://github.com/giampaolo/psutil/issues/1708 - # https://github.com/giampaolo/psutil/pull/1648 - basenames2 = glob.glob( - '/sys/devices/platform/coretemp.*/hwmon/hwmon*/temp*_*' - ) - repl = re.compile(r"/sys/devices/platform/coretemp.*/hwmon/") - for name in basenames2: - altname = repl.sub('/sys/class/hwmon/', name) - if altname not in basenames: - basenames.append(name) - - for base in basenames: - try: - path = base + '_input' - current = float(bcat(path)) / 1000.0 - path = os.path.join(os.path.dirname(base), 'name') - unit_name = cat(path).strip() - except (OSError, ValueError): - # A lot of things can go wrong here, so let's just skip the - # whole entry. Sure thing is Linux's /sys/class/hwmon really - # is a stinky broken mess. - # https://github.com/giampaolo/psutil/issues/1009 - # https://github.com/giampaolo/psutil/issues/1101 - # https://github.com/giampaolo/psutil/issues/1129 - # https://github.com/giampaolo/psutil/issues/1245 - # https://github.com/giampaolo/psutil/issues/1323 - continue - - high = bcat(base + '_max', fallback=None) - critical = bcat(base + '_crit', fallback=None) - label = cat(base + '_label', fallback='').strip() - - if high is not None: - try: - high = float(high) / 1000.0 - except ValueError: - high = None - if critical is not None: - try: - critical = float(critical) / 1000.0 - except ValueError: - critical = None - - ret[unit_name].append((label, current, high, critical)) - - # Indication that no sensors were detected in /sys/class/hwmon/ - if not basenames: - basenames = glob.glob('/sys/class/thermal/thermal_zone*') - basenames = sorted(set(basenames)) - - for base in basenames: - try: - path = os.path.join(base, 'temp') - current = float(bcat(path)) / 1000.0 - path = os.path.join(base, 'type') - unit_name = cat(path).strip() - except (OSError, ValueError) as err: - debug(err) - continue - - trip_paths = glob.glob(base + '/trip_point*') - trip_points = { - '_'.join(os.path.basename(p).split('_')[0:3]) - for p in trip_paths - } - critical = None - high = None - for trip_point in trip_points: - path = os.path.join(base, trip_point + "_type") - trip_type = cat(path, fallback='').strip() - if trip_type == 'critical': - critical = bcat( - os.path.join(base, trip_point + "_temp"), fallback=None - ) - elif trip_type == 'high': - high = bcat( - os.path.join(base, trip_point + "_temp"), fallback=None - ) - - if high is not None: - try: - high = float(high) / 1000.0 - except ValueError: - high = None - if critical is not None: - try: - critical = float(critical) / 1000.0 - except ValueError: - critical = None - - ret[unit_name].append(('', current, high, critical)) - - return dict(ret) - - -def sensors_fans(): - """Return hardware fans info (for CPU and other peripherals) as a - dict including hardware label and current speed. - - Implementation notes: - - /sys/class/hwmon looks like the most recent interface to - retrieve this info, and this implementation relies on it - only (old distros will probably use something else) - - lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon - """ - ret = collections.defaultdict(list) - basenames = glob.glob('/sys/class/hwmon/hwmon*/fan*_*') - if not basenames: - # CentOS has an intermediate /device directory: - # https://github.com/giampaolo/psutil/issues/971 - basenames = glob.glob('/sys/class/hwmon/hwmon*/device/fan*_*') - - basenames = sorted({x.split("_")[0] for x in basenames}) - for base in basenames: - try: - current = int(bcat(base + '_input')) - except OSError as err: - debug(err) - continue - unit_name = cat(os.path.join(os.path.dirname(base), 'name')).strip() - label = cat(base + '_label', fallback='').strip() - ret[unit_name].append(_common.sfan(label, current)) - - return dict(ret) - - -def sensors_battery(): - """Return battery information. - Implementation note: it appears /sys/class/power_supply/BAT0/ - directory structure may vary and provide files with the same - meaning but under different names, see: - https://github.com/giampaolo/psutil/issues/966. - """ - null = object() - - def multi_bcat(*paths): - """Attempt to read the content of multiple files which may - not exist. If none of them exist return None. - """ - for path in paths: - ret = bcat(path, fallback=null) - if ret != null: - try: - return int(ret) - except ValueError: - return ret.strip() - return None - - bats = [ - x - for x in os.listdir(POWER_SUPPLY_PATH) - if x.startswith('BAT') or 'battery' in x.lower() - ] - if not bats: - return None - # Get the first available battery. Usually this is "BAT0", except - # some rare exceptions: - # https://github.com/giampaolo/psutil/issues/1238 - root = os.path.join(POWER_SUPPLY_PATH, min(bats)) - - # Base metrics. - energy_now = multi_bcat(root + "/energy_now", root + "/charge_now") - power_now = multi_bcat(root + "/power_now", root + "/current_now") - energy_full = multi_bcat(root + "/energy_full", root + "/charge_full") - time_to_empty = multi_bcat(root + "/time_to_empty_now") - - # Percent. If we have energy_full the percentage will be more - # accurate compared to reading /capacity file (float vs. int). - if energy_full is not None and energy_now is not None: - try: - percent = 100.0 * energy_now / energy_full - except ZeroDivisionError: - percent = 0.0 - else: - percent = int(cat(root + "/capacity", fallback=-1)) - if percent == -1: - return None - - # Is AC power cable plugged in? - # Note: AC0 is not always available and sometimes (e.g. CentOS7) - # it's called "AC". - power_plugged = None - online = multi_bcat( - os.path.join(POWER_SUPPLY_PATH, "AC0/online"), - os.path.join(POWER_SUPPLY_PATH, "AC/online"), - ) - if online is not None: - power_plugged = online == 1 - else: - status = cat(root + "/status", fallback="").strip().lower() - if status == "discharging": - power_plugged = False - elif status in {"charging", "full"}: - power_plugged = True - - # Seconds left. - # Note to self: we may also calculate the charging ETA as per: - # https://github.com/thialfihar/dotfiles/blob/ - # 013937745fd9050c30146290e8f963d65c0179e6/bin/battery.py#L55 - if power_plugged: - secsleft = _common.POWER_TIME_UNLIMITED - elif energy_now is not None and power_now is not None: - try: - secsleft = int(energy_now / abs(power_now) * 3600) - except ZeroDivisionError: - secsleft = _common.POWER_TIME_UNKNOWN - elif time_to_empty is not None: - secsleft = int(time_to_empty * 60) - if secsleft < 0: - secsleft = _common.POWER_TIME_UNKNOWN - else: - secsleft = _common.POWER_TIME_UNKNOWN - - return _common.sbattery(percent, secsleft, power_plugged) - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - for item in rawlist: - user, tty, hostname, tstamp, pid = item - nt = _common.suser(user, tty or None, hostname, tstamp, pid) - retlist.append(nt) - return retlist - - -def boot_time(): - """Return the system boot time expressed in seconds since the epoch.""" - path = f"{get_procfs_path()}/stat" - with open_binary(path) as f: - for line in f: - if line.startswith(b'btime'): - return float(line.strip().split()[1]) - msg = f"line 'btime' not found in {path}" - raise RuntimeError(msg) - - -# ===================================================================== -# --- processes -# ===================================================================== - - -def pids(): - """Returns a list of PIDs currently running on the system.""" - path = get_procfs_path().encode(ENCODING) - return [int(x) for x in os.listdir(path) if x.isdigit()] - - -def pid_exists(pid): - """Check for the existence of a unix PID. Linux TIDs are not - supported (always return False). - """ - if not _psposix.pid_exists(pid): - return False - else: - # Linux's apparently does not distinguish between PIDs and TIDs - # (thread IDs). - # listdir("/proc") won't show any TID (only PIDs) but - # os.stat("/proc/{tid}") will succeed if {tid} exists. - # os.kill() can also be passed a TID. This is quite confusing. - # In here we want to enforce this distinction and support PIDs - # only, see: - # https://github.com/giampaolo/psutil/issues/687 - try: - # Note: already checked that this is faster than using a - # regular expr. Also (a lot) faster than doing - # 'return pid in pids()' - path = f"{get_procfs_path()}/{pid}/status" - with open_binary(path) as f: - for line in f: - if line.startswith(b"Tgid:"): - tgid = int(line.split()[1]) - # If tgid and pid are the same then we're - # dealing with a process PID. - return tgid == pid - msg = f"'Tgid' line not found in {path}" - raise ValueError(msg) - except (OSError, ValueError): - return pid in pids() - - -def ppid_map(): - """Obtain a {pid: ppid, ...} dict for all running processes in - one shot. Used to speed up Process.children(). - """ - ret = {} - procfs_path = get_procfs_path() - for pid in pids(): - try: - with open_binary(f"{procfs_path}/{pid}/stat") as f: - data = f.read() - except (FileNotFoundError, ProcessLookupError): - pass - except PermissionError as err: - raise AccessDenied(pid) from err - else: - rpar = data.rfind(b')') - dset = data[rpar + 2 :].split() - ppid = int(dset[1]) - ret[pid] = ppid - return ret - - -def wrap_exceptions(fun): - """Decorator which translates bare OSError and OSError exceptions - into NoSuchProcess and AccessDenied. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - pid, name = self.pid, self._name - try: - return fun(self, *args, **kwargs) - except PermissionError as err: - raise AccessDenied(pid, name) from err - except ProcessLookupError as err: - self._raise_if_zombie() - raise NoSuchProcess(pid, name) from err - except FileNotFoundError as err: - self._raise_if_zombie() - # /proc/PID directory may still exist, but the files within - # it may not, indicating the process is gone, see: - # https://github.com/giampaolo/psutil/issues/2418 - if not os.path.exists(f"{self._procfs_path}/{pid}/stat"): - raise NoSuchProcess(pid, name) from err - raise - - return wrapper - - -class Process: - """Linux process implementation.""" - - __slots__ = [ - "_cache", - "_ctime", - "_name", - "_ppid", - "_procfs_path", - "pid", - ] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - self._ctime = None - self._procfs_path = get_procfs_path() - - def _is_zombie(self): - # Note: most of the times Linux is able to return info about the - # process even if it's a zombie, and /proc/{pid} will exist. - # There are some exceptions though, like exe(), cmdline() and - # memory_maps(). In these cases /proc/{pid}/{file} exists but - # it's empty. Instead of returning a "null" value we'll raise an - # exception. - try: - data = bcat(f"{self._procfs_path}/{self.pid}/stat") - except OSError: - return False - else: - rpar = data.rfind(b')') - status = data[rpar + 2 : rpar + 3] - return status == b"Z" - - def _raise_if_zombie(self): - if self._is_zombie(): - raise ZombieProcess(self.pid, self._name, self._ppid) - - def _raise_if_not_alive(self): - """Raise NSP if the process disappeared on us.""" - # For those C function who do not raise NSP, possibly returning - # incorrect or incomplete result. - os.stat(f"{self._procfs_path}/{self.pid}") - - def _readlink(self, path, fallback=UNSET): - # * https://github.com/giampaolo/psutil/issues/503 - # os.readlink('/proc/pid/exe') may raise ESRCH (ProcessLookupError) - # instead of ENOENT (FileNotFoundError) when it races. - # * ENOENT may occur also if the path actually exists if PID is - # a low PID (~0-20 range). - # * https://github.com/giampaolo/psutil/issues/2514 - try: - return readlink(path) - except (FileNotFoundError, ProcessLookupError): - if os.path.lexists(f"{self._procfs_path}/{self.pid}"): - self._raise_if_zombie() - if fallback is not UNSET: - return fallback - raise - - @wrap_exceptions - @memoize_when_activated - def _parse_stat_file(self): - """Parse /proc/{pid}/stat file and return a dict with various - process info. - Using "man proc" as a reference: where "man proc" refers to - position N always subtract 3 (e.g ppid position 4 in - 'man proc' == position 1 in here). - The return value is cached in case oneshot() ctx manager is - in use. - """ - data = bcat(f"{self._procfs_path}/{self.pid}/stat") - # Process name is between parentheses. It can contain spaces and - # other parentheses. This is taken into account by looking for - # the first occurrence of "(" and the last occurrence of ")". - rpar = data.rfind(b')') - name = data[data.find(b'(') + 1 : rpar] - fields = data[rpar + 2 :].split() - - ret = {} - ret['name'] = name - ret['status'] = fields[0] - ret['ppid'] = fields[1] - ret['ttynr'] = fields[4] - ret['utime'] = fields[11] - ret['stime'] = fields[12] - ret['children_utime'] = fields[13] - ret['children_stime'] = fields[14] - ret['create_time'] = fields[19] - ret['cpu_num'] = fields[36] - try: - ret['blkio_ticks'] = fields[39] # aka 'delayacct_blkio_ticks' - except IndexError: - # https://github.com/giampaolo/psutil/issues/2455 - debug("can't get blkio_ticks, set iowait to 0") - ret['blkio_ticks'] = 0 - - return ret - - @wrap_exceptions - @memoize_when_activated - def _read_status_file(self): - """Read /proc/{pid}/stat file and return its content. - The return value is cached in case oneshot() ctx manager is - in use. - """ - with open_binary(f"{self._procfs_path}/{self.pid}/status") as f: - return f.read() - - @wrap_exceptions - @memoize_when_activated - def _read_smaps_file(self): - with open_binary(f"{self._procfs_path}/{self.pid}/smaps") as f: - return f.read().strip() - - def oneshot_enter(self): - self._parse_stat_file.cache_activate(self) - self._read_status_file.cache_activate(self) - self._read_smaps_file.cache_activate(self) - - def oneshot_exit(self): - self._parse_stat_file.cache_deactivate(self) - self._read_status_file.cache_deactivate(self) - self._read_smaps_file.cache_deactivate(self) - - @wrap_exceptions - def name(self): - # XXX - gets changed later and probably needs refactoring - return decode(self._parse_stat_file()['name']) - - @wrap_exceptions - def exe(self): - return self._readlink( - f"{self._procfs_path}/{self.pid}/exe", fallback="" - ) - - @wrap_exceptions - def cmdline(self): - with open_text(f"{self._procfs_path}/{self.pid}/cmdline") as f: - data = f.read() - if not data: - # may happen in case of zombie process - self._raise_if_zombie() - return [] - # 'man proc' states that args are separated by null bytes '\0' - # and last char is supposed to be a null byte. Nevertheless - # some processes may change their cmdline after being started - # (via setproctitle() or similar), they are usually not - # compliant with this rule and use spaces instead. Google - # Chrome process is an example. See: - # https://github.com/giampaolo/psutil/issues/1179 - sep = '\x00' if data.endswith('\x00') else ' ' - if data.endswith(sep): - data = data[:-1] - cmdline = data.split(sep) - # Sometimes last char is a null byte '\0' but the args are - # separated by spaces, see: https://github.com/giampaolo/psutil/ - # issues/1179#issuecomment-552984549 - if sep == '\x00' and len(cmdline) == 1 and ' ' in data: - cmdline = data.split(' ') - return cmdline - - @wrap_exceptions - def environ(self): - with open_text(f"{self._procfs_path}/{self.pid}/environ") as f: - data = f.read() - return parse_environ_block(data) - - @wrap_exceptions - def terminal(self): - tty_nr = int(self._parse_stat_file()['ttynr']) - tmap = _psposix.get_terminal_map() - try: - return tmap[tty_nr] - except KeyError: - return None - - # May not be available on old kernels. - if os.path.exists(f"/proc/{os.getpid()}/io"): - - @wrap_exceptions - def io_counters(self): - fname = f"{self._procfs_path}/{self.pid}/io" - fields = {} - with open_binary(fname) as f: - for line in f: - # https://github.com/giampaolo/psutil/issues/1004 - line = line.strip() - if line: - try: - name, value = line.split(b': ') - except ValueError: - # https://github.com/giampaolo/psutil/issues/1004 - continue - else: - fields[name] = int(value) - if not fields: - msg = f"{fname} file was empty" - raise RuntimeError(msg) - try: - return pio( - fields[b'syscr'], # read syscalls - fields[b'syscw'], # write syscalls - fields[b'read_bytes'], # read bytes - fields[b'write_bytes'], # write bytes - fields[b'rchar'], # read chars - fields[b'wchar'], # write chars - ) - except KeyError as err: - msg = ( - f"{err.args[0]!r} field was not found in {fname}; found" - f" fields are {fields!r}" - ) - raise ValueError(msg) from None - - @wrap_exceptions - def cpu_times(self): - values = self._parse_stat_file() - utime = float(values['utime']) / CLOCK_TICKS - stime = float(values['stime']) / CLOCK_TICKS - children_utime = float(values['children_utime']) / CLOCK_TICKS - children_stime = float(values['children_stime']) / CLOCK_TICKS - iowait = float(values['blkio_ticks']) / CLOCK_TICKS - return pcputimes(utime, stime, children_utime, children_stime, iowait) - - @wrap_exceptions - def cpu_num(self): - """What CPU the process is on.""" - return int(self._parse_stat_file()['cpu_num']) - - @wrap_exceptions - def wait(self, timeout=None): - return _psposix.wait_pid(self.pid, timeout, self._name) - - @wrap_exceptions - def create_time(self, monotonic=False): - # The 'starttime' field in /proc/[pid]/stat is expressed in - # jiffies (clock ticks per second), a relative value which - # represents the number of clock ticks that have passed since - # the system booted until the process was created. It never - # changes and is unaffected by system clock updates. - if self._ctime is None: - self._ctime = ( - float(self._parse_stat_file()['create_time']) / CLOCK_TICKS - ) - if monotonic: - return self._ctime - # Add the boot time, returning time expressed in seconds since - # the epoch. This is subject to system clock updates. - return self._ctime + boot_time() - - @wrap_exceptions - def memory_info(self): - # ============================================================ - # | FIELD | DESCRIPTION | AKA | TOP | - # ============================================================ - # | rss | resident set size | | RES | - # | vms | total program size | size | VIRT | - # | shared | shared pages (from shared mappings) | | SHR | - # | text | text ('code') | trs | CODE | - # | lib | library (unused in Linux 2.6) | lrs | | - # | data | data + stack | drs | DATA | - # | dirty | dirty pages (unused in Linux 2.6) | dt | | - # ============================================================ - with open_binary(f"{self._procfs_path}/{self.pid}/statm") as f: - vms, rss, shared, text, lib, data, dirty = ( - int(x) * PAGESIZE for x in f.readline().split()[:7] - ) - return pmem(rss, vms, shared, text, lib, data, dirty) - - if HAS_PROC_SMAPS_ROLLUP or HAS_PROC_SMAPS: - - def _parse_smaps_rollup(self): - # /proc/pid/smaps_rollup was added to Linux in 2017. Faster - # than /proc/pid/smaps. It reports higher PSS than */smaps - # (from 1k up to 200k higher; tested against all processes). - # IMPORTANT: /proc/pid/smaps_rollup is weird, because it - # raises ESRCH / ENOENT for many PIDs, even if they're alive - # (also as root). In that case we'll use /proc/pid/smaps as - # fallback, which is slower but has a +50% success rate - # compared to /proc/pid/smaps_rollup. - uss = pss = swap = 0 - with open_binary( - f"{self._procfs_path}/{self.pid}/smaps_rollup" - ) as f: - for line in f: - if line.startswith(b"Private_"): - # Private_Clean, Private_Dirty, Private_Hugetlb - uss += int(line.split()[1]) * 1024 - elif line.startswith(b"Pss:"): - pss = int(line.split()[1]) * 1024 - elif line.startswith(b"Swap:"): - swap = int(line.split()[1]) * 1024 - return (uss, pss, swap) - - @wrap_exceptions - def _parse_smaps( - self, - # Gets Private_Clean, Private_Dirty, Private_Hugetlb. - _private_re=re.compile(br"\nPrivate.*:\s+(\d+)"), - _pss_re=re.compile(br"\nPss\:\s+(\d+)"), - _swap_re=re.compile(br"\nSwap\:\s+(\d+)"), - ): - # /proc/pid/smaps does not exist on kernels < 2.6.14 or if - # CONFIG_MMU kernel configuration option is not enabled. - - # Note: using 3 regexes is faster than reading the file - # line by line. - # - # You might be tempted to calculate USS by subtracting - # the "shared" value from the "resident" value in - # /proc//statm. But at least on Linux, statm's "shared" - # value actually counts pages backed by files, which has - # little to do with whether the pages are actually shared. - # /proc/self/smaps on the other hand appears to give us the - # correct information. - smaps_data = self._read_smaps_file() - # Note: smaps file can be empty for certain processes. - # The code below will not crash though and will result to 0. - uss = sum(map(int, _private_re.findall(smaps_data))) * 1024 - pss = sum(map(int, _pss_re.findall(smaps_data))) * 1024 - swap = sum(map(int, _swap_re.findall(smaps_data))) * 1024 - return (uss, pss, swap) - - @wrap_exceptions - def memory_full_info(self): - if HAS_PROC_SMAPS_ROLLUP: # faster - try: - uss, pss, swap = self._parse_smaps_rollup() - except (ProcessLookupError, FileNotFoundError): - uss, pss, swap = self._parse_smaps() - else: - uss, pss, swap = self._parse_smaps() - basic_mem = self.memory_info() - return pfullmem(*basic_mem + (uss, pss, swap)) - - else: - memory_full_info = memory_info - - if HAS_PROC_SMAPS: - - @wrap_exceptions - def memory_maps(self): - """Return process's mapped memory regions as a list of named - tuples. Fields are explained in 'man proc'; here is an updated - (Apr 2012) version: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt?id=b76437579d1344b612cf1851ae610c636cec7db0. - - /proc/{PID}/smaps does not exist on kernels < 2.6.14 or if - CONFIG_MMU kernel configuration option is not enabled. - """ - - def get_blocks(lines, current_block): - data = {} - for line in lines: - fields = line.split(None, 5) - if not fields[0].endswith(b':'): - # new block section - yield (current_block.pop(), data) - current_block.append(line) - else: - try: - data[fields[0]] = int(fields[1]) * 1024 - except (ValueError, IndexError): - if fields[0].startswith(b'VmFlags:'): - # see issue #369 - continue - msg = f"don't know how to interpret line {line!r}" - raise ValueError(msg) from None - yield (current_block.pop(), data) - - data = self._read_smaps_file() - # Note: smaps file can be empty for certain processes or for - # zombies. - if not data: - self._raise_if_zombie() - return [] - lines = data.split(b'\n') - ls = [] - first_line = lines.pop(0) - current_block = [first_line] - for header, data in get_blocks(lines, current_block): - hfields = header.split(None, 5) - try: - addr, perms, _offset, _dev, _inode, path = hfields - except ValueError: - addr, perms, _offset, _dev, _inode, path = hfields + [''] - if not path: - path = '[anon]' - else: - path = decode(path) - path = path.strip() - if path.endswith(' (deleted)') and not path_exists_strict( - path - ): - path = path[:-10] - item = ( - decode(addr), - decode(perms), - path, - data.get(b'Rss:', 0), - data.get(b'Size:', 0), - data.get(b'Pss:', 0), - data.get(b'Shared_Clean:', 0), - data.get(b'Shared_Dirty:', 0), - data.get(b'Private_Clean:', 0), - data.get(b'Private_Dirty:', 0), - data.get(b'Referenced:', 0), - data.get(b'Anonymous:', 0), - data.get(b'Swap:', 0), - ) - ls.append(item) - return ls - - @wrap_exceptions - def cwd(self): - return self._readlink( - f"{self._procfs_path}/{self.pid}/cwd", fallback="" - ) - - @wrap_exceptions - def num_ctx_switches( - self, _ctxsw_re=re.compile(br'ctxt_switches:\t(\d+)') - ): - data = self._read_status_file() - ctxsw = _ctxsw_re.findall(data) - if not ctxsw: - msg = ( - "'voluntary_ctxt_switches' and" - " 'nonvoluntary_ctxt_switches'lines were not found in" - f" {self._procfs_path}/{self.pid}/status; the kernel is" - " probably older than 2.6.23" - ) - raise NotImplementedError(msg) - return _common.pctxsw(int(ctxsw[0]), int(ctxsw[1])) - - @wrap_exceptions - def num_threads(self, _num_threads_re=re.compile(br'Threads:\t(\d+)')): - # Using a re is faster than iterating over file line by line. - data = self._read_status_file() - return int(_num_threads_re.findall(data)[0]) - - @wrap_exceptions - def threads(self): - thread_ids = os.listdir(f"{self._procfs_path}/{self.pid}/task") - thread_ids.sort() - retlist = [] - hit_enoent = False - for thread_id in thread_ids: - fname = f"{self._procfs_path}/{self.pid}/task/{thread_id}/stat" - try: - with open_binary(fname) as f: - st = f.read().strip() - except (FileNotFoundError, ProcessLookupError): - # no such file or directory or no such process; - # it means thread disappeared on us - hit_enoent = True - continue - # ignore the first two values ("pid (exe)") - st = st[st.find(b')') + 2 :] - values = st.split(b' ') - utime = float(values[11]) / CLOCK_TICKS - stime = float(values[12]) / CLOCK_TICKS - ntuple = _common.pthread(int(thread_id), utime, stime) - retlist.append(ntuple) - if hit_enoent: - self._raise_if_not_alive() - return retlist - - @wrap_exceptions - def nice_get(self): - # with open_text(f"{self._procfs_path}/{self.pid}/stat") as f: - # data = f.read() - # return int(data.split()[18]) - - # Use C implementation - return cext.proc_priority_get(self.pid) - - @wrap_exceptions - def nice_set(self, value): - return cext.proc_priority_set(self.pid, value) - - # starting from CentOS 6. - if HAS_CPU_AFFINITY: - - @wrap_exceptions - def cpu_affinity_get(self): - return cext.proc_cpu_affinity_get(self.pid) - - def _get_eligible_cpus( - self, _re=re.compile(br"Cpus_allowed_list:\t(\d+)-(\d+)") - ): - # See: https://github.com/giampaolo/psutil/issues/956 - data = self._read_status_file() - match = _re.findall(data) - if match: - return list(range(int(match[0][0]), int(match[0][1]) + 1)) - else: - return list(range(len(per_cpu_times()))) - - @wrap_exceptions - def cpu_affinity_set(self, cpus): - try: - cext.proc_cpu_affinity_set(self.pid, cpus) - except (OSError, ValueError) as err: - if isinstance(err, ValueError) or err.errno == errno.EINVAL: - eligible_cpus = self._get_eligible_cpus() - all_cpus = tuple(range(len(per_cpu_times()))) - for cpu in cpus: - if cpu not in all_cpus: - msg = ( - f"invalid CPU {cpu!r}; choose between" - f" {eligible_cpus!r}" - ) - raise ValueError(msg) from None - if cpu not in eligible_cpus: - msg = ( - f"CPU number {cpu} is not eligible; choose" - f" between {eligible_cpus}" - ) - raise ValueError(msg) from err - raise - - # only starting from kernel 2.6.13 - if HAS_PROC_IO_PRIORITY: - - @wrap_exceptions - def ionice_get(self): - ioclass, value = cext.proc_ioprio_get(self.pid) - ioclass = IOPriority(ioclass) - return _common.pionice(ioclass, value) - - @wrap_exceptions - def ionice_set(self, ioclass, value): - if value is None: - value = 0 - if value and ioclass in { - IOPriority.IOPRIO_CLASS_IDLE, - IOPriority.IOPRIO_CLASS_NONE, - }: - msg = f"{ioclass!r} ioclass accepts no value" - raise ValueError(msg) - if value < 0 or value > 7: - msg = "value not in 0-7 range" - raise ValueError(msg) - return cext.proc_ioprio_set(self.pid, ioclass, value) - - if hasattr(resource, "prlimit"): - - @wrap_exceptions - def rlimit(self, resource_, limits=None): - # If pid is 0 prlimit() applies to the calling process and - # we don't want that. We should never get here though as - # PID 0 is not supported on Linux. - if self.pid == 0: - msg = "can't use prlimit() against PID 0 process" - raise ValueError(msg) - try: - if limits is None: - # get - return resource.prlimit(self.pid, resource_) - else: - # set - if len(limits) != 2: - msg = ( - "second argument must be a (soft, hard) " - f"tuple, got {limits!r}" - ) - raise ValueError(msg) - resource.prlimit(self.pid, resource_, limits) - except OSError as err: - if err.errno == errno.ENOSYS: - # I saw this happening on Travis: - # https://travis-ci.org/giampaolo/psutil/jobs/51368273 - self._raise_if_zombie() - raise - - @wrap_exceptions - def status(self): - letter = self._parse_stat_file()['status'] - letter = letter.decode() - # XXX is '?' legit? (we're not supposed to return it anyway) - return PROC_STATUSES.get(letter, '?') - - @wrap_exceptions - def open_files(self): - retlist = [] - files = os.listdir(f"{self._procfs_path}/{self.pid}/fd") - hit_enoent = False - for fd in files: - file = f"{self._procfs_path}/{self.pid}/fd/{fd}" - try: - path = readlink(file) - except (FileNotFoundError, ProcessLookupError): - # ENOENT == file which is gone in the meantime - hit_enoent = True - continue - except OSError as err: - if err.errno == errno.EINVAL: - # not a link - continue - if err.errno == errno.ENAMETOOLONG: - # file name too long - debug(err) - continue - raise - else: - # If path is not an absolute there's no way to tell - # whether it's a regular file or not, so we skip it. - # A regular file is always supposed to be have an - # absolute path though. - if path.startswith('/') and isfile_strict(path): - # Get file position and flags. - file = f"{self._procfs_path}/{self.pid}/fdinfo/{fd}" - try: - with open_binary(file) as f: - pos = int(f.readline().split()[1]) - flags = int(f.readline().split()[1], 8) - except (FileNotFoundError, ProcessLookupError): - # fd gone in the meantime; process may - # still be alive - hit_enoent = True - else: - mode = file_flags_to_mode(flags) - ntuple = popenfile( - path, int(fd), int(pos), mode, flags - ) - retlist.append(ntuple) - if hit_enoent: - self._raise_if_not_alive() - return retlist - - @wrap_exceptions - def net_connections(self, kind='inet'): - ret = _net_connections.retrieve(kind, self.pid) - self._raise_if_not_alive() - return ret - - @wrap_exceptions - def num_fds(self): - return len(os.listdir(f"{self._procfs_path}/{self.pid}/fd")) - - @wrap_exceptions - def ppid(self): - return int(self._parse_stat_file()['ppid']) - - @wrap_exceptions - def uids(self, _uids_re=re.compile(br'Uid:\t(\d+)\t(\d+)\t(\d+)')): - data = self._read_status_file() - real, effective, saved = _uids_re.findall(data)[0] - return _common.puids(int(real), int(effective), int(saved)) - - @wrap_exceptions - def gids(self, _gids_re=re.compile(br'Gid:\t(\d+)\t(\d+)\t(\d+)')): - data = self._read_status_file() - real, effective, saved = _gids_re.findall(data)[0] - return _common.pgids(int(real), int(effective), int(saved)) diff --git a/myenv/lib/python3.12/site-packages/psutil/_psosx.py b/myenv/lib/python3.12/site-packages/psutil/_psosx.py deleted file mode 100644 index e1030b6..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_psosx.py +++ /dev/null @@ -1,565 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""macOS platform implementation.""" - -import errno -import functools -import os -from collections import namedtuple - -from . import _common -from . import _psposix -from . import _psutil_osx as cext -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import ZombieProcess -from ._common import conn_tmap -from ._common import conn_to_ntuple -from ._common import debug -from ._common import isfile_strict -from ._common import memoize_when_activated -from ._common import parse_environ_block -from ._common import usage_percent - -__extra__all__ = [] - - -# ===================================================================== -# --- globals -# ===================================================================== - - -PAGESIZE = cext.getpagesize() -AF_LINK = cext.AF_LINK - -TCP_STATUSES = { - cext.TCPS_ESTABLISHED: _common.CONN_ESTABLISHED, - cext.TCPS_SYN_SENT: _common.CONN_SYN_SENT, - cext.TCPS_SYN_RECEIVED: _common.CONN_SYN_RECV, - cext.TCPS_FIN_WAIT_1: _common.CONN_FIN_WAIT1, - cext.TCPS_FIN_WAIT_2: _common.CONN_FIN_WAIT2, - cext.TCPS_TIME_WAIT: _common.CONN_TIME_WAIT, - cext.TCPS_CLOSED: _common.CONN_CLOSE, - cext.TCPS_CLOSE_WAIT: _common.CONN_CLOSE_WAIT, - cext.TCPS_LAST_ACK: _common.CONN_LAST_ACK, - cext.TCPS_LISTEN: _common.CONN_LISTEN, - cext.TCPS_CLOSING: _common.CONN_CLOSING, - cext.PSUTIL_CONN_NONE: _common.CONN_NONE, -} - -PROC_STATUSES = { - cext.SIDL: _common.STATUS_IDLE, - cext.SRUN: _common.STATUS_RUNNING, - cext.SSLEEP: _common.STATUS_SLEEPING, - cext.SSTOP: _common.STATUS_STOPPED, - cext.SZOMB: _common.STATUS_ZOMBIE, -} - -kinfo_proc_map = dict( - ppid=0, - ruid=1, - euid=2, - suid=3, - rgid=4, - egid=5, - sgid=6, - ttynr=7, - ctime=8, - status=9, - name=10, -) - -pidtaskinfo_map = dict( - cpuutime=0, - cpustime=1, - rss=2, - vms=3, - pfaults=4, - pageins=5, - numthreads=6, - volctxsw=7, -) - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# fmt: off -# psutil.cpu_times() -scputimes = namedtuple('scputimes', ['user', 'nice', 'system', 'idle']) -# psutil.virtual_memory() -svmem = namedtuple( - 'svmem', ['total', 'available', 'percent', 'used', 'free', - 'active', 'inactive', 'wired']) -# psutil.Process.memory_info() -pmem = namedtuple('pmem', ['rss', 'vms', 'pfaults', 'pageins']) -# psutil.Process.memory_full_info() -pfullmem = namedtuple('pfullmem', pmem._fields + ('uss', )) -# fmt: on - - -# ===================================================================== -# --- memory -# ===================================================================== - - -def virtual_memory(): - """System virtual memory as a namedtuple.""" - total, active, inactive, wired, free, speculative = cext.virtual_mem() - # This is how Zabbix calculate avail and used mem: - # https://github.com/zabbix/zabbix/blob/master/src/libs/zbxsysinfo/osx/memory.c - # Also see: https://github.com/giampaolo/psutil/issues/1277 - avail = inactive + free - used = active + wired - # This is NOT how Zabbix calculates free mem but it matches "free" - # cmdline utility. - free -= speculative - percent = usage_percent((total - avail), total, round_=1) - return svmem(total, avail, percent, used, free, active, inactive, wired) - - -def swap_memory(): - """Swap system memory as a (total, used, free, sin, sout) tuple.""" - total, used, free, sin, sout = cext.swap_mem() - percent = usage_percent(used, total, round_=1) - return _common.sswap(total, used, free, percent, sin, sout) - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return system CPU times as a namedtuple.""" - user, nice, system, idle = cext.cpu_times() - return scputimes(user, nice, system, idle) - - -def per_cpu_times(): - """Return system CPU times as a named tuple.""" - ret = [] - for cpu_t in cext.per_cpu_times(): - user, nice, system, idle = cpu_t - item = scputimes(user, nice, system, idle) - ret.append(item) - return ret - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - return cext.cpu_count_logical() - - -def cpu_count_cores(): - """Return the number of CPU cores in the system.""" - return cext.cpu_count_cores() - - -def cpu_stats(): - ctx_switches, interrupts, soft_interrupts, syscalls, _traps = ( - cext.cpu_stats() - ) - return _common.scpustats( - ctx_switches, interrupts, soft_interrupts, syscalls - ) - - -if cext.has_cpu_freq(): # not always available on ARM64 - - def cpu_freq(): - """Return CPU frequency. - On macOS per-cpu frequency is not supported. - Also, the returned frequency never changes, see: - https://arstechnica.com/civis/viewtopic.php?f=19&t=465002. - """ - curr, min_, max_ = cext.cpu_freq() - return [_common.scpufreq(curr, min_, max_)] - - -# ===================================================================== -# --- disks -# ===================================================================== - - -disk_usage = _psposix.disk_usage -disk_io_counters = cext.disk_io_counters - - -def disk_partitions(all=False): - """Return mounted disk partitions as a list of namedtuples.""" - retlist = [] - partitions = cext.disk_partitions() - for partition in partitions: - device, mountpoint, fstype, opts = partition - if device == 'none': - device = '' - if not all: - if not os.path.isabs(device) or not os.path.exists(device): - continue - ntuple = _common.sdiskpart(device, mountpoint, fstype, opts) - retlist.append(ntuple) - return retlist - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -def sensors_battery(): - """Return battery information.""" - try: - percent, minsleft, power_plugged = cext.sensors_battery() - except NotImplementedError: - # no power source - return None according to interface - return None - power_plugged = power_plugged == 1 - if power_plugged: - secsleft = _common.POWER_TIME_UNLIMITED - elif minsleft == -1: - secsleft = _common.POWER_TIME_UNKNOWN - else: - secsleft = minsleft * 60 - return _common.sbattery(percent, secsleft, power_plugged) - - -# ===================================================================== -# --- network -# ===================================================================== - - -net_io_counters = cext.net_io_counters -net_if_addrs = cext.net_if_addrs - - -def net_connections(kind='inet'): - """System-wide network connections.""" - # Note: on macOS this will fail with AccessDenied unless - # the process is owned by root. - ret = [] - for pid in pids(): - try: - cons = Process(pid).net_connections(kind) - except NoSuchProcess: - continue - else: - if cons: - for c in cons: - c = list(c) + [pid] - ret.append(_common.sconn(*c)) - return ret - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - names = net_io_counters().keys() - ret = {} - for name in names: - try: - mtu = cext.net_if_mtu(name) - flags = cext.net_if_flags(name) - duplex, speed = cext.net_if_duplex_speed(name) - except OSError as err: - # https://github.com/giampaolo/psutil/issues/1279 - if err.errno != errno.ENODEV: - raise - else: - if hasattr(_common, 'NicDuplex'): - duplex = _common.NicDuplex(duplex) - output_flags = ','.join(flags) - isup = 'running' in flags - ret[name] = _common.snicstats( - isup, duplex, speed, mtu, output_flags - ) - return ret - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -def boot_time(): - """The system boot time expressed in seconds since the epoch.""" - return cext.boot_time() - - -try: - INIT_BOOT_TIME = boot_time() -except Exception as err: # noqa: BLE001 - # Don't want to crash at import time. - debug(f"ignoring exception on import: {err!r}") - INIT_BOOT_TIME = 0 - - -def adjust_proc_create_time(ctime): - """Account for system clock updates.""" - if INIT_BOOT_TIME == 0: - return ctime - - diff = INIT_BOOT_TIME - boot_time() - if diff == 0 or abs(diff) < 1: - return ctime - - debug("system clock was updated; adjusting process create_time()") - if diff < 0: - return ctime - diff - return ctime + diff - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - for item in rawlist: - user, tty, hostname, tstamp, pid = item - if tty == '~': - continue # reboot or shutdown - if not tstamp: - continue - nt = _common.suser(user, tty or None, hostname or None, tstamp, pid) - retlist.append(nt) - return retlist - - -# ===================================================================== -# --- processes -# ===================================================================== - - -def pids(): - ls = cext.pids() - if 0 not in ls: - # On certain macOS versions pids() C doesn't return PID 0 but - # "ps" does and the process is querable via sysctl(): - # https://travis-ci.org/giampaolo/psutil/jobs/309619941 - try: - Process(0).create_time() - ls.insert(0, 0) - except NoSuchProcess: - pass - except AccessDenied: - ls.insert(0, 0) - return ls - - -pid_exists = _psposix.pid_exists - - -def wrap_exceptions(fun): - """Decorator which translates bare OSError exceptions into - NoSuchProcess and AccessDenied. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - pid, ppid, name = self.pid, self._ppid, self._name - try: - return fun(self, *args, **kwargs) - except ProcessLookupError as err: - if cext.proc_is_zombie(pid): - raise ZombieProcess(pid, name, ppid) from err - raise NoSuchProcess(pid, name) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - except cext.ZombieProcessError as err: - raise ZombieProcess(pid, name, ppid) from err - - return wrapper - - -class Process: - """Wrapper class around underlying C implementation.""" - - __slots__ = ["_cache", "_name", "_ppid", "pid"] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - - @wrap_exceptions - @memoize_when_activated - def _get_kinfo_proc(self): - # Note: should work with all PIDs without permission issues. - ret = cext.proc_kinfo_oneshot(self.pid) - assert len(ret) == len(kinfo_proc_map) - return ret - - @wrap_exceptions - @memoize_when_activated - def _get_pidtaskinfo(self): - # Note: should work for PIDs owned by user only. - ret = cext.proc_pidtaskinfo_oneshot(self.pid) - assert len(ret) == len(pidtaskinfo_map) - return ret - - def oneshot_enter(self): - self._get_kinfo_proc.cache_activate(self) - self._get_pidtaskinfo.cache_activate(self) - - def oneshot_exit(self): - self._get_kinfo_proc.cache_deactivate(self) - self._get_pidtaskinfo.cache_deactivate(self) - - @wrap_exceptions - def name(self): - name = self._get_kinfo_proc()[kinfo_proc_map['name']] - return name if name is not None else cext.proc_name(self.pid) - - @wrap_exceptions - def exe(self): - return cext.proc_exe(self.pid) - - @wrap_exceptions - def cmdline(self): - return cext.proc_cmdline(self.pid) - - @wrap_exceptions - def environ(self): - return parse_environ_block(cext.proc_environ(self.pid)) - - @wrap_exceptions - def ppid(self): - self._ppid = self._get_kinfo_proc()[kinfo_proc_map['ppid']] - return self._ppid - - @wrap_exceptions - def cwd(self): - return cext.proc_cwd(self.pid) - - @wrap_exceptions - def uids(self): - rawtuple = self._get_kinfo_proc() - return _common.puids( - rawtuple[kinfo_proc_map['ruid']], - rawtuple[kinfo_proc_map['euid']], - rawtuple[kinfo_proc_map['suid']], - ) - - @wrap_exceptions - def gids(self): - rawtuple = self._get_kinfo_proc() - return _common.puids( - rawtuple[kinfo_proc_map['rgid']], - rawtuple[kinfo_proc_map['egid']], - rawtuple[kinfo_proc_map['sgid']], - ) - - @wrap_exceptions - def terminal(self): - tty_nr = self._get_kinfo_proc()[kinfo_proc_map['ttynr']] - tmap = _psposix.get_terminal_map() - try: - return tmap[tty_nr] - except KeyError: - return None - - @wrap_exceptions - def memory_info(self): - rawtuple = self._get_pidtaskinfo() - return pmem( - rawtuple[pidtaskinfo_map['rss']], - rawtuple[pidtaskinfo_map['vms']], - rawtuple[pidtaskinfo_map['pfaults']], - rawtuple[pidtaskinfo_map['pageins']], - ) - - @wrap_exceptions - def memory_full_info(self): - basic_mem = self.memory_info() - uss = cext.proc_memory_uss(self.pid) - return pfullmem(*basic_mem + (uss,)) - - @wrap_exceptions - def cpu_times(self): - rawtuple = self._get_pidtaskinfo() - return _common.pcputimes( - rawtuple[pidtaskinfo_map['cpuutime']], - rawtuple[pidtaskinfo_map['cpustime']], - # children user / system times are not retrievable (set to 0) - 0.0, - 0.0, - ) - - @wrap_exceptions - def create_time(self, monotonic=False): - ctime = self._get_kinfo_proc()[kinfo_proc_map['ctime']] - if not monotonic: - ctime = adjust_proc_create_time(ctime) - return ctime - - @wrap_exceptions - def num_ctx_switches(self): - # Unvoluntary value seems not to be available; - # getrusage() numbers seems to confirm this theory. - # We set it to 0. - vol = self._get_pidtaskinfo()[pidtaskinfo_map['volctxsw']] - return _common.pctxsw(vol, 0) - - @wrap_exceptions - def num_threads(self): - return self._get_pidtaskinfo()[pidtaskinfo_map['numthreads']] - - @wrap_exceptions - def open_files(self): - if self.pid == 0: - return [] - files = [] - rawlist = cext.proc_open_files(self.pid) - for path, fd in rawlist: - if isfile_strict(path): - ntuple = _common.popenfile(path, fd) - files.append(ntuple) - return files - - @wrap_exceptions - def net_connections(self, kind='inet'): - families, types = conn_tmap[kind] - rawlist = cext.proc_net_connections(self.pid, families, types) - ret = [] - for item in rawlist: - fd, fam, type, laddr, raddr, status = item - nt = conn_to_ntuple( - fd, fam, type, laddr, raddr, status, TCP_STATUSES - ) - ret.append(nt) - return ret - - @wrap_exceptions - def num_fds(self): - if self.pid == 0: - return 0 - return cext.proc_num_fds(self.pid) - - @wrap_exceptions - def wait(self, timeout=None): - return _psposix.wait_pid(self.pid, timeout, self._name) - - @wrap_exceptions - def nice_get(self): - return cext.proc_priority_get(self.pid) - - @wrap_exceptions - def nice_set(self, value): - return cext.proc_priority_set(self.pid, value) - - @wrap_exceptions - def status(self): - code = self._get_kinfo_proc()[kinfo_proc_map['status']] - # XXX is '?' legit? (we're not supposed to return it anyway) - return PROC_STATUSES.get(code, '?') - - @wrap_exceptions - def threads(self): - rawlist = cext.proc_threads(self.pid) - retlist = [] - for thread_id, utime, stime in rawlist: - ntuple = _common.pthread(thread_id, utime, stime) - retlist.append(ntuple) - return retlist diff --git a/myenv/lib/python3.12/site-packages/psutil/_psposix.py b/myenv/lib/python3.12/site-packages/psutil/_psposix.py deleted file mode 100644 index 83f1acd..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_psposix.py +++ /dev/null @@ -1,206 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Routines common to all posix systems.""" - -import enum -import glob -import os -import signal -import time - -from ._common import MACOS -from ._common import TimeoutExpired -from ._common import memoize -from ._common import sdiskusage -from ._common import usage_percent - -if MACOS: - from . import _psutil_osx - - -__all__ = ['pid_exists', 'wait_pid', 'disk_usage', 'get_terminal_map'] - - -def pid_exists(pid): - """Check whether pid exists in the current process table.""" - if pid == 0: - # According to "man 2 kill" PID 0 has a special meaning: - # it refers to <> so we don't want to go any further. - # If we get here it means this UNIX platform *does* have - # a process with id 0. - return True - try: - os.kill(pid, 0) - except ProcessLookupError: - return False - except PermissionError: - # EPERM clearly means there's a process to deny access to - return True - # According to "man 2 kill" possible error values are - # (EINVAL, EPERM, ESRCH) - else: - return True - - -Negsignal = enum.IntEnum( - 'Negsignal', {x.name: -x.value for x in signal.Signals} -) - - -def negsig_to_enum(num): - """Convert a negative signal value to an enum.""" - try: - return Negsignal(num) - except ValueError: - return num - - -def wait_pid( - pid, - timeout=None, - proc_name=None, - _waitpid=os.waitpid, - _timer=getattr(time, 'monotonic', time.time), # noqa: B008 - _min=min, - _sleep=time.sleep, - _pid_exists=pid_exists, -): - """Wait for a process PID to terminate. - - If the process terminated normally by calling exit(3) or _exit(2), - or by returning from main(), the return value is the positive integer - passed to *exit(). - - If it was terminated by a signal it returns the negated value of the - signal which caused the termination (e.g. -SIGTERM). - - If PID is not a children of os.getpid() (current process) just - wait until the process disappears and return None. - - If PID does not exist at all return None immediately. - - If *timeout* != None and process is still alive raise TimeoutExpired. - timeout=0 is also possible (either return immediately or raise). - """ - if pid <= 0: - # see "man waitpid" - msg = "can't wait for PID 0" - raise ValueError(msg) - interval = 0.0001 - flags = 0 - if timeout is not None: - flags |= os.WNOHANG - stop_at = _timer() + timeout - - def sleep(interval): - # Sleep for some time and return a new increased interval. - if timeout is not None: - if _timer() >= stop_at: - raise TimeoutExpired(timeout, pid=pid, name=proc_name) - _sleep(interval) - return _min(interval * 2, 0.04) - - # See: https://linux.die.net/man/2/waitpid - while True: - try: - retpid, status = os.waitpid(pid, flags) - except InterruptedError: - interval = sleep(interval) - except ChildProcessError: - # This has two meanings: - # - PID is not a child of os.getpid() in which case - # we keep polling until it's gone - # - PID never existed in the first place - # In both cases we'll eventually return None as we - # can't determine its exit status code. - while _pid_exists(pid): - interval = sleep(interval) - return None - else: - if retpid == 0: - # WNOHANG flag was used and PID is still running. - interval = sleep(interval) - continue - - if os.WIFEXITED(status): - # Process terminated normally by calling exit(3) or _exit(2), - # or by returning from main(). The return value is the - # positive integer passed to *exit(). - return os.WEXITSTATUS(status) - elif os.WIFSIGNALED(status): - # Process exited due to a signal. Return the negative value - # of that signal. - return negsig_to_enum(-os.WTERMSIG(status)) - # elif os.WIFSTOPPED(status): - # # Process was stopped via SIGSTOP or is being traced, and - # # waitpid() was called with WUNTRACED flag. PID is still - # # alive. From now on waitpid() will keep returning (0, 0) - # # until the process state doesn't change. - # # It may make sense to catch/enable this since stopped PIDs - # # ignore SIGTERM. - # interval = sleep(interval) - # continue - # elif os.WIFCONTINUED(status): - # # Process was resumed via SIGCONT and waitpid() was called - # # with WCONTINUED flag. - # interval = sleep(interval) - # continue - else: - # Should never happen. - msg = f"unknown process exit status {status!r}" - raise ValueError(msg) - - -def disk_usage(path): - """Return disk usage associated with path. - Note: UNIX usually reserves 5% disk space which is not accessible - by user. In this function "total" and "used" values reflect the - total and used disk space whereas "free" and "percent" represent - the "free" and "used percent" user disk space. - """ - st = os.statvfs(path) - # Total space which is only available to root (unless changed - # at system level). - total = st.f_blocks * st.f_frsize - # Remaining free space usable by root. - avail_to_root = st.f_bfree * st.f_frsize - # Remaining free space usable by user. - avail_to_user = st.f_bavail * st.f_frsize - # Total space being used in general. - used = total - avail_to_root - if MACOS: - # see: https://github.com/giampaolo/psutil/pull/2152 - used = _psutil_osx.disk_usage_used(path, used) - # Total space which is available to user (same as 'total' but - # for the user). - total_user = used + avail_to_user - # User usage percent compared to the total amount of space - # the user can use. This number would be higher if compared - # to root's because the user has less space (usually -5%). - usage_percent_user = usage_percent(used, total_user, round_=1) - - # NB: the percentage is -5% than what shown by df due to - # reserved blocks that we are currently not considering: - # https://github.com/giampaolo/psutil/issues/829#issuecomment-223750462 - return sdiskusage( - total=total, used=used, free=avail_to_user, percent=usage_percent_user - ) - - -@memoize -def get_terminal_map(): - """Get a map of device-id -> path as a dict. - Used by Process.terminal(). - """ - ret = {} - ls = glob.glob('/dev/tty*') + glob.glob('/dev/pts/*') - for name in ls: - assert name not in ret, name - try: - ret[os.stat(name).st_rdev] = name - except FileNotFoundError: - pass - return ret diff --git a/myenv/lib/python3.12/site-packages/psutil/_pssunos.py b/myenv/lib/python3.12/site-packages/psutil/_pssunos.py deleted file mode 100644 index e326893..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_pssunos.py +++ /dev/null @@ -1,732 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Sun OS Solaris platform implementation.""" - -import errno -import functools -import os -import socket -import subprocess -import sys -from collections import namedtuple -from socket import AF_INET - -from . import _common -from . import _psposix -from . import _psutil_sunos as cext -from ._common import AF_INET6 -from ._common import ENCODING -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import ZombieProcess -from ._common import debug -from ._common import get_procfs_path -from ._common import isfile_strict -from ._common import memoize_when_activated -from ._common import sockfam_to_enum -from ._common import socktype_to_enum -from ._common import usage_percent - -__extra__all__ = ["CONN_IDLE", "CONN_BOUND", "PROCFS_PATH"] - - -# ===================================================================== -# --- globals -# ===================================================================== - - -PAGE_SIZE = cext.getpagesize() -AF_LINK = cext.AF_LINK -IS_64_BIT = sys.maxsize > 2**32 - -CONN_IDLE = "IDLE" -CONN_BOUND = "BOUND" - -PROC_STATUSES = { - cext.SSLEEP: _common.STATUS_SLEEPING, - cext.SRUN: _common.STATUS_RUNNING, - cext.SZOMB: _common.STATUS_ZOMBIE, - cext.SSTOP: _common.STATUS_STOPPED, - cext.SIDL: _common.STATUS_IDLE, - cext.SONPROC: _common.STATUS_RUNNING, # same as run - cext.SWAIT: _common.STATUS_WAITING, -} - -TCP_STATUSES = { - cext.TCPS_ESTABLISHED: _common.CONN_ESTABLISHED, - cext.TCPS_SYN_SENT: _common.CONN_SYN_SENT, - cext.TCPS_SYN_RCVD: _common.CONN_SYN_RECV, - cext.TCPS_FIN_WAIT_1: _common.CONN_FIN_WAIT1, - cext.TCPS_FIN_WAIT_2: _common.CONN_FIN_WAIT2, - cext.TCPS_TIME_WAIT: _common.CONN_TIME_WAIT, - cext.TCPS_CLOSED: _common.CONN_CLOSE, - cext.TCPS_CLOSE_WAIT: _common.CONN_CLOSE_WAIT, - cext.TCPS_LAST_ACK: _common.CONN_LAST_ACK, - cext.TCPS_LISTEN: _common.CONN_LISTEN, - cext.TCPS_CLOSING: _common.CONN_CLOSING, - cext.PSUTIL_CONN_NONE: _common.CONN_NONE, - cext.TCPS_IDLE: CONN_IDLE, # sunos specific - cext.TCPS_BOUND: CONN_BOUND, # sunos specific -} - -proc_info_map = dict( - ppid=0, - rss=1, - vms=2, - create_time=3, - nice=4, - num_threads=5, - status=6, - ttynr=7, - uid=8, - euid=9, - gid=10, - egid=11, -) - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# psutil.cpu_times() -scputimes = namedtuple('scputimes', ['user', 'system', 'idle', 'iowait']) -# psutil.cpu_times(percpu=True) -pcputimes = namedtuple( - 'pcputimes', ['user', 'system', 'children_user', 'children_system'] -) -# psutil.virtual_memory() -svmem = namedtuple('svmem', ['total', 'available', 'percent', 'used', 'free']) -# psutil.Process.memory_info() -pmem = namedtuple('pmem', ['rss', 'vms']) -pfullmem = pmem -# psutil.Process.memory_maps(grouped=True) -pmmap_grouped = namedtuple( - 'pmmap_grouped', ['path', 'rss', 'anonymous', 'locked'] -) -# psutil.Process.memory_maps(grouped=False) -pmmap_ext = namedtuple( - 'pmmap_ext', 'addr perms ' + ' '.join(pmmap_grouped._fields) -) - - -# ===================================================================== -# --- memory -# ===================================================================== - - -def virtual_memory(): - """Report virtual memory metrics.""" - # we could have done this with kstat, but IMHO this is good enough - total = os.sysconf('SC_PHYS_PAGES') * PAGE_SIZE - # note: there's no difference on Solaris - free = avail = os.sysconf('SC_AVPHYS_PAGES') * PAGE_SIZE - used = total - free - percent = usage_percent(used, total, round_=1) - return svmem(total, avail, percent, used, free) - - -def swap_memory(): - """Report swap memory metrics.""" - sin, sout = cext.swap_mem() - # XXX - # we are supposed to get total/free by doing so: - # http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/ - # usr/src/cmd/swap/swap.c - # ...nevertheless I can't manage to obtain the same numbers as 'swap' - # cmdline utility, so let's parse its output (sigh!) - p = subprocess.Popen( - [ - '/usr/bin/env', - f"PATH=/usr/sbin:/sbin:{os.environ['PATH']}", - 'swap', - '-l', - ], - stdout=subprocess.PIPE, - ) - stdout, _ = p.communicate() - stdout = stdout.decode(sys.stdout.encoding) - if p.returncode != 0: - msg = f"'swap -l' failed (retcode={p.returncode})" - raise RuntimeError(msg) - - lines = stdout.strip().split('\n')[1:] - if not lines: - msg = 'no swap device(s) configured' - raise RuntimeError(msg) - total = free = 0 - for line in lines: - line = line.split() - t, f = line[3:5] - total += int(int(t) * 512) - free += int(int(f) * 512) - used = total - free - percent = usage_percent(used, total, round_=1) - return _common.sswap( - total, used, free, percent, sin * PAGE_SIZE, sout * PAGE_SIZE - ) - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return system-wide CPU times as a named tuple.""" - ret = cext.per_cpu_times() - return scputimes(*[sum(x) for x in zip(*ret)]) - - -def per_cpu_times(): - """Return system per-CPU times as a list of named tuples.""" - ret = cext.per_cpu_times() - return [scputimes(*x) for x in ret] - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - try: - return os.sysconf("SC_NPROCESSORS_ONLN") - except ValueError: - # mimic os.cpu_count() behavior - return None - - -def cpu_count_cores(): - """Return the number of CPU cores in the system.""" - return cext.cpu_count_cores() - - -def cpu_stats(): - """Return various CPU stats as a named tuple.""" - ctx_switches, interrupts, syscalls, _traps = cext.cpu_stats() - soft_interrupts = 0 - return _common.scpustats( - ctx_switches, interrupts, soft_interrupts, syscalls - ) - - -# ===================================================================== -# --- disks -# ===================================================================== - - -disk_io_counters = cext.disk_io_counters -disk_usage = _psposix.disk_usage - - -def disk_partitions(all=False): - """Return system disk partitions.""" - # TODO - the filtering logic should be better checked so that - # it tries to reflect 'df' as much as possible - retlist = [] - partitions = cext.disk_partitions() - for partition in partitions: - device, mountpoint, fstype, opts = partition - if device == 'none': - device = '' - if not all: - # Differently from, say, Linux, we don't have a list of - # common fs types so the best we can do, AFAIK, is to - # filter by filesystem having a total size > 0. - try: - if not disk_usage(mountpoint).total: - continue - except OSError as err: - # https://github.com/giampaolo/psutil/issues/1674 - debug(f"skipping {mountpoint!r}: {err}") - continue - ntuple = _common.sdiskpart(device, mountpoint, fstype, opts) - retlist.append(ntuple) - return retlist - - -# ===================================================================== -# --- network -# ===================================================================== - - -net_io_counters = cext.net_io_counters -net_if_addrs = cext.net_if_addrs - - -def net_connections(kind, _pid=-1): - """Return socket connections. If pid == -1 return system-wide - connections (as opposed to connections opened by one process only). - Only INET sockets are returned (UNIX are not). - """ - families, types = _common.conn_tmap[kind] - rawlist = cext.net_connections(_pid) - ret = set() - for item in rawlist: - fd, fam, type_, laddr, raddr, status, pid = item - if fam not in families: - continue - if type_ not in types: - continue - # TODO: refactor and use _common.conn_to_ntuple. - if fam in {AF_INET, AF_INET6}: - if laddr: - laddr = _common.addr(*laddr) - if raddr: - raddr = _common.addr(*raddr) - status = TCP_STATUSES[status] - fam = sockfam_to_enum(fam) - type_ = socktype_to_enum(type_) - if _pid == -1: - nt = _common.sconn(fd, fam, type_, laddr, raddr, status, pid) - else: - nt = _common.pconn(fd, fam, type_, laddr, raddr, status) - ret.add(nt) - return list(ret) - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - ret = cext.net_if_stats() - for name, items in ret.items(): - isup, duplex, speed, mtu = items - if hasattr(_common, 'NicDuplex'): - duplex = _common.NicDuplex(duplex) - ret[name] = _common.snicstats(isup, duplex, speed, mtu, '') - return ret - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -def boot_time(): - """The system boot time expressed in seconds since the epoch.""" - return cext.boot_time() - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - localhost = (':0.0', ':0') - for item in rawlist: - user, tty, hostname, tstamp, user_process, pid = item - # note: the underlying C function includes entries about - # system boot, run level and others. We might want - # to use them in the future. - if not user_process: - continue - if hostname in localhost: - hostname = 'localhost' - nt = _common.suser(user, tty, hostname, tstamp, pid) - retlist.append(nt) - return retlist - - -# ===================================================================== -# --- processes -# ===================================================================== - - -def pids(): - """Returns a list of PIDs currently running on the system.""" - path = get_procfs_path().encode(ENCODING) - return [int(x) for x in os.listdir(path) if x.isdigit()] - - -def pid_exists(pid): - """Check for the existence of a unix pid.""" - return _psposix.pid_exists(pid) - - -def wrap_exceptions(fun): - """Call callable into a try/except clause and translate ENOENT, - EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - pid, ppid, name = self.pid, self._ppid, self._name - try: - return fun(self, *args, **kwargs) - except (FileNotFoundError, ProcessLookupError) as err: - # ENOENT (no such file or directory) gets raised on open(). - # ESRCH (no such process) can get raised on read() if - # process is gone in meantime. - if not pid_exists(pid): - raise NoSuchProcess(pid, name) from err - raise ZombieProcess(pid, name, ppid) from err - except PermissionError as err: - raise AccessDenied(pid, name) from err - except OSError as err: - if pid == 0: - if 0 in pids(): - raise AccessDenied(pid, name) from err - raise - raise - - return wrapper - - -class Process: - """Wrapper class around underlying C implementation.""" - - __slots__ = ["_cache", "_name", "_ppid", "_procfs_path", "pid"] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - self._procfs_path = get_procfs_path() - - def _assert_alive(self): - """Raise NSP if the process disappeared on us.""" - # For those C function who do not raise NSP, possibly returning - # incorrect or incomplete result. - os.stat(f"{self._procfs_path}/{self.pid}") - - def oneshot_enter(self): - self._proc_name_and_args.cache_activate(self) - self._proc_basic_info.cache_activate(self) - self._proc_cred.cache_activate(self) - - def oneshot_exit(self): - self._proc_name_and_args.cache_deactivate(self) - self._proc_basic_info.cache_deactivate(self) - self._proc_cred.cache_deactivate(self) - - @wrap_exceptions - @memoize_when_activated - def _proc_name_and_args(self): - return cext.proc_name_and_args(self.pid, self._procfs_path) - - @wrap_exceptions - @memoize_when_activated - def _proc_basic_info(self): - if self.pid == 0 and not os.path.exists( - f"{self._procfs_path}/{self.pid}/psinfo" - ): - raise AccessDenied(self.pid) - ret = cext.proc_basic_info(self.pid, self._procfs_path) - assert len(ret) == len(proc_info_map) - return ret - - @wrap_exceptions - @memoize_when_activated - def _proc_cred(self): - return cext.proc_cred(self.pid, self._procfs_path) - - @wrap_exceptions - def name(self): - # note: max len == 15 - return self._proc_name_and_args()[0] - - @wrap_exceptions - def exe(self): - try: - return os.readlink(f"{self._procfs_path}/{self.pid}/path/a.out") - except OSError: - pass # continue and guess the exe name from the cmdline - # Will be guessed later from cmdline but we want to explicitly - # invoke cmdline here in order to get an AccessDenied - # exception if the user has not enough privileges. - self.cmdline() - return "" - - @wrap_exceptions - def cmdline(self): - return self._proc_name_and_args()[1] - - @wrap_exceptions - def environ(self): - return cext.proc_environ(self.pid, self._procfs_path) - - @wrap_exceptions - def create_time(self): - return self._proc_basic_info()[proc_info_map['create_time']] - - @wrap_exceptions - def num_threads(self): - return self._proc_basic_info()[proc_info_map['num_threads']] - - @wrap_exceptions - def nice_get(self): - # Note #1: getpriority(3) doesn't work for realtime processes. - # Psinfo is what ps uses, see: - # https://github.com/giampaolo/psutil/issues/1194 - return self._proc_basic_info()[proc_info_map['nice']] - - @wrap_exceptions - def nice_set(self, value): - if self.pid in {2, 3}: - # Special case PIDs: internally setpriority(3) return ESRCH - # (no such process), no matter what. - # The process actually exists though, as it has a name, - # creation time, etc. - raise AccessDenied(self.pid, self._name) - return cext.proc_priority_set(self.pid, value) - - @wrap_exceptions - def ppid(self): - self._ppid = self._proc_basic_info()[proc_info_map['ppid']] - return self._ppid - - @wrap_exceptions - def uids(self): - try: - real, effective, saved, _, _, _ = self._proc_cred() - except AccessDenied: - real = self._proc_basic_info()[proc_info_map['uid']] - effective = self._proc_basic_info()[proc_info_map['euid']] - saved = None - return _common.puids(real, effective, saved) - - @wrap_exceptions - def gids(self): - try: - _, _, _, real, effective, saved = self._proc_cred() - except AccessDenied: - real = self._proc_basic_info()[proc_info_map['gid']] - effective = self._proc_basic_info()[proc_info_map['egid']] - saved = None - return _common.puids(real, effective, saved) - - @wrap_exceptions - def cpu_times(self): - try: - times = cext.proc_cpu_times(self.pid, self._procfs_path) - except OSError as err: - if err.errno == errno.EOVERFLOW and not IS_64_BIT: - # We may get here if we attempt to query a 64bit process - # with a 32bit python. - # Error originates from read() and also tools like "cat" - # fail in the same way (!). - # Since there simply is no way to determine CPU times we - # return 0.0 as a fallback. See: - # https://github.com/giampaolo/psutil/issues/857 - times = (0.0, 0.0, 0.0, 0.0) - else: - raise - return _common.pcputimes(*times) - - @wrap_exceptions - def cpu_num(self): - return cext.proc_cpu_num(self.pid, self._procfs_path) - - @wrap_exceptions - def terminal(self): - procfs_path = self._procfs_path - hit_enoent = False - tty = wrap_exceptions(self._proc_basic_info()[proc_info_map['ttynr']]) - if tty != cext.PRNODEV: - for x in (0, 1, 2, 255): - try: - return os.readlink(f"{procfs_path}/{self.pid}/path/{x}") - except FileNotFoundError: - hit_enoent = True - continue - if hit_enoent: - self._assert_alive() - - @wrap_exceptions - def cwd(self): - # /proc/PID/path/cwd may not be resolved by readlink() even if - # it exists (ls shows it). If that's the case and the process - # is still alive return None (we can return None also on BSD). - # Reference: https://groups.google.com/g/comp.unix.solaris/c/tcqvhTNFCAs - procfs_path = self._procfs_path - try: - return os.readlink(f"{procfs_path}/{self.pid}/path/cwd") - except FileNotFoundError: - os.stat(f"{procfs_path}/{self.pid}") # raise NSP or AD - return "" - - @wrap_exceptions - def memory_info(self): - ret = self._proc_basic_info() - rss = ret[proc_info_map['rss']] * 1024 - vms = ret[proc_info_map['vms']] * 1024 - return pmem(rss, vms) - - memory_full_info = memory_info - - @wrap_exceptions - def status(self): - code = self._proc_basic_info()[proc_info_map['status']] - # XXX is '?' legit? (we're not supposed to return it anyway) - return PROC_STATUSES.get(code, '?') - - @wrap_exceptions - def threads(self): - procfs_path = self._procfs_path - ret = [] - tids = os.listdir(f"{procfs_path}/{self.pid}/lwp") - hit_enoent = False - for tid in tids: - tid = int(tid) - try: - utime, stime = cext.query_process_thread( - self.pid, tid, procfs_path - ) - except OSError as err: - if err.errno == errno.EOVERFLOW and not IS_64_BIT: - # We may get here if we attempt to query a 64bit process - # with a 32bit python. - # Error originates from read() and also tools like "cat" - # fail in the same way (!). - # Since there simply is no way to determine CPU times we - # return 0.0 as a fallback. See: - # https://github.com/giampaolo/psutil/issues/857 - continue - # ENOENT == thread gone in meantime - if err.errno == errno.ENOENT: - hit_enoent = True - continue - raise - else: - nt = _common.pthread(tid, utime, stime) - ret.append(nt) - if hit_enoent: - self._assert_alive() - return ret - - @wrap_exceptions - def open_files(self): - retlist = [] - hit_enoent = False - procfs_path = self._procfs_path - pathdir = f"{procfs_path}/{self.pid}/path" - for fd in os.listdir(f"{procfs_path}/{self.pid}/fd"): - path = os.path.join(pathdir, fd) - if os.path.islink(path): - try: - file = os.readlink(path) - except FileNotFoundError: - hit_enoent = True - continue - else: - if isfile_strict(file): - retlist.append(_common.popenfile(file, int(fd))) - if hit_enoent: - self._assert_alive() - return retlist - - def _get_unix_sockets(self, pid): - """Get UNIX sockets used by process by parsing 'pfiles' output.""" - # TODO: rewrite this in C (...but the damn netstat source code - # does not include this part! Argh!!) - cmd = ["pfiles", str(pid)] - p = subprocess.Popen( - cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE - ) - stdout, stderr = p.communicate() - stdout, stderr = ( - x.decode(sys.stdout.encoding) for x in (stdout, stderr) - ) - if p.returncode != 0: - if 'permission denied' in stderr.lower(): - raise AccessDenied(self.pid, self._name) - if 'no such process' in stderr.lower(): - raise NoSuchProcess(self.pid, self._name) - msg = f"{cmd!r} command error\n{stderr}" - raise RuntimeError(msg) - - lines = stdout.split('\n')[2:] - for i, line in enumerate(lines): - line = line.lstrip() - if line.startswith('sockname: AF_UNIX'): - path = line.split(' ', 2)[2] - type = lines[i - 2].strip() - if type == 'SOCK_STREAM': - type = socket.SOCK_STREAM - elif type == 'SOCK_DGRAM': - type = socket.SOCK_DGRAM - else: - type = -1 - yield (-1, socket.AF_UNIX, type, path, "", _common.CONN_NONE) - - @wrap_exceptions - def net_connections(self, kind='inet'): - ret = net_connections(kind, _pid=self.pid) - # The underlying C implementation retrieves all OS connections - # and filters them by PID. At this point we can't tell whether - # an empty list means there were no connections for process or - # process is no longer active so we force NSP in case the PID - # is no longer there. - if not ret: - # will raise NSP if process is gone - os.stat(f"{self._procfs_path}/{self.pid}") - - # UNIX sockets - if kind in {'all', 'unix'}: - ret.extend([ - _common.pconn(*conn) - for conn in self._get_unix_sockets(self.pid) - ]) - return ret - - nt_mmap_grouped = namedtuple('mmap', 'path rss anon locked') - nt_mmap_ext = namedtuple('mmap', 'addr perms path rss anon locked') - - @wrap_exceptions - def memory_maps(self): - def toaddr(start, end): - return "{}-{}".format( - hex(start)[2:].strip('L'), hex(end)[2:].strip('L') - ) - - procfs_path = self._procfs_path - retlist = [] - try: - rawlist = cext.proc_memory_maps(self.pid, procfs_path) - except OSError as err: - if err.errno == errno.EOVERFLOW and not IS_64_BIT: - # We may get here if we attempt to query a 64bit process - # with a 32bit python. - # Error originates from read() and also tools like "cat" - # fail in the same way (!). - # Since there simply is no way to determine CPU times we - # return 0.0 as a fallback. See: - # https://github.com/giampaolo/psutil/issues/857 - return [] - else: - raise - hit_enoent = False - for item in rawlist: - addr, addrsize, perm, name, rss, anon, locked = item - addr = toaddr(addr, addrsize) - if not name.startswith('['): - try: - name = os.readlink(f"{procfs_path}/{self.pid}/path/{name}") - except OSError as err: - if err.errno == errno.ENOENT: - # sometimes the link may not be resolved by - # readlink() even if it exists (ls shows it). - # If that's the case we just return the - # unresolved link path. - # This seems an inconsistency with /proc similar - # to: http://goo.gl/55XgO - name = f"{procfs_path}/{self.pid}/path/{name}" - hit_enoent = True - else: - raise - retlist.append((addr, perm, name, rss, anon, locked)) - if hit_enoent: - self._assert_alive() - return retlist - - @wrap_exceptions - def num_fds(self): - return len(os.listdir(f"{self._procfs_path}/{self.pid}/fd")) - - @wrap_exceptions - def num_ctx_switches(self): - return _common.pctxsw( - *cext.proc_num_ctx_switches(self.pid, self._procfs_path) - ) - - @wrap_exceptions - def wait(self, timeout=None): - return _psposix.wait_pid(self.pid, timeout, self._name) diff --git a/myenv/lib/python3.12/site-packages/psutil/_psutil_linux.abi3.so b/myenv/lib/python3.12/site-packages/psutil/_psutil_linux.abi3.so deleted file mode 100755 index ef97143..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/_psutil_linux.abi3.so and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/_pswindows.py b/myenv/lib/python3.12/site-packages/psutil/_pswindows.py deleted file mode 100644 index 7d343f2..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/_pswindows.py +++ /dev/null @@ -1,1122 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Windows platform implementation.""" - -import contextlib -import enum -import functools -import os -import signal -import sys -import threading -import time -from collections import namedtuple - -from . import _common -from ._common import ENCODING -from ._common import AccessDenied -from ._common import NoSuchProcess -from ._common import TimeoutExpired -from ._common import conn_tmap -from ._common import conn_to_ntuple -from ._common import debug -from ._common import isfile_strict -from ._common import memoize -from ._common import memoize_when_activated -from ._common import parse_environ_block -from ._common import usage_percent -from ._psutil_windows import ABOVE_NORMAL_PRIORITY_CLASS -from ._psutil_windows import BELOW_NORMAL_PRIORITY_CLASS -from ._psutil_windows import HIGH_PRIORITY_CLASS -from ._psutil_windows import IDLE_PRIORITY_CLASS -from ._psutil_windows import NORMAL_PRIORITY_CLASS -from ._psutil_windows import REALTIME_PRIORITY_CLASS - -try: - from . import _psutil_windows as cext -except ImportError as err: - if ( - str(err).lower().startswith("dll load failed") - and sys.getwindowsversion()[0] < 6 - ): - # We may get here if: - # 1) we are on an old Windows version - # 2) psutil was installed via pip + wheel - # See: https://github.com/giampaolo/psutil/issues/811 - msg = "this Windows version is too old (< Windows Vista); " - msg += "psutil 3.4.2 is the latest version which supports Windows " - msg += "2000, XP and 2003 server" - raise RuntimeError(msg) from err - else: - raise - - -# process priority constants, import from __init__.py: -# http://msdn.microsoft.com/en-us/library/ms686219(v=vs.85).aspx -# fmt: off -__extra__all__ = [ - "win_service_iter", "win_service_get", - # Process priority - "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS", - "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS", "NORMAL_PRIORITY_CLASS", - "REALTIME_PRIORITY_CLASS", - # IO priority - "IOPRIO_VERYLOW", "IOPRIO_LOW", "IOPRIO_NORMAL", "IOPRIO_HIGH", - # others - "CONN_DELETE_TCB", "AF_LINK", -] -# fmt: on - - -# ===================================================================== -# --- globals -# ===================================================================== - -CONN_DELETE_TCB = "DELETE_TCB" -ERROR_PARTIAL_COPY = 299 -PYPY = '__pypy__' in sys.builtin_module_names - -AddressFamily = enum.IntEnum('AddressFamily', {'AF_LINK': -1}) -AF_LINK = AddressFamily.AF_LINK - -TCP_STATUSES = { - cext.MIB_TCP_STATE_ESTAB: _common.CONN_ESTABLISHED, - cext.MIB_TCP_STATE_SYN_SENT: _common.CONN_SYN_SENT, - cext.MIB_TCP_STATE_SYN_RCVD: _common.CONN_SYN_RECV, - cext.MIB_TCP_STATE_FIN_WAIT1: _common.CONN_FIN_WAIT1, - cext.MIB_TCP_STATE_FIN_WAIT2: _common.CONN_FIN_WAIT2, - cext.MIB_TCP_STATE_TIME_WAIT: _common.CONN_TIME_WAIT, - cext.MIB_TCP_STATE_CLOSED: _common.CONN_CLOSE, - cext.MIB_TCP_STATE_CLOSE_WAIT: _common.CONN_CLOSE_WAIT, - cext.MIB_TCP_STATE_LAST_ACK: _common.CONN_LAST_ACK, - cext.MIB_TCP_STATE_LISTEN: _common.CONN_LISTEN, - cext.MIB_TCP_STATE_CLOSING: _common.CONN_CLOSING, - cext.MIB_TCP_STATE_DELETE_TCB: CONN_DELETE_TCB, - cext.PSUTIL_CONN_NONE: _common.CONN_NONE, -} - - -class Priority(enum.IntEnum): - ABOVE_NORMAL_PRIORITY_CLASS = ABOVE_NORMAL_PRIORITY_CLASS - BELOW_NORMAL_PRIORITY_CLASS = BELOW_NORMAL_PRIORITY_CLASS - HIGH_PRIORITY_CLASS = HIGH_PRIORITY_CLASS - IDLE_PRIORITY_CLASS = IDLE_PRIORITY_CLASS - NORMAL_PRIORITY_CLASS = NORMAL_PRIORITY_CLASS - REALTIME_PRIORITY_CLASS = REALTIME_PRIORITY_CLASS - - -globals().update(Priority.__members__) - - -class IOPriority(enum.IntEnum): - IOPRIO_VERYLOW = 0 - IOPRIO_LOW = 1 - IOPRIO_NORMAL = 2 - IOPRIO_HIGH = 3 - - -globals().update(IOPriority.__members__) - -pinfo_map = dict( - num_handles=0, - ctx_switches=1, - user_time=2, - kernel_time=3, - create_time=4, - num_threads=5, - io_rcount=6, - io_wcount=7, - io_rbytes=8, - io_wbytes=9, - io_count_others=10, - io_bytes_others=11, - num_page_faults=12, - peak_wset=13, - wset=14, - peak_paged_pool=15, - paged_pool=16, - peak_non_paged_pool=17, - non_paged_pool=18, - pagefile=19, - peak_pagefile=20, - mem_private=21, -) - - -# ===================================================================== -# --- named tuples -# ===================================================================== - - -# fmt: off -# psutil.cpu_times() -scputimes = namedtuple('scputimes', - ['user', 'system', 'idle', 'interrupt', 'dpc']) -# psutil.virtual_memory() -svmem = namedtuple('svmem', ['total', 'available', 'percent', 'used', 'free']) -# psutil.Process.memory_info() -pmem = namedtuple( - 'pmem', ['rss', 'vms', - 'num_page_faults', 'peak_wset', 'wset', 'peak_paged_pool', - 'paged_pool', 'peak_nonpaged_pool', 'nonpaged_pool', - 'pagefile', 'peak_pagefile', 'private']) -# psutil.Process.memory_full_info() -pfullmem = namedtuple('pfullmem', pmem._fields + ('uss', )) -# psutil.Process.memory_maps(grouped=True) -pmmap_grouped = namedtuple('pmmap_grouped', ['path', 'rss']) -# psutil.Process.memory_maps(grouped=False) -pmmap_ext = namedtuple( - 'pmmap_ext', 'addr perms ' + ' '.join(pmmap_grouped._fields)) -# psutil.Process.io_counters() -pio = namedtuple('pio', ['read_count', 'write_count', - 'read_bytes', 'write_bytes', - 'other_count', 'other_bytes']) -# fmt: on - - -# ===================================================================== -# --- utils -# ===================================================================== - - -@functools.lru_cache(maxsize=512) -def convert_dos_path(s): - r"""Convert paths using native DOS format like: - "\Device\HarddiskVolume1\Windows\systemew\file.txt" or - "\??\C:\Windows\systemew\file.txt" - into: - "C:\Windows\systemew\file.txt". - """ - if s.startswith('\\\\'): - return s - rawdrive = '\\'.join(s.split('\\')[:3]) - if rawdrive in {"\\??\\UNC", "\\Device\\Mup"}: - rawdrive = '\\'.join(s.split('\\')[:5]) - driveletter = '\\\\' + '\\'.join(s.split('\\')[3:5]) - elif rawdrive.startswith('\\??\\'): - driveletter = s.split('\\')[2] - else: - driveletter = cext.QueryDosDevice(rawdrive) - remainder = s[len(rawdrive) :] - return os.path.join(driveletter, remainder) - - -@memoize -def getpagesize(): - return cext.getpagesize() - - -# ===================================================================== -# --- memory -# ===================================================================== - - -def virtual_memory(): - """System virtual memory as a namedtuple.""" - mem = cext.virtual_mem() - totphys, availphys, _totsys, _availsys = mem - total = totphys - avail = availphys - free = availphys - used = total - avail - percent = usage_percent((total - avail), total, round_=1) - return svmem(total, avail, percent, used, free) - - -def swap_memory(): - """Swap system memory as a (total, used, free, sin, sout) tuple.""" - mem = cext.virtual_mem() - - total_phys = mem[0] - total_system = mem[2] - - # system memory (commit total/limit) is the sum of physical and swap - # thus physical memory values need to be subtracted to get swap values - total = total_system - total_phys - # commit total is incremented immediately (decrementing free_system) - # while the corresponding free physical value is not decremented until - # pages are accessed, so we can't use free system memory for swap. - # instead, we calculate page file usage based on performance counter - if total > 0: - percentswap = cext.swap_percent() - used = int(0.01 * percentswap * total) - else: - percentswap = 0.0 - used = 0 - - free = total - used - percent = round(percentswap, 1) - return _common.sswap(total, used, free, percent, 0, 0) - - -# ===================================================================== -# --- disk -# ===================================================================== - - -disk_io_counters = cext.disk_io_counters - - -def disk_usage(path): - """Return disk usage associated with path.""" - if isinstance(path, bytes): - # XXX: do we want to use "strict"? Probably yes, in order - # to fail immediately. After all we are accepting input here... - path = path.decode(ENCODING, errors="strict") - total, used, free = cext.disk_usage(path) - percent = usage_percent(used, total, round_=1) - return _common.sdiskusage(total, used, free, percent) - - -def disk_partitions(all): - """Return disk partitions.""" - rawlist = cext.disk_partitions(all) - return [_common.sdiskpart(*x) for x in rawlist] - - -# ===================================================================== -# --- CPU -# ===================================================================== - - -def cpu_times(): - """Return system CPU times as a named tuple.""" - user, system, idle = cext.cpu_times() - # Internally, GetSystemTimes() is used, and it doesn't return - # interrupt and dpc times. cext.per_cpu_times() does, so we - # rely on it to get those only. - percpu_summed = scputimes(*[sum(n) for n in zip(*cext.per_cpu_times())]) - return scputimes( - user, system, idle, percpu_summed.interrupt, percpu_summed.dpc - ) - - -def per_cpu_times(): - """Return system per-CPU times as a list of named tuples.""" - ret = [] - for user, system, idle, interrupt, dpc in cext.per_cpu_times(): - item = scputimes(user, system, idle, interrupt, dpc) - ret.append(item) - return ret - - -def cpu_count_logical(): - """Return the number of logical CPUs in the system.""" - return cext.cpu_count_logical() - - -def cpu_count_cores(): - """Return the number of CPU cores in the system.""" - return cext.cpu_count_cores() - - -def cpu_stats(): - """Return CPU statistics.""" - ctx_switches, interrupts, _dpcs, syscalls = cext.cpu_stats() - soft_interrupts = 0 - return _common.scpustats( - ctx_switches, interrupts, soft_interrupts, syscalls - ) - - -def cpu_freq(): - """Return CPU frequency. - On Windows per-cpu frequency is not supported. - """ - curr, max_ = cext.cpu_freq() - min_ = 0.0 - return [_common.scpufreq(float(curr), min_, float(max_))] - - -_loadavg_initialized = False -_lock = threading.Lock() - - -def _getloadavg_impl(): - # Drop to 2 decimal points which is what Linux does - raw_loads = cext.getloadavg() - return tuple(round(load, 2) for load in raw_loads) - - -def getloadavg(): - """Return the number of processes in the system run queue averaged - over the last 1, 5, and 15 minutes respectively as a tuple. - """ - global _loadavg_initialized - - if _loadavg_initialized: - return _getloadavg_impl() - - with _lock: - if not _loadavg_initialized: - cext.init_loadavg_counter() - _loadavg_initialized = True - - return _getloadavg_impl() - - -# ===================================================================== -# --- network -# ===================================================================== - - -def net_connections(kind, _pid=-1): - """Return socket connections. If pid == -1 return system-wide - connections (as opposed to connections opened by one process only). - """ - families, types = conn_tmap[kind] - rawlist = cext.net_connections(_pid, families, types) - ret = set() - for item in rawlist: - fd, fam, type, laddr, raddr, status, pid = item - nt = conn_to_ntuple( - fd, - fam, - type, - laddr, - raddr, - status, - TCP_STATUSES, - pid=pid if _pid == -1 else None, - ) - ret.add(nt) - return list(ret) - - -def net_if_stats(): - """Get NIC stats (isup, duplex, speed, mtu).""" - ret = {} - rawdict = cext.net_if_stats() - for name, items in rawdict.items(): - isup, duplex, speed, mtu = items - if hasattr(_common, 'NicDuplex'): - duplex = _common.NicDuplex(duplex) - ret[name] = _common.snicstats(isup, duplex, speed, mtu, '') - return ret - - -def net_io_counters(): - """Return network I/O statistics for every network interface - installed on the system as a dict of raw tuples. - """ - return cext.net_io_counters() - - -def net_if_addrs(): - """Return the addresses associated to each NIC.""" - return cext.net_if_addrs() - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -def sensors_battery(): - """Return battery information.""" - # For constants meaning see: - # https://msdn.microsoft.com/en-us/library/windows/desktop/ - # aa373232(v=vs.85).aspx - acline_status, flags, percent, secsleft = cext.sensors_battery() - power_plugged = acline_status == 1 - no_battery = bool(flags & 128) - charging = bool(flags & 8) - - if no_battery: - return None - if power_plugged or charging: - secsleft = _common.POWER_TIME_UNLIMITED - elif secsleft == -1: - secsleft = _common.POWER_TIME_UNKNOWN - - return _common.sbattery(percent, secsleft, power_plugged) - - -# ===================================================================== -# --- other system functions -# ===================================================================== - - -_last_btime = 0 - - -def boot_time(): - """The system boot time expressed in seconds since the epoch. This - also includes the time spent during hybernate / suspend. - """ - # This dirty hack is to adjust the precision of the returned - # value which may have a 1 second fluctuation, see: - # https://github.com/giampaolo/psutil/issues/1007 - global _last_btime - ret = time.time() - cext.uptime() - if abs(ret - _last_btime) <= 1: - return _last_btime - else: - _last_btime = ret - return ret - - -def users(): - """Return currently connected users as a list of namedtuples.""" - retlist = [] - rawlist = cext.users() - for item in rawlist: - user, hostname, tstamp = item - nt = _common.suser(user, None, hostname, tstamp, None) - retlist.append(nt) - return retlist - - -# ===================================================================== -# --- Windows services -# ===================================================================== - - -def win_service_iter(): - """Yields a list of WindowsService instances.""" - for name, display_name in cext.winservice_enumerate(): - yield WindowsService(name, display_name) - - -def win_service_get(name): - """Open a Windows service and return it as a WindowsService instance.""" - service = WindowsService(name, None) - service._display_name = service._query_config()['display_name'] - return service - - -class WindowsService: # noqa: PLW1641 - """Represents an installed Windows service.""" - - def __init__(self, name, display_name): - self._name = name - self._display_name = display_name - - def __str__(self): - details = f"(name={self._name!r}, display_name={self._display_name!r})" - return f"{self.__class__.__name__}{details}" - - def __repr__(self): - return f"<{self.__str__()} at {id(self)}>" - - def __eq__(self, other): - # Test for equality with another WindosService object based - # on name. - if not isinstance(other, WindowsService): - return NotImplemented - return self._name == other._name - - def __ne__(self, other): - return not self == other - - def _query_config(self): - with self._wrap_exceptions(): - display_name, binpath, username, start_type = ( - cext.winservice_query_config(self._name) - ) - # XXX - update _self.display_name? - return dict( - display_name=display_name, - binpath=binpath, - username=username, - start_type=start_type, - ) - - def _query_status(self): - with self._wrap_exceptions(): - status, pid = cext.winservice_query_status(self._name) - if pid == 0: - pid = None - return dict(status=status, pid=pid) - - @contextlib.contextmanager - def _wrap_exceptions(self): - """Ctx manager which translates bare OSError and WindowsError - exceptions into NoSuchProcess and AccessDenied. - """ - try: - yield - except OSError as err: - name = self._name - if is_permission_err(err): - msg = ( - f"service {name!r} is not querable (not enough privileges)" - ) - raise AccessDenied(pid=None, name=name, msg=msg) from err - elif err.winerror in { - cext.ERROR_INVALID_NAME, - cext.ERROR_SERVICE_DOES_NOT_EXIST, - }: - msg = f"service {name!r} does not exist" - raise NoSuchProcess(pid=None, name=name, msg=msg) from err - else: - raise - - # config query - - def name(self): - """The service name. This string is how a service is referenced - and can be passed to win_service_get() to get a new - WindowsService instance. - """ - return self._name - - def display_name(self): - """The service display name. The value is cached when this class - is instantiated. - """ - return self._display_name - - def binpath(self): - """The fully qualified path to the service binary/exe file as - a string, including command line arguments. - """ - return self._query_config()['binpath'] - - def username(self): - """The name of the user that owns this service.""" - return self._query_config()['username'] - - def start_type(self): - """A string which can either be "automatic", "manual" or - "disabled". - """ - return self._query_config()['start_type'] - - # status query - - def pid(self): - """The process PID, if any, else None. This can be passed - to Process class to control the service's process. - """ - return self._query_status()['pid'] - - def status(self): - """Service status as a string.""" - return self._query_status()['status'] - - def description(self): - """Service long description.""" - return cext.winservice_query_descr(self.name()) - - # utils - - def as_dict(self): - """Utility method retrieving all the information above as a - dictionary. - """ - d = self._query_config() - d.update(self._query_status()) - d['name'] = self.name() - d['display_name'] = self.display_name() - d['description'] = self.description() - return d - - # actions - # XXX: the necessary C bindings for start() and stop() are - # implemented but for now I prefer not to expose them. - # I may change my mind in the future. Reasons: - # - they require Administrator privileges - # - can't implement a timeout for stop() (unless by using a thread, - # which sucks) - # - would require adding ServiceAlreadyStarted and - # ServiceAlreadyStopped exceptions, adding two new APIs. - # - we might also want to have modify(), which would basically mean - # rewriting win32serviceutil.ChangeServiceConfig, which involves a - # lot of stuff (and API constants which would pollute the API), see: - # http://pyxr.sourceforge.net/PyXR/c/python24/lib/site-packages/ - # win32/lib/win32serviceutil.py.html#0175 - # - psutil is typically about "read only" monitoring stuff; - # win_service_* APIs should only be used to retrieve a service and - # check whether it's running - - # def start(self, timeout=None): - # with self._wrap_exceptions(): - # cext.winservice_start(self.name()) - # if timeout: - # giveup_at = time.time() + timeout - # while True: - # if self.status() == "running": - # return - # else: - # if time.time() > giveup_at: - # raise TimeoutExpired(timeout) - # else: - # time.sleep(.1) - - # def stop(self): - # # Note: timeout is not implemented because it's just not - # # possible, see: - # # http://stackoverflow.com/questions/11973228/ - # with self._wrap_exceptions(): - # return cext.winservice_stop(self.name()) - - -# ===================================================================== -# --- processes -# ===================================================================== - - -pids = cext.pids -pid_exists = cext.pid_exists -ppid_map = cext.ppid_map # used internally by Process.children() - - -def is_permission_err(exc): - """Return True if this is a permission error.""" - assert isinstance(exc, OSError), exc - return isinstance(exc, PermissionError) or exc.winerror in { - cext.ERROR_ACCESS_DENIED, - cext.ERROR_PRIVILEGE_NOT_HELD, - } - - -def convert_oserror(exc, pid=None, name=None): - """Convert OSError into NoSuchProcess or AccessDenied.""" - assert isinstance(exc, OSError), exc - if is_permission_err(exc): - return AccessDenied(pid=pid, name=name) - if isinstance(exc, ProcessLookupError): - return NoSuchProcess(pid=pid, name=name) - raise exc - - -def wrap_exceptions(fun): - """Decorator which converts OSError into NoSuchProcess or AccessDenied.""" - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - try: - return fun(self, *args, **kwargs) - except OSError as err: - raise convert_oserror(err, pid=self.pid, name=self._name) from err - - return wrapper - - -def retry_error_partial_copy(fun): - """Workaround for https://github.com/giampaolo/psutil/issues/875. - See: https://stackoverflow.com/questions/4457745#4457745. - """ - - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - delay = 0.0001 - times = 33 - for _ in range(times): # retries for roughly 1 second - try: - return fun(self, *args, **kwargs) - except OSError as _: - err = _ - if err.winerror == ERROR_PARTIAL_COPY: - time.sleep(delay) - delay = min(delay * 2, 0.04) - continue - raise - msg = ( - f"{fun} retried {times} times, converted to AccessDenied as it's " - f"still returning {err}" - ) - raise AccessDenied(pid=self.pid, name=self._name, msg=msg) - - return wrapper - - -class Process: - """Wrapper class around underlying C implementation.""" - - __slots__ = ["_cache", "_name", "_ppid", "pid"] - - def __init__(self, pid): - self.pid = pid - self._name = None - self._ppid = None - - # --- oneshot() stuff - - def oneshot_enter(self): - self._proc_info.cache_activate(self) - self.exe.cache_activate(self) - - def oneshot_exit(self): - self._proc_info.cache_deactivate(self) - self.exe.cache_deactivate(self) - - @memoize_when_activated - def _proc_info(self): - """Return multiple information about this process as a - raw tuple. - """ - ret = cext.proc_info(self.pid) - assert len(ret) == len(pinfo_map) - return ret - - def name(self): - """Return process name, which on Windows is always the final - part of the executable. - """ - # This is how PIDs 0 and 4 are always represented in taskmgr - # and process-hacker. - if self.pid == 0: - return "System Idle Process" - if self.pid == 4: - return "System" - return os.path.basename(self.exe()) - - @wrap_exceptions - @memoize_when_activated - def exe(self): - if PYPY: - try: - exe = cext.proc_exe(self.pid) - except OSError as err: - # 24 = ERROR_TOO_MANY_OPEN_FILES. Not sure why this happens - # (perhaps PyPy's JIT delaying garbage collection of files?). - if err.errno == 24: - debug(f"{err!r} translated into AccessDenied") - raise AccessDenied(self.pid, self._name) from err - raise - else: - exe = cext.proc_exe(self.pid) - if exe.startswith('\\'): - return convert_dos_path(exe) - return exe # May be "Registry", "MemCompression", ... - - @wrap_exceptions - @retry_error_partial_copy - def cmdline(self): - if cext.WINVER >= cext.WINDOWS_8_1: - # PEB method detects cmdline changes but requires more - # privileges: https://github.com/giampaolo/psutil/pull/1398 - try: - return cext.proc_cmdline(self.pid, use_peb=True) - except OSError as err: - if is_permission_err(err): - return cext.proc_cmdline(self.pid, use_peb=False) - else: - raise - else: - return cext.proc_cmdline(self.pid, use_peb=True) - - @wrap_exceptions - @retry_error_partial_copy - def environ(self): - s = cext.proc_environ(self.pid) - return parse_environ_block(s) - - def ppid(self): - try: - return ppid_map()[self.pid] - except KeyError: - raise NoSuchProcess(self.pid, self._name) from None - - def _get_raw_meminfo(self): - try: - return cext.proc_memory_info(self.pid) - except OSError as err: - if is_permission_err(err): - # TODO: the C ext can probably be refactored in order - # to get this from cext.proc_info() - debug("attempting memory_info() fallback (slower)") - info = self._proc_info() - return ( - info[pinfo_map['num_page_faults']], - info[pinfo_map['peak_wset']], - info[pinfo_map['wset']], - info[pinfo_map['peak_paged_pool']], - info[pinfo_map['paged_pool']], - info[pinfo_map['peak_non_paged_pool']], - info[pinfo_map['non_paged_pool']], - info[pinfo_map['pagefile']], - info[pinfo_map['peak_pagefile']], - info[pinfo_map['mem_private']], - ) - raise - - @wrap_exceptions - def memory_info(self): - # on Windows RSS == WorkingSetSize and VSM == PagefileUsage. - # Underlying C function returns fields of PROCESS_MEMORY_COUNTERS - # struct. - t = self._get_raw_meminfo() - rss = t[2] # wset - vms = t[7] # pagefile - return pmem(*(rss, vms) + t) - - @wrap_exceptions - def memory_full_info(self): - basic_mem = self.memory_info() - uss = cext.proc_memory_uss(self.pid) - uss *= getpagesize() - return pfullmem(*basic_mem + (uss,)) - - def memory_maps(self): - try: - raw = cext.proc_memory_maps(self.pid) - except OSError as err: - # XXX - can't use wrap_exceptions decorator as we're - # returning a generator; probably needs refactoring. - raise convert_oserror(err, self.pid, self._name) from err - else: - for addr, perm, path, rss in raw: - path = convert_dos_path(path) - addr = hex(addr) - yield (addr, perm, path, rss) - - @wrap_exceptions - def kill(self): - return cext.proc_kill(self.pid) - - @wrap_exceptions - def send_signal(self, sig): - if sig == signal.SIGTERM: - cext.proc_kill(self.pid) - elif sig in {signal.CTRL_C_EVENT, signal.CTRL_BREAK_EVENT}: - os.kill(self.pid, sig) - else: - msg = ( - "only SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals " - "are supported on Windows" - ) - raise ValueError(msg) - - @wrap_exceptions - def wait(self, timeout=None): - if timeout is None: - cext_timeout = cext.INFINITE - else: - # WaitForSingleObject() expects time in milliseconds. - cext_timeout = int(timeout * 1000) - - timer = getattr(time, 'monotonic', time.time) - stop_at = timer() + timeout if timeout is not None else None - - try: - # Exit code is supposed to come from GetExitCodeProcess(). - # May also be None if OpenProcess() failed with - # ERROR_INVALID_PARAMETER, meaning PID is already gone. - exit_code = cext.proc_wait(self.pid, cext_timeout) - except cext.TimeoutExpired as err: - # WaitForSingleObject() returned WAIT_TIMEOUT. Just raise. - raise TimeoutExpired(timeout, self.pid, self._name) from err - except cext.TimeoutAbandoned: - # WaitForSingleObject() returned WAIT_ABANDONED, see: - # https://github.com/giampaolo/psutil/issues/1224 - # We'll just rely on the internal polling and return None - # when the PID disappears. Subprocess module does the same - # (return None): - # https://github.com/python/cpython/blob/ - # be50a7b627d0aa37e08fa8e2d5568891f19903ce/ - # Lib/subprocess.py#L1193-L1194 - exit_code = None - - # At this point WaitForSingleObject() returned WAIT_OBJECT_0, - # meaning the process is gone. Stupidly there are cases where - # its PID may still stick around so we do a further internal - # polling. - delay = 0.0001 - while True: - if not pid_exists(self.pid): - return exit_code - if stop_at and timer() >= stop_at: - raise TimeoutExpired(timeout, pid=self.pid, name=self._name) - time.sleep(delay) - delay = min(delay * 2, 0.04) # incremental delay - - @wrap_exceptions - def username(self): - if self.pid in {0, 4}: - return 'NT AUTHORITY\\SYSTEM' - domain, user = cext.proc_username(self.pid) - return f"{domain}\\{user}" - - @wrap_exceptions - def create_time(self, fast_only=False): - # Note: proc_times() not put under oneshot() 'cause create_time() - # is already cached by the main Process class. - try: - _user, _system, created = cext.proc_times(self.pid) - return created - except OSError as err: - if is_permission_err(err): - if fast_only: - raise - debug("attempting create_time() fallback (slower)") - return self._proc_info()[pinfo_map['create_time']] - raise - - @wrap_exceptions - def num_threads(self): - return self._proc_info()[pinfo_map['num_threads']] - - @wrap_exceptions - def threads(self): - rawlist = cext.proc_threads(self.pid) - retlist = [] - for thread_id, utime, stime in rawlist: - ntuple = _common.pthread(thread_id, utime, stime) - retlist.append(ntuple) - return retlist - - @wrap_exceptions - def cpu_times(self): - try: - user, system, _created = cext.proc_times(self.pid) - except OSError as err: - if not is_permission_err(err): - raise - debug("attempting cpu_times() fallback (slower)") - info = self._proc_info() - user = info[pinfo_map['user_time']] - system = info[pinfo_map['kernel_time']] - # Children user/system times are not retrievable (set to 0). - return _common.pcputimes(user, system, 0.0, 0.0) - - @wrap_exceptions - def suspend(self): - cext.proc_suspend_or_resume(self.pid, True) - - @wrap_exceptions - def resume(self): - cext.proc_suspend_or_resume(self.pid, False) - - @wrap_exceptions - @retry_error_partial_copy - def cwd(self): - if self.pid in {0, 4}: - raise AccessDenied(self.pid, self._name) - # return a normalized pathname since the native C function appends - # "\\" at the and of the path - path = cext.proc_cwd(self.pid) - return os.path.normpath(path) - - @wrap_exceptions - def open_files(self): - if self.pid in {0, 4}: - return [] - ret = set() - # Filenames come in in native format like: - # "\Device\HarddiskVolume1\Windows\systemew\file.txt" - # Convert the first part in the corresponding drive letter - # (e.g. "C:\") by using Windows's QueryDosDevice() - raw_file_names = cext.proc_open_files(self.pid) - for file in raw_file_names: - file = convert_dos_path(file) - if isfile_strict(file): - ntuple = _common.popenfile(file, -1) - ret.add(ntuple) - return list(ret) - - @wrap_exceptions - def net_connections(self, kind='inet'): - return net_connections(kind, _pid=self.pid) - - @wrap_exceptions - def nice_get(self): - value = cext.proc_priority_get(self.pid) - value = Priority(value) - return value - - @wrap_exceptions - def nice_set(self, value): - return cext.proc_priority_set(self.pid, value) - - @wrap_exceptions - def ionice_get(self): - ret = cext.proc_io_priority_get(self.pid) - ret = IOPriority(ret) - return ret - - @wrap_exceptions - def ionice_set(self, ioclass, value): - if value: - msg = "value argument not accepted on Windows" - raise TypeError(msg) - if ioclass not in { - IOPriority.IOPRIO_VERYLOW, - IOPriority.IOPRIO_LOW, - IOPriority.IOPRIO_NORMAL, - IOPriority.IOPRIO_HIGH, - }: - msg = f"{ioclass} is not a valid priority" - raise ValueError(msg) - cext.proc_io_priority_set(self.pid, ioclass) - - @wrap_exceptions - def io_counters(self): - try: - ret = cext.proc_io_counters(self.pid) - except OSError as err: - if not is_permission_err(err): - raise - debug("attempting io_counters() fallback (slower)") - info = self._proc_info() - ret = ( - info[pinfo_map['io_rcount']], - info[pinfo_map['io_wcount']], - info[pinfo_map['io_rbytes']], - info[pinfo_map['io_wbytes']], - info[pinfo_map['io_count_others']], - info[pinfo_map['io_bytes_others']], - ) - return pio(*ret) - - @wrap_exceptions - def status(self): - suspended = cext.proc_is_suspended(self.pid) - if suspended: - return _common.STATUS_STOPPED - else: - return _common.STATUS_RUNNING - - @wrap_exceptions - def cpu_affinity_get(self): - def from_bitmask(x): - return [i for i in range(64) if (1 << i) & x] - - bitmask = cext.proc_cpu_affinity_get(self.pid) - return from_bitmask(bitmask) - - @wrap_exceptions - def cpu_affinity_set(self, value): - def to_bitmask(ls): - if not ls: - msg = f"invalid argument {ls!r}" - raise ValueError(msg) - out = 0 - for b in ls: - out |= 2**b - return out - - # SetProcessAffinityMask() states that ERROR_INVALID_PARAMETER - # is returned for an invalid CPU but this seems not to be true, - # therefore we check CPUs validy beforehand. - allcpus = list(range(len(per_cpu_times()))) - for cpu in value: - if cpu not in allcpus: - if not isinstance(cpu, int): - msg = f"invalid CPU {cpu!r}; an integer is required" - raise TypeError(msg) - msg = f"invalid CPU {cpu!r}" - raise ValueError(msg) - - bitmask = to_bitmask(value) - cext.proc_cpu_affinity_set(self.pid, bitmask) - - @wrap_exceptions - def num_handles(self): - try: - return cext.proc_num_handles(self.pid) - except OSError as err: - if is_permission_err(err): - debug("attempting num_handles() fallback (slower)") - return self._proc_info()[pinfo_map['num_handles']] - raise - - @wrap_exceptions - def num_ctx_switches(self): - ctx_switches = self._proc_info()[pinfo_map['ctx_switches']] - # only voluntary ctx switches are supported - return _common.pctxsw(ctx_switches, 0) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__init__.py b/myenv/lib/python3.12/site-packages/psutil/tests/__init__.py deleted file mode 100644 index 0cade49..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/__init__.py +++ /dev/null @@ -1,1979 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Test utilities.""" - -import atexit -import contextlib -import ctypes -import enum -import errno -import functools -import gc -import importlib -import ipaddress -import os -import platform -import random -import re -import select -import shlex -import shutil -import signal -import socket -import stat -import subprocess -import sys -import tempfile -import textwrap -import threading -import time -import traceback -import unittest -import warnings -from socket import AF_INET -from socket import AF_INET6 -from socket import SOCK_STREAM - -try: - import pytest -except ImportError: - pytest = None - -import psutil -from psutil import AIX -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil import WINDOWS -from psutil._common import bytes2human -from psutil._common import debug -from psutil._common import memoize -from psutil._common import print_color -from psutil._common import supports_ipv6 - -if POSIX: - from psutil._psposix import wait_pid - - -# fmt: off -__all__ = [ - # constants - 'DEVNULL', 'GLOBAL_TIMEOUT', 'TOLERANCE_SYS_MEM', 'NO_RETRIES', - 'PYPY', 'PYTHON_EXE', 'PYTHON_EXE_ENV', 'ROOT_DIR', 'SCRIPTS_DIR', - 'TESTFN_PREFIX', 'UNICODE_SUFFIX', 'INVALID_UNICODE_SUFFIX', - 'CI_TESTING', 'VALID_PROC_STATUSES', 'TOLERANCE_DISK_USAGE', 'IS_64BIT', - "HAS_CPU_AFFINITY", "HAS_CPU_FREQ", "HAS_ENVIRON", "HAS_PROC_IO_COUNTERS", - "HAS_IONICE", "HAS_MEMORY_MAPS", "HAS_PROC_CPU_NUM", "HAS_RLIMIT", - "HAS_SENSORS_BATTERY", "HAS_BATTERY", "HAS_SENSORS_FANS", - "HAS_SENSORS_TEMPERATURES", "HAS_NET_CONNECTIONS_UNIX", "MACOS_11PLUS", - "MACOS_12PLUS", "COVERAGE", 'AARCH64', "PYTEST_PARALLEL", - # subprocesses - 'pyrun', 'terminate', 'reap_children', 'spawn_subproc', 'spawn_zombie', - 'spawn_children_pair', - # threads - 'ThreadTask', - # test utils - 'unittest', 'skip_on_access_denied', 'skip_on_not_implemented', - 'retry_on_failure', 'TestMemoryLeak', 'PsutilTestCase', - 'process_namespace', 'system_namespace', - 'is_win_secure_system_proc', 'fake_pytest', - # fs utils - 'chdir', 'safe_rmpath', 'create_py_exe', 'create_c_exe', 'get_testfn', - # os - 'get_winver', 'kernel_version', - # sync primitives - 'call_until', 'wait_for_pid', 'wait_for_file', - # network - 'check_net_address', 'filter_proc_net_connections', - 'get_free_port', 'bind_socket', 'bind_unix_socket', 'tcp_socketpair', - 'unix_socketpair', 'create_sockets', - # compat - 'reload_module', 'import_module_by_path', - # others - 'warn', 'copyload_shared_lib', 'is_namedtuple', -] -# fmt: on - - -# =================================================================== -# --- constants -# =================================================================== - -# --- platforms - -PYPY = '__pypy__' in sys.builtin_module_names -# whether we're running this test suite on a Continuous Integration service -GITHUB_ACTIONS = 'GITHUB_ACTIONS' in os.environ or 'CIBUILDWHEEL' in os.environ -CI_TESTING = GITHUB_ACTIONS -COVERAGE = 'COVERAGE_RUN' in os.environ -PYTEST_PARALLEL = "PYTEST_XDIST_WORKER" in os.environ # `make test-parallel` -# are we a 64 bit process? -IS_64BIT = sys.maxsize > 2**32 -# apparently they're the same -AARCH64 = platform.machine().lower() in {"aarch64", "arm64"} -RISCV64 = platform.machine() == "riscv64" - - -@memoize -def macos_version(): - version_str = platform.mac_ver()[0] - version = tuple(map(int, version_str.split(".")[:2])) - if version == (10, 16): - # When built against an older macOS SDK, Python will report - # macOS 10.16 instead of the real version. - version_str = subprocess.check_output( - [ - sys.executable, - "-sS", - "-c", - "import platform; print(platform.mac_ver()[0])", - ], - env={"SYSTEM_VERSION_COMPAT": "0"}, - universal_newlines=True, - ) - version = tuple(map(int, version_str.split(".")[:2])) - return version - - -if MACOS: - MACOS_11PLUS = macos_version() > (10, 15) - MACOS_12PLUS = macos_version() >= (12, 0) -else: - MACOS_11PLUS = False - MACOS_12PLUS = False - - -# --- configurable defaults - -# how many times retry_on_failure() decorator will retry -NO_RETRIES = 10 -# bytes tolerance for system-wide related tests -TOLERANCE_SYS_MEM = 5 * 1024 * 1024 # 5MB -TOLERANCE_DISK_USAGE = 10 * 1024 * 1024 # 10MB -# the timeout used in functions which have to wait -GLOBAL_TIMEOUT = 5 -# be more tolerant if we're on CI in order to avoid false positives -if CI_TESTING: - NO_RETRIES *= 3 - GLOBAL_TIMEOUT *= 3 - TOLERANCE_SYS_MEM *= 4 - TOLERANCE_DISK_USAGE *= 3 - -# --- file names - -# Disambiguate TESTFN with PID for parallel testing. -TESTFN_PREFIX = f"@psutil-{os.getpid()}-" -UNICODE_SUFFIX = "-ƒőő" -# An invalid unicode string. -INVALID_UNICODE_SUFFIX = b"f\xc0\x80".decode('utf8', 'surrogateescape') -ASCII_FS = sys.getfilesystemencoding().lower() in {"ascii", "us-ascii"} - -# --- paths - -ROOT_DIR = os.environ.get("PSUTIL_ROOT_DIR") or os.path.realpath( - os.path.join(os.path.dirname(__file__), "..", "..") -) -SCRIPTS_DIR = os.path.join(ROOT_DIR, 'scripts') -HERE = os.path.realpath(os.path.dirname(__file__)) - -# --- support - -HAS_CPU_AFFINITY = hasattr(psutil.Process, "cpu_affinity") -HAS_ENVIRON = hasattr(psutil.Process, "environ") -HAS_GETLOADAVG = hasattr(psutil, "getloadavg") -HAS_IONICE = hasattr(psutil.Process, "ionice") -HAS_MEMORY_MAPS = hasattr(psutil.Process, "memory_maps") -HAS_NET_CONNECTIONS_UNIX = POSIX and not SUNOS -HAS_NET_IO_COUNTERS = hasattr(psutil, "net_io_counters") -HAS_PROC_CPU_NUM = hasattr(psutil.Process, "cpu_num") -HAS_PROC_IO_COUNTERS = hasattr(psutil.Process, "io_counters") -HAS_RLIMIT = hasattr(psutil.Process, "rlimit") -HAS_SENSORS_BATTERY = hasattr(psutil, "sensors_battery") -HAS_SENSORS_FANS = hasattr(psutil, "sensors_fans") -HAS_SENSORS_TEMPERATURES = hasattr(psutil, "sensors_temperatures") -HAS_THREADS = hasattr(psutil.Process, "threads") -SKIP_SYSCONS = (MACOS or AIX) and os.getuid() != 0 - -try: - HAS_BATTERY = HAS_SENSORS_BATTERY and bool(psutil.sensors_battery()) -except Exception: # noqa: BLE001 - atexit.register(functools.partial(print, traceback.format_exc())) - HAS_BATTERY = False -try: - HAS_CPU_FREQ = hasattr(psutil, "cpu_freq") and bool(psutil.cpu_freq()) -except Exception: # noqa: BLE001 - atexit.register(functools.partial(print, traceback.format_exc())) - HAS_CPU_FREQ = False - - -# --- misc - - -def _get_py_exe(): - def attempt(exe): - try: - subprocess.check_call( - [exe, "-V"], stdout=subprocess.PIPE, stderr=subprocess.PIPE - ) - except subprocess.CalledProcessError: - return None - else: - return exe - - env = os.environ.copy() - - # On Windows, starting with python 3.7, virtual environments use a - # venv launcher startup process. This does not play well when - # counting spawned processes, or when relying on the PID of the - # spawned process to do some checks, e.g. connections check per PID. - # Let's use the base python in this case. - base = getattr(sys, "_base_executable", None) - if WINDOWS and sys.version_info >= (3, 7) and base is not None: - # We need to set __PYVENV_LAUNCHER__ to sys.executable for the - # base python executable to know about the environment. - env["__PYVENV_LAUNCHER__"] = sys.executable - return base, env - elif GITHUB_ACTIONS: - return sys.executable, env - elif MACOS: - exe = ( - attempt(sys.executable) - or attempt(os.path.realpath(sys.executable)) - or attempt( - shutil.which("python{}.{}".format(*sys.version_info[:2])) - ) - or attempt(psutil.Process().exe()) - ) - if not exe: - raise ValueError("can't find python exe real abspath") - return exe, env - else: - exe = os.path.realpath(sys.executable) - assert os.path.exists(exe), exe - return exe, env - - -PYTHON_EXE, PYTHON_EXE_ENV = _get_py_exe() -DEVNULL = open(os.devnull, 'r+') # noqa: SIM115 -atexit.register(DEVNULL.close) - -VALID_PROC_STATUSES = [ - getattr(psutil, x) for x in dir(psutil) if x.startswith('STATUS_') -] -AF_UNIX = getattr(socket, "AF_UNIX", object()) - -_subprocesses_started = set() -_pids_started = set() - - -# =================================================================== -# --- fake pytest -# =================================================================== - - -class fake_pytest: - """A class that mimics some basic pytest APIs. This is meant for - when unit tests are run in production, where pytest may not be - installed. Still, the user can test psutil installation via: - - $ python3 -m psutil.tests - """ - - @staticmethod - def _warn_on_exit(): - def _warn_on_exit(): - warnings.warn( - "Fake pytest module was used. Test results may be inaccurate.", - UserWarning, - stacklevel=1, - ) - - atexit.register(_warn_on_exit) - - @staticmethod - def main(*args, **kw): # noqa: ARG004 - """Mimics pytest.main(). It has the same effect as running - `python3 -m unittest -v` from the project root directory. - """ - suite = unittest.TestLoader().discover(HERE) - unittest.TextTestRunner(verbosity=2).run(suite) - return suite - - @staticmethod - def raises(exc, match=None): - """Mimics `pytest.raises`.""" - - class ExceptionInfo: - _exc = None - - @property - def value(self): - return self._exc - - @contextlib.contextmanager - def context(exc, match=None): - einfo = ExceptionInfo() - try: - yield einfo - except exc as err: - if match and not re.search(match, str(err)): - msg = f'"{match}" does not match "{err}"' - raise AssertionError(msg) - einfo._exc = err - else: - raise AssertionError(f"{exc!r} not raised") - - return context(exc, match=match) - - @staticmethod - def warns(warning, match=None): - """Mimics `pytest.warns`.""" - if match: - return unittest.TestCase().assertWarnsRegex(warning, match) - return unittest.TestCase().assertWarns(warning) - - @staticmethod - def skip(reason=""): - """Mimics `unittest.SkipTest`.""" - raise unittest.SkipTest(reason) - - @staticmethod - def fail(reason=""): - """Mimics `pytest.fail`.""" - return unittest.TestCase().fail(reason) - - class mark: - - @staticmethod - def skipif(condition, reason=""): - """Mimics `@pytest.mark.skipif` decorator.""" - return unittest.skipIf(condition, reason) - - class xdist_group: - """Mimics `@pytest.mark.xdist_group` decorator (no-op).""" - - def __init__(self, name=None): - pass - - def __call__(self, cls_or_meth): - return cls_or_meth - - -# to make pytest.fail() exception catchable -fake_pytest.fail.Exception = AssertionError - - -if pytest is None: - pytest = fake_pytest - # monkey patch future `import pytest` statements - sys.modules["pytest"] = fake_pytest - fake_pytest._warn_on_exit() - - -# =================================================================== -# --- threads -# =================================================================== - - -class ThreadTask(threading.Thread): - """A thread task which does nothing expect staying alive.""" - - def __init__(self): - super().__init__() - self._running = False - self._interval = 0.001 - self._flag = threading.Event() - - def __repr__(self): - name = self.__class__.__name__ - return f"<{name} running={self._running} at {id(self):#x}>" - - def __enter__(self): - self.start() - return self - - def __exit__(self, *args, **kwargs): - self.stop() - - def start(self): - """Start thread and keep it running until an explicit - stop() request. Polls for shutdown every 'timeout' seconds. - """ - if self._running: - raise ValueError("already started") - threading.Thread.start(self) - self._flag.wait() - - def run(self): - self._running = True - self._flag.set() - while self._running: - time.sleep(self._interval) - - def stop(self): - """Stop thread execution and and waits until it is stopped.""" - if not self._running: - raise ValueError("already stopped") - self._running = False - self.join() - - -# =================================================================== -# --- subprocesses -# =================================================================== - - -def _reap_children_on_err(fun): - @functools.wraps(fun) - def wrapper(*args, **kwargs): - try: - return fun(*args, **kwargs) - except Exception: - reap_children() - raise - - return wrapper - - -@_reap_children_on_err -def spawn_subproc(cmd=None, **kwds): - """Create a python subprocess which does nothing for some secs and - return it as a subprocess.Popen instance. - If "cmd" is specified that is used instead of python. - By default stdin and stdout are redirected to /dev/null. - It also attempts to make sure the process is in a reasonably - initialized state. - The process is registered for cleanup on reap_children(). - """ - kwds.setdefault("stdin", DEVNULL) - kwds.setdefault("stdout", DEVNULL) - kwds.setdefault("cwd", os.getcwd()) - kwds.setdefault("env", PYTHON_EXE_ENV) - if WINDOWS: - # Prevents the subprocess to open error dialogs. This will also - # cause stderr to be suppressed, which is suboptimal in order - # to debug broken tests. - CREATE_NO_WINDOW = 0x8000000 - kwds.setdefault("creationflags", CREATE_NO_WINDOW) - if cmd is None: - testfn = get_testfn(dir=os.getcwd()) - try: - safe_rmpath(testfn) - pyline = ( - "import time;" - f"open(r'{testfn}', 'w').close();" - "[time.sleep(0.1) for x in range(100)];" # 10 secs - ) - cmd = [PYTHON_EXE, "-c", pyline] - sproc = subprocess.Popen(cmd, **kwds) - _subprocesses_started.add(sproc) - wait_for_file(testfn, delete=True, empty=True) - finally: - safe_rmpath(testfn) - else: - sproc = subprocess.Popen(cmd, **kwds) - _subprocesses_started.add(sproc) - wait_for_pid(sproc.pid) - return sproc - - -@_reap_children_on_err -def spawn_children_pair(): - """Create a subprocess which creates another one as in: - A (us) -> B (child) -> C (grandchild). - Return a (child, grandchild) tuple. - The 2 processes are fully initialized and will live for 60 secs - and are registered for cleanup on reap_children(). - """ - tfile = None - testfn = get_testfn(dir=os.getcwd()) - try: - s = textwrap.dedent(f"""\ - import subprocess, os, sys, time - s = "import os, time;" - s += "f = open('{os.path.basename(testfn)}', 'w');" - s += "f.write(str(os.getpid()));" - s += "f.close();" - s += "[time.sleep(0.1) for x in range(100 * 6)];" - p = subprocess.Popen([r'{PYTHON_EXE}', '-c', s]) - p.wait() - """) - # On Windows if we create a subprocess with CREATE_NO_WINDOW flag - # set (which is the default) a "conhost.exe" extra process will be - # spawned as a child. We don't want that. - if WINDOWS: - subp, tfile = pyrun(s, creationflags=0) - else: - subp, tfile = pyrun(s) - child = psutil.Process(subp.pid) - grandchild_pid = int(wait_for_file(testfn, delete=True, empty=False)) - _pids_started.add(grandchild_pid) - grandchild = psutil.Process(grandchild_pid) - return (child, grandchild) - finally: - safe_rmpath(testfn) - if tfile is not None: - safe_rmpath(tfile) - - -def spawn_zombie(): - """Create a zombie process and return a (parent, zombie) process tuple. - In order to kill the zombie parent must be terminate()d first, then - zombie must be wait()ed on. - """ - assert psutil.POSIX - unix_file = get_testfn() - src = textwrap.dedent(f"""\ - import os, sys, time, socket, contextlib - child_pid = os.fork() - if child_pid > 0: - time.sleep(3000) - else: - # this is the zombie process - with socket.socket(socket.AF_UNIX) as s: - s.connect('{unix_file}') - pid = bytes(str(os.getpid()), 'ascii') - s.sendall(pid) - """) - tfile = None - sock = bind_unix_socket(unix_file) - try: - sock.settimeout(GLOBAL_TIMEOUT) - parent, tfile = pyrun(src) - conn, _ = sock.accept() - try: - select.select([conn.fileno()], [], [], GLOBAL_TIMEOUT) - zpid = int(conn.recv(1024)) - _pids_started.add(zpid) - zombie = psutil.Process(zpid) - call_until(lambda: zombie.status() == psutil.STATUS_ZOMBIE) - return (parent, zombie) - finally: - conn.close() - finally: - sock.close() - safe_rmpath(unix_file) - if tfile is not None: - safe_rmpath(tfile) - - -@_reap_children_on_err -def pyrun(src, **kwds): - """Run python 'src' code string in a separate interpreter. - Returns a subprocess.Popen instance and the test file where the source - code was written. - """ - kwds.setdefault("stdout", None) - kwds.setdefault("stderr", None) - srcfile = get_testfn() - try: - with open(srcfile, "w") as f: - f.write(src) - subp = spawn_subproc([PYTHON_EXE, f.name], **kwds) - wait_for_pid(subp.pid) - return (subp, srcfile) - except Exception: - safe_rmpath(srcfile) - raise - - -@_reap_children_on_err -def sh(cmd, **kwds): - """Run cmd in a subprocess and return its output. - raises RuntimeError on error. - """ - # Prevents subprocess to open error dialogs in case of error. - flags = 0x8000000 if WINDOWS else 0 - kwds.setdefault("stdout", subprocess.PIPE) - kwds.setdefault("stderr", subprocess.PIPE) - kwds.setdefault("universal_newlines", True) - kwds.setdefault("creationflags", flags) - if isinstance(cmd, str): - cmd = shlex.split(cmd) - p = subprocess.Popen(cmd, **kwds) - _subprocesses_started.add(p) - stdout, stderr = p.communicate(timeout=GLOBAL_TIMEOUT) - if p.returncode != 0: - raise RuntimeError(stdout + stderr) - if stderr: - warn(stderr) - if stdout.endswith('\n'): - stdout = stdout[:-1] - return stdout - - -def terminate(proc_or_pid, sig=signal.SIGTERM, wait_timeout=GLOBAL_TIMEOUT): - """Terminate a process and wait() for it. - Process can be a PID or an instance of psutil.Process(), - subprocess.Popen() or psutil.Popen(). - If it's a subprocess.Popen() or psutil.Popen() instance also closes - its stdin / stdout / stderr fds. - PID is wait()ed even if the process is already gone (kills zombies). - Does nothing if the process does not exist. - Return process exit status. - """ - - def wait(proc, timeout): - proc.wait(timeout) - if WINDOWS and isinstance(proc, subprocess.Popen): - # Otherwise PID may still hang around. - try: - return psutil.Process(proc.pid).wait(timeout) - except psutil.NoSuchProcess: - pass - - def sendsig(proc, sig): - # XXX: otherwise the build hangs for some reason. - if MACOS and GITHUB_ACTIONS: - sig = signal.SIGKILL - # If the process received SIGSTOP, SIGCONT is necessary first, - # otherwise SIGTERM won't work. - if POSIX and sig != signal.SIGKILL: - proc.send_signal(signal.SIGCONT) - proc.send_signal(sig) - - def term_subprocess_proc(proc, timeout): - try: - sendsig(proc, sig) - except ProcessLookupError: - pass - except OSError as err: - if WINDOWS and err.winerror == 6: # "invalid handle" - pass - raise - return wait(proc, timeout) - - def term_psutil_proc(proc, timeout): - try: - sendsig(proc, sig) - except psutil.NoSuchProcess: - pass - return wait(proc, timeout) - - def term_pid(pid, timeout): - try: - proc = psutil.Process(pid) - except psutil.NoSuchProcess: - # Needed to kill zombies. - if POSIX: - return wait_pid(pid, timeout) - else: - return term_psutil_proc(proc, timeout) - - def flush_popen(proc): - if proc.stdout: - proc.stdout.close() - if proc.stderr: - proc.stderr.close() - # Flushing a BufferedWriter may raise an error. - if proc.stdin: - proc.stdin.close() - - p = proc_or_pid - try: - if isinstance(p, int): - return term_pid(p, wait_timeout) - elif isinstance(p, (psutil.Process, psutil.Popen)): - return term_psutil_proc(p, wait_timeout) - elif isinstance(p, subprocess.Popen): - return term_subprocess_proc(p, wait_timeout) - else: - raise TypeError(f"wrong type {p!r}") - finally: - if isinstance(p, (subprocess.Popen, psutil.Popen)): - flush_popen(p) - pid = p if isinstance(p, int) else p.pid - assert not psutil.pid_exists(pid), pid - - -def reap_children(recursive=False): - """Terminate and wait() any subprocess started by this test suite - and any children currently running, ensuring that no processes stick - around to hog resources. - If recursive is True it also tries to terminate and wait() - all grandchildren started by this process. - """ - # Get the children here before terminating them, as in case of - # recursive=True we don't want to lose the intermediate reference - # pointing to the grandchildren. - children = psutil.Process().children(recursive=recursive) - - # Terminate subprocess.Popen. - while _subprocesses_started: - subp = _subprocesses_started.pop() - terminate(subp) - - # Collect started pids. - while _pids_started: - pid = _pids_started.pop() - terminate(pid) - - # Terminate children. - if children: - for p in children: - terminate(p, wait_timeout=None) - _, alive = psutil.wait_procs(children, timeout=GLOBAL_TIMEOUT) - for p in alive: - warn(f"couldn't terminate process {p!r}; attempting kill()") - terminate(p, sig=signal.SIGKILL) - - -# =================================================================== -# --- OS -# =================================================================== - - -def kernel_version(): - """Return a tuple such as (2, 6, 36).""" - if not POSIX: - raise NotImplementedError("not POSIX") - s = "" - uname = os.uname()[2] - for c in uname: - if c.isdigit() or c == '.': - s += c - else: - break - if not s: - raise ValueError(f"can't parse {uname!r}") - minor = 0 - micro = 0 - nums = s.split('.') - major = int(nums[0]) - if len(nums) >= 2: - minor = int(nums[1]) - if len(nums) >= 3: - micro = int(nums[2]) - return (major, minor, micro) - - -def get_winver(): - if not WINDOWS: - raise NotImplementedError("not WINDOWS") - wv = sys.getwindowsversion() - sp = wv.service_pack_major or 0 - return (wv[0], wv[1], sp) - - -# =================================================================== -# --- sync primitives -# =================================================================== - - -class retry: - """A retry decorator.""" - - def __init__( - self, - exception=Exception, - timeout=None, - retries=None, - interval=0.001, - logfun=None, - ): - if timeout and retries: - raise ValueError("timeout and retries args are mutually exclusive") - self.exception = exception - self.timeout = timeout - self.retries = retries - self.interval = interval - self.logfun = logfun - - def __iter__(self): - if self.timeout: - stop_at = time.time() + self.timeout - while time.time() < stop_at: - yield - elif self.retries: - for _ in range(self.retries): - yield - else: - while True: - yield - - def sleep(self): - if self.interval is not None: - time.sleep(self.interval) - - def __call__(self, fun): - @functools.wraps(fun) - def wrapper(*args, **kwargs): - exc = None - for _ in self: - try: - return fun(*args, **kwargs) - except self.exception as _: - exc = _ - if self.logfun is not None: - self.logfun(exc) - self.sleep() - continue - - raise exc - - # This way the user of the decorated function can change config - # parameters. - wrapper.decorator = self - return wrapper - - -@retry( - exception=psutil.NoSuchProcess, - logfun=None, - timeout=GLOBAL_TIMEOUT, - interval=0.001, -) -def wait_for_pid(pid): - """Wait for pid to show up in the process list then return. - Used in the test suite to give time the sub process to initialize. - """ - if pid not in psutil.pids(): - raise psutil.NoSuchProcess(pid) - psutil.Process(pid) - - -@retry( - exception=(FileNotFoundError, AssertionError), - logfun=None, - timeout=GLOBAL_TIMEOUT, - interval=0.001, -) -def wait_for_file(fname, delete=True, empty=False): - """Wait for a file to be written on disk with some content.""" - with open(fname, "rb") as f: - data = f.read() - if not empty: - assert data - if delete: - safe_rmpath(fname) - return data - - -@retry( - exception=(AssertionError, pytest.fail.Exception), - logfun=None, - timeout=GLOBAL_TIMEOUT, - interval=0.001, -) -def call_until(fun): - """Keep calling function until it evaluates to True.""" - ret = fun() - assert ret - return ret - - -# =================================================================== -# --- fs -# =================================================================== - - -def safe_rmpath(path): - """Convenience function for removing temporary test files or dirs.""" - - def retry_fun(fun): - # On Windows it could happen that the file or directory has - # open handles or references preventing the delete operation - # to succeed immediately, so we retry for a while. See: - # https://bugs.python.org/issue33240 - stop_at = time.time() + GLOBAL_TIMEOUT - while time.time() < stop_at: - try: - return fun() - except FileNotFoundError: - pass - except OSError as _: - err = _ - warn(f"ignoring {err}") - time.sleep(0.01) - raise err - - try: - st = os.stat(path) - if stat.S_ISDIR(st.st_mode): - fun = functools.partial(shutil.rmtree, path) - else: - fun = functools.partial(os.remove, path) - if POSIX: - fun() - else: - retry_fun(fun) - except FileNotFoundError: - pass - - -def safe_mkdir(dir): - """Convenience function for creating a directory.""" - try: - os.mkdir(dir) - except FileExistsError: - pass - - -@contextlib.contextmanager -def chdir(dirname): - """Context manager which temporarily changes the current directory.""" - curdir = os.getcwd() - try: - os.chdir(dirname) - yield - finally: - os.chdir(curdir) - - -def create_py_exe(path): - """Create a Python executable file in the given location.""" - assert not os.path.exists(path), path - atexit.register(safe_rmpath, path) - shutil.copyfile(PYTHON_EXE, path) - if POSIX: - st = os.stat(path) - os.chmod(path, st.st_mode | stat.S_IEXEC) - return path - - -def create_c_exe(path, c_code=None): - """Create a compiled C executable in the given location.""" - assert not os.path.exists(path), path - if not shutil.which("gcc"): - return pytest.skip("gcc is not installed") - if c_code is None: - c_code = textwrap.dedent(""" - #include - int main() { - pause(); - return 1; - } - """) - else: - assert isinstance(c_code, str), c_code - - atexit.register(safe_rmpath, path) - with open(get_testfn(suffix='.c'), "w") as f: - f.write(c_code) - try: - subprocess.check_call(["gcc", f.name, "-o", path]) - finally: - safe_rmpath(f.name) - return path - - -def get_testfn(suffix="", dir=None): - """Return an absolute pathname of a file or dir that did not - exist at the time this call is made. Also schedule it for safe - deletion at interpreter exit. It's technically racy but probably - not really due to the time variant. - """ - while True: - name = tempfile.mktemp(prefix=TESTFN_PREFIX, suffix=suffix, dir=dir) - if not os.path.exists(name): # also include dirs - path = os.path.realpath(name) # needed for OSX - atexit.register(safe_rmpath, path) - return path - - -# =================================================================== -# --- testing -# =================================================================== - - -class PsutilTestCase(unittest.TestCase): - """Test class providing auto-cleanup wrappers on top of process - test utilities. All test classes should derive from this one, even - if we use pytest. - """ - - # Print a full path representation of the single unit test being - # run, similar to pytest output. Used only when running tests with - # the unittest runner. - def __str__(self): - fqmod = self.__class__.__module__ - if not fqmod.startswith('psutil.'): - fqmod = 'psutil.tests.' + fqmod - return "{}.{}.{}".format( - fqmod, - self.__class__.__name__, - self._testMethodName, - ) - - def get_testfn(self, suffix="", dir=None): - fname = get_testfn(suffix=suffix, dir=dir) - self.addCleanup(safe_rmpath, fname) - return fname - - def spawn_subproc(self, *args, **kwds): - sproc = spawn_subproc(*args, **kwds) - self.addCleanup(terminate, sproc) - return sproc - - def spawn_psproc(self, *args, **kwargs): - sproc = self.spawn_subproc(*args, **kwargs) - try: - return psutil.Process(sproc.pid) - except psutil.NoSuchProcess: - self.assert_pid_gone(sproc.pid) - raise - - def spawn_children_pair(self): - child1, child2 = spawn_children_pair() - self.addCleanup(terminate, child2) - self.addCleanup(terminate, child1) # executed first - return (child1, child2) - - def spawn_zombie(self): - parent, zombie = spawn_zombie() - self.addCleanup(terminate, zombie) - self.addCleanup(terminate, parent) # executed first - return (parent, zombie) - - def pyrun(self, *args, **kwds): - sproc, srcfile = pyrun(*args, **kwds) - self.addCleanup(safe_rmpath, srcfile) - self.addCleanup(terminate, sproc) # executed first - return sproc - - def _check_proc_exc(self, proc, exc): - assert isinstance(exc, psutil.Error) - assert exc.pid == proc.pid - assert exc.name == proc._name - if exc.name: - assert exc.name - if isinstance(exc, psutil.ZombieProcess): - assert exc.ppid == proc._ppid - if exc.ppid is not None: - assert exc.ppid >= 0 - str(exc) - repr(exc) - - def assert_pid_gone(self, pid): - try: - proc = psutil.Process(pid) - except psutil.ZombieProcess: - raise AssertionError("wasn't supposed to raise ZombieProcess") - except psutil.NoSuchProcess as exc: - assert exc.pid == pid # noqa: PT017 - assert exc.name is None # noqa: PT017 - else: - raise AssertionError(f"did not raise NoSuchProcess ({proc})") - - assert not psutil.pid_exists(pid), pid - assert pid not in psutil.pids() - assert pid not in [x.pid for x in psutil.process_iter()] - - def assert_proc_gone(self, proc): - self.assert_pid_gone(proc.pid) - ns = process_namespace(proc) - for fun, name in ns.iter(ns.all, clear_cache=True): - with self.subTest(proc=str(proc), name=name): - try: - ret = fun() - except psutil.ZombieProcess: - raise - except psutil.NoSuchProcess as exc: - self._check_proc_exc(proc, exc) - else: - msg = ( - f"Process.{name}() didn't raise NSP and returned" - f" {ret!r}" - ) - raise AssertionError(msg) - proc.wait(timeout=0) # assert not raise TimeoutExpired - - def assert_proc_zombie(self, proc): - def assert_in_pids(proc): - if MACOS: - # Even ps does not show zombie PIDs for some reason. Weird... - return - assert proc.pid in psutil.pids() - assert proc.pid in [x.pid for x in psutil.process_iter()] - psutil._pmap = {} - assert proc.pid in [x.pid for x in psutil.process_iter()] - - # A zombie process should always be instantiable. - clone = psutil.Process(proc.pid) - # Cloned zombie on Open/NetBSD/illumos/Solaris has null creation - # time, see: - # https://github.com/giampaolo/psutil/issues/2287 - # https://github.com/giampaolo/psutil/issues/2593 - assert proc == clone - if not (OPENBSD or NETBSD or SUNOS): - assert hash(proc) == hash(clone) - # Its status always be querable. - assert proc.status() == psutil.STATUS_ZOMBIE - # It should be considered 'running'. - assert proc.is_running() - assert psutil.pid_exists(proc.pid) - # as_dict() shouldn't crash. - proc.as_dict() - # It should show up in pids() and process_iter(). - assert_in_pids(proc) - # Call all methods. - ns = process_namespace(proc) - for fun, name in ns.iter(ns.all, clear_cache=True): - with self.subTest(proc=str(proc), name=name): - try: - fun() - except (psutil.ZombieProcess, psutil.AccessDenied) as exc: - self._check_proc_exc(proc, exc) - if LINUX: - # https://github.com/giampaolo/psutil/pull/2288 - with pytest.raises(psutil.ZombieProcess) as cm: - proc.cmdline() - self._check_proc_exc(proc, cm.value) - with pytest.raises(psutil.ZombieProcess) as cm: - proc.exe() - self._check_proc_exc(proc, cm.value) - with pytest.raises(psutil.ZombieProcess) as cm: - proc.memory_maps() - self._check_proc_exc(proc, cm.value) - # Zombie cannot be signaled or terminated. - proc.suspend() - proc.resume() - proc.terminate() - proc.kill() - assert proc.is_running() - assert psutil.pid_exists(proc.pid) - assert_in_pids(proc) - - # Its parent should 'see' it (edit: not true on BSD and MACOS). - # descendants = [x.pid for x in psutil.Process().children( - # recursive=True)] - # assert proc.pid in descendants - - # __eq__ can't be relied upon because creation time may not be - # querable. - # assert proc == psutil.Process(proc.pid) - - # XXX should we also assume ppid() to be usable? Note: this - # would be an important use case as the only way to get - # rid of a zombie is to kill its parent. - # assert proc == ppid(), os.getpid() - - -@pytest.mark.skipif(PYPY, reason="unreliable on PYPY") -@pytest.mark.xdist_group(name="serial") -class TestMemoryLeak(PsutilTestCase): - """Test framework class for detecting function memory leaks, - typically functions implemented in C which forgot to free() memory - from the heap. It does so by checking whether the process memory - usage increased before and after calling the function many times. - - Note that this is hard (probably impossible) to do reliably, due - to how the OS handles memory, the GC and so on (memory can even - decrease!). In order to avoid false positives, in case of failure - (mem > 0) we retry the test for up to 5 times, increasing call - repetitions each time. If the memory keeps increasing then it's a - failure. - - If available (Linux, OSX, Windows), USS memory is used for comparison, - since it's supposed to be more precise, see: - https://gmpy.dev/blog/2016/real-process-memory-and-environ-in-python - If not, RSS memory is used. mallinfo() on Linux and _heapwalk() on - Windows may give even more precision, but at the moment are not - implemented. - - PyPy appears to be completely unstable for this framework, probably - because of its JIT, so tests on PYPY are skipped. - - Usage: - - class TestLeaks(psutil.tests.TestMemoryLeak): - - def test_fun(self): - self.execute(some_function) - """ - - # Configurable class attrs. - times = 200 - warmup_times = 10 - tolerance = 0 # memory - retries = 10 if CI_TESTING else 5 - verbose = True - _thisproc = psutil.Process() - _psutil_debug_orig = bool(os.getenv('PSUTIL_DEBUG')) - - @classmethod - def setUpClass(cls): - psutil._set_debug(False) # avoid spamming to stderr - - @classmethod - def tearDownClass(cls): - psutil._set_debug(cls._psutil_debug_orig) - - def _get_mem(self): - # USS is the closest thing we have to "real" memory usage and it - # should be less likely to produce false positives. - mem = self._thisproc.memory_full_info() - return getattr(mem, "uss", mem.rss) - - def _get_num_fds(self): - if POSIX: - return self._thisproc.num_fds() - else: - return self._thisproc.num_handles() - - def _log(self, msg): - if self.verbose: - print_color(msg, color="yellow", file=sys.stderr) - - def _check_fds(self, fun): - """Makes sure num_fds() (POSIX) or num_handles() (Windows) does - not increase after calling a function. Used to discover forgotten - close(2) and CloseHandle syscalls. - """ - before = self._get_num_fds() - self.call(fun) - after = self._get_num_fds() - diff = after - before - if diff < 0: - msg = ( - f"negative diff {diff!r} (gc probably collected a" - " resource from a previous test)" - ) - return pytest.fail(msg) - if diff > 0: - type_ = "fd" if POSIX else "handle" - if diff > 1: - type_ += "s" - msg = f"{diff} unclosed {type_} after calling {fun!r}" - return pytest.fail(msg) - - def _call_ntimes(self, fun, times): - """Get 2 distinct memory samples, before and after having - called fun repeatedly, and return the memory difference. - """ - gc.collect(generation=1) - mem1 = self._get_mem() - for x in range(times): - ret = self.call(fun) - del x, ret - gc.collect(generation=1) - mem2 = self._get_mem() - assert gc.garbage == [] - diff = mem2 - mem1 # can also be negative - return diff - - def _check_mem(self, fun, times, retries, tolerance): - messages = [] - prev_mem = 0 - increase = times - for idx in range(1, retries + 1): - mem = self._call_ntimes(fun, times) - msg = "Run #{}: extra-mem={}, per-call={}, calls={}".format( - idx, - bytes2human(mem), - bytes2human(mem / times), - times, - ) - messages.append(msg) - success = mem <= tolerance or mem <= prev_mem - if success: - if idx > 1: - self._log(msg) - return None - else: - if idx == 1: - print() # noqa: T201 - self._log(msg) - times += increase - prev_mem = mem - return pytest.fail(". ".join(messages)) - - # --- - - def call(self, fun): - return fun() - - def execute( - self, fun, times=None, warmup_times=None, retries=None, tolerance=None - ): - """Test a callable.""" - times = times if times is not None else self.times - warmup_times = ( - warmup_times if warmup_times is not None else self.warmup_times - ) - retries = retries if retries is not None else self.retries - tolerance = tolerance if tolerance is not None else self.tolerance - try: - assert times >= 1, "times must be >= 1" - assert warmup_times >= 0, "warmup_times must be >= 0" - assert retries >= 0, "retries must be >= 0" - assert tolerance >= 0, "tolerance must be >= 0" - except AssertionError as err: - raise ValueError(str(err)) - - self._call_ntimes(fun, warmup_times) # warm up - self._check_fds(fun) - self._check_mem(fun, times=times, retries=retries, tolerance=tolerance) - - def execute_w_exc(self, exc, fun, **kwargs): - """Convenience method to test a callable while making sure it - raises an exception on every call. - """ - - def call(): - try: - fun() - except exc: - pass - else: - return pytest.fail(f"{fun} did not raise {exc}") - - self.execute(call, **kwargs) - - -def is_win_secure_system_proc(pid): - # see: https://github.com/giampaolo/psutil/issues/2338 - @memoize - def get_procs(): - ret = {} - out = sh("tasklist.exe /NH /FO csv") - for line in out.splitlines()[1:]: - bits = [x.replace('"', "") for x in line.split(",")] - name, pid = bits[0], int(bits[1]) - ret[pid] = name - return ret - - try: - return get_procs()[pid] == "Secure System" - except KeyError: - return False - - -def _get_eligible_cpu(): - p = psutil.Process() - if hasattr(p, "cpu_num"): - return p.cpu_num() - elif hasattr(p, "cpu_affinity"): - return random.choice(p.cpu_affinity()) - return 0 - - -class process_namespace: - """A container that lists all Process class method names + some - reasonable parameters to be called with. Utility methods (parent(), - children(), ...) are excluded. - - >>> ns = process_namespace(psutil.Process()) - >>> for fun, name in ns.iter(ns.getters): - ... fun() - """ - - utils = [('cpu_percent', (), {}), ('memory_percent', (), {})] - - ignored = [ - ('as_dict', (), {}), - ('children', (), {'recursive': True}), - ('connections', (), {}), # deprecated - ('is_running', (), {}), - ('oneshot', (), {}), - ('parent', (), {}), - ('parents', (), {}), - ('pid', (), {}), - ('wait', (0,), {}), - ] - - getters = [ - ('cmdline', (), {}), - ('cpu_times', (), {}), - ('create_time', (), {}), - ('cwd', (), {}), - ('exe', (), {}), - ('memory_full_info', (), {}), - ('memory_info', (), {}), - ('name', (), {}), - ('net_connections', (), {'kind': 'all'}), - ('nice', (), {}), - ('num_ctx_switches', (), {}), - ('num_threads', (), {}), - ('open_files', (), {}), - ('ppid', (), {}), - ('status', (), {}), - ('threads', (), {}), - ('username', (), {}), - ] - if POSIX: - getters += [('uids', (), {})] - getters += [('gids', (), {})] - getters += [('terminal', (), {})] - getters += [('num_fds', (), {})] - if HAS_PROC_IO_COUNTERS: - getters += [('io_counters', (), {})] - if HAS_IONICE: - getters += [('ionice', (), {})] - if HAS_RLIMIT: - getters += [('rlimit', (psutil.RLIMIT_NOFILE,), {})] - if HAS_CPU_AFFINITY: - getters += [('cpu_affinity', (), {})] - if HAS_PROC_CPU_NUM: - getters += [('cpu_num', (), {})] - if HAS_ENVIRON: - getters += [('environ', (), {})] - if WINDOWS: - getters += [('num_handles', (), {})] - if HAS_MEMORY_MAPS: - getters += [('memory_maps', (), {'grouped': False})] - - setters = [] - if POSIX: - setters += [('nice', (0,), {})] - else: - setters += [('nice', (psutil.NORMAL_PRIORITY_CLASS,), {})] - if HAS_RLIMIT: - setters += [('rlimit', (psutil.RLIMIT_NOFILE, (1024, 4096)), {})] - if HAS_IONICE: - if LINUX: - setters += [('ionice', (psutil.IOPRIO_CLASS_NONE, 0), {})] - else: - setters += [('ionice', (psutil.IOPRIO_NORMAL,), {})] - if HAS_CPU_AFFINITY: - setters += [('cpu_affinity', ([_get_eligible_cpu()],), {})] - - killers = [ - ('send_signal', (signal.SIGTERM,), {}), - ('suspend', (), {}), - ('resume', (), {}), - ('terminate', (), {}), - ('kill', (), {}), - ] - if WINDOWS: - killers += [('send_signal', (signal.CTRL_C_EVENT,), {})] - killers += [('send_signal', (signal.CTRL_BREAK_EVENT,), {})] - - all = utils + getters + setters + killers - - def __init__(self, proc): - self._proc = proc - - def iter(self, ls, clear_cache=True): - """Given a list of tuples yields a set of (fun, fun_name) tuples - in random order. - """ - ls = list(ls) - random.shuffle(ls) - for fun_name, args, kwds in ls: - if clear_cache: - self.clear_cache() - fun = getattr(self._proc, fun_name) - fun = functools.partial(fun, *args, **kwds) - yield (fun, fun_name) - - def clear_cache(self): - """Clear the cache of a Process instance.""" - self._proc._init(self._proc.pid, _ignore_nsp=True) - - @classmethod - def test_class_coverage(cls, test_class, ls): - """Given a TestCase instance and a list of tuples checks that - the class defines the required test method names. - """ - for fun_name, _, _ in ls: - meth_name = 'test_' + fun_name - if not hasattr(test_class, meth_name): - msg = ( - f"{test_class.__class__.__name__!r} class should define a" - f" {meth_name!r} method" - ) - raise AttributeError(msg) - - @classmethod - def test(cls): - this = {x[0] for x in cls.all} - ignored = {x[0] for x in cls.ignored} - klass = {x for x in dir(psutil.Process) if x[0] != '_'} - leftout = (this | ignored) ^ klass - if leftout: - raise ValueError(f"uncovered Process class names: {leftout!r}") - - -class system_namespace: - """A container that lists all the module-level, system-related APIs. - Utilities such as cpu_percent() are excluded. Usage: - - >>> ns = system_namespace - >>> for fun, name in ns.iter(ns.getters): - ... fun() - """ - - getters = [ - ('boot_time', (), {}), - ('cpu_count', (), {'logical': False}), - ('cpu_count', (), {'logical': True}), - ('cpu_stats', (), {}), - ('cpu_times', (), {'percpu': False}), - ('cpu_times', (), {'percpu': True}), - ('disk_io_counters', (), {'perdisk': True}), - ('disk_partitions', (), {'all': True}), - ('disk_usage', (os.getcwd(),), {}), - ('net_connections', (), {'kind': 'all'}), - ('net_if_addrs', (), {}), - ('net_if_stats', (), {}), - ('net_io_counters', (), {'pernic': True}), - ('pid_exists', (os.getpid(),), {}), - ('pids', (), {}), - ('swap_memory', (), {}), - ('users', (), {}), - ('virtual_memory', (), {}), - ] - if HAS_CPU_FREQ: - if MACOS and AARCH64: # skipped due to #1892 - pass - else: - getters += [('cpu_freq', (), {'percpu': True})] - if HAS_GETLOADAVG: - getters += [('getloadavg', (), {})] - if HAS_SENSORS_TEMPERATURES: - getters += [('sensors_temperatures', (), {})] - if HAS_SENSORS_FANS: - getters += [('sensors_fans', (), {})] - if HAS_SENSORS_BATTERY: - getters += [('sensors_battery', (), {})] - if WINDOWS: - getters += [('win_service_iter', (), {})] - getters += [('win_service_get', ('alg',), {})] - - ignored = [ - ('process_iter', (), {}), - ('wait_procs', ([psutil.Process()],), {}), - ('cpu_percent', (), {}), - ('cpu_times_percent', (), {}), - ] - - all = getters - - @staticmethod - def iter(ls): - """Given a list of tuples yields a set of (fun, fun_name) tuples - in random order. - """ - ls = list(ls) - random.shuffle(ls) - for fun_name, args, kwds in ls: - fun = getattr(psutil, fun_name) - fun = functools.partial(fun, *args, **kwds) - yield (fun, fun_name) - - test_class_coverage = process_namespace.test_class_coverage - - -def retry_on_failure(retries=NO_RETRIES): - """Decorator which runs a test function and retries N times before - actually failing. - """ - - def logfun(exc): - print(f"{exc!r}, retrying", file=sys.stderr) # noqa: T201 - - return retry( - exception=(AssertionError, pytest.fail.Exception), - timeout=None, - retries=retries, - logfun=logfun, - ) - - -def skip_on_access_denied(only_if=None): - """Decorator to Ignore AccessDenied exceptions.""" - - def decorator(fun): - @functools.wraps(fun) - def wrapper(*args, **kwargs): - try: - return fun(*args, **kwargs) - except psutil.AccessDenied: - if only_if is not None: - if not only_if: - raise - return pytest.skip("raises AccessDenied") - - return wrapper - - return decorator - - -def skip_on_not_implemented(only_if=None): - """Decorator to Ignore NotImplementedError exceptions.""" - - def decorator(fun): - @functools.wraps(fun) - def wrapper(*args, **kwargs): - try: - return fun(*args, **kwargs) - except NotImplementedError: - if only_if is not None: - if not only_if: - raise - msg = ( - f"{fun.__name__!r} was skipped because it raised" - " NotImplementedError" - ) - return pytest.skip(msg) - - return wrapper - - return decorator - - -# =================================================================== -# --- network -# =================================================================== - - -# XXX: no longer used -def get_free_port(host='127.0.0.1'): - """Return an unused TCP port. Subject to race conditions.""" - with socket.socket() as sock: - sock.bind((host, 0)) - return sock.getsockname()[1] - - -def bind_socket(family=AF_INET, type=SOCK_STREAM, addr=None): - """Binds a generic socket.""" - if addr is None and family in {AF_INET, AF_INET6}: - addr = ("", 0) - sock = socket.socket(family, type) - try: - if os.name not in {'nt', 'cygwin'}: - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.bind(addr) - if type == socket.SOCK_STREAM: - sock.listen(5) - return sock - except Exception: - sock.close() - raise - - -def bind_unix_socket(name, type=socket.SOCK_STREAM): - """Bind a UNIX socket.""" - assert psutil.POSIX - assert not os.path.exists(name), name - sock = socket.socket(socket.AF_UNIX, type) - try: - sock.bind(name) - if type == socket.SOCK_STREAM: - sock.listen(5) - except Exception: - sock.close() - raise - return sock - - -def tcp_socketpair(family, addr=("", 0)): - """Build a pair of TCP sockets connected to each other. - Return a (server, client) tuple. - """ - with socket.socket(family, SOCK_STREAM) as ll: - ll.bind(addr) - ll.listen(5) - addr = ll.getsockname() - c = socket.socket(family, SOCK_STREAM) - try: - c.connect(addr) - caddr = c.getsockname() - while True: - a, addr = ll.accept() - # check that we've got the correct client - if addr == caddr: - return (a, c) - a.close() - except OSError: - c.close() - raise - - -def unix_socketpair(name): - """Build a pair of UNIX sockets connected to each other through - the same UNIX file name. - Return a (server, client) tuple. - """ - assert psutil.POSIX - server = client = None - try: - server = bind_unix_socket(name, type=socket.SOCK_STREAM) - server.setblocking(0) - client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - client.setblocking(0) - client.connect(name) - # new = server.accept() - except Exception: - if server is not None: - server.close() - if client is not None: - client.close() - raise - return (server, client) - - -@contextlib.contextmanager -def create_sockets(): - """Open as many socket families / types as possible.""" - socks = [] - fname1 = fname2 = None - try: - socks.extend(( - bind_socket(socket.AF_INET, socket.SOCK_STREAM), - bind_socket(socket.AF_INET, socket.SOCK_DGRAM), - )) - if supports_ipv6(): - socks.extend(( - bind_socket(socket.AF_INET6, socket.SOCK_STREAM), - bind_socket(socket.AF_INET6, socket.SOCK_DGRAM), - )) - if POSIX and HAS_NET_CONNECTIONS_UNIX: - fname1 = get_testfn() - fname2 = get_testfn() - s1, s2 = unix_socketpair(fname1) - s3 = bind_unix_socket(fname2, type=socket.SOCK_DGRAM) - for s in (s1, s2, s3): - socks.append(s) - yield socks - finally: - for s in socks: - s.close() - for fname in (fname1, fname2): - if fname is not None: - safe_rmpath(fname) - - -def check_net_address(addr, family): - """Check a net address validity. Supported families are IPv4, - IPv6 and MAC addresses. - """ - assert isinstance(family, enum.IntEnum), family - if family == socket.AF_INET: - octs = [int(x) for x in addr.split('.')] - assert len(octs) == 4, addr - for num in octs: - assert 0 <= num <= 255, addr - ipaddress.IPv4Address(addr) - elif family == socket.AF_INET6: - assert isinstance(addr, str), addr - ipaddress.IPv6Address(addr) - elif family == psutil.AF_LINK: - assert re.match(r'([a-fA-F0-9]{2}[:|\-]?){6}', addr) is not None, addr - else: - raise ValueError(f"unknown family {family!r}") - - -def check_connection_ntuple(conn): - """Check validity of a connection namedtuple.""" - - def check_ntuple(conn): - has_pid = len(conn) == 7 - assert len(conn) in {6, 7}, len(conn) - assert conn[0] == conn.fd, conn.fd - assert conn[1] == conn.family, conn.family - assert conn[2] == conn.type, conn.type - assert conn[3] == conn.laddr, conn.laddr - assert conn[4] == conn.raddr, conn.raddr - assert conn[5] == conn.status, conn.status - if has_pid: - assert conn[6] == conn.pid, conn.pid - - def check_family(conn): - assert conn.family in {AF_INET, AF_INET6, AF_UNIX}, conn.family - assert isinstance(conn.family, enum.IntEnum), conn - if conn.family == AF_INET: - # actually try to bind the local socket; ignore IPv6 - # sockets as their address might be represented as - # an IPv4-mapped-address (e.g. "::127.0.0.1") - # and that's rejected by bind() - with socket.socket(conn.family, conn.type) as s: - try: - s.bind((conn.laddr[0], 0)) - except OSError as err: - if err.errno != errno.EADDRNOTAVAIL: - raise - elif conn.family == AF_UNIX: - assert conn.status == psutil.CONN_NONE, conn.status - - def check_type(conn): - # SOCK_SEQPACKET may happen in case of AF_UNIX socks - SOCK_SEQPACKET = getattr(socket, "SOCK_SEQPACKET", object()) - assert conn.type in { - socket.SOCK_STREAM, - socket.SOCK_DGRAM, - SOCK_SEQPACKET, - }, conn.type - assert isinstance(conn.type, enum.IntEnum), conn - if conn.type == socket.SOCK_DGRAM: - assert conn.status == psutil.CONN_NONE, conn.status - - def check_addrs(conn): - # check IP address and port sanity - for addr in (conn.laddr, conn.raddr): - if conn.family in {AF_INET, AF_INET6}: - assert isinstance(addr, tuple), type(addr) - if not addr: - continue - assert isinstance(addr.port, int), type(addr.port) - assert 0 <= addr.port <= 65535, addr.port - check_net_address(addr.ip, conn.family) - elif conn.family == AF_UNIX: - assert isinstance(addr, str), type(addr) - - def check_status(conn): - assert isinstance(conn.status, str), conn.status - valids = [ - getattr(psutil, x) for x in dir(psutil) if x.startswith('CONN_') - ] - assert conn.status in valids, conn.status - if conn.family in {AF_INET, AF_INET6} and conn.type == SOCK_STREAM: - assert conn.status != psutil.CONN_NONE, conn.status - else: - assert conn.status == psutil.CONN_NONE, conn.status - - check_ntuple(conn) - check_family(conn) - check_type(conn) - check_addrs(conn) - check_status(conn) - - -def filter_proc_net_connections(cons): - """Our process may start with some open UNIX sockets which are not - initialized by us, invalidating unit tests. - """ - new = [] - for conn in cons: - if POSIX and conn.family == socket.AF_UNIX: - if MACOS and "/syslog" in conn.raddr: - debug(f"skipping {conn}") - continue - new.append(conn) - return new - - -# =================================================================== -# --- import utils -# =================================================================== - - -def reload_module(module): - return importlib.reload(module) - - -def import_module_by_path(path): - name = os.path.splitext(os.path.basename(path))[0] - spec = importlib.util.spec_from_file_location(name, path) - mod = importlib.util.module_from_spec(spec) - spec.loader.exec_module(mod) - return mod - - -# =================================================================== -# --- others -# =================================================================== - - -def warn(msg): - """Raise a warning msg.""" - warnings.warn(msg, UserWarning, stacklevel=2) - - -def is_namedtuple(x): - """Check if object is an instance of namedtuple.""" - t = type(x) - b = t.__bases__ - if len(b) != 1 or b[0] is not tuple: - return False - f = getattr(t, '_fields', None) - if not isinstance(f, tuple): - return False - return all(isinstance(n, str) for n in f) - - -if POSIX: - - @contextlib.contextmanager - def copyload_shared_lib(suffix=""): - """Ctx manager which picks up a random shared CO lib used - by this process, copies it in another location and loads it - in memory via ctypes. Return the new absolutized path. - """ - exe = 'pypy' if PYPY else 'python' - ext = ".so" - dst = get_testfn(suffix=suffix + ext) - libs = [ - x.path - for x in psutil.Process().memory_maps() - if os.path.splitext(x.path)[1] == ext and exe in x.path.lower() - ] - src = random.choice(libs) - shutil.copyfile(src, dst) - try: - ctypes.CDLL(dst) - yield dst - finally: - safe_rmpath(dst) - -else: - - @contextlib.contextmanager - def copyload_shared_lib(suffix=""): - """Ctx manager which picks up a random shared DLL lib used - by this process, copies it in another location and loads it - in memory via ctypes. - Return the new absolutized, normcased path. - """ - from ctypes import WinError - from ctypes import wintypes - - ext = ".dll" - dst = get_testfn(suffix=suffix + ext) - libs = [ - x.path - for x in psutil.Process().memory_maps() - if x.path.lower().endswith(ext) - and 'python' in os.path.basename(x.path).lower() - and 'wow64' not in x.path.lower() - ] - if PYPY and not libs: - libs = [ - x.path - for x in psutil.Process().memory_maps() - if 'pypy' in os.path.basename(x.path).lower() - ] - src = random.choice(libs) - shutil.copyfile(src, dst) - cfile = None - try: - cfile = ctypes.WinDLL(dst) - yield dst - finally: - # Work around OverflowError: - # - https://ci.appveyor.com/project/giampaolo/psutil/build/1207/ - # job/o53330pbnri9bcw7 - # - http://bugs.python.org/issue30286 - # - http://stackoverflow.com/questions/23522055 - if cfile is not None: - FreeLibrary = ctypes.windll.kernel32.FreeLibrary - FreeLibrary.argtypes = [wintypes.HMODULE] - ret = FreeLibrary(cfile._handle) - if ret == 0: - raise WinError() - safe_rmpath(dst) - - -# =================================================================== -# --- Exit funs (first is executed last) -# =================================================================== - - -# this is executed first -@atexit.register -def cleanup_test_procs(): - reap_children(recursive=True) - - -# atexit module does not execute exit functions in case of SIGTERM, which -# gets sent to test subprocesses, which is a problem if they import this -# module. With this it will. See: -# https://gmpy.dev/blog/2016/how-to-always-execute-exit-functions-in-python -if POSIX: - signal.signal(signal.SIGTERM, lambda sig, _: sys.exit(sig)) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__main__.py b/myenv/lib/python3.12/site-packages/psutil/tests/__main__.py deleted file mode 100644 index d20e48b..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/__main__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Run unit tests. This is invoked by: -$ python3 -m psutil.tests. -""" - -import sys - -from psutil.tests import pytest - -sys.exit(pytest.main()) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 708d182..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index f4f36be..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_aix.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_aix.cpython-312.pyc deleted file mode 100644 index 6cd41e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_aix.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_bsd.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_bsd.cpython-312.pyc deleted file mode 100644 index 75ec2d1..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_bsd.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_connections.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_connections.cpython-312.pyc deleted file mode 100644 index 9cde81e..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_connections.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_contracts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_contracts.cpython-312.pyc deleted file mode 100644 index c84e688..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_contracts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_linux.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_linux.cpython-312.pyc deleted file mode 100644 index cf452e2..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_linux.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_memleaks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_memleaks.cpython-312.pyc deleted file mode 100644 index acc6881..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_memleaks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_misc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_misc.cpython-312.pyc deleted file mode 100644 index 741d0d5..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_misc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_osx.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_osx.cpython-312.pyc deleted file mode 100644 index 91ab1d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_osx.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_posix.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_posix.cpython-312.pyc deleted file mode 100644 index 9bfa46a..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_posix.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process.cpython-312.pyc deleted file mode 100644 index 38d5605..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process_all.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process_all.cpython-312.pyc deleted file mode 100644 index a39281b..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_process_all.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_scripts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_scripts.cpython-312.pyc deleted file mode 100644 index be21fff..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_scripts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sudo.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sudo.cpython-312.pyc deleted file mode 100644 index 981e025..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sudo.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sunos.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sunos.cpython-312.pyc deleted file mode 100644 index cb3be9d..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_sunos.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_system.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_system.cpython-312.pyc deleted file mode 100644 index e3e7167..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_system.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_testutils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_testutils.cpython-312.pyc deleted file mode 100644 index 6dc87ec..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_testutils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_unicode.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_unicode.cpython-312.pyc deleted file mode 100644 index 7f78976..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_unicode.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_windows.cpython-312.pyc b/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_windows.cpython-312.pyc deleted file mode 100644 index 31ecc01..0000000 Binary files a/myenv/lib/python3.12/site-packages/psutil/tests/__pycache__/test_windows.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_aix.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_aix.py deleted file mode 100644 index 10934c1..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_aix.py +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola' -# Copyright (c) 2017, Arnon Yaari -# All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""AIX specific tests.""" - -import re - -import psutil -from psutil import AIX -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import sh - - -@pytest.mark.skipif(not AIX, reason="AIX only") -class AIXSpecificTestCase(PsutilTestCase): - def test_virtual_memory(self): - out = sh('/usr/bin/svmon -O unit=KB') - re_pattern = r"memory\s*" - for field in [ - "size", - "inuse", - "free", - "pin", - "virtual", - "available", - "mmode", - ]: - re_pattern += rf"(?P<{field}>\S+)\s+" - matchobj = re.search(re_pattern, out) - - assert matchobj is not None - - KB = 1024 - total = int(matchobj.group("size")) * KB - available = int(matchobj.group("available")) * KB - used = int(matchobj.group("inuse")) * KB - free = int(matchobj.group("free")) * KB - - psutil_result = psutil.virtual_memory() - - # TOLERANCE_SYS_MEM from psutil.tests is not enough. For some reason - # we're seeing differences of ~1.2 MB. 2 MB is still a good tolerance - # when compared to GBs. - TOLERANCE_SYS_MEM = 2 * KB * KB # 2 MB - assert psutil_result.total == total - assert abs(psutil_result.used - used) < TOLERANCE_SYS_MEM - assert abs(psutil_result.available - available) < TOLERANCE_SYS_MEM - assert abs(psutil_result.free - free) < TOLERANCE_SYS_MEM - - def test_swap_memory(self): - out = sh('/usr/sbin/lsps -a') - # From the man page, "The size is given in megabytes" so we assume - # we'll always have 'MB' in the result - # TODO maybe try to use "swap -l" to check "used" too, but its units - # are not guaranteed to be "MB" so parsing may not be consistent - matchobj = re.search( - r"(?P\S+)\s+" - r"(?P\S+)\s+" - r"(?P\S+)\s+" - r"(?P\d+)MB", - out, - ) - - assert matchobj is not None - - total_mb = int(matchobj.group("size")) - MB = 1024**2 - psutil_result = psutil.swap_memory() - # we divide our result by MB instead of multiplying the lsps value by - # MB because lsps may round down, so we round down too - assert int(psutil_result.total / MB) == total_mb - - def test_cpu_stats(self): - out = sh('/usr/bin/mpstat -a') - - re_pattern = r"ALL\s*" - for field in [ - "min", - "maj", - "mpcs", - "mpcr", - "dev", - "soft", - "dec", - "ph", - "cs", - "ics", - "bound", - "rq", - "push", - "S3pull", - "S3grd", - "S0rd", - "S1rd", - "S2rd", - "S3rd", - "S4rd", - "S5rd", - "sysc", - ]: - re_pattern += rf"(?P<{field}>\S+)\s+" - matchobj = re.search(re_pattern, out) - - assert matchobj is not None - - # numbers are usually in the millions so 1000 is ok for tolerance - CPU_STATS_TOLERANCE = 1000 - psutil_result = psutil.cpu_stats() - assert ( - abs(psutil_result.ctx_switches - int(matchobj.group("cs"))) - < CPU_STATS_TOLERANCE - ) - assert ( - abs(psutil_result.syscalls - int(matchobj.group("sysc"))) - < CPU_STATS_TOLERANCE - ) - assert ( - abs(psutil_result.interrupts - int(matchobj.group("dev"))) - < CPU_STATS_TOLERANCE - ) - assert ( - abs(psutil_result.soft_interrupts - int(matchobj.group("soft"))) - < CPU_STATS_TOLERANCE - ) - - def test_cpu_count_logical(self): - out = sh('/usr/bin/mpstat -a') - mpstat_lcpu = int(re.search(r"lcpu=(\d+)", out).group(1)) - psutil_lcpu = psutil.cpu_count(logical=True) - assert mpstat_lcpu == psutil_lcpu - - def test_net_if_addrs_names(self): - out = sh('/etc/ifconfig -l') - ifconfig_names = set(out.split()) - psutil_names = set(psutil.net_if_addrs().keys()) - assert ifconfig_names == psutil_names diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_bsd.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_bsd.py deleted file mode 100644 index 6727bdf..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_bsd.py +++ /dev/null @@ -1,586 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# TODO: (FreeBSD) add test for comparing connections with 'sockstat' cmd. - - -"""Tests specific to all BSD platforms.""" - -import datetime -import os -import re -import shutil -import time - -import psutil -from psutil import BSD -from psutil import FREEBSD -from psutil import NETBSD -from psutil import OPENBSD -from psutil.tests import HAS_BATTERY -from psutil.tests import TOLERANCE_SYS_MEM -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import retry_on_failure -from psutil.tests import sh -from psutil.tests import spawn_subproc -from psutil.tests import terminate - -if BSD: - PAGESIZE = psutil._psplatform.cext.getpagesize() - # muse requires root privileges - MUSE_AVAILABLE = os.getuid() == 0 and shutil.which("muse") -else: - PAGESIZE = None - MUSE_AVAILABLE = False - - -def sysctl(cmdline): - """Expects a sysctl command with an argument and parse the result - returning only the value of interest. - """ - result = sh("sysctl " + cmdline) - if FREEBSD: - result = result[result.find(": ") + 2 :] - elif OPENBSD or NETBSD: - result = result[result.find("=") + 1 :] - try: - return int(result) - except ValueError: - return result - - -def muse(field): - """Thin wrapper around 'muse' cmdline utility.""" - out = sh('muse') - for line in out.split('\n'): - if line.startswith(field): - break - else: - raise ValueError("line not found") - return int(line.split()[1]) - - -# ===================================================================== -# --- All BSD* -# ===================================================================== - - -@pytest.mark.skipif(not BSD, reason="BSD only") -class BSDTestCase(PsutilTestCase): - """Generic tests common to all BSD variants.""" - - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - @pytest.mark.skipif(NETBSD, reason="-o lstart doesn't work on NETBSD") - def test_process_create_time(self): - output = sh(f"ps -o lstart -p {self.pid}") - start_ps = output.replace('STARTED', '').strip() - start_psutil = psutil.Process(self.pid).create_time() - start_psutil = time.strftime( - "%a %b %e %H:%M:%S %Y", time.localtime(start_psutil) - ) - assert start_ps == start_psutil - - def test_disks(self): - # test psutil.disk_usage() and psutil.disk_partitions() - # against "df -a" - def df(path): - out = sh(f'df -k "{path}"').strip() - lines = out.split('\n') - lines.pop(0) - line = lines.pop(0) - dev, total, used, free = line.split()[:4] - if dev == 'none': - dev = '' - total = int(total) * 1024 - used = int(used) * 1024 - free = int(free) * 1024 - return dev, total, used, free - - for part in psutil.disk_partitions(all=False): - usage = psutil.disk_usage(part.mountpoint) - dev, total, used, free = df(part.mountpoint) - assert part.device == dev - assert usage.total == total - # 10 MB tolerance - if abs(usage.free - free) > 10 * 1024 * 1024: - return pytest.fail(f"psutil={usage.free}, df={free}") - if abs(usage.used - used) > 10 * 1024 * 1024: - return pytest.fail(f"psutil={usage.used}, df={used}") - - @pytest.mark.skipif( - not shutil.which("sysctl"), reason="sysctl cmd not available" - ) - def test_cpu_count_logical(self): - syst = sysctl("hw.ncpu") - assert psutil.cpu_count(logical=True) == syst - - @pytest.mark.skipif( - not shutil.which("sysctl"), reason="sysctl cmd not available" - ) - @pytest.mark.skipif( - NETBSD, reason="skipped on NETBSD" # we check /proc/meminfo - ) - def test_virtual_memory_total(self): - num = sysctl('hw.physmem') - assert num == psutil.virtual_memory().total - - @pytest.mark.skipif( - not shutil.which("ifconfig"), reason="ifconfig cmd not available" - ) - def test_net_if_stats(self): - for name, stats in psutil.net_if_stats().items(): - try: - out = sh(f"ifconfig {name}") - except RuntimeError: - pass - else: - assert stats.isup == ('RUNNING' in out) - if "mtu" in out: - assert stats.mtu == int(re.findall(r'mtu (\d+)', out)[0]) - - -# ===================================================================== -# --- FreeBSD -# ===================================================================== - - -@pytest.mark.skipif(not FREEBSD, reason="FREEBSD only") -class FreeBSDPsutilTestCase(PsutilTestCase): - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - @retry_on_failure() - def test_memory_maps(self): - out = sh(f"procstat -v {self.pid}") - maps = psutil.Process(self.pid).memory_maps(grouped=False) - lines = out.split('\n')[1:] - while lines: - line = lines.pop() - fields = line.split() - _, start, stop, _perms, res = fields[:5] - map = maps.pop() - assert f"{start}-{stop}" == map.addr - assert int(res) == map.rss - if not map.path.startswith('['): - assert fields[10] == map.path - - def test_exe(self): - out = sh(f"procstat -b {self.pid}") - assert psutil.Process(self.pid).exe() == out.split('\n')[1].split()[-1] - - def test_cmdline(self): - out = sh(f"procstat -c {self.pid}") - assert ' '.join(psutil.Process(self.pid).cmdline()) == ' '.join( - out.split('\n')[1].split()[2:] - ) - - def test_uids_gids(self): - out = sh(f"procstat -s {self.pid}") - euid, ruid, suid, egid, rgid, sgid = out.split('\n')[1].split()[2:8] - p = psutil.Process(self.pid) - uids = p.uids() - gids = p.gids() - assert uids.real == int(ruid) - assert uids.effective == int(euid) - assert uids.saved == int(suid) - assert gids.real == int(rgid) - assert gids.effective == int(egid) - assert gids.saved == int(sgid) - - @retry_on_failure() - def test_ctx_switches(self): - tested = [] - out = sh(f"procstat -r {self.pid}") - p = psutil.Process(self.pid) - for line in out.split('\n'): - line = line.lower().strip() - if ' voluntary context' in line: - pstat_value = int(line.split()[-1]) - psutil_value = p.num_ctx_switches().voluntary - assert pstat_value == psutil_value - tested.append(None) - elif ' involuntary context' in line: - pstat_value = int(line.split()[-1]) - psutil_value = p.num_ctx_switches().involuntary - assert pstat_value == psutil_value - tested.append(None) - if len(tested) != 2: - raise RuntimeError("couldn't find lines match in procstat out") - - @retry_on_failure() - def test_cpu_times(self): - tested = [] - out = sh(f"procstat -r {self.pid}") - p = psutil.Process(self.pid) - for line in out.split('\n'): - line = line.lower().strip() - if 'user time' in line: - pstat_value = float('0.' + line.split()[-1].split('.')[-1]) - psutil_value = p.cpu_times().user - assert pstat_value == psutil_value - tested.append(None) - elif 'system time' in line: - pstat_value = float('0.' + line.split()[-1].split('.')[-1]) - psutil_value = p.cpu_times().system - assert pstat_value == psutil_value - tested.append(None) - if len(tested) != 2: - raise RuntimeError("couldn't find lines match in procstat out") - - -@pytest.mark.skipif(not FREEBSD, reason="FREEBSD only") -class FreeBSDSystemTestCase(PsutilTestCase): - @staticmethod - def parse_swapinfo(): - # the last line is always the total - output = sh("swapinfo -k").splitlines()[-1] - parts = re.split(r'\s+', output) - - if not parts: - raise ValueError(f"Can't parse swapinfo: {output}") - - # the size is in 1k units, so multiply by 1024 - total, used, free = (int(p) * 1024 for p in parts[1:4]) - return total, used, free - - def test_cpu_frequency_against_sysctl(self): - # Currently only cpu 0 is frequency is supported in FreeBSD - # All other cores use the same frequency. - sensor = "dev.cpu.0.freq" - try: - sysctl_result = int(sysctl(sensor)) - except RuntimeError: - return pytest.skip("frequencies not supported by kernel") - assert psutil.cpu_freq().current == sysctl_result - - sensor = "dev.cpu.0.freq_levels" - sysctl_result = sysctl(sensor) - # sysctl returns a string of the format: - # / /... - # Ordered highest available to lowest available. - max_freq = int(sysctl_result.split()[0].split("/")[0]) - min_freq = int(sysctl_result.split()[-1].split("/")[0]) - assert psutil.cpu_freq().max == max_freq - assert psutil.cpu_freq().min == min_freq - - # --- virtual_memory(); tests against sysctl - - @retry_on_failure() - def test_vmem_active(self): - syst = sysctl("vm.stats.vm.v_active_count") * PAGESIZE - assert abs(psutil.virtual_memory().active - syst) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_inactive(self): - syst = sysctl("vm.stats.vm.v_inactive_count") * PAGESIZE - assert abs(psutil.virtual_memory().inactive - syst) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_wired(self): - syst = sysctl("vm.stats.vm.v_wire_count") * PAGESIZE - assert abs(psutil.virtual_memory().wired - syst) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_cached(self): - syst = sysctl("vm.stats.vm.v_cache_count") * PAGESIZE - assert abs(psutil.virtual_memory().cached - syst) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_free(self): - syst = sysctl("vm.stats.vm.v_free_count") * PAGESIZE - assert abs(psutil.virtual_memory().free - syst) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_buffers(self): - syst = sysctl("vfs.bufspace") - assert abs(psutil.virtual_memory().buffers - syst) < TOLERANCE_SYS_MEM - - # --- virtual_memory(); tests against muse - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - def test_muse_vmem_total(self): - num = muse('Total') - assert psutil.virtual_memory().total == num - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_active(self): - num = muse('Active') - assert abs(psutil.virtual_memory().active - num) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_inactive(self): - num = muse('Inactive') - assert abs(psutil.virtual_memory().inactive - num) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_wired(self): - num = muse('Wired') - assert abs(psutil.virtual_memory().wired - num) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_cached(self): - num = muse('Cache') - assert abs(psutil.virtual_memory().cached - num) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_free(self): - num = muse('Free') - assert abs(psutil.virtual_memory().free - num) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif(not MUSE_AVAILABLE, reason="muse not installed") - @retry_on_failure() - def test_muse_vmem_buffers(self): - num = muse('Buffer') - assert abs(psutil.virtual_memory().buffers - num) < TOLERANCE_SYS_MEM - - def test_cpu_stats_ctx_switches(self): - assert ( - abs( - psutil.cpu_stats().ctx_switches - - sysctl('vm.stats.sys.v_swtch') - ) - < 1000 - ) - - def test_cpu_stats_interrupts(self): - assert ( - abs(psutil.cpu_stats().interrupts - sysctl('vm.stats.sys.v_intr')) - < 1000 - ) - - def test_cpu_stats_soft_interrupts(self): - assert ( - abs( - psutil.cpu_stats().soft_interrupts - - sysctl('vm.stats.sys.v_soft') - ) - < 1000 - ) - - @retry_on_failure() - def test_cpu_stats_syscalls(self): - # pretty high tolerance but it looks like it's OK. - assert ( - abs(psutil.cpu_stats().syscalls - sysctl('vm.stats.sys.v_syscall')) - < 200000 - ) - - # --- swap memory - - def test_swapmem_free(self): - _total, _used, free = self.parse_swapinfo() - assert abs(psutil.swap_memory().free - free) < TOLERANCE_SYS_MEM - - def test_swapmem_used(self): - _total, used, _free = self.parse_swapinfo() - assert abs(psutil.swap_memory().used - used) < TOLERANCE_SYS_MEM - - def test_swapmem_total(self): - total, _used, _free = self.parse_swapinfo() - assert abs(psutil.swap_memory().total - total) < TOLERANCE_SYS_MEM - - # --- others - - def test_boot_time(self): - s = sysctl('sysctl kern.boottime') - s = s[s.find(" sec = ") + 7 :] - s = s[: s.find(',')] - btime = int(s) - assert btime == psutil.boot_time() - - # --- sensors_battery - - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_sensors_battery(self): - def secs2hours(secs): - m, _s = divmod(secs, 60) - h, m = divmod(m, 60) - return f"{int(h)}:{int(m):02}" - - out = sh("acpiconf -i 0") - fields = {x.split('\t')[0]: x.split('\t')[-1] for x in out.split("\n")} - metrics = psutil.sensors_battery() - percent = int(fields['Remaining capacity:'].replace('%', '')) - remaining_time = fields['Remaining time:'] - assert metrics.percent == percent - if remaining_time == 'unknown': - assert metrics.secsleft == psutil.POWER_TIME_UNLIMITED - else: - assert secs2hours(metrics.secsleft) == remaining_time - - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_sensors_battery_against_sysctl(self): - assert psutil.sensors_battery().percent == sysctl( - "hw.acpi.battery.life" - ) - assert psutil.sensors_battery().power_plugged == ( - sysctl("hw.acpi.acline") == 1 - ) - secsleft = psutil.sensors_battery().secsleft - if secsleft < 0: - assert sysctl("hw.acpi.battery.time") == -1 - else: - assert secsleft == sysctl("hw.acpi.battery.time") * 60 - - @pytest.mark.skipif(HAS_BATTERY, reason="has battery") - def test_sensors_battery_no_battery(self): - # If no battery is present one of these calls is supposed - # to fail, see: - # https://github.com/giampaolo/psutil/issues/1074 - with pytest.raises(RuntimeError): - sysctl("hw.acpi.battery.life") - sysctl("hw.acpi.battery.time") - sysctl("hw.acpi.acline") - assert psutil.sensors_battery() is None - - # --- sensors_temperatures - - def test_sensors_temperatures_against_sysctl(self): - num_cpus = psutil.cpu_count(True) - for cpu in range(num_cpus): - sensor = f"dev.cpu.{cpu}.temperature" - # sysctl returns a string in the format 46.0C - try: - sysctl_result = int(float(sysctl(sensor)[:-1])) - except RuntimeError: - return pytest.skip("temperatures not supported by kernel") - assert ( - abs( - psutil.sensors_temperatures()["coretemp"][cpu].current - - sysctl_result - ) - < 10 - ) - - sensor = f"dev.cpu.{cpu}.coretemp.tjmax" - sysctl_result = int(float(sysctl(sensor)[:-1])) - assert ( - psutil.sensors_temperatures()["coretemp"][cpu].high - == sysctl_result - ) - - -# ===================================================================== -# --- OpenBSD -# ===================================================================== - - -@pytest.mark.skipif(not OPENBSD, reason="OPENBSD only") -class OpenBSDTestCase(PsutilTestCase): - def test_boot_time(self): - s = sysctl('kern.boottime') - sys_bt = datetime.datetime.strptime(s, "%a %b %d %H:%M:%S %Y") - psutil_bt = datetime.datetime.fromtimestamp(psutil.boot_time()) - assert sys_bt == psutil_bt - - -# ===================================================================== -# --- NetBSD -# ===================================================================== - - -@pytest.mark.skipif(not NETBSD, reason="NETBSD only") -class NetBSDTestCase(PsutilTestCase): - @staticmethod - def parse_meminfo(look_for): - with open('/proc/meminfo') as f: - for line in f: - if line.startswith(look_for): - return int(line.split()[1]) * 1024 - raise ValueError(f"can't find {look_for}") - - # --- virtual mem - - def test_vmem_total(self): - assert psutil.virtual_memory().total == self.parse_meminfo("MemTotal:") - - def test_vmem_free(self): - assert ( - abs(psutil.virtual_memory().free - self.parse_meminfo("MemFree:")) - < TOLERANCE_SYS_MEM - ) - - def test_vmem_buffers(self): - assert ( - abs( - psutil.virtual_memory().buffers - - self.parse_meminfo("Buffers:") - ) - < TOLERANCE_SYS_MEM - ) - - def test_vmem_shared(self): - assert ( - abs( - psutil.virtual_memory().shared - - self.parse_meminfo("MemShared:") - ) - < TOLERANCE_SYS_MEM - ) - - def test_vmem_cached(self): - assert ( - abs(psutil.virtual_memory().cached - self.parse_meminfo("Cached:")) - < TOLERANCE_SYS_MEM - ) - - # --- swap mem - - def test_swapmem_total(self): - assert ( - abs(psutil.swap_memory().total - self.parse_meminfo("SwapTotal:")) - < TOLERANCE_SYS_MEM - ) - - def test_swapmem_free(self): - assert ( - abs(psutil.swap_memory().free - self.parse_meminfo("SwapFree:")) - < TOLERANCE_SYS_MEM - ) - - def test_swapmem_used(self): - smem = psutil.swap_memory() - assert smem.used == smem.total - smem.free - - # --- others - - def test_cpu_stats_interrupts(self): - with open('/proc/stat', 'rb') as f: - for line in f: - if line.startswith(b'intr'): - interrupts = int(line.split()[1]) - break - else: - raise ValueError("couldn't find line") - assert abs(psutil.cpu_stats().interrupts - interrupts) < 1000 - - def test_cpu_stats_ctx_switches(self): - with open('/proc/stat', 'rb') as f: - for line in f: - if line.startswith(b'ctxt'): - ctx_switches = int(line.split()[1]) - break - else: - raise ValueError("couldn't find line") - assert abs(psutil.cpu_stats().ctx_switches - ctx_switches) < 1000 diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_connections.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_connections.py deleted file mode 100644 index 6a9778e..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_connections.py +++ /dev/null @@ -1,568 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for psutil.net_connections() and Process.net_connections() APIs.""" - -import os -import socket -import textwrap -from contextlib import closing -from socket import AF_INET -from socket import AF_INET6 -from socket import SOCK_DGRAM -from socket import SOCK_STREAM - -import psutil -from psutil import FREEBSD -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil import WINDOWS -from psutil._common import supports_ipv6 -from psutil.tests import AF_UNIX -from psutil.tests import HAS_NET_CONNECTIONS_UNIX -from psutil.tests import SKIP_SYSCONS -from psutil.tests import PsutilTestCase -from psutil.tests import bind_socket -from psutil.tests import bind_unix_socket -from psutil.tests import check_connection_ntuple -from psutil.tests import create_sockets -from psutil.tests import filter_proc_net_connections -from psutil.tests import pytest -from psutil.tests import reap_children -from psutil.tests import retry_on_failure -from psutil.tests import skip_on_access_denied -from psutil.tests import tcp_socketpair -from psutil.tests import unix_socketpair -from psutil.tests import wait_for_file - -SOCK_SEQPACKET = getattr(socket, "SOCK_SEQPACKET", object()) - - -def this_proc_net_connections(kind): - cons = psutil.Process().net_connections(kind=kind) - if kind in {"all", "unix"}: - return filter_proc_net_connections(cons) - return cons - - -@pytest.mark.xdist_group(name="serial") -class ConnectionTestCase(PsutilTestCase): - def setUp(self): - assert this_proc_net_connections(kind='all') == [] - - def tearDown(self): - # Make sure we closed all resources. - assert this_proc_net_connections(kind='all') == [] - - def compare_procsys_connections(self, pid, proc_cons, kind='all'): - """Given a process PID and its list of connections compare - those against system-wide connections retrieved via - psutil.net_connections. - """ - try: - sys_cons = psutil.net_connections(kind=kind) - except psutil.AccessDenied: - # On MACOS, system-wide connections are retrieved by iterating - # over all processes - if MACOS: - return - else: - raise - # Filter for this proc PID and exlucde PIDs from the tuple. - sys_cons = [c[:-1] for c in sys_cons if c.pid == pid] - sys_cons.sort() - proc_cons.sort() - assert proc_cons == sys_cons - - -class TestBasicOperations(ConnectionTestCase): - @pytest.mark.skipif(SKIP_SYSCONS, reason="requires root") - def test_system(self): - with create_sockets(): - for conn in psutil.net_connections(kind='all'): - check_connection_ntuple(conn) - - def test_process(self): - with create_sockets(): - for conn in this_proc_net_connections(kind='all'): - check_connection_ntuple(conn) - - def test_invalid_kind(self): - with pytest.raises(ValueError): - this_proc_net_connections(kind='???') - with pytest.raises(ValueError): - psutil.net_connections(kind='???') - - -@pytest.mark.xdist_group(name="serial") -class TestUnconnectedSockets(ConnectionTestCase): - """Tests sockets which are open but not connected to anything.""" - - def get_conn_from_sock(self, sock): - cons = this_proc_net_connections(kind='all') - smap = {c.fd: c for c in cons} - if NETBSD or FREEBSD: - # NetBSD opens a UNIX socket to /var/log/run - # so there may be more connections. - return smap[sock.fileno()] - else: - assert len(cons) == 1 - if cons[0].fd != -1: - assert smap[sock.fileno()].fd == sock.fileno() - return cons[0] - - def check_socket(self, sock): - """Given a socket, makes sure it matches the one obtained - via psutil. It assumes this process created one connection - only (the one supposed to be checked). - """ - conn = self.get_conn_from_sock(sock) - check_connection_ntuple(conn) - - # fd, family, type - if conn.fd != -1: - assert conn.fd == sock.fileno() - assert conn.family == sock.family - # see: http://bugs.python.org/issue30204 - assert conn.type == sock.getsockopt(socket.SOL_SOCKET, socket.SO_TYPE) - - # local address - laddr = sock.getsockname() - if not laddr and isinstance(laddr, bytes): - # See: http://bugs.python.org/issue30205 - laddr = laddr.decode() - if sock.family == AF_INET6: - laddr = laddr[:2] - assert conn.laddr == laddr - - # XXX Solaris can't retrieve system-wide UNIX sockets - if sock.family == AF_UNIX and HAS_NET_CONNECTIONS_UNIX: - cons = this_proc_net_connections(kind='all') - self.compare_procsys_connections(os.getpid(), cons, kind='all') - return conn - - def test_tcp_v4(self): - addr = ("127.0.0.1", 0) - with closing(bind_socket(AF_INET, SOCK_STREAM, addr=addr)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == () - assert conn.status == psutil.CONN_LISTEN - - @pytest.mark.skipif(not supports_ipv6(), reason="IPv6 not supported") - def test_tcp_v6(self): - addr = ("::1", 0) - with closing(bind_socket(AF_INET6, SOCK_STREAM, addr=addr)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == () - assert conn.status == psutil.CONN_LISTEN - - def test_udp_v4(self): - addr = ("127.0.0.1", 0) - with closing(bind_socket(AF_INET, SOCK_DGRAM, addr=addr)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == () - assert conn.status == psutil.CONN_NONE - - @pytest.mark.skipif(not supports_ipv6(), reason="IPv6 not supported") - def test_udp_v6(self): - addr = ("::1", 0) - with closing(bind_socket(AF_INET6, SOCK_DGRAM, addr=addr)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == () - assert conn.status == psutil.CONN_NONE - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_unix_tcp(self): - testfn = self.get_testfn() - with closing(bind_unix_socket(testfn, type=SOCK_STREAM)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == "" - assert conn.status == psutil.CONN_NONE - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_unix_udp(self): - testfn = self.get_testfn() - with closing(bind_unix_socket(testfn, type=SOCK_STREAM)) as sock: - conn = self.check_socket(sock) - assert conn.raddr == "" - assert conn.status == psutil.CONN_NONE - - -@pytest.mark.xdist_group(name="serial") -class TestConnectedSocket(ConnectionTestCase): - """Test socket pairs which are actually connected to - each other. - """ - - # On SunOS, even after we close() it, the server socket stays around - # in TIME_WAIT state. - @pytest.mark.skipif(SUNOS, reason="unreliable on SUNOS") - def test_tcp(self): - addr = ("127.0.0.1", 0) - assert this_proc_net_connections(kind='tcp4') == [] - server, client = tcp_socketpair(AF_INET, addr=addr) - try: - cons = this_proc_net_connections(kind='tcp4') - assert len(cons) == 2 - assert cons[0].status == psutil.CONN_ESTABLISHED - assert cons[1].status == psutil.CONN_ESTABLISHED - # May not be fast enough to change state so it stays - # commenteed. - # client.close() - # cons = this_proc_net_connections(kind='all') - # assert len(cons) == 1 - # assert cons[0].status == psutil.CONN_CLOSE_WAIT - finally: - server.close() - client.close() - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.skipif( - not HAS_NET_CONNECTIONS_UNIX, reason="can't list UNIX sockets" - ) - def test_unix(self): - testfn = self.get_testfn() - server, client = unix_socketpair(testfn) - try: - cons = this_proc_net_connections(kind='unix') - assert not (cons[0].laddr and cons[0].raddr), cons - assert not (cons[1].laddr and cons[1].raddr), cons - if NETBSD or FREEBSD: - # On NetBSD creating a UNIX socket will cause - # a UNIX connection to /var/run/log. - cons = [c for c in cons if c.raddr != '/var/run/log'] - assert len(cons) == 2 - if LINUX or FREEBSD or SUNOS or OPENBSD: - # remote path is never set - assert cons[0].raddr == "" - assert cons[1].raddr == "" - # one local address should though - assert testfn == (cons[0].laddr or cons[1].laddr) - else: - # On other systems either the laddr or raddr - # of both peers are set. - assert (cons[0].laddr or cons[1].laddr) == testfn - finally: - server.close() - client.close() - - -class TestFilters(ConnectionTestCase): - def test_filters(self): - def check(kind, families, types): - for conn in this_proc_net_connections(kind=kind): - assert conn.family in families - assert conn.type in types - if not SKIP_SYSCONS: - for conn in psutil.net_connections(kind=kind): - assert conn.family in families - assert conn.type in types - - with create_sockets(): - check( - 'all', - [AF_INET, AF_INET6, AF_UNIX], - [SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET], - ) - check('inet', [AF_INET, AF_INET6], [SOCK_STREAM, SOCK_DGRAM]) - check('inet4', [AF_INET], [SOCK_STREAM, SOCK_DGRAM]) - check('tcp', [AF_INET, AF_INET6], [SOCK_STREAM]) - check('tcp4', [AF_INET], [SOCK_STREAM]) - check('tcp6', [AF_INET6], [SOCK_STREAM]) - check('udp', [AF_INET, AF_INET6], [SOCK_DGRAM]) - check('udp4', [AF_INET], [SOCK_DGRAM]) - check('udp6', [AF_INET6], [SOCK_DGRAM]) - if HAS_NET_CONNECTIONS_UNIX: - check( - 'unix', - [AF_UNIX], - [SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET], - ) - - @skip_on_access_denied(only_if=MACOS) - def test_combos(self): - reap_children() - - def check_conn(proc, conn, family, type, laddr, raddr, status, kinds): - all_kinds = ( - "all", - "inet", - "inet4", - "inet6", - "tcp", - "tcp4", - "tcp6", - "udp", - "udp4", - "udp6", - ) - check_connection_ntuple(conn) - assert conn.family == family - assert conn.type == type - assert conn.laddr == laddr - assert conn.raddr == raddr - assert conn.status == status - for kind in all_kinds: - cons = proc.net_connections(kind=kind) - if kind in kinds: - assert cons != [] - else: - assert cons == [] - # compare against system-wide connections - # XXX Solaris can't retrieve system-wide UNIX - # sockets. - if HAS_NET_CONNECTIONS_UNIX: - self.compare_procsys_connections(proc.pid, [conn]) - - tcp_template = textwrap.dedent(""" - import socket, time - s = socket.socket({family}, socket.SOCK_STREAM) - s.bind(('{addr}', 0)) - s.listen(5) - with open('{testfn}', 'w') as f: - f.write(str(s.getsockname()[:2])) - [time.sleep(0.1) for x in range(100)] - """) - - udp_template = textwrap.dedent(""" - import socket, time - s = socket.socket({family}, socket.SOCK_DGRAM) - s.bind(('{addr}', 0)) - with open('{testfn}', 'w') as f: - f.write(str(s.getsockname()[:2])) - [time.sleep(0.1) for x in range(100)] - """) - - # must be relative on Windows - testfile = os.path.basename(self.get_testfn(dir=os.getcwd())) - tcp4_template = tcp_template.format( - family=int(AF_INET), addr="127.0.0.1", testfn=testfile - ) - udp4_template = udp_template.format( - family=int(AF_INET), addr="127.0.0.1", testfn=testfile - ) - tcp6_template = tcp_template.format( - family=int(AF_INET6), addr="::1", testfn=testfile - ) - udp6_template = udp_template.format( - family=int(AF_INET6), addr="::1", testfn=testfile - ) - - # launch various subprocess instantiating a socket of various - # families and types to enrich psutil results - tcp4_proc = self.pyrun(tcp4_template) - tcp4_addr = eval(wait_for_file(testfile, delete=True)) - udp4_proc = self.pyrun(udp4_template) - udp4_addr = eval(wait_for_file(testfile, delete=True)) - if supports_ipv6(): - tcp6_proc = self.pyrun(tcp6_template) - tcp6_addr = eval(wait_for_file(testfile, delete=True)) - udp6_proc = self.pyrun(udp6_template) - udp6_addr = eval(wait_for_file(testfile, delete=True)) - else: - tcp6_proc = None - udp6_proc = None - tcp6_addr = None - udp6_addr = None - - for p in psutil.Process().children(): - cons = p.net_connections() - assert len(cons) == 1 - for conn in cons: - # TCP v4 - if p.pid == tcp4_proc.pid: - check_conn( - p, - conn, - AF_INET, - SOCK_STREAM, - tcp4_addr, - (), - psutil.CONN_LISTEN, - ("all", "inet", "inet4", "tcp", "tcp4"), - ) - # UDP v4 - elif p.pid == udp4_proc.pid: - check_conn( - p, - conn, - AF_INET, - SOCK_DGRAM, - udp4_addr, - (), - psutil.CONN_NONE, - ("all", "inet", "inet4", "udp", "udp4"), - ) - # TCP v6 - elif p.pid == getattr(tcp6_proc, "pid", None): - check_conn( - p, - conn, - AF_INET6, - SOCK_STREAM, - tcp6_addr, - (), - psutil.CONN_LISTEN, - ("all", "inet", "inet6", "tcp", "tcp6"), - ) - # UDP v6 - elif p.pid == getattr(udp6_proc, "pid", None): - check_conn( - p, - conn, - AF_INET6, - SOCK_DGRAM, - udp6_addr, - (), - psutil.CONN_NONE, - ("all", "inet", "inet6", "udp", "udp6"), - ) - - def test_count(self): - with create_sockets(): - # tcp - cons = this_proc_net_connections(kind='tcp') - assert len(cons) == (2 if supports_ipv6() else 1) - for conn in cons: - assert conn.family in {AF_INET, AF_INET6} - assert conn.type == SOCK_STREAM - # tcp4 - cons = this_proc_net_connections(kind='tcp4') - assert len(cons) == 1 - assert cons[0].family == AF_INET - assert cons[0].type == SOCK_STREAM - # tcp6 - if supports_ipv6(): - cons = this_proc_net_connections(kind='tcp6') - assert len(cons) == 1 - assert cons[0].family == AF_INET6 - assert cons[0].type == SOCK_STREAM - # udp - cons = this_proc_net_connections(kind='udp') - assert len(cons) == (2 if supports_ipv6() else 1) - for conn in cons: - assert conn.family in {AF_INET, AF_INET6} - assert conn.type == SOCK_DGRAM - # udp4 - cons = this_proc_net_connections(kind='udp4') - assert len(cons) == 1 - assert cons[0].family == AF_INET - assert cons[0].type == SOCK_DGRAM - # udp6 - if supports_ipv6(): - cons = this_proc_net_connections(kind='udp6') - assert len(cons) == 1 - assert cons[0].family == AF_INET6 - assert cons[0].type == SOCK_DGRAM - # inet - cons = this_proc_net_connections(kind='inet') - assert len(cons) == (4 if supports_ipv6() else 2) - for conn in cons: - assert conn.family in {AF_INET, AF_INET6} - assert conn.type in {SOCK_STREAM, SOCK_DGRAM} - # inet6 - if supports_ipv6(): - cons = this_proc_net_connections(kind='inet6') - assert len(cons) == 2 - for conn in cons: - assert conn.family == AF_INET6 - assert conn.type in {SOCK_STREAM, SOCK_DGRAM} - # Skipped on BSD becayse by default the Python process - # creates a UNIX socket to '/var/run/log'. - if HAS_NET_CONNECTIONS_UNIX and not (FREEBSD or NETBSD): - cons = this_proc_net_connections(kind='unix') - assert len(cons) == 3 - for conn in cons: - assert conn.family == AF_UNIX - assert conn.type in {SOCK_STREAM, SOCK_DGRAM} - - -@pytest.mark.skipif(SKIP_SYSCONS, reason="requires root") -class TestSystemWideConnections(ConnectionTestCase): - """Tests for net_connections().""" - - def test_it(self): - def check(cons, families, types_): - for conn in cons: - assert conn.family in families - if conn.family != AF_UNIX: - assert conn.type in types_ - check_connection_ntuple(conn) - - with create_sockets(): - from psutil._common import conn_tmap - - for kind, groups in conn_tmap.items(): - # XXX: SunOS does not retrieve UNIX sockets. - if kind == 'unix' and not HAS_NET_CONNECTIONS_UNIX: - continue - families, types_ = groups - cons = psutil.net_connections(kind) - assert len(cons) == len(set(cons)) - check(cons, families, types_) - - @retry_on_failure() - def test_multi_sockets_procs(self): - # Creates multiple sub processes, each creating different - # sockets. For each process check that proc.net_connections() - # and psutil.net_connections() return the same results. - # This is done mainly to check whether net_connections()'s - # pid is properly set, see: - # https://github.com/giampaolo/psutil/issues/1013 - with create_sockets() as socks: - expected = len(socks) - pids = [] - times = 10 - fnames = [] - for _ in range(times): - fname = self.get_testfn() - fnames.append(fname) - src = textwrap.dedent(f"""\ - import time, os - from psutil.tests import create_sockets - with create_sockets(): - with open(r'{fname}', 'w') as f: - f.write("hello") - [time.sleep(0.1) for x in range(100)] - """) - sproc = self.pyrun(src) - pids.append(sproc.pid) - - # sync - for fname in fnames: - wait_for_file(fname) - - syscons = [ - x for x in psutil.net_connections(kind='all') if x.pid in pids - ] - for pid in pids: - assert len([x for x in syscons if x.pid == pid]) == expected - p = psutil.Process(pid) - assert len(p.net_connections('all')) == expected - - -class TestMisc(PsutilTestCase): - def test_net_connection_constants(self): - ints = [] - strs = [] - for name in dir(psutil): - if name.startswith('CONN_'): - num = getattr(psutil, name) - str_ = str(num) - assert str_.isupper(), str_ - assert str not in strs - assert num not in ints - ints.append(num) - strs.append(str_) - if SUNOS: - psutil.CONN_IDLE # noqa: B018 - psutil.CONN_BOUND # noqa: B018 - if WINDOWS: - psutil.CONN_DELETE_TCB # noqa: B018 diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_contracts.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_contracts.py deleted file mode 100644 index f174bdb..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_contracts.py +++ /dev/null @@ -1,321 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Contracts tests. These tests mainly check API sanity in terms of -returned types and APIs availability. -Some of these are duplicates of tests test_system.py and test_process.py. -""" - -import signal - -import psutil -from psutil import AIX -from psutil import FREEBSD -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil import WINDOWS -from psutil.tests import AARCH64 -from psutil.tests import GITHUB_ACTIONS -from psutil.tests import HAS_CPU_FREQ -from psutil.tests import HAS_NET_IO_COUNTERS -from psutil.tests import HAS_SENSORS_FANS -from psutil.tests import HAS_SENSORS_TEMPERATURES -from psutil.tests import SKIP_SYSCONS -from psutil.tests import PsutilTestCase -from psutil.tests import create_sockets -from psutil.tests import enum -from psutil.tests import is_namedtuple -from psutil.tests import kernel_version -from psutil.tests import pytest - -# =================================================================== -# --- APIs availability -# =================================================================== - -# Make sure code reflects what doc promises in terms of APIs -# availability. - - -class TestAvailConstantsAPIs(PsutilTestCase): - def test_PROCFS_PATH(self): - assert hasattr(psutil, "PROCFS_PATH") == (LINUX or SUNOS or AIX) - - def test_win_priority(self): - assert hasattr(psutil, "ABOVE_NORMAL_PRIORITY_CLASS") == WINDOWS - assert hasattr(psutil, "BELOW_NORMAL_PRIORITY_CLASS") == WINDOWS - assert hasattr(psutil, "HIGH_PRIORITY_CLASS") == WINDOWS - assert hasattr(psutil, "IDLE_PRIORITY_CLASS") == WINDOWS - assert hasattr(psutil, "NORMAL_PRIORITY_CLASS") == WINDOWS - assert hasattr(psutil, "REALTIME_PRIORITY_CLASS") == WINDOWS - - def test_linux_ioprio_linux(self): - assert hasattr(psutil, "IOPRIO_CLASS_NONE") == LINUX - assert hasattr(psutil, "IOPRIO_CLASS_RT") == LINUX - assert hasattr(psutil, "IOPRIO_CLASS_BE") == LINUX - assert hasattr(psutil, "IOPRIO_CLASS_IDLE") == LINUX - - def test_linux_ioprio_windows(self): - assert hasattr(psutil, "IOPRIO_HIGH") == WINDOWS - assert hasattr(psutil, "IOPRIO_NORMAL") == WINDOWS - assert hasattr(psutil, "IOPRIO_LOW") == WINDOWS - assert hasattr(psutil, "IOPRIO_VERYLOW") == WINDOWS - - @pytest.mark.skipif( - GITHUB_ACTIONS and LINUX, - reason="unsupported on GITHUB_ACTIONS + LINUX", - ) - def test_rlimit(self): - assert hasattr(psutil, "RLIM_INFINITY") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_AS") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_CORE") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_CPU") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_DATA") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_FSIZE") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_MEMLOCK") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_NOFILE") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_NPROC") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_RSS") == LINUX or FREEBSD - assert hasattr(psutil, "RLIMIT_STACK") == LINUX or FREEBSD - - assert hasattr(psutil, "RLIMIT_LOCKS") == LINUX - if POSIX: - if kernel_version() >= (2, 6, 8): - assert hasattr(psutil, "RLIMIT_MSGQUEUE") == LINUX - if kernel_version() >= (2, 6, 12): - assert hasattr(psutil, "RLIMIT_NICE") == LINUX - if kernel_version() >= (2, 6, 12): - assert hasattr(psutil, "RLIMIT_RTPRIO") == LINUX - if kernel_version() >= (2, 6, 25): - assert hasattr(psutil, "RLIMIT_RTTIME") == LINUX - if kernel_version() >= (2, 6, 8): - assert hasattr(psutil, "RLIMIT_SIGPENDING") == LINUX - - assert hasattr(psutil, "RLIMIT_SWAP") == FREEBSD - assert hasattr(psutil, "RLIMIT_SBSIZE") == FREEBSD - assert hasattr(psutil, "RLIMIT_NPTS") == FREEBSD - - -class TestAvailSystemAPIs(PsutilTestCase): - def test_win_service_iter(self): - assert hasattr(psutil, "win_service_iter") == WINDOWS - - def test_win_service_get(self): - assert hasattr(psutil, "win_service_get") == WINDOWS - - @pytest.mark.skipif(MACOS and AARCH64, reason="skipped due to #1892") - def test_cpu_freq(self): - assert hasattr(psutil, "cpu_freq") == ( - LINUX or MACOS or WINDOWS or FREEBSD or OPENBSD - ) - - def test_sensors_temperatures(self): - assert hasattr(psutil, "sensors_temperatures") == (LINUX or FREEBSD) - - def test_sensors_fans(self): - assert hasattr(psutil, "sensors_fans") == LINUX - - def test_battery(self): - assert hasattr(psutil, "sensors_battery") == ( - LINUX or WINDOWS or FREEBSD or MACOS - ) - - -class TestAvailProcessAPIs(PsutilTestCase): - def test_environ(self): - assert hasattr(psutil.Process, "environ") == ( - LINUX - or MACOS - or WINDOWS - or AIX - or SUNOS - or FREEBSD - or OPENBSD - or NETBSD - ) - - def test_uids(self): - assert hasattr(psutil.Process, "uids") == POSIX - - def test_gids(self): - assert hasattr(psutil.Process, "uids") == POSIX - - def test_terminal(self): - assert hasattr(psutil.Process, "terminal") == POSIX - - def test_ionice(self): - assert hasattr(psutil.Process, "ionice") == (LINUX or WINDOWS) - - @pytest.mark.skipif( - GITHUB_ACTIONS and LINUX, - reason="unsupported on GITHUB_ACTIONS + LINUX", - ) - def test_rlimit(self): - assert hasattr(psutil.Process, "rlimit") == (LINUX or FREEBSD) - - def test_io_counters(self): - hasit = hasattr(psutil.Process, "io_counters") - assert hasit == (not (MACOS or SUNOS)) - - def test_num_fds(self): - assert hasattr(psutil.Process, "num_fds") == POSIX - - def test_num_handles(self): - assert hasattr(psutil.Process, "num_handles") == WINDOWS - - def test_cpu_affinity(self): - assert hasattr(psutil.Process, "cpu_affinity") == ( - LINUX or WINDOWS or FREEBSD - ) - - def test_cpu_num(self): - assert hasattr(psutil.Process, "cpu_num") == ( - LINUX or FREEBSD or SUNOS - ) - - def test_memory_maps(self): - hasit = hasattr(psutil.Process, "memory_maps") - assert hasit == (not (OPENBSD or NETBSD or AIX or MACOS)) - - -# =================================================================== -# --- API types -# =================================================================== - - -class TestSystemAPITypes(PsutilTestCase): - """Check the return types of system related APIs. - https://github.com/giampaolo/psutil/issues/1039. - """ - - @classmethod - def setUpClass(cls): - cls.proc = psutil.Process() - - def assert_ntuple_of_nums(self, nt, type_=float, gezero=True): - assert is_namedtuple(nt) - for n in nt: - assert isinstance(n, type_) - if gezero: - assert n >= 0 - - def test_cpu_times(self): - self.assert_ntuple_of_nums(psutil.cpu_times()) - for nt in psutil.cpu_times(percpu=True): - self.assert_ntuple_of_nums(nt) - - def test_cpu_percent(self): - assert isinstance(psutil.cpu_percent(interval=None), float) - assert isinstance(psutil.cpu_percent(interval=0.00001), float) - - def test_cpu_times_percent(self): - self.assert_ntuple_of_nums(psutil.cpu_times_percent(interval=None)) - self.assert_ntuple_of_nums(psutil.cpu_times_percent(interval=0.0001)) - - def test_cpu_count(self): - assert isinstance(psutil.cpu_count(), int) - - # TODO: remove this once 1892 is fixed - @pytest.mark.skipif(MACOS and AARCH64, reason="skipped due to #1892") - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_cpu_freq(self): - if psutil.cpu_freq() is None: - return pytest.skip("cpu_freq() returns None") - self.assert_ntuple_of_nums(psutil.cpu_freq(), type_=(float, int)) - - def test_disk_io_counters(self): - # Duplicate of test_system.py. Keep it anyway. - for k, v in psutil.disk_io_counters(perdisk=True).items(): - assert isinstance(k, str) - self.assert_ntuple_of_nums(v, type_=int) - - def test_disk_partitions(self): - # Duplicate of test_system.py. Keep it anyway. - for disk in psutil.disk_partitions(): - assert isinstance(disk.device, str) - assert isinstance(disk.mountpoint, str) - assert isinstance(disk.fstype, str) - assert isinstance(disk.opts, str) - - @pytest.mark.skipif(SKIP_SYSCONS, reason="requires root") - def test_net_connections(self): - with create_sockets(): - ret = psutil.net_connections('all') - assert len(ret) == len(set(ret)) - for conn in ret: - assert is_namedtuple(conn) - - def test_net_if_addrs(self): - # Duplicate of test_system.py. Keep it anyway. - for ifname, addrs in psutil.net_if_addrs().items(): - assert isinstance(ifname, str) - for addr in addrs: - assert isinstance(addr.family, enum.IntEnum) - assert isinstance(addr.address, str) - assert isinstance(addr.netmask, (str, type(None))) - assert isinstance(addr.broadcast, (str, type(None))) - - def test_net_if_stats(self): - # Duplicate of test_system.py. Keep it anyway. - for ifname, info in psutil.net_if_stats().items(): - assert isinstance(ifname, str) - assert isinstance(info.isup, bool) - assert isinstance(info.duplex, enum.IntEnum) - assert isinstance(info.speed, int) - assert isinstance(info.mtu, int) - - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_net_io_counters(self): - # Duplicate of test_system.py. Keep it anyway. - for ifname in psutil.net_io_counters(pernic=True): - assert isinstance(ifname, str) - - @pytest.mark.skipif(not HAS_SENSORS_FANS, reason="not supported") - def test_sensors_fans(self): - # Duplicate of test_system.py. Keep it anyway. - for name, units in psutil.sensors_fans().items(): - assert isinstance(name, str) - for unit in units: - assert isinstance(unit.label, str) - assert isinstance(unit.current, (float, int, type(None))) - - @pytest.mark.skipif(not HAS_SENSORS_TEMPERATURES, reason="not supported") - def test_sensors_temperatures(self): - # Duplicate of test_system.py. Keep it anyway. - for name, units in psutil.sensors_temperatures().items(): - assert isinstance(name, str) - for unit in units: - assert isinstance(unit.label, str) - assert isinstance(unit.current, (float, int, type(None))) - assert isinstance(unit.high, (float, int, type(None))) - assert isinstance(unit.critical, (float, int, type(None))) - - def test_boot_time(self): - # Duplicate of test_system.py. Keep it anyway. - assert isinstance(psutil.boot_time(), float) - - def test_users(self): - # Duplicate of test_system.py. Keep it anyway. - for user in psutil.users(): - assert isinstance(user.name, str) - assert isinstance(user.terminal, (str, type(None))) - assert isinstance(user.host, (str, type(None))) - assert isinstance(user.pid, (int, type(None))) - if isinstance(user.pid, int): - assert user.pid > 0 - - -class TestProcessWaitType(PsutilTestCase): - @pytest.mark.skipif(not POSIX, reason="not POSIX") - def test_negative_signal(self): - p = psutil.Process(self.spawn_subproc().pid) - p.terminate() - code = p.wait() - assert code == -signal.SIGTERM - assert isinstance(code, enum.IntEnum) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_linux.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_linux.py deleted file mode 100644 index 8db2b9f..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_linux.py +++ /dev/null @@ -1,2289 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Linux specific tests.""" - - -import collections -import contextlib -import errno -import io -import os -import platform -import re -import shutil -import socket -import struct -import textwrap -import time -import warnings -from unittest import mock - -import psutil -from psutil import LINUX -from psutil.tests import AARCH64 -from psutil.tests import GITHUB_ACTIONS -from psutil.tests import GLOBAL_TIMEOUT -from psutil.tests import HAS_BATTERY -from psutil.tests import HAS_CPU_FREQ -from psutil.tests import HAS_GETLOADAVG -from psutil.tests import HAS_RLIMIT -from psutil.tests import RISCV64 -from psutil.tests import TOLERANCE_DISK_USAGE -from psutil.tests import TOLERANCE_SYS_MEM -from psutil.tests import PsutilTestCase -from psutil.tests import ThreadTask -from psutil.tests import call_until -from psutil.tests import pytest -from psutil.tests import reload_module -from psutil.tests import retry_on_failure -from psutil.tests import safe_rmpath -from psutil.tests import sh -from psutil.tests import skip_on_not_implemented - -if LINUX: - from psutil._pslinux import CLOCK_TICKS - from psutil._pslinux import RootFsDeviceFinder - from psutil._pslinux import calculate_avail_vmem - from psutil._pslinux import open_binary - - -HERE = os.path.abspath(os.path.dirname(__file__)) -SIOCGIFADDR = 0x8915 -SIOCGIFHWADDR = 0x8927 -SIOCGIFNETMASK = 0x891B -SIOCGIFBRDADDR = 0x8919 -if LINUX: - SECTOR_SIZE = 512 -# ===================================================================== -# --- utils -# ===================================================================== - - -def get_ipv4_address(ifname): - import fcntl - - ifname = bytes(ifname[:15], "ascii") - with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: - return socket.inet_ntoa( - fcntl.ioctl(s.fileno(), SIOCGIFADDR, struct.pack('256s', ifname))[ - 20:24 - ] - ) - - -def get_ipv4_netmask(ifname): - import fcntl - - ifname = bytes(ifname[:15], "ascii") - with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: - return socket.inet_ntoa( - fcntl.ioctl( - s.fileno(), SIOCGIFNETMASK, struct.pack('256s', ifname) - )[20:24] - ) - - -def get_ipv4_broadcast(ifname): - import fcntl - - ifname = bytes(ifname[:15], "ascii") - with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: - return socket.inet_ntoa( - fcntl.ioctl( - s.fileno(), SIOCGIFBRDADDR, struct.pack('256s', ifname) - )[20:24] - ) - - -def get_ipv6_addresses(ifname): - with open("/proc/net/if_inet6") as f: - all_fields = [] - for line in f: - fields = line.split() - if fields[-1] == ifname: - all_fields.append(fields) - - if len(all_fields) == 0: - raise ValueError(f"could not find interface {ifname!r}") - - for i in range(len(all_fields)): - unformatted = all_fields[i][0] - groups = [ - unformatted[j : j + 4] for j in range(0, len(unformatted), 4) - ] - formatted = ":".join(groups) - packed = socket.inet_pton(socket.AF_INET6, formatted) - all_fields[i] = socket.inet_ntop(socket.AF_INET6, packed) - return all_fields - - -def get_mac_address(ifname): - import fcntl - - ifname = bytes(ifname[:15], "ascii") - with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: - info = fcntl.ioctl( - s.fileno(), SIOCGIFHWADDR, struct.pack('256s', ifname) - ) - return "".join([f"{char:02x}:" for char in info[18:24]])[:-1] - - -def free_swap(): - """Parse 'free' cmd and return swap memory's s total, used and free - values. - """ - out = sh(["free", "-b"], env={"LANG": "C.UTF-8"}) - lines = out.split('\n') - for line in lines: - if line.startswith('Swap'): - _, total, used, free = line.split() - nt = collections.namedtuple('free', 'total used free') - return nt(int(total), int(used), int(free)) - raise ValueError(f"can't find 'Swap' in 'free' output:\n{out}") - - -def free_physmem(): - """Parse 'free' cmd and return physical memory's total, used - and free values. - """ - # Note: free can have 2 different formats, invalidating 'shared' - # and 'cached' memory which may have different positions so we - # do not return them. - # https://github.com/giampaolo/psutil/issues/538#issuecomment-57059946 - out = sh(["free", "-b"], env={"LANG": "C.UTF-8"}) - lines = out.split('\n') - for line in lines: - if line.startswith('Mem'): - total, used, free, shared = (int(x) for x in line.split()[1:5]) - nt = collections.namedtuple( - 'free', 'total used free shared output' - ) - return nt(total, used, free, shared, out) - raise ValueError(f"can't find 'Mem' in 'free' output:\n{out}") - - -def vmstat(stat): - out = sh(["vmstat", "-s"], env={"LANG": "C.UTF-8"}) - for line in out.split("\n"): - line = line.strip() - if stat in line: - return int(line.split(' ')[0]) - raise ValueError(f"can't find {stat!r} in 'vmstat' output") - - -def get_free_version_info(): - out = sh(["free", "-V"]).strip() - if 'UNKNOWN' in out: - return pytest.skip("can't determine free version") - return tuple(map(int, re.findall(r'\d+', out.split()[-1]))) - - -@contextlib.contextmanager -def mock_open_content(pairs): - """Mock open() builtin and forces it to return a certain content - for a given path. `pairs` is a {"path": "content", ...} dict. - """ - - def open_mock(name, *args, **kwargs): - if name in pairs: - content = pairs[name] - if isinstance(content, str): - return io.StringIO(content) - else: - return io.BytesIO(content) - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", create=True, side_effect=open_mock) as m: - yield m - - -@contextlib.contextmanager -def mock_open_exception(for_path, exc): - """Mock open() builtin and raises `exc` if the path being opened - matches `for_path`. - """ - - def open_mock(name, *args, **kwargs): - if name == for_path: - raise exc - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", create=True, side_effect=open_mock) as m: - yield m - - -# ===================================================================== -# --- system virtual memory -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemVirtualMemoryAgainstFree(PsutilTestCase): - def test_total(self): - cli_value = free_physmem().total - psutil_value = psutil.virtual_memory().total - assert cli_value == psutil_value - - @retry_on_failure() - def test_used(self): - # Older versions of procps used slab memory to calculate used memory. - # This got changed in: - # https://gitlab.com/procps-ng/procps/commit/ - # 05d751c4f076a2f0118b914c5e51cfbb4762ad8e - # Newer versions of procps (>=4.0.1) are using yet another way to - # compute used memory. - # https://gitlab.com/procps-ng/procps/commit/ - # 2184e90d2e7cdb582f9a5b706b47015e56707e4d - if get_free_version_info() < (4, 0, 1): - return pytest.skip("free version too old") - cli_value = free_physmem().used - psutil_value = psutil.virtual_memory().used - assert abs(cli_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_free(self): - cli_value = free_physmem().free - psutil_value = psutil.virtual_memory().free - assert abs(cli_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_shared(self): - free = free_physmem() - free_value = free.shared - if free_value == 0: - return pytest.skip("free does not support 'shared' column") - psutil_value = psutil.virtual_memory().shared - assert ( - abs(free_value - psutil_value) < TOLERANCE_SYS_MEM - ), f"{free_value} {psutil_value} \n{free.output}" - - @retry_on_failure() - def test_available(self): - # "free" output format has changed at some point: - # https://github.com/giampaolo/psutil/issues/538#issuecomment-147192098 - out = sh(["free", "-b"]) - lines = out.split('\n') - if 'available' not in lines[0]: - return pytest.skip("free does not support 'available' column") - free_value = int(lines[1].split()[-1]) - psutil_value = psutil.virtual_memory().available - assert abs(free_value - psutil_value) < TOLERANCE_SYS_MEM - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemVirtualMemoryAgainstVmstat(PsutilTestCase): - def test_total(self): - vmstat_value = vmstat('total memory') * 1024 - psutil_value = psutil.virtual_memory().total - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_used(self): - # Older versions of procps used slab memory to calculate used memory. - # This got changed in: - # https://gitlab.com/procps-ng/procps/commit/ - # 05d751c4f076a2f0118b914c5e51cfbb4762ad8e - # Newer versions of procps (>=4.0.1) are using yet another way to - # compute used memory. - # https://gitlab.com/procps-ng/procps/commit/ - # 2184e90d2e7cdb582f9a5b706b47015e56707e4d - if get_free_version_info() < (4, 0, 1): - return pytest.skip("free version too old") - vmstat_value = vmstat('used memory') * 1024 - psutil_value = psutil.virtual_memory().used - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_free(self): - vmstat_value = vmstat('free memory') * 1024 - psutil_value = psutil.virtual_memory().free - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_buffers(self): - vmstat_value = vmstat('buffer memory') * 1024 - psutil_value = psutil.virtual_memory().buffers - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_active(self): - vmstat_value = vmstat('active memory') * 1024 - psutil_value = psutil.virtual_memory().active - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_inactive(self): - vmstat_value = vmstat('inactive memory') * 1024 - psutil_value = psutil.virtual_memory().inactive - assert abs(vmstat_value - psutil_value) < TOLERANCE_SYS_MEM - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemVirtualMemoryMocks(PsutilTestCase): - def test_warnings_on_misses(self): - # Emulate a case where /proc/meminfo provides few info. - # psutil is supposed to set the missing fields to 0 and - # raise a warning. - content = textwrap.dedent("""\ - Active(anon): 6145416 kB - Active(file): 2950064 kB - Inactive(anon): 574764 kB - Inactive(file): 1567648 kB - MemAvailable: -1 kB - MemFree: 2057400 kB - MemTotal: 16325648 kB - SReclaimable: 346648 kB - """).encode() - with mock_open_content({'/proc/meminfo': content}) as m: - with warnings.catch_warnings(record=True) as ws: - warnings.simplefilter("always") - ret = psutil.virtual_memory() - assert m.called - assert len(ws) == 1 - w = ws[0] - assert "memory stats couldn't be determined" in str(w.message) - assert "cached" in str(w.message) - assert "shared" in str(w.message) - assert "active" in str(w.message) - assert "inactive" in str(w.message) - assert "buffers" in str(w.message) - assert "available" in str(w.message) - assert ret.cached == 0 - assert ret.active == 0 - assert ret.inactive == 0 - assert ret.shared == 0 - assert ret.buffers == 0 - assert ret.available == 0 - assert ret.slab == 0 - - @retry_on_failure() - def test_avail_old_percent(self): - # Make sure that our calculation of avail mem for old kernels - # is off by max 15%. - mems = {} - with open_binary('/proc/meminfo') as f: - for line in f: - fields = line.split() - mems[fields[0]] = int(fields[1]) * 1024 - - a = calculate_avail_vmem(mems) - if b'MemAvailable:' in mems: - b = mems[b'MemAvailable:'] - diff_percent = abs(a - b) / a * 100 - assert diff_percent < 15 - - def test_avail_old_comes_from_kernel(self): - # Make sure "MemAvailable:" coluimn is used instead of relying - # on our internal algorithm to calculate avail mem. - content = textwrap.dedent("""\ - Active: 9444728 kB - Active(anon): 6145416 kB - Active(file): 2950064 kB - Buffers: 287952 kB - Cached: 4818144 kB - Inactive(file): 1578132 kB - Inactive(anon): 574764 kB - Inactive(file): 1567648 kB - MemAvailable: 6574984 kB - MemFree: 2057400 kB - MemTotal: 16325648 kB - Shmem: 577588 kB - SReclaimable: 346648 kB - """).encode() - with mock_open_content({'/proc/meminfo': content}) as m: - with warnings.catch_warnings(record=True) as ws: - ret = psutil.virtual_memory() - assert m.called - assert ret.available == 6574984 * 1024 - w = ws[0] - assert "inactive memory stats couldn't be determined" in str( - w.message - ) - - def test_avail_old_missing_fields(self): - # Remove Active(file), Inactive(file) and SReclaimable - # from /proc/meminfo and make sure the fallback is used - # (free + cached), - content = textwrap.dedent("""\ - Active: 9444728 kB - Active(anon): 6145416 kB - Buffers: 287952 kB - Cached: 4818144 kB - Inactive(file): 1578132 kB - Inactive(anon): 574764 kB - MemFree: 2057400 kB - MemTotal: 16325648 kB - Shmem: 577588 kB - """).encode() - with mock_open_content({"/proc/meminfo": content}) as m: - with warnings.catch_warnings(record=True) as ws: - ret = psutil.virtual_memory() - assert m.called - assert ret.available == 2057400 * 1024 + 4818144 * 1024 - w = ws[0] - assert "inactive memory stats couldn't be determined" in str( - w.message - ) - - def test_avail_old_missing_zoneinfo(self): - # Remove /proc/zoneinfo file. Make sure fallback is used - # (free + cached). - content = textwrap.dedent("""\ - Active: 9444728 kB - Active(anon): 6145416 kB - Active(file): 2950064 kB - Buffers: 287952 kB - Cached: 4818144 kB - Inactive(file): 1578132 kB - Inactive(anon): 574764 kB - Inactive(file): 1567648 kB - MemFree: 2057400 kB - MemTotal: 16325648 kB - Shmem: 577588 kB - SReclaimable: 346648 kB - """).encode() - with mock_open_content({"/proc/meminfo": content}): - with mock_open_exception("/proc/zoneinfo", FileNotFoundError): - with warnings.catch_warnings(record=True) as ws: - ret = psutil.virtual_memory() - assert ret.available == 2057400 * 1024 + 4818144 * 1024 - w = ws[0] - assert ( - "inactive memory stats couldn't be determined" - in str(w.message) - ) - - def test_virtual_memory_mocked(self): - # Emulate /proc/meminfo because neither vmstat nor free return slab. - content = textwrap.dedent("""\ - MemTotal: 100 kB - MemFree: 2 kB - MemAvailable: 3 kB - Buffers: 4 kB - Cached: 5 kB - SwapCached: 6 kB - Active: 7 kB - Inactive: 8 kB - Active(anon): 9 kB - Inactive(anon): 10 kB - Active(file): 11 kB - Inactive(file): 12 kB - Unevictable: 13 kB - Mlocked: 14 kB - SwapTotal: 15 kB - SwapFree: 16 kB - Dirty: 17 kB - Writeback: 18 kB - AnonPages: 19 kB - Mapped: 20 kB - Shmem: 21 kB - Slab: 22 kB - SReclaimable: 23 kB - SUnreclaim: 24 kB - KernelStack: 25 kB - PageTables: 26 kB - NFS_Unstable: 27 kB - Bounce: 28 kB - WritebackTmp: 29 kB - CommitLimit: 30 kB - Committed_AS: 31 kB - VmallocTotal: 32 kB - VmallocUsed: 33 kB - VmallocChunk: 34 kB - HardwareCorrupted: 35 kB - AnonHugePages: 36 kB - ShmemHugePages: 37 kB - ShmemPmdMapped: 38 kB - CmaTotal: 39 kB - CmaFree: 40 kB - HugePages_Total: 41 kB - HugePages_Free: 42 kB - HugePages_Rsvd: 43 kB - HugePages_Surp: 44 kB - Hugepagesize: 45 kB - DirectMap46k: 46 kB - DirectMap47M: 47 kB - DirectMap48G: 48 kB - """).encode() - with mock_open_content({"/proc/meminfo": content}) as m: - mem = psutil.virtual_memory() - assert m.called - assert mem.total == 100 * 1024 - assert mem.free == 2 * 1024 - assert mem.buffers == 4 * 1024 - # cached mem also includes reclaimable memory - assert mem.cached == (5 + 23) * 1024 - assert mem.shared == 21 * 1024 - assert mem.active == 7 * 1024 - assert mem.inactive == 8 * 1024 - assert mem.slab == 22 * 1024 - assert mem.available == 3 * 1024 - - -# ===================================================================== -# --- system swap memory -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemSwapMemory(PsutilTestCase): - @staticmethod - def meminfo_has_swap_info(): - """Return True if /proc/meminfo provides swap metrics.""" - with open("/proc/meminfo") as f: - data = f.read() - return 'SwapTotal:' in data and 'SwapFree:' in data - - def test_total(self): - free_value = free_swap().total - psutil_value = psutil.swap_memory().total - assert abs(free_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_used(self): - free_value = free_swap().used - psutil_value = psutil.swap_memory().used - assert abs(free_value - psutil_value) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_free(self): - free_value = free_swap().free - psutil_value = psutil.swap_memory().free - assert abs(free_value - psutil_value) < TOLERANCE_SYS_MEM - - def test_missing_sin_sout(self): - with mock.patch('psutil._common.open', create=True) as m: - with warnings.catch_warnings(record=True) as ws: - warnings.simplefilter("always") - ret = psutil.swap_memory() - assert m.called - assert len(ws) == 1 - w = ws[0] - assert ( - "'sin' and 'sout' swap memory stats couldn't be determined" - in str(w.message) - ) - assert ret.sin == 0 - assert ret.sout == 0 - - def test_no_vmstat_mocked(self): - # see https://github.com/giampaolo/psutil/issues/722 - with mock_open_exception("/proc/vmstat", FileNotFoundError) as m: - with warnings.catch_warnings(record=True) as ws: - warnings.simplefilter("always") - ret = psutil.swap_memory() - assert m.called - assert len(ws) == 1 - w = ws[0] - assert ( - "'sin' and 'sout' swap memory stats couldn't " - "be determined and were set to 0" - in str(w.message) - ) - assert ret.sin == 0 - assert ret.sout == 0 - - def test_meminfo_against_sysinfo(self): - # Make sure the content of /proc/meminfo about swap memory - # matches sysinfo() syscall, see: - # https://github.com/giampaolo/psutil/issues/1015 - if not self.meminfo_has_swap_info(): - return pytest.skip("/proc/meminfo has no swap metrics") - with mock.patch('psutil._pslinux.cext.linux_sysinfo') as m: - swap = psutil.swap_memory() - assert not m.called - import psutil._psutil_linux as cext - - _, _, _, _, total, free, unit_multiplier = cext.linux_sysinfo() - total *= unit_multiplier - free *= unit_multiplier - assert swap.total == total - assert abs(swap.free - free) < TOLERANCE_SYS_MEM - - def test_emulate_meminfo_has_no_metrics(self): - # Emulate a case where /proc/meminfo provides no swap metrics - # in which case sysinfo() syscall is supposed to be used - # as a fallback. - with mock_open_content({"/proc/meminfo": b""}) as m: - psutil.swap_memory() - assert m.called - - -# ===================================================================== -# --- system CPU -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemCPUTimes(PsutilTestCase): - def test_fields(self): - fields = psutil.cpu_times()._fields - kernel_ver = re.findall(r'\d+\.\d+\.\d+', os.uname()[2])[0] - kernel_ver_info = tuple(map(int, kernel_ver.split('.'))) - if kernel_ver_info >= (2, 6, 11): - assert 'steal' in fields - else: - assert 'steal' not in fields - if kernel_ver_info >= (2, 6, 24): - assert 'guest' in fields - else: - assert 'guest' not in fields - if kernel_ver_info >= (3, 2, 0): - assert 'guest_nice' in fields - else: - assert 'guest_nice' not in fields - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemCPUCountLogical(PsutilTestCase): - @pytest.mark.skipif( - not os.path.exists("/sys/devices/system/cpu/online"), - reason="/sys/devices/system/cpu/online does not exist", - ) - def test_against_sysdev_cpu_online(self): - with open("/sys/devices/system/cpu/online") as f: - value = f.read().strip() - if "-" in str(value): - value = int(value.split('-')[1]) + 1 - assert psutil.cpu_count() == value - - @pytest.mark.skipif( - not os.path.exists("/sys/devices/system/cpu"), - reason="/sys/devices/system/cpu does not exist", - ) - def test_against_sysdev_cpu_num(self): - ls = os.listdir("/sys/devices/system/cpu") - count = len([x for x in ls if re.search(r"cpu\d+$", x) is not None]) - assert psutil.cpu_count() == count - - @pytest.mark.skipif( - not shutil.which("nproc"), reason="nproc utility not available" - ) - def test_against_nproc(self): - num = int(sh("nproc --all")) - assert psutil.cpu_count(logical=True) == num - - @pytest.mark.skipif( - not shutil.which("lscpu"), reason="lscpu utility not available" - ) - def test_against_lscpu(self): - out = sh("lscpu -p") - num = len([x for x in out.split('\n') if not x.startswith('#')]) - assert psutil.cpu_count(logical=True) == num - - def test_emulate_fallbacks(self): - import psutil._pslinux - - original = psutil._pslinux.cpu_count_logical() - # Here we want to mock os.sysconf("SC_NPROCESSORS_ONLN") in - # order to cause the parsing of /proc/cpuinfo and /proc/stat. - with mock.patch( - 'psutil._pslinux.os.sysconf', side_effect=ValueError - ) as m: - assert psutil._pslinux.cpu_count_logical() == original - assert m.called - - # Let's have open() return empty data and make sure None is - # returned ('cause we mimic os.cpu_count()). - with mock.patch('psutil._common.open', create=True) as m: - assert psutil._pslinux.cpu_count_logical() is None - assert m.call_count == 2 - # /proc/stat should be the last one - assert m.call_args[0][0] == '/proc/stat' - - # Let's push this a bit further and make sure /proc/cpuinfo - # parsing works as expected. - with open('/proc/cpuinfo', 'rb') as f: - cpuinfo_data = f.read() - fake_file = io.BytesIO(cpuinfo_data) - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert psutil._pslinux.cpu_count_logical() == original - - # Finally, let's make /proc/cpuinfo return meaningless data; - # this way we'll fall back on relying on /proc/stat - with mock_open_content({"/proc/cpuinfo": b""}) as m: - assert psutil._pslinux.cpu_count_logical() == original - assert m.called - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemCPUCountCores(PsutilTestCase): - @pytest.mark.skipif( - not shutil.which("lscpu"), reason="lscpu utility not available" - ) - def test_against_lscpu(self): - out = sh("lscpu -p") - core_ids = set() - for line in out.split('\n'): - if not line.startswith('#'): - fields = line.split(',') - core_ids.add(fields[1]) - assert psutil.cpu_count(logical=False) == len(core_ids) - - @pytest.mark.skipif( - platform.machine() not in {"x86_64", "i686"}, reason="x86_64/i686 only" - ) - def test_method_2(self): - meth_1 = psutil._pslinux.cpu_count_cores() - with mock.patch('glob.glob', return_value=[]) as m: - meth_2 = psutil._pslinux.cpu_count_cores() - assert m.called - if meth_1 is not None: - assert meth_1 == meth_2 - - def test_emulate_none(self): - with mock.patch('glob.glob', return_value=[]) as m1: - with mock.patch('psutil._common.open', create=True) as m2: - assert psutil._pslinux.cpu_count_cores() is None - assert m1.called - assert m2.called - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemCPUFrequency(PsutilTestCase): - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - @pytest.mark.skipif( - AARCH64, reason="aarch64 does not always expose frequency" - ) - def test_emulate_use_second_file(self): - # https://github.com/giampaolo/psutil/issues/981 - def path_exists_mock(path): - if path.startswith("/sys/devices/system/cpu/cpufreq/policy"): - return False - else: - return orig_exists(path) - - orig_exists = os.path.exists - with mock.patch( - "os.path.exists", side_effect=path_exists_mock, create=True - ): - assert psutil.cpu_freq() - - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - @pytest.mark.skipif( - AARCH64 or RISCV64, - reason=f"{platform.machine()} does not report mhz in /proc/cpuinfo", - ) - def test_emulate_use_cpuinfo(self): - # Emulate a case where /sys/devices/system/cpu/cpufreq* does not - # exist and /proc/cpuinfo is used instead. - def path_exists_mock(path): - if path.startswith('/sys/devices/system/cpu/'): - return False - else: - return os_path_exists(path) - - os_path_exists = os.path.exists - try: - with mock.patch("os.path.exists", side_effect=path_exists_mock): - reload_module(psutil._pslinux) - ret = psutil.cpu_freq() - assert ret, ret - assert ret.max == 0.0 - assert ret.min == 0.0 - for freq in psutil.cpu_freq(percpu=True): - assert freq.max == 0.0 - assert freq.min == 0.0 - finally: - reload_module(psutil._pslinux) - reload_module(psutil) - - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_emulate_data(self): - def open_mock(name, *args, **kwargs): - if name.endswith('/scaling_cur_freq') and name.startswith( - "/sys/devices/system/cpu/cpufreq/policy" - ): - return io.BytesIO(b"500000") - elif name.endswith('/scaling_min_freq') and name.startswith( - "/sys/devices/system/cpu/cpufreq/policy" - ): - return io.BytesIO(b"600000") - elif name.endswith('/scaling_max_freq') and name.startswith( - "/sys/devices/system/cpu/cpufreq/policy" - ): - return io.BytesIO(b"700000") - elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 500") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - with mock.patch('os.path.exists', return_value=True): - freq = psutil.cpu_freq() - assert freq.current == 500.0 - # when /proc/cpuinfo is used min and max frequencies are not - # available and are set to 0. - if freq.min != 0.0: - assert freq.min == 600.0 - if freq.max != 0.0: - assert freq.max == 700.0 - - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_emulate_multi_cpu(self): - def open_mock(name, *args, **kwargs): - n = name - if n.endswith('/scaling_cur_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy0" - ): - return io.BytesIO(b"100000") - elif n.endswith('/scaling_min_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy0" - ): - return io.BytesIO(b"200000") - elif n.endswith('/scaling_max_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy0" - ): - return io.BytesIO(b"300000") - elif n.endswith('/scaling_cur_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy1" - ): - return io.BytesIO(b"400000") - elif n.endswith('/scaling_min_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy1" - ): - return io.BytesIO(b"500000") - elif n.endswith('/scaling_max_freq') and n.startswith( - "/sys/devices/system/cpu/cpufreq/policy1" - ): - return io.BytesIO(b"600000") - elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 100\ncpu MHz : 400") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - with mock.patch('os.path.exists', return_value=True): - with mock.patch( - 'psutil._pslinux.cpu_count_logical', return_value=2 - ): - freq = psutil.cpu_freq(percpu=True) - assert freq[0].current == 100.0 - if freq[0].min != 0.0: - assert freq[0].min == 200.0 - if freq[0].max != 0.0: - assert freq[0].max == 300.0 - assert freq[1].current == 400.0 - if freq[1].min != 0.0: - assert freq[1].min == 500.0 - if freq[1].max != 0.0: - assert freq[1].max == 600.0 - - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_emulate_no_scaling_cur_freq_file(self): - # See: https://github.com/giampaolo/psutil/issues/1071 - def open_mock(name, *args, **kwargs): - if name.endswith('/scaling_cur_freq'): - raise FileNotFoundError - if name.endswith('/cpuinfo_cur_freq'): - return io.BytesIO(b"200000") - elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 200") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - with mock.patch('os.path.exists', return_value=True): - with mock.patch( - 'psutil._pslinux.cpu_count_logical', return_value=1 - ): - freq = psutil.cpu_freq() - assert freq.current == 200 - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemCPUStats(PsutilTestCase): - - # XXX: fails too often. - # def test_ctx_switches(self): - # vmstat_value = vmstat("context switches") - # psutil_value = psutil.cpu_stats().ctx_switches - # assert abs(vmstat_value - psutil_value) < 500 - - def test_interrupts(self): - vmstat_value = vmstat("interrupts") - psutil_value = psutil.cpu_stats().interrupts - assert abs(vmstat_value - psutil_value) < 500 - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestLoadAvg(PsutilTestCase): - @pytest.mark.skipif(not HAS_GETLOADAVG, reason="not supported") - def test_getloadavg(self): - psutil_value = psutil.getloadavg() - with open("/proc/loadavg") as f: - proc_value = f.read().split() - - assert abs(float(proc_value[0]) - psutil_value[0]) < 1 - assert abs(float(proc_value[1]) - psutil_value[1]) < 1 - assert abs(float(proc_value[2]) - psutil_value[2]) < 1 - - -# ===================================================================== -# --- system network -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemNetIfAddrs(PsutilTestCase): - def test_ips(self): - for name, addrs in psutil.net_if_addrs().items(): - for addr in addrs: - if addr.family == psutil.AF_LINK: - assert addr.address == get_mac_address(name) - elif addr.family == socket.AF_INET: - assert addr.address == get_ipv4_address(name) - assert addr.netmask == get_ipv4_netmask(name) - if addr.broadcast is not None: - assert addr.broadcast == get_ipv4_broadcast(name) - else: - assert get_ipv4_broadcast(name) == '0.0.0.0' - elif addr.family == socket.AF_INET6: - # IPv6 addresses can have a percent symbol at the end. - # E.g. these 2 are equivalent: - # "fe80::1ff:fe23:4567:890a" - # "fe80::1ff:fe23:4567:890a%eth0" - # That is the "zone id" portion, which usually is the name - # of the network interface. - address = addr.address.split('%')[0] - assert address in get_ipv6_addresses(name) - - # XXX - not reliable when having virtual NICs installed by Docker. - # @pytest.mark.skipif(not shutil.which("ip"), - # reason="'ip' utility not available") - # def test_net_if_names(self): - # out = sh("ip addr").strip() - # nics = [x for x in psutil.net_if_addrs().keys() if ':' not in x] - # found = 0 - # for line in out.split('\n'): - # line = line.strip() - # if re.search(r"^\d+:", line): - # found += 1 - # name = line.split(':')[1].strip() - # assert name in nics - # assert len(nics) == found - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemNetIfStats(PsutilTestCase): - @pytest.mark.skipif( - not shutil.which("ifconfig"), reason="ifconfig utility not available" - ) - def test_against_ifconfig(self): - for name, stats in psutil.net_if_stats().items(): - try: - out = sh(f"ifconfig {name}") - except RuntimeError: - pass - else: - assert stats.isup == ('RUNNING' in out), out - assert stats.mtu == int( - re.findall(r'(?i)MTU[: ](\d+)', out)[0] - ) - - def test_mtu(self): - for name, stats in psutil.net_if_stats().items(): - with open(f"/sys/class/net/{name}/mtu") as f: - assert stats.mtu == int(f.read().strip()) - - @pytest.mark.skipif( - not shutil.which("ifconfig"), reason="ifconfig utility not available" - ) - def test_flags(self): - # first line looks like this: - # "eth0: flags=4163 mtu 1500" - matches_found = 0 - for name, stats in psutil.net_if_stats().items(): - try: - out = sh(f"ifconfig {name}") - except RuntimeError: - pass - else: - match = re.search(r"flags=(\d+)?<(.*?)>", out) - if match and len(match.groups()) >= 2: - matches_found += 1 - ifconfig_flags = set(match.group(2).lower().split(",")) - psutil_flags = set(stats.flags.split(",")) - assert ifconfig_flags == psutil_flags - else: - # ifconfig has a different output on CentOS 6 - # let's try that - match = re.search(r"(.*) MTU:(\d+) Metric:(\d+)", out) - if match and len(match.groups()) >= 3: - matches_found += 1 - ifconfig_flags = set(match.group(1).lower().split()) - psutil_flags = set(stats.flags.split(",")) - assert ifconfig_flags == psutil_flags - - if not matches_found: - return pytest.fail("no matches were found") - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemNetIOCounters(PsutilTestCase): - @pytest.mark.skipif( - not shutil.which("ifconfig"), reason="ifconfig utility not available" - ) - @retry_on_failure() - def test_against_ifconfig(self): - def ifconfig(nic): - ret = {} - out = sh(f"ifconfig {nic}") - ret['packets_recv'] = int( - re.findall(r'RX packets[: ](\d+)', out)[0] - ) - ret['packets_sent'] = int( - re.findall(r'TX packets[: ](\d+)', out)[0] - ) - ret['errin'] = int(re.findall(r'errors[: ](\d+)', out)[0]) - ret['errout'] = int(re.findall(r'errors[: ](\d+)', out)[1]) - ret['dropin'] = int(re.findall(r'dropped[: ](\d+)', out)[0]) - ret['dropout'] = int(re.findall(r'dropped[: ](\d+)', out)[1]) - ret['bytes_recv'] = int( - re.findall(r'RX (?:packets \d+ +)?bytes[: ](\d+)', out)[0] - ) - ret['bytes_sent'] = int( - re.findall(r'TX (?:packets \d+ +)?bytes[: ](\d+)', out)[0] - ) - return ret - - nio = psutil.net_io_counters(pernic=True, nowrap=False) - for name, stats in nio.items(): - try: - ifconfig_ret = ifconfig(name) - except RuntimeError: - continue - assert ( - abs(stats.bytes_recv - ifconfig_ret['bytes_recv']) < 1024 * 10 - ) - assert ( - abs(stats.bytes_sent - ifconfig_ret['bytes_sent']) < 1024 * 10 - ) - assert ( - abs(stats.packets_recv - ifconfig_ret['packets_recv']) < 1024 - ) - assert ( - abs(stats.packets_sent - ifconfig_ret['packets_sent']) < 1024 - ) - assert abs(stats.errin - ifconfig_ret['errin']) < 10 - assert abs(stats.errout - ifconfig_ret['errout']) < 10 - assert abs(stats.dropin - ifconfig_ret['dropin']) < 10 - assert abs(stats.dropout - ifconfig_ret['dropout']) < 10 - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemNetConnections(PsutilTestCase): - @mock.patch('psutil._pslinux.socket.inet_ntop', side_effect=ValueError) - @mock.patch('psutil._pslinux.supports_ipv6', return_value=False) - def test_emulate_ipv6_unsupported(self, supports_ipv6, inet_ntop): - # see: https://github.com/giampaolo/psutil/issues/623 - with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s: - try: - s.bind(("::1", 0)) - except OSError: - pass - psutil.net_connections(kind='inet6') - - def test_emulate_unix(self): - content = textwrap.dedent("""\ - 0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n - 0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ - 0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O - 000000000000000000000000000000000000000000000000000000 - """) - with mock_open_content({"/proc/net/unix": content}) as m: - psutil.net_connections(kind='unix') - assert m.called - - -# ===================================================================== -# --- system disks -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemDiskPartitions(PsutilTestCase): - @pytest.mark.skipif( - not hasattr(os, 'statvfs'), reason="os.statvfs() not available" - ) - @skip_on_not_implemented() - def test_against_df(self): - # test psutil.disk_usage() and psutil.disk_partitions() - # against "df -a" - def df(path): - out = sh(f'df -P -B 1 "{path}"').strip() - lines = out.split('\n') - lines.pop(0) - line = lines.pop(0) - dev, total, used, free = line.split()[:4] - if dev == 'none': - dev = '' - total, used, free = int(total), int(used), int(free) - return dev, total, used, free - - for part in psutil.disk_partitions(all=False): - usage = psutil.disk_usage(part.mountpoint) - _, total, used, free = df(part.mountpoint) - assert usage.total == total - assert abs(usage.free - free) < TOLERANCE_DISK_USAGE - assert abs(usage.used - used) < TOLERANCE_DISK_USAGE - - def test_zfs_fs(self): - # Test that ZFS partitions are returned. - with open("/proc/filesystems") as f: - data = f.read() - if 'zfs' in data: - for part in psutil.disk_partitions(): - if part.fstype == 'zfs': - return - - # No ZFS partitions on this system. Let's fake one. - fake_file = io.StringIO("nodev\tzfs\n") - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m1: - with mock.patch( - 'psutil._pslinux.cext.disk_partitions', - return_value=[('/dev/sdb3', '/', 'zfs', 'rw')], - ) as m2: - ret = psutil.disk_partitions() - assert m1.called - assert m2.called - assert ret - assert ret[0].fstype == 'zfs' - - def test_emulate_realpath_fail(self): - # See: https://github.com/giampaolo/psutil/issues/1307 - try: - with mock.patch( - 'os.path.realpath', return_value='/non/existent' - ) as m: - with pytest.raises(FileNotFoundError): - psutil.disk_partitions() - assert m.called - finally: - psutil.PROCFS_PATH = "/proc" - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSystemDiskIoCounters(PsutilTestCase): - def test_emulate_kernel_2_4(self): - # Tests /proc/diskstats parsing format for 2.4 kernels, see: - # https://github.com/giampaolo/psutil/issues/767 - content = " 3 0 1 hda 2 3 4 5 6 7 8 9 10 11 12" - with mock_open_content({'/proc/diskstats': content}): - with mock.patch( - 'psutil._pslinux.is_storage_device', return_value=True - ): - ret = psutil.disk_io_counters(nowrap=False) - assert ret.read_count == 1 - assert ret.read_merged_count == 2 - assert ret.read_bytes == 3 * SECTOR_SIZE - assert ret.read_time == 4 - assert ret.write_count == 5 - assert ret.write_merged_count == 6 - assert ret.write_bytes == 7 * SECTOR_SIZE - assert ret.write_time == 8 - assert ret.busy_time == 10 - - def test_emulate_kernel_2_6_full(self): - # Tests /proc/diskstats parsing format for 2.6 kernels, - # lines reporting all metrics: - # https://github.com/giampaolo/psutil/issues/767 - content = " 3 0 hda 1 2 3 4 5 6 7 8 9 10 11" - with mock_open_content({"/proc/diskstats": content}): - with mock.patch( - 'psutil._pslinux.is_storage_device', return_value=True - ): - ret = psutil.disk_io_counters(nowrap=False) - assert ret.read_count == 1 - assert ret.read_merged_count == 2 - assert ret.read_bytes == 3 * SECTOR_SIZE - assert ret.read_time == 4 - assert ret.write_count == 5 - assert ret.write_merged_count == 6 - assert ret.write_bytes == 7 * SECTOR_SIZE - assert ret.write_time == 8 - assert ret.busy_time == 10 - - def test_emulate_kernel_2_6_limited(self): - # Tests /proc/diskstats parsing format for 2.6 kernels, - # where one line of /proc/partitions return a limited - # amount of metrics when it bumps into a partition - # (instead of a disk). See: - # https://github.com/giampaolo/psutil/issues/767 - with mock_open_content({"/proc/diskstats": " 3 1 hda 1 2 3 4"}): - with mock.patch( - 'psutil._pslinux.is_storage_device', return_value=True - ): - ret = psutil.disk_io_counters(nowrap=False) - assert ret.read_count == 1 - assert ret.read_bytes == 2 * SECTOR_SIZE - assert ret.write_count == 3 - assert ret.write_bytes == 4 * SECTOR_SIZE - - assert ret.read_merged_count == 0 - assert ret.read_time == 0 - assert ret.write_merged_count == 0 - assert ret.write_time == 0 - assert ret.busy_time == 0 - - def test_emulate_include_partitions(self): - # Make sure that when perdisk=True disk partitions are returned, - # see: - # https://github.com/giampaolo/psutil/pull/1313#issuecomment-408626842 - content = textwrap.dedent("""\ - 3 0 nvme0n1 1 2 3 4 5 6 7 8 9 10 11 - 3 0 nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11 - """) - with mock_open_content({"/proc/diskstats": content}): - with mock.patch( - 'psutil._pslinux.is_storage_device', return_value=False - ): - ret = psutil.disk_io_counters(perdisk=True, nowrap=False) - assert len(ret) == 2 - assert ret['nvme0n1'].read_count == 1 - assert ret['nvme0n1p1'].read_count == 1 - assert ret['nvme0n1'].write_count == 5 - assert ret['nvme0n1p1'].write_count == 5 - - def test_emulate_exclude_partitions(self): - # Make sure that when perdisk=False partitions (e.g. 'sda1', - # 'nvme0n1p1') are skipped and not included in the total count. - # https://github.com/giampaolo/psutil/pull/1313#issuecomment-408626842 - content = textwrap.dedent("""\ - 3 0 nvme0n1 1 2 3 4 5 6 7 8 9 10 11 - 3 0 nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11 - """) - with mock_open_content({"/proc/diskstats": content}): - with mock.patch( - 'psutil._pslinux.is_storage_device', return_value=False - ): - ret = psutil.disk_io_counters(perdisk=False, nowrap=False) - assert ret is None - - def is_storage_device(name): - return name == 'nvme0n1' - - content = textwrap.dedent("""\ - 3 0 nvme0n1 1 2 3 4 5 6 7 8 9 10 11 - 3 0 nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11 - """) - with mock_open_content({"/proc/diskstats": content}): - with mock.patch( - 'psutil._pslinux.is_storage_device', - create=True, - side_effect=is_storage_device, - ): - ret = psutil.disk_io_counters(perdisk=False, nowrap=False) - assert ret.read_count == 1 - assert ret.write_count == 5 - - def test_emulate_use_sysfs(self): - def exists(path): - return path == '/proc/diskstats' - - wprocfs = psutil.disk_io_counters(perdisk=True) - with mock.patch( - 'psutil._pslinux.os.path.exists', create=True, side_effect=exists - ): - wsysfs = psutil.disk_io_counters(perdisk=True) - assert len(wprocfs) == len(wsysfs) - - def test_emulate_not_impl(self): - def exists(path): - return False - - with mock.patch( - 'psutil._pslinux.os.path.exists', create=True, side_effect=exists - ): - with pytest.raises(NotImplementedError): - psutil.disk_io_counters() - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestRootFsDeviceFinder(PsutilTestCase): - def setUp(self): - dev = os.stat("/").st_dev - self.major = os.major(dev) - self.minor = os.minor(dev) - - def test_call_methods(self): - finder = RootFsDeviceFinder() - if os.path.exists("/proc/partitions"): - finder.ask_proc_partitions() - else: - with pytest.raises(FileNotFoundError): - finder.ask_proc_partitions() - if os.path.exists(f"/sys/dev/block/{self.major}:{self.minor}/uevent"): - finder.ask_sys_dev_block() - else: - with pytest.raises(FileNotFoundError): - finder.ask_sys_dev_block() - finder.ask_sys_class_block() - - @pytest.mark.skipif(GITHUB_ACTIONS, reason="unsupported on GITHUB_ACTIONS") - def test_comparisons(self): - finder = RootFsDeviceFinder() - assert finder.find() is not None - - a = b = c = None - if os.path.exists("/proc/partitions"): - a = finder.ask_proc_partitions() - if os.path.exists(f"/sys/dev/block/{self.major}:{self.minor}/uevent"): - b = finder.ask_sys_class_block() - c = finder.ask_sys_dev_block() - - base = a or b or c - if base and a: - assert base == a - if base and b: - assert base == b - if base and c: - assert base == c - - @pytest.mark.skipif( - not shutil.which("findmnt"), reason="findmnt utility not available" - ) - @pytest.mark.skipif(GITHUB_ACTIONS, reason="unsupported on GITHUB_ACTIONS") - def test_against_findmnt(self): - psutil_value = RootFsDeviceFinder().find() - findmnt_value = sh("findmnt -o SOURCE -rn /") - assert psutil_value == findmnt_value - - def test_disk_partitions_mocked(self): - with mock.patch( - 'psutil._pslinux.cext.disk_partitions', - return_value=[('/dev/root', '/', 'ext4', 'rw')], - ) as m: - part = psutil.disk_partitions()[0] - assert m.called - if not GITHUB_ACTIONS: - assert part.device != "/dev/root" - assert part.device == RootFsDeviceFinder().find() - else: - assert part.device == "/dev/root" - - -# ===================================================================== -# --- misc -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestMisc(PsutilTestCase): - def test_boot_time(self): - vmstat_value = vmstat('boot time') - psutil_value = psutil.boot_time() - assert int(vmstat_value) == int(psutil_value) - - def test_no_procfs_on_import(self): - my_procfs = self.get_testfn() - os.mkdir(my_procfs) - - with open(os.path.join(my_procfs, 'stat'), 'w') as f: - f.write('cpu 0 0 0 0 0 0 0 0 0 0\n') - f.write('cpu0 0 0 0 0 0 0 0 0 0 0\n') - f.write('cpu1 0 0 0 0 0 0 0 0 0 0\n') - - try: - orig_open = open - - def open_mock(name, *args, **kwargs): - if name.startswith('/proc'): - raise FileNotFoundError - return orig_open(name, *args, **kwargs) - - with mock.patch("builtins.open", side_effect=open_mock): - reload_module(psutil) - - with pytest.raises(OSError): - psutil.cpu_times() - with pytest.raises(OSError): - psutil.cpu_times(percpu=True) - with pytest.raises(OSError): - psutil.cpu_percent() - with pytest.raises(OSError): - psutil.cpu_percent(percpu=True) - with pytest.raises(OSError): - psutil.cpu_times_percent() - with pytest.raises(OSError): - psutil.cpu_times_percent(percpu=True) - - psutil.PROCFS_PATH = my_procfs - - assert psutil.cpu_percent() == 0 - assert sum(psutil.cpu_times_percent()) == 0 - - # since we don't know the number of CPUs at import time, - # we awkwardly say there are none until the second call - per_cpu_percent = psutil.cpu_percent(percpu=True) - assert sum(per_cpu_percent) == 0 - - # ditto awkward length - per_cpu_times_percent = psutil.cpu_times_percent(percpu=True) - assert sum(map(sum, per_cpu_times_percent)) == 0 - - # much user, very busy - with open(os.path.join(my_procfs, 'stat'), 'w') as f: - f.write('cpu 1 0 0 0 0 0 0 0 0 0\n') - f.write('cpu0 1 0 0 0 0 0 0 0 0 0\n') - f.write('cpu1 1 0 0 0 0 0 0 0 0 0\n') - - assert psutil.cpu_percent() != 0 - assert sum(psutil.cpu_percent(percpu=True)) != 0 - assert sum(psutil.cpu_times_percent()) != 0 - assert ( - sum(map(sum, psutil.cpu_times_percent(percpu=True))) != 0 - ) - finally: - shutil.rmtree(my_procfs) - reload_module(psutil) - - assert psutil.PROCFS_PATH == '/proc' - - def test_cpu_steal_decrease(self): - # Test cumulative cpu stats decrease. We should ignore this. - # See issue #1210. - content = textwrap.dedent("""\ - cpu 0 0 0 0 0 0 0 1 0 0 - cpu0 0 0 0 0 0 0 0 1 0 0 - cpu1 0 0 0 0 0 0 0 1 0 0 - """).encode() - with mock_open_content({"/proc/stat": content}) as m: - # first call to "percent" functions should read the new stat file - # and compare to the "real" file read at import time - so the - # values are meaningless - psutil.cpu_percent() - assert m.called - psutil.cpu_percent(percpu=True) - psutil.cpu_times_percent() - psutil.cpu_times_percent(percpu=True) - - content = textwrap.dedent("""\ - cpu 1 0 0 0 0 0 0 0 0 0 - cpu0 1 0 0 0 0 0 0 0 0 0 - cpu1 1 0 0 0 0 0 0 0 0 0 - """).encode() - with mock_open_content({"/proc/stat": content}): - # Increase "user" while steal goes "backwards" to zero. - cpu_percent = psutil.cpu_percent() - assert m.called - cpu_percent_percpu = psutil.cpu_percent(percpu=True) - cpu_times_percent = psutil.cpu_times_percent() - cpu_times_percent_percpu = psutil.cpu_times_percent(percpu=True) - assert cpu_percent != 0 - assert sum(cpu_percent_percpu) != 0 - assert sum(cpu_times_percent) != 0 - assert sum(cpu_times_percent) != 100.0 - assert sum(map(sum, cpu_times_percent_percpu)) != 0 - assert sum(map(sum, cpu_times_percent_percpu)) != 100.0 - assert cpu_times_percent.steal == 0 - assert cpu_times_percent.user != 0 - - def test_boot_time_mocked(self): - with mock.patch('psutil._common.open', create=True) as m: - with pytest.raises(RuntimeError): - psutil._pslinux.boot_time() - assert m.called - - def test_users(self): - # Make sure the C extension converts ':0' and ':0.0' to - # 'localhost'. - for user in psutil.users(): - assert user.host not in {":0", ":0.0"} - - def test_procfs_path(self): - tdir = self.get_testfn() - os.mkdir(tdir) - try: - psutil.PROCFS_PATH = tdir - with pytest.raises(OSError): - psutil.virtual_memory() - with pytest.raises(OSError): - psutil.cpu_times() - with pytest.raises(OSError): - psutil.cpu_times(percpu=True) - with pytest.raises(OSError): - psutil.boot_time() - with pytest.raises(OSError): - psutil.net_connections() - with pytest.raises(OSError): - psutil.net_io_counters() - with pytest.raises(OSError): - psutil.net_if_stats() - with pytest.raises(OSError): - psutil.disk_partitions() - with pytest.raises(psutil.NoSuchProcess): - psutil.Process() - finally: - psutil.PROCFS_PATH = "/proc" - - @retry_on_failure() - @pytest.mark.xdist_group(name="serial") - def test_issue_687(self): - # In case of thread ID: - # - pid_exists() is supposed to return False - # - Process(tid) is supposed to work - # - pids() should not return the TID - # See: https://github.com/giampaolo/psutil/issues/687 - - p = psutil.Process() - nthreads = len(p.threads()) - with ThreadTask(): - threads = p.threads() - assert len(threads) == nthreads + 1 - tid = sorted(threads, key=lambda x: x.id)[1].id - assert p.pid != tid - pt = psutil.Process(tid) - pt.as_dict() - assert tid not in psutil.pids() - - def test_pid_exists_no_proc_status(self): - # Internally pid_exists relies on /proc/{pid}/status. - # Emulate a case where this file is empty in which case - # psutil is supposed to fall back on using pids(). - with mock_open_content({"/proc/%s/status": ""}) as m: - assert psutil.pid_exists(os.getpid()) - assert m.called - - -# ===================================================================== -# --- sensors -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -@pytest.mark.skipif(not HAS_BATTERY, reason="no battery") -class TestSensorsBattery(PsutilTestCase): - @pytest.mark.skipif( - not shutil.which("acpi"), reason="acpi utility not available" - ) - def test_percent(self): - out = sh("acpi -b") - acpi_value = int(out.split(",")[1].strip().replace('%', '')) - psutil_value = psutil.sensors_battery().percent - assert abs(acpi_value - psutil_value) < 1 - - def test_emulate_power_plugged(self): - # Pretend the AC power cable is connected. - def open_mock(name, *args, **kwargs): - if name.endswith(('AC0/online', 'AC/online')): - return io.BytesIO(b"1") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock) as m: - assert psutil.sensors_battery().power_plugged is True - assert ( - psutil.sensors_battery().secsleft - == psutil.POWER_TIME_UNLIMITED - ) - assert m.called - - def test_emulate_power_plugged_2(self): - # Same as above but pretend /AC0/online does not exist in which - # case code relies on /status file. - def open_mock(name, *args, **kwargs): - if name.endswith(('AC0/online', 'AC/online')): - raise FileNotFoundError - if name.endswith("/status"): - return io.StringIO("charging") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock) as m: - assert psutil.sensors_battery().power_plugged is True - assert m.called - - def test_emulate_power_not_plugged(self): - # Pretend the AC power cable is not connected. - def open_mock(name, *args, **kwargs): - if name.endswith(('AC0/online', 'AC/online')): - return io.BytesIO(b"0") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock) as m: - assert psutil.sensors_battery().power_plugged is False - assert m.called - - def test_emulate_power_not_plugged_2(self): - # Same as above but pretend /AC0/online does not exist in which - # case code relies on /status file. - def open_mock(name, *args, **kwargs): - if name.endswith(('AC0/online', 'AC/online')): - raise FileNotFoundError - if name.endswith("/status"): - return io.StringIO("discharging") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock) as m: - assert psutil.sensors_battery().power_plugged is False - assert m.called - - def test_emulate_power_undetermined(self): - # Pretend we can't know whether the AC power cable not - # connected (assert fallback to False). - def open_mock(name, *args, **kwargs): - if name.startswith(( - '/sys/class/power_supply/AC0/online', - '/sys/class/power_supply/AC/online', - )): - raise FileNotFoundError - if name.startswith("/sys/class/power_supply/BAT0/status"): - return io.BytesIO(b"???") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock) as m: - assert psutil.sensors_battery().power_plugged is None - assert m.called - - def test_emulate_energy_full_0(self): - # Emulate a case where energy_full files returns 0. - with mock_open_content( - {"/sys/class/power_supply/BAT0/energy_full": b"0"} - ) as m: - assert psutil.sensors_battery().percent == 0 - assert m.called - - def test_emulate_energy_full_not_avail(self): - # Emulate a case where energy_full file does not exist. - # Expected fallback on /capacity. - with mock_open_exception( - "/sys/class/power_supply/BAT0/energy_full", - FileNotFoundError, - ): - with mock_open_exception( - "/sys/class/power_supply/BAT0/charge_full", - FileNotFoundError, - ): - with mock_open_content( - {"/sys/class/power_supply/BAT0/capacity": b"88"} - ): - assert psutil.sensors_battery().percent == 88 - - def test_emulate_no_power(self): - # Emulate a case where /AC0/online file nor /BAT0/status exist. - with mock_open_exception( - "/sys/class/power_supply/AC/online", FileNotFoundError - ): - with mock_open_exception( - "/sys/class/power_supply/AC0/online", FileNotFoundError - ): - with mock_open_exception( - "/sys/class/power_supply/BAT0/status", - FileNotFoundError, - ): - assert psutil.sensors_battery().power_plugged is None - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSensorsBatteryEmulated(PsutilTestCase): - def test_it(self): - def open_mock(name, *args, **kwargs): - if name.endswith("/energy_now"): - return io.StringIO("60000000") - elif name.endswith("/power_now"): - return io.StringIO("0") - elif name.endswith("/energy_full"): - return io.StringIO("60000001") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch('os.listdir', return_value=["BAT0"]) as mlistdir: - with mock.patch("builtins.open", side_effect=open_mock) as mopen: - assert psutil.sensors_battery() is not None - assert mlistdir.called - assert mopen.called - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSensorsTemperatures(PsutilTestCase): - def test_emulate_class_hwmon(self): - def open_mock(name, *args, **kwargs): - if name.endswith('/name'): - return io.StringIO("name") - elif name.endswith('/temp1_label'): - return io.StringIO("label") - elif name.endswith('/temp1_input'): - return io.BytesIO(b"30000") - elif name.endswith('/temp1_max'): - return io.BytesIO(b"40000") - elif name.endswith('/temp1_crit'): - return io.BytesIO(b"50000") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - # Test case with /sys/class/hwmon - with mock.patch( - 'glob.glob', return_value=['/sys/class/hwmon/hwmon0/temp1'] - ): - temp = psutil.sensors_temperatures()['name'][0] - assert temp.label == 'label' - assert temp.current == 30.0 - assert temp.high == 40.0 - assert temp.critical == 50.0 - - def test_emulate_class_thermal(self): - def open_mock(name, *args, **kwargs): - if name.endswith('0_temp'): - return io.BytesIO(b"50000") - elif name.endswith('temp'): - return io.BytesIO(b"30000") - elif name.endswith('0_type'): - return io.StringIO("critical") - elif name.endswith('type'): - return io.StringIO("name") - else: - return orig_open(name, *args, **kwargs) - - def glob_mock(path): - if path in { - '/sys/class/hwmon/hwmon*/temp*_*', - '/sys/class/hwmon/hwmon*/device/temp*_*', - }: - return [] - elif path == '/sys/class/thermal/thermal_zone*': - return ['/sys/class/thermal/thermal_zone0'] - elif path == '/sys/class/thermal/thermal_zone0/trip_point*': - return [ - '/sys/class/thermal/thermal_zone1/trip_point_0_type', - '/sys/class/thermal/thermal_zone1/trip_point_0_temp', - ] - return [] - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - with mock.patch('glob.glob', create=True, side_effect=glob_mock): - temp = psutil.sensors_temperatures()['name'][0] - assert temp.label == '' - assert temp.current == 30.0 - assert temp.high == 50.0 - assert temp.critical == 50.0 - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestSensorsFans(PsutilTestCase): - def test_emulate_data(self): - def open_mock(name, *args, **kwargs): - if name.endswith('/name'): - return io.StringIO("name") - elif name.endswith('/fan1_label'): - return io.StringIO("label") - elif name.endswith('/fan1_input'): - return io.StringIO("2000") - else: - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock): - with mock.patch( - 'glob.glob', return_value=['/sys/class/hwmon/hwmon2/fan1'] - ): - fan = psutil.sensors_fans()['name'][0] - assert fan.label == 'label' - assert fan.current == 2000 - - -# ===================================================================== -# --- test process -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestProcess(PsutilTestCase): - @retry_on_failure() - def test_parse_smaps_vs_memory_maps(self): - sproc = self.spawn_subproc() - uss, pss, swap = psutil._pslinux.Process(sproc.pid)._parse_smaps() - maps = psutil.Process(sproc.pid).memory_maps(grouped=False) - assert ( - abs(uss - sum(x.private_dirty + x.private_clean for x in maps)) - < 4096 - ) - assert abs(pss - sum(x.pss for x in maps)) < 4096 - assert abs(swap - sum(x.swap for x in maps)) < 4096 - - def test_parse_smaps_mocked(self): - # See: https://github.com/giampaolo/psutil/issues/1222 - content = textwrap.dedent("""\ - fffff0 r-xp 00000000 00:00 0 [vsyscall] - Size: 1 kB - Rss: 2 kB - Pss: 3 kB - Shared_Clean: 4 kB - Shared_Dirty: 5 kB - Private_Clean: 6 kB - Private_Dirty: 7 kB - Referenced: 8 kB - Anonymous: 9 kB - LazyFree: 10 kB - AnonHugePages: 11 kB - ShmemPmdMapped: 12 kB - Shared_Hugetlb: 13 kB - Private_Hugetlb: 14 kB - Swap: 15 kB - SwapPss: 16 kB - KernelPageSize: 17 kB - MMUPageSize: 18 kB - Locked: 19 kB - VmFlags: rd ex - """).encode() - with mock_open_content({f"/proc/{os.getpid()}/smaps": content}) as m: - p = psutil._pslinux.Process(os.getpid()) - uss, pss, swap = p._parse_smaps() - assert m.called - assert uss == (6 + 7 + 14) * 1024 - assert pss == 3 * 1024 - assert swap == 15 * 1024 - - def test_open_files_mode(self): - def get_test_file(fname): - p = psutil.Process() - giveup_at = time.time() + GLOBAL_TIMEOUT - while True: - for file in p.open_files(): - if file.path == os.path.abspath(fname): - return file - elif time.time() > giveup_at: - break - raise RuntimeError("timeout looking for test file") - - testfn = self.get_testfn() - with open(testfn, "w"): - assert get_test_file(testfn).mode == "w" - with open(testfn): - assert get_test_file(testfn).mode == "r" - with open(testfn, "a"): - assert get_test_file(testfn).mode == "a" - with open(testfn, "r+"): - assert get_test_file(testfn).mode == "r+" - with open(testfn, "w+"): - assert get_test_file(testfn).mode == "r+" - with open(testfn, "a+"): - assert get_test_file(testfn).mode == "a+" - - safe_rmpath(testfn) - with open(testfn, "x"): - assert get_test_file(testfn).mode == "w" - safe_rmpath(testfn) - with open(testfn, "x+"): - assert get_test_file(testfn).mode == "r+" - - def test_open_files_file_gone(self): - # simulates a file which gets deleted during open_files() - # execution - p = psutil.Process() - files = p.open_files() - with open(self.get_testfn(), 'w'): - # give the kernel some time to see the new file - call_until(lambda: len(p.open_files()) != len(files)) - with mock.patch( - 'psutil._pslinux.os.readlink', - side_effect=FileNotFoundError, - ) as m: - assert p.open_files() == [] - assert m.called - # also simulate the case where os.readlink() returns EINVAL - # in which case psutil is supposed to 'continue' - with mock.patch( - 'psutil._pslinux.os.readlink', - side_effect=OSError(errno.EINVAL, ""), - ) as m: - assert p.open_files() == [] - assert m.called - - def test_open_files_fd_gone(self): - # Simulate a case where /proc/{pid}/fdinfo/{fd} disappears - # while iterating through fds. - # https://travis-ci.org/giampaolo/psutil/jobs/225694530 - p = psutil.Process() - files = p.open_files() - with open(self.get_testfn(), 'w'): - # give the kernel some time to see the new file - call_until(lambda: len(p.open_files()) != len(files)) - with mock.patch( - "builtins.open", side_effect=FileNotFoundError - ) as m: - assert p.open_files() == [] - assert m.called - - def test_open_files_enametoolong(self): - # Simulate a case where /proc/{pid}/fd/{fd} symlink - # points to a file with full path longer than PATH_MAX, see: - # https://github.com/giampaolo/psutil/issues/1940 - p = psutil.Process() - files = p.open_files() - with open(self.get_testfn(), 'w'): - # give the kernel some time to see the new file - call_until(lambda: len(p.open_files()) != len(files)) - patch_point = 'psutil._pslinux.os.readlink' - with mock.patch( - patch_point, side_effect=OSError(errno.ENAMETOOLONG, "") - ) as m: - with mock.patch("psutil._pslinux.debug"): - assert p.open_files() == [] - assert m.called - - # --- mocked tests - - def test_terminal_mocked(self): - with mock.patch( - 'psutil._pslinux._psposix.get_terminal_map', return_value={} - ) as m: - assert psutil._pslinux.Process(os.getpid()).terminal() is None - assert m.called - - def test_cmdline_mocked(self): - # see: https://github.com/giampaolo/psutil/issues/639 - p = psutil.Process() - fake_file = io.StringIO('foo\x00bar\x00') - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert p.cmdline() == ['foo', 'bar'] - assert m.called - fake_file = io.StringIO('foo\x00bar\x00\x00') - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert p.cmdline() == ['foo', 'bar', ''] - assert m.called - - def test_cmdline_spaces_mocked(self): - # see: https://github.com/giampaolo/psutil/issues/1179 - p = psutil.Process() - fake_file = io.StringIO('foo bar ') - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert p.cmdline() == ['foo', 'bar'] - assert m.called - fake_file = io.StringIO('foo bar ') - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert p.cmdline() == ['foo', 'bar', ''] - assert m.called - - def test_cmdline_mixed_separators(self): - # https://github.com/giampaolo/psutil/issues/ - # 1179#issuecomment-552984549 - p = psutil.Process() - fake_file = io.StringIO('foo\x20bar\x00') - with mock.patch( - 'psutil._common.open', return_value=fake_file, create=True - ) as m: - assert p.cmdline() == ['foo', 'bar'] - assert m.called - - def test_readlink_path_deleted_mocked(self): - with mock.patch( - 'psutil._pslinux.os.readlink', return_value='/home/foo (deleted)' - ): - assert psutil.Process().exe() == "/home/foo" - assert psutil.Process().cwd() == "/home/foo" - - def test_threads_mocked(self): - # Test the case where os.listdir() returns a file (thread) - # which no longer exists by the time we open() it (race - # condition). threads() is supposed to ignore that instead - # of raising NSP. - def open_mock_1(name, *args, **kwargs): - if name.startswith(f"/proc/{os.getpid()}/task"): - raise FileNotFoundError - return orig_open(name, *args, **kwargs) - - orig_open = open - with mock.patch("builtins.open", side_effect=open_mock_1) as m: - ret = psutil.Process().threads() - assert m.called - assert ret == [] - - # ...but if it bumps into something != ENOENT we want an - # exception. - def open_mock_2(name, *args, **kwargs): - if name.startswith(f"/proc/{os.getpid()}/task"): - raise PermissionError - return orig_open(name, *args, **kwargs) - - with mock.patch("builtins.open", side_effect=open_mock_2): - with pytest.raises(psutil.AccessDenied): - psutil.Process().threads() - - def test_exe_mocked(self): - with mock.patch( - 'psutil._pslinux.readlink', side_effect=FileNotFoundError - ) as m: - # de-activate guessing from cmdline() - with mock.patch( - 'psutil._pslinux.Process.cmdline', return_value=[] - ): - ret = psutil.Process().exe() - assert m.called - assert ret == "" - - def test_cwd_mocked(self): - # https://github.com/giampaolo/psutil/issues/2514 - with mock.patch( - 'psutil._pslinux.readlink', side_effect=FileNotFoundError - ) as m: - ret = psutil.Process().cwd() - assert m.called - assert ret == "" - - def test_issue_1014(self): - # Emulates a case where smaps file does not exist. In this case - # wrap_exception decorator should not raise NoSuchProcess. - with mock_open_exception( - f"/proc/{os.getpid()}/smaps", FileNotFoundError - ) as m: - p = psutil.Process() - with pytest.raises(FileNotFoundError): - p.memory_maps() - assert m.called - - def test_issue_2418(self): - p = psutil.Process() - with mock_open_exception( - f"/proc/{os.getpid()}/statm", FileNotFoundError - ): - with mock.patch("os.path.exists", return_value=False): - with pytest.raises(psutil.NoSuchProcess): - p.memory_info() - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_zombie(self): - # Emulate a case where rlimit() raises ENOSYS, which may - # happen in case of zombie process: - # https://travis-ci.org/giampaolo/psutil/jobs/51368273 - with mock.patch( - "resource.prlimit", side_effect=OSError(errno.ENOSYS, "") - ) as m1: - with mock.patch( - "psutil._pslinux.Process._is_zombie", return_value=True - ) as m2: - p = psutil.Process() - p.name() - with pytest.raises(psutil.ZombieProcess) as cm: - p.rlimit(psutil.RLIMIT_NOFILE) - assert m1.called - assert m2.called - assert cm.value.pid == p.pid - assert cm.value.name == p.name() - - def test_stat_file_parsing(self): - args = [ - "0", # pid - "(cat)", # name - "Z", # status - "1", # ppid - "0", # pgrp - "0", # session - "0", # tty - "0", # tpgid - "0", # flags - "0", # minflt - "0", # cminflt - "0", # majflt - "0", # cmajflt - "2", # utime - "3", # stime - "4", # cutime - "5", # cstime - "0", # priority - "0", # nice - "0", # num_threads - "0", # itrealvalue - "6", # starttime - "0", # vsize - "0", # rss - "0", # rsslim - "0", # startcode - "0", # endcode - "0", # startstack - "0", # kstkesp - "0", # kstkeip - "0", # signal - "0", # blocked - "0", # sigignore - "0", # sigcatch - "0", # wchan - "0", # nswap - "0", # cnswap - "0", # exit_signal - "6", # processor - "0", # rt priority - "0", # policy - "7", # delayacct_blkio_ticks - ] - content = " ".join(args).encode() - with mock_open_content({f"/proc/{os.getpid()}/stat": content}): - p = psutil.Process() - assert p.name() == 'cat' - assert p.status() == psutil.STATUS_ZOMBIE - assert p.ppid() == 1 - assert p.create_time() == 6 / CLOCK_TICKS + psutil.boot_time() - cpu = p.cpu_times() - assert cpu.user == 2 / CLOCK_TICKS - assert cpu.system == 3 / CLOCK_TICKS - assert cpu.children_user == 4 / CLOCK_TICKS - assert cpu.children_system == 5 / CLOCK_TICKS - assert cpu.iowait == 7 / CLOCK_TICKS - assert p.cpu_num() == 6 - - def test_status_file_parsing(self): - content = textwrap.dedent("""\ - Uid:\t1000\t1001\t1002\t1003 - Gid:\t1004\t1005\t1006\t1007 - Threads:\t66 - Cpus_allowed:\tf - Cpus_allowed_list:\t0-7 - voluntary_ctxt_switches:\t12 - nonvoluntary_ctxt_switches:\t13""").encode() - with mock_open_content({f"/proc/{os.getpid()}/status": content}): - p = psutil.Process() - assert p.num_ctx_switches().voluntary == 12 - assert p.num_ctx_switches().involuntary == 13 - assert p.num_threads() == 66 - uids = p.uids() - assert uids.real == 1000 - assert uids.effective == 1001 - assert uids.saved == 1002 - gids = p.gids() - assert gids.real == 1004 - assert gids.effective == 1005 - assert gids.saved == 1006 - assert p._proc._get_eligible_cpus() == list(range(8)) - - def test_net_connections_enametoolong(self): - # Simulate a case where /proc/{pid}/fd/{fd} symlink points to - # a file with full path longer than PATH_MAX, see: - # https://github.com/giampaolo/psutil/issues/1940 - with mock.patch( - 'psutil._pslinux.os.readlink', - side_effect=OSError(errno.ENAMETOOLONG, ""), - ) as m: - p = psutil.Process() - with mock.patch("psutil._pslinux.debug"): - assert p.net_connections() == [] - assert m.called - - def test_create_time_monotonic(self): - p = psutil.Process() - assert p._proc.create_time() != p._proc.create_time(monotonic=True) - assert p._get_ident()[1] == p._proc.create_time(monotonic=True) - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestProcessAgainstStatus(PsutilTestCase): - """/proc/pid/stat and /proc/pid/status have many values in common. - Whenever possible, psutil uses /proc/pid/stat (it's faster). - For all those cases we check that the value found in - /proc/pid/stat (by psutil) matches the one found in - /proc/pid/status. - """ - - @classmethod - def setUpClass(cls): - cls.proc = psutil.Process() - - def read_status_file(self, linestart): - with psutil._psplatform.open_text( - f"/proc/{self.proc.pid}/status" - ) as f: - for line in f: - line = line.strip() - if line.startswith(linestart): - value = line.partition('\t')[2] - try: - return int(value) - except ValueError: - return value - raise ValueError(f"can't find {linestart!r}") - - def test_name(self): - value = self.read_status_file("Name:") - assert self.proc.name() == value - - def test_status(self): - value = self.read_status_file("State:") - value = value[value.find('(') + 1 : value.rfind(')')] - value = value.replace(' ', '-') - assert self.proc.status() == value - - def test_ppid(self): - value = self.read_status_file("PPid:") - assert self.proc.ppid() == value - - def test_num_threads(self): - value = self.read_status_file("Threads:") - assert self.proc.num_threads() == value - - def test_uids(self): - value = self.read_status_file("Uid:") - value = tuple(map(int, value.split()[1:4])) - assert self.proc.uids() == value - - def test_gids(self): - value = self.read_status_file("Gid:") - value = tuple(map(int, value.split()[1:4])) - assert self.proc.gids() == value - - @retry_on_failure() - def test_num_ctx_switches(self): - value = self.read_status_file("voluntary_ctxt_switches:") - assert self.proc.num_ctx_switches().voluntary == value - value = self.read_status_file("nonvoluntary_ctxt_switches:") - assert self.proc.num_ctx_switches().involuntary == value - - def test_cpu_affinity(self): - value = self.read_status_file("Cpus_allowed_list:") - if '-' in str(value): - min_, max_ = map(int, value.split('-')) - assert self.proc.cpu_affinity() == list(range(min_, max_ + 1)) - - def test_cpu_affinity_eligible_cpus(self): - value = self.read_status_file("Cpus_allowed_list:") - with mock.patch("psutil._pslinux.per_cpu_times") as m: - self.proc._proc._get_eligible_cpus() - if '-' in str(value): - assert not m.called - else: - assert m.called - - -# ===================================================================== -# --- test utils -# ===================================================================== - - -@pytest.mark.skipif(not LINUX, reason="LINUX only") -class TestUtils(PsutilTestCase): - def test_readlink(self): - with mock.patch("os.readlink", return_value="foo (deleted)") as m: - assert psutil._psplatform.readlink("bar") == "foo" - assert m.called diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_memleaks.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_memleaks.py deleted file mode 100644 index 306b1c3..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_memleaks.py +++ /dev/null @@ -1,482 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for detecting function memory leaks (typically the ones -implemented in C). It does so by calling a function many times and -checking whether process memory usage keeps increasing between -calls or over time. -Note that this may produce false positives (especially on Windows -for some reason). -PyPy appears to be completely unstable for this framework, probably -because of how its JIT handles memory, so tests are skipped. -""" - -import functools -import os - -import psutil -from psutil import LINUX -from psutil import MACOS -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil import WINDOWS -from psutil.tests import AARCH64 -from psutil.tests import HAS_CPU_AFFINITY -from psutil.tests import HAS_CPU_FREQ -from psutil.tests import HAS_ENVIRON -from psutil.tests import HAS_IONICE -from psutil.tests import HAS_MEMORY_MAPS -from psutil.tests import HAS_NET_IO_COUNTERS -from psutil.tests import HAS_PROC_CPU_NUM -from psutil.tests import HAS_PROC_IO_COUNTERS -from psutil.tests import HAS_RLIMIT -from psutil.tests import HAS_SENSORS_BATTERY -from psutil.tests import HAS_SENSORS_FANS -from psutil.tests import HAS_SENSORS_TEMPERATURES -from psutil.tests import TestMemoryLeak -from psutil.tests import create_sockets -from psutil.tests import get_testfn -from psutil.tests import process_namespace -from psutil.tests import pytest -from psutil.tests import skip_on_access_denied -from psutil.tests import spawn_subproc -from psutil.tests import system_namespace -from psutil.tests import terminate - -cext = psutil._psplatform.cext -thisproc = psutil.Process() -FEW_TIMES = 5 - - -def fewtimes_if_linux(): - """Decorator for those Linux functions which are implemented in pure - Python, and which we want to run faster. - """ - - def decorator(fun): - @functools.wraps(fun) - def wrapper(self, *args, **kwargs): - if LINUX: - before = self.__class__.times - try: - self.__class__.times = FEW_TIMES - return fun(self, *args, **kwargs) - finally: - self.__class__.times = before - else: - return fun(self, *args, **kwargs) - - return wrapper - - return decorator - - -# =================================================================== -# Process class -# =================================================================== - - -class TestProcessObjectLeaks(TestMemoryLeak): - """Test leaks of Process class methods.""" - - proc = thisproc - - def test_coverage(self): - ns = process_namespace(None) - ns.test_class_coverage(self, ns.getters + ns.setters) - - @fewtimes_if_linux() - def test_name(self): - self.execute(self.proc.name) - - @fewtimes_if_linux() - def test_cmdline(self): - self.execute(self.proc.cmdline) - - @fewtimes_if_linux() - def test_exe(self): - self.execute(self.proc.exe) - - @fewtimes_if_linux() - def test_ppid(self): - self.execute(self.proc.ppid) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @fewtimes_if_linux() - def test_uids(self): - self.execute(self.proc.uids) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @fewtimes_if_linux() - def test_gids(self): - self.execute(self.proc.gids) - - @fewtimes_if_linux() - def test_status(self): - self.execute(self.proc.status) - - def test_nice(self): - self.execute(self.proc.nice) - - def test_nice_set(self): - niceness = thisproc.nice() - self.execute(lambda: self.proc.nice(niceness)) - - @pytest.mark.skipif(not HAS_IONICE, reason="not supported") - def test_ionice(self): - self.execute(self.proc.ionice) - - @pytest.mark.skipif(not HAS_IONICE, reason="not supported") - def test_ionice_set(self): - if WINDOWS: - value = thisproc.ionice() - self.execute(lambda: self.proc.ionice(value)) - else: - self.execute(lambda: self.proc.ionice(psutil.IOPRIO_CLASS_NONE)) - fun = functools.partial(cext.proc_ioprio_set, os.getpid(), -1, 0) - self.execute_w_exc(OSError, fun) - - @pytest.mark.skipif(not HAS_PROC_IO_COUNTERS, reason="not supported") - @fewtimes_if_linux() - def test_io_counters(self): - self.execute(self.proc.io_counters) - - @pytest.mark.skipif(POSIX, reason="worthless on POSIX") - def test_username(self): - # always open 1 handle on Windows (only once) - psutil.Process().username() - self.execute(self.proc.username) - - @fewtimes_if_linux() - def test_create_time(self): - self.execute(self.proc.create_time) - - @fewtimes_if_linux() - @skip_on_access_denied(only_if=OPENBSD) - def test_num_threads(self): - self.execute(self.proc.num_threads) - - @pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") - def test_num_handles(self): - self.execute(self.proc.num_handles) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @fewtimes_if_linux() - def test_num_fds(self): - self.execute(self.proc.num_fds) - - @fewtimes_if_linux() - def test_num_ctx_switches(self): - self.execute(self.proc.num_ctx_switches) - - @fewtimes_if_linux() - @skip_on_access_denied(only_if=OPENBSD) - def test_threads(self): - self.execute(self.proc.threads) - - @fewtimes_if_linux() - def test_cpu_times(self): - self.execute(self.proc.cpu_times) - - @fewtimes_if_linux() - @pytest.mark.skipif(not HAS_PROC_CPU_NUM, reason="not supported") - def test_cpu_num(self): - self.execute(self.proc.cpu_num) - - @fewtimes_if_linux() - def test_memory_info(self): - self.execute(self.proc.memory_info) - - @fewtimes_if_linux() - def test_memory_full_info(self): - self.execute(self.proc.memory_full_info) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @fewtimes_if_linux() - def test_terminal(self): - self.execute(self.proc.terminal) - - def test_resume(self): - times = FEW_TIMES if POSIX else self.times - self.execute(self.proc.resume, times=times) - - @fewtimes_if_linux() - def test_cwd(self): - self.execute(self.proc.cwd) - - @pytest.mark.skipif(not HAS_CPU_AFFINITY, reason="not supported") - def test_cpu_affinity(self): - self.execute(self.proc.cpu_affinity) - - @pytest.mark.skipif(not HAS_CPU_AFFINITY, reason="not supported") - def test_cpu_affinity_set(self): - affinity = thisproc.cpu_affinity() - self.execute(lambda: self.proc.cpu_affinity(affinity)) - self.execute_w_exc(ValueError, lambda: self.proc.cpu_affinity([-1])) - - @fewtimes_if_linux() - def test_open_files(self): - with open(get_testfn(), 'w'): - self.execute(self.proc.open_files) - - @pytest.mark.skipif(not HAS_MEMORY_MAPS, reason="not supported") - @fewtimes_if_linux() - def test_memory_maps(self): - self.execute(self.proc.memory_maps) - - @pytest.mark.skipif(not LINUX, reason="LINUX only") - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit(self): - self.execute(lambda: self.proc.rlimit(psutil.RLIMIT_NOFILE)) - - @pytest.mark.skipif(not LINUX, reason="LINUX only") - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_set(self): - limit = thisproc.rlimit(psutil.RLIMIT_NOFILE) - self.execute(lambda: self.proc.rlimit(psutil.RLIMIT_NOFILE, limit)) - self.execute_w_exc((OSError, ValueError), lambda: self.proc.rlimit(-1)) - - @fewtimes_if_linux() - # Windows implementation is based on a single system-wide - # function (tested later). - @pytest.mark.skipif(WINDOWS, reason="worthless on WINDOWS") - def test_net_connections(self): - # TODO: UNIX sockets are temporarily implemented by parsing - # 'pfiles' cmd output; we don't want that part of the code to - # be executed. - with create_sockets(): - kind = 'inet' if SUNOS else 'all' - self.execute(lambda: self.proc.net_connections(kind)) - - @pytest.mark.skipif(not HAS_ENVIRON, reason="not supported") - def test_environ(self): - self.execute(self.proc.environ) - - @pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") - def test_proc_info(self): - self.execute(lambda: cext.proc_info(os.getpid())) - - -class TestTerminatedProcessLeaks(TestProcessObjectLeaks): - """Repeat the tests above looking for leaks occurring when dealing - with terminated processes raising NoSuchProcess exception. - The C functions are still invoked but will follow different code - paths. We'll check those code paths. - """ - - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.subp = spawn_subproc() - cls.proc = psutil.Process(cls.subp.pid) - cls.proc.kill() - cls.proc.wait() - - @classmethod - def tearDownClass(cls): - super().tearDownClass() - terminate(cls.subp) - - def call(self, fun): - try: - fun() - except psutil.NoSuchProcess: - pass - - if WINDOWS: - - def test_kill(self): - self.execute(self.proc.kill) - - def test_terminate(self): - self.execute(self.proc.terminate) - - def test_suspend(self): - self.execute(self.proc.suspend) - - def test_resume(self): - self.execute(self.proc.resume) - - def test_wait(self): - self.execute(self.proc.wait) - - def test_proc_info(self): - # test dual implementation - def call(): - try: - return cext.proc_info(self.proc.pid) - except ProcessLookupError: - pass - - self.execute(call) - - -@pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") -class TestProcessDualImplementation(TestMemoryLeak): - def test_cmdline_peb_true(self): - self.execute(lambda: cext.proc_cmdline(os.getpid(), use_peb=True)) - - def test_cmdline_peb_false(self): - self.execute(lambda: cext.proc_cmdline(os.getpid(), use_peb=False)) - - -# =================================================================== -# system APIs -# =================================================================== - - -class TestModuleFunctionsLeaks(TestMemoryLeak): - """Test leaks of psutil module functions.""" - - def test_coverage(self): - ns = system_namespace() - ns.test_class_coverage(self, ns.all) - - # --- cpu - - @fewtimes_if_linux() - def test_cpu_count(self): # logical - self.execute(lambda: psutil.cpu_count(logical=True)) - - @fewtimes_if_linux() - def test_cpu_count_cores(self): - self.execute(lambda: psutil.cpu_count(logical=False)) - - @fewtimes_if_linux() - def test_cpu_times(self): - self.execute(psutil.cpu_times) - - @fewtimes_if_linux() - def test_per_cpu_times(self): - self.execute(lambda: psutil.cpu_times(percpu=True)) - - @fewtimes_if_linux() - def test_cpu_stats(self): - self.execute(psutil.cpu_stats) - - @fewtimes_if_linux() - # TODO: remove this once 1892 is fixed - @pytest.mark.skipif(MACOS and AARCH64, reason="skipped due to #1892") - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_cpu_freq(self): - self.execute(psutil.cpu_freq) - - @pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") - def test_getloadavg(self): - psutil.getloadavg() - self.execute(psutil.getloadavg) - - # --- mem - - def test_virtual_memory(self): - self.execute(psutil.virtual_memory) - - # TODO: remove this skip when this gets fixed - @pytest.mark.skipif(SUNOS, reason="worthless on SUNOS (uses a subprocess)") - def test_swap_memory(self): - self.execute(psutil.swap_memory) - - def test_pid_exists(self): - times = FEW_TIMES if POSIX else self.times - self.execute(lambda: psutil.pid_exists(os.getpid()), times=times) - - # --- disk - - def test_disk_usage(self): - times = FEW_TIMES if POSIX else self.times - self.execute(lambda: psutil.disk_usage('.'), times=times) - - def test_disk_partitions(self): - self.execute(psutil.disk_partitions) - - @pytest.mark.skipif( - LINUX and not os.path.exists('/proc/diskstats'), - reason="/proc/diskstats not available on this Linux version", - ) - @fewtimes_if_linux() - def test_disk_io_counters(self): - self.execute(lambda: psutil.disk_io_counters(nowrap=False)) - - # --- proc - - @fewtimes_if_linux() - def test_pids(self): - self.execute(psutil.pids) - - # --- net - - @fewtimes_if_linux() - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_net_io_counters(self): - self.execute(lambda: psutil.net_io_counters(nowrap=False)) - - @fewtimes_if_linux() - @pytest.mark.skipif(MACOS and os.getuid() != 0, reason="need root access") - def test_net_connections(self): - # always opens and handle on Windows() (once) - psutil.net_connections(kind='all') - with create_sockets(): - self.execute(lambda: psutil.net_connections(kind='all')) - - def test_net_if_addrs(self): - # Note: verified that on Windows this was a false positive. - tolerance = 80 * 1024 if WINDOWS else self.tolerance - self.execute(psutil.net_if_addrs, tolerance=tolerance) - - def test_net_if_stats(self): - self.execute(psutil.net_if_stats) - - # --- sensors - - @fewtimes_if_linux() - @pytest.mark.skipif(not HAS_SENSORS_BATTERY, reason="not supported") - def test_sensors_battery(self): - self.execute(psutil.sensors_battery) - - @fewtimes_if_linux() - @pytest.mark.skipif(not HAS_SENSORS_TEMPERATURES, reason="not supported") - def test_sensors_temperatures(self): - self.execute(psutil.sensors_temperatures) - - @fewtimes_if_linux() - @pytest.mark.skipif(not HAS_SENSORS_FANS, reason="not supported") - def test_sensors_fans(self): - self.execute(psutil.sensors_fans) - - # --- others - - @fewtimes_if_linux() - def test_boot_time(self): - self.execute(psutil.boot_time) - - def test_users(self): - self.execute(psutil.users) - - def test_set_debug(self): - self.execute(lambda: psutil._set_debug(False)) - - if WINDOWS: - - # --- win services - - def test_win_service_iter(self): - self.execute(cext.winservice_enumerate) - - def test_win_service_get(self): - pass - - def test_win_service_get_config(self): - name = next(psutil.win_service_iter()).name() - self.execute(lambda: cext.winservice_query_config(name)) - - def test_win_service_get_status(self): - name = next(psutil.win_service_iter()).name() - self.execute(lambda: cext.winservice_query_status(name)) - - def test_win_service_get_description(self): - name = next(psutil.win_service_iter()).name() - self.execute(lambda: cext.winservice_query_descr(name)) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_misc.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_misc.py deleted file mode 100644 index 0ecae2f..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_misc.py +++ /dev/null @@ -1,866 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Miscellaneous tests.""" - -import collections -import contextlib -import io -import json -import os -import pickle -import socket -import sys -from unittest import mock - -import psutil -from psutil import WINDOWS -from psutil._common import bcat -from psutil._common import cat -from psutil._common import debug -from psutil._common import isfile_strict -from psutil._common import memoize -from psutil._common import memoize_when_activated -from psutil._common import parse_environ_block -from psutil._common import supports_ipv6 -from psutil._common import wrap_numbers -from psutil.tests import HAS_NET_IO_COUNTERS -from psutil.tests import PsutilTestCase -from psutil.tests import process_namespace -from psutil.tests import pytest -from psutil.tests import reload_module -from psutil.tests import system_namespace - -# =================================================================== -# --- Test classes' repr(), str(), ... -# =================================================================== - - -class TestSpecialMethods(PsutilTestCase): - def test_check_pid_range(self): - with pytest.raises(OverflowError): - psutil._psplatform.cext.check_pid_range(2**128) - with pytest.raises(psutil.NoSuchProcess): - psutil.Process(2**128) - - def test_process__repr__(self, func=repr): - p = psutil.Process(self.spawn_subproc().pid) - r = func(p) - assert "psutil.Process" in r - assert f"pid={p.pid}" in r - assert f"name='{p.name()}'" in r.replace("name=u'", "name='") - assert "status=" in r - assert "exitcode=" not in r - p.terminate() - p.wait() - r = func(p) - assert "status='terminated'" in r - assert "exitcode=" in r - - with mock.patch.object( - psutil.Process, - "name", - side_effect=psutil.ZombieProcess(os.getpid()), - ): - p = psutil.Process() - r = func(p) - assert f"pid={p.pid}" in r - assert "status='zombie'" in r - assert "name=" not in r - with mock.patch.object( - psutil.Process, - "name", - side_effect=psutil.NoSuchProcess(os.getpid()), - ): - p = psutil.Process() - r = func(p) - assert f"pid={p.pid}" in r - assert "terminated" in r - assert "name=" not in r - with mock.patch.object( - psutil.Process, - "name", - side_effect=psutil.AccessDenied(os.getpid()), - ): - p = psutil.Process() - r = func(p) - assert f"pid={p.pid}" in r - assert "name=" not in r - - def test_process__str__(self): - self.test_process__repr__(func=str) - - def test_error__repr__(self): - assert repr(psutil.Error()) == "psutil.Error()" - - def test_error__str__(self): - assert str(psutil.Error()) == "" - - def test_no_such_process__repr__(self): - assert ( - repr(psutil.NoSuchProcess(321)) - == "psutil.NoSuchProcess(pid=321, msg='process no longer exists')" - ) - assert ( - repr(psutil.NoSuchProcess(321, name="name", msg="msg")) - == "psutil.NoSuchProcess(pid=321, name='name', msg='msg')" - ) - - def test_no_such_process__str__(self): - assert ( - str(psutil.NoSuchProcess(321)) - == "process no longer exists (pid=321)" - ) - assert ( - str(psutil.NoSuchProcess(321, name="name", msg="msg")) - == "msg (pid=321, name='name')" - ) - - def test_zombie_process__repr__(self): - assert ( - repr(psutil.ZombieProcess(321)) - == 'psutil.ZombieProcess(pid=321, msg="PID still ' - 'exists but it\'s a zombie")' - ) - assert ( - repr(psutil.ZombieProcess(321, name="name", ppid=320, msg="foo")) - == "psutil.ZombieProcess(pid=321, ppid=320, name='name'," - " msg='foo')" - ) - - def test_zombie_process__str__(self): - assert ( - str(psutil.ZombieProcess(321)) - == "PID still exists but it's a zombie (pid=321)" - ) - assert ( - str(psutil.ZombieProcess(321, name="name", ppid=320, msg="foo")) - == "foo (pid=321, ppid=320, name='name')" - ) - - def test_access_denied__repr__(self): - assert repr(psutil.AccessDenied(321)) == "psutil.AccessDenied(pid=321)" - assert ( - repr(psutil.AccessDenied(321, name="name", msg="msg")) - == "psutil.AccessDenied(pid=321, name='name', msg='msg')" - ) - - def test_access_denied__str__(self): - assert str(psutil.AccessDenied(321)) == "(pid=321)" - assert ( - str(psutil.AccessDenied(321, name="name", msg="msg")) - == "msg (pid=321, name='name')" - ) - - def test_timeout_expired__repr__(self): - assert ( - repr(psutil.TimeoutExpired(5)) - == "psutil.TimeoutExpired(seconds=5, msg='timeout after 5" - " seconds')" - ) - assert ( - repr(psutil.TimeoutExpired(5, pid=321, name="name")) - == "psutil.TimeoutExpired(pid=321, name='name', seconds=5, " - "msg='timeout after 5 seconds')" - ) - - def test_timeout_expired__str__(self): - assert str(psutil.TimeoutExpired(5)) == "timeout after 5 seconds" - assert ( - str(psutil.TimeoutExpired(5, pid=321, name="name")) - == "timeout after 5 seconds (pid=321, name='name')" - ) - - def test_process__eq__(self): - p1 = psutil.Process() - p2 = psutil.Process() - assert p1 == p2 - p2._ident = (0, 0) - assert p1 != p2 - assert p1 != 'foo' - - def test_process__hash__(self): - s = {psutil.Process(), psutil.Process()} - assert len(s) == 1 - - -# =================================================================== -# --- Misc, generic, corner cases -# =================================================================== - - -class TestMisc(PsutilTestCase): - def test__all__(self): - dir_psutil = dir(psutil) - for name in dir_psutil: - if name in { - 'debug', - 'tests', - 'test', - 'PermissionError', - 'ProcessLookupError', - }: - continue - if not name.startswith('_'): - try: - __import__(name) - except ImportError: - if name not in psutil.__all__: - fun = getattr(psutil, name) - if fun is None: - continue - if ( - fun.__doc__ is not None - and 'deprecated' not in fun.__doc__.lower() - ): - return pytest.fail( - f"{name!r} not in psutil.__all__" - ) - - # Import 'star' will break if __all__ is inconsistent, see: - # https://github.com/giampaolo/psutil/issues/656 - # Can't do `from psutil import *` as it won't work - # so we simply iterate over __all__. - for name in psutil.__all__: - assert name in dir_psutil - - def test_version(self): - assert ( - '.'.join([str(x) for x in psutil.version_info]) - == psutil.__version__ - ) - - def test_process_as_dict_no_new_names(self): - # See https://github.com/giampaolo/psutil/issues/813 - p = psutil.Process() - p.foo = '1' - assert 'foo' not in p.as_dict() - - def test_serialization(self): - def check(ret): - json.loads(json.dumps(ret)) - - a = pickle.dumps(ret) - b = pickle.loads(a) - assert ret == b - - # --- process APIs - - proc = psutil.Process() - check(psutil.Process().as_dict()) - - ns = process_namespace(proc) - for fun, name in ns.iter(ns.getters, clear_cache=True): - with self.subTest(proc=str(proc), name=name): - try: - ret = fun() - except psutil.Error: - pass - else: - check(ret) - - # --- system APIs - - ns = system_namespace() - for fun, name in ns.iter(ns.getters): - if name in {"win_service_iter", "win_service_get"}: - continue - with self.subTest(name=name): - try: - ret = fun() - except psutil.AccessDenied: - pass - else: - check(ret) - - # --- exception classes - - b = pickle.loads( - pickle.dumps( - psutil.NoSuchProcess(pid=4567, name='name', msg='msg') - ) - ) - assert isinstance(b, psutil.NoSuchProcess) - assert b.pid == 4567 - assert b.name == 'name' - assert b.msg == 'msg' - - b = pickle.loads( - pickle.dumps( - psutil.ZombieProcess(pid=4567, name='name', ppid=42, msg='msg') - ) - ) - assert isinstance(b, psutil.ZombieProcess) - assert b.pid == 4567 - assert b.ppid == 42 - assert b.name == 'name' - assert b.msg == 'msg' - - b = pickle.loads( - pickle.dumps(psutil.AccessDenied(pid=123, name='name', msg='msg')) - ) - assert isinstance(b, psutil.AccessDenied) - assert b.pid == 123 - assert b.name == 'name' - assert b.msg == 'msg' - - b = pickle.loads( - pickle.dumps( - psutil.TimeoutExpired(seconds=33, pid=4567, name='name') - ) - ) - assert isinstance(b, psutil.TimeoutExpired) - assert b.seconds == 33 - assert b.pid == 4567 - assert b.name == 'name' - - def test_ad_on_process_creation(self): - # We are supposed to be able to instantiate Process also in case - # of zombie processes or access denied. - with mock.patch.object( - psutil.Process, '_get_ident', side_effect=psutil.AccessDenied - ) as meth: - psutil.Process() - assert meth.called - - with mock.patch.object( - psutil.Process, '_get_ident', side_effect=psutil.ZombieProcess(1) - ) as meth: - psutil.Process() - assert meth.called - - with mock.patch.object( - psutil.Process, '_get_ident', side_effect=ValueError - ) as meth: - with pytest.raises(ValueError): - psutil.Process() - assert meth.called - - with mock.patch.object( - psutil.Process, '_get_ident', side_effect=psutil.NoSuchProcess(1) - ) as meth: - with pytest.raises(psutil.NoSuchProcess): - psutil.Process() - assert meth.called - - def test_sanity_version_check(self): - # see: https://github.com/giampaolo/psutil/issues/564 - with mock.patch( - "psutil._psplatform.cext.version", return_value="0.0.0" - ): - with pytest.raises(ImportError) as cm: - reload_module(psutil) - assert "version conflict" in str(cm.value).lower() - - -# =================================================================== -# --- psutil/_common.py utils -# =================================================================== - - -class TestMemoizeDecorator(PsutilTestCase): - def setUp(self): - self.calls = [] - - tearDown = setUp - - def run_against(self, obj, expected_retval=None): - # no args - for _ in range(2): - ret = obj() - assert self.calls == [((), {})] - if expected_retval is not None: - assert ret == expected_retval - # with args - for _ in range(2): - ret = obj(1) - assert self.calls == [((), {}), ((1,), {})] - if expected_retval is not None: - assert ret == expected_retval - # with args + kwargs - for _ in range(2): - ret = obj(1, bar=2) - assert self.calls == [((), {}), ((1,), {}), ((1,), {'bar': 2})] - if expected_retval is not None: - assert ret == expected_retval - # clear cache - assert len(self.calls) == 3 - obj.cache_clear() - ret = obj() - if expected_retval is not None: - assert ret == expected_retval - assert len(self.calls) == 4 - # docstring - assert obj.__doc__ == "My docstring." - - def test_function(self): - @memoize - def foo(*args, **kwargs): - """My docstring.""" - baseclass.calls.append((args, kwargs)) - return 22 - - baseclass = self - self.run_against(foo, expected_retval=22) - - def test_class(self): - @memoize - class Foo: - """My docstring.""" - - def __init__(self, *args, **kwargs): - baseclass.calls.append((args, kwargs)) - - def bar(self): - return 22 - - baseclass = self - self.run_against(Foo, expected_retval=None) - assert Foo().bar() == 22 - - def test_class_singleton(self): - # @memoize can be used against classes to create singletons - @memoize - class Bar: - def __init__(self, *args, **kwargs): - pass - - assert Bar() is Bar() - assert id(Bar()) == id(Bar()) - assert id(Bar(1)) == id(Bar(1)) - assert id(Bar(1, foo=3)) == id(Bar(1, foo=3)) - assert id(Bar(1)) != id(Bar(2)) - - def test_staticmethod(self): - class Foo: - @staticmethod - @memoize - def bar(*args, **kwargs): - """My docstring.""" - baseclass.calls.append((args, kwargs)) - return 22 - - baseclass = self - self.run_against(Foo().bar, expected_retval=22) - - def test_classmethod(self): - class Foo: - @classmethod - @memoize - def bar(cls, *args, **kwargs): - """My docstring.""" - baseclass.calls.append((args, kwargs)) - return 22 - - baseclass = self - self.run_against(Foo().bar, expected_retval=22) - - def test_original(self): - # This was the original test before I made it dynamic to test it - # against different types. Keeping it anyway. - @memoize - def foo(*args, **kwargs): - """Foo docstring.""" - calls.append(None) - return (args, kwargs) - - calls = [] - # no args - for _ in range(2): - ret = foo() - expected = ((), {}) - assert ret == expected - assert len(calls) == 1 - # with args - for _ in range(2): - ret = foo(1) - expected = ((1,), {}) - assert ret == expected - assert len(calls) == 2 - # with args + kwargs - for _ in range(2): - ret = foo(1, bar=2) - expected = ((1,), {'bar': 2}) - assert ret == expected - assert len(calls) == 3 - # clear cache - foo.cache_clear() - ret = foo() - expected = ((), {}) - assert ret == expected - assert len(calls) == 4 - # docstring - assert foo.__doc__ == "Foo docstring." - - -class TestCommonModule(PsutilTestCase): - def test_memoize_when_activated(self): - class Foo: - @memoize_when_activated - def foo(self): - calls.append(None) - - f = Foo() - calls = [] - f.foo() - f.foo() - assert len(calls) == 2 - - # activate - calls = [] - f.foo.cache_activate(f) - f.foo() - f.foo() - assert len(calls) == 1 - - # deactivate - calls = [] - f.foo.cache_deactivate(f) - f.foo() - f.foo() - assert len(calls) == 2 - - def test_parse_environ_block(self): - def k(s): - return s.upper() if WINDOWS else s - - assert parse_environ_block("a=1\0") == {k("a"): "1"} - assert parse_environ_block("a=1\0b=2\0\0") == { - k("a"): "1", - k("b"): "2", - } - assert parse_environ_block("a=1\0b=\0\0") == {k("a"): "1", k("b"): ""} - # ignore everything after \0\0 - assert parse_environ_block("a=1\0b=2\0\0c=3\0") == { - k("a"): "1", - k("b"): "2", - } - # ignore everything that is not an assignment - assert parse_environ_block("xxx\0a=1\0") == {k("a"): "1"} - assert parse_environ_block("a=1\0=b=2\0") == {k("a"): "1"} - # do not fail if the block is incomplete - assert parse_environ_block("a=1\0b=2") == {k("a"): "1"} - - def test_supports_ipv6(self): - if supports_ipv6(): - with mock.patch('psutil._common.socket') as s: - s.has_ipv6 = False - assert not supports_ipv6() - - with mock.patch( - 'psutil._common.socket.socket', side_effect=OSError - ) as s: - assert not supports_ipv6() - assert s.called - - with mock.patch( - 'psutil._common.socket.socket', side_effect=socket.gaierror - ) as s: - assert not supports_ipv6() - assert s.called - - with mock.patch( - 'psutil._common.socket.socket.bind', - side_effect=socket.gaierror, - ) as s: - assert not supports_ipv6() - assert s.called - else: - with pytest.raises(OSError): - sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - try: - sock.bind(("::1", 0)) - finally: - sock.close() - - def test_isfile_strict(self): - this_file = os.path.abspath(__file__) - assert isfile_strict(this_file) - assert not isfile_strict(os.path.dirname(this_file)) - with mock.patch('psutil._common.os.stat', side_effect=PermissionError): - with pytest.raises(OSError): - isfile_strict(this_file) - with mock.patch( - 'psutil._common.os.stat', side_effect=FileNotFoundError - ): - assert not isfile_strict(this_file) - with mock.patch('psutil._common.stat.S_ISREG', return_value=False): - assert not isfile_strict(this_file) - - def test_debug(self): - with mock.patch.object(psutil._common, "PSUTIL_DEBUG", True): - with contextlib.redirect_stderr(io.StringIO()) as f: - debug("hello") - sys.stderr.flush() - msg = f.getvalue() - assert msg.startswith("psutil-debug"), msg - assert "hello" in msg - assert __file__.replace('.pyc', '.py') in msg - - # supposed to use repr(exc) - with mock.patch.object(psutil._common, "PSUTIL_DEBUG", True): - with contextlib.redirect_stderr(io.StringIO()) as f: - debug(ValueError("this is an error")) - msg = f.getvalue() - assert "ignoring ValueError" in msg - assert "'this is an error'" in msg - - # supposed to use str(exc), because of extra info about file name - with mock.patch.object(psutil._common, "PSUTIL_DEBUG", True): - with contextlib.redirect_stderr(io.StringIO()) as f: - exc = OSError(2, "no such file") - exc.filename = "/foo" - debug(exc) - msg = f.getvalue() - assert "no such file" in msg - assert "/foo" in msg - - def test_cat_bcat(self): - testfn = self.get_testfn() - with open(testfn, "w") as f: - f.write("foo") - assert cat(testfn) == "foo" - assert bcat(testfn) == b"foo" - with pytest.raises(FileNotFoundError): - cat(testfn + '-invalid') - with pytest.raises(FileNotFoundError): - bcat(testfn + '-invalid') - assert cat(testfn + '-invalid', fallback="bar") == "bar" - assert bcat(testfn + '-invalid', fallback="bar") == "bar" - - -# =================================================================== -# --- Tests for wrap_numbers() function. -# =================================================================== - - -nt = collections.namedtuple('foo', 'a b c') - - -class TestWrapNumbers(PsutilTestCase): - def setUp(self): - wrap_numbers.cache_clear() - - tearDown = setUp - - def test_first_call(self): - input = {'disk1': nt(5, 5, 5)} - assert wrap_numbers(input, 'disk_io') == input - - def test_input_hasnt_changed(self): - input = {'disk1': nt(5, 5, 5)} - assert wrap_numbers(input, 'disk_io') == input - assert wrap_numbers(input, 'disk_io') == input - - def test_increase_but_no_wrap(self): - input = {'disk1': nt(5, 5, 5)} - assert wrap_numbers(input, 'disk_io') == input - input = {'disk1': nt(10, 15, 20)} - assert wrap_numbers(input, 'disk_io') == input - input = {'disk1': nt(20, 25, 30)} - assert wrap_numbers(input, 'disk_io') == input - input = {'disk1': nt(20, 25, 30)} - assert wrap_numbers(input, 'disk_io') == input - - def test_wrap(self): - # let's say 100 is the threshold - input = {'disk1': nt(100, 100, 100)} - assert wrap_numbers(input, 'disk_io') == input - # first wrap restarts from 10 - input = {'disk1': nt(100, 100, 10)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(100, 100, 110)} - # then it remains the same - input = {'disk1': nt(100, 100, 10)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(100, 100, 110)} - # then it goes up - input = {'disk1': nt(100, 100, 90)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(100, 100, 190)} - # then it wraps again - input = {'disk1': nt(100, 100, 20)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(100, 100, 210)} - # and remains the same - input = {'disk1': nt(100, 100, 20)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(100, 100, 210)} - # now wrap another num - input = {'disk1': nt(50, 100, 20)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(150, 100, 210)} - # and again - input = {'disk1': nt(40, 100, 20)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(190, 100, 210)} - # keep it the same - input = {'disk1': nt(40, 100, 20)} - assert wrap_numbers(input, 'disk_io') == {'disk1': nt(190, 100, 210)} - - def test_changing_keys(self): - # Emulate a case where the second call to disk_io() - # (or whatever) provides a new disk, then the new disk - # disappears on the third call. - input = {'disk1': nt(5, 5, 5)} - assert wrap_numbers(input, 'disk_io') == input - input = {'disk1': nt(5, 5, 5), 'disk2': nt(7, 7, 7)} - assert wrap_numbers(input, 'disk_io') == input - input = {'disk1': nt(8, 8, 8)} - assert wrap_numbers(input, 'disk_io') == input - - def test_changing_keys_w_wrap(self): - input = {'disk1': nt(50, 50, 50), 'disk2': nt(100, 100, 100)} - assert wrap_numbers(input, 'disk_io') == input - # disk 2 wraps - input = {'disk1': nt(50, 50, 50), 'disk2': nt(100, 100, 10)} - assert wrap_numbers(input, 'disk_io') == { - 'disk1': nt(50, 50, 50), - 'disk2': nt(100, 100, 110), - } - # disk 2 disappears - input = {'disk1': nt(50, 50, 50)} - assert wrap_numbers(input, 'disk_io') == input - - # then it appears again; the old wrap is supposed to be - # gone. - input = {'disk1': nt(50, 50, 50), 'disk2': nt(100, 100, 100)} - assert wrap_numbers(input, 'disk_io') == input - # remains the same - input = {'disk1': nt(50, 50, 50), 'disk2': nt(100, 100, 100)} - assert wrap_numbers(input, 'disk_io') == input - # and then wraps again - input = {'disk1': nt(50, 50, 50), 'disk2': nt(100, 100, 10)} - assert wrap_numbers(input, 'disk_io') == { - 'disk1': nt(50, 50, 50), - 'disk2': nt(100, 100, 110), - } - - def test_real_data(self): - d = { - 'nvme0n1': (300, 508, 640, 1571, 5970, 1987, 2049, 451751, 47048), - 'nvme0n1p1': (1171, 2, 5600256, 1024, 516, 0, 0, 0, 8), - 'nvme0n1p2': (54, 54, 2396160, 5165056, 4, 24, 30, 1207, 28), - 'nvme0n1p3': (2389, 4539, 5154, 150, 4828, 1844, 2019, 398, 348), - } - assert wrap_numbers(d, 'disk_io') == d - assert wrap_numbers(d, 'disk_io') == d - # decrease this ↓ - d = { - 'nvme0n1': (100, 508, 640, 1571, 5970, 1987, 2049, 451751, 47048), - 'nvme0n1p1': (1171, 2, 5600256, 1024, 516, 0, 0, 0, 8), - 'nvme0n1p2': (54, 54, 2396160, 5165056, 4, 24, 30, 1207, 28), - 'nvme0n1p3': (2389, 4539, 5154, 150, 4828, 1844, 2019, 398, 348), - } - out = wrap_numbers(d, 'disk_io') - assert out['nvme0n1'][0] == 400 - - # --- cache tests - - def test_cache_first_call(self): - input = {'disk1': nt(5, 5, 5)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - assert cache[1] == {'disk_io': {}} - assert cache[2] == {'disk_io': {}} - - def test_cache_call_twice(self): - input = {'disk1': nt(5, 5, 5)} - wrap_numbers(input, 'disk_io') - input = {'disk1': nt(10, 10, 10)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - assert cache[1] == { - 'disk_io': {('disk1', 0): 0, ('disk1', 1): 0, ('disk1', 2): 0} - } - assert cache[2] == {'disk_io': {}} - - def test_cache_wrap(self): - # let's say 100 is the threshold - input = {'disk1': nt(100, 100, 100)} - wrap_numbers(input, 'disk_io') - - # first wrap restarts from 10 - input = {'disk1': nt(100, 100, 10)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - assert cache[1] == { - 'disk_io': {('disk1', 0): 0, ('disk1', 1): 0, ('disk1', 2): 100} - } - assert cache[2] == {'disk_io': {'disk1': {('disk1', 2)}}} - - def check_cache_info(): - cache = wrap_numbers.cache_info() - assert cache[1] == { - 'disk_io': { - ('disk1', 0): 0, - ('disk1', 1): 0, - ('disk1', 2): 100, - } - } - assert cache[2] == {'disk_io': {'disk1': {('disk1', 2)}}} - - # then it remains the same - input = {'disk1': nt(100, 100, 10)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - check_cache_info() - - # then it goes up - input = {'disk1': nt(100, 100, 90)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - check_cache_info() - - # then it wraps again - input = {'disk1': nt(100, 100, 20)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - assert cache[1] == { - 'disk_io': {('disk1', 0): 0, ('disk1', 1): 0, ('disk1', 2): 190} - } - assert cache[2] == {'disk_io': {'disk1': {('disk1', 2)}}} - - def test_cache_changing_keys(self): - input = {'disk1': nt(5, 5, 5)} - wrap_numbers(input, 'disk_io') - input = {'disk1': nt(5, 5, 5), 'disk2': nt(7, 7, 7)} - wrap_numbers(input, 'disk_io') - cache = wrap_numbers.cache_info() - assert cache[0] == {'disk_io': input} - assert cache[1] == { - 'disk_io': {('disk1', 0): 0, ('disk1', 1): 0, ('disk1', 2): 0} - } - assert cache[2] == {'disk_io': {}} - - def test_cache_clear(self): - input = {'disk1': nt(5, 5, 5)} - wrap_numbers(input, 'disk_io') - wrap_numbers(input, 'disk_io') - wrap_numbers.cache_clear('disk_io') - assert wrap_numbers.cache_info() == ({}, {}, {}) - wrap_numbers.cache_clear('disk_io') - wrap_numbers.cache_clear('?!?') - - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_cache_clear_public_apis(self): - if not psutil.disk_io_counters() or not psutil.net_io_counters(): - return pytest.skip("no disks or NICs available") - psutil.disk_io_counters() - psutil.net_io_counters() - caches = wrap_numbers.cache_info() - for cache in caches: - assert 'psutil.disk_io_counters' in cache - assert 'psutil.net_io_counters' in cache - - psutil.disk_io_counters.cache_clear() - caches = wrap_numbers.cache_info() - for cache in caches: - assert 'psutil.net_io_counters' in cache - assert 'psutil.disk_io_counters' not in cache - - psutil.net_io_counters.cache_clear() - caches = wrap_numbers.cache_info() - assert caches == ({}, {}, {}) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_osx.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_osx.py deleted file mode 100644 index 33833c3..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_osx.py +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""macOS specific tests.""" - -import re -import time - -import psutil -from psutil import MACOS -from psutil.tests import AARCH64 -from psutil.tests import CI_TESTING -from psutil.tests import HAS_BATTERY -from psutil.tests import TOLERANCE_DISK_USAGE -from psutil.tests import TOLERANCE_SYS_MEM -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import retry_on_failure -from psutil.tests import sh -from psutil.tests import spawn_subproc -from psutil.tests import terminate - - -def sysctl(cmdline): - """Expects a sysctl command with an argument and parse the result - returning only the value of interest. - """ - out = sh(cmdline) - result = out.split()[1] - try: - return int(result) - except ValueError: - return result - - -def vm_stat(field): - """Wrapper around 'vm_stat' cmdline utility.""" - out = sh('vm_stat') - for line in out.split('\n'): - if field in line: - break - else: - raise ValueError("line not found") - return ( - int(re.search(r'\d+', line).group(0)) - * psutil._psplatform.cext.getpagesize() - ) - - -@pytest.mark.skipif(not MACOS, reason="MACOS only") -class TestProcess(PsutilTestCase): - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - def test_process_create_time(self): - output = sh(f"ps -o lstart -p {self.pid}") - start_ps = output.replace('STARTED', '').strip() - hhmmss = start_ps.split(' ')[-2] - year = start_ps.split(' ')[-1] - start_psutil = psutil.Process(self.pid).create_time() - assert hhmmss == time.strftime( - "%H:%M:%S", time.localtime(start_psutil) - ) - assert year == time.strftime("%Y", time.localtime(start_psutil)) - - -@pytest.mark.skipif(not MACOS, reason="MACOS only") -class TestSystemAPIs(PsutilTestCase): - - # --- disk - - @retry_on_failure() - def test_disks(self): - # test psutil.disk_usage() and psutil.disk_partitions() - # against "df -a" - def df(path): - out = sh(f'df -k "{path}"').strip() - lines = out.split('\n') - lines.pop(0) - line = lines.pop(0) - dev, total, used, free = line.split()[:4] - if dev == 'none': - dev = '' - total = int(total) * 1024 - used = int(used) * 1024 - free = int(free) * 1024 - return dev, total, used, free - - for part in psutil.disk_partitions(all=False): - usage = psutil.disk_usage(part.mountpoint) - dev, total, used, free = df(part.mountpoint) - assert part.device == dev - assert usage.total == total - assert abs(usage.free - free) < TOLERANCE_DISK_USAGE - assert abs(usage.used - used) < TOLERANCE_DISK_USAGE - - # --- cpu - - def test_cpu_count_logical(self): - num = sysctl("sysctl hw.logicalcpu") - assert num == psutil.cpu_count(logical=True) - - def test_cpu_count_cores(self): - num = sysctl("sysctl hw.physicalcpu") - assert num == psutil.cpu_count(logical=False) - - # TODO: remove this once 1892 is fixed - @pytest.mark.skipif(MACOS and AARCH64, reason="skipped due to #1892") - def test_cpu_freq(self): - freq = psutil.cpu_freq() - assert freq.current * 1000 * 1000 == sysctl("sysctl hw.cpufrequency") - assert freq.min * 1000 * 1000 == sysctl("sysctl hw.cpufrequency_min") - assert freq.max * 1000 * 1000 == sysctl("sysctl hw.cpufrequency_max") - - # --- virtual mem - - def test_vmem_total(self): - sysctl_hwphymem = sysctl('sysctl hw.memsize') - assert sysctl_hwphymem == psutil.virtual_memory().total - - @pytest.mark.skipif( - CI_TESTING and MACOS and AARCH64, - reason="skipped on MACOS + ARM64 + CI_TESTING", - ) - @retry_on_failure() - def test_vmem_free(self): - vmstat_val = vm_stat("free") - psutil_val = psutil.virtual_memory().free - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - @pytest.mark.skipif( - CI_TESTING and MACOS and AARCH64, - reason="skipped on MACOS + ARM64 + CI_TESTING", - ) - @retry_on_failure() - def test_vmem_active(self): - vmstat_val = vm_stat("active") - psutil_val = psutil.virtual_memory().active - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - # XXX: fails too often - @pytest.mark.skipif(CI_TESTING, reason="skipped on CI_TESTING") - @retry_on_failure() - def test_vmem_inactive(self): - vmstat_val = vm_stat("inactive") - psutil_val = psutil.virtual_memory().inactive - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_vmem_wired(self): - vmstat_val = vm_stat("wired") - psutil_val = psutil.virtual_memory().wired - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - # --- swap mem - - @retry_on_failure() - def test_swapmem_sin(self): - vmstat_val = vm_stat("Pageins") - psutil_val = psutil.swap_memory().sin - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - @retry_on_failure() - def test_swapmem_sout(self): - vmstat_val = vm_stat("Pageout") - psutil_val = psutil.swap_memory().sout - assert abs(psutil_val - vmstat_val) < TOLERANCE_SYS_MEM - - # --- network - - def test_net_if_stats(self): - for name, stats in psutil.net_if_stats().items(): - try: - out = sh(f"ifconfig {name}") - except RuntimeError: - pass - else: - assert stats.isup == ('RUNNING' in out), out - assert stats.mtu == int(re.findall(r'mtu (\d+)', out)[0]) - - # --- sensors_battery - - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_sensors_battery(self): - out = sh("pmset -g batt") - percent = re.search(r"(\d+)%", out).group(1) - drawing_from = re.search(r"Now drawing from '([^']+)'", out).group(1) - power_plugged = drawing_from == "AC Power" - psutil_result = psutil.sensors_battery() - assert psutil_result.power_plugged == power_plugged - assert psutil_result.percent == int(percent) - - # --- others - - def test_boot_time(self): - out = sh('sysctl kern.boottime') - a = float(re.search(r"sec\s*=\s*(\d+)", out).groups(0)[0]) - b = psutil.boot_time() - assert a == b diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_posix.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_posix.py deleted file mode 100644 index 26227cd..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_posix.py +++ /dev/null @@ -1,498 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""POSIX specific tests.""" - -import datetime -import errno -import os -import re -import shutil -import subprocess -import time -from unittest import mock - -import psutil -from psutil import AIX -from psutil import BSD -from psutil import LINUX -from psutil import MACOS -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil.tests import AARCH64 -from psutil.tests import HAS_NET_IO_COUNTERS -from psutil.tests import PYTHON_EXE -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import retry_on_failure -from psutil.tests import sh -from psutil.tests import skip_on_access_denied -from psutil.tests import spawn_subproc -from psutil.tests import terminate - -if POSIX: - import mmap - import resource - - -def ps(fmt, pid=None): - """Wrapper for calling the ps command with a little bit of cross-platform - support for a narrow range of features. - """ - - cmd = ['ps'] - - if LINUX: - cmd.append('--no-headers') - - if pid is not None: - cmd.extend(['-p', str(pid)]) - elif SUNOS or AIX: - cmd.append('-A') - else: - cmd.append('ax') - - if SUNOS: - fmt = fmt.replace("start", "stime") - - cmd.extend(['-o', fmt]) - - output = sh(cmd) - - output = output.splitlines() if LINUX else output.splitlines()[1:] - - all_output = [] - for line in output: - line = line.strip() - - try: - line = int(line) - except ValueError: - pass - - all_output.append(line) - - if pid is None: - return all_output - else: - return all_output[0] - - -# ps "-o" field names differ wildly between platforms. -# "comm" means "only executable name" but is not available on BSD platforms. -# "args" means "command with all its arguments", and is also not available -# on BSD platforms. -# "command" is like "args" on most platforms, but like "comm" on AIX, -# and not available on SUNOS. -# so for the executable name we can use "comm" on Solaris and split "command" -# on other platforms. -# to get the cmdline (with args) we have to use "args" on AIX and -# Solaris, and can use "command" on all others. - - -def ps_name(pid): - field = "command" - if SUNOS: - field = "comm" - command = ps(field, pid).split() - return command[0] - - -def ps_args(pid): - field = "command" - if AIX or SUNOS: - field = "args" - out = ps(field, pid) - # observed on BSD + Github CI: '/usr/local/bin/python3 -E -O (python3.9)' - out = re.sub(r"\(python.*?\)$", "", out) - return out.strip() - - -def ps_rss(pid): - field = "rss" - if AIX: - field = "rssize" - return ps(field, pid) - - -def ps_vsz(pid): - field = "vsz" - if AIX: - field = "vsize" - return ps(field, pid) - - -def df(device): - try: - out = sh(f"df -k {device}").strip() - except RuntimeError as err: - if "device busy" in str(err).lower(): - return pytest.skip("df returned EBUSY") - raise - line = out.split('\n')[1] - fields = line.split() - sys_total = int(fields[1]) * 1024 - sys_used = int(fields[2]) * 1024 - sys_free = int(fields[3]) * 1024 - sys_percent = float(fields[4].replace('%', '')) - return (sys_total, sys_used, sys_free, sys_percent) - - -@pytest.mark.skipif(not POSIX, reason="POSIX only") -class TestProcess(PsutilTestCase): - """Compare psutil results against 'ps' command line utility (mainly).""" - - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc( - [PYTHON_EXE, "-E", "-O"], stdin=subprocess.PIPE - ).pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - def test_ppid(self): - ppid_ps = ps('ppid', self.pid) - ppid_psutil = psutil.Process(self.pid).ppid() - assert ppid_ps == ppid_psutil - - def test_uid(self): - uid_ps = ps('uid', self.pid) - uid_psutil = psutil.Process(self.pid).uids().real - assert uid_ps == uid_psutil - - def test_gid(self): - gid_ps = ps('rgid', self.pid) - gid_psutil = psutil.Process(self.pid).gids().real - assert gid_ps == gid_psutil - - def test_username(self): - username_ps = ps('user', self.pid) - username_psutil = psutil.Process(self.pid).username() - assert username_ps == username_psutil - - def test_username_no_resolution(self): - # Emulate a case where the system can't resolve the uid to - # a username in which case psutil is supposed to return - # the stringified uid. - p = psutil.Process() - with mock.patch("psutil.pwd.getpwuid", side_effect=KeyError) as fun: - assert p.username() == str(p.uids().real) - assert fun.called - - @skip_on_access_denied() - @retry_on_failure() - def test_rss_memory(self): - # give python interpreter some time to properly initialize - # so that the results are the same - time.sleep(0.1) - rss_ps = ps_rss(self.pid) - rss_psutil = psutil.Process(self.pid).memory_info()[0] / 1024 - assert rss_ps == rss_psutil - - @skip_on_access_denied() - @retry_on_failure() - def test_vsz_memory(self): - # give python interpreter some time to properly initialize - # so that the results are the same - time.sleep(0.1) - vsz_ps = ps_vsz(self.pid) - vsz_psutil = psutil.Process(self.pid).memory_info()[1] / 1024 - assert vsz_ps == vsz_psutil - - def test_name(self): - name_ps = ps_name(self.pid) - # remove path if there is any, from the command - name_ps = os.path.basename(name_ps).lower() - name_psutil = psutil.Process(self.pid).name().lower() - # ...because of how we calculate PYTHON_EXE; on MACOS this may - # be "pythonX.Y". - name_ps = re.sub(r"\d.\d", "", name_ps) - name_psutil = re.sub(r"\d.\d", "", name_psutil) - # ...may also be "python.X" - name_ps = re.sub(r"\d", "", name_ps) - name_psutil = re.sub(r"\d", "", name_psutil) - assert name_ps == name_psutil - - def test_name_long(self): - # On UNIX the kernel truncates the name to the first 15 - # characters. In such a case psutil tries to determine the - # full name from the cmdline. - name = "long-program-name" - cmdline = ["long-program-name-extended", "foo", "bar"] - with mock.patch("psutil._psplatform.Process.name", return_value=name): - with mock.patch( - "psutil._psplatform.Process.cmdline", return_value=cmdline - ): - p = psutil.Process() - assert p.name() == "long-program-name-extended" - - def test_name_long_cmdline_ad_exc(self): - # Same as above but emulates a case where cmdline() raises - # AccessDenied in which case psutil is supposed to return - # the truncated name instead of crashing. - name = "long-program-name" - with mock.patch("psutil._psplatform.Process.name", return_value=name): - with mock.patch( - "psutil._psplatform.Process.cmdline", - side_effect=psutil.AccessDenied(0, ""), - ): - p = psutil.Process() - assert p.name() == "long-program-name" - - def test_name_long_cmdline_nsp_exc(self): - # Same as above but emulates a case where cmdline() raises NSP - # which is supposed to propagate. - name = "long-program-name" - with mock.patch("psutil._psplatform.Process.name", return_value=name): - with mock.patch( - "psutil._psplatform.Process.cmdline", - side_effect=psutil.NoSuchProcess(0, ""), - ): - p = psutil.Process() - with pytest.raises(psutil.NoSuchProcess): - p.name() - - @pytest.mark.skipif(MACOS or BSD, reason="ps -o start not available") - def test_create_time(self): - time_ps = ps('start', self.pid) - time_psutil = psutil.Process(self.pid).create_time() - time_psutil_tstamp = datetime.datetime.fromtimestamp( - time_psutil - ).strftime("%H:%M:%S") - # sometimes ps shows the time rounded up instead of down, so we check - # for both possible values - round_time_psutil = round(time_psutil) - round_time_psutil_tstamp = datetime.datetime.fromtimestamp( - round_time_psutil - ).strftime("%H:%M:%S") - assert time_ps in {time_psutil_tstamp, round_time_psutil_tstamp} - - def test_exe(self): - ps_pathname = ps_name(self.pid) - psutil_pathname = psutil.Process(self.pid).exe() - try: - assert ps_pathname == psutil_pathname - except AssertionError: - # certain platforms such as BSD are more accurate returning: - # "/usr/local/bin/python3.7" - # ...instead of: - # "/usr/local/bin/python" - # We do not want to consider this difference in accuracy - # an error. - adjusted_ps_pathname = ps_pathname[: len(ps_pathname)] - assert ps_pathname == adjusted_ps_pathname - - # On macOS the official python installer exposes a python wrapper that - # executes a python executable hidden inside an application bundle inside - # the Python framework. - # There's a race condition between the ps call & the psutil call below - # depending on the completion of the execve call so let's retry on failure - @retry_on_failure() - def test_cmdline(self): - ps_cmdline = ps_args(self.pid) - psutil_cmdline = " ".join(psutil.Process(self.pid).cmdline()) - if AARCH64 and len(ps_cmdline) < len(psutil_cmdline): - assert psutil_cmdline.startswith(ps_cmdline) - else: - assert ps_cmdline == psutil_cmdline - - # On SUNOS "ps" reads niceness /proc/pid/psinfo which returns an - # incorrect value (20); the real deal is getpriority(2) which - # returns 0; psutil relies on it, see: - # https://github.com/giampaolo/psutil/issues/1082 - # AIX has the same issue - @pytest.mark.skipif(SUNOS, reason="not reliable on SUNOS") - @pytest.mark.skipif(AIX, reason="not reliable on AIX") - def test_nice(self): - ps_nice = ps('nice', self.pid) - psutil_nice = psutil.Process().nice() - assert ps_nice == psutil_nice - - -@pytest.mark.skipif(not POSIX, reason="POSIX only") -class TestSystemAPIs(PsutilTestCase): - """Test some system APIs.""" - - @retry_on_failure() - def test_pids(self): - # Note: this test might fail if the OS is starting/killing - # other processes in the meantime - pids_ps = sorted(ps("pid")) - pids_psutil = psutil.pids() - - # on MACOS and OPENBSD ps doesn't show pid 0 - if MACOS or (OPENBSD and 0 not in pids_ps): - pids_ps.insert(0, 0) - - # There will often be one more process in pids_ps for ps itself - if len(pids_ps) - len(pids_psutil) > 1: - difference = [x for x in pids_psutil if x not in pids_ps] + [ - x for x in pids_ps if x not in pids_psutil - ] - return pytest.fail("difference: " + str(difference)) - - # for some reason ifconfig -a does not report all interfaces - # returned by psutil - @pytest.mark.skipif(SUNOS, reason="unreliable on SUNOS") - @pytest.mark.skipif(not shutil.which("ifconfig"), reason="no ifconfig cmd") - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_nic_names(self): - output = sh("ifconfig -a") - for nic in psutil.net_io_counters(pernic=True): - for line in output.split(): - if line.startswith(nic): - break - else: - return pytest.fail( - f"couldn't find {nic} nic in 'ifconfig -a'" - f" output\n{output}" - ) - - @retry_on_failure() - def test_users(self): - out = sh("who -u") - if not out.strip(): - return pytest.skip("no users on this system") - - susers = [] - for line in out.splitlines(): - user = line.split()[0] - terminal = line.split()[1] - if LINUX or MACOS: - try: - pid = int(line.split()[-2]) - except ValueError: - pid = int(line.split()[-1]) - susers.append((user, terminal, pid)) - else: - susers.append((user, terminal)) - - if LINUX or MACOS: - pusers = [(u.name, u.terminal, u.pid) for u in psutil.users()] - else: - pusers = [(u.name, u.terminal) for u in psutil.users()] - - assert len(susers) == len(pusers) - assert sorted(susers) == sorted(pusers) - - for user in psutil.users(): - if user.pid is not None: - assert user.pid > 0 - - @retry_on_failure() - def test_users_started(self): - out = sh("who -u") - if not out.strip(): - return pytest.skip("no users on this system") - tstamp = None - # '2023-04-11 09:31' (Linux) - started = re.findall(r"\d\d\d\d-\d\d-\d\d \d\d:\d\d", out) - if started: - tstamp = "%Y-%m-%d %H:%M" - else: - # 'Apr 10 22:27' (macOS) - started = re.findall(r"[A-Z][a-z][a-z] \d\d \d\d:\d\d", out) - if started: - tstamp = "%b %d %H:%M" - else: - # 'Apr 10' - started = re.findall(r"[A-Z][a-z][a-z] \d\d", out) - if started: - tstamp = "%b %d" - else: - # 'apr 10' (sunOS) - started = re.findall(r"[a-z][a-z][a-z] \d\d", out) - if started: - tstamp = "%b %d" - started = [x.capitalize() for x in started] - - if not tstamp: - return pytest.skip(f"cannot interpret tstamp in who output\n{out}") - - with self.subTest(psutil=psutil.users(), who=out): - for idx, u in enumerate(psutil.users()): - psutil_value = datetime.datetime.fromtimestamp( - u.started - ).strftime(tstamp) - assert psutil_value == started[idx] - - def test_pid_exists_let_raise(self): - # According to "man 2 kill" possible error values for kill - # are (EINVAL, EPERM, ESRCH). Test that any other errno - # results in an exception. - with mock.patch( - "psutil._psposix.os.kill", side_effect=OSError(errno.EBADF, "") - ) as m: - with pytest.raises(OSError): - psutil._psposix.pid_exists(os.getpid()) - assert m.called - - def test_os_waitpid_let_raise(self): - # os.waitpid() is supposed to catch EINTR and ECHILD only. - # Test that any other errno results in an exception. - with mock.patch( - "psutil._psposix.os.waitpid", side_effect=OSError(errno.EBADF, "") - ) as m: - with pytest.raises(OSError): - psutil._psposix.wait_pid(os.getpid()) - assert m.called - - def test_os_waitpid_eintr(self): - # os.waitpid() is supposed to "retry" on EINTR. - with mock.patch( - "psutil._psposix.os.waitpid", side_effect=OSError(errno.EINTR, "") - ) as m: - with pytest.raises(psutil._psposix.TimeoutExpired): - psutil._psposix.wait_pid(os.getpid(), timeout=0.01) - assert m.called - - def test_os_waitpid_bad_ret_status(self): - # Simulate os.waitpid() returning a bad status. - with mock.patch( - "psutil._psposix.os.waitpid", return_value=(1, -1) - ) as m: - with pytest.raises(ValueError): - psutil._psposix.wait_pid(os.getpid()) - assert m.called - - # AIX can return '-' in df output instead of numbers, e.g. for /proc - @pytest.mark.skipif(AIX, reason="unreliable on AIX") - @retry_on_failure() - def test_disk_usage(self): - tolerance = 4 * 1024 * 1024 # 4MB - for part in psutil.disk_partitions(all=False): - usage = psutil.disk_usage(part.mountpoint) - try: - sys_total, sys_used, sys_free, sys_percent = df(part.device) - except RuntimeError as err: - # see: - # https://travis-ci.org/giampaolo/psutil/jobs/138338464 - # https://travis-ci.org/giampaolo/psutil/jobs/138343361 - err = str(err).lower() - if ( - "no such file or directory" in err - or "raw devices not supported" in err - or "permission denied" in err - ): - continue - raise - else: - assert abs(usage.total - sys_total) < tolerance - assert abs(usage.used - sys_used) < tolerance - assert abs(usage.free - sys_free) < tolerance - assert abs(usage.percent - sys_percent) <= 1 - - -@pytest.mark.skipif(not POSIX, reason="POSIX only") -class TestMisc(PsutilTestCase): - def test_getpagesize(self): - pagesize = psutil._psplatform.cext.getpagesize() - assert pagesize > 0 - assert pagesize == resource.getpagesize() - assert pagesize == mmap.PAGESIZE diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_process.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_process.py deleted file mode 100644 index fa03150..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_process.py +++ /dev/null @@ -1,1660 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for psutil.Process class.""" - -import collections -import contextlib -import errno -import getpass -import io -import itertools -import os -import signal -import socket -import stat -import string -import subprocess -import sys -import textwrap -import time -from unittest import mock - -import psutil -from psutil import AIX -from psutil import BSD -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import OSX -from psutil import POSIX -from psutil import WINDOWS -from psutil._common import open_text -from psutil.tests import CI_TESTING -from psutil.tests import GITHUB_ACTIONS -from psutil.tests import GLOBAL_TIMEOUT -from psutil.tests import HAS_CPU_AFFINITY -from psutil.tests import HAS_ENVIRON -from psutil.tests import HAS_IONICE -from psutil.tests import HAS_MEMORY_MAPS -from psutil.tests import HAS_PROC_CPU_NUM -from psutil.tests import HAS_PROC_IO_COUNTERS -from psutil.tests import HAS_RLIMIT -from psutil.tests import HAS_THREADS -from psutil.tests import MACOS_11PLUS -from psutil.tests import PYPY -from psutil.tests import PYTHON_EXE -from psutil.tests import PYTHON_EXE_ENV -from psutil.tests import PsutilTestCase -from psutil.tests import ThreadTask -from psutil.tests import call_until -from psutil.tests import copyload_shared_lib -from psutil.tests import create_c_exe -from psutil.tests import create_py_exe -from psutil.tests import process_namespace -from psutil.tests import pytest -from psutil.tests import reap_children -from psutil.tests import retry_on_failure -from psutil.tests import sh -from psutil.tests import skip_on_access_denied -from psutil.tests import skip_on_not_implemented -from psutil.tests import wait_for_pid - -# =================================================================== -# --- psutil.Process class tests -# =================================================================== - - -class TestProcess(PsutilTestCase): - """Tests for psutil.Process class.""" - - def test_pid(self): - p = psutil.Process() - assert p.pid == os.getpid() - with pytest.raises(AttributeError): - p.pid = 33 - - def test_kill(self): - p = self.spawn_psproc() - p.kill() - code = p.wait() - if WINDOWS: - assert code == signal.SIGTERM - else: - assert code == -signal.SIGKILL - self.assert_proc_gone(p) - - def test_terminate(self): - p = self.spawn_psproc() - p.terminate() - code = p.wait() - if WINDOWS: - assert code == signal.SIGTERM - else: - assert code == -signal.SIGTERM - self.assert_proc_gone(p) - - def test_send_signal(self): - sig = signal.SIGKILL if POSIX else signal.SIGTERM - p = self.spawn_psproc() - p.send_signal(sig) - code = p.wait() - if WINDOWS: - assert code == sig - else: - assert code == -sig - self.assert_proc_gone(p) - - @pytest.mark.skipif(not POSIX, reason="not POSIX") - def test_send_signal_mocked(self): - sig = signal.SIGTERM - p = self.spawn_psproc() - with mock.patch('psutil.os.kill', side_effect=ProcessLookupError): - with pytest.raises(psutil.NoSuchProcess): - p.send_signal(sig) - - p = self.spawn_psproc() - with mock.patch('psutil.os.kill', side_effect=PermissionError): - with pytest.raises(psutil.AccessDenied): - p.send_signal(sig) - - def test_wait_exited(self): - # Test waitpid() + WIFEXITED -> WEXITSTATUS. - # normal return, same as exit(0) - cmd = [PYTHON_EXE, "-c", "pass"] - p = self.spawn_psproc(cmd) - code = p.wait() - assert code == 0 - self.assert_proc_gone(p) - # exit(1), implicit in case of error - cmd = [PYTHON_EXE, "-c", "1 / 0"] - p = self.spawn_psproc(cmd, stderr=subprocess.PIPE) - code = p.wait() - assert code == 1 - self.assert_proc_gone(p) - # via sys.exit() - cmd = [PYTHON_EXE, "-c", "import sys; sys.exit(5);"] - p = self.spawn_psproc(cmd) - code = p.wait() - assert code == 5 - self.assert_proc_gone(p) - # via os._exit() - cmd = [PYTHON_EXE, "-c", "import os; os._exit(5);"] - p = self.spawn_psproc(cmd) - code = p.wait() - assert code == 5 - self.assert_proc_gone(p) - - @pytest.mark.skipif(NETBSD, reason="fails on NETBSD") - def test_wait_stopped(self): - p = self.spawn_psproc() - if POSIX: - # Test waitpid() + WIFSTOPPED and WIFCONTINUED. - # Note: if a process is stopped it ignores SIGTERM. - p.send_signal(signal.SIGSTOP) - with pytest.raises(psutil.TimeoutExpired): - p.wait(timeout=0.001) - p.send_signal(signal.SIGCONT) - with pytest.raises(psutil.TimeoutExpired): - p.wait(timeout=0.001) - p.send_signal(signal.SIGTERM) - assert p.wait() == -signal.SIGTERM - assert p.wait() == -signal.SIGTERM - else: - p.suspend() - with pytest.raises(psutil.TimeoutExpired): - p.wait(timeout=0.001) - p.resume() - with pytest.raises(psutil.TimeoutExpired): - p.wait(timeout=0.001) - p.terminate() - assert p.wait() == signal.SIGTERM - assert p.wait() == signal.SIGTERM - - def test_wait_non_children(self): - # Test wait() against a process which is not our direct - # child. - child, grandchild = self.spawn_children_pair() - with pytest.raises(psutil.TimeoutExpired): - child.wait(0.01) - with pytest.raises(psutil.TimeoutExpired): - grandchild.wait(0.01) - # We also terminate the direct child otherwise the - # grandchild will hang until the parent is gone. - child.terminate() - grandchild.terminate() - child_ret = child.wait() - grandchild_ret = grandchild.wait() - if POSIX: - assert child_ret == -signal.SIGTERM - # For processes which are not our children we're supposed - # to get None. - assert grandchild_ret is None - else: - assert child_ret == signal.SIGTERM - assert child_ret == signal.SIGTERM - - def test_wait_timeout(self): - p = self.spawn_psproc() - p.name() - with pytest.raises(psutil.TimeoutExpired): - p.wait(0.01) - with pytest.raises(psutil.TimeoutExpired): - p.wait(0) - with pytest.raises(ValueError): - p.wait(-1) - - def test_wait_timeout_nonblocking(self): - p = self.spawn_psproc() - with pytest.raises(psutil.TimeoutExpired): - p.wait(0) - p.kill() - stop_at = time.time() + GLOBAL_TIMEOUT - while time.time() < stop_at: - try: - code = p.wait(0) - break - except psutil.TimeoutExpired: - pass - else: - return pytest.fail('timeout') - if POSIX: - assert code == -signal.SIGKILL - else: - assert code == signal.SIGTERM - self.assert_proc_gone(p) - - def test_cpu_percent(self): - p = psutil.Process() - p.cpu_percent(interval=0.001) - p.cpu_percent(interval=0.001) - for _ in range(100): - percent = p.cpu_percent(interval=None) - assert isinstance(percent, float) - assert percent >= 0.0 - with pytest.raises(ValueError): - p.cpu_percent(interval=-1) - - def test_cpu_percent_numcpus_none(self): - # See: https://github.com/giampaolo/psutil/issues/1087 - with mock.patch('psutil.cpu_count', return_value=None) as m: - psutil.Process().cpu_percent() - assert m.called - - def test_cpu_times(self): - times = psutil.Process().cpu_times() - assert times.user >= 0.0, times - assert times.system >= 0.0, times - assert times.children_user >= 0.0, times - assert times.children_system >= 0.0, times - if LINUX: - assert times.iowait >= 0.0, times - # make sure returned values can be pretty printed with strftime - for name in times._fields: - time.strftime("%H:%M:%S", time.localtime(getattr(times, name))) - - @pytest.mark.skipif(not HAS_PROC_CPU_NUM, reason="not supported") - def test_cpu_num(self): - p = psutil.Process() - num = p.cpu_num() - assert num >= 0 - if psutil.cpu_count() == 1: - assert num == 0 - assert p.cpu_num() in range(psutil.cpu_count()) - - def test_create_time(self): - p = self.spawn_psproc() - now = time.time() - # Fail if the difference with current time is > 2s. - assert abs(p.create_time() - now) < 2 - # make sure returned value can be pretty printed with strftime - time.strftime("%Y %m %d %H:%M:%S", time.localtime(p.create_time())) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_terminal(self): - terminal = psutil.Process().terminal() - if terminal is not None: - try: - tty = os.path.realpath(sh('tty')) - except RuntimeError: - # Note: happens if pytest is run without the `-s` opt. - return pytest.skip("can't rely on `tty` CLI") - else: - assert terminal == tty - - @pytest.mark.skipif(not HAS_PROC_IO_COUNTERS, reason="not supported") - @skip_on_not_implemented(only_if=LINUX) - def test_io_counters(self): - p = psutil.Process() - # test reads - io1 = p.io_counters() - with open(PYTHON_EXE, 'rb') as f: - f.read() - io2 = p.io_counters() - if not BSD and not AIX: - assert io2.read_count > io1.read_count - assert io2.write_count == io1.write_count - if LINUX: - assert io2.read_chars > io1.read_chars - assert io2.write_chars == io1.write_chars - else: - assert io2.read_bytes >= io1.read_bytes - assert io2.write_bytes >= io1.write_bytes - - # test writes - io1 = p.io_counters() - with open(self.get_testfn(), 'wb') as f: - f.write(bytes("x" * 1000000, 'ascii')) - io2 = p.io_counters() - assert io2.write_count >= io1.write_count - assert io2.write_bytes >= io1.write_bytes - assert io2.read_count >= io1.read_count - assert io2.read_bytes >= io1.read_bytes - if LINUX: - assert io2.write_chars > io1.write_chars - assert io2.read_chars >= io1.read_chars - - # sanity check - for i in range(len(io2)): - if BSD and i >= 2: - # On BSD read_bytes and write_bytes are always set to -1. - continue - assert io2[i] >= 0 - assert io2[i] >= 0 - - @pytest.mark.skipif(not HAS_IONICE, reason="not supported") - @pytest.mark.skipif(not LINUX, reason="linux only") - def test_ionice_linux(self): - def cleanup(init): - ioclass, value = init - if ioclass == psutil.IOPRIO_CLASS_NONE: - value = 0 - p.ionice(ioclass, value) - - p = psutil.Process() - if not CI_TESTING: - assert p.ionice()[0] == psutil.IOPRIO_CLASS_NONE - assert psutil.IOPRIO_CLASS_NONE == 0 - assert psutil.IOPRIO_CLASS_RT == 1 # high - assert psutil.IOPRIO_CLASS_BE == 2 # normal - assert psutil.IOPRIO_CLASS_IDLE == 3 # low - init = p.ionice() - self.addCleanup(cleanup, init) - - # low - p.ionice(psutil.IOPRIO_CLASS_IDLE) - assert tuple(p.ionice()) == (psutil.IOPRIO_CLASS_IDLE, 0) - with pytest.raises(ValueError): # accepts no value - p.ionice(psutil.IOPRIO_CLASS_IDLE, value=7) - # normal - p.ionice(psutil.IOPRIO_CLASS_BE) - assert tuple(p.ionice()) == (psutil.IOPRIO_CLASS_BE, 0) - p.ionice(psutil.IOPRIO_CLASS_BE, value=7) - assert tuple(p.ionice()) == (psutil.IOPRIO_CLASS_BE, 7) - with pytest.raises(ValueError): - p.ionice(psutil.IOPRIO_CLASS_BE, value=8) - try: - p.ionice(psutil.IOPRIO_CLASS_RT, value=7) - except psutil.AccessDenied: - pass - # errs - with pytest.raises(ValueError, match="ioclass accepts no value"): - p.ionice(psutil.IOPRIO_CLASS_NONE, 1) - with pytest.raises(ValueError, match="ioclass accepts no value"): - p.ionice(psutil.IOPRIO_CLASS_IDLE, 1) - with pytest.raises( - ValueError, match="'ioclass' argument must be specified" - ): - p.ionice(value=1) - - @pytest.mark.skipif(not HAS_IONICE, reason="not supported") - @pytest.mark.skipif( - not WINDOWS, reason="not supported on this win version" - ) - def test_ionice_win(self): - p = psutil.Process() - if not CI_TESTING: - assert p.ionice() == psutil.IOPRIO_NORMAL - init = p.ionice() - self.addCleanup(p.ionice, init) - - # base - p.ionice(psutil.IOPRIO_VERYLOW) - assert p.ionice() == psutil.IOPRIO_VERYLOW - p.ionice(psutil.IOPRIO_LOW) - assert p.ionice() == psutil.IOPRIO_LOW - try: - p.ionice(psutil.IOPRIO_HIGH) - except psutil.AccessDenied: - pass - else: - assert p.ionice() == psutil.IOPRIO_HIGH - # errs - with pytest.raises( - TypeError, match="value argument not accepted on Windows" - ): - p.ionice(psutil.IOPRIO_NORMAL, value=1) - with pytest.raises(ValueError, match="is not a valid priority"): - p.ionice(psutil.IOPRIO_HIGH + 1) - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_get(self): - import resource - - p = psutil.Process(os.getpid()) - names = [x for x in dir(psutil) if x.startswith('RLIMIT')] - assert names, names - for name in names: - value = getattr(psutil, name) - assert value >= 0 - if name in dir(resource): - assert value == getattr(resource, name) - # XXX - On PyPy RLIMIT_INFINITY returned by - # resource.getrlimit() is reported as a very big long - # number instead of -1. It looks like a bug with PyPy. - if PYPY: - continue - assert p.rlimit(value) == resource.getrlimit(value) - else: - ret = p.rlimit(value) - assert len(ret) == 2 - assert ret[0] >= -1 - assert ret[1] >= -1 - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_set(self): - p = self.spawn_psproc() - p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) - assert p.rlimit(psutil.RLIMIT_NOFILE) == (5, 5) - # If pid is 0 prlimit() applies to the calling process and - # we don't want that. - if LINUX: - with pytest.raises(ValueError, match="can't use prlimit"): - psutil._psplatform.Process(0).rlimit(0) - with pytest.raises(ValueError): - p.rlimit(psutil.RLIMIT_NOFILE, (5, 5, 5)) - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit(self): - p = psutil.Process() - testfn = self.get_testfn() - soft, hard = p.rlimit(psutil.RLIMIT_FSIZE) - try: - p.rlimit(psutil.RLIMIT_FSIZE, (1024, hard)) - with open(testfn, "wb") as f: - f.write(b"X" * 1024) - # write() or flush() doesn't always cause the exception - # but close() will. - with pytest.raises(OSError) as exc: - with open(testfn, "wb") as f: - f.write(b"X" * 1025) - assert exc.value.errno == errno.EFBIG - finally: - p.rlimit(psutil.RLIMIT_FSIZE, (soft, hard)) - assert p.rlimit(psutil.RLIMIT_FSIZE) == (soft, hard) - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_infinity(self): - # First set a limit, then re-set it by specifying INFINITY - # and assume we overridden the previous limit. - p = psutil.Process() - soft, hard = p.rlimit(psutil.RLIMIT_FSIZE) - try: - p.rlimit(psutil.RLIMIT_FSIZE, (1024, hard)) - p.rlimit(psutil.RLIMIT_FSIZE, (psutil.RLIM_INFINITY, hard)) - with open(self.get_testfn(), "wb") as f: - f.write(b"X" * 2048) - finally: - p.rlimit(psutil.RLIMIT_FSIZE, (soft, hard)) - assert p.rlimit(psutil.RLIMIT_FSIZE) == (soft, hard) - - @pytest.mark.skipif(not HAS_RLIMIT, reason="not supported") - def test_rlimit_infinity_value(self): - # RLIMIT_FSIZE should be RLIM_INFINITY, which will be a really - # big number on a platform with large file support. On these - # platforms we need to test that the get/setrlimit functions - # properly convert the number to a C long long and that the - # conversion doesn't raise an error. - p = psutil.Process() - soft, hard = p.rlimit(psutil.RLIMIT_FSIZE) - assert hard == psutil.RLIM_INFINITY - p.rlimit(psutil.RLIMIT_FSIZE, (soft, hard)) - - @pytest.mark.xdist_group(name="serial") - def test_num_threads(self): - # on certain platforms such as Linux we might test for exact - # thread number, since we always have with 1 thread per process, - # but this does not apply across all platforms (MACOS, Windows) - p = psutil.Process() - if OPENBSD: - try: - step1 = p.num_threads() - except psutil.AccessDenied: - return pytest.skip("on OpenBSD this requires root access") - else: - step1 = p.num_threads() - - with ThreadTask(): - step2 = p.num_threads() - assert step2 == step1 + 1 - - @pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") - def test_num_handles(self): - # a better test is done later into test/_windows.py - p = psutil.Process() - assert p.num_handles() > 0 - - @pytest.mark.skipif(not HAS_THREADS, reason="not supported") - def test_threads(self): - p = psutil.Process() - if OPENBSD: - try: - step1 = p.threads() - except psutil.AccessDenied: - return pytest.skip("on OpenBSD this requires root access") - else: - step1 = p.threads() - - with ThreadTask(): - step2 = p.threads() - assert len(step2) == len(step1) + 1 - athread = step2[0] - # test named tuple - assert athread.id == athread[0] - assert athread.user_time == athread[1] - assert athread.system_time == athread[2] - - @retry_on_failure() - @skip_on_access_denied(only_if=MACOS) - @pytest.mark.skipif(not HAS_THREADS, reason="not supported") - def test_threads_2(self): - p = self.spawn_psproc() - if OPENBSD: - try: - p.threads() - except psutil.AccessDenied: - return pytest.skip("on OpenBSD this requires root access") - assert ( - abs(p.cpu_times().user - sum(x.user_time for x in p.threads())) - < 0.1 - ) - assert ( - abs(p.cpu_times().system - sum(x.system_time for x in p.threads())) - < 0.1 - ) - - @retry_on_failure() - def test_memory_info(self): - p = psutil.Process() - - # step 1 - get a base value to compare our results - rss1, vms1 = p.memory_info()[:2] - percent1 = p.memory_percent() - assert rss1 > 0 - assert vms1 > 0 - - # step 2 - allocate some memory - memarr = [None] * 1500000 - - rss2, vms2 = p.memory_info()[:2] - percent2 = p.memory_percent() - - # step 3 - make sure that the memory usage bumped up - assert rss2 > rss1 - assert vms2 >= vms1 # vms might be equal - assert percent2 > percent1 - del memarr - - if WINDOWS: - mem = p.memory_info() - assert mem.rss == mem.wset - assert mem.vms == mem.pagefile - - mem = p.memory_info() - for name in mem._fields: - assert getattr(mem, name) >= 0 - - def test_memory_full_info(self): - p = psutil.Process() - total = psutil.virtual_memory().total - mem = p.memory_full_info() - for name in mem._fields: - value = getattr(mem, name) - assert value >= 0 - if (name == "vms" and OSX) or LINUX: - continue - assert value <= total - if LINUX or WINDOWS or MACOS: - assert mem.uss >= 0 - if LINUX: - assert mem.pss >= 0 - assert mem.swap >= 0 - - @pytest.mark.skipif(not HAS_MEMORY_MAPS, reason="not supported") - def test_memory_maps(self): - p = psutil.Process() - maps = p.memory_maps() - assert len(maps) == len(set(maps)) - ext_maps = p.memory_maps(grouped=False) - - for nt in maps: - if nt.path.startswith('['): - continue - if BSD and nt.path == "pvclock": - continue - assert os.path.isabs(nt.path), nt.path - - if POSIX: - try: - assert os.path.exists(nt.path) or os.path.islink( - nt.path - ), nt.path - except AssertionError: - if not LINUX: - raise - # https://github.com/giampaolo/psutil/issues/759 - with open_text('/proc/self/smaps') as f: - data = f.read() - if f"{nt.path} (deleted)" not in data: - raise - elif '64' not in os.path.basename(nt.path): - # XXX - On Windows we have this strange behavior with - # 64 bit dlls: they are visible via explorer but cannot - # be accessed via os.stat() (wtf?). - try: - st = os.stat(nt.path) - except FileNotFoundError: - pass - else: - assert stat.S_ISREG(st.st_mode), nt.path - - for nt in ext_maps: - for fname in nt._fields: - value = getattr(nt, fname) - if fname == 'path': - continue - if fname in {'addr', 'perms'}: - assert value, value - else: - assert isinstance(value, int) - assert value >= 0, value - - @pytest.mark.skipif(not HAS_MEMORY_MAPS, reason="not supported") - def test_memory_maps_lists_lib(self): - # Make sure a newly loaded shared lib is listed. - p = psutil.Process() - with copyload_shared_lib() as path: - - def normpath(p): - return os.path.realpath(os.path.normcase(p)) - - libpaths = [normpath(x.path) for x in p.memory_maps()] - assert normpath(path) in libpaths - - def test_memory_percent(self): - p = psutil.Process() - p.memory_percent() - with pytest.raises(ValueError): - p.memory_percent(memtype="?!?") - if LINUX or MACOS or WINDOWS: - p.memory_percent(memtype='uss') - - def test_is_running(self): - p = self.spawn_psproc() - assert p.is_running() - assert p.is_running() - p.kill() - p.wait() - assert not p.is_running() - assert not p.is_running() - - def test_exe(self): - p = self.spawn_psproc() - exe = p.exe() - try: - assert exe == PYTHON_EXE - except AssertionError: - if WINDOWS and len(exe) == len(PYTHON_EXE): - # on Windows we don't care about case sensitivity - normcase = os.path.normcase - assert normcase(exe) == normcase(PYTHON_EXE) - else: - # certain platforms such as BSD are more accurate returning: - # "/usr/local/bin/python3.7" - # ...instead of: - # "/usr/local/bin/python" - # We do not want to consider this difference in accuracy - # an error. - ver = f"{sys.version_info[0]}.{sys.version_info[1]}" - try: - assert exe.replace(ver, '') == PYTHON_EXE.replace(ver, '') - except AssertionError: - # Typically MACOS. Really not sure what to do here. - pass - - out = sh([exe, "-c", "import os; print('hey')"]) - assert out == 'hey' - - def test_cmdline(self): - cmdline = [ - PYTHON_EXE, - "-c", - "import time; [time.sleep(0.1) for x in range(100)]", - ] - p = self.spawn_psproc(cmdline) - - if NETBSD and p.cmdline() == []: - # https://github.com/giampaolo/psutil/issues/2250 - return pytest.skip("OPENBSD: returned EBUSY") - - # XXX - most of the times the underlying sysctl() call on Net - # and Open BSD returns a truncated string. - # Also /proc/pid/cmdline behaves the same so it looks - # like this is a kernel bug. - # XXX - AIX truncates long arguments in /proc/pid/cmdline - if NETBSD or OPENBSD or AIX: - assert p.cmdline()[0] == PYTHON_EXE - else: - if MACOS and CI_TESTING: - pyexe = p.cmdline()[0] - if pyexe != PYTHON_EXE: - assert ' '.join(p.cmdline()[1:]) == ' '.join(cmdline[1:]) - return None - assert ' '.join(p.cmdline()) == ' '.join(cmdline) - - def test_long_cmdline(self): - cmdline = [PYTHON_EXE] - cmdline.extend(["-v"] * 50) - cmdline.extend( - ["-c", "import time; [time.sleep(0.1) for x in range(100)]"] - ) - p = self.spawn_psproc(cmdline) - - # XXX - flaky test: exclude the python exe which, for some - # reason, and only sometimes, on OSX appears different. - cmdline = cmdline[1:] - - if OPENBSD: - # XXX: for some reason the test process may turn into a - # zombie (don't know why). - try: - assert p.cmdline()[1:] == cmdline - except psutil.ZombieProcess: - return pytest.skip("OPENBSD: process turned into zombie") - else: - ret = p.cmdline()[1:] - if NETBSD and ret == []: - # https://github.com/giampaolo/psutil/issues/2250 - return pytest.skip("OPENBSD: returned EBUSY") - assert ret == cmdline - - def test_name(self): - p = self.spawn_psproc() - name = p.name().lower() - if name.endswith("t"): # in the free-threaded build - name = name[:-1] - pyexe = os.path.basename(os.path.realpath(sys.executable)).lower() - assert pyexe.startswith(name), (pyexe, name) - - @retry_on_failure() - def test_long_name(self): - pyexe = create_py_exe(self.get_testfn(suffix=string.digits * 2)) - cmdline = [ - pyexe, - "-c", - "import time; [time.sleep(0.1) for x in range(100)]", - ] - p = self.spawn_psproc(cmdline) - if OPENBSD: - # XXX: for some reason the test process may turn into a - # zombie (don't know why). Because the name() is long, all - # UNIX kernels truncate it to 15 chars, so internally psutil - # tries to guess the full name() from the cmdline(). But the - # cmdline() of a zombie on OpenBSD fails (internally), so we - # just compare the first 15 chars. Full explanation: - # https://github.com/giampaolo/psutil/issues/2239 - try: - assert p.name() == os.path.basename(pyexe) - except AssertionError: - if p.status() == psutil.STATUS_ZOMBIE: - assert os.path.basename(pyexe).startswith(p.name()) - else: - raise - else: - assert p.name() == os.path.basename(pyexe) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_uids(self): - p = psutil.Process() - real, effective, _saved = p.uids() - # os.getuid() refers to "real" uid - assert real == os.getuid() - # os.geteuid() refers to "effective" uid - assert effective == os.geteuid() - # No such thing as os.getsuid() ("saved" uid), but we have - # os.getresuid() which returns all of them. - if hasattr(os, "getresuid"): - assert os.getresuid() == p.uids() - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_gids(self): - p = psutil.Process() - real, effective, _saved = p.gids() - # os.getuid() refers to "real" uid - assert real == os.getgid() - # os.geteuid() refers to "effective" uid - assert effective == os.getegid() - # No such thing as os.getsgid() ("saved" gid), but we have - # os.getresgid() which returns all of them. - if hasattr(os, "getresuid"): - assert os.getresgid() == p.gids() - - def test_nice(self): - def cleanup(init): - try: - p.nice(init) - except psutil.AccessDenied: - pass - - p = psutil.Process() - with pytest.raises(TypeError): - p.nice("str") - init = p.nice() - self.addCleanup(cleanup, init) - - if WINDOWS: - highest_prio = None - for prio in [ - psutil.IDLE_PRIORITY_CLASS, - psutil.BELOW_NORMAL_PRIORITY_CLASS, - psutil.NORMAL_PRIORITY_CLASS, - psutil.ABOVE_NORMAL_PRIORITY_CLASS, - psutil.HIGH_PRIORITY_CLASS, - psutil.REALTIME_PRIORITY_CLASS, - ]: - with self.subTest(prio=prio): - try: - p.nice(prio) - except psutil.AccessDenied: - pass - else: - new_prio = p.nice() - # The OS may limit our maximum priority, - # even if the function succeeds. For higher - # priorities, we match either the expected - # value or the highest so far. - if prio in { - psutil.ABOVE_NORMAL_PRIORITY_CLASS, - psutil.HIGH_PRIORITY_CLASS, - psutil.REALTIME_PRIORITY_CLASS, - }: - if new_prio == prio or highest_prio is None: - highest_prio = prio - assert new_prio == highest_prio - else: - assert new_prio == prio - else: - try: - if hasattr(os, "getpriority"): - assert ( - os.getpriority(os.PRIO_PROCESS, os.getpid()) - == p.nice() - ) - p.nice(1) - assert p.nice() == 1 - if hasattr(os, "getpriority"): - assert ( - os.getpriority(os.PRIO_PROCESS, os.getpid()) - == p.nice() - ) - # XXX - going back to previous nice value raises - # AccessDenied on MACOS - if not MACOS: - p.nice(0) - assert p.nice() == 0 - except psutil.AccessDenied: - pass - - def test_status(self): - p = psutil.Process() - assert p.status() == psutil.STATUS_RUNNING - - def test_username(self): - p = self.spawn_psproc() - username = p.username() - if WINDOWS: - domain, username = username.split('\\') - getpass_user = getpass.getuser() - if getpass_user.endswith('$'): - # When running as a service account (most likely to be - # NetworkService), these user name calculations don't produce - # the same result, causing the test to fail. - return pytest.skip('running as service account') - assert username == getpass_user - if 'USERDOMAIN' in os.environ: - assert domain == os.environ['USERDOMAIN'] - else: - assert username == getpass.getuser() - - def test_cwd(self): - p = self.spawn_psproc() - assert p.cwd() == os.getcwd() - - def test_cwd_2(self): - cmd = [ - PYTHON_EXE, - "-c", - ( - "import os, time; os.chdir('..'); [time.sleep(0.1) for x in" - " range(100)]" - ), - ] - p = self.spawn_psproc(cmd) - call_until(lambda: p.cwd() == os.path.dirname(os.getcwd())) - - @pytest.mark.skipif(not HAS_CPU_AFFINITY, reason="not supported") - def test_cpu_affinity(self): - p = psutil.Process() - initial = p.cpu_affinity() - assert initial, initial - self.addCleanup(p.cpu_affinity, initial) - - if hasattr(os, "sched_getaffinity"): - assert initial == list(os.sched_getaffinity(p.pid)) - assert len(initial) == len(set(initial)) - - all_cpus = list(range(len(psutil.cpu_percent(percpu=True)))) - for n in all_cpus: - p.cpu_affinity([n]) - assert p.cpu_affinity() == [n] - if hasattr(os, "sched_getaffinity"): - assert p.cpu_affinity() == list(os.sched_getaffinity(p.pid)) - # also test num_cpu() - if hasattr(p, "num_cpu"): - assert p.cpu_affinity()[0] == p.num_cpu() - - # [] is an alias for "all eligible CPUs"; on Linux this may - # not be equal to all available CPUs, see: - # https://github.com/giampaolo/psutil/issues/956 - p.cpu_affinity([]) - if LINUX: - assert p.cpu_affinity() == p._proc._get_eligible_cpus() - else: - assert p.cpu_affinity() == all_cpus - if hasattr(os, "sched_getaffinity"): - assert p.cpu_affinity() == list(os.sched_getaffinity(p.pid)) - - with pytest.raises(TypeError): - p.cpu_affinity(1) - p.cpu_affinity(initial) - # it should work with all iterables, not only lists - p.cpu_affinity(set(all_cpus)) - p.cpu_affinity(tuple(all_cpus)) - - @pytest.mark.skipif(not HAS_CPU_AFFINITY, reason="not supported") - def test_cpu_affinity_errs(self): - p = self.spawn_psproc() - invalid_cpu = [len(psutil.cpu_times(percpu=True)) + 10] - with pytest.raises(ValueError): - p.cpu_affinity(invalid_cpu) - with pytest.raises(ValueError): - p.cpu_affinity(range(10000, 11000)) - with pytest.raises((TypeError, ValueError)): - p.cpu_affinity([0, "1"]) - with pytest.raises(ValueError): - p.cpu_affinity([0, -1]) - - @pytest.mark.skipif(not HAS_CPU_AFFINITY, reason="not supported") - def test_cpu_affinity_all_combinations(self): - p = psutil.Process() - initial = p.cpu_affinity() - assert initial, initial - self.addCleanup(p.cpu_affinity, initial) - - # All possible CPU set combinations. - if len(initial) > 12: - initial = initial[:12] # ...otherwise it will take forever - combos = [] - for i in range(len(initial) + 1): - combos.extend( - list(subset) - for subset in itertools.combinations(initial, i) - if subset - ) - - for combo in combos: - p.cpu_affinity(combo) - assert sorted(p.cpu_affinity()) == sorted(combo) - - # TODO: #595 - @pytest.mark.skipif(BSD, reason="broken on BSD") - def test_open_files(self): - p = psutil.Process() - testfn = self.get_testfn() - files = p.open_files() - assert testfn not in files - with open(testfn, 'wb') as f: - f.write(b'x' * 1024) - f.flush() - # give the kernel some time to see the new file - call_until(lambda: len(p.open_files()) != len(files)) - files = p.open_files() - filenames = [os.path.normcase(x.path) for x in files] - assert os.path.normcase(testfn) in filenames - if LINUX: - for file in files: - if file.path == testfn: - assert file.position == 1024 - for file in files: - assert os.path.isfile(file.path), file - - # another process - cmdline = ( - f"import time; f = open(r'{testfn}', 'r'); [time.sleep(0.1) for x" - " in range(100)];" - ) - p = self.spawn_psproc([PYTHON_EXE, "-c", cmdline]) - - for x in range(100): - filenames = [os.path.normcase(x.path) for x in p.open_files()] - if testfn in filenames: - break - time.sleep(0.01) - else: - assert os.path.normcase(testfn) in filenames - for file in filenames: - assert os.path.isfile(file), file - - # TODO: #595 - @pytest.mark.skipif(BSD, reason="broken on BSD") - def test_open_files_2(self): - # test fd and path fields - p = psutil.Process() - normcase = os.path.normcase - testfn = self.get_testfn() - with open(testfn, 'w') as fileobj: - for file in p.open_files(): - if ( - normcase(file.path) == normcase(fileobj.name) - or file.fd == fileobj.fileno() - ): - break - else: - return pytest.fail(f"no file found; files={p.open_files()!r}") - assert normcase(file.path) == normcase(fileobj.name) - if WINDOWS: - assert file.fd == -1 - else: - assert file.fd == fileobj.fileno() - # test positions - ntuple = p.open_files()[0] - assert ntuple[0] == ntuple.path - assert ntuple[1] == ntuple.fd - # test file is gone - assert fileobj.name not in p.open_files() - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.xdist_group(name="serial") - def test_num_fds(self): - p = psutil.Process() - testfn = self.get_testfn() - start = p.num_fds() - with open(testfn, 'w'): - assert p.num_fds() == start + 1 - with socket.socket(): - assert p.num_fds() == start + 2 - assert p.num_fds() == start - - @skip_on_not_implemented(only_if=LINUX) - @pytest.mark.skipif( - OPENBSD or NETBSD, reason="not reliable on OPENBSD & NETBSD" - ) - def test_num_ctx_switches(self): - p = psutil.Process() - before = sum(p.num_ctx_switches()) - for _ in range(2): - time.sleep(0.05) # this shall ensure a context switch happens - after = sum(p.num_ctx_switches()) - if after > before: - return None - return pytest.fail( - "num ctx switches still the same after 2 iterations" - ) - - def test_ppid(self): - p = psutil.Process() - if hasattr(os, 'getppid'): - assert p.ppid() == os.getppid() - p = self.spawn_psproc() - assert p.ppid() == os.getpid() - - def test_parent(self): - p = self.spawn_psproc() - assert p.parent().pid == os.getpid() - - lowest_pid = psutil.pids()[0] - assert psutil.Process(lowest_pid).parent() is None - - def test_parent_mocked_ctime(self): - # Make sure we get a fresh copy of the ctime before processing - # parent().We make the assumption that the parent pid MUST have - # a creation time < than the child. If system clock is updated - # this assumption was broken. - # https://github.com/giampaolo/psutil/issues/2542 - p = self.spawn_psproc() - p.create_time() # trigger cache - assert p._create_time - p._create_time = 1 - assert p.parent().pid == os.getpid() - - def test_parent_multi(self): - parent = psutil.Process() - child, grandchild = self.spawn_children_pair() - assert grandchild.parent() == child - assert child.parent() == parent - - @retry_on_failure() - def test_parents(self): - parent = psutil.Process() - assert parent.parents() - child, grandchild = self.spawn_children_pair() - assert child.parents()[0] == parent - assert grandchild.parents()[0] == child - assert grandchild.parents()[1] == parent - - def test_children(self): - parent = psutil.Process() - assert not parent.children() - assert not parent.children(recursive=True) - # On Windows we set the flag to 0 in order to cancel out the - # CREATE_NO_WINDOW flag (enabled by default) which creates - # an extra "conhost.exe" child. - child = self.spawn_psproc(creationflags=0) - children1 = parent.children() - children2 = parent.children(recursive=True) - for children in (children1, children2): - assert len(children) == 1 - assert children[0].pid == child.pid - assert children[0].ppid() == parent.pid - - def test_children_mocked_ctime(self): - # Make sure we get a fresh copy of the ctime before processing - # children(). We make the assumption that process children MUST - # have a creation time > than the parent. If system clock is - # updated this assumption was broken. - # https://github.com/giampaolo/psutil/issues/2542 - parent = psutil.Process() - parent.create_time() # trigger cache - assert parent._create_time - parent._create_time += 100000 - - assert not parent.children() - assert not parent.children(recursive=True) - # On Windows we set the flag to 0 in order to cancel out the - # CREATE_NO_WINDOW flag (enabled by default) which creates - # an extra "conhost.exe" child. - child = self.spawn_psproc(creationflags=0) - children1 = parent.children() - children2 = parent.children(recursive=True) - for children in (children1, children2): - assert len(children) == 1 - assert children[0].pid == child.pid - assert children[0].ppid() == parent.pid - - def test_children_recursive(self): - # Test children() against two sub processes, p1 and p2, where - # p1 (our child) spawned p2 (our grandchild). - parent = psutil.Process() - child, grandchild = self.spawn_children_pair() - assert parent.children() == [child] - assert parent.children(recursive=True) == [child, grandchild] - # If the intermediate process is gone there's no way for - # children() to recursively find it. - child.terminate() - child.wait() - assert not parent.children(recursive=True) - - def test_children_duplicates(self): - # find the process which has the highest number of children - table = collections.defaultdict(int) - for p in psutil.process_iter(): - try: - table[p.ppid()] += 1 - except psutil.Error: - pass - # this is the one, now let's make sure there are no duplicates - pid = max(table.items(), key=lambda x: x[1])[0] - if LINUX and pid == 0: - return pytest.skip("PID 0") - p = psutil.Process(pid) - try: - c = p.children(recursive=True) - except psutil.AccessDenied: # windows - pass - else: - assert len(c) == len(set(c)) - - def test_parents_and_children(self): - parent = psutil.Process() - child, grandchild = self.spawn_children_pair() - # forward - children = parent.children(recursive=True) - assert len(children) == 2 - assert children[0] == child - assert children[1] == grandchild - # backward - parents = grandchild.parents() - assert parents[0] == child - assert parents[1] == parent - - def test_suspend_resume(self): - p = self.spawn_psproc() - p.suspend() - for _ in range(100): - if p.status() == psutil.STATUS_STOPPED: - break - time.sleep(0.01) - p.resume() - assert p.status() != psutil.STATUS_STOPPED - - def test_invalid_pid(self): - with pytest.raises(TypeError): - psutil.Process("1") - with pytest.raises(ValueError): - psutil.Process(-1) - - def test_as_dict(self): - p = psutil.Process() - d = p.as_dict(attrs=['exe', 'name']) - assert sorted(d.keys()) == ['exe', 'name'] - - p = psutil.Process(min(psutil.pids())) - d = p.as_dict(attrs=['net_connections'], ad_value='foo') - if not isinstance(d['net_connections'], list): - assert d['net_connections'] == 'foo' - - # Test ad_value is set on AccessDenied. - with mock.patch( - 'psutil.Process.nice', create=True, side_effect=psutil.AccessDenied - ): - assert p.as_dict(attrs=["nice"], ad_value=1) == {"nice": 1} - - # Test that NoSuchProcess bubbles up. - with mock.patch( - 'psutil.Process.nice', - create=True, - side_effect=psutil.NoSuchProcess(p.pid, "name"), - ): - with pytest.raises(psutil.NoSuchProcess): - p.as_dict(attrs=["nice"]) - - # Test that ZombieProcess is swallowed. - with mock.patch( - 'psutil.Process.nice', - create=True, - side_effect=psutil.ZombieProcess(p.pid, "name"), - ): - assert p.as_dict(attrs=["nice"], ad_value="foo") == {"nice": "foo"} - - # By default APIs raising NotImplementedError are - # supposed to be skipped. - with mock.patch( - 'psutil.Process.nice', create=True, side_effect=NotImplementedError - ): - d = p.as_dict() - assert 'nice' not in list(d.keys()) - # ...unless the user explicitly asked for some attr. - with pytest.raises(NotImplementedError): - p.as_dict(attrs=["nice"]) - - # errors - with pytest.raises(TypeError): - p.as_dict('name') - with pytest.raises(ValueError): - p.as_dict(['foo']) - with pytest.raises(ValueError): - p.as_dict(['foo', 'bar']) - - def test_oneshot(self): - p = psutil.Process() - with mock.patch("psutil._psplatform.Process.cpu_times") as m: - with p.oneshot(): - p.cpu_times() - p.cpu_times() - assert m.call_count == 1 - - with mock.patch("psutil._psplatform.Process.cpu_times") as m: - p.cpu_times() - p.cpu_times() - assert m.call_count == 2 - - def test_oneshot_twice(self): - # Test the case where the ctx manager is __enter__ed twice. - # The second __enter__ is supposed to resut in a NOOP. - p = psutil.Process() - with mock.patch("psutil._psplatform.Process.cpu_times") as m1: - with mock.patch("psutil._psplatform.Process.oneshot_enter") as m2: - with p.oneshot(): - p.cpu_times() - p.cpu_times() - with p.oneshot(): - p.cpu_times() - p.cpu_times() - assert m1.call_count == 1 - assert m2.call_count == 1 - - with mock.patch("psutil._psplatform.Process.cpu_times") as m: - p.cpu_times() - p.cpu_times() - assert m.call_count == 2 - - def test_oneshot_cache(self): - # Make sure oneshot() cache is nonglobal. Instead it's - # supposed to be bound to the Process instance, see: - # https://github.com/giampaolo/psutil/issues/1373 - p1, p2 = self.spawn_children_pair() - p1_ppid = p1.ppid() - p2_ppid = p2.ppid() - assert p1_ppid != p2_ppid - with p1.oneshot(): - assert p1.ppid() == p1_ppid - assert p2.ppid() == p2_ppid - with p2.oneshot(): - assert p1.ppid() == p1_ppid - assert p2.ppid() == p2_ppid - - def test_halfway_terminated_process(self): - # Test that NoSuchProcess exception gets raised in case the - # process dies after we create the Process object. - # Example: - # >>> proc = Process(1234) - # >>> time.sleep(2) # time-consuming task, process dies in meantime - # >>> proc.name() - # Refers to Issue #15 - def assert_raises_nsp(fun, fun_name): - try: - ret = fun() - except psutil.ZombieProcess: # differentiate from NSP - raise - except psutil.NoSuchProcess: - pass - except psutil.AccessDenied: - if OPENBSD and fun_name in {'threads', 'num_threads'}: - return None - raise - else: - # NtQuerySystemInformation succeeds even if process is gone. - if WINDOWS and fun_name in {'exe', 'name'}: - return None - return pytest.fail( - f"{fun!r} didn't raise NSP and returned {ret!r} instead" - ) - - p = self.spawn_psproc() - p.terminate() - p.wait() - if WINDOWS: # XXX - call_until(lambda: p.pid not in psutil.pids()) - self.assert_proc_gone(p) - - ns = process_namespace(p) - for fun, name in ns.iter(ns.all): - assert_raises_nsp(fun, name) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_zombie_process(self): - _parent, zombie = self.spawn_zombie() - self.assert_proc_zombie(zombie) - if hasattr(psutil._psplatform.cext, "proc_is_zombie"): - assert not psutil._psplatform.cext.proc_is_zombie(os.getpid()) - assert psutil._psplatform.cext.proc_is_zombie(zombie.pid) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_zombie_process_is_running_w_exc(self): - # Emulate a case where internally is_running() raises - # ZombieProcess. - p = psutil.Process() - with mock.patch( - "psutil.Process", side_effect=psutil.ZombieProcess(0) - ) as m: - assert p.is_running() - assert m.called - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_zombie_process_status_w_exc(self): - # Emulate a case where internally status() raises - # ZombieProcess. - p = psutil.Process() - with mock.patch( - "psutil._psplatform.Process.status", - side_effect=psutil.ZombieProcess(0), - ) as m: - assert p.status() == psutil.STATUS_ZOMBIE - assert m.called - - def test_reused_pid(self): - # Emulate a case where PID has been reused by another process. - subp = self.spawn_subproc() - p = psutil.Process(subp.pid) - p._ident = (p.pid, p.create_time() + 100) - - list(psutil.process_iter()) - assert p.pid in psutil._pmap - assert not p.is_running() - - # make sure is_running() removed PID from process_iter() - # internal cache - with mock.patch.object(psutil._common, "PSUTIL_DEBUG", True): - with contextlib.redirect_stderr(io.StringIO()) as f: - list(psutil.process_iter()) - assert ( - f"refreshing Process instance for reused PID {p.pid}" - in f.getvalue() - ) - assert p.pid not in psutil._pmap - - assert p != psutil.Process(subp.pid) - msg = "process no longer exists and its PID has been reused" - ns = process_namespace(p) - for fun, name in ns.iter(ns.setters + ns.killers, clear_cache=False): - with self.subTest(name=name): - with pytest.raises(psutil.NoSuchProcess, match=msg): - fun() - - assert "terminated + PID reused" in str(p) - assert "terminated + PID reused" in repr(p) - - with pytest.raises(psutil.NoSuchProcess, match=msg): - p.ppid() - with pytest.raises(psutil.NoSuchProcess, match=msg): - p.parent() - with pytest.raises(psutil.NoSuchProcess, match=msg): - p.parents() - with pytest.raises(psutil.NoSuchProcess, match=msg): - p.children() - - def test_pid_0(self): - # Process(0) is supposed to work on all platforms except Linux - if 0 not in psutil.pids(): - with pytest.raises(psutil.NoSuchProcess): - psutil.Process(0) - # These 2 are a contradiction, but "ps" says PID 1's parent - # is PID 0. - assert not psutil.pid_exists(0) - assert psutil.Process(1).ppid() == 0 - return - - p = psutil.Process(0) - exc = psutil.AccessDenied if WINDOWS else ValueError - with pytest.raises(exc): - p.wait() - with pytest.raises(exc): - p.terminate() - with pytest.raises(exc): - p.suspend() - with pytest.raises(exc): - p.resume() - with pytest.raises(exc): - p.kill() - with pytest.raises(exc): - p.send_signal(signal.SIGTERM) - - # test all methods - ns = process_namespace(p) - for fun, name in ns.iter(ns.getters + ns.setters): - try: - ret = fun() - except psutil.AccessDenied: - pass - else: - if name in {"uids", "gids"}: - assert ret.real == 0 - elif name == "username": - user = 'NT AUTHORITY\\SYSTEM' if WINDOWS else 'root' - assert p.username() == user - elif name == "name": - assert name, name - - if not OPENBSD: - assert 0 in psutil.pids() - assert psutil.pid_exists(0) - - @pytest.mark.skipif(not HAS_ENVIRON, reason="not supported") - def test_environ(self): - def clean_dict(d): - exclude = {"PLAT", "HOME"} - if MACOS: - exclude.update([ - "__CF_USER_TEXT_ENCODING", - "VERSIONER_PYTHON_PREFER_32_BIT", - "VERSIONER_PYTHON_VERSION", - ]) - for name in list(d.keys()): - if name in exclude or name.startswith("PYTEST_"): - d.pop(name) - return { - k.replace("\r", "").replace("\n", ""): ( - v.replace("\r", "").replace("\n", "") - ) - for k, v in d.items() - } - - self.maxDiff = None - p = psutil.Process() - d1 = clean_dict(p.environ()) - d2 = clean_dict(os.environ.copy()) - if not OSX and GITHUB_ACTIONS: - assert d1 == d2 - - @pytest.mark.skipif(not HAS_ENVIRON, reason="not supported") - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.skipif( - MACOS_11PLUS, - reason="macOS 11+ can't get another process environment, issue #2084", - ) - @pytest.mark.skipif( - NETBSD, reason="sometimes fails on `assert is_running()`" - ) - def test_weird_environ(self): - # environment variables can contain values without an equals sign - code = textwrap.dedent(""" - #include - #include - - char * const argv[] = {"cat", 0}; - char * const envp[] = {"A=1", "X", "C=3", 0}; - - int main(void) { - // Close stderr on exec so parent can wait for the - // execve to finish. - if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0) - return 0; - return execve("/bin/cat", argv, envp); - } - """) - cexe = create_c_exe(self.get_testfn(), c_code=code) - sproc = self.spawn_subproc( - [cexe], stdin=subprocess.PIPE, stderr=subprocess.PIPE - ) - p = psutil.Process(sproc.pid) - wait_for_pid(p.pid) - assert p.is_running() - # Wait for process to exec or exit. - assert sproc.stderr.read() == b"" - if MACOS and CI_TESTING: - try: - env = p.environ() - except psutil.AccessDenied: - # XXX: fails sometimes with: - # PermissionError from 'sysctl(KERN_PROCARGS2) -> EIO' - return - else: - env = p.environ() - assert env == {"A": "1", "C": "3"} - sproc.communicate() - assert sproc.returncode == 0 - - -# =================================================================== -# --- psutil.Popen tests -# =================================================================== - - -class TestPopen(PsutilTestCase): - """Tests for psutil.Popen class.""" - - @classmethod - def tearDownClass(cls): - reap_children() - - @pytest.mark.skipif(MACOS and GITHUB_ACTIONS, reason="hangs on OSX + CI") - def test_misc(self): - # XXX this test causes a ResourceWarning because - # psutil.__subproc instance doesn't get properly freed. - # Not sure what to do though. - cmd = [ - PYTHON_EXE, - "-c", - "import time; [time.sleep(0.1) for x in range(100)];", - ] - with psutil.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=PYTHON_EXE_ENV, - ) as proc: - proc.name() - proc.cpu_times() - proc.stdin # noqa: B018 - assert dir(proc) - with pytest.raises(AttributeError): - proc.foo # noqa: B018 - proc.terminate() - if POSIX: - assert proc.wait(5) == -signal.SIGTERM - else: - assert proc.wait(5) == signal.SIGTERM - - def test_ctx_manager(self): - with psutil.Popen( - [PYTHON_EXE, "-V"], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - stdin=subprocess.PIPE, - env=PYTHON_EXE_ENV, - ) as proc: - proc.communicate() - assert proc.stdout.closed - assert proc.stderr.closed - assert proc.stdin.closed - assert proc.returncode == 0 - - def test_kill_terminate(self): - # subprocess.Popen()'s terminate(), kill() and send_signal() do - # not raise exception after the process is gone. psutil.Popen - # diverges from that. - cmd = [ - PYTHON_EXE, - "-c", - "import time; [time.sleep(0.1) for x in range(100)];", - ] - with psutil.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=PYTHON_EXE_ENV, - ) as proc: - proc.terminate() - proc.wait() - with pytest.raises(psutil.NoSuchProcess): - proc.terminate() - with pytest.raises(psutil.NoSuchProcess): - proc.kill() - with pytest.raises(psutil.NoSuchProcess): - proc.send_signal(signal.SIGTERM) - if WINDOWS: - with pytest.raises(psutil.NoSuchProcess): - proc.send_signal(signal.CTRL_C_EVENT) - with pytest.raises(psutil.NoSuchProcess): - proc.send_signal(signal.CTRL_BREAK_EVENT) - - def test__getattribute__(self): - cmd = [ - PYTHON_EXE, - "-c", - "import time; [time.sleep(0.1) for x in range(100)];", - ] - with psutil.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=PYTHON_EXE_ENV, - ) as proc: - proc.terminate() - proc.wait() - with pytest.raises(AttributeError): - proc.foo # noqa: B018 diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_process_all.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_process_all.py deleted file mode 100644 index a742391..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_process_all.py +++ /dev/null @@ -1,540 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Iterate over all process PIDs and for each one of them invoke and -test all psutil.Process() methods. -""" - -import enum -import errno -import multiprocessing -import os -import stat -import time -import traceback - -import psutil -from psutil import AIX -from psutil import BSD -from psutil import FREEBSD -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import OSX -from psutil import POSIX -from psutil import WINDOWS -from psutil.tests import CI_TESTING -from psutil.tests import PYTEST_PARALLEL -from psutil.tests import VALID_PROC_STATUSES -from psutil.tests import PsutilTestCase -from psutil.tests import check_connection_ntuple -from psutil.tests import create_sockets -from psutil.tests import is_namedtuple -from psutil.tests import is_win_secure_system_proc -from psutil.tests import process_namespace -from psutil.tests import pytest - -# Cuts the time in half, but (e.g.) on macOS the process pool stays -# alive after join() (multiprocessing bug?), messing up other tests. -USE_PROC_POOL = LINUX and not CI_TESTING and not PYTEST_PARALLEL - - -def proc_info(pid): - tcase = PsutilTestCase() - - def check_exception(exc, proc, name, ppid): - assert exc.pid == pid - if exc.name is not None: - assert exc.name == name - if isinstance(exc, psutil.ZombieProcess): - tcase.assert_proc_zombie(proc) - if exc.ppid is not None: - assert exc.ppid >= 0 - assert exc.ppid == ppid - elif isinstance(exc, psutil.NoSuchProcess): - tcase.assert_proc_gone(proc) - str(exc) - repr(exc) - - def do_wait(): - if pid != 0: - try: - proc.wait(0) - except psutil.Error as exc: - check_exception(exc, proc, name, ppid) - - try: - proc = psutil.Process(pid) - except psutil.NoSuchProcess: - tcase.assert_pid_gone(pid) - return {} - try: - d = proc.as_dict(['ppid', 'name']) - except psutil.NoSuchProcess: - tcase.assert_proc_gone(proc) - else: - name, ppid = d['name'], d['ppid'] - info = {'pid': proc.pid} - ns = process_namespace(proc) - # We don't use oneshot() because in order not to fool - # check_exception() in case of NSP. - for fun, fun_name in ns.iter(ns.getters, clear_cache=False): - try: - info[fun_name] = fun() - except psutil.Error as exc: - check_exception(exc, proc, name, ppid) - continue - do_wait() - return info - - -class TestFetchAllProcesses(PsutilTestCase): - """Test which iterates over all running processes and performs - some sanity checks against Process API's returned values. - Uses a process pool to get info about all processes. - """ - - def setUp(self): - psutil._set_debug(False) - # Using a pool in a CI env may result in deadlock, see: - # https://github.com/giampaolo/psutil/issues/2104 - if USE_PROC_POOL: - # The 'fork' method is the only one that does not - # create a "resource_tracker" process. The problem - # when creating this process is that it ignores - # SIGTERM and SIGINT, and this makes "reap_children" - # hang... The following code should run on python-3.4 - # and later. - multiprocessing.set_start_method('fork') - self.pool = multiprocessing.Pool() - - def tearDown(self): - psutil._set_debug(True) - if USE_PROC_POOL: - self.pool.terminate() - self.pool.join() - - def iter_proc_info(self): - # Fixes "can't pickle : it's not the - # same object as test_process_all.proc_info". - from psutil.tests.test_process_all import proc_info - - if USE_PROC_POOL: - return self.pool.imap_unordered(proc_info, psutil.pids()) - else: - ls = [proc_info(pid) for pid in psutil.pids()] - return ls - - def test_all(self): - failures = [] - for info in self.iter_proc_info(): - for name, value in info.items(): - meth = getattr(self, name) - try: - meth(value, info) - except Exception: # noqa: BLE001 - s = '\n' + '=' * 70 + '\n' - s += ( - "FAIL: name=test_{}, pid={}, ret={}\ninfo={}\n".format( - name, - info['pid'], - repr(value), - info, - ) - ) - s += '-' * 70 - s += f"\n{traceback.format_exc()}" - s = "\n".join((" " * 4) + i for i in s.splitlines()) + "\n" - failures.append(s) - else: - if value not in (0, 0.0, [], None, '', {}): - assert value, value - if failures: - return pytest.fail(''.join(failures)) - - def cmdline(self, ret, info): - assert isinstance(ret, list) - for part in ret: - assert isinstance(part, str) - - def exe(self, ret, info): - assert isinstance(ret, str) - assert ret.strip() == ret - if ret: - if WINDOWS and not ret.endswith('.exe'): - return # May be "Registry", "MemCompression", ... - assert os.path.isabs(ret), ret - # Note: os.stat() may return False even if the file is there - # hence we skip the test, see: - # http://stackoverflow.com/questions/3112546/os-path-exists-lies - if POSIX and os.path.isfile(ret): - if hasattr(os, 'access') and hasattr(os, "X_OK"): - # XXX: may fail on MACOS - try: - assert os.access(ret, os.X_OK) - except AssertionError: - if os.path.exists(ret) and not CI_TESTING: - raise - - def pid(self, ret, info): - assert isinstance(ret, int) - assert ret >= 0 - - def ppid(self, ret, info): - assert isinstance(ret, int) - assert ret >= 0 - proc_info(ret) - - def name(self, ret, info): - assert isinstance(ret, str) - if WINDOWS and not ret and is_win_secure_system_proc(info['pid']): - # https://github.com/giampaolo/psutil/issues/2338 - return - # on AIX, "" processes don't have names - if not AIX: - assert ret, repr(ret) - - def create_time(self, ret, info): - assert isinstance(ret, float) - try: - assert ret >= 0 - except AssertionError: - # XXX - if OPENBSD and info['status'] == psutil.STATUS_ZOMBIE: - pass - else: - raise - # this can't be taken for granted on all platforms - # assert ret >= psutil.boot_time()) - # make sure returned value can be pretty printed - # with strftime - time.strftime("%Y %m %d %H:%M:%S", time.localtime(ret)) - - def uids(self, ret, info): - assert is_namedtuple(ret) - for uid in ret: - assert isinstance(uid, int) - assert uid >= 0 - - def gids(self, ret, info): - assert is_namedtuple(ret) - # note: testing all gids as above seems not to be reliable for - # gid == 30 (nodoby); not sure why. - for gid in ret: - assert isinstance(gid, int) - if not MACOS and not NETBSD: - assert gid >= 0 - - def username(self, ret, info): - assert isinstance(ret, str) - assert ret.strip() == ret - assert ret.strip() - - def status(self, ret, info): - assert isinstance(ret, str) - assert ret, ret - assert ret != '?' # XXX - assert ret in VALID_PROC_STATUSES - - def io_counters(self, ret, info): - assert is_namedtuple(ret) - for field in ret: - assert isinstance(field, int) - if field != -1: - assert field >= 0 - - def ionice(self, ret, info): - if LINUX: - assert isinstance(ret.ioclass, int) - assert isinstance(ret.value, int) - assert ret.ioclass >= 0 - assert ret.value >= 0 - else: # Windows, Cygwin - choices = [ - psutil.IOPRIO_VERYLOW, - psutil.IOPRIO_LOW, - psutil.IOPRIO_NORMAL, - psutil.IOPRIO_HIGH, - ] - assert isinstance(ret, int) - assert ret >= 0 - assert ret in choices - - def num_threads(self, ret, info): - assert isinstance(ret, int) - if WINDOWS and ret == 0 and is_win_secure_system_proc(info['pid']): - # https://github.com/giampaolo/psutil/issues/2338 - return - assert ret >= 1 - - def threads(self, ret, info): - assert isinstance(ret, list) - for t in ret: - assert is_namedtuple(t) - assert t.id >= 0 - assert t.user_time >= 0 - assert t.system_time >= 0 - for field in t: - assert isinstance(field, (int, float)) - - def cpu_times(self, ret, info): - assert is_namedtuple(ret) - for n in ret: - assert isinstance(n, float) - assert n >= 0 - # TODO: check ntuple fields - - def cpu_percent(self, ret, info): - assert isinstance(ret, float) - assert 0.0 <= ret <= 100.0, ret - - def cpu_num(self, ret, info): - assert isinstance(ret, int) - if FREEBSD and ret == -1: - return - assert ret >= 0 - if psutil.cpu_count() == 1: - assert ret == 0 - assert ret in list(range(psutil.cpu_count())) - - def memory_info(self, ret, info): - assert is_namedtuple(ret) - for value in ret: - assert isinstance(value, int) - assert value >= 0 - if WINDOWS: - assert ret.peak_wset >= ret.wset - assert ret.peak_paged_pool >= ret.paged_pool - assert ret.peak_nonpaged_pool >= ret.nonpaged_pool - assert ret.peak_pagefile >= ret.pagefile - - def memory_full_info(self, ret, info): - assert is_namedtuple(ret) - total = psutil.virtual_memory().total - for name in ret._fields: - value = getattr(ret, name) - assert isinstance(value, int) - assert value >= 0 - if LINUX or (OSX and name in {'vms', 'data'}): - # On Linux there are processes (e.g. 'goa-daemon') whose - # VMS is incredibly high for some reason. - continue - assert value <= total, name - - if LINUX: - assert ret.pss >= ret.uss - - def open_files(self, ret, info): - assert isinstance(ret, list) - for f in ret: - assert isinstance(f.fd, int) - assert isinstance(f.path, str) - assert f.path.strip() == f.path - if WINDOWS: - assert f.fd == -1 - elif LINUX: - assert isinstance(f.position, int) - assert isinstance(f.mode, str) - assert isinstance(f.flags, int) - assert f.position >= 0 - assert f.mode in {'r', 'w', 'a', 'r+', 'a+'} - assert f.flags > 0 - elif BSD and not f.path: - # XXX see: https://github.com/giampaolo/psutil/issues/595 - continue - assert os.path.isabs(f.path), f - try: - st = os.stat(f.path) - except FileNotFoundError: - pass - else: - assert stat.S_ISREG(st.st_mode), f - - def num_fds(self, ret, info): - assert isinstance(ret, int) - assert ret >= 0 - - def net_connections(self, ret, info): - with create_sockets(): - assert len(ret) == len(set(ret)) - for conn in ret: - assert is_namedtuple(conn) - check_connection_ntuple(conn) - - def cwd(self, ret, info): - assert isinstance(ret, str) - assert ret.strip() == ret - if ret: - assert os.path.isabs(ret), ret - try: - st = os.stat(ret) - except OSError as err: - if WINDOWS and psutil._psplatform.is_permission_err(err): - pass - # directory has been removed in mean time - elif err.errno != errno.ENOENT: - raise - else: - assert stat.S_ISDIR(st.st_mode) - - def memory_percent(self, ret, info): - assert isinstance(ret, float) - assert 0 <= ret <= 100, ret - - def is_running(self, ret, info): - assert isinstance(ret, bool) - - def cpu_affinity(self, ret, info): - assert isinstance(ret, list) - assert ret != [] - cpus = list(range(psutil.cpu_count())) - for n in ret: - assert isinstance(n, int) - assert n in cpus - - def terminal(self, ret, info): - assert isinstance(ret, (str, type(None))) - if ret is not None: - assert os.path.isabs(ret), ret - assert os.path.exists(ret), ret - - def memory_maps(self, ret, info): - for nt in ret: - assert isinstance(nt.addr, str) - assert isinstance(nt.perms, str) - assert isinstance(nt.path, str) - for fname in nt._fields: - value = getattr(nt, fname) - if fname == 'path': - if value.startswith(("[", "anon_inode:")): # linux - continue - if BSD and value == "pvclock": # seen on FreeBSD - continue - assert os.path.isabs(nt.path), nt.path - # commented as on Linux we might get - # '/foo/bar (deleted)' - # assert os.path.exists(nt.path), nt.path - elif fname == 'addr': - assert value, repr(value) - elif fname == 'perms': - if not WINDOWS: - assert value, repr(value) - else: - assert isinstance(value, int) - assert value >= 0 - - def num_handles(self, ret, info): - assert isinstance(ret, int) - assert ret >= 0 - - def nice(self, ret, info): - assert isinstance(ret, int) - if POSIX: - assert -20 <= ret <= 20, ret - else: - priorities = [ - getattr(psutil, x) - for x in dir(psutil) - if x.endswith('_PRIORITY_CLASS') - ] - assert ret in priorities - assert isinstance(ret, enum.IntEnum) - - def num_ctx_switches(self, ret, info): - assert is_namedtuple(ret) - for value in ret: - assert isinstance(value, int) - assert value >= 0 - - def rlimit(self, ret, info): - assert isinstance(ret, tuple) - assert len(ret) == 2 - assert ret[0] >= -1 - assert ret[1] >= -1 - - def environ(self, ret, info): - assert isinstance(ret, dict) - for k, v in ret.items(): - assert isinstance(k, str) - assert isinstance(v, str) - - -class TestPidsRange(PsutilTestCase): - """Given pid_exists() return value for a range of PIDs which may or - may not exist, make sure that psutil.Process() and psutil.pids() - agree with pid_exists(). This guarantees that the 3 APIs are all - consistent with each other. See: - https://github.com/giampaolo/psutil/issues/2359 - - XXX - Note about Windows: it turns out there are some "hidden" PIDs - which are not returned by psutil.pids() and are also not revealed - by taskmgr.exe and ProcessHacker, still they can be instantiated by - psutil.Process() and queried. One of such PIDs is "conhost.exe". - Running as_dict() for it reveals that some Process() APIs - erroneously raise NoSuchProcess, so we know we have problem there. - Let's ignore this for now, since it's quite a corner case (who even - imagined hidden PIDs existed on Windows?). - """ - - def setUp(self): - psutil._set_debug(False) - - def tearDown(self): - psutil._set_debug(True) - - def test_it(self): - def is_linux_tid(pid): - try: - f = open(f"/proc/{pid}/status", "rb") # noqa: SIM115 - except FileNotFoundError: - return False - else: - with f: - for line in f: - if line.startswith(b"Tgid:"): - tgid = int(line.split()[1]) - # If tgid and pid are different then we're - # dealing with a process TID. - return tgid != pid - raise ValueError("'Tgid' line not found") - - def check(pid): - # In case of failure retry up to 3 times in order to avoid - # race conditions, especially when running in a CI - # environment where PIDs may appear and disappear at any - # time. - x = 3 - while True: - exists = psutil.pid_exists(pid) - try: - if exists: - psutil.Process(pid) - if not WINDOWS: # see docstring - assert pid in psutil.pids() - else: - # On OpenBSD thread IDs can be instantiated, - # and oneshot() succeeds, but other APIs fail - # with EINVAL. - if not OPENBSD: - with pytest.raises(psutil.NoSuchProcess): - psutil.Process(pid) - if not WINDOWS: # see docstring - assert pid not in psutil.pids() - except (psutil.Error, AssertionError): - x -= 1 - if x == 0: - raise - else: - return - - for pid in range(1, 3000): - if LINUX and is_linux_tid(pid): - # On Linux a TID (thread ID) can be passed to the - # Process class and is querable like a PID (process - # ID). Skip it. - continue - check(pid) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_scripts.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_scripts.py deleted file mode 100644 index 6ef78b6..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_scripts.py +++ /dev/null @@ -1,241 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Test various scripts.""" - -import ast -import os -import shutil -import stat -import subprocess - -import pytest - -from psutil import LINUX -from psutil import POSIX -from psutil import WINDOWS -from psutil.tests import CI_TESTING -from psutil.tests import HAS_BATTERY -from psutil.tests import HAS_MEMORY_MAPS -from psutil.tests import HAS_SENSORS_BATTERY -from psutil.tests import HAS_SENSORS_FANS -from psutil.tests import HAS_SENSORS_TEMPERATURES -from psutil.tests import PYTHON_EXE -from psutil.tests import PYTHON_EXE_ENV -from psutil.tests import ROOT_DIR -from psutil.tests import SCRIPTS_DIR -from psutil.tests import PsutilTestCase -from psutil.tests import import_module_by_path -from psutil.tests import psutil -from psutil.tests import sh - -INTERNAL_SCRIPTS_DIR = os.path.join(SCRIPTS_DIR, "internal") -SETUP_PY = os.path.join(ROOT_DIR, 'setup.py') - - -# =================================================================== -# --- Tests scripts in scripts/ directory -# =================================================================== - - -@pytest.mark.skipif( - CI_TESTING and not os.path.exists(SCRIPTS_DIR), - reason="can't find scripts/ directory", -) -class TestExampleScripts(PsutilTestCase): - @staticmethod - def assert_stdout(exe, *args): - env = PYTHON_EXE_ENV.copy() - env.pop("PSUTIL_DEBUG") # avoid spamming to stderr - exe = os.path.join(SCRIPTS_DIR, exe) - cmd = [PYTHON_EXE, exe, *args] - try: - out = sh(cmd, env=env).strip() - except RuntimeError as err: - if 'AccessDenied' in str(err): - return str(err) - else: - raise - assert out, out - return out - - @staticmethod - def assert_syntax(exe): - exe = os.path.join(SCRIPTS_DIR, exe) - with open(exe, encoding="utf8") as f: - src = f.read() - ast.parse(src) - - def test_coverage(self): - # make sure all example scripts have a test method defined - meths = dir(self) - for name in os.listdir(SCRIPTS_DIR): - if name.endswith('.py'): - if 'test_' + os.path.splitext(name)[0] not in meths: - # self.assert_stdout(name) - return pytest.fail( - "no test defined for" - f" {os.path.join(SCRIPTS_DIR, name)!r} script" - ) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_executable(self): - for root, dirs, files in os.walk(SCRIPTS_DIR): - for file in files: - if file.endswith('.py'): - path = os.path.join(root, file) - if not stat.S_IXUSR & os.stat(path)[stat.ST_MODE]: - return pytest.fail(f"{path!r} is not executable") - - def test_disk_usage(self): - self.assert_stdout('disk_usage.py') - - def test_free(self): - self.assert_stdout('free.py') - - def test_meminfo(self): - self.assert_stdout('meminfo.py') - - def test_procinfo(self): - self.assert_stdout('procinfo.py', str(os.getpid())) - - @pytest.mark.skipif(CI_TESTING and not psutil.users(), reason="no users") - def test_who(self): - self.assert_stdout('who.py') - - def test_ps(self): - self.assert_stdout('ps.py') - - def test_pstree(self): - self.assert_stdout('pstree.py') - - def test_netstat(self): - self.assert_stdout('netstat.py') - - def test_ifconfig(self): - self.assert_stdout('ifconfig.py') - - @pytest.mark.skipif(not HAS_MEMORY_MAPS, reason="not supported") - def test_pmap(self): - self.assert_stdout('pmap.py', str(os.getpid())) - - def test_procsmem(self): - if 'uss' not in psutil.Process().memory_full_info()._fields: - return pytest.skip("not supported") - self.assert_stdout('procsmem.py') - - def test_killall(self): - self.assert_syntax('killall.py') - - def test_nettop(self): - self.assert_syntax('nettop.py') - - def test_top(self): - self.assert_syntax('top.py') - - def test_iotop(self): - self.assert_syntax('iotop.py') - - def test_pidof(self): - output = self.assert_stdout('pidof.py', psutil.Process().name()) - assert str(os.getpid()) in output - - @pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") - def test_winservices(self): - self.assert_stdout('winservices.py') - - def test_cpu_distribution(self): - self.assert_syntax('cpu_distribution.py') - - @pytest.mark.skipif(not HAS_SENSORS_TEMPERATURES, reason="not supported") - def test_temperatures(self): - if not psutil.sensors_temperatures(): - return pytest.skip("no temperatures") - self.assert_stdout('temperatures.py') - - @pytest.mark.skipif(not HAS_SENSORS_FANS, reason="not supported") - def test_fans(self): - if not psutil.sensors_fans(): - return pytest.skip("no fans") - self.assert_stdout('fans.py') - - @pytest.mark.skipif(not HAS_SENSORS_BATTERY, reason="not supported") - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_battery(self): - self.assert_stdout('battery.py') - - @pytest.mark.skipif(not HAS_SENSORS_BATTERY, reason="not supported") - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_sensors(self): - self.assert_stdout('sensors.py') - - -# =================================================================== -# --- Tests scripts in scripts/internal/ directory -# =================================================================== - - -@pytest.mark.skipif( - CI_TESTING and not os.path.exists(INTERNAL_SCRIPTS_DIR), - reason="can't find scripts/internal/ directory", -) -class TestInternalScripts(PsutilTestCase): - @staticmethod - def ls(): - for name in os.listdir(INTERNAL_SCRIPTS_DIR): - if name.endswith(".py"): - yield os.path.join(INTERNAL_SCRIPTS_DIR, name) - - def test_syntax_all(self): - for path in self.ls(): - with open(path, encoding="utf8") as f: - data = f.read() - ast.parse(data) - - # don't care about other platforms, this is really just for myself - @pytest.mark.skipif(not LINUX, reason="not on LINUX") - @pytest.mark.skipif(CI_TESTING, reason="not on CI") - def test_import_all(self): - for path in self.ls(): - try: - import_module_by_path(path) - except SystemExit: - pass - - -# =================================================================== -# --- Tests for setup.py script -# =================================================================== - - -@pytest.mark.skipif( - CI_TESTING and not os.path.exists(SETUP_PY), reason="can't find setup.py" -) -class TestSetupScript(PsutilTestCase): - def test_invocation(self): - module = import_module_by_path(SETUP_PY) - with pytest.raises(SystemExit): - module.setup() - assert module.get_version() == psutil.__version__ - - @pytest.mark.skipif( - not shutil.which("python2.7"), reason="python2.7 not installed" - ) - def test_python2(self): - # There's a duplicate of this test in scripts/internal - # directory, which is only executed by CI. We replicate it here - # to run it when developing locally. - p = subprocess.Popen( - [shutil.which("python2.7"), SETUP_PY], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - universal_newlines=True, - ) - stdout, stderr = p.communicate() - assert p.wait() == 1 - assert not stdout - assert "psutil no longer supports Python 2.7" in stderr - assert "Latest version supporting Python 2.7 is" in stderr diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_sudo.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_sudo.py deleted file mode 100644 index 034b763..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_sudo.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests which are meant to be run as root. - -NOTE: keep this module compatible with unittest: we want to run this -file with the unittest runner, since pytest may not be installed for -the root user. -""" - -import datetime -import time -import unittest - -import psutil -from psutil import FREEBSD -from psutil import LINUX -from psutil import OPENBSD -from psutil import WINDOWS -from psutil.tests import CI_TESTING -from psutil.tests import PsutilTestCase - - -def get_systime(): - if hasattr(time, "clock_gettime") and hasattr(time, "CLOCK_REALTIME"): - return time.clock_gettime(time.CLOCK_REALTIME) - return time.time() - - -def set_systime(secs): # secs since the epoch - if hasattr(time, "clock_settime") and hasattr(time, "CLOCK_REALTIME"): - try: - time.clock_settime(time.CLOCK_REALTIME, secs) - except PermissionError: - raise unittest.SkipTest("needs root") - elif WINDOWS: - import pywintypes - import win32api - - dt = datetime.datetime.fromtimestamp(secs, datetime.timezone.utc) - try: - win32api.SetSystemTime( - dt.year, - dt.month, - dt.isoweekday() % 7, - dt.day, - dt.hour, - dt.minute, - dt.second, - int(dt.microsecond / 1000), - ) - except pywintypes.error as err: - if err.winerror == 1314: - raise unittest.SkipTest("needs Administrator user") - raise - else: - raise unittest.SkipTest("setting systime not supported") - - -class TestUpdatedSystemTime(PsutilTestCase): - """Tests which update the system clock.""" - - def setUp(self): - self.time_updated = False - self.orig_time = get_systime() - self.time_started = time.monotonic() - - def tearDown(self): - if self.time_updated: - extra_t = time.monotonic() - self.time_started - set_systime(self.orig_time + extra_t) - - def update_systime(self): - # set system time 1 hour later - set_systime(self.orig_time + 3600) - self.time_updated = True - - def test_boot_time(self): - # Test that boot_time() reflects system clock updates. - t1 = psutil.boot_time() - self.update_systime() - t2 = psutil.boot_time() - self.assertGreater(t2, t1) - diff = int(t2 - t1) - self.assertAlmostEqual(diff, 3600, delta=1) - - @unittest.skipIf(WINDOWS, "broken on WINDOWS") # TODO: fix it - def test_proc_create_time(self): - # Test that Process.create_time() reflects system clock - # updates. On systems such as Linux this is added on top of the - # process monotonic time returned by the kernel. - t1 = psutil.Process().create_time() - self.update_systime() - t2 = psutil.Process().create_time() - diff = int(t2 - t1) - self.assertAlmostEqual(diff, 3600, delta=1) - - @unittest.skipIf(CI_TESTING, "skipped on CI for now") # TODO: fix it - @unittest.skipIf(OPENBSD, "broken on OPENBSD") # TODO: fix it - @unittest.skipIf(FREEBSD, "broken on FREEBSD") # TODO: fix it - def test_proc_ident(self): - p1 = psutil.Process() - self.update_systime() - p2 = psutil.Process() - self.assertEqual(p1._get_ident(), p2._get_ident()) - self.assertEqual(p1, p2) - - @unittest.skipIf(not LINUX, "LINUX only") - def test_linux_monotonic_proc_time(self): - t1 = psutil.Process()._proc.create_time(monotonic=True) - self.update_systime() - time.sleep(0.05) - t2 = psutil.Process()._proc.create_time(monotonic=True) - self.assertEqual(t1, t2) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_sunos.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_sunos.py deleted file mode 100644 index b5d9d35..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_sunos.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Sun OS specific tests.""" - -import os - -import psutil -from psutil import SUNOS -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import sh - - -@pytest.mark.skipif(not SUNOS, reason="SUNOS only") -class SunOSSpecificTestCase(PsutilTestCase): - def test_swap_memory(self): - out = sh(f"env PATH=/usr/sbin:/sbin:{os.environ['PATH']} swap -l") - lines = out.strip().split('\n')[1:] - if not lines: - raise ValueError('no swap device(s) configured') - total = free = 0 - for line in lines: - fields = line.split() - total = int(fields[3]) * 512 - free = int(fields[4]) * 512 - used = total - free - - psutil_swap = psutil.swap_memory() - assert psutil_swap.total == total - assert psutil_swap.used == used - assert psutil_swap.free == free - - def test_cpu_count(self): - out = sh("/usr/sbin/psrinfo") - assert psutil.cpu_count() == len(out.split('\n')) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_system.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_system.py deleted file mode 100644 index 0cd5642..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_system.py +++ /dev/null @@ -1,965 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for system APIS.""" - -import datetime -import enum -import errno -import os -import pprint -import shutil -import signal -import socket -import sys -import time -from unittest import mock - -import psutil -from psutil import AIX -from psutil import BSD -from psutil import FREEBSD -from psutil import LINUX -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import POSIX -from psutil import SUNOS -from psutil import WINDOWS -from psutil._common import broadcast_addr -from psutil.tests import AARCH64 -from psutil.tests import ASCII_FS -from psutil.tests import CI_TESTING -from psutil.tests import GITHUB_ACTIONS -from psutil.tests import GLOBAL_TIMEOUT -from psutil.tests import HAS_BATTERY -from psutil.tests import HAS_CPU_FREQ -from psutil.tests import HAS_GETLOADAVG -from psutil.tests import HAS_NET_IO_COUNTERS -from psutil.tests import HAS_SENSORS_BATTERY -from psutil.tests import HAS_SENSORS_FANS -from psutil.tests import HAS_SENSORS_TEMPERATURES -from psutil.tests import MACOS_12PLUS -from psutil.tests import PYPY -from psutil.tests import UNICODE_SUFFIX -from psutil.tests import PsutilTestCase -from psutil.tests import check_net_address -from psutil.tests import pytest -from psutil.tests import retry_on_failure - -# =================================================================== -# --- System-related API tests -# =================================================================== - - -class TestProcessIter(PsutilTestCase): - def test_pid_presence(self): - assert os.getpid() in [x.pid for x in psutil.process_iter()] - sproc = self.spawn_subproc() - assert sproc.pid in [x.pid for x in psutil.process_iter()] - p = psutil.Process(sproc.pid) - p.kill() - p.wait() - assert sproc.pid not in [x.pid for x in psutil.process_iter()] - - def test_no_duplicates(self): - ls = list(psutil.process_iter()) - assert sorted(ls, key=lambda x: x.pid) == sorted( - set(ls), key=lambda x: x.pid - ) - - def test_emulate_nsp(self): - list(psutil.process_iter()) # populate cache - for x in range(2): - with mock.patch( - 'psutil.Process.as_dict', - side_effect=psutil.NoSuchProcess(os.getpid()), - ): - assert not list(psutil.process_iter(attrs=["cpu_times"])) - psutil.process_iter.cache_clear() # repeat test without cache - - def test_emulate_access_denied(self): - list(psutil.process_iter()) # populate cache - for x in range(2): - with mock.patch( - 'psutil.Process.as_dict', - side_effect=psutil.AccessDenied(os.getpid()), - ): - with pytest.raises(psutil.AccessDenied): - list(psutil.process_iter(attrs=["cpu_times"])) - psutil.process_iter.cache_clear() # repeat test without cache - - def test_attrs(self): - for p in psutil.process_iter(attrs=['pid']): - assert list(p.info.keys()) == ['pid'] - # yield again - for p in psutil.process_iter(attrs=['pid']): - assert list(p.info.keys()) == ['pid'] - with pytest.raises(ValueError): - list(psutil.process_iter(attrs=['foo'])) - with mock.patch( - "psutil._psplatform.Process.cpu_times", - side_effect=psutil.AccessDenied(0, ""), - ) as m: - for p in psutil.process_iter(attrs=["pid", "cpu_times"]): - assert p.info['cpu_times'] is None - assert p.info['pid'] >= 0 - assert m.called - with mock.patch( - "psutil._psplatform.Process.cpu_times", - side_effect=psutil.AccessDenied(0, ""), - ) as m: - flag = object() - for p in psutil.process_iter( - attrs=["pid", "cpu_times"], ad_value=flag - ): - assert p.info['cpu_times'] is flag - assert p.info['pid'] >= 0 - assert m.called - - def test_cache_clear(self): - list(psutil.process_iter()) # populate cache - assert psutil._pmap - psutil.process_iter.cache_clear() - assert not psutil._pmap - - -class TestProcessAPIs(PsutilTestCase): - @pytest.mark.skipif( - PYPY and WINDOWS, - reason="spawn_subproc() unreliable on PYPY + WINDOWS", - ) - def test_wait_procs(self): - def callback(p): - pids.append(p.pid) - - pids = [] - sproc1 = self.spawn_subproc() - sproc2 = self.spawn_subproc() - sproc3 = self.spawn_subproc() - procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)] - with pytest.raises(ValueError): - psutil.wait_procs(procs, timeout=-1) - with pytest.raises(TypeError): - psutil.wait_procs(procs, callback=1) - t = time.time() - gone, alive = psutil.wait_procs(procs, timeout=0.01, callback=callback) - - assert time.time() - t < 0.5 - assert not gone - assert len(alive) == 3 - assert not pids - for p in alive: - assert not hasattr(p, 'returncode') - - @retry_on_failure(30) - def test_1(procs, callback): - gone, alive = psutil.wait_procs( - procs, timeout=0.03, callback=callback - ) - assert len(gone) == 1 - assert len(alive) == 2 - return gone, alive - - sproc3.terminate() - gone, alive = test_1(procs, callback) - assert sproc3.pid in [x.pid for x in gone] - if POSIX: - assert gone.pop().returncode == -signal.SIGTERM - else: - assert gone.pop().returncode == 1 - assert pids == [sproc3.pid] - for p in alive: - assert not hasattr(p, 'returncode') - - @retry_on_failure(30) - def test_2(procs, callback): - gone, alive = psutil.wait_procs( - procs, timeout=0.03, callback=callback - ) - assert len(gone) == 3 - assert len(alive) == 0 - return gone, alive - - sproc1.terminate() - sproc2.terminate() - gone, alive = test_2(procs, callback) - assert set(pids) == {sproc1.pid, sproc2.pid, sproc3.pid} - for p in gone: - assert hasattr(p, 'returncode') - - @pytest.mark.skipif( - PYPY and WINDOWS, - reason="spawn_subproc() unreliable on PYPY + WINDOWS", - ) - def test_wait_procs_no_timeout(self): - sproc1 = self.spawn_subproc() - sproc2 = self.spawn_subproc() - sproc3 = self.spawn_subproc() - procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)] - for p in procs: - p.terminate() - psutil.wait_procs(procs) - - def test_pid_exists(self): - sproc = self.spawn_subproc() - assert psutil.pid_exists(sproc.pid) - p = psutil.Process(sproc.pid) - p.kill() - p.wait() - assert not psutil.pid_exists(sproc.pid) - assert not psutil.pid_exists(-1) - assert psutil.pid_exists(0) == (0 in psutil.pids()) - - def test_pid_exists_2(self): - pids = psutil.pids() - for pid in pids: - try: - assert psutil.pid_exists(pid) - except AssertionError: - # in case the process disappeared in meantime fail only - # if it is no longer in psutil.pids() - time.sleep(0.1) - assert pid not in psutil.pids() - pids = range(max(pids) + 15000, max(pids) + 16000) - for pid in pids: - assert not psutil.pid_exists(pid) - - -class TestMiscAPIs(PsutilTestCase): - def test_boot_time(self): - bt = psutil.boot_time() - assert isinstance(bt, float) - assert bt > 0 - assert bt < time.time() - - @pytest.mark.skipif( - CI_TESTING and not psutil.users(), reason="unreliable on CI" - ) - def test_users(self): - users = psutil.users() - assert users - for user in users: - with self.subTest(user=user): - assert user.name - assert isinstance(user.name, str) - assert isinstance(user.terminal, (str, type(None))) - if user.host is not None: - assert isinstance(user.host, (str, type(None))) - user.terminal # noqa: B018 - user.host # noqa: B018 - assert user.started > 0.0 - datetime.datetime.fromtimestamp(user.started) - if WINDOWS or OPENBSD: - assert user.pid is None - else: - psutil.Process(user.pid) - - def test_os_constants(self): - names = [ - "POSIX", - "WINDOWS", - "LINUX", - "MACOS", - "FREEBSD", - "OPENBSD", - "NETBSD", - "BSD", - "SUNOS", - ] - for name in names: - assert isinstance(getattr(psutil, name), bool), name - - if os.name == 'posix': - assert psutil.POSIX - assert not psutil.WINDOWS - names.remove("POSIX") - if "linux" in sys.platform.lower(): - assert psutil.LINUX - names.remove("LINUX") - elif "bsd" in sys.platform.lower(): - assert psutil.BSD - assert [psutil.FREEBSD, psutil.OPENBSD, psutil.NETBSD].count( - True - ) == 1 - names.remove("BSD") - names.remove("FREEBSD") - names.remove("OPENBSD") - names.remove("NETBSD") - elif ( - "sunos" in sys.platform.lower() - or "solaris" in sys.platform.lower() - ): - assert psutil.SUNOS - names.remove("SUNOS") - elif "darwin" in sys.platform.lower(): - assert psutil.MACOS - names.remove("MACOS") - else: - assert psutil.WINDOWS - assert not psutil.POSIX - names.remove("WINDOWS") - - # assert all other constants are set to False - for name in names: - assert not getattr(psutil, name), name - - -class TestMemoryAPIs(PsutilTestCase): - def test_virtual_memory(self): - mem = psutil.virtual_memory() - assert mem.total > 0, mem - assert mem.available > 0, mem - assert 0 <= mem.percent <= 100, mem - assert mem.used > 0, mem - assert mem.free >= 0, mem - for name in mem._fields: - value = getattr(mem, name) - if name != 'percent': - assert isinstance(value, int) - if name != 'total': - if not value >= 0: - return pytest.fail(f"{name!r} < 0 ({value})") - if value > mem.total: - return pytest.fail( - f"{name!r} > total (total={mem.total}, {name}={value})" - ) - - def test_swap_memory(self): - mem = psutil.swap_memory() - assert mem._fields == ( - 'total', - 'used', - 'free', - 'percent', - 'sin', - 'sout', - ) - - assert mem.total >= 0, mem - assert mem.used >= 0, mem - if mem.total > 0: - # likely a system with no swap partition - assert mem.free > 0, mem - else: - assert mem.free == 0, mem - assert 0 <= mem.percent <= 100, mem - assert mem.sin >= 0, mem - assert mem.sout >= 0, mem - - -class TestCpuAPIs(PsutilTestCase): - def test_cpu_count_logical(self): - logical = psutil.cpu_count() - assert logical is not None - assert logical == len(psutil.cpu_times(percpu=True)) - assert logical >= 1 - - if os.path.exists("/proc/cpuinfo"): - with open("/proc/cpuinfo") as fd: - cpuinfo_data = fd.read() - if "physical id" not in cpuinfo_data: - return pytest.skip("cpuinfo doesn't include physical id") - - def test_cpu_count_cores(self): - logical = psutil.cpu_count() - cores = psutil.cpu_count(logical=False) - if cores is None: - return pytest.skip("cpu_count_cores() is None") - if WINDOWS and sys.getwindowsversion()[:2] <= (6, 1): # <= Vista - assert cores is None - else: - assert cores >= 1 - assert logical >= cores - - def test_cpu_count_none(self): - # https://github.com/giampaolo/psutil/issues/1085 - for val in (-1, 0, None): - with mock.patch( - 'psutil._psplatform.cpu_count_logical', return_value=val - ) as m: - assert psutil.cpu_count() is None - assert m.called - with mock.patch( - 'psutil._psplatform.cpu_count_cores', return_value=val - ) as m: - assert psutil.cpu_count(logical=False) is None - assert m.called - - def test_cpu_times(self): - # Check type, value >= 0, str(). - total = 0 - times = psutil.cpu_times() - sum(times) - for cp_time in times: - assert isinstance(cp_time, float) - assert cp_time >= 0.0 - total += cp_time - assert round(abs(total - sum(times)), 6) == 0 - str(times) - # CPU times are always supposed to increase over time - # or at least remain the same and that's because time - # cannot go backwards. - # Surprisingly sometimes this might not be the case (at - # least on Windows and Linux), see: - # https://github.com/giampaolo/psutil/issues/392 - # https://github.com/giampaolo/psutil/issues/645 - # if not WINDOWS: - # last = psutil.cpu_times() - # for x in range(100): - # new = psutil.cpu_times() - # for field in new._fields: - # new_t = getattr(new, field) - # last_t = getattr(last, field) - # assert new_t >= last_t - # last = new - - def test_cpu_times_time_increases(self): - # Make sure time increases between calls. - t1 = sum(psutil.cpu_times()) - stop_at = time.time() + GLOBAL_TIMEOUT - while time.time() < stop_at: - t2 = sum(psutil.cpu_times()) - if t2 > t1: - return None - return pytest.fail("time remained the same") - - def test_per_cpu_times(self): - # Check type, value >= 0, str(). - for times in psutil.cpu_times(percpu=True): - total = 0 - sum(times) - for cp_time in times: - assert isinstance(cp_time, float) - assert cp_time >= 0.0 - total += cp_time - assert round(abs(total - sum(times)), 6) == 0 - str(times) - assert len(psutil.cpu_times(percpu=True)[0]) == len( - psutil.cpu_times(percpu=False) - ) - - # Note: in theory CPU times are always supposed to increase over - # time or remain the same but never go backwards. In practice - # sometimes this is not the case. - # This issue seemd to be afflict Windows: - # https://github.com/giampaolo/psutil/issues/392 - # ...but it turns out also Linux (rarely) behaves the same. - # last = psutil.cpu_times(percpu=True) - # for x in range(100): - # new = psutil.cpu_times(percpu=True) - # for index in range(len(new)): - # newcpu = new[index] - # lastcpu = last[index] - # for field in newcpu._fields: - # new_t = getattr(newcpu, field) - # last_t = getattr(lastcpu, field) - # assert new_t >= last_t - # last = new - - def test_per_cpu_times_2(self): - # Simulate some work load then make sure time have increased - # between calls. - tot1 = psutil.cpu_times(percpu=True) - giveup_at = time.time() + GLOBAL_TIMEOUT - while True: - if time.time() >= giveup_at: - return pytest.fail("timeout") - tot2 = psutil.cpu_times(percpu=True) - for t1, t2 in zip(tot1, tot2): - t1, t2 = psutil._cpu_busy_time(t1), psutil._cpu_busy_time(t2) - difference = t2 - t1 - if difference >= 0.05: - return None - - @pytest.mark.skipif( - (CI_TESTING and OPENBSD) or MACOS, reason="unreliable on OPENBSD + CI" - ) - @retry_on_failure(30) - def test_cpu_times_comparison(self): - # Make sure the sum of all per cpu times is almost equal to - # base "one cpu" times. On OpenBSD the sum of per-CPUs is - # higher for some reason. - base = psutil.cpu_times() - per_cpu = psutil.cpu_times(percpu=True) - summed_values = base._make([sum(num) for num in zip(*per_cpu)]) - for field in base._fields: - with self.subTest(field=field, base=base, per_cpu=per_cpu): - assert ( - abs(getattr(base, field) - getattr(summed_values, field)) - < 2 - ) - - def _test_cpu_percent(self, percent, last_ret, new_ret): - try: - assert isinstance(percent, float) - assert percent >= 0.0 - assert percent <= 100.0 * psutil.cpu_count() - except AssertionError as err: - raise AssertionError( - "\n{}\nlast={}\nnew={}".format( - err, pprint.pformat(last_ret), pprint.pformat(new_ret) - ) - ) - - def test_cpu_percent(self): - last = psutil.cpu_percent(interval=0.001) - for _ in range(100): - new = psutil.cpu_percent(interval=None) - self._test_cpu_percent(new, last, new) - last = new - with pytest.raises(ValueError): - psutil.cpu_percent(interval=-1) - - def test_per_cpu_percent(self): - last = psutil.cpu_percent(interval=0.001, percpu=True) - assert len(last) == psutil.cpu_count() - for _ in range(100): - new = psutil.cpu_percent(interval=None, percpu=True) - for percent in new: - self._test_cpu_percent(percent, last, new) - last = new - with pytest.raises(ValueError): - psutil.cpu_percent(interval=-1, percpu=True) - - def test_cpu_times_percent(self): - last = psutil.cpu_times_percent(interval=0.001) - for _ in range(100): - new = psutil.cpu_times_percent(interval=None) - for percent in new: - self._test_cpu_percent(percent, last, new) - self._test_cpu_percent(sum(new), last, new) - last = new - with pytest.raises(ValueError): - psutil.cpu_times_percent(interval=-1) - - def test_per_cpu_times_percent(self): - last = psutil.cpu_times_percent(interval=0.001, percpu=True) - assert len(last) == psutil.cpu_count() - for _ in range(100): - new = psutil.cpu_times_percent(interval=None, percpu=True) - for cpu in new: - for percent in cpu: - self._test_cpu_percent(percent, last, new) - self._test_cpu_percent(sum(cpu), last, new) - last = new - - def test_per_cpu_times_percent_negative(self): - # see: https://github.com/giampaolo/psutil/issues/645 - psutil.cpu_times_percent(percpu=True) - zero_times = [ - x._make([0 for x in range(len(x._fields))]) - for x in psutil.cpu_times(percpu=True) - ] - with mock.patch('psutil.cpu_times', return_value=zero_times): - for cpu in psutil.cpu_times_percent(percpu=True): - for percent in cpu: - self._test_cpu_percent(percent, None, None) - - def test_cpu_stats(self): - # Tested more extensively in per-platform test modules. - infos = psutil.cpu_stats() - assert infos._fields == ( - 'ctx_switches', - 'interrupts', - 'soft_interrupts', - 'syscalls', - ) - for name in infos._fields: - value = getattr(infos, name) - assert value >= 0 - # on AIX, ctx_switches is always 0 - if not AIX and name in {'ctx_switches', 'interrupts'}: - assert value > 0 - - # TODO: remove this once 1892 is fixed - @pytest.mark.skipif(MACOS and AARCH64, reason="skipped due to #1892") - @pytest.mark.skipif(not HAS_CPU_FREQ, reason="not supported") - def test_cpu_freq(self): - def check_ls(ls): - for nt in ls: - assert nt._fields == ('current', 'min', 'max') - for name in nt._fields: - value = getattr(nt, name) - assert isinstance(value, (int, float)) - assert value >= 0 - - ls = psutil.cpu_freq(percpu=True) - if (FREEBSD or AARCH64) and not ls: - return pytest.skip( - "returns empty list on FreeBSD and Linux aarch64" - ) - - assert ls, ls - check_ls([psutil.cpu_freq(percpu=False)]) - - if LINUX: - assert len(ls) == psutil.cpu_count() - - @pytest.mark.skipif(not HAS_GETLOADAVG, reason="not supported") - def test_getloadavg(self): - loadavg = psutil.getloadavg() - assert len(loadavg) == 3 - for load in loadavg: - assert isinstance(load, float) - assert load >= 0.0 - - -class TestDiskAPIs(PsutilTestCase): - def test_disk_usage(self): - usage = psutil.disk_usage(os.getcwd()) - assert usage._fields == ('total', 'used', 'free', 'percent') - assert usage.total > 0, usage - assert usage.used > 0, usage - assert usage.free > 0, usage - assert usage.total > usage.used, usage - assert usage.total > usage.free, usage - assert 0 <= usage.percent <= 100, usage.percent - - shutil_usage = shutil.disk_usage(os.getcwd()) - tolerance = 5 * 1024 * 1024 # 5MB - assert usage.total == shutil_usage.total - assert abs(usage.free - shutil_usage.free) < tolerance - if not MACOS_12PLUS: - # see https://github.com/giampaolo/psutil/issues/2147 - assert abs(usage.used - shutil_usage.used) < tolerance - - # if path does not exist OSError ENOENT is expected across - # all platforms - fname = self.get_testfn() - with pytest.raises(FileNotFoundError): - psutil.disk_usage(fname) - - @pytest.mark.skipif(not ASCII_FS, reason="not an ASCII fs") - def test_disk_usage_unicode(self): - # See: https://github.com/giampaolo/psutil/issues/416 - with pytest.raises(UnicodeEncodeError): - psutil.disk_usage(UNICODE_SUFFIX) - - def test_disk_usage_bytes(self): - psutil.disk_usage(b'.') - - def test_disk_partitions(self): - def check_ntuple(nt): - assert isinstance(nt.device, str) - assert isinstance(nt.mountpoint, str) - assert isinstance(nt.fstype, str) - assert isinstance(nt.opts, str) - - # all = False - ls = psutil.disk_partitions(all=False) - assert ls - for disk in ls: - check_ntuple(disk) - if WINDOWS and 'cdrom' in disk.opts: - continue - if not POSIX: - assert os.path.exists(disk.device), disk - else: - # we cannot make any assumption about this, see: - # http://goo.gl/p9c43 - disk.device # noqa: B018 - # on modern systems mount points can also be files - assert os.path.exists(disk.mountpoint), disk - assert disk.fstype, disk - - # all = True - ls = psutil.disk_partitions(all=True) - assert ls - for disk in psutil.disk_partitions(all=True): - check_ntuple(disk) - if not WINDOWS and disk.mountpoint: - try: - os.stat(disk.mountpoint) - except OSError as err: - if GITHUB_ACTIONS and MACOS and err.errno == errno.EIO: - continue - # http://mail.python.org/pipermail/python-dev/ - # 2012-June/120787.html - if err.errno not in {errno.EPERM, errno.EACCES}: - raise - else: - assert os.path.exists(disk.mountpoint), disk - - # --- - - def find_mount_point(path): - path = os.path.abspath(path) - while not os.path.ismount(path): - path = os.path.dirname(path) - return path.lower() - - mount = find_mount_point(__file__) - mounts = [ - x.mountpoint.lower() - for x in psutil.disk_partitions(all=True) - if x.mountpoint - ] - assert mount in mounts - - @pytest.mark.skipif( - LINUX and not os.path.exists('/proc/diskstats'), - reason="/proc/diskstats not available on this linux version", - ) - @pytest.mark.skipif( - CI_TESTING and not psutil.disk_io_counters(), reason="unreliable on CI" - ) # no visible disks - def test_disk_io_counters(self): - def check_ntuple(nt): - assert nt[0] == nt.read_count - assert nt[1] == nt.write_count - assert nt[2] == nt.read_bytes - assert nt[3] == nt.write_bytes - if not (OPENBSD or NETBSD): - assert nt[4] == nt.read_time - assert nt[5] == nt.write_time - if LINUX: - assert nt[6] == nt.read_merged_count - assert nt[7] == nt.write_merged_count - assert nt[8] == nt.busy_time - elif FREEBSD: - assert nt[6] == nt.busy_time - for name in nt._fields: - assert getattr(nt, name) >= 0, nt - - ret = psutil.disk_io_counters(perdisk=False) - assert ret is not None, "no disks on this system?" - check_ntuple(ret) - ret = psutil.disk_io_counters(perdisk=True) - # make sure there are no duplicates - assert len(ret) == len(set(ret)) - for key in ret: - assert key, key - check_ntuple(ret[key]) - - def test_disk_io_counters_no_disks(self): - # Emulate a case where no disks are installed, see: - # https://github.com/giampaolo/psutil/issues/1062 - with mock.patch( - 'psutil._psplatform.disk_io_counters', return_value={} - ) as m: - assert psutil.disk_io_counters(perdisk=False) is None - assert psutil.disk_io_counters(perdisk=True) == {} - assert m.called - - -class TestNetAPIs(PsutilTestCase): - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_net_io_counters(self): - def check_ntuple(nt): - assert nt[0] == nt.bytes_sent - assert nt[1] == nt.bytes_recv - assert nt[2] == nt.packets_sent - assert nt[3] == nt.packets_recv - assert nt[4] == nt.errin - assert nt[5] == nt.errout - assert nt[6] == nt.dropin - assert nt[7] == nt.dropout - assert nt.bytes_sent >= 0, nt - assert nt.bytes_recv >= 0, nt - assert nt.packets_sent >= 0, nt - assert nt.packets_recv >= 0, nt - assert nt.errin >= 0, nt - assert nt.errout >= 0, nt - assert nt.dropin >= 0, nt - assert nt.dropout >= 0, nt - - ret = psutil.net_io_counters(pernic=False) - check_ntuple(ret) - ret = psutil.net_io_counters(pernic=True) - assert ret != [] - for key in ret: - assert key - assert isinstance(key, str) - check_ntuple(ret[key]) - - @pytest.mark.skipif(not HAS_NET_IO_COUNTERS, reason="not supported") - def test_net_io_counters_no_nics(self): - # Emulate a case where no NICs are installed, see: - # https://github.com/giampaolo/psutil/issues/1062 - with mock.patch( - 'psutil._psplatform.net_io_counters', return_value={} - ) as m: - assert psutil.net_io_counters(pernic=False) is None - assert psutil.net_io_counters(pernic=True) == {} - assert m.called - - def test_net_if_addrs(self): - nics = psutil.net_if_addrs() - assert nics, nics - - nic_stats = psutil.net_if_stats() - - # Not reliable on all platforms (net_if_addrs() reports more - # interfaces). - # assert sorted(nics.keys()) == sorted( - # psutil.net_io_counters(pernic=True).keys() - # ) - - families = {socket.AF_INET, socket.AF_INET6, psutil.AF_LINK} - for nic, addrs in nics.items(): - assert isinstance(nic, str) - assert len(set(addrs)) == len(addrs) - for addr in addrs: - assert isinstance(addr.family, int) - assert isinstance(addr.address, str) - assert isinstance(addr.netmask, (str, type(None))) - assert isinstance(addr.broadcast, (str, type(None))) - assert addr.family in families - assert isinstance(addr.family, enum.IntEnum) - if nic_stats[nic].isup: - # Do not test binding to addresses of interfaces - # that are down - if addr.family == socket.AF_INET: - with socket.socket(addr.family) as s: - s.bind((addr.address, 0)) - elif addr.family == socket.AF_INET6: - info = socket.getaddrinfo( - addr.address, - 0, - socket.AF_INET6, - socket.SOCK_STREAM, - 0, - socket.AI_PASSIVE, - )[0] - af, socktype, proto, _canonname, sa = info - with socket.socket(af, socktype, proto) as s: - s.bind(sa) - for ip in ( - addr.address, - addr.netmask, - addr.broadcast, - addr.ptp, - ): - if ip is not None: - # TODO: skip AF_INET6 for now because I get: - # AddressValueError: Only hex digits permitted in - # u'c6f3%lxcbr0' in u'fe80::c8e0:fff:fe54:c6f3%lxcbr0' - if addr.family != socket.AF_INET6: - check_net_address(ip, addr.family) - # broadcast and ptp addresses are mutually exclusive - if addr.broadcast: - assert addr.ptp is None - elif addr.ptp: - assert addr.broadcast is None - - # check broadcast address - if ( - addr.broadcast - and addr.netmask - and addr.family in {socket.AF_INET, socket.AF_INET6} - ): - assert addr.broadcast == broadcast_addr(addr) - - if BSD or MACOS or SUNOS: - if hasattr(socket, "AF_LINK"): - assert psutil.AF_LINK == socket.AF_LINK - elif LINUX: - assert psutil.AF_LINK == socket.AF_PACKET - elif WINDOWS: - assert psutil.AF_LINK == -1 - - def test_net_if_addrs_mac_null_bytes(self): - # Simulate that the underlying C function returns an incomplete - # MAC address. psutil is supposed to fill it with null bytes. - # https://github.com/giampaolo/psutil/issues/786 - if POSIX: - ret = [('em1', psutil.AF_LINK, '06:3d:29', None, None, None)] - else: - ret = [('em1', -1, '06-3d-29', None, None, None)] - with mock.patch( - 'psutil._psplatform.net_if_addrs', return_value=ret - ) as m: - addr = psutil.net_if_addrs()['em1'][0] - assert m.called - if POSIX: - assert addr.address == '06:3d:29:00:00:00' - else: - assert addr.address == '06-3d-29-00-00-00' - - def test_net_if_stats(self): - nics = psutil.net_if_stats() - assert nics, nics - all_duplexes = ( - psutil.NIC_DUPLEX_FULL, - psutil.NIC_DUPLEX_HALF, - psutil.NIC_DUPLEX_UNKNOWN, - ) - for name, stats in nics.items(): - assert isinstance(name, str) - isup, duplex, speed, mtu, flags = stats - assert isinstance(isup, bool) - assert duplex in all_duplexes - assert duplex in all_duplexes - assert speed >= 0 - assert mtu >= 0 - assert isinstance(flags, str) - - @pytest.mark.skipif( - not (LINUX or BSD or MACOS), reason="LINUX or BSD or MACOS specific" - ) - def test_net_if_stats_enodev(self): - # See: https://github.com/giampaolo/psutil/issues/1279 - with mock.patch( - 'psutil._psplatform.cext.net_if_mtu', - side_effect=OSError(errno.ENODEV, ""), - ) as m: - ret = psutil.net_if_stats() - assert ret == {} - assert m.called - - -class TestSensorsAPIs(PsutilTestCase): - @pytest.mark.skipif(not HAS_SENSORS_TEMPERATURES, reason="not supported") - def test_sensors_temperatures(self): - temps = psutil.sensors_temperatures() - for name, entries in temps.items(): - assert isinstance(name, str) - for entry in entries: - assert isinstance(entry.label, str) - if entry.current is not None: - assert entry.current >= 0 - if entry.high is not None: - assert entry.high >= 0 - if entry.critical is not None: - assert entry.critical >= 0 - - @pytest.mark.skipif(not HAS_SENSORS_TEMPERATURES, reason="not supported") - def test_sensors_temperatures_fahreneit(self): - d = {'coretemp': [('label', 50.0, 60.0, 70.0)]} - with mock.patch( - "psutil._psplatform.sensors_temperatures", return_value=d - ) as m: - temps = psutil.sensors_temperatures(fahrenheit=True)['coretemp'][0] - assert m.called - assert temps.current == 122.0 - assert temps.high == 140.0 - assert temps.critical == 158.0 - - @pytest.mark.skipif(not HAS_SENSORS_BATTERY, reason="not supported") - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_sensors_battery(self): - ret = psutil.sensors_battery() - assert ret.percent >= 0 - assert ret.percent <= 100 - if ret.secsleft not in { - psutil.POWER_TIME_UNKNOWN, - psutil.POWER_TIME_UNLIMITED, - }: - assert ret.secsleft >= 0 - elif ret.secsleft == psutil.POWER_TIME_UNLIMITED: - assert ret.power_plugged - assert isinstance(ret.power_plugged, bool) - - @pytest.mark.skipif(not HAS_SENSORS_FANS, reason="not supported") - def test_sensors_fans(self): - fans = psutil.sensors_fans() - for name, entries in fans.items(): - assert isinstance(name, str) - for entry in entries: - assert isinstance(entry.label, str) - assert isinstance(entry.current, int) - assert entry.current >= 0 diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_testutils.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_testutils.py deleted file mode 100644 index a881413..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_testutils.py +++ /dev/null @@ -1,587 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for testing utils (psutil.tests namespace).""" - -import collections -import contextlib -import errno -import io -import os -import socket -import stat -import subprocess -import textwrap -import unittest -import warnings -from unittest import mock - -import psutil -import psutil.tests -from psutil import FREEBSD -from psutil import NETBSD -from psutil import POSIX -from psutil._common import open_binary -from psutil._common import open_text -from psutil._common import supports_ipv6 -from psutil.tests import CI_TESTING -from psutil.tests import COVERAGE -from psutil.tests import HAS_NET_CONNECTIONS_UNIX -from psutil.tests import HERE -from psutil.tests import PYTHON_EXE -from psutil.tests import PYTHON_EXE_ENV -from psutil.tests import PsutilTestCase -from psutil.tests import TestMemoryLeak -from psutil.tests import bind_socket -from psutil.tests import bind_unix_socket -from psutil.tests import call_until -from psutil.tests import chdir -from psutil.tests import create_sockets -from psutil.tests import fake_pytest -from psutil.tests import filter_proc_net_connections -from psutil.tests import get_free_port -from psutil.tests import is_namedtuple -from psutil.tests import process_namespace -from psutil.tests import pytest -from psutil.tests import reap_children -from psutil.tests import retry -from psutil.tests import retry_on_failure -from psutil.tests import safe_mkdir -from psutil.tests import safe_rmpath -from psutil.tests import system_namespace -from psutil.tests import tcp_socketpair -from psutil.tests import terminate -from psutil.tests import unix_socketpair -from psutil.tests import wait_for_file -from psutil.tests import wait_for_pid - -# =================================================================== -# --- Unit tests for test utilities. -# =================================================================== - - -class TestRetryDecorator(PsutilTestCase): - @mock.patch('time.sleep') - def test_retry_success(self, sleep): - # Fail 3 times out of 5; make sure the decorated fun returns. - - @retry(retries=5, interval=1, logfun=None) - def foo(): - while queue: - queue.pop() - 1 / 0 # noqa: B018 - return 1 - - queue = list(range(3)) - assert foo() == 1 - assert sleep.call_count == 3 - - @mock.patch('time.sleep') - def test_retry_failure(self, sleep): - # Fail 6 times out of 5; th function is supposed to raise exc. - @retry(retries=5, interval=1, logfun=None) - def foo(): - while queue: - queue.pop() - 1 / 0 # noqa: B018 - return 1 - - queue = list(range(6)) - with pytest.raises(ZeroDivisionError): - foo() - assert sleep.call_count == 5 - - @mock.patch('time.sleep') - def test_exception_arg(self, sleep): - @retry(exception=ValueError, interval=1) - def foo(): - raise TypeError - - with pytest.raises(TypeError): - foo() - assert sleep.call_count == 0 - - @mock.patch('time.sleep') - def test_no_interval_arg(self, sleep): - # if interval is not specified sleep is not supposed to be called - - @retry(retries=5, interval=None, logfun=None) - def foo(): - 1 / 0 # noqa: B018 - - with pytest.raises(ZeroDivisionError): - foo() - assert sleep.call_count == 0 - - @mock.patch('time.sleep') - def test_retries_arg(self, sleep): - @retry(retries=5, interval=1, logfun=None) - def foo(): - 1 / 0 # noqa: B018 - - with pytest.raises(ZeroDivisionError): - foo() - assert sleep.call_count == 5 - - @mock.patch('time.sleep') - def test_retries_and_timeout_args(self, sleep): - with pytest.raises(ValueError): - retry(retries=5, timeout=1) - - -class TestSyncTestUtils(PsutilTestCase): - def test_wait_for_pid(self): - wait_for_pid(os.getpid()) - nopid = max(psutil.pids()) + 99999 - with mock.patch('psutil.tests.retry.__iter__', return_value=iter([0])): - with pytest.raises(psutil.NoSuchProcess): - wait_for_pid(nopid) - - def test_wait_for_file(self): - testfn = self.get_testfn() - with open(testfn, 'w') as f: - f.write('foo') - wait_for_file(testfn) - assert not os.path.exists(testfn) - - def test_wait_for_file_empty(self): - testfn = self.get_testfn() - with open(testfn, 'w'): - pass - wait_for_file(testfn, empty=True) - assert not os.path.exists(testfn) - - def test_wait_for_file_no_file(self): - testfn = self.get_testfn() - with mock.patch('psutil.tests.retry.__iter__', return_value=iter([0])): - with pytest.raises(OSError): - wait_for_file(testfn) - - def test_wait_for_file_no_delete(self): - testfn = self.get_testfn() - with open(testfn, 'w') as f: - f.write('foo') - wait_for_file(testfn, delete=False) - assert os.path.exists(testfn) - - def test_call_until(self): - call_until(lambda: 1) - # TODO: test for timeout - - -class TestFSTestUtils(PsutilTestCase): - def test_open_text(self): - with open_text(__file__) as f: - assert f.mode == 'r' - - def test_open_binary(self): - with open_binary(__file__) as f: - assert f.mode == 'rb' - - def test_safe_mkdir(self): - testfn = self.get_testfn() - safe_mkdir(testfn) - assert os.path.isdir(testfn) - safe_mkdir(testfn) - assert os.path.isdir(testfn) - - def test_safe_rmpath(self): - # test file is removed - testfn = self.get_testfn() - open(testfn, 'w').close() - safe_rmpath(testfn) - assert not os.path.exists(testfn) - # test no exception if path does not exist - safe_rmpath(testfn) - # test dir is removed - os.mkdir(testfn) - safe_rmpath(testfn) - assert not os.path.exists(testfn) - # test other exceptions are raised - with mock.patch( - 'psutil.tests.os.stat', side_effect=OSError(errno.EINVAL, "") - ) as m: - with pytest.raises(OSError): - safe_rmpath(testfn) - assert m.called - - def test_chdir(self): - testfn = self.get_testfn() - base = os.getcwd() - os.mkdir(testfn) - with chdir(testfn): - assert os.getcwd() == os.path.join(base, testfn) - assert os.getcwd() == base - - -class TestProcessUtils(PsutilTestCase): - def test_reap_children(self): - subp = self.spawn_subproc() - p = psutil.Process(subp.pid) - assert p.is_running() - reap_children() - assert not p.is_running() - assert not psutil.tests._pids_started - assert not psutil.tests._subprocesses_started - - def test_spawn_children_pair(self): - child, grandchild = self.spawn_children_pair() - assert child.pid != grandchild.pid - assert child.is_running() - assert grandchild.is_running() - children = psutil.Process().children() - assert children == [child] - children = psutil.Process().children(recursive=True) - assert len(children) == 2 - assert child in children - assert grandchild in children - assert child.ppid() == os.getpid() - assert grandchild.ppid() == child.pid - - terminate(child) - assert not child.is_running() - assert grandchild.is_running() - - terminate(grandchild) - assert not grandchild.is_running() - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_spawn_zombie(self): - _parent, zombie = self.spawn_zombie() - assert zombie.status() == psutil.STATUS_ZOMBIE - - def test_terminate(self): - # by subprocess.Popen - p = self.spawn_subproc() - terminate(p) - self.assert_pid_gone(p.pid) - terminate(p) - # by psutil.Process - p = psutil.Process(self.spawn_subproc().pid) - terminate(p) - self.assert_pid_gone(p.pid) - terminate(p) - # by psutil.Popen - cmd = [ - PYTHON_EXE, - "-c", - "import time; [time.sleep(0.1) for x in range(100)];", - ] - p = psutil.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=PYTHON_EXE_ENV, - ) - terminate(p) - self.assert_pid_gone(p.pid) - terminate(p) - # by PID - pid = self.spawn_subproc().pid - terminate(pid) - self.assert_pid_gone(p.pid) - terminate(pid) - # zombie - if POSIX: - parent, zombie = self.spawn_zombie() - terminate(parent) - terminate(zombie) - self.assert_pid_gone(parent.pid) - self.assert_pid_gone(zombie.pid) - - -class TestNetUtils(PsutilTestCase): - def bind_socket(self): - port = get_free_port() - with bind_socket(addr=('', port)) as s: - assert s.getsockname()[1] == port - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - def test_bind_unix_socket(self): - name = self.get_testfn() - with bind_unix_socket(name) as sock: - assert sock.family == socket.AF_UNIX - assert sock.type == socket.SOCK_STREAM - assert sock.getsockname() == name - assert os.path.exists(name) - assert stat.S_ISSOCK(os.stat(name).st_mode) - # UDP - name = self.get_testfn() - with bind_unix_socket(name, type=socket.SOCK_DGRAM) as sock: - assert sock.type == socket.SOCK_DGRAM - - def test_tcp_socketpair(self): - addr = ("127.0.0.1", get_free_port()) - server, client = tcp_socketpair(socket.AF_INET, addr=addr) - with server, client: - # Ensure they are connected and the positions are correct. - assert server.getsockname() == addr - assert client.getpeername() == addr - assert client.getsockname() != addr - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.skipif( - NETBSD or FREEBSD, reason="/var/run/log UNIX socket opened by default" - ) - @pytest.mark.skipif( - not HAS_NET_CONNECTIONS_UNIX, reason="can't list UNIX sockets" - ) - def test_unix_socketpair(self): - p = psutil.Process() - num_fds = p.num_fds() - assert not filter_proc_net_connections(p.net_connections(kind='unix')) - name = self.get_testfn() - server, client = unix_socketpair(name) - try: - assert os.path.exists(name) - assert stat.S_ISSOCK(os.stat(name).st_mode) - assert p.num_fds() - num_fds == 2 - assert ( - len( - filter_proc_net_connections(p.net_connections(kind='unix')) - ) - == 2 - ) - assert server.getsockname() == name - assert client.getpeername() == name - finally: - client.close() - server.close() - - def test_create_sockets(self): - with create_sockets() as socks: - fams = collections.defaultdict(int) - types = collections.defaultdict(int) - for s in socks: - fams[s.family] += 1 - # work around http://bugs.python.org/issue30204 - types[s.getsockopt(socket.SOL_SOCKET, socket.SO_TYPE)] += 1 - assert fams[socket.AF_INET] >= 2 - if supports_ipv6(): - assert fams[socket.AF_INET6] >= 2 - if POSIX and HAS_NET_CONNECTIONS_UNIX: - assert fams[socket.AF_UNIX] >= 2 - assert types[socket.SOCK_STREAM] >= 2 - assert types[socket.SOCK_DGRAM] >= 2 - - -@pytest.mark.xdist_group(name="serial") -class TestMemLeakClass(TestMemoryLeak): - @retry_on_failure() - def test_times(self): - def fun(): - cnt['cnt'] += 1 - - cnt = {'cnt': 0} - self.execute(fun, times=10, warmup_times=15) - assert cnt['cnt'] == 26 - - def test_param_err(self): - with pytest.raises(ValueError): - self.execute(lambda: 0, times=0) - with pytest.raises(ValueError): - self.execute(lambda: 0, times=-1) - with pytest.raises(ValueError): - self.execute(lambda: 0, warmup_times=-1) - with pytest.raises(ValueError): - self.execute(lambda: 0, tolerance=-1) - with pytest.raises(ValueError): - self.execute(lambda: 0, retries=-1) - - @retry_on_failure() - @pytest.mark.skipif(CI_TESTING, reason="skipped on CI") - @pytest.mark.skipif(COVERAGE, reason="skipped during test coverage") - def test_leak_mem(self): - ls = [] - - def fun(ls=ls): - ls.append("x" * 248 * 1024) - - try: - # will consume around 60M in total - with pytest.raises(pytest.fail.Exception, match="extra-mem"): - with contextlib.redirect_stdout( - io.StringIO() - ), contextlib.redirect_stderr(io.StringIO()): - self.execute(fun, times=100) - finally: - del ls - - def test_unclosed_files(self): - def fun(): - f = open(__file__) # noqa: SIM115 - self.addCleanup(f.close) - box.append(f) - - box = [] - kind = "fd" if POSIX else "handle" - with pytest.raises(pytest.fail.Exception, match="unclosed " + kind): - self.execute(fun) - - def test_tolerance(self): - def fun(): - ls.append("x" * 24 * 1024) - - ls = [] - times = 100 - self.execute( - fun, times=times, warmup_times=0, tolerance=200 * 1024 * 1024 - ) - assert len(ls) == times + 1 - - def test_execute_w_exc(self): - def fun_1(): - 1 / 0 # noqa: B018 - - self.execute_w_exc(ZeroDivisionError, fun_1) - with pytest.raises(ZeroDivisionError): - self.execute_w_exc(OSError, fun_1) - - def fun_2(): - pass - - with pytest.raises(pytest.fail.Exception): - self.execute_w_exc(ZeroDivisionError, fun_2) - - -class TestFakePytest(PsutilTestCase): - def run_test_class(self, klass): - suite = unittest.TestSuite() - suite.addTest(klass) - # silence output - runner = unittest.TextTestRunner(stream=io.StringIO()) - result = runner.run(suite) - return result - - def test_raises(self): - with fake_pytest.raises(ZeroDivisionError) as cm: - 1 / 0 # noqa: B018 - assert isinstance(cm.value, ZeroDivisionError) - - with fake_pytest.raises(ValueError, match="foo") as cm: - raise ValueError("foo") - - try: - with fake_pytest.raises(ValueError, match="foo") as cm: - raise ValueError("bar") - except AssertionError as err: - assert str(err) == '"foo" does not match "bar"' # noqa: PT017 - else: - return pytest.fail("exception not raised") - - def test_mark(self): - @fake_pytest.mark.xdist_group(name="serial") - def foo(): - return 1 - - assert foo() == 1 - - @fake_pytest.mark.xdist_group(name="serial") - class Foo: - def bar(self): - return 1 - - assert Foo().bar() == 1 - - def test_skipif(self): - class TestCase(unittest.TestCase): - @fake_pytest.mark.skipif(True, reason="reason") - def foo(self): - assert 1 == 1 # noqa: PLR0133 - - result = self.run_test_class(TestCase("foo")) - assert result.wasSuccessful() - assert len(result.skipped) == 1 - assert result.skipped[0][1] == "reason" - - class TestCase(unittest.TestCase): - @fake_pytest.mark.skipif(False, reason="reason") - def foo(self): - assert 1 == 1 # noqa: PLR0133 - - result = self.run_test_class(TestCase("foo")) - assert result.wasSuccessful() - assert len(result.skipped) == 0 - - def test_skip(self): - class TestCase(unittest.TestCase): - def foo(self): - fake_pytest.skip("reason") - assert 1 == 0 # noqa: PLR0133 - - result = self.run_test_class(TestCase("foo")) - assert result.wasSuccessful() - assert len(result.skipped) == 1 - assert result.skipped[0][1] == "reason" - - def test_main(self): - tmpdir = self.get_testfn(dir=HERE) - os.mkdir(tmpdir) - with open(os.path.join(tmpdir, "__init__.py"), "w"): - pass - with open(os.path.join(tmpdir, "test_file.py"), "w") as f: - f.write(textwrap.dedent("""\ - import unittest - - class TestCase(unittest.TestCase): - def test_passed(self): - pass - """).lstrip()) - with mock.patch.object(psutil.tests, "HERE", tmpdir): - with contextlib.redirect_stderr(io.StringIO()): - suite = fake_pytest.main() - assert suite.countTestCases() == 1 - - def test_warns(self): - # success - with fake_pytest.warns(UserWarning): - warnings.warn("foo", UserWarning, stacklevel=1) - - # failure - try: - with fake_pytest.warns(UserWarning): - warnings.warn("foo", DeprecationWarning, stacklevel=1) - except AssertionError: - pass - else: - return pytest.fail("exception not raised") - - # match success - with fake_pytest.warns(UserWarning, match="foo"): - warnings.warn("foo", UserWarning, stacklevel=1) - - # match failure - try: - with fake_pytest.warns(UserWarning, match="foo"): - warnings.warn("bar", UserWarning, stacklevel=1) - except AssertionError: - pass - else: - return pytest.fail("exception not raised") - - def test_fail(self): - with fake_pytest.raises(fake_pytest.fail.Exception): - raise fake_pytest.fail("reason") - - -class TestTestingUtils(PsutilTestCase): - def test_process_namespace(self): - p = psutil.Process() - ns = process_namespace(p) - ns.test() - fun = next(x for x in ns.iter(ns.getters) if x[1] == 'ppid')[0] - assert fun() == p.ppid() - - def test_system_namespace(self): - ns = system_namespace() - fun = next(x for x in ns.iter(ns.getters) if x[1] == 'net_if_addrs')[0] - assert fun() == psutil.net_if_addrs() - - -class TestOtherUtils(PsutilTestCase): - def test_is_namedtuple(self): - assert is_namedtuple(collections.namedtuple('foo', 'a b c')(1, 2, 3)) - assert not is_namedtuple(tuple()) diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_unicode.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_unicode.py deleted file mode 100644 index 8c8e3d6..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_unicode.py +++ /dev/null @@ -1,323 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Notes about unicode handling in psutil -======================================. - -Starting from version 5.3.0 psutil adds unicode support, see: -https://github.com/giampaolo/psutil/issues/1040 -The notes below apply to *any* API returning a string such as -process exe(), cwd() or username(): - -* all strings are encoded by using the OS filesystem encoding - (sys.getfilesystemencoding()) which varies depending on the platform - (e.g. "UTF-8" on macOS, "mbcs" on Win) -* no API call is supposed to crash with UnicodeDecodeError -* instead, in case of badly encoded data returned by the OS, the - following error handlers are used to replace the corrupted characters in - the string: - * sys.getfilesystemencodeerrors() or "surrogatescape" on POSIX and - "replace" on Windows. - -For a detailed explanation of how psutil handles unicode see #1040. - -Tests -===== - -List of APIs returning or dealing with a string: -('not tested' means they are not tested to deal with non-ASCII strings): - -* Process.cmdline() -* Process.cwd() -* Process.environ() -* Process.exe() -* Process.memory_maps() -* Process.name() -* Process.net_connections('unix') -* Process.open_files() -* Process.username() (not tested) - -* disk_io_counters() (not tested) -* disk_partitions() (not tested) -* disk_usage(str) -* net_connections('unix') -* net_if_addrs() (not tested) -* net_if_stats() (not tested) -* net_io_counters() (not tested) -* sensors_fans() (not tested) -* sensors_temperatures() (not tested) -* users() (not tested) - -* WindowsService.binpath() (not tested) -* WindowsService.description() (not tested) -* WindowsService.display_name() (not tested) -* WindowsService.name() (not tested) -* WindowsService.status() (not tested) -* WindowsService.username() (not tested) - -In here we create a unicode path with a funky non-ASCII name and (where -possible) make psutil return it back (e.g. on name(), exe(), open_files(), -etc.) and make sure that: - -* psutil never crashes with UnicodeDecodeError -* the returned path matches -""" - -import os -import shutil -import warnings -from contextlib import closing - -import psutil -from psutil import BSD -from psutil import MACOS -from psutil import NETBSD -from psutil import OPENBSD -from psutil import POSIX -from psutil import WINDOWS -from psutil.tests import ASCII_FS -from psutil.tests import CI_TESTING -from psutil.tests import HAS_ENVIRON -from psutil.tests import HAS_MEMORY_MAPS -from psutil.tests import HAS_NET_CONNECTIONS_UNIX -from psutil.tests import INVALID_UNICODE_SUFFIX -from psutil.tests import PYPY -from psutil.tests import TESTFN_PREFIX -from psutil.tests import UNICODE_SUFFIX -from psutil.tests import PsutilTestCase -from psutil.tests import bind_unix_socket -from psutil.tests import chdir -from psutil.tests import copyload_shared_lib -from psutil.tests import create_py_exe -from psutil.tests import get_testfn -from psutil.tests import pytest -from psutil.tests import safe_mkdir -from psutil.tests import safe_rmpath -from psutil.tests import skip_on_access_denied -from psutil.tests import spawn_subproc -from psutil.tests import terminate - - -def try_unicode(suffix): - """Return True if both the fs and the subprocess module can - deal with a unicode file name. - """ - sproc = None - testfn = get_testfn(suffix=suffix) - try: - safe_rmpath(testfn) - create_py_exe(testfn) - sproc = spawn_subproc(cmd=[testfn]) - shutil.copyfile(testfn, testfn + '-2') - safe_rmpath(testfn + '-2') - except (UnicodeEncodeError, OSError): - return False - else: - return True - finally: - if sproc is not None: - terminate(sproc) - safe_rmpath(testfn) - - -# =================================================================== -# FS APIs -# =================================================================== - - -class BaseUnicodeTest(PsutilTestCase): - funky_suffix = None - - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.skip_tests = False - cls.funky_name = None - if cls.funky_suffix is not None: - if not try_unicode(cls.funky_suffix): - cls.skip_tests = True - else: - cls.funky_name = get_testfn(suffix=cls.funky_suffix) - create_py_exe(cls.funky_name) - - def setUp(self): - super().setUp() - if self.skip_tests: - return pytest.skip("can't handle unicode str") - - -@pytest.mark.xdist_group(name="serial") -@pytest.mark.skipif(ASCII_FS, reason="ASCII fs") -class TestFSAPIs(BaseUnicodeTest): - """Test FS APIs with a funky, valid, UTF8 path name.""" - - funky_suffix = UNICODE_SUFFIX - - def expect_exact_path_match(self): - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - return self.funky_name in os.listdir(".") - - # --- - - def test_proc_exe(self): - cmd = [ - self.funky_name, - "-c", - "import time; [time.sleep(0.1) for x in range(100)]", - ] - subp = self.spawn_subproc(cmd) - p = psutil.Process(subp.pid) - exe = p.exe() - assert isinstance(exe, str) - if self.expect_exact_path_match(): - assert os.path.normcase(exe) == os.path.normcase(self.funky_name) - - def test_proc_name(self): - cmd = [ - self.funky_name, - "-c", - "import time; [time.sleep(0.1) for x in range(100)]", - ] - subp = self.spawn_subproc(cmd) - name = psutil.Process(subp.pid).name() - assert isinstance(name, str) - if self.expect_exact_path_match(): - assert name == os.path.basename(self.funky_name) - - def test_proc_cmdline(self): - cmd = [ - self.funky_name, - "-c", - "import time; [time.sleep(0.1) for x in range(100)]", - ] - subp = self.spawn_subproc(cmd) - p = psutil.Process(subp.pid) - cmdline = p.cmdline() - for part in cmdline: - assert isinstance(part, str) - if self.expect_exact_path_match(): - assert cmdline == cmd - - def test_proc_cwd(self): - dname = self.funky_name + "2" - self.addCleanup(safe_rmpath, dname) - safe_mkdir(dname) - with chdir(dname): - p = psutil.Process() - cwd = p.cwd() - assert isinstance(p.cwd(), str) - if self.expect_exact_path_match(): - assert cwd == dname - - @pytest.mark.skipif(PYPY and WINDOWS, reason="fails on PYPY + WINDOWS") - @pytest.mark.skipif( - NETBSD or OPENBSD, reason="broken on NETBSD or OPENBSD" - ) - def test_proc_open_files(self): - p = psutil.Process() - start = set(p.open_files()) - with open(self.funky_name, 'rb'): - new = set(p.open_files()) - path = (new - start).pop().path - assert isinstance(path, str) - if BSD and not path: - # XXX - see https://github.com/giampaolo/psutil/issues/595 - return pytest.skip("open_files on BSD is broken") - if self.expect_exact_path_match(): - assert os.path.normcase(path) == os.path.normcase(self.funky_name) - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.skipif( - not HAS_NET_CONNECTIONS_UNIX, reason="can't list UNIX sockets" - ) - def test_proc_net_connections(self): - name = self.get_testfn(suffix=self.funky_suffix) - sock = bind_unix_socket(name) - with closing(sock): - conn = psutil.Process().net_connections('unix')[0] - assert isinstance(conn.laddr, str) - if not conn.laddr and MACOS and CI_TESTING: - return pytest.skip("unreliable on OSX") - assert conn.laddr == name - - @pytest.mark.skipif(not POSIX, reason="POSIX only") - @pytest.mark.skipif( - not HAS_NET_CONNECTIONS_UNIX, reason="can't list UNIX sockets" - ) - @skip_on_access_denied() - def test_net_connections(self): - def find_sock(cons): - for conn in cons: - if os.path.basename(conn.laddr).startswith(TESTFN_PREFIX): - return conn - raise ValueError("connection not found") - - name = self.get_testfn(suffix=self.funky_suffix) - sock = bind_unix_socket(name) - with closing(sock): - cons = psutil.net_connections(kind='unix') - conn = find_sock(cons) - assert isinstance(conn.laddr, str) - assert conn.laddr == name - - def test_disk_usage(self): - dname = self.funky_name + "2" - self.addCleanup(safe_rmpath, dname) - safe_mkdir(dname) - psutil.disk_usage(dname) - - @pytest.mark.skipif(not HAS_MEMORY_MAPS, reason="not supported") - def test_memory_maps(self): - with copyload_shared_lib(suffix=self.funky_suffix) as funky_path: - - def normpath(p): - return os.path.realpath(os.path.normcase(p)) - - libpaths = [ - normpath(x.path) for x in psutil.Process().memory_maps() - ] - # ...just to have a clearer msg in case of failure - libpaths = [x for x in libpaths if TESTFN_PREFIX in x] - assert normpath(funky_path) in libpaths - for path in libpaths: - assert isinstance(path, str) - - -@pytest.mark.skipif(CI_TESTING, reason="unreliable on CI") -class TestFSAPIsWithInvalidPath(TestFSAPIs): - """Test FS APIs with a funky, invalid path name.""" - - funky_suffix = INVALID_UNICODE_SUFFIX - - def expect_exact_path_match(self): - return not MACOS - - -# =================================================================== -# Non fs APIs -# =================================================================== - - -class TestNonFSAPIS(BaseUnicodeTest): - """Unicode tests for non fs-related APIs.""" - - funky_suffix = UNICODE_SUFFIX - - @pytest.mark.skipif(not HAS_ENVIRON, reason="not supported") - @pytest.mark.skipif(PYPY and WINDOWS, reason="segfaults on PYPY + WINDOWS") - def test_proc_environ(self): - # Note: differently from others, this test does not deal - # with fs paths. - env = os.environ.copy() - env['FUNNY_ARG'] = self.funky_suffix - sproc = self.spawn_subproc(env=env) - p = psutil.Process(sproc.pid) - env = p.environ() - for k, v in env.items(): - assert isinstance(k, str) - assert isinstance(v, str) - assert env['FUNNY_ARG'] == self.funky_suffix diff --git a/myenv/lib/python3.12/site-packages/psutil/tests/test_windows.py b/myenv/lib/python3.12/site-packages/psutil/tests/test_windows.py deleted file mode 100644 index 203766f..0000000 --- a/myenv/lib/python3.12/site-packages/psutil/tests/test_windows.py +++ /dev/null @@ -1,946 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Windows specific tests.""" - -import ctypes -import datetime -import glob -import os -import platform -import re -import shutil -import signal -import subprocess -import sys -import time -import warnings -from unittest import mock - -import psutil -from psutil import WINDOWS -from psutil.tests import GITHUB_ACTIONS -from psutil.tests import HAS_BATTERY -from psutil.tests import IS_64BIT -from psutil.tests import PYPY -from psutil.tests import TOLERANCE_DISK_USAGE -from psutil.tests import TOLERANCE_SYS_MEM -from psutil.tests import PsutilTestCase -from psutil.tests import pytest -from psutil.tests import retry_on_failure -from psutil.tests import sh -from psutil.tests import spawn_subproc -from psutil.tests import terminate - -if WINDOWS and not PYPY: - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - import win32api # requires "pip install pywin32" - import win32con - import win32process - import wmi # requires "pip install wmi" / "make install-pydeps-test" - -if WINDOWS: - from psutil._pswindows import convert_oserror - - -cext = psutil._psplatform.cext - - -@pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") -@pytest.mark.skipif(PYPY, reason="pywin32 not available on PYPY") -class WindowsTestCase(PsutilTestCase): - pass - - -def powershell(cmd): - """Currently not used, but available just in case. Usage: - - >>> powershell( - "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize") - """ - if not shutil.which("powershell.exe"): - return pytest.skip("powershell.exe not available") - cmdline = ( - "powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive " - f"-NoProfile -WindowStyle Hidden -Command \"{cmd}\"" # noqa: Q003 - ) - return sh(cmdline) - - -def wmic(path, what, converter=int): - """Currently not used, but available just in case. Usage: - - >>> wmic("Win32_OperatingSystem", "FreePhysicalMemory") - 2134124534 - """ - out = sh(f"wmic path {path} get {what}").strip() - data = "".join(out.splitlines()[1:]).strip() # get rid of the header - if converter is not None: - if "," in what: - return tuple(converter(x) for x in data.split()) - else: - return converter(data) - else: - return data - - -# =================================================================== -# System APIs -# =================================================================== - - -class TestCpuAPIs(WindowsTestCase): - @pytest.mark.skipif( - 'NUMBER_OF_PROCESSORS' not in os.environ, - reason="NUMBER_OF_PROCESSORS env var is not available", - ) - def test_cpu_count_vs_NUMBER_OF_PROCESSORS(self): - # Will likely fail on many-cores systems: - # https://stackoverflow.com/questions/31209256 - num_cpus = int(os.environ['NUMBER_OF_PROCESSORS']) - assert num_cpus == psutil.cpu_count() - - def test_cpu_count_vs_GetSystemInfo(self): - # Will likely fail on many-cores systems: - # https://stackoverflow.com/questions/31209256 - sys_value = win32api.GetSystemInfo()[5] - psutil_value = psutil.cpu_count() - assert sys_value == psutil_value - - def test_cpu_count_logical_vs_wmi(self): - w = wmi.WMI() - procs = sum( - proc.NumberOfLogicalProcessors for proc in w.Win32_Processor() - ) - assert psutil.cpu_count() == procs - - def test_cpu_count_cores_vs_wmi(self): - w = wmi.WMI() - cores = sum(proc.NumberOfCores for proc in w.Win32_Processor()) - assert psutil.cpu_count(logical=False) == cores - - def test_cpu_count_vs_cpu_times(self): - assert psutil.cpu_count() == len(psutil.cpu_times(percpu=True)) - - def test_cpu_freq(self): - w = wmi.WMI() - proc = w.Win32_Processor()[0] - assert proc.CurrentClockSpeed == psutil.cpu_freq().current - assert proc.MaxClockSpeed == psutil.cpu_freq().max - - -class TestSystemAPIs(WindowsTestCase): - def test_nic_names(self): - out = sh('ipconfig /all') - nics = psutil.net_io_counters(pernic=True).keys() - for nic in nics: - if "pseudo-interface" in nic.replace(' ', '-').lower(): - continue - if nic not in out: - return pytest.fail( - f"{nic!r} nic wasn't found in 'ipconfig /all' output" - ) - - def test_total_phymem(self): - w = wmi.WMI().Win32_ComputerSystem()[0] - assert int(w.TotalPhysicalMemory) == psutil.virtual_memory().total - - def test_free_phymem(self): - w = wmi.WMI().Win32_PerfRawData_PerfOS_Memory()[0] - assert ( - abs(int(w.AvailableBytes) - psutil.virtual_memory().free) - < TOLERANCE_SYS_MEM - ) - - def test_total_swapmem(self): - w = wmi.WMI().Win32_PerfRawData_PerfOS_Memory()[0] - assert ( - int(w.CommitLimit) - psutil.virtual_memory().total - == psutil.swap_memory().total - ) - if psutil.swap_memory().total == 0: - assert psutil.swap_memory().free == 0 - assert psutil.swap_memory().used == 0 - - def test_percent_swapmem(self): - if psutil.swap_memory().total > 0: - w = wmi.WMI().Win32_PerfRawData_PerfOS_PagingFile(Name="_Total")[0] - # calculate swap usage to percent - percentSwap = int(w.PercentUsage) * 100 / int(w.PercentUsage_Base) - # exact percent may change but should be reasonable - # assert within +/- 5% and between 0 and 100% - assert psutil.swap_memory().percent >= 0 - assert abs(psutil.swap_memory().percent - percentSwap) < 5 - assert psutil.swap_memory().percent <= 100 - - # @pytest.mark.skipif(wmi is None, reason="wmi module is not installed") - # def test__UPTIME(self): - # # _UPTIME constant is not public but it is used internally - # # as value to return for pid 0 creation time. - # # WMI behaves the same. - # w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - # p = psutil.Process(0) - # wmic_create = str(w.CreationDate.split('.')[0]) - # psutil_create = time.strftime("%Y%m%d%H%M%S", - # time.localtime(p.create_time())) - - # Note: this test is not very reliable - @retry_on_failure() - def test_pids(self): - # Note: this test might fail if the OS is starting/killing - # other processes in the meantime - w = wmi.WMI().Win32_Process() - wmi_pids = {x.ProcessId for x in w} - psutil_pids = set(psutil.pids()) - assert wmi_pids == psutil_pids - - @retry_on_failure() - def test_disks(self): - ps_parts = psutil.disk_partitions(all=True) - wmi_parts = wmi.WMI().Win32_LogicalDisk() - for ps_part in ps_parts: - for wmi_part in wmi_parts: - if ps_part.device.replace('\\', '') == wmi_part.DeviceID: - if not ps_part.mountpoint: - # this is usually a CD-ROM with no disk inserted - break - if 'cdrom' in ps_part.opts: - break - if ps_part.mountpoint.startswith('A:'): - break # floppy - try: - usage = psutil.disk_usage(ps_part.mountpoint) - except FileNotFoundError: - # usually this is the floppy - break - assert usage.total == int(wmi_part.Size) - wmi_free = int(wmi_part.FreeSpace) - assert usage.free == wmi_free - # 10 MB tolerance - if abs(usage.free - wmi_free) > 10 * 1024 * 1024: - return pytest.fail( - f"psutil={usage.free}, wmi={wmi_free}" - ) - break - else: - return pytest.fail(f"can't find partition {ps_part!r}") - - @retry_on_failure() - def test_disk_usage(self): - for disk in psutil.disk_partitions(): - if 'cdrom' in disk.opts: - continue - sys_value = win32api.GetDiskFreeSpaceEx(disk.mountpoint) - psutil_value = psutil.disk_usage(disk.mountpoint) - assert abs(sys_value[0] - psutil_value.free) < TOLERANCE_DISK_USAGE - assert ( - abs(sys_value[1] - psutil_value.total) < TOLERANCE_DISK_USAGE - ) - assert psutil_value.used == psutil_value.total - psutil_value.free - - def test_disk_partitions(self): - sys_value = [ - x + '\\' - for x in win32api.GetLogicalDriveStrings().split("\\\x00") - if x and not x.startswith('A:') - ] - psutil_value = [ - x.mountpoint - for x in psutil.disk_partitions(all=True) - if not x.mountpoint.startswith('A:') - ] - assert sys_value == psutil_value - - def test_convert_dos_path_drive(self): - winpath = 'C:\\Windows\\Temp' - driveletter = 'C:' - # Mocked NT device path for C: - devicepath = '\\Device\\HarddiskVolume1' - - # Path returned by RtlDosPathNameToNtPathName - ntpath1 = '\\??\\C:\\Windows\\Temp' - # Mocked normalized NT path - ntpath2 = '\\Device\\HarddiskVolume1\\Windows\\Temp' - - devices = {devicepath: driveletter} - - with mock.patch( - 'psutil._pswindows.cext.QueryDosDevice', side_effect=devices.get - ) as m: - assert psutil._pswindows.convert_dos_path(ntpath1) == winpath - assert psutil._pswindows.convert_dos_path(ntpath2) == winpath - assert m.called - - def test_convert_dos_path_unc(self): - # UNC path - winpath = '\\\\localhost\\C$\\Windows\\Temp' - # Path returned by RtlDosPathNameToNtPathName - ntpath1 = '\\??\\UNC\\localhost\\C$\\Windows\\Temp' - # Normalized NT path - ntpath2 = '\\Device\\Mup\\localhost\\C$\\Windows\\Temp' - - assert psutil._pswindows.convert_dos_path(winpath) == winpath - assert psutil._pswindows.convert_dos_path(ntpath1) == winpath - assert psutil._pswindows.convert_dos_path(ntpath2) == winpath - - def test_net_if_stats(self): - ps_names = set(cext.net_if_stats()) - wmi_adapters = wmi.WMI().Win32_NetworkAdapter() - wmi_names = set() - for wmi_adapter in wmi_adapters: - wmi_names.add(wmi_adapter.Name) - wmi_names.add(wmi_adapter.NetConnectionID) - assert ( - ps_names & wmi_names - ), f"no common entries in {ps_names}, {wmi_names}" - - def test_boot_time(self): - wmi_os = wmi.WMI().Win32_OperatingSystem() - wmi_btime_str = wmi_os[0].LastBootUpTime.split('.')[0] - wmi_btime_dt = datetime.datetime.strptime( - wmi_btime_str, "%Y%m%d%H%M%S" - ) - psutil_dt = datetime.datetime.fromtimestamp(psutil.boot_time()) - diff = abs((wmi_btime_dt - psutil_dt).total_seconds()) - assert diff <= 5, (psutil_dt, wmi_btime_dt) - - def test_uptime(self): - # ...against GetTickCount64() (Windows < 7, does not include - # time spent during suspend / hybernate). - ms = ctypes.windll.kernel32.GetTickCount64() - secs = ms / 1000.0 - assert abs(cext.uptime() - secs) < 0.5 - - -# =================================================================== -# sensors_battery() -# =================================================================== - - -class TestSensorsBattery(WindowsTestCase): - def test_has_battery(self): - if win32api.GetPwrCapabilities()['SystemBatteriesPresent']: - assert psutil.sensors_battery() is not None - else: - assert psutil.sensors_battery() is None - - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_percent(self): - w = wmi.WMI() - battery_wmi = w.query('select * from Win32_Battery')[0] - battery_psutil = psutil.sensors_battery() - assert ( - abs(battery_psutil.percent - battery_wmi.EstimatedChargeRemaining) - < 1 - ) - - @pytest.mark.skipif(not HAS_BATTERY, reason="no battery") - def test_power_plugged(self): - w = wmi.WMI() - battery_wmi = w.query('select * from Win32_Battery')[0] - battery_psutil = psutil.sensors_battery() - # Status codes: - # https://msdn.microsoft.com/en-us/library/aa394074(v=vs.85).aspx - assert battery_psutil.power_plugged == (battery_wmi.BatteryStatus == 2) - - def test_emulate_no_battery(self): - with mock.patch( - "psutil._pswindows.cext.sensors_battery", - return_value=(0, 128, 0, 0), - ) as m: - assert psutil.sensors_battery() is None - assert m.called - - def test_emulate_power_connected(self): - with mock.patch( - "psutil._pswindows.cext.sensors_battery", return_value=(1, 0, 0, 0) - ) as m: - assert ( - psutil.sensors_battery().secsleft - == psutil.POWER_TIME_UNLIMITED - ) - assert m.called - - def test_emulate_power_charging(self): - with mock.patch( - "psutil._pswindows.cext.sensors_battery", return_value=(0, 8, 0, 0) - ) as m: - assert ( - psutil.sensors_battery().secsleft - == psutil.POWER_TIME_UNLIMITED - ) - assert m.called - - def test_emulate_secs_left_unknown(self): - with mock.patch( - "psutil._pswindows.cext.sensors_battery", - return_value=(0, 0, 0, -1), - ) as m: - assert ( - psutil.sensors_battery().secsleft == psutil.POWER_TIME_UNKNOWN - ) - assert m.called - - -# =================================================================== -# Process APIs -# =================================================================== - - -class TestProcess(WindowsTestCase): - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - def test_issue_24(self): - p = psutil.Process(0) - with pytest.raises(psutil.AccessDenied): - p.kill() - - def test_special_pid(self): - p = psutil.Process(4) - assert p.name() == 'System' - # use __str__ to access all common Process properties to check - # that nothing strange happens - str(p) - p.username() - assert p.create_time() >= 0.0 - try: - rss, _vms = p.memory_info()[:2] - except psutil.AccessDenied: - # expected on Windows Vista and Windows 7 - if platform.uname()[1] not in {'vista', 'win-7', 'win7'}: - raise - else: - assert rss > 0 - - def test_send_signal(self): - p = psutil.Process(self.pid) - with pytest.raises(ValueError): - p.send_signal(signal.SIGINT) - - def test_num_handles_increment(self): - p = psutil.Process(os.getpid()) - before = p.num_handles() - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, os.getpid() - ) - after = p.num_handles() - assert after == before + 1 - win32api.CloseHandle(handle) - assert p.num_handles() == before - - def test_ctrl_signals(self): - p = psutil.Process(self.spawn_subproc().pid) - p.send_signal(signal.CTRL_C_EVENT) - p.send_signal(signal.CTRL_BREAK_EVENT) - p.kill() - p.wait() - with pytest.raises(psutil.NoSuchProcess): - p.send_signal(signal.CTRL_C_EVENT) - with pytest.raises(psutil.NoSuchProcess): - p.send_signal(signal.CTRL_BREAK_EVENT) - - def test_username(self): - name = win32api.GetUserNameEx(win32con.NameSamCompatible) - if name.endswith('$'): - # When running as a service account (most likely to be - # NetworkService), these user name calculations don't produce the - # same result, causing the test to fail. - return pytest.skip('running as service account') - assert psutil.Process().username() == name - - def test_cmdline(self): - sys_value = re.sub(r"[ ]+", " ", win32api.GetCommandLine()).strip() - psutil_value = ' '.join(psutil.Process().cmdline()) - # The PyWin32 command line may retain quotes around argv[0] if they - # were used unnecessarily, while psutil will omit them. So remove - # the first 2 quotes from sys_value if not in psutil_value. - # A path to an executable will not contain quotes, so this is safe. - sys_value = sys_value.replace('"', "") - psutil_value = psutil_value.replace('"', "") - assert sys_value == psutil_value - - # XXX - occasional failures - - # def test_cpu_times(self): - # handle = win32api.OpenProcess( - # win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, os.getpid() - # ) - # self.addCleanup(win32api.CloseHandle, handle) - # a = psutil.Process().cpu_times() - # b = win32process.GetProcessTimes(handle) - # assert abs(a.user - b['UserTime'] / 10000000.0) < 0.2 - # assert abs(a.user - b['KernelTime'] / 10000000.0) < 0.2 - - def test_nice(self): - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, os.getpid() - ) - self.addCleanup(win32api.CloseHandle, handle) - sys_value = win32process.GetPriorityClass(handle) - psutil_value = psutil.Process().nice() - assert psutil_value == sys_value - - def test_memory_info(self): - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, self.pid - ) - self.addCleanup(win32api.CloseHandle, handle) - sys_value = win32process.GetProcessMemoryInfo(handle) - psutil_value = psutil.Process(self.pid).memory_info() - assert sys_value['PeakWorkingSetSize'] == psutil_value.peak_wset - assert sys_value['WorkingSetSize'] == psutil_value.wset - assert ( - sys_value['QuotaPeakPagedPoolUsage'] - == psutil_value.peak_paged_pool - ) - assert sys_value['QuotaPagedPoolUsage'] == psutil_value.paged_pool - assert ( - sys_value['QuotaPeakNonPagedPoolUsage'] - == psutil_value.peak_nonpaged_pool - ) - assert ( - sys_value['QuotaNonPagedPoolUsage'] == psutil_value.nonpaged_pool - ) - assert sys_value['PagefileUsage'] == psutil_value.pagefile - assert sys_value['PeakPagefileUsage'] == psutil_value.peak_pagefile - - assert psutil_value.rss == psutil_value.wset - assert psutil_value.vms == psutil_value.pagefile - - def test_wait(self): - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, self.pid - ) - self.addCleanup(win32api.CloseHandle, handle) - p = psutil.Process(self.pid) - p.terminate() - psutil_value = p.wait() - sys_value = win32process.GetExitCodeProcess(handle) - assert psutil_value == sys_value - - def test_cpu_affinity(self): - def from_bitmask(x): - return [i for i in range(64) if (1 << i) & x] - - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, self.pid - ) - self.addCleanup(win32api.CloseHandle, handle) - sys_value = from_bitmask( - win32process.GetProcessAffinityMask(handle)[0] - ) - psutil_value = psutil.Process(self.pid).cpu_affinity() - assert psutil_value == sys_value - - def test_io_counters(self): - handle = win32api.OpenProcess( - win32con.PROCESS_QUERY_INFORMATION, win32con.FALSE, os.getpid() - ) - self.addCleanup(win32api.CloseHandle, handle) - sys_value = win32process.GetProcessIoCounters(handle) - psutil_value = psutil.Process().io_counters() - assert psutil_value.read_count == sys_value['ReadOperationCount'] - assert psutil_value.write_count == sys_value['WriteOperationCount'] - assert psutil_value.read_bytes == sys_value['ReadTransferCount'] - assert psutil_value.write_bytes == sys_value['WriteTransferCount'] - assert psutil_value.other_count == sys_value['OtherOperationCount'] - assert psutil_value.other_bytes == sys_value['OtherTransferCount'] - - def test_num_handles(self): - import ctypes - import ctypes.wintypes - - PROCESS_QUERY_INFORMATION = 0x400 - handle = ctypes.windll.kernel32.OpenProcess( - PROCESS_QUERY_INFORMATION, 0, self.pid - ) - self.addCleanup(ctypes.windll.kernel32.CloseHandle, handle) - - hndcnt = ctypes.wintypes.DWORD() - ctypes.windll.kernel32.GetProcessHandleCount( - handle, ctypes.byref(hndcnt) - ) - sys_value = hndcnt.value - psutil_value = psutil.Process(self.pid).num_handles() - assert psutil_value == sys_value - - def test_error_partial_copy(self): - # https://github.com/giampaolo/psutil/issues/875 - exc = OSError() - exc.winerror = 299 - with mock.patch("psutil._psplatform.cext.proc_cwd", side_effect=exc): - with mock.patch("time.sleep") as m: - p = psutil.Process() - with pytest.raises(psutil.AccessDenied): - p.cwd() - assert m.call_count >= 5 - - def test_exe(self): - # NtQuerySystemInformation succeeds if process is gone. Make sure - # it raises NSP for a non existent pid. - pid = psutil.pids()[-1] + 99999 - proc = psutil._psplatform.Process(pid) - with pytest.raises(psutil.NoSuchProcess): - proc.exe() - - -class TestProcessWMI(WindowsTestCase): - """Compare Process API results with WMI.""" - - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - def test_name(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - assert p.name() == w.Caption - - # This fail on github because using virtualenv for test environment - @pytest.mark.skipif( - GITHUB_ACTIONS, reason="unreliable path on GITHUB_ACTIONS" - ) - def test_exe(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - # Note: wmi reports the exe as a lower case string. - # Being Windows paths case-insensitive we ignore that. - assert p.exe().lower() == w.ExecutablePath.lower() - - def test_cmdline(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - assert ' '.join(p.cmdline()) == w.CommandLine.replace('"', '') - - def test_username(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - domain, _, username = w.GetOwner() - username = f"{domain}\\{username}" - assert p.username() == username - - @retry_on_failure() - def test_memory_rss(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - rss = p.memory_info().rss - assert rss == int(w.WorkingSetSize) - - @retry_on_failure() - def test_memory_vms(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - vms = p.memory_info().vms - # http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx - # ...claims that PageFileUsage is represented in Kilo - # bytes but funnily enough on certain platforms bytes are - # returned instead. - wmi_usage = int(w.PageFileUsage) - if vms not in {wmi_usage, wmi_usage * 1024}: - return pytest.fail(f"wmi={wmi_usage}, psutil={vms}") - - def test_create_time(self): - w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0] - p = psutil.Process(self.pid) - wmic_create = str(w.CreationDate.split('.')[0]) - psutil_create = time.strftime( - "%Y%m%d%H%M%S", time.localtime(p.create_time()) - ) - assert wmic_create == psutil_create - - -# --- - - -@pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") -class TestDualProcessImplementation(PsutilTestCase): - """Certain APIs on Windows have 2 internal implementations, one - based on documented Windows APIs, another one based - NtQuerySystemInformation() which gets called as fallback in - case the first fails because of limited permission error. - Here we test that the two methods return the exact same value, - see: - https://github.com/giampaolo/psutil/issues/304. - """ - - @classmethod - def setUpClass(cls): - cls.pid = spawn_subproc().pid - - @classmethod - def tearDownClass(cls): - terminate(cls.pid) - - def test_memory_info(self): - mem_1 = psutil.Process(self.pid).memory_info() - with mock.patch( - "psutil._psplatform.cext.proc_memory_info", - side_effect=PermissionError, - ) as fun: - mem_2 = psutil.Process(self.pid).memory_info() - assert len(mem_1) == len(mem_2) - for i in range(len(mem_1)): - assert mem_1[i] >= 0 - assert mem_2[i] >= 0 - assert abs(mem_1[i] - mem_2[i]) < 512 - assert fun.called - - def test_create_time(self): - ctime = psutil.Process(self.pid).create_time() - with mock.patch( - "psutil._psplatform.cext.proc_times", - side_effect=PermissionError, - ) as fun: - assert psutil.Process(self.pid).create_time() == ctime - assert fun.called - - def test_cpu_times(self): - cpu_times_1 = psutil.Process(self.pid).cpu_times() - with mock.patch( - "psutil._psplatform.cext.proc_times", - side_effect=PermissionError, - ) as fun: - cpu_times_2 = psutil.Process(self.pid).cpu_times() - assert fun.called - assert abs(cpu_times_1.user - cpu_times_2.user) < 0.01 - assert abs(cpu_times_1.system - cpu_times_2.system) < 0.01 - - def test_io_counters(self): - io_counters_1 = psutil.Process(self.pid).io_counters() - with mock.patch( - "psutil._psplatform.cext.proc_io_counters", - side_effect=PermissionError, - ) as fun: - io_counters_2 = psutil.Process(self.pid).io_counters() - for i in range(len(io_counters_1)): - assert abs(io_counters_1[i] - io_counters_2[i]) < 5 - assert fun.called - - def test_num_handles(self): - num_handles = psutil.Process(self.pid).num_handles() - with mock.patch( - "psutil._psplatform.cext.proc_num_handles", - side_effect=PermissionError, - ) as fun: - assert psutil.Process(self.pid).num_handles() == num_handles - assert fun.called - - def test_cmdline(self): - for pid in psutil.pids(): - try: - a = cext.proc_cmdline(pid, use_peb=True) - b = cext.proc_cmdline(pid, use_peb=False) - except OSError as err: - err = convert_oserror(err) - if not isinstance( - err, (psutil.AccessDenied, psutil.NoSuchProcess) - ): - raise - else: - assert a == b - - -@pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") -class RemoteProcessTestCase(PsutilTestCase): - """Certain functions require calling ReadProcessMemory. - This trivially works when called on the current process. - Check that this works on other processes, especially when they - have a different bitness. - """ - - @staticmethod - def find_other_interpreter(): - # find a python interpreter that is of the opposite bitness from us - code = "import sys; sys.stdout.write(str(sys.maxsize > 2**32))" - - # XXX: a different and probably more stable approach might be to access - # the registry but accessing 64 bit paths from a 32 bit process - for filename in glob.glob(r"C:\Python*\python.exe"): - proc = subprocess.Popen( - args=[filename, "-c", code], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - output, _ = proc.communicate() - proc.wait() - if output == str(not IS_64BIT): - return filename - - test_args = ["-c", "import sys; sys.stdin.read()"] - - def setUp(self): - super().setUp() - - other_python = self.find_other_interpreter() - if other_python is None: - return pytest.skip( - "could not find interpreter with opposite bitness" - ) - if IS_64BIT: - self.python64 = sys.executable - self.python32 = other_python - else: - self.python64 = other_python - self.python32 = sys.executable - - env = os.environ.copy() - env["THINK_OF_A_NUMBER"] = str(os.getpid()) - self.proc32 = self.spawn_subproc( - [self.python32] + self.test_args, env=env, stdin=subprocess.PIPE - ) - self.proc64 = self.spawn_subproc( - [self.python64] + self.test_args, env=env, stdin=subprocess.PIPE - ) - - def tearDown(self): - super().tearDown() - self.proc32.communicate() - self.proc64.communicate() - - def test_cmdline_32(self): - p = psutil.Process(self.proc32.pid) - assert len(p.cmdline()) == 3 - assert p.cmdline()[1:] == self.test_args - - def test_cmdline_64(self): - p = psutil.Process(self.proc64.pid) - assert len(p.cmdline()) == 3 - assert p.cmdline()[1:] == self.test_args - - def test_cwd_32(self): - p = psutil.Process(self.proc32.pid) - assert p.cwd() == os.getcwd() - - def test_cwd_64(self): - p = psutil.Process(self.proc64.pid) - assert p.cwd() == os.getcwd() - - def test_environ_32(self): - p = psutil.Process(self.proc32.pid) - e = p.environ() - assert "THINK_OF_A_NUMBER" in e - assert e["THINK_OF_A_NUMBER"] == str(os.getpid()) - - def test_environ_64(self): - p = psutil.Process(self.proc64.pid) - try: - p.environ() - except psutil.AccessDenied: - pass - - -# =================================================================== -# Windows services -# =================================================================== - - -@pytest.mark.skipif(not WINDOWS, reason="WINDOWS only") -class TestServices(PsutilTestCase): - def test_win_service_iter(self): - valid_statuses = { - "running", - "paused", - "start", - "pause", - "continue", - "stop", - "stopped", - } - valid_start_types = {"automatic", "manual", "disabled"} - valid_statuses = { - "running", - "paused", - "start_pending", - "pause_pending", - "continue_pending", - "stop_pending", - "stopped", - } - for serv in psutil.win_service_iter(): - if serv.name() == "WaaSMedicSvc": - # known issue in Windows 11 reading the description - # https://learn.microsoft.com/en-us/answers/questions/1320388/in-windows-11-version-22h2-there-it-shows-(failed - # https://github.com/giampaolo/psutil/issues/2383 - continue - data = serv.as_dict() - assert isinstance(data['name'], str) - assert data['name'].strip() - assert isinstance(data['display_name'], str) - assert isinstance(data['username'], str) - assert data['status'] in valid_statuses - if data['pid'] is not None: - psutil.Process(data['pid']) - assert isinstance(data['binpath'], str) - assert isinstance(data['username'], str) - assert isinstance(data['start_type'], str) - assert data['start_type'] in valid_start_types - assert data['status'] in valid_statuses - assert isinstance(data['description'], str) - pid = serv.pid() - if pid is not None: - p = psutil.Process(pid) - assert p.is_running() - # win_service_get - s = psutil.win_service_get(serv.name()) - # test __eq__ - assert serv == s - - def test_win_service_get(self): - ERROR_SERVICE_DOES_NOT_EXIST = ( - psutil._psplatform.cext.ERROR_SERVICE_DOES_NOT_EXIST - ) - ERROR_ACCESS_DENIED = psutil._psplatform.cext.ERROR_ACCESS_DENIED - - name = next(psutil.win_service_iter()).name() - with pytest.raises(psutil.NoSuchProcess) as cm: - psutil.win_service_get(name + '???') - assert cm.value.name == name + '???' - - # test NoSuchProcess - service = psutil.win_service_get(name) - exc = OSError(0, "msg", 0) - exc.winerror = ERROR_SERVICE_DOES_NOT_EXIST - with mock.patch( - "psutil._psplatform.cext.winservice_query_status", side_effect=exc - ): - with pytest.raises(psutil.NoSuchProcess): - service.status() - with mock.patch( - "psutil._psplatform.cext.winservice_query_config", side_effect=exc - ): - with pytest.raises(psutil.NoSuchProcess): - service.username() - - # test AccessDenied - exc = OSError(0, "msg", 0) - exc.winerror = ERROR_ACCESS_DENIED - with mock.patch( - "psutil._psplatform.cext.winservice_query_status", side_effect=exc - ): - with pytest.raises(psutil.AccessDenied): - service.status() - with mock.patch( - "psutil._psplatform.cext.winservice_query_config", side_effect=exc - ): - with pytest.raises(psutil.AccessDenied): - service.username() - - # test __str__ and __repr__ - assert service.name() in str(service) - assert service.display_name() in str(service) - assert service.name() in repr(service) - assert service.display_name() in repr(service) diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA deleted file mode 100644 index b94a88b..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/METADATA +++ /dev/null @@ -1,244 +0,0 @@ -Metadata-Version: 2.4 -Name: pycparser -Version: 3.0 -Summary: C parser in Python -Author-email: Eli Bendersky -Maintainer-email: Eli Bendersky -License-Expression: BSD-3-Clause -Project-URL: Homepage, https://github.com/eliben/pycparser -Classifier: Development Status :: 5 - Production/Stable -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Requires-Python: >=3.10 -Description-Content-Type: text/x-rst -License-File: LICENSE -Dynamic: license-file - -=============== -pycparser v3.00 -=============== - - -.. image:: https://github.com/eliben/pycparser/workflows/pycparser-tests/badge.svg - :align: center - :target: https://github.com/eliben/pycparser/actions - ----- - -.. contents:: - :backlinks: none - -.. sectnum:: - -Introduction -============ - -What is pycparser? ------------------- - -**pycparser** is a parser for the C language, written in pure Python. It is a -module designed to be easily integrated into applications that need to parse -C source code. - -What is it good for? --------------------- - -Anything that needs C code to be parsed. The following are some uses for -**pycparser**, taken from real user reports: - -* C code obfuscator -* Front-end for various specialized C compilers -* Static code checker -* Automatic unit-test discovery -* Adding specialized extensions to the C language - -One of the most popular uses of **pycparser** is in the `cffi -`_ library, which uses it to parse the -declarations of C functions and types in order to auto-generate FFIs. - -**pycparser** is unique in the sense that it's written in pure Python - a very -high level language that's easy to experiment with and tweak. To people familiar -with Lex and Yacc, **pycparser**'s code will be simple to understand. It also -has no external dependencies (except for a Python interpreter), making it very -simple to install and deploy. - -Which version of C does pycparser support? ------------------------------------------- - -**pycparser** aims to support the full C99 language (according to the standard -ISO/IEC 9899). Some features from C11 are also supported, and patches to support -more are welcome. - -**pycparser** supports very few GCC extensions, but it's fairly easy to set -things up so that it parses code with a lot of GCC-isms successfully. See the -`FAQ `_ for more details. - -What grammar does pycparser follow? ------------------------------------ - -**pycparser** very closely follows the C grammar provided in Annex A of the C99 -standard (ISO/IEC 9899). - -How is pycparser licensed? --------------------------- - -`BSD license `_. - -Contact details ---------------- - -For reporting problems with **pycparser** or submitting feature requests, please -open an `issue `_, or submit a -pull request. - - -Installing -========== - -Prerequisites -------------- - -**pycparser** is being tested with modern versions of Python on -Linux, macOS and Windows. See `the CI dashboard `__ -for details. - -**pycparser** has no external dependencies. - -Installation process --------------------- - -The recommended way to install **pycparser** is with ``pip``:: - - > pip install pycparser - -Using -===== - -Interaction with the C preprocessor ------------------------------------ - -In order to be compilable, C code must be preprocessed by the C preprocessor - -``cpp``. A compatible ``cpp`` handles preprocessing directives like ``#include`` and -``#define``, removes comments, and performs other minor tasks that prepare the C -code for compilation. - -For all but the most trivial snippets of C code **pycparser**, like a C -compiler, must receive preprocessed C code in order to function correctly. If -you import the top-level ``parse_file`` function from the **pycparser** package, -it will interact with ``cpp`` for you, as long as it's in your PATH, or you -provide a path to it. - -Note also that you can use ``gcc -E`` or ``clang -E`` instead of ``cpp``. See -the ``using_gcc_E_libc.py`` example for more details. Windows users can download -and install a binary build of Clang for Windows `from this website -`_. - -What about the standard C library headers? ------------------------------------------- - -C code almost always ``#include``\s various header files from the standard C -library, like ``stdio.h``. While (with some effort) **pycparser** can be made to -parse the standard headers from any C compiler, it's much simpler to use the -provided "fake" standard includes for C11 in ``utils/fake_libc_include``. These -are standard C header files that contain only the bare necessities to allow -valid parsing of the files that use them. As a bonus, since they're minimal, it -can significantly improve the performance of parsing large C files. - -The key point to understand here is that **pycparser** doesn't really care about -the semantics of types. It only needs to know whether some token encountered in -the source is a previously defined type. This is essential in order to be able -to parse C correctly. - -See `this blog post -`_ -for more details. - -Note that the fake headers are not included in the ``pip`` package nor installed -via the package build (`#224 `_). - -Basic usage ------------ - -Take a look at the |examples|_ directory of the distribution for a few examples -of using **pycparser**. These should be enough to get you started. Please note -that most realistic C code samples would require running the C preprocessor -before passing the code to **pycparser**; see the previous sections for more -details. - -.. |examples| replace:: ``examples`` -.. _examples: examples - - -Advanced usage --------------- - -The public interface of **pycparser** is well documented with comments in -``pycparser/c_parser.py``. For a detailed overview of the various AST nodes -created by the parser, see ``pycparser/_c_ast.cfg``. - -There's also a `FAQ available here `_. -In any case, you can always drop me an `email `_ for help. - - -Modifying -========= - -There are a few points to keep in mind when modifying **pycparser**: - -* The code for **pycparser**'s AST nodes is automatically generated from a - configuration file - ``_c_ast.cfg``, by ``_ast_gen.py``. If you modify the AST - configuration, make sure to re-generate the code. This can be done by running - the ``_ast_gen.py`` script (from the repository root or the - ``pycparser`` directory). -* Read the docstring in the constructor of the ``CParser`` class for details - on configuration and compatibility arguments. - - -Package contents -================ - -Once you unzip the ``pycparser`` package, you'll see the following files and -directories: - -README.rst: - This README file. - -LICENSE: - The pycparser license - -setup.py: - Legacy installation script (build metadata lives in ``pyproject.toml``). - -pyproject.toml: - Package metadata and build configuration. - -examples/: - A directory with some examples of using **pycparser** - -pycparser/: - The **pycparser** module source code. - -tests/: - Unit tests. - -utils/fake_libc_include: - Minimal standard C library include files that should allow to parse any C code. - Note that these headers now include C11 code, so they may not work when the - preprocessor is configured to an earlier C standard (like ``-std=c99``). - -utils/internal/: - Internal utilities for my own use. You probably don't need them. - - -Contributors -============ - -Some people have contributed to **pycparser** by opening issues on bugs they've -found and/or submitting patches. The list of contributors is in the CONTRIBUTORS -file in the source distribution. After **pycparser** moved to Github I stopped -updating this list because Github does a much better job at tracking -contributions. diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/RECORD deleted file mode 100644 index e81dd9d..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/RECORD +++ /dev/null @@ -1,21 +0,0 @@ -pycparser-3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pycparser-3.0.dist-info/METADATA,sha256=9UemCwq1TMLyQiE9H4eWCtgN991d_rmNF6RE1Iv7a5M,8229 -pycparser-3.0.dist-info/RECORD,, -pycparser-3.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92 -pycparser-3.0.dist-info/licenses/LICENSE,sha256=DIRjmTaep23de1xE_m0WSXQV_PAV9cu1CMJL-YuBxbE,1543 -pycparser-3.0.dist-info/top_level.txt,sha256=c-lPcS74L_8KoH7IE6PQF5ofyirRQNV4VhkbSFIPeWM,10 -pycparser/__init__.py,sha256=phViRyAuUmgqE4kNmaCqpm5WVEBIvzUSFapBv4XX3xo,2829 -pycparser/__pycache__/__init__.cpython-312.pyc,, -pycparser/__pycache__/_ast_gen.cpython-312.pyc,, -pycparser/__pycache__/ast_transforms.cpython-312.pyc,, -pycparser/__pycache__/c_ast.cpython-312.pyc,, -pycparser/__pycache__/c_generator.cpython-312.pyc,, -pycparser/__pycache__/c_lexer.cpython-312.pyc,, -pycparser/__pycache__/c_parser.cpython-312.pyc,, -pycparser/_ast_gen.py,sha256=ExH5Ym4pk7dQPEIkQr9RJim5feztdBQwSBPvpvE-5BM,11292 -pycparser/_c_ast.cfg,sha256=ld5ezE9yzIJFIVAUfw7ezJSlMi4nXKNCzfmqjOyQTNo,4255 -pycparser/ast_transforms.py,sha256=XwMsarc5aDddNWgIiKm4-jOWMRYib96yNQUo0_u28WA,5899 -pycparser/c_ast.py,sha256=uwkcZWHfXDQIw6WDvCL17iWM_-0R-URDqEMmPjXLOAc,32954 -pycparser/c_generator.py,sha256=RVKJPguv2CvovHHSfQkqimckUr9wGU9PofxCGj251QA,20661 -pycparser/c_lexer.py,sha256=B1VoqbYhPWkOJJWCem4OY4zj0IxrPktBZZFe2Y87kUg,25155 -pycparser/c_parser.py,sha256=3FBKGLjjlC3v8afwD_cnMR67ImoYIy73a4WKQR6hX7g,89798 diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/WHEEL deleted file mode 100644 index fbbd86c..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (80.10.1) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/licenses/LICENSE deleted file mode 100644 index bee14a4..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -pycparser -- A C parser in Python - -Copyright (c) 2008-2022, Eli Bendersky -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the copyright holder nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/top_level.txt deleted file mode 100644 index dc1c9e1..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser-3.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pycparser diff --git a/myenv/lib/python3.12/site-packages/pycparser/__init__.py b/myenv/lib/python3.12/site-packages/pycparser/__init__.py deleted file mode 100644 index 0606c03..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/__init__.py +++ /dev/null @@ -1,99 +0,0 @@ -# ----------------------------------------------------------------- -# pycparser: __init__.py -# -# This package file exports some convenience functions for -# interacting with pycparser -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ----------------------------------------------------------------- -__all__ = ["c_lexer", "c_parser", "c_ast"] -__version__ = "3.00" - -import io -from subprocess import check_output - -from . import c_parser - -CParser = c_parser.CParser - - -def preprocess_file(filename, cpp_path="cpp", cpp_args=""): - """Preprocess a file using cpp. - - filename: - Name of the file you want to preprocess. - - cpp_path: - cpp_args: - Refer to the documentation of parse_file for the meaning of these - arguments. - - When successful, returns the preprocessed file's contents. - Errors from cpp will be printed out. - """ - path_list = [cpp_path] - if isinstance(cpp_args, list): - path_list += cpp_args - elif cpp_args != "": - path_list += [cpp_args] - path_list += [filename] - - try: - # Note the use of universal_newlines to treat all newlines - # as \n for Python's purpose - text = check_output(path_list, universal_newlines=True) - except OSError as e: - raise RuntimeError( - "Unable to invoke 'cpp'. " - + "Make sure its path was passed correctly\n" - + f"Original error: {e}" - ) - - return text - - -def parse_file( - filename, use_cpp=False, cpp_path="cpp", cpp_args="", parser=None, encoding=None -): - """Parse a C file using pycparser. - - filename: - Name of the file you want to parse. - - use_cpp: - Set to True if you want to execute the C pre-processor - on the file prior to parsing it. - - cpp_path: - If use_cpp is True, this is the path to 'cpp' on your - system. If no path is provided, it attempts to just - execute 'cpp', so it must be in your PATH. - - cpp_args: - If use_cpp is True, set this to the command line arguments strings - to cpp. Be careful with quotes - it's best to pass a raw string - (r'') here. For example: - r'-I../utils/fake_libc_include' - If several arguments are required, pass a list of strings. - - encoding: - Encoding to use for the file to parse - - parser: - Optional parser object to be used instead of the default CParser - - When successful, an AST is returned. ParseError can be - thrown if the file doesn't parse successfully. - - Errors from cpp will be printed out. - """ - if use_cpp: - text = preprocess_file(filename, cpp_path, cpp_args) - else: - with io.open(filename, encoding=encoding) as f: - text = f.read() - - if parser is None: - parser = CParser() - return parser.parse(text, filename) diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 018dfef..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/_ast_gen.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/_ast_gen.cpython-312.pyc deleted file mode 100644 index fd6f48e..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/_ast_gen.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/ast_transforms.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/ast_transforms.cpython-312.pyc deleted file mode 100644 index 2dcaf68..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/ast_transforms.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_ast.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_ast.cpython-312.pyc deleted file mode 100644 index f9fd675..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_ast.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_generator.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_generator.cpython-312.pyc deleted file mode 100644 index c0175ee..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_generator.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_lexer.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_lexer.cpython-312.pyc deleted file mode 100644 index 38560bb..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_lexer.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_parser.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_parser.cpython-312.pyc deleted file mode 100644 index f732272..0000000 Binary files a/myenv/lib/python3.12/site-packages/pycparser/__pycache__/c_parser.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pycparser/_ast_gen.py b/myenv/lib/python3.12/site-packages/pycparser/_ast_gen.py deleted file mode 100644 index 6df0b6a..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/_ast_gen.py +++ /dev/null @@ -1,355 +0,0 @@ -# ----------------------------------------------------------------- -# _ast_gen.py -# -# Generates the AST Node classes from a specification given in -# a configuration file. This module can also be run as a script to -# regenerate c_ast.py from _c_ast.cfg (from the repo root or the -# pycparser/ directory). Use 'make check' to reformat the generated -# file after running this script. -# -# The design of this module was inspired by astgen.py from the -# Python 2.5 code-base. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ----------------------------------------------------------------- -from string import Template -import os -from typing import IO - - -class ASTCodeGenerator: - def __init__(self, cfg_filename="_c_ast.cfg"): - """Initialize the code generator from a configuration - file. - """ - self.cfg_filename = cfg_filename - self.node_cfg = [ - NodeCfg(name, contents) - for (name, contents) in self.parse_cfgfile(cfg_filename) - ] - - def generate(self, file: IO[str]) -> None: - """Generates the code into file, an open file buffer.""" - src = Template(_PROLOGUE_COMMENT).substitute(cfg_filename=self.cfg_filename) - - src += _PROLOGUE_CODE - for node_cfg in self.node_cfg: - src += node_cfg.generate_source() + "\n\n" - - file.write(src) - - def parse_cfgfile(self, filename): - """Parse the configuration file and yield pairs of - (name, contents) for each node. - """ - with open(filename, "r") as f: - for line in f: - line = line.strip() - if not line or line.startswith("#"): - continue - colon_i = line.find(":") - lbracket_i = line.find("[") - rbracket_i = line.find("]") - if colon_i < 1 or lbracket_i <= colon_i or rbracket_i <= lbracket_i: - raise RuntimeError(f"Invalid line in {filename}:\n{line}\n") - - name = line[:colon_i] - val = line[lbracket_i + 1 : rbracket_i] - vallist = [v.strip() for v in val.split(",")] if val else [] - yield name, vallist - - -class NodeCfg: - """Node configuration. - - name: node name - contents: a list of contents - attributes and child nodes - See comment at the top of the configuration file for details. - """ - - def __init__(self, name, contents): - self.name = name - self.all_entries = [] - self.attr = [] - self.child = [] - self.seq_child = [] - - for entry in contents: - clean_entry = entry.rstrip("*") - self.all_entries.append(clean_entry) - - if entry.endswith("**"): - self.seq_child.append(clean_entry) - elif entry.endswith("*"): - self.child.append(clean_entry) - else: - self.attr.append(entry) - - def generate_source(self): - src = self._gen_init() - src += "\n" + self._gen_children() - src += "\n" + self._gen_iter() - src += "\n" + self._gen_attr_names() - return src - - def _gen_init(self): - src = f"class {self.name}(Node):\n" - - if self.all_entries: - args = ", ".join(self.all_entries) - slots = ", ".join(f"'{e}'" for e in self.all_entries) - slots += ", 'coord', '__weakref__'" - arglist = f"(self, {args}, coord=None)" - else: - slots = "'coord', '__weakref__'" - arglist = "(self, coord=None)" - - src += f" __slots__ = ({slots})\n" - src += f" def __init__{arglist}:\n" - - for name in self.all_entries + ["coord"]: - src += f" self.{name} = {name}\n" - - return src - - def _gen_children(self): - src = " def children(self):\n" - - if self.all_entries: - src += " nodelist = []\n" - - for child in self.child: - src += f" if self.{child} is not None:\n" - src += f' nodelist.append(("{child}", self.{child}))\n' - - for seq_child in self.seq_child: - src += f" for i, child in enumerate(self.{seq_child} or []):\n" - src += f' nodelist.append((f"{seq_child}[{{i}}]", child))\n' - - src += " return tuple(nodelist)\n" - else: - src += " return ()\n" - - return src - - def _gen_iter(self): - src = " def __iter__(self):\n" - - if self.all_entries: - for child in self.child: - src += f" if self.{child} is not None:\n" - src += f" yield self.{child}\n" - - for seq_child in self.seq_child: - src += f" for child in (self.{seq_child} or []):\n" - src += " yield child\n" - - if not (self.child or self.seq_child): - # Empty generator - src += " return\n" + " yield\n" - else: - # Empty generator - src += " return\n" + " yield\n" - - return src - - def _gen_attr_names(self): - src = " attr_names = (" + "".join(f"{nm!r}, " for nm in self.attr) + ")" - return src - - -_PROLOGUE_COMMENT = r"""#----------------------------------------------------------------- -# ** ATTENTION ** -# This code was automatically generated from _c_ast.cfg -# -# Do not modify it directly. Modify the configuration file and -# run the generator again. -# ** ** *** ** ** -# -# pycparser: c_ast.py -# -# AST Node classes. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -#----------------------------------------------------------------- - -""" -_PROLOGUE_CODE = r''' -import sys -from typing import Any, ClassVar, IO, Optional - -def _repr(obj): - """ - Get the representation of an object, with dedicated pprint-like format for lists. - """ - if isinstance(obj, list): - return '[' + (',\n '.join((_repr(e).replace('\n', '\n ') for e in obj))) + '\n]' - else: - return repr(obj) - -class Node: - __slots__ = () - """ Abstract base class for AST nodes. - """ - attr_names: ClassVar[tuple[str, ...]] = () - coord: Optional[Any] - def __repr__(self): - """ Generates a python representation of the current node - """ - result = self.__class__.__name__ + '(' - - indent = '' - separator = '' - for name in self.__slots__[:-2]: - result += separator - result += indent - result += name + '=' + (_repr(getattr(self, name)).replace('\n', '\n ' + (' ' * (len(name) + len(self.__class__.__name__))))) - - separator = ',' - indent = '\n ' + (' ' * len(self.__class__.__name__)) - - result += indent + ')' - - return result - - def children(self): - """ A sequence of all children that are Nodes - """ - pass - - def show( - self, - buf: IO[str] = sys.stdout, - offset: int = 0, - attrnames: bool = False, - showemptyattrs: bool = True, - nodenames: bool = False, - showcoord: bool = False, - _my_node_name: Optional[str] = None, - ): - """ Pretty print the Node and all its attributes and - children (recursively) to a buffer. - - buf: - Open IO buffer into which the Node is printed. - - offset: - Initial offset (amount of leading spaces) - - attrnames: - True if you want to see the attribute names in - name=value pairs. False to only see the values. - - showemptyattrs: - False if you want to suppress printing empty attributes. - - nodenames: - True if you want to see the actual node names - within their parents. - - showcoord: - Do you want the coordinates of each Node to be - displayed. - """ - lead = ' ' * offset - if nodenames and _my_node_name is not None: - buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ') - else: - buf.write(lead + self.__class__.__name__+ ': ') - - if self.attr_names: - def is_empty(v): - v is None or (hasattr(v, '__len__') and len(v) == 0) - nvlist = [(n, getattr(self,n)) for n in self.attr_names \ - if showemptyattrs or not is_empty(getattr(self,n))] - if attrnames: - attrstr = ', '.join(f'{name}={value}' for name, value in nvlist) - else: - attrstr = ', '.join(f'{value}' for _, value in nvlist) - buf.write(attrstr) - - if showcoord: - buf.write(f' (at {self.coord})') - buf.write('\n') - - for (child_name, child) in self.children(): - child.show( - buf, - offset=offset + 2, - attrnames=attrnames, - showemptyattrs=showemptyattrs, - nodenames=nodenames, - showcoord=showcoord, - _my_node_name=child_name) - - -class NodeVisitor: - """ A base NodeVisitor class for visiting c_ast nodes. - Subclass it and define your own visit_XXX methods, where - XXX is the class name you want to visit with these - methods. - - For example: - - class ConstantVisitor(NodeVisitor): - def __init__(self): - self.values = [] - - def visit_Constant(self, node): - self.values.append(node.value) - - Creates a list of values of all the constant nodes - encountered below the given node. To use it: - - cv = ConstantVisitor() - cv.visit(node) - - Notes: - - * generic_visit() will be called for AST nodes for which - no visit_XXX method was defined. - * The children of nodes for which a visit_XXX was - defined will not be visited - if you need this, call - generic_visit() on the node. - You can use: - NodeVisitor.generic_visit(self, node) - * Modeled after Python's own AST visiting facilities - (the ast module of Python 3.0) - """ - - _method_cache = None - - def visit(self, node: Node): - """ Visit a node. - """ - - if self._method_cache is None: - self._method_cache = {} - - visitor = self._method_cache.get(node.__class__.__name__, None) - if visitor is None: - method = 'visit_' + node.__class__.__name__ - visitor = getattr(self, method, self.generic_visit) - self._method_cache[node.__class__.__name__] = visitor - - return visitor(node) - - def generic_visit(self, node: Node): - """ Called if no explicit visitor function exists for a - node. Implements preorder visiting of the node. - """ - for _, c in node.children(): - self.visit(c) - -''' - - -if __name__ == "__main__": - base_dir = os.path.dirname(os.path.abspath(__file__)) - cfg_path = os.path.join(base_dir, "_c_ast.cfg") - out_path = os.path.join(base_dir, "c_ast.py") - ast_gen = ASTCodeGenerator(cfg_path) - with open(out_path, "w") as out: - ast_gen.generate(out) diff --git a/myenv/lib/python3.12/site-packages/pycparser/_c_ast.cfg b/myenv/lib/python3.12/site-packages/pycparser/_c_ast.cfg deleted file mode 100644 index 0626533..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/_c_ast.cfg +++ /dev/null @@ -1,195 +0,0 @@ -#----------------------------------------------------------------- -# pycparser: _c_ast.cfg -# -# Defines the AST Node classes used in pycparser. -# -# Each entry is a Node sub-class name, listing the attributes -# and child nodes of the class: -# * - a child node -# ** - a sequence of child nodes -# - an attribute -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -#----------------------------------------------------------------- - -# ArrayDecl is a nested declaration of an array with the given type. -# dim: the dimension (for example, constant 42) -# dim_quals: list of dimension qualifiers, to support C99's allowing 'const' -# and 'static' within the array dimension in function declarations. -ArrayDecl: [type*, dim*, dim_quals] - -ArrayRef: [name*, subscript*] - -# op: =, +=, /= etc. -# -Assignment: [op, lvalue*, rvalue*] - -Alignas: [alignment*] - -BinaryOp: [op, left*, right*] - -Break: [] - -Case: [expr*, stmts**] - -Cast: [to_type*, expr*] - -# Compound statement in C99 is a list of block items (declarations or -# statements). -# -Compound: [block_items**] - -# Compound literal (anonymous aggregate) for C99. -# (type-name) {initializer_list} -# type: the typename -# init: InitList for the initializer list -# -CompoundLiteral: [type*, init*] - -# type: int, char, float, string, etc. -# -Constant: [type, value] - -Continue: [] - -# name: the variable being declared -# quals: list of qualifiers (const, volatile) -# funcspec: list function specifiers (i.e. inline in C99) -# storage: list of storage specifiers (extern, register, etc.) -# type: declaration type (probably nested with all the modifiers) -# init: initialization value, or None -# bitsize: bit field size, or None -# -Decl: [name, quals, align, storage, funcspec, type*, init*, bitsize*] - -DeclList: [decls**] - -Default: [stmts**] - -DoWhile: [cond*, stmt*] - -# Represents the ellipsis (...) parameter in a function -# declaration -# -EllipsisParam: [] - -# An empty statement (a semicolon ';' on its own) -# -EmptyStatement: [] - -# Enumeration type specifier -# name: an optional ID -# values: an EnumeratorList -# -Enum: [name, values*] - -# A name/value pair for enumeration values -# -Enumerator: [name, value*] - -# A list of enumerators -# -EnumeratorList: [enumerators**] - -# A list of expressions separated by the comma operator. -# -ExprList: [exprs**] - -# This is the top of the AST, representing a single C file (a -# translation unit in K&R jargon). It contains a list of -# "external-declaration"s, which is either declarations (Decl), -# Typedef or function definitions (FuncDef). -# -FileAST: [ext**] - -# for (init; cond; next) stmt -# -For: [init*, cond*, next*, stmt*] - -# name: Id -# args: ExprList -# -FuncCall: [name*, args*] - -# type (args) -# -FuncDecl: [args*, type*] - -# Function definition: a declarator for the function name and -# a body, which is a compound statement. -# There's an optional list of parameter declarations for old -# K&R-style definitions -# -FuncDef: [decl*, param_decls**, body*] - -Goto: [name] - -ID: [name] - -# Holder for types that are a simple identifier (e.g. the built -# ins void, char etc. and typedef-defined types) -# -IdentifierType: [names] - -If: [cond*, iftrue*, iffalse*] - -# An initialization list used for compound literals. -# -InitList: [exprs**] - -Label: [name, stmt*] - -# A named initializer for C99. -# The name of a NamedInitializer is a sequence of Nodes, because -# names can be hierarchical and contain constant expressions. -# -NamedInitializer: [name**, expr*] - -# a list of comma separated function parameter declarations -# -ParamList: [params**] - -PtrDecl: [quals, type*] - -Return: [expr*] - -StaticAssert: [cond*, message*] - -# name: struct tag name -# decls: declaration of members -# -Struct: [name, decls**] - -# type: . or -> -# name.field or name->field -# -StructRef: [name*, type, field*] - -Switch: [cond*, stmt*] - -# cond ? iftrue : iffalse -# -TernaryOp: [cond*, iftrue*, iffalse*] - -# A base type declaration -# -TypeDecl: [declname, quals, align, type*] - -# A typedef declaration. -# Very similar to Decl, but without some attributes -# -Typedef: [name, quals, storage, type*] - -Typename: [name, quals, align, type*] - -UnaryOp: [op, expr*] - -# name: union tag name -# decls: declaration of members -# -Union: [name, decls**] - -While: [cond*, stmt*] - -Pragma: [string] diff --git a/myenv/lib/python3.12/site-packages/pycparser/ast_transforms.py b/myenv/lib/python3.12/site-packages/pycparser/ast_transforms.py deleted file mode 100644 index 1051737..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/ast_transforms.py +++ /dev/null @@ -1,174 +0,0 @@ -# ------------------------------------------------------------------------------ -# pycparser: ast_transforms.py -# -# Some utilities used by the parser to create a friendlier AST. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ------------------------------------------------------------------------------ - -from typing import Any, List, Tuple, cast - -from . import c_ast - - -def fix_switch_cases(switch_node: c_ast.Switch) -> c_ast.Switch: - """The 'case' statements in a 'switch' come out of parsing with one - child node, so subsequent statements are just tucked to the parent - Compound. Additionally, consecutive (fall-through) case statements - come out messy. This is a peculiarity of the C grammar. The following: - - switch (myvar) { - case 10: - k = 10; - p = k + 1; - return 10; - case 20: - case 30: - return 20; - default: - break; - } - - Creates this tree (pseudo-dump): - - Switch - ID: myvar - Compound: - Case 10: - k = 10 - p = k + 1 - return 10 - Case 20: - Case 30: - return 20 - Default: - break - - The goal of this transform is to fix this mess, turning it into the - following: - - Switch - ID: myvar - Compound: - Case 10: - k = 10 - p = k + 1 - return 10 - Case 20: - Case 30: - return 20 - Default: - break - - A fixed AST node is returned. The argument may be modified. - """ - assert isinstance(switch_node, c_ast.Switch) - if not isinstance(switch_node.stmt, c_ast.Compound): - return switch_node - - # The new Compound child for the Switch, which will collect children in the - # correct order - new_compound = c_ast.Compound([], switch_node.stmt.coord) - - # The last Case/Default node - last_case: c_ast.Case | c_ast.Default | None = None - - # Goes over the children of the Compound below the Switch, adding them - # either directly below new_compound or below the last Case as appropriate - # (for `switch(cond) {}`, block_items would have been None) - for child in switch_node.stmt.block_items or []: - if isinstance(child, (c_ast.Case, c_ast.Default)): - # If it's a Case/Default: - # 1. Add it to the Compound and mark as "last case" - # 2. If its immediate child is also a Case or Default, promote it - # to a sibling. - new_compound.block_items.append(child) - _extract_nested_case(child, new_compound.block_items) - last_case = new_compound.block_items[-1] - else: - # Other statements are added as children to the last case, if it - # exists. - if last_case is None: - new_compound.block_items.append(child) - else: - last_case.stmts.append(child) - - switch_node.stmt = new_compound - return switch_node - - -def _extract_nested_case( - case_node: c_ast.Case | c_ast.Default, stmts_list: List[c_ast.Node] -) -> None: - """Recursively extract consecutive Case statements that are made nested - by the parser and add them to the stmts_list. - """ - if isinstance(case_node.stmts[0], (c_ast.Case, c_ast.Default)): - nested = case_node.stmts.pop() - stmts_list.append(nested) - _extract_nested_case(cast(Any, nested), stmts_list) - - -def fix_atomic_specifiers( - decl: c_ast.Decl | c_ast.Typedef, -) -> c_ast.Decl | c_ast.Typedef: - """Atomic specifiers like _Atomic(type) are unusually structured, - conferring a qualifier upon the contained type. - - This function fixes a decl with atomic specifiers to have a sane AST - structure, by removing spurious Typename->TypeDecl pairs and attaching - the _Atomic qualifier in the right place. - """ - # There can be multiple levels of _Atomic in a decl; fix them until a - # fixed point is reached. - while True: - decl, found = _fix_atomic_specifiers_once(decl) - if not found: - break - - # Make sure to add an _Atomic qual on the topmost decl if needed. Also - # restore the declname on the innermost TypeDecl (it gets placed in the - # wrong place during construction). - typ: Any = decl - while not isinstance(typ, c_ast.TypeDecl): - try: - typ = typ.type - except AttributeError: - return decl - if "_Atomic" in typ.quals and "_Atomic" not in decl.quals: - decl.quals.append("_Atomic") - if typ.declname is None: - typ.declname = decl.name - - return decl - - -def _fix_atomic_specifiers_once( - decl: c_ast.Decl | c_ast.Typedef, -) -> Tuple[c_ast.Decl | c_ast.Typedef, bool]: - """Performs one 'fix' round of atomic specifiers. - Returns (modified_decl, found) where found is True iff a fix was made. - """ - parent: Any = decl - grandparent: Any = None - node: Any = decl.type - while node is not None: - if isinstance(node, c_ast.Typename) and "_Atomic" in node.quals: - break - try: - grandparent = parent - parent = node - node = node.type - except AttributeError: - # If we've reached a node without a `type` field, it means we won't - # find what we're looking for at this point; give up the search - # and return the original decl unmodified. - return decl, False - - assert isinstance(parent, c_ast.TypeDecl) - assert grandparent is not None - cast(Any, grandparent).type = node.type - if "_Atomic" not in node.type.quals: - node.type.quals.append("_Atomic") - return decl, True diff --git a/myenv/lib/python3.12/site-packages/pycparser/c_ast.py b/myenv/lib/python3.12/site-packages/pycparser/c_ast.py deleted file mode 100644 index b6f42af..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/c_ast.py +++ /dev/null @@ -1,1341 +0,0 @@ -# ----------------------------------------------------------------- -# ** ATTENTION ** -# This code was automatically generated from _c_ast.cfg -# -# Do not modify it directly. Modify the configuration file and -# run the generator again. -# ** ** *** ** ** -# -# pycparser: c_ast.py -# -# AST Node classes. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ----------------------------------------------------------------- - - -import sys -from typing import Any, ClassVar, IO, Optional - - -def _repr(obj): - """ - Get the representation of an object, with dedicated pprint-like format for lists. - """ - if isinstance(obj, list): - return "[" + (",\n ".join((_repr(e).replace("\n", "\n ") for e in obj))) + "\n]" - else: - return repr(obj) - - -class Node: - __slots__ = () - """ Abstract base class for AST nodes. - """ - attr_names: ClassVar[tuple[str, ...]] = () - coord: Optional[Any] - - def __repr__(self): - """Generates a python representation of the current node""" - result = self.__class__.__name__ + "(" - - indent = "" - separator = "" - for name in self.__slots__[:-2]: - result += separator - result += indent - result += ( - name - + "=" - + ( - _repr(getattr(self, name)).replace( - "\n", - "\n " + (" " * (len(name) + len(self.__class__.__name__))), - ) - ) - ) - - separator = "," - indent = "\n " + (" " * len(self.__class__.__name__)) - - result += indent + ")" - - return result - - def children(self): - """A sequence of all children that are Nodes""" - pass - - def show( - self, - buf: IO[str] = sys.stdout, - offset: int = 0, - attrnames: bool = False, - showemptyattrs: bool = True, - nodenames: bool = False, - showcoord: bool = False, - _my_node_name: Optional[str] = None, - ): - """Pretty print the Node and all its attributes and - children (recursively) to a buffer. - - buf: - Open IO buffer into which the Node is printed. - - offset: - Initial offset (amount of leading spaces) - - attrnames: - True if you want to see the attribute names in - name=value pairs. False to only see the values. - - showemptyattrs: - False if you want to suppress printing empty attributes. - - nodenames: - True if you want to see the actual node names - within their parents. - - showcoord: - Do you want the coordinates of each Node to be - displayed. - """ - lead = " " * offset - if nodenames and _my_node_name is not None: - buf.write(lead + self.__class__.__name__ + " <" + _my_node_name + ">: ") - else: - buf.write(lead + self.__class__.__name__ + ": ") - - if self.attr_names: - - def is_empty(v): - v is None or (hasattr(v, "__len__") and len(v) == 0) - - nvlist = [ - (n, getattr(self, n)) - for n in self.attr_names - if showemptyattrs or not is_empty(getattr(self, n)) - ] - if attrnames: - attrstr = ", ".join(f"{name}={value}" for name, value in nvlist) - else: - attrstr = ", ".join(f"{value}" for _, value in nvlist) - buf.write(attrstr) - - if showcoord: - buf.write(f" (at {self.coord})") - buf.write("\n") - - for child_name, child in self.children(): - child.show( - buf, - offset=offset + 2, - attrnames=attrnames, - showemptyattrs=showemptyattrs, - nodenames=nodenames, - showcoord=showcoord, - _my_node_name=child_name, - ) - - -class NodeVisitor: - """A base NodeVisitor class for visiting c_ast nodes. - Subclass it and define your own visit_XXX methods, where - XXX is the class name you want to visit with these - methods. - - For example: - - class ConstantVisitor(NodeVisitor): - def __init__(self): - self.values = [] - - def visit_Constant(self, node): - self.values.append(node.value) - - Creates a list of values of all the constant nodes - encountered below the given node. To use it: - - cv = ConstantVisitor() - cv.visit(node) - - Notes: - - * generic_visit() will be called for AST nodes for which - no visit_XXX method was defined. - * The children of nodes for which a visit_XXX was - defined will not be visited - if you need this, call - generic_visit() on the node. - You can use: - NodeVisitor.generic_visit(self, node) - * Modeled after Python's own AST visiting facilities - (the ast module of Python 3.0) - """ - - _method_cache = None - - def visit(self, node: Node): - """Visit a node.""" - - if self._method_cache is None: - self._method_cache = {} - - visitor = self._method_cache.get(node.__class__.__name__, None) - if visitor is None: - method = "visit_" + node.__class__.__name__ - visitor = getattr(self, method, self.generic_visit) - self._method_cache[node.__class__.__name__] = visitor - - return visitor(node) - - def generic_visit(self, node: Node): - """Called if no explicit visitor function exists for a - node. Implements preorder visiting of the node. - """ - for _, c in node.children(): - self.visit(c) - - -class ArrayDecl(Node): - __slots__ = ("type", "dim", "dim_quals", "coord", "__weakref__") - - def __init__(self, type, dim, dim_quals, coord=None): - self.type = type - self.dim = dim - self.dim_quals = dim_quals - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - if self.dim is not None: - nodelist.append(("dim", self.dim)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - if self.dim is not None: - yield self.dim - - attr_names = ("dim_quals",) - - -class ArrayRef(Node): - __slots__ = ("name", "subscript", "coord", "__weakref__") - - def __init__(self, name, subscript, coord=None): - self.name = name - self.subscript = subscript - self.coord = coord - - def children(self): - nodelist = [] - if self.name is not None: - nodelist.append(("name", self.name)) - if self.subscript is not None: - nodelist.append(("subscript", self.subscript)) - return tuple(nodelist) - - def __iter__(self): - if self.name is not None: - yield self.name - if self.subscript is not None: - yield self.subscript - - attr_names = () - - -class Assignment(Node): - __slots__ = ("op", "lvalue", "rvalue", "coord", "__weakref__") - - def __init__(self, op, lvalue, rvalue, coord=None): - self.op = op - self.lvalue = lvalue - self.rvalue = rvalue - self.coord = coord - - def children(self): - nodelist = [] - if self.lvalue is not None: - nodelist.append(("lvalue", self.lvalue)) - if self.rvalue is not None: - nodelist.append(("rvalue", self.rvalue)) - return tuple(nodelist) - - def __iter__(self): - if self.lvalue is not None: - yield self.lvalue - if self.rvalue is not None: - yield self.rvalue - - attr_names = ("op",) - - -class Alignas(Node): - __slots__ = ("alignment", "coord", "__weakref__") - - def __init__(self, alignment, coord=None): - self.alignment = alignment - self.coord = coord - - def children(self): - nodelist = [] - if self.alignment is not None: - nodelist.append(("alignment", self.alignment)) - return tuple(nodelist) - - def __iter__(self): - if self.alignment is not None: - yield self.alignment - - attr_names = () - - -class BinaryOp(Node): - __slots__ = ("op", "left", "right", "coord", "__weakref__") - - def __init__(self, op, left, right, coord=None): - self.op = op - self.left = left - self.right = right - self.coord = coord - - def children(self): - nodelist = [] - if self.left is not None: - nodelist.append(("left", self.left)) - if self.right is not None: - nodelist.append(("right", self.right)) - return tuple(nodelist) - - def __iter__(self): - if self.left is not None: - yield self.left - if self.right is not None: - yield self.right - - attr_names = ("op",) - - -class Break(Node): - __slots__ = ("coord", "__weakref__") - - def __init__(self, coord=None): - self.coord = coord - - def children(self): - return () - - def __iter__(self): - return - yield - - attr_names = () - - -class Case(Node): - __slots__ = ("expr", "stmts", "coord", "__weakref__") - - def __init__(self, expr, stmts, coord=None): - self.expr = expr - self.stmts = stmts - self.coord = coord - - def children(self): - nodelist = [] - if self.expr is not None: - nodelist.append(("expr", self.expr)) - for i, child in enumerate(self.stmts or []): - nodelist.append((f"stmts[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - if self.expr is not None: - yield self.expr - for child in self.stmts or []: - yield child - - attr_names = () - - -class Cast(Node): - __slots__ = ("to_type", "expr", "coord", "__weakref__") - - def __init__(self, to_type, expr, coord=None): - self.to_type = to_type - self.expr = expr - self.coord = coord - - def children(self): - nodelist = [] - if self.to_type is not None: - nodelist.append(("to_type", self.to_type)) - if self.expr is not None: - nodelist.append(("expr", self.expr)) - return tuple(nodelist) - - def __iter__(self): - if self.to_type is not None: - yield self.to_type - if self.expr is not None: - yield self.expr - - attr_names = () - - -class Compound(Node): - __slots__ = ("block_items", "coord", "__weakref__") - - def __init__(self, block_items, coord=None): - self.block_items = block_items - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.block_items or []): - nodelist.append((f"block_items[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.block_items or []: - yield child - - attr_names = () - - -class CompoundLiteral(Node): - __slots__ = ("type", "init", "coord", "__weakref__") - - def __init__(self, type, init, coord=None): - self.type = type - self.init = init - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - if self.init is not None: - nodelist.append(("init", self.init)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - if self.init is not None: - yield self.init - - attr_names = () - - -class Constant(Node): - __slots__ = ("type", "value", "coord", "__weakref__") - - def __init__(self, type, value, coord=None): - self.type = type - self.value = value - self.coord = coord - - def children(self): - nodelist = [] - return tuple(nodelist) - - def __iter__(self): - return - yield - - attr_names = ( - "type", - "value", - ) - - -class Continue(Node): - __slots__ = ("coord", "__weakref__") - - def __init__(self, coord=None): - self.coord = coord - - def children(self): - return () - - def __iter__(self): - return - yield - - attr_names = () - - -class Decl(Node): - __slots__ = ( - "name", - "quals", - "align", - "storage", - "funcspec", - "type", - "init", - "bitsize", - "coord", - "__weakref__", - ) - - def __init__( - self, name, quals, align, storage, funcspec, type, init, bitsize, coord=None - ): - self.name = name - self.quals = quals - self.align = align - self.storage = storage - self.funcspec = funcspec - self.type = type - self.init = init - self.bitsize = bitsize - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - if self.init is not None: - nodelist.append(("init", self.init)) - if self.bitsize is not None: - nodelist.append(("bitsize", self.bitsize)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - if self.init is not None: - yield self.init - if self.bitsize is not None: - yield self.bitsize - - attr_names = ( - "name", - "quals", - "align", - "storage", - "funcspec", - ) - - -class DeclList(Node): - __slots__ = ("decls", "coord", "__weakref__") - - def __init__(self, decls, coord=None): - self.decls = decls - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.decls or []): - nodelist.append((f"decls[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.decls or []: - yield child - - attr_names = () - - -class Default(Node): - __slots__ = ("stmts", "coord", "__weakref__") - - def __init__(self, stmts, coord=None): - self.stmts = stmts - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.stmts or []): - nodelist.append((f"stmts[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.stmts or []: - yield child - - attr_names = () - - -class DoWhile(Node): - __slots__ = ("cond", "stmt", "coord", "__weakref__") - - def __init__(self, cond, stmt, coord=None): - self.cond = cond - self.stmt = stmt - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.stmt is not None: - nodelist.append(("stmt", self.stmt)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.stmt is not None: - yield self.stmt - - attr_names = () - - -class EllipsisParam(Node): - __slots__ = ("coord", "__weakref__") - - def __init__(self, coord=None): - self.coord = coord - - def children(self): - return () - - def __iter__(self): - return - yield - - attr_names = () - - -class EmptyStatement(Node): - __slots__ = ("coord", "__weakref__") - - def __init__(self, coord=None): - self.coord = coord - - def children(self): - return () - - def __iter__(self): - return - yield - - attr_names = () - - -class Enum(Node): - __slots__ = ("name", "values", "coord", "__weakref__") - - def __init__(self, name, values, coord=None): - self.name = name - self.values = values - self.coord = coord - - def children(self): - nodelist = [] - if self.values is not None: - nodelist.append(("values", self.values)) - return tuple(nodelist) - - def __iter__(self): - if self.values is not None: - yield self.values - - attr_names = ("name",) - - -class Enumerator(Node): - __slots__ = ("name", "value", "coord", "__weakref__") - - def __init__(self, name, value, coord=None): - self.name = name - self.value = value - self.coord = coord - - def children(self): - nodelist = [] - if self.value is not None: - nodelist.append(("value", self.value)) - return tuple(nodelist) - - def __iter__(self): - if self.value is not None: - yield self.value - - attr_names = ("name",) - - -class EnumeratorList(Node): - __slots__ = ("enumerators", "coord", "__weakref__") - - def __init__(self, enumerators, coord=None): - self.enumerators = enumerators - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.enumerators or []): - nodelist.append((f"enumerators[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.enumerators or []: - yield child - - attr_names = () - - -class ExprList(Node): - __slots__ = ("exprs", "coord", "__weakref__") - - def __init__(self, exprs, coord=None): - self.exprs = exprs - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.exprs or []): - nodelist.append((f"exprs[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.exprs or []: - yield child - - attr_names = () - - -class FileAST(Node): - __slots__ = ("ext", "coord", "__weakref__") - - def __init__(self, ext, coord=None): - self.ext = ext - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.ext or []): - nodelist.append((f"ext[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.ext or []: - yield child - - attr_names = () - - -class For(Node): - __slots__ = ("init", "cond", "next", "stmt", "coord", "__weakref__") - - def __init__(self, init, cond, next, stmt, coord=None): - self.init = init - self.cond = cond - self.next = next - self.stmt = stmt - self.coord = coord - - def children(self): - nodelist = [] - if self.init is not None: - nodelist.append(("init", self.init)) - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.next is not None: - nodelist.append(("next", self.next)) - if self.stmt is not None: - nodelist.append(("stmt", self.stmt)) - return tuple(nodelist) - - def __iter__(self): - if self.init is not None: - yield self.init - if self.cond is not None: - yield self.cond - if self.next is not None: - yield self.next - if self.stmt is not None: - yield self.stmt - - attr_names = () - - -class FuncCall(Node): - __slots__ = ("name", "args", "coord", "__weakref__") - - def __init__(self, name, args, coord=None): - self.name = name - self.args = args - self.coord = coord - - def children(self): - nodelist = [] - if self.name is not None: - nodelist.append(("name", self.name)) - if self.args is not None: - nodelist.append(("args", self.args)) - return tuple(nodelist) - - def __iter__(self): - if self.name is not None: - yield self.name - if self.args is not None: - yield self.args - - attr_names = () - - -class FuncDecl(Node): - __slots__ = ("args", "type", "coord", "__weakref__") - - def __init__(self, args, type, coord=None): - self.args = args - self.type = type - self.coord = coord - - def children(self): - nodelist = [] - if self.args is not None: - nodelist.append(("args", self.args)) - if self.type is not None: - nodelist.append(("type", self.type)) - return tuple(nodelist) - - def __iter__(self): - if self.args is not None: - yield self.args - if self.type is not None: - yield self.type - - attr_names = () - - -class FuncDef(Node): - __slots__ = ("decl", "param_decls", "body", "coord", "__weakref__") - - def __init__(self, decl, param_decls, body, coord=None): - self.decl = decl - self.param_decls = param_decls - self.body = body - self.coord = coord - - def children(self): - nodelist = [] - if self.decl is not None: - nodelist.append(("decl", self.decl)) - if self.body is not None: - nodelist.append(("body", self.body)) - for i, child in enumerate(self.param_decls or []): - nodelist.append((f"param_decls[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - if self.decl is not None: - yield self.decl - if self.body is not None: - yield self.body - for child in self.param_decls or []: - yield child - - attr_names = () - - -class Goto(Node): - __slots__ = ("name", "coord", "__weakref__") - - def __init__(self, name, coord=None): - self.name = name - self.coord = coord - - def children(self): - nodelist = [] - return tuple(nodelist) - - def __iter__(self): - return - yield - - attr_names = ("name",) - - -class ID(Node): - __slots__ = ("name", "coord", "__weakref__") - - def __init__(self, name, coord=None): - self.name = name - self.coord = coord - - def children(self): - nodelist = [] - return tuple(nodelist) - - def __iter__(self): - return - yield - - attr_names = ("name",) - - -class IdentifierType(Node): - __slots__ = ("names", "coord", "__weakref__") - - def __init__(self, names, coord=None): - self.names = names - self.coord = coord - - def children(self): - nodelist = [] - return tuple(nodelist) - - def __iter__(self): - return - yield - - attr_names = ("names",) - - -class If(Node): - __slots__ = ("cond", "iftrue", "iffalse", "coord", "__weakref__") - - def __init__(self, cond, iftrue, iffalse, coord=None): - self.cond = cond - self.iftrue = iftrue - self.iffalse = iffalse - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.iftrue is not None: - nodelist.append(("iftrue", self.iftrue)) - if self.iffalse is not None: - nodelist.append(("iffalse", self.iffalse)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.iftrue is not None: - yield self.iftrue - if self.iffalse is not None: - yield self.iffalse - - attr_names = () - - -class InitList(Node): - __slots__ = ("exprs", "coord", "__weakref__") - - def __init__(self, exprs, coord=None): - self.exprs = exprs - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.exprs or []): - nodelist.append((f"exprs[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.exprs or []: - yield child - - attr_names = () - - -class Label(Node): - __slots__ = ("name", "stmt", "coord", "__weakref__") - - def __init__(self, name, stmt, coord=None): - self.name = name - self.stmt = stmt - self.coord = coord - - def children(self): - nodelist = [] - if self.stmt is not None: - nodelist.append(("stmt", self.stmt)) - return tuple(nodelist) - - def __iter__(self): - if self.stmt is not None: - yield self.stmt - - attr_names = ("name",) - - -class NamedInitializer(Node): - __slots__ = ("name", "expr", "coord", "__weakref__") - - def __init__(self, name, expr, coord=None): - self.name = name - self.expr = expr - self.coord = coord - - def children(self): - nodelist = [] - if self.expr is not None: - nodelist.append(("expr", self.expr)) - for i, child in enumerate(self.name or []): - nodelist.append((f"name[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - if self.expr is not None: - yield self.expr - for child in self.name or []: - yield child - - attr_names = () - - -class ParamList(Node): - __slots__ = ("params", "coord", "__weakref__") - - def __init__(self, params, coord=None): - self.params = params - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.params or []): - nodelist.append((f"params[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.params or []: - yield child - - attr_names = () - - -class PtrDecl(Node): - __slots__ = ("quals", "type", "coord", "__weakref__") - - def __init__(self, quals, type, coord=None): - self.quals = quals - self.type = type - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - - attr_names = ("quals",) - - -class Return(Node): - __slots__ = ("expr", "coord", "__weakref__") - - def __init__(self, expr, coord=None): - self.expr = expr - self.coord = coord - - def children(self): - nodelist = [] - if self.expr is not None: - nodelist.append(("expr", self.expr)) - return tuple(nodelist) - - def __iter__(self): - if self.expr is not None: - yield self.expr - - attr_names = () - - -class StaticAssert(Node): - __slots__ = ("cond", "message", "coord", "__weakref__") - - def __init__(self, cond, message, coord=None): - self.cond = cond - self.message = message - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.message is not None: - nodelist.append(("message", self.message)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.message is not None: - yield self.message - - attr_names = () - - -class Struct(Node): - __slots__ = ("name", "decls", "coord", "__weakref__") - - def __init__(self, name, decls, coord=None): - self.name = name - self.decls = decls - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.decls or []): - nodelist.append((f"decls[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.decls or []: - yield child - - attr_names = ("name",) - - -class StructRef(Node): - __slots__ = ("name", "type", "field", "coord", "__weakref__") - - def __init__(self, name, type, field, coord=None): - self.name = name - self.type = type - self.field = field - self.coord = coord - - def children(self): - nodelist = [] - if self.name is not None: - nodelist.append(("name", self.name)) - if self.field is not None: - nodelist.append(("field", self.field)) - return tuple(nodelist) - - def __iter__(self): - if self.name is not None: - yield self.name - if self.field is not None: - yield self.field - - attr_names = ("type",) - - -class Switch(Node): - __slots__ = ("cond", "stmt", "coord", "__weakref__") - - def __init__(self, cond, stmt, coord=None): - self.cond = cond - self.stmt = stmt - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.stmt is not None: - nodelist.append(("stmt", self.stmt)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.stmt is not None: - yield self.stmt - - attr_names = () - - -class TernaryOp(Node): - __slots__ = ("cond", "iftrue", "iffalse", "coord", "__weakref__") - - def __init__(self, cond, iftrue, iffalse, coord=None): - self.cond = cond - self.iftrue = iftrue - self.iffalse = iffalse - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.iftrue is not None: - nodelist.append(("iftrue", self.iftrue)) - if self.iffalse is not None: - nodelist.append(("iffalse", self.iffalse)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.iftrue is not None: - yield self.iftrue - if self.iffalse is not None: - yield self.iffalse - - attr_names = () - - -class TypeDecl(Node): - __slots__ = ("declname", "quals", "align", "type", "coord", "__weakref__") - - def __init__(self, declname, quals, align, type, coord=None): - self.declname = declname - self.quals = quals - self.align = align - self.type = type - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - - attr_names = ( - "declname", - "quals", - "align", - ) - - -class Typedef(Node): - __slots__ = ("name", "quals", "storage", "type", "coord", "__weakref__") - - def __init__(self, name, quals, storage, type, coord=None): - self.name = name - self.quals = quals - self.storage = storage - self.type = type - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - - attr_names = ( - "name", - "quals", - "storage", - ) - - -class Typename(Node): - __slots__ = ("name", "quals", "align", "type", "coord", "__weakref__") - - def __init__(self, name, quals, align, type, coord=None): - self.name = name - self.quals = quals - self.align = align - self.type = type - self.coord = coord - - def children(self): - nodelist = [] - if self.type is not None: - nodelist.append(("type", self.type)) - return tuple(nodelist) - - def __iter__(self): - if self.type is not None: - yield self.type - - attr_names = ( - "name", - "quals", - "align", - ) - - -class UnaryOp(Node): - __slots__ = ("op", "expr", "coord", "__weakref__") - - def __init__(self, op, expr, coord=None): - self.op = op - self.expr = expr - self.coord = coord - - def children(self): - nodelist = [] - if self.expr is not None: - nodelist.append(("expr", self.expr)) - return tuple(nodelist) - - def __iter__(self): - if self.expr is not None: - yield self.expr - - attr_names = ("op",) - - -class Union(Node): - __slots__ = ("name", "decls", "coord", "__weakref__") - - def __init__(self, name, decls, coord=None): - self.name = name - self.decls = decls - self.coord = coord - - def children(self): - nodelist = [] - for i, child in enumerate(self.decls or []): - nodelist.append((f"decls[{i}]", child)) - return tuple(nodelist) - - def __iter__(self): - for child in self.decls or []: - yield child - - attr_names = ("name",) - - -class While(Node): - __slots__ = ("cond", "stmt", "coord", "__weakref__") - - def __init__(self, cond, stmt, coord=None): - self.cond = cond - self.stmt = stmt - self.coord = coord - - def children(self): - nodelist = [] - if self.cond is not None: - nodelist.append(("cond", self.cond)) - if self.stmt is not None: - nodelist.append(("stmt", self.stmt)) - return tuple(nodelist) - - def __iter__(self): - if self.cond is not None: - yield self.cond - if self.stmt is not None: - yield self.stmt - - attr_names = () - - -class Pragma(Node): - __slots__ = ("string", "coord", "__weakref__") - - def __init__(self, string, coord=None): - self.string = string - self.coord = coord - - def children(self): - nodelist = [] - return tuple(nodelist) - - def __iter__(self): - return - yield - - attr_names = ("string",) diff --git a/myenv/lib/python3.12/site-packages/pycparser/c_generator.py b/myenv/lib/python3.12/site-packages/pycparser/c_generator.py deleted file mode 100644 index 424e00e..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/c_generator.py +++ /dev/null @@ -1,573 +0,0 @@ -# ------------------------------------------------------------------------------ -# pycparser: c_generator.py -# -# C code generator from pycparser AST nodes. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ------------------------------------------------------------------------------ -from typing import Callable, List, Optional - -from . import c_ast - - -class CGenerator: - """Uses the same visitor pattern as c_ast.NodeVisitor, but modified to - return a value from each visit method, using string accumulation in - generic_visit. - """ - - indent_level: int - reduce_parentheses: bool - - def __init__(self, reduce_parentheses: bool = False) -> None: - """Constructs C-code generator - - reduce_parentheses: - if True, eliminates needless parentheses on binary operators - """ - # Statements start with indentation of self.indent_level spaces, using - # the _make_indent method. - self.indent_level = 0 - self.reduce_parentheses = reduce_parentheses - - def _make_indent(self) -> str: - return " " * self.indent_level - - def visit(self, node: c_ast.Node) -> str: - method = "visit_" + node.__class__.__name__ - return getattr(self, method, self.generic_visit)(node) - - def generic_visit(self, node: Optional[c_ast.Node]) -> str: - if node is None: - return "" - else: - return "".join(self.visit(c) for c_name, c in node.children()) - - def visit_Constant(self, n: c_ast.Constant) -> str: - return n.value - - def visit_ID(self, n: c_ast.ID) -> str: - return n.name - - def visit_Pragma(self, n: c_ast.Pragma) -> str: - ret = "#pragma" - if n.string: - ret += " " + n.string - return ret - - def visit_ArrayRef(self, n: c_ast.ArrayRef) -> str: - arrref = self._parenthesize_unless_simple(n.name) - return arrref + "[" + self.visit(n.subscript) + "]" - - def visit_StructRef(self, n: c_ast.StructRef) -> str: - sref = self._parenthesize_unless_simple(n.name) - return sref + n.type + self.visit(n.field) - - def visit_FuncCall(self, n: c_ast.FuncCall) -> str: - fref = self._parenthesize_unless_simple(n.name) - args = self.visit(n.args) if n.args is not None else "" - return fref + "(" + args + ")" - - def visit_UnaryOp(self, n: c_ast.UnaryOp) -> str: - match n.op: - case "sizeof": - # Always parenthesize the argument of sizeof since it can be - # a name. - return f"sizeof({self.visit(n.expr)})" - case "p++": - operand = self._parenthesize_unless_simple(n.expr) - return f"{operand}++" - case "p--": - operand = self._parenthesize_unless_simple(n.expr) - return f"{operand}--" - case _: - operand = self._parenthesize_unless_simple(n.expr) - return f"{n.op}{operand}" - - # Precedence map of binary operators: - precedence_map = { - # Should be in sync with c_parser.CParser.precedence - # Higher numbers are stronger binding - "||": 0, # weakest binding - "&&": 1, - "|": 2, - "^": 3, - "&": 4, - "==": 5, - "!=": 5, - ">": 6, - ">=": 6, - "<": 6, - "<=": 6, - ">>": 7, - "<<": 7, - "+": 8, - "-": 8, - "*": 9, - "/": 9, - "%": 9, # strongest binding - } - - def visit_BinaryOp(self, n: c_ast.BinaryOp) -> str: - # Note: all binary operators are left-to-right associative - # - # If `n.left.op` has a stronger or equally binding precedence in - # comparison to `n.op`, no parenthesis are needed for the left: - # e.g., `(a*b) + c` is equivalent to `a*b + c`, as well as - # `(a+b) - c` is equivalent to `a+b - c` (same precedence). - # If the left operator is weaker binding than the current, then - # parentheses are necessary: - # e.g., `(a+b) * c` is NOT equivalent to `a+b * c`. - lval_str = self._parenthesize_if( - n.left, - lambda d: not ( - self._is_simple_node(d) - or self.reduce_parentheses - and isinstance(d, c_ast.BinaryOp) - and self.precedence_map[d.op] >= self.precedence_map[n.op] - ), - ) - # If `n.right.op` has a stronger -but not equal- binding precedence, - # parenthesis can be omitted on the right: - # e.g., `a + (b*c)` is equivalent to `a + b*c`. - # If the right operator is weaker or equally binding, then parentheses - # are necessary: - # e.g., `a * (b+c)` is NOT equivalent to `a * b+c` and - # `a - (b+c)` is NOT equivalent to `a - b+c` (same precedence). - rval_str = self._parenthesize_if( - n.right, - lambda d: not ( - self._is_simple_node(d) - or self.reduce_parentheses - and isinstance(d, c_ast.BinaryOp) - and self.precedence_map[d.op] > self.precedence_map[n.op] - ), - ) - return f"{lval_str} {n.op} {rval_str}" - - def visit_Assignment(self, n: c_ast.Assignment) -> str: - rval_str = self._parenthesize_if( - n.rvalue, lambda n: isinstance(n, c_ast.Assignment) - ) - return f"{self.visit(n.lvalue)} {n.op} {rval_str}" - - def visit_IdentifierType(self, n: c_ast.IdentifierType) -> str: - return " ".join(n.names) - - def _visit_expr(self, n: c_ast.Node) -> str: - match n: - case c_ast.InitList(): - return "{" + self.visit(n) + "}" - case c_ast.ExprList() | c_ast.Compound(): - return "(" + self.visit(n) + ")" - case _: - return self.visit(n) - - def visit_Decl(self, n: c_ast.Decl, no_type: bool = False) -> str: - # no_type is used when a Decl is part of a DeclList, where the type is - # explicitly only for the first declaration in a list. - # - s = n.name if no_type else self._generate_decl(n) - if n.bitsize: - s += " : " + self.visit(n.bitsize) - if n.init: - s += " = " + self._visit_expr(n.init) - return s - - def visit_DeclList(self, n: c_ast.DeclList) -> str: - s = self.visit(n.decls[0]) - if len(n.decls) > 1: - s += ", " + ", ".join( - self.visit_Decl(decl, no_type=True) for decl in n.decls[1:] - ) - return s - - def visit_Typedef(self, n: c_ast.Typedef) -> str: - s = "" - if n.storage: - s += " ".join(n.storage) + " " - s += self._generate_type(n.type) - return s - - def visit_Cast(self, n: c_ast.Cast) -> str: - s = "(" + self._generate_type(n.to_type, emit_declname=False) + ")" - return s + " " + self._parenthesize_unless_simple(n.expr) - - def visit_ExprList(self, n: c_ast.ExprList) -> str: - visited_subexprs = [] - for expr in n.exprs: - visited_subexprs.append(self._visit_expr(expr)) - return ", ".join(visited_subexprs) - - def visit_InitList(self, n: c_ast.InitList) -> str: - visited_subexprs = [] - for expr in n.exprs: - visited_subexprs.append(self._visit_expr(expr)) - return ", ".join(visited_subexprs) - - def visit_Enum(self, n: c_ast.Enum) -> str: - return self._generate_struct_union_enum(n, name="enum") - - def visit_Alignas(self, n: c_ast.Alignas) -> str: - return "_Alignas({})".format(self.visit(n.alignment)) - - def visit_Enumerator(self, n: c_ast.Enumerator) -> str: - if not n.value: - return "{indent}{name},\n".format( - indent=self._make_indent(), - name=n.name, - ) - else: - return "{indent}{name} = {value},\n".format( - indent=self._make_indent(), - name=n.name, - value=self.visit(n.value), - ) - - def visit_FuncDef(self, n: c_ast.FuncDef) -> str: - decl = self.visit(n.decl) - self.indent_level = 0 - body = self.visit(n.body) - if n.param_decls: - knrdecls = ";\n".join(self.visit(p) for p in n.param_decls) - return decl + "\n" + knrdecls + ";\n" + body + "\n" - else: - return decl + "\n" + body + "\n" - - def visit_FileAST(self, n: c_ast.FileAST) -> str: - s = "" - for ext in n.ext: - match ext: - case c_ast.FuncDef(): - s += self.visit(ext) - case c_ast.Pragma(): - s += self.visit(ext) + "\n" - case _: - s += self.visit(ext) + ";\n" - return s - - def visit_Compound(self, n: c_ast.Compound) -> str: - s = self._make_indent() + "{\n" - self.indent_level += 2 - if n.block_items: - s += "".join(self._generate_stmt(stmt) for stmt in n.block_items) - self.indent_level -= 2 - s += self._make_indent() + "}\n" - return s - - def visit_CompoundLiteral(self, n: c_ast.CompoundLiteral) -> str: - return "(" + self.visit(n.type) + "){" + self.visit(n.init) + "}" - - def visit_EmptyStatement(self, n: c_ast.EmptyStatement) -> str: - return ";" - - def visit_ParamList(self, n: c_ast.ParamList) -> str: - return ", ".join(self.visit(param) for param in n.params) - - def visit_Return(self, n: c_ast.Return) -> str: - s = "return" - if n.expr: - s += " " + self.visit(n.expr) - return s + ";" - - def visit_Break(self, n: c_ast.Break) -> str: - return "break;" - - def visit_Continue(self, n: c_ast.Continue) -> str: - return "continue;" - - def visit_TernaryOp(self, n: c_ast.TernaryOp) -> str: - s = "(" + self._visit_expr(n.cond) + ") ? " - s += "(" + self._visit_expr(n.iftrue) + ") : " - s += "(" + self._visit_expr(n.iffalse) + ")" - return s - - def visit_If(self, n: c_ast.If) -> str: - s = "if (" - if n.cond: - s += self.visit(n.cond) - s += ")\n" - s += self._generate_stmt(n.iftrue, add_indent=True) - if n.iffalse: - s += self._make_indent() + "else\n" - s += self._generate_stmt(n.iffalse, add_indent=True) - return s - - def visit_For(self, n: c_ast.For) -> str: - s = "for (" - if n.init: - s += self.visit(n.init) - s += ";" - if n.cond: - s += " " + self.visit(n.cond) - s += ";" - if n.next: - s += " " + self.visit(n.next) - s += ")\n" - s += self._generate_stmt(n.stmt, add_indent=True) - return s - - def visit_While(self, n: c_ast.While) -> str: - s = "while (" - if n.cond: - s += self.visit(n.cond) - s += ")\n" - s += self._generate_stmt(n.stmt, add_indent=True) - return s - - def visit_DoWhile(self, n: c_ast.DoWhile) -> str: - s = "do\n" - s += self._generate_stmt(n.stmt, add_indent=True) - s += self._make_indent() + "while (" - if n.cond: - s += self.visit(n.cond) - s += ");" - return s - - def visit_StaticAssert(self, n: c_ast.StaticAssert) -> str: - s = "_Static_assert(" - s += self.visit(n.cond) - if n.message: - s += "," - s += self.visit(n.message) - s += ")" - return s - - def visit_Switch(self, n: c_ast.Switch) -> str: - s = "switch (" + self.visit(n.cond) + ")\n" - s += self._generate_stmt(n.stmt, add_indent=True) - return s - - def visit_Case(self, n: c_ast.Case) -> str: - s = "case " + self.visit(n.expr) + ":\n" - for stmt in n.stmts: - s += self._generate_stmt(stmt, add_indent=True) - return s - - def visit_Default(self, n: c_ast.Default) -> str: - s = "default:\n" - for stmt in n.stmts: - s += self._generate_stmt(stmt, add_indent=True) - return s - - def visit_Label(self, n: c_ast.Label) -> str: - return n.name + ":\n" + self._generate_stmt(n.stmt) - - def visit_Goto(self, n: c_ast.Goto) -> str: - return "goto " + n.name + ";" - - def visit_EllipsisParam(self, n: c_ast.EllipsisParam) -> str: - return "..." - - def visit_Struct(self, n: c_ast.Struct) -> str: - return self._generate_struct_union_enum(n, "struct") - - def visit_Typename(self, n: c_ast.Typename) -> str: - return self._generate_type(n.type) - - def visit_Union(self, n: c_ast.Union) -> str: - return self._generate_struct_union_enum(n, "union") - - def visit_NamedInitializer(self, n: c_ast.NamedInitializer) -> str: - s = "" - for name in n.name: - if isinstance(name, c_ast.ID): - s += "." + name.name - else: - s += "[" + self.visit(name) + "]" - s += " = " + self._visit_expr(n.expr) - return s - - def visit_FuncDecl(self, n: c_ast.FuncDecl) -> str: - return self._generate_type(n) - - def visit_ArrayDecl(self, n: c_ast.ArrayDecl) -> str: - return self._generate_type(n, emit_declname=False) - - def visit_TypeDecl(self, n: c_ast.TypeDecl) -> str: - return self._generate_type(n, emit_declname=False) - - def visit_PtrDecl(self, n: c_ast.PtrDecl) -> str: - return self._generate_type(n, emit_declname=False) - - def _generate_struct_union_enum( - self, n: c_ast.Struct | c_ast.Union | c_ast.Enum, name: str - ) -> str: - """Generates code for structs, unions, and enums. name should be - 'struct', 'union', or 'enum'. - """ - if name in ("struct", "union"): - assert isinstance(n, (c_ast.Struct, c_ast.Union)) - members = n.decls - body_function = self._generate_struct_union_body - else: - assert name == "enum" - assert isinstance(n, c_ast.Enum) - members = None if n.values is None else n.values.enumerators - body_function = self._generate_enum_body - s = name + " " + (n.name or "") - if members is not None: - # None means no members - # Empty sequence means an empty list of members - s += "\n" - s += self._make_indent() - self.indent_level += 2 - s += "{\n" - s += body_function(members) - self.indent_level -= 2 - s += self._make_indent() + "}" - return s - - def _generate_struct_union_body(self, members: List[c_ast.Node]) -> str: - return "".join(self._generate_stmt(decl) for decl in members) - - def _generate_enum_body(self, members: List[c_ast.Enumerator]) -> str: - # `[:-2] + '\n'` removes the final `,` from the enumerator list - return "".join(self.visit(value) for value in members)[:-2] + "\n" - - def _generate_stmt(self, n: c_ast.Node, add_indent: bool = False) -> str: - """Generation from a statement node. This method exists as a wrapper - for individual visit_* methods to handle different treatment of - some statements in this context. - """ - if add_indent: - self.indent_level += 2 - indent = self._make_indent() - if add_indent: - self.indent_level -= 2 - - match n: - case ( - c_ast.Decl() - | c_ast.Assignment() - | c_ast.Cast() - | c_ast.UnaryOp() - | c_ast.BinaryOp() - | c_ast.TernaryOp() - | c_ast.FuncCall() - | c_ast.ArrayRef() - | c_ast.StructRef() - | c_ast.Constant() - | c_ast.ID() - | c_ast.Typedef() - | c_ast.ExprList() - ): - # These can also appear in an expression context so no semicolon - # is added to them automatically - # - return indent + self.visit(n) + ";\n" - case c_ast.Compound(): - # No extra indentation required before the opening brace of a - # compound - because it consists of multiple lines it has to - # compute its own indentation. - # - return self.visit(n) - case c_ast.If(): - return indent + self.visit(n) - case _: - return indent + self.visit(n) + "\n" - - def _generate_decl(self, n: c_ast.Decl) -> str: - """Generation from a Decl node.""" - s = "" - if n.funcspec: - s = " ".join(n.funcspec) + " " - if n.storage: - s += " ".join(n.storage) + " " - if n.align: - s += self.visit(n.align[0]) + " " - s += self._generate_type(n.type) - return s - - def _generate_type( - self, - n: c_ast.Node, - modifiers: List[c_ast.Node] = [], - emit_declname: bool = True, - ) -> str: - """Recursive generation from a type node. n is the type node. - modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers - encountered on the way down to a TypeDecl, to allow proper - generation from it. - """ - # ~ print(n, modifiers) - match n: - case c_ast.TypeDecl(): - s = "" - if n.quals: - s += " ".join(n.quals) + " " - s += self.visit(n.type) - - nstr = n.declname if n.declname and emit_declname else "" - # Resolve modifiers. - # Wrap in parens to distinguish pointer to array and pointer to - # function syntax. - # - for i, modifier in enumerate(modifiers): - match modifier: - case c_ast.ArrayDecl(): - if i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl): - nstr = "(" + nstr + ")" - nstr += "[" - if modifier.dim_quals: - nstr += " ".join(modifier.dim_quals) + " " - if modifier.dim is not None: - nstr += self.visit(modifier.dim) - nstr += "]" - case c_ast.FuncDecl(): - if i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl): - nstr = "(" + nstr + ")" - args = ( - self.visit(modifier.args) - if modifier.args is not None - else "" - ) - nstr += "(" + args + ")" - case c_ast.PtrDecl(): - if modifier.quals: - quals = " ".join(modifier.quals) - suffix = f" {nstr}" if nstr else "" - nstr = f"* {quals}{suffix}" - else: - nstr = "*" + nstr - if nstr: - s += " " + nstr - return s - case c_ast.Decl(): - return self._generate_decl(n.type) - case c_ast.Typename(): - return self._generate_type(n.type, emit_declname=emit_declname) - case c_ast.IdentifierType(): - return " ".join(n.names) + " " - case c_ast.ArrayDecl() | c_ast.PtrDecl() | c_ast.FuncDecl(): - return self._generate_type( - n.type, modifiers + [n], emit_declname=emit_declname - ) - case _: - return self.visit(n) - - def _parenthesize_if( - self, n: c_ast.Node, condition: Callable[[c_ast.Node], bool] - ) -> str: - """Visits 'n' and returns its string representation, parenthesized - if the condition function applied to the node returns True. - """ - s = self._visit_expr(n) - if condition(n): - return "(" + s + ")" - else: - return s - - def _parenthesize_unless_simple(self, n: c_ast.Node) -> str: - """Common use case for _parenthesize_if""" - return self._parenthesize_if(n, lambda d: not self._is_simple_node(d)) - - def _is_simple_node(self, n: c_ast.Node) -> bool: - """Returns True for nodes that are "simple" - i.e. nodes that always - have higher precedence than operators. - """ - return isinstance( - n, - (c_ast.Constant, c_ast.ID, c_ast.ArrayRef, c_ast.StructRef, c_ast.FuncCall), - ) diff --git a/myenv/lib/python3.12/site-packages/pycparser/c_lexer.py b/myenv/lib/python3.12/site-packages/pycparser/c_lexer.py deleted file mode 100644 index ef59d69..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/c_lexer.py +++ /dev/null @@ -1,706 +0,0 @@ -# ------------------------------------------------------------------------------ -# pycparser: c_lexer.py -# -# CLexer class: lexer for the C language -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ------------------------------------------------------------------------------ -import re -from dataclasses import dataclass -from enum import Enum -from typing import Callable, Dict, List, Optional, Tuple - - -@dataclass(slots=True) -class _Token: - type: str - value: str - lineno: int - column: int - - -class CLexer: - """A standalone lexer for C. - - Parameters for construction: - error_func: - Called with (msg, line, column) on lexing errors. - on_lbrace_func: - Called when an LBRACE token is produced (used for scope tracking). - on_rbrace_func: - Called when an RBRACE token is produced (used for scope tracking). - type_lookup_func: - Called with an identifier name; expected to return True if it is - a typedef name and should be tokenized as TYPEID. - - Call input(text) to initialize lexing, and then keep calling token() to - get the next token, until it returns None (at end of input). - """ - - def __init__( - self, - error_func: Callable[[str, int, int], None], - on_lbrace_func: Callable[[], None], - on_rbrace_func: Callable[[], None], - type_lookup_func: Callable[[str], bool], - ) -> None: - self.error_func = error_func - self.on_lbrace_func = on_lbrace_func - self.on_rbrace_func = on_rbrace_func - self.type_lookup_func = type_lookup_func - self._init_state() - - def input(self, text: str, filename: str = "") -> None: - """Initialize the lexer to the given input text. - - filename is an optional name identifying the file from which the input - comes. The lexer can modify it if #line directives are encountered. - """ - self._init_state() - self._lexdata = text - self._filename = filename - - def _init_state(self) -> None: - self._lexdata = "" - self._filename = "" - self._pos = 0 - self._line_start = 0 - self._pending_tok: Optional[_Token] = None - self._lineno = 1 - - @property - def filename(self) -> str: - return self._filename - - def token(self) -> Optional[_Token]: - # Lexing strategy overview: - # - # - We maintain a current position (self._pos), line number, and the - # byte offset of the current line start. The lexer is a simple loop - # that skips whitespace/newlines and emits one token per call. - # - A small amount of logic is handled manually before regex matching: - # - # * Preprocessor-style directives: if we see '#', we check whether - # it's a #line or #pragma directive and consume it inline. #line - # updates lineno/filename and produces no tokens. #pragma can yield - # both PPPRAGMA and PPPRAGMASTR, but token() returns a single token, - # so we stash the PPPRAGMASTR as _pending_tok to return on the next - # token() call. Otherwise we return PPHASH. - # * Newlines update lineno/line-start tracking so tokens can record - # accurate columns. - # - # - The bulk of tokens are recognized in _match_token: - # - # * _regex_rules: regex patterns for identifiers, literals, and other - # complex tokens (including error-producing patterns). The lexer - # uses a combined _regex_master to scan options at the same time. - # * _fixed_tokens: exact string matches for operators and punctuation, - # resolved by longest match. - # - # - Error patterns call the error callback and advance minimally, which - # keeps lexing resilient while reporting useful diagnostics. - text = self._lexdata - n = len(text) - - if self._pending_tok is not None: - tok = self._pending_tok - self._pending_tok = None - return tok - - while self._pos < n: - match text[self._pos]: - case " " | "\t": - self._pos += 1 - case "\n": - self._lineno += 1 - self._pos += 1 - self._line_start = self._pos - case "#": - if _line_pattern.match(text, self._pos + 1): - self._pos += 1 - self._handle_ppline() - continue - if _pragma_pattern.match(text, self._pos + 1): - self._pos += 1 - toks = self._handle_pppragma() - if len(toks) > 1: - self._pending_tok = toks[1] - if len(toks) > 0: - return toks[0] - continue - tok = self._make_token("PPHASH", "#", self._pos) - self._pos += 1 - return tok - case _: - if tok := self._match_token(): - return tok - else: - continue - - def _match_token(self) -> Optional[_Token]: - """Match one token at the current position. - - Returns a Token on success, or None if no token could be matched and - an error was reported. This method always advances _pos by the matched - length, or by 1 on error/no-match. - """ - text = self._lexdata - pos = self._pos - # We pick the longest match between: - # - the master regex (identifiers, literals, error patterns, etc.) - # - fixed operator/punctuator literals from the bucket for text[pos] - # - # The longest match is required to ensure we properly lex something - # like ".123" (a floating-point constant) as a single entity (with - # FLOAT_CONST), rather than a PERIOD followed by a number. - # - # The fixed-literal buckets are already length-sorted, so within that - # bucket we can take the first match. However, we still compare its - # length to the regex match because the regex may have matched a longer - # token that should take precedence. - best = None - - if m := _regex_master.match(text, pos): - tok_type = m.lastgroup - # All master-regex alternatives are named; lastgroup shouldn't be None. - assert tok_type is not None - value = m.group(tok_type) - length = len(value) - action, msg = _regex_actions[tok_type] - best = (length, tok_type, value, action, msg) - - if bucket := _fixed_tokens_by_first.get(text[pos]): - for entry in bucket: - if text.startswith(entry.literal, pos): - length = len(entry.literal) - if best is None or length > best[0]: - best = ( - length, - entry.tok_type, - entry.literal, - _RegexAction.TOKEN, - None, - ) - break - - if best is None: - msg = f"Illegal character {repr(text[pos])}" - self._error(msg, pos) - self._pos += 1 - return None - - length, tok_type, value, action, msg = best - if action == _RegexAction.ERROR: - if tok_type == "BAD_CHAR_CONST": - msg = f"Invalid char constant {value}" - # All other ERROR rules provide a message. - assert msg is not None - self._error(msg, pos) - self._pos += max(1, length) - return None - - if action == _RegexAction.ID: - tok_type = _keyword_map.get(value, "ID") - if tok_type == "ID" and self.type_lookup_func(value): - tok_type = "TYPEID" - - tok = self._make_token(tok_type, value, pos) - self._pos += length - - if tok.type == "LBRACE": - self.on_lbrace_func() - elif tok.type == "RBRACE": - self.on_rbrace_func() - - return tok - - def _make_token(self, tok_type: str, value: str, pos: int) -> _Token: - """Create a Token at an absolute input position. - - Expects tok_type/value and the absolute byte offset pos in the current - input. Does not advance lexer state; callers manage _pos themselves. - Returns a Token with lineno/column computed from current line tracking. - """ - column = pos - self._line_start + 1 - tok = _Token(tok_type, value, self._lineno, column) - return tok - - def _error(self, msg: str, pos: int) -> None: - column = pos - self._line_start + 1 - self.error_func(msg, self._lineno, column) - - def _handle_ppline(self) -> None: - # Since #line directives aren't supposed to return tokens but should - # only affect the lexer's state (update line/filename for coords), this - # method does a bit of parsing on its own. It doesn't return anything, - # but its side effect is to update self._pos past the directive, and - # potentially update self._lineno and self._filename, based on the - # directive's contents. - # - # Accepted #line forms from preprocessors: - # - "#line 66 \"kwas\\df.h\"" - # - "# 9" - # - "#line 10 \"include/me.h\" 1 2 3" (extra numeric flags) - # - "# 1 \"file.h\" 3" - # Errors we must report: - # - "#line \"file.h\"" (filename before line number) - # - "#line df" (garbage instead of number/string) - # - # We scan the directive line once (after an optional 'line' keyword), - # validating the order: NUMBER, optional STRING, then any NUMBERs. - # The NUMBERs tail is only accepted if a filename STRING was present. - text = self._lexdata - n = len(text) - line_end = text.find("\n", self._pos) - if line_end == -1: - line_end = n - line = text[self._pos : line_end] - pos = 0 - line_len = len(line) - - def skip_ws() -> None: - nonlocal pos - while pos < line_len and line[pos] in " \t": - pos += 1 - - skip_ws() - if line.startswith("line", pos): - pos += 4 - - def success(pp_line: Optional[str], pp_filename: Optional[str]) -> None: - if pp_line is None: - self._error("line number missing in #line", self._pos + line_len) - else: - self._lineno = int(pp_line) - if pp_filename is not None: - self._filename = pp_filename - self._pos = line_end + 1 - self._line_start = self._pos - - def fail(msg: str, offset: int) -> None: - self._error(msg, self._pos + offset) - self._pos = line_end + 1 - self._line_start = self._pos - - skip_ws() - if pos >= line_len: - success(None, None) - return - if line[pos] == '"': - fail("filename before line number in #line", pos) - return - - m = re.match(_decimal_constant, line[pos:]) - if not m: - fail("invalid #line directive", pos) - return - - pp_line = m.group(0) - pos += len(pp_line) - skip_ws() - if pos >= line_len: - success(pp_line, None) - return - - if line[pos] != '"': - fail("invalid #line directive", pos) - return - - m = re.match(_string_literal, line[pos:]) - if not m: - fail("invalid #line directive", pos) - return - - pp_filename = m.group(0).lstrip('"').rstrip('"') - pos += len(m.group(0)) - - # Consume arbitrary sequence of numeric flags after the directive - while True: - skip_ws() - if pos >= line_len: - break - m = re.match(_decimal_constant, line[pos:]) - if not m: - fail("invalid #line directive", pos) - return - pos += len(m.group(0)) - - success(pp_line, pp_filename) - - def _handle_pppragma(self) -> List[_Token]: - # Parse a full #pragma line; returns a list of tokens with 1 or 2 - # tokens - PPPRAGMA and an optional PPPRAGMASTR. If an empty list is - # returned, it means an error occurred, or we're at the end of input. - # - # Examples: - # - "#pragma" -> PPPRAGMA only - # - "#pragma once" -> PPPRAGMA, PPPRAGMASTR("once") - # - "# pragma omp parallel private(th_id)" -> PPPRAGMA, PPPRAGMASTR("omp parallel private(th_id)") - # - "#\tpragma {pack: 2, smack: 3}" -> PPPRAGMA, PPPRAGMASTR("{pack: 2, smack: 3}") - text = self._lexdata - n = len(text) - pos = self._pos - - while pos < n and text[pos] in " \t": - pos += 1 - if pos >= n: - self._pos = pos - return [] - - if not text.startswith("pragma", pos): - self._error("invalid #pragma directive", pos) - self._pos = pos + 1 - return [] - - pragma_pos = pos - pos += len("pragma") - toks = [self._make_token("PPPRAGMA", "pragma", pragma_pos)] - - while pos < n and text[pos] in " \t": - pos += 1 - - start = pos - while pos < n and text[pos] != "\n": - pos += 1 - if pos > start: - toks.append(self._make_token("PPPRAGMASTR", text[start:pos], start)) - if pos < n and text[pos] == "\n": - self._lineno += 1 - pos += 1 - self._line_start = pos - self._pos = pos - return toks - - -## -## Reserved keywords -## -_keywords: Tuple[str, ...] = ( - "AUTO", - "BREAK", - "CASE", - "CHAR", - "CONST", - "CONTINUE", - "DEFAULT", - "DO", - "DOUBLE", - "ELSE", - "ENUM", - "EXTERN", - "FLOAT", - "FOR", - "GOTO", - "IF", - "INLINE", - "INT", - "LONG", - "REGISTER", - "OFFSETOF", - "RESTRICT", - "RETURN", - "SHORT", - "SIGNED", - "SIZEOF", - "STATIC", - "STRUCT", - "SWITCH", - "TYPEDEF", - "UNION", - "UNSIGNED", - "VOID", - "VOLATILE", - "WHILE", - "__INT128", - "_BOOL", - "_COMPLEX", - "_NORETURN", - "_THREAD_LOCAL", - "_STATIC_ASSERT", - "_ATOMIC", - "_ALIGNOF", - "_ALIGNAS", - "_PRAGMA", -) - -_keyword_map: Dict[str, str] = {} - -for keyword in _keywords: - # Keywords from new C standard are mixed-case, like _Bool, _Alignas, etc. - if keyword.startswith("_") and len(keyword) > 1 and keyword[1].isalpha(): - _keyword_map[keyword[:2].upper() + keyword[2:].lower()] = keyword - else: - _keyword_map[keyword.lower()] = keyword - -## -## Regexes for use in tokens -## - -# valid C identifiers (K&R2: A.2.3), plus '$' (supported by some compilers) -_identifier = r"[a-zA-Z_$][0-9a-zA-Z_$]*" - -_hex_prefix = "0[xX]" -_hex_digits = "[0-9a-fA-F]+" -_bin_prefix = "0[bB]" -_bin_digits = "[01]+" - -# integer constants (K&R2: A.2.5.1) -_integer_suffix_opt = ( - r"(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?" -) -_decimal_constant = ( - "(0" + _integer_suffix_opt + ")|([1-9][0-9]*" + _integer_suffix_opt + ")" -) -_octal_constant = "0[0-7]*" + _integer_suffix_opt -_hex_constant = _hex_prefix + _hex_digits + _integer_suffix_opt -_bin_constant = _bin_prefix + _bin_digits + _integer_suffix_opt - -_bad_octal_constant = "0[0-7]*[89]" - -# comments are not supported -_unsupported_c_style_comment = r"\/\*" -_unsupported_cxx_style_comment = r"\/\/" - -# character constants (K&R2: A.2.5.2) -# Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line -# directives with Windows paths as filenames (..\..\dir\file) -# For the same reason, decimal_escape allows all digit sequences. We want to -# parse all correct code, even if it means to sometimes parse incorrect -# code. -# -# The original regexes were taken verbatim from the C syntax definition, -# and were later modified to avoid worst-case exponential running time. -# -# simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])""" -# decimal_escape = r"""(\d+)""" -# hex_escape = r"""(x[0-9a-fA-F]+)""" -# bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])""" -# -# The following modifications were made to avoid the ambiguity that allowed -# backtracking: (https://github.com/eliben/pycparser/issues/61) -# -# - \x was removed from simple_escape, unless it was not followed by a hex -# digit, to avoid ambiguity with hex_escape. -# - hex_escape allows one or more hex characters, but requires that the next -# character(if any) is not hex -# - decimal_escape allows one or more decimal characters, but requires that the -# next character(if any) is not a decimal -# - bad_escape does not allow any decimals (8-9), to avoid conflicting with the -# permissive decimal_escape. -# -# Without this change, python's `re` module would recursively try parsing each -# ambiguous escape sequence in multiple ways. e.g. `\123` could be parsed as -# `\1`+`23`, `\12`+`3`, and `\123`. - -_simple_escape = r"""([a-wyzA-Z._~!=&\^\-\\?'"]|x(?![0-9a-fA-F]))""" -_decimal_escape = r"""(\d+)(?!\d)""" -_hex_escape = r"""(x[0-9a-fA-F]+)(?![0-9a-fA-F])""" -_bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-9])""" - -_escape_sequence = ( - r"""(\\(""" + _simple_escape + "|" + _decimal_escape + "|" + _hex_escape + "))" -) - -# This complicated regex with lookahead might be slow for strings, so because -# all of the valid escapes (including \x) allowed -# 0 or more non-escaped characters after the first character, -# simple_escape+decimal_escape+hex_escape got simplified to - -_escape_sequence_start_in_string = r"""(\\[0-9a-zA-Z._~!=&\^\-\\?'"])""" - -_cconst_char = r"""([^'\\\n]|""" + _escape_sequence + ")" -_char_const = "'" + _cconst_char + "'" -_wchar_const = "L" + _char_const -_u8char_const = "u8" + _char_const -_u16char_const = "u" + _char_const -_u32char_const = "U" + _char_const -_multicharacter_constant = "'" + _cconst_char + "{2,4}'" -_unmatched_quote = "('" + _cconst_char + "*\\n)|('" + _cconst_char + "*$)" -_bad_char_const = ( - r"""('""" + _cconst_char + """[^'\n]+')|('')|('""" + _bad_escape + r"""[^'\n]*')""" -) - -# string literals (K&R2: A.2.6) -_string_char = r"""([^"\\\n]|""" + _escape_sequence_start_in_string + ")" -_string_literal = '"' + _string_char + '*"' -_wstring_literal = "L" + _string_literal -_u8string_literal = "u8" + _string_literal -_u16string_literal = "u" + _string_literal -_u32string_literal = "U" + _string_literal -_bad_string_literal = '"' + _string_char + "*" + _bad_escape + _string_char + '*"' - -# floating constants (K&R2: A.2.5.3) -_exponent_part = r"""([eE][-+]?[0-9]+)""" -_fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)""" -_floating_constant = ( - "((((" - + _fractional_constant - + ")" - + _exponent_part - + "?)|([0-9]+" - + _exponent_part - + "))[FfLl]?)" -) -_binary_exponent_part = r"""([pP][+-]?[0-9]+)""" -_hex_fractional_constant = ( - "(((" + _hex_digits + r""")?\.""" + _hex_digits + ")|(" + _hex_digits + r"""\.))""" -) -_hex_floating_constant = ( - "(" - + _hex_prefix - + "(" - + _hex_digits - + "|" - + _hex_fractional_constant - + ")" - + _binary_exponent_part - + "[FfLl]?)" -) - - -class _RegexAction(Enum): - TOKEN = 0 - ID = 1 - ERROR = 2 - - -@dataclass(frozen=True) -class _RegexRule: - # tok_type: name of the token emitted for a match - # regex_pattern: the raw regex (no anchors) to match at the current position - # action: TOKEN for normal tokens, ID for identifiers, ERROR to report - # error_message: message used for ERROR entries - tok_type: str - regex_pattern: str - action: _RegexAction - error_message: Optional[str] - - -_regex_rules: List[_RegexRule] = [ - _RegexRule( - "UNSUPPORTED_C_STYLE_COMMENT", - _unsupported_c_style_comment, - _RegexAction.ERROR, - "Comments are not supported, see https://github.com/eliben/pycparser#3using.", - ), - _RegexRule( - "UNSUPPORTED_CXX_STYLE_COMMENT", - _unsupported_cxx_style_comment, - _RegexAction.ERROR, - "Comments are not supported, see https://github.com/eliben/pycparser#3using.", - ), - _RegexRule( - "BAD_STRING_LITERAL", - _bad_string_literal, - _RegexAction.ERROR, - "String contains invalid escape code", - ), - _RegexRule("WSTRING_LITERAL", _wstring_literal, _RegexAction.TOKEN, None), - _RegexRule("U8STRING_LITERAL", _u8string_literal, _RegexAction.TOKEN, None), - _RegexRule("U16STRING_LITERAL", _u16string_literal, _RegexAction.TOKEN, None), - _RegexRule("U32STRING_LITERAL", _u32string_literal, _RegexAction.TOKEN, None), - _RegexRule("STRING_LITERAL", _string_literal, _RegexAction.TOKEN, None), - _RegexRule("HEX_FLOAT_CONST", _hex_floating_constant, _RegexAction.TOKEN, None), - _RegexRule("FLOAT_CONST", _floating_constant, _RegexAction.TOKEN, None), - _RegexRule("INT_CONST_HEX", _hex_constant, _RegexAction.TOKEN, None), - _RegexRule("INT_CONST_BIN", _bin_constant, _RegexAction.TOKEN, None), - _RegexRule( - "BAD_CONST_OCT", - _bad_octal_constant, - _RegexAction.ERROR, - "Invalid octal constant", - ), - _RegexRule("INT_CONST_OCT", _octal_constant, _RegexAction.TOKEN, None), - _RegexRule("INT_CONST_DEC", _decimal_constant, _RegexAction.TOKEN, None), - _RegexRule("INT_CONST_CHAR", _multicharacter_constant, _RegexAction.TOKEN, None), - _RegexRule("CHAR_CONST", _char_const, _RegexAction.TOKEN, None), - _RegexRule("WCHAR_CONST", _wchar_const, _RegexAction.TOKEN, None), - _RegexRule("U8CHAR_CONST", _u8char_const, _RegexAction.TOKEN, None), - _RegexRule("U16CHAR_CONST", _u16char_const, _RegexAction.TOKEN, None), - _RegexRule("U32CHAR_CONST", _u32char_const, _RegexAction.TOKEN, None), - _RegexRule("UNMATCHED_QUOTE", _unmatched_quote, _RegexAction.ERROR, "Unmatched '"), - _RegexRule("BAD_CHAR_CONST", _bad_char_const, _RegexAction.ERROR, None), - _RegexRule("ID", _identifier, _RegexAction.ID, None), -] - -_regex_actions: Dict[str, Tuple[_RegexAction, Optional[str]]] = {} -_regex_pattern_parts: List[str] = [] -for _rule in _regex_rules: - _regex_actions[_rule.tok_type] = (_rule.action, _rule.error_message) - _regex_pattern_parts.append(f"(?P<{_rule.tok_type}>{_rule.regex_pattern})") -# The master regex is a single alternation of all token patterns, each wrapped -# in a named group. We match once at the current position and then use -# `lastgroup` to recover which token kind fired; this avoids iterating over all -# regexes on every character while keeping the same token-level semantics. -_regex_master: re.Pattern[str] = re.compile("|".join(_regex_pattern_parts)) - - -@dataclass(frozen=True) -class _FixedToken: - tok_type: str - literal: str - - -_fixed_tokens: List[_FixedToken] = [ - _FixedToken("ELLIPSIS", "..."), - _FixedToken("LSHIFTEQUAL", "<<="), - _FixedToken("RSHIFTEQUAL", ">>="), - _FixedToken("PLUSPLUS", "++"), - _FixedToken("MINUSMINUS", "--"), - _FixedToken("ARROW", "->"), - _FixedToken("LAND", "&&"), - _FixedToken("LOR", "||"), - _FixedToken("LSHIFT", "<<"), - _FixedToken("RSHIFT", ">>"), - _FixedToken("LE", "<="), - _FixedToken("GE", ">="), - _FixedToken("EQ", "=="), - _FixedToken("NE", "!="), - _FixedToken("TIMESEQUAL", "*="), - _FixedToken("DIVEQUAL", "/="), - _FixedToken("MODEQUAL", "%="), - _FixedToken("PLUSEQUAL", "+="), - _FixedToken("MINUSEQUAL", "-="), - _FixedToken("ANDEQUAL", "&="), - _FixedToken("OREQUAL", "|="), - _FixedToken("XOREQUAL", "^="), - _FixedToken("EQUALS", "="), - _FixedToken("PLUS", "+"), - _FixedToken("MINUS", "-"), - _FixedToken("TIMES", "*"), - _FixedToken("DIVIDE", "/"), - _FixedToken("MOD", "%"), - _FixedToken("OR", "|"), - _FixedToken("AND", "&"), - _FixedToken("NOT", "~"), - _FixedToken("XOR", "^"), - _FixedToken("LNOT", "!"), - _FixedToken("LT", "<"), - _FixedToken("GT", ">"), - _FixedToken("CONDOP", "?"), - _FixedToken("LPAREN", "("), - _FixedToken("RPAREN", ")"), - _FixedToken("LBRACKET", "["), - _FixedToken("RBRACKET", "]"), - _FixedToken("LBRACE", "{"), - _FixedToken("RBRACE", "}"), - _FixedToken("COMMA", ","), - _FixedToken("PERIOD", "."), - _FixedToken("SEMI", ";"), - _FixedToken("COLON", ":"), -] - -# To avoid scanning all fixed tokens on every character, we bucket them by the -# first character. When matching at position i, we only look at the bucket for -# text[i], and we pre-sort that bucket by token length so the first match is -# also the longest. This preserves longest-match semantics (e.g. '>>=' before -# '>>' before '>') while reducing the number of comparisons. -_fixed_tokens_by_first: Dict[str, List[_FixedToken]] = {} -for _entry in _fixed_tokens: - _fixed_tokens_by_first.setdefault(_entry.literal[0], []).append(_entry) -for _bucket in _fixed_tokens_by_first.values(): - _bucket.sort(key=lambda item: len(item.literal), reverse=True) - -_line_pattern: re.Pattern[str] = re.compile(r"([ \t]*line\W)|([ \t]*\d+)") -_pragma_pattern: re.Pattern[str] = re.compile(r"[ \t]*pragma\W") diff --git a/myenv/lib/python3.12/site-packages/pycparser/c_parser.py b/myenv/lib/python3.12/site-packages/pycparser/c_parser.py deleted file mode 100644 index f980672..0000000 --- a/myenv/lib/python3.12/site-packages/pycparser/c_parser.py +++ /dev/null @@ -1,2376 +0,0 @@ -# ------------------------------------------------------------------------------ -# pycparser: c_parser.py -# -# Recursive-descent parser for the C language. -# -# Eli Bendersky [https://eli.thegreenplace.net/] -# License: BSD -# ------------------------------------------------------------------------------ -from dataclasses import dataclass -from typing import ( - Any, - Dict, - List, - Literal, - NoReturn, - Optional, - Tuple, - TypedDict, - cast, -) - -from . import c_ast -from .c_lexer import CLexer, _Token -from .ast_transforms import fix_switch_cases, fix_atomic_specifiers - - -@dataclass -class Coord: - """Coordinates of a syntactic element. Consists of: - - File name - - Line number - - Column number - """ - - file: str - line: int - column: Optional[int] = None - - def __str__(self) -> str: - text = f"{self.file}:{self.line}" - if self.column: - text += f":{self.column}" - return text - - -class ParseError(Exception): - pass - - -class CParser: - """Recursive-descent C parser. - - Usage: - parser = CParser() - ast = parser.parse(text, filename) - - The `lexer` parameter lets you inject a lexer class (defaults to CLexer). - The parameters after `lexer` are accepted for backward compatibility with - the old PLY-based parser and are otherwise unused. - """ - - def __init__( - self, - lex_optimize: bool = True, - lexer: type[CLexer] = CLexer, - lextab: str = "pycparser.lextab", - yacc_optimize: bool = True, - yacctab: str = "pycparser.yacctab", - yacc_debug: bool = False, - taboutputdir: str = "", - ) -> None: - self.clex: CLexer = lexer( - error_func=self._lex_error_func, - on_lbrace_func=self._lex_on_lbrace_func, - on_rbrace_func=self._lex_on_rbrace_func, - type_lookup_func=self._lex_type_lookup_func, - ) - - # Stack of scopes for keeping track of symbols. _scope_stack[-1] is - # the current (topmost) scope. Each scope is a dictionary that - # specifies whether a name is a type. If _scope_stack[n][name] is - # True, 'name' is currently a type in the scope. If it's False, - # 'name' is used in the scope but not as a type (for instance, if we - # saw: int name; - # If 'name' is not a key in _scope_stack[n] then 'name' was not defined - # in this scope at all. - self._scope_stack: List[Dict[str, bool]] = [dict()] - self._tokens: _TokenStream = _TokenStream(self.clex) - - def parse( - self, text: str, filename: str = "", debug: bool = False - ) -> c_ast.FileAST: - """Parses C code and returns an AST. - - text: - A string containing the C source code - - filename: - Name of the file being parsed (for meaningful - error messages) - - debug: - Deprecated debug flag (unused); for backwards compatibility. - """ - self._scope_stack = [dict()] - self.clex.input(text, filename) - self._tokens = _TokenStream(self.clex) - - ast = self._parse_translation_unit_or_empty() - tok = self._peek() - if tok is not None: - self._parse_error(f"before: {tok.value}", self._tok_coord(tok)) - return ast - - # ------------------------------------------------------------------ - # Scope and declaration helpers - # ------------------------------------------------------------------ - def _coord(self, lineno: int, column: Optional[int] = None) -> Coord: - return Coord(file=self.clex.filename, line=lineno, column=column) - - def _parse_error(self, msg: str, coord: Coord | str | None) -> NoReturn: - raise ParseError(f"{coord}: {msg}") - - def _push_scope(self) -> None: - self._scope_stack.append(dict()) - - def _pop_scope(self) -> None: - assert len(self._scope_stack) > 1 - self._scope_stack.pop() - - def _add_typedef_name(self, name: str, coord: Optional[Coord]) -> None: - """Add a new typedef name (ie a TYPEID) to the current scope""" - if not self._scope_stack[-1].get(name, True): - self._parse_error( - f"Typedef {name!r} previously declared as non-typedef in this scope", - coord, - ) - self._scope_stack[-1][name] = True - - def _add_identifier(self, name: str, coord: Optional[Coord]) -> None: - """Add a new object, function, or enum member name (ie an ID) to the - current scope - """ - if self._scope_stack[-1].get(name, False): - self._parse_error( - f"Non-typedef {name!r} previously declared as typedef in this scope", - coord, - ) - self._scope_stack[-1][name] = False - - def _is_type_in_scope(self, name: str) -> bool: - """Is *name* a typedef-name in the current scope?""" - for scope in reversed(self._scope_stack): - # If name is an identifier in this scope it shadows typedefs in - # higher scopes. - in_scope = scope.get(name) - if in_scope is not None: - return in_scope - return False - - def _lex_error_func(self, msg: str, line: int, column: int) -> None: - self._parse_error(msg, self._coord(line, column)) - - def _lex_on_lbrace_func(self) -> None: - self._push_scope() - - def _lex_on_rbrace_func(self) -> None: - self._pop_scope() - - def _lex_type_lookup_func(self, name: str) -> bool: - """Looks up types that were previously defined with - typedef. - Passed to the lexer for recognizing identifiers that - are types. - """ - return self._is_type_in_scope(name) - - # To understand what's going on here, read sections A.8.5 and - # A.8.6 of K&R2 very carefully. - # - # A C type consists of a basic type declaration, with a list - # of modifiers. For example: - # - # int *c[5]; - # - # The basic declaration here is 'int c', and the pointer and - # the array are the modifiers. - # - # Basic declarations are represented by TypeDecl (from module c_ast) and the - # modifiers are FuncDecl, PtrDecl and ArrayDecl. - # - # The standard states that whenever a new modifier is parsed, it should be - # added to the end of the list of modifiers. For example: - # - # K&R2 A.8.6.2: Array Declarators - # - # In a declaration T D where D has the form - # D1 [constant-expression-opt] - # and the type of the identifier in the declaration T D1 is - # "type-modifier T", the type of the - # identifier of D is "type-modifier array of T" - # - # This is what this method does. The declarator it receives - # can be a list of declarators ending with TypeDecl. It - # tacks the modifier to the end of this list, just before - # the TypeDecl. - # - # Additionally, the modifier may be a list itself. This is - # useful for pointers, that can come as a chain from the rule - # p_pointer. In this case, the whole modifier list is spliced - # into the new location. - def _type_modify_decl(self, decl: Any, modifier: Any) -> c_ast.Node: - """Tacks a type modifier on a declarator, and returns - the modified declarator. - - Note: the declarator and modifier may be modified - """ - modifier_head = modifier - modifier_tail = modifier - - # The modifier may be a nested list. Reach its tail. - while modifier_tail.type: - modifier_tail = modifier_tail.type - - # If the decl is a basic type, just tack the modifier onto it. - if isinstance(decl, c_ast.TypeDecl): - modifier_tail.type = decl - return modifier - else: - # Otherwise, the decl is a list of modifiers. Reach - # its tail and splice the modifier onto the tail, - # pointing to the underlying basic type. - decl_tail = decl - while not isinstance(decl_tail.type, c_ast.TypeDecl): - decl_tail = decl_tail.type - - modifier_tail.type = decl_tail.type - decl_tail.type = modifier_head - return decl - - # Due to the order in which declarators are constructed, - # they have to be fixed in order to look like a normal AST. - # - # When a declaration arrives from syntax construction, it has - # these problems: - # * The innermost TypeDecl has no type (because the basic - # type is only known at the uppermost declaration level) - # * The declaration has no variable name, since that is saved - # in the innermost TypeDecl - # * The typename of the declaration is a list of type - # specifiers, and not a node. Here, basic identifier types - # should be separated from more complex types like enums - # and structs. - # - # This method fixes these problems. - def _fix_decl_name_type( - self, - decl: c_ast.Decl | c_ast.Typedef | c_ast.Typename, - typename: List[Any], - ) -> c_ast.Decl | c_ast.Typedef | c_ast.Typename: - """Fixes a declaration. Modifies decl.""" - # Reach the underlying basic type - typ = decl - while not isinstance(typ, c_ast.TypeDecl): - typ = typ.type - - decl.name = typ.declname - typ.quals = decl.quals[:] - - # The typename is a list of types. If any type in this - # list isn't an IdentifierType, it must be the only - # type in the list (it's illegal to declare "int enum ..") - # If all the types are basic, they're collected in the - # IdentifierType holder. - for tn in typename: - if not isinstance(tn, c_ast.IdentifierType): - if len(typename) > 1: - self._parse_error("Invalid multiple types specified", tn.coord) - else: - typ.type = tn - return decl - - if not typename: - # Functions default to returning int - if not isinstance(decl.type, c_ast.FuncDecl): - self._parse_error("Missing type in declaration", decl.coord) - typ.type = c_ast.IdentifierType(["int"], coord=decl.coord) - else: - # At this point, we know that typename is a list of IdentifierType - # nodes. Concatenate all the names into a single list. - typ.type = c_ast.IdentifierType( - [name for id in typename for name in id.names], coord=typename[0].coord - ) - return decl - - def _add_declaration_specifier( - self, - declspec: Optional["_DeclSpec"], - newspec: Any, - kind: "_DeclSpecKind", - append: bool = False, - ) -> "_DeclSpec": - """See _DeclSpec for the specifier dictionary layout.""" - if declspec is None: - spec: _DeclSpec = dict( - qual=[], storage=[], type=[], function=[], alignment=[] - ) - else: - spec = declspec - - if append: - spec[kind].append(newspec) - else: - spec[kind].insert(0, newspec) - - return spec - - def _build_declarations( - self, - spec: "_DeclSpec", - decls: List["_DeclInfo"], - typedef_namespace: bool = False, - ) -> List[c_ast.Node]: - """Builds a list of declarations all sharing the given specifiers. - If typedef_namespace is true, each declared name is added - to the "typedef namespace", which also includes objects, - functions, and enum constants. - """ - is_typedef = "typedef" in spec["storage"] - declarations = [] - - # Bit-fields are allowed to be unnamed. - if decls[0].get("bitsize") is None: - # When redeclaring typedef names as identifiers in inner scopes, a - # problem can occur where the identifier gets grouped into - # spec['type'], leaving decl as None. This can only occur for the - # first declarator. - if decls[0]["decl"] is None: - if ( - len(spec["type"]) < 2 - or len(spec["type"][-1].names) != 1 - or not self._is_type_in_scope(spec["type"][-1].names[0]) - ): - coord = "?" - for t in spec["type"]: - if hasattr(t, "coord"): - coord = t.coord - break - self._parse_error("Invalid declaration", coord) - - # Make this look as if it came from "direct_declarator:ID" - decls[0]["decl"] = c_ast.TypeDecl( - declname=spec["type"][-1].names[0], - type=None, - quals=None, - align=spec["alignment"], - coord=spec["type"][-1].coord, - ) - # Remove the "new" type's name from the end of spec['type'] - del spec["type"][-1] - # A similar problem can occur where the declaration ends up - # looking like an abstract declarator. Give it a name if this is - # the case. - elif not isinstance( - decls[0]["decl"], - (c_ast.Enum, c_ast.Struct, c_ast.Union, c_ast.IdentifierType), - ): - decls_0_tail = cast(Any, decls[0]["decl"]) - while not isinstance(decls_0_tail, c_ast.TypeDecl): - decls_0_tail = decls_0_tail.type - if decls_0_tail.declname is None: - decls_0_tail.declname = spec["type"][-1].names[0] - del spec["type"][-1] - - for decl in decls: - assert decl["decl"] is not None - if is_typedef: - declaration = c_ast.Typedef( - name=None, - quals=spec["qual"], - storage=spec["storage"], - type=decl["decl"], - coord=decl["decl"].coord, - ) - else: - declaration = c_ast.Decl( - name=None, - quals=spec["qual"], - align=spec["alignment"], - storage=spec["storage"], - funcspec=spec["function"], - type=decl["decl"], - init=decl.get("init"), - bitsize=decl.get("bitsize"), - coord=decl["decl"].coord, - ) - - if isinstance( - declaration.type, - (c_ast.Enum, c_ast.Struct, c_ast.Union, c_ast.IdentifierType), - ): - fixed_decl = declaration - else: - fixed_decl = self._fix_decl_name_type(declaration, spec["type"]) - - # Add the type name defined by typedef to a - # symbol table (for usage in the lexer) - if typedef_namespace: - if is_typedef: - self._add_typedef_name(fixed_decl.name, fixed_decl.coord) - else: - self._add_identifier(fixed_decl.name, fixed_decl.coord) - - fixed_decl = fix_atomic_specifiers( - cast(c_ast.Decl | c_ast.Typedef, fixed_decl) - ) - declarations.append(fixed_decl) - - return declarations - - def _build_function_definition( - self, - spec: "_DeclSpec", - decl: c_ast.Node, - param_decls: Optional[List[c_ast.Node]], - body: c_ast.Node, - ) -> c_ast.Node: - """Builds a function definition.""" - if "typedef" in spec["storage"]: - self._parse_error("Invalid typedef", decl.coord) - - declaration = self._build_declarations( - spec=spec, - decls=[dict(decl=decl, init=None, bitsize=None)], - typedef_namespace=True, - )[0] - - return c_ast.FuncDef( - decl=declaration, param_decls=param_decls, body=body, coord=decl.coord - ) - - def _select_struct_union_class(self, token: str) -> type: - """Given a token (either STRUCT or UNION), selects the - appropriate AST class. - """ - if token == "struct": - return c_ast.Struct - else: - return c_ast.Union - - # ------------------------------------------------------------------ - # Token helpers - # ------------------------------------------------------------------ - def _peek(self, k: int = 1) -> Optional[_Token]: - """Return the k-th next token without consuming it (1-based).""" - return self._tokens.peek(k) - - def _peek_type(self, k: int = 1) -> Optional[str]: - """Return the type of the k-th next token, or None if absent (1-based).""" - tok = self._peek(k) - return tok.type if tok is not None else None - - def _advance(self) -> _Token: - tok = self._tokens.next() - if tok is None: - self._parse_error("At end of input", self.clex.filename) - else: - return tok - - def _accept(self, token_type: str) -> Optional[_Token]: - """Conditionally consume next token, only if it's of token_type. - - If it is of the expected type, consume and return it. - Otherwise, leaves the token intact and returns None. - """ - tok = self._peek() - if tok is not None and tok.type == token_type: - return self._advance() - return None - - def _expect(self, token_type: str) -> _Token: - tok = self._advance() - if tok.type != token_type: - self._parse_error(f"before: {tok.value}", self._tok_coord(tok)) - return tok - - def _mark(self) -> int: - return self._tokens.mark() - - def _reset(self, mark: int) -> None: - self._tokens.reset(mark) - - def _tok_coord(self, tok: _Token) -> Coord: - return self._coord(tok.lineno, tok.column) - - def _starts_declaration(self, tok: Optional[_Token] = None) -> bool: - tok = tok or self._peek() - if tok is None: - return False - return tok.type in _DECL_START - - def _starts_expression(self, tok: Optional[_Token] = None) -> bool: - tok = tok or self._peek() - if tok is None: - return False - return tok.type in _STARTS_EXPRESSION - - def _starts_statement(self) -> bool: - tok_type = self._peek_type() - if tok_type is None: - return False - if tok_type in _STARTS_STATEMENT: - return True - return self._starts_expression() - - def _starts_declarator(self, id_only: bool = False) -> bool: - tok_type = self._peek_type() - if tok_type is None: - return False - if tok_type in {"TIMES", "LPAREN"}: - return True - if id_only: - return tok_type == "ID" - return tok_type in {"ID", "TYPEID"} - - def _peek_declarator_name_info(self) -> Tuple[Optional[str], bool]: - mark = self._mark() - tok_type, saw_paren = self._scan_declarator_name_info() - self._reset(mark) - return tok_type, saw_paren - - def _parse_any_declarator( - self, allow_abstract: bool = False, typeid_paren_as_abstract: bool = False - ) -> Tuple[Optional[c_ast.Node], bool]: - # C declarators are ambiguous without lookahead. For example: - # int foo(int (aa)); -> aa is a name (ID) - # typedef char TT; - # int bar(int (TT)); -> TT is a type (TYPEID) in parens - name_type, saw_paren = self._peek_declarator_name_info() - if name_type is None or ( - typeid_paren_as_abstract and name_type == "TYPEID" and saw_paren - ): - if not allow_abstract: - tok = self._peek() - coord = self._tok_coord(tok) if tok is not None else self.clex.filename - self._parse_error("Invalid declarator", coord) - decl = self._parse_abstract_declarator_opt() - return decl, False - - if name_type == "TYPEID": - if typeid_paren_as_abstract: - decl = self._parse_typeid_noparen_declarator() - else: - decl = self._parse_typeid_declarator() - else: - decl = self._parse_id_declarator() - return decl, True - - def _scan_declarator_name_info(self) -> Tuple[Optional[str], bool]: - saw_paren = False - while self._accept("TIMES"): - while self._peek_type() in _TYPE_QUALIFIER: - self._advance() - - tok = self._peek() - if tok is None: - return None, saw_paren - if tok.type in {"ID", "TYPEID"}: - self._advance() - return tok.type, saw_paren - if tok.type == "LPAREN": - saw_paren = True - self._advance() - tok_type, nested_paren = self._scan_declarator_name_info() - if nested_paren: - saw_paren = True - depth = 1 - while True: - tok = self._peek() - if tok is None: - return None, saw_paren - if tok.type == "LPAREN": - depth += 1 - elif tok.type == "RPAREN": - depth -= 1 - self._advance() - if depth == 0: - break - continue - self._advance() - return tok_type, saw_paren - return None, saw_paren - - def _starts_direct_abstract_declarator(self) -> bool: - return self._peek_type() in {"LPAREN", "LBRACKET"} - - def _is_assignment_op(self) -> bool: - tok = self._peek() - return tok is not None and tok.type in _ASSIGNMENT_OPS - - def _try_parse_paren_type_name( - self, - ) -> Optional[Tuple[c_ast.Typename, int, _Token]]: - """Parse and return a parenthesized type name if present. - - Returns (typ, mark, lparen_tok) when the next tokens look like - '(' type_name ')', where typ is the parsed type name, mark is the - token-stream position before parsing, and lparen_tok is the LPAREN - token. Returns None if no parenthesized type name is present. - """ - mark = self._mark() - lparen_tok = self._accept("LPAREN") - if lparen_tok is None: - return None - if not self._starts_declaration(): - self._reset(mark) - return None - typ = self._parse_type_name() - if self._accept("RPAREN") is None: - self._reset(mark) - return None - return typ, mark, lparen_tok - - # ------------------------------------------------------------------ - # Top-level - # ------------------------------------------------------------------ - # BNF: translation_unit_or_empty : translation_unit | empty - def _parse_translation_unit_or_empty(self) -> c_ast.FileAST: - if self._peek() is None: - return c_ast.FileAST([]) - return c_ast.FileAST(self._parse_translation_unit()) - - # BNF: translation_unit : external_declaration+ - def _parse_translation_unit(self) -> List[c_ast.Node]: - ext = [] - while self._peek() is not None: - ext.extend(self._parse_external_declaration()) - return ext - - # BNF: external_declaration : function_definition - # | declaration - # | pp_directive - # | pppragma_directive - # | static_assert - # | ';' - def _parse_external_declaration(self) -> List[c_ast.Node]: - tok = self._peek() - if tok is None: - return [] - if tok.type == "PPHASH": - self._parse_pp_directive() - return [] - if tok.type in {"PPPRAGMA", "_PRAGMA"}: - return [self._parse_pppragma_directive()] - if self._accept("SEMI"): - return [] - if tok.type == "_STATIC_ASSERT": - return self._parse_static_assert() - - if not self._starts_declaration(tok): - # Special handling for old-style function definitions that have an - # implicit return type, e.g. - # - # foo() { - # return 5; - # } - # - # These get an implicit 'int' return type. - decl = self._parse_id_declarator() - param_decls = None - if self._peek_type() != "LBRACE": - self._parse_error("Invalid function definition", decl.coord) - spec: _DeclSpec = dict( - qual=[], - alignment=[], - storage=[], - type=[c_ast.IdentifierType(["int"], coord=decl.coord)], - function=[], - ) - func = self._build_function_definition( - spec=spec, - decl=decl, - param_decls=param_decls, - body=self._parse_compound_statement(), - ) - return [func] - - # From here on, parsing a standard declatation/definition. - spec, saw_type, spec_coord = self._parse_declaration_specifiers( - allow_no_type=True - ) - - name_type, _ = self._peek_declarator_name_info() - if name_type != "ID": - decls = self._parse_decl_body_with_spec(spec, saw_type) - self._expect("SEMI") - return decls - - decl = self._parse_id_declarator() - - if self._peek_type() == "LBRACE" or self._starts_declaration(): - param_decls = None - if self._starts_declaration(): - param_decls = self._parse_declaration_list() - if self._peek_type() != "LBRACE": - self._parse_error("Invalid function definition", decl.coord) - if not spec["type"]: - spec["type"] = [c_ast.IdentifierType(["int"], coord=spec_coord)] - func = self._build_function_definition( - spec=spec, - decl=decl, - param_decls=param_decls, - body=self._parse_compound_statement(), - ) - return [func] - - decl_dict: "_DeclInfo" = dict(decl=decl, init=None, bitsize=None) - if self._accept("EQUALS"): - decl_dict["init"] = self._parse_initializer() - decls = self._parse_init_declarator_list(first=decl_dict) - decls = self._build_declarations(spec=spec, decls=decls, typedef_namespace=True) - self._expect("SEMI") - return decls - - # ------------------------------------------------------------------ - # Declarations - # - # Declarations always come as lists (because they can be several in one - # line). When returning parsed declarations, a list is always returned - - # even if it contains a single element. - # ------------------------------------------------------------------ - def _parse_declaration(self) -> List[c_ast.Node]: - decls = self._parse_decl_body() - self._expect("SEMI") - return decls - - # BNF: decl_body : declaration_specifiers decl_body_with_spec - def _parse_decl_body(self) -> List[c_ast.Node]: - spec, saw_type, _ = self._parse_declaration_specifiers(allow_no_type=True) - return self._parse_decl_body_with_spec(spec, saw_type) - - # BNF: decl_body_with_spec : init_declarator_list - # | struct_or_union_or_enum_only - def _parse_decl_body_with_spec( - self, spec: "_DeclSpec", saw_type: bool - ) -> List[c_ast.Node]: - decls = None - if saw_type: - if self._starts_declarator(): - decls = self._parse_init_declarator_list() - else: - if self._starts_declarator(id_only=True): - decls = self._parse_init_declarator_list(id_only=True) - - if decls is None: - ty = spec["type"] - s_u_or_e = (c_ast.Struct, c_ast.Union, c_ast.Enum) - if len(ty) == 1 and isinstance(ty[0], s_u_or_e): - decls = [ - c_ast.Decl( - name=None, - quals=spec["qual"], - align=spec["alignment"], - storage=spec["storage"], - funcspec=spec["function"], - type=ty[0], - init=None, - bitsize=None, - coord=ty[0].coord, - ) - ] - else: - decls = self._build_declarations( - spec=spec, - decls=[dict(decl=None, init=None, bitsize=None)], - typedef_namespace=True, - ) - else: - decls = self._build_declarations( - spec=spec, decls=decls, typedef_namespace=True - ) - - return decls - - # BNF: declaration_list : declaration+ - def _parse_declaration_list(self) -> List[c_ast.Node]: - decls = [] - while self._starts_declaration(): - decls.extend(self._parse_declaration()) - return decls - - # BNF: declaration_specifiers : (storage_class_specifier - # | type_specifier - # | type_qualifier - # | function_specifier - # | alignment_specifier)+ - def _parse_declaration_specifiers( - self, allow_no_type: bool = False - ) -> Tuple["_DeclSpec", bool, Optional[Coord]]: - """Parse declaration-specifier sequence. - - allow_no_type: - If True, allow a missing type specifier without error. - - Returns: - (spec, saw_type, first_coord) where spec is a dict with - qual/storage/type/function/alignment entries, saw_type is True - if a type specifier was consumed, and first_coord is the coord - of the first specifier token (used for diagnostics). - """ - spec = None - saw_type = False - first_coord = None - - while True: - tok = self._peek() - if tok is None: - break - - if tok.type == "_ALIGNAS": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_alignment_specifier(), "alignment", append=True - ) - continue - - if tok.type == "_ATOMIC" and self._peek_type(2) == "LPAREN": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_atomic_specifier(), "type", append=True - ) - saw_type = True - continue - - if tok.type in _TYPE_QUALIFIER: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._advance().value, "qual", append=True - ) - continue - - if tok.type in _STORAGE_CLASS: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._advance().value, "storage", append=True - ) - continue - - if tok.type in _FUNCTION_SPEC: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._advance().value, "function", append=True - ) - continue - - if tok.type in _TYPE_SPEC_SIMPLE: - if first_coord is None: - first_coord = self._tok_coord(tok) - tok = self._advance() - spec = self._add_declaration_specifier( - spec, - c_ast.IdentifierType([tok.value], coord=self._tok_coord(tok)), - "type", - append=True, - ) - saw_type = True - continue - - if tok.type == "TYPEID": - if saw_type: - break - if first_coord is None: - first_coord = self._tok_coord(tok) - tok = self._advance() - spec = self._add_declaration_specifier( - spec, - c_ast.IdentifierType([tok.value], coord=self._tok_coord(tok)), - "type", - append=True, - ) - saw_type = True - continue - - if tok.type in {"STRUCT", "UNION"}: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_struct_or_union_specifier(), "type", append=True - ) - saw_type = True - continue - - if tok.type == "ENUM": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_enum_specifier(), "type", append=True - ) - saw_type = True - continue - - break - - if spec is None: - self._parse_error("Invalid declaration", self.clex.filename) - - if not saw_type and not allow_no_type: - self._parse_error("Missing type in declaration", first_coord) - - return spec, saw_type, first_coord - - # BNF: specifier_qualifier_list : (type_specifier - # | type_qualifier - # | alignment_specifier)+ - def _parse_specifier_qualifier_list(self) -> "_DeclSpec": - spec = None - saw_type = False - saw_alignment = False - first_coord = None - - while True: - tok = self._peek() - if tok is None: - break - - if tok.type == "_ALIGNAS": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_alignment_specifier(), "alignment", append=True - ) - saw_alignment = True - continue - - if tok.type == "_ATOMIC" and self._peek_type(2) == "LPAREN": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_atomic_specifier(), "type", append=True - ) - saw_type = True - continue - - if tok.type in _TYPE_QUALIFIER: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._advance().value, "qual", append=True - ) - continue - - if tok.type in _TYPE_SPEC_SIMPLE: - if first_coord is None: - first_coord = self._tok_coord(tok) - tok = self._advance() - spec = self._add_declaration_specifier( - spec, - c_ast.IdentifierType([tok.value], coord=self._tok_coord(tok)), - "type", - append=True, - ) - saw_type = True - continue - - if tok.type == "TYPEID": - if saw_type: - break - if first_coord is None: - first_coord = self._tok_coord(tok) - tok = self._advance() - spec = self._add_declaration_specifier( - spec, - c_ast.IdentifierType([tok.value], coord=self._tok_coord(tok)), - "type", - append=True, - ) - saw_type = True - continue - - if tok.type in {"STRUCT", "UNION"}: - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_struct_or_union_specifier(), "type", append=True - ) - saw_type = True - continue - - if tok.type == "ENUM": - if first_coord is None: - first_coord = self._tok_coord(tok) - spec = self._add_declaration_specifier( - spec, self._parse_enum_specifier(), "type", append=True - ) - saw_type = True - continue - - break - - if spec is None: - self._parse_error("Invalid specifier list", self.clex.filename) - - if not saw_type and not saw_alignment: - self._parse_error("Missing type in declaration", first_coord) - - if spec.get("storage") is None: - spec["storage"] = [] - if spec.get("function") is None: - spec["function"] = [] - - return spec - - # BNF: type_qualifier_list : type_qualifier+ - def _parse_type_qualifier_list(self) -> List[str]: - quals = [] - while self._peek_type() in _TYPE_QUALIFIER: - quals.append(self._advance().value) - return quals - - # BNF: alignment_specifier : _ALIGNAS '(' type_name | constant_expression ')' - def _parse_alignment_specifier(self) -> c_ast.Node: - tok = self._expect("_ALIGNAS") - self._expect("LPAREN") - - if self._starts_declaration(): - typ = self._parse_type_name() - self._expect("RPAREN") - return c_ast.Alignas(typ, self._tok_coord(tok)) - - expr = self._parse_constant_expression() - self._expect("RPAREN") - return c_ast.Alignas(expr, self._tok_coord(tok)) - - # BNF: atomic_specifier : _ATOMIC '(' type_name ')' - def _parse_atomic_specifier(self) -> c_ast.Node: - self._expect("_ATOMIC") - self._expect("LPAREN") - typ = self._parse_type_name() - self._expect("RPAREN") - typ.quals.append("_Atomic") - return typ - - # BNF: init_declarator_list : init_declarator (',' init_declarator)* - def _parse_init_declarator_list( - self, first: Optional["_DeclInfo"] = None, id_only: bool = False - ) -> List["_DeclInfo"]: - decls = ( - [first] - if first is not None - else [self._parse_init_declarator(id_only=id_only)] - ) - - while self._accept("COMMA"): - decls.append(self._parse_init_declarator(id_only=id_only)) - return decls - - # BNF: init_declarator : declarator ('=' initializer)? - def _parse_init_declarator(self, id_only: bool = False) -> "_DeclInfo": - decl = self._parse_id_declarator() if id_only else self._parse_declarator() - init = None - if self._accept("EQUALS"): - init = self._parse_initializer() - return dict(decl=decl, init=init, bitsize=None) - - # ------------------------------------------------------------------ - # Structs/unions/enums - # ------------------------------------------------------------------ - # BNF: struct_or_union_specifier : struct_or_union ID? '{' struct_declaration_list? '}' - # | struct_or_union ID - def _parse_struct_or_union_specifier(self) -> c_ast.Node: - tok = self._advance() - klass = self._select_struct_union_class(tok.value) - - if self._peek_type() in {"ID", "TYPEID"}: - name_tok = self._advance() - if self._peek_type() == "LBRACE": - self._advance() - if self._accept("RBRACE"): - return klass( - name=name_tok.value, decls=[], coord=self._tok_coord(name_tok) - ) - decls = self._parse_struct_declaration_list() - self._expect("RBRACE") - return klass( - name=name_tok.value, decls=decls, coord=self._tok_coord(name_tok) - ) - - return klass( - name=name_tok.value, decls=None, coord=self._tok_coord(name_tok) - ) - - if self._peek_type() == "LBRACE": - brace_tok = self._advance() - if self._accept("RBRACE"): - return klass(name=None, decls=[], coord=self._tok_coord(brace_tok)) - decls = self._parse_struct_declaration_list() - self._expect("RBRACE") - return klass(name=None, decls=decls, coord=self._tok_coord(brace_tok)) - - self._parse_error("Invalid struct/union declaration", self._tok_coord(tok)) - - # BNF: struct_declaration_list : struct_declaration+ - def _parse_struct_declaration_list(self) -> List[c_ast.Node]: - decls = [] - while self._peek_type() not in {None, "RBRACE"}: - items = self._parse_struct_declaration() - if items is None: - continue - decls.extend(items) - return decls - - # BNF: struct_declaration : specifier_qualifier_list struct_declarator_list? ';' - # | static_assert - # | pppragma_directive - def _parse_struct_declaration(self) -> Optional[List[c_ast.Node]]: - if self._peek_type() == "SEMI": - self._advance() - return None - if self._peek_type() in {"PPPRAGMA", "_PRAGMA"}: - return [self._parse_pppragma_directive()] - - spec = self._parse_specifier_qualifier_list() - assert "typedef" not in spec.get("storage", []) - - decls = None - if self._starts_declarator() or self._peek_type() == "COLON": - decls = self._parse_struct_declarator_list() - if decls is not None: - self._expect("SEMI") - return self._build_declarations(spec=spec, decls=decls) - - if len(spec["type"]) == 1: - node = spec["type"][0] - if isinstance(node, c_ast.Node): - decl_type = node - else: - decl_type = c_ast.IdentifierType(node) - self._expect("SEMI") - return self._build_declarations( - spec=spec, decls=[dict(decl=decl_type, init=None, bitsize=None)] - ) - - self._expect("SEMI") - return self._build_declarations( - spec=spec, decls=[dict(decl=None, init=None, bitsize=None)] - ) - - # BNF: struct_declarator_list : struct_declarator (',' struct_declarator)* - def _parse_struct_declarator_list(self) -> List["_DeclInfo"]: - decls = [self._parse_struct_declarator()] - while self._accept("COMMA"): - decls.append(self._parse_struct_declarator()) - return decls - - # BNF: struct_declarator : declarator? ':' constant_expression - # | declarator (':' constant_expression)? - def _parse_struct_declarator(self) -> "_DeclInfo": - if self._accept("COLON"): - bitsize = self._parse_constant_expression() - return { - "decl": c_ast.TypeDecl(None, None, None, None), - "init": None, - "bitsize": bitsize, - } - - decl = self._parse_declarator() - if self._accept("COLON"): - bitsize = self._parse_constant_expression() - return {"decl": decl, "init": None, "bitsize": bitsize} - - return {"decl": decl, "init": None, "bitsize": None} - - # BNF: enum_specifier : ENUM ID? '{' enumerator_list? '}' - # | ENUM ID - def _parse_enum_specifier(self) -> c_ast.Node: - tok = self._expect("ENUM") - if self._peek_type() in {"ID", "TYPEID"}: - name_tok = self._advance() - if self._peek_type() == "LBRACE": - self._advance() - enums = self._parse_enumerator_list() - self._expect("RBRACE") - return c_ast.Enum(name_tok.value, enums, self._tok_coord(tok)) - return c_ast.Enum(name_tok.value, None, self._tok_coord(tok)) - - self._expect("LBRACE") - enums = self._parse_enumerator_list() - self._expect("RBRACE") - return c_ast.Enum(None, enums, self._tok_coord(tok)) - - # BNF: enumerator_list : enumerator (',' enumerator)* ','? - def _parse_enumerator_list(self) -> c_ast.Node: - enum = self._parse_enumerator() - enum_list = c_ast.EnumeratorList([enum], enum.coord) - while self._accept("COMMA"): - if self._peek_type() == "RBRACE": - break - enum = self._parse_enumerator() - enum_list.enumerators.append(enum) - return enum_list - - # BNF: enumerator : ID ('=' constant_expression)? - def _parse_enumerator(self) -> c_ast.Node: - name_tok = self._expect("ID") - if self._accept("EQUALS"): - value = self._parse_constant_expression() - else: - value = None - enum = c_ast.Enumerator(name_tok.value, value, self._tok_coord(name_tok)) - self._add_identifier(enum.name, enum.coord) - return enum - - # ------------------------------------------------------------------ - # Declarators - # ------------------------------------------------------------------ - # BNF: declarator : pointer? direct_declarator - def _parse_declarator(self) -> c_ast.Node: - decl, _ = self._parse_any_declarator( - allow_abstract=False, typeid_paren_as_abstract=False - ) - assert decl is not None - return decl - - # BNF: id_declarator : declarator with ID name - def _parse_id_declarator(self) -> c_ast.Node: - return self._parse_declarator_kind(kind="id", allow_paren=True) - - # BNF: typeid_declarator : declarator with TYPEID name - def _parse_typeid_declarator(self) -> c_ast.Node: - return self._parse_declarator_kind(kind="typeid", allow_paren=True) - - # BNF: typeid_noparen_declarator : declarator without parenthesized name - def _parse_typeid_noparen_declarator(self) -> c_ast.Node: - return self._parse_declarator_kind(kind="typeid", allow_paren=False) - - # BNF: declarator_kind : pointer? direct_declarator(kind) - def _parse_declarator_kind(self, kind: str, allow_paren: bool) -> c_ast.Node: - ptr = None - if self._peek_type() == "TIMES": - ptr = self._parse_pointer() - direct = self._parse_direct_declarator(kind, allow_paren=allow_paren) - if ptr is not None: - return self._type_modify_decl(direct, ptr) - return direct - - # BNF: direct_declarator : ID | TYPEID | '(' declarator ')' - # | direct_declarator '[' ... ']' - # | direct_declarator '(' ... ')' - def _parse_direct_declarator( - self, kind: str, allow_paren: bool = True - ) -> c_ast.Node: - if allow_paren and self._accept("LPAREN"): - decl = self._parse_declarator_kind(kind, allow_paren=True) - self._expect("RPAREN") - else: - if kind == "id": - name_tok = self._expect("ID") - else: - name_tok = self._expect("TYPEID") - decl = c_ast.TypeDecl( - declname=name_tok.value, - type=None, - quals=None, - align=None, - coord=self._tok_coord(name_tok), - ) - - return self._parse_decl_suffixes(decl) - - def _parse_decl_suffixes(self, decl: c_ast.Node) -> c_ast.Node: - """Parse a chain of array/function suffixes and attach them to decl.""" - while True: - if self._peek_type() == "LBRACKET": - decl = self._type_modify_decl(decl, self._parse_array_decl(decl)) - continue - if self._peek_type() == "LPAREN": - func = self._parse_function_decl(decl) - decl = self._type_modify_decl(decl, func) - continue - break - return decl - - # BNF: array_decl : '[' array_specifiers? assignment_expression? ']' - def _parse_array_decl(self, base_decl: c_ast.Node) -> c_ast.Node: - return self._parse_array_decl_common(base_type=None, coord=base_decl.coord) - - def _parse_array_decl_common( - self, base_type: Optional[c_ast.Node], coord: Optional[Coord] = None - ) -> c_ast.Node: - """Parse an array declarator suffix and return an ArrayDecl node. - - base_type: - Base declarator node to attach (None for direct-declarator parsing, - TypeDecl for abstract declarators). - - coord: - Coordinate to use for the ArrayDecl. If None, uses the '[' token. - """ - lbrack_tok = self._expect("LBRACKET") - if coord is None: - coord = self._tok_coord(lbrack_tok) - - def make_array_decl(dim, dim_quals): - return c_ast.ArrayDecl( - type=base_type, dim=dim, dim_quals=dim_quals, coord=coord - ) - - if self._accept("STATIC"): - dim_quals = ["static"] + (self._parse_type_qualifier_list() or []) - dim = self._parse_assignment_expression() - self._expect("RBRACKET") - return make_array_decl(dim, dim_quals) - - if self._peek_type() in _TYPE_QUALIFIER: - dim_quals = self._parse_type_qualifier_list() or [] - if self._accept("STATIC"): - dim_quals = dim_quals + ["static"] - dim = self._parse_assignment_expression() - self._expect("RBRACKET") - return make_array_decl(dim, dim_quals) - times_tok = self._accept("TIMES") - if times_tok: - self._expect("RBRACKET") - dim = c_ast.ID(times_tok.value, self._tok_coord(times_tok)) - return make_array_decl(dim, dim_quals) - dim = None - if self._starts_expression(): - dim = self._parse_assignment_expression() - self._expect("RBRACKET") - return make_array_decl(dim, dim_quals) - - times_tok = self._accept("TIMES") - if times_tok: - self._expect("RBRACKET") - dim = c_ast.ID(times_tok.value, self._tok_coord(times_tok)) - return make_array_decl(dim, []) - - dim = None - if self._starts_expression(): - dim = self._parse_assignment_expression() - self._expect("RBRACKET") - return make_array_decl(dim, []) - - # BNF: function_decl : '(' parameter_type_list_opt | identifier_list_opt ')' - def _parse_function_decl(self, base_decl: c_ast.Node) -> c_ast.Node: - self._expect("LPAREN") - if self._accept("RPAREN"): - args = None - else: - args = ( - self._parse_parameter_type_list() - if self._starts_declaration() - else self._parse_identifier_list_opt() - ) - self._expect("RPAREN") - - func = c_ast.FuncDecl(args=args, type=None, coord=base_decl.coord) - - if self._peek_type() == "LBRACE": - if func.args is not None: - for param in func.args.params: - if isinstance(param, c_ast.EllipsisParam): - break - name = getattr(param, "name", None) - if name: - self._add_identifier(name, param.coord) - - return func - - # BNF: pointer : '*' type_qualifier_list? pointer? - def _parse_pointer(self) -> Optional[c_ast.Node]: - stars = [] - times_tok = self._accept("TIMES") - while times_tok: - quals = self._parse_type_qualifier_list() or [] - stars.append((quals, self._tok_coord(times_tok))) - times_tok = self._accept("TIMES") - - if not stars: - return None - - ptr = None - for quals, coord in stars: - ptr = c_ast.PtrDecl(quals=quals, type=ptr, coord=coord) - return ptr - - # BNF: parameter_type_list : parameter_list (',' ELLIPSIS)? - def _parse_parameter_type_list(self) -> c_ast.ParamList: - params = self._parse_parameter_list() - if self._peek_type() == "COMMA" and self._peek_type(2) == "ELLIPSIS": - self._advance() - ell_tok = self._advance() - params.params.append(c_ast.EllipsisParam(self._tok_coord(ell_tok))) - return params - - # BNF: parameter_list : parameter_declaration (',' parameter_declaration)* - def _parse_parameter_list(self) -> c_ast.ParamList: - first = self._parse_parameter_declaration() - params = c_ast.ParamList([first], first.coord) - while self._peek_type() == "COMMA" and self._peek_type(2) != "ELLIPSIS": - self._advance() - params.params.append(self._parse_parameter_declaration()) - return params - - # BNF: parameter_declaration : declaration_specifiers declarator? - # | declaration_specifiers abstract_declarator_opt - def _parse_parameter_declaration(self) -> c_ast.Node: - spec, _, spec_coord = self._parse_declaration_specifiers(allow_no_type=True) - - if not spec["type"]: - spec["type"] = [c_ast.IdentifierType(["int"], coord=spec_coord)] - - if self._starts_declarator(): - decl, is_named = self._parse_any_declarator( - allow_abstract=True, typeid_paren_as_abstract=True - ) - if is_named: - return self._build_declarations( - spec=spec, decls=[dict(decl=decl, init=None, bitsize=None)] - )[0] - return self._build_parameter_declaration(spec, decl, spec_coord) - - decl = self._parse_abstract_declarator_opt() - return self._build_parameter_declaration(spec, decl, spec_coord) - - def _build_parameter_declaration( - self, spec: "_DeclSpec", decl: Optional[c_ast.Node], spec_coord: Optional[Coord] - ) -> c_ast.Node: - if ( - len(spec["type"]) > 1 - and len(spec["type"][-1].names) == 1 - and self._is_type_in_scope(spec["type"][-1].names[0]) - ): - return self._build_declarations( - spec=spec, decls=[dict(decl=decl, init=None, bitsize=None)] - )[0] - - decl = c_ast.Typename( - name="", - quals=spec["qual"], - align=None, - type=decl or c_ast.TypeDecl(None, None, None, None), - coord=spec_coord, - ) - return self._fix_decl_name_type(decl, spec["type"]) - - # BNF: identifier_list_opt : identifier_list | empty - def _parse_identifier_list_opt(self) -> Optional[c_ast.Node]: - if self._peek_type() == "RPAREN": - return None - return self._parse_identifier_list() - - # BNF: identifier_list : identifier (',' identifier)* - def _parse_identifier_list(self) -> c_ast.Node: - first = self._parse_identifier() - params = c_ast.ParamList([first], first.coord) - while self._accept("COMMA"): - params.params.append(self._parse_identifier()) - return params - - # ------------------------------------------------------------------ - # Abstract declarators - # ------------------------------------------------------------------ - # BNF: type_name : specifier_qualifier_list abstract_declarator_opt - def _parse_type_name(self) -> c_ast.Typename: - spec = self._parse_specifier_qualifier_list() - decl = self._parse_abstract_declarator_opt() - - coord = None - if decl is not None: - coord = decl.coord - elif spec["type"]: - coord = spec["type"][0].coord - - typename = c_ast.Typename( - name="", - quals=spec["qual"][:], - align=None, - type=decl or c_ast.TypeDecl(None, None, None, None), - coord=coord, - ) - return cast(c_ast.Typename, self._fix_decl_name_type(typename, spec["type"])) - - # BNF: abstract_declarator_opt : pointer? direct_abstract_declarator? - def _parse_abstract_declarator_opt(self) -> Optional[c_ast.Node]: - if self._peek_type() == "TIMES": - ptr = self._parse_pointer() - if self._starts_direct_abstract_declarator(): - decl = self._parse_direct_abstract_declarator() - else: - decl = c_ast.TypeDecl(None, None, None, None) - assert ptr is not None - return self._type_modify_decl(decl, ptr) - - if self._starts_direct_abstract_declarator(): - return self._parse_direct_abstract_declarator() - - return None - - # BNF: direct_abstract_declarator : '(' parameter_type_list_opt ')' - # | '(' abstract_declarator ')' - # | '[' ... ']' - def _parse_direct_abstract_declarator(self) -> c_ast.Node: - lparen_tok = self._accept("LPAREN") - if lparen_tok: - if self._starts_declaration() or self._peek_type() == "RPAREN": - params = self._parse_parameter_type_list_opt() - self._expect("RPAREN") - decl = c_ast.FuncDecl( - args=params, - type=c_ast.TypeDecl(None, None, None, None), - coord=self._tok_coord(lparen_tok), - ) - else: - decl = self._parse_abstract_declarator_opt() - self._expect("RPAREN") - assert decl is not None - elif self._peek_type() == "LBRACKET": - decl = self._parse_abstract_array_base() - else: - self._parse_error("Invalid abstract declarator", self.clex.filename) - - return self._parse_decl_suffixes(decl) - - # BNF: parameter_type_list_opt : parameter_type_list | empty - def _parse_parameter_type_list_opt(self) -> Optional[c_ast.ParamList]: - if self._peek_type() == "RPAREN": - return None - return self._parse_parameter_type_list() - - # BNF: abstract_array_base : '[' array_specifiers? assignment_expression? ']' - def _parse_abstract_array_base(self) -> c_ast.Node: - return self._parse_array_decl_common( - base_type=c_ast.TypeDecl(None, None, None, None), coord=None - ) - - # ------------------------------------------------------------------ - # Statements - # ------------------------------------------------------------------ - # BNF: statement : labeled_statement | compound_statement - # | selection_statement | iteration_statement - # | jump_statement | expression_statement - # | static_assert | pppragma_directive - def _parse_statement(self) -> c_ast.Node | List[c_ast.Node]: - tok_type = self._peek_type() - match tok_type: - case "CASE" | "DEFAULT": - return self._parse_labeled_statement() - case "ID" if self._peek_type(2) == "COLON": - return self._parse_labeled_statement() - case "LBRACE": - return self._parse_compound_statement() - case "IF" | "SWITCH": - return self._parse_selection_statement() - case "WHILE" | "DO" | "FOR": - return self._parse_iteration_statement() - case "GOTO" | "BREAK" | "CONTINUE" | "RETURN": - return self._parse_jump_statement() - case "PPPRAGMA" | "_PRAGMA": - return self._parse_pppragma_directive() - case "_STATIC_ASSERT": - return self._parse_static_assert() - case _: - return self._parse_expression_statement() - - # BNF: pragmacomp_or_statement : pppragma_directive* statement - def _parse_pragmacomp_or_statement(self) -> c_ast.Node | List[c_ast.Node]: - if self._peek_type() in {"PPPRAGMA", "_PRAGMA"}: - pragmas = self._parse_pppragma_directive_list() - stmt = self._parse_statement() - return c_ast.Compound(block_items=pragmas + [stmt], coord=pragmas[0].coord) - return self._parse_statement() - - # BNF: block_item : declaration | statement - def _parse_block_item(self) -> c_ast.Node | List[c_ast.Node]: - if self._starts_declaration(): - return self._parse_declaration() - return self._parse_statement() - - # BNF: block_item_list : block_item+ - def _parse_block_item_list(self) -> List[c_ast.Node]: - items = [] - while self._peek_type() not in {"RBRACE", None}: - item = self._parse_block_item() - if isinstance(item, list): - if item == [None]: - continue - items.extend(item) - else: - items.append(item) - return items - - # BNF: compound_statement : '{' block_item_list? '}' - def _parse_compound_statement(self) -> c_ast.Node: - lbrace_tok = self._expect("LBRACE") - if self._accept("RBRACE"): - return c_ast.Compound(block_items=None, coord=self._tok_coord(lbrace_tok)) - block_items = self._parse_block_item_list() - self._expect("RBRACE") - return c_ast.Compound( - block_items=block_items, coord=self._tok_coord(lbrace_tok) - ) - - # BNF: labeled_statement : ID ':' statement - # | CASE constant_expression ':' statement - # | DEFAULT ':' statement - def _parse_labeled_statement(self) -> c_ast.Node: - tok_type = self._peek_type() - match tok_type: - case "ID": - name_tok = self._advance() - self._expect("COLON") - if self._starts_statement(): - stmt = self._parse_pragmacomp_or_statement() - else: - stmt = c_ast.EmptyStatement(self._tok_coord(name_tok)) - return c_ast.Label(name_tok.value, stmt, self._tok_coord(name_tok)) - case "CASE": - case_tok = self._advance() - expr = self._parse_constant_expression() - self._expect("COLON") - if self._starts_statement(): - stmt = self._parse_pragmacomp_or_statement() - else: - stmt = c_ast.EmptyStatement(self._tok_coord(case_tok)) - return c_ast.Case(expr, [stmt], self._tok_coord(case_tok)) - case "DEFAULT": - def_tok = self._advance() - self._expect("COLON") - if self._starts_statement(): - stmt = self._parse_pragmacomp_or_statement() - else: - stmt = c_ast.EmptyStatement(self._tok_coord(def_tok)) - return c_ast.Default([stmt], self._tok_coord(def_tok)) - case _: - self._parse_error("Invalid labeled statement", self.clex.filename) - - # BNF: selection_statement : IF '(' expression ')' statement (ELSE statement)? - # | SWITCH '(' expression ')' statement - def _parse_selection_statement(self) -> c_ast.Node: - tok = self._advance() - match tok.type: - case "IF": - self._expect("LPAREN") - cond = self._parse_expression() - self._expect("RPAREN") - then_stmt = self._parse_pragmacomp_or_statement() - if self._accept("ELSE"): - else_stmt = self._parse_pragmacomp_or_statement() - return c_ast.If(cond, then_stmt, else_stmt, self._tok_coord(tok)) - return c_ast.If(cond, then_stmt, None, self._tok_coord(tok)) - case "SWITCH": - self._expect("LPAREN") - expr = self._parse_expression() - self._expect("RPAREN") - stmt = self._parse_pragmacomp_or_statement() - return fix_switch_cases(c_ast.Switch(expr, stmt, self._tok_coord(tok))) - case _: - self._parse_error("Invalid selection statement", self._tok_coord(tok)) - - # BNF: iteration_statement : WHILE '(' expression ')' statement - # | DO statement WHILE '(' expression ')' ';' - # | FOR '(' (declaration | expression_opt) ';' - # expression_opt ';' expression_opt ')' statement - def _parse_iteration_statement(self) -> c_ast.Node: - tok = self._advance() - match tok.type: - case "WHILE": - self._expect("LPAREN") - cond = self._parse_expression() - self._expect("RPAREN") - stmt = self._parse_pragmacomp_or_statement() - return c_ast.While(cond, stmt, self._tok_coord(tok)) - case "DO": - stmt = self._parse_pragmacomp_or_statement() - self._expect("WHILE") - self._expect("LPAREN") - cond = self._parse_expression() - self._expect("RPAREN") - self._expect("SEMI") - return c_ast.DoWhile(cond, stmt, self._tok_coord(tok)) - case "FOR": - self._expect("LPAREN") - if self._starts_declaration(): - decls = self._parse_declaration() - init = c_ast.DeclList(decls, self._tok_coord(tok)) - cond = self._parse_expression_opt() - self._expect("SEMI") - next_expr = self._parse_expression_opt() - self._expect("RPAREN") - stmt = self._parse_pragmacomp_or_statement() - return c_ast.For(init, cond, next_expr, stmt, self._tok_coord(tok)) - - init = self._parse_expression_opt() - self._expect("SEMI") - cond = self._parse_expression_opt() - self._expect("SEMI") - next_expr = self._parse_expression_opt() - self._expect("RPAREN") - stmt = self._parse_pragmacomp_or_statement() - return c_ast.For(init, cond, next_expr, stmt, self._tok_coord(tok)) - case _: - self._parse_error("Invalid iteration statement", self._tok_coord(tok)) - - # BNF: jump_statement : GOTO ID ';' | BREAK ';' | CONTINUE ';' - # | RETURN expression? ';' - def _parse_jump_statement(self) -> c_ast.Node: - tok = self._advance() - match tok.type: - case "GOTO": - name_tok = self._expect("ID") - self._expect("SEMI") - return c_ast.Goto(name_tok.value, self._tok_coord(tok)) - case "BREAK": - self._expect("SEMI") - return c_ast.Break(self._tok_coord(tok)) - case "CONTINUE": - self._expect("SEMI") - return c_ast.Continue(self._tok_coord(tok)) - case "RETURN": - if self._accept("SEMI"): - return c_ast.Return(None, self._tok_coord(tok)) - expr = self._parse_expression() - self._expect("SEMI") - return c_ast.Return(expr, self._tok_coord(tok)) - case _: - self._parse_error("Invalid jump statement", self._tok_coord(tok)) - - # BNF: expression_statement : expression_opt ';' - def _parse_expression_statement(self) -> c_ast.Node: - expr = self._parse_expression_opt() - semi_tok = self._expect("SEMI") - if expr is None: - return c_ast.EmptyStatement(self._tok_coord(semi_tok)) - return expr - - # ------------------------------------------------------------------ - # Expressions - # ------------------------------------------------------------------ - # BNF: expression_opt : expression | empty - def _parse_expression_opt(self) -> Optional[c_ast.Node]: - if self._starts_expression(): - return self._parse_expression() - return None - - # BNF: expression : assignment_expression (',' assignment_expression)* - def _parse_expression(self) -> c_ast.Node: - expr = self._parse_assignment_expression() - if not self._accept("COMMA"): - return expr - exprs = [expr, self._parse_assignment_expression()] - while self._accept("COMMA"): - exprs.append(self._parse_assignment_expression()) - return c_ast.ExprList(exprs, expr.coord) - - # BNF: assignment_expression : conditional_expression - # | unary_expression assignment_op assignment_expression - def _parse_assignment_expression(self) -> c_ast.Node: - if self._peek_type() == "LPAREN" and self._peek_type(2) == "LBRACE": - self._advance() - comp = self._parse_compound_statement() - self._expect("RPAREN") - return comp - - expr = self._parse_conditional_expression() - if self._is_assignment_op(): - op = self._advance().value - rhs = self._parse_assignment_expression() - return c_ast.Assignment(op, expr, rhs, expr.coord) - return expr - - # BNF: conditional_expression : binary_expression - # | binary_expression '?' expression ':' conditional_expression - def _parse_conditional_expression(self) -> c_ast.Node: - expr = self._parse_binary_expression() - if self._accept("CONDOP"): - iftrue = self._parse_expression() - self._expect("COLON") - iffalse = self._parse_conditional_expression() - return c_ast.TernaryOp(expr, iftrue, iffalse, expr.coord) - return expr - - # BNF: binary_expression : cast_expression (binary_op cast_expression)* - def _parse_binary_expression( - self, min_prec: int = 0, lhs: Optional[c_ast.Node] = None - ) -> c_ast.Node: - if lhs is None: - lhs = self._parse_cast_expression() - - while True: - tok = self._peek() - if tok is None or tok.type not in _BINARY_PRECEDENCE: - break - prec = _BINARY_PRECEDENCE[tok.type] - if prec < min_prec: - break - - op = tok.value - self._advance() - rhs = self._parse_cast_expression() - - while True: - next_tok = self._peek() - if next_tok is None or next_tok.type not in _BINARY_PRECEDENCE: - break - next_prec = _BINARY_PRECEDENCE[next_tok.type] - if next_prec > prec: - rhs = self._parse_binary_expression(next_prec, rhs) - else: - break - - lhs = c_ast.BinaryOp(op, lhs, rhs, lhs.coord) - - return lhs - - # BNF: cast_expression : '(' type_name ')' cast_expression - # | unary_expression - def _parse_cast_expression(self) -> c_ast.Node: - result = self._try_parse_paren_type_name() - if result is not None: - typ, mark, lparen_tok = result - if self._peek_type() == "LBRACE": - # (type){...} is a compound literal, not a cast. Examples: - # (int){1} -> compound literal, handled in postfix - # (int) x -> cast, handled below - self._reset(mark) - else: - expr = self._parse_cast_expression() - return c_ast.Cast(typ, expr, self._tok_coord(lparen_tok)) - return self._parse_unary_expression() - - # BNF: unary_expression : postfix_expression - # | '++' unary_expression - # | '--' unary_expression - # | unary_op cast_expression - # | 'sizeof' unary_expression - # | 'sizeof' '(' type_name ')' - # | '_Alignof' '(' type_name ')' - def _parse_unary_expression(self) -> c_ast.Node: - tok_type = self._peek_type() - if tok_type in {"PLUSPLUS", "MINUSMINUS"}: - tok = self._advance() - expr = self._parse_unary_expression() - return c_ast.UnaryOp(tok.value, expr, expr.coord) - - if tok_type in {"AND", "TIMES", "PLUS", "MINUS", "NOT", "LNOT"}: - tok = self._advance() - expr = self._parse_cast_expression() - return c_ast.UnaryOp(tok.value, expr, expr.coord) - - if tok_type == "SIZEOF": - tok = self._advance() - result = self._try_parse_paren_type_name() - if result is not None: - typ, _, _ = result - return c_ast.UnaryOp(tok.value, typ, self._tok_coord(tok)) - expr = self._parse_unary_expression() - return c_ast.UnaryOp(tok.value, expr, self._tok_coord(tok)) - - if tok_type == "_ALIGNOF": - tok = self._advance() - self._expect("LPAREN") - typ = self._parse_type_name() - self._expect("RPAREN") - return c_ast.UnaryOp(tok.value, typ, self._tok_coord(tok)) - - return self._parse_postfix_expression() - - # BNF: postfix_expression : primary_expression postfix_suffix* - # | '(' type_name ')' '{' initializer_list ','? '}' - def _parse_postfix_expression(self) -> c_ast.Node: - result = self._try_parse_paren_type_name() - if result is not None: - typ, mark, _ = result - # Disambiguate between casts and compound literals: - # (int) x -> cast - # (int) {1} -> compound literal - if self._accept("LBRACE"): - init = self._parse_initializer_list() - self._accept("COMMA") - self._expect("RBRACE") - return c_ast.CompoundLiteral(typ, init) - else: - self._reset(mark) - - expr = self._parse_primary_expression() - while True: - if self._accept("LBRACKET"): - sub = self._parse_expression() - self._expect("RBRACKET") - expr = c_ast.ArrayRef(expr, sub, expr.coord) - continue - if self._accept("LPAREN"): - if self._peek_type() == "RPAREN": - self._advance() - args = None - else: - args = self._parse_argument_expression_list() - self._expect("RPAREN") - expr = c_ast.FuncCall(expr, args, expr.coord) - continue - if self._peek_type() in {"PERIOD", "ARROW"}: - op_tok = self._advance() - name_tok = self._advance() - if name_tok.type not in {"ID", "TYPEID"}: - self._parse_error( - "Invalid struct reference", self._tok_coord(name_tok) - ) - field = c_ast.ID(name_tok.value, self._tok_coord(name_tok)) - expr = c_ast.StructRef(expr, op_tok.value, field, expr.coord) - continue - if self._peek_type() in {"PLUSPLUS", "MINUSMINUS"}: - tok = self._advance() - expr = c_ast.UnaryOp("p" + tok.value, expr, expr.coord) - continue - break - return expr - - # BNF: primary_expression : ID | constant | string_literal - # | '(' expression ')' | offsetof - def _parse_primary_expression(self) -> c_ast.Node: - tok_type = self._peek_type() - if tok_type == "ID": - return self._parse_identifier() - if ( - tok_type in _INT_CONST - or tok_type in _FLOAT_CONST - or tok_type in _CHAR_CONST - ): - return self._parse_constant() - if tok_type in _STRING_LITERAL: - return self._parse_unified_string_literal() - if tok_type in _WSTR_LITERAL: - return self._parse_unified_wstring_literal() - if tok_type == "LPAREN": - self._advance() - expr = self._parse_expression() - self._expect("RPAREN") - return expr - if tok_type == "OFFSETOF": - off_tok = self._advance() - self._expect("LPAREN") - typ = self._parse_type_name() - self._expect("COMMA") - designator = self._parse_offsetof_member_designator() - self._expect("RPAREN") - coord = self._tok_coord(off_tok) - return c_ast.FuncCall( - c_ast.ID(off_tok.value, coord), - c_ast.ExprList([typ, designator], coord), - coord, - ) - - self._parse_error("Invalid expression", self.clex.filename) - - # BNF: offsetof_member_designator : identifier_or_typeid - # ('.' identifier_or_typeid | '[' expression ']')* - def _parse_offsetof_member_designator(self) -> c_ast.Node: - node = self._parse_identifier_or_typeid() - while True: - if self._accept("PERIOD"): - field = self._parse_identifier_or_typeid() - node = c_ast.StructRef(node, ".", field, node.coord) - continue - if self._accept("LBRACKET"): - expr = self._parse_expression() - self._expect("RBRACKET") - node = c_ast.ArrayRef(node, expr, node.coord) - continue - break - return node - - # BNF: argument_expression_list : assignment_expression (',' assignment_expression)* - def _parse_argument_expression_list(self) -> c_ast.Node: - expr = self._parse_assignment_expression() - exprs = [expr] - while self._accept("COMMA"): - exprs.append(self._parse_assignment_expression()) - return c_ast.ExprList(exprs, expr.coord) - - # BNF: constant_expression : conditional_expression - def _parse_constant_expression(self) -> c_ast.Node: - return self._parse_conditional_expression() - - # ------------------------------------------------------------------ - # Terminals - # ------------------------------------------------------------------ - # BNF: identifier : ID - def _parse_identifier(self) -> c_ast.Node: - tok = self._expect("ID") - return c_ast.ID(tok.value, self._tok_coord(tok)) - - # BNF: identifier_or_typeid : ID | TYPEID - def _parse_identifier_or_typeid(self) -> c_ast.Node: - tok = self._advance() - if tok.type not in {"ID", "TYPEID"}: - self._parse_error("Expected identifier", self._tok_coord(tok)) - return c_ast.ID(tok.value, self._tok_coord(tok)) - - # BNF: constant : INT_CONST | FLOAT_CONST | CHAR_CONST - def _parse_constant(self) -> c_ast.Node: - tok = self._advance() - if tok.type in _INT_CONST: - u_count = 0 - l_count = 0 - for ch in tok.value[-3:]: - if ch in ("l", "L"): - l_count += 1 - elif ch in ("u", "U"): - u_count += 1 - if u_count > 1: - raise ValueError("Constant cannot have more than one u/U suffix.") - if l_count > 2: - raise ValueError("Constant cannot have more than two l/L suffix.") - prefix = "unsigned " * u_count + "long " * l_count - return c_ast.Constant(prefix + "int", tok.value, self._tok_coord(tok)) - - if tok.type in _FLOAT_CONST: - if tok.value[-1] in ("f", "F"): - t = "float" - elif tok.value[-1] in ("l", "L"): - t = "long double" - else: - t = "double" - return c_ast.Constant(t, tok.value, self._tok_coord(tok)) - - if tok.type in _CHAR_CONST: - return c_ast.Constant("char", tok.value, self._tok_coord(tok)) - - self._parse_error("Invalid constant", self._tok_coord(tok)) - - # BNF: unified_string_literal : STRING_LITERAL+ - def _parse_unified_string_literal(self) -> c_ast.Node: - tok = self._expect("STRING_LITERAL") - node = c_ast.Constant("string", tok.value, self._tok_coord(tok)) - while self._peek_type() == "STRING_LITERAL": - tok2 = self._advance() - node.value = node.value[:-1] + tok2.value[1:] - return node - - # BNF: unified_wstring_literal : WSTRING_LITERAL+ - def _parse_unified_wstring_literal(self) -> c_ast.Node: - tok = self._advance() - if tok.type not in _WSTR_LITERAL: - self._parse_error("Invalid string literal", self._tok_coord(tok)) - node = c_ast.Constant("string", tok.value, self._tok_coord(tok)) - while self._peek_type() in _WSTR_LITERAL: - tok2 = self._advance() - node.value = node.value.rstrip()[:-1] + tok2.value[2:] - return node - - # ------------------------------------------------------------------ - # Initializers - # ------------------------------------------------------------------ - # BNF: initializer : assignment_expression - # | '{' initializer_list ','? '}' - # | '{' '}' - def _parse_initializer(self) -> c_ast.Node: - lbrace_tok = self._accept("LBRACE") - if lbrace_tok: - if self._accept("RBRACE"): - return c_ast.InitList([], self._tok_coord(lbrace_tok)) - init_list = self._parse_initializer_list() - self._accept("COMMA") - self._expect("RBRACE") - return init_list - - return self._parse_assignment_expression() - - # BNF: initializer_list : initializer_item (',' initializer_item)* ','? - def _parse_initializer_list(self) -> c_ast.Node: - items = [self._parse_initializer_item()] - while self._accept("COMMA"): - if self._peek_type() == "RBRACE": - break - items.append(self._parse_initializer_item()) - return c_ast.InitList(items, items[0].coord) - - # BNF: initializer_item : designation? initializer - def _parse_initializer_item(self) -> c_ast.Node: - designation = None - if self._peek_type() in {"LBRACKET", "PERIOD"}: - designation = self._parse_designation() - init = self._parse_initializer() - if designation is not None: - return c_ast.NamedInitializer(designation, init) - return init - - # BNF: designation : designator_list '=' - def _parse_designation(self) -> List[c_ast.Node]: - designators = self._parse_designator_list() - self._expect("EQUALS") - return designators - - # BNF: designator_list : designator+ - def _parse_designator_list(self) -> List[c_ast.Node]: - designators = [] - while self._peek_type() in {"LBRACKET", "PERIOD"}: - designators.append(self._parse_designator()) - return designators - - # BNF: designator : '[' constant_expression ']' - # | '.' identifier_or_typeid - def _parse_designator(self) -> c_ast.Node: - if self._accept("LBRACKET"): - expr = self._parse_constant_expression() - self._expect("RBRACKET") - return expr - if self._accept("PERIOD"): - return self._parse_identifier_or_typeid() - self._parse_error("Invalid designator", self.clex.filename) - - # ------------------------------------------------------------------ - # Preprocessor-like directives - # ------------------------------------------------------------------ - # BNF: pp_directive : '#' ... (unsupported) - def _parse_pp_directive(self) -> NoReturn: - tok = self._expect("PPHASH") - self._parse_error("Directives not supported yet", self._tok_coord(tok)) - - # BNF: pppragma_directive : PPPRAGMA PPPRAGMASTR? - # | _PRAGMA '(' string_literal ')' - def _parse_pppragma_directive(self) -> c_ast.Node: - if self._peek_type() == "PPPRAGMA": - tok = self._advance() - if self._peek_type() == "PPPRAGMASTR": - str_tok = self._advance() - return c_ast.Pragma(str_tok.value, self._tok_coord(str_tok)) - return c_ast.Pragma("", self._tok_coord(tok)) - - if self._peek_type() == "_PRAGMA": - tok = self._advance() - lparen = self._expect("LPAREN") - literal = self._parse_unified_string_literal() - self._expect("RPAREN") - return c_ast.Pragma(literal, self._tok_coord(lparen)) - - self._parse_error("Invalid pragma", self.clex.filename) - - # BNF: pppragma_directive_list : pppragma_directive+ - def _parse_pppragma_directive_list(self) -> List[c_ast.Node]: - pragmas = [] - while self._peek_type() in {"PPPRAGMA", "_PRAGMA"}: - pragmas.append(self._parse_pppragma_directive()) - return pragmas - - # BNF: static_assert : _STATIC_ASSERT '(' constant_expression (',' string_literal)? ')' - def _parse_static_assert(self) -> List[c_ast.Node]: - tok = self._expect("_STATIC_ASSERT") - self._expect("LPAREN") - cond = self._parse_constant_expression() - msg = None - if self._accept("COMMA"): - msg = self._parse_unified_string_literal() - self._expect("RPAREN") - return [c_ast.StaticAssert(cond, msg, self._tok_coord(tok))] - - -_ASSIGNMENT_OPS = { - "EQUALS", - "XOREQUAL", - "TIMESEQUAL", - "DIVEQUAL", - "MODEQUAL", - "PLUSEQUAL", - "MINUSEQUAL", - "LSHIFTEQUAL", - "RSHIFTEQUAL", - "ANDEQUAL", - "OREQUAL", -} - -# Precedence of operators (lower number = weather binding) -# If this changes, c_generator.CGenerator.precedence_map needs to change as -# well -_BINARY_PRECEDENCE = { - "LOR": 0, - "LAND": 1, - "OR": 2, - "XOR": 3, - "AND": 4, - "EQ": 5, - "NE": 5, - "GT": 6, - "GE": 6, - "LT": 6, - "LE": 6, - "RSHIFT": 7, - "LSHIFT": 7, - "PLUS": 8, - "MINUS": 8, - "TIMES": 9, - "DIVIDE": 9, - "MOD": 9, -} - -_STORAGE_CLASS = {"AUTO", "REGISTER", "STATIC", "EXTERN", "TYPEDEF", "_THREAD_LOCAL"} - -_FUNCTION_SPEC = {"INLINE", "_NORETURN"} - -_TYPE_QUALIFIER = {"CONST", "RESTRICT", "VOLATILE", "_ATOMIC"} - -_TYPE_SPEC_SIMPLE = { - "VOID", - "_BOOL", - "CHAR", - "SHORT", - "INT", - "LONG", - "FLOAT", - "DOUBLE", - "_COMPLEX", - "SIGNED", - "UNSIGNED", - "__INT128", -} - -_DECL_START = ( - _STORAGE_CLASS - | _FUNCTION_SPEC - | _TYPE_QUALIFIER - | _TYPE_SPEC_SIMPLE - | {"TYPEID", "STRUCT", "UNION", "ENUM", "_ALIGNAS", "_ATOMIC"} -) - -_EXPR_START = { - "ID", - "LPAREN", - "PLUSPLUS", - "MINUSMINUS", - "PLUS", - "MINUS", - "TIMES", - "AND", - "NOT", - "LNOT", - "SIZEOF", - "_ALIGNOF", - "OFFSETOF", -} - -_INT_CONST = { - "INT_CONST_DEC", - "INT_CONST_OCT", - "INT_CONST_HEX", - "INT_CONST_BIN", - "INT_CONST_CHAR", -} - -_FLOAT_CONST = {"FLOAT_CONST", "HEX_FLOAT_CONST"} - -_CHAR_CONST = { - "CHAR_CONST", - "WCHAR_CONST", - "U8CHAR_CONST", - "U16CHAR_CONST", - "U32CHAR_CONST", -} - -_STRING_LITERAL = {"STRING_LITERAL"} - -_WSTR_LITERAL = { - "WSTRING_LITERAL", - "U8STRING_LITERAL", - "U16STRING_LITERAL", - "U32STRING_LITERAL", -} - -_STARTS_EXPRESSION = ( - _EXPR_START - | _INT_CONST - | _FLOAT_CONST - | _CHAR_CONST - | _STRING_LITERAL - | _WSTR_LITERAL -) - -_STARTS_STATEMENT = { - "LBRACE", - "IF", - "SWITCH", - "WHILE", - "DO", - "FOR", - "GOTO", - "BREAK", - "CONTINUE", - "RETURN", - "CASE", - "DEFAULT", - "PPPRAGMA", - "_PRAGMA", - "_STATIC_ASSERT", - "SEMI", -} - - -class _TokenStream: - """Wraps a lexer to provide convenient, buffered access to the underlying - token stream. The lexer is expected to be initialized with the input - string already. - """ - - def __init__(self, lexer: CLexer) -> None: - self._lexer = lexer - self._buffer: List[Optional[_Token]] = [] - self._index = 0 - - def peek(self, k: int = 1) -> Optional[_Token]: - """Peek at the k-th next token in the stream, without consuming it. - - Examples: - k=1 returns the immediate next token. - k=2 returns the token after that. - """ - if k <= 0: - return None - self._fill(k) - return self._buffer[self._index + k - 1] - - def next(self) -> Optional[_Token]: - """Consume a single token and return it.""" - self._fill(1) - tok = self._buffer[self._index] - self._index += 1 - return tok - - # The 'mark' and 'reset' methods are useful for speculative parsing with - # backtracking; when the parser needs to examine a sequence of tokens - # and potentially decide to try a different path on the same sequence, it - # can call 'mark' to obtain the current token position, and if the first - # path fails restore the position with `reset(pos)`. - def mark(self) -> int: - return self._index - - def reset(self, mark: int) -> None: - self._index = mark - - def _fill(self, n: int) -> None: - while len(self._buffer) < self._index + n: - tok = self._lexer.token() - self._buffer.append(tok) - if tok is None: - break - - -# Declaration specifiers are represented by a dictionary with entries: -# - qual: a list of type qualifiers -# - storage: a list of storage class specifiers -# - type: a list of type specifiers -# - function: a list of function specifiers -# - alignment: a list of alignment specifiers -class _DeclSpec(TypedDict): - qual: List[Any] - storage: List[Any] - type: List[Any] - function: List[Any] - alignment: List[Any] - - -_DeclSpecKind = Literal["qual", "storage", "type", "function", "alignment"] - - -class _DeclInfo(TypedDict): - # Declarator payloads used by declaration/initializer parsing: - # - decl: the declarator node (may be None for abstract/implicit cases) - # - init: optional initializer expression - # - bitsize: optional bit-field width expression (for struct declarators) - decl: Optional[c_ast.Node] - init: Optional[c_ast.Node] - bitsize: Optional[c_ast.Node] diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/AUTHORS.txt b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/AUTHORS.txt deleted file mode 100644 index 6fad2f8..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/AUTHORS.txt +++ /dev/null @@ -1,56 +0,0 @@ -Here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- -people who have submitted patches, reported bugs, added translations, helped -answer newbie questions, and generally made Pyperclip that much better: - -Al Sweigart -Alexander Cobleigh ‏@cblgh -Andrea Scarpino https://github.com/ilpianista -Aniket Pandey https://github.com/lordaniket06 -Anton Yakutovich https://github.com/drakulavich -Brian Levin https://github.com/bnice5000 -Carvell Scott https://github.com/CarvellScott -Cees Timmerman https://github.com/CTimmerman -Chris Clark -Christopher Lambert https://github.com/XN137 -Chris Woerz https://github.com/erendrake -Corey Bryant https://github.com/coreycb -Daniel Shimon https://github.com/daniel-shimon -Edd Barrett https://github.com/vext01 -Eugene Yang https://github.com/eugene-yang -Felix Yan https://github.com/felixonmars -Fredrik Borg https://github.com/frbor -fthoma https://github.com/fthoma -Greg Witt https://github.com/GoodGuyGregory -hinlader https://github.com/hinlader -Hugo van Kemenade https://github.com/hugovk -Hynek Cernoch https://github.com/hynekcer -Jason R. Coombs https://github.com/jaraco -Jon Crall https://github.com/Erotemic -Jonathan Slenders https://github.com/jonathanslenders -JustAShoeMaker https://github.com/JustAShoeMaker -Marcelo Glezer https://github.com/gato -masajxxx https://github.com/masajxxx -Maximilian Hils https://github.com/mhils -mgunyho https://github.com/mgunyho -Michał Górny https://github.com/mgorny -Nicola Guerrera https://github.com/nik012003 -Nikolaos-Digenis Karagiannis https://github.com/Digenis -Nils Ohlmeier https://github.com/nils-ohlmeier -Orson Peters https://github.com/orlp -pgajdos https://github.com/pgajdos -PirateOfAndaman https://github.com/PirateOfAndaman -Six https://github.com/brbsix -Stefan Devai https://github.com/stefandevai -Stephen Finucane https://github.com/stephenfin -Stefan Scherfke https://github.com/sscherfke -Steve Elam -Tamir Bahar https://github.com/tmr232 -Terrel Shumway https://github.com/lernisto -Tim Cuthbertson https://github.com/timbertson -Tim Gates https://github.com/timgates42 -Todd Leonhardt https://github.com/tleonhardt -Troy Sankey https://github.com/pwnage101 -utagawa kiki https://github.com/utgwkk -Vertliba V.V. https://github.com/vertliba -Vince West https://github.com/dvincentwest -ZEDGR https://github.com/ZEDGR diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/LICENSE.txt b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/LICENSE.txt deleted file mode 100644 index bc31819..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/LICENSE.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014, Al Sweigart -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/METADATA deleted file mode 100644 index 34ae5f4..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/METADATA +++ /dev/null @@ -1,71 +0,0 @@ -Metadata-Version: 2.2 -Name: pyperclip -Version: 1.9.0 -Summary: A cross-platform clipboard module for Python. (Only handles plain text for now.) -Home-page: https://github.com/asweigart/pyperclip -Author: Al Sweigart -Author-email: al@inventwithpython.com -License: BSD -Keywords: clipboard copy paste clip xsel xclip -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Win32 (MS Windows) -Classifier: Environment :: X11 Applications -Classifier: Environment :: MacOS X -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -License-File: LICENSE.txt -License-File: AUTHORS.txt -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: home-page -Dynamic: keywords -Dynamic: license -Dynamic: summary - -Pyperclip is a cross-platform Python module for copy and paste clipboard functions. It works with Python 2 and 3. - -Install on Windows: `pip install pyperclip` - -Install on Linux/macOS: `pip3 install pyperclip` - -Al Sweigart al@inventwithpython.com -BSD License - -Example Usage -============= - - >>> import pyperclip - >>> pyperclip.copy('The text to be copied to the clipboard.') - >>> pyperclip.paste() - 'The text to be copied to the clipboard.' - - -Currently only handles plaintext. - -On Windows, no additional modules are needed. - -On Mac, this module makes use of the pbcopy and pbpaste commands, which should come with the os. - -On Linux, this module makes use of the xclip or xsel commands, which should come with the os. Otherwise run "sudo apt-get install xclip" or "sudo apt-get install xsel" (Note: xsel does not always seem to work.) - -Otherwise on Linux, you will need the qtpy or PyQT5 modules installed. - -Support -------- - -If you find this project helpful and would like to support its development, [consider donating to its creator on Patreon](https://www.patreon.com/AlSweigart). diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/RECORD deleted file mode 100644 index 3aaa5c4..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/RECORD +++ /dev/null @@ -1,11 +0,0 @@ -pyperclip-1.9.0.dist-info/AUTHORS.txt,sha256=doIGiedoVeE7CVHKoKNS5EI2v0S3nPC-UU24jNuZ_kw,2371 -pyperclip-1.9.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pyperclip-1.9.0.dist-info/LICENSE.txt,sha256=9Xk_TEsoHeHy-Szeso4x5X4tq4As6Wewu9EH7Vu8LjU,1514 -pyperclip-1.9.0.dist-info/METADATA,sha256=58gBaH09t_5jwvwXBoOXcE87hgHwlT4svvvX8flyCnw,2522 -pyperclip-1.9.0.dist-info/RECORD,, -pyperclip-1.9.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 -pyperclip-1.9.0.dist-info/top_level.txt,sha256=leI5OPkUKAOaQl9ATsm3ggu-DA_33DH76xC_nLGPH-I,10 -pyperclip/__init__.py,sha256=ifAXBhCPlpKJU8XIgo7IDRpasV7RiRJBmyQY7SYB26I,23919 -pyperclip/__main__.py,sha256=itIOl_l6GNHXx707JROTiNPcvZiU3xuhAk66dk3xlwY,765 -pyperclip/__pycache__/__init__.cpython-312.pyc,, -pyperclip/__pycache__/__main__.cpython-312.pyc,, diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/WHEEL deleted file mode 100644 index 505164b..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.8.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/top_level.txt deleted file mode 100644 index c9c47dd..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip-1.9.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pyperclip diff --git a/myenv/lib/python3.12/site-packages/pyperclip/__init__.py b/myenv/lib/python3.12/site-packages/pyperclip/__init__.py deleted file mode 100644 index 1fdd0d1..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip/__init__.py +++ /dev/null @@ -1,660 +0,0 @@ -""" -Pyperclip - -A cross-platform clipboard module for Python, with copy & paste functions for plain text. -By Al Sweigart al@inventwithpython.com -BSD License - -Usage: - import pyperclip - pyperclip.copy('The text to be copied to the clipboard.') - spam = pyperclip.paste() - - if not pyperclip.is_available(): - print("Copy functionality unavailable!") - -On Windows, no additional modules are needed. -On Mac, the pyobjc module is used, falling back to the pbcopy and pbpaste cli - commands. (These commands should come with OS X.). -On Linux, install xclip, xsel, or wl-clipboard (for "wayland" sessions) via package manager. -For example, in Debian: - sudo apt-get install xclip - sudo apt-get install xsel - sudo apt-get install wl-clipboard - -Otherwise on Linux, you will need the qtpy or PyQt5 modules installed. - -This module does not work with PyGObject yet. - -Cygwin is currently not supported. - -Security Note: This module runs programs with these names: - - which - - pbcopy - - pbpaste - - xclip - - xsel - - wl-copy/wl-paste - - klipper - - qdbus -A malicious user could rename or add programs with these names, tricking -Pyperclip into running them with whatever permissions the Python process has. - -""" -__version__ = '1.9.0' - -import base64 -import contextlib -import ctypes -import os -import platform -import subprocess -import sys -import time -import warnings - -from ctypes import c_size_t, sizeof, c_wchar_p, get_errno, c_wchar -from typing import Union, Optional - - -_IS_RUNNING_PYTHON_2 = sys.version_info[0] == 2 # type: bool - -# For paste(): Python 3 uses str, Python 2 uses unicode. -if _IS_RUNNING_PYTHON_2: - # mypy complains about `unicode` for Python 2, so we ignore the type error: - _PYTHON_STR_TYPE = unicode # type: ignore -else: - _PYTHON_STR_TYPE = str - -ENCODING = 'utf-8' # type: str - -try: - # Use shutil.which() for Python 3+ - from shutil import which - def _py3_executable_exists(name): # type: (str) -> bool - return bool(which(name)) - _executable_exists = _py3_executable_exists -except ImportError: - # Use the "which" unix command for Python 2.7 and prior. - def _py2_executable_exists(name): # type: (str) -> bool - return subprocess.call(['which', name], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0 - _executable_exists = _py2_executable_exists - -# Exceptions -class PyperclipException(RuntimeError): - pass - -class PyperclipWindowsException(PyperclipException): - def __init__(self, message): - message += " (%s)" % ctypes.WinError() - super(PyperclipWindowsException, self).__init__(message) - -class PyperclipTimeoutException(PyperclipException): - pass - - -def init_osx_pbcopy_clipboard(): - def copy_osx_pbcopy(text): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - p = subprocess.Popen(['pbcopy', 'w'], - stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=text.encode(ENCODING)) - - def paste_osx_pbcopy(): - p = subprocess.Popen(['pbpaste', 'r'], - stdout=subprocess.PIPE, close_fds=True) - stdout, stderr = p.communicate() - return stdout.decode(ENCODING) - - return copy_osx_pbcopy, paste_osx_pbcopy - - -def init_osx_pyobjc_clipboard(): - def copy_osx_pyobjc(text): - '''Copy string argument to clipboard''' - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - newStr = Foundation.NSString.stringWithString_(text).nsstring() - newData = newStr.dataUsingEncoding_(Foundation.NSUTF8StringEncoding) - board = AppKit.NSPasteboard.generalPasteboard() - board.declareTypes_owner_([AppKit.NSStringPboardType], None) - board.setData_forType_(newData, AppKit.NSStringPboardType) - - def paste_osx_pyobjc(): - "Returns contents of clipboard" - board = AppKit.NSPasteboard.generalPasteboard() - content = board.stringForType_(AppKit.NSStringPboardType) - return content - - return copy_osx_pyobjc, paste_osx_pyobjc - - -def init_qt_clipboard(): - global QApplication - # $DISPLAY should exist - - # Try to import from qtpy, but if that fails try PyQt5 - try: - from qtpy.QtWidgets import QApplication - except: - from PyQt5.QtWidgets import QApplication - - app = QApplication.instance() - if app is None: - app = QApplication([]) - - def copy_qt(text): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - cb = app.clipboard() - cb.setText(text) - - def paste_qt(): - cb = app.clipboard() - return _PYTHON_STR_TYPE(cb.text()) - - return copy_qt, paste_qt - - -def init_xclip_clipboard(): - DEFAULT_SELECTION='c' - PRIMARY_SELECTION='p' - - def copy_xclip(text, primary=False): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - selection=DEFAULT_SELECTION - if primary: - selection=PRIMARY_SELECTION - p = subprocess.Popen(['xclip', '-selection', selection], - stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=text.encode(ENCODING)) - - def paste_xclip(primary=False): - selection=DEFAULT_SELECTION - if primary: - selection=PRIMARY_SELECTION - p = subprocess.Popen(['xclip', '-selection', selection, '-o'], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - stdout, stderr = p.communicate() - # Intentionally ignore extraneous output on stderr when clipboard is empty - return stdout.decode(ENCODING) - - return copy_xclip, paste_xclip - - -def init_xsel_clipboard(): - DEFAULT_SELECTION='-b' - PRIMARY_SELECTION='-p' - - def copy_xsel(text, primary=False): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - selection_flag = DEFAULT_SELECTION - if primary: - selection_flag = PRIMARY_SELECTION - p = subprocess.Popen(['xsel', selection_flag, '-i'], - stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=text.encode(ENCODING)) - - def paste_xsel(primary=False): - selection_flag = DEFAULT_SELECTION - if primary: - selection_flag = PRIMARY_SELECTION - p = subprocess.Popen(['xsel', selection_flag, '-o'], - stdout=subprocess.PIPE, close_fds=True) - stdout, stderr = p.communicate() - return stdout.decode(ENCODING) - - return copy_xsel, paste_xsel - - -def init_wl_clipboard(): - PRIMARY_SELECTION = "-p" - - def copy_wl(text, primary=False): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - args = ["wl-copy"] - if primary: - args.append(PRIMARY_SELECTION) - if not text: - args.append('--clear') - subprocess.check_call(args, close_fds=True) - else: - pass - p = subprocess.Popen(args, stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=text.encode(ENCODING)) - - def paste_wl(primary=False): - args = ["wl-paste", "-n", "-t", "text"] - if primary: - args.append(PRIMARY_SELECTION) - p = subprocess.Popen(args, stdout=subprocess.PIPE, close_fds=True) - stdout, _stderr = p.communicate() - return stdout.decode(ENCODING) - - return copy_wl, paste_wl - - -def init_klipper_clipboard(): - def copy_klipper(text): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - p = subprocess.Popen( - ['qdbus', 'org.kde.klipper', '/klipper', 'setClipboardContents', - text.encode(ENCODING)], - stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=None) - - def paste_klipper(): - p = subprocess.Popen( - ['qdbus', 'org.kde.klipper', '/klipper', 'getClipboardContents'], - stdout=subprocess.PIPE, close_fds=True) - stdout, stderr = p.communicate() - - # Workaround for https://bugs.kde.org/show_bug.cgi?id=342874 - # TODO: https://github.com/asweigart/pyperclip/issues/43 - clipboardContents = stdout.decode(ENCODING) - # even if blank, Klipper will append a newline at the end - assert len(clipboardContents) > 0 - # make sure that newline is there - assert clipboardContents.endswith('\n') - if clipboardContents.endswith('\n'): - clipboardContents = clipboardContents[:-1] - return clipboardContents - - return copy_klipper, paste_klipper - - -def init_dev_clipboard_clipboard(): - def copy_dev_clipboard(text): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - if text == '': - warnings.warn('Pyperclip cannot copy a blank string to the clipboard on Cygwin. This is effectively a no-op.') - if '\r' in text: - warnings.warn('Pyperclip cannot handle \\r characters on Cygwin.') - - fo = open('/dev/clipboard', 'wt') - fo.write(text) - fo.close() - - def paste_dev_clipboard(): - fo = open('/dev/clipboard', 'rt') - content = fo.read() - fo.close() - return content - - return copy_dev_clipboard, paste_dev_clipboard - - -def init_no_clipboard(): - class ClipboardUnavailable(object): - - def __call__(self, *args, **kwargs): - additionalInfo = '' - if sys.platform == 'linux': - additionalInfo = '\nOn Linux, you can run `sudo apt-get install xclip` or `sudo apt-get install xselect` to install a copy/paste mechanism.' - raise PyperclipException('Pyperclip could not find a copy/paste mechanism for your system. For more information, please visit https://pyperclip.readthedocs.io/en/latest/index.html#not-implemented-error' + additionalInfo) - - if _IS_RUNNING_PYTHON_2: - def __nonzero__(self): - return False - else: - def __bool__(self): - return False - - return ClipboardUnavailable(), ClipboardUnavailable() - - - - -# Windows-related clipboard functions: -class CheckedCall(object): - def __init__(self, f): - super(CheckedCall, self).__setattr__("f", f) - - def __call__(self, *args): - ret = self.f(*args) - if not ret and get_errno(): - raise PyperclipWindowsException("Error calling " + self.f.__name__) - return ret - - def __setattr__(self, key, value): - setattr(self.f, key, value) - - -def init_windows_clipboard(): - global HGLOBAL, LPVOID, DWORD, LPCSTR, INT, HWND, HINSTANCE, HMENU, BOOL, UINT, HANDLE - from ctypes.wintypes import (HGLOBAL, LPVOID, DWORD, LPCSTR, INT, HWND, - HINSTANCE, HMENU, BOOL, UINT, HANDLE) - - windll = ctypes.windll - msvcrt = ctypes.CDLL('msvcrt') - - safeCreateWindowExA = CheckedCall(windll.user32.CreateWindowExA) - safeCreateWindowExA.argtypes = [DWORD, LPCSTR, LPCSTR, DWORD, INT, INT, - INT, INT, HWND, HMENU, HINSTANCE, LPVOID] - safeCreateWindowExA.restype = HWND - - safeDestroyWindow = CheckedCall(windll.user32.DestroyWindow) - safeDestroyWindow.argtypes = [HWND] - safeDestroyWindow.restype = BOOL - - OpenClipboard = windll.user32.OpenClipboard - OpenClipboard.argtypes = [HWND] - OpenClipboard.restype = BOOL - - safeCloseClipboard = CheckedCall(windll.user32.CloseClipboard) - safeCloseClipboard.argtypes = [] - safeCloseClipboard.restype = BOOL - - safeEmptyClipboard = CheckedCall(windll.user32.EmptyClipboard) - safeEmptyClipboard.argtypes = [] - safeEmptyClipboard.restype = BOOL - - safeGetClipboardData = CheckedCall(windll.user32.GetClipboardData) - safeGetClipboardData.argtypes = [UINT] - safeGetClipboardData.restype = HANDLE - - safeSetClipboardData = CheckedCall(windll.user32.SetClipboardData) - safeSetClipboardData.argtypes = [UINT, HANDLE] - safeSetClipboardData.restype = HANDLE - - safeGlobalAlloc = CheckedCall(windll.kernel32.GlobalAlloc) - safeGlobalAlloc.argtypes = [UINT, c_size_t] - safeGlobalAlloc.restype = HGLOBAL - - safeGlobalLock = CheckedCall(windll.kernel32.GlobalLock) - safeGlobalLock.argtypes = [HGLOBAL] - safeGlobalLock.restype = LPVOID - - safeGlobalUnlock = CheckedCall(windll.kernel32.GlobalUnlock) - safeGlobalUnlock.argtypes = [HGLOBAL] - safeGlobalUnlock.restype = BOOL - - wcslen = CheckedCall(msvcrt.wcslen) - wcslen.argtypes = [c_wchar_p] - wcslen.restype = UINT - - GMEM_MOVEABLE = 0x0002 - CF_UNICODETEXT = 13 - - @contextlib.contextmanager - def window(): - """ - Context that provides a valid Windows hwnd. - """ - # we really just need the hwnd, so setting "STATIC" - # as predefined lpClass is just fine. - hwnd = safeCreateWindowExA(0, b"STATIC", None, 0, 0, 0, 0, 0, - None, None, None, None) - try: - yield hwnd - finally: - safeDestroyWindow(hwnd) - - @contextlib.contextmanager - def clipboard(hwnd): - """ - Context manager that opens the clipboard and prevents - other applications from modifying the clipboard content. - """ - # We may not get the clipboard handle immediately because - # some other application is accessing it (?) - # We try for at least 500ms to get the clipboard. - t = time.time() + 0.5 - success = False - while time.time() < t: - success = OpenClipboard(hwnd) - if success: - break - time.sleep(0.01) - if not success: - raise PyperclipWindowsException("Error calling OpenClipboard") - - try: - yield - finally: - safeCloseClipboard() - - def copy_windows(text): - # This function is heavily based on - # http://msdn.com/ms649016#_win32_Copying_Information_to_the_Clipboard - - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - - with window() as hwnd: - # http://msdn.com/ms649048 - # If an application calls OpenClipboard with hwnd set to NULL, - # EmptyClipboard sets the clipboard owner to NULL; - # this causes SetClipboardData to fail. - # => We need a valid hwnd to copy something. - with clipboard(hwnd): - safeEmptyClipboard() - - if text: - # http://msdn.com/ms649051 - # If the hMem parameter identifies a memory object, - # the object must have been allocated using the - # function with the GMEM_MOVEABLE flag. - count = wcslen(text) + 1 - handle = safeGlobalAlloc(GMEM_MOVEABLE, - count * sizeof(c_wchar)) - locked_handle = safeGlobalLock(handle) - - ctypes.memmove(c_wchar_p(locked_handle), c_wchar_p(text), count * sizeof(c_wchar)) - - safeGlobalUnlock(handle) - safeSetClipboardData(CF_UNICODETEXT, handle) - - def paste_windows(): - with clipboard(None): - handle = safeGetClipboardData(CF_UNICODETEXT) - if not handle: - # GetClipboardData may return NULL with errno == NO_ERROR - # if the clipboard is empty. - # (Also, it may return a handle to an empty buffer, - # but technically that's not empty) - return "" - locked_handle = safeGlobalLock(handle) - return_value = c_wchar_p(locked_handle).value - safeGlobalUnlock(handle) - return return_value - - return copy_windows, paste_windows - - -def init_wsl_clipboard(): - - def copy_wsl(text): - text = _PYTHON_STR_TYPE(text) # Converts non-str values to str. - p = subprocess.Popen(['clip.exe'], - stdin=subprocess.PIPE, close_fds=True) - p.communicate(input=text.encode('utf-16le')) - - def paste_wsl(): - ps_script = '[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes((Get-Clipboard -Raw)))' - - # '-noprofile' speeds up load time - p = subprocess.Popen(['powershell.exe', '-noprofile', '-command', ps_script], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - stdout, stderr = p.communicate() - - if stderr: - raise Exception(f"Error pasting from clipboard: {stderr}") - - try: - base64_encoded = stdout.decode('utf-8').strip() - decoded_bytes = base64.b64decode(base64_encoded) - return decoded_bytes.decode('utf-8') - except Exception as e: - raise RuntimeError(f"Decoding error: {e}") - - return copy_wsl, paste_wsl - - -# Automatic detection of clipboard mechanisms and importing is done in determine_clipboard(): -def determine_clipboard(): - ''' - Determine the OS/platform and set the copy() and paste() functions - accordingly. - ''' - - global Foundation, AppKit, qtpy, PyQt5 - - # Setup for the CYGWIN platform: - if 'cygwin' in platform.system().lower(): # Cygwin has a variety of values returned by platform.system(), such as 'CYGWIN_NT-6.1' - # FIXME: pyperclip currently does not support Cygwin, - # see https://github.com/asweigart/pyperclip/issues/55 - if os.path.exists('/dev/clipboard'): - warnings.warn('Pyperclip\'s support for Cygwin is not perfect, see https://github.com/asweigart/pyperclip/issues/55') - return init_dev_clipboard_clipboard() - - # Setup for the WINDOWS platform: - elif os.name == 'nt' or platform.system() == 'Windows': - return init_windows_clipboard() - - if platform.system() == 'Linux' and os.path.isfile('/proc/version'): - with open('/proc/version', 'r') as f: - if "microsoft" in f.read().lower(): - return init_wsl_clipboard() - - # Setup for the MAC OS X platform: - if os.name == 'mac' or platform.system() == 'Darwin': - try: - import Foundation # check if pyobjc is installed - import AppKit - except ImportError: - return init_osx_pbcopy_clipboard() - else: - return init_osx_pyobjc_clipboard() - - # Setup for the LINUX platform: - - if os.getenv("WAYLAND_DISPLAY") and _executable_exists("wl-copy") and _executable_exists("wl-paste"): - return init_wl_clipboard() - - # `import PyQt4` sys.exit()s if DISPLAY is not in the environment. - # Thus, we need to detect the presence of $DISPLAY manually - # and not load PyQt4 if it is absent. - elif os.getenv("DISPLAY"): - if _executable_exists("xclip"): - # Note: 2024/06/18 Google Trends shows xclip as more popular than xsel. - return init_xclip_clipboard() - if _executable_exists("xsel"): - return init_xsel_clipboard() - if _executable_exists("klipper") and _executable_exists("qdbus"): - return init_klipper_clipboard() - - try: - # qtpy is a small abstraction layer that lets you write - # applications using a single api call to either PyQt or PySide. - # https://pypi.python.org/pypi/QtPy - import qtpy # check if qtpy is installed - return init_qt_clipboard() - except ImportError: - pass - - # If qtpy isn't installed, fall back on importing PyQt5 - try: - import PyQt5 # check if PyQt5 is installed - return init_qt_clipboard() - except ImportError: - pass - - return init_no_clipboard() - - -def set_clipboard(clipboard): - ''' - Explicitly sets the clipboard mechanism. The "clipboard mechanism" is how - the copy() and paste() functions interact with the operating system to - implement the copy/paste feature. The clipboard parameter must be one of: - - pbcopy - - pbobjc (default on Mac OS X) - - qt - - xclip - - xsel - - klipper - - windows (default on Windows) - - no (this is what is set when no clipboard mechanism can be found) - ''' - global copy, paste - - clipboard_types = { - "pbcopy": init_osx_pbcopy_clipboard, - "pyobjc": init_osx_pyobjc_clipboard, - "qt": init_qt_clipboard, # TODO - split this into 'qtpy' and 'pyqt5' - "xclip": init_xclip_clipboard, - "xsel": init_xsel_clipboard, - "wl-clipboard": init_wl_clipboard, - "klipper": init_klipper_clipboard, - "windows": init_windows_clipboard, - "no": init_no_clipboard, - } - - if clipboard not in clipboard_types: - raise ValueError('Argument must be one of %s' % (', '.join([repr(_) for _ in clipboard_types.keys()]))) - - # Sets pyperclip's copy() and paste() functions: - copy, paste = clipboard_types[clipboard]() - - -def lazy_load_stub_copy(text): - ''' - A stub function for copy(), which will load the real copy() function when - called so that the real copy() function is used for later calls. - - This allows users to import pyperclip without having determine_clipboard() - automatically run, which will automatically select a clipboard mechanism. - This could be a problem if it selects, say, the memory-heavy PyQt5 module - but the user was just going to immediately call set_clipboard() to use a - different clipboard mechanism. - - The lazy loading this stub function implements gives the user a chance to - call set_clipboard() to pick another clipboard mechanism. Or, if the user - simply calls copy() or paste() without calling set_clipboard() first, - will fall back on whatever clipboard mechanism that determine_clipboard() - automatically chooses. - ''' - global copy, paste - copy, paste = determine_clipboard() - return copy(text) - - -def lazy_load_stub_paste(): - ''' - A stub function for paste(), which will load the real paste() function when - called so that the real paste() function is used for later calls. - - This allows users to import pyperclip without having determine_clipboard() - automatically run, which will automatically select a clipboard mechanism. - This could be a problem if it selects, say, the memory-heavy PyQt5 module - but the user was just going to immediately call set_clipboard() to use a - different clipboard mechanism. - - The lazy loading this stub function implements gives the user a chance to - call set_clipboard() to pick another clipboard mechanism. Or, if the user - simply calls copy() or paste() without calling set_clipboard() first, - will fall back on whatever clipboard mechanism that determine_clipboard() - automatically chooses. - ''' - global copy, paste - copy, paste = determine_clipboard() - return paste() - - -def is_available(): - return copy != lazy_load_stub_copy and paste != lazy_load_stub_paste - - -# Initially, copy() and paste() are set to lazy loading wrappers which will -# set `copy` and `paste` to real functions the first time they're used, unless -# set_clipboard() or determine_clipboard() is called first. -copy, paste = lazy_load_stub_copy, lazy_load_stub_paste - - - -__all__ = ['copy', 'paste', 'set_clipboard', 'determine_clipboard'] - - diff --git a/myenv/lib/python3.12/site-packages/pyperclip/__main__.py b/myenv/lib/python3.12/site-packages/pyperclip/__main__.py deleted file mode 100644 index dfde37f..0000000 --- a/myenv/lib/python3.12/site-packages/pyperclip/__main__.py +++ /dev/null @@ -1,18 +0,0 @@ -import pyperclip -import sys - -if len(sys.argv) > 1 and sys.argv[1] in ('-c', '--copy'): - if len(sys.argv) > 2: - pyperclip.copy(sys.argv[2]) - else: - pyperclip.copy(sys.stdin.read()) -elif len(sys.argv) > 1 and sys.argv[1] in ('-p', '--paste'): - sys.stdout.write(pyperclip.paste()) -else: - print('Usage: python -m pyperclip [-c | --copy] [text_to_copy] | [-p | --paste]') - print() - print('If a text_to_copy argument is provided, it is copied to the') - print('clipboard. Otherwise, the stdin stream is copied to the') - print('clipboard. (If reading this in from the keyboard, press') - print('CTRL-Z on Windows or CTRL-D on Linux/macOS to stop.') - print('When pasting, the clipboard will be written to stdout.') \ No newline at end of file diff --git a/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f5897ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__main__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__main__.cpython-312.pyc deleted file mode 100644 index 40be165..0000000 Binary files a/myenv/lib/python3.12/site-packages/pyperclip/__pycache__/__main__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/LICENSE deleted file mode 100644 index 1e65815..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/LICENSE +++ /dev/null @@ -1,54 +0,0 @@ -Copyright 2017- Paul Ganssle -Copyright 2017- dateutil contributors (see AUTHORS file) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -The above license applies to all contributions after 2017-12-01, as well as -all contributions that have been re-licensed (see AUTHORS file for the list of -contributors who have re-licensed their code). --------------------------------------------------------------------------------- -dateutil - Extensions to the standard Python datetime module. - -Copyright (c) 2003-2011 - Gustavo Niemeyer -Copyright (c) 2012-2014 - Tomi Pieviläinen -Copyright (c) 2014-2016 - Yaron de Leeuw -Copyright (c) 2015- - Paul Ganssle -Copyright (c) 2015- - dateutil contributors (see AUTHORS file) - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The above BSD License Applies to all code, even that also covered by Apache 2.0. \ No newline at end of file diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA deleted file mode 100644 index 577f2bf..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA +++ /dev/null @@ -1,204 +0,0 @@ -Metadata-Version: 2.1 -Name: python-dateutil -Version: 2.9.0.post0 -Summary: Extensions to the standard Python datetime module -Home-page: https://github.com/dateutil/dateutil -Author: Gustavo Niemeyer -Author-email: gustavo@niemeyer.net -Maintainer: Paul Ganssle -Maintainer-email: dateutil@python.org -License: Dual License -Project-URL: Documentation, https://dateutil.readthedocs.io/en/stable/ -Project-URL: Source, https://github.com/dateutil/dateutil -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Topic :: Software Development :: Libraries -Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,>=2.7 -Description-Content-Type: text/x-rst -License-File: LICENSE -Requires-Dist: six >=1.5 - -dateutil - powerful extensions to datetime -========================================== - -|pypi| |support| |licence| - -|gitter| |readthedocs| - -|travis| |appveyor| |pipelines| |coverage| - -.. |pypi| image:: https://img.shields.io/pypi/v/python-dateutil.svg?style=flat-square - :target: https://pypi.org/project/python-dateutil/ - :alt: pypi version - -.. |support| image:: https://img.shields.io/pypi/pyversions/python-dateutil.svg?style=flat-square - :target: https://pypi.org/project/python-dateutil/ - :alt: supported Python version - -.. |travis| image:: https://img.shields.io/travis/dateutil/dateutil/master.svg?style=flat-square&label=Travis%20Build - :target: https://travis-ci.org/dateutil/dateutil - :alt: travis build status - -.. |appveyor| image:: https://img.shields.io/appveyor/ci/dateutil/dateutil/master.svg?style=flat-square&logo=appveyor - :target: https://ci.appveyor.com/project/dateutil/dateutil - :alt: appveyor build status - -.. |pipelines| image:: https://dev.azure.com/pythondateutilazure/dateutil/_apis/build/status/dateutil.dateutil?branchName=master - :target: https://dev.azure.com/pythondateutilazure/dateutil/_build/latest?definitionId=1&branchName=master - :alt: azure pipelines build status - -.. |coverage| image:: https://codecov.io/gh/dateutil/dateutil/branch/master/graphs/badge.svg?branch=master - :target: https://codecov.io/gh/dateutil/dateutil?branch=master - :alt: Code coverage - -.. |gitter| image:: https://badges.gitter.im/dateutil/dateutil.svg - :alt: Join the chat at https://gitter.im/dateutil/dateutil - :target: https://gitter.im/dateutil/dateutil - -.. |licence| image:: https://img.shields.io/pypi/l/python-dateutil.svg?style=flat-square - :target: https://pypi.org/project/python-dateutil/ - :alt: licence - -.. |readthedocs| image:: https://img.shields.io/readthedocs/dateutil/latest.svg?style=flat-square&label=Read%20the%20Docs - :alt: Read the documentation at https://dateutil.readthedocs.io/en/latest/ - :target: https://dateutil.readthedocs.io/en/latest/ - -The `dateutil` module provides powerful extensions to -the standard `datetime` module, available in Python. - -Installation -============ -`dateutil` can be installed from PyPI using `pip` (note that the package name is -different from the importable name):: - - pip install python-dateutil - -Download -======== -dateutil is available on PyPI -https://pypi.org/project/python-dateutil/ - -The documentation is hosted at: -https://dateutil.readthedocs.io/en/stable/ - -Code -==== -The code and issue tracker are hosted on GitHub: -https://github.com/dateutil/dateutil/ - -Features -======== - -* Computing of relative deltas (next month, next year, - next Monday, last week of month, etc); -* Computing of relative deltas between two given - date and/or datetime objects; -* Computing of dates based on very flexible recurrence rules, - using a superset of the `iCalendar `_ - specification. Parsing of RFC strings is supported as well. -* Generic parsing of dates in almost any string format; -* Timezone (tzinfo) implementations for tzfile(5) format - files (/etc/localtime, /usr/share/zoneinfo, etc), TZ - environment string (in all known formats), iCalendar - format files, given ranges (with help from relative deltas), - local machine timezone, fixed offset timezone, UTC timezone, - and Windows registry-based time zones. -* Internal up-to-date world timezone information based on - Olson's database. -* Computing of Easter Sunday dates for any given year, - using Western, Orthodox or Julian algorithms; -* A comprehensive test suite. - -Quick example -============= -Here's a snapshot, just to give an idea about the power of the -package. For more examples, look at the documentation. - -Suppose you want to know how much time is left, in -years/months/days/etc, before the next easter happening on a -year with a Friday 13th in August, and you want to get today's -date out of the "date" unix system command. Here is the code: - -.. code-block:: python3 - - >>> from dateutil.relativedelta import * - >>> from dateutil.easter import * - >>> from dateutil.rrule import * - >>> from dateutil.parser import * - >>> from datetime import * - >>> now = parse("Sat Oct 11 17:13:46 UTC 2003") - >>> today = now.date() - >>> year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year - >>> rdelta = relativedelta(easter(year), today) - >>> print("Today is: %s" % today) - Today is: 2003-10-11 - >>> print("Year with next Aug 13th on a Friday is: %s" % year) - Year with next Aug 13th on a Friday is: 2004 - >>> print("How far is the Easter of that year: %s" % rdelta) - How far is the Easter of that year: relativedelta(months=+6) - >>> print("And the Easter of that year is: %s" % (today+rdelta)) - And the Easter of that year is: 2004-04-11 - -Being exactly 6 months ahead was **really** a coincidence :) - -Contributing -============ - -We welcome many types of contributions - bug reports, pull requests (code, infrastructure or documentation fixes). For more information about how to contribute to the project, see the ``CONTRIBUTING.md`` file in the repository. - - -Author -====== -The dateutil module was written by Gustavo Niemeyer -in 2003. - -It is maintained by: - -* Gustavo Niemeyer 2003-2011 -* Tomi Pieviläinen 2012-2014 -* Yaron de Leeuw 2014-2016 -* Paul Ganssle 2015- - -Starting with version 2.4.1 and running until 2.8.2, all source and binary -distributions will be signed by a PGP key that has, at the very least, been -signed by the key which made the previous release. A table of release signing -keys can be found below: - -=========== ============================ -Releases Signing key fingerprint -=========== ============================ -2.4.1-2.8.2 `6B49 ACBA DCF6 BD1C A206 67AB CD54 FCE3 D964 BEFB`_ -=========== ============================ - -New releases *may* have signed tags, but binary and source distributions -uploaded to PyPI will no longer have GPG signatures attached. - -Contact -======= -Our mailing list is available at `dateutil@python.org `_. As it is hosted by the PSF, it is subject to the `PSF code of -conduct `_. - -License -======= - -All contributions after December 1, 2017 released under dual license - either `Apache 2.0 License `_ or the `BSD 3-Clause License `_. Contributions before December 1, 2017 - except those those explicitly relicensed - are released only under the BSD 3-Clause License. - - -.. _6B49 ACBA DCF6 BD1C A206 67AB CD54 FCE3 D964 BEFB: - https://pgp.mit.edu/pks/lookup?op=vindex&search=0xCD54FCE3D964BEFB diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD deleted file mode 100644 index 8abf769..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD +++ /dev/null @@ -1,44 +0,0 @@ -dateutil/__init__.py,sha256=Mqam67WO9IkTmUFyI66vS6IoSXTp9G388DadH2LCMLY,620 -dateutil/__pycache__/__init__.cpython-312.pyc,, -dateutil/__pycache__/_common.cpython-312.pyc,, -dateutil/__pycache__/_version.cpython-312.pyc,, -dateutil/__pycache__/easter.cpython-312.pyc,, -dateutil/__pycache__/relativedelta.cpython-312.pyc,, -dateutil/__pycache__/rrule.cpython-312.pyc,, -dateutil/__pycache__/tzwin.cpython-312.pyc,, -dateutil/__pycache__/utils.cpython-312.pyc,, -dateutil/_common.py,sha256=77w0yytkrxlYbSn--lDVPUMabUXRR9I3lBv_vQRUqUY,932 -dateutil/_version.py,sha256=BV031OxDDAmy58neUg5yyqLkLaqIw7ibK9As3jiMib0,166 -dateutil/easter.py,sha256=dyBi-lKvimH1u_k6p7Z0JJK72QhqVtVBsqByvpEPKvc,2678 -dateutil/parser/__init__.py,sha256=wWk6GFuxTpjoggCGtgkceJoti4pVjl4_fHQXpNOaSYg,1766 -dateutil/parser/__pycache__/__init__.cpython-312.pyc,, -dateutil/parser/__pycache__/_parser.cpython-312.pyc,, -dateutil/parser/__pycache__/isoparser.cpython-312.pyc,, -dateutil/parser/_parser.py,sha256=7klDdyicksQB_Xgl-3UAmBwzCYor1AIZqklIcT6dH_8,58796 -dateutil/parser/isoparser.py,sha256=8Fy999bnCd1frSdOYuOraWfJTtd5W7qQ51NwNuH_hXM,13233 -dateutil/relativedelta.py,sha256=IY_mglMjoZbYfrvloTY2ce02aiVjPIkiZfqgNTZRfuA,24903 -dateutil/rrule.py,sha256=KJzKlaCd1jEbu4A38ZltslaoAUh9nSbdbOFdjp70Kew,66557 -dateutil/tz/__init__.py,sha256=F-Mz13v6jYseklQf9Te9J6nzcLDmq47gORa61K35_FA,444 -dateutil/tz/__pycache__/__init__.cpython-312.pyc,, -dateutil/tz/__pycache__/_common.cpython-312.pyc,, -dateutil/tz/__pycache__/_factories.cpython-312.pyc,, -dateutil/tz/__pycache__/tz.cpython-312.pyc,, -dateutil/tz/__pycache__/win.cpython-312.pyc,, -dateutil/tz/_common.py,sha256=cgzDTANsOXvEc86cYF77EsliuSab8Puwpsl5-bX3_S4,12977 -dateutil/tz/_factories.py,sha256=unb6XQNXrPMveksTCU-Ag8jmVZs4SojoPUcAHpWnrvU,2569 -dateutil/tz/tz.py,sha256=EUnEdMfeThXiY6l4sh9yBabZ63_POzy01zSsh9thn1o,62855 -dateutil/tz/win.py,sha256=xJszWgSwE1xPx_HJj4ZkepyukC_hNy016WMcXhbRaB8,12935 -dateutil/tzwin.py,sha256=7Ar4vdQCnnM0mKR3MUjbIKsZrBVfHgdwsJZc_mGYRew,59 -dateutil/utils.py,sha256=dKCchEw8eObi0loGTx91unBxm_7UGlU3v_FjFMdqwYM,1965 -dateutil/zoneinfo/__init__.py,sha256=KYg0pthCMjcp5MXSEiBJn3nMjZeNZav7rlJw5-tz1S4,5889 -dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc,, -dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc,, -dateutil/zoneinfo/dateutil-zoneinfo.tar.gz,sha256=0-pS57bpaN4NiE3xKIGTWW-pW4A9tPkqGCeac5gARHU,156400 -dateutil/zoneinfo/rebuild.py,sha256=MiqYzCIHvNbMH-LdRYLv-4T0EIA7hDKt5GLR0IRTLdI,2392 -python_dateutil-2.9.0.post0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -python_dateutil-2.9.0.post0.dist-info/LICENSE,sha256=ugD1Gg2SgjtaHN4n2LW50jIeZ-2NqbwWPv-W1eF-V34,2889 -python_dateutil-2.9.0.post0.dist-info/METADATA,sha256=qdQ22jIr6AgzL5jYgyWZjofLaTpniplp_rTPrXKabpM,8354 -python_dateutil-2.9.0.post0.dist-info/RECORD,, -python_dateutil-2.9.0.post0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110 -python_dateutil-2.9.0.post0.dist-info/top_level.txt,sha256=4tjdWkhRZvF7LA_BYe_L9gB2w_p2a-z5y6ArjaRkot8,9 -python_dateutil-2.9.0.post0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/WHEEL deleted file mode 100644 index 4724c45..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/top_level.txt deleted file mode 100644 index 6650148..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -dateutil diff --git a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/zip-safe b/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/myenv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/LICENSE deleted file mode 100644 index bb4b0c7..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Copyright (c) 2011, Lincoln Loop -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the package name nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------------------- - - -Original text and license from the pyqrnative package where this was forked -from (http://code.google.com/p/pyqrnative): - -#Ported from the Javascript library by Sam Curren -# -#QRCode for Javascript -#http://d-project.googlecode.com/svn/trunk/misc/qrcode/js/qrcode.js -# -#Copyright (c) 2009 Kazuhiko Arase -# -#URL: http://www.d-project.com/ -# -#Licensed under the MIT license: -# http://www.opensource.org/licenses/mit-license.php -# -# The word "QR Code" is registered trademark of -# DENSO WAVE INCORPORATED -# http://www.denso-wave.com/qrcode/faqpatent-e.html diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/METADATA b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/METADATA deleted file mode 100644 index 3e84181..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/METADATA +++ /dev/null @@ -1,668 +0,0 @@ -Metadata-Version: 2.1 -Name: qrcode -Version: 8.2 -Summary: QR Code image generator -Home-page: https://github.com/lincolnloop/python-qrcode -License: BSD -Keywords: qr,denso-wave,IEC18004 -Author: Lincoln Loop -Author-email: info@lincolnloop.com -Requires-Python: >=3.9,<4.0 -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: License :: Other/Proprietary License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.13 -Classifier: Topic :: Multimedia :: Graphics -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Provides-Extra: all -Provides-Extra: pil -Provides-Extra: png -Requires-Dist: colorama ; sys_platform == "win32" -Requires-Dist: pillow (>=9.1.0) ; extra == "pil" or extra == "all" -Requires-Dist: pypng ; extra == "png" or extra == "all" -Description-Content-Type: text/x-rst - -============================= -Pure python QR Code generator -============================= - -Generate QR codes. - -A standard install uses pypng_ to generate PNG files and can also render QR -codes directly to the console. A standard install is just:: - - pip install qrcode - -For more image functionality, install qrcode with the ``pil`` dependency so -that pillow_ is installed and can be used for generating images:: - - pip install "qrcode[pil]" - -.. _pypng: https://pypi.python.org/pypi/pypng -.. _pillow: https://pypi.python.org/pypi/Pillow - - -What is a QR Code? -================== - -A Quick Response code is a two-dimensional pictographic code used for its fast -readability and comparatively large storage capacity. The code consists of -black modules arranged in a square pattern on a white background. The -information encoded can be made up of any kind of data (e.g., binary, -alphanumeric, or Kanji symbols) - -Usage -===== - -From the command line, use the installed ``qr`` script:: - - qr "Some text" > test.png - -Or in Python, use the ``make`` shortcut function: - -.. code:: python - - import qrcode - img = qrcode.make('Some data here') - type(img) # qrcode.image.pil.PilImage - img.save("some_file.png") - -Advanced Usage --------------- - -For more control, use the ``QRCode`` class. For example: - -.. code:: python - - import qrcode - qr = qrcode.QRCode( - version=1, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=10, - border=4, - ) - qr.add_data('Some data') - qr.make(fit=True) - - img = qr.make_image(fill_color="black", back_color="white") - -The ``version`` parameter is an integer from 1 to 40 that controls the size of -the QR Code (the smallest, version 1, is a 21x21 matrix). -Set to ``None`` and use the ``fit`` parameter when making the code to determine -this automatically. - -``fill_color`` and ``back_color`` can change the background and the painting -color of the QR, when using the default image factory. Both parameters accept -RGB color tuples. - -.. code:: python - - - img = qr.make_image(back_color=(255, 195, 235), fill_color=(55, 95, 35)) - -The ``error_correction`` parameter controls the error correction used for the -QR Code. The following four constants are made available on the ``qrcode`` -package: - -``ERROR_CORRECT_L`` - About 7% or less errors can be corrected. -``ERROR_CORRECT_M`` (default) - About 15% or less errors can be corrected. -``ERROR_CORRECT_Q`` - About 25% or less errors can be corrected. -``ERROR_CORRECT_H``. - About 30% or less errors can be corrected. - -The ``box_size`` parameter controls how many pixels each "box" of the QR code -is. - -The ``border`` parameter controls how many boxes thick the border should be -(the default is 4, which is the minimum according to the specs). - -Other image factories -===================== - -You can encode as SVG, or use a new pure Python image processor to encode to -PNG images. - -The Python examples below use the ``make`` shortcut. The same ``image_factory`` -keyword argument is a valid option for the ``QRCode`` class for more advanced -usage. - -SVG ---- - -You can create the entire SVG or an SVG fragment. When building an entire SVG -image, you can use the factory that combines as a path (recommended, and -default for the script) or a factory that creates a simple set of rectangles. - -From your command line:: - - qr --factory=svg-path "Some text" > test.svg - qr --factory=svg "Some text" > test.svg - qr --factory=svg-fragment "Some text" > test.svg - -Or in Python: - -.. code:: python - - import qrcode - import qrcode.image.svg - - if method == 'basic': - # Simple factory, just a set of rects. - factory = qrcode.image.svg.SvgImage - elif method == 'fragment': - # Fragment factory (also just a set of rects) - factory = qrcode.image.svg.SvgFragmentImage - else: - # Combined path factory, fixes white space that may occur when zooming - factory = qrcode.image.svg.SvgPathImage - - img = qrcode.make('Some data here', image_factory=factory) - -Two other related factories are available that work the same, but also fill the -background of the SVG with white:: - - qrcode.image.svg.SvgFillImage - qrcode.image.svg.SvgPathFillImage - -The ``QRCode.make_image()`` method forwards additional keyword arguments to the -underlying ElementTree XML library. This helps to fine tune the root element of -the resulting SVG: - -.. code:: python - - import qrcode - qr = qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage) - qr.add_data('Some data') - qr.make(fit=True) - - img = qr.make_image(attrib={'class': 'some-css-class'}) - -You can convert the SVG image into strings using the ``to_string()`` method. -Additional keyword arguments are forwarded to ElementTrees ``tostring()``: - -.. code:: python - - img.to_string(encoding='unicode') - - -Pure Python PNG ---------------- - -If Pillow is not installed, the default image factory will be a pure Python PNG -encoder that uses `pypng`. - -You can use the factory explicitly from your command line:: - - qr --factory=png "Some text" > test.png - -Or in Python: - -.. code:: python - - import qrcode - from qrcode.image.pure import PyPNGImage - img = qrcode.make('Some data here', image_factory=PyPNGImage) - - -Styled Image ------------- - -Works only with versions_ >=7.2 (SVG styled images require 7.4). - -.. _versions: https://github.com/lincolnloop/python-qrcode/blob/master/CHANGES.rst#72-19-july-2021 - -To apply styles to the QRCode, use the ``StyledPilImage`` or one of the -standard SVG_ image factories. These accept an optional ``module_drawer`` -parameter to control the shape of the QR Code. - -These QR Codes are not guaranteed to work with all readers, so do some -experimentation and set the error correction to high (especially if embedding -an image). - -Other PIL module drawers: - - .. image:: doc/module_drawers.png - -For SVGs, use ``SvgSquareDrawer``, ``SvgCircleDrawer``, -``SvgPathSquareDrawer``, or ``SvgPathCircleDrawer``. - -These all accept a ``size_ratio`` argument which allows for "gapped" squares or -circles by reducing this less than the default of ``Decimal(1)``. - - -The ``StyledPilImage`` additionally accepts an optional ``color_mask`` -parameter to change the colors of the QR Code, and an optional -``embedded_image_path`` to embed an image in the center of the code. - -Other color masks: - - .. image:: doc/color_masks.png - -Here is a code example to draw a QR code with rounded corners, radial gradient -and an embedded image: - -.. code:: python - - import qrcode - from qrcode.image.styledpil import StyledPilImage - from qrcode.image.styles.moduledrawers.pil import RoundedModuleDrawer - from qrcode.image.styles.colormasks import RadialGradiantColorMask - - qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H) - qr.add_data('Some data') - - img_1 = qr.make_image(image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer()) - img_2 = qr.make_image(image_factory=StyledPilImage, color_mask=RadialGradiantColorMask()) - img_3 = qr.make_image(image_factory=StyledPilImage, embedded_image_path="/path/to/image.png") - -Examples -======== - -Get the text content from `print_ascii`: - -.. code:: python - - import io - import qrcode - qr = qrcode.QRCode() - qr.add_data("Some text") - f = io.StringIO() - qr.print_ascii(out=f) - f.seek(0) - print(f.read()) - -The `add_data` method will append data to the current QR object. To add new data by replacing previous content in the same object, first use clear method: - -.. code:: python - - import qrcode - qr = qrcode.QRCode() - qr.add_data('Some data') - img = qr.make_image() - qr.clear() - qr.add_data('New data') - other_img = qr.make_image() - -Pipe ascii output to text file in command line:: - - qr --ascii "Some data" > "test.txt" - cat test.txt - -Alternative to piping output to file to avoid PowerShell issues:: - - # qr "Some data" > test.png - qr --output=test.png "Some data" - -========== -Change log -========== - -8.2 (01 May 2025) -================= - -- Optimize QRColorMask apply_mask method for enhanced performance -- Fix typos on StyledPilImage embeded_* parameters. - The old parameters with the typos are still accepted - for backward compatibility. - - -8.1 (02 April 2025) -==================== - -- Added support for Python 3.13. - -8.0 (27 September 2024) -======================== - -- Added support for Python 3.11 and 3.12. - -- Drop support for Python <=3.8. - -- Change local development setup to use Poetry_. - -- Testsuite and code quality checks are done through Github Actions. - -- Code quality and formatting utilises ruff_. - -- Removed ``typing_extensions`` as a dependency, as it's no longer required - with having Python 3.9+ as a requirement. - having Python 3.9+ as a requirement. - -- Only allow high error correction rate (`qrcode.ERROR_CORRECT_H`) - when generating - QR codes with embedded images to ensure content is readable - -.. _Poetry: https://python-poetry.org -.. _ruff: https://astral.sh/ruff - - -7.4.2 (6 February 2023) -======================= - -- Allow ``pypng`` factory to allow for saving to a string (like - ``qr.save("some_file.png")``) in addition to file-like objects. - - -7.4.1 (3 February 2023) -======================= - -- Fix bad over-optimization in v7.4 that broke large QR codes. Thanks to - mattiasj-axis! - - -7.4 (1 February 2023) -===================== - -- Restructure the factory drawers, allowing different shapes in SVG image - factories as well. - -- Add a ``--factory-drawer`` option to the ``qr`` console script. - -- Optimize the output for the ``SVGPathImage`` factory (more than 30% reduction - in file sizes). - -- Add a ``pypng`` image factory as a pure Python PNG solution. If ``pillow`` is - *not* installed, then this becomes the default factory. - -- The ``pymaging`` image factory has been removed, but its factory shortcut and - the actual PymagingImage factory class now just link to the PyPNGImage - factory. - - -7.3.1 (1 October 2021) -====================== - -- Improvements for embedded image. - - -7.3 (19 August 2021) -==================== - -- Skip color mask if QR is black and white - - -7.2 (19 July 2021) -================== - -- Add Styled PIL image factory, allowing different color masks and shapes in QR codes - -- Small performance inprovement - -- Add check for border size parameter - - -7.1 (1 July 2021) -================= - -- Add --ascii parameter to command line interface allowing to output ascii when stdout is piped - -- Add --output parameter to command line interface to specify output file - -- Accept RGB tuples in fill_color and back_color - -- Add to_string method to SVG images - -- Replace inline styles with SVG attributes to avoid CSP issues - -- Add Python3.10 to supported versions - - -7.0 (29 June 2021) -================== - -- Drop Python < 3.6 support. - - -6.1 (14 January 2019) -===================== - -- Fix short chunks of data not being optimized to the correct mode. - -- Tests fixed for Python 3 - - -6.0 (23 March 2018) -=================== - -- Fix optimize length being ignored in ``QRCode.add_data``. - -- Better calculation of the best mask pattern and related optimizations. Big - thanks to cryptogun! - - -5.3 (18 May 2016) -================= - -* Fix incomplete block table for QR version 15. Thanks Rodrigo Queiro for the - report and Jacob Welsh for the investigation and fix. - -* Avoid unnecessary dependency for non MS platforms, thanks to Noah Vesely. - -* Make ``BaseImage.get_image()`` actually work. - - -5.2 (25 Jan 2016) -================= - -* Add ``--error-correction`` option to qr script. - -* Fix script piping to stdout in Python 3 and reading non-UTF-8 characters in - Python 3. - -* Fix script piping in Windows. - -* Add some useful behind-the-curtain methods for tinkerers. - -* Fix terminal output when using Python 2.6 - -* Fix terminal output to display correctly on MS command line. - -5.2.1 ------ - -* Small fix to terminal output in Python 3 (and fix tests) - -5.2.2 ------ - -* Revert some terminal changes from 5.2 that broke Python 3's real life tty - code generation and introduce a better way from Jacob Welsh. - - -5.1 (22 Oct 2014) -================= - -* Make ``qr`` script work in Windows. Thanks Ionel Cristian Mărieș - -* Fixed print_ascii function in Python 3. - -* Out-of-bounds code version numbers are handled more consistently with a - ValueError. - -* Much better test coverage (now only officially supporting Python 2.6+) - - -5.0 (17 Jun 2014) -================= - -* Speed optimizations. - -* Change the output when using the ``qr`` script to use ASCII rather than - just colors, better using the terminal real estate. - -* Fix a bug in passing bytecode data directly when in Python 3. - -* Substation speed optimizations to best-fit algorithm (thanks Jacob Welsh!). - -* Introduce a ``print_ascii`` method and use it as the default for the ``qr`` - script rather than ``print_tty``. - -5.0.1 ------ - -* Update version numbers correctly. - - -4.0 (4 Sep 2013) -================ - -* Made qrcode work on Python 2.4 - Thanks tcely. - Note: officially, qrcode only supports 2.5+. - -* Support pure-python PNG generation (via pymaging) for Python 2.6+ -- thanks - Adam Wisniewski! - -* SVG image generation now supports alternate sizing (the default box size of - 10 == 1mm per rectangle). - -* SVG path image generation allows cleaner SVG output by combining all QR rects - into a single path. Thank you, Viktor Stískala. - -* Added some extra simple SVG factories that fill the background white. - -4.0.1 ------ - -* Fix the pymaging backend not able to save the image to a buffer. Thanks ilj! - -4.0.2 ------ - -* Fix incorrect regex causing a comma to be considered part of the alphanumeric - set. - -* Switch to using setuptools for setup.py. - -4.0.3 ------ - -* Fix bad QR code generation due to the regex comma fix in version 4.0.2. - -4.0.4 ------ - -* Bad version number for previous hotfix release. - - -3.1 (12 Aug 2013) -================= - -* Important fixes for incorrect matches of the alphanumeric encoding mode. - Previously, the pattern would match if a single line was alphanumeric only - (even if others wern't). Also, the two characters ``{`` and ``}`` had snuck - in as valid characters. Thanks to Eran Tromer for the report and fix. - -* Optimized chunking -- if the parts of the data stream can be encoded more - efficiently, the data will be split into chunks of the most efficient modes. - -3.1.1 ------ - -* Update change log to contain version 3.1 changes. :P - -* Give the ``qr`` script an ``--optimize`` argument to control the chunk - optimization setting. - - -3.0 (25 Jun 2013) -================= - -* Python 3 support. - -* Add QRCode.get_matrix, an easy way to get the matrix array of a QR code - including the border. Thanks Hugh Rawlinson. - -* Add in a workaround so that Python 2.6 users can use SVG generation (they - must install ``lxml``). - -* Some initial tests! And tox support (``pip install tox``) for testing across - Python platforms. - - -2.7 (5 Mar 2013) -================ - -* Fix incorrect termination padding. - - -2.6 (2 Apr 2013) -================ - -* Fix the first four columns incorrectly shifted by one. Thanks to Josep - Gómez-Suay for the report and fix. - -* Fix strings within 4 bits of the QR version limit being incorrectly - terminated. Thanks to zhjie231 for the report. - - -2.5 (12 Mar 2013) -================= - -* The PilImage wrapper is more transparent - you can use any methods or - attributes available to the underlying PIL Image instance. - -* Fixed the first column of the QR Code coming up empty! Thanks to BecoKo. - -2.5.1 ------ - -* Fix installation error on Windows. - - -2.4 (23 Apr 2012) -================= - -* Use a pluggable backend system for generating images, thanks to Branko Čibej! - Comes with PIL and SVG backends built in. - -2.4.1 ------ - -* Fix a packaging issue - -2.4.2 ------ - -* Added a ``show`` method to the PIL image wrapper so the ``run_example`` - function actually works. - - -2.3 (29 Jan 2012) -================= - -* When adding data, auto-select the more efficient encoding methods for numbers - and alphanumeric data (KANJI still not supported). - -2.3.1 ------ - -* Encode unicode to utf-8 bytestrings when adding data to a QRCode. - - -2.2 (18 Jan 2012) -================= - -* Fixed tty output to work on both white and black backgrounds. - -* Added `border` parameter to allow customizing of the number of boxes used to - create the border of the QR code - - -2.1 (17 Jan 2012) -================= - -* Added a ``qr`` script which can be used to output a qr code to the tty using - background colors, or to a file via a pipe. - diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/RECORD b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/RECORD deleted file mode 100644 index 0dec473..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/RECORD +++ /dev/null @@ -1,75 +0,0 @@ -../../../bin/qr,sha256=_Qksssu9RQccTPsxEOFXSRAdWnWe7pNCMP_bqxz2v6w,263 -qrcode-8.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -qrcode-8.2.dist-info/LICENSE,sha256=QN-5A8lO4_eJUAExMRGGVI7Lpc79NVdiPXcA4lIquZQ,2143 -qrcode-8.2.dist-info/METADATA,sha256=Oo8b5tqUKLl4BiktBeMUgmS5BTwi55iUkYtnDpMK_DY,17686 -qrcode-8.2.dist-info/RECORD,, -qrcode-8.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88 -qrcode-8.2.dist-info/entry_points.txt,sha256=jokYBrUZ_Sf1bO7FcE53iIhHYn1CJ9_a5SohTIayOP8,50 -qrcode/LUT.py,sha256=NjXKPfHSTFYoLlGkXhFjf2OUq_EGD6mrdyYHIG3dNck,3599 -qrcode/__init__.py,sha256=0C8jx3gDHSJ4yydlHN01ytyipNh2pMO3VYS9Dk-m4oU,645 -qrcode/__pycache__/LUT.cpython-312.pyc,, -qrcode/__pycache__/__init__.cpython-312.pyc,, -qrcode/__pycache__/base.cpython-312.pyc,, -qrcode/__pycache__/console_scripts.cpython-312.pyc,, -qrcode/__pycache__/constants.cpython-312.pyc,, -qrcode/__pycache__/exceptions.cpython-312.pyc,, -qrcode/__pycache__/main.cpython-312.pyc,, -qrcode/__pycache__/release.cpython-312.pyc,, -qrcode/__pycache__/util.cpython-312.pyc,, -qrcode/base.py,sha256=9J_1LynF5dXJK14Azs8XyHJY66FfTluYJ66F8ZjeStY,7288 -qrcode/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -qrcode/compat/__pycache__/__init__.cpython-312.pyc,, -qrcode/compat/__pycache__/etree.cpython-312.pyc,, -qrcode/compat/__pycache__/png.cpython-312.pyc,, -qrcode/compat/etree.py,sha256=rEyWRA9QMsVFva_9rOdth3RAkRpFOmkF59c2EQM44gE,152 -qrcode/compat/png.py,sha256=OCe5WsuiTI_UTqmyVqLbcJloSbZvgCYJdMCznKvMCCM,171 -qrcode/console_scripts.py,sha256=n-bQ5vpKtcjG30l1jkQ_q22HTV4X-JEMwkLRdJno8vc,5558 -qrcode/constants.py,sha256=0Csa8YYdeQ8NaFrRmt43maVg12O89d-oKgiKAVIO2s4,106 -qrcode/exceptions.py,sha256=L2fZuYOKscvdn72ra-wF8Gwsr2ZB9eRZWrp1f0IDx4E,45 -qrcode/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -qrcode/image/__pycache__/__init__.cpython-312.pyc,, -qrcode/image/__pycache__/base.cpython-312.pyc,, -qrcode/image/__pycache__/pil.cpython-312.pyc,, -qrcode/image/__pycache__/pure.cpython-312.pyc,, -qrcode/image/__pycache__/styledpil.cpython-312.pyc,, -qrcode/image/__pycache__/svg.cpython-312.pyc,, -qrcode/image/base.py,sha256=jCrbt4UD1ZfOC8jMFjK3elZfgUJ7M_FsHKRMVvje-BE,4965 -qrcode/image/pil.py,sha256=y5a3t6VB4gnvsTK4eSR04YEVP_Qk82iT1NXL6jFP1jQ,1589 -qrcode/image/pure.py,sha256=B8PJANvAHPyd1DaBtAC83Csb2xKbZ-fP4SSWuw1NNvU,1525 -qrcode/image/styledpil.py,sha256=RC7JoDS-Uzez2nN-I2xwePsGX3qYDeHg8YepT2FbO_M,4951 -qrcode/image/styles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -qrcode/image/styles/__pycache__/__init__.cpython-312.pyc,, -qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc,, -qrcode/image/styles/colormasks.py,sha256=h8asIvQKMTRuq6bFzvaiZgFyoa-2tqvIb_hB5H5XwM0,7936 -qrcode/image/styles/moduledrawers/__init__.py,sha256=Mklw5SjYiGbs2Aym38jwwrKt0plJGzwIVgZ--jiOVBc,430 -qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc,, -qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc,, -qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc,, -qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc,, -qrcode/image/styles/moduledrawers/base.py,sha256=gLFq20p07tBEmsFfirEM19XZshYsaNP2Wr1UNAkJq90,1019 -qrcode/image/styles/moduledrawers/pil.py,sha256=lkT8I8q8PUB_TdYBrP5DlzKN8UtQW-XQEYqoXBWkD7Y,9773 -qrcode/image/styles/moduledrawers/svg.py,sha256=-WngEvZF8LwtTpWmSdt0tDZ6dKtYzLctYDNY-Mi7crc,3936 -qrcode/image/svg.py,sha256=G2dmuybVP3fwkgyrFF5RfQT3dpWDCYl80OKe2Xal8gU,5188 -qrcode/main.py,sha256=OF7uHDAz2Tihpe6Fftef6fiVH2tpoVJ5ekLCIG4lyJA,16869 -qrcode/release.py,sha256=wJjVEklWnATUh8CU88HEKyhUgZU9hzpl__SZYyyNUZo,1080 -qrcode/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -qrcode/tests/__pycache__/__init__.cpython-312.pyc,, -qrcode/tests/__pycache__/consts.cpython-312.pyc,, -qrcode/tests/__pycache__/test_example.cpython-312.pyc,, -qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc,, -qrcode/tests/__pycache__/test_qrcode_pil.cpython-312.pyc,, -qrcode/tests/__pycache__/test_qrcode_pypng.cpython-312.pyc,, -qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc,, -qrcode/tests/__pycache__/test_release.cpython-312.pyc,, -qrcode/tests/__pycache__/test_script.cpython-312.pyc,, -qrcode/tests/__pycache__/test_util.cpython-312.pyc,, -qrcode/tests/consts.py,sha256=Tn2AbI9zTEi_KiAish6f74AbBWrZg8A-Js8jTrN_vF0,96 -qrcode/tests/test_example.py,sha256=z5p5Tnumnj0EWsKo6YJ4vuUQM7KjisvgLwbJt8wTAG0,244 -qrcode/tests/test_qrcode.py,sha256=FPjfdmLAXa0lrbspQXbtD1wPKMggCOPN_O4tT-jLJug,6461 -qrcode/tests/test_qrcode_pil.py,sha256=m12SfImnfgqzvKmdR4mMQCSVb9GyNnNJ4Edxwjm7tus,5148 -qrcode/tests/test_qrcode_pypng.py,sha256=fgTr78vX1T_cH03mS_ikHJgoITKLU11bJMXEd0Um5yA,944 -qrcode/tests/test_qrcode_svg.py,sha256=21enlZjXNUm0M_ZoK_AMp0UE4mELoCeIWE6UveQsJwk,1296 -qrcode/tests/test_release.py,sha256=SVCXUx4BeNz_d3osbBNdW2N3rstbErGvY5N2V_kHrhc,1341 -qrcode/tests/test_script.py,sha256=1gchpke_DKZLEhtN5cZJBZTT28fhbjvXfAPttvvM5tA,2908 -qrcode/tests/test_util.py,sha256=Pgnp1DRFe44YRH9deR9_9Nb9zH-ska61CIYkVWwuy9A,207 -qrcode/util.py,sha256=VOG4RrJ6QkPs0fLaZkfeMwxwxdIpKsRHm6dXvjo9Yl4,17103 diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/WHEEL deleted file mode 100644 index d73ccaa..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: poetry-core 1.9.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/entry_points.txt b/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/entry_points.txt deleted file mode 100644 index 66dc3c5..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode-8.2.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -qr=qrcode.console_scripts:main - diff --git a/myenv/lib/python3.12/site-packages/qrcode/LUT.py b/myenv/lib/python3.12/site-packages/qrcode/LUT.py deleted file mode 100644 index 115892f..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/LUT.py +++ /dev/null @@ -1,223 +0,0 @@ -# Store all kinds of lookup table. - - -# # generate rsPoly lookup table. - -# from qrcode import base - -# def create_bytes(rs_blocks): -# for r in range(len(rs_blocks)): -# dcCount = rs_blocks[r].data_count -# ecCount = rs_blocks[r].total_count - dcCount -# rsPoly = base.Polynomial([1], 0) -# for i in range(ecCount): -# rsPoly = rsPoly * base.Polynomial([1, base.gexp(i)], 0) -# return ecCount, rsPoly - -# rsPoly_LUT = {} -# for version in range(1,41): -# for error_correction in range(4): -# rs_blocks_list = base.rs_blocks(version, error_correction) -# ecCount, rsPoly = create_bytes(rs_blocks_list) -# rsPoly_LUT[ecCount]=rsPoly.num -# print(rsPoly_LUT) - -# Result. Usage: input: ecCount, output: Polynomial.num -# e.g. rsPoly = base.Polynomial(LUT.rsPoly_LUT[ecCount], 0) -rsPoly_LUT = { - 7: [1, 127, 122, 154, 164, 11, 68, 117], - 10: [1, 216, 194, 159, 111, 199, 94, 95, 113, 157, 193], - 13: [1, 137, 73, 227, 17, 177, 17, 52, 13, 46, 43, 83, 132, 120], - 15: [1, 29, 196, 111, 163, 112, 74, 10, 105, 105, 139, 132, 151, 32, 134, 26], - 16: [1, 59, 13, 104, 189, 68, 209, 30, 8, 163, 65, 41, 229, 98, 50, 36, 59], - 17: [1, 119, 66, 83, 120, 119, 22, 197, 83, 249, 41, 143, 134, 85, 53, 125, 99, 79], - 18: [ - 1, - 239, - 251, - 183, - 113, - 149, - 175, - 199, - 215, - 240, - 220, - 73, - 82, - 173, - 75, - 32, - 67, - 217, - 146, - ], - 20: [ - 1, - 152, - 185, - 240, - 5, - 111, - 99, - 6, - 220, - 112, - 150, - 69, - 36, - 187, - 22, - 228, - 198, - 121, - 121, - 165, - 174, - ], - 22: [ - 1, - 89, - 179, - 131, - 176, - 182, - 244, - 19, - 189, - 69, - 40, - 28, - 137, - 29, - 123, - 67, - 253, - 86, - 218, - 230, - 26, - 145, - 245, - ], - 24: [ - 1, - 122, - 118, - 169, - 70, - 178, - 237, - 216, - 102, - 115, - 150, - 229, - 73, - 130, - 72, - 61, - 43, - 206, - 1, - 237, - 247, - 127, - 217, - 144, - 117, - ], - 26: [ - 1, - 246, - 51, - 183, - 4, - 136, - 98, - 199, - 152, - 77, - 56, - 206, - 24, - 145, - 40, - 209, - 117, - 233, - 42, - 135, - 68, - 70, - 144, - 146, - 77, - 43, - 94, - ], - 28: [ - 1, - 252, - 9, - 28, - 13, - 18, - 251, - 208, - 150, - 103, - 174, - 100, - 41, - 167, - 12, - 247, - 56, - 117, - 119, - 233, - 127, - 181, - 100, - 121, - 147, - 176, - 74, - 58, - 197, - ], - 30: [ - 1, - 212, - 246, - 77, - 73, - 195, - 192, - 75, - 98, - 5, - 70, - 103, - 177, - 22, - 217, - 138, - 51, - 181, - 246, - 72, - 25, - 18, - 46, - 228, - 74, - 216, - 195, - 11, - 106, - 130, - 150, - ], -} diff --git a/myenv/lib/python3.12/site-packages/qrcode/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/__init__.py deleted file mode 100644 index 6b238d3..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -from qrcode.main import QRCode -from qrcode.main import make # noqa -from qrcode.constants import ( # noqa - ERROR_CORRECT_L, - ERROR_CORRECT_M, - ERROR_CORRECT_Q, - ERROR_CORRECT_H, -) - -from qrcode import image # noqa - - -def run_example(data="http://www.lincolnloop.com", *args, **kwargs): - """ - Build an example QR Code and display it. - - There's an even easier way than the code here though: just use the ``make`` - shortcut. - """ - qr = QRCode(*args, **kwargs) - qr.add_data(data) - - im = qr.make_image() - im.show() - - -if __name__ == "__main__": # pragma: no cover - import sys - - run_example(*sys.argv[1:]) diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/LUT.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/LUT.cpython-312.pyc deleted file mode 100644 index 9ab5d26..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/LUT.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 031786f..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/base.cpython-312.pyc deleted file mode 100644 index c2abd4f..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/console_scripts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/console_scripts.cpython-312.pyc deleted file mode 100644 index c8955f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/console_scripts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/constants.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/constants.cpython-312.pyc deleted file mode 100644 index 3bb24c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/constants.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 1d309e4..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/main.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/main.cpython-312.pyc deleted file mode 100644 index 4439e05..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/main.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/release.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/release.cpython-312.pyc deleted file mode 100644 index bd067d8..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/release.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/__pycache__/util.cpython-312.pyc deleted file mode 100644 index d4ae7e8..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/__pycache__/util.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/base.py b/myenv/lib/python3.12/site-packages/qrcode/base.py deleted file mode 100644 index 20f81f6..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/base.py +++ /dev/null @@ -1,313 +0,0 @@ -from typing import NamedTuple -from qrcode import constants - -EXP_TABLE = list(range(256)) - -LOG_TABLE = list(range(256)) - -for i in range(8): - EXP_TABLE[i] = 1 << i - -for i in range(8, 256): - EXP_TABLE[i] = ( - EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8] - ) - -for i in range(255): - LOG_TABLE[EXP_TABLE[i]] = i - -RS_BLOCK_OFFSET = { - constants.ERROR_CORRECT_L: 0, - constants.ERROR_CORRECT_M: 1, - constants.ERROR_CORRECT_Q: 2, - constants.ERROR_CORRECT_H: 3, -} - -RS_BLOCK_TABLE = ( - # L - # M - # Q - # H - # 1 - (1, 26, 19), - (1, 26, 16), - (1, 26, 13), - (1, 26, 9), - # 2 - (1, 44, 34), - (1, 44, 28), - (1, 44, 22), - (1, 44, 16), - # 3 - (1, 70, 55), - (1, 70, 44), - (2, 35, 17), - (2, 35, 13), - # 4 - (1, 100, 80), - (2, 50, 32), - (2, 50, 24), - (4, 25, 9), - # 5 - (1, 134, 108), - (2, 67, 43), - (2, 33, 15, 2, 34, 16), - (2, 33, 11, 2, 34, 12), - # 6 - (2, 86, 68), - (4, 43, 27), - (4, 43, 19), - (4, 43, 15), - # 7 - (2, 98, 78), - (4, 49, 31), - (2, 32, 14, 4, 33, 15), - (4, 39, 13, 1, 40, 14), - # 8 - (2, 121, 97), - (2, 60, 38, 2, 61, 39), - (4, 40, 18, 2, 41, 19), - (4, 40, 14, 2, 41, 15), - # 9 - (2, 146, 116), - (3, 58, 36, 2, 59, 37), - (4, 36, 16, 4, 37, 17), - (4, 36, 12, 4, 37, 13), - # 10 - (2, 86, 68, 2, 87, 69), - (4, 69, 43, 1, 70, 44), - (6, 43, 19, 2, 44, 20), - (6, 43, 15, 2, 44, 16), - # 11 - (4, 101, 81), - (1, 80, 50, 4, 81, 51), - (4, 50, 22, 4, 51, 23), - (3, 36, 12, 8, 37, 13), - # 12 - (2, 116, 92, 2, 117, 93), - (6, 58, 36, 2, 59, 37), - (4, 46, 20, 6, 47, 21), - (7, 42, 14, 4, 43, 15), - # 13 - (4, 133, 107), - (8, 59, 37, 1, 60, 38), - (8, 44, 20, 4, 45, 21), - (12, 33, 11, 4, 34, 12), - # 14 - (3, 145, 115, 1, 146, 116), - (4, 64, 40, 5, 65, 41), - (11, 36, 16, 5, 37, 17), - (11, 36, 12, 5, 37, 13), - # 15 - (5, 109, 87, 1, 110, 88), - (5, 65, 41, 5, 66, 42), - (5, 54, 24, 7, 55, 25), - (11, 36, 12, 7, 37, 13), - # 16 - (5, 122, 98, 1, 123, 99), - (7, 73, 45, 3, 74, 46), - (15, 43, 19, 2, 44, 20), - (3, 45, 15, 13, 46, 16), - # 17 - (1, 135, 107, 5, 136, 108), - (10, 74, 46, 1, 75, 47), - (1, 50, 22, 15, 51, 23), - (2, 42, 14, 17, 43, 15), - # 18 - (5, 150, 120, 1, 151, 121), - (9, 69, 43, 4, 70, 44), - (17, 50, 22, 1, 51, 23), - (2, 42, 14, 19, 43, 15), - # 19 - (3, 141, 113, 4, 142, 114), - (3, 70, 44, 11, 71, 45), - (17, 47, 21, 4, 48, 22), - (9, 39, 13, 16, 40, 14), - # 20 - (3, 135, 107, 5, 136, 108), - (3, 67, 41, 13, 68, 42), - (15, 54, 24, 5, 55, 25), - (15, 43, 15, 10, 44, 16), - # 21 - (4, 144, 116, 4, 145, 117), - (17, 68, 42), - (17, 50, 22, 6, 51, 23), - (19, 46, 16, 6, 47, 17), - # 22 - (2, 139, 111, 7, 140, 112), - (17, 74, 46), - (7, 54, 24, 16, 55, 25), - (34, 37, 13), - # 23 - (4, 151, 121, 5, 152, 122), - (4, 75, 47, 14, 76, 48), - (11, 54, 24, 14, 55, 25), - (16, 45, 15, 14, 46, 16), - # 24 - (6, 147, 117, 4, 148, 118), - (6, 73, 45, 14, 74, 46), - (11, 54, 24, 16, 55, 25), - (30, 46, 16, 2, 47, 17), - # 25 - (8, 132, 106, 4, 133, 107), - (8, 75, 47, 13, 76, 48), - (7, 54, 24, 22, 55, 25), - (22, 45, 15, 13, 46, 16), - # 26 - (10, 142, 114, 2, 143, 115), - (19, 74, 46, 4, 75, 47), - (28, 50, 22, 6, 51, 23), - (33, 46, 16, 4, 47, 17), - # 27 - (8, 152, 122, 4, 153, 123), - (22, 73, 45, 3, 74, 46), - (8, 53, 23, 26, 54, 24), - (12, 45, 15, 28, 46, 16), - # 28 - (3, 147, 117, 10, 148, 118), - (3, 73, 45, 23, 74, 46), - (4, 54, 24, 31, 55, 25), - (11, 45, 15, 31, 46, 16), - # 29 - (7, 146, 116, 7, 147, 117), - (21, 73, 45, 7, 74, 46), - (1, 53, 23, 37, 54, 24), - (19, 45, 15, 26, 46, 16), - # 30 - (5, 145, 115, 10, 146, 116), - (19, 75, 47, 10, 76, 48), - (15, 54, 24, 25, 55, 25), - (23, 45, 15, 25, 46, 16), - # 31 - (13, 145, 115, 3, 146, 116), - (2, 74, 46, 29, 75, 47), - (42, 54, 24, 1, 55, 25), - (23, 45, 15, 28, 46, 16), - # 32 - (17, 145, 115), - (10, 74, 46, 23, 75, 47), - (10, 54, 24, 35, 55, 25), - (19, 45, 15, 35, 46, 16), - # 33 - (17, 145, 115, 1, 146, 116), - (14, 74, 46, 21, 75, 47), - (29, 54, 24, 19, 55, 25), - (11, 45, 15, 46, 46, 16), - # 34 - (13, 145, 115, 6, 146, 116), - (14, 74, 46, 23, 75, 47), - (44, 54, 24, 7, 55, 25), - (59, 46, 16, 1, 47, 17), - # 35 - (12, 151, 121, 7, 152, 122), - (12, 75, 47, 26, 76, 48), - (39, 54, 24, 14, 55, 25), - (22, 45, 15, 41, 46, 16), - # 36 - (6, 151, 121, 14, 152, 122), - (6, 75, 47, 34, 76, 48), - (46, 54, 24, 10, 55, 25), - (2, 45, 15, 64, 46, 16), - # 37 - (17, 152, 122, 4, 153, 123), - (29, 74, 46, 14, 75, 47), - (49, 54, 24, 10, 55, 25), - (24, 45, 15, 46, 46, 16), - # 38 - (4, 152, 122, 18, 153, 123), - (13, 74, 46, 32, 75, 47), - (48, 54, 24, 14, 55, 25), - (42, 45, 15, 32, 46, 16), - # 39 - (20, 147, 117, 4, 148, 118), - (40, 75, 47, 7, 76, 48), - (43, 54, 24, 22, 55, 25), - (10, 45, 15, 67, 46, 16), - # 40 - (19, 148, 118, 6, 149, 119), - (18, 75, 47, 31, 76, 48), - (34, 54, 24, 34, 55, 25), - (20, 45, 15, 61, 46, 16), -) - - -def glog(n): - if n < 1: # pragma: no cover - raise ValueError(f"glog({n})") - return LOG_TABLE[n] - - -def gexp(n): - return EXP_TABLE[n % 255] - - -class Polynomial: - def __init__(self, num, shift): - if not num: # pragma: no cover - raise Exception(f"{len(num)}/{shift}") - - offset = 0 - for offset in range(len(num)): - if num[offset] != 0: - break - - self.num = num[offset:] + [0] * shift - - def __getitem__(self, index): - return self.num[index] - - def __iter__(self): - return iter(self.num) - - def __len__(self): - return len(self.num) - - def __mul__(self, other): - num = [0] * (len(self) + len(other) - 1) - - for i, item in enumerate(self): - for j, other_item in enumerate(other): - num[i + j] ^= gexp(glog(item) + glog(other_item)) - - return Polynomial(num, 0) - - def __mod__(self, other): - difference = len(self) - len(other) - if difference < 0: - return self - - ratio = glog(self[0]) - glog(other[0]) - - num = [ - item ^ gexp(glog(other_item) + ratio) - for item, other_item in zip(self, other) - ] - if difference: - num.extend(self[-difference:]) - - # recursive call - return Polynomial(num, 0) % other - - -class RSBlock(NamedTuple): - total_count: int - data_count: int - - -def rs_blocks(version, error_correction): - if error_correction not in RS_BLOCK_OFFSET: # pragma: no cover - raise Exception( - "bad rs block @ version: %s / error_correction: %s" - % (version, error_correction) - ) - offset = RS_BLOCK_OFFSET[error_correction] - rs_block = RS_BLOCK_TABLE[(version - 1) * 4 + offset] - - blocks = [] - - for i in range(0, len(rs_block), 3): - count, total_count, data_count = rs_block[i : i + 3] - for _ in range(count): - blocks.append(RSBlock(total_count, data_count)) - - return blocks diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/compat/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1549117..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/etree.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/etree.cpython-312.pyc deleted file mode 100644 index aa166fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/etree.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/png.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/png.cpython-312.pyc deleted file mode 100644 index 7e29e80..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/compat/__pycache__/png.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/etree.py b/myenv/lib/python3.12/site-packages/qrcode/compat/etree.py deleted file mode 100644 index 6739d22..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/compat/etree.py +++ /dev/null @@ -1,4 +0,0 @@ -try: - import lxml.etree as ET # type: ignore # noqa: F401 -except ImportError: - import xml.etree.ElementTree as ET # type: ignore # noqa: F401 diff --git a/myenv/lib/python3.12/site-packages/qrcode/compat/png.py b/myenv/lib/python3.12/site-packages/qrcode/compat/png.py deleted file mode 100644 index 8d7b905..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/compat/png.py +++ /dev/null @@ -1,7 +0,0 @@ -# Try to import png library. -PngWriter = None - -try: - from png import Writer as PngWriter # type: ignore # noqa: F401 -except ImportError: # pragma: no cover - pass diff --git a/myenv/lib/python3.12/site-packages/qrcode/console_scripts.py b/myenv/lib/python3.12/site-packages/qrcode/console_scripts.py deleted file mode 100755 index ebe8810..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/console_scripts.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env python -""" -qr - Convert stdin (or the first argument) to a QR Code. - -When stdout is a tty the QR Code is printed to the terminal and when stdout is -a pipe to a file an image is written. The default image format is PNG. -""" - -import optparse -import os -import sys -from typing import NoReturn, Optional -from collections.abc import Iterable -from importlib import metadata - -import qrcode -from qrcode.image.base import BaseImage, DrawerAliases - -# The next block is added to get the terminal to display properly on MS platforms -if sys.platform.startswith(("win", "cygwin")): # pragma: no cover - import colorama # type: ignore - - colorama.init() - -default_factories = { - "pil": "qrcode.image.pil.PilImage", - "png": "qrcode.image.pure.PyPNGImage", - "svg": "qrcode.image.svg.SvgImage", - "svg-fragment": "qrcode.image.svg.SvgFragmentImage", - "svg-path": "qrcode.image.svg.SvgPathImage", - # Keeping for backwards compatibility: - "pymaging": "qrcode.image.pure.PymagingImage", -} - -error_correction = { - "L": qrcode.ERROR_CORRECT_L, - "M": qrcode.ERROR_CORRECT_M, - "Q": qrcode.ERROR_CORRECT_Q, - "H": qrcode.ERROR_CORRECT_H, -} - - -def main(args=None): - if args is None: - args = sys.argv[1:] - - version = metadata.version("qrcode") - parser = optparse.OptionParser(usage=(__doc__ or "").strip(), version=version) - - # Wrap parser.error in a typed NoReturn method for better typing. - def raise_error(msg: str) -> NoReturn: - parser.error(msg) - raise # pragma: no cover - - parser.add_option( - "--factory", - help="Full python path to the image factory class to " - "create the image with. You can use the following shortcuts to the " - f"built-in image factory classes: {commas(default_factories)}.", - ) - parser.add_option( - "--factory-drawer", - help=f"Use an alternate drawer. {get_drawer_help()}.", - ) - parser.add_option( - "--optimize", - type=int, - help="Optimize the data by looking for chunks " - "of at least this many characters that could use a more efficient " - "encoding method. Use 0 to turn off chunk optimization.", - ) - parser.add_option( - "--error-correction", - type="choice", - choices=sorted(error_correction.keys()), - default="M", - help="The error correction level to use. Choices are L (7%), " - "M (15%, default), Q (25%), and H (30%).", - ) - parser.add_option( - "--ascii", help="Print as ascii even if stdout is piped.", action="store_true" - ) - parser.add_option( - "--output", - help="The output file. If not specified, the image is sent to " - "the standard output.", - ) - - opts, args = parser.parse_args(args) - - if opts.factory: - module = default_factories.get(opts.factory, opts.factory) - try: - image_factory = get_factory(module) - except ValueError as e: - raise_error(str(e)) - else: - image_factory = None - - qr = qrcode.QRCode( - error_correction=error_correction[opts.error_correction], - image_factory=image_factory, - ) - - if args: - data = args[0] - data = data.encode(errors="surrogateescape") - else: - data = sys.stdin.buffer.read() - if opts.optimize is None: - qr.add_data(data) - else: - qr.add_data(data, optimize=opts.optimize) - - if opts.output: - img = qr.make_image() - with open(opts.output, "wb") as out: - img.save(out) - else: - if image_factory is None and (os.isatty(sys.stdout.fileno()) or opts.ascii): - qr.print_ascii(tty=not opts.ascii) - return - - kwargs = {} - aliases: Optional[DrawerAliases] = getattr( - qr.image_factory, "drawer_aliases", None - ) - if opts.factory_drawer: - if not aliases: - raise_error("The selected factory has no drawer aliases.") - if opts.factory_drawer not in aliases: - raise_error( - f"{opts.factory_drawer} factory drawer not found." - f" Expected {commas(aliases)}" - ) - drawer_cls, drawer_kwargs = aliases[opts.factory_drawer] - kwargs["module_drawer"] = drawer_cls(**drawer_kwargs) - img = qr.make_image(**kwargs) - - sys.stdout.flush() - img.save(sys.stdout.buffer) - - -def get_factory(module: str) -> type[BaseImage]: - if "." not in module: - raise ValueError("The image factory is not a full python path") - module, name = module.rsplit(".", 1) - imp = __import__(module, {}, {}, [name]) - return getattr(imp, name) - - -def get_drawer_help() -> str: - help: dict[str, set] = {} - for alias, module in default_factories.items(): - try: - image = get_factory(module) - except ImportError: # pragma: no cover - continue - aliases: Optional[DrawerAliases] = getattr(image, "drawer_aliases", None) - if not aliases: - continue - factories = help.setdefault(commas(aliases), set()) - factories.add(alias) - - return ". ".join( - f"For {commas(factories, 'and')}, use: {aliases}" - for aliases, factories in help.items() - ) - - -def commas(items: Iterable[str], joiner="or") -> str: - items = tuple(items) - if not items: - return "" - if len(items) == 1: - return items[0] - return f"{', '.join(items[:-1])} {joiner} {items[-1]}" - - -if __name__ == "__main__": # pragma: no cover - main() diff --git a/myenv/lib/python3.12/site-packages/qrcode/constants.py b/myenv/lib/python3.12/site-packages/qrcode/constants.py deleted file mode 100644 index 385dda0..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/constants.py +++ /dev/null @@ -1,5 +0,0 @@ -# QR error correct levels -ERROR_CORRECT_L = 1 -ERROR_CORRECT_M = 0 -ERROR_CORRECT_Q = 3 -ERROR_CORRECT_H = 2 diff --git a/myenv/lib/python3.12/site-packages/qrcode/exceptions.py b/myenv/lib/python3.12/site-packages/qrcode/exceptions.py deleted file mode 100644 index b37bd30..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/exceptions.py +++ /dev/null @@ -1,2 +0,0 @@ -class DataOverflowError(Exception): - pass diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/image/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index bd52771..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/base.cpython-312.pyc deleted file mode 100644 index d6c1bcb..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pil.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pil.cpython-312.pyc deleted file mode 100644 index 19003fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pil.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pure.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pure.cpython-312.pyc deleted file mode 100644 index e351471..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/pure.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/styledpil.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/styledpil.cpython-312.pyc deleted file mode 100644 index d0f0743..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/styledpil.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/svg.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/svg.cpython-312.pyc deleted file mode 100644 index 594ff18..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/__pycache__/svg.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/base.py b/myenv/lib/python3.12/site-packages/qrcode/image/base.py deleted file mode 100644 index 119c30a..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/base.py +++ /dev/null @@ -1,164 +0,0 @@ -import abc -from typing import TYPE_CHECKING, Any, Optional, Union - -from qrcode.image.styles.moduledrawers.base import QRModuleDrawer - -if TYPE_CHECKING: - from qrcode.main import ActiveWithNeighbors, QRCode - - -DrawerAliases = dict[str, tuple[type[QRModuleDrawer], dict[str, Any]]] - - -class BaseImage: - """ - Base QRCode image output class. - """ - - kind: Optional[str] = None - allowed_kinds: Optional[tuple[str]] = None - needs_context = False - needs_processing = False - needs_drawrect = True - - def __init__(self, border, width, box_size, *args, **kwargs): - self.border = border - self.width = width - self.box_size = box_size - self.pixel_size = (self.width + self.border * 2) * self.box_size - self.modules = kwargs.pop("qrcode_modules") - self._img = self.new_image(**kwargs) - self.init_new_image() - - @abc.abstractmethod - def drawrect(self, row, col): - """ - Draw a single rectangle of the QR code. - """ - - def drawrect_context(self, row: int, col: int, qr: "QRCode"): - """ - Draw a single rectangle of the QR code given the surrounding context - """ - raise NotImplementedError("BaseImage.drawrect_context") # pragma: no cover - - def process(self): - """ - Processes QR code after completion - """ - raise NotImplementedError("BaseImage.drawimage") # pragma: no cover - - @abc.abstractmethod - def save(self, stream, kind=None): - """ - Save the image file. - """ - - def pixel_box(self, row, col): - """ - A helper method for pixel-based image generators that specifies the - four pixel coordinates for a single rect. - """ - x = (col + self.border) * self.box_size - y = (row + self.border) * self.box_size - return ( - (x, y), - (x + self.box_size - 1, y + self.box_size - 1), - ) - - @abc.abstractmethod - def new_image(self, **kwargs) -> Any: - """ - Build the image class. Subclasses should return the class created. - """ - - def init_new_image(self): - pass - - def get_image(self, **kwargs): - """ - Return the image class for further processing. - """ - return self._img - - def check_kind(self, kind, transform=None): - """ - Get the image type. - """ - if kind is None: - kind = self.kind - allowed = not self.allowed_kinds or kind in self.allowed_kinds - if transform: - kind = transform(kind) - if not allowed: - allowed = kind in self.allowed_kinds - if not allowed: - raise ValueError(f"Cannot set {type(self).__name__} type to {kind}") - return kind - - def is_eye(self, row: int, col: int): - """ - Find whether the referenced module is in an eye. - """ - return ( - (row < 7 and col < 7) - or (row < 7 and self.width - col < 8) - or (self.width - row < 8 and col < 7) - ) - - -class BaseImageWithDrawer(BaseImage): - default_drawer_class: type[QRModuleDrawer] - drawer_aliases: DrawerAliases = {} - - def get_default_module_drawer(self) -> QRModuleDrawer: - return self.default_drawer_class() - - def get_default_eye_drawer(self) -> QRModuleDrawer: - return self.default_drawer_class() - - needs_context = True - - module_drawer: "QRModuleDrawer" - eye_drawer: "QRModuleDrawer" - - def __init__( - self, - *args, - module_drawer: Union[QRModuleDrawer, str, None] = None, - eye_drawer: Union[QRModuleDrawer, str, None] = None, - **kwargs, - ): - self.module_drawer = ( - self.get_drawer(module_drawer) or self.get_default_module_drawer() - ) - # The eye drawer can be overridden by another module drawer as well, - # but you have to be more careful with these in order to make the QR - # code still parseable - self.eye_drawer = self.get_drawer(eye_drawer) or self.get_default_eye_drawer() - super().__init__(*args, **kwargs) - - def get_drawer( - self, drawer: Union[QRModuleDrawer, str, None] - ) -> Optional[QRModuleDrawer]: - if not isinstance(drawer, str): - return drawer - drawer_cls, kwargs = self.drawer_aliases[drawer] - return drawer_cls(**kwargs) - - def init_new_image(self): - self.module_drawer.initialize(img=self) - self.eye_drawer.initialize(img=self) - - return super().init_new_image() - - def drawrect_context(self, row: int, col: int, qr: "QRCode"): - box = self.pixel_box(row, col) - drawer = self.eye_drawer if self.is_eye(row, col) else self.module_drawer - is_active: Union[bool, ActiveWithNeighbors] = ( - qr.active_with_neighbors(row, col) - if drawer.needs_neighbors - else bool(qr.modules[row][col]) - ) - - drawer.drawrect(box, is_active) diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/pil.py b/myenv/lib/python3.12/site-packages/qrcode/image/pil.py deleted file mode 100644 index 57ee13a..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/pil.py +++ /dev/null @@ -1,57 +0,0 @@ -import qrcode.image.base -from PIL import Image, ImageDraw - - -class PilImage(qrcode.image.base.BaseImage): - """ - PIL image builder, default format is PNG. - """ - - kind = "PNG" - - def new_image(self, **kwargs): - if not Image: - raise ImportError("PIL library not found.") - - back_color = kwargs.get("back_color", "white") - fill_color = kwargs.get("fill_color", "black") - - try: - fill_color = fill_color.lower() - except AttributeError: - pass - - try: - back_color = back_color.lower() - except AttributeError: - pass - - # L mode (1 mode) color = (r*299 + g*587 + b*114)//1000 - if fill_color == "black" and back_color == "white": - mode = "1" - fill_color = 0 - if back_color == "white": - back_color = 255 - elif back_color == "transparent": - mode = "RGBA" - back_color = None - else: - mode = "RGB" - - img = Image.new(mode, (self.pixel_size, self.pixel_size), back_color) - self.fill_color = fill_color - self._idr = ImageDraw.Draw(img) - return img - - def drawrect(self, row, col): - box = self.pixel_box(row, col) - self._idr.rectangle(box, fill=self.fill_color) - - def save(self, stream, format=None, **kwargs): - kind = kwargs.pop("kind", self.kind) - if format is None: - format = kind - self._img.save(stream, format=format, **kwargs) - - def __getattr__(self, name): - return getattr(self._img, name) diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/pure.py b/myenv/lib/python3.12/site-packages/qrcode/image/pure.py deleted file mode 100644 index 5a8b2c5..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/pure.py +++ /dev/null @@ -1,56 +0,0 @@ -from itertools import chain - -from qrcode.compat.png import PngWriter -from qrcode.image.base import BaseImage - - -class PyPNGImage(BaseImage): - """ - pyPNG image builder. - """ - - kind = "PNG" - allowed_kinds = ("PNG",) - needs_drawrect = False - - def new_image(self, **kwargs): - if not PngWriter: - raise ImportError("PyPNG library not installed.") - - return PngWriter(self.pixel_size, self.pixel_size, greyscale=True, bitdepth=1) - - def drawrect(self, row, col): - """ - Not used. - """ - - def save(self, stream, kind=None): - if isinstance(stream, str): - stream = open(stream, "wb") - self._img.write(stream, self.rows_iter()) - - def rows_iter(self): - yield from self.border_rows_iter() - border_col = [1] * (self.box_size * self.border) - for module_row in self.modules: - row = ( - border_col - + list( - chain.from_iterable( - ([not point] * self.box_size) for point in module_row - ) - ) - + border_col - ) - for _ in range(self.box_size): - yield row - yield from self.border_rows_iter() - - def border_rows_iter(self): - border_row = [1] * (self.box_size * (self.width + self.border * 2)) - for _ in range(self.border * self.box_size): - yield border_row - - -# Keeping this for backwards compatibility. -PymagingImage = PyPNGImage diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styledpil.py b/myenv/lib/python3.12/site-packages/qrcode/image/styledpil.py deleted file mode 100644 index cd63a6e..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styledpil.py +++ /dev/null @@ -1,120 +0,0 @@ -import qrcode.image.base -from PIL import Image -from qrcode.image.styles.colormasks import QRColorMask, SolidFillColorMask -from qrcode.image.styles.moduledrawers import SquareModuleDrawer - - -class StyledPilImage(qrcode.image.base.BaseImageWithDrawer): - """ - Styled PIL image builder, default format is PNG. - - This differs from the PilImage in that there is a module_drawer, a - color_mask, and an optional image - - The module_drawer should extend the QRModuleDrawer class and implement the - drawrect_context(self, box, active, context), and probably also the - initialize function. This will draw an individual "module" or square on - the QR code. - - The color_mask will extend the QRColorMask class and will at very least - implement the get_fg_pixel(image, x, y) function, calculating a color to - put on the image at the pixel location (x,y) (more advanced functionality - can be gotten by instead overriding other functions defined in the - QRColorMask class) - - The Image can be specified either by path or with a Pillow Image, and if it - is there will be placed in the middle of the QR code. No effort is done to - ensure that the QR code is still legible after the image has been placed - there; Q or H level error correction levels are recommended to maintain - data integrity A resampling filter can be specified (defaulting to - PIL.Image.Resampling.LANCZOS) for resizing; see PIL.Image.resize() for possible - options for this parameter. - The image size can be controlled by `embedded_image_ratio` which is a ratio - between 0 and 1 that's set in relation to the overall width of the QR code. - """ - - kind = "PNG" - - needs_processing = True - color_mask: QRColorMask - default_drawer_class = SquareModuleDrawer - - def __init__(self, *args, **kwargs): - self.color_mask = kwargs.get("color_mask", SolidFillColorMask()) - # allow embeded_ parameters with typos for backwards compatibility - embedded_image_path = kwargs.get( - "embedded_image_path", kwargs.get("embeded_image_path", None) - ) - self.embedded_image = kwargs.get( - "embedded_image", kwargs.get("embeded_image", None) - ) - self.embedded_image_ratio = kwargs.get( - "embedded_image_ratio", kwargs.get("embeded_image_ratio", 0.25) - ) - self.embedded_image_resample = kwargs.get( - "embedded_image_resample", - kwargs.get("embeded_image_resample", Image.Resampling.LANCZOS), - ) - if not self.embedded_image and embedded_image_path: - self.embedded_image = Image.open(embedded_image_path) - - # the paint_color is the color the module drawer will use to draw upon - # a canvas During the color mask process, pixels that are paint_color - # are replaced by a newly-calculated color - self.paint_color = tuple(0 for i in self.color_mask.back_color) - if self.color_mask.has_transparency: - self.paint_color = tuple([*self.color_mask.back_color[:3], 255]) - - super().__init__(*args, **kwargs) - - def new_image(self, **kwargs): - mode = ( - "RGBA" - if ( - self.color_mask.has_transparency - or (self.embedded_image and "A" in self.embedded_image.getbands()) - ) - else "RGB" - ) - # This is the background color. Should be white or whiteish - back_color = self.color_mask.back_color - - return Image.new(mode, (self.pixel_size, self.pixel_size), back_color) - - def init_new_image(self): - self.color_mask.initialize(self, self._img) - super().init_new_image() - - def process(self): - self.color_mask.apply_mask(self._img) - if self.embedded_image: - self.draw_embedded_image() - - def draw_embedded_image(self): - if not self.embedded_image: - return - total_width, _ = self._img.size - total_width = int(total_width) - logo_width_ish = int(total_width * self.embedded_image_ratio) - logo_offset = ( - int((int(total_width / 2) - int(logo_width_ish / 2)) / self.box_size) - * self.box_size - ) # round the offset to the nearest module - logo_position = (logo_offset, logo_offset) - logo_width = total_width - logo_offset * 2 - region = self.embedded_image - region = region.resize((logo_width, logo_width), self.embedded_image_resample) - if "A" in region.getbands(): - self._img.alpha_composite(region, logo_position) - else: - self._img.paste(region, logo_position) - - def save(self, stream, format=None, **kwargs): - if format is None: - format = kwargs.get("kind", self.kind) - if "kind" in kwargs: - del kwargs["kind"] - self._img.save(stream, format=format, **kwargs) - - def __getattr__(self, name): - return getattr(self._img, name) diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 798e154..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc deleted file mode 100644 index dba333d..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/colormasks.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/colormasks.py deleted file mode 100644 index 9599f7f..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styles/colormasks.py +++ /dev/null @@ -1,226 +0,0 @@ -import math - -from PIL import Image - - -class QRColorMask: - """ - QRColorMask is used to color in the QRCode. - - By the time apply_mask is called, the QRModuleDrawer of the StyledPilImage - will have drawn all of the modules on the canvas (the color of these - modules will be mostly black, although antialiasing may result in - gradients) In the base class, apply_mask is implemented such that the - background color will remain, but the foreground pixels will be replaced by - a color determined by a call to get_fg_pixel. There is additional - calculation done to preserve the gradient artifacts of antialiasing. - - All QRColorMask objects should be careful about RGB vs RGBA color spaces. - - For examples of what these look like, see doc/color_masks.png - """ - - back_color = (255, 255, 255) - has_transparency = False - paint_color = back_color - - def initialize(self, styledPilImage, image): - self.paint_color = styledPilImage.paint_color - - def apply_mask(self, image, use_cache=False): - width, height = image.size - pixels = image.load() - fg_color_cache = {} if use_cache else None - for x in range(width): - for y in range(height): - current_color = pixels[x, y] - if current_color == self.back_color: - continue - if use_cache and current_color in fg_color_cache: - pixels[x, y] = fg_color_cache[current_color] - continue - norm = self.extrap_color( - self.back_color, self.paint_color, current_color - ) - if norm is not None: - new_color = self.interp_color( - self.get_bg_pixel(image, x, y), - self.get_fg_pixel(image, x, y), - norm, - ) - pixels[x, y] = new_color - - if use_cache: - fg_color_cache[current_color] = new_color - else: - pixels[x, y] = self.get_bg_pixel(image, x, y) - - def get_fg_pixel(self, image, x, y): - raise NotImplementedError("QRModuleDrawer.paint_fg_pixel") - - def get_bg_pixel(self, image, x, y): - return self.back_color - - # The following functions are helpful for color calculation: - - # interpolate a number between two numbers - def interp_num(self, n1, n2, norm): - return int(n2 * norm + n1 * (1 - norm)) - - # interpolate a color between two colorrs - def interp_color(self, col1, col2, norm): - return tuple(self.interp_num(col1[i], col2[i], norm) for i in range(len(col1))) - - # find the interpolation coefficient between two numbers - def extrap_num(self, n1, n2, interped_num): - if n2 == n1: - return None - else: - return (interped_num - n1) / (n2 - n1) - - # find the interpolation coefficient between two numbers - def extrap_color(self, col1, col2, interped_color): - normed = [] - for c1, c2, ci in zip(col1, col2, interped_color): - extrap = self.extrap_num(c1, c2, ci) - if extrap is not None: - normed.append(extrap) - if not normed: - return None - return sum(normed) / len(normed) - - -class SolidFillColorMask(QRColorMask): - """ - Just fills in the background with one color and the foreground with another - """ - - def __init__(self, back_color=(255, 255, 255), front_color=(0, 0, 0)): - self.back_color = back_color - self.front_color = front_color - self.has_transparency = len(self.back_color) == 4 - - def apply_mask(self, image): - if self.back_color == (255, 255, 255) and self.front_color == (0, 0, 0): - # Optimization: the image is already drawn by QRModuleDrawer in - # black and white, so if these are also our mask colors we don't - # need to do anything. This is much faster than actually applying a - # mask. - pass - else: - # TODO there's probably a way to use PIL.ImageMath instead of doing - # the individual pixel comparisons that the base class uses, which - # would be a lot faster. (In fact doing this would probably remove - # the need for the B&W optimization above.) - QRColorMask.apply_mask(self, image, use_cache=True) - - def get_fg_pixel(self, image, x, y): - return self.front_color - - -class RadialGradiantColorMask(QRColorMask): - """ - Fills in the foreground with a radial gradient from the center to the edge - """ - - def __init__( - self, back_color=(255, 255, 255), center_color=(0, 0, 0), edge_color=(0, 0, 255) - ): - self.back_color = back_color - self.center_color = center_color - self.edge_color = edge_color - self.has_transparency = len(self.back_color) == 4 - - def get_fg_pixel(self, image, x, y): - width, _ = image.size - normedDistanceToCenter = math.sqrt( - (x - width / 2) ** 2 + (y - width / 2) ** 2 - ) / (math.sqrt(2) * width / 2) - return self.interp_color( - self.center_color, self.edge_color, normedDistanceToCenter - ) - - -class SquareGradiantColorMask(QRColorMask): - """ - Fills in the foreground with a square gradient from the center to the edge - """ - - def __init__( - self, back_color=(255, 255, 255), center_color=(0, 0, 0), edge_color=(0, 0, 255) - ): - self.back_color = back_color - self.center_color = center_color - self.edge_color = edge_color - self.has_transparency = len(self.back_color) == 4 - - def get_fg_pixel(self, image, x, y): - width, _ = image.size - normedDistanceToCenter = max(abs(x - width / 2), abs(y - width / 2)) / ( - width / 2 - ) - return self.interp_color( - self.center_color, self.edge_color, normedDistanceToCenter - ) - - -class HorizontalGradiantColorMask(QRColorMask): - """ - Fills in the foreground with a gradient sweeping from the left to the right - """ - - def __init__( - self, back_color=(255, 255, 255), left_color=(0, 0, 0), right_color=(0, 0, 255) - ): - self.back_color = back_color - self.left_color = left_color - self.right_color = right_color - self.has_transparency = len(self.back_color) == 4 - - def get_fg_pixel(self, image, x, y): - width, _ = image.size - return self.interp_color(self.left_color, self.right_color, x / width) - - -class VerticalGradiantColorMask(QRColorMask): - """ - Fills in the forefround with a gradient sweeping from the top to the bottom - """ - - def __init__( - self, back_color=(255, 255, 255), top_color=(0, 0, 0), bottom_color=(0, 0, 255) - ): - self.back_color = back_color - self.top_color = top_color - self.bottom_color = bottom_color - self.has_transparency = len(self.back_color) == 4 - - def get_fg_pixel(self, image, x, y): - width, _ = image.size - return self.interp_color(self.top_color, self.bottom_color, y / width) - - -class ImageColorMask(QRColorMask): - """ - Fills in the foreground with pixels from another image, either passed by - path or passed by image object. - """ - - def __init__( - self, back_color=(255, 255, 255), color_mask_path=None, color_mask_image=None - ): - self.back_color = back_color - if color_mask_image: - self.color_img = color_mask_image - else: - self.color_img = Image.open(color_mask_path) - - self.has_transparency = len(self.back_color) == 4 - - def initialize(self, styledPilImage, image): - self.paint_color = styledPilImage.paint_color - self.color_img = self.color_img.resize(image.size) - - def get_fg_pixel(self, image, x, y): - width, _ = image.size - return self.color_img.getpixel((x, y)) diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__init__.py deleted file mode 100644 index 99217d4..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# For backwards compatibility, importing the PIL drawers here. -try: - from .pil import CircleModuleDrawer # noqa: F401 - from .pil import GappedSquareModuleDrawer # noqa: F401 - from .pil import HorizontalBarsDrawer # noqa: F401 - from .pil import RoundedModuleDrawer # noqa: F401 - from .pil import SquareModuleDrawer # noqa: F401 - from .pil import VerticalBarsDrawer # noqa: F401 -except ImportError: - pass diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index bb4ff99..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc deleted file mode 100644 index e60751b..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc deleted file mode 100644 index f1104bf..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc deleted file mode 100644 index 7853f9a..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/base.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/base.py deleted file mode 100644 index 154d2cf..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/base.py +++ /dev/null @@ -1,33 +0,0 @@ -import abc -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from qrcode.image.base import BaseImage - - -class QRModuleDrawer(abc.ABC): - """ - QRModuleDrawer exists to draw the modules of the QR Code onto images. - - For this, technically all that is necessary is a ``drawrect(self, box, - is_active)`` function which takes in the box in which it is to draw, - whether or not the box is "active" (a module exists there). If - ``needs_neighbors`` is set to True, then the method should also accept a - ``neighbors`` kwarg (the neighboring pixels). - - It is frequently necessary to also implement an "initialize" function to - set up values that only the containing Image class knows about. - - For examples of what these look like, see doc/module_drawers.png - """ - - needs_neighbors = False - - def __init__(self, **kwargs): - pass - - def initialize(self, img: "BaseImage") -> None: - self.img = img - - @abc.abstractmethod - def drawrect(self, box, is_active) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/pil.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/pil.py deleted file mode 100644 index 4aa4249..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/pil.py +++ /dev/null @@ -1,265 +0,0 @@ -from typing import TYPE_CHECKING - -from PIL import Image, ImageDraw -from qrcode.image.styles.moduledrawers.base import QRModuleDrawer - -if TYPE_CHECKING: - from qrcode.image.styledpil import StyledPilImage - from qrcode.main import ActiveWithNeighbors - -# When drawing antialiased things, make them bigger and then shrink them down -# to size after the geometry has been drawn. -ANTIALIASING_FACTOR = 4 - - -class StyledPilQRModuleDrawer(QRModuleDrawer): - """ - A base class for StyledPilImage module drawers. - - NOTE: the color that this draws in should be whatever is equivalent to - black in the color space, and the specified QRColorMask will handle adding - colors as necessary to the image - """ - - img: "StyledPilImage" - - -class SquareModuleDrawer(StyledPilQRModuleDrawer): - """ - Draws the modules as simple squares - """ - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - self.imgDraw = ImageDraw.Draw(self.img._img) - - def drawrect(self, box, is_active: bool): - if is_active: - self.imgDraw.rectangle(box, fill=self.img.paint_color) - - -class GappedSquareModuleDrawer(StyledPilQRModuleDrawer): - """ - Draws the modules as simple squares that are not contiguous. - - The size_ratio determines how wide the squares are relative to the width of - the space they are printed in - """ - - def __init__(self, size_ratio=0.8): - self.size_ratio = size_ratio - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - self.imgDraw = ImageDraw.Draw(self.img._img) - self.delta = (1 - self.size_ratio) * self.img.box_size / 2 - - def drawrect(self, box, is_active: bool): - if is_active: - smaller_box = ( - box[0][0] + self.delta, - box[0][1] + self.delta, - box[1][0] - self.delta, - box[1][1] - self.delta, - ) - self.imgDraw.rectangle(smaller_box, fill=self.img.paint_color) - - -class CircleModuleDrawer(StyledPilQRModuleDrawer): - """ - Draws the modules as circles - """ - - circle = None - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - box_size = self.img.box_size - fake_size = box_size * ANTIALIASING_FACTOR - self.circle = Image.new( - self.img.mode, - (fake_size, fake_size), - self.img.color_mask.back_color, - ) - ImageDraw.Draw(self.circle).ellipse( - (0, 0, fake_size, fake_size), fill=self.img.paint_color - ) - self.circle = self.circle.resize((box_size, box_size), Image.Resampling.LANCZOS) - - def drawrect(self, box, is_active: bool): - if is_active: - self.img._img.paste(self.circle, (box[0][0], box[0][1])) - - -class RoundedModuleDrawer(StyledPilQRModuleDrawer): - """ - Draws the modules with all 90 degree corners replaced with rounded edges. - - radius_ratio determines the radius of the rounded edges - a value of 1 - means that an isolated module will be drawn as a circle, while a value of 0 - means that the radius of the rounded edge will be 0 (and thus back to 90 - degrees again). - """ - - needs_neighbors = True - - def __init__(self, radius_ratio=1): - self.radius_ratio = radius_ratio - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - self.corner_width = int(self.img.box_size / 2) - self.setup_corners() - - def setup_corners(self): - mode = self.img.mode - back_color = self.img.color_mask.back_color - front_color = self.img.paint_color - self.SQUARE = Image.new( - mode, (self.corner_width, self.corner_width), front_color - ) - - fake_width = self.corner_width * ANTIALIASING_FACTOR - radius = self.radius_ratio * fake_width - diameter = radius * 2 - base = Image.new( - mode, (fake_width, fake_width), back_color - ) # make something 4x bigger for antialiasing - base_draw = ImageDraw.Draw(base) - base_draw.ellipse((0, 0, diameter, diameter), fill=front_color) - base_draw.rectangle((radius, 0, fake_width, fake_width), fill=front_color) - base_draw.rectangle((0, radius, fake_width, fake_width), fill=front_color) - self.NW_ROUND = base.resize( - (self.corner_width, self.corner_width), Image.Resampling.LANCZOS - ) - self.SW_ROUND = self.NW_ROUND.transpose(Image.Transpose.FLIP_TOP_BOTTOM) - self.SE_ROUND = self.NW_ROUND.transpose(Image.Transpose.ROTATE_180) - self.NE_ROUND = self.NW_ROUND.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - - def drawrect(self, box: list[list[int]], is_active: "ActiveWithNeighbors"): - if not is_active: - return - # find rounded edges - nw_rounded = not is_active.W and not is_active.N - ne_rounded = not is_active.N and not is_active.E - se_rounded = not is_active.E and not is_active.S - sw_rounded = not is_active.S and not is_active.W - - nw = self.NW_ROUND if nw_rounded else self.SQUARE - ne = self.NE_ROUND if ne_rounded else self.SQUARE - se = self.SE_ROUND if se_rounded else self.SQUARE - sw = self.SW_ROUND if sw_rounded else self.SQUARE - self.img._img.paste(nw, (box[0][0], box[0][1])) - self.img._img.paste(ne, (box[0][0] + self.corner_width, box[0][1])) - self.img._img.paste( - se, (box[0][0] + self.corner_width, box[0][1] + self.corner_width) - ) - self.img._img.paste(sw, (box[0][0], box[0][1] + self.corner_width)) - - -class VerticalBarsDrawer(StyledPilQRModuleDrawer): - """ - Draws vertically contiguous groups of modules as long rounded rectangles, - with gaps between neighboring bands (the size of these gaps is inversely - proportional to the horizontal_shrink). - """ - - needs_neighbors = True - - def __init__(self, horizontal_shrink=0.8): - self.horizontal_shrink = horizontal_shrink - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - self.half_height = int(self.img.box_size / 2) - self.delta = int((1 - self.horizontal_shrink) * self.half_height) - self.setup_edges() - - def setup_edges(self): - mode = self.img.mode - back_color = self.img.color_mask.back_color - front_color = self.img.paint_color - - height = self.half_height - width = height * 2 - shrunken_width = int(width * self.horizontal_shrink) - self.SQUARE = Image.new(mode, (shrunken_width, height), front_color) - - fake_width = width * ANTIALIASING_FACTOR - fake_height = height * ANTIALIASING_FACTOR - base = Image.new( - mode, (fake_width, fake_height), back_color - ) # make something 4x bigger for antialiasing - base_draw = ImageDraw.Draw(base) - base_draw.ellipse((0, 0, fake_width, fake_height * 2), fill=front_color) - - self.ROUND_TOP = base.resize((shrunken_width, height), Image.Resampling.LANCZOS) - self.ROUND_BOTTOM = self.ROUND_TOP.transpose(Image.Transpose.FLIP_TOP_BOTTOM) - - def drawrect(self, box, is_active: "ActiveWithNeighbors"): - if is_active: - # find rounded edges - top_rounded = not is_active.N - bottom_rounded = not is_active.S - - top = self.ROUND_TOP if top_rounded else self.SQUARE - bottom = self.ROUND_BOTTOM if bottom_rounded else self.SQUARE - self.img._img.paste(top, (box[0][0] + self.delta, box[0][1])) - self.img._img.paste( - bottom, (box[0][0] + self.delta, box[0][1] + self.half_height) - ) - - -class HorizontalBarsDrawer(StyledPilQRModuleDrawer): - """ - Draws horizontally contiguous groups of modules as long rounded rectangles, - with gaps between neighboring bands (the size of these gaps is inversely - proportional to the vertical_shrink). - """ - - needs_neighbors = True - - def __init__(self, vertical_shrink=0.8): - self.vertical_shrink = vertical_shrink - - def initialize(self, *args, **kwargs): - super().initialize(*args, **kwargs) - self.half_width = int(self.img.box_size / 2) - self.delta = int((1 - self.vertical_shrink) * self.half_width) - self.setup_edges() - - def setup_edges(self): - mode = self.img.mode - back_color = self.img.color_mask.back_color - front_color = self.img.paint_color - - width = self.half_width - height = width * 2 - shrunken_height = int(height * self.vertical_shrink) - self.SQUARE = Image.new(mode, (width, shrunken_height), front_color) - - fake_width = width * ANTIALIASING_FACTOR - fake_height = height * ANTIALIASING_FACTOR - base = Image.new( - mode, (fake_width, fake_height), back_color - ) # make something 4x bigger for antialiasing - base_draw = ImageDraw.Draw(base) - base_draw.ellipse((0, 0, fake_width * 2, fake_height), fill=front_color) - - self.ROUND_LEFT = base.resize( - (width, shrunken_height), Image.Resampling.LANCZOS - ) - self.ROUND_RIGHT = self.ROUND_LEFT.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - - def drawrect(self, box, is_active: "ActiveWithNeighbors"): - if is_active: - # find rounded edges - left_rounded = not is_active.W - right_rounded = not is_active.E - - left = self.ROUND_LEFT if left_rounded else self.SQUARE - right = self.ROUND_RIGHT if right_rounded else self.SQUARE - self.img._img.paste(left, (box[0][0], box[0][1] + self.delta)) - self.img._img.paste( - right, (box[0][0] + self.half_width, box[0][1] + self.delta) - ) diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/svg.py b/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/svg.py deleted file mode 100644 index cf5b9e7..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/svg.py +++ /dev/null @@ -1,139 +0,0 @@ -import abc -from decimal import Decimal -from typing import TYPE_CHECKING, NamedTuple - -from qrcode.image.styles.moduledrawers.base import QRModuleDrawer -from qrcode.compat.etree import ET - -if TYPE_CHECKING: - from qrcode.image.svg import SvgFragmentImage, SvgPathImage - -ANTIALIASING_FACTOR = 4 - - -class Coords(NamedTuple): - x0: Decimal - y0: Decimal - x1: Decimal - y1: Decimal - xh: Decimal - yh: Decimal - - -class BaseSvgQRModuleDrawer(QRModuleDrawer): - img: "SvgFragmentImage" - - def __init__(self, *, size_ratio: Decimal = Decimal(1), **kwargs): - self.size_ratio = size_ratio - - def initialize(self, *args, **kwargs) -> None: - super().initialize(*args, **kwargs) - self.box_delta = (1 - self.size_ratio) * self.img.box_size / 2 - self.box_size = Decimal(self.img.box_size) * self.size_ratio - self.box_half = self.box_size / 2 - - def coords(self, box) -> Coords: - row, col = box[0] - x = row + self.box_delta - y = col + self.box_delta - - return Coords( - x, - y, - x + self.box_size, - y + self.box_size, - x + self.box_half, - y + self.box_half, - ) - - -class SvgQRModuleDrawer(BaseSvgQRModuleDrawer): - tag = "rect" - - def initialize(self, *args, **kwargs) -> None: - super().initialize(*args, **kwargs) - self.tag_qname = ET.QName(self.img._SVG_namespace, self.tag) - - def drawrect(self, box, is_active: bool): - if not is_active: - return - self.img._img.append(self.el(box)) - - @abc.abstractmethod - def el(self, box): ... - - -class SvgSquareDrawer(SvgQRModuleDrawer): - def initialize(self, *args, **kwargs) -> None: - super().initialize(*args, **kwargs) - self.unit_size = self.img.units(self.box_size) - - def el(self, box): - coords = self.coords(box) - return ET.Element( - self.tag_qname, # type: ignore - x=self.img.units(coords.x0), - y=self.img.units(coords.y0), - width=self.unit_size, - height=self.unit_size, - ) - - -class SvgCircleDrawer(SvgQRModuleDrawer): - tag = "circle" - - def initialize(self, *args, **kwargs) -> None: - super().initialize(*args, **kwargs) - self.radius = self.img.units(self.box_half) - - def el(self, box): - coords = self.coords(box) - return ET.Element( - self.tag_qname, # type: ignore - cx=self.img.units(coords.xh), - cy=self.img.units(coords.yh), - r=self.radius, - ) - - -class SvgPathQRModuleDrawer(BaseSvgQRModuleDrawer): - img: "SvgPathImage" - - def drawrect(self, box, is_active: bool): - if not is_active: - return - self.img._subpaths.append(self.subpath(box)) - - @abc.abstractmethod - def subpath(self, box) -> str: ... - - -class SvgPathSquareDrawer(SvgPathQRModuleDrawer): - def subpath(self, box) -> str: - coords = self.coords(box) - x0 = self.img.units(coords.x0, text=False) - y0 = self.img.units(coords.y0, text=False) - x1 = self.img.units(coords.x1, text=False) - y1 = self.img.units(coords.y1, text=False) - - return f"M{x0},{y0}H{x1}V{y1}H{x0}z" - - -class SvgPathCircleDrawer(SvgPathQRModuleDrawer): - def initialize(self, *args, **kwargs) -> None: - super().initialize(*args, **kwargs) - - def subpath(self, box) -> str: - coords = self.coords(box) - x0 = self.img.units(coords.x0, text=False) - yh = self.img.units(coords.yh, text=False) - h = self.img.units(self.box_half - self.box_delta, text=False) - x1 = self.img.units(coords.x1, text=False) - - # rx,ry is the centerpoint of the arc - # 1? is the x-axis-rotation - # 2? is the large-arc-flag - # 3? is the sweep flag - # x,y is the point the arc is drawn to - - return f"M{x0},{yh}A{h},{h} 0 0 0 {x1},{yh}A{h},{h} 0 0 0 {x0},{yh}z" diff --git a/myenv/lib/python3.12/site-packages/qrcode/image/svg.py b/myenv/lib/python3.12/site-packages/qrcode/image/svg.py deleted file mode 100644 index 4117559..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/image/svg.py +++ /dev/null @@ -1,175 +0,0 @@ -import decimal -from decimal import Decimal -from typing import Optional, Union, overload, Literal - -import qrcode.image.base -from qrcode.compat.etree import ET -from qrcode.image.styles.moduledrawers import svg as svg_drawers -from qrcode.image.styles.moduledrawers.base import QRModuleDrawer - - -class SvgFragmentImage(qrcode.image.base.BaseImageWithDrawer): - """ - SVG image builder - - Creates a QR-code image as a SVG document fragment. - """ - - _SVG_namespace = "http://www.w3.org/2000/svg" - kind = "SVG" - allowed_kinds = ("SVG",) - default_drawer_class: type[QRModuleDrawer] = svg_drawers.SvgSquareDrawer - - def __init__(self, *args, **kwargs): - ET.register_namespace("svg", self._SVG_namespace) - super().__init__(*args, **kwargs) - # Save the unit size, for example the default box_size of 10 is '1mm'. - self.unit_size = self.units(self.box_size) - - @overload - def units(self, pixels: Union[int, Decimal], text: Literal[False]) -> Decimal: ... - - @overload - def units(self, pixels: Union[int, Decimal], text: Literal[True] = True) -> str: ... - - def units(self, pixels, text=True): - """ - A box_size of 10 (default) equals 1mm. - """ - units = Decimal(pixels) / 10 - if not text: - return units - units = units.quantize(Decimal("0.001")) - context = decimal.Context(traps=[decimal.Inexact]) - try: - for d in (Decimal("0.01"), Decimal("0.1"), Decimal("0")): - units = units.quantize(d, context=context) - except decimal.Inexact: - pass - return f"{units}mm" - - def save(self, stream, kind=None): - self.check_kind(kind=kind) - self._write(stream) - - def to_string(self, **kwargs): - return ET.tostring(self._img, **kwargs) - - def new_image(self, **kwargs): - return self._svg(**kwargs) - - def _svg(self, tag=None, version="1.1", **kwargs): - if tag is None: - tag = ET.QName(self._SVG_namespace, "svg") - dimension = self.units(self.pixel_size) - return ET.Element( - tag, # type: ignore - width=dimension, - height=dimension, - version=version, - **kwargs, - ) - - def _write(self, stream): - ET.ElementTree(self._img).write(stream, xml_declaration=False) - - -class SvgImage(SvgFragmentImage): - """ - Standalone SVG image builder - - Creates a QR-code image as a standalone SVG document. - """ - - background: Optional[str] = None - drawer_aliases: qrcode.image.base.DrawerAliases = { - "circle": (svg_drawers.SvgCircleDrawer, {}), - "gapped-circle": (svg_drawers.SvgCircleDrawer, {"size_ratio": Decimal(0.8)}), - "gapped-square": (svg_drawers.SvgSquareDrawer, {"size_ratio": Decimal(0.8)}), - } - - def _svg(self, tag="svg", **kwargs): - svg = super()._svg(tag=tag, **kwargs) - svg.set("xmlns", self._SVG_namespace) - if self.background: - svg.append( - ET.Element( - "rect", - fill=self.background, - x="0", - y="0", - width="100%", - height="100%", - ) - ) - return svg - - def _write(self, stream): - ET.ElementTree(self._img).write(stream, encoding="UTF-8", xml_declaration=True) - - -class SvgPathImage(SvgImage): - """ - SVG image builder with one single element (removes white spaces - between individual QR points). - """ - - QR_PATH_STYLE = { - "fill": "#000000", - "fill-opacity": "1", - "fill-rule": "nonzero", - "stroke": "none", - } - - needs_processing = True - path: Optional[ET.Element] = None - default_drawer_class: type[QRModuleDrawer] = svg_drawers.SvgPathSquareDrawer - drawer_aliases = { - "circle": (svg_drawers.SvgPathCircleDrawer, {}), - "gapped-circle": ( - svg_drawers.SvgPathCircleDrawer, - {"size_ratio": Decimal(0.8)}, - ), - "gapped-square": ( - svg_drawers.SvgPathSquareDrawer, - {"size_ratio": Decimal(0.8)}, - ), - } - - def __init__(self, *args, **kwargs): - self._subpaths: list[str] = [] - super().__init__(*args, **kwargs) - - def _svg(self, viewBox=None, **kwargs): - if viewBox is None: - dimension = self.units(self.pixel_size, text=False) - viewBox = "0 0 {d} {d}".format(d=dimension) - return super()._svg(viewBox=viewBox, **kwargs) - - def process(self): - # Store the path just in case someone wants to use it again or in some - # unique way. - self.path = ET.Element( - ET.QName("path"), # type: ignore - d="".join(self._subpaths), - id="qr-path", - **self.QR_PATH_STYLE, - ) - self._subpaths = [] - self._img.append(self.path) - - -class SvgFillImage(SvgImage): - """ - An SvgImage that fills the background to white. - """ - - background = "white" - - -class SvgPathFillImage(SvgPathImage): - """ - An SvgPathImage that fills the background to white. - """ - - background = "white" diff --git a/myenv/lib/python3.12/site-packages/qrcode/main.py b/myenv/lib/python3.12/site-packages/qrcode/main.py deleted file mode 100644 index 152c97b..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/main.py +++ /dev/null @@ -1,541 +0,0 @@ -import sys -from bisect import bisect_left -from typing import ( - Generic, - NamedTuple, - Optional, - TypeVar, - cast, - overload, - Literal, -) - -from qrcode import constants, exceptions, util -from qrcode.image.base import BaseImage -from qrcode.image.pure import PyPNGImage - -ModulesType = list[list[Optional[bool]]] -# Cache modules generated just based on the QR Code version -precomputed_qr_blanks: dict[int, ModulesType] = {} - - -def make(data=None, **kwargs): - qr = QRCode(**kwargs) - qr.add_data(data) - return qr.make_image() - - -def _check_box_size(size): - if int(size) <= 0: - raise ValueError(f"Invalid box size (was {size}, expected larger than 0)") - - -def _check_border(size): - if int(size) < 0: - raise ValueError( - "Invalid border value (was %s, expected 0 or larger than that)" % size - ) - - -def _check_mask_pattern(mask_pattern): - if mask_pattern is None: - return - if not isinstance(mask_pattern, int): - raise TypeError( - f"Invalid mask pattern (was {type(mask_pattern)}, expected int)" - ) - if mask_pattern < 0 or mask_pattern > 7: - raise ValueError(f"Mask pattern should be in range(8) (got {mask_pattern})") - - -def copy_2d_array(x): - return [row[:] for row in x] - - -class ActiveWithNeighbors(NamedTuple): - NW: bool - N: bool - NE: bool - W: bool - me: bool - E: bool - SW: bool - S: bool - SE: bool - - def __bool__(self) -> bool: - return self.me - - -GenericImage = TypeVar("GenericImage", bound=BaseImage) -GenericImageLocal = TypeVar("GenericImageLocal", bound=BaseImage) - - -class QRCode(Generic[GenericImage]): - modules: ModulesType - _version: Optional[int] = None - - def __init__( - self, - version=None, - error_correction=constants.ERROR_CORRECT_M, - box_size=10, - border=4, - image_factory: Optional[type[GenericImage]] = None, - mask_pattern=None, - ): - _check_box_size(box_size) - _check_border(border) - self.version = version - self.error_correction = int(error_correction) - self.box_size = int(box_size) - # Spec says border should be at least four boxes wide, but allow for - # any (e.g. for producing printable QR codes). - self.border = int(border) - self.mask_pattern = mask_pattern - self.image_factory = image_factory - if image_factory is not None: - assert issubclass(image_factory, BaseImage) - self.clear() - - @property - def version(self) -> int: - if self._version is None: - self.best_fit() - return cast(int, self._version) - - @version.setter - def version(self, value) -> None: - if value is not None: - value = int(value) - util.check_version(value) - self._version = value - - @property - def mask_pattern(self): - return self._mask_pattern - - @mask_pattern.setter - def mask_pattern(self, pattern): - _check_mask_pattern(pattern) - self._mask_pattern = pattern - - def clear(self): - """ - Reset the internal data. - """ - self.modules = [[]] - self.modules_count = 0 - self.data_cache = None - self.data_list = [] - - def add_data(self, data, optimize=20): - """ - Add data to this QR Code. - - :param optimize: Data will be split into multiple chunks to optimize - the QR size by finding to more compressed modes of at least this - length. Set to ``0`` to avoid optimizing at all. - """ - if isinstance(data, util.QRData): - self.data_list.append(data) - elif optimize: - self.data_list.extend(util.optimal_data_chunks(data, minimum=optimize)) - else: - self.data_list.append(util.QRData(data)) - self.data_cache = None - - def make(self, fit=True): - """ - Compile the data into a QR Code array. - - :param fit: If ``True`` (or if a size has not been provided), find the - best fit for the data to avoid data overflow errors. - """ - if fit or (self.version is None): - self.best_fit(start=self.version) - if self.mask_pattern is None: - self.makeImpl(False, self.best_mask_pattern()) - else: - self.makeImpl(False, self.mask_pattern) - - def makeImpl(self, test, mask_pattern): - self.modules_count = self.version * 4 + 17 - - if self.version in precomputed_qr_blanks: - self.modules = copy_2d_array(precomputed_qr_blanks[self.version]) - else: - self.modules = [ - [None] * self.modules_count for i in range(self.modules_count) - ] - self.setup_position_probe_pattern(0, 0) - self.setup_position_probe_pattern(self.modules_count - 7, 0) - self.setup_position_probe_pattern(0, self.modules_count - 7) - self.setup_position_adjust_pattern() - self.setup_timing_pattern() - - precomputed_qr_blanks[self.version] = copy_2d_array(self.modules) - - self.setup_type_info(test, mask_pattern) - - if self.version >= 7: - self.setup_type_number(test) - - if self.data_cache is None: - self.data_cache = util.create_data( - self.version, self.error_correction, self.data_list - ) - self.map_data(self.data_cache, mask_pattern) - - def setup_position_probe_pattern(self, row, col): - for r in range(-1, 8): - if row + r <= -1 or self.modules_count <= row + r: - continue - - for c in range(-1, 8): - if col + c <= -1 or self.modules_count <= col + c: - continue - - if ( - (0 <= r <= 6 and c in {0, 6}) - or (0 <= c <= 6 and r in {0, 6}) - or (2 <= r <= 4 and 2 <= c <= 4) - ): - self.modules[row + r][col + c] = True - else: - self.modules[row + r][col + c] = False - - def best_fit(self, start=None): - """ - Find the minimum size required to fit in the data. - """ - if start is None: - start = 1 - util.check_version(start) - - # Corresponds to the code in util.create_data, except we don't yet know - # version, so optimistically assume start and check later - mode_sizes = util.mode_sizes_for_version(start) - buffer = util.BitBuffer() - for data in self.data_list: - buffer.put(data.mode, 4) - buffer.put(len(data), mode_sizes[data.mode]) - data.write(buffer) - - needed_bits = len(buffer) - self.version = bisect_left( - util.BIT_LIMIT_TABLE[self.error_correction], needed_bits, start - ) - if self.version == 41: - raise exceptions.DataOverflowError() - - # Now check whether we need more bits for the mode sizes, recursing if - # our guess was too low - if mode_sizes is not util.mode_sizes_for_version(self.version): - self.best_fit(start=self.version) - return self.version - - def best_mask_pattern(self): - """ - Find the most efficient mask pattern. - """ - min_lost_point = 0 - pattern = 0 - - for i in range(8): - self.makeImpl(True, i) - - lost_point = util.lost_point(self.modules) - - if i == 0 or min_lost_point > lost_point: - min_lost_point = lost_point - pattern = i - - return pattern - - def print_tty(self, out=None): - """ - Output the QR Code only using TTY colors. - - If the data has not been compiled yet, make it first. - """ - if out is None: - import sys - - out = sys.stdout - - if not out.isatty(): - raise OSError("Not a tty") - - if self.data_cache is None: - self.make() - - modcount = self.modules_count - out.write("\x1b[1;47m" + (" " * (modcount * 2 + 4)) + "\x1b[0m\n") - for r in range(modcount): - out.write("\x1b[1;47m \x1b[40m") - for c in range(modcount): - if self.modules[r][c]: - out.write(" ") - else: - out.write("\x1b[1;47m \x1b[40m") - out.write("\x1b[1;47m \x1b[0m\n") - out.write("\x1b[1;47m" + (" " * (modcount * 2 + 4)) + "\x1b[0m\n") - out.flush() - - def print_ascii(self, out=None, tty=False, invert=False): - """ - Output the QR Code using ASCII characters. - - :param tty: use fixed TTY color codes (forces invert=True) - :param invert: invert the ASCII characters (solid <-> transparent) - """ - if out is None: - out = sys.stdout - - if tty and not out.isatty(): - raise OSError("Not a tty") - - if self.data_cache is None: - self.make() - - modcount = self.modules_count - codes = [bytes((code,)).decode("cp437") for code in (255, 223, 220, 219)] - if tty: - invert = True - if invert: - codes.reverse() - - def get_module(x, y) -> int: - if invert and self.border and max(x, y) >= modcount + self.border: - return 1 - if min(x, y) < 0 or max(x, y) >= modcount: - return 0 - return cast(int, self.modules[x][y]) - - for r in range(-self.border, modcount + self.border, 2): - if tty: - if not invert or r < modcount + self.border - 1: - out.write("\x1b[48;5;232m") # Background black - out.write("\x1b[38;5;255m") # Foreground white - for c in range(-self.border, modcount + self.border): - pos = get_module(r, c) + (get_module(r + 1, c) << 1) - out.write(codes[pos]) - if tty: - out.write("\x1b[0m") - out.write("\n") - out.flush() - - @overload - def make_image( - self, image_factory: Literal[None] = None, **kwargs - ) -> GenericImage: ... - - @overload - def make_image( - self, image_factory: type[GenericImageLocal] = None, **kwargs - ) -> GenericImageLocal: ... - - def make_image(self, image_factory=None, **kwargs): - """ - Make an image from the QR Code data. - - If the data has not been compiled yet, make it first. - """ - # allow embeded_ parameters with typos for backwards compatibility - if ( - kwargs.get("embedded_image_path") - or kwargs.get("embedded_image") - or kwargs.get("embeded_image_path") - or kwargs.get("embeded_image") - ) and self.error_correction != constants.ERROR_CORRECT_H: - raise ValueError( - "Error correction level must be ERROR_CORRECT_H if an embedded image is provided" - ) - _check_box_size(self.box_size) - if self.data_cache is None: - self.make() - - if image_factory is not None: - assert issubclass(image_factory, BaseImage) - else: - image_factory = self.image_factory - if image_factory is None: - from qrcode.image.pil import Image, PilImage - - # Use PIL by default if available, otherwise use PyPNG. - image_factory = PilImage if Image else PyPNGImage - - im = image_factory( - self.border, - self.modules_count, - self.box_size, - qrcode_modules=self.modules, - **kwargs, - ) - - if im.needs_drawrect: - for r in range(self.modules_count): - for c in range(self.modules_count): - if im.needs_context: - im.drawrect_context(r, c, qr=self) - elif self.modules[r][c]: - im.drawrect(r, c) - if im.needs_processing: - im.process() - - return im - - # return true if and only if (row, col) is in the module - def is_constrained(self, row: int, col: int) -> bool: - return ( - row >= 0 - and row < len(self.modules) - and col >= 0 - and col < len(self.modules[row]) - ) - - def setup_timing_pattern(self): - for r in range(8, self.modules_count - 8): - if self.modules[r][6] is not None: - continue - self.modules[r][6] = r % 2 == 0 - - for c in range(8, self.modules_count - 8): - if self.modules[6][c] is not None: - continue - self.modules[6][c] = c % 2 == 0 - - def setup_position_adjust_pattern(self): - pos = util.pattern_position(self.version) - - for i in range(len(pos)): - row = pos[i] - - for j in range(len(pos)): - col = pos[j] - - if self.modules[row][col] is not None: - continue - - for r in range(-2, 3): - for c in range(-2, 3): - if ( - r == -2 - or r == 2 - or c == -2 - or c == 2 - or (r == 0 and c == 0) - ): - self.modules[row + r][col + c] = True - else: - self.modules[row + r][col + c] = False - - def setup_type_number(self, test): - bits = util.BCH_type_number(self.version) - - for i in range(18): - mod = not test and ((bits >> i) & 1) == 1 - self.modules[i // 3][i % 3 + self.modules_count - 8 - 3] = mod - - for i in range(18): - mod = not test and ((bits >> i) & 1) == 1 - self.modules[i % 3 + self.modules_count - 8 - 3][i // 3] = mod - - def setup_type_info(self, test, mask_pattern): - data = (self.error_correction << 3) | mask_pattern - bits = util.BCH_type_info(data) - - # vertical - for i in range(15): - mod = not test and ((bits >> i) & 1) == 1 - - if i < 6: - self.modules[i][8] = mod - elif i < 8: - self.modules[i + 1][8] = mod - else: - self.modules[self.modules_count - 15 + i][8] = mod - - # horizontal - for i in range(15): - mod = not test and ((bits >> i) & 1) == 1 - - if i < 8: - self.modules[8][self.modules_count - i - 1] = mod - elif i < 9: - self.modules[8][15 - i - 1 + 1] = mod - else: - self.modules[8][15 - i - 1] = mod - - # fixed module - self.modules[self.modules_count - 8][8] = not test - - def map_data(self, data, mask_pattern): - inc = -1 - row = self.modules_count - 1 - bitIndex = 7 - byteIndex = 0 - - mask_func = util.mask_func(mask_pattern) - - data_len = len(data) - - for col in range(self.modules_count - 1, 0, -2): - if col <= 6: - col -= 1 - - col_range = (col, col - 1) - - while True: - for c in col_range: - if self.modules[row][c] is None: - dark = False - - if byteIndex < data_len: - dark = ((data[byteIndex] >> bitIndex) & 1) == 1 - - if mask_func(row, c): - dark = not dark - - self.modules[row][c] = dark - bitIndex -= 1 - - if bitIndex == -1: - byteIndex += 1 - bitIndex = 7 - - row += inc - - if row < 0 or self.modules_count <= row: - row -= inc - inc = -inc - break - - def get_matrix(self): - """ - Return the QR Code as a multidimensional array, including the border. - - To return the array without a border, set ``self.border`` to 0 first. - """ - if self.data_cache is None: - self.make() - - if not self.border: - return self.modules - - width = len(self.modules) + self.border * 2 - code = [[False] * width] * self.border - x_border = [False] * self.border - for module in self.modules: - code.append(x_border + cast(list[bool], module) + x_border) - code += [[False] * width] * self.border - - return code - - def active_with_neighbors(self, row: int, col: int) -> ActiveWithNeighbors: - context: list[bool] = [] - for r in range(row - 1, row + 2): - for c in range(col - 1, col + 2): - context.append(self.is_constrained(r, c) and bool(self.modules[r][c])) - return ActiveWithNeighbors(*context) diff --git a/myenv/lib/python3.12/site-packages/qrcode/release.py b/myenv/lib/python3.12/site-packages/qrcode/release.py deleted file mode 100644 index 208ac1e..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/release.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -This file provides zest.releaser entrypoints using when releasing new -qrcode versions. -""" - -import os -import re -import datetime - - -def update_manpage(data): - """ - Update the version in the manpage document. - """ - if data["name"] != "qrcode": - return - - base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - filename = os.path.join(base_dir, "doc", "qr.1") - with open(filename) as f: - lines = f.readlines() - - changed = False - for i, line in enumerate(lines): - if not line.startswith(".TH "): - continue - parts = re.split(r'"([^"]*)"', line) - if len(parts) < 5: - continue - changed = parts[3] != data["new_version"] - if changed: - # Update version - parts[3] = data["new_version"] - # Update date - parts[1] = datetime.datetime.now().strftime("%-d %b %Y") - lines[i] = '"'.join(parts) - break - - if changed: - with open(filename, "w") as f: - for line in lines: - f.write(line) diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__init__.py b/myenv/lib/python3.12/site-packages/qrcode/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f1352a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/consts.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/consts.cpython-312.pyc deleted file mode 100644 index e555fae..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/consts.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_example.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_example.cpython-312.pyc deleted file mode 100644 index a3f3d5f..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_example.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc deleted file mode 100644 index da14ae5..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pil.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pil.cpython-312.pyc deleted file mode 100644 index 598334c..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pil.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pypng.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pypng.cpython-312.pyc deleted file mode 100644 index 7330f91..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pypng.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc deleted file mode 100644 index c8b51f5..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_release.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_release.cpython-312.pyc deleted file mode 100644 index 1c850d3..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_release.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_script.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_script.cpython-312.pyc deleted file mode 100644 index d3b5bda..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_script.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_util.cpython-312.pyc deleted file mode 100644 index c6e40c2..0000000 Binary files a/myenv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_util.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/consts.py b/myenv/lib/python3.12/site-packages/qrcode/tests/consts.py deleted file mode 100644 index b124013..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/consts.py +++ /dev/null @@ -1,4 +0,0 @@ -UNICODE_TEXT = "\u03b1\u03b2\u03b3" -WHITE = (255, 255, 255) -BLACK = (0, 0, 0) -RED = (255, 0, 0) diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_example.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_example.py deleted file mode 100644 index 7190fe3..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_example.py +++ /dev/null @@ -1,13 +0,0 @@ -from unittest import mock - -import pytest - -from qrcode import run_example - -pytest.importorskip("PIL", reason="Requires PIL") - - -@mock.patch("PIL.Image.Image.show") -def test_example(mock_show): - run_example() - mock_show.assert_called_with() diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode.py deleted file mode 100644 index 6524284..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode.py +++ /dev/null @@ -1,271 +0,0 @@ -import io -from unittest import mock - -import pytest - -import qrcode -import qrcode.util -from qrcode.exceptions import DataOverflowError -from qrcode.image.base import BaseImage -from qrcode.tests.consts import UNICODE_TEXT -from qrcode.util import MODE_8BIT_BYTE, MODE_ALPHA_NUM, MODE_NUMBER, QRData - - -def test_basic(): - qr = qrcode.QRCode(version=1) - qr.add_data("a") - qr.make(fit=False) - - -def test_large(): - qr = qrcode.QRCode(version=27) - qr.add_data("a") - qr.make(fit=False) - - -def test_invalid_version(): - with pytest.raises(ValueError): - qrcode.QRCode(version=42) - - -def test_invalid_border(): - with pytest.raises(ValueError): - qrcode.QRCode(border=-1) - - -def test_overflow(): - qr = qrcode.QRCode(version=1) - qr.add_data("abcdefghijklmno") - with pytest.raises(DataOverflowError): - qr.make(fit=False) - - -def test_add_qrdata(): - qr = qrcode.QRCode(version=1) - data = QRData("a") - qr.add_data(data) - qr.make(fit=False) - - -def test_fit(): - qr = qrcode.QRCode() - qr.add_data("a") - qr.make() - assert qr.version == 1 - qr.add_data("bcdefghijklmno") - qr.make() - assert qr.version == 2 - - -def test_mode_number(): - qr = qrcode.QRCode() - qr.add_data("1234567890123456789012345678901234", optimize=0) - qr.make() - assert qr.version == 1 - assert qr.data_list[0].mode == MODE_NUMBER - - -def test_mode_alpha(): - qr = qrcode.QRCode() - qr.add_data("ABCDEFGHIJ1234567890", optimize=0) - qr.make() - assert qr.version == 1 - assert qr.data_list[0].mode == MODE_ALPHA_NUM - - -def test_regression_mode_comma(): - qr = qrcode.QRCode() - qr.add_data(",", optimize=0) - qr.make() - assert qr.data_list[0].mode == MODE_8BIT_BYTE - - -def test_mode_8bit(): - qr = qrcode.QRCode() - qr.add_data("abcABC" + UNICODE_TEXT, optimize=0) - qr.make() - assert qr.version == 1 - assert qr.data_list[0].mode == MODE_8BIT_BYTE - - -def test_mode_8bit_newline(): - qr = qrcode.QRCode() - qr.add_data("ABCDEFGHIJ1234567890\n", optimize=0) - qr.make() - assert qr.data_list[0].mode == MODE_8BIT_BYTE - - -def test_make_image_with_wrong_pattern(): - with pytest.raises(TypeError): - qrcode.QRCode(mask_pattern="string pattern") - - with pytest.raises(ValueError): - qrcode.QRCode(mask_pattern=-1) - - with pytest.raises(ValueError): - qrcode.QRCode(mask_pattern=42) - - -def test_mask_pattern_setter(): - qr = qrcode.QRCode() - - with pytest.raises(TypeError): - qr.mask_pattern = "string pattern" - - with pytest.raises(ValueError): - qr.mask_pattern = -1 - - with pytest.raises(ValueError): - qr.mask_pattern = 8 - - -def test_qrcode_bad_factory(): - with pytest.raises(TypeError): - qrcode.QRCode(image_factory="not_BaseImage") # type: ignore - - with pytest.raises(AssertionError): - qrcode.QRCode(image_factory=dict) # type: ignore - - -def test_qrcode_factory(): - class MockFactory(BaseImage): - drawrect = mock.Mock() - new_image = mock.Mock() - - qr = qrcode.QRCode(image_factory=MockFactory) - qr.add_data(UNICODE_TEXT) - qr.make_image() - assert MockFactory.new_image.called - assert MockFactory.drawrect.called - - -def test_optimize(): - qr = qrcode.QRCode() - text = "A1abc12345def1HELLOa" - qr.add_data(text, optimize=4) - qr.make() - assert [d.mode for d in qr.data_list] == [ - MODE_8BIT_BYTE, - MODE_NUMBER, - MODE_8BIT_BYTE, - MODE_ALPHA_NUM, - MODE_8BIT_BYTE, - ] - assert qr.version == 2 - - -def test_optimize_short(): - qr = qrcode.QRCode() - text = "A1abc1234567def1HELLOa" - qr.add_data(text, optimize=7) - qr.make() - assert len(qr.data_list) == 3 - assert [d.mode for d in qr.data_list] == [ - MODE_8BIT_BYTE, - MODE_NUMBER, - MODE_8BIT_BYTE, - ] - assert qr.version == 2 - - -def test_optimize_longer_than_data(): - qr = qrcode.QRCode() - text = "ABCDEFGHIJK" - qr.add_data(text, optimize=12) - assert len(qr.data_list) == 1 - assert qr.data_list[0].mode == MODE_ALPHA_NUM - - -def test_optimize_size(): - text = "A1abc12345123451234512345def1HELLOHELLOHELLOHELLOa" * 5 - - qr = qrcode.QRCode() - qr.add_data(text) - qr.make() - assert qr.version == 10 - - qr = qrcode.QRCode() - qr.add_data(text, optimize=0) - qr.make() - assert qr.version == 11 - - -def test_qrdata_repr(): - data = b"hello" - data_obj = qrcode.util.QRData(data) - assert repr(data_obj) == repr(data) - - -def test_print_ascii_stdout(): - qr = qrcode.QRCode() - with mock.patch("sys.stdout") as fake_stdout: - fake_stdout.isatty.return_value = None - with pytest.raises(OSError): - qr.print_ascii(tty=True) - assert fake_stdout.isatty.called - - -def test_print_ascii(): - qr = qrcode.QRCode(border=0) - f = io.StringIO() - qr.print_ascii(out=f) - printed = f.getvalue() - f.close() - expected = "\u2588\u2580\u2580\u2580\u2580\u2580\u2588" - assert printed[: len(expected)] == expected - - f = io.StringIO() - f.isatty = lambda: True - qr.print_ascii(out=f, tty=True) - printed = f.getvalue() - f.close() - expected = "\x1b[48;5;232m\x1b[38;5;255m" + "\xa0\u2584\u2584\u2584\u2584\u2584\xa0" - assert printed[: len(expected)] == expected - - -def test_print_tty_stdout(): - qr = qrcode.QRCode() - with mock.patch("sys.stdout") as fake_stdout: - fake_stdout.isatty.return_value = None - pytest.raises(OSError, qr.print_tty) - assert fake_stdout.isatty.called - - -def test_print_tty(): - qr = qrcode.QRCode() - f = io.StringIO() - f.isatty = lambda: True - qr.print_tty(out=f) - printed = f.getvalue() - f.close() - BOLD_WHITE_BG = "\x1b[1;47m" - BLACK_BG = "\x1b[40m" - WHITE_BLOCK = BOLD_WHITE_BG + " " + BLACK_BG - EOL = "\x1b[0m\n" - expected = BOLD_WHITE_BG + " " * 23 + EOL + WHITE_BLOCK + " " * 7 + WHITE_BLOCK - assert printed[: len(expected)] == expected - - -def test_get_matrix(): - qr = qrcode.QRCode(border=0) - qr.add_data("1") - assert qr.get_matrix() == qr.modules - - -def test_get_matrix_border(): - qr = qrcode.QRCode(border=1) - qr.add_data("1") - matrix = [row[1:-1] for row in qr.get_matrix()[1:-1]] - assert matrix == qr.modules - - -def test_negative_size_at_construction(): - with pytest.raises(ValueError): - qrcode.QRCode(box_size=-1) - - -def test_negative_size_at_usage(): - qr = qrcode.QRCode() - qr.box_size = -1 - with pytest.raises(ValueError): - qr.make_image() diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pil.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pil.py deleted file mode 100644 index 95ef5af..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pil.py +++ /dev/null @@ -1,157 +0,0 @@ -import io - -import pytest - -import qrcode -import qrcode.util -from qrcode.tests.consts import BLACK, RED, UNICODE_TEXT, WHITE - -Image = pytest.importorskip("PIL.Image", reason="PIL is not installed") - -if Image: - from qrcode.image.styledpil import StyledPilImage - from qrcode.image.styles import colormasks, moduledrawers - - -def test_render_pil(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image() - img.save(io.BytesIO()) - assert isinstance(img.get_image(), Image.Image) - - -@pytest.mark.parametrize("back_color", ["TransParent", "red", (255, 195, 235)]) -def test_render_pil_background(back_color): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(back_color="TransParent") - img.save(io.BytesIO()) - - -def test_render_pil_with_rgb_color_tuples(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(back_color=(255, 195, 235), fill_color=(55, 95, 35)) - img.save(io.BytesIO()) - - -def test_render_with_pattern(): - qr = qrcode.QRCode(mask_pattern=3) - qr.add_data(UNICODE_TEXT) - img = qr.make_image() - img.save(io.BytesIO()) - - -def test_render_styled_Image(): - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_L) - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=StyledPilImage) - img.save(io.BytesIO()) - - -def test_render_styled_with_embedded_image(): - embedded_img = Image.new("RGB", (10, 10), color="red") - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_H) - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=StyledPilImage, embedded_image=embedded_img) - img.save(io.BytesIO()) - - -def test_render_styled_with_embedded_image_path(tmp_path): - tmpfile = str(tmp_path / "test.png") - embedded_img = Image.new("RGB", (10, 10), color="red") - embedded_img.save(tmpfile) - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_H) - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=StyledPilImage, embedded_image_path=tmpfile) - img.save(io.BytesIO()) - - -@pytest.mark.parametrize( - "drawer", - [ - moduledrawers.CircleModuleDrawer, - moduledrawers.GappedSquareModuleDrawer, - moduledrawers.HorizontalBarsDrawer, - moduledrawers.RoundedModuleDrawer, - moduledrawers.SquareModuleDrawer, - moduledrawers.VerticalBarsDrawer, - ], -) -def test_render_styled_with_drawer(drawer): - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_L) - qr.add_data(UNICODE_TEXT) - img = qr.make_image( - image_factory=StyledPilImage, - module_drawer=drawer(), - ) - img.save(io.BytesIO()) - - -@pytest.mark.parametrize( - "mask", - [ - colormasks.SolidFillColorMask(), - colormasks.SolidFillColorMask(back_color=WHITE, front_color=RED), - colormasks.SolidFillColorMask(back_color=(255, 0, 255, 255), front_color=RED), - colormasks.RadialGradiantColorMask( - back_color=WHITE, center_color=BLACK, edge_color=RED - ), - colormasks.SquareGradiantColorMask( - back_color=WHITE, center_color=BLACK, edge_color=RED - ), - colormasks.HorizontalGradiantColorMask( - back_color=WHITE, left_color=RED, right_color=BLACK - ), - colormasks.VerticalGradiantColorMask( - back_color=WHITE, top_color=RED, bottom_color=BLACK - ), - colormasks.ImageColorMask( - back_color=WHITE, color_mask_image=Image.new("RGB", (10, 10), color="red") - ), - ], -) -def test_render_styled_with_mask(mask): - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_L) - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=StyledPilImage, color_mask=mask) - img.save(io.BytesIO()) - - -def test_embedded_image_and_error_correction(tmp_path): - "If an embedded image is specified, error correction must be the highest so the QR code is readable" - tmpfile = str(tmp_path / "test.png") - embedded_img = Image.new("RGB", (10, 10), color="red") - embedded_img.save(tmpfile) - - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_L) - qr.add_data(UNICODE_TEXT) - with pytest.raises(ValueError): - qr.make_image(embedded_image_path=tmpfile) - with pytest.raises(ValueError): - qr.make_image(embedded_image=embedded_img) - - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_M) - qr.add_data(UNICODE_TEXT) - with pytest.raises(ValueError): - qr.make_image(embedded_image_path=tmpfile) - with pytest.raises(ValueError): - qr.make_image(embedded_image=embedded_img) - - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_Q) - qr.add_data(UNICODE_TEXT) - with pytest.raises(ValueError): - qr.make_image(embedded_image_path=tmpfile) - with pytest.raises(ValueError): - qr.make_image(embedded_image=embedded_img) - - # The only accepted correction level when an embedded image is provided - qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_H) - qr.add_data(UNICODE_TEXT) - qr.make_image(embedded_image_path=tmpfile) - qr.make_image(embedded_image=embedded_img) - - -def test_shortcut(): - qrcode.make("image") diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pypng.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pypng.py deleted file mode 100644 index c502a3b..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pypng.py +++ /dev/null @@ -1,35 +0,0 @@ -import io -from unittest import mock - -import pytest - - -import qrcode -import qrcode.util -from qrcode.image.pure import PyPNGImage -from qrcode.tests.consts import UNICODE_TEXT - -png = pytest.importorskip("png", reason="png is not installed") - - -def test_render_pypng(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=PyPNGImage) - assert isinstance(img.get_image(), png.Writer) - - print(img.width, img.box_size, img.border) - img.save(io.BytesIO()) - - -def test_render_pypng_to_str(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=PyPNGImage) - assert isinstance(img.get_image(), png.Writer) - - mock_open = mock.mock_open() - with mock.patch("qrcode.image.pure.open", mock_open, create=True): - img.save("test_file.png") - mock_open.assert_called_once_with("test_file.png", "wb") - mock_open("test_file.png", "wb").write.assert_called() diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_svg.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_svg.py deleted file mode 100644 index 4774b24..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_svg.py +++ /dev/null @@ -1,54 +0,0 @@ -import io - -import qrcode -from qrcode.image import svg -from qrcode.tests.consts import UNICODE_TEXT - - -class SvgImageWhite(svg.SvgImage): - background = "white" - - -def test_render_svg(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=svg.SvgImage) - img.save(io.BytesIO()) - - -def test_render_svg_path(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=svg.SvgPathImage) - img.save(io.BytesIO()) - - -def test_render_svg_fragment(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=svg.SvgFragmentImage) - img.save(io.BytesIO()) - - -def test_svg_string(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=svg.SvgFragmentImage) - file_like = io.BytesIO() - img.save(file_like) - file_like.seek(0) - assert file_like.read() in img.to_string() - - -def test_render_svg_with_background(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=SvgImageWhite) - img.save(io.BytesIO()) - - -def test_svg_circle_drawer(): - qr = qrcode.QRCode() - qr.add_data(UNICODE_TEXT) - img = qr.make_image(image_factory=svg.SvgPathImage, module_drawer="circle") - img.save(io.BytesIO()) diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_release.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_release.py deleted file mode 100644 index d61454b..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_release.py +++ /dev/null @@ -1,43 +0,0 @@ -import builtins -import datetime -import re -from unittest import mock - -from qrcode.release import update_manpage - -OPEN = f"{builtins.__name__}.open" -DATA = 'test\n.TH "date" "version" "description"\nthis' - - -@mock.patch(OPEN, new_callable=mock.mock_open, read_data=".TH invalid") -def test_invalid_data(mock_file): - update_manpage({"name": "qrcode", "new_version": "1.23"}) - mock_file.assert_called() - mock_file().write.assert_not_called() - - -@mock.patch(OPEN, new_callable=mock.mock_open, read_data=DATA) -def test_not_qrcode(mock_file): - update_manpage({"name": "not-qrcode"}) - mock_file.assert_not_called() - - -@mock.patch(OPEN, new_callable=mock.mock_open, read_data=DATA) -def test_no_change(mock_file): - update_manpage({"name": "qrcode", "new_version": "version"}) - mock_file.assert_called() - mock_file().write.assert_not_called() - - -@mock.patch(OPEN, new_callable=mock.mock_open, read_data=DATA) -def test_change(mock_file): - update_manpage({"name": "qrcode", "new_version": "3.11"}) - expected = re.split(r"([^\n]*(?:\n|$))", DATA)[1::2] - expected[1] = ( - expected[1] - .replace("version", "3.11") - .replace("date", datetime.datetime.now().strftime("%-d %b %Y")) - ) - mock_file().write.assert_has_calls( - [mock.call(line) for line in expected if line != ""], any_order=True - ) diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_script.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_script.py deleted file mode 100644 index d6338de..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_script.py +++ /dev/null @@ -1,97 +0,0 @@ -import sys -from unittest import mock - -import pytest - -from qrcode.console_scripts import commas, main - - -def bad_read(): - raise UnicodeDecodeError("utf-8", b"0x80", 0, 1, "invalid start byte") - - -@mock.patch("os.isatty", lambda *args: True) -@mock.patch("qrcode.main.QRCode.print_ascii") -def test_isatty(mock_print_ascii): - main(["testtext"]) - mock_print_ascii.assert_called_with(tty=True) - - -@mock.patch("os.isatty", lambda *args: False) -def test_piped(): - pytest.importorskip("PIL", reason="Requires PIL") - main(["testtext"]) - - -@mock.patch("os.isatty", lambda *args: True) -def test_stdin(): - with mock.patch("qrcode.main.QRCode.print_ascii") as mock_print_ascii: - with mock.patch("sys.stdin") as mock_stdin: - mock_stdin.buffer.read.return_value = "testtext" - main([]) - assert mock_stdin.buffer.read.called - mock_print_ascii.assert_called_with(tty=True) - - -@mock.patch("os.isatty", lambda *args: True) -def test_stdin_py3_unicodedecodeerror(): - with mock.patch("qrcode.main.QRCode.print_ascii") as mock_print_ascii: - with mock.patch("sys.stdin") as mock_stdin: - mock_stdin.buffer.read.return_value = "testtext" - mock_stdin.read.side_effect = bad_read - # sys.stdin.read() will raise an error... - with pytest.raises(UnicodeDecodeError): - sys.stdin.read() - # ... but it won't be used now. - main([]) - mock_print_ascii.assert_called_with(tty=True) - - -def test_optimize(): - pytest.importorskip("PIL", reason="Requires PIL") - main("testtext --optimize 0".split()) - - -def test_factory(): - main(["testtext", "--factory", "svg"]) - - -def test_bad_factory(): - with pytest.raises(SystemExit): - main(["testtext", "--factory", "nope"]) - - -@mock.patch.object(sys, "argv", "qr testtext output".split()) -def test_sys_argv(): - pytest.importorskip("PIL", reason="Requires PIL") - main() - - -def test_output(tmp_path): - pytest.importorskip("PIL", reason="Requires PIL") - main(["testtext", "--output", str(tmp_path / "test.png")]) - - -def test_factory_drawer_none(capsys): - pytest.importorskip("PIL", reason="Requires PIL") - with pytest.raises(SystemExit): - main("testtext --factory pil --factory-drawer nope".split()) - assert "The selected factory has no drawer aliases" in capsys.readouterr()[1] - - -def test_factory_drawer_bad(capsys): - with pytest.raises(SystemExit): - main("testtext --factory svg --factory-drawer sobad".split()) - assert "sobad factory drawer not found" in capsys.readouterr()[1] - - -def test_factory_drawer(capsys): - main("testtext --factory svg --factory-drawer circle".split()) - - -def test_commas(): - assert commas([]) == "" - assert commas(["A"]) == "A" - assert commas("AB") == "A or B" - assert commas("ABC") == "A, B or C" - assert commas("ABC", joiner="and") == "A, B and C" diff --git a/myenv/lib/python3.12/site-packages/qrcode/tests/test_util.py b/myenv/lib/python3.12/site-packages/qrcode/tests/test_util.py deleted file mode 100644 index e57badb..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/tests/test_util.py +++ /dev/null @@ -1,11 +0,0 @@ -import pytest - -from qrcode import util - - -def test_check_wrong_version(): - with pytest.raises(ValueError): - util.check_version(0) - - with pytest.raises(ValueError): - util.check_version(41) diff --git a/myenv/lib/python3.12/site-packages/qrcode/util.py b/myenv/lib/python3.12/site-packages/qrcode/util.py deleted file mode 100644 index fe25548..0000000 --- a/myenv/lib/python3.12/site-packages/qrcode/util.py +++ /dev/null @@ -1,584 +0,0 @@ -import math -import re - -from qrcode import LUT, base, exceptions -from qrcode.base import RSBlock - -# QR encoding modes. -MODE_NUMBER = 1 << 0 -MODE_ALPHA_NUM = 1 << 1 -MODE_8BIT_BYTE = 1 << 2 -MODE_KANJI = 1 << 3 - -# Encoding mode sizes. -MODE_SIZE_SMALL = { - MODE_NUMBER: 10, - MODE_ALPHA_NUM: 9, - MODE_8BIT_BYTE: 8, - MODE_KANJI: 8, -} -MODE_SIZE_MEDIUM = { - MODE_NUMBER: 12, - MODE_ALPHA_NUM: 11, - MODE_8BIT_BYTE: 16, - MODE_KANJI: 10, -} -MODE_SIZE_LARGE = { - MODE_NUMBER: 14, - MODE_ALPHA_NUM: 13, - MODE_8BIT_BYTE: 16, - MODE_KANJI: 12, -} - -ALPHA_NUM = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" -RE_ALPHA_NUM = re.compile(b"^[" + re.escape(ALPHA_NUM) + rb"]*\Z") - -# The number of bits for numeric delimited data lengths. -NUMBER_LENGTH = {3: 10, 2: 7, 1: 4} - -PATTERN_POSITION_TABLE = [ - [], - [6, 18], - [6, 22], - [6, 26], - [6, 30], - [6, 34], - [6, 22, 38], - [6, 24, 42], - [6, 26, 46], - [6, 28, 50], - [6, 30, 54], - [6, 32, 58], - [6, 34, 62], - [6, 26, 46, 66], - [6, 26, 48, 70], - [6, 26, 50, 74], - [6, 30, 54, 78], - [6, 30, 56, 82], - [6, 30, 58, 86], - [6, 34, 62, 90], - [6, 28, 50, 72, 94], - [6, 26, 50, 74, 98], - [6, 30, 54, 78, 102], - [6, 28, 54, 80, 106], - [6, 32, 58, 84, 110], - [6, 30, 58, 86, 114], - [6, 34, 62, 90, 118], - [6, 26, 50, 74, 98, 122], - [6, 30, 54, 78, 102, 126], - [6, 26, 52, 78, 104, 130], - [6, 30, 56, 82, 108, 134], - [6, 34, 60, 86, 112, 138], - [6, 30, 58, 86, 114, 142], - [6, 34, 62, 90, 118, 146], - [6, 30, 54, 78, 102, 126, 150], - [6, 24, 50, 76, 102, 128, 154], - [6, 28, 54, 80, 106, 132, 158], - [6, 32, 58, 84, 110, 136, 162], - [6, 26, 54, 82, 110, 138, 166], - [6, 30, 58, 86, 114, 142, 170], -] - -G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0) -G18 = ( - (1 << 12) - | (1 << 11) - | (1 << 10) - | (1 << 9) - | (1 << 8) - | (1 << 5) - | (1 << 2) - | (1 << 0) -) -G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1) - -PAD0 = 0xEC -PAD1 = 0x11 - - -# Precompute bit count limits, indexed by error correction level and code size -def _data_count(block): - return block.data_count - - -BIT_LIMIT_TABLE = [ - [0] - + [ - 8 * sum(map(_data_count, base.rs_blocks(version, error_correction))) - for version in range(1, 41) - ] - for error_correction in range(4) -] - - -def BCH_type_info(data): - d = data << 10 - while BCH_digit(d) - BCH_digit(G15) >= 0: - d ^= G15 << (BCH_digit(d) - BCH_digit(G15)) - - return ((data << 10) | d) ^ G15_MASK - - -def BCH_type_number(data): - d = data << 12 - while BCH_digit(d) - BCH_digit(G18) >= 0: - d ^= G18 << (BCH_digit(d) - BCH_digit(G18)) - return (data << 12) | d - - -def BCH_digit(data): - digit = 0 - while data != 0: - digit += 1 - data >>= 1 - return digit - - -def pattern_position(version): - return PATTERN_POSITION_TABLE[version - 1] - - -def mask_func(pattern): - """ - Return the mask function for the given mask pattern. - """ - if pattern == 0: # 000 - return lambda i, j: (i + j) % 2 == 0 - if pattern == 1: # 001 - return lambda i, j: i % 2 == 0 - if pattern == 2: # 010 - return lambda i, j: j % 3 == 0 - if pattern == 3: # 011 - return lambda i, j: (i + j) % 3 == 0 - if pattern == 4: # 100 - return lambda i, j: (math.floor(i / 2) + math.floor(j / 3)) % 2 == 0 - if pattern == 5: # 101 - return lambda i, j: (i * j) % 2 + (i * j) % 3 == 0 - if pattern == 6: # 110 - return lambda i, j: ((i * j) % 2 + (i * j) % 3) % 2 == 0 - if pattern == 7: # 111 - return lambda i, j: ((i * j) % 3 + (i + j) % 2) % 2 == 0 - raise TypeError("Bad mask pattern: " + pattern) # pragma: no cover - - -def mode_sizes_for_version(version): - if version < 10: - return MODE_SIZE_SMALL - elif version < 27: - return MODE_SIZE_MEDIUM - else: - return MODE_SIZE_LARGE - - -def length_in_bits(mode, version): - if mode not in (MODE_NUMBER, MODE_ALPHA_NUM, MODE_8BIT_BYTE, MODE_KANJI): - raise TypeError(f"Invalid mode ({mode})") # pragma: no cover - - check_version(version) - - return mode_sizes_for_version(version)[mode] - - -def check_version(version): - if version < 1 or version > 40: - raise ValueError(f"Invalid version (was {version}, expected 1 to 40)") - - -def lost_point(modules): - modules_count = len(modules) - - lost_point = 0 - - lost_point = _lost_point_level1(modules, modules_count) - lost_point += _lost_point_level2(modules, modules_count) - lost_point += _lost_point_level3(modules, modules_count) - lost_point += _lost_point_level4(modules, modules_count) - - return lost_point - - -def _lost_point_level1(modules, modules_count): - lost_point = 0 - - modules_range = range(modules_count) - container = [0] * (modules_count + 1) - - for row in modules_range: - this_row = modules[row] - previous_color = this_row[0] - length = 0 - for col in modules_range: - if this_row[col] == previous_color: - length += 1 - else: - if length >= 5: - container[length] += 1 - length = 1 - previous_color = this_row[col] - if length >= 5: - container[length] += 1 - - for col in modules_range: - previous_color = modules[0][col] - length = 0 - for row in modules_range: - if modules[row][col] == previous_color: - length += 1 - else: - if length >= 5: - container[length] += 1 - length = 1 - previous_color = modules[row][col] - if length >= 5: - container[length] += 1 - - lost_point += sum( - container[each_length] * (each_length - 2) - for each_length in range(5, modules_count + 1) - ) - - return lost_point - - -def _lost_point_level2(modules, modules_count): - lost_point = 0 - - modules_range = range(modules_count - 1) - for row in modules_range: - this_row = modules[row] - next_row = modules[row + 1] - # use iter() and next() to skip next four-block. e.g. - # d a f if top-right a != b bottom-right, - # c b e then both abcd and abef won't lost any point. - modules_range_iter = iter(modules_range) - for col in modules_range_iter: - top_right = this_row[col + 1] - if top_right != next_row[col + 1]: - # reduce 33.3% of runtime via next(). - # None: raise nothing if there is no next item. - next(modules_range_iter, None) - elif top_right != this_row[col]: - continue - elif top_right != next_row[col]: - continue - else: - lost_point += 3 - - return lost_point - - -def _lost_point_level3(modules, modules_count): - # 1 : 1 : 3 : 1 : 1 ratio (dark:light:dark:light:dark) pattern in - # row/column, preceded or followed by light area 4 modules wide. From ISOIEC. - # pattern1: 10111010000 - # pattern2: 00001011101 - modules_range = range(modules_count) - modules_range_short = range(modules_count - 10) - lost_point = 0 - - for row in modules_range: - this_row = modules[row] - modules_range_short_iter = iter(modules_range_short) - col = 0 - for col in modules_range_short_iter: - if ( - not this_row[col + 1] - and this_row[col + 4] - and not this_row[col + 5] - and this_row[col + 6] - and not this_row[col + 9] - and ( - this_row[col + 0] - and this_row[col + 2] - and this_row[col + 3] - and not this_row[col + 7] - and not this_row[col + 8] - and not this_row[col + 10] - or not this_row[col + 0] - and not this_row[col + 2] - and not this_row[col + 3] - and this_row[col + 7] - and this_row[col + 8] - and this_row[col + 10] - ) - ): - lost_point += 40 - # horspool algorithm. - # if this_row[col + 10]: - # pattern1 shift 4, pattern2 shift 2. So min=2. - # else: - # pattern1 shift 1, pattern2 shift 1. So min=1. - if this_row[col + 10]: - next(modules_range_short_iter, None) - - for col in modules_range: - modules_range_short_iter = iter(modules_range_short) - row = 0 - for row in modules_range_short_iter: - if ( - not modules[row + 1][col] - and modules[row + 4][col] - and not modules[row + 5][col] - and modules[row + 6][col] - and not modules[row + 9][col] - and ( - modules[row + 0][col] - and modules[row + 2][col] - and modules[row + 3][col] - and not modules[row + 7][col] - and not modules[row + 8][col] - and not modules[row + 10][col] - or not modules[row + 0][col] - and not modules[row + 2][col] - and not modules[row + 3][col] - and modules[row + 7][col] - and modules[row + 8][col] - and modules[row + 10][col] - ) - ): - lost_point += 40 - if modules[row + 10][col]: - next(modules_range_short_iter, None) - - return lost_point - - -def _lost_point_level4(modules, modules_count): - dark_count = sum(map(sum, modules)) - percent = float(dark_count) / (modules_count**2) - # Every 5% departure from 50%, rating++ - rating = int(abs(percent * 100 - 50) / 5) - return rating * 10 - - -def optimal_data_chunks(data, minimum=4): - """ - An iterator returning QRData chunks optimized to the data content. - - :param minimum: The minimum number of bytes in a row to split as a chunk. - """ - data = to_bytestring(data) - num_pattern = rb"\d" - alpha_pattern = b"[" + re.escape(ALPHA_NUM) + b"]" - if len(data) <= minimum: - num_pattern = re.compile(b"^" + num_pattern + b"+$") - alpha_pattern = re.compile(b"^" + alpha_pattern + b"+$") - else: - re_repeat = b"{" + str(minimum).encode("ascii") + b",}" - num_pattern = re.compile(num_pattern + re_repeat) - alpha_pattern = re.compile(alpha_pattern + re_repeat) - num_bits = _optimal_split(data, num_pattern) - for is_num, chunk in num_bits: - if is_num: - yield QRData(chunk, mode=MODE_NUMBER, check_data=False) - else: - for is_alpha, sub_chunk in _optimal_split(chunk, alpha_pattern): - mode = MODE_ALPHA_NUM if is_alpha else MODE_8BIT_BYTE - yield QRData(sub_chunk, mode=mode, check_data=False) - - -def _optimal_split(data, pattern): - while data: - match = re.search(pattern, data) - if not match: - break - start, end = match.start(), match.end() - if start: - yield False, data[:start] - yield True, data[start:end] - data = data[end:] - if data: - yield False, data - - -def to_bytestring(data): - """ - Convert data to a (utf-8 encoded) byte-string if it isn't a byte-string - already. - """ - if not isinstance(data, bytes): - data = str(data).encode("utf-8") - return data - - -def optimal_mode(data): - """ - Calculate the optimal mode for this chunk of data. - """ - if data.isdigit(): - return MODE_NUMBER - if RE_ALPHA_NUM.match(data): - return MODE_ALPHA_NUM - return MODE_8BIT_BYTE - - -class QRData: - """ - Data held in a QR compatible format. - - Doesn't currently handle KANJI. - """ - - def __init__(self, data, mode=None, check_data=True): - """ - If ``mode`` isn't provided, the most compact QR data type possible is - chosen. - """ - if check_data: - data = to_bytestring(data) - - if mode is None: - self.mode = optimal_mode(data) - else: - self.mode = mode - if mode not in (MODE_NUMBER, MODE_ALPHA_NUM, MODE_8BIT_BYTE): - raise TypeError(f"Invalid mode ({mode})") # pragma: no cover - if check_data and mode < optimal_mode(data): # pragma: no cover - raise ValueError(f"Provided data can not be represented in mode {mode}") - - self.data = data - - def __len__(self): - return len(self.data) - - def write(self, buffer): - if self.mode == MODE_NUMBER: - for i in range(0, len(self.data), 3): - chars = self.data[i : i + 3] - bit_length = NUMBER_LENGTH[len(chars)] - buffer.put(int(chars), bit_length) - elif self.mode == MODE_ALPHA_NUM: - for i in range(0, len(self.data), 2): - chars = self.data[i : i + 2] - if len(chars) > 1: - buffer.put( - ALPHA_NUM.find(chars[0]) * 45 + ALPHA_NUM.find(chars[1]), 11 - ) - else: - buffer.put(ALPHA_NUM.find(chars), 6) - else: - # Iterating a bytestring in Python 3 returns an integer, - # no need to ord(). - data = self.data - for c in data: - buffer.put(c, 8) - - def __repr__(self): - return repr(self.data) - - -class BitBuffer: - def __init__(self): - self.buffer: list[int] = [] - self.length = 0 - - def __repr__(self): - return ".".join([str(n) for n in self.buffer]) - - def get(self, index): - buf_index = math.floor(index / 8) - return ((self.buffer[buf_index] >> (7 - index % 8)) & 1) == 1 - - def put(self, num, length): - for i in range(length): - self.put_bit(((num >> (length - i - 1)) & 1) == 1) - - def __len__(self): - return self.length - - def put_bit(self, bit): - buf_index = self.length // 8 - if len(self.buffer) <= buf_index: - self.buffer.append(0) - if bit: - self.buffer[buf_index] |= 0x80 >> (self.length % 8) - self.length += 1 - - -def create_bytes(buffer: BitBuffer, rs_blocks: list[RSBlock]): - offset = 0 - - maxDcCount = 0 - maxEcCount = 0 - - dcdata: list[list[int]] = [] - ecdata: list[list[int]] = [] - - for rs_block in rs_blocks: - dcCount = rs_block.data_count - ecCount = rs_block.total_count - dcCount - - maxDcCount = max(maxDcCount, dcCount) - maxEcCount = max(maxEcCount, ecCount) - - current_dc = [0xFF & buffer.buffer[i + offset] for i in range(dcCount)] - offset += dcCount - - # Get error correction polynomial. - if ecCount in LUT.rsPoly_LUT: - rsPoly = base.Polynomial(LUT.rsPoly_LUT[ecCount], 0) - else: - rsPoly = base.Polynomial([1], 0) - for i in range(ecCount): - rsPoly = rsPoly * base.Polynomial([1, base.gexp(i)], 0) - - rawPoly = base.Polynomial(current_dc, len(rsPoly) - 1) - - modPoly = rawPoly % rsPoly - current_ec = [] - mod_offset = len(modPoly) - ecCount - for i in range(ecCount): - modIndex = i + mod_offset - current_ec.append(modPoly[modIndex] if (modIndex >= 0) else 0) - - dcdata.append(current_dc) - ecdata.append(current_ec) - - data = [] - for i in range(maxDcCount): - for dc in dcdata: - if i < len(dc): - data.append(dc[i]) - for i in range(maxEcCount): - for ec in ecdata: - if i < len(ec): - data.append(ec[i]) - - return data - - -def create_data(version, error_correction, data_list): - buffer = BitBuffer() - for data in data_list: - buffer.put(data.mode, 4) - buffer.put(len(data), length_in_bits(data.mode, version)) - data.write(buffer) - - # Calculate the maximum number of bits for the given version. - rs_blocks = base.rs_blocks(version, error_correction) - bit_limit = sum(block.data_count * 8 for block in rs_blocks) - if len(buffer) > bit_limit: - raise exceptions.DataOverflowError( - "Code length overflow. Data size (%s) > size available (%s)" - % (len(buffer), bit_limit) - ) - - # Terminate the bits (add up to four 0s). - for _ in range(min(bit_limit - len(buffer), 4)): - buffer.put_bit(False) - - # Delimit the string into 8-bit words, padding with 0s if necessary. - delimit = len(buffer) % 8 - if delimit: - for _ in range(8 - delimit): - buffer.put_bit(False) - - # Add special alternating padding bitstrings until buffer is full. - bytes_to_fill = (bit_limit - len(buffer)) // 8 - for i in range(bytes_to_fill): - if i % 2 == 0: - buffer.put(PAD0, 8) - else: - buffer.put(PAD1, 8) - - return create_bytes(buffer, rs_blocks) diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA deleted file mode 100644 index b31773e..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA +++ /dev/null @@ -1,133 +0,0 @@ -Metadata-Version: 2.4 -Name: requests -Version: 2.32.5 -Summary: Python HTTP for Humans. -Home-page: https://requests.readthedocs.io -Author: Kenneth Reitz -Author-email: me@kennethreitz.org -License: Apache-2.0 -Project-URL: Documentation, https://requests.readthedocs.io -Project-URL: Source, https://github.com/psf/requests -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Natural Language :: English -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Software Development :: Libraries -Requires-Python: >=3.9 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: charset_normalizer<4,>=2 -Requires-Dist: idna<4,>=2.5 -Requires-Dist: urllib3<3,>=1.21.1 -Requires-Dist: certifi>=2017.4.17 -Provides-Extra: security -Provides-Extra: socks -Requires-Dist: PySocks!=1.5.7,>=1.5.6; extra == "socks" -Provides-Extra: use-chardet-on-py3 -Requires-Dist: chardet<6,>=3.0.2; extra == "use-chardet-on-py3" -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: home-page -Dynamic: license -Dynamic: license-file -Dynamic: project-url -Dynamic: provides-extra -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary - -# Requests - -**Requests** is a simple, yet elegant, HTTP library. - -```python ->>> import requests ->>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass')) ->>> r.status_code -200 ->>> r.headers['content-type'] -'application/json; charset=utf8' ->>> r.encoding -'utf-8' ->>> r.text -'{"authenticated": true, ...' ->>> r.json() -{'authenticated': True, ...} -``` - -Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method! - -Requests is one of the most downloaded Python packages today, pulling in around `30M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `1,000,000+` repositories. You may certainly put your trust in this code. - -[![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests) -[![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests) -[![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/requests/graphs/contributors) - -## Installing Requests and Supported Versions - -Requests is available on PyPI: - -```console -$ python -m pip install requests -``` - -Requests officially supports Python 3.9+. - -## Supported Features & Best–Practices - -Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today. - -- Keep-Alive & Connection Pooling -- International Domains and URLs -- Sessions with Cookie Persistence -- Browser-style TLS/SSL Verification -- Basic & Digest Authentication -- Familiar `dict`–like Cookies -- Automatic Content Decompression and Decoding -- Multi-part File Uploads -- SOCKS Proxy Support -- Connection Timeouts -- Streaming Downloads -- Automatic honoring of `.netrc` -- Chunked HTTP Requests - -## API Reference and User Guide available on [Read the Docs](https://requests.readthedocs.io) - -[![Read the Docs](https://raw.githubusercontent.com/psf/requests/main/ext/ss.png)](https://requests.readthedocs.io) - -## Cloning the repository - -When cloning the Requests repository, you may need to add the `-c -fetch.fsck.badTimezone=ignore` flag to avoid an error about a bad commit timestamp (see -[this issue](https://github.com/psf/requests/issues/2690) for more background): - -```shell -git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git -``` - -You can also apply this setting to your global Git config: - -```shell -git config --global fetch.fsck.badTimezone ignore -``` - ---- - -[![Kenneth Reitz](https://raw.githubusercontent.com/psf/requests/main/ext/kr.png)](https://kennethreitz.org) [![Python Software Foundation](https://raw.githubusercontent.com/psf/requests/main/ext/psf.png)](https://www.python.org/psf) diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD deleted file mode 100644 index 5902291..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD +++ /dev/null @@ -1,42 +0,0 @@ -requests-2.32.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -requests-2.32.5.dist-info/METADATA,sha256=ZbWgjagfSRVRPnYJZf8Ut1GPZbe7Pv4NqzZLvMTUDLA,4945 -requests-2.32.5.dist-info/RECORD,, -requests-2.32.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91 -requests-2.32.5.dist-info/licenses/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142 -requests-2.32.5.dist-info/top_level.txt,sha256=fMSVmHfb5rbGOo6xv-O_tUX6j-WyixssE-SnwcDRxNQ,9 -requests/__init__.py,sha256=4xaAERmPDIBPsa2PsjpU9r06yooK-2mZKHTZAhWRWts,5072 -requests/__pycache__/__init__.cpython-312.pyc,, -requests/__pycache__/__version__.cpython-312.pyc,, -requests/__pycache__/_internal_utils.cpython-312.pyc,, -requests/__pycache__/adapters.cpython-312.pyc,, -requests/__pycache__/api.cpython-312.pyc,, -requests/__pycache__/auth.cpython-312.pyc,, -requests/__pycache__/certs.cpython-312.pyc,, -requests/__pycache__/compat.cpython-312.pyc,, -requests/__pycache__/cookies.cpython-312.pyc,, -requests/__pycache__/exceptions.cpython-312.pyc,, -requests/__pycache__/help.cpython-312.pyc,, -requests/__pycache__/hooks.cpython-312.pyc,, -requests/__pycache__/models.cpython-312.pyc,, -requests/__pycache__/packages.cpython-312.pyc,, -requests/__pycache__/sessions.cpython-312.pyc,, -requests/__pycache__/status_codes.cpython-312.pyc,, -requests/__pycache__/structures.cpython-312.pyc,, -requests/__pycache__/utils.cpython-312.pyc,, -requests/__version__.py,sha256=QKDceK8K_ujqwDDc3oYrR0odOBYgKVOQQ5vFap_G_cg,435 -requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495 -requests/adapters.py,sha256=8nX113gbb123aUtx2ETkAN_6IsYX-M2fRoLGluTEcRk,26285 -requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449 -requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186 -requests/certs.py,sha256=Z9Sb410Anv6jUFTyss0jFFhU6xst8ctELqfy8Ev23gw,429 -requests/compat.py,sha256=J7sIjR6XoDGp5JTVzOxkK5fSoUVUa_Pjc7iRZhAWGmI,2142 -requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590 -requests/exceptions.py,sha256=jJPS1UWATs86ShVUaLorTiJb1SaGuoNEWgICJep-VkY,4260 -requests/help.py,sha256=gPX5d_H7Xd88aDABejhqGgl9B1VFRTt5BmiYvL3PzIQ,3875 -requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 -requests/models.py,sha256=MjZdZ4k7tnw-1nz5PKShjmPmqyk0L6DciwnFngb_Vk4,35510 -requests/packages.py,sha256=_g0gZ681UyAlKHRjH6kanbaoxx2eAb6qzcXiODyTIoc,904 -requests/sessions.py,sha256=Cl1dpEnOfwrzzPbku-emepNeN4Rt_0_58Iy2x-JGTm8,30503 -requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322 -requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 -requests/utils.py,sha256=WqU86rZ3wvhC-tQjWcjtH_HEKZwWB3iWCZV6SW5DEdQ,33213 diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL deleted file mode 100644 index e7fa31b..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (80.9.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE deleted file mode 100644 index 67db858..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE +++ /dev/null @@ -1,175 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt deleted file mode 100644 index f229360..0000000 --- a/myenv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -requests diff --git a/myenv/lib/python3.12/site-packages/requests/__init__.py b/myenv/lib/python3.12/site-packages/requests/__init__.py deleted file mode 100644 index 051cda1..0000000 --- a/myenv/lib/python3.12/site-packages/requests/__init__.py +++ /dev/null @@ -1,184 +0,0 @@ -# __ -# /__) _ _ _ _ _/ _ -# / ( (- (/ (/ (- _) / _) -# / - -""" -Requests HTTP Library -~~~~~~~~~~~~~~~~~~~~~ - -Requests is an HTTP library, written in Python, for human beings. -Basic GET usage: - - >>> import requests - >>> r = requests.get('https://www.python.org') - >>> r.status_code - 200 - >>> b'Python is a programming language' in r.content - True - -... or POST: - - >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('https://httpbin.org/post', data=payload) - >>> print(r.text) - { - ... - "form": { - "key1": "value1", - "key2": "value2" - }, - ... - } - -The other HTTP methods are supported - see `requests.api`. Full documentation -is at . - -:copyright: (c) 2017 by Kenneth Reitz. -:license: Apache 2.0, see LICENSE for more details. -""" - -import warnings - -import urllib3 - -from .exceptions import RequestsDependencyWarning - -try: - from charset_normalizer import __version__ as charset_normalizer_version -except ImportError: - charset_normalizer_version = None - -try: - from chardet import __version__ as chardet_version -except ImportError: - chardet_version = None - - -def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version): - urllib3_version = urllib3_version.split(".") - assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git. - - # Sometimes, urllib3 only reports its version as 16.1. - if len(urllib3_version) == 2: - urllib3_version.append("0") - - # Check urllib3 for compatibility. - major, minor, patch = urllib3_version # noqa: F811 - major, minor, patch = int(major), int(minor), int(patch) - # urllib3 >= 1.21.1 - assert major >= 1 - if major == 1: - assert minor >= 21 - - # Check charset_normalizer for compatibility. - if chardet_version: - major, minor, patch = chardet_version.split(".")[:3] - major, minor, patch = int(major), int(minor), int(patch) - # chardet_version >= 3.0.2, < 6.0.0 - assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0) - elif charset_normalizer_version: - major, minor, patch = charset_normalizer_version.split(".")[:3] - major, minor, patch = int(major), int(minor), int(patch) - # charset_normalizer >= 2.0.0 < 4.0.0 - assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0) - else: - warnings.warn( - "Unable to find acceptable character detection dependency " - "(chardet or charset_normalizer).", - RequestsDependencyWarning, - ) - - -def _check_cryptography(cryptography_version): - # cryptography < 1.3.4 - try: - cryptography_version = list(map(int, cryptography_version.split("."))) - except ValueError: - return - - if cryptography_version < [1, 3, 4]: - warning = "Old version of cryptography ({}) may cause slowdown.".format( - cryptography_version - ) - warnings.warn(warning, RequestsDependencyWarning) - - -# Check imported dependencies for compatibility. -try: - check_compatibility( - urllib3.__version__, chardet_version, charset_normalizer_version - ) -except (AssertionError, ValueError): - warnings.warn( - "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported " - "version!".format( - urllib3.__version__, chardet_version, charset_normalizer_version - ), - RequestsDependencyWarning, - ) - -# Attempt to enable urllib3's fallback for SNI support -# if the standard library doesn't support SNI or the -# 'ssl' library isn't available. -try: - try: - import ssl - except ImportError: - ssl = None - - if not getattr(ssl, "HAS_SNI", False): - from urllib3.contrib import pyopenssl - - pyopenssl.inject_into_urllib3() - - # Check cryptography version - from cryptography import __version__ as cryptography_version - - _check_cryptography(cryptography_version) -except ImportError: - pass - -# urllib3's DependencyWarnings should be silenced. -from urllib3.exceptions import DependencyWarning - -warnings.simplefilter("ignore", DependencyWarning) - -# Set default logging handler to avoid "No handler found" warnings. -import logging -from logging import NullHandler - -from . import packages, utils -from .__version__ import ( - __author__, - __author_email__, - __build__, - __cake__, - __copyright__, - __description__, - __license__, - __title__, - __url__, - __version__, -) -from .api import delete, get, head, options, patch, post, put, request -from .exceptions import ( - ConnectionError, - ConnectTimeout, - FileModeWarning, - HTTPError, - JSONDecodeError, - ReadTimeout, - RequestException, - Timeout, - TooManyRedirects, - URLRequired, -) -from .models import PreparedRequest, Request, Response -from .sessions import Session, session -from .status_codes import codes - -logging.getLogger(__name__).addHandler(NullHandler()) - -# FileModeWarnings go off per the default. -warnings.simplefilter("default", FileModeWarning, append=True) diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 4e08713..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/__version__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/__version__.cpython-312.pyc deleted file mode 100644 index 3e377a8..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/__version__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc deleted file mode 100644 index ebffd61..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/adapters.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/adapters.cpython-312.pyc deleted file mode 100644 index 3ed1448..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/adapters.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc deleted file mode 100644 index 05e5be1..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc deleted file mode 100644 index 3912498..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/certs.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/certs.cpython-312.pyc deleted file mode 100644 index 92ae5b9..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/certs.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/compat.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/compat.cpython-312.pyc deleted file mode 100644 index 200c97a..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/compat.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc deleted file mode 100644 index 9f91c6a..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index 8e3219b..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc deleted file mode 100644 index 814d163..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc deleted file mode 100644 index 3b97608..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/models.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/models.cpython-312.pyc deleted file mode 100644 index 81fa1b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/models.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc deleted file mode 100644 index b709a93..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc deleted file mode 100644 index c7c078c..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc deleted file mode 100644 index 81e76d2..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/structures.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/structures.cpython-312.pyc deleted file mode 100644 index 7f6792c..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/structures.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc b/myenv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index e035e29..0000000 Binary files a/myenv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/requests/__version__.py b/myenv/lib/python3.12/site-packages/requests/__version__.py deleted file mode 100644 index effdd98..0000000 --- a/myenv/lib/python3.12/site-packages/requests/__version__.py +++ /dev/null @@ -1,14 +0,0 @@ -# .-. .-. .-. . . .-. .-. .-. .-. -# |( |- |.| | | |- `-. | `-. -# ' ' `-' `-`.`-' `-' `-' ' `-' - -__title__ = "requests" -__description__ = "Python HTTP for Humans." -__url__ = "https://requests.readthedocs.io" -__version__ = "2.32.5" -__build__ = 0x023205 -__author__ = "Kenneth Reitz" -__author_email__ = "me@kennethreitz.org" -__license__ = "Apache-2.0" -__copyright__ = "Copyright Kenneth Reitz" -__cake__ = "\u2728 \U0001f370 \u2728" diff --git a/myenv/lib/python3.12/site-packages/requests/_internal_utils.py b/myenv/lib/python3.12/site-packages/requests/_internal_utils.py deleted file mode 100644 index f2cf635..0000000 --- a/myenv/lib/python3.12/site-packages/requests/_internal_utils.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -requests._internal_utils -~~~~~~~~~~~~~~ - -Provides utility functions that are consumed internally by Requests -which depend on extremely few external helpers (such as compat) -""" -import re - -from .compat import builtin_str - -_VALID_HEADER_NAME_RE_BYTE = re.compile(rb"^[^:\s][^:\r\n]*$") -_VALID_HEADER_NAME_RE_STR = re.compile(r"^[^:\s][^:\r\n]*$") -_VALID_HEADER_VALUE_RE_BYTE = re.compile(rb"^\S[^\r\n]*$|^$") -_VALID_HEADER_VALUE_RE_STR = re.compile(r"^\S[^\r\n]*$|^$") - -_HEADER_VALIDATORS_STR = (_VALID_HEADER_NAME_RE_STR, _VALID_HEADER_VALUE_RE_STR) -_HEADER_VALIDATORS_BYTE = (_VALID_HEADER_NAME_RE_BYTE, _VALID_HEADER_VALUE_RE_BYTE) -HEADER_VALIDATORS = { - bytes: _HEADER_VALIDATORS_BYTE, - str: _HEADER_VALIDATORS_STR, -} - - -def to_native_string(string, encoding="ascii"): - """Given a string object, regardless of type, returns a representation of - that string in the native string type, encoding and decoding where - necessary. This assumes ASCII unless told otherwise. - """ - if isinstance(string, builtin_str): - out = string - else: - out = string.decode(encoding) - - return out - - -def unicode_is_ascii(u_string): - """Determine if unicode string only contains ASCII characters. - - :param str u_string: unicode string to check. Must be unicode - and not Python 2 `str`. - :rtype: bool - """ - assert isinstance(u_string, str) - try: - u_string.encode("ascii") - return True - except UnicodeEncodeError: - return False diff --git a/myenv/lib/python3.12/site-packages/requests/adapters.py b/myenv/lib/python3.12/site-packages/requests/adapters.py deleted file mode 100644 index 670c927..0000000 --- a/myenv/lib/python3.12/site-packages/requests/adapters.py +++ /dev/null @@ -1,696 +0,0 @@ -""" -requests.adapters -~~~~~~~~~~~~~~~~~ - -This module contains the transport adapters that Requests uses to define -and maintain connections. -""" - -import os.path -import socket # noqa: F401 -import typing -import warnings - -from urllib3.exceptions import ClosedPoolError, ConnectTimeoutError -from urllib3.exceptions import HTTPError as _HTTPError -from urllib3.exceptions import InvalidHeader as _InvalidHeader -from urllib3.exceptions import ( - LocationValueError, - MaxRetryError, - NewConnectionError, - ProtocolError, -) -from urllib3.exceptions import ProxyError as _ProxyError -from urllib3.exceptions import ReadTimeoutError, ResponseError -from urllib3.exceptions import SSLError as _SSLError -from urllib3.poolmanager import PoolManager, proxy_from_url -from urllib3.util import Timeout as TimeoutSauce -from urllib3.util import parse_url -from urllib3.util.retry import Retry - -from .auth import _basic_auth_str -from .compat import basestring, urlparse -from .cookies import extract_cookies_to_jar -from .exceptions import ( - ConnectionError, - ConnectTimeout, - InvalidHeader, - InvalidProxyURL, - InvalidSchema, - InvalidURL, - ProxyError, - ReadTimeout, - RetryError, - SSLError, -) -from .models import Response -from .structures import CaseInsensitiveDict -from .utils import ( - DEFAULT_CA_BUNDLE_PATH, - extract_zipped_paths, - get_auth_from_url, - get_encoding_from_headers, - prepend_scheme_if_needed, - select_proxy, - urldefragauth, -) - -try: - from urllib3.contrib.socks import SOCKSProxyManager -except ImportError: - - def SOCKSProxyManager(*args, **kwargs): - raise InvalidSchema("Missing dependencies for SOCKS support.") - - -if typing.TYPE_CHECKING: - from .models import PreparedRequest - - -DEFAULT_POOLBLOCK = False -DEFAULT_POOLSIZE = 10 -DEFAULT_RETRIES = 0 -DEFAULT_POOL_TIMEOUT = None - - -def _urllib3_request_context( - request: "PreparedRequest", - verify: "bool | str | None", - client_cert: "typing.Tuple[str, str] | str | None", - poolmanager: "PoolManager", -) -> "(typing.Dict[str, typing.Any], typing.Dict[str, typing.Any])": - host_params = {} - pool_kwargs = {} - parsed_request_url = urlparse(request.url) - scheme = parsed_request_url.scheme.lower() - port = parsed_request_url.port - - cert_reqs = "CERT_REQUIRED" - if verify is False: - cert_reqs = "CERT_NONE" - elif isinstance(verify, str): - if not os.path.isdir(verify): - pool_kwargs["ca_certs"] = verify - else: - pool_kwargs["ca_cert_dir"] = verify - pool_kwargs["cert_reqs"] = cert_reqs - if client_cert is not None: - if isinstance(client_cert, tuple) and len(client_cert) == 2: - pool_kwargs["cert_file"] = client_cert[0] - pool_kwargs["key_file"] = client_cert[1] - else: - # According to our docs, we allow users to specify just the client - # cert path - pool_kwargs["cert_file"] = client_cert - host_params = { - "scheme": scheme, - "host": parsed_request_url.hostname, - "port": port, - } - return host_params, pool_kwargs - - -class BaseAdapter: - """The Base Transport Adapter""" - - def __init__(self): - super().__init__() - - def send( - self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None - ): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest ` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) ` tuple. - :type timeout: float or tuple - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - """ - raise NotImplementedError - - def close(self): - """Cleans up adapter specific items.""" - raise NotImplementedError - - -class HTTPAdapter(BaseAdapter): - """The built-in HTTP Adapter for urllib3. - - Provides a general-case interface for Requests sessions to contact HTTP and - HTTPS urls by implementing the Transport Adapter interface. This class will - usually be created by the :class:`Session ` class under the - covers. - - :param pool_connections: The number of urllib3 connection pools to cache. - :param pool_maxsize: The maximum number of connections to save in the pool. - :param max_retries: The maximum number of retries each connection - should attempt. Note, this applies only to failed DNS lookups, socket - connections and connection timeouts, never to requests where data has - made it to the server. By default, Requests does not retry failed - connections. If you need granular control over the conditions under - which we retry a request, import urllib3's ``Retry`` class and pass - that instead. - :param pool_block: Whether the connection pool should block for connections. - - Usage:: - - >>> import requests - >>> s = requests.Session() - >>> a = requests.adapters.HTTPAdapter(max_retries=3) - >>> s.mount('http://', a) - """ - - __attrs__ = [ - "max_retries", - "config", - "_pool_connections", - "_pool_maxsize", - "_pool_block", - ] - - def __init__( - self, - pool_connections=DEFAULT_POOLSIZE, - pool_maxsize=DEFAULT_POOLSIZE, - max_retries=DEFAULT_RETRIES, - pool_block=DEFAULT_POOLBLOCK, - ): - if max_retries == DEFAULT_RETRIES: - self.max_retries = Retry(0, read=False) - else: - self.max_retries = Retry.from_int(max_retries) - self.config = {} - self.proxy_manager = {} - - super().__init__() - - self._pool_connections = pool_connections - self._pool_maxsize = pool_maxsize - self._pool_block = pool_block - - self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) - - def __getstate__(self): - return {attr: getattr(self, attr, None) for attr in self.__attrs__} - - def __setstate__(self, state): - # Can't handle by adding 'proxy_manager' to self.__attrs__ because - # self.poolmanager uses a lambda function, which isn't pickleable. - self.proxy_manager = {} - self.config = {} - - for attr, value in state.items(): - setattr(self, attr, value) - - self.init_poolmanager( - self._pool_connections, self._pool_maxsize, block=self._pool_block - ) - - def init_poolmanager( - self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs - ): - """Initializes a urllib3 PoolManager. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param connections: The number of urllib3 connection pools to cache. - :param maxsize: The maximum number of connections to save in the pool. - :param block: Block when no free connections are available. - :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. - """ - # save these values for pickling - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = PoolManager( - num_pools=connections, - maxsize=maxsize, - block=block, - **pool_kwargs, - ) - - def proxy_manager_for(self, proxy, **proxy_kwargs): - """Return urllib3 ProxyManager for the given proxy. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param proxy: The proxy to return a urllib3 ProxyManager for. - :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. - :returns: ProxyManager - :rtype: urllib3.ProxyManager - """ - if proxy in self.proxy_manager: - manager = self.proxy_manager[proxy] - elif proxy.lower().startswith("socks"): - username, password = get_auth_from_url(proxy) - manager = self.proxy_manager[proxy] = SOCKSProxyManager( - proxy, - username=username, - password=password, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs, - ) - else: - proxy_headers = self.proxy_headers(proxy) - manager = self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs, - ) - - return manager - - def cert_verify(self, conn, url, verify, cert): - """Verify a SSL certificate. This method should not be called from user - code, and is only exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param conn: The urllib3 connection object associated with the cert. - :param url: The requested URL. - :param verify: Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: The SSL certificate to verify. - """ - if url.lower().startswith("https") and verify: - cert_loc = None - - # Allow self-specified cert location. - if verify is not True: - cert_loc = verify - - if not cert_loc: - cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH) - - if not cert_loc or not os.path.exists(cert_loc): - raise OSError( - f"Could not find a suitable TLS CA certificate bundle, " - f"invalid path: {cert_loc}" - ) - - conn.cert_reqs = "CERT_REQUIRED" - - if not os.path.isdir(cert_loc): - conn.ca_certs = cert_loc - else: - conn.ca_cert_dir = cert_loc - else: - conn.cert_reqs = "CERT_NONE" - conn.ca_certs = None - conn.ca_cert_dir = None - - if cert: - if not isinstance(cert, basestring): - conn.cert_file = cert[0] - conn.key_file = cert[1] - else: - conn.cert_file = cert - conn.key_file = None - if conn.cert_file and not os.path.exists(conn.cert_file): - raise OSError( - f"Could not find the TLS certificate file, " - f"invalid path: {conn.cert_file}" - ) - if conn.key_file and not os.path.exists(conn.key_file): - raise OSError( - f"Could not find the TLS key file, invalid path: {conn.key_file}" - ) - - def build_response(self, req, resp): - """Builds a :class:`Response ` object from a urllib3 - response. This should not be called from user code, and is only exposed - for use when subclassing the - :class:`HTTPAdapter ` - - :param req: The :class:`PreparedRequest ` used to generate the response. - :param resp: The urllib3 response object. - :rtype: requests.Response - """ - response = Response() - - # Fallback to None if there's no status_code, for whatever reason. - response.status_code = getattr(resp, "status", None) - - # Make headers case-insensitive. - response.headers = CaseInsensitiveDict(getattr(resp, "headers", {})) - - # Set encoding. - response.encoding = get_encoding_from_headers(response.headers) - response.raw = resp - response.reason = response.raw.reason - - if isinstance(req.url, bytes): - response.url = req.url.decode("utf-8") - else: - response.url = req.url - - # Add new cookies from the server. - extract_cookies_to_jar(response.cookies, req, resp) - - # Give the Response some context. - response.request = req - response.connection = self - - return response - - def build_connection_pool_key_attributes(self, request, verify, cert=None): - """Build the PoolKey attributes used by urllib3 to return a connection. - - This looks at the PreparedRequest, the user-specified verify value, - and the value of the cert parameter to determine what PoolKey values - to use to select a connection from a given urllib3 Connection Pool. - - The SSL related pool key arguments are not consistently set. As of - this writing, use the following to determine what keys may be in that - dictionary: - - * If ``verify`` is ``True``, ``"ssl_context"`` will be set and will be the - default Requests SSL Context - * If ``verify`` is ``False``, ``"ssl_context"`` will not be set but - ``"cert_reqs"`` will be set - * If ``verify`` is a string, (i.e., it is a user-specified trust bundle) - ``"ca_certs"`` will be set if the string is not a directory recognized - by :py:func:`os.path.isdir`, otherwise ``"ca_cert_dir"`` will be - set. - * If ``"cert"`` is specified, ``"cert_file"`` will always be set. If - ``"cert"`` is a tuple with a second item, ``"key_file"`` will also - be present - - To override these settings, one may subclass this class, call this - method and use the above logic to change parameters as desired. For - example, if one wishes to use a custom :py:class:`ssl.SSLContext` one - must both set ``"ssl_context"`` and based on what else they require, - alter the other keys to ensure the desired behaviour. - - :param request: - The PreparedReqest being sent over the connection. - :type request: - :class:`~requests.models.PreparedRequest` - :param verify: - Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use. - :param cert: - (optional) Any user-provided SSL certificate for client - authentication (a.k.a., mTLS). This may be a string (i.e., just - the path to a file which holds both certificate and key) or a - tuple of length 2 with the certificate file path and key file - path. - :returns: - A tuple of two dictionaries. The first is the "host parameters" - portion of the Pool Key including scheme, hostname, and port. The - second is a dictionary of SSLContext related parameters. - """ - return _urllib3_request_context(request, verify, cert, self.poolmanager) - - def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None): - """Returns a urllib3 connection for the given request and TLS settings. - This should not be called from user code, and is only exposed for use - when subclassing the :class:`HTTPAdapter `. - - :param request: - The :class:`PreparedRequest ` object to be sent - over the connection. - :param verify: - Either a boolean, in which case it controls whether we verify the - server's TLS certificate, or a string, in which case it must be a - path to a CA bundle to use. - :param proxies: - (optional) The proxies dictionary to apply to the request. - :param cert: - (optional) Any user-provided SSL certificate to be used for client - authentication (a.k.a., mTLS). - :rtype: - urllib3.ConnectionPool - """ - proxy = select_proxy(request.url, proxies) - try: - host_params, pool_kwargs = self.build_connection_pool_key_attributes( - request, - verify, - cert, - ) - except ValueError as e: - raise InvalidURL(e, request=request) - if proxy: - proxy = prepend_scheme_if_needed(proxy, "http") - proxy_url = parse_url(proxy) - if not proxy_url.host: - raise InvalidProxyURL( - "Please check proxy URL. It is malformed " - "and could be missing the host." - ) - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_host( - **host_params, pool_kwargs=pool_kwargs - ) - else: - # Only scheme should be lower case - conn = self.poolmanager.connection_from_host( - **host_params, pool_kwargs=pool_kwargs - ) - - return conn - - def get_connection(self, url, proxies=None): - """DEPRECATED: Users should move to `get_connection_with_tls_context` - for all subclasses of HTTPAdapter using Requests>=2.32.2. - - Returns a urllib3 connection for the given URL. This should not be - called from user code, and is only exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param url: The URL to connect to. - :param proxies: (optional) A Requests-style dictionary of proxies used on this request. - :rtype: urllib3.ConnectionPool - """ - warnings.warn( - ( - "`get_connection` has been deprecated in favor of " - "`get_connection_with_tls_context`. Custom HTTPAdapter subclasses " - "will need to migrate for Requests>=2.32.2. Please see " - "https://github.com/psf/requests/pull/6710 for more details." - ), - DeprecationWarning, - ) - proxy = select_proxy(url, proxies) - - if proxy: - proxy = prepend_scheme_if_needed(proxy, "http") - proxy_url = parse_url(proxy) - if not proxy_url.host: - raise InvalidProxyURL( - "Please check proxy URL. It is malformed " - "and could be missing the host." - ) - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_url(url) - else: - # Only scheme should be lower case - parsed = urlparse(url) - url = parsed.geturl() - conn = self.poolmanager.connection_from_url(url) - - return conn - - def close(self): - """Disposes of any internal state. - - Currently, this closes the PoolManager and any active ProxyManager, - which closes any pooled connections. - """ - self.poolmanager.clear() - for proxy in self.proxy_manager.values(): - proxy.clear() - - def request_url(self, request, proxies): - """Obtain the url to use when making the final request. - - If the message is being sent through a HTTP proxy, the full URL has to - be used. Otherwise, we should only use the path portion of the URL. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param request: The :class:`PreparedRequest ` being sent. - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. - :rtype: str - """ - proxy = select_proxy(request.url, proxies) - scheme = urlparse(request.url).scheme - - is_proxied_http_request = proxy and scheme != "https" - using_socks_proxy = False - if proxy: - proxy_scheme = urlparse(proxy).scheme.lower() - using_socks_proxy = proxy_scheme.startswith("socks") - - url = request.path_url - if url.startswith("//"): # Don't confuse urllib3 - url = f"/{url.lstrip('/')}" - - if is_proxied_http_request and not using_socks_proxy: - url = urldefragauth(request.url) - - return url - - def add_headers(self, request, **kwargs): - """Add any headers needed by the connection. As of v2.0 this does - nothing by default, but is left for overriding by users that subclass - the :class:`HTTPAdapter `. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param request: The :class:`PreparedRequest ` to add headers to. - :param kwargs: The keyword arguments from the call to send(). - """ - pass - - def proxy_headers(self, proxy): - """Returns a dictionary of the headers to add to any request sent - through a proxy. This works with urllib3 magic to ensure that they are - correctly sent to the proxy, rather than in a tunnelled request if - CONNECT is being used. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param proxy: The url of the proxy being used for this request. - :rtype: dict - """ - headers = {} - username, password = get_auth_from_url(proxy) - - if username: - headers["Proxy-Authorization"] = _basic_auth_str(username, password) - - return headers - - def send( - self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None - ): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest ` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) ` tuple. - :type timeout: float or tuple or urllib3 Timeout object - :param verify: (optional) Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - :rtype: requests.Response - """ - - try: - conn = self.get_connection_with_tls_context( - request, verify, proxies=proxies, cert=cert - ) - except LocationValueError as e: - raise InvalidURL(e, request=request) - - self.cert_verify(conn, request.url, verify, cert) - url = self.request_url(request, proxies) - self.add_headers( - request, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - ) - - chunked = not (request.body is None or "Content-Length" in request.headers) - - if isinstance(timeout, tuple): - try: - connect, read = timeout - timeout = TimeoutSauce(connect=connect, read=read) - except ValueError: - raise ValueError( - f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " - f"or a single float to set both timeouts to the same value." - ) - elif isinstance(timeout, TimeoutSauce): - pass - else: - timeout = TimeoutSauce(connect=timeout, read=timeout) - - try: - resp = conn.urlopen( - method=request.method, - url=url, - body=request.body, - headers=request.headers, - redirect=False, - assert_same_host=False, - preload_content=False, - decode_content=False, - retries=self.max_retries, - timeout=timeout, - chunked=chunked, - ) - - except (ProtocolError, OSError) as err: - raise ConnectionError(err, request=request) - - except MaxRetryError as e: - if isinstance(e.reason, ConnectTimeoutError): - # TODO: Remove this in 3.0.0: see #2811 - if not isinstance(e.reason, NewConnectionError): - raise ConnectTimeout(e, request=request) - - if isinstance(e.reason, ResponseError): - raise RetryError(e, request=request) - - if isinstance(e.reason, _ProxyError): - raise ProxyError(e, request=request) - - if isinstance(e.reason, _SSLError): - # This branch is for urllib3 v1.22 and later. - raise SSLError(e, request=request) - - raise ConnectionError(e, request=request) - - except ClosedPoolError as e: - raise ConnectionError(e, request=request) - - except _ProxyError as e: - raise ProxyError(e) - - except (_SSLError, _HTTPError) as e: - if isinstance(e, _SSLError): - # This branch is for urllib3 versions earlier than v1.22 - raise SSLError(e, request=request) - elif isinstance(e, ReadTimeoutError): - raise ReadTimeout(e, request=request) - elif isinstance(e, _InvalidHeader): - raise InvalidHeader(e, request=request) - else: - raise - - return self.build_response(request, resp) diff --git a/myenv/lib/python3.12/site-packages/requests/api.py b/myenv/lib/python3.12/site-packages/requests/api.py deleted file mode 100644 index 5960744..0000000 --- a/myenv/lib/python3.12/site-packages/requests/api.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. -""" - -from . import sessions - - -def request(method, url, **kwargs): - """Constructs and sends a :class:`Request `. - - :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary, list of tuples or bytes to send - in the query string for the :class:`Request`. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. - ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` - or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string - defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers - to add for the file. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send data - before giving up, as a float, or a :ref:`(connect timeout, read - timeout) ` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response ` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'https://httpbin.org/get') - >>> req - - """ - - # By using the 'with' statement we are sure the session is closed, thus we - # avoid leaving sockets open which can trigger a ResourceWarning in some - # cases, and look like a memory leak in others. - with sessions.Session() as session: - return session.request(method=method, url=url, **kwargs) - - -def get(url, params=None, **kwargs): - r"""Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary, list of tuples or bytes to send - in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("get", url, params=params, **kwargs) - - -def options(url, **kwargs): - r"""Sends an OPTIONS request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("options", url, **kwargs) - - -def head(url, **kwargs): - r"""Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. If - `allow_redirects` is not provided, it will be set to `False` (as - opposed to the default :meth:`request` behavior). - :return: :class:`Response ` object - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", False) - return request("head", url, **kwargs) - - -def post(url, data=None, json=None, **kwargs): - r"""Sends a POST request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("post", url, data=data, json=json, **kwargs) - - -def put(url, data=None, **kwargs): - r"""Sends a PUT request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("put", url, data=data, **kwargs) - - -def patch(url, data=None, **kwargs): - r"""Sends a PATCH request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("patch", url, data=data, **kwargs) - - -def delete(url, **kwargs): - r"""Sends a DELETE request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request("delete", url, **kwargs) diff --git a/myenv/lib/python3.12/site-packages/requests/auth.py b/myenv/lib/python3.12/site-packages/requests/auth.py deleted file mode 100644 index 4a7ce6d..0000000 --- a/myenv/lib/python3.12/site-packages/requests/auth.py +++ /dev/null @@ -1,314 +0,0 @@ -""" -requests.auth -~~~~~~~~~~~~~ - -This module contains the authentication handlers for Requests. -""" - -import hashlib -import os -import re -import threading -import time -import warnings -from base64 import b64encode - -from ._internal_utils import to_native_string -from .compat import basestring, str, urlparse -from .cookies import extract_cookies_to_jar -from .utils import parse_dict_header - -CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded" -CONTENT_TYPE_MULTI_PART = "multipart/form-data" - - -def _basic_auth_str(username, password): - """Returns a Basic Auth string.""" - - # "I want us to put a big-ol' comment on top of it that - # says that this behaviour is dumb but we need to preserve - # it because people are relying on it." - # - Lukasa - # - # These are here solely to maintain backwards compatibility - # for things like ints. This will be removed in 3.0.0. - if not isinstance(username, basestring): - warnings.warn( - "Non-string usernames will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(username), - category=DeprecationWarning, - ) - username = str(username) - - if not isinstance(password, basestring): - warnings.warn( - "Non-string passwords will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(type(password)), - category=DeprecationWarning, - ) - password = str(password) - # -- End Removal -- - - if isinstance(username, str): - username = username.encode("latin1") - - if isinstance(password, str): - password = password.encode("latin1") - - authstr = "Basic " + to_native_string( - b64encode(b":".join((username, password))).strip() - ) - - return authstr - - -class AuthBase: - """Base class that all auth implementations derive from""" - - def __call__(self, r): - raise NotImplementedError("Auth hooks must be callable.") - - -class HTTPBasicAuth(AuthBase): - """Attaches HTTP Basic Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - - def __eq__(self, other): - return all( - [ - self.username == getattr(other, "username", None), - self.password == getattr(other, "password", None), - ] - ) - - def __ne__(self, other): - return not self == other - - def __call__(self, r): - r.headers["Authorization"] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPProxyAuth(HTTPBasicAuth): - """Attaches HTTP Proxy Authentication to a given Request object.""" - - def __call__(self, r): - r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPDigestAuth(AuthBase): - """Attaches HTTP Digest Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - # Keep state in per-thread local storage - self._thread_local = threading.local() - - def init_per_thread_state(self): - # Ensure state is initialized just once per-thread - if not hasattr(self._thread_local, "init"): - self._thread_local.init = True - self._thread_local.last_nonce = "" - self._thread_local.nonce_count = 0 - self._thread_local.chal = {} - self._thread_local.pos = None - self._thread_local.num_401_calls = None - - def build_digest_header(self, method, url): - """ - :rtype: str - """ - - realm = self._thread_local.chal["realm"] - nonce = self._thread_local.chal["nonce"] - qop = self._thread_local.chal.get("qop") - algorithm = self._thread_local.chal.get("algorithm") - opaque = self._thread_local.chal.get("opaque") - hash_utf8 = None - - if algorithm is None: - _algorithm = "MD5" - else: - _algorithm = algorithm.upper() - # lambdas assume digest modules are imported at the top level - if _algorithm == "MD5" or _algorithm == "MD5-SESS": - - def md5_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.md5(x).hexdigest() - - hash_utf8 = md5_utf8 - elif _algorithm == "SHA": - - def sha_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha1(x).hexdigest() - - hash_utf8 = sha_utf8 - elif _algorithm == "SHA-256": - - def sha256_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha256(x).hexdigest() - - hash_utf8 = sha256_utf8 - elif _algorithm == "SHA-512": - - def sha512_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha512(x).hexdigest() - - hash_utf8 = sha512_utf8 - - KD = lambda s, d: hash_utf8(f"{s}:{d}") # noqa:E731 - - if hash_utf8 is None: - return None - - # XXX not implemented yet - entdig = None - p_parsed = urlparse(url) - #: path is request-uri defined in RFC 2616 which should not be empty - path = p_parsed.path or "/" - if p_parsed.query: - path += f"?{p_parsed.query}" - - A1 = f"{self.username}:{realm}:{self.password}" - A2 = f"{method}:{path}" - - HA1 = hash_utf8(A1) - HA2 = hash_utf8(A2) - - if nonce == self._thread_local.last_nonce: - self._thread_local.nonce_count += 1 - else: - self._thread_local.nonce_count = 1 - ncvalue = f"{self._thread_local.nonce_count:08x}" - s = str(self._thread_local.nonce_count).encode("utf-8") - s += nonce.encode("utf-8") - s += time.ctime().encode("utf-8") - s += os.urandom(8) - - cnonce = hashlib.sha1(s).hexdigest()[:16] - if _algorithm == "MD5-SESS": - HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}") - - if not qop: - respdig = KD(HA1, f"{nonce}:{HA2}") - elif qop == "auth" or "auth" in qop.split(","): - noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}" - respdig = KD(HA1, noncebit) - else: - # XXX handle auth-int. - return None - - self._thread_local.last_nonce = nonce - - # XXX should the partial digests be encoded too? - base = ( - f'username="{self.username}", realm="{realm}", nonce="{nonce}", ' - f'uri="{path}", response="{respdig}"' - ) - if opaque: - base += f', opaque="{opaque}"' - if algorithm: - base += f', algorithm="{algorithm}"' - if entdig: - base += f', digest="{entdig}"' - if qop: - base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"' - - return f"Digest {base}" - - def handle_redirect(self, r, **kwargs): - """Reset num_401_calls counter on redirects.""" - if r.is_redirect: - self._thread_local.num_401_calls = 1 - - def handle_401(self, r, **kwargs): - """ - Takes the given response and tries digest-auth, if needed. - - :rtype: requests.Response - """ - - # If response is not 4xx, do not auth - # See https://github.com/psf/requests/issues/3772 - if not 400 <= r.status_code < 500: - self._thread_local.num_401_calls = 1 - return r - - if self._thread_local.pos is not None: - # Rewind the file position indicator of the body to where - # it was to resend the request. - r.request.body.seek(self._thread_local.pos) - s_auth = r.headers.get("www-authenticate", "") - - if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2: - self._thread_local.num_401_calls += 1 - pat = re.compile(r"digest ", flags=re.IGNORECASE) - self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1)) - - # Consume content and release the original connection - # to allow our new request to reuse the same one. - r.content - r.close() - prep = r.request.copy() - extract_cookies_to_jar(prep._cookies, r.request, r.raw) - prep.prepare_cookies(prep._cookies) - - prep.headers["Authorization"] = self.build_digest_header( - prep.method, prep.url - ) - _r = r.connection.send(prep, **kwargs) - _r.history.append(r) - _r.request = prep - - return _r - - self._thread_local.num_401_calls = 1 - return r - - def __call__(self, r): - # Initialize per-thread state, if needed - self.init_per_thread_state() - # If we have a saved nonce, skip the 401 - if self._thread_local.last_nonce: - r.headers["Authorization"] = self.build_digest_header(r.method, r.url) - try: - self._thread_local.pos = r.body.tell() - except AttributeError: - # In the case of HTTPDigestAuth being reused and the body of - # the previous request was a file-like object, pos has the - # file position of the previous body. Ensure it's set to - # None. - self._thread_local.pos = None - r.register_hook("response", self.handle_401) - r.register_hook("response", self.handle_redirect) - self._thread_local.num_401_calls = 1 - - return r - - def __eq__(self, other): - return all( - [ - self.username == getattr(other, "username", None), - self.password == getattr(other, "password", None), - ] - ) - - def __ne__(self, other): - return not self == other diff --git a/myenv/lib/python3.12/site-packages/requests/certs.py b/myenv/lib/python3.12/site-packages/requests/certs.py deleted file mode 100644 index be422c3..0000000 --- a/myenv/lib/python3.12/site-packages/requests/certs.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -""" -requests.certs -~~~~~~~~~~~~~~ - -This module returns the preferred default CA certificate bundle. There is -only one — the one from the certifi package. - -If you are packaging Requests, e.g., for a Linux distribution or a managed -environment, you can change the definition of where() to return a separately -packaged CA bundle. -""" -from certifi import where - -if __name__ == "__main__": - print(where()) diff --git a/myenv/lib/python3.12/site-packages/requests/compat.py b/myenv/lib/python3.12/site-packages/requests/compat.py deleted file mode 100644 index 7f9d754..0000000 --- a/myenv/lib/python3.12/site-packages/requests/compat.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -requests.compat -~~~~~~~~~~~~~~~ - -This module previously handled import compatibility issues -between Python 2 and Python 3. It remains for backwards -compatibility until the next major version. -""" - -import importlib -import sys - -# ------- -# urllib3 -# ------- -from urllib3 import __version__ as urllib3_version - -# Detect which major version of urllib3 is being used. -try: - is_urllib3_1 = int(urllib3_version.split(".")[0]) == 1 -except (TypeError, AttributeError): - # If we can't discern a version, prefer old functionality. - is_urllib3_1 = True - -# ------------------- -# Character Detection -# ------------------- - - -def _resolve_char_detection(): - """Find supported character detection libraries.""" - chardet = None - for lib in ("chardet", "charset_normalizer"): - if chardet is None: - try: - chardet = importlib.import_module(lib) - except ImportError: - pass - return chardet - - -chardet = _resolve_char_detection() - -# ------- -# Pythons -# ------- - -# Syntax sugar. -_ver = sys.version_info - -#: Python 2.x? -is_py2 = _ver[0] == 2 - -#: Python 3.x? -is_py3 = _ver[0] == 3 - -# json/simplejson module import resolution -has_simplejson = False -try: - import simplejson as json - - has_simplejson = True -except ImportError: - import json - -if has_simplejson: - from simplejson import JSONDecodeError -else: - from json import JSONDecodeError - -# Keep OrderedDict for backwards compatibility. -from collections import OrderedDict -from collections.abc import Callable, Mapping, MutableMapping -from http import cookiejar as cookielib -from http.cookies import Morsel -from io import StringIO - -# -------------- -# Legacy Imports -# -------------- -from urllib.parse import ( - quote, - quote_plus, - unquote, - unquote_plus, - urldefrag, - urlencode, - urljoin, - urlparse, - urlsplit, - urlunparse, -) -from urllib.request import ( - getproxies, - getproxies_environment, - parse_http_list, - proxy_bypass, - proxy_bypass_environment, -) - -builtin_str = str -str = str -bytes = bytes -basestring = (str, bytes) -numeric_types = (int, float) -integer_types = (int,) diff --git a/myenv/lib/python3.12/site-packages/requests/cookies.py b/myenv/lib/python3.12/site-packages/requests/cookies.py deleted file mode 100644 index f69d0cd..0000000 --- a/myenv/lib/python3.12/site-packages/requests/cookies.py +++ /dev/null @@ -1,561 +0,0 @@ -""" -requests.cookies -~~~~~~~~~~~~~~~~ - -Compatibility code to be able to use `http.cookiejar.CookieJar` with requests. - -requests.utils imports from here, so be careful with imports. -""" - -import calendar -import copy -import time - -from ._internal_utils import to_native_string -from .compat import Morsel, MutableMapping, cookielib, urlparse, urlunparse - -try: - import threading -except ImportError: - import dummy_threading as threading - - -class MockRequest: - """Wraps a `requests.Request` to mimic a `urllib2.Request`. - - The code in `http.cookiejar.CookieJar` expects this interface in order to correctly - manage cookie policies, i.e., determine whether a cookie can be set, given the - domains of the request and the cookie. - - The original request object is read-only. The client is responsible for collecting - the new headers via `get_new_headers()` and interpreting them appropriately. You - probably want `get_cookie_header`, defined below. - """ - - def __init__(self, request): - self._r = request - self._new_headers = {} - self.type = urlparse(self._r.url).scheme - - def get_type(self): - return self.type - - def get_host(self): - return urlparse(self._r.url).netloc - - def get_origin_req_host(self): - return self.get_host() - - def get_full_url(self): - # Only return the response's URL if the user hadn't set the Host - # header - if not self._r.headers.get("Host"): - return self._r.url - # If they did set it, retrieve it and reconstruct the expected domain - host = to_native_string(self._r.headers["Host"], encoding="utf-8") - parsed = urlparse(self._r.url) - # Reconstruct the URL as we expect it - return urlunparse( - [ - parsed.scheme, - host, - parsed.path, - parsed.params, - parsed.query, - parsed.fragment, - ] - ) - - def is_unverifiable(self): - return True - - def has_header(self, name): - return name in self._r.headers or name in self._new_headers - - def get_header(self, name, default=None): - return self._r.headers.get(name, self._new_headers.get(name, default)) - - def add_header(self, key, val): - """cookiejar has no legitimate use for this method; add it back if you find one.""" - raise NotImplementedError( - "Cookie headers should be added with add_unredirected_header()" - ) - - def add_unredirected_header(self, name, value): - self._new_headers[name] = value - - def get_new_headers(self): - return self._new_headers - - @property - def unverifiable(self): - return self.is_unverifiable() - - @property - def origin_req_host(self): - return self.get_origin_req_host() - - @property - def host(self): - return self.get_host() - - -class MockResponse: - """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. - - ...what? Basically, expose the parsed HTTP headers from the server response - the way `http.cookiejar` expects to see them. - """ - - def __init__(self, headers): - """Make a MockResponse for `cookiejar` to read. - - :param headers: a httplib.HTTPMessage or analogous carrying the headers - """ - self._headers = headers - - def info(self): - return self._headers - - def getheaders(self, name): - self._headers.getheaders(name) - - -def extract_cookies_to_jar(jar, request, response): - """Extract the cookies from the response into a CookieJar. - - :param jar: http.cookiejar.CookieJar (not necessarily a RequestsCookieJar) - :param request: our own requests.Request object - :param response: urllib3.HTTPResponse object - """ - if not (hasattr(response, "_original_response") and response._original_response): - return - # the _original_response field is the wrapped httplib.HTTPResponse object, - req = MockRequest(request) - # pull out the HTTPMessage with the headers and put it in the mock: - res = MockResponse(response._original_response.msg) - jar.extract_cookies(res, req) - - -def get_cookie_header(jar, request): - """ - Produce an appropriate Cookie header string to be sent with `request`, or None. - - :rtype: str - """ - r = MockRequest(request) - jar.add_cookie_header(r) - return r.get_new_headers().get("Cookie") - - -def remove_cookie_by_name(cookiejar, name, domain=None, path=None): - """Unsets a cookie by name, by default over all domains and paths. - - Wraps CookieJar.clear(), is O(n). - """ - clearables = [] - for cookie in cookiejar: - if cookie.name != name: - continue - if domain is not None and domain != cookie.domain: - continue - if path is not None and path != cookie.path: - continue - clearables.append((cookie.domain, cookie.path, cookie.name)) - - for domain, path, name in clearables: - cookiejar.clear(domain, path, name) - - -class CookieConflictError(RuntimeError): - """There are two cookies that meet the criteria specified in the cookie jar. - Use .get and .set and include domain and path args in order to be more specific. - """ - - -class RequestsCookieJar(cookielib.CookieJar, MutableMapping): - """Compatibility class; is a http.cookiejar.CookieJar, but exposes a dict - interface. - - This is the CookieJar we create by default for requests and sessions that - don't specify one, since some clients may expect response.cookies and - session.cookies to support dict operations. - - Requests does not use the dict interface internally; it's just for - compatibility with external client code. All requests code should work - out of the box with externally provided instances of ``CookieJar``, e.g. - ``LWPCookieJar`` and ``FileCookieJar``. - - Unlike a regular CookieJar, this class is pickleable. - - .. warning:: dictionary operations that are normally O(1) may be O(n). - """ - - def get(self, name, default=None, domain=None, path=None): - """Dict-like get() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - - .. warning:: operation is O(n), not O(1). - """ - try: - return self._find_no_duplicates(name, domain, path) - except KeyError: - return default - - def set(self, name, value, **kwargs): - """Dict-like set() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - """ - # support client code that unsets cookies by assignment of a None value: - if value is None: - remove_cookie_by_name( - self, name, domain=kwargs.get("domain"), path=kwargs.get("path") - ) - return - - if isinstance(value, Morsel): - c = morsel_to_cookie(value) - else: - c = create_cookie(name, value, **kwargs) - self.set_cookie(c) - return c - - def iterkeys(self): - """Dict-like iterkeys() that returns an iterator of names of cookies - from the jar. - - .. seealso:: itervalues() and iteritems(). - """ - for cookie in iter(self): - yield cookie.name - - def keys(self): - """Dict-like keys() that returns a list of names of cookies from the - jar. - - .. seealso:: values() and items(). - """ - return list(self.iterkeys()) - - def itervalues(self): - """Dict-like itervalues() that returns an iterator of values of cookies - from the jar. - - .. seealso:: iterkeys() and iteritems(). - """ - for cookie in iter(self): - yield cookie.value - - def values(self): - """Dict-like values() that returns a list of values of cookies from the - jar. - - .. seealso:: keys() and items(). - """ - return list(self.itervalues()) - - def iteritems(self): - """Dict-like iteritems() that returns an iterator of name-value tuples - from the jar. - - .. seealso:: iterkeys() and itervalues(). - """ - for cookie in iter(self): - yield cookie.name, cookie.value - - def items(self): - """Dict-like items() that returns a list of name-value tuples from the - jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a - vanilla python dict of key value pairs. - - .. seealso:: keys() and values(). - """ - return list(self.iteritems()) - - def list_domains(self): - """Utility method to list all the domains in the jar.""" - domains = [] - for cookie in iter(self): - if cookie.domain not in domains: - domains.append(cookie.domain) - return domains - - def list_paths(self): - """Utility method to list all the paths in the jar.""" - paths = [] - for cookie in iter(self): - if cookie.path not in paths: - paths.append(cookie.path) - return paths - - def multiple_domains(self): - """Returns True if there are multiple domains in the jar. - Returns False otherwise. - - :rtype: bool - """ - domains = [] - for cookie in iter(self): - if cookie.domain is not None and cookie.domain in domains: - return True - domains.append(cookie.domain) - return False # there is only one domain in jar - - def get_dict(self, domain=None, path=None): - """Takes as an argument an optional domain and path and returns a plain - old Python dict of name-value pairs of cookies that meet the - requirements. - - :rtype: dict - """ - dictionary = {} - for cookie in iter(self): - if (domain is None or cookie.domain == domain) and ( - path is None or cookie.path == path - ): - dictionary[cookie.name] = cookie.value - return dictionary - - def __contains__(self, name): - try: - return super().__contains__(name) - except CookieConflictError: - return True - - def __getitem__(self, name): - """Dict-like __getitem__() for compatibility with client code. Throws - exception if there are more than one cookie with name. In that case, - use the more explicit get() method instead. - - .. warning:: operation is O(n), not O(1). - """ - return self._find_no_duplicates(name) - - def __setitem__(self, name, value): - """Dict-like __setitem__ for compatibility with client code. Throws - exception if there is already a cookie of that name in the jar. In that - case, use the more explicit set() method instead. - """ - self.set(name, value) - - def __delitem__(self, name): - """Deletes a cookie given a name. Wraps ``http.cookiejar.CookieJar``'s - ``remove_cookie_by_name()``. - """ - remove_cookie_by_name(self, name) - - def set_cookie(self, cookie, *args, **kwargs): - if ( - hasattr(cookie.value, "startswith") - and cookie.value.startswith('"') - and cookie.value.endswith('"') - ): - cookie.value = cookie.value.replace('\\"', "") - return super().set_cookie(cookie, *args, **kwargs) - - def update(self, other): - """Updates this jar with cookies from another CookieJar or dict-like""" - if isinstance(other, cookielib.CookieJar): - for cookie in other: - self.set_cookie(copy.copy(cookie)) - else: - super().update(other) - - def _find(self, name, domain=None, path=None): - """Requests uses this method internally to get cookie values. - - If there are conflicting cookies, _find arbitrarily chooses one. - See _find_no_duplicates if you want an exception thrown if there are - conflicting cookies. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :return: cookie.value - """ - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - return cookie.value - - raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") - - def _find_no_duplicates(self, name, domain=None, path=None): - """Both ``__get_item__`` and ``get`` call this function: it's never - used elsewhere in Requests. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :raises KeyError: if cookie is not found - :raises CookieConflictError: if there are multiple cookies - that match name and optionally domain and path - :return: cookie.value - """ - toReturn = None - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - if toReturn is not None: - # if there are multiple cookies that meet passed in criteria - raise CookieConflictError( - f"There are multiple cookies with name, {name!r}" - ) - # we will eventually return this as long as no cookie conflict - toReturn = cookie.value - - if toReturn: - return toReturn - raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") - - def __getstate__(self): - """Unlike a normal CookieJar, this class is pickleable.""" - state = self.__dict__.copy() - # remove the unpickleable RLock object - state.pop("_cookies_lock") - return state - - def __setstate__(self, state): - """Unlike a normal CookieJar, this class is pickleable.""" - self.__dict__.update(state) - if "_cookies_lock" not in self.__dict__: - self._cookies_lock = threading.RLock() - - def copy(self): - """Return a copy of this RequestsCookieJar.""" - new_cj = RequestsCookieJar() - new_cj.set_policy(self.get_policy()) - new_cj.update(self) - return new_cj - - def get_policy(self): - """Return the CookiePolicy instance used.""" - return self._policy - - -def _copy_cookie_jar(jar): - if jar is None: - return None - - if hasattr(jar, "copy"): - # We're dealing with an instance of RequestsCookieJar - return jar.copy() - # We're dealing with a generic CookieJar instance - new_jar = copy.copy(jar) - new_jar.clear() - for cookie in jar: - new_jar.set_cookie(copy.copy(cookie)) - return new_jar - - -def create_cookie(name, value, **kwargs): - """Make a cookie from underspecified parameters. - - By default, the pair of `name` and `value` will be set for the domain '' - and sent on every request (this is sometimes called a "supercookie"). - """ - result = { - "version": 0, - "name": name, - "value": value, - "port": None, - "domain": "", - "path": "/", - "secure": False, - "expires": None, - "discard": True, - "comment": None, - "comment_url": None, - "rest": {"HttpOnly": None}, - "rfc2109": False, - } - - badargs = set(kwargs) - set(result) - if badargs: - raise TypeError( - f"create_cookie() got unexpected keyword arguments: {list(badargs)}" - ) - - result.update(kwargs) - result["port_specified"] = bool(result["port"]) - result["domain_specified"] = bool(result["domain"]) - result["domain_initial_dot"] = result["domain"].startswith(".") - result["path_specified"] = bool(result["path"]) - - return cookielib.Cookie(**result) - - -def morsel_to_cookie(morsel): - """Convert a Morsel object into a Cookie containing the one k/v pair.""" - - expires = None - if morsel["max-age"]: - try: - expires = int(time.time() + int(morsel["max-age"])) - except ValueError: - raise TypeError(f"max-age: {morsel['max-age']} must be integer") - elif morsel["expires"]: - time_template = "%a, %d-%b-%Y %H:%M:%S GMT" - expires = calendar.timegm(time.strptime(morsel["expires"], time_template)) - return create_cookie( - comment=morsel["comment"], - comment_url=bool(morsel["comment"]), - discard=False, - domain=morsel["domain"], - expires=expires, - name=morsel.key, - path=morsel["path"], - port=None, - rest={"HttpOnly": morsel["httponly"]}, - rfc2109=False, - secure=bool(morsel["secure"]), - value=morsel.value, - version=morsel["version"] or 0, - ) - - -def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): - """Returns a CookieJar from a key/value dictionary. - - :param cookie_dict: Dict of key/values to insert into CookieJar. - :param cookiejar: (optional) A cookiejar to add the cookies to. - :param overwrite: (optional) If False, will not replace cookies - already in the jar with new ones. - :rtype: CookieJar - """ - if cookiejar is None: - cookiejar = RequestsCookieJar() - - if cookie_dict is not None: - names_from_jar = [cookie.name for cookie in cookiejar] - for name in cookie_dict: - if overwrite or (name not in names_from_jar): - cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) - - return cookiejar - - -def merge_cookies(cookiejar, cookies): - """Add cookies to cookiejar and returns a merged CookieJar. - - :param cookiejar: CookieJar object to add the cookies to. - :param cookies: Dictionary or CookieJar object to be added. - :rtype: CookieJar - """ - if not isinstance(cookiejar, cookielib.CookieJar): - raise ValueError("You can only merge into CookieJar") - - if isinstance(cookies, dict): - cookiejar = cookiejar_from_dict(cookies, cookiejar=cookiejar, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - try: - cookiejar.update(cookies) - except AttributeError: - for cookie_in_jar in cookies: - cookiejar.set_cookie(cookie_in_jar) - - return cookiejar diff --git a/myenv/lib/python3.12/site-packages/requests/exceptions.py b/myenv/lib/python3.12/site-packages/requests/exceptions.py deleted file mode 100644 index 83986b4..0000000 --- a/myenv/lib/python3.12/site-packages/requests/exceptions.py +++ /dev/null @@ -1,151 +0,0 @@ -""" -requests.exceptions -~~~~~~~~~~~~~~~~~~~ - -This module contains the set of Requests' exceptions. -""" -from urllib3.exceptions import HTTPError as BaseHTTPError - -from .compat import JSONDecodeError as CompatJSONDecodeError - - -class RequestException(IOError): - """There was an ambiguous exception that occurred while handling your - request. - """ - - def __init__(self, *args, **kwargs): - """Initialize RequestException with `request` and `response` objects.""" - response = kwargs.pop("response", None) - self.response = response - self.request = kwargs.pop("request", None) - if response is not None and not self.request and hasattr(response, "request"): - self.request = self.response.request - super().__init__(*args, **kwargs) - - -class InvalidJSONError(RequestException): - """A JSON error occurred.""" - - -class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError): - """Couldn't decode the text into json""" - - def __init__(self, *args, **kwargs): - """ - Construct the JSONDecodeError instance first with all - args. Then use it's args to construct the IOError so that - the json specific args aren't used as IOError specific args - and the error message from JSONDecodeError is preserved. - """ - CompatJSONDecodeError.__init__(self, *args) - InvalidJSONError.__init__(self, *self.args, **kwargs) - - def __reduce__(self): - """ - The __reduce__ method called when pickling the object must - be the one from the JSONDecodeError (be it json/simplejson) - as it expects all the arguments for instantiation, not just - one like the IOError, and the MRO would by default call the - __reduce__ method from the IOError due to the inheritance order. - """ - return CompatJSONDecodeError.__reduce__(self) - - -class HTTPError(RequestException): - """An HTTP error occurred.""" - - -class ConnectionError(RequestException): - """A Connection error occurred.""" - - -class ProxyError(ConnectionError): - """A proxy error occurred.""" - - -class SSLError(ConnectionError): - """An SSL error occurred.""" - - -class Timeout(RequestException): - """The request timed out. - - Catching this error will catch both - :exc:`~requests.exceptions.ConnectTimeout` and - :exc:`~requests.exceptions.ReadTimeout` errors. - """ - - -class ConnectTimeout(ConnectionError, Timeout): - """The request timed out while trying to connect to the remote server. - - Requests that produced this error are safe to retry. - """ - - -class ReadTimeout(Timeout): - """The server did not send any data in the allotted amount of time.""" - - -class URLRequired(RequestException): - """A valid URL is required to make a request.""" - - -class TooManyRedirects(RequestException): - """Too many redirects.""" - - -class MissingSchema(RequestException, ValueError): - """The URL scheme (e.g. http or https) is missing.""" - - -class InvalidSchema(RequestException, ValueError): - """The URL scheme provided is either invalid or unsupported.""" - - -class InvalidURL(RequestException, ValueError): - """The URL provided was somehow invalid.""" - - -class InvalidHeader(RequestException, ValueError): - """The header value provided was somehow invalid.""" - - -class InvalidProxyURL(InvalidURL): - """The proxy URL provided is invalid.""" - - -class ChunkedEncodingError(RequestException): - """The server declared chunked encoding but sent an invalid chunk.""" - - -class ContentDecodingError(RequestException, BaseHTTPError): - """Failed to decode response content.""" - - -class StreamConsumedError(RequestException, TypeError): - """The content for this response was already consumed.""" - - -class RetryError(RequestException): - """Custom retries logic failed""" - - -class UnrewindableBodyError(RequestException): - """Requests encountered an error when trying to rewind a body.""" - - -# Warnings - - -class RequestsWarning(Warning): - """Base warning for Requests.""" - - -class FileModeWarning(RequestsWarning, DeprecationWarning): - """A file was opened in text mode, but Requests determined its binary length.""" - - -class RequestsDependencyWarning(RequestsWarning): - """An imported dependency doesn't match the expected version range.""" diff --git a/myenv/lib/python3.12/site-packages/requests/help.py b/myenv/lib/python3.12/site-packages/requests/help.py deleted file mode 100644 index 8fbcd65..0000000 --- a/myenv/lib/python3.12/site-packages/requests/help.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Module containing bug report helper(s).""" - -import json -import platform -import ssl -import sys - -import idna -import urllib3 - -from . import __version__ as requests_version - -try: - import charset_normalizer -except ImportError: - charset_normalizer = None - -try: - import chardet -except ImportError: - chardet = None - -try: - from urllib3.contrib import pyopenssl -except ImportError: - pyopenssl = None - OpenSSL = None - cryptography = None -else: - import cryptography - import OpenSSL - - -def _implementation(): - """Return a dict with the Python implementation and version. - - Provide both the name and the version of the Python implementation - currently running. For example, on CPython 3.10.3 it will return - {'name': 'CPython', 'version': '3.10.3'}. - - This function works best on CPython and PyPy: in particular, it probably - doesn't work for Jython or IronPython. Future investigation should be done - to work out the correct shape of the code for those platforms. - """ - implementation = platform.python_implementation() - - if implementation == "CPython": - implementation_version = platform.python_version() - elif implementation == "PyPy": - implementation_version = "{}.{}.{}".format( - sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro, - ) - if sys.pypy_version_info.releaselevel != "final": - implementation_version = "".join( - [implementation_version, sys.pypy_version_info.releaselevel] - ) - elif implementation == "Jython": - implementation_version = platform.python_version() # Complete Guess - elif implementation == "IronPython": - implementation_version = platform.python_version() # Complete Guess - else: - implementation_version = "Unknown" - - return {"name": implementation, "version": implementation_version} - - -def info(): - """Generate information for a bug report.""" - try: - platform_info = { - "system": platform.system(), - "release": platform.release(), - } - except OSError: - platform_info = { - "system": "Unknown", - "release": "Unknown", - } - - implementation_info = _implementation() - urllib3_info = {"version": urllib3.__version__} - charset_normalizer_info = {"version": None} - chardet_info = {"version": None} - if charset_normalizer: - charset_normalizer_info = {"version": charset_normalizer.__version__} - if chardet: - chardet_info = {"version": chardet.__version__} - - pyopenssl_info = { - "version": None, - "openssl_version": "", - } - if OpenSSL: - pyopenssl_info = { - "version": OpenSSL.__version__, - "openssl_version": f"{OpenSSL.SSL.OPENSSL_VERSION_NUMBER:x}", - } - cryptography_info = { - "version": getattr(cryptography, "__version__", ""), - } - idna_info = { - "version": getattr(idna, "__version__", ""), - } - - system_ssl = ssl.OPENSSL_VERSION_NUMBER - system_ssl_info = {"version": f"{system_ssl:x}" if system_ssl is not None else ""} - - return { - "platform": platform_info, - "implementation": implementation_info, - "system_ssl": system_ssl_info, - "using_pyopenssl": pyopenssl is not None, - "using_charset_normalizer": chardet is None, - "pyOpenSSL": pyopenssl_info, - "urllib3": urllib3_info, - "chardet": chardet_info, - "charset_normalizer": charset_normalizer_info, - "cryptography": cryptography_info, - "idna": idna_info, - "requests": { - "version": requests_version, - }, - } - - -def main(): - """Pretty-print the bug information as JSON.""" - print(json.dumps(info(), sort_keys=True, indent=2)) - - -if __name__ == "__main__": - main() diff --git a/myenv/lib/python3.12/site-packages/requests/hooks.py b/myenv/lib/python3.12/site-packages/requests/hooks.py deleted file mode 100644 index d181ba2..0000000 --- a/myenv/lib/python3.12/site-packages/requests/hooks.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -requests.hooks -~~~~~~~~~~~~~~ - -This module provides the capabilities for the Requests hooks system. - -Available hooks: - -``response``: - The response generated from a Request. -""" -HOOKS = ["response"] - - -def default_hooks(): - return {event: [] for event in HOOKS} - - -# TODO: response is the only one - - -def dispatch_hook(key, hooks, hook_data, **kwargs): - """Dispatches a hook dictionary on a given piece of data.""" - hooks = hooks or {} - hooks = hooks.get(key) - if hooks: - if hasattr(hooks, "__call__"): - hooks = [hooks] - for hook in hooks: - _hook_data = hook(hook_data, **kwargs) - if _hook_data is not None: - hook_data = _hook_data - return hook_data diff --git a/myenv/lib/python3.12/site-packages/requests/models.py b/myenv/lib/python3.12/site-packages/requests/models.py deleted file mode 100644 index c4b25fa..0000000 --- a/myenv/lib/python3.12/site-packages/requests/models.py +++ /dev/null @@ -1,1039 +0,0 @@ -""" -requests.models -~~~~~~~~~~~~~~~ - -This module contains the primary objects that power Requests. -""" - -import datetime - -# Import encoding now, to avoid implicit import later. -# Implicit import within threads may cause LookupError when standard library is in a ZIP, -# such as in Embedded Python. See https://github.com/psf/requests/issues/3578. -import encodings.idna # noqa: F401 -from io import UnsupportedOperation - -from urllib3.exceptions import ( - DecodeError, - LocationParseError, - ProtocolError, - ReadTimeoutError, - SSLError, -) -from urllib3.fields import RequestField -from urllib3.filepost import encode_multipart_formdata -from urllib3.util import parse_url - -from ._internal_utils import to_native_string, unicode_is_ascii -from .auth import HTTPBasicAuth -from .compat import ( - Callable, - JSONDecodeError, - Mapping, - basestring, - builtin_str, - chardet, - cookielib, -) -from .compat import json as complexjson -from .compat import urlencode, urlsplit, urlunparse -from .cookies import _copy_cookie_jar, cookiejar_from_dict, get_cookie_header -from .exceptions import ( - ChunkedEncodingError, - ConnectionError, - ContentDecodingError, - HTTPError, - InvalidJSONError, - InvalidURL, -) -from .exceptions import JSONDecodeError as RequestsJSONDecodeError -from .exceptions import MissingSchema -from .exceptions import SSLError as RequestsSSLError -from .exceptions import StreamConsumedError -from .hooks import default_hooks -from .status_codes import codes -from .structures import CaseInsensitiveDict -from .utils import ( - check_header_validity, - get_auth_from_url, - guess_filename, - guess_json_utf, - iter_slices, - parse_header_links, - requote_uri, - stream_decode_response_unicode, - super_len, - to_key_val_list, -) - -#: The set of HTTP status codes that indicate an automatically -#: processable redirect. -REDIRECT_STATI = ( - codes.moved, # 301 - codes.found, # 302 - codes.other, # 303 - codes.temporary_redirect, # 307 - codes.permanent_redirect, # 308 -) - -DEFAULT_REDIRECT_LIMIT = 30 -CONTENT_CHUNK_SIZE = 10 * 1024 -ITER_CHUNK_SIZE = 512 - - -class RequestEncodingMixin: - @property - def path_url(self): - """Build the path URL to use.""" - - url = [] - - p = urlsplit(self.url) - - path = p.path - if not path: - path = "/" - - url.append(path) - - query = p.query - if query: - url.append("?") - url.append(query) - - return "".join(url) - - @staticmethod - def _encode_params(data): - """Encode parameters in a piece of data. - - Will successfully encode parameters when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - """ - - if isinstance(data, (str, bytes)): - return data - elif hasattr(data, "read"): - return data - elif hasattr(data, "__iter__"): - result = [] - for k, vs in to_key_val_list(data): - if isinstance(vs, basestring) or not hasattr(vs, "__iter__"): - vs = [vs] - for v in vs: - if v is not None: - result.append( - ( - k.encode("utf-8") if isinstance(k, str) else k, - v.encode("utf-8") if isinstance(v, str) else v, - ) - ) - return urlencode(result, doseq=True) - else: - return data - - @staticmethod - def _encode_files(files, data): - """Build the body for a multipart/form-data request. - - Will successfully encode files when passed as a dict or a list of - tuples. Order is retained if data is a list of tuples but arbitrary - if parameters are supplied as a dict. - The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) - or 4-tuples (filename, fileobj, contentype, custom_headers). - """ - if not files: - raise ValueError("Files must be provided.") - elif isinstance(data, basestring): - raise ValueError("Data must not be a string.") - - new_fields = [] - fields = to_key_val_list(data or {}) - files = to_key_val_list(files or {}) - - for field, val in fields: - if isinstance(val, basestring) or not hasattr(val, "__iter__"): - val = [val] - for v in val: - if v is not None: - # Don't call str() on bytestrings: in Py3 it all goes wrong. - if not isinstance(v, bytes): - v = str(v) - - new_fields.append( - ( - field.decode("utf-8") - if isinstance(field, bytes) - else field, - v.encode("utf-8") if isinstance(v, str) else v, - ) - ) - - for k, v in files: - # support for explicit filename - ft = None - fh = None - if isinstance(v, (tuple, list)): - if len(v) == 2: - fn, fp = v - elif len(v) == 3: - fn, fp, ft = v - else: - fn, fp, ft, fh = v - else: - fn = guess_filename(v) or k - fp = v - - if isinstance(fp, (str, bytes, bytearray)): - fdata = fp - elif hasattr(fp, "read"): - fdata = fp.read() - elif fp is None: - continue - else: - fdata = fp - - rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) - rf.make_multipart(content_type=ft) - new_fields.append(rf) - - body, content_type = encode_multipart_formdata(new_fields) - - return body, content_type - - -class RequestHooksMixin: - def register_hook(self, event, hook): - """Properly register a hook.""" - - if event not in self.hooks: - raise ValueError(f'Unsupported event specified, with event name "{event}"') - - if isinstance(hook, Callable): - self.hooks[event].append(hook) - elif hasattr(hook, "__iter__"): - self.hooks[event].extend(h for h in hook if isinstance(h, Callable)) - - def deregister_hook(self, event, hook): - """Deregister a previously registered hook. - Returns True if the hook existed, False if not. - """ - - try: - self.hooks[event].remove(hook) - return True - except ValueError: - return False - - -class Request(RequestHooksMixin): - """A user-created :class:`Request ` object. - - Used to prepare a :class:`PreparedRequest `, which is sent to the server. - - :param method: HTTP method to use. - :param url: URL to send. - :param headers: dictionary of headers to send. - :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary or - list of tuples ``[(key, value)]`` is provided, form-encoding will - take place. - :param json: json for the body to attach to the request (if files or data is not specified). - :param params: URL parameters to append to the URL. If a dictionary or - list of tuples ``[(key, value)]`` is provided, form-encoding will - take place. - :param auth: Auth handler or (user, pass) tuple. - :param cookies: dictionary or CookieJar of cookies to attach to this request. - :param hooks: dictionary of callback hooks, for internal usage. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'https://httpbin.org/get') - >>> req.prepare() - - """ - - def __init__( - self, - method=None, - url=None, - headers=None, - files=None, - data=None, - params=None, - auth=None, - cookies=None, - hooks=None, - json=None, - ): - # Default empty dicts for dict params. - data = [] if data is None else data - files = [] if files is None else files - headers = {} if headers is None else headers - params = {} if params is None else params - hooks = {} if hooks is None else hooks - - self.hooks = default_hooks() - for k, v in list(hooks.items()): - self.register_hook(event=k, hook=v) - - self.method = method - self.url = url - self.headers = headers - self.files = files - self.data = data - self.json = json - self.params = params - self.auth = auth - self.cookies = cookies - - def __repr__(self): - return f"" - - def prepare(self): - """Constructs a :class:`PreparedRequest ` for transmission and returns it.""" - p = PreparedRequest() - p.prepare( - method=self.method, - url=self.url, - headers=self.headers, - files=self.files, - data=self.data, - json=self.json, - params=self.params, - auth=self.auth, - cookies=self.cookies, - hooks=self.hooks, - ) - return p - - -class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): - """The fully mutable :class:`PreparedRequest ` object, - containing the exact bytes that will be sent to the server. - - Instances are generated from a :class:`Request ` object, and - should not be instantiated manually; doing so may produce undesirable - effects. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'https://httpbin.org/get') - >>> r = req.prepare() - >>> r - - - >>> s = requests.Session() - >>> s.send(r) - - """ - - def __init__(self): - #: HTTP verb to send to the server. - self.method = None - #: HTTP URL to send the request to. - self.url = None - #: dictionary of HTTP headers. - self.headers = None - # The `CookieJar` used to create the Cookie header will be stored here - # after prepare_cookies is called - self._cookies = None - #: request body to send to the server. - self.body = None - #: dictionary of callback hooks, for internal usage. - self.hooks = default_hooks() - #: integer denoting starting position of a readable file-like body. - self._body_position = None - - def prepare( - self, - method=None, - url=None, - headers=None, - files=None, - data=None, - params=None, - auth=None, - cookies=None, - hooks=None, - json=None, - ): - """Prepares the entire request with the given parameters.""" - - self.prepare_method(method) - self.prepare_url(url, params) - self.prepare_headers(headers) - self.prepare_cookies(cookies) - self.prepare_body(data, files, json) - self.prepare_auth(auth, url) - - # Note that prepare_auth must be last to enable authentication schemes - # such as OAuth to work on a fully prepared request. - - # This MUST go after prepare_auth. Authenticators could add a hook - self.prepare_hooks(hooks) - - def __repr__(self): - return f"" - - def copy(self): - p = PreparedRequest() - p.method = self.method - p.url = self.url - p.headers = self.headers.copy() if self.headers is not None else None - p._cookies = _copy_cookie_jar(self._cookies) - p.body = self.body - p.hooks = self.hooks - p._body_position = self._body_position - return p - - def prepare_method(self, method): - """Prepares the given HTTP method.""" - self.method = method - if self.method is not None: - self.method = to_native_string(self.method.upper()) - - @staticmethod - def _get_idna_encoded_host(host): - import idna - - try: - host = idna.encode(host, uts46=True).decode("utf-8") - except idna.IDNAError: - raise UnicodeError - return host - - def prepare_url(self, url, params): - """Prepares the given HTTP URL.""" - #: Accept objects that have string representations. - #: We're unable to blindly call unicode/str functions - #: as this will include the bytestring indicator (b'') - #: on python 3.x. - #: https://github.com/psf/requests/pull/2238 - if isinstance(url, bytes): - url = url.decode("utf8") - else: - url = str(url) - - # Remove leading whitespaces from url - url = url.lstrip() - - # Don't do any URL preparation for non-HTTP schemes like `mailto`, - # `data` etc to work around exceptions from `url_parse`, which - # handles RFC 3986 only. - if ":" in url and not url.lower().startswith("http"): - self.url = url - return - - # Support for unicode domain names and paths. - try: - scheme, auth, host, port, path, query, fragment = parse_url(url) - except LocationParseError as e: - raise InvalidURL(*e.args) - - if not scheme: - raise MissingSchema( - f"Invalid URL {url!r}: No scheme supplied. " - f"Perhaps you meant https://{url}?" - ) - - if not host: - raise InvalidURL(f"Invalid URL {url!r}: No host supplied") - - # In general, we want to try IDNA encoding the hostname if the string contains - # non-ASCII characters. This allows users to automatically get the correct IDNA - # behaviour. For strings containing only ASCII characters, we need to also verify - # it doesn't start with a wildcard (*), before allowing the unencoded hostname. - if not unicode_is_ascii(host): - try: - host = self._get_idna_encoded_host(host) - except UnicodeError: - raise InvalidURL("URL has an invalid label.") - elif host.startswith(("*", ".")): - raise InvalidURL("URL has an invalid label.") - - # Carefully reconstruct the network location - netloc = auth or "" - if netloc: - netloc += "@" - netloc += host - if port: - netloc += f":{port}" - - # Bare domains aren't valid URLs. - if not path: - path = "/" - - if isinstance(params, (str, bytes)): - params = to_native_string(params) - - enc_params = self._encode_params(params) - if enc_params: - if query: - query = f"{query}&{enc_params}" - else: - query = enc_params - - url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) - self.url = url - - def prepare_headers(self, headers): - """Prepares the given HTTP headers.""" - - self.headers = CaseInsensitiveDict() - if headers: - for header in headers.items(): - # Raise exception on invalid header value. - check_header_validity(header) - name, value = header - self.headers[to_native_string(name)] = value - - def prepare_body(self, data, files, json=None): - """Prepares the given HTTP body data.""" - - # Check if file, fo, generator, iterator. - # If not, run through normal process. - - # Nottin' on you. - body = None - content_type = None - - if not data and json is not None: - # urllib3 requires a bytes-like body. Python 2's json.dumps - # provides this natively, but Python 3 gives a Unicode string. - content_type = "application/json" - - try: - body = complexjson.dumps(json, allow_nan=False) - except ValueError as ve: - raise InvalidJSONError(ve, request=self) - - if not isinstance(body, bytes): - body = body.encode("utf-8") - - is_stream = all( - [ - hasattr(data, "__iter__"), - not isinstance(data, (basestring, list, tuple, Mapping)), - ] - ) - - if is_stream: - try: - length = super_len(data) - except (TypeError, AttributeError, UnsupportedOperation): - length = None - - body = data - - if getattr(body, "tell", None) is not None: - # Record the current file position before reading. - # This will allow us to rewind a file in the event - # of a redirect. - try: - self._body_position = body.tell() - except OSError: - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body - self._body_position = object() - - if files: - raise NotImplementedError( - "Streamed bodies and files are mutually exclusive." - ) - - if length: - self.headers["Content-Length"] = builtin_str(length) - else: - self.headers["Transfer-Encoding"] = "chunked" - else: - # Multi-part file uploads. - if files: - (body, content_type) = self._encode_files(files, data) - else: - if data: - body = self._encode_params(data) - if isinstance(data, basestring) or hasattr(data, "read"): - content_type = None - else: - content_type = "application/x-www-form-urlencoded" - - self.prepare_content_length(body) - - # Add content-type if it wasn't explicitly provided. - if content_type and ("content-type" not in self.headers): - self.headers["Content-Type"] = content_type - - self.body = body - - def prepare_content_length(self, body): - """Prepare Content-Length header based on request method and body""" - if body is not None: - length = super_len(body) - if length: - # If length exists, set it. Otherwise, we fallback - # to Transfer-Encoding: chunked. - self.headers["Content-Length"] = builtin_str(length) - elif ( - self.method not in ("GET", "HEAD") - and self.headers.get("Content-Length") is None - ): - # Set Content-Length to 0 for methods that can have a body - # but don't provide one. (i.e. not GET or HEAD) - self.headers["Content-Length"] = "0" - - def prepare_auth(self, auth, url=""): - """Prepares the given HTTP auth data.""" - - # If no Auth is explicitly provided, extract it from the URL first. - if auth is None: - url_auth = get_auth_from_url(self.url) - auth = url_auth if any(url_auth) else None - - if auth: - if isinstance(auth, tuple) and len(auth) == 2: - # special-case basic HTTP auth - auth = HTTPBasicAuth(*auth) - - # Allow auth to make its changes. - r = auth(self) - - # Update self to reflect the auth changes. - self.__dict__.update(r.__dict__) - - # Recompute Content-Length - self.prepare_content_length(self.body) - - def prepare_cookies(self, cookies): - """Prepares the given HTTP cookie data. - - This function eventually generates a ``Cookie`` header from the - given cookies using cookielib. Due to cookielib's design, the header - will not be regenerated if it already exists, meaning this function - can only be called once for the life of the - :class:`PreparedRequest ` object. Any subsequent calls - to ``prepare_cookies`` will have no actual effect, unless the "Cookie" - header is removed beforehand. - """ - if isinstance(cookies, cookielib.CookieJar): - self._cookies = cookies - else: - self._cookies = cookiejar_from_dict(cookies) - - cookie_header = get_cookie_header(self._cookies, self) - if cookie_header is not None: - self.headers["Cookie"] = cookie_header - - def prepare_hooks(self, hooks): - """Prepares the given hooks.""" - # hooks can be passed as None to the prepare method and to this - # method. To prevent iterating over None, simply use an empty list - # if hooks is False-y - hooks = hooks or [] - for event in hooks: - self.register_hook(event, hooks[event]) - - -class Response: - """The :class:`Response ` object, which contains a - server's response to an HTTP request. - """ - - __attrs__ = [ - "_content", - "status_code", - "headers", - "url", - "history", - "encoding", - "reason", - "cookies", - "elapsed", - "request", - ] - - def __init__(self): - self._content = False - self._content_consumed = False - self._next = None - - #: Integer Code of responded HTTP Status, e.g. 404 or 200. - self.status_code = None - - #: Case-insensitive Dictionary of Response Headers. - #: For example, ``headers['content-encoding']`` will return the - #: value of a ``'Content-Encoding'`` response header. - self.headers = CaseInsensitiveDict() - - #: File-like object representation of response (for advanced usage). - #: Use of ``raw`` requires that ``stream=True`` be set on the request. - #: This requirement does not apply for use internally to Requests. - self.raw = None - - #: Final URL location of Response. - self.url = None - - #: Encoding to decode with when accessing r.text. - self.encoding = None - - #: A list of :class:`Response ` objects from - #: the history of the Request. Any redirect responses will end - #: up here. The list is sorted from the oldest to the most recent request. - self.history = [] - - #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". - self.reason = None - - #: A CookieJar of Cookies the server sent back. - self.cookies = cookiejar_from_dict({}) - - #: The amount of time elapsed between sending the request - #: and the arrival of the response (as a timedelta). - #: This property specifically measures the time taken between sending - #: the first byte of the request and finishing parsing the headers. It - #: is therefore unaffected by consuming the response content or the - #: value of the ``stream`` keyword argument. - self.elapsed = datetime.timedelta(0) - - #: The :class:`PreparedRequest ` object to which this - #: is a response. - self.request = None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def __getstate__(self): - # Consume everything; accessing the content attribute makes - # sure the content has been fully read. - if not self._content_consumed: - self.content - - return {attr: getattr(self, attr, None) for attr in self.__attrs__} - - def __setstate__(self, state): - for name, value in state.items(): - setattr(self, name, value) - - # pickled objects do not have .raw - setattr(self, "_content_consumed", True) - setattr(self, "raw", None) - - def __repr__(self): - return f"" - - def __bool__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __nonzero__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __iter__(self): - """Allows you to use a response as an iterator.""" - return self.iter_content(128) - - @property - def ok(self): - """Returns True if :attr:`status_code` is less than 400, False if not. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - try: - self.raise_for_status() - except HTTPError: - return False - return True - - @property - def is_redirect(self): - """True if this Response is a well-formed HTTP redirect that could have - been processed automatically (by :meth:`Session.resolve_redirects`). - """ - return "location" in self.headers and self.status_code in REDIRECT_STATI - - @property - def is_permanent_redirect(self): - """True if this Response one of the permanent versions of redirect.""" - return "location" in self.headers and self.status_code in ( - codes.moved_permanently, - codes.permanent_redirect, - ) - - @property - def next(self): - """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" - return self._next - - @property - def apparent_encoding(self): - """The apparent encoding, provided by the charset_normalizer or chardet libraries.""" - if chardet is not None: - return chardet.detect(self.content)["encoding"] - else: - # If no character detection library is available, we'll fall back - # to a standard Python utf-8 str. - return "utf-8" - - def iter_content(self, chunk_size=1, decode_unicode=False): - """Iterates over the response data. When stream=True is set on the - request, this avoids reading the content at once into memory for - large responses. The chunk size is the number of bytes it should - read into memory. This is not necessarily the length of each item - returned as decoding can take place. - - chunk_size must be of type int or None. A value of None will - function differently depending on the value of `stream`. - stream=True will read data as it arrives in whatever size the - chunks are received. If stream=False, data is returned as - a single chunk. - - If decode_unicode is True, content will be decoded using the best - available encoding based on the response. - """ - - def generate(): - # Special case for urllib3. - if hasattr(self.raw, "stream"): - try: - yield from self.raw.stream(chunk_size, decode_content=True) - except ProtocolError as e: - raise ChunkedEncodingError(e) - except DecodeError as e: - raise ContentDecodingError(e) - except ReadTimeoutError as e: - raise ConnectionError(e) - except SSLError as e: - raise RequestsSSLError(e) - else: - # Standard file-like object. - while True: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk - - self._content_consumed = True - - if self._content_consumed and isinstance(self._content, bool): - raise StreamConsumedError() - elif chunk_size is not None and not isinstance(chunk_size, int): - raise TypeError( - f"chunk_size must be an int, it is instead a {type(chunk_size)}." - ) - # simulate reading small chunks of the content - reused_chunks = iter_slices(self._content, chunk_size) - - stream_chunks = generate() - - chunks = reused_chunks if self._content_consumed else stream_chunks - - if decode_unicode: - chunks = stream_decode_response_unicode(chunks, self) - - return chunks - - def iter_lines( - self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=False, delimiter=None - ): - """Iterates over the response data, one line at a time. When - stream=True is set on the request, this avoids reading the - content at once into memory for large responses. - - .. note:: This method is not reentrant safe. - """ - - pending = None - - for chunk in self.iter_content( - chunk_size=chunk_size, decode_unicode=decode_unicode - ): - if pending is not None: - chunk = pending + chunk - - if delimiter: - lines = chunk.split(delimiter) - else: - lines = chunk.splitlines() - - if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: - pending = lines.pop() - else: - pending = None - - yield from lines - - if pending is not None: - yield pending - - @property - def content(self): - """Content of the response, in bytes.""" - - if self._content is False: - # Read the contents. - if self._content_consumed: - raise RuntimeError("The content for this response was already consumed") - - if self.status_code == 0 or self.raw is None: - self._content = None - else: - self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b"" - - self._content_consumed = True - # don't need to release the connection; that's been handled by urllib3 - # since we exhausted the data. - return self._content - - @property - def text(self): - """Content of the response, in unicode. - - If Response.encoding is None, encoding will be guessed using - ``charset_normalizer`` or ``chardet``. - - The encoding of the response content is determined based solely on HTTP - headers, following RFC 2616 to the letter. If you can take advantage of - non-HTTP knowledge to make a better guess at the encoding, you should - set ``r.encoding`` appropriately before accessing this property. - """ - - # Try charset from content-type - content = None - encoding = self.encoding - - if not self.content: - return "" - - # Fallback to auto-detected encoding. - if self.encoding is None: - encoding = self.apparent_encoding - - # Decode unicode from given encoding. - try: - content = str(self.content, encoding, errors="replace") - except (LookupError, TypeError): - # A LookupError is raised if the encoding was not found which could - # indicate a misspelling or similar mistake. - # - # A TypeError can be raised if encoding is None - # - # So we try blindly encoding. - content = str(self.content, errors="replace") - - return content - - def json(self, **kwargs): - r"""Decodes the JSON response body (if any) as a Python object. - - This may return a dictionary, list, etc. depending on what is in the response. - - :param \*\*kwargs: Optional arguments that ``json.loads`` takes. - :raises requests.exceptions.JSONDecodeError: If the response body does not - contain valid json. - """ - - if not self.encoding and self.content and len(self.content) > 3: - # No encoding set. JSON RFC 4627 section 3 states we should expect - # UTF-8, -16 or -32. Detect which one to use; If the detection or - # decoding fails, fall back to `self.text` (using charset_normalizer to make - # a best guess). - encoding = guess_json_utf(self.content) - if encoding is not None: - try: - return complexjson.loads(self.content.decode(encoding), **kwargs) - except UnicodeDecodeError: - # Wrong UTF codec detected; usually because it's not UTF-8 - # but some other 8-bit codec. This is an RFC violation, - # and the server didn't bother to tell us what codec *was* - # used. - pass - except JSONDecodeError as e: - raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) - - try: - return complexjson.loads(self.text, **kwargs) - except JSONDecodeError as e: - # Catch JSON-related errors and raise as requests.JSONDecodeError - # This aliases json.JSONDecodeError and simplejson.JSONDecodeError - raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) - - @property - def links(self): - """Returns the parsed header links of the response, if any.""" - - header = self.headers.get("link") - - resolved_links = {} - - if header: - links = parse_header_links(header) - - for link in links: - key = link.get("rel") or link.get("url") - resolved_links[key] = link - - return resolved_links - - def raise_for_status(self): - """Raises :class:`HTTPError`, if one occurred.""" - - http_error_msg = "" - if isinstance(self.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. (See PR #3538) - try: - reason = self.reason.decode("utf-8") - except UnicodeDecodeError: - reason = self.reason.decode("iso-8859-1") - else: - reason = self.reason - - if 400 <= self.status_code < 500: - http_error_msg = ( - f"{self.status_code} Client Error: {reason} for url: {self.url}" - ) - - elif 500 <= self.status_code < 600: - http_error_msg = ( - f"{self.status_code} Server Error: {reason} for url: {self.url}" - ) - - if http_error_msg: - raise HTTPError(http_error_msg, response=self) - - def close(self): - """Releases the connection back to the pool. Once this method has been - called the underlying ``raw`` object must not be accessed again. - - *Note: Should not normally need to be called explicitly.* - """ - if not self._content_consumed: - self.raw.close() - - release_conn = getattr(self.raw, "release_conn", None) - if release_conn is not None: - release_conn() diff --git a/myenv/lib/python3.12/site-packages/requests/packages.py b/myenv/lib/python3.12/site-packages/requests/packages.py deleted file mode 100644 index 5ab3d8e..0000000 --- a/myenv/lib/python3.12/site-packages/requests/packages.py +++ /dev/null @@ -1,23 +0,0 @@ -import sys - -from .compat import chardet - -# This code exists for backwards compatibility reasons. -# I don't like it either. Just look the other way. :) - -for package in ("urllib3", "idna"): - locals()[package] = __import__(package) - # This traversal is apparently necessary such that the identities are - # preserved (requests.packages.urllib3.* is urllib3.*) - for mod in list(sys.modules): - if mod == package or mod.startswith(f"{package}."): - sys.modules[f"requests.packages.{mod}"] = sys.modules[mod] - -if chardet is not None: - target = chardet.__name__ - for mod in list(sys.modules): - if mod == target or mod.startswith(f"{target}."): - imported_mod = sys.modules[mod] - sys.modules[f"requests.packages.{mod}"] = imported_mod - mod = mod.replace(target, "chardet") - sys.modules[f"requests.packages.{mod}"] = imported_mod diff --git a/myenv/lib/python3.12/site-packages/requests/sessions.py b/myenv/lib/python3.12/site-packages/requests/sessions.py deleted file mode 100644 index 731550d..0000000 --- a/myenv/lib/python3.12/site-packages/requests/sessions.py +++ /dev/null @@ -1,831 +0,0 @@ -""" -requests.sessions -~~~~~~~~~~~~~~~~~ - -This module provides a Session object to manage and persist settings across -requests (cookies, auth, proxies). -""" -import os -import sys -import time -from collections import OrderedDict -from datetime import timedelta - -from ._internal_utils import to_native_string -from .adapters import HTTPAdapter -from .auth import _basic_auth_str -from .compat import Mapping, cookielib, urljoin, urlparse -from .cookies import ( - RequestsCookieJar, - cookiejar_from_dict, - extract_cookies_to_jar, - merge_cookies, -) -from .exceptions import ( - ChunkedEncodingError, - ContentDecodingError, - InvalidSchema, - TooManyRedirects, -) -from .hooks import default_hooks, dispatch_hook - -# formerly defined here, reexposed here for backward compatibility -from .models import ( # noqa: F401 - DEFAULT_REDIRECT_LIMIT, - REDIRECT_STATI, - PreparedRequest, - Request, -) -from .status_codes import codes -from .structures import CaseInsensitiveDict -from .utils import ( # noqa: F401 - DEFAULT_PORTS, - default_headers, - get_auth_from_url, - get_environ_proxies, - get_netrc_auth, - requote_uri, - resolve_proxies, - rewind_body, - should_bypass_proxies, - to_key_val_list, -) - -# Preferred clock, based on which one is more accurate on a given system. -if sys.platform == "win32": - preferred_clock = time.perf_counter -else: - preferred_clock = time.time - - -def merge_setting(request_setting, session_setting, dict_class=OrderedDict): - """Determines appropriate setting for a given request, taking into account - the explicit setting on that request, and the setting in the session. If a - setting is a dictionary, they will be merged together using `dict_class` - """ - - if session_setting is None: - return request_setting - - if request_setting is None: - return session_setting - - # Bypass if not a dictionary (e.g. verify) - if not ( - isinstance(session_setting, Mapping) and isinstance(request_setting, Mapping) - ): - return request_setting - - merged_setting = dict_class(to_key_val_list(session_setting)) - merged_setting.update(to_key_val_list(request_setting)) - - # Remove keys that are set to None. Extract keys first to avoid altering - # the dictionary during iteration. - none_keys = [k for (k, v) in merged_setting.items() if v is None] - for key in none_keys: - del merged_setting[key] - - return merged_setting - - -def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): - """Properly merges both requests and session hooks. - - This is necessary because when request_hooks == {'response': []}, the - merge breaks Session hooks entirely. - """ - if session_hooks is None or session_hooks.get("response") == []: - return request_hooks - - if request_hooks is None or request_hooks.get("response") == []: - return session_hooks - - return merge_setting(request_hooks, session_hooks, dict_class) - - -class SessionRedirectMixin: - def get_redirect_target(self, resp): - """Receives a Response. Returns a redirect URI or ``None``""" - # Due to the nature of how requests processes redirects this method will - # be called at least once upon the original response and at least twice - # on each subsequent redirect response (if any). - # If a custom mixin is used to handle this logic, it may be advantageous - # to cache the redirect location onto the response object as a private - # attribute. - if resp.is_redirect: - location = resp.headers["location"] - # Currently the underlying http module on py3 decode headers - # in latin1, but empirical evidence suggests that latin1 is very - # rarely used with non-ASCII characters in HTTP headers. - # It is more likely to get UTF8 header rather than latin1. - # This causes incorrect handling of UTF8 encoded location headers. - # To solve this, we re-encode the location in latin1. - location = location.encode("latin1") - return to_native_string(location, "utf8") - return None - - def should_strip_auth(self, old_url, new_url): - """Decide whether Authorization header should be removed when redirecting""" - old_parsed = urlparse(old_url) - new_parsed = urlparse(new_url) - if old_parsed.hostname != new_parsed.hostname: - return True - # Special case: allow http -> https redirect when using the standard - # ports. This isn't specified by RFC 7235, but is kept to avoid - # breaking backwards compatibility with older versions of requests - # that allowed any redirects on the same host. - if ( - old_parsed.scheme == "http" - and old_parsed.port in (80, None) - and new_parsed.scheme == "https" - and new_parsed.port in (443, None) - ): - return False - - # Handle default port usage corresponding to scheme. - changed_port = old_parsed.port != new_parsed.port - changed_scheme = old_parsed.scheme != new_parsed.scheme - default_port = (DEFAULT_PORTS.get(old_parsed.scheme, None), None) - if ( - not changed_scheme - and old_parsed.port in default_port - and new_parsed.port in default_port - ): - return False - - # Standard case: root URI must match - return changed_port or changed_scheme - - def resolve_redirects( - self, - resp, - req, - stream=False, - timeout=None, - verify=True, - cert=None, - proxies=None, - yield_requests=False, - **adapter_kwargs, - ): - """Receives a Response. Returns a generator of Responses or Requests.""" - - hist = [] # keep track of history - - url = self.get_redirect_target(resp) - previous_fragment = urlparse(req.url).fragment - while url: - prepared_request = req.copy() - - # Update history and keep track of redirects. - # resp.history must ignore the original request in this loop - hist.append(resp) - resp.history = hist[1:] - - try: - resp.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): - resp.raw.read(decode_content=False) - - if len(resp.history) >= self.max_redirects: - raise TooManyRedirects( - f"Exceeded {self.max_redirects} redirects.", response=resp - ) - - # Release the connection back into the pool. - resp.close() - - # Handle redirection without scheme (see: RFC 1808 Section 4) - if url.startswith("//"): - parsed_rurl = urlparse(resp.url) - url = ":".join([to_native_string(parsed_rurl.scheme), url]) - - # Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2) - parsed = urlparse(url) - if parsed.fragment == "" and previous_fragment: - parsed = parsed._replace(fragment=previous_fragment) - elif parsed.fragment: - previous_fragment = parsed.fragment - url = parsed.geturl() - - # Facilitate relative 'location' headers, as allowed by RFC 7231. - # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') - # Compliant with RFC3986, we percent encode the url. - if not parsed.netloc: - url = urljoin(resp.url, requote_uri(url)) - else: - url = requote_uri(url) - - prepared_request.url = to_native_string(url) - - self.rebuild_method(prepared_request, resp) - - # https://github.com/psf/requests/issues/1084 - if resp.status_code not in ( - codes.temporary_redirect, - codes.permanent_redirect, - ): - # https://github.com/psf/requests/issues/3490 - purged_headers = ("Content-Length", "Content-Type", "Transfer-Encoding") - for header in purged_headers: - prepared_request.headers.pop(header, None) - prepared_request.body = None - - headers = prepared_request.headers - headers.pop("Cookie", None) - - # Extract any cookies sent on the response to the cookiejar - # in the new request. Because we've mutated our copied prepared - # request, use the old one that we haven't yet touched. - extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) - merge_cookies(prepared_request._cookies, self.cookies) - prepared_request.prepare_cookies(prepared_request._cookies) - - # Rebuild auth and proxy information. - proxies = self.rebuild_proxies(prepared_request, proxies) - self.rebuild_auth(prepared_request, resp) - - # A failed tell() sets `_body_position` to `object()`. This non-None - # value ensures `rewindable` will be True, allowing us to raise an - # UnrewindableBodyError, instead of hanging the connection. - rewindable = prepared_request._body_position is not None and ( - "Content-Length" in headers or "Transfer-Encoding" in headers - ) - - # Attempt to rewind consumed file-like object. - if rewindable: - rewind_body(prepared_request) - - # Override the original request. - req = prepared_request - - if yield_requests: - yield req - else: - resp = self.send( - req, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - allow_redirects=False, - **adapter_kwargs, - ) - - extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) - - # extract redirect url, if any, for the next loop - url = self.get_redirect_target(resp) - yield resp - - def rebuild_auth(self, prepared_request, response): - """When being redirected we may want to strip authentication from the - request to avoid leaking credentials. This method intelligently removes - and reapplies authentication where possible to avoid credential loss. - """ - headers = prepared_request.headers - url = prepared_request.url - - if "Authorization" in headers and self.should_strip_auth( - response.request.url, url - ): - # If we get redirected to a new host, we should strip out any - # authentication headers. - del headers["Authorization"] - - # .netrc might have more auth for us on our new host. - new_auth = get_netrc_auth(url) if self.trust_env else None - if new_auth is not None: - prepared_request.prepare_auth(new_auth) - - def rebuild_proxies(self, prepared_request, proxies): - """This method re-evaluates the proxy configuration by considering the - environment variables. If we are redirected to a URL covered by - NO_PROXY, we strip the proxy configuration. Otherwise, we set missing - proxy keys for this URL (in case they were stripped by a previous - redirect). - - This method also replaces the Proxy-Authorization header where - necessary. - - :rtype: dict - """ - headers = prepared_request.headers - scheme = urlparse(prepared_request.url).scheme - new_proxies = resolve_proxies(prepared_request, proxies, self.trust_env) - - if "Proxy-Authorization" in headers: - del headers["Proxy-Authorization"] - - try: - username, password = get_auth_from_url(new_proxies[scheme]) - except KeyError: - username, password = None, None - - # urllib3 handles proxy authorization for us in the standard adapter. - # Avoid appending this to TLS tunneled requests where it may be leaked. - if not scheme.startswith("https") and username and password: - headers["Proxy-Authorization"] = _basic_auth_str(username, password) - - return new_proxies - - def rebuild_method(self, prepared_request, response): - """When being redirected we may want to change the method of the request - based on certain specs or browser behavior. - """ - method = prepared_request.method - - # https://tools.ietf.org/html/rfc7231#section-6.4.4 - if response.status_code == codes.see_other and method != "HEAD": - method = "GET" - - # Do what the browsers do, despite standards... - # First, turn 302s into GETs. - if response.status_code == codes.found and method != "HEAD": - method = "GET" - - # Second, if a POST is responded to with a 301, turn it into a GET. - # This bizarre behaviour is explained in Issue 1704. - if response.status_code == codes.moved and method == "POST": - method = "GET" - - prepared_request.method = method - - -class Session(SessionRedirectMixin): - """A Requests session. - - Provides cookie persistence, connection-pooling, and configuration. - - Basic Usage:: - - >>> import requests - >>> s = requests.Session() - >>> s.get('https://httpbin.org/get') - - - Or as a context manager:: - - >>> with requests.Session() as s: - ... s.get('https://httpbin.org/get') - - """ - - __attrs__ = [ - "headers", - "cookies", - "auth", - "proxies", - "hooks", - "params", - "verify", - "cert", - "adapters", - "stream", - "trust_env", - "max_redirects", - ] - - def __init__(self): - #: A case-insensitive dictionary of headers to be sent on each - #: :class:`Request ` sent from this - #: :class:`Session `. - self.headers = default_headers() - - #: Default Authentication tuple or object to attach to - #: :class:`Request `. - self.auth = None - - #: Dictionary mapping protocol or protocol and host to the URL of the proxy - #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to - #: be used on each :class:`Request `. - self.proxies = {} - - #: Event-handling hooks. - self.hooks = default_hooks() - - #: Dictionary of querystring data to attach to each - #: :class:`Request `. The dictionary values may be lists for - #: representing multivalued query parameters. - self.params = {} - - #: Stream response content default. - self.stream = False - - #: SSL Verification default. - #: Defaults to `True`, requiring requests to verify the TLS certificate at the - #: remote end. - #: If verify is set to `False`, requests will accept any TLS certificate - #: presented by the server, and will ignore hostname mismatches and/or - #: expired certificates, which will make your application vulnerable to - #: man-in-the-middle (MitM) attacks. - #: Only set this to `False` for testing. - self.verify = True - - #: SSL client certificate default, if String, path to ssl client - #: cert file (.pem). If Tuple, ('cert', 'key') pair. - self.cert = None - - #: Maximum number of redirects allowed. If the request exceeds this - #: limit, a :class:`TooManyRedirects` exception is raised. - #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is - #: 30. - self.max_redirects = DEFAULT_REDIRECT_LIMIT - - #: Trust environment settings for proxy configuration, default - #: authentication and similar. - self.trust_env = True - - #: A CookieJar containing all currently outstanding cookies set on this - #: session. By default it is a - #: :class:`RequestsCookieJar `, but - #: may be any other ``cookielib.CookieJar`` compatible object. - self.cookies = cookiejar_from_dict({}) - - # Default connection adapters. - self.adapters = OrderedDict() - self.mount("https://", HTTPAdapter()) - self.mount("http://", HTTPAdapter()) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def prepare_request(self, request): - """Constructs a :class:`PreparedRequest ` for - transmission and returns it. The :class:`PreparedRequest` has settings - merged from the :class:`Request ` instance and those of the - :class:`Session`. - - :param request: :class:`Request` instance to prepare with this - session's settings. - :rtype: requests.PreparedRequest - """ - cookies = request.cookies or {} - - # Bootstrap CookieJar. - if not isinstance(cookies, cookielib.CookieJar): - cookies = cookiejar_from_dict(cookies) - - # Merge with session cookies - merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies - ) - - # Set environment's basic authentication if not explicitly set. - auth = request.auth - if self.trust_env and not auth and not self.auth: - auth = get_netrc_auth(request.url) - - p = PreparedRequest() - p.prepare( - method=request.method.upper(), - url=request.url, - files=request.files, - data=request.data, - json=request.json, - headers=merge_setting( - request.headers, self.headers, dict_class=CaseInsensitiveDict - ), - params=merge_setting(request.params, self.params), - auth=merge_setting(auth, self.auth), - cookies=merged_cookies, - hooks=merge_hooks(request.hooks, self.hooks), - ) - return p - - def request( - self, - method, - url, - params=None, - data=None, - headers=None, - cookies=None, - files=None, - auth=None, - timeout=None, - allow_redirects=True, - proxies=None, - hooks=None, - stream=None, - verify=None, - cert=None, - json=None, - ): - """Constructs a :class:`Request `, prepares it and sends it. - Returns :class:`Response ` object. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query - string for the :class:`Request`. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the - :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the - :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the - :class:`Request`. - :param files: (optional) Dictionary of ``'filename': file-like-objects`` - for multipart encoding upload. - :param auth: (optional) Auth tuple or callable to enable - Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) ` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Set to True by default. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol or protocol and - hostname to the URL of the proxy. - :param hooks: (optional) Dictionary mapping hook name to one event or - list of events, event must be callable. - :param stream: (optional) whether to immediately download the response - content. Defaults to ``False``. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. When set to - ``False``, requests will accept any TLS certificate presented by - the server, and will ignore hostname mismatches and/or expired - certificates, which will make your application vulnerable to - man-in-the-middle (MitM) attacks. Setting verify to ``False`` - may be useful during local development or testing. - :param cert: (optional) if String, path to ssl client cert file (.pem). - If Tuple, ('cert', 'key') pair. - :rtype: requests.Response - """ - # Create the Request. - req = Request( - method=method.upper(), - url=url, - headers=headers, - files=files, - data=data or {}, - json=json, - params=params or {}, - auth=auth, - cookies=cookies, - hooks=hooks, - ) - prep = self.prepare_request(req) - - proxies = proxies or {} - - settings = self.merge_environment_settings( - prep.url, proxies, stream, verify, cert - ) - - # Send the request. - send_kwargs = { - "timeout": timeout, - "allow_redirects": allow_redirects, - } - send_kwargs.update(settings) - resp = self.send(prep, **send_kwargs) - - return resp - - def get(self, url, **kwargs): - r"""Sends a GET request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", True) - return self.request("GET", url, **kwargs) - - def options(self, url, **kwargs): - r"""Sends a OPTIONS request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", True) - return self.request("OPTIONS", url, **kwargs) - - def head(self, url, **kwargs): - r"""Sends a HEAD request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", False) - return self.request("HEAD", url, **kwargs) - - def post(self, url, data=None, json=None, **kwargs): - r"""Sends a POST request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("POST", url, data=data, json=json, **kwargs) - - def put(self, url, data=None, **kwargs): - r"""Sends a PUT request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("PUT", url, data=data, **kwargs) - - def patch(self, url, data=None, **kwargs): - r"""Sends a PATCH request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("PATCH", url, data=data, **kwargs) - - def delete(self, url, **kwargs): - r"""Sends a DELETE request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("DELETE", url, **kwargs) - - def send(self, request, **kwargs): - """Send a given PreparedRequest. - - :rtype: requests.Response - """ - # Set defaults that the hooks can utilize to ensure they always have - # the correct parameters to reproduce the previous request. - kwargs.setdefault("stream", self.stream) - kwargs.setdefault("verify", self.verify) - kwargs.setdefault("cert", self.cert) - if "proxies" not in kwargs: - kwargs["proxies"] = resolve_proxies(request, self.proxies, self.trust_env) - - # It's possible that users might accidentally send a Request object. - # Guard against that specific failure case. - if isinstance(request, Request): - raise ValueError("You can only send PreparedRequests.") - - # Set up variables needed for resolve_redirects and dispatching of hooks - allow_redirects = kwargs.pop("allow_redirects", True) - stream = kwargs.get("stream") - hooks = request.hooks - - # Get the appropriate adapter to use - adapter = self.get_adapter(url=request.url) - - # Start time (approximately) of the request - start = preferred_clock() - - # Send the request - r = adapter.send(request, **kwargs) - - # Total elapsed time of the request (approximately) - elapsed = preferred_clock() - start - r.elapsed = timedelta(seconds=elapsed) - - # Response manipulation hooks - r = dispatch_hook("response", hooks, r, **kwargs) - - # Persist cookies - if r.history: - # If the hooks create history then we want those cookies too - for resp in r.history: - extract_cookies_to_jar(self.cookies, resp.request, resp.raw) - - extract_cookies_to_jar(self.cookies, request, r.raw) - - # Resolve redirects if allowed. - if allow_redirects: - # Redirect resolving generator. - gen = self.resolve_redirects(r, request, **kwargs) - history = [resp for resp in gen] - else: - history = [] - - # Shuffle things around if there's history. - if history: - # Insert the first (original) request at the start - history.insert(0, r) - # Get the last request made - r = history.pop() - r.history = history - - # If redirects aren't being followed, store the response on the Request for Response.next(). - if not allow_redirects: - try: - r._next = next( - self.resolve_redirects(r, request, yield_requests=True, **kwargs) - ) - except StopIteration: - pass - - if not stream: - r.content - - return r - - def merge_environment_settings(self, url, proxies, stream, verify, cert): - """ - Check the environment and merge it with some settings. - - :rtype: dict - """ - # Gather clues from the surrounding environment. - if self.trust_env: - # Set environment's proxies. - no_proxy = proxies.get("no_proxy") if proxies is not None else None - env_proxies = get_environ_proxies(url, no_proxy=no_proxy) - for k, v in env_proxies.items(): - proxies.setdefault(k, v) - - # Look for requests environment configuration - # and be compatible with cURL. - if verify is True or verify is None: - verify = ( - os.environ.get("REQUESTS_CA_BUNDLE") - or os.environ.get("CURL_CA_BUNDLE") - or verify - ) - - # Merge all the kwargs. - proxies = merge_setting(proxies, self.proxies) - stream = merge_setting(stream, self.stream) - verify = merge_setting(verify, self.verify) - cert = merge_setting(cert, self.cert) - - return {"proxies": proxies, "stream": stream, "verify": verify, "cert": cert} - - def get_adapter(self, url): - """ - Returns the appropriate connection adapter for the given URL. - - :rtype: requests.adapters.BaseAdapter - """ - for prefix, adapter in self.adapters.items(): - if url.lower().startswith(prefix.lower()): - return adapter - - # Nothing matches :-/ - raise InvalidSchema(f"No connection adapters were found for {url!r}") - - def close(self): - """Closes all adapters and as such the session""" - for v in self.adapters.values(): - v.close() - - def mount(self, prefix, adapter): - """Registers a connection adapter to a prefix. - - Adapters are sorted in descending order by prefix length. - """ - self.adapters[prefix] = adapter - keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] - - for key in keys_to_move: - self.adapters[key] = self.adapters.pop(key) - - def __getstate__(self): - state = {attr: getattr(self, attr, None) for attr in self.__attrs__} - return state - - def __setstate__(self, state): - for attr, value in state.items(): - setattr(self, attr, value) - - -def session(): - """ - Returns a :class:`Session` for context-management. - - .. deprecated:: 1.0.0 - - This method has been deprecated since version 1.0.0 and is only kept for - backwards compatibility. New code should use :class:`~requests.sessions.Session` - to create a session. This may be removed at a future date. - - :rtype: Session - """ - return Session() diff --git a/myenv/lib/python3.12/site-packages/requests/status_codes.py b/myenv/lib/python3.12/site-packages/requests/status_codes.py deleted file mode 100644 index c7945a2..0000000 --- a/myenv/lib/python3.12/site-packages/requests/status_codes.py +++ /dev/null @@ -1,128 +0,0 @@ -r""" -The ``codes`` object defines a mapping from common names for HTTP statuses -to their numerical codes, accessible either as attributes or as dictionary -items. - -Example:: - - >>> import requests - >>> requests.codes['temporary_redirect'] - 307 - >>> requests.codes.teapot - 418 - >>> requests.codes['\o/'] - 200 - -Some codes have multiple names, and both upper- and lower-case versions of -the names are allowed. For example, ``codes.ok``, ``codes.OK``, and -``codes.okay`` all correspond to the HTTP status code 200. -""" - -from .structures import LookupDict - -_codes = { - # Informational. - 100: ("continue",), - 101: ("switching_protocols",), - 102: ("processing", "early-hints"), - 103: ("checkpoint",), - 122: ("uri_too_long", "request_uri_too_long"), - 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"), - 201: ("created",), - 202: ("accepted",), - 203: ("non_authoritative_info", "non_authoritative_information"), - 204: ("no_content",), - 205: ("reset_content", "reset"), - 206: ("partial_content", "partial"), - 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"), - 208: ("already_reported",), - 226: ("im_used",), - # Redirection. - 300: ("multiple_choices",), - 301: ("moved_permanently", "moved", "\\o-"), - 302: ("found",), - 303: ("see_other", "other"), - 304: ("not_modified",), - 305: ("use_proxy",), - 306: ("switch_proxy",), - 307: ("temporary_redirect", "temporary_moved", "temporary"), - 308: ( - "permanent_redirect", - "resume_incomplete", - "resume", - ), # "resume" and "resume_incomplete" to be removed in 3.0 - # Client Error. - 400: ("bad_request", "bad"), - 401: ("unauthorized",), - 402: ("payment_required", "payment"), - 403: ("forbidden",), - 404: ("not_found", "-o-"), - 405: ("method_not_allowed", "not_allowed"), - 406: ("not_acceptable",), - 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"), - 408: ("request_timeout", "timeout"), - 409: ("conflict",), - 410: ("gone",), - 411: ("length_required",), - 412: ("precondition_failed", "precondition"), - 413: ("request_entity_too_large", "content_too_large"), - 414: ("request_uri_too_large", "uri_too_long"), - 415: ("unsupported_media_type", "unsupported_media", "media_type"), - 416: ( - "requested_range_not_satisfiable", - "requested_range", - "range_not_satisfiable", - ), - 417: ("expectation_failed",), - 418: ("im_a_teapot", "teapot", "i_am_a_teapot"), - 421: ("misdirected_request",), - 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"), - 423: ("locked",), - 424: ("failed_dependency", "dependency"), - 425: ("unordered_collection", "unordered", "too_early"), - 426: ("upgrade_required", "upgrade"), - 428: ("precondition_required", "precondition"), - 429: ("too_many_requests", "too_many"), - 431: ("header_fields_too_large", "fields_too_large"), - 444: ("no_response", "none"), - 449: ("retry_with", "retry"), - 450: ("blocked_by_windows_parental_controls", "parental_controls"), - 451: ("unavailable_for_legal_reasons", "legal_reasons"), - 499: ("client_closed_request",), - # Server Error. - 500: ("internal_server_error", "server_error", "/o\\", "✗"), - 501: ("not_implemented",), - 502: ("bad_gateway",), - 503: ("service_unavailable", "unavailable"), - 504: ("gateway_timeout",), - 505: ("http_version_not_supported", "http_version"), - 506: ("variant_also_negotiates",), - 507: ("insufficient_storage",), - 509: ("bandwidth_limit_exceeded", "bandwidth"), - 510: ("not_extended",), - 511: ("network_authentication_required", "network_auth", "network_authentication"), -} - -codes = LookupDict(name="status_codes") - - -def _init(): - for code, titles in _codes.items(): - for title in titles: - setattr(codes, title, code) - if not title.startswith(("\\", "/")): - setattr(codes, title.upper(), code) - - def doc(code): - names = ", ".join(f"``{n}``" for n in _codes[code]) - return "* %d: %s" % (code, names) - - global __doc__ - __doc__ = ( - __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes)) - if __doc__ is not None - else None - ) - - -_init() diff --git a/myenv/lib/python3.12/site-packages/requests/structures.py b/myenv/lib/python3.12/site-packages/requests/structures.py deleted file mode 100644 index 188e13e..0000000 --- a/myenv/lib/python3.12/site-packages/requests/structures.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -requests.structures -~~~~~~~~~~~~~~~~~~~ - -Data structures that power Requests. -""" - -from collections import OrderedDict - -from .compat import Mapping, MutableMapping - - -class CaseInsensitiveDict(MutableMapping): - """A case-insensitive ``dict``-like object. - - Implements all methods and operations of - ``MutableMapping`` as well as dict's ``copy``. Also - provides ``lower_items``. - - All keys are expected to be strings. The structure remembers the - case of the last key to be set, and ``iter(instance)``, - ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` - will contain case-sensitive keys. However, querying and contains - testing is case insensitive:: - - cid = CaseInsensitiveDict() - cid['Accept'] = 'application/json' - cid['aCCEPT'] == 'application/json' # True - list(cid) == ['Accept'] # True - - For example, ``headers['content-encoding']`` will return the - value of a ``'Content-Encoding'`` response header, regardless - of how the header name was originally stored. - - If the constructor, ``.update``, or equality comparison - operations are given keys that have equal ``.lower()``s, the - behavior is undefined. - """ - - def __init__(self, data=None, **kwargs): - self._store = OrderedDict() - if data is None: - data = {} - self.update(data, **kwargs) - - def __setitem__(self, key, value): - # Use the lowercased key for lookups, but store the actual - # key alongside the value. - self._store[key.lower()] = (key, value) - - def __getitem__(self, key): - return self._store[key.lower()][1] - - def __delitem__(self, key): - del self._store[key.lower()] - - def __iter__(self): - return (casedkey for casedkey, mappedvalue in self._store.values()) - - def __len__(self): - return len(self._store) - - def lower_items(self): - """Like iteritems(), but with all lowercase keys.""" - return ((lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items()) - - def __eq__(self, other): - if isinstance(other, Mapping): - other = CaseInsensitiveDict(other) - else: - return NotImplemented - # Compare insensitively - return dict(self.lower_items()) == dict(other.lower_items()) - - # Copy is required - def copy(self): - return CaseInsensitiveDict(self._store.values()) - - def __repr__(self): - return str(dict(self.items())) - - -class LookupDict(dict): - """Dictionary lookup object.""" - - def __init__(self, name=None): - self.name = name - super().__init__() - - def __repr__(self): - return f"" - - def __getitem__(self, key): - # We allow fall-through here, so values default to None - - return self.__dict__.get(key, None) - - def get(self, key, default=None): - return self.__dict__.get(key, default) diff --git a/myenv/lib/python3.12/site-packages/requests/utils.py b/myenv/lib/python3.12/site-packages/requests/utils.py deleted file mode 100644 index 8ab5585..0000000 --- a/myenv/lib/python3.12/site-packages/requests/utils.py +++ /dev/null @@ -1,1086 +0,0 @@ -""" -requests.utils -~~~~~~~~~~~~~~ - -This module provides utility functions that are used within Requests -that are also useful for external consumption. -""" - -import codecs -import contextlib -import io -import os -import re -import socket -import struct -import sys -import tempfile -import warnings -import zipfile -from collections import OrderedDict - -from urllib3.util import make_headers, parse_url - -from . import certs -from .__version__ import __version__ - -# to_native_string is unused here, but imported here for backwards compatibility -from ._internal_utils import ( # noqa: F401 - _HEADER_VALIDATORS_BYTE, - _HEADER_VALIDATORS_STR, - HEADER_VALIDATORS, - to_native_string, -) -from .compat import ( - Mapping, - basestring, - bytes, - getproxies, - getproxies_environment, - integer_types, - is_urllib3_1, -) -from .compat import parse_http_list as _parse_list_header -from .compat import ( - proxy_bypass, - proxy_bypass_environment, - quote, - str, - unquote, - urlparse, - urlunparse, -) -from .cookies import cookiejar_from_dict -from .exceptions import ( - FileModeWarning, - InvalidHeader, - InvalidURL, - UnrewindableBodyError, -) -from .structures import CaseInsensitiveDict - -NETRC_FILES = (".netrc", "_netrc") - -DEFAULT_CA_BUNDLE_PATH = certs.where() - -DEFAULT_PORTS = {"http": 80, "https": 443} - -# Ensure that ', ' is used to preserve previous delimiter behavior. -DEFAULT_ACCEPT_ENCODING = ", ".join( - re.split(r",\s*", make_headers(accept_encoding=True)["accept-encoding"]) -) - - -if sys.platform == "win32": - # provide a proxy_bypass version on Windows without DNS lookups - - def proxy_bypass_registry(host): - try: - import winreg - except ImportError: - return False - - try: - internetSettings = winreg.OpenKey( - winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", - ) - # ProxyEnable could be REG_SZ or REG_DWORD, normalizing it - proxyEnable = int(winreg.QueryValueEx(internetSettings, "ProxyEnable")[0]) - # ProxyOverride is almost always a string - proxyOverride = winreg.QueryValueEx(internetSettings, "ProxyOverride")[0] - except (OSError, ValueError): - return False - if not proxyEnable or not proxyOverride: - return False - - # make a check value list from the registry entry: replace the - # '' string by the localhost entry and the corresponding - # canonical entry. - proxyOverride = proxyOverride.split(";") - # filter out empty strings to avoid re.match return true in the following code. - proxyOverride = filter(None, proxyOverride) - # now check if we match one of the registry values. - for test in proxyOverride: - if test == "": - if "." not in host: - return True - test = test.replace(".", r"\.") # mask dots - test = test.replace("*", r".*") # change glob sequence - test = test.replace("?", r".") # change glob char - if re.match(test, host, re.I): - return True - return False - - def proxy_bypass(host): # noqa - """Return True, if the host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) - else: - return proxy_bypass_registry(host) - - -def dict_to_sequence(d): - """Returns an internal sequence dictionary update.""" - - if hasattr(d, "items"): - d = d.items() - - return d - - -def super_len(o): - total_length = None - current_position = 0 - - if not is_urllib3_1 and isinstance(o, str): - # urllib3 2.x+ treats all strings as utf-8 instead - # of latin-1 (iso-8859-1) like http.client. - o = o.encode("utf-8") - - if hasattr(o, "__len__"): - total_length = len(o) - - elif hasattr(o, "len"): - total_length = o.len - - elif hasattr(o, "fileno"): - try: - fileno = o.fileno() - except (io.UnsupportedOperation, AttributeError): - # AttributeError is a surprising exception, seeing as how we've just checked - # that `hasattr(o, 'fileno')`. It happens for objects obtained via - # `Tarfile.extractfile()`, per issue 5229. - pass - else: - total_length = os.fstat(fileno).st_size - - # Having used fstat to determine the file length, we need to - # confirm that this file was opened up in binary mode. - if "b" not in o.mode: - warnings.warn( - ( - "Requests has determined the content-length for this " - "request using the binary size of the file: however, the " - "file has been opened in text mode (i.e. without the 'b' " - "flag in the mode). This may lead to an incorrect " - "content-length. In Requests 3.0, support will be removed " - "for files in text mode." - ), - FileModeWarning, - ) - - if hasattr(o, "tell"): - try: - current_position = o.tell() - except OSError: - # This can happen in some weird situations, such as when the file - # is actually a special file descriptor like stdin. In this - # instance, we don't know what the length is, so set it to zero and - # let requests chunk it instead. - if total_length is not None: - current_position = total_length - else: - if hasattr(o, "seek") and total_length is None: - # StringIO and BytesIO have seek but no usable fileno - try: - # seek to end of file - o.seek(0, 2) - total_length = o.tell() - - # seek back to current position to support - # partially read file-like objects - o.seek(current_position or 0) - except OSError: - total_length = 0 - - if total_length is None: - total_length = 0 - - return max(0, total_length - current_position) - - -def get_netrc_auth(url, raise_errors=False): - """Returns the Requests tuple auth for a given url from netrc.""" - - netrc_file = os.environ.get("NETRC") - if netrc_file is not None: - netrc_locations = (netrc_file,) - else: - netrc_locations = (f"~/{f}" for f in NETRC_FILES) - - try: - from netrc import NetrcParseError, netrc - - netrc_path = None - - for f in netrc_locations: - loc = os.path.expanduser(f) - if os.path.exists(loc): - netrc_path = loc - break - - # Abort early if there isn't one. - if netrc_path is None: - return - - ri = urlparse(url) - host = ri.hostname - - try: - _netrc = netrc(netrc_path).authenticators(host) - if _netrc: - # Return with login / password - login_i = 0 if _netrc[0] else 1 - return (_netrc[login_i], _netrc[2]) - except (NetrcParseError, OSError): - # If there was a parsing error or a permissions issue reading the file, - # we'll just skip netrc auth unless explicitly asked to raise errors. - if raise_errors: - raise - - # App Engine hackiness. - except (ImportError, AttributeError): - pass - - -def guess_filename(obj): - """Tries to guess the filename of the given object.""" - name = getattr(obj, "name", None) - if name and isinstance(name, basestring) and name[0] != "<" and name[-1] != ">": - return os.path.basename(name) - - -def extract_zipped_paths(path): - """Replace nonexistent paths that look like they refer to a member of a zip - archive with the location of an extracted copy of the target, or else - just return the provided path unchanged. - """ - if os.path.exists(path): - # this is already a valid path, no need to do anything further - return path - - # find the first valid part of the provided path and treat that as a zip archive - # assume the rest of the path is the name of a member in the archive - archive, member = os.path.split(path) - while archive and not os.path.exists(archive): - archive, prefix = os.path.split(archive) - if not prefix: - # If we don't check for an empty prefix after the split (in other words, archive remains unchanged after the split), - # we _can_ end up in an infinite loop on a rare corner case affecting a small number of users - break - member = "/".join([prefix, member]) - - if not zipfile.is_zipfile(archive): - return path - - zip_file = zipfile.ZipFile(archive) - if member not in zip_file.namelist(): - return path - - # we have a valid zip archive and a valid member of that archive - tmp = tempfile.gettempdir() - extracted_path = os.path.join(tmp, member.split("/")[-1]) - if not os.path.exists(extracted_path): - # use read + write to avoid the creating nested folders, we only want the file, avoids mkdir racing condition - with atomic_open(extracted_path) as file_handler: - file_handler.write(zip_file.read(member)) - return extracted_path - - -@contextlib.contextmanager -def atomic_open(filename): - """Write a file to the disk in an atomic fashion""" - tmp_descriptor, tmp_name = tempfile.mkstemp(dir=os.path.dirname(filename)) - try: - with os.fdopen(tmp_descriptor, "wb") as tmp_handler: - yield tmp_handler - os.replace(tmp_name, filename) - except BaseException: - os.remove(tmp_name) - raise - - -def from_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. Unless it can not be represented as such, return an - OrderedDict, e.g., - - :: - - >>> from_key_val_list([('key', 'val')]) - OrderedDict([('key', 'val')]) - >>> from_key_val_list('string') - Traceback (most recent call last): - ... - ValueError: cannot encode objects that are not 2-tuples - >>> from_key_val_list({'key': 'val'}) - OrderedDict([('key', 'val')]) - - :rtype: OrderedDict - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError("cannot encode objects that are not 2-tuples") - - return OrderedDict(value) - - -def to_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. If it can be, return a list of tuples, e.g., - - :: - - >>> to_key_val_list([('key', 'val')]) - [('key', 'val')] - >>> to_key_val_list({'key': 'val'}) - [('key', 'val')] - >>> to_key_val_list('string') - Traceback (most recent call last): - ... - ValueError: cannot encode objects that are not 2-tuples - - :rtype: list - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError("cannot encode objects that are not 2-tuples") - - if isinstance(value, Mapping): - value = value.items() - - return list(value) - - -# From mitsuhiko/werkzeug (used with permission). -def parse_list_header(value): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Quotes are removed automatically after parsing. - - It basically works like :func:`parse_set_header` just that items - may appear multiple times and case sensitivity is preserved. - - The return value is a standard :class:`list`: - - >>> parse_list_header('token, "quoted value"') - ['token', 'quoted value'] - - To create a header from the :class:`list` again, use the - :func:`dump_header` function. - - :param value: a string with a list header. - :return: :class:`list` - :rtype: list - """ - result = [] - for item in _parse_list_header(value): - if item[:1] == item[-1:] == '"': - item = unquote_header_value(item[1:-1]) - result.append(item) - return result - - -# From mitsuhiko/werkzeug (used with permission). -def parse_dict_header(value): - """Parse lists of key, value pairs as described by RFC 2068 Section 2 and - convert them into a python dict: - - >>> d = parse_dict_header('foo="is a fish", bar="as well"') - >>> type(d) is dict - True - >>> sorted(d.items()) - [('bar', 'as well'), ('foo', 'is a fish')] - - If there is no value for a key it will be `None`: - - >>> parse_dict_header('key_without_value') - {'key_without_value': None} - - To create a header from the :class:`dict` again, use the - :func:`dump_header` function. - - :param value: a string with a dict header. - :return: :class:`dict` - :rtype: dict - """ - result = {} - for item in _parse_list_header(value): - if "=" not in item: - result[item] = None - continue - name, value = item.split("=", 1) - if value[:1] == value[-1:] == '"': - value = unquote_header_value(value[1:-1]) - result[name] = value - return result - - -# From mitsuhiko/werkzeug (used with permission). -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - - :param value: the header value to unquote. - :rtype: str - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != "\\\\": - return value.replace("\\\\", "\\").replace('\\"', '"') - return value - - -def dict_from_cookiejar(cj): - """Returns a key/value dictionary from a CookieJar. - - :param cj: CookieJar object to extract cookies from. - :rtype: dict - """ - - cookie_dict = {cookie.name: cookie.value for cookie in cj} - return cookie_dict - - -def add_dict_to_cookiejar(cj, cookie_dict): - """Returns a CookieJar from a key/value dictionary. - - :param cj: CookieJar to insert cookies into. - :param cookie_dict: Dict of key/values to insert into CookieJar. - :rtype: CookieJar - """ - - return cookiejar_from_dict(cookie_dict, cj) - - -def get_encodings_from_content(content): - """Returns encodings from given content string. - - :param content: bytestring to extract encodings from. - """ - warnings.warn( - ( - "In requests 3.0, get_encodings_from_content will be removed. For " - "more information, please see the discussion on issue #2266. (This" - " warning should only appear once.)" - ), - DeprecationWarning, - ) - - charset_re = re.compile(r']', flags=re.I) - pragma_re = re.compile(r']', flags=re.I) - xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') - - return ( - charset_re.findall(content) - + pragma_re.findall(content) - + xml_re.findall(content) - ) - - -def _parse_content_type_header(header): - """Returns content type and parameters from given header - - :param header: string - :return: tuple containing content type and dictionary of - parameters - """ - - tokens = header.split(";") - content_type, params = tokens[0].strip(), tokens[1:] - params_dict = {} - items_to_strip = "\"' " - - for param in params: - param = param.strip() - if param: - key, value = param, True - index_of_equals = param.find("=") - if index_of_equals != -1: - key = param[:index_of_equals].strip(items_to_strip) - value = param[index_of_equals + 1 :].strip(items_to_strip) - params_dict[key.lower()] = value - return content_type, params_dict - - -def get_encoding_from_headers(headers): - """Returns encodings from given HTTP Header Dict. - - :param headers: dictionary to extract encoding from. - :rtype: str - """ - - content_type = headers.get("content-type") - - if not content_type: - return None - - content_type, params = _parse_content_type_header(content_type) - - if "charset" in params: - return params["charset"].strip("'\"") - - if "text" in content_type: - return "ISO-8859-1" - - if "application/json" in content_type: - # Assume UTF-8 based on RFC 4627: https://www.ietf.org/rfc/rfc4627.txt since the charset was unset - return "utf-8" - - -def stream_decode_response_unicode(iterator, r): - """Stream decodes an iterator.""" - - if r.encoding is None: - yield from iterator - return - - decoder = codecs.getincrementaldecoder(r.encoding)(errors="replace") - for chunk in iterator: - rv = decoder.decode(chunk) - if rv: - yield rv - rv = decoder.decode(b"", final=True) - if rv: - yield rv - - -def iter_slices(string, slice_length): - """Iterate over slices of a string.""" - pos = 0 - if slice_length is None or slice_length <= 0: - slice_length = len(string) - while pos < len(string): - yield string[pos : pos + slice_length] - pos += slice_length - - -def get_unicode_from_response(r): - """Returns the requested content back in unicode. - - :param r: Response object to get unicode content from. - - Tried: - - 1. charset from content-type - 2. fall back and replace all unicode characters - - :rtype: str - """ - warnings.warn( - ( - "In requests 3.0, get_unicode_from_response will be removed. For " - "more information, please see the discussion on issue #2266. (This" - " warning should only appear once.)" - ), - DeprecationWarning, - ) - - tried_encodings = [] - - # Try charset from content-type - encoding = get_encoding_from_headers(r.headers) - - if encoding: - try: - return str(r.content, encoding) - except UnicodeError: - tried_encodings.append(encoding) - - # Fall back: - try: - return str(r.content, encoding, errors="replace") - except TypeError: - return r.content - - -# The unreserved URI characters (RFC 3986) -UNRESERVED_SET = frozenset( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~" -) - - -def unquote_unreserved(uri): - """Un-escape any percent-escape sequences in a URI that are unreserved - characters. This leaves all reserved, illegal and non-ASCII bytes encoded. - - :rtype: str - """ - parts = uri.split("%") - for i in range(1, len(parts)): - h = parts[i][0:2] - if len(h) == 2 and h.isalnum(): - try: - c = chr(int(h, 16)) - except ValueError: - raise InvalidURL(f"Invalid percent-escape sequence: '{h}'") - - if c in UNRESERVED_SET: - parts[i] = c + parts[i][2:] - else: - parts[i] = f"%{parts[i]}" - else: - parts[i] = f"%{parts[i]}" - return "".join(parts) - - -def requote_uri(uri): - """Re-quote the given URI. - - This function passes the given URI through an unquote/quote cycle to - ensure that it is fully and consistently quoted. - - :rtype: str - """ - safe_with_percent = "!#$%&'()*+,/:;=?@[]~" - safe_without_percent = "!#$&'()*+,/:;=?@[]~" - try: - # Unquote only the unreserved characters - # Then quote only illegal characters (do not quote reserved, - # unreserved, or '%') - return quote(unquote_unreserved(uri), safe=safe_with_percent) - except InvalidURL: - # We couldn't unquote the given URI, so let's try quoting it, but - # there may be unquoted '%'s in the URI. We need to make sure they're - # properly quoted so they do not cause issues elsewhere. - return quote(uri, safe=safe_without_percent) - - -def address_in_network(ip, net): - """This function allows you to check if an IP belongs to a network subnet - - Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 - returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 - - :rtype: bool - """ - ipaddr = struct.unpack("=L", socket.inet_aton(ip))[0] - netaddr, bits = net.split("/") - netmask = struct.unpack("=L", socket.inet_aton(dotted_netmask(int(bits))))[0] - network = struct.unpack("=L", socket.inet_aton(netaddr))[0] & netmask - return (ipaddr & netmask) == (network & netmask) - - -def dotted_netmask(mask): - """Converts mask from /xx format to xxx.xxx.xxx.xxx - - Example: if mask is 24 function returns 255.255.255.0 - - :rtype: str - """ - bits = 0xFFFFFFFF ^ (1 << 32 - mask) - 1 - return socket.inet_ntoa(struct.pack(">I", bits)) - - -def is_ipv4_address(string_ip): - """ - :rtype: bool - """ - try: - socket.inet_aton(string_ip) - except OSError: - return False - return True - - -def is_valid_cidr(string_network): - """ - Very simple check of the cidr format in no_proxy variable. - - :rtype: bool - """ - if string_network.count("/") == 1: - try: - mask = int(string_network.split("/")[1]) - except ValueError: - return False - - if mask < 1 or mask > 32: - return False - - try: - socket.inet_aton(string_network.split("/")[0]) - except OSError: - return False - else: - return False - return True - - -@contextlib.contextmanager -def set_environ(env_name, value): - """Set the environment variable 'env_name' to 'value' - - Save previous value, yield, and then restore the previous value stored in - the environment variable 'env_name'. - - If 'value' is None, do nothing""" - value_changed = value is not None - if value_changed: - old_value = os.environ.get(env_name) - os.environ[env_name] = value - try: - yield - finally: - if value_changed: - if old_value is None: - del os.environ[env_name] - else: - os.environ[env_name] = old_value - - -def should_bypass_proxies(url, no_proxy): - """ - Returns whether we should bypass proxies or not. - - :rtype: bool - """ - - # Prioritize lowercase environment variables over uppercase - # to keep a consistent behaviour with other http projects (curl, wget). - def get_proxy(key): - return os.environ.get(key) or os.environ.get(key.upper()) - - # First check whether no_proxy is defined. If it is, check that the URL - # we're getting isn't in the no_proxy list. - no_proxy_arg = no_proxy - if no_proxy is None: - no_proxy = get_proxy("no_proxy") - parsed = urlparse(url) - - if parsed.hostname is None: - # URLs don't always have hostnames, e.g. file:/// urls. - return True - - if no_proxy: - # We need to check whether we match here. We need to see if we match - # the end of the hostname, both with and without the port. - no_proxy = (host for host in no_proxy.replace(" ", "").split(",") if host) - - if is_ipv4_address(parsed.hostname): - for proxy_ip in no_proxy: - if is_valid_cidr(proxy_ip): - if address_in_network(parsed.hostname, proxy_ip): - return True - elif parsed.hostname == proxy_ip: - # If no_proxy ip was defined in plain IP notation instead of cidr notation & - # matches the IP of the index - return True - else: - host_with_port = parsed.hostname - if parsed.port: - host_with_port += f":{parsed.port}" - - for host in no_proxy: - if parsed.hostname.endswith(host) or host_with_port.endswith(host): - # The URL does match something in no_proxy, so we don't want - # to apply the proxies on this URL. - return True - - with set_environ("no_proxy", no_proxy_arg): - # parsed.hostname can be `None` in cases such as a file URI. - try: - bypass = proxy_bypass(parsed.hostname) - except (TypeError, socket.gaierror): - bypass = False - - if bypass: - return True - - return False - - -def get_environ_proxies(url, no_proxy=None): - """ - Return a dict of environment proxies. - - :rtype: dict - """ - if should_bypass_proxies(url, no_proxy=no_proxy): - return {} - else: - return getproxies() - - -def select_proxy(url, proxies): - """Select a proxy for the url, if applicable. - - :param url: The url being for the request - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - """ - proxies = proxies or {} - urlparts = urlparse(url) - if urlparts.hostname is None: - return proxies.get(urlparts.scheme, proxies.get("all")) - - proxy_keys = [ - urlparts.scheme + "://" + urlparts.hostname, - urlparts.scheme, - "all://" + urlparts.hostname, - "all", - ] - proxy = None - for proxy_key in proxy_keys: - if proxy_key in proxies: - proxy = proxies[proxy_key] - break - - return proxy - - -def resolve_proxies(request, proxies, trust_env=True): - """This method takes proxy information from a request and configuration - input to resolve a mapping of target proxies. This will consider settings - such as NO_PROXY to strip proxy configurations. - - :param request: Request or PreparedRequest - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - :param trust_env: Boolean declaring whether to trust environment configs - - :rtype: dict - """ - proxies = proxies if proxies is not None else {} - url = request.url - scheme = urlparse(url).scheme - no_proxy = proxies.get("no_proxy") - new_proxies = proxies.copy() - - if trust_env and not should_bypass_proxies(url, no_proxy=no_proxy): - environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) - - proxy = environ_proxies.get(scheme, environ_proxies.get("all")) - - if proxy: - new_proxies.setdefault(scheme, proxy) - return new_proxies - - -def default_user_agent(name="python-requests"): - """ - Return a string representing the default user agent. - - :rtype: str - """ - return f"{name}/{__version__}" - - -def default_headers(): - """ - :rtype: requests.structures.CaseInsensitiveDict - """ - return CaseInsensitiveDict( - { - "User-Agent": default_user_agent(), - "Accept-Encoding": DEFAULT_ACCEPT_ENCODING, - "Accept": "*/*", - "Connection": "keep-alive", - } - ) - - -def parse_header_links(value): - """Return a list of parsed link headers proxies. - - i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg" - - :rtype: list - """ - - links = [] - - replace_chars = " '\"" - - value = value.strip(replace_chars) - if not value: - return links - - for val in re.split(", *<", value): - try: - url, params = val.split(";", 1) - except ValueError: - url, params = val, "" - - link = {"url": url.strip("<> '\"")} - - for param in params.split(";"): - try: - key, value = param.split("=") - except ValueError: - break - - link[key.strip(replace_chars)] = value.strip(replace_chars) - - links.append(link) - - return links - - -# Null bytes; no need to recreate these on each call to guess_json_utf -_null = "\x00".encode("ascii") # encoding to ASCII for Python 3 -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - """ - :rtype: str - """ - # JSON always starts with two ASCII characters, so detection is as - # easy as counting the nulls and from their location and count - # determine the encoding. Also detect a BOM, if present. - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): - return "utf-32" # BOM included - if sample[:3] == codecs.BOM_UTF8: - return "utf-8-sig" # BOM included, MS style (discouraged) - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return "utf-16" # BOM included - nullcount = sample.count(_null) - if nullcount == 0: - return "utf-8" - if nullcount == 2: - if sample[::2] == _null2: # 1st and 3rd are null - return "utf-16-be" - if sample[1::2] == _null2: # 2nd and 4th are null - return "utf-16-le" - # Did not detect 2 valid UTF-16 ascii-range characters - if nullcount == 3: - if sample[:3] == _null3: - return "utf-32-be" - if sample[1:] == _null3: - return "utf-32-le" - # Did not detect a valid UTF-32 ascii-range character - return None - - -def prepend_scheme_if_needed(url, new_scheme): - """Given a URL that may or may not have a scheme, prepend the given scheme. - Does not replace a present scheme with the one provided as an argument. - - :rtype: str - """ - parsed = parse_url(url) - scheme, auth, host, port, path, query, fragment = parsed - - # A defect in urlparse determines that there isn't a netloc present in some - # urls. We previously assumed parsing was overly cautious, and swapped the - # netloc and path. Due to a lack of tests on the original defect, this is - # maintained with parse_url for backwards compatibility. - netloc = parsed.netloc - if not netloc: - netloc, path = path, netloc - - if auth: - # parse_url doesn't provide the netloc with auth - # so we'll add it ourselves. - netloc = "@".join([auth, netloc]) - if scheme is None: - scheme = new_scheme - if path is None: - path = "" - - return urlunparse((scheme, netloc, path, "", query, fragment)) - - -def get_auth_from_url(url): - """Given a url with authentication components, extract them into a tuple of - username,password. - - :rtype: (str,str) - """ - parsed = urlparse(url) - - try: - auth = (unquote(parsed.username), unquote(parsed.password)) - except (AttributeError, TypeError): - auth = ("", "") - - return auth - - -def check_header_validity(header): - """Verifies that header parts don't contain leading whitespace - reserved characters, or return characters. - - :param header: tuple, in the format (name, value). - """ - name, value = header - _validate_header_part(header, name, 0) - _validate_header_part(header, value, 1) - - -def _validate_header_part(header, header_part, header_validator_index): - if isinstance(header_part, str): - validator = _HEADER_VALIDATORS_STR[header_validator_index] - elif isinstance(header_part, bytes): - validator = _HEADER_VALIDATORS_BYTE[header_validator_index] - else: - raise InvalidHeader( - f"Header part ({header_part!r}) from {header} " - f"must be of type str or bytes, not {type(header_part)}" - ) - - if not validator.match(header_part): - header_kind = "name" if header_validator_index == 0 else "value" - raise InvalidHeader( - f"Invalid leading whitespace, reserved character(s), or return " - f"character(s) in header {header_kind}: {header_part!r}" - ) - - -def urldefragauth(url): - """ - Given a url remove the fragment and the authentication part. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url) - - # see func:`prepend_scheme_if_needed` - if not netloc: - netloc, path = path, netloc - - netloc = netloc.rsplit("@", 1)[-1] - - return urlunparse((scheme, netloc, path, params, query, "")) - - -def rewind_body(prepared_request): - """Move file pointer back to its recorded starting position - so it can be read again on redirect. - """ - body_seek = getattr(prepared_request.body, "seek", None) - if body_seek is not None and isinstance( - prepared_request._body_position, integer_types - ): - try: - body_seek(prepared_request._body_position) - except OSError: - raise UnrewindableBodyError( - "An error occurred when rewinding request body for redirect." - ) - else: - raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/LICENSE deleted file mode 100644 index 1cc22a5..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (c) 2010-2024 Benjamin Peterson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/METADATA deleted file mode 100644 index cfde03c..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/METADATA +++ /dev/null @@ -1,43 +0,0 @@ -Metadata-Version: 2.1 -Name: six -Version: 1.17.0 -Summary: Python 2 and 3 compatibility utilities -Home-page: https://github.com/benjaminp/six -Author: Benjamin Peterson -Author-email: benjamin@python.org -License: MIT -Classifier: Development Status :: 5 - Production/Stable -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Libraries -Classifier: Topic :: Utilities -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.* -License-File: LICENSE - -.. image:: https://img.shields.io/pypi/v/six.svg - :target: https://pypi.org/project/six/ - :alt: six on PyPI - -.. image:: https://readthedocs.org/projects/six/badge/?version=latest - :target: https://six.readthedocs.io/ - :alt: six's documentation on Read the Docs - -.. image:: https://img.shields.io/badge/license-MIT-green.svg - :target: https://github.com/benjaminp/six/blob/master/LICENSE - :alt: MIT License badge - -Six is a Python 2 and 3 compatibility library. It provides utility functions -for smoothing over the differences between the Python versions with the goal of -writing Python code that is compatible on both Python versions. See the -documentation for more information on what is provided. - -Six supports Python 2.7 and 3.3+. It is contained in only one Python -file, so it can be easily copied into your project. (The copyright and license -notice must be retained.) - -Online documentation is at https://six.readthedocs.io/. - -Bugs can be reported to https://github.com/benjaminp/six. The code can also -be found there. diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/RECORD deleted file mode 100644 index bb90c1a..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/RECORD +++ /dev/null @@ -1,8 +0,0 @@ -__pycache__/six.cpython-312.pyc,, -six-1.17.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -six-1.17.0.dist-info/LICENSE,sha256=Q3W6IOK5xsTnytKUCmKP2Q6VzD1Q7pKq51VxXYuh-9A,1066 -six-1.17.0.dist-info/METADATA,sha256=ViBCB4wnUlSfbYp8htvF3XCAiKe-bYBnLsewcQC3JGg,1658 -six-1.17.0.dist-info/RECORD,, -six-1.17.0.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109 -six-1.17.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4 -six.py,sha256=xRyR9wPT1LNpbJI8tf7CE-BeddkhU5O--sfy-mo5BN8,34703 diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/WHEEL deleted file mode 100644 index 104f387..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.6.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/top_level.txt deleted file mode 100644 index ffe2fce..0000000 --- a/myenv/lib/python3.12/site-packages/six-1.17.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -six diff --git a/myenv/lib/python3.12/site-packages/six.py b/myenv/lib/python3.12/site-packages/six.py deleted file mode 100644 index 3de5969..0000000 --- a/myenv/lib/python3.12/site-packages/six.py +++ /dev/null @@ -1,1003 +0,0 @@ -# Copyright (c) 2010-2024 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.17.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - -if PY34: - from importlib.util import spec_from_loader -else: - spec_from_loader = None - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def find_spec(self, fullname, path, target=None): - if fullname in self.known_modules: - return spec_from_loader(fullname, self) - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - - def create_module(self, spec): - return self.load_module(spec.name) - - def exec_module(self, module): - pass - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections", "IterableUserDict", "UserDict"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -if sys.version_info[:2] < (3, 14): - _urllib_request_moved_attributes.extend( - [ - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - ] - ) -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - del io - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" - _assertNotRegex = "assertNotRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -def assertNotRegex(self, *args, **kwargs): - return getattr(self, _assertNotRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""") - - -if sys.version_info[:2] > (3,): - exec_("""def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - # This does exactly the same what the :func:`py3:functools.update_wrapper` - # function does on Python versions after 3.2. It sets the ``__wrapped__`` - # attribute on ``wrapper`` object and it doesn't raise an error if any of - # the attributes mentioned in ``assigned`` and ``updated`` are missing on - # ``wrapped`` object. - def _update_wrapper(wrapper, wrapped, - assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - for attr in assigned: - try: - value = getattr(wrapped, attr) - except AttributeError: - continue - else: - setattr(wrapper, attr, value) - for attr in updated: - getattr(wrapper, attr).update(getattr(wrapped, attr, {})) - wrapper.__wrapped__ = wrapped - return wrapper - _update_wrapper.__doc__ = functools.update_wrapper.__doc__ - - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - return functools.partial(_update_wrapper, wrapped=wrapped, - assigned=assigned, updated=updated) - wraps.__doc__ = functools.wraps.__doc__ - -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - - def __new__(cls, name, this_bases, d): - if sys.version_info[:2] >= (3, 7): - # This version introduced PEP 560 that requires a bit - # of extra care (we mimic what is done by __build_class__). - resolved_bases = types.resolve_bases(bases) - if resolved_bases is not bases: - d['__orig_bases__'] = bases - else: - resolved_bases = bases - return meta(name, resolved_bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - if hasattr(cls, '__qualname__'): - orig_vars['__qualname__'] = cls.__qualname__ - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def ensure_binary(s, encoding='utf-8', errors='strict'): - """Coerce **s** to six.binary_type. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> encoded to `bytes` - - `bytes` -> `bytes` - """ - if isinstance(s, binary_type): - return s - if isinstance(s, text_type): - return s.encode(encoding, errors) - raise TypeError("not expecting type '%s'" % type(s)) - - -def ensure_str(s, encoding='utf-8', errors='strict'): - """Coerce *s* to `str`. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - # Optimization: Fast return for the common case. - if type(s) is str: - return s - if PY2 and isinstance(s, text_type): - return s.encode(encoding, errors) - elif PY3 and isinstance(s, binary_type): - return s.decode(encoding, errors) - elif not isinstance(s, (text_type, binary_type)): - raise TypeError("not expecting type '%s'" % type(s)) - return s - - -def ensure_text(s, encoding='utf-8', errors='strict'): - """Coerce *s* to six.text_type. - - For Python 2: - - `unicode` -> `unicode` - - `str` -> `unicode` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - if isinstance(s, binary_type): - return s.decode(encoding, errors) - elif isinstance(s, text_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) - - -def python_2_unicode_compatible(klass): - """ - A class decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/myenv/lib/python3.12/site-packages/socks.py b/myenv/lib/python3.12/site-packages/socks.py deleted file mode 100644 index 83b1435..0000000 --- a/myenv/lib/python3.12/site-packages/socks.py +++ /dev/null @@ -1,847 +0,0 @@ -from base64 import b64encode -try: - from collections.abc import Callable -except ImportError: - from collections import Callable -from errno import EOPNOTSUPP, EINVAL, EAGAIN -import functools -from io import BytesIO -import logging -import os -from os import SEEK_CUR -import socket -import struct -import sys - -__version__ = "1.7.1" - - -if os.name == "nt" and sys.version_info < (3, 0): - try: - import win_inet_pton - except ImportError: - raise ImportError( - "To run PySocks on Windows you must install win_inet_pton") - -log = logging.getLogger(__name__) - -PROXY_TYPE_SOCKS4 = SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = SOCKS5 = 2 -PROXY_TYPE_HTTP = HTTP = 3 - -PROXY_TYPES = {"SOCKS4": SOCKS4, "SOCKS5": SOCKS5, "HTTP": HTTP} -PRINTABLE_PROXY_TYPES = dict(zip(PROXY_TYPES.values(), PROXY_TYPES.keys())) - -_orgsocket = _orig_socket = socket.socket - - -def set_self_blocking(function): - - @functools.wraps(function) - def wrapper(*args, **kwargs): - self = args[0] - try: - _is_blocking = self.gettimeout() - if _is_blocking == 0: - self.setblocking(True) - return function(*args, **kwargs) - except Exception as e: - raise - finally: - # set orgin blocking - if _is_blocking == 0: - self.setblocking(False) - return wrapper - - -class ProxyError(IOError): - """Socket_err contains original socket.error exception.""" - def __init__(self, msg, socket_err=None): - self.msg = msg - self.socket_err = socket_err - - if socket_err: - self.msg += ": {}".format(socket_err) - - def __str__(self): - return self.msg - - -class GeneralProxyError(ProxyError): - pass - - -class ProxyConnectionError(ProxyError): - pass - - -class SOCKS5AuthError(ProxyError): - pass - - -class SOCKS5Error(ProxyError): - pass - - -class SOCKS4Error(ProxyError): - pass - - -class HTTPError(ProxyError): - pass - -SOCKS4_ERRORS = { - 0x5B: "Request rejected or failed", - 0x5C: ("Request rejected because SOCKS server cannot connect to identd on" - " the client"), - 0x5D: ("Request rejected because the client program and identd report" - " different user-ids") -} - -SOCKS5_ERRORS = { - 0x01: "General SOCKS server failure", - 0x02: "Connection not allowed by ruleset", - 0x03: "Network unreachable", - 0x04: "Host unreachable", - 0x05: "Connection refused", - 0x06: "TTL expired", - 0x07: "Command not supported, or protocol error", - 0x08: "Address type not supported" -} - -DEFAULT_PORTS = {SOCKS4: 1080, SOCKS5: 1080, HTTP: 8080} - - -def set_default_proxy(proxy_type=None, addr=None, port=None, rdns=True, - username=None, password=None): - """Sets a default proxy. - - All further socksocket objects will use the default unless explicitly - changed. All parameters are as for socket.set_proxy().""" - socksocket.default_proxy = (proxy_type, addr, port, rdns, - username.encode() if username else None, - password.encode() if password else None) - - -def setdefaultproxy(*args, **kwargs): - if "proxytype" in kwargs: - kwargs["proxy_type"] = kwargs.pop("proxytype") - return set_default_proxy(*args, **kwargs) - - -def get_default_proxy(): - """Returns the default proxy, set by set_default_proxy.""" - return socksocket.default_proxy - -getdefaultproxy = get_default_proxy - - -def wrap_module(module): - """Attempts to replace a module's socket library with a SOCKS socket. - - Must set a default proxy using set_default_proxy(...) first. This will - only work on modules that import socket directly into the namespace; - most of the Python Standard Library falls into this category.""" - if socksocket.default_proxy: - module.socket.socket = socksocket - else: - raise GeneralProxyError("No default proxy specified") - -wrapmodule = wrap_module - - -def create_connection(dest_pair, - timeout=None, source_address=None, - proxy_type=None, proxy_addr=None, - proxy_port=None, proxy_rdns=True, - proxy_username=None, proxy_password=None, - socket_options=None): - """create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object - - Like socket.create_connection(), but connects to proxy - before returning the socket object. - - dest_pair - 2-tuple of (IP/hostname, port). - **proxy_args - Same args passed to socksocket.set_proxy() if present. - timeout - Optional socket timeout value, in seconds. - source_address - tuple (host, port) for the socket to bind to as its source - address before connecting (only for compatibility) - """ - # Remove IPv6 brackets on the remote address and proxy address. - remote_host, remote_port = dest_pair - if remote_host.startswith("["): - remote_host = remote_host.strip("[]") - if proxy_addr and proxy_addr.startswith("["): - proxy_addr = proxy_addr.strip("[]") - - err = None - - # Allow the SOCKS proxy to be on IPv4 or IPv6 addresses. - for r in socket.getaddrinfo(proxy_addr, proxy_port, 0, socket.SOCK_STREAM): - family, socket_type, proto, canonname, sa = r - sock = None - try: - sock = socksocket(family, socket_type, proto) - - if socket_options: - for opt in socket_options: - sock.setsockopt(*opt) - - if isinstance(timeout, (int, float)): - sock.settimeout(timeout) - - if proxy_type: - sock.set_proxy(proxy_type, proxy_addr, proxy_port, proxy_rdns, - proxy_username, proxy_password) - if source_address: - sock.bind(source_address) - - sock.connect((remote_host, remote_port)) - return sock - - except (socket.error, ProxyError) as e: - err = e - if sock: - sock.close() - sock = None - - if err: - raise err - - raise socket.error("gai returned empty list.") - - -class _BaseSocket(socket.socket): - """Allows Python 2 delegated methods such as send() to be overridden.""" - def __init__(self, *pos, **kw): - _orig_socket.__init__(self, *pos, **kw) - - self._savedmethods = dict() - for name in self._savenames: - self._savedmethods[name] = getattr(self, name) - delattr(self, name) # Allows normal overriding mechanism to work - - _savenames = list() - - -def _makemethod(name): - return lambda self, *pos, **kw: self._savedmethods[name](*pos, **kw) -for name in ("sendto", "send", "recvfrom", "recv"): - method = getattr(_BaseSocket, name, None) - - # Determine if the method is not defined the usual way - # as a function in the class. - # Python 2 uses __slots__, so there are descriptors for each method, - # but they are not functions. - if not isinstance(method, Callable): - _BaseSocket._savenames.append(name) - setattr(_BaseSocket, name, _makemethod(name)) - - -class socksocket(_BaseSocket): - """socksocket([family[, type[, proto]]]) -> socket object - - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET and proto=0. - The "type" argument must be either SOCK_STREAM or SOCK_DGRAM. - """ - - default_proxy = None - - def __init__(self, family=socket.AF_INET, type=socket.SOCK_STREAM, - proto=0, *args, **kwargs): - if type not in (socket.SOCK_STREAM, socket.SOCK_DGRAM): - msg = "Socket type must be stream or datagram, not {!r}" - raise ValueError(msg.format(type)) - - super(socksocket, self).__init__(family, type, proto, *args, **kwargs) - self._proxyconn = None # TCP connection to keep UDP relay alive - - if self.default_proxy: - self.proxy = self.default_proxy - else: - self.proxy = (None, None, None, None, None, None) - self.proxy_sockname = None - self.proxy_peername = None - - self._timeout = None - - def _readall(self, file, count): - """Receive EXACTLY the number of bytes requested from the file object. - - Blocks until the required number of bytes have been received.""" - data = b"" - while len(data) < count: - d = file.read(count - len(data)) - if not d: - raise GeneralProxyError("Connection closed unexpectedly") - data += d - return data - - def settimeout(self, timeout): - self._timeout = timeout - try: - # test if we're connected, if so apply timeout - peer = self.get_proxy_peername() - super(socksocket, self).settimeout(self._timeout) - except socket.error: - pass - - def gettimeout(self): - return self._timeout - - def setblocking(self, v): - if v: - self.settimeout(None) - else: - self.settimeout(0.0) - - def set_proxy(self, proxy_type=None, addr=None, port=None, rdns=True, - username=None, password=None): - """ Sets the proxy to be used. - - proxy_type - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be performed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided.""" - self.proxy = (proxy_type, addr, port, rdns, - username.encode() if username else None, - password.encode() if password else None) - - def setproxy(self, *args, **kwargs): - if "proxytype" in kwargs: - kwargs["proxy_type"] = kwargs.pop("proxytype") - return self.set_proxy(*args, **kwargs) - - def bind(self, *pos, **kw): - """Implements proxy connection for UDP sockets. - - Happens during the bind() phase.""" - (proxy_type, proxy_addr, proxy_port, rdns, username, - password) = self.proxy - if not proxy_type or self.type != socket.SOCK_DGRAM: - return _orig_socket.bind(self, *pos, **kw) - - if self._proxyconn: - raise socket.error(EINVAL, "Socket already bound to an address") - if proxy_type != SOCKS5: - msg = "UDP only supported by SOCKS5 proxy type" - raise socket.error(EOPNOTSUPP, msg) - super(socksocket, self).bind(*pos, **kw) - - # Need to specify actual local port because - # some relays drop packets if a port of zero is specified. - # Avoid specifying host address in case of NAT though. - _, port = self.getsockname() - dst = ("0", port) - - self._proxyconn = _orig_socket() - proxy = self._proxy_addr() - self._proxyconn.connect(proxy) - - UDP_ASSOCIATE = b"\x03" - _, relay = self._SOCKS5_request(self._proxyconn, UDP_ASSOCIATE, dst) - - # The relay is most likely on the same host as the SOCKS proxy, - # but some proxies return a private IP address (10.x.y.z) - host, _ = proxy - _, port = relay - super(socksocket, self).connect((host, port)) - super(socksocket, self).settimeout(self._timeout) - self.proxy_sockname = ("0.0.0.0", 0) # Unknown - - def sendto(self, bytes, *args, **kwargs): - if self.type != socket.SOCK_DGRAM: - return super(socksocket, self).sendto(bytes, *args, **kwargs) - if not self._proxyconn: - self.bind(("", 0)) - - address = args[-1] - flags = args[:-1] - - header = BytesIO() - RSV = b"\x00\x00" - header.write(RSV) - STANDALONE = b"\x00" - header.write(STANDALONE) - self._write_SOCKS5_address(address, header) - - sent = super(socksocket, self).send(header.getvalue() + bytes, *flags, - **kwargs) - return sent - header.tell() - - def send(self, bytes, flags=0, **kwargs): - if self.type == socket.SOCK_DGRAM: - return self.sendto(bytes, flags, self.proxy_peername, **kwargs) - else: - return super(socksocket, self).send(bytes, flags, **kwargs) - - def recvfrom(self, bufsize, flags=0): - if self.type != socket.SOCK_DGRAM: - return super(socksocket, self).recvfrom(bufsize, flags) - if not self._proxyconn: - self.bind(("", 0)) - - buf = BytesIO(super(socksocket, self).recv(bufsize + 1024, flags)) - buf.seek(2, SEEK_CUR) - frag = buf.read(1) - if ord(frag): - raise NotImplementedError("Received UDP packet fragment") - fromhost, fromport = self._read_SOCKS5_address(buf) - - if self.proxy_peername: - peerhost, peerport = self.proxy_peername - if fromhost != peerhost or peerport not in (0, fromport): - raise socket.error(EAGAIN, "Packet filtered") - - return (buf.read(bufsize), (fromhost, fromport)) - - def recv(self, *pos, **kw): - bytes, _ = self.recvfrom(*pos, **kw) - return bytes - - def close(self): - if self._proxyconn: - self._proxyconn.close() - return super(socksocket, self).close() - - def get_proxy_sockname(self): - """Returns the bound IP address and port number at the proxy.""" - return self.proxy_sockname - - getproxysockname = get_proxy_sockname - - def get_proxy_peername(self): - """ - Returns the IP and port number of the proxy. - """ - return self.getpeername() - - getproxypeername = get_proxy_peername - - def get_peername(self): - """Returns the IP address and port number of the destination machine. - - Note: get_proxy_peername returns the proxy.""" - return self.proxy_peername - - getpeername = get_peername - - def _negotiate_SOCKS5(self, *dest_addr): - """Negotiates a stream connection through a SOCKS5 server.""" - CONNECT = b"\x01" - self.proxy_peername, self.proxy_sockname = self._SOCKS5_request( - self, CONNECT, dest_addr) - - def _SOCKS5_request(self, conn, cmd, dst): - """ - Send SOCKS5 request with given command (CMD field) and - address (DST field). Returns resolved DST address that was used. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - writer = conn.makefile("wb") - reader = conn.makefile("rb", 0) # buffering=0 renamed in Python 3 - try: - # First we'll send the authentication packages we support. - if username and password: - # The username/password details were supplied to the - # set_proxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - writer.write(b"\x05\x02\x00\x02") - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - writer.write(b"\x05\x01\x00") - - # We'll receive the server's response to determine which - # method was selected - writer.flush() - chosen_auth = self._readall(reader, 2) - - if chosen_auth[0:1] != b"\x05": - # Note: string[i:i+1] is used because indexing of a bytestring - # via bytestring[i] yields an integer in Python 3 - raise GeneralProxyError( - "SOCKS5 proxy server sent invalid data") - - # Check the chosen authentication method - - if chosen_auth[1:2] == b"\x02": - # Okay, we need to perform a basic username/password - # authentication. - if not (username and password): - # Although we said we don't support authentication, the - # server may still request basic username/password - # authentication - raise SOCKS5AuthError("No username/password supplied. " - "Server requested username/password" - " authentication") - - writer.write(b"\x01" + chr(len(username)).encode() - + username - + chr(len(password)).encode() - + password) - writer.flush() - auth_status = self._readall(reader, 2) - if auth_status[0:1] != b"\x01": - # Bad response - raise GeneralProxyError( - "SOCKS5 proxy server sent invalid data") - if auth_status[1:2] != b"\x00": - # Authentication failed - raise SOCKS5AuthError("SOCKS5 authentication failed") - - # Otherwise, authentication succeeded - - # No authentication is required if 0x00 - elif chosen_auth[1:2] != b"\x00": - # Reaching here is always bad - if chosen_auth[1:2] == b"\xFF": - raise SOCKS5AuthError( - "All offered SOCKS5 authentication methods were" - " rejected") - else: - raise GeneralProxyError( - "SOCKS5 proxy server sent invalid data") - - # Now we can request the actual connection - writer.write(b"\x05" + cmd + b"\x00") - resolved = self._write_SOCKS5_address(dst, writer) - writer.flush() - - # Get the response - resp = self._readall(reader, 3) - if resp[0:1] != b"\x05": - raise GeneralProxyError( - "SOCKS5 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x00: - # Connection failed: server returned an error - error = SOCKS5_ERRORS.get(status, "Unknown error") - raise SOCKS5Error("{:#04x}: {}".format(status, error)) - - # Get the bound address/port - bnd = self._read_SOCKS5_address(reader) - - super(socksocket, self).settimeout(self._timeout) - return (resolved, bnd) - finally: - reader.close() - writer.close() - - def _write_SOCKS5_address(self, addr, file): - """ - Return the host and port packed for the SOCKS5 protocol, - and the resolved address as a tuple object. - """ - host, port = addr - proxy_type, _, _, rdns, username, password = self.proxy - family_to_byte = {socket.AF_INET: b"\x01", socket.AF_INET6: b"\x04"} - - # If the given destination address is an IP address, we'll - # use the IP address request even if remote resolving was specified. - # Detect whether the address is IPv4/6 directly. - for family in (socket.AF_INET, socket.AF_INET6): - try: - addr_bytes = socket.inet_pton(family, host) - file.write(family_to_byte[family] + addr_bytes) - host = socket.inet_ntop(family, addr_bytes) - file.write(struct.pack(">H", port)) - return host, port - except socket.error: - continue - - # Well it's not an IP number, so it's probably a DNS name. - if rdns: - # Resolve remotely - host_bytes = host.encode("idna") - file.write(b"\x03" + chr(len(host_bytes)).encode() + host_bytes) - else: - # Resolve locally - addresses = socket.getaddrinfo(host, port, socket.AF_UNSPEC, - socket.SOCK_STREAM, - socket.IPPROTO_TCP, - socket.AI_ADDRCONFIG) - # We can't really work out what IP is reachable, so just pick the - # first. - target_addr = addresses[0] - family = target_addr[0] - host = target_addr[4][0] - - addr_bytes = socket.inet_pton(family, host) - file.write(family_to_byte[family] + addr_bytes) - host = socket.inet_ntop(family, addr_bytes) - file.write(struct.pack(">H", port)) - return host, port - - def _read_SOCKS5_address(self, file): - atyp = self._readall(file, 1) - if atyp == b"\x01": - addr = socket.inet_ntoa(self._readall(file, 4)) - elif atyp == b"\x03": - length = self._readall(file, 1) - addr = self._readall(file, ord(length)) - elif atyp == b"\x04": - addr = socket.inet_ntop(socket.AF_INET6, self._readall(file, 16)) - else: - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - port = struct.unpack(">H", self._readall(file, 2))[0] - return addr, port - - def _negotiate_SOCKS4(self, dest_addr, dest_port): - """Negotiates a connection through a SOCKS4 server.""" - proxy_type, addr, port, rdns, username, password = self.proxy - - writer = self.makefile("wb") - reader = self.makefile("rb", 0) # buffering=0 renamed in Python 3 - try: - # Check if the destination address provided is an IP address - remote_resolve = False - try: - addr_bytes = socket.inet_aton(dest_addr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if rdns: - addr_bytes = b"\x00\x00\x00\x01" - remote_resolve = True - else: - addr_bytes = socket.inet_aton( - socket.gethostbyname(dest_addr)) - - # Construct the request packet - writer.write(struct.pack(">BBH", 0x04, 0x01, dest_port)) - writer.write(addr_bytes) - - # The username parameter is considered userid for SOCKS4 - if username: - writer.write(username) - writer.write(b"\x00") - - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if remote_resolve: - writer.write(dest_addr.encode("idna") + b"\x00") - writer.flush() - - # Get the response from the server - resp = self._readall(reader, 8) - if resp[0:1] != b"\x00": - # Bad data - raise GeneralProxyError( - "SOCKS4 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x5A: - # Connection failed: server returned an error - error = SOCKS4_ERRORS.get(status, "Unknown error") - raise SOCKS4Error("{:#04x}: {}".format(status, error)) - - # Get the bound address/port - self.proxy_sockname = (socket.inet_ntoa(resp[4:]), - struct.unpack(">H", resp[2:4])[0]) - if remote_resolve: - self.proxy_peername = socket.inet_ntoa(addr_bytes), dest_port - else: - self.proxy_peername = dest_addr, dest_port - finally: - reader.close() - writer.close() - - def _negotiate_HTTP(self, dest_addr, dest_port): - """Negotiates a connection through an HTTP server. - - NOTE: This currently only supports HTTP CONNECT-style proxies.""" - proxy_type, addr, port, rdns, username, password = self.proxy - - # If we need to resolve locally, we do this now - addr = dest_addr if rdns else socket.gethostbyname(dest_addr) - - http_headers = [ - (b"CONNECT " + addr.encode("idna") + b":" - + str(dest_port).encode() + b" HTTP/1.1"), - b"Host: " + dest_addr.encode("idna") - ] - - if username and password: - http_headers.append(b"Proxy-Authorization: basic " - + b64encode(username + b":" + password)) - - http_headers.append(b"\r\n") - - self.sendall(b"\r\n".join(http_headers)) - - # We just need the first line to check if the connection was successful - fobj = self.makefile() - status_line = fobj.readline() - fobj.close() - - if not status_line: - raise GeneralProxyError("Connection closed unexpectedly") - - try: - proto, status_code, status_msg = status_line.split(" ", 2) - except ValueError: - raise GeneralProxyError("HTTP proxy server sent invalid response") - - if not proto.startswith("HTTP/"): - raise GeneralProxyError( - "Proxy server does not appear to be an HTTP proxy") - - try: - status_code = int(status_code) - except ValueError: - raise HTTPError( - "HTTP proxy server did not return a valid HTTP status") - - if status_code != 200: - error = "{}: {}".format(status_code, status_msg) - if status_code in (400, 403, 405): - # It's likely that the HTTP proxy server does not support the - # CONNECT tunneling method - error += ("\n[*] Note: The HTTP proxy server may not be" - " supported by PySocks (must be a CONNECT tunnel" - " proxy)") - raise HTTPError(error) - - self.proxy_sockname = (b"0.0.0.0", 0) - self.proxy_peername = addr, dest_port - - _proxy_negotiators = { - SOCKS4: _negotiate_SOCKS4, - SOCKS5: _negotiate_SOCKS5, - HTTP: _negotiate_HTTP - } - - @set_self_blocking - def connect(self, dest_pair, catch_errors=None): - """ - Connects to the specified destination through a proxy. - Uses the same API as socket's connect(). - To select the proxy server, use set_proxy(). - - dest_pair - 2-tuple of (IP/hostname, port). - """ - if len(dest_pair) != 2 or dest_pair[0].startswith("["): - # Probably IPv6, not supported -- raise an error, and hope - # Happy Eyeballs (RFC6555) makes sure at least the IPv4 - # connection works... - raise socket.error("PySocks doesn't support IPv6: %s" - % str(dest_pair)) - - dest_addr, dest_port = dest_pair - - if self.type == socket.SOCK_DGRAM: - if not self._proxyconn: - self.bind(("", 0)) - dest_addr = socket.gethostbyname(dest_addr) - - # If the host address is INADDR_ANY or similar, reset the peer - # address so that packets are received from any peer - if dest_addr == "0.0.0.0" and not dest_port: - self.proxy_peername = None - else: - self.proxy_peername = (dest_addr, dest_port) - return - - (proxy_type, proxy_addr, proxy_port, rdns, username, - password) = self.proxy - - # Do a minimal input check first - if (not isinstance(dest_pair, (list, tuple)) - or len(dest_pair) != 2 - or not dest_addr - or not isinstance(dest_port, int)): - # Inputs failed, raise an error - raise GeneralProxyError( - "Invalid destination-connection (host, port) pair") - - # We set the timeout here so that we don't hang in connection or during - # negotiation. - super(socksocket, self).settimeout(self._timeout) - - if proxy_type is None: - # Treat like regular socket object - self.proxy_peername = dest_pair - super(socksocket, self).settimeout(self._timeout) - super(socksocket, self).connect((dest_addr, dest_port)) - return - - proxy_addr = self._proxy_addr() - - try: - # Initial connection to proxy server. - super(socksocket, self).connect(proxy_addr) - - except socket.error as error: - # Error while connecting to proxy - self.close() - if not catch_errors: - proxy_addr, proxy_port = proxy_addr - proxy_server = "{}:{}".format(proxy_addr, proxy_port) - printable_type = PRINTABLE_PROXY_TYPES[proxy_type] - - msg = "Error connecting to {} proxy {}".format(printable_type, - proxy_server) - log.debug("%s due to: %s", msg, error) - raise ProxyConnectionError(msg, error) - else: - raise error - - else: - # Connected to proxy server, now negotiate - try: - # Calls negotiate_{SOCKS4, SOCKS5, HTTP} - negotiate = self._proxy_negotiators[proxy_type] - negotiate(self, dest_addr, dest_port) - except socket.error as error: - if not catch_errors: - # Wrap socket errors - self.close() - raise GeneralProxyError("Socket error", error) - else: - raise error - except ProxyError: - # Protocol error while negotiating with proxy - self.close() - raise - - @set_self_blocking - def connect_ex(self, dest_pair): - """ https://docs.python.org/3/library/socket.html#socket.socket.connect_ex - Like connect(address), but return an error indicator instead of raising an exception for errors returned by the C-level connect() call (other problems, such as "host not found" can still raise exceptions). - """ - try: - self.connect(dest_pair, catch_errors=True) - return 0 - except OSError as e: - # If the error is numeric (socket errors are numeric), then return number as - # connect_ex expects. Otherwise raise the error again (socket timeout for example) - if e.errno: - return e.errno - else: - raise - - def _proxy_addr(self): - """ - Return proxy address to connect to as tuple object - """ - (proxy_type, proxy_addr, proxy_port, rdns, username, - password) = self.proxy - proxy_port = proxy_port or DEFAULT_PORTS.get(proxy_type) - if not proxy_port: - raise GeneralProxyError("Invalid proxy type") - return proxy_addr, proxy_port diff --git a/myenv/lib/python3.12/site-packages/sockshandler.py b/myenv/lib/python3.12/site-packages/sockshandler.py deleted file mode 100644 index 6a2ed81..0000000 --- a/myenv/lib/python3.12/site-packages/sockshandler.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python -""" -SocksiPy + urllib2 handler - -version: 0.3 -author: e - -This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket... -""" -import socket -import ssl - -try: - import urllib2 - import httplib -except ImportError: # Python 3 - import urllib.request as urllib2 - import http.client as httplib - -import socks # $ pip install PySocks - -def merge_dict(a, b): - d = a.copy() - d.update(b) - return d - -def is_ip(s): - try: - if ':' in s: - socket.inet_pton(socket.AF_INET6, s) - elif '.' in s: - socket.inet_aton(s) - else: - return False - except: - return False - else: - return True - -socks4_no_rdns = set() - -class SocksiPyConnection(httplib.HTTPConnection): - def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): - self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) - httplib.HTTPConnection.__init__(self, *args, **kwargs) - - def connect(self): - (proxytype, proxyaddr, proxyport, rdns, username, password) = self.proxyargs - rdns = rdns and proxyaddr not in socks4_no_rdns - while True: - try: - sock = socks.create_connection( - (self.host, self.port), self.timeout, None, - proxytype, proxyaddr, proxyport, rdns, username, password, - ((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),)) - break - except socks.SOCKS4Error as e: - if rdns and "0x5b" in str(e) and not is_ip(self.host): - # Maybe a SOCKS4 server that doesn't support remote resolving - # Let's try again - rdns = False - socks4_no_rdns.add(proxyaddr) - else: - raise - self.sock = sock - -class SocksiPyConnectionS(httplib.HTTPSConnection): - def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): - self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) - httplib.HTTPSConnection.__init__(self, *args, **kwargs) - - def connect(self): - SocksiPyConnection.connect(self) - self.sock = self._context.wrap_socket(self.sock, server_hostname=self.host) - if not self._context.check_hostname and self._check_hostname: - try: - ssl.match_hostname(self.sock.getpeercert(), self.host) - except Exception: - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - -class SocksiPyHandler(urllib2.HTTPHandler, urllib2.HTTPSHandler): - def __init__(self, *args, **kwargs): - self.args = args - self.kw = kwargs - urllib2.HTTPHandler.__init__(self) - - def http_open(self, req): - def build(host, port=None, timeout=0, **kwargs): - kw = merge_dict(self.kw, kwargs) - conn = SocksiPyConnection(*self.args, host=host, port=port, timeout=timeout, **kw) - return conn - return self.do_open(build, req) - - def https_open(self, req): - def build(host, port=None, timeout=0, **kwargs): - kw = merge_dict(self.kw, kwargs) - conn = SocksiPyConnectionS(*self.args, host=host, port=port, timeout=timeout, **kw) - return conn - return self.do_open(build, req) - -if __name__ == "__main__": - import sys - try: - port = int(sys.argv[1]) - except (ValueError, IndexError): - port = 9050 - opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, "localhost", port)) - print("HTTP: " + opener.open("http://httpbin.org/ip").read().decode()) - print("HTTPS: " + opener.open("https://httpbin.org/ip").read().decode()) diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/METADATA b/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/METADATA deleted file mode 100644 index 1ec3abd..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/METADATA +++ /dev/null @@ -1,24 +0,0 @@ -Metadata-Version: 2.4 -Name: sp-hydra-veil-core -Version: 2.2.1 -Summary: A library that exposes core logic to higher-level components. -Project-URL: Homepage, https://git.simplifiedprivacy.com/codeking/sp-hydra-veil-core -Project-URL: Issues, https://git.simplifiedprivacy.com/codeking/sp-hydra-veil-core/issues -Author: Simplified Privacy -License-File: LICENSE.txt -Classifier: Operating System :: POSIX :: Linux -Classifier: Programming Language :: Python :: 3 -Requires-Python: >=3.12 -Requires-Dist: cryptography~=46.0.3 -Requires-Dist: dataclasses-json~=0.6.7 -Requires-Dist: marshmallow~=3.26.1 -Requires-Dist: psutil~=7.1.3 -Requires-Dist: pysocks~=1.7.1 -Requires-Dist: python-dateutil~=2.9.0.post0 -Requires-Dist: requests~=2.32.5 -Requires-Dist: stem~=1.8.2 -Description-Content-Type: text/markdown - -# sp-hydra-veil-core - -The `sp-hydra-veil-core` library exposes core logic to higher-level components. diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/RECORD b/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/RECORD deleted file mode 100644 index 8a09c1a..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/RECORD +++ /dev/null @@ -1,105 +0,0 @@ -core/Constants.py,sha256=jQ84JuXljHmgUztGChzbosnj_3VY0SOXMPm17UyUD-A,2579 -core/Errors.py,sha256=vsy5MNEVXyLeO7oov-6-enLY2vXCWWCZTuXN-hvTQjk,1516 -core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -core/__pycache__/Constants.cpython-312.pyc,, -core/__pycache__/Errors.cpython-312.pyc,, -core/__pycache__/__init__.cpython-312.pyc,, -core/controllers/ApplicationController.py,sha256=Ka8XzjpGafxiYDHPwq2kizmkM62yJ7-CPhBeEfctNQg,7276 -core/controllers/ApplicationVersionController.py,sha256=hewSZhNA9gMgd-f7IOG5IutwFrDXuC3TsZz6J2eqNoo,5062 -core/controllers/ClientController.py,sha256=_bjkJ6W54xTkZUrGUk1RD_eYohhD12NgitIhcdHU5vY,4841 -core/controllers/ClientVersionController.py,sha256=lEuqa3ZPU9ER55-qDVd6RKBnjZGYLeOtEzx4N-v9jqw,1171 -core/controllers/ConfigurationController.py,sha256=jlYGfhNlFd3u9XYwdacQwnBH5x1LeYE1Z0xoMGYntX0,2504 -core/controllers/ConnectionController.py,sha256=rojB6KC740KMS1i9in617WMGPblnj41SPlNvybahGK4,24652 -core/controllers/InvoiceController.py,sha256=0yt8NIaSspSvK23Onhtmn2sJMPPGPZ9ThmQGI6VU8pY,2728 -core/controllers/LocationController.py,sha256=qUbnI8SELrHrHi7Lo0ckjTVS0fXVVWpYS41_63jakyY,543 -core/controllers/OperatorController.py,sha256=Wxvb95-LGfH0Nsvnqbtg33m3eu1zHJ4ehY_biLWlKXc,512 -core/controllers/PolicyController.py,sha256=fAjpd5ziQZ9WjA8mGBg6XXnQk_KhZ7S3eKzxPpuQ8Ek,982 -core/controllers/ProfileController.py,sha256=Dg8mYtsCNYeiW_fa3L7Xv1K_rcH0IVr7pQMD5TU8JUM,12531 -core/controllers/SessionStateController.py,sha256=POhNqgAW1p7EaIUsFzGTbA6vTJ64_hO9nKZwVCAAkiE,619 -core/controllers/SubscriptionController.py,sha256=y8zKLEbG1iVcrHJqxJbPknYfhJtjz9uQiOMlk1t_zVg,1147 -core/controllers/SubscriptionPlanController.py,sha256=9CBfnKelOL2C-LRlelRbpB9t8TXRCi1pKThJrf7qH1o,890 -core/controllers/SystemStateController.py,sha256=SGIgPNc81ssaSzd4152SHMWvpZY0hi1fezqvZXl-FQ0,483 -core/controllers/__pycache__/ApplicationController.cpython-312.pyc,, -core/controllers/__pycache__/ApplicationVersionController.cpython-312.pyc,, -core/controllers/__pycache__/ClientController.cpython-312.pyc,, -core/controllers/__pycache__/ClientVersionController.cpython-312.pyc,, -core/controllers/__pycache__/ConfigurationController.cpython-312.pyc,, -core/controllers/__pycache__/ConnectionController.cpython-312.pyc,, -core/controllers/__pycache__/InvoiceController.cpython-312.pyc,, -core/controllers/__pycache__/LocationController.cpython-312.pyc,, -core/controllers/__pycache__/OperatorController.cpython-312.pyc,, -core/controllers/__pycache__/PolicyController.cpython-312.pyc,, -core/controllers/__pycache__/ProfileController.cpython-312.pyc,, -core/controllers/__pycache__/SessionStateController.cpython-312.pyc,, -core/controllers/__pycache__/SubscriptionController.cpython-312.pyc,, -core/controllers/__pycache__/SubscriptionPlanController.cpython-312.pyc,, -core/controllers/__pycache__/SystemStateController.cpython-312.pyc,, -core/models/BaseConnection.py,sha256=Cpm29w06_mnwNiN8KhiWZ7wkxOAy7Xmv07N8Jbwl_08,419 -core/models/BasePolicy.py,sha256=wX6quWyvISY9SJJgiaonSjXQ7iNIck6cGHpGH1CBias,356 -core/models/BaseProfile.py,sha256=BdSpVq2YTk6onBuwLkQjAUGy5G4kQP6fD93_kmtHZo4,6993 -core/models/ClientVersion.py,sha256=oreQNORuk2XD6KdLBNnM5VlkfBl_3FLuCopdpGw4gBo,3002 -core/models/Configuration.py,sha256=6guj6U_Zx4_reeA3SxUsb3U2LNAugFybmt9Pjf-JOkw,2739 -core/models/Event.py,sha256=RwD5zuMu4Wx3Df7hwxgqtSCZOATvenuEURwd_KYagAk,130 -core/models/Location.py,sha256=I37Cop5sZyozy0kgR5mdfU5GcQsBQ-hrVbzZIkSgaJQ,4166 -core/models/Model.py,sha256=8owDEsc4avpC0Tm7jgl0mj-X0KJ7W7K29_hq_TDu4-M,1984 -core/models/Operator.py,sha256=IeUrZb7O3i-Hh7z6GJIkQ4lsU7qwlckwmKkpU0drtHc,2042 -core/models/Subscription.py,sha256=NbFLs_r7pjzR0W9f_iVHyxzTtqu-GQ_rAC0R7fymFLs,1359 -core/models/SubscriptionPlan.py,sha256=ujhjZKmU4FHWUXBkUJEYvV1V76npHMCdsvNWkkKNuXk,3704 -core/models/__pycache__/BaseConnection.cpython-312.pyc,, -core/models/__pycache__/BasePolicy.cpython-312.pyc,, -core/models/__pycache__/BaseProfile.cpython-312.pyc,, -core/models/__pycache__/ClientVersion.cpython-312.pyc,, -core/models/__pycache__/Configuration.cpython-312.pyc,, -core/models/__pycache__/Event.cpython-312.pyc,, -core/models/__pycache__/Location.cpython-312.pyc,, -core/models/__pycache__/Model.cpython-312.pyc,, -core/models/__pycache__/Operator.cpython-312.pyc,, -core/models/__pycache__/Subscription.cpython-312.pyc,, -core/models/__pycache__/SubscriptionPlan.cpython-312.pyc,, -core/models/invoice/Invoice.py,sha256=Nc9USJzt9nLuCey_Yysx9Mmku6RU65Aei2JTfcf_16g,552 -core/models/invoice/PaymentMethod.py,sha256=nVFLmhM9SCV-CvCdIRWw9VswpSwBZ5XPqijE3Jx47i0,184 -core/models/invoice/__pycache__/Invoice.cpython-312.pyc,, -core/models/invoice/__pycache__/PaymentMethod.cpython-312.pyc,, -core/models/policy/CapabilityPolicy.py,sha256=s3nF28Mcu-F4LM5AUIHjWzx8kkwWzg9Wlwfak2AsCU0,4145 -core/models/policy/PrivilegePolicy.py,sha256=Na2HMlTbT-cDES2DADIo9dZHnpG0Lf9K2sl3r1GjjKs,1776 -core/models/policy/__pycache__/CapabilityPolicy.cpython-312.pyc,, -core/models/policy/__pycache__/PrivilegePolicy.cpython-312.pyc,, -core/models/session/Application.py,sha256=fJaewzGSBLStidGKbXLCP-HZ5QIqkZE_hWzOChlFTr4,2292 -core/models/session/ApplicationVersion.py,sha256=2ja0UWNZsNbgOLJBs9bUJ8LoOoz2lH8eOeitX-Kxay0,5210 -core/models/session/NetworkPortNumbers.py,sha256=2wWpHqvhpS6wK1-kjxek9NCtwKbXPes5kHBt2BKXpwc,405 -core/models/session/ProxyConfiguration.py,sha256=NqTRg6hU2qgEbdLXR6-tD4IBRKjqWthbx8pyMF3SxOc,484 -core/models/session/SessionConnection.py,sha256=9mHxqRoPqTiKDrO6jrKWubGHqJBBZQo0BLhRnqfE-B4,485 -core/models/session/SessionProfile.py,sha256=WXI_AQW2wyxLL5RxHm5LYxP4hs1TYGHuj8sFWH6Gpzo,4061 -core/models/session/SessionState.py,sha256=Jxrd6McI4Znl636orSHIPX4-jBgpZX0dSYKtyRG9U_Q,4200 -core/models/session/__pycache__/Application.cpython-312.pyc,, -core/models/session/__pycache__/ApplicationVersion.cpython-312.pyc,, -core/models/session/__pycache__/NetworkPortNumbers.cpython-312.pyc,, -core/models/session/__pycache__/ProxyConfiguration.cpython-312.pyc,, -core/models/session/__pycache__/SessionConnection.cpython-312.pyc,, -core/models/session/__pycache__/SessionProfile.cpython-312.pyc,, -core/models/session/__pycache__/SessionState.cpython-312.pyc,, -core/models/system/SystemConnection.py,sha256=Y_K4KVEleXt-aPeCOd1bsNkK980Y5zRoPMAxE9QKfTE,344 -core/models/system/SystemProfile.py,sha256=UqhKlioL0NPB0Ypol1P4wEGskn8-4l4NnN2rf3Eap28,3496 -core/models/system/SystemState.py,sha256=xl7f0PtSawayop7FBbdB5Gvti6XcfWLE4X2YcBTo8d4,1702 -core/models/system/__pycache__/SystemConnection.cpython-312.pyc,, -core/models/system/__pycache__/SystemProfile.cpython-312.pyc,, -core/models/system/__pycache__/SystemState.cpython-312.pyc,, -core/observers/ApplicationVersionObserver.py,sha256=kaCc20gC1eCBsSjXC75nXrBOSrDXTaAb6j43CVpdd1E,236 -core/observers/BaseObserver.py,sha256=VzJ7fuipMiwLhwzIZjXhQ9P396Eqpn6WdkFXJV39YjY,510 -core/observers/ClientObserver.py,sha256=YB0-qVypLrVOXgeUIBu0zlCUJU8c0KyeSDEY8pK4bIM,285 -core/observers/ConnectionObserver.py,sha256=X01hO4-MEt78DfVzgke51sJB4ZPadxLZqRpdL2p2vPU,276 -core/observers/InvoiceObserver.py,sha256=asQSCBycBioPfNlB2GN80h_S5xm-uZohs9TVNjqropg,210 -core/observers/ProfileObserver.py,sha256=jkM71bs_ipHFHu386o2DPpxTOtBTBaVoD_06hnvwlR8,266 -core/observers/__pycache__/ApplicationVersionObserver.cpython-312.pyc,, -core/observers/__pycache__/BaseObserver.cpython-312.pyc,, -core/observers/__pycache__/ClientObserver.cpython-312.pyc,, -core/observers/__pycache__/ConnectionObserver.cpython-312.pyc,, -core/observers/__pycache__/InvoiceObserver.cpython-312.pyc,, -core/observers/__pycache__/ProfileObserver.cpython-312.pyc,, -core/services/WebServiceApiService.py,sha256=yDl4cJlS9sIgm3NyanqOeMXccJ4U5jVbbUWrBYhNNrg,8699 -core/services/__pycache__/WebServiceApiService.cpython-312.pyc,, -sp_hydra_veil_core-2.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -sp_hydra_veil_core-2.2.1.dist-info/METADATA,sha256=HFkZg0xal0YmcEWD80IgbzKfRtgvG1C1bZENc0BeLOM,896 -sp_hydra_veil_core-2.2.1.dist-info/RECORD,, -sp_hydra_veil_core-2.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87 -sp_hydra_veil_core-2.2.1.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149 diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/WHEEL deleted file mode 100644 index ae8ec1b..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: hatchling 1.28.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/licenses/LICENSE.txt b/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/licenses/LICENSE.txt deleted file mode 100644 index f288702..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_core-2.2.1.dist-info/licenses/LICENSE.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/METADATA b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/METADATA deleted file mode 100644 index 05fc52c..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/METADATA +++ /dev/null @@ -1,24 +0,0 @@ -Metadata-Version: 2.4 -Name: sp-hydra-veil-gui -Version: 2.2.5 -Summary: A graphical user interface that implements core client logic. -Project-URL: Homepage, https://git.simplifiedprivacy.com/codeking/sp-hydra-veil-gui -Project-URL: Issues, https://git.simplifiedprivacy.com/codeking/sp-hydra-veil-gui/issues -Author: Simplified Privacy -License-File: LICENSE.txt -Classifier: Operating System :: POSIX :: Linux -Classifier: Programming Language :: Python :: 3 -Requires-Python: >=3.12 -Requires-Dist: pyperclip~=1.9.0 -Requires-Dist: pyqt6~=6.7.1 -Requires-Dist: qrcode[pil]~=8.2 -Requires-Dist: sp-hydra-veil-core==2.2.1 -Description-Content-Type: text/markdown - -# sp-hydra-veil-gui - -The `sp-hydra-veil-gui` graphical user interface implements the `sp-hydra-veil-core` library. - -# Documentation -Please see the full docs at: -https://docs.simplifiedprivacy.com \ No newline at end of file diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/RECORD b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/RECORD deleted file mode 100644 index 9f4db67..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/RECORD +++ /dev/null @@ -1,234 +0,0 @@ -gui/__main__.py,sha256=mEL0KH18oS5GftwhaKXRk94slSN0tYJFJXRisoorAEM,441016 -gui/__pycache__/__main__.cpython-312.pyc,, -gui/resources/LICENSE.txt,sha256=Gl_cldiRIhmeiTcq7llgFhvzszfDx_MzPnQFhVR5-vE,66 -gui/resources/fonts/open-sans.ttf,sha256=E3RLvAefD0kuT7OxShXSQrjZYA-qzUI9WM35N_6nzms,529700 -gui/resources/fonts/retro-gaming.ttf,sha256=39gnFCEkwPq0uRakxy2_TJGpBpoVCqi-cdBWb21hIGY,31024 -gui/resources/images/1-country.png,sha256=HdXKG2P0HLStJ06TUodSQ5j5layAX67GI4ETthXnArQ,985 -gui/resources/images/1024x760.png,sha256=OPctldWoGMQv_qB9Gud_HAEz5AaiN-aubJHS5-SHg40,12563 -gui/resources/images/1152x1080.png,sha256=XctnnjK95AOjP9rEWHqKXwc_zXaad1Gno_qyBcbniHI,12391 -gui/resources/images/1280x1024.png,sha256=zp4hqPNlwleJuwYmrpVnxZw9vNxx5__5sWLawKHaJfE,12435 -gui/resources/images/1920x1080.png,sha256=LXYLvhaP2242t7_YxdurzdSzCQV8l-xov9HNXrleUU4,7568 -gui/resources/images/400x50_button.png,sha256=rNiVWW_hD7FBCTpVquJmSTiT_sMfCZijsCC6cv7cZ-w,429 -gui/resources/images/540x455.png,sha256=g-QM9EfYxc0sUMup1onhdoplP3uNAdmjtbVfbf4Kr_U,5680 -gui/resources/images/800x600.png,sha256=rbmQFuj6Q1qfkSqZdF9mZKEIQffWH5uVXBC2EAjrgbU,12551 -gui/resources/images/Dark.png,sha256=RI7F4ayheQj7pguTwrhiX_PLMwNM4UrmSueG1SOlsDg,1112 -gui/resources/images/Dark2.png,sha256=pI7Wl5Qglzkw9pmPa82O0lddvK9AZ1PfQd4j3rxT85A,3198 -gui/resources/images/Default.png,sha256=sHLWjAcHp01-3jcjnHL4l9sjeYz70-5zNMz9F9LQXj8,198375 -gui/resources/images/Mesa de trabajo 1.png,sha256=h-vRM4XKdCQ_HbhuZMM_cc9nqY4KrwHH8uuO0lOTc_w,2398 -gui/resources/images/Mesa de trabajo 10.png,sha256=TJMuadf-Ha20OrcgBc-No19cfa9VA4LBYE5h6Mxe0oA,77204 -gui/resources/images/Mesa de trabajo 2.png,sha256=VXb9HDDyYvemW1CwgCnSfkGDEeE1T5jB1PtdeeZUfh4,5829 -gui/resources/images/Mesa de trabajo 4.png,sha256=AZM7ukF_CV6hwPlPRjs_n17YVO--yBC1awBYWQn_7gQ,3139 -gui/resources/images/Mesa de trabajo 8.png,sha256=B-M1F5vklkyT0zgjR7YGHRrxP3MlSmYWRiaNTKFoZq4,3648 -gui/resources/images/UP_button.png,sha256=S8mEHSJPq0wjBUIWA9z-iMkikdh_4OEHcEZpc14gXCc,474 -gui/resources/images/app_off.png,sha256=ptBq_dM4AwZcXnb4G-OmyvJ7PDsrEGddCDJJ7aQTH9I,339 -gui/resources/images/app_on.png,sha256=zJIJbTo51Y6S1cjcwl1x1oeTMi3XxID2tbMoSZCVPjg,3629 -gui/resources/images/apply.png,sha256=2RsiM7AYeGATddz0DUwUOZxlMio6qoHNqdYkCxp6JN4,41319 -gui/resources/images/arch.png,sha256=IAF8M6JviEd7al_P-BRAtcTqSM9pe-BT0s5gDD5BAmA,2447 -gui/resources/images/arrow-down.png,sha256=t-FRb9Nq_-PoTPmjRieDgOctlNFK8S6jHqlI84MYZ44,9483 -gui/resources/images/arrow.png,sha256=FunUE6jroi0nVEduu8ZtkCic-jhy4wHUbnnn_waqB94,351 -gui/resources/images/back.png,sha256=HtlgChw0DjzvgPTxm622jA3pIwxfDmkDutKYDXe8qy4,8125 -gui/resources/images/back_transparente.png,sha256=mXJXXXMHMu0f1bTEVcU6a4HA7jXQYyUbWtq4MqMucO8,7005 -gui/resources/images/backgoud800x600.png,sha256=H4nbXWNy-azxyGe1owx9r1DWyINSe5lWWqn57I8vQrQ,127366 -gui/resources/images/background.png,sha256=P_TQfc9J_deYAV820tYEBiFOS6p02H__hNqtHO4yxuE,529490 -gui/resources/images/background_connected.png,sha256=q8aDHzWs0VGLz1WnH3Zcq_PyDPbcMc3FhE2BK4bskGw,332725 -gui/resources/images/billing_off.png,sha256=YpmeuEa9Ibsbf1zTqQfWwwqdFIG0z3kKqfFpXwif390,254 -gui/resources/images/billing_on.png,sha256=wMZBIYDJd_QjYn27APy3KHh5BQ8a699ScLsZfxS26Pw,2183 -gui/resources/images/bitcoin.png,sha256=yQM47PyPCoMCZupBznvEgU9XuNiZz1SO7fiNesgJKfI,1611 -gui/resources/images/bitcoin_1year.png,sha256=XJ6IfiZ6neDcX_gTnIrZgTLvrjqvX0yqHUzFK57Vzws,2164 -gui/resources/images/bov_off.png,sha256=pa5rtXfSHzDoPrVpzJ-azdk8SvH7UmUyL_v2kT0aNxA,434 -gui/resources/images/bov_on.png,sha256=GR-4DgLl-TABoUCmiWECvQpnxUHFeSZ6igZqqapOmTo,5670 -gui/resources/images/brave latest_mini.png,sha256=A7Zc58eu4_U-KJ-v5gPjn1oJJiLoKgERX4rWij4JVk4,1743 -gui/resources/images/brave_button.png,sha256=XUlhWVi2kSfLTvg3MBlZYlbEp-DDTJcrSWUU8d4oZLc,2913 -gui/resources/images/brave_icon.png,sha256=A2in0WpQOLktYy9yGTOFuCcgFiAW1xqlFg2Aqdbcb70,15015 -gui/resources/images/browser only.png,sha256=Z6OFpKH0DqF9UV8Iu9xYHrDI_uA3I3_5HBwlxUamgko,6199 -gui/resources/images/browser-only.png,sha256=G0Emth71WzrdlIz8ambpsJ2deAw0V0--STBrXuAzD4s,962 -gui/resources/images/browser-only_button.png,sha256=G0Emth71WzrdlIz8ambpsJ2deAw0V0--STBrXuAzD4s,962 -gui/resources/images/browser_just_proxy.png,sha256=N-wWi6lFPxBvC4FBf0_RJzyq3TFzLGrsAmRZay6vheE,13308 -gui/resources/images/browser_tor.png,sha256=xu939PjdZsm_OLiLySUzM6d1PpOprgtaVLWF_1gJxb0,17754 -gui/resources/images/browsers_mini.png,sha256=fs-Zn-cyqCeSsnr3UJ42oJl6zOChCYxelpIsJWUgwE8,3388 -gui/resources/images/button230x220.png,sha256=o3h3T4tgzM3RGYx3h9YgDDDrRt_72YbfTHwAzcqpLrc,622 -gui/resources/images/button_ch_zh.png,sha256=U0pExk_y3GrEtwZ_ZWnE0Am8RmzSPfRIyXPHffgl3zg,5360 -gui/resources/images/button_cl_rm.png,sha256=UDuwtGzKXRLvNxjyIVcj6vhLn3EGPeTmjZhZc06jkzI,5917 -gui/resources/images/button_fi_01.png,sha256=151o_bKbk-DuX-sejzhga1wEMNNQVi0aWK90Ba8CzQE,4247 -gui/resources/images/button_is_1.png,sha256=4LPPpJd0rI_6VSDWtZbIeHoWZRQcvLnKw8jBsi0oVhs,7077 -gui/resources/images/button_md_cu.png,sha256=lsdik6P7ffxLaDwOMGt6aTRnLowQ6_7OQ9EpZykS-9I,4380 -gui/resources/images/button_nl_li.png,sha256=4W6tmfXAJ01NAHlr5mZtupgJL_M-O1aiRE0JSKa3GzU,8697 -gui/resources/images/button_profile.png,sha256=N-Y6GV1SIGzo-40YS2Qa7CBS4RONommQPJRGi6J3kw4,547 -gui/resources/images/button_se_ab.png,sha256=MqwRdY7-Y5sFJQCWg-9uL-METH0dFN1F41CBl8xkkDo,6087 -gui/resources/images/button_session_profile.png,sha256=QJf3aZz2ZVkSJcWSAAckBvNSzM_5wHBH28nTsoz7NeI,433 -gui/resources/images/button_session_tor.png,sha256=Pq69KnU6XLMvxI4p4qFfqzBAmyLjWuvFHgORMZX80Oo,433 -gui/resources/images/button_sg_02.png,sha256=j3rtZTcsAfqkdoRk_a-54QSKj9y2Yncn0SsD1mhWIWo,7928 -gui/resources/images/button_system_profile.png,sha256=9ZjExy1NF5DxtkCndO9eB9wEe-x35wQyOEKF81j93v4,433 -gui/resources/images/button_us_ny.png,sha256=Xddqhy2jeK-1DkbN_fK7HLYLqZaZ5TbWh-vyml8WTwQ,6155 -gui/resources/images/button_us_oh.png,sha256=in7tJZ2n0Gk_Tx3GAnC_0jhtEC5g9KMy3dZ9sryFd3k,7274 -gui/resources/images/button_us_wa.png,sha256=ZZgkTt3SErAssjvjxueBQgbOMDlSskd8kfY_mnfKLe4,8029 -gui/resources/images/check.png,sha256=EZ_bP6dgDHYeJpYgUiEfxvmgF1N2yG4MowQBfs7nOsI,1739 -gui/resources/images/check_icon.png,sha256=Q4wbbcYFKIIcnfzYVXVrTDbepSbKifkTM6ryl-KXYMQ,1305 -gui/resources/images/chromium latest_mini.png,sha256=GM8g94s6q7E2oOOUZ_ebsi7Ig5LIjlGpjBMOaXZk8IU,2252 -gui/resources/images/chromium_button.png,sha256=F-jL7dUp-M_96QoQhSiG8qOxnpM0BPzpkeAWhfWdYAs,3256 -gui/resources/images/chromium_icon.png,sha256=YSWID6bNDIrS_vvqw-oGX2H97FbLpSkkPto1TRqx5nE,10117 -gui/resources/images/connect.png,sha256=jZdm0G9UPfG2uFAKD3n2VaxkhYFrkvQiKvpaFXazInc,31364 -gui/resources/images/create_profile.png,sha256=rKD9U_61B8rSqfUzcFSvBFt2HcPgLSFVhWX_usyka98,841 -gui/resources/images/cuadro150x50.png,sha256=y8kV8pV1kLIbzWjmODqaL-Zz3qh8a3DeNzE0gXxEoyo,375 -gui/resources/images/cuadro400x50.png,sha256=rNiVWW_hD7FBCTpVquJmSTiT_sMfCZijsCC6cv7cZ-w,429 -gui/resources/images/debian.png,sha256=pXrTOcJ4u1ulKDcQ2n7rZb2lPIZ0LUISVMiShQhWMrI,2944 -gui/resources/images/default_browser_button.png,sha256=wH88aYoEh0VDweXqu3RqPFCaMklvlwTPkdY1i7vbXvI,4880 -gui/resources/images/default_browser_mini.png,sha256=S_Ovf69Jxaf5MnpwVONmKhY1hkaSeDANyIiwHxBFfsk,1979 -gui/resources/images/default_location_button.png,sha256=tmY7oA8ku0qgh85i0LZL3h6hdJ6mM4hA-0MoTqKxdxg,2289 -gui/resources/images/default_location_mini.png,sha256=8GHyII2qVJ9TC9n8qKFhN4cSCYvWxvawShHDEUxH5gM,494 -gui/resources/images/delete_profile.png,sha256=ryKKiOsUmmbMjWRcZq1hhSEINPd6w5JQITglsp93GgQ,2226 -gui/resources/images/disconnect.png,sha256=J3SdnERmUjtg9Ai2YUu3S7hwsR-QKoPOQNAWTtz5ECA,1828 -gui/resources/images/disconnect_system_wide.png,sha256=-uCo8aX99HSfdbvR1R9VK5kYUx0WGLfYYd7-s5wXkSI,1846 -gui/resources/images/disconnected.png,sha256=Mwr4WJXOgKlpWrNGYRPz1t3klLpXLFlWI3e8xUsqOxI,774 -gui/resources/images/edit_profile.png,sha256=ruueaknjcvExUmz3JUfRhiGVtDuvpzXG3gz-vki1Dik,802 -gui/resources/images/editv.png,sha256=j3VV9OILgsgSs5e0DtA6OPdod3mDapIkUqAU9Ey-QAI,808 -gui/resources/images/eeuu garaje.png,sha256=PFyT2z8BklS97KP3OVzpprbCuGNhZsRpLKQgOnlddPI,16272 -gui/resources/images/eeuu_button.png,sha256=NmTtkkM0IsWLpTHNZXUwxQ1OWucsboXcrs4pKbR5goo,2103 -gui/resources/images/eeuu_mini.png,sha256=5RvcD9LVqICUa88IY_7qOP3OSL2sRSQHfHaxoIydI9g,1153 -gui/resources/images/fedora.png,sha256=Q7v8A0GazqRwHiA1v-fl_LJOzl43GOATUGFAgnw9WxE,2885 -gui/resources/images/firefox latest_mini.png,sha256=ce6g8VZYdVGbNFHJEuKONVMN0zPkxfncz7bv9A5qj7I,3910 -gui/resources/images/firefox_button.png,sha256=WvwmY4QbExxZxhgmRT05tNdcyLwGOix0Oe9MZ3Mw5yU,5621 -gui/resources/images/firefox_icon.png,sha256=IIK-70tLYLOmmUqET_C3bV_PRsNAaPD7c_jB2zFZ5J4,52763 -gui/resources/images/global-acces.png,sha256=SZW9Z2otW8GAVcEuHhmokJfjwPjnft23qqmM3PHLJBM,996 -gui/resources/images/hdtor_is_1.png,sha256=VGtlBrzfVSqkzXaFvLO42N6Keff5YOyDdhso8GT313k,119874 -gui/resources/images/hdtor_md_cu.png,sha256=6nKj595NvlQRs04JrA8i0HaEnuv_H5F-aME_j1qm_28,43311 -gui/resources/images/hdtor_mini_md_cu.png,sha256=o2VD6W6HQ-VAjFmK1PeaEQJ-vydGaD-DXEttrgxM-uk,3698 -gui/resources/images/hdtor_mini_nl_li.png,sha256=wEaEU5RlcWh5IayzNo4XHQoDeW3fyEYtfoP3bAinRvw,3756 -gui/resources/images/hdtor_mini_us_oh.png,sha256=pWqJIZCoIkarpP2gzt76cM1G3Vg6E67HNNHHa-SjVaE,3710 -gui/resources/images/hdtor_nl_li.png,sha256=bKsE-OcCJnY3cmOO2sQnujmHCjf4yOlcWy7-kkf0Sxg,137694 -gui/resources/images/hdtor_sg_02.png,sha256=YTZLbweCHPfY_KV03eZTZibwPY8B6_esEZeUdj6W_As,166423 -gui/resources/images/hdtor_us_ny.png,sha256=dvpsbuGS_EofHSFcM6eugGCE0ZIgiu1-9GL9BXEgAic,123396 -gui/resources/images/hdtor_us_oh.png,sha256=NFUReQOLGJLLiUP9I_DUOL0_ABavvGBe82I69_WCwLU,151420 -gui/resources/images/hdtor_us_wa.png,sha256=CBrqY4cetgQUAxZrOGfwusGbYW4UH9oqoJ0agqO1ipg,160283 -gui/resources/images/hidetor.png,sha256=jCmrn85TNgVy6AlpCVRuPrRHPBjxYzzKDspTuOIxyYQ,24690 -gui/resources/images/hidetor_button.png,sha256=aHltlUwomfFX0WEfD7poz9THT3rJpE92qpOjbJeGaoU,4825 -gui/resources/images/hong kong garaje.png,sha256=iIBZ95QGcOZiGcSJzq_7jUc_5KRRK5akrrzlG83s5bE,26492 -gui/resources/images/hong kong_button.png,sha256=QyUBl44lGROFAHrZ0C_Po9RmkU38eCK3Vc5joLxN0bE,1660 -gui/resources/images/hong kong_mini.png,sha256=4QFuvgUWLaB9mmOlSUlzkgSSDjR046nKpmj111oWCq8,772 -gui/resources/images/hv-icon-128x128.png,sha256=T7JYKO2alCHIAmiFsVfE7k2ebkPOo167X98oabkhYyY,33448 -gui/resources/images/hv-icon-16x16.png,sha256=tLkwlvI4apGYkRNGA_hfs7NvoVutRAo058-rZhsH2t8,924 -gui/resources/images/hv-icon-22x22.png,sha256=UyX1brtZdZs5uxXxO_Qx2x9VMmeVVmNehO_MehnX8rw,1500 -gui/resources/images/hv-icon-24x24.png,sha256=YqHq996EIWW1rAFosWePnpZ9-1Kh6bEbS6QwfFTcdAQ,1716 -gui/resources/images/hv-icon-256x256.png,sha256=OvsLor-1iaVGldQXw9yOwsjZ-yujXNDy4aQSJyWpiK8,99452 -gui/resources/images/hv-icon-32x32.png,sha256=27ZAoXZXTwq3fjU3Q3_ABsoJWQ4n8BbXzvTcl9X1DHQ,2815 -gui/resources/images/hv-icon-48x48.png,sha256=mABb1mc7pS3XBmSYomj0KROuEyXUXfPOcTHIbqxwbNI,5575 -gui/resources/images/hv-icon-64x64.png,sha256=aH7vqfSAefVypqXwnmt411_TINClFTh-Gl0Xlr9QJpY,9037 -gui/resources/images/icon-linux.png,sha256=71qW6zOviRHuu3ZOxbXo1JpEkirK9s8uzOsDf6RCMwo,2961 -gui/resources/images/icon_ch_zh.png,sha256=pFhi4UkYQqoQhy2G7nlaGcGQTFmnBBaixbAyVyYHXYw,56892 -gui/resources/images/icon_cl_rm.png,sha256=JU7r0Ir1zzTKahz_eqE22ARAjJqKiIszw2Wd8ulbW4U,10318 -gui/resources/images/icon_fi_01.png,sha256=8w_dCrZQvauIXFM7_g7Qo7otuBqPcf2sLcWpm2KxgXw,45774 -gui/resources/images/icon_is_1.png,sha256=o3kkbCQ5EJwwhnjtyK-FoFe4jkwNqQD3D3RbUHwbsGU,56083 -gui/resources/images/icon_md_cu.png,sha256=jppp0sN-l6dp1qAZ9hU-kKkgJTzSiQ7lG6XQPzApAjQ,36039 -gui/resources/images/icon_mini_ch_zh.png,sha256=cKlQGifrUGGRHS74C41g0WVC5JUn5t07VFXzDTjXxjg,3672 -gui/resources/images/icon_mini_cl_rm.png,sha256=BtobrqhsomjWeIkBnG4luoDCb5DDZYrUmUOC2lof8ek,1622 -gui/resources/images/icon_mini_fi_01.png,sha256=s3bS3zbYhGZjiyZSJC1--QBlXhoe_OGVCOh96OVZYGc,2800 -gui/resources/images/icon_mini_is_1.png,sha256=VUYNXjvDg2vIEI9eemhlcM_lZ_QHEFULUKEnRdpaB9U,3246 -gui/resources/images/icon_mini_md_cu.png,sha256=OauglXg_GyxbzS3KS2GdBhdk-oX3YSSnWYl4rLGmGwo,2464 -gui/resources/images/icon_mini_nl_li.png,sha256=tzHIabA_GRAO5blSFcHg0abC4b5whdHHebiMKylmRpA,5129 -gui/resources/images/icon_mini_se_ab.png,sha256=j6es8dpvOqJPf_lkxhoG-h2gGavoifQGlaVCoTsSFPk,3302 -gui/resources/images/icon_mini_sg_02.png,sha256=SYQfoN7jfl3lX4u_bwphLWoEP7A3MZ1Rm_RY1jckT-Q,6568 -gui/resources/images/icon_mini_us_ny.png,sha256=yy23wFV44bNo-DYRxNjcucL8U4oQZhccKCbM43oNBEU,3336 -gui/resources/images/icon_mini_us_oh.png,sha256=7AfAdgrChiSBVxkMCDrxUU50Z21IDrSWBdb70gFSH_I,3985 -gui/resources/images/icon_mini_us_wa.png,sha256=_t9Ia88m2khZUC8YjThMyZBqu73Nqcu0IZHoODhrKl4,4306 -gui/resources/images/icon_nl_li.png,sha256=Qcxx98E571mb2-f0S5Dw3xuYk7rkdj48hbk2TaqWZ14,88595 -gui/resources/images/icon_se_ab.png,sha256=ESRlr4ZUQOhn485LeCqAr3t2URP22mJ7XkM4QBm5Nq0,283488 -gui/resources/images/icon_sg_02.png,sha256=TZBUdTSuJQQIQmJDdunPvUZXHYu0oJWzAqehTKEL-uk,37841 -gui/resources/images/icon_sync.png,sha256=cMhCNXGgIwQaND7QaWA_x3qBBc4Aele-606SgCAZLCs,1472 -gui/resources/images/icon_sync_urgent.png,sha256=4vdSuoTU-fRegIyT5vPrWaGDOIebW0CwAL22s-pra4g,1877 -gui/resources/images/icon_us_ny.png,sha256=6q4z1wVUL9tR_hBI0Jg8-cacOLkpxOEfrRW9NSYs2MI,39295 -gui/resources/images/icon_us_oh.png,sha256=iS8xcsL3uvYRDLnaMzNJ8WKgOJvFcMZhxS6b6NCtc14,105491 -gui/resources/images/icon_us_wa.png,sha256=SpVCF-HWVi8fuCIOSHt4Brc_Sj9i5ccxMOuWrizbuGw,52266 -gui/resources/images/install.png,sha256=aGJXeB-VjyVbi3VUmh5-Oblv9evz7NFzjQ0iTCJsQJY,1622 -gui/resources/images/just proxy_button.png,sha256=F67uR4RNBEJ51DMiE83nSNHM9ca9ZljrvEzM_eVC7ng,914 -gui/resources/images/just proxy_mini.png,sha256=0HaEVcehejI4kD0OIevmXvNQ7IOjXs4gJQB7Abms51g,1806 -gui/resources/images/just.png,sha256=tlv6FpZ89yARH4_v9E2HuCwCE6sTelpPBMmkqPzGGLY,2149 -gui/resources/images/just_session.png,sha256=j-FMm-ipIYEri71T5ymQc1Rfd7CLNDAUDS0oXLBpbBU,1799 -gui/resources/images/launch.png,sha256=FUw-Nit1zF-13veJzIHKytmcHvaklK9dJqCYU-PZDQE,3556 -gui/resources/images/left.png,sha256=sSj5s3mNL-P3K9OUd2sfGVyPdg4Bp5dcVgiZFov5rjw,504 -gui/resources/images/librewolf latest_mini.png,sha256=ri_y-1X8kqTqXi_--p3rmz6n2FOqs5MJr7gUT8pGYUo,1968 -gui/resources/images/librewolf_button.png,sha256=z4s4MokSDh4IakYZLnaDyTeoleVQxN6EXGexMTr8GrQ,3206 -gui/resources/images/librewolf_icon.png,sha256=uY2T_K-HAUU43h_5dq7IOn3GevuDfj06dZzAP7gRXuw,10109 -gui/resources/images/lightnering.png,sha256=AhD8UsyCMx9s7wyFkStyk5tu9bfkG_TAOz9VJbm_Uk8,2693 -gui/resources/images/linux.png,sha256=f5HSzP3YpWYRJPjwyCxz6AMEcyr4bxcILs_AG8Jcf_A,7293 -gui/resources/images/litecoin.png,sha256=RIjjzVLGqH7Pe9TZPBMFHnf3R2sct8feuQaJaJgjn94,1581 -gui/resources/images/los angeles.png,sha256=AAIreXsqcRDHlpJw-pzHsNr4AxaltcCGqhGvyhw0xaA,37880 -gui/resources/images/los angeles_button.png,sha256=8NqkZcJE5ihqa8Hstd15xV5BN7SA00YRudGEcTzfbWE,5319 -gui/resources/images/los angeles_mini.png,sha256=wfKgJeEigPlR4iVdPgZspxTQyrfHlt35ChNh5_d-oHA,3940 -gui/resources/images/marco_miniatura.png,sha256=-UtHc3q9BpsFnEJQ83R0ryfmKUPlr6pgsJ4U3Samwtc,342 -gui/resources/images/monero.png,sha256=5pi7qFX5fXxH3Ts53FkMDm_B2YBoXohD1osYRk8UTLk,1729 -gui/resources/images/new york_button.png,sha256=xvEAeOsnO6nVX7G19kvpPJHgGkPt4OBh3uXi_ptR_wE,5754 -gui/resources/images/new_id.png,sha256=6740NhxmwCLv_JqkBWOEY0tUhUuJll8-PKPjdhVwWcg,1058 -gui/resources/images/next.png,sha256=KkYYG95Si5efFvnEoaW58E4X-z2rtAQsuZzxlYedBI0,9138 -gui/resources/images/noe.png,sha256=qdskcUtGmc7UGGM8Wn0_KvXJkNcKuE_3c1Y2uTZsAP0,1198 -gui/resources/images/off.png,sha256=uuBDpYvzC27GaZBhVyx038NKghBemolgmxI8G9lIRG0,221 -gui/resources/images/ohio.png,sha256=NFUReQOLGJLLiUP9I_DUOL0_ABavvGBe82I69_WCwLU,151420 -gui/resources/images/on.png,sha256=gcQpLQsHQpBQQ-0CQRfPpUegq8E9wdGMJrm7hOlfPuA,221 -gui/resources/images/original.png,sha256=wAQiXmXkeAxQebzbo73MAwOQ1oJ2YamQhyLYSPtTyBk,114435 -gui/resources/images/paste_button.png,sha256=RbEN1JptQmVeiWw2q61PhQwaTB-G3w6tdqSiCj4K4jU,2497 -gui/resources/images/port.png,sha256=9w7IoyhrJvSCh9jhh4ZJzPEEuxdDCIMQGtfjaf1X4bI,742 -gui/resources/images/port2.png,sha256=UxjIwQ8dLV9tMlj5NLS3tvfVuSlfwPsy38AymiFEgTM,742 -gui/resources/images/qr-code.png,sha256=sBi8gRRihPr5fuBZn39jMOHmU1vu1oASawnPmaD1FyU,267 -gui/resources/images/r.png,sha256=vdiGKbXnaeiqkTzkokWmKqykqesLQmRfA4ViO08EBnw,504 -gui/resources/images/r1.png,sha256=pr89t1PbE3R8dWn2ZHg0Lrl4yPDdMBLxG55TUyjl2eY,450 -gui/resources/images/r2.png,sha256=0XlMd3GZmTiUw-0I8L5g-ykhJ2QUzhh5ErJ7Qkn0-gU,446 -gui/resources/images/r4.png,sha256=iAwPtmLhobkutNXkXTBqqPu46L4Hsf5ZKtZxRkdZvHM,436 -gui/resources/images/rb_off.png,sha256=oFFWpqUU43L7W8c_pjCtdm0_RidM5PcZDMc34bn_LH8,415 -gui/resources/images/rb_on.png,sha256=KuTzUY8BZQORXaB1Emz2uGN7mtm1WSJjOT2054TbjwI,5074 -gui/resources/images/residential tor_mini.png,sha256=AgMX3pMW_vt0_7eVr1dPAtUVh9I6WeAl8EwgEcWp518,3020 -gui/resources/images/residential.png,sha256=F_DXljoQTsX8SxXALQggj0_8KN-WeqtPbH_3MBuQ5PI,9668 -gui/resources/images/residential_button.png,sha256=oADyiKSkelW6laKEvOmfh5FYRMjOPAPkNLrCiqfmqOA,3516 -gui/resources/images/residential_mini.png,sha256=-JmRuS0mahBP8TkfsNFoIGbjONXde2OiwT6a60Ophwc,2007 -gui/resources/images/resolution_template.png,sha256=9qY1812PRsYkCvMQq9US_aLc4tSRFCaXrkQR47xGr_o,44933 -gui/resources/images/resolution_template_button.png,sha256=agYBhl4_al23V2ShbX1OZLtRfS5MR1rHwGMkOZTeiwI,1228 -gui/resources/images/right.png,sha256=y2UzMOQCw1r7DYTwfryR5uyXyJkL7eK_vwS6uk4z1DU,550 -gui/resources/images/rp.png,sha256=oOSln3n2mWzMY8SWh2pmeTT4hqwB8OXPXpIv4ti_spg,9440 -gui/resources/images/rp_off.png,sha256=oYohnEHcW_8SpSHcEeP6Etdc5gGWhewVulcynDOt4ho,395 -gui/resources/images/rp_on.png,sha256=97PwylrWHuBidSARnESUWqKS_BYqP2WK_n5A4gTlHTw,5414 -gui/resources/images/rr1.png,sha256=c1fAg1b93coV4GvMu7kFDx0QhJPbvTNhEOQTeP-gzB4,360 -gui/resources/images/rr2.png,sha256=8T7QBgcNzXLnaxSrPCp0GvsTLVqtovdANB3y8Xygqnc,320 -gui/resources/images/rr3.png,sha256=v9yt444DUvbs8venzGTiVpj2jPHrn5S9u6ZhELqbcPk,323 -gui/resources/images/save.png,sha256=XsuqAf-a7hyNZ4cCnJkrnKLGXrSSScfMgywG6SJSQzU,13232 -gui/resources/images/sett.png,sha256=_7_dtzlP3WU78o-tsyxuvOxVdR0PWYpzIn2KEsT-u5o,1592 -gui/resources/images/settings.png,sha256=sY9wjMYOzfb1AQqmub2AHDaBpr7KdsGMTDpGqUFkX8k,1535 -gui/resources/images/settings_icon.png,sha256=mBODigySq9t06fSYvvdV6XSPXbBeX_MXM-D3jROEE_Q,9597 -gui/resources/images/sync_button.png,sha256=Dj_5cY65vsecICS3Ui-dg6KQJoQYuo816vc6_NvDntc,26460 -gui/resources/images/system-wide.png,sha256=W_59yDSo4OvwXl2zJOWUJXWqlGftvoaSn28o17cY_EU,1000 -gui/resources/images/system-wide_button.png,sha256=W_59yDSo4OvwXl2zJOWUJXWqlGftvoaSn28o17cY_EU,1000 -gui/resources/images/system_wide_global.png,sha256=5AxVeZNMV2QvufzbgdZt9waLlNvDgFdrJf4Nj_1LBSM,464384 -gui/resources/images/tapa_miniatura.png,sha256=R1X1GC9FxSJZ-mZjSBfxy72UR0uoVU2ch_AMckiuk3Q,271 -gui/resources/images/tor 86x130.png,sha256=kl9y0DvGanCIuiCrs_kryhGSBbF4jmlOIrJYDQvSQNs,3149 -gui/resources/images/tor_button.png,sha256=yUcQNljYT_BgxK08xeOHwiwKo-jiWSVYXpWA4dOtlYQ,3429 -gui/resources/images/tor_sync.png,sha256=Dwp0XxG5EMBqn0dhnPoiWJJJFxYrKBXrbvxhSWsr1Hw,26363 -gui/resources/images/torgrande.png,sha256=AcexAPnPpUX04bHnyWhVbpnDt9RteHoS34MwyfZxGX0,97818 -gui/resources/images/toricon_mini.png,sha256=iz2uvnELDAuFJANd0J9rxI0HNNtNqLBQD79rCL_9n4g,1968 -gui/resources/images/toricon_mini_false.png,sha256=k2Cn7ESclD-mfpkiM_owCdM2aA6dt9ykcba7XuVESZg,3550 -gui/resources/images/torx.png,sha256=YcQJffApjMWfbU_b7ST81Ge4EpV4HpmBoslBGm7yF_o,352196 -gui/resources/images/united kingdom garaje.png,sha256=AE5DbkH3VBzp3FVYAL78idb9K_Uz_7JxQpscUBnut7A,35798 -gui/resources/images/united kingdom_button.png,sha256=kYxsD7lL2I9YbkMTdIlmvHFuA3DjkKDNrT7ioEvleQo,2039 -gui/resources/images/united kingdom_mini.png,sha256=b2gspZTewj9n1J1qC8YftfbN-YzmsBFR8kXox8TxT2k,1029 -gui/resources/images/unsupported_browser_only.png,sha256=05WqF__Uzd60YFSg-ieifqOXFkQCfX27WeY3LAJUxsA,25935 -gui/resources/images/verification_icon.png,sha256=pv2KAFIfSybd_HYKBbiTlZwtfyPbIUcXNmzacFmqq8U,1271 -gui/resources/images/verified_profile.png,sha256=T0MH-7ZhOi4zNn6ozMtvqsdhCSzMnzSwLRiwjBTctz0,110254 -gui/resources/images/warning.png,sha256=vyaP8gw8Y-Gqua3IsFCIbbXhq31bF0Spn7aNLOUGohY,351 -gui/resources/images/windows.png,sha256=weLUGixYngAz0Opbmb4FZjaMvZiwwTAuhm-ZUP0eLEQ,5091 -gui/resources/images/windowsx.png,sha256=siNrn0Ce7R97vmCUJWHsBxXtATaNJYXlYRDnUCGRcyQ,20150 -gui/resources/images/wireguard.png,sha256=eqCTTZxW-4XIM9MTbrBMk55sAPbYM7uY2_TP0TukOHo,121258 -gui/resources/images/wireguard_browser.png,sha256=yyhcYiWt3WZOX8ZYgKuwRDK2Qwr_zQrrhTCv2e8LYYo,106104 -gui/resources/images/wireguard_button.png,sha256=WILfzCDRZ0tkOyMZIDWeTza6cvh3Vz7eETgqn7lgldI,2110 -gui/resources/images/wireguard_ch_zh.png,sha256=HCG5xa7nMj6cB50hIRCxcv1LqEciZUkAiOlYWQSXfaI,120861 -gui/resources/images/wireguard_fi_01.png,sha256=rGQ8CB8NtJHVf8PvCCUqOuzZdhPS4LYjP1Mkdnu7-hs,120884 -gui/resources/images/wireguard_is_1.png,sha256=chmQ6zAS5aRf6tgN_zBYtf64unEsrZr1AQSOaJYizBs,120108 -gui/resources/images/wireguard_mini.png,sha256=CIiHKOxxpj-txLBkNYRBOycMP1zIXfjP9mDCvx1RN8Q,884 -gui/resources/images/wireguard_nl_li.png,sha256=wGmkMC5n3TR1kk81kz5ZvNZ3syDg5v1tyJXkO5fYzU8,121108 -gui/resources/images/wireguard_system_wide.png,sha256=R5xEs1XhLMvuyglF9RBnh_KrSpIUodlTHq9EdwPRl-E,282 -gui/resources/images/wireguard_us_ny.png,sha256=BHvKz4Z9zHqzYNZOjwab8tMQoIebrIq2YLWXBRc-J9M,132789 -gui/resources/images/wireguard_us_oh.png,sha256=dF6E9eohyen7JP513UhIN-E3TETkX421fItpc_Mo_v4,119837 -gui/resources/images/wireguard_us_wa.png,sha256=g3gNzXSFlS4hU38yxr5TPfO4X9khNRAICa5juNTAR4E,119907 -gui/resources/styles/look.css,sha256=rxN1mEb7jOcp2yOaW1WsbZBDRhdagnzVaStMLHfETow,1608 -sp_hydra_veil_gui-2.2.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -sp_hydra_veil_gui-2.2.5.dist-info/METADATA,sha256=hAyMX7_Gn78r3W29NiOq8469OoPcSbwKjsRzbvKB3hg,848 -sp_hydra_veil_gui-2.2.5.dist-info/RECORD,, -sp_hydra_veil_gui-2.2.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -sp_hydra_veil_gui-2.2.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87 -sp_hydra_veil_gui-2.2.5.dist-info/direct_url.json,sha256=oVucfc3DkXPsHKxOtkQI7SC4CHc9u3quJlWLbi_-Zug,71 -sp_hydra_veil_gui-2.2.5.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149 diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/REQUESTED b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/WHEEL deleted file mode 100644 index 12228d4..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: hatchling 1.27.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/direct_url.json b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/direct_url.json deleted file mode 100644 index e6bda51..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/direct_url.json +++ /dev/null @@ -1 +0,0 @@ -{"dir_info": {}, "url": "file:///home/teg/Documents/sp-hydra-veil-gui"} \ No newline at end of file diff --git a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/licenses/LICENSE.txt b/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/licenses/LICENSE.txt deleted file mode 100644 index f288702..0000000 --- a/myenv/lib/python3.12/site-packages/sp_hydra_veil_gui-2.2.5.dist-info/licenses/LICENSE.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/LICENSE deleted file mode 100644 index 65c5ca8..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/METADATA b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/METADATA deleted file mode 100644 index 274320b..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/METADATA +++ /dev/null @@ -1,42 +0,0 @@ -Metadata-Version: 2.2 -Name: stem -Version: 1.8.2 -Summary: Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/). -Home-page: https://stem.torproject.org/ -Author: Damian Johnson -Author-email: atagar@torproject.org -License: LGPLv3 -Keywords: tor onion controller -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) -Classifier: Topic :: Security -Classifier: Topic :: Software Development :: Libraries :: Python Modules -License-File: LICENSE -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: home-page -Dynamic: keywords -Dynamic: license -Dynamic: summary - -For tutorials and API documentation see `Stem's homepage `_. - -Quick Start ------------ - -To install you can either use... - -:: - - pip install stem - -... or install from the source tarball. Stem supports both the python 2.x and 3.x series. To use its python3 counterpart you simply need to install using that version of python. - -:: - - python3 setup.py install - -After that, give some `tutorials `_ a try! For questions or to discuss project ideas we're available on `irc `_ and the `tor-dev@ email list `_. diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/RECORD b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/RECORD deleted file mode 100644 index fb34294..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/RECORD +++ /dev/null @@ -1,122 +0,0 @@ -../../../bin/tor-prompt,sha256=rvab-XokiF1PdMTrP4so0q0WcozJBeb1FmR4lUCMAU8,238 -stem-1.8.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -stem-1.8.2.dist-info/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651 -stem-1.8.2.dist-info/METADATA,sha256=lZXhnX0EpdmDVWjvYlpUgRIOmz2ey_VUZV5Cl1IkbuE,1469 -stem-1.8.2.dist-info/RECORD,, -stem-1.8.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 -stem-1.8.2.dist-info/top_level.txt,sha256=_Fv_hT3iFjDmFwOMcKq7iIsbarreb2UO1-H2frEcwHU,5 -stem/__init__.py,sha256=pW_54gj0qZuPyY3DJyCXGPF_sRiGVMRzYsBW6eEBuFQ,31179 -stem/__pycache__/__init__.cpython-312.pyc,, -stem/__pycache__/connection.cpython-312.pyc,, -stem/__pycache__/control.cpython-312.pyc,, -stem/__pycache__/directory.cpython-312.pyc,, -stem/__pycache__/exit_policy.cpython-312.pyc,, -stem/__pycache__/manual.cpython-312.pyc,, -stem/__pycache__/prereq.cpython-312.pyc,, -stem/__pycache__/process.cpython-312.pyc,, -stem/__pycache__/socket.cpython-312.pyc,, -stem/__pycache__/version.cpython-312.pyc,, -stem/cached_fallbacks.cfg,sha256=GQS9oLT2ItPCKn87Nd3c74qtE8-hovPy_3_yfWS26dg,53271 -stem/cached_manual.sqlite,sha256=kWJSuaursQj1n1OP_pQ4HWJyMC11ig2yQGPmAOGkhP8,252928 -stem/client/__init__.py,sha256=CESilzl6Z5MDOHAk5Qr0q2Q9ZRdy6J01mOR9qBzuSGs,13458 -stem/client/__pycache__/__init__.cpython-312.pyc,, -stem/client/__pycache__/cell.cpython-312.pyc,, -stem/client/__pycache__/datatype.cpython-312.pyc,, -stem/client/cell.py,sha256=jVXug2FaSHd-Z2HMEP-FN24LrFttwaNIk6Z8solTAXs,27325 -stem/client/datatype.py,sha256=QPyA0erAo50E48U65NX9yF_eXS47r7Em2JBxDrj-4UY,24590 -stem/connection.py,sha256=_g-0SJeKgVsXS6EQZUs_m9iNOg5-iNhEzudYEQTYTUA,48103 -stem/control.py,sha256=mUNdYHI6PMYu5PDOryw8OlUZNOceN4trIjjCOFtMEF0,150722 -stem/descriptor/__init__.py,sha256=puFgzzSXz81pM4Jalt-v-YIWxqZyfuD0g9jO5Crsq1E,56638 -stem/descriptor/__pycache__/__init__.cpython-312.pyc,, -stem/descriptor/__pycache__/bandwidth_file.cpython-312.pyc,, -stem/descriptor/__pycache__/certificate.cpython-312.pyc,, -stem/descriptor/__pycache__/collector.cpython-312.pyc,, -stem/descriptor/__pycache__/export.cpython-312.pyc,, -stem/descriptor/__pycache__/extrainfo_descriptor.cpython-312.pyc,, -stem/descriptor/__pycache__/hidden_service.cpython-312.pyc,, -stem/descriptor/__pycache__/hidden_service_descriptor.cpython-312.pyc,, -stem/descriptor/__pycache__/microdescriptor.cpython-312.pyc,, -stem/descriptor/__pycache__/networkstatus.cpython-312.pyc,, -stem/descriptor/__pycache__/reader.cpython-312.pyc,, -stem/descriptor/__pycache__/remote.cpython-312.pyc,, -stem/descriptor/__pycache__/router_status_entry.cpython-312.pyc,, -stem/descriptor/__pycache__/server_descriptor.cpython-312.pyc,, -stem/descriptor/__pycache__/tordnsel.cpython-312.pyc,, -stem/descriptor/bandwidth_file.py,sha256=FBv9P0Qk-eHZiiGhGHGninkx0UmsQKvajAUNgz-OsuY,11716 -stem/descriptor/certificate.py,sha256=VM2ZkR9M8JIZ41JaAJVuc7Oh4CX_JtSZwmkrVAnVgkk,16870 -stem/descriptor/collector.py,sha256=My5au8bRis4bdscMPcm7rcEGuJ9uhsYxtf1l8UQs4ck,27093 -stem/descriptor/export.py,sha256=NdqysNBm0FZ-i6ll-JLXEWEOVFLl3lVL9041fASDem0,4164 -stem/descriptor/extrainfo_descriptor.py,sha256=3zGgRIsM0NKkNx6QdhU5q7iQjKuzMuHVj6aLCT34BlM,44571 -stem/descriptor/hidden_service.py,sha256=fJ3BlHwBBvoh77zk5cy9YQwCcKEAnDamW4S6Gs4fFr0,57269 -stem/descriptor/hidden_service_descriptor.py,sha256=K-KC47K5Y2F7GrkGesmyc3e13FIAPecxHMsBooLC6Fc,177 -stem/descriptor/microdescriptor.py,sha256=ahbpers5fm_jrplVo8GF161hyZzTpjAdKfAUw0JyLZQ,11789 -stem/descriptor/networkstatus.py,sha256=NMD87OFsqc8jFsk_NX5GRsoi_RGD4O0zdNl7zt-vXQU,80291 -stem/descriptor/reader.py,sha256=xm9AHGxF0wnarF2k_e1oBr9znFrYbElemMzk-9xu_BI,19115 -stem/descriptor/remote.py,sha256=PiE08ZOadomL9MAnvlFC6q3MtzFHilKrqnRSX_7oF7U,41668 -stem/descriptor/router_status_entry.py,sha256=_U4baXfBvsh6c_f-eAlde8trr-c2nOPHkQIDTbaTcgs,24878 -stem/descriptor/server_descriptor.py,sha256=9iVnK3RT_lXMc6UtR9gCs-SsyF2JK8WqEe7Mb1e4qbQ,44449 -stem/descriptor/tordnsel.py,sha256=FbTyprGQ9SqEYclvFXdCAK4QBpig46RIabr-IZIW7sk,3984 -stem/directory.py,sha256=z5dPZ65hIeabsSylVxEOCRT9KKslAcaO5u2mJLWEidk,23420 -stem/exit_policy.py,sha256=uR0sE53oZPP58G8RmGiaXksEbDFMfPYp7Ve8jcltWmA,35614 -stem/interpreter/__init__.py,sha256=mCWrfEx2QDbbzxbjTp2w2Qg_7lpvQA5AROm0w-fIKC4,6073 -stem/interpreter/__pycache__/__init__.cpython-312.pyc,, -stem/interpreter/__pycache__/arguments.cpython-312.pyc,, -stem/interpreter/__pycache__/autocomplete.cpython-312.pyc,, -stem/interpreter/__pycache__/commands.cpython-312.pyc,, -stem/interpreter/__pycache__/help.cpython-312.pyc,, -stem/interpreter/arguments.py,sha256=ZCX7EVrlKySnZrxUHODBOq61_d16fFg2e2nFoHNHVLw,2805 -stem/interpreter/autocomplete.py,sha256=PmUZhbSnzBri8BhNT2H99B12cDEcdIRI6R1rf-J2hNo,3043 -stem/interpreter/commands.py,sha256=m327Yf8am-zCbuS8y7nOiDbhQ3D0ixjmyIbi4DE_1DY,12139 -stem/interpreter/help.py,sha256=JL8cvzaBy3JgLnC-WWaFydFhLWj2fhr-FZJA44HzqT4,3779 -stem/interpreter/settings.cfg,sha256=6Dhkz91p5H7Eya6CSbM6XHumupE-dKk6WupIhrXELgg,12385 -stem/manual.py,sha256=UelMmqmX9WOh2R8qmfvd9qYKFce6TnIHhL-kOcfPMyc,28499 -stem/prereq.py,sha256=iyzVLnt4VqQwtZkAuF5iyKtUHDfle_mNpQDfH-Um7WA,8331 -stem/process.py,sha256=u_lihA11ZePEG7ZVg2Xwt93UPtL0FXijFAaL3gLmdm0,10072 -stem/response/__init__.py,sha256=ThEhYM7HshnwjkWbyvGsyvggH2ZKo17pCFZTk_jpCfQ,18948 -stem/response/__pycache__/__init__.cpython-312.pyc,, -stem/response/__pycache__/add_onion.cpython-312.pyc,, -stem/response/__pycache__/authchallenge.cpython-312.pyc,, -stem/response/__pycache__/events.cpython-312.pyc,, -stem/response/__pycache__/getconf.cpython-312.pyc,, -stem/response/__pycache__/getinfo.cpython-312.pyc,, -stem/response/__pycache__/mapaddress.cpython-312.pyc,, -stem/response/__pycache__/protocolinfo.cpython-312.pyc,, -stem/response/add_onion.py,sha256=htHmJN61MzfKVdiNwkWE7aZXSGyuI6FBdLHQ2WCdplw,1841 -stem/response/authchallenge.py,sha256=RuKi59UTJC1ZNSIwQ6fKHiwt7iNLGzuBUW22IBW12Q0,1914 -stem/response/events.py,sha256=fvl0uP9ugVWRNdGN8O_61Nw3SY-6pR6ZayijE_rhLYw,51201 -stem/response/getconf.py,sha256=_VgEDQY4sdu0G8hkNBUAibiW4Kex2N2y61WxBa_3l6o,1895 -stem/response/getinfo.py,sha256=0ujJ9LT8PvuBdGctIuEAzelYHGekzeyxHbaNDtVUTco,2796 -stem/response/mapaddress.py,sha256=0jNFe0abUlLu7ERNLp-6VBM7eTP5G-prlxjkjFxducM,1326 -stem/response/protocolinfo.py,sha256=RTH405DJer4b19UQ5fB-hDwf2m06lpHrtGy0a8vbR64,5367 -stem/settings.cfg,sha256=_hWzq7ID0DYI6tAp4Gtx4Mj7O4EBoXAjjnRdjIO0bDc,31986 -stem/socket.py,sha256=Z5vtsa3yegTCG6FP2dva0gLOOUl5aGCnqLI7U9GJ6kM,25306 -stem/util/__init__.py,sha256=fbtwPAfqSn0wzAbQc3fcg1W5H-TXrWoVDLpm13caYKM,5432 -stem/util/__pycache__/__init__.cpython-312.pyc,, -stem/util/__pycache__/conf.cpython-312.pyc,, -stem/util/__pycache__/connection.cpython-312.pyc,, -stem/util/__pycache__/ed25519.cpython-312.pyc,, -stem/util/__pycache__/enum.cpython-312.pyc,, -stem/util/__pycache__/log.cpython-312.pyc,, -stem/util/__pycache__/lru_cache.cpython-312.pyc,, -stem/util/__pycache__/ordereddict.cpython-312.pyc,, -stem/util/__pycache__/proc.cpython-312.pyc,, -stem/util/__pycache__/str_tools.cpython-312.pyc,, -stem/util/__pycache__/system.cpython-312.pyc,, -stem/util/__pycache__/term.cpython-312.pyc,, -stem/util/__pycache__/test_tools.cpython-312.pyc,, -stem/util/__pycache__/tor_tools.cpython-312.pyc,, -stem/util/conf.py,sha256=EAEsu-iFJeILi8xZm3HRtlrkYlS9bw0IM1iHYnbHdAE,25137 -stem/util/connection.py,sha256=FhkXBBQmHsjsCZfI32-LAbJC0qol1Mh5Ma8UxnTMj8s,25414 -stem/util/ed25519.py,sha256=RVfODHo8hhcjjUdwqE4bGhwqLsoqxgPRxHVanPa7GH0,7531 -stem/util/enum.py,sha256=ENet_mmvoVC5rCs9LUoCbHPwZyl0PqTGt-fcAfQ5HZA,4364 -stem/util/log.py,sha256=dIno0iLqO2r6mDQ4ZK1coof5YyC5W1MnyY2r6B6dsrc,7596 -stem/util/lru_cache.py,sha256=32QZigCWWn_oLNRoG2aJcvItbhdPCRmmfB2DFRN93lk,7373 -stem/util/ordereddict.py,sha256=mCbA-4DQY9D80nnGQWOQ7c7BqnEQarR_FxvTFF4KGv8,3959 -stem/util/ports.cfg,sha256=aasC2Ur_W0lFjjmDGNgK92UihU5rHXMi84a0EkeycDA,6152 -stem/util/proc.py,sha256=ukL2piWSEqY9ielAu-R2w996y9nwAoq-Vl5_iaFIQ1E,17690 -stem/util/str_tools.py,sha256=C0KqL-8HXbAf716n2wpsBVADL2AVYTghq47Tjt_LYCo,17243 -stem/util/system.py,sha256=w_gVDIezNb8LefygwLuTIyYjTj7yk4743jRIUDnA7wE,42954 -stem/util/term.py,sha256=pauKgxsuZmWMR3PbzN2nuLmcZRIMZ0SSb0AAhkiVrYo,4774 -stem/util/test_tools.py,sha256=uKTx3abl_lgW_-2MuH98MeV3s8ajFZpVno2f-PkDBaE,20551 -stem/util/tor_tools.py,sha256=JOIyLqJgXRTS1HLJclsyQowdd2nhEVwi5-iQ87rT3qY,5233 -stem/version.py,sha256=_rfs9eMWmn6sBiQfGL8Qg4KxxtnD02fCRWZ2CB2LT3E,14989 diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/WHEEL deleted file mode 100644 index 505164b..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.8.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/top_level.txt deleted file mode 100644 index e63e524..0000000 --- a/myenv/lib/python3.12/site-packages/stem-1.8.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -stem diff --git a/myenv/lib/python3.12/site-packages/stem/__init__.py b/myenv/lib/python3.12/site-packages/stem/__init__.py deleted file mode 100644 index 00eafc5..0000000 --- a/myenv/lib/python3.12/site-packages/stem/__init__.py +++ /dev/null @@ -1,1032 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Library for working with the tor process. - -**Module Overview:** - -:: - - Endpoint - Networking endpoint. - |- ORPort - Tor relay endpoint. - +- DirPort - Descriptor mirror. - - ControllerError - Base exception raised when using the controller. - |- ProtocolError - Malformed socket data. - | - |- OperationFailed - Tor was unable to successfully complete the operation. - | |- UnsatisfiableRequest - Tor was unable to satisfy a valid request. - | | |- CircuitExtensionFailed - Attempt to make or extend a circuit failed. - | | |- DescriptorUnavailable - The given relay descriptor is unavailable. - | | +- Timeout - Caller requested timeout was reached. - | | - | | - | +- InvalidRequest - Invalid request. - | +- InvalidArguments - Invalid request parameters. - | - +- SocketError - Communication with the socket failed. - +- SocketClosed - Socket has been shut down. - - DownloadFailed - Inability to download a resource. - +- DownloadTimeout - Download timeout reached. - -.. data:: Runlevel (enum) - - Rating of importance used for event logging. - - =========== =========== - Runlevel Description - =========== =========== - **ERR** critical issues that impair tor's ability to function - **WARN** non-critical issues the user should be aware of - **NOTICE** information that may be helpful to the user - **INFO** high level runtime information - **DEBUG** low level runtime information - =========== =========== - -.. data:: Signal (enum) - - Signals that the tor process will accept. - - .. versionchanged:: 1.3.0 - Added the HEARTBEAT signal. - - .. versionchanged:: 1.8.0 - Added the ACTIVE and DORMANT signals. You can check for Tor support for - these signals with the **DORMANT_MODE** :data:`~stem.version.Requirement` - - ========================= =========== - Signal Description - ========================= =========== - **RELOAD** or **HUP** reloads our torrc - **SHUTDOWN** or **INT** shut down, waiting ShutdownWaitLength first if we're a relay - **DUMP** or **USR1** dumps information about open connections and circuits to our log - **DEBUG** or **USR2** switch our logging to the DEBUG runlevel - **HALT** or **TERM** exit tor immediately - **NEWNYM** switch to new circuits, so new application requests don't share any circuits with old ones (this also clears our DNS cache) - **CLEARDNSCACHE** clears cached DNS results - **HEARTBEAT** trigger a heartbeat log message - **DORMANT** enables *dormant mode*, during which tor will avoid cpu and network usage - **ACTIVE** disables *dormant mode* - ========================= =========== - -.. data:: Flag (enum) - - Flag assigned to tor relays by the authorities to indicate various - characteristics. - - **Note:** The BADDIRECTORY flag was `removed from tor `_. - - .. versionchanged:: 1.5.0 - Added the NO_ED_CONSENSUS flag. - - .. versionchanged:: 1.8.0 - Added the STALE_DESC flag. - - =================== =========== - Flag Description - =================== =========== - **AUTHORITY** relay is a directory authority - **BADEXIT** relay shouldn't be used as an exit due to being either problematic or malicious - **BADDIRECTORY** relay shouldn't be used for directory information - **EXIT** relay's exit policy makes it more useful as an exit rather than middle hop - **FAST** relay's suitable for high-bandwidth circuits - **GUARD** relay's suitable for being an entry guard (first hop) - **HSDIR** relay is being used as a v2 hidden service directory - **NAMED** relay can be referred to by its nickname - **NO_ED_CONSENSUS** relay's Ed25519 doesn't reflrect the consensus - **RUNNING** relay is currently usable - **STABLE** relay's suitable for long-lived circuits - **STALE_DESC** relay descriptor is outdated and should be re-uploaded - **UNNAMED** relay isn't currently bound to a nickname - **V2DIR** relay supports the v2 directory protocol - **VALID** relay has been validated - =================== =========== - -.. data:: CircStatus (enum) - - Statuses that a circuit can be in. Tor may provide statuses not in this enum. - - .. versionchanged:: 1.6.0 - Added the GUARD_WAIT signal. - - ============== =========== - CircStatus Description - ============== =========== - **LAUNCHED** new circuit was created - **BUILT** circuit finished being created and can accept traffic - **GUARD_WAIT** waiting to see if there's a circuit with a better guard before using - **EXTENDED** circuit has been extended by a hop - **FAILED** circuit construction failed - **CLOSED** circuit has been closed - ============== =========== - -.. data:: CircBuildFlag (enum) - - Attributes about how a circuit is built. These were introduced in tor version - 0.2.3.11. Tor may provide flags not in this enum. - - ================= =========== - CircBuildFlag Description - ================= =========== - **ONEHOP_TUNNEL** single hop circuit to fetch directory information - **IS_INTERNAL** circuit that won't be used for client traffic - **NEED_CAPACITY** circuit only includes high capacity relays - **NEED_UPTIME** circuit only includes relays with a high uptime - ================= =========== - -.. data:: CircPurpose (enum) - - Description of what a circuit is intended for. These were introduced in tor - version 0.2.1.6. Tor may provide purposes not in this enum. - - ==================== =========== - CircPurpose Description - ==================== =========== - **GENERAL** client traffic or fetching directory information - **HS_CLIENT_INTRO** client side introduction point for a hidden service circuit - **HS_CLIENT_REND** client side hidden service rendezvous circuit - **HS_SERVICE_INTRO** server side introduction point for a hidden service circuit - **HS_SERVICE_REND** server side hidden service rendezvous circuit - **TESTING** testing to see if we're reachable, so we can be used as a relay - **CONTROLLER** circuit that was built by a controller - **MEASURE_TIMEOUT** circuit being kept around to see how long it takes - ==================== =========== - -.. data:: CircClosureReason (enum) - - Reason that a circuit is being closed or failed to be established. Tor may - provide reasons not in this enum. - - ========================= =========== - CircClosureReason Description - ========================= =========== - **NONE** no reason given - **TORPROTOCOL** violation in the tor protocol - **INTERNAL** internal error - **REQUESTED** requested by the client via a TRUNCATE command - **HIBERNATING** relay is currently hibernating - **RESOURCELIMIT** relay is out of memory, sockets, or circuit IDs - **CONNECTFAILED** unable to contact the relay - **OR_IDENTITY** relay had the wrong OR identification - **OR_CONN_CLOSED** connection failed after being established - **FINISHED** circuit has expired (see tor's MaxCircuitDirtiness config option) - **TIMEOUT** circuit construction timed out - **DESTROYED** circuit unexpectedly closed - **NOPATH** not enough relays to make a circuit - **NOSUCHSERVICE** requested hidden service does not exist - **MEASUREMENT_EXPIRED** same as **TIMEOUT** except that it was left open for measurement purposes - ========================= =========== - -.. data:: CircEvent (enum) - - Type of change reflected in a circuit by a CIRC_MINOR event. Tor may provide - event types not in this enum. - - ===================== =========== - CircEvent Description - ===================== =========== - **PURPOSE_CHANGED** circuit purpose or hidden service state has changed - **CANNIBALIZED** circuit connections are being reused for a different circuit - ===================== =========== - -.. data:: HiddenServiceState (enum) - - State that a hidden service circuit can have. These were introduced in tor - version 0.2.3.11. Tor may provide states not in this enum. - - Enumerations fall into four groups based on their prefix... - - ======= =========== - Prefix Description - ======= =========== - HSCI_* client-side introduction-point - HSCR_* client-side rendezvous-point - HSSI_* service-side introduction-point - HSSR_* service-side rendezvous-point - ======= =========== - - ============================= =========== - HiddenServiceState Description - ============================= =========== - **HSCI_CONNECTING** connecting to the introductory point - **HSCI_INTRO_SENT** sent INTRODUCE1 and awaiting a reply - **HSCI_DONE** received a reply, circuit is closing - **HSCR_CONNECTING** connecting to the introductory point - **HSCR_ESTABLISHED_IDLE** rendezvous-point established, awaiting an introduction - **HSCR_ESTABLISHED_WAITING** introduction received, awaiting a rend - **HSCR_JOINED** connected to the hidden service - **HSSI_CONNECTING** connecting to the introductory point - **HSSI_ESTABLISHED** established introductory point - **HSSR_CONNECTING** connecting to the introductory point - **HSSR_JOINED** connected to the rendezvous-point - ============================= =========== - -.. data:: RelayEndReason (enum) - - Reasons why the stream is to be closed. - - =================== =========== - RelayEndReason Description - =================== =========== - **MISC** none of the following reasons - **RESOLVEFAILED** unable to resolve the hostname - **CONNECTREFUSED** remote host refused the connection - **EXITPOLICY** OR refuses to connect to the destination - **DESTROY** circuit is being shut down - **DONE** connection has been closed - **TIMEOUT** connection timed out - **NOROUTE** routing error while contacting the destination - **HIBERNATING** relay is temporarily hibernating - **INTERNAL** internal error at the relay - **RESOURCELIMIT** relay has insufficient resources to service the request - **CONNRESET** connection was unexpectedly reset - **TORPROTOCOL** violation in the tor protocol - **NOTDIRECTORY** directory information requested from a relay that isn't mirroring it - =================== =========== - -.. data:: StreamStatus (enum) - - State that a stream going through tor can have. Tor may provide states not in - this enum. - - ================= =========== - StreamStatus Description - ================= =========== - **NEW** request for a new connection - **NEWRESOLVE** request to resolve an address - **REMAP** address is being re-mapped to another - **SENTCONNECT** sent a connect cell along a circuit - **SENTRESOLVE** sent a resolve cell along a circuit - **SUCCEEDED** stream has been established - **FAILED** stream is detached, and won't be re-established - **DETACHED** stream is detached, but might be re-established - **CLOSED** stream has closed - ================= =========== - -.. data:: StreamClosureReason (enum) - - Reason that a stream is being closed or failed to be established. This - includes all values in the :data:`~stem.RelayEndReason` enumeration as - well as the following. Tor may provide reasons not in this enum. - - ===================== =========== - StreamClosureReason Description - ===================== =========== - **END** endpoint has sent a RELAY_END cell - **PRIVATE_ADDR** endpoint was a private address (127.0.0.1, 10.0.0.1, etc) - ===================== =========== - -.. data:: StreamSource (enum) - - Cause of a stream being remapped to another address. Tor may provide sources - not in this enum. - - ============= =========== - StreamSource Description - ============= =========== - **CACHE** tor is remapping because of a cached answer - **EXIT** exit relay requested the remap - ============= =========== - -.. data:: StreamPurpose (enum) - - Purpsoe of the stream. This is only provided with new streams and tor may - provide purposes not in this enum. - - ================= =========== - StreamPurpose Description - ================= =========== - **DIR_FETCH** fetching directory information (descriptors, consensus, etc) - **DIR_UPLOAD** uploading our descriptor to an authority - **DNS_REQUEST** user initiated DNS request - **DIRPORT_TEST** checking that our directory port is reachable externally - **USER** either relaying user traffic or not one of the above categories - ================= =========== - -.. data:: ORStatus (enum) - - State that an OR connection can have. Tor may provide states not in this - enum. - - =============== =========== - ORStatus Description - =============== =========== - **NEW** received OR connection, starting server-side handshake - **LAUNCHED** launched outbound OR connection, starting client-side handshake - **CONNECTED** OR connection has been established - **FAILED** attempt to establish OR connection failed - **CLOSED** OR connection has been closed - =============== =========== - -.. data:: ORClosureReason (enum) - - Reason that an OR connection is being closed or failed to be established. Tor - may provide reasons not in this enum. - - =================== =========== - ORClosureReason Description - =================== =========== - **DONE** OR connection shut down cleanly - **CONNECTREFUSED** got a ECONNREFUSED when connecting to the relay - **IDENTITY** identity of the relay wasn't what we expected - **CONNECTRESET** got a ECONNRESET or similar error from relay - **TIMEOUT** got a ETIMEOUT or similar error from relay - **NOROUTE** got a ENOTCONN, ENETUNREACH, ENETDOWN, EHOSTUNREACH, or similar error from relay - **IOERROR** got a different kind of error from relay - **RESOURCELIMIT** relay has insufficient resources to service the request - **MISC** connection refused for another reason - **PT_MISSING** no pluggable transport was available - =================== =========== - -.. data:: AuthDescriptorAction (enum) - - Actions that directory authorities might take with relay descriptors. Tor may - provide reasons not in this enum. - - ===================== =========== - AuthDescriptorAction Description - ===================== =========== - **ACCEPTED** accepting the descriptor as the newest version - **DROPPED** descriptor rejected without notifying the relay - **REJECTED** relay notified that its descriptor has been rejected - ===================== =========== - -.. data:: StatusType (enum) - - Sources for tor status events. Tor may provide types not in this enum. - - ============= =========== - StatusType Description - ============= =========== - **GENERAL** general tor activity, not specifically as a client or relay - **CLIENT** related to our activity as a tor client - **SERVER** related to our activity as a tor relay - ============= =========== - -.. data:: GuardType (enum) - - Use a guard relay can be for. Tor may provide types not in this enum. - - =========== =========== - GuardType Description - =========== =========== - **ENTRY** used to connect to the tor network - =========== =========== - -.. data:: GuardStatus (enum) - - Status a guard relay can have. Tor may provide types not in this enum. - - ============= =========== - GuardStatus Description - ============= =========== - **NEW** new guard that we weren't previously using - **DROPPED** removed from use as one of our guards - **UP** guard is now reachable - **DOWN** guard is now unreachable - **BAD** consensus or relay considers this relay to be unusable as a guard - **GOOD** consensus or relay considers this relay to be usable as a guard - ============= =========== - -.. data:: TimeoutSetType (enum) - - Way in which the timeout value of a circuit is changing. Tor may provide - types not in this enum. - - =============== =========== - TimeoutSetType Description - =============== =========== - **COMPUTED** tor has computed a new timeout based on prior circuits - **RESET** timeout reverted to its default - **SUSPENDED** timeout reverted to its default until network connectivity has recovered - **DISCARD** throwing out timeout value from when the network was down - **RESUME** resumed calculations to determine the proper timeout - =============== =========== - -.. data:: ConnectionType (enum) - - Purpose for a tor connection. Tor may provide types not in this enum. - - The meaning behind these values is a bit unclear, pending :trac:`10086`. - - .. versionadded:: 1.2.0 - - =============== =========== - ConnectionType Description - =============== =========== - **OR** carrying traffic within the tor network - **DIR** fetching or sending tor descriptor data - **EXIT** carrying traffic between the tor network and an external destination - =============== =========== - -.. data:: TokenBucket (enum) - - Bucket categories of TB_EMPTY events. - - .. versionadded:: 1.2.0 - - =============== =========== - TokenBucket Description - =============== =========== - **GLOBAL** global token bucket - **RELAY** relay token bucket - **ORCONN** bucket used for OR connections - =============== =========== - -.. data:: HSDescAction (enum) - - Action beeing taken in a HS_DESC event. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.4.0 - Added the UPLOAD and UPLOADED actions. - - .. versionchanged:: 1.5.0 - Added the CREATED action. - - =============== =========== - HSDescAction Description - =============== =========== - **REQUESTED** uncached hidden service descriptor is being requested - **UPLOAD** descriptor is being uploaded with HSPOST - **RECEIVED** hidden service descriptor has been retrieved - **UPLOADED** descriptor was uploaded with HSPOST - **IGNORE** fetched descriptor was ignored because we already have its v0 descriptor - **FAILED** we were unable to retrieve the descriptor - **CREATED** hidden service descriptor was just created - =============== =========== - -.. data:: HSDescReason (enum) - - Reason for the hidden service descriptor to fail to be fetched. - - .. versionadded:: 1.3.0 - - .. versionchanged:: 1.4.0 - Added the UPLOAD_REJECTED reason. - - .. versionchanged:: 1.6.0 - Added the QUERY_NO_HSDIR reason. - - .. versionchanged:: 1.8.0 - Added the QUERY_RATE_LIMITED reason. - - ======================= =========== - HSDescReason Description - ======================= =========== - **BAD_DESC** descriptor was unparseable - **QUERY_REJECTED** hidden service directory refused to provide the descriptor - **UPLOAD_REJECTED** descriptor was rejected by the hidden service directory - **NOT_FOUND** descriptor with the given identifier wasn't found - **QUERY_NO_HSDIR** no hidden service directory was found - **QUERY_RATE_LIMITED** request was throttled - **UNEXPECTED** failure type is unknown - ======================= =========== - -.. data:: HSAuth (enum) - - Type of authentication being used for a HS_DESC event. - - .. versionadded:: 1.2.0 - - ================= =========== - HSAuth Description - ================= =========== - **NO_AUTH** no authentication - **BASIC_AUTH** general hidden service authentication - **STEALTH_AUTH** authentication method that hides service activity from unauthorized clients - **UNKNOWN** unrecognized method of authentication - ================= =========== -""" - -import traceback - -import stem.util -import stem.util.enum - -__version__ = '1.8.2' -__author__ = 'Damian Johnson' -__contact__ = 'atagar@torproject.org' -__url__ = 'https://stem.torproject.org/' -__license__ = 'LGPLv3' - -__all__ = [ - 'client', - 'descriptor', - 'response', - 'util', - 'connection', - 'control', - 'directory', - 'exit_policy', - 'prereq', - 'process', - 'socket', - 'version', - 'ControllerError', - 'ProtocolError', - 'OperationFailed', - 'UnsatisfiableRequest', - 'CircuitExtensionFailed', - 'DescriptorUnavailable', - 'Timeout', - 'InvalidRequest', - 'InvalidArguments', - 'SocketError', - 'SocketClosed', - 'DownloadFailed', - 'DownloadTimeout', - 'Runlevel', - 'Signal', - 'Flag', - 'CircStatus', - 'CircBuildFlag', - 'CircPurpose', - 'CircClosureReason', - 'CircEvent', - 'HiddenServiceState', - 'HSAuth', - 'HSDescAction', - 'HSDescReason', - 'RelayEndReason', - 'StreamStatus', - 'StreamClosureReason', - 'StreamSource', - 'StreamPurpose', - 'ORStatus', - 'ORClosureReason', - 'AuthDescriptorAction', - 'StatusType', - 'GuardType', - 'GuardStatus', - 'TimeoutSetType', -] - -# Constant that we use by default for our User-Agent when downloading descriptors -stem.USER_AGENT = 'Stem/%s' % __version__ - -# Constant to indicate an undefined argument default. Usually we'd use None for -# this, but users will commonly provide None as the argument so need something -# else fairly unique... - -UNDEFINED = '' - - -class Endpoint(object): - """ - Tor endpint that can be connected to. - - .. versionadded:: 1.7.0 - - :var str address: ip address of the endpoint - :var int port: port of the endpoint - """ - - def __init__(self, address, port): - if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address): - raise ValueError("'%s' isn't a valid IPv4 or IPv6 address" % address) - elif not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' isn't a valid port" % port) - - self.address = address - self.port = int(port) - - def __hash__(self): - return stem.util._hash_attr(self, 'address', 'port', cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Endpoint) else False - - def __ne__(self, other): - return not self == other - - -class ORPort(Endpoint): - """ - Tor relay's ORPort. The endpoint on which Tor accepts relay traffic. - - :var list link_protocols: link protocol version we're willing to establish - """ - - def __init__(self, address, port, link_protocols = None): - super(ORPort, self).__init__(address, port) - self.link_protocols = link_protocols - - def __hash__(self): - return stem.util._hash_attr(self, 'link_protocols', parent = Endpoint, cache = True) - - -class DirPort(Endpoint): - """ - Tor relay's DirPort. The endpoint on which Tor provides http access for - downloading descriptors. - """ - - -class ControllerError(Exception): - 'Base error for controller communication issues.' - - -class ProtocolError(ControllerError): - 'Malformed content from the control socket.' - - -class OperationFailed(ControllerError): - """ - Base exception class for failed operations that return an error code - - :var str code: error code returned by Tor - :var str message: error message returned by Tor or a human readable error - message - """ - - def __init__(self, code = None, message = None): - super(ControllerError, self).__init__(message) - self.code = code - self.message = message - - -class UnsatisfiableRequest(OperationFailed): - """ - Exception raised if Tor was unable to process our request. - """ - - -class CircuitExtensionFailed(UnsatisfiableRequest): - """ - An attempt to create or extend a circuit failed. - - :var stem.response.CircuitEvent circ: response notifying us of the failure - """ - - def __init__(self, message, circ = None): - super(CircuitExtensionFailed, self).__init__(message = message) - self.circ = circ - - -class DescriptorUnavailable(UnsatisfiableRequest): - """ - Tor was unable to provide a descriptor for the given relay. - - .. versionchanged:: 1.7.0 - Subclassed under UnsatisfiableRequest rather than OperationFailed. - """ - - def __init__(self, message): - super(DescriptorUnavailable, self).__init__(message = message) - - -class Timeout(UnsatisfiableRequest): - """ - Timeout requested by the caller was reached. - - .. versionadded:: 1.7.0 - """ - - def __init__(self, message): - super(Timeout, self).__init__(message = message) - - -class InvalidRequest(OperationFailed): - """ - Exception raised when the request was invalid or malformed. - """ - - -class InvalidArguments(InvalidRequest): - """ - Exception class for requests which had invalid arguments. - - :var str code: error code returned by Tor - :var str message: error message returned by Tor or a human readable error - message - :var list arguments: a list of arguments which were invalid - """ - - def __init__(self, code = None, message = None, arguments = None): - super(InvalidArguments, self).__init__(code, message) - self.arguments = arguments - - -class SocketError(ControllerError): - 'Error arose while communicating with the control socket.' - - -class SocketClosed(SocketError): - 'Control socket was closed before completing the message.' - - -class DownloadFailed(IOError): - """ - Inability to download a resource. Python's urllib module raises - a wide variety of undocumented exceptions (urllib2.URLError, - socket.timeout, and others). - - This wraps lower level failures in a common exception type that - retains their exception and `stacktrace - `_. - - .. versionadded:: 1.8.0 - - :var str url: url we failed to download from - :var Exception error: original urllib exception - :var traceback stacktrace: original stacktrace - :var str stacktrace_str: string representation of the stacktrace - """ - - def __init__(self, url, error, stacktrace, message = None): - if message is None: - # The string representation of exceptions can reside in several places. - # urllib.URLError use a 'reason' attribute that in turn may referrence - # low level structures such as socket.gaierror. Whereas most exceptions - # use a 'message' attribute. - - reason = str(error) - - all_str_repr = ( - getattr(getattr(error, 'reason', None), 'strerror', None), - getattr(error, 'reason', None), - getattr(error, 'message', None), - ) - - for str_repr in all_str_repr: - if str_repr and isinstance(str_repr, str): - reason = str_repr - break - - message = 'Failed to download from %s (%s): %s' % (url, type(error).__name__, reason) - - super(DownloadFailed, self).__init__(message) - - self.url = url - self.error = error - self.stacktrace = stacktrace - self.stacktrace_str = ''.join(traceback.format_tb(stacktrace)) - - -class DownloadTimeout(DownloadFailed): - """ - Timeout reached while downloading this resource. - - .. versionadded:: 1.8.0 - """ - - def __init__(self, url, error, stacktrace, timeout): - message = 'Failed to download from %s: %0.1f second timeout reached' % (url, timeout) - super(DownloadTimeout, self).__init__(url, error, stacktrace, message) - - -Runlevel = stem.util.enum.UppercaseEnum( - 'DEBUG', - 'INFO', - 'NOTICE', - 'WARN', - 'ERR', -) - -Flag = stem.util.enum.Enum( - ('AUTHORITY', 'Authority'), - ('BADEXIT', 'BadExit'), - ('BADDIRECTORY', 'BadDirectory'), - ('EXIT', 'Exit'), - ('FAST', 'Fast'), - ('GUARD', 'Guard'), - ('HSDIR', 'HSDir'), - ('NAMED', 'Named'), - ('NO_ED_CONSENSUS', 'NoEdConsensus'), - ('RUNNING', 'Running'), - ('STABLE', 'Stable'), - ('STALE_DESC', 'StaleDesc'), - ('UNNAMED', 'Unnamed'), - ('V2DIR', 'V2Dir'), - ('V3DIR', 'V3Dir'), - ('VALID', 'Valid'), -) - -Signal = stem.util.enum.UppercaseEnum( - 'RELOAD', - 'HUP', - 'SHUTDOWN', - 'INT', - 'DUMP', - 'USR1', - 'DEBUG', - 'USR2', - 'HALT', - 'TERM', - 'NEWNYM', - 'CLEARDNSCACHE', - 'HEARTBEAT', - 'ACTIVE', - 'DORMANT', -) - -CircStatus = stem.util.enum.UppercaseEnum( - 'LAUNCHED', - 'BUILT', - 'GUARD_WAIT', - 'EXTENDED', - 'FAILED', - 'CLOSED', -) - -CircBuildFlag = stem.util.enum.UppercaseEnum( - 'ONEHOP_TUNNEL', - 'IS_INTERNAL', - 'NEED_CAPACITY', - 'NEED_UPTIME', -) - -CircPurpose = stem.util.enum.UppercaseEnum( - 'GENERAL', - 'HS_CLIENT_INTRO', - 'HS_CLIENT_REND', - 'HS_SERVICE_INTRO', - 'HS_SERVICE_REND', - 'TESTING', - 'CONTROLLER', - 'MEASURE_TIMEOUT', -) - -CircClosureReason = stem.util.enum.UppercaseEnum( - 'NONE', - 'TORPROTOCOL', - 'INTERNAL', - 'REQUESTED', - 'HIBERNATING', - 'RESOURCELIMIT', - 'CONNECTFAILED', - 'OR_IDENTITY', - 'OR_CONN_CLOSED', - 'FINISHED', - 'TIMEOUT', - 'DESTROYED', - 'NOPATH', - 'NOSUCHSERVICE', - 'MEASUREMENT_EXPIRED', -) - -CircEvent = stem.util.enum.UppercaseEnum( - 'PURPOSE_CHANGED', - 'CANNIBALIZED', -) - -HiddenServiceState = stem.util.enum.UppercaseEnum( - 'HSCI_CONNECTING', - 'HSCI_INTRO_SENT', - 'HSCI_DONE', - 'HSCR_CONNECTING', - 'HSCR_ESTABLISHED_IDLE', - 'HSCR_ESTABLISHED_WAITING', - 'HSCR_JOINED', - 'HSSI_CONNECTING', - 'HSSI_ESTABLISHED', - 'HSSR_CONNECTING', - 'HSSR_JOINED', -) - -RelayEndReason = stem.util.enum.UppercaseEnum( - 'MISC', - 'RESOLVEFAILED', - 'CONNECTREFUSED', - 'EXITPOLICY', - 'DESTROY', - 'DONE', - 'TIMEOUT', - 'NOROUTE', - 'HIBERNATING', - 'INTERNAL', - 'RESOURCELIMIT', - 'CONNRESET', - 'TORPROTOCOL', - 'NOTDIRECTORY', -) - -StreamStatus = stem.util.enum.UppercaseEnum( - 'NEW', - 'NEWRESOLVE', - 'REMAP', - 'SENTCONNECT', - 'SENTRESOLVE', - 'SUCCEEDED', - 'FAILED', - 'DETACHED', - 'CLOSED', -) - -# StreamClosureReason is a superset of RelayEndReason -StreamClosureReason = stem.util.enum.UppercaseEnum(*(RelayEndReason.keys() + [ - 'END', - 'PRIVATE_ADDR', -])) - -StreamSource = stem.util.enum.UppercaseEnum( - 'CACHE', - 'EXIT', -) - -StreamPurpose = stem.util.enum.UppercaseEnum( - 'DIR_FETCH', - 'DIR_UPLOAD', - 'DNS_REQUEST', - 'DIRPORT_TEST', - 'USER', -) - -ORStatus = stem.util.enum.UppercaseEnum( - 'NEW', - 'LAUNCHED', - 'CONNECTED', - 'FAILED', - 'CLOSED', -) - -ORClosureReason = stem.util.enum.UppercaseEnum( - 'DONE', - 'CONNECTREFUSED', - 'IDENTITY', - 'CONNECTRESET', - 'TIMEOUT', - 'NOROUTE', - 'IOERROR', - 'RESOURCELIMIT', - 'MISC', - 'PT_MISSING', -) - -AuthDescriptorAction = stem.util.enum.UppercaseEnum( - 'ACCEPTED', - 'DROPPED', - 'REJECTED', -) - -StatusType = stem.util.enum.UppercaseEnum( - 'GENERAL', - 'CLIENT', - 'SERVER', -) - -GuardType = stem.util.enum.UppercaseEnum( - 'ENTRY', -) - -GuardStatus = stem.util.enum.UppercaseEnum( - 'NEW', - 'UP', - 'DOWN', - 'BAD', - 'GOOD', - 'DROPPED', -) - -TimeoutSetType = stem.util.enum.UppercaseEnum( - 'COMPUTED', - 'RESET', - 'SUSPENDED', - 'DISCARD', - 'RESUME', -) - -ConnectionType = stem.util.enum.UppercaseEnum( - 'OR', - 'DIR', - 'EXIT', -) - -TokenBucket = stem.util.enum.UppercaseEnum( - 'GLOBAL', - 'RELAY', - 'ORCONN', -) - -HSDescAction = stem.util.enum.UppercaseEnum( - 'REQUESTED', - 'UPLOAD', - 'RECEIVED', - 'UPLOADED', - 'IGNORE', - 'FAILED', - 'CREATED', -) - -HSDescReason = stem.util.enum.UppercaseEnum( - 'BAD_DESC', - 'QUERY_REJECTED', - 'UPLOAD_REJECTED', - 'NOT_FOUND', - 'QUERY_NO_HSDIR', - 'UNEXPECTED', -) - -HSAuth = stem.util.enum.UppercaseEnum( - 'NO_AUTH', - 'BASIC_AUTH', - 'STEALTH_AUTH', - 'UNKNOWN', -) - - -import stem.util.connection # importing afterward to avoid circular dependency diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c9b06c5..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index 0a2d0bd..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/control.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/control.cpython-312.pyc deleted file mode 100644 index db1bfeb..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/control.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/directory.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/directory.cpython-312.pyc deleted file mode 100644 index 9268e9c..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/directory.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/exit_policy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/exit_policy.cpython-312.pyc deleted file mode 100644 index 23128a9..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/exit_policy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/manual.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/manual.cpython-312.pyc deleted file mode 100644 index 0ba5ba2..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/manual.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/prereq.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/prereq.cpython-312.pyc deleted file mode 100644 index 91983db..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/prereq.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/process.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/process.cpython-312.pyc deleted file mode 100644 index d64b1c0..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/process.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/socket.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/socket.cpython-312.pyc deleted file mode 100644 index fc8b622..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/socket.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/__pycache__/version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/__pycache__/version.cpython-312.pyc deleted file mode 100644 index 5a36ab6..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/__pycache__/version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/cached_fallbacks.cfg b/myenv/lib/python3.12/site-packages/stem/cached_fallbacks.cfg deleted file mode 100644 index 90f5db5..0000000 --- a/myenv/lib/python3.12/site-packages/stem/cached_fallbacks.cfg +++ /dev/null @@ -1,888 +0,0 @@ -tor_commit 1dd95278970f9f32d83a31fe73e0258a30523539 -stem_commit ec67e06398d6bbbcefdc14b56d2e91bd49f47539 -header.timestamp 20190625114911 -header.source whitelist -header.version 2.0.0 -header.timestamp0 20190625114911 -header.timestamp1 20190628085927 -header.type fallback -001524DD403D729F08F7E5D77813EF12756CFA8D.address 185.13.39.197 -001524DD403D729F08F7E5D77813EF12756CFA8D.or_port 443 -001524DD403D729F08F7E5D77813EF12756CFA8D.dir_port 80 -001524DD403D729F08F7E5D77813EF12756CFA8D.nickname Neldoreth -001524DD403D729F08F7E5D77813EF12756CFA8D.has_extrainfo false -025B66CEBC070FCB0519D206CF0CF4965C20C96E.address 185.100.85.61 -025B66CEBC070FCB0519D206CF0CF4965C20C96E.or_port 443 -025B66CEBC070FCB0519D206CF0CF4965C20C96E.dir_port 80 -025B66CEBC070FCB0519D206CF0CF4965C20C96E.nickname nibbana -025B66CEBC070FCB0519D206CF0CF4965C20C96E.has_extrainfo false -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.address 185.225.17.3 -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.or_port 443 -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.dir_port 80 -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.nickname Nebuchadnezzar -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.has_extrainfo false -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.orport6_address 2a0a:c800:1:5::3 -0338F9F55111FE8E3570E7DE117EF3AF999CC1D7.orport6_port 443 -0B85617241252517E8ECF2CFC7F4C1A32DCD153F.address 163.172.149.155 -0B85617241252517E8ECF2CFC7F4C1A32DCD153F.or_port 443 -0B85617241252517E8ECF2CFC7F4C1A32DCD153F.dir_port 80 -0B85617241252517E8ECF2CFC7F4C1A32DCD153F.nickname niij02 -0B85617241252517E8ECF2CFC7F4C1A32DCD153F.has_extrainfo false -0C039F35C2E40DCB71CD8A07E97C7FD7787D42D6.address 5.200.21.144 -0C039F35C2E40DCB71CD8A07E97C7FD7787D42D6.or_port 443 -0C039F35C2E40DCB71CD8A07E97C7FD7787D42D6.dir_port 80 -0C039F35C2E40DCB71CD8A07E97C7FD7787D42D6.nickname libel -0C039F35C2E40DCB71CD8A07E97C7FD7787D42D6.has_extrainfo false -113143469021882C3A4B82F084F8125B08EE471E.address 37.252.185.182 -113143469021882C3A4B82F084F8125B08EE471E.or_port 8080 -113143469021882C3A4B82F084F8125B08EE471E.dir_port 9030 -113143469021882C3A4B82F084F8125B08EE471E.nickname parasol -113143469021882C3A4B82F084F8125B08EE471E.has_extrainfo false -113143469021882C3A4B82F084F8125B08EE471E.orport6_address 2a00:63c1:a:182::2 -113143469021882C3A4B82F084F8125B08EE471E.orport6_port 8080 -11DF0017A43AF1F08825CD5D973297F81AB00FF3.address 37.120.174.249 -11DF0017A43AF1F08825CD5D973297F81AB00FF3.or_port 443 -11DF0017A43AF1F08825CD5D973297F81AB00FF3.dir_port 80 -11DF0017A43AF1F08825CD5D973297F81AB00FF3.nickname gGDHjdcC6zAlM8k08lX -11DF0017A43AF1F08825CD5D973297F81AB00FF3.has_extrainfo false -11DF0017A43AF1F08825CD5D973297F81AB00FF3.orport6_address 2a03:4000:6:724c:df98:15f9:b34d:443 -11DF0017A43AF1F08825CD5D973297F81AB00FF3.orport6_port 443 -1211AC1BBB8A1AF7CBA86BCE8689AA3146B86423.address 95.85.8.226 -1211AC1BBB8A1AF7CBA86BCE8689AA3146B86423.or_port 443 -1211AC1BBB8A1AF7CBA86BCE8689AA3146B86423.dir_port 80 -1211AC1BBB8A1AF7CBA86BCE8689AA3146B86423.nickname ccrelaycc -1211AC1BBB8A1AF7CBA86BCE8689AA3146B86423.has_extrainfo false -12AD30E5D25AA67F519780E2111E611A455FDC89.address 193.11.114.43 -12AD30E5D25AA67F519780E2111E611A455FDC89.or_port 9001 -12AD30E5D25AA67F519780E2111E611A455FDC89.dir_port 9030 -12AD30E5D25AA67F519780E2111E611A455FDC89.nickname mdfnet1 -12AD30E5D25AA67F519780E2111E611A455FDC89.has_extrainfo false -12AD30E5D25AA67F519780E2111E611A455FDC89.orport6_address 2001:6b0:30:1000::99 -12AD30E5D25AA67F519780E2111E611A455FDC89.orport6_port 9050 -12FD624EE73CEF37137C90D38B2406A66F68FAA2.address 37.157.195.87 -12FD624EE73CEF37137C90D38B2406A66F68FAA2.or_port 443 -12FD624EE73CEF37137C90D38B2406A66F68FAA2.dir_port 8030 -12FD624EE73CEF37137C90D38B2406A66F68FAA2.nickname thanatosCZ -12FD624EE73CEF37137C90D38B2406A66F68FAA2.has_extrainfo false -183005F78229D94EE51CE7795A42280070A48D0D.address 217.182.51.248 -183005F78229D94EE51CE7795A42280070A48D0D.or_port 443 -183005F78229D94EE51CE7795A42280070A48D0D.dir_port 80 -183005F78229D94EE51CE7795A42280070A48D0D.nickname Cosworth02 -183005F78229D94EE51CE7795A42280070A48D0D.has_extrainfo false -185663B7C12777F052B2C2D23D7A239D8DA88A0F.address 171.25.193.25 -185663B7C12777F052B2C2D23D7A239D8DA88A0F.or_port 443 -185663B7C12777F052B2C2D23D7A239D8DA88A0F.dir_port 80 -185663B7C12777F052B2C2D23D7A239D8DA88A0F.nickname DFRI5 -185663B7C12777F052B2C2D23D7A239D8DA88A0F.has_extrainfo false -185663B7C12777F052B2C2D23D7A239D8DA88A0F.orport6_address 2001:67c:289c::25 -185663B7C12777F052B2C2D23D7A239D8DA88A0F.orport6_port 443 -1938EBACBB1A7BFA888D9623C90061130E63BB3F.address 149.56.141.138 -1938EBACBB1A7BFA888D9623C90061130E63BB3F.or_port 9001 -1938EBACBB1A7BFA888D9623C90061130E63BB3F.dir_port 9030 -1938EBACBB1A7BFA888D9623C90061130E63BB3F.nickname Aerodynamik04 -1938EBACBB1A7BFA888D9623C90061130E63BB3F.has_extrainfo false -1AE039EE0B11DB79E4B4B29CBA9F752864A0259E.address 81.7.14.253 -1AE039EE0B11DB79E4B4B29CBA9F752864A0259E.or_port 443 -1AE039EE0B11DB79E4B4B29CBA9F752864A0259E.dir_port 9001 -1AE039EE0B11DB79E4B4B29CBA9F752864A0259E.nickname Ichotolot60 -1AE039EE0B11DB79E4B4B29CBA9F752864A0259E.has_extrainfo true -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.address 50.7.74.171 -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.or_port 9001 -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.dir_port 9030 -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.nickname theia1 -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.has_extrainfo false -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.orport6_address 2001:49f0:d002:2::51 -1CD17CB202063C51C7DAD3BACEF87ECE81C2350F.orport6_port 443 -1F6ABD086F40B890A33C93CC4606EE68B31C9556.address 199.184.246.250 -1F6ABD086F40B890A33C93CC4606EE68B31C9556.or_port 443 -1F6ABD086F40B890A33C93CC4606EE68B31C9556.dir_port 80 -1F6ABD086F40B890A33C93CC4606EE68B31C9556.nickname dao -1F6ABD086F40B890A33C93CC4606EE68B31C9556.has_extrainfo false -1F6ABD086F40B890A33C93CC4606EE68B31C9556.orport6_address 2620:124:1009:1::171 -1F6ABD086F40B890A33C93CC4606EE68B31C9556.orport6_port 443 -20462CBA5DA4C2D963567D17D0B7249718114A68.address 212.47.229.2 -20462CBA5DA4C2D963567D17D0B7249718114A68.or_port 9001 -20462CBA5DA4C2D963567D17D0B7249718114A68.dir_port 9030 -20462CBA5DA4C2D963567D17D0B7249718114A68.nickname scaletor -20462CBA5DA4C2D963567D17D0B7249718114A68.has_extrainfo false -20462CBA5DA4C2D963567D17D0B7249718114A68.orport6_address 2001:bc8:4400:2100::f03 -20462CBA5DA4C2D963567D17D0B7249718114A68.orport6_port 9001 -204DFD2A2C6A0DC1FA0EACB495218E0B661704FD.address 77.247.181.164 -204DFD2A2C6A0DC1FA0EACB495218E0B661704FD.or_port 443 -204DFD2A2C6A0DC1FA0EACB495218E0B661704FD.dir_port 80 -204DFD2A2C6A0DC1FA0EACB495218E0B661704FD.nickname HaveHeart -204DFD2A2C6A0DC1FA0EACB495218E0B661704FD.has_extrainfo false -230A8B2A8BA861210D9B4BA97745AEC217A94207.address 163.172.176.167 -230A8B2A8BA861210D9B4BA97745AEC217A94207.or_port 443 -230A8B2A8BA861210D9B4BA97745AEC217A94207.dir_port 80 -230A8B2A8BA861210D9B4BA97745AEC217A94207.nickname niij01 -230A8B2A8BA861210D9B4BA97745AEC217A94207.has_extrainfo false -2F0F32AB1E5B943CA7D062C03F18960C86E70D94.address 97.74.237.196 -2F0F32AB1E5B943CA7D062C03F18960C86E70D94.or_port 9001 -2F0F32AB1E5B943CA7D062C03F18960C86E70D94.dir_port 9030 -2F0F32AB1E5B943CA7D062C03F18960C86E70D94.nickname Minotaur -2F0F32AB1E5B943CA7D062C03F18960C86E70D94.has_extrainfo false -322C6E3A973BC10FC36DE3037AD27BC89F14723B.address 212.83.154.33 -322C6E3A973BC10FC36DE3037AD27BC89F14723B.or_port 8443 -322C6E3A973BC10FC36DE3037AD27BC89F14723B.dir_port 8080 -322C6E3A973BC10FC36DE3037AD27BC89F14723B.nickname bauruine204 -322C6E3A973BC10FC36DE3037AD27BC89F14723B.has_extrainfo false -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.address 109.105.109.162 -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.or_port 60784 -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.dir_port 52860 -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.nickname ndnr1 -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.has_extrainfo false -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.orport6_address 2001:948:7:2::163 -32EE911D968BE3E016ECA572BB1ED0A9EE43FC2F.orport6_port 5001 -330CD3DB6AD266DC70CDB512B036957D03D9BC59.address 185.100.84.212 -330CD3DB6AD266DC70CDB512B036957D03D9BC59.or_port 443 -330CD3DB6AD266DC70CDB512B036957D03D9BC59.dir_port 80 -330CD3DB6AD266DC70CDB512B036957D03D9BC59.nickname TeamTardis -330CD3DB6AD266DC70CDB512B036957D03D9BC59.has_extrainfo false -330CD3DB6AD266DC70CDB512B036957D03D9BC59.orport6_address 2a06:1700:0:7::1 -330CD3DB6AD266DC70CDB512B036957D03D9BC59.orport6_port 443 -361D33C96D0F161275EE67E2C91EE10B276E778B.address 37.157.255.35 -361D33C96D0F161275EE67E2C91EE10B276E778B.or_port 9090 -361D33C96D0F161275EE67E2C91EE10B276E778B.dir_port 9030 -361D33C96D0F161275EE67E2C91EE10B276E778B.nickname cxx4freedom -361D33C96D0F161275EE67E2C91EE10B276E778B.has_extrainfo false -375DCBB2DBD94E5263BC0C015F0C9E756669617E.address 64.79.152.132 -375DCBB2DBD94E5263BC0C015F0C9E756669617E.or_port 443 -375DCBB2DBD94E5263BC0C015F0C9E756669617E.dir_port 80 -375DCBB2DBD94E5263BC0C015F0C9E756669617E.nickname ebola -375DCBB2DBD94E5263BC0C015F0C9E756669617E.has_extrainfo false -39F91959416763AFD34DBEEC05474411B964B2DC.address 213.183.60.21 -39F91959416763AFD34DBEEC05474411B964B2DC.or_port 443 -39F91959416763AFD34DBEEC05474411B964B2DC.dir_port 9030 -39F91959416763AFD34DBEEC05474411B964B2DC.nickname angeltest11 -39F91959416763AFD34DBEEC05474411B964B2DC.has_extrainfo false -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.address 50.7.74.174 -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.or_port 9001 -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.dir_port 9030 -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.nickname theia7 -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.has_extrainfo false -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.orport6_address 2001:49f0:d002:2::57 -3AFDAAD91A15B4C6A7686A53AA8627CA871FF491.orport6_port 443 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.address 199.249.230.83 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.or_port 443 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.dir_port 80 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.nickname QuintexAirVPN30 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.has_extrainfo false -3CA0D15567024D2E0B557DC0CF3E962B37999A79.orport6_address 2620:7:6001::ffff:c759:e653 -3CA0D15567024D2E0B557DC0CF3E962B37999A79.orport6_port 80 -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.address 51.38.65.160 -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.or_port 9001 -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.dir_port 9030 -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.nickname rofltor10 -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.has_extrainfo false -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.orport6_address 2001:41d0:801:2000::f6e -3CB4193EF4E239FCEDC4DC43468E0B0D6B67ACC3.orport6_port 9001 -3E53D3979DB07EFD736661C934A1DED14127B684.address 217.79.179.177 -3E53D3979DB07EFD736661C934A1DED14127B684.or_port 9001 -3E53D3979DB07EFD736661C934A1DED14127B684.dir_port 9030 -3E53D3979DB07EFD736661C934A1DED14127B684.nickname Unnamed -3E53D3979DB07EFD736661C934A1DED14127B684.has_extrainfo false -3E53D3979DB07EFD736661C934A1DED14127B684.orport6_address 2001:4ba0:fff9:131:6c4f::90d3 -3E53D3979DB07EFD736661C934A1DED14127B684.orport6_port 9001 -3F092986E9B87D3FDA09B71FA3A602378285C77A.address 66.111.2.16 -3F092986E9B87D3FDA09B71FA3A602378285C77A.or_port 9001 -3F092986E9B87D3FDA09B71FA3A602378285C77A.dir_port 9030 -3F092986E9B87D3FDA09B71FA3A602378285C77A.nickname NYCBUG1 -3F092986E9B87D3FDA09B71FA3A602378285C77A.has_extrainfo false -3F092986E9B87D3FDA09B71FA3A602378285C77A.orport6_address 2610:1c0:0:5::16 -3F092986E9B87D3FDA09B71FA3A602378285C77A.orport6_port 9001 -4061C553CA88021B8302F0814365070AAE617270.address 185.100.85.101 -4061C553CA88021B8302F0814365070AAE617270.or_port 9001 -4061C553CA88021B8302F0814365070AAE617270.dir_port 9030 -4061C553CA88021B8302F0814365070AAE617270.nickname TorExitRomania -4061C553CA88021B8302F0814365070AAE617270.has_extrainfo false -4623A9EC53BFD83155929E56D6F7B55B5E718C24.address 163.172.157.213 -4623A9EC53BFD83155929E56D6F7B55B5E718C24.or_port 443 -4623A9EC53BFD83155929E56D6F7B55B5E718C24.dir_port 8080 -4623A9EC53BFD83155929E56D6F7B55B5E718C24.nickname Cotopaxi -4623A9EC53BFD83155929E56D6F7B55B5E718C24.has_extrainfo false -465D17C6FC297E3857B5C6F152006A1E212944EA.address 195.123.245.141 -465D17C6FC297E3857B5C6F152006A1E212944EA.or_port 443 -465D17C6FC297E3857B5C6F152006A1E212944EA.dir_port 9030 -465D17C6FC297E3857B5C6F152006A1E212944EA.nickname angeltest14 -465D17C6FC297E3857B5C6F152006A1E212944EA.has_extrainfo false -46791D156C9B6C255C2665D4D8393EC7DBAA7798.address 31.31.78.49 -46791D156C9B6C255C2665D4D8393EC7DBAA7798.or_port 443 -46791D156C9B6C255C2665D4D8393EC7DBAA7798.dir_port 80 -46791D156C9B6C255C2665D4D8393EC7DBAA7798.nickname KrigHaBandolo -46791D156C9B6C255C2665D4D8393EC7DBAA7798.has_extrainfo false -484A10BA2B8D48A5F0216674C8DD50EF27BC32F3.address 193.70.43.76 -484A10BA2B8D48A5F0216674C8DD50EF27BC32F3.or_port 9001 -484A10BA2B8D48A5F0216674C8DD50EF27BC32F3.dir_port 9030 -484A10BA2B8D48A5F0216674C8DD50EF27BC32F3.nickname Aerodynamik03 -484A10BA2B8D48A5F0216674C8DD50EF27BC32F3.has_extrainfo false -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.address 37.187.102.186 -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.or_port 9001 -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.dir_port 9030 -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.nickname txtfileTorNode65536 -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.has_extrainfo false -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.orport6_address 2001:41d0:a:26ba::1 -489D94333DF66D57FFE34D9D59CC2D97E2CB0053.orport6_port 9001 -4EB55679FA91363B97372554F8DC7C63F4E5B101.address 81.7.13.84 -4EB55679FA91363B97372554F8DC7C63F4E5B101.or_port 443 -4EB55679FA91363B97372554F8DC7C63F4E5B101.dir_port 80 -4EB55679FA91363B97372554F8DC7C63F4E5B101.nickname torpidsDEisppro -4EB55679FA91363B97372554F8DC7C63F4E5B101.has_extrainfo false -4EB55679FA91363B97372554F8DC7C63F4E5B101.orport6_address 2a02:180:1:1::5b8f:538c -4EB55679FA91363B97372554F8DC7C63F4E5B101.orport6_port 443 -4F0DB7E687FC7C0AE55C8F243DA8B0EB27FBF1F2.address 108.53.208.157 -4F0DB7E687FC7C0AE55C8F243DA8B0EB27FBF1F2.or_port 443 -4F0DB7E687FC7C0AE55C8F243DA8B0EB27FBF1F2.dir_port 80 -4F0DB7E687FC7C0AE55C8F243DA8B0EB27FBF1F2.nickname Binnacle -4F0DB7E687FC7C0AE55C8F243DA8B0EB27FBF1F2.has_extrainfo true -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.address 5.9.158.75 -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.or_port 9001 -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.dir_port 9030 -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.nickname zwiebeltoralf2 -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.has_extrainfo true -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.orport6_address 2a01:4f8:190:514a::2 -509EAB4C5D10C9A9A24B4EA0CE402C047A2D64E6.orport6_port 9001 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.address 81.7.16.182 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.or_port 443 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.dir_port 80 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.nickname torpidsDEisppro3 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.has_extrainfo false -51E1CF613FD6F9F11FE24743C91D6F9981807D82.orport6_address 2a02:180:1:1::517:10b6 -51E1CF613FD6F9F11FE24743C91D6F9981807D82.orport6_port 993 -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.address 192.160.102.166 -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.or_port 9001 -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.dir_port 80 -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.nickname chaucer -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.has_extrainfo false -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.orport6_address 2620:132:300c:c01d::6 -547DA56F6B88B6C596B3E3086803CDA4F0EF8F21.orport6_port 9002 -557ACEC850F54EEE65839F83CACE2B0825BE811E.address 192.160.102.170 -557ACEC850F54EEE65839F83CACE2B0825BE811E.or_port 9001 -557ACEC850F54EEE65839F83CACE2B0825BE811E.dir_port 80 -557ACEC850F54EEE65839F83CACE2B0825BE811E.nickname ogopogo -557ACEC850F54EEE65839F83CACE2B0825BE811E.has_extrainfo false -557ACEC850F54EEE65839F83CACE2B0825BE811E.orport6_address 2620:132:300c:c01d::a -557ACEC850F54EEE65839F83CACE2B0825BE811E.orport6_port 9002 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.address 50.7.74.170 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.or_port 443 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.dir_port 80 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.nickname theia8 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.has_extrainfo false -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.orport6_address 2001:49f0:d002:2::58 -5BF17163CBE73D8CD9FDBE030C944EA05707DA93.orport6_port 443 -5E56738E7F97AA81DEEF59AF28494293DFBFCCDF.address 172.98.193.43 -5E56738E7F97AA81DEEF59AF28494293DFBFCCDF.or_port 443 -5E56738E7F97AA81DEEF59AF28494293DFBFCCDF.dir_port 80 -5E56738E7F97AA81DEEF59AF28494293DFBFCCDF.nickname Backplane -5E56738E7F97AA81DEEF59AF28494293DFBFCCDF.has_extrainfo false -616081EC829593AF4232550DE6FFAA1D75B37A90.address 95.128.43.164 -616081EC829593AF4232550DE6FFAA1D75B37A90.or_port 443 -616081EC829593AF4232550DE6FFAA1D75B37A90.dir_port 80 -616081EC829593AF4232550DE6FFAA1D75B37A90.nickname AquaRayTerminus -616081EC829593AF4232550DE6FFAA1D75B37A90.has_extrainfo false -616081EC829593AF4232550DE6FFAA1D75B37A90.orport6_address 2a02:ec0:209:10::4 -616081EC829593AF4232550DE6FFAA1D75B37A90.orport6_port 443 -68F175CCABE727AA2D2309BCD8789499CEE36ED7.address 163.172.139.104 -68F175CCABE727AA2D2309BCD8789499CEE36ED7.or_port 443 -68F175CCABE727AA2D2309BCD8789499CEE36ED7.dir_port 8080 -68F175CCABE727AA2D2309BCD8789499CEE36ED7.nickname Pichincha -68F175CCABE727AA2D2309BCD8789499CEE36ED7.has_extrainfo false -6A7551EEE18F78A9813096E82BF84F740D32B911.address 94.130.186.5 -6A7551EEE18F78A9813096E82BF84F740D32B911.or_port 443 -6A7551EEE18F78A9813096E82BF84F740D32B911.dir_port 80 -6A7551EEE18F78A9813096E82BF84F740D32B911.nickname TorMachine -6A7551EEE18F78A9813096E82BF84F740D32B911.has_extrainfo false -6A7551EEE18F78A9813096E82BF84F740D32B911.orport6_address 2a01:4f8:1c0c:45f7::1 -6A7551EEE18F78A9813096E82BF84F740D32B911.orport6_port 443 -6EF897645B79B6CB35E853B32506375014DE3621.address 80.127.137.19 -6EF897645B79B6CB35E853B32506375014DE3621.or_port 443 -6EF897645B79B6CB35E853B32506375014DE3621.dir_port 80 -6EF897645B79B6CB35E853B32506375014DE3621.nickname d6relay -6EF897645B79B6CB35E853B32506375014DE3621.has_extrainfo false -6EF897645B79B6CB35E853B32506375014DE3621.orport6_address 2001:981:47c1:1::6 -6EF897645B79B6CB35E853B32506375014DE3621.orport6_port 443 -7088D485934E8A403B81531F8C90BDC75FA43C98.address 37.139.8.104 -7088D485934E8A403B81531F8C90BDC75FA43C98.or_port 9001 -7088D485934E8A403B81531F8C90BDC75FA43C98.dir_port 9030 -7088D485934E8A403B81531F8C90BDC75FA43C98.nickname Basil -7088D485934E8A403B81531F8C90BDC75FA43C98.has_extrainfo false -7088D485934E8A403B81531F8C90BDC75FA43C98.orport6_address 2a03:b0c0:0:1010::24c:1001 -7088D485934E8A403B81531F8C90BDC75FA43C98.orport6_port 9001 -70C55A114C0EF3DC5784A4FAEE64388434A3398F.address 188.138.88.42 -70C55A114C0EF3DC5784A4FAEE64388434A3398F.or_port 443 -70C55A114C0EF3DC5784A4FAEE64388434A3398F.dir_port 80 -70C55A114C0EF3DC5784A4FAEE64388434A3398F.nickname torpidsFRplusserver -70C55A114C0EF3DC5784A4FAEE64388434A3398F.has_extrainfo false -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.address 85.235.250.88 -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.or_port 443 -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.dir_port 80 -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.nickname TykRelay01 -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.has_extrainfo false -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.orport6_address 2a01:3a0:1:1900:85:235:250:88 -72B2B12A3F60408BDBC98C6DF53988D3A0B3F0EE.orport6_port 443 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.address 178.17.170.23 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.or_port 9001 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.dir_port 9030 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.nickname TorExitMoldova2 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.has_extrainfo false -742C45F2D9004AADE0077E528A4418A6A81BC2BA.orport6_address 2a00:1dc0:caff:7d::8254 -742C45F2D9004AADE0077E528A4418A6A81BC2BA.orport6_port 9001 -745369332749021C6FAF100D327BC3BF1DF4707B.address 50.7.74.173 -745369332749021C6FAF100D327BC3BF1DF4707B.or_port 9001 -745369332749021C6FAF100D327BC3BF1DF4707B.dir_port 9030 -745369332749021C6FAF100D327BC3BF1DF4707B.nickname theia5 -745369332749021C6FAF100D327BC3BF1DF4707B.has_extrainfo false -745369332749021C6FAF100D327BC3BF1DF4707B.orport6_address 2001:49f0:d002:2::55 -745369332749021C6FAF100D327BC3BF1DF4707B.orport6_port 443 -77131D7E2EC1CA9B8D737502256DA9103599CE51.address 77.247.181.166 -77131D7E2EC1CA9B8D737502256DA9103599CE51.or_port 443 -77131D7E2EC1CA9B8D737502256DA9103599CE51.dir_port 80 -77131D7E2EC1CA9B8D737502256DA9103599CE51.nickname CriticalMass -77131D7E2EC1CA9B8D737502256DA9103599CE51.has_extrainfo false -775B0FAFDE71AADC23FFC8782B7BEB1D5A92733E.address 5.196.23.64 -775B0FAFDE71AADC23FFC8782B7BEB1D5A92733E.or_port 9001 -775B0FAFDE71AADC23FFC8782B7BEB1D5A92733E.dir_port 9030 -775B0FAFDE71AADC23FFC8782B7BEB1D5A92733E.nickname Aerodynamik01 -775B0FAFDE71AADC23FFC8782B7BEB1D5A92733E.has_extrainfo false -79509683AB4C8DDAF90A120C69A4179C6CD5A387.address 185.244.193.141 -79509683AB4C8DDAF90A120C69A4179C6CD5A387.or_port 9001 -79509683AB4C8DDAF90A120C69A4179C6CD5A387.dir_port 9030 -79509683AB4C8DDAF90A120C69A4179C6CD5A387.nickname DerDickeReloaded -79509683AB4C8DDAF90A120C69A4179C6CD5A387.has_extrainfo false -79509683AB4C8DDAF90A120C69A4179C6CD5A387.orport6_address 2a03:4000:27:192:24:12:1984:4 -79509683AB4C8DDAF90A120C69A4179C6CD5A387.orport6_port 9001 -7BB70F8585DFC27E75D692970C0EEB0F22983A63.address 51.254.136.195 -7BB70F8585DFC27E75D692970C0EEB0F22983A63.or_port 443 -7BB70F8585DFC27E75D692970C0EEB0F22983A63.dir_port 80 -7BB70F8585DFC27E75D692970C0EEB0F22983A63.nickname torproxy02 -7BB70F8585DFC27E75D692970C0EEB0F22983A63.has_extrainfo false -7BFB908A3AA5B491DA4CA72CCBEE0E1F2A939B55.address 77.247.181.162 -7BFB908A3AA5B491DA4CA72CCBEE0E1F2A939B55.or_port 443 -7BFB908A3AA5B491DA4CA72CCBEE0E1F2A939B55.dir_port 80 -7BFB908A3AA5B491DA4CA72CCBEE0E1F2A939B55.nickname sofia -7BFB908A3AA5B491DA4CA72CCBEE0E1F2A939B55.has_extrainfo false -7E281CD2C315C4F7A84BC7C8721C3BC974DDBFA3.address 185.220.101.48 -7E281CD2C315C4F7A84BC7C8721C3BC974DDBFA3.or_port 20048 -7E281CD2C315C4F7A84BC7C8721C3BC974DDBFA3.dir_port 10048 -7E281CD2C315C4F7A84BC7C8721C3BC974DDBFA3.nickname niftyporcupine -7E281CD2C315C4F7A84BC7C8721C3BC974DDBFA3.has_extrainfo false -80AAF8D5956A43C197104CEF2550CD42D165C6FB.address 193.11.114.45 -80AAF8D5956A43C197104CEF2550CD42D165C6FB.or_port 9002 -80AAF8D5956A43C197104CEF2550CD42D165C6FB.dir_port 9031 -80AAF8D5956A43C197104CEF2550CD42D165C6FB.nickname mdfnet2 -80AAF8D5956A43C197104CEF2550CD42D165C6FB.has_extrainfo false -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.address 51.254.96.208 -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.or_port 9001 -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.dir_port 9030 -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.nickname rofltor01 -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.has_extrainfo false -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.orport6_address 2001:41d0:401:3100::30dc -8101421BEFCCF4C271D5483C5AABCAAD245BBB9D.orport6_port 9001 -81B75D534F91BFB7C57AB67DA10BCEF622582AE8.address 192.42.116.16 -81B75D534F91BFB7C57AB67DA10BCEF622582AE8.or_port 443 -81B75D534F91BFB7C57AB67DA10BCEF622582AE8.dir_port 80 -81B75D534F91BFB7C57AB67DA10BCEF622582AE8.nickname hviv104 -81B75D534F91BFB7C57AB67DA10BCEF622582AE8.has_extrainfo false -823AA81E277F366505545522CEDC2F529CE4DC3F.address 192.160.102.164 -823AA81E277F366505545522CEDC2F529CE4DC3F.or_port 9001 -823AA81E277F366505545522CEDC2F529CE4DC3F.dir_port 80 -823AA81E277F366505545522CEDC2F529CE4DC3F.nickname snowfall -823AA81E277F366505545522CEDC2F529CE4DC3F.has_extrainfo false -823AA81E277F366505545522CEDC2F529CE4DC3F.orport6_address 2620:132:300c:c01d::4 -823AA81E277F366505545522CEDC2F529CE4DC3F.orport6_port 9002 -844AE9CAD04325E955E2BE1521563B79FE7094B7.address 192.87.28.82 -844AE9CAD04325E955E2BE1521563B79FE7094B7.or_port 9001 -844AE9CAD04325E955E2BE1521563B79FE7094B7.dir_port 9030 -844AE9CAD04325E955E2BE1521563B79FE7094B7.nickname Smeerboel -844AE9CAD04325E955E2BE1521563B79FE7094B7.has_extrainfo false -844AE9CAD04325E955E2BE1521563B79FE7094B7.orport6_address 2001:678:230:3028:192:87:28:82 -844AE9CAD04325E955E2BE1521563B79FE7094B7.orport6_port 9001 -8456DFA94161CDD99E480C2A2992C366C6564410.address 62.210.254.132 -8456DFA94161CDD99E480C2A2992C366C6564410.or_port 443 -8456DFA94161CDD99E480C2A2992C366C6564410.dir_port 80 -8456DFA94161CDD99E480C2A2992C366C6564410.nickname turingmachine -8456DFA94161CDD99E480C2A2992C366C6564410.has_extrainfo false -855BC2DABE24C861CD887DB9B2E950424B49FC34.address 85.230.178.139 -855BC2DABE24C861CD887DB9B2E950424B49FC34.or_port 443 -855BC2DABE24C861CD887DB9B2E950424B49FC34.dir_port 9030 -855BC2DABE24C861CD887DB9B2E950424B49FC34.nickname Logforme -855BC2DABE24C861CD887DB9B2E950424B49FC34.has_extrainfo false -85A885433E50B1874F11CEC9BE98451E24660976.address 178.254.7.88 -85A885433E50B1874F11CEC9BE98451E24660976.or_port 8443 -85A885433E50B1874F11CEC9BE98451E24660976.dir_port 8080 -85A885433E50B1874F11CEC9BE98451E24660976.nickname wr3ck3d0ni0n01 -85A885433E50B1874F11CEC9BE98451E24660976.has_extrainfo false -86C281AD135058238D7A337D546C902BE8505DDE.address 185.96.88.29 -86C281AD135058238D7A337D546C902BE8505DDE.or_port 443 -86C281AD135058238D7A337D546C902BE8505DDE.dir_port 80 -86C281AD135058238D7A337D546C902BE8505DDE.nickname TykRelay05 -86C281AD135058238D7A337D546C902BE8505DDE.has_extrainfo false -86C281AD135058238D7A337D546C902BE8505DDE.orport6_address 2a00:4020::185:96:88:29 -86C281AD135058238D7A337D546C902BE8505DDE.orport6_port 443 -8C00FA7369A7A308F6A137600F0FA07990D9D451.address 163.172.194.53 -8C00FA7369A7A308F6A137600F0FA07990D9D451.or_port 9001 -8C00FA7369A7A308F6A137600F0FA07990D9D451.dir_port 9030 -8C00FA7369A7A308F6A137600F0FA07990D9D451.nickname GrmmlLitavis -8C00FA7369A7A308F6A137600F0FA07990D9D451.has_extrainfo false -8C00FA7369A7A308F6A137600F0FA07990D9D451.orport6_address 2001:bc8:225f:142:6c69:7461:7669:73 -8C00FA7369A7A308F6A137600F0FA07990D9D451.orport6_port 9001 -8D79F73DCD91FC4F5017422FAC70074D6DB8DD81.address 5.189.169.190 -8D79F73DCD91FC4F5017422FAC70074D6DB8DD81.or_port 8080 -8D79F73DCD91FC4F5017422FAC70074D6DB8DD81.dir_port 8030 -8D79F73DCD91FC4F5017422FAC70074D6DB8DD81.nickname thanatosDE -8D79F73DCD91FC4F5017422FAC70074D6DB8DD81.has_extrainfo false -8FA37B93397015B2BC5A525C908485260BE9F422.address 81.7.11.96 -8FA37B93397015B2BC5A525C908485260BE9F422.or_port 9001 -8FA37B93397015B2BC5A525C908485260BE9F422.dir_port 9030 -8FA37B93397015B2BC5A525C908485260BE9F422.nickname Doedel22 -8FA37B93397015B2BC5A525C908485260BE9F422.has_extrainfo false -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.address 54.37.139.118 -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.or_port 9001 -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.dir_port 9030 -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.nickname rofltor09 -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.has_extrainfo false -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.orport6_address 2001:41d0:601:1100::1b8 -90A5D1355C4B5840E950EB61E673863A6AE3ACA1.orport6_port 9001 -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.address 37.187.20.59 -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.or_port 443 -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.dir_port 80 -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.nickname torpidsFRovh -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.has_extrainfo false -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.orport6_address 2001:41d0:a:143b::1 -91D23D8A539B83D2FB56AA67ECD4D75CC093AC55.orport6_port 993 -91E4015E1F82DAF0121D62267E54A1F661AB6DC7.address 173.255.245.116 -91E4015E1F82DAF0121D62267E54A1F661AB6DC7.or_port 9001 -91E4015E1F82DAF0121D62267E54A1F661AB6DC7.dir_port 9030 -91E4015E1F82DAF0121D62267E54A1F661AB6DC7.nickname IWorshipHisShadow -91E4015E1F82DAF0121D62267E54A1F661AB6DC7.has_extrainfo false -924B24AFA7F075D059E8EEB284CC400B33D3D036.address 96.253.78.108 -924B24AFA7F075D059E8EEB284CC400B33D3D036.or_port 443 -924B24AFA7F075D059E8EEB284CC400B33D3D036.dir_port 80 -924B24AFA7F075D059E8EEB284CC400B33D3D036.nickname NSDFreedom -924B24AFA7F075D059E8EEB284CC400B33D3D036.has_extrainfo false -9288B75B5FF8861EFF32A6BE8825CC38A4F9F8C2.address 92.38.163.21 -9288B75B5FF8861EFF32A6BE8825CC38A4F9F8C2.or_port 443 -9288B75B5FF8861EFF32A6BE8825CC38A4F9F8C2.dir_port 9030 -9288B75B5FF8861EFF32A6BE8825CC38A4F9F8C2.nickname angeltest9 -9288B75B5FF8861EFF32A6BE8825CC38A4F9F8C2.has_extrainfo false -935F589545B8A271A722E330445BB99F67DBB058.address 163.172.53.84 -935F589545B8A271A722E330445BB99F67DBB058.or_port 443 -935F589545B8A271A722E330445BB99F67DBB058.dir_port 80 -935F589545B8A271A722E330445BB99F67DBB058.nickname Multivac0 -935F589545B8A271A722E330445BB99F67DBB058.has_extrainfo false -935F589545B8A271A722E330445BB99F67DBB058.orport6_address 2001:bc8:24f8:: -935F589545B8A271A722E330445BB99F67DBB058.orport6_port 443 -94C4B7B8C50C86A92B6A20107539EE2678CF9A28.address 204.8.156.142 -94C4B7B8C50C86A92B6A20107539EE2678CF9A28.or_port 443 -94C4B7B8C50C86A92B6A20107539EE2678CF9A28.dir_port 80 -94C4B7B8C50C86A92B6A20107539EE2678CF9A28.nickname BostonUCompSci -94C4B7B8C50C86A92B6A20107539EE2678CF9A28.has_extrainfo false -9772EFB535397C942C3AB8804FB35CFFAD012438.address 37.153.1.10 -9772EFB535397C942C3AB8804FB35CFFAD012438.or_port 9001 -9772EFB535397C942C3AB8804FB35CFFAD012438.dir_port 9030 -9772EFB535397C942C3AB8804FB35CFFAD012438.nickname smallsweatnode -9772EFB535397C942C3AB8804FB35CFFAD012438.has_extrainfo false -99E246DB480B313A3012BC3363093CC26CD209C7.address 173.212.254.192 -99E246DB480B313A3012BC3363093CC26CD209C7.or_port 31337 -99E246DB480B313A3012BC3363093CC26CD209C7.dir_port 31336 -99E246DB480B313A3012BC3363093CC26CD209C7.nickname ViDiSrv -99E246DB480B313A3012BC3363093CC26CD209C7.has_extrainfo false -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.address 185.100.86.128 -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.or_port 9001 -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.dir_port 9030 -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.nickname TorExitFinland -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.has_extrainfo false -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.orport6_address 2a06:1700:1::11 -9B31F1F1C1554F9FFB3455911F82E818EF7C7883.orport6_port 9001 -9B816A5B3EB20B8E4E9B9D1FBA299BD3F40F0320.address 185.220.101.49 -9B816A5B3EB20B8E4E9B9D1FBA299BD3F40F0320.or_port 20049 -9B816A5B3EB20B8E4E9B9D1FBA299BD3F40F0320.dir_port 10049 -9B816A5B3EB20B8E4E9B9D1FBA299BD3F40F0320.nickname niftypygmyjerboa -9B816A5B3EB20B8E4E9B9D1FBA299BD3F40F0320.has_extrainfo false -9C900A7F6F5DD034CFFD192DAEC9CCAA813DB022.address 86.105.212.130 -9C900A7F6F5DD034CFFD192DAEC9CCAA813DB022.or_port 443 -9C900A7F6F5DD034CFFD192DAEC9CCAA813DB022.dir_port 9030 -9C900A7F6F5DD034CFFD192DAEC9CCAA813DB022.nickname firstor2 -9C900A7F6F5DD034CFFD192DAEC9CCAA813DB022.has_extrainfo false -9EAD5B2D3DBD96DBC80DCE423B0C345E920A758D.address 31.185.104.19 -9EAD5B2D3DBD96DBC80DCE423B0C345E920A758D.or_port 443 -9EAD5B2D3DBD96DBC80DCE423B0C345E920A758D.dir_port 80 -9EAD5B2D3DBD96DBC80DCE423B0C345E920A758D.nickname Digitalcourage3ip1 -9EAD5B2D3DBD96DBC80DCE423B0C345E920A758D.has_extrainfo false -9F7D6E6420183C2B76D3CE99624EBC98A21A967E.address 46.28.110.244 -9F7D6E6420183C2B76D3CE99624EBC98A21A967E.or_port 443 -9F7D6E6420183C2B76D3CE99624EBC98A21A967E.dir_port 80 -9F7D6E6420183C2B76D3CE99624EBC98A21A967E.nickname Nivrim -9F7D6E6420183C2B76D3CE99624EBC98A21A967E.has_extrainfo false -A0F06C2FADF88D3A39AA3072B406F09D7095AC9E.address 46.165.230.5 -A0F06C2FADF88D3A39AA3072B406F09D7095AC9E.or_port 443 -A0F06C2FADF88D3A39AA3072B406F09D7095AC9E.dir_port 80 -A0F06C2FADF88D3A39AA3072B406F09D7095AC9E.nickname Dhalgren -A0F06C2FADF88D3A39AA3072B406F09D7095AC9E.has_extrainfo true -A2E6BB5C391CD46B38C55B4329C35304540771F1.address 81.7.3.67 -A2E6BB5C391CD46B38C55B4329C35304540771F1.or_port 443 -A2E6BB5C391CD46B38C55B4329C35304540771F1.dir_port 993 -A2E6BB5C391CD46B38C55B4329C35304540771F1.nickname BeastieJoy62 -A2E6BB5C391CD46B38C55B4329C35304540771F1.has_extrainfo true -A53C46F5B157DD83366D45A8E99A244934A14C46.address 128.31.0.13 -A53C46F5B157DD83366D45A8E99A244934A14C46.or_port 443 -A53C46F5B157DD83366D45A8E99A244934A14C46.dir_port 80 -A53C46F5B157DD83366D45A8E99A244934A14C46.nickname csailmitexit -A53C46F5B157DD83366D45A8E99A244934A14C46.has_extrainfo false -A86EC24F5B8B964F67AC7C27CE92842025983274.address 185.246.152.22 -A86EC24F5B8B964F67AC7C27CE92842025983274.or_port 443 -A86EC24F5B8B964F67AC7C27CE92842025983274.dir_port 9030 -A86EC24F5B8B964F67AC7C27CE92842025983274.nickname angeltest19 -A86EC24F5B8B964F67AC7C27CE92842025983274.has_extrainfo false -A9406A006D6E7B5DA30F2C6D4E42A338B5E340B2.address 163.172.149.122 -A9406A006D6E7B5DA30F2C6D4E42A338B5E340B2.or_port 443 -A9406A006D6E7B5DA30F2C6D4E42A338B5E340B2.dir_port 80 -A9406A006D6E7B5DA30F2C6D4E42A338B5E340B2.nickname niij03 -A9406A006D6E7B5DA30F2C6D4E42A338B5E340B2.has_extrainfo false -AC2BEDD0BAC72838EA7E6F113F856C4E8018ACDB.address 176.10.107.180 -AC2BEDD0BAC72838EA7E6F113F856C4E8018ACDB.or_port 9001 -AC2BEDD0BAC72838EA7E6F113F856C4E8018ACDB.dir_port 9030 -AC2BEDD0BAC72838EA7E6F113F856C4E8018ACDB.nickname schokomilch -AC2BEDD0BAC72838EA7E6F113F856C4E8018ACDB.has_extrainfo false -ACDD9E85A05B127BA010466C13C8C47212E8A38F.address 185.129.62.62 -ACDD9E85A05B127BA010466C13C8C47212E8A38F.or_port 9001 -ACDD9E85A05B127BA010466C13C8C47212E8A38F.dir_port 9030 -ACDD9E85A05B127BA010466C13C8C47212E8A38F.nickname kramse -ACDD9E85A05B127BA010466C13C8C47212E8A38F.has_extrainfo false -ACDD9E85A05B127BA010466C13C8C47212E8A38F.orport6_address 2a06:d380:0:3700::62 -ACDD9E85A05B127BA010466C13C8C47212E8A38F.orport6_port 9001 -ADB2C26629643DBB9F8FE0096E7D16F9414B4F8D.address 31.185.104.20 -ADB2C26629643DBB9F8FE0096E7D16F9414B4F8D.or_port 443 -ADB2C26629643DBB9F8FE0096E7D16F9414B4F8D.dir_port 80 -ADB2C26629643DBB9F8FE0096E7D16F9414B4F8D.nickname Digitalcourage3ip2 -ADB2C26629643DBB9F8FE0096E7D16F9414B4F8D.has_extrainfo false -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.address 45.79.108.130 -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.or_port 9001 -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.dir_port 9030 -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.nickname linss -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.has_extrainfo false -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.orport6_address 2600:3c01:e000:131::8000:0 -AEDAC7081AE14B8D241ECF0FF17A2858AB4383D0.orport6_port 9001 -B0553175AADB0501E5A61FC61CEA3970BE130FF2.address 5.9.147.226 -B0553175AADB0501E5A61FC61CEA3970BE130FF2.or_port 9001 -B0553175AADB0501E5A61FC61CEA3970BE130FF2.dir_port 9030 -B0553175AADB0501E5A61FC61CEA3970BE130FF2.nickname zwiubel -B0553175AADB0501E5A61FC61CEA3970BE130FF2.has_extrainfo false -B0553175AADB0501E5A61FC61CEA3970BE130FF2.orport6_address 2a01:4f8:190:30e1::2 -B0553175AADB0501E5A61FC61CEA3970BE130FF2.orport6_port 9001 -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.address 178.17.174.14 -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.or_port 9001 -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.dir_port 9030 -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.nickname TorExitMoldova -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.has_extrainfo false -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.orport6_address 2a00:1dc0:caff:8b::5b9a -B06F093A3D4DFAD3E923F4F28A74901BD4F74EB1.orport6_port 9001 -B143D439B72D239A419F8DCE07B8A8EB1B486FA7.address 212.129.62.232 -B143D439B72D239A419F8DCE07B8A8EB1B486FA7.or_port 443 -B143D439B72D239A419F8DCE07B8A8EB1B486FA7.dir_port 80 -B143D439B72D239A419F8DCE07B8A8EB1B486FA7.nickname wardsback -B143D439B72D239A419F8DCE07B8A8EB1B486FA7.has_extrainfo false -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.address 199.249.230.64 -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.or_port 443 -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.dir_port 80 -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.nickname Quintex41 -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.has_extrainfo false -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.orport6_address 2620:7:6001::ffff:c759:e640 -B2197C23A4FF5D1C49EE45BA7688BA8BCCD89A0B.orport6_port 80 -B291D30517D23299AD7CEE3E60DFE60D0E3A4664.address 136.243.214.137 -B291D30517D23299AD7CEE3E60DFE60D0E3A4664.or_port 443 -B291D30517D23299AD7CEE3E60DFE60D0E3A4664.dir_port 80 -B291D30517D23299AD7CEE3E60DFE60D0E3A4664.nickname TorKIT -B291D30517D23299AD7CEE3E60DFE60D0E3A4664.has_extrainfo false -B4CAFD9CBFB34EC5DAAC146920DC7DFAFE91EA20.address 212.47.233.86 -B4CAFD9CBFB34EC5DAAC146920DC7DFAFE91EA20.or_port 9001 -B4CAFD9CBFB34EC5DAAC146920DC7DFAFE91EA20.dir_port 9030 -B4CAFD9CBFB34EC5DAAC146920DC7DFAFE91EA20.nickname netimanmu -B4CAFD9CBFB34EC5DAAC146920DC7DFAFE91EA20.has_extrainfo false -B5212DB685A2A0FCFBAE425738E478D12361710D.address 93.115.97.242 -B5212DB685A2A0FCFBAE425738E478D12361710D.or_port 9001 -B5212DB685A2A0FCFBAE425738E478D12361710D.dir_port 9030 -B5212DB685A2A0FCFBAE425738E478D12361710D.nickname firstor -B5212DB685A2A0FCFBAE425738E478D12361710D.has_extrainfo false -B57A87009FA838471FB2227DDE68165AB2A2FCC4.address 51.38.134.104 -B57A87009FA838471FB2227DDE68165AB2A2FCC4.or_port 443 -B57A87009FA838471FB2227DDE68165AB2A2FCC4.dir_port 9030 -B57A87009FA838471FB2227DDE68165AB2A2FCC4.nickname angeltest5 -B57A87009FA838471FB2227DDE68165AB2A2FCC4.has_extrainfo false -B83DC1558F0D34353BB992EF93AFEAFDB226A73E.address 193.11.114.46 -B83DC1558F0D34353BB992EF93AFEAFDB226A73E.or_port 9003 -B83DC1558F0D34353BB992EF93AFEAFDB226A73E.dir_port 9032 -B83DC1558F0D34353BB992EF93AFEAFDB226A73E.nickname mdfnet3 -B83DC1558F0D34353BB992EF93AFEAFDB226A73E.has_extrainfo false -B84F248233FEA90CAD439F292556A3139F6E1B82.address 85.248.227.164 -B84F248233FEA90CAD439F292556A3139F6E1B82.or_port 9002 -B84F248233FEA90CAD439F292556A3139F6E1B82.dir_port 444 -B84F248233FEA90CAD439F292556A3139F6E1B82.nickname tollana -B84F248233FEA90CAD439F292556A3139F6E1B82.has_extrainfo false -B84F248233FEA90CAD439F292556A3139F6E1B82.orport6_address 2a00:1298:8011:212::164 -B84F248233FEA90CAD439F292556A3139F6E1B82.orport6_port 9004 -B86137AE9681701901C6720E55C16805B46BD8E3.address 81.7.11.186 -B86137AE9681701901C6720E55C16805B46BD8E3.or_port 443 -B86137AE9681701901C6720E55C16805B46BD8E3.dir_port 1080 -B86137AE9681701901C6720E55C16805B46BD8E3.nickname BeastieJoy60 -B86137AE9681701901C6720E55C16805B46BD8E3.has_extrainfo true -BB60F5BA113A0B8B44B7B37DE3567FE561E92F78.address 51.15.179.153 -BB60F5BA113A0B8B44B7B37DE3567FE561E92F78.or_port 995 -BB60F5BA113A0B8B44B7B37DE3567FE561E92F78.dir_port 110 -BB60F5BA113A0B8B44B7B37DE3567FE561E92F78.nickname Casper04 -BB60F5BA113A0B8B44B7B37DE3567FE561E92F78.has_extrainfo false -BCEDF6C193AA687AE471B8A22EBF6BC57C2D285E.address 198.96.155.3 -BCEDF6C193AA687AE471B8A22EBF6BC57C2D285E.or_port 5001 -BCEDF6C193AA687AE471B8A22EBF6BC57C2D285E.dir_port 8080 -BCEDF6C193AA687AE471B8A22EBF6BC57C2D285E.nickname gurgle -BCEDF6C193AA687AE471B8A22EBF6BC57C2D285E.has_extrainfo false -BCEF908195805E03E92CCFE669C48738E556B9C5.address 128.199.55.207 -BCEF908195805E03E92CCFE669C48738E556B9C5.or_port 9001 -BCEF908195805E03E92CCFE669C48738E556B9C5.dir_port 9030 -BCEF908195805E03E92CCFE669C48738E556B9C5.nickname EldritchReaper -BCEF908195805E03E92CCFE669C48738E556B9C5.has_extrainfo false -BCEF908195805E03E92CCFE669C48738E556B9C5.orport6_address 2a03:b0c0:2:d0::158:3001 -BCEF908195805E03E92CCFE669C48738E556B9C5.orport6_port 9001 -BD552C165E2ED2887D3F1CCE9CFF155DDA2D86E6.address 213.141.138.174 -BD552C165E2ED2887D3F1CCE9CFF155DDA2D86E6.or_port 9001 -BD552C165E2ED2887D3F1CCE9CFF155DDA2D86E6.dir_port 9030 -BD552C165E2ED2887D3F1CCE9CFF155DDA2D86E6.nickname Schakalium -BD552C165E2ED2887D3F1CCE9CFF155DDA2D86E6.has_extrainfo false -BF0FB582E37F738CD33C3651125F2772705BB8E8.address 148.251.190.229 -BF0FB582E37F738CD33C3651125F2772705BB8E8.or_port 9010 -BF0FB582E37F738CD33C3651125F2772705BB8E8.dir_port 9030 -BF0FB582E37F738CD33C3651125F2772705BB8E8.nickname quadhead -BF0FB582E37F738CD33C3651125F2772705BB8E8.has_extrainfo false -BF0FB582E37F738CD33C3651125F2772705BB8E8.orport6_address 2a01:4f8:211:c68::2 -BF0FB582E37F738CD33C3651125F2772705BB8E8.orport6_port 9010 -BF735F669481EE1CCC348F0731551C933D1E2278.address 212.47.233.250 -BF735F669481EE1CCC348F0731551C933D1E2278.or_port 9001 -BF735F669481EE1CCC348F0731551C933D1E2278.dir_port 9030 -BF735F669481EE1CCC348F0731551C933D1E2278.nickname FreewaySca -BF735F669481EE1CCC348F0731551C933D1E2278.has_extrainfo false -BF735F669481EE1CCC348F0731551C933D1E2278.orport6_address 2001:bc8:4400:2b00::1c:629 -BF735F669481EE1CCC348F0731551C933D1E2278.orport6_port 9001 -C0192FF43E777250084175F4E59AC1BA2290CE38.address 192.160.102.169 -C0192FF43E777250084175F4E59AC1BA2290CE38.or_port 9001 -C0192FF43E777250084175F4E59AC1BA2290CE38.dir_port 80 -C0192FF43E777250084175F4E59AC1BA2290CE38.nickname manipogo -C0192FF43E777250084175F4E59AC1BA2290CE38.has_extrainfo false -C0192FF43E777250084175F4E59AC1BA2290CE38.orport6_address 2620:132:300c:c01d::9 -C0192FF43E777250084175F4E59AC1BA2290CE38.orport6_port 9002 -C0C4F339046EB824999F711D178472FDF53BE7F5.address 132.248.241.5 -C0C4F339046EB824999F711D178472FDF53BE7F5.or_port 9101 -C0C4F339046EB824999F711D178472FDF53BE7F5.dir_port 9130 -C0C4F339046EB824999F711D178472FDF53BE7F5.nickname toritounam2 -C0C4F339046EB824999F711D178472FDF53BE7F5.has_extrainfo false -C2AAB088555850FC434E68943F551072042B85F1.address 31.185.104.21 -C2AAB088555850FC434E68943F551072042B85F1.or_port 443 -C2AAB088555850FC434E68943F551072042B85F1.dir_port 80 -C2AAB088555850FC434E68943F551072042B85F1.nickname Digitalcourage3ip3 -C2AAB088555850FC434E68943F551072042B85F1.has_extrainfo false -C36A434DB54C66E1A97A5653858CE36024352C4D.address 50.7.74.170 -C36A434DB54C66E1A97A5653858CE36024352C4D.or_port 9001 -C36A434DB54C66E1A97A5653858CE36024352C4D.dir_port 9030 -C36A434DB54C66E1A97A5653858CE36024352C4D.nickname theia9 -C36A434DB54C66E1A97A5653858CE36024352C4D.has_extrainfo false -C36A434DB54C66E1A97A5653858CE36024352C4D.orport6_address 2001:49f0:d002:2::59 -C36A434DB54C66E1A97A5653858CE36024352C4D.orport6_port 443 -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.address 85.248.227.163 -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.or_port 9001 -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.dir_port 443 -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.nickname ori -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.has_extrainfo false -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.orport6_address 2a00:1298:8011:212::163 -C793AB88565DDD3C9E4C6F15CCB9D8C7EF964CE9.orport6_port 9003 -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.address 192.160.102.165 -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.or_port 9001 -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.dir_port 80 -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.nickname cowcat -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.has_extrainfo false -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.orport6_address 2620:132:300c:c01d::5 -C90CA3B7FE01A146B8268D56977DC4A2C024B9EA.orport6_port 9002 -CBD0D1BD110EC52963082D839AC6A89D0AE243E7.address 176.31.103.150 -CBD0D1BD110EC52963082D839AC6A89D0AE243E7.or_port 9001 -CBD0D1BD110EC52963082D839AC6A89D0AE243E7.dir_port 9030 -CBD0D1BD110EC52963082D839AC6A89D0AE243E7.nickname UV74S7mjxRcYVrGsAMw -CBD0D1BD110EC52963082D839AC6A89D0AE243E7.has_extrainfo false -D15AFF44BE641368B958A32FB6B071AC2136B8B1.address 51.254.147.57 -D15AFF44BE641368B958A32FB6B071AC2136B8B1.or_port 443 -D15AFF44BE641368B958A32FB6B071AC2136B8B1.dir_port 80 -D15AFF44BE641368B958A32FB6B071AC2136B8B1.nickname Cosworth01 -D15AFF44BE641368B958A32FB6B071AC2136B8B1.has_extrainfo false -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.address 50.7.74.172 -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.or_port 443 -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.dir_port 80 -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.nickname theia2 -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.has_extrainfo false -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.orport6_address 2001:49f0:d002:2::52 -D1AFBF3117B308B6D1A7AA762B1315FD86A6B8AF.orport6_port 443 -D379A1CB8285748FFF64AE94296CA89878F25B22.address 62.141.38.69 -D379A1CB8285748FFF64AE94296CA89878F25B22.or_port 443 -D379A1CB8285748FFF64AE94296CA89878F25B22.dir_port 9030 -D379A1CB8285748FFF64AE94296CA89878F25B22.nickname angeltest3 -D379A1CB8285748FFF64AE94296CA89878F25B22.has_extrainfo false -D379A1CB8285748FFF64AE94296CA89878F25B22.orport6_address 2001:4ba0:cafe:ac5::1 -D379A1CB8285748FFF64AE94296CA89878F25B22.orport6_port 443 -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.address 5.45.111.149 -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.or_port 443 -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.dir_port 80 -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.nickname gGDHjdcC6zAlM8k08lY -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.has_extrainfo false -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.orport6_address 2a03:4000:6:2388:df98:15f9:b34d:443 -D405FCCF06ADEDF898DF2F29C9348DCB623031BA.orport6_port 443 -D50101A2ABD09DC245F7E96C0818D003CDD62351.address 50.7.74.174 -D50101A2ABD09DC245F7E96C0818D003CDD62351.or_port 443 -D50101A2ABD09DC245F7E96C0818D003CDD62351.dir_port 80 -D50101A2ABD09DC245F7E96C0818D003CDD62351.nickname theia6 -D50101A2ABD09DC245F7E96C0818D003CDD62351.has_extrainfo false -D50101A2ABD09DC245F7E96C0818D003CDD62351.orport6_address 2001:49f0:d002:2::56 -D50101A2ABD09DC245F7E96C0818D003CDD62351.orport6_port 443 -D5039E1EBFD96D9A3F9846BF99EC9F75EDDE902A.address 37.187.115.157 -D5039E1EBFD96D9A3F9846BF99EC9F75EDDE902A.or_port 9001 -D5039E1EBFD96D9A3F9846BF99EC9F75EDDE902A.dir_port 9030 -D5039E1EBFD96D9A3F9846BF99EC9F75EDDE902A.nickname Janky328891 -D5039E1EBFD96D9A3F9846BF99EC9F75EDDE902A.has_extrainfo false -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.address 85.10.201.47 -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.or_port 9001 -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.dir_port 9030 -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.nickname sif -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.has_extrainfo false -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.orport6_address 2a01:4f8:a0:43eb::beef -D8B7A3A6542AA54D0946B9DC0257C53B6C376679.orport6_port 9001 -DAA39FC00B196B353C2A271459C305C429AF09E4.address 193.35.52.53 -DAA39FC00B196B353C2A271459C305C429AF09E4.or_port 9001 -DAA39FC00B196B353C2A271459C305C429AF09E4.dir_port 9030 -DAA39FC00B196B353C2A271459C305C429AF09E4.nickname Arne -DAA39FC00B196B353C2A271459C305C429AF09E4.has_extrainfo false -DB2682153AC0CCAECD2BD1E9EBE99C6815807A1E.address 54.36.237.163 -DB2682153AC0CCAECD2BD1E9EBE99C6815807A1E.or_port 443 -DB2682153AC0CCAECD2BD1E9EBE99C6815807A1E.dir_port 80 -DB2682153AC0CCAECD2BD1E9EBE99C6815807A1E.nickname GermanCraft2 -DB2682153AC0CCAECD2BD1E9EBE99C6815807A1E.has_extrainfo false -DC163DDEF4B6F0C6BC226F9F6656A5A30C5C5686.address 176.158.236.102 -DC163DDEF4B6F0C6BC226F9F6656A5A30C5C5686.or_port 9001 -DC163DDEF4B6F0C6BC226F9F6656A5A30C5C5686.dir_port 9030 -DC163DDEF4B6F0C6BC226F9F6656A5A30C5C5686.nickname Underworld -DC163DDEF4B6F0C6BC226F9F6656A5A30C5C5686.has_extrainfo false -DD823AFB415380A802DCAEB9461AE637604107FB.address 178.33.183.251 -DD823AFB415380A802DCAEB9461AE637604107FB.or_port 443 -DD823AFB415380A802DCAEB9461AE637604107FB.dir_port 80 -DD823AFB415380A802DCAEB9461AE637604107FB.nickname grenouille -DD823AFB415380A802DCAEB9461AE637604107FB.has_extrainfo false -DD823AFB415380A802DCAEB9461AE637604107FB.orport6_address 2001:41d0:2:a683::251 -DD823AFB415380A802DCAEB9461AE637604107FB.orport6_port 443 -DD8BD7307017407FCC36F8D04A688F74A0774C02.address 171.25.193.20 -DD8BD7307017407FCC36F8D04A688F74A0774C02.or_port 443 -DD8BD7307017407FCC36F8D04A688F74A0774C02.dir_port 80 -DD8BD7307017407FCC36F8D04A688F74A0774C02.nickname DFRI0 -DD8BD7307017407FCC36F8D04A688F74A0774C02.has_extrainfo false -DD8BD7307017407FCC36F8D04A688F74A0774C02.orport6_address 2001:67c:289c::20 -DD8BD7307017407FCC36F8D04A688F74A0774C02.orport6_port 443 -DED6892FF89DBD737BA689698A171B2392EB3E82.address 92.222.38.67 -DED6892FF89DBD737BA689698A171B2392EB3E82.or_port 443 -DED6892FF89DBD737BA689698A171B2392EB3E82.dir_port 80 -DED6892FF89DBD737BA689698A171B2392EB3E82.nickname ThorExit -DED6892FF89DBD737BA689698A171B2392EB3E82.has_extrainfo false -DED6892FF89DBD737BA689698A171B2392EB3E82.orport6_address 2001:41d0:52:100::112a -DED6892FF89DBD737BA689698A171B2392EB3E82.orport6_port 443 -E41B16F7DDF52EBB1DB4268AB2FE340B37AD8904.address 166.70.207.2 -E41B16F7DDF52EBB1DB4268AB2FE340B37AD8904.or_port 9101 -E41B16F7DDF52EBB1DB4268AB2FE340B37AD8904.dir_port 9130 -E41B16F7DDF52EBB1DB4268AB2FE340B37AD8904.nickname xmission1 -E41B16F7DDF52EBB1DB4268AB2FE340B37AD8904.has_extrainfo false -E51620B90DCB310138ED89EDEDD0A5C361AAE24E.address 185.100.86.182 -E51620B90DCB310138ED89EDEDD0A5C361AAE24E.or_port 8080 -E51620B90DCB310138ED89EDEDD0A5C361AAE24E.dir_port 9030 -E51620B90DCB310138ED89EDEDD0A5C361AAE24E.nickname NormalCitizen -E51620B90DCB310138ED89EDEDD0A5C361AAE24E.has_extrainfo false -E81EF60A73B3809F8964F73766B01BAA0A171E20.address 212.47.244.38 -E81EF60A73B3809F8964F73766B01BAA0A171E20.or_port 443 -E81EF60A73B3809F8964F73766B01BAA0A171E20.dir_port 8080 -E81EF60A73B3809F8964F73766B01BAA0A171E20.nickname Chimborazo -E81EF60A73B3809F8964F73766B01BAA0A171E20.has_extrainfo false -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.address 185.4.132.148 -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.or_port 443 -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.dir_port 80 -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.nickname libreonion1 -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.has_extrainfo false -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.orport6_address 2a02:c500:2:f0::5492 -E8D114B3C78D8E6E7FEB1004650DD632C2143C9E.orport6_port 443 -EBE718E1A49EE229071702964F8DB1F318075FF8.address 131.188.40.188 -EBE718E1A49EE229071702964F8DB1F318075FF8.or_port 80 -EBE718E1A49EE229071702964F8DB1F318075FF8.dir_port 1443 -EBE718E1A49EE229071702964F8DB1F318075FF8.nickname fluxe4 -EBE718E1A49EE229071702964F8DB1F318075FF8.has_extrainfo true -EBE718E1A49EE229071702964F8DB1F318075FF8.orport6_address 2001:638:a000:4140::ffff:188 -EBE718E1A49EE229071702964F8DB1F318075FF8.orport6_port 80 -ED2338CAC2711B3E331392E1ED2831219B794024.address 192.87.28.28 -ED2338CAC2711B3E331392E1ED2831219B794024.or_port 9001 -ED2338CAC2711B3E331392E1ED2831219B794024.dir_port 9030 -ED2338CAC2711B3E331392E1ED2831219B794024.nickname SEC6xFreeBSD64 -ED2338CAC2711B3E331392E1ED2831219B794024.has_extrainfo false -ED2338CAC2711B3E331392E1ED2831219B794024.orport6_address 2001:678:230:3028:192:87:28:28 -ED2338CAC2711B3E331392E1ED2831219B794024.orport6_port 9001 -EE4AF632058F0734C1426B1AD689F47445CA2056.address 37.252.187.111 -EE4AF632058F0734C1426B1AD689F47445CA2056.or_port 443 -EE4AF632058F0734C1426B1AD689F47445CA2056.dir_port 9030 -EE4AF632058F0734C1426B1AD689F47445CA2056.nickname angeltest7 -EE4AF632058F0734C1426B1AD689F47445CA2056.has_extrainfo false -EE4AF632058F0734C1426B1AD689F47445CA2056.orport6_address 2a00:63c1:c:111::2 -EE4AF632058F0734C1426B1AD689F47445CA2056.orport6_port 443 -EFEACD781604EB80FBC025EDEDEA2D523AEAAA2F.address 217.182.75.181 -EFEACD781604EB80FBC025EDEDEA2D523AEAAA2F.or_port 9001 -EFEACD781604EB80FBC025EDEDEA2D523AEAAA2F.dir_port 9030 -EFEACD781604EB80FBC025EDEDEA2D523AEAAA2F.nickname Aerodynamik02 -EFEACD781604EB80FBC025EDEDEA2D523AEAAA2F.has_extrainfo false -F10BDE279AE71515DDCCCC61DC19AC8765F8A3CC.address 193.70.112.165 -F10BDE279AE71515DDCCCC61DC19AC8765F8A3CC.or_port 443 -F10BDE279AE71515DDCCCC61DC19AC8765F8A3CC.dir_port 80 -F10BDE279AE71515DDCCCC61DC19AC8765F8A3CC.nickname ParkBenchInd001 -F10BDE279AE71515DDCCCC61DC19AC8765F8A3CC.has_extrainfo false -F4263275CF54A6836EE7BD527B1328836A6F06E1.address 37.187.102.108 -F4263275CF54A6836EE7BD527B1328836A6F06E1.or_port 443 -F4263275CF54A6836EE7BD527B1328836A6F06E1.dir_port 80 -F4263275CF54A6836EE7BD527B1328836A6F06E1.nickname EvilMoe -F4263275CF54A6836EE7BD527B1328836A6F06E1.has_extrainfo false -F4263275CF54A6836EE7BD527B1328836A6F06E1.orport6_address 2001:41d0:a:266c::1 -F4263275CF54A6836EE7BD527B1328836A6F06E1.orport6_port 443 -F4C0EDAA0BF0F7EC138746F8FEF1CE26C7860265.address 5.199.142.236 -F4C0EDAA0BF0F7EC138746F8FEF1CE26C7860265.or_port 9001 -F4C0EDAA0BF0F7EC138746F8FEF1CE26C7860265.dir_port 9030 -F4C0EDAA0BF0F7EC138746F8FEF1CE26C7860265.nickname tornodenumber9004 -F4C0EDAA0BF0F7EC138746F8FEF1CE26C7860265.has_extrainfo false -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.address 192.160.102.168 -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.or_port 9001 -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.dir_port 80 -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.nickname prawksi -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.has_extrainfo false -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.orport6_address 2620:132:300c:c01d::8 -F6A358DD367B3282D6EF5824C9D45E1A19C7E815.orport6_port 9002 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.address 78.47.18.110 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.or_port 80 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.dir_port 443 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.nickname fluxe3 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.has_extrainfo true -F8D27B163B9247B232A2EEE68DD8B698695C28DE.orport6_address 2a01:4f8:120:4023::110 -F8D27B163B9247B232A2EEE68DD8B698695C28DE.orport6_port 80 -F93D8F37E35C390BCAD9F9069E13085B745EC216.address 185.96.180.29 -F93D8F37E35C390BCAD9F9069E13085B745EC216.or_port 443 -F93D8F37E35C390BCAD9F9069E13085B745EC216.dir_port 80 -F93D8F37E35C390BCAD9F9069E13085B745EC216.nickname TykRelay06 -F93D8F37E35C390BCAD9F9069E13085B745EC216.has_extrainfo false -F93D8F37E35C390BCAD9F9069E13085B745EC216.orport6_address 2a00:4820::185:96:180:29 -F93D8F37E35C390BCAD9F9069E13085B745EC216.orport6_port 443 -FE296180018833AF03A8EACD5894A614623D3F76.address 149.56.45.200 -FE296180018833AF03A8EACD5894A614623D3F76.or_port 9001 -FE296180018833AF03A8EACD5894A614623D3F76.dir_port 9030 -FE296180018833AF03A8EACD5894A614623D3F76.nickname PyotrTorpotkinOne -FE296180018833AF03A8EACD5894A614623D3F76.has_extrainfo false -FE296180018833AF03A8EACD5894A614623D3F76.orport6_address 2607:5300:201:3000::17d3 -FE296180018833AF03A8EACD5894A614623D3F76.orport6_port 9002 -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.address 193.11.164.243 -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.or_port 9001 -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.dir_port 9030 -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.nickname Lule -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.has_extrainfo false -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.orport6_address 2001:6b0:7:125::243 -FFA72BD683BC2FCF988356E6BEC1E490F313FB07.orport6_port 9001 diff --git a/myenv/lib/python3.12/site-packages/stem/cached_manual.sqlite b/myenv/lib/python3.12/site-packages/stem/cached_manual.sqlite deleted file mode 100644 index a2d9b02..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/cached_manual.sqlite and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/client/__init__.py b/myenv/lib/python3.12/site-packages/stem/client/__init__.py deleted file mode 100644 index 76b5add..0000000 --- a/myenv/lib/python3.12/site-packages/stem/client/__init__.py +++ /dev/null @@ -1,393 +0,0 @@ -# Copyright 2018-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Interaction with a Tor relay's ORPort. :class:`~stem.client.Relay` is -a wrapper for :class:`~stem.socket.RelaySocket`, much the same way as -:class:`~stem.control.Controller` provides higher level functions for -:class:`~stem.socket.ControlSocket`. - -.. versionadded:: 1.7.0 - -:: - - Relay - Connection with a tor relay's ORPort. - | +- connect - Establishes a connection with a relay. - | - |- is_alive - reports if our connection is open or closed - |- connection_time - time when we last connected or disconnected - |- close - shuts down our connection - | - +- create_circuit - establishes a new circuit - - Circuit - Circuit we've established through a relay. - |- send - sends a message through this circuit - +- close - closes this circuit -""" - -import hashlib -import threading - -import stem -import stem.client.cell -import stem.socket -import stem.util.connection - -from stem.client.cell import ( - CELL_TYPE_SIZE, - FIXED_PAYLOAD_LEN, - Cell, -) - -from stem.client.datatype import ( - ZERO, - Address, - KDF, - LinkProtocol, - RelayCommand, - split, -) - -__all__ = [ - 'cell', - 'datatype', -] - -DEFAULT_LINK_PROTOCOLS = (3, 4, 5) - - -class Relay(object): - """ - Connection with a Tor relay's ORPort. - - :var int link_protocol: link protocol version we established - """ - - def __init__(self, orport, link_protocol): - # TODO: Python 3.x adds a getbuffer() method which - # lets us get the size... - # - # https://stackoverflow.com/questions/26827055/python-how-to-get-iobytes-allocated-memory-length - # - # When we drop python 2.x support we should replace - # self._orport_buffer with an io.BytesIO. - - self.link_protocol = LinkProtocol(link_protocol) - self._orport = orport - self._orport_buffer = b'' # unread bytes - self._orport_lock = threading.RLock() - self._circuits = {} - - @staticmethod - def connect(address, port, link_protocols = DEFAULT_LINK_PROTOCOLS): - """ - Establishes a connection with the given ORPort. - - :param str address: ip address of the relay - :param int port: ORPort of the relay - :param tuple link_protocols: acceptable link protocol versions - - :raises: - * **ValueError** if address or port are invalid - * :class:`stem.SocketError` if we're unable to establish a connection - """ - - relay_addr = Address(address) - - if not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' isn't a valid port" % port) - elif not link_protocols: - raise ValueError("Connection can't be established without a link protocol.") - - try: - conn = stem.socket.RelaySocket(address, port) - except stem.SocketError as exc: - if 'Connection refused' in str(exc): - raise stem.SocketError("Failed to connect to %s:%i. Maybe it isn't an ORPort?" % (address, port)) - - # If not an ORPort (for instance, mistakenly connecting to a ControlPort - # instead) we'll likely fail during SSL negotiation. This can result - # in a variety of responses so normalizing what we can... - # - # Debian 9.5: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:661) - # Ubuntu 16.04: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:590) - # Ubuntu 12.04: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol - - if 'unknown protocol' in str(exc) or 'wrong version number' in str(exc): - raise stem.SocketError("Failed to SSL authenticate to %s:%i. Maybe it isn't an ORPort?" % (address, port)) - - raise - - # To negotiate our link protocol the first VERSIONS cell is expected to use - # a circuit ID field size from protocol version 1-3 for backward - # compatibility... - # - # The first VERSIONS cell, and any cells sent before the - # first VERSIONS cell, always have CIRCID_LEN == 2 for backward - # compatibility. - - conn.send(stem.client.cell.VersionsCell(link_protocols).pack(2)) - response = conn.recv() - - # Link negotiation ends right away if we lack a common protocol - # version. (#25139) - - if not response: - conn.close() - raise stem.SocketError('Unable to establish a common link protocol with %s:%i' % (address, port)) - - versions_reply = stem.client.cell.Cell.pop(response, 2)[0] - common_protocols = set(link_protocols).intersection(versions_reply.versions) - - if not common_protocols: - conn.close() - raise stem.SocketError('Unable to find a common link protocol. We support %s but %s:%i supports %s.' % (', '.join(link_protocols), address, port, ', '.join(versions_reply.versions))) - - # Establishing connections requires sending a NETINFO, but including our - # address is optional. We can revisit including it when we have a usecase - # where it would help. - - link_protocol = max(common_protocols) - conn.send(stem.client.cell.NetinfoCell(relay_addr, []).pack(link_protocol)) - - return Relay(conn, link_protocol) - - def _recv(self, raw = False): - """ - Reads the next cell from our ORPort. If none is present this blocks - until one is available. - - :param bool raw: provides bytes rather than parsing as a cell if **True** - - :returns: next :class:`~stem.client.cell.Cell` - """ - - with self._orport_lock: - # cells begin with [circ_id][cell_type][...] - - circ_id_size = self.link_protocol.circ_id_size.size - - while len(self._orport_buffer) < (circ_id_size + CELL_TYPE_SIZE.size): - self._orport_buffer += self._orport.recv() # read until we know the cell type - - cell_type = Cell.by_value(CELL_TYPE_SIZE.pop(self._orport_buffer[circ_id_size:])[0]) - - if cell_type.IS_FIXED_SIZE: - cell_size = circ_id_size + CELL_TYPE_SIZE.size + FIXED_PAYLOAD_LEN - else: - # variable length, our next field is the payload size - - while len(self._orport_buffer) < (circ_id_size + CELL_TYPE_SIZE.size + FIXED_PAYLOAD_LEN.size): - self._orport_buffer += self._orport.recv() # read until we know the cell size - - payload_len = FIXED_PAYLOAD_LEN.pop(self._orport_buffer[circ_id_size + CELL_TYPE_SIZE.size:])[0] - cell_size = circ_id_size + CELL_TYPE_SIZE.size + FIXED_PAYLOAD_LEN.size + payload_len - - while len(self._orport_buffer) < cell_size: - self._orport_buffer += self._orport.recv() # read until we have the full cell - - if raw: - content, self._orport_buffer = split(self._orport_buffer, cell_size) - return content - else: - cell, self._orport_buffer = Cell.pop(self._orport_buffer, self.link_protocol) - return cell - - def _msg(self, cell): - """ - Sends a cell on the ORPort and provides the response we receive in reply. - - Unfortunately unlike control sockets, ORPorts don't have generalized rules - for predictable message IO. With control sockets... - - * Each message we send receives a single reply. - * We may also receive asynchronous events marked with a 650 status. - - ORPorts by contrast receive variable length cells with differing rules on - their arrival. As such making a best effort attempt at a send-and-receive - method in which we do the following... - - * Discard any existing unread data from the socket. - * Send our request. - * Await up to a second for a reply. - - It's quite possible this is a stupid approach. If so, patches welcome. - - :param stem.client.cell.Cell cell: cell to be sent - - :returns: **generator** with the cells received in reply - """ - - self._orport.recv(timeout = 0) # discard unread data - self._orport.send(cell.pack(self.link_protocol)) - response = self._orport.recv(timeout = 1) - - for received_cell in stem.client.cell.Cell.pop(response, self.link_protocol): - yield received_cell - - def is_alive(self): - """ - Checks if our socket is currently connected. This is a pass-through for our - socket's :func:`~stem.socket.BaseSocket.is_alive` method. - - :returns: **bool** that's **True** if our socket is connected and **False** otherwise - """ - - return self._orport.is_alive() - - def connection_time(self): - """ - Provides the unix timestamp for when our socket was either connected or - disconnected. That is to say, the time we connected if we're currently - connected and the time we disconnected if we're not connected. - - :returns: **float** for when we last connected or disconnected, zero if - we've never connected - """ - - return self._orport.connection_time() - - def close(self): - """ - Closes our socket connection. This is a pass-through for our socket's - :func:`~stem.socket.BaseSocket.close` method. - """ - - with self._orport_lock: - return self._orport.close() - - def create_circuit(self): - """ - Establishes a new circuit. - """ - - with self._orport_lock: - circ_id = max(self._circuits) + 1 if self._circuits else self.link_protocol.first_circ_id - - create_fast_cell = stem.client.cell.CreateFastCell(circ_id) - created_fast_cell = None - - for cell in self._msg(create_fast_cell): - if isinstance(cell, stem.client.cell.CreatedFastCell): - created_fast_cell = cell - break - - if not created_fast_cell: - raise ValueError('We should get a CREATED_FAST response from a CREATE_FAST request') - - kdf = KDF.from_value(create_fast_cell.key_material + created_fast_cell.key_material) - - if created_fast_cell.derivative_key != kdf.key_hash: - raise ValueError('Remote failed to prove that it knows our shared key') - - circ = Circuit(self, circ_id, kdf) - self._circuits[circ.id] = circ - - return circ - - def __iter__(self): - with self._orport_lock: - for circ in self._circuits.values(): - yield circ - - def __enter__(self): - return self - - def __exit__(self, exit_type, value, traceback): - self.close() - - -class Circuit(object): - """ - Circuit through which requests can be made of a `Tor relay's ORPort - `_. - - :var stem.client.Relay relay: relay through which this circuit has been established - :var int id: circuit id - :var hashlib.sha1 forward_digest: digest for forward integrity check - :var hashlib.sha1 backward_digest: digest for backward integrity check - :var bytes forward_key: forward encryption key - :var bytes backward_key: backward encryption key - """ - - def __init__(self, relay, circ_id, kdf): - if not stem.prereq.is_crypto_available(): - raise ImportError('Circuit construction requires the cryptography module') - - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - from cryptography.hazmat.backends import default_backend - - ctr = modes.CTR(ZERO * (algorithms.AES.block_size // 8)) - - self.relay = relay - self.id = circ_id - self.forward_digest = hashlib.sha1(kdf.forward_digest) - self.backward_digest = hashlib.sha1(kdf.backward_digest) - self.forward_key = Cipher(algorithms.AES(kdf.forward_key), ctr, default_backend()).encryptor() - self.backward_key = Cipher(algorithms.AES(kdf.backward_key), ctr, default_backend()).decryptor() - - def directory(self, request, stream_id = 0): - """ - Request descriptors from the relay. - - :param str request: directory request to make - :param int stream_id: specific stream this concerns - - :returns: **str** with the requested descriptor data - """ - - with self.relay._orport_lock: - self._send(RelayCommand.BEGIN_DIR, stream_id = stream_id) - self._send(RelayCommand.DATA, request, stream_id = stream_id) - - response = [] - - while True: - # Decrypt relay cells received in response. Our digest/key only - # updates when handled successfully. - - encrypted_cell = self.relay._recv(raw = True) - - decrypted_cell, backward_key, backward_digest = stem.client.cell.RelayCell.decrypt(self.relay.link_protocol, encrypted_cell, self.backward_key, self.backward_digest) - - if self.id != decrypted_cell.circ_id: - raise stem.ProtocolError('Response should be for circuit id %i, not %i' % (self.id, decrypted_cell.circ_id)) - - self.backward_digest = backward_digest - self.backward_key = backward_key - - if decrypted_cell.command == RelayCommand.END: - return b''.join([cell.data for cell in response]) - else: - response.append(decrypted_cell) - - def _send(self, command, data = '', stream_id = 0): - """ - Sends a message over the circuit. - - :param stem.client.datatype.RelayCommand command: command to be issued - :param bytes data: message payload - :param int stream_id: specific stream this concerns - """ - - with self.relay._orport_lock: - # Encrypt and send the cell. Our digest/key only updates if the cell is - # successfully sent. - - cell = stem.client.cell.RelayCell(self.id, command, data, stream_id = stream_id) - payload, forward_key, forward_digest = cell.encrypt(self.relay.link_protocol, self.forward_key, self.forward_digest) - self.relay._orport.send(payload) - - self.forward_digest = forward_digest - self.forward_key = forward_key - - def close(self): - with self.relay._orport_lock: - self.relay._orport.send(stem.client.cell.DestroyCell(self.id).pack(self.relay.link_protocol)) - del self.relay._circuits[self.id] - - def __enter__(self): - return self - - def __exit__(self, exit_type, value, traceback): - self.close() diff --git a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/client/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 04d5a85..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/cell.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/client/__pycache__/cell.cpython-312.pyc deleted file mode 100644 index b6a105d..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/cell.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/datatype.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/client/__pycache__/datatype.cpython-312.pyc deleted file mode 100644 index b5afcd5..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/client/__pycache__/datatype.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/client/cell.py b/myenv/lib/python3.12/site-packages/stem/client/cell.py deleted file mode 100644 index 4b0f9fa..0000000 --- a/myenv/lib/python3.12/site-packages/stem/client/cell.py +++ /dev/null @@ -1,862 +0,0 @@ -# Copyright 2018-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Messages communicated over a Tor relay's ORPort. - -.. versionadded:: 1.7.0 - -**Module Overview:** - -:: - - Cell - Base class for ORPort messages. - |- CircuitCell - Circuit management. - | |- CreateCell - Create a circuit. (section 5.1) - | |- CreatedCell - Acknowledge create. (section 5.1) - | |- RelayCell - End-to-end data. (section 6.1) - | |- DestroyCell - Stop using a circuit. (section 5.4) - | |- CreateFastCell - Create a circuit, no PK. (section 5.1) - | |- CreatedFastCell - Circuit created, no PK. (section 5.1) - | |- RelayEarlyCell - End-to-end data; limited. (section 5.6) - | |- Create2Cell - Extended CREATE cell. (section 5.1) - | +- Created2Cell - Extended CREATED cell. (section 5.1) - | - |- PaddingCell - Padding negotiation. (section 7.2) - |- VersionsCell - Negotiate proto version. (section 4) - |- NetinfoCell - Time and address info. (section 4.5) - |- PaddingNegotiateCell - Padding negotiation. (section 7.2) - |- VPaddingCell - Variable-length padding. (section 7.2) - |- CertsCell - Relay certificates. (section 4.2) - |- AuthChallengeCell - Challenge value. (section 4.3) - |- AuthenticateCell - Client authentication. (section 4.5) - |- AuthorizeCell - Client authorization. (not yet used) - | - |- pack - encodes cell into bytes - |- unpack - decodes series of cells - +- pop - decodes cell with remainder -""" - -import copy -import datetime -import inspect -import os -import sys - -import stem.util - -from stem import UNDEFINED -from stem.client.datatype import HASH_LEN, ZERO, LinkProtocol, Address, Certificate, CloseReason, RelayCommand, Size, split -from stem.util import datetime_to_unix, str_tools - -FIXED_PAYLOAD_LEN = 509 # PAYLOAD_LEN, per tor-spec section 0.2 -AUTH_CHALLENGE_SIZE = 32 - -CELL_TYPE_SIZE = Size.CHAR -PAYLOAD_LEN_SIZE = Size.SHORT -RELAY_DIGEST_SIZE = Size.LONG - -STREAM_ID_REQUIRED = ( - RelayCommand.BEGIN, - RelayCommand.DATA, - RelayCommand.END, - RelayCommand.CONNECTED, - RelayCommand.RESOLVE, - RelayCommand.RESOLVED, - RelayCommand.BEGIN_DIR, -) - -STREAM_ID_DISALLOWED = ( - RelayCommand.EXTEND, - RelayCommand.EXTENDED, - RelayCommand.TRUNCATE, - RelayCommand.TRUNCATED, - RelayCommand.DROP, - RelayCommand.EXTEND2, - RelayCommand.EXTENDED2, -) - - -class Cell(object): - """ - Metadata for ORPort cells. - - Unused padding are **not** used in equality checks or hashing. If two cells - differ only in their *unused* attribute they are functionally equal. - - The following cell types explicitly don't have *unused* content: - * PaddingCell (we consider all content part of payload) - * VersionsCell (all content is unpacked and treated as a version specification) - * VPaddingCell (we consider all content part of payload) - - :var bytes unused: unused filler that padded the cell to the expected size - """ - - NAME = 'UNKNOWN' - VALUE = -1 - IS_FIXED_SIZE = False - - def __init__(self, unused = b''): - super(Cell, self).__init__() - self.unused = unused - - @staticmethod - def by_name(name): - """ - Provides cell attributes by its name. - - :param str name: cell command to fetch - - :raises: **ValueError** if cell type is invalid - """ - - for _, cls in inspect.getmembers(sys.modules[__name__]): - if name == getattr(cls, 'NAME', UNDEFINED): - return cls - - raise ValueError("'%s' isn't a valid cell type" % name) - - @staticmethod - def by_value(value): - """ - Provides cell attributes by its value. - - :param int value: cell value to fetch - - :raises: **ValueError** if cell type is invalid - """ - - for _, cls in inspect.getmembers(sys.modules[__name__]): - if value == getattr(cls, 'VALUE', UNDEFINED): - return cls - - raise ValueError("'%s' isn't a valid cell value" % value) - - def pack(self, link_protocol): - raise NotImplementedError('Packing not yet implemented for %s cells' % type(self).NAME) - - @staticmethod - def unpack(content, link_protocol): - """ - Unpacks all cells from a response. - - :param bytes content: payload to decode - :param int link_protocol: link protocol version - - :returns: :class:`~stem.client.cell.Cell` generator - - :raises: - * ValueError if content is malformed - * NotImplementedError if unable to unpack any of the cell types - """ - - while content: - cell, content = Cell.pop(content, link_protocol) - yield cell - - @staticmethod - def pop(content, link_protocol): - """ - Unpacks the first cell. - - :param bytes content: payload to decode - :param int link_protocol: link protocol version - - :returns: (:class:`~stem.client.cell.Cell`, remainder) tuple - - :raises: - * ValueError if content is malformed - * NotImplementedError if unable to unpack this cell type - """ - - link_protocol = LinkProtocol(link_protocol) - - circ_id, content = link_protocol.circ_id_size.pop(content) - command, content = CELL_TYPE_SIZE.pop(content) - cls = Cell.by_value(command) - - if cls.IS_FIXED_SIZE: - payload_len = FIXED_PAYLOAD_LEN - else: - payload_len, content = PAYLOAD_LEN_SIZE.pop(content) - - if len(content) < payload_len: - raise ValueError('%s cell should have a payload of %i bytes, but only had %i' % (cls.NAME, payload_len, len(content))) - - payload, content = split(content, payload_len) - return cls._unpack(payload, circ_id, link_protocol), content - - @classmethod - def _pack(cls, link_protocol, payload, unused = b'', circ_id = None): - """ - Provides bytes that can be used on the wire for these cell attributes. - Format of a properly packed cell depends on if it's fixed or variable - sized... - - :: - - Fixed: [ CircuitID ][ Command ][ Payload ][ Padding ] - Variable: [ CircuitID ][ Command ][ Size ][ Payload ] - - :param str name: cell command - :param int link_protocol: link protocol version - :param bytes payload: cell payload - :param int circ_id: circuit id, if a CircuitCell - - :returns: **bytes** with the encoded payload - - :raises: **ValueError** if cell type invalid or payload makes cell too large - """ - - if issubclass(cls, CircuitCell): - if circ_id is None: - raise ValueError('%s cells require a circuit identifier' % cls.NAME) - elif circ_id < 1: - raise ValueError('Circuit identifiers must a positive integer, not %s' % circ_id) - else: - if circ_id is not None: - raise ValueError('%s cells should not specify a circuit identifier' % cls.NAME) - - circ_id = 0 # cell doesn't concern a circuit, default field to zero - - link_protocol = LinkProtocol(link_protocol) - - cell = bytearray() - cell += link_protocol.circ_id_size.pack(circ_id) - cell += Size.CHAR.pack(cls.VALUE) - cell += b'' if cls.IS_FIXED_SIZE else Size.SHORT.pack(len(payload) + len(unused)) - cell += payload - - # include the unused portion (typically from unpacking) - cell += unused - - # pad fixed sized cells to the required length - - if cls.IS_FIXED_SIZE: - if len(cell) > link_protocol.fixed_cell_length: - raise ValueError('Cell of type %s is too large (%i bytes), must not be more than %i. Check payload size (was %i bytes)' % (cls.NAME, len(cell), link_protocol.fixed_cell_length, len(payload))) - - cell += ZERO * (link_protocol.fixed_cell_length - len(cell)) - - return bytes(cell) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - """ - Subclass implementation for unpacking cell content. - - :param bytes content: payload to decode - :param stem.client.datatype.LinkProtocol link_protocol: link protocol version - :param int circ_id: circuit id cell is for - - :returns: instance of this cell type - - :raises: **ValueError** if content is malformed - """ - - raise NotImplementedError('Unpacking not yet implemented for %s cells' % cls.NAME) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Cell) else False - - def __ne__(self, other): - return not self == other - - -class CircuitCell(Cell): - """ - Cell concerning circuits. - - :var int circ_id: circuit id - """ - - def __init__(self, circ_id, unused = b''): - super(CircuitCell, self).__init__(unused) - self.circ_id = circ_id - - -class PaddingCell(Cell): - """ - Randomized content to either keep activity going on a circuit. - - :var bytes payload: randomized payload - """ - - NAME = 'PADDING' - VALUE = 0 - IS_FIXED_SIZE = True - - def __init__(self, payload = None): - if not payload: - payload = os.urandom(FIXED_PAYLOAD_LEN) - elif len(payload) != FIXED_PAYLOAD_LEN: - raise ValueError('Padding payload should be %i bytes, but was %i' % (FIXED_PAYLOAD_LEN, len(payload))) - - super(PaddingCell, self).__init__() - self.payload = payload - - def pack(self, link_protocol): - return PaddingCell._pack(link_protocol, self.payload) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - return PaddingCell(content) - - def __hash__(self): - return stem.util._hash_attr(self, 'payload', cache = True) - - -class CreateCell(CircuitCell): - NAME = 'CREATE' - VALUE = 1 - IS_FIXED_SIZE = True - - def __init__(self): - super(CreateCell, self).__init__() # TODO: implement - - -class CreatedCell(CircuitCell): - NAME = 'CREATED' - VALUE = 2 - IS_FIXED_SIZE = True - - def __init__(self): - super(CreatedCell, self).__init__() # TODO: implement - - -class RelayCell(CircuitCell): - """ - Command concerning a relay circuit. - - Our 'recognized' attribute provides a cheap (but incomplete) check for if our - cell payload is encrypted. If non-zero our payload *IS* encrypted, but if - zero we're *PROBABLY* fully decrypted. This uncertainty is because encrypted - cells have a small chance of coincidently producing zero for this value as - well. - - :var stem.client.RelayCommand command: command to be issued - :var int command_int: integer value of our command - :var bytes data: payload of the cell - :var int recognized: non-zero if payload is encrypted - :var int digest: running digest held with the relay - :var int stream_id: specific stream this concerns - """ - - NAME = 'RELAY' - VALUE = 3 - IS_FIXED_SIZE = True - - def __init__(self, circ_id, command, data, digest = 0, stream_id = 0, recognized = 0, unused = b''): - if 'hash' in str(type(digest)).lower(): - # Unfortunately hashlib generates from a dynamic private class so - # isinstance() isn't such a great option. With python2/python3 the - # name is 'hashlib.HASH' whereas PyPy calls it just 'HASH' or 'Hash'. - - digest_packed = digest.digest()[:RELAY_DIGEST_SIZE.size] - digest = RELAY_DIGEST_SIZE.unpack(digest_packed) - elif stem.util._is_str(digest): - digest_packed = digest[:RELAY_DIGEST_SIZE.size] - digest = RELAY_DIGEST_SIZE.unpack(digest_packed) - elif stem.util._is_int(digest): - pass - else: - raise ValueError('RELAY cell digest must be a hash, string, or int but was a %s' % type(digest).__name__) - - super(RelayCell, self).__init__(circ_id, unused) - self.command, self.command_int = RelayCommand.get(command) - self.recognized = recognized - self.stream_id = stream_id - self.digest = digest - self.data = str_tools._to_bytes(data) - - if digest == 0: - if not stream_id and self.command in STREAM_ID_REQUIRED: - raise ValueError('%s relay cells require a stream id' % self.command) - elif stream_id and self.command in STREAM_ID_DISALLOWED: - raise ValueError('%s relay cells concern the circuit itself and cannot have a stream id' % self.command) - - def pack(self, link_protocol): - payload = bytearray() - payload += Size.CHAR.pack(self.command_int) - payload += Size.SHORT.pack(self.recognized) - payload += Size.SHORT.pack(self.stream_id) - payload += Size.LONG.pack(self.digest) - payload += Size.SHORT.pack(len(self.data)) - payload += self.data - - return RelayCell._pack(link_protocol, bytes(payload), self.unused, self.circ_id) - - @staticmethod - def decrypt(link_protocol, content, key, digest): - """ - Decrypts content as a relay cell addressed to us. This provides back a - tuple of the form... - - :: - - (cell (RelayCell), new_key (CipherContext), new_digest (HASH)) - - :param int link_protocol: link protocol version - :param bytes content: cell content to be decrypted - :param cryptography.hazmat.primitives.ciphers.CipherContext key: - key established with the relay we received this cell from - :param hashlib.HASH digest: running digest held with the relay - - :returns: **tuple** with our decrypted cell and updated key/digest - - :raises: :class:`stem.ProtocolError` if content doesn't belong to a relay - cell - """ - - new_key = copy.copy(key) - new_digest = digest.copy() - - if len(content) != link_protocol.fixed_cell_length: - raise stem.ProtocolError('RELAY cells should be %i bytes, but received %i' % (link_protocol.fixed_cell_length, len(content))) - - circ_id, content = link_protocol.circ_id_size.pop(content) - command, encrypted_payload = Size.CHAR.pop(content) - - if command != RelayCell.VALUE: - raise stem.ProtocolError('Cannot decrypt as a RELAY cell. This had command %i instead.' % command) - - payload = new_key.update(encrypted_payload) - - cell = RelayCell._unpack(payload, circ_id, link_protocol) - - # TODO: Implement our decryption digest. It is used to support relaying - # within multi-hop circuits. On first glance this should go something - # like... - # - # # Our updated digest is calculated based on this cell with a blanked - # # digest field. - # - # digest_cell = RelayCell(self.circ_id, self.command, self.data, 0, self.stream_id, self.recognized, self.unused) - # new_digest.update(digest_cell.pack(link_protocol)) - # - # is_encrypted == cell.recognized != 0 or self.digest == new_digest - # - # ... or something like that. Until we attempt to support relaying this is - # both moot and difficult to exercise in order to ensure we get it right. - - return cell, new_key, new_digest - - def encrypt(self, link_protocol, key, digest): - """ - Encrypts our cell content to be sent with the given key. This provides back - a tuple of the form... - - :: - - (payload (bytes), new_key (CipherContext), new_digest (HASH)) - - :param int link_protocol: link protocol version - :param cryptography.hazmat.primitives.ciphers.CipherContext key: - key established with the relay we're sending this cell to - :param hashlib.HASH digest: running digest held with the relay - - :returns: **tuple** with our encrypted payload and updated key/digest - """ - - new_key = copy.copy(key) - new_digest = digest.copy() - - # Digests are computed from our payload, not including our header's circuit - # id (2 or 4 bytes) and command (1 byte). - - header_size = link_protocol.circ_id_size.size + 1 - payload_without_digest = self.pack(link_protocol)[header_size:] - new_digest.update(payload_without_digest) - - # Pack a copy of ourselves with our newly calculated digest, and encrypt - # the payload. Header remains plaintext. - - cell = RelayCell(self.circ_id, self.command, self.data, new_digest, self.stream_id, self.recognized, self.unused) - header, payload = split(cell.pack(link_protocol), header_size) - - return header + new_key.update(payload), new_key, new_digest - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - command, content = Size.CHAR.pop(content) - recognized, content = Size.SHORT.pop(content) # 'recognized' field - stream_id, content = Size.SHORT.pop(content) - digest, content = Size.LONG.pop(content) - data_len, content = Size.SHORT.pop(content) - data, unused = split(content, data_len) - - if len(data) != data_len: - raise ValueError('%s cell said it had %i bytes of data, but only had %i' % (cls.NAME, data_len, len(data))) - - return RelayCell(circ_id, command, data, digest, stream_id, recognized, unused) - - def __hash__(self): - return stem.util._hash_attr(self, 'command_int', 'stream_id', 'digest', 'data', cache = True) - - -class DestroyCell(CircuitCell): - """ - Closes the given circuit. - - :var stem.client.CloseReason reason: reason the circuit is being closed - :var int reason_int: integer value of our closure reason - """ - - NAME = 'DESTROY' - VALUE = 4 - IS_FIXED_SIZE = True - - def __init__(self, circ_id, reason = CloseReason.NONE, unused = b''): - super(DestroyCell, self).__init__(circ_id, unused) - self.reason, self.reason_int = CloseReason.get(reason) - - def pack(self, link_protocol): - return DestroyCell._pack(link_protocol, Size.CHAR.pack(self.reason_int), self.unused, self.circ_id) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - reason, unused = Size.CHAR.pop(content) - return DestroyCell(circ_id, reason, unused) - - def __hash__(self): - return stem.util._hash_attr(self, 'circ_id', 'reason_int', cache = True) - - -class CreateFastCell(CircuitCell): - """ - Create a circuit with our first hop. This is lighter weight than further hops - because we've already established the relay's identity and secret key. - - :var bytes key_material: randomized key material - """ - - NAME = 'CREATE_FAST' - VALUE = 5 - IS_FIXED_SIZE = True - - def __init__(self, circ_id, key_material = None, unused = b''): - if not key_material: - key_material = os.urandom(HASH_LEN) - elif len(key_material) != HASH_LEN: - raise ValueError('Key material should be %i bytes, but was %i' % (HASH_LEN, len(key_material))) - - super(CreateFastCell, self).__init__(circ_id, unused) - self.key_material = key_material - - def pack(self, link_protocol): - return CreateFastCell._pack(link_protocol, self.key_material, self.unused, self.circ_id) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - key_material, unused = split(content, HASH_LEN) - - if len(key_material) != HASH_LEN: - raise ValueError('Key material should be %i bytes, but was %i' % (HASH_LEN, len(key_material))) - - return CreateFastCell(circ_id, key_material, unused) - - def __hash__(self): - return stem.util._hash_attr(self, 'circ_id', 'key_material', cache = True) - - -class CreatedFastCell(CircuitCell): - """ - CREATE_FAST reply. - - :var bytes key_material: randomized key material - :var bytes derivative_key: hash proving the relay knows our shared key - """ - - NAME = 'CREATED_FAST' - VALUE = 6 - IS_FIXED_SIZE = True - - def __init__(self, circ_id, derivative_key, key_material = None, unused = b''): - if not key_material: - key_material = os.urandom(HASH_LEN) - elif len(key_material) != HASH_LEN: - raise ValueError('Key material should be %i bytes, but was %i' % (HASH_LEN, len(key_material))) - - if len(derivative_key) != HASH_LEN: - raise ValueError('Derivatived key should be %i bytes, but was %i' % (HASH_LEN, len(derivative_key))) - - super(CreatedFastCell, self).__init__(circ_id, unused) - self.key_material = key_material - self.derivative_key = derivative_key - - def pack(self, link_protocol): - return CreatedFastCell._pack(link_protocol, self.key_material + self.derivative_key, self.unused, self.circ_id) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - if len(content) < HASH_LEN * 2: - raise ValueError('Key material and derivatived key should be %i bytes, but was %i' % (HASH_LEN * 2, len(content))) - - key_material, content = split(content, HASH_LEN) - derivative_key, content = split(content, HASH_LEN) - - return CreatedFastCell(circ_id, derivative_key, key_material, content) - - def __hash__(self): - return stem.util._hash_attr(self, 'circ_id', 'derivative_key', 'key_material', cache = True) - - -class VersionsCell(Cell): - """ - Link version negotiation cell. - - :var list versions: link versions - """ - - NAME = 'VERSIONS' - VALUE = 7 - IS_FIXED_SIZE = False - - def __init__(self, versions): - super(VersionsCell, self).__init__() - self.versions = versions - - def pack(self, link_protocol): - payload = b''.join([Size.SHORT.pack(v) for v in self.versions]) - return VersionsCell._pack(link_protocol, payload) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - link_protocols = [] - - while content: - version, content = Size.SHORT.pop(content) - link_protocols.append(version) - - return VersionsCell(link_protocols) - - def __hash__(self): - return stem.util._hash_attr(self, 'versions', cache = True) - - -class NetinfoCell(Cell): - """ - Information relays exchange about each other. - - :var datetime timestamp: current time - :var stem.client.datatype.Address receiver_address: receiver's OR address - :var list sender_addresses: sender's OR addresses - """ - - NAME = 'NETINFO' - VALUE = 8 - IS_FIXED_SIZE = True - - def __init__(self, receiver_address, sender_addresses, timestamp = None, unused = b''): - super(NetinfoCell, self).__init__(unused) - self.timestamp = timestamp if timestamp else datetime.datetime.now() - self.receiver_address = receiver_address - self.sender_addresses = sender_addresses - - def pack(self, link_protocol): - payload = bytearray() - payload += Size.LONG.pack(int(datetime_to_unix(self.timestamp))) - payload += self.receiver_address.pack() - payload += Size.CHAR.pack(len(self.sender_addresses)) - - for addr in self.sender_addresses: - payload += addr.pack() - - return NetinfoCell._pack(link_protocol, bytes(payload), self.unused) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - timestamp, content = Size.LONG.pop(content) - receiver_address, content = Address.pop(content) - - sender_addresses = [] - sender_addr_count, content = Size.CHAR.pop(content) - - for i in range(sender_addr_count): - addr, content = Address.pop(content) - sender_addresses.append(addr) - - return NetinfoCell(receiver_address, sender_addresses, datetime.datetime.utcfromtimestamp(timestamp), unused = content) - - def __hash__(self): - return stem.util._hash_attr(self, 'timestamp', 'receiver_address', 'sender_addresses', cache = True) - - -class RelayEarlyCell(CircuitCell): - NAME = 'RELAY_EARLY' - VALUE = 9 - IS_FIXED_SIZE = True - - def __init__(self): - super(RelayEarlyCell, self).__init__() # TODO: implement - - -class Create2Cell(CircuitCell): - NAME = 'CREATE2' - VALUE = 10 - IS_FIXED_SIZE = True - - def __init__(self): - super(Create2Cell, self).__init__() # TODO: implement - - -class Created2Cell(Cell): - NAME = 'CREATED2' - VALUE = 11 - IS_FIXED_SIZE = True - - def __init__(self): - super(Created2Cell, self).__init__() # TODO: implement - - -class PaddingNegotiateCell(Cell): - NAME = 'PADDING_NEGOTIATE' - VALUE = 12 - IS_FIXED_SIZE = True - - def __init__(self): - super(PaddingNegotiateCell, self).__init__() # TODO: implement - - -class VPaddingCell(Cell): - """ - Variable length randomized content to either keep activity going on a circuit. - - :var bytes payload: randomized payload - """ - - NAME = 'VPADDING' - VALUE = 128 - IS_FIXED_SIZE = False - - def __init__(self, size = None, payload = None): - if size is None and payload is None: - raise ValueError('VPaddingCell constructor must specify payload or size') - elif size is not None and size < 0: - raise ValueError('VPaddingCell size (%s) cannot be negative' % size) - elif size is not None and payload is not None and size != len(payload): - raise ValueError('VPaddingCell constructor specified both a size of %i bytes and payload of %i bytes' % (size, len(payload))) - - super(VPaddingCell, self).__init__() - self.payload = payload if payload is not None else os.urandom(size) - - def pack(self, link_protocol): - return VPaddingCell._pack(link_protocol, self.payload) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - return VPaddingCell(payload = content) - - def __hash__(self): - return stem.util._hash_attr(self, 'payload', cache = True) - - -class CertsCell(Cell): - """ - Certificate held by the relay we're communicating with. - - :var list certificates: :class:`~stem.client.Certificate` of the relay - """ - - NAME = 'CERTS' - VALUE = 129 - IS_FIXED_SIZE = False - - def __init__(self, certs, unused = b''): - super(CertsCell, self).__init__(unused) - self.certificates = certs - - def pack(self, link_protocol): - return CertsCell._pack(link_protocol, Size.CHAR.pack(len(self.certificates)) + b''.join([cert.pack() for cert in self.certificates]), self.unused) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - cert_count, content = Size.CHAR.pop(content) - certs = [] - - for i in range(cert_count): - if not content: - raise ValueError('CERTS cell indicates it should have %i certificates, but only contained %i' % (cert_count, len(certs))) - - cert, content = Certificate.pop(content) - certs.append(cert) - - return CertsCell(certs, unused = content) - - def __hash__(self): - return stem.util._hash_attr(self, 'certificates', cache = True) - - -class AuthChallengeCell(Cell): - """ - First step of the authentication handshake. - - :var bytes challenge: random bytes for us to sign to authenticate - :var list methods: authentication methods supported by the relay we're - communicating with - """ - - NAME = 'AUTH_CHALLENGE' - VALUE = 130 - IS_FIXED_SIZE = False - - def __init__(self, methods, challenge = None, unused = b''): - if not challenge: - challenge = os.urandom(AUTH_CHALLENGE_SIZE) - elif len(challenge) != AUTH_CHALLENGE_SIZE: - raise ValueError('AUTH_CHALLENGE must be %i bytes, but was %i' % (AUTH_CHALLENGE_SIZE, len(challenge))) - - super(AuthChallengeCell, self).__init__(unused) - self.challenge = challenge - self.methods = methods - - def pack(self, link_protocol): - payload = bytearray() - payload += self.challenge - payload += Size.SHORT.pack(len(self.methods)) - - for method in self.methods: - payload += Size.SHORT.pack(method) - - return AuthChallengeCell._pack(link_protocol, bytes(payload), self.unused) - - @classmethod - def _unpack(cls, content, circ_id, link_protocol): - min_size = AUTH_CHALLENGE_SIZE + Size.SHORT.size - if len(content) < min_size: - raise ValueError('AUTH_CHALLENGE payload should be at least %i bytes, but was %i' % (min_size, len(content))) - - challenge, content = split(content, AUTH_CHALLENGE_SIZE) - method_count, content = Size.SHORT.pop(content) - - if len(content) < method_count * Size.SHORT.size: - raise ValueError('AUTH_CHALLENGE should have %i methods, but only had %i bytes for it' % (method_count, len(content))) - - methods = [] - - for i in range(method_count): - method, content = Size.SHORT.pop(content) - methods.append(method) - - return AuthChallengeCell(methods, challenge, unused = content) - - def __hash__(self): - return stem.util._hash_attr(self, 'challenge', 'methods', cache = True) - - -class AuthenticateCell(Cell): - NAME = 'AUTHENTICATE' - VALUE = 131 - IS_FIXED_SIZE = False - - def __init__(self): - super(AuthenticateCell, self).__init__() # TODO: implement - - -class AuthorizeCell(Cell): - NAME = 'AUTHORIZE' - VALUE = 132 - IS_FIXED_SIZE = False - - def __init__(self): - super(AuthorizeCell, self).__init__() # TODO: implement diff --git a/myenv/lib/python3.12/site-packages/stem/client/datatype.py b/myenv/lib/python3.12/site-packages/stem/client/datatype.py deleted file mode 100644 index ac417b8..0000000 --- a/myenv/lib/python3.12/site-packages/stem/client/datatype.py +++ /dev/null @@ -1,751 +0,0 @@ -# Copyright 2018-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Support for `Tor's ORPort protocol -`_. - -**This module only consists of low level components, and is not intended for -users.** See our :class:`~stem.client.Relay` the API you probably want. - -.. versionadded:: 1.7.0 - -:: - - split - splits bytes into substrings - - LinkProtocol - ORPort protocol version. - - Field - Packable and unpackable datatype. - |- LinkSpecifier - Communication method relays in a circuit. - | |- LinkByIPv4 - TLS connection to an IPv4 address. - | |- LinkByIPv6 - TLS connection to an IPv6 address. - | |- LinkByFingerprint - SHA1 identity fingerprint. - | +- LinkByEd25519 - Ed25519 identity fingerprint. - | - |- Size - Field of a static size. - |- Address - Relay address. - |- Certificate - Relay certificate. - | - |- pack - encodes content - |- unpack - decodes content - +- pop - decodes content with remainder - - KDF - KDF-TOR derivatived attributes - +- from_value - parses key material - -.. data:: AddrType (enum) - - Form an address takes. - - ===================== =========== - AddressType Description - ===================== =========== - **HOSTNAME** relay hostname - **IPv4** IPv4 address - **IPv6** IPv6 address - **ERROR_TRANSIENT** temporarily error retrieving address - **ERROR_PERMANENT** permanent error retrieving address - **UNKNOWN** unrecognized address type - ===================== =========== - -.. data:: RelayCommand (enum) - - Command concerning streams and circuits we've established with a relay. - Commands have two characteristics... - - * **forward/backward**: **forward** commands are issued from the orgin, - whereas **backward** come from the relay - - * **stream/circuit**: **steam** commands concern an individual steam, whereas - **circuit** concern the entire circuit we've established with a relay - - ===================== =========== - RelayCommand Description - ===================== =========== - **BEGIN** begin a stream (**forward**, **stream**) - **DATA** transmit data (**forward/backward**, **stream**) - **END** end a stream (**forward/backward**, **stream**) - **CONNECTED** BEGIN reply (**backward**, **stream**) - **SENDME** ready to accept more cells (**forward/backward**, **stream/circuit**) - **EXTEND** extend the circuit through another relay (**forward**, **circuit**) - **EXTENDED** EXTEND reply (**backward**, **circuit**) - **TRUNCATE** remove last circuit hop (**forward**, **circuit**) - **TRUNCATED** TRUNCATE reply (**backward**, **circuit**) - **DROP** ignorable no-op (**forward/backward**, **circuit**) - **RESOLVE** request DNS resolution (**forward**, **stream**) - **RESOLVED** RESOLVE reply (**backward**, **stream**) - **BEGIN_DIR** request descriptor (**forward**, **steam**) - **EXTEND2** ntor EXTEND request (**forward**, **circuit**) - **EXTENDED2** EXTEND2 reply (**backward**, **circuit**) - **UNKNOWN** unrecognized command - ===================== =========== - -.. data:: CertType (enum) - - Certificate purpose. For more information see... - - * `tor-spec.txt `_ section 4.2 - * `cert-spec.txt `_ section A.1 - * `rend-spec-v3.txt `_ appendix E - - .. versionchanged:: 1.8.0 - Added the ED25519_SIGNING, LINK_CERT, ED25519_AUTHENTICATE, - ED25519_IDENTITY, HS_V3_DESC_SIGNING, HS_V3_INTRO_AUTH, NTOR_ONION_KEY, - and HS_V3_NTOR_ENC certificate types. - - ========================= =========== - CertType Description - ========================= =========== - **LINK** link key certificate certified by RSA1024 identity - **IDENTITY** RSA1024 Identity certificate - **AUTHENTICATE** RSA1024 AUTHENTICATE cell link certificate - **ED25519_SIGNING** Ed25519 signing key, signed with identity key - **LINK_CERT** TLS link certificate, signed with ed25519 signing key - **ED25519_AUTHENTICATE** Ed25519 AUTHENTICATE cell key, signed with ed25519 signing key - **ED25519_IDENTITY** Ed25519 identity, signed with RSA identity - **HS_V3_DESC_SIGNING** hidden service v3 short-term descriptor signing key - **HS_V3_INTRO_AUTH** hidden service v3 introduction point authentication key - **NTOR_ONION_KEY** ntor onion key cross-certifying ed25519 identity key - **HS_V3_NTOR_ENC** hidden service v3 ntor-extra encryption key - **UNKNOWN** unrecognized certificate type - ========================= =========== - -.. data:: CloseReason (enum) - - Reason a relay is closed. - - ===================== =========== - CloseReason Description - ===================== =========== - **NONE** no reason given - **PROTOCOL** tor protocol violation - **INTERNAL** internal error - **REQUESTED** client sent a TRUNCATE command - **HIBERNATING** relay suspended, trying to save bandwidth - **RESOURCELIMIT** out of memory, sockets, or circuit IDs - **CONNECTFAILED** unable to reach relay - **OR_IDENTITY** connected, but its OR identity was not as expected - **OR_CONN_CLOSED** connection that was carrying this circuit died - **FINISHED** circuit has expired for being dirty or old - **TIMEOUT** circuit construction took too long - **DESTROYED** circuit was destroyed without a client TRUNCATE - **NOSUCHSERVICE** request was for an unknown hidden service - **UNKNOWN** unrecognized reason - ===================== =========== -""" - -import binascii -import collections -import hashlib -import struct - -import stem.client.cell -import stem.prereq -import stem.util -import stem.util.connection -import stem.util.enum - -ZERO = b'\x00' -HASH_LEN = 20 -KEY_LEN = 16 - - -class _IntegerEnum(stem.util.enum.Enum): - """ - Integer backed enumeration. Enumerations of this type always have an implicit - **UNKNOWN** value for integer values that lack a mapping. - """ - - def __init__(self, *args): - self._enum_to_int = {} - self._int_to_enum = {} - parent_args = [] - - for entry in args: - if len(entry) == 2: - enum, int_val = entry - str_val = enum - elif len(entry) == 3: - enum, str_val, int_val = entry - else: - raise ValueError('IntegerEnums can only be constructed with two or three value tuples: %s' % repr(entry)) - - self._enum_to_int[str_val] = int_val - self._int_to_enum[int_val] = str_val - parent_args.append((enum, str_val)) - - parent_args.append(('UNKNOWN', 'UNKNOWN')) - super(_IntegerEnum, self).__init__(*parent_args) - - def get(self, val): - """ - Provides the (enum, int_value) tuple for a given value. - """ - - if stem.util._is_int(val): - return self._int_to_enum.get(val, self.UNKNOWN), val - elif val in self: - return val, self._enum_to_int.get(val, val) - else: - raise ValueError("Invalid enumeration '%s', options are %s" % (val, ', '.join(self))) - - -AddrType = _IntegerEnum( - ('HOSTNAME', 0), - ('IPv4', 4), - ('IPv6', 6), - ('ERROR_TRANSIENT', 16), - ('ERROR_PERMANENT', 17), -) - -RelayCommand = _IntegerEnum( - ('BEGIN', 'RELAY_BEGIN', 1), - ('DATA', 'RELAY_DATA', 2), - ('END', 'RELAY_END', 3), - ('CONNECTED', 'RELAY_CONNECTED', 4), - ('SENDME', 'RELAY_SENDME', 5), - ('EXTEND', 'RELAY_EXTEND', 6), - ('EXTENDED', 'RELAY_EXTENDED', 7), - ('TRUNCATE', 'RELAY_TRUNCATE', 8), - ('TRUNCATED', 'RELAY_TRUNCATED', 9), - ('DROP', 'RELAY_DROP', 10), - ('RESOLVE', 'RELAY_RESOLVE', 11), - ('RESOLVED', 'RELAY_RESOLVED', 12), - ('BEGIN_DIR', 'RELAY_BEGIN_DIR', 13), - ('EXTEND2', 'RELAY_EXTEND2', 14), - ('EXTENDED2', 'RELAY_EXTENDED2', 15), -) - -CertType = _IntegerEnum( - ('LINK', 1), # (tor-spec.txt section 4.2) - ('IDENTITY', 2), # (tor-spec.txt section 4.2) - ('AUTHENTICATE', 3), # (tor-spec.txt section 4.2) - ('ED25519_SIGNING', 4), # (prop220 section 4.2) - ('LINK_CERT', 5), # (prop220 section 4.2) - ('ED25519_AUTHENTICATE', 6), # (prop220 section 4.2) - ('ED25519_IDENTITY', 7), # (prop220 section 4.2) - ('HS_V3_DESC_SIGNING', 8), # (rend-spec-v3.txt, "DESC_OUTER" description) - ('HS_V3_INTRO_AUTH', 9), # (rend-spec-v3.txt, "auth-key" description) - ('NTOR_ONION_KEY', 10), # (dir-spec.txt, "ntor-onion-key-crosscert" description) - ('HS_V3_NTOR_ENC', 11), # (rend-spec-v3.txt, "enc-key-cert" description) -) - -CloseReason = _IntegerEnum( - ('NONE', 0), - ('PROTOCOL', 1), - ('INTERNAL', 2), - ('REQUESTED', 3), - ('HIBERNATING', 4), - ('RESOURCELIMIT', 5), - ('CONNECTFAILED', 6), - ('OR_IDENTITY', 7), - ('OR_CONN_CLOSED', 8), - ('FINISHED', 9), - ('TIMEOUT', 10), - ('DESTROYED', 11), - ('NOSUCHSERVICE', 12), -) - - -def split(content, size): - """ - Simple split of bytes into two substrings. - - :param bytes content: string to split - :param int size: index to split the string on - - :returns: two value tuple with the split bytes - """ - - return content[:size], content[size:] - - -class LinkProtocol(int): - """ - Constants that vary by our link protocol version. - - :var int version: link protocol version - :var stem.client.datatype.Size circ_id_size: circuit identifier field size - :var int fixed_cell_length: size of cells with a fixed length - :var int first_circ_id: When creating circuits we pick an unused identifier - from a range that's determined by our link protocol. - """ - - def __new__(cls, version): - if isinstance(version, LinkProtocol): - return version # already a LinkProtocol - - protocol = int.__new__(cls, version) - protocol.version = version - protocol.circ_id_size = Size.LONG if version > 3 else Size.SHORT - protocol.first_circ_id = 0x80000000 if version > 3 else 0x01 - - cell_header_size = protocol.circ_id_size.size + 1 # circuit id (2 or 4 bytes) + command (1 byte) - protocol.fixed_cell_length = cell_header_size + stem.client.cell.FIXED_PAYLOAD_LEN - - return protocol - - def __hash__(self): - # All LinkProtocol attributes can be derived from our version, so that's - # all we need in our hash. Offsetting by our type so we don't hash conflict - # with ints. - - return self.version * hash(str(type(self))) - - def __eq__(self, other): - if isinstance(other, int): - return self.version == other - elif isinstance(other, LinkProtocol): - return hash(self) == hash(other) - else: - return False - - def __ne__(self, other): - return not self == other - - def __int__(self): - return self.version - - -class Field(object): - """ - Packable and unpackable datatype. - """ - - def pack(self): - """ - Encodes field into bytes. - - :returns: **bytes** that can be communicated over Tor's ORPort - - :raises: **ValueError** if incorrect type or size - """ - - raise NotImplementedError('Not yet available') - - @classmethod - def unpack(cls, packed): - """ - Decodes bytes into a field of this type. - - :param bytes packed: content to decode - - :returns: instance of this class - - :raises: **ValueError** if packed data is malformed - """ - - unpacked, remainder = cls.pop(packed) - - if remainder: - raise ValueError('%s is the wrong size for a %s field' % (repr(packed), cls.__name__)) - - return unpacked - - @staticmethod - def pop(packed): - """ - Decodes bytes as this field type, providing it and the remainder. - - :param bytes packed: content to decode - - :returns: tuple of the form (unpacked, remainder) - - :raises: **ValueError** if packed data is malformed - """ - - raise NotImplementedError('Not yet available') - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Field) else False - - def __ne__(self, other): - return not self == other - - -class Size(Field): - """ - Unsigned `struct.pack format - ` for - network-order fields. - - ==================== =========== - Pack Description - ==================== =========== - CHAR Unsigned char (1 byte) - SHORT Unsigned short (2 bytes) - LONG Unsigned long (4 bytes) - LONG_LONG Unsigned long long (8 bytes) - ==================== =========== - """ - - def __init__(self, name, size, pack_format): - self.name = name - self.size = size - self.format = pack_format - - @staticmethod - def pop(packed): - raise NotImplementedError("Use our constant's unpack() and pop() instead") - - def pack(self, content): - # TODO: Python 2.6's struct module behaves a little differently in a couple - # respsects... - # - # * Invalid types raise a TypeError rather than a struct.error. - # - # * Negative values are happily packed despite being unsigned fields with - # a message printed to stdout (!) that says... - # - # stem/client/datatype.py:362: DeprecationWarning: struct integer overflow masking is deprecated - # packed = struct.pack(self.format, content) - # stem/client/datatype.py:362: DeprecationWarning: 'B' format requires 0 <= number <= 255 - # packed = struct.pack(self.format, content) - # - # Rather than adjust this method to account for these differences doing - # duplicate upfront checks just for python 2.6. When we drop 2.6 support - # this can obviously be dropped. - - if stem.prereq._is_python_26(): - if not stem.util._is_int(content): - raise ValueError('Size.pack encodes an integer, but was a %s' % type(content).__name__) - elif content < 0: - raise ValueError('Packed values must be positive (attempted to pack %i as a %s)' % (content, self.name)) - - # TODO: When we drop python 2.x support this can be simplified via - # integer's to_bytes() method. For example... - # - # struct.pack('>Q', my_number) - # - # ... is the same as... - # - # my_number.to_bytes(8, 'big') - - try: - packed = struct.pack(self.format, content) - except struct.error: - if not stem.util._is_int(content): - raise ValueError('Size.pack encodes an integer, but was a %s' % type(content).__name__) - elif content < 0: - raise ValueError('Packed values must be positive (attempted to pack %i as a %s)' % (content, self.name)) - else: - raise # some other struct exception - - if self.size != len(packed): - raise ValueError('%s is the wrong size for a %s field' % (repr(packed), self.name)) - - return packed - - def unpack(self, packed): - if self.size != len(packed): - raise ValueError('%s is the wrong size for a %s field' % (repr(packed), self.name)) - - return struct.unpack(self.format, packed)[0] - - def pop(self, packed): - to_unpack, remainder = split(packed, self.size) - - return self.unpack(to_unpack), remainder - - def __hash__(self): - return stem.util._hash_attr(self, 'name', 'size', 'format', cache = True) - - -class Address(Field): - """ - Relay address. - - :var stem.client.AddrType type: address type - :var int type_int: integer value of the address type - :var unicode value: address value - :var bytes value_bin: encoded address value - """ - - def __init__(self, value, addr_type = None): - if addr_type is None: - if stem.util.connection.is_valid_ipv4_address(value): - addr_type = AddrType.IPv4 - elif stem.util.connection.is_valid_ipv6_address(value): - addr_type = AddrType.IPv6 - else: - raise ValueError("'%s' isn't an IPv4 or IPv6 address" % value) - - self.type, self.type_int = AddrType.get(addr_type) - - if self.type == AddrType.IPv4: - if stem.util.connection.is_valid_ipv4_address(value): - self.value = value - self.value_bin = b''.join([Size.CHAR.pack(int(v)) for v in value.split('.')]) - else: - if len(value) != 4: - raise ValueError('Packed IPv4 addresses should be four bytes, but was: %s' % repr(value)) - - self.value = _unpack_ipv4_address(value) - self.value_bin = value - elif self.type == AddrType.IPv6: - if stem.util.connection.is_valid_ipv6_address(value): - self.value = stem.util.connection.expand_ipv6_address(value).lower() - self.value_bin = b''.join([Size.SHORT.pack(int(v, 16)) for v in self.value.split(':')]) - else: - if len(value) != 16: - raise ValueError('Packed IPv6 addresses should be sixteen bytes, but was: %s' % repr(value)) - - self.value = _unpack_ipv6_address(value) - self.value_bin = value - else: - # The spec doesn't really tell us what form to expect errors to be. For - # now just leaving the value unset so we can fill it in later when we - # know what would be most useful. - - self.value = None - self.value_bin = value - - def pack(self): - cell = bytearray() - cell += Size.CHAR.pack(self.type_int) - cell += Size.CHAR.pack(len(self.value_bin)) - cell += self.value_bin - return bytes(cell) - - @staticmethod - def pop(content): - addr_type, content = Size.CHAR.pop(content) - addr_length, content = Size.CHAR.pop(content) - - if len(content) < addr_length: - raise ValueError('Address specified a payload of %i bytes, but only had %i' % (addr_length, len(content))) - - addr_value, content = split(content, addr_length) - - return Address(addr_value, addr_type), content - - def __hash__(self): - return stem.util._hash_attr(self, 'type_int', 'value_bin', cache = True) - - -class Certificate(Field): - """ - Relay certificate as defined in tor-spec section 4.2. - - :var stem.client.CertType type: certificate type - :var int type_int: integer value of the certificate type - :var bytes value: certificate value - """ - - def __init__(self, cert_type, value): - self.type, self.type_int = CertType.get(cert_type) - self.value = value - - def pack(self): - cell = bytearray() - cell += Size.CHAR.pack(self.type_int) - cell += Size.SHORT.pack(len(self.value)) - cell += self.value - return bytes(cell) - - @staticmethod - def pop(content): - cert_type, content = Size.CHAR.pop(content) - cert_size, content = Size.SHORT.pop(content) - - if cert_size > len(content): - raise ValueError('CERTS cell should have a certificate with %i bytes, but only had %i remaining' % (cert_size, len(content))) - - cert_bytes, content = split(content, cert_size) - return Certificate(cert_type, cert_bytes), content - - def __hash__(self): - return stem.util._hash_attr(self, 'type_int', 'value') - - -class LinkSpecifier(Field): - """ - Method of communicating with a circuit's relay. Recognized link specification - types are an instantiation of a subclass. For more information see the - `EXTEND cell specification - `_. - - .. versionadded:: 1.8.0 - - :var int type: numeric identifier of our type - :var bytes value: encoded link specification destination - """ - - def __init__(self, link_type, value): - self.type = link_type - self.value = value - - @staticmethod - def pop(packed): - # LSTYPE (Link specifier type) [1 byte] - # LSLEN (Link specifier length) [1 byte] - # LSPEC (Link specifier) [LSLEN bytes] - - link_type, packed = Size.CHAR.pop(packed) - value_size, packed = Size.CHAR.pop(packed) - - if value_size > len(packed): - raise ValueError('Link specifier should have %i bytes, but only had %i remaining' % (value_size, len(packed))) - - value, packed = split(packed, value_size) - - if link_type == 0: - return LinkByIPv4.unpack(value), packed - elif link_type == 1: - return LinkByIPv6.unpack(value), packed - elif link_type == 2: - return LinkByFingerprint(value), packed - elif link_type == 3: - return LinkByEd25519(value), packed - else: - return LinkSpecifier(link_type, value), packed # unrecognized type - - def pack(self): - cell = bytearray() - cell += Size.CHAR.pack(self.type) - cell += Size.CHAR.pack(len(self.value)) - cell += self.value - return bytes(cell) - - -class LinkByIPv4(LinkSpecifier): - """ - TLS connection to an IPv4 address. - - .. versionadded:: 1.8.0 - - :var str address: relay IPv4 address - :var int port: relay ORPort - """ - - def __init__(self, address, port): - super(LinkByIPv4, self).__init__(0, _pack_ipv4_address(address) + Size.SHORT.pack(port)) - - self.address = address - self.port = port - - @staticmethod - def unpack(value): - if len(value) != 6: - raise ValueError('IPv4 link specifiers should be six bytes, but was %i instead: %s' % (len(value), binascii.hexlify(value))) - - addr, port = split(value, 4) - return LinkByIPv4(_unpack_ipv4_address(addr), Size.SHORT.unpack(port)) - - -class LinkByIPv6(LinkSpecifier): - """ - TLS connection to an IPv6 address. - - .. versionadded:: 1.8.0 - - :var str address: relay IPv6 address - :var int port: relay ORPort - """ - - def __init__(self, address, port): - super(LinkByIPv6, self).__init__(1, _pack_ipv6_address(address) + Size.SHORT.pack(port)) - - self.address = address - self.port = port - - @staticmethod - def unpack(value): - if len(value) != 18: - raise ValueError('IPv6 link specifiers should be eighteen bytes, but was %i instead: %s' % (len(value), binascii.hexlify(value))) - - addr, port = split(value, 16) - return LinkByIPv6(_unpack_ipv6_address(addr), Size.SHORT.unpack(port)) - - -class LinkByFingerprint(LinkSpecifier): - """ - Connection to a SHA1 identity fingerprint. - - .. versionadded:: 1.8.0 - - :var str fingerprint: relay sha1 fingerprint - """ - - def __init__(self, value): - super(LinkByFingerprint, self).__init__(2, value) - - if len(value) != 20: - raise ValueError('Fingerprint link specifiers should be twenty bytes, but was %i instead: %s' % (len(value), binascii.hexlify(value))) - - self.fingerprint = stem.util.str_tools._to_unicode(value) - - -class LinkByEd25519(LinkSpecifier): - """ - Connection to a Ed25519 identity fingerprint. - - .. versionadded:: 1.8.0 - - :var str fingerprint: relay ed25519 fingerprint - """ - - def __init__(self, value): - super(LinkByEd25519, self).__init__(3, value) - - if len(value) != 32: - raise ValueError('Fingerprint link specifiers should be thirty two bytes, but was %i instead: %s' % (len(value), binascii.hexlify(value))) - - self.fingerprint = stem.util.str_tools._to_unicode(value) - - -class KDF(collections.namedtuple('KDF', ['key_hash', 'forward_digest', 'backward_digest', 'forward_key', 'backward_key'])): - """ - Computed KDF-TOR derived values for TAP, CREATE_FAST handshakes, and hidden - service protocols as defined tor-spec section 5.2.1. - - :var bytes key_hash: hash that proves knowledge of our shared key - :var bytes forward_digest: forward digest hash seed - :var bytes backward_digest: backward digest hash seed - :var bytes forward_key: forward encryption key - :var bytes backward_key: backward encryption key - """ - - @staticmethod - def from_value(key_material): - # Derived key material, as per... - # - # K = H(K0 | [00]) | H(K0 | [01]) | H(K0 | [02]) | ... - - derived_key = b'' - counter = 0 - - while len(derived_key) < KEY_LEN * 2 + HASH_LEN * 3: - derived_key += hashlib.sha1(key_material + Size.CHAR.pack(counter)).digest() - counter += 1 - - key_hash, derived_key = split(derived_key, HASH_LEN) - forward_digest, derived_key = split(derived_key, HASH_LEN) - backward_digest, derived_key = split(derived_key, HASH_LEN) - forward_key, derived_key = split(derived_key, KEY_LEN) - backward_key, derived_key = split(derived_key, KEY_LEN) - - return KDF(key_hash, forward_digest, backward_digest, forward_key, backward_key) - - -def _pack_ipv4_address(address): - return b''.join([Size.CHAR.pack(int(v)) for v in address.split('.')]) - - -def _unpack_ipv4_address(value): - return '.'.join([str(Size.CHAR.unpack(value[i:i + 1])) for i in range(4)]) - - -def _pack_ipv6_address(address): - return b''.join([Size.SHORT.pack(int(v, 16)) for v in address.split(':')]) - - -def _unpack_ipv6_address(value): - return ':'.join(['%04x' % Size.SHORT.unpack(value[i * 2:(i + 1) * 2]) for i in range(8)]) - - -setattr(Size, 'CHAR', Size('CHAR', 1, '!B')) -setattr(Size, 'SHORT', Size('SHORT', 2, '!H')) -setattr(Size, 'LONG', Size('LONG', 4, '!L')) -setattr(Size, 'LONG_LONG', Size('LONG_LONG', 8, '!Q')) diff --git a/myenv/lib/python3.12/site-packages/stem/connection.py b/myenv/lib/python3.12/site-packages/stem/connection.py deleted file mode 100644 index 90997fb..0000000 --- a/myenv/lib/python3.12/site-packages/stem/connection.py +++ /dev/null @@ -1,1285 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Functions for connecting and authenticating to the tor process. - -The :func:`~stem.connection.connect` function give an easy, one line -method for getting an authenticated control connection. This is handy for CLI -applications and the python interactive interpreter, but does several things -that makes it undesirable for applications (uses stdin/stdout, suppresses -exceptions, etc). - -:: - - import sys - - from stem.connection import connect - - if __name__ == '__main__': - controller = connect() - - if not controller: - sys.exit(1) # unable to get a connection - - print 'Tor is running version %s' % controller.get_version() - controller.close() - -:: - - % python example.py - Tor is running version 0.2.4.10-alpha-dev (git-8be6058d8f31e578) - -... or if Tor isn't running... - -:: - - % python example.py - [Errno 111] Connection refused - -The :func:`~stem.connection.authenticate` function, however, gives easy but -fine-grained control over the authentication process. For instance... - -:: - - import sys - import getpass - import stem.connection - import stem.socket - - try: - control_socket = stem.socket.ControlPort(port = 9051) - except stem.SocketError as exc: - print 'Unable to connect to port 9051 (%s)' % exc - sys.exit(1) - - try: - stem.connection.authenticate(control_socket) - except stem.connection.IncorrectSocketType: - print 'Please check in your torrc that 9051 is the ControlPort.' - print 'Maybe you configured it to be the ORPort or SocksPort instead?' - sys.exit(1) - except stem.connection.MissingPassword: - controller_password = getpass.getpass('Controller password: ') - - try: - stem.connection.authenticate_password(control_socket, controller_password) - except stem.connection.PasswordAuthFailed: - print 'Unable to authenticate, password is incorrect' - sys.exit(1) - except stem.connection.AuthenticationFailure as exc: - print 'Unable to authenticate: %s' % exc - sys.exit(1) - -**Module Overview:** - -:: - - connect - Simple method for getting authenticated control connection - - authenticate - Main method for authenticating to a control socket - authenticate_none - Authenticates to an open control socket - authenticate_password - Authenticates to a socket supporting password auth - authenticate_cookie - Authenticates to a socket supporting cookie auth - authenticate_safecookie - Authenticates to a socket supporting safecookie auth - - get_protocolinfo - Issues a PROTOCOLINFO query - - AuthenticationFailure - Base exception raised for authentication failures - |- UnrecognizedAuthMethods - Authentication methods are unsupported - |- IncorrectSocketType - Socket does not speak the tor control protocol - | - |- OpenAuthFailed - Failure when authenticating by an open socket - | +- OpenAuthRejected - Tor rejected this method of authentication - | - |- PasswordAuthFailed - Failure when authenticating by a password - | |- PasswordAuthRejected - Tor rejected this method of authentication - | |- IncorrectPassword - Password was rejected - | +- MissingPassword - Socket supports password auth but wasn't attempted - | - |- CookieAuthFailed - Failure when authenticating by a cookie - | |- CookieAuthRejected - Tor rejected this method of authentication - | |- IncorrectCookieValue - Authentication cookie was rejected - | |- IncorrectCookieSize - Size of the cookie file is incorrect - | |- UnreadableCookieFile - Unable to read the contents of the auth cookie - | +- AuthChallengeFailed - Failure completing the authchallenge request - | |- AuthChallengeUnsupported - Tor doesn't recognize the AUTHCHALLENGE command - | |- AuthSecurityFailure - Server provided the wrong nonce credentials - | |- InvalidClientNonce - The client nonce is invalid - | +- UnrecognizedAuthChallengeMethod - AUTHCHALLENGE does not support the given methods. - | - +- MissingAuthInfo - Unexpected PROTOCOLINFO response, missing auth info - |- NoAuthMethods - Missing any methods for authenticating - +- NoAuthCookie - Supports cookie auth but doesn't have its path - -.. data:: AuthMethod (enum) - - Enumeration of PROTOCOLINFO responses for supported authentication methods. - - ============== =========== - AuthMethod Description - ============== =========== - **NONE** No authentication required. - **PASSWORD** Password required, see tor's HashedControlPassword option. - **COOKIE** Contents of the cookie file required, see tor's CookieAuthentication option. - **SAFECOOKIE** Need to reply to a hmac challenge using the contents of the cookie file. - **UNKNOWN** Tor provided one or more authentication methods that we don't recognize, probably something new. - ============== =========== -""" - -import binascii -import getpass -import hashlib -import hmac -import os - -import stem.control -import stem.response -import stem.socket -import stem.util.connection -import stem.util.enum -import stem.util.str_tools -import stem.util.system -import stem.version - -from stem.util import log - -AuthMethod = stem.util.enum.Enum('NONE', 'PASSWORD', 'COOKIE', 'SAFECOOKIE', 'UNKNOWN') - -CLIENT_HASH_CONSTANT = b'Tor safe cookie authentication controller-to-server hash' -SERVER_HASH_CONSTANT = b'Tor safe cookie authentication server-to-controller hash' - -CRYPTOVARIABLE_EQUALITY_COMPARISON_NONCE = os.urandom(32) - -MISSING_PASSWORD_BUG_MSG = """ -BUG: You provided a password but despite this stem reported that it was -missing. This shouldn't happen - please let us know about it! - - http://bugs.torproject.org -""" - -UNRECOGNIZED_AUTH_TYPE_MSG = """ -Tor is using a type of authentication we do not recognize... - - {auth_methods} - -Please check that stem is up to date and if there is an existing issue on -'http://bugs.torproject.org'. If there isn't one then let us know! -""" - - -UNREADABLE_COOKIE_FILE_MSG = """ -We were unable to read tor's authentication cookie... - - Path: {path} - Issue: {issue} -""" - -WRONG_PORT_TYPE_MSG = """ -Please check in your torrc that {port} is the ControlPort. Maybe you -configured it to be the ORPort or SocksPort instead? -""" - -WRONG_SOCKET_TYPE_MSG = """ -Unable to connect to tor. Are you sure the interface you specified belongs to -tor? -""" - -CONNECT_MESSAGES = { - 'general_auth_failure': 'Unable to authenticate: {error}', - 'incorrect_password': 'Incorrect password', - 'no_control_port': "Unable to connect to tor. Maybe it's running without a ControlPort?", - 'password_prompt': 'Tor controller password:', - 'needs_password': 'Tor requires a password to authenticate', - 'socket_doesnt_exist': "The socket file you specified ({path}) doesn't exist", - 'tor_isnt_running': "Unable to connect to tor. Are you sure it's running?", - 'unable_to_use_port': 'Unable to connect to {address}:{port}: {error}', - 'unable_to_use_socket': "Unable to connect to '{path}': {error}", - 'missing_password_bug': MISSING_PASSWORD_BUG_MSG.strip(), - 'uncrcognized_auth_type': UNRECOGNIZED_AUTH_TYPE_MSG.strip(), - 'unreadable_cookie_file': UNREADABLE_COOKIE_FILE_MSG.strip(), - 'wrong_port_type': WRONG_PORT_TYPE_MSG.strip(), - 'wrong_socket_type': WRONG_SOCKET_TYPE_MSG.strip(), -} - -COMMON_TOR_COMMANDS = ( - 'tor', - 'tor.real', # TBB command ran - '/usr/local/bin/tor', # FreeBSD expands the whole path, this is the default location -) - - -def connect(control_port = ('127.0.0.1', 'default'), control_socket = '/var/run/tor/control', password = None, password_prompt = False, chroot_path = None, controller = stem.control.Controller): - """ - Convenience function for quickly getting a control connection. This is very - handy for debugging or CLI setup, handling setup and prompting for a password - if necessary (and none is provided). If any issues arise this prints a - description of the problem and returns **None**. - - If both a **control_port** and **control_socket** are provided then the - **control_socket** is tried first, and this provides a generic error message - if they're both unavailable. - - In much the same vein as git porcelain commands, users should not rely on - details of how this works. Messages and details of this function's behavior - could change in the future. - - If the **port** is **'default'** then this checks on both 9051 (default for - relays) and 9151 (default for the Tor Browser). This default may change in - the future. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.5.0 - Use both port 9051 and 9151 by default. - - :param tuple contol_port: address and port tuple, for instance **('127.0.0.1', 9051)** - :param str path: path where the control socket is located - :param str password: passphrase to authenticate to the socket - :param bool password_prompt: prompt for the controller password if it wasn't - supplied - :param str chroot_path: path prefix if in a chroot environment - :param Class controller: :class:`~stem.control.BaseController` subclass to be - returned, this provides a :class:`~stem.socket.ControlSocket` if **None** - - :returns: authenticated control connection, the type based on the controller argument - - :raises: **ValueError** if given an invalid control_port, or both - **control_port** and **control_socket** are **None** - """ - - if control_port is None and control_socket is None: - raise ValueError('Neither a control port nor control socket were provided. Nothing to connect to.') - elif control_port: - if len(control_port) != 2: - raise ValueError('The control_port argument for connect() should be an (address, port) tuple.') - elif not stem.util.connection.is_valid_ipv4_address(control_port[0]): - raise ValueError("'%s' isn't a vaid IPv4 address" % control_port[0]) - elif control_port[1] != 'default' and not stem.util.connection.is_valid_port(control_port[1]): - raise ValueError("'%s' isn't a valid port" % control_port[1]) - - control_connection, error_msg = None, '' - - if control_socket: - if os.path.exists(control_socket): - try: - control_connection = stem.socket.ControlSocketFile(control_socket) - except stem.SocketError as exc: - error_msg = CONNECT_MESSAGES['unable_to_use_socket'].format(path = control_socket, error = exc) - else: - error_msg = CONNECT_MESSAGES['socket_doesnt_exist'].format(path = control_socket) - - if control_port and not control_connection: - address, port = control_port - - try: - if port == 'default': - control_connection = _connection_for_default_port(address) - else: - control_connection = stem.socket.ControlPort(address, int(port)) - except stem.SocketError as exc: - error_msg = CONNECT_MESSAGES['unable_to_use_port'].format(address = address, port = port, error = exc) - - # If unable to connect to either a control socket or port then finally fail - # out. If we only attempted to connect to one of them then provide the error - # output from that. Otherwise we provide a more generic error message. - - if not control_connection: - if control_socket and control_port: - is_tor_running = stem.util.system.is_running(COMMON_TOR_COMMANDS) - error_msg = CONNECT_MESSAGES['no_control_port'] if is_tor_running else CONNECT_MESSAGES['tor_isnt_running'] - - print(error_msg) - return None - - return _connect_auth(control_connection, password, password_prompt, chroot_path, controller) - - -def connect_port(address = '127.0.0.1', port = 9051, password = None, chroot_path = None, controller = stem.control.Controller): - """ - Convenience function for quickly getting a control connection. This is very - handy for debugging or CLI setup, handling setup and prompting for a password - if necessary (and none is provided). If any issues arise this prints a - description of the problem and returns **None**. - - .. deprecated:: 1.2.0 - Use :func:`~stem.connection.connect` instead. - - :param str address: ip address of the controller - :param int port: port number of the controller - :param str password: passphrase to authenticate to the socket - :param str chroot_path: path prefix if in a chroot environment - :param Class controller: :class:`~stem.control.BaseController` subclass to be - returned, this provides a :class:`~stem.socket.ControlSocket` if **None** - - :returns: authenticated control connection, the type based on the controller argument - """ - - try: - control_port = stem.socket.ControlPort(address, port) - except stem.SocketError as exc: - print(exc) - return None - - return _connect_auth(control_port, password, True, chroot_path, controller) - - -def connect_socket_file(path = '/var/run/tor/control', password = None, chroot_path = None, controller = stem.control.Controller): - """ - Convenience function for quickly getting a control connection. For more - information see the :func:`~stem.connection.connect_port` function. - - In much the same vein as git porcelain commands, users should not rely on - details of how this works. Messages or details of this function's behavior - might change in the future. - - .. deprecated:: 1.2.0 - Use :func:`~stem.connection.connect` instead. - - :param str path: path where the control socket is located - :param str password: passphrase to authenticate to the socket - :param str chroot_path: path prefix if in a chroot environment - :param Class controller: :class:`~stem.control.BaseController` subclass to be - returned, this provides a :class:`~stem.socket.ControlSocket` if **None** - - :returns: authenticated control connection, the type based on the controller argument - """ - - try: - control_socket = stem.socket.ControlSocketFile(path) - except stem.SocketError as exc: - print(exc) - return None - - return _connect_auth(control_socket, password, True, chroot_path, controller) - - -def _connect_auth(control_socket, password, password_prompt, chroot_path, controller): - """ - Helper for the connect_* functions that authenticates the socket and - constructs the controller. - - :param stem.socket.ControlSocket control_socket: socket being authenticated to - :param str password: passphrase to authenticate to the socket - :param bool password_prompt: prompt for the controller password if it wasn't - supplied - :param str chroot_path: path prefix if in a chroot environment - :param Class controller: :class:`~stem.control.BaseController` subclass to be - returned, this provides a :class:`~stem.socket.ControlSocket` if **None** - - :returns: authenticated control connection, the type based on the controller argument - """ - - try: - authenticate(control_socket, password, chroot_path) - - if controller is None: - return control_socket - else: - return controller(control_socket, is_authenticated = True) - except IncorrectSocketType: - if isinstance(control_socket, stem.socket.ControlPort): - print(CONNECT_MESSAGES['wrong_port_type'].format(port = control_socket.port)) - else: - print(CONNECT_MESSAGES['wrong_socket_type']) - - control_socket.close() - return None - except UnrecognizedAuthMethods as exc: - print(CONNECT_MESSAGES['uncrcognized_auth_type'].format(auth_methods = ', '.join(exc.unknown_auth_methods))) - control_socket.close() - return None - except IncorrectPassword: - print(CONNECT_MESSAGES['incorrect_password']) - control_socket.close() - return None - except MissingPassword: - if password is not None: - control_socket.close() - raise ValueError(CONNECT_MESSAGES['missing_password_bug']) - - if password_prompt: - try: - password = getpass.getpass(CONNECT_MESSAGES['password_prompt'] + ' ') - except KeyboardInterrupt: - control_socket.close() - return None - - return _connect_auth(control_socket, password, password_prompt, chroot_path, controller) - else: - print(CONNECT_MESSAGES['needs_password']) - control_socket.close() - return None - except UnreadableCookieFile as exc: - print(CONNECT_MESSAGES['unreadable_cookie_file'].format(path = exc.cookie_path, issue = str(exc))) - control_socket.close() - return None - except AuthenticationFailure as exc: - print(CONNECT_MESSAGES['general_auth_failure'].format(error = exc)) - control_socket.close() - return None - - -def authenticate(controller, password = None, chroot_path = None, protocolinfo_response = None): - """ - Authenticates to a control socket using the information provided by a - PROTOCOLINFO response. In practice this will often be all we need to - authenticate, raising an exception if all attempts to authenticate fail. - - All exceptions are subclasses of AuthenticationFailure so, in practice, - callers should catch the types of authentication failure that they care - about, then have a :class:`~stem.connection.AuthenticationFailure` catch-all - at the end. - - This can authenticate to either a :class:`~stem.control.BaseController` or - :class:`~stem.socket.ControlSocket`. - - :param controller: tor controller or socket to be authenticated - :param str password: passphrase to present to the socket if it uses password - authentication (skips password auth if **None**) - :param str chroot_path: path prefix if in a chroot environment - :param stem.response.protocolinfo.ProtocolInfoResponse protocolinfo_response: - tor protocolinfo response, this is retrieved on our own if **None** - - :raises: If all attempts to authenticate fails then this will raise a - :class:`~stem.connection.AuthenticationFailure` subclass. Since this may - try multiple authentication methods it may encounter multiple exceptions. - If so then the exception this raises is prioritized as follows... - - * :class:`stem.connection.IncorrectSocketType` - - The controller does not speak the tor control protocol. Most often this - happened because the user confused the SocksPort or ORPort with the - ControlPort. - - * :class:`stem.connection.UnrecognizedAuthMethods` - - All of the authentication methods tor will accept are new and - unrecognized. Please upgrade stem and, if that doesn't work, file a - ticket on 'trac.torproject.org' and I'd be happy to add support. - - * :class:`stem.connection.MissingPassword` - - We were unable to authenticate but didn't attempt password authentication - because none was provided. You should prompt the user for a password and - try again via 'authenticate_password'. - - * :class:`stem.connection.IncorrectPassword` - - We were provided with a password but it was incorrect. - - * :class:`stem.connection.IncorrectCookieSize` - - Tor allows for authentication by reading it a cookie file, but that file - is the wrong size to be an authentication cookie. - - * :class:`stem.connection.UnreadableCookieFile` - - Tor allows for authentication by reading it a cookie file, but we can't - read that file (probably due to permissions). - - * **\\***:class:`stem.connection.IncorrectCookieValue` - - Tor allows for authentication by reading it a cookie file, but rejected - the contents of that file. - - * **\\***:class:`stem.connection.AuthChallengeUnsupported` - - Tor doesn't recognize the AUTHCHALLENGE command. This is probably a Tor - version prior to SAFECOOKIE being implement, but this exception shouldn't - arise because we won't attempt SAFECOOKIE auth unless Tor claims to - support it. - - * **\\***:class:`stem.connection.UnrecognizedAuthChallengeMethod` - - Tor couldn't recognize the AUTHCHALLENGE method Stem sent to it. This - shouldn't happen at all. - - * **\\***:class:`stem.connection.InvalidClientNonce` - - Tor says that the client nonce provided by Stem during the AUTHCHALLENGE - process is invalid. - - * **\\***:class:`stem.connection.AuthSecurityFailure` - - Nonce value provided by the server was invalid. - - * **\\***:class:`stem.connection.OpenAuthRejected` - - Tor says that it allows for authentication without any credentials, but - then rejected our authentication attempt. - - * **\\***:class:`stem.connection.MissingAuthInfo` - - Tor provided us with a PROTOCOLINFO reply that is technically valid, but - missing the information we need to authenticate. - - * **\\***:class:`stem.connection.AuthenticationFailure` - - There are numerous other ways that authentication could have failed - including socket failures, malformed controller responses, etc. These - mostly constitute transient failures or bugs. - - **\\*** In practice it is highly unusual for this to occur, being more of a - theoretical possibility rather than something you should expect. It's fine - to treat these as errors. If you have a use case where this commonly - happens, please file a ticket on 'trac.torproject.org'. - - In the future new :class:`~stem.connection.AuthenticationFailure` - subclasses may be added to allow for better error handling. - """ - - if not protocolinfo_response: - try: - protocolinfo_response = get_protocolinfo(controller) - except stem.ProtocolError: - raise IncorrectSocketType('unable to use the control socket') - except stem.SocketError as exc: - raise AuthenticationFailure('socket connection failed (%s)' % exc) - - auth_methods = list(protocolinfo_response.auth_methods) - auth_exceptions = [] - - if len(auth_methods) == 0: - raise NoAuthMethods('our PROTOCOLINFO response did not have any methods for authenticating') - - # remove authentication methods that are either unknown or for which we don't - # have an input - if AuthMethod.UNKNOWN in auth_methods: - auth_methods.remove(AuthMethod.UNKNOWN) - - unknown_methods = protocolinfo_response.unknown_auth_methods - plural_label = 's' if len(unknown_methods) > 1 else '' - methods_label = ', '.join(unknown_methods) - - # we... er, can't do anything with only unrecognized auth types - if not auth_methods: - exc_msg = 'unrecognized authentication method%s (%s)' % (plural_label, methods_label) - auth_exceptions.append(UnrecognizedAuthMethods(exc_msg, unknown_methods)) - else: - log.debug('Authenticating to a socket with unrecognized auth method%s, ignoring them: %s' % (plural_label, methods_label)) - - if protocolinfo_response.cookie_path is None: - for cookie_auth_method in (AuthMethod.COOKIE, AuthMethod.SAFECOOKIE): - if cookie_auth_method in auth_methods: - auth_methods.remove(cookie_auth_method) - - exc_msg = 'our PROTOCOLINFO response did not have the location of our authentication cookie' - auth_exceptions.append(NoAuthCookie(exc_msg, cookie_auth_method == AuthMethod.SAFECOOKIE)) - - if AuthMethod.PASSWORD in auth_methods and password is None: - auth_methods.remove(AuthMethod.PASSWORD) - auth_exceptions.append(MissingPassword('no passphrase provided')) - - # iterating over AuthMethods so we can try them in this order - for auth_type in (AuthMethod.NONE, AuthMethod.PASSWORD, AuthMethod.SAFECOOKIE, AuthMethod.COOKIE): - if auth_type not in auth_methods: - continue - - try: - if auth_type == AuthMethod.NONE: - authenticate_none(controller, False) - elif auth_type == AuthMethod.PASSWORD: - authenticate_password(controller, password, False) - elif auth_type in (AuthMethod.COOKIE, AuthMethod.SAFECOOKIE): - cookie_path = protocolinfo_response.cookie_path - - if chroot_path: - cookie_path = os.path.join(chroot_path, cookie_path.lstrip(os.path.sep)) - - if auth_type == AuthMethod.SAFECOOKIE: - authenticate_safecookie(controller, cookie_path, False) - else: - authenticate_cookie(controller, cookie_path, False) - - if isinstance(controller, stem.control.BaseController): - controller._post_authentication() - - return # success! - except OpenAuthRejected as exc: - auth_exceptions.append(exc) - except IncorrectPassword as exc: - auth_exceptions.append(exc) - except PasswordAuthRejected as exc: - # Since the PROTOCOLINFO says password auth is available we can assume - # that if PasswordAuthRejected is raised it's being raised in error. - log.debug('The authenticate_password method raised a PasswordAuthRejected when password auth should be available. Stem may need to be corrected to recognize this response: %s' % exc) - auth_exceptions.append(IncorrectPassword(str(exc))) - except AuthSecurityFailure as exc: - log.info('Tor failed to provide the nonce expected for safecookie authentication. (%s)' % exc) - auth_exceptions.append(exc) - except (InvalidClientNonce, UnrecognizedAuthChallengeMethod, AuthChallengeFailed) as exc: - auth_exceptions.append(exc) - except (IncorrectCookieSize, UnreadableCookieFile, IncorrectCookieValue) as exc: - auth_exceptions.append(exc) - except CookieAuthRejected as exc: - auth_func = 'authenticate_safecookie' if exc.is_safecookie else 'authenticate_cookie' - - log.debug('The %s method raised a CookieAuthRejected when cookie auth should be available. Stem may need to be corrected to recognize this response: %s' % (auth_func, exc)) - auth_exceptions.append(IncorrectCookieValue(str(exc), exc.cookie_path, exc.is_safecookie)) - except stem.ControllerError as exc: - auth_exceptions.append(AuthenticationFailure(str(exc))) - - # All authentication attempts failed. Raise the exception that takes priority - # according to our pydocs. - - for exc_type in AUTHENTICATE_EXCEPTIONS: - for auth_exc in auth_exceptions: - if isinstance(auth_exc, exc_type): - raise auth_exc - - # We really, really shouldn't get here. It means that auth_exceptions is - # either empty or contains something that isn't an AuthenticationFailure. - - raise AssertionError('BUG: Authentication failed without providing a recognized exception: %s' % str(auth_exceptions)) - - -def authenticate_none(controller, suppress_ctl_errors = True): - """ - Authenticates to an open control socket. All control connections need to - authenticate before they can be used, even if tor hasn't been configured to - use any authentication. - - If authentication fails tor will disconnect and we'll make a best effort - attempt to re-establish the connection. This may not succeed, so check - :func:`~stem.socket.ControlSocket.is_alive` before using the socket further. - - This can authenticate to either a :class:`~stem.control.BaseController` or - :class:`~stem.socket.ControlSocket`. - - For general usage use the :func:`~stem.connection.authenticate` function - instead. - - :param controller: tor controller or socket to be authenticated - :param bool suppress_ctl_errors: reports raised - :class:`~stem.ControllerError` as authentication rejection if - **True**, otherwise they're re-raised - - :raises: :class:`stem.connection.OpenAuthRejected` if the empty authentication credentials aren't accepted - """ - - try: - auth_response = _msg(controller, 'AUTHENTICATE') - - # if we got anything but an OK response then error - if str(auth_response) != 'OK': - try: - controller.connect() - except: - pass - - raise OpenAuthRejected(str(auth_response), auth_response) - except stem.ControllerError as exc: - try: - controller.connect() - except: - pass - - if not suppress_ctl_errors: - raise - else: - raise OpenAuthRejected('Socket failed (%s)' % exc) - - -def authenticate_password(controller, password, suppress_ctl_errors = True): - """ - Authenticates to a control socket that uses a password (via the - HashedControlPassword torrc option). Quotes in the password are escaped. - - If authentication fails tor will disconnect and we'll make a best effort - attempt to re-establish the connection. This may not succeed, so check - :func:`~stem.socket.ControlSocket.is_alive` before using the socket further. - - If you use this function directly, rather than - :func:`~stem.connection.authenticate`, we may mistakenly raise a - PasswordAuthRejected rather than IncorrectPassword. This is because we rely - on tor's error messaging which is liable to change in future versions - (:trac:`4817`). - - This can authenticate to either a :class:`~stem.control.BaseController` or - :class:`~stem.socket.ControlSocket`. - - For general usage use the :func:`~stem.connection.authenticate` function - instead. - - :param controller: tor controller or socket to be authenticated - :param str password: passphrase to present to the socket - :param bool suppress_ctl_errors: reports raised - :class:`~stem.ControllerError` as authentication rejection if - **True**, otherwise they're re-raised - - :raises: - * :class:`stem.connection.PasswordAuthRejected` if the socket doesn't - accept password authentication - * :class:`stem.connection.IncorrectPassword` if the authentication - credentials aren't accepted - """ - - # Escapes quotes. Tor can include those in the password hash, in which case - # it expects escaped quotes from the controller. For more information see... - # https://trac.torproject.org/projects/tor/ticket/4600 - - password = password.replace('"', '\\"') - - try: - auth_response = _msg(controller, 'AUTHENTICATE "%s"' % password) - - # if we got anything but an OK response then error - if str(auth_response) != 'OK': - try: - controller.connect() - except: - pass - - # all we have to go on is the error message from tor... - # Password did not match HashedControlPassword value value from configuration... - # Password did not match HashedControlPassword *or*... - - if 'Password did not match HashedControlPassword' in str(auth_response): - raise IncorrectPassword(str(auth_response), auth_response) - else: - raise PasswordAuthRejected(str(auth_response), auth_response) - except stem.ControllerError as exc: - try: - controller.connect() - except: - pass - - if not suppress_ctl_errors: - raise - else: - raise PasswordAuthRejected('Socket failed (%s)' % exc) - - -def authenticate_cookie(controller, cookie_path, suppress_ctl_errors = True): - """ - Authenticates to a control socket that uses the contents of an authentication - cookie (generated via the CookieAuthentication torrc option). This does basic - validation that this is a cookie before presenting the contents to the - socket. - - The :class:`~stem.connection.IncorrectCookieSize` and - :class:`~stem.connection.UnreadableCookieFile` exceptions take precedence - over the other types. - - If authentication fails tor will disconnect and we'll make a best effort - attempt to re-establish the connection. This may not succeed, so check - :func:`~stem.socket.ControlSocket.is_alive` before using the socket further. - - If you use this function directly, rather than - :func:`~stem.connection.authenticate`, we may mistakenly raise a - :class:`~stem.connection.CookieAuthRejected` rather than - :class:`~stem.connection.IncorrectCookieValue`. This is because we rely on - tor's error messaging which is liable to change in future versions - (:trac:`4817`). - - This can authenticate to either a :class:`~stem.control.BaseController` or - :class:`~stem.socket.ControlSocket`. - - For general usage use the :func:`~stem.connection.authenticate` function - instead. - - :param controller: tor controller or socket to be authenticated - :param str cookie_path: path of the authentication cookie to send to tor - :param bool suppress_ctl_errors: reports raised - :class:`~stem.ControllerError` as authentication rejection if - **True**, otherwise they're re-raised - - :raises: - * :class:`stem.connection.IncorrectCookieSize` if the cookie file's size - is wrong - * :class:`stem.connection.UnreadableCookieFile` if the cookie file doesn't - exist or we're unable to read it - * :class:`stem.connection.CookieAuthRejected` if cookie authentication is - attempted but the socket doesn't accept it - * :class:`stem.connection.IncorrectCookieValue` if the cookie file's value - is rejected - """ - - cookie_data = _read_cookie(cookie_path, False) - - try: - # binascii.b2a_hex() takes a byte string and returns one too. With python 3 - # this is a problem because string formatting for byte strings includes the - # b'' wrapper... - # - # >>> "AUTHENTICATE %s" % b'content' - # "AUTHENTICATE b'content'" - # - # This seems dumb but oh well. Converting the result to unicode so it won't - # misbehave. - - auth_token_hex = binascii.b2a_hex(stem.util.str_tools._to_bytes(cookie_data)) - msg = 'AUTHENTICATE %s' % stem.util.str_tools._to_unicode(auth_token_hex) - auth_response = _msg(controller, msg) - - # if we got anything but an OK response then error - if str(auth_response) != 'OK': - try: - controller.connect() - except: - pass - - # all we have to go on is the error message from tor... - # ... Authentication cookie did not match expected value. - # ... *or* authentication cookie. - - if '*or* authentication cookie.' in str(auth_response) or \ - 'Authentication cookie did not match expected value.' in str(auth_response): - raise IncorrectCookieValue(str(auth_response), cookie_path, False, auth_response) - else: - raise CookieAuthRejected(str(auth_response), cookie_path, False, auth_response) - except stem.ControllerError as exc: - try: - controller.connect() - except: - pass - - if not suppress_ctl_errors: - raise - else: - raise CookieAuthRejected('Socket failed (%s)' % exc, cookie_path, False) - - -def authenticate_safecookie(controller, cookie_path, suppress_ctl_errors = True): - """ - Authenticates to a control socket using the safe cookie method, which is - enabled by setting the CookieAuthentication torrc option on Tor client's which - support it. - - Authentication with this is a two-step process... - - 1. send a nonce to the server and receives a challenge from the server for - the cookie's contents - 2. generate a hash digest using the challenge received in the first step, and - use it to authenticate the controller - - The :class:`~stem.connection.IncorrectCookieSize` and - :class:`~stem.connection.UnreadableCookieFile` exceptions take precedence - over the other exception types. - - The :class:`~stem.connection.AuthChallengeUnsupported`, - :class:`~stem.connection.UnrecognizedAuthChallengeMethod`, - :class:`~stem.connection.InvalidClientNonce` and - :class:`~stem.connection.CookieAuthRejected` exceptions are next in the order - of precedence. Depending on the reason, one of these is raised if the first - (AUTHCHALLENGE) step fails. - - In the second (AUTHENTICATE) step, - :class:`~stem.connection.IncorrectCookieValue` or - :class:`~stem.connection.CookieAuthRejected` maybe raised. - - If authentication fails tor will disconnect and we'll make a best effort - attempt to re-establish the connection. This may not succeed, so check - :func:`~stem.socket.ControlSocket.is_alive` before using the socket further. - - For general usage use the :func:`~stem.connection.authenticate` function - instead. - - :param controller: tor controller or socket to be authenticated - :param str cookie_path: path of the authentication cookie to send to tor - :param bool suppress_ctl_errors: reports raised - :class:`~stem.ControllerError` as authentication rejection if - **True**, otherwise they're re-raised - - :raises: - * :class:`stem.connection.IncorrectCookieSize` if the cookie file's size - is wrong - * :class:`stem.connection.UnreadableCookieFile` if the cookie file doesn't - exist or we're unable to read it - * :class:`stem.connection.CookieAuthRejected` if cookie authentication is - attempted but the socket doesn't accept it - * :class:`stem.connection.IncorrectCookieValue` if the cookie file's value - is rejected - * :class:`stem.connection.UnrecognizedAuthChallengeMethod` if the Tor - client fails to recognize the AuthChallenge method - * :class:`stem.connection.AuthChallengeUnsupported` if AUTHCHALLENGE is - unimplemented, or if unable to parse AUTHCHALLENGE response - * :class:`stem.connection.AuthSecurityFailure` if AUTHCHALLENGE's response - looks like a security attack - * :class:`stem.connection.InvalidClientNonce` if stem's AUTHCHALLENGE - client nonce is rejected for being invalid - """ - - cookie_data = _read_cookie(cookie_path, True) - client_nonce = os.urandom(32) - - try: - client_nonce_hex = stem.util.str_tools._to_unicode(binascii.b2a_hex(client_nonce)) - authchallenge_response = _msg(controller, 'AUTHCHALLENGE SAFECOOKIE %s' % client_nonce_hex) - - if not authchallenge_response.is_ok(): - try: - controller.connect() - except: - pass - - authchallenge_response_str = str(authchallenge_response) - - if 'Authentication required.' in authchallenge_response_str: - raise AuthChallengeUnsupported("SAFECOOKIE authentication isn't supported", cookie_path) - elif 'AUTHCHALLENGE only supports' in authchallenge_response_str: - raise UnrecognizedAuthChallengeMethod(authchallenge_response_str, cookie_path) - elif 'Invalid base16 client nonce' in authchallenge_response_str: - raise InvalidClientNonce(authchallenge_response_str, cookie_path) - elif 'Cookie authentication is disabled' in authchallenge_response_str: - raise CookieAuthRejected(authchallenge_response_str, cookie_path, True) - else: - raise AuthChallengeFailed(authchallenge_response, cookie_path) - except stem.ControllerError as exc: - try: - controller.connect() - except: - pass - - if not suppress_ctl_errors: - raise - else: - raise AuthChallengeFailed('Socket failed (%s)' % exc, cookie_path, True) - - try: - stem.response.convert('AUTHCHALLENGE', authchallenge_response) - except stem.ProtocolError as exc: - if not suppress_ctl_errors: - raise - else: - raise AuthChallengeFailed('Unable to parse AUTHCHALLENGE response: %s' % exc, cookie_path) - - expected_server_hash = _hmac_sha256( - SERVER_HASH_CONSTANT, - cookie_data + client_nonce + authchallenge_response.server_nonce) - - authchallenge_hmac = _hmac_sha256(CRYPTOVARIABLE_EQUALITY_COMPARISON_NONCE, authchallenge_response.server_hash) - expected_hmac = _hmac_sha256(CRYPTOVARIABLE_EQUALITY_COMPARISON_NONCE, expected_server_hash) - - if authchallenge_hmac != expected_hmac: - raise AuthSecurityFailure('Tor provided the wrong server nonce', cookie_path) - - try: - client_hash = _hmac_sha256( - CLIENT_HASH_CONSTANT, - cookie_data + client_nonce + authchallenge_response.server_nonce) - - auth_response = _msg(controller, 'AUTHENTICATE %s' % stem.util.str_tools._to_unicode(binascii.b2a_hex(client_hash))) - except stem.ControllerError as exc: - try: - controller.connect() - except: - pass - - if not suppress_ctl_errors: - raise - else: - raise CookieAuthRejected('Socket failed (%s)' % exc, cookie_path, True, auth_response) - - # if we got anything but an OK response then err - if not auth_response.is_ok(): - try: - controller.connect() - except: - pass - - # all we have to go on is the error message from tor... - # ... Safe cookie response did not match expected value - # ... *or* authentication cookie. - - if '*or* authentication cookie.' in str(auth_response) or \ - 'Safe cookie response did not match expected value' in str(auth_response): - raise IncorrectCookieValue(str(auth_response), cookie_path, True, auth_response) - else: - raise CookieAuthRejected(str(auth_response), cookie_path, True, auth_response) - - -def get_protocolinfo(controller): - """ - Issues a PROTOCOLINFO query to a control socket, getting information about - the tor process running on it. If the socket is already closed then it is - first reconnected. - - This can authenticate to either a :class:`~stem.control.BaseController` or - :class:`~stem.socket.ControlSocket`. - - :param controller: tor controller or socket to be queried - - :returns: :class:`~stem.response.protocolinfo.ProtocolInfoResponse` provided by tor - - :raises: - * :class:`stem.ProtocolError` if the PROTOCOLINFO response is - malformed - * :class:`stem.SocketError` if problems arise in establishing or - using the socket - """ - - try: - protocolinfo_response = _msg(controller, 'PROTOCOLINFO 1') - except: - protocolinfo_response = None - - # Tor hangs up on sockets after receiving a PROTOCOLINFO query if it isn't - # next followed by authentication. Transparently reconnect if that happens. - - if not protocolinfo_response or str(protocolinfo_response) == 'Authentication required.': - controller.connect() - - try: - protocolinfo_response = _msg(controller, 'PROTOCOLINFO 1') - except stem.SocketClosed as exc: - raise stem.SocketError(exc) - - stem.response.convert('PROTOCOLINFO', protocolinfo_response) - return protocolinfo_response - - -def _msg(controller, message): - """ - Sends and receives a message with either a - :class:`~stem.socket.ControlSocket` or :class:`~stem.control.BaseController`. - """ - - if isinstance(controller, stem.socket.ControlSocket): - controller.send(message) - return controller.recv() - else: - return controller.msg(message) - - -def _connection_for_default_port(address): - """ - Attempts to provide a controller connection for either port 9051 (default for - relays) or 9151 (default for Tor Browser). If both fail then this raises the - exception for port 9051. - - :param str address: address to connect to - - :returns: :class:`~stem.socket.ControlPort` for the controller conneciton - - :raises: :class:`stem.SocketError` if we're unable to establish a connection - """ - - try: - return stem.socket.ControlPort(address, 9051) - except stem.SocketError as exc: - try: - return stem.socket.ControlPort(address, 9151) - except stem.SocketError: - raise exc - - -def _read_cookie(cookie_path, is_safecookie): - """ - Provides the contents of a given cookie file. - - :param str cookie_path: absolute path of the cookie file - :param bool is_safecookie: **True** if this was for SAFECOOKIE - authentication, **False** if for COOKIE - - :raises: - * :class:`stem.connection.UnreadableCookieFile` if the cookie file is - unreadable - * :class:`stem.connection.IncorrectCookieSize` if the cookie size is - incorrect (not 32 bytes) - """ - - if not os.path.exists(cookie_path): - exc_msg = "Authentication failed: '%s' doesn't exist" % cookie_path - raise UnreadableCookieFile(exc_msg, cookie_path, is_safecookie) - - # Abort if the file isn't 32 bytes long. This is to avoid exposing arbitrary - # file content to the port. - # - # Without this a malicious socket could, for instance, claim that - # '~/.bash_history' or '~/.ssh/id_rsa' was its authentication cookie to trick - # us into reading it for them with our current permissions. - # - # https://trac.torproject.org/projects/tor/ticket/4303 - - auth_cookie_size = os.path.getsize(cookie_path) - - if auth_cookie_size != 32: - exc_msg = "Authentication failed: authentication cookie '%s' is the wrong size (%i bytes instead of 32)" % (cookie_path, auth_cookie_size) - raise IncorrectCookieSize(exc_msg, cookie_path, is_safecookie) - - try: - with open(cookie_path, 'rb', 0) as f: - return f.read() - except IOError as exc: - exc_msg = "Authentication failed: unable to read '%s' (%s)" % (cookie_path, exc) - raise UnreadableCookieFile(exc_msg, cookie_path, is_safecookie) - - -def _hmac_sha256(key, msg): - """ - Generates a sha256 digest using the given key and message. - - :param str key: starting key for the hash - :param str msg: message to be hashed - - :returns: sha256 digest of msg as bytes, hashed using the given key - """ - - return hmac.new(key, msg, hashlib.sha256).digest() - - -class AuthenticationFailure(Exception): - """ - Base error for authentication failures. - - :var stem.socket.ControlMessage auth_response: AUTHENTICATE response from the - control socket, **None** if one wasn't received - """ - - def __init__(self, message, auth_response = None): - super(AuthenticationFailure, self).__init__(message) - self.auth_response = auth_response - - -class UnrecognizedAuthMethods(AuthenticationFailure): - """ - All methods for authenticating aren't recognized. - - :var list unknown_auth_methods: authentication methods that weren't recognized - """ - - def __init__(self, message, unknown_auth_methods): - super(UnrecognizedAuthMethods, self).__init__(message) - self.unknown_auth_methods = unknown_auth_methods - - -class IncorrectSocketType(AuthenticationFailure): - 'Socket does not speak the control protocol.' - - -class OpenAuthFailed(AuthenticationFailure): - 'Failure to authenticate to an open socket.' - - -class OpenAuthRejected(OpenAuthFailed): - 'Attempt to connect to an open control socket was rejected.' - - -class PasswordAuthFailed(AuthenticationFailure): - 'Failure to authenticate with a password.' - - -class PasswordAuthRejected(PasswordAuthFailed): - 'Socket does not support password authentication.' - - -class IncorrectPassword(PasswordAuthFailed): - 'Authentication password incorrect.' - - -class MissingPassword(PasswordAuthFailed): - "Password authentication is supported but we weren't provided with one." - - -class CookieAuthFailed(AuthenticationFailure): - """ - Failure to authenticate with an authentication cookie. - - :param str cookie_path: location of the authentication cookie we attempted - :param bool is_safecookie: **True** if this was for SAFECOOKIE - authentication, **False** if for COOKIE - :param stem.response.ControlMessage auth_response: reply to our - authentication attempt - """ - - def __init__(self, message, cookie_path, is_safecookie, auth_response = None): - super(CookieAuthFailed, self).__init__(message, auth_response) - self.is_safecookie = is_safecookie - self.cookie_path = cookie_path - - -class CookieAuthRejected(CookieAuthFailed): - 'Socket does not support password authentication.' - - -class IncorrectCookieValue(CookieAuthFailed): - 'Authentication cookie value was rejected.' - - -class IncorrectCookieSize(CookieAuthFailed): - 'Aborted because the cookie file is the wrong size.' - - -class UnreadableCookieFile(CookieAuthFailed): - 'Error arose in reading the authentication cookie.' - - -class AuthChallengeFailed(CookieAuthFailed): - """ - AUTHCHALLENGE command has failed. - """ - - def __init__(self, message, cookie_path): - super(AuthChallengeFailed, self).__init__(message, cookie_path, True) - - -class AuthChallengeUnsupported(AuthChallengeFailed): - """ - AUTHCHALLENGE isn't implemented. - """ - - -class UnrecognizedAuthChallengeMethod(AuthChallengeFailed): - """ - Tor couldn't recognize our AUTHCHALLENGE method. - - :var str authchallenge_method: AUTHCHALLENGE method that Tor couldn't recognize - """ - - def __init__(self, message, cookie_path, authchallenge_method): - super(UnrecognizedAuthChallengeMethod, self).__init__(message, cookie_path) - self.authchallenge_method = authchallenge_method - - -class AuthSecurityFailure(AuthChallengeFailed): - 'AUTHCHALLENGE response is invalid.' - - -class InvalidClientNonce(AuthChallengeFailed): - 'AUTHCHALLENGE request contains an invalid client nonce.' - - -class MissingAuthInfo(AuthenticationFailure): - """ - The PROTOCOLINFO response didn't have enough information to authenticate. - These are valid control responses but really shouldn't happen in practice. - """ - - -class NoAuthMethods(MissingAuthInfo): - "PROTOCOLINFO response didn't have any methods for authenticating." - - -class NoAuthCookie(MissingAuthInfo): - """ - PROTOCOLINFO response supports cookie auth but doesn't have its path. - - :param bool is_safecookie: **True** if this was for SAFECOOKIE - authentication, **False** if for COOKIE - """ - - def __init__(self, message, is_safecookie): - super(NoAuthCookie, self).__init__(message) - self.is_safecookie = is_safecookie - - -# authentication exceptions ordered as per the authenticate function's pydocs - -AUTHENTICATE_EXCEPTIONS = ( - IncorrectSocketType, - UnrecognizedAuthMethods, - MissingPassword, - IncorrectPassword, - IncorrectCookieSize, - UnreadableCookieFile, - IncorrectCookieValue, - AuthChallengeUnsupported, - UnrecognizedAuthChallengeMethod, - InvalidClientNonce, - AuthSecurityFailure, - OpenAuthRejected, - MissingAuthInfo, - AuthenticationFailure -) diff --git a/myenv/lib/python3.12/site-packages/stem/control.py b/myenv/lib/python3.12/site-packages/stem/control.py deleted file mode 100644 index d2494ca..0000000 --- a/myenv/lib/python3.12/site-packages/stem/control.py +++ /dev/null @@ -1,4217 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Module for interacting with the Tor control socket. The -:class:`~stem.control.Controller` is a wrapper around a -:class:`~stem.socket.ControlSocket`, retaining many of its methods (connect, -close, is_alive, etc) in addition to providing its own for working with the -socket at a higher level. - -Stem has `several ways <../faq.html#how-do-i-connect-to-tor>`_ of getting a -:class:`~stem.control.Controller`, but the most flexible are -:func:`~stem.control.Controller.from_port` and -:func:`~stem.control.Controller.from_socket_file`. These static -:class:`~stem.control.Controller` methods give you an **unauthenticated** -Controller you can then authenticate yourself using its -:func:`~stem.control.Controller.authenticate` method. For example... - -:: - - import getpass - import sys - - import stem - import stem.connection - - from stem.control import Controller - - if __name__ == '__main__': - try: - controller = Controller.from_port() - except stem.SocketError as exc: - print("Unable to connect to tor on port 9051: %s" % exc) - sys.exit(1) - - try: - controller.authenticate() - except stem.connection.MissingPassword: - pw = getpass.getpass("Controller password: ") - - try: - controller.authenticate(password = pw) - except stem.connection.PasswordAuthFailed: - print("Unable to authenticate, password is incorrect") - sys.exit(1) - except stem.connection.AuthenticationFailure as exc: - print("Unable to authenticate: %s" % exc) - sys.exit(1) - - print("Tor is running version %s" % controller.get_version()) - controller.close() - -If you're fine with allowing your script to raise exceptions then this can be more nicely done as... - -:: - - from stem.control import Controller - - if __name__ == '__main__': - with Controller.from_port() as controller: - controller.authenticate() - - print("Tor is running version %s" % controller.get_version()) - -**Module Overview:** - -:: - - event_description - brief description of a tor event type - - Controller - General controller class intended for direct use - | |- from_port - Provides a Controller based on a port connection. - | +- from_socket_file - Provides a Controller based on a socket file connection. - | - |- authenticate - authenticates this controller with tor - |- reconnect - reconnects and authenticates to socket - | - |- get_info - issues a GETINFO query for a parameter - |- get_version - provides our tor version - |- get_exit_policy - provides our exit policy - |- get_ports - provides the local ports where tor is listening for connections - |- get_listeners - provides the addresses and ports where tor is listening for connections - |- get_accounting_stats - provides stats related to relaying limits - |- get_protocolinfo - information about the controller interface - |- get_user - provides the user tor is running as - |- get_pid - provides the pid of our tor process - |- get_start_time - timestamp when the tor process began - |- get_uptime - duration tor has been running - |- is_user_traffic_allowed - checks if we send or receive direct user traffic - | - |- get_microdescriptor - querying the microdescriptor for a relay - |- get_microdescriptors - provides all currently available microdescriptors - |- get_server_descriptor - querying the server descriptor for a relay - |- get_server_descriptors - provides all currently available server descriptors - |- get_network_status - querying the router status entry for a relay - |- get_network_statuses - provides all presently available router status entries - |- get_hidden_service_descriptor - queries the given hidden service descriptor - | - |- get_conf - gets the value of a configuration option - |- get_conf_map - gets the values of multiple configuration options - |- is_set - determines if an option differs from its default - |- set_conf - sets the value of a configuration option - |- reset_conf - reverts configuration options to their default values - |- set_options - sets or resets the values of multiple configuration options - | - |- get_hidden_service_conf - provides our hidden service configuration - |- set_hidden_service_conf - sets our hidden service configuration - |- create_hidden_service - creates a new hidden service or adds a new port - |- remove_hidden_service - removes a hidden service or drops a port - | - |- list_ephemeral_hidden_services - list ephemeral hidden serivces - |- create_ephemeral_hidden_service - create a new ephemeral hidden service - |- remove_ephemeral_hidden_service - removes an ephemeral hidden service - | - |- add_event_listener - attaches an event listener to be notified of tor events - |- remove_event_listener - removes a listener so it isn't notified of further events - | - |- is_caching_enabled - true if the controller has enabled caching - |- set_caching - enables or disables caching - |- clear_cache - clears any cached results - | - |- load_conf - loads configuration information as if it was in the torrc - |- save_conf - saves configuration information to the torrc - | - |- is_feature_enabled - checks if a given controller feature is enabled - |- enable_feature - enables a controller feature that has been disabled by default - | - |- get_circuit - provides an active circuit - |- get_circuits - provides a list of active circuits - |- new_circuit - create new circuits - |- extend_circuit - create new circuits and extend existing ones - |- repurpose_circuit - change a circuit's purpose - |- close_circuit - close a circuit - | - |- get_streams - provides a list of active streams - |- attach_stream - attach a stream to a circuit - |- close_stream - close a stream - | - |- signal - sends a signal to the tor client - |- is_newnym_available - true if tor would currently accept a NEWNYM signal - |- get_newnym_wait - seconds until tor would accept a NEWNYM signal - |- get_effective_rate - provides our effective relaying rate limit - |- is_geoip_unavailable - true if we've discovered our geoip db to be unavailable - |- map_address - maps one address to another such that connections to the original are replaced with the other - +- drop_guards - drops our set of guard relays and picks a new set - - BaseController - Base controller class asynchronous message handling - |- msg - communicates with the tor process - |- is_alive - reports if our connection to tor is open or closed - |- is_localhost - returns if the connection is for the local system or not - |- connection_time - time when we last connected or disconnected - |- is_authenticated - checks if we're authenticated to tor - |- connect - connects or reconnects to tor - |- close - shuts down our connection to the tor process - |- get_socket - provides the socket used for control communication - |- get_latest_heartbeat - timestamp for when we last heard from tor - |- add_status_listener - notifies a callback of changes in our status - +- remove_status_listener - prevents further notification of status changes - -.. data:: State (enum) - - Enumeration for states that a controller can have. - - ========== =========== - State Description - ========== =========== - **INIT** new control connection - **RESET** received a reset/sighup signal - **CLOSED** control connection closed - ========== =========== - -.. data:: EventType (enum) - - Known types of events that the - :func:`~stem.control.Controller.add_event_listener` method of the - :class:`~stem.control.Controller` can listen for. - - The most frequently listened for event types tend to be the logging events - (**DEBUG**, **INFO**, **NOTICE**, **WARN**, and **ERR**), bandwidth usage - (**BW**), and circuit or stream changes (**CIRC** and **STREAM**). - - Enums are mapped to :class:`~stem.response.events.Event` subclasses as - follows... - - .. deprecated:: 1.6.0 - - Tor dropped EventType.AUTHDIR_NEWDESCS as of version 0.3.2.1. - (:spec:`6e887ba`) - - ======================= =========== - EventType Event Class - ======================= =========== - **ADDRMAP** :class:`stem.response.events.AddrMapEvent` - **AUTHDIR_NEWDESCS** :class:`stem.response.events.AuthDirNewDescEvent` - **BUILDTIMEOUT_SET** :class:`stem.response.events.BuildTimeoutSetEvent` - **BW** :class:`stem.response.events.BandwidthEvent` - **CELL_STATS** :class:`stem.response.events.CellStatsEvent` - **CIRC** :class:`stem.response.events.CircuitEvent` - **CIRC_BW** :class:`stem.response.events.CircuitBandwidthEvent` - **CIRC_MINOR** :class:`stem.response.events.CircMinorEvent` - **CLIENTS_SEEN** :class:`stem.response.events.ClientsSeenEvent` - **CONF_CHANGED** :class:`stem.response.events.ConfChangedEvent` - **CONN_BW** :class:`stem.response.events.ConnectionBandwidthEvent` - **DEBUG** :class:`stem.response.events.LogEvent` - **DESCCHANGED** :class:`stem.response.events.DescChangedEvent` - **ERR** :class:`stem.response.events.LogEvent` - **GUARD** :class:`stem.response.events.GuardEvent` - **HS_DESC** :class:`stem.response.events.HSDescEvent` - **HS_DESC_CONTENT** :class:`stem.response.events.HSDescContentEvent` - **INFO** :class:`stem.response.events.LogEvent` - **NETWORK_LIVENESS** :class:`stem.response.events.NetworkLivenessEvent` - **NEWCONSENSUS** :class:`stem.response.events.NewConsensusEvent` - **NEWDESC** :class:`stem.response.events.NewDescEvent` - **NOTICE** :class:`stem.response.events.LogEvent` - **NS** :class:`stem.response.events.NetworkStatusEvent` - **ORCONN** :class:`stem.response.events.ORConnEvent` - **SIGNAL** :class:`stem.response.events.SignalEvent` - **STATUS_CLIENT** :class:`stem.response.events.StatusEvent` - **STATUS_GENERAL** :class:`stem.response.events.StatusEvent` - **STATUS_SERVER** :class:`stem.response.events.StatusEvent` - **STREAM** :class:`stem.response.events.StreamEvent` - **STREAM_BW** :class:`stem.response.events.StreamBwEvent` - **TB_EMPTY** :class:`stem.response.events.TokenBucketEmptyEvent` - **TRANSPORT_LAUNCHED** :class:`stem.response.events.TransportLaunchedEvent` - **WARN** :class:`stem.response.events.LogEvent` - ======================= =========== - -.. data:: Listener (enum) - - Purposes for inbound connections that Tor handles. - - .. versionchanged:: 1.8.0 - Added the EXTOR and HTTPTUNNEL listeners. - - =============== =========== - Listener Description - =============== =========== - **OR** traffic we're relaying as a member of the network (torrc's **ORPort** and **ORListenAddress**) - **DIR** mirroring for tor descriptor content (torrc's **DirPort** and **DirListenAddress**) - **SOCKS** client traffic we're sending over Tor (torrc's **SocksPort** and **SocksListenAddress**) - **TRANS** transparent proxy handling (torrc's **TransPort** and **TransListenAddress**) - **NATD** forwarding for ipfw NATD connections (torrc's **NatdPort** and **NatdListenAddress**) - **DNS** DNS lookups for our traffic (torrc's **DNSPort** and **DNSListenAddress**) - **CONTROL** controller applications (torrc's **ControlPort** and **ControlListenAddress**) - **EXTOR** pluggable transport for Extended ORPorts (torrc's **ExtORPort**) - **HTTPTUNNEL** http tunneling proxy (torrc's **HTTPTunnelPort**) - =============== =========== -""" - -import calendar -import collections.abc -import functools -import inspect -import io -import os -import threading -import time - -try: - # Added in 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -try: - # Added in 3.x - import queue -except ImportError: - import Queue as queue - -import stem.descriptor.microdescriptor -import stem.descriptor.reader -import stem.descriptor.router_status_entry -import stem.descriptor.server_descriptor -import stem.exit_policy -import stem.response -import stem.response.events -import stem.socket -import stem.util -import stem.util.conf -import stem.util.connection -import stem.util.enum -import stem.util.str_tools -import stem.util.system -import stem.util.tor_tools -import stem.version - -from stem import UNDEFINED, CircStatus, Signal -from stem.util import log - -# When closing the controller we attempt to finish processing enqueued events, -# but if it takes longer than this we terminate. - -EVENTS_LISTENING_TIMEOUT = 0.1 - -MALFORMED_EVENTS = 'MALFORMED_EVENTS' - -# state changes a control socket can have - -State = stem.util.enum.Enum('INIT', 'RESET', 'CLOSED') - -# TODO: consider merging this with stem.response.event in stem 2.x? (#32689) - -EventType = stem.util.enum.UppercaseEnum( - 'ADDRMAP', - 'AUTHDIR_NEWDESCS', - 'BUILDTIMEOUT_SET', - 'BW', - 'CELL_STATS', - 'CIRC', - 'CIRC_BW', - 'CIRC_MINOR', - 'CONF_CHANGED', - 'CONN_BW', - 'CLIENTS_SEEN', - 'DEBUG', - 'DESCCHANGED', - 'ERR', - 'GUARD', - 'HS_DESC', - 'HS_DESC_CONTENT', - 'INFO', - 'NETWORK_LIVENESS', - 'NEWCONSENSUS', - 'NEWDESC', - 'NOTICE', - 'NS', - 'ORCONN', - 'SIGNAL', - 'STATUS_CLIENT', - 'STATUS_GENERAL', - 'STATUS_SERVER', - 'STREAM', - 'STREAM_BW', - 'TB_EMPTY', - 'TRANSPORT_LAUNCHED', - 'WARN', -) - -Listener = stem.util.enum.UppercaseEnum( - 'OR', - 'DIR', - 'SOCKS', - 'TRANS', - 'NATD', - 'DNS', - 'CONTROL', - 'EXTOR', - 'HTTPTUNNEL', -) - -# torrc options that cannot be changed once tor's running - -IMMUTABLE_CONFIG_OPTIONS = set(map(stem.util.str_tools._to_unicode, map(str.lower, ( - 'AccelDir', - 'AccelName', - 'DataDirectory', - 'DisableAllSwap', - 'DisableDebuggerAttachment', - 'HardwareAccel', - 'HiddenServiceNonAnonymousMode', - 'HiddenServiceSingleHopMode', - 'KeepBindCapabilities', - 'PidFile', - 'RunAsDaemon', - 'Sandbox', - 'SyslogIdentityTag', - 'TokenBucketRefillInterval', - 'User', -)))) - -LOG_CACHE_FETCHES = True # provide trace level logging for cache hits - -# Configuration options that are fetched by a special key. The keys are -# lowercase to make case insensitive lookups easier. - -MAPPED_CONFIG_KEYS = { - 'hiddenservicedir': 'HiddenServiceOptions', - 'hiddenserviceport': 'HiddenServiceOptions', - 'hiddenserviceversion': 'HiddenServiceOptions', - 'hiddenserviceauthorizeclient': 'HiddenServiceOptions', - 'hiddenserviceoptions': 'HiddenServiceOptions', -} - -# unchangeable GETINFO parameters - -CACHEABLE_GETINFO_PARAMS = ( - 'address', - 'version', - 'config-file', - 'exit-policy/default', - 'fingerprint', - 'config/names', - 'config/defaults', - 'info/names', - 'events/names', - 'features/names', - 'process/descriptor-limit', - 'status/version/current', -) - -CACHEABLE_GETINFO_PARAMS_UNTIL_SETCONF = ( - 'accounting/enabled', -) - -# GETCONF parameters we shouldn't cache. This includes hidden service -# perameters due to the funky way they're set and retrieved (for instance, -# 'SETCONF HiddenServiceDir' effects 'GETCONF HiddenServiceOptions'). - -UNCACHEABLE_GETCONF_PARAMS = ( - 'hiddenserviceoptions', - 'hiddenservicedir', - 'hiddenserviceport', - 'hiddenserviceversion', - 'hiddenserviceauthorizeclient', -) - -SERVER_DESCRIPTORS_UNSUPPORTED = "Tor is currently not configured to retrieve \ -server descriptors. As of Tor version 0.2.3.25 it downloads microdescriptors \ -instead unless you set 'UseMicrodescriptors 0' in your torrc." - -EVENT_DESCRIPTIONS = None - - -class AccountingStats(collections.namedtuple('AccountingStats', ['retrieved', 'status', 'interval_end', 'time_until_reset', 'read_bytes', 'read_bytes_left', 'read_limit', 'written_bytes', 'write_bytes_left', 'write_limit'])): - """ - Accounting information, determining the limits where our relay suspends - itself. - - :var float retrieved: unix timestamp for when this was fetched - :var str status: hibernation status of 'awake', 'soft', or 'hard' - :var datetime interval_end: time when our limits reset - :var int time_until_reset: seconds until our limits reset - :var int read_bytes: number of bytes we've read relaying - :var int read_bytes_left: number of bytes we can read until we suspend - :var int read_limit: reading threshold where we suspend - :var int written_bytes: number of bytes we've written relaying - :var int write_bytes_left: number of bytes we can write until we suspend - :var int write_limit: writing threshold where we suspend - """ - - -class UserTrafficAllowed(collections.namedtuple('UserTrafficAllowed', ['inbound', 'outbound'])): - """ - Indicates if we're likely to be servicing direct user traffic or not. - - :var bool inbound: if **True** we're likely providing guard or bridge connnections - :var bool outbound: if **True** we're likely providng exit connections - """ - - -class CreateHiddenServiceOutput(collections.namedtuple('CreateHiddenServiceOutput', ['path', 'hostname', 'hostname_for_client', 'config'])): - """ - Attributes of a hidden service we've created. - - Both the **hostnames** and **hostname_for_client** attributes can only be - provided if we're able to read the hidden service directory. If the method - was called with **client_names** then we may provide the - **hostname_for_client**, and otherwise can provide the **hostnames**. - - :var str path: hidden service directory - :var str hostname: content of the hostname file if available - :var dict hostname_for_client: mapping of client names to their onion address - if available - :var dict config: tor's new hidden service configuration - """ - - -def with_default(yields = False): - """ - Provides a decorator to support having a default value. This should be - treated as private. - """ - - def decorator(func): - def get_default(func, args, kwargs): - arg_names = inspect.getfullargspec(func).args[1:] # drop 'self' - default_position = arg_names.index('default') if 'default' in arg_names else None - - if default_position is not None and default_position < len(args): - return args[default_position] - else: - return kwargs.get('default', UNDEFINED) - - if not yields: - @functools.wraps(func) - def wrapped(self, *args, **kwargs): - try: - return func(self, *args, **kwargs) - except: - default = get_default(func, args, kwargs) - - if default == UNDEFINED: - raise - else: - return default - else: - @functools.wraps(func) - def wrapped(self, *args, **kwargs): - try: - for val in func(self, *args, **kwargs): - yield val - except: - default = get_default(func, args, kwargs) - - if default == UNDEFINED: - raise - else: - if default is not None: - for val in default: - yield val - - return wrapped - - return decorator - - -def event_description(event): - """ - Provides a description for Tor events. - - :param str event: the event for which a description is needed - - :returns: **str** The event description or **None** if this is an event name - we don't have a description for - """ - - global EVENT_DESCRIPTIONS - - if EVENT_DESCRIPTIONS is None: - config = stem.util.conf.Config() - config_path = os.path.join(os.path.dirname(__file__), 'settings.cfg') - - try: - config.load(config_path) - EVENT_DESCRIPTIONS = dict([(key.lower()[18:], config.get_value(key)) for key in config.keys() if key.startswith('event.description.')]) - except Exception as exc: - log.warn("BUG: stem failed to load its internal manual information from '%s': %s" % (config_path, exc)) - return None - - return EVENT_DESCRIPTIONS.get(event.lower()) - - -class BaseController(object): - """ - Controller for the tor process. This is a minimal base class for other - controllers, providing basic process communication and event listing. Don't - use this directly - subclasses like the :class:`~stem.control.Controller` - provide higher level functionality. - - It's highly suggested that you don't interact directly with the - :class:`~stem.socket.ControlSocket` that we're constructed from - use our - wrapper methods instead. - - If the **control_socket** is already authenticated to Tor then the caller - should provide the **is_authenticated** flag. Otherwise, we will treat the - socket as though it hasn't yet been authenticated. - """ - - def __init__(self, control_socket, is_authenticated = False): - self._socket = control_socket - self._msg_lock = threading.RLock() - - self._status_listeners = [] # tuples of the form (callback, spawn_thread) - self._status_listeners_lock = threading.RLock() - - # queues where incoming messages are directed - self._reply_queue = queue.Queue() - self._event_queue = queue.Queue() - - # thread to continually pull from the control socket - self._reader_thread = None - - # thread to pull from the _event_queue and call handle_event - self._event_notice = threading.Event() - self._event_thread = None - - # saves our socket's prior _connect() and _close() methods so they can be - # called along with ours - - self._socket_connect = self._socket._connect - self._socket_close = self._socket._close - - self._socket._connect = self._connect - self._socket._close = self._close - - self._last_heartbeat = 0.0 # timestamp for when we last heard from tor - self._is_authenticated = False - - self._state_change_threads = [] # threads we've spawned to notify of state changes - - if self._socket.is_alive(): - self._launch_threads() - - if is_authenticated: - self._post_authentication() - - def msg(self, message): - """ - Sends a message to our control socket and provides back its reply. - - :param str message: message to be formatted and sent to tor - - :returns: :class:`~stem.response.ControlMessage` with the response - - :raises: - * :class:`stem.ProtocolError` the content from the socket is - malformed - * :class:`stem.SocketError` if a problem arises in using the - socket - * :class:`stem.SocketClosed` if the socket is shut down - """ - - with self._msg_lock: - # If our _reply_queue isn't empty then one of a few things happened... - # - # - Our connection was closed and probably re-restablished. This was - # in reply to pulling for an asynchronous event and getting this is - # expected - ignore it. - # - # - Pulling for asynchronous events produced an error. If this was a - # ProtocolError then it's a tor bug, and if a non-closure SocketError - # then it was probably a socket glitch. Deserves an INFO level log - # message. - # - # - This is a leftover response for a msg() call. We can't tell who an - # exception was earmarked for, so we only know that this was the case - # if it's a ControlMessage. - # - # This is the most concerning situation since it indicates that one of - # our callers didn't get their reply. However, this is still a - # perfectly viable use case. For instance... - # - # 1. We send a request. - # 2. The reader thread encounters an exception, for instance a socket - # error. We enqueue the exception. - # 3. The reader thread receives the reply. - # 4. We raise the socket error, and have an undelivered message. - # - # Thankfully this only seems to arise in edge cases around rapidly - # closing/reconnecting the socket. - - while not self._reply_queue.empty(): - try: - response = self._reply_queue.get_nowait() - - if isinstance(response, stem.SocketClosed): - pass # this is fine - elif isinstance(response, stem.ProtocolError): - log.info('Tor provided a malformed message (%s)' % response) - elif isinstance(response, stem.ControllerError): - log.info('Socket experienced a problem (%s)' % response) - elif isinstance(response, stem.response.ControlMessage): - log.info('Failed to deliver a response: %s' % response) - except queue.Empty: - # the empty() method is documented to not be fully reliable so this - # isn't entirely surprising - - break - - try: - self._socket.send(message) - response = self._reply_queue.get() - - # If the message we received back had an exception then re-raise it to the - # caller. Otherwise return the response. - - if isinstance(response, stem.ControllerError): - raise response - else: - return response - except stem.SocketClosed: - # If the recv() thread caused the SocketClosed then we could still be - # in the process of closing. Calling close() here so that we can - # provide an assurance to the caller that when we raise a SocketClosed - # exception we are shut down afterward for realz. - - self.close() - raise - - def is_alive(self): - """ - Checks if our socket is currently connected. This is a pass-through for our - socket's :func:`~stem.socket.BaseSocket.is_alive` method. - - :returns: **bool** that's **True** if our socket is connected and **False** otherwise - """ - - return self._socket.is_alive() - - def is_localhost(self): - """ - Returns if the connection is for the local system or not. - - .. versionadded:: 1.3.0 - - :returns: **bool** that's **True** if the connection is for the local host and **False** otherwise - """ - - return self._socket.is_localhost() - - def connection_time(self): - """ - Provides the unix timestamp for when our socket was either connected or - disconnected. That is to say, the time we connected if we're currently - connected and the time we disconnected if we're not connected. - - .. versionadded:: 1.3.0 - - :returns: **float** for when we last connected or disconnected, zero if - we've never connected - """ - - return self._socket.connection_time() - - def is_authenticated(self): - """ - Checks if our socket is both connected and authenticated. - - :returns: **bool** that's **True** if our socket is authenticated to tor - and **False** otherwise - """ - - return self._is_authenticated if self.is_alive() else False - - def connect(self): - """ - Reconnects our control socket. This is a pass-through for our socket's - :func:`~stem.socket.ControlSocket.connect` method. - - :raises: :class:`stem.SocketError` if unable to make a socket - """ - - self._socket.connect() - - def close(self): - """ - Closes our socket connection. This is a pass-through for our socket's - :func:`~stem.socket.BaseSocket.close` method. - """ - - self._socket.close() - - # Join on any outstanding state change listeners. Closing is a state change - # of its own, so if we have any listeners it's quite likely there's some - # work in progress. - # - # It's important that we do this outside of our locks so those daemons have - # access to us. This is why we're doing this here rather than _close(). - - for t in self._state_change_threads: - if t.is_alive() and threading.current_thread() != t: - t.join() - - def get_socket(self): - """ - Provides the socket used to speak with the tor process. Communicating with - the socket directly isn't advised since it may confuse this controller. - - :returns: :class:`~stem.socket.ControlSocket` we're communicating with - """ - - return self._socket - - def get_latest_heartbeat(self): - """ - Provides the unix timestamp for when we last heard from tor. This is zero - if we've never received a message. - - :returns: float for the unix timestamp of when we last heard from tor - """ - - return self._last_heartbeat - - def add_status_listener(self, callback, spawn = True): - """ - Notifies a given function when the state of our socket changes. Functions - are expected to be of the form... - - :: - - my_function(controller, state, timestamp) - - The state is a value from the :data:`stem.control.State` enum. Functions - **must** allow for new values. The timestamp is a float for the unix time - when the change occurred. - - This class only provides **State.INIT** and **State.CLOSED** notifications. - Subclasses may provide others. - - If spawn is **True** then the callback is notified via a new daemon thread. - If **False** then the notice is under our locks, within the thread where - the change occurred. In general this isn't advised, especially if your - callback could block for a while. If still outstanding these threads are - joined on as part of closing this controller. - - :param function callback: function to be notified when our state changes - :param bool spawn: calls function via a new thread if **True**, otherwise - it's part of the connect/close method call - """ - - with self._status_listeners_lock: - self._status_listeners.append((callback, spawn)) - - def remove_status_listener(self, callback): - """ - Stops listener from being notified of further events. - - :param function callback: function to be removed from our listeners - - :returns: **bool** that's **True** if we removed one or more occurrences of - the callback, **False** otherwise - """ - - with self._status_listeners_lock: - new_listeners, is_changed = [], False - - for listener, spawn in self._status_listeners: - if listener != callback: - new_listeners.append((listener, spawn)) - else: - is_changed = True - - self._status_listeners = new_listeners - return is_changed - - def __enter__(self): - return self - - def __exit__(self, exit_type, value, traceback): - self.close() - - def _handle_event(self, event_message): - """ - Callback to be overwritten by subclasses for event listening. This is - notified whenever we receive an event from the control socket. - - :param stem.response.ControlMessage event_message: message received from - the control socket - """ - - pass - - def _connect(self): - self._launch_threads() - self._notify_status_listeners(State.INIT) - self._socket_connect() - self._is_authenticated = False - - def _close(self): - # Our is_alive() state is now false. Our reader thread should already be - # awake from recv() raising a closure exception. Wake up the event thread - # too so it can end. - - self._event_notice.set() - self._is_authenticated = False - - # joins on our threads if it's safe to do so - - for t in (self._reader_thread, self._event_thread): - if t and t.is_alive() and threading.current_thread() != t: - t.join() - - self._notify_status_listeners(State.CLOSED) - - self._socket_close() - - def _post_authentication(self): - # actions to be taken after we have a newly authenticated connection - - self._is_authenticated = True - - def _notify_status_listeners(self, state): - """ - Informs our status listeners that a state change occurred. - - :param stem.control.State state: state change that has occurred - """ - - # Any changes to our is_alive() state happen under the send lock, so we - # need to have it to ensure it doesn't change beneath us. - - with self._socket._get_send_lock(): - with self._status_listeners_lock: - # States imply that our socket is either alive or not, which may not - # hold true when multiple events occur in quick succession. For - # instance, a sighup could cause two events (State.RESET for the sighup - # and State.CLOSE if it causes tor to crash). However, there's no - # guarantee of the order in which they occur, and it would be bad if - # listeners got the State.RESET last, implying that we were alive. - - expect_alive = None - - if state in (State.INIT, State.RESET): - expect_alive = True - elif state == State.CLOSED: - expect_alive = False - - change_timestamp = time.time() - - if expect_alive is not None and expect_alive != self.is_alive(): - return - - self._state_change_threads = list(filter(lambda t: t.is_alive(), self._state_change_threads)) - - for listener, spawn in self._status_listeners: - if spawn: - args = (self, state, change_timestamp) - - notice_thread = threading.Thread(target = listener, args = args, name = '%s notification' % state) - notice_thread.setDaemon(True) - notice_thread.start() - self._state_change_threads.append(notice_thread) - else: - listener(self, state, change_timestamp) - - def _launch_threads(self): - """ - Initializes daemon threads. Threads can't be reused so we need to recreate - them if we're restarted. - """ - - # In theory concurrent calls could result in multiple start() calls on a - # single thread, which would cause an unexpected exception. Best be safe. - - with self._socket._get_send_lock(): - if not self._reader_thread or not self._reader_thread.is_alive(): - self._reader_thread = threading.Thread(target = self._reader_loop, name = 'Tor listener') - self._reader_thread.setDaemon(True) - self._reader_thread.start() - - if not self._event_thread or not self._event_thread.is_alive(): - self._event_thread = threading.Thread(target = self._event_loop, name = 'Event notifier') - self._event_thread.setDaemon(True) - self._event_thread.start() - - def _reader_loop(self): - """ - Continually pulls from the control socket, directing the messages into - queues based on their type. Controller messages come in two varieties... - - * Responses to messages we've sent (GETINFO, SETCONF, etc). - * Asynchronous events, identified by a status code of 650. - """ - - while self.is_alive(): - try: - control_message = self._socket.recv() - self._last_heartbeat = time.time() - - if control_message.content()[-1][0] == '650': - # asynchronous message, adds to the event queue and wakes up its handler - self._event_queue.put(control_message) - self._event_notice.set() - else: - # response to a msg() call - self._reply_queue.put(control_message) - except stem.ControllerError as exc: - # Assume that all exceptions belong to the reader. This isn't always - # true, but the msg() call can do a better job of sorting it out. - # - # Be aware that the msg() method relies on this to unblock callers. - - self._reply_queue.put(exc) - - def _event_loop(self): - """ - Continually pulls messages from the _event_queue and sends them to our - handle_event callback. This is done via its own thread so subclasses with a - lengthy handle_event implementation don't block further reading from the - socket. - """ - - socket_closed_at = None - - while True: - try: - event_message = self._event_queue.get_nowait() - self._handle_event(event_message) - self._event_queue.task_done() - - # Attempt to finish processing enqueued events when our controller closes - - if not self.is_alive(): - if not socket_closed_at: - socket_closed_at = time.time() - elif time.time() - socket_closed_at > EVENTS_LISTENING_TIMEOUT: - break - except queue.Empty: - if not self.is_alive(): - break - - self._event_notice.wait(0.05) - self._event_notice.clear() - - -class Controller(BaseController): - """ - Connection with Tor's control socket. This is built on top of the - BaseController and provides a more user friendly API for library users. - """ - - @staticmethod - def from_port(address = '127.0.0.1', port = 'default'): - """ - Constructs a :class:`~stem.socket.ControlPort` based Controller. - - If the **port** is **'default'** then this checks on both 9051 (default - for relays) and 9151 (default for the Tor Browser). This default may change - in the future. - - .. versionchanged:: 1.5.0 - Use both port 9051 and 9151 by default. - - :param str address: ip address of the controller - :param int port: port number of the controller - - :returns: :class:`~stem.control.Controller` attached to the given port - - :raises: :class:`stem.SocketError` if we're unable to establish a connection - """ - - import stem.connection - - if not stem.util.connection.is_valid_ipv4_address(address): - raise ValueError('Invalid IP address: %s' % address) - elif port != 'default' and not stem.util.connection.is_valid_port(port): - raise ValueError('Invalid port: %s' % port) - - if port == 'default': - control_port = stem.connection._connection_for_default_port(address) - else: - control_port = stem.socket.ControlPort(address, port) - - return Controller(control_port) - - @staticmethod - def from_socket_file(path = '/var/run/tor/control'): - """ - Constructs a :class:`~stem.socket.ControlSocketFile` based Controller. - - :param str path: path where the control socket is located - - :returns: :class:`~stem.control.Controller` attached to the given socket file - - :raises: :class:`stem.SocketError` if we're unable to establish a connection - """ - - control_socket = stem.socket.ControlSocketFile(path) - return Controller(control_socket) - - def __init__(self, control_socket, is_authenticated = False): - self._is_caching_enabled = True - self._request_cache = {} - self._last_newnym = 0.0 - - self._cache_lock = threading.RLock() - - # mapping of event types to their listeners - - self._event_listeners = {} - self._event_listeners_lock = threading.RLock() - self._enabled_features = [] - self._is_geoip_unavailable = None - - self._last_address_exc = None - self._last_fingerprint_exc = None - - super(Controller, self).__init__(control_socket, is_authenticated) - - def _sighup_listener(event): - if event.signal == Signal.RELOAD: - self.clear_cache() - self._notify_status_listeners(State.RESET) - - self.add_event_listener(_sighup_listener, EventType.SIGNAL) - - def _confchanged_listener(event): - if self.is_caching_enabled(): - to_cache_changed = dict((k.lower(), v) for k, v in event.changed.items()) - to_cache_unset = dict((k.lower(), []) for k in event.unset) # [] represents None value in cache - - to_cache = {} - to_cache.update(to_cache_changed) - to_cache.update(to_cache_unset) - - self._set_cache(to_cache, 'getconf') - - self._confchanged_cache_invalidation(to_cache) - - self.add_event_listener(_confchanged_listener, EventType.CONF_CHANGED) - - def _address_changed_listener(event): - if event.action in ('EXTERNAL_ADDRESS', 'DNS_USELESS'): - self._set_cache({'exit_policy': None}) - self._set_cache({'address': None}, 'getinfo') - self._last_address_exc = None - - self.add_event_listener(_address_changed_listener, EventType.STATUS_SERVER) - - def close(self): - self.clear_cache() - super(Controller, self).close() - - def authenticate(self, *args, **kwargs): - """ - A convenience method to authenticate the controller. This is just a - pass-through to :func:`stem.connection.authenticate`. - """ - - import stem.connection - stem.connection.authenticate(self, *args, **kwargs) - - def reconnect(self, *args, **kwargs): - """ - Reconnects and authenticates to our control socket. - - .. versionadded:: 1.5.0 - - :raises: - * :class:`stem.SocketError` if unable to re-establish socket - * :class:`stem.connection.AuthenticationFailure` if unable to authenticate - """ - - with self._msg_lock: - self.connect() - self.clear_cache() - self.authenticate(*args, **kwargs) - - @with_default() - def get_info(self, params, default = UNDEFINED, get_bytes = False): - """ - get_info(params, default = UNDEFINED, get_bytes = False) - - Queries the control socket for the given GETINFO option. If provided a - default then that's returned if the GETINFO option is undefined or the - call fails for any reason (error response, control port closed, initiated, - etc). - - .. versionchanged:: 1.1.0 - Added the get_bytes argument. - - .. versionchanged:: 1.7.0 - Errors commonly provided a :class:`stem.ProtocolError` when we should - raise a :class:`stem.OperationFailed`. - - :param str,list params: GETINFO option or options to be queried - :param object default: response if the query fails - :param bool get_bytes: provides **bytes** values rather than a **str** under python 3.x - - :returns: - Response depends upon how we were called as follows... - - * **str** with the response if our param was a **str** - * **dict** with the 'param => response' mapping if our param was a **list** - * default if one was provided and our call failed - - :raises: - * :class:`stem.ControllerError` if the call fails and we weren't - provided a default response - * :class:`stem.InvalidArguments` if the 'params' requested was - invalid - * :class:`stem.ProtocolError` if the geoip database is unavailable - """ - - start_time = time.time() - reply = {} - - if stem.util._is_str(params): - is_multiple = False - params = set([params]) - else: - if not params: - return {} - - is_multiple = True - params = set(params) - - for param in params: - if param.startswith('ip-to-country/') and param != 'ip-to-country/0.0.0.0' and self.is_geoip_unavailable(): - raise stem.ProtocolError('Tor geoip database is unavailable') - elif param == 'address' and self._last_address_exc: - raise self._last_address_exc # we already know we can't resolve an address - elif param == 'fingerprint' and self._last_fingerprint_exc and self.get_conf('ORPort', None) is None: - raise self._last_fingerprint_exc # we already know we're not a relay - - # check for cached results - - from_cache = [param.lower() for param in params] - cached_results = self._get_cache_map(from_cache, 'getinfo') - - for key in cached_results: - user_expected_key = _case_insensitive_lookup(params, key) - reply[user_expected_key] = cached_results[key] - params.remove(user_expected_key) - - # if everything was cached then short circuit making the query - if not params: - if LOG_CACHE_FETCHES: - log.trace('GETINFO %s (cache fetch)' % ' '.join(reply.keys())) - - if is_multiple: - return reply - else: - return list(reply.values())[0] - - try: - response = self.msg('GETINFO %s' % ' '.join(params)) - stem.response.convert('GETINFO', response) - response._assert_matches(params) - - # usually we want unicode values under python 3.x - - if stem.prereq.is_python_3() and not get_bytes: - response.entries = dict((k, stem.util.str_tools._to_unicode(v)) for (k, v) in response.entries.items()) - - reply.update(response.entries) - - if self.is_caching_enabled(): - to_cache = {} - - for key, value in response.entries.items(): - key = key.lower() # make case insensitive - - if key in CACHEABLE_GETINFO_PARAMS or key in CACHEABLE_GETINFO_PARAMS_UNTIL_SETCONF: - to_cache[key] = value - elif key.startswith('ip-to-country/'): - to_cache[key] = value - - self._set_cache(to_cache, 'getinfo') - - if 'address' in params: - self._last_address_exc = None - - if 'fingerprint' in params: - self._last_fingerprint_exc = None - - log.debug('GETINFO %s (runtime: %0.4f)' % (' '.join(params), time.time() - start_time)) - - if is_multiple: - return reply - else: - return list(reply.values())[0] - except stem.ControllerError as exc: - if 'address' in params: - self._last_address_exc = exc - - if 'fingerprint' in params: - self._last_fingerprint_exc = exc - - log.debug('GETINFO %s (failed: %s)' % (' '.join(params), exc)) - raise - - @with_default() - def get_version(self, default = UNDEFINED): - """ - get_version(default = UNDEFINED) - - A convenience method to get tor version that current controller is - connected to. - - :param object default: response if the query fails - - :returns: :class:`~stem.version.Version` of the tor instance that we're - connected to - - :raises: - * :class:`stem.ControllerError` if unable to query the version - * **ValueError** if unable to parse the version - - An exception is only raised if we weren't provided a default response. - """ - - version = self._get_cache('version') - - if not version: - version_str = self.get_info('version') - version = stem.version.Version(version_str[4:] if version_str.startswith('Tor ') else version_str) - self._set_cache({'version': version}) - - return version - - @with_default() - def get_exit_policy(self, default = UNDEFINED): - """ - get_exit_policy(default = UNDEFINED) - - Effective ExitPolicy for our relay. - - .. versionchanged:: 1.7.0 - Policies retrieved through 'GETINFO exit-policy/full' rather than - parsing the user's torrc entries. This should be more reliable for - some edge cases. (:trac:`25739`) - - :param object default: response if the query fails - - :returns: :class:`~stem.exit_policy.ExitPolicy` of the tor instance that - we're connected to - - :raises: - * :class:`stem.ControllerError` if unable to query the policy - * **ValueError** if unable to parse the policy - - An exception is only raised if we weren't provided a default response. - """ - - policy = self._get_cache('exit_policy') - - if not policy: - try: - policy = stem.exit_policy.ExitPolicy(*self.get_info('exit-policy/full').splitlines()) - self._set_cache({'exit_policy': policy}) - except stem.OperationFailed: - # There's a few situations where 'GETINFO exit-policy/full' will fail, - # most commonly... - # - # * Error 551: Descriptor still rebuilding - not ready yet - # - # Tor hasn't yet finished making our server descriptor. This often - # arises when tor has first started. - # - # * Error 552: Not running in server mode - # - # We're not configured to be a relay (no ORPort), or haven't yet - # been able to determine our externally facing IP address. - # - # When these arise best we can do is infer our policy from the torrc. - # Skipping caching so we'll retry GETINFO policy resolution next time - # we're called. - - rules = [] - - if self.get_conf('ExitRelay') == '0': - rules.append('reject *:*') - - if self.get_conf('ExitPolicyRejectPrivate') == '1': - rules.append('reject private:*') - - for policy_line in self.get_conf('ExitPolicy', multiple = True): - rules += policy_line.split(',') - - rules += self.get_info('exit-policy/default').split(',') - - policy = stem.exit_policy.get_config_policy(rules, self.get_info('address', None)) - - return policy - - @with_default() - def get_ports(self, listener_type, default = UNDEFINED): - """ - get_ports(listener_type, default = UNDEFINED) - - Provides the local ports where tor is listening for the given type of - connections. This is similar to - :func:`~stem.control.Controller.get_listeners`, but doesn't provide - addresses nor include non-local endpoints. - - .. versionadded:: 1.2.0 - - :param stem.control.Listener listener_type: connection type being handled - by the ports we return - :param object default: response if the query fails - - :returns: **list** of **ints** for the local ports where tor handles - connections of the given type - - :raises: :class:`stem.ControllerError` if unable to determine the ports - and no default was provided - """ - - def is_localhost(address): - if stem.util.connection.is_valid_ipv4_address(address): - return address == '0.0.0.0' or address.startswith('127.') - elif stem.util.connection.is_valid_ipv6_address(address): - return stem.util.connection.expand_ipv6_address(address) in ( - '0000:0000:0000:0000:0000:0000:0000:0000', - '0000:0000:0000:0000:0000:0000:0000:0001', - ) - else: - log.info("Request for %s ports got an address that's neither IPv4 or IPv6: %s" % (listener_type, address)) - return False - - return [port for (addr, port) in self.get_listeners(listener_type) if is_localhost(addr)] - - @with_default() - def get_listeners(self, listener_type, default = UNDEFINED): - """ - get_listeners(listener_type, default = UNDEFINED) - - Provides the addresses and ports where tor is listening for connections of - the given type. This is similar to - :func:`~stem.control.Controller.get_ports` but includes listener addresses - and non-local endpoints. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.5.0 - Recognize listeners with IPv6 addresses. - - :param stem.control.Listener listener_type: connection type being handled - by the listeners we return - :param object default: response if the query fails - - :returns: **list** of **(address, port)** tuples for the available - listeners - - :raises: :class:`stem.ControllerError` if unable to determine the listeners - and no default was provided - """ - - listeners = self._get_cache(listener_type, 'listeners') - - if listeners is None: - proxy_addrs = [] - query = 'net/listeners/%s' % listener_type.lower() - - try: - for listener in self.get_info(query).split(): - if not (listener.startswith('"') and listener.endswith('"')): - raise stem.ProtocolError("'GETINFO %s' responses are expected to be quoted: %s" % (query, listener)) - elif ':' not in listener: - raise stem.ProtocolError("'GETINFO %s' had a listener without a colon: %s" % (query, listener)) - - listener = listener[1:-1] # strip quotes - addr, port = listener.rsplit(':', 1) - - # Skip unix sockets, for instance... - # - # GETINFO net/listeners/control - # 250-net/listeners/control="unix:/tmp/tor/socket" - # 250 OK - - if addr == 'unix': - continue - - if addr.startswith('[') and addr.endswith(']'): - addr = addr[1:-1] # unbracket ipv6 address - - proxy_addrs.append((addr, port)) - except stem.InvalidArguments: - # Tor version is old (pre-tor-0.2.2.26-beta), use get_conf() instead. - # Some options (like the ORPort) can have optional attributes after the - # actual port number. - - port_option = { - Listener.OR: 'ORPort', - Listener.DIR: 'DirPort', - Listener.SOCKS: 'SocksPort', - Listener.TRANS: 'TransPort', - Listener.NATD: 'NatdPort', - Listener.DNS: 'DNSPort', - Listener.CONTROL: 'ControlPort', - }[listener_type] - - listener_option = { - Listener.OR: 'ORListenAddress', - Listener.DIR: 'DirListenAddress', - Listener.SOCKS: 'SocksListenAddress', - Listener.TRANS: 'TransListenAddress', - Listener.NATD: 'NatdListenAddress', - Listener.DNS: 'DNSListenAddress', - Listener.CONTROL: 'ControlListenAddress', - }[listener_type] - - port_value = self.get_conf(port_option).split()[0] - - for listener in self.get_conf(listener_option, multiple = True): - if ':' in listener: - addr, port = listener.rsplit(':', 1) - - if addr.startswith('[') and addr.endswith(']'): - addr = addr[1:-1] # unbracket ipv6 address - - proxy_addrs.append((addr, port)) - else: - proxy_addrs.append((listener, port_value)) - - # validate that address/ports are valid, and convert ports to ints - - for addr, port in proxy_addrs: - if not stem.util.connection.is_valid_ipv4_address(addr) and not stem.util.connection.is_valid_ipv6_address(addr): - raise stem.ProtocolError('Invalid address for a %s listener: %s' % (listener_type, addr)) - elif not stem.util.connection.is_valid_port(port): - raise stem.ProtocolError('Invalid port for a %s listener: %s' % (listener_type, port)) - - listeners = [(addr, int(port)) for (addr, port) in proxy_addrs] - self._set_cache({listener_type: listeners}, 'listeners') - - return listeners - - @with_default() - def get_accounting_stats(self, default = UNDEFINED): - """ - get_accounting_stats(default = UNDEFINED) - - Provides stats related to our relaying limitations if AccountingMax was set - in our torrc. - - .. versionadded:: 1.3.0 - - :param object default: response if the query fails - - :returns: :class:`~stem.control.AccountingStats` with our accounting stats - - :raises: :class:`stem.ControllerError` if unable to determine the listeners - and no default was provided - """ - - if self.get_info('accounting/enabled') != '1': - raise stem.ControllerError("Accounting isn't enabled") - - retrieved = time.time() - status = self.get_info('accounting/hibernating') - interval_end = self.get_info('accounting/interval-end') - used = self.get_info('accounting/bytes') - left = self.get_info('accounting/bytes-left') - - interval_end = stem.util.str_tools._parse_timestamp(interval_end) - used_read, used_written = [int(val) for val in used.split(' ', 1)] - left_read, left_written = [int(val) for val in left.split(' ', 1)] - - return AccountingStats( - retrieved = retrieved, - status = status, - interval_end = interval_end, - time_until_reset = max(0, calendar.timegm(interval_end.timetuple()) - int(retrieved)), - read_bytes = used_read, - read_bytes_left = left_read, - read_limit = used_read + left_read, - written_bytes = used_written, - write_bytes_left = left_written, - write_limit = used_written + left_written, - ) - - def get_socks_listeners(self, default = UNDEFINED): - """ - Provides the SOCKS **(address, port)** tuples that tor has open. - - .. deprecated:: 1.2.0 - Use :func:`~stem.control.Controller.get_listeners` with - **Listener.SOCKS** instead. - - :param object default: response if the query fails - - :returns: list of **(address, port)** tuples for the available SOCKS - listeners - - :raises: :class:`stem.ControllerError` if unable to determine the listeners - and no default was provided - """ - - return self.get_listeners(Listener.SOCKS, default) - - @with_default() - def get_protocolinfo(self, default = UNDEFINED): - """ - get_protocolinfo(default = UNDEFINED) - - A convenience method to get the protocol info of the controller. - - :param object default: response if the query fails - - :returns: :class:`~stem.response.protocolinfo.ProtocolInfoResponse` provided by tor - - :raises: - * :class:`stem.ProtocolError` if the PROTOCOLINFO response is - malformed - * :class:`stem.SocketError` if problems arise in establishing or - using the socket - - An exception is only raised if we weren't provided a default response. - """ - - import stem.connection - return stem.connection.get_protocolinfo(self) - - @with_default() - def get_user(self, default = UNDEFINED): - """ - get_user(default = UNDEFINED) - - Provides the user tor is running as. This often only works if tor is - running locally. Also, most of its checks are platform dependent, and hence - are not entirely reliable. - - .. versionadded:: 1.1.0 - - :param object default: response if the query fails - - :returns: str with the username tor is running as - """ - - user = self._get_cache('user') - - if user: - return user - - user = self.get_info('process/user', None) - - if not user and self.is_localhost(): - pid = self.get_pid(None) - - if pid: - user = stem.util.system.user(pid) - - if user: - self._set_cache({'user': user}) - return user - else: - raise ValueError("Unable to resolve tor's user" if self.is_localhost() else "Tor isn't running locally") - - @with_default() - def get_pid(self, default = UNDEFINED): - """ - get_pid(default = UNDEFINED) - - Provides the process id of tor. This often only works if tor is running - locally. Also, most of its checks are platform dependent, and hence are not - entirely reliable. - - .. versionadded:: 1.1.0 - - :param object default: response if the query fails - - :returns: **int** for tor's pid - - :raises: **ValueError** if unable to determine the pid and no default was - provided - """ - - pid = self._get_cache('pid') - - if pid: - return pid - - getinfo_pid = self.get_info('process/pid', None) - - if getinfo_pid and getinfo_pid.isdigit(): - pid = int(getinfo_pid) - - if not pid and self.is_localhost(): - pid_file_path = self.get_conf('PidFile', None) - - if pid_file_path is not None: - with open(pid_file_path) as pid_file: - pid_file_contents = pid_file.read().strip() - - if pid_file_contents.isdigit(): - pid = int(pid_file_contents) - - if not pid: - pid = stem.util.system.pid_by_name('tor') - - if not pid: - control_socket = self.get_socket() - - if isinstance(control_socket, stem.socket.ControlPort): - pid = stem.util.system.pid_by_port(control_socket.port) - elif isinstance(control_socket, stem.socket.ControlSocketFile): - pid = stem.util.system.pid_by_open_file(control_socket.path) - - if pid: - self._set_cache({'pid': pid}) - return pid - else: - raise ValueError("Unable to resolve tor's pid" if self.is_localhost() else "Tor isn't running locally") - - @with_default() - def get_start_time(self, default = UNDEFINED): - """ - get_start_time(default = UNDEFINED) - - Provides when the tor process began. - - .. versionadded:: 1.8.0 - - :param object default: response if the query fails - - :returns: **float** for the unix timestamp of when the tor process began - - :raises: **ValueError** if unable to determine when the process began and - no default was provided - """ - - start_time = self._get_cache('start_time') - - if start_time: - return start_time - - if self.get_version() >= stem.version.Requirement.GETINFO_UPTIME: - uptime = self.get_info('uptime', None) - - if uptime: - if not uptime.isdigit(): - raise ValueError("'GETINFO uptime' did not provide a valid numeric response: %s" % uptime) - - start_time = time.time() - float(uptime) - - if not start_time and self.is_localhost(): - # Tor doesn't yet support this GETINFO option, attempt to determine the - # uptime of the process ourselves. - - if not self.is_localhost(): - raise ValueError('Unable to determine the uptime when tor is not running locally') - - pid = self.get_pid(None) - - if not pid: - raise ValueError('Unable to determine the pid of the tor process') - - start_time = stem.util.system.start_time(pid) - - if start_time: - self._set_cache({'start_time': start_time}) - return start_time - else: - raise ValueError("Unable to resolve when tor began" if self.is_localhost() else "Tor isn't running locally") - - @with_default() - def get_uptime(self, default = UNDEFINED): - """ - get_uptime(default = UNDEFINED) - - Provides the duration in seconds that tor has been running. - - .. versionadded:: 1.8.0 - - :param object default: response if the query fails - - :returns: **float** for the number of seconds tor has been running - - :raises: **ValueError** if unable to determine the uptime and no default - was provided - """ - - return time.time() - self.get_start_time() - - def is_user_traffic_allowed(self): - """ - Checks if we're likely to service direct user traffic. This essentially - boils down to... - - * If we're a bridge or guard relay, inbound connections are possibly from - users. - - * If our exit policy allows traffic then output connections are possibly - from users. - - Note the word 'likely'. These is a decent guess in practice, but not always - correct. For instance, information about which flags we have are only - fetched periodically. - - This method is intended to help you avoid eavesdropping on user traffic. - Monitoring user connections is not only unethical, but likely a violation - of wiretapping laws. - - .. versionadded:: 1.5.0 - - :returns: :class:`~stem.cotroller.UserTrafficAllowed` with **inbound** and - **outbound** boolean attributes to indicate if we're likely servicing - direct user traffic - """ - - inbound_allowed, outbound_allowed = False, False - - if self.get_conf('BridgeRelay', None) == '1': - inbound_allowed = True - - if self.get_conf('ORPort', None): - if not inbound_allowed: - consensus_entry = self.get_network_status(default = None) - inbound_allowed = consensus_entry and 'Guard' in consensus_entry.flags - - exit_policy = self.get_exit_policy(None) - outbound_allowed = exit_policy and exit_policy.is_exiting_allowed() - - return UserTrafficAllowed(inbound_allowed, outbound_allowed) - - @with_default() - def get_microdescriptor(self, relay = None, default = UNDEFINED): - """ - get_microdescriptor(relay = None, default = UNDEFINED) - - Provides the microdescriptor for the relay with the given fingerprint or - nickname. If the relay identifier could be either a fingerprint *or* - nickname then it's queried as a fingerprint. - - If no **relay** is provided then this defaults to ourselves. Remember that - this requires that we've retrieved our own descriptor from remote - authorities so this both won't be available for newly started relays and - may be up to around an hour out of date. - - .. versionchanged:: 1.3.0 - Changed so we'd fetch our own descriptor if no 'relay' is provided. - - :param str relay: fingerprint or nickname of the relay to be queried - :param object default: response if the query fails - - :returns: :class:`~stem.descriptor.microdescriptor.Microdescriptor` for the given relay - - :raises: - * :class:`stem.DescriptorUnavailable` if unable to provide a descriptor - for the given relay - * :class:`stem.ControllerError` if unable to query the descriptor - * **ValueError** if **relay** doesn't conform with the pattern for being - a fingerprint or nickname - - An exception is only raised if we weren't provided a default response. - """ - - if relay is None: - try: - relay = self.get_info('fingerprint') - except stem.ControllerError as exc: - raise stem.ControllerError('Unable to determine our own fingerprint: %s' % exc) - - if stem.util.tor_tools.is_valid_fingerprint(relay): - query = 'md/id/%s' % relay - elif stem.util.tor_tools.is_valid_nickname(relay): - query = 'md/name/%s' % relay - else: - raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay) - - try: - desc_content = self.get_info(query, get_bytes = True) - except stem.InvalidArguments as exc: - if str(exc).startswith('GETINFO request contained unrecognized keywords:'): - raise stem.DescriptorUnavailable("Tor was unable to provide the descriptor for '%s'" % relay) - else: - raise - - if not desc_content: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - return stem.descriptor.microdescriptor.Microdescriptor(desc_content) - - @with_default(yields = True) - def get_microdescriptors(self, default = UNDEFINED): - """ - get_microdescriptors(default = UNDEFINED) - - Provides an iterator for all of the microdescriptors that tor currently - knows about. - - Prior to Tor 0.3.5.1 this information was not available via the control - protocol. When connected to prior versions we read the microdescriptors - directly from disk instead, which will not work remotely or if our process - lacks read permissions. - - :param list default: items to provide if the query fails - - :returns: iterates over - :class:`~stem.descriptor.microdescriptor.Microdescriptor` for relays in - the tor network - - :raises: :class:`stem.ControllerError` if unable to query tor and no - default was provided - """ - - if self.get_version() >= stem.version.Requirement.GETINFO_MICRODESCRIPTORS: - desc_content = self.get_info('md/all', get_bytes = True) - - if not desc_content: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - for desc in stem.descriptor.microdescriptor._parse_file(io.BytesIO(desc_content)): - yield desc - else: - # TODO: remove when tor versions that require this are obsolete - - data_directory = self.get_conf('DataDirectory', None) - - if data_directory is None: - raise stem.OperationFailed(message = "Unable to determine tor's data directory") - - if not os.path.exists(data_directory): - raise stem.OperationFailed(message = "Data directory reported by tor doesn't exist (%s)" % data_directory) - - microdescriptor_file = None - - for filename in ('cached-microdescs', 'cached-microdescs.new'): - cached_descriptors = os.path.join(data_directory, filename) - - if os.path.exists(cached_descriptors): - microdescriptor_file = cached_descriptors - break - - if microdescriptor_file is None: - raise stem.OperationFailed(message = "Data directory doesn't contain cached microdescriptors (%s)" % data_directory) - - for desc in stem.descriptor.parse_file(microdescriptor_file): - # It shouldn't be possible for these to be something other than - # microdescriptors but as the saying goes: trust but verify. - - if not isinstance(desc, stem.descriptor.microdescriptor.Microdescriptor): - raise stem.OperationFailed(message = 'BUG: Descriptor reader provided non-microdescriptor content (%s)' % type(desc)) - - yield desc - - @with_default() - def get_server_descriptor(self, relay = None, default = UNDEFINED): - """ - get_server_descriptor(relay = None, default = UNDEFINED) - - Provides the server descriptor for the relay with the given fingerprint or - nickname. If the relay identifier could be either a fingerprint *or* - nickname then it's queried as a fingerprint. - - If no **relay** is provided then this defaults to ourselves. Remember that - this requires that we've retrieved our own descriptor from remote - authorities so this both won't be available for newly started relays and - may be up to around an hour out of date. - - **As of Tor version 0.2.3.25 relays no longer get server descriptors by - default.** It's advised that you use microdescriptors instead, but if you - really need server descriptors then you can get them by setting - 'UseMicrodescriptors 0'. - - .. versionchanged:: 1.3.0 - Changed so we'd fetch our own descriptor if no 'relay' is provided. - - :param str relay: fingerprint or nickname of the relay to be queried - :param object default: response if the query fails - - :returns: :class:`~stem.descriptor.server_descriptor.RelayDescriptor` for the given relay - - :raises: - * :class:`stem.DescriptorUnavailable` if unable to provide a descriptor - for the given relay - * :class:`stem.ControllerError` if unable to query the descriptor - * **ValueError** if **relay** doesn't conform with the pattern for being - a fingerprint or nickname - - An exception is only raised if we weren't provided a default response. - """ - - try: - if relay is None: - try: - relay = self.get_info('fingerprint') - except stem.ControllerError as exc: - raise stem.ControllerError('Unable to determine our own fingerprint: %s' % exc) - - if stem.util.tor_tools.is_valid_fingerprint(relay): - query = 'desc/id/%s' % relay - elif stem.util.tor_tools.is_valid_nickname(relay): - query = 'desc/name/%s' % relay - else: - raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay) - - try: - desc_content = self.get_info(query, get_bytes = True) - except stem.InvalidArguments as exc: - if str(exc).startswith('GETINFO request contained unrecognized keywords:'): - raise stem.DescriptorUnavailable("Tor was unable to provide the descriptor for '%s'" % relay) - else: - raise - - if not desc_content: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - return stem.descriptor.server_descriptor.RelayDescriptor(desc_content) - except: - if not self._is_server_descriptors_available(): - raise ValueError(SERVER_DESCRIPTORS_UNSUPPORTED) - - raise - - @with_default(yields = True) - def get_server_descriptors(self, default = UNDEFINED): - """ - get_server_descriptors(default = UNDEFINED) - - Provides an iterator for all of the server descriptors that tor currently - knows about. - - **As of Tor version 0.2.3.25 relays no longer get server descriptors by - default.** It's advised that you use microdescriptors instead, but if you - really need server descriptors then you can get them by setting - 'UseMicrodescriptors 0'. - - :param list default: items to provide if the query fails - - :returns: iterates over - :class:`~stem.descriptor.server_descriptor.RelayDescriptor` for relays in - the tor network - - :raises: :class:`stem.ControllerError` if unable to query tor and no - default was provided - """ - - # TODO: We should iterate over the descriptors as they're read from the - # socket rather than reading the whole thing into memory. - # - # https://trac.torproject.org/8248 - - desc_content = self.get_info('desc/all-recent', get_bytes = True) - - if not desc_content: - if not self._is_server_descriptors_available(): - raise stem.ControllerError(SERVER_DESCRIPTORS_UNSUPPORTED) - else: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - for desc in stem.descriptor.server_descriptor._parse_file(io.BytesIO(desc_content)): - yield desc - - def _is_server_descriptors_available(self): - """ - Checks to see if tor server descriptors should be available or not. - """ - - # TODO: Replace with a 'GETINFO desc/download-enabled' request when they're - # widely available... - # - # https://gitweb.torproject.org/torspec.git/commit/?id=378699c - - return self.get_version() < stem.version.Requirement.MICRODESCRIPTOR_IS_DEFAULT or \ - self.get_conf('UseMicrodescriptors', None) == '0' - - @with_default() - def get_network_status(self, relay = None, default = UNDEFINED): - """ - get_network_status(relay = None, default = UNDEFINED) - - Provides the router status entry for the relay with the given fingerprint - or nickname. If the relay identifier could be either a fingerprint *or* - nickname then it's queried as a fingerprint. - - If no **relay** is provided then this defaults to ourselves. Remember that - this requires that we've retrieved our own descriptor from remote - authorities so this both won't be available for newly started relays and - may be up to around an hour out of date. - - .. versionchanged:: 1.3.0 - Changed so we'd fetch our own descriptor if no 'relay' is provided. - - :param str relay: fingerprint or nickname of the relay to be queried - :param object default: response if the query fails - - :returns: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` - for the given relay - - :raises: - * :class:`stem.DescriptorUnavailable` if unable to provide a descriptor - for the given relay - * :class:`stem.ControllerError` if unable to query the descriptor - * **ValueError** if **relay** doesn't conform with the pattern for being - a fingerprint or nickname - - An exception is only raised if we weren't provided a default response. - """ - - if relay is None: - try: - relay = self.get_info('fingerprint') - except stem.ControllerError as exc: - raise stem.ControllerError('Unable to determine our own fingerprint: %s' % exc) - - if stem.util.tor_tools.is_valid_fingerprint(relay): - query = 'ns/id/%s' % relay - elif stem.util.tor_tools.is_valid_nickname(relay): - query = 'ns/name/%s' % relay - else: - raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay) - - try: - desc_content = self.get_info(query, get_bytes = True) - except stem.InvalidArguments as exc: - if str(exc).startswith('GETINFO request contained unrecognized keywords:'): - raise stem.DescriptorUnavailable("Tor was unable to provide the descriptor for '%s'" % relay) - else: - raise - - if not desc_content: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - return stem.descriptor.router_status_entry.RouterStatusEntryV3(desc_content) - - @with_default(yields = True) - def get_network_statuses(self, default = UNDEFINED): - """ - get_network_statuses(default = UNDEFINED) - - Provides an iterator for all of the router status entries that tor - currently knows about. - - :param list default: items to provide if the query fails - - :returns: iterates over - :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` for - relays in the tor network - - :raises: :class:`stem.ControllerError` if unable to query tor and no - default was provided - """ - - # TODO: We should iterate over the descriptors as they're read from the - # socket rather than reading the whole thing into memory. - # - # https://trac.torproject.org/8248 - - desc_content = self.get_info('ns/all', get_bytes = True) - - if not desc_content: - raise stem.DescriptorUnavailable('Descriptor information is unavailable, tor might still be downloading it') - - desc_iterator = stem.descriptor.router_status_entry._parse_file( - io.BytesIO(desc_content), - False, - entry_class = stem.descriptor.router_status_entry.RouterStatusEntryV3, - ) - - for desc in desc_iterator: - yield desc - - @with_default() - def get_hidden_service_descriptor(self, address, default = UNDEFINED, servers = None, await_result = True, timeout = None): - """ - get_hidden_service_descriptor(address, default = UNDEFINED, servers = None, await_result = True) - - Provides the descriptor for a hidden service. The **address** is the - '.onion' address of the hidden service (for instance 3g2upl4pq6kufc4m.onion - for DuckDuckGo). - - If **await_result** is **True** then this blocks until we either receive - the descriptor or the request fails. If **False** this returns right away. - - **This method only supports v2 hidden services, not v3.** (:trac:`25417`) - - .. versionadded:: 1.4.0 - - .. versionchanged:: 1.7.0 - Added the timeout argument. - - :param str address: address of the hidden service descriptor, the '.onion' suffix is optional - :param object default: response if the query fails - :param list servers: requrest the descriptor from these specific servers - :param float timeout: seconds to wait when **await_result** is **True** - - :returns: :class:`~stem.descriptor.hidden_service.HiddenServiceDescriptorV2` - for the given service if **await_result** is **True**, or **None** otherwise - - :raises: - * :class:`stem.DescriptorUnavailable` if **await_result** is **True** and - unable to provide a descriptor for the given service - * :class:`stem.Timeout` if **timeout** was reached - * :class:`stem.ControllerError` if unable to query the descriptor - * **ValueError** if **address** doesn't conform with the pattern of a - hidden service address - - An exception is only raised if we weren't provided a default response. - """ - - if address.endswith('.onion'): - address = address[:-6] - - if not stem.util.tor_tools.is_valid_hidden_service_address(address): - raise ValueError("'%s.onion' isn't a valid hidden service address" % address) - - if self.get_version() < stem.version.Requirement.HSFETCH: - raise stem.UnsatisfiableRequest(message = 'HSFETCH was added in tor version %s' % stem.version.Requirement.HSFETCH) - - hs_desc_queue, hs_desc_listener = queue.Queue(), None - hs_desc_content_queue, hs_desc_content_listener = queue.Queue(), None - start_time = time.time() - - if await_result: - def hs_desc_listener(event): - hs_desc_queue.put(event) - - def hs_desc_content_listener(event): - hs_desc_content_queue.put(event) - - self.add_event_listener(hs_desc_listener, EventType.HS_DESC) - self.add_event_listener(hs_desc_content_listener, EventType.HS_DESC_CONTENT) - - try: - request = 'HSFETCH %s' % address - - if servers: - request += ' ' + ' '.join(['SERVER=%s' % s for s in servers]) - - response = self.msg(request) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - raise stem.ProtocolError('HSFETCH returned unexpected response code: %s' % response.code) - - if not await_result: - return None # not waiting, so nothing to provide back - else: - while True: - event = _get_with_timeout(hs_desc_content_queue, timeout, start_time) - - if event.address == address: - if event.descriptor: - return event.descriptor - else: - # no descriptor, looking through HS_DESC to figure out why - - while True: - event = _get_with_timeout(hs_desc_queue, timeout, start_time) - - if event.address == address and event.action == stem.HSDescAction.FAILED: - if event.reason == stem.HSDescReason.NOT_FOUND: - raise stem.DescriptorUnavailable('No running hidden service at %s.onion' % address) - else: - raise stem.DescriptorUnavailable('Unable to retrieve the descriptor for %s.onion (retrieved from %s): %s' % (address, event.directory_fingerprint, event.reason)) - finally: - if hs_desc_listener: - self.remove_event_listener(hs_desc_listener) - - if hs_desc_content_listener: - self.remove_event_listener(hs_desc_content_listener) - - def get_conf(self, param, default = UNDEFINED, multiple = False): - """ - get_conf(param, default = UNDEFINED, multiple = False) - - Queries the current value for a configuration option. Some configuration - options (like the ExitPolicy) can have multiple values. This provides a - **list** with all of the values if **multiple** is **True**. Otherwise this - will be a **str** with the first value. - - If provided with a **default** then that is provided if the configuration - option was unset or the query fails (invalid configuration option, error - response, control port closed, initiated, etc). - - If the configuration value is unset and no **default** was given then this - provides **None** if **multiple** was **False** and an empty list if it was - **True**. - - :param str param: configuration option to be queried - :param object default: response if the option is unset or the query fails - :param bool multiple: if **True** then provides a list with all of the - present values (this is an empty list if the config option is unset) - - :returns: - Response depends upon how we were called as follows... - - * **str** with the configuration value if **multiple** was **False**, - **None** if it was unset - * **list** with the response strings if multiple was **True** - * default if one was provided and the configuration option was either - unset or our call failed - - :raises: - * :class:`stem.ControllerError` if the call fails and we weren't - provided a default response - * :class:`stem.InvalidArguments` if the configuration option - requested was invalid - """ - - # Config options are case insensitive and don't contain whitespace. Using - # strip so the following check will catch whitespace-only params. - - param = param.lower().strip() - - if not param: - return default if default != UNDEFINED else None - - entries = self.get_conf_map(param, default, multiple) - return _case_insensitive_lookup(entries, param, default) - - def get_conf_map(self, params, default = UNDEFINED, multiple = True): - """ - get_conf_map(params, default = UNDEFINED, multiple = True) - - Similar to :func:`~stem.control.Controller.get_conf` but queries multiple - configuration options, providing back a mapping of those options to their - values. - - There are three use cases for GETCONF: - - 1. a single value is provided (e.g. **ControlPort**) - 2. multiple values are provided for the option (e.g. **ExitPolicy**) - 3. a set of options that weren't necessarily requested are returned (for - instance querying **HiddenServiceOptions** gives **HiddenServiceDir**, - **HiddenServicePort**, etc) - - The vast majority of the options fall into the first two categories, in - which case calling :func:`~stem.control.Controller.get_conf` is sufficient. - However, for batch queries or the special options that give a set of values - this provides back the full response. As of tor version 0.2.1.25 - **HiddenServiceOptions** was the only option that falls into the third - category. - - **Note:** HiddenServiceOptions are best retrieved via the - :func:`~stem.control.Controller.get_hidden_service_conf` method instead. - - :param str,list params: configuration option(s) to be queried - :param object default: value for the mappings if the configuration option - is either undefined or the query fails - :param bool multiple: if **True** then the values provided are lists with - all of the present values - - :returns: - **dict** of the 'config key => value' mappings. The value is a... - - * **str** if **multiple** is **False**, **None** if the configuration - option is unset - * **list** if **multiple** is **True** - * the **default** if it was set and the value was either undefined or our - lookup failed - - :raises: - * :class:`stem.ControllerError` if the call fails and we weren't provided - a default response - * :class:`stem.InvalidArguments` if the configuration option requested - was invalid - """ - - start_time = time.time() - reply = {} - - if stem.util._is_str(params): - params = [params] - - # remove strings which contain only whitespace - params = [entry for entry in params if entry.strip()] - - if params == []: - return {} - - # translate context sensitive options - lookup_params = set([MAPPED_CONFIG_KEYS.get(entry, entry) for entry in params]) - - # check for cached results - - from_cache = [param.lower() for param in lookup_params] - cached_results = self._get_cache_map(from_cache, 'getconf') - - for key in cached_results: - user_expected_key = _case_insensitive_lookup(lookup_params, key) - reply[user_expected_key] = cached_results[key] - lookup_params.remove(user_expected_key) - - # if everything was cached then short circuit making the query - if not lookup_params: - if LOG_CACHE_FETCHES: - log.trace('GETCONF %s (cache fetch)' % ' '.join(reply.keys())) - - return self._get_conf_dict_to_response(reply, default, multiple) - - try: - response = self.msg('GETCONF %s' % ' '.join(lookup_params)) - stem.response.convert('GETCONF', response) - reply.update(response.entries) - - if self.is_caching_enabled(): - to_cache = dict((k.lower(), v) for k, v in response.entries.items()) - - self._set_cache(to_cache, 'getconf') - - # Maps the entries back to the parameters that the user requested so the - # capitalization matches (ie, if they request "exitpolicy" then that - # should be the key rather than "ExitPolicy"). When the same - # configuration key is provided multiple times this determines the case - # based on the first and ignores the rest. - # - # This retains the tor provided camel casing of MAPPED_CONFIG_KEYS - # entries since the user didn't request those by their key, so we can't - # be sure what they wanted. - - for key in list(reply): - if not key.lower() in MAPPED_CONFIG_KEYS.values(): - user_expected_key = _case_insensitive_lookup(params, key, key) - - if key != user_expected_key: - reply[user_expected_key] = reply[key] - del reply[key] - - log.debug('GETCONF %s (runtime: %0.4f)' % (' '.join(lookup_params), time.time() - start_time)) - return self._get_conf_dict_to_response(reply, default, multiple) - except stem.ControllerError as exc: - log.debug('GETCONF %s (failed: %s)' % (' '.join(lookup_params), exc)) - - if default != UNDEFINED: - return dict((param, default) for param in params) - else: - raise - - def _get_conf_dict_to_response(self, config_dict, default, multiple): - """ - Translates a dictionary of 'config key => [value1, value2...]' into the - return value of :func:`~stem.control.Controller.get_conf_map`, taking into - account what the caller requested. - """ - - return_dict = {} - - for key, values in list(config_dict.items()): - if values == []: - # config option was unset - if default != UNDEFINED: - return_dict[key] = default - else: - return_dict[key] = [] if multiple else None - else: - return_dict[key] = values if multiple else values[0] - - return return_dict - - @with_default() - def is_set(self, param, default = UNDEFINED): - """ - is_set(param, default = UNDEFINED) - - Checks if a configuration option differs from its default or not. - - .. versionadded:: 1.5.0 - - :param str param: configuration option to check - :param object default: response if the query fails - - :returns: **True** if option differs from its default and **False** - otherwise - - :raises: :class:`stem.ControllerError` if the call fails and we weren't - provided a default response - """ - - return param in self._get_custom_options() - - def _get_custom_options(self): - result = self._get_cache('get_custom_options') - - if not result: - config_lines = self.get_info('config-text').splitlines() - - # Tor provides some config options even if they haven't been set... - # - # https://trac.torproject.org/projects/tor/ticket/2362 - # https://trac.torproject.org/projects/tor/ticket/17909 - - default_lines = ( - 'Log notice stdout', - 'Log notice file /var/log/tor/log', - 'DataDirectory /home/%s/.tor' % self.get_user('undefined'), - 'HiddenServiceStatistics 0', - ) - - for line in default_lines: - if line in config_lines: - config_lines.remove(line) - - result = dict([line.split(' ', 1) for line in config_lines]) - self._set_cache({'get_custom_options': result}) - - return result - - def set_conf(self, param, value): - """ - Changes the value of a tor configuration option. Our value can be any of - the following... - - * a string to set a single value - * a list of strings to set a series of values (for instance the ExitPolicy) - * None to either set the value to 0/NULL - - :param str param: configuration option to be set - :param str,list value: value to set the parameter to - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.InvalidArguments` if configuration options - requested was invalid - * :class:`stem.InvalidRequest` if the configuration setting is - impossible or if there's a syntax error in the configuration values - """ - - self.set_options({param: value}, False) - - def reset_conf(self, *params): - """ - Reverts one or more parameters to their default values. - - :param str params: configuration option to be reset - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.InvalidArguments` if configuration options requested was invalid - * :class:`stem.InvalidRequest` if the configuration setting is - impossible or if there's a syntax error in the configuration values - """ - - self.set_options(dict([(entry, None) for entry in params]), True) - - def set_options(self, params, reset = False): - """ - Changes multiple tor configuration options via either a SETCONF or - RESETCONF query. Both behave identically unless our value is None, in which - case SETCONF sets the value to 0 or NULL, and RESETCONF returns it to its - default value. This accepts str, list, or None values in a similar fashion - to :func:`~stem.control.Controller.set_conf`. For example... - - :: - - my_controller.set_options({ - 'Nickname': 'caerSidi', - 'ExitPolicy': ['accept *:80', 'accept *:443', 'reject *:*'], - 'ContactInfo': 'caerSidi-exit@someplace.com', - 'Log': None, - }) - - The params can optionally be a list of key/value tuples, though the only - reason this type of argument would be useful is for hidden service - configuration (those options are order dependent). - - :param dict,list params: mapping of configuration options to the values - we're setting it to - :param bool reset: issues a RESETCONF, returning **None** values to their - defaults if **True** - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.InvalidArguments` if configuration options - requested was invalid - * :class:`stem.InvalidRequest` if the configuration setting is - impossible or if there's a syntax error in the configuration values - """ - - start_time = time.time() - - # constructs the SETCONF or RESETCONF query - query_comp = ['RESETCONF' if reset else 'SETCONF'] - - if isinstance(params, dict): - params = list(params.items()) - - for param, value in params: - if isinstance(value, str): - query_comp.append('%s="%s"' % (param, value.strip())) - elif isinstance(value, collections.abc.Iterable): - query_comp.extend(['%s="%s"' % (param, val.strip()) for val in value]) - elif not value: - query_comp.append(param) - else: - raise ValueError('Cannot set %s to %s since the value was a %s but we only accept strings' % (param, value, type(value).__name__)) - - query = ' '.join(query_comp) - response = self.msg(query) - stem.response.convert('SINGLELINE', response) - - if response.is_ok(): - log.debug('%s (runtime: %0.4f)' % (query, time.time() - start_time)) - - if self.is_caching_enabled(): - # clear cache for params; the CONF_CHANGED event will set cache for changes - to_cache = dict((k.lower(), None) for k, v in params) - self._set_cache(to_cache, 'getconf') - self._confchanged_cache_invalidation(dict(params)) - else: - log.debug('%s (failed, code: %s, message: %s)' % (query, response.code, response.message)) - immutable_params = [k for k, v in params if stem.util.str_tools._to_unicode(k).lower() in IMMUTABLE_CONFIG_OPTIONS] - - if immutable_params: - raise stem.InvalidArguments(message = "%s cannot be changed while tor's running" % ', '.join(sorted(immutable_params)), arguments = immutable_params) - - if response.code == '552': - if response.message.startswith("Unrecognized option: Unknown option '"): - key = response.message[37:response.message.find("'", 37)] - raise stem.InvalidArguments(response.code, response.message, [key]) - raise stem.InvalidRequest(response.code, response.message) - elif response.code in ('513', '553'): - raise stem.InvalidRequest(response.code, response.message) - else: - raise stem.ProtocolError('Returned unexpected status code: %s' % response.code) - - @with_default() - def get_hidden_service_conf(self, default = UNDEFINED): - """ - get_hidden_service_conf(default = UNDEFINED) - - This provides a mapping of hidden service directories to their - attribute's key/value pairs. All hidden services are assured to have a - 'HiddenServicePort', but other entries may or may not exist. - - :: - - { - "/var/lib/tor/hidden_service_empty/": { - "HiddenServicePort": [ - ] - }, - "/var/lib/tor/hidden_service_with_two_ports/": { - "HiddenServiceAuthorizeClient": "stealth a, b", - "HiddenServicePort": [ - (8020, "127.0.0.1", 8020), # the ports order is kept - (8021, "127.0.0.1", 8021) - ], - "HiddenServiceVersion": "2" - }, - } - - .. versionadded:: 1.3.0 - - :param object default: response if the query fails - - :returns: **dict** with the hidden service configuration - - :raises: :class:`stem.ControllerError` if the call fails and we weren't - provided a default response - """ - - service_dir_map = self._get_cache('hidden_service_conf') - - if service_dir_map is not None: - if LOG_CACHE_FETCHES: - log.trace('GETCONF HiddenServiceOptions (cache fetch)') - - return service_dir_map - - start_time = time.time() - - try: - response = self.msg('GETCONF HiddenServiceOptions') - stem.response.convert('GETCONF', response) - log.debug('GETCONF HiddenServiceOptions (runtime: %0.4f)' % - (time.time() - start_time)) - except stem.ControllerError as exc: - log.debug('GETCONF HiddenServiceOptions (failed: %s)' % exc) - raise - - service_dir_map = OrderedDict() - directory = None - - for status_code, divider, content in response.content(): - if content == 'HiddenServiceOptions': - continue - - if '=' not in content: - continue - - k, v = content.split('=', 1) - - if k == 'HiddenServiceDir': - directory = v - service_dir_map[directory] = {'HiddenServicePort': []} - elif k == 'HiddenServicePort': - port = target_port = v - target_address = '127.0.0.1' - - if not v.isdigit(): - port, target = v.split() - - if target.isdigit(): - target_port = target - else: - target_address, target_port = target.rsplit(':', 1) - - if not stem.util.connection.is_valid_port(port): - raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort port (%s): %s' % (port, content)) - elif not stem.util.connection.is_valid_ipv4_address(target_address): - raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort target address (%s): %s' % (target_address, content)) - elif not stem.util.connection.is_valid_port(target_port): - raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort target port (%s): %s' % (target_port, content)) - - service_dir_map[directory]['HiddenServicePort'].append((int(port), target_address, int(target_port))) - else: - service_dir_map[directory][k] = v - - self._set_cache({'hidden_service_conf': service_dir_map}) - return service_dir_map - - def set_hidden_service_conf(self, conf): - """ - Update all the configured hidden services from a dictionary having - the same format as - :func:`~stem.control.Controller.get_hidden_service_conf`. - - For convenience the HiddenServicePort entries can be an integer, string, or - tuple. If an **int** then we treat it as just a port. If a **str** we pass - that directly as the HiddenServicePort. And finally, if a **tuple** then - it's expected to be the **(port, target_address, target_port)** as provided - by :func:`~stem.control.Controller.get_hidden_service_conf`. - - This is to say the following three are equivalent... - - :: - - "HiddenServicePort": [ - 80, - '80 127.0.0.1:80', - (80, '127.0.0.1', 80), - ] - - .. versionadded:: 1.3.0 - - :param dict conf: configuration dictionary - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.InvalidArguments` if configuration options - requested was invalid - * :class:`stem.InvalidRequest` if the configuration setting is - impossible or if there's a syntax error in the configuration values - """ - - # If we're not adding or updating any hidden services then call RESETCONF - # so we drop existing values. Otherwise calling SETCONF is a no-op. - - if not conf: - self.reset_conf('HiddenServiceDir') - return - - # Convert conf dictionary into a list of ordered config tuples - - hidden_service_options = [] - - for directory in conf: - hidden_service_options.append(('HiddenServiceDir', directory)) - - for k, v in list(conf[directory].items()): - if k == 'HiddenServicePort': - for entry in v: - if isinstance(entry, int): - entry = '%s 127.0.0.1:%s' % (entry, entry) - elif isinstance(entry, str): - pass # just pass along what the user gave us - elif isinstance(entry, tuple): - port, target_address, target_port = entry - entry = '%s %s:%s' % (port, target_address, target_port) - - hidden_service_options.append(('HiddenServicePort', entry)) - else: - hidden_service_options.append((k, str(v))) - - self.set_options(hidden_service_options) - - def create_hidden_service(self, path, port, target_address = None, target_port = None, auth_type = None, client_names = None): - """ - Create a new hidden service. If the directory is already present, a - new port is added. - - Our *.onion address is fetched by reading the hidden service directory. - However, this directory is only readable by the tor user, so if unavailable - the **hostname** will be **None**. - - **As of Tor 0.2.7.1 there's two ways for creating hidden services, and this - method is no longer recommended.** Rather, try using - :func:`~stem.control.Controller.create_ephemeral_hidden_service` instead. - - .. versionadded:: 1.3.0 - - .. versionchanged:: 1.4.0 - Added the auth_type and client_names arguments. - - :param str path: path for the hidden service's data directory - :param int port: hidden service port - :param str target_address: address of the service, by default 127.0.0.1 - :param int target_port: port of the service, by default this is the same as - **port** - :param str auth_type: authentication type: basic, stealth or None to disable auth - :param list client_names: client names (1-16 characters "A-Za-z0-9+-_") - - :returns: :class:`~stem.cotroller.CreateHiddenServiceOutput` if we create - or update a hidden service, **None** otherwise - - :raises: :class:`stem.ControllerError` if the call fails - """ - - if not stem.util.connection.is_valid_port(port): - raise ValueError("%s isn't a valid port number" % port) - elif target_address and not stem.util.connection.is_valid_ipv4_address(target_address): - raise ValueError("%s isn't a valid IPv4 address" % target_address) - elif target_port is not None and not stem.util.connection.is_valid_port(target_port): - raise ValueError("%s isn't a valid port number" % target_port) - elif auth_type not in (None, 'basic', 'stealth'): - raise ValueError("%s isn't a recognized type of authentication" % auth_type) - - port = int(port) - target_address = target_address if target_address else '127.0.0.1' - target_port = port if target_port is None else int(target_port) - - conf = self.get_hidden_service_conf() - - if path in conf and (port, target_address, target_port) in conf[path]['HiddenServicePort']: - return None - - conf.setdefault(path, OrderedDict()).setdefault('HiddenServicePort', []).append((port, target_address, target_port)) - - if auth_type and client_names: - hsac = "%s %s" % (auth_type, ','.join(client_names)) - conf[path]['HiddenServiceAuthorizeClient'] = hsac - - # Tor 0.3.5 changes its default for HS creation from v2 to v3. This is - # fine, but there's a couple options that are incompatible with v3. If - # creating a service with one of those we should explicitly create a v2 - # service instead. - # - # https://trac.torproject.org/projects/tor/ticket/27446 - - for path in conf: - if 'HiddenServiceAuthorizeClient' in conf[path] or 'RendPostPeriod' in conf[path]: - conf[path]['HiddenServiceVersion'] = '2' - - self.set_hidden_service_conf(conf) - - hostname, hostname_for_client = None, {} - - if self.is_localhost(): - hostname_path = os.path.join(path, 'hostname') - - if not os.path.isabs(hostname_path): - cwd = stem.util.system.cwd(self.get_pid(None)) - - if cwd: - hostname_path = stem.util.system.expand_path(hostname_path, cwd) - - if os.path.isabs(hostname_path): - start_time = time.time() - - while not os.path.exists(hostname_path): - wait_time = time.time() - start_time - - if wait_time >= 3: - break - else: - time.sleep(0.05) - - try: - with open(hostname_path) as hostname_file: - hostname = hostname_file.read().strip() - - if client_names and '\n' in hostname: - # When there's multiple clients this looks like... - # - # ndisjxzkgcdhrwqf.onion sjUwjTSPznqWLdOPuwRUzg # client: c1 - # ndisjxzkgcdhrwqf.onion sUu92axuL5bKnA76s2KRfw # client: c2 - - for line in hostname.splitlines(): - if ' # client: ' in line: - address = line.split()[0] - client = line.split(' # client: ', 1)[1] - - if len(address) == 22 and address.endswith('.onion'): - hostname_for_client[client] = address - except: - pass - - return CreateHiddenServiceOutput( - path = path, - hostname = hostname, - hostname_for_client = hostname_for_client, - config = conf, - ) - - def remove_hidden_service(self, path, port = None): - """ - Discontinues a given hidden service. - - .. versionadded:: 1.3.0 - - :param str path: path for the hidden service's data directory - :param int port: hidden service port - - :returns: **True** if the hidden service is discontinued, **False** if it - wasn't running in the first place - - :raises: :class:`stem.ControllerError` if the call fails - """ - - if port and not stem.util.connection.is_valid_port(port): - raise ValueError("%s isn't a valid port number" % port) - - port = int(port) if port else None - conf = self.get_hidden_service_conf() - - if path not in conf: - return False - - if not port: - del conf[path] - else: - to_remove = [entry for entry in conf[path]['HiddenServicePort'] if entry[0] == port] - - if not to_remove: - return False - - for entry in to_remove: - conf[path]['HiddenServicePort'].remove(entry) - - if not conf[path]['HiddenServicePort']: - del conf[path] # no ports left - - self.set_hidden_service_conf(conf) - return True - - @with_default() - def list_ephemeral_hidden_services(self, default = UNDEFINED, our_services = True, detached = False): - """ - list_ephemeral_hidden_services(default = UNDEFINED, our_services = True, detached = False) - - Lists hidden service addresses created by - :func:`~stem.control.Controller.create_ephemeral_hidden_service`. - - .. versionadded:: 1.4.0 - - .. versionchanged:: 1.6.0 - Tor change caused this to start providing empty strings if unset - (:trac:`21329`). - - :param object default: response if the query fails - :param bool our_services: include services created with this controller - that weren't flagged as 'detached' - :param bool detached: include services whos contiuation isn't tied to a - controller - - :returns: **list** of hidden service addresses without their '.onion' - suffix - - :raises: :class:`stem.ControllerError` if the call fails and we weren't - provided a default response - """ - - if self.get_version() < stem.version.Requirement.ADD_ONION: - raise stem.UnsatisfiableRequest(message = 'Ephemeral hidden services were added in tor version %s' % stem.version.Requirement.ADD_ONION) - - result = [] - - if our_services: - try: - result += self.get_info('onions/current').split('\n') - except (stem.ProtocolError, stem.OperationFailed) as exc: - # TODO: Tor's behavior around this was changed in Feb 2017, we should - # drop it when all versions that did this are deprecated... - # - # https://trac.torproject.org/projects/tor/ticket/21329 - - if 'No onion services of the specified type.' not in str(exc): - raise - - if detached: - try: - result += self.get_info('onions/detached').split('\n') - except (stem.ProtocolError, stem.OperationFailed) as exc: - if 'No onion services of the specified type.' not in str(exc): - raise - - return [r for r in result if r] # drop any empty responses (GETINFO is blank if unset) - - def create_ephemeral_hidden_service(self, ports, key_type = 'NEW', key_content = 'BEST', discard_key = False, detached = False, await_publication = False, timeout = None, basic_auth = None, max_streams = None, client_auth_v3 = None): - """ - Creates a new hidden service. Unlike - :func:`~stem.control.Controller.create_hidden_service` this style of - hidden service doesn't touch disk, carrying with it a lot of advantages. - This is the suggested method for making hidden services. - - Our **ports** argument can be a single port... - - :: - - create_ephemeral_hidden_service(80) - - ... list of ports the service is available on... - - :: - - create_ephemeral_hidden_service([80, 443]) - - ... or a mapping of hidden service ports to their targets... - - :: - - create_ephemeral_hidden_service({80: 80, 443: '173.194.33.133:443'}) - - If **basic_auth** is provided this service will require basic - authentication to access. This means users must set HidServAuth in their - torrc with credentials to access it. - - **basic_auth** is a mapping of usernames to their credentials. If the - credential is **None** one is generated and returned as part of the - response. For instance, only bob can access using the given newly generated - credentials... - - :: - - >>> response = controller.create_ephemeral_hidden_service(80, basic_auth = {'bob': None}) - >>> print(response.client_auth) - {'bob': 'nKwfvVPmTNr2k2pG0pzV4g'} - - ... while both alice and bob can access with existing credentials in the - following... - - :: - - controller.create_ephemeral_hidden_service(80, basic_auth = { - 'alice': 'l4BT016McqV2Oail+Bwe6w', - 'bob': 'vGnNRpWYiMBFTWD2gbBlcA', - }) - - Please note that **basic_auth** only works for legacy (v2) hidden services. - - To use client auth with a **version 3** service, pass the **client_auth_v3** - argument. The value must be a base32-encoded public key from a key pair you - have generated elsewhere. - - To create a **version 3** service simply specify **ED25519-V3** as the - our key type, and to create a **version 2** service use **RSA1024**. The - default version of newly created hidden services is based on the - **HiddenServiceVersion** value in your torrc... - - :: - - response = controller.create_ephemeral_hidden_service( - 80, - key_content = 'ED25519-V3', - await_publication = True, - ) - - print('service established at %s.onion' % response.service_id) - - .. versionadded:: 1.4.0 - - .. versionchanged:: 1.5.0 - Added the basic_auth argument. - - .. versionchanged:: 1.5.0 - Added support for non-anonymous services. To do so set - 'HiddenServiceSingleHopMode 1' and 'HiddenServiceNonAnonymousMode 1' in - your torrc. - - .. versionchanged:: 1.7.0 - Added the timeout and max_streams arguments. - - .. versionchanged:: 1.8.2 - Added the client_auth_v3 argument. - - :param int,list,dict ports: hidden service port(s) or mapping of hidden - service ports to their targets - :param str key_type: type of key being provided, generates a new key if - 'NEW' (options are: **NEW**, **RSA1024**, and **ED25519-V3**) - :param str key_content: key for the service to use or type of key to be - generated (options when **key_type** is **NEW** are **BEST**, - **RSA1024**, and **ED25519-V3**) - :param bool discard_key: avoid providing the key back in our response - :param bool detached: continue this hidden service even after this control - connection is closed if **True** - :param bool await_publication: blocks until our descriptor is successfully - published if **True** - :param float timeout: seconds to wait when **await_result** is **True** - :param dict basic_auth: required user credentials to access a v2 service - :param int max_streams: maximum number of streams the hidden service will - accept, unlimited if zero or not set - :param str client_auth_v3: base32-encoded public key for **version 3** - onion services that require client authentication - - :returns: :class:`~stem.response.add_onion.AddOnionResponse` with the response - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.Timeout` if **timeout** was reached - """ - - if self.get_version() < stem.version.Requirement.ADD_ONION: - raise stem.UnsatisfiableRequest(message = 'Ephemeral hidden services were added in tor version %s' % stem.version.Requirement.ADD_ONION) - - hs_desc_queue, hs_desc_listener = queue.Queue(), None - start_time = time.time() - - if await_publication: - def hs_desc_listener(event): - hs_desc_queue.put(event) - - self.add_event_listener(hs_desc_listener, EventType.HS_DESC) - - request = 'ADD_ONION %s:%s' % (key_type, key_content) - - flags = [] - - if discard_key: - flags.append('DiscardPK') - - if detached: - flags.append('Detach') - - if basic_auth is not None: - if self.get_version() < stem.version.Requirement.ADD_ONION_BASIC_AUTH: - raise stem.UnsatisfiableRequest(message = 'Basic authentication support was added to ADD_ONION in tor version %s' % stem.version.Requirement.ADD_ONION_BASIC_AUTH) - - flags.append('BasicAuth') - - if max_streams is not None: - if self.get_version() < stem.version.Requirement.ADD_ONION_MAX_STREAMS: - raise stem.UnsatisfiableRequest(message = 'Limitation of the maximum number of streams to accept was added to ADD_ONION in tor version %s' % stem.version.Requirement.ADD_ONION_MAX_STREAMS) - - flags.append('MaxStreamsCloseCircuit') - - if self.get_version() >= stem.version.Requirement.ADD_ONION_NON_ANONYMOUS: - if self.get_conf('HiddenServiceSingleHopMode', None) == '1' and self.get_conf('HiddenServiceNonAnonymousMode', None) == '1': - flags.append('NonAnonymous') - - if client_auth_v3 is not None: - if self.get_version() < stem.version.Requirement.ONION_SERVICE_AUTH_ADD: - raise stem.UnsatisfiableRequest(message = 'Client authentication support for v3 onions was added to ADD_ONION in tor version %s' % stem.version.Requirement.ONION_SERVICE_AUTH_ADD) - - flags.append('V3Auth') - - if flags: - request += ' Flags=%s' % ','.join(flags) - - if max_streams is not None: - request += ' MaxStreams=%s' % max_streams - - if isinstance(ports, int): - request += ' Port=%s' % ports - elif isinstance(ports, list): - for port in ports: - request += ' Port=%s' % port - elif isinstance(ports, dict): - for port, target in ports.items(): - request += ' Port=%s,%s' % (port, target) - else: - raise ValueError("The 'ports' argument of create_ephemeral_hidden_service() needs to be an int, list, or dict") - - if basic_auth is not None: - for client_name, client_blob in basic_auth.items(): - if client_blob: - request += ' ClientAuth=%s:%s' % (client_name, client_blob) - else: - request += ' ClientAuth=%s' % client_name - - if client_auth_v3 is not None: - request += ' ClientAuthV3=%s' % client_auth_v3 - - response = self.msg(request) - stem.response.convert('ADD_ONION', response) - - if await_publication: - # We should receive five UPLOAD events, followed by up to another five - # UPLOADED to indicate they've finished. Presently tor seems to have an - # issue where the address is provided for UPLOAD but not UPLOADED so need - # to just guess that if it's for the same hidden service authority then - # it's what we're looking for. - - directories_uploaded_to, failures = [], [] - - try: - while True: - event = _get_with_timeout(hs_desc_queue, timeout, start_time) - - if event.action == stem.HSDescAction.UPLOAD and event.address == response.service_id: - directories_uploaded_to.append(event.directory_fingerprint) - elif event.action == stem.HSDescAction.UPLOADED and event.directory_fingerprint in directories_uploaded_to: - break # successfully uploaded to a HS authority... maybe - elif event.action == stem.HSDescAction.FAILED and event.directory_fingerprint in directories_uploaded_to: - failures.append('%s (%s)' % (event.directory_fingerprint, event.reason)) - - if len(directories_uploaded_to) == len(failures): - raise stem.OperationFailed(message = 'Failed to upload our hidden service descriptor to %s' % ', '.join(failures)) - finally: - self.remove_event_listener(hs_desc_listener) - - return response - - def remove_ephemeral_hidden_service(self, service_id): - """ - Discontinues a given hidden service that was created with - :func:`~stem.control.Controller.create_ephemeral_hidden_service`. - - .. versionadded:: 1.4.0 - - :param str service_id: hidden service address without the '.onion' suffix - - :returns: **True** if the hidden service is discontinued, **False** if it - wasn't running in the first place - - :raises: :class:`stem.ControllerError` if the call fails - """ - - if self.get_version() < stem.version.Requirement.ADD_ONION: - raise stem.UnsatisfiableRequest(message = 'Ephemeral hidden services were added in tor version %s' % stem.version.Requirement.ADD_ONION) - - response = self.msg('DEL_ONION %s' % service_id) - stem.response.convert('SINGLELINE', response) - - if response.is_ok(): - return True - elif response.code == '552': - return False # no hidden service to discontinue - else: - raise stem.ProtocolError('DEL_ONION returned unexpected response code: %s' % response.code) - - def add_event_listener(self, listener, *events): - """ - Directs further tor controller events to a given function. The function is - expected to take a single argument, which is a - :class:`~stem.response.events.Event` subclass. For instance the following - would print the bytes sent and received by tor over five seconds... - - :: - - import time - from stem.control import Controller, EventType - - def print_bw(event): - print('sent: %i, received: %i' % (event.written, event.read)) - - with Controller.from_port(port = 9051) as controller: - controller.authenticate() - controller.add_event_listener(print_bw, EventType.BW) - time.sleep(5) - - If a new control connection is initialized then this listener will be - reattached. - - If tor emits a malformed event it can be received by listening for the - stem.control.MALFORMED_EVENTS constant. - - .. versionchanged:: 1.7.0 - Listener exceptions and malformed events no longer break further event - processing. Added the **MALFORMED_EVENTS** constant. - - :param functor listener: function to be called when an event is received - :param stem.control.EventType events: event types to be listened for - - :raises: :class:`stem.ProtocolError` if unable to set the events - """ - - # first checking that tor supports these event types - - with self._event_listeners_lock: - if self.is_authenticated(): - for event_type in events: - event_type = stem.response.events.EVENT_TYPE_TO_CLASS.get(event_type) - - if event_type and (self.get_version() < event_type._VERSION_ADDED): - raise stem.InvalidRequest(552, '%s event requires Tor version %s or later' % (event_type, event_type._VERSION_ADDED)) - - for event_type in events: - self._event_listeners.setdefault(event_type, []).append(listener) - - failed_events = self._attach_listeners()[1] - - # restricted the failures to just things we requested - - failed_events = set(failed_events).intersection(set(events)) - - if failed_events: - raise stem.ProtocolError('SETEVENTS rejected %s' % ', '.join(failed_events)) - - def remove_event_listener(self, listener): - """ - Stops a listener from being notified of further tor events. - - :param stem.control.EventListener listener: listener to be removed - - :raises: :class:`stem.ProtocolError` if unable to set the events - """ - - with self._event_listeners_lock: - event_types_changed = False - - for event_type, event_listeners in list(self._event_listeners.items()): - if listener in event_listeners: - event_listeners.remove(listener) - - if len(event_listeners) == 0: - event_types_changed = True - del self._event_listeners[event_type] - - if event_types_changed: - response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys())) - - if not response.is_ok(): - raise stem.ProtocolError('SETEVENTS received unexpected response\n%s' % response) - - def _get_cache(self, param, namespace = None): - """ - Queries our request cache for the given key. - - :param str param: key to be queried - :param str namespace: namespace in which to check for the key - - :returns: cached value corresponding to key or **None** if the key wasn't found - """ - - with self._cache_lock: - if not self.is_caching_enabled(): - return None - - cache_key = '%s.%s' % (namespace, param) if namespace else param - return self._request_cache.get(cache_key, None) - - def _get_cache_map(self, params, namespace = None): - """ - Queries our request cache for multiple entries. - - :param list params: keys to be queried - :param str namespace: namespace in which to check for the keys - - :returns: **dict** of 'param => cached value' pairs of keys present in cache - """ - - with self._cache_lock: - cached_values = {} - - if self.is_caching_enabled(): - for param in params: - cache_key = '%s.%s' % (namespace, param) if namespace else param - - if cache_key in self._request_cache: - cached_values[param] = self._request_cache[cache_key] - - return cached_values - - def _set_cache(self, params, namespace = None): - """ - Sets the given request cache entries. If the new cache value is **None** - then it is removed from our cache. - - :param dict params: **dict** of 'cache_key => value' pairs to be cached - :param str namespace: namespace for the keys - """ - - with self._cache_lock: - if not self.is_caching_enabled(): - return - - # if params is None then clear the namespace - - if params is None and namespace: - for cache_key in list(self._request_cache.keys()): - if cache_key.startswith('%s.' % namespace): - del self._request_cache[cache_key] - - return - - # remove uncacheable items - if namespace == 'getconf': - # shallow copy before edit so as not to change it for the caller - params = params.copy() - for key in UNCACHEABLE_GETCONF_PARAMS: - if key in params: - del params[key] - - for key, value in list(params.items()): - if namespace: - cache_key = '%s.%s' % (namespace, key) - else: - cache_key = key - - if value is None: - if cache_key in list(self._request_cache.keys()): - del self._request_cache[cache_key] - else: - self._request_cache[cache_key] = value - - def _confchanged_cache_invalidation(self, params): - """ - Drops dependent portions of the cache when configuration changes. - - :param dict params: **dict** of 'config_key => value' pairs for configs - that changed. The entries' values are currently unused. - """ - - with self._cache_lock: - if not self.is_caching_enabled(): - return - - if any('hidden' in param.lower() for param in params.keys()): - self._set_cache({'hidden_service_conf': None}) - - # reset any getinfo parameters that can be changed by a SETCONF - - self._set_cache(dict([(k.lower(), None) for k in CACHEABLE_GETINFO_PARAMS_UNTIL_SETCONF]), 'getinfo') - self._set_cache(None, 'listeners') - - self._set_cache({'get_custom_options': None}) - - self._set_cache({'exit_policy': None}) # numerous options can change our policy - - def is_caching_enabled(self): - """ - **True** if caching has been enabled, **False** otherwise. - - :returns: bool to indicate if caching is enabled - """ - - return self._is_caching_enabled - - def set_caching(self, enabled): - """ - Enables or disables caching of information retrieved from tor. - - :param bool enabled: **True** to enable caching, **False** to disable it - """ - - self._is_caching_enabled = enabled - - if not self._is_caching_enabled: - self.clear_cache() - - def clear_cache(self): - """ - Drops any cached results. - """ - - with self._cache_lock: - self._request_cache = {} - self._last_newnym = 0.0 - self._is_geoip_unavailable = None - - def load_conf(self, configtext): - """ - Sends the configuration text to Tor and loads it as if it has been read from - the torrc. - - :param str configtext: the configuration text - - :raises: :class:`stem.ControllerError` if the call fails - """ - - response = self.msg('LOADCONF\n%s' % configtext) - stem.response.convert('SINGLELINE', response) - - if response.code in ('552', '553'): - if response.code == '552' and response.message.startswith('Invalid config file: Failed to parse/validate config: Unknown option'): - raise stem.InvalidArguments(response.code, response.message, [response.message[70:response.message.find('.', 70) - 1]]) - raise stem.InvalidRequest(response.code, response.message) - elif not response.is_ok(): - raise stem.ProtocolError('+LOADCONF Received unexpected response\n%s' % str(response)) - - def save_conf(self, force = False): - """ - Saves the current configuration options into the active torrc file. - - .. versionchanged:: 1.6.0 - Added the force argument. - - :param bool force: overwrite the configuration even if it includes a - '%include' clause, this is ignored if tor doesn't support it - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.OperationFailed` if the client is unable to save - the configuration file - """ - - if self.get_version() < stem.version.Requirement.SAVECONF_FORCE: - force = False - - response = self.msg('SAVECONF FORCE' if force else 'SAVECONF') - stem.response.convert('SINGLELINE', response) - - if response.is_ok(): - return True - elif response.code == '551': - raise stem.OperationFailed(response.code, response.message) - else: - raise stem.ProtocolError('SAVECONF returned unexpected response code') - - def is_feature_enabled(self, feature): - """ - Checks if a control connection feature is enabled. These features can be - enabled using :func:`~stem.control.Controller.enable_feature`. - - :param str feature: feature to be checked - - :returns: **True** if feature is enabled, **False** otherwise - """ - - feature = feature.upper() - - if feature in self._enabled_features: - return True - else: - # check if this feature is on by default - defaulted_version = None - - if feature == 'EXTENDED_EVENTS': - defaulted_version = stem.version.Requirement.FEATURE_EXTENDED_EVENTS - elif feature == 'VERBOSE_NAMES': - defaulted_version = stem.version.Requirement.FEATURE_VERBOSE_NAMES - - if defaulted_version: - our_version = self.get_version(None) - - if our_version and our_version >= defaulted_version: - self._enabled_features.append(feature) - - return feature in self._enabled_features - - def enable_feature(self, features): - """ - Enables features that are disabled by default to maintain backward - compatibility. Once enabled, a feature cannot be disabled and a new - control connection must be opened to get a connection with the feature - disabled. Feature names are case-insensitive. - - The following features are currently accepted: - - * EXTENDED_EVENTS - Requests the extended event syntax - * VERBOSE_NAMES - Replaces ServerID with LongName in events and GETINFO results - - :param str,list features: a single feature or a list of features to be enabled - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.InvalidArguments` if features passed were invalid - """ - - if stem.util._is_str(features): - features = [features] - - response = self.msg('USEFEATURE %s' % ' '.join(features)) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - if response.code == '552': - invalid_feature = [] - - if response.message.startswith('Unrecognized feature "'): - invalid_feature = [response.message[22:response.message.find('"', 22)]] - - raise stem.InvalidArguments(response.code, response.message, invalid_feature) - - raise stem.ProtocolError('USEFEATURE provided an invalid response code: %s' % response.code) - - self._enabled_features += [entry.upper() for entry in features] - - @with_default() - def get_circuit(self, circuit_id, default = UNDEFINED): - """ - get_circuit(circuit_id, default = UNDEFINED) - - Provides a circuit currently available from tor. - - :param int circuit_id: circuit to be fetched - :param object default: response if the query fails - - :returns: :class:`stem.response.events.CircuitEvent` for the given circuit - - :raises: - * :class:`stem.ControllerError` if the call fails - * **ValueError** if the circuit doesn't exist - - An exception is only raised if we weren't provided a default response. - """ - - for circ in self.get_circuits(): - if circ.id == circuit_id: - return circ - - raise ValueError("Tor currently does not have a circuit with the id of '%s'" % circuit_id) - - @with_default() - def get_circuits(self, default = UNDEFINED): - """ - get_circuits(default = UNDEFINED) - - Provides tor's currently available circuits. - - :param object default: response if the query fails - - :returns: **list** of :class:`stem.response.events.CircuitEvent` for our circuits - - :raises: :class:`stem.ControllerError` if the call fails and no default was provided - """ - - circuits = [] - response = self.get_info('circuit-status') - - for circ in response.splitlines(): - circ_message = stem.socket.recv_message(io.BytesIO(stem.util.str_tools._to_bytes('650 CIRC %s\r\n' % circ))) - stem.response.convert('EVENT', circ_message) - circuits.append(circ_message) - - return circuits - - def new_circuit(self, path = None, purpose = 'general', await_build = False, timeout = None): - """ - Requests a new circuit. If the path isn't provided, one is automatically - selected. - - .. versionchanged:: 1.7.0 - Added the timeout argument. - - :param list,str path: one or more relays to make a circuit through - :param str purpose: 'general' or 'controller' - :param bool await_build: blocks until the circuit is built if **True** - :param float timeout: seconds to wait when **await_build** is **True** - - :returns: str of the circuit id of the newly created circuit - - :raises: - * :class:`stem.ControllerError` if the call fails - * :class:`stem.Timeout` if **timeout** was reached - """ - - return self.extend_circuit('0', path, purpose, await_build, timeout) - - def extend_circuit(self, circuit_id = '0', path = None, purpose = 'general', await_build = False, timeout = None): - """ - Either requests the creation of a new circuit or extends an existing one. - - When called with a circuit value of zero (the default) a new circuit is - created, and when non-zero the circuit with that id is extended. If the - path isn't provided, one is automatically selected. - - A python interpreter session used to create circuits could look like this... - - :: - - >>> controller.extend_circuit('0', ['718BCEA286B531757ACAFF93AE04910EA73DE617', '30BAB8EE7606CBD12F3CC269AE976E0153E7A58D', '2765D8A8C4BBA3F89585A9FFE0E8575615880BEB']) - 19 - >>> controller.extend_circuit('0') - 20 - >>> print(controller.get_info('circuit-status')) - 20 EXTENDED $718BCEA286B531757ACAFF93AE04910EA73DE617=KsmoinOK,$649F2D0ACF418F7CFC6539AB2257EB2D5297BAFA=Eskimo BUILD_FLAGS=NEED_CAPACITY PURPOSE=GENERAL TIME_CREATED=2012-12-06T13:51:11.433755 - 19 BUILT $718BCEA286B531757ACAFF93AE04910EA73DE617=KsmoinOK,$30BAB8EE7606CBD12F3CC269AE976E0153E7A58D=Pascal1,$2765D8A8C4BBA3F89585A9FFE0E8575615880BEB=Anthracite PURPOSE=GENERAL TIME_CREATED=2012-12-06T13:50:56.969938 - - .. versionchanged:: 1.7.0 - Added the timeout argument. - - :param str circuit_id: id of a circuit to be extended - :param list,str path: one or more relays to make a circuit through, this is - required if the circuit id is non-zero - :param str purpose: 'general' or 'controller' - :param bool await_build: blocks until the circuit is built if **True** - :param float timeout: seconds to wait when **await_build** is **True** - - :returns: str of the circuit id of the created or extended circuit - - :raises: - * :class:`stem.InvalidRequest` if one of the parameters were invalid - * :class:`stem.CircuitExtensionFailed` if we were waiting for the circuit - to build but it failed - * :class:`stem.Timeout` if **timeout** was reached - * :class:`stem.ControllerError` if the call fails - """ - - # Attaches a temporary listener for CIRC events if we'll be waiting for it - # to build. This is icky, but we can't reliably do this via polling since - # we then can't get the failure if it can't be created. - - circ_queue, circ_listener = queue.Queue(), None - start_time = time.time() - - if await_build: - def circ_listener(event): - circ_queue.put(event) - - self.add_event_listener(circ_listener, EventType.CIRC) - - try: - # we might accidently get integer circuit ids - circuit_id = str(circuit_id) - - if path is None and circuit_id == '0': - path_opt_version = stem.version.Requirement.EXTENDCIRCUIT_PATH_OPTIONAL - - if not self.get_version() >= path_opt_version: - raise stem.InvalidRequest(512, 'EXTENDCIRCUIT requires the path prior to version %s' % path_opt_version) - - args = [circuit_id] - - if stem.util._is_str(path): - path = [path] - - if path: - args.append(','.join(path)) - - if purpose: - args.append('purpose=%s' % purpose) - - response = self.msg('EXTENDCIRCUIT %s' % ' '.join(args)) - stem.response.convert('SINGLELINE', response) - - if response.code in ('512', '552'): - raise stem.InvalidRequest(response.code, response.message) - elif not response.is_ok(): - raise stem.ProtocolError('EXTENDCIRCUIT returned unexpected response code: %s' % response.code) - - if not response.message.startswith('EXTENDED '): - raise stem.ProtocolError('EXTENDCIRCUIT response invalid:\n%s', response) - - new_circuit = response.message.split(' ', 1)[1] - - if await_build: - while True: - circ = _get_with_timeout(circ_queue, timeout, start_time) - - if circ.id == new_circuit: - if circ.status == CircStatus.BUILT: - break - elif circ.status == CircStatus.FAILED: - raise stem.CircuitExtensionFailed('Circuit failed to be created: %s' % circ.reason, circ) - elif circ.status == CircStatus.CLOSED: - raise stem.CircuitExtensionFailed('Circuit was closed prior to build', circ) - - return new_circuit - finally: - if circ_listener: - self.remove_event_listener(circ_listener) - - def repurpose_circuit(self, circuit_id, purpose): - """ - Changes a circuit's purpose. Currently, two purposes are recognized... - * general - * controller - - :param str circuit_id: id of the circuit whose purpose is to be changed - :param str purpose: purpose (either 'general' or 'controller') - - :raises: :class:`stem.InvalidArguments` if the circuit doesn't exist or if the purpose was invalid - """ - - response = self.msg('SETCIRCUITPURPOSE %s purpose=%s' % (circuit_id, purpose)) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - if response.code == '552': - raise stem.InvalidRequest(response.code, response.message) - else: - raise stem.ProtocolError('SETCIRCUITPURPOSE returned unexpected response code: %s' % response.code) - - def close_circuit(self, circuit_id, flag = ''): - """ - Closes the specified circuit. - - :param str circuit_id: id of the circuit to be closed - :param str flag: optional value to modify closing, the only flag available - is 'IfUnused' which will not close the circuit unless it is unused - - :raises: :class:`stem.InvalidArguments` if the circuit is unknown - :raises: :class:`stem.InvalidRequest` if not enough information is provided - """ - - response = self.msg('CLOSECIRCUIT %s %s' % (circuit_id, flag)) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - if response.code in ('512', '552'): - if response.message.startswith('Unknown circuit '): - raise stem.InvalidArguments(response.code, response.message, [circuit_id]) - raise stem.InvalidRequest(response.code, response.message) - else: - raise stem.ProtocolError('CLOSECIRCUIT returned unexpected response code: %s' % response.code) - - @with_default() - def get_streams(self, default = UNDEFINED): - """ - get_streams(default = UNDEFINED) - - Provides the list of streams tor is currently handling. - - :param object default: response if the query fails - - :returns: list of :class:`stem.response.events.StreamEvent` objects - - :raises: :class:`stem.ControllerError` if the call fails and no default was - provided - """ - - streams = [] - response = self.get_info('stream-status') - - for stream in response.splitlines(): - message = stem.socket.recv_message(io.BytesIO(stem.util.str_tools._to_bytes('650 STREAM %s\r\n' % stream))) - stem.response.convert('EVENT', message) - streams.append(message) - - return streams - - def attach_stream(self, stream_id, circuit_id, exiting_hop = None): - """ - Attaches a stream to a circuit. - - Note: Tor attaches streams to circuits automatically unless the - __LeaveStreamsUnattached configuration variable is set to '1' - - :param str stream_id: id of the stream that must be attached - :param str circuit_id: id of the circuit to which it must be attached - :param int exiting_hop: hop in the circuit where traffic should exit - - :raises: - * :class:`stem.InvalidRequest` if the stream or circuit id were unrecognized - * :class:`stem.UnsatisfiableRequest` if the stream isn't in a state where it can be attached - * :class:`stem.OperationFailed` if the stream couldn't be attached for any other reason - """ - - query = 'ATTACHSTREAM %s %s' % (stream_id, circuit_id) - - if exiting_hop: - query += ' HOP=%s' % exiting_hop - - response = self.msg(query) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - if response.code == '552': - raise stem.InvalidRequest(response.code, response.message) - elif response.code == '551': - raise stem.OperationFailed(response.code, response.message) - elif response.code == '555': - raise stem.UnsatisfiableRequest(response.code, response.message) - else: - raise stem.ProtocolError('ATTACHSTREAM returned unexpected response code: %s' % response.code) - - def close_stream(self, stream_id, reason = stem.RelayEndReason.MISC, flag = ''): - """ - Closes the specified stream. - - :param str stream_id: id of the stream to be closed - :param stem.RelayEndReason reason: reason the stream is closing - :param str flag: not currently used - - :raises: - * :class:`stem.InvalidArguments` if the stream or reason are not recognized - * :class:`stem.InvalidRequest` if the stream and/or reason are missing - """ - - # there's a single value offset between RelayEndReason.index_of() and the - # value that tor expects since tor's value starts with the index of one - - response = self.msg('CLOSESTREAM %s %s %s' % (stream_id, stem.RelayEndReason.index_of(reason) + 1, flag)) - stem.response.convert('SINGLELINE', response) - - if not response.is_ok(): - if response.code in ('512', '552'): - if response.message.startswith('Unknown stream '): - raise stem.InvalidArguments(response.code, response.message, [stream_id]) - elif response.message.startswith('Unrecognized reason '): - raise stem.InvalidArguments(response.code, response.message, [reason]) - raise stem.InvalidRequest(response.code, response.message) - else: - raise stem.ProtocolError('CLOSESTREAM returned unexpected response code: %s' % response.code) - - def signal(self, signal): - """ - Sends a signal to the Tor client. - - :param stem.Signal signal: type of signal to be sent - - :raises: - * :class:`stem.ControllerError` if sending the signal failed - * :class:`stem.InvalidArguments` if signal provided wasn't recognized - """ - - response = self.msg('SIGNAL %s' % signal) - stem.response.convert('SINGLELINE', response) - - if response.is_ok(): - if signal == stem.Signal.NEWNYM: - self._last_newnym = time.time() - else: - if response.code == '552': - raise stem.InvalidArguments(response.code, response.message, [signal]) - - raise stem.ProtocolError('SIGNAL response contained unrecognized status code: %s' % response.code) - - def is_newnym_available(self): - """ - Indicates if tor would currently accept a NEWNYM signal. This can only - account for signals sent via this controller. - - .. versionadded:: 1.2.0 - - :returns: **True** if tor would currently accept a NEWNYM signal, **False** - otherwise - """ - - if self.is_alive(): - return self.get_newnym_wait() == 0.0 - else: - return False - - def get_newnym_wait(self): - """ - Provides the number of seconds until a NEWNYM signal would be respected. - This can only account for signals sent via this controller. - - .. versionadded:: 1.2.0 - - :returns: **float** for the number of seconds until tor would respect - another NEWNYM signal - """ - - return max(0.0, self._last_newnym + 10 - time.time()) - - @with_default() - def get_effective_rate(self, default = UNDEFINED, burst = False): - """ - get_effective_rate(default = UNDEFINED, burst = False) - - Provides the maximum rate this relay is configured to relay in bytes per - second. This is based on multiple torrc parameters if they're set... - - * Effective Rate = min(BandwidthRate, RelayBandwidthRate, MaxAdvertisedBandwidth) - * Effective Burst = min(BandwidthBurst, RelayBandwidthBurst) - - .. versionadded:: 1.3.0 - - :param object default: response if the query fails - :param bool burst: provides the burst bandwidth, otherwise this provides - the standard rate - - :returns: **int** with the effective bandwidth rate in bytes per second - - :raises: :class:`stem.ControllerError` if the call fails and no default was - provided - """ - - if not burst: - attributes = ('BandwidthRate', 'RelayBandwidthRate', 'MaxAdvertisedBandwidth') - else: - attributes = ('BandwidthBurst', 'RelayBandwidthBurst') - - value = None - - for attr in attributes: - attr_value = int(self.get_conf(attr)) - - if attr_value == 0 and attr.startswith('Relay'): - continue # RelayBandwidthRate and RelayBandwidthBurst default to zero - - value = min(value, attr_value) if value else attr_value - - return value - - def is_geoip_unavailable(self): - """ - Provides **True** if tor's geoip database is unavailable, **False** - otherwise. - - .. versionchanged:: 1.6.0 - No longer requires previously failed GETINFO requests to determine this. - - .. deprecated:: 1.6.0 - This is available as of Tor 0.3.2.1 through the following instead... - - :: - - controller.get_info('ip-to-country/ipv4-available', 0) == '1' - - :returns: **bool** indicating if we've determined tor's geoip database to - be unavailable or not - """ - - if self._is_geoip_unavailable is None: - try: - self.get_info('ip-to-country/0.0.0.0') - self._is_geoip_unavailable = False - except stem.ControllerError as exc: - if 'GeoIP data not loaded' in str(exc): - self._is_geoip_unavailable = True - else: - return False # unexpected issue, fail open and don't cache - - return self._is_geoip_unavailable - - def map_address(self, mapping): - """ - Map addresses to replacement addresses. Tor replaces subseqent connections - to the original addresses with the replacement addresses. - - If the original address is a null address, i.e., one of '0.0.0.0', '::0', or - '.' Tor picks an original address itself and returns it in the reply. If the - original address is already mapped to a different address the mapping is - removed. - - :param dict mapping: mapping of original addresses to replacement addresses - - :raises: - * :class:`stem.InvalidRequest` if the addresses are malformed - * :class:`stem.OperationFailed` if Tor couldn't fulfill the request - - :returns: **dict** with 'original -> replacement' address mappings - """ - - mapaddress_arg = ' '.join(['%s=%s' % (k, v) for (k, v) in list(mapping.items())]) - response = self.msg('MAPADDRESS %s' % mapaddress_arg) - stem.response.convert('MAPADDRESS', response) - - return response.entries - - def drop_guards(self): - """ - Drops our present guard nodes and picks a new set. - - .. versionadded:: 1.2.0 - - :raises: :class:`stem.ControllerError` if Tor couldn't fulfill the request - """ - - if self.get_version() < stem.version.Requirement.DROPGUARDS: - raise stem.UnsatisfiableRequest(message = 'DROPGUARDS was added in tor version %s' % stem.version.Requirement.DROPGUARDS) - - self.msg('DROPGUARDS') - - def _post_authentication(self): - super(Controller, self)._post_authentication() - - # try to re-attach event listeners to the new instance - - with self._event_listeners_lock: - try: - failed_events = self._attach_listeners()[1] - - if failed_events: - # remove our listeners for these so we don't keep failing - for event_type in failed_events: - del self._event_listeners[event_type] - - logging_id = 'stem.controller.event_reattach-%s' % '-'.join(failed_events) - log.log_once(logging_id, log.WARN, 'We were unable to re-attach our event listeners to the new tor instance for: %s' % ', '.join(failed_events)) - except stem.ProtocolError as exc: - log.warn('Unable to issue the SETEVENTS request to re-attach our listeners (%s)' % exc) - - # issue TAKEOWNERSHIP if we're the owning process for this tor instance - - owning_pid = self.get_conf('__OwningControllerProcess', None) - - if owning_pid == str(os.getpid()) and self.is_localhost(): - response = self.msg('TAKEOWNERSHIP') - stem.response.convert('SINGLELINE', response) - - if response.is_ok(): - # Now that tor is tracking our ownership of the process via the control - # connection, we can stop having it check for us via our pid. - - try: - self.reset_conf('__OwningControllerProcess') - except stem.ControllerError as exc: - log.warn("We were unable to reset tor's __OwningControllerProcess configuration. It will continue to periodically check if our pid exists. (%s)" % exc) - else: - log.warn('We were unable assert ownership of tor through TAKEOWNERSHIP, despite being configured to be the owning process through __OwningControllerProcess. (%s)' % response) - - def _handle_event(self, event_message): - try: - stem.response.convert('EVENT', event_message) - event_type = event_message.type - except stem.ProtocolError as exc: - log.error('Tor sent a malformed event (%s): %s' % (exc, event_message)) - event_type = MALFORMED_EVENTS - - with self._event_listeners_lock: - for listener_type, event_listeners in list(self._event_listeners.items()): - if listener_type == event_type: - for listener in event_listeners: - try: - listener(event_message) - except Exception as exc: - log.warn('Event listener raised an uncaught exception (%s): %s' % (exc, event_message)) - - def _attach_listeners(self): - """ - Attempts to subscribe to the self._event_listeners events from tor. This is - a no-op if we're not currently authenticated. - - :returns: tuple of the form (set_events, failed_events) - - :raises: :class:`stem.ControllerError` if unable to make our request to tor - """ - - set_events, failed_events = [], [] - - with self._event_listeners_lock: - if self.is_authenticated(): - # try to set them all - response = self.msg('SETEVENTS %s' % ' '.join(self._event_listeners.keys())) - - if response.is_ok(): - set_events = list(self._event_listeners.keys()) - else: - # One of the following likely happened... - # - # * Our user attached listeners before having an authenticated - # connection, so we couldn't check if we met the version - # requirement. - # - # * User attached listeners to one tor instance, then connected us to - # an older tor instancce. - # - # * Some other controller hiccup (far less likely). - # - # See if we can set some subset of our events. - - for event in list(self._event_listeners.keys()): - response = self.msg('SETEVENTS %s' % ' '.join(set_events + [event])) - - if response.is_ok(): - set_events.append(event) - else: - failed_events.append(event) - - return (set_events, failed_events) - - -def _parse_circ_path(path): - """ - Parses a circuit path as a list of **(fingerprint, nickname)** tuples. Tor - circuit paths are defined as being of the form... - - :: - - Path = LongName *("," LongName) - LongName = Fingerprint [ ( "=" / "~" ) Nickname ] - - example: - $999A226EBED397F331B612FE1E4CFAE5C1F201BA=piyaz - - ... *unless* this is prior to tor version 0.2.2.1 with the VERBOSE_NAMES - feature turned off (or before version 0.1.2.2 where the feature was - introduced). In that case either the fingerprint or nickname in the tuple - will be **None**, depending on which is missing. - - :: - - Path = ServerID *("," ServerID) - ServerID = Nickname / Fingerprint - - example: - $E57A476CD4DFBD99B4EE52A100A58610AD6E80B9,hamburgerphone,PrivacyRepublic14 - - :param str path: circuit path to be parsed - - :returns: list of **(fingerprint, nickname)** tuples, fingerprints do not have a proceeding '$' - - :raises: :class:`stem.ProtocolError` if the path is malformed - """ - - if path: - try: - return [_parse_circ_entry(entry) for entry in path.split(',')] - except stem.ProtocolError as exc: - # include the path with the exception - raise stem.ProtocolError('%s: %s' % (exc, path)) - else: - return [] - - -def _parse_circ_entry(entry): - """ - Parses a single relay's 'LongName' or 'ServerID'. See the - :func:`~stem.control._parse_circ_path` function for more information. - - :param str entry: relay information to be parsed - - :returns: **(fingerprint, nickname)** tuple - - :raises: :class:`stem.ProtocolError` if the entry is malformed - """ - - if '=' in entry: - # common case - fingerprint, nickname = entry.split('=') - elif '~' in entry: - # this is allowed for by the spec, but I've never seen it used - fingerprint, nickname = entry.split('~') - elif entry[0] == '$': - # old style, fingerprint only - fingerprint, nickname = entry, None - else: - # old style, nickname only - fingerprint, nickname = None, entry - - if fingerprint is not None: - if not stem.util.tor_tools.is_valid_fingerprint(fingerprint, True): - raise stem.ProtocolError('Fingerprint in the circuit path is malformed (%s)' % fingerprint) - - fingerprint = fingerprint[1:] # strip off the leading '$' - - if nickname is not None and not stem.util.tor_tools.is_valid_nickname(nickname): - raise stem.ProtocolError('Nickname in the circuit path is malformed (%s)' % nickname) - - return (fingerprint, nickname) - - -@with_default() -def _case_insensitive_lookup(entries, key, default = UNDEFINED): - """ - Makes a case insensitive lookup within a list or dictionary, providing the - first matching entry that we come across. - - :param list,dict entries: list or dictionary to be searched - :param str key: entry or key value to look up - :param object default: value to be returned if the key doesn't exist - - :returns: case insensitive match or default if one was provided and key wasn't found - - :raises: **ValueError** if no such value exists - """ - - if entries is not None: - if isinstance(entries, dict): - for k, v in list(entries.items()): - if k.lower() == key.lower(): - return v - else: - for entry in entries: - if entry.lower() == key.lower(): - return entry - - raise ValueError("key '%s' doesn't exist in dict: %s" % (key, entries)) - - -def _get_with_timeout(event_queue, timeout, start_time): - """ - Pulls an item from a queue with a given timeout. - """ - - if timeout: - time_left = timeout - (time.time() - start_time) - - if time_left <= 0: - raise stem.Timeout('Reached our %0.1f second timeout' % timeout) - - try: - return event_queue.get(True, time_left) - except queue.Empty: - raise stem.Timeout('Reached our %0.1f second timeout' % timeout) - else: - return event_queue.get() diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__init__.py b/myenv/lib/python3.12/site-packages/stem/descriptor/__init__.py deleted file mode 100644 index 070b868..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/__init__.py +++ /dev/null @@ -1,1548 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Package for parsing and processing descriptor data. - -**Module Overview:** - -:: - - parse_file - Parses the descriptors in a file. - create_signing_key - Cretes a signing key that can be used for creating descriptors. - - Compression - method of descriptor decompression - - Descriptor - Common parent for all descriptor file types. - | |- content - creates the text of a new descriptor - | |- create - creates a new descriptor - | +- from_str - provides a parsed descriptor for the given string - | - |- type_annotation - provides our @type annotation - |- get_path - location of the descriptor on disk if it came from a file - |- get_archive_path - location of the descriptor within the archive it came from - |- get_bytes - similar to str(), but provides our original bytes content - |- get_unrecognized_lines - unparsed descriptor content - +- __str__ - string that the descriptor was made from - -.. data:: DigestHash (enum) - - .. versionadded:: 1.8.0 - - Hash function used by tor for descriptor digests. - - =========== =========== - DigestHash Description - =========== =========== - SHA1 SHA1 hash - SHA256 SHA256 hash - =========== =========== - -.. data:: DigestEncoding (enum) - - .. versionadded:: 1.8.0 - - Encoding of descriptor digests. - - ================= =========== - DigestEncoding Description - ================= =========== - RAW hash object - HEX uppercase hexidecimal encoding - BASE64 base64 encoding `without trailing '=' padding `_ - ================= =========== - -.. data:: DocumentHandler (enum) - - Ways in which we can parse a - :class:`~stem.descriptor.networkstatus.NetworkStatusDocument`. - - Both **ENTRIES** and **BARE_DOCUMENT** have a 'thin' document, which doesn't - have a populated **routers** attribute. This allows for lower memory usage - and upfront runtime. However, if read time and memory aren't a concern then - **DOCUMENT** can provide you with a fully populated document. - - Handlers don't change the fact that most methods that provide - descriptors return an iterator. In the case of **DOCUMENT** and - **BARE_DOCUMENT** that iterator would have just a single item - - the document itself. - - Simple way to handle this is to call **next()** to get the iterator's one and - only value... - - :: - - import stem.descriptor.remote - from stem.descriptor import DocumentHandler - - consensus = next(stem.descriptor.remote.get_consensus( - document_handler = DocumentHandler.BARE_DOCUMENT, - ) - - - =================== =========== - DocumentHandler Description - =================== =========== - **ENTRIES** Iterates over the contained :class:`~stem.descriptor.router_status_entry.RouterStatusEntry`. Each has a reference to the bare document it came from (through its **document** attribute). - **DOCUMENT** :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` with the :class:`~stem.descriptor.router_status_entry.RouterStatusEntry` it contains (through its **routers** attribute). - **BARE_DOCUMENT** :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` **without** a reference to its contents (the :class:`~stem.descriptor.router_status_entry.RouterStatusEntry` are unread). - =================== =========== -""" - -import base64 -import codecs -import collections -import copy -import io -import os -import random -import re -import string -import tarfile - -import stem.prereq -import stem.util -import stem.util.enum -import stem.util.str_tools -import stem.util.system - -try: - # added in python 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -__all__ = [ - 'bandwidth_file', - 'certificate', - 'collector', - 'export', - 'extrainfo_descriptor', - 'hidden_service', - 'microdescriptor', - 'networkstatus', - 'reader', - 'remote', - 'router_status_entry', - 'server_descriptor', - 'tordnsel', - - 'Descriptor', - 'parse_file', -] - -UNSEEKABLE_MSG = """\ -File object isn't seekable. Try using Descriptor.from_str() instead: - - content = my_file.read() - parsed_descriptors = stem.descriptor.Descriptor.from_str(content) -""" - -KEYWORD_CHAR = 'a-zA-Z0-9-' -WHITESPACE = ' \t' -KEYWORD_LINE = re.compile('^([%s]+)(?:[%s]+(.*))?$' % (KEYWORD_CHAR, WHITESPACE)) -SPECIFIC_KEYWORD_LINE = '^(%%s)(?:[%s]+(.*))?$' % WHITESPACE -PGP_BLOCK_START = re.compile('^-----BEGIN ([%s%s]+)-----$' % (KEYWORD_CHAR, WHITESPACE)) -PGP_BLOCK_END = '-----END %s-----' -EMPTY_COLLECTION = ([], {}, set()) - -DIGEST_TYPE_INFO = b'\x00\x01' -DIGEST_PADDING = b'\xFF' -DIGEST_SEPARATOR = b'\x00' - -CRYPTO_BLOB = """ -MIGJAoGBAJv5IIWQ+WDWYUdyA/0L8qbIkEVH/cwryZWoIaPAzINfrw1WfNZGtBmg -skFtXhOHHqTRN4GPPrZsAIUOQGzQtGb66IQgT4tO/pj+P6QmSCCdTfhvGfgTCsC+ -WPi4Fl2qryzTb3QO5r5x7T8OsG2IBUET1bLQzmtbC560SYR49IvVAgMBAAE= -""" - -DigestHash = stem.util.enum.UppercaseEnum( - 'SHA1', - 'SHA256', -) - -DigestEncoding = stem.util.enum.UppercaseEnum( - 'RAW', - 'HEX', - 'BASE64', -) - -DocumentHandler = stem.util.enum.UppercaseEnum( - 'ENTRIES', - 'DOCUMENT', - 'BARE_DOCUMENT', -) - - -class _Compression(object): - """ - Compression method supported by CollecTor. - - :var bool available: **True** if this method of decryption is available, - **False** otherwise - :var str encoding: `http 'Accept-Encoding' parameter `_ - :var str extension: file extension of this compression - - .. versionadded:: 1.8.0 - """ - - def __init__(self, name, module, encoding, extension, decompression_func): - if module is None: - self._module = None - self.available = True - else: - # Compression modules are optional. Usually gzip and bz2 are available, - # but they might be missing if compiling python yourself. As for lzma it - # was added in python 3.3. - - try: - self._module = __import__(module) - self.available = True - except ImportError: - self._module = None - self.available = False - - self.extension = extension - self.encoding = encoding - - self._name = name - self._module_name = module - self._decompression_func = decompression_func - - def decompress(self, content): - """ - Decompresses the given content via this method. - - :param bytes content: content to be decompressed - - :returns: **bytes** with the decompressed content - - :raises: - If unable to decompress this provide... - - * **IOError** if content isn't compressed with this - * **ImportError** if this method if decompression is unavalable - """ - - if not self.available: - if self._name == 'zstd': - raise ImportError('Decompressing zstd data requires https://pypi.org/project/zstandard/') - elif self._name == 'lzma': - raise ImportError('Decompressing lzma data requires https://docs.python.org/3/library/lzma.html') - else: - raise ImportError("'%s' decompression module is unavailable" % self._module_name) - - try: - return self._decompression_func(self._module, content) - except Exception as exc: - raise IOError('Failed to decompress as %s: %s' % (self, exc)) - - def __str__(self): - return self._name - - -def _zstd_decompress(module, content): - output_buffer = io.BytesIO() - - with module.ZstdDecompressor().write_to(output_buffer) as decompressor: - decompressor.write(content) - - return output_buffer.getvalue() - - -Compression = stem.util.enum.Enum( - ('PLAINTEXT', _Compression('plaintext', None, 'identity', '.txt', lambda module, content: content)), - ('GZIP', _Compression('gzip', 'zlib', 'gzip', '.gz', lambda module, content: module.decompress(content, module.MAX_WBITS | 32))), - ('BZ2', _Compression('bzip2', 'bz2', 'bzip2', '.bz2', lambda module, content: module.decompress(content))), - ('LZMA', _Compression('lzma', 'lzma', 'x-tor-lzma', '.xz', lambda module, content: module.decompress(content))), - ('ZSTD', _Compression('zstd', 'zstd', 'x-zstd', '.zst', _zstd_decompress)), -) - - -class TypeAnnotation(collections.namedtuple('TypeAnnotation', ['name', 'major_version', 'minor_version'])): - """ - `Tor metrics type annotation - `_. The - string representation is the header annotation, for example "@type - server-descriptor 1.0". - - .. versionadded:: 1.8.0 - - :var str name: name of the descriptor type - :var int major_version: major version number - :var int minor_version: minor version number - """ - - def __str__(self): - return '@type %s %s.%s' % (self.name, self.major_version, self.minor_version) - - -class SigningKey(collections.namedtuple('SigningKey', ['private', 'public', 'public_digest'])): - """ - Key used by relays to sign their server and extrainfo descriptors. - - .. versionadded:: 1.6.0 - - :var cryptography.hazmat.backends.openssl.rsa._RSAPrivateKey private: private key - :var cryptography.hazmat.backends.openssl.rsa._RSAPublicKey public: public key - :var bytes public_digest: block that can be used for the a server descrptor's 'signing-key' field - """ - - -def parse_file(descriptor_file, descriptor_type = None, validate = False, document_handler = DocumentHandler.ENTRIES, normalize_newlines = None, **kwargs): - """ - Simple function to read the descriptor contents from a file, providing an - iterator for its :class:`~stem.descriptor.__init__.Descriptor` contents. - - If you don't provide a **descriptor_type** argument then this automatically - tries to determine the descriptor type based on the following... - - * The @type annotation on the first line. These are generally only found in - the `CollecTor archives `_. - - * The filename if it matches something from tor's data directory. For - instance, tor's 'cached-descriptors' contains server descriptors. - - This is a handy function for simple usage, but if you're reading multiple - descriptor files you might want to consider the - :class:`~stem.descriptor.reader.DescriptorReader`. - - Descriptor types include the following, including further minor versions (ie. - if we support 1.1 then we also support everything from 1.0 and most things - from 1.2, but not 2.0)... - - ========================================= ===== - Descriptor Type Class - ========================================= ===== - server-descriptor 1.0 :class:`~stem.descriptor.server_descriptor.RelayDescriptor` - extra-info 1.0 :class:`~stem.descriptor.extrainfo_descriptor.RelayExtraInfoDescriptor` - microdescriptor 1.0 :class:`~stem.descriptor.microdescriptor.Microdescriptor` - directory 1.0 **unsupported** - network-status-2 1.0 :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV2` (with a :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV2`) - dir-key-certificate-3 1.0 :class:`~stem.descriptor.networkstatus.KeyCertificate` - network-status-consensus-3 1.0 :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` (with a :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3`) - network-status-vote-3 1.0 :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` (with a :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3`) - network-status-microdesc-consensus-3 1.0 :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` (with a :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3`) - bridge-network-status 1.0 :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` (with a :class:`~stem.descriptor.networkstatus.BridgeNetworkStatusDocument`) - bridge-server-descriptor 1.0 :class:`~stem.descriptor.server_descriptor.BridgeDescriptor` - bridge-extra-info 1.1 or 1.2 :class:`~stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor` - torperf 1.0 **unsupported** - bridge-pool-assignment 1.0 **unsupported** - tordnsel 1.0 :class:`~stem.descriptor.tordnsel.TorDNSEL` - hidden-service-descriptor 1.0 :class:`~stem.descriptor.hidden_service.HiddenServiceDescriptorV2` - ========================================= ===== - - If you're using **python 3** then beware that the open() function defaults to - using text mode. **Binary mode** is strongly suggested because it's both - faster (by my testing by about 33x) and doesn't do universal newline - translation which can make us misparse the document. - - :: - - my_descriptor_file = open(descriptor_path, 'rb') - - :param str,file,tarfile descriptor_file: path or opened file with the descriptor contents - :param str descriptor_type: `descriptor type `_, this is guessed if not provided - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse the :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :param bool normalize_newlines: converts windows newlines (CRLF), this is the - default when reading data directories on windows - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: iterator for :class:`~stem.descriptor.__init__.Descriptor` instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is True - * **TypeError** if we can't match the contents of the file to a descriptor type - * **IOError** if unable to read from the descriptor_file - """ - - # Delegate to a helper if this is a path or tarfile. - - handler = None - - if stem.util._is_str(descriptor_file): - if stem.util.system.is_tarfile(descriptor_file): - handler = _parse_file_for_tar_path - else: - handler = _parse_file_for_path - elif isinstance(descriptor_file, tarfile.TarFile): - handler = _parse_file_for_tarfile - - if handler: - for desc in handler(descriptor_file, descriptor_type, validate, document_handler, **kwargs): - yield desc - - return - - # Not all files are seekable. If unseekable then advising the user. - # - # Python 3.x adds an io.seekable() method, but not an option with python 2.x - # so using an experimental call to tell() to determine this. - - try: - descriptor_file.tell() - except IOError: - raise IOError(UNSEEKABLE_MSG) - - # The tor descriptor specifications do not provide a reliable method for - # identifying a descriptor file's type and version so we need to guess - # based on its filename. Metrics descriptors, however, can be identified - # by an annotation on their first line... - # https://trac.torproject.org/5651 - - initial_position = descriptor_file.tell() - first_line = stem.util.str_tools._to_unicode(descriptor_file.readline().strip()) - metrics_header_match = re.match('^@type (\\S+) (\\d+).(\\d+)$', first_line) - - if not metrics_header_match: - descriptor_file.seek(initial_position) - - descriptor_path = getattr(descriptor_file, 'name', None) - filename = '' if descriptor_path is None else os.path.basename(descriptor_file.name) - - def parse(descriptor_file): - if normalize_newlines: - descriptor_file = NewlineNormalizer(descriptor_file) - - if descriptor_type is not None: - descriptor_type_match = re.match('^(\\S+) (\\d+).(\\d+)$', descriptor_type) - - if descriptor_type_match: - desc_type, major_version, minor_version = descriptor_type_match.groups() - return _parse_metrics_file(desc_type, int(major_version), int(minor_version), descriptor_file, validate, document_handler, **kwargs) - else: - raise ValueError("The descriptor_type must be of the form ' .'") - elif metrics_header_match: - # Metrics descriptor handling - - desc_type, major_version, minor_version = metrics_header_match.groups() - return _parse_metrics_file(desc_type, int(major_version), int(minor_version), descriptor_file, validate, document_handler, **kwargs) - else: - # Cached descriptor handling. These contain multiple descriptors per file. - - if normalize_newlines is None and stem.util.system.is_windows(): - descriptor_file = NewlineNormalizer(descriptor_file) - - if filename == 'cached-descriptors' or filename == 'cached-descriptors.new': - return stem.descriptor.server_descriptor._parse_file(descriptor_file, validate = validate, **kwargs) - elif filename == 'cached-extrainfo' or filename == 'cached-extrainfo.new': - return stem.descriptor.extrainfo_descriptor._parse_file(descriptor_file, validate = validate, **kwargs) - elif filename == 'cached-microdescs' or filename == 'cached-microdescs.new': - return stem.descriptor.microdescriptor._parse_file(descriptor_file, validate = validate, **kwargs) - elif filename == 'cached-consensus': - return stem.descriptor.networkstatus._parse_file(descriptor_file, validate = validate, document_handler = document_handler, **kwargs) - elif filename == 'cached-microdesc-consensus': - return stem.descriptor.networkstatus._parse_file(descriptor_file, is_microdescriptor = True, validate = validate, document_handler = document_handler, **kwargs) - else: - raise TypeError("Unable to determine the descriptor's type. filename: '%s', first line: '%s'" % (filename, first_line)) - - for desc in parse(descriptor_file): - if descriptor_path is not None: - desc._set_path(os.path.abspath(descriptor_path)) - - yield desc - - -def _parse_file_for_path(descriptor_file, *args, **kwargs): - with open(descriptor_file, 'rb') as desc_file: - for desc in parse_file(desc_file, *args, **kwargs): - yield desc - - -def _parse_file_for_tar_path(descriptor_file, *args, **kwargs): - # TODO: use 'with' for tarfile after dropping python 2.6 support - tar_file = tarfile.open(descriptor_file) - - try: - for desc in parse_file(tar_file, *args, **kwargs): - desc._set_path(os.path.abspath(descriptor_file)) - yield desc - finally: - if tar_file: - tar_file.close() - - -def _parse_file_for_tarfile(descriptor_file, *args, **kwargs): - for tar_entry in descriptor_file: - if tar_entry.isfile(): - entry = descriptor_file.extractfile(tar_entry) - - if tar_entry.size == 0: - continue - - try: - for desc in parse_file(entry, *args, **kwargs): - desc._set_archive_path(entry.name) - yield desc - finally: - entry.close() - - -def _parse_metrics_file(descriptor_type, major_version, minor_version, descriptor_file, validate, document_handler, **kwargs): - # Parses descriptor files from metrics, yielding individual descriptors. This - # throws a TypeError if the descriptor_type or version isn't recognized. - - if descriptor_type == stem.descriptor.server_descriptor.RelayDescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.server_descriptor._parse_file(descriptor_file, is_bridge = False, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.server_descriptor.BridgeDescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.server_descriptor._parse_file(descriptor_file, is_bridge = True, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.extrainfo_descriptor.RelayExtraInfoDescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.extrainfo_descriptor._parse_file(descriptor_file, is_bridge = False, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.microdescriptor.Microdescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.microdescriptor._parse_file(descriptor_file, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - # version 1.1 introduced a 'transport' field... - # https://trac.torproject.org/6257 - - for desc in stem.descriptor.extrainfo_descriptor._parse_file(descriptor_file, is_bridge = True, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.networkstatus.NetworkStatusDocumentV2.TYPE_ANNOTATION_NAME and major_version == 1: - document_type = stem.descriptor.networkstatus.NetworkStatusDocumentV2 - - for desc in stem.descriptor.networkstatus._parse_file(descriptor_file, document_type, validate = validate, document_handler = document_handler, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.networkstatus.KeyCertificate.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.networkstatus._parse_file_key_certs(descriptor_file, validate = validate, **kwargs): - yield desc - elif descriptor_type in ('network-status-consensus-3', 'network-status-vote-3') and major_version == 1: - document_type = stem.descriptor.networkstatus.NetworkStatusDocumentV3 - - for desc in stem.descriptor.networkstatus._parse_file(descriptor_file, document_type, validate = validate, document_handler = document_handler, **kwargs): - yield desc - elif descriptor_type == 'network-status-microdesc-consensus-3' and major_version == 1: - document_type = stem.descriptor.networkstatus.NetworkStatusDocumentV3 - - for desc in stem.descriptor.networkstatus._parse_file(descriptor_file, document_type, is_microdescriptor = True, validate = validate, document_handler = document_handler, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.networkstatus.BridgeNetworkStatusDocument.TYPE_ANNOTATION_NAME and major_version == 1: - document_type = stem.descriptor.networkstatus.BridgeNetworkStatusDocument - - for desc in stem.descriptor.networkstatus._parse_file(descriptor_file, document_type, validate = validate, document_handler = document_handler, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.networkstatus.DetachedSignature.TYPE_ANNOTATION_NAME and major_version == 1: - document_type = stem.descriptor.networkstatus.DetachedSignature - - for desc in stem.descriptor.networkstatus._parse_file(descriptor_file, document_type, validate = validate, document_handler = document_handler, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.tordnsel.TorDNSEL.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.tordnsel._parse_file(descriptor_file, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.hidden_service.HiddenServiceDescriptorV2.TYPE_ANNOTATION_NAME and major_version == 1: - desc_type = stem.descriptor.hidden_service.HiddenServiceDescriptorV2 - - for desc in stem.descriptor.hidden_service._parse_file(descriptor_file, desc_type, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.hidden_service.HiddenServiceDescriptorV3.TYPE_ANNOTATION_NAME and major_version == 1: - desc_type = stem.descriptor.hidden_service.HiddenServiceDescriptorV3 - - for desc in stem.descriptor.hidden_service._parse_file(descriptor_file, desc_type, validate = validate, **kwargs): - yield desc - elif descriptor_type == stem.descriptor.bandwidth_file.BandwidthFile.TYPE_ANNOTATION_NAME and major_version == 1: - for desc in stem.descriptor.bandwidth_file._parse_file(descriptor_file, validate = validate, **kwargs): - yield desc - else: - raise TypeError("Unrecognized metrics descriptor format. type: '%s', version: '%i.%i'" % (descriptor_type, major_version, minor_version)) - - -def _descriptor_content(attr = None, exclude = (), header_template = (), footer_template = ()): - """ - Constructs a minimal descriptor with the given attributes. The content we - provide back is of the form... - - * header_template (with matching attr filled in) - * unused attr entries - * footer_template (with matching attr filled in) - - So for instance... - - :: - - _descriptor_content( - attr = {'nickname': 'caerSidi', 'contact': 'atagar'}, - header_template = ( - ('nickname', 'foobar'), - ('fingerprint', '12345'), - ), - ) - - ... would result in... - - :: - - nickname caerSidi - fingerprint 12345 - contact atagar - - :param dict attr: keyword/value mappings to be included in the descriptor - :param list exclude: mandatory keywords to exclude from the descriptor - :param tuple header_template: key/value pairs for mandatory fields before unrecognized content - :param tuple footer_template: key/value pairs for mandatory fields after unrecognized content - - :returns: bytes with the requested descriptor content - """ - - header_content, footer_content = [], [] - attr = {} if attr is None else OrderedDict(attr) # shallow copy since we're destructive - - for content, template in ((header_content, header_template), - (footer_content, footer_template)): - for keyword, value in template: - if keyword in exclude: - continue - - value = stem.util.str_tools._to_unicode(attr.pop(keyword, value)) - - if value is None: - continue - elif isinstance(value, (tuple, list)): - for v in value: - content.append('%s %s' % (keyword, v)) - elif value == '': - content.append(keyword) - elif value.startswith('\n'): - # some values like crypto follow the line instead - content.append('%s%s' % (keyword, value)) - else: - content.append('%s %s' % (keyword, value)) - - remainder = [] - - for k, v in attr.items(): - if isinstance(v, (tuple, list)): - remainder += ['%s %s' % (k, entry) for entry in v] - else: - remainder.append('%s %s' % (k, v)) - - return stem.util.str_tools._to_bytes('\n'.join(header_content + remainder + footer_content)) - - -def _value(line, entries): - return entries[line][0][0] - - -def _values(line, entries): - return [entry[0] for entry in entries[line]] - - -def _parse_simple_line(keyword, attribute, func = None): - def _parse(descriptor, entries): - value = _value(keyword, entries) - setattr(descriptor, attribute, func(value) if func else value) - - return _parse - - -def _parse_if_present(keyword, attribute): - return lambda descriptor, entries: setattr(descriptor, attribute, keyword in entries) - - -def _parse_bytes_line(keyword, attribute): - def _parse(descriptor, entries): - line_match = re.search(stem.util.str_tools._to_bytes('^(opt )?%s(?:[%s]+(.*))?$' % (keyword, WHITESPACE)), descriptor.get_bytes(), re.MULTILINE) - result = None - - if line_match: - value = line_match.groups()[1] - result = b'' if value is None else value - - setattr(descriptor, attribute, result) - - return _parse - - -def _parse_int_line(keyword, attribute, allow_negative = True): - def _parse(descriptor, entries): - value = _value(keyword, entries) - - try: - int_val = int(value) - except ValueError: - raise ValueError('%s must have a numeric value: %s' % (keyword, value)) - - if not allow_negative and int_val < 0: - raise ValueError('%s must have a positive value: %s' % (keyword, value)) - - setattr(descriptor, attribute, int_val) - - return _parse - - -def _parse_timestamp_line(keyword, attribute): - # "" YYYY-MM-DD HH:MM:SS - - def _parse(descriptor, entries): - value = _value(keyword, entries) - - try: - setattr(descriptor, attribute, stem.util.str_tools._parse_timestamp(value)) - except ValueError: - raise ValueError("Timestamp on %s line wasn't parsable: %s %s" % (keyword, keyword, value)) - - return _parse - - -def _parse_forty_character_hex(keyword, attribute): - # format of fingerprints, sha1 digests, etc - - def _parse(descriptor, entries): - value = _value(keyword, entries) - - if not stem.util.tor_tools.is_hex_digits(value, 40): - raise ValueError('%s line had an invalid value (should be 40 hex characters): %s %s' % (keyword, keyword, value)) - - setattr(descriptor, attribute, value) - - return _parse - - -def _parse_protocol_line(keyword, attribute): - def _parse(descriptor, entries): - # parses 'protocol' entries like: Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 - - value = _value(keyword, entries) - protocols = OrderedDict() - - for k, v in _mappings_for(keyword, value): - versions = [] - - if not v: - continue - - for entry in v.split(','): - if '-' in entry: - min_value, max_value = entry.split('-', 1) - else: - min_value = max_value = entry - - if not min_value.isdigit() or not max_value.isdigit(): - raise ValueError('Protocol values should be a number or number range, but was: %s %s' % (keyword, value)) - - versions += range(int(min_value), int(max_value) + 1) - - protocols[k] = versions - - setattr(descriptor, attribute, protocols) - - return _parse - - -def _parse_key_block(keyword, attribute, expected_block_type, value_attribute = None): - def _parse(descriptor, entries): - value, block_type, block_contents = entries[keyword][0] - - if not block_contents or block_type != expected_block_type: - raise ValueError("'%s' should be followed by a %s block, but was a %s" % (keyword, expected_block_type, block_type)) - - setattr(descriptor, attribute, block_contents) - - if value_attribute: - setattr(descriptor, value_attribute, value) - - return _parse - - -def _mappings_for(keyword, value, require_value = False, divider = ' '): - """ - Parses an attribute as a series of 'key=value' mappings. Unlike _parse_* - functions this is a helper, returning the attribute value rather than setting - a descriptor field. This way parsers can perform additional validations. - - :param str keyword: descriptor field being parsed - :param str value: 'attribute => values' mappings to parse - :param str divider: separator between the key/value mappings - :param bool require_value: validates that values are not empty - - :returns: **generator** with the key/value of the map attribute - - :raises: **ValueError** if descriptor content is invalid - """ - - if value is None: - return # no descripoter value to process - elif value == '': - return # descriptor field was present, but blank - - for entry in value.split(divider): - if '=' not in entry: - raise ValueError("'%s' should be a series of 'key=value' pairs but was: %s" % (keyword, value)) - - k, v = entry.split('=', 1) - - if require_value and not v: - raise ValueError("'%s' line's %s mapping had a blank value: %s" % (keyword, k, value)) - - yield k, v - - -def _copy(default): - if default is None or isinstance(default, (bool, stem.exit_policy.ExitPolicy)): - return default # immutable - elif default in EMPTY_COLLECTION: - return type(default)() # collection construction tad faster than copy - else: - return copy.copy(default) - - -def _encode_digest(hash_value, encoding): - """ - Encodes a hash value with the given HashEncoding. - """ - - if encoding == DigestEncoding.RAW: - return hash_value - elif encoding == DigestEncoding.HEX: - return stem.util.str_tools._to_unicode(hash_value.hexdigest().upper()) - elif encoding == DigestEncoding.BASE64: - return stem.util.str_tools._to_unicode(base64.b64encode(hash_value.digest()).rstrip(b'=')) - elif encoding not in DigestEncoding: - raise ValueError('Digest encodings should be among our DigestEncoding enumeration (%s), not %s' % (', '.join(DigestEncoding), encoding)) - else: - raise NotImplementedError('BUG: stem.descriptor._encode_digest should recognize all DigestEncoding, lacked %s' % encoding) - - -class Descriptor(object): - """ - Common parent for all types of descriptors. - """ - - ATTRIBUTES = {} # mapping of 'attribute' => (default_value, parsing_function) - PARSER_FOR_LINE = {} # line keyword to its associated parsing function - TYPE_ANNOTATION_NAME = None - - def __init__(self, contents, lazy_load = False): - self._path = None - self._archive_path = None - self._raw_contents = contents - self._lazy_loading = lazy_load - self._entries = {} - self._hash = None - self._unrecognized_lines = [] - - @classmethod - def from_str(cls, content, **kwargs): - """ - Provides a :class:`~stem.descriptor.__init__.Descriptor` for the given content. - - To parse a descriptor we must know its type. There are three ways to - convey this... - - :: - - # use a descriptor_type argument - desc = Descriptor.from_str(content, descriptor_type = 'server-descriptor 1.0') - - # prefixing the content with a "@type" annotation - desc = Descriptor.from_str('@type server-descriptor 1.0\\n' + content) - - # use this method from a subclass - desc = stem.descriptor.server_descriptor.RelayDescriptor.from_str(content) - - .. versionadded:: 1.8.0 - - :param str,bytes content: string to construct the descriptor from - :param bool multiple: if provided with **True** this provides a list of - descriptors rather than a single one - :param dict kwargs: additional arguments for :func:`~stem.descriptor.__init__.parse_file` - - :returns: :class:`~stem.descriptor.__init__.Descriptor` subclass for the - given content, or a **list** of descriptors if **multiple = True** is - provided - - :raises: - * **ValueError** if the contents is malformed and validate is True - * **TypeError** if we can't match the contents of the file to a descriptor type - * **IOError** if unable to read from the descriptor_file - """ - - if 'descriptor_type' not in kwargs and cls.TYPE_ANNOTATION_NAME is not None: - kwargs['descriptor_type'] = str(TypeAnnotation(cls.TYPE_ANNOTATION_NAME, 1, 0))[6:] - - is_multiple = kwargs.pop('multiple', False) - results = list(parse_file(io.BytesIO(stem.util.str_tools._to_bytes(content)), **kwargs)) - - if is_multiple: - return results - elif len(results) == 1: - return results[0] - else: - raise ValueError("Descriptor.from_str() expected a single descriptor, but had %i instead. Please include 'multiple = True' if you want a list of results instead." % len(results)) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - """ - Creates descriptor content with the given attributes. Mandatory fields are - filled with dummy information unless data is supplied. This doesn't yet - create a valid signature. - - .. versionadded:: 1.6.0 - - :param dict attr: keyword/value mappings to be included in the descriptor - :param list exclude: mandatory keywords to exclude from the descriptor, this - results in an invalid descriptor - :param bool sign: includes cryptographic signatures and digests if True - - :returns: **str** with the content of a descriptor - - :raises: - * **ImportError** if cryptography is unavailable and sign is True - * **NotImplementedError** if not implemented for this descriptor type - """ - - # TODO: drop the 'sign' argument in stem 2.x (only a few subclasses use this) - - raise NotImplementedError("The create and content methods haven't been implemented for %s" % cls.__name__) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False): - """ - Creates a descriptor with the given attributes. Mandatory fields are filled - with dummy information unless data is supplied. This doesn't yet create a - valid signature. - - .. versionadded:: 1.6.0 - - :param dict attr: keyword/value mappings to be included in the descriptor - :param list exclude: mandatory keywords to exclude from the descriptor, this - results in an invalid descriptor - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param bool sign: includes cryptographic signatures and digests if True - - :returns: :class:`~stem.descriptor.Descriptor` subclass - - :raises: - * **ValueError** if the contents is malformed and validate is True - * **ImportError** if cryptography is unavailable and sign is True - * **NotImplementedError** if not implemented for this descriptor type - """ - - return cls(cls.content(attr, exclude, sign), validate = validate) - - def type_annotation(self): - """ - Provides the `Tor metrics annotation - `_ of this - descriptor type. For example, "@type server-descriptor 1.0" for server - descriptors. - - Please note that the version number component is specific to CollecTor, - and for the moment hardcode as 1.0. This may change in the future. - - .. versionadded:: 1.8.0 - - :returns: :class:`~stem.descriptor.TypeAnnotation` with our type information - """ - - # TODO: populate this from the archive instead if available (so we have correct version numbers) - - if self.TYPE_ANNOTATION_NAME is not None: - return TypeAnnotation(self.TYPE_ANNOTATION_NAME, 1, 0) - else: - raise NotImplementedError('%s does not have a @type annotation' % type(self).__name__) - - def get_path(self): - """ - Provides the absolute path that we loaded this descriptor from. - - :returns: **str** with the absolute path of the descriptor source - """ - - return self._path - - def get_archive_path(self): - """ - If this descriptor came from an archive then provides its path within the - archive. This is only set if the descriptor came from a - :class:`~stem.descriptor.reader.DescriptorReader`, and is **None** if this - descriptor didn't come from an archive. - - :returns: **str** with the descriptor's path within the archive - """ - - return self._archive_path - - def get_bytes(self): - """ - Provides the ASCII **bytes** of the descriptor. This only differs from - **str()** if you're running python 3.x, in which case **str()** provides a - **unicode** string. - - :returns: **bytes** for the descriptor's contents - """ - - return stem.util.str_tools._to_bytes(self._raw_contents) - - def get_unrecognized_lines(self): - """ - Provides a list of lines that were either ignored or had data that we did - not know how to process. This is most common due to new descriptor fields - that this library does not yet know how to process. Patches welcome! - - :returns: **list** of lines of unrecognized content - """ - - if self._lazy_loading: - # we need to go ahead and parse the whole document to figure this out - self._parse(self._entries, False) - self._lazy_loading = False - - return list(self._unrecognized_lines) - - def _parse(self, entries, validate, parser_for_line = None): - """ - Parses a series of 'keyword => (value, pgp block)' mappings and applies - them as attributes. - - :param dict entries: descriptor contents to be applied - :param bool validate: checks the validity of descriptor content if True - :param dict parsers: mapping of lines to the function for parsing it - - :raises: **ValueError** if an error occurs in validation - """ - - if parser_for_line is None: - parser_for_line = self.PARSER_FOR_LINE - - for keyword, values in list(entries.items()): - try: - if keyword in parser_for_line: - parser_for_line[keyword](self, entries) - else: - for value, block_type, block_contents in values: - line = '%s %s' % (keyword, value) - - if block_contents: - line += '\n%s' % block_contents - - self._unrecognized_lines.append(line) - except ValueError: - if validate: - raise - - def _set_path(self, path): - self._path = path - - def _set_archive_path(self, path): - self._archive_path = path - - def _name(self, is_plural = False): - return str(type(self)) - - def _digest_for_signature(self, signing_key, signature): - """ - Provides the signed digest we should have given this key and signature. - - :param str signing_key: key block used to make this signature - :param str signature: signed digest for this descriptor content - - :returns: the digest string encoded in uppercase hex - - :raises: ValueError if unable to provide a validly signed digest - """ - - if not stem.prereq.is_crypto_available(): - raise ValueError('Generating the signed digest requires the cryptography module') - - from cryptography.hazmat.backends import default_backend - from cryptography.hazmat.primitives.serialization import load_der_public_key - from cryptography.utils import int_to_bytes - - key = load_der_public_key(_bytes_for_block(signing_key), default_backend()) - modulus = key.public_numbers().n - public_exponent = key.public_numbers().e - - sig_as_bytes = _bytes_for_block(signature) - sig_as_long = int.from_bytes(sig_as_bytes, byteorder='big') # convert signature to an int - blocksize = len(sig_as_bytes) # 256B for NetworkStatusDocuments, 128B for others - - # use the public exponent[e] & the modulus[n] to decrypt the int - decrypted_int = pow(sig_as_long, public_exponent, modulus) - - # convert the int to a byte array - decrypted_bytes = int_to_bytes(decrypted_int, blocksize) - - ############################################################################ - # The decrypted bytes should have a structure exactly along these lines. - # 1 byte - [null '\x00'] - # 1 byte - [block type identifier '\x01'] - Should always be 1 - # N bytes - [padding '\xFF' ] - # 1 byte - [separator '\x00' ] - # M bytes - [message] - # Total - 128 bytes - # More info here http://www.ietf.org/rfc/rfc2313.txt - # esp the Notes in section 8.1 - ############################################################################ - - try: - if decrypted_bytes.index(DIGEST_TYPE_INFO) != 0: - raise ValueError('Verification failed, identifier missing') - except ValueError: - raise ValueError('Verification failed, malformed data') - - try: - identifier_offset = 2 - - # find the separator - seperator_index = decrypted_bytes.index(DIGEST_SEPARATOR, identifier_offset) - except ValueError: - raise ValueError('Verification failed, seperator not found') - - digest_hex = codecs.encode(decrypted_bytes[seperator_index + 1:], 'hex_codec') - return stem.util.str_tools._to_unicode(digest_hex.upper()) - - def _content_range(self, start = None, end = None): - """ - Provides the descriptor content inclusively between two substrings. - - :param bytes start: start of the content range to get - :param bytes end: end of the content range to get - - :raises: ValueError if either the start or end substring are not within our content - """ - - content = self.get_bytes() - start_index, end_index = None, None - - if start is not None: - start_index = content.find(stem.util.str_tools._to_bytes(start)) - - if start_index == -1: - raise ValueError("'%s' is not present within our descriptor content" % start) - - if end is not None: - end_index = content.find(stem.util.str_tools._to_bytes(end), start_index) - - if end_index == -1: - raise ValueError("'%s' is not present within our descriptor content" % end) - - end_index += len(end) # make the ending index inclusive - - return content[start_index:end_index] - - def __getattr__(self, name): - # We can't use standard hasattr() since it calls this function, recursing. - # Doing so works since it stops recursing after several dozen iterations - # (not sure why), but horrible in terms of performance. - - def has_attr(attr): - try: - super(Descriptor, self).__getattribute__(attr) - return True - except: - return False - - # If an attribute we should have isn't present it means either... - # - # a. we still need to lazy load this - # b. we read the whole descriptor but it wasn't present, so needs the default - - if name in self.ATTRIBUTES and not has_attr(name): - default, parsing_function = self.ATTRIBUTES[name] - - if self._lazy_loading: - try: - parsing_function(self, self._entries) - except (ValueError, KeyError): - # Set defaults for anything the parsing function should've covered. - # Despite having a validation failure some attributes might be set in - # which case we keep them. - - for attr_name, (attr_default, attr_parser) in self.ATTRIBUTES.items(): - if parsing_function == attr_parser and not has_attr(attr_name): - setattr(self, attr_name, _copy(attr_default)) - else: - setattr(self, name, _copy(default)) - - return super(Descriptor, self).__getattribute__(name) - - def __str__(self): - if stem.prereq.is_python_3(): - return stem.util.str_tools._to_unicode(self._raw_contents) - else: - return self._raw_contents - - def _compare(self, other, method): - if type(self) != type(other): - return False - - return method(str(self).strip(), str(other).strip()) - - def __hash__(self): - if self._hash is None: - self._hash = hash(str(self).strip()) - - return self._hash - - def __eq__(self, other): - return self._compare(other, lambda s, o: s == o) - - def __ne__(self, other): - return not self == other - - def __lt__(self, other): - return self._compare(other, lambda s, o: s < o) - - def __le__(self, other): - return self._compare(other, lambda s, o: s <= o) - - -class NewlineNormalizer(object): - """ - File wrapper that normalizes CRLF line endings. - """ - - def __init__(self, wrapped_file): - self._wrapped_file = wrapped_file - self.name = getattr(wrapped_file, 'name', None) - - def read(self, *args): - return self._wrapped_file.read(*args).replace(b'\r\n', b'\n') - - def readline(self, *args): - return self._wrapped_file.readline(*args).replace(b'\r\n', b'\n') - - def readlines(self, *args): - return [line.rstrip(b'\r') for line in self._wrapped_file.readlines(*args)] - - def seek(self, *args): - return self._wrapped_file.seek(*args) - - def tell(self, *args): - return self._wrapped_file.tell(*args) - - -def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_first = False, skip = False, end_position = None, include_ending_keyword = False): - """ - Reads from the descriptor file until we get to one of the given keywords or reach the - end of the file. - - :param str,list keywords: keyword(s) we want to read until - :param file descriptor_file: file with the descriptor content - :param bool inclusive: includes the line with the keyword if True - :param bool ignore_first: doesn't check if the first line read has one of the - given keywords - :param bool skip: skips buffering content, returning None - :param int end_position: end if we reach this point in the file - :param bool include_ending_keyword: provides the keyword we broke on if **True** - - :returns: **list** with the lines until we find one of the keywords, this is - a two value tuple with the ending keyword if include_ending_keyword is - **True** - """ - - content = None if skip else [] - ending_keyword = None - - if stem.util._is_str(keywords): - keywords = (keywords,) - - if ignore_first: - first_line = descriptor_file.readline() - - if first_line and content is not None: - content.append(first_line) - - keyword_match = re.compile(SPECIFIC_KEYWORD_LINE % '|'.join(keywords)) - - while True: - last_position = descriptor_file.tell() - - if end_position and last_position >= end_position: - break - - line = descriptor_file.readline() - - if not line: - break # EOF - - line_match = keyword_match.match(stem.util.str_tools._to_unicode(line)) - - if line_match: - ending_keyword = line_match.groups()[0] - - if not inclusive: - descriptor_file.seek(last_position) - elif content is not None: - content.append(line) - - break - elif content is not None: - content.append(line) - - if include_ending_keyword: - return (content, ending_keyword) - else: - return content - - -def _bytes_for_block(content): - """ - Provides the base64 decoded content of a pgp-style block. - - :param str content: block to be decoded - - :returns: decoded block content - - :raises: **TypeError** if this isn't base64 encoded content - """ - - # strip the '-----BEGIN RSA PUBLIC KEY-----' header and footer - - content = ''.join(content.split('\n')[1:-1]) - - return base64.b64decode(stem.util.str_tools._to_bytes(content)) - - -def _get_pseudo_pgp_block(remaining_contents): - """ - Checks if given contents begins with a pseudo-Open-PGP-style block and, if - so, pops it off and provides it back to the caller. - - :param list remaining_contents: lines to be checked for a public key block - - :returns: **tuple** of the (block_type, content) or None if it doesn't exist - - :raises: **ValueError** if the contents starts with a key block but it's - malformed (for instance, if it lacks an ending line) - """ - - if not remaining_contents: - return None # nothing left - - block_match = PGP_BLOCK_START.match(remaining_contents[0]) - - if block_match: - block_type = block_match.groups()[0] - block_lines = [] - end_line = PGP_BLOCK_END % block_type - - while True: - if not remaining_contents: - raise ValueError("Unterminated pgp style block (looking for '%s'):\n%s" % (end_line, '\n'.join(block_lines))) - - line = remaining_contents.pop(0) - block_lines.append(line) - - if line == end_line: - return (block_type, '\n'.join(block_lines)) - else: - return None - - -def create_signing_key(private_key = None): - """ - Serializes a signing key if we have one. Otherwise this creates a new signing - key we can use to create descriptors. - - .. versionadded:: 1.6.0 - - :param cryptography.hazmat.backends.openssl.rsa._RSAPrivateKey private_key: private key - - :returns: :class:`~stem.descriptor.__init__.SigningKey` that can be used to - create descriptors - - :raises: **ImportError** if the cryptography module is unavailable - """ - - if not stem.prereq.is_crypto_available(): - raise ImportError('Signing requires the cryptography module') - - from cryptography.hazmat.backends import default_backend - from cryptography.hazmat.primitives import serialization - from cryptography.hazmat.primitives.asymmetric import rsa - - if private_key is None: - private_key = rsa.generate_private_key( - public_exponent = 65537, - key_size = 1024, - backend = default_backend(), - ) - - # When signing the cryptography module includes a constant indicating - # the hash algorithm used. Tor doesn't. This causes signature - # validation failures and unfortunately cryptography have no nice way - # of excluding these so we need to mock out part of their internals... - # - # https://github.com/pyca/cryptography/issues/3713 - - def no_op(*args, **kwargs): - return 1 - - private_key._backend._lib.EVP_PKEY_CTX_set_signature_md = no_op - private_key._backend.openssl_assert = no_op - - public_key = private_key.public_key() - public_digest = b'\n' + public_key.public_bytes( - encoding = serialization.Encoding.PEM, - format = serialization.PublicFormat.PKCS1, - ).strip() - - return SigningKey(private_key, public_key, public_digest) - - -def _append_router_signature(content, private_key): - """ - Appends a router signature to a server or extrainfo descriptor. - - :param bytes content: descriptor content up through 'router-signature\\n' - :param cryptography.hazmat.backends.openssl.rsa._RSAPrivateKey private_key: - private relay signing key - - :returns: **bytes** with the signed descriptor content - """ - - if not stem.prereq.is_crypto_available(): - raise ImportError('Signing requires the cryptography module') - - from cryptography.hazmat.primitives import hashes - from cryptography.hazmat.primitives.asymmetric import padding - - signature = base64.b64encode(private_key.sign(content, padding.PKCS1v15(), hashes.SHA1())) - return content + b'\n'.join([b'-----BEGIN SIGNATURE-----'] + stem.util.str_tools._split_by_length(signature, 64) + [b'-----END SIGNATURE-----\n']) - - -def _random_nickname(): - return ('Unnamed%i' % random.randint(0, 100000000000000))[:19] - - -def _random_fingerprint(): - return ('%040x' % random.randrange(16 ** 40)).upper() - - -def _random_ipv4_address(): - return '%i.%i.%i.%i' % (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) - - -def _random_date(): - return '%i-%02i-%02i %02i:%02i:%02i' % (random.randint(2000, 2015), random.randint(1, 12), random.randint(1, 20), random.randint(0, 23), random.randint(0, 59), random.randint(0, 59)) - - -def _random_crypto_blob(block_type = None): - """ - Provides a random string that can be used for crypto blocks. - """ - - random_base64 = stem.util.str_tools._to_unicode(base64.b64encode(os.urandom(140))) - crypto_blob = '\n'.join(stem.util.str_tools._split_by_length(random_base64, 64)) - - if block_type: - return '\n-----BEGIN %s-----\n%s\n-----END %s-----' % (block_type, crypto_blob, block_type) - else: - return crypto_blob - - -def _descriptor_components(raw_contents, validate, extra_keywords = (), non_ascii_fields = ()): - """ - Initial breakup of the server descriptor contents to make parsing easier. - - A descriptor contains a series of 'keyword lines' which are simply a keyword - followed by an optional value. Lines can also be followed by a signature - block. - - To get a sub-listing with just certain keywords use extra_keywords. This can - be useful if we care about their relative ordering with respect to each - other. For instance, we care about the ordering of 'accept' and 'reject' - entries because this influences the resulting exit policy, but for everything - else in server descriptors the order does not matter. - - :param str raw_contents: descriptor content provided by the relay - :param bool validate: checks the validity of the descriptor's content if - True, skips these checks otherwise - :param list extra_keywords: entity keywords to put into a separate listing - with ordering intact - :param list non_ascii_fields: fields containing non-ascii content - - :returns: - **collections.OrderedDict** with the 'keyword => (value, pgp key) entries' - mappings. If a extra_keywords was provided then this instead provides a two - value tuple, the second being a list of those entries. - """ - - if isinstance(raw_contents, bytes): - raw_contents = stem.util.str_tools._to_unicode(raw_contents) - - entries = OrderedDict() - extra_entries = [] # entries with a keyword in extra_keywords - remaining_lines = raw_contents.split('\n') - - while remaining_lines: - line = remaining_lines.pop(0) - - # V2 network status documents explicitly can contain blank lines... - # - # "Implementations MAY insert blank lines for clarity between sections; - # these blank lines are ignored." - # - # ... and server descriptors end with an extra newline. But other documents - # don't say how blank lines should be handled so globally ignoring them. - - if not line: - continue - - # Some lines have an 'opt ' for backward compatibility. They should be - # ignored. This prefix is being removed in... - # https://trac.torproject.org/projects/tor/ticket/5124 - - if line.startswith('opt '): - line = line[4:] - - line_match = KEYWORD_LINE.match(line) - - if not line_match: - if not validate: - continue - - raise ValueError('Line contains invalid characters: %s' % line) - - keyword, value = line_match.groups() - - if value is None: - value = '' - - try: - block_attr = _get_pseudo_pgp_block(remaining_lines) - - if block_attr: - block_type, block_contents = block_attr - else: - block_type, block_contents = None, None - except ValueError: - if not validate: - continue - - raise - - if validate and keyword not in non_ascii_fields: - try: - value.encode('ascii') - except UnicodeError: - replaced = ''.join([(char if char in string.printable else '?') for char in value]) - raise ValueError("'%s' line had non-ascii content: %s" % (keyword, replaced)) - - if keyword in extra_keywords: - extra_entries.append('%s %s' % (keyword, value)) - else: - entries.setdefault(keyword, []).append((value, block_type, block_contents)) - - if extra_keywords: - return entries, extra_entries - else: - return entries - - -# importing at the end to avoid circular dependencies on our Descriptor class - -import stem.descriptor.bandwidth_file -import stem.descriptor.extrainfo_descriptor -import stem.descriptor.hidden_service -import stem.descriptor.microdescriptor -import stem.descriptor.networkstatus -import stem.descriptor.server_descriptor -import stem.descriptor.tordnsel diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 46e5565..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/bandwidth_file.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/bandwidth_file.cpython-312.pyc deleted file mode 100644 index ac9f55f..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/bandwidth_file.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/certificate.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/certificate.cpython-312.pyc deleted file mode 100644 index d033573..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/certificate.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/collector.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/collector.cpython-312.pyc deleted file mode 100644 index 0b821f6..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/collector.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/export.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/export.cpython-312.pyc deleted file mode 100644 index 3b07457..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/export.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/extrainfo_descriptor.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/extrainfo_descriptor.cpython-312.pyc deleted file mode 100644 index 4c49dd2..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/extrainfo_descriptor.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service.cpython-312.pyc deleted file mode 100644 index 5c76579..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service_descriptor.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service_descriptor.cpython-312.pyc deleted file mode 100644 index be87f3d..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/hidden_service_descriptor.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/microdescriptor.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/microdescriptor.cpython-312.pyc deleted file mode 100644 index 3e0f72e..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/microdescriptor.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/networkstatus.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/networkstatus.cpython-312.pyc deleted file mode 100644 index 0e6affa..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/networkstatus.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/reader.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/reader.cpython-312.pyc deleted file mode 100644 index b158ef6..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/reader.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/remote.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/remote.cpython-312.pyc deleted file mode 100644 index 73a1e6c..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/remote.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/router_status_entry.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/router_status_entry.cpython-312.pyc deleted file mode 100644 index 3d3aedd..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/router_status_entry.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/server_descriptor.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/server_descriptor.cpython-312.pyc deleted file mode 100644 index 1ea53ac..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/server_descriptor.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/tordnsel.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/tordnsel.cpython-312.pyc deleted file mode 100644 index ce7fd26..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/descriptor/__pycache__/tordnsel.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/bandwidth_file.py b/myenv/lib/python3.12/site-packages/stem/descriptor/bandwidth_file.py deleted file mode 100644 index 9fd4485..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/bandwidth_file.py +++ /dev/null @@ -1,369 +0,0 @@ -# Copyright 2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Bandwidth Authority metrics as described in Tor's -`bandwidth-file-spec `_. - -**Module Overview:** - -:: - - BandwidthFile - Tor bandwidth authority measurements. - -.. versionadded:: 1.8.0 -""" - -import datetime -import io -import time - -import stem.util.str_tools - -from stem.descriptor import ( - _mappings_for, - Descriptor, -) - -try: - # added in python 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -# Four character dividers are allowed for backward compatability, but five is -# preferred. - -HEADER_DIV = b'=====' -HEADER_DIV_ALT = b'====' - - -class RecentStats(object): - """ - Statistical information collected over the last 'data_period' (by default - five days). - - :var int consensus_count: number of consensuses published during this period - - :var int prioritized_relays: number of relays prioritized to be measured - :var int prioritized_relay_lists: number of times a set of relays were - prioritized to be measured - - :var int measurement_attempts: number of relay measurements we attempted - :var int measurement_failures: number of measurement attempts that failed - - :var RelayFailures relay_failures: number of relays we failed to measure - """ - - def __init__(self): - self.consensus_count = None - self.prioritized_relays = None - self.prioritized_relay_lists = None - self.measurement_attempts = None - self.measurement_failures = None - self.relay_failures = RelayFailures() - - -class RelayFailures(object): - """ - Summary of the number of relays we were unable to measure. - - :var int no_measurement: number of relays that did not have any successful - measurements - :var int insuffient_period: number of relays whos measurements were collected - over a period that was too small (1 day by default) - :var int insufficient_measurements: number of relays we did not collect - enough measurements for (2 by default) - :var int stale: number of relays whos latest measurement is too old (5 days - by default) - """ - - def __init__(self): - self.no_measurement = None - self.insuffient_period = None - self.insufficient_measurements = None - self.stale = None - - -# Converts header attributes to a given type. Malformed fields should be -# ignored according to the spec. - -def _str(val): - return val # already a str - - -def _int(val): - return int(val) if (val and val.isdigit()) else None - - -def _date(val): - try: - return stem.util.str_tools._parse_iso_timestamp(val) - except ValueError: - return None # not an iso formatted date - - -def _csv(val): - return list(map(lambda v: v.strip(), val.split(','))) if val is not None else None - - -# mapping of attributes => (header, type) - -HEADER_ATTR = { - # version 1.1.0 introduced headers - - 'version': ('version', _str), - - 'software': ('software', _str), - 'software_version': ('software_version', _str), - - 'earliest_bandwidth': ('earliest_bandwidth', _date), - 'latest_bandwidth': ('latest_bandwidth', _date), - 'created_at': ('file_created', _date), - 'generated_at': ('generator_started', _date), - - # version 1.2.0 additions - - 'consensus_size': ('number_consensus_relays', _int), - 'eligible_count': ('number_eligible_relays', _int), - 'eligible_percent': ('percent_eligible_relays', _int), - 'min_count': ('minimum_number_eligible_relays', _int), - 'min_percent': ('minimum_percent_eligible_relays', _int), - - # version 1.3.0 additions - - 'scanner_country': ('scanner_country', _str), - 'destinations_countries': ('destinations_countries', _csv), - - # version 1.4.0 additions - - 'time_to_report_half_network': ('time_to_report_half_network', _int), - - 'recent_stats.consensus_count': ('recent_consensus_count', _int), - 'recent_stats.prioritized_relay_lists': ('recent_priority_list_count', _int), - 'recent_stats.prioritized_relays': ('recent_priority_relay_count', _int), - 'recent_stats.measurement_attempts': ('recent_measurement_attempt_count', _int), - 'recent_stats.measurement_failures': ('recent_measurement_failure_count', _int), - 'recent_stats.relay_failures.no_measurement': ('recent_measurements_excluded_error_count', _int), - 'recent_stats.relay_failures.insuffient_period': ('recent_measurements_excluded_near_count', _int), - 'recent_stats.relay_failures.insufficient_measurements': ('recent_measurements_excluded_few_count', _int), - 'recent_stats.relay_failures.stale': ('recent_measurements_excluded_old_count', _int), -} - -HEADER_DEFAULT = { - 'version': '1.0.0', # version field was added in 1.1.0 -} - - -def _parse_file(descriptor_file, validate = False, **kwargs): - """ - Iterates over the bandwidth authority metrics in a file. - - :param file descriptor_file: file with descriptor content - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: :class:`stem.descriptor.bandwidth_file.BandwidthFile` object - - :raises: - * **ValueError** if the contents is malformed and validate is **True** - * **IOError** if the file can't be read - """ - - yield BandwidthFile(descriptor_file.read(), validate, **kwargs) - - -def _parse_header(descriptor, entries): - header = OrderedDict() - content = io.BytesIO(descriptor.get_bytes()) - - content.readline() # skip the first line, which should be the timestamp - - index = 1 - version_index = None - - while True: - line = content.readline().strip() - - if not line: - break # end of the content - elif line in (HEADER_DIV, HEADER_DIV_ALT): - break # end of header - elif not header and b'node_id=' in line: - break # version 1.0 doesn't have any headers - - if b'=' in line: - key, value = stem.util.str_tools._to_unicode(line).split('=', 1) - header[key] = value - - if key == 'version': - version_index = index - else: - raise ValueError("Header expected to be key=value pairs, but had '%s'" % line) - - index += 1 - - descriptor.header = header - descriptor.recent_stats = RecentStats() - - for full_attr, (keyword, cls) in HEADER_ATTR.items(): - obj = descriptor - - for attr in full_attr.split('.')[:-1]: - obj = getattr(obj, attr) - - setattr(obj, full_attr.split('.')[-1], cls(header.get(keyword, HEADER_DEFAULT.get(full_attr)))) - - if version_index is not None and version_index != 1: - raise ValueError("The 'version' header must be in the second position") - - -def _parse_timestamp(descriptor, entries): - first_line = io.BytesIO(descriptor.get_bytes()).readline().strip() - - if first_line.isdigit(): - descriptor.timestamp = datetime.datetime.utcfromtimestamp(int(first_line)) - else: - raise ValueError("First line should be a unix timestamp, but was '%s'" % first_line) - - -def _parse_body(descriptor, entries): - # In version 1.0.0 the body is everything after the first line. Otherwise - # it's everything after the header's divider. - - content = io.BytesIO(descriptor.get_bytes()) - - if descriptor.version == '1.0.0': - content.readline() # skip the first line - else: - while content.readline().strip() not in ('', HEADER_DIV, HEADER_DIV_ALT): - pass # skip the header - - measurements = {} - - for line in content.readlines(): - line = stem.util.str_tools._to_unicode(line.strip()) - attr = dict(_mappings_for('measurement', line)) - fingerprint = attr.get('node_id', '').lstrip('$') # bwauths prefix fingerprints with '$' - - if not fingerprint: - raise ValueError("Every meaurement must include 'node_id': %s" % line) - elif fingerprint in measurements: - raise ValueError('Relay %s is listed multiple times. It should only be present once.' % fingerprint) - - measurements[fingerprint] = attr - - descriptor.measurements = measurements - - -class BandwidthFile(Descriptor): - """ - Tor bandwidth authority measurements. - - :var dict measurements: **\\*** mapping of relay fingerprints to their - bandwidth measurement metadata - - :var dict header: **\\*** header metadata - :var datetime timestamp: **\\*** time when these metrics were published - :var str version: **\\*** document format version - - :var str software: application that generated these metrics - :var str software_version: version of the application that generated these metrics - - :var datetime earliest_bandwidth: time of the first sampling - :var datetime latest_bandwidth: time of the last sampling - :var datetime created_at: time when this file was created - :var datetime generated_at: time when collection of these metrics started - - :var int consensus_size: number of relays in the consensus - :var int eligible_count: relays with enough measurements to be included - :var int eligible_percent: percentage of consensus with enough measurements - :var int min_count: minimum eligible relays for results to be provided - :var int min_percent: minimum measured percentage of the consensus - - :var str scanner_country: country code where this scan took place - :var list destinations_countries: all country codes that were scanned - - :var int time_to_report_half_network: estimated number of seconds required to - measure half the network, given recent measurements - - :var RecentStats recent_stats: statistical information collected over the - last 'data_period' (by default five days) - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - TYPE_ANNOTATION_NAME = 'bandwidth-file' - - ATTRIBUTES = { - 'timestamp': (None, _parse_timestamp), - 'header': ({}, _parse_header), - 'measurements': ({}, _parse_body), - } - - ATTRIBUTES.update(dict([(k, (None, _parse_header)) for k in HEADER_ATTR.keys()])) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - """ - Creates descriptor content with the given attributes. This descriptor type - differs somewhat from others and treats our attr/exclude attributes as - follows... - - * 'timestamp' is a reserved key for our mandatory header unix timestamp. - - * 'content' is a reserved key for our bandwidth measurement lines. - - * All other keys are treated as header fields. - - For example... - - :: - - BandwidthFile.content({ - 'timestamp': '12345', - 'version': '1.2.0', - 'content': [], - }) - """ - - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - header = OrderedDict(attr) if attr is not None else OrderedDict() - timestamp = header.pop('timestamp', str(int(time.time()))) - content = header.pop('content', []) - version = header.get('version', HEADER_DEFAULT.get('version')) - - lines = [] - - if 'timestamp' not in exclude: - lines.append(stem.util.str_tools._to_bytes(timestamp)) - - if version == '1.0.0' and header: - raise ValueError('Headers require BandwidthFile version 1.1 or later') - elif version != '1.0.0': - # ensure 'version' is the second header - - if 'version' not in exclude: - lines.append(stem.util.str_tools._to_bytes('version=%s' % header.pop('version'))) - - for k, v in header.items(): - lines.append(stem.util.str_tools._to_bytes('%s=%s' % (k, v))) - - lines.append(HEADER_DIV) - - for measurement in content: - lines.append(stem.util.str_tools._to_bytes(measurement)) - - return b'\n'.join(lines) - - def __init__(self, raw_content, validate = False): - super(BandwidthFile, self).__init__(raw_content, lazy_load = not validate) - - if validate: - _parse_timestamp(self, None) - _parse_header(self, None) - _parse_body(self, None) diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/certificate.py b/myenv/lib/python3.12/site-packages/stem/descriptor/certificate.py deleted file mode 100644 index fe94b52..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/certificate.py +++ /dev/null @@ -1,477 +0,0 @@ -# Copyright 2017-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for `Tor Ed25519 certificates -`_, which are -used to for a variety of purposes... - - * validating the key used to sign server descriptors - * validating the key used to sign hidden service v3 descriptors - * signing and encrypting hidden service v3 indroductory points - -.. versionadded:: 1.6.0 - -**Module Overview:** - -:: - - Ed25519Certificate - Ed25519 signing key certificate - | +- Ed25519CertificateV1 - version 1 Ed25519 certificate - | |- is_expired - checks if certificate is presently expired - | |- signing_key - certificate signing key - | +- validate - validates a descriptor's signature - | - |- from_base64 - decodes a base64 encoded certificate - |- to_base64 - base64 encoding of this certificate - | - |- unpack - decodes a byte encoded certificate - +- pack - byte encoding of this certificate - - Ed25519Extension - extension included within an Ed25519Certificate - -.. data:: CertType (enum) - - Purpose of Ed25519 certificate. For more information see... - - * `cert-spec.txt `_ section A.1 - * `rend-spec-v3.txt `_ appendix E - - .. deprecated:: 1.8.0 - Replaced with :data:`stem.client.datatype.CertType` - - ======================== =========== - CertType Description - ======================== =========== - **SIGNING** signing key with an identity key - **LINK_CERT** TLS link certificate signed with ed25519 signing key - **AUTH** authentication key signed with ed25519 signing key - **HS_V3_DESC_SIGNING** hidden service v3 short-term descriptor signing key - **HS_V3_INTRO_AUTH** hidden service v3 introductory point authentication key - **HS_V3_INTRO_ENCRYPT** hidden service v3 introductory point encryption key - ======================== =========== - -.. data:: ExtensionType (enum) - - Recognized exception types. - - ==================== =========== - ExtensionType Description - ==================== =========== - **HAS_SIGNING_KEY** includes key used to sign the certificate - ==================== =========== - -.. data:: ExtensionFlag (enum) - - Flags that can be assigned to Ed25519 certificate extensions. - - ====================== =========== - ExtensionFlag Description - ====================== =========== - **AFFECTS_VALIDATION** extension affects whether the certificate is valid - **UNKNOWN** extension includes flags not yet recognized by stem - ====================== =========== -""" - -import base64 -import binascii -import datetime -import hashlib -import re - -import stem.descriptor.hidden_service -import stem.descriptor.server_descriptor -import stem.prereq -import stem.util -import stem.util.enum -import stem.util.str_tools - -from stem.client.datatype import Field, Size, split - -# TODO: Importing under an alternate name until we can deprecate our redundant -# CertType enum in Stem 2.x. - -from stem.client.datatype import CertType as ClientCertType - -ED25519_KEY_LENGTH = 32 -ED25519_HEADER_LENGTH = 40 -ED25519_SIGNATURE_LENGTH = 64 - -SIG_PREFIX_SERVER_DESC = b'Tor router descriptor signature v1' -SIG_PREFIX_HS_V3 = b'Tor onion service descriptor sig v3' - -DEFAULT_EXPIRATION_HOURS = 54 # HSv3 certificate expiration of tor - -CertType = stem.util.enum.UppercaseEnum( - 'SIGNING', - 'LINK_CERT', - 'AUTH', - 'HS_V3_DESC_SIGNING', - 'HS_V3_INTRO_AUTH', - 'HS_V3_INTRO_ENCRYPT', -) - -ExtensionType = stem.util.enum.Enum(('HAS_SIGNING_KEY', 4),) -ExtensionFlag = stem.util.enum.UppercaseEnum('AFFECTS_VALIDATION', 'UNKNOWN') - - -class Ed25519Extension(Field): - """ - Extension within an Ed25519 certificate. - - :var stem.descriptor.certificate.ExtensionType type: extension type - :var list flags: extension attribute flags - :var int flag_int: integer encoding of the extension attribute flags - :var bytes data: data the extension concerns - """ - - def __init__(self, ext_type, flag_val, data): - self.type = ext_type - self.flags = [] - self.flag_int = flag_val if flag_val else 0 - self.data = data - - if flag_val and flag_val % 2 == 1: - self.flags.append(ExtensionFlag.AFFECTS_VALIDATION) - flag_val -= 1 - - if flag_val: - self.flags.append(ExtensionFlag.UNKNOWN) - - if ext_type == ExtensionType.HAS_SIGNING_KEY and len(data) != 32: - raise ValueError('Ed25519 HAS_SIGNING_KEY extension must be 32 bytes, but was %i.' % len(data)) - - def pack(self): - encoded = bytearray() - encoded += Size.SHORT.pack(len(self.data)) - encoded += Size.CHAR.pack(self.type) - encoded += Size.CHAR.pack(self.flag_int) - encoded += self.data - return bytes(encoded) - - @staticmethod - def pop(content): - if len(content) < 4: - raise ValueError('Ed25519 extension is missing header fields') - - data_size, content = Size.SHORT.pop(content) - ext_type, content = Size.CHAR.pop(content) - flags, content = Size.CHAR.pop(content) - data, content = split(content, data_size) - - if len(data) != data_size: - raise ValueError("Ed25519 extension is truncated. It should have %i bytes of data but there's only %i." % (data_size, len(data))) - - return Ed25519Extension(ext_type, flags, data), content - - def __hash__(self): - return stem.util._hash_attr(self, 'type', 'flag_int', 'data', cache = True) - - -class Ed25519Certificate(object): - """ - Base class for an Ed25519 certificate. - - :var int version: certificate format version - :var unicode encoded: base64 encoded ed25519 certificate - """ - - def __init__(self, version): - self.version = version - self.encoded = None # TODO: remove in stem 2.x - - @staticmethod - def unpack(content): - """ - Parses a byte encoded ED25519 certificate. - - :param bytes content: encoded certificate - - :returns: :class:`~stem.descriptor.certificate.Ed25519Certificate` subclsss - for the given certificate - - :raises: **ValueError** if certificate is malformed - """ - - version = Size.CHAR.pop(content)[0] - - if version == 1: - return Ed25519CertificateV1.unpack(content) - else: - raise ValueError('Ed25519 certificate is version %i. Parser presently only supports version 1.' % version) - - @staticmethod - def from_base64(content): - """ - Parses a base64 encoded ED25519 certificate. - - :param str content: base64 encoded certificate - - :returns: :class:`~stem.descriptor.certificate.Ed25519Certificate` subclsss - for the given certificate - - :raises: **ValueError** if content is malformed - """ - - content = stem.util.str_tools._to_unicode(content) - - if content.startswith('-----BEGIN ED25519 CERT-----\n') and content.endswith('\n-----END ED25519 CERT-----'): - content = content[29:-27] - - try: - decoded = base64.b64decode(content) - - if not decoded: - raise TypeError('empty') - - instance = Ed25519Certificate.unpack(decoded) - instance.encoded = content - return instance - except (TypeError, binascii.Error) as exc: - raise ValueError("Ed25519 certificate wasn't propoerly base64 encoded (%s):\n%s" % (exc, content)) - - def pack(self): - """ - Encoded byte representation of our certificate. - - :returns: **bytes** for our encoded certificate representation - """ - - raise NotImplementedError('Certificate encoding has not been implemented for %s' % type(self).__name__) - - def to_base64(self, pem = False): - """ - Base64 encoded certificate data. - - :param bool pem: include `PEM header/footer - `_, for more - information see `RFC 7468 `_ - - :returns: **unicode** for our encoded certificate representation - """ - - encoded = b'\n'.join(stem.util.str_tools._split_by_length(base64.b64encode(self.pack()), 64)) - - if pem: - encoded = b'-----BEGIN ED25519 CERT-----\n%s\n-----END ED25519 CERT-----' % encoded - - return stem.util.str_tools._to_unicode(encoded) - - @staticmethod - def _from_descriptor(keyword, attribute): - def _parse(descriptor, entries): - value, block_type, block_contents = entries[keyword][0] - - if not block_contents or block_type != 'ED25519 CERT': - raise ValueError("'%s' should be followed by a ED25519 CERT block, but was a %s" % (keyword, block_type)) - - setattr(descriptor, attribute, Ed25519Certificate.from_base64(block_contents)) - - return _parse - - def __str__(self): - return self.to_base64(pem = True) - - @staticmethod - def parse(content): - return Ed25519Certificate.from_base64(content) # TODO: drop this alias in stem 2.x - - -class Ed25519CertificateV1(Ed25519Certificate): - """ - Version 1 Ed25519 certificate, which are used for signing tor server - descriptors. - - :var stem.client.datatype.CertType type: certificate purpose - :var int type_int: integer value of the certificate purpose - :var datetime expiration: expiration of the certificate - :var int key_type: format of the key - :var bytes key: key content - :var list extensions: :class:`~stem.descriptor.certificate.Ed25519Extension` in this certificate - :var bytes signature: certificate signature - - :param bytes signature: pre-calculated certificate signature - :param cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey signing_key: certificate signing key - """ - - def __init__(self, cert_type = None, expiration = None, key_type = None, key = None, extensions = None, signature = None, signing_key = None): - super(Ed25519CertificateV1, self).__init__(1) - - if cert_type is None: - raise ValueError('Certificate type is required') - elif key is None: - raise ValueError('Certificate key is required') - - self.type, self.type_int = ClientCertType.get(cert_type) - self.expiration = expiration if expiration else datetime.datetime.utcnow() + datetime.timedelta(hours = DEFAULT_EXPIRATION_HOURS) - self.key_type = key_type if key_type else 1 - self.key = stem.util._pubkey_bytes(key) - self.extensions = extensions if extensions else [] - self.signature = signature - - if signing_key: - calculated_sig = signing_key.sign(self.pack()) - - # if caller provides both signing key *and* signature then ensure they match - - if self.signature and self.signature != calculated_sig: - raise ValueError("Signature calculated from its key (%s) mismatches '%s'" % (calculated_sig, self.signature)) - - self.signature = calculated_sig - - if self.type in (ClientCertType.LINK, ClientCertType.IDENTITY, ClientCertType.AUTHENTICATE): - raise ValueError('Ed25519 certificate cannot have a type of %i. This is reserved for CERTS cells.' % self.type_int) - elif self.type == ClientCertType.ED25519_IDENTITY: - raise ValueError('Ed25519 certificate cannot have a type of 7. This is reserved for RSA identity cross-certification.') - elif self.type == ClientCertType.UNKNOWN: - raise ValueError('Ed25519 certificate type %i is unrecognized' % self.type_int) - - def pack(self): - encoded = bytearray() - encoded += Size.CHAR.pack(self.version) - encoded += Size.CHAR.pack(self.type_int) - encoded += Size.LONG.pack(int(stem.util.datetime_to_unix(self.expiration) / 3600)) - encoded += Size.CHAR.pack(self.key_type) - encoded += self.key - encoded += Size.CHAR.pack(len(self.extensions)) - - for extension in self.extensions: - encoded += extension.pack() - - if self.signature: - encoded += self.signature - - return bytes(encoded) - - @staticmethod - def unpack(content): - if len(content) < ED25519_HEADER_LENGTH + ED25519_SIGNATURE_LENGTH: - raise ValueError('Ed25519 certificate was %i bytes, but should be at least %i' % (len(content), ED25519_HEADER_LENGTH + ED25519_SIGNATURE_LENGTH)) - - header, signature = split(content, len(content) - ED25519_SIGNATURE_LENGTH) - - version, header = Size.CHAR.pop(header) - cert_type, header = Size.CHAR.pop(header) - expiration_hours, header = Size.LONG.pop(header) - key_type, header = Size.CHAR.pop(header) - key, header = split(header, ED25519_KEY_LENGTH) - extension_count, extension_data = Size.CHAR.pop(header) - - if version != 1: - raise ValueError('Ed25519 v1 parser cannot read version %i certificates' % version) - - extensions = [] - - for i in range(extension_count): - extension, extension_data = Ed25519Extension.pop(extension_data) - extensions.append(extension) - - if extension_data: - raise ValueError('Ed25519 certificate had %i bytes of unused extension data' % len(extension_data)) - - return Ed25519CertificateV1(cert_type, datetime.datetime.utcfromtimestamp(expiration_hours * 3600), key_type, key, extensions, signature) - - def is_expired(self): - """ - Checks if this certificate is presently expired or not. - - :returns: **True** if the certificate has expired, **False** otherwise - """ - - return datetime.datetime.now() > self.expiration - - def signing_key(self): - """ - Provides this certificate's signing key. - - .. versionadded:: 1.8.0 - - :returns: **bytes** with the first signing key on the certificate, None if - not present - """ - - for extension in self.extensions: - if extension.type == ExtensionType.HAS_SIGNING_KEY: - return extension.data - - return None - - def validate(self, descriptor): - """ - Validate our descriptor content matches its ed25519 signature. Supported - descriptor types include... - - * :class:`~stem.descriptor.server_descriptor.RelayDescriptor` - * :class:`~stem.descriptor.hidden_service.HiddenServiceDescriptorV3` - - :param stem.descriptor.__init__.Descriptor descriptor: descriptor to validate - - :raises: - * **ValueError** if signing key or descriptor are invalid - * **TypeError** if descriptor type is unsupported - * **ImportError** if cryptography module or ed25519 support unavailable - """ - - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Certificate validation requires the cryptography module and ed25519 support') - - if isinstance(descriptor, stem.descriptor.server_descriptor.RelayDescriptor): - signed_content = hashlib.sha256(Ed25519CertificateV1._signed_content(descriptor)).digest() - signature = stem.util.str_tools._decode_b64(descriptor.ed25519_signature) - - self._validate_server_desc_signing_key(descriptor) - elif isinstance(descriptor, stem.descriptor.hidden_service.HiddenServiceDescriptorV3): - signed_content = Ed25519CertificateV1._signed_content(descriptor) - signature = stem.util.str_tools._decode_b64(descriptor.signature) - else: - raise TypeError('Certificate validation only supported for server and hidden service descriptors, not %s' % type(descriptor).__name__) - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey - from cryptography.exceptions import InvalidSignature - - try: - key = Ed25519PublicKey.from_public_bytes(self.key) - key.verify(signature, signed_content) - except InvalidSignature: - raise ValueError('Descriptor Ed25519 certificate signature invalid (signature forged or corrupt)') - - @staticmethod - def _signed_content(descriptor): - """ - Provides this descriptor's signing constant, appended with the portion of - the descriptor that's signed. - """ - - if isinstance(descriptor, stem.descriptor.server_descriptor.RelayDescriptor): - prefix = SIG_PREFIX_SERVER_DESC - regex = b'(.+router-sig-ed25519 )' - elif isinstance(descriptor, stem.descriptor.hidden_service.HiddenServiceDescriptorV3): - prefix = SIG_PREFIX_HS_V3 - regex = b'(.+)signature ' - else: - raise ValueError('BUG: %s type unexpected' % type(descriptor).__name__) - - match = re.search(regex, descriptor.get_bytes(), re.DOTALL) - - if not match: - raise ValueError('Malformed descriptor missing signature line') - - return prefix + match.group(1) - - def _validate_server_desc_signing_key(self, descriptor): - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey - from cryptography.exceptions import InvalidSignature - - if descriptor.ed25519_master_key: - signing_key = base64.b64decode(stem.util.str_tools._to_bytes(descriptor.ed25519_master_key) + b'=') - else: - signing_key = self.signing_key() - - if not signing_key: - raise ValueError('Server descriptor missing an ed25519 signing key') - - try: - key = Ed25519PublicKey.from_public_bytes(signing_key) - key.verify(self.signature, base64.b64decode(stem.util.str_tools._to_bytes(self.encoded))[:-ED25519_SIGNATURE_LENGTH]) - except InvalidSignature: - raise ValueError('Ed25519KeyCertificate signing key is invalid (signature forged or corrupt)') diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/collector.py b/myenv/lib/python3.12/site-packages/stem/descriptor/collector.py deleted file mode 100644 index 3ee0e1a..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/collector.py +++ /dev/null @@ -1,714 +0,0 @@ -# Copyright 2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Descriptor archives are available from `CollecTor -`_. If you need Tor's topology -at a prior point in time this is the place to go! - -With CollecTor you can either read descriptors directly... - -.. literalinclude:: /_static/example/collector_reading.py - :language: python - -... or download the descriptors to disk and read them later. - -.. literalinclude:: /_static/example/collector_caching.py - :language: python - -:: - - get_instance - Provides a singleton CollecTor used for... - |- get_server_descriptors - published server descriptors - |- get_extrainfo_descriptors - published extrainfo descriptors - |- get_microdescriptors - published microdescriptors - |- get_consensus - published router status entries - | - |- get_key_certificates - authority key certificates - |- get_bandwidth_files - bandwidth authority heuristics - +- get_exit_lists - TorDNSEL exit list - - File - Individual file residing within CollecTor - |- read - provides descriptors from this file - +- download - download this file to disk - - CollecTor - Downloader for descriptors from CollecTor - |- get_server_descriptors - published server descriptors - |- get_extrainfo_descriptors - published extrainfo descriptors - |- get_microdescriptors - published microdescriptors - |- get_consensus - published router status entries - | - |- get_key_certificates - authority key certificates - |- get_bandwidth_files - bandwidth authority heuristics - |- get_exit_lists - TorDNSEL exit list - | - |- index - metadata for content available from CollecTor - +- files - files available from CollecTor - -.. versionadded:: 1.8.0 -""" - -import base64 -import binascii -import datetime -import hashlib -import json -import os -import re -import shutil -import tempfile -import time - -import stem.descriptor -import stem.util.connection -import stem.util.str_tools - -from stem.descriptor import Compression, DocumentHandler - -COLLECTOR_URL = 'https://collector.torproject.org/' -REFRESH_INDEX_RATE = 3600 # get new index if cached copy is an hour old -SINGLETON_COLLECTOR = None - -YEAR_DATE = re.compile('-(\\d{4})-(\\d{2})\\.') -SEC_DATE = re.compile('(\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2})') - -# distant future date so we can sort files without a timestamp at the end - -FUTURE = datetime.datetime(9999, 1, 1) - - -def get_instance(): - """ - Provides the singleton :class:`~stem.descriptor.collector.CollecTor` - used for this module's shorthand functions. - - :returns: singleton :class:`~stem.descriptor.collector.CollecTor` instance - """ - - global SINGLETON_COLLECTOR - - if SINGLETON_COLLECTOR is None: - SINGLETON_COLLECTOR = CollecTor() - - return SINGLETON_COLLECTOR - - -def get_server_descriptors(start = None, end = None, cache_to = None, bridge = False, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_server_descriptors` - on our singleton instance. - """ - - for desc in get_instance().get_server_descriptors(start, end, cache_to, bridge, timeout, retries): - yield desc - - -def get_extrainfo_descriptors(start = None, end = None, cache_to = None, bridge = False, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_extrainfo_descriptors` - on our singleton instance. - """ - - for desc in get_instance().get_extrainfo_descriptors(start, end, cache_to, bridge, timeout, retries): - yield desc - - -def get_microdescriptors(start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_microdescriptors` - on our singleton instance. - """ - - for desc in get_instance().get_microdescriptors(start, end, cache_to, timeout, retries): - yield desc - - -def get_consensus(start = None, end = None, cache_to = None, document_handler = DocumentHandler.ENTRIES, version = 3, microdescriptor = False, bridge = False, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_consensus` - on our singleton instance. - """ - - for desc in get_instance().get_consensus(start, end, cache_to, document_handler, version, microdescriptor, bridge, timeout, retries): - yield desc - - -def get_key_certificates(start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_key_certificates` - on our singleton instance. - """ - - for desc in get_instance().get_key_certificates(start, end, cache_to, timeout, retries): - yield desc - - -def get_bandwidth_files(start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_bandwidth_files` - on our singleton instance. - """ - - for desc in get_instance().get_bandwidth_files(start, end, cache_to, timeout, retries): - yield desc - - -def get_exit_lists(start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Shorthand for - :func:`~stem.descriptor.collector.CollecTor.get_exit_lists` - on our singleton instance. - """ - - for desc in get_instance().get_exit_lists(start, end, cache_to, timeout, retries): - yield desc - - -class File(object): - """ - File within CollecTor. - - :var str path: file path within collector - :var tuple types: descriptor types contained within this file - :var stem.descriptor.Compression compression: file compression, **None** if - this cannot be determined - :var int size: size of the file - :var str sha256: file's sha256 checksum - - :var datetime start: first publication within the file, **None** if this - cannot be determined - :var datetime end: last publication within the file, **None** if this cannot - be determined - :var datetime last_modified: when the file was last modified - """ - - def __init__(self, path, types, size, sha256, first_published, last_published, last_modified): - self.path = path - self.types = tuple(types) if types else () - self.compression = File._guess_compression(path) - self.size = size - self.sha256 = sha256 - self.last_modified = datetime.datetime.strptime(last_modified, '%Y-%m-%d %H:%M') - self._downloaded_to = None # location we last downloaded to - - # Most descriptor types have publication time fields, but microdescriptors - # don't because these files lack timestamps to parse. - - if first_published and last_published: - self.start = datetime.datetime.strptime(first_published, '%Y-%m-%d %H:%M') - self.end = datetime.datetime.strptime(last_published, '%Y-%m-%d %H:%M') - else: - self.start, self.end = File._guess_time_range(path) - - def read(self, directory = None, descriptor_type = None, start = None, end = None, document_handler = DocumentHandler.ENTRIES, timeout = None, retries = 3): - """ - Provides descriptors from this archive. Descriptors are downloaded or read - from disk as follows... - - * If this file has already been downloaded through - :func:`~stem.descriptor.collector.CollecTor.download' these descriptors - are read from disk. - - * If a **directory** argument is provided and the file is already present - these descriptors are read from disk. - - * If a **directory** argument is provided and the file is not present the - file is downloaded this location then read. - - * If the file has neither been downloaded and no **directory** argument - is provided then the file is downloaded to a temporary directory that's - deleted after it is read. - - :param str directory: destination to download into - :param str descriptor_type: `descriptor type - `_, this is - guessed if not provided - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse a :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :param int timeout: timeout when connection becomes idle, no timeout - applied if **None** - :param int retries: maximum attempts to impose - - :returns: iterator for :class:`~stem.descriptor.__init__.Descriptor` - instances in the file - - :raises: - * **ValueError** if unable to determine the descirptor type - * **TypeError** if we cannot parse this descriptor type - * :class:`~stem.DownloadFailed` if the download fails - """ - - if descriptor_type is None: - # If archive contains multiple descriptor types the caller must provide a - # 'descriptor_type' argument so we can disambiguate. However, if only the - # version number varies we can probably simply pick one. - - base_types = set([t.split(' ')[0] for t in self.types]) - - if not self.types: - raise ValueError("Unable to determine this file's descriptor type") - elif len(base_types) > 1: - raise ValueError("Unable to disambiguate file's descriptor type from among %s" % ', '.join(self.types)) - else: - descriptor_type = self.types[0] - - if directory is None: - if self._downloaded_to and os.path.exists(self._downloaded_to): - directory = os.path.dirname(self._downloaded_to) - else: - # TODO: The following can be replaced with simpler usage of - # tempfile.TemporaryDirectory when we drop python 2.x support. - - tmp_directory = tempfile.mkdtemp() - - for desc in self.read(tmp_directory, descriptor_type, start, end, document_handler, timeout, retries): - yield desc - - shutil.rmtree(tmp_directory) - - return - - path = self.download(directory, True, timeout, retries) - - # Archives can contain multiple descriptor types, so parsing everything and - # filtering to what we're after. - - for desc in stem.descriptor.parse_file(path, document_handler = document_handler): - if descriptor_type is None or descriptor_type.startswith(desc.type_annotation().name): - # TODO: This can filter server and extrainfo times, but other - # descriptor types may use other attribute names. - - published = getattr(desc, 'published', None) - - if published: - if start and published < start: - continue - elif end and published > end: - continue - - yield desc - - def download(self, directory, decompress = True, timeout = None, retries = 3, overwrite = False): - """ - Downloads this file to the given location. If a file already exists this is - a no-op. - - :param str directory: destination to download into - :param bool decompress: decompress written file - :param int timeout: timeout when connection becomes idle, no timeout - applied if **None** - :param int retries: maximum attempts to impose - :param bool overwrite: if this file exists but mismatches CollecTor's - checksum then overwrites if **True**, otherwise rases an exception - - :returns: **str** with the path we downloaded to - - :raises: - * :class:`~stem.DownloadFailed` if the download fails - * **IOError** if a mismatching file exists and **overwrite** is **False** - """ - - filename = self.path.split('/')[-1] - - if self.compression != Compression.PLAINTEXT and decompress: - filename = filename.rsplit('.', 1)[0] - - directory = os.path.expanduser(directory) - - path = os.path.join(directory, filename) - - if not os.path.exists(directory): - os.makedirs(directory) - - # check if this file already exists with the correct checksum - - if os.path.exists(path): - with open(path) as prior_file: - expected_hash = binascii.hexlify(base64.b64decode(self.sha256)) - actual_hash = hashlib.sha256(prior_file.read()).hexdigest() - - if expected_hash == actual_hash: - return path # nothing to do, we already have the file - elif not overwrite: - raise IOError("%s already exists but mismatches CollecTor's checksum (expected: %s, actual: %s)" % (path, expected_hash, actual_hash)) - - response = stem.util.connection.download(COLLECTOR_URL + self.path, timeout, retries) - - if decompress: - response = self.compression.decompress(response) - - with open(path, 'wb') as output_file: - output_file.write(response) - - self._downloaded_to = path - return path - - @staticmethod - def _guess_compression(path): - """ - Determine file comprssion from CollecTor's filename. - """ - - for compression in (Compression.LZMA, Compression.BZ2, Compression.GZIP): - if path.endswith(compression.extension): - return compression - - return Compression.PLAINTEXT - - @staticmethod - def _guess_time_range(path): - """ - Attemt to determine the (start, end) time range from CollecTor's filename. - This provides (None, None) if this cannot be determined. - """ - - year_match = YEAR_DATE.search(path) - - if year_match: - year, month = map(int, year_match.groups()) - start = datetime.datetime(year, month, 1) - - if month < 12: - return (start, datetime.datetime(year, month + 1, 1)) - else: - return (start, datetime.datetime(year + 1, 1, 1)) - - sec_match = SEC_DATE.search(path) - - if sec_match: - # Descriptors in the 'recent/*' section have filenames with second level - # granularity. Not quite sure why, but since consensus documents are - # published hourly we'll use that as the delta here. - - start = datetime.datetime.strptime(sec_match.group(1), '%Y-%m-%d-%H-%M-%S') - return (start, start + datetime.timedelta(seconds = 3600)) - - return (None, None) - - -class CollecTor(object): - """ - Downloader for descriptors from CollecTor. The contents of CollecTor are - provided in `an index `_ - that's fetched as required. - - :var int retries: number of times to attempt the request if downloading it - fails - :var float timeout: duration before we'll time out our request - """ - - def __init__(self, retries = 2, timeout = None): - self.retries = retries - self.timeout = timeout - - self._cached_index = None - self._cached_files = None - self._cached_index_at = 0 - - def get_server_descriptors(self, start = None, end = None, cache_to = None, bridge = False, timeout = None, retries = 3): - """ - Provides server descriptors published during the given time range, sorted - oldest to newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param bool bridge: standard descriptors if **False**, bridge if **True** - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.server_descriptor.ServerDescriptor` for the - given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - desc_type = 'server-descriptor' if not bridge else 'bridge-server-descriptor' - - for f in self.files(desc_type, start, end): - for desc in f.read(cache_to, desc_type, start, end, timeout = timeout, retries = retries): - yield desc - - def get_extrainfo_descriptors(self, start = None, end = None, cache_to = None, bridge = False, timeout = None, retries = 3): - """ - Provides extrainfo descriptors published during the given time range, - sorted oldest to newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param bool bridge: standard descriptors if **False**, bridge if **True** - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.extrainfo_descriptor.RelayExtraInfoDescriptor` - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - desc_type = 'extra-info' if not bridge else 'bridge-extra-info' - - for f in self.files(desc_type, start, end): - for desc in f.read(cache_to, desc_type, start, end, timeout = timeout, retries = retries): - yield desc - - def get_microdescriptors(self, start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Provides microdescriptors estimated to be published during the given time - range, sorted oldest to newest. Unlike server/extrainfo descriptors, - microdescriptors change very infrequently... - - :: - - "Microdescriptors are expected to be relatively static and only change - about once per week." -dir-spec section 3.3 - - CollecTor archives only contain microdescriptors that *change*, so hourly - tarballs often contain very few. Microdescriptors also do not contain - their publication timestamp, so this is estimated. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.microdescriptor.Microdescriptor - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - for f in self.files('microdescriptor', start, end): - for desc in f.read(cache_to, 'microdescriptor', start, end, timeout = timeout, retries = retries): - yield desc - - def get_consensus(self, start = None, end = None, cache_to = None, document_handler = DocumentHandler.ENTRIES, version = 3, microdescriptor = False, bridge = False, timeout = None, retries = 3): - """ - Provides consensus router status entries published during the given time - range, sorted oldest to newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse a :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :param int version: consensus variant to retrieve (versions 2 or 3) - :param bool microdescriptor: provides the microdescriptor consensus if - **True**, standard consensus otherwise - :param bool bridge: standard descriptors if **False**, bridge if **True** - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.router_status_entry.RouterStatusEntry` - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - if version == 3 and not microdescriptor and not bridge: - desc_type = 'network-status-consensus-3' - elif version == 3 and microdescriptor and not bridge: - desc_type = 'network-status-microdesc-consensus-3' - elif version == 2 and not microdescriptor and not bridge: - desc_type = 'network-status-2' - elif bridge: - desc_type = 'bridge-network-status' - else: - if microdescriptor and version != 3: - raise ValueError('Only v3 microdescriptors are available (not version %s)' % version) - else: - raise ValueError('Only v2 and v3 router status entries are available (not version %s)' % version) - - for f in self.files(desc_type, start, end): - for desc in f.read(cache_to, desc_type, start, end, document_handler, timeout = timeout, retries = retries): - yield desc - - def get_key_certificates(self, start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Directory authority key certificates for the given time range, - sorted oldest to newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.networkstatus.KeyCertificate - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - for f in self.files('dir-key-certificate-3', start, end): - for desc in f.read(cache_to, 'dir-key-certificate-3', start, end, timeout = timeout, retries = retries): - yield desc - - def get_bandwidth_files(self, start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - Bandwidth authority heuristics for the given time range, sorted oldest to - newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.bandwidth_file.BandwidthFile - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - for f in self.files('bandwidth-file', start, end): - for desc in f.read(cache_to, 'bandwidth-file', start, end, timeout = timeout, retries = retries): - yield desc - - def get_exit_lists(self, start = None, end = None, cache_to = None, timeout = None, retries = 3): - """ - `TorDNSEL exit lists `_ - for the given time range, sorted oldest to newest. - - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - :param str cache_to: directory to cache archives into, if an archive is - available here it is not downloaded - :param int timeout: timeout for downloading each individual archive when - the connection becomes idle, no timeout applied if **None** - :param int retries: maximum attempts to impose on a per-archive basis - - :returns: **iterator** of - :class:`~stem.descriptor.tordnsel.TorDNSEL - for the given time range - - :raises: :class:`~stem.DownloadFailed` if the download fails - """ - - for f in self.files('tordnsel', start, end): - for desc in f.read(cache_to, 'tordnsel', start, end, timeout = timeout, retries = retries): - yield desc - - def index(self, compression = 'best'): - """ - Provides the archives available in CollecTor. - - :param descriptor.Compression compression: compression type to - download from, if undefiled we'll use the best decompression available - - :returns: **dict** with the archive contents - - :raises: - If unable to retrieve the index this provide... - - * **ValueError** if json is malformed - * **IOError** if unable to decompress - * :class:`~stem.DownloadFailed` if the download fails - """ - - if not self._cached_index or time.time() - self._cached_index_at >= REFRESH_INDEX_RATE: - if compression == 'best': - for option in (Compression.LZMA, Compression.BZ2, Compression.GZIP, Compression.PLAINTEXT): - if option.available: - compression = option - break - elif compression is None: - compression = Compression.PLAINTEXT - - extension = compression.extension if compression != Compression.PLAINTEXT else '' - url = COLLECTOR_URL + 'index/index.json' + extension - response = compression.decompress(stem.util.connection.download(url, self.timeout, self.retries)) - - self._cached_index = json.loads(stem.util.str_tools._to_unicode(response)) - self._cached_index_at = time.time() - - return self._cached_index - - def files(self, descriptor_type = None, start = None, end = None): - """ - Provides files CollecTor presently has, sorted oldest to newest. - - :param str descriptor_type: descriptor type or prefix to retrieve - :param datetime.datetime start: publication time to begin with - :param datetime.datetime end: publication time to end with - - :returns: **list** of :class:`~stem.descriptor.collector.File` - - :raises: - If unable to retrieve the index this provide... - - * **ValueError** if json is malformed - * **IOError** if unable to decompress - * :class:`~stem.DownloadFailed` if the download fails - """ - - if not self._cached_files or time.time() - self._cached_index_at >= REFRESH_INDEX_RATE: - self._cached_files = sorted(CollecTor._files(self.index(), []), key = lambda x: x.start if x.start else FUTURE) - - matches = [] - - for f in self._cached_files: - if start and (f.end is None or f.end < start): - continue # only contains descriptors before time range - elif end and (f.start is None or f.start > end): - continue # only contains descriptors after time range - - if descriptor_type is None or any([desc_type.startswith(descriptor_type) for desc_type in f.types]): - matches.append(f) - - return matches - - @staticmethod - def _files(val, path): - """ - Recursively provies files within the index. - - :param dict val: index hash - :param list path: path we've transversed into - - :returns: **list** of :class:`~stem.descriptor.collector.File` - """ - - if not isinstance(val, dict): - return [] # leaf node without any files - - files = [] - - for k, v in val.items(): - if k == 'files': - for attr in v: - file_path = '/'.join(path + [attr.get('path')]) - files.append(File(file_path, attr.get('types'), attr.get('size'), attr.get('sha256'), attr.get('first_published'), attr.get('last_published'), attr.get('last_modified'))) - elif k == 'directories': - for attr in v: - files.extend(CollecTor._files(attr, path + [attr.get('path')])) - - return files diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/export.py b/myenv/lib/python3.12/site-packages/stem/descriptor/export.py deleted file mode 100644 index e7b465b..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/export.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Toolkit for exporting descriptors to other formats. - -**Module Overview:** - -:: - - export_csv - Exports descriptors to a CSV - export_csv_file - Writes exported CSV output to a file - -.. deprecated:: 1.7.0 - - This module will likely be removed in Stem 2.0 due to lack of usage. If you - use this modle please `let me know `_. -""" - -import csv - -try: - from cStringIO import StringIO -except ImportError: - from io import StringIO - -import stem.descriptor -import stem.prereq - - -class _ExportDialect(csv.excel): - lineterminator = '\n' - - -def export_csv(descriptors, included_fields = (), excluded_fields = (), header = True): - """ - Provides a newline separated CSV for one or more descriptors. If simply - provided with descriptors then the CSV contains all of its attributes, - labeled with a header row. Either 'included_fields' or 'excluded_fields' can - be used for more granular control over its attributes and the order. - - :param Descriptor,list descriptors: either a - :class:`~stem.descriptor.Descriptor` or list of descriptors to be exported - :param list included_fields: attributes to include in the csv - :param list excluded_fields: attributes to exclude from the csv - :param bool header: if **True** then the first line will be a comma separated - list of the attribute names (**only supported in python 2.7 and higher**) - - :returns: **str** of the CSV for the descriptors, one per line - :raises: **ValueError** if descriptors contain more than one descriptor type - """ - - output_buffer = StringIO() - export_csv_file(output_buffer, descriptors, included_fields, excluded_fields, header) - return output_buffer.getvalue() - - -def export_csv_file(output_file, descriptors, included_fields = (), excluded_fields = (), header = True): - """ - Similar to :func:`stem.descriptor.export.export_csv`, except that the CSV is - written directly to a file. - - :param file output_file: file to be written to - :param Descriptor,list descriptors: either a - :class:`~stem.descriptor.Descriptor` or list of descriptors to be exported - :param list included_fields: attributes to include in the csv - :param list excluded_fields: attributes to exclude from the csv - :param bool header: if **True** then the first line will be a comma separated - list of the attribute names (**only supported in python 2.7 and higher**) - - :returns: **str** of the CSV for the descriptors, one per line - :raises: **ValueError** if descriptors contain more than one descriptor type - """ - - if isinstance(descriptors, stem.descriptor.Descriptor): - descriptors = (descriptors,) - - if not descriptors: - return - - descriptor_type = type(descriptors[0]) - descriptor_type_label = descriptor_type.__name__ - included_fields = list(included_fields) - - # If the user didn't specify the fields to include then export everything, - # ordered alphabetically. If they did specify fields then make sure that - # they exist. - - desc_attr = sorted(vars(descriptors[0]).keys()) - - if included_fields: - for field in included_fields: - if field not in desc_attr: - raise ValueError("%s does not have a '%s' attribute, valid fields are: %s" % (descriptor_type_label, field, ', '.join(desc_attr))) - else: - included_fields = [attr for attr in desc_attr if not attr.startswith('_')] - - for field in excluded_fields: - try: - included_fields.remove(field) - except ValueError: - pass - - writer = csv.DictWriter(output_file, included_fields, dialect = _ExportDialect(), extrasaction='ignore') - - if header and not stem.prereq._is_python_26(): - writer.writeheader() - - for desc in descriptors: - if not isinstance(desc, stem.descriptor.Descriptor): - raise ValueError('Unable to export a descriptor CSV since %s is not a descriptor.' % type(desc).__name__) - elif descriptor_type != type(desc): - raise ValueError('To export a descriptor CSV all of the descriptors must be of the same type. First descriptor was a %s but we later got a %s.' % (descriptor_type_label, type(desc))) - - writer.writerow(vars(desc)) diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/extrainfo_descriptor.py b/myenv/lib/python3.12/site-packages/stem/descriptor/extrainfo_descriptor.py deleted file mode 100644 index d55b8ee..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/extrainfo_descriptor.py +++ /dev/null @@ -1,1029 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Tor extra-info descriptors. These are published by relays whenever -their server descriptor is published and have a similar format. However, unlike -server descriptors these don't contain information that Tor clients require to -function and as such aren't fetched by default. - -Defined in section 2.1.2 of the `dir-spec -`_, -extra-info descriptors contain interesting but non-vital information such as -usage statistics. Tor clients cannot request these documents for bridges. - -Extra-info descriptors are available from a few sources... - -* If you have 'DownloadExtraInfo 1' in your torrc... - - * control port via 'GETINFO extra-info/digest/\\*' queries - * the 'cached-extrainfo' file in tor's data directory - -* Archived descriptors provided by `CollecTor `_. - -* Directory authorities and mirrors via their DirPort. - -**Module Overview:** - -:: - - ExtraInfoDescriptor - Tor extra-info descriptor. - |- RelayExtraInfoDescriptor - Extra-info descriptor for a relay. - |- BridgeExtraInfoDescriptor - Extra-info descriptor for a bridge. - | - +- digest - calculates the upper-case hex digest value for our content - -.. data:: DirResponse (enum) - - Enumeration for known statuses for ExtraInfoDescriptor's dir_*_responses. - - =================== =========== - DirResponse Description - =================== =========== - **OK** network status requests that were answered - **NOT_ENOUGH_SIGS** network status wasn't signed by enough authorities - **UNAVAILABLE** requested network status was unavailable - **NOT_FOUND** requested network status was not found - **NOT_MODIFIED** network status unmodified since If-Modified-Since time - **BUSY** directory was busy - =================== =========== - -.. data:: DirStat (enum) - - Enumeration for known stats for ExtraInfoDescriptor's dir_*_direct_dl and - dir_*_tunneled_dl. - - ===================== =========== - DirStat Description - ===================== =========== - **COMPLETE** requests that completed successfully - **TIMEOUT** requests that didn't complete within a ten minute timeout - **RUNNING** requests still in process when measurement's taken - **MIN** smallest rate at which a descriptor was downloaded in B/s - **MAX** largest rate at which a descriptor was downloaded in B/s - **D1-4** and **D6-9** rate of the slowest x/10 download rates in B/s - **Q1** and **Q3** rate of the slowest and fastest quarter download rates in B/s - **MD** median download rate in B/s - ===================== =========== -""" - -import functools -import hashlib -import re - -import stem.prereq -import stem.util.connection -import stem.util.enum -import stem.util.str_tools - -from stem.descriptor import ( - PGP_BLOCK_END, - Descriptor, - DigestHash, - DigestEncoding, - create_signing_key, - _descriptor_content, - _read_until_keywords, - _descriptor_components, - _value, - _values, - _parse_simple_line, - _parse_int_line, - _parse_timestamp_line, - _parse_forty_character_hex, - _parse_key_block, - _mappings_for, - _append_router_signature, - _random_nickname, - _random_fingerprint, - _random_date, - _random_crypto_blob, -) - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -# known statuses for dirreq-v2-resp and dirreq-v3-resp... -DirResponse = stem.util.enum.Enum( - ('OK', 'ok'), - ('NOT_ENOUGH_SIGS', 'not-enough-sigs'), - ('UNAVAILABLE', 'unavailable'), - ('NOT_FOUND', 'not-found'), - ('NOT_MODIFIED', 'not-modified'), - ('BUSY', 'busy'), -) - -# known stats for dirreq-v2/3-direct-dl and dirreq-v2/3-tunneled-dl... -dir_stats = ['complete', 'timeout', 'running', 'min', 'max', 'q1', 'q3', 'md'] -dir_stats += ['d%i' % i for i in range(1, 5)] -dir_stats += ['d%i' % i for i in range(6, 10)] -DirStat = stem.util.enum.Enum(*[(stat.upper(), stat) for stat in dir_stats]) - -# relay descriptors must have exactly one of the following -REQUIRED_FIELDS = ( - 'extra-info', - 'published', - 'router-signature', -) - -# optional entries that can appear at most once -SINGLE_FIELDS = ( - 'read-history', - 'write-history', - 'geoip-db-digest', - 'geoip6-db-digest', - 'bridge-stats-end', - 'bridge-ips', - 'dirreq-stats-end', - 'dirreq-v2-ips', - 'dirreq-v3-ips', - 'dirreq-v2-reqs', - 'dirreq-v3-reqs', - 'dirreq-v2-share', - 'dirreq-v3-share', - 'dirreq-v2-resp', - 'dirreq-v3-resp', - 'dirreq-v2-direct-dl', - 'dirreq-v3-direct-dl', - 'dirreq-v2-tunneled-dl', - 'dirreq-v3-tunneled-dl', - 'dirreq-read-history', - 'dirreq-write-history', - 'entry-stats-end', - 'entry-ips', - 'cell-stats-end', - 'cell-processed-cells', - 'cell-queued-cells', - 'cell-time-in-queue', - 'cell-circuits-per-decile', - 'conn-bi-direct', - 'exit-stats-end', - 'exit-kibibytes-written', - 'exit-kibibytes-read', - 'exit-streams-opened', -) - -_timestamp_re = re.compile('^(.*) \\(([0-9]+) s\\)( .*)?$') -_locale_re = re.compile('^[a-zA-Z0-9\\?]{2}$') - - -def _parse_file(descriptor_file, is_bridge = False, validate = False, **kwargs): - """ - Iterates over the extra-info descriptors in a file. - - :param file descriptor_file: file with descriptor content - :param bool is_bridge: parses the file as being a bridge descriptor - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: iterator for :class:`~stem.descriptor.extrainfo_descriptor.ExtraInfoDescriptor` - instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is **True** - * **IOError** if the file can't be read - """ - - while True: - if not is_bridge: - extrainfo_content = _read_until_keywords('router-signature', descriptor_file) - - # we've reached the 'router-signature', now include the pgp style block - - block_end_prefix = PGP_BLOCK_END.split(' ', 1)[0] - extrainfo_content += _read_until_keywords(block_end_prefix, descriptor_file, True) - else: - extrainfo_content = _read_until_keywords('router-digest', descriptor_file, True) - - if extrainfo_content: - if extrainfo_content[0].startswith(b'@type'): - extrainfo_content = extrainfo_content[1:] - - if is_bridge: - yield BridgeExtraInfoDescriptor(bytes.join(b'', extrainfo_content), validate, **kwargs) - else: - yield RelayExtraInfoDescriptor(bytes.join(b'', extrainfo_content), validate, **kwargs) - else: - break # done parsing file - - -def _parse_timestamp_and_interval(keyword, content): - """ - Parses a 'YYYY-MM-DD HH:MM:SS (NSEC s) *' entry. - - :param str keyword: line's keyword - :param str content: line content to be parsed - - :returns: **tuple** of the form (timestamp (**datetime**), interval - (**int**), remaining content (**str**)) - - :raises: **ValueError** if the content is malformed - """ - - line = '%s %s' % (keyword, content) - content_match = _timestamp_re.match(content) - - if not content_match: - raise ValueError('Malformed %s line: %s' % (keyword, line)) - - timestamp_str, interval, remainder = content_match.groups() - - if remainder: - remainder = remainder[1:] # remove leading space - - if not interval.isdigit(): - raise ValueError("%s line's interval wasn't a number: %s" % (keyword, line)) - - try: - timestamp = stem.util.str_tools._parse_timestamp(timestamp_str) - return timestamp, int(interval), remainder - except ValueError: - raise ValueError("%s line's timestamp wasn't parsable: %s" % (keyword, line)) - - -def _parse_extra_info_line(descriptor, entries): - # "extra-info" Nickname Fingerprint - - value = _value('extra-info', entries) - extra_info_comp = value.split() - - if len(extra_info_comp) < 2: - raise ValueError('Extra-info line must have two values: extra-info %s' % value) - elif not stem.util.tor_tools.is_valid_nickname(extra_info_comp[0]): - raise ValueError("Extra-info line entry isn't a valid nickname: %s" % extra_info_comp[0]) - elif not stem.util.tor_tools.is_valid_fingerprint(extra_info_comp[1]): - raise ValueError('Tor relay fingerprints consist of forty hex digits: %s' % extra_info_comp[1]) - - descriptor.nickname = extra_info_comp[0] - descriptor.fingerprint = extra_info_comp[1] - - -def _parse_transport_line(descriptor, entries): - # "transport" transportname address:port [arglist] - # Everything after the transportname is scrubbed in published bridge - # descriptors, so we'll never see it in practice. - # - # These entries really only make sense for bridges, but have been seen - # on non-bridges in the wild when the relay operator configured it this - # way. - - transports = {} - - for value in _values('transport', entries): - name, address, port, args = None, None, None, None - - if ' ' not in value: - # scrubbed - name = value - else: - # not scrubbed - value_comp = value.split() - - if len(value_comp) < 1: - raise ValueError('Transport line is missing its transport name: transport %s' % value) - elif len(value_comp) < 2: - raise ValueError('Transport line is missing its address:port value: transport %s' % value) - elif ':' not in value_comp[1]: - raise ValueError("Transport line's address:port entry is missing a colon: transport %s" % value) - - name = value_comp[0] - address, port_str = value_comp[1].rsplit(':', 1) - - if not stem.util.connection.is_valid_ipv4_address(address) or \ - stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True): - raise ValueError('Transport line has a malformed address: transport %s' % value) - elif not stem.util.connection.is_valid_port(port_str): - raise ValueError('Transport line has a malformed port: transport %s' % value) - - address.lstrip('[').rstrip(']') - port = int(port_str) - args = value_comp[2:] if len(value_comp) >= 3 else [] - - transports[name] = (address, port, args) - - descriptor.transport = transports - - -def _parse_padding_counts_line(descriptor, entries): - # "padding-counts" YYYY-MM-DD HH:MM:SS (NSEC s) key=val key=val... - - value = _value('padding-counts', entries) - timestamp, interval, remainder = _parse_timestamp_and_interval('padding-counts', value) - counts = {} - - for k, v in _mappings_for('padding-counts', remainder, require_value = True): - counts[k] = int(v) if v.isdigit() else v - - setattr(descriptor, 'padding_counts_end', timestamp) - setattr(descriptor, 'padding_counts_interval', interval) - setattr(descriptor, 'padding_counts', counts) - - -def _parse_dirreq_line(keyword, recognized_counts_attr, unrecognized_counts_attr, descriptor, entries): - value = _value(keyword, entries) - - recognized_counts = {} - unrecognized_counts = {} - - is_response_stats = keyword in ('dirreq-v2-resp', 'dirreq-v3-resp') - key_set = DirResponse if is_response_stats else DirStat - - key_type = 'STATUS' if is_response_stats else 'STAT' - - for status, count in _mappings_for(keyword, value, divider = ','): - if not count.isdigit(): - raise ValueError('%s lines should contain %s=COUNT mappings: %s %s' % (keyword, key_type, keyword, value)) - - if status in key_set: - recognized_counts[status] = int(count) - else: - unrecognized_counts[status] = int(count) - - setattr(descriptor, recognized_counts_attr, recognized_counts) - setattr(descriptor, unrecognized_counts_attr, unrecognized_counts) - - -def _parse_dirreq_share_line(keyword, attribute, descriptor, entries): - value = _value(keyword, entries) - - if not value.endswith('%'): - raise ValueError('%s lines should be a percentage: %s %s' % (keyword, keyword, value)) - elif float(value[:-1]) < 0: - raise ValueError('Negative percentage value: %s %s' % (keyword, value)) - - # bug means it might be above 100%: https://lists.torproject.org/pipermail/tor-dev/2012-June/003679.html - - setattr(descriptor, attribute, float(value[:-1]) / 100) - - -def _parse_cell_line(keyword, attribute, descriptor, entries): - # "" num,...,num - - value = _value(keyword, entries) - entries, exc = [], None - - if value: - for entry in value.split(','): - try: - # Values should be positive but as discussed in ticket #5849 - # there was a bug around this. It was fixed in tor 0.2.2.1. - - entries.append(float(entry)) - except ValueError: - exc = ValueError('Non-numeric entry in %s listing: %s %s' % (keyword, keyword, value)) - - setattr(descriptor, attribute, entries) - - if exc: - raise exc - - -def _parse_timestamp_and_interval_line(keyword, end_attribute, interval_attribute, descriptor, entries): - # "" YYYY-MM-DD HH:MM:SS (NSEC s) - - timestamp, interval, _ = _parse_timestamp_and_interval(keyword, _value(keyword, entries)) - setattr(descriptor, end_attribute, timestamp) - setattr(descriptor, interval_attribute, interval) - - -def _parse_conn_bi_direct_line(descriptor, entries): - # "conn-bi-direct" YYYY-MM-DD HH:MM:SS (NSEC s) BELOW,READ,WRITE,BOTH - - value = _value('conn-bi-direct', entries) - timestamp, interval, remainder = _parse_timestamp_and_interval('conn-bi-direct', value) - stats = remainder.split(',') - - if len(stats) != 4 or not (stats[0].isdigit() and stats[1].isdigit() and stats[2].isdigit() and stats[3].isdigit()): - raise ValueError('conn-bi-direct line should end with four numeric values: conn-bi-direct %s' % value) - - descriptor.conn_bi_direct_end = timestamp - descriptor.conn_bi_direct_interval = interval - descriptor.conn_bi_direct_below = int(stats[0]) - descriptor.conn_bi_direct_read = int(stats[1]) - descriptor.conn_bi_direct_write = int(stats[2]) - descriptor.conn_bi_direct_both = int(stats[3]) - - -def _parse_history_line(keyword, end_attribute, interval_attribute, values_attribute, descriptor, entries): - # "" YYYY-MM-DD HH:MM:SS (NSEC s) NUM,NUM,NUM,NUM,NUM... - - value = _value(keyword, entries) - timestamp, interval, remainder = _parse_timestamp_and_interval(keyword, value) - history_values = [] - - if remainder: - try: - history_values = [int(entry) for entry in remainder.split(',')] - except ValueError: - raise ValueError('%s line has non-numeric values: %s %s' % (keyword, keyword, value)) - - setattr(descriptor, end_attribute, timestamp) - setattr(descriptor, interval_attribute, interval) - setattr(descriptor, values_attribute, history_values) - - -def _parse_port_count_line(keyword, attribute, descriptor, entries): - # "" port=N,port=N,... - - value, port_mappings = _value(keyword, entries), {} - - for port, stat in _mappings_for(keyword, value, divider = ','): - if (port != 'other' and not stem.util.connection.is_valid_port(port)) or not stat.isdigit(): - raise ValueError('Entries in %s line should only be PORT=N entries: %s %s' % (keyword, keyword, value)) - - port = int(port) if port.isdigit() else port - port_mappings[port] = int(stat) - - setattr(descriptor, attribute, port_mappings) - - -def _parse_geoip_to_count_line(keyword, attribute, descriptor, entries): - # "" CC=N,CC=N,... - # - # The maxmind geoip (https://www.maxmind.com/app/iso3166) has numeric - # locale codes for some special values, for instance... - # A1,"Anonymous Proxy" - # A2,"Satellite Provider" - # ??,"Unknown" - - value, locale_usage = _value(keyword, entries), {} - - for locale, count in _mappings_for(keyword, value, divider = ','): - if not _locale_re.match(locale) or not count.isdigit(): - raise ValueError('Entries in %s line should only be CC=N entries: %s %s' % (keyword, keyword, value)) - - locale_usage[locale] = int(count) - - setattr(descriptor, attribute, locale_usage) - - -def _parse_bridge_ip_versions_line(descriptor, entries): - value, ip_versions = _value('bridge-ip-versions', entries), {} - - for protocol, count in _mappings_for('bridge-ip-versions', value, divider = ','): - if not count.isdigit(): - raise stem.ProtocolError('IP protocol count was non-numeric (%s): bridge-ip-versions %s' % (count, value)) - - ip_versions[protocol] = int(count) - - descriptor.ip_versions = ip_versions - - -def _parse_bridge_ip_transports_line(descriptor, entries): - value, ip_transports = _value('bridge-ip-transports', entries), {} - - for protocol, count in _mappings_for('bridge-ip-transports', value, divider = ','): - if not count.isdigit(): - raise stem.ProtocolError('Transport count was non-numeric (%s): bridge-ip-transports %s' % (count, value)) - - ip_transports[protocol] = int(count) - - descriptor.ip_transports = ip_transports - - -def _parse_hs_stats(keyword, stat_attribute, extra_attribute, descriptor, entries): - # "" num key=val key=val... - - value, stat, extra = _value(keyword, entries), None, {} - - if value is None: - pass # not in the descriptor - elif value == '': - raise ValueError("'%s' line was blank" % keyword) - else: - if ' ' in value: - stat_value, remainder = value.split(' ', 1) - else: - stat_value, remainder = value, None - - try: - stat = int(stat_value) - except ValueError: - raise ValueError("'%s' stat was non-numeric (%s): %s %s" % (keyword, stat_value, keyword, value)) - - for key, val in _mappings_for(keyword, remainder): - extra[key] = val - - setattr(descriptor, stat_attribute, stat) - setattr(descriptor, extra_attribute, extra) - - -_parse_identity_ed25519_line = _parse_key_block('identity-ed25519', 'ed25519_certificate', 'ED25519 CERT') -_parse_master_key_ed25519_line = _parse_simple_line('master-key-ed25519', 'ed25519_certificate_hash') -_parse_geoip_db_digest_line = _parse_forty_character_hex('geoip-db-digest', 'geoip_db_digest') -_parse_geoip6_db_digest_line = _parse_forty_character_hex('geoip6-db-digest', 'geoip6_db_digest') -_parse_dirreq_v2_resp_line = functools.partial(_parse_dirreq_line, 'dirreq-v2-resp', 'dir_v2_responses', 'dir_v2_responses_unknown') -_parse_dirreq_v3_resp_line = functools.partial(_parse_dirreq_line, 'dirreq-v3-resp', 'dir_v3_responses', 'dir_v3_responses_unknown') -_parse_dirreq_v2_direct_dl_line = functools.partial(_parse_dirreq_line, 'dirreq-v2-direct-dl', 'dir_v2_direct_dl', 'dir_v2_direct_dl_unknown') -_parse_dirreq_v3_direct_dl_line = functools.partial(_parse_dirreq_line, 'dirreq-v3-direct-dl', 'dir_v3_direct_dl', 'dir_v3_direct_dl_unknown') -_parse_dirreq_v2_tunneled_dl_line = functools.partial(_parse_dirreq_line, 'dirreq-v2-tunneled-dl', 'dir_v2_tunneled_dl', 'dir_v2_tunneled_dl_unknown') -_parse_dirreq_v3_tunneled_dl_line = functools.partial(_parse_dirreq_line, 'dirreq-v3-tunneled-dl', 'dir_v3_tunneled_dl', 'dir_v3_tunneled_dl_unknown') -_parse_dirreq_v2_share_line = functools.partial(_parse_dirreq_share_line, 'dirreq-v2-share', 'dir_v2_share') -_parse_dirreq_v3_share_line = functools.partial(_parse_dirreq_share_line, 'dirreq-v3-share', 'dir_v3_share') -_parse_cell_processed_cells_line = functools.partial(_parse_cell_line, 'cell-processed-cells', 'cell_processed_cells') -_parse_cell_queued_cells_line = functools.partial(_parse_cell_line, 'cell-queued-cells', 'cell_queued_cells') -_parse_cell_time_in_queue_line = functools.partial(_parse_cell_line, 'cell-time-in-queue', 'cell_time_in_queue') -_parse_cell_circuits_per_decline_line = _parse_int_line('cell-circuits-per-decile', 'cell_circuits_per_decile', allow_negative = False) -_parse_published_line = _parse_timestamp_line('published', 'published') -_parse_geoip_start_time_line = _parse_timestamp_line('geoip-start-time', 'geoip_start_time') -_parse_cell_stats_end_line = functools.partial(_parse_timestamp_and_interval_line, 'cell-stats-end', 'cell_stats_end', 'cell_stats_interval') -_parse_entry_stats_end_line = functools.partial(_parse_timestamp_and_interval_line, 'entry-stats-end', 'entry_stats_end', 'entry_stats_interval') -_parse_exit_stats_end_line = functools.partial(_parse_timestamp_and_interval_line, 'exit-stats-end', 'exit_stats_end', 'exit_stats_interval') -_parse_bridge_stats_end_line = functools.partial(_parse_timestamp_and_interval_line, 'bridge-stats-end', 'bridge_stats_end', 'bridge_stats_interval') -_parse_dirreq_stats_end_line = functools.partial(_parse_timestamp_and_interval_line, 'dirreq-stats-end', 'dir_stats_end', 'dir_stats_interval') -_parse_read_history_line = functools.partial(_parse_history_line, 'read-history', 'read_history_end', 'read_history_interval', 'read_history_values') -_parse_write_history_line = functools.partial(_parse_history_line, 'write-history', 'write_history_end', 'write_history_interval', 'write_history_values') -_parse_dirreq_read_history_line = functools.partial(_parse_history_line, 'dirreq-read-history', 'dir_read_history_end', 'dir_read_history_interval', 'dir_read_history_values') -_parse_dirreq_write_history_line = functools.partial(_parse_history_line, 'dirreq-write-history', 'dir_write_history_end', 'dir_write_history_interval', 'dir_write_history_values') -_parse_exit_kibibytes_written_line = functools.partial(_parse_port_count_line, 'exit-kibibytes-written', 'exit_kibibytes_written') -_parse_exit_kibibytes_read_line = functools.partial(_parse_port_count_line, 'exit-kibibytes-read', 'exit_kibibytes_read') -_parse_exit_streams_opened_line = functools.partial(_parse_port_count_line, 'exit-streams-opened', 'exit_streams_opened') -_parse_hidden_service_stats_end_line = _parse_timestamp_line('hidserv-stats-end', 'hs_stats_end') -_parse_hidden_service_rend_relayed_cells_line = functools.partial(_parse_hs_stats, 'hidserv-rend-relayed-cells', 'hs_rend_cells', 'hs_rend_cells_attr') -_parse_hidden_service_dir_onions_seen_line = functools.partial(_parse_hs_stats, 'hidserv-dir-onions-seen', 'hs_dir_onions_seen', 'hs_dir_onions_seen_attr') -_parse_dirreq_v2_ips_line = functools.partial(_parse_geoip_to_count_line, 'dirreq-v2-ips', 'dir_v2_ips') -_parse_dirreq_v3_ips_line = functools.partial(_parse_geoip_to_count_line, 'dirreq-v3-ips', 'dir_v3_ips') -_parse_dirreq_v2_reqs_line = functools.partial(_parse_geoip_to_count_line, 'dirreq-v2-reqs', 'dir_v2_requests') -_parse_dirreq_v3_reqs_line = functools.partial(_parse_geoip_to_count_line, 'dirreq-v3-reqs', 'dir_v3_requests') -_parse_geoip_client_origins_line = functools.partial(_parse_geoip_to_count_line, 'geoip-client-origins', 'geoip_client_origins') -_parse_entry_ips_line = functools.partial(_parse_geoip_to_count_line, 'entry-ips', 'entry_ips') -_parse_bridge_ips_line = functools.partial(_parse_geoip_to_count_line, 'bridge-ips', 'bridge_ips') -_parse_router_sig_ed25519_line = _parse_simple_line('router-sig-ed25519', 'ed25519_signature') -_parse_router_digest_sha256_line = _parse_simple_line('router-digest-sha256', 'router_digest_sha256') -_parse_router_digest_line = _parse_forty_character_hex('router-digest', '_digest') -_parse_router_signature_line = _parse_key_block('router-signature', 'signature', 'SIGNATURE') - - -class ExtraInfoDescriptor(Descriptor): - """ - Extra-info descriptor document. - - :var str nickname: **\\*** relay's nickname - :var str fingerprint: **\\*** identity key fingerprint - :var datetime published: **\\*** time in UTC when this descriptor was made - :var str geoip_db_digest: sha1 of the geoIP database file for IPv4 addresses - :var str geoip6_db_digest: sha1 of the geoIP database file for IPv6 addresses - :var dict transport: **\\*** mapping of transport methods to their (address, - port, args) tuple, these usually appear on bridges in which case all of - those are **None** - - **Bi-directional connection usage:** - - :var datetime conn_bi_direct_end: end of the sampling interval - :var int conn_bi_direct_interval: seconds per interval - :var int conn_bi_direct_below: connections that read/wrote less than 20 KiB - :var int conn_bi_direct_read: connections that read at least 10x more than wrote - :var int conn_bi_direct_write: connections that wrote at least 10x more than read - :var int conn_bi_direct_both: remaining connections - - **Bytes read/written for relayed traffic:** - - :var datetime read_history_end: end of the sampling interval - :var int read_history_interval: seconds per interval - :var list read_history_values: bytes read during each interval - - :var datetime write_history_end: end of the sampling interval - :var int write_history_interval: seconds per interval - :var list write_history_values: bytes written during each interval - - **Cell relaying statistics:** - - :var datetime cell_stats_end: end of the period when stats were gathered - :var int cell_stats_interval: length in seconds of the interval - :var list cell_processed_cells: measurement of processed cells per circuit - :var list cell_queued_cells: measurement of queued cells per circuit - :var list cell_time_in_queue: mean enqueued time in milliseconds for cells - :var int cell_circuits_per_decile: mean number of circuits in a decile - - **Directory Mirror Attributes:** - - :var datetime dir_stats_end: end of the period when stats were gathered - :var int dir_stats_interval: length in seconds of the interval - :var dict dir_v2_ips: mapping of locales to rounded count of requester ips - :var dict dir_v3_ips: mapping of locales to rounded count of requester ips - :var float dir_v2_share: percent of total directory traffic it expects to serve - :var float dir_v3_share: percent of total directory traffic it expects to serve - :var dict dir_v2_requests: mapping of locales to rounded count of requests - :var dict dir_v3_requests: mapping of locales to rounded count of requests - - :var dict dir_v2_responses: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirResponse` to their rounded count - :var dict dir_v3_responses: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirResponse` to their rounded count - :var dict dir_v2_responses_unknown: mapping of unrecognized statuses to their count - :var dict dir_v3_responses_unknown: mapping of unrecognized statuses to their count - - :var dict dir_v2_direct_dl: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirStat` to measurement over DirPort - :var dict dir_v3_direct_dl: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirStat` to measurement over DirPort - :var dict dir_v2_direct_dl_unknown: mapping of unrecognized stats to their measurement - :var dict dir_v3_direct_dl_unknown: mapping of unrecognized stats to their measurement - - :var dict dir_v2_tunneled_dl: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirStat` to measurement over ORPort - :var dict dir_v3_tunneled_dl: mapping of :data:`~stem.descriptor.extrainfo_descriptor.DirStat` to measurement over ORPort - :var dict dir_v2_tunneled_dl_unknown: mapping of unrecognized stats to their measurement - :var dict dir_v3_tunneled_dl_unknown: mapping of unrecognized stats to their measurement - - **Bytes read/written for directory mirroring:** - - :var datetime dir_read_history_end: end of the sampling interval - :var int dir_read_history_interval: seconds per interval - :var list dir_read_history_values: bytes read during each interval - - :var datetime dir_write_history_end: end of the sampling interval - :var int dir_write_history_interval: seconds per interval - :var list dir_write_history_values: bytes read during each interval - - **Guard Attributes:** - - :var datetime entry_stats_end: end of the period when stats were gathered - :var int entry_stats_interval: length in seconds of the interval - :var dict entry_ips: mapping of locales to rounded count of unique user ips - - **Exit Attributes:** - - :var datetime exit_stats_end: end of the period when stats were gathered - :var int exit_stats_interval: length in seconds of the interval - :var dict exit_kibibytes_written: traffic per port (keys are ints or 'other') - :var dict exit_kibibytes_read: traffic per port (keys are ints or 'other') - :var dict exit_streams_opened: streams per port (keys are ints or 'other') - - **Hidden Service Attributes:** - - :var datetime hs_stats_end: end of the sampling interval - :var int hs_rend_cells: rounded count of the RENDEZVOUS1 cells seen - :var int hs_rend_cells_attr: **\\*** attributes provided for the hs_rend_cells - :var int hs_dir_onions_seen: rounded count of the identities seen - :var int hs_dir_onions_seen_attr: **\\*** attributes provided for the hs_dir_onions_seen - - **Padding Count Attributes:** - - :var dict padding_counts: **\\*** padding parameters - :var datetime padding_counts_end: end of the period when padding data is being collected - :var int padding_counts_interval: length in seconds of the interval - - **Bridge Attributes:** - - :var datetime bridge_stats_end: end of the period when stats were gathered - :var int bridge_stats_interval: length in seconds of the interval - :var dict bridge_ips: mapping of locales to rounded count of unique user ips - :var datetime geoip_start_time: replaced by bridge_stats_end (deprecated) - :var dict geoip_client_origins: replaced by bridge_ips (deprecated) - :var dict ip_versions: mapping of ip protocols to a rounded count for the number of users - :var dict ip_versions: mapping of ip transports to a count for the number of users - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - - .. versionchanged:: 1.4.0 - Added the hs_stats_end, hs_rend_cells, hs_rend_cells_attr, - hs_dir_onions_seen, and hs_dir_onions_seen_attr attributes. - - .. versionchanged:: 1.6.0 - Added the padding_counts, padding_counts_end, and padding_counts_interval - attributes. - """ - - ATTRIBUTES = { - 'nickname': (None, _parse_extra_info_line), - 'fingerprint': (None, _parse_extra_info_line), - 'published': (None, _parse_published_line), - 'geoip_db_digest': (None, _parse_geoip_db_digest_line), - 'geoip6_db_digest': (None, _parse_geoip6_db_digest_line), - 'transport': ({}, _parse_transport_line), - - 'conn_bi_direct_end': (None, _parse_conn_bi_direct_line), - 'conn_bi_direct_interval': (None, _parse_conn_bi_direct_line), - 'conn_bi_direct_below': (None, _parse_conn_bi_direct_line), - 'conn_bi_direct_read': (None, _parse_conn_bi_direct_line), - 'conn_bi_direct_write': (None, _parse_conn_bi_direct_line), - 'conn_bi_direct_both': (None, _parse_conn_bi_direct_line), - - 'read_history_end': (None, _parse_read_history_line), - 'read_history_interval': (None, _parse_read_history_line), - 'read_history_values': (None, _parse_read_history_line), - - 'write_history_end': (None, _parse_write_history_line), - 'write_history_interval': (None, _parse_write_history_line), - 'write_history_values': (None, _parse_write_history_line), - - 'cell_stats_end': (None, _parse_cell_stats_end_line), - 'cell_stats_interval': (None, _parse_cell_stats_end_line), - 'cell_processed_cells': (None, _parse_cell_processed_cells_line), - 'cell_queued_cells': (None, _parse_cell_queued_cells_line), - 'cell_time_in_queue': (None, _parse_cell_time_in_queue_line), - 'cell_circuits_per_decile': (None, _parse_cell_circuits_per_decline_line), - - 'dir_stats_end': (None, _parse_dirreq_stats_end_line), - 'dir_stats_interval': (None, _parse_dirreq_stats_end_line), - 'dir_v2_ips': (None, _parse_dirreq_v2_ips_line), - 'dir_v3_ips': (None, _parse_dirreq_v3_ips_line), - 'dir_v2_share': (None, _parse_dirreq_v2_share_line), - 'dir_v3_share': (None, _parse_dirreq_v3_share_line), - 'dir_v2_requests': (None, _parse_dirreq_v2_reqs_line), - 'dir_v3_requests': (None, _parse_dirreq_v3_reqs_line), - 'dir_v2_responses': (None, _parse_dirreq_v2_resp_line), - 'dir_v3_responses': (None, _parse_dirreq_v3_resp_line), - 'dir_v2_responses_unknown': (None, _parse_dirreq_v2_resp_line), - 'dir_v3_responses_unknown': (None, _parse_dirreq_v3_resp_line), - 'dir_v2_direct_dl': (None, _parse_dirreq_v2_direct_dl_line), - 'dir_v3_direct_dl': (None, _parse_dirreq_v3_direct_dl_line), - 'dir_v2_direct_dl_unknown': (None, _parse_dirreq_v2_direct_dl_line), - 'dir_v3_direct_dl_unknown': (None, _parse_dirreq_v3_direct_dl_line), - 'dir_v2_tunneled_dl': (None, _parse_dirreq_v2_tunneled_dl_line), - 'dir_v3_tunneled_dl': (None, _parse_dirreq_v3_tunneled_dl_line), - 'dir_v2_tunneled_dl_unknown': (None, _parse_dirreq_v2_tunneled_dl_line), - 'dir_v3_tunneled_dl_unknown': (None, _parse_dirreq_v3_tunneled_dl_line), - - 'dir_read_history_end': (None, _parse_dirreq_read_history_line), - 'dir_read_history_interval': (None, _parse_dirreq_read_history_line), - 'dir_read_history_values': (None, _parse_dirreq_read_history_line), - - 'dir_write_history_end': (None, _parse_dirreq_write_history_line), - 'dir_write_history_interval': (None, _parse_dirreq_write_history_line), - 'dir_write_history_values': (None, _parse_dirreq_write_history_line), - - 'entry_stats_end': (None, _parse_entry_stats_end_line), - 'entry_stats_interval': (None, _parse_entry_stats_end_line), - 'entry_ips': (None, _parse_entry_ips_line), - - 'exit_stats_end': (None, _parse_exit_stats_end_line), - 'exit_stats_interval': (None, _parse_exit_stats_end_line), - 'exit_kibibytes_written': (None, _parse_exit_kibibytes_written_line), - 'exit_kibibytes_read': (None, _parse_exit_kibibytes_read_line), - 'exit_streams_opened': (None, _parse_exit_streams_opened_line), - - 'hs_stats_end': (None, _parse_hidden_service_stats_end_line), - 'hs_rend_cells': (None, _parse_hidden_service_rend_relayed_cells_line), - 'hs_rend_cells_attr': ({}, _parse_hidden_service_rend_relayed_cells_line), - 'hs_dir_onions_seen': (None, _parse_hidden_service_dir_onions_seen_line), - 'hs_dir_onions_seen_attr': ({}, _parse_hidden_service_dir_onions_seen_line), - - 'padding_counts': ({}, _parse_padding_counts_line), - 'padding_counts_end': (None, _parse_padding_counts_line), - 'padding_counts_interval': (None, _parse_padding_counts_line), - - 'bridge_stats_end': (None, _parse_bridge_stats_end_line), - 'bridge_stats_interval': (None, _parse_bridge_stats_end_line), - 'bridge_ips': (None, _parse_bridge_ips_line), - 'geoip_start_time': (None, _parse_geoip_start_time_line), - 'geoip_client_origins': (None, _parse_geoip_client_origins_line), - - 'ip_versions': (None, _parse_bridge_ip_versions_line), - 'ip_transports': (None, _parse_bridge_ip_transports_line), - } - - PARSER_FOR_LINE = { - 'extra-info': _parse_extra_info_line, - 'geoip-db-digest': _parse_geoip_db_digest_line, - 'geoip6-db-digest': _parse_geoip6_db_digest_line, - 'transport': _parse_transport_line, - 'cell-circuits-per-decile': _parse_cell_circuits_per_decline_line, - 'dirreq-v2-resp': _parse_dirreq_v2_resp_line, - 'dirreq-v3-resp': _parse_dirreq_v3_resp_line, - 'dirreq-v2-direct-dl': _parse_dirreq_v2_direct_dl_line, - 'dirreq-v3-direct-dl': _parse_dirreq_v3_direct_dl_line, - 'dirreq-v2-tunneled-dl': _parse_dirreq_v2_tunneled_dl_line, - 'dirreq-v3-tunneled-dl': _parse_dirreq_v3_tunneled_dl_line, - 'dirreq-v2-share': _parse_dirreq_v2_share_line, - 'dirreq-v3-share': _parse_dirreq_v3_share_line, - 'cell-processed-cells': _parse_cell_processed_cells_line, - 'cell-queued-cells': _parse_cell_queued_cells_line, - 'cell-time-in-queue': _parse_cell_time_in_queue_line, - 'published': _parse_published_line, - 'geoip-start-time': _parse_geoip_start_time_line, - 'cell-stats-end': _parse_cell_stats_end_line, - 'entry-stats-end': _parse_entry_stats_end_line, - 'exit-stats-end': _parse_exit_stats_end_line, - 'bridge-stats-end': _parse_bridge_stats_end_line, - 'dirreq-stats-end': _parse_dirreq_stats_end_line, - 'conn-bi-direct': _parse_conn_bi_direct_line, - 'read-history': _parse_read_history_line, - 'write-history': _parse_write_history_line, - 'dirreq-read-history': _parse_dirreq_read_history_line, - 'dirreq-write-history': _parse_dirreq_write_history_line, - 'exit-kibibytes-written': _parse_exit_kibibytes_written_line, - 'exit-kibibytes-read': _parse_exit_kibibytes_read_line, - 'exit-streams-opened': _parse_exit_streams_opened_line, - 'hidserv-stats-end': _parse_hidden_service_stats_end_line, - 'hidserv-rend-relayed-cells': _parse_hidden_service_rend_relayed_cells_line, - 'hidserv-dir-onions-seen': _parse_hidden_service_dir_onions_seen_line, - 'padding-counts': _parse_padding_counts_line, - 'dirreq-v2-ips': _parse_dirreq_v2_ips_line, - 'dirreq-v3-ips': _parse_dirreq_v3_ips_line, - 'dirreq-v2-reqs': _parse_dirreq_v2_reqs_line, - 'dirreq-v3-reqs': _parse_dirreq_v3_reqs_line, - 'geoip-client-origins': _parse_geoip_client_origins_line, - 'entry-ips': _parse_entry_ips_line, - 'bridge-ips': _parse_bridge_ips_line, - 'bridge-ip-versions': _parse_bridge_ip_versions_line, - 'bridge-ip-transports': _parse_bridge_ip_transports_line, - } - - def __init__(self, raw_contents, validate = False): - """ - Extra-info descriptor constructor. By default this validates the - descriptor's content as it's parsed. This validation can be disabled to - either improve performance or be accepting of malformed data. - - :param str raw_contents: extra-info content provided by the relay - :param bool validate: checks the validity of the extra-info descriptor if - **True**, skips these checks otherwise - - :raises: **ValueError** if the contents is malformed and validate is True - """ - - super(ExtraInfoDescriptor, self).__init__(raw_contents, lazy_load = not validate) - entries = _descriptor_components(raw_contents, validate) - - if validate: - for keyword in self._required_fields(): - if keyword not in entries: - raise ValueError("Extra-info descriptor must have a '%s' entry" % keyword) - - for keyword in self._required_fields() + SINGLE_FIELDS: - if keyword in entries and len(entries[keyword]) > 1: - raise ValueError("The '%s' entry can only appear once in an extra-info descriptor" % keyword) - - expected_first_keyword = self._first_keyword() - if expected_first_keyword and expected_first_keyword != list(entries.keys())[0]: - raise ValueError("Extra-info descriptor must start with a '%s' entry" % expected_first_keyword) - - expected_last_keyword = self._last_keyword() - if expected_last_keyword and expected_last_keyword != list(entries.keys())[-1]: - raise ValueError("Descriptor must end with a '%s' entry" % expected_last_keyword) - - self._parse(entries, validate) - else: - self._entries = entries - - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - """ - Digest of this descriptor's content. These are referenced by... - - * **Server Descriptors** - - * Referer: :class:`~stem.descriptor.server_descriptor.ServerDescriptor` **extra_info_digest** attribute - * Format: **SHA1/HEX** - - * **Server Descriptors** - - * Referer: :class:`~stem.descriptor.server_descriptor.ServerDescriptor` **extra_info_sha256_digest** attribute - * Format: **SHA256/BASE64** - - .. versionchanged:: 1.8.0 - Added the hash_type and encoding arguments. - - :param stem.descriptor.DigestHash hash_type: digest hashing algorithm - :param stem.descriptor.DigestEncoding encoding: digest encoding - - :returns: **hashlib.HASH** or **str** based on our encoding argument - """ - - raise NotImplementedError('Unsupported Operation: this should be implemented by the ExtraInfoDescriptor subclass') - - def _required_fields(self): - return REQUIRED_FIELDS - - def _first_keyword(self): - return 'extra-info' - - def _last_keyword(self): - return 'router-signature' - - -class RelayExtraInfoDescriptor(ExtraInfoDescriptor): - """ - Relay extra-info descriptor, constructed from data such as that provided by - 'GETINFO extra-info/digest/\\*', cached descriptors, and metrics - (`specification `_). - - :var ed25519_certificate str: base64 encoded ed25519 certificate - :var ed25519_signature str: signature of this document using ed25519 - :var str signature: **\\*** signature for this extrainfo descriptor - - **\\*** attribute is required when we're parsed with validation - - .. versionchanged:: 1.5.0 - Added the ed25519_certificate and ed25519_signature attributes. - """ - - TYPE_ANNOTATION_NAME = 'extra-info' - - ATTRIBUTES = dict(ExtraInfoDescriptor.ATTRIBUTES, **{ - 'ed25519_certificate': (None, _parse_identity_ed25519_line), - 'ed25519_signature': (None, _parse_router_sig_ed25519_line), - 'signature': (None, _parse_router_signature_line), - }) - - PARSER_FOR_LINE = dict(ExtraInfoDescriptor.PARSER_FOR_LINE, **{ - 'identity-ed25519': _parse_identity_ed25519_line, - 'router-sig-ed25519': _parse_router_sig_ed25519_line, - 'router-signature': _parse_router_signature_line, - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, signing_key = None): - base_header = ( - ('extra-info', '%s %s' % (_random_nickname(), _random_fingerprint())), - ('published', _random_date()), - ) - - if signing_key: - sign = True - - if sign: - if attr and 'router-signature' in attr: - raise ValueError('Cannot sign the descriptor if a router-signature has been provided') - - if signing_key is None: - signing_key = create_signing_key() - - content = _descriptor_content(attr, exclude, base_header) + b'\nrouter-signature\n' - return _append_router_signature(content, signing_key.private) - else: - return _descriptor_content(attr, exclude, base_header, ( - ('router-signature', _random_crypto_blob('SIGNATURE')), - )) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, signing_key = None): - return cls(cls.content(attr, exclude, sign, signing_key), validate = validate) - - @lru_cache() - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - if hash_type == DigestHash.SHA1: - # our digest is calculated from everything except our signature - - content = self._content_range(end = '\nrouter-signature\n') - return stem.descriptor._encode_digest(hashlib.sha1(content), encoding) - elif hash_type == DigestHash.SHA256: - # Due to a tor bug sha256 digests are calculated from the - # whole descriptor rather than ommiting the signature... - # - # https://trac.torproject.org/projects/tor/ticket/28415 - - return stem.descriptor._encode_digest(hashlib.sha256(self.get_bytes()), encoding) - else: - raise NotImplementedError('Extrainfo descriptor digests are only available in sha1 and sha256, not %s' % hash_type) - - -class BridgeExtraInfoDescriptor(ExtraInfoDescriptor): - """ - Bridge extra-info descriptor (`bridge descriptor specification - `_) - - :var str ed25519_certificate_hash: sha256 hash of the original identity-ed25519 - :var str router_digest_sha256: sha256 digest of this document - - .. versionchanged:: 1.5.0 - Added the ed25519_certificate_hash and router_digest_sha256 attributes. - """ - - TYPE_ANNOTATION_NAME = 'bridge-extra-info' - - ATTRIBUTES = dict(ExtraInfoDescriptor.ATTRIBUTES, **{ - 'ed25519_certificate_hash': (None, _parse_master_key_ed25519_line), - 'router_digest_sha256': (None, _parse_router_digest_sha256_line), - '_digest': (None, _parse_router_digest_line), - }) - - PARSER_FOR_LINE = dict(ExtraInfoDescriptor.PARSER_FOR_LINE, **{ - 'master-key-ed25519': _parse_master_key_ed25519_line, - 'router-digest-sha256': _parse_router_digest_sha256_line, - 'router-digest': _parse_router_digest_line, - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('extra-info', 'ec2bridgereaac65a3 %s' % _random_fingerprint()), - ('published', _random_date()), - ), ( - ('router-digest', _random_fingerprint()), - )) - - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - if hash_type == DigestHash.SHA1 and encoding == DigestEncoding.HEX: - return self._digest - elif hash_type == DigestHash.SHA256 and encoding == DigestEncoding.BASE64: - return self.router_digest_sha256 - else: - raise NotImplementedError('Bridge extrainfo digests are only available as sha1/hex and sha256/base64, not %s/%s' % (hash_type, encoding)) - - def _required_fields(self): - excluded_fields = [ - 'router-signature', - ] - - included_fields = [ - 'router-digest', - ] - - return tuple(included_fields + [f for f in REQUIRED_FIELDS if f not in excluded_fields]) - - def _last_keyword(self): - return None diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service.py b/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service.py deleted file mode 100644 index c65fd5f..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service.py +++ /dev/null @@ -1,1399 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Tor hidden service descriptors as described in Tor's `version 2 -`_ and -`version 3 `_ -rend-spec. - -Unlike other descriptor types these describe a hidden service rather than a -relay. They're created by the service, and can only be fetched via relays with -the HSDir flag. - -These are only available through the Controller's -:func:`~stem.control.Controller.get_hidden_service_descriptor` method. - -**Module Overview:** - -:: - - BaseHiddenServiceDescriptor - Common parent for hidden service descriptors - |- HiddenServiceDescriptorV2 - Version 2 hidden service descriptor - +- HiddenServiceDescriptorV3 - Version 3 hidden service descriptor - |- address_from_identity_key - convert an identity key to address - |- identity_key_from_address - convert an address to identity key - +- decrypt - decrypt and parse encrypted layers - - OuterLayer - First encrypted layer of a hidden service v3 descriptor - InnerLayer - Second encrypted layer of a hidden service v3 descriptor - -.. versionadded:: 1.4.0 -""" - -import base64 -import binascii -import collections -import datetime -import hashlib -import io -import os -import struct -import time - -import stem.client.datatype -import stem.descriptor.certificate -import stem.prereq -import stem.util -import stem.util.connection -import stem.util.str_tools -import stem.util.tor_tools - -from stem.client.datatype import CertType -from stem.descriptor.certificate import ExtensionType, Ed25519Extension, Ed25519Certificate, Ed25519CertificateV1 - -from stem.descriptor import ( - PGP_BLOCK_END, - Descriptor, - _descriptor_content, - _descriptor_components, - _read_until_keywords, - _bytes_for_block, - _value, - _values, - _parse_simple_line, - _parse_if_present, - _parse_int_line, - _parse_timestamp_line, - _parse_key_block, - _random_date, - _random_crypto_blob, -) - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -try: - from cryptography.hazmat.backends.openssl.backend import backend - X25519_AVAILABLE = hasattr(backend, 'x25519_supported') and backend.x25519_supported() -except ImportError: - X25519_AVAILABLE = False - - -REQUIRED_V2_FIELDS = ( - 'rendezvous-service-descriptor', - 'version', - 'permanent-key', - 'secret-id-part', - 'publication-time', - 'protocol-versions', - 'signature', -) - -REQUIRED_V3_FIELDS = ( - 'hs-descriptor', - 'descriptor-lifetime', - 'descriptor-signing-key-cert', - 'revision-counter', - 'superencrypted', - 'signature', -) - -INTRODUCTION_POINTS_ATTR = { - 'identifier': None, - 'address': None, - 'port': None, - 'onion_key': None, - 'service_key': None, - 'intro_authentication': [], -} - -# introduction-point fields that can only appear once - -SINGLE_INTRODUCTION_POINT_FIELDS = [ - 'introduction-point', - 'ip-address', - 'onion-port', - 'onion-key', - 'service-key', -] - -BASIC_AUTH = 1 -STEALTH_AUTH = 2 -CHECKSUM_CONSTANT = b'.onion checksum' - -SALT_LEN = 16 -MAC_LEN = 32 - -S_KEY_LEN = 32 -S_IV_LEN = 16 - - -class DecryptionFailure(Exception): - """ - Failure to decrypt the hidden service descriptor's introduction-points. - """ - - -# TODO: rename in stem 2.x (add 'V2' and drop plural) - -class IntroductionPoints(collections.namedtuple('IntroductionPoints', INTRODUCTION_POINTS_ATTR.keys())): - """ - Introduction point for a v2 hidden service. - - :var str identifier: hash of this introduction point's identity key - :var str address: address of this introduction point - :var int port: port where this introduction point is listening - :var str onion_key: public key for communicating with this introduction point - :var str service_key: public key for communicating with this hidden service - :var list intro_authentication: tuples of the form (auth_type, auth_data) for - establishing a connection - """ - - -class IntroductionPointV3(collections.namedtuple('IntroductionPointV3', ['link_specifiers', 'onion_key_raw', 'auth_key_cert', 'enc_key_raw', 'enc_key_cert', 'legacy_key_raw', 'legacy_key_cert'])): - """ - Introduction point for a v3 hidden service. - - .. versionadded:: 1.8.0 - - :var list link_specifiers: :class:`~stem.client.datatype.LinkSpecifier` where this service is reachable - :var unicode onion_key_raw: base64 ntor introduction point public key - :var stem.descriptor.certificate.Ed25519Certificate auth_key_cert: cross-certifier of the signing key with the auth key - :var unicode enc_key_raw: base64 introduction request encryption key - :var stem.descriptor.certificate.Ed25519Certificate enc_key_cert: cross-certifier of the signing key by the encryption key - :var str legacy_key_raw: base64 legacy introduction point RSA public key - :var str legacy_key_cert: base64 cross-certifier of the signing key by the legacy key - """ - - @staticmethod - def parse(content): - """ - Parses an introduction point from its descriptor content. - - :param str content: descriptor content to parse - - :returns: :class:`~stem.descriptor.hidden_service.IntroductionPointV3` for the descriptor content - - :raises: **ValueError** if descriptor content is malformed - """ - - entry = _descriptor_components(content, False) - link_specifiers = IntroductionPointV3._parse_link_specifiers(_value('introduction-point', entry)) - - onion_key_line = _value('onion-key', entry) - onion_key = onion_key_line[5:] if onion_key_line.startswith('ntor ') else None - - _, block_type, auth_key_cert = entry['auth-key'][0] - auth_key_cert = Ed25519Certificate.from_base64(auth_key_cert) - - if block_type != 'ED25519 CERT': - raise ValueError('Expected auth-key to have an ed25519 certificate, but was %s' % block_type) - - enc_key_line = _value('enc-key', entry) - enc_key = enc_key_line[5:] if enc_key_line.startswith('ntor ') else None - - _, block_type, enc_key_cert = entry['enc-key-cert'][0] - enc_key_cert = Ed25519Certificate.from_base64(enc_key_cert) - - if block_type != 'ED25519 CERT': - raise ValueError('Expected enc-key-cert to have an ed25519 certificate, but was %s' % block_type) - - legacy_key = entry['legacy-key'][0][2] if 'legacy-key' in entry else None - legacy_key_cert = entry['legacy-key-cert'][0][2] if 'legacy-key-cert' in entry else None - - return IntroductionPointV3(link_specifiers, onion_key, auth_key_cert, enc_key, enc_key_cert, legacy_key, legacy_key_cert) - - @staticmethod - def create_for_address(address, port, expiration = None, onion_key = None, enc_key = None, auth_key = None, signing_key = None): - """ - Simplified constructor for a single address/port link specifier. - - :param str address: IPv4 or IPv6 address where the service is reachable - :param int port: port where the service is reachable - :param datetime.datetime expiration: when certificates should expire - :param str onion_key: encoded, X25519PublicKey, or X25519PrivateKey onion key - :param str enc_key: encoded, X25519PublicKey, or X25519PrivateKey encryption key - :param str auth_key: encoded, Ed25519PublicKey, or Ed25519PrivateKey authentication key - :param cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey signing_key: service signing key - - :returns: :class:`~stem.descriptor.hidden_service.IntroductionPointV3` with these attributes - - :raises: **ValueError** if the address, port, or keys are malformed - """ - - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Introduction point creation requires the cryptography module ed25519 support') - elif not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' is an invalid port" % port) - - if stem.util.connection.is_valid_ipv4_address(address): - link_specifiers = [stem.client.datatype.LinkByIPv4(address, port)] - elif stem.util.connection.is_valid_ipv6_address(address): - link_specifiers = [stem.client.datatype.LinkByIPv6(address, port)] - else: - raise ValueError("'%s' is not a valid IPv4 or IPv6 address" % address) - - return IntroductionPointV3.create_for_link_specifiers(link_specifiers, expiration = None, onion_key = None, enc_key = None, auth_key = None, signing_key = None) - - @staticmethod - def create_for_link_specifiers(link_specifiers, expiration = None, onion_key = None, enc_key = None, auth_key = None, signing_key = None): - """ - Simplified constructor. For more sophisticated use cases you can use this - as a template for how introduction points are properly created. - - :param list link_specifiers: series of stem.client.datatype.LinkSpecifier where the service is reachable - :param datetime.datetime expiration: when certificates should expire - :param str onion_key: encoded, X25519PublicKey, or X25519PrivateKey onion key - :param str enc_key: encoded, X25519PublicKey, or X25519PrivateKey encryption key - :param str auth_key: encoded, Ed25519PublicKey, or Ed25519PrivateKey authentication key - :param cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey signing_key: service signing key - - :returns: :class:`~stem.descriptor.hidden_service.IntroductionPointV3` with these attributes - - :raises: **ValueError** if the address, port, or keys are malformed - """ - - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Introduction point creation requires the cryptography module ed25519 support') - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey - from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey - - if expiration is None: - expiration = datetime.datetime.utcnow() + datetime.timedelta(hours = stem.descriptor.certificate.DEFAULT_EXPIRATION_HOURS) - - onion_key = stem.util.str_tools._to_unicode(base64.b64encode(stem.util._pubkey_bytes(onion_key if onion_key else X25519PrivateKey.generate()))) - enc_key = stem.util.str_tools._to_unicode(base64.b64encode(stem.util._pubkey_bytes(enc_key if enc_key else X25519PrivateKey.generate()))) - auth_key = stem.util._pubkey_bytes(auth_key if auth_key else Ed25519PrivateKey.generate()) - signing_key = signing_key if signing_key else Ed25519PrivateKey.generate() - - extensions = [Ed25519Extension(ExtensionType.HAS_SIGNING_KEY, None, stem.util._pubkey_bytes(signing_key))] - auth_key_cert = Ed25519CertificateV1(CertType.HS_V3_INTRO_AUTH, expiration, 1, auth_key, extensions, signing_key = signing_key) - enc_key_cert = Ed25519CertificateV1(CertType.HS_V3_NTOR_ENC, expiration, 1, auth_key, extensions, signing_key = signing_key) - - return IntroductionPointV3(link_specifiers, onion_key, auth_key_cert, enc_key, enc_key_cert, None, None) - - def encode(self): - """ - Descriptor representation of this introduction point. - - :returns: **str** for our descriptor representation - """ - - lines = [] - - link_count = stem.client.datatype.Size.CHAR.pack(len(self.link_specifiers)) - link_specifiers = link_count + b''.join([link.pack() for link in self.link_specifiers]) - lines.append('introduction-point %s' % stem.util.str_tools._to_unicode(base64.b64encode(link_specifiers))) - lines.append('onion-key ntor %s' % self.onion_key_raw) - lines.append('auth-key\n' + self.auth_key_cert.to_base64(pem = True)) - - if self.enc_key_raw: - lines.append('enc-key ntor %s' % self.enc_key_raw) - - lines.append('enc-key-cert\n' + self.enc_key_cert.to_base64(pem = True)) - - if self.legacy_key_raw: - lines.append('legacy-key\n' + self.legacy_key_raw) - - if self.legacy_key_cert: - lines.append('legacy-key-cert\n' + self.legacy_key_cert) - - return '\n'.join(lines) - - def onion_key(self): - """ - Provides our ntor introduction point public key. - - :returns: ntor :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey` - - :raises: - * **ImportError** if required the cryptography module is unavailable - * **EnvironmentError** if OpenSSL x25519 unsupported - """ - - return IntroductionPointV3._key_as(self.onion_key_raw, x25519 = True) - - def auth_key(self): - """ - Provides our authentication certificate's public key. - - :returns: :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` - - :raises: - * **ImportError** if required the cryptography module is unavailable - * **EnvironmentError** if OpenSSL x25519 unsupported - """ - - return IntroductionPointV3._key_as(self.auth_key_cert.key, ed25519 = True) - - def enc_key(self): - """ - Provides our encryption key. - - :returns: encryption :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey` - - :raises: - * **ImportError** if required the cryptography module is unavailable - * **EnvironmentError** if OpenSSL x25519 unsupported - """ - - return IntroductionPointV3._key_as(self.enc_key_raw, x25519 = True) - - def legacy_key(self): - """ - Provides our legacy introduction point public key. - - :returns: legacy :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey` - - :raises: - * **ImportError** if required the cryptography module is unavailable - * **EnvironmentError** if OpenSSL x25519 unsupported - """ - - return IntroductionPointV3._key_as(self.legacy_key_raw, x25519 = True) - - @staticmethod - def _key_as(value, x25519 = False, ed25519 = False): - if value is None or (not x25519 and not ed25519): - return value - elif not stem.prereq.is_crypto_available(): - raise ImportError('cryptography module unavailable') - - if x25519: - if not X25519_AVAILABLE: - # without this the cryptography raises... - # cryptography.exceptions.UnsupportedAlgorithm: X25519 is not supported by this version of OpenSSL. - - raise EnvironmentError('OpenSSL x25519 unsupported') - - from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PublicKey - return X25519PublicKey.from_public_bytes(base64.b64decode(value)) - - if ed25519: - if not stem.prereq.is_crypto_available(ed25519 = True): - raise EnvironmentError('cryptography ed25519 unsupported') - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey - return Ed25519PublicKey.from_public_bytes(value) - - @staticmethod - def _parse_link_specifiers(content): - try: - content = base64.b64decode(content) - except Exception as exc: - raise ValueError('Unable to base64 decode introduction point (%s): %s' % (exc, content)) - - link_specifiers = [] - count, content = stem.client.datatype.Size.CHAR.pop(content) - - for i in range(count): - link_specifier, content = stem.client.datatype.LinkSpecifier.pop(content) - link_specifiers.append(link_specifier) - - if content: - raise ValueError('Introduction point had excessive data (%s)' % content) - - return link_specifiers - - def __hash__(self): - if not hasattr(self, '_hash'): - self._hash = hash(self.encode()) - - return self._hash - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, IntroductionPointV3) else False - - def __ne__(self, other): - return not self == other - - -class AuthorizedClient(object): - """ - Client authorized to use a v3 hidden service. - - .. versionadded:: 1.8.0 - - :var str id: base64 encoded client id - :var str iv: base64 encoded randomized initialization vector - :var str cookie: base64 encoded authentication cookie - """ - - def __init__(self, id = None, iv = None, cookie = None): - self.id = stem.util.str_tools._to_unicode(id if id else base64.b64encode(os.urandom(8)).rstrip(b'=')) - self.iv = stem.util.str_tools._to_unicode(iv if iv else base64.b64encode(os.urandom(16)).rstrip(b'=')) - self.cookie = stem.util.str_tools._to_unicode(cookie if cookie else base64.b64encode(os.urandom(16)).rstrip(b'=')) - - def __hash__(self): - return stem.util._hash_attr(self, 'id', 'iv', 'cookie', cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, AuthorizedClient) else False - - def __ne__(self, other): - return not self == other - - -def _parse_file(descriptor_file, desc_type = None, validate = False, **kwargs): - """ - Iterates over the hidden service descriptors in a file. - - :param file descriptor_file: file with descriptor content - :param class desc_type: BaseHiddenServiceDescriptor subclass - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: iterator for :class:`~stem.descriptor.hidden_service.HiddenServiceDescriptorV2` - instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is **True** - * **IOError** if the file can't be read - """ - - if desc_type is None: - desc_type = HiddenServiceDescriptorV2 - - # Hidden service v3 ends with a signature line, whereas v2 has a pgp style - # block following it. - - while True: - descriptor_content = _read_until_keywords('signature', descriptor_file, True) - - if desc_type == HiddenServiceDescriptorV2: - block_end_prefix = PGP_BLOCK_END.split(' ', 1)[0] - descriptor_content += _read_until_keywords(block_end_prefix, descriptor_file, True) - - if descriptor_content: - if descriptor_content[0].startswith(b'@type'): - descriptor_content = descriptor_content[1:] - - yield desc_type(bytes.join(b'', descriptor_content), validate, **kwargs) - else: - break # done parsing file - - -def _decrypt_layer(encrypted_block, constant, revision_counter, subcredential, blinded_key): - if encrypted_block.startswith('-----BEGIN MESSAGE-----\n') and encrypted_block.endswith('\n-----END MESSAGE-----'): - encrypted_block = encrypted_block[24:-22] - - try: - encrypted = base64.b64decode(encrypted_block) - except: - raise ValueError('Unable to decode encrypted block as base64') - - if len(encrypted) < SALT_LEN + MAC_LEN: - raise ValueError('Encrypted block malformed (only %i bytes)' % len(encrypted)) - - salt = encrypted[:SALT_LEN] - ciphertext = encrypted[SALT_LEN:-MAC_LEN] - expected_mac = encrypted[-MAC_LEN:] - - cipher, mac_for = _layer_cipher(constant, revision_counter, subcredential, blinded_key, salt) - - if expected_mac != mac_for(ciphertext): - raise ValueError('Malformed mac (expected %s, but was %s)' % (expected_mac, mac_for(ciphertext))) - - decryptor = cipher.decryptor() - plaintext = decryptor.update(ciphertext) + decryptor.finalize() - - return stem.util.str_tools._to_unicode(plaintext) - - -def _encrypt_layer(plaintext, constant, revision_counter, subcredential, blinded_key): - salt = os.urandom(16) - cipher, mac_for = _layer_cipher(constant, revision_counter, subcredential, blinded_key, salt) - - encryptor = cipher.encryptor() - ciphertext = encryptor.update(plaintext) + encryptor.finalize() - encoded = base64.b64encode(salt + ciphertext + mac_for(ciphertext)) - - return b'-----BEGIN MESSAGE-----\n%s\n-----END MESSAGE-----' % b'\n'.join(stem.util.str_tools._split_by_length(encoded, 64)) - - -def _layer_cipher(constant, revision_counter, subcredential, blinded_key, salt): - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - from cryptography.hazmat.backends import default_backend - - kdf = hashlib.shake_256(blinded_key + subcredential + struct.pack('>Q', revision_counter) + salt + constant) - keys = kdf.digest(S_KEY_LEN + S_IV_LEN + MAC_LEN) - - secret_key = keys[:S_KEY_LEN] - secret_iv = keys[S_KEY_LEN:S_KEY_LEN + S_IV_LEN] - mac_key = keys[S_KEY_LEN + S_IV_LEN:] - - cipher = Cipher(algorithms.AES(secret_key), modes.CTR(secret_iv), default_backend()) - mac_prefix = struct.pack('>Q', len(mac_key)) + mac_key + struct.pack('>Q', len(salt)) + salt - - return cipher, lambda ciphertext: hashlib.sha3_256(mac_prefix + ciphertext).digest() - - -def _parse_protocol_versions_line(descriptor, entries): - value = _value('protocol-versions', entries) - - try: - versions = [int(entry) for entry in value.split(',')] - except ValueError: - raise ValueError('protocol-versions line has non-numeric versoins: protocol-versions %s' % value) - - for v in versions: - if v <= 0: - raise ValueError('protocol-versions must be positive integers: %s' % value) - - descriptor.protocol_versions = versions - - -def _parse_introduction_points_line(descriptor, entries): - _, block_type, block_contents = entries['introduction-points'][0] - - if not block_contents or block_type != 'MESSAGE': - raise ValueError("'introduction-points' should be followed by a MESSAGE block, but was a %s" % block_type) - - descriptor.introduction_points_encoded = block_contents - descriptor.introduction_points_auth = [] # field was never implemented in tor (#15190) - - try: - descriptor.introduction_points_content = _bytes_for_block(block_contents) - except TypeError: - raise ValueError("'introduction-points' isn't base64 encoded content:\n%s" % block_contents) - - -def _parse_v3_outer_clients(descriptor, entries): - # "auth-client" client-id iv encrypted-cookie - - clients = {} - - for value in _values('auth-client', entries): - value_comp = value.split() - - if len(value_comp) < 3: - raise ValueError('auth-client should have a client-id, iv, and cookie: auth-client %s' % value) - - clients[value_comp[0]] = AuthorizedClient(value_comp[0], value_comp[1], value_comp[2]) - - descriptor.clients = clients - - -def _parse_v3_inner_formats(descriptor, entries): - value, formats = _value('create2-formats', entries), [] - - for entry in value.split(' '): - if not entry.isdigit(): - raise ValueError("create2-formats should only contain integers, but was '%s'" % value) - - formats.append(int(entry)) - - descriptor.formats = formats - - -def _parse_v3_introduction_points(descriptor, entries): - if hasattr(descriptor, '_unparsed_introduction_points'): - introduction_points = [] - remaining = descriptor._unparsed_introduction_points - - while remaining: - div = remaining.find(b'\nintroduction-point ', 10) - content, remaining = (remaining[:div], remaining[div + 1:]) if div != -1 else (remaining, '') - - introduction_points.append(IntroductionPointV3.parse(content)) - - descriptor.introduction_points = introduction_points - del descriptor._unparsed_introduction_points - - -_parse_v2_version_line = _parse_int_line('version', 'version', allow_negative = False) -_parse_rendezvous_service_descriptor_line = _parse_simple_line('rendezvous-service-descriptor', 'descriptor_id') -_parse_permanent_key_line = _parse_key_block('permanent-key', 'permanent_key', 'RSA PUBLIC KEY') -_parse_secret_id_part_line = _parse_simple_line('secret-id-part', 'secret_id_part') -_parse_publication_time_line = _parse_timestamp_line('publication-time', 'published') -_parse_v2_signature_line = _parse_key_block('signature', 'signature', 'SIGNATURE') - -_parse_v3_version_line = _parse_int_line('hs-descriptor', 'version', allow_negative = False) -_parse_lifetime_line = _parse_int_line('descriptor-lifetime', 'lifetime', allow_negative = False) -_parse_signing_cert = Ed25519Certificate._from_descriptor('descriptor-signing-key-cert', 'signing_cert') -_parse_revision_counter_line = _parse_int_line('revision-counter', 'revision_counter', allow_negative = False) -_parse_superencrypted_line = _parse_key_block('superencrypted', 'superencrypted', 'MESSAGE') -_parse_v3_signature_line = _parse_simple_line('signature', 'signature') - -_parse_v3_outer_auth_type = _parse_simple_line('desc-auth-type', 'auth_type') -_parse_v3_outer_ephemeral_key = _parse_simple_line('desc-auth-ephemeral-key', 'ephemeral_key') -_parse_v3_outer_encrypted = _parse_key_block('encrypted', 'encrypted', 'MESSAGE') - -_parse_v3_inner_intro_auth = _parse_simple_line('intro-auth-required', 'intro_auth', func = lambda v: v.split(' ')) -_parse_v3_inner_single_service = _parse_if_present('single-onion-service', 'is_single_service') - - -class BaseHiddenServiceDescriptor(Descriptor): - """ - Hidden service descriptor. - - .. versionadded:: 1.8.0 - """ - - # TODO: rename this class to HiddenServiceDescriptor in stem 2.x - - -class HiddenServiceDescriptorV2(BaseHiddenServiceDescriptor): - """ - Version 2 hidden service descriptor. - - :var str descriptor_id: **\\*** identifier for this descriptor, this is a base32 hash of several fields - :var int version: **\\*** hidden service descriptor version - :var str permanent_key: **\\*** long term key of the hidden service - :var str secret_id_part: **\\*** hash of the time period, cookie, and replica - values so our descriptor_id can be validated - :var datetime published: **\\*** time in UTC when this descriptor was made - :var list protocol_versions: **\\*** list of **int** versions that are supported when establishing a connection - :var str introduction_points_encoded: raw introduction points blob - :var list introduction_points_auth: **\\*** tuples of the form - (auth_method, auth_data) for our introduction_points_content - (**deprecated**, always **[]**) - :var bytes introduction_points_content: decoded introduction-points content - without authentication data, if using cookie authentication this is - encrypted - :var str signature: signature of the descriptor content - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - - .. versionchanged:: 1.6.0 - Moved from the deprecated `pycrypto - `_ module to `cryptography - `_ for validating signatures. - - .. versionchanged:: 1.6.0 - Added the **skip_crypto_validation** constructor argument. - """ - - TYPE_ANNOTATION_NAME = 'hidden-service-descriptor' - - ATTRIBUTES = { - 'descriptor_id': (None, _parse_rendezvous_service_descriptor_line), - 'version': (None, _parse_v2_version_line), - 'permanent_key': (None, _parse_permanent_key_line), - 'secret_id_part': (None, _parse_secret_id_part_line), - 'published': (None, _parse_publication_time_line), - 'protocol_versions': ([], _parse_protocol_versions_line), - 'introduction_points_encoded': (None, _parse_introduction_points_line), - 'introduction_points_auth': ([], _parse_introduction_points_line), - 'introduction_points_content': (None, _parse_introduction_points_line), - 'signature': (None, _parse_v2_signature_line), - } - - PARSER_FOR_LINE = { - 'rendezvous-service-descriptor': _parse_rendezvous_service_descriptor_line, - 'version': _parse_v2_version_line, - 'permanent-key': _parse_permanent_key_line, - 'secret-id-part': _parse_secret_id_part_line, - 'publication-time': _parse_publication_time_line, - 'protocol-versions': _parse_protocol_versions_line, - 'introduction-points': _parse_introduction_points_line, - 'signature': _parse_v2_signature_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('rendezvous-service-descriptor', 'y3olqqblqw2gbh6phimfuiroechjjafa'), - ('version', '2'), - ('permanent-key', _random_crypto_blob('RSA PUBLIC KEY')), - ('secret-id-part', 'e24kgecavwsznj7gpbktqsiwgvngsf4e'), - ('publication-time', _random_date()), - ('protocol-versions', '2,3'), - ('introduction-points', '\n-----BEGIN MESSAGE-----\n-----END MESSAGE-----'), - ), ( - ('signature', _random_crypto_blob('SIGNATURE')), - )) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False): - return cls(cls.content(attr, exclude, sign), validate = validate, skip_crypto_validation = not sign) - - def __init__(self, raw_contents, validate = False, skip_crypto_validation = False): - super(HiddenServiceDescriptorV2, self).__init__(raw_contents, lazy_load = not validate) - entries = _descriptor_components(raw_contents, validate, non_ascii_fields = ('introduction-points')) - - if validate: - for keyword in REQUIRED_V2_FIELDS: - if keyword not in entries: - raise ValueError("Hidden service descriptor must have a '%s' entry" % keyword) - elif keyword in entries and len(entries[keyword]) > 1: - raise ValueError("The '%s' entry can only appear once in a hidden service descriptor" % keyword) - - if 'rendezvous-service-descriptor' != list(entries.keys())[0]: - raise ValueError("Hidden service descriptor must start with a 'rendezvous-service-descriptor' entry") - elif 'signature' != list(entries.keys())[-1]: - raise ValueError("Hidden service descriptor must end with a 'signature' entry") - - self._parse(entries, validate) - - if not skip_crypto_validation and stem.prereq.is_crypto_available(): - signed_digest = self._digest_for_signature(self.permanent_key, self.signature) - digest_content = self._content_range('rendezvous-service-descriptor ', '\nsignature\n') - content_digest = hashlib.sha1(digest_content).hexdigest().upper() - - if signed_digest != content_digest: - raise ValueError('Decrypted digest does not match local digest (calculated: %s, local: %s)' % (signed_digest, content_digest)) - else: - self._entries = entries - - @lru_cache() - def introduction_points(self, authentication_cookie = None): - """ - Provided this service's introduction points. - - :returns: **list** of :class:`~stem.descriptor.hidden_service.IntroductionPoints` - - :raises: - * **ValueError** if the our introduction-points is malformed - * **DecryptionFailure** if unable to decrypt this field - """ - - content = self.introduction_points_content - - if not content: - return [] - elif authentication_cookie: - if not stem.prereq.is_crypto_available(): - raise DecryptionFailure('Decrypting introduction-points requires the cryptography module') - - try: - authentication_cookie = stem.util.str_tools._decode_b64(authentication_cookie) - except TypeError as exc: - raise DecryptionFailure('authentication_cookie must be a base64 encoded string (%s)' % exc) - - authentication_type = int(binascii.hexlify(content[0:1]), 16) - - if authentication_type == BASIC_AUTH: - content = HiddenServiceDescriptorV2._decrypt_basic_auth(content, authentication_cookie) - elif authentication_type == STEALTH_AUTH: - content = HiddenServiceDescriptorV2._decrypt_stealth_auth(content, authentication_cookie) - else: - raise DecryptionFailure("Unrecognized authentication type '%s', currently we only support basic auth (%s) and stealth auth (%s)" % (authentication_type, BASIC_AUTH, STEALTH_AUTH)) - - if not content.startswith(b'introduction-point '): - raise DecryptionFailure('Unable to decrypt the introduction-points, maybe this is the wrong key?') - elif not content.startswith(b'introduction-point '): - raise DecryptionFailure('introduction-points content is encrypted, you need to provide its authentication_cookie') - - return HiddenServiceDescriptorV2._parse_introduction_points(content) - - @staticmethod - def _decrypt_basic_auth(content, authentication_cookie): - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - from cryptography.hazmat.backends import default_backend - - try: - client_blocks = int(binascii.hexlify(content[1:2]), 16) - except ValueError: - raise DecryptionFailure("When using basic auth the content should start with a number of blocks but wasn't a hex digit: %s" % binascii.hexlify(content[1:2])) - - # parse the client id and encrypted session keys - - client_entries_length = client_blocks * 16 * 20 - client_entries = content[2:2 + client_entries_length] - client_keys = [(client_entries[i:i + 4], client_entries[i + 4:i + 20]) for i in range(0, client_entries_length, 4 + 16)] - - iv = content[2 + client_entries_length:2 + client_entries_length + 16] - encrypted = content[2 + client_entries_length + 16:] - - client_id = hashlib.sha1(authentication_cookie + iv).digest()[:4] - - for entry_id, encrypted_session_key in client_keys: - if entry_id != client_id: - continue # not the session key for this client - - # try decrypting the session key - - cipher = Cipher(algorithms.AES(authentication_cookie), modes.CTR(b'\x00' * len(iv)), default_backend()) - decryptor = cipher.decryptor() - session_key = decryptor.update(encrypted_session_key) + decryptor.finalize() - - # attempt to decrypt the intro points with the session key - - cipher = Cipher(algorithms.AES(session_key), modes.CTR(iv), default_backend()) - decryptor = cipher.decryptor() - decrypted = decryptor.update(encrypted) + decryptor.finalize() - - # check if the decryption looks correct - - if decrypted.startswith(b'introduction-point '): - return decrypted - - return content # nope, unable to decrypt the content - - @staticmethod - def _decrypt_stealth_auth(content, authentication_cookie): - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - from cryptography.hazmat.backends import default_backend - - # byte 1 = authentication type, 2-17 = input vector, 18 on = encrypted content - iv, encrypted = content[1:17], content[17:] - cipher = Cipher(algorithms.AES(authentication_cookie), modes.CTR(iv), default_backend()) - decryptor = cipher.decryptor() - - return decryptor.update(encrypted) + decryptor.finalize() - - @staticmethod - def _parse_introduction_points(content): - """ - Provides the parsed list of IntroductionPoints for the unencrypted content. - """ - - introduction_points = [] - content_io = io.BytesIO(content) - - while True: - content = b''.join(_read_until_keywords('introduction-point', content_io, ignore_first = True)) - - if not content: - break # reached the end - - attr = dict(INTRODUCTION_POINTS_ATTR) - entries = _descriptor_components(content, False) - - for keyword, values in list(entries.items()): - value, block_type, block_contents = values[0] - - if keyword in SINGLE_INTRODUCTION_POINT_FIELDS and len(values) > 1: - raise ValueError("'%s' can only appear once in an introduction-point block, but appeared %i times" % (keyword, len(values))) - - if keyword == 'introduction-point': - attr['identifier'] = value - elif keyword == 'ip-address': - if not stem.util.connection.is_valid_ipv4_address(value): - raise ValueError("'%s' is an invalid IPv4 address" % value) - - attr['address'] = value - elif keyword == 'onion-port': - if not stem.util.connection.is_valid_port(value): - raise ValueError("'%s' is an invalid port" % value) - - attr['port'] = int(value) - elif keyword == 'onion-key': - attr['onion_key'] = block_contents - elif keyword == 'service-key': - attr['service_key'] = block_contents - elif keyword == 'intro-authentication': - auth_entries = [] - - for auth_value, _, _ in values: - if ' ' not in auth_value: - raise ValueError("We expected 'intro-authentication [auth_type] [auth_data]', but had '%s'" % auth_value) - - auth_type, auth_data = auth_value.split(' ')[:2] - auth_entries.append((auth_type, auth_data)) - - introduction_points.append(IntroductionPoints(**attr)) - - return introduction_points - - -class HiddenServiceDescriptorV3(BaseHiddenServiceDescriptor): - """ - Version 3 hidden service descriptor. - - :var int version: **\\*** hidden service descriptor version - :var int lifetime: **\\*** minutes after publication this descriptor is valid - :var stem.descriptor.certificate.Ed25519Certificate signing_cert: **\\*** cross-certifier for the short-term descriptor signing key - :var int revision_counter: **\\*** descriptor revision number - :var str superencrypted: **\\*** encrypted HS-DESC-ENC payload - :var str signature: **\\*** signature of this descriptor - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - - .. versionadded:: 1.8.0 - """ - - # TODO: requested this @type on https://trac.torproject.org/projects/tor/ticket/31481 - - TYPE_ANNOTATION_NAME = 'hidden-service-descriptor-3' - - ATTRIBUTES = { - 'version': (None, _parse_v3_version_line), - 'lifetime': (None, _parse_lifetime_line), - 'signing_cert': (None, _parse_signing_cert), - 'revision_counter': (None, _parse_revision_counter_line), - 'superencrypted': (None, _parse_superencrypted_line), - 'signature': (None, _parse_v3_signature_line), - } - - PARSER_FOR_LINE = { - 'hs-descriptor': _parse_v3_version_line, - 'descriptor-lifetime': _parse_lifetime_line, - 'descriptor-signing-key-cert': _parse_signing_cert, - 'revision-counter': _parse_revision_counter_line, - 'superencrypted': _parse_superencrypted_line, - 'signature': _parse_v3_signature_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, inner_layer = None, outer_layer = None, identity_key = None, signing_key = None, signing_cert = None, revision_counter = None, blinding_nonce = None): - """ - Hidden service v3 descriptors consist of three parts: - - * InnerLayer, which most notably contain introduction points where the - service can be reached. - - * OuterLayer, which encrypts the InnerLayer among other paremters. - - * HiddenServiceDescriptorV3, which contains the OuterLayer and plaintext - parameters. - - Construction through this method can supply any or none of these, with - omitted parameters populated with randomized defaults. - - Ed25519 key blinding adds an additional ~20 ms, and as such is disabled by - default. To blind with a random nonce simply call... - - :: - - HiddenServiceDescriptorV3.create(blinding_nonce = os.urandom(32)) - - :param dict attr: keyword/value mappings to be included in plaintext descriptor - :param list exclude: mandatory keywords to exclude from the descriptor, this - results in an invalid descriptor - :param bool sign: includes cryptographic signatures and digests if True - :param stem.descriptor.hidden_service.InnerLayer inner_layer: inner - encrypted layer - :param stem.descriptor.hidden_service.OuterLayer outer_layer: outer - encrypted layer - :param cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey - identity_key: service identity key - :param cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey - signing_key: service signing key - :param stem.descriptor.Ed25519CertificateV1 signing_cert: certificate - signing this descriptor - :param int revision_counter: descriptor revision number - :param bytes blinding_nonce: 32 byte blinding factor to derive the blinding key - - :returns: **str** with the content of a descriptor - - :raises: - * **ValueError** if parameters are malformed - * **ImportError** if cryptography is unavailable - """ - - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Hidden service descriptor creation requires cryptography version 2.6') - elif not stem.prereq._is_sha3_available(): - raise ImportError('Hidden service descriptor creation requires python 3.6+ or the pysha3 module (https://pypi.org/project/pysha3/)') - elif blinding_nonce and len(blinding_nonce) != 32: - raise ValueError('Blinding nonce must be 32 bytes, but was %i' % len(blinding_nonce)) - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey - - inner_layer = inner_layer if inner_layer else InnerLayer.create(exclude = exclude) - identity_key = identity_key if identity_key else Ed25519PrivateKey.generate() - signing_key = signing_key if signing_key else Ed25519PrivateKey.generate() - revision_counter = revision_counter if revision_counter else int(time.time()) - - blinded_key = _blinded_pubkey(identity_key, blinding_nonce) if blinding_nonce else b'a' * 32 - subcredential = HiddenServiceDescriptorV3._subcredential(identity_key, blinded_key) - custom_sig = attr.pop('signature') if (attr and 'signature' in attr) else None - - if not outer_layer: - outer_layer = OuterLayer.create( - exclude = exclude, - inner_layer = inner_layer, - revision_counter = revision_counter, - subcredential = subcredential, - blinded_key = blinded_key, - ) - - if not signing_cert: - extensions = [Ed25519Extension(ExtensionType.HAS_SIGNING_KEY, None, blinded_key)] - - signing_cert = Ed25519CertificateV1(cert_type = CertType.HS_V3_DESC_SIGNING, key = signing_key, extensions = extensions) - signing_cert.signature = _blinded_sign(signing_cert.pack(), identity_key, blinded_key, blinding_nonce) if blinding_nonce else b'b' * 64 - - desc_content = _descriptor_content(attr, exclude, ( - ('hs-descriptor', '3'), - ('descriptor-lifetime', '180'), - ('descriptor-signing-key-cert', '\n' + signing_cert.to_base64(pem = True)), - ('revision-counter', str(revision_counter)), - ('superencrypted', b'\n' + outer_layer._encrypt(revision_counter, subcredential, blinded_key)), - ), ()) + b'\n' - - if custom_sig: - desc_content += b'signature %s' % stem.util.str_tools._to_bytes(custom_sig) - elif 'signature' not in exclude: - sig_content = stem.descriptor.certificate.SIG_PREFIX_HS_V3 + desc_content - desc_content += b'signature %s' % base64.b64encode(signing_key.sign(sig_content)).rstrip(b'=') - - return desc_content - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, inner_layer = None, outer_layer = None, identity_key = None, signing_key = None, signing_cert = None, revision_counter = None, blinding_nonce = None): - return cls(cls.content(attr, exclude, sign, inner_layer, outer_layer, identity_key, signing_key, signing_cert, revision_counter, blinding_nonce), validate = validate) - - def __init__(self, raw_contents, validate = False): - super(HiddenServiceDescriptorV3, self).__init__(raw_contents, lazy_load = not validate) - - self._inner_layer = None - entries = _descriptor_components(raw_contents, validate) - - if validate: - for keyword in REQUIRED_V3_FIELDS: - if keyword not in entries: - raise ValueError("Hidden service descriptor must have a '%s' entry" % keyword) - elif keyword in entries and len(entries[keyword]) > 1: - raise ValueError("The '%s' entry can only appear once in a hidden service descriptor" % keyword) - - if 'hs-descriptor' != list(entries.keys())[0]: - raise ValueError("Hidden service descriptor must start with a 'hs-descriptor' entry") - elif 'signature' != list(entries.keys())[-1]: - raise ValueError("Hidden service descriptor must end with a 'signature' entry") - - self._parse(entries, validate) - - if self.signing_cert and stem.prereq.is_crypto_available(ed25519 = True): - self.signing_cert.validate(self) - else: - self._entries = entries - - def decrypt(self, onion_address): - """ - Decrypt this descriptor. Hidden serice descriptors contain two encryption - layers (:class:`~stem.descriptor.hidden_service.OuterLayer` and - :class:`~stem.descriptor.hidden_service.InnerLayer`). - - :param str onion_address: hidden service address this descriptor is from - - :returns: :class:`~stem.descriptor.hidden_service.InnerLayer` with our - decrypted content - - :raises: - * **ImportError** if required cryptography or sha3 module is unavailable - * **ValueError** if unable to decrypt or validation fails - """ - - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Hidden service descriptor decryption requires cryptography version 2.6') - elif not stem.prereq._is_sha3_available(): - raise ImportError('Hidden service descriptor decryption requires python 3.6+ or the pysha3 module (https://pypi.org/project/pysha3/)') - - if self._inner_layer is None: - blinded_key = self.signing_cert.signing_key() if self.signing_cert else None - - if not blinded_key: - raise ValueError('No signing key is present') - - identity_public_key = HiddenServiceDescriptorV3.identity_key_from_address(onion_address) - subcredential = HiddenServiceDescriptorV3._subcredential(identity_public_key, blinded_key) - - outer_layer = OuterLayer._decrypt(self.superencrypted, self.revision_counter, subcredential, blinded_key) - self._inner_layer = InnerLayer._decrypt(outer_layer, self.revision_counter, subcredential, blinded_key) - - return self._inner_layer - - @staticmethod - def address_from_identity_key(key, suffix = True): - """ - Converts a hidden service identity key into its address. This accepts all - key formats (private, public, or public bytes). - - :param Ed25519PublicKey,Ed25519PrivateKey,bytes key: hidden service identity key - :param bool suffix: includes the '.onion' suffix if true, excluded otherwise - - :returns: **unicode** hidden service address - - :raises: **ImportError** if sha3 unsupported - """ - - if not stem.prereq._is_sha3_available(): - raise ImportError('Hidden service address conversion requires python 3.6+ or the pysha3 module (https://pypi.org/project/pysha3/)') - - key = stem.util._pubkey_bytes(key) # normalize key into bytes - - version = stem.client.datatype.Size.CHAR.pack(3) - checksum = hashlib.sha3_256(CHECKSUM_CONSTANT + key + version).digest()[:2] - onion_address = base64.b32encode(key + checksum + version) - - return stem.util.str_tools._to_unicode(onion_address + b'.onion' if suffix else onion_address).lower() - - @staticmethod - def identity_key_from_address(onion_address): - """ - Converts a hidden service address into its public identity key. - - :param str onion_address: hidden service address - - :returns: **bytes** for the hidden service's public identity key - - :raises: - * **ImportError** if sha3 unsupported - * **ValueError** if address malformed or checksum is invalid - """ - - if not stem.prereq._is_sha3_available(): - raise ImportError('Hidden service address conversion requires python 3.6+ or the pysha3 module (https://pypi.org/project/pysha3/)') - - if onion_address.endswith('.onion'): - onion_address = onion_address[:-6] - - if not stem.util.tor_tools.is_valid_hidden_service_address(onion_address, version = 3): - raise ValueError("'%s.onion' isn't a valid hidden service v3 address" % onion_address) - - # onion_address = base32(PUBKEY | CHECKSUM | VERSION) + '.onion' - # CHECKSUM = H('.onion checksum' | PUBKEY | VERSION)[:2] - - decoded_address = base64.b32decode(onion_address.upper()) - - pubkey = decoded_address[:32] - expected_checksum = decoded_address[32:34] - version = decoded_address[34:35] - - checksum = hashlib.sha3_256(CHECKSUM_CONSTANT + pubkey + version).digest()[:2] - - if expected_checksum != checksum: - checksum_str = stem.util.str_tools._to_unicode(binascii.hexlify(checksum)) - expected_checksum_str = stem.util.str_tools._to_unicode(binascii.hexlify(expected_checksum)) - - raise ValueError('Bad checksum (expected %s but was %s)' % (expected_checksum_str, checksum_str)) - - return pubkey - - @staticmethod - def _subcredential(identity_key, blinded_key): - # credential = H('credential' | public-identity-key) - # subcredential = H('subcredential' | credential | blinded-public-key) - - credential = hashlib.sha3_256(b'credential%s' % stem.util._pubkey_bytes(identity_key)).digest() - return hashlib.sha3_256(b'subcredential%s%s' % (credential, blinded_key)).digest() - - -class OuterLayer(Descriptor): - """ - Initial encryped layer of a hidden service v3 descriptor (`spec - `_). - - .. versionadded:: 1.8.0 - - :var str auth_type: **\\*** encryption scheme used for descriptor authorization - :var str ephemeral_key: **\\*** base64 encoded x25519 public key - :var dict clients: **\\*** mapping of authorized client ids to their - :class:`~stem.descriptor.hidden_service.AuthorizedClient` - :var str encrypted: **\\*** encrypted descriptor inner layer - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - ATTRIBUTES = { - 'auth_type': (None, _parse_v3_outer_auth_type), - 'ephemeral_key': (None, _parse_v3_outer_ephemeral_key), - 'clients': ({}, _parse_v3_outer_clients), - 'encrypted': (None, _parse_v3_outer_encrypted), - } - - PARSER_FOR_LINE = { - 'desc-auth-type': _parse_v3_outer_auth_type, - 'desc-auth-ephemeral-key': _parse_v3_outer_ephemeral_key, - 'auth-client': _parse_v3_outer_clients, - 'encrypted': _parse_v3_outer_encrypted, - } - - @staticmethod - def _decrypt(encrypted, revision_counter, subcredential, blinded_key): - plaintext = _decrypt_layer(encrypted, b'hsdir-superencrypted-data', revision_counter, subcredential, blinded_key) - return OuterLayer(plaintext) - - def _encrypt(self, revision_counter, subcredential, blinded_key): - # Spec mandated padding: "Before encryption the plaintext is padded with - # NUL bytes to the nearest multiple of 10k bytes." - - content = self.get_bytes() + b'\x00' * (len(self.get_bytes()) % 10000) - - # encrypt back into a hidden service descriptor's 'superencrypted' field - - return _encrypt_layer(content, b'hsdir-superencrypted-data', revision_counter, subcredential, blinded_key) - - @classmethod - def content(cls, attr = None, exclude = (), validate = True, sign = False, inner_layer = None, revision_counter = None, authorized_clients = None, subcredential = None, blinded_key = None): - if not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Hidden service layer creation requires cryptography version 2.6') - elif not stem.prereq._is_sha3_available(): - raise ImportError('Hidden service layer creation requires python 3.6+ or the pysha3 module (https://pypi.org/project/pysha3/)') - elif authorized_clients and 'auth-client' in attr: - raise ValueError('Authorized clients cannot be specified through both attr and authorized_clients') - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey - from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey - - inner_layer = inner_layer if inner_layer else InnerLayer.create() - revision_counter = revision_counter if revision_counter else 1 - blinded_key = blinded_key if blinded_key else stem.util._pubkey_bytes(Ed25519PrivateKey.generate()) - subcredential = subcredential if subcredential else HiddenServiceDescriptorV3._subcredential(Ed25519PrivateKey.generate(), blinded_key) - - if not authorized_clients: - authorized_clients = [] - - if attr and 'auth-client' in attr: - pass # caller is providing raw auth-client lines through the attr - else: - for i in range(16): - authorized_clients.append(AuthorizedClient()) - - return _descriptor_content(attr, exclude, [ - ('desc-auth-type', 'x25519'), - ('desc-auth-ephemeral-key', base64.b64encode(stem.util._pubkey_bytes(X25519PrivateKey.generate()))), - ] + [ - ('auth-client', '%s %s %s' % (c.id, c.iv, c.cookie)) for c in authorized_clients - ], ( - ('encrypted', b'\n' + inner_layer._encrypt(revision_counter, subcredential, blinded_key)), - )) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, inner_layer = None, revision_counter = None, authorized_clients = None, subcredential = None, blinded_key = None): - return cls(cls.content(attr, exclude, validate, sign, inner_layer, revision_counter, authorized_clients, subcredential, blinded_key), validate = validate) - - def __init__(self, content, validate = False): - content = stem.util.str_tools._to_bytes(content).rstrip(b'\x00') # strip null byte padding - - super(OuterLayer, self).__init__(content, lazy_load = not validate) - entries = _descriptor_components(content, validate) - - if validate: - self._parse(entries, validate) - else: - self._entries = entries - - -class InnerLayer(Descriptor): - """ - Second encryped layer of a hidden service v3 descriptor (`spec - `_). - - .. versionadded:: 1.8.0 - - :var stem.descriptor.hidden_service.OuterLayer outer: enclosing encryption layer - - :var list formats: **\\*** recognized CREATE2 cell formats - :var list intro_auth: **\\*** introduction-layer authentication types - :var bool is_single_service: **\\*** **True** if this is a `single onion service `_, **False** otherwise - :var list introduction_points: :class:`~stem.descriptor.hidden_service.IntroductionPointV3` where this service is reachable - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - ATTRIBUTES = { - 'formats': ([], _parse_v3_inner_formats), - 'intro_auth': ([], _parse_v3_inner_intro_auth), - 'is_single_service': (False, _parse_v3_inner_single_service), - 'introduction_points': ([], _parse_v3_introduction_points), - } - - PARSER_FOR_LINE = { - 'create2-formats': _parse_v3_inner_formats, - 'intro-auth-required': _parse_v3_inner_intro_auth, - 'single-onion-service': _parse_v3_inner_single_service, - } - - @staticmethod - def _decrypt(outer_layer, revision_counter, subcredential, blinded_key): - plaintext = _decrypt_layer(outer_layer.encrypted, b'hsdir-encrypted-data', revision_counter, subcredential, blinded_key) - return InnerLayer(plaintext, validate = True, outer_layer = outer_layer) - - def _encrypt(self, revision_counter, subcredential, blinded_key): - # encrypt back into an outer layer's 'encrypted' field - - return _encrypt_layer(self.get_bytes(), b'hsdir-encrypted-data', revision_counter, subcredential, blinded_key) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, introduction_points = None): - if introduction_points: - suffix = '\n' + '\n'.join(map(IntroductionPointV3.encode, introduction_points)) - else: - suffix = '' - - return _descriptor_content(attr, exclude, ( - ('create2-formats', '2'), - )) + stem.util.str_tools._to_bytes(suffix) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, introduction_points = None): - return cls(cls.content(attr, exclude, sign, introduction_points), validate = validate) - - def __init__(self, content, validate = False, outer_layer = None): - super(InnerLayer, self).__init__(content, lazy_load = not validate) - self.outer = outer_layer - - # inner layer begins with a few header fields, followed by any - # number of introduction-points - - content = stem.util.str_tools._to_bytes(content) - div = content.find(b'\nintroduction-point ') - - if div != -1: - self._unparsed_introduction_points = content[div + 1:] - content = content[:div] - else: - self._unparsed_introduction_points = None - - entries = _descriptor_components(content, validate) - - if validate: - self._parse(entries, validate) - _parse_v3_introduction_points(self, entries) - else: - self._entries = entries - - -def _blinded_pubkey(identity_key, blinding_nonce): - from stem.util import ed25519 - - mult = 2 ** (ed25519.b - 2) + sum(2 ** i * ed25519.bit(blinding_nonce, i) for i in range(3, ed25519.b - 2)) - P = ed25519.decodepoint(stem.util._pubkey_bytes(identity_key)) - return ed25519.encodepoint(ed25519.scalarmult(P, mult)) - - -def _blinded_sign(msg, identity_key, blinded_key, blinding_nonce): - from cryptography.hazmat.primitives import serialization - from stem.util import ed25519 - - identity_key_bytes = identity_key.private_bytes( - encoding = serialization.Encoding.Raw, - format = serialization.PrivateFormat.Raw, - encryption_algorithm = serialization.NoEncryption(), - ) - - # pad private identity key into an ESK (encrypted secret key) - - h = ed25519.H(identity_key_bytes) - a = 2 ** (ed25519.b - 2) + sum(2 ** i * ed25519.bit(h, i) for i in range(3, ed25519.b - 2)) - k = b''.join([h[i:i + 1] for i in range(ed25519.b // 8, ed25519.b // 4)]) - esk = ed25519.encodeint(a) + k - - # blind the ESK with this nonce - - mult = 2 ** (ed25519.b - 2) + sum(2 ** i * ed25519.bit(blinding_nonce, i) for i in range(3, ed25519.b - 2)) - s = ed25519.decodeint(esk[:32]) - s_prime = (s * mult) % ed25519.l - k = esk[32:] - k_prime = ed25519.H(b'Derive temporary signing key hash input' + k)[:32] - blinded_esk = ed25519.encodeint(s_prime) + k_prime - - # finally, sign the message - - a = ed25519.decodeint(blinded_esk[:32]) - r = ed25519.Hint(b''.join([blinded_esk[i:i + 1] for i in range(ed25519.b // 8, ed25519.b // 4)]) + msg) - R = ed25519.scalarmult(ed25519.B, r) - S = (r + ed25519.Hint(ed25519.encodepoint(R) + blinded_key + msg) * a) % ed25519.l - - return ed25519.encodepoint(R) + ed25519.encodeint(S) - - -# TODO: drop this alias in stem 2.x - -HiddenServiceDescriptor = HiddenServiceDescriptorV2 diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service_descriptor.py b/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service_descriptor.py deleted file mode 100644 index d77d88a..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/hidden_service_descriptor.py +++ /dev/null @@ -1,4 +0,0 @@ -# TODO: This module (hidden_service_descriptor) is a temporary alias for -# hidden_service. This alias will be removed in Stem 2.x. - -from stem.descriptor.hidden_service import * diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/microdescriptor.py b/myenv/lib/python3.12/site-packages/stem/descriptor/microdescriptor.py deleted file mode 100644 index de125f6..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/microdescriptor.py +++ /dev/null @@ -1,366 +0,0 @@ -# Copyright 2013-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Tor microdescriptors, which contain a distilled version of a -relay's server descriptor. As of Tor version 0.2.3.3-alpha Tor no longer -downloads server descriptors by default, opting for microdescriptors instead. - -Unlike most descriptor documents these aren't available on the metrics site -(since they don't contain any information that the server descriptors don't). - -The limited information in microdescriptors make them rather clunky to use -compared with server descriptors. For instance microdescriptors lack the -relay's fingerprint, making it difficut to use them to look up the relay's -other descriptors. - -To do so you need to match the microdescriptor's digest against its -corresponding router status entry. For added fun as of this writing the -controller doesn't even surface those router status entries -(:trac:`7953`). - -For instance, here's an example that prints the nickname and fingerprints of -the exit relays. - -:: - - import os - - from stem.control import Controller - from stem.descriptor import parse_file - - with Controller.from_port(port = 9051) as controller: - controller.authenticate() - - exit_digests = set() - data_dir = controller.get_conf('DataDirectory') - - for desc in controller.get_microdescriptors(): - if desc.exit_policy.is_exiting_allowed(): - exit_digests.add(desc.digest) - - print 'Exit Relays:' - - for desc in parse_file(os.path.join(data_dir, 'cached-microdesc-consensus')): - if desc.digest in exit_digests: - print ' %s (%s)' % (desc.nickname, desc.fingerprint) - -Doing the same is trivial with server descriptors... - -:: - - from stem.descriptor import parse_file - - print 'Exit Relays:' - - for desc in parse_file('/home/atagar/.tor/cached-descriptors'): - if desc.exit_policy.is_exiting_allowed(): - print ' %s (%s)' % (desc.nickname, desc.fingerprint) - -**Module Overview:** - -:: - - Microdescriptor - Tor microdescriptor. -""" - -import hashlib - -import stem.exit_policy -import stem.prereq - -from stem.descriptor import ( - Descriptor, - DigestHash, - DigestEncoding, - _descriptor_content, - _descriptor_components, - _read_until_keywords, - _values, - _parse_simple_line, - _parse_protocol_line, - _parse_key_block, - _random_crypto_blob, -) - -from stem.descriptor.router_status_entry import ( - _parse_a_line, - _parse_p_line, -) - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -REQUIRED_FIELDS = ( - 'onion-key', -) - -SINGLE_FIELDS = ( - 'onion-key', - 'ntor-onion-key', - 'family', - 'p', - 'p6', - 'pr', -) - - -def _parse_file(descriptor_file, validate = False, **kwargs): - """ - Iterates over the microdescriptors in a file. - - :param file descriptor_file: file with descriptor content - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: iterator for Microdescriptor instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is True - * **IOError** if the file can't be read - """ - - while True: - annotations = _read_until_keywords('onion-key', descriptor_file) - - # read until we reach an annotation or onion-key line - descriptor_lines = [] - - # read the onion-key line, done if we're at the end of the document - - onion_key_line = descriptor_file.readline() - - if onion_key_line: - descriptor_lines.append(onion_key_line) - else: - break - - while True: - last_position = descriptor_file.tell() - line = descriptor_file.readline() - - if not line: - break # EOF - elif line.startswith(b'@') or line.startswith(b'onion-key'): - descriptor_file.seek(last_position) - break - else: - descriptor_lines.append(line) - - if descriptor_lines: - if descriptor_lines[0].startswith(b'@type'): - descriptor_lines = descriptor_lines[1:] - - # strip newlines from annotations - annotations = list(map(bytes.strip, annotations)) - - descriptor_text = bytes.join(b'', descriptor_lines) - - yield Microdescriptor(descriptor_text, validate, annotations, **kwargs) - else: - break # done parsing descriptors - - -def _parse_id_line(descriptor, entries): - identities = {} - - for entry in _values('id', entries): - entry_comp = entry.split() - - if len(entry_comp) >= 2: - key_type, key_value = entry_comp[0], entry_comp[1] - - if key_type in identities: - raise ValueError("There can only be one 'id' line per a key type, but '%s' appeared multiple times" % key_type) - - descriptor.identifier_type = key_type - descriptor.identifier = key_value - identities[key_type] = key_value - else: - raise ValueError("'id' lines should contain both the key type and digest: id %s" % entry) - - descriptor.identifiers = identities - - -_parse_onion_key_line = _parse_key_block('onion-key', 'onion_key', 'RSA PUBLIC KEY') -_parse_ntor_onion_key_line = _parse_simple_line('ntor-onion-key', 'ntor_onion_key') -_parse_family_line = _parse_simple_line('family', 'family', func = lambda v: v.split(' ')) -_parse_p6_line = _parse_simple_line('p6', 'exit_policy_v6', func = lambda v: stem.exit_policy.MicroExitPolicy(v)) -_parse_pr_line = _parse_protocol_line('pr', 'protocols') - - -class Microdescriptor(Descriptor): - """ - Microdescriptor (`descriptor specification - `_) - - :var str onion_key: **\\*** key used to encrypt EXTEND cells - :var str ntor_onion_key: base64 key used to encrypt EXTEND in the ntor protocol - :var list or_addresses: **\\*** alternative for our address/or_port attributes, each - entry is a tuple of the form (address (**str**), port (**int**), is_ipv6 - (**bool**)) - :var list family: **\\*** nicknames or fingerprints of declared family - :var stem.exit_policy.MicroExitPolicy exit_policy: **\\*** relay's exit policy - :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\\*** exit policy for IPv6 - :var hash identifiers: mapping of key types (like rsa1024 or ed25519) to - their base64 encoded identity, this is only used for collision prevention - (:trac:`11743`) - :var dict protocols: mapping of protocols to their supported versions - - :var str identifier: base64 encoded identity digest (**deprecated**, use - identifiers instead) - :var str identifier_type: identity digest key type (**deprecated**, use - identifiers instead) - - **\\*** attribute is required when we're parsed with validation - - .. versionchanged:: 1.1.0 - Added the identifier and identifier_type attributes. - - .. versionchanged:: 1.5.0 - Added the identifiers attribute, and deprecated identifier and - identifier_type since the field can now appear multiple times. - - .. versionchanged:: 1.6.0 - Added the protocols attribute. - - .. versionchanged:: 1.8.0 - Replaced our **digest** attribute with a much more flexible **digest()** - method. Unfortunately I cannot do this in a backward compatible way - because of the name conflict. The old digest had multiple problems (for - instance, being hex rather than base64 encoded), so hopefully no one was - using it. Very sorry if this causes trouble for anyone. - """ - - TYPE_ANNOTATION_NAME = 'microdescriptor' - - ATTRIBUTES = { - 'onion_key': (None, _parse_onion_key_line), - 'ntor_onion_key': (None, _parse_ntor_onion_key_line), - 'or_addresses': ([], _parse_a_line), - 'family': ([], _parse_family_line), - 'exit_policy': (stem.exit_policy.MicroExitPolicy('reject 1-65535'), _parse_p_line), - 'exit_policy_v6': (None, _parse_p6_line), - 'identifier_type': (None, _parse_id_line), # deprecated in favor of identifiers - 'identifier': (None, _parse_id_line), # deprecated in favor of identifiers - 'identifiers': ({}, _parse_id_line), - 'protocols': ({}, _parse_pr_line), - } - - PARSER_FOR_LINE = { - 'onion-key': _parse_onion_key_line, - 'ntor-onion-key': _parse_ntor_onion_key_line, - 'a': _parse_a_line, - 'family': _parse_family_line, - 'p': _parse_p_line, - 'p6': _parse_p6_line, - 'pr': _parse_pr_line, - 'id': _parse_id_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('onion-key', _random_crypto_blob('RSA PUBLIC KEY')), - )) - - def __init__(self, raw_contents, validate = False, annotations = None): - super(Microdescriptor, self).__init__(raw_contents, lazy_load = not validate) - self._annotation_lines = annotations if annotations else [] - entries = _descriptor_components(raw_contents, validate) - - if validate: - self._parse(entries, validate) - self._check_constraints(entries) - else: - self._entries = entries - - def digest(self, hash_type = DigestHash.SHA256, encoding = DigestEncoding.BASE64): - """ - Digest of this microdescriptor. These are referenced by... - - * **Microdescriptor Consensus** - - * Referer: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` **digest** attribute - * Format: **SHA256/BASE64** - - .. versionadded:: 1.8.0 - - :param stem.descriptor.DigestHash hash_type: digest hashing algorithm - :param stem.descriptor.DigestEncoding encoding: digest encoding - - :returns: **hashlib.HASH** or **str** based on our encoding argument - """ - - if hash_type == DigestHash.SHA1: - return stem.descriptor._encode_digest(hashlib.sha1(self.get_bytes()), encoding) - elif hash_type == DigestHash.SHA256: - return stem.descriptor._encode_digest(hashlib.sha256(self.get_bytes()), encoding) - else: - raise NotImplementedError('Microdescriptor digests are only available in sha1 and sha256, not %s' % hash_type) - - @lru_cache() - def get_annotations(self): - """ - Provides content that appeared prior to the descriptor. If this comes from - the cached-microdescs then this commonly contains content like... - - :: - - @last-listed 2013-02-24 00:18:30 - - :returns: **dict** with the key/value pairs in our annotations - """ - - annotation_dict = {} - - for line in self._annotation_lines: - if b' ' in line: - key, value = line.split(b' ', 1) - annotation_dict[key] = value - else: - annotation_dict[line] = None - - return annotation_dict - - def get_annotation_lines(self): - """ - Provides the lines of content that appeared prior to the descriptor. This - is the same as the - :func:`~stem.descriptor.microdescriptor.Microdescriptor.get_annotations` - results, but with the unparsed lines and ordering retained. - - :returns: **list** with the lines of annotation that came before this descriptor - """ - - return self._annotation_lines - - def _check_constraints(self, entries): - """ - Does a basic check that the entries conform to this descriptor type's - constraints. - - :param dict entries: keyword => (value, pgp key) entries - - :raises: **ValueError** if an issue arises in validation - """ - - for keyword in REQUIRED_FIELDS: - if keyword not in entries: - raise ValueError("Microdescriptor must have a '%s' entry" % keyword) - - for keyword in SINGLE_FIELDS: - if keyword in entries and len(entries[keyword]) > 1: - raise ValueError("The '%s' entry can only appear once in a microdescriptor" % keyword) - - if 'onion-key' != list(entries.keys())[0]: - raise ValueError("Microdescriptor must start with a 'onion-key' entry") - - def _name(self, is_plural = False): - return 'microdescriptors' if is_plural else 'microdescriptor' diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/networkstatus.py b/myenv/lib/python3.12/site-packages/stem/descriptor/networkstatus.py deleted file mode 100644 index cd65da9..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/networkstatus.py +++ /dev/null @@ -1,2008 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Tor network status documents. This supports both the v2 and v3 -`dir-spec `_. -Documents can be obtained from a few sources... - -* The 'cached-consensus' file in Tor's data directory. - -* Archived descriptors provided by `CollecTor - `_. - -* Directory authorities and mirrors via their DirPort. - -... and contain the following sections... - -* document header -* list of :class:`stem.descriptor.networkstatus.DirectoryAuthority` -* list of :class:`stem.descriptor.router_status_entry.RouterStatusEntry` -* document footer - -**For a great graphical overview see** `Jordan Wright's chart describing the -anatomy of the consensus -`_. - -Of these, the router status entry section can be quite large (on the order of -hundreds of kilobytes). As such we provide a couple of methods for reading -network status documents through :func:`~stem.descriptor.__init__.parse_file`. -For more information see :func:`~stem.descriptor.__init__.DocumentHandler`... - -:: - - from stem.descriptor import parse_file, DocumentHandler - - with open('.tor/cached-consensus', 'rb') as consensus_file: - # Processes the routers as we read them in. The routers refer to a document - # with an unset 'routers' attribute. - - for router in parse_file(consensus_file, 'network-status-consensus-3 1.0', document_handler = DocumentHandler.ENTRIES): - print router.nickname - -**Module Overview:** - -:: - - NetworkStatusDocument - Network status document - |- NetworkStatusDocumentV2 - Version 2 network status document - |- NetworkStatusDocumentV3 - Version 3 network status document - +- BridgeNetworkStatusDocument - Version 3 network status document for bridges - - KeyCertificate - Certificate used to authenticate an authority - DocumentSignature - Signature of a document by a directory authority - DetachedSignature - Stand alone signature used when making the consensus - DirectoryAuthority - Directory authority as defined in a v3 network status document -""" - -import collections -import datetime -import hashlib -import io - -import stem.descriptor.router_status_entry -import stem.util.str_tools -import stem.util.tor_tools -import stem.version - -from stem.descriptor import ( - PGP_BLOCK_END, - Descriptor, - DigestHash, - DigestEncoding, - TypeAnnotation, - DocumentHandler, - _descriptor_content, - _descriptor_components, - _read_until_keywords, - _value, - _values, - _parse_simple_line, - _parse_if_present, - _parse_timestamp_line, - _parse_forty_character_hex, - _parse_protocol_line, - _parse_key_block, - _mappings_for, - _random_nickname, - _random_fingerprint, - _random_ipv4_address, - _random_date, - _random_crypto_blob, -) - -from stem.descriptor.router_status_entry import ( - RouterStatusEntryV2, - RouterStatusEntryBridgeV2, - RouterStatusEntryV3, - RouterStatusEntryMicroV3, -) - -# Version 2 network status document fields, tuples of the form... -# (keyword, is_mandatory) - -NETWORK_STATUS_V2_FIELDS = ( - ('network-status-version', True), - ('dir-source', True), - ('fingerprint', True), - ('contact', True), - ('dir-signing-key', True), - ('client-versions', False), - ('server-versions', False), - ('published', True), - ('dir-options', False), - ('directory-signature', True), -) - -# Network status document are either a 'vote' or 'consensus', with different -# mandatory fields for each. Both though require that their fields appear in a -# specific order. This is an ordered listing of the following... -# -# (field, in_votes, in_consensus, is_mandatory) - -HEADER_STATUS_DOCUMENT_FIELDS = ( - ('network-status-version', True, True, True), - ('vote-status', True, True, True), - ('consensus-methods', True, False, False), - ('consensus-method', False, True, False), - ('published', True, False, True), - ('valid-after', True, True, True), - ('fresh-until', True, True, True), - ('valid-until', True, True, True), - ('voting-delay', True, True, True), - ('client-versions', True, True, False), - ('server-versions', True, True, False), - ('package', True, True, False), - ('known-flags', True, True, True), - ('flag-thresholds', True, False, False), - ('shared-rand-participate', True, False, False), - ('shared-rand-commit', True, False, False), - ('shared-rand-previous-value', True, True, False), - ('shared-rand-current-value', True, True, False), - ('bandwidth-file-headers', True, False, False), - ('bandwidth-file-digest', True, False, False), - ('recommended-client-protocols', True, True, False), - ('recommended-relay-protocols', True, True, False), - ('required-client-protocols', True, True, False), - ('required-relay-protocols', True, True, False), - ('params', True, True, False), -) - -FOOTER_STATUS_DOCUMENT_FIELDS = ( - ('directory-footer', True, True, False), - ('bandwidth-weights', False, True, False), - ('directory-signature', True, True, True), -) - -AUTH_START = 'dir-source' -ROUTERS_START = 'r' -FOOTER_START = 'directory-footer' -V2_FOOTER_START = 'directory-signature' - -DEFAULT_PARAMS = { - 'bwweightscale': 10000, - 'cbtdisabled': 0, - 'cbtnummodes': 3, - 'cbtrecentcount': 20, - 'cbtmaxtimeouts': 18, - 'cbtmincircs': 100, - 'cbtquantile': 80, - 'cbtclosequantile': 95, - 'cbttestfreq': 60, - 'cbtmintimeout': 2000, - 'cbtinitialtimeout': 60000, - 'cbtlearntimeout': 180, - 'cbtmaxopencircs': 10, - 'UseOptimisticData': 1, - 'Support022HiddenServices': 1, - 'usecreatefast': 1, - 'max-consensuses-age-to-cache-for-diff': 72, - 'try-diff-for-consensus-newer-than': 72, - 'onion-key-rotation-days': 28, - 'onion-key-grace-period-days': 7, - 'hs_service_max_rdv_failures': 2, - 'circ_max_cell_queue_size': 50000, - 'circpad_max_circ_queued_cells': 1000, - 'HiddenServiceEnableIntroDoSDefense': 0, -} - -# KeyCertificate fields, tuple is of the form... -# (keyword, is_mandatory) - -KEY_CERTIFICATE_PARAMS = ( - ('dir-key-certificate-version', True), - ('dir-address', False), - ('fingerprint', True), - ('dir-identity-key', True), - ('dir-key-published', True), - ('dir-key-expires', True), - ('dir-signing-key', True), - ('dir-key-crosscert', False), - ('dir-key-certification', True), -) - -# DetchedSignature fields, tuple is of the form... -# (keyword, is_mandatory, is_multiple) - -DETACHED_SIGNATURE_PARAMS = ( - ('consensus-digest', True, False), - ('valid-after', True, False), - ('fresh-until', True, False), - ('valid-until', True, False), - ('additional-digest', False, True), - ('additional-signature', False, True), - ('directory-signature', False, True), -) - -# all parameters are constrained to int32 range -MIN_PARAM, MAX_PARAM = -2147483648, 2147483647 - -PARAM_RANGE = { - 'circwindow': (100, 1000), - 'CircuitPriorityHalflifeMsec': (-1, MAX_PARAM), - 'perconnbwrate': (-1, MAX_PARAM), - 'perconnbwburst': (-1, MAX_PARAM), - 'refuseunknownexits': (0, 1), - 'bwweightscale': (1, MAX_PARAM), - 'cbtdisabled': (0, 1), - 'cbtnummodes': (1, 20), - 'cbtrecentcount': (3, 1000), - 'cbtmaxtimeouts': (3, 10000), - 'cbtmincircs': (1, 10000), - 'cbtquantile': (10, 99), - 'cbtclosequantile': (MIN_PARAM, 99), - 'cbttestfreq': (1, MAX_PARAM), - 'cbtmintimeout': (500, MAX_PARAM), - 'cbtlearntimeout': (10, 60000), - 'cbtmaxopencircs': (0, 14), - 'UseOptimisticData': (0, 1), - 'Support022HiddenServices': (0, 1), - 'usecreatefast': (0, 1), - 'UseNTorHandshake': (0, 1), - 'FastFlagMinThreshold': (4, MAX_PARAM), - 'NumDirectoryGuards': (0, 10), - 'NumEntryGuards': (1, 10), - 'GuardLifetime': (2592000, 157766400), # min: 30 days, max: 1826 days - 'NumNTorsPerTAP': (1, 100000), - 'AllowNonearlyExtend': (0, 1), - 'AuthDirNumSRVAgreements': (1, MAX_PARAM), - 'max-consensuses-age-to-cache-for-diff': (0, 8192), - 'try-diff-for-consensus-newer-than': (0, 8192), - 'onion-key-rotation-days': (1, 90), - 'onion-key-grace-period-days': (1, 90), # max is the highest onion-key-rotation-days - 'hs_service_max_rdv_failures': (1, 10), - 'circ_max_cell_queue_size': (1000, 4294967295), - 'circpad_max_circ_queued_cells': (0, 50000), - 'HiddenServiceEnableIntroDoSDefense': (0, 1), -} - - -class PackageVersion(collections.namedtuple('PackageVersion', ['name', 'version', 'url', 'digests'])): - """ - Latest recommended version of a package that's available. - - :var str name: name of the package - :var str version: latest recommended version - :var str url: package's url - :var dict digests: mapping of digest types to their value - """ - - -class SharedRandomnessCommitment(collections.namedtuple('SharedRandomnessCommitment', ['version', 'algorithm', 'identity', 'commit', 'reveal'])): - """ - Directory authority's commitment for generating the next shared random value. - - :var int version: shared randomness protocol version - :var str algorithm: hash algorithm used to make the commitment - :var str identity: authority's sha1 identity fingerprint - :var str commit: base64 encoded commitment hash to the shared random value - :var str reveal: base64 encoded commitment to the shared random value, - **None** of not provided - """ - - -class DocumentDigest(collections.namedtuple('DocumentDigest', ['flavor', 'algorithm', 'digest'])): - """ - Digest of a consensus document. - - .. versionadded:: 1.8.0 - - :var str flavor: consensus type this digest is for (for example, 'microdesc') - :var str algorithm: hash algorithm used to make the digest - :var str digest: digest value of the consensus - """ - - -def _parse_file(document_file, document_type = None, validate = False, is_microdescriptor = False, document_handler = DocumentHandler.ENTRIES, **kwargs): - """ - Parses a network status and iterates over the RouterStatusEntry in it. The - document that these instances reference have an empty 'routers' attribute to - allow for limited memory usage. - - :param file document_file: file with network status document content - :param class document_type: NetworkStatusDocument subclass - :param bool validate: checks the validity of the document's contents if - **True**, skips these checks otherwise - :param bool is_microdescriptor: **True** if this is for a microdescriptor - consensus, **False** otherwise - :param stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: :class:`stem.descriptor.networkstatus.NetworkStatusDocument` object - - :raises: - * **ValueError** if the document_version is unrecognized or the contents is - malformed and validate is **True** - * **IOError** if the file can't be read - """ - - # we can't properly default this since NetworkStatusDocumentV3 isn't defined yet - - if document_type is None: - document_type = NetworkStatusDocumentV3 - - if document_type == NetworkStatusDocumentV2: - document_type, router_type = NetworkStatusDocumentV2, RouterStatusEntryV2 - elif document_type == NetworkStatusDocumentV3: - router_type = RouterStatusEntryMicroV3 if is_microdescriptor else RouterStatusEntryV3 - elif document_type == BridgeNetworkStatusDocument: - document_type, router_type = BridgeNetworkStatusDocument, RouterStatusEntryBridgeV2 - elif document_type == DetachedSignature: - yield document_type(document_file.read(), validate, **kwargs) - return - else: - raise ValueError("Document type %i isn't recognized (only able to parse v2, v3, and bridge)" % document_type) - - if document_handler == DocumentHandler.DOCUMENT: - yield document_type(document_file.read(), validate, **kwargs) - return - - # getting the document without the routers section - - header = _read_until_keywords((ROUTERS_START, FOOTER_START, V2_FOOTER_START), document_file) - - if header and header[0].startswith(b'@type'): - header = header[1:] - - routers_start = document_file.tell() - _read_until_keywords((FOOTER_START, V2_FOOTER_START), document_file, skip = True) - routers_end = document_file.tell() - - footer = document_file.readlines() - document_content = bytes.join(b'', header + footer) - - if document_handler == DocumentHandler.BARE_DOCUMENT: - yield document_type(document_content, validate, **kwargs) - elif document_handler == DocumentHandler.ENTRIES: - desc_iterator = stem.descriptor.router_status_entry._parse_file( - document_file, - validate, - entry_class = router_type, - entry_keyword = ROUTERS_START, - start_position = routers_start, - end_position = routers_end, - extra_args = (document_type(document_content, validate),), - **kwargs - ) - - for desc in desc_iterator: - yield desc - else: - raise ValueError('Unrecognized document_handler: %s' % document_handler) - - -def _parse_file_key_certs(certificate_file, validate = False): - """ - Parses a file containing one or more authority key certificates. - - :param file certificate_file: file with key certificates - :param bool validate: checks the validity of the certificate's contents if - **True**, skips these checks otherwise - - :returns: iterator for :class:`stem.descriptor.networkstatus.KeyCertificate` - instances in the file - - :raises: - * **ValueError** if the key certificates are invalid and validate is **True** - * **IOError** if the file can't be read - """ - - while True: - keycert_content = _read_until_keywords('dir-key-certification', certificate_file) - - # we've reached the 'router-signature', now include the pgp style block - block_end_prefix = PGP_BLOCK_END.split(' ', 1)[0] - keycert_content += _read_until_keywords(block_end_prefix, certificate_file, True) - - if keycert_content: - yield stem.descriptor.networkstatus.KeyCertificate(bytes.join(b'', keycert_content), validate = validate) - else: - break # done parsing file - - -def _parse_file_detached_sigs(detached_signature_file, validate = False): - """ - Parses a file containing one or more detached signatures. - - :param file detached_signature_file: file with detached signatures - :param bool validate: checks the validity of the detached signature's - contents if **True**, skips these checks otherwise - - :returns: iterator for :class:`stem.descriptor.networkstatus.DetachedSignature` - instances in the file - - :raises: - * **ValueError** if the detached signatures are invalid and validate is **True** - * **IOError** if the file can't be read - """ - - while True: - detached_sig_content = _read_until_keywords('consensus-digest', detached_signature_file, ignore_first = True) - - if detached_sig_content: - yield stem.descriptor.networkstatus.DetachedSignature(bytes.join(b'', detached_sig_content), validate = validate) - else: - break # done parsing file - - -class NetworkStatusDocument(Descriptor): - """ - Common parent for network status documents. - """ - - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - """ - Digest of this descriptor's content. These are referenced by... - - * **DetachedSignature** - - * Referer: :class:`~stem.descriptor.networkstatus.DetachedSignature` **consensus_digest** attribute - * Format: **SHA1/HEX** - - .. versionadded:: 1.8.0 - - :param stem.descriptor.DigestHash hash_type: digest hashing algorithm - :param stem.descriptor.DigestEncoding encoding: digest encoding - - :returns: **hashlib.HASH** or **str** based on our encoding argument - """ - - content = self._content_range(end = '\ndirectory-signature ') - - if hash_type == DigestHash.SHA1: - return stem.descriptor._encode_digest(hashlib.sha1(content), encoding) - elif hash_type == DigestHash.SHA256: - return stem.descriptor._encode_digest(hashlib.sha256(content), encoding) - else: - raise NotImplementedError('Network status document digests are only available in sha1 and sha256, not %s' % hash_type) - - -def _parse_version_line(keyword, attribute, expected_version): - def _parse(descriptor, entries): - value = _value(keyword, entries) - - if not value.isdigit(): - raise ValueError('Document has a non-numeric version: %s %s' % (keyword, value)) - - setattr(descriptor, attribute, int(value)) - - if int(value) != expected_version: - raise ValueError("Expected a version %i document, but got version '%s' instead" % (expected_version, value)) - - return _parse - - -def _parse_dir_source_line(descriptor, entries): - value = _value('dir-source', entries) - dir_source_comp = value.split() - - if len(dir_source_comp) < 3: - raise ValueError("The 'dir-source' line of a v2 network status document must have three values: dir-source %s" % value) - - if not dir_source_comp[0]: - # https://trac.torproject.org/7055 - raise ValueError("Authority's hostname can't be blank: dir-source %s" % value) - elif not stem.util.connection.is_valid_ipv4_address(dir_source_comp[1]): - raise ValueError("Authority's address isn't a valid IPv4 address: %s" % dir_source_comp[1]) - elif not stem.util.connection.is_valid_port(dir_source_comp[2], allow_zero = True): - raise ValueError("Authority's DirPort is invalid: %s" % dir_source_comp[2]) - - descriptor.hostname = dir_source_comp[0] - descriptor.address = dir_source_comp[1] - descriptor.dir_port = None if dir_source_comp[2] == '0' else int(dir_source_comp[2]) - - -def _parse_additional_digests(descriptor, entries): - digests = [] - - for val in _values('additional-digest', entries): - comp = val.split(' ') - - if len(comp) < 3: - raise ValueError("additional-digest lines should be of the form 'additional-digest [flavor] [algname] [digest]' but was: %s" % val) - - digests.append(DocumentDigest(*comp[:3])) - - descriptor.additional_digests = digests - - -def _parse_additional_signatures(descriptor, entries): - signatures = [] - - for val, block_type, block_contents in entries['additional-signature']: - comp = val.split(' ') - - if len(comp) < 4: - raise ValueError("additional-signature lines should be of the form 'additional-signature [flavor] [algname] [identity] [signing_key_digest]' but was: %s" % val) - elif not block_contents or block_type != 'SIGNATURE': - raise ValueError("'additional-signature' should be followed by a SIGNATURE block, but was a %s" % block_type) - - signatures.append(DocumentSignature(comp[1], comp[2], comp[3], block_contents, flavor = comp[0], validate = True)) - - descriptor.additional_signatures = signatures - - -_parse_network_status_version_line = _parse_version_line('network-status-version', 'version', 2) -_parse_fingerprint_line = _parse_forty_character_hex('fingerprint', 'fingerprint') -_parse_contact_line = _parse_simple_line('contact', 'contact') -_parse_dir_signing_key_line = _parse_key_block('dir-signing-key', 'signing_key', 'RSA PUBLIC KEY') -_parse_client_versions_line = _parse_simple_line('client-versions', 'client_versions', func = lambda v: v.split(',')) -_parse_server_versions_line = _parse_simple_line('server-versions', 'server_versions', func = lambda v: v.split(',')) -_parse_published_line = _parse_timestamp_line('published', 'published') -_parse_dir_options_line = _parse_simple_line('dir-options', 'options', func = lambda v: v.split()) -_parse_directory_signature_line = _parse_key_block('directory-signature', 'signature', 'SIGNATURE', value_attribute = 'signing_authority') -_parse_consensus_digest_line = _parse_simple_line('consensus-digest', 'consensus_digest') - - -class NetworkStatusDocumentV2(NetworkStatusDocument): - """ - Version 2 network status document. These have been deprecated and are no - longer generated by Tor. - - :var dict routers: fingerprints to :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV2` - contained in the document - - :var int version: **\\*** document version - - :var str hostname: **\\*** hostname of the authority - :var str address: **\\*** authority's IP address - :var int dir_port: **\\*** authority's DirPort - :var str fingerprint: **\\*** authority's fingerprint - :var str contact: **\\*** authority's contact information - :var str signing_key: **\\*** authority's public signing key - - :var list client_versions: list of recommended client tor version strings - :var list server_versions: list of recommended server tor version strings - :var datetime published: **\\*** time when the document was published - :var list options: **\\*** list of things that this authority decides - - :var str signing_authority: **\\*** name of the authority signing the document - :var str signature: **\\*** authority's signature for the document - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - TYPE_ANNOTATION_NAME = 'network-status-2' - - ATTRIBUTES = { - 'version': (None, _parse_network_status_version_line), - 'hostname': (None, _parse_dir_source_line), - 'address': (None, _parse_dir_source_line), - 'dir_port': (None, _parse_dir_source_line), - 'fingerprint': (None, _parse_fingerprint_line), - 'contact': (None, _parse_contact_line), - 'signing_key': (None, _parse_dir_signing_key_line), - - 'client_versions': ([], _parse_client_versions_line), - 'server_versions': ([], _parse_server_versions_line), - 'published': (None, _parse_published_line), - 'options': ([], _parse_dir_options_line), - - 'signing_authority': (None, _parse_directory_signature_line), - 'signatures': (None, _parse_directory_signature_line), - } - - PARSER_FOR_LINE = { - 'network-status-version': _parse_network_status_version_line, - 'dir-source': _parse_dir_source_line, - 'fingerprint': _parse_fingerprint_line, - 'contact': _parse_contact_line, - 'dir-signing-key': _parse_dir_signing_key_line, - 'client-versions': _parse_client_versions_line, - 'server-versions': _parse_server_versions_line, - 'published': _parse_published_line, - 'dir-options': _parse_dir_options_line, - 'directory-signature': _parse_directory_signature_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('network-status-version', '2'), - ('dir-source', '%s %s 80' % (_random_ipv4_address(), _random_ipv4_address())), - ('fingerprint', _random_fingerprint()), - ('contact', 'arma at mit dot edu'), - ('published', _random_date()), - ('dir-signing-key', _random_crypto_blob('RSA PUBLIC KEY')), - ), ( - ('directory-signature', 'moria2' + _random_crypto_blob('SIGNATURE')), - )) - - def __init__(self, raw_content, validate = False): - super(NetworkStatusDocumentV2, self).__init__(raw_content, lazy_load = not validate) - - # Splitting the document from the routers. Unlike v3 documents we're not - # bending over backwards on the validation by checking the field order or - # that header/footer attributes aren't in the wrong section. This is a - # deprecated descriptor type - patches welcome if you want those checks. - - document_file = io.BytesIO(raw_content) - document_content = bytes.join(b'', _read_until_keywords((ROUTERS_START, V2_FOOTER_START), document_file)) - - router_iter = stem.descriptor.router_status_entry._parse_file( - document_file, - validate, - entry_class = RouterStatusEntryV2, - entry_keyword = ROUTERS_START, - section_end_keywords = (V2_FOOTER_START,), - extra_args = (self,), - ) - - self.routers = dict((desc.fingerprint, desc) for desc in router_iter) - - entries = _descriptor_components(document_content + b'\n' + document_file.read(), validate) - - if validate: - self._check_constraints(entries) - self._parse(entries, validate) - - # 'client-versions' and 'server-versions' are only required if 'Versions' - # is among the options - - if 'Versions' in self.options and not ('client-versions' in entries and 'server-versions' in entries): - raise ValueError("Version 2 network status documents must have a 'client-versions' and 'server-versions' when 'Versions' is listed among its dir-options:\n%s" % str(self)) - else: - self._entries = entries - - def _check_constraints(self, entries): - required_fields = [field for (field, is_mandatory) in NETWORK_STATUS_V2_FIELDS if is_mandatory] - for keyword in required_fields: - if keyword not in entries: - raise ValueError("Network status document (v2) must have a '%s' line:\n%s" % (keyword, str(self))) - - # all recognized fields can only appear once - single_fields = [field for (field, _) in NETWORK_STATUS_V2_FIELDS] - for keyword in single_fields: - if keyword in entries and len(entries[keyword]) > 1: - raise ValueError("Network status document (v2) can only have a single '%s' line, got %i:\n%s" % (keyword, len(entries[keyword]), str(self))) - - if 'network-status-version' != list(entries.keys())[0]: - raise ValueError("Network status document (v2) are expected to start with a 'network-status-version' line:\n%s" % str(self)) - - -def _parse_header_network_status_version_line(descriptor, entries): - # "network-status-version" version - - value = _value('network-status-version', entries) - - if ' ' in value: - version, flavor = value.split(' ', 1) - else: - version, flavor = value, 'ns' - - if not version.isdigit(): - raise ValueError('Network status document has a non-numeric version: network-status-version %s' % value) - - descriptor.version = int(version) - descriptor.version_flavor = flavor - descriptor.is_microdescriptor = flavor == 'microdesc' - - if descriptor.version != 3: - raise ValueError("Expected a version 3 network status document, got version '%s' instead" % descriptor.version) - - -def _parse_header_vote_status_line(descriptor, entries): - # "vote-status" type - # - # The consensus-method and consensus-methods fields are optional since - # they weren't included in version 1. Setting a default now that we - # know if we're a vote or not. - - value = _value('vote-status', entries) - - if value == 'consensus': - descriptor.is_consensus, descriptor.is_vote = True, False - elif value == 'vote': - descriptor.is_consensus, descriptor.is_vote = False, True - else: - raise ValueError("A network status document's vote-status line can only be 'consensus' or 'vote', got '%s' instead" % value) - - -def _parse_header_consensus_methods_line(descriptor, entries): - # "consensus-methods" IntegerList - - if descriptor._lazy_loading and descriptor.is_vote: - descriptor.consensus_methods = [1] - - value, consensus_methods = _value('consensus-methods', entries), [] - - for entry in value.split(' '): - if not entry.isdigit(): - raise ValueError("A network status document's consensus-methods must be a list of integer values, but was '%s'" % value) - - consensus_methods.append(int(entry)) - - descriptor.consensus_methods = consensus_methods - - -def _parse_header_consensus_method_line(descriptor, entries): - # "consensus-method" Integer - - if descriptor._lazy_loading and descriptor.is_consensus: - descriptor.consensus_method = 1 - - value = _value('consensus-method', entries) - - if not value.isdigit(): - raise ValueError("A network status document's consensus-method must be an integer, but was '%s'" % value) - - descriptor.consensus_method = int(value) - - -def _parse_header_voting_delay_line(descriptor, entries): - # "voting-delay" VoteSeconds DistSeconds - - value = _value('voting-delay', entries) - value_comp = value.split(' ') - - if len(value_comp) == 2 and value_comp[0].isdigit() and value_comp[1].isdigit(): - descriptor.vote_delay = int(value_comp[0]) - descriptor.dist_delay = int(value_comp[1]) - else: - raise ValueError("A network status document's 'voting-delay' line must be a pair of integer values, but was '%s'" % value) - - -def _parse_versions_line(keyword, attribute): - def _parse(descriptor, entries): - value, entries = _value(keyword, entries), [] - - for entry in value.split(','): - try: - entries.append(stem.version._get_version(entry)) - except ValueError: - raise ValueError("Network status document's '%s' line had '%s', which isn't a parsable tor version: %s %s" % (keyword, entry, keyword, value)) - - setattr(descriptor, attribute, entries) - - return _parse - - -def _parse_header_flag_thresholds_line(descriptor, entries): - # "flag-thresholds" SP THRESHOLDS - - value, thresholds = _value('flag-thresholds', entries).strip(), {} - - for key, val in _mappings_for('flag-thresholds', value): - try: - if val.endswith('%'): - # opting for string manipulation rather than just - # 'float(entry_value) / 100' because floating point arithmetic - # will lose precision - - thresholds[key] = float('0.' + val[:-1].replace('.', '', 1)) - elif '.' in val: - thresholds[key] = float(val) - else: - thresholds[key] = int(val) - except ValueError: - raise ValueError("Network status document's 'flag-thresholds' line is expected to have float values, got: flag-thresholds %s" % value) - - descriptor.flag_thresholds = thresholds - - -def _parse_header_parameters_line(descriptor, entries): - # "params" [Parameters] - # Parameter ::= Keyword '=' Int32 - # Int32 ::= A decimal integer between -2147483648 and 2147483647. - # Parameters ::= Parameter | Parameters SP Parameter - - if descriptor._lazy_loading: - descriptor.params = dict(DEFAULT_PARAMS) if descriptor._default_params else {} - - value = _value('params', entries) - - if value != '': - descriptor.params = _parse_int_mappings('params', value, True) - descriptor._check_params_constraints() - - -def _parse_directory_footer_line(descriptor, entries): - # nothing to parse, simply checking that we don't have a value - - value = _value('directory-footer', entries) - - if value: - raise ValueError("A network status document's 'directory-footer' line shouldn't have any content, got 'directory-footer %s'" % value) - - -def _parse_footer_directory_signature_line(descriptor, entries): - signatures = [] - - for sig_value, block_type, block_contents in entries['directory-signature']: - if sig_value.count(' ') not in (1, 2): - raise ValueError("Authority signatures in a network status document are expected to be of the form 'directory-signature [METHOD] FINGERPRINT KEY_DIGEST', received: %s" % sig_value) - - if not block_contents or block_type != 'SIGNATURE': - raise ValueError("'directory-signature' should be followed by a SIGNATURE block, but was a %s" % block_type) - - if sig_value.count(' ') == 1: - method = 'sha1' # default if none was provided - fingerprint, key_digest = sig_value.split(' ', 1) - else: - method, fingerprint, key_digest = sig_value.split(' ', 2) - - signatures.append(DocumentSignature(method, fingerprint, key_digest, block_contents, validate = True)) - - descriptor.signatures = signatures - - -def _parse_package_line(descriptor, entries): - package_versions = [] - - for value, _, _ in entries['package']: - value_comp = value.split(' ', 3) - - if len(value_comp) < 3: - raise ValueError("'package' must at least have a 'PackageName Version URL': %s" % value) - - name, version, url = value_comp[:3] - digests = {} - - if len(value_comp) == 4: - for key, val in _mappings_for('package', value_comp[3]): - digests[key] = val - - package_versions.append(PackageVersion(name, version, url, digests)) - - descriptor.packages = package_versions - - -def _parsed_shared_rand_commit(descriptor, entries): - # "shared-rand-commit" Version AlgName Identity Commit [Reveal] - - commitments = [] - - for value, _, _ in entries['shared-rand-commit']: - value_comp = value.split() - - if len(value_comp) < 4: - raise ValueError("'shared-rand-commit' must at least have a 'Version AlgName Identity Commit': %s" % value) - - version, algorithm, identity, commit = value_comp[:4] - reveal = value_comp[4] if len(value_comp) >= 5 else None - - if not version.isdigit(): - raise ValueError("The version on our 'shared-rand-commit' line wasn't an integer: %s" % value) - - commitments.append(SharedRandomnessCommitment(int(version), algorithm, identity, commit, reveal)) - - descriptor.shared_randomness_commitments = commitments - - -def _parse_shared_rand_previous_value(descriptor, entries): - # "shared-rand-previous-value" NumReveals Value - - value = _value('shared-rand-previous-value', entries) - value_comp = value.split(' ') - - if len(value_comp) == 2 and value_comp[0].isdigit(): - descriptor.shared_randomness_previous_reveal_count = int(value_comp[0]) - descriptor.shared_randomness_previous_value = value_comp[1] - else: - raise ValueError("A network status document's 'shared-rand-previous-value' line must be a pair of values, the first an integer but was '%s'" % value) - - -def _parse_shared_rand_current_value(descriptor, entries): - # "shared-rand-current-value" NumReveals Value - - value = _value('shared-rand-current-value', entries) - value_comp = value.split(' ') - - if len(value_comp) == 2 and value_comp[0].isdigit(): - descriptor.shared_randomness_current_reveal_count = int(value_comp[0]) - descriptor.shared_randomness_current_value = value_comp[1] - else: - raise ValueError("A network status document's 'shared-rand-current-value' line must be a pair of values, the first an integer but was '%s'" % value) - - -def _parse_bandwidth_file_headers(descriptor, entries): - # "bandwidth-file-headers" KeyValues - # KeyValues ::= "" | KeyValue | KeyValues SP KeyValue - # KeyValue ::= Keyword '=' Value - # Value ::= ArgumentChar+ - - value = _value('bandwidth-file-headers', entries) - results = {} - - for key, val in _mappings_for('bandwidth-file-headers', value): - results[key] = val - - descriptor.bandwidth_file_headers = results - - -def _parse_bandwidth_file_digest(descriptor, entries): - # "bandwidth-file-digest" 1*(SP algorithm "=" digest) - - value = _value('bandwidth-file-digest', entries) - results = {} - - for key, val in _mappings_for('bandwidth-file-digest', value): - results[key] = val - - descriptor.bandwidth_file_digest = results - - -_parse_header_valid_after_line = _parse_timestamp_line('valid-after', 'valid_after') -_parse_header_fresh_until_line = _parse_timestamp_line('fresh-until', 'fresh_until') -_parse_header_valid_until_line = _parse_timestamp_line('valid-until', 'valid_until') -_parse_header_client_versions_line = _parse_versions_line('client-versions', 'client_versions') -_parse_header_server_versions_line = _parse_versions_line('server-versions', 'server_versions') -_parse_header_known_flags_line = _parse_simple_line('known-flags', 'known_flags', func = lambda v: [entry for entry in v.split(' ') if entry]) -_parse_footer_bandwidth_weights_line = _parse_simple_line('bandwidth-weights', 'bandwidth_weights', func = lambda v: _parse_int_mappings('bandwidth-weights', v, True)) -_parse_shared_rand_participate_line = _parse_if_present('shared-rand-participate', 'is_shared_randomness_participate') -_parse_recommended_client_protocols_line = _parse_protocol_line('recommended-client-protocols', 'recommended_client_protocols') -_parse_recommended_relay_protocols_line = _parse_protocol_line('recommended-relay-protocols', 'recommended_relay_protocols') -_parse_required_client_protocols_line = _parse_protocol_line('required-client-protocols', 'required_client_protocols') -_parse_required_relay_protocols_line = _parse_protocol_line('required-relay-protocols', 'required_relay_protocols') - - -class NetworkStatusDocumentV3(NetworkStatusDocument): - """ - Version 3 network status document. This could be either a vote or consensus. - - :var dict routers: fingerprint to :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` - mapping for relays contained in the document - - :var int version: **\\*** document version - :var str version_flavor: **\\*** flavor associated with the document (such as 'ns' or 'microdesc') - :var bool is_consensus: **\\*** **True** if the document is a consensus - :var bool is_vote: **\\*** **True** if the document is a vote - :var bool is_microdescriptor: **\\*** **True** if this is a microdescriptor - flavored document, **False** otherwise - :var datetime valid_after: **\\*** time when the consensus became valid - :var datetime fresh_until: **\\*** time when the next consensus should be produced - :var datetime valid_until: **\\*** time when this consensus becomes obsolete - :var int vote_delay: **\\*** number of seconds allowed for collecting votes - from all authorities - :var int dist_delay: **\\*** number of seconds allowed for collecting - signatures from all authorities - :var list client_versions: list of recommended client tor versions - :var list server_versions: list of recommended server tor versions - :var list packages: **\\*** list of :data:`~stem.descriptor.networkstatus.PackageVersion` entries - :var list known_flags: **\\*** list of :data:`~stem.Flag` for the router's flags - :var dict params: **\\*** dict of parameter(**str**) => value(**int**) mappings - :var list directory_authorities: **\\*** list of :class:`~stem.descriptor.networkstatus.DirectoryAuthority` - objects that have generated this document - :var list signatures: **\\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` - of the authorities that have signed the document - - **Consensus Attributes:** - - :var int consensus_method: method version used to generate this consensus - :var dict bandwidth_weights: dict of weight(str) => value(int) mappings - - :var int shared_randomness_current_reveal_count: number of commitments - used to generate the current shared random value - :var str shared_randomness_current_value: base64 encoded current shared - random value - - :var int shared_randomness_previous_reveal_count: number of commitments - used to generate the last shared random value - :var str shared_randomness_previous_value: base64 encoded last shared random - value - - **Vote Attributes:** - - :var list consensus_methods: list of ints for the supported method versions - :var datetime published: time when the document was published - :var dict flag_thresholds: **\\*** mapping of internal performance thresholds used while making the vote, values are **ints** or **floats** - - :var dict recommended_client_protocols: recommended protocols for clients - :var dict recommended_relay_protocols: recommended protocols for relays - :var dict required_client_protocols: required protocols for clients - :var dict required_relay_protocols: required protocols for relays - :var dict bandwidth_file_headers: headers from the bandwidth authority that - generated this vote - :var dict bandwidth_file_digest: hashes of the bandwidth authority file used - to generate this vote, this is a mapping of hash functions to their resulting - digest value - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as None if undefined - - .. versionchanged:: 1.4.0 - Added the packages attribute. - - .. versionchanged:: 1.5.0 - Added the is_shared_randomness_participate, shared_randomness_commitments, - shared_randomness_previous_reveal_count, - shared_randomness_previous_value, - shared_randomness_current_reveal_count, and - shared_randomness_current_value attributes. - - .. versionchanged:: 1.6.0 - Added the recommended_client_protocols, recommended_relay_protocols, - required_client_protocols, and required_relay_protocols attributes. - - .. versionchanged:: 1.6.0 - The is_shared_randomness_participate and shared_randomness_commitments - were misdocumented in the tor spec and as such never set. They're now an - attribute of votes in the **directory_authorities**. - - .. versionchanged:: 1.7.0 - The shared_randomness_current_reveal_count and - shared_randomness_previous_reveal_count attributes were undocumented and - not provided properly if retrieved before their shred_randomness_*_value - counterpart. - - .. versionchanged:: 1.7.0 - Added the bandwidth_file_headers attributbute. - - .. versionchanged:: 1.8.0 - Added the bandwidth_file_digest attributbute. - """ - - ATTRIBUTES = { - 'version': (None, _parse_header_network_status_version_line), - 'version_flavor': ('ns', _parse_header_network_status_version_line), - 'is_consensus': (True, _parse_header_vote_status_line), - 'is_vote': (False, _parse_header_vote_status_line), - 'is_microdescriptor': (False, _parse_header_network_status_version_line), - 'consensus_methods': ([], _parse_header_consensus_methods_line), - 'published': (None, _parse_published_line), - 'consensus_method': (None, _parse_header_consensus_method_line), - 'valid_after': (None, _parse_header_valid_after_line), - 'fresh_until': (None, _parse_header_fresh_until_line), - 'valid_until': (None, _parse_header_valid_until_line), - 'vote_delay': (None, _parse_header_voting_delay_line), - 'dist_delay': (None, _parse_header_voting_delay_line), - 'client_versions': ([], _parse_header_client_versions_line), - 'server_versions': ([], _parse_header_server_versions_line), - 'packages': ([], _parse_package_line), - 'known_flags': ([], _parse_header_known_flags_line), - 'flag_thresholds': ({}, _parse_header_flag_thresholds_line), - 'recommended_client_protocols': ({}, _parse_recommended_client_protocols_line), - 'recommended_relay_protocols': ({}, _parse_recommended_relay_protocols_line), - 'required_client_protocols': ({}, _parse_required_client_protocols_line), - 'required_relay_protocols': ({}, _parse_required_relay_protocols_line), - 'params': ({}, _parse_header_parameters_line), - 'shared_randomness_previous_reveal_count': (None, _parse_shared_rand_previous_value), - 'shared_randomness_previous_value': (None, _parse_shared_rand_previous_value), - 'shared_randomness_current_reveal_count': (None, _parse_shared_rand_current_value), - 'shared_randomness_current_value': (None, _parse_shared_rand_current_value), - 'bandwidth_file_headers': ({}, _parse_bandwidth_file_headers), - 'bandwidth_file_digest': ({}, _parse_bandwidth_file_digest), - - 'signatures': ([], _parse_footer_directory_signature_line), - 'bandwidth_weights': ({}, _parse_footer_bandwidth_weights_line), - } - - _HEADER_PARSER_FOR_LINE = { - 'network-status-version': _parse_header_network_status_version_line, - 'vote-status': _parse_header_vote_status_line, - 'consensus-methods': _parse_header_consensus_methods_line, - 'consensus-method': _parse_header_consensus_method_line, - 'published': _parse_published_line, - 'valid-after': _parse_header_valid_after_line, - 'fresh-until': _parse_header_fresh_until_line, - 'valid-until': _parse_header_valid_until_line, - 'voting-delay': _parse_header_voting_delay_line, - 'client-versions': _parse_header_client_versions_line, - 'server-versions': _parse_header_server_versions_line, - 'package': _parse_package_line, - 'known-flags': _parse_header_known_flags_line, - 'flag-thresholds': _parse_header_flag_thresholds_line, - 'recommended-client-protocols': _parse_recommended_client_protocols_line, - 'recommended-relay-protocols': _parse_recommended_relay_protocols_line, - 'required-client-protocols': _parse_required_client_protocols_line, - 'required-relay-protocols': _parse_required_relay_protocols_line, - 'params': _parse_header_parameters_line, - 'shared-rand-previous-value': _parse_shared_rand_previous_value, - 'shared-rand-current-value': _parse_shared_rand_current_value, - 'bandwidth-file-headers': _parse_bandwidth_file_headers, - 'bandwidth-file-digest': _parse_bandwidth_file_digest, - } - - _FOOTER_PARSER_FOR_LINE = { - 'directory-footer': _parse_directory_footer_line, - 'bandwidth-weights': _parse_footer_bandwidth_weights_line, - 'directory-signature': _parse_footer_directory_signature_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, authorities = None, routers = None): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - attr = {} if attr is None else dict(attr) - is_vote = attr.get('vote-status') == 'vote' - - if is_vote: - extra_defaults = {'consensus-methods': '1 9', 'published': _random_date()} - else: - extra_defaults = {'consensus-method': '9'} - - if is_vote and authorities is None: - authorities = [DirectoryAuthority.create(is_vote = is_vote)] - - for k, v in extra_defaults.items(): - if exclude and k in exclude: - continue # explicitly excluding this field - elif k not in attr: - attr[k] = v - - desc_content = _descriptor_content(attr, exclude, ( - ('network-status-version', '3'), - ('vote-status', 'consensus'), - ('consensus-methods', None), - ('consensus-method', None), - ('published', None), - ('valid-after', _random_date()), - ('fresh-until', _random_date()), - ('valid-until', _random_date()), - ('voting-delay', '300 300'), - ('client-versions', None), - ('server-versions', None), - ('package', None), - ('known-flags', 'Authority BadExit Exit Fast Guard HSDir Named Running Stable Unnamed V2Dir Valid'), - ('params', None), - ), ( - ('directory-footer', ''), - ('bandwidth-weights', None), - ('directory-signature', '%s %s%s' % (_random_fingerprint(), _random_fingerprint(), _random_crypto_blob('SIGNATURE'))), - )) - - # inject the authorities and/or routers between the header and footer - - if authorities: - if b'directory-footer' in desc_content: - footer_div = desc_content.find(b'\ndirectory-footer') + 1 - elif b'directory-signature' in desc_content: - footer_div = desc_content.find(b'\ndirectory-signature') + 1 - else: - if routers: - desc_content += b'\n' - - footer_div = len(desc_content) + 1 - - authority_content = stem.util.str_tools._to_bytes('\n'.join([str(a) for a in authorities]) + '\n') - desc_content = desc_content[:footer_div] + authority_content + desc_content[footer_div:] - - if routers: - if b'directory-footer' in desc_content: - footer_div = desc_content.find(b'\ndirectory-footer') + 1 - elif b'directory-signature' in desc_content: - footer_div = desc_content.find(b'\ndirectory-signature') + 1 - else: - if routers: - desc_content += b'\n' - - footer_div = len(desc_content) + 1 - - router_content = stem.util.str_tools._to_bytes('\n'.join([str(r) for r in routers]) + '\n') - desc_content = desc_content[:footer_div] + router_content + desc_content[footer_div:] - - return desc_content - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, authorities = None, routers = None): - return cls(cls.content(attr, exclude, sign, authorities, routers), validate = validate) - - def __init__(self, raw_content, validate = False, default_params = True): - """ - Parse a v3 network status document. - - :param str raw_content: raw network status document data - :param bool validate: **True** if the document is to be validated, **False** otherwise - :param bool default_params: includes defaults in our params dict, otherwise - it just contains values from the document - - :raises: **ValueError** if the document is invalid - """ - - super(NetworkStatusDocumentV3, self).__init__(raw_content, lazy_load = not validate) - document_file = io.BytesIO(raw_content) - - # TODO: Tor misdocumented these as being in the header rather than the - # authority section. As such these have never been set but we need the - # attributes for stem 1.5 compatability. Drop these in 2.0. - - self.is_shared_randomness_participate = False - self.shared_randomness_commitments = [] - - self._default_params = default_params - self._header(document_file, validate) - - self.directory_authorities = tuple(stem.descriptor.router_status_entry._parse_file( - document_file, - validate, - entry_class = DirectoryAuthority, - entry_keyword = AUTH_START, - section_end_keywords = (ROUTERS_START, FOOTER_START, V2_FOOTER_START), - extra_args = (self.is_vote,), - )) - - if validate and self.is_vote and len(self.directory_authorities) != 1: - raise ValueError('Votes should only have an authority entry for the one that issued it, got %i: %s' % (len(self.directory_authorities), self.directory_authorities)) - - router_iter = stem.descriptor.router_status_entry._parse_file( - document_file, - validate, - entry_class = RouterStatusEntryMicroV3 if self.is_microdescriptor else RouterStatusEntryV3, - entry_keyword = ROUTERS_START, - section_end_keywords = (FOOTER_START, V2_FOOTER_START), - extra_args = (self,), - ) - - self.routers = dict((desc.fingerprint, desc) for desc in router_iter) - self._footer(document_file, validate) - - def type_annotation(self): - if isinstance(self, BridgeNetworkStatusDocument): - return TypeAnnotation('bridge-network-status', 1, 0) - elif not self.is_microdescriptor: - return TypeAnnotation('network-status-consensus-3' if not self.is_vote else 'network-status-vote-3', 1, 0) - else: - # Directory authorities do not issue a 'microdescriptor consensus' vote, - # so unlike the above there isn't a 'network-status-microdesc-vote-3' - # counterpart here. - - return TypeAnnotation('network-status-microdesc-consensus-3', 1, 0) - - def is_valid(self): - """ - Checks if the current time is between this document's **valid_after** and - **valid_until** timestamps. To be valid means the information within this - document reflects the current network state. - - .. versionadded:: 1.8.0 - - :returns: **True** if this consensus is presently valid and **False** - otherwise - """ - - return self.valid_after < datetime.datetime.utcnow() < self.valid_until - - def is_fresh(self): - """ - Checks if the current time is between this document's **valid_after** and - **fresh_until** timestamps. To be fresh means this should be the latest - consensus. - - .. versionadded:: 1.8.0 - - :returns: **True** if this consensus is presently fresh and **False** - otherwise - """ - - return self.valid_after < datetime.datetime.utcnow() < self.fresh_until - - def validate_signatures(self, key_certs): - """ - Validates we're properly signed by the signing certificates. - - .. versionadded:: 1.6.0 - - :param list key_certs: :class:`~stem.descriptor.networkstatus.KeyCertificates` - to validate the consensus against - - :raises: **ValueError** if an insufficient number of valid signatures are present. - """ - - # sha1 hash of the body and header - - digest_content = self._content_range('network-status-version', 'directory-signature ') - local_digest = hashlib.sha1(digest_content).hexdigest().upper() - - valid_digests, total_digests = 0, 0 - required_digests = len(self.signatures) / 2.0 - signing_keys = dict([(cert.fingerprint, cert.signing_key) for cert in key_certs]) - - for sig in self.signatures: - if sig.identity not in signing_keys: - continue - - signed_digest = self._digest_for_signature(signing_keys[sig.identity], sig.signature) - total_digests += 1 - - if signed_digest == local_digest: - valid_digests += 1 - - if valid_digests < required_digests: - raise ValueError('Network Status Document has %i valid signatures out of %i total, needed %i' % (valid_digests, total_digests, required_digests)) - - def get_unrecognized_lines(self): - if self._lazy_loading: - self._parse(self._header_entries, False, parser_for_line = self._HEADER_PARSER_FOR_LINE) - self._parse(self._footer_entries, False, parser_for_line = self._FOOTER_PARSER_FOR_LINE) - self._lazy_loading = False - - return super(NetworkStatusDocumentV3, self).get_unrecognized_lines() - - def meets_consensus_method(self, method): - """ - Checks if we meet the given consensus-method. This works for both votes and - consensuses, checking our 'consensus-method' and 'consensus-methods' - entries. - - :param int method: consensus-method to check for - - :returns: **True** if we meet the given consensus-method, and **False** otherwise - """ - - if self.consensus_method is not None: - return self.consensus_method >= method - elif self.consensus_methods is not None: - return bool([x for x in self.consensus_methods if x >= method]) - else: - return False # malformed document - - def _header(self, document_file, validate): - content = bytes.join(b'', _read_until_keywords((AUTH_START, ROUTERS_START, FOOTER_START), document_file)) - entries = _descriptor_components(content, validate) - header_fields = [attr[0] for attr in HEADER_STATUS_DOCUMENT_FIELDS] - - if validate: - # all known header fields can only appear once except - - for keyword, values in list(entries.items()): - if len(values) > 1 and keyword in header_fields and keyword != 'package' and keyword != 'shared-rand-commit': - raise ValueError("Network status documents can only have a single '%s' line, got %i" % (keyword, len(values))) - - if self._default_params: - self.params = dict(DEFAULT_PARAMS) - - self._parse(entries, validate, parser_for_line = self._HEADER_PARSER_FOR_LINE) - - # should only appear in consensus-method 7 or later - - if not self.meets_consensus_method(7) and 'params' in list(entries.keys()): - raise ValueError("A network status document's 'params' line should only appear in consensus-method 7 or later") - - _check_for_missing_and_disallowed_fields(self, entries, HEADER_STATUS_DOCUMENT_FIELDS) - - # default consensus_method and consensus_methods based on if we're a consensus or vote - - if self.is_consensus and not self.consensus_method: - self.consensus_method = 1 - elif self.is_vote and not self.consensus_methods: - self.consensus_methods = [1] - else: - self._header_entries = entries - self._entries.update(entries) - - def _footer(self, document_file, validate): - entries = _descriptor_components(document_file.read(), validate) - footer_fields = [attr[0] for attr in FOOTER_STATUS_DOCUMENT_FIELDS] - - if validate: - for keyword, values in list(entries.items()): - # all known footer fields can only appear once except... - # * 'directory-signature' in a consensus - - if len(values) > 1 and keyword in footer_fields: - if not (keyword == 'directory-signature' and self.is_consensus): - raise ValueError("Network status documents can only have a single '%s' line, got %i" % (keyword, len(values))) - - self._parse(entries, validate, parser_for_line = self._FOOTER_PARSER_FOR_LINE) - - # Check that the footer has the right initial line. Prior to consensus - # method 9 it's a 'directory-signature' and after that footers start with - # 'directory-footer'. - - if entries: - if self.meets_consensus_method(9): - if list(entries.keys())[0] != 'directory-footer': - raise ValueError("Network status document's footer should start with a 'directory-footer' line in consensus-method 9 or later") - else: - if list(entries.keys())[0] != 'directory-signature': - raise ValueError("Network status document's footer should start with a 'directory-signature' line prior to consensus-method 9") - - _check_for_missing_and_disallowed_fields(self, entries, FOOTER_STATUS_DOCUMENT_FIELDS) - else: - self._footer_entries = entries - self._entries.update(entries) - - def _check_params_constraints(self): - """ - Checks that the params we know about are within their documented ranges. - """ - - for key, value in self.params.items(): - minimum, maximum = PARAM_RANGE.get(key, (MIN_PARAM, MAX_PARAM)) - - # there's a few dynamic parameter ranges - - if key == 'cbtclosequantile': - minimum = self.params.get('cbtquantile', minimum) - elif key == 'cbtinitialtimeout': - minimum = self.params.get('cbtmintimeout', minimum) - - if value < minimum or value > maximum: - raise ValueError("'%s' value on the params line must be in the range of %i - %i, was %i" % (key, minimum, maximum, value)) - - -def _check_for_missing_and_disallowed_fields(document, entries, fields): - """ - Checks that we have mandatory fields for our type, and that we don't have - any fields exclusive to the other (ie, no vote-only fields appear in a - consensus or vice versa). - - :param NetworkStatusDocumentV3 document: network status document - :param dict entries: ordered keyword/value mappings of the header or footer - :param list fields: expected field attributes (either - **HEADER_STATUS_DOCUMENT_FIELDS** or **FOOTER_STATUS_DOCUMENT_FIELDS**) - - :raises: **ValueError** if we're missing mandatory fields or have fields we shouldn't - """ - - missing_fields, disallowed_fields = [], [] - - for field, in_votes, in_consensus, mandatory in fields: - if mandatory and ((document.is_consensus and in_consensus) or (document.is_vote and in_votes)): - # mandatory field, check that we have it - if field not in entries.keys(): - missing_fields.append(field) - elif (document.is_consensus and not in_consensus) or (document.is_vote and not in_votes): - # field we shouldn't have, check that we don't - if field in entries.keys(): - disallowed_fields.append(field) - - if missing_fields: - raise ValueError('Network status document is missing mandatory field: %s' % ', '.join(missing_fields)) - - if disallowed_fields: - raise ValueError("Network status document has fields that shouldn't appear in this document type or version: %s" % ', '.join(disallowed_fields)) - - -def _parse_int_mappings(keyword, value, validate): - # Parse a series of 'key=value' entries, checking the following: - # - values are integers - # - keys are sorted in lexical order - - results, seen_keys = {}, [] - error_template = "Unable to parse network status document's '%s' line (%%s): %s'" % (keyword, value) - - for key, val in _mappings_for(keyword, value): - if validate: - # parameters should be in ascending order by their key - for prior_key in seen_keys: - if prior_key > key: - raise ValueError(error_template % 'parameters must be sorted by their key') - - try: - # the int() function accepts things like '+123', but we don't want to - - if val.startswith('+'): - raise ValueError() - - results[key] = int(val) - except ValueError: - raise ValueError(error_template % ("'%s' is a non-numeric value" % val)) - - seen_keys.append(key) - - return results - - -def _parse_dirauth_source_line(descriptor, entries): - # "dir-source" nickname identity address IP dirport orport - - value = _value('dir-source', entries) - dir_source_comp = value.split(' ') - - if len(dir_source_comp) < 6: - raise ValueError("Authority entry's 'dir-source' line must have six values: dir-source %s" % value) - - if not stem.util.tor_tools.is_valid_nickname(dir_source_comp[0].rstrip('-legacy')): - raise ValueError("Authority's nickname is invalid: %s" % dir_source_comp[0]) - elif not stem.util.tor_tools.is_valid_fingerprint(dir_source_comp[1]): - raise ValueError("Authority's v3ident is invalid: %s" % dir_source_comp[1]) - elif not dir_source_comp[2]: - # https://trac.torproject.org/7055 - raise ValueError("Authority's hostname can't be blank: dir-source %s" % value) - elif not stem.util.connection.is_valid_ipv4_address(dir_source_comp[3]): - raise ValueError("Authority's address isn't a valid IPv4 address: %s" % dir_source_comp[3]) - elif not stem.util.connection.is_valid_port(dir_source_comp[4], allow_zero = True): - raise ValueError("Authority's DirPort is invalid: %s" % dir_source_comp[4]) - elif not stem.util.connection.is_valid_port(dir_source_comp[5]): - raise ValueError("Authority's ORPort is invalid: %s" % dir_source_comp[5]) - - descriptor.nickname = dir_source_comp[0] - descriptor.v3ident = dir_source_comp[1] - descriptor.hostname = dir_source_comp[2] - descriptor.address = dir_source_comp[3] - descriptor.dir_port = None if dir_source_comp[4] == '0' else int(dir_source_comp[4]) - descriptor.or_port = int(dir_source_comp[5]) - descriptor.is_legacy = descriptor.nickname.endswith('-legacy') - - -_parse_legacy_dir_key_line = _parse_forty_character_hex('legacy-dir-key', 'legacy_dir_key') -_parse_vote_digest_line = _parse_forty_character_hex('vote-digest', 'vote_digest') - - -class DirectoryAuthority(Descriptor): - """ - Directory authority information obtained from a v3 network status document. - - Authorities can optionally use a legacy format. These are no longer found in - practice, but have the following differences... - - * The authority's nickname ends with '-legacy'. - * There's no **contact** or **vote_digest** attribute. - - :var str nickname: **\\*** authority's nickname - :var str v3ident: **\\*** identity key fingerprint used to sign votes and consensus - :var str hostname: **\\*** hostname of the authority - :var str address: **\\*** authority's IP address - :var int dir_port: **\\*** authority's DirPort - :var int or_port: **\\*** authority's ORPort - :var bool is_legacy: **\\*** if the authority's using the legacy format - :var str contact: contact information, this is included if is_legacy is **False** - - **Consensus Attributes:** - - :var str vote_digest: digest of the authority that contributed to the consensus, this is included if is_legacy is **False** - - **Vote Attributes:** - - :var str legacy_dir_key: fingerprint of and obsolete identity key - :var stem.descriptor.networkstatus.KeyCertificate key_certificate: **\\*** - authority's key certificate - - :var bool is_shared_randomness_participate: **\\*** **True** if this authority - participates in establishing a shared random value, **False** otherwise - :var list shared_randomness_commitments: **\\*** list of - :data:`~stem.descriptor.networkstatus.SharedRandomnessCommitment` entries - :var int shared_randomness_previous_reveal_count: number of commitments - used to generate the last shared random value - :var str shared_randomness_previous_value: base64 encoded last shared random - value - :var int shared_randomness_current_reveal_count: number of commitments - used to generate the current shared random value - :var str shared_randomness_current_value: base64 encoded current shared - random value - - **\\*** mandatory attribute - - .. versionchanged:: 1.4.0 - Renamed our 'fingerprint' attribute to 'v3ident' (prior attribute exists - for backward compatability, but is deprecated). - - .. versionchanged:: 1.6.0 - Added the is_shared_randomness_participate, shared_randomness_commitments, - shared_randomness_previous_reveal_count, - shared_randomness_previous_value, - shared_randomness_current_reveal_count, and - shared_randomness_current_value attributes. - """ - - ATTRIBUTES = { - 'nickname': (None, _parse_dirauth_source_line), - 'v3ident': (None, _parse_dirauth_source_line), - 'hostname': (None, _parse_dirauth_source_line), - 'address': (None, _parse_dirauth_source_line), - 'dir_port': (None, _parse_dirauth_source_line), - 'or_port': (None, _parse_dirauth_source_line), - 'is_legacy': (False, _parse_dirauth_source_line), - 'contact': (None, _parse_contact_line), - 'vote_digest': (None, _parse_vote_digest_line), - 'legacy_dir_key': (None, _parse_legacy_dir_key_line), - 'is_shared_randomness_participate': (False, _parse_shared_rand_participate_line), - 'shared_randomness_commitments': ([], _parsed_shared_rand_commit), - 'shared_randomness_previous_reveal_count': (None, _parse_shared_rand_previous_value), - 'shared_randomness_previous_value': (None, _parse_shared_rand_previous_value), - 'shared_randomness_current_reveal_count': (None, _parse_shared_rand_current_value), - 'shared_randomness_current_value': (None, _parse_shared_rand_current_value), - } - - PARSER_FOR_LINE = { - 'dir-source': _parse_dirauth_source_line, - 'contact': _parse_contact_line, - 'legacy-dir-key': _parse_legacy_dir_key_line, - 'vote-digest': _parse_vote_digest_line, - 'shared-rand-participate': _parse_shared_rand_participate_line, - 'shared-rand-commit': _parsed_shared_rand_commit, - 'shared-rand-previous-value': _parse_shared_rand_previous_value, - 'shared-rand-current-value': _parse_shared_rand_current_value, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, is_vote = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - attr = {} if attr is None else dict(attr) - - # include mandatory 'vote-digest' if a consensus - - if not is_vote and not ('vote-digest' in attr or (exclude and 'vote-digest' in exclude)): - attr['vote-digest'] = _random_fingerprint() - - content = _descriptor_content(attr, exclude, ( - ('dir-source', '%s %s no.place.com %s 9030 9090' % (_random_nickname(), _random_fingerprint(), _random_ipv4_address())), - ('contact', 'Mike Perry '), - )) - - if is_vote: - content += b'\n' + KeyCertificate.content() - - return content - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, is_vote = False): - return cls(cls.content(attr, exclude, sign, is_vote), validate = validate, is_vote = is_vote) - - def __init__(self, raw_content, validate = False, is_vote = False): - """ - Parse a directory authority entry in a v3 network status document. - - :param str raw_content: raw directory authority entry information - :param bool validate: checks the validity of the content if True, skips - these checks otherwise - :param bool is_vote: True if this is for a vote, False if it's for a consensus - - :raises: ValueError if the descriptor data is invalid - """ - - super(DirectoryAuthority, self).__init__(raw_content, lazy_load = not validate) - content = stem.util.str_tools._to_unicode(raw_content) - - # separate the directory authority entry from its key certificate - key_div = content.find('\ndir-key-certificate-version') - - if key_div != -1: - self.key_certificate = KeyCertificate(content[key_div + 1:], validate) - content = content[:key_div + 1] - else: - self.key_certificate = None - - entries = _descriptor_components(content, validate) - - if validate and 'dir-source' != list(entries.keys())[0]: - raise ValueError("Authority entries are expected to start with a 'dir-source' line:\n%s" % (content)) - - # check that we have mandatory fields - - if validate: - is_legacy, dir_source_entry = False, entries.get('dir-source') - - if dir_source_entry: - is_legacy = dir_source_entry[0][0].split()[0].endswith('-legacy') - - required_fields, excluded_fields = ['dir-source'], [] - - if not is_legacy: - required_fields += ['contact'] - - if is_vote: - if not self.key_certificate: - raise ValueError('Authority votes must have a key certificate:\n%s' % content) - - excluded_fields += ['vote-digest'] - elif not is_vote: - if self.key_certificate: - raise ValueError("Authority consensus entries shouldn't have a key certificate:\n%s" % content) - - if not is_legacy: - required_fields += ['vote-digest'] - - excluded_fields += ['legacy-dir-key'] - - for keyword in required_fields: - if keyword not in entries: - raise ValueError("Authority entries must have a '%s' line:\n%s" % (keyword, content)) - - for keyword in entries: - if keyword in excluded_fields: - type_label = 'votes' if is_vote else 'consensus entries' - raise ValueError("Authority %s shouldn't have a '%s' line:\n%s" % (type_label, keyword, content)) - - # all known attributes can only appear at most once - for keyword, values in list(entries.items()): - if len(values) > 1 and keyword in ('dir-source', 'contact', 'legacy-dir-key', 'vote-digest'): - raise ValueError("Authority entries can only have a single '%s' line, got %i:\n%s" % (keyword, len(values), content)) - - self._parse(entries, validate) - else: - self._entries = entries - - # TODO: Due to a bug we had a 'fingerprint' rather than 'v3ident' attribute - # for a long while. Keeping this around for backward compatability, but - # this will be dropped in stem's 2.0 release. - - self.fingerprint = self.v3ident - - -def _parse_dir_address_line(descriptor, entries): - # "dir-address" IPPort - - value = _value('dir-address', entries) - - if ':' not in value: - raise ValueError("Key certificate's 'dir-address' is expected to be of the form ADDRESS:PORT: dir-address %s" % value) - - address, dirport = value.rsplit(':', 1) - - if not stem.util.connection.is_valid_ipv4_address(address): - raise ValueError("Key certificate's address isn't a valid IPv4 address: dir-address %s" % value) - elif not stem.util.connection.is_valid_port(dirport): - raise ValueError("Key certificate's dirport is invalid: dir-address %s" % value) - - descriptor.address = address - descriptor.dir_port = int(dirport) - - -_parse_dir_key_certificate_version_line = _parse_version_line('dir-key-certificate-version', 'version', 3) -_parse_dir_key_published_line = _parse_timestamp_line('dir-key-published', 'published') -_parse_dir_key_expires_line = _parse_timestamp_line('dir-key-expires', 'expires') -_parse_identity_key_line = _parse_key_block('dir-identity-key', 'identity_key', 'RSA PUBLIC KEY') -_parse_signing_key_line = _parse_key_block('dir-signing-key', 'signing_key', 'RSA PUBLIC KEY') -_parse_dir_key_crosscert_line = _parse_key_block('dir-key-crosscert', 'crosscert', 'ID SIGNATURE') -_parse_dir_key_certification_line = _parse_key_block('dir-key-certification', 'certification', 'SIGNATURE') - - -class KeyCertificate(Descriptor): - """ - Directory key certificate for a v3 network status document. - - :var int version: **\\*** version of the key certificate - :var str address: authority's IP address - :var int dir_port: authority's DirPort - :var str fingerprint: **\\*** authority's fingerprint - :var str identity_key: **\\*** long term authority identity key - :var datetime published: **\\*** time when this key was generated - :var datetime expires: **\\*** time after which this key becomes invalid - :var str signing_key: **\\*** directory server's public signing key - :var str crosscert: signature made using certificate's signing key - :var str certification: **\\*** signature of this key certificate signed with - the identity key - - **\\*** mandatory attribute - """ - - TYPE_ANNOTATION_NAME = 'dir-key-certificate-3' - - ATTRIBUTES = { - 'version': (None, _parse_dir_key_certificate_version_line), - 'address': (None, _parse_dir_address_line), - 'dir_port': (None, _parse_dir_address_line), - 'fingerprint': (None, _parse_fingerprint_line), - 'identity_key': (None, _parse_identity_key_line), - 'published': (None, _parse_dir_key_published_line), - 'expires': (None, _parse_dir_key_expires_line), - 'signing_key': (None, _parse_signing_key_line), - 'crosscert': (None, _parse_dir_key_crosscert_line), - 'certification': (None, _parse_dir_key_certification_line), - } - - PARSER_FOR_LINE = { - 'dir-key-certificate-version': _parse_dir_key_certificate_version_line, - 'dir-address': _parse_dir_address_line, - 'fingerprint': _parse_fingerprint_line, - 'dir-key-published': _parse_dir_key_published_line, - 'dir-key-expires': _parse_dir_key_expires_line, - 'dir-identity-key': _parse_identity_key_line, - 'dir-signing-key': _parse_signing_key_line, - 'dir-key-crosscert': _parse_dir_key_crosscert_line, - 'dir-key-certification': _parse_dir_key_certification_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('dir-key-certificate-version', '3'), - ('fingerprint', _random_fingerprint()), - ('dir-key-published', _random_date()), - ('dir-key-expires', _random_date()), - ('dir-identity-key', _random_crypto_blob('RSA PUBLIC KEY')), - ('dir-signing-key', _random_crypto_blob('RSA PUBLIC KEY')), - ), ( - ('dir-key-certification', _random_crypto_blob('SIGNATURE')), - )) - - def __init__(self, raw_content, validate = False): - super(KeyCertificate, self).__init__(raw_content, lazy_load = not validate) - entries = _descriptor_components(raw_content, validate) - - if validate: - if 'dir-key-certificate-version' != list(entries.keys())[0]: - raise ValueError("Key certificates must start with a 'dir-key-certificate-version' line:\n%s" % (raw_content)) - elif 'dir-key-certification' != list(entries.keys())[-1]: - raise ValueError("Key certificates must end with a 'dir-key-certification' line:\n%s" % (raw_content)) - - # check that we have mandatory fields and that our known fields only - # appear once - - for keyword, is_mandatory in KEY_CERTIFICATE_PARAMS: - if is_mandatory and keyword not in entries: - raise ValueError("Key certificates must have a '%s' line:\n%s" % (keyword, raw_content)) - - entry_count = len(entries.get(keyword, [])) - if entry_count > 1: - raise ValueError("Key certificates can only have a single '%s' line, got %i:\n%s" % (keyword, entry_count, raw_content)) - - self._parse(entries, validate) - else: - self._entries = entries - - -class DocumentSignature(object): - """ - Directory signature of a v3 network status document. - - :var str method: algorithm used to make the signature - :var str identity: fingerprint of the authority that made the signature - :var str key_digest: digest of the signing key - :var str signature: document signature - :var str flavor: consensus type this signature is for (such as 'microdesc'), - **None** if for the standard consensus - :param bool validate: checks validity if **True** - - :raises: **ValueError** if a validity check fails - """ - - def __init__(self, method, identity, key_digest, signature, flavor = None, validate = False): - # Checking that these attributes are valid. Technically the key - # digest isn't a fingerprint, but it has the same characteristics. - - if validate: - if not stem.util.tor_tools.is_valid_fingerprint(identity): - raise ValueError('Malformed fingerprint (%s) in the document signature' % identity) - - if not stem.util.tor_tools.is_valid_fingerprint(key_digest): - raise ValueError('Malformed key digest (%s) in the document signature' % key_digest) - - self.method = method - self.identity = identity - self.key_digest = key_digest - self.signature = signature - self.flavor = flavor - - def _compare(self, other, method): - if not isinstance(other, DocumentSignature): - return False - - for attr in ('method', 'identity', 'key_digest', 'signature', 'flavor'): - if getattr(self, attr) != getattr(other, attr): - return method(getattr(self, attr), getattr(other, attr)) - - return method(True, True) # we're equal - - def __hash__(self): - return hash(str(self).strip()) - - def __eq__(self, other): - return self._compare(other, lambda s, o: s == o) - - def __ne__(self, other): - return not self == other - - def __lt__(self, other): - return self._compare(other, lambda s, o: s < o) - - def __le__(self, other): - return self._compare(other, lambda s, o: s <= o) - - -class DetachedSignature(Descriptor): - """ - Stand alone signature of the consensus. These are exchanged between directory - authorities when determining the next hour's consensus. - - Detached signatures are defined in section 3.10 of the dir-spec, and only - available to be downloaded for five minutes between minute 55 until the end - of the hour. - - .. versionadded:: 1.8.0 - - :var str consensus_digest: **\\*** digest of the consensus being signed - :var datetime valid_after: **\\*** time when the consensus became valid - :var datetime fresh_until: **\\*** time when the next consensus should be produced - :var datetime valid_until: **\\*** time when this consensus becomes obsolete - :var list additional_digests: **\\*** - :class:`~stem.descriptor.networkstatus.DocumentDigest` for additional - consensus flavors - :var list additional_signatures: **\\*** - :class:`~stem.descriptor.networkstatus.DocumentSignature` for additional - consensus flavors - :var list signatures: **\\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` - of the authorities that have signed the document - - **\\*** mandatory attribute - """ - - TYPE_ANNOTATION_NAME = 'detached-signature-3' - - ATTRIBUTES = { - 'consensus_digest': (None, _parse_consensus_digest_line), - 'valid_after': (None, _parse_header_valid_after_line), - 'fresh_until': (None, _parse_header_fresh_until_line), - 'valid_until': (None, _parse_header_valid_until_line), - 'additional_digests': ([], _parse_additional_digests), - 'additional_signatures': ([], _parse_additional_signatures), - 'signatures': ([], _parse_footer_directory_signature_line), - } - - PARSER_FOR_LINE = { - 'consensus-digest': _parse_consensus_digest_line, - 'valid-after': _parse_header_valid_after_line, - 'fresh-until': _parse_header_fresh_until_line, - 'valid-until': _parse_header_valid_until_line, - 'additional-digest': _parse_additional_digests, - 'additional-signature': _parse_additional_signatures, - 'directory-signature': _parse_footer_directory_signature_line, - } - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('consensus-digest', '6D3CC0EFA408F228410A4A8145E1B0BB0670E442'), - ('valid-after', _random_date()), - ('fresh-until', _random_date()), - ('valid-until', _random_date()), - )) - - def __init__(self, raw_content, validate = False): - super(DetachedSignature, self).__init__(raw_content, lazy_load = not validate) - entries = _descriptor_components(raw_content, validate) - - if validate: - if 'consensus-digest' != list(entries.keys())[0]: - raise ValueError("Detached signatures must start with a 'consensus-digest' line:\n%s" % (raw_content)) - - # check that we have mandatory fields and certain fields only appear once - - for keyword, is_mandatory, is_multiple in DETACHED_SIGNATURE_PARAMS: - if is_mandatory and keyword not in entries: - raise ValueError("Detached signatures must have a '%s' line:\n%s" % (keyword, raw_content)) - - entry_count = len(entries.get(keyword, [])) - if not is_multiple and entry_count > 1: - raise ValueError("Detached signatures can only have a single '%s' line, got %i:\n%s" % (keyword, entry_count, raw_content)) - - self._parse(entries, validate) - else: - self._entries = entries - - -class BridgeNetworkStatusDocument(NetworkStatusDocument): - """ - Network status document containing bridges. This is only available through - the metrics site. - - :var dict routers: fingerprint to :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` - mapping for relays contained in the document - :var datetime published: time when the document was published - """ - - TYPE_ANNOTATION_NAME = 'bridge-network-status' - - def __init__(self, raw_content, validate = False): - super(BridgeNetworkStatusDocument, self).__init__(raw_content) - - self.published = None - - document_file = io.BytesIO(raw_content) - published_line = stem.util.str_tools._to_unicode(document_file.readline()) - - if published_line.startswith('published '): - published_line = published_line.split(' ', 1)[1].strip() - - try: - self.published = stem.util.str_tools._parse_timestamp(published_line) - except ValueError: - if validate: - raise ValueError("Bridge network status document's 'published' time wasn't parsable: %s" % published_line) - elif validate: - raise ValueError("Bridge network status documents must start with a 'published' line:\n%s" % stem.util.str_tools._to_unicode(raw_content)) - - router_iter = stem.descriptor.router_status_entry._parse_file( - document_file, - validate, - entry_class = RouterStatusEntryV2, - extra_args = (self,), - ) - - self.routers = dict((desc.fingerprint, desc) for desc in router_iter) diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/reader.py b/myenv/lib/python3.12/site-packages/stem/descriptor/reader.py deleted file mode 100644 index 32ec39f..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/reader.py +++ /dev/null @@ -1,577 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Utilities for reading descriptors from local directories and archives. This is -mostly done through the :class:`~stem.descriptor.reader.DescriptorReader` -class, which is an iterator for the descriptor data in a series of -destinations. For example... - -:: - - my_descriptors = [ - '/tmp/server-descriptors-2012-03.tar.bz2', - '/tmp/archived_descriptors/', - ] - - # prints the contents of all the descriptor files - with DescriptorReader(my_descriptors) as reader: - for descriptor in reader: - print descriptor - -This ignores files that cannot be processed due to read errors or unparsable -content. To be notified of skipped files you can register a listener with -:func:`~stem.descriptor.reader.DescriptorReader.register_skip_listener`. - -The :class:`~stem.descriptor.reader.DescriptorReader` keeps track of the last -modified timestamps for descriptor files that it has read so it can skip -unchanged files if run again. This listing of processed files can also be -persisted and applied to other -:class:`~stem.descriptor.reader.DescriptorReader` instances. For example, the -following prints descriptors as they're changed over the course of a minute, -and picks up where it left off if run again... - -:: - - reader = DescriptorReader(['/tmp/descriptor_data']) - - try: - processed_files = load_processed_files('/tmp/used_descriptors') - reader.set_processed_files(processed_files) - except: pass # could not load, maybe this is the first run - - start_time = time.time() - - while (time.time() - start_time) < 60: - # prints any descriptors that have changed since last checked - with reader: - for descriptor in reader: - print descriptor - - time.sleep(1) - - save_processed_files('/tmp/used_descriptors', reader.get_processed_files()) - -**Module Overview:** - -:: - - load_processed_files - Loads a listing of processed files - save_processed_files - Saves a listing of processed files - - DescriptorReader - Iterator for descriptor data on the local file system - |- get_processed_files - provides the listing of files that we've processed - |- set_processed_files - sets our tracking of the files we have processed - |- register_read_listener - adds a listener for when files are read - |- register_skip_listener - adds a listener that's notified of skipped files - |- start - begins reading descriptor data - |- stop - stops reading descriptor data - |- __enter__ / __exit__ - manages the descriptor reader thread in the context - +- __iter__ - iterates over descriptor data in unread files - - FileSkipped - Base exception for a file that was skipped - |- AlreadyRead - We've already read a file with this last modified timestamp - |- ParsingFailure - Contents can't be parsed as descriptor data - |- UnrecognizedType - File extension indicates non-descriptor data - +- ReadFailed - Wraps an error that was raised while reading the file - +- FileMissing - File does not exist - -.. deprecated:: 1.8.0 - - This module will likely be removed in Stem 2.0 due to lack of usage. If you - use this modle please `let me know `_. -""" - -import mimetypes -import os -import tarfile -import threading - -try: - import queue -except ImportError: - import Queue as queue - -import stem.descriptor -import stem.prereq -import stem.util -import stem.util.str_tools -import stem.util.system - -# flag to indicate when the reader thread is out of descriptor files to read -FINISHED = 'DONE' - - -class FileSkipped(Exception): - "Base error when we can't provide descriptor data from a file." - - -class AlreadyRead(FileSkipped): - """ - Already read a file with this 'last modified' timestamp or later. - - :param int last_modified: unix timestamp for when the file was last modified - :param int last_modified_when_read: unix timestamp for the modification time - when we last read this file - """ - - def __init__(self, last_modified, last_modified_when_read): - super(AlreadyRead, self).__init__('File has already been read since it was last modified. modification time: %s, last read: %s' % (last_modified, last_modified_when_read)) - self.last_modified = last_modified - self.last_modified_when_read = last_modified_when_read - - -class ParsingFailure(FileSkipped): - """ - File contents could not be parsed as descriptor data. - - :param ValueError exception: issue that arose when parsing - """ - - def __init__(self, parsing_exception): - super(ParsingFailure, self).__init__(parsing_exception) - self.exception = parsing_exception - - -class UnrecognizedType(FileSkipped): - """ - File doesn't contain descriptor data. This could either be due to its file - type or because it doesn't conform to a recognizable descriptor type. - - :param tuple mime_type: the (type, encoding) tuple provided by mimetypes.guess_type() - """ - - def __init__(self, mime_type): - super(UnrecognizedType, self).__init__('Unrecognized mime type: %s (%s)' % mime_type) - self.mime_type = mime_type - - -class ReadFailed(FileSkipped): - """ - An IOError occurred while trying to read the file. - - :param IOError exception: issue that arose when reading the file, **None** if - this arose due to the file not being present - """ - - def __init__(self, read_exception): - super(ReadFailed, self).__init__(read_exception) - self.exception = read_exception - - -class FileMissing(ReadFailed): - 'File does not exist.' - - def __init__(self): - super(FileMissing, self).__init__('File does not exist') - - -def load_processed_files(path): - """ - Loads a dictionary of 'path => last modified timestamp' mappings, as - persisted by :func:`~stem.descriptor.reader.save_processed_files`, from a - file. - - :param str path: location to load the processed files dictionary from - - :returns: **dict** of 'path (**str**) => last modified unix timestamp - (**int**)' mappings - - :raises: - * **IOError** if unable to read the file - * **TypeError** if unable to parse the file's contents - """ - - processed_files = {} - - with open(path, 'rb') as input_file: - for line in input_file.readlines(): - line = stem.util.str_tools._to_unicode(line.strip()) - - if not line: - continue # skip blank lines - - if ' ' not in line: - raise TypeError('Malformed line: %s' % line) - - path, timestamp = line.rsplit(' ', 1) - - if not os.path.isabs(path): - raise TypeError("'%s' is not an absolute path" % path) - elif not timestamp.isdigit(): - raise TypeError("'%s' is not an integer timestamp" % timestamp) - - processed_files[path] = int(timestamp) - - return processed_files - - -def save_processed_files(path, processed_files): - """ - Persists a dictionary of 'path => last modified timestamp' mappings (as - provided by the DescriptorReader's - :func:`~stem.descriptor.reader.DescriptorReader.get_processed_files` method) - so that they can be loaded later and applied to another - :class:`~stem.descriptor.reader.DescriptorReader`. - - :param str path: location to save the processed files dictionary to - :param dict processed_files: 'path => last modified' mappings - - :raises: - * **IOError** if unable to write to the file - * **TypeError** if processed_files is of the wrong type - """ - - # makes the parent directory if it doesn't already exist - - try: - path_dir = os.path.dirname(path) - - if not os.path.exists(path_dir): - os.makedirs(path_dir) - except OSError as exc: - raise IOError(exc) - - with open(path, 'w') as output_file: - for path, timestamp in list(processed_files.items()): - if not os.path.isabs(path): - raise TypeError('Only absolute paths are acceptable: %s' % path) - - output_file.write('%s %i\n' % (path, timestamp)) - - -class DescriptorReader(object): - """ - Iterator for the descriptor data on the local file system. This can process - text files, tarball archives (gzip or bzip2), or recurse directories. - - By default this limits the number of descriptors that we'll read ahead before - waiting for our caller to fetch some of them. This is included to avoid - unbounded memory usage. - - Our persistence_path argument is a convenient method to persist the listing - of files we have processed between runs, however it doesn't allow for error - handling. If you want that then use the - :func:`~stem.descriptor.reader.load_processed_files` and - :func:`~stem.descriptor.reader.save_processed_files` functions instead. - - :param str,list target: path or list of paths for files or directories to be read from - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param bool follow_links: determines if we'll follow symlinks when traversing - directories (requires python 2.6) - :param int buffer_size: descriptors we'll buffer before waiting for some to - be read, this is unbounded if zero - :param str persistence_path: if set we will load and save processed file - listings from this path, errors are ignored - :param stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :param dict kwargs: additional arguments for the descriptor constructor - """ - - def __init__(self, target, validate = False, follow_links = False, buffer_size = 100, persistence_path = None, document_handler = stem.descriptor.DocumentHandler.ENTRIES, **kwargs): - self._targets = [target] if stem.util._is_str(target) else target - - # expand any relative paths we got - - self._targets = list(map(os.path.abspath, self._targets)) - - self._validate = validate - self._follow_links = follow_links - self._persistence_path = persistence_path - self._document_handler = document_handler - self._kwargs = kwargs - self._read_listeners = [] - self._skip_listeners = [] - self._processed_files = {} - - self._reader_thread = None - self._reader_thread_lock = threading.RLock() - - self._iter_lock = threading.RLock() - self._iter_notice = threading.Event() - - self._is_stopped = threading.Event() - self._is_stopped.set() - - # Descriptors that we have read but not yet provided to the caller. A - # FINISHED entry is used by the reading thread to indicate the end. - - self._unreturned_descriptors = queue.Queue(buffer_size) - - if self._persistence_path: - try: - processed_files = load_processed_files(self._persistence_path) - self.set_processed_files(processed_files) - except: - pass - - def get_processed_files(self): - """ - For each file that we have read descriptor data from this provides a - mapping of the form... - - :: - - absolute path (str) => last modified unix timestamp (int) - - This includes entries set through the - :func:`~stem.descriptor.reader.DescriptorReader.set_processed_files` - method. Each run resets this to only the files that were present during - that run. - - :returns: **dict** with the absolute paths and unix timestamp for the last - modified times of the files we have processed - """ - - # make sure that we only provide back absolute paths - return dict((os.path.abspath(k), v) for (k, v) in list(self._processed_files.items())) - - def set_processed_files(self, processed_files): - """ - Sets the listing of the files we have processed. Most often this is used - with a newly created :class:`~stem.descriptor.reader.DescriptorReader` to - pre-populate the listing of descriptor files that we have seen. - - :param dict processed_files: mapping of absolute paths (**str**) to unix - timestamps for the last modified time (**int**) - """ - - self._processed_files = dict(processed_files) - - def register_read_listener(self, listener): - """ - Registers a listener for when files are read. This is executed prior to - processing files. Listeners are expected to be of the form... - - :: - - my_listener(path) - - :param functor listener: functor to be notified when files are read - """ - - self._read_listeners.append(listener) - - def register_skip_listener(self, listener): - """ - Registers a listener for files that are skipped. This listener is expected - to be a functor of the form... - - :: - - my_listener(path, exception) - - :param functor listener: functor to be notified of files that are skipped - to read errors or because they couldn't be parsed as valid descriptor data - """ - - self._skip_listeners.append(listener) - - def get_buffered_descriptor_count(self): - """ - Provides the number of descriptors that are waiting to be iterated over. - This is limited to the buffer_size that we were constructed with. - - :returns: **int** for the estimated number of currently enqueued - descriptors, this is not entirely reliable - """ - - return self._unreturned_descriptors.qsize() - - def start(self): - """ - Starts reading our descriptor files. - - :raises: **ValueError** if we're already reading the descriptor files - """ - - with self._reader_thread_lock: - if self._reader_thread: - raise ValueError('Already running, you need to call stop() first') - else: - self._is_stopped.clear() - self._reader_thread = threading.Thread(target = self._read_descriptor_files, name='Descriptor reader') - self._reader_thread.setDaemon(True) - self._reader_thread.start() - - def stop(self): - """ - Stops further reading of descriptor files. - """ - - with self._reader_thread_lock: - self._is_stopped.set() - self._iter_notice.set() - - # clears our queue to unblock enqueue calls - - try: - while True: - self._unreturned_descriptors.get_nowait() - except queue.Empty: - pass - - self._reader_thread.join() - self._reader_thread = None - - if self._persistence_path: - try: - processed_files = self.get_processed_files() - save_processed_files(self._persistence_path, processed_files) - except: - pass - - def _read_descriptor_files(self): - new_processed_files = {} - remaining_files = list(self._targets) - - while remaining_files and not self._is_stopped.is_set(): - target = remaining_files.pop(0) - - if not os.path.exists(target): - self._notify_skip_listeners(target, FileMissing()) - continue - - if os.path.isdir(target): - walker = os.walk(target, followlinks = self._follow_links) - self._handle_walker(walker, new_processed_files) - else: - self._handle_file(target, new_processed_files) - - self._processed_files = new_processed_files - - if not self._is_stopped.is_set(): - self._unreturned_descriptors.put(FINISHED) - - self._iter_notice.set() - - def __iter__(self): - with self._iter_lock: - while not self._is_stopped.is_set(): - try: - descriptor = self._unreturned_descriptors.get_nowait() - - if descriptor == FINISHED: - break - else: - yield descriptor - except queue.Empty: - self._iter_notice.wait() - self._iter_notice.clear() - - def _handle_walker(self, walker, new_processed_files): - for root, _, files in walker: - for filename in files: - self._handle_file(os.path.join(root, filename), new_processed_files) - - # this can take a while if, say, we're including the root directory - if self._is_stopped.is_set(): - return - - def _handle_file(self, target, new_processed_files): - # This is a file. Register its last modified timestamp and check if - # it's a file that we should skip. - - try: - last_modified = int(os.stat(target).st_mtime) - last_used = self._processed_files.get(target) - new_processed_files[target] = last_modified - except OSError as exc: - self._notify_skip_listeners(target, ReadFailed(exc)) - return - - if last_used and last_used >= last_modified: - self._notify_skip_listeners(target, AlreadyRead(last_modified, last_used)) - return - - # Block devices and such are never descriptors, and can cause us to block - # for quite a while so skipping anything that isn't a regular file. - - if not os.path.isfile(target): - return - - # The mimetypes module only checks the file extension. To actually - # check the content (like the 'file' command) we'd need something like - # pymagic (https://github.com/cloudburst/pymagic). - - target_type = mimetypes.guess_type(target) - - if target_type[0] in (None, 'text/plain'): - # either '.txt' or an unknown type - self._handle_descriptor_file(target, target_type) - elif stem.util.system.is_tarfile(target): - # handles gzip, bz2, and decompressed tarballs among others - self._handle_archive(target) - else: - self._notify_skip_listeners(target, UnrecognizedType(target_type)) - - def _handle_descriptor_file(self, target, mime_type): - try: - self._notify_read_listeners(target) - - with open(target, 'rb') as target_file: - for desc in stem.descriptor.parse_file(target_file, validate = self._validate, document_handler = self._document_handler, **self._kwargs): - if self._is_stopped.is_set(): - return - - self._unreturned_descriptors.put(desc) - self._iter_notice.set() - except TypeError: - self._notify_skip_listeners(target, UnrecognizedType(mime_type)) - except ValueError as exc: - self._notify_skip_listeners(target, ParsingFailure(exc)) - except IOError as exc: - self._notify_skip_listeners(target, ReadFailed(exc)) - - def _handle_archive(self, target): - # TODO: When dropping python 2.6 support go back to using 'with' for - # tarfiles... - # - # http://bugs.python.org/issue7232 - - tar_file = None - - try: - self._notify_read_listeners(target) - tar_file = tarfile.open(target) - - for tar_entry in tar_file: - if tar_entry.isfile(): - entry = tar_file.extractfile(tar_entry) - - try: - for desc in stem.descriptor.parse_file(entry, validate = self._validate, document_handler = self._document_handler, **self._kwargs): - if self._is_stopped.is_set(): - return - - desc._set_path(os.path.abspath(target)) - desc._set_archive_path(tar_entry.name) - self._unreturned_descriptors.put(desc) - self._iter_notice.set() - except TypeError as exc: - self._notify_skip_listeners(target, ParsingFailure(exc)) - except ValueError as exc: - self._notify_skip_listeners(target, ParsingFailure(exc)) - finally: - entry.close() - except IOError as exc: - self._notify_skip_listeners(target, ReadFailed(exc)) - finally: - if tar_file: - tar_file.close() - - def _notify_read_listeners(self, path): - for listener in self._read_listeners: - listener(path) - - def _notify_skip_listeners(self, path, exception): - for listener in self._skip_listeners: - listener(path, exception) - - def __enter__(self): - self.start() - return self - - def __exit__(self, exit_type, value, traceback): - self.stop() diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/remote.py b/myenv/lib/python3.12/site-packages/stem/descriptor/remote.py deleted file mode 100644 index 8263451..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/remote.py +++ /dev/null @@ -1,1170 +0,0 @@ -# Copyright 2013-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Module for remotely retrieving descriptors from directory authorities and -mirrors. This is the simplest method for getting current tor descriptor -information... - -:: - - import stem.descriptor.remote - - for desc in stem.descriptor.remote.get_server_descriptors(): - if desc.exit_policy.is_exiting_allowed(): - print(' %s (%s)' % (desc.nickname, desc.fingerprint)) - -More custom downloading behavior can be done through the -:class:`~stem.descriptor.remote.DescriptorDownloader` class, which issues -:class:`~stem.descriptor.remote.Query` instances to get you descriptor -content. For example... - -:: - - from stem.descriptor.remote import DescriptorDownloader - - downloader = DescriptorDownloader( - use_mirrors = True, - timeout = 10, - ) - - query = downloader.get_server_descriptors() - - print('Exit Relays:') - - try: - for desc in query.run(): - if desc.exit_policy.is_exiting_allowed(): - print(' %s (%s)' % (desc.nickname, desc.fingerprint)) - - print - print('Query took %0.2f seconds' % query.runtime) - except Exception as exc: - print('Unable to retrieve the server descriptors: %s' % exc) - -:: - - get_instance - Provides a singleton DescriptorDownloader used for... - |- their_server_descriptor - provides the server descriptor of the relay we download from - |- get_server_descriptors - provides present server descriptors - |- get_extrainfo_descriptors - provides present extrainfo descriptors - |- get_microdescriptors - provides present microdescriptors with the given digests - |- get_consensus - provides the present consensus or router status entries - |- get_bandwidth_file - provides bandwidth heuristics used to make the next consensus - +- get_detached_signatures - authority signatures used to make the next consensus - - Query - Asynchronous request to download tor descriptors - |- start - issues the query if it isn't already running - +- run - blocks until the request is finished and provides the results - - DescriptorDownloader - Configurable class for issuing queries - |- use_directory_mirrors - use directory mirrors to download future descriptors - |- their_server_descriptor - provides the server descriptor of the relay we download from - |- get_server_descriptors - provides present server descriptors - |- get_extrainfo_descriptors - provides present extrainfo descriptors - |- get_microdescriptors - provides present microdescriptors with the given digests - |- get_consensus - provides the present consensus or router status entries - |- get_vote - provides an authority's vote for the next consensus - |- get_key_certificates - provides present authority key certificates - |- get_bandwidth_file - provides bandwidth heuristics used to make the next consensus - |- get_detached_signatures - authority signatures used to make the next consensus - +- query - request an arbitrary descriptor resource - -.. versionadded:: 1.1.0 - -.. data:: MAX_FINGERPRINTS - - Maximum number of descriptors that can requested at a time by their - fingerprints. - -.. data:: MAX_MICRODESCRIPTOR_HASHES - - Maximum number of microdescriptors that can requested at a time by their - hashes. - -.. data:: Compression (enum) - - Compression when downloading descriptors. - - .. versionadded:: 1.7.0 - - =============== =========== - Compression Description - =============== =========== - **PLAINTEXT** Uncompressed data. - **GZIP** `GZip compression `_. - **ZSTD** `Zstandard compression `_, this requires the `zstandard module `_. - **LZMA** `LZMA compression `_, this requires the 'lzma module `_. - =============== =========== -""" - -import io -import random -import socket -import sys -import threading -import time - -import stem -import stem.client -import stem.descriptor -import stem.descriptor.networkstatus -import stem.directory -import stem.prereq -import stem.util.enum -import stem.util.tor_tools - -from stem.util import log, str_tools - -try: - # account for urllib's change between python 2.x and 3.x - import urllib.request as urllib -except ImportError: - import urllib2 as urllib - -# TODO: remove in stem 2.x, replaced with stem.descriptor.Compression - -Compression = stem.util.enum.Enum( - ('PLAINTEXT', 'identity'), - ('GZIP', 'gzip'), # can also be 'deflate' - ('ZSTD', 'x-zstd'), - ('LZMA', 'x-tor-lzma'), -) - -COMPRESSION_MIGRATION = { - 'identity': stem.descriptor.Compression.PLAINTEXT, - 'gzip': stem.descriptor.Compression.GZIP, - 'x-zstd': stem.descriptor.Compression.ZSTD, - 'x-tor-lzma': stem.descriptor.Compression.LZMA, -} - -# Tor has a limited number of descriptors we can fetch explicitly by their -# fingerprint or hashes due to a limit on the url length by squid proxies. - -MAX_FINGERPRINTS = 96 -MAX_MICRODESCRIPTOR_HASHES = 90 - -SINGLETON_DOWNLOADER = None - -# Detached signatures do *not* have a specified type annotation. But our -# parsers expect that all descriptors have a type. As such making one up. -# This may change in the future if these ever get an official @type. -# -# https://trac.torproject.org/projects/tor/ticket/28615 - -DETACHED_SIGNATURE_TYPE = 'detached-signature' - -# Some authorities intentionally break their DirPort to discourage DOS. In -# particular they throttle the rate to such a degree that requests can take -# hours to complete. Unfortunately Python's socket timeouts only kick in -# when we stop receiving data, so these 'sandtraps' cause our downloads to -# hang pretty much indefinitely. -# -# Best we can do is simply avoid attempting to use them in the first place. - -DIR_PORT_BLACKLIST = ('tor26', 'Serge') - - -def get_instance(): - """ - Provides the singleton :class:`~stem.descriptor.remote.DescriptorDownloader` - used for this module's shorthand functions. - - .. versionadded:: 1.5.0 - - :returns: singleton :class:`~stem.descriptor.remote.DescriptorDownloader` instance - """ - - global SINGLETON_DOWNLOADER - - if SINGLETON_DOWNLOADER is None: - SINGLETON_DOWNLOADER = DescriptorDownloader() - - return SINGLETON_DOWNLOADER - - -def their_server_descriptor(**query_args): - """ - Provides the server descriptor of the relay we're downloading from. - - .. versionadded:: 1.7.0 - - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the server descriptors - """ - - return get_instance().their_server_descriptor(**query_args) - - -def get_server_descriptors(fingerprints = None, **query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_server_descriptors` - on our singleton instance. - - .. versionadded:: 1.5.0 - """ - - return get_instance().get_server_descriptors(fingerprints, **query_args) - - -def get_extrainfo_descriptors(fingerprints = None, **query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_extrainfo_descriptors` - on our singleton instance. - - .. versionadded:: 1.5.0 - """ - - return get_instance().get_extrainfo_descriptors(fingerprints, **query_args) - - -def get_microdescriptors(hashes, **query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_microdescriptors` - on our singleton instance. - - .. versionadded:: 1.8.0 - """ - - return get_instance().get_microdescriptors(hashes, **query_args) - - -def get_consensus(authority_v3ident = None, microdescriptor = False, **query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_consensus` - on our singleton instance. - - .. versionadded:: 1.5.0 - """ - - return get_instance().get_consensus(authority_v3ident, microdescriptor, **query_args) - - -def get_bandwidth_file(**query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_bandwidth_file` - on our singleton instance. - - .. versionadded:: 1.8.0 - """ - - return get_instance().get_bandwidth_file(**query_args) - - -def get_detached_signatures(**query_args): - """ - Shorthand for - :func:`~stem.descriptor.remote.DescriptorDownloader.get_detached_signatures` - on our singleton instance. - - .. versionadded:: 1.8.0 - """ - - return get_instance().get_detached_signatures(**query_args) - - -class Query(object): - """ - Asynchronous request for descriptor content from a directory authority or - mirror. These can either be made through the - :class:`~stem.descriptor.remote.DescriptorDownloader` or directly for more - advanced usage. - - To block on the response and get results either call - :func:`~stem.descriptor.remote.Query.run` or iterate over the Query. The - :func:`~stem.descriptor.remote.Query.run` method pass along any errors that - arise... - - :: - - from stem.descriptor.remote import Query - - query = Query( - '/tor/server/all', - timeout = 30, - ) - - print('Current relays:') - - try: - for desc in Query('/tor/server/all', 'server-descriptor 1.0').run(): - print(desc.fingerprint) - except Exception as exc: - print('Unable to retrieve the server descriptors: %s' % exc) - - ... while iterating fails silently... - - :: - - print('Current relays:') - - for desc in Query('/tor/server/all', 'server-descriptor 1.0'): - print(desc.fingerprint) - - In either case exceptions are available via our 'error' attribute. - - Tor provides quite a few different descriptor resources via its directory - protocol (see section 4.2 and later of the `dir-spec - `_). - Commonly useful ones include... - - =============================================== =========== - Resource Description - =============================================== =========== - /tor/server/all all present server descriptors - /tor/server/fp/++ server descriptors with the given fingerprints - /tor/extra/all all present extrainfo descriptors - /tor/extra/fp/++ extrainfo descriptors with the given fingerprints - /tor/micro/d/- microdescriptors with the given hashes - /tor/status-vote/current/consensus present consensus - /tor/status-vote/current/consensus-microdesc present microdescriptor consensus - /tor/status-vote/next/bandwidth bandwidth authority heuristics for the next consenus - /tor/status-vote/next/consensus-signatures detached signature, used for making the next consenus - /tor/keys/all key certificates for the authorities - /tor/keys/fp/+ key certificates for specific authorities - =============================================== =========== - - **ZSTD** compression requires `zstandard - `_, and **LZMA** requires the `lzma - module `_. - - For legacy reasons if our resource has a '.z' suffix then our **compression** - argument is overwritten with Compression.GZIP. - - .. versionchanged:: 1.7.0 - Added support for downloading from ORPorts. - - .. versionchanged:: 1.7.0 - Added the compression argument. - - .. versionchanged:: 1.7.0 - Added the reply_headers attribute. - - The class this provides changed between Python versions. In python2 - this was called httplib.HTTPMessage, whereas in python3 the class was - renamed to http.client.HTTPMessage. - - .. versionchanged:: 1.7.0 - Endpoints are now expected to be :class:`~stem.DirPort` or - :class:`~stem.ORPort` instances. Usage of tuples for this - argument is deprecated and will be removed in the future. - - .. versionchanged:: 1.7.0 - Avoid downloading from tor26. This directory authority throttles its - DirPort to such an extent that requests either time out or take on the - order of minutes. - - .. versionchanged:: 1.7.0 - Avoid downloading from Bifroest. This is the bridge authority so it - doesn't vote in the consensus, and apparently times out frequently. - - .. versionchanged:: 1.8.0 - Serge has replaced Bifroest as our bridge authority. Avoiding descriptor - downloads from it instead. - - .. versionchanged:: 1.8.0 - Defaulting to gzip compression rather than plaintext downloads. - - .. versionchanged:: 1.8.0 - Using :class:`~stem.descriptor.__init__.Compression` for our compression - argument, usage of strings or this module's Compression enum is deprecated - and will be removed in stem 2.x. - - :var str resource: resource being fetched, such as '/tor/server/all' - :var str descriptor_type: type of descriptors being fetched (for options see - :func:`~stem.descriptor.__init__.parse_file`), this is guessed from the - resource if **None** - - :var list endpoints: :class:`~stem.DirPort` or :class:`~stem.ORPort` of the - authority or mirror we're querying, this uses authorities if undefined - :var list compression: list of :data:`stem.descriptor.Compression` - we're willing to accept, when none are mutually supported downloads fall - back to Compression.PLAINTEXT - :var int retries: number of times to attempt the request if downloading it - fails - :var bool fall_back_to_authority: when retrying request issues the last - request to a directory authority if **True** - - :var str content: downloaded descriptor content - :var Exception error: exception if a problem occured - :var bool is_done: flag that indicates if our request has finished - - :var float start_time: unix timestamp when we first started running - :var http.client.HTTPMessage reply_headers: headers provided in the response, - **None** if we haven't yet made our request - :var float runtime: time our query took, this is **None** if it's not yet - finished - - :var bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :var stem.descriptor.__init__.DocumentHandler document_handler: method in - which to parse a :class:`~stem.descriptor.networkstatus.NetworkStatusDocument` - :var dict kwargs: additional arguments for the descriptor constructor - - Following are only applicable when downloading from a - :class:`~stem.DirPort`... - - :var float timeout: duration before we'll time out our request - :var str download_url: last url used to download the descriptor, this is - unset until we've actually made a download attempt - - :param bool start: start making the request when constructed (default is **True**) - :param bool block: only return after the request has been completed, this is - the same as running **query.run(True)** (default is **False**) - """ - - def __init__(self, resource, descriptor_type = None, endpoints = None, compression = (Compression.GZIP,), retries = 2, fall_back_to_authority = False, timeout = None, start = True, block = False, validate = False, document_handler = stem.descriptor.DocumentHandler.ENTRIES, **kwargs): - if not resource.startswith('/'): - raise ValueError("Resources should start with a '/': %s" % resource) - - if resource.endswith('.z'): - compression = [Compression.GZIP] - resource = resource[:-2] - elif not compression: - compression = [Compression.PLAINTEXT] - else: - if isinstance(compression, str): - compression = [compression] # caller provided only a single option - - if Compression.ZSTD in compression and not stem.prereq.is_zstd_available(): - compression.remove(Compression.ZSTD) - - if Compression.LZMA in compression and not stem.prereq.is_lzma_available(): - compression.remove(Compression.LZMA) - - if not compression: - compression = [Compression.PLAINTEXT] - - # TODO: Normalize from our old compression enum to - # stem.descriptor.Compression. This will get removed in Stem 2.x. - - new_compression = [] - - for legacy_compression in compression: - if isinstance(legacy_compression, stem.descriptor._Compression): - new_compression.append(legacy_compression) - elif legacy_compression in COMPRESSION_MIGRATION: - new_compression.append(COMPRESSION_MIGRATION[legacy_compression]) - else: - raise ValueError("'%s' (%s) is not a recognized type of compression" % (legacy_compression, type(legacy_compression).__name__)) - - if descriptor_type: - self.descriptor_type = descriptor_type - else: - self.descriptor_type = _guess_descriptor_type(resource) - - self.endpoints = [] - - if endpoints: - for endpoint in endpoints: - if isinstance(endpoint, tuple) and len(endpoint) == 2: - self.endpoints.append(stem.DirPort(endpoint[0], endpoint[1])) # TODO: remove this in stem 2.0 - elif isinstance(endpoint, (stem.ORPort, stem.DirPort)): - self.endpoints.append(endpoint) - else: - raise ValueError("Endpoints must be an stem.ORPort, stem.DirPort, or two value tuple. '%s' is a %s." % (endpoint, type(endpoint).__name__)) - - self.resource = resource - self.compression = new_compression - self.retries = retries - self.fall_back_to_authority = fall_back_to_authority - - self.content = None - self.error = None - self.is_done = False - self.download_url = None - - self.start_time = None - self.timeout = timeout - self.runtime = None - - self.validate = validate - self.document_handler = document_handler - self.reply_headers = None - self.kwargs = kwargs - - self._downloader_thread = None - self._downloader_thread_lock = threading.RLock() - - if start: - self.start() - - if block: - self.run(True) - - def start(self): - """ - Starts downloading the scriptors if we haven't started already. - """ - - with self._downloader_thread_lock: - if self._downloader_thread is None: - self._downloader_thread = threading.Thread( - name = 'Descriptor query', - target = self._download_descriptors, - args = (self.retries, self.timeout) - ) - - self._downloader_thread.setDaemon(True) - self._downloader_thread.start() - - def run(self, suppress = False): - """ - Blocks until our request is complete then provides the descriptors. If we - haven't yet started our request then this does so. - - :param bool suppress: avoids raising exceptions if **True** - - :returns: list for the requested :class:`~stem.descriptor.__init__.Descriptor` instances - - :raises: - Using the iterator can fail with the following if **suppress** is - **False**... - - * **ValueError** if the descriptor contents is malformed - * :class:`~stem.DownloadTimeout` if our request timed out - * :class:`~stem.DownloadFailed` if our request fails - """ - - return list(self._run(suppress)) - - def _run(self, suppress): - with self._downloader_thread_lock: - self.start() - self._downloader_thread.join() - - if self.error: - if suppress: - return - - raise self.error - else: - if self.content is None: - if suppress: - return - - raise ValueError('BUG: _download_descriptors() finished without either results or an error') - - try: - # TODO: special handling until we have an official detatched - # signature @type... - # - # https://trac.torproject.org/projects/tor/ticket/28615 - - if self.descriptor_type.startswith(DETACHED_SIGNATURE_TYPE): - results = stem.descriptor.networkstatus._parse_file_detached_sigs( - io.BytesIO(self.content), - validate = self.validate, - ) - else: - results = stem.descriptor.parse_file( - io.BytesIO(self.content), - self.descriptor_type, - validate = self.validate, - document_handler = self.document_handler, - **self.kwargs - ) - - for desc in results: - yield desc - except ValueError as exc: - self.error = exc # encountered a parsing error - - if suppress: - return - - raise self.error - - def __iter__(self): - for desc in self._run(True): - yield desc - - def _pick_endpoint(self, use_authority = False): - """ - Provides an endpoint to query. If we have multiple endpoints then one - is picked at random. - - :param bool use_authority: ignores our endpoints and uses a directory - authority instead - - :returns: :class:`stem.Endpoint` for the location to be downloaded - from by this request - """ - - if use_authority or not self.endpoints: - picked = random.choice([auth for auth in stem.directory.Authority.from_cache().values() if auth.nickname not in DIR_PORT_BLACKLIST]) - return stem.DirPort(picked.address, picked.dir_port) - else: - return random.choice(self.endpoints) - - def _download_descriptors(self, retries, timeout): - try: - self.start_time = time.time() - endpoint = self._pick_endpoint(use_authority = retries == 0 and self.fall_back_to_authority) - - if isinstance(endpoint, stem.ORPort): - downloaded_from = 'ORPort %s:%s (resource %s)' % (endpoint.address, endpoint.port, self.resource) - self.content, self.reply_headers = _download_from_orport(endpoint, self.compression, self.resource) - elif isinstance(endpoint, stem.DirPort): - self.download_url = 'http://%s:%i/%s' % (endpoint.address, endpoint.port, self.resource.lstrip('/')) - downloaded_from = self.download_url - self.content, self.reply_headers = _download_from_dirport(self.download_url, self.compression, timeout) - else: - raise ValueError("BUG: endpoints can only be ORPorts or DirPorts, '%s' was a %s" % (endpoint, type(endpoint).__name__)) - - self.runtime = time.time() - self.start_time - log.trace('Descriptors retrieved from %s in %0.2fs' % (downloaded_from, self.runtime)) - except: - exc = sys.exc_info()[1] - - if timeout is not None: - timeout -= time.time() - self.start_time - - if retries > 0 and (timeout is None or timeout > 0): - log.debug("Unable to download descriptors from '%s' (%i retries remaining): %s" % (self.download_url, retries, exc)) - return self._download_descriptors(retries - 1, timeout) - else: - log.debug("Unable to download descriptors from '%s': %s" % (self.download_url, exc)) - self.error = exc - finally: - self.is_done = True - - -class DescriptorDownloader(object): - """ - Configurable class that issues :class:`~stem.descriptor.remote.Query` - instances on your behalf. - - :param bool use_mirrors: downloads the present consensus and uses the directory - mirrors to fetch future requests, this fails silently if the consensus - cannot be downloaded - :param default_args: default arguments for the - :class:`~stem.descriptor.remote.Query` constructor - """ - - def __init__(self, use_mirrors = False, **default_args): - self._default_args = default_args - - self._endpoints = None - - if use_mirrors: - try: - start_time = time.time() - self.use_directory_mirrors() - log.debug('Retrieved directory mirrors (took %0.2fs)' % (time.time() - start_time)) - except Exception as exc: - log.debug('Unable to retrieve directory mirrors: %s' % exc) - - def use_directory_mirrors(self): - """ - Downloads the present consensus and configures ourselves to use directory - mirrors, in addition to authorities. - - :returns: :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3` - from which we got the directory mirrors - - :raises: **Exception** if unable to determine the directory mirrors - """ - - directories = [auth for auth in stem.directory.Authority.from_cache().values() if auth.nickname not in DIR_PORT_BLACKLIST] - new_endpoints = set([(directory.address, directory.dir_port) for directory in directories]) - - consensus = list(self.get_consensus(document_handler = stem.descriptor.DocumentHandler.DOCUMENT).run())[0] - - for desc in consensus.routers.values(): - if stem.Flag.V2DIR in desc.flags and desc.dir_port: - new_endpoints.add((desc.address, desc.dir_port)) - - # we need our endpoints to be a list rather than set for random.choice() - - self._endpoints = list(new_endpoints) - - return consensus - - def their_server_descriptor(self, **query_args): - """ - Provides the server descriptor of the relay we're downloading from. - - .. versionadded:: 1.7.0 - - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the server descriptors - """ - - return self.query('/tor/server/authority', **query_args) - - def get_server_descriptors(self, fingerprints = None, **query_args): - """ - Provides the server descriptors with the given fingerprints. If no - fingerprints are provided then this returns all descriptors known - by the relay. - - :param str,list fingerprints: fingerprint or list of fingerprints to be - retrieved, gets all descriptors if **None** - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the server descriptors - - :raises: **ValueError** if we request more than 96 descriptors by their - fingerprints (this is due to a limit on the url length by squid proxies). - """ - - resource = '/tor/server/all' - - if isinstance(fingerprints, str): - fingerprints = [fingerprints] - - if fingerprints: - if len(fingerprints) > MAX_FINGERPRINTS: - raise ValueError('Unable to request more than %i descriptors at a time by their fingerprints' % MAX_FINGERPRINTS) - - resource = '/tor/server/fp/%s' % '+'.join(fingerprints) - - return self.query(resource, **query_args) - - def get_extrainfo_descriptors(self, fingerprints = None, **query_args): - """ - Provides the extrainfo descriptors with the given fingerprints. If no - fingerprints are provided then this returns all descriptors in the present - consensus. - - :param str,list fingerprints: fingerprint or list of fingerprints to be - retrieved, gets all descriptors if **None** - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the extrainfo descriptors - - :raises: **ValueError** if we request more than 96 descriptors by their - fingerprints (this is due to a limit on the url length by squid proxies). - """ - - resource = '/tor/extra/all' - - if isinstance(fingerprints, str): - fingerprints = [fingerprints] - - if fingerprints: - if len(fingerprints) > MAX_FINGERPRINTS: - raise ValueError('Unable to request more than %i descriptors at a time by their fingerprints' % MAX_FINGERPRINTS) - - resource = '/tor/extra/fp/%s' % '+'.join(fingerprints) - - return self.query(resource, **query_args) - - def get_microdescriptors(self, hashes, **query_args): - """ - Provides the microdescriptors with the given hashes. To get these see the - **microdescriptor_digest** attribute of - :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3`. - Note that these are only provided via the **microdescriptor consensus**. - For exampe... - - :: - - >>> import stem.descriptor.remote - >>> consensus = stem.descriptor.remote.get_consensus(microdescriptor = True).run() - >>> my_router_status_entry = list(filter(lambda desc: desc.nickname == 'caersidi', consensus))[0] - >>> print(my_router_status_entry.microdescriptor_digest) - IQI5X2A5p0WVN/MgwncqOaHF2f0HEGFEaxSON+uKRhU - - >>> my_microdescriptor = stem.descriptor.remote.get_microdescriptors([my_router_status_entry.microdescriptor_digest]).run()[0] - >>> print(my_microdescriptor) - onion-key - -----BEGIN RSA PUBLIC KEY----- - MIGJAoGBAOJo9yyVgG8ksEHQibqPIEbLieI6rh1EACRPiDiV21YObb+9QEHaR3Cf - FNAzDbGhbvADLBB7EzuViL8w+eXQUOaIsJRdymh/wuUJ78bv5oEIJhthKq/Uqa4P - wKHXSZixwAHfy8NASTX3kxu9dAHWU3Owb+4W4lR2hYM0ZpoYYkThAgMBAAE= - -----END RSA PUBLIC KEY----- - ntor-onion-key kWOHNd+2uBlMpcIUbbpFLiq/rry66Ep6MlwmNpwzcBg= - id ed25519 xE/GeYImYAIB0RbzJXFL8kDLpDrj/ydCuCdvOgC4F/4 - - :param str,list hashes: microdescriptor hash or list of hashes to be - retrieved - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the microdescriptors - - :raises: **ValueError** if we request more than 92 microdescriptors by their - hashes (this is due to a limit on the url length by squid proxies). - """ - - if isinstance(hashes, str): - hashes = [hashes] - - if len(hashes) > MAX_MICRODESCRIPTOR_HASHES: - raise ValueError('Unable to request more than %i microdescriptors at a time by their hashes' % MAX_MICRODESCRIPTOR_HASHES) - - return self.query('/tor/micro/d/%s' % '-'.join(hashes), **query_args) - - def get_consensus(self, authority_v3ident = None, microdescriptor = False, **query_args): - """ - Provides the present router status entries. - - .. versionchanged:: 1.5.0 - Added the microdescriptor argument. - - :param str authority_v3ident: fingerprint of the authority key for which - to get the consensus, see `'v3ident' in tor's config.c - `_ - for the values. - :param bool microdescriptor: provides the microdescriptor consensus if - **True**, standard consensus otherwise - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the router status - entries - """ - - if microdescriptor: - resource = '/tor/status-vote/current/consensus-microdesc' - else: - resource = '/tor/status-vote/current/consensus' - - if authority_v3ident: - resource += '/%s' % authority_v3ident - - consensus_query = self.query(resource, **query_args) - - # if we're performing validation then check that it's signed by the - # authority key certificates - - if consensus_query.validate and consensus_query.document_handler == stem.descriptor.DocumentHandler.DOCUMENT and stem.prereq.is_crypto_available(): - consensus = list(consensus_query.run())[0] - key_certs = self.get_key_certificates(**query_args).run() - consensus.validate_signatures(key_certs) - - return consensus_query - - def get_vote(self, authority, **query_args): - """ - Provides the present vote for a given directory authority. - - :param stem.directory.Authority authority: authority for which to retrieve a vote for - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the router status - entries - """ - - resource = '/tor/status-vote/current/authority' - - if 'endpoint' not in query_args: - query_args['endpoints'] = [(authority.address, authority.dir_port)] - - return self.query(resource, **query_args) - - def get_key_certificates(self, authority_v3idents = None, **query_args): - """ - Provides the key certificates for authorities with the given fingerprints. - If no fingerprints are provided then this returns all present key - certificates. - - :param str authority_v3idents: fingerprint or list of fingerprints of the - authority keys, see `'v3ident' in tor's config.c - `_ - for the values. - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the key certificates - - :raises: **ValueError** if we request more than 96 key certificates by - their identity fingerprints (this is due to a limit on the url length by - squid proxies). - """ - - resource = '/tor/keys/all' - - if isinstance(authority_v3idents, str): - authority_v3idents = [authority_v3idents] - - if authority_v3idents: - if len(authority_v3idents) > MAX_FINGERPRINTS: - raise ValueError('Unable to request more than %i key certificates at a time by their identity fingerprints' % MAX_FINGERPRINTS) - - resource = '/tor/keys/fp/%s' % '+'.join(authority_v3idents) - - return self.query(resource, **query_args) - - def get_bandwidth_file(self, **query_args): - """ - Provides the bandwidth authority heuristics used to make the next - consensus. - - .. versionadded:: 1.8.0 - - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the bandwidth - authority heuristics - """ - - return self.query('/tor/status-vote/next/bandwidth', **query_args) - - def get_detached_signatures(self, **query_args): - """ - Provides the detached signatures that will be used to make the next - consensus. Please note that **these are only available during minutes 55-60 - each hour**. If requested during minutes 0-55 tor will not service these - requests, and this will fail with a 404. - - For example... - - :: - - import stem.descriptor.remote - - detached_sigs = stem.descriptor.remote.get_detached_signatures().run()[0] - - for i, sig in enumerate(detached_sigs.signatures): - print('Signature %i is from %s' % (i + 1, sig.identity)) - - **When available (minutes 55-60 of the hour)** - - :: - - % python demo.py - Signature 1 is from 0232AF901C31A04EE9848595AF9BB7620D4C5B2E - Signature 2 is from 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 - Signature 3 is from 23D15D965BC35114467363C165C4F724B64B4F66 - ... - - **When unavailable (minutes 0-55 of the hour)** - - :: - - % python demo.py - Traceback (most recent call last): - File "demo.py", line 3, in - detached_sigs = stem.descriptor.remote.get_detached_signatures().run()[0] - File "/home/atagar/Desktop/stem/stem/descriptor/remote.py", line 533, in run - return list(self._run(suppress)) - File "/home/atagar/Desktop/stem/stem/descriptor/remote.py", line 544, in _run - raise self.error - stem.DownloadFailed: Failed to download from http://154.35.175.225:80/tor/status-vote/next/consensus-signatures (HTTPError): Not found - - .. versionadded:: 1.8.0 - - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the detached - signatures - """ - - return self.query('/tor/status-vote/next/consensus-signatures', **query_args) - - def query(self, resource, **query_args): - """ - Issues a request for the given resource. - - .. versionchanged:: 1.7.0 - The **fall_back_to_authority** default when using this method is now - **False**, like the :class:`~stem.descriptor.Query` class. - - :param str resource: resource being fetched, such as '/tor/server/all' - :param query_args: additional arguments for the - :class:`~stem.descriptor.remote.Query` constructor - - :returns: :class:`~stem.descriptor.remote.Query` for the descriptors - - :raises: **ValueError** if resource is clearly invalid or the descriptor - type can't be determined when 'descriptor_type' is **None** - """ - - args = dict(self._default_args) - args.update(query_args) - - if 'endpoints' not in args: - args['endpoints'] = self._endpoints - - return Query(resource, **args) - - -def _download_from_orport(endpoint, compression, resource): - """ - Downloads descriptors from the given orport. Payload is just like an http - response (headers and all)... - - :: - - HTTP/1.0 200 OK - Date: Mon, 23 Apr 2018 18:43:47 GMT - Content-Type: text/plain - X-Your-Address-Is: 216.161.254.25 - Content-Encoding: identity - Expires: Wed, 25 Apr 2018 18:43:47 GMT - - router dannenberg 193.23.244.244 443 0 80 - identity-ed25519 - ... rest of the descriptor content... - - :param stem.ORPort endpoint: endpoint to download from - :param list compression: compression methods for the request - :param str resource: descriptor resource to download - - :returns: two value tuple of the form (data, reply_headers) - - :raises: - * :class:`stem.ProtocolError` if not a valid descriptor response - * :class:`stem.SocketError` if unable to establish a connection - """ - - link_protocols = endpoint.link_protocols if endpoint.link_protocols else [3] - - with stem.client.Relay.connect(endpoint.address, endpoint.port, link_protocols) as relay: - with relay.create_circuit() as circ: - request = '\r\n'.join(( - 'GET %s HTTP/1.0' % resource, - 'Accept-Encoding: %s' % ', '.join(map(lambda c: c.encoding, compression)), - 'User-Agent: %s' % stem.USER_AGENT, - )) + '\r\n\r\n' - - response = circ.directory(request, stream_id = 1) - first_line, data = response.split(b'\r\n', 1) - header_data, body_data = data.split(b'\r\n\r\n', 1) - - if not first_line.startswith(b'HTTP/1.0 2'): - raise stem.ProtocolError("Response should begin with HTTP success, but was '%s'" % str_tools._to_unicode(first_line)) - - headers = {} - - for line in str_tools._to_unicode(header_data).splitlines(): - if ': ' not in line: - raise stem.ProtocolError("'%s' is not a HTTP header:\n\n%s" % line) - - key, value = line.split(': ', 1) - headers[key] = value - - return _decompress(body_data, headers.get('Content-Encoding')), headers - - -def _download_from_dirport(url, compression, timeout): - """ - Downloads descriptors from the given url. - - :param str url: dirport url from which to download from - :param list compression: compression methods for the request - :param float timeout: duration before we'll time out our request - - :returns: two value tuple of the form (data, reply_headers) - - :raises: - * :class:`~stem.DownloadTimeout` if our request timed out - * :class:`~stem.DownloadFailed` if our request fails - """ - - try: - response = urllib.urlopen( - urllib.Request( - url, - headers = { - 'Accept-Encoding': ', '.join(map(lambda c: c.encoding, compression)), - 'User-Agent': stem.USER_AGENT, - } - ), - timeout = timeout, - ) - except socket.timeout as exc: - raise stem.DownloadTimeout(url, exc, sys.exc_info()[2], timeout) - except: - exc, stacktrace = sys.exc_info()[1:3] - raise stem.DownloadFailed(url, exc, stacktrace) - - return _decompress(response.read(), response.headers.get('Content-Encoding')), response.headers - - -def _decompress(data, encoding): - """ - Decompresses descriptor data. - - Tor doesn't include compression headers. As such when using gzip we - need to include '32' for automatic header detection... - - https://stackoverflow.com/questions/3122145/zlib-error-error-3-while-decompressing-incorrect-header-check/22310760#22310760 - - ... and with zstd we need to use the streaming API. - - :param bytes data: data we received - :param str encoding: 'Content-Encoding' header of the response - - :raises: - * **ValueError** if encoding is unrecognized - * **ImportError** if missing the decompression module - """ - - if encoding == 'deflate': - return stem.descriptor.Compression.GZIP.decompress(data) - - for compression in stem.descriptor.Compression: - if encoding == compression.encoding: - return compression.decompress(data) - - raise ValueError("'%s' isn't a recognized type of encoding" % encoding) - - -def _guess_descriptor_type(resource): - # Attempts to determine the descriptor type based on the resource url. This - # raises a ValueError if the resource isn't recognized. - - if resource.startswith('/tor/server/'): - return 'server-descriptor 1.0' - elif resource.startswith('/tor/extra/'): - return 'extra-info 1.0' - elif resource.startswith('/tor/micro/'): - return 'microdescriptor 1.0' - elif resource.startswith('/tor/keys/'): - return 'dir-key-certificate-3 1.0' - elif resource.startswith('/tor/status-vote/'): - # The following resource urls can be for the present consensus - # (/tor/status-vote/current/*) or the next (/tor/status-vote/next/*). - - if resource.endswith('/consensus') or resource.endswith('/authority'): - return 'network-status-consensus-3 1.0' - elif resource.endswith('/consensus-microdesc'): - return 'network-status-microdesc-consensus-3 1.0' - elif resource.endswith('/consensus-signatures'): - return '%s 1.0' % DETACHED_SIGNATURE_TYPE - elif stem.util.tor_tools.is_valid_fingerprint(resource.split('/')[-1]): - return 'network-status-consensus-3 1.0' - elif resource.endswith('/bandwidth'): - return 'bandwidth-file 1.0' - - raise ValueError("Unable to determine the descriptor type for '%s'" % resource) - - -def get_authorities(): - """ - Provides cached Tor directory authority information. The directory - information hardcoded into Tor and occasionally changes, so the information - this provides might not necessarily match your version of tor. - - .. deprecated:: 1.7.0 - Use stem.directory.Authority.from_cache() instead. - - :returns: **dict** of **str** nicknames to :class:`~stem.directory.Authority` instances - """ - - return DirectoryAuthority.from_cache() - - -# TODO: drop aliases in stem 2.0 - -Directory = stem.directory.Directory -DirectoryAuthority = stem.directory.Authority -FallbackDirectory = stem.directory.Fallback diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/router_status_entry.py b/myenv/lib/python3.12/site-packages/stem/descriptor/router_status_entry.py deleted file mode 100644 index 91f2c14..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/router_status_entry.py +++ /dev/null @@ -1,706 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for router status entries, the information for individual routers -within a network status document. This information is provided from a few -sources... - -* control port via 'GETINFO ns/\\*' and 'GETINFO md/\\*' queries -* router entries in a network status document, like the cached-consensus - -**Module Overview:** - -:: - - RouterStatusEntry - Common parent for router status entries - |- RouterStatusEntryV2 - Entry for a network status v2 document - | +- RouterStatusEntryBridgeV2 - Entry for a bridge flavored v2 document - | - |- RouterStatusEntryV3 - Entry for a network status v3 document - +- RouterStatusEntryMicroV3 - Entry for a microdescriptor flavored v3 document -""" - -import binascii -import io - -import stem.exit_policy -import stem.prereq -import stem.util.str_tools - -from stem.descriptor import ( - KEYWORD_LINE, - Descriptor, - _descriptor_content, - _value, - _values, - _descriptor_components, - _parse_protocol_line, - _read_until_keywords, - _random_nickname, - _random_ipv4_address, - _random_date, -) - -_parse_pr_line = _parse_protocol_line('pr', 'protocols') - - -def _parse_file(document_file, validate, entry_class, entry_keyword = 'r', start_position = None, end_position = None, section_end_keywords = (), extra_args = ()): - """ - Reads a range of the document_file containing some number of entry_class - instances. We deliminate the entry_class entries by the keyword on their - first line (entry_keyword). When finished the document is left at the - end_position. - - Either an end_position or section_end_keywords must be provided. - - :param file document_file: file with network status document content - :param bool validate: checks the validity of the document's contents if - **True**, skips these checks otherwise - :param class entry_class: class to construct instance for - :param str entry_keyword: first keyword for the entry instances - :param int start_position: start of the section, default is the current position - :param int end_position: end of the section - :param tuple section_end_keywords: keyword(s) that deliminate the end of the - section if no end_position was provided - :param tuple extra_args: extra arguments for the entry_class (after the - content and validate flag) - - :returns: iterator over entry_class instances - - :raises: - * **ValueError** if the contents is malformed and validate is **True** - * **IOError** if the file can't be read - """ - - if start_position: - document_file.seek(start_position) - else: - start_position = document_file.tell() - - # check if we're starting at the end of the section (ie, there's no entries to read) - if section_end_keywords: - first_keyword = None - line_match = KEYWORD_LINE.match(stem.util.str_tools._to_unicode(document_file.readline())) - - if line_match: - first_keyword = line_match.groups()[0] - - document_file.seek(start_position) - - if first_keyword in section_end_keywords: - return - - while end_position is None or document_file.tell() < end_position: - desc_lines, ending_keyword = _read_until_keywords( - (entry_keyword,) + section_end_keywords, - document_file, - ignore_first = True, - end_position = end_position, - include_ending_keyword = True - ) - - desc_content = bytes.join(b'', desc_lines) - - if desc_content: - yield entry_class(desc_content, validate, *extra_args) - - # check if we stopped at the end of the section - if ending_keyword in section_end_keywords: - break - else: - break - - -def _parse_r_line(descriptor, entries): - # Parses a RouterStatusEntry's 'r' line. They're very nearly identical for - # all current entry types (v2, v3, and microdescriptor v3) with one little - # wrinkle: only the microdescriptor flavor excludes a 'digest' field. - # - # For v2 and v3 router status entries: - # "r" nickname identity digest publication IP ORPort DirPort - # example: r mauer BD7xbfsCFku3+tgybEZsg8Yjhvw itcuKQ6PuPLJ7m/Oi928WjO2j8g 2012-06-22 13:19:32 80.101.105.103 9001 0 - # - # For v3 microdescriptor router status entries: - # "r" nickname identity publication IP ORPort DirPort - # example: r Konata ARIJF2zbqirB9IwsW0mQznccWww 2012-09-24 13:40:40 69.64.48.168 9001 9030 - - value = _value('r', entries) - include_digest = not isinstance(descriptor, RouterStatusEntryMicroV3) - - r_comp = value.split(' ') - - # inject a None for the digest to normalize the field positioning - if not include_digest: - r_comp.insert(2, None) - - if len(r_comp) < 8: - expected_field_count = 'eight' if include_digest else 'seven' - raise ValueError("%s 'r' line must have %s values: r %s" % (descriptor._name(), expected_field_count, value)) - - if not stem.util.tor_tools.is_valid_nickname(r_comp[0]): - raise ValueError("%s nickname isn't valid: %s" % (descriptor._name(), r_comp[0])) - elif not stem.util.connection.is_valid_ipv4_address(r_comp[5]): - raise ValueError("%s address isn't a valid IPv4 address: %s" % (descriptor._name(), r_comp[5])) - elif not stem.util.connection.is_valid_port(r_comp[6]): - raise ValueError('%s ORPort is invalid: %s' % (descriptor._name(), r_comp[6])) - elif not stem.util.connection.is_valid_port(r_comp[7], allow_zero = True): - raise ValueError('%s DirPort is invalid: %s' % (descriptor._name(), r_comp[7])) - - descriptor.nickname = r_comp[0] - descriptor.fingerprint = _base64_to_hex(r_comp[1]) - - if include_digest: - descriptor.digest = _base64_to_hex(r_comp[2]) - - descriptor.address = r_comp[5] - descriptor.or_port = int(r_comp[6]) - descriptor.dir_port = None if r_comp[7] == '0' else int(r_comp[7]) - - try: - published = '%s %s' % (r_comp[3], r_comp[4]) - descriptor.published = stem.util.str_tools._parse_timestamp(published) - except ValueError: - raise ValueError("Publication time time wasn't parsable: r %s" % value) - - -def _parse_a_line(descriptor, entries): - # "a" SP address ":" portlist - # example: a [2001:888:2133:0:82:94:251:204]:9001 - - or_addresses = [] - - for value in _values('a', entries): - if ':' not in value: - raise ValueError("%s 'a' line must be of the form '[address]:[ports]': a %s" % (descriptor._name(), value)) - - address, port = value.rsplit(':', 1) - - if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True): - raise ValueError("%s 'a' line must start with an IPv6 address: a %s" % (descriptor._name(), value)) - - if stem.util.connection.is_valid_port(port): - or_addresses.append((address.lstrip('[').rstrip(']'), int(port), stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True))) - else: - raise ValueError("%s 'a' line had an invalid port (%s): a %s" % (descriptor._name(), port, value)) - - descriptor.or_addresses = or_addresses - - -def _parse_s_line(descriptor, entries): - # "s" Flags - # example: s Named Running Stable Valid - - value = _value('s', entries) - flags = [] if value == '' else value.split(' ') - descriptor.flags = flags - - for flag in flags: - if flags.count(flag) > 1: - raise ValueError('%s had duplicate flags: s %s' % (descriptor._name(), value)) - elif flag == '': - raise ValueError("%s had extra whitespace on its 's' line: s %s" % (descriptor._name(), value)) - - -def _parse_v_line(descriptor, entries): - # "v" version - # example: v Tor 0.2.2.35 - # - # The spec says that if this starts with "Tor " then what follows is a - # tor version. If not then it has "upgraded to a more sophisticated - # protocol versioning system". - - value = _value('v', entries) - descriptor.version_line = value - - if value.startswith('Tor '): - try: - descriptor.version = stem.version._get_version(value[4:]) - except ValueError as exc: - raise ValueError('%s has a malformed tor version (%s): v %s' % (descriptor._name(), exc, value)) - - -def _parse_w_line(descriptor, entries): - # "w" "Bandwidth=" INT ["Measured=" INT] ["Unmeasured=1"] - # example: w Bandwidth=7980 - - value = _value('w', entries) - w_comp = value.split(' ') - - if len(w_comp) < 1: - raise ValueError("%s 'w' line is blank: w %s" % (descriptor._name(), value)) - elif not w_comp[0].startswith('Bandwidth='): - raise ValueError("%s 'w' line needs to start with a 'Bandwidth=' entry: w %s" % (descriptor._name(), value)) - - bandwidth = None - measured = None - is_unmeasured = False - unrecognized_bandwidth_entries = [] - - for w_entry in w_comp: - if '=' in w_entry: - w_key, w_value = w_entry.split('=', 1) - else: - w_key, w_value = w_entry, None - - if w_key == 'Bandwidth': - if not (w_value and w_value.isdigit()): - raise ValueError("%s 'Bandwidth=' entry needs to have a numeric value: w %s" % (descriptor._name(), value)) - - bandwidth = int(w_value) - elif w_key == 'Measured': - if not (w_value and w_value.isdigit()): - raise ValueError("%s 'Measured=' entry needs to have a numeric value: w %s" % (descriptor._name(), value)) - - measured = int(w_value) - elif w_key == 'Unmeasured': - if w_value != '1': - raise ValueError("%s 'Unmeasured=' should only have the value of '1': w %s" % (descriptor._name(), value)) - - is_unmeasured = True - else: - unrecognized_bandwidth_entries.append(w_entry) - - descriptor.bandwidth = bandwidth - descriptor.measured = measured - descriptor.is_unmeasured = is_unmeasured - descriptor.unrecognized_bandwidth_entries = unrecognized_bandwidth_entries - - -def _parse_p_line(descriptor, entries): - # "p" ("accept" / "reject") PortList - # - # examples: - # - # p accept 80,110,143,443,993,995,6660-6669,6697,7000-7001 - # p reject 1-65535 - - value = _value('p', entries) - - try: - descriptor.exit_policy = stem.exit_policy.MicroExitPolicy(value) - except ValueError as exc: - raise ValueError('%s exit policy is malformed (%s): p %s' % (descriptor._name(), exc, value)) - - -def _parse_id_line(descriptor, entries): - # "id" "ed25519" ed25519-identity - # - # examples: - # - # id ed25519 none - # id ed25519 8RH34kO07Pp+XYwzdoATVyCibIvmbslUjRkAm7J4IA8 - - value = _value('id', entries) - - if value: - if descriptor.document and not descriptor.document.is_vote: - raise ValueError("%s 'id' line should only appear in votes: id %s" % (descriptor._name(), value)) - - value_comp = value.split() - - if len(value_comp) >= 2: - descriptor.identifier_type = value_comp[0] - descriptor.identifier = value_comp[1] - else: - raise ValueError("'id' lines should contain both the key type and digest: id %s" % value) - - -def _parse_m_line(descriptor, entries): - # "m" methods 1*(algorithm "=" digest) - # example: m 8,9,10,11,12 sha256=g1vx9si329muxV3tquWIXXySNOIwRGMeAESKs/v4DWs - - all_hashes = [] - - for value in _values('m', entries): - m_comp = value.split(' ') - - if not (descriptor.document and descriptor.document.is_vote): - vote_status = 'vote' if descriptor.document else '' - raise ValueError("%s 'm' line should only appear in votes (appeared in a %s): m %s" % (descriptor._name(), vote_status, value)) - elif len(m_comp) < 1: - raise ValueError("%s 'm' line needs to start with a series of methods: m %s" % (descriptor._name(), value)) - - try: - methods = [int(entry) for entry in m_comp[0].split(',')] - except ValueError: - raise ValueError('%s microdescriptor methods should be a series of comma separated integers: m %s' % (descriptor._name(), value)) - - hashes = {} - - for entry in m_comp[1:]: - if '=' not in entry: - raise ValueError("%s can only have a series of 'algorithm=digest' mappings after the methods: m %s" % (descriptor._name(), value)) - - hash_name, digest = entry.split('=', 1) - hashes[hash_name] = digest - - all_hashes.append((methods, hashes)) - - descriptor.microdescriptor_hashes = all_hashes - - -def _parse_microdescriptor_m_line(descriptor, entries): - # "m" digest - # example: m aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70 - - descriptor.microdescriptor_digest = _value('m', entries) - - # TODO: drop the following in stem 2.x - - descriptor.digest = _base64_to_hex(_value('m', entries), check_if_fingerprint = False) - - -def _base64_to_hex(identity, check_if_fingerprint = True): - """ - Decodes a base64 value to hex. For example... - - :: - - >>> _base64_to_hex('p1aag7VwarGxqctS7/fS0y5FU+s') - 'A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB' - - :param str identity: encoded fingerprint from the consensus - :param bool check_if_fingerprint: asserts that the result is a fingerprint if **True** - - :returns: **str** with the uppercase hex encoding of the relay's fingerprint - - :raises: **ValueError** if the result isn't a valid fingerprint - """ - - try: - identity_decoded = stem.util.str_tools._decode_b64(stem.util.str_tools._to_bytes(identity)) - except (TypeError, binascii.Error): - raise ValueError("Unable to decode identity string '%s'" % identity) - - fingerprint = binascii.hexlify(identity_decoded).upper() - - if stem.prereq.is_python_3(): - fingerprint = stem.util.str_tools._to_unicode(fingerprint) - - if check_if_fingerprint: - if not stem.util.tor_tools.is_valid_fingerprint(fingerprint): - raise ValueError("Decoded '%s' to be '%s', which isn't a valid fingerprint" % (identity, fingerprint)) - - return fingerprint - - -class RouterStatusEntry(Descriptor): - """ - Information about an individual router stored within a network status - document. This is the common parent for concrete status entry types. - - :var stem.descriptor.networkstatus.NetworkStatusDocument document: **\\*** document that this descriptor came from - - :var str nickname: **\\*** router's nickname - :var str fingerprint: **\\*** router's fingerprint - :var datetime published: **\\*** router's publication - :var str address: **\\*** router's IP address - :var int or_port: **\\*** router's ORPort - :var int dir_port: **\\*** router's DirPort - - :var list flags: **\\*** list of :data:`~stem.Flag` associated with the relay - - :var stem.version.Version version: parsed version of tor, this is **None** if - the relay's using a new versioning scheme - :var str version_line: versioning information reported by the relay - """ - - ATTRIBUTES = { - 'nickname': (None, _parse_r_line), - 'fingerprint': (None, _parse_r_line), - 'published': (None, _parse_r_line), - 'address': (None, _parse_r_line), - 'or_port': (None, _parse_r_line), - 'dir_port': (None, _parse_r_line), - - 'flags': (None, _parse_s_line), - - 'version_line': (None, _parse_v_line), - 'version': (None, _parse_v_line), - } - - PARSER_FOR_LINE = { - 'r': _parse_r_line, - 's': _parse_s_line, - 'v': _parse_v_line, - } - - @classmethod - def from_str(cls, content, **kwargs): - # Router status entries don't have their own @type annotation, so to make - # our subclass from_str() work we need to do the type inferencing ourself. - - if cls == RouterStatusEntry: - raise NotImplementedError('Please use the from_str() method from RouterStatusEntry subclasses, not RouterStatusEntry itself') - elif 'descriptor_type' in kwargs: - raise ValueError("Router status entries don't have their own @type annotation. As such providing a 'descriptor_type' argument with RouterStatusEntry.from_str() does not work. Please drop the 'descriptor_type' argument when using this these subclasses' from_str() method.") - - is_multiple = kwargs.pop('multiple', False) - validate = kwargs.pop('validate', False) - results = list(_parse_file(io.BytesIO(stem.util.str_tools._to_bytes(content)), validate, cls, **kwargs)) - - if is_multiple: - return results - elif len(results) == 1: - return results[0] - else: - raise ValueError("Descriptor.from_str() expected a single descriptor, but had %i instead. Please include 'multiple = True' if you want a list of results instead." % len(results)) - - def __init__(self, content, validate = False, document = None): - """ - Parse a router descriptor in a network status document. - - :param str content: router descriptor content to be parsed - :param NetworkStatusDocument document: document this descriptor came from - :param bool validate: checks the validity of the content if **True**, skips - these checks otherwise - - :raises: **ValueError** if the descriptor data is invalid - """ - - super(RouterStatusEntry, self).__init__(content, lazy_load = not validate) - self.document = document - entries = _descriptor_components(content, validate) - - if validate: - for keyword in self._required_fields(): - if keyword not in entries: - raise ValueError("%s must have a '%s' line:\n%s" % (self._name(True), keyword, str(self))) - - for keyword in self._single_fields(): - if keyword in entries and len(entries[keyword]) > 1: - raise ValueError("%s can only have a single '%s' line, got %i:\n%s" % (self._name(True), keyword, len(entries[keyword]), str(self))) - - if 'r' != list(entries.keys())[0]: - raise ValueError("%s are expected to start with a 'r' line:\n%s" % (self._name(True), str(self))) - - self._parse(entries, validate) - else: - self._entries = entries - - def _name(self, is_plural = False): - """ - Name for this descriptor type. - """ - - return 'Router status entries' if is_plural else 'Router status entry' - - def _required_fields(self): - """ - Provides lines that must appear in the descriptor. - """ - - return () - - def _single_fields(self): - """ - Provides lines that can only appear in the descriptor once. - """ - - return () - - -class RouterStatusEntryV2(RouterStatusEntry): - """ - Information about an individual router stored within a version 2 network - status document. - - :var str digest: **\\*** router's upper-case hex digest - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - TYPE_ANNOTATION_NAME = 'network-status-consensus-2' - - ATTRIBUTES = dict(RouterStatusEntry.ATTRIBUTES, **{ - 'digest': (None, _parse_r_line), - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('r', '%s p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE %s %s 9001 0' % (_random_nickname(), _random_date(), _random_ipv4_address())), - )) - - def _name(self, is_plural = False): - return 'Router status entries (v2)' if is_plural else 'Router status entry (v2)' - - def _required_fields(self): - return ('r') - - def _single_fields(self): - return ('r', 's', 'v') - - -class RouterStatusEntryBridgeV2(RouterStatusEntryV2): - """ - Information about an individual router stored within a bridge flavored - version 2 network status document. - - .. versionadded:: 1.8.0 - """ - - TYPE_ANNOTATION_NAME = 'bridge-network-status' - - -class RouterStatusEntryV3(RouterStatusEntry): - """ - Information about an individual router stored within a version 3 network - status document. - - :var list or_addresses: **\\*** relay's OR addresses, this is a tuple listing - of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) - :var str identifier_type: identity digest key type - :var str identifier: base64 encoded identity digest - :var str digest: **\\*** router's upper-case hex digest - - :var int bandwidth: bandwidth measured to be available by the relay, this is - an arbitrary units (currently kilobytes per second) heuristic generated by - the Bandwidth authoritites to weight relay selection - :var int measured: *bandwidth* vote provided by a bandwidth authority - :var bool is_unmeasured: *bandwidth* measurement isn't based on three or more - measurements - :var list unrecognized_bandwidth_entries: **\\*** bandwidth weighting - information that isn't yet recognized - - :var stem.exit_policy.MicroExitPolicy exit_policy: router's exit policy - :var dict protocols: mapping of protocols to their supported versions - - :var list microdescriptor_hashes: **\\*** tuples of two values, the list of - consensus methods for generating a set of digests and the 'algorithm => - digest' mappings - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - - .. versionchanged:: 1.5.0 - Added the identifier and identifier_type attributes. - - .. versionchanged:: 1.6.0 - Added the protocols attribute. - """ - - TYPE_ANNOTATION_NAME = 'network-status-consensus-3' - - ATTRIBUTES = dict(RouterStatusEntry.ATTRIBUTES, **{ - 'digest': (None, _parse_r_line), - 'or_addresses': ([], _parse_a_line), - 'identifier_type': (None, _parse_id_line), - 'identifier': (None, _parse_id_line), - - 'bandwidth': (None, _parse_w_line), - 'measured': (None, _parse_w_line), - 'is_unmeasured': (False, _parse_w_line), - 'unrecognized_bandwidth_entries': ([], _parse_w_line), - - 'exit_policy': (None, _parse_p_line), - 'protocols': ({}, _parse_pr_line), - 'microdescriptor_hashes': ([], _parse_m_line), - }) - - PARSER_FOR_LINE = dict(RouterStatusEntry.PARSER_FOR_LINE, **{ - 'a': _parse_a_line, - 'w': _parse_w_line, - 'p': _parse_p_line, - 'pr': _parse_pr_line, - 'id': _parse_id_line, - 'm': _parse_m_line, - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('r', '%s p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE %s %s 9001 0' % (_random_nickname(), _random_date(), _random_ipv4_address())), - ('s', 'Fast Named Running Stable Valid'), - )) - - def _name(self, is_plural = False): - return 'Router status entries (v3)' if is_plural else 'Router status entry (v3)' - - def _required_fields(self): - return ('r', 's') - - def _single_fields(self): - return ('r', 's', 'v', 'w', 'p', 'pr') - - -class RouterStatusEntryMicroV3(RouterStatusEntry): - """ - Information about an individual router stored within a microdescriptor - flavored network status document. - - :var list or_addresses: **\\*** relay's OR addresses, this is a tuple listing - of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) - :var int bandwidth: bandwidth claimed by the relay (in kb/s) - :var int measured: bandwidth measured to be available by the relay - :var bool is_unmeasured: bandwidth measurement isn't based on three or more - measurements - :var list unrecognized_bandwidth_entries: **\\*** bandwidth weighting - information that isn't yet recognized - :var dict protocols: mapping of protocols to their supported versions - - :var str digest: **\\*** router's hex encoded digest of our corresponding - microdescriptor (**deprecated**, use microdescriptor_digest instead) - :var str microdescriptor_digest: **\\*** router's base64 encoded digest of our corresponding microdescriptor - - .. versionchanged:: 1.6.0 - Added the protocols attribute. - - .. versionchanged:: 1.7.0 - Added the or_addresses attribute. - - .. versionchanged:: 1.7.0 - Added the microdescriptor_digest attribute to replace our now deprecated digest attribute. - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - TYPE_ANNOTATION_NAME = 'network-status-microdesc-consensus-3' - - ATTRIBUTES = dict(RouterStatusEntry.ATTRIBUTES, **{ - 'or_addresses': ([], _parse_a_line), - 'bandwidth': (None, _parse_w_line), - 'measured': (None, _parse_w_line), - 'is_unmeasured': (False, _parse_w_line), - 'unrecognized_bandwidth_entries': ([], _parse_w_line), - 'protocols': ({}, _parse_pr_line), - - 'microdescriptor_digest': (None, _parse_microdescriptor_m_line), - 'digest': (None, _parse_microdescriptor_m_line), - }) - - PARSER_FOR_LINE = dict(RouterStatusEntry.PARSER_FOR_LINE, **{ - 'a': _parse_a_line, - 'w': _parse_w_line, - 'm': _parse_microdescriptor_m_line, - 'pr': _parse_pr_line, - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('r', '%s ARIJF2zbqirB9IwsW0mQznccWww %s %s 9001 9030' % (_random_nickname(), _random_date(), _random_ipv4_address())), - ('m', 'aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70'), - ('s', 'Fast Guard HSDir Named Running Stable V2Dir Valid'), - )) - - def _name(self, is_plural = False): - return 'Router status entries (micro v3)' if is_plural else 'Router status entry (micro v3)' - - def _required_fields(self): - return ('r', 's', 'm') - - def _single_fields(self): - return ('r', 's', 'v', 'w', 'm', 'pr') diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/server_descriptor.py b/myenv/lib/python3.12/site-packages/stem/descriptor/server_descriptor.py deleted file mode 100644 index 9c29164..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/server_descriptor.py +++ /dev/null @@ -1,1109 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for Tor server descriptors, which contains the infrequently changing -information about a Tor relay (contact information, exit policy, public keys, -etc). This information is provided from a few sources... - -* The control port via 'GETINFO desc/\\*' queries. - -* The 'cached-descriptors' file in Tor's data directory. - -* Archived descriptors provided by `CollecTor `_. - -* Directory authorities and mirrors via their DirPort. - -**Module Overview:** - -:: - - ServerDescriptor - Tor server descriptor. - |- RelayDescriptor - Server descriptor for a relay. - | +- make_router_status_entry - Creates a router status entry for this descriptor. - | - |- BridgeDescriptor - Scrubbed server descriptor for a bridge. - | |- is_scrubbed - checks if our content has been properly scrubbed - | +- get_scrubbing_issues - description of issues with our scrubbing - | - |- digest - calculates the upper-case hex digest value for our content - |- get_annotations - dictionary of content prior to the descriptor entry - +- get_annotation_lines - lines that provided the annotations - -.. data:: BridgeDistribution (enum) - - Preferred method of distributing this relay if a bridge. - - .. versionadded:: 1.6.0 - - ===================== =========== - BridgeDistribution Description - ===================== =========== - **ANY** No proference, BridgeDB will pick how the bridge is distributed. - **HTTPS** Provided via the `web interface `_. - **EMAIL** Provided in response to emails to bridges@torproject.org. - **MOAT** Provided in interactive menus within Tor Browser. - **HYPHAE** Provided via a cryptographic invitation-based system. - ===================== =========== -""" - -import base64 -import binascii -import functools -import hashlib -import re - -import stem.descriptor.certificate -import stem.descriptor.extrainfo_descriptor -import stem.exit_policy -import stem.prereq -import stem.util.connection -import stem.util.enum -import stem.util.str_tools -import stem.util.tor_tools -import stem.version - -from stem.descriptor.router_status_entry import RouterStatusEntryV3 - -from stem.descriptor import ( - PGP_BLOCK_END, - Descriptor, - DigestHash, - DigestEncoding, - create_signing_key, - _descriptor_content, - _descriptor_components, - _read_until_keywords, - _bytes_for_block, - _value, - _values, - _parse_simple_line, - _parse_int_line, - _parse_if_present, - _parse_bytes_line, - _parse_timestamp_line, - _parse_forty_character_hex, - _parse_protocol_line, - _parse_key_block, - _append_router_signature, - _random_nickname, - _random_ipv4_address, - _random_date, - _random_crypto_blob, -) - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -# relay descriptors must have exactly one of the following -REQUIRED_FIELDS = ( - 'router', - 'bandwidth', - 'published', - 'onion-key', - 'signing-key', - 'router-signature', -) - -# optional entries that can appear at most once -SINGLE_FIELDS = ( - 'identity-ed25519', - 'master-key-ed25519', - 'platform', - 'fingerprint', - 'hibernating', - 'uptime', - 'contact', - 'read-history', - 'write-history', - 'eventdns', - 'bridge-distribution-request', - 'family', - 'caches-extra-info', - 'extra-info-digest', - 'hidden-service-dir', - 'protocols', - 'allow-single-hop-exits', - 'tunnelled-dir-server', - 'proto', - 'onion-key-crosscert', - 'ntor-onion-key', - 'ntor-onion-key-crosscert', - 'router-sig-ed25519', -) - -BridgeDistribution = stem.util.enum.Enum( - ('ANY', 'any'), - ('HTTPS', 'https'), - ('EMAIL', 'email'), - ('MOAT', 'moat'), - ('HYPHAE', 'hyphae'), -) - -DEFAULT_IPV6_EXIT_POLICY = stem.exit_policy.MicroExitPolicy('reject 1-65535') -REJECT_ALL_POLICY = stem.exit_policy.ExitPolicy('reject *:*') -DEFAULT_BRIDGE_DISTRIBUTION = 'any' - - -def _truncated_b64encode(content): - return stem.util.str_tools._to_unicode(base64.b64encode(content).rstrip(b'=')) - - -def _parse_file(descriptor_file, is_bridge = False, validate = False, **kwargs): - """ - Iterates over the server descriptors in a file. - - :param file descriptor_file: file with descriptor content - :param bool is_bridge: parses the file as being a bridge descriptor - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param dict kwargs: additional arguments for the descriptor constructor - - :returns: iterator for ServerDescriptor instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is True - * **IOError** if the file can't be read - """ - - # Handler for relay descriptors - # - # Cached descriptors consist of annotations followed by the descriptor - # itself. For instance... - # - # @downloaded-at 2012-03-14 16:31:05 - # @source "145.53.65.130" - # router caerSidi 71.35.143.157 9001 0 0 - # platform Tor 0.2.1.30 on Linux x86_64 - # - # router-signature - # -----BEGIN SIGNATURE----- - # - # -----END SIGNATURE----- - # - # Metrics descriptor files are the same, but lack any annotations. The - # following simply does the following... - # - # - parse as annotations until we get to 'router' - # - parse as descriptor content until we get to 'router-signature' followed - # by the end of the signature block - # - construct a descriptor and provide it back to the caller - # - # Any annotations after the last server descriptor is ignored (never provided - # to the caller). - - while True: - annotations = _read_until_keywords('router', descriptor_file) - annotations = map(bytes.strip, annotations) # strip newlines - annotations = map(stem.util.str_tools._to_unicode, annotations) # convert to unicode - annotations = list(filter(lambda x: x != '', annotations)) # drop any blanks - - if not is_bridge: - descriptor_content = _read_until_keywords('router-signature', descriptor_file) - - # we've reached the 'router-signature', now include the pgp style block - - block_end_prefix = PGP_BLOCK_END.split(' ', 1)[0] - descriptor_content += _read_until_keywords(block_end_prefix, descriptor_file, True) - else: - descriptor_content = _read_until_keywords('router-digest', descriptor_file, True) - - if descriptor_content: - if descriptor_content[0].startswith(b'@type'): - descriptor_content = descriptor_content[1:] - - descriptor_text = bytes.join(b'', descriptor_content) - - if is_bridge: - yield BridgeDescriptor(descriptor_text, validate, annotations, **kwargs) - else: - yield RelayDescriptor(descriptor_text, validate, annotations, **kwargs) - else: - if validate and annotations: - raise ValueError('Content conform to being a server descriptor:\n%s' % '\n'.join(annotations)) - - break # done parsing descriptors - - -def _parse_router_line(descriptor, entries): - # "router" nickname address ORPort SocksPort DirPort - - value = _value('router', entries) - router_comp = value.split() - - if len(router_comp) < 5: - raise ValueError('Router line must have five values: router %s' % value) - elif not stem.util.tor_tools.is_valid_nickname(router_comp[0]): - raise ValueError("Router line entry isn't a valid nickname: %s" % router_comp[0]) - elif not stem.util.connection.is_valid_ipv4_address(router_comp[1]): - raise ValueError("Router line entry isn't a valid IPv4 address: %s" % router_comp[1]) - elif not stem.util.connection.is_valid_port(router_comp[2], allow_zero = True): - raise ValueError("Router line's ORPort is invalid: %s" % router_comp[2]) - elif not stem.util.connection.is_valid_port(router_comp[3], allow_zero = True): - raise ValueError("Router line's SocksPort is invalid: %s" % router_comp[3]) - elif not stem.util.connection.is_valid_port(router_comp[4], allow_zero = True): - raise ValueError("Router line's DirPort is invalid: %s" % router_comp[4]) - - descriptor.nickname = router_comp[0] - descriptor.address = router_comp[1] - descriptor.or_port = int(router_comp[2]) - descriptor.socks_port = None if router_comp[3] == '0' else int(router_comp[3]) - descriptor.dir_port = None if router_comp[4] == '0' else int(router_comp[4]) - - -def _parse_bandwidth_line(descriptor, entries): - # "bandwidth" bandwidth-avg bandwidth-burst bandwidth-observed - - value = _value('bandwidth', entries) - bandwidth_comp = value.split() - - if len(bandwidth_comp) < 3: - raise ValueError('Bandwidth line must have three values: bandwidth %s' % value) - elif not bandwidth_comp[0].isdigit(): - raise ValueError("Bandwidth line's average rate isn't numeric: %s" % bandwidth_comp[0]) - elif not bandwidth_comp[1].isdigit(): - raise ValueError("Bandwidth line's burst rate isn't numeric: %s" % bandwidth_comp[1]) - elif not bandwidth_comp[2].isdigit(): - raise ValueError("Bandwidth line's observed rate isn't numeric: %s" % bandwidth_comp[2]) - - descriptor.average_bandwidth = int(bandwidth_comp[0]) - descriptor.burst_bandwidth = int(bandwidth_comp[1]) - descriptor.observed_bandwidth = int(bandwidth_comp[2]) - - -def _parse_platform_line(descriptor, entries): - # "platform" string - - _parse_bytes_line('platform', 'platform')(descriptor, entries) - - # The platform attribute was set earlier. This line can contain any - # arbitrary data, but tor seems to report its version followed by the - # os like the following... - # - # platform Tor 0.2.2.35 (git-73ff13ab3cc9570d) on Linux x86_64 - # - # There's no guarantee that we'll be able to pick these out the - # version, but might as well try to save our caller the effort. - - value = _value('platform', entries) - platform_match = re.match('^(?:node-)?Tor (\\S*).* on (.*)$', value) - - if platform_match: - version_str, descriptor.operating_system = platform_match.groups() - - try: - descriptor.tor_version = stem.version._get_version(version_str) - except ValueError: - pass - - -def _parse_fingerprint_line(descriptor, entries): - # This is forty hex digits split into space separated groups of four. - # Checking that we match this pattern. - - value = _value('fingerprint', entries) - fingerprint = value.replace(' ', '') - - for grouping in value.split(' '): - if len(grouping) != 4: - raise ValueError('Fingerprint line should have groupings of four hex digits: %s' % value) - - if not stem.util.tor_tools.is_valid_fingerprint(fingerprint): - raise ValueError('Tor relay fingerprints consist of forty hex digits: %s' % value) - - descriptor.fingerprint = fingerprint - - -def _parse_extrainfo_digest_line(descriptor, entries): - value = _value('extra-info-digest', entries) - digest_comp = value.split(' ') - - if not stem.util.tor_tools.is_hex_digits(digest_comp[0], 40): - raise ValueError('extra-info-digest should be 40 hex characters: %s' % digest_comp[0]) - - descriptor.extra_info_digest = digest_comp[0] - descriptor.extra_info_sha256_digest = digest_comp[1] if len(digest_comp) >= 2 else None - - -def _parse_hibernating_line(descriptor, entries): - # "hibernating" 0|1 (in practice only set if one) - - value = _value('hibernating', entries) - - if value not in ('0', '1'): - raise ValueError('Hibernating line had an invalid value, must be zero or one: %s' % value) - - descriptor.hibernating = value == '1' - - -def _parse_protocols_line(descriptor, entries): - value = _value('protocols', entries) - protocols_match = re.match('^Link (.*) Circuit (.*)$', value) - - if not protocols_match: - raise ValueError('Protocols line did not match the expected pattern: protocols %s' % value) - - link_versions, circuit_versions = protocols_match.groups() - descriptor.link_protocols = link_versions.split(' ') - descriptor.circuit_protocols = circuit_versions.split(' ') - - -def _parse_or_address_line(descriptor, entries): - all_values = _values('or-address', entries) - or_addresses = [] - - for entry in all_values: - line = 'or-address %s' % entry - - if ':' not in entry: - raise ValueError('or-address line missing a colon: %s' % line) - - address, port = entry.rsplit(':', 1) - - if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True): - raise ValueError('or-address line has a malformed address: %s' % line) - - if not stem.util.connection.is_valid_port(port): - raise ValueError('or-address line has a malformed port: %s' % line) - - or_addresses.append((address.lstrip('[').rstrip(']'), int(port), stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True))) - - descriptor.or_addresses = or_addresses - - -def _parse_history_line(keyword, history_end_attribute, history_interval_attribute, history_values_attribute, descriptor, entries): - value = _value(keyword, entries) - timestamp, interval, remainder = stem.descriptor.extrainfo_descriptor._parse_timestamp_and_interval(keyword, value) - - try: - if remainder: - history_values = [int(entry) for entry in remainder.split(',')] - else: - history_values = [] - except ValueError: - raise ValueError('%s line has non-numeric values: %s %s' % (keyword, keyword, value)) - - setattr(descriptor, history_end_attribute, timestamp) - setattr(descriptor, history_interval_attribute, interval) - setattr(descriptor, history_values_attribute, history_values) - - -def _parse_exit_policy(descriptor, entries): - if hasattr(descriptor, '_unparsed_exit_policy'): - if descriptor._unparsed_exit_policy and stem.util.str_tools._to_unicode(descriptor._unparsed_exit_policy[0]) == 'reject *:*': - descriptor.exit_policy = REJECT_ALL_POLICY - else: - descriptor.exit_policy = stem.exit_policy.ExitPolicy(*descriptor._unparsed_exit_policy) - - del descriptor._unparsed_exit_policy - - -def _parse_identity_ed25519_line(descriptor, entries): - # TODO: replace this with Ed25519Certificate._from_descriptor() in stem 2.x - - _parse_key_block('identity-ed25519', 'ed25519_certificate', 'ED25519 CERT')(descriptor, entries) - - if descriptor.ed25519_certificate: - descriptor.certificate = stem.descriptor.certificate.Ed25519Certificate.from_base64(descriptor.ed25519_certificate) - - -_parse_master_key_ed25519_line = _parse_simple_line('master-key-ed25519', 'ed25519_master_key') -_parse_master_key_ed25519_for_hash_line = _parse_simple_line('master-key-ed25519', 'ed25519_certificate_hash') -_parse_contact_line = _parse_bytes_line('contact', 'contact') -_parse_published_line = _parse_timestamp_line('published', 'published') -_parse_read_history_line = functools.partial(_parse_history_line, 'read-history', 'read_history_end', 'read_history_interval', 'read_history_values') -_parse_write_history_line = functools.partial(_parse_history_line, 'write-history', 'write_history_end', 'write_history_interval', 'write_history_values') -_parse_ipv6_policy_line = _parse_simple_line('ipv6-policy', 'exit_policy_v6', func = lambda v: stem.exit_policy.MicroExitPolicy(v)) -_parse_allow_single_hop_exits_line = _parse_if_present('allow-single-hop-exits', 'allow_single_hop_exits') -_parse_tunneled_dir_server_line = _parse_if_present('tunnelled-dir-server', 'allow_tunneled_dir_requests') -_parse_proto_line = _parse_protocol_line('proto', 'protocols') -_parse_hidden_service_dir_line = _parse_if_present('hidden-service-dir', 'is_hidden_service_dir') -_parse_caches_extra_info_line = _parse_if_present('caches-extra-info', 'extra_info_cache') -_parse_bridge_distribution_request_line = _parse_simple_line('bridge-distribution-request', 'bridge_distribution') -_parse_family_line = _parse_simple_line('family', 'family', func = lambda v: set(v.split(' '))) -_parse_eventdns_line = _parse_simple_line('eventdns', 'eventdns', func = lambda v: v == '1') -_parse_onion_key_line = _parse_key_block('onion-key', 'onion_key', 'RSA PUBLIC KEY') -_parse_onion_key_crosscert_line = _parse_key_block('onion-key-crosscert', 'onion_key_crosscert', 'CROSSCERT') -_parse_signing_key_line = _parse_key_block('signing-key', 'signing_key', 'RSA PUBLIC KEY') -_parse_router_signature_line = _parse_key_block('router-signature', 'signature', 'SIGNATURE') -_parse_ntor_onion_key_line = _parse_simple_line('ntor-onion-key', 'ntor_onion_key') -_parse_ntor_onion_key_crosscert_line = _parse_key_block('ntor-onion-key-crosscert', 'ntor_onion_key_crosscert', 'ED25519 CERT', 'ntor_onion_key_crosscert_sign') -_parse_router_sig_ed25519_line = _parse_simple_line('router-sig-ed25519', 'ed25519_signature') -_parse_router_digest_sha256_line = _parse_simple_line('router-digest-sha256', 'router_digest_sha256') -_parse_router_digest_line = _parse_forty_character_hex('router-digest', '_digest') - -# TODO: We need to be tolerant of negative uptimes to accommodate a past tor -# bug... -# -# Changes in version 0.1.2.7-alpha - 2007-02-06 -# - If our system clock jumps back in time, don't publish a negative -# uptime in the descriptor. Also, don't let the global rate limiting -# buckets go absurdly negative. -# -# After parsing all of the attributes we'll double check that negative -# uptimes only occurred prior to this fix. - -_parse_uptime_line = _parse_int_line('uptime', 'uptime', allow_negative = True) - - -class ServerDescriptor(Descriptor): - """ - Common parent for server descriptors. - - :var str nickname: **\\*** relay's nickname - :var str fingerprint: identity key fingerprint - :var datetime published: **\\*** time in UTC when this descriptor was made - - :var str address: **\\*** IPv4 address of the relay - :var int or_port: **\\*** port used for relaying - :var int socks_port: **\\*** port used as client (**deprecated**, always **None**) - :var int dir_port: **\\*** port used for descriptor mirroring - - :var bytes platform: line with operating system and tor version - :var stem.version.Version tor_version: version of tor - :var str operating_system: operating system - :var int uptime: uptime when published in seconds - :var bytes contact: contact information - :var stem.exit_policy.ExitPolicy exit_policy: **\\*** stated exit policy - :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\\*** exit policy for IPv6 - :var BridgeDistribution bridge_distribution: **\\*** preferred method of providing this relay's - address if a bridge - :var set family: **\\*** nicknames or fingerprints of declared family - - :var int average_bandwidth: **\\*** average rate it's willing to relay in bytes/s - :var int burst_bandwidth: **\\*** burst rate it's willing to relay in bytes/s - :var int observed_bandwidth: **\\*** estimated capacity based on usage in bytes/s - - :var list link_protocols: link protocols supported by the relay - :var list circuit_protocols: circuit protocols supported by the relay - :var bool is_hidden_service_dir: **\\*** indicates if the relay serves hidden - service descriptors - :var bool hibernating: **\\*** hibernating when published - :var bool allow_single_hop_exits: **\\*** flag if single hop exiting is allowed - :var bool allow_tunneled_dir_requests: **\\*** flag if tunneled directory - requests are accepted - :var bool extra_info_cache: **\\*** flag if a mirror for extra-info documents - :var str extra_info_digest: upper-case hex encoded digest of our extra-info document - :var str extra_info_sha256_digest: base64 encoded sha256 digest of our extra-info document - :var bool eventdns: flag for evdns backend (**deprecated**, always unset) - :var str ntor_onion_key: base64 key used to encrypt EXTEND in the ntor protocol - :var list or_addresses: **\\*** alternative for our address/or_port - attributes, each entry is a tuple of the form (address (**str**), port - (**int**), is_ipv6 (**bool**)) - :var dict protocols: mapping of protocols to their supported versions - - **Deprecated**, moved to extra-info descriptor... - - :var datetime read_history_end: end of the sampling interval - :var int read_history_interval: seconds per interval - :var list read_history_values: bytes read during each interval - - :var datetime write_history_end: end of the sampling interval - :var int write_history_interval: seconds per interval - :var list write_history_values: bytes written during each interval - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - - .. versionchanged:: 1.5.0 - Added the allow_tunneled_dir_requests attribute. - - .. versionchanged:: 1.6.0 - Added the extra_info_sha256_digest, protocols, and bridge_distribution - attributes. - - .. versionchanged:: 1.7.0 - Added the is_hidden_service_dir attribute. - - .. versionchanged:: 1.7.0 - Deprecated the hidden_service_dir field, it's never been populated - (:spec:`43c2f78`). This field will be removed in Stem 2.0. - """ - - ATTRIBUTES = { - 'nickname': (None, _parse_router_line), - 'fingerprint': (None, _parse_fingerprint_line), - 'contact': (None, _parse_contact_line), - 'published': (None, _parse_published_line), - 'exit_policy': (None, _parse_exit_policy), - - 'address': (None, _parse_router_line), - 'or_port': (None, _parse_router_line), - 'socks_port': (None, _parse_router_line), - 'dir_port': (None, _parse_router_line), - - 'platform': (None, _parse_platform_line), - 'tor_version': (None, _parse_platform_line), - 'operating_system': (None, _parse_platform_line), - 'uptime': (None, _parse_uptime_line), - 'exit_policy_v6': (DEFAULT_IPV6_EXIT_POLICY, _parse_ipv6_policy_line), - 'bridge_distribution': (DEFAULT_BRIDGE_DISTRIBUTION, _parse_bridge_distribution_request_line), - 'family': (set(), _parse_family_line), - - 'average_bandwidth': (None, _parse_bandwidth_line), - 'burst_bandwidth': (None, _parse_bandwidth_line), - 'observed_bandwidth': (None, _parse_bandwidth_line), - - 'link_protocols': (None, _parse_protocols_line), - 'circuit_protocols': (None, _parse_protocols_line), - 'is_hidden_service_dir': (False, _parse_hidden_service_dir_line), - 'hibernating': (False, _parse_hibernating_line), - 'allow_single_hop_exits': (False, _parse_allow_single_hop_exits_line), - 'allow_tunneled_dir_requests': (False, _parse_tunneled_dir_server_line), - 'protocols': ({}, _parse_proto_line), - 'extra_info_cache': (False, _parse_caches_extra_info_line), - 'extra_info_digest': (None, _parse_extrainfo_digest_line), - 'extra_info_sha256_digest': (None, _parse_extrainfo_digest_line), - 'eventdns': (None, _parse_eventdns_line), - 'ntor_onion_key': (None, _parse_ntor_onion_key_line), - 'or_addresses': ([], _parse_or_address_line), - - 'read_history_end': (None, _parse_read_history_line), - 'read_history_interval': (None, _parse_read_history_line), - 'read_history_values': (None, _parse_read_history_line), - - 'write_history_end': (None, _parse_write_history_line), - 'write_history_interval': (None, _parse_write_history_line), - 'write_history_values': (None, _parse_write_history_line), - } - - PARSER_FOR_LINE = { - 'router': _parse_router_line, - 'bandwidth': _parse_bandwidth_line, - 'platform': _parse_platform_line, - 'published': _parse_published_line, - 'fingerprint': _parse_fingerprint_line, - 'contact': _parse_contact_line, - 'hibernating': _parse_hibernating_line, - 'extra-info-digest': _parse_extrainfo_digest_line, - 'hidden-service-dir': _parse_hidden_service_dir_line, - 'uptime': _parse_uptime_line, - 'protocols': _parse_protocols_line, - 'ntor-onion-key': _parse_ntor_onion_key_line, - 'or-address': _parse_or_address_line, - 'read-history': _parse_read_history_line, - 'write-history': _parse_write_history_line, - 'ipv6-policy': _parse_ipv6_policy_line, - 'allow-single-hop-exits': _parse_allow_single_hop_exits_line, - 'tunnelled-dir-server': _parse_tunneled_dir_server_line, - 'proto': _parse_proto_line, - 'caches-extra-info': _parse_caches_extra_info_line, - 'bridge-distribution-request': _parse_bridge_distribution_request_line, - 'family': _parse_family_line, - 'eventdns': _parse_eventdns_line, - } - - def __init__(self, raw_contents, validate = False, annotations = None): - """ - Server descriptor constructor, created from an individual relay's - descriptor content (as provided by 'GETINFO desc/*', cached descriptors, - and metrics). - - By default this validates the descriptor's content as it's parsed. This - validation can be disables to either improve performance or be accepting of - malformed data. - - :param str raw_contents: descriptor content provided by the relay - :param bool validate: checks the validity of the descriptor's content if - **True**, skips these checks otherwise - :param list annotations: lines that appeared prior to the descriptor - - :raises: **ValueError** if the contents is malformed and validate is True - """ - - super(ServerDescriptor, self).__init__(raw_contents, lazy_load = not validate) - self._annotation_lines = annotations if annotations else [] - - # A descriptor contains a series of 'keyword lines' which are simply a - # keyword followed by an optional value. Lines can also be followed by a - # signature block. - # - # We care about the ordering of 'accept' and 'reject' entries because this - # influences the resulting exit policy, but for everything else the order - # does not matter so breaking it into key / value pairs. - - entries, self._unparsed_exit_policy = _descriptor_components(stem.util.str_tools._to_unicode(raw_contents), validate, extra_keywords = ('accept', 'reject'), non_ascii_fields = ('contact', 'platform')) - - # TODO: Remove the following field in Stem 2.0. It has never been populated... - # - # https://gitweb.torproject.org/torspec.git/commit/?id=43c2f78 - - self.hidden_service_dir = ['2'] - - if validate: - self._parse(entries, validate) - - _parse_exit_policy(self, entries) - - # if we have a negative uptime and a tor version that shouldn't exhibit - # this bug then fail validation - - if validate and self.uptime and self.tor_version: - if self.uptime < 0 and self.tor_version >= stem.version.Version('0.1.2.7'): - raise ValueError("Descriptor for version '%s' had a negative uptime value: %i" % (self.tor_version, self.uptime)) - - self._check_constraints(entries) - else: - self._entries = entries - - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - """ - Digest of this descriptor's content. These are referenced by... - - * **Consensus** - - * Referer: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` **digest** attribute - * Format: **SHA1/BASE64** - - .. versionchanged:: 1.8.0 - Added the hash_type and encoding arguments. - - :param stem.descriptor.DigestHash hash_type: digest hashing algorithm - :param stem.descriptor.DigestEncoding encoding: digest encoding - - :returns: **hashlib.HASH** or **str** based on our encoding argument - """ - - raise NotImplementedError('Unsupported Operation: this should be implemented by the ServerDescriptor subclass') - - @lru_cache() - def get_annotations(self): - """ - Provides content that appeared prior to the descriptor. If this comes from - the cached-descriptors file then this commonly contains content like... - - :: - - @downloaded-at 2012-03-18 21:18:29 - @source "173.254.216.66" - - .. deprecated:: 1.8.0 - Users very rarely read from cached descriptor files any longer. This - method will be removed in Stem 2.x. If you have some need for us to keep - this please `let me know - `_. - - :returns: **dict** with the key/value pairs in our annotations - """ - - annotation_dict = {} - - for line in self._annotation_lines: - if ' ' in line: - key, value = line.split(' ', 1) - annotation_dict[key] = value - else: - annotation_dict[line] = None - - return annotation_dict - - def get_annotation_lines(self): - """ - Provides the lines of content that appeared prior to the descriptor. This - is the same as the - :func:`~stem.descriptor.server_descriptor.ServerDescriptor.get_annotations` - results, but with the unparsed lines and ordering retained. - - .. deprecated:: 1.8.0 - Users very rarely read from cached descriptor files any longer. This - method will be removed in Stem 2.x. If you have some need for us to keep - this please `let me know - `_. - - :returns: **list** with the lines of annotation that came before this descriptor - """ - - return self._annotation_lines - - def _check_constraints(self, entries): - """ - Does a basic check that the entries conform to this descriptor type's - constraints. - - :param dict entries: keyword => (value, pgp key) entries - - :raises: **ValueError** if an issue arises in validation - """ - - for keyword in self._required_fields(): - if keyword not in entries: - raise ValueError("Descriptor must have a '%s' entry" % keyword) - - for keyword in self._single_fields(): - if keyword in entries and len(entries[keyword]) > 1: - raise ValueError("The '%s' entry can only appear once in a descriptor" % keyword) - - expected_first_keyword = self._first_keyword() - if expected_first_keyword and expected_first_keyword != list(entries.keys())[0]: - raise ValueError("Descriptor must start with a '%s' entry" % expected_first_keyword) - - expected_last_keyword = self._last_keyword() - if expected_last_keyword and expected_last_keyword != list(entries.keys())[-1]: - raise ValueError("Descriptor must end with a '%s' entry" % expected_last_keyword) - - if 'identity-ed25519' in entries.keys(): - if 'router-sig-ed25519' not in entries.keys(): - raise ValueError('Descriptor must have router-sig-ed25519 entry to accompany identity-ed25519') - elif 'router-sig-ed25519' not in list(entries.keys())[-2:]: - raise ValueError("Descriptor must have 'router-sig-ed25519' as the next-to-last entry") - - if not self.exit_policy: - raise ValueError("Descriptor must have at least one 'accept' or 'reject' entry") - - # Constraints that the descriptor must meet to be valid. These can be None if - # not applicable. - - def _required_fields(self): - return REQUIRED_FIELDS - - def _single_fields(self): - return REQUIRED_FIELDS + SINGLE_FIELDS - - def _first_keyword(self): - return 'router' - - def _last_keyword(self): - return 'router-signature' - - -class RelayDescriptor(ServerDescriptor): - """ - Server descriptor (`descriptor specification - `_) - - :var stem.certificate.Ed25519Certificate certificate: ed25519 certificate - :var str ed25519_certificate: base64 encoded ed25519 certificate - :var str ed25519_master_key: base64 encoded master key for our ed25519 certificate - :var str ed25519_signature: signature of this document using ed25519 - - :var str onion_key: **\\*** key used to encrypt EXTEND cells - :var str onion_key_crosscert: signature generated using the onion_key - :var str ntor_onion_key_crosscert: signature generated using the ntor-onion-key - :var str ntor_onion_key_crosscert_sign: sign of the corresponding ed25519 public key - :var str signing_key: **\\*** relay's long-term identity key - :var str signature: **\\*** signature for this descriptor - - **\\*** attribute is required when we're parsed with validation - - .. versionchanged:: 1.5.0 - Added the ed25519_certificate, ed25519_master_key, ed25519_signature, - onion_key_crosscert, ntor_onion_key_crosscert, and - ntor_onion_key_crosscert_sign attributes. - - .. versionchanged:: 1.6.0 - Moved from the deprecated `pycrypto - `_ module to `cryptography - `_ for validating signatures. - - .. versionchanged:: 1.6.0 - Added the certificate attribute. - - .. deprecated:: 1.6.0 - Our **ed25519_certificate** is deprecated in favor of our new - **certificate** attribute. The base64 encoded certificate is available via - the certificate's **encoded** attribute. - - .. versionchanged:: 1.6.0 - Added the **skip_crypto_validation** constructor argument. - """ - - TYPE_ANNOTATION_NAME = 'server-descriptor' - - ATTRIBUTES = dict(ServerDescriptor.ATTRIBUTES, **{ - 'certificate': (None, _parse_identity_ed25519_line), - 'ed25519_certificate': (None, _parse_identity_ed25519_line), - 'ed25519_master_key': (None, _parse_master_key_ed25519_line), - 'ed25519_signature': (None, _parse_router_sig_ed25519_line), - - 'onion_key': (None, _parse_onion_key_line), - 'onion_key_crosscert': (None, _parse_onion_key_crosscert_line), - 'ntor_onion_key_crosscert': (None, _parse_ntor_onion_key_crosscert_line), - 'ntor_onion_key_crosscert_sign': (None, _parse_ntor_onion_key_crosscert_line), - 'signing_key': (None, _parse_signing_key_line), - 'signature': (None, _parse_router_signature_line), - }) - - PARSER_FOR_LINE = dict(ServerDescriptor.PARSER_FOR_LINE, **{ - 'identity-ed25519': _parse_identity_ed25519_line, - 'master-key-ed25519': _parse_master_key_ed25519_line, - 'router-sig-ed25519': _parse_router_sig_ed25519_line, - 'onion-key': _parse_onion_key_line, - 'onion-key-crosscert': _parse_onion_key_crosscert_line, - 'ntor-onion-key-crosscert': _parse_ntor_onion_key_crosscert_line, - 'signing-key': _parse_signing_key_line, - 'router-signature': _parse_router_signature_line, - }) - - def __init__(self, raw_contents, validate = False, annotations = None, skip_crypto_validation = False): - super(RelayDescriptor, self).__init__(raw_contents, validate, annotations) - - if validate: - if self.fingerprint: - key_hash = hashlib.sha1(_bytes_for_block(self.signing_key)).hexdigest() - - if key_hash != self.fingerprint.lower(): - raise ValueError('Fingerprint does not match the hash of our signing key (fingerprint: %s, signing key hash: %s)' % (self.fingerprint.lower(), key_hash)) - - if not skip_crypto_validation and stem.prereq.is_crypto_available(): - signed_digest = self._digest_for_signature(self.signing_key, self.signature) - - if signed_digest != self.digest(): - raise ValueError('Decrypted digest does not match local digest (calculated: %s, local: %s)' % (signed_digest, self.digest())) - - if self.onion_key_crosscert and stem.prereq.is_crypto_available(): - onion_key_crosscert_digest = self._digest_for_signature(self.onion_key, self.onion_key_crosscert) - - if onion_key_crosscert_digest != self._onion_key_crosscert_digest(): - raise ValueError('Decrypted onion-key-crosscert digest does not match local digest (calculated: %s, local: %s)' % (onion_key_crosscert_digest, self._onion_key_crosscert_digest())) - - if stem.prereq.is_crypto_available(ed25519 = True) and self.certificate: - self.certificate.validate(self) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False, signing_key = None, exit_policy = None): - if signing_key: - sign = True - - if attr is None: - attr = {} - - if exit_policy is None: - exit_policy = REJECT_ALL_POLICY - - base_header = [ - ('router', '%s %s 9001 0 0' % (_random_nickname(), _random_ipv4_address())), - ('published', _random_date()), - ('bandwidth', '153600 256000 104590'), - ] + [ - tuple(line.split(' ', 1)) for line in str(exit_policy).splitlines() - ] + [ - ('onion-key', _random_crypto_blob('RSA PUBLIC KEY')), - ('signing-key', _random_crypto_blob('RSA PUBLIC KEY')), - ] - - if sign: - if attr and 'signing-key' in attr: - raise ValueError('Cannot sign the descriptor if a signing-key has been provided') - elif attr and 'router-signature' in attr: - raise ValueError('Cannot sign the descriptor if a router-signature has been provided') - - if signing_key is None: - signing_key = create_signing_key() - - if 'fingerprint' not in attr: - fingerprint = hashlib.sha1(_bytes_for_block(stem.util.str_tools._to_unicode(signing_key.public_digest.strip()))).hexdigest().upper() - attr['fingerprint'] = ' '.join(stem.util.str_tools._split_by_length(fingerprint, 4)) - - attr['signing-key'] = signing_key.public_digest - - content = _descriptor_content(attr, exclude, base_header) + b'\nrouter-signature\n' - return _append_router_signature(content, signing_key.private) - else: - return _descriptor_content(attr, exclude, base_header, ( - ('router-sig-ed25519', None), - ('router-signature', _random_crypto_blob('SIGNATURE')), - )) - - @classmethod - def create(cls, attr = None, exclude = (), validate = True, sign = False, signing_key = None, exit_policy = None): - return cls(cls.content(attr, exclude, sign, signing_key, exit_policy), validate = validate, skip_crypto_validation = not sign) - - @lru_cache() - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - """ - Provides the digest of our descriptor's content. - - :returns: the digest string encoded in uppercase hex - - :raises: ValueError if the digest cannot be calculated - """ - - content = self._content_range(start = 'router', end = '\nrouter-signature\n') - - if hash_type == DigestHash.SHA1: - return stem.descriptor._encode_digest(hashlib.sha1(content), encoding) - elif hash_type == DigestHash.SHA256: - return stem.descriptor._encode_digest(hashlib.sha256(content), encoding) - else: - raise NotImplementedError('Server descriptor digests are only available in sha1 and sha256, not %s' % hash_type) - - def make_router_status_entry(self): - """ - Provides a RouterStatusEntryV3 for this descriptor content. - - .. versionadded:: 1.6.0 - - :returns: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` - that would be in the consensus - """ - - if not self.fingerprint: - raise ValueError('Server descriptor lacks a fingerprint. This is an optional field, but required to make a router status entry.') - - attr = { - 'r': ' '.join([ - self.nickname, - _truncated_b64encode(binascii.unhexlify(stem.util.str_tools._to_bytes(self.fingerprint))), - _truncated_b64encode(binascii.unhexlify(stem.util.str_tools._to_bytes(self.digest()))), - self.published.strftime('%Y-%m-%d %H:%M:%S'), - self.address, - str(self.or_port), - str(self.dir_port) if self.dir_port else '0', - ]), - 'w': 'Bandwidth=%i' % self.average_bandwidth, - 'p': self.exit_policy.summary().replace(', ', ','), - } - - if self.tor_version: - attr['v'] = 'Tor %s' % self.tor_version - - if self.or_addresses: - attr['a'] = ['%s:%s' % (addr, port) for addr, port, _ in self.or_addresses] - - if self.certificate: - attr['id'] = 'ed25519 %s' % _truncated_b64encode(self.certificate.key) - - return RouterStatusEntryV3.create(attr) - - @lru_cache() - def _onion_key_crosscert_digest(self): - """ - Provides the digest of the onion-key-crosscert data. This consists of the - RSA identity key sha1 and ed25519 identity key. - - :returns: **unicode** digest encoded in uppercase hex - - :raises: ValueError if the digest cannot be calculated - """ - - signing_key_digest = hashlib.sha1(_bytes_for_block(self.signing_key)).digest() - data = signing_key_digest + base64.b64decode(stem.util.str_tools._to_bytes(self.ed25519_master_key) + b'=') - return stem.util.str_tools._to_unicode(binascii.hexlify(data).upper()) - - def _check_constraints(self, entries): - super(RelayDescriptor, self)._check_constraints(entries) - - if self.ed25519_certificate: - if not self.onion_key_crosscert: - raise ValueError("Descriptor must have a 'onion-key-crosscert' when identity-ed25519 is present") - elif not self.ed25519_signature: - raise ValueError("Descriptor must have a 'router-sig-ed25519' when identity-ed25519 is present") - - -class BridgeDescriptor(ServerDescriptor): - """ - Bridge descriptor (`bridge descriptor specification - `_) - - :var str ed25519_certificate_hash: sha256 hash of the original identity-ed25519 - :var str router_digest_sha256: sha256 digest of this document - - .. versionchanged:: 1.5.0 - Added the ed25519_certificate_hash and router_digest_sha256 attributes. - Also added ntor_onion_key (previously this only belonged to unsanitized - descriptors). - """ - - TYPE_ANNOTATION_NAME = 'bridge-server-descriptor' - - ATTRIBUTES = dict(ServerDescriptor.ATTRIBUTES, **{ - 'ed25519_certificate_hash': (None, _parse_master_key_ed25519_for_hash_line), - 'router_digest_sha256': (None, _parse_router_digest_sha256_line), - '_digest': (None, _parse_router_digest_line), - }) - - PARSER_FOR_LINE = dict(ServerDescriptor.PARSER_FOR_LINE, **{ - 'master-key-ed25519': _parse_master_key_ed25519_for_hash_line, - 'router-digest-sha256': _parse_router_digest_sha256_line, - 'router-digest': _parse_router_digest_line, - }) - - @classmethod - def content(cls, attr = None, exclude = (), sign = False): - if sign: - raise NotImplementedError('Signing of %s not implemented' % cls.__name__) - - return _descriptor_content(attr, exclude, ( - ('router', '%s %s 9001 0 0' % (_random_nickname(), _random_ipv4_address())), - ('router-digest', '006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4'), - ('published', _random_date()), - ('bandwidth', '409600 819200 5120'), - ('reject', '*:*'), - )) - - def digest(self, hash_type = DigestHash.SHA1, encoding = DigestEncoding.HEX): - if hash_type == DigestHash.SHA1 and encoding == DigestEncoding.HEX: - return self._digest - else: - raise NotImplementedError('Bridge server descriptor digests are only available as sha1/hex, not %s/%s' % (hash_type, encoding)) - - def is_scrubbed(self): - """ - Checks if we've been properly scrubbed in accordance with the `bridge - descriptor specification - `_. - Validation is a moving target so this may not be fully up to date. - - :returns: **True** if we're scrubbed, **False** otherwise - """ - - return self.get_scrubbing_issues() == [] - - @lru_cache() - def get_scrubbing_issues(self): - """ - Provides issues with our scrubbing. - - :returns: **list** of strings which describe issues we have with our - scrubbing, this list is empty if we're properly scrubbed - """ - - issues = [] - - if not self.address.startswith('10.'): - issues.append("Router line's address should be scrubbed to be '10.x.x.x': %s" % self.address) - - if self.contact and self.contact != 'somebody': - issues.append("Contact line should be scrubbed to be 'somebody', but instead had '%s'" % self.contact) - - for address, _, is_ipv6 in self.or_addresses: - if not is_ipv6 and not address.startswith('10.'): - issues.append("or-address line's address should be scrubbed to be '10.x.x.x': %s" % address) - elif is_ipv6 and not address.startswith('fd9f:2e19:3bcf::'): - # TODO: this check isn't quite right because we aren't checking that - # the next grouping of hex digits contains 1-2 digits - issues.append("or-address line's address should be scrubbed to be 'fd9f:2e19:3bcf::xx:xxxx': %s" % address) - - for line in self.get_unrecognized_lines(): - if line.startswith('onion-key '): - issues.append('Bridge descriptors should have their onion-key scrubbed: %s' % line) - elif line.startswith('signing-key '): - issues.append('Bridge descriptors should have their signing-key scrubbed: %s' % line) - elif line.startswith('router-signature '): - issues.append('Bridge descriptors should have their signature scrubbed: %s' % line) - - return issues - - def _required_fields(self): - # bridge required fields are the same as a relay descriptor, minus items - # excluded according to the format page - - excluded_fields = [ - 'onion-key', - 'signing-key', - 'router-signature', - ] - - included_fields = [ - 'router-digest', - ] - - return tuple(included_fields + [f for f in REQUIRED_FIELDS if f not in excluded_fields]) - - def _single_fields(self): - return self._required_fields() + SINGLE_FIELDS - - def _last_keyword(self): - return None diff --git a/myenv/lib/python3.12/site-packages/stem/descriptor/tordnsel.py b/myenv/lib/python3.12/site-packages/stem/descriptor/tordnsel.py deleted file mode 100644 index 8a65186..0000000 --- a/myenv/lib/python3.12/site-packages/stem/descriptor/tordnsel.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright 2013-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parsing for `TorDNSEL `_ -exit list files. - -:: - - TorDNSEL - Exit list provided by TorDNSEL -""" - -import stem.util.connection -import stem.util.str_tools -import stem.util.tor_tools - -from stem.descriptor import ( - Descriptor, - _read_until_keywords, - _descriptor_components, -) - - -def _parse_file(tordnsel_file, validate = False, **kwargs): - """ - Iterates over a tordnsel file. - - :returns: iterator for :class:`~stem.descriptor.tordnsel.TorDNSEL` - instances in the file - - :raises: - * **ValueError** if the contents is malformed and validate is **True** - * **IOError** if the file can't be read - """ - - # skip content prior to the first ExitNode - _read_until_keywords('ExitNode', tordnsel_file, skip = True) - - while True: - contents = _read_until_keywords('ExitAddress', tordnsel_file) - contents += _read_until_keywords('ExitNode', tordnsel_file) - - if contents: - yield TorDNSEL(bytes.join(b'', contents), validate, **kwargs) - else: - break # done parsing file - - -class TorDNSEL(Descriptor): - """ - TorDNSEL descriptor (`exitlist specification - `_) - - :var str fingerprint: **\\*** authority's fingerprint - :var datetime published: **\\*** time in UTC when this descriptor was made - :var datetime last_status: **\\*** time in UTC when the relay was seen in a v2 network status - :var list exit_addresses: **\\*** list of (str address, datetime date) tuples consisting of the found IPv4 exit address and the time - - **\\*** attribute is either required when we're parsed with validation or has - a default value, others are left as **None** if undefined - """ - - TYPE_ANNOTATION_NAME = 'tordnsel' - - def __init__(self, raw_contents, validate): - super(TorDNSEL, self).__init__(raw_contents) - raw_contents = stem.util.str_tools._to_unicode(raw_contents) - entries = _descriptor_components(raw_contents, validate) - - self.fingerprint = None - self.published = None - self.last_status = None - self.exit_addresses = [] - - self._parse(entries, validate) - - def _parse(self, entries, validate): - - for keyword, values in list(entries.items()): - value, block_type, block_content = values[0] - - if validate and block_content: - raise ValueError('Unexpected block content: %s' % block_content) - - if keyword == 'ExitNode': - if validate and not stem.util.tor_tools.is_valid_fingerprint(value): - raise ValueError('Tor relay fingerprints consist of forty hex digits: %s' % value) - - self.fingerprint = value - elif keyword == 'Published': - try: - self.published = stem.util.str_tools._parse_timestamp(value) - except ValueError: - if validate: - raise ValueError("Published time wasn't parsable: %s" % value) - elif keyword == 'LastStatus': - try: - self.last_status = stem.util.str_tools._parse_timestamp(value) - except ValueError: - if validate: - raise ValueError("LastStatus time wasn't parsable: %s" % value) - elif keyword == 'ExitAddress': - for value, block_type, block_content in values: - address, date = value.split(' ', 1) - - if validate: - if not stem.util.connection.is_valid_ipv4_address(address): - raise ValueError("ExitAddress isn't a valid IPv4 address: %s" % address) - elif block_content: - raise ValueError('Unexpected block content: %s' % block_content) - - try: - date = stem.util.str_tools._parse_timestamp(date) - self.exit_addresses.append((address, date)) - except ValueError: - if validate: - raise ValueError("ExitAddress found time wasn't parsable: %s" % value) - elif validate: - raise ValueError('Unrecognized keyword: %s' % keyword) diff --git a/myenv/lib/python3.12/site-packages/stem/directory.py b/myenv/lib/python3.12/site-packages/stem/directory.py deleted file mode 100644 index 3a3644d..0000000 --- a/myenv/lib/python3.12/site-packages/stem/directory.py +++ /dev/null @@ -1,668 +0,0 @@ -# Copyright 2018-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Directories that provide `relay descriptor information -<../tutorials/mirror_mirror_on_the_wall.html>`_. At a very high level tor works -as follows... - -1. Volunteer starts a new tor relay, during which it sends a `server - descriptor `_ to each of the directory - authorities. - -2. Each hour the directory authorities make a `vote - `_ that says who they think the active - relays are in the network and some attributes about them. - -3. The directory authorities send each other their votes, and compile that - into the `consensus `_. This document is very - similar to the votes, the only difference being that the majority of the - authorities agree upon and sign this document. The idividual relay entries - in the vote or consensus is called `router status entries - `_. - -4. Tor clients (people using the service) download the consensus from an - authority, fallback, or other mirror to determine who the active relays in - the network are. They then use this to construct circuits and use the - network. - -:: - - Directory - Relay we can retrieve descriptor information from - | |- from_cache - Provides cached information bundled with Stem. - | +- from_remote - Downloads the latest directory information from tor. - | - |- Authority - Tor directory authority - +- Fallback - Mirrors that can be used instead of the authorities - -.. versionadded:: 1.7.0 -""" - -import os -import re -import sys - -import stem -import stem.util -import stem.util.conf - -from stem.util import connection, str_tools, tor_tools - -try: - # added in python 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -try: - # account for urllib's change between python 2.x and 3.x - import urllib.request as urllib -except ImportError: - import urllib2 as urllib - -GITWEB_AUTHORITY_URL = 'https://gitweb.torproject.org/tor.git/plain/src/app/config/auth_dirs.inc' -GITWEB_FALLBACK_URL = 'https://gitweb.torproject.org/tor.git/plain/src/app/config/fallback_dirs.inc' -FALLBACK_CACHE_PATH = os.path.join(os.path.dirname(__file__), 'cached_fallbacks.cfg') - -AUTHORITY_NAME = re.compile('"(\\S+) orport=(\\d+) .*"') -AUTHORITY_V3IDENT = re.compile('"v3ident=([\\dA-F]{40}) "') -AUTHORITY_IPV6 = re.compile('"ipv6=\\[([\\da-f:]+)\\]:(\\d+) "') -AUTHORITY_ADDR = re.compile('"([\\d\\.]+):(\\d+) ([\\dA-F ]{49})",') - -FALLBACK_DIV = '/* ===== */' -FALLBACK_MAPPING = re.compile('/\\*\\s+(\\S+)=(\\S*)\\s+\\*/') - -FALLBACK_ADDR = re.compile('"([\\d\\.]+):(\\d+) orport=(\\d+) id=([\\dA-F]{40}).*') -FALLBACK_NICKNAME = re.compile('/\\* nickname=(\\S+) \\*/') -FALLBACK_EXTRAINFO = re.compile('/\\* extrainfo=([0-1]) \\*/') -FALLBACK_IPV6 = re.compile('" ipv6=\\[([\\da-f:]+)\\]:(\\d+)"') - - -def _match_with(lines, regexes, required = None): - """ - Scans the given content against a series of regex matchers, providing back a - mapping of regexes to their capture groups. This maping is with the value if - the regex has just a single capture group, and a tuple otherwise. - - :param list lines: text to parse - :param list regexes: regexes to match against - :param list required: matches that must be in the content - - :returns: **dict** mapping matchers against their capture groups - - :raises: **ValueError** if a required match is not present - """ - - matches = {} - - for line in lines: - for matcher in regexes: - m = matcher.search(str_tools._to_unicode(line)) - - if m: - match_groups = m.groups() - matches[matcher] = match_groups if len(match_groups) > 1 else match_groups[0] - - if required: - for required_matcher in required: - if required_matcher not in matches: - raise ValueError('Failed to parse mandatory data from:\n\n%s' % '\n'.join(lines)) - - return matches - - -def _directory_entries(lines, pop_section_func, regexes, required = None): - next_section = pop_section_func(lines) - - while next_section: - yield _match_with(next_section, regexes, required) - next_section = pop_section_func(lines) - - -class Directory(object): - """ - Relay we can contact for descriptor information. - - Our :func:`~stem.directory.Directory.from_cache` and - :func:`~stem.directory.Directory.from_remote` functions key off a - different identifier based on our subclass... - - * :class:`~stem.directory.Authority` keys off the nickname. - * :class:`~stem.directory.Fallback` keys off fingerprints. - - This is because authorities are highly static and canonically known by their - names, whereas fallbacks vary more and don't necessarily have a nickname to - key off of. - - :var str address: IPv4 address of the directory - :var int or_port: port on which the relay services relay traffic - :var int dir_port: port on which directory information is available - :var str fingerprint: relay fingerprint - :var str nickname: relay nickname - :var str orport_v6: **(address, port)** tuple for the directory's IPv6 - ORPort, or **None** if it doesn't have one - """ - - def __init__(self, address, or_port, dir_port, fingerprint, nickname, orport_v6): - identifier = '%s (%s)' % (fingerprint, nickname) if nickname else fingerprint - - if not connection.is_valid_ipv4_address(address): - raise ValueError('%s has an invalid IPv4 address: %s' % (identifier, address)) - elif not connection.is_valid_port(or_port): - raise ValueError('%s has an invalid ORPort: %s' % (identifier, or_port)) - elif not connection.is_valid_port(dir_port): - raise ValueError('%s has an invalid DirPort: %s' % (identifier, dir_port)) - elif not tor_tools.is_valid_fingerprint(fingerprint): - raise ValueError('%s has an invalid fingerprint: %s' % (identifier, fingerprint)) - elif nickname and not tor_tools.is_valid_nickname(nickname): - raise ValueError('%s has an invalid nickname: %s' % (fingerprint, nickname)) - - if orport_v6: - if not isinstance(orport_v6, tuple) or len(orport_v6) != 2: - raise ValueError('%s orport_v6 should be a two value tuple: %s' % (identifier, str(orport_v6))) - elif not connection.is_valid_ipv6_address(orport_v6[0]): - raise ValueError('%s has an invalid IPv6 address: %s' % (identifier, orport_v6[0])) - elif not connection.is_valid_port(orport_v6[1]): - raise ValueError('%s has an invalid IPv6 port: %s' % (identifier, orport_v6[1])) - - self.address = address - self.or_port = int(or_port) - self.dir_port = int(dir_port) - self.fingerprint = fingerprint - self.nickname = nickname - self.orport_v6 = (orport_v6[0], int(orport_v6[1])) if orport_v6 else None - - @staticmethod - def from_cache(): - """ - Provides cached Tor directory information. This information is hardcoded - into Tor and occasionally changes, so the information provided by this - method may not necessarily match the latest version of tor. - - .. versionadded:: 1.5.0 - - .. versionchanged:: 1.7.0 - Support added to the :class:`~stem.directory.Authority` class. - - :returns: **dict** of **str** identifiers to - :class:`~stem.directory.Directory` instances - """ - - raise NotImplementedError('Unsupported Operation: this should be implemented by the Directory subclass') - - @staticmethod - def from_remote(timeout = 60): - """ - Reads and parses tor's directory data `from gitweb.torproject.org `_. - Note that while convenient, this reliance on GitWeb means you should alway - call with a fallback, such as... - - :: - - try: - authorities = stem.directory.Authority.from_remote() - except IOError: - authorities = stem.directory.Authority.from_cache() - - .. versionadded:: 1.5.0 - - .. versionchanged:: 1.7.0 - Support added to the :class:`~stem.directory.Authority` class. - - :param int timeout: seconds to wait before timing out the request - - :returns: **dict** of **str** identifiers to their - :class:`~stem.directory.Directory` - - :raises: **IOError** if unable to retrieve the fallback directories - """ - - raise NotImplementedError('Unsupported Operation: this should be implemented by the Directory subclass') - - def __hash__(self): - return stem.util._hash_attr(self, 'address', 'or_port', 'dir_port', 'fingerprint', 'nickname', 'orport_v6') - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Directory) else False - - def __ne__(self, other): - return not self == other - - -class Authority(Directory): - """ - Tor directory authority, a special type of relay `hardcoded into tor - `_ - to enumerate the relays in the network. - - .. versionchanged:: 1.3.0 - Added the is_bandwidth_authority attribute. - - .. versionchanged:: 1.7.0 - Added the orport_v6 attribute. - - .. deprecated:: 1.7.0 - The is_bandwidth_authority attribute is deprecated and will be removed in - the future. - - :var str v3ident: identity key fingerprint used to sign votes and consensus - """ - - def __init__(self, address = None, or_port = None, dir_port = None, fingerprint = None, nickname = None, orport_v6 = None, v3ident = None, is_bandwidth_authority = False): - super(Authority, self).__init__(address, or_port, dir_port, fingerprint, nickname, orport_v6) - - if v3ident and not tor_tools.is_valid_fingerprint(v3ident): - identifier = '%s (%s)' % (fingerprint, nickname) if nickname else fingerprint - raise ValueError('%s has an invalid v3ident: %s' % (identifier, v3ident)) - - self.v3ident = v3ident - self.is_bandwidth_authority = is_bandwidth_authority - - @staticmethod - def from_cache(): - return dict(DIRECTORY_AUTHORITIES) - - @staticmethod - def from_remote(timeout = 60): - try: - lines = str_tools._to_unicode(urllib.urlopen(GITWEB_AUTHORITY_URL, timeout = timeout).read()).splitlines() - - if not lines: - raise IOError('no content') - except: - exc, stacktrace = sys.exc_info()[1:3] - message = "Unable to download tor's directory authorities from %s: %s" % (GITWEB_AUTHORITY_URL, exc) - raise stem.DownloadFailed(GITWEB_AUTHORITY_URL, exc, stacktrace, message) - - # Entries look like... - # - # "moria1 orport=9101 " - # "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " - # "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", - - try: - results = {} - - for matches in _directory_entries(lines, Authority._pop_section, (AUTHORITY_NAME, AUTHORITY_V3IDENT, AUTHORITY_IPV6, AUTHORITY_ADDR), required = (AUTHORITY_NAME, AUTHORITY_ADDR)): - nickname, or_port = matches.get(AUTHORITY_NAME) - address, dir_port, fingerprint = matches.get(AUTHORITY_ADDR) - - results[nickname] = Authority( - address = address, - or_port = or_port, - dir_port = dir_port, - fingerprint = fingerprint.replace(' ', ''), - nickname = nickname, - orport_v6 = matches.get(AUTHORITY_IPV6), - v3ident = matches.get(AUTHORITY_V3IDENT), - ) - except ValueError as exc: - raise IOError(str(exc)) - - return results - - @staticmethod - def _pop_section(lines): - """ - Provides the next authority entry. - """ - - section_lines = [] - - if lines: - section_lines.append(lines.pop(0)) - - while lines and lines[0].startswith(' '): - section_lines.append(lines.pop(0)) - - return section_lines - - def __hash__(self): - return stem.util._hash_attr(self, 'v3ident', 'is_bandwidth_authority', parent = Directory, cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Authority) else False - - def __ne__(self, other): - return not self == other - - -class Fallback(Directory): - """ - Particularly stable relays tor can instead of authorities when - bootstrapping. These relays are `hardcoded in tor - `_. - - For example, the following checks the performance of tor's fallback directories... - - :: - - import time - from stem.descriptor.remote import get_consensus - from stem.directory import Fallback - - for fallback in Fallback.from_cache().values(): - start = time.time() - get_consensus(endpoints = [(fallback.address, fallback.dir_port)]).run() - print('Downloading the consensus took %0.2f from %s' % (time.time() - start, fallback.fingerprint)) - - :: - - % python example.py - Downloading the consensus took 5.07 from 0AD3FA884D18F89EEA2D89C019379E0E7FD94417 - Downloading the consensus took 3.59 from C871C91489886D5E2E94C13EA1A5FDC4B6DC5204 - Downloading the consensus took 4.16 from 74A910646BCEEFBCD2E874FC1DC997430F968145 - ... - - .. versionadded:: 1.5.0 - - .. versionchanged:: 1.7.0 - Added the has_extrainfo and header attributes which are part of - the `second version of the fallback directories - `_. - - :var bool has_extrainfo: **True** if the relay should be able to provide - extrainfo descriptors, **False** otherwise. - :var collections.OrderedDict header: metadata about the fallback directory file this originated from - """ - - def __init__(self, address = None, or_port = None, dir_port = None, fingerprint = None, nickname = None, has_extrainfo = False, orport_v6 = None, header = None): - super(Fallback, self).__init__(address, or_port, dir_port, fingerprint, nickname, orport_v6) - self.has_extrainfo = has_extrainfo - self.header = OrderedDict(header) if header else OrderedDict() - - @staticmethod - def from_cache(path = None): - if path is None: - path = FALLBACK_CACHE_PATH - conf = stem.util.conf.Config() - conf.load(path) - headers = OrderedDict([(k.split('.', 1)[1], conf.get(k)) for k in conf.keys() if k.startswith('header.')]) - - results = {} - - for fingerprint in set([key.split('.')[0] for key in conf.keys()]): - if fingerprint in ('tor_commit', 'stem_commit', 'header'): - continue - - attr = {} - - for attr_name in ('address', 'or_port', 'dir_port', 'nickname', 'has_extrainfo', 'orport6_address', 'orport6_port'): - key = '%s.%s' % (fingerprint, attr_name) - attr[attr_name] = conf.get(key) - - if not attr[attr_name] and attr_name not in ('nickname', 'has_extrainfo', 'orport6_address', 'orport6_port'): - raise IOError("'%s' is missing from %s" % (key, FALLBACK_CACHE_PATH)) - - if attr['orport6_address'] and attr['orport6_port']: - orport_v6 = (attr['orport6_address'], int(attr['orport6_port'])) - else: - orport_v6 = None - - results[fingerprint] = Fallback( - address = attr['address'], - or_port = int(attr['or_port']), - dir_port = int(attr['dir_port']), - fingerprint = fingerprint, - nickname = attr['nickname'], - has_extrainfo = attr['has_extrainfo'] == 'true', - orport_v6 = orport_v6, - header = headers, - ) - - return results - - @staticmethod - def from_remote(timeout = 60): - try: - lines = str_tools._to_unicode(urllib.urlopen(GITWEB_FALLBACK_URL, timeout = timeout).read()).splitlines() - - if not lines: - raise IOError('no content') - except: - exc, stacktrace = sys.exc_info()[1:3] - message = "Unable to download tor's fallback directories from %s: %s" % (GITWEB_FALLBACK_URL, exc) - raise stem.DownloadFailed(GITWEB_FALLBACK_URL, exc, stacktrace, message) - - # header metadata - - if lines[0] != '/* type=fallback */': - raise IOError('%s does not have a type field indicating it is fallback directory metadata' % GITWEB_FALLBACK_URL) - - header = {} - - for line in Fallback._pop_section(lines): - mapping = FALLBACK_MAPPING.match(line) - - if mapping: - header[mapping.group(1)] = mapping.group(2) - else: - raise IOError('Malformed fallback directory header line: %s' % line) - - Fallback._pop_section(lines) # skip human readable comments - - # Entries look like... - # - # "5.9.110.236:9030 orport=9001 id=0756B7CD4DFC8182BE23143FAC0642F515182CEB" - # " ipv6=[2a01:4f8:162:51e2::2]:9001" - # /* nickname=rueckgrat */ - # /* extrainfo=1 */ - - try: - results = {} - - for matches in _directory_entries(lines, Fallback._pop_section, (FALLBACK_ADDR, FALLBACK_NICKNAME, FALLBACK_EXTRAINFO, FALLBACK_IPV6), required = (FALLBACK_ADDR,)): - address, dir_port, or_port, fingerprint = matches[FALLBACK_ADDR] - - results[fingerprint] = Fallback( - address = address, - or_port = int(or_port), - dir_port = int(dir_port), - fingerprint = fingerprint, - nickname = matches.get(FALLBACK_NICKNAME), - has_extrainfo = matches.get(FALLBACK_EXTRAINFO) == '1', - orport_v6 = matches.get(FALLBACK_IPV6), - header = header, - ) - except ValueError as exc: - raise IOError(str(exc)) - - return results - - @staticmethod - def _pop_section(lines): - """ - Provides lines up through the next divider. This excludes lines with just a - comma since they're an artifact of these being C strings. - """ - - section_lines = [] - - if lines: - line = lines.pop(0) - - while lines and line != FALLBACK_DIV: - if line.strip() != ',': - section_lines.append(line) - - line = lines.pop(0) - - return section_lines - - @staticmethod - def _write(fallbacks, tor_commit, stem_commit, headers, path = FALLBACK_CACHE_PATH): - """ - Persists fallback directories to a location in a way that can be read by - from_cache(). - - :param dict fallbacks: mapping of fingerprints to their fallback directory - :param str tor_commit: tor commit the fallbacks came from - :param str stem_commit: stem commit the fallbacks came from - :param dict headers: metadata about the file these came from - :param str path: location fallbacks will be persisted to - """ - - conf = stem.util.conf.Config() - conf.set('tor_commit', tor_commit) - conf.set('stem_commit', stem_commit) - - for k, v in headers.items(): - conf.set('header.%s' % k, v) - - for directory in sorted(fallbacks.values(), key = lambda x: x.fingerprint): - fingerprint = directory.fingerprint - conf.set('%s.address' % fingerprint, directory.address) - conf.set('%s.or_port' % fingerprint, str(directory.or_port)) - conf.set('%s.dir_port' % fingerprint, str(directory.dir_port)) - conf.set('%s.nickname' % fingerprint, directory.nickname) - conf.set('%s.has_extrainfo' % fingerprint, 'true' if directory.has_extrainfo else 'false') - - if directory.orport_v6: - conf.set('%s.orport6_address' % fingerprint, str(directory.orport_v6[0])) - conf.set('%s.orport6_port' % fingerprint, str(directory.orport_v6[1])) - - conf.save(path) - - def __hash__(self): - return stem.util._hash_attr(self, 'has_extrainfo', 'header', parent = Directory, cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Fallback) else False - - def __ne__(self, other): - return not self == other - - -def _fallback_directory_differences(previous_directories, new_directories): - """ - Provides a description of how fallback directories differ. - """ - - lines = [] - - added_fp = set(new_directories.keys()).difference(previous_directories.keys()) - removed_fp = set(previous_directories.keys()).difference(new_directories.keys()) - - for fp in added_fp: - directory = new_directories[fp] - orport_v6 = '%s:%s' % directory.orport_v6 if directory.orport_v6 else '[none]' - - lines += [ - '* Added %s as a new fallback directory:' % directory.fingerprint, - ' address: %s' % directory.address, - ' or_port: %s' % directory.or_port, - ' dir_port: %s' % directory.dir_port, - ' nickname: %s' % directory.nickname, - ' has_extrainfo: %s' % directory.has_extrainfo, - ' orport_v6: %s' % orport_v6, - '', - ] - - for fp in removed_fp: - lines.append('* Removed %s as a fallback directory' % fp) - - for fp in new_directories: - if fp in added_fp or fp in removed_fp: - continue # already discussed these - - previous_directory = previous_directories[fp] - new_directory = new_directories[fp] - - if previous_directory != new_directory: - for attr in ('address', 'or_port', 'dir_port', 'fingerprint', 'orport_v6'): - old_attr = getattr(previous_directory, attr) - new_attr = getattr(new_directory, attr) - - if old_attr != new_attr: - lines.append('* Changed the %s of %s from %s to %s' % (attr, fp, old_attr, new_attr)) - - return '\n'.join(lines) - - -DIRECTORY_AUTHORITIES = { - 'moria1': Authority( - nickname = 'moria1', - address = '128.31.0.39', - or_port = 9101, - dir_port = 9131, - fingerprint = '9695DFC35FFEB861329B9F1AB04C46397020CE31', - v3ident = 'D586D18309DED4CD6D57C18FDB97EFA96D330566', - ), - 'tor26': Authority( - nickname = 'tor26', - address = '86.59.21.38', - or_port = 443, - dir_port = 80, - fingerprint = '847B1F850344D7876491A54892F904934E4EB85D', - orport_v6 = ('2001:858:2:2:aabb:0:563b:1526', 443), - v3ident = '14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4', - ), - 'dizum': Authority( - nickname = 'dizum', - address = '45.66.33.45', - or_port = 443, - dir_port = 80, - fingerprint = '7EA6EAD6FD83083C538F44038BBFA077587DD755', - v3ident = 'E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58', - ), - 'gabelmoo': Authority( - nickname = 'gabelmoo', - address = '131.188.40.189', - or_port = 443, - dir_port = 80, - fingerprint = 'F2044413DAC2E02E3D6BCF4735A19BCA1DE97281', - orport_v6 = ('2001:638:a000:4140::ffff:189', 443), - v3ident = 'ED03BB616EB2F60BEC80151114BB25CEF515B226', - ), - 'dannenberg': Authority( - nickname = 'dannenberg', - address = '193.23.244.244', - or_port = 443, - dir_port = 80, - orport_v6 = ('2001:678:558:1000::244', 443), - fingerprint = '7BE683E65D48141321C5ED92F075C55364AC7123', - v3ident = '0232AF901C31A04EE9848595AF9BB7620D4C5B2E', - ), - 'maatuska': Authority( - nickname = 'maatuska', - address = '171.25.193.9', - or_port = 80, - dir_port = 443, - fingerprint = 'BD6A829255CB08E66FBE7D3748363586E46B3810', - orport_v6 = ('2001:67c:289c::9', 80), - v3ident = '49015F787433103580E3B66A1707A00E60F2D15B', - ), - 'Faravahar': Authority( - nickname = 'Faravahar', - address = '154.35.175.225', - or_port = 443, - dir_port = 80, - fingerprint = 'CF6D0AAFB385BE71B8E111FC5CFF4B47923733BC', - v3ident = 'EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97', - ), - 'longclaw': Authority( - nickname = 'longclaw', - address = '199.58.81.140', - or_port = 443, - dir_port = 80, - fingerprint = '74A910646BCEEFBCD2E874FC1DC997430F968145', - v3ident = '23D15D965BC35114467363C165C4F724B64B4F66', - ), - 'bastet': Authority( - nickname = 'bastet', - address = '204.13.164.118', - or_port = 443, - dir_port = 80, - fingerprint = '24E2F139121D4394C54B5BCC368B3B411857C413', - orport_v6 = ('2620:13:4000:6000::1000:118', 443), - v3ident = '27102BC123E7AF1D4741AE047E160C91ADC76B21', - ), - 'Serge': Authority( - nickname = 'Serge', - address = '66.111.2.131', - or_port = 9001, - dir_port = 9030, - fingerprint = 'BA44A889E64B93FAA2B114E02C2A279A8555C533', - v3ident = None, # does not vote in the consensus - ), -} diff --git a/myenv/lib/python3.12/site-packages/stem/exit_policy.py b/myenv/lib/python3.12/site-packages/stem/exit_policy.py deleted file mode 100644 index 76d75e5..0000000 --- a/myenv/lib/python3.12/site-packages/stem/exit_policy.py +++ /dev/null @@ -1,1101 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Representation of tor exit policies. These can be easily used to check if -exiting to a destination is permissible or not. For instance... - -:: - - >>> from stem.exit_policy import ExitPolicy, MicroExitPolicy - >>> policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*') - >>> print(policy) - accept *:80, accept *:443, reject *:* - >>> print(policy.summary()) - accept 80, 443 - >>> policy.can_exit_to('75.119.206.243', 80) - True - - >>> policy = MicroExitPolicy('accept 80,443') - >>> print(policy) - accept 80,443 - >>> policy.can_exit_to('75.119.206.243', 80) - True - -:: - - ExitPolicy - Exit policy for a Tor relay - |- MicroExitPolicy - Microdescriptor exit policy - | - |- can_exit_to - check if exiting to this destination is allowed or not - |- is_exiting_allowed - check if any exiting is allowed - |- summary - provides a short label, similar to a microdescriptor - |- has_private - checks if policy has anything expanded from the 'private' keyword - |- strip_private - provides a copy of the policy without 'private' entries - |- has_default - checks if policy ends with the defaultly appended suffix - |- strip_default - provides a copy of the policy without the default suffix - |- __str__ - string representation - +- __iter__ - ExitPolicyRule entries that this contains - - ExitPolicyRule - Single rule of an exit policy chain - |- MicroExitPolicyRule - Single rule for a microdescriptor policy - | - |- is_address_wildcard - checks if we'll accept any address - |- is_port_wildcard - checks if we'll accept any port - |- get_address_type - provides the protocol our ip address belongs to - |- is_match - checks if we match a given destination - |- get_mask - provides the address representation of our mask - |- get_masked_bits - provides the bit representation of our mask - |- is_default - flag indicating if this was part of the default end of a policy - |- is_private - flag indicating if this was expanded from a 'private' keyword - +- __str__ - string representation for this rule - - get_config_policy - provides the ExitPolicy based on torrc rules - -.. data:: AddressType (enum) - - Enumerations for IP address types that can be in an exit policy. - - ============ =========== - AddressType Description - ============ =========== - **WILDCARD** any address of either IPv4 or IPv6 - **IPv4** IPv4 address - **IPv6** IPv6 address - ============ =========== -""" - -from __future__ import absolute_import - -import re -import socket -import zlib - -import stem.prereq -import stem.util -import stem.util.connection -import stem.util.enum -import stem.util.str_tools - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -AddressType = stem.util.enum.Enum(('WILDCARD', 'Wildcard'), ('IPv4', 'IPv4'), ('IPv6', 'IPv6')) - -# Addresses aliased by the 'private' policy. From the tor man page... -# -# To specify all internal and link-local networks (including 0.0.0.0/8, -# 169.254.0.0/16, 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, and 172.16.0.0/12), -# you can use the 'private' alias instead of an address. - -PRIVATE_ADDRESSES = ( - '0.0.0.0/8', - '169.254.0.0/16', - '127.0.0.0/8', - '192.168.0.0/16', - '10.0.0.0/8', - '172.16.0.0/12', -) - - -def get_config_policy(rules, ip_address = None): - """ - Converts an ExitPolicy found in a torrc to a proper exit pattern. This - accounts for... - - * ports being optional - * the 'private' keyword - - .. deprecated:: 1.7.0 - - Tor's torrc parameters lack a formal spec, making it difficult for this - method to be reliable. Callers are encouraged to move to - :func:`~stem.control.Controller.get_exit_policy` instead. - - :param str,list rules: comma separated rules or list to be converted - :param str ip_address: this relay's IP address for the 'private' policy if - it's present, this defaults to the local address - - :returns: :class:`~stem.exit_policy.ExitPolicy` reflected by the rules - - :raises: **ValueError** if input isn't a valid tor exit policy - """ - - if ip_address and not (stem.util.connection.is_valid_ipv4_address(ip_address) or stem.util.connection.is_valid_ipv6_address(ip_address, allow_brackets = True)): - raise ValueError("%s isn't a valid IP address" % ip_address) - elif ip_address and stem.util.connection.is_valid_ipv6_address(ip_address, allow_brackets = True) and not (ip_address[0] == '[' and ip_address[-1] == ']'): - ip_address = '[%s]' % ip_address # ExitPolicy validation expects IPv6 addresses to be bracketed - - if stem.util._is_str(rules): - rules = rules.split(',') - - result = [] - - for rule in rules: - rule = rule.strip() - - if not rule: - continue - - if not re.search(':[\\d\\-\\*]+$', rule): - rule = '%s:*' % rule - - if 'private' in rule: - acceptance = rule.split(' ', 1)[0] - port = rule.rsplit(':', 1)[1] - addresses = list(PRIVATE_ADDRESSES) - - if ip_address: - addresses.append(ip_address) - else: - try: - addresses.append(socket.gethostbyname(socket.gethostname())) - except: - pass # we might not have a network connection - - for private_addr in addresses: - result.append(ExitPolicyRule('%s %s:%s' % (acceptance, private_addr, port))) - else: - result.append(ExitPolicyRule(rule)) - - return ExitPolicy(*result) - - -def _flag_private_rules(rules): - """ - Determine if part of our policy was expanded from the 'private' keyword. This - doesn't differentiate if this actually came from the 'private' keyword or a - series of rules exactly matching it. - """ - - matches = [] # find all possible starting indexes - - for i, rule in enumerate(rules): - if i + len(PRIVATE_ADDRESSES) > len(rules): - break - - rule_str = '%s/%s' % (rule.address, rule.get_masked_bits()) - - if rule_str == PRIVATE_ADDRESSES[0]: - matches.append(i) - - for start_index in matches: - # To match the private policy the following must all be true... - # - # * series of addresses and bit masks match PRIVATE_ADDRESSES - # * all rules have the same port range - # * all rules have the same acceptance (all accept or reject entries) - # - # The last rule is dynamically based on the relay's public address. It may - # not be present if get_config_policy() created this policy and we couldn't - # resolve our address. - - last_index = start_index + len(PRIVATE_ADDRESSES) - rule_set = rules[start_index:last_index] - last_rule = rules[last_index] if len(rules) > last_index else None - is_match = True - - min_port, max_port = rule_set[0].min_port, rule_set[0].max_port - is_accept = rule_set[0].is_accept - - for i, rule in enumerate(rule_set): - rule_str = '%s/%s' % (rule.address, rule.get_masked_bits()) - - if rule_str != PRIVATE_ADDRESSES[i] or rule.min_port != min_port or rule.max_port != max_port or rule.is_accept != is_accept: - is_match = False - break - - if is_match: - for rule in rule_set: - rule._is_private = True - - if last_rule and not last_rule.is_address_wildcard() and last_rule.min_port == min_port and last_rule.max_port == max_port and last_rule.is_accept == is_accept: - last_rule._is_private = True - - -def _flag_default_rules(rules): - """ - Determine if part of our policy ends with the defaultly appended suffix. - """ - - if len(rules) >= len(DEFAULT_POLICY_RULES): - rules_suffix = tuple(rules[-len(DEFAULT_POLICY_RULES):]) - - if rules_suffix == DEFAULT_POLICY_RULES: - for rule in rules_suffix: - rule._is_default_suffix = True - - -class ExitPolicy(object): - """ - Policy for the destinations that a relay allows or denies exiting to. This - is, in effect, just a list of :class:`~stem.exit_policy.ExitPolicyRule` - entries. - - :param list rules: **str** or :class:`~stem.exit_policy.ExitPolicyRule` - entries that make up this policy - """ - - def __init__(self, *rules): - # sanity check the types - - for rule in rules: - if not stem.util._is_str(rule) and not isinstance(rule, ExitPolicyRule): - raise TypeError('Exit policy rules can only contain strings or ExitPolicyRules, got a %s (%s)' % (type(rule), rules)) - - # Unparsed representation of the rules we were constructed with. Our - # _get_rules() method consumes this to provide ExitPolicyRule instances. - # This is lazily evaluated so we don't need to actually parse the exit - # policy if it's never used. - - is_all_str = True - - for rule in rules: - if not stem.util._is_str(rule): - is_all_str = False - - if rules and is_all_str: - byte_rules = [stem.util.str_tools._to_bytes(r) for r in rules] - self._input_rules = zlib.compress(b','.join(byte_rules)) - else: - self._input_rules = rules - - self._rules = None - self._hash = None - - # Result when no rules apply. According to the spec policies default to 'is - # allowed', but our microdescriptor policy subclass might want to change - # this. - - self._is_allowed_default = True - - @lru_cache() - def can_exit_to(self, address = None, port = None, strict = False): - """ - Checks if this policy allows exiting to a given destination or not. If the - address or port is omitted then this will check if we're allowed to exit to - any instances of the defined address or port. - - :param str address: IPv4 or IPv6 address (with or without brackets) - :param int port: port number - :param bool strict: if the address or port is excluded then check if we can - exit to **all** instances of the defined address or port - - :returns: **True** if exiting to this destination is allowed, **False** otherwise - """ - - if not self.is_exiting_allowed(): - return False - - for rule in self._get_rules(): - if rule.is_match(address, port, strict): - return rule.is_accept - - return self._is_allowed_default - - @lru_cache() - def is_exiting_allowed(self): - """ - Provides **True** if the policy allows exiting whatsoever, **False** - otherwise. - """ - - rejected_ports = set() - - for rule in self._get_rules(): - if rule.is_accept: - for port in range(rule.min_port, rule.max_port + 1): - if port not in rejected_ports: - return True - elif rule.is_address_wildcard(): - if rule.is_port_wildcard(): - return False - else: - rejected_ports.update(range(rule.min_port, rule.max_port + 1)) - - return self._is_allowed_default - - @lru_cache() - def summary(self): - """ - Provides a short description of our policy chain, similar to a - microdescriptor. This excludes entries that don't cover all IP - addresses, and is either white-list or blacklist policy based on - the final entry. For instance... - - :: - - >>> policy = ExitPolicy('accept *:80', 'accept *:443', 'reject *:*') - >>> policy.summary() - 'accept 80, 443' - - >>> policy = ExitPolicy('accept *:443', 'reject *:1-1024', 'accept *:*') - >>> policy.summary() - 'reject 1-442, 444-1024' - - :returns: **str** with a concise summary for our policy - """ - - # determines if we're a white-list or blacklist - is_whitelist = not self._is_allowed_default - - for rule in self._get_rules(): - if rule.is_address_wildcard() and rule.is_port_wildcard(): - is_whitelist = not rule.is_accept - break - - # Iterates over the policies and adds the the ports we'll return (ie, - # allows if a white-list and rejects if a blacklist). Regardless of a - # port's allow/reject policy, all further entries with that port are - # ignored since policies respect the first matching policy. - - display_ports, skip_ports = [], set() - - for rule in self._get_rules(): - if not rule.is_address_wildcard(): - continue - elif rule.is_port_wildcard(): - break - - for port in range(rule.min_port, rule.max_port + 1): - if port in skip_ports: - continue - - # if accept + white-list or reject + blacklist then add - if rule.is_accept == is_whitelist: - display_ports.append(port) - - # all further entries with this port should be ignored - skip_ports.add(port) - - # convert port list to a list of ranges (ie, ['1-3'] rather than [1, 2, 3]) - if display_ports: - display_ranges, temp_range = [], [] - display_ports.sort() - display_ports.append(None) # ending item to include last range in loop - - for port in display_ports: - if not temp_range or temp_range[-1] + 1 == port: - temp_range.append(port) - else: - if len(temp_range) > 1: - display_ranges.append('%i-%i' % (temp_range[0], temp_range[-1])) - else: - display_ranges.append(str(temp_range[0])) - - temp_range = [port] - else: - # everything for the inverse - is_whitelist = not is_whitelist - display_ranges = ['1-65535'] - - # constructs the summary string - label_prefix = 'accept ' if is_whitelist else 'reject ' - - return (label_prefix + ', '.join(display_ranges)).strip() - - def has_private(self): - """ - Checks if we have any rules expanded from the 'private' keyword. Tor - appends these by default to the start of the policy and includes a dynamic - address (the relay's public IP). - - .. versionadded:: 1.3.0 - - :returns: **True** if we have any private rules expanded from the 'private' - keyword, **False** otherwise - """ - - for rule in self._get_rules(): - if rule.is_private(): - return True - - return False - - def strip_private(self): - """ - Provides a copy of this policy without 'private' policy entries. - - .. versionadded:: 1.3.0 - - :returns: **ExitPolicy** without private rules - """ - - return ExitPolicy(*[rule for rule in self._get_rules() if not rule.is_private()]) - - def has_default(self): - """ - Checks if we have the default policy suffix. - - .. versionadded:: 1.3.0 - - :returns: **True** if we have the default policy suffix, **False** otherwise - """ - - for rule in self._get_rules(): - if rule.is_default(): - return True - - return False - - def strip_default(self): - """ - Provides a copy of this policy without the default policy suffix. - - .. versionadded:: 1.3.0 - - :returns: **ExitPolicy** without default rules - """ - - return ExitPolicy(*[rule for rule in self._get_rules() if not rule.is_default()]) - - def _get_rules(self): - # Local reference to our input_rules so this can be lock free. Otherwise - # another thread might unset our input_rules while processing them. - - input_rules = self._input_rules - - if self._rules is None and input_rules is not None: - rules = [] - is_all_accept, is_all_reject = True, True - - if isinstance(input_rules, bytes): - decompressed_rules = zlib.decompress(input_rules).split(b',') - else: - decompressed_rules = input_rules - - for rule in decompressed_rules: - if isinstance(rule, bytes): - rule = stem.util.str_tools._to_unicode(rule) - - if stem.util._is_str(rule): - if not rule.strip(): - continue - - rule = ExitPolicyRule(rule.strip()) - - if rule.is_accept: - is_all_reject = False - else: - is_all_accept = False - - rules.append(rule) - - if rule.is_address_wildcard() and rule.is_port_wildcard(): - break # this is a catch-all, no reason to include more - - # If we only have one kind of entry *and* end with a wildcard then - # we might as well use the simpler version. For instance... - # - # reject *:80, reject *:443, reject *:* - # - # ... could also be represented as simply... - # - # reject *:* - # - # This mostly comes up with reject-all policies because the - # 'reject private:*' appends an extra seven rules that have no - # effect. - - if rules and (rules[-1].is_address_wildcard() and rules[-1].is_port_wildcard()): - if is_all_accept: - rules = [ExitPolicyRule('accept *:*')] - elif is_all_reject: - rules = [ExitPolicyRule('reject *:*')] - - _flag_private_rules(rules) - _flag_default_rules(rules) - - self._rules = rules - self._input_rules = None - - return self._rules - - def __len__(self): - return len(self._get_rules()) - - def __iter__(self): - for rule in self._get_rules(): - yield rule - - @lru_cache() - def __str__(self): - return ', '.join([str(rule) for rule in self._get_rules()]) - - def __hash__(self): - if self._hash is None: - my_hash = 0 - - for rule in self._get_rules(): - my_hash *= 1024 - my_hash += hash(rule) - - self._hash = my_hash - - return self._hash - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, ExitPolicy) else False - - def __ne__(self, other): - return not self == other - - -class MicroExitPolicy(ExitPolicy): - """ - Exit policy provided by the microdescriptors. This is a distilled version of - a normal :class:`~stem.exit_policy.ExitPolicy` contains, just consisting of a - list of ports that are either accepted or rejected. For instance... - - :: - - accept 80,443 # only accepts common http ports - reject 1-1024 # only accepts non-privileged ports - - Since these policies are a subset of the exit policy information (lacking IP - ranges) clients can only use them to guess if a relay will accept traffic or - not. To quote the `dir-spec `_ (section 3.2.1)... - - :: - - With microdescriptors, clients don't learn exact exit policies: - clients can only guess whether a relay accepts their request, try the - BEGIN request, and might get end-reason-exit-policy if they guessed - wrong, in which case they'll have to try elsewhere. - - :var bool is_accept: **True** if these are ports that we accept, **False** if - they're ports that we reject - - :param str policy: policy string that describes this policy - """ - - def __init__(self, policy): - # Microdescriptor policies are of the form... - # - # MicrodescriptrPolicy ::= ("accept" / "reject") SP PortList NL - # PortList ::= PortOrRange - # PortList ::= PortList "," PortOrRange - # PortOrRange ::= INT "-" INT / INT - - self._policy = policy - - if policy.startswith('accept'): - self.is_accept = True - elif policy.startswith('reject'): - self.is_accept = False - else: - raise ValueError("A microdescriptor exit policy must start with either 'accept' or 'reject': %s" % policy) - - policy = policy[6:] - - if not policy.startswith(' '): - raise ValueError('A microdescriptor exit policy should have a space separating accept/reject from its port list: %s' % self._policy) - - policy = policy.lstrip() - - # convert our port list into MicroExitPolicyRule - rules = [] - - for port_entry in policy.split(','): - if '-' in port_entry: - min_port, max_port = port_entry.split('-', 1) - else: - min_port = max_port = port_entry - - if not stem.util.connection.is_valid_port(min_port) or \ - not stem.util.connection.is_valid_port(max_port): - raise ValueError("'%s' is an invalid port range" % port_entry) - - rules.append(MicroExitPolicyRule(self.is_accept, int(min_port), int(max_port))) - - super(MicroExitPolicy, self).__init__(*rules) - self._is_allowed_default = not self.is_accept - - def __str__(self): - return self._policy - - def __hash__(self): - return hash(str(self)) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, MicroExitPolicy) else False - - def __ne__(self, other): - return not self == other - - -class ExitPolicyRule(object): - """ - Single rule from the user's exit policy. These rules are chained together to - form complete policies that describe where a relay will and will not allow - traffic to exit. - - The format of these rules are formally described in the `dir-spec - `_ as an - 'exitpattern'. Note that while these are similar to tor's man page entry for - ExitPolicies, it's not the exact same. An exitpattern is better defined and - stricter in what it'll accept. For instance, ports are not optional and it - does not contain the 'private' alias. - - This should be treated as an immutable object. - - .. versionchanged:: 1.5.0 - Support for 'accept6/reject6' entries and '\\*4/6' wildcards. - - :var bool is_accept: indicates if exiting is allowed or disallowed - - :var str address: address that this rule is for - - :var int min_port: lower end of the port range that we include (inclusive) - :var int max_port: upper end of the port range that we include (inclusive) - - :param str rule: exit policy rule to be parsed - - :raises: **ValueError** if input isn't a valid tor exit policy rule - """ - - def __init__(self, rule): - # policy ::= "accept[6]" exitpattern | "reject[6]" exitpattern - # exitpattern ::= addrspec ":" portspec - - rule = stem.util.str_tools._to_unicode(rule) - - self.is_accept = rule.startswith('accept') - is_ipv6_only = rule.startswith('accept6') or rule.startswith('reject6') - - if rule.startswith('accept6') or rule.startswith('reject6'): - exitpattern = rule[7:] - elif rule.startswith('accept') or rule.startswith('reject'): - exitpattern = rule[6:] - else: - raise ValueError("An exit policy must start with either 'accept[6]' or 'reject[6]': %s" % rule) - - if not exitpattern.startswith(' '): - raise ValueError('An exit policy should have a space separating its accept/reject from the exit pattern: %s' % rule) - - exitpattern = exitpattern.lstrip() - - if ':' not in exitpattern or ']' in exitpattern.rsplit(':', 1)[1]: - raise ValueError("An exitpattern must be of the form 'addrspec:portspec': %s" % rule) - - self.address = None - self._address_type = None - self._masked_bits = None - self.min_port = self.max_port = None - self._hash = None - - # Our mask in ip notation (ex. '255.255.255.0'). This is only set if we - # either have a custom mask that can't be represented by a number of bits, - # or the user has called mask(), lazily loading this. - - self._mask = None - - # Malformed exit policies are rejected, but there's an exception where it's - # just skipped: when an accept6/reject6 rule has an IPv4 address... - # - # "Using an IPv4 address with accept6 or reject6 is ignored and generates - # a warning." - - self._skip_rule = False - - addrspec, portspec = exitpattern.rsplit(':', 1) - self._apply_addrspec(rule, addrspec, is_ipv6_only) - self._apply_portspec(rule, portspec) - - # Flags to indicate if this rule seems to be expanded from the 'private' - # keyword or tor's default policy suffix. - - self._is_private = False - self._is_default_suffix = False - - def is_address_wildcard(self): - """ - **True** if we'll match against **any** address, **False** otherwise. - - Note that this is different than \\*4, \\*6, or '/0' address which are - wildcards for only either IPv4 or IPv6. - - :returns: **bool** for if our address matching is a wildcard - """ - - return self._address_type == _address_type_to_int(AddressType.WILDCARD) - - def is_port_wildcard(self): - """ - **True** if we'll match against any port, **False** otherwise. - - :returns: **bool** for if our port matching is a wildcard - """ - - return self.min_port in (0, 1) and self.max_port == 65535 - - def is_match(self, address = None, port = None, strict = False): - """ - **True** if we match against the given destination, **False** otherwise. If - the address or port is omitted then this will check if we're allowed to - exit to any instances of the defined address or port. - - :param str address: IPv4 or IPv6 address (with or without brackets) - :param int port: port number - :param bool strict: if the address or port is excluded then check if we can - exit to **all** instances of the defined address or port - - :returns: **bool** indicating if we match against this destination - - :raises: **ValueError** if provided with a malformed address or port - """ - - if self._skip_rule: - return False - - # validate our input and check if the argument doesn't match our address type - - if address is not None: - address_type = self.get_address_type() - - if stem.util.connection.is_valid_ipv4_address(address): - if address_type == AddressType.IPv6: - return False - elif stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True): - if address_type == AddressType.IPv4: - return False - - address = address.lstrip('[').rstrip(']') - else: - raise ValueError("'%s' isn't a valid IPv4 or IPv6 address" % address) - - if port is not None and not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' isn't a valid port" % port) - - # If we're not matching against an address or port but the rule has one - # then we're a fuzzy match. When that happens... - # - # * If strict and a reject rule then we're a match ('can exit to *all* instances'). - # * If not strict and an accept rule then match ('an exit ot *any* instance'). - - fuzzy_match = False - - if not self.is_address_wildcard(): - # Already got the integer representation of our mask and our address - # with the mask applied. Just need to check if this address with the - # mask applied matches. - - if address is None: - fuzzy_match = True - else: - comparison_addr_bin = stem.util.connection.address_to_int(address) - comparison_addr_bin &= self._get_mask_bin() - - if self._get_address_bin() != comparison_addr_bin: - return False - - if not self.is_port_wildcard(): - if port is None: - fuzzy_match = True - elif port < self.min_port or port > self.max_port: - return False - - if fuzzy_match: - return strict != self.is_accept - else: - return True - - def get_address_type(self): - """ - Provides the :data:`~stem.exit_policy.AddressType` for our policy. - - :returns: :data:`~stem.exit_policy.AddressType` for the type of address that we have - """ - - return _int_to_address_type(self._address_type) - - def get_mask(self, cache = True): - """ - Provides the address represented by our mask. This is **None** if our - address type is a wildcard. - - :param bool cache: caches the result if **True** - - :returns: str of our subnet mask for the address (ex. '255.255.255.0') - """ - - # Lazy loading our mask because it is very infrequently requested. There's - # no reason to usually use memory for it. - - if not self._mask: - address_type = self.get_address_type() - - if address_type == AddressType.WILDCARD: - mask = None - elif address_type == AddressType.IPv4: - mask = stem.util.connection.get_mask_ipv4(self._masked_bits) - elif address_type == AddressType.IPv6: - mask = stem.util.connection.get_mask_ipv6(self._masked_bits) - - if not cache: - return mask - - self._mask = mask - - return self._mask - - def get_masked_bits(self): - """ - Provides the number of bits our subnet mask represents. This is **None** if - our mask can't have a bit representation. - - :returns: int with the bit representation of our mask - """ - - return self._masked_bits - - def is_private(self): - """ - Checks if this rule was expanded from the 'private' policy keyword. - - .. versionadded:: 1.3.0 - - :returns: **True** if this rule was expanded from the 'private' keyword, **False** otherwise. - """ - - return self._is_private - - def is_default(self): - """ - Checks if this rule belongs to the default exit policy suffix. - - .. versionadded:: 1.3.0 - - :returns: **True** if this rule was part of the default end of a policy, **False** otherwise. - """ - - return self._is_default_suffix - - @lru_cache() - def __str__(self): - """ - Provides the string representation of our policy. This does not - necessarily match the rule that we were constructed from (due to things - like IPv6 address collapsing or the multiple representations that our mask - can have). However, it is a valid that would be accepted by our constructor - to re-create this rule. - """ - - label = 'accept ' if self.is_accept else 'reject ' - - if self.is_address_wildcard(): - label += '*:' - else: - address_type = self.get_address_type() - - if address_type == AddressType.IPv4: - label += self.address - else: - label += '[%s]' % self.address - - # Including our mask label as follows... - # - exclude our mask if it doesn't do anything - # - use our masked bit count if we can - # - use the mask itself otherwise - - if (address_type == AddressType.IPv4 and self._masked_bits == 32) or \ - (address_type == AddressType.IPv6 and self._masked_bits == 128): - label += ':' - elif self._masked_bits is not None: - label += '/%i:' % self._masked_bits - else: - label += '/%s:' % self.get_mask() - - if self.is_port_wildcard(): - label += '*' - elif self.min_port == self.max_port: - label += str(self.min_port) - else: - label += '%i-%i' % (self.min_port, self.max_port) - - return label - - @lru_cache() - def _get_mask_bin(self): - # provides an integer representation of our mask - - return int(stem.util.connection._address_to_binary(self.get_mask(False)), 2) - - @lru_cache() - def _get_address_bin(self): - # provides an integer representation of our address - - return stem.util.connection.address_to_int(self.address) & self._get_mask_bin() - - def _apply_addrspec(self, rule, addrspec, is_ipv6_only): - # Parses the addrspec... - # addrspec ::= "*" | ip4spec | ip6spec - - # Expand IPv4 and IPv6 specific wildcards into /0 entries so we have one - # fewer bizarre special case headaches to deal with. - - if addrspec == '*4': - addrspec = '0.0.0.0/0' - elif addrspec == '*6' or (addrspec == '*' and is_ipv6_only): - addrspec = '[0000:0000:0000:0000:0000:0000:0000:0000]/0' - - if '/' in addrspec: - self.address, addr_extra = addrspec.split('/', 1) - else: - self.address, addr_extra = addrspec, None - - if addrspec == '*': - self._address_type = _address_type_to_int(AddressType.WILDCARD) - self.address = self._masked_bits = None - elif stem.util.connection.is_valid_ipv4_address(self.address): - # ipv4spec ::= ip4 | ip4 "/" num_ip4_bits | ip4 "/" ip4mask - # ip4 ::= an IPv4 address in dotted-quad format - # ip4mask ::= an IPv4 mask in dotted-quad format - # num_ip4_bits ::= an integer between 0 and 32 - - if is_ipv6_only: - self._skip_rule = True - - self._address_type = _address_type_to_int(AddressType.IPv4) - - if addr_extra is None: - self._masked_bits = 32 - elif stem.util.connection.is_valid_ipv4_address(addr_extra): - # provided with an ip4mask - try: - self._masked_bits = stem.util.connection._get_masked_bits(addr_extra) - except ValueError: - # mask can't be represented as a number of bits (ex. '255.255.0.255') - self._mask = addr_extra - self._masked_bits = None - elif addr_extra.isdigit(): - # provided with a num_ip4_bits - self._masked_bits = int(addr_extra) - - if self._masked_bits < 0 or self._masked_bits > 32: - raise ValueError('IPv4 masks must be in the range of 0-32 bits') - else: - raise ValueError("The '%s' isn't a mask nor number of bits: %s" % (addr_extra, rule)) - elif self.address.startswith('[') and self.address.endswith(']') and \ - stem.util.connection.is_valid_ipv6_address(self.address[1:-1]): - # ip6spec ::= ip6 | ip6 "/" num_ip6_bits - # ip6 ::= an IPv6 address, surrounded by square brackets. - # num_ip6_bits ::= an integer between 0 and 128 - - self.address = stem.util.connection.expand_ipv6_address(self.address[1:-1].upper()) - self._address_type = _address_type_to_int(AddressType.IPv6) - - if addr_extra is None: - self._masked_bits = 128 - elif addr_extra.isdigit(): - # provided with a num_ip6_bits - self._masked_bits = int(addr_extra) - - if self._masked_bits < 0 or self._masked_bits > 128: - raise ValueError('IPv6 masks must be in the range of 0-128 bits') - else: - raise ValueError("The '%s' isn't a number of bits: %s" % (addr_extra, rule)) - else: - raise ValueError("'%s' isn't a wildcard, IPv4, or IPv6 address: %s" % (addrspec, rule)) - - def _apply_portspec(self, rule, portspec): - # Parses the portspec... - # portspec ::= "*" | port | port "-" port - # port ::= an integer between 1 and 65535, inclusive. - # - # Due to a tor bug the spec says that we should accept port of zero, but - # connections to port zero are never permitted. - - if portspec == '*': - self.min_port, self.max_port = 1, 65535 - elif portspec.isdigit(): - # provided with a single port - if stem.util.connection.is_valid_port(portspec, allow_zero = True): - self.min_port = self.max_port = int(portspec) - else: - raise ValueError("'%s' isn't within a valid port range: %s" % (portspec, rule)) - elif '-' in portspec: - # provided with a port range - port_comp = portspec.split('-', 1) - - if stem.util.connection.is_valid_port(port_comp, allow_zero = True): - self.min_port = int(port_comp[0]) - self.max_port = int(port_comp[1]) - - if self.min_port > self.max_port: - raise ValueError("Port range has a lower bound that's greater than its upper bound: %s" % rule) - else: - raise ValueError('Malformed port range: %s' % rule) - else: - raise ValueError("Port value isn't a wildcard, integer, or range: %s" % rule) - - def __hash__(self): - if self._hash is None: - self._hash = stem.util._hash_attr(self, 'is_accept', 'address', 'min_port', 'max_port') * 1024 + hash(self.get_mask(False)) - - return self._hash - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, ExitPolicyRule) else False - - def __ne__(self, other): - return not self == other - - -def _address_type_to_int(address_type): - return AddressType.index_of(address_type) - - -def _int_to_address_type(address_type_int): - return list(AddressType)[address_type_int] - - -class MicroExitPolicyRule(ExitPolicyRule): - """ - Lighter weight ExitPolicyRule derivative for microdescriptors. - """ - - def __init__(self, is_accept, min_port, max_port): - self.is_accept = is_accept - self.address = None # wildcard address - self.min_port = min_port - self.max_port = max_port - self._skip_rule = False - - def is_address_wildcard(self): - return True - - def get_address_type(self): - return AddressType.WILDCARD - - def get_mask(self, cache = True): - return None - - def get_masked_bits(self): - return None - - def __hash__(self): - return stem.util._hash_attr(self, 'is_accept', 'min_port', 'max_port', cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, MicroExitPolicyRule) else False - - def __ne__(self, other): - return not self == other - - -DEFAULT_POLICY_RULES = tuple([ExitPolicyRule(rule) for rule in ( - 'reject *:25', - 'reject *:119', - 'reject *:135-139', - 'reject *:445', - 'reject *:563', - 'reject *:1214', - 'reject *:4661-4666', - 'reject *:6346-6429', - 'reject *:6699', - 'reject *:6881-6999', - 'accept *:*', -)]) diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__init__.py b/myenv/lib/python3.12/site-packages/stem/interpreter/__init__.py deleted file mode 100644 index a4911a6..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/__init__.py +++ /dev/null @@ -1,186 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Interactive interpreter for interacting with Tor directly. This adds usability -features such as tab completion, history, and IRC-style functions (like /help). -""" - -import os -import sys - -import stem -import stem.connection -import stem.prereq -import stem.process -import stem.util.conf -import stem.util.system -import stem.util.term - -from stem.util.term import Attr, Color, format - -__all__ = [ - 'arguments', - 'autocomplete', - 'commands', - 'help', -] - -PROMPT = format('>>> ', Color.GREEN, Attr.BOLD, Attr.READLINE_ESCAPE) - -STANDARD_OUTPUT = (Color.BLUE, Attr.LINES) -BOLD_OUTPUT = (Color.BLUE, Attr.BOLD, Attr.LINES) -HEADER_OUTPUT = (Color.GREEN, Attr.LINES) -HEADER_BOLD_OUTPUT = (Color.GREEN, Attr.BOLD, Attr.LINES) -ERROR_OUTPUT = (Attr.BOLD, Color.RED, Attr.LINES) - -settings_path = os.path.join(os.path.dirname(__file__), 'settings.cfg') -uses_settings = stem.util.conf.uses_settings('stem_interpreter', settings_path) - - -@uses_settings -def msg(message, config, **attr): - return config.get(message).format(**attr) - - -def main(): - import readline - - import stem.interpreter.arguments - import stem.interpreter.autocomplete - import stem.interpreter.commands - - try: - args = stem.interpreter.arguments.parse(sys.argv[1:]) - except ValueError as exc: - print(exc) - sys.exit(1) - - if args.print_help: - print(stem.interpreter.arguments.get_help()) - sys.exit() - - if args.disable_color or not sys.stdout.isatty(): - global PROMPT - stem.util.term.DISABLE_COLOR_SUPPORT = True - PROMPT = '>>> ' - - # If the user isn't connecting to something in particular then offer to start - # tor if it isn't running. - - if not (args.user_provided_port or args.user_provided_socket): - is_tor_running = stem.util.system.is_running('tor') or stem.util.system.is_running('tor.real') - - if not is_tor_running: - if args.tor_path == 'tor' and not stem.util.system.is_available('tor'): - print(format(msg('msg.tor_unavailable'), *ERROR_OUTPUT)) - sys.exit(1) - else: - if not args.run_cmd and not args.run_path: - print(format(msg('msg.starting_tor'), *HEADER_OUTPUT)) - - control_port = '9051' if args.control_port == 'default' else str(args.control_port) - - try: - stem.process.launch_tor_with_config( - config = { - 'SocksPort': '0', - 'ControlPort': control_port, - 'CookieAuthentication': '1', - 'ExitPolicy': 'reject *:*', - }, - tor_cmd = args.tor_path, - completion_percent = 5, - take_ownership = True, - ) - except OSError as exc: - print(format(msg('msg.unable_to_start_tor', error = exc), *ERROR_OUTPUT)) - sys.exit(1) - - control_port = (args.control_address, args.control_port) - control_socket = args.control_socket - - # If the user explicitely specified an endpoint then just try to connect to - # that. - - if args.user_provided_socket and not args.user_provided_port: - control_port = None - elif args.user_provided_port and not args.user_provided_socket: - control_socket = None - - controller = stem.connection.connect( - control_port = control_port, - control_socket = control_socket, - password_prompt = True, - ) - - if controller is None: - sys.exit(1) - - with controller: - interpreter = stem.interpreter.commands.ControlInterpreter(controller) - showed_close_confirmation = False - - if args.run_cmd: - if args.run_cmd.upper().startswith('SETEVENTS '): - # TODO: we can use a lambda here when dropping python 2.x support, but - # until then print's status as a keyword prevents it from being used in - # lambdas - - def handle_event(event_message): - print(format(str(event_message), *STANDARD_OUTPUT)) - - controller._handle_event = handle_event - - if sys.stdout.isatty(): - events = args.run_cmd.upper().split(' ', 1)[1] - print(format('Listening to %s events. Press any key to quit.\n' % events, *HEADER_BOLD_OUTPUT)) - - controller.msg(args.run_cmd) - - try: - raw_input() - except (KeyboardInterrupt, stem.SocketClosed): - pass - else: - interpreter.run_command(args.run_cmd, print_response = True) - elif args.run_path: - try: - for line in open(args.run_path).readlines(): - interpreter.run_command(line.strip(), print_response = True) - except IOError as exc: - print(format(msg('msg.unable_to_read_file', path = args.run_path, error = exc), *ERROR_OUTPUT)) - sys.exit(1) - - else: - autocompleter = stem.interpreter.autocomplete.Autocompleter(controller) - readline.parse_and_bind('tab: complete') - readline.set_completer(autocompleter.complete) - readline.set_completer_delims('\n') - - for line in msg('msg.startup_banner').splitlines(): - line_format = HEADER_BOLD_OUTPUT if line.startswith(' ') else HEADER_OUTPUT - print(format(line, *line_format)) - - print('') - - while True: - try: - prompt = '... ' if interpreter.is_multiline_context else PROMPT - user_input = input(prompt) if stem.prereq.is_python_3() else raw_input(prompt) - interpreter.run_command(user_input, print_response = True) - except stem.SocketClosed: - if showed_close_confirmation: - print(format('Unable to run tor commands. The control connection has been closed.', *ERROR_OUTPUT)) - else: - prompt = format("Tor's control port has closed. Do you want to continue this interpreter? (y/n) ", *HEADER_BOLD_OUTPUT) - user_input = input(prompt) if stem.prereq.is_python_3() else raw_input(prompt) - print('') # blank line - - if user_input.lower() in ('y', 'yes'): - showed_close_confirmation = True - else: - break - except (KeyboardInterrupt, EOFError, stem.SocketClosed): - print('') # move cursor to the following line - break diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 76816d7..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/arguments.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/arguments.cpython-312.pyc deleted file mode 100644 index 228b512..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/arguments.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/autocomplete.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/autocomplete.cpython-312.pyc deleted file mode 100644 index d5f0226..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/autocomplete.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/commands.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/commands.cpython-312.pyc deleted file mode 100644 index 86aecf4..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/commands.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/help.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/help.cpython-312.pyc deleted file mode 100644 index 7dac01d..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/interpreter/__pycache__/help.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/arguments.py b/myenv/lib/python3.12/site-packages/stem/interpreter/arguments.py deleted file mode 100644 index 99c3879..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/arguments.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Commandline argument parsing for our interpreter prompt. -""" - -import collections -import getopt -import os - -import stem.interpreter -import stem.util.connection - -DEFAULT_ARGS = { - 'control_address': '127.0.0.1', - 'control_port': 'default', - 'user_provided_port': False, - 'control_socket': '/var/run/tor/control', - 'user_provided_socket': False, - 'tor_path': 'tor', - 'run_cmd': None, - 'run_path': None, - 'disable_color': False, - 'print_help': False, -} - -OPT = 'i:s:h' -OPT_EXPANDED = ['interface=', 'socket=', 'tor=', 'run=', 'no-color', 'help'] - - -def parse(argv): - """ - Parses our arguments, providing a named tuple with their values. - - :param list argv: input arguments to be parsed - - :returns: a **named tuple** with our parsed arguments - - :raises: **ValueError** if we got an invalid argument - """ - - args = dict(DEFAULT_ARGS) - - try: - recognized_args, unrecognized_args = getopt.getopt(argv, OPT, OPT_EXPANDED) - - if unrecognized_args: - error_msg = "aren't recognized arguments" if len(unrecognized_args) > 1 else "isn't a recognized argument" - raise getopt.GetoptError("'%s' %s" % ("', '".join(unrecognized_args), error_msg)) - except Exception as exc: - raise ValueError('%s (for usage provide --help)' % exc) - - for opt, arg in recognized_args: - if opt in ('-i', '--interface'): - if ':' in arg: - address, port = arg.rsplit(':', 1) - else: - address, port = None, arg - - if address is not None: - if not stem.util.connection.is_valid_ipv4_address(address): - raise ValueError("'%s' isn't a valid IPv4 address" % address) - - args['control_address'] = address - - if not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' isn't a valid port number" % port) - - args['control_port'] = int(port) - args['user_provided_port'] = True - elif opt in ('-s', '--socket'): - args['control_socket'] = arg - args['user_provided_socket'] = True - elif opt in ('--tor'): - args['tor_path'] = arg - elif opt in ('--run'): - if os.path.exists(arg): - args['run_path'] = arg - else: - args['run_cmd'] = arg - elif opt == '--no-color': - args['disable_color'] = True - elif opt in ('-h', '--help'): - args['print_help'] = True - - # translates our args dict into a named tuple - - Args = collections.namedtuple('Args', args.keys()) - return Args(**args) - - -def get_help(): - """ - Provides our --help usage information. - - :returns: **str** with our usage information - """ - - return stem.interpreter.msg( - 'msg.help', - address = DEFAULT_ARGS['control_address'], - port = DEFAULT_ARGS['control_port'], - socket = DEFAULT_ARGS['control_socket'], - ) diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/autocomplete.py b/myenv/lib/python3.12/site-packages/stem/interpreter/autocomplete.py deleted file mode 100644 index a08a34f..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/autocomplete.py +++ /dev/null @@ -1,116 +0,0 @@ -# Copyright 2014-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Tab completion for our interpreter prompt. -""" - -import stem.prereq - -from stem.interpreter import uses_settings - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - - -@uses_settings -def _get_commands(controller, config): - """ - Provides commands recognized by tor. - """ - - commands = config.get('autocomplete', []) - - if controller is None: - return commands - - # GETINFO commands. Lines are of the form '[option] -- [description]'. This - # strips '*' from options that accept values. - - results = controller.get_info('info/names', None) - - if results: - for line in results.splitlines(): - option = line.split(' ', 1)[0].rstrip('*') - commands.append('GETINFO %s' % option) - else: - commands.append('GETINFO ') - - # GETCONF, SETCONF, and RESETCONF commands. Lines are of the form - # '[option] [type]'. - - results = controller.get_info('config/names', None) - - if results: - for line in results.splitlines(): - option = line.split(' ', 1)[0] - - commands.append('GETCONF %s' % option) - commands.append('SETCONF %s' % option) - commands.append('RESETCONF %s' % option) - else: - commands += ['GETCONF ', 'SETCONF ', 'RESETCONF '] - - # SETEVENT, USEFEATURE, and SIGNAL commands. For each of these the GETINFO - # results are simply a space separated lists of the values they can have. - - options = ( - ('SETEVENTS ', 'events/names'), - ('USEFEATURE ', 'features/names'), - ('SIGNAL ', 'signal/names'), - ) - - for prefix, getinfo_cmd in options: - results = controller.get_info(getinfo_cmd, None) - - if results: - commands += [prefix + value for value in results.split()] - else: - commands.append(prefix) - - # Adds /help commands. - - usage_info = config.get('help.usage', {}) - - for cmd in usage_info.keys(): - commands.append('/help ' + cmd) - - return commands - - -class Autocompleter(object): - def __init__(self, controller): - self._commands = _get_commands(controller) - - @lru_cache() - def matches(self, text): - """ - Provides autocompletion matches for the given text. - - :param str text: text to check for autocompletion matches with - - :returns: **list** with possible matches - """ - - lowercase_text = text.lower() - return [cmd for cmd in self._commands if cmd.lower().startswith(lowercase_text)] - - def complete(self, text, state): - """ - Provides case insensetive autocompletion options, acting as a functor for - the readlines set_completer function. - - :param str text: text to check for autocompletion matches with - :param int state: index of result to be provided, readline fetches matches - until this function provides None - - :returns: **str** with the autocompletion match, **None** if eithe none - exists or state is higher than our number of matches - """ - - try: - return self.matches(text)[state] - except IndexError: - return None diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/commands.py b/myenv/lib/python3.12/site-packages/stem/interpreter/commands.py deleted file mode 100644 index 95c6dcf..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/commands.py +++ /dev/null @@ -1,383 +0,0 @@ -# Copyright 2014-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Handles making requests and formatting the responses. -""" - -import code -import contextlib -import socket -import sys - -import stem -import stem.control -import stem.descriptor.remote -import stem.interpreter.help -import stem.util.connection -import stem.util.str_tools -import stem.util.tor_tools - -from stem.interpreter import STANDARD_OUTPUT, BOLD_OUTPUT, ERROR_OUTPUT, uses_settings, msg -from stem.util.term import format - -try: - from cStringIO import StringIO -except ImportError: - from io import StringIO - -MAX_EVENTS = 100 - - -def _get_fingerprint(arg, controller): - """ - Resolves user input into a relay fingerprint. This accepts... - - * Fingerprints - * Nicknames - * IPv4 addresses, either with or without an ORPort - * Empty input, which is resolved to ourselves if we're a relay - - :param str arg: input to be resolved to a relay fingerprint - :param stem.control.Controller controller: tor control connection - - :returns: **str** for the relay fingerprint - - :raises: **ValueError** if we're unable to resolve the input to a relay - """ - - if not arg: - try: - return controller.get_info('fingerprint') - except: - raise ValueError("We aren't a relay, no information to provide") - elif stem.util.tor_tools.is_valid_fingerprint(arg): - return arg - elif stem.util.tor_tools.is_valid_nickname(arg): - try: - return controller.get_network_status(arg).fingerprint - except: - raise ValueError("Unable to find a relay with the nickname of '%s'" % arg) - elif ':' in arg or stem.util.connection.is_valid_ipv4_address(arg): - if ':' in arg: - address, port = arg.rsplit(':', 1) - - if not stem.util.connection.is_valid_ipv4_address(address): - raise ValueError("'%s' isn't a valid IPv4 address" % address) - elif port and not stem.util.connection.is_valid_port(port): - raise ValueError("'%s' isn't a valid port" % port) - - port = int(port) - else: - address, port = arg, None - - matches = {} - - for desc in controller.get_network_statuses(): - if desc.address == address: - if not port or desc.or_port == port: - matches[desc.or_port] = desc.fingerprint - - if len(matches) == 0: - raise ValueError('No relays found at %s' % arg) - elif len(matches) == 1: - return list(matches.values())[0] - else: - response = "There's multiple relays at %s, include a port to specify which.\n\n" % arg - - for i, or_port in enumerate(matches): - response += ' %i. %s:%s, fingerprint: %s\n' % (i + 1, address, or_port, matches[or_port]) - - raise ValueError(response) - else: - raise ValueError("'%s' isn't a fingerprint, nickname, or IP address" % arg) - - -@contextlib.contextmanager -def redirect(stdout, stderr): - original = sys.stdout, sys.stderr - sys.stdout, sys.stderr = stdout, stderr - - try: - yield - finally: - sys.stdout, sys.stderr = original - - -class ControlInterpreter(code.InteractiveConsole): - """ - Handles issuing requests and providing nicely formed responses, with support - for special irc style subcommands. - """ - - def __init__(self, controller): - self._received_events = [] - - code.InteractiveConsole.__init__(self, { - 'stem': stem, - 'stem.control': stem.control, - 'controller': controller, - 'events': self.get_events, - }) - - self._controller = controller - self._run_python_commands = True - - # Indicates if we're processing a multiline command, such as conditional - # block or loop. - - self.is_multiline_context = False - - # Intercept events our controller hears about at a pretty low level since - # the user will likely be requesting them by direct 'SETEVENTS' calls. - - handle_event_real = self._controller._handle_event - - def handle_event_wrapper(event_message): - handle_event_real(event_message) - self._received_events.insert(0, event_message) - - if len(self._received_events) > MAX_EVENTS: - self._received_events.pop() - - self._controller._handle_event = handle_event_wrapper - - def get_events(self, *event_types): - events = list(self._received_events) - event_types = list(map(str.upper, event_types)) # make filtering case insensitive - - if event_types: - events = [e for e in events if e.type in event_types] - - return events - - def do_help(self, arg): - """ - Performs the '/help' operation, giving usage information for the given - argument or a general summary if there wasn't one. - """ - - return stem.interpreter.help.response(self._controller, arg) - - def do_events(self, arg): - """ - Performs the '/events' operation, dumping the events that we've received - belonging to the given types. If no types are specified then this provides - all buffered events. - - If the user runs '/events clear' then this clears the list of events we've - received. - """ - - event_types = arg.upper().split() - - if 'CLEAR' in event_types: - del self._received_events[:] - return format('cleared event backlog', *STANDARD_OUTPUT) - - return '\n'.join([format(str(e), *STANDARD_OUTPUT) for e in self.get_events(*event_types)]) - - def do_info(self, arg): - """ - Performs the '/info' operation, looking up a relay by fingerprint, IP - address, or nickname and printing its descriptor and consensus entries in a - pretty fashion. - """ - - try: - fingerprint = _get_fingerprint(arg, self._controller) - except ValueError as exc: - return format(str(exc), *ERROR_OUTPUT) - - ns_desc = self._controller.get_network_status(fingerprint, None) - server_desc = self._controller.get_server_descriptor(fingerprint, None) - extrainfo_desc = None - micro_desc = self._controller.get_microdescriptor(fingerprint, None) - - # We'll mostly rely on the router status entry. Either the server - # descriptor or microdescriptor will be missing, so we'll treat them as - # being optional. - - if not ns_desc: - return format('Unable to find consensus information for %s' % fingerprint, *ERROR_OUTPUT) - - # More likely than not we'll have the microdescriptor but not server and - # extrainfo descriptors. If so then fetching them. - - downloader = stem.descriptor.remote.DescriptorDownloader(timeout = 5) - server_desc_query = downloader.get_server_descriptors(fingerprint) - extrainfo_desc_query = downloader.get_extrainfo_descriptors(fingerprint) - - for desc in server_desc_query: - server_desc = desc - - for desc in extrainfo_desc_query: - extrainfo_desc = desc - - address_extrainfo = [] - - try: - address_extrainfo.append(socket.gethostbyaddr(ns_desc.address)[0]) - except: - pass - - try: - address_extrainfo.append(self._controller.get_info('ip-to-country/%s' % ns_desc.address)) - except: - pass - - address_extrainfo_label = ' (%s)' % ', '.join(address_extrainfo) if address_extrainfo else '' - - if server_desc: - exit_policy_label = str(server_desc.exit_policy) - elif micro_desc: - exit_policy_label = str(micro_desc.exit_policy) - else: - exit_policy_label = 'Unknown' - - lines = [ - '%s (%s)' % (ns_desc.nickname, fingerprint), - format('address: ', *BOLD_OUTPUT) + '%s:%s%s' % (ns_desc.address, ns_desc.or_port, address_extrainfo_label), - ] - - if server_desc: - lines.append(format('tor version: ', *BOLD_OUTPUT) + str(server_desc.tor_version)) - - lines.append(format('flags: ', *BOLD_OUTPUT) + ', '.join(ns_desc.flags)) - lines.append(format('exit policy: ', *BOLD_OUTPUT) + exit_policy_label) - - if server_desc and server_desc.contact: - contact = stem.util.str_tools._to_unicode(server_desc.contact) - - # clears up some highly common obscuring - - for alias in (' at ', ' AT '): - contact = contact.replace(alias, '@') - - for alias in (' dot ', ' DOT '): - contact = contact.replace(alias, '.') - - lines.append(format('contact: ', *BOLD_OUTPUT) + contact) - - descriptor_section = [ - ('Server Descriptor:', server_desc), - ('Extrainfo Descriptor:', extrainfo_desc), - ('Microdescriptor:', micro_desc), - ('Router Status Entry:', ns_desc), - ] - - div = format('-' * 80, *STANDARD_OUTPUT) - - for label, desc in descriptor_section: - if desc: - lines += ['', div, format(label, *BOLD_OUTPUT), div, ''] - lines += [format(line, *STANDARD_OUTPUT) for line in str(desc).splitlines()] - - return '\n'.join(lines) - - def do_python(self, arg): - """ - Performs the '/python' operation, toggling if we accept python commands or - not. - """ - - if not arg: - status = 'enabled' if self._run_python_commands else 'disabled' - return format('Python support is currently %s.' % status, *STANDARD_OUTPUT) - elif arg.lower() == 'enable': - self._run_python_commands = True - elif arg.lower() == 'disable': - self._run_python_commands = False - else: - return format("'%s' is not recognized. Please run either '/python enable' or '/python disable'." % arg, *ERROR_OUTPUT) - - if self._run_python_commands: - response = "Python support enabled, we'll now run non-interpreter commands as python." - else: - response = "Python support disabled, we'll now pass along all commands to tor." - - return format(response, *STANDARD_OUTPUT) - - @uses_settings - def run_command(self, command, config, print_response = False): - """ - Runs the given command. Requests starting with a '/' are special commands - to the interpreter, and anything else is sent to the control port. - - :param stem.control.Controller controller: tor control connection - :param str command: command to be processed - :param bool print_response: prints the response to stdout if true - - :returns: **list** out output lines, each line being a list of - (msg, format) tuples - - :raises: **stem.SocketClosed** if the control connection has been severed - """ - - # Commands fall into three categories: - # - # * Interpreter commands. These start with a '/'. - # - # * Controller commands stem knows how to handle. We use our Controller's - # methods for these to take advantage of caching and present nicer - # output. - # - # * Other tor commands. We pass these directly on to the control port. - - cmd, arg = command.strip(), '' - - if ' ' in cmd: - cmd, arg = cmd.split(' ', 1) - - output = '' - - if cmd.startswith('/'): - cmd = cmd.lower() - - if cmd == '/quit': - raise stem.SocketClosed() - elif cmd == '/events': - output = self.do_events(arg) - elif cmd == '/info': - output = self.do_info(arg) - elif cmd == '/python': - output = self.do_python(arg) - elif cmd == '/help': - output = self.do_help(arg) - else: - output = format("'%s' isn't a recognized command" % command, *ERROR_OUTPUT) - else: - cmd = cmd.upper() # makes commands uppercase to match the spec - - if cmd.replace('+', '') in ('LOADCONF', 'POSTDESCRIPTOR'): - # provides a notice that multi-line controller input isn't yet implemented - output = format(msg('msg.multiline_unimplemented_notice'), *ERROR_OUTPUT) - elif cmd == 'QUIT': - self._controller.msg(command) - raise stem.SocketClosed() - else: - is_tor_command = cmd in config.get('help.usage', {}) and cmd.lower() != 'events' - - if self._run_python_commands and not is_tor_command: - console_output = StringIO() - - with redirect(console_output, console_output): - self.is_multiline_context = code.InteractiveConsole.push(self, command) - - output = console_output.getvalue().strip() - else: - try: - output = format(self._controller.msg(command).raw_content().strip(), *STANDARD_OUTPUT) - except stem.ControllerError as exc: - if isinstance(exc, stem.SocketClosed): - raise - else: - output = format(str(exc), *ERROR_OUTPUT) - - if output: - output += '\n' # give ourselves an extra line before the next prompt - - if print_response: - print(output) - - return output diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/help.py b/myenv/lib/python3.12/site-packages/stem/interpreter/help.py deleted file mode 100644 index 8b3b996..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/help.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright 2014-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Provides our /help responses. -""" - -import stem.prereq - -from stem.interpreter import ( - STANDARD_OUTPUT, - BOLD_OUTPUT, - ERROR_OUTPUT, - msg, - uses_settings, -) - -from stem.util.term import format - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - - -def response(controller, arg): - """ - Provides our /help response. - - :param stem.control.Controller controller: tor control connection - :param str arg: controller or interpreter command to provide help output for - - :returns: **str** with our help response - """ - - # Normalizing inputs first so we can better cache responses. - - return _response(controller, _normalize(arg)) - - -def _normalize(arg): - arg = arg.upper() - - # If there's multiple arguments then just take the first. This is - # particularly likely if they're trying to query a full command (for - # instance "/help GETINFO version") - - arg = arg.split(' ')[0] - - # strip slash if someone enters an interpreter command (ex. "/help /help") - - if arg.startswith('/'): - arg = arg[1:] - - return arg - - -@lru_cache() -@uses_settings -def _response(controller, arg, config): - if not arg: - return _general_help() - - usage_info = config.get('help.usage', {}) - - if arg not in usage_info: - return format("No help information available for '%s'..." % arg, *ERROR_OUTPUT) - - output = format(usage_info[arg] + '\n', *BOLD_OUTPUT) - - description = config.get('help.description.%s' % arg.lower(), '') - - for line in description.splitlines(): - output += format(' ' + line, *STANDARD_OUTPUT) + '\n' - - output += '\n' - - if arg == 'GETINFO': - results = controller.get_info('info/names', None) - - if results: - for line in results.splitlines(): - if ' -- ' in line: - opt, summary = line.split(' -- ', 1) - - output += format('%-33s' % opt, *BOLD_OUTPUT) - output += format(' - %s' % summary, *STANDARD_OUTPUT) + '\n' - elif arg == 'GETCONF': - results = controller.get_info('config/names', None) - - if results: - options = [opt.split(' ', 1)[0] for opt in results.splitlines()] - - for i in range(0, len(options), 2): - line = '' - - for entry in options[i:i + 2]: - line += '%-42s' % entry - - output += format(line.rstrip(), *STANDARD_OUTPUT) + '\n' - elif arg == 'SIGNAL': - signal_options = config.get('help.signal.options', {}) - - for signal, summary in signal_options.items(): - output += format('%-15s' % signal, *BOLD_OUTPUT) - output += format(' - %s' % summary, *STANDARD_OUTPUT) + '\n' - elif arg == 'SETEVENTS': - results = controller.get_info('events/names', None) - - if results: - entries = results.split() - - # displays four columns of 20 characters - - for i in range(0, len(entries), 4): - line = '' - - for entry in entries[i:i + 4]: - line += '%-20s' % entry - - output += format(line.rstrip(), *STANDARD_OUTPUT) + '\n' - elif arg == 'USEFEATURE': - results = controller.get_info('features/names', None) - - if results: - output += format(results, *STANDARD_OUTPUT) + '\n' - elif arg in ('LOADCONF', 'POSTDESCRIPTOR'): - # gives a warning that this option isn't yet implemented - output += format(msg('msg.multiline_unimplemented_notice'), *ERROR_OUTPUT) + '\n' - - return output.rstrip() - - -def _general_help(): - lines = [] - - for line in msg('help.general').splitlines(): - div = line.find(' - ') - - if div != -1: - cmd, description = line[:div], line[div:] - lines.append(format(cmd, *BOLD_OUTPUT) + format(description, *STANDARD_OUTPUT)) - else: - lines.append(format(line, *BOLD_OUTPUT)) - - return '\n'.join(lines) diff --git a/myenv/lib/python3.12/site-packages/stem/interpreter/settings.cfg b/myenv/lib/python3.12/site-packages/stem/interpreter/settings.cfg deleted file mode 100644 index af96d59..0000000 --- a/myenv/lib/python3.12/site-packages/stem/interpreter/settings.cfg +++ /dev/null @@ -1,332 +0,0 @@ -################################################################################ -# -# Configuration data used by Stem's interpreter prompt. -# -################################################################################ - - ################## -# GENERAL MESSAGES # - ################## - -msg.multiline_unimplemented_notice Multi-line control options like this are not yet implemented. - -msg.help -|Interactive interpreter for Tor. This provides you with direct access -|to Tor's control interface via either python or direct requests. -| -| -i, --interface [ADDRESS:]PORT change control interface from {address}:{port} -| -s, --socket SOCKET_PATH attach using unix domain socket if present, -| SOCKET_PATH defaults to: {socket} -| --tor PATH tor binary if tor isn't already running -| --run executes the given command or file of commands -| --no-color disables colorized output -| -h, --help presents this help -| - -msg.startup_banner -|Welcome to Stem's interpreter prompt. This provides you with direct access to -|Tor's control interface. -| -|This acts like a standard python interpreter with a Tor connection available -|via your 'controller' variable... -| -| >>> controller.get_info('version') -| '0.2.5.1-alpha-dev (git-245ecfff36c0cecc)' -| -|You can also issue requests directly to Tor... -| -| >>> GETINFO version -| 250-version=0.2.5.1-alpha-dev (git-245ecfff36c0cecc) -| 250 OK -| -|For more information run '/help'. -| - -msg.tor_unavailable Tor isn't running and the command currently isn't in your PATH. -msg.unable_to_start_tor Unable to start tor: {error} -msg.unable_to_read_file Unable to read {path}: {error} - -msg.starting_tor -|Tor isn't running. Starting a temporary Tor instance for our interpreter to -|interact with. This will have a minimal non-relaying configuration, and be -|shut down when you're done. -| -|-------------------------------------------------------------------------------- -| - - ################# -# OUTPUT OF /HELP # - ################# - -# Response for the '/help' command without any arguments. - -help.general -|Interpreter commands include: -| /help - provides information for interpreter and tor commands -| /events - prints events that we've received -| /info - general information for a relay -| /python - enable or disable support for running python commands -| /quit - shuts down the interpreter -| -|Tor commands include: -| GETINFO - queries information from tor -| GETCONF, SETCONF, RESETCONF - show or edit a configuration option -| SIGNAL - issues control signal to the process (for resetting, stopping, etc) -| SETEVENTS - configures the events tor will notify us of -| -| USEFEATURE - enables custom behavior for the controller -| SAVECONF - writes tor's current configuration to our torrc -| LOADCONF - loads the given input like it was part of our torrc -| MAPADDRESS - replaces requests for one address with another -| POSTDESCRIPTOR - adds a relay descriptor to our cache -| EXTENDCIRCUIT - create or extend a tor circuit -| SETCIRCUITPURPOSE - configures the purpose associated with a circuit -| CLOSECIRCUIT - closes the given circuit -| ATTACHSTREAM - associates an application's stream with a tor circuit -| REDIRECTSTREAM - sets a stream's destination -| CLOSESTREAM - closes the given stream -| ADD_ONION - create a new hidden service -| DEL_ONION - delete a hidden service that was created with ADD_ONION -| HSFETCH - retrieve a hidden service descriptor, providing it in a HS_DESC_CONTENT event -| HSPOST - uploads a hidden service descriptor -| RESOLVE - issues an asynchronous dns or rdns request over tor -| TAKEOWNERSHIP - instructs tor to quit when this control connection is closed -| PROTOCOLINFO - queries version and controller authentication information -| QUIT - disconnect the control connection -| -|For more information use '/help [OPTION]'. - -# Usage of tor and interpreter commands. - -help.usage HELP => /help [OPTION] -help.usage EVENTS => /events [types] -help.usage INFO => /info [relay fingerprint, nickname, or IP address] -help.usage PYTHON => /python [enable,disable] -help.usage QUIT => /quit -help.usage GETINFO => GETINFO OPTION -help.usage GETCONF => GETCONF OPTION -help.usage SETCONF => SETCONF PARAM[=VALUE] -help.usage RESETCONF => RESETCONF PARAM[=VALUE] -help.usage SIGNAL => SIGNAL SIG -help.usage SETEVENTS => SETEVENTS [EXTENDED] [EVENTS] -help.usage USEFEATURE => USEFEATURE OPTION -help.usage SAVECONF => SAVECONF -help.usage LOADCONF => LOADCONF... -help.usage MAPADDRESS => MAPADDRESS SOURCE_ADDR=DESTINATION_ADDR -help.usage POSTDESCRIPTOR => POSTDESCRIPTOR [purpose=general/controller/bridge] [cache=yes/no]... -help.usage EXTENDCIRCUIT => EXTENDCIRCUIT CircuitID [PATH] [purpose=general/controller] -help.usage SETCIRCUITPURPOSE => SETCIRCUITPURPOSE CircuitID purpose=general/controller -help.usage CLOSECIRCUIT => CLOSECIRCUIT CircuitID [IfUnused] -help.usage ATTACHSTREAM => ATTACHSTREAM StreamID CircuitID [HOP=HopNum] -help.usage REDIRECTSTREAM => REDIRECTSTREAM StreamID Address [Port] -help.usage CLOSESTREAM => CLOSESTREAM StreamID Reason [Flag] -help.usage ADD_ONION => KeyType:KeyBlob [Flags=Flag] (Port=Port [,Target])... -help.usage DEL_ONION => ServiceID -help.usage HSFETCH => HSFETCH (HSAddress/v2-DescId) [SERVER=Server]... -help.usage HSPOST => [SERVER=Server] DESCRIPTOR -help.usage RESOLVE => RESOLVE [mode=reverse] address -help.usage TAKEOWNERSHIP => TAKEOWNERSHIP -help.usage PROTOCOLINFO => PROTOCOLINFO [ProtocolVersion] - -# Longer description of what tor and interpreter commands do. - -help.description.help -|Provides usage information for the given interpreter, tor command, or tor -|configuration option. -| -|Example: -| /help info # provides a description of the '/info' option -| /help GETINFO # usage information for tor's GETINFO controller option - -help.description.events -|Provides events that we've received belonging to the given event types. If -|no types are specified then this provides all the messages that we've -|received. -| -|You can also run '/events clear' to clear the backlog of events we've -|received. - -help.description.info -|Provides information for a relay that's currently in the consensus. If no -|relay is specified then this provides information on ourselves. - -help.description.python -|Enables or disables support for running python commands. This determines how -|we treat commands this interpreter doesn't recognize... -| -|* If enabled then unrecognized commands are executed as python. -|* If disabled then unrecognized commands are passed along to tor. - -help.description.quit -|Terminates the interpreter. - -help.description.getinfo -|Queries the tor process for information. Options are... -| - -help.description.getconf -|Provides the current value for a given configuration value. Options include... -| - -help.description.setconf -|Sets the given configuration parameters. Values can be quoted or non-quoted -|strings, and reverts the option to 0 or NULL if not provided. -| -|Examples: -| * Sets a contact address and resets our family to NULL -| SETCONF MyFamily ContactInfo=foo@bar.com -| -| * Sets an exit policy that only includes port 80/443 -| SETCONF ExitPolicy=\"accept *:80, accept *:443, reject *:*\"\ - -help.description.resetconf -|Reverts the given configuration options to their default values. If a value -|is provided then this behaves in the same way as SETCONF. -| -|Examples: -| * Returns both of our accounting parameters to their defaults -| RESETCONF AccountingMax AccountingStart -| -| * Uses the default exit policy and sets our nickname to be 'Goomba' -| RESETCONF ExitPolicy Nickname=Goomba - -help.description.signal -|Issues a signal that tells the tor process to reload its torrc, dump its -|stats, halt, etc. - -help.description.setevents -|Sets the events that we will receive. This turns off any events that aren't -|listed so sending 'SETEVENTS' without any values will turn off all event reporting. -| -|For Tor versions between 0.1.1.9 and 0.2.2.1 adding 'EXTENDED' causes some -|events to give us additional information. After version 0.2.2.1 this is -|always on. -| -|Events include... -| - -help.description.usefeature -|Customizes the behavior of the control port. Options include... -| - -help.description.saveconf -|Writes Tor's current configuration to its torrc. - -help.description.loadconf -|Reads the given text like it belonged to our torrc. -| -|Example: -| +LOADCONF -| # sets our exit policy to just accept ports 80 and 443 -| ExitPolicy accept *:80 -| ExitPolicy accept *:443 -| ExitPolicy reject *:* -| . - -help.description.mapaddress -|Replaces future requests for one address with another. -| -|Example: -| MAPADDRESS 0.0.0.0=torproject.org 1.2.3.4=tor.freehaven.net - -help.description.postdescriptor -|Simulates getting a new relay descriptor. - -help.description.extendcircuit -|Extends the given circuit or create a new one if the CircuitID is zero. The -|PATH is a comma separated list of fingerprints. If it isn't set then this -|uses Tor's normal path selection. - -help.description.setcircuitpurpose -|Sets the purpose attribute for a circuit. - -help.description.closecircuit -|Closes the given circuit. If "IfUnused" is included then this only closes -|the circuit if it isn't currently being used. - -help.description.attachstream -|Attaches a stream with the given built circuit (tor picks one on its own if -|CircuitID is zero). If HopNum is given then this hop is used to exit the -|circuit, otherwise the last relay is used. - -help.description.redirectstream -|Sets the destination for a given stream. This can only be done after a -|stream is created but before it's attached to a circuit. - -help.description.closestream -|Closes the given stream, the reason being an integer matching a reason as -|per section 6.3 of the tor-spec. - -help.description.add_onion -|Creates a new hidden service. Unlike 'SETCONF HiddenServiceDir...' this -|doesn't persist the service to disk. - -help.description.del_onion -|Delete a hidden service that was created with ADD_ONION. - -help.description.hsfetch -|Retrieves the descriptor for a hidden service. This is an asynchronous -|request, with the descriptor provided by a HS_DESC_CONTENT event. - -help.description.hspost -|Uploads a descriptor to a hidden service directory. - -help.description.resolve -|Performs IPv4 DNS resolution over tor, doing a reverse lookup instead if -|"mode=reverse" is included. This request is processed in the background and -|results in a ADDRMAP event with the response. - -help.description.takeownership -|Instructs Tor to gracefully shut down when this control connection is closed. - -help.description.protocolinfo -|Provides bootstrapping information that a controller might need when first -|starting, like Tor's version and controller authentication. This can be done -|before authenticating to the control port. - -help.signal.options RELOAD / HUP => reload our torrc -help.signal.options SHUTDOWN / INT => gracefully shut down, waiting 30 seconds if we're a relay -help.signal.options DUMP / USR1 => logs information about open connections and circuits -help.signal.options DEBUG / USR2 => makes us log at the DEBUG runlevel -help.signal.options HALT / TERM => immediately shut down -help.signal.options CLEARDNSCACHE => clears any cached DNS results -help.signal.options NEWNYM => clears the DNS cache and uses new circuits for future connections - - ################ -# TAB COMPLETION # - ################ - -# Commands we'll autocomplete when the user hits tab. This is just the start of -# our autocompletion list - more are determined dynamically by checking what -# tor supports. - -autocomplete /help -autocomplete /events -autocomplete /info -autocomplete /quit -autocomplete SAVECONF -autocomplete MAPADDRESS -autocomplete EXTENDCIRCUIT -autocomplete SETCIRCUITPURPOSE -autocomplete SETROUTERPURPOSE -autocomplete ATTACHSTREAM -#autocomplete +POSTDESCRIPTOR # TODO: needs multi-line support -autocomplete REDIRECTSTREAM -autocomplete CLOSESTREAM -autocomplete CLOSECIRCUIT -autocomplete QUIT -autocomplete RESOLVE -autocomplete PROTOCOLINFO -#autocomplete +LOADCONF # TODO: needs multi-line support -autocomplete TAKEOWNERSHIP -autocomplete AUTHCHALLENGE -autocomplete DROPGUARDS -autocomplete ADD_ONION NEW:BEST -autocomplete ADD_ONION NEW:RSA1024 -autocomplete ADD_ONION NEW:ED25519-V3 -autocomplete ADD_ONION RSA1024: -autocomplete ADD_ONION ED25519-V3: -autocomplete DEL_ONION -autocomplete HSFETCH -autocomplete HSPOST - diff --git a/myenv/lib/python3.12/site-packages/stem/manual.py b/myenv/lib/python3.12/site-packages/stem/manual.py deleted file mode 100644 index 5b502a4..0000000 --- a/myenv/lib/python3.12/site-packages/stem/manual.py +++ /dev/null @@ -1,819 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Information available about Tor from `its manual -`_. This provides three -methods of getting this information... - -* :func:`~stem.manual.Manual.from_cache` provides manual content bundled with - Stem. This is the fastest and most reliable method but only as up-to-date as - Stem's release. - -* :func:`~stem.manual.Manual.from_man` reads Tor's local man page for - information about it. - -* :func:`~stem.manual.Manual.from_remote` fetches the latest manual information - remotely. This is the slowest and least reliable method but provides the most - recent information about Tor. - -Manual information includes arguments, signals, and probably most usefully the -torrc configuration options. For example, say we want a little script that told -us what our torrc options do... - -.. literalinclude:: /_static/example/manual_config_options.py - :language: python - -| - -.. image:: /_static/manual_output.png - -| - -**Module Overview:** - -:: - - query - performs a query on our cached sqlite manual information - is_important - Indicates if a configuration option is of particularly common importance. - download_man_page - Downloads tor's latest man page. - - Manual - Information about Tor available from its manual. - | |- from_cache - Provides manual information cached with Stem. - | |- from_man - Retrieves manual information from its man page. - | +- from_remote - Retrieves manual information remotely from tor's latest manual. - | - +- save - writes the manual contents to a given location - -.. versionadded:: 1.5.0 -""" - -import os -import shutil -import sys -import tempfile - -import stem -import stem.prereq -import stem.util -import stem.util.conf -import stem.util.enum -import stem.util.log -import stem.util.system - -try: - # added in python 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -try: - # account for urllib's change between python 2.x and 3.x - import urllib.request as urllib -except ImportError: - import urllib2 as urllib - -Category = stem.util.enum.Enum('GENERAL', 'CLIENT', 'RELAY', 'DIRECTORY', 'AUTHORITY', 'HIDDEN_SERVICE', 'DENIAL_OF_SERVICE', 'TESTING', 'UNKNOWN') -GITWEB_MANUAL_URL = 'https://gitweb.torproject.org/tor.git/plain/doc/tor.1.txt' -CACHE_PATH = os.path.join(os.path.dirname(__file__), 'cached_manual.sqlite') -DATABASE = None # cache database connections -HAS_ENCODING_ARG = not stem.util.system.is_mac() and not stem.util.system.is_bsd() and not stem.util.system.is_slackware() - -SCHEMA_VERSION = 1 # version of our scheme, bump this if you change the following -SCHEMA = ( - 'CREATE TABLE schema(version INTEGER)', - 'INSERT INTO schema(version) VALUES (%i)' % SCHEMA_VERSION, - - 'CREATE TABLE metadata(name TEXT, synopsis TEXT, description TEXT, man_commit TEXT, stem_commit TEXT)', - 'CREATE TABLE commandline(name TEXT PRIMARY KEY, description TEXT)', - 'CREATE TABLE signals(name TEXT PRIMARY KEY, description TEXT)', - 'CREATE TABLE files(name TEXT PRIMARY KEY, description TEXT)', - 'CREATE TABLE torrc(key TEXT PRIMARY KEY, name TEXT, category TEXT, usage TEXT, summary TEXT, description TEXT, position INTEGER)', -) - -CATEGORY_SECTIONS = OrderedDict(( - ('GENERAL OPTIONS', Category.GENERAL), - ('CLIENT OPTIONS', Category.CLIENT), - ('SERVER OPTIONS', Category.RELAY), - ('DIRECTORY SERVER OPTIONS', Category.DIRECTORY), - ('DIRECTORY AUTHORITY SERVER OPTIONS', Category.AUTHORITY), - ('HIDDEN SERVICE OPTIONS', Category.HIDDEN_SERVICE), - ('DENIAL OF SERVICE MITIGATION OPTIONS', Category.DENIAL_OF_SERVICE), - ('TESTING NETWORK OPTIONS', Category.TESTING), -)) - - -class SchemaMismatch(IOError): - """ - Database schema doesn't match what Stem supports. - - .. versionadded:: 1.6.0 - - :var int database_schema: schema of the database - :var tuple supported_schemas: schemas library supports - """ - - def __init__(self, message, database_schema, library_schema): - super(SchemaMismatch, self).__init__(message) - self.database_schema = database_schema - self.library_schema = library_schema - - -def query(query, *param): - """ - Performs the given query on our sqlite manual cache. This database should - be treated as being read-only. File permissions generally enforce this, and - in the future will be enforced by this function as well. - - :: - - >>> import stem.manual - >>> print(stem.manual.query('SELECT description FROM torrc WHERE key=?', 'CONTROLSOCKET').fetchone()[0]) - Like ControlPort, but listens on a Unix domain socket, rather than a TCP socket. 0 disables ControlSocket. (Unix and Unix-like systems only.) (Default: 0) - - .. versionadded:: 1.6.0 - - :param str query: query to run on the cache - :param list param: query parameters - - :returns: :class:`sqlite3.Cursor` with the query results - - :raises: - * **ImportError** if the sqlite3 module is unavailable - * **sqlite3.OperationalError** if query fails - """ - - if not stem.prereq.is_sqlite_available(): - raise ImportError('Querying requires the sqlite3 module') - - import sqlite3 - - # The only reason to explicitly close the sqlite connection is to ensure - # transactions are committed. Since we're only using read-only access this - # doesn't matter, and can allow interpreter shutdown to do the needful. - # - # TODO: When we only support python 3.4+ we can use sqlite's uri argument - # to enforce a read-only connection... - # - # https://docs.python.org/3/library/sqlite3.html#sqlite3.connect - - global DATABASE - - if DATABASE is None: - DATABASE = sqlite3.connect(CACHE_PATH) - - return DATABASE.execute(query, param) - - -class ConfigOption(object): - """ - Tor configuration attribute found in its torrc. - - :var str name: name of the configuration option - :var stem.manual.Category category: category the config option was listed - under, this is Category.UNKNOWN if we didn't recognize the category - :var str usage: arguments accepted by the option - :var str summary: brief description of what the option does - :var str description: longer manual description with details - """ - - def __init__(self, name, category = Category.UNKNOWN, usage = '', summary = '', description = ''): - self.name = name - self.category = category - self.usage = usage - self.summary = summary - self.description = description - - def __hash__(self): - return stem.util._hash_attr(self, 'name', 'category', 'usage', 'summary', 'description', cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, ConfigOption) else False - - def __ne__(self, other): - return not self == other - - -@lru_cache() -def _config(lowercase = True): - """ - Provides a dictionary for our settings.cfg. This has a couple categories... - - * manual.important (list) - configuration options considered to be important - * manual.summary.* (str) - summary descriptions of config options - - :param bool lowercase: uses lowercase keys if **True** to allow for case - insensitive lookups - """ - - config = stem.util.conf.Config() - config_path = os.path.join(os.path.dirname(__file__), 'settings.cfg') - - try: - config.load(config_path) - config_dict = dict([(key.lower() if lowercase else key, config.get_value(key)) for key in config.keys() if key.startswith('manual.summary.')]) - config_dict['manual.important'] = [name.lower() if lowercase else name for name in config.get_value('manual.important', [], multiple = True)] - return config_dict - except Exception as exc: - stem.util.log.warn("BUG: stem failed to load its internal manual information from '%s': %s" % (config_path, exc)) - return {} - - -def _manual_differences(previous_manual, new_manual): - """ - Provides a description of how two manuals differ. - """ - - lines = [] - - for attr in ('name', 'synopsis', 'description', 'commandline_options', 'signals', 'files', 'config_options'): - previous_attr = getattr(previous_manual, attr) - new_attr = getattr(new_manual, attr) - - if previous_attr != new_attr: - lines.append("* Manual's %s attribute changed\n" % attr) - - if attr in ('name', 'synopsis', 'description'): - lines.append(' Previously...\n\n%s\n' % previous_attr) - lines.append(' Updating to...\n\n%s' % new_attr) - elif attr == 'config_options': - for config_name, config_attr in new_attr.items(): - previous = previous_attr.get(config_name) - - if previous is None: - lines.append(' adding new config option => %s' % config_name) - elif config_attr != previous: - for attr in ('name', 'category', 'usage', 'summary', 'description'): - if getattr(config_attr, attr) != getattr(previous, attr): - lines.append(' modified %s (%s) => %s' % (config_name, attr, getattr(config_attr, attr))) - - for config_name in set(previous_attr.keys()).difference(new_attr.keys()): - lines.append(' removing config option => %s' % config_name) - else: - added_items = set(new_attr.items()).difference(previous_attr.items()) - removed_items = set(previous_attr.items()).difference(new_attr.items()) - - for added_item in added_items: - lines.append(' adding %s => %s' % added_item) - - for removed_item in removed_items: - lines.append(' removing %s => %s' % removed_item) - - lines.append('\n') - - return '\n'.join(lines) - - -def is_important(option): - """ - Indicates if a configuration option of particularly common importance or not. - - :param str option: tor configuration option to check - - :returns: **bool** that's **True** if this is an important option and - **False** otherwise - """ - - return option.lower() in _config()['manual.important'] - - -def download_man_page(path = None, file_handle = None, url = GITWEB_MANUAL_URL, timeout = 20): - """ - Downloads tor's latest man page from `gitweb.torproject.org - `_. This method is - both slow and unreliable - please see the warnings on - :func:`~stem.manual.Manual.from_remote`. - - :param str path: path to save tor's man page to - :param file file_handle: file handler to save tor's man page to - :param str url: url to download tor's asciidoc manual from - :param int timeout: seconds to wait before timing out the request - - :raises: **IOError** if unable to retrieve the manual - """ - - if not path and not file_handle: - raise ValueError("Either the path or file_handle we're saving to must be provided") - elif not stem.util.system.is_available('a2x'): - raise IOError('We require a2x from asciidoc to provide a man page') - - dirpath = tempfile.mkdtemp() - asciidoc_path = os.path.join(dirpath, 'tor.1.txt') - manual_path = os.path.join(dirpath, 'tor.1') - - try: - try: - with open(asciidoc_path, 'wb') as asciidoc_file: - request = urllib.urlopen(url, timeout = timeout) - shutil.copyfileobj(request, asciidoc_file) - except: - exc, stacktrace = sys.exc_info()[1:3] - message = "Unable to download tor's manual from %s to %s: %s" % (url, asciidoc_path, exc) - raise stem.DownloadFailed(url, exc, stacktrace, message) - - try: - stem.util.system.call('a2x -f manpage %s' % asciidoc_path) - - if not os.path.exists(manual_path): - raise OSError('no man page was generated') - except stem.util.system.CallError as exc: - raise IOError("Unable to run '%s': %s" % (exc.command, exc.stderr)) - - if path: - try: - path_dir = os.path.dirname(path) - - if not os.path.exists(path_dir): - os.makedirs(path_dir) - - shutil.copyfile(manual_path, path) - except OSError as exc: - raise IOError(exc) - - if file_handle: - with open(manual_path, 'rb') as manual_file: - shutil.copyfileobj(manual_file, file_handle) - file_handle.flush() - finally: - shutil.rmtree(dirpath) - - -class Manual(object): - """ - Parsed tor man page. Tor makes no guarantees about its man page format so - this may not always be compatible. If not you can use the cached manual - information stored with Stem. - - This does not include every bit of information from the tor manual. For - instance, I've excluded the 'THE CONFIGURATION FILE FORMAT' section. If - there's a part you'd find useful then `file an issue - `_ and we can - add it. - - :var str name: brief description of the tor command - :var str synopsis: brief tor command usage - :var str description: general description of what tor does - - :var collections.OrderedDict commandline_options: mapping of commandline arguments to their descripton - :var collections.OrderedDict signals: mapping of signals tor accepts to their description - :var collections.OrderedDict files: mapping of file paths to their description - - :var collections.OrderedDict config_options: :class:`~stem.manual.ConfigOption` tuples for tor configuration options - - :var str man_commit: latest tor commit editing the man page when this - information was cached - :var str stem_commit: stem commit to cache this manual information - """ - - def __init__(self, name, synopsis, description, commandline_options, signals, files, config_options): - self.name = name - self.synopsis = synopsis - self.description = description - self.commandline_options = OrderedDict(commandline_options) - self.signals = OrderedDict(signals) - self.files = OrderedDict(files) - self.config_options = OrderedDict(config_options) - self.man_commit = None - self.stem_commit = None - self.schema = None - - @staticmethod - def from_cache(path = None): - """ - Provides manual information cached with Stem. Unlike - :func:`~stem.manual.Manual.from_man` and - :func:`~stem.manual.Manual.from_remote` this doesn't have any system - requirements, and is faster too. Only drawback is that this manual - content is only as up to date as the Stem release we're using. - - .. versionchanged:: 1.6.0 - Added support for sqlite cache. Support for - :class:`~stem.util.conf.Config` caches will be dropped in Stem 2.x. - - :param str path: cached manual content to read, if not provided this uses - the bundled manual information - - :returns: :class:`~stem.manual.Manual` with our bundled manual information - - :raises: - * **ImportError** if cache is sqlite and the sqlite3 module is - unavailable - * **IOError** if a **path** was provided and we were unable to read - it or the schema is out of date - """ - - # TODO: drop _from_config_cache() with stem 2.x - - if path is None: - path = CACHE_PATH - - if path is not None and path.endswith('.sqlite'): - return Manual._from_sqlite_cache(path) - else: - return Manual._from_config_cache(path) - - @staticmethod - def _from_sqlite_cache(path): - if not stem.prereq.is_sqlite_available(): - raise ImportError('Reading a sqlite cache requires the sqlite3 module') - - import sqlite3 - - if not os.path.exists(path): - raise IOError("%s doesn't exist" % path) - - with sqlite3.connect(path) as conn: - try: - schema = conn.execute('SELECT version FROM schema').fetchone()[0] - - if schema != SCHEMA_VERSION: - raise SchemaMismatch("Stem's current manual schema version is %s, but %s was version %s" % (SCHEMA_VERSION, path, schema), schema, (SCHEMA_VERSION,)) - - name, synopsis, description, man_commit, stem_commit = conn.execute('SELECT name, synopsis, description, man_commit, stem_commit FROM metadata').fetchone() - except sqlite3.OperationalError as exc: - raise IOError('Failed to read database metadata from %s: %s' % (path, exc)) - - commandline = dict(conn.execute('SELECT name, description FROM commandline').fetchall()) - signals = dict(conn.execute('SELECT name, description FROM signals').fetchall()) - files = dict(conn.execute('SELECT name, description FROM files').fetchall()) - - config_options = OrderedDict() - - for entry in conn.execute('SELECT name, category, usage, summary, description FROM torrc ORDER BY position').fetchall(): - option, category, usage, summary, option_description = entry - config_options[option] = ConfigOption(option, category, usage, summary, option_description) - - manual = Manual(name, synopsis, description, commandline, signals, files, config_options) - manual.man_commit = man_commit - manual.stem_commit = stem_commit - manual.schema = schema - - return manual - - @staticmethod - def _from_config_cache(path): - conf = stem.util.conf.Config() - conf.load(path, commenting = False) - - config_options = OrderedDict() - - for key in conf.keys(): - if key.startswith('config_options.'): - key = key.split('.')[1] - - if key not in config_options: - config_options[key] = ConfigOption( - conf.get('config_options.%s.name' % key, ''), - conf.get('config_options.%s.category' % key, ''), - conf.get('config_options.%s.usage' % key, ''), - conf.get('config_options.%s.summary' % key, ''), - conf.get('config_options.%s.description' % key, '') - ) - - manual = Manual( - conf.get('name', ''), - conf.get('synopsis', ''), - conf.get('description', ''), - conf.get('commandline_options', OrderedDict()), - conf.get('signals', OrderedDict()), - conf.get('files', OrderedDict()), - config_options, - ) - - manual.man_commit = conf.get('man_commit', None) - manual.stem_commit = conf.get('stem_commit', None) - - return manual - - @staticmethod - def from_man(man_path = 'tor'): - """ - Reads and parses a given man page. - - On OSX the man command doesn't have an '--encoding' argument so its results - may not quite match other platforms. For instance, it normalizes long - dashes into '--'. - - :param str man_path: path argument for 'man', for example you might want - '/path/to/tor/doc/tor.1' to read from tor's git repository - - :returns: :class:`~stem.manual.Manual` for the system's man page - - :raises: **IOError** if unable to retrieve the manual - """ - - man_cmd = 'man %s -P cat %s' % ('--encoding=ascii' if HAS_ENCODING_ARG else '', man_path) - - try: - man_output = stem.util.system.call(man_cmd, env = {'MANWIDTH': '10000000'}) - except OSError as exc: - raise IOError("Unable to run '%s': %s" % (man_cmd, exc)) - - categories, config_options = _get_categories(man_output), OrderedDict() - - for category_header, category_enum in CATEGORY_SECTIONS.items(): - _add_config_options(config_options, category_enum, categories.get(category_header, [])) - - for category in categories: - if category.endswith(' OPTIONS') and category not in CATEGORY_SECTIONS and category not in ('COMMAND-LINE OPTIONS', 'NON-PERSISTENT OPTIONS'): - _add_config_options(config_options, Category.UNKNOWN, categories.get(category, [])) - - return Manual( - _join_lines(categories.get('NAME', [])), - _join_lines(categories.get('SYNOPSIS', [])), - _join_lines(categories.get('DESCRIPTION', [])), - _get_indented_descriptions(categories.get('COMMAND-LINE OPTIONS', [])), - _get_indented_descriptions(categories.get('SIGNALS', [])), - _get_indented_descriptions(categories.get('FILES', [])), - config_options, - ) - - @staticmethod - def from_remote(timeout = 60): - """ - Reads and parses the latest tor man page `from gitweb.torproject.org - `_. Note that - while convenient, this reliance on GitWeb means you should alway call with - a fallback, such as... - - :: - - try: - manual = stem.manual.from_remote() - except IOError: - manual = stem.manual.from_cache() - - In addition to our GitWeb dependency this requires 'a2x' which is part of - `asciidoc `_ and... isn't quick. - Personally this takes ~7.41s, breaking down for me as follows... - - * 1.67s to download tor.1.txt - * 5.57s to convert the asciidoc to a man page - * 0.17s for stem to read and parse the manual - - :param int timeout: seconds to wait before timing out the request - - :returns: latest :class:`~stem.manual.Manual` available for tor - - :raises: **IOError** if unable to retrieve the manual - """ - - with tempfile.NamedTemporaryFile() as tmp: - download_man_page(file_handle = tmp, timeout = timeout) - return Manual.from_man(tmp.name) - - def save(self, path): - """ - Persists the manual content to a given location. - - .. versionchanged:: 1.6.0 - Added support for sqlite cache. Support for - :class:`~stem.util.conf.Config` caches will be dropped in Stem 2.x. - - :param str path: path to save our manual content to - - :raises: - * **ImportError** if saving as sqlite and the sqlite3 module is - unavailable - * **IOError** if unsuccessful - """ - - # TODO: drop _save_as_config() with stem 2.x - - if path.endswith('.sqlite'): - return self._save_as_sqlite(path) - else: - return self._save_as_config(path) - - def _save_as_sqlite(self, path): - if not stem.prereq.is_sqlite_available(): - raise ImportError('Saving a sqlite cache requires the sqlite3 module') - - import sqlite3 - tmp_path = path + '.new' - - if os.path.exists(tmp_path): - os.remove(tmp_path) - - with sqlite3.connect(tmp_path) as conn: - for cmd in SCHEMA: - conn.execute(cmd) - - conn.execute('INSERT INTO metadata(name, synopsis, description, man_commit, stem_commit) VALUES (?,?,?,?,?)', (self.name, self.synopsis, self.description, self.man_commit, self.stem_commit)) - - for k, v in self.commandline_options.items(): - conn.execute('INSERT INTO commandline(name, description) VALUES (?,?)', (k, v)) - - for k, v in self.signals.items(): - conn.execute('INSERT INTO signals(name, description) VALUES (?,?)', (k, v)) - - for k, v in self.files.items(): - conn.execute('INSERT INTO files(name, description) VALUES (?,?)', (k, v)) - - for i, v in enumerate(self.config_options.values()): - conn.execute('INSERT INTO torrc(key, name, category, usage, summary, description, position) VALUES (?,?,?,?,?,?,?)', (v.name.upper(), v.name, v.category, v.usage, v.summary, v.description, i)) - - if os.path.exists(path): - os.remove(path) - - os.rename(tmp_path, path) - - def _save_as_config(self, path): - conf = stem.util.conf.Config() - conf.set('name', self.name) - conf.set('synopsis', self.synopsis) - conf.set('description', self.description) - - if self.man_commit: - conf.set('man_commit', self.man_commit) - - if self.stem_commit: - conf.set('stem_commit', self.stem_commit) - - for k, v in self.commandline_options.items(): - conf.set('commandline_options', '%s => %s' % (k, v), overwrite = False) - - for k, v in self.signals.items(): - conf.set('signals', '%s => %s' % (k, v), overwrite = False) - - for k, v in self.files.items(): - conf.set('files', '%s => %s' % (k, v), overwrite = False) - - for k, v in self.config_options.items(): - conf.set('config_options.%s.category' % k, v.category) - conf.set('config_options.%s.name' % k, v.name) - conf.set('config_options.%s.usage' % k, v.usage) - conf.set('config_options.%s.summary' % k, v.summary) - conf.set('config_options.%s.description' % k, v.description) - - conf.save(path) - - def __hash__(self): - return stem.util._hash_attr(self, 'name', 'synopsis', 'description', 'commandline_options', 'signals', 'files', 'config_options', cache = True) - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, Manual) else False - - def __ne__(self, other): - return not self == other - - -def _get_categories(content): - """ - The man page is headers followed by an indented section. First pass gets - the mapping of category titles to their lines. - """ - - # skip header and footer lines - - if content and 'TOR(1)' in content[0]: - content = content[1:] - - if content and content[-1].startswith('Tor'): - content = content[:-1] - - categories = OrderedDict() - category, lines = None, [] - - for line in content: - # replace non-ascii characters - # - # \u2019 - smart single quote - # \u2014 - extra long dash - # \xb7 - centered dot - - char_for = chr if stem.prereq.is_python_3() else unichr - line = line.replace(char_for(0x2019), "'").replace(char_for(0x2014), '-').replace(char_for(0xb7), '*') - - if line and not line.startswith(' '): - if category: - if lines and lines[-1] == '': - lines = lines[:-1] # sections end with an extra empty line - - categories[category] = lines - - category, lines = line.strip(), [] - else: - if line.startswith(' '): - line = line[7:] # contents of a section have a seven space indentation - - lines.append(line) - - if category: - categories[category] = lines - - return categories - - -def _get_indented_descriptions(lines): - """ - Parses the commandline argument and signal sections. These are options - followed by an indented description. For example... - - :: - - -f FILE - Specify a new configuration file to contain further Tor configuration - options OR pass - to make Tor read its configuration from standard - input. (Default: /usr/local/etc/tor/torrc, or $HOME/.torrc if that file - is not found) - - There can be additional paragraphs not related to any particular argument but - ignoring those. - """ - - options, last_arg = OrderedDict(), None - - for line in lines: - if line == ' Note': - last_arg = None # manual has several indented 'Note' blocks - elif line and not line.startswith(' '): - options[line], last_arg = [], line - elif last_arg and line.startswith(' '): - options[last_arg].append(line[4:]) - - return dict([(arg, ' '.join(desc_lines)) for arg, desc_lines in options.items() if desc_lines]) - - -def _add_config_options(config_options, category, lines): - """ - Parses a section of tor configuration options. These have usage information, - followed by an indented description. For instance... - - :: - - ConnLimit NUM - The minimum number of file descriptors that must be available to the - Tor process before it will start. Tor will ask the OS for as many file - descriptors as the OS will allow (you can find this by "ulimit -H -n"). - If this number is less than ConnLimit, then Tor will refuse to start. - - - You probably don't need to adjust this. It has no effect on Windows - since that platform lacks getrlimit(). (Default: 1000) - """ - - def add_option(title, description): - if 'PER INSTANCE OPTIONS' in title: - return # skip, unfortunately amid the options - - if ', ' in title: - # Line actually had multiple options with the same description. For - # example... - # - # AlternateBridgeAuthority [nickname], AlternateDirAuthority [nickname] - - for subtitle in title.split(', '): - add_option(subtitle, description) - else: - name, usage = title.split(' ', 1) if ' ' in title else (title, '') - summary = _config().get('manual.summary.%s' % name.lower(), '') - config_options[name] = ConfigOption(name, category, usage, summary, _join_lines(description).strip()) - - # Remove the section's description by finding the sentence the section - # ends with. - - end_indices = [i for (i, line) in enumerate(lines) if ('The following options' in line or 'PER SERVICE OPTIONS' in line)] - - if end_indices: - lines = lines[max(end_indices):] # trim to the description paragrah - lines = lines[lines.index(''):] # drop the paragraph - - last_title, description = None, [] - - for line in lines: - if line and not line.startswith(' '): - if last_title: - add_option(last_title, description) - - last_title, description = line, [] - else: - if line.startswith(' '): - line = line[4:] - - description.append(line) - - if last_title: - add_option(last_title, description) - - -def _join_lines(lines): - """ - Simple join, except we want empty lines to still provide a newline. - """ - - result = [] - - for line in lines: - if not line: - if result and result[-1] != '\n': - result.append('\n') - else: - result.append(line + '\n') - - return ''.join(result).strip() diff --git a/myenv/lib/python3.12/site-packages/stem/prereq.py b/myenv/lib/python3.12/site-packages/stem/prereq.py deleted file mode 100644 index e7ab4a7..0000000 --- a/myenv/lib/python3.12/site-packages/stem/prereq.py +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Checks for stem dependencies. - -Aside from Python itself Stem only has soft dependencies, which is to say -module unavailability only impacts features that require it. For example, -descriptor signature validation requires 'cryptography'. If unavailable -stem will still read descriptors - just without signature checks. - -:: - - check_requirements - checks for minimum requirements for running stem - is_python_3 - checks if python 3.0 or later is available - is_sqlite_available - checks if the sqlite3 module is available - is_crypto_available - checks if the cryptography module is available - is_zstd_available - checks if the zstd module is available - is_lzma_available - checks if the lzma module is available - is_mock_available - checks if the mock module is available -""" - -import functools -import hashlib -import inspect -import platform -import sys - -# TODO: in stem 2.x consider replacing these functions with requirement -# annotations (like our tests) - -CRYPTO_UNAVAILABLE = "Unable to import the cryptography module. Because of this we'll be unable to verify descriptor signature integrity. You can get cryptography from: https://pypi.org/project/cryptography/" -ZSTD_UNAVAILABLE = 'ZSTD compression requires the zstandard module (https://pypi.org/project/zstandard/)' -LZMA_UNAVAILABLE = 'LZMA compression requires the lzma module (https://docs.python.org/3/library/lzma.html)' -ED25519_UNSUPPORTED = 'Unable to verify descriptor ed25519 certificate integrity. ed25519 is not supported by installed versions of OpenSSL and/or cryptography' - - -def check_requirements(): - """ - Checks that we meet the minimum requirements to run stem. If we don't then - this raises an ImportError with the issue. - - :raises: **ImportError** with the problem if we don't meet stem's - requirements - """ - - major_version, minor_version = sys.version_info[0:2] - - if major_version < 2 or (major_version == 2 and minor_version < 6): - raise ImportError('stem requires python version 2.6 or greater') - - -def _is_python_26(): - """ - Checks if we're running python 2.6. This isn't for users as it'll be removed - in stem 2.0 (when python 2.6 support goes away). - - .. deprecated:: 1.8.0 - Stem 2.x will remove this method along with Python 2.x support. - - :returns: **True** if we're running python 2.6, **False** otherwise - """ - - major_version, minor_version = sys.version_info[0:2] - - return major_version == 2 and minor_version == 6 - - -def is_python_27(): - """ - Checks if we're running python 2.7 or above (including the 3.x series). - - .. deprecated:: 1.5.0 - Stem 2.x will remove this method along with Python 2.x support. - - :returns: **True** if we meet this requirement and **False** otherwise - """ - - major_version, minor_version = sys.version_info[0:2] - - return major_version > 2 or (major_version == 2 and minor_version >= 7) - - -def is_python_3(): - """ - Checks if we're in the 3.0 - 3.x range. - - .. deprecated:: 1.8.0 - Stem 2.x will remove this method along with Python 2.x support. - - :returns: **True** if we meet this requirement and **False** otherwise - """ - - return sys.version_info[0] == 3 - - -def is_pypy(): - """ - Checks if we're running PyPy. - - .. versionadded:: 1.7.0 - - :returns: **True** if running pypy, **False** otherwise - """ - - return platform.python_implementation() == 'PyPy' - - -def is_sqlite_available(): - """ - Checks if the sqlite3 module is available. Usually this is built in, but some - platforms such as FreeBSD and Gentoo exclude it by default. - - .. versionadded:: 1.6.0 - - :returns: **True** if we can use the sqlite3 module and **False** otherwise - """ - - try: - import sqlite3 - return True - except ImportError: - return False - - -def is_crypto_available(ed25519 = False): - """ - Checks if the cryptography functions we use are available. This is used for - verifying relay descriptor signatures. - - :param bool ed25519: check for `ed25519 support - `_, - which requires both cryptography version 2.6 and OpenSSL support - - :returns: **True** if we can use the cryptography module and **False** - otherwise - """ - - from stem.util import log - - try: - from cryptography.utils import int_to_bytes - from cryptography.hazmat.backends import default_backend - from cryptography.hazmat.backends.openssl.backend import backend - from cryptography.hazmat.primitives.asymmetric import rsa - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - from cryptography.hazmat.primitives.serialization import load_der_public_key - - if not hasattr(rsa.RSAPrivateKey, 'sign'): - raise ImportError() - - if ed25519: - # The following import confirms cryptography support (ie. version 2.6+), - # whereas ed25519_supported() checks for OpenSSL bindings. - - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey - - if not hasattr(backend, 'ed25519_supported') or not backend.ed25519_supported(): - log.log_once('stem.prereq._is_crypto_ed25519_supported', log.INFO, ED25519_UNSUPPORTED) - return False - - return True - except ImportError: - log.log_once('stem.prereq.is_crypto_available', log.INFO, CRYPTO_UNAVAILABLE) - return False - - -def is_zstd_available(): - """ - Checks if the `zstd module `_ is - available. - - .. versionadded:: 1.7.0 - - :returns: **True** if we can use the zstd module and **False** otherwise - """ - - try: - # Unfortunately the zstandard module uses the same namespace as another - # zstd module (https://pypi.org/project/zstd/), so we need to - # differentiate them. - - import zstd - return hasattr(zstd, 'ZstdDecompressor') - except ImportError: - from stem.util import log - log.log_once('stem.prereq.is_zstd_available', log.INFO, ZSTD_UNAVAILABLE) - return False - - -def is_lzma_available(): - """ - Checks if the `lzma module `_ is - available. This was added as a builtin in Python 3.3. - - .. versionadded:: 1.7.0 - - :returns: **True** if we can use the lzma module and **False** otherwise - """ - - try: - import lzma - return True - except ImportError: - from stem.util import log - log.log_once('stem.prereq.is_lzma_available', log.INFO, LZMA_UNAVAILABLE) - return False - - -def is_mock_available(): - """ - Checks if the mock module is available. In python 3.3 and up it is a builtin - unittest module, but before this it needed to be `installed separately - `_. Imports should be as follows.... - - :: - - try: - # added in python 3.3 - from unittest.mock import Mock - except ImportError: - from mock import Mock - - :returns: **True** if the mock module is available and **False** otherwise - """ - - try: - # checks for python 3.3 version - import unittest.mock - return True - except ImportError: - pass - - try: - import mock - - # check for mock's patch.dict() which was introduced in version 0.7.0 - - if not hasattr(mock.patch, 'dict'): - raise ImportError() - - # check for mock's new_callable argument for patch() which was introduced in version 0.8.0 - - if 'new_callable' not in inspect.getfullargspec(mock.patch).args: - raise ImportError() - - return True - except ImportError: - return False - - -def _is_lru_cache_available(): - """ - Functools added lru_cache to the standard library in Python 3.2. Prior to - this using a bundled implementation. We're also using this with Python 3.5 - due to a buggy implementation. (:trac:`26412`) - """ - - major_version, minor_version = sys.version_info[0:2] - - if major_version == 3 and minor_version == 5: - return False - else: - return hasattr(functools, 'lru_cache') - - -def _is_sha3_available(): - """ - Check if hashlib has sha3 support. This requires Python 3.6+ *or* the `pysha3 - module `_. - """ - - # If pysha3 is present then importing sha3 will monkey patch the methods we - # want onto hashlib. - - if not hasattr(hashlib, 'sha3_256') or not hasattr(hashlib, 'shake_256'): - try: - import sha3 - except ImportError: - pass - - return hasattr(hashlib, 'sha3_256') and hasattr(hashlib, 'shake_256') diff --git a/myenv/lib/python3.12/site-packages/stem/process.py b/myenv/lib/python3.12/site-packages/stem/process.py deleted file mode 100644 index 80824bd..0000000 --- a/myenv/lib/python3.12/site-packages/stem/process.py +++ /dev/null @@ -1,302 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Helper functions for working with tor as a process. - -:NO_TORRC: - when provided as a torrc_path tor is ran with a blank configuration - -:DEFAULT_INIT_TIMEOUT: - number of seconds before we time out our attempt to start a tor instance - -**Module Overview:** - -:: - - launch_tor - starts up a tor process - launch_tor_with_config - starts a tor process with a custom torrc -""" - -import os -import re -import signal -import subprocess -import tempfile -import threading - -import stem.prereq -import stem.util.str_tools -import stem.util.system -import stem.version - -NO_TORRC = '' -DEFAULT_INIT_TIMEOUT = 90 - - -def launch_tor(tor_cmd = 'tor', args = None, torrc_path = None, completion_percent = 100, init_msg_handler = None, timeout = DEFAULT_INIT_TIMEOUT, take_ownership = False, close_output = True, stdin = None): - """ - Initializes a tor process. This blocks until initialization completes or we - error out. - - If tor's data directory is missing or stale then bootstrapping will include - making several requests to the directory authorities which can take a little - while. Usually this is done in 50 seconds or so, but occasionally calls seem - to get stuck, taking well over the default timeout. - - **To work to must log at NOTICE runlevel to stdout.** It does this by - default, but if you have a 'Log' entry in your torrc then you'll also need - 'Log NOTICE stdout'. - - Note: The timeout argument does not work on Windows or when outside the - main thread, and relies on the global state of the signal module. - - .. versionchanged:: 1.6.0 - Allowing the timeout argument to be a float. - - .. versionchanged:: 1.7.0 - Added the **close_output** argument. - - :param str tor_cmd: command for starting tor - :param list args: additional arguments for tor - :param str torrc_path: location of the torrc for us to use - :param int completion_percent: percent of bootstrap completion at which - this'll return - :param functor init_msg_handler: optional functor that will be provided with - tor's initialization stdout as we get it - :param int timeout: time after which the attempt to start tor is aborted, no - timeouts are applied if **None** - :param bool take_ownership: asserts ownership over the tor process so it - aborts if this python process terminates or a :class:`~stem.control.Controller` - we establish to it disconnects - :param bool close_output: closes tor's stdout and stderr streams when - bootstrapping is complete if true - :param str stdin: content to provide on stdin - - :returns: **subprocess.Popen** instance for the tor subprocess - - :raises: **OSError** if we either fail to create the tor process or reached a - timeout without success - """ - - if stem.util.system.is_windows(): - if timeout is not None and timeout != DEFAULT_INIT_TIMEOUT: - raise OSError('You cannot launch tor with a timeout on Windows') - - timeout = None - elif threading.current_thread().__class__.__name__ != '_MainThread': - if timeout is not None and timeout != DEFAULT_INIT_TIMEOUT: - raise OSError('Launching tor with a timeout can only be done in the main thread') - - timeout = None - - # sanity check that we got a tor binary - - if os.path.sep in tor_cmd: - # got a path (either relative or absolute), check what it leads to - - if os.path.isdir(tor_cmd): - raise OSError("'%s' is a directory, not the tor executable" % tor_cmd) - elif not os.path.isfile(tor_cmd): - raise OSError("'%s' doesn't exist" % tor_cmd) - elif not stem.util.system.is_available(tor_cmd): - raise OSError("'%s' isn't available on your system. Maybe it's not in your PATH?" % tor_cmd) - - # double check that we have a torrc to work with - if torrc_path not in (None, NO_TORRC) and not os.path.exists(torrc_path): - raise OSError("torrc doesn't exist (%s)" % torrc_path) - - # starts a tor subprocess, raising an OSError if it fails - runtime_args, temp_file = [tor_cmd], None - - if args: - runtime_args += args - - if torrc_path: - if torrc_path == NO_TORRC: - temp_file = tempfile.mkstemp(prefix = 'empty-torrc-', text = True)[1] - runtime_args += ['-f', temp_file] - else: - runtime_args += ['-f', torrc_path] - - if take_ownership: - runtime_args += ['__OwningControllerProcess', str(os.getpid())] - - tor_process = None - - try: - tor_process = subprocess.Popen(runtime_args, stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE) - - if stdin: - tor_process.stdin.write(stem.util.str_tools._to_bytes(stdin)) - tor_process.stdin.close() - - if timeout: - def timeout_handler(signum, frame): - raise OSError('reached a %i second timeout without success' % timeout) - - signal.signal(signal.SIGALRM, timeout_handler) - signal.setitimer(signal.ITIMER_REAL, timeout) - - bootstrap_line = re.compile('Bootstrapped ([0-9]+)%') - problem_line = re.compile('\\[(warn|err)\\] (.*)$') - last_problem = 'Timed out' - - while True: - # Tor's stdout will be read as ASCII bytes. This is fine for python 2, but - # in python 3 that means it'll mismatch with other operations (for instance - # the bootstrap_line.search() call later will fail). - # - # It seems like python 2.x is perfectly happy for this to be unicode, so - # normalizing to that. - - init_line = tor_process.stdout.readline().decode('utf-8', 'replace').strip() - - # this will provide empty results if the process is terminated - - if not init_line: - raise OSError('Process terminated: %s' % last_problem) - - # provide the caller with the initialization message if they want it - - if init_msg_handler: - init_msg_handler(init_line) - - # return the process if we're done with bootstrapping - - bootstrap_match = bootstrap_line.search(init_line) - problem_match = problem_line.search(init_line) - - if bootstrap_match and int(bootstrap_match.group(1)) >= completion_percent: - return tor_process - elif problem_match: - runlevel, msg = problem_match.groups() - - if 'see warnings above' not in msg: - if ': ' in msg: - msg = msg.split(': ')[-1].strip() - - last_problem = msg - except: - if tor_process: - tor_process.kill() # don't leave a lingering process - tor_process.wait() - - raise - finally: - if timeout: - signal.alarm(0) # stop alarm - - if tor_process and close_output: - if tor_process.stdout: - tor_process.stdout.close() - - if tor_process.stderr: - tor_process.stderr.close() - - if temp_file: - try: - os.remove(temp_file) - except: - pass - - -def launch_tor_with_config(config, tor_cmd = 'tor', completion_percent = 100, init_msg_handler = None, timeout = DEFAULT_INIT_TIMEOUT, take_ownership = False, close_output = True): - """ - Initializes a tor process, like :func:`~stem.process.launch_tor`, but with a - customized configuration. This writes a temporary torrc to disk, launches - tor, then deletes the torrc. - - For example... - - :: - - tor_process = stem.process.launch_tor_with_config( - config = { - 'ControlPort': '2778', - 'Log': [ - 'NOTICE stdout', - 'ERR file /tmp/tor_error_log', - ], - }, - ) - - .. versionchanged:: 1.7.0 - Added the **close_output** argument. - - :param dict config: configuration options, such as "{'ControlPort': '9051'}", - values can either be a **str** or **list of str** if for multiple values - :param str tor_cmd: command for starting tor - :param int completion_percent: percent of bootstrap completion at which - this'll return - :param functor init_msg_handler: optional functor that will be provided with - tor's initialization stdout as we get it - :param int timeout: time after which the attempt to start tor is aborted, no - timeouts are applied if **None** - :param bool take_ownership: asserts ownership over the tor process so it - aborts if this python process terminates or a :class:`~stem.control.Controller` - we establish to it disconnects - :param bool close_output: closes tor's stdout and stderr streams when - bootstrapping is complete if true - - :returns: **subprocess.Popen** instance for the tor subprocess - - :raises: **OSError** if we either fail to create the tor process or reached a - timeout without success - """ - - # TODO: Drop this version check when tor 0.2.6.3 or higher is the only game - # in town. - - try: - use_stdin = stem.version.get_system_tor_version(tor_cmd) >= stem.version.Requirement.TORRC_VIA_STDIN - except IOError: - use_stdin = False - - # we need to be sure that we're logging to stdout to figure out when we're - # done bootstrapping - - if 'Log' in config: - stdout_options = ['DEBUG stdout', 'INFO stdout', 'NOTICE stdout'] - - if isinstance(config['Log'], str): - config['Log'] = [config['Log']] - - has_stdout = False - - for log_config in config['Log']: - if log_config in stdout_options: - has_stdout = True - break - - if not has_stdout: - config['Log'].append('NOTICE stdout') - - config_str = '' - - for key, values in list(config.items()): - if isinstance(values, str): - config_str += '%s %s\n' % (key, values) - else: - for value in values: - config_str += '%s %s\n' % (key, value) - - if use_stdin: - return launch_tor(tor_cmd, ['-f', '-'], None, completion_percent, init_msg_handler, timeout, take_ownership, close_output, stdin = config_str) - else: - torrc_descriptor, torrc_path = tempfile.mkstemp(prefix = 'torrc-', text = True) - - try: - with open(torrc_path, 'w') as torrc_file: - torrc_file.write(config_str) - - # prevents tor from erroring out due to a missing torrc if it gets a sighup - args = ['__ReloadTorrcOnSIGHUP', '0'] - - return launch_tor(tor_cmd, args, torrc_path, completion_percent, init_msg_handler, timeout, take_ownership) - finally: - try: - os.close(torrc_descriptor) - os.remove(torrc_path) - except: - pass diff --git a/myenv/lib/python3.12/site-packages/stem/response/__init__.py b/myenv/lib/python3.12/site-packages/stem/response/__init__.py deleted file mode 100644 index d90061b..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/__init__.py +++ /dev/null @@ -1,607 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Parses replies from the control socket. - -**Module Overview:** - -:: - - convert - translates a ControlMessage into a particular response subclass - - ControlMessage - Message that's read from the control socket. - |- SingleLineResponse - Simple tor response only including a single line of information. - | - |- from_str - provides a ControlMessage for the given string - |- is_ok - response had a 250 status - |- content - provides the parsed message content - +- raw_content - unparsed socket data - - ControlLine - String subclass with methods for parsing controller responses. - |- remainder - provides the unparsed content - |- is_empty - checks if the remaining content is empty - |- is_next_quoted - checks if the next entry is a quoted value - |- is_next_mapping - checks if the next entry is a KEY=VALUE mapping - |- peek_key - provides the key of the next entry - |- pop - removes and returns the next entry - +- pop_mapping - removes and returns the next entry as a KEY=VALUE mapping -""" - -import codecs -import io -import re -import time -import threading - -import stem.socket -import stem.util -import stem.util.str_tools - -__all__ = [ - 'add_onion', - 'events', - 'getinfo', - 'getconf', - 'protocolinfo', - 'authchallenge', - 'convert', - 'ControlMessage', - 'ControlLine', - 'SingleLineResponse', -] - -KEY_ARG = re.compile('^(\\S+)=') - - -def convert(response_type, message, **kwargs): - """ - Converts a :class:`~stem.response.ControlMessage` into a particular kind of - tor response. This does an in-place conversion of the message from being a - :class:`~stem.response.ControlMessage` to a subclass for its response type. - Recognized types include... - - =================== ===== - response_type Class - =================== ===== - **ADD_ONION** :class:`stem.response.add_onion.AddOnionResponse` - **AUTHCHALLENGE** :class:`stem.response.authchallenge.AuthChallengeResponse` - **EVENT** :class:`stem.response.events.Event` subclass - **GETCONF** :class:`stem.response.getconf.GetConfResponse` - **GETINFO** :class:`stem.response.getinfo.GetInfoResponse` - **MAPADDRESS** :class:`stem.response.mapaddress.MapAddressResponse` - **PROTOCOLINFO** :class:`stem.response.protocolinfo.ProtocolInfoResponse` - **SINGLELINE** :class:`stem.response.SingleLineResponse` - =================== ===== - - :param str response_type: type of tor response to convert to - :param stem.response.ControlMessage message: message to be converted - :param kwargs: optional keyword arguments to be passed to the parser method - - :raises: - * :class:`stem.ProtocolError` the message isn't a proper response of - that type - * :class:`stem.InvalidArguments` the arguments given as input are - invalid, this is can only be raised if the response_type is: **GETINFO**, - **GETCONF** - * :class:`stem.InvalidRequest` the arguments given as input are - invalid, this is can only be raised if the response_type is: - **MAPADDRESS** - * :class:`stem.OperationFailed` if the action the event represents failed, - this is can only be raised if the response_type is: **MAPADDRESS** - * **TypeError** if argument isn't a :class:`~stem.response.ControlMessage` - or response_type isn't supported - """ - - import stem.response.add_onion - import stem.response.authchallenge - import stem.response.events - import stem.response.getinfo - import stem.response.getconf - import stem.response.mapaddress - import stem.response.protocolinfo - - if not isinstance(message, ControlMessage): - raise TypeError('Only able to convert stem.response.ControlMessage instances') - - response_types = { - 'ADD_ONION': stem.response.add_onion.AddOnionResponse, - 'AUTHCHALLENGE': stem.response.authchallenge.AuthChallengeResponse, - 'EVENT': stem.response.events.Event, - 'GETCONF': stem.response.getconf.GetConfResponse, - 'GETINFO': stem.response.getinfo.GetInfoResponse, - 'MAPADDRESS': stem.response.mapaddress.MapAddressResponse, - 'PROTOCOLINFO': stem.response.protocolinfo.ProtocolInfoResponse, - 'SINGLELINE': SingleLineResponse, - } - - try: - response_class = response_types[response_type] - except TypeError: - raise TypeError('Unsupported response type: %s' % response_type) - - message.__class__ = response_class - message._parse_message(**kwargs) - - -class ControlMessage(object): - """ - Message from the control socket. This is iterable and can be stringified for - individual message components stripped of protocol formatting. Messages are - never empty. - - :var int arrived_at: unix timestamp for when the message arrived - - .. versionchanged:: 1.7.0 - Implemented equality and hashing. - - .. versionchanged:: 1.8.0 - Moved **arrived_at** from the Event class up to this base ControlMessage. - """ - - @staticmethod - def from_str(content, msg_type = None, normalize = False, **kwargs): - """ - Provides a ControlMessage for the given content. - - .. versionadded:: 1.1.0 - - .. versionchanged:: 1.6.0 - Added the normalize argument. - - :param str content: message to construct the message from - :param str msg_type: type of tor reply to parse the content as - :param bool normalize: ensures expected carriage return and ending newline - are present - :param kwargs: optional keyword arguments to be passed to the parser method - - :returns: stem.response.ControlMessage instance - """ - - if normalize: - if not content.endswith('\n'): - content += '\n' - - content = re.sub('([\r]?)\n', '\r\n', content) - - msg = stem.socket.recv_message(io.BytesIO(stem.util.str_tools._to_bytes(content)), arrived_at = kwargs.pop('arrived_at', None)) - - if msg_type is not None: - convert(msg_type, msg, **kwargs) - - return msg - - def __init__(self, parsed_content, raw_content, arrived_at = None): - if not parsed_content: - raise ValueError("ControlMessages can't be empty") - - self.arrived_at = arrived_at if arrived_at else int(time.time()) - - self._parsed_content = parsed_content - self._raw_content = raw_content - self._str = None - self._hash = stem.util._hash_attr(self, '_raw_content') - - def is_ok(self): - """ - Checks if any of our lines have a 250 response. - - :returns: **True** if any lines have a 250 response code, **False** otherwise - """ - - for code, _, _ in self._parsed_content: - if code == '250': - return True - - return False - - def content(self, get_bytes = False): - """ - Provides the parsed message content. These are entries of the form... - - :: - - (status_code, divider, content) - - **status_code** - Three character code for the type of response (defined in section 4 of - the control-spec). - - **divider** - Single character to indicate if this is mid-reply, data, or an end to the - message (defined in section 2.3 of the control-spec). - - **content** - The following content is the actual payload of the line. - - For data entries the content is the full multi-line payload with newline - linebreaks and leading periods unescaped. - - The **status_code** and **divider** are both strings (**bytes** in python - 2.x and **unicode** in python 3.x). The **content** however is **bytes** if - **get_bytes** is **True**. - - .. versionchanged:: 1.1.0 - Added the get_bytes argument. - - :param bool get_bytes: provides **bytes** for the **content** rather than a **str** - - :returns: **list** of (str, str, str) tuples for the components of this message - """ - - if stem.prereq.is_python_3() and not get_bytes: - return [(code, div, stem.util.str_tools._to_unicode(content)) for (code, div, content) in self._parsed_content] - else: - return list(self._parsed_content) - - def raw_content(self, get_bytes = False): - """ - Provides the unparsed content read from the control socket. - - .. versionchanged:: 1.1.0 - Added the get_bytes argument. - - :param bool get_bytes: if **True** then this provides **bytes** rather than a **str** - - :returns: **str** of the socket data used to generate this message - """ - - if stem.prereq.is_python_3() and not get_bytes: - return stem.util.str_tools._to_unicode(self._raw_content) - else: - return self._raw_content - - def __str__(self): - """ - Content of the message, stripped of status code and divider protocol - formatting. - """ - - if self._str is None: - self._str = '\n'.join(list(self)) - - return self._str - - def __iter__(self): - """ - Provides :class:`~stem.response.ControlLine` instances for the content of - the message. This is stripped of status codes and dividers, for instance... - - :: - - 250+info/names= - desc/id/* -- Router descriptors by ID. - desc/name/* -- Router descriptors by nickname. - . - 250 OK - - Would provide two entries... - - :: - - 1st - "info/names= - desc/id/* -- Router descriptors by ID. - desc/name/* -- Router descriptors by nickname." - 2nd - "OK" - """ - - for _, _, content in self._parsed_content: - if stem.prereq.is_python_3(): - content = stem.util.str_tools._to_unicode(content) - - yield ControlLine(content) - - def __len__(self): - """ - :returns: number of ControlLines - """ - - return len(self._parsed_content) - - def __getitem__(self, index): - """ - :returns: :class:`~stem.response.ControlLine` at the index - """ - - content = self._parsed_content[index][2] - - if stem.prereq.is_python_3(): - content = stem.util.str_tools._to_unicode(content) - - return ControlLine(content) - - def __hash__(self): - return self._hash - - def __eq__(self, other): - return hash(self) == hash(other) if isinstance(other, ControlMessage) else False - - def __ne__(self, other): - return not self == other - - -class ControlLine(str): - """ - String subclass that represents a line of controller output. This behaves as - a normal string with additional methods for parsing and popping entries from - a space delimited series of elements like a stack. - - None of these additional methods effect ourselves as a string (which is still - immutable). All methods are thread safe. - """ - - def __new__(self, value): - return str.__new__(self, value) - - def __init__(self, value): - self._remainder = value - self._remainder_lock = threading.RLock() - - def remainder(self): - """ - Provides our unparsed content. This is an empty string after we've popped - all entries. - - :returns: **str** of the unparsed content - """ - - return self._remainder - - def is_empty(self): - """ - Checks if we have further content to pop or not. - - :returns: **True** if we have additional content, **False** otherwise - """ - - return self._remainder == '' - - def is_next_quoted(self, escaped = False): - """ - Checks if our next entry is a quoted value or not. - - :param bool escaped: unescapes the string - - :returns: **True** if the next entry can be parsed as a quoted value, **False** otherwise - """ - - start_quote, end_quote = _get_quote_indices(self._remainder, escaped) - return start_quote == 0 and end_quote != -1 - - def is_next_mapping(self, key = None, quoted = False, escaped = False): - """ - Checks if our next entry is a KEY=VALUE mapping or not. - - :param str key: checks that the key matches this value, skipping the check if **None** - :param bool quoted: checks that the mapping is to a quoted value - :param bool escaped: unescapes the string - - :returns: **True** if the next entry can be parsed as a key=value mapping, - **False** otherwise - """ - - remainder = self._remainder # temp copy to avoid locking - key_match = KEY_ARG.match(remainder) - - if key_match: - if key and key != key_match.groups()[0]: - return False - - if quoted: - # checks that we have a quoted value and that it comes after the 'key=' - start_quote, end_quote = _get_quote_indices(remainder, escaped) - return start_quote == key_match.end() and end_quote != -1 - else: - return True # we just needed to check for the key - else: - return False # doesn't start with a key - - def peek_key(self): - """ - Provides the key of the next entry, providing **None** if it isn't a - key/value mapping. - - :returns: **str** with the next entry's key - """ - - remainder = self._remainder - key_match = KEY_ARG.match(remainder) - - if key_match: - return key_match.groups()[0] - else: - return None - - def pop(self, quoted = False, escaped = False): - """ - Parses the next space separated entry, removing it and the space from our - remaining content. Examples... - - :: - - >>> line = ControlLine("\\"We're all mad here.\\" says the grinning cat.") - >>> print line.pop(True) - "We're all mad here." - >>> print line.pop() - "says" - >>> print line.remainder() - "the grinning cat." - - >>> line = ControlLine("\\"this has a \\\\\\" and \\\\\\\\ in it\\" foo=bar more_data") - >>> print line.pop(True, True) - "this has a \\" and \\\\ in it" - - :param bool quoted: parses the next entry as a quoted value, removing the quotes - :param bool escaped: unescapes the string - - :returns: **str** of the next space separated entry - - :raises: - * **ValueError** if quoted is True without the value being quoted - * **IndexError** if we don't have any remaining content left to parse - """ - - with self._remainder_lock: - next_entry, remainder = _parse_entry(self._remainder, quoted, escaped, False) - self._remainder = remainder - return next_entry - - def pop_mapping(self, quoted = False, escaped = False, get_bytes = False): - """ - Parses the next space separated entry as a KEY=VALUE mapping, removing it - and the space from our remaining content. - - .. versionchanged:: 1.6.0 - Added the get_bytes argument. - - :param bool quoted: parses the value as being quoted, removing the quotes - :param bool escaped: unescapes the string - :param bool get_bytes: provides **bytes** for the **value** rather than a **str** - - :returns: **tuple** of the form (key, value) - - :raises: **ValueError** if this isn't a KEY=VALUE mapping or if quoted is - **True** without the value being quoted - :raises: **IndexError** if there's nothing to parse from the line - """ - - with self._remainder_lock: - if self.is_empty(): - raise IndexError('no remaining content to parse') - - key_match = KEY_ARG.match(self._remainder) - - if not key_match: - raise ValueError("the next entry isn't a KEY=VALUE mapping: " + self._remainder) - - # parse off the key - key = key_match.groups()[0] - remainder = self._remainder[key_match.end():] - - next_entry, remainder = _parse_entry(remainder, quoted, escaped, get_bytes) - self._remainder = remainder - return (key, next_entry) - - -def _parse_entry(line, quoted, escaped, get_bytes): - """ - Parses the next entry from the given space separated content. - - :param str line: content to be parsed - :param bool quoted: parses the next entry as a quoted value, removing the quotes - :param bool escaped: unescapes the string - - :returns: **tuple** of the form (entry, remainder) - - :raises: - * **ValueError** if quoted is True without the next value being quoted - * **IndexError** if there's nothing to parse from the line - """ - - if line == '': - raise IndexError('no remaining content to parse') - - next_entry, remainder = '', line - - if quoted: - # validate and parse the quoted value - start_quote, end_quote = _get_quote_indices(remainder, escaped) - - if start_quote != 0 or end_quote == -1: - raise ValueError("the next entry isn't a quoted value: " + line) - - next_entry, remainder = remainder[1:end_quote], remainder[end_quote + 1:] - else: - # non-quoted value, just need to check if there's more data afterward - if ' ' in remainder: - next_entry, remainder = remainder.split(' ', 1) - else: - next_entry, remainder = remainder, '' - - if escaped: - # Tor does escaping in its 'esc_for_log' function of 'common/util.c'. It's - # hard to tell what controller functions use this in practice, but direct - # users are... - # - # * 'COOKIEFILE' field of PROTOCOLINFO responses - # * logged messages about bugs - # * the 'getinfo_helper_listeners' function of control.c - # - # Ideally we'd use "next_entry.decode('string_escape')" but it was removed - # in python 3.x and 'unicode_escape' isn't quite the same... - # - # https://stackoverflow.com/questions/14820429/how-do-i-decodestring-escape-in-python3 - - next_entry = codecs.escape_decode(next_entry)[0] - - if stem.prereq.is_python_3() and not get_bytes: - next_entry = stem.util.str_tools._to_unicode(next_entry) # normalize back to str - - if get_bytes: - next_entry = stem.util.str_tools._to_bytes(next_entry) - - return (next_entry, remainder.lstrip()) - - -def _get_quote_indices(line, escaped): - """ - Provides the indices of the next two quotes in the given content. - - :param str line: content to be parsed - :param bool escaped: unescapes the string - - :returns: **tuple** of two ints, indices being -1 if a quote doesn't exist - """ - - indices, quote_index = [], -1 - - for _ in range(2): - quote_index = line.find('"', quote_index + 1) - - # if we have escapes then we need to skip any r'\"' entries - if escaped: - # skip check if index is -1 (no match) or 0 (first character) - while quote_index >= 1 and line[quote_index - 1] == '\\': - quote_index = line.find('"', quote_index + 1) - - indices.append(quote_index) - - return tuple(indices) - - -class SingleLineResponse(ControlMessage): - """ - Reply to a request that performs an action rather than querying data. These - requests only contain a single line, which is 'OK' if successful, and a - description of the problem if not. - - :var str code: status code for our line - :var str message: content of the line - """ - - def is_ok(self, strict = False): - """ - Checks if the response code is "250". If strict is **True** then this - checks if the response is "250 OK" - - :param bool strict: checks for a "250 OK" message if **True** - - :returns: - * If strict is **False**: **True** if the response code is "250", **False** otherwise - * If strict is **True**: **True** if the response is "250 OK", **False** otherwise - """ - - if strict: - return self.content()[0] == ('250', ' ', 'OK') - - return self.content()[0][0] == '250' - - def _parse_message(self): - content = self.content() - - if len(content) > 1: - raise stem.ProtocolError('Received multi-line response') - elif len(content) == 0: - raise stem.ProtocolError('Received empty response') - else: - self.code, _, self.message = content[0] diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 79d5ba7..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/add_onion.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/add_onion.cpython-312.pyc deleted file mode 100644 index f80fcfd..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/add_onion.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/authchallenge.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/authchallenge.cpython-312.pyc deleted file mode 100644 index ab9d356..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/authchallenge.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/events.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/events.cpython-312.pyc deleted file mode 100644 index 103b7db..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/events.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getconf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getconf.cpython-312.pyc deleted file mode 100644 index 4aaee83..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getconf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getinfo.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getinfo.cpython-312.pyc deleted file mode 100644 index 9fc6ff8..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/getinfo.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/mapaddress.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/mapaddress.cpython-312.pyc deleted file mode 100644 index dfeddbb..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/mapaddress.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/protocolinfo.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/response/__pycache__/protocolinfo.cpython-312.pyc deleted file mode 100644 index a94355e..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/response/__pycache__/protocolinfo.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/response/add_onion.py b/myenv/lib/python3.12/site-packages/stem/response/add_onion.py deleted file mode 100644 index d60e0d2..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/add_onion.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import stem.response - - -class AddOnionResponse(stem.response.ControlMessage): - """ - ADD_ONION response. - - :var str service_id: hidden service address without the '.onion' suffix - :var str private_key: base64 encoded hidden service private key - :var str private_key_type: crypto used to generate the hidden service private - key (such as RSA1024) - :var dict client_auth: newly generated client credentials the service accepts - """ - - def _parse_message(self): - # Example: - # 250-ServiceID=gfzprpioee3hoppz - # 250-PrivateKey=RSA1024:MIICXgIBAAKBgQDZvYVxv... - # 250-ClientAuth=bob:l4BT016McqV2Oail+Bwe6w - # 250 OK - - self.service_id = None - self.private_key = None - self.private_key_type = None - self.client_auth = {} - - if not self.is_ok(): - raise stem.ProtocolError("ADD_ONION response didn't have an OK status: %s" % self) - - if not str(self).startswith('ServiceID='): - raise stem.ProtocolError('ADD_ONION response should start with the service id: %s' % self) - - for line in list(self): - if '=' in line: - key, value = line.split('=', 1) - - if key == 'ServiceID': - self.service_id = value - elif key == 'PrivateKey': - if ':' not in value: - raise stem.ProtocolError("ADD_ONION PrivateKey lines should be of the form 'PrivateKey=[type]:[key]: %s" % self) - - self.private_key_type, self.private_key = value.split(':', 1) - elif key == 'ClientAuth': - if ':' not in value: - raise stem.ProtocolError("ADD_ONION ClientAuth lines should be of the form 'ClientAuth=[username]:[credential]: %s" % self) - - username, credential = value.split(':', 1) - self.client_auth[username] = credential diff --git a/myenv/lib/python3.12/site-packages/stem/response/authchallenge.py b/myenv/lib/python3.12/site-packages/stem/response/authchallenge.py deleted file mode 100644 index 6dd07b5..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/authchallenge.py +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import binascii - -import stem.response -import stem.socket -import stem.util.str_tools -import stem.util.tor_tools - - -class AuthChallengeResponse(stem.response.ControlMessage): - """ - AUTHCHALLENGE query response. - - :var str server_hash: server hash provided by tor - :var str server_nonce: server nonce provided by tor - """ - - def _parse_message(self): - # Example: - # 250 AUTHCHALLENGE SERVERHASH=680A73C9836C4F557314EA1C4EDE54C285DB9DC89C83627401AEF9D7D27A95D5 SERVERNONCE=F8EA4B1F2C8B40EF1AF68860171605B910E3BBCABADF6FC3DB1FA064F4690E85 - - self.server_hash = None - self.server_nonce = None - - if not self.is_ok(): - raise stem.ProtocolError("AUTHCHALLENGE response didn't have an OK status:\n%s" % self) - elif len(self) > 1: - raise stem.ProtocolError('Received multiline AUTHCHALLENGE response:\n%s' % self) - - line = self[0] - - # sanity check that we're a AUTHCHALLENGE response - if not line.pop() == 'AUTHCHALLENGE': - raise stem.ProtocolError('Message is not an AUTHCHALLENGE response (%s)' % self) - - if line.is_next_mapping('SERVERHASH'): - value = line.pop_mapping()[1] - - if not stem.util.tor_tools.is_hex_digits(value, 64): - raise stem.ProtocolError('SERVERHASH has an invalid value: %s' % value) - - self.server_hash = binascii.unhexlify(stem.util.str_tools._to_bytes(value)) - else: - raise stem.ProtocolError('Missing SERVERHASH mapping: %s' % line) - - if line.is_next_mapping('SERVERNONCE'): - value = line.pop_mapping()[1] - - if not stem.util.tor_tools.is_hex_digits(value, 64): - raise stem.ProtocolError('SERVERNONCE has an invalid value: %s' % value) - - self.server_nonce = binascii.unhexlify(stem.util.str_tools._to_bytes(value)) - else: - raise stem.ProtocolError('Missing SERVERNONCE mapping: %s' % line) diff --git a/myenv/lib/python3.12/site-packages/stem/response/events.py b/myenv/lib/python3.12/site-packages/stem/response/events.py deleted file mode 100644 index 8b81931..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/events.py +++ /dev/null @@ -1,1428 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import io -import re - -import stem -import stem.control -import stem.descriptor.router_status_entry -import stem.prereq -import stem.response -import stem.util -import stem.version - -from stem.util import connection, log, str_tools, tor_tools - -# Matches keyword=value arguments. This can't be a simple "(.*)=(.*)" pattern -# because some positional arguments, like circuit paths, can have an equal -# sign. - -KW_ARG = re.compile('^(.*) ([A-Za-z0-9_]+)=(\\S*)$') -QUOTED_KW_ARG = re.compile('^(.*) ([A-Za-z0-9_]+)="(.*)"$') -CELL_TYPE = re.compile('^[a-z0-9_]+$') -PARSE_NEWCONSENSUS_EVENTS = True - -# TODO: We can remove the following when we drop python2.6 support. - -INT_TYPE = int if stem.prereq.is_python_3() else long - - -class Event(stem.response.ControlMessage): - """ - Base for events we receive asynchronously, as described in section 4.1 of the - `control-spec - `_. - - :var str type: event type - :var list positional_args: positional arguments of the event - :var dict keyword_args: key/value arguments of the event - """ - - _POSITIONAL_ARGS = () # attribute names for recognized positional arguments - _KEYWORD_ARGS = {} # map of 'keyword => attribute' for recognized attributes - _QUOTED = () # positional arguments that are quoted - _OPTIONALLY_QUOTED = () # positional arguments that may or may not be quoted - _SKIP_PARSING = False # skip parsing contents into our positional_args and keyword_args - _VERSION_ADDED = stem.version.Version('0.1.1.1-alpha') # minimum version with control-spec V1 event support - - def _parse_message(self): - if not str(self).strip(): - raise stem.ProtocolError('Received a blank tor event. Events must at the very least have a type.') - - self.type = str(self).split()[0] - self.positional_args = [] - self.keyword_args = {} - - # if we're a recognized event type then translate ourselves into that subclass - - if self.type in EVENT_TYPE_TO_CLASS: - self.__class__ = EVENT_TYPE_TO_CLASS[self.type] - - if not self._SKIP_PARSING: - self._parse_standard_attr() - - self._parse() - - def __hash__(self): - return stem.util._hash_attr(self, 'arrived_at', parent = stem.response.ControlMessage, cache = True) - - def _parse_standard_attr(self): - """ - Most events are of the form... - 650 *( positional_args ) *( key "=" value ) - - This parses this standard format, populating our **positional_args** and - **keyword_args** attributes and creating attributes if it's in our event's - **_POSITIONAL_ARGS** and **_KEYWORD_ARGS**. - """ - - # Tor events contain some number of positional arguments followed by - # key/value mappings. Parsing keyword arguments from the end until we hit - # something that isn't a key/value mapping. The rest are positional. - - content = str(self) - - while True: - match = QUOTED_KW_ARG.match(content) - - if not match: - match = KW_ARG.match(content) - - if match: - content, keyword, value = match.groups() - self.keyword_args[keyword] = value - else: - break - - # Setting attributes for the fields that we recognize. - - self.positional_args = content.split()[1:] - positional = list(self.positional_args) - - for attr_name in self._POSITIONAL_ARGS: - attr_value = None - - if positional: - if attr_name in self._QUOTED or (attr_name in self._OPTIONALLY_QUOTED and positional[0].startswith('"')): - attr_values = [positional.pop(0)] - - if not attr_values[0].startswith('"'): - raise stem.ProtocolError("The %s value should be quoted, but didn't have a starting quote: %s" % (attr_name, self)) - - while True: - if not positional: - raise stem.ProtocolError("The %s value should be quoted, but didn't have an ending quote: %s" % (attr_name, self)) - - attr_values.append(positional.pop(0)) - - if attr_values[-1].endswith('"'): - break - - attr_value = ' '.join(attr_values)[1:-1] - else: - attr_value = positional.pop(0) - - setattr(self, attr_name, attr_value) - - for controller_attr_name, attr_name in self._KEYWORD_ARGS.items(): - setattr(self, attr_name, self.keyword_args.get(controller_attr_name)) - - def _iso_timestamp(self, timestamp): - """ - Parses an iso timestamp (ISOTime2Frac in the control-spec). - - :param str timestamp: timestamp to parse - - :returns: **datetime** with the parsed timestamp - - :raises: :class:`stem.ProtocolError` if timestamp is malformed - """ - - if timestamp is None: - return None - - try: - return str_tools._parse_iso_timestamp(timestamp) - except ValueError as exc: - raise stem.ProtocolError('Unable to parse timestamp (%s): %s' % (exc, self)) - - # method overwritten by our subclasses for special handling that they do - def _parse(self): - pass - - def _log_if_unrecognized(self, attr, attr_enum): - """ - Checks if an attribute exists in a given enumeration, logging a message if - it isn't. Attributes can either be for a string or collection of strings - - :param str attr: name of the attribute to check - :param stem.util.enum.Enum enum: enumeration to check against - """ - - attr_values = getattr(self, attr) - - if attr_values: - if stem.util._is_str(attr_values): - attr_values = [attr_values] - - for value in attr_values: - if value not in attr_enum: - log_id = 'event.%s.unknown_%s.%s' % (self.type.lower(), attr, value) - unrecognized_msg = "%s event had an unrecognized %s (%s). Maybe a new addition to the control protocol? Full Event: '%s'" % (self.type, attr, value, self) - log.log_once(log_id, log.INFO, unrecognized_msg) - - -class AddrMapEvent(Event): - """ - Event that indicates a new address mapping. - - The ADDRMAP event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. - - .. versionchanged:: 1.1.0 - Added the cached attribute. - - :var str hostname: address being resolved - :var str destination: destination of the resolution, this is usually an ip, - but could be a hostname if TrackHostExits is enabled or **NONE** if the - resolution failed - :var datetime expiry: expiration time of the resolution in local time - :var str error: error code if the resolution failed - :var datetime utc_expiry: expiration time of the resolution in UTC - :var bool cached: **True** if the resolution will be kept until it expires, - **False** otherwise or **None** if undefined - """ - - _POSITIONAL_ARGS = ('hostname', 'destination', 'expiry') - _KEYWORD_ARGS = { - 'error': 'error', - 'EXPIRES': 'utc_expiry', - 'CACHED': 'cached', - } - _OPTIONALLY_QUOTED = ('expiry') - - def _parse(self): - if self.destination == '': - self.destination = None - - if self.expiry is not None: - if self.expiry == 'NEVER': - self.expiry = None - else: - try: - self.expiry = stem.util.str_tools._parse_timestamp(self.expiry) - except ValueError: - raise stem.ProtocolError('Unable to parse date in ADDRMAP event: %s' % self) - - if self.utc_expiry is not None: - self.utc_expiry = stem.util.str_tools._parse_timestamp(self.utc_expiry) - - if self.cached is not None: - if self.cached == 'YES': - self.cached = True - elif self.cached == 'NO': - self.cached = False - else: - raise stem.ProtocolError("An ADDRMAP event's CACHED mapping can only be 'YES' or 'NO': %s" % self) - - -class AuthDirNewDescEvent(Event): - """ - Event specific to directory authorities, indicating that we just received new - descriptors. The descriptor type contained within this event is unspecified - so the descriptor contents are left unparsed. - - The AUTHDIR_NEWDESCS event was introduced in tor version 0.1.1.10-alpha and - removed in 0.3.2.1-alpha. (:spec:`6e887ba`) - - .. deprecated:: 1.6.0 - Tor dropped this event as of version 0.3.2.1. (:spec:`6e887ba`) - - :var stem.AuthDescriptorAction action: what is being done with the descriptor - :var str message: explanation of why we chose this action - :var str descriptor: content of the descriptor - """ - - _SKIP_PARSING = True - _VERSION_ADDED = stem.version.Requirement.EVENT_AUTHDIR_NEWDESCS - - def _parse(self): - lines = str(self).split('\n') - - if len(lines) < 5: - raise stem.ProtocolError("AUTHDIR_NEWDESCS events must contain lines for at least the type, action, message, descriptor, and terminating 'OK'") - elif lines[-1] != 'OK': - raise stem.ProtocolError("AUTHDIR_NEWDESCS doesn't end with an 'OK'") - - # TODO: For stem 2.0.0 we should consider changing 'descriptor' to a - # ServerDescriptor instance. - - self.action = lines[1] - self.message = lines[2] - self.descriptor = '\n'.join(lines[3:-1]) - - -class BandwidthEvent(Event): - """ - Event emitted every second with the bytes sent and received by tor. - - The BW event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. - - :var int read: bytes received by tor that second - :var int written: bytes sent by tor that second - """ - - _POSITIONAL_ARGS = ('read', 'written') - - def _parse(self): - if not self.read: - raise stem.ProtocolError('BW event is missing its read value') - elif not self.written: - raise stem.ProtocolError('BW event is missing its written value') - elif not self.read.isdigit() or not self.written.isdigit(): - raise stem.ProtocolError("A BW event's bytes sent and received should be a positive numeric value, received: %s" % self) - - self.read = INT_TYPE(self.read) - self.written = INT_TYPE(self.written) - - -class BuildTimeoutSetEvent(Event): - """ - Event indicating that the timeout value for a circuit has changed. This was - first added in tor version 0.2.2.7. - - The BUILDTIMEOUT_SET event was introduced in tor version 0.2.2.7-alpha. - - :var stem.TimeoutSetType set_type: way in which the timeout is changing - :var int total_times: circuit build times tor used to determine the timeout - :var int timeout: circuit timeout value in milliseconds - :var int xm: Pareto parameter Xm in milliseconds - :var float alpha: Pareto parameter alpha - :var float quantile: CDF quantile cutoff point - :var float timeout_rate: ratio of circuits that have time out - :var int close_timeout: duration to keep measurement circuits in milliseconds - :var float close_rate: ratio of measurement circuits that are closed - """ - - _POSITIONAL_ARGS = ('set_type',) - _KEYWORD_ARGS = { - 'TOTAL_TIMES': 'total_times', - 'TIMEOUT_MS': 'timeout', - 'XM': 'xm', - 'ALPHA': 'alpha', - 'CUTOFF_QUANTILE': 'quantile', - 'TIMEOUT_RATE': 'timeout_rate', - 'CLOSE_MS': 'close_timeout', - 'CLOSE_RATE': 'close_rate', - } - _VERSION_ADDED = stem.version.Requirement.EVENT_BUILDTIMEOUT_SET - - def _parse(self): - # convert our integer and float parameters - - for param in ('total_times', 'timeout', 'xm', 'close_timeout'): - param_value = getattr(self, param) - - if param_value is not None: - try: - setattr(self, param, int(param_value)) - except ValueError: - raise stem.ProtocolError('The %s of a BUILDTIMEOUT_SET should be an integer: %s' % (param, self)) - - for param in ('alpha', 'quantile', 'timeout_rate', 'close_rate'): - param_value = getattr(self, param) - - if param_value is not None: - try: - setattr(self, param, float(param_value)) - except ValueError: - raise stem.ProtocolError('The %s of a BUILDTIMEOUT_SET should be a float: %s' % (param, self)) - - self._log_if_unrecognized('set_type', stem.TimeoutSetType) - - -class CircuitEvent(Event): - """ - Event that indicates that a circuit has changed. - - The fingerprint or nickname values in our 'path' may be **None** if the - VERBOSE_NAMES feature isn't enabled. The option was first introduced in tor - version 0.1.2.2, and on by default after 0.2.2.1. - - The CIRC event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. - - .. versionchanged:: 1.4.0 - Added the socks_username and socks_password attributes which is used for - `stream isolation - `_. - - :var str id: circuit identifier - :var stem.CircStatus status: reported status for the circuit - :var tuple path: relays involved in the circuit, these are - **(fingerprint, nickname)** tuples - :var tuple build_flags: :data:`~stem.CircBuildFlag` attributes - governing how the circuit is built - :var stem.CircPurpose purpose: purpose that the circuit is intended for - :var stem.HiddenServiceState hs_state: status if this is a hidden service circuit - :var str rend_query: circuit's rendezvous-point if this is hidden service related - :var datetime created: time when the circuit was created or cannibalized - :var stem.CircClosureReason reason: reason for the circuit to be closed - :var stem.CircClosureReason remote_reason: remote side's reason for the circuit to be closed - :var str socks_username: username for using this circuit - :var str socks_password: password for using this circuit - """ - - _POSITIONAL_ARGS = ('id', 'status', 'path') - _KEYWORD_ARGS = { - 'BUILD_FLAGS': 'build_flags', - 'PURPOSE': 'purpose', - 'HS_STATE': 'hs_state', - 'REND_QUERY': 'rend_query', - 'TIME_CREATED': 'created', - 'REASON': 'reason', - 'REMOTE_REASON': 'remote_reason', - 'SOCKS_USERNAME': 'socks_username', - 'SOCKS_PASSWORD': 'socks_password', - } - - def _parse(self): - self.path = tuple(stem.control._parse_circ_path(self.path)) - self.created = self._iso_timestamp(self.created) - - if self.build_flags is not None: - self.build_flags = tuple(self.build_flags.split(',')) - - if not tor_tools.is_valid_circuit_id(self.id): - raise stem.ProtocolError("Circuit IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - - self._log_if_unrecognized('status', stem.CircStatus) - self._log_if_unrecognized('build_flags', stem.CircBuildFlag) - self._log_if_unrecognized('purpose', stem.CircPurpose) - self._log_if_unrecognized('hs_state', stem.HiddenServiceState) - self._log_if_unrecognized('reason', stem.CircClosureReason) - self._log_if_unrecognized('remote_reason', stem.CircClosureReason) - - def _compare(self, other, method): - # sorting circuit events by their identifier - - if not isinstance(other, CircuitEvent): - return False - - my_id = getattr(self, 'id') - their_id = getattr(other, 'id') - - return method(my_id, their_id) if my_id != their_id else method(hash(self), hash(other)) - - def __gt__(self, other): - return self._compare(other, lambda s, o: s > o) - - def __ge__(self, other): - return self._compare(other, lambda s, o: s >= o) - - -class CircMinorEvent(Event): - """ - Event providing information about minor changes in our circuits. This was - first added in tor version 0.2.3.11. - - The CIRC_MINOR event was introduced in tor version 0.2.3.11-alpha. - - :var str id: circuit identifier - :var stem.CircEvent event: type of change in the circuit - :var tuple path: relays involved in the circuit, these are - **(fingerprint, nickname)** tuples - :var tuple build_flags: :data:`~stem.CircBuildFlag` attributes - governing how the circuit is built - :var stem.CircPurpose purpose: purpose that the circuit is intended for - :var stem.HiddenServiceState hs_state: status if this is a hidden service circuit - :var str rend_query: circuit's rendezvous-point if this is hidden service related - :var datetime created: time when the circuit was created or cannibalized - :var stem.CircPurpose old_purpose: prior purpose for the circuit - :var stem.HiddenServiceState old_hs_state: prior status as a hidden service circuit - """ - - _POSITIONAL_ARGS = ('id', 'event', 'path') - _KEYWORD_ARGS = { - 'BUILD_FLAGS': 'build_flags', - 'PURPOSE': 'purpose', - 'HS_STATE': 'hs_state', - 'REND_QUERY': 'rend_query', - 'TIME_CREATED': 'created', - 'OLD_PURPOSE': 'old_purpose', - 'OLD_HS_STATE': 'old_hs_state', - } - _VERSION_ADDED = stem.version.Requirement.EVENT_CIRC_MINOR - - def _parse(self): - self.path = tuple(stem.control._parse_circ_path(self.path)) - self.created = self._iso_timestamp(self.created) - - if self.build_flags is not None: - self.build_flags = tuple(self.build_flags.split(',')) - - if not tor_tools.is_valid_circuit_id(self.id): - raise stem.ProtocolError("Circuit IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - - self._log_if_unrecognized('event', stem.CircEvent) - self._log_if_unrecognized('build_flags', stem.CircBuildFlag) - self._log_if_unrecognized('purpose', stem.CircPurpose) - self._log_if_unrecognized('hs_state', stem.HiddenServiceState) - self._log_if_unrecognized('old_purpose', stem.CircPurpose) - self._log_if_unrecognized('old_hs_state', stem.HiddenServiceState) - - -class ClientsSeenEvent(Event): - """ - Periodic event on bridge relays that provides a summary of our users. - - The CLIENTS_SEEN event was introduced in tor version 0.2.1.10-alpha. - - :var datetime start_time: time in UTC that we started collecting these stats - :var dict locales: mapping of country codes to a rounded count for the number of users - :var dict ip_versions: mapping of ip protocols to a rounded count for the number of users - """ - - _KEYWORD_ARGS = { - 'TimeStarted': 'start_time', - 'CountrySummary': 'locales', - 'IPVersions': 'ip_versions', - } - _VERSION_ADDED = stem.version.Requirement.EVENT_CLIENTS_SEEN - - def _parse(self): - if self.start_time is not None: - self.start_time = stem.util.str_tools._parse_timestamp(self.start_time) - - if self.locales is not None: - locale_to_count = {} - - for entry in self.locales.split(','): - if '=' not in entry: - raise stem.ProtocolError("The CLIENTS_SEEN's CountrySummary should be a comma separated listing of '=' mappings: %s" % self) - - locale, count = entry.split('=', 1) - - if len(locale) != 2: - raise stem.ProtocolError("Locales should be a two character code, got '%s': %s" % (locale, self)) - elif not count.isdigit(): - raise stem.ProtocolError('Locale count was non-numeric (%s): %s' % (count, self)) - elif locale in locale_to_count: - raise stem.ProtocolError("CountrySummary had multiple mappings for '%s': %s" % (locale, self)) - - locale_to_count[locale] = int(count) - - self.locales = locale_to_count - - if self.ip_versions is not None: - protocol_to_count = {} - - for entry in self.ip_versions.split(','): - if '=' not in entry: - raise stem.ProtocolError("The CLIENTS_SEEN's IPVersions should be a comma separated listing of '=' mappings: %s" % self) - - protocol, count = entry.split('=', 1) - - if not count.isdigit(): - raise stem.ProtocolError('IP protocol count was non-numeric (%s): %s' % (count, self)) - - protocol_to_count[protocol] = int(count) - - self.ip_versions = protocol_to_count - - -class ConfChangedEvent(Event): - """ - Event that indicates that our configuration changed, either in response to a - SETCONF or RELOAD signal. - - The CONF_CHANGED event was introduced in tor version 0.2.3.3-alpha. - - .. deprecated:: 1.7.0 - Deprecated the *config* attribute. Some tor configuration options (like - ExitPolicy) can have multiple values, so a simple 'str => str' mapping - meant that we only provided the last. - - .. versionchanged:: 1.7.0 - Added the changed and unset attributes. - - :var dict changed: mapping of configuration options to a list of their new - values - :var list unset: configuration options that have been unset - """ - - _SKIP_PARSING = True - _VERSION_ADDED = stem.version.Requirement.EVENT_CONF_CHANGED - - def _parse(self): - self.changed = {} - self.unset = [] - self.config = {} # TODO: remove in stem 2.0 - - # Skip first and last line since they're the header and footer. For - # instance... - # - # 650-CONF_CHANGED - # 650-ExitNodes=caerSidi - # 650-ExitPolicy - # 650-MaxCircuitDirtiness=20 - # 650 OK - - for line in str(self).splitlines()[1:-1]: - if '=' in line: - key, value = line.split('=', 1) - self.changed.setdefault(key, []).append(value) - else: - key, value = line, None - self.unset.append(key) - - self.config[key] = value - - -class DescChangedEvent(Event): - """ - Event that indicates that our descriptor has changed. - - The DESCCHANGED event was introduced in tor version 0.1.2.2-alpha. - """ - - _VERSION_ADDED = stem.version.Requirement.EVENT_DESCCHANGED - - -class GuardEvent(Event): - """ - Event that indicates that our guard relays have changed. The 'endpoint' could - be either a... - - * fingerprint - * 'fingerprint=nickname' pair - - The derived 'endpoint_*' attributes are generally more useful. - - The GUARD event was introduced in tor version 0.1.2.5-alpha. - - :var stem.GuardType guard_type: purpose the guard relay is for - :var str endpoint: relay that the event concerns - :var str endpoint_fingerprint: endpoint's finterprint - :var str endpoint_nickname: endpoint's nickname if it was provided - :var stem.GuardStatus status: status of the guard relay - """ - - _VERSION_ADDED = stem.version.Requirement.EVENT_GUARD - _POSITIONAL_ARGS = ('guard_type', 'endpoint', 'status') - - def _parse(self): - self.endpoint_fingerprint = None - self.endpoint_nickname = None - - try: - self.endpoint_fingerprint, self.endpoint_nickname = \ - stem.control._parse_circ_entry(self.endpoint) - except stem.ProtocolError: - raise stem.ProtocolError("GUARD's endpoint doesn't match a ServerSpec: %s" % self) - - self._log_if_unrecognized('guard_type', stem.GuardType) - self._log_if_unrecognized('status', stem.GuardStatus) - - -class HSDescEvent(Event): - """ - Event triggered when we fetch a hidden service descriptor that currently isn't in our cache. - - The HS_DESC event was introduced in tor version 0.2.5.2-alpha. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.3.0 - Added the reason attribute. - - .. versionchanged:: 1.5.0 - Added the replica attribute. - - .. versionchanged:: 1.7.0 - Added the index attribute. - - :var stem.HSDescAction action: what is happening with the descriptor - :var str address: hidden service address - :var stem.HSAuth authentication: service's authentication method - :var str directory: hidden service directory servicing the request - :var str directory_fingerprint: hidden service directory's finterprint - :var str directory_nickname: hidden service directory's nickname if it was provided - :var str descriptor_id: descriptor identifier - :var stem.HSDescReason reason: reason the descriptor failed to be fetched - :var int replica: replica number the descriptor involves - :var str index: computed index of the HSDir the descriptor was uploaded to or fetched from - """ - - _VERSION_ADDED = stem.version.Requirement.EVENT_HS_DESC - _POSITIONAL_ARGS = ('action', 'address', 'authentication', 'directory', 'descriptor_id') - _KEYWORD_ARGS = {'REASON': 'reason', 'REPLICA': 'replica', 'HSDIR_INDEX': 'index'} - - def _parse(self): - self.directory_fingerprint = None - self.directory_nickname = None - - if self.directory != 'UNKNOWN': - try: - self.directory_fingerprint, self.directory_nickname = \ - stem.control._parse_circ_entry(self.directory) - except stem.ProtocolError: - raise stem.ProtocolError("HS_DESC's directory doesn't match a ServerSpec: %s" % self) - - if self.replica is not None: - if not self.replica.isdigit(): - raise stem.ProtocolError('HS_DESC event got a non-numeric replica count (%s): %s' % (self.replica, self)) - - self.replica = int(self.replica) - - self._log_if_unrecognized('action', stem.HSDescAction) - self._log_if_unrecognized('authentication', stem.HSAuth) - - -class HSDescContentEvent(Event): - """ - Provides the content of hidden service descriptors we fetch. - - The HS_DESC_CONTENT event was introduced in tor version 0.2.7.1-alpha. - - .. versionadded:: 1.4.0 - - :var str address: hidden service address - :var str descriptor_id: descriptor identifier - :var str directory: hidden service directory servicing the request - :var str directory_fingerprint: hidden service directory's finterprint - :var str directory_nickname: hidden service directory's nickname if it was provided - :var stem.descriptor.hidden_service.HiddenServiceDescriptorV2 descriptor: descriptor that was retrieved - """ - - _VERSION_ADDED = stem.version.Requirement.EVENT_HS_DESC_CONTENT - _POSITIONAL_ARGS = ('address', 'descriptor_id', 'directory') - - def _parse(self): - if self.address == 'UNKNOWN': - self.address = None - - self.directory_fingerprint = None - self.directory_nickname = None - - try: - self.directory_fingerprint, self.directory_nickname = \ - stem.control._parse_circ_entry(self.directory) - except stem.ProtocolError: - raise stem.ProtocolError("HS_DESC_CONTENT's directory doesn't match a ServerSpec: %s" % self) - - # skip the first line (our positional arguments) and last ('OK') - - desc_content = str_tools._to_bytes('\n'.join(str(self).splitlines()[1:-1])) - self.descriptor = None - - if desc_content: - self.descriptor = list(stem.descriptor.hidden_service._parse_file(io.BytesIO(desc_content)))[0] - - -class LogEvent(Event): - """ - Tor logging event. These are the most visible kind of event since, by - default, tor logs at the NOTICE :data:`~stem.Runlevel` to stdout. - - The logging events were some of the first Control Protocol V1 events - and were introduced in tor version 0.1.1.1-alpha. - - :var stem.Runlevel runlevel: runlevel of the logged message - :var str message: logged message - """ - - _SKIP_PARSING = True - - def _parse(self): - self.runlevel = self.type - self._log_if_unrecognized('runlevel', stem.Runlevel) - - # message is our content, minus the runlevel and ending "OK" if a - # multi-line message - - self.message = str(self)[len(self.runlevel) + 1:].rstrip('\nOK') - - -class NetworkStatusEvent(Event): - """ - Event for when our copy of the consensus has changed. This was introduced in - tor version 0.1.2.3. - - The NS event was introduced in tor version 0.1.2.3-alpha. - - :var list desc: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` for the changed descriptors - """ - - _SKIP_PARSING = True - _VERSION_ADDED = stem.version.Requirement.EVENT_NS - - def _parse(self): - content = str(self).lstrip('NS\n').rstrip('\nOK') - - # TODO: For stem 2.0.0 consider changing 'desc' to 'descriptors' to match - # our other events. - - self.desc = list(stem.descriptor.router_status_entry._parse_file( - io.BytesIO(str_tools._to_bytes(content)), - False, - entry_class = stem.descriptor.router_status_entry.RouterStatusEntryV3, - )) - - -class NetworkLivenessEvent(Event): - """ - Event for when the network becomes reachable or unreachable. - - The NETWORK_LIVENESS event was introduced in tor version 0.2.7.2-alpha. - - .. versionadded:: 1.5.0 - - :var str status: status of the network ('UP', 'DOWN', or possibly other - statuses in the future) - """ - - _VERSION_ADDED = stem.version.Requirement.EVENT_NETWORK_LIVENESS - _POSITIONAL_ARGS = ('status',) - - -class NewConsensusEvent(Event): - """ - Event for when we have a new consensus. This is similar to - :class:`~stem.response.events.NetworkStatusEvent`, except that it contains - the whole consensus so anything not listed is implicitly no longer - recommended. - - The NEWCONSENSUS event was introduced in tor version 0.2.1.13-alpha. - - .. versionchanged:: 1.6.0 - Added the consensus_content attribute. - - .. deprecated:: 1.6.0 - In Stem 2.0 we'll remove the desc attribute, so this event only provides - the unparsed consensus. Callers can then parse it if they'd like. To drop - parsing before then you can set... - - :: - - stem.response.events.PARSE_NEWCONSENSUS_EVENTS = False - - :var str consensus_content: consensus content - :var list desc: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` for the changed descriptors - """ - - _SKIP_PARSING = True - _VERSION_ADDED = stem.version.Requirement.EVENT_NEWCONSENSUS - - def _parse(self): - self.consensus_content = str(self).lstrip('NEWCONSENSUS\n').rstrip('\nOK') - - # TODO: For stem 2.0.0 consider changing 'desc' to 'descriptors' to match - # our other events. - - if PARSE_NEWCONSENSUS_EVENTS: - self.desc = list(stem.descriptor.router_status_entry._parse_file( - io.BytesIO(str_tools._to_bytes(self.consensus_content)), - False, - entry_class = stem.descriptor.router_status_entry.RouterStatusEntryV3, - )) - else: - self.desc = None - - -class NewDescEvent(Event): - """ - Event that indicates that a new descriptor is available. - - The fingerprint or nickname values in our 'relays' may be **None** if the - VERBOSE_NAMES feature isn't enabled. The option was first introduced in tor - version 0.1.2.2, and on by default after 0.2.2.1. - - The NEWDESC event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. - - :var tuple relays: **(fingerprint, nickname)** tuples for the relays with - new descriptors - """ - - def _parse(self): - self.relays = tuple([stem.control._parse_circ_entry(entry) for entry in str(self).split()[1:]]) - - -class ORConnEvent(Event): - """ - Event that indicates a change in a relay connection. The 'endpoint' could be - any of several things including a... - - * fingerprint - * nickname - * 'fingerprint=nickname' pair - * address:port - - The derived 'endpoint_*' attributes are generally more useful. - - The ORCONN event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. Its id attribute was added in - version 0.2.5.2-alpha. - - .. versionchanged:: 1.2.0 - Added the id attribute. - - :var str id: connection identifier - :var str endpoint: relay that the event concerns - :var str endpoint_fingerprint: endpoint's finterprint if it was provided - :var str endpoint_nickname: endpoint's nickname if it was provided - :var str endpoint_address: endpoint's address if it was provided - :var int endpoint_port: endpoint's port if it was provided - :var stem.ORStatus status: state of the connection - :var stem.ORClosureReason reason: reason for the connection to be closed - :var int circ_count: number of established and pending circuits - """ - - _POSITIONAL_ARGS = ('endpoint', 'status') - _KEYWORD_ARGS = { - 'REASON': 'reason', - 'NCIRCS': 'circ_count', - 'ID': 'id', - } - - def _parse(self): - self.endpoint_fingerprint = None - self.endpoint_nickname = None - self.endpoint_address = None - self.endpoint_port = None - - try: - self.endpoint_fingerprint, self.endpoint_nickname = \ - stem.control._parse_circ_entry(self.endpoint) - except stem.ProtocolError: - if ':' not in self.endpoint: - raise stem.ProtocolError("ORCONN endpoint is neither a relay nor 'address:port': %s" % self) - - address, port = self.endpoint.rsplit(':', 1) - - if not connection.is_valid_port(port): - raise stem.ProtocolError("ORCONN's endpoint location's port is invalid: %s" % self) - - self.endpoint_address = address - self.endpoint_port = int(port) - - if self.circ_count is not None: - if not self.circ_count.isdigit(): - raise stem.ProtocolError('ORCONN event got a non-numeric circuit count (%s): %s' % (self.circ_count, self)) - - self.circ_count = int(self.circ_count) - - if self.id and not tor_tools.is_valid_connection_id(self.id): - raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - - self._log_if_unrecognized('status', stem.ORStatus) - self._log_if_unrecognized('reason', stem.ORClosureReason) - - -class SignalEvent(Event): - """ - Event that indicates that tor has received and acted upon a signal being sent - to the process. As of tor version 0.2.4.6 the only signals conveyed by this - event are... - - * RELOAD - * DUMP - * DEBUG - * NEWNYM - * CLEARDNSCACHE - - The SIGNAL event was introduced in tor version 0.2.3.1-alpha. - - :var stem.Signal signal: signal that tor received - """ - - _POSITIONAL_ARGS = ('signal',) - _VERSION_ADDED = stem.version.Requirement.EVENT_SIGNAL - - def _parse(self): - # log if we recieved an unrecognized signal - expected_signals = ( - stem.Signal.RELOAD, - stem.Signal.DUMP, - stem.Signal.DEBUG, - stem.Signal.NEWNYM, - stem.Signal.CLEARDNSCACHE, - ) - - self._log_if_unrecognized('signal', expected_signals) - - -class StatusEvent(Event): - """ - Notification of a change in tor's state. These are generally triggered for - the same sort of things as log messages of the NOTICE level or higher. - However, unlike :class:`~stem.response.events.LogEvent` these contain well - formed data. - - The STATUS_GENERAL, STATUS_CLIENT, STATUS_SERVER events were introduced - in tor version 0.1.2.3-alpha. - - :var stem.StatusType status_type: category of the status event - :var stem.Runlevel runlevel: runlevel of the logged message - :var str action: activity that caused this message - :var dict arguments: attributes about the event - """ - - _POSITIONAL_ARGS = ('runlevel', 'action') - _VERSION_ADDED = stem.version.Requirement.EVENT_STATUS - - def _parse(self): - if self.type == 'STATUS_GENERAL': - self.status_type = stem.StatusType.GENERAL - elif self.type == 'STATUS_CLIENT': - self.status_type = stem.StatusType.CLIENT - elif self.type == 'STATUS_SERVER': - self.status_type = stem.StatusType.SERVER - else: - raise ValueError("BUG: Unrecognized status type (%s), likely an EVENT_TYPE_TO_CLASS addition without revising how 'status_type' is assigned." % self.type) - - # Just an alias for our parent class' keyword_args since that already - # parses these for us. Unlike our other event types Tor commonly supplies - # arbitrary key/value pairs for these, so making an alias here to better - # draw attention that the StatusEvent will likely have them. - - self.arguments = self.keyword_args - - self._log_if_unrecognized('runlevel', stem.Runlevel) - - -class StreamEvent(Event): - """ - Event that indicates that a stream has changed. - - The STREAM event was one of the first Control Protocol V1 events and was - introduced in tor version 0.1.1.1-alpha. - - :var str id: stream identifier - :var stem.StreamStatus status: reported status for the stream - :var str circ_id: circuit that the stream is attached to, this is **None** of - the stream is unattached - :var str target: destination of the stream - :var str target_address: destination address (ip, hostname, or '(Tor_internal)') - :var int target_port: destination port - :var stem.StreamClosureReason reason: reason for the stream to be closed - :var stem.StreamClosureReason remote_reason: remote side's reason for the stream to be closed - :var stem.StreamSource source: origin of the REMAP request - :var str source_addr: requester of the connection - :var str source_address: requester address (ip or hostname) - :var int source_port: requester port - :var stem.StreamPurpose purpose: purpose for the stream - """ - - _POSITIONAL_ARGS = ('id', 'status', 'circ_id', 'target') - _KEYWORD_ARGS = { - 'REASON': 'reason', - 'REMOTE_REASON': 'remote_reason', - 'SOURCE': 'source', - 'SOURCE_ADDR': 'source_addr', - 'PURPOSE': 'purpose', - } - - def _parse(self): - if self.target is None: - raise stem.ProtocolError("STREAM event didn't have a target: %s" % self) - else: - if ':' not in self.target: - raise stem.ProtocolError("Target location must be of the form 'address:port': %s" % self) - - address, port = self.target.rsplit(':', 1) - - if not connection.is_valid_port(port, allow_zero = True): - raise stem.ProtocolError("Target location's port is invalid: %s" % self) - - self.target_address = address - self.target_port = int(port) - - if self.source_addr is None: - self.source_address = None - self.source_port = None - else: - if ':' not in self.source_addr: - raise stem.ProtocolError("Source location must be of the form 'address:port': %s" % self) - - address, port = self.source_addr.rsplit(':', 1) - - if not connection.is_valid_port(port, allow_zero = True): - raise stem.ProtocolError("Source location's port is invalid: %s" % self) - - self.source_address = address - self.source_port = int(port) - - # spec specifies a circ_id of zero if the stream is unattached - - if self.circ_id == '0': - self.circ_id = None - - self._log_if_unrecognized('reason', stem.StreamClosureReason) - self._log_if_unrecognized('remote_reason', stem.StreamClosureReason) - self._log_if_unrecognized('purpose', stem.StreamPurpose) - - -class StreamBwEvent(Event): - """ - Event (emitted approximately every second) with the bytes sent and received - by the application since the last such event on this stream. - - The STREAM_BW event was introduced in tor version 0.1.2.8-beta. - - .. versionchanged:: 1.6.0 - Added the time attribute. - - :var str id: stream identifier - :var int written: bytes sent by the application - :var int read: bytes received by the application - :var datetime time: time when the measurement was recorded - """ - - _POSITIONAL_ARGS = ('id', 'written', 'read', 'time') - _VERSION_ADDED = stem.version.Requirement.EVENT_STREAM_BW - - def _parse(self): - if not tor_tools.is_valid_stream_id(self.id): - raise stem.ProtocolError("Stream IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - elif not self.written: - raise stem.ProtocolError('STREAM_BW event is missing its written value') - elif not self.read: - raise stem.ProtocolError('STREAM_BW event is missing its read value') - elif not self.read.isdigit() or not self.written.isdigit(): - raise stem.ProtocolError("A STREAM_BW event's bytes sent and received should be a positive numeric value, received: %s" % self) - - self.read = INT_TYPE(self.read) - self.written = INT_TYPE(self.written) - self.time = self._iso_timestamp(self.time) - - -class TransportLaunchedEvent(Event): - """ - Event triggered when a pluggable transport is launched. - - The TRANSPORT_LAUNCHED event was introduced in tor version 0.2.5.0-alpha. - - .. versionadded:: 1.1.0 - - :var str type: 'server' or 'client' - :var str name: name of the pluggable transport - :var str address: IPv4 or IPv6 address where the transport is listening for - connections - :var int port: port where the transport is listening for connections - """ - - _POSITIONAL_ARGS = ('type', 'name', 'address', 'port') - _VERSION_ADDED = stem.version.Requirement.EVENT_TRANSPORT_LAUNCHED - - def _parse(self): - if self.type not in ('server', 'client'): - raise stem.ProtocolError("Transport type should either be 'server' or 'client': %s" % self) - - if not connection.is_valid_ipv4_address(self.address) and \ - not connection.is_valid_ipv6_address(self.address): - raise stem.ProtocolError("Transport address isn't a valid IPv4 or IPv6 address: %s" % self) - - if not connection.is_valid_port(self.port): - raise stem.ProtocolError('Transport port is invalid: %s' % self) - - self.port = int(self.port) - - -class ConnectionBandwidthEvent(Event): - """ - Event emitted every second with the bytes sent and received by tor on a - per-connection basis. - - The CONN_BW event was introduced in tor version 0.2.5.2-alpha. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.6.0 - Renamed 'type' attribute to 'conn_type' so it wouldn't be override parent - class attribute with the same name. - - :var str id: connection identifier - :var stem.ConnectionType conn_type: connection type - :var int read: bytes received by tor that second - :var int written: bytes sent by tor that second - """ - - _KEYWORD_ARGS = { - 'ID': 'id', - 'TYPE': 'conn_type', - 'READ': 'read', - 'WRITTEN': 'written', - } - - _VERSION_ADDED = stem.version.Requirement.EVENT_CONN_BW - - def _parse(self): - if not self.id: - raise stem.ProtocolError('CONN_BW event is missing its id') - elif not self.conn_type: - raise stem.ProtocolError('CONN_BW event is missing its connection type') - elif not self.read: - raise stem.ProtocolError('CONN_BW event is missing its read value') - elif not self.written: - raise stem.ProtocolError('CONN_BW event is missing its written value') - elif not self.read.isdigit() or not self.written.isdigit(): - raise stem.ProtocolError("A CONN_BW event's bytes sent and received should be a positive numeric value, received: %s" % self) - elif not tor_tools.is_valid_connection_id(self.id): - raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - - self.read = INT_TYPE(self.read) - self.written = INT_TYPE(self.written) - - self._log_if_unrecognized('conn_type', stem.ConnectionType) - - -class CircuitBandwidthEvent(Event): - """ - Event emitted every second with the bytes sent and received by tor on a - per-circuit basis. - - The CIRC_BW event was introduced in tor version 0.2.5.2-alpha. - - .. versionadded:: 1.2.0 - - .. versionchanged:: 1.6.0 - Added the time attribute. - - .. versionchanged:: 1.7.0 - Added the delivered_read, delivered_written, overhead_read, and - overhead_written attributes. - - :var str id: circuit identifier - :var int read: bytes received by tor that second - :var int written: bytes sent by tor that second - :var int delivered_read: user payload received by tor that second - :var int delivered_written: user payload sent by tor that second - :var int overhead_read: padding so read cells will have a fixed length - :var int overhead_written: padding so written cells will have a fixed length - :var datetime time: time when the measurement was recorded - """ - - _KEYWORD_ARGS = { - 'ID': 'id', - 'READ': 'read', - 'WRITTEN': 'written', - 'DELIVERED_READ': 'delivered_read', - 'DELIVERED_WRITTEN': 'delivered_written', - 'OVERHEAD_READ': 'overhead_read', - 'OVERHEAD_WRITTEN': 'overhead_written', - 'TIME': 'time', - } - - _VERSION_ADDED = stem.version.Requirement.EVENT_CIRC_BW - - def _parse(self): - if not self.id: - raise stem.ProtocolError('CIRC_BW event is missing its id') - elif not self.read: - raise stem.ProtocolError('CIRC_BW event is missing its read value') - elif not self.written: - raise stem.ProtocolError('CIRC_BW event is missing its written value') - elif not self.read.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's bytes received should be a positive numeric value, received: %s" % self) - elif not self.written.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's bytes sent should be a positive numeric value, received: %s" % self) - elif self.delivered_read and not self.delivered_read.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's delivered bytes received should be a positive numeric value, received: %s" % self) - elif self.delivered_written and not self.delivered_written.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's delivered bytes sent should be a positive numeric value, received: %s" % self) - elif self.overhead_read and not self.overhead_read.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's overhead bytes received should be a positive numeric value, received: %s" % self) - elif self.overhead_written and not self.overhead_written.isdigit(): - raise stem.ProtocolError("A CIRC_BW event's overhead bytes sent should be a positive numeric value, received: %s" % self) - elif not tor_tools.is_valid_circuit_id(self.id): - raise stem.ProtocolError("Circuit IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - - self.time = self._iso_timestamp(self.time) - - for attr in ('read', 'written', 'delivered_read', 'delivered_written', 'overhead_read', 'overhead_written'): - value = getattr(self, attr) - - if value: - setattr(self, attr, INT_TYPE(value)) - - -class CellStatsEvent(Event): - """ - Event emitted every second with a count of the number of cells types broken - down by the circuit. **These events are only emitted if TestingTorNetwork is - set.** - - The CELL_STATS event was introduced in tor version 0.2.5.2-alpha. - - .. versionadded:: 1.2.0 - - :var str id: circuit identifier - :var str inbound_queue: inbound queue identifier - :var str inbound_connection: inbound connection identifier - :var dict inbound_added: mapping of added inbound cell types to their count - :var dict inbound_removed: mapping of removed inbound cell types to their count - :var dict inbound_time: mapping of inbound cell types to the time they took to write in milliseconds - :var str outbound_queue: outbound queue identifier - :var str outbound_connection: outbound connection identifier - :var dict outbound_added: mapping of added outbound cell types to their count - :var dict outbound_removed: mapping of removed outbound cell types to their count - :var dict outbound_time: mapping of outbound cell types to the time they took to write in milliseconds - """ - - _KEYWORD_ARGS = { - 'ID': 'id', - 'InboundQueue': 'inbound_queue', - 'InboundConn': 'inbound_connection', - 'InboundAdded': 'inbound_added', - 'InboundRemoved': 'inbound_removed', - 'InboundTime': 'inbound_time', - 'OutboundQueue': 'outbound_queue', - 'OutboundConn': 'outbound_connection', - 'OutboundAdded': 'outbound_added', - 'OutboundRemoved': 'outbound_removed', - 'OutboundTime': 'outbound_time', - } - - _VERSION_ADDED = stem.version.Requirement.EVENT_CELL_STATS - - def _parse(self): - if self.id and not tor_tools.is_valid_circuit_id(self.id): - raise stem.ProtocolError("Circuit IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - elif self.inbound_queue and not tor_tools.is_valid_circuit_id(self.inbound_queue): - raise stem.ProtocolError("Queue IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.inbound_queue, self)) - elif self.inbound_connection and not tor_tools.is_valid_connection_id(self.inbound_connection): - raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.inbound_connection, self)) - elif self.outbound_queue and not tor_tools.is_valid_circuit_id(self.outbound_queue): - raise stem.ProtocolError("Queue IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.outbound_queue, self)) - elif self.outbound_connection and not tor_tools.is_valid_connection_id(self.outbound_connection): - raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.outbound_connection, self)) - - self.inbound_added = _parse_cell_type_mapping(self.inbound_added) - self.inbound_removed = _parse_cell_type_mapping(self.inbound_removed) - self.inbound_time = _parse_cell_type_mapping(self.inbound_time) - self.outbound_added = _parse_cell_type_mapping(self.outbound_added) - self.outbound_removed = _parse_cell_type_mapping(self.outbound_removed) - self.outbound_time = _parse_cell_type_mapping(self.outbound_time) - - -class TokenBucketEmptyEvent(Event): - """ - Event emitted when refilling an empty token bucket. **These events are only - emitted if TestingTorNetwork is set.** - - The TB_EMPTY event was introduced in tor version 0.2.5.2-alpha. - - .. versionadded:: 1.2.0 - - :var stem.TokenBucket bucket: bucket being refilled - :var str id: connection identifier - :var int read: time in milliseconds since the read bucket was last refilled - :var int written: time in milliseconds since the write bucket was last refilled - :var int last_refill: time in milliseconds the bucket has been empty since last refilled - """ - - _POSITIONAL_ARGS = ('bucket',) - _KEYWORD_ARGS = { - 'ID': 'id', - 'READ': 'read', - 'WRITTEN': 'written', - 'LAST': 'last_refill', - } - - _VERSION_ADDED = stem.version.Requirement.EVENT_TB_EMPTY - - def _parse(self): - if self.id and not tor_tools.is_valid_connection_id(self.id): - raise stem.ProtocolError("Connection IDs must be one to sixteen alphanumeric characters, got '%s': %s" % (self.id, self)) - elif not self.read.isdigit(): - raise stem.ProtocolError("A TB_EMPTY's READ value should be a positive numeric value, received: %s" % self) - elif not self.written.isdigit(): - raise stem.ProtocolError("A TB_EMPTY's WRITTEN value should be a positive numeric value, received: %s" % self) - elif not self.last_refill.isdigit(): - raise stem.ProtocolError("A TB_EMPTY's LAST value should be a positive numeric value, received: %s" % self) - - self.read = int(self.read) - self.written = int(self.written) - self.last_refill = int(self.last_refill) - - self._log_if_unrecognized('bucket', stem.TokenBucket) - - -def _parse_cell_type_mapping(mapping): - """ - Parses a mapping of the form... - - key1:value1,key2:value2... - - ... in which keys are strings and values are integers. - - :param str mapping: value to be parsed - - :returns: dict of **str => int** mappings - - :rasies: **stem.ProtocolError** if unable to parse the mapping - """ - - if mapping is None: - return None - - results = {} - - for entry in mapping.split(','): - if ':' not in entry: - raise stem.ProtocolError("Mappings are expected to be of the form 'key:value', got '%s': %s" % (entry, mapping)) - - key, value = entry.rsplit(':', 1) - - if not CELL_TYPE.match(key): - raise stem.ProtocolError("Key had invalid characters, got '%s': %s" % (key, mapping)) - elif not value.isdigit(): - raise stem.ProtocolError("Values should just be integers, got '%s': %s" % (value, mapping)) - - results[key] = int(value) - - return results - - -EVENT_TYPE_TO_CLASS = { - 'ADDRMAP': AddrMapEvent, - 'AUTHDIR_NEWDESCS': AuthDirNewDescEvent, - 'BUILDTIMEOUT_SET': BuildTimeoutSetEvent, - 'BW': BandwidthEvent, - 'CELL_STATS': CellStatsEvent, - 'CIRC': CircuitEvent, - 'CIRC_BW': CircuitBandwidthEvent, - 'CIRC_MINOR': CircMinorEvent, - 'CLIENTS_SEEN': ClientsSeenEvent, - 'CONF_CHANGED': ConfChangedEvent, - 'CONN_BW': ConnectionBandwidthEvent, - 'DEBUG': LogEvent, - 'DESCCHANGED': DescChangedEvent, - 'ERR': LogEvent, - 'GUARD': GuardEvent, - 'HS_DESC': HSDescEvent, - 'HS_DESC_CONTENT': HSDescContentEvent, - 'INFO': LogEvent, - 'NETWORK_LIVENESS': NetworkLivenessEvent, - 'NEWCONSENSUS': NewConsensusEvent, - 'NEWDESC': NewDescEvent, - 'NOTICE': LogEvent, - 'NS': NetworkStatusEvent, - 'ORCONN': ORConnEvent, - 'SIGNAL': SignalEvent, - 'STATUS_CLIENT': StatusEvent, - 'STATUS_GENERAL': StatusEvent, - 'STATUS_SERVER': StatusEvent, - 'STREAM': StreamEvent, - 'STREAM_BW': StreamBwEvent, - 'TB_EMPTY': TokenBucketEmptyEvent, - 'TRANSPORT_LAUNCHED': TransportLaunchedEvent, - 'WARN': LogEvent, - - # accounting for a bug in tor 0.2.0.22 - 'STATUS_SEVER': StatusEvent, -} diff --git a/myenv/lib/python3.12/site-packages/stem/response/getconf.py b/myenv/lib/python3.12/site-packages/stem/response/getconf.py deleted file mode 100644 index 3550176..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/getconf.py +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import stem.response -import stem.socket - - -class GetConfResponse(stem.response.ControlMessage): - """ - Reply for a GETCONF query. - - Note that configuration parameters won't match what we queried for if it's one - of the special mapping options (ex. 'HiddenServiceOptions'). - - :var dict entries: mapping between the config parameter (**str**) and their - values (**list** of **str**) - """ - - def _parse_message(self): - # Example: - # 250-CookieAuthentication=0 - # 250-ControlPort=9100 - # 250-DataDirectory=/home/neena/.tor - # 250 DirPort - - self.entries = {} - remaining_lines = list(self) - - if self.content() == [('250', ' ', 'OK')]: - return - - if not self.is_ok(): - unrecognized_keywords = [] - for code, _, line in self.content(): - if code == '552' and line.startswith('Unrecognized configuration key "') and line.endswith('"'): - unrecognized_keywords.append(line[32:-1]) - - if unrecognized_keywords: - raise stem.InvalidArguments('552', 'GETCONF request contained unrecognized keywords: %s' % ', '.join(unrecognized_keywords), unrecognized_keywords) - else: - raise stem.ProtocolError('GETCONF response contained a non-OK status code:\n%s' % self) - - while remaining_lines: - line = remaining_lines.pop(0) - - if line.is_next_mapping(): - key, value = line.split('=', 1) - else: - key, value = (line.pop(), None) - - # Tor's CommaList and RouterList have a bug where they map to an empty - # string when undefined rather than None... - # - # https://trac.torproject.org/projects/tor/ticket/18263 - - if value == '': - value = None - - if key not in self.entries: - self.entries[key] = [] - - if value is not None: - self.entries[key].append(value) diff --git a/myenv/lib/python3.12/site-packages/stem/response/getinfo.py b/myenv/lib/python3.12/site-packages/stem/response/getinfo.py deleted file mode 100644 index c7379a9..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/getinfo.py +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import stem.response -import stem.socket - - -class GetInfoResponse(stem.response.ControlMessage): - """ - Reply for a GETINFO query. - - :var dict entries: mapping between the queried options and their bytes values - """ - - def _parse_message(self): - # Example: - # 250-version=0.2.3.11-alpha-dev (git-ef0bc7f8f26a917c) - # 250+config-text= - # ControlPort 9051 - # DataDirectory /home/atagar/.tor - # ExitPolicy reject *:* - # Log notice stdout - # Nickname Unnamed - # ORPort 9050 - # . - # 250 OK - - self.entries = {} - remaining_lines = [content for (code, div, content) in self.content(get_bytes = True)] - - if not self.is_ok() or not remaining_lines.pop() == b'OK': - unrecognized_keywords = [] - error_code, error_msg = None, None - - for code, _, line in self.content(): - if code != '250': - error_code = code - error_msg = line - - if code == '552' and line.startswith('Unrecognized key "') and line.endswith('"'): - unrecognized_keywords.append(line[18:-1]) - - if unrecognized_keywords: - raise stem.InvalidArguments('552', 'GETINFO request contained unrecognized keywords: %s\n' % ', '.join(unrecognized_keywords), unrecognized_keywords) - elif error_code: - raise stem.OperationFailed(error_code, error_msg) - else: - raise stem.ProtocolError("GETINFO response didn't have an OK status:\n%s" % self) - - while remaining_lines: - try: - key, value = remaining_lines.pop(0).split(b'=', 1) - except ValueError: - raise stem.ProtocolError('GETINFO replies should only contain parameter=value mappings:\n%s' % self) - - if stem.prereq.is_python_3(): - key = stem.util.str_tools._to_unicode(key) - - # if the value is a multiline value then it *must* be of the form - # '=\n' - - if b'\n' in value: - if not value.startswith(b'\n'): - raise stem.ProtocolError("GETINFO response contained a multi-line value that didn't start with a newline:\n%s" % self) - - value = value[1:] - - self.entries[key] = value - - def _assert_matches(self, params): - """ - Checks if we match a given set of parameters, and raise a ProtocolError if not. - - :param set params: parameters to assert that we contain - - :raises: - * :class:`stem.ProtocolError` if parameters don't match this response - """ - - reply_params = set(self.entries.keys()) - - if params != reply_params: - requested_label = ', '.join(params) - reply_label = ', '.join(reply_params) - - raise stem.ProtocolError("GETINFO reply doesn't match the parameters that we requested. Queried '%s' but got '%s'." % (requested_label, reply_label)) diff --git a/myenv/lib/python3.12/site-packages/stem/response/mapaddress.py b/myenv/lib/python3.12/site-packages/stem/response/mapaddress.py deleted file mode 100644 index 47647d3..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/mapaddress.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import stem.response -import stem.socket - - -class MapAddressResponse(stem.response.ControlMessage): - """ - Reply for a MAPADDRESS query. - Doesn't raise an exception unless no addresses were mapped successfully. - - :var dict entries: mapping between the original and replacement addresses - - :raises: - * :class:`stem.OperationFailed` if Tor was unable to satisfy the request - * :class:`stem.InvalidRequest` if the addresses provided were invalid - """ - - def _parse_message(self): - # Example: - # 250-127.192.10.10=torproject.org - # 250 1.2.3.4=tor.freehaven.net - - if not self.is_ok(): - for code, _, message in self.content(): - if code == '512': - raise stem.InvalidRequest(code, message) - elif code == '451': - raise stem.OperationFailed(code, message) - else: - raise stem.ProtocolError('MAPADDRESS returned unexpected response code: %s', code) - - self.entries = {} - - for code, _, message in self.content(): - if code == '250': - try: - key, value = message.split('=', 1) - self.entries[key] = value - except ValueError: - raise stem.ProtocolError(None, "MAPADDRESS returned '%s', which isn't a mapping" % message) diff --git a/myenv/lib/python3.12/site-packages/stem/response/protocolinfo.py b/myenv/lib/python3.12/site-packages/stem/response/protocolinfo.py deleted file mode 100644 index 7cb216c..0000000 --- a/myenv/lib/python3.12/site-packages/stem/response/protocolinfo.py +++ /dev/null @@ -1,130 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -import sys - -import stem.prereq -import stem.response -import stem.socket -import stem.version -import stem.util.str_tools - -from stem.connection import AuthMethod -from stem.util import log - - -class ProtocolInfoResponse(stem.response.ControlMessage): - """ - Version one PROTOCOLINFO query response. - - The protocol_version is the only mandatory data for a valid PROTOCOLINFO - response, so all other values are None if undefined or empty if a collection. - - :var int protocol_version: protocol version of the response - :var stem.version.Version tor_version: version of the tor process - :var tuple auth_methods: :data:`stem.connection.AuthMethod` types that tor will accept - :var tuple unknown_auth_methods: strings of unrecognized auth methods - :var str cookie_path: path of tor's authentication cookie - """ - - def _parse_message(self): - # Example: - # 250-PROTOCOLINFO 1 - # 250-AUTH METHODS=COOKIE COOKIEFILE="/home/atagar/.tor/control_auth_cookie" - # 250-VERSION Tor="0.2.1.30" - # 250 OK - - self.protocol_version = None - self.tor_version = None - self.auth_methods = () - self.unknown_auth_methods = () - self.cookie_path = None - - auth_methods, unknown_auth_methods = [], [] - remaining_lines = list(self) - - if not self.is_ok() or not remaining_lines.pop() == 'OK': - raise stem.ProtocolError("PROTOCOLINFO response didn't have an OK status:\n%s" % self) - - # sanity check that we're a PROTOCOLINFO response - if not remaining_lines[0].startswith('PROTOCOLINFO'): - raise stem.ProtocolError('Message is not a PROTOCOLINFO response:\n%s' % self) - - while remaining_lines: - line = remaining_lines.pop(0) - line_type = line.pop() - - if line_type == 'PROTOCOLINFO': - # Line format: - # FirstLine = "PROTOCOLINFO" SP PIVERSION CRLF - # PIVERSION = 1*DIGIT - - if line.is_empty(): - raise stem.ProtocolError("PROTOCOLINFO response's initial line is missing the protocol version: %s" % line) - - try: - self.protocol_version = int(line.pop()) - except ValueError: - raise stem.ProtocolError('PROTOCOLINFO response version is non-numeric: %s' % line) - - # The piversion really should be '1' but, according to the spec, tor - # does not necessarily need to provide the PROTOCOLINFO version that we - # requested. Log if it's something we aren't expecting but still make - # an effort to parse like a v1 response. - - if self.protocol_version != 1: - log.info("We made a PROTOCOLINFO version 1 query but got a version %i response instead. We'll still try to use it, but this may cause problems." % self.protocol_version) - elif line_type == 'AUTH': - # Line format: - # AuthLine = "250-AUTH" SP "METHODS=" AuthMethod *("," AuthMethod) - # *(SP "COOKIEFILE=" AuthCookieFile) CRLF - # AuthMethod = "NULL" / "HASHEDPASSWORD" / "COOKIE" - # AuthCookieFile = QuotedString - - # parse AuthMethod mapping - if not line.is_next_mapping('METHODS'): - raise stem.ProtocolError("PROTOCOLINFO response's AUTH line is missing its mandatory 'METHODS' mapping: %s" % line) - - for method in line.pop_mapping()[1].split(','): - if method == 'NULL': - auth_methods.append(AuthMethod.NONE) - elif method == 'HASHEDPASSWORD': - auth_methods.append(AuthMethod.PASSWORD) - elif method == 'COOKIE': - auth_methods.append(AuthMethod.COOKIE) - elif method == 'SAFECOOKIE': - auth_methods.append(AuthMethod.SAFECOOKIE) - else: - unknown_auth_methods.append(method) - message_id = 'stem.response.protocolinfo.unknown_auth_%s' % method - log.log_once(message_id, log.INFO, "PROTOCOLINFO response included a type of authentication that we don't recognize: %s" % method) - - # our auth_methods should have a single AuthMethod.UNKNOWN entry if - # any unknown authentication methods exist - if AuthMethod.UNKNOWN not in auth_methods: - auth_methods.append(AuthMethod.UNKNOWN) - - # parse optional COOKIEFILE mapping (quoted and can have escapes) - - if line.is_next_mapping('COOKIEFILE', True, True): - self.cookie_path = line.pop_mapping(True, True, get_bytes = True)[1].decode(sys.getfilesystemencoding()) - - if stem.prereq.is_python_3(): - self.cookie_path = stem.util.str_tools._to_unicode(self.cookie_path) # normalize back to str - elif line_type == 'VERSION': - # Line format: - # VersionLine = "250-VERSION" SP "Tor=" TorVersion OptArguments CRLF - # TorVersion = QuotedString - - if not line.is_next_mapping('Tor', True): - raise stem.ProtocolError("PROTOCOLINFO response's VERSION line is missing its mandatory tor version mapping: %s" % line) - - try: - self.tor_version = stem.version.Version(line.pop_mapping(True)[1]) - except ValueError as exc: - raise stem.ProtocolError(exc) - else: - log.debug("Unrecognized PROTOCOLINFO line type '%s', ignoring it: %s" % (line_type, line)) - - self.auth_methods = tuple(auth_methods) - self.unknown_auth_methods = tuple(unknown_auth_methods) diff --git a/myenv/lib/python3.12/site-packages/stem/settings.cfg b/myenv/lib/python3.12/site-packages/stem/settings.cfg deleted file mode 100644 index c8cb29c..0000000 --- a/myenv/lib/python3.12/site-packages/stem/settings.cfg +++ /dev/null @@ -1,422 +0,0 @@ -################################################################################ -# -# Information related to tor configuration options and events... -# -# * manual.important Most commonly used configuration options. -# * manual.summary Short summary describing the option. -# * event.description Descriptions for the events. -# -################################################################################ - -manual.important BandwidthRate -manual.important BandwidthBurst -manual.important RelayBandwidthRate -manual.important RelayBandwidthBurst -manual.important ControlPort -manual.important HashedControlPassword -manual.important CookieAuthentication -manual.important DataDirectory -manual.important Log -manual.important RunAsDaemon -manual.important User - -manual.important Bridge -manual.important ExcludeNodes -manual.important MaxCircuitDirtiness -manual.important SocksPort -manual.important UseBridges - -manual.important BridgeRelay -manual.important ContactInfo -manual.important ExitPolicy -manual.important MyFamily -manual.important Nickname -manual.important ORPort -manual.important AccountingMax -manual.important AccountingStart - -manual.important DirPortFrontPage -manual.important DirPort - -manual.important HiddenServiceDir -manual.important HiddenServicePort - -# General Config Options - -manual.summary.BandwidthRate Average bandwidth usage limit -manual.summary.BandwidthBurst Maximum bandwidth usage limit -manual.summary.MaxAdvertisedBandwidth Limit for the bandwidth we advertise as being available for relaying -manual.summary.RelayBandwidthRate Average bandwidth usage limit for relaying -manual.summary.RelayBandwidthBurst Maximum bandwidth usage limit for relaying -manual.summary.PerConnBWRate Average relayed bandwidth limit per connection -manual.summary.PerConnBWBurst Maximum relayed bandwidth limit per connection -manual.summary.ClientTransportPlugin Proxy when establishing bridge connections -manual.summary.ServerTransportPlugin Proxy when servicing bridge connections -manual.summary.ServerTransportListenAddr Endpoint for bridge's pluggable transport proxy -manual.summary.ServerTransportOptions Additional arguments for bridge's proxy -manual.summary.ExtORPort Endpoint for extended ORPort connections -manual.summary.ExtORPortCookieAuthFile Location of the ExtORPort's authentication cookie -manual.summary.ExtORPortCookieAuthFileGroupReadable Group read permissions for the ExtORPort's authentication cookie -manual.summary.ConnLimit Minimum number of file descriptors for Tor to start -manual.summary.DisableNetwork Don't accept non-controller connections -manual.summary.ConstrainedSockets Shrinks sockets to ConstrainedSockSize -manual.summary.ConstrainedSockSize Limit for the received and transmit buffers of sockets -manual.summary.ControlPort Port providing access to tor controllers (nyx, vidalia, etc) -manual.summary.ControlSocket Socket providing controller access -manual.summary.ControlSocketsGroupWritable Group read permissions for the control socket -manual.summary.HashedControlPassword Hash of the password for authenticating to the control port -manual.summary.CookieAuthentication If set, authenticates controllers via a cookie -manual.summary.CookieAuthFile Location of the authentication cookie -manual.summary.CookieAuthFileGroupReadable Group read permissions for the authentication cookie -manual.summary.ControlPortWriteToFile Path for a file tor writes containing its control port -manual.summary.ControlPortFileGroupReadable Group read permissions for the control port file -manual.summary.DataDirectory Location for storing runtime data (state, keys, etc) -manual.summary.DataDirectoryGroupReadable Group read permissions for the data directory -manual.summary.CacheDirectory Directory where information is cached -manual.summary.CacheDirectoryGroupReadable Group read permissions for the cache directory -manual.summary.FallbackDir Fallback when unable to retrieve descriptor information -manual.summary.UseDefaultFallbackDirs Use hard-coded fallback directory authorities when needed -manual.summary.DirAuthority Alternative directory authorities -manual.summary.DirAuthorityFallbackRate Rate at which to use fallback directory -manual.summary.AlternateDirAuthority Alternative directory authorities (consensus only) -manual.summary.AlternateBridgeAuthority Alternative directory authorities (bridges only) -manual.summary.DisableAllSwap Locks all allocated memory so they can't be paged out -manual.summary.DisableDebuggerAttachment Limit information applications can retrieve about the process -manual.summary.FetchDirInfoEarly Keeps consensus information up to date, even if unnecessary -manual.summary.FetchDirInfoExtraEarly Updates consensus information when it's first available -manual.summary.FetchHidServDescriptors Toggles if hidden service descriptors are fetched automatically or not -manual.summary.FetchServerDescriptors Toggles if the consensus is fetched automatically or not -manual.summary.FetchUselessDescriptors Toggles if relay descriptors are fetched when they aren't strictly necessary -manual.summary.HTTPProxy HTTP proxy for connecting to tor -manual.summary.HTTPProxyAuthenticator Authentication credentials for HTTPProxy -manual.summary.HTTPSProxy SSL proxy for connecting to tor -manual.summary.HTTPSProxyAuthenticator Authentication credentials for HTTPSProxy -manual.summary.Sandbox Run within a syscall sandbox -manual.summary.Socks4Proxy SOCKS 4 proxy for connecting to tor -manual.summary.Socks5Proxy SOCKS 5 for connecting to tor -manual.summary.Socks5ProxyUsername Username for connecting to the Socks5Proxy -manual.summary.Socks5ProxyPassword Password for connecting to the Socks5Proxy -manual.summary.UnixSocksGroupWritable Group write permissions for the socks socket -manual.summary.KeepalivePeriod Rate at which to send keepalive packets -manual.summary.Log Runlevels and location for tor logging -manual.summary.LogMessageDomains Includes a domain when logging messages -manual.summary.MaxUnparseableDescSizeToLog Size of the dedicated log for unparseable descriptors -manual.summary.OutboundBindAddress Sets the IP used for connecting to tor -manual.summary.OutboundBindAddressOR Make outbound non-exit connections originate from this address -manual.summary.OutboundBindAddressExit Make outbound exit connections originate from this address -manual.summary.PidFile Path for a file tor writes containing its process id -manual.summary.ProtocolWarnings Toggles if protocol errors give warnings or not -manual.summary.RunAsDaemon Toggles if tor runs as a daemon process -manual.summary.LogTimeGranularity limits granularity of log message timestamps -manual.summary.TruncateLogFile Overwrites log file rather than appending when restarted -manual.summary.SyslogIdentityTag Tag logs appended to the syslog as being from tor -manual.summary.AndroidIdentityTag Tag when logging to android subsystem -manual.summary.SafeLogging Toggles if logs are scrubbed of sensitive information -manual.summary.User UID for the process when started -manual.summary.KeepBindCapabilities Retain permission for binding to low valued ports -manual.summary.HardwareAccel Toggles if tor attempts to use hardware acceleration -manual.summary.AccelName OpenSSL engine name for crypto acceleration -manual.summary.AccelDir Crypto acceleration library path -manual.summary.AvoidDiskWrites Toggles if tor avoids frequently writing to disk -manual.summary.CircuitPriorityHalflife Overwrite method for prioritizing traffic among relayed connections -manual.summary.CountPrivateBandwidth Applies rate limiting to private IP addresses -manual.summary.ExtendByEd25519ID Include Ed25519 identifier when extending circuits -manual.summary.NoExec Prevents any launch of other executables -manual.summary.Schedulers Scheduling algorithm by which to send outbound data -manual.summary.KISTSchedRunInterval Scheduling interval if using KIST -manual.summary.KISTSockBufSizeFactor Multiplier for per-socket limit if using KIST - -# Client Config Options - -manual.summary.Bridge Available bridges -manual.summary.LearnCircuitBuildTimeout Toggles adaptive timeouts for circuit creation -manual.summary.CircuitBuildTimeout Initial timeout for circuit creation -manual.summary.CircuitsAvailableTimeout Time to keep circuits open and unused for -manual.summary.CircuitStreamTimeout Timeout for shifting streams among circuits -manual.summary.ClientOnly Ensures that we aren't used as a relay or directory mirror -manual.summary.ConnectionPadding Pad traffic to help prevent correlation attacks -manual.summary.ReducedConnectionPadding Reduce padding and increase circuit cycling for low bandidth connections -manual.summary.CircuitPadding Pad circuit traffic to help prevent correlation attacks -manual.summary.ReducedCircuitPadding Only use lightweight padding algorithms -manual.summary.ExcludeNodes Relays or locales never to be used in circuits -manual.summary.ExcludeExitNodes Relays or locales never to be used for exits -manual.summary.GeoIPExcludeUnknown Don't use relays with an unknown locale in circuits -manual.summary.ExitNodes Preferred final hop for circuits -manual.summary.MiddleNodes Preferred middle hops for circuits -manual.summary.EntryNodes Preferred first hops for circuits -manual.summary.StrictNodes Never uses notes outside of Entry/ExitNodes -manual.summary.FascistFirewall Only make outbound connections on FirewallPorts -manual.summary.FirewallPorts Ports used by FascistFirewall -manual.summary.HidServAuth Authentication credentials for connecting to a hidden service -manual.summary.ClientOnionAuthDir Path containing hidden service authorization files -manual.summary.ReachableAddresses Rules for bypassing the local firewall -manual.summary.ReachableDirAddresses Rules for bypassing the local firewall (directory fetches) -manual.summary.ReachableORAddresses Rules for bypassing the local firewall (OR connections) -manual.summary.LongLivedPorts Ports requiring highly reliable relays -manual.summary.MapAddress Alias mappings for address requests -manual.summary.NewCircuitPeriod Period for considering the creation of new circuits -manual.summary.MaxCircuitDirtiness Duration for reusing constructed circuits -manual.summary.MaxClientCircuitsPending Number of circuits that can be in construction at once -manual.summary.NodeFamily Define relays as belonging to a family -manual.summary.EnforceDistinctSubnets Prevent use of multiple relays from the same subnet on a circuit -manual.summary.SocksPort Port for using tor as a Socks proxy -manual.summary.SocksPolicy Access policy for the pocks port -manual.summary.SocksTimeout Time until idle or unestablished socks connections are closed -manual.summary.TokenBucketRefillInterval Frequency at which exhausted connections are checked for new traffic -manual.summary.TrackHostExits Maintains use of the same exit whenever connecting to this destination -manual.summary.TrackHostExitsExpire Time until use of an exit for tracking expires -manual.summary.UpdateBridgesFromAuthority Toggles fetching bridge descriptors from the authorities -manual.summary.UseBridges Make use of configured bridges -manual.summary.UseEntryGuards Use guard relays for first hop -manual.summary.GuardfractionFile File containing information with duration of our guards -manual.summary.UseGuardFraction Take guardfraction into account for path selection -manual.summary.NumEntryGuards Pool size of guard relays we'll select from -manual.summary.NumPrimaryGuards Pool size of strongly preferred guard relays we'll select from -manual.summary.NumDirectoryGuards Pool size of directory guards we'll select from -manual.summary.GuardLifetime Minimum time to keep entry guards -manual.summary.SafeSocks Toggles rejecting unsafe variants of the socks protocol -manual.summary.TestSocks Provide notices for if socks connections are of the safe or unsafe variants -manual.summary.VirtualAddrNetworkIPv4 IPv4 address range to use when needing a virtual address -manual.summary.VirtualAddrNetworkIPv6 IPv6 address range to use when needing a virtual address -manual.summary.AllowNonRFC953Hostnames Toggles blocking invalid characters in hostname resolution -manual.summary.HTTPTunnelPort Port on which to allow 'HTTP CONNECT' connections -manual.summary.TransPort Port for transparent proxying if the OS supports it -manual.summary.TransProxyType Proxy type to be used -manual.summary.NATDPort Port for forwarding ipfw NATD connections -manual.summary.AutomapHostsOnResolve Map addresses ending with special suffixes to virtual addresses -manual.summary.AutomapHostsSuffixes Address suffixes recognized by AutomapHostsOnResolve -manual.summary.DNSPort Port from which DNS responses are fetched instead of tor -manual.summary.ClientDNSRejectInternalAddresses Disregards anonymous DNS responses for internal addresses -manual.summary.ClientRejectInternalAddresses Disables use of Tor for internal connections -manual.summary.DownloadExtraInfo Toggles fetching of extra information about relays -manual.summary.WarnPlaintextPorts Toggles warnings for using risky ports -manual.summary.RejectPlaintextPorts Prevents connections on risky ports -manual.summary.OptimisticData Use exits without confirmation that prior connections succeeded -manual.summary.HSLayer2Nodes permissible relays for the second hop of HS circuits -manual.summary.HSLayer3Nodes permissible relays for the third hop of HS circuits -manual.summary.UseMicrodescriptors Retrieve microdescriptors rather than server descriptors -manual.summary.PathBiasCircThreshold Number of circuits through a guard before applying bias checks -manual.summary.PathBiasNoticeRate Fraction of circuits that must succeed before logging a notice -manual.summary.PathBiasWarnRate Fraction of circuits that must succeed before logging a warning -manual.summary.PathBiasExtremeRate Fraction of circuits that must succeed before logging an error -manual.summary.PathBiasDropGuards Drop guards failing to establish circuits -manual.summary.PathBiasScaleThreshold Circuits through a guard before scaling past observations down -manual.summary.PathBiasUseThreshold Number of streams through a circuit before applying bias checks -manual.summary.PathBiasNoticeUseRate Fraction of streams that must succeed before logging a notice -manual.summary.PathBiasExtremeUseRate Fraction of streams that must succeed before logging an error -manual.summary.PathBiasScaleUseThreshold Streams through a circuit before scaling past observations down -manual.summary.ClientUseIPv4 Allow IPv4 connections to guards and fetching consensus -manual.summary.ClientUseIPv6 Allow IPv6 connections to guards and fetching consensus -manual.summary.ClientPreferIPv6DirPort Perfer relays with IPv6 when fetching consensus -manual.summary.ClientPreferIPv6ORPort Prefer a guard's IPv6 rather than IPv4 endpoint -manual.summary.ClientAutoIPv6ORPort Connect to IPv6 ORPorts when available -manual.summary.PathsNeededToBuildCircuits Portion of relays to require information for before making circuits -manual.summary.ClientBootstrapConsensusAuthorityDownloadInitialDelay Delay when bootstrapping before downloading descriptors from authorities -manual.summary.ClientBootstrapConsensusFallbackDownloadInitialDelay Delay when bootstrapping before downloading descriptors from fallbacks -manual.summary.ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay Delay when bootstrapping before downloading descriptors from authorities if fallbacks disabled -manual.summary.ClientBootstrapConsensusMaxInProgressTries Descriptor documents that can be downloaded in parallel -manual.summary.DormantClientTimeout Become dormant when unused as a client for this duration -manual.summary.DormantTimeoutDisabledByIdleStreams Include idle streams when determining dormancy -manual.summary.DormantOnFirstStartup Begin tor in dormant mode -manual.summary.DormantCanceledByStartup Disable dormant mode when tor's restarted - -# Server Config Options - -manual.summary.Address Overwrites address others will use to reach this relay -manual.summary.AssumeReachable Skips reachability test at startup -manual.summary.BridgeRelay Act as a bridge -manual.summary.BridgeDistribution Distribution method BrideDB should provide our address by -manual.summary.ContactInfo Contact information for this relay -manual.summary.ExitRelay Allow relaying of exit traffic -manual.summary.ExitPolicy Traffic destinations that can exit from this relay -manual.summary.ExitPolicyRejectPrivate Prevent exiting on the local network -manual.summary.ExitPolicyRejectLocalInterfaces More extensive prevention of exiting on the local network -manual.summary.ReducedExitPolicy Customized reduced exit policy -manual.summary.IPv6Exit Allow clients to use us for IPv6 traffic -manual.summary.MaxOnionQueueDelay Duration to reject new onionskins if we have more than we can process -manual.summary.MyFamily Other relays this operator administers -manual.summary.Nickname Identifier for this relay -manual.summary.NumCPUs Number of processes spawned for decryption -manual.summary.ORPort Port used to accept relay traffic -manual.summary.PublishServerDescriptor Types of descriptors published -manual.summary.ShutdownWaitLength Delay before quitting after receiving a SIGINT signal -manual.summary.SSLKeyLifetime Lifetime for our link certificate -manual.summary.HeartbeatPeriod Rate at which an INFO level heartbeat message is sent -manual.summary.MainloopStats Include development information from the main loop with heartbeats -manual.summary.AccountingMax Amount of traffic before hibernating -manual.summary.AccountingRule Method to determine when the accounting limit is reached -manual.summary.AccountingStart Duration of an accounting period -manual.summary.RefuseUnknownExits Prevents relays not in the consensus from using us as an exit -manual.summary.ServerDNSResolvConfFile Overriding resolver config for DNS queries we provide -manual.summary.ServerDNSAllowBrokenConfig Toggles if we persist despite configuration parsing errors or not -manual.summary.ServerDNSSearchDomains Toggles if our DNS queries search for addresses in the local domain -manual.summary.ServerDNSDetectHijacking Toggles testing for DNS hijacking -manual.summary.ServerDNSTestAddresses Addresses to test to see if valid DNS queries are being hijacked -manual.summary.ServerDNSAllowNonRFC953Hostnames Toggles if we reject DNS queries with invalid characters -manual.summary.BridgeRecordUsageByCountry Tracks geoip information on bridge usage -manual.summary.ServerDNSRandomizeCase Toggles DNS query case randomization -manual.summary.GeoIPFile Path to file containing IPv4 geoip information -manual.summary.GeoIPv6File Path to file containing IPv6 geoip information -manual.summary.CellStatistics Toggles storing circuit queue duration to disk -manual.summary.PaddingStatistics Toggles storing padding counts -manual.summary.DirReqStatistics Toggles storing network status counts and performance to disk -manual.summary.EntryStatistics Toggles storing client connection counts to disk -manual.summary.ExitPortStatistics Toggles storing traffic and port usage data to disk -manual.summary.ConnDirectionStatistics Toggles storing connection use to disk -manual.summary.HiddenServiceStatistics Toggles storing hidden service stats to disk -manual.summary.ExtraInfoStatistics Publishes statistic data in the extra-info documents -manual.summary.ExtendAllowPrivateAddresses Allow circuits to be extended to the local network -manual.summary.MaxMemInQueues Threshold at which tor will terminate circuits to avoid running out of memory -manual.summary.DisableOOSCheck Don't close connections when running out of sockets -manual.summary.SigningKeyLifetime Duration the Ed25519 signing key is valid for -manual.summary.OfflineMasterKey Don't generate the master secret key -manual.summary.KeyDirectory Directory where secret keys reside -manual.summary.KeyDirectoryGroupReadable Group read permissions for the secret key directory - -# Directory Server Options - -manual.summary.DirPortFrontPage Publish this html file on the DirPort -manual.summary.DirPort Port for directory connections -manual.summary.DirPolicy Access policy for the DirPort -manual.summary.DirCache Provide cached descriptor information to other tor users -manual.summary.MaxConsensusAgeForDiffs Time to generate consensus caches for - -# Directory Authority Server Options - -manual.summary.AuthoritativeDirectory Act as a directory authority -manual.summary.V3AuthoritativeDirectory Generates a version 3 consensus -manual.summary.VersioningAuthoritativeDirectory Provides opinions on recommended versions of tor -manual.summary.RecommendedVersions Suggested versions of tor -manual.summary.RecommendedClientVersions Tor versions believed to be safe for clients -manual.summary.BridgeAuthoritativeDir Acts as a bridge authority -manual.summary.MinUptimeHidServDirectoryV2 Required uptime before accepting hidden service directory -manual.summary.RecommendedServerVersions Tor versions believed to be safe for relays -manual.summary.ConsensusParams Params entry of the networkstatus vote -manual.summary.DirAllowPrivateAddresses Toggles allowing arbitrary input or non-public IPs in descriptors -manual.summary.AuthDirBadExit Relays to be flagged as bad exits -manual.summary.AuthDirInvalid Relays from which the valid flag is withheld -manual.summary.AuthDirReject Relays to be dropped from the consensus -manual.summary.AuthDirBadExitCCs Countries for which to flag all relays as bad exits -manual.summary.AuthDirInvalidCCs Countries for which the valid flag is withheld -manual.summary.AuthDirRejectCCs Countries for which relays aren't accepted into the consensus -manual.summary.AuthDirListBadExits Toggles if we provide an opinion on bad exits -manual.summary.AuthDirMaxServersPerAddr Limit on the number of relays accepted per ip -manual.summary.AuthDirFastGuarantee Advertised rate at which the Fast flag is granted -manual.summary.AuthDirGuardBWGuarantee Advertised rate necessary to be a guard -manual.summary.AuthDirPinKeys Don't accept descriptors with conflicting identity keypairs -manual.summary.AuthDirSharedRandomness Participates in shared randomness voting -manual.summary.AuthDirTestEd25519LinkKeys Require proper Ed25519 key for the Running flag -manual.summary.BridgePassword Password for requesting bridge information -manual.summary.V3AuthVotingInterval Consensus voting interval -manual.summary.V3AuthVoteDelay Wait time to collect votes of other authorities -manual.summary.V3AuthDistDelay Wait time to collect the signatures of other authorities -manual.summary.V3AuthNIntervalsValid Number of voting intervals a consensus is valid for -manual.summary.V3BandwidthsFile Path to a file containing measured relay bandwidths -manual.summary.V3AuthUseLegacyKey Signs consensus with both the current and legacy keys -manual.summary.RephistTrackTime Discards old, unchanged reliability information -manual.summary.AuthDirHasIPv6Connectivity Descriptors can be retrieved over the authority's IPv6 ORPort -manual.summary.MinMeasuredBWsForAuthToIgnoreAdvertised Total measured value before advertised bandwidths are treated as unreliable - -# Hidden Service Options - -manual.summary.HiddenServiceDir Directory contents for the hidden service -manual.summary.HiddenServicePort Port the hidden service is provided on -manual.summary.PublishHidServDescriptors Toggles automated publishing of the hidden service to the rendezvous directory -manual.summary.HiddenServiceVersion Version for published hidden service descriptors -manual.summary.HiddenServiceAuthorizeClient Restricts access to the hidden service -manual.summary.HiddenServiceAllowUnknownPorts Allow rendezvous circuits on unrecognized ports -manual.summary.HiddenServiceExportCircuitID Exposes incoming client circuits via the given protocol -manual.summary.HiddenServiceMaxStreams Maximum streams per rendezvous circuit -manual.summary.HiddenServiceMaxStreamsCloseCircuit Closes rendezvous circuits that exceed the maximum number of streams -manual.summary.RendPostPeriod Period at which the rendezvous service descriptors are refreshed -manual.summary.HiddenServiceDirGroupReadable Group read permissions for the hidden service directory -manual.summary.HiddenServiceNumIntroductionPoints Number of introduction points the hidden service will have -manual.summary.HiddenServiceEnableIntroDoSDefense Introduction point DoS protection -manual.summary.HiddenServiceEnableIntroDoSRatePerSec Request rate allowed for the introduction point -manual.summary.HiddenServiceEnableIntroDoSBurstPerSec Burst rate allowed for the introduction point -manual.summary.HiddenServiceSingleHopMode Allow non-anonymous single hop hidden services -manual.summary.HiddenServiceNonAnonymousMode Enables HiddenServiceSingleHopMode to be set - -# DoS Mitigation Options - -manual.summary.DoSCircuitCreationEnabled Enables circuit creation DoS mitigation -manual.summary.DoSCircuitCreationMinConnections Connection rate when clients are a suspected DoS -manual.summary.DoSCircuitCreationRate Acceptable rate for circuit creation -manual.summary.DoSCircuitCreationBurst Accept burst of circuit creation up to this rate -manual.summary.DoSCircuitCreationDefenseType Method for mitigating circuit creation DoS -manual.summary.DoSCircuitCreationDefenseTimePeriod Duration of DoS mitigation -manual.summary.DoSConnectionEnabled Enables connection DoS mitigation -manual.summary.DoSConnectionMaxConcurrentCount Acceptable number of connections -manual.summary.DoSConnectionDefenseType Method for mitigating connection DoS -manual.summary.DoSRefuseSingleHopClientRendezvous Prevent establishment of single hop rendezvous points - -# Testing Network Options - -manual.summary.TestingTorNetwork Overrides other options to be a testing network -manual.summary.TestingV3AuthInitialVotingInterval Overrides V3AuthVotingInterval for the first consensus -manual.summary.TestingV3AuthInitialVoteDelay Overrides TestingV3AuthInitialVoteDelay for the first consensus -manual.summary.TestingV3AuthInitialDistDelay Overrides TestingV3AuthInitialDistDelay for the first consensus -manual.summary.TestingV3AuthVotingStartOffset Offset for the point at which the authority votes -manual.summary.TestingAuthDirTimeToLearnReachability Delay until opinions are given about which relays are running or not -manual.summary.TestingEstimatedDescriptorPropagationTime Delay before clients attempt to fetch descriptors from directory caches -manual.summary.TestingMinFastFlagThreshold Minimum value for the Fast flag -manual.summary.TestingServerDownloadInitialDelay Delay before downloading resources for relaying -manual.summary.TestingClientDownloadInitialDelay Delay before downloading resources for client usage -manual.summary.TestingServerConsensusDownloadInitialDelay Delay before downloading descriptors for relaying -manual.summary.TestingClientConsensusDownloadInitialDelay Delay before downloading descriptors for client usage -manual.summary.TestingBridgeDownloadInitialDelay Delay before downloading bridge descriptors -manual.summary.TestingBridgeBootstrapDownloadInitialDelay Delay before downloading bridge descriptors when first started -manual.summary.TestingClientMaxIntervalWithoutRequest Maximum time to wait to batch requests for missing descriptors -manual.summary.TestingDirConnectionMaxStall Duration to let directory connections stall before timing out -manual.summary.TestingDirAuthVoteExit Relays to give the Exit flag to -manual.summary.TestingDirAuthVoteExitIsStrict Only grant the Exit flag to relays listed by TestingDirAuthVoteExit -manual.summary.TestingDirAuthVoteGuard Relays to give the Guard flag to -manual.summary.TestingDirAuthVoteGuardIsStrict Only grant the Guard flag to relays listed by TestingDirAuthVoteGuard -manual.summary.TestingDirAuthVoteHSDir Relays to give the HSDir flag to -manual.summary.TestingDirAuthVoteHSDirIsStrict Only grant the HSDir flag to relays listed by TestingDirAuthVoteHSDir -manual.summary.TestingEnableConnBwEvent Allow controllers to request CONN_BW events -manual.summary.TestingEnableCellStatsEvent Allow controllers to request CELL_STATS events -manual.summary.TestingMinExitFlagThreshold Lower bound for assigning the Exit flag -manual.summary.TestingLinkCertLifetime Duration of our ed25519 certificate -manual.summary.TestingAuthKeyLifetime Duration for our ed25519 signing key -manual.summary.TestingLinkKeySlop Time before expiration that we replace our ed25519 link key -manual.summary.TestingAuthKeySlop Time before expiration that we replace our ed25519 authentication key -manual.summary.TestingSigningKeySlop Time before expiration that we replace our ed25519 signing key - -# Brief description of tor events - -event.description.debug Logging at the debug runlevel. This is low level, high volume information about tor's internals that generally isn't useful to users. -event.description.info Logging at the info runlevel. This is low level information of important internal processes. -event.description.notice Logging at the notice runlevel. This runlevel and above are shown to users by default, and includes general information the user should be aware of. -event.description.warn Logging at the warning runlevel. These are problems the user should be aware of. -event.description.err Logging at the error runlevel. These are critical issues that may prevent tor from working properly. - -event.description.addrmap New address mapping for our DNS cache. -event.description.authdir_newdescs Indicates we just received a new descriptor. This is only used by directory authorities. -event.description.buildtimeout_set Indicates the timeout value for a circuit has changed. -event.description.bw Event emitted every second with the bytes sent and received by tor. -event.description.cell_stats Event emitted every second with the count of the number of cell types per circuit. -event.description.circ Indicates that a circuit we've established through the tor network has been created, changed, or closed. -event.description.circ_bw Event emitted every second with the bytes sent and received on a per-circuit basis. -event.description.circ_minor Minor changes to our circuits, such as reuse of existing circuits for a different purpose. -event.description.clients_seen Periodic summary of the countries we've seen users connect from. This is only used by bridge relays. -event.description.conf_changed Indicates that our torrc configuration has changed. This could be in response to a SETCONF or RELOAD signal. -event.description.conn_bw Event emitted every second with the byytes sent and received on a per-connection basis. -event.description.descchanged Indicates that our descriptor has changed. -event.description.guard Indicates that the set of relays we use for our initial connection into the tor network (guards) have changed. -event.description.hs_desc Received a hidden service descriptor that wasn't yet cached. -event.description.hs_desc_content Content of a hidden service descriptor we've fetched. -event.description.network_liveness Emitted when the network becomes reachable or unreachable. -event.description.newconsensus Received a new hourly consensus of relays in the tor network. -event.description.newdesc Indicates that a new descriptor is available. -event.description.ns Consensus information for an individual relay has changed. This could be due to receiving a new consensus or tor locally decides a relay is up or down. -event.description.orconn Change in our connections as a relay. -event.description.signal Indicates that tor has received and acted upon a signal being sent to its process. -event.description.status_client Notification of a change in tor's state as a client (ie user). -event.description.status_general Notification of a change in tor's state. -event.description.status_server Notification of a change in tor's state as a relay. -event.description.stream Communication over a circuit we've established. For instance, Firefox making a connection through tor. -event.description.stream_bw Event emitted every second with the bytes sent and received for a specific stream. -event.description.tb_empty Statistics for when token buckets are refilled. This is only used when TestingTorNetwork is set. -event.description.transport_launched Emitted when a pluggable transport is launched. - diff --git a/myenv/lib/python3.12/site-packages/stem/socket.py b/myenv/lib/python3.12/site-packages/stem/socket.py deleted file mode 100644 index 8303fd0..0000000 --- a/myenv/lib/python3.12/site-packages/stem/socket.py +++ /dev/null @@ -1,821 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Supports communication with sockets speaking Tor protocols. This -allows us to send messages as basic strings, and receive responses as -:class:`~stem.response.ControlMessage` instances. - -**This module only consists of low level components, and is not intended for -users.** See our `tutorials <../tutorials.html>`_ and `Control Module -`_ if you're new to Stem and looking to get started. - -With that aside, these can still be used for raw socket communication with -Tor... - -:: - - import stem - import stem.connection - import stem.socket - - if __name__ == '__main__': - try: - control_socket = stem.socket.ControlPort(port = 9051) - stem.connection.authenticate(control_socket) - except stem.SocketError as exc: - print 'Unable to connect to tor on port 9051: %s' % exc - sys.exit(1) - except stem.connection.AuthenticationFailure as exc: - print 'Unable to authenticate: %s' % exc - sys.exit(1) - - print "Issuing 'GETINFO version' query...\\n" - control_socket.send('GETINFO version') - print control_socket.recv() - -:: - - % python example.py - Issuing 'GETINFO version' query... - - version=0.2.4.10-alpha-dev (git-8be6058d8f31e578) - OK - -**Module Overview:** - -:: - - BaseSocket - Thread safe socket. - |- RelaySocket - Socket for a relay's ORPort. - | |- send - sends a message to the socket - | +- recv - receives a response from the socket - | - |- ControlSocket - Socket wrapper that speaks the tor control protocol. - | |- ControlPort - Control connection via a port. - | |- ControlSocketFile - Control connection via a local file socket. - | | - | |- send - sends a message to the socket - | +- recv - receives a ControlMessage from the socket - | - |- is_alive - reports if the socket is known to be closed - |- is_localhost - returns if the socket is for the local system or not - |- connection_time - timestamp when socket last connected or disconnected - |- connect - connects a new socket - |- close - shuts down the socket - +- __enter__ / __exit__ - manages socket connection - - send_message - Writes a message to a control socket. - recv_message - Reads a ControlMessage from a control socket. - send_formatting - Performs the formatting expected from sent messages. -""" - -from __future__ import absolute_import - -import re -import socket -import ssl -import threading -import time - -import stem.prereq -import stem.response -import stem.util.str_tools - -from stem.util import log - -MESSAGE_PREFIX = re.compile(b'^[a-zA-Z0-9]{3}[-+ ]') -ERROR_MSG = 'Error while receiving a control message (%s): %s' - -# lines to limit our trace logging to, you can disable this by setting it to None - -TRUNCATE_LOGS = 10 - - -class BaseSocket(object): - """ - Thread safe socket, providing common socket functionality. - """ - - def __init__(self): - self._socket, self._socket_file = None, None - self._is_alive = False - self._connection_time = 0.0 # time when we last connected or disconnected - - # Tracks sending and receiving separately. This should be safe, and doing - # so prevents deadlock where we block writes because we're waiting to read - # a message that isn't coming. - - self._send_lock = threading.RLock() - self._recv_lock = threading.RLock() - - def is_alive(self): - """ - Checks if the socket is known to be closed. We won't be aware if it is - until we either use it or have explicitily shut it down. - - In practice a socket derived from a port knows about its disconnection - after failing to receive data, whereas socket file derived connections - know after either sending or receiving data. - - This means that to have reliable detection for when we're disconnected - you need to continually pull from the socket (which is part of what the - :class:`~stem.control.BaseController` does). - - :returns: **bool** that's **True** if our socket is connected and **False** - otherwise - """ - - return self._is_alive - - def is_localhost(self): - """ - Returns if the connection is for the local system or not. - - :returns: **bool** that's **True** if the connection is for the local host - and **False** otherwise - """ - - return False - - def connection_time(self): - """ - Provides the unix timestamp for when our socket was either connected or - disconnected. That is to say, the time we connected if we're currently - connected and the time we disconnected if we're not connected. - - .. versionadded:: 1.3.0 - - :returns: **float** for when we last connected or disconnected, zero if - we've never connected - """ - - return self._connection_time - - def connect(self): - """ - Connects to a new socket, closing our previous one if we're already - attached. - - :raises: :class:`stem.SocketError` if unable to make a socket - """ - - with self._send_lock: - # Closes the socket if we're currently attached to one. Once we're no - # longer alive it'll be safe to acquire the recv lock because recv() - # calls no longer block (raising SocketClosed instead). - - if self.is_alive(): - self.close() - - with self._recv_lock: - self._socket = self._make_socket() - self._socket_file = self._socket.makefile(mode = 'rwb') - self._is_alive = True - self._connection_time = time.time() - - # It's possible for this to have a transient failure... - # SocketError: [Errno 4] Interrupted system call - # - # It's safe to retry, so give it another try if it fails. - - try: - self._connect() - except stem.SocketError: - self._connect() # single retry - - def close(self): - """ - Shuts down the socket. If it's already closed then this is a no-op. - """ - - with self._send_lock: - # Function is idempotent with one exception: we notify _close() if this - # is causing our is_alive() state to change. - - is_change = self.is_alive() - - if self._socket: - # if we haven't yet established a connection then this raises an error - # socket.error: [Errno 107] Transport endpoint is not connected - - try: - self._socket.shutdown(socket.SHUT_RDWR) - except socket.error: - pass - - # Suppressing unexpected exceptions from close. For instance, if the - # socket's file has already been closed then with python 2.7 that raises - # with... - # error: [Errno 32] Broken pipe - - try: - self._socket.close() - except: - pass - - if self._socket_file: - try: - self._socket_file.close() - except: - pass - - self._socket = None - self._socket_file = None - self._is_alive = False - self._connection_time = time.time() - - if is_change: - self._close() - - def _send(self, message, handler): - """ - Send message in a thread safe manner. Handler is expected to be of the form... - - :: - - my_handler(socket, socket_file, message) - """ - - with self._send_lock: - try: - if not self.is_alive(): - raise stem.SocketClosed() - - handler(self._socket, self._socket_file, message) - except stem.SocketClosed: - # if send_message raises a SocketClosed then we should properly shut - # everything down - - if self.is_alive(): - self.close() - - raise - - def _recv(self, handler): - """ - Receives a message in a thread safe manner. Handler is expected to be of the form... - - :: - - my_handler(socket, socket_file) - """ - - with self._recv_lock: - try: - # makes a temporary reference to the _socket_file because connect() - # and close() may set or unset it - - my_socket, my_socket_file = self._socket, self._socket_file - - if not my_socket or not my_socket_file: - raise stem.SocketClosed() - - return handler(my_socket, my_socket_file) - except stem.SocketClosed: - # If recv_message raises a SocketClosed then we should properly shut - # everything down. However, there's a couple cases where this will - # cause deadlock... - # - # * This SocketClosed was *caused by* a close() call, which is joining - # on our thread. - # - # * A send() call that's currently in flight is about to call close(), - # also attempting to join on us. - # - # To resolve this we make a non-blocking call to acquire the send lock. - # If we get it then great, we can close safely. If not then one of the - # above are in progress and we leave the close to them. - - if self.is_alive(): - if self._send_lock.acquire(False): - self.close() - self._send_lock.release() - - raise - - def _get_send_lock(self): - """ - The send lock is useful to classes that interact with us at a deep level - because it's used to lock :func:`stem.socket.ControlSocket.connect` / - :func:`stem.socket.BaseSocket.close`, and by extension our - :func:`stem.socket.BaseSocket.is_alive` state changes. - - :returns: **threading.RLock** that governs sending messages to our socket - and state changes - """ - - return self._send_lock - - def __enter__(self): - return self - - def __exit__(self, exit_type, value, traceback): - self.close() - - def _connect(self): - """ - Connection callback that can be overwritten by subclasses and wrappers. - """ - - pass - - def _close(self): - """ - Disconnection callback that can be overwritten by subclasses and wrappers. - """ - - pass - - def _make_socket(self): - """ - Constructs and connects new socket. This is implemented by subclasses. - - :returns: **socket.socket** for our configuration - - :raises: - * :class:`stem.SocketError` if unable to make a socket - * **NotImplementedError** if not implemented by a subclass - """ - - raise NotImplementedError('Unsupported Operation: this should be implemented by the BaseSocket subclass') - - -class RelaySocket(BaseSocket): - """ - `Link-level connection - `_ to a Tor - relay. - - .. versionadded:: 1.7.0 - - :var str address: address our socket connects to - :var int port: ORPort our socket connects to - """ - - def __init__(self, address = '127.0.0.1', port = 9050, connect = True): - """ - RelaySocket constructor. - - :param str address: ip address of the relay - :param int port: orport of the relay - :param bool connect: connects to the socket if True, leaves it unconnected otherwise - - :raises: :class:`stem.SocketError` if connect is **True** and we're - unable to establish a connection - """ - - super(RelaySocket, self).__init__() - self.address = address - self.port = port - - if connect: - self.connect() - - def send(self, message): - """ - Sends a message to the relay's ORPort. - - :param str message: message to be formatted and sent to the socket - - :raises: - * :class:`stem.SocketError` if a problem arises in using the socket - * :class:`stem.SocketClosed` if the socket is known to be shut down - """ - - self._send(message, lambda s, sf, msg: _write_to_socket(sf, msg)) - - def recv(self, timeout = None): - """ - Receives a message from the relay. - - :param float timeout: maxiumum number of seconds to await a response, this - blocks indefinitely if **None** - - :returns: bytes for the message received - - :raises: - * :class:`stem.ProtocolError` the content from the socket is malformed - * :class:`stem.SocketClosed` if the socket closes before we receive a complete message - """ - - def wrapped_recv(s, sf): - if timeout is None: - return s.recv() - else: - s.setblocking(0) - s.settimeout(timeout) - - try: - return s.recv() - except (socket.timeout, ssl.SSLError, ssl.SSLWantReadError): - return None - finally: - s.setblocking(1) - - return self._recv(wrapped_recv) - - def is_localhost(self): - return self.address == '127.0.0.1' - - def _make_socket(self): - try: - relay_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - relay_socket.connect((self.address, self.port)) - return ssl.wrap_socket(relay_socket) - except socket.error as exc: - raise stem.SocketError(exc) - - -class ControlSocket(BaseSocket): - """ - Wrapper for a socket connection that speaks the Tor control protocol. To the - better part this transparently handles the formatting for sending and - receiving complete messages. - - Callers should not instantiate this class directly, but rather use subclasses - which are expected to implement the **_make_socket()** method. - """ - - def __init__(self): - super(ControlSocket, self).__init__() - - def send(self, message): - """ - Formats and sends a message to the control socket. For more information see - the :func:`~stem.socket.send_message` function. - - .. deprecated:: 1.7.0 - The **raw** argument was unhelpful and be removed. Use - :func:`stem.socket.send_message` if you need this level of control - instead. - - :param str message: message to be formatted and sent to the socket - - :raises: - * :class:`stem.SocketError` if a problem arises in using the socket - * :class:`stem.SocketClosed` if the socket is known to be shut down - """ - - self._send(message, lambda s, sf, msg: send_message(sf, msg)) - - def recv(self): - """ - Receives a message from the control socket, blocking until we've received - one. For more information see the :func:`~stem.socket.recv_message` function. - - :returns: :class:`~stem.response.ControlMessage` for the message received - - :raises: - * :class:`stem.ProtocolError` the content from the socket is malformed - * :class:`stem.SocketClosed` if the socket closes before we receive a complete message - """ - - return self._recv(lambda s, sf: recv_message(sf)) - - -class ControlPort(ControlSocket): - """ - Control connection to tor. For more information see tor's ControlPort torrc - option. - - :var str address: address our socket connects to - :var int port: ControlPort our socket connects to - """ - - def __init__(self, address = '127.0.0.1', port = 9051, connect = True): - """ - ControlPort constructor. - - :param str address: ip address of the controller - :param int port: port number of the controller - :param bool connect: connects to the socket if True, leaves it unconnected otherwise - - :raises: :class:`stem.SocketError` if connect is **True** and we're - unable to establish a connection - """ - - super(ControlPort, self).__init__() - self.address = address - self.port = port - - if connect: - self.connect() - - def get_address(self): - """ - Provides the ip address our socket connects to. - - .. deprecated:: 1.7.0 - Use the **address** attribute instead. - - :returns: str with the ip address of our socket - """ - - return self.address - - def get_port(self): - """ - Provides the port our socket connects to. - - .. deprecated:: 1.7.0 - Use the **port** attribute instead. - - :returns: int with the port of our socket - """ - - return self.port - - def is_localhost(self): - return self.address == '127.0.0.1' - - def _make_socket(self): - try: - control_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - control_socket.connect((self.address, self.port)) - return control_socket - except socket.error as exc: - raise stem.SocketError(exc) - - -class ControlSocketFile(ControlSocket): - """ - Control connection to tor. For more information see tor's ControlSocket torrc - option. - - :var str path: filesystem path of the socket we connect to - """ - - def __init__(self, path = '/var/run/tor/control', connect = True): - """ - ControlSocketFile constructor. - - :param str socket_path: path where the control socket is located - :param bool connect: connects to the socket if True, leaves it unconnected otherwise - - :raises: :class:`stem.SocketError` if connect is **True** and we're - unable to establish a connection - """ - - super(ControlSocketFile, self).__init__() - self.path = path - - if connect: - self.connect() - - def get_socket_path(self): - """ - Provides the path our socket connects to. - - .. deprecated:: 1.7.0 - Use the **path** attribute instead. - - :returns: str with the path for our control socket - """ - - return self.path - - def is_localhost(self): - return True - - def _make_socket(self): - try: - control_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - control_socket.connect(self.path) - return control_socket - except socket.error as exc: - raise stem.SocketError(exc) - - -def send_message(control_file, message, raw = False): - """ - Sends a message to the control socket, adding the expected formatting for - single verses multi-line messages. Neither message type should contain an - ending newline (if so it'll be treated as a multi-line message with a blank - line at the end). If the message doesn't contain a newline then it's sent - as... - - :: - - \\r\\n - - and if it does contain newlines then it's split on ``\\n`` and sent as... - - :: - - +\\r\\n - \\r\\n - \\r\\n - .\\r\\n - - :param file control_file: file derived from the control socket (see the - socket's makefile() method for more information) - :param str message: message to be sent on the control socket - :param bool raw: leaves the message formatting untouched, passing it to the - socket as-is - - :raises: - * :class:`stem.SocketError` if a problem arises in using the socket - * :class:`stem.SocketClosed` if the socket is known to be shut down - """ - - if not raw: - message = send_formatting(message) - - _write_to_socket(control_file, message) - - if log.is_tracing(): - log_message = message.replace('\r\n', '\n').rstrip() - msg_div = '\n' if '\n' in log_message else ' ' - log.trace('Sent to tor:%s%s' % (msg_div, log_message)) - - -def _write_to_socket(socket_file, message): - try: - socket_file.write(stem.util.str_tools._to_bytes(message)) - socket_file.flush() - except socket.error as exc: - log.info('Failed to send: %s' % exc) - - # When sending there doesn't seem to be a reliable method for - # distinguishing between failures from a disconnect verses other things. - # Just accounting for known disconnection responses. - - if str(exc) == '[Errno 32] Broken pipe': - raise stem.SocketClosed(exc) - else: - raise stem.SocketError(exc) - except AttributeError: - # if the control_file has been closed then flush will receive: - # AttributeError: 'NoneType' object has no attribute 'sendall' - - log.info('Failed to send: file has been closed') - raise stem.SocketClosed('file has been closed') - - -def recv_message(control_file, arrived_at = None): - """ - Pulls from a control socket until we either have a complete message or - encounter a problem. - - :param file control_file: file derived from the control socket (see the - socket's makefile() method for more information) - - :returns: :class:`~stem.response.ControlMessage` read from the socket - - :raises: - * :class:`stem.ProtocolError` the content from the socket is malformed - * :class:`stem.SocketClosed` if the socket closes before we receive - a complete message - """ - - parsed_content, raw_content, first_line = None, None, True - - while True: - try: - line = control_file.readline() - except AttributeError: - # if the control_file has been closed then we will receive: - # AttributeError: 'NoneType' object has no attribute 'recv' - - log.info(ERROR_MSG % ('SocketClosed', 'socket file has been closed')) - raise stem.SocketClosed('socket file has been closed') - except (socket.error, ValueError) as exc: - # When disconnected we get... - # - # Python 2: - # socket.error: [Errno 107] Transport endpoint is not connected - # - # Python 3: - # ValueError: I/O operation on closed file. - - log.info(ERROR_MSG % ('SocketClosed', 'received exception "%s"' % exc)) - raise stem.SocketClosed(exc) - - # Parses the tor control lines. These are of the form... - # \r\n - - if not line: - # if the socket is disconnected then the readline() method will provide - # empty content - - log.info(ERROR_MSG % ('SocketClosed', 'empty socket content')) - raise stem.SocketClosed('Received empty socket content.') - elif not MESSAGE_PREFIX.match(line): - log.info(ERROR_MSG % ('ProtocolError', 'malformed status code/divider, "%s"' % log.escape(line))) - raise stem.ProtocolError('Badly formatted reply line: beginning is malformed') - elif not line.endswith(b'\r\n'): - log.info(ERROR_MSG % ('ProtocolError', 'no CRLF linebreak, "%s"' % log.escape(line))) - raise stem.ProtocolError('All lines should end with CRLF') - - status_code, divider, content = line[:3], line[3:4], line[4:-2] # strip CRLF off content - - if stem.prereq.is_python_3(): - status_code = stem.util.str_tools._to_unicode(status_code) - divider = stem.util.str_tools._to_unicode(divider) - - # Most controller responses are single lines, in which case we don't need - # so much overhead. - - if first_line: - if divider == ' ': - _log_trace(line) - return stem.response.ControlMessage([(status_code, divider, content)], line, arrived_at = arrived_at) - else: - parsed_content, raw_content, first_line = [], bytearray(), False - - raw_content += line - - if divider == '-': - # mid-reply line, keep pulling for more content - parsed_content.append((status_code, divider, content)) - elif divider == ' ': - # end of the message, return the message - parsed_content.append((status_code, divider, content)) - _log_trace(bytes(raw_content)) - return stem.response.ControlMessage(parsed_content, bytes(raw_content), arrived_at = arrived_at) - elif divider == '+': - # data entry, all of the following lines belong to the content until we - # get a line with just a period - - content_block = bytearray(content) - - while True: - try: - line = control_file.readline() - raw_content += line - except socket.error as exc: - log.info(ERROR_MSG % ('SocketClosed', 'received an exception while mid-way through a data reply (exception: "%s", read content: "%s")' % (exc, log.escape(bytes(raw_content))))) - raise stem.SocketClosed(exc) - - if not line.endswith(b'\r\n'): - log.info(ERROR_MSG % ('ProtocolError', 'CRLF linebreaks missing from a data reply, "%s"' % log.escape(bytes(raw_content)))) - raise stem.ProtocolError('All lines should end with CRLF') - elif line == b'.\r\n': - break # data block termination - - line = line[:-2] # strips off the CRLF - - # lines starting with a period are escaped by a second period (as per - # section 2.4 of the control-spec) - - if line.startswith(b'..'): - line = line[1:] - - content_block += b'\n' + line - - # joins the content using a newline rather than CRLF separator (more - # conventional for multi-line string content outside the windows world) - - parsed_content.append((status_code, divider, bytes(content_block))) - else: - # this should never be reached due to the prefix regex, but might as well - # be safe... - - log.warn(ERROR_MSG % ('ProtocolError', "\"%s\" isn't a recognized divider type" % divider)) - raise stem.ProtocolError("Unrecognized divider type '%s': %s" % (divider, stem.util.str_tools._to_unicode(line))) - - -def send_formatting(message): - """ - Performs the formatting expected from sent control messages. For more - information see the :func:`~stem.socket.send_message` function. - - :param str message: message to be formatted - - :returns: **str** of the message wrapped by the formatting expected from - controllers - """ - - # From control-spec section 2.2... - # Command = Keyword OptArguments CRLF / "+" Keyword OptArguments CRLF CmdData - # Keyword = 1*ALPHA - # OptArguments = [ SP *(SP / VCHAR) ] - # - # A command is either a single line containing a Keyword and arguments, or a - # multiline command whose initial keyword begins with +, and whose data - # section ends with a single "." on a line of its own. - - # if we already have \r\n entries then standardize on \n to start with - message = message.replace('\r\n', '\n') - - if '\n' in message: - return '+%s\r\n.\r\n' % message.replace('\n', '\r\n') - else: - return message + '\r\n' - - -def _log_trace(response): - if not log.is_tracing(): - return - - log_message = stem.util.str_tools._to_unicode(response.replace(b'\r\n', b'\n').rstrip()) - log_message_lines = log_message.split('\n') - - if TRUNCATE_LOGS and len(log_message_lines) > TRUNCATE_LOGS: - log_message = '\n'.join(log_message_lines[:TRUNCATE_LOGS] + ['... %i more lines...' % (len(log_message_lines) - TRUNCATE_LOGS)]) - - if len(log_message_lines) > 2: - log.trace('Received from tor:\n%s' % log_message) - else: - log.trace('Received from tor: %s' % log_message.replace('\n', '\\n')) diff --git a/myenv/lib/python3.12/site-packages/stem/util/__init__.py b/myenv/lib/python3.12/site-packages/stem/util/__init__.py deleted file mode 100644 index eb4e061..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/__init__.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Utility functions used by the stem library. -""" - -import datetime - -import stem.prereq - -__all__ = [ - 'conf', - 'connection', - 'enum', - 'log', - 'lru_cache', - 'ordereddict', - 'proc', - 'str_tools', - 'system', - 'term', - 'test_tools', - 'tor_tools', - - 'datetime_to_unix', -] - -# Beginning with Stem 1.7 we take attribute types into account when hashing -# and checking equality. That is to say, if two Stem classes' attributes are -# the same but use different types we no longer consider them to be equal. -# For example... -# -# s1 = Schedule(classes = ['Math', 'Art', 'PE']) -# s2 = Schedule(classes = ('Math', 'Art', 'PE')) -# -# Prior to Stem 1.7 s1 and s2 would be equal, but afterward unless Stem's -# construcotr normalizes the types they won't. -# -# This change in behavior is the right thing to do but carries some risk, so -# we provide the following constant to revert to legacy behavior. If you find -# yourself using it them please let me know (https://www.atagar.com/contact/) -# since this flag will go away in the future. - -HASH_TYPES = True - - -def _hash_value(val): - if not HASH_TYPES: - my_hash = 0 - else: - # TODO: I hate doing this but until Python 2.x support is dropped we - # can't readily be strict about bytes vs unicode for attributes. This - # is because test assertions often use strings, and normalizing this - # would require wrapping most with to_unicode() calls. - # - # This hack will go away when we drop Python 2.x support. - - if _is_str(val): - my_hash = hash('str') - else: - # Hashing common builtins (ints, bools, etc) provide consistant values but many others vary their value on interpreter invokation. - - my_hash = hash(str(type(val))) - - if isinstance(val, (tuple, list)): - for v in val: - my_hash = (my_hash * 1024) + hash(v) - elif isinstance(val, dict): - for k in sorted(val.keys()): - my_hash = (my_hash * 2048) + (hash(k) * 1024) + hash(val[k]) - else: - my_hash += hash(val) - - return my_hash - - -def _is_str(val): - """ - Check if a value is a string. This will be removed when we no longer provide - backward compatibility for the Python 2.x series. - - :param object val: value to be checked - - :returns: **True** if the value is some form of string (unicode or bytes), - and **False** otherwise - """ - - if stem.prereq.is_python_3(): - return isinstance(val, (bytes, str)) - else: - return isinstance(val, (bytes, unicode)) - - -def _is_int(val): - """ - Check if a value is an integer. This will be removed when we no longer - provide backward compatibility for the Python 2.x series. - - :param object val: value to be checked - - :returns: **True** if the value is some form of integer (int or long), - and **False** otherwise - """ - - if stem.prereq.is_python_3(): - return isinstance(val, int) - else: - return isinstance(val, (int, long)) - - -def datetime_to_unix(timestamp): - """ - Converts a utc datetime object to a unix timestamp. - - .. versionadded:: 1.5.0 - - :param datetime timestamp: timestamp to be converted - - :returns: **float** for the unix timestamp of the given datetime object - """ - - if stem.prereq._is_python_26(): - delta = (timestamp - datetime.datetime(1970, 1, 1)) - return delta.days * 86400 + delta.seconds - else: - return (timestamp - datetime.datetime(1970, 1, 1)).total_seconds() - - -def _pubkey_bytes(key): - """ - Normalizes X25509 and ED25519 keys into their public key bytes. - """ - - if _is_str(key): - return key - - if not stem.prereq.is_crypto_available(): - raise ImportError('Key normalization requires the cryptography module') - elif not stem.prereq.is_crypto_available(ed25519 = True): - raise ImportError('Key normalization requires the cryptography ed25519 support') - - from cryptography.hazmat.primitives import serialization - from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey, Ed25519PublicKey - from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey, X25519PublicKey - - if isinstance(key, (X25519PrivateKey, Ed25519PrivateKey)): - return key.public_key().public_bytes( - encoding = serialization.Encoding.Raw, - format = serialization.PublicFormat.Raw, - ) - elif isinstance(key, (X25519PublicKey, Ed25519PublicKey)): - return key.public_bytes( - encoding = serialization.Encoding.Raw, - format = serialization.PublicFormat.Raw, - ) - else: - raise ValueError('Key must be a string or cryptographic public/private key (was %s)' % type(key).__name__) - - -def _hash_attr(obj, *attributes, **kwargs): - """ - Provide a hash value for the given set of attributes. - - :param Object obj: object to be hashed - :param list attributes: attribute names to take into account - :param bool cache: persists hash in a '_cached_hash' object attribute - :param class parent: include parent's hash value - """ - - is_cached = kwargs.get('cache', False) - parent_class = kwargs.get('parent', None) - cached_hash = getattr(obj, '_cached_hash', None) - - if is_cached and cached_hash is not None: - return cached_hash - - my_hash = parent_class.__hash__(obj) if parent_class else 0 - my_hash = my_hash * 1024 + hash(str(type(obj))) - - for attr in attributes: - val = getattr(obj, attr) - my_hash = my_hash * 1024 + _hash_value(val) - - if is_cached: - setattr(obj, '_cached_hash', my_hash) - - return my_hash diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5465aeb..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/conf.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/conf.cpython-312.pyc deleted file mode 100644 index 97a5c02..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/conf.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index f353313..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ed25519.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ed25519.cpython-312.pyc deleted file mode 100644 index c815ce8..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ed25519.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/enum.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/enum.cpython-312.pyc deleted file mode 100644 index 347a708..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/enum.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/log.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/log.cpython-312.pyc deleted file mode 100644 index 5f226b3..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/log.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/lru_cache.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/lru_cache.cpython-312.pyc deleted file mode 100644 index b434c19..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/lru_cache.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ordereddict.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ordereddict.cpython-312.pyc deleted file mode 100644 index 72e52fe..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/ordereddict.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/proc.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/proc.cpython-312.pyc deleted file mode 100644 index 69e3711..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/proc.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/str_tools.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/str_tools.cpython-312.pyc deleted file mode 100644 index 5f5082b..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/str_tools.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/system.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/system.cpython-312.pyc deleted file mode 100644 index a0a68a0..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/system.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/term.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/term.cpython-312.pyc deleted file mode 100644 index fac42d5..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/term.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/test_tools.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/test_tools.cpython-312.pyc deleted file mode 100644 index 76c224e..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/test_tools.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/tor_tools.cpython-312.pyc b/myenv/lib/python3.12/site-packages/stem/util/__pycache__/tor_tools.cpython-312.pyc deleted file mode 100644 index 7ab2adf..0000000 Binary files a/myenv/lib/python3.12/site-packages/stem/util/__pycache__/tor_tools.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/stem/util/conf.py b/myenv/lib/python3.12/site-packages/stem/util/conf.py deleted file mode 100644 index 15c4db8..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/conf.py +++ /dev/null @@ -1,777 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Handlers for text configuration files. Configurations are simple string to -string mappings, with the configuration files using the following rules... - -* the key/value is separated by a space -* anything after a '#' is ignored as a comment -* excess whitespace is trimmed -* empty lines are ignored -* multi-line values can be defined by following the key with lines starting - with a '|' - -For instance... - -:: - - # This is my sample config - user.name Galen - user.password yabba1234 # here's an inline comment - user.notes takes a fancy to pepperjack cheese - blankEntry.example - - msg.greeting - |Multi-line message exclaiming of the - |wonder and awe that is pepperjack! - -... would be loaded as... - -:: - - config = { - 'user.name': 'Galen', - 'user.password': 'yabba1234', - 'user.notes': 'takes a fancy to pepperjack cheese', - 'blankEntry.example': '', - 'msg.greeting': 'Multi-line message exclaiming of the\\nwonder and awe that is pepperjack!', - } - -Configurations are managed via the :class:`~stem.util.conf.Config` class. The -:class:`~stem.util.conf.Config` can be be used directly with its -:func:`~stem.util.conf.Config.get` and :func:`~stem.util.conf.Config.set` -methods, but usually modules will want a local dictionary with just the -configurations that it cares about. - -To do this use the :func:`~stem.util.conf.config_dict` function. For example... - -:: - - import getpass - from stem.util import conf, connection - - def config_validator(key, value): - if key == 'timeout': - # require at least a one second timeout - return max(1, value) - elif key == 'endpoint': - if not connection.is_valid_ipv4_address(value): - raise ValueError("'%s' isn't a valid IPv4 address" % value) - elif key == 'port': - if not connection.is_valid_port(value): - raise ValueError("'%s' isn't a valid port" % value) - elif key == 'retries': - # negative retries really don't make sense - return max(0, value) - - CONFIG = conf.config_dict('ssh_login', { - 'username': getpass.getuser(), - 'password': '', - 'timeout': 10, - 'endpoint': '263.12.8.0', - 'port': 22, - 'reconnect': False, - 'retries': 3, - }, config_validator) - -There's several things going on here so lets take it step by step... - -* The :func:`~stem.util.conf.config_dict` provides a dictionary that's bound - to a given configuration. If the "ssh_proxy_config" configuration changes - then so will the contents of CONFIG. - -* The dictionary we're passing to :func:`~stem.util.conf.config_dict` provides - two important pieces of information: default values and their types. See the - Config's :func:`~stem.util.conf.Config.get` method for how these type - inferences work. - -* The config_validator is a hook we're adding to make sure CONFIG only gets - values we think are valid. In this case it ensures that our timeout value - is at least one second, and rejects endpoints or ports that are invalid. - -Now lets say our user has the following configuration file... - -:: - - username waddle_doo - password jabberwocky - timeout -15 - port 9000000 - retries lots - reconnect true - logging debug - -... and we load it as follows... - -:: - - >>> from stem.util import conf - >>> our_config = conf.get_config('ssh_login') - >>> our_config.load('/home/atagar/user_config') - >>> print CONFIG # doctest: +SKIP - { - "username": "waddle_doo", - "password": "jabberwocky", - "timeout": 1, - "endpoint": "263.12.8.0", - "port": 22, - "reconnect": True, - "retries": 3, - } - -Here's an expanation of what happened... - -* the username, password, and reconnect attributes took the values in the - configuration file - -* the 'config_validator' we added earlier allows for a minimum timeout of one - and rejected the invalid port (with a log message) - -* we weren't able to convert the retries' "lots" value to an integer so it kept - its default value and logged a warning - -* the user didn't supply an endpoint so that remained unchanged - -* our CONFIG didn't have a 'logging' attribute so it was ignored - -**Module Overview:** - -:: - - config_dict - provides a dictionary that's kept in sync with our config - get_config - singleton for getting configurations - uses_settings - provides an annotation for functions that use configurations - parse_enum_csv - helper funcion for parsing confguration entries for enums - - Config - Custom configuration - |- load - reads a configuration file - |- save - writes the current configuration to a file - |- clear - empties our loaded configuration contents - |- add_listener - notifies the given listener when an update occurs - |- clear_listeners - removes any attached listeners - |- keys - provides keys in the loaded configuration - |- set - sets the given key/value pair - |- unused_keys - provides keys that have never been requested - |- get - provides the value for a given key, with type inference - +- get_value - provides the value for a given key as a string -""" - -import inspect -import os -import threading - -import stem.prereq - -from stem.util import log - -try: - # added in python 2.7 - from collections import OrderedDict -except ImportError: - from stem.util.ordereddict import OrderedDict - -CONFS = {} # mapping of identifier to singleton instances of configs - - -class _SyncListener(object): - def __init__(self, config_dict, interceptor): - self.config_dict = config_dict - self.interceptor = interceptor - - def update(self, config, key): - if key in self.config_dict: - new_value = config.get(key, self.config_dict[key]) - - if new_value == self.config_dict[key]: - return # no change - - if self.interceptor: - interceptor_value = self.interceptor(key, new_value) - - if interceptor_value: - new_value = interceptor_value - - self.config_dict[key] = new_value - - -def config_dict(handle, conf_mappings, handler = None): - """ - Makes a dictionary that stays synchronized with a configuration. - - This takes a dictionary of 'config_key => default_value' mappings and - changes the values to reflect our current configuration. This will leave - the previous values alone if... - - * we don't have a value for that config_key - * we can't convert our value to be the same type as the default_value - - If a handler is provided then this is called just prior to assigning new - values to the config_dict. The handler function is expected to accept the - (key, value) for the new values and return what we should actually insert - into the dictionary. If this returns None then the value is updated as - normal. - - For more information about how we convert types see our - :func:`~stem.util.conf.Config.get` method. - - **The dictionary you get from this is manged by the Config class and should - be treated as being read-only.** - - :param str handle: unique identifier for a config instance - :param dict conf_mappings: config key/value mappings used as our defaults - :param functor handler: function referred to prior to assigning values - """ - - selected_config = get_config(handle) - selected_config.add_listener(_SyncListener(conf_mappings, handler).update) - return conf_mappings - - -def get_config(handle): - """ - Singleton constructor for configuration file instances. If a configuration - already exists for the handle then it's returned. Otherwise a fresh instance - is constructed. - - :param str handle: unique identifier used to access this config instance - """ - - if handle not in CONFS: - CONFS[handle] = Config() - - return CONFS[handle] - - -def uses_settings(handle, path, lazy_load = True): - """ - Provides a function that can be used as a decorator for other functions that - require settings to be loaded. Functions with this decorator will be provided - with the configuration as its 'config' keyword argument. - - .. versionchanged:: 1.3.0 - Omits the 'config' argument if the funcion we're decorating doesn't accept - it. - - :: - - uses_settings = stem.util.conf.uses_settings('my_app', '/path/to/settings.cfg') - - @uses_settings - def my_function(config): - print 'hello %s!' % config.get('username', '') - - :param str handle: hande for the configuration - :param str path: path where the configuration should be loaded from - :param bool lazy_load: loads the configuration file when the decorator is - used if true, otherwise it's loaded right away - - :returns: **function** that can be used as a decorator to provide the - configuration - - :raises: **IOError** if we fail to read the configuration file, if - **lazy_load** is true then this arises when we use the decorator - """ - - config = get_config(handle) - - if not lazy_load and not config._settings_loaded: - config.load(path) - config._settings_loaded = True - - def decorator(func): - def wrapped(*args, **kwargs): - if lazy_load and not config._settings_loaded: - config.load(path) - config._settings_loaded = True - - if 'config' in inspect.getfullargspec(func).args: - return func(*args, config = config, **kwargs) - else: - return func(*args, **kwargs) - - return wrapped - - return decorator - - -def parse_enum(key, value, enumeration): - """ - Provides the enumeration value for a given key. This is a case insensitive - lookup and raises an exception if the enum key doesn't exist. - - :param str key: configuration key being looked up - :param str value: value to be parsed - :param stem.util.enum.Enum enumeration: enumeration the values should be in - - :returns: enumeration value - - :raises: **ValueError** if the **value** isn't among the enumeration keys - """ - - return parse_enum_csv(key, value, enumeration, 1)[0] - - -def parse_enum_csv(key, value, enumeration, count = None): - """ - Parses a given value as being a comma separated listing of enumeration keys, - returning the corresponding enumeration values. This is intended to be a - helper for config handlers. The checks this does are case insensitive. - - The **count** attribute can be used to make assertions based on the number of - values. This can be... - - * None to indicate that there's no restrictions. - * An int to indicate that we should have this many values. - * An (int, int) tuple to indicate the range that values can be in. This range - is inclusive and either can be None to indicate the lack of a lower or - upper bound. - - :param str key: configuration key being looked up - :param str value: value to be parsed - :param stem.util.enum.Enum enumeration: enumeration the values should be in - :param int,tuple count: validates that we have this many items - - :returns: list with the enumeration values - - :raises: **ValueError** if the count assertion fails or the **value** entries - don't match the enumeration keys - """ - - values = [val.upper().strip() for val in value.split(',')] - - if values == ['']: - return [] - - if count is None: - pass # no count validateion checks to do - elif isinstance(count, int): - if len(values) != count: - raise ValueError("Config entry '%s' is expected to be %i comma separated values, got '%s'" % (key, count, value)) - elif isinstance(count, tuple) and len(count) == 2: - minimum, maximum = count - - if minimum is not None and len(values) < minimum: - raise ValueError("Config entry '%s' must have at least %i comma separated values, got '%s'" % (key, minimum, value)) - - if maximum is not None and len(values) > maximum: - raise ValueError("Config entry '%s' can have at most %i comma separated values, got '%s'" % (key, maximum, value)) - else: - raise ValueError("The count must be None, an int, or two value tuple. Got '%s' (%s)'" % (count, type(count))) - - result = [] - enum_keys = [k.upper() for k in list(enumeration.keys())] - enum_values = list(enumeration) - - for val in values: - if val in enum_keys: - result.append(enum_values[enum_keys.index(val)]) - else: - raise ValueError("The '%s' entry of config entry '%s' wasn't in the enumeration (expected %s)" % (val, key, ', '.join(enum_keys))) - - return result - - -class Config(object): - """ - Handler for easily working with custom configurations, providing persistence - to and from files. All operations are thread safe. - - **Example usage:** - - User has a file at '/home/atagar/myConfig' with... - - :: - - destination.ip 1.2.3.4 - destination.port blarg - - startup.run export PATH=$PATH:~/bin - startup.run alias l=ls - - And they have a script with... - - :: - - from stem.util import conf - - # Configuration values we'll use in this file. These are mappings of - # configuration keys to the default values we'll use if the user doesn't - # have something different in their config file (or it doesn't match this - # type). - - ssh_config = conf.config_dict('ssh_login', { - 'login.user': 'atagar', - 'login.password': 'pepperjack_is_awesome!', - 'destination.ip': '127.0.0.1', - 'destination.port': 22, - 'startup.run': [], - }) - - # Makes an empty config instance with the handle of 'ssh_login'. This is - # a singleton so other classes can fetch this same configuration from - # this handle. - - user_config = conf.get_config('ssh_login') - - # Loads the user's configuration file, warning if this fails. - - try: - user_config.load("/home/atagar/myConfig") - except IOError as exc: - print "Unable to load the user's config: %s" % exc - - # This replace the contents of ssh_config with the values from the user's - # config file if... - # - # * the key is present in the config file - # * we're able to convert the configuration file's value to the same type - # as what's in the mapping (see the Config.get() method for how these - # type inferences work) - # - # For instance in this case... - # - # * the login values are left alone because they aren't in the user's - # config file - # - # * the 'destination.port' is also left with the value of 22 because we - # can't turn "blarg" into an integer - # - # The other values are replaced, so ssh_config now becomes... - # - # {'login.user': 'atagar', - # 'login.password': 'pepperjack_is_awesome!', - # 'destination.ip': '1.2.3.4', - # 'destination.port': 22, - # 'startup.run': ['export PATH=$PATH:~/bin', 'alias l=ls']} - # - # Information for what values fail to load and why are reported to - # 'stem.util.log'. - - .. versionchanged:: 1.7.0 - Class can now be used as a dictionary. - """ - - def __init__(self): - self._path = None # location we last loaded from or saved to - self._contents = OrderedDict() # configuration key/value pairs - self._listeners = [] # functors to be notified of config changes - - # used for accessing _contents - self._contents_lock = threading.RLock() - - # keys that have been requested (used to provide unused config contents) - self._requested_keys = set() - - # flag to support lazy loading in uses_settings() - self._settings_loaded = False - - def load(self, path = None, commenting = True): - """ - Reads in the contents of the given path, adding its configuration values - to our current contents. If the path is a directory then this loads each - of the files, recursively. - - .. versionchanged:: 1.3.0 - Added support for directories. - - .. versionchanged:: 1.3.0 - Added the **commenting** argument. - - .. versionchanged:: 1.6.0 - Avoid loading vim swap files. - - :param str path: file or directory path to be loaded, this uses the last - loaded path if not provided - :param bool commenting: ignore line content after a '#' if **True**, read - otherwise - - :raises: - * **IOError** if we fail to read the file (it doesn't exist, insufficient - permissions, etc) - * **ValueError** if no path was provided and we've never been provided one - """ - - if path: - self._path = path - elif not self._path: - raise ValueError('Unable to load configuration: no path provided') - - if os.path.isdir(self._path): - for root, dirnames, filenames in os.walk(self._path): - for filename in filenames: - if filename.endswith('.swp'): - continue # vim swap file - - self.load(os.path.join(root, filename)) - - return - - with open(self._path, 'r') as config_file: - read_contents = config_file.readlines() - - with self._contents_lock: - while read_contents: - line = read_contents.pop(0) - - # strips any commenting or excess whitespace - comment_start = line.find('#') if commenting else -1 - - if comment_start != -1: - line = line[:comment_start] - - line = line.strip() - - # parse the key/value pair - if line: - if ' ' in line: - key, value = line.split(' ', 1) - self.set(key, value.strip(), False) - else: - # this might be a multi-line entry, try processing it as such - multiline_buffer = [] - - while read_contents and read_contents[0].lstrip().startswith('|'): - content = read_contents.pop(0).lstrip()[1:] # removes '\s+|' prefix - content = content.rstrip('\n') # trailing newline - multiline_buffer.append(content) - - if multiline_buffer: - self.set(line, '\n'.join(multiline_buffer), False) - else: - self.set(line, '', False) # default to a key => '' mapping - - def save(self, path = None): - """ - Saves configuration contents to disk. If a path is provided then it - replaces the configuration location that we track. - - :param str path: location to be saved to - - :raises: - * **IOError** if we fail to save the file (insufficient permissions, etc) - * **ValueError** if no path was provided and we've never been provided one - """ - - if path: - self._path = path - elif not self._path: - raise ValueError('Unable to save configuration: no path provided') - - with self._contents_lock: - if not os.path.exists(os.path.dirname(self._path)): - os.makedirs(os.path.dirname(self._path)) - - with open(self._path, 'w') as output_file: - for entry_key in self.keys(): - for entry_value in self.get_value(entry_key, multiple = True): - # check for multi line entries - if '\n' in entry_value: - entry_value = '\n|' + entry_value.replace('\n', '\n|') - - output_file.write('%s %s\n' % (entry_key, entry_value)) - - def clear(self): - """ - Drops the configuration contents and reverts back to a blank, unloaded - state. - """ - - with self._contents_lock: - self._contents.clear() - self._requested_keys = set() - - def add_listener(self, listener, backfill = True): - """ - Registers the function to be notified of configuration updates. Listeners - are expected to be functors which accept (config, key). - - :param functor listener: function to be notified when our configuration is changed - :param bool backfill: calls the function with our current values if **True** - """ - - with self._contents_lock: - self._listeners.append(listener) - - if backfill: - for key in self.keys(): - listener(self, key) - - def clear_listeners(self): - """ - Removes all attached listeners. - """ - - self._listeners = [] - - def keys(self): - """ - Provides all keys in the currently loaded configuration. - - :returns: **list** if strings for the configuration keys we've loaded - """ - - return list(self._contents.keys()) - - def unused_keys(self): - """ - Provides the configuration keys that have never been provided to a caller - via :func:`~stem.util.conf.config_dict` or the - :func:`~stem.util.conf.Config.get` and - :func:`~stem.util.conf.Config.get_value` methods. - - :returns: **set** of configuration keys we've loaded but have never been requested - """ - - return set(self.keys()).difference(self._requested_keys) - - def set(self, key, value, overwrite = True): - """ - Appends the given key/value configuration mapping, behaving the same as if - we'd loaded this from a configuration file. - - .. versionchanged:: 1.5.0 - Allow removal of values by overwriting with a **None** value. - - :param str key: key for the configuration mapping - :param str,list value: value we're setting the mapping to - :param bool overwrite: replaces the previous value if **True**, otherwise - the values are appended - """ - - with self._contents_lock: - unicode_type = str if stem.prereq.is_python_3() else unicode - - if value is None: - if overwrite and key in self._contents: - del self._contents[key] - else: - pass # no value so this is a no-op - elif isinstance(value, (bytes, unicode_type)): - if not overwrite and key in self._contents: - self._contents[key].append(value) - else: - self._contents[key] = [value] - - for listener in self._listeners: - listener(self, key) - elif isinstance(value, (list, tuple)): - if not overwrite and key in self._contents: - self._contents[key] += value - else: - self._contents[key] = value - - for listener in self._listeners: - listener(self, key) - else: - raise ValueError("Config.set() only accepts str (bytes or unicode), list, or tuple. Provided value was a '%s'" % type(value)) - - def get(self, key, default = None): - """ - Fetches the given configuration, using the key and default value to - determine the type it should be. Recognized inferences are: - - * **default is a boolean => boolean** - - * values are case insensitive - * provides the default if the value isn't "true" or "false" - - * **default is an integer => int** - - * provides the default if the value can't be converted to an int - - * **default is a float => float** - - * provides the default if the value can't be converted to a float - - * **default is a list => list** - - * string contents for all configuration values with this key - - * **default is a tuple => tuple** - - * string contents for all configuration values with this key - - * **default is a dictionary => dict** - - * values without "=>" in them are ignored - * values are split into key/value pairs on "=>" with extra whitespace - stripped - - :param str key: config setting to be fetched - :param default object: value provided if no such key exists or fails to be converted - - :returns: given configuration value with its type inferred with the above rules - """ - - is_multivalue = isinstance(default, (list, tuple, dict)) - val = self.get_value(key, default, is_multivalue) - - if val == default: - return val # don't try to infer undefined values - - if isinstance(default, bool): - if val.lower() == 'true': - val = True - elif val.lower() == 'false': - val = False - else: - log.debug("Config entry '%s' is expected to be a boolean, defaulting to '%s'" % (key, str(default))) - val = default - elif isinstance(default, int): - try: - val = int(val) - except ValueError: - log.debug("Config entry '%s' is expected to be an integer, defaulting to '%i'" % (key, default)) - val = default - elif isinstance(default, float): - try: - val = float(val) - except ValueError: - log.debug("Config entry '%s' is expected to be a float, defaulting to '%f'" % (key, default)) - val = default - elif isinstance(default, list): - val = list(val) # make a shallow copy - elif isinstance(default, tuple): - val = tuple(val) - elif isinstance(default, dict): - val_map = OrderedDict() - for entry in val: - if '=>' in entry: - entry_key, entry_val = entry.split('=>', 1) - val_map[entry_key.strip()] = entry_val.strip() - else: - log.debug('Ignoring invalid %s config entry (expected a mapping, but "%s" was missing "=>")' % (key, entry)) - val = val_map - - return val - - def get_value(self, key, default = None, multiple = False): - """ - This provides the current value associated with a given key. - - :param str key: config setting to be fetched - :param object default: value provided if no such key exists - :param bool multiple: provides back a list of all values if **True**, - otherwise this returns the last loaded configuration value - - :returns: **str** or **list** of string configuration values associated - with the given key, providing the default if no such key exists - """ - - with self._contents_lock: - if key in self._contents: - self._requested_keys.add(key) - - if multiple: - return self._contents[key] - else: - return self._contents[key][-1] - else: - message_id = 'stem.util.conf.missing_config_key_%s' % key - log.log_once(message_id, log.TRACE, "config entry '%s' not found, defaulting to '%s'" % (key, default)) - return default - - def __getitem__(self, key): - with self._contents_lock: - return self._contents[key] diff --git a/myenv/lib/python3.12/site-packages/stem/util/connection.py b/myenv/lib/python3.12/site-packages/stem/util/connection.py deleted file mode 100644 index 5bfb102..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/connection.py +++ /dev/null @@ -1,797 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Connection and networking based utility functions. - -**Module Overview:** - -:: - - download - download from a given url - get_connections - quieries the connections belonging to a given process - system_resolvers - provides connection resolution methods that are likely to be available - port_usage - brief description of the common usage for a port - - is_valid_ipv4_address - checks if a string is a valid IPv4 address - is_valid_ipv6_address - checks if a string is a valid IPv6 address - is_valid_port - checks if something is a valid representation for a port - is_private_address - checks if an IPv4 address belongs to a private range or not - - address_to_int - provides an integer representation of an IP address - - expand_ipv6_address - provides an IPv6 address with its collapsed portions expanded - get_mask_ipv4 - provides the mask representation for a given number of bits - get_mask_ipv6 - provides the IPv6 mask representation for a given number of bits - -.. data:: Resolver (enum) - - Method for resolving a process' connections. - - .. versionadded:: 1.1.0 - - .. versionchanged:: 1.4.0 - Added **NETSTAT_WINDOWS**. - - .. versionchanged:: 1.6.0 - Added **BSD_FSTAT**. - - .. deprecated:: 1.6.0 - The SOCKSTAT connection resolver is proving to be unreliable - (:trac:`23057`), and will be dropped in the 2.0.0 release unless fixed. - - ==================== =========== - Resolver Description - ==================== =========== - **PROC** /proc contents - **NETSTAT** netstat - **NETSTAT_WINDOWS** netstat command under Windows - **SS** ss command - **LSOF** lsof command - **SOCKSTAT** sockstat command under \\*nix - **BSD_SOCKSTAT** sockstat command under FreeBSD - **BSD_PROCSTAT** procstat command under FreeBSD - **BSD_FSTAT** fstat command under OpenBSD - ==================== =========== -""" - -import collections -import os -import platform -import re -import socket -import sys -import time - -import stem -import stem.util -import stem.util.proc -import stem.util.system - -from stem.util import conf, enum, log, str_tools - -try: - # account for urllib's change between python 2.x and 3.x - import urllib.request as urllib -except ImportError: - import urllib2 as urllib - -# Connection resolution is risky to log about since it's highly likely to -# contain sensitive information. That said, it's also difficult to get right in -# a platform independent fashion. To opt into the logging requried to -# troubleshoot connection resolution set the following... - -LOG_CONNECTION_RESOLUTION = False - -Resolver = enum.Enum( - ('PROC', 'proc'), - ('NETSTAT', 'netstat'), - ('NETSTAT_WINDOWS', 'netstat (windows)'), - ('SS', 'ss'), - ('LSOF', 'lsof'), - ('SOCKSTAT', 'sockstat'), - ('BSD_SOCKSTAT', 'sockstat (bsd)'), - ('BSD_PROCSTAT', 'procstat (bsd)'), - ('BSD_FSTAT', 'fstat (bsd)') -) - -FULL_IPv4_MASK = '255.255.255.255' -FULL_IPv6_MASK = 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF' - -PORT_USES = None # port number => description - -RESOLVER_COMMAND = { - Resolver.PROC: '', - - # -n = prevents dns lookups, -p = include process, -W = don't crop addresses (needed for ipv6) - Resolver.NETSTAT: 'netstat -npW', - - # -a = show all TCP/UDP connections, -n = numeric addresses and ports, -o = include pid - Resolver.NETSTAT_WINDOWS: 'netstat -ano', - - # -n = numeric ports, -p = include process, -t = tcp sockets, -u = udp sockets - Resolver.SS: 'ss -nptu', - - # -n = prevent dns lookups, -P = show port numbers (not names), -i = ip only, -w = no warnings - # (lsof provides a '-p ' but oddly in practice it seems to be ~11-28% slower) - Resolver.LSOF: 'lsof -wnPi', - - Resolver.SOCKSTAT: 'sockstat', - - # -4 = IPv4, -c = connected sockets - Resolver.BSD_SOCKSTAT: 'sockstat -4c', - - # -f = process pid - Resolver.BSD_PROCSTAT: 'procstat -f {pid}', - - # -p = process pid - Resolver.BSD_FSTAT: 'fstat -p {pid}', -} - -RESOLVER_FILTER = { - Resolver.PROC: '', - - # tcp 0 586 192.168.0.1:44284 38.229.79.2:443 ESTABLISHED 15843/tor - Resolver.NETSTAT: '^{protocol}\\s+.*\\s+{local}\\s+{remote}\\s+ESTABLISHED\\s+{pid}/{name}\\s*$', - - # tcp 586 192.168.0.1:44284 38.229.79.2:443 ESTABLISHED 15843 - Resolver.NETSTAT_WINDOWS: '^\\s*{protocol}\\s+{local}\\s+{remote}\\s+ESTABLISHED\\s+{pid}\\s*$', - - # tcp ESTAB 0 0 192.168.0.20:44415 38.229.79.2:443 users:(("tor",15843,9)) - Resolver.SS: '^{protocol}\\s+ESTAB\\s+.*\\s+{local}\\s+{remote}\\s+users:\\(\\("{name}",(?:pid=)?{pid},(?:fd=)?[0-9]+\\)\\)$', - - # tor 3873 atagar 45u IPv4 40994 0t0 TCP 10.243.55.20:45724->194.154.227.109:9001 (ESTABLISHED) - Resolver.LSOF: '^{name}\\s+{pid}\\s+.*\\s+{protocol}\\s+{local}->{remote} \\(ESTABLISHED\\)$', - - # atagar tor 15843 tcp4 192.168.0.20:44092 68.169.35.102:443 ESTABLISHED - Resolver.SOCKSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+{protocol}4\\s+{local}\\s+{remote}\\s+ESTABLISHED$', - - # _tor tor 4397 12 tcp4 172.27.72.202:54011 127.0.0.1:9001 - Resolver.BSD_SOCKSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+\\S+\\s+{protocol}4\\s+{local}\\s+{remote}$', - - # 3561 tor 4 s - rw---n-- 2 0 TCP 10.0.0.2:9050 10.0.0.1:22370 - Resolver.BSD_PROCSTAT: '^\\s*{pid}\\s+{name}\\s+.*\\s+{protocol}\\s+{local}\\s+{remote}$', - - # _tor tor 15843 20* internet stream tcp 0x0 192.168.1.100:36174 --> 4.3.2.1:443 - Resolver.BSD_FSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+.*\\s+{protocol}\\s+\\S+\\s+{local}\\s+[-<]-[->]\\s+{remote}$', -} - - -class Connection(collections.namedtuple('Connection', ['local_address', 'local_port', 'remote_address', 'remote_port', 'protocol', 'is_ipv6'])): - """ - Network connection information. - - .. versionchanged:: 1.5.0 - Added the **is_ipv6** attribute. - - :var str local_address: ip address the connection originates from - :var int local_port: port the connection originates from - :var str remote_address: destionation ip address - :var int remote_port: destination port - :var str protocol: protocol of the connection ('tcp', 'udp', etc) - :var bool is_ipv6: addresses are ipv6 if true, and ipv4 otherwise - """ - - -def download(url, timeout = None, retries = None): - """ - Download from the given url. - - .. versionadded:: 1.8.0 - - :param str url: uncompressed url to download from - :param int timeout: timeout when connection becomes idle, no timeout applied - if **None** - :param int retires: maximum attempts to impose - - :returns: **bytes** content of the given url - - :raises: - * :class:`~stem.DownloadTimeout` if our request timed out - * :class:`~stem.DownloadFailed` if our request fails - """ - - if retries is None: - retries = 0 - - start_time = time.time() - - try: - return urllib.urlopen(url, timeout = timeout).read() - except socket.timeout as exc: - raise stem.DownloadTimeout(url, exc, sys.exc_info()[2], timeout) - except: - exc, stacktrace = sys.exc_info()[1:3] - - if timeout is not None: - timeout -= time.time() - start_time - - if retries > 0 and (timeout is None or timeout > 0): - log.debug('Failed to download from %s (%i retries remaining): %s' % (url, retries, exc)) - return download(url, timeout, retries - 1) - else: - log.debug('Failed to download from %s: %s' % (url, exc)) - raise stem.DownloadFailed(url, exc, stacktrace) - - -def get_connections(resolver = None, process_pid = None, process_name = None): - """ - Retrieves a list of the current connections for a given process. This - provides a list of :class:`~stem.util.connection.Connection`. Note that - addresses may be IPv4 *or* IPv6 depending on what the platform supports. - - .. versionadded:: 1.1.0 - - .. versionchanged:: 1.5.0 - Made our resolver argument optional. - - .. versionchanged:: 1.5.0 - IPv6 support when resolving via proc, netstat, lsof, or ss. - - :param Resolver resolver: method of connection resolution to use, if not - provided then one is picked from among those that should likely be - available for the system - :param int process_pid: pid of the process to retrieve - :param str process_name: name of the process to retrieve - - :returns: **list** of :class:`~stem.util.connection.Connection` instances - - :raises: - * **ValueError** if neither a process_pid nor process_name is provided - - * **IOError** if no connections are available or resolution fails - (generally they're indistinguishable). The common causes are the - command being unavailable or permissions. - """ - - if not resolver: - available_resolvers = system_resolvers() - - if available_resolvers: - resolver = available_resolvers[0] - else: - raise IOError('Unable to determine a connection resolver') - - if not process_pid and not process_name: - raise ValueError('You must provide a pid or process name to provide connections for') - - def _log(msg): - if LOG_CONNECTION_RESOLUTION: - log.debug(msg) - - _log('=' * 80) - _log('Querying connections for resolver: %s, pid: %s, name: %s' % (resolver, process_pid, process_name)) - - if isinstance(process_pid, str): - try: - process_pid = int(process_pid) - except ValueError: - raise ValueError('Process pid was non-numeric: %s' % process_pid) - - if process_pid is None: - all_pids = stem.util.system.pid_by_name(process_name, True) - - if len(all_pids) == 0: - if resolver in (Resolver.NETSTAT_WINDOWS, Resolver.PROC, Resolver.BSD_PROCSTAT): - raise IOError("Unable to determine the pid of '%s'. %s requires the pid to provide the connections." % (process_name, resolver)) - elif len(all_pids) == 1: - process_pid = all_pids[0] - else: - if resolver in (Resolver.NETSTAT_WINDOWS, Resolver.PROC, Resolver.BSD_PROCSTAT): - raise IOError("There's multiple processes named '%s'. %s requires a single pid to provide the connections." % (process_name, resolver)) - - if resolver == Resolver.PROC: - return stem.util.proc.connections(pid = process_pid) - - resolver_command = RESOLVER_COMMAND[resolver].format(pid = process_pid) - - try: - results = stem.util.system.call(resolver_command) - except OSError as exc: - raise IOError("Unable to query '%s': %s" % (resolver_command, exc)) - - resolver_regex_str = RESOLVER_FILTER[resolver].format( - protocol = '(?P\\S+)', - local = '(?P[\\[\\]0-9a-f.:]+)', - remote = '(?P[\\[\\]0-9a-f.:]+)', - pid = process_pid if process_pid else '[0-9]*', - name = process_name if process_name else '\\S*', - ) - - _log('Resolver regex: %s' % resolver_regex_str) - _log('Resolver results:\n%s' % '\n'.join(results)) - - connections = [] - resolver_regex = re.compile(resolver_regex_str) - - def _parse_address_str(addr_type, addr_str, line): - addr, port = addr_str.rsplit(':', 1) - - if not is_valid_ipv4_address(addr) and not is_valid_ipv6_address(addr, allow_brackets = True): - _log('Invalid %s address (%s): %s' % (addr_type, addr, line)) - return None, None - elif not is_valid_port(port): - _log('Invalid %s port (%s): %s' % (addr_type, port, line)) - return None, None - else: - _log('Valid %s:%s: %s' % (addr, port, line)) - return addr.lstrip('[').rstrip(']'), int(port) - - for line in results: - match = resolver_regex.match(line) - - if match: - attr = match.groupdict() - - local_addr, local_port = _parse_address_str('local', attr['local'], line) - remote_addr, remote_port = _parse_address_str('remote', attr['remote'], line) - - if not (local_addr and local_port and remote_addr and remote_port): - continue # missing or malformed field - - protocol = attr['protocol'].lower() - - if protocol == 'tcp6': - protocol = 'tcp' - - if protocol not in ('tcp', 'udp'): - _log('Unrecognized protocol (%s): %s' % (protocol, line)) - continue - - conn = Connection(local_addr, local_port, remote_addr, remote_port, protocol, is_valid_ipv6_address(local_addr)) - connections.append(conn) - _log(str(conn)) - - _log('%i connections found' % len(connections)) - - if not connections: - raise IOError('No results found using: %s' % resolver_command) - - return connections - - -def system_resolvers(system = None): - """ - Provides the types of connection resolvers likely to be available on this platform. - - .. versionadded:: 1.1.0 - - .. versionchanged:: 1.3.0 - Renamed from get_system_resolvers() to system_resolvers(). The old name - still works as an alias, but will be dropped in Stem version 2.0.0. - - :param str system: system to get resolvers for, this is determined by - platform.system() if not provided - - :returns: **list** of :data:`~stem.util.connection.Resolver` instances available on this platform - """ - - if system is None: - if stem.util.system.is_gentoo(): - system = 'Gentoo' - else: - system = platform.system() - - if system == 'Windows': - resolvers = [Resolver.NETSTAT_WINDOWS] - elif system == 'Darwin': - resolvers = [Resolver.LSOF] - elif system == 'OpenBSD': - resolvers = [Resolver.BSD_FSTAT] - elif system == 'FreeBSD': - # Netstat is available, but lacks a '-p' equivalent so we can't associate - # the results to processes. The platform also has a ss command, but it - # belongs to a spreadsheet application. - - resolvers = [Resolver.BSD_SOCKSTAT, Resolver.BSD_PROCSTAT, Resolver.LSOF] - else: - # Sockstat isn't available by default on ubuntu. - - resolvers = [Resolver.NETSTAT, Resolver.SOCKSTAT, Resolver.LSOF, Resolver.SS] - - # remove any that aren't in the user's PATH - - resolvers = [r for r in resolvers if stem.util.system.is_available(RESOLVER_COMMAND[r])] - - # proc resolution, by far, outperforms the others so defaults to this is able - - if stem.util.proc.is_available() and os.access('/proc/net/tcp', os.R_OK) and os.access('/proc/net/udp', os.R_OK): - resolvers = [Resolver.PROC] + resolvers - - return resolvers - - -def port_usage(port): - """ - Provides the common use of a given port. For example, 'HTTP' for port 80 or - 'SSH' for 22. - - .. versionadded:: 1.2.0 - - :param int port: port number to look up - - :returns: **str** with a description for the port, **None** if none is known - """ - - global PORT_USES - - if PORT_USES is None: - config = conf.Config() - config_path = os.path.join(os.path.dirname(__file__), 'ports.cfg') - - try: - config.load(config_path) - port_uses = {} - - for key, value in config.get('port', {}).items(): - if key.isdigit(): - port_uses[int(key)] = value - elif '-' in key: - min_port, max_port = key.split('-', 1) - - for port_entry in range(int(min_port), int(max_port) + 1): - port_uses[port_entry] = value - else: - raise ValueError("'%s' is an invalid key" % key) - - PORT_USES = port_uses - except Exception as exc: - log.warn("BUG: stem failed to load its internal port descriptions from '%s': %s" % (config_path, exc)) - - if not PORT_USES: - return None - - if isinstance(port, str) and port.isdigit(): - port = int(port) - - return PORT_USES.get(port) - - -def is_valid_ipv4_address(address): - """ - Checks if a string is a valid IPv4 address. - - :param str address: string to be checked - - :returns: **True** if input is a valid IPv4 address, **False** otherwise - """ - - if isinstance(address, bytes): - address = str_tools._to_unicode(address) - elif not stem.util._is_str(address): - return False - - # checks if theres four period separated values - - if address.count('.') != 3: - return False - - # checks that each value in the octet are decimal values between 0-255 - for entry in address.split('.'): - if not entry.isdigit() or int(entry) < 0 or int(entry) > 255: - return False - elif entry[0] == '0' and len(entry) > 1: - return False # leading zeros, for instance in '1.2.3.001' - - return True - - -def is_valid_ipv6_address(address, allow_brackets = False): - """ - Checks if a string is a valid IPv6 address. - - :param str address: string to be checked - :param bool allow_brackets: ignore brackets which form '[address]' - - :returns: **True** if input is a valid IPv6 address, **False** otherwise - """ - - if isinstance(address, bytes): - address = str_tools._to_unicode(address) - elif not stem.util._is_str(address): - return False - - if allow_brackets: - if address.startswith('[') and address.endswith(']'): - address = address[1:-1] - - if address.count('.') == 3: - # Likely an ipv4-mapped portion. Check that its vaild, then replace with a - # filler. - - ipv4_start = address.rfind(':', 0, address.find('.')) + 1 - ipv4_end = address.find(':', ipv4_start + 1) - - if ipv4_end == -1: - ipv4_end = None # don't crop the last character - - if not is_valid_ipv4_address(address[ipv4_start:ipv4_end]): - return False - - addr_comp = [address[:ipv4_start - 1] if ipv4_start != 0 else None, 'ff:ff', address[ipv4_end + 1:] if ipv4_end else None] - address = ':'.join(filter(None, addr_comp)) - - # addresses are made up of eight colon separated groups of four hex digits - # with leading zeros being optional - # https://en.wikipedia.org/wiki/IPv6#Address_format - - colon_count = address.count(':') - - if colon_count > 7: - return False # too many groups - elif colon_count != 7 and '::' not in address: - return False # not enough groups and none are collapsed - elif address.count('::') > 1 or ':::' in address: - return False # multiple groupings of zeros can't be collapsed - - for entry in address.split(':'): - if not re.match('^[0-9a-fA-f]{0,4}$', entry): - return False - - return True - - -def is_valid_port(entry, allow_zero = False): - """ - Checks if a string or int is a valid port number. - - :param list,str,int entry: string, integer or list to be checked - :param bool allow_zero: accept port number of zero (reserved by definition) - - :returns: **True** if input is an integer and within the valid port range, **False** otherwise - """ - - try: - value = int(entry) - - if str(value) != str(entry): - return False # invalid leading char, e.g. space or zero - elif allow_zero and value == 0: - return True - else: - return value > 0 and value < 65536 - except TypeError: - if isinstance(entry, (tuple, list)): - for port in entry: - if not is_valid_port(port, allow_zero): - return False - - return True - else: - return False - except ValueError: - return False - - -def is_private_address(address): - """ - Checks if the IPv4 address is in a range belonging to the local network or - loopback. These include: - - * Private ranges: 10.*, 172.16.* - 172.31.*, 192.168.* - * Loopback: 127.* - - .. versionadded:: 1.1.0 - - :param str address: string to be checked - - :returns: **True** if input is in a private range, **False** otherwise - - :raises: **ValueError** if the address isn't a valid IPv4 address - """ - - if not is_valid_ipv4_address(address): - raise ValueError("'%s' isn't a valid IPv4 address" % address) - - # checks for any of the simple wildcard ranges - - if address.startswith('10.') or address.startswith('192.168.') or address.startswith('127.'): - return True - - # checks for the 172.16.* - 172.31.* range - - if address.startswith('172.'): - second_octet = int(address.split('.')[1]) - - if second_octet >= 16 and second_octet <= 31: - return True - - return False - - -def address_to_int(address): - """ - Provides an integer representation of a IPv4 or IPv6 address that can be used - for sorting. - - .. versionadded:: 1.5.0 - - :param str address: IPv4 or IPv6 address - - :returns: **int** representation of the address - """ - - # TODO: Could be neat to also use this for serialization if we also had an - # int_to_address() function. - - return int(_address_to_binary(address), 2) - - -def expand_ipv6_address(address): - """ - Expands abbreviated IPv6 addresses to their full colon separated hex format. - For instance... - - :: - - >>> expand_ipv6_address('2001:db8::ff00:42:8329') - '2001:0db8:0000:0000:0000:ff00:0042:8329' - - >>> expand_ipv6_address('::') - '0000:0000:0000:0000:0000:0000:0000:0000' - - >>> expand_ipv6_address('::ffff:5.9.158.75') - '0000:0000:0000:0000:0000:ffff:0509:9e4b' - - :param str address: IPv6 address to be expanded - - :raises: **ValueError** if the address can't be expanded due to being malformed - """ - - if not is_valid_ipv6_address(address): - raise ValueError("'%s' isn't a valid IPv6 address" % address) - - # expand ipv4-mapped portions of addresses - if address.count('.') == 3: - ipv4_start = address.rfind(':', 0, address.find('.')) + 1 - ipv4_end = address.find(':', ipv4_start + 1) - - if ipv4_end == -1: - ipv4_end = None # don't crop the last character - - # Converts ipv4 address to its hex ipv6 representation. For instance... - # - # '5.9.158.75' => '0509:9e4b' - - ipv4_bin = _address_to_binary(address[ipv4_start:ipv4_end]) - groupings = [ipv4_bin[16 * i:16 * (i + 1)] for i in range(2)] - ipv6_snippet = ':'.join(['%04x' % int(group, 2) for group in groupings]) - - addr_comp = [address[:ipv4_start - 1] if ipv4_start != 0 else None, ipv6_snippet, address[ipv4_end + 1:] if ipv4_end else None] - address = ':'.join(filter(None, addr_comp)) - - # expands collapsed groupings, there can only be a single '::' in a valid - # address - if '::' in address: - missing_groups = 7 - address.count(':') - address = address.replace('::', '::' + ':' * missing_groups) - - # inserts missing zeros - for index in range(8): - start = index * 5 - end = address.index(':', start) if index != 7 else len(address) - missing_zeros = 4 - (end - start) - - if missing_zeros > 0: - address = address[:start] + '0' * missing_zeros + address[start:] - - return address - - -def get_mask_ipv4(bits): - """ - Provides the IPv4 mask for a given number of bits, in the dotted-quad format. - - :param int bits: number of bits to be converted - - :returns: **str** with the subnet mask representation for this many bits - - :raises: **ValueError** if given a number of bits outside the range of 0-32 - """ - - if bits > 32 or bits < 0: - raise ValueError('A mask can only be 0-32 bits, got %i' % bits) - elif bits == 32: - return FULL_IPv4_MASK - - # get the binary representation of the mask - mask_bin = _get_binary(2 ** bits - 1, 32)[::-1] - - # breaks it into eight character groupings - octets = [mask_bin[8 * i:8 * (i + 1)] for i in range(4)] - - # converts each octet into its integer value - return '.'.join([str(int(octet, 2)) for octet in octets]) - - -def get_mask_ipv6(bits): - """ - Provides the IPv6 mask for a given number of bits, in the hex colon-delimited - format. - - :param int bits: number of bits to be converted - - :returns: **str** with the subnet mask representation for this many bits - - :raises: **ValueError** if given a number of bits outside the range of 0-128 - """ - - if bits > 128 or bits < 0: - raise ValueError('A mask can only be 0-128 bits, got %i' % bits) - elif bits == 128: - return FULL_IPv6_MASK - - # get the binary representation of the mask - mask_bin = _get_binary(2 ** bits - 1, 128)[::-1] - - # breaks it into sixteen character groupings - groupings = [mask_bin[16 * i:16 * (i + 1)] for i in range(8)] - - # converts each group into its hex value - return ':'.join(['%04x' % int(group, 2) for group in groupings]).upper() - - -def _get_masked_bits(mask): - """ - Provides the number of bits that an IPv4 subnet mask represents. Note that - not all masks can be represented by a bit count. - - :param str mask: mask to be converted - - :returns: **int** with the number of bits represented by the mask - - :raises: **ValueError** if the mask is invalid or can't be converted - """ - - if not is_valid_ipv4_address(mask): - raise ValueError("'%s' is an invalid subnet mask" % mask) - - # converts octets to binary representation - mask_bin = _address_to_binary(mask) - mask_match = re.match('^(1*)(0*)$', mask_bin) - - if mask_match: - return 32 - len(mask_match.groups()[1]) - else: - raise ValueError('Unable to convert mask to a bit count: %s' % mask) - - -def _get_binary(value, bits): - """ - Provides the given value as a binary string, padded with zeros to the given - number of bits. - - :param int value: value to be converted - :param int bits: number of bits to pad to - """ - - # http://www.daniweb.com/code/snippet216539.html - return ''.join([str((value >> y) & 1) for y in range(bits - 1, -1, -1)]) - - -# TODO: In stem 2.x we should consider unifying this with -# stem.client.datatype's _unpack_ipv4_address() and _unpack_ipv6_address(). - -def _address_to_binary(address): - """ - Provides the binary value for an IPv4 or IPv6 address. - - :returns: **str** with the binary representation of this address - - :raises: **ValueError** if address is neither an IPv4 nor IPv6 address - """ - - if is_valid_ipv4_address(address): - return ''.join([_get_binary(int(octet), 8) for octet in address.split('.')]) - elif is_valid_ipv6_address(address): - address = expand_ipv6_address(address) - return ''.join([_get_binary(int(grouping, 16), 16) for grouping in address.split(':')]) - else: - raise ValueError("'%s' is neither an IPv4 or IPv6 address" % address) - - -# TODO: drop with stem 2.x -# We renamed our methods to drop a redundant 'get_*' prefix, so alias the old -# names for backward compatability. - -get_system_resolvers = system_resolvers diff --git a/myenv/lib/python3.12/site-packages/stem/util/ed25519.py b/myenv/lib/python3.12/site-packages/stem/util/ed25519.py deleted file mode 100644 index a05e170..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/ed25519.py +++ /dev/null @@ -1,294 +0,0 @@ -# The following is copied from... -# -# https://github.com/pyca/ed25519 -# -# This is under the CC0 license. For more information please see... -# -# https://github.com/pyca/cryptography/issues/5068 - - -# ed25519.py - Optimized version of the reference implementation of Ed25519 -# -# Written in 2011? by Daniel J. Bernstein -# 2013 by Donald Stufft -# 2013 by Alex Gaynor -# 2013 by Greg Price -# -# To the extent possible under law, the author(s) have dedicated all copyright -# and related and neighboring rights to this software to the public domain -# worldwide. This software is distributed without any warranty. -# -# You should have received a copy of the CC0 Public Domain Dedication along -# with this software. If not, see -# . - -""" -NB: This code is not safe for use with secret keys or secret data. -The only safe use of this code is for verifying signatures on public messages. - -Functions for computing the public key of a secret key and for signing -a message are included, namely publickey_unsafe and signature_unsafe, -for testing purposes only. - -The root of the problem is that Python's long-integer arithmetic is -not designed for use in cryptography. Specifically, it may take more -or less time to execute an operation depending on the values of the -inputs, and its memory access patterns may also depend on the inputs. -This opens it to timing and cache side-channel attacks which can -disclose data to an attacker. We rely on Python's long-integer -arithmetic, so we cannot handle secrets without risking their disclosure. -""" - -import hashlib -import operator - -__version__ = "1.0.dev0" - -indexbytes = operator.getitem -intlist2bytes = bytes -int2byte = operator.methodcaller("to_bytes", 1, "big") - -b = 256 -q = 2 ** 255 - 19 -l = 2 ** 252 + 27742317777372353535851937790883648493 - - -def H(m): - return hashlib.sha512(m).digest() - - -def pow2(x, p): - """== pow(x, 2**p, q)""" - while p > 0: - x = x * x % q - p -= 1 - return x - - -def inv(z): - """$= z^{-1} \mod q$, for z != 0""" - # Adapted from curve25519_athlon.c in djb's Curve25519. - z2 = z * z % q # 2 - z9 = pow2(z2, 2) * z % q # 9 - z11 = z9 * z2 % q # 11 - z2_5_0 = (z11 * z11) % q * z9 % q # 31 == 2^5 - 2^0 - z2_10_0 = pow2(z2_5_0, 5) * z2_5_0 % q # 2^10 - 2^0 - z2_20_0 = pow2(z2_10_0, 10) * z2_10_0 % q # ... - z2_40_0 = pow2(z2_20_0, 20) * z2_20_0 % q - z2_50_0 = pow2(z2_40_0, 10) * z2_10_0 % q - z2_100_0 = pow2(z2_50_0, 50) * z2_50_0 % q - z2_200_0 = pow2(z2_100_0, 100) * z2_100_0 % q - z2_250_0 = pow2(z2_200_0, 50) * z2_50_0 % q # 2^250 - 2^0 - return pow2(z2_250_0, 5) * z11 % q # 2^255 - 2^5 + 11 = q - 2 - - -d = -121665 * inv(121666) % q -I = pow(2, (q - 1) // 4, q) - - -def xrecover(y): - xx = (y * y - 1) * inv(d * y * y + 1) - x = pow(xx, (q + 3) // 8, q) - - if (x * x - xx) % q != 0: - x = (x * I) % q - - if x % 2 != 0: - x = q-x - - return x - - -By = 4 * inv(5) -Bx = xrecover(By) -B = (Bx % q, By % q, 1, (Bx * By) % q) -ident = (0, 1, 1, 0) - - -def edwards_add(P, Q): - # This is formula sequence 'addition-add-2008-hwcd-3' from - # http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - (x1, y1, z1, t1) = P - (x2, y2, z2, t2) = Q - - a = (y1-x1)*(y2-x2) % q - b = (y1+x1)*(y2+x2) % q - c = t1*2*d*t2 % q - dd = z1*2*z2 % q - e = b - a - f = dd - c - g = dd + c - h = b + a - x3 = e*f - y3 = g*h - t3 = e*h - z3 = f*g - - return (x3 % q, y3 % q, z3 % q, t3 % q) - - -def edwards_double(P): - # This is formula sequence 'dbl-2008-hwcd' from - # http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - (x1, y1, z1, t1) = P - - a = x1*x1 % q - b = y1*y1 % q - c = 2*z1*z1 % q - # dd = -a - e = ((x1+y1)*(x1+y1) - a - b) % q - g = -a + b # dd + b - f = g - c - h = -a - b # dd - b - x3 = e*f - y3 = g*h - t3 = e*h - z3 = f*g - - return (x3 % q, y3 % q, z3 % q, t3 % q) - - -def scalarmult(P, e): - if e == 0: - return ident - Q = scalarmult(P, e // 2) - Q = edwards_double(Q) - if e & 1: - Q = edwards_add(Q, P) - return Q - - -# Bpow[i] == scalarmult(B, 2**i) -Bpow = [] - - -def make_Bpow(): - P = B - for i in range(253): - Bpow.append(P) - P = edwards_double(P) -make_Bpow() - - -def scalarmult_B(e): - """ - Implements scalarmult(B, e) more efficiently. - """ - # scalarmult(B, l) is the identity - e = e % l - P = ident - for i in range(253): - if e & 1: - P = edwards_add(P, Bpow[i]) - e = e // 2 - assert e == 0, e - return P - - -def encodeint(y): - bits = [(y >> i) & 1 for i in range(b)] - return b''.join([ - int2byte(sum([bits[i * 8 + j] << j for j in range(8)])) - for i in range(b//8) - ]) - - -def encodepoint(P): - (x, y, z, t) = P - zi = inv(z) - x = (x * zi) % q - y = (y * zi) % q - bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1] - return b''.join([ - int2byte(sum([bits[i * 8 + j] << j for j in range(8)])) - for i in range(b // 8) - ]) - - -def bit(h, i): - return (indexbytes(h, i // 8) >> (i % 8)) & 1 - - -def publickey_unsafe(sk): - """ - Not safe to use with secret keys or secret data. - - See module docstring. This function should be used for testing only. - """ - h = H(sk) - a = 2 ** (b - 2) + sum(2 ** i * bit(h, i) for i in range(3, b - 2)) - A = scalarmult_B(a) - return encodepoint(A) - - -def Hint(m): - h = H(m) - return sum(2 ** i * bit(h, i) for i in range(2 * b)) - - -def signature_unsafe(m, sk, pk): - """ - Not safe to use with secret keys or secret data. - - See module docstring. This function should be used for testing only. - """ - h = H(sk) - a = 2 ** (b - 2) + sum(2 ** i * bit(h, i) for i in range(3, b - 2)) - r = Hint( - intlist2bytes([indexbytes(h, j) for j in range(b // 8, b // 4)]) + m - ) - R = scalarmult_B(r) - S = (r + Hint(encodepoint(R) + pk + m) * a) % l - return encodepoint(R) + encodeint(S) - - -def isoncurve(P): - (x, y, z, t) = P - return (z % q != 0 and - x*y % q == z*t % q and - (y*y - x*x - z*z - d*t*t) % q == 0) - - -def decodeint(s): - return sum(2 ** i * bit(s, i) for i in range(0, b)) - - -def decodepoint(s): - y = sum(2 ** i * bit(s, i) for i in range(0, b - 1)) - x = xrecover(y) - if x & 1 != bit(s, b-1): - x = q - x - P = (x, y, 1, (x*y) % q) - if not isoncurve(P): - raise ValueError("decoding point that is not on curve") - return P - - -class SignatureMismatch(Exception): - pass - - -def checkvalid(s, m, pk): - """ - Not safe to use when any argument is secret. - - See module docstring. This function should be used only for - verifying public signatures of public messages. - """ - if len(s) != b // 4: - raise ValueError("signature length is wrong") - - if len(pk) != b // 8: - raise ValueError("public-key length is wrong") - - R = decodepoint(s[:b // 8]) - A = decodepoint(pk) - S = decodeint(s[b // 8:b // 4]) - h = Hint(encodepoint(R) + pk + m) - - (x1, y1, z1, t1) = P = scalarmult_B(S) - (x2, y2, z2, t2) = Q = edwards_add(R, scalarmult(A, h)) - - if (not isoncurve(P) or not isoncurve(Q) or - (x1*z2 - x2*z1) % q != 0 or (y1*z2 - y2*z1) % q != 0): - raise SignatureMismatch("signature does not pass verification") diff --git a/myenv/lib/python3.12/site-packages/stem/util/enum.py b/myenv/lib/python3.12/site-packages/stem/util/enum.py deleted file mode 100644 index 9e9d222..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/enum.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Basic enumeration, providing ordered types for collections. These can be -constructed as simple type listings... - -:: - - >>> from stem.util import enum - >>> insects = enum.Enum('ANT', 'WASP', 'LADYBUG', 'FIREFLY') - >>> insects.ANT - 'Ant' - >>> tuple(insects) - ('Ant', 'Wasp', 'Ladybug', 'Firefly') - -... or with overwritten string counterparts... - -:: - - >>> from stem.util import enum - >>> pets = enum.Enum(('DOG', 'Skippy'), 'CAT', ('FISH', 'Nemo')) - >>> pets.DOG - 'Skippy' - >>> pets.CAT - 'Cat' - -**Module Overview:** - -:: - - UppercaseEnum - Provides an enum instance with capitalized values - - Enum - Provides a basic, ordered enumeration - |- keys - string representation of our enum keys - |- index_of - index of an enum value - |- next - provides the enum after a given enum value - |- previous - provides the enum before a given value - |- __getitem__ - provides the value for an enum key - +- __iter__ - iterator over our enum keys -""" - -import stem.util - - -def UppercaseEnum(*args): - """ - Provides an :class:`~stem.util.enum.Enum` instance where the values are - identical to the keys. Since the keys are uppercase by convention this means - the values are too. For instance... - - :: - - >>> from stem.util import enum - >>> runlevels = enum.UppercaseEnum('DEBUG', 'INFO', 'NOTICE', 'WARN', 'ERROR') - >>> runlevels.DEBUG - 'DEBUG' - - :param list args: enum keys to initialize with - - :returns: :class:`~stem.util.enum.Enum` instance with the given keys - """ - - return Enum(*[(v, v) for v in args]) - - -class Enum(object): - """ - Basic enumeration. - """ - - def __init__(self, *args): - from stem.util.str_tools import _to_camel_case - - # ordered listings of our keys and values - keys, values = [], [] - - for entry in args: - if stem.util._is_str(entry): - key, val = entry, _to_camel_case(entry) - elif isinstance(entry, tuple) and len(entry) == 2: - key, val = entry - else: - raise ValueError('Unrecognized input: %s' % args) - - keys.append(key) - values.append(val) - setattr(self, key, val) - - self._keys = tuple(keys) - self._values = tuple(values) - - def keys(self): - """ - Provides an ordered listing of the enumeration keys in this set. - - :returns: **list** with our enum keys - """ - - return list(self._keys) - - def index_of(self, value): - """ - Provides the index of the given value in the collection. - - :param str value: entry to be looked up - - :returns: **int** index of the given entry - - :raises: **ValueError** if no such element exists - """ - - return self._values.index(value) - - def next(self, value): - """ - Provides the next enumeration after the given value. - - :param str value: enumeration for which to get the next entry - - :returns: enum value following the given entry - - :raises: **ValueError** if no such element exists - """ - - if value not in self._values: - raise ValueError('No such enumeration exists: %s (options: %s)' % (value, ', '.join(self._values))) - - next_index = (self._values.index(value) + 1) % len(self._values) - return self._values[next_index] - - def previous(self, value): - """ - Provides the previous enumeration before the given value. - - :param str value: enumeration for which to get the previous entry - - :returns: enum value proceeding the given entry - - :raises: **ValueError** if no such element exists - """ - - if value not in self._values: - raise ValueError('No such enumeration exists: %s (options: %s)' % (value, ', '.join(self._values))) - - prev_index = (self._values.index(value) - 1) % len(self._values) - return self._values[prev_index] - - def __getitem__(self, item): - """ - Provides the values for the given key. - - :param str item: key to be looked up - - :returns: **str** with the value for the given key - - :raises: **ValueError** if the key doesn't exist - """ - - if item in vars(self): - return getattr(self, item) - else: - keys = ', '.join(self.keys()) - raise ValueError("'%s' isn't among our enumeration keys, which includes: %s" % (item, keys)) - - def __iter__(self): - """ - Provides an ordered listing of the enums in this set. - """ - - for entry in self._values: - yield entry diff --git a/myenv/lib/python3.12/site-packages/stem/util/log.py b/myenv/lib/python3.12/site-packages/stem/util/log.py deleted file mode 100644 index 92e7625..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/log.py +++ /dev/null @@ -1,278 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Functions to aid library logging. The default logging -:data:`~stem.util.log.Runlevel` is usually NOTICE and above. - -**Stem users are more than welcome to listen for stem events, but these -functions are not being vended to our users. They may change in the future, use -them at your own risk.** - -**Module Overview:** - -:: - - get_logger - provides the stem's Logger instance - logging_level - converts a runlevel to its logging number - escape - escapes special characters in a message in preparation for logging - - log - logs a message at the given runlevel - log_once - logs a message, deduplicating if it has already been logged - trace - logs a message at the TRACE runlevel - debug - logs a message at the DEBUG runlevel - info - logs a message at the INFO runlevel - notice - logs a message at the NOTICE runlevel - warn - logs a message at the WARN runlevel - error - logs a message at the ERROR runlevel - - LogBuffer - Buffers logged events so they can be iterated over. - |- is_empty - checks if there's events in our buffer - +- __iter__ - iterates over and removes the buffered events - - log_to_stdout - reports further logged events to stdout - -.. data:: Runlevel (enum) - - Enumeration for logging runlevels. - - ========== =========== - Runlevel Description - ========== =========== - **ERROR** critical issue occurred, the user needs to be notified - **WARN** non-critical issue occurred that the user should be aware of - **NOTICE** information that is helpful to the user - **INFO** high level library activity - **DEBUG** low level library activity - **TRACE** request/reply logging - ========== =========== -""" - -import logging - -import stem.prereq -import stem.util.enum -import stem.util.str_tools - -# Logging runlevels. These are *very* commonly used so including shorter -# aliases (so they can be referenced as log.DEBUG, log.WARN, etc). - -Runlevel = stem.util.enum.UppercaseEnum('TRACE', 'DEBUG', 'INFO', 'NOTICE', 'WARN', 'ERROR') -TRACE, DEBUG, INFO, NOTICE, WARN, ERR = list(Runlevel) - -# mapping of runlevels to the logger module's values, TRACE and DEBUG aren't -# built into the module - -LOG_VALUES = { - Runlevel.TRACE: logging.DEBUG - 5, - Runlevel.DEBUG: logging.DEBUG, - Runlevel.INFO: logging.INFO, - Runlevel.NOTICE: logging.INFO + 5, - Runlevel.WARN: logging.WARN, - Runlevel.ERROR: logging.ERROR, -} - -logging.addLevelName(LOG_VALUES[TRACE], 'TRACE') -logging.addLevelName(LOG_VALUES[NOTICE], 'NOTICE') - -LOGGER = logging.getLogger('stem') -LOGGER.setLevel(LOG_VALUES[TRACE]) - -FORMATTER = logging.Formatter( - fmt = '%(asctime)s [%(levelname)s] %(message)s', - datefmt = '%m/%d/%Y %H:%M:%S', -) - -# There's some messages that we don't want to log more than once. This set has -# the messages IDs that we've logged which fall into this category. -DEDUPLICATION_MESSAGE_IDS = set() - -# Adds a default nullhandler for the stem logger, suppressing the 'No handlers -# could be found for logger "stem"' warning as per... -# http://docs.python.org/release/3.1.3/library/logging.html#configuring-logging-for-a-library - - -class _NullHandler(logging.Handler): - def __init__(self): - logging.Handler.__init__(self, level = logging.FATAL + 5) # disable logging - - def emit(self, record): - pass - - -if not LOGGER.handlers: - LOGGER.addHandler(_NullHandler()) - - -def get_logger(): - """ - Provides the stem logger. - - :returns: **logging.Logger** for stem - """ - - return LOGGER - - -def logging_level(runlevel): - """ - Translates a runlevel into the value expected by the logging module. - - :param stem.util.log.Runlevel runlevel: runlevel to be returned, no logging if **None** - """ - - if runlevel: - return LOG_VALUES[runlevel] - else: - return logging.FATAL + 5 - - -def is_tracing(): - """ - Checks if we're logging at the trace runlevel. - - .. versionadded:: 1.6.0 - - :returns: **True** if we're logging at the trace runlevel and **False** otherwise - """ - - for handler in get_logger().handlers: - if handler.level <= logging_level(TRACE): - return True - - return False - - -def escape(message): - """ - Escapes specific sequences for logging (newlines, tabs, carriage returns). If - the input is **bytes** then this converts it to **unicode** under python 3.x. - - :param str message: string to be escaped - - :returns: str that is escaped - """ - - if stem.prereq.is_python_3(): - message = stem.util.str_tools._to_unicode(message) - - for pattern, replacement in (('\n', '\\n'), ('\r', '\\r'), ('\t', '\\t')): - message = message.replace(pattern, replacement) - - return message - - -def log(runlevel, message): - """ - Logs a message at the given runlevel. - - :param stem.util.log.Runlevel runlevel: runlevel to log the message at, logging is skipped if **None** - :param str message: message to be logged - """ - - if runlevel: - LOGGER.log(LOG_VALUES[runlevel], message) - - -def log_once(message_id, runlevel, message): - """ - Logs a message at the given runlevel. If a message with this ID has already - been logged then this is a no-op. - - :param str message_id: unique message identifier to deduplicate on - :param stem.util.log.Runlevel runlevel: runlevel to log the message at, logging is skipped if **None** - :param str message: message to be logged - - :returns: **True** if we log the message, **False** otherwise - """ - - if not runlevel or message_id in DEDUPLICATION_MESSAGE_IDS: - return False - else: - DEDUPLICATION_MESSAGE_IDS.add(message_id) - log(runlevel, message) - -# shorter aliases for logging at a runlevel - - -def trace(message): - log(Runlevel.TRACE, message) - - -def debug(message): - log(Runlevel.DEBUG, message) - - -def info(message): - log(Runlevel.INFO, message) - - -def notice(message): - log(Runlevel.NOTICE, message) - - -def warn(message): - log(Runlevel.WARN, message) - - -def error(message): - log(Runlevel.ERROR, message) - - -class LogBuffer(logging.Handler): - """ - Basic log handler that listens for stem events and stores them so they can be - read later. Log entries are cleared as they are read. - - .. versionchanged:: 1.4.0 - Added the yield_records argument. - - .. deprecated:: 1.8.0 - This will be dropped in Stem 2.x. Use python's logging.BufferingHandler instead. - """ - - def __init__(self, runlevel, yield_records = False): - # TODO: At least in python 2.6 logging.Handler has a bug in that it doesn't - # extend object, causing our super() call to fail. When we drop python 2.6 - # support we should switch back to using super() instead. - # - # super(LogBuffer, self).__init__(level = logging_level(runlevel)) - - logging.Handler.__init__(self, level = logging_level(runlevel)) - - self.formatter = FORMATTER - self._buffer = [] - self._yield_records = yield_records - - def is_empty(self): - return not bool(self._buffer) - - def __iter__(self): - while self._buffer: - record = self._buffer.pop(0) - yield record if self._yield_records else self.formatter.format(record) - - def emit(self, record): - self._buffer.append(record) - - -class _StdoutLogger(logging.Handler): - def __init__(self, runlevel): - logging.Handler.__init__(self, level = logging_level(runlevel)) - - self.formatter = logging.Formatter( - fmt = '%(asctime)s [%(levelname)s] %(message)s', - datefmt = '%m/%d/%Y %H:%M:%S') - - def emit(self, record): - print(self.formatter.format(record)) - - -def log_to_stdout(runlevel): - """ - Logs further events to stdout. - - :param stem.util.log.Runlevel runlevel: minimum runlevel a message needs to be to be logged - """ - - get_logger().addHandler(_StdoutLogger(runlevel)) diff --git a/myenv/lib/python3.12/site-packages/stem/util/lru_cache.py b/myenv/lib/python3.12/site-packages/stem/util/lru_cache.py deleted file mode 100644 index 011d445..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/lru_cache.py +++ /dev/null @@ -1,182 +0,0 @@ -# Drop in replace for python 3.2's collections.lru_cache, from... -# http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/ -# -# ... which is under the MIT license. Stem users should *not* rely upon this -# module. It will be removed when we drop support for python 3.2 and below. - -""" -Memoization decorator that caches a function's return value. If later called -with the same arguments then the cached value is returned rather than -reevaluated. - -This is a a python 2.x port of `functools.lru_cache -`_. If -using python 3.2 or later you should use that instead. -""" - -from collections import namedtuple -from functools import update_wrapper -from threading import RLock - -_CacheInfo = namedtuple('CacheInfo', ['hits', 'misses', 'maxsize', 'currsize']) - - -class _HashedSeq(list): - __slots__ = 'hashvalue' - - def __init__(self, tup, hash=hash): - self[:] = tup - self.hashvalue = hash(tup) - - def __hash__(self): - return self.hashvalue - - -def _make_key(args, kwds, typed, - kwd_mark = (object(),), - fasttypes = set([int, str, frozenset, type(None)]), - sorted=sorted, tuple=tuple, type=type, len=len): - 'Make a cache key from optionally typed positional and keyword arguments' - key = args - if kwds: - sorted_items = sorted(kwds.items()) - key += kwd_mark - for item in sorted_items: - key += item - if typed: - key += tuple(type(v) for v in args) - if kwds: - key += tuple(type(v) for k, v in sorted_items) - elif len(key) == 1 and type(key[0]) in fasttypes: - return key[0] - return _HashedSeq(key) - - -def lru_cache(maxsize=100, typed=False): - """Least-recently-used cache decorator. - - If *maxsize* is set to None, the LRU features are disabled and the cache - can grow without bound. - - If *typed* is True, arguments of different types will be cached separately. - For example, f(3.0) and f(3) will be treated as distinct calls with - distinct results. - - Arguments to the cached function must be hashable. - - View the cache statistics named tuple (hits, misses, maxsize, currsize) with - f.cache_info(). Clear the cache and statistics with f.cache_clear(). - Access the underlying function with f.__wrapped__. - - See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used - - """ - - # Users should only access the lru_cache through its public API: - # cache_info, cache_clear, and f.__wrapped__ - # The internals of the lru_cache are encapsulated for thread safety and - # to allow the implementation to change (including a possible C version). - - def decorating_function(user_function): - - cache = dict() - stats = [0, 0] # make statistics updateable non-locally - HITS, MISSES = 0, 1 # names for the stats fields - make_key = _make_key - cache_get = cache.get # bound method to lookup key or return None - _len = len # localize the global len() function - lock = RLock() # because linkedlist updates aren't threadsafe - root = [] # root of the circular doubly linked list - root[:] = [root, root, None, None] # initialize by pointing to self - nonlocal_root = [root] # make updateable non-locally - PREV, NEXT, KEY, RESULT = 0, 1, 2, 3 # names for the link fields - - if maxsize == 0: - - def wrapper(*args, **kwds): - # no caching, just do a statistics update after a successful call - result = user_function(*args, **kwds) - stats[MISSES] += 1 - return result - - elif maxsize is None: - - def wrapper(*args, **kwds): - # simple caching without ordering or size limit - key = make_key(args, kwds, typed) - result = cache_get(key, root) # root used here as a unique not-found sentinel - if result is not root: - stats[HITS] += 1 - return result - result = user_function(*args, **kwds) - cache[key] = result - stats[MISSES] += 1 - return result - - else: - - def wrapper(*args, **kwds): - # size limited caching that tracks accesses by recency - key = make_key(args, kwds, typed) if kwds or typed else args - with lock: - link = cache_get(key) - if link is not None: - # record recent use of the key by moving it to the front of the list - root, = nonlocal_root - link_prev, link_next, key, result = link - link_prev[NEXT] = link_next - link_next[PREV] = link_prev - last = root[PREV] - last[NEXT] = root[PREV] = link - link[PREV] = last - link[NEXT] = root - stats[HITS] += 1 - return result - result = user_function(*args, **kwds) - with lock: - root, = nonlocal_root - if key in cache: - # getting here means that this same key was added to the - # cache while the lock was released. since the link - # update is already done, we need only return the - # computed result and update the count of misses. - pass - elif _len(cache) >= maxsize: - # use the old root to store the new key and result - oldroot = root - oldroot[KEY] = key - oldroot[RESULT] = result - # empty the oldest link and make it the new root - root = nonlocal_root[0] = oldroot[NEXT] - oldkey = root[KEY] - root[KEY] = root[RESULT] = None - # now update the cache dictionary for the new links - del cache[oldkey] - cache[key] = oldroot - else: - # put result in a new link at the front of the list - last = root[PREV] - link = [last, root, key, result] - last[NEXT] = root[PREV] = cache[key] = link - stats[MISSES] += 1 - return result - - def cache_info(): - """Report cache statistics""" - with lock: - return _CacheInfo(stats[HITS], stats[MISSES], maxsize, len(cache)) - - def cache_clear(): - """Clear the cache and cache statistics""" - with lock: - cache.clear() - root = nonlocal_root[0] - root[:] = [root, root, None, None] - stats[:] = [0, 0] - - wrapper.__wrapped__ = user_function - wrapper.cache_info = cache_info - wrapper.cache_clear = cache_clear - return update_wrapper(wrapper, user_function) - - return decorating_function diff --git a/myenv/lib/python3.12/site-packages/stem/util/ordereddict.py b/myenv/lib/python3.12/site-packages/stem/util/ordereddict.py deleted file mode 100644 index ec228f3..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/ordereddict.py +++ /dev/null @@ -1,133 +0,0 @@ -# Drop in replacement for python 2.7's OrderedDict, from... -# https://pypi.org/project/ordereddict/ -# -# Stem users should *not* rely upon this module. It will be removed when we -# drop support for python 2.6 and below. - -# Copyright (c) 2009 Raymond Hettinger -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, sublicense, and/or sell copies of the Software, -# and to permit persons to whom the Software is furnished to do so, -# subject to the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. - -from UserDict import DictMixin - - -class OrderedDict(dict, DictMixin): - def __init__(self, *args, **kwds): - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__end - except AttributeError: - self.clear() - self.update(*args, **kwds) - - def clear(self): - self.__end = end = [] - end += [None, end, end] # sentinel node for doubly linked list - self.__map = {} # key --> [key, prev, next] - dict.clear(self) - - def __setitem__(self, key, value): - if key not in self: - end = self.__end - curr = end[1] - curr[2] = end[1] = self.__map[key] = [key, curr, end] - dict.__setitem__(self, key, value) - - def __delitem__(self, key): - dict.__delitem__(self, key) - key, prev, next = self.__map.pop(key) - prev[2] = next - next[1] = prev - - def __iter__(self): - end = self.__end - curr = end[2] - while curr is not end: - yield curr[0] - curr = curr[2] - - def __reversed__(self): - end = self.__end - curr = end[1] - while curr is not end: - yield curr[0] - curr = curr[1] - - def popitem(self, last=True): - if not self: - raise KeyError('dictionary is empty') - if last: - key = reversed(self).next() - else: - key = iter(self).next() - value = self.pop(key) - return key, value - - def __reduce__(self): - items = [[k, self[k]] for k in self] - tmp = self.__map, self.__end - del self.__map, self.__end - inst_dict = vars(self).copy() - self.__map, self.__end = tmp - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def keys(self): - return list(self) - - setdefault = DictMixin.setdefault - update = DictMixin.update - pop = DictMixin.pop - values = DictMixin.values - items = DictMixin.items - iterkeys = DictMixin.iterkeys - itervalues = DictMixin.itervalues - iteritems = DictMixin.iteritems - - def __repr__(self): - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - - def copy(self): - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - if isinstance(other, OrderedDict): - if len(self) != len(other): - return False - for p, q in zip(self.items(), other.items()): - if p != q: - return False - return True - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other diff --git a/myenv/lib/python3.12/site-packages/stem/util/ports.cfg b/myenv/lib/python3.12/site-packages/stem/util/ports.cfg deleted file mode 100644 index ebef834..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/ports.cfg +++ /dev/null @@ -1,314 +0,0 @@ -################################################################################ -# -# Common usages for port . This is based on... -# -# https://secure.wikimedia.org/wikipedia/en/wiki/List_of_TCP_and_UDP_port numbers -# http://isc.sans.edu/services.html -# -################################################################################ - -port 1 => TCPMUX -port 2 => CompressNET -port 3 => CompressNET -port 5 => RJE -port 7 => Echo -port 9 => Discard -port 11 => SYSTAT -port 13 => Daytime -port 15 => netstat -port 17 => QOTD -port 18 => MSP -port 19 => CHARGEN -port 20 => FTP -port 21 => FTP -port 22 => SSH -port 23 => Telnet -port 24 => Priv-mail -port 25 => SMTP -port 34 => RF -port 35 => Printer -port 37 => TIME -port 39 => RLP -port 41 => Graphics -port 42 => WINS -port 43 => WHOIS -port 47 => NI FTP -port 49 => TACACS -port 50 => Remote Mail -port 51 => IMP -port 52 => XNS -port 53 => DNS -port 54 => XNS -port 55 => ISI-GL -port 56 => RAP -port 57 => MTP -port 58 => XNS -port 67 => BOOTP -port 68 => BOOTP -port 69 => TFTP -port 70 => Gopher -port 79 => Finger -port 80 => HTTP -port 81 => HTTP Alternate -port 82 => Torpark -port 83 => MIT ML -port 88 => Kerberos -port 90 => dnsix -port 99 => WIP -port 101 => NIC -port 102 => ISO-TSAP -port 104 => ACR/NEMA -port 105 => CCSO -port 107 => Telnet -port 108 => SNA -port 109 => POP2 -port 110 => POP3 -port 111 => ONC RPC -port 113 => ident -port 115 => SFTP -port 117 => UUCP -port 118 => SQL -port 119 => NNTP -port 123 => NTP -port 135 => DCE -port 137 => NetBIOS -port 138 => NetBIOS -port 139 => NetBIOS -port 143 => IMAP -port 152 => BFTP -port 153 => SGMP -port 156 => SQL -port 158 => DMSP -port 161 => SNMP -port 162 => SNMPTRAP -port 170 => Print-srv -port 177 => XDMCP -port 179 => BGP -port 194 => IRC -port 199 => SMUX -port 201 => AppleTalk -port 209 => QMTP -port 210 => ANSI -port 213 => IPX -port 218 => MPP -port 220 => IMAP -port 256 => 2DEV -port 259 => ESRO -port 264 => BGMP -port 308 => Novastor -port 311 => OSX Admin -port 318 => PKIX TSP -port 319 => PTP -port 320 => PTP -port 323 => IMMP -port 350 => MATIP -port 351 => MATIP -port 366 => ODMR -port 369 => Rpc2port ap -port 370 => codaauth2 -port 371 => ClearCase -port 383 => HP Alarm Mgr -port 384 => ARNS -port 387 => AURP -port 389 => LDAP -port 401 => UPS -port 402 => Altiris -port 427 => SLP -port 443 => HTTPS -port 444 => SNPP -port 445 => SMB -port 464 => Kerberos (kpasswd) -port 465 => SMTP -port 475 => tcpnethaspsrv -port 497 => Retrospect -port 500 => ISAKMP -port 501 => STMF -port 502 => Modbus -port 504 => Citadel -port 510 => FirstClass -port 512 => Rexec -port 513 => rlogin -port 514 => rsh -port 515 => LPD -port 517 => Talk -port 518 => NTalk -port 520 => efs -port 524 => NCP -port 530 => RPC -port 531 => AIM/IRC -port 532 => netnews -port 533 => netwall -port 540 => UUCP -port 542 => commerce -port 543 => Kerberos (klogin) -port 544 => Kerberos (kshell) -port 545 => OSISoft PI -port 546 => DHCPv6 -port 547 => DHCPv6 -port 548 => AFP -port 550 => new-who -port 554 => RTSP -port 556 => RFS -port 560 => rmonitor -port 561 => monitor -port 563 => NNTPS -port 587 => SMTP -port 591 => FileMaker -port 593 => HTTP RPC -port 604 => TUNNEL -port 623 => ASF-RMCP -port 631 => CUPS -port 635 => RLZ DBase -port 636 => LDAPS -port 639 => MSDP -port 641 => Support oft -port 646 => LDP -port 647 => DHCP -port 648 => RRP -port 651 => IEEE-MMS -port 652 => DTCP -port 653 => Support oft -port 654 => MMS/MMP -port 657 => RMC -port 660 => OSX Admin -port 665 => sun-dr -port 666 => Doom -port 674 => ACAP -port 691 => MS Exchange -port 692 => Hyperwave-ISP -port 694 => Linux-HA -port 695 => IEEE-MMS-SSL -port 698 => OLSR -port 699 => Access Network -port 700 => EPP -port 701 => LMP -port 702 => IRIS -port 706 => SILC -port 711 => MPLS -port 712 => TBRPF -port 720 => SMQP -port 749 => Kerberos (admin) -port 750 => rfile -port 751 => pump -port 752 => qrh -port 753 => rrh -port 754 => tell send -port 760 => ns -port 782 => Conserver -port 783 => spamd -port 829 => CMP -port 843 => Flash -port 847 => DHCP -port 860 => iSCSI -port 873 => rsync -port 888 => CDDB -port 901 => SWAT -port 902-904 => VMware -port 911 => NCA -port 953 => DNS RNDC -port 981 => SofaWare Firewall -port 989 => FTPS -port 990 => FTPS -port 991 => NAS -port 992 => Telnets -port 993 => IMAPS -port 994 => IRCS -port 995 => POP3S -port 999 => ScimoreDB -port 1001 => JtoMB -port 1002 => cogbot - -port 1080 => SOCKS -port 1085 => WebObjects -port 1109 => KPOP -port 1169 => Tripwire -port 1194 => OpenVPN -port 1214 => Kazaa -port 1220 => QuickTime -port 1234 => VLC -port 1241 => Nessus -port 1270 => SCOM -port 1293 => IPSec -port 1433 => MSSQL -port 1434 => MSSQL -port 1500 => NetGuard -port 1503 => MSN -port 1512 => WINS -port 1521 => Oracle -port 1526 => Oracle -port 1533 => Sametime -port 1666 => Perforce -port 1677 => GroupWise -port 1723 => PPTP -port 1725 => Steam -port 1863 => MSNP -port 2049 => NFS -port 2082 => Infowave -port 2083 => radsec -port 2086 => GNUnet -port 2087 => ELI -port 2095 => NBX SER -port 2096 => NBX DIR -port 2102-2104 => Zephyr -port 2401 => CVS -port 2525 => SMTP -port 2710 => BitTorrent -port 3074 => XBox LIVE -port 3101 => BlackBerry -port 3128 => SQUID -port 3306 => MySQL -port 3389 => WBT -port 3690 => SVN -port 3723 => Battle.net -port 3724 => WoW -port 4321 => RWHOIS -port 4643 => Virtuozzo -port 4662 => eMule -port 5003 => FileMaker -port 5050 => Yahoo IM -port 5060 => SIP -port 5061 => SIP -port 5190 => AIM/ICQ -port 5222 => Jabber -port 5223 => Jabber -port 5228 => Android Market -port 5269 => Jabber -port 5298 => Jabber -port 5432 => PostgreSQL -port 5500 => VNC -port 5556 => Freeciv -port 5666 => NRPE -port 5667 => NSCA -port 5800 => VNC -port 5900 => VNC -port 6346 => gnutella -port 6347 => gnutella -port 6660-6669 => IRC -port 6679 => IRC -port 6697 => IRC -port 6881-6999 => BitTorrent -port 8000 => iRDMI -port 8008 => HTTP Alternate -port 8010 => XMPP -port 8074 => Gadu-Gadu -port 8080 => HTTP Proxy -port 8087 => SPP -port 8088 => Radan HTTP -port 8118 => Privoxy -port 8123 => Polipo -port 8332-8333 => Bitcoin -port 8443 => PCsync HTTPS -port 8888 => NewsEDGE -port 9030 => Tor -port 9050 => Tor -port 9051 => Tor -port 9418 => Git -port 9999 => distinct -port 10000 => Webmin -port 19294 => Google Voice -port 19638 => Ensim -port 23399 => Skype -port 30301 => BitTorrent -port 33434 => traceroute -port 50002 => Electrum Bitcoin SSL - diff --git a/myenv/lib/python3.12/site-packages/stem/util/proc.py b/myenv/lib/python3.12/site-packages/stem/util/proc.py deleted file mode 100644 index de357ef..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/proc.py +++ /dev/null @@ -1,598 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Helper functions for querying process and system information from the /proc -contents. Fetching information this way provides huge performance benefits -over lookups via system utilities (ps, netstat, etc). For instance, resolving -connections this way cuts the runtime by around 90% verses the alternatives. -These functions may not work on all platforms (only Linux?). - -The method for reading these files (and a little code) are borrowed from -`psutil `_, which was written by Jay Loden, -Dave Daeschler, Giampaolo Rodola' and is under the BSD license. - -**These functions are not being vended to stem users. They may change in the -future, use them at your own risk.** - -.. versionchanged:: 1.3.0 - Dropped the get_* prefix from several function names. The old names still - work, but are deprecated aliases. - -**Module Overview:** - -:: - - is_available - checks if proc utilities can be used on this system - system_start_time - unix timestamp for when the system started - physical_memory - memory available on this system - cwd - provides the current working directory for a process - uid - provides the user id a process is running under - memory_usage - provides the memory usage of a process - stats - queries statistics about a process - file_descriptors_used - number of file descriptors used by a process - connections - provides the connections made by a process - -.. data:: Stat (enum) - - Types of data available via the :func:`~stem.util.proc.stats` function. - - ============== =========== - Stat Description - ============== =========== - **COMMAND** command name under which the process is running - **CPU_UTIME** total user time spent on the process - **CPU_STIME** total system time spent on the process - **START_TIME** when this process began, in unix time - ============== =========== -""" - -import base64 -import os -import platform -import socket -import sys -import time - -import stem.prereq -import stem.util.connection -import stem.util.enum -import stem.util.str_tools - -from stem.util import log - -try: - # unavailable on windows (#19823) - import pwd - IS_PWD_AVAILABLE = True -except ImportError: - IS_PWD_AVAILABLE = False - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -# os.sysconf is only defined on unix -try: - CLOCK_TICKS = os.sysconf(os.sysconf_names['SC_CLK_TCK']) -except AttributeError: - CLOCK_TICKS = None - -IS_LITTLE_ENDIAN = sys.byteorder == 'little' -ENCODED_ADDR = {} # cache of encoded ips to their decoded version - -Stat = stem.util.enum.Enum( - ('COMMAND', 'command'), ('CPU_UTIME', 'utime'), - ('CPU_STIME', 'stime'), ('START_TIME', 'start time') -) - - -@lru_cache() -def is_available(): - """ - Checks if proc information is available on this platform. - - :returns: **True** if proc contents exist on this platform, **False** otherwise - """ - - if platform.system() != 'Linux': - return False - else: - # list of process independent proc paths we use - proc_paths = ('/proc/stat', '/proc/meminfo', '/proc/net/tcp', '/proc/net/udp') - - for path in proc_paths: - if not os.path.exists(path): - return False - - return True - - -@lru_cache() -def system_start_time(): - """ - Provides the unix time (seconds since epoch) when the system started. - - :returns: **float** for the unix time of when the system started - - :raises: **IOError** if it can't be determined - """ - - start_time, parameter = time.time(), 'system start time' - btime_line = _get_line('/proc/stat', 'btime', parameter) - - try: - result = float(btime_line.strip().split()[1]) - _log_runtime(parameter, '/proc/stat[btime]', start_time) - return result - except: - exc = IOError('unable to parse the /proc/stat btime entry: %s' % btime_line) - _log_failure(parameter, exc) - raise exc - - -@lru_cache() -def physical_memory(): - """ - Provides the total physical memory on the system in bytes. - - :returns: **int** for the bytes of physical memory this system has - - :raises: **IOError** if it can't be determined - """ - - start_time, parameter = time.time(), 'system physical memory' - mem_total_line = _get_line('/proc/meminfo', 'MemTotal:', parameter) - - try: - result = int(mem_total_line.split()[1]) * 1024 - _log_runtime(parameter, '/proc/meminfo[MemTotal]', start_time) - return result - except: - exc = IOError('unable to parse the /proc/meminfo MemTotal entry: %s' % mem_total_line) - _log_failure(parameter, exc) - raise exc - - -def cwd(pid): - """ - Provides the current working directory for the given process. - - :param int pid: process id of the process to be queried - - :returns: **str** with the path of the working directory for the process - - :raises: **IOError** if it can't be determined - """ - - start_time, parameter = time.time(), 'cwd' - proc_cwd_link = '/proc/%s/cwd' % pid - - if pid == 0: - cwd = '' - else: - try: - cwd = os.readlink(proc_cwd_link) - except OSError: - exc = IOError('unable to read %s' % proc_cwd_link) - _log_failure(parameter, exc) - raise exc - - _log_runtime(parameter, proc_cwd_link, start_time) - return cwd - - -def uid(pid): - """ - Provides the user ID the given process is running under. - - :param int pid: process id of the process to be queried - - :returns: **int** with the user id for the owner of the process - - :raises: **IOError** if it can't be determined - """ - - start_time, parameter = time.time(), 'uid' - status_path = '/proc/%s/status' % pid - uid_line = _get_line(status_path, 'Uid:', parameter) - - try: - result = int(uid_line.split()[1]) - _log_runtime(parameter, '%s[Uid]' % status_path, start_time) - return result - except: - exc = IOError('unable to parse the %s Uid entry: %s' % (status_path, uid_line)) - _log_failure(parameter, exc) - raise exc - - -def memory_usage(pid): - """ - Provides the memory usage in bytes for the given process. - - :param int pid: process id of the process to be queried - - :returns: **tuple** of two ints with the memory usage of the process, of the - form **(resident_size, virtual_size)** - - :raises: **IOError** if it can't be determined - """ - - # checks if this is the kernel process - - if pid == 0: - return (0, 0) - - start_time, parameter = time.time(), 'memory usage' - status_path = '/proc/%s/status' % pid - mem_lines = _get_lines(status_path, ('VmRSS:', 'VmSize:'), parameter) - - try: - residentSize = int(mem_lines['VmRSS:'].split()[1]) * 1024 - virtualSize = int(mem_lines['VmSize:'].split()[1]) * 1024 - - _log_runtime(parameter, '%s[VmRSS|VmSize]' % status_path, start_time) - return (residentSize, virtualSize) - except: - exc = IOError('unable to parse the %s VmRSS and VmSize entries: %s' % (status_path, ', '.join(mem_lines))) - _log_failure(parameter, exc) - raise exc - - -def stats(pid, *stat_types): - """ - Provides process specific information. See the :data:`~stem.util.proc.Stat` - enum for valid options. - - :param int pid: process id of the process to be queried - :param Stat stat_types: information to be provided back - - :returns: **tuple** with all of the requested statistics as strings - - :raises: **IOError** if it can't be determined - """ - - if CLOCK_TICKS is None: - raise IOError('Unable to look up SC_CLK_TCK') - - start_time, parameter = time.time(), 'process %s' % ', '.join(stat_types) - - # the stat file contains a single line, of the form... - # 8438 (tor) S 8407 8438 8407 34818 8438 4202496... - stat_path = '/proc/%s/stat' % pid - stat_line = _get_line(stat_path, str(pid), parameter) - - # breaks line into component values - stat_comp = [] - cmd_start, cmd_end = stat_line.find('('), stat_line.find(')') - - if cmd_start != -1 and cmd_end != -1: - stat_comp.append(stat_line[:cmd_start]) - stat_comp.append(stat_line[cmd_start + 1:cmd_end]) - stat_comp += stat_line[cmd_end + 1:].split() - - if len(stat_comp) < 44 and _is_float(stat_comp[13], stat_comp[14], stat_comp[21]): - exc = IOError('stat file had an unexpected format: %s' % stat_path) - _log_failure(parameter, exc) - raise exc - - results = [] - for stat_type in stat_types: - if stat_type == Stat.COMMAND: - if pid == 0: - results.append('sched') - else: - results.append(stat_comp[1]) - elif stat_type == Stat.CPU_UTIME: - if pid == 0: - results.append('0') - else: - results.append(str(float(stat_comp[13]) / CLOCK_TICKS)) - elif stat_type == Stat.CPU_STIME: - if pid == 0: - results.append('0') - else: - results.append(str(float(stat_comp[14]) / CLOCK_TICKS)) - elif stat_type == Stat.START_TIME: - if pid == 0: - return system_start_time() - else: - # According to documentation, starttime is in field 21 and the unit is - # jiffies (clock ticks). We divide it for clock ticks, then add the - # uptime to get the seconds since the epoch. - p_start_time = float(stat_comp[21]) / CLOCK_TICKS - results.append(str(p_start_time + system_start_time())) - - _log_runtime(parameter, stat_path, start_time) - return tuple(results) - - -def file_descriptors_used(pid): - """ - Provides the number of file descriptors currently being used by a process. - - .. versionadded:: 1.3.0 - - :param int pid: process id of the process to be queried - - :returns: **int** of the number of file descriptors used - - :raises: **IOError** if it can't be determined - """ - - try: - pid = int(pid) - - if pid < 0: - raise IOError("Process pids can't be negative: %s" % pid) - except (ValueError, TypeError): - raise IOError('Process pid was non-numeric: %s' % pid) - - try: - return len(os.listdir('/proc/%i/fd' % pid)) - except Exception as exc: - raise IOError('Unable to check number of file descriptors used: %s' % exc) - - -def connections(pid = None, user = None): - """ - Queries connections from the proc contents. This matches netstat, lsof, and - friends but is much faster. If no **pid** or **user** are provided this - provides all present connections. - - :param int pid: pid to provide connections for - :param str user: username to look up connections for - - :returns: **list** of :class:`~stem.util.connection.Connection` instances - - :raises: **IOError** if it can't be determined - """ - - start_time, conn = time.time(), [] - - if pid: - parameter = 'connections for pid %s' % pid - - try: - pid = int(pid) - - if pid < 0: - raise IOError("Process pids can't be negative: %s" % pid) - except (ValueError, TypeError): - raise IOError('Process pid was non-numeric: %s' % pid) - elif user: - parameter = 'connections for user %s' % user - else: - parameter = 'all connections' - - try: - if not IS_PWD_AVAILABLE: - raise IOError("This requires python's pwd module, which is unavailable on Windows.") - - inodes = _inodes_for_sockets(pid) if pid else set() - process_uid = stem.util.str_tools._to_bytes(str(pwd.getpwnam(user).pw_uid)) if user else None - - for proc_file_path in ('/proc/net/tcp', '/proc/net/tcp6', '/proc/net/udp', '/proc/net/udp6'): - if proc_file_path.endswith('6') and not os.path.exists(proc_file_path): - continue # ipv6 proc contents are optional - - protocol = proc_file_path[10:].rstrip('6') # 'tcp' or 'udp' - is_ipv6 = proc_file_path.endswith('6') - - try: - with open(proc_file_path, 'rb') as proc_file: - proc_file.readline() # skip the first line - - for line in proc_file: - _, l_dst, r_dst, status, _, _, _, uid, _, inode = line.split()[:10] - - if inodes and inode not in inodes: - continue - elif process_uid and uid != process_uid: - continue - elif protocol == 'tcp' and status != b'01': - continue # skip tcp connections that aren't yet established - - div = l_dst.find(b':') - l_addr = _unpack_addr(l_dst[:div]) - l_port = int(l_dst[div + 1:], 16) - - div = r_dst.find(b':') - r_addr = _unpack_addr(r_dst[:div]) - r_port = int(r_dst[div + 1:], 16) - - if r_addr == '0.0.0.0' or r_addr == '0000:0000:0000:0000:0000:0000': - continue # no address - elif l_port == 0 or r_port == 0: - continue # no port - - conn.append(stem.util.connection.Connection(l_addr, l_port, r_addr, r_port, protocol, is_ipv6)) - except IOError as exc: - raise IOError("unable to read '%s': %s" % (proc_file_path, exc)) - except Exception as exc: - raise IOError("unable to parse '%s': %s" % (proc_file_path, exc)) - - _log_runtime(parameter, '/proc/net/[tcp|udp]', start_time) - return conn - except IOError as exc: - _log_failure(parameter, exc) - raise - - -def _inodes_for_sockets(pid): - """ - Provides inodes in use by a process for its sockets. - - :param int pid: process id of the process to be queried - - :returns: **set** with inodes for its sockets - - :raises: **IOError** if it can't be determined - """ - - inodes = set() - - try: - fd_contents = os.listdir('/proc/%s/fd' % pid) - except OSError as exc: - raise IOError('Unable to read our file descriptors: %s' % exc) - - for fd in fd_contents: - fd_path = '/proc/%s/fd/%s' % (pid, fd) - - try: - # File descriptor link, such as 'socket:[30899]' - - fd_name = os.readlink(fd_path) - - if fd_name.startswith('socket:['): - inodes.add(stem.util.str_tools._to_bytes(fd_name[8:-1])) - except OSError as exc: - if not os.path.exists(fd_path): - continue # descriptors may shift while we're in the middle of iterating over them - - # most likely couldn't be read due to permissions - raise IOError('unable to determine file descriptor destination (%s): %s' % (exc, fd_path)) - - return inodes - - -def _unpack_addr(addr): - """ - Translates an address entry in the /proc/net/* contents to a human readable - form (`reference `_, - for instance: - - :: - - "0500000A" -> "10.0.0.5" - "F804012A4A5190010000000002000000" -> "2a01:4f8:190:514a::2" - - :param str addr: proc address entry to be decoded - - :returns: **str** of the decoded address - """ - - if addr not in ENCODED_ADDR: - if len(addr) == 8: - # IPv4 address - decoded = base64.b16decode(addr)[::-1] if IS_LITTLE_ENDIAN else base64.b16decode(addr) - ENCODED_ADDR[addr] = socket.inet_ntop(socket.AF_INET, decoded) - else: - # IPv6 address - - if IS_LITTLE_ENDIAN: - # Group into eight characters, then invert in pairs... - # - # https://trac.torproject.org/projects/tor/ticket/18079#comment:24 - - inverted = [] - - for i in range(4): - grouping = addr[8 * i:8 * (i + 1)] - inverted += [grouping[2 * i:2 * (i + 1)] for i in range(4)][::-1] - - encoded = b''.join(inverted) - else: - encoded = addr - - ENCODED_ADDR[addr] = stem.util.connection.expand_ipv6_address(socket.inet_ntop(socket.AF_INET6, base64.b16decode(encoded))) - - return ENCODED_ADDR[addr] - - -def _is_float(*value): - try: - for v in value: - float(v) - - return True - except ValueError: - return False - - -def _get_line(file_path, line_prefix, parameter): - return _get_lines(file_path, (line_prefix, ), parameter)[line_prefix] - - -def _get_lines(file_path, line_prefixes, parameter): - """ - Fetches lines with the given prefixes from a file. This only provides back - the first instance of each prefix. - - :param str file_path: path of the file to read - :param tuple line_prefixes: string prefixes of the lines to return - :param str parameter: description of the proc attribute being fetch - - :returns: mapping of prefixes to the matching line - - :raises: **IOError** if unable to read the file or can't find all of the prefixes - """ - - try: - remaining_prefixes = list(line_prefixes) - proc_file, results = open(file_path), {} - - for line in proc_file: - if not remaining_prefixes: - break # found everything we're looking for - - for prefix in remaining_prefixes: - if line.startswith(prefix): - results[prefix] = line - remaining_prefixes.remove(prefix) - break - - proc_file.close() - - if remaining_prefixes: - if len(remaining_prefixes) == 1: - msg = '%s did not contain a %s entry' % (file_path, remaining_prefixes[0]) - else: - msg = '%s did not contain %s entries' % (file_path, ', '.join(remaining_prefixes)) - - raise IOError(msg) - else: - return results - except IOError as exc: - _log_failure(parameter, exc) - raise - - -def _log_runtime(parameter, proc_location, start_time): - """ - Logs a message indicating a successful proc query. - - :param str parameter: description of the proc attribute being fetch - :param str proc_location: proc files we were querying - :param int start_time: unix time for when this query was started - """ - - runtime = time.time() - start_time - log.debug('proc call (%s): %s (runtime: %0.4f)' % (parameter, proc_location, runtime)) - - -def _log_failure(parameter, exc): - """ - Logs a message indicating that the proc query failed. - - :param str parameter: description of the proc attribute being fetch - :param Exception exc: exception that we're raising - """ - - log.debug('proc call failed (%s): %s' % (parameter, exc)) - - -# TODO: drop with stem 2.x -# We renamed our methods to drop a redundant 'get_*' prefix, so alias the old -# names for backward compatability. - -get_system_start_time = system_start_time -get_physical_memory = physical_memory -get_cwd = cwd -get_uid = uid -get_memory_usage = memory_usage -get_stats = stats -get_connections = connections diff --git a/myenv/lib/python3.12/site-packages/stem/util/str_tools.py b/myenv/lib/python3.12/site-packages/stem/util/str_tools.py deleted file mode 100644 index 869f46b..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/str_tools.py +++ /dev/null @@ -1,614 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Toolkit for various string activity. - -.. versionchanged:: 1.3.0 - Dropped the get_* prefix from several function names. The old names still - work, but are deprecated aliases. - -**Module Overview:** - -:: - - crop - shortens string to a given length - - size_label - human readable label for a number of bytes - time_label - human readable label for a number of seconds - time_labels - human readable labels for each time unit - short_time_label - condensed time label output - parse_short_time_label - seconds represented by a short time label -""" - -import base64 -import codecs -import datetime -import re -import sys - -import stem.prereq -import stem.util -import stem.util.enum - -# label conversion tuples of the form... -# (bits / bytes / seconds, short label, long label) - -SIZE_UNITS_BITS = ( - (140737488355328.0, ' Pb', ' Petabit'), - (137438953472.0, ' Tb', ' Terabit'), - (134217728.0, ' Gb', ' Gigabit'), - (131072.0, ' Mb', ' Megabit'), - (128.0, ' Kb', ' Kilobit'), - (0.125, ' b', ' Bit'), -) - -SIZE_UNITS_BYTES = ( - (1125899906842624.0, ' PB', ' Petabyte'), - (1099511627776.0, ' TB', ' Terabyte'), - (1073741824.0, ' GB', ' Gigabyte'), - (1048576.0, ' MB', ' Megabyte'), - (1024.0, ' KB', ' Kilobyte'), - (1.0, ' B', ' Byte'), -) - -TIME_UNITS = ( - (86400.0, 'd', ' day'), - (3600.0, 'h', ' hour'), - (60.0, 'm', ' minute'), - (1.0, 's', ' second'), -) - -_timestamp_re = re.compile(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})') - -if stem.prereq.is_python_3(): - def _to_bytes_impl(msg): - if isinstance(msg, str): - return codecs.latin_1_encode(msg, 'replace')[0] - else: - return msg - - def _to_unicode_impl(msg): - if msg is not None and not isinstance(msg, str): - return msg.decode('utf-8', 'replace') - else: - return msg -else: - def _to_bytes_impl(msg): - if msg is not None and isinstance(msg, unicode): - return codecs.latin_1_encode(msg, 'replace')[0] - else: - return msg - - def _to_unicode_impl(msg): - if msg is not None and not isinstance(msg, unicode): - return msg.decode('utf-8', 'replace') - else: - return msg - - -def _to_bytes(msg): - """ - Provides the ASCII bytes for the given string. This is purely to provide - python 3 compatability, normalizing the unicode/ASCII change in the version - bump. For an explanation of this see... - - http://python3porting.com/problems.html#nicer-solutions - - :param str,unicode msg: string to be converted - - :returns: ASCII bytes for string - """ - - return _to_bytes_impl(msg) - - -def _to_unicode(msg): - """ - Provides the unicode string for the given ASCII bytes. This is purely to - provide python 3 compatability, normalizing the unicode/ASCII change in the - version bump. - - :param str,unicode msg: string to be converted - - :returns: unicode conversion - """ - - return _to_unicode_impl(msg) - - -def _decode_b64(msg): - """ - Base64 decode, without padding concerns. - """ - - missing_padding = len(msg) % 4 - padding_chr = b'=' if isinstance(msg, bytes) else '=' - - return base64.b64decode(msg + padding_chr * missing_padding) - - -def _to_int(msg): - """ - Serializes a string to a number. - - :param str msg: string to be serialized - - :returns: **int** representation of the string - """ - - if stem.prereq.is_python_3() and isinstance(msg, bytes): - # iterating over bytes in python3 provides ints rather than characters - return sum([pow(256, (len(msg) - i - 1)) * c for (i, c) in enumerate(msg)]) - else: - return sum([pow(256, (len(msg) - i - 1)) * ord(c) for (i, c) in enumerate(msg)]) - - -def _to_camel_case(label, divider = '_', joiner = ' '): - """ - Converts the given string to camel case, ie: - - :: - - >>> _to_camel_case('I_LIKE_PEPPERJACK!') - 'I Like Pepperjack!' - - :param str label: input string to be converted - :param str divider: word boundary - :param str joiner: replacement for word boundaries - - :returns: camel cased string - """ - - words = [] - for entry in label.split(divider): - if len(entry) == 0: - words.append('') - elif len(entry) == 1: - words.append(entry.upper()) - else: - words.append(entry[0].upper() + entry[1:].lower()) - - return joiner.join(words) - - -def _split_by_length(msg, size): - """ - Splits a string into a list of strings up to the given size. - - :: - - >>> _split_by_length('hello', 2) - ['he', 'll', 'o'] - - :param str msg: string to split - :param int size: number of characters to chunk into - - :returns: **list** with chunked string components - """ - - return [msg[i:i + size] for i in range(0, len(msg), size)] - - -# This needs to be defined after _to_camel_case() to avoid a circular -# dependency with the enum module. - -Ending = stem.util.enum.Enum('ELLIPSE', 'HYPHEN') - - -def crop(msg, size, min_word_length = 4, min_crop = 0, ending = Ending.ELLIPSE, get_remainder = False): - """ - Shortens a string to a given length. - - If we crop content then a given ending is included (counting itself toward - the size limitation). This crops on word breaks so we only include a word if - we can display at least **min_word_length** characters of it. - - If there isn't room for even a truncated single word (or one word plus the - ellipse if including those) then this provides an empty string. - - If a cropped string ends with a comma or period then it's stripped (unless - we're providing the remainder back). For example... - - >>> crop('This is a looooong message', 17) - 'This is a looo...' - - >>> crop('This is a looooong message', 12) - 'This is a...' - - >>> crop('This is a looooong message', 3) - '' - - The whole point of this method is to provide human friendly croppings, and as - such details of how this works might change in the future. Callers should not - rely on the details of how this crops. - - .. versionadded:: 1.3.0 - - :param str msg: text to be processed - :param int size: space available for text - :param int min_word_length: minimum characters before which a word is - dropped, requires whole word if **None** - :param int min_crop: minimum characters that must be dropped if a word is - cropped - :param Ending ending: type of ending used when truncating, no special - truncation is used if **None** - :param bool get_remainder: returns a tuple with the second part being the - cropped portion of the message - - :returns: **str** of the text truncated to the given length - """ - - # checks if there's room for the whole message - - if len(msg) <= size: - return (msg, '') if get_remainder else msg - - if size < 0: - raise ValueError("Crop size can't be negative (received %i)" % size) - elif min_word_length and min_word_length < 0: - raise ValueError("Crop's min_word_length can't be negative (received %i)" % min_word_length) - elif min_crop < 0: - raise ValueError("Crop's min_crop can't be negative (received %i)" % min_crop) - - # since we're cropping, the effective space available is less with an - # ellipse, and cropping words requires an extra space for hyphens - - if ending == Ending.ELLIPSE: - if size < 3: - return ('', msg) if get_remainder else '' - - size -= 3 - elif min_word_length and ending == Ending.HYPHEN: - min_word_length += 1 - - if min_word_length is None: - min_word_length = sys.maxsize - - # checks if there isn't the minimum space needed to include anything - - last_wordbreak = msg.rfind(' ', 0, size + 1) - - if last_wordbreak == -1: - # we're splitting the first word - - if size < min_word_length: - return ('', msg) if get_remainder else '' - - include_crop = True - else: - last_wordbreak = len(msg[:last_wordbreak].rstrip()) # drops extra ending whitespaces - include_crop = size - last_wordbreak - 1 >= min_word_length - - # if there's a max crop size then make sure we're cropping at least that many characters - - if include_crop and min_crop: - next_wordbreak = msg.find(' ', size) - - if next_wordbreak == -1: - next_wordbreak = len(msg) - - include_crop = next_wordbreak - size + 1 >= min_crop - - if include_crop: - return_msg, remainder = msg[:size], msg[size:] - - if ending == Ending.HYPHEN: - remainder = return_msg[-1] + remainder - return_msg = return_msg[:-1].rstrip() + '-' - else: - return_msg, remainder = msg[:last_wordbreak], msg[last_wordbreak:] - - # if this is ending with a comma or period then strip it off - - if not get_remainder and return_msg and return_msg[-1] in (',', '.'): - return_msg = return_msg[:-1] - - if ending == Ending.ELLIPSE: - return_msg = return_msg.rstrip() + '...' - - return (return_msg, remainder) if get_remainder else return_msg - - -def size_label(byte_count, decimal = 0, is_long = False, is_bytes = True, round = False): - """ - Converts a number of bytes into a human readable label in its most - significant units. For instance, 7500 bytes would return "7 KB". If the - is_long option is used this expands unit labels to be the properly pluralized - full word (for instance 'Kilobytes' rather than 'KB'). Units go up through - petabytes. - - :: - - >>> size_label(2000000) - '1 MB' - - >>> size_label(1050, 2) - '1.02 KB' - - >>> size_label(1050, 3, True) - '1.025 Kilobytes' - - .. versionchanged:: 1.6.0 - Added round argument. - - :param int byte_count: number of bytes to be converted - :param int decimal: number of decimal digits to be included - :param bool is_long: expands units label - :param bool is_bytes: provides units in bytes if **True**, bits otherwise - :param bool round: rounds normally if **True**, otherwise rounds down - - :returns: **str** with human readable representation of the size - """ - - if is_bytes: - return _get_label(SIZE_UNITS_BYTES, byte_count, decimal, is_long, round) - else: - return _get_label(SIZE_UNITS_BITS, byte_count, decimal, is_long, round) - - -def time_label(seconds, decimal = 0, is_long = False): - """ - Converts seconds into a time label truncated to its most significant units. - For instance, 7500 seconds would return "2h". Units go up through days. - - This defaults to presenting single character labels, but if the is_long - option is used this expands labels to be the full word (space included and - properly pluralized). For instance, "4h" would be "4 hours" and "1m" would - become "1 minute". - - :: - - >>> time_label(10000) - '2h' - - >>> time_label(61, 1, True) - '1.0 minute' - - >>> time_label(61, 2, True) - '1.01 minutes' - - :param int seconds: number of seconds to be converted - :param int decimal: number of decimal digits to be included - :param bool is_long: expands units label - - :returns: **str** with human readable representation of the time - """ - - return _get_label(TIME_UNITS, seconds, decimal, is_long) - - -def time_labels(seconds, is_long = False): - """ - Provides a list of label conversions for each time unit, starting with its - most significant units on down. Any counts that evaluate to zero are omitted. - For example... - - :: - - >>> time_labels(400) - ['6m', '40s'] - - >>> time_labels(3640, True) - ['1 hour', '40 seconds'] - - :param int seconds: number of seconds to be converted - :param bool is_long: expands units label - - :returns: **list** of strings with human readable representations of the time - """ - - time_labels = [] - - for count_per_unit, _, _ in TIME_UNITS: - if abs(seconds) >= count_per_unit: - time_labels.append(_get_label(TIME_UNITS, seconds, 0, is_long)) - seconds %= count_per_unit - - return time_labels - - -def short_time_label(seconds): - """ - Provides a time in the following format: - [[dd-]hh:]mm:ss - - :: - - >>> short_time_label(111) - '01:51' - - >>> short_time_label(544100) - '6-07:08:20' - - :param int seconds: number of seconds to be converted - - :returns: **str** with the short representation for the time - - :raises: **ValueError** if the input is negative - """ - - if seconds < 0: - raise ValueError("Input needs to be a non-negative integer, got '%i'" % seconds) - - time_comp = {} - - for amount, _, label in TIME_UNITS: - count = int(seconds / amount) - seconds %= amount - time_comp[label.strip()] = count - - label = '%02i:%02i' % (time_comp['minute'], time_comp['second']) - - if time_comp['day']: - label = '%i-%02i:%s' % (time_comp['day'], time_comp['hour'], label) - elif time_comp['hour']: - label = '%02i:%s' % (time_comp['hour'], label) - - return label - - -def parse_short_time_label(label): - """ - Provides the number of seconds corresponding to the formatting used for the - cputime and etime fields of ps: - [[dd-]hh:]mm:ss or mm:ss.ss - - :: - - >>> parse_short_time_label('01:51') - 111 - - >>> parse_short_time_label('6-07:08:20') - 544100 - - :param str label: time entry to be parsed - - :returns: **int** with the number of seconds represented by the label - - :raises: **ValueError** if input is malformed - """ - - days, hours, minutes, seconds = '0', '0', '0', '0' - - if '-' in label: - days, label = label.split('-', 1) - - time_comp = label.split(':') - - if len(time_comp) == 3: - hours, minutes, seconds = time_comp - elif len(time_comp) == 2: - minutes, seconds = time_comp - else: - raise ValueError("Invalid time format, we expected '[[dd-]hh:]mm:ss' or 'mm:ss.ss': %s" % label) - - try: - time_sum = int(float(seconds)) - time_sum += int(minutes) * 60 - time_sum += int(hours) * 3600 - time_sum += int(days) * 86400 - return time_sum - except ValueError: - raise ValueError('Non-numeric value in time entry: %s' % label) - - -def _parse_timestamp(entry): - """ - Parses the date and time that in format like like... - - :: - - 2012-11-08 16:48:41 - - :param str entry: timestamp to be parsed - - :returns: **datetime** for the time represented by the timestamp - - :raises: **ValueError** if the timestamp is malformed - """ - - if not stem.util._is_str(entry): - raise ValueError('parse_timestamp() input must be a str, got a %s' % type(entry)) - - try: - time = [int(x) for x in _timestamp_re.match(entry).groups()] - except AttributeError: - raise ValueError('Expected timestamp in format YYYY-MM-DD HH:MM:ss but got ' + entry) - - return datetime.datetime(time[0], time[1], time[2], time[3], time[4], time[5]) - - -def _parse_iso_timestamp(entry): - """ - Parses the ISO 8601 standard that provides for timestamps like... - - :: - - 2012-11-08T16:48:41.420251 - - :param str entry: timestamp to be parsed - - :returns: **datetime** for the time represented by the timestamp - - :raises: **ValueError** if the timestamp is malformed - """ - - if not stem.util._is_str(entry): - raise ValueError('parse_iso_timestamp() input must be a str, got a %s' % type(entry)) - - # based after suggestions from... - # http://stackoverflow.com/questions/127803/how-to-parse-iso-formatted-date-in-python - - if '.' in entry: - timestamp_str, microseconds = entry.split('.') - else: - timestamp_str, microseconds = entry, '000000' - - if len(microseconds) != 6 or not microseconds.isdigit(): - raise ValueError("timestamp's microseconds should be six digits") - - if len(timestamp_str) > 10 and timestamp_str[10] == 'T': - timestamp_str = timestamp_str[:10] + ' ' + timestamp_str[11:] - else: - raise ValueError("timestamp didn't contain delimeter 'T' between date and time") - - timestamp = _parse_timestamp(timestamp_str) - return timestamp + datetime.timedelta(microseconds = int(microseconds)) - - -def _get_label(units, count, decimal, is_long, round = False): - """ - Provides label corresponding to units of the highest significance in the - provided set. This rounds down (ie, integer truncation after visible units). - - :param tuple units: type of units to be used for conversion, containing - (count_per_unit, short_label, long_label) - :param int count: number of base units being converted - :param int decimal: decimal precision of label - :param bool is_long: uses the long label if **True**, short label otherwise - :param bool round: rounds normally if **True**, otherwise rounds down - """ - - # formatted string for the requested number of digits - label_format = '%%.%if' % decimal - - if count < 0: - label_format = '-' + label_format - count = abs(count) - elif count == 0: - units_label = units[-1][2] + 's' if is_long else units[-1][1] - return '%s%s' % (label_format % count, units_label) - - for count_per_unit, short_label, long_label in units: - if count >= count_per_unit: - if not round: - # Rounding down with a '%f' is a little clunky. Reducing the count so - # it'll divide evenly as the rounded down value. - - count -= count % (count_per_unit / (10 ** decimal)) - - count_label = label_format % (count / count_per_unit) - - if is_long: - # Pluralize if any of the visible units make it greater than one. For - # instance 1.0003 is plural but 1.000 isn't. - - if decimal > 0: - is_plural = count > count_per_unit - else: - is_plural = count >= count_per_unit * 2 - - return count_label + long_label + ('s' if is_plural else '') - else: - return count_label + short_label - - -# TODO: drop with stem 2.x -# We renamed our methods to drop a redundant 'get_*' prefix, so alias the old -# names for backward compatability. - -get_size_label = size_label -get_time_label = time_label -get_time_labels = time_labels -get_short_time_label = short_time_label diff --git a/myenv/lib/python3.12/site-packages/stem/util/system.py b/myenv/lib/python3.12/site-packages/stem/util/system.py deleted file mode 100644 index c04eb67..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/system.py +++ /dev/null @@ -1,1517 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Helper functions for working with the underlying system. These are mostly os -dependent, only working on linux, osx, and bsd. In almost all cases they're -best-effort, providing **None** if the lookup fails. - -.. versionchanged:: 1.3.0 - Dropped the get_* prefix from several function names. The old names still - work, but are deprecated aliases. - -.. versionchanged:: 1.5.0 - Added the **SYSTEM_CALL_TIME** global, which tracks total time spent making - system commands. - -**Module Overview:** - -:: - - is_windows - checks if we're running on windows - is_mac - checks if we're running on a mac - is_gentoo - checks if we're running on gentoo - is_slackware - checks if we're running on slackware - is_bsd - checks if we're running on the bsd family of operating systems - - is_available - determines if a command is available on this system - is_running - determines if a given process is running - size_of - provides the memory usage of an object - call - runs the given system command and provides back the results - - name_by_pid - gets the name for a process by the given pid - pid_by_name - gets the pid for a process by the given name - pid_by_port - gets the pid for a process listening to a given port - pid_by_open_file - gets the pid for the process with an open file - pids_by_user - provides processes owned by a user - cwd - provides the current working directory for a given process - user - provides the user a process is running under - start_time - provides the unix timestamp when the process started - tail - provides lines from the end of a file - bsd_jail_id - provides the BSD jail id a given process is running within - bsd_jail_path - provides the path of the given BSD jail - - is_tarfile - checks if the given path is a tarball - expand_path - expands relative paths and ~ entries - files_with_suffix - provides files with the given suffix - - get_process_name - provides our process' name - set_process_name - changes our process' name - -.. data:: Status (enum) - - State of a subprocess. - - .. versionadded:: 1.6.0 - - ==================== =========== - Status Description - ==================== =========== - PENDING not yet started - RUNNING currently being performed - DONE completed successfully - FAILED failed with an exception - ==================== =========== -""" - -import collections -import ctypes -import ctypes.util -import itertools -import mimetypes -import multiprocessing -import os -import platform -import re -import subprocess -import sys -import tarfile -import threading -import time - -import stem.prereq -import stem.util -import stem.util.enum -import stem.util.proc -import stem.util.str_tools - -from stem import UNDEFINED -from stem.util import log - -State = stem.util.enum.UppercaseEnum( - 'PENDING', - 'RUNNING', - 'DONE', - 'FAILED', -) - -SIZE_RECURSES = { - tuple: iter, - list: iter, - collections.deque: iter, - dict: lambda d: itertools.chain.from_iterable(d.items()), - set: iter, - frozenset: iter, -} - -# Mapping of commands to if they're available or not. - -CMD_AVAILABLE_CACHE = {} - -# An incomplete listing of commands provided by the shell. Expand this as -# needed. Some noteworthy things about shell commands... -# -# * They're not in the path so is_available() will fail. -# * subprocess.Popen() without the 'shell = True' argument will fail with... -# OSError: [Errno 2] No such file or directory - -SHELL_COMMANDS = ['ulimit'] - -IS_RUNNING_PS_LINUX = 'ps -A co command' -IS_RUNNING_PS_BSD = 'ps -ao ucomm=' -GET_NAME_BY_PID_PS = 'ps -p %s -o comm' -GET_PID_BY_NAME_PGREP = 'pgrep -x %s' -GET_PID_BY_NAME_PIDOF = 'pidof %s' -GET_PID_BY_NAME_PS_LINUX = 'ps -o pid -C %s' -GET_PID_BY_NAME_PS_BSD = 'ps axc' -GET_PID_BY_NAME_LSOF = 'lsof -tc %s' -GET_PID_BY_PORT_NETSTAT = 'netstat -npltu' -GET_PID_BY_PORT_SOCKSTAT = 'sockstat -4l -P tcp -p %s' -GET_PID_BY_PORT_LSOF = 'lsof -wnP -iTCP -sTCP:LISTEN' -GET_PID_BY_FILE_LSOF = 'lsof -tw %s' -GET_PIDS_BY_USER_LINUX = 'ps -o pid -u %s' -GET_PIDS_BY_USER_BSD = 'ps -o pid -U %s' -GET_CWD_PWDX = 'pwdx %s' -GET_CWD_LSOF = 'lsof -a -p %s -d cwd -Fn' -GET_BSD_JAIL_ID_PS = 'ps -p %s -o jid' -GET_BSD_JAIL_PATH = 'jls -j %s' - -BLOCK_SIZE = 1024 - -# flag for setting the process name, found in '/usr/include/linux/prctl.h' - -PR_SET_NAME = 15 - -argc_t = ctypes.POINTER(ctypes.c_char_p) - -# The following can fail with pypy... -# AttributeError: No symbol Py_GetArgcArgv found in library - -try: - Py_GetArgcArgv = ctypes.pythonapi.Py_GetArgcArgv - Py_GetArgcArgv.restype = None - Py_GetArgcArgv.argtypes = [ - ctypes.POINTER(ctypes.c_int), - ctypes.POINTER(argc_t), - ] -except: - Py_GetArgcArgv = None - -# This is both a cache for get_process_name() and tracks what we've changed our -# process name to. - -_PROCESS_NAME = None - -# Length of our original process name. -# -# The original author our process renaming is based on did a memset for 256, -# while Jake did it for the original process name length (capped at 1608). I'm -# not sure of the reasons for either of these limits, but setting it to -# anything higher than our original name length should be pointless, so opting -# for Jake's limit. - -_MAX_NAME_LENGTH = -1 - -# Tracks total time spent shelling out to other commands like 'ps' and -# 'netstat', so we can account for it as part of our cpu time along with -# os.times(). - -SYSTEM_CALL_TIME = 0.0 -SYSTEM_CALL_TIME_LOCK = threading.RLock() - - -class CallError(OSError): - """ - Error response when making a system call. This is an **OSError** subclass - with additional information about the process. Depending on the nature of the - error not all of these attributes will be available. - - :var str msg: exception string - :var str command: command that was ran - :var int exit_status: exit code of the process - :var float runtime: time the command took to run - :var str stdout: stdout of the process - :var str stderr: stderr of the process - """ - - def __init__(self, msg, command, exit_status, runtime, stdout, stderr): - self.msg = msg - self.command = command - self.exit_status = exit_status - self.runtime = runtime - self.stdout = stdout - self.stderr = stderr - - def __str__(self): - return self.msg - - -class CallTimeoutError(CallError): - """ - Error response when making a system call that has timed out. - - .. versionadded:: 1.6.0 - - :var float timeout: time we waited - """ - - def __init__(self, msg, command, exit_status, runtime, stdout, stderr, timeout): - super(CallTimeoutError, self).__init__(msg, command, exit_status, runtime, stdout, stderr) - self.timeout = timeout - - -class DaemonTask(object): - """ - Invokes the given function in a subprocess, returning the value. - - .. versionadded:: 1.6.0 - - :var function runner: function to be invoked by the subprocess - :var tuple args: arguments to provide to the subprocess - :var int priority: subprocess nice priority - - :var stem.util.system.State status: state of the subprocess - :var float runtime: seconds subprocess took to complete - :var object result: return value of subprocess if successful - :var exception error: exception raised by subprocess if it failed - """ - - def __init__(self, runner, args = None, priority = 15, start = False): - self.runner = runner - self.args = args - self.priority = priority - - self.status = State.PENDING - self.runtime = None - self.result = None - self.error = None - - self._process = None - self._pipe = None - - if start: - self.run() - - def run(self): - """ - Invokes the task if it hasn't already been started. If it has this is a - no-op. - """ - - if self.status == State.PENDING: - self._pipe, child_pipe = multiprocessing.Pipe() - self._process = multiprocessing.Process(target = DaemonTask._run_wrapper, args = (child_pipe, self.priority, self.runner, self.args)) - self._process.start() - self.status = State.RUNNING - - def join(self): - """ - Provides the result of the daemon task. If still running this blocks until - the task is completed. - - :returns: response of the function we ran - - :raises: exception raised by the function if it failed with one - """ - - if self.status == State.PENDING: - self.run() - - if self.status == State.RUNNING: - self._process.join() - response = self._pipe.recv() - - self.status = response[0] - self.runtime = response[1] - - if self.status == State.DONE: - self.result = response[2] - elif self.status == State.FAILED: - self.error = response[2] - - if self.status == State.DONE: - return self.result - elif self.status == State.FAILED: - raise self.error - else: - raise RuntimeError('BUG: unexpected status from daemon task, %s' % self.status) - - @staticmethod - def _run_wrapper(conn, priority, runner, args): - start_time = time.time() - os.nice(priority) - - try: - result = runner(*args) if args else runner() - conn.send((State.DONE, time.time() - start_time, result)) - except Exception as exc: - conn.send((State.FAILED, time.time() - start_time, exc)) - finally: - conn.close() - - -def is_windows(): - """ - Checks if we are running on Windows. - - :returns: **bool** to indicate if we're on Windows - """ - - return platform.system() == 'Windows' - - -def is_mac(): - """ - Checks if we are running on Mac OSX. - - :returns: **bool** to indicate if we're on a Mac - """ - - return platform.system() == 'Darwin' - - -def is_gentoo(): - """ - Checks if we're running on Gentoo. - - :returns: **bool** to indicate if we're on Gentoo - """ - - return os.path.exists('/etc/gentoo-release') - - -def is_slackware(): - """ - Checks if we are running on a Slackware system. - - :returns: **bool** to indicate if we're on a Slackware system - """ - - return os.path.exists('/etc/slackware-version') - - -def is_bsd(): - """ - Checks if we are within the BSD family of operating systems. This currently - recognizes Macs, FreeBSD, and OpenBSD but may be expanded later. - - :returns: **bool** to indicate if we're on a BSD OS - """ - - return platform.system() in ('Darwin', 'FreeBSD', 'OpenBSD', 'NetBSD') - - -def is_available(command, cached=True): - """ - Checks the current PATH to see if a command is available or not. If more - than one command is present (for instance "ls -a | grep foo") then this - just checks the first. - - Note that shell (like cd and ulimit) aren't in the PATH so this lookup will - try to assume that it's available. This only happends for recognized shell - commands (those in SHELL_COMMANDS). - - :param str command: command to search for - :param bool cached: makes use of available cached results if **True** - - :returns: **True** if an executable we can use by that name exists in the - PATH, **False** otherwise - """ - - if ' ' in command: - command = command.split(' ')[0] - - if command in SHELL_COMMANDS: - return True # we can't actually look it up, so hope the shell really provides it... - elif cached and command in CMD_AVAILABLE_CACHE: - return CMD_AVAILABLE_CACHE[command] - elif 'PATH' not in os.environ: - return False # lacking a path will cause find_executable() to internally fail - - cmd_exists = False - - for path in os.environ['PATH'].split(os.pathsep): - cmd_path = os.path.join(path, command) - - if is_windows(): - cmd_path += '.exe' - - if os.path.exists(cmd_path) and os.access(cmd_path, os.X_OK): - cmd_exists = True - break - - CMD_AVAILABLE_CACHE[command] = cmd_exists - return cmd_exists - - -def is_running(command): - """ - Checks for if a process with a given name or pid is running. - - .. versionchanged:: 1.6.0 - Added support for list and pid arguments. - - :param str,list,int command: process name if a str, multiple process names if - a list, or pid if an int to be checked - - :returns: **True** if the process is running, **False** if it's not among ps - results, and **None** if ps can't be queried - """ - - if isinstance(command, int): - try: - os.kill(command, 0) - return True - except OSError: - return False - - # Linux and the BSD families have different variants of ps. Guess based on - # the is_bsd() check which to try first, then fall back to the other. - # - # Linux - # -A - Select all processes. - # -co command - Shows just the base command. - # - # Mac / BSD - # -a - Display information about other users' processes as well as - # our own. - # -o ucomm= - Shows just the ucomm attribute ("name to be used for - # accounting") - - if is_available('ps'): - if is_bsd(): - primary_resolver = IS_RUNNING_PS_BSD - secondary_resolver = IS_RUNNING_PS_LINUX - else: - primary_resolver = IS_RUNNING_PS_LINUX - secondary_resolver = IS_RUNNING_PS_BSD - - command_listing = call(primary_resolver, None) - - if not command_listing: - command_listing = call(secondary_resolver, None) - - if command_listing: - command_listing = [c.strip() for c in command_listing] - - if stem.util._is_str(command): - command = [command] - - for cmd in command: - if cmd in command_listing: - return True - - return False - - return None - - -def size_of(obj, exclude = None): - """ - Provides the `approximate memory usage of an object - `_. This can recurse tuples, - lists, deques, dicts, and sets. To teach this function to inspect additional - object types expand SIZE_RECURSES... - - :: - - stem.util.system.SIZE_RECURSES[SomeClass] = SomeClass.get_elements - - .. versionadded:: 1.6.0 - - :param object obj: object to provide the size of - :param set exclude: object ids to exclude from size estimation - - :returns: **int** with the size of the object in bytes - - :raises: **NotImplementedError** if using PyPy - """ - - if stem.prereq.is_pypy(): - raise NotImplementedError('PyPy does not implement sys.getsizeof()') - - if exclude is None: - exclude = set() - elif id(obj) in exclude: - return 0 - - try: - size = sys.getsizeof(obj) - except TypeError: - size = sys.getsizeof(0) # estimate if object lacks a __sizeof__ - - exclude.add(id(obj)) - - if type(obj) in SIZE_RECURSES: - for entry in SIZE_RECURSES[type(obj)](obj): - size += size_of(entry, exclude) - - return size - - -def name_by_pid(pid): - """ - Attempts to determine the name a given process is running under (not - including arguments). This uses... - - :: - - 1. Information from /proc - 2. ps -p -o command - - :param int pid: process id of the process to be queried - - :returns: **str** with the process name, **None** if it can't be determined - """ - - process_name = None - - if stem.util.proc.is_available(): - try: - process_name = stem.util.proc.stats(pid, stem.util.proc.Stat.COMMAND)[0] - except IOError: - pass - - # attempts to resolve using ps, failing if: - # - system's ps variant doesn't handle these flags (none known at the moment) - # - # example output: - # atagar@morrigan:~$ ps -p 5767 -o comm - # COMMAND - # vim - - if not process_name: - try: - results = call(GET_NAME_BY_PID_PS % pid) - except OSError: - results = None - - if results and len(results) == 2 and results[0] == 'COMMAND': - process_name = results[1].strip() - - return process_name - - -def pid_by_name(process_name, multiple = False): - """ - Attempts to determine the process id for a running process, using... - - :: - - 1. pgrep -x - 2. pidof - 3. ps -o pid -C (linux) - ps axc | egrep " $" (bsd) - 4. lsof -tc - 5. tasklist | str .exe - - :param str process_name: process name for which to fetch the pid - :param bool multiple: provides a list of all pids if **True**, otherwise - results with multiple processes are discarded - - :returns: - Response depends upon the 'multiple' argument as follows... - - * if **False** then this provides an **int** with the process id or **None** if it can't be determined - * if **True** then this provides a **list** of all **int** process ids, and an empty list if it can't be determined - """ - - # attempts to resolve using pgrep, failing if: - # - we're running on bsd (command unavailable) - # - # example output: - # atagar@morrigan:~$ pgrep -x vim - # 3283 - # 3392 - - if is_available('pgrep'): - results = call(GET_PID_BY_NAME_PGREP % process_name, None) - - if results: - try: - pids = list(map(int, results)) - - if multiple: - return pids - elif len(pids) == 1: - return pids[0] - except ValueError: - pass - - # attempts to resolve using pidof, failing if: - # - we're running on bsd (command unavailable) - # - # example output: - # atagar@morrigan:~$ pidof vim - # 3392 3283 - - if is_available('pidof'): - results = call(GET_PID_BY_NAME_PIDOF % process_name, None) - - if results and len(results) == 1: - try: - pids = list(map(int, results[0].split())) - - if multiple: - return pids - elif len(pids) == 1: - return pids[0] - except ValueError: - pass - - # attempts to resolve using ps, failing if: - # - system's ps variant doesn't handle these flags (none known at the moment) - # - # example output: - # atagar@morrigan:~/Desktop/stem$ ps -o pid -C vim - # PID - # 3283 - # 3392 - # - # atagar$ ps axc - # PID TT STAT TIME COMMAND - # 1 ?? Ss 9:00.22 launchd - # 10 ?? Ss 0:09.97 kextd - # 11 ?? Ss 5:47.36 DirectoryService - # 12 ?? Ss 3:01.44 notifyd - - if is_available('ps'): - if not is_bsd(): - # linux variant of ps - results = call(GET_PID_BY_NAME_PS_LINUX % process_name, None) - - if results: - try: - pids = list(map(int, results[1:])) - - if multiple: - return pids - elif len(pids) == 1: - return pids[0] - except ValueError: - pass - - if is_bsd(): - # bsd variant of ps - results = call(GET_PID_BY_NAME_PS_BSD, None) - - if results: - # filters results to those with our process name - results = [r.split()[0] for r in results if r.endswith(' %s' % process_name)] - - try: - pids = list(map(int, results)) - - if multiple: - return pids - elif len(pids) == 1: - return pids[0] - except ValueError: - pass - - # resolves using lsof which works on both Linux and BSD, only failing if: - # - lsof is unavailable (not included by default on OpenBSD) - # - the process being run as a different user due to permissions - # - the process doesn't have any open files to be reported by lsof? - # - # flags: - # t - only show pids - # c - restrict results to that command - # - # example output: - # atagar@morrigan:~$ lsof -t -c vim - # 2470 - # 2561 - - if is_available('lsof'): - results = call(GET_PID_BY_NAME_LSOF % process_name, None) - - if results: - try: - pids = list(map(int, results)) - - if multiple: - return pids - elif len(pids) == 1: - return pids[0] - except ValueError: - pass - - if is_available('tasklist') and is_windows(): - if not process_name.endswith('.exe'): - process_name = process_name + '.exe' - - process_ids = [] - - results = stem.util.system.call('tasklist', None) - - if results: - tasklist_regex = re.compile('^\\s*%s\\s+(?P[0-9]*)' % process_name) - - for line in results: - match = tasklist_regex.search(line) - - if match: - process_ids.append(int(match.group('pid'))) - - if multiple: - return process_ids - elif len(process_ids) > 0: - return process_ids[0] - - log.debug("failed to resolve a pid for '%s'" % process_name) - return [] if multiple else None - - -def pid_by_port(port): - """ - Attempts to determine the process id for a process with the given port, - using... - - :: - - 1. netstat -npltu | grep 127.0.0.1: - 2. sockstat -4l -P tcp -p - 3. lsof -wnP -iTCP -sTCP:LISTEN | grep ":" - - Most queries limit results to listening TCP connections. This function likely - won't work on Mac OSX. - - :param int port: port where the process we're looking for is listening - - :returns: **int** with the process id, **None** if it can't be determined - """ - - # attempts to resolve using netstat, failing if: - # - netstat doesn't accept these flags (Linux only) - # - the process being run as a different user due to permissions - # - # flags: - # n - numeric (disables hostname lookups) - # p - program (include pids) - # l - listening (include listening sockets) - # tu - show tcp and udp sockets, and nothing else - # - # example output: - # atagar@morrigan:~$ netstat -npltu - # Active Internet connections (only servers) - # Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name - # tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - - # tcp 0 0 127.0.0.1:9051 0.0.0.0:* LISTEN 1641/tor - # tcp6 0 0 ::1:631 :::* LISTEN - - # udp 0 0 0.0.0.0:5353 0.0.0.0:* - - # udp6 0 0 fe80::7ae4:ff:fe2f::123 :::* - - - if is_available('netstat'): - results = call(GET_PID_BY_PORT_NETSTAT, None) - - if results: - # filters to results with our port - results = [r for r in results if '127.0.0.1:%s' % port in r] - - if len(results) == 1 and len(results[0].split()) == 7: - results = results[0].split()[6] # process field (ex. "7184/tor") - pid = results[:results.find('/')] - - if pid.isdigit(): - return int(pid) - - # attempts to resolve using sockstat, failing if: - # - sockstat doesn't accept the -4 flag (BSD only) - # - sockstat isn't available (encountered with OSX 10.5.8) - # - there are multiple instances using the same port on different addresses - # - # flags: - # 4 - only show IPv4 sockets - # l - listening sockets - # P tcp - only show tcp connections - # p - only includes results if the local or foreign port match this - # - # example output: - # # sockstat -4 | grep tor - # _tor tor 4397 7 tcp4 51.64.7.84:9050 *:* - # _tor tor 4397 8 udp4 51.64.7.84:53 *:* - # _tor tor 4397 12 tcp4 51.64.7.84:54011 80.3.121.7:9001 - # _tor tor 4397 15 tcp4 51.64.7.84:59374 7.42.1.102:9001 - # _tor tor 4397 20 tcp4 51.64.7.84:51946 32.83.7.104:443 - - if is_available('sockstat'): - results = call(GET_PID_BY_PORT_SOCKSTAT % port, None) - - if results: - # filters to results where this is the local port - results = [r for r in results if (len(r.split()) == 7 and (':%s' % port) in r.split()[5])] - - if len(results) == 1: - pid = results[0].split()[2] - - if pid.isdigit(): - return int(pid) - - # resolves using lsof which works on both Linux and BSD, only failing if: - # - lsof is unavailable (not included by default on OpenBSD) - # - lsof doesn't provide the port ip/port, nor accept the -i and -s args - # (encountered with OSX 10.5.8) - # - the process being run as a different user due to permissions - # - there are multiple instances using the same port on different addresses - # - # flags: - # w - disables warning messages - # n - numeric addresses (disables hostname lookups) - # P - numeric ports (disables replacement of ports with their protocol) - # iTCP - only show tcp connections - # sTCP:LISTEN - listening sockets - # - # example output: - # atagar@morrigan:~$ lsof -wnP -iTCP -sTCP:LISTEN - # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME - # tor 1745 atagar 6u IPv4 14229 0t0 TCP 127.0.0.1:9051 (LISTEN) - - if is_available('lsof'): - results = call(GET_PID_BY_PORT_LSOF, None) - - if results: - # filters to results with our port - results = [r for r in results if (len(r.split()) == 10 and (':%s' % port) in r.split()[8])] - - if len(results) == 1: - pid = results[0].split()[1] - - if pid.isdigit(): - return int(pid) - - return None # all queries failed - - -def pid_by_open_file(path): - """ - Attempts to determine the process id for a process with the given open file, - using... - - :: - - lsof -w - - :param str path: location of the socket file to query against - - :returns: **int** with the process id, **None** if it can't be determined - """ - - # resolves using lsof which works on both Linux and BSD, only failing if: - # - lsof is unavailable (not included by default on OpenBSD) - # - the file can't be read due to permissions - # - # flags: - # t - only show pids - # w - disables warning messages - # - # example output: - # atagar@morrigan:~$ lsof -tw /tmp/foo - # 4762 - - if is_available('lsof'): - results = call(GET_PID_BY_FILE_LSOF % path, []) - - if len(results) == 1: - pid = results[0].strip() - - if pid.isdigit(): - return int(pid) - - return None # all queries failed - - -def pids_by_user(user): - """ - Provides processes owned by a given user. - - .. versionadded:: 1.5.0 - - :param str user: user to look up processes for - - :returns: **list** with the process ids, **None** if it can't be determined - """ - - # example output: - # atagar@odin:~$ ps -o pid -u avahi - # PID - # 914 - # 915 - - if is_available('ps'): - if is_bsd(): - results = call(GET_PIDS_BY_USER_BSD % user, None) - else: - results = call(GET_PIDS_BY_USER_LINUX % user, None) - - if results: - try: - return list(map(int, results[1:])) - except ValueError: - pass - - return None - - -def cwd(pid): - """ - Provides the working directory of the given process. - - :param int pid: process id of the process to be queried - - :returns: **str** with the absolute path for the process' present working - directory, **None** if it can't be determined - """ - - # try fetching via the proc contents if it's available - if stem.util.proc.is_available(): - try: - return stem.util.proc.cwd(pid) - except IOError: - pass - - # Fall back to a pwdx query. This isn't available on BSD. - logging_prefix = 'cwd(%s):' % pid - - if is_available('pwdx'): - # pwdx results are of the form: - # 3799: /home/atagar - # 5839: No such process - - results = call(GET_CWD_PWDX % pid, None) - - if not results: - log.debug("%s pwdx didn't return any results" % logging_prefix) - elif results[0].endswith('No such process'): - log.debug('%s pwdx processes reported for this pid' % logging_prefix) - elif len(results) != 1 or results[0].count(' ') != 1 or not results[0].startswith('%s: ' % pid): - log.debug('%s we got unexpected output from pwdx: %s' % (logging_prefix, results)) - else: - return results[0].split(' ', 1)[1].strip() - - # Use lsof as the final fallback. This is available on both Linux and is the - # only lookup method here that works for BSD... - # https://trac.torproject.org/projects/tor/ticket/4236 - # - # flags: - # a - presents the intersection of the following arguments - # p - limits results to this pid - # d cwd - limits results to just the cwd rather than all open files - # Fn - short listing in a single column, with just the pid and cwd - # - # example output: - # ~$ lsof -a -p 75717 -d cwd -Fn - # p75717 - # n/Users/atagar/tor/src/or - - if is_available('lsof'): - results = call(GET_CWD_LSOF % pid, []) - - if len(results) >= 2 and results[-1].startswith('n/'): - lsof_result = results[-1][1:].strip() - - # If we lack read permissions for the cwd then it returns... - # p2683 - # n/proc/2683/cwd (readlink: Permission denied) - - if ' ' not in lsof_result: - return lsof_result - else: - log.debug('%s we got unexpected output from lsof: %s' % (logging_prefix, results)) - - return None # all queries failed - - -def user(pid): - """ - Provides the user a process is running under. - - :param int pid: process id of the process to be queried - - :returns: **str** with the username a process is running under, **None** if - it can't be determined - """ - - if not isinstance(pid, int) or pid < 0: - return None - - if stem.util.proc.is_available(): - try: - import pwd # only available on unix platforms - - uid = stem.util.proc.uid(pid) - - if uid and uid.isdigit(): - return pwd.getpwuid(int(uid)).pw_name - except: - pass - - if is_available('ps'): - results = call('ps -o user %s' % pid, []) - - if len(results) >= 2: - return results[1].strip() - - return None - - -def start_time(pid): - """ - Provides the unix timestamp when the given process started. - - :param int pid: process id of the process to be queried - - :returns: **float** for the unix timestamp when the process began, **None** - if it can't be determined - """ - - if not isinstance(pid, int) or pid < 0: - return None - - if stem.util.proc.is_available(): - try: - return float(stem.util.proc.stats(pid, stem.util.proc.Stat.START_TIME)[0]) - except IOError: - pass - - try: - ps_results = call('ps -p %s -o etime' % pid, []) - - if len(ps_results) >= 2: - etime = ps_results[1].strip() - return time.time() - stem.util.str_tools.parse_short_time_label(etime) - except: - pass - - return None - - -def tail(target, lines = None): - """ - Provides lines of a file starting with the end. For instance, - 'tail -n 50 /tmp/my_log' could be done with... - - :: - - reversed(list(tail('/tmp/my_log', 50))) - - :param str,file target: path or file object to read from - :param int lines: number of lines to read - - :returns: **generator** that reads lines, starting with the end - - :raises: **IOError** if unable to read the file - """ - - if isinstance(target, str): - with open(target, 'rb') as target_file: - for line in tail(target_file, lines): - yield line - - return - - # based on snippet from... - # https://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail - - target.seek(0, 2) # go to the end of the file - block_end_byte = target.tell() - block_number = -1 - content = b'' - - while (lines is None or lines > 0) and block_end_byte > 0: - if (block_end_byte - BLOCK_SIZE > 0): - # read the last block we haven't yet read - target.seek(block_number * BLOCK_SIZE, 2) - content, completed_lines = (target.read(BLOCK_SIZE) + content).split(b'\n', 1) - else: - # reached the start of the file, just read what's left - target.seek(0, 0) - completed_lines = target.read(block_end_byte) + content - - for line in reversed(completed_lines.splitlines()): - if lines is None or lines > 0: - if lines is not None: - lines -= 1 - - yield stem.util.str_tools._to_unicode(line) - - block_end_byte -= BLOCK_SIZE - block_number -= 1 - - -def bsd_jail_id(pid): - """ - Gets the jail id for a process. These seem to only exist for FreeBSD (this - style for jails does not exist on Linux, OSX, or OpenBSD). - - :param int pid: process id of the jail id to be queried - - :returns: **int** for the jail id, zero if this can't be determined - """ - - # Output when called from a FreeBSD jail or when Tor isn't jailed: - # JID - # 0 - # - # Otherwise it's something like: - # JID - # 1 - - ps_output = call(GET_BSD_JAIL_ID_PS % pid, []) - - if len(ps_output) == 2 and len(ps_output[1].split()) == 1: - jid = ps_output[1].strip() - - if jid.isdigit(): - return int(jid) - - os_name = platform.system() - if os_name == 'FreeBSD': - log.warn('Unable to get the jail id for process %s.' % pid) - else: - log.debug('bsd_jail_id(%s): jail ids do not exist on %s' % (pid, os_name)) - - return 0 - - -def bsd_jail_path(jid): - """ - Provides the path of the given FreeBSD jail. - - :param int jid: jail id to be queried - - :returns: **str** of the path prefix, **None** if this can't be determined - """ - - if jid != 0: - # Output should be something like: - # JID IP Address Hostname Path - # 1 10.0.0.2 tor-jail /usr/jails/tor-jail - - jls_output = call(GET_BSD_JAIL_PATH % jid, []) - - if len(jls_output) == 2 and len(jls_output[1].split()) == 4: - return jls_output[1].split()[3] - - return None - - -def is_tarfile(path): - """ - Returns if the path belongs to a tarfile or not. - - .. versionadded:: 1.2.0 - - :param str path: path to be checked - - :returns: **True** if the path belongs to a tarball, **False** otherwise - """ - - # Checking if it's a tar file may fail due to permissions so failing back - # to the mime type... - # - # IOError: [Errno 13] Permission denied: '/vmlinuz.old' - # - # With python 3 insuffient permissions raises an AttributeError instead... - # - # http://bugs.python.org/issue17059 - - try: - return tarfile.is_tarfile(path) - except (IOError, AttributeError): - return mimetypes.guess_type(path)[0] == 'application/x-tar' - - -def expand_path(path, cwd = None): - """ - Provides an absolute path, expanding tildes with the user's home and - appending a current working directory if the path was relative. - - :param str path: path to be expanded - :param str cwd: current working directory to expand relative paths with, our - process' if this is **None** - - :returns: **str** of the path expanded to be an absolute path, never with an - ending slash - """ - - if is_windows(): - relative_path = path.replace('/', '\\').rstrip('\\') - else: - relative_path = path.rstrip('/') - - if not relative_path or os.path.isabs(relative_path): - # empty or already absolute - nothing to do - pass - elif relative_path.startswith('~'): - # prefixed with a ~ or ~user entry - relative_path = os.path.expanduser(relative_path) - else: - # relative path, expand with the cwd - - if not cwd: - cwd = os.getcwd() - - # we'll be dealing with both "my/path/" and "./my/path" entries, so - # cropping the later - if relative_path.startswith('./') or relative_path.startswith('.\\'): - relative_path = relative_path[2:] - elif relative_path == '.': - relative_path = '' - - if relative_path == '': - relative_path = cwd - else: - relative_path = os.path.join(cwd, relative_path) - - return relative_path - - -def files_with_suffix(base_path, suffix): - """ - Iterates over files in a given directory, providing filenames with a certain - suffix. - - .. versionadded:: 1.2.0 - - :param str base_path: directory to be iterated over - :param str suffix: filename suffix to look for - - :returns: iterator that yields the absolute path for files with the given suffix - """ - - if os.path.isfile(base_path): - if base_path.endswith(suffix): - yield base_path - else: - for root, _, files in os.walk(base_path): - for filename in files: - if filename.endswith(suffix): - yield os.path.join(root, filename) - - -def call(command, default = UNDEFINED, ignore_exit_status = False, timeout = None, cwd = None, env = None): - """ - call(command, default = UNDEFINED, ignore_exit_status = False) - - Issues a command in a subprocess, blocking until completion and returning the - results. This is not actually ran in a shell so pipes and other shell syntax - are not permitted. - - .. versionchanged:: 1.5.0 - Providing additional information upon failure by raising a CallError. This - is a subclass of OSError, providing backward compatibility. - - .. versionchanged:: 1.5.0 - Added env argument. - - .. versionchanged:: 1.6.0 - Added timeout and cwd arguments. - - :param str,list command: command to be issued - :param object default: response if the query fails - :param bool ignore_exit_status: reports failure if our command's exit status - was non-zero - :param float timeout: maximum seconds to wait, blocks indefinitely if - **None** - :param dict env: environment variables - - :returns: **list** with the lines of output from the command - - :raises: - * **CallError** if this fails and no default was provided - * **CallTimeoutError** if the timeout is reached without a default - """ - - # TODO: in stem 2.x return a struct with stdout, stderr, and runtime instead - - global SYSTEM_CALL_TIME - - if isinstance(command, str): - command_list = command.split(' ') - else: - command_list = list(map(str, command)) - - exit_status, runtime, stdout, stderr = None, None, None, None - start_time = time.time() - - try: - is_shell_command = command_list[0] in SHELL_COMMANDS - - process = subprocess.Popen(command_list, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = is_shell_command, cwd = cwd, env = env) - - if timeout: - while process.poll() is None: - if time.time() - start_time > timeout: - raise CallTimeoutError("Process didn't finish after %0.1f seconds" % timeout, ' '.join(command_list), None, timeout, '', '', timeout) - - time.sleep(0.001) - - stdout, stderr = process.communicate() - stdout, stderr = stdout.strip(), stderr.strip() - runtime = time.time() - start_time - - log.debug('System call: %s (runtime: %0.2f)' % (command, runtime)) - - if log.is_tracing(): - trace_prefix = 'Received from system (%s)' % command - - if stdout and stderr: - log.trace(trace_prefix + ', stdout:\n%s\nstderr:\n%s' % (stdout, stderr)) - elif stdout: - log.trace(trace_prefix + ', stdout:\n%s' % stdout) - elif stderr: - log.trace(trace_prefix + ', stderr:\n%s' % stderr) - - exit_status = process.poll() - - if not ignore_exit_status and exit_status != 0: - raise OSError('%s returned exit status %i' % (command, exit_status)) - - if stdout: - return stdout.decode('utf-8', 'replace').splitlines() - else: - return [] - except CallTimeoutError: - log.debug('System call (timeout): %s (after %0.4fs)' % (command, timeout)) - - if default != UNDEFINED: - return default - else: - raise - except OSError as exc: - log.debug('System call (failed): %s (error: %s)' % (command, exc)) - - if default != UNDEFINED: - return default - else: - raise CallError(str(exc), ' '.join(command_list), exit_status, runtime, stdout, stderr) - finally: - with SYSTEM_CALL_TIME_LOCK: - SYSTEM_CALL_TIME += time.time() - start_time - - -def get_process_name(): - """ - Provides the present name of our process. - - :returns: **str** with the present name of our process - """ - - global _PROCESS_NAME, _MAX_NAME_LENGTH - - if _PROCESS_NAME is None: - # Example output... - # - # COMMAND - # python run_tests.py --unit - - ps_output = call('ps -p %i -o args' % os.getpid(), []) - - if len(ps_output) == 2 and ps_output[0] in ('COMMAND', 'ARGS'): - _PROCESS_NAME = ps_output[1] - else: - # Falling back on using ctypes to get our argv. Unfortunately the simple - # method for getting this... - # - # ' '.join(['python'] + sys.argv) - # - # ... doesn't do the trick since this will miss interpreter arguments. - # - # python -W ignore::DeprecationWarning my_script.py - - args, argc = [], argc_t() - - for i in range(100): - # The ending index can be either None or raise a ValueError when - # accessed... - # - # ValueError: NULL pointer access - - try: - if argc[i] is None: - break - except ValueError: - break - - args.append(str(argc[i])) - - _PROCESS_NAME = ' '.join(args) - - _MAX_NAME_LENGTH = len(_PROCESS_NAME) - - return _PROCESS_NAME - - -def set_process_name(process_name): - """ - Renames our current process from "python " to a custom name. This is - best-effort, not necessarily working on all platforms. - - :param str process_name: new name for our process - - :raises: **IOError** if the process cannot be renamed - """ - - # This is mostly based on... - # - # http://www.rhinocerus.net/forum/lang-python/569677-setting-program-name-like-0-perl.html#post2272369 - # - # ... and an adaptation by Jake... - # - # https://github.com/ioerror/chameleon - # - # A cleaner implementation is available at... - # - # https://github.com/cream/libs/blob/b38970e2a6f6d2620724c828808235be0445b799/cream/util/procname.py - # - # but I'm not quite clear on their implementation, and it only does targeted - # argument replacement (ie, replace argv[0], argv[1], etc but with a string - # the same size). - - _set_argv(process_name) - - if platform.system() == 'Linux': - _set_prctl_name(process_name) - elif platform.system() in ('Darwin', 'FreeBSD', 'OpenBSD'): - _set_proc_title(process_name) - - -def _set_argv(process_name): - """ - Overwrites our argv in a similar fashion to how it's done in C with: - strcpy(argv[0], 'new_name'); - """ - - if Py_GetArgcArgv is None: - return - - global _PROCESS_NAME - - # both gets the current process name and initializes _MAX_NAME_LENGTH - - current_name = get_process_name() - - argv, argc = ctypes.c_int(0), argc_t() - Py_GetArgcArgv(argv, ctypes.pointer(argc)) - - if len(process_name) > _MAX_NAME_LENGTH: - raise IOError("Can't rename process to something longer than our initial name (this would overwrite memory used for the env)") - - # space we need to clear - zero_size = max(len(current_name), len(process_name)) - - ctypes.memset(argc.contents, 0, zero_size + 1) # null terminate the string's end - process_name_encoded = process_name.encode('utf8') - ctypes.memmove(argc.contents, process_name_encoded, len(process_name)) - _PROCESS_NAME = process_name - - -def _set_prctl_name(process_name): - """ - Sets the prctl name, which is used by top and killall. This appears to be - Linux specific and has the max of 15 characters. - - This is from... - http://stackoverflow.com/questions/564695/is-there-a-way-to-change-effective-process-name-in-python/923034#923034 - """ - - libc = ctypes.CDLL(ctypes.util.find_library('c')) - name_buffer = ctypes.create_string_buffer(len(process_name) + 1) - name_buffer.value = stem.util.str_tools._to_bytes(process_name) - libc.prctl(PR_SET_NAME, ctypes.byref(name_buffer), 0, 0, 0) - - -def _set_proc_title(process_name): - """ - BSD specific calls (should be compataible with both FreeBSD and OpenBSD: - http://fxr.watson.org/fxr/source/gen/setproctitle.c?v=FREEBSD-LIBC - http://www.rootr.net/man/man/setproctitle/3 - """ - - libc = ctypes.CDLL(ctypes.util.find_library('c')) - name_buffer = ctypes.create_string_buffer(len(process_name) + 1) - name_buffer.value = process_name.encode() - - try: - libc.setproctitle(ctypes.byref(name_buffer)) - except AttributeError: - # Possible issue (seen on OSX): - # AttributeError: dlsym(0x7fff6a41d1e0, setproctitle): symbol not found - - pass - - -# TODO: drop with stem 2.x -# We renamed our methods to drop a redundant 'get_*' prefix, so alias the old -# names for backward compatability. - -get_name_by_pid = name_by_pid -get_pid_by_name = pid_by_name -get_pid_by_port = pid_by_port -get_pid_by_open_file = pid_by_open_file -get_cwd = cwd -get_user = user -get_start_time = start_time -get_bsd_jail_id = bsd_jail_id -get_bsd_jail_path = bsd_jail_path diff --git a/myenv/lib/python3.12/site-packages/stem/util/term.py b/myenv/lib/python3.12/site-packages/stem/util/term.py deleted file mode 100644 index 48ab1e2..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/term.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Utilities for working with the terminal. - -**Module Overview:** - -:: - - encoding - provides the ANSI escape sequence for a terminal attribute - format - wrap text with ANSI for the given colors or attributes - -.. data:: Color (enum) -.. data:: BgColor (enum) - - Foreground or background terminal colors. - - =========== =========== - Color Description - =========== =========== - **BLACK** black color - **BLUE** blue color - **CYAN** cyan color - **GREEN** green color - **MAGENTA** magenta color - **RED** red color - **WHITE** white color - **YELLOW** yellow color - =========== =========== - -.. data:: Attr (enum) - - Terminal text attributes. - - .. versionchanged:: 1.5.0 - Added the LINES attribute. - - =================== =========== - Attr Description - =================== =========== - **BOLD** heavy typeface - **HIGHLIGHT** inverted foreground and background - **UNDERLINE** underlined text - **READLINE_ESCAPE** wrap encodings in `RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE sequences `_ - **LINES** formats lines individually - =================== =========== -""" - -import stem.util.enum -import stem.util.str_tools - -TERM_COLORS = ('BLACK', 'RED', 'GREEN', 'YELLOW', 'BLUE', 'MAGENTA', 'CYAN', 'WHITE') - -# DISABLE_COLOR_SUPPORT is *not* being vended to Stem users. This is likely to -# go away if I can think of a more graceful method for color toggling. - -DISABLE_COLOR_SUPPORT = False - -Color = stem.util.enum.Enum(*TERM_COLORS) -BgColor = stem.util.enum.Enum(*['BG_' + color for color in TERM_COLORS]) -Attr = stem.util.enum.Enum('BOLD', 'UNDERLINE', 'HIGHLIGHT', 'READLINE_ESCAPE', 'LINES') - -# mappings of terminal attribute enums to their ANSI escape encoding -FG_ENCODING = dict([(list(Color)[i], str(30 + i)) for i in range(8)]) -BG_ENCODING = dict([(list(BgColor)[i], str(40 + i)) for i in range(8)]) -ATTR_ENCODING = {Attr.BOLD: '1', Attr.UNDERLINE: '4', Attr.HIGHLIGHT: '7'} - -CSI = '\x1B[%sm' -RESET = CSI % '0' - - -def encoding(*attrs): - """ - Provides the ANSI escape sequence for these terminal color or attributes. - - .. versionadded:: 1.5.0 - - :param list attr: :data:`~stem.util.terminal.Color`, - :data:`~stem.util.terminal.BgColor`, or :data:`~stem.util.terminal.Attr` to - provide an ecoding for - - :returns: **str** of the ANSI escape sequence, **None** no attributes are - recognized - """ - - term_encodings = [] - - for attr in attrs: - # TODO: Account for an earlier misspelled attribute. This should be dropped - # in Stem. 2.0.x. - - if attr == 'HILIGHT': - attr = 'HIGHLIGHT' - - attr = stem.util.str_tools._to_camel_case(attr) - term_encoding = FG_ENCODING.get(attr, None) - term_encoding = BG_ENCODING.get(attr, term_encoding) - term_encoding = ATTR_ENCODING.get(attr, term_encoding) - - if term_encoding: - term_encodings.append(term_encoding) - - if term_encodings: - return CSI % ';'.join(term_encodings) - - -def format(msg, *attr): - """ - Simple terminal text formatting using `ANSI escape sequences - `_. - The following are some toolkits providing similar capabilities: - - * `django.utils.termcolors `_ - * `termcolor `_ - * `colorama `_ - - .. versionchanged:: 1.6.0 - Normalized return value to be unicode to better support python 2/3 - compatibility. - - :param str msg: string to be formatted - :param str attr: text attributes, this can be :data:`~stem.util.term.Color`, - :data:`~stem.util.term.BgColor`, or :data:`~stem.util.term.Attr` enums - and are case insensitive (so strings like 'red' are fine) - - :returns: **unicode** wrapped with ANSI escape encodings, starting with the given - attributes and ending with a reset - """ - - msg = stem.util.str_tools._to_unicode(msg) - - if DISABLE_COLOR_SUPPORT: - return msg - - if Attr.LINES in attr: - attr = list(attr) - attr.remove(Attr.LINES) - lines = [format(line, *attr) for line in msg.split('\n')] - return '\n'.join(lines) - - # if we have reset sequences in the message then apply our attributes - # after each of them - - if RESET in msg: - return ''.join([format(comp, *attr) for comp in msg.split(RESET)]) - - prefix, suffix = encoding(*attr), RESET - - if prefix: - if Attr.READLINE_ESCAPE in attr: - prefix = '\001%s\002' % prefix - suffix = '\001%s\002' % suffix - - return prefix + msg + suffix - else: - return msg diff --git a/myenv/lib/python3.12/site-packages/stem/util/test_tools.py b/myenv/lib/python3.12/site-packages/stem/util/test_tools.py deleted file mode 100644 index 36c88f6..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/test_tools.py +++ /dev/null @@ -1,673 +0,0 @@ -# Copyright 2015-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Helper functions for testing. - -Our **stylistic_issues**, **pyflakes_issues**, and **type_check_issues** -respect a 'exclude_paths' in our test config, excluding any absolute paths -matching those regexes. Issue strings can start or end with an asterisk -to match just against the prefix or suffix. For instance... - -:: - - exclude_paths .*/stem/test/data/.* - -.. versionadded:: 1.2.0 - -:: - - TimedTestRunner - test runner that tracks test runtimes - test_runtimes - provides runtime of tests excuted through TimedTestRunners - clean_orphaned_pyc - delete *.pyc files without corresponding *.py - - is_pyflakes_available - checks if pyflakes is available - is_pycodestyle_available - checks if pycodestyle is available - - pyflakes_issues - static checks for problems via pyflakes - stylistic_issues - checks for PEP8 and other stylistic issues -""" - -import collections -import linecache -import multiprocessing -import os -import re -import threading -import time -import traceback -import unittest - -import stem.prereq -import stem.util.conf -import stem.util.enum -import stem.util.system - -CONFIG = stem.util.conf.config_dict('test', { - 'pep8.ignore': [], # TODO: drop with stem 2.x, legacy alias for pycodestyle.ignore - 'pycodestyle.ignore': [], - 'pyflakes.ignore': [], - 'exclude_paths': [], -}) - -TEST_RUNTIMES = {} -ASYNC_TESTS = {} - -AsyncStatus = stem.util.enum.UppercaseEnum('PENDING', 'RUNNING', 'FINISHED') -AsyncResult = collections.namedtuple('AsyncResult', 'type msg') - -# TODO: Providing a copy of SkipTest that works with python 2.6. This will be -# dropped when we remove python 2.6 support. - -if stem.prereq._is_python_26(): - class SkipTest(Exception): - 'Notes that the test was skipped.' -else: - SkipTest = unittest.case.SkipTest - - -def assert_equal(expected, actual, msg = None): - """ - Function form of a TestCase's assertEqual. - - .. versionadded:: 1.6.0 - - :param object expected: expected value - :param object actual: actual value - :param str msg: message if assertion fails - - :raises: **AssertionError** if values aren't equal - """ - - if expected != actual: - raise AssertionError("Expected '%s' but was '%s'" % (expected, actual) if msg is None else msg) - - -def assert_in(expected, actual, msg = None): - """ - Asserts that a given value is within this content. - - .. versionadded:: 1.6.0 - - :param object expected: expected value - :param object actual: actual value - :param str msg: message if assertion fails - - :raises: **AssertionError** if the expected value isn't in the actual - """ - - if expected not in actual: - raise AssertionError("Expected '%s' to be within '%s'" % (expected, actual) if msg is None else msg) - - -def skip(msg): - """ - Function form of a TestCase's skipTest. - - .. versionadded:: 1.6.0 - - :param str msg: reason test is being skipped - - :raises: **unittest.case.SkipTest** for this reason - """ - - raise SkipTest(msg) - - -def asynchronous(func): - test = stem.util.test_tools.AsyncTest(func) - ASYNC_TESTS[test.name] = test - return test.method - - -class AsyncTest(object): - """ - Test that's run asychronously. These are functions (no self reference) - performed like the following... - - :: - - class MyTest(unittest.TestCase): - @staticmethod - def run_tests(): - MyTest.test_addition = stem.util.test_tools.AsyncTest(MyTest.test_addition).method - - @staticmethod - def test_addition(): - if 1 + 1 != 2: - raise AssertionError('tisk, tisk') - - MyTest.run() - - .. versionadded:: 1.6.0 - """ - - def __init__(self, runner, args = None, threaded = False): - self.name = '%s.%s' % (runner.__module__, runner.__name__) - - self._runner = runner - self._runner_args = args - self._threaded = threaded - - self.method = lambda test: self.result(test) # method that can be mixed into TestCases - - self._process = None - self._process_pipe = None - self._process_lock = threading.RLock() - - self._result = None - self._status = AsyncStatus.PENDING - - def run(self, *runner_args, **kwargs): - if stem.prereq._is_python_26(): - return # not supported under python 2.6 - - def _wrapper(conn, runner, args): - os.nice(12) - - try: - runner(*args) if args else runner() - conn.send(AsyncResult('success', None)) - except AssertionError as exc: - conn.send(AsyncResult('failure', str(exc))) - except SkipTest as exc: - conn.send(AsyncResult('skipped', str(exc))) - except: - conn.send(AsyncResult('error', traceback.format_exc())) - finally: - conn.close() - - with self._process_lock: - if self._status == AsyncStatus.PENDING: - if runner_args: - self._runner_args = runner_args - - if 'threaded' in kwargs: - self._threaded = kwargs['threaded'] - - self._process_pipe, child_pipe = multiprocessing.Pipe() - - if self._threaded: - self._process = threading.Thread( - target = _wrapper, - args = (child_pipe, self._runner, self._runner_args), - name = 'Background test of %s' % self.name, - ) - - self._process.setDaemon(True) - else: - self._process = multiprocessing.Process(target = _wrapper, args = (child_pipe, self._runner, self._runner_args)) - - self._process.start() - self._status = AsyncStatus.RUNNING - - def pid(self): - with self._process_lock: - return self._process.pid if (self._process and not self._threaded) else None - - def join(self): - self.result(None) - - def result(self, test): - if stem.prereq._is_python_26(): - return # not supported under python 2.6 - - with self._process_lock: - if self._status == AsyncStatus.PENDING: - self.run() - - if self._status == AsyncStatus.RUNNING: - self._result = self._process_pipe.recv() - self._process.join() - self._status = AsyncStatus.FINISHED - - if test and self._result.type == 'failure': - test.fail(self._result.msg) - elif test and self._result.type == 'error': - test.fail(self._result.msg) - elif test and self._result.type == 'skipped': - test.skipTest(self._result.msg) - - -class Issue(collections.namedtuple('Issue', ['line_number', 'message', 'line'])): - """ - Issue encountered by pyflakes or pycodestyle. - - :var int line_number: line number the issue occured on - :var str message: description of the issue - :var str line: content of the line the issue is about - """ - - -class TimedTestRunner(unittest.TextTestRunner): - """ - Test runner that tracks the runtime of individual tests. When tests are run - with this their runtimes are made available through - :func:`stem.util.test_tools.test_runtimes`. - - .. versionadded:: 1.6.0 - """ - - def run(self, test): - for t in test._tests: - original_type = type(t) - - class _TestWrapper(original_type): - def run(self, result = None): - start_time = time.time() - result = super(type(self), self).run(result) - TEST_RUNTIMES[self.id()] = time.time() - start_time - return result - - # TODO: remove and drop unnecessary 'returns' when dropping python 2.6 - # support - - def skipTest(self, message): - if not stem.prereq._is_python_26(): - return super(original_type, self).skipTest(message) - - # TODO: remove when dropping python 2.6 support - - def assertItemsEqual(self, expected, actual): - if stem.prereq._is_python_26(): - self.assertEqual(set(expected), set(actual)) - else: - return super(original_type, self).assertItemsEqual(expected, actual) - - def assertRaisesWith(self, exc_type, exc_msg, func, *args, **kwargs): - """ - Asserts the given invokation raises the expected excepiton. This is - similar to unittest's assertRaises and assertRaisesRegexp, but checks - for an exact match. - - This method is **not** being vended to external users and may be - changed without notice. If you want this method to be part of our - vended API then please let us know. - """ - - return self.assertRaisesRegexp(exc_type, '^%s$' % re.escape(exc_msg), func, *args, **kwargs) - - def assertRaisesRegexp(self, exc_type, exc_msg, func, *args, **kwargs): - if stem.prereq._is_python_26(): - try: - func(*args, **kwargs) - self.fail('Expected a %s to be raised but nothing was' % exc_type) - except exc_type as exc: - self.assertTrue(re.search(exc_msg, str(exc), re.MULTILINE)) - else: - return super(original_type, self).assertRaisesRegexp(exc_type, exc_msg, func, *args, **kwargs) - - def id(self): - return '%s.%s.%s' % (original_type.__module__, original_type.__name__, self._testMethodName) - - def __str__(self): - return '%s (%s.%s)' % (self._testMethodName, original_type.__module__, original_type.__name__) - - t.__class__ = _TestWrapper - - return super(TimedTestRunner, self).run(test) - - -def test_runtimes(): - """ - Provides the runtimes of tests executed through TimedTestRunners. - - :returns: **dict** of fully qualified test names to floats for the runtime in - seconds - - .. versionadded:: 1.6.0 - """ - - return dict(TEST_RUNTIMES) - - -def clean_orphaned_pyc(paths): - """ - Deletes any file with a \\*.pyc extention without a corresponding \\*.py. This - helps to address a common gotcha when deleting python files... - - * You delete module 'foo.py' and run the tests to ensure that you haven't - broken anything. They pass, however there *are* still some 'import foo' - statements that still work because the bytecode (foo.pyc) is still around. - - * You push your change. - - * Another developer clones our repository and is confused because we have a - bunch of ImportErrors. - - :param list paths: paths to search for orphaned pyc files - - :returns: list of absolute paths that were deleted - """ - - orphaned_pyc = [] - - for path in paths: - for pyc_path in stem.util.system.files_with_suffix(path, '.pyc'): - py_path = pyc_path[:-1] - - # If we're running python 3 then the *.pyc files are no longer bundled - # with the *.py. Rather, they're in a __pycache__ directory. - - pycache = '%s__pycache__%s' % (os.path.sep, os.path.sep) - - if pycache in pyc_path: - directory, pycache_filename = pyc_path.split(pycache, 1) - - if not pycache_filename.endswith('.pyc'): - continue # should look like 'test_tools.cpython-32.pyc' - - py_path = os.path.join(directory, pycache_filename.split('.')[0] + '.py') - - if not os.path.exists(py_path): - orphaned_pyc.append(pyc_path) - os.remove(pyc_path) - - return orphaned_pyc - - -def is_pyflakes_available(): - """ - Checks if pyflakes is availalbe. - - :returns: **True** if we can use pyflakes and **False** otherwise - """ - - return _module_exists('pyflakes.api') and _module_exists('pyflakes.reporter') - - -def is_pycodestyle_available(): - """ - Checks if pycodestyle is availalbe. - - :returns: **True** if we can use pycodestyle and **False** otherwise - """ - - if _module_exists('pycodestyle'): - import pycodestyle - elif _module_exists('pep8'): - import pep8 as pycodestyle - else: - return False - - return hasattr(pycodestyle, 'BaseReport') - - -def stylistic_issues(paths, check_newlines = False, check_exception_keyword = False, prefer_single_quotes = False): - """ - Checks for stylistic issues that are an issue according to the parts of PEP8 - we conform to. You can suppress pycodestyle issues by making a 'test' - configuration that sets 'pycodestyle.ignore'. - - For example, with a 'test/settings.cfg' of... - - :: - - # pycodestyle compliance issues that we're ignoreing... - # - # * E111 and E121 four space indentations - # * E501 line is over 79 characters - - pycodestyle.ignore E111 - pycodestyle.ignore E121 - pycodestyle.ignore E501 - - pycodestyle.ignore run_tests.py => E402: import stem.util.enum - - ... you can then run tests with... - - :: - - import stem.util.conf - - test_config = stem.util.conf.get_config('test') - test_config.load('test/settings.cfg') - - issues = stylistic_issues('my_project') - - .. versionchanged:: 1.3.0 - Renamed from get_stylistic_issues() to stylistic_issues(). The old name - still works as an alias, but will be dropped in Stem version 2.0.0. - - .. versionchanged:: 1.4.0 - Changing tuples in return value to be namedtuple instances, and adding the - line that had the issue. - - .. versionchanged:: 1.4.0 - Added the prefer_single_quotes option. - - .. versionchanged:: 1.6.0 - Changed 'pycodestyle.ignore' code snippets to only need to match against - the prefix. - - :param list paths: paths to search for stylistic issues - :param bool check_newlines: check that we have standard newlines (\\n), not - windows (\\r\\n) nor classic mac (\\r) - :param bool check_exception_keyword: checks that we're using 'as' for - exceptions rather than a comma - :param bool prefer_single_quotes: standardize on using single rather than - double quotes for strings, when reasonable - - :returns: dict of paths list of :class:`stem.util.test_tools.Issue` instances - """ - - issues = {} - - ignore_rules = [] - ignore_for_file = [] - ignore_all_for_files = [] - - for rule in CONFIG['pycodestyle.ignore'] + CONFIG['pep8.ignore']: - if '=>' in rule: - path, rule_entry = rule.split('=>', 1) - - if ':' in rule_entry: - rule, code = rule_entry.split(':', 1) - ignore_for_file.append((path.strip(), rule.strip(), code.strip())) - elif rule_entry.strip() == '*': - ignore_all_for_files.append(path.strip()) - else: - ignore_rules.append(rule) - - def is_ignored(path, rule, code): - for ignored_path, ignored_rule, ignored_code in ignore_for_file: - if path.endswith(ignored_path) and ignored_rule == rule and code.strip().startswith(ignored_code): - return True - - for ignored_path in ignore_all_for_files: - if path.endswith(ignored_path): - return True - - return False - - if is_pycodestyle_available(): - if _module_exists('pep8'): - import pep8 as pycodestyle - else: - import pycodestyle - - class StyleReport(pycodestyle.BaseReport): - def init_file(self, filename, lines, expected, line_offset): - super(StyleReport, self).init_file(filename, lines, expected, line_offset) - - if not check_newlines and not check_exception_keyword and not prefer_single_quotes: - return - - is_block_comment = False - - for ignored_path in ignore_all_for_files: - if filename.endswith(ignored_path): - return - - for index, line in enumerate(lines): - content = line.split('#', 1)[0].strip() - - if check_newlines and '\r' in line: - issues.setdefault(filename, []).append(Issue(index + 1, 'contains a windows newline', line)) - - if not content: - continue # blank line - - if '"""' in content: - is_block_comment = not is_block_comment - - if check_exception_keyword and content.startswith('except') and content.endswith(', exc:'): - # Python 2.6 - 2.7 supports two forms for exceptions... - # - # except ValueError, exc: - # except ValueError as exc: - # - # The former is the old method and no longer supported in python 3 - # going forward. - - # TODO: This check only works if the exception variable is called - # 'exc'. We should generalize this via a regex so other names work - # too. - - issues.setdefault(filename, []).append(Issue(index + 1, "except clause should use 'as', not comma", line)) - - if prefer_single_quotes and not is_block_comment: - if '"' in content and "'" not in content and '"""' not in content and not content.endswith('\\'): - # Checking if the line already has any single quotes since that - # usually means double quotes are preferable for the content (for - # instance "I'm hungry"). Also checking for '\' at the end since - # that can indicate a multi-line string. - - issues.setdefault(filename, []).append(Issue(index + 1, 'use single rather than double quotes', line)) - - def error(self, line_number, offset, text, check): - code = super(StyleReport, self).error(line_number, offset, text, check) - - if code: - line = linecache.getline(self.filename, line_number) - - if not is_ignored(self.filename, code, line): - issues.setdefault(self.filename, []).append(Issue(line_number, text, line)) - - style_checker = pycodestyle.StyleGuide(ignore = ignore_rules, reporter = StyleReport) - style_checker.check_files(list(_python_files(paths))) - - return issues - - -def pyflakes_issues(paths): - """ - Performs static checks via pyflakes. False positives can be ignored via - 'pyflakes.ignore' entries in our 'test' config. For instance... - - :: - - pyflakes.ignore stem/util/test_tools.py => 'pyflakes' imported but unused - pyflakes.ignore stem/util/test_tools.py => 'pycodestyle' imported but unused - - .. versionchanged:: 1.3.0 - Renamed from get_pyflakes_issues() to pyflakes_issues(). The old name - still works as an alias, but will be dropped in Stem version 2.0.0. - - .. versionchanged:: 1.4.0 - Changing tuples in return value to be namedtuple instances, and adding the - line that had the issue. - - .. versionchanged:: 1.5.0 - Support matching against prefix or suffix issue strings. - - :param list paths: paths to search for problems - - :returns: dict of paths list of :class:`stem.util.test_tools.Issue` instances - """ - - issues = {} - - if is_pyflakes_available(): - import pyflakes.api - import pyflakes.reporter - - class Reporter(pyflakes.reporter.Reporter): - def __init__(self): - self._ignored_issues = {} - - for line in CONFIG['pyflakes.ignore']: - path, issue = line.split('=>') - self._ignored_issues.setdefault(path.strip(), []).append(issue.strip()) - - def unexpectedError(self, filename, msg): - self._register_issue(filename, None, msg, None) - - def syntaxError(self, filename, msg, lineno, offset, text): - self._register_issue(filename, lineno, msg, text) - - def flake(self, msg): - self._register_issue(msg.filename, msg.lineno, msg.message % msg.message_args, None) - - def _is_ignored(self, path, issue): - # Paths in pyflakes_ignore are relative, so we need to check to see if our - # path ends with any of them. - - for ignored_path, ignored_issues in self._ignored_issues.items(): - if path.endswith(ignored_path): - if issue in ignored_issues: - return True - - for prefix in [i[:1] for i in ignored_issues if i.endswith('*')]: - if issue.startswith(prefix): - return True - - for suffix in [i[1:] for i in ignored_issues if i.startswith('*')]: - if issue.endswith(suffix): - return True - - return False - - def _register_issue(self, path, line_number, issue, line): - if not self._is_ignored(path, issue): - if path and line_number and not line: - line = linecache.getline(path, line_number).strip() - - issues.setdefault(path, []).append(Issue(line_number, issue, line)) - - reporter = Reporter() - - for path in _python_files(paths): - pyflakes.api.checkPath(path, reporter) - - return issues - - -def _module_exists(module_name): - """ - Checks if a module exists. - - :param str module_name: module to check existance of - - :returns: **True** if module exists and **False** otherwise - """ - - try: - __import__(module_name) - return True - except ImportError: - return False - - -def _python_files(paths): - for path in paths: - for file_path in stem.util.system.files_with_suffix(path, '.py'): - skip = False - - for exclude_path in CONFIG['exclude_paths']: - if re.match(exclude_path, file_path): - skip = True - break - - if not skip: - yield file_path - - -# TODO: drop with stem 2.x -# We renamed our methods to drop a redundant 'get_*' prefix, so alias the old -# names for backward compatability, and account for pep8 being renamed to -# pycodestyle. - -get_stylistic_issues = stylistic_issues -get_pyflakes_issues = pyflakes_issues -is_pep8_available = is_pycodestyle_available diff --git a/myenv/lib/python3.12/site-packages/stem/util/tor_tools.py b/myenv/lib/python3.12/site-packages/stem/util/tor_tools.py deleted file mode 100644 index b703fa5..0000000 --- a/myenv/lib/python3.12/site-packages/stem/util/tor_tools.py +++ /dev/null @@ -1,187 +0,0 @@ -# Copyright 2012-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Miscellaneous utility functions for working with tor. - -.. versionadded:: 1.2.0 - -**Module Overview:** - -:: - - is_valid_fingerprint - checks if a string is a valid tor relay fingerprint - is_valid_nickname - checks if a string is a valid tor relay nickname - is_valid_circuit_id - checks if a string is a valid tor circuit id - is_valid_stream_id - checks if a string is a valid tor stream id - is_valid_connection_id - checks if a string is a valid tor connection id - is_valid_hidden_service_address - checks if a string is a valid hidden service address - is_hex_digits - checks if a string is only made up of hex digits -""" - -import re - -import stem.util.str_tools - -# The control-spec defines the following as... -# -# Fingerprint = "$" 40*HEXDIG -# NicknameChar = "a"-"z" / "A"-"Z" / "0" - "9" -# Nickname = 1*19 NicknameChar -# -# CircuitID = 1*16 IDChar -# IDChar = ALPHA / DIGIT -# -# HEXDIG is defined in RFC 5234 as being uppercase and used in RFC 5987 as -# case insensitive. Tor doesn't define this in the spec so flipping a coin -# and going with case insensitive. - -NICKNAME_PATTERN = re.compile('^[a-zA-Z0-9]{1,19}$') -CIRC_ID_PATTERN = re.compile('^[a-zA-Z0-9]{1,16}$') - -# Hidden service addresses are sixteen or fifty six base32 characters. - -HS_V2_ADDRESS_PATTERN = re.compile('^[a-z2-7]{16}$') -HS_V3_ADDRESS_PATTERN = re.compile('^[a-z2-7]{56}$') - - -def is_valid_fingerprint(entry, check_prefix = False): - """ - Checks if a string is a properly formatted relay fingerprint. This checks for - a '$' prefix if check_prefix is true, otherwise this only validates the hex - digits. - - :param str entry: string to be checked - :param bool check_prefix: checks for a '$' prefix - - :returns: **True** if the string could be a relay fingerprint, **False** otherwise - """ - - if isinstance(entry, bytes): - entry = stem.util.str_tools._to_unicode(entry) - - try: - if check_prefix: - if not entry or entry[0] != '$': - return False - - entry = entry[1:] - - return is_hex_digits(entry, 40) - except TypeError: - return False - - -def is_valid_nickname(entry): - """ - Checks if a string is a valid format for being a nickname. - - :param str entry: string to be checked - - :returns: **True** if the string could be a nickname, **False** otherwise - """ - - if isinstance(entry, bytes): - entry = stem.util.str_tools._to_unicode(entry) - - try: - return bool(NICKNAME_PATTERN.match(entry)) - except TypeError: - return False - - -def is_valid_circuit_id(entry): - """ - Checks if a string is a valid format for being a circuit identifier. - - :returns: **True** if the string could be a circuit id, **False** otherwise - """ - - if isinstance(entry, bytes): - entry = stem.util.str_tools._to_unicode(entry) - - try: - return bool(CIRC_ID_PATTERN.match(entry)) - except TypeError: - return False - - -def is_valid_stream_id(entry): - """ - Checks if a string is a valid format for being a stream identifier. - Currently, this is just an alias to :func:`~stem.util.tor_tools.is_valid_circuit_id`. - - :returns: **True** if the string could be a stream id, **False** otherwise - """ - - return is_valid_circuit_id(entry) - - -def is_valid_connection_id(entry): - """ - Checks if a string is a valid format for being a connection identifier. - Currently, this is just an alias to :func:`~stem.util.tor_tools.is_valid_circuit_id`. - - :returns: **True** if the string could be a connection id, **False** otherwise - """ - - return is_valid_circuit_id(entry) - - -def is_valid_hidden_service_address(entry, version = None): - """ - Checks if a string is a valid format for being a hidden service address (not - including the '.onion' suffix). - - .. versionchanged:: 1.8.0 - Added the **version** argument, and responds with **True** if a version 3 - hidden service address rather than just version 2 addresses. - - :param int,list version: versions to check for, if unspecified either v2 or v3 - hidden service address will provide **True** - - :returns: **True** if the string could be a hidden service address, **False** - otherwise - """ - - if isinstance(entry, bytes): - entry = stem.util.str_tools._to_unicode(entry) - - if version is None: - version = (2, 3) - elif isinstance(version, int): - version = [version] - elif not isinstance(version, (list, tuple)): - raise ValueError('Hidden service version must be an integer or list, not a %s' % type(version).__name__) - - try: - if 2 in version and bool(HS_V2_ADDRESS_PATTERN.match(entry)): - return True - - if 3 in version and bool(HS_V3_ADDRESS_PATTERN.match(entry)): - return True - - return False - except TypeError: - return False - - -def is_hex_digits(entry, count): - """ - Checks if a string is the given number of hex digits. Digits represented by - letters are case insensitive. - - :param str entry: string to be checked - :param int count: number of hex digits to be checked for - - :returns: **True** if the given number of hex digits, **False** otherwise - """ - - try: - if len(entry) != count: - return False - - int(entry, 16) # attempt to convert it as hex - return True - except (ValueError, TypeError): - return False diff --git a/myenv/lib/python3.12/site-packages/stem/version.py b/myenv/lib/python3.12/site-packages/stem/version.py deleted file mode 100644 index 5c481e3..0000000 --- a/myenv/lib/python3.12/site-packages/stem/version.py +++ /dev/null @@ -1,402 +0,0 @@ -# Copyright 2011-2019, Damian Johnson and The Tor Project -# See LICENSE for licensing information - -""" -Tor versioning information and requirements for its features. These can be -easily parsed and compared, for instance... - -:: - - >>> from stem.version import get_system_tor_version, Requirement - >>> my_version = get_system_tor_version() - >>> print(my_version) - 0.2.1.30 - >>> my_version >= Requirement.TORRC_CONTROL_SOCKET - True - -**Module Overview:** - -:: - - get_system_tor_version - gets the version of our system's tor installation - - Version - Tor versioning information - -.. data:: Requirement (enum) - - Enumerations for the version requirements of features. - - .. deprecated:: 1.6.0 - Requirement entries belonging to tor versions which have been obsolete for - at least six months will be removed when we break backward compatibility - in the 2.x stem release. - - ===================================== =========== - Requirement Description - ===================================== =========== - **AUTH_SAFECOOKIE** SAFECOOKIE authentication method - **DESCRIPTOR_COMPRESSION** `Expanded compression support for ZSTD and LZMA `_ - **DORMANT_MODE** **DORMANT** and **ACTIVE** :data:`~stem.Signal` - **DROPGUARDS** DROPGUARDS requests - **EVENT_AUTHDIR_NEWDESCS** AUTHDIR_NEWDESC events - **EVENT_BUILDTIMEOUT_SET** BUILDTIMEOUT_SET events - **EVENT_CIRC_MINOR** CIRC_MINOR events - **EVENT_CLIENTS_SEEN** CLIENTS_SEEN events - **EVENT_CONF_CHANGED** CONF_CHANGED events - **EVENT_DESCCHANGED** DESCCHANGED events - **EVENT_GUARD** GUARD events - **EVENT_HS_DESC_CONTENT** HS_DESC_CONTENT events - **EVENT_NETWORK_LIVENESS** NETWORK_LIVENESS events - **EVENT_NEWCONSENSUS** NEWCONSENSUS events - **EVENT_NS** NS events - **EVENT_SIGNAL** SIGNAL events - **EVENT_STATUS** STATUS_GENERAL, STATUS_CLIENT, and STATUS_SERVER events - **EVENT_STREAM_BW** STREAM_BW events - **EVENT_TRANSPORT_LAUNCHED** TRANSPORT_LAUNCHED events - **EVENT_CONN_BW** CONN_BW events - **EVENT_CIRC_BW** CIRC_BW events - **EVENT_CELL_STATS** CELL_STATS events - **EVENT_TB_EMPTY** TB_EMPTY events - **EVENT_HS_DESC** HS_DESC events - **EXTENDCIRCUIT_PATH_OPTIONAL** EXTENDCIRCUIT queries can omit the path if the circuit is zero - **FEATURE_EXTENDED_EVENTS** 'EXTENDED_EVENTS' optional feature - **FEATURE_VERBOSE_NAMES** 'VERBOSE_NAMES' optional feature - **GETINFO_CONFIG_TEXT** 'GETINFO config-text' query - **GETINFO_GEOIP_AVAILABLE** 'GETINFO ip-to-country/ipv4-available' query and its ipv6 counterpart - **GETINFO_MICRODESCRIPTORS** 'GETINFO md/all' query - **GETINFO_UPTIME** 'GETINFO uptime' query - **HIDDEN_SERVICE_V3** Support for v3 hidden services - **HSFETCH** HSFETCH requests - **HSFETCH_V3** HSFETCH for version 3 hidden services - **HSPOST** HSPOST requests - **ADD_ONION** ADD_ONION and DEL_ONION requests - **ADD_ONION_BASIC_AUTH** ADD_ONION supports basic authentication - **ADD_ONION_NON_ANONYMOUS** ADD_ONION supports non-anonymous mode - **ADD_ONION_MAX_STREAMS** ADD_ONION support for MaxStreamsCloseCircuit - **LOADCONF** LOADCONF requests - **MICRODESCRIPTOR_IS_DEFAULT** Tor gets microdescriptors by default rather than server descriptors - **SAVECONF_FORCE** Added the 'FORCE' flag to SAVECONF - **TAKEOWNERSHIP** TAKEOWNERSHIP requests - **TORRC_CONTROL_SOCKET** 'ControlSocket ' config option - **TORRC_PORT_FORWARDING** 'PortForwarding' config option - **TORRC_DISABLE_DEBUGGER_ATTACHMENT** 'DisableDebuggerAttachment' config option - **TORRC_VIA_STDIN** Allow torrc options via 'tor -f -' (:trac:`13865`) - **ONION_SERVICE_AUTH_ADD** For adding ClientAuthV3 to a v3 onion service via ADD_ONION - ===================================== =========== -""" - -import os -import re - -import stem.prereq -import stem.util -import stem.util.enum -import stem.util.system - -if stem.prereq._is_lru_cache_available(): - from functools import lru_cache -else: - from stem.util.lru_cache import lru_cache - -# cache for the get_system_tor_version function -VERSION_CACHE = {} - -VERSION_PATTERN = re.compile(r'^([0-9]+)\.([0-9]+)\.([0-9]+)(\.[0-9]+)?(-\S*)?(( \(\S*\))*)$') - - -def get_system_tor_version(tor_cmd = 'tor'): - """ - Queries tor for its version. This is os dependent, only working on linux, - osx, and bsd. - - :param str tor_cmd: command used to run tor - - :returns: :class:`~stem.version.Version` provided by the tor command - - :raises: **IOError** if unable to query or parse the version - """ - - if tor_cmd not in VERSION_CACHE: - version_cmd = '%s --version' % tor_cmd - - try: - version_output = stem.util.system.call(version_cmd) - except OSError as exc: - # make the error message nicer if this is due to tor being unavialable - - if 'No such file or directory' in str(exc): - if os.path.isabs(tor_cmd): - exc = "Unable to check tor's version. '%s' doesn't exist." % tor_cmd - else: - exc = "Unable to run '%s'. Maybe tor isn't in your PATH?" % version_cmd - - raise IOError(exc) - - for line in version_output: - # output example: - # Oct 21 07:19:27.438 [notice] Tor v0.2.1.30. This is experimental software. Do not rely on it for strong anonymity. (Running on Linux i686) - # Tor version 0.2.1.30. - - if line.startswith('Tor version ') and line.endswith('.'): - try: - version_str = line[12:-1] - VERSION_CACHE[tor_cmd] = Version(version_str) - break - except ValueError as exc: - raise IOError(exc) - - if tor_cmd not in VERSION_CACHE: - raise IOError("'%s' didn't provide a parseable version:\n\n%s" % (version_cmd, '\n'.join(version_output))) - - return VERSION_CACHE[tor_cmd] - - -@lru_cache() -def _get_version(version_str): - return Version(version_str) - - -class Version(object): - """ - Comparable tor version. These are constructed from strings that conform to - the 'new' style in the `tor version-spec - `_, - such as "0.1.4" or "0.2.2.23-alpha (git-7dcd105be34a4f44)". - - .. versionchanged:: 1.6.0 - Added all_extra parameter. - - :var int major: major version - :var int minor: minor version - :var int micro: micro version - :var int patch: patch level (**None** if undefined) - :var str status: status tag such as 'alpha' or 'beta-dev' (**None** if undefined) - :var str extra: first extra information without its parentheses such as - 'git-8be6058d8f31e578' (**None** if undefined) - :var list all_extra: all extra information entries, without their parentheses - :var str git_commit: git commit id (**None** if it wasn't provided) - - :param str version_str: version to be parsed - - :raises: **ValueError** if input isn't a valid tor version - """ - - def __init__(self, version_str): - self.version_str = version_str - version_parts = VERSION_PATTERN.match(version_str) - - if version_parts: - major, minor, micro, patch, status, extra_str, _ = version_parts.groups() - - # The patch and status matches are optional (may be None) and have an extra - # proceeding period or dash if they exist. Stripping those off. - - if patch: - patch = int(patch[1:]) - - if status: - status = status[1:] - - self.major = int(major) - self.minor = int(minor) - self.micro = int(micro) - self.patch = patch - self.status = status - self.all_extra = [entry[1:-1] for entry in extra_str.strip().split()] if extra_str else [] - self.extra = self.all_extra[0] if self.all_extra else None - self.git_commit = None - - for extra in self.all_extra: - if extra and re.match('^git-[0-9a-f]{16}$', extra): - self.git_commit = extra[4:] - break - else: - raise ValueError("'%s' isn't a properly formatted tor version" % version_str) - - def __str__(self): - """ - Provides the string used to construct the version. - """ - - return self.version_str - - def _compare(self, other, method): - """ - Compares version ordering according to the spec. - """ - - if not isinstance(other, Version): - return False - - for attr in ('major', 'minor', 'micro', 'patch'): - my_version = getattr(self, attr) - other_version = getattr(other, attr) - - if my_version is None: - my_version = 0 - - if other_version is None: - other_version = 0 - - if my_version != other_version: - return method(my_version, other_version) - - # According to the version spec... - # - # If we *do* encounter two versions that differ only by status tag, we - # compare them lexically as ASCII byte strings. - - my_status = self.status if self.status else '' - other_status = other.status if other.status else '' - - return method(my_status, other_status) - - def __hash__(self): - return stem.util._hash_attr(self, 'major', 'minor', 'micro', 'patch', 'status', cache = True) - - def __eq__(self, other): - return self._compare(other, lambda s, o: s == o) - - def __ne__(self, other): - return not self == other - - def __gt__(self, other): - """ - Checks if this version meets the requirements for a given feature. We can - be compared to either a :class:`~stem.version.Version` or - :class:`~stem.version._VersionRequirements`. - """ - - if isinstance(other, _VersionRequirements): - for rule in other.rules: - if rule(self): - return True - - return False - - return self._compare(other, lambda s, o: s > o) - - def __ge__(self, other): - if isinstance(other, _VersionRequirements): - for rule in other.rules: - if rule(self): - return True - - return False - - return self._compare(other, lambda s, o: s >= o) - - -class _VersionRequirements(object): - """ - Series of version constraints that can be compared to. For instance, this - allows for comparisons like 'if I'm greater than version X in the 0.2.2 - series, or greater than version Y in the 0.2.3 series'. - - This is a logical 'or' of the series of rules. - """ - - def __init__(self): - self.rules = [] - - def greater_than(self, version, inclusive = True): - """ - Adds a constraint that we're greater than the given version. - - :param stem.version.Version version: version we're checking against - :param bool inclusive: if comparison is inclusive or not - """ - - if inclusive: - self.rules.append(lambda v: version <= v) - else: - self.rules.append(lambda v: version < v) - - def less_than(self, version, inclusive = True): - """ - Adds a constraint that we're less than the given version. - - :param stem.version.Version version: version we're checking against - :param bool inclusive: if comparison is inclusive or not - """ - - if inclusive: - self.rules.append(lambda v: version >= v) - else: - self.rules.append(lambda v: version > v) - - def in_range(self, from_version, to_version, from_inclusive = True, to_inclusive = False): - """ - Adds constraint that we're within the range from one version to another. - - :param stem.version.Version from_version: beginning of the comparison range - :param stem.version.Version to_version: end of the comparison range - :param bool from_inclusive: if comparison is inclusive with the starting version - :param bool to_inclusive: if comparison is inclusive with the ending version - """ - - def new_rule(v): - if from_inclusive and to_inclusive: - return from_version <= v <= to_version - elif from_inclusive: - return from_version <= v < to_version - else: - return from_version < v < to_version - - self.rules.append(new_rule) - - -safecookie_req = _VersionRequirements() -safecookie_req.in_range(Version('0.2.2.36'), Version('0.2.3.0')) -safecookie_req.greater_than(Version('0.2.3.13')) - -Requirement = stem.util.enum.Enum( - ('AUTH_SAFECOOKIE', safecookie_req), - ('DESCRIPTOR_COMPRESSION', Version('0.3.1.1-alpha')), - ('DORMANT_MODE', Version('0.4.0.1-alpha')), - ('DROPGUARDS', Version('0.2.5.1-alpha')), - ('EVENT_AUTHDIR_NEWDESCS', Version('0.1.1.10-alpha')), - ('EVENT_BUILDTIMEOUT_SET', Version('0.2.2.7-alpha')), - ('EVENT_CIRC_MINOR', Version('0.2.3.11-alpha')), - ('EVENT_CLIENTS_SEEN', Version('0.2.1.10-alpha')), - ('EVENT_CONF_CHANGED', Version('0.2.3.3-alpha')), - ('EVENT_DESCCHANGED', Version('0.1.2.2-alpha')), - ('EVENT_GUARD', Version('0.1.2.5-alpha')), - ('EVENT_HS_DESC_CONTENT', Version('0.2.7.1-alpha')), - ('EVENT_NS', Version('0.1.2.3-alpha')), - ('EVENT_NETWORK_LIVENESS', Version('0.2.7.2-alpha')), - ('EVENT_NEWCONSENSUS', Version('0.2.1.13-alpha')), - ('EVENT_SIGNAL', Version('0.2.3.1-alpha')), - ('EVENT_STATUS', Version('0.1.2.3-alpha')), - ('EVENT_STREAM_BW', Version('0.1.2.8-beta')), - ('EVENT_TRANSPORT_LAUNCHED', Version('0.2.5.0-alpha')), - ('EVENT_CONN_BW', Version('0.2.5.2-alpha')), - ('EVENT_CIRC_BW', Version('0.2.5.2-alpha')), - ('EVENT_CELL_STATS', Version('0.2.5.2-alpha')), - ('EVENT_TB_EMPTY', Version('0.2.5.2-alpha')), - ('EVENT_HS_DESC', Version('0.2.5.2-alpha')), - ('EXTENDCIRCUIT_PATH_OPTIONAL', Version('0.2.2.9')), - ('FEATURE_EXTENDED_EVENTS', Version('0.2.2.1-alpha')), - ('FEATURE_VERBOSE_NAMES', Version('0.2.2.1-alpha')), - ('GETINFO_CONFIG_TEXT', Version('0.2.2.7-alpha')), - ('GETINFO_GEOIP_AVAILABLE', Version('0.3.2.1-alpha')), - ('GETINFO_MICRODESCRIPTORS', Version('0.3.5.1-alpha')), - ('GETINFO_UPTIME', Version('0.3.5.1-alpha')), - ('HIDDEN_SERVICE_V3', Version('0.3.3.1-alpha')), - ('HSFETCH', Version('0.2.7.1-alpha')), - ('HSFETCH_V3', Version('0.4.1.1-alpha')), - ('HSPOST', Version('0.2.7.1-alpha')), - ('ADD_ONION', Version('0.2.7.1-alpha')), - ('ADD_ONION_BASIC_AUTH', Version('0.2.9.1-alpha')), - ('ADD_ONION_NON_ANONYMOUS', Version('0.2.9.3-alpha')), - ('ADD_ONION_MAX_STREAMS', Version('0.2.7.2-alpha')), - ('LOADCONF', Version('0.2.1.1')), - ('MICRODESCRIPTOR_IS_DEFAULT', Version('0.2.3.3')), - ('SAVECONF_FORCE', Version('0.3.1.1-alpha')), - ('TAKEOWNERSHIP', Version('0.2.2.28-beta')), - ('TORRC_CONTROL_SOCKET', Version('0.2.0.30')), - ('TORRC_PORT_FORWARDING', Version('0.2.3.1-alpha')), - ('TORRC_DISABLE_DEBUGGER_ATTACHMENT', Version('0.2.3.9')), - ('TORRC_VIA_STDIN', Version('0.2.6.3-alpha')), - ('ONION_SERVICE_AUTH_ADD', Version('0.4.6.1-alpha')), -) diff --git a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/METADATA deleted file mode 100644 index b09cb50..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/METADATA +++ /dev/null @@ -1,72 +0,0 @@ -Metadata-Version: 2.4 -Name: typing_extensions -Version: 4.15.0 -Summary: Backported and Experimental Type Hints for Python 3.9+ -Keywords: annotations,backport,checker,checking,function,hinting,hints,type,typechecking,typehinting,typehints,typing -Author-email: "Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee" -Requires-Python: >=3.9 -Description-Content-Type: text/markdown -License-Expression: PSF-2.0 -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Topic :: Software Development -License-File: LICENSE -Project-URL: Bug Tracker, https://github.com/python/typing_extensions/issues -Project-URL: Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md -Project-URL: Documentation, https://typing-extensions.readthedocs.io/ -Project-URL: Home, https://github.com/python/typing_extensions -Project-URL: Q & A, https://github.com/python/typing/discussions -Project-URL: Repository, https://github.com/python/typing_extensions - -# Typing Extensions - -[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing) - -[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) – -[PyPI](https://pypi.org/project/typing-extensions/) - -## Overview - -The `typing_extensions` module serves two related purposes: - -- Enable use of new type system features on older Python versions. For example, - `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows - users on previous Python versions to use it too. -- Enable experimentation with new type system PEPs before they are accepted and - added to the `typing` module. - -`typing_extensions` is treated specially by static type checkers such as -mypy and pyright. Objects defined in `typing_extensions` are treated the same -way as equivalent forms in `typing`. - -`typing_extensions` uses -[Semantic Versioning](https://semver.org/). The -major version will be incremented only for backwards-incompatible changes. -Therefore, it's safe to depend -on `typing_extensions` like this: `typing_extensions ~=x.y`, -where `x.y` is the first version that includes all features you need. -[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release) -is equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z` -unless you really know what you're doing; that defeats the purpose of -semantic versioning. - -## Included items - -See [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a -complete listing of module contents. - -## Contributing - -See [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md) -for how to contribute to `typing_extensions`. - diff --git a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/RECORD deleted file mode 100644 index 6ab09b5..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/RECORD +++ /dev/null @@ -1,7 +0,0 @@ -__pycache__/typing_extensions.cpython-312.pyc,, -typing_extensions-4.15.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -typing_extensions-4.15.0.dist-info/METADATA,sha256=wTg3j-jxiTSsmd4GBTXFPsbBOu7WXpTDJkHafuMZKnI,3259 -typing_extensions-4.15.0.dist-info/RECORD,, -typing_extensions-4.15.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -typing_extensions-4.15.0.dist-info/licenses/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936 -typing_extensions.py,sha256=Qz0R0XDTok0usGXrwb_oSM6n49fOaFZ6tSvqLUwvftg,160429 diff --git a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/WHEEL deleted file mode 100644 index d8b9936..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE b/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE deleted file mode 100644 index f26bcf4..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE +++ /dev/null @@ -1,279 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see https://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations, which became -Zope Corporation. In 2001, the Python Software Foundation (PSF, see -https://www.python.org/psf/) was formed, a non-profit organization -created specifically to own Python-related Intellectual Property. -Zope Corporation was a sponsoring member of the PSF. - -All Python releases are Open Source (see https://opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2 and above 2.1.1 2001-now PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -Python software and documentation are licensed under the -Python Software Foundation License Version 2. - -Starting with Python 3.8.6, examples, recipes, and other code in -the documentation are dual licensed under the PSF License Version 2 -and the Zero-Clause BSD license. - -Some software incorporated into Python is under different licenses. -The licenses are listed with code falling under that license. - - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION ----------------------------------------------------------------------- - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/typing_extensions.py b/myenv/lib/python3.12/site-packages/typing_extensions.py deleted file mode 100644 index 77f33e1..0000000 --- a/myenv/lib/python3.12/site-packages/typing_extensions.py +++ /dev/null @@ -1,4317 +0,0 @@ -import abc -import builtins -import collections -import collections.abc -import contextlib -import enum -import functools -import inspect -import io -import keyword -import operator -import sys -import types as _types -import typing -import warnings - -# Breakpoint: https://github.com/python/cpython/pull/119891 -if sys.version_info >= (3, 14): - import annotationlib - -__all__ = [ - # Super-special typing primitives. - 'Any', - 'ClassVar', - 'Concatenate', - 'Final', - 'LiteralString', - 'ParamSpec', - 'ParamSpecArgs', - 'ParamSpecKwargs', - 'Self', - 'Type', - 'TypeVar', - 'TypeVarTuple', - 'Unpack', - - # ABCs (from collections.abc). - 'Awaitable', - 'AsyncIterator', - 'AsyncIterable', - 'Coroutine', - 'AsyncGenerator', - 'AsyncContextManager', - 'Buffer', - 'ChainMap', - - # Concrete collection types. - 'ContextManager', - 'Counter', - 'Deque', - 'DefaultDict', - 'NamedTuple', - 'OrderedDict', - 'TypedDict', - - # Structural checks, a.k.a. protocols. - 'SupportsAbs', - 'SupportsBytes', - 'SupportsComplex', - 'SupportsFloat', - 'SupportsIndex', - 'SupportsInt', - 'SupportsRound', - 'Reader', - 'Writer', - - # One-off things. - 'Annotated', - 'assert_never', - 'assert_type', - 'clear_overloads', - 'dataclass_transform', - 'deprecated', - 'disjoint_base', - 'Doc', - 'evaluate_forward_ref', - 'get_overloads', - 'final', - 'Format', - 'get_annotations', - 'get_args', - 'get_origin', - 'get_original_bases', - 'get_protocol_members', - 'get_type_hints', - 'IntVar', - 'is_protocol', - 'is_typeddict', - 'Literal', - 'NewType', - 'overload', - 'override', - 'Protocol', - 'Sentinel', - 'reveal_type', - 'runtime', - 'runtime_checkable', - 'Text', - 'TypeAlias', - 'TypeAliasType', - 'TypeForm', - 'TypeGuard', - 'TypeIs', - 'TYPE_CHECKING', - 'type_repr', - 'Never', - 'NoReturn', - 'ReadOnly', - 'Required', - 'NotRequired', - 'NoDefault', - 'NoExtraItems', - - # Pure aliases, have always been in typing - 'AbstractSet', - 'AnyStr', - 'BinaryIO', - 'Callable', - 'Collection', - 'Container', - 'Dict', - 'ForwardRef', - 'FrozenSet', - 'Generator', - 'Generic', - 'Hashable', - 'IO', - 'ItemsView', - 'Iterable', - 'Iterator', - 'KeysView', - 'List', - 'Mapping', - 'MappingView', - 'Match', - 'MutableMapping', - 'MutableSequence', - 'MutableSet', - 'Optional', - 'Pattern', - 'Reversible', - 'Sequence', - 'Set', - 'Sized', - 'TextIO', - 'Tuple', - 'Union', - 'ValuesView', - 'cast', - 'no_type_check', - 'no_type_check_decorator', -] - -# for backward compatibility -PEP_560 = True -GenericMeta = type -# Breakpoint: https://github.com/python/cpython/pull/116129 -_PEP_696_IMPLEMENTED = sys.version_info >= (3, 13, 0, "beta") - -# Added with bpo-45166 to 3.10.1+ and some 3.9 versions -_FORWARD_REF_HAS_CLASS = "__forward_is_class__" in typing.ForwardRef.__slots__ - -# The functions below are modified copies of typing internal helpers. -# They are needed by _ProtocolMeta and they provide support for PEP 646. - - -class _Sentinel: - def __repr__(self): - return "" - - -_marker = _Sentinel() - - -# Breakpoint: https://github.com/python/cpython/pull/27342 -if sys.version_info >= (3, 10): - def _should_collect_from_parameters(t): - return isinstance( - t, (typing._GenericAlias, _types.GenericAlias, _types.UnionType) - ) -else: - def _should_collect_from_parameters(t): - return isinstance(t, (typing._GenericAlias, _types.GenericAlias)) - - -NoReturn = typing.NoReturn - -# Some unconstrained type variables. These are used by the container types. -# (These are not for export.) -T = typing.TypeVar('T') # Any type. -KT = typing.TypeVar('KT') # Key type. -VT = typing.TypeVar('VT') # Value type. -T_co = typing.TypeVar('T_co', covariant=True) # Any type covariant containers. -T_contra = typing.TypeVar('T_contra', contravariant=True) # Ditto contravariant. - - -# Breakpoint: https://github.com/python/cpython/pull/31841 -if sys.version_info >= (3, 11): - from typing import Any -else: - - class _AnyMeta(type): - def __instancecheck__(self, obj): - if self is Any: - raise TypeError("typing_extensions.Any cannot be used with isinstance()") - return super().__instancecheck__(obj) - - def __repr__(self): - if self is Any: - return "typing_extensions.Any" - return super().__repr__() - - class Any(metaclass=_AnyMeta): - """Special type indicating an unconstrained type. - - Any is compatible with every type. - - Any assumed to have all methods. - - All values assumed to be instances of Any. - Note that all the above statements are true from the point of view of - static type checkers. At runtime, Any should not be used with instance - checks. - """ - def __new__(cls, *args, **kwargs): - if cls is Any: - raise TypeError("Any cannot be instantiated") - return super().__new__(cls, *args, **kwargs) - - -ClassVar = typing.ClassVar - -# Vendored from cpython typing._SpecialFrom -# Having a separate class means that instances will not be rejected by -# typing._type_check. -class _SpecialForm(typing._Final, _root=True): - __slots__ = ('_name', '__doc__', '_getitem') - - def __init__(self, getitem): - self._getitem = getitem - self._name = getitem.__name__ - self.__doc__ = getitem.__doc__ - - def __getattr__(self, item): - if item in {'__name__', '__qualname__'}: - return self._name - - raise AttributeError(item) - - def __mro_entries__(self, bases): - raise TypeError(f"Cannot subclass {self!r}") - - def __repr__(self): - return f'typing_extensions.{self._name}' - - def __reduce__(self): - return self._name - - def __call__(self, *args, **kwds): - raise TypeError(f"Cannot instantiate {self!r}") - - def __or__(self, other): - return typing.Union[self, other] - - def __ror__(self, other): - return typing.Union[other, self] - - def __instancecheck__(self, obj): - raise TypeError(f"{self} cannot be used with isinstance()") - - def __subclasscheck__(self, cls): - raise TypeError(f"{self} cannot be used with issubclass()") - - @typing._tp_cache - def __getitem__(self, parameters): - return self._getitem(self, parameters) - - -# Note that inheriting from this class means that the object will be -# rejected by typing._type_check, so do not use it if the special form -# is arguably valid as a type by itself. -class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): - def __repr__(self): - return 'typing_extensions.' + self._name - - -Final = typing.Final - -# Breakpoint: https://github.com/python/cpython/pull/30530 -if sys.version_info >= (3, 11): - final = typing.final -else: - # @final exists in 3.8+, but we backport it for all versions - # before 3.11 to keep support for the __final__ attribute. - # See https://bugs.python.org/issue46342 - def final(f): - """This decorator can be used to indicate to type checkers that - the decorated method cannot be overridden, and decorated class - cannot be subclassed. For example: - - class Base: - @final - def done(self) -> None: - ... - class Sub(Base): - def done(self) -> None: # Error reported by type checker - ... - @final - class Leaf: - ... - class Other(Leaf): # Error reported by type checker - ... - - There is no runtime checking of these properties. The decorator - sets the ``__final__`` attribute to ``True`` on the decorated object - to allow runtime introspection. - """ - try: - f.__final__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return f - - -if hasattr(typing, "disjoint_base"): # 3.15 - disjoint_base = typing.disjoint_base -else: - def disjoint_base(cls): - """This decorator marks a class as a disjoint base. - - Child classes of a disjoint base cannot inherit from other disjoint bases that are - not parent classes of the disjoint base. - - For example: - - @disjoint_base - class Disjoint1: pass - - @disjoint_base - class Disjoint2: pass - - class Disjoint3(Disjoint1, Disjoint2): pass # Type checker error - - Type checkers can use knowledge of disjoint bases to detect unreachable code - and determine when two types can overlap. - - See PEP 800.""" - cls.__disjoint_base__ = True - return cls - - -def IntVar(name): - return typing.TypeVar(name) - - -# A Literal bug was fixed in 3.11.0, 3.10.1 and 3.9.8 -# Breakpoint: https://github.com/python/cpython/pull/29334 -if sys.version_info >= (3, 10, 1): - Literal = typing.Literal -else: - def _flatten_literal_params(parameters): - """An internal helper for Literal creation: flatten Literals among parameters""" - params = [] - for p in parameters: - if isinstance(p, _LiteralGenericAlias): - params.extend(p.__args__) - else: - params.append(p) - return tuple(params) - - def _value_and_type_iter(params): - for p in params: - yield p, type(p) - - class _LiteralGenericAlias(typing._GenericAlias, _root=True): - def __eq__(self, other): - if not isinstance(other, _LiteralGenericAlias): - return NotImplemented - these_args_deduped = set(_value_and_type_iter(self.__args__)) - other_args_deduped = set(_value_and_type_iter(other.__args__)) - return these_args_deduped == other_args_deduped - - def __hash__(self): - return hash(frozenset(_value_and_type_iter(self.__args__))) - - class _LiteralForm(_ExtensionsSpecialForm, _root=True): - def __init__(self, doc: str): - self._name = 'Literal' - self._doc = self.__doc__ = doc - - def __getitem__(self, parameters): - if not isinstance(parameters, tuple): - parameters = (parameters,) - - parameters = _flatten_literal_params(parameters) - - val_type_pairs = list(_value_and_type_iter(parameters)) - try: - deduped_pairs = set(val_type_pairs) - except TypeError: - # unhashable parameters - pass - else: - # similar logic to typing._deduplicate on Python 3.9+ - if len(deduped_pairs) < len(val_type_pairs): - new_parameters = [] - for pair in val_type_pairs: - if pair in deduped_pairs: - new_parameters.append(pair[0]) - deduped_pairs.remove(pair) - assert not deduped_pairs, deduped_pairs - parameters = tuple(new_parameters) - - return _LiteralGenericAlias(self, parameters) - - Literal = _LiteralForm(doc="""\ - A type that can be used to indicate to type checkers - that the corresponding value has a value literally equivalent - to the provided parameter. For example: - - var: Literal[4] = 4 - - The type checker understands that 'var' is literally equal to - the value 4 and no other value. - - Literal[...] cannot be subclassed. There is no runtime - checking verifying that the parameter is actually a value - instead of a type.""") - - -_overload_dummy = typing._overload_dummy - - -if hasattr(typing, "get_overloads"): # 3.11+ - overload = typing.overload - get_overloads = typing.get_overloads - clear_overloads = typing.clear_overloads -else: - # {module: {qualname: {firstlineno: func}}} - _overload_registry = collections.defaultdict( - functools.partial(collections.defaultdict, dict) - ) - - def overload(func): - """Decorator for overloaded functions/methods. - - In a stub file, place two or more stub definitions for the same - function in a row, each decorated with @overload. For example: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - - In a non-stub file (i.e. a regular .py file), do the same but - follow it with an implementation. The implementation should *not* - be decorated with @overload. For example: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - def utf8(value): - # implementation goes here - - The overloads for a function can be retrieved at runtime using the - get_overloads() function. - """ - # classmethod and staticmethod - f = getattr(func, "__func__", func) - try: - _overload_registry[f.__module__][f.__qualname__][ - f.__code__.co_firstlineno - ] = func - except AttributeError: - # Not a normal function; ignore. - pass - return _overload_dummy - - def get_overloads(func): - """Return all defined overloads for *func* as a sequence.""" - # classmethod and staticmethod - f = getattr(func, "__func__", func) - if f.__module__ not in _overload_registry: - return [] - mod_dict = _overload_registry[f.__module__] - if f.__qualname__ not in mod_dict: - return [] - return list(mod_dict[f.__qualname__].values()) - - def clear_overloads(): - """Clear all overloads in the registry.""" - _overload_registry.clear() - - -# This is not a real generic class. Don't use outside annotations. -Type = typing.Type - -# Various ABCs mimicking those in collections.abc. -# A few are simply re-exported for completeness. -Awaitable = typing.Awaitable -Coroutine = typing.Coroutine -AsyncIterable = typing.AsyncIterable -AsyncIterator = typing.AsyncIterator -Deque = typing.Deque -DefaultDict = typing.DefaultDict -OrderedDict = typing.OrderedDict -Counter = typing.Counter -ChainMap = typing.ChainMap -Text = typing.Text -TYPE_CHECKING = typing.TYPE_CHECKING - - -# Breakpoint: https://github.com/python/cpython/pull/118681 -if sys.version_info >= (3, 13, 0, "beta"): - from typing import AsyncContextManager, AsyncGenerator, ContextManager, Generator -else: - def _is_dunder(attr): - return attr.startswith('__') and attr.endswith('__') - - - class _SpecialGenericAlias(typing._SpecialGenericAlias, _root=True): - def __init__(self, origin, nparams, *, inst=True, name=None, defaults=()): - super().__init__(origin, nparams, inst=inst, name=name) - self._defaults = defaults - - def __setattr__(self, attr, val): - allowed_attrs = {'_name', '_inst', '_nparams', '_defaults'} - if _is_dunder(attr) or attr in allowed_attrs: - object.__setattr__(self, attr, val) - else: - setattr(self.__origin__, attr, val) - - @typing._tp_cache - def __getitem__(self, params): - if not isinstance(params, tuple): - params = (params,) - msg = "Parameters to generic types must be types." - params = tuple(typing._type_check(p, msg) for p in params) - if ( - self._defaults - and len(params) < self._nparams - and len(params) + len(self._defaults) >= self._nparams - ): - params = (*params, *self._defaults[len(params) - self._nparams:]) - actual_len = len(params) - - if actual_len != self._nparams: - if self._defaults: - expected = f"at least {self._nparams - len(self._defaults)}" - else: - expected = str(self._nparams) - if not self._nparams: - raise TypeError(f"{self} is not a generic class") - raise TypeError( - f"Too {'many' if actual_len > self._nparams else 'few'}" - f" arguments for {self};" - f" actual {actual_len}, expected {expected}" - ) - return self.copy_with(params) - - _NoneType = type(None) - Generator = _SpecialGenericAlias( - collections.abc.Generator, 3, defaults=(_NoneType, _NoneType) - ) - AsyncGenerator = _SpecialGenericAlias( - collections.abc.AsyncGenerator, 2, defaults=(_NoneType,) - ) - ContextManager = _SpecialGenericAlias( - contextlib.AbstractContextManager, - 2, - name="ContextManager", - defaults=(typing.Optional[bool],) - ) - AsyncContextManager = _SpecialGenericAlias( - contextlib.AbstractAsyncContextManager, - 2, - name="AsyncContextManager", - defaults=(typing.Optional[bool],) - ) - - -_PROTO_ALLOWLIST = { - 'collections.abc': [ - 'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable', - 'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', 'Buffer', - ], - 'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'], - 'typing_extensions': ['Buffer'], -} - - -_EXCLUDED_ATTRS = frozenset(typing.EXCLUDED_ATTRIBUTES) | { - "__match_args__", "__protocol_attrs__", "__non_callable_proto_members__", - "__final__", -} - - -def _get_protocol_attrs(cls): - attrs = set() - for base in cls.__mro__[:-1]: # without object - if base.__name__ in {'Protocol', 'Generic'}: - continue - annotations = getattr(base, '__annotations__', {}) - for attr in (*base.__dict__, *annotations): - if (not attr.startswith('_abc_') and attr not in _EXCLUDED_ATTRS): - attrs.add(attr) - return attrs - - -def _caller(depth=1, default='__main__'): - try: - return sys._getframemodulename(depth + 1) or default - except AttributeError: # For platforms without _getframemodulename() - pass - try: - return sys._getframe(depth + 1).f_globals.get('__name__', default) - except (AttributeError, ValueError): # For platforms without _getframe() - pass - return None - - -# `__match_args__` attribute was removed from protocol members in 3.13, -# we want to backport this change to older Python versions. -# Breakpoint: https://github.com/python/cpython/pull/110683 -if sys.version_info >= (3, 13): - Protocol = typing.Protocol -else: - def _allow_reckless_class_checks(depth=2): - """Allow instance and class checks for special stdlib modules. - The abc and functools modules indiscriminately call isinstance() and - issubclass() on the whole MRO of a user class, which may contain protocols. - """ - return _caller(depth) in {'abc', 'functools', None} - - def _no_init(self, *args, **kwargs): - if type(self)._is_protocol: - raise TypeError('Protocols cannot be instantiated') - - def _type_check_issubclass_arg_1(arg): - """Raise TypeError if `arg` is not an instance of `type` - in `issubclass(arg, )`. - - In most cases, this is verified by type.__subclasscheck__. - Checking it again unnecessarily would slow down issubclass() checks, - so, we don't perform this check unless we absolutely have to. - - For various error paths, however, - we want to ensure that *this* error message is shown to the user - where relevant, rather than a typing.py-specific error message. - """ - if not isinstance(arg, type): - # Same error message as for issubclass(1, int). - raise TypeError('issubclass() arg 1 must be a class') - - # Inheriting from typing._ProtocolMeta isn't actually desirable, - # but is necessary to allow typing.Protocol and typing_extensions.Protocol - # to mix without getting TypeErrors about "metaclass conflict" - class _ProtocolMeta(type(typing.Protocol)): - # This metaclass is somewhat unfortunate, - # but is necessary for several reasons... - # - # NOTE: DO NOT call super() in any methods in this class - # That would call the methods on typing._ProtocolMeta on Python <=3.11 - # and those are slow - def __new__(mcls, name, bases, namespace, **kwargs): - if name == "Protocol" and len(bases) < 2: - pass - elif {Protocol, typing.Protocol} & set(bases): - for base in bases: - if not ( - base in {object, typing.Generic, Protocol, typing.Protocol} - or base.__name__ in _PROTO_ALLOWLIST.get(base.__module__, []) - or is_protocol(base) - ): - raise TypeError( - f"Protocols can only inherit from other protocols, " - f"got {base!r}" - ) - return abc.ABCMeta.__new__(mcls, name, bases, namespace, **kwargs) - - def __init__(cls, *args, **kwargs): - abc.ABCMeta.__init__(cls, *args, **kwargs) - if getattr(cls, "_is_protocol", False): - cls.__protocol_attrs__ = _get_protocol_attrs(cls) - - def __subclasscheck__(cls, other): - if cls is Protocol: - return type.__subclasscheck__(cls, other) - if ( - getattr(cls, '_is_protocol', False) - and not _allow_reckless_class_checks() - ): - if not getattr(cls, '_is_runtime_protocol', False): - _type_check_issubclass_arg_1(other) - raise TypeError( - "Instance and class checks can only be used with " - "@runtime_checkable protocols" - ) - if ( - # this attribute is set by @runtime_checkable: - cls.__non_callable_proto_members__ - and cls.__dict__.get("__subclasshook__") is _proto_hook - ): - _type_check_issubclass_arg_1(other) - non_method_attrs = sorted(cls.__non_callable_proto_members__) - raise TypeError( - "Protocols with non-method members don't support issubclass()." - f" Non-method members: {str(non_method_attrs)[1:-1]}." - ) - return abc.ABCMeta.__subclasscheck__(cls, other) - - def __instancecheck__(cls, instance): - # We need this method for situations where attributes are - # assigned in __init__. - if cls is Protocol: - return type.__instancecheck__(cls, instance) - if not getattr(cls, "_is_protocol", False): - # i.e., it's a concrete subclass of a protocol - return abc.ABCMeta.__instancecheck__(cls, instance) - - if ( - not getattr(cls, '_is_runtime_protocol', False) and - not _allow_reckless_class_checks() - ): - raise TypeError("Instance and class checks can only be used with" - " @runtime_checkable protocols") - - if abc.ABCMeta.__instancecheck__(cls, instance): - return True - - for attr in cls.__protocol_attrs__: - try: - val = inspect.getattr_static(instance, attr) - except AttributeError: - break - # this attribute is set by @runtime_checkable: - if val is None and attr not in cls.__non_callable_proto_members__: - break - else: - return True - - return False - - def __eq__(cls, other): - # Hack so that typing.Generic.__class_getitem__ - # treats typing_extensions.Protocol - # as equivalent to typing.Protocol - if abc.ABCMeta.__eq__(cls, other) is True: - return True - return cls is Protocol and other is typing.Protocol - - # This has to be defined, or the abc-module cache - # complains about classes with this metaclass being unhashable, - # if we define only __eq__! - def __hash__(cls) -> int: - return type.__hash__(cls) - - @classmethod - def _proto_hook(cls, other): - if not cls.__dict__.get('_is_protocol', False): - return NotImplemented - - for attr in cls.__protocol_attrs__: - for base in other.__mro__: - # Check if the members appears in the class dictionary... - if attr in base.__dict__: - if base.__dict__[attr] is None: - return NotImplemented - break - - # ...or in annotations, if it is a sub-protocol. - annotations = getattr(base, '__annotations__', {}) - if ( - isinstance(annotations, collections.abc.Mapping) - and attr in annotations - and is_protocol(other) - ): - break - else: - return NotImplemented - return True - - class Protocol(typing.Generic, metaclass=_ProtocolMeta): - __doc__ = typing.Protocol.__doc__ - __slots__ = () - _is_protocol = True - _is_runtime_protocol = False - - def __init_subclass__(cls, *args, **kwargs): - super().__init_subclass__(*args, **kwargs) - - # Determine if this is a protocol or a concrete subclass. - if not cls.__dict__.get('_is_protocol', False): - cls._is_protocol = any(b is Protocol for b in cls.__bases__) - - # Set (or override) the protocol subclass hook. - if '__subclasshook__' not in cls.__dict__: - cls.__subclasshook__ = _proto_hook - - # Prohibit instantiation for protocol classes - if cls._is_protocol and cls.__init__ is Protocol.__init__: - cls.__init__ = _no_init - - -# Breakpoint: https://github.com/python/cpython/pull/113401 -if sys.version_info >= (3, 13): - runtime_checkable = typing.runtime_checkable -else: - def runtime_checkable(cls): - """Mark a protocol class as a runtime protocol. - - Such protocol can be used with isinstance() and issubclass(). - Raise TypeError if applied to a non-protocol class. - This allows a simple-minded structural check very similar to - one trick ponies in collections.abc such as Iterable. - - For example:: - - @runtime_checkable - class Closable(Protocol): - def close(self): ... - - assert isinstance(open('/some/file'), Closable) - - Warning: this will check only the presence of the required methods, - not their type signatures! - """ - if not issubclass(cls, typing.Generic) or not getattr(cls, '_is_protocol', False): - raise TypeError(f'@runtime_checkable can be only applied to protocol classes,' - f' got {cls!r}') - cls._is_runtime_protocol = True - - # typing.Protocol classes on <=3.11 break if we execute this block, - # because typing.Protocol classes on <=3.11 don't have a - # `__protocol_attrs__` attribute, and this block relies on the - # `__protocol_attrs__` attribute. Meanwhile, typing.Protocol classes on 3.12.2+ - # break if we *don't* execute this block, because *they* assume that all - # protocol classes have a `__non_callable_proto_members__` attribute - # (which this block sets) - if isinstance(cls, _ProtocolMeta) or sys.version_info >= (3, 12, 2): - # PEP 544 prohibits using issubclass() - # with protocols that have non-method members. - # See gh-113320 for why we compute this attribute here, - # rather than in `_ProtocolMeta.__init__` - cls.__non_callable_proto_members__ = set() - for attr in cls.__protocol_attrs__: - try: - is_callable = callable(getattr(cls, attr, None)) - except Exception as e: - raise TypeError( - f"Failed to determine whether protocol member {attr!r} " - "is a method member" - ) from e - else: - if not is_callable: - cls.__non_callable_proto_members__.add(attr) - - return cls - - -# The "runtime" alias exists for backwards compatibility. -runtime = runtime_checkable - - -# Our version of runtime-checkable protocols is faster on Python <=3.11 -# Breakpoint: https://github.com/python/cpython/pull/112717 -if sys.version_info >= (3, 12): - SupportsInt = typing.SupportsInt - SupportsFloat = typing.SupportsFloat - SupportsComplex = typing.SupportsComplex - SupportsBytes = typing.SupportsBytes - SupportsIndex = typing.SupportsIndex - SupportsAbs = typing.SupportsAbs - SupportsRound = typing.SupportsRound -else: - @runtime_checkable - class SupportsInt(Protocol): - """An ABC with one abstract method __int__.""" - __slots__ = () - - @abc.abstractmethod - def __int__(self) -> int: - pass - - @runtime_checkable - class SupportsFloat(Protocol): - """An ABC with one abstract method __float__.""" - __slots__ = () - - @abc.abstractmethod - def __float__(self) -> float: - pass - - @runtime_checkable - class SupportsComplex(Protocol): - """An ABC with one abstract method __complex__.""" - __slots__ = () - - @abc.abstractmethod - def __complex__(self) -> complex: - pass - - @runtime_checkable - class SupportsBytes(Protocol): - """An ABC with one abstract method __bytes__.""" - __slots__ = () - - @abc.abstractmethod - def __bytes__(self) -> bytes: - pass - - @runtime_checkable - class SupportsIndex(Protocol): - __slots__ = () - - @abc.abstractmethod - def __index__(self) -> int: - pass - - @runtime_checkable - class SupportsAbs(Protocol[T_co]): - """ - An ABC with one abstract method __abs__ that is covariant in its return type. - """ - __slots__ = () - - @abc.abstractmethod - def __abs__(self) -> T_co: - pass - - @runtime_checkable - class SupportsRound(Protocol[T_co]): - """ - An ABC with one abstract method __round__ that is covariant in its return type. - """ - __slots__ = () - - @abc.abstractmethod - def __round__(self, ndigits: int = 0) -> T_co: - pass - - -if hasattr(io, "Reader") and hasattr(io, "Writer"): - Reader = io.Reader - Writer = io.Writer -else: - @runtime_checkable - class Reader(Protocol[T_co]): - """Protocol for simple I/O reader instances. - - This protocol only supports blocking I/O. - """ - - __slots__ = () - - @abc.abstractmethod - def read(self, size: int = ..., /) -> T_co: - """Read data from the input stream and return it. - - If *size* is specified, at most *size* items (bytes/characters) will be - read. - """ - - @runtime_checkable - class Writer(Protocol[T_contra]): - """Protocol for simple I/O writer instances. - - This protocol only supports blocking I/O. - """ - - __slots__ = () - - @abc.abstractmethod - def write(self, data: T_contra, /) -> int: - """Write *data* to the output stream and return the number of items written.""" # noqa: E501 - - -_NEEDS_SINGLETONMETA = ( - not hasattr(typing, "NoDefault") or not hasattr(typing, "NoExtraItems") -) - -if _NEEDS_SINGLETONMETA: - class SingletonMeta(type): - def __setattr__(cls, attr, value): - # TypeError is consistent with the behavior of NoneType - raise TypeError( - f"cannot set {attr!r} attribute of immutable type {cls.__name__!r}" - ) - - -if hasattr(typing, "NoDefault"): - NoDefault = typing.NoDefault -else: - class NoDefaultType(metaclass=SingletonMeta): - """The type of the NoDefault singleton.""" - - __slots__ = () - - def __new__(cls): - return globals().get("NoDefault") or object.__new__(cls) - - def __repr__(self): - return "typing_extensions.NoDefault" - - def __reduce__(self): - return "NoDefault" - - NoDefault = NoDefaultType() - del NoDefaultType - -if hasattr(typing, "NoExtraItems"): - NoExtraItems = typing.NoExtraItems -else: - class NoExtraItemsType(metaclass=SingletonMeta): - """The type of the NoExtraItems singleton.""" - - __slots__ = () - - def __new__(cls): - return globals().get("NoExtraItems") or object.__new__(cls) - - def __repr__(self): - return "typing_extensions.NoExtraItems" - - def __reduce__(self): - return "NoExtraItems" - - NoExtraItems = NoExtraItemsType() - del NoExtraItemsType - -if _NEEDS_SINGLETONMETA: - del SingletonMeta - - -# Update this to something like >=3.13.0b1 if and when -# PEP 728 is implemented in CPython -_PEP_728_IMPLEMENTED = False - -if _PEP_728_IMPLEMENTED: - # The standard library TypedDict in Python 3.9.0/1 does not honour the "total" - # keyword with old-style TypedDict(). See https://bugs.python.org/issue42059 - # The standard library TypedDict below Python 3.11 does not store runtime - # information about optional and required keys when using Required or NotRequired. - # Generic TypedDicts are also impossible using typing.TypedDict on Python <3.11. - # Aaaand on 3.12 we add __orig_bases__ to TypedDict - # to enable better runtime introspection. - # On 3.13 we deprecate some odd ways of creating TypedDicts. - # Also on 3.13, PEP 705 adds the ReadOnly[] qualifier. - # PEP 728 (still pending) makes more changes. - TypedDict = typing.TypedDict - _TypedDictMeta = typing._TypedDictMeta - is_typeddict = typing.is_typeddict -else: - # 3.10.0 and later - _TAKES_MODULE = "module" in inspect.signature(typing._type_check).parameters - - def _get_typeddict_qualifiers(annotation_type): - while True: - annotation_origin = get_origin(annotation_type) - if annotation_origin is Annotated: - annotation_args = get_args(annotation_type) - if annotation_args: - annotation_type = annotation_args[0] - else: - break - elif annotation_origin is Required: - yield Required - annotation_type, = get_args(annotation_type) - elif annotation_origin is NotRequired: - yield NotRequired - annotation_type, = get_args(annotation_type) - elif annotation_origin is ReadOnly: - yield ReadOnly - annotation_type, = get_args(annotation_type) - else: - break - - class _TypedDictMeta(type): - - def __new__(cls, name, bases, ns, *, total=True, closed=None, - extra_items=NoExtraItems): - """Create new typed dict class object. - - This method is called when TypedDict is subclassed, - or when TypedDict is instantiated. This way - TypedDict supports all three syntax forms described in its docstring. - Subclasses and instances of TypedDict return actual dictionaries. - """ - for base in bases: - if type(base) is not _TypedDictMeta and base is not typing.Generic: - raise TypeError('cannot inherit from both a TypedDict type ' - 'and a non-TypedDict base class') - if closed is not None and extra_items is not NoExtraItems: - raise TypeError(f"Cannot combine closed={closed!r} and extra_items") - - if any(issubclass(b, typing.Generic) for b in bases): - generic_base = (typing.Generic,) - else: - generic_base = () - - ns_annotations = ns.pop('__annotations__', None) - - # typing.py generally doesn't let you inherit from plain Generic, unless - # the name of the class happens to be "Protocol" - tp_dict = type.__new__(_TypedDictMeta, "Protocol", (*generic_base, dict), ns) - tp_dict.__name__ = name - if tp_dict.__qualname__ == "Protocol": - tp_dict.__qualname__ = name - - if not hasattr(tp_dict, '__orig_bases__'): - tp_dict.__orig_bases__ = bases - - annotations = {} - own_annotate = None - if ns_annotations is not None: - own_annotations = ns_annotations - elif sys.version_info >= (3, 14): - if hasattr(annotationlib, "get_annotate_from_class_namespace"): - own_annotate = annotationlib.get_annotate_from_class_namespace(ns) - else: - # 3.14.0a7 and earlier - own_annotate = ns.get("__annotate__") - if own_annotate is not None: - own_annotations = annotationlib.call_annotate_function( - own_annotate, Format.FORWARDREF, owner=tp_dict - ) - else: - own_annotations = {} - else: - own_annotations = {} - msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type" - if _TAKES_MODULE: - own_checked_annotations = { - n: typing._type_check(tp, msg, module=tp_dict.__module__) - for n, tp in own_annotations.items() - } - else: - own_checked_annotations = { - n: typing._type_check(tp, msg) - for n, tp in own_annotations.items() - } - required_keys = set() - optional_keys = set() - readonly_keys = set() - mutable_keys = set() - extra_items_type = extra_items - - for base in bases: - base_dict = base.__dict__ - - if sys.version_info <= (3, 14): - annotations.update(base_dict.get('__annotations__', {})) - required_keys.update(base_dict.get('__required_keys__', ())) - optional_keys.update(base_dict.get('__optional_keys__', ())) - readonly_keys.update(base_dict.get('__readonly_keys__', ())) - mutable_keys.update(base_dict.get('__mutable_keys__', ())) - - # This was specified in an earlier version of PEP 728. Support - # is retained for backwards compatibility, but only for Python - # 3.13 and lower. - if (closed and sys.version_info < (3, 14) - and "__extra_items__" in own_checked_annotations): - annotation_type = own_checked_annotations.pop("__extra_items__") - qualifiers = set(_get_typeddict_qualifiers(annotation_type)) - if Required in qualifiers: - raise TypeError( - "Special key __extra_items__ does not support " - "Required" - ) - if NotRequired in qualifiers: - raise TypeError( - "Special key __extra_items__ does not support " - "NotRequired" - ) - extra_items_type = annotation_type - - annotations.update(own_checked_annotations) - for annotation_key, annotation_type in own_checked_annotations.items(): - qualifiers = set(_get_typeddict_qualifiers(annotation_type)) - - if Required in qualifiers: - required_keys.add(annotation_key) - elif NotRequired in qualifiers: - optional_keys.add(annotation_key) - elif total: - required_keys.add(annotation_key) - else: - optional_keys.add(annotation_key) - if ReadOnly in qualifiers: - mutable_keys.discard(annotation_key) - readonly_keys.add(annotation_key) - else: - mutable_keys.add(annotation_key) - readonly_keys.discard(annotation_key) - - # Breakpoint: https://github.com/python/cpython/pull/119891 - if sys.version_info >= (3, 14): - def __annotate__(format): - annos = {} - for base in bases: - if base is Generic: - continue - base_annotate = base.__annotate__ - if base_annotate is None: - continue - base_annos = annotationlib.call_annotate_function( - base_annotate, format, owner=base) - annos.update(base_annos) - if own_annotate is not None: - own = annotationlib.call_annotate_function( - own_annotate, format, owner=tp_dict) - if format != Format.STRING: - own = { - n: typing._type_check(tp, msg, module=tp_dict.__module__) - for n, tp in own.items() - } - elif format == Format.STRING: - own = annotationlib.annotations_to_string(own_annotations) - elif format in (Format.FORWARDREF, Format.VALUE): - own = own_checked_annotations - else: - raise NotImplementedError(format) - annos.update(own) - return annos - - tp_dict.__annotate__ = __annotate__ - else: - tp_dict.__annotations__ = annotations - tp_dict.__required_keys__ = frozenset(required_keys) - tp_dict.__optional_keys__ = frozenset(optional_keys) - tp_dict.__readonly_keys__ = frozenset(readonly_keys) - tp_dict.__mutable_keys__ = frozenset(mutable_keys) - tp_dict.__total__ = total - tp_dict.__closed__ = closed - tp_dict.__extra_items__ = extra_items_type - return tp_dict - - __call__ = dict # static method - - def __subclasscheck__(cls, other): - # Typed dicts are only for static structural subtyping. - raise TypeError('TypedDict does not support instance and class checks') - - __instancecheck__ = __subclasscheck__ - - _TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {}) - - def _create_typeddict( - typename, - fields, - /, - *, - typing_is_inline, - total, - closed, - extra_items, - **kwargs, - ): - if fields is _marker or fields is None: - if fields is _marker: - deprecated_thing = ( - "Failing to pass a value for the 'fields' parameter" - ) - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - - example = f"`{typename} = TypedDict({typename!r}, {{}})`" - deprecation_msg = ( - f"{deprecated_thing} is deprecated and will be disallowed in " - "Python 3.15. To create a TypedDict class with 0 fields " - "using the functional syntax, pass an empty dictionary, e.g. " - ) + example + "." - warnings.warn(deprecation_msg, DeprecationWarning, stacklevel=2) - # Support a field called "closed" - if closed is not False and closed is not True and closed is not None: - kwargs["closed"] = closed - closed = None - # Or "extra_items" - if extra_items is not NoExtraItems: - kwargs["extra_items"] = extra_items - extra_items = NoExtraItems - fields = kwargs - elif kwargs: - raise TypeError("TypedDict takes either a dict or keyword arguments," - " but not both") - if kwargs: - # Breakpoint: https://github.com/python/cpython/pull/104891 - if sys.version_info >= (3, 13): - raise TypeError("TypedDict takes no keyword arguments") - warnings.warn( - "The kwargs-based syntax for TypedDict definitions is deprecated " - "in Python 3.11, will be removed in Python 3.13, and may not be " - "understood by third-party type checkers.", - DeprecationWarning, - stacklevel=2, - ) - - ns = {'__annotations__': dict(fields)} - module = _caller(depth=4 if typing_is_inline else 2) - if module is not None: - # Setting correct module is necessary to make typed dict classes - # pickleable. - ns['__module__'] = module - - td = _TypedDictMeta(typename, (), ns, total=total, closed=closed, - extra_items=extra_items) - td.__orig_bases__ = (TypedDict,) - return td - - class _TypedDictSpecialForm(_SpecialForm, _root=True): - def __call__( - self, - typename, - fields=_marker, - /, - *, - total=True, - closed=None, - extra_items=NoExtraItems, - **kwargs - ): - return _create_typeddict( - typename, - fields, - typing_is_inline=False, - total=total, - closed=closed, - extra_items=extra_items, - **kwargs, - ) - - def __mro_entries__(self, bases): - return (_TypedDict,) - - @_TypedDictSpecialForm - def TypedDict(self, args): - """A simple typed namespace. At runtime it is equivalent to a plain dict. - - TypedDict creates a dictionary type such that a type checker will expect all - instances to have a certain set of keys, where each key is - associated with a value of a consistent type. This expectation - is not checked at runtime. - - Usage:: - - class Point2D(TypedDict): - x: int - y: int - label: str - - a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK - b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check - - assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') - - The type info can be accessed via the Point2D.__annotations__ dict, and - the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. - TypedDict supports an additional equivalent form:: - - Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) - - By default, all keys must be present in a TypedDict. It is possible - to override this by specifying totality:: - - class Point2D(TypedDict, total=False): - x: int - y: int - - This means that a Point2D TypedDict can have any of the keys omitted. A type - checker is only expected to support a literal False or True as the value of - the total argument. True is the default, and makes all items defined in the - class body be required. - - The Required and NotRequired special forms can also be used to mark - individual keys as being required or not required:: - - class Point2D(TypedDict): - x: int # the "x" key must always be present (Required is the default) - y: NotRequired[int] # the "y" key can be omitted - - See PEP 655 for more details on Required and NotRequired. - """ - # This runs when creating inline TypedDicts: - if not isinstance(args, dict): - raise TypeError( - "TypedDict[...] should be used with a single dict argument" - ) - - return _create_typeddict( - "", - args, - typing_is_inline=True, - total=True, - closed=True, - extra_items=NoExtraItems, - ) - - _TYPEDDICT_TYPES = (typing._TypedDictMeta, _TypedDictMeta) - - def is_typeddict(tp): - """Check if an annotation is a TypedDict class - - For example:: - class Film(TypedDict): - title: str - year: int - - is_typeddict(Film) # => True - is_typeddict(Union[list, str]) # => False - """ - return isinstance(tp, _TYPEDDICT_TYPES) - - -if hasattr(typing, "assert_type"): - assert_type = typing.assert_type - -else: - def assert_type(val, typ, /): - """Assert (to the type checker) that the value is of the given type. - - When the type checker encounters a call to assert_type(), it - emits an error if the value is not of the specified type:: - - def greet(name: str) -> None: - assert_type(name, str) # ok - assert_type(name, int) # type checker error - - At runtime this returns the first argument unchanged and otherwise - does nothing. - """ - return val - - -if hasattr(typing, "ReadOnly"): # 3.13+ - get_type_hints = typing.get_type_hints -else: # <=3.13 - # replaces _strip_annotations() - def _strip_extras(t): - """Strips Annotated, Required and NotRequired from a given type.""" - if isinstance(t, typing._AnnotatedAlias): - return _strip_extras(t.__origin__) - if hasattr(t, "__origin__") and t.__origin__ in (Required, NotRequired, ReadOnly): - return _strip_extras(t.__args__[0]) - if isinstance(t, typing._GenericAlias): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return t.copy_with(stripped_args) - if hasattr(_types, "GenericAlias") and isinstance(t, _types.GenericAlias): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return _types.GenericAlias(t.__origin__, stripped_args) - if hasattr(_types, "UnionType") and isinstance(t, _types.UnionType): - stripped_args = tuple(_strip_extras(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return functools.reduce(operator.or_, stripped_args) - - return t - - def get_type_hints(obj, globalns=None, localns=None, include_extras=False): - """Return type hints for an object. - - This is often the same as obj.__annotations__, but it handles - forward references encoded as string literals, adds Optional[t] if a - default value equal to None is set and recursively replaces all - 'Annotated[T, ...]', 'Required[T]' or 'NotRequired[T]' with 'T' - (unless 'include_extras=True'). - - The argument may be a module, class, method, or function. The annotations - are returned as a dictionary. For classes, annotations include also - inherited members. - - TypeError is raised if the argument is not of a type that can contain - annotations, and an empty dictionary is returned if no annotations are - present. - - BEWARE -- the behavior of globalns and localns is counterintuitive - (unless you are familiar with how eval() and exec() work). The - search order is locals first, then globals. - - - If no dict arguments are passed, an attempt is made to use the - globals from obj (or the respective module's globals for classes), - and these are also used as the locals. If the object does not appear - to have globals, an empty dictionary is used. - - - If one dict argument is passed, it is used for both globals and - locals. - - - If two dict arguments are passed, they specify globals and - locals, respectively. - """ - hint = typing.get_type_hints( - obj, globalns=globalns, localns=localns, include_extras=True - ) - # Breakpoint: https://github.com/python/cpython/pull/30304 - if sys.version_info < (3, 11): - _clean_optional(obj, hint, globalns, localns) - if include_extras: - return hint - return {k: _strip_extras(t) for k, t in hint.items()} - - _NoneType = type(None) - - def _could_be_inserted_optional(t): - """detects Union[..., None] pattern""" - if not isinstance(t, typing._UnionGenericAlias): - return False - # Assume if last argument is not None they are user defined - if t.__args__[-1] is not _NoneType: - return False - return True - - # < 3.11 - def _clean_optional(obj, hints, globalns=None, localns=None): - # reverts injected Union[..., None] cases from typing.get_type_hints - # when a None default value is used. - # see https://github.com/python/typing_extensions/issues/310 - if not hints or isinstance(obj, type): - return - defaults = typing._get_defaults(obj) # avoid accessing __annotations___ - if not defaults: - return - original_hints = obj.__annotations__ - for name, value in hints.items(): - # Not a Union[..., None] or replacement conditions not fullfilled - if (not _could_be_inserted_optional(value) - or name not in defaults - or defaults[name] is not None - ): - continue - original_value = original_hints[name] - # value=NoneType should have caused a skip above but check for safety - if original_value is None: - original_value = _NoneType - # Forward reference - if isinstance(original_value, str): - if globalns is None: - if isinstance(obj, _types.ModuleType): - globalns = obj.__dict__ - else: - nsobj = obj - # Find globalns for the unwrapped object. - while hasattr(nsobj, '__wrapped__'): - nsobj = nsobj.__wrapped__ - globalns = getattr(nsobj, '__globals__', {}) - if localns is None: - localns = globalns - elif localns is None: - localns = globalns - - original_value = ForwardRef( - original_value, - is_argument=not isinstance(obj, _types.ModuleType) - ) - original_evaluated = typing._eval_type(original_value, globalns, localns) - # Compare if values differ. Note that even if equal - # value might be cached by typing._tp_cache contrary to original_evaluated - if original_evaluated != value or ( - # 3.10: ForwardRefs of UnionType might be turned into _UnionGenericAlias - hasattr(_types, "UnionType") - and isinstance(original_evaluated, _types.UnionType) - and not isinstance(value, _types.UnionType) - ): - hints[name] = original_evaluated - -# Python 3.9 has get_origin() and get_args() but those implementations don't support -# ParamSpecArgs and ParamSpecKwargs, so only Python 3.10's versions will do. -# Breakpoint: https://github.com/python/cpython/pull/25298 -if sys.version_info >= (3, 10): - get_origin = typing.get_origin - get_args = typing.get_args -# 3.9 -else: - def get_origin(tp): - """Get the unsubscripted version of a type. - - This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar - and Annotated. Return None for unsupported types. Examples:: - - get_origin(Literal[42]) is Literal - get_origin(int) is None - get_origin(ClassVar[int]) is ClassVar - get_origin(Generic) is Generic - get_origin(Generic[T]) is Generic - get_origin(Union[T, int]) is Union - get_origin(List[Tuple[T, T]][int]) == list - get_origin(P.args) is P - """ - if isinstance(tp, typing._AnnotatedAlias): - return Annotated - if isinstance(tp, (typing._BaseGenericAlias, _types.GenericAlias, - ParamSpecArgs, ParamSpecKwargs)): - return tp.__origin__ - if tp is typing.Generic: - return typing.Generic - return None - - def get_args(tp): - """Get type arguments with all substitutions performed. - - For unions, basic simplifications used by Union constructor are performed. - Examples:: - get_args(Dict[str, int]) == (str, int) - get_args(int) == () - get_args(Union[int, Union[T, int], str][int]) == (int, str) - get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int]) - get_args(Callable[[], T][int]) == ([], int) - """ - if isinstance(tp, typing._AnnotatedAlias): - return (tp.__origin__, *tp.__metadata__) - if isinstance(tp, (typing._GenericAlias, _types.GenericAlias)): - res = tp.__args__ - if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis: - res = (list(res[:-1]), res[-1]) - return res - return () - - -# 3.10+ -if hasattr(typing, 'TypeAlias'): - TypeAlias = typing.TypeAlias -# 3.9 -else: - @_ExtensionsSpecialForm - def TypeAlias(self, parameters): - """Special marker indicating that an assignment should - be recognized as a proper type alias definition by type - checkers. - - For example:: - - Predicate: TypeAlias = Callable[..., bool] - - It's invalid when used anywhere except as in the example above. - """ - raise TypeError(f"{self} is not subscriptable") - - -def _set_default(type_param, default): - type_param.has_default = lambda: default is not NoDefault - type_param.__default__ = default - - -def _set_module(typevarlike): - # for pickling: - def_mod = _caller(depth=2) - if def_mod != 'typing_extensions': - typevarlike.__module__ = def_mod - - -class _DefaultMixin: - """Mixin for TypeVarLike defaults.""" - - __slots__ = () - __init__ = _set_default - - -# Classes using this metaclass must provide a _backported_typevarlike ClassVar -class _TypeVarLikeMeta(type): - def __instancecheck__(cls, __instance: Any) -> bool: - return isinstance(__instance, cls._backported_typevarlike) - - -if _PEP_696_IMPLEMENTED: - from typing import TypeVar -else: - # Add default and infer_variance parameters from PEP 696 and 695 - class TypeVar(metaclass=_TypeVarLikeMeta): - """Type variable.""" - - _backported_typevarlike = typing.TypeVar - - def __new__(cls, name, *constraints, bound=None, - covariant=False, contravariant=False, - default=NoDefault, infer_variance=False): - if hasattr(typing, "TypeAliasType"): - # PEP 695 implemented (3.12+), can pass infer_variance to typing.TypeVar - typevar = typing.TypeVar(name, *constraints, bound=bound, - covariant=covariant, contravariant=contravariant, - infer_variance=infer_variance) - else: - typevar = typing.TypeVar(name, *constraints, bound=bound, - covariant=covariant, contravariant=contravariant) - if infer_variance and (covariant or contravariant): - raise ValueError("Variance cannot be specified with infer_variance.") - typevar.__infer_variance__ = infer_variance - - _set_default(typevar, default) - _set_module(typevar) - - def _tvar_prepare_subst(alias, args): - if ( - typevar.has_default() - and alias.__parameters__.index(typevar) == len(args) - ): - args += (typevar.__default__,) - return args - - typevar.__typing_prepare_subst__ = _tvar_prepare_subst - return typevar - - def __init_subclass__(cls) -> None: - raise TypeError(f"type '{__name__}.TypeVar' is not an acceptable base type") - - -# Python 3.10+ has PEP 612 -if hasattr(typing, 'ParamSpecArgs'): - ParamSpecArgs = typing.ParamSpecArgs - ParamSpecKwargs = typing.ParamSpecKwargs -# 3.9 -else: - class _Immutable: - """Mixin to indicate that object should not be copied.""" - __slots__ = () - - def __copy__(self): - return self - - def __deepcopy__(self, memo): - return self - - class ParamSpecArgs(_Immutable): - """The args for a ParamSpec object. - - Given a ParamSpec object P, P.args is an instance of ParamSpecArgs. - - ParamSpecArgs objects have a reference back to their ParamSpec: - - P.args.__origin__ is P - - This type is meant for runtime introspection and has no special meaning to - static type checkers. - """ - def __init__(self, origin): - self.__origin__ = origin - - def __repr__(self): - return f"{self.__origin__.__name__}.args" - - def __eq__(self, other): - if not isinstance(other, ParamSpecArgs): - return NotImplemented - return self.__origin__ == other.__origin__ - - class ParamSpecKwargs(_Immutable): - """The kwargs for a ParamSpec object. - - Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs. - - ParamSpecKwargs objects have a reference back to their ParamSpec: - - P.kwargs.__origin__ is P - - This type is meant for runtime introspection and has no special meaning to - static type checkers. - """ - def __init__(self, origin): - self.__origin__ = origin - - def __repr__(self): - return f"{self.__origin__.__name__}.kwargs" - - def __eq__(self, other): - if not isinstance(other, ParamSpecKwargs): - return NotImplemented - return self.__origin__ == other.__origin__ - - -if _PEP_696_IMPLEMENTED: - from typing import ParamSpec - -# 3.10+ -elif hasattr(typing, 'ParamSpec'): - - # Add default parameter - PEP 696 - class ParamSpec(metaclass=_TypeVarLikeMeta): - """Parameter specification.""" - - _backported_typevarlike = typing.ParamSpec - - def __new__(cls, name, *, bound=None, - covariant=False, contravariant=False, - infer_variance=False, default=NoDefault): - if hasattr(typing, "TypeAliasType"): - # PEP 695 implemented, can pass infer_variance to typing.TypeVar - paramspec = typing.ParamSpec(name, bound=bound, - covariant=covariant, - contravariant=contravariant, - infer_variance=infer_variance) - else: - paramspec = typing.ParamSpec(name, bound=bound, - covariant=covariant, - contravariant=contravariant) - paramspec.__infer_variance__ = infer_variance - - _set_default(paramspec, default) - _set_module(paramspec) - - def _paramspec_prepare_subst(alias, args): - params = alias.__parameters__ - i = params.index(paramspec) - if i == len(args) and paramspec.has_default(): - args = [*args, paramspec.__default__] - if i >= len(args): - raise TypeError(f"Too few arguments for {alias}") - # Special case where Z[[int, str, bool]] == Z[int, str, bool] in PEP 612. - if len(params) == 1 and not typing._is_param_expr(args[0]): - assert i == 0 - args = (args,) - # Convert lists to tuples to help other libraries cache the results. - elif isinstance(args[i], list): - args = (*args[:i], tuple(args[i]), *args[i + 1:]) - return args - - paramspec.__typing_prepare_subst__ = _paramspec_prepare_subst - return paramspec - - def __init_subclass__(cls) -> None: - raise TypeError(f"type '{__name__}.ParamSpec' is not an acceptable base type") - -# 3.9 -else: - - # Inherits from list as a workaround for Callable checks in Python < 3.9.2. - class ParamSpec(list, _DefaultMixin): - """Parameter specification variable. - - Usage:: - - P = ParamSpec('P') - - Parameter specification variables exist primarily for the benefit of static - type checkers. They are used to forward the parameter types of one - callable to another callable, a pattern commonly found in higher order - functions and decorators. They are only valid when used in ``Concatenate``, - or s the first argument to ``Callable``. In Python 3.10 and higher, - they are also supported in user-defined Generics at runtime. - See class Generic for more information on generic types. An - example for annotating a decorator:: - - T = TypeVar('T') - P = ParamSpec('P') - - def add_logging(f: Callable[P, T]) -> Callable[P, T]: - '''A type-safe decorator to add logging to a function.''' - def inner(*args: P.args, **kwargs: P.kwargs) -> T: - logging.info(f'{f.__name__} was called') - return f(*args, **kwargs) - return inner - - @add_logging - def add_two(x: float, y: float) -> float: - '''Add two numbers together.''' - return x + y - - Parameter specification variables defined with covariant=True or - contravariant=True can be used to declare covariant or contravariant - generic types. These keyword arguments are valid, but their actual semantics - are yet to be decided. See PEP 612 for details. - - Parameter specification variables can be introspected. e.g.: - - P.__name__ == 'T' - P.__bound__ == None - P.__covariant__ == False - P.__contravariant__ == False - - Note that only parameter specification variables defined in global scope can - be pickled. - """ - - # Trick Generic __parameters__. - __class__ = typing.TypeVar - - @property - def args(self): - return ParamSpecArgs(self) - - @property - def kwargs(self): - return ParamSpecKwargs(self) - - def __init__(self, name, *, bound=None, covariant=False, contravariant=False, - infer_variance=False, default=NoDefault): - list.__init__(self, [self]) - self.__name__ = name - self.__covariant__ = bool(covariant) - self.__contravariant__ = bool(contravariant) - self.__infer_variance__ = bool(infer_variance) - if bound: - self.__bound__ = typing._type_check(bound, 'Bound must be a type.') - else: - self.__bound__ = None - _DefaultMixin.__init__(self, default) - - # for pickling: - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - def __repr__(self): - if self.__infer_variance__: - prefix = '' - elif self.__covariant__: - prefix = '+' - elif self.__contravariant__: - prefix = '-' - else: - prefix = '~' - return prefix + self.__name__ - - def __hash__(self): - return object.__hash__(self) - - def __eq__(self, other): - return self is other - - def __reduce__(self): - return self.__name__ - - # Hack to get typing._type_check to pass. - def __call__(self, *args, **kwargs): - pass - - -# 3.9 -if not hasattr(typing, 'Concatenate'): - # Inherits from list as a workaround for Callable checks in Python < 3.9.2. - - # 3.9.0-1 - if not hasattr(typing, '_type_convert'): - def _type_convert(arg, module=None, *, allow_special_forms=False): - """For converting None to type(None), and strings to ForwardRef.""" - if arg is None: - return type(None) - if isinstance(arg, str): - if sys.version_info <= (3, 9, 6): - return ForwardRef(arg) - if sys.version_info <= (3, 9, 7): - return ForwardRef(arg, module=module) - return ForwardRef(arg, module=module, is_class=allow_special_forms) - return arg - else: - _type_convert = typing._type_convert - - class _ConcatenateGenericAlias(list): - - # Trick Generic into looking into this for __parameters__. - __class__ = typing._GenericAlias - - def __init__(self, origin, args): - super().__init__(args) - self.__origin__ = origin - self.__args__ = args - - def __repr__(self): - _type_repr = typing._type_repr - return (f'{_type_repr(self.__origin__)}' - f'[{", ".join(_type_repr(arg) for arg in self.__args__)}]') - - def __hash__(self): - return hash((self.__origin__, self.__args__)) - - # Hack to get typing._type_check to pass in Generic. - def __call__(self, *args, **kwargs): - pass - - @property - def __parameters__(self): - return tuple( - tp for tp in self.__args__ if isinstance(tp, (typing.TypeVar, ParamSpec)) - ) - - # 3.9 used by __getitem__ below - def copy_with(self, params): - if isinstance(params[-1], _ConcatenateGenericAlias): - params = (*params[:-1], *params[-1].__args__) - elif isinstance(params[-1], (list, tuple)): - return (*params[:-1], *params[-1]) - elif (not (params[-1] is ... or isinstance(params[-1], ParamSpec))): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable or ellipsis.") - return self.__class__(self.__origin__, params) - - # 3.9; accessed during GenericAlias.__getitem__ when substituting - def __getitem__(self, args): - if self.__origin__ in (Generic, Protocol): - # Can't subscript Generic[...] or Protocol[...]. - raise TypeError(f"Cannot subscript already-subscripted {self}") - if not self.__parameters__: - raise TypeError(f"{self} is not a generic class") - - if not isinstance(args, tuple): - args = (args,) - args = _unpack_args(*(_type_convert(p) for p in args)) - params = self.__parameters__ - for param in params: - prepare = getattr(param, "__typing_prepare_subst__", None) - if prepare is not None: - args = prepare(self, args) - # 3.9 & typing.ParamSpec - elif isinstance(param, ParamSpec): - i = params.index(param) - if ( - i == len(args) - and getattr(param, '__default__', NoDefault) is not NoDefault - ): - args = [*args, param.__default__] - if i >= len(args): - raise TypeError(f"Too few arguments for {self}") - # Special case for Z[[int, str, bool]] == Z[int, str, bool] - if len(params) == 1 and not _is_param_expr(args[0]): - assert i == 0 - args = (args,) - elif ( - isinstance(args[i], list) - # 3.9 - # This class inherits from list do not convert - and not isinstance(args[i], _ConcatenateGenericAlias) - ): - args = (*args[:i], tuple(args[i]), *args[i + 1:]) - - alen = len(args) - plen = len(params) - if alen != plen: - raise TypeError( - f"Too {'many' if alen > plen else 'few'} arguments for {self};" - f" actual {alen}, expected {plen}" - ) - - subst = dict(zip(self.__parameters__, args)) - # determine new args - new_args = [] - for arg in self.__args__: - if isinstance(arg, type): - new_args.append(arg) - continue - if isinstance(arg, TypeVar): - arg = subst[arg] - if ( - (isinstance(arg, typing._GenericAlias) and _is_unpack(arg)) - or ( - hasattr(_types, "GenericAlias") - and isinstance(arg, _types.GenericAlias) - and getattr(arg, "__unpacked__", False) - ) - ): - raise TypeError(f"{arg} is not valid as type argument") - - elif isinstance(arg, - typing._GenericAlias - if not hasattr(_types, "GenericAlias") else - (typing._GenericAlias, _types.GenericAlias) - ): - subparams = arg.__parameters__ - if subparams: - subargs = tuple(subst[x] for x in subparams) - arg = arg[subargs] - new_args.append(arg) - return self.copy_with(tuple(new_args)) - -# 3.10+ -else: - _ConcatenateGenericAlias = typing._ConcatenateGenericAlias - - # 3.10 - if sys.version_info < (3, 11): - - class _ConcatenateGenericAlias(typing._ConcatenateGenericAlias, _root=True): - # needed for checks in collections.abc.Callable to accept this class - __module__ = "typing" - - def copy_with(self, params): - if isinstance(params[-1], (list, tuple)): - return (*params[:-1], *params[-1]) - if isinstance(params[-1], typing._ConcatenateGenericAlias): - params = (*params[:-1], *params[-1].__args__) - elif not (params[-1] is ... or isinstance(params[-1], ParamSpec)): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable or ellipsis.") - return super(typing._ConcatenateGenericAlias, self).copy_with(params) - - def __getitem__(self, args): - value = super().__getitem__(args) - if isinstance(value, tuple) and any(_is_unpack(t) for t in value): - return tuple(_unpack_args(*(n for n in value))) - return value - - -# 3.9.2 -class _EllipsisDummy: ... - - -# <=3.10 -def _create_concatenate_alias(origin, parameters): - if parameters[-1] is ... and sys.version_info < (3, 9, 2): - # Hack: Arguments must be types, replace it with one. - parameters = (*parameters[:-1], _EllipsisDummy) - if sys.version_info >= (3, 10, 3): - concatenate = _ConcatenateGenericAlias(origin, parameters, - _typevar_types=(TypeVar, ParamSpec), - _paramspec_tvars=True) - else: - concatenate = _ConcatenateGenericAlias(origin, parameters) - if parameters[-1] is not _EllipsisDummy: - return concatenate - # Remove dummy again - concatenate.__args__ = tuple(p if p is not _EllipsisDummy else ... - for p in concatenate.__args__) - if sys.version_info < (3, 10): - # backport needs __args__ adjustment only - return concatenate - concatenate.__parameters__ = tuple(p for p in concatenate.__parameters__ - if p is not _EllipsisDummy) - return concatenate - - -# <=3.10 -@typing._tp_cache -def _concatenate_getitem(self, parameters): - if parameters == (): - raise TypeError("Cannot take a Concatenate of no types.") - if not isinstance(parameters, tuple): - parameters = (parameters,) - if not (parameters[-1] is ... or isinstance(parameters[-1], ParamSpec)): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable or ellipsis.") - msg = "Concatenate[arg, ...]: each arg must be a type." - parameters = (*(typing._type_check(p, msg) for p in parameters[:-1]), - parameters[-1]) - return _create_concatenate_alias(self, parameters) - - -# 3.11+; Concatenate does not accept ellipsis in 3.10 -# Breakpoint: https://github.com/python/cpython/pull/30969 -if sys.version_info >= (3, 11): - Concatenate = typing.Concatenate -# <=3.10 -else: - @_ExtensionsSpecialForm - def Concatenate(self, parameters): - """Used in conjunction with ``ParamSpec`` and ``Callable`` to represent a - higher order function which adds, removes or transforms parameters of a - callable. - - For example:: - - Callable[Concatenate[int, P], int] - - See PEP 612 for detailed information. - """ - return _concatenate_getitem(self, parameters) - - -# 3.10+ -if hasattr(typing, 'TypeGuard'): - TypeGuard = typing.TypeGuard -# 3.9 -else: - @_ExtensionsSpecialForm - def TypeGuard(self, parameters): - """Special typing form used to annotate the return type of a user-defined - type guard function. ``TypeGuard`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeGuard[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeGuard`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the type inside ``TypeGuard``. - - For example:: - - def is_str(val: Union[str, float]): - # "isinstance" type guard - if isinstance(val, str): - # Type of ``val`` is narrowed to ``str`` - ... - else: - # Else, type of ``val`` is narrowed to ``float``. - ... - - Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower - form of ``TypeA`` (it can even be a wider form) and this may lead to - type-unsafe results. The main reason is to allow for things like - narrowing ``List[object]`` to ``List[str]`` even though the latter is not - a subtype of the former, since ``List`` is invariant. The responsibility of - writing type-safe type guards is left to the user. - - ``TypeGuard`` also works with type variables. For more information, see - PEP 647 (User-Defined Type Guards). - """ - item = typing._type_check(parameters, f'{self} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - -# 3.13+ -if hasattr(typing, 'TypeIs'): - TypeIs = typing.TypeIs -# <=3.12 -else: - @_ExtensionsSpecialForm - def TypeIs(self, parameters): - """Special typing form used to annotate the return type of a user-defined - type narrower function. ``TypeIs`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeIs`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type guard". - - Sometimes it would be convenient to use a user-defined boolean function - as a type guard. Such a function should use ``TypeIs[...]`` as its - return type to alert static type checkers to this intention. - - Using ``-> TypeIs`` tells the static type checker that for a given - function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the intersection of the type inside ``TypeIs`` and the argument's - previously known type. - - For example:: - - def is_awaitable(val: object) -> TypeIs[Awaitable[Any]]: - return hasattr(val, '__await__') - - def f(val: Union[int, Awaitable[int]]) -> int: - if is_awaitable(val): - assert_type(val, Awaitable[int]) - else: - assert_type(val, int) - - ``TypeIs`` also works with type variables. For more information, see - PEP 742 (Narrowing types with TypeIs). - """ - item = typing._type_check(parameters, f'{self} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - -# 3.14+? -if hasattr(typing, 'TypeForm'): - TypeForm = typing.TypeForm -# <=3.13 -else: - class _TypeFormForm(_ExtensionsSpecialForm, _root=True): - # TypeForm(X) is equivalent to X but indicates to the type checker - # that the object is a TypeForm. - def __call__(self, obj, /): - return obj - - @_TypeFormForm - def TypeForm(self, parameters): - """A special form representing the value that results from the evaluation - of a type expression. This value encodes the information supplied in the - type expression, and it represents the type described by that type expression. - - When used in a type expression, TypeForm describes a set of type form objects. - It accepts a single type argument, which must be a valid type expression. - ``TypeForm[T]`` describes the set of all type form objects that represent - the type T or types that are assignable to T. - - Usage: - - def cast[T](typ: TypeForm[T], value: Any) -> T: ... - - reveal_type(cast(int, "x")) # int - - See PEP 747 for more information. - """ - item = typing._type_check(parameters, f'{self} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - - - -if hasattr(typing, "LiteralString"): # 3.11+ - LiteralString = typing.LiteralString -else: - @_SpecialForm - def LiteralString(self, params): - """Represents an arbitrary literal string. - - Example:: - - from typing_extensions import LiteralString - - def query(sql: LiteralString) -> ...: - ... - - query("SELECT * FROM table") # ok - query(f"SELECT * FROM {input()}") # not ok - - See PEP 675 for details. - - """ - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, "Self"): # 3.11+ - Self = typing.Self -else: - @_SpecialForm - def Self(self, params): - """Used to spell the type of "self" in classes. - - Example:: - - from typing import Self - - class ReturnsSelf: - def parse(self, data: bytes) -> Self: - ... - return self - - """ - - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, "Never"): # 3.11+ - Never = typing.Never -else: - @_SpecialForm - def Never(self, params): - """The bottom type, a type that has no members. - - This can be used to define a function that should never be - called, or a function that never returns:: - - from typing_extensions import Never - - def never_call_me(arg: Never) -> None: - pass - - def int_or_str(arg: int | str) -> None: - never_call_me(arg) # type checker error - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - never_call_me(arg) # ok, arg is of type Never - - """ - - raise TypeError(f"{self} is not subscriptable") - - -if hasattr(typing, 'Required'): # 3.11+ - Required = typing.Required - NotRequired = typing.NotRequired -else: # <=3.10 - @_ExtensionsSpecialForm - def Required(self, parameters): - """A special typing construct to mark a key of a total=False TypedDict - as required. For example: - - class Movie(TypedDict, total=False): - title: Required[str] - year: int - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - - There is no runtime checking that a required key is actually provided - when instantiating a related TypedDict. - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - @_ExtensionsSpecialForm - def NotRequired(self, parameters): - """A special typing construct to mark a key of a TypedDict as - potentially missing. For example: - - class Movie(TypedDict): - title: str - year: NotRequired[int] - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - -if hasattr(typing, 'ReadOnly'): - ReadOnly = typing.ReadOnly -else: # <=3.12 - @_ExtensionsSpecialForm - def ReadOnly(self, parameters): - """A special typing construct to mark an item of a TypedDict as read-only. - - For example: - - class Movie(TypedDict): - title: ReadOnly[str] - year: int - - def mutate_movie(m: Movie) -> None: - m["year"] = 1992 # allowed - m["title"] = "The Matrix" # typechecker error - - There is no runtime checking for this property. - """ - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return typing._GenericAlias(self, (item,)) - - -_UNPACK_DOC = """\ -Type unpack operator. - -The type unpack operator takes the child types from some container type, -such as `tuple[int, str]` or a `TypeVarTuple`, and 'pulls them out'. For -example: - - # For some generic class `Foo`: - Foo[Unpack[tuple[int, str]]] # Equivalent to Foo[int, str] - - Ts = TypeVarTuple('Ts') - # Specifies that `Bar` is generic in an arbitrary number of types. - # (Think of `Ts` as a tuple of an arbitrary number of individual - # `TypeVar`s, which the `Unpack` is 'pulling out' directly into the - # `Generic[]`.) - class Bar(Generic[Unpack[Ts]]): ... - Bar[int] # Valid - Bar[int, str] # Also valid - -From Python 3.11, this can also be done using the `*` operator: - - Foo[*tuple[int, str]] - class Bar(Generic[*Ts]): ... - -The operator can also be used along with a `TypedDict` to annotate -`**kwargs` in a function signature. For instance: - - class Movie(TypedDict): - name: str - year: int - - # This function expects two keyword arguments - *name* of type `str` and - # *year* of type `int`. - def foo(**kwargs: Unpack[Movie]): ... - -Note that there is only some runtime checking of this operator. Not -everything the runtime allows may be accepted by static type checkers. - -For more information, see PEP 646 and PEP 692. -""" - - -# PEP 692 changed the repr of Unpack[] -# Breakpoint: https://github.com/python/cpython/pull/104048 -if sys.version_info >= (3, 12): - Unpack = typing.Unpack - - def _is_unpack(obj): - return get_origin(obj) is Unpack - -else: # <=3.11 - class _UnpackSpecialForm(_ExtensionsSpecialForm, _root=True): - def __init__(self, getitem): - super().__init__(getitem) - self.__doc__ = _UNPACK_DOC - - class _UnpackAlias(typing._GenericAlias, _root=True): - if sys.version_info < (3, 11): - # needed for compatibility with Generic[Unpack[Ts]] - __class__ = typing.TypeVar - - @property - def __typing_unpacked_tuple_args__(self): - assert self.__origin__ is Unpack - assert len(self.__args__) == 1 - arg, = self.__args__ - if isinstance(arg, (typing._GenericAlias, _types.GenericAlias)): - if arg.__origin__ is not tuple: - raise TypeError("Unpack[...] must be used with a tuple type") - return arg.__args__ - return None - - @property - def __typing_is_unpacked_typevartuple__(self): - assert self.__origin__ is Unpack - assert len(self.__args__) == 1 - return isinstance(self.__args__[0], TypeVarTuple) - - def __getitem__(self, args): - if self.__typing_is_unpacked_typevartuple__: - return args - return super().__getitem__(args) - - @_UnpackSpecialForm - def Unpack(self, parameters): - item = typing._type_check(parameters, f'{self._name} accepts only a single type.') - return _UnpackAlias(self, (item,)) - - def _is_unpack(obj): - return isinstance(obj, _UnpackAlias) - - -def _unpack_args(*args): - newargs = [] - for arg in args: - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs is not None and (not (subargs and subargs[-1] is ...)): - newargs.extend(subargs) - else: - newargs.append(arg) - return newargs - - -if _PEP_696_IMPLEMENTED: - from typing import TypeVarTuple - -elif hasattr(typing, "TypeVarTuple"): # 3.11+ - - # Add default parameter - PEP 696 - class TypeVarTuple(metaclass=_TypeVarLikeMeta): - """Type variable tuple.""" - - _backported_typevarlike = typing.TypeVarTuple - - def __new__(cls, name, *, default=NoDefault): - tvt = typing.TypeVarTuple(name) - _set_default(tvt, default) - _set_module(tvt) - - def _typevartuple_prepare_subst(alias, args): - params = alias.__parameters__ - typevartuple_index = params.index(tvt) - for param in params[typevartuple_index + 1:]: - if isinstance(param, TypeVarTuple): - raise TypeError( - f"More than one TypeVarTuple parameter in {alias}" - ) - - alen = len(args) - plen = len(params) - left = typevartuple_index - right = plen - typevartuple_index - 1 - var_tuple_index = None - fillarg = None - for k, arg in enumerate(args): - if not isinstance(arg, type): - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs and len(subargs) == 2 and subargs[-1] is ...: - if var_tuple_index is not None: - raise TypeError( - "More than one unpacked " - "arbitrary-length tuple argument" - ) - var_tuple_index = k - fillarg = subargs[0] - if var_tuple_index is not None: - left = min(left, var_tuple_index) - right = min(right, alen - var_tuple_index - 1) - elif left + right > alen: - raise TypeError(f"Too few arguments for {alias};" - f" actual {alen}, expected at least {plen - 1}") - if left == alen - right and tvt.has_default(): - replacement = _unpack_args(tvt.__default__) - else: - replacement = args[left: alen - right] - - return ( - *args[:left], - *([fillarg] * (typevartuple_index - left)), - replacement, - *([fillarg] * (plen - right - left - typevartuple_index - 1)), - *args[alen - right:], - ) - - tvt.__typing_prepare_subst__ = _typevartuple_prepare_subst - return tvt - - def __init_subclass__(self, *args, **kwds): - raise TypeError("Cannot subclass special typing classes") - -else: # <=3.10 - class TypeVarTuple(_DefaultMixin): - """Type variable tuple. - - Usage:: - - Ts = TypeVarTuple('Ts') - - In the same way that a normal type variable is a stand-in for a single - type such as ``int``, a type variable *tuple* is a stand-in for a *tuple* - type such as ``Tuple[int, str]``. - - Type variable tuples can be used in ``Generic`` declarations. - Consider the following example:: - - class Array(Generic[*Ts]): ... - - The ``Ts`` type variable tuple here behaves like ``tuple[T1, T2]``, - where ``T1`` and ``T2`` are type variables. To use these type variables - as type parameters of ``Array``, we must *unpack* the type variable tuple using - the star operator: ``*Ts``. The signature of ``Array`` then behaves - as if we had simply written ``class Array(Generic[T1, T2]): ...``. - In contrast to ``Generic[T1, T2]``, however, ``Generic[*Shape]`` allows - us to parameterise the class with an *arbitrary* number of type parameters. - - Type variable tuples can be used anywhere a normal ``TypeVar`` can. - This includes class definitions, as shown above, as well as function - signatures and variable annotations:: - - class Array(Generic[*Ts]): - - def __init__(self, shape: Tuple[*Ts]): - self._shape: Tuple[*Ts] = shape - - def get_shape(self) -> Tuple[*Ts]: - return self._shape - - shape = (Height(480), Width(640)) - x: Array[Height, Width] = Array(shape) - y = abs(x) # Inferred type is Array[Height, Width] - z = x + x # ... is Array[Height, Width] - x.get_shape() # ... is tuple[Height, Width] - - """ - - # Trick Generic __parameters__. - __class__ = typing.TypeVar - - def __iter__(self): - yield self.__unpacked__ - - def __init__(self, name, *, default=NoDefault): - self.__name__ = name - _DefaultMixin.__init__(self, default) - - # for pickling: - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - self.__unpacked__ = Unpack[self] - - def __repr__(self): - return self.__name__ - - def __hash__(self): - return object.__hash__(self) - - def __eq__(self, other): - return self is other - - def __reduce__(self): - return self.__name__ - - def __init_subclass__(self, *args, **kwds): - if '_root' not in kwds: - raise TypeError("Cannot subclass special typing classes") - - -if hasattr(typing, "reveal_type"): # 3.11+ - reveal_type = typing.reveal_type -else: # <=3.10 - def reveal_type(obj: T, /) -> T: - """Reveal the inferred type of a variable. - - When a static type checker encounters a call to ``reveal_type()``, - it will emit the inferred type of the argument:: - - x: int = 1 - reveal_type(x) - - Running a static type checker (e.g., ``mypy``) on this example - will produce output similar to 'Revealed type is "builtins.int"'. - - At runtime, the function prints the runtime type of the - argument and returns it unchanged. - - """ - print(f"Runtime type is {type(obj).__name__!r}", file=sys.stderr) - return obj - - -if hasattr(typing, "_ASSERT_NEVER_REPR_MAX_LENGTH"): # 3.11+ - _ASSERT_NEVER_REPR_MAX_LENGTH = typing._ASSERT_NEVER_REPR_MAX_LENGTH -else: # <=3.10 - _ASSERT_NEVER_REPR_MAX_LENGTH = 100 - - -if hasattr(typing, "assert_never"): # 3.11+ - assert_never = typing.assert_never -else: # <=3.10 - def assert_never(arg: Never, /) -> Never: - """Assert to the type checker that a line of code is unreachable. - - Example:: - - def int_or_str(arg: int | str) -> None: - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - assert_never(arg) - - If a type checker finds that a call to assert_never() is - reachable, it will emit an error. - - At runtime, this throws an exception when called. - - """ - value = repr(arg) - if len(value) > _ASSERT_NEVER_REPR_MAX_LENGTH: - value = value[:_ASSERT_NEVER_REPR_MAX_LENGTH] + '...' - raise AssertionError(f"Expected code to be unreachable, but got: {value}") - - -# dataclass_transform exists in 3.11 but lacks the frozen_default parameter -# Breakpoint: https://github.com/python/cpython/pull/99958 -if sys.version_info >= (3, 12): # 3.12+ - dataclass_transform = typing.dataclass_transform -else: # <=3.11 - def dataclass_transform( - *, - eq_default: bool = True, - order_default: bool = False, - kw_only_default: bool = False, - frozen_default: bool = False, - field_specifiers: typing.Tuple[ - typing.Union[typing.Type[typing.Any], typing.Callable[..., typing.Any]], - ... - ] = (), - **kwargs: typing.Any, - ) -> typing.Callable[[T], T]: - """Decorator that marks a function, class, or metaclass as providing - dataclass-like behavior. - - Example: - - from typing_extensions import dataclass_transform - - _T = TypeVar("_T") - - # Used on a decorator function - @dataclass_transform() - def create_model(cls: type[_T]) -> type[_T]: - ... - return cls - - @create_model - class CustomerModel: - id: int - name: str - - # Used on a base class - @dataclass_transform() - class ModelBase: ... - - class CustomerModel(ModelBase): - id: int - name: str - - # Used on a metaclass - @dataclass_transform() - class ModelMeta(type): ... - - class ModelBase(metaclass=ModelMeta): ... - - class CustomerModel(ModelBase): - id: int - name: str - - Each of the ``CustomerModel`` classes defined in this example will now - behave similarly to a dataclass created with the ``@dataclasses.dataclass`` - decorator. For example, the type checker will synthesize an ``__init__`` - method. - - The arguments to this decorator can be used to customize this behavior: - - ``eq_default`` indicates whether the ``eq`` parameter is assumed to be - True or False if it is omitted by the caller. - - ``order_default`` indicates whether the ``order`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``kw_only_default`` indicates whether the ``kw_only`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``frozen_default`` indicates whether the ``frozen`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``field_specifiers`` specifies a static list of supported classes - or functions that describe fields, similar to ``dataclasses.field()``. - - At runtime, this decorator records its arguments in the - ``__dataclass_transform__`` attribute on the decorated object. - - See PEP 681 for details. - - """ - def decorator(cls_or_fn): - cls_or_fn.__dataclass_transform__ = { - "eq_default": eq_default, - "order_default": order_default, - "kw_only_default": kw_only_default, - "frozen_default": frozen_default, - "field_specifiers": field_specifiers, - "kwargs": kwargs, - } - return cls_or_fn - return decorator - - -if hasattr(typing, "override"): # 3.12+ - override = typing.override -else: # <=3.11 - _F = typing.TypeVar("_F", bound=typing.Callable[..., typing.Any]) - - def override(arg: _F, /) -> _F: - """Indicate that a method is intended to override a method in a base class. - - Usage: - - class Base: - def method(self) -> None: - pass - - class Child(Base): - @override - def method(self) -> None: - super().method() - - When this decorator is applied to a method, the type checker will - validate that it overrides a method with the same name on a base class. - This helps prevent bugs that may occur when a base class is changed - without an equivalent change to a child class. - - There is no runtime checking of these properties. The decorator - sets the ``__override__`` attribute to ``True`` on the decorated object - to allow runtime introspection. - - See PEP 698 for details. - - """ - try: - arg.__override__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return arg - - -# Python 3.13.3+ contains a fix for the wrapped __new__ -# Breakpoint: https://github.com/python/cpython/pull/132160 -if sys.version_info >= (3, 13, 3): - deprecated = warnings.deprecated -else: - _T = typing.TypeVar("_T") - - class deprecated: - """Indicate that a class, function or overload is deprecated. - - When this decorator is applied to an object, the type checker - will generate a diagnostic on usage of the deprecated object. - - Usage: - - @deprecated("Use B instead") - class A: - pass - - @deprecated("Use g instead") - def f(): - pass - - @overload - @deprecated("int support is deprecated") - def g(x: int) -> int: ... - @overload - def g(x: str) -> int: ... - - The warning specified by *category* will be emitted at runtime - on use of deprecated objects. For functions, that happens on calls; - for classes, on instantiation and on creation of subclasses. - If the *category* is ``None``, no warning is emitted at runtime. - The *stacklevel* determines where the - warning is emitted. If it is ``1`` (the default), the warning - is emitted at the direct caller of the deprecated object; if it - is higher, it is emitted further up the stack. - Static type checker behavior is not affected by the *category* - and *stacklevel* arguments. - - The deprecation message passed to the decorator is saved in the - ``__deprecated__`` attribute on the decorated object. - If applied to an overload, the decorator - must be after the ``@overload`` decorator for the attribute to - exist on the overload as returned by ``get_overloads()``. - - See PEP 702 for details. - - """ - def __init__( - self, - message: str, - /, - *, - category: typing.Optional[typing.Type[Warning]] = DeprecationWarning, - stacklevel: int = 1, - ) -> None: - if not isinstance(message, str): - raise TypeError( - "Expected an object of type str for 'message', not " - f"{type(message).__name__!r}" - ) - self.message = message - self.category = category - self.stacklevel = stacklevel - - def __call__(self, arg: _T, /) -> _T: - # Make sure the inner functions created below don't - # retain a reference to self. - msg = self.message - category = self.category - stacklevel = self.stacklevel - if category is None: - arg.__deprecated__ = msg - return arg - elif isinstance(arg, type): - import functools - from types import MethodType - - original_new = arg.__new__ - - @functools.wraps(original_new) - def __new__(cls, /, *args, **kwargs): - if cls is arg: - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - if original_new is not object.__new__: - return original_new(cls, *args, **kwargs) - # Mirrors a similar check in object.__new__. - elif cls.__init__ is object.__init__ and (args or kwargs): - raise TypeError(f"{cls.__name__}() takes no arguments") - else: - return original_new(cls) - - arg.__new__ = staticmethod(__new__) - - original_init_subclass = arg.__init_subclass__ - # We need slightly different behavior if __init_subclass__ - # is a bound method (likely if it was implemented in Python) - if isinstance(original_init_subclass, MethodType): - original_init_subclass = original_init_subclass.__func__ - - @functools.wraps(original_init_subclass) - def __init_subclass__(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return original_init_subclass(*args, **kwargs) - - arg.__init_subclass__ = classmethod(__init_subclass__) - # Or otherwise, which likely means it's a builtin such as - # object's implementation of __init_subclass__. - else: - @functools.wraps(original_init_subclass) - def __init_subclass__(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return original_init_subclass(*args, **kwargs) - - arg.__init_subclass__ = __init_subclass__ - - arg.__deprecated__ = __new__.__deprecated__ = msg - __init_subclass__.__deprecated__ = msg - return arg - elif callable(arg): - import asyncio.coroutines - import functools - import inspect - - @functools.wraps(arg) - def wrapper(*args, **kwargs): - warnings.warn(msg, category=category, stacklevel=stacklevel + 1) - return arg(*args, **kwargs) - - if asyncio.coroutines.iscoroutinefunction(arg): - # Breakpoint: https://github.com/python/cpython/pull/99247 - if sys.version_info >= (3, 12): - wrapper = inspect.markcoroutinefunction(wrapper) - else: - wrapper._is_coroutine = asyncio.coroutines._is_coroutine - - arg.__deprecated__ = wrapper.__deprecated__ = msg - return wrapper - else: - raise TypeError( - "@deprecated decorator with non-None category must be applied to " - f"a class or callable, not {arg!r}" - ) - -# Breakpoint: https://github.com/python/cpython/pull/23702 -if sys.version_info < (3, 10): - def _is_param_expr(arg): - return arg is ... or isinstance( - arg, (tuple, list, ParamSpec, _ConcatenateGenericAlias) - ) -else: - def _is_param_expr(arg): - return arg is ... or isinstance( - arg, - ( - tuple, - list, - ParamSpec, - _ConcatenateGenericAlias, - typing._ConcatenateGenericAlias, - ), - ) - - -# We have to do some monkey patching to deal with the dual nature of -# Unpack/TypeVarTuple: -# - We want Unpack to be a kind of TypeVar so it gets accepted in -# Generic[Unpack[Ts]] -# - We want it to *not* be treated as a TypeVar for the purposes of -# counting generic parameters, so that when we subscript a generic, -# the runtime doesn't try to substitute the Unpack with the subscripted type. -if not hasattr(typing, "TypeVarTuple"): - def _check_generic(cls, parameters, elen=_marker): - """Check correct count for parameters of a generic cls (internal helper). - - This gives a nice error message in case of count mismatch. - """ - # If substituting a single ParamSpec with multiple arguments - # we do not check the count - if (inspect.isclass(cls) and issubclass(cls, typing.Generic) - and len(cls.__parameters__) == 1 - and isinstance(cls.__parameters__[0], ParamSpec) - and parameters - and not _is_param_expr(parameters[0]) - ): - # Generic modifies parameters variable, but here we cannot do this - return - - if not elen: - raise TypeError(f"{cls} is not a generic class") - if elen is _marker: - if not hasattr(cls, "__parameters__") or not cls.__parameters__: - raise TypeError(f"{cls} is not a generic class") - elen = len(cls.__parameters__) - alen = len(parameters) - if alen != elen: - expect_val = elen - if hasattr(cls, "__parameters__"): - parameters = [p for p in cls.__parameters__ if not _is_unpack(p)] - num_tv_tuples = sum(isinstance(p, TypeVarTuple) for p in parameters) - if (num_tv_tuples > 0) and (alen >= elen - num_tv_tuples): - return - - # deal with TypeVarLike defaults - # required TypeVarLikes cannot appear after a defaulted one. - if alen < elen: - # since we validate TypeVarLike default in _collect_type_vars - # or _collect_parameters we can safely check parameters[alen] - if ( - getattr(parameters[alen], '__default__', NoDefault) - is not NoDefault - ): - return - - num_default_tv = sum(getattr(p, '__default__', NoDefault) - is not NoDefault for p in parameters) - - elen -= num_default_tv - - expect_val = f"at least {elen}" - - # Breakpoint: https://github.com/python/cpython/pull/27515 - things = "arguments" if sys.version_info >= (3, 10) else "parameters" - raise TypeError(f"Too {'many' if alen > elen else 'few'} {things}" - f" for {cls}; actual {alen}, expected {expect_val}") -else: - # Python 3.11+ - - def _check_generic(cls, parameters, elen): - """Check correct count for parameters of a generic cls (internal helper). - - This gives a nice error message in case of count mismatch. - """ - if not elen: - raise TypeError(f"{cls} is not a generic class") - alen = len(parameters) - if alen != elen: - expect_val = elen - if hasattr(cls, "__parameters__"): - parameters = [p for p in cls.__parameters__ if not _is_unpack(p)] - - # deal with TypeVarLike defaults - # required TypeVarLikes cannot appear after a defaulted one. - if alen < elen: - # since we validate TypeVarLike default in _collect_type_vars - # or _collect_parameters we can safely check parameters[alen] - if ( - getattr(parameters[alen], '__default__', NoDefault) - is not NoDefault - ): - return - - num_default_tv = sum(getattr(p, '__default__', NoDefault) - is not NoDefault for p in parameters) - - elen -= num_default_tv - - expect_val = f"at least {elen}" - - raise TypeError(f"Too {'many' if alen > elen else 'few'} arguments" - f" for {cls}; actual {alen}, expected {expect_val}") - -if not _PEP_696_IMPLEMENTED: - typing._check_generic = _check_generic - - -def _has_generic_or_protocol_as_origin() -> bool: - try: - frame = sys._getframe(2) - # - Catch AttributeError: not all Python implementations have sys._getframe() - # - Catch ValueError: maybe we're called from an unexpected module - # and the call stack isn't deep enough - except (AttributeError, ValueError): - return False # err on the side of leniency - else: - # If we somehow get invoked from outside typing.py, - # also err on the side of leniency - if frame.f_globals.get("__name__") != "typing": - return False - origin = frame.f_locals.get("origin") - # Cannot use "in" because origin may be an object with a buggy __eq__ that - # throws an error. - return origin is typing.Generic or origin is Protocol or origin is typing.Protocol - - -_TYPEVARTUPLE_TYPES = {TypeVarTuple, getattr(typing, "TypeVarTuple", None)} - - -def _is_unpacked_typevartuple(x) -> bool: - if get_origin(x) is not Unpack: - return False - args = get_args(x) - return ( - bool(args) - and len(args) == 1 - and type(args[0]) in _TYPEVARTUPLE_TYPES - ) - - -# Python 3.11+ _collect_type_vars was renamed to _collect_parameters -if hasattr(typing, '_collect_type_vars'): - def _collect_type_vars(types, typevar_types=None): - """Collect all type variable contained in types in order of - first appearance (lexicographic order). For example:: - - _collect_type_vars((T, List[S, T])) == (T, S) - """ - if typevar_types is None: - typevar_types = typing.TypeVar - tvars = [] - - # A required TypeVarLike cannot appear after a TypeVarLike with a default - # if it was a direct call to `Generic[]` or `Protocol[]` - enforce_default_ordering = _has_generic_or_protocol_as_origin() - default_encountered = False - - # Also, a TypeVarLike with a default cannot appear after a TypeVarTuple - type_var_tuple_encountered = False - - for t in types: - if _is_unpacked_typevartuple(t): - type_var_tuple_encountered = True - elif ( - isinstance(t, typevar_types) and not isinstance(t, _UnpackAlias) - and t not in tvars - ): - if enforce_default_ordering: - has_default = getattr(t, '__default__', NoDefault) is not NoDefault - if has_default: - if type_var_tuple_encountered: - raise TypeError('Type parameter with a default' - ' follows TypeVarTuple') - default_encountered = True - elif default_encountered: - raise TypeError(f'Type parameter {t!r} without a default' - ' follows type parameter with a default') - - tvars.append(t) - if _should_collect_from_parameters(t): - tvars.extend([t for t in t.__parameters__ if t not in tvars]) - elif isinstance(t, tuple): - # Collect nested type_vars - # tuple wrapped by _prepare_paramspec_params(cls, params) - for x in t: - for collected in _collect_type_vars([x]): - if collected not in tvars: - tvars.append(collected) - return tuple(tvars) - - typing._collect_type_vars = _collect_type_vars -else: - def _collect_parameters(args): - """Collect all type variables and parameter specifications in args - in order of first appearance (lexicographic order). - - For example:: - - assert _collect_parameters((T, Callable[P, T])) == (T, P) - """ - parameters = [] - - # A required TypeVarLike cannot appear after a TypeVarLike with default - # if it was a direct call to `Generic[]` or `Protocol[]` - enforce_default_ordering = _has_generic_or_protocol_as_origin() - default_encountered = False - - # Also, a TypeVarLike with a default cannot appear after a TypeVarTuple - type_var_tuple_encountered = False - - for t in args: - if isinstance(t, type): - # We don't want __parameters__ descriptor of a bare Python class. - pass - elif isinstance(t, tuple): - # `t` might be a tuple, when `ParamSpec` is substituted with - # `[T, int]`, or `[int, *Ts]`, etc. - for x in t: - for collected in _collect_parameters([x]): - if collected not in parameters: - parameters.append(collected) - elif hasattr(t, '__typing_subst__'): - if t not in parameters: - if enforce_default_ordering: - has_default = ( - getattr(t, '__default__', NoDefault) is not NoDefault - ) - - if type_var_tuple_encountered and has_default: - raise TypeError('Type parameter with a default' - ' follows TypeVarTuple') - - if has_default: - default_encountered = True - elif default_encountered: - raise TypeError(f'Type parameter {t!r} without a default' - ' follows type parameter with a default') - - parameters.append(t) - else: - if _is_unpacked_typevartuple(t): - type_var_tuple_encountered = True - for x in getattr(t, '__parameters__', ()): - if x not in parameters: - parameters.append(x) - - return tuple(parameters) - - if not _PEP_696_IMPLEMENTED: - typing._collect_parameters = _collect_parameters - -# Backport typing.NamedTuple as it exists in Python 3.13. -# In 3.11, the ability to define generic `NamedTuple`s was supported. -# This was explicitly disallowed in 3.9-3.10, and only half-worked in <=3.8. -# On 3.12, we added __orig_bases__ to call-based NamedTuples -# On 3.13, we deprecated kwargs-based NamedTuples -# Breakpoint: https://github.com/python/cpython/pull/105609 -if sys.version_info >= (3, 13): - NamedTuple = typing.NamedTuple -else: - def _make_nmtuple(name, types, module, defaults=()): - fields = [n for n, t in types] - annotations = {n: typing._type_check(t, f"field {n} annotation must be a type") - for n, t in types} - nm_tpl = collections.namedtuple(name, fields, - defaults=defaults, module=module) - nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = annotations - return nm_tpl - - _prohibited_namedtuple_fields = typing._prohibited - _special_namedtuple_fields = frozenset({'__module__', '__name__', '__annotations__'}) - - class _NamedTupleMeta(type): - def __new__(cls, typename, bases, ns): - assert _NamedTuple in bases - for base in bases: - if base is not _NamedTuple and base is not typing.Generic: - raise TypeError( - 'can only inherit from a NamedTuple type and Generic') - bases = tuple(tuple if base is _NamedTuple else base for base in bases) - if "__annotations__" in ns: - types = ns["__annotations__"] - elif "__annotate__" in ns: - # TODO: Use inspect.VALUE here, and make the annotations lazily evaluated - types = ns["__annotate__"](1) - else: - types = {} - default_names = [] - for field_name in types: - if field_name in ns: - default_names.append(field_name) - elif default_names: - raise TypeError(f"Non-default namedtuple field {field_name} " - f"cannot follow default field" - f"{'s' if len(default_names) > 1 else ''} " - f"{', '.join(default_names)}") - nm_tpl = _make_nmtuple( - typename, types.items(), - defaults=[ns[n] for n in default_names], - module=ns['__module__'] - ) - nm_tpl.__bases__ = bases - if typing.Generic in bases: - if hasattr(typing, '_generic_class_getitem'): # 3.12+ - nm_tpl.__class_getitem__ = classmethod(typing._generic_class_getitem) - else: - class_getitem = typing.Generic.__class_getitem__.__func__ - nm_tpl.__class_getitem__ = classmethod(class_getitem) - # update from user namespace without overriding special namedtuple attributes - for key, val in ns.items(): - if key in _prohibited_namedtuple_fields: - raise AttributeError("Cannot overwrite NamedTuple attribute " + key) - elif key not in _special_namedtuple_fields: - if key not in nm_tpl._fields: - setattr(nm_tpl, key, ns[key]) - try: - set_name = type(val).__set_name__ - except AttributeError: - pass - else: - try: - set_name(val, nm_tpl, key) - except BaseException as e: - msg = ( - f"Error calling __set_name__ on {type(val).__name__!r} " - f"instance {key!r} in {typename!r}" - ) - # BaseException.add_note() existed on py311, - # but the __set_name__ machinery didn't start - # using add_note() until py312. - # Making sure exceptions are raised in the same way - # as in "normal" classes seems most important here. - # Breakpoint: https://github.com/python/cpython/pull/95915 - if sys.version_info >= (3, 12): - e.add_note(msg) - raise - else: - raise RuntimeError(msg) from e - - if typing.Generic in bases: - nm_tpl.__init_subclass__() - return nm_tpl - - _NamedTuple = type.__new__(_NamedTupleMeta, 'NamedTuple', (), {}) - - def _namedtuple_mro_entries(bases): - assert NamedTuple in bases - return (_NamedTuple,) - - def NamedTuple(typename, fields=_marker, /, **kwargs): - """Typed version of namedtuple. - - Usage:: - - class Employee(NamedTuple): - name: str - id: int - - This is equivalent to:: - - Employee = collections.namedtuple('Employee', ['name', 'id']) - - The resulting class has an extra __annotations__ attribute, giving a - dict that maps field names to types. (The field names are also in - the _fields attribute, which is part of the namedtuple API.) - An alternative equivalent functional syntax is also accepted:: - - Employee = NamedTuple('Employee', [('name', str), ('id', int)]) - """ - if fields is _marker: - if kwargs: - deprecated_thing = "Creating NamedTuple classes using keyword arguments" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "Use the class-based or functional syntax instead." - ) - else: - deprecated_thing = "Failing to pass a value for the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif fields is None: - if kwargs: - raise TypeError( - "Cannot pass `None` as the 'fields' parameter " - "and also specify fields using keyword arguments" - ) - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif kwargs: - raise TypeError("Either list of fields or keywords" - " can be provided to NamedTuple, not both") - if fields is _marker or fields is None: - warnings.warn( - deprecation_msg.format(name=deprecated_thing, remove="3.15"), - DeprecationWarning, - stacklevel=2, - ) - fields = kwargs.items() - nt = _make_nmtuple(typename, fields, module=_caller()) - nt.__orig_bases__ = (NamedTuple,) - return nt - - NamedTuple.__mro_entries__ = _namedtuple_mro_entries - - -if hasattr(collections.abc, "Buffer"): - Buffer = collections.abc.Buffer -else: - class Buffer(abc.ABC): # noqa: B024 - """Base class for classes that implement the buffer protocol. - - The buffer protocol allows Python objects to expose a low-level - memory buffer interface. Before Python 3.12, it is not possible - to implement the buffer protocol in pure Python code, or even - to check whether a class implements the buffer protocol. In - Python 3.12 and higher, the ``__buffer__`` method allows access - to the buffer protocol from Python code, and the - ``collections.abc.Buffer`` ABC allows checking whether a class - implements the buffer protocol. - - To indicate support for the buffer protocol in earlier versions, - inherit from this ABC, either in a stub file or at runtime, - or use ABC registration. This ABC provides no methods, because - there is no Python-accessible methods shared by pre-3.12 buffer - classes. It is useful primarily for static checks. - - """ - - # As a courtesy, register the most common stdlib buffer classes. - Buffer.register(memoryview) - Buffer.register(bytearray) - Buffer.register(bytes) - - -# Backport of types.get_original_bases, available on 3.12+ in CPython -if hasattr(_types, "get_original_bases"): - get_original_bases = _types.get_original_bases -else: - def get_original_bases(cls, /): - """Return the class's "original" bases prior to modification by `__mro_entries__`. - - Examples:: - - from typing import TypeVar, Generic - from typing_extensions import NamedTuple, TypedDict - - T = TypeVar("T") - class Foo(Generic[T]): ... - class Bar(Foo[int], float): ... - class Baz(list[str]): ... - Eggs = NamedTuple("Eggs", [("a", int), ("b", str)]) - Spam = TypedDict("Spam", {"a": int, "b": str}) - - assert get_original_bases(Bar) == (Foo[int], float) - assert get_original_bases(Baz) == (list[str],) - assert get_original_bases(Eggs) == (NamedTuple,) - assert get_original_bases(Spam) == (TypedDict,) - assert get_original_bases(int) == (object,) - """ - try: - return cls.__dict__.get("__orig_bases__", cls.__bases__) - except AttributeError: - raise TypeError( - f'Expected an instance of type, not {type(cls).__name__!r}' - ) from None - - -# NewType is a class on Python 3.10+, making it pickleable -# The error message for subclassing instances of NewType was improved on 3.11+ -# Breakpoint: https://github.com/python/cpython/pull/30268 -if sys.version_info >= (3, 11): - NewType = typing.NewType -else: - class NewType: - """NewType creates simple unique types with almost zero - runtime overhead. NewType(name, tp) is considered a subtype of tp - by static type checkers. At runtime, NewType(name, tp) returns - a dummy callable that simply returns its argument. Usage:: - UserId = NewType('UserId', int) - def name_by_id(user_id: UserId) -> str: - ... - UserId('user') # Fails type check - name_by_id(42) # Fails type check - name_by_id(UserId(42)) # OK - num = UserId(5) + 1 # type: int - """ - - def __call__(self, obj, /): - return obj - - def __init__(self, name, tp): - self.__qualname__ = name - if '.' in name: - name = name.rpartition('.')[-1] - self.__name__ = name - self.__supertype__ = tp - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - - def __mro_entries__(self, bases): - # We defined __mro_entries__ to get a better error message - # if a user attempts to subclass a NewType instance. bpo-46170 - supercls_name = self.__name__ - - class Dummy: - def __init_subclass__(cls): - subcls_name = cls.__name__ - raise TypeError( - f"Cannot subclass an instance of NewType. " - f"Perhaps you were looking for: " - f"`{subcls_name} = NewType({subcls_name!r}, {supercls_name})`" - ) - - return (Dummy,) - - def __repr__(self): - return f'{self.__module__}.{self.__qualname__}' - - def __reduce__(self): - return self.__qualname__ - - # Breakpoint: https://github.com/python/cpython/pull/21515 - if sys.version_info >= (3, 10): - # PEP 604 methods - # It doesn't make sense to have these methods on Python <3.10 - - def __or__(self, other): - return typing.Union[self, other] - - def __ror__(self, other): - return typing.Union[other, self] - - -# Breakpoint: https://github.com/python/cpython/pull/124795 -if sys.version_info >= (3, 14): - TypeAliasType = typing.TypeAliasType -# <=3.13 -else: - # Breakpoint: https://github.com/python/cpython/pull/103764 - if sys.version_info >= (3, 12): - # 3.12-3.13 - def _is_unionable(obj): - """Corresponds to is_unionable() in unionobject.c in CPython.""" - return obj is None or isinstance(obj, ( - type, - _types.GenericAlias, - _types.UnionType, - typing.TypeAliasType, - TypeAliasType, - )) - else: - # <=3.11 - def _is_unionable(obj): - """Corresponds to is_unionable() in unionobject.c in CPython.""" - return obj is None or isinstance(obj, ( - type, - _types.GenericAlias, - _types.UnionType, - TypeAliasType, - )) - - if sys.version_info < (3, 10): - # Copied and pasted from https://github.com/python/cpython/blob/986a4e1b6fcae7fe7a1d0a26aea446107dd58dd2/Objects/genericaliasobject.c#L568-L582, - # so that we emulate the behaviour of `types.GenericAlias` - # on the latest versions of CPython - _ATTRIBUTE_DELEGATION_EXCLUSIONS = frozenset({ - "__class__", - "__bases__", - "__origin__", - "__args__", - "__unpacked__", - "__parameters__", - "__typing_unpacked_tuple_args__", - "__mro_entries__", - "__reduce_ex__", - "__reduce__", - "__copy__", - "__deepcopy__", - }) - - class _TypeAliasGenericAlias(typing._GenericAlias, _root=True): - def __getattr__(self, attr): - if attr in _ATTRIBUTE_DELEGATION_EXCLUSIONS: - return object.__getattr__(self, attr) - return getattr(self.__origin__, attr) - - - class TypeAliasType: - """Create named, parameterized type aliases. - - This provides a backport of the new `type` statement in Python 3.12: - - type ListOrSet[T] = list[T] | set[T] - - is equivalent to: - - T = TypeVar("T") - ListOrSet = TypeAliasType("ListOrSet", list[T] | set[T], type_params=(T,)) - - The name ListOrSet can then be used as an alias for the type it refers to. - - The type_params argument should contain all the type parameters used - in the value of the type alias. If the alias is not generic, this - argument is omitted. - - Static type checkers should only support type aliases declared using - TypeAliasType that follow these rules: - - - The first argument (the name) must be a string literal. - - The TypeAliasType instance must be immediately assigned to a variable - of the same name. (For example, 'X = TypeAliasType("Y", int)' is invalid, - as is 'X, Y = TypeAliasType("X", int), TypeAliasType("Y", int)'). - - """ - - def __init__(self, name: str, value, *, type_params=()): - if not isinstance(name, str): - raise TypeError("TypeAliasType name must be a string") - if not isinstance(type_params, tuple): - raise TypeError("type_params must be a tuple") - self.__value__ = value - self.__type_params__ = type_params - - default_value_encountered = False - parameters = [] - for type_param in type_params: - if ( - not isinstance(type_param, (TypeVar, TypeVarTuple, ParamSpec)) - # <=3.11 - # Unpack Backport passes isinstance(type_param, TypeVar) - or _is_unpack(type_param) - ): - raise TypeError(f"Expected a type param, got {type_param!r}") - has_default = ( - getattr(type_param, '__default__', NoDefault) is not NoDefault - ) - if default_value_encountered and not has_default: - raise TypeError(f"non-default type parameter '{type_param!r}'" - " follows default type parameter") - if has_default: - default_value_encountered = True - if isinstance(type_param, TypeVarTuple): - parameters.extend(type_param) - else: - parameters.append(type_param) - self.__parameters__ = tuple(parameters) - def_mod = _caller() - if def_mod != 'typing_extensions': - self.__module__ = def_mod - # Setting this attribute closes the TypeAliasType from further modification - self.__name__ = name - - def __setattr__(self, name: str, value: object, /) -> None: - if hasattr(self, "__name__"): - self._raise_attribute_error(name) - super().__setattr__(name, value) - - def __delattr__(self, name: str, /) -> Never: - self._raise_attribute_error(name) - - def _raise_attribute_error(self, name: str) -> Never: - # Match the Python 3.12 error messages exactly - if name == "__name__": - raise AttributeError("readonly attribute") - elif name in {"__value__", "__type_params__", "__parameters__", "__module__"}: - raise AttributeError( - f"attribute '{name}' of 'typing.TypeAliasType' objects " - "is not writable" - ) - else: - raise AttributeError( - f"'typing.TypeAliasType' object has no attribute '{name}'" - ) - - def __repr__(self) -> str: - return self.__name__ - - if sys.version_info < (3, 11): - def _check_single_param(self, param, recursion=0): - # Allow [], [int], [int, str], [int, ...], [int, T] - if param is ...: - return ... - if param is None: - return None - # Note in <= 3.9 _ConcatenateGenericAlias inherits from list - if isinstance(param, list) and recursion == 0: - return [self._check_single_param(arg, recursion+1) - for arg in param] - return typing._type_check( - param, f'Subscripting {self.__name__} requires a type.' - ) - - def _check_parameters(self, parameters): - if sys.version_info < (3, 11): - return tuple( - self._check_single_param(item) - for item in parameters - ) - return tuple(typing._type_check( - item, f'Subscripting {self.__name__} requires a type.' - ) - for item in parameters - ) - - def __getitem__(self, parameters): - if not self.__type_params__: - raise TypeError("Only generic type aliases are subscriptable") - if not isinstance(parameters, tuple): - parameters = (parameters,) - # Using 3.9 here will create problems with Concatenate - if sys.version_info >= (3, 10): - return _types.GenericAlias(self, parameters) - type_vars = _collect_type_vars(parameters) - parameters = self._check_parameters(parameters) - alias = _TypeAliasGenericAlias(self, parameters) - # alias.__parameters__ is not complete if Concatenate is present - # as it is converted to a list from which no parameters are extracted. - if alias.__parameters__ != type_vars: - alias.__parameters__ = type_vars - return alias - - def __reduce__(self): - return self.__name__ - - def __init_subclass__(cls, *args, **kwargs): - raise TypeError( - "type 'typing_extensions.TypeAliasType' is not an acceptable base type" - ) - - # The presence of this method convinces typing._type_check - # that TypeAliasTypes are types. - def __call__(self): - raise TypeError("Type alias is not callable") - - # Breakpoint: https://github.com/python/cpython/pull/21515 - if sys.version_info >= (3, 10): - def __or__(self, right): - # For forward compatibility with 3.12, reject Unions - # that are not accepted by the built-in Union. - if not _is_unionable(right): - return NotImplemented - return typing.Union[self, right] - - def __ror__(self, left): - if not _is_unionable(left): - return NotImplemented - return typing.Union[left, self] - - -if hasattr(typing, "is_protocol"): - is_protocol = typing.is_protocol - get_protocol_members = typing.get_protocol_members -else: - def is_protocol(tp: type, /) -> bool: - """Return True if the given type is a Protocol. - - Example:: - - >>> from typing_extensions import Protocol, is_protocol - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> is_protocol(P) - True - >>> is_protocol(int) - False - """ - return ( - isinstance(tp, type) - and getattr(tp, '_is_protocol', False) - and tp is not Protocol - and tp is not typing.Protocol - ) - - def get_protocol_members(tp: type, /) -> typing.FrozenSet[str]: - """Return the set of members defined in a Protocol. - - Example:: - - >>> from typing_extensions import Protocol, get_protocol_members - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> get_protocol_members(P) - frozenset({'a', 'b'}) - - Raise a TypeError for arguments that are not Protocols. - """ - if not is_protocol(tp): - raise TypeError(f'{tp!r} is not a Protocol') - if hasattr(tp, '__protocol_attrs__'): - return frozenset(tp.__protocol_attrs__) - return frozenset(_get_protocol_attrs(tp)) - - -if hasattr(typing, "Doc"): - Doc = typing.Doc -else: - class Doc: - """Define the documentation of a type annotation using ``Annotated``, to be - used in class attributes, function and method parameters, return values, - and variables. - - The value should be a positional-only string literal to allow static tools - like editors and documentation generators to use it. - - This complements docstrings. - - The string value passed is available in the attribute ``documentation``. - - Example:: - - >>> from typing_extensions import Annotated, Doc - >>> def hi(to: Annotated[str, Doc("Who to say hi to")]) -> None: ... - """ - def __init__(self, documentation: str, /) -> None: - self.documentation = documentation - - def __repr__(self) -> str: - return f"Doc({self.documentation!r})" - - def __hash__(self) -> int: - return hash(self.documentation) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Doc): - return NotImplemented - return self.documentation == other.documentation - - -_CapsuleType = getattr(_types, "CapsuleType", None) - -if _CapsuleType is None: - try: - import _socket - except ImportError: - pass - else: - _CAPI = getattr(_socket, "CAPI", None) - if _CAPI is not None: - _CapsuleType = type(_CAPI) - -if _CapsuleType is not None: - CapsuleType = _CapsuleType - __all__.append("CapsuleType") - - -if sys.version_info >= (3, 14): - from annotationlib import Format, get_annotations -else: - # Available since Python 3.14.0a3 - # PR: https://github.com/python/cpython/pull/124415 - class Format(enum.IntEnum): - VALUE = 1 - VALUE_WITH_FAKE_GLOBALS = 2 - FORWARDREF = 3 - STRING = 4 - - # Available since Python 3.14.0a1 - # PR: https://github.com/python/cpython/pull/119891 - def get_annotations(obj, *, globals=None, locals=None, eval_str=False, - format=Format.VALUE): - """Compute the annotations dict for an object. - - obj may be a callable, class, or module. - Passing in an object of any other type raises TypeError. - - Returns a dict. get_annotations() returns a new dict every time - it's called; calling it twice on the same object will return two - different but equivalent dicts. - - This is a backport of `inspect.get_annotations`, which has been - in the standard library since Python 3.10. See the standard library - documentation for more: - - https://docs.python.org/3/library/inspect.html#inspect.get_annotations - - This backport adds the *format* argument introduced by PEP 649. The - three formats supported are: - * VALUE: the annotations are returned as-is. This is the default and - it is compatible with the behavior on previous Python versions. - * FORWARDREF: return annotations as-is if possible, but replace any - undefined names with ForwardRef objects. The implementation proposed by - PEP 649 relies on language changes that cannot be backported; the - typing-extensions implementation simply returns the same result as VALUE. - * STRING: return annotations as strings, in a format close to the original - source. Again, this behavior cannot be replicated directly in a backport. - As an approximation, typing-extensions retrieves the annotations under - VALUE semantics and then stringifies them. - - The purpose of this backport is to allow users who would like to use - FORWARDREF or STRING semantics once PEP 649 is implemented, but who also - want to support earlier Python versions, to simply write: - - typing_extensions.get_annotations(obj, format=Format.FORWARDREF) - - """ - format = Format(format) - if format is Format.VALUE_WITH_FAKE_GLOBALS: - raise ValueError( - "The VALUE_WITH_FAKE_GLOBALS format is for internal use only" - ) - - if eval_str and format is not Format.VALUE: - raise ValueError("eval_str=True is only supported with format=Format.VALUE") - - if isinstance(obj, type): - # class - obj_dict = getattr(obj, '__dict__', None) - if obj_dict and hasattr(obj_dict, 'get'): - ann = obj_dict.get('__annotations__', None) - if isinstance(ann, _types.GetSetDescriptorType): - ann = None - else: - ann = None - - obj_globals = None - module_name = getattr(obj, '__module__', None) - if module_name: - module = sys.modules.get(module_name, None) - if module: - obj_globals = getattr(module, '__dict__', None) - obj_locals = dict(vars(obj)) - unwrap = obj - elif isinstance(obj, _types.ModuleType): - # module - ann = getattr(obj, '__annotations__', None) - obj_globals = obj.__dict__ - obj_locals = None - unwrap = None - elif callable(obj): - # this includes types.Function, types.BuiltinFunctionType, - # types.BuiltinMethodType, functools.partial, functools.singledispatch, - # "class funclike" from Lib/test/test_inspect... on and on it goes. - ann = getattr(obj, '__annotations__', None) - obj_globals = getattr(obj, '__globals__', None) - obj_locals = None - unwrap = obj - elif hasattr(obj, '__annotations__'): - ann = obj.__annotations__ - obj_globals = obj_locals = unwrap = None - else: - raise TypeError(f"{obj!r} is not a module, class, or callable.") - - if ann is None: - return {} - - if not isinstance(ann, dict): - raise ValueError(f"{obj!r}.__annotations__ is neither a dict nor None") - - if not ann: - return {} - - if not eval_str: - if format is Format.STRING: - return { - key: value if isinstance(value, str) else typing._type_repr(value) - for key, value in ann.items() - } - return dict(ann) - - if unwrap is not None: - while True: - if hasattr(unwrap, '__wrapped__'): - unwrap = unwrap.__wrapped__ - continue - if isinstance(unwrap, functools.partial): - unwrap = unwrap.func - continue - break - if hasattr(unwrap, "__globals__"): - obj_globals = unwrap.__globals__ - - if globals is None: - globals = obj_globals - if locals is None: - locals = obj_locals or {} - - # "Inject" type parameters into the local namespace - # (unless they are shadowed by assignments *in* the local namespace), - # as a way of emulating annotation scopes when calling `eval()` - if type_params := getattr(obj, "__type_params__", ()): - locals = {param.__name__: param for param in type_params} | locals - - return_value = {key: - value if not isinstance(value, str) else eval(value, globals, locals) - for key, value in ann.items() } - return return_value - - -if hasattr(typing, "evaluate_forward_ref"): - evaluate_forward_ref = typing.evaluate_forward_ref -else: - # Implements annotationlib.ForwardRef.evaluate - def _eval_with_owner( - forward_ref, *, owner=None, globals=None, locals=None, type_params=None - ): - if forward_ref.__forward_evaluated__: - return forward_ref.__forward_value__ - if getattr(forward_ref, "__cell__", None) is not None: - try: - value = forward_ref.__cell__.cell_contents - except ValueError: - pass - else: - forward_ref.__forward_evaluated__ = True - forward_ref.__forward_value__ = value - return value - if owner is None: - owner = getattr(forward_ref, "__owner__", None) - - if ( - globals is None - and getattr(forward_ref, "__forward_module__", None) is not None - ): - globals = getattr( - sys.modules.get(forward_ref.__forward_module__, None), "__dict__", None - ) - if globals is None: - globals = getattr(forward_ref, "__globals__", None) - if globals is None: - if isinstance(owner, type): - module_name = getattr(owner, "__module__", None) - if module_name: - module = sys.modules.get(module_name, None) - if module: - globals = getattr(module, "__dict__", None) - elif isinstance(owner, _types.ModuleType): - globals = getattr(owner, "__dict__", None) - elif callable(owner): - globals = getattr(owner, "__globals__", None) - - # If we pass None to eval() below, the globals of this module are used. - if globals is None: - globals = {} - - if locals is None: - locals = {} - if isinstance(owner, type): - locals.update(vars(owner)) - - if type_params is None and owner is not None: - # "Inject" type parameters into the local namespace - # (unless they are shadowed by assignments *in* the local namespace), - # as a way of emulating annotation scopes when calling `eval()` - type_params = getattr(owner, "__type_params__", None) - - # Type parameters exist in their own scope, which is logically - # between the locals and the globals. We simulate this by adding - # them to the globals. - if type_params is not None: - globals = dict(globals) - for param in type_params: - globals[param.__name__] = param - - arg = forward_ref.__forward_arg__ - if arg.isidentifier() and not keyword.iskeyword(arg): - if arg in locals: - value = locals[arg] - elif arg in globals: - value = globals[arg] - elif hasattr(builtins, arg): - return getattr(builtins, arg) - else: - raise NameError(arg) - else: - code = forward_ref.__forward_code__ - value = eval(code, globals, locals) - forward_ref.__forward_evaluated__ = True - forward_ref.__forward_value__ = value - return value - - def evaluate_forward_ref( - forward_ref, - *, - owner=None, - globals=None, - locals=None, - type_params=None, - format=None, - _recursive_guard=frozenset(), - ): - """Evaluate a forward reference as a type hint. - - This is similar to calling the ForwardRef.evaluate() method, - but unlike that method, evaluate_forward_ref() also: - - * Recursively evaluates forward references nested within the type hint. - * Rejects certain objects that are not valid type hints. - * Replaces type hints that evaluate to None with types.NoneType. - * Supports the *FORWARDREF* and *STRING* formats. - - *forward_ref* must be an instance of ForwardRef. *owner*, if given, - should be the object that holds the annotations that the forward reference - derived from, such as a module, class object, or function. It is used to - infer the namespaces to use for looking up names. *globals* and *locals* - can also be explicitly given to provide the global and local namespaces. - *type_params* is a tuple of type parameters that are in scope when - evaluating the forward reference. This parameter must be provided (though - it may be an empty tuple) if *owner* is not given and the forward reference - does not already have an owner set. *format* specifies the format of the - annotation and is a member of the annotationlib.Format enum. - - """ - if format == Format.STRING: - return forward_ref.__forward_arg__ - if forward_ref.__forward_arg__ in _recursive_guard: - return forward_ref - - # Evaluate the forward reference - try: - value = _eval_with_owner( - forward_ref, - owner=owner, - globals=globals, - locals=locals, - type_params=type_params, - ) - except NameError: - if format == Format.FORWARDREF: - return forward_ref - else: - raise - - if isinstance(value, str): - value = ForwardRef(value) - - # Recursively evaluate the type - if isinstance(value, ForwardRef): - if getattr(value, "__forward_module__", True) is not None: - globals = None - return evaluate_forward_ref( - value, - globals=globals, - locals=locals, - type_params=type_params, owner=owner, - _recursive_guard=_recursive_guard, format=format - ) - if sys.version_info < (3, 12, 5) and type_params: - # Make use of type_params - locals = dict(locals) if locals else {} - for tvar in type_params: - if tvar.__name__ not in locals: # lets not overwrite something present - locals[tvar.__name__] = tvar - if sys.version_info < (3, 12, 5): - return typing._eval_type( - value, - globals, - locals, - recursive_guard=_recursive_guard | {forward_ref.__forward_arg__}, - ) - else: - return typing._eval_type( - value, - globals, - locals, - type_params, - recursive_guard=_recursive_guard | {forward_ref.__forward_arg__}, - ) - - -class Sentinel: - """Create a unique sentinel object. - - *name* should be the name of the variable to which the return value shall be assigned. - - *repr*, if supplied, will be used for the repr of the sentinel object. - If not provided, "" will be used. - """ - - def __init__( - self, - name: str, - repr: typing.Optional[str] = None, - ): - self._name = name - self._repr = repr if repr is not None else f'<{name}>' - - def __repr__(self): - return self._repr - - if sys.version_info < (3, 11): - # The presence of this method convinces typing._type_check - # that Sentinels are types. - def __call__(self, *args, **kwargs): - raise TypeError(f"{type(self).__name__!r} object is not callable") - - # Breakpoint: https://github.com/python/cpython/pull/21515 - if sys.version_info >= (3, 10): - def __or__(self, other): - return typing.Union[self, other] - - def __ror__(self, other): - return typing.Union[other, self] - - def __getstate__(self): - raise TypeError(f"Cannot pickle {type(self).__name__!r} object") - - -if sys.version_info >= (3, 14, 0, "beta"): - type_repr = annotationlib.type_repr -else: - def type_repr(value): - """Convert a Python value to a format suitable for use with the STRING format. - - This is intended as a helper for tools that support the STRING format but do - not have access to the code that originally produced the annotations. It uses - repr() for most objects. - - """ - if isinstance(value, (type, _types.FunctionType, _types.BuiltinFunctionType)): - if value.__module__ == "builtins": - return value.__qualname__ - return f"{value.__module__}.{value.__qualname__}" - if value is ...: - return "..." - return repr(value) - - -# Aliases for items that are in typing in all supported versions. -# We use hasattr() checks so this library will continue to import on -# future versions of Python that may remove these names. -_typing_names = [ - "AbstractSet", - "AnyStr", - "BinaryIO", - "Callable", - "Collection", - "Container", - "Dict", - "FrozenSet", - "Hashable", - "IO", - "ItemsView", - "Iterable", - "Iterator", - "KeysView", - "List", - "Mapping", - "MappingView", - "Match", - "MutableMapping", - "MutableSequence", - "MutableSet", - "Optional", - "Pattern", - "Reversible", - "Sequence", - "Set", - "Sized", - "TextIO", - "Tuple", - "Union", - "ValuesView", - "cast", - "no_type_check", - "no_type_check_decorator", - # This is private, but it was defined by typing_extensions for a long time - # and some users rely on it. - "_AnnotatedAlias", -] -globals().update( - {name: getattr(typing, name) for name in _typing_names if hasattr(typing, name)} -) -# These are defined unconditionally because they are used in -# typing-extensions itself. -Generic = typing.Generic -ForwardRef = typing.ForwardRef -Annotated = typing.Annotated diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/LICENSE b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/LICENSE deleted file mode 100644 index ccbb756..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017-2019 Ivan Levkivskyi - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/METADATA b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/METADATA deleted file mode 100644 index cb83aec..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/METADATA +++ /dev/null @@ -1,35 +0,0 @@ -Metadata-Version: 2.1 -Name: typing-inspect -Version: 0.9.0 -Summary: Runtime inspection utilities for typing module. -Home-page: https://github.com/ilevkivskyi/typing_inspect -Author: Ivan Levkivskyi -Author-email: levkivskyi@gmail.com -License: MIT -Keywords: typing function annotations type hints hinting checking checker typehints typehinting typechecking inspect reflection introspection -Classifier: Development Status :: 3 - Alpha -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Topic :: Software Development -License-File: LICENSE -Requires-Dist: mypy-extensions (>=0.3.0) -Requires-Dist: typing-extensions (>=3.7.4) -Requires-Dist: typing (>=3.7.4) ; python_version < "3.5" - -Typing Inspect -============== - -The "typing_inspect" module defines experimental API for runtime -inspection of types defined in the standard "typing" module. diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/RECORD b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/RECORD deleted file mode 100644 index 0309f80..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/RECORD +++ /dev/null @@ -1,8 +0,0 @@ -__pycache__/typing_inspect.cpython-312.pyc,, -typing_inspect-0.9.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -typing_inspect-0.9.0.dist-info/LICENSE,sha256=-dNWfQDKIzf3afsoxVPMWQIT7O_tTtWZEQwQ3tLqARc,1087 -typing_inspect-0.9.0.dist-info/METADATA,sha256=904AWjEB-RHrlBGJ8YGqXsC-dfOoAN3iufsQl6VqV9k,1468 -typing_inspect-0.9.0.dist-info/RECORD,, -typing_inspect-0.9.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 -typing_inspect-0.9.0.dist-info/top_level.txt,sha256=WDcMYbMwvDYal35Cz-QaKMZD2EKSJvB-OC4UUOsHMOc,15 -typing_inspect.py,sha256=5gIWomLPfuDpgd3gX1GlnX0MuXM3VorR4j2W2qXORiQ,28269 diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/WHEEL deleted file mode 100644 index becc9a6..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.37.1) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/top_level.txt b/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/top_level.txt deleted file mode 100644 index 3aedecf..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect-0.9.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -typing_inspect diff --git a/myenv/lib/python3.12/site-packages/typing_inspect.py b/myenv/lib/python3.12/site-packages/typing_inspect.py deleted file mode 100644 index 0345066..0000000 --- a/myenv/lib/python3.12/site-packages/typing_inspect.py +++ /dev/null @@ -1,851 +0,0 @@ -"""Defines experimental API for runtime inspection of types defined -in the standard "typing" module. - -Example usage:: - from typing_inspect import is_generic_type -""" - -# NOTE: This module must support Python 2.7 in addition to Python 3.x - -import sys -import types -import typing -import typing_extensions - -from mypy_extensions import _TypedDictMeta as _TypedDictMeta_Mypy - -# See comments in typing_extensions source on why the switch is at 3.9.2 -if (3, 4, 0) <= sys.version_info[:3] < (3, 9, 2): - from typing_extensions import _TypedDictMeta as _TypedDictMeta_TE -elif sys.version_info[:3] >= (3, 9, 2): - # Situation with typing_extensions.TypedDict is complicated. - # Use the one defined in typing_extentions, and if there is none, - # fall back to typing. - try: - from typing_extensions import _TypedDictMeta as _TypedDictMeta_TE - except ImportError: - from typing import _TypedDictMeta as _TypedDictMeta_TE -else: - # typing_extensions.TypedDict is a re-export from typing. - from typing import TypedDict - _TypedDictMeta_TE = type(TypedDict) - -NEW_TYPING = sys.version_info[:3] >= (3, 7, 0) # PEP 560 -if NEW_TYPING: - import collections.abc - -WITH_FINAL = True -WITH_LITERAL = True -WITH_CLASSVAR = True -WITH_NEWTYPE = True -LEGACY_TYPING = False - -if NEW_TYPING: - from typing import ( - Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, - ForwardRef, NewType, - ) - from typing_extensions import Final, Literal - if sys.version_info[:3] >= (3, 9, 0): - from typing import _SpecialGenericAlias - typingGenericAlias = (_GenericAlias, _SpecialGenericAlias, types.GenericAlias) - else: - typingGenericAlias = (_GenericAlias,) -else: - from typing import ( - Callable, CallableMeta, Union, Tuple, TupleMeta, TypeVar, GenericMeta, - _ForwardRef, - ) - try: - from typing import _Union, _ClassVar - except ImportError: - # support for very old typing module <=3.5.3 - _Union = type(Union) - WITH_CLASSVAR = False - LEGACY_TYPING = True - - try: # python 3.6 - from typing_extensions import _Final - except ImportError: # python 2.7 - try: - from typing import _Final - except ImportError: - WITH_FINAL = False - - try: # python 3.6 - from typing_extensions import Literal - except ImportError: # python 2.7 - try: - from typing import Literal - except ImportError: - WITH_LITERAL = False - - try: # python < 3.5.2 - from typing_extensions import NewType - except ImportError: - try: - from typing import NewType - except ImportError: - WITH_NEWTYPE = False - - -def _gorg(cls): - """This function exists for compatibility with old typing versions.""" - assert isinstance(cls, GenericMeta) - if hasattr(cls, '_gorg'): - return cls._gorg - while cls.__origin__ is not None: - cls = cls.__origin__ - return cls - - -def is_generic_type(tp): - """Test if the given type is a generic type. This includes Generic itself, but - excludes special typing constructs such as Union, Tuple, Callable, ClassVar. - Examples:: - - is_generic_type(int) == False - is_generic_type(Union[int, str]) == False - is_generic_type(Union[int, T]) == False - is_generic_type(ClassVar[List[int]]) == False - is_generic_type(Callable[..., T]) == False - - is_generic_type(Generic) == True - is_generic_type(Generic[T]) == True - is_generic_type(Iterable[int]) == True - is_generic_type(Mapping) == True - is_generic_type(MutableMapping[T, List[int]]) == True - is_generic_type(Sequence[Union[str, bytes]]) == True - """ - if NEW_TYPING: - return (isinstance(tp, type) and issubclass(tp, Generic) or - isinstance(tp, typingGenericAlias) and - tp.__origin__ not in (Union, tuple, ClassVar, collections.abc.Callable)) - return (isinstance(tp, GenericMeta) and not - isinstance(tp, (CallableMeta, TupleMeta))) - - -def is_callable_type(tp): - """Test if the type is a generic callable type, including subclasses - excluding non-generic types and callables. - Examples:: - - is_callable_type(int) == False - is_callable_type(type) == False - is_callable_type(Callable) == True - is_callable_type(Callable[..., int]) == True - is_callable_type(Callable[[int, int], Iterable[str]]) == True - class MyClass(Callable[[int], int]): - ... - is_callable_type(MyClass) == True - - For more general tests use callable(), for more precise test - (excluding subclasses) use:: - - get_origin(tp) is collections.abc.Callable # Callable prior to Python 3.7 - """ - if NEW_TYPING: - return (tp is Callable or isinstance(tp, typingGenericAlias) and - tp.__origin__ is collections.abc.Callable or - isinstance(tp, type) and issubclass(tp, Generic) and - issubclass(tp, collections.abc.Callable)) - return type(tp) is CallableMeta - - -def is_tuple_type(tp): - """Test if the type is a generic tuple type, including subclasses excluding - non-generic classes. - Examples:: - - is_tuple_type(int) == False - is_tuple_type(tuple) == False - is_tuple_type(Tuple) == True - is_tuple_type(Tuple[str, int]) == True - class MyClass(Tuple[str, int]): - ... - is_tuple_type(MyClass) == True - - For more general tests use issubclass(..., tuple), for more precise test - (excluding subclasses) use:: - - get_origin(tp) is tuple # Tuple prior to Python 3.7 - """ - if NEW_TYPING: - return (tp is Tuple or isinstance(tp, typingGenericAlias) and - tp.__origin__ is tuple or - isinstance(tp, type) and issubclass(tp, Generic) and - issubclass(tp, tuple)) - return type(tp) is TupleMeta - - -def is_optional_type(tp): - """Test if the type is type(None), or is a direct union with it, such as Optional[T]. - - NOTE: this method inspects nested `Union` arguments but not `TypeVar` definition - bounds and constraints. So it will return `False` if - - `tp` is a `TypeVar` bound, or constrained to, an optional type - - `tp` is a `Union` to a `TypeVar` bound or constrained to an optional type, - - `tp` refers to a *nested* `Union` containing an optional type or one of the above. - - Users wishing to check for optionality in types relying on type variables might wish - to use this method in combination with `get_constraints` and `get_bound` - """ - - if tp is type(None): # noqa - return True - elif is_union_type(tp): - return any(is_optional_type(tt) for tt in get_args(tp, evaluate=True)) - else: - return False - - -def is_final_type(tp): - """Test if the type is a final type. Examples:: - - is_final_type(int) == False - is_final_type(Final) == True - is_final_type(Final[int]) == True - """ - if NEW_TYPING: - return (tp is Final or - isinstance(tp, typingGenericAlias) and tp.__origin__ is Final) - return WITH_FINAL and type(tp) is _Final - - -try: - MaybeUnionType = types.UnionType -except AttributeError: - MaybeUnionType = None - - -def is_union_type(tp): - """Test if the type is a union type. Examples:: - - is_union_type(int) == False - is_union_type(Union) == True - is_union_type(Union[int, int]) == False - is_union_type(Union[T, int]) == True - is_union_type(int | int) == False - is_union_type(T | int) == True - """ - if NEW_TYPING: - return (tp is Union or - (isinstance(tp, typingGenericAlias) and tp.__origin__ is Union) or - (MaybeUnionType and isinstance(tp, MaybeUnionType))) - return type(tp) is _Union - - -LITERALS = {Literal} -if hasattr(typing, "Literal"): - LITERALS.add(typing.Literal) - - -def is_literal_type(tp): - if NEW_TYPING: - return (tp in LITERALS or - isinstance(tp, typingGenericAlias) and tp.__origin__ in LITERALS) - return WITH_LITERAL and type(tp) is type(Literal) - - -def is_typevar(tp): - """Test if the type represents a type variable. Examples:: - - is_typevar(int) == False - is_typevar(T) == True - is_typevar(Union[T, int]) == False - """ - - return type(tp) is TypeVar - - -def is_classvar(tp): - """Test if the type represents a class variable. Examples:: - - is_classvar(int) == False - is_classvar(ClassVar) == True - is_classvar(ClassVar[int]) == True - is_classvar(ClassVar[List[T]]) == True - """ - if NEW_TYPING: - return (tp is ClassVar or - isinstance(tp, typingGenericAlias) and tp.__origin__ is ClassVar) - elif WITH_CLASSVAR: - return type(tp) is _ClassVar - else: - return False - - -def is_new_type(tp): - """Tests if the type represents a distinct type. Examples:: - - is_new_type(int) == False - is_new_type(NewType) == True - is_new_type(NewType('Age', int)) == True - is_new_type(NewType('Scores', List[Dict[str, float]])) == True - """ - if not WITH_NEWTYPE: - return False - elif sys.version_info[:3] >= (3, 10, 0) and sys.version_info.releaselevel != 'beta': - return (tp in (NewType, typing_extensions.NewType) or - isinstance(tp, (NewType, typing_extensions.NewType))) - elif sys.version_info[:3] >= (3, 0, 0): - try: - res = isinstance(tp, typing_extensions.NewType) - except TypeError: - pass - else: - if res: - return res - return (tp in (NewType, typing_extensions.NewType) or - (getattr(tp, '__supertype__', None) is not None and - getattr(tp, '__qualname__', '') == 'NewType..new_type' and - tp.__module__ in ('typing', 'typing_extensions'))) - else: # python 2 - # __qualname__ is not available in python 2, so we simplify the test here - return (tp is NewType or - (getattr(tp, '__supertype__', None) is not None and - tp.__module__ in ('typing', 'typing_extensions'))) - - -def is_forward_ref(tp): - """Tests if the type is a :class:`typing.ForwardRef`. Examples:: - - u = Union["Milk", Way] - args = get_args(u) - is_forward_ref(args[0]) == True - is_forward_ref(args[1]) == False - """ - if not NEW_TYPING: - return isinstance(tp, _ForwardRef) - return isinstance(tp, ForwardRef) - - -def get_last_origin(tp): - """Get the last base of (multiply) subscripted type. Supports generic types, - Union, Callable, and Tuple. Returns None for unsupported types. - Examples:: - - get_last_origin(int) == None - get_last_origin(ClassVar[int]) == None - get_last_origin(Generic[T]) == Generic - get_last_origin(Union[T, int][str]) == Union[T, int] - get_last_origin(List[Tuple[T, T]][int]) == List[Tuple[T, T]] - get_last_origin(List) == List - """ - if NEW_TYPING: - raise ValueError('This function is only supported in Python 3.6,' - ' use get_origin instead') - sentinel = object() - origin = getattr(tp, '__origin__', sentinel) - if origin is sentinel: - return None - if origin is None: - return tp - return origin - - -def get_origin(tp): - """Get the unsubscripted version of a type. Supports generic types, Union, - Callable, and Tuple. Returns None for unsupported types. Examples:: - - get_origin(int) == None - get_origin(ClassVar[int]) == None - get_origin(Generic) == Generic - get_origin(Generic[T]) == Generic - get_origin(Union[T, int]) == Union - get_origin(List[Tuple[T, T]][int]) == list # List prior to Python 3.7 - """ - if NEW_TYPING: - if isinstance(tp, typingGenericAlias): - return tp.__origin__ if tp.__origin__ is not ClassVar else None - if tp is Generic: - return Generic - return None - if isinstance(tp, GenericMeta): - return _gorg(tp) - if is_union_type(tp): - return Union - if is_tuple_type(tp): - return Tuple - if is_literal_type(tp): - if NEW_TYPING: - return tp.__origin__ or tp - return Literal - - return None - - -def get_parameters(tp): - """Return type parameters of a parameterizable type as a tuple - in lexicographic order. Parameterizable types are generic types, - unions, tuple types and callable types. Examples:: - - get_parameters(int) == () - get_parameters(Generic) == () - get_parameters(Union) == () - get_parameters(List[int]) == () - - get_parameters(Generic[T]) == (T,) - get_parameters(Tuple[List[T], List[S_co]]) == (T, S_co) - get_parameters(Union[S_co, Tuple[T, T]][int, U]) == (U,) - get_parameters(Mapping[T, Tuple[S_co, T]]) == (T, S_co) - """ - if LEGACY_TYPING: - # python <= 3.5.2 - if is_union_type(tp): - params = [] - for arg in (tp.__union_params__ if tp.__union_params__ is not None else ()): - params += get_parameters(arg) - return tuple(params) - elif is_tuple_type(tp): - params = [] - for arg in (tp.__tuple_params__ if tp.__tuple_params__ is not None else ()): - params += get_parameters(arg) - return tuple(params) - elif is_generic_type(tp): - params = [] - base_params = tp.__parameters__ - if base_params is None: - return () - for bp_ in base_params: - for bp in (get_args(bp_) if is_tuple_type(bp_) else (bp_,)): - if _has_type_var(bp) and not isinstance(bp, TypeVar): - raise TypeError( - "Cannot inherit from a generic class " - "parameterized with " - "non-type-variable %s" % bp) - if params is None: - params = [] - if bp not in params: - params.append(bp) - if params is not None: - return tuple(params) - else: - return () - else: - return () - elif NEW_TYPING: - if ( - ( - isinstance(tp, typingGenericAlias) and - hasattr(tp, '__parameters__') - ) or - isinstance(tp, type) and issubclass(tp, Generic) and - tp is not Generic): - return tp.__parameters__ - else: - return () - elif ( - is_generic_type(tp) or is_union_type(tp) or - is_callable_type(tp) or is_tuple_type(tp) - ): - return tp.__parameters__ if tp.__parameters__ is not None else () - else: - return () - - -def get_last_args(tp): - """Get last arguments of (multiply) subscripted type. - Parameters for Callable are flattened. Examples:: - - get_last_args(int) == () - get_last_args(Union) == () - get_last_args(ClassVar[int]) == (int,) - get_last_args(Union[T, int]) == (T, int) - get_last_args(Iterable[Tuple[T, S]][int, T]) == (int, T) - get_last_args(Callable[[T], int]) == (T, int) - get_last_args(Callable[[], int]) == (int,) - """ - if NEW_TYPING: - raise ValueError('This function is only supported in Python 3.6,' - ' use get_args instead') - elif is_classvar(tp): - return (tp.__type__,) if tp.__type__ is not None else () - elif is_generic_type(tp): - try: - if tp.__args__ is not None and len(tp.__args__) > 0: - return tp.__args__ - except AttributeError: - # python 3.5.1 - pass - return tp.__parameters__ if tp.__parameters__ is not None else () - elif is_union_type(tp): - try: - return tp.__args__ if tp.__args__ is not None else () - except AttributeError: - # python 3.5.2 - return tp.__union_params__ if tp.__union_params__ is not None else () - elif is_callable_type(tp): - return tp.__args__ if tp.__args__ is not None else () - elif is_tuple_type(tp): - try: - return tp.__args__ if tp.__args__ is not None else () - except AttributeError: - # python 3.5.2 - return tp.__tuple_params__ if tp.__tuple_params__ is not None else () - else: - return () - - -def _eval_args(args): - """Internal helper for get_args.""" - res = [] - for arg in args: - if not isinstance(arg, tuple): - res.append(arg) - elif is_callable_type(arg[0]): - callable_args = _eval_args(arg[1:]) - if len(arg) == 2: - res.append(Callable[[], callable_args[0]]) - elif arg[1] is Ellipsis: - res.append(Callable[..., callable_args[1]]) - else: - res.append(Callable[list(callable_args[:-1]), callable_args[-1]]) - else: - res.append(type(arg[0]).__getitem__(arg[0], _eval_args(arg[1:]))) - return tuple(res) - - -def get_args(tp, evaluate=None): - """Get type arguments with all substitutions performed. For unions, - basic simplifications used by Union constructor are performed. - On versions prior to 3.7 if `evaluate` is False (default), - report result as nested tuple, this matches - the internal representation of types. If `evaluate` is True - (or if Python version is 3.7 or greater), then all - type parameters are applied (this could be time and memory expensive). - Examples:: - - get_args(int) == () - get_args(Union[int, Union[T, int], str][int]) == (int, str) - get_args(Union[int, Tuple[T, int]][str]) == (int, (Tuple, str, int)) - - get_args(Union[int, Tuple[T, int]][str], evaluate=True) == \ - (int, Tuple[str, int]) - get_args(Dict[int, Tuple[T, T]][Optional[int]], evaluate=True) == \ - (int, Tuple[Optional[int], Optional[int]]) - get_args(Callable[[], T][int], evaluate=True) == ([], int,) - """ - if NEW_TYPING: - if evaluate is not None and not evaluate: - raise ValueError('evaluate can only be True in Python >= 3.7') - # Note special aliases on Python 3.9 don't have __args__. - if isinstance(tp, typingGenericAlias) and hasattr(tp, '__args__'): - res = tp.__args__ - if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis: - res = (list(res[:-1]), res[-1]) - return res - if MaybeUnionType and isinstance(tp, MaybeUnionType): - return tp.__args__ - return () - if is_classvar(tp) or is_final_type(tp): - return (tp.__type__,) if tp.__type__ is not None else () - if is_literal_type(tp): - return tp.__values__ or () - if ( - is_generic_type(tp) or is_union_type(tp) or - is_callable_type(tp) or is_tuple_type(tp) - ): - try: - tree = tp._subs_tree() - except AttributeError: - # Old python typing module <= 3.5.3 - if is_union_type(tp): - # backport of union's subs_tree - tree = _union_subs_tree(tp) - elif is_generic_type(tp): - # backport of GenericMeta's subs_tree - tree = _generic_subs_tree(tp) - elif is_tuple_type(tp): - # ad-hoc (inspired by union) - tree = _tuple_subs_tree(tp) - else: - # tree = _subs_tree(tp) - return () - - if isinstance(tree, tuple) and len(tree) > 1: - if not evaluate: - return tree[1:] - res = _eval_args(tree[1:]) - if get_origin(tp) is Callable and res[0] is not Ellipsis: - res = (list(res[:-1]), res[-1]) - return res - - return () - - -def get_bound(tp): - """Return the type bound to a `TypeVar` if any. - - It the type is not a `TypeVar`, a `TypeError` is raised. - Examples:: - - get_bound(TypeVar('T')) == None - get_bound(TypeVar('T', bound=int)) == int - """ - - if is_typevar(tp): - return getattr(tp, '__bound__', None) - else: - raise TypeError("type is not a `TypeVar`: " + str(tp)) - - -def get_constraints(tp): - """Returns the constraints of a `TypeVar` if any. - - It the type is not a `TypeVar`, a `TypeError` is raised - Examples:: - - get_constraints(TypeVar('T')) == () - get_constraints(TypeVar('T', int, str)) == (int, str) - """ - - if is_typevar(tp): - return getattr(tp, '__constraints__', ()) - else: - raise TypeError("type is not a `TypeVar`: " + str(tp)) - - -def get_generic_type(obj): - """Get the generic type of an object if possible, or runtime class otherwise. - Examples:: - - class Node(Generic[T]): - ... - type(Node[int]()) == Node - get_generic_type(Node[int]()) == Node[int] - get_generic_type(Node[T]()) == Node[T] - get_generic_type(1) == int - """ - - gen_type = getattr(obj, '__orig_class__', None) - return gen_type if gen_type is not None else type(obj) - - -def get_generic_bases(tp): - """Get generic base types of a type or empty tuple if not possible. - Example:: - - class MyClass(List[int], Mapping[str, List[int]]): - ... - MyClass.__bases__ == (List, Mapping) - get_generic_bases(MyClass) == (List[int], Mapping[str, List[int]]) - """ - if LEGACY_TYPING: - return tuple(t for t in tp.__bases__ if isinstance(t, GenericMeta)) - else: - return getattr(tp, '__orig_bases__', ()) - - -def typed_dict_keys(td): - """If td is a TypedDict class, return a dictionary mapping the typed keys to types. - Otherwise, return None. Examples:: - - class TD(TypedDict): - x: int - y: int - class Other(dict): - x: int - y: int - - typed_dict_keys(TD) == {'x': int, 'y': int} - typed_dict_keys(dict) == None - typed_dict_keys(Other) == None - """ - if isinstance(td, (_TypedDictMeta_Mypy, _TypedDictMeta_TE)): - return td.__annotations__.copy() - return None - - -def get_forward_arg(fr): - """ - If fr is a ForwardRef, return the string representation of the forward reference. - Otherwise return None. Examples:: - - tp = List["FRef"] - fr = get_args(tp)[0] - get_forward_arg(fr) == "FRef" - get_forward_arg(tp) == None - """ - return fr.__forward_arg__ if is_forward_ref(fr) else None - - -# A few functions backported and adapted for the LEGACY_TYPING context, and used above - -def _replace_arg(arg, tvars, args): - """backport of _replace_arg""" - if tvars is None: - tvars = [] - # if hasattr(arg, '_subs_tree') and isinstance(arg, (GenericMeta, _TypingBase)): - # return arg._subs_tree(tvars, args) - if is_union_type(arg): - return _union_subs_tree(arg, tvars, args) - if is_tuple_type(arg): - return _tuple_subs_tree(arg, tvars, args) - if is_generic_type(arg): - return _generic_subs_tree(arg, tvars, args) - if isinstance(arg, TypeVar): - for i, tvar in enumerate(tvars): - if arg == tvar: - return args[i] - return arg - - -def _remove_dups_flatten(parameters): - """backport of _remove_dups_flatten""" - - # Flatten out Union[Union[...], ...]. - params = [] - for p in parameters: - if isinstance(p, _Union): # and p.__origin__ is Union: - params.extend(p.__union_params__) # p.__args__) - elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union: - params.extend(p[1:]) - else: - params.append(p) - # Weed out strict duplicates, preserving the first of each occurrence. - all_params = set(params) - if len(all_params) < len(params): - new_params = [] - for t in params: - if t in all_params: - new_params.append(t) - all_params.remove(t) - params = new_params - assert not all_params, all_params - # Weed out subclasses. - # E.g. Union[int, Employee, Manager] == Union[int, Employee]. - # If object is present it will be sole survivor among proper classes. - # Never discard type variables. - # (In particular, Union[str, AnyStr] != AnyStr.) - all_params = set(params) - for t1 in params: - if not isinstance(t1, type): - continue - if any(isinstance(t2, type) and issubclass(t1, t2) - for t2 in all_params - {t1} - if (not (isinstance(t2, GenericMeta) and - get_origin(t2) is not None) and - not isinstance(t2, TypeVar))): - all_params.remove(t1) - return tuple(t for t in params if t in all_params) - - -def _subs_tree(cls, tvars=None, args=None): - """backport of typing._subs_tree, adapted for legacy versions """ - def _get_origin(cls): - try: - return cls.__origin__ - except AttributeError: - return None - - current = _get_origin(cls) - if current is None: - if not is_union_type(cls) and not is_tuple_type(cls): - return cls - - # Make of chain of origins (i.e. cls -> cls.__origin__) - orig_chain = [] - while _get_origin(current) is not None: - orig_chain.append(current) - current = _get_origin(current) - - # Replace type variables in __args__ if asked ... - tree_args = [] - - def _get_args(cls): - if is_union_type(cls): - cls_args = cls.__union_params__ - elif is_tuple_type(cls): - cls_args = cls.__tuple_params__ - else: - try: - cls_args = cls.__args__ - except AttributeError: - cls_args = () - return cls_args if cls_args is not None else () - - for arg in _get_args(cls): - tree_args.append(_replace_arg(arg, tvars, args)) - # ... then continue replacing down the origin chain. - for ocls in orig_chain: - new_tree_args = [] - for arg in _get_args(ocls): - new_tree_args.append(_replace_arg(arg, get_parameters(ocls), tree_args)) - tree_args = new_tree_args - return tree_args - - -def _union_subs_tree(tp, tvars=None, args=None): - """ backport of Union._subs_tree """ - if tp is Union: - return Union # Nothing to substitute - tree_args = _subs_tree(tp, tvars, args) - # tree_args = tp.__union_params__ if tp.__union_params__ is not None else () - tree_args = _remove_dups_flatten(tree_args) - if len(tree_args) == 1: - return tree_args[0] # Union of a single type is that type - return (Union,) + tree_args - - -def _generic_subs_tree(tp, tvars=None, args=None): - """ backport of GenericMeta._subs_tree """ - if tp.__origin__ is None: - return tp - tree_args = _subs_tree(tp, tvars, args) - return (_gorg(tp),) + tuple(tree_args) - - -def _tuple_subs_tree(tp, tvars=None, args=None): - """ ad-hoc function (inspired by union) for legacy typing """ - if tp is Tuple: - return Tuple # Nothing to substitute - tree_args = _subs_tree(tp, tvars, args) - return (Tuple,) + tuple(tree_args) - - -def _has_type_var(t): - if t is None: - return False - elif is_union_type(t): - return _union_has_type_var(t) - elif is_tuple_type(t): - return _tuple_has_type_var(t) - elif is_generic_type(t): - return _generic_has_type_var(t) - elif is_callable_type(t): - return _callable_has_type_var(t) - else: - return False - - -def _union_has_type_var(tp): - if tp.__union_params__: - for t in tp.__union_params__: - if _has_type_var(t): - return True - return False - - -def _tuple_has_type_var(tp): - if tp.__tuple_params__: - for t in tp.__tuple_params__: - if _has_type_var(t): - return True - return False - - -def _callable_has_type_var(tp): - if tp.__args__: - for t in tp.__args__: - if _has_type_var(t): - return True - return _has_type_var(tp.__result__) - - -def _generic_has_type_var(tp): - if tp.__parameters__: - for t in tp.__parameters__: - if _has_type_var(t): - return True - return False diff --git a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/INSTALLER b/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/METADATA b/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/METADATA deleted file mode 100644 index b75670f..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/METADATA +++ /dev/null @@ -1,164 +0,0 @@ -Metadata-Version: 2.4 -Name: urllib3 -Version: 2.6.3 -Summary: HTTP library with thread-safe connection pooling, file post, and more. -Project-URL: Changelog, https://github.com/urllib3/urllib3/blob/main/CHANGES.rst -Project-URL: Documentation, https://urllib3.readthedocs.io -Project-URL: Code, https://github.com/urllib3/urllib3 -Project-URL: Issue tracker, https://github.com/urllib3/urllib3/issues -Author-email: Andrey Petrov -Maintainer-email: Seth Michael Larson , Quentin Pradet , Illia Volochii -License-Expression: MIT -License-File: LICENSE.txt -Keywords: filepost,http,httplib,https,pooling,ssl,threadsafe,urllib -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Software Development :: Libraries -Requires-Python: >=3.9 -Provides-Extra: brotli -Requires-Dist: brotli>=1.2.0; (platform_python_implementation == 'CPython') and extra == 'brotli' -Requires-Dist: brotlicffi>=1.2.0.0; (platform_python_implementation != 'CPython') and extra == 'brotli' -Provides-Extra: h2 -Requires-Dist: h2<5,>=4; extra == 'h2' -Provides-Extra: socks -Requires-Dist: pysocks!=1.5.7,<2.0,>=1.5.6; extra == 'socks' -Provides-Extra: zstd -Requires-Dist: backports-zstd>=1.0.0; (python_version < '3.14') and extra == 'zstd' -Description-Content-Type: text/markdown - -

- -![urllib3](https://github.com/urllib3/urllib3/raw/main/docs/_static/banner_github.svg) - -

- -

- PyPI Version - Python Versions - Join our Discord - Coverage Status - Build Status on GitHub - Documentation Status
- OpenSSF Scorecard - SLSA 3 - CII Best Practices -

- -urllib3 is a powerful, *user-friendly* HTTP client for Python. -urllib3 brings many critical features that are missing from the Python -standard libraries: - -- Thread safety. -- Connection pooling. -- Client-side SSL/TLS verification. -- File uploads with multipart encoding. -- Helpers for retrying requests and dealing with HTTP redirects. -- Support for gzip, deflate, brotli, and zstd encoding. -- Proxy support for HTTP and SOCKS. -- 100% test coverage. - -... and many more features, but most importantly: Our maintainers have a 15+ -year track record of maintaining urllib3 with the highest code standards and -attention to security and safety. - -[Much of the Python ecosystem already uses urllib3](https://urllib3.readthedocs.io/en/stable/#who-uses) -and you should too. - - -## Installing - -urllib3 can be installed with [pip](https://pip.pypa.io): - -```bash -$ python -m pip install urllib3 -``` - -Alternatively, you can grab the latest source code from [GitHub](https://github.com/urllib3/urllib3): - -```bash -$ git clone https://github.com/urllib3/urllib3.git -$ cd urllib3 -$ pip install . -``` - -## Getting Started - -urllib3 is easy to use: - -```python3 ->>> import urllib3 ->>> resp = urllib3.request("GET", "http://httpbin.org/robots.txt") ->>> resp.status -200 ->>> resp.data -b"User-agent: *\nDisallow: /deny\n" -``` - -urllib3 has usage and reference documentation at [urllib3.readthedocs.io](https://urllib3.readthedocs.io). - - -## Community - -urllib3 has a [community Discord channel](https://discord.gg/urllib3) for asking questions and -collaborating with other contributors. Drop by and say hello 👋 - - -## Contributing - -urllib3 happily accepts contributions. Please see our -[contributing documentation](https://urllib3.readthedocs.io/en/latest/contributing.html) -for some tips on getting started. - - -## Security Disclosures - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure with maintainers. - - -## Maintainers - -Meet our maintainers since 2008: - -- Current Lead: [@illia-v](https://github.com/illia-v) (Illia Volochii) -- [@sethmlarson](https://github.com/sethmlarson) (Seth M. Larson) -- [@pquentin](https://github.com/pquentin) (Quentin Pradet) -- [@theacodes](https://github.com/theacodes) (Thea Flowers) -- [@haikuginger](https://github.com/haikuginger) (Jess Shapiro) -- [@lukasa](https://github.com/lukasa) (Cory Benfield) -- [@sigmavirus24](https://github.com/sigmavirus24) (Ian Stapleton Cordasco) -- [@shazow](https://github.com/shazow) (Andrey Petrov) - -👋 - - -## Sponsorship - -If your company benefits from this library, please consider [sponsoring its -development](https://urllib3.readthedocs.io/en/latest/sponsors.html). - - -## For Enterprise - -Professional support for urllib3 is available as part of the [Tidelift -Subscription][1]. Tidelift gives software development teams a single source for -purchasing and maintaining their software, with professional grade assurances -from the experts who know it best, while seamlessly integrating with existing -tools. - -[1]: https://tidelift.com/subscription/pkg/pypi-urllib3?utm_source=pypi-urllib3&utm_medium=referral&utm_campaign=readme diff --git a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/RECORD b/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/RECORD deleted file mode 100644 index 7b0b3f7..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/RECORD +++ /dev/null @@ -1,79 +0,0 @@ -urllib3-2.6.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -urllib3-2.6.3.dist-info/METADATA,sha256=6ROQzJr0mwGXOPHXObXNklEwwy6dPmrMCGPCHF2Ygu8,6901 -urllib3-2.6.3.dist-info/RECORD,, -urllib3-2.6.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87 -urllib3-2.6.3.dist-info/licenses/LICENSE.txt,sha256=Ew46ZNX91dCWp1JpRjSn2d8oRGnehuVzIQAmgEHj1oY,1093 -urllib3/__init__.py,sha256=JMo1tg1nIV1AeJ2vENC_Txfl0e5h6Gzl9DGVk1rWRbo,6979 -urllib3/__pycache__/__init__.cpython-312.pyc,, -urllib3/__pycache__/_base_connection.cpython-312.pyc,, -urllib3/__pycache__/_collections.cpython-312.pyc,, -urllib3/__pycache__/_request_methods.cpython-312.pyc,, -urllib3/__pycache__/_version.cpython-312.pyc,, -urllib3/__pycache__/connection.cpython-312.pyc,, -urllib3/__pycache__/connectionpool.cpython-312.pyc,, -urllib3/__pycache__/exceptions.cpython-312.pyc,, -urllib3/__pycache__/fields.cpython-312.pyc,, -urllib3/__pycache__/filepost.cpython-312.pyc,, -urllib3/__pycache__/poolmanager.cpython-312.pyc,, -urllib3/__pycache__/response.cpython-312.pyc,, -urllib3/_base_connection.py,sha256=T1cwH3RhzsrBh6Bz3AOGVDboRsE7veijqZPXXQTR2Rg,5568 -urllib3/_collections.py,sha256=UvV7UqtGTSKdvw8N_LxWuEikZLm5gB1zFfTZYH9KhAk,17595 -urllib3/_request_methods.py,sha256=gCeF85SO_UU4WoPwYHIoz_tw-eM_EVOkLFp8OFsC7DA,9931 -urllib3/_version.py,sha256=vKE8or0mmqgsFpVb7FYms-nNOVCPPAEifgxVrTaPByw,704 -urllib3/connection.py,sha256=1ZR2gqfFdIzTYIUwF0K5nftg26hLqU5nr1yHTdKb7WA,42800 -urllib3/connectionpool.py,sha256=ZEhudsa8BIubD2M0XoxBBsjxbsXwMgUScH7oQ9i-j1Y,43371 -urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -urllib3/contrib/__pycache__/__init__.cpython-312.pyc,, -urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc,, -urllib3/contrib/__pycache__/socks.cpython-312.pyc,, -urllib3/contrib/emscripten/__init__.py,sha256=wyXve8rmqX7s2KqRQBxD5Wl48jzWPn5-1u_XoQBELVc,836 -urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc,, -urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc,, -urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc,, -urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc,, -urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc,, -urllib3/contrib/emscripten/connection.py,sha256=giElsBoUsKVURbZzb8GCrJmqW23Xnvj2aNyQVF42slg,8960 -urllib3/contrib/emscripten/emscripten_fetch_worker.js,sha256=z1k3zZ4_hDKd3-tN7wzz8LHjHC2pxN_uu8B3k9D9A3c,3677 -urllib3/contrib/emscripten/fetch.py,sha256=5xcd--viFxZd2nBy0aK73dtJ9Tsh1yYZU_SUXwnwibk,23520 -urllib3/contrib/emscripten/request.py,sha256=mL28szy1KvE3NJhWor5jNmarp8gwplDU-7gwGZY5g0Q,566 -urllib3/contrib/emscripten/response.py,sha256=7oVPENYZHuzEGRtG40HonpH5tAIYHsGcHPbJt2Z0U-Y,9507 -urllib3/contrib/pyopenssl.py,sha256=4awTja4o3beTGTGmmWo_3rBoEgzje95Q4bgWz4iiSx8,19724 -urllib3/contrib/socks.py,sha256=eB2eWfu8Wz1fn-qvr_qE_dZAceck2Ncv7XQ15DlvVbU,7547 -urllib3/exceptions.py,sha256=eeQ77nJjF97bP6SvCK4gmx6BpQZKU8yjvM-AIDwZdX8,9952 -urllib3/fields.py,sha256=FCf7UULSkf10cuTRUWTQESzxgl1WT8e2aCy3kfyZins,10829 -urllib3/filepost.py,sha256=U8eNZ-mpKKHhrlbHEEiTxxgK16IejhEa7uz42yqA_dI,2388 -urllib3/http2/__init__.py,sha256=xzrASH7R5ANRkPJOot5lGnATOq3KKuyXzI42rcnwmqs,1741 -urllib3/http2/__pycache__/__init__.cpython-312.pyc,, -urllib3/http2/__pycache__/connection.cpython-312.pyc,, -urllib3/http2/__pycache__/probe.cpython-312.pyc,, -urllib3/http2/connection.py,sha256=bHMH6fNvatwXPrKqrcn74yA3pUWcqPDppnK1LcKCbP8,12578 -urllib3/http2/probe.py,sha256=nnAkqbhAakOiF75rz7W0udZ38Eeh_uD8fjV74N73FEI,3014 -urllib3/poolmanager.py,sha256=NYP5vkKfadGddaBacUk6z6u8rTP9wgCFGGjVtf1mkcc,23811 -urllib3/py.typed,sha256=UaCuPFa3H8UAakbt-5G8SPacldTOGvJv18pPjUJ5gDY,93 -urllib3/response.py,sha256=2VDtH9KrYNQLUbDYHZ3GgwzH3JZphkn_JoqtB7ozkt0,52931 -urllib3/util/__init__.py,sha256=-qeS0QceivazvBEKDNFCAI-6ACcdDOE4TMvo7SLNlAQ,1001 -urllib3/util/__pycache__/__init__.cpython-312.pyc,, -urllib3/util/__pycache__/connection.cpython-312.pyc,, -urllib3/util/__pycache__/proxy.cpython-312.pyc,, -urllib3/util/__pycache__/request.cpython-312.pyc,, -urllib3/util/__pycache__/response.cpython-312.pyc,, -urllib3/util/__pycache__/retry.cpython-312.pyc,, -urllib3/util/__pycache__/ssl_.cpython-312.pyc,, -urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc,, -urllib3/util/__pycache__/ssltransport.cpython-312.pyc,, -urllib3/util/__pycache__/timeout.cpython-312.pyc,, -urllib3/util/__pycache__/url.cpython-312.pyc,, -urllib3/util/__pycache__/util.cpython-312.pyc,, -urllib3/util/__pycache__/wait.cpython-312.pyc,, -urllib3/util/connection.py,sha256=JjO722lzHlzLXPTkr9ZWBdhseXnMVjMSb1DJLVrXSnQ,4444 -urllib3/util/proxy.py,sha256=seP8-Q5B6bB0dMtwPj-YcZZQ30vHuLqRu-tI0JZ2fzs,1148 -urllib3/util/request.py,sha256=itpnC8ug7D4nVfDmGUCRMlgkARUQ13r_XMxSnzTwmpE,8363 -urllib3/util/response.py,sha256=vQE639uoEhj1vpjEdxu5lNIhJCSUZkd7pqllUI0BZOA,3374 -urllib3/util/retry.py,sha256=WOcIHVaxKf-dVb89lUbpvcpeM7rNYF_vsKsCOKw10Z8,19235 -urllib3/util/ssl_.py,sha256=Y9RNkWCIehDxIRvyFnHUjiMlPolm368GYMya2YdDOag,19929 -urllib3/util/ssl_match_hostname.py,sha256=Di7DU7zokoltapT_F0Sj21ffYxwaS_cE5apOtwueeyA,5845 -urllib3/util/ssltransport.py,sha256=Ez4O8pR_vT8dan_FvqBYS6dgDfBXEMfVfrzcdUoWfi4,8847 -urllib3/util/timeout.py,sha256=4eT1FVeZZU7h7mYD1Jq2OXNe4fxekdNvhoWUkZusRpA,10346 -urllib3/util/url.py,sha256=WRh-TMYXosmgp8m8lT4H5spoHw5yUjlcMCfU53AkoAs,15205 -urllib3/util/util.py,sha256=j3lbZK1jPyiwD34T8IgJzdWEZVT-4E-0vYIJi9UjeNA,1146 -urllib3/util/wait.py,sha256=_ph8IrUR3sqPqi0OopQgJUlH4wzkGeM5CiyA7XGGtmI,4423 diff --git a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/WHEEL b/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/WHEEL deleted file mode 100644 index ae8ec1b..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: hatchling 1.28.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/licenses/LICENSE.txt b/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/licenses/LICENSE.txt deleted file mode 100644 index e6183d0..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3-2.6.3.dist-info/licenses/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2008-2020 Andrey Petrov and contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/myenv/lib/python3.12/site-packages/urllib3/__init__.py b/myenv/lib/python3.12/site-packages/urllib3/__init__.py deleted file mode 100644 index 3fe782c..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/__init__.py +++ /dev/null @@ -1,211 +0,0 @@ -""" -Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more -""" - -from __future__ import annotations - -# Set default logging handler to avoid "No handler found" warnings. -import logging -import sys -import typing -import warnings -from logging import NullHandler - -from . import exceptions -from ._base_connection import _TYPE_BODY -from ._collections import HTTPHeaderDict -from ._version import __version__ -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url -from .filepost import _TYPE_FIELDS, encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import BaseHTTPResponse, HTTPResponse -from .util.request import make_headers -from .util.retry import Retry -from .util.timeout import Timeout - -# Ensure that Python is compiled with OpenSSL 1.1.1+ -# If the 'ssl' module isn't available at all that's -# fine, we only care if the module is available. -try: - import ssl -except ImportError: - pass -else: - if not ssl.OPENSSL_VERSION.startswith("OpenSSL "): # Defensive: - warnings.warn( - "urllib3 v2 only supports OpenSSL 1.1.1+, currently " - f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. " - "See: https://github.com/urllib3/urllib3/issues/3020", - exceptions.NotOpenSSLWarning, - ) - elif ssl.OPENSSL_VERSION_INFO < (1, 1, 1): # Defensive: - raise ImportError( - "urllib3 v2 only supports OpenSSL 1.1.1+, currently " - f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. " - "See: https://github.com/urllib3/urllib3/issues/2168" - ) - -__author__ = "Andrey Petrov (andrey.petrov@shazow.net)" -__license__ = "MIT" -__version__ = __version__ - -__all__ = ( - "HTTPConnectionPool", - "HTTPHeaderDict", - "HTTPSConnectionPool", - "PoolManager", - "ProxyManager", - "HTTPResponse", - "Retry", - "Timeout", - "add_stderr_logger", - "connection_from_url", - "disable_warnings", - "encode_multipart_formdata", - "make_headers", - "proxy_from_url", - "request", - "BaseHTTPResponse", -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger( - level: int = logging.DEBUG, -) -> logging.StreamHandler[typing.TextIO]: - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug("Added a stderr logging handler to logger: %s", __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter("always", exceptions.SecurityWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True) - - -def disable_warnings(category: type[Warning] = exceptions.HTTPWarning) -> None: - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter("ignore", category) - - -_DEFAULT_POOL = PoolManager() - - -def request( - method: str, - url: str, - *, - body: _TYPE_BODY | None = None, - fields: _TYPE_FIELDS | None = None, - headers: typing.Mapping[str, str] | None = None, - preload_content: bool | None = True, - decode_content: bool | None = True, - redirect: bool | None = True, - retries: Retry | bool | int | None = None, - timeout: Timeout | float | int | None = 3, - json: typing.Any | None = None, -) -> BaseHTTPResponse: - """ - A convenience, top-level request method. It uses a module-global ``PoolManager`` instance. - Therefore, its side effects could be shared across dependencies relying on it. - To avoid side effects create a new ``PoolManager`` instance and use it instead. - The method does not accept low-level ``**urlopen_kw`` keyword arguments. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param fields: - Data to encode and send in the request body. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. - - :param bool preload_content: - If True, the response's body will be preloaded into memory. - - :param bool decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param json: - Data to encode and send as JSON with UTF-encoded in the request body. - The ``"Content-Type"`` header will be set to ``"application/json"`` - unless specified otherwise. - """ - - return _DEFAULT_POOL.request( - method, - url, - body=body, - fields=fields, - headers=headers, - preload_content=preload_content, - decode_content=decode_content, - redirect=redirect, - retries=retries, - timeout=timeout, - json=json, - ) - - -if sys.platform == "emscripten": - from .contrib.emscripten import inject_into_urllib3 # noqa: 401 - - inject_into_urllib3() diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 50f47a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_base_connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_base_connection.cpython-312.pyc deleted file mode 100644 index 25081c6..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_base_connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc deleted file mode 100644 index 18c242a..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc deleted file mode 100644 index 79cb5f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_version.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_version.cpython-312.pyc deleted file mode 100644 index 4253cce..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/_version.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index c8be148..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc deleted file mode 100644 index 11ee921..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/exceptions.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/exceptions.cpython-312.pyc deleted file mode 100644 index ed88794..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/exceptions.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc deleted file mode 100644 index 8edb784..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc deleted file mode 100644 index b1d3d4a..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/poolmanager.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/poolmanager.cpython-312.pyc deleted file mode 100644 index a02f711..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/poolmanager.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc deleted file mode 100644 index ed35ada..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/_base_connection.py b/myenv/lib/python3.12/site-packages/urllib3/_base_connection.py deleted file mode 100644 index dc0f318..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/_base_connection.py +++ /dev/null @@ -1,165 +0,0 @@ -from __future__ import annotations - -import typing - -from .util.connection import _TYPE_SOCKET_OPTIONS -from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT -from .util.url import Url - -_TYPE_BODY = typing.Union[bytes, typing.IO[typing.Any], typing.Iterable[bytes], str] - - -class ProxyConfig(typing.NamedTuple): - ssl_context: ssl.SSLContext | None - use_forwarding_for_https: bool - assert_hostname: None | str | typing.Literal[False] - assert_fingerprint: str | None - - -class _ResponseOptions(typing.NamedTuple): - # TODO: Remove this in favor of a better - # HTTP request/response lifecycle tracking. - request_method: str - request_url: str - preload_content: bool - decode_content: bool - enforce_content_length: bool - - -if typing.TYPE_CHECKING: - import ssl - from typing import Protocol - - from .response import BaseHTTPResponse - - class BaseHTTPConnection(Protocol): - default_port: typing.ClassVar[int] - default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] - - host: str - port: int - timeout: None | ( - float - ) # Instance doesn't store _DEFAULT_TIMEOUT, must be resolved. - blocksize: int - source_address: tuple[str, int] | None - socket_options: _TYPE_SOCKET_OPTIONS | None - - proxy: Url | None - proxy_config: ProxyConfig | None - - is_verified: bool - proxy_is_verified: bool | None - - def __init__( - self, - host: str, - port: int | None = None, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 8192, - socket_options: _TYPE_SOCKET_OPTIONS | None = ..., - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - ) -> None: ... - - def set_tunnel( - self, - host: str, - port: int | None = None, - headers: typing.Mapping[str, str] | None = None, - scheme: str = "http", - ) -> None: ... - - def connect(self) -> None: ... - - def request( - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - # We know *at least* botocore is depending on the order of the - # first 3 parameters so to be safe we only mark the later ones - # as keyword-only to ensure we have space to extend. - *, - chunked: bool = False, - preload_content: bool = True, - decode_content: bool = True, - enforce_content_length: bool = True, - ) -> None: ... - - def getresponse(self) -> BaseHTTPResponse: ... - - def close(self) -> None: ... - - @property - def is_closed(self) -> bool: - """Whether the connection either is brand new or has been previously closed. - If this property is True then both ``is_connected`` and ``has_connected_to_proxy`` - properties must be False. - """ - - @property - def is_connected(self) -> bool: - """Whether the connection is actively connected to any origin (proxy or target)""" - - @property - def has_connected_to_proxy(self) -> bool: - """Whether the connection has successfully connected to its proxy. - This returns False if no proxy is in use. Used to determine whether - errors are coming from the proxy layer or from tunnelling to the target origin. - """ - - class BaseHTTPSConnection(BaseHTTPConnection, Protocol): - default_port: typing.ClassVar[int] - default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] - - # Certificate verification methods - cert_reqs: int | str | None - assert_hostname: None | str | typing.Literal[False] - assert_fingerprint: str | None - ssl_context: ssl.SSLContext | None - - # Trusted CAs - ca_certs: str | None - ca_cert_dir: str | None - ca_cert_data: None | str | bytes - - # TLS version - ssl_minimum_version: int | None - ssl_maximum_version: int | None - ssl_version: int | str | None # Deprecated - - # Client certificates - cert_file: str | None - key_file: str | None - key_password: str | None - - def __init__( - self, - host: str, - port: int | None = None, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 16384, - socket_options: _TYPE_SOCKET_OPTIONS | None = ..., - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - cert_reqs: int | str | None = None, - assert_hostname: None | str | typing.Literal[False] = None, - assert_fingerprint: str | None = None, - server_hostname: str | None = None, - ssl_context: ssl.SSLContext | None = None, - ca_certs: str | None = None, - ca_cert_dir: str | None = None, - ca_cert_data: None | str | bytes = None, - ssl_minimum_version: int | None = None, - ssl_maximum_version: int | None = None, - ssl_version: int | str | None = None, # Deprecated - cert_file: str | None = None, - key_file: str | None = None, - key_password: str | None = None, - ) -> None: ... diff --git a/myenv/lib/python3.12/site-packages/urllib3/_collections.py b/myenv/lib/python3.12/site-packages/urllib3/_collections.py deleted file mode 100644 index 0378aab..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/_collections.py +++ /dev/null @@ -1,487 +0,0 @@ -from __future__ import annotations - -import typing -from collections import OrderedDict -from enum import Enum, auto -from threading import RLock - -if typing.TYPE_CHECKING: - # We can only import Protocol if TYPE_CHECKING because it's a development - # dependency, and is not available at runtime. - from typing import Protocol - - from typing_extensions import Self - - class HasGettableStringKeys(Protocol): - def keys(self) -> typing.Iterator[str]: ... - - def __getitem__(self, key: str) -> str: ... - - -__all__ = ["RecentlyUsedContainer", "HTTPHeaderDict"] - - -# Key type -_KT = typing.TypeVar("_KT") -# Value type -_VT = typing.TypeVar("_VT") -# Default type -_DT = typing.TypeVar("_DT") - -ValidHTTPHeaderSource = typing.Union[ - "HTTPHeaderDict", - typing.Mapping[str, str], - typing.Iterable[tuple[str, str]], - "HasGettableStringKeys", -] - - -class _Sentinel(Enum): - not_passed = auto() - - -def ensure_can_construct_http_header_dict( - potential: object, -) -> ValidHTTPHeaderSource | None: - if isinstance(potential, HTTPHeaderDict): - return potential - elif isinstance(potential, typing.Mapping): - # Full runtime checking of the contents of a Mapping is expensive, so for the - # purposes of typechecking, we assume that any Mapping is the right shape. - return typing.cast(typing.Mapping[str, str], potential) - elif isinstance(potential, typing.Iterable): - # Similarly to Mapping, full runtime checking of the contents of an Iterable is - # expensive, so for the purposes of typechecking, we assume that any Iterable - # is the right shape. - return typing.cast(typing.Iterable[tuple[str, str]], potential) - elif hasattr(potential, "keys") and hasattr(potential, "__getitem__"): - return typing.cast("HasGettableStringKeys", potential) - else: - return None - - -class RecentlyUsedContainer(typing.Generic[_KT, _VT], typing.MutableMapping[_KT, _VT]): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - _container: typing.OrderedDict[_KT, _VT] - _maxsize: int - dispose_func: typing.Callable[[_VT], None] | None - lock: RLock - - def __init__( - self, - maxsize: int = 10, - dispose_func: typing.Callable[[_VT], None] | None = None, - ) -> None: - super().__init__() - self._maxsize = maxsize - self.dispose_func = dispose_func - self._container = OrderedDict() - self.lock = RLock() - - def __getitem__(self, key: _KT) -> _VT: - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key: _KT, value: _VT) -> None: - evicted_item = None - with self.lock: - # Possibly evict the existing value of 'key' - try: - # If the key exists, we'll overwrite it, which won't change the - # size of the pool. Because accessing a key should move it to - # the end of the eviction line, we pop it out first. - evicted_item = key, self._container.pop(key) - self._container[key] = value - except KeyError: - # When the key does not exist, we insert the value first so that - # evicting works in all cases, including when self._maxsize is 0 - self._container[key] = value - if len(self._container) > self._maxsize: - # If we didn't evict an existing value, and we've hit our maximum - # size, then we have to evict the least recently used item from - # the beginning of the container. - evicted_item = self._container.popitem(last=False) - - # After releasing the lock on the pool, dispose of any evicted value. - if evicted_item is not None and self.dispose_func: - _, evicted_value = evicted_item - self.dispose_func(evicted_value) - - def __delitem__(self, key: _KT) -> None: - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self) -> int: - with self.lock: - return len(self._container) - - def __iter__(self) -> typing.NoReturn: - raise NotImplementedError( - "Iteration over this class is unlikely to be threadsafe." - ) - - def clear(self) -> None: - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(self._container.values()) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self) -> set[_KT]: # type: ignore[override] - with self.lock: - return set(self._container.keys()) - - -class HTTPHeaderDictItemView(set[tuple[str, str]]): - """ - HTTPHeaderDict is unusual for a Mapping[str, str] in that it has two modes of - address. - - If we directly try to get an item with a particular name, we will get a string - back that is the concatenated version of all the values: - - >>> d['X-Header-Name'] - 'Value1, Value2, Value3' - - However, if we iterate over an HTTPHeaderDict's items, we will optionally combine - these values based on whether combine=True was called when building up the dictionary - - >>> d = HTTPHeaderDict({"A": "1", "B": "foo"}) - >>> d.add("A", "2", combine=True) - >>> d.add("B", "bar") - >>> list(d.items()) - [ - ('A', '1, 2'), - ('B', 'foo'), - ('B', 'bar'), - ] - - This class conforms to the interface required by the MutableMapping ABC while - also giving us the nonstandard iteration behavior we want; items with duplicate - keys, ordered by time of first insertion. - """ - - _headers: HTTPHeaderDict - - def __init__(self, headers: HTTPHeaderDict) -> None: - self._headers = headers - - def __len__(self) -> int: - return len(list(self._headers.iteritems())) - - def __iter__(self) -> typing.Iterator[tuple[str, str]]: - return self._headers.iteritems() - - def __contains__(self, item: object) -> bool: - if isinstance(item, tuple) and len(item) == 2: - passed_key, passed_val = item - if isinstance(passed_key, str) and isinstance(passed_val, str): - return self._headers._has_value_for_header(passed_key, passed_val) - return False - - -class HTTPHeaderDict(typing.MutableMapping[str, str]): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - _container: typing.MutableMapping[str, list[str]] - - def __init__(self, headers: ValidHTTPHeaderSource | None = None, **kwargs: str): - super().__init__() - self._container = {} # 'dict' is insert-ordered - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key: str, val: str) -> None: - # avoid a bytes/str comparison by decoding before httplib - if isinstance(key, bytes): - key = key.decode("latin-1") - self._container[key.lower()] = [key, val] - - def __getitem__(self, key: str) -> str: - if isinstance(key, bytes): - key = key.decode("latin-1") - val = self._container[key.lower()] - return ", ".join(val[1:]) - - def __delitem__(self, key: str) -> None: - if isinstance(key, bytes): - key = key.decode("latin-1") - del self._container[key.lower()] - - def __contains__(self, key: object) -> bool: - if isinstance(key, bytes): - key = key.decode("latin-1") - if isinstance(key, str): - return key.lower() in self._container - return False - - def setdefault(self, key: str, default: str = "") -> str: - return super().setdefault(key, default) - - def __eq__(self, other: object) -> bool: - maybe_constructable = ensure_can_construct_http_header_dict(other) - if maybe_constructable is None: - return False - else: - other_as_http_header_dict = type(self)(maybe_constructable) - - return {k.lower(): v for k, v in self.itermerged()} == { - k.lower(): v for k, v in other_as_http_header_dict.itermerged() - } - - def __ne__(self, other: object) -> bool: - return not self.__eq__(other) - - def __len__(self) -> int: - return len(self._container) - - def __iter__(self) -> typing.Iterator[str]: - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def discard(self, key: str) -> None: - try: - del self[key] - except KeyError: - pass - - def add(self, key: str, val: str, *, combine: bool = False) -> None: - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - If this is called with combine=True, instead of adding a new header value - as a distinct item during iteration, this will instead append the value to - any existing header value with a comma. If no existing header value exists - for the key, then the value will simply be added, ignoring the combine parameter. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - >>> list(headers.items()) - [('foo', 'bar'), ('foo', 'baz')] - >>> headers.add('foo', 'quz', combine=True) - >>> list(headers.items()) - [('foo', 'bar, baz, quz')] - """ - # avoid a bytes/str comparison by decoding before httplib - if isinstance(key, bytes): - key = key.decode("latin-1") - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - # if there are values here, then there is at least the initial - # key/value pair - assert len(vals) >= 2 - if combine: - vals[-1] = vals[-1] + ", " + val - else: - vals.append(val) - - def extend(self, *args: ValidHTTPHeaderSource, **kwargs: str) -> None: - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError( - f"extend() takes at most 1 positional arguments ({len(args)} given)" - ) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, typing.Mapping): - for key, val in other.items(): - self.add(key, val) - elif isinstance(other, typing.Iterable): - other = typing.cast(typing.Iterable[tuple[str, str]], other) - for key, value in other: - self.add(key, value) - elif hasattr(other, "keys") and hasattr(other, "__getitem__"): - # THIS IS NOT A TYPESAFE BRANCH - # In this branch, the object has a `keys` attr but is not a Mapping or any of - # the other types indicated in the method signature. We do some stuff with - # it as though it partially implements the Mapping interface, but we're not - # doing that stuff safely AT ALL. - for key in other.keys(): - self.add(key, other[key]) - - for key, value in kwargs.items(): - self.add(key, value) - - @typing.overload - def getlist(self, key: str) -> list[str]: ... - - @typing.overload - def getlist(self, key: str, default: _DT) -> list[str] | _DT: ... - - def getlist( - self, key: str, default: _Sentinel | _DT = _Sentinel.not_passed - ) -> list[str] | _DT: - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - if isinstance(key, bytes): - key = key.decode("latin-1") - try: - vals = self._container[key.lower()] - except KeyError: - if default is _Sentinel.not_passed: - # _DT is unbound; empty list is instance of List[str] - return [] - # _DT is bound; default is instance of _DT - return default - else: - # _DT may or may not be bound; vals[1:] is instance of List[str], which - # meets our external interface requirement of `Union[List[str], _DT]`. - return vals[1:] - - def _prepare_for_method_change(self) -> Self: - """ - Remove content-specific header fields before changing the request - method to GET or HEAD according to RFC 9110, Section 15.4. - """ - content_specific_headers = [ - "Content-Encoding", - "Content-Language", - "Content-Location", - "Content-Type", - "Content-Length", - "Digest", - "Last-Modified", - ] - for header in content_specific_headers: - self.discard(header) - return self - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - # Backwards compatibility for http.cookiejar - get_all = getlist - - def __repr__(self) -> str: - return f"{type(self).__name__}({dict(self.itermerged())})" - - def _copy_from(self, other: HTTPHeaderDict) -> None: - for key in other: - val = other.getlist(key) - self._container[key.lower()] = [key, *val] - - def copy(self) -> Self: - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self) -> typing.Iterator[tuple[str, str]]: - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self) -> typing.Iterator[tuple[str, str]]: - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ", ".join(val[1:]) - - def items(self) -> HTTPHeaderDictItemView: # type: ignore[override] - return HTTPHeaderDictItemView(self) - - def _has_value_for_header(self, header_name: str, potential_value: str) -> bool: - if header_name in self: - return potential_value in self._container[header_name.lower()][1:] - return False - - def __ior__(self, other: object) -> HTTPHeaderDict: - # Supports extending a header dict in-place using operator |= - # combining items with add instead of __setitem__ - maybe_constructable = ensure_can_construct_http_header_dict(other) - if maybe_constructable is None: - return NotImplemented - self.extend(maybe_constructable) - return self - - def __or__(self, other: object) -> Self: - # Supports merging header dicts using operator | - # combining items with add instead of __setitem__ - maybe_constructable = ensure_can_construct_http_header_dict(other) - if maybe_constructable is None: - return NotImplemented - result = self.copy() - result.extend(maybe_constructable) - return result - - def __ror__(self, other: object) -> Self: - # Supports merging header dicts using operator | when other is on left side - # combining items with add instead of __setitem__ - maybe_constructable = ensure_can_construct_http_header_dict(other) - if maybe_constructable is None: - return NotImplemented - result = type(self)(maybe_constructable) - result.extend(self) - return result diff --git a/myenv/lib/python3.12/site-packages/urllib3/_request_methods.py b/myenv/lib/python3.12/site-packages/urllib3/_request_methods.py deleted file mode 100644 index 297c271..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/_request_methods.py +++ /dev/null @@ -1,278 +0,0 @@ -from __future__ import annotations - -import json as _json -import typing -from urllib.parse import urlencode - -from ._base_connection import _TYPE_BODY -from ._collections import HTTPHeaderDict -from .filepost import _TYPE_FIELDS, encode_multipart_formdata -from .response import BaseHTTPResponse - -__all__ = ["RequestMethods"] - -_TYPE_ENCODE_URL_FIELDS = typing.Union[ - typing.Sequence[tuple[str, typing.Union[str, bytes]]], - typing.Mapping[str, typing.Union[str, bytes]], -] - - -class RequestMethods: - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`urllib3.HTTPConnectionPool` and - :class:`urllib3.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"} - - def __init__(self, headers: typing.Mapping[str, str] | None = None) -> None: - self.headers = headers or {} - - def urlopen( - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - encode_multipart: bool = True, - multipart_boundary: str | None = None, - **kw: typing.Any, - ) -> BaseHTTPResponse: # Abstract - raise NotImplementedError( - "Classes extending RequestMethods must implement " - "their own ``urlopen`` method." - ) - - def request( - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - fields: _TYPE_FIELDS | None = None, - headers: typing.Mapping[str, str] | None = None, - json: typing.Any | None = None, - **urlopen_kw: typing.Any, - ) -> BaseHTTPResponse: - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param fields: - Data to encode and send in the URL or request body, depending on ``method``. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param json: - Data to encode and send as JSON with UTF-encoded in the request body. - The ``"Content-Type"`` header will be set to ``"application/json"`` - unless specified otherwise. - """ - method = method.upper() - - if json is not None and body is not None: - raise TypeError( - "request got values for both 'body' and 'json' parameters which are mutually exclusive" - ) - - if json is not None: - if headers is None: - headers = self.headers - - if not ("content-type" in map(str.lower, headers.keys())): - headers = HTTPHeaderDict(headers) - headers["Content-Type"] = "application/json" - - body = _json.dumps(json, separators=(",", ":"), ensure_ascii=False).encode( - "utf-8" - ) - - if body is not None: - urlopen_kw["body"] = body - - if method in self._encode_url_methods: - return self.request_encode_url( - method, - url, - fields=fields, # type: ignore[arg-type] - headers=headers, - **urlopen_kw, - ) - else: - return self.request_encode_body( - method, url, fields=fields, headers=headers, **urlopen_kw - ) - - def request_encode_url( - self, - method: str, - url: str, - fields: _TYPE_ENCODE_URL_FIELDS | None = None, - headers: typing.Mapping[str, str] | None = None, - **urlopen_kw: str, - ) -> BaseHTTPResponse: - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param fields: - Data to encode and send in the URL. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - """ - if headers is None: - headers = self.headers - - extra_kw: dict[str, typing.Any] = {"headers": headers} - extra_kw.update(urlopen_kw) - - if fields: - url += "?" + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body( - self, - method: str, - url: str, - fields: _TYPE_FIELDS | None = None, - headers: typing.Mapping[str, str] | None = None, - encode_multipart: bool = True, - multipart_boundary: str | None = None, - **urlopen_kw: str, - ) -> BaseHTTPResponse: - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :func:`urllib3.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :func:`urllib.parse.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimic behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param fields: - Data to encode and send in the request body. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param encode_multipart: - If True, encode the ``fields`` using the multipart/form-data MIME - format. - - :param multipart_boundary: - If not specified, then a random boundary will be generated using - :func:`urllib3.filepost.choose_boundary`. - """ - if headers is None: - headers = self.headers - - extra_kw: dict[str, typing.Any] = {"headers": HTTPHeaderDict(headers)} - body: bytes | str - - if fields: - if "body" in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one." - ) - - if encode_multipart: - body, content_type = encode_multipart_formdata( - fields, boundary=multipart_boundary - ) - else: - body, content_type = ( - urlencode(fields), # type: ignore[arg-type] - "application/x-www-form-urlencoded", - ) - - extra_kw["body"] = body - extra_kw["headers"].setdefault("Content-Type", content_type) - - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) diff --git a/myenv/lib/python3.12/site-packages/urllib3/_version.py b/myenv/lib/python3.12/site-packages/urllib3/_version.py deleted file mode 100644 index 268d3b9..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/_version.py +++ /dev/null @@ -1,34 +0,0 @@ -# file generated by setuptools-scm -# don't change, don't track in version control - -__all__ = [ - "__version__", - "__version_tuple__", - "version", - "version_tuple", - "__commit_id__", - "commit_id", -] - -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Tuple - from typing import Union - - VERSION_TUPLE = Tuple[Union[int, str], ...] - COMMIT_ID = Union[str, None] -else: - VERSION_TUPLE = object - COMMIT_ID = object - -version: str -__version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE -commit_id: COMMIT_ID -__commit_id__: COMMIT_ID - -__version__ = version = '2.6.3' -__version_tuple__ = version_tuple = (2, 6, 3) - -__commit_id__ = commit_id = None diff --git a/myenv/lib/python3.12/site-packages/urllib3/connection.py b/myenv/lib/python3.12/site-packages/urllib3/connection.py deleted file mode 100644 index 2ceeb0a..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/connection.py +++ /dev/null @@ -1,1099 +0,0 @@ -from __future__ import annotations - -import datetime -import http.client -import logging -import os -import re -import socket -import sys -import threading -import typing -import warnings -from http.client import HTTPConnection as _HTTPConnection -from http.client import HTTPException as HTTPException # noqa: F401 -from http.client import ResponseNotReady -from socket import timeout as SocketTimeout - -if typing.TYPE_CHECKING: - from .response import HTTPResponse - from .util.ssl_ import _TYPE_PEER_CERT_RET_DICT - from .util.ssltransport import SSLTransport - -from ._collections import HTTPHeaderDict -from .http2 import probe as http2_probe -from .util.response import assert_header_parsing -from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT, Timeout -from .util.util import to_str -from .util.wait import wait_for_read - -try: # Compiled with SSL? - import ssl - - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): - ssl = None # type: ignore[assignment] - - class BaseSSLError(BaseException): # type: ignore[no-redef] - pass - - -from ._base_connection import _TYPE_BODY -from ._base_connection import ProxyConfig as ProxyConfig -from ._base_connection import _ResponseOptions as _ResponseOptions -from ._version import __version__ -from .exceptions import ( - ConnectTimeoutError, - HeaderParsingError, - NameResolutionError, - NewConnectionError, - ProxyError, - SystemTimeWarning, -) -from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection, ssl_ -from .util.request import body_to_chunks -from .util.ssl_ import assert_fingerprint as _assert_fingerprint -from .util.ssl_ import ( - create_urllib3_context, - is_ipaddress, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .util.ssl_match_hostname import CertificateError, match_hostname -from .util.url import Url - -# Not a no-op, we're adding this to the namespace so it can be imported. -ConnectionError = ConnectionError -BrokenPipeError = BrokenPipeError - - -log = logging.getLogger(__name__) - -port_by_scheme = {"http": 80, "https": 443} - -# When it comes time to update this value as a part of regular maintenance -# (ie test_recent_date is failing) update it to ~6 months before the current date. -RECENT_DATE = datetime.date(2025, 1, 1) - -_CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]") - - -class HTTPConnection(_HTTPConnection): - """ - Based on :class:`http.client.HTTPConnection` but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``source_address``: Set the source address for the current connection. - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass: - - .. code-block:: python - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port: typing.ClassVar[int] = port_by_scheme["http"] # type: ignore[misc] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options: typing.ClassVar[connection._TYPE_SOCKET_OPTIONS] = [ - (socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - ] - - #: Whether this connection verifies the host's certificate. - is_verified: bool = False - - #: Whether this proxy connection verified the proxy host's certificate. - # If no proxy is currently connected to the value will be ``None``. - proxy_is_verified: bool | None = None - - blocksize: int - source_address: tuple[str, int] | None - socket_options: connection._TYPE_SOCKET_OPTIONS | None - - _has_connected_to_proxy: bool - _response_options: _ResponseOptions | None - _tunnel_host: str | None - _tunnel_port: int | None - _tunnel_scheme: str | None - - def __init__( - self, - host: str, - port: int | None = None, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 16384, - socket_options: None | ( - connection._TYPE_SOCKET_OPTIONS - ) = default_socket_options, - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - ) -> None: - super().__init__( - host=host, - port=port, - timeout=Timeout.resolve_default_timeout(timeout), - source_address=source_address, - blocksize=blocksize, - ) - self.socket_options = socket_options - self.proxy = proxy - self.proxy_config = proxy_config - - self._has_connected_to_proxy = False - self._response_options = None - self._tunnel_host: str | None = None - self._tunnel_port: int | None = None - self._tunnel_scheme: str | None = None - - def __str__(self) -> str: - return f"{type(self).__name__}(host={self.host!r}, port={self.port!r})" - - def __repr__(self) -> str: - return f"<{self} at {id(self):#x}>" - - @property - def host(self) -> str: - """ - Getter method to remove any trailing dots that indicate the hostname is an FQDN. - - In general, SSL certificates don't include the trailing dot indicating a - fully-qualified domain name, and thus, they don't validate properly when - checked against a domain name that includes the dot. In addition, some - servers may not expect to receive the trailing dot when provided. - - However, the hostname with trailing dot is critical to DNS resolution; doing a - lookup with the trailing dot will properly only resolve the appropriate FQDN, - whereas a lookup without a trailing dot will search the system's search domain - list. Thus, it's important to keep the original host around for use only in - those cases where it's appropriate (i.e., when doing DNS lookup to establish the - actual TCP connection across which we're going to send HTTP requests). - """ - return self._dns_host.rstrip(".") - - @host.setter - def host(self, value: str) -> None: - """ - Setter for the `host` property. - - We assume that only urllib3 uses the _dns_host attribute; httplib itself - only uses `host`, and it seems reasonable that other libraries follow suit. - """ - self._dns_host = value - - def _new_conn(self) -> socket.socket: - """Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - try: - sock = connection.create_connection( - (self._dns_host, self.port), - self.timeout, - source_address=self.source_address, - socket_options=self.socket_options, - ) - except socket.gaierror as e: - raise NameResolutionError(self.host, self, e) from e - except SocketTimeout as e: - raise ConnectTimeoutError( - self, - f"Connection to {self.host} timed out. (connect timeout={self.timeout})", - ) from e - - except OSError as e: - raise NewConnectionError( - self, f"Failed to establish a new connection: {e}" - ) from e - - sys.audit("http.client.connect", self, self.host, self.port) - - return sock - - def set_tunnel( - self, - host: str, - port: int | None = None, - headers: typing.Mapping[str, str] | None = None, - scheme: str = "http", - ) -> None: - if scheme not in ("http", "https"): - raise ValueError( - f"Invalid proxy scheme for tunneling: {scheme!r}, must be either 'http' or 'https'" - ) - super().set_tunnel(host, port=port, headers=headers) - self._tunnel_scheme = scheme - - if sys.version_info < (3, 11, 9) or ((3, 12) <= sys.version_info < (3, 12, 3)): - # Taken from python/cpython#100986 which was backported in 3.11.9 and 3.12.3. - # When using connection_from_host, host will come without brackets. - def _wrap_ipv6(self, ip: bytes) -> bytes: - if b":" in ip and ip[0] != b"["[0]: - return b"[" + ip + b"]" - return ip - - if sys.version_info < (3, 11, 9): - # `_tunnel` copied from 3.11.13 backporting - # https://github.com/python/cpython/commit/0d4026432591d43185568dd31cef6a034c4b9261 - # and https://github.com/python/cpython/commit/6fbc61070fda2ffb8889e77e3b24bca4249ab4d1 - def _tunnel(self) -> None: - _MAXLINE = http.client._MAXLINE # type: ignore[attr-defined] - connect = b"CONNECT %s:%d HTTP/1.0\r\n" % ( # type: ignore[str-format] - self._wrap_ipv6(self._tunnel_host.encode("ascii")), # type: ignore[union-attr] - self._tunnel_port, - ) - headers = [connect] - for header, value in self._tunnel_headers.items(): # type: ignore[attr-defined] - headers.append(f"{header}: {value}\r\n".encode("latin-1")) - headers.append(b"\r\n") - # Making a single send() call instead of one per line encourages - # the host OS to use a more optimal packet size instead of - # potentially emitting a series of small packets. - self.send(b"".join(headers)) - del headers - - response = self.response_class(self.sock, method=self._method) # type: ignore[attr-defined] - try: - (version, code, message) = response._read_status() # type: ignore[attr-defined] - - if code != http.HTTPStatus.OK: - self.close() - raise OSError( - f"Tunnel connection failed: {code} {message.strip()}" - ) - while True: - line = response.fp.readline(_MAXLINE + 1) - if len(line) > _MAXLINE: - raise http.client.LineTooLong("header line") - if not line: - # for sites which EOF without sending a trailer - break - if line in (b"\r\n", b"\n", b""): - break - - if self.debuglevel > 0: - print("header:", line.decode()) - finally: - response.close() - - elif (3, 12) <= sys.version_info < (3, 12, 3): - # `_tunnel` copied from 3.12.11 backporting - # https://github.com/python/cpython/commit/23aef575c7629abcd4aaf028ebd226fb41a4b3c8 - def _tunnel(self) -> None: # noqa: F811 - connect = b"CONNECT %s:%d HTTP/1.1\r\n" % ( # type: ignore[str-format] - self._wrap_ipv6(self._tunnel_host.encode("idna")), # type: ignore[union-attr] - self._tunnel_port, - ) - headers = [connect] - for header, value in self._tunnel_headers.items(): # type: ignore[attr-defined] - headers.append(f"{header}: {value}\r\n".encode("latin-1")) - headers.append(b"\r\n") - # Making a single send() call instead of one per line encourages - # the host OS to use a more optimal packet size instead of - # potentially emitting a series of small packets. - self.send(b"".join(headers)) - del headers - - response = self.response_class(self.sock, method=self._method) # type: ignore[attr-defined] - try: - (version, code, message) = response._read_status() # type: ignore[attr-defined] - - self._raw_proxy_headers = http.client._read_headers(response.fp) # type: ignore[attr-defined] - - if self.debuglevel > 0: - for header in self._raw_proxy_headers: - print("header:", header.decode()) - - if code != http.HTTPStatus.OK: - self.close() - raise OSError( - f"Tunnel connection failed: {code} {message.strip()}" - ) - - finally: - response.close() - - def connect(self) -> None: - self.sock = self._new_conn() - if self._tunnel_host: - # If we're tunneling it means we're connected to our proxy. - self._has_connected_to_proxy = True - - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - - # If there's a proxy to be connected to we are fully connected. - # This is set twice (once above and here) due to forwarding proxies - # not using tunnelling. - self._has_connected_to_proxy = bool(self.proxy) - - if self._has_connected_to_proxy: - self.proxy_is_verified = False - - @property - def is_closed(self) -> bool: - return self.sock is None - - @property - def is_connected(self) -> bool: - if self.sock is None: - return False - return not wait_for_read(self.sock, timeout=0.0) - - @property - def has_connected_to_proxy(self) -> bool: - return self._has_connected_to_proxy - - @property - def proxy_is_forwarding(self) -> bool: - """ - Return True if a forwarding proxy is configured, else return False - """ - return bool(self.proxy) and self._tunnel_host is None - - @property - def proxy_is_tunneling(self) -> bool: - """ - Return True if a tunneling proxy is configured, else return False - """ - return self._tunnel_host is not None - - def close(self) -> None: - try: - super().close() - finally: - # Reset all stateful properties so connection - # can be re-used without leaking prior configs. - self.sock = None - self.is_verified = False - self.proxy_is_verified = None - self._has_connected_to_proxy = False - self._response_options = None - self._tunnel_host = None - self._tunnel_port = None - self._tunnel_scheme = None - - def putrequest( - self, - method: str, - url: str, - skip_host: bool = False, - skip_accept_encoding: bool = False, - ) -> None: - """""" - # Empty docstring because the indentation of CPython's implementation - # is broken but we don't want this method in our documentation. - match = _CONTAINS_CONTROL_CHAR_RE.search(method) - if match: - raise ValueError( - f"Method cannot contain non-token characters {method!r} (found at least {match.group()!r})" - ) - - return super().putrequest( - method, url, skip_host=skip_host, skip_accept_encoding=skip_accept_encoding - ) - - def putheader(self, header: str, *values: str) -> None: # type: ignore[override] - """""" - if not any(isinstance(v, str) and v == SKIP_HEADER for v in values): - super().putheader(header, *values) - elif to_str(header.lower()) not in SKIPPABLE_HEADERS: - skippable_headers = "', '".join( - [str.title(header) for header in sorted(SKIPPABLE_HEADERS)] - ) - raise ValueError( - f"urllib3.util.SKIP_HEADER only supports '{skippable_headers}'" - ) - - # `request` method's signature intentionally violates LSP. - # urllib3's API is different from `http.client.HTTPConnection` and the subclassing is only incidental. - def request( # type: ignore[override] - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - *, - chunked: bool = False, - preload_content: bool = True, - decode_content: bool = True, - enforce_content_length: bool = True, - ) -> None: - # Update the inner socket's timeout value to send the request. - # This only triggers if the connection is re-used. - if self.sock is not None: - self.sock.settimeout(self.timeout) - - # Store these values to be fed into the HTTPResponse - # object later. TODO: Remove this in favor of a real - # HTTP lifecycle mechanism. - - # We have to store these before we call .request() - # because sometimes we can still salvage a response - # off the wire even if we aren't able to completely - # send the request body. - self._response_options = _ResponseOptions( - request_method=method, - request_url=url, - preload_content=preload_content, - decode_content=decode_content, - enforce_content_length=enforce_content_length, - ) - - if headers is None: - headers = {} - header_keys = frozenset(to_str(k.lower()) for k in headers) - skip_accept_encoding = "accept-encoding" in header_keys - skip_host = "host" in header_keys - self.putrequest( - method, url, skip_accept_encoding=skip_accept_encoding, skip_host=skip_host - ) - - # Transform the body into an iterable of sendall()-able chunks - # and detect if an explicit Content-Length is doable. - chunks_and_cl = body_to_chunks(body, method=method, blocksize=self.blocksize) - chunks = chunks_and_cl.chunks - content_length = chunks_and_cl.content_length - - # When chunked is explicit set to 'True' we respect that. - if chunked: - if "transfer-encoding" not in header_keys: - self.putheader("Transfer-Encoding", "chunked") - else: - # Detect whether a framing mechanism is already in use. If so - # we respect that value, otherwise we pick chunked vs content-length - # depending on the type of 'body'. - if "content-length" in header_keys: - chunked = False - elif "transfer-encoding" in header_keys: - chunked = True - - # Otherwise we go off the recommendation of 'body_to_chunks()'. - else: - chunked = False - if content_length is None: - if chunks is not None: - chunked = True - self.putheader("Transfer-Encoding", "chunked") - else: - self.putheader("Content-Length", str(content_length)) - - # Now that framing headers are out of the way we send all the other headers. - if "user-agent" not in header_keys: - self.putheader("User-Agent", _get_default_user_agent()) - for header, value in headers.items(): - self.putheader(header, value) - self.endheaders() - - # If we're given a body we start sending that in chunks. - if chunks is not None: - for chunk in chunks: - # Sending empty chunks isn't allowed for TE: chunked - # as it indicates the end of the body. - if not chunk: - continue - if isinstance(chunk, str): - chunk = chunk.encode("utf-8") - if chunked: - self.send(b"%x\r\n%b\r\n" % (len(chunk), chunk)) - else: - self.send(chunk) - - # Regardless of whether we have a body or not, if we're in - # chunked mode we want to send an explicit empty chunk. - if chunked: - self.send(b"0\r\n\r\n") - - def request_chunked( - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - ) -> None: - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - warnings.warn( - "HTTPConnection.request_chunked() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead use HTTPConnection.request(..., chunked=True).", - category=DeprecationWarning, - stacklevel=2, - ) - self.request(method, url, body=body, headers=headers, chunked=True) - - def getresponse( # type: ignore[override] - self, - ) -> HTTPResponse: - """ - Get the response from the server. - - If the HTTPConnection is in the correct state, returns an instance of HTTPResponse or of whatever object is returned by the response_class variable. - - If a request has not been sent or if a previous response has not be handled, ResponseNotReady is raised. If the HTTP response indicates that the connection should be closed, then it will be closed before the response is returned. When the connection is closed, the underlying socket is closed. - """ - # Raise the same error as http.client.HTTPConnection - if self._response_options is None: - raise ResponseNotReady() - - # Reset this attribute for being used again. - resp_options = self._response_options - self._response_options = None - - # Since the connection's timeout value may have been updated - # we need to set the timeout on the socket. - self.sock.settimeout(self.timeout) - - # This is needed here to avoid circular import errors - from .response import HTTPResponse - - # Save a reference to the shutdown function before ownership is passed - # to httplib_response - # TODO should we implement it everywhere? - _shutdown = getattr(self.sock, "shutdown", None) - - # Get the response from http.client.HTTPConnection - httplib_response = super().getresponse() - - try: - assert_header_parsing(httplib_response.msg) - except (HeaderParsingError, TypeError) as hpe: - log.warning( - "Failed to parse headers (url=%s): %s", - _url_from_connection(self, resp_options.request_url), - hpe, - exc_info=True, - ) - - headers = HTTPHeaderDict(httplib_response.msg.items()) - - response = HTTPResponse( - body=httplib_response, - headers=headers, - status=httplib_response.status, - version=httplib_response.version, - version_string=getattr(self, "_http_vsn_str", "HTTP/?"), - reason=httplib_response.reason, - preload_content=resp_options.preload_content, - decode_content=resp_options.decode_content, - original_response=httplib_response, - enforce_content_length=resp_options.enforce_content_length, - request_method=resp_options.request_method, - request_url=resp_options.request_url, - sock_shutdown=_shutdown, - ) - return response - - -class HTTPSConnection(HTTPConnection): - """ - Many of the parameters to this constructor are passed to the underlying SSL - socket by means of :py:func:`urllib3.util.ssl_wrap_socket`. - """ - - default_port = port_by_scheme["https"] # type: ignore[misc] - - cert_reqs: int | str | None = None - ca_certs: str | None = None - ca_cert_dir: str | None = None - ca_cert_data: None | str | bytes = None - ssl_version: int | str | None = None - ssl_minimum_version: int | None = None - ssl_maximum_version: int | None = None - assert_fingerprint: str | None = None - _connect_callback: typing.Callable[..., None] | None = None - - def __init__( - self, - host: str, - port: int | None = None, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 16384, - socket_options: None | ( - connection._TYPE_SOCKET_OPTIONS - ) = HTTPConnection.default_socket_options, - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - cert_reqs: int | str | None = None, - assert_hostname: None | str | typing.Literal[False] = None, - assert_fingerprint: str | None = None, - server_hostname: str | None = None, - ssl_context: ssl.SSLContext | None = None, - ca_certs: str | None = None, - ca_cert_dir: str | None = None, - ca_cert_data: None | str | bytes = None, - ssl_minimum_version: int | None = None, - ssl_maximum_version: int | None = None, - ssl_version: int | str | None = None, # Deprecated - cert_file: str | None = None, - key_file: str | None = None, - key_password: str | None = None, - ) -> None: - super().__init__( - host, - port=port, - timeout=timeout, - source_address=source_address, - blocksize=blocksize, - socket_options=socket_options, - proxy=proxy, - proxy_config=proxy_config, - ) - - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - self.ssl_context = ssl_context - self.server_hostname = server_hostname - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ssl_version = ssl_version - self.ssl_minimum_version = ssl_minimum_version - self.ssl_maximum_version = ssl_maximum_version - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - self.ca_cert_data = ca_cert_data - - # cert_reqs depends on ssl_context so calculate last. - if cert_reqs is None: - if self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - else: - cert_reqs = resolve_cert_reqs(None) - self.cert_reqs = cert_reqs - self._connect_callback = None - - def set_cert( - self, - key_file: str | None = None, - cert_file: str | None = None, - cert_reqs: int | str | None = None, - key_password: str | None = None, - ca_certs: str | None = None, - assert_hostname: None | str | typing.Literal[False] = None, - assert_fingerprint: str | None = None, - ca_cert_dir: str | None = None, - ca_cert_data: None | str | bytes = None, - ) -> None: - """ - This method should only be called once, before the connection is used. - """ - warnings.warn( - "HTTPSConnection.set_cert() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead provide the parameters to the " - "HTTPSConnection constructor.", - category=DeprecationWarning, - stacklevel=2, - ) - - # If cert_reqs is not provided we'll assume CERT_REQUIRED unless we also - # have an SSLContext object in which case we'll use its verify_mode. - if cert_reqs is None: - if self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - else: - cert_reqs = resolve_cert_reqs(None) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - self.ca_cert_data = ca_cert_data - - def connect(self) -> None: - # Today we don't need to be doing this step before the /actual/ socket - # connection, however in the future we'll need to decide whether to - # create a new socket or re-use an existing "shared" socket as a part - # of the HTTP/2 handshake dance. - if self._tunnel_host is not None and self._tunnel_port is not None: - probe_http2_host = self._tunnel_host - probe_http2_port = self._tunnel_port - else: - probe_http2_host = self.host - probe_http2_port = self.port - - # Check if the target origin supports HTTP/2. - # If the value comes back as 'None' it means that the current thread - # is probing for HTTP/2 support. Otherwise, we're waiting for another - # probe to complete, or we get a value right away. - target_supports_http2: bool | None - if "h2" in ssl_.ALPN_PROTOCOLS: - target_supports_http2 = http2_probe.acquire_and_get( - host=probe_http2_host, port=probe_http2_port - ) - else: - # If HTTP/2 isn't going to be offered it doesn't matter if - # the target supports HTTP/2. Don't want to make a probe. - target_supports_http2 = False - - if self._connect_callback is not None: - self._connect_callback( - "before connect", - thread_id=threading.get_ident(), - target_supports_http2=target_supports_http2, - ) - - try: - sock: socket.socket | ssl.SSLSocket - self.sock = sock = self._new_conn() - server_hostname: str = self.host - tls_in_tls = False - - # Do we need to establish a tunnel? - if self.proxy_is_tunneling: - # We're tunneling to an HTTPS origin so need to do TLS-in-TLS. - if self._tunnel_scheme == "https": - # _connect_tls_proxy will verify and assign proxy_is_verified - self.sock = sock = self._connect_tls_proxy(self.host, sock) - tls_in_tls = True - elif self._tunnel_scheme == "http": - self.proxy_is_verified = False - - # If we're tunneling it means we're connected to our proxy. - self._has_connected_to_proxy = True - - self._tunnel() - # Override the host with the one we're requesting data from. - server_hostname = typing.cast(str, self._tunnel_host) - - if self.server_hostname is not None: - server_hostname = self.server_hostname - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn( - ( - f"System time is way off (before {RECENT_DATE}). This will probably " - "lead to SSL verification errors" - ), - SystemTimeWarning, - ) - - # Remove trailing '.' from fqdn hostnames to allow certificate validation - server_hostname_rm_dot = server_hostname.rstrip(".") - - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - sock=sock, - cert_reqs=self.cert_reqs, - ssl_version=self.ssl_version, - ssl_minimum_version=self.ssl_minimum_version, - ssl_maximum_version=self.ssl_maximum_version, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - cert_file=self.cert_file, - key_file=self.key_file, - key_password=self.key_password, - server_hostname=server_hostname_rm_dot, - ssl_context=self.ssl_context, - tls_in_tls=tls_in_tls, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint, - ) - self.sock = sock_and_verified.socket - - # If an error occurs during connection/handshake we may need to release - # our lock so another connection can probe the origin. - except BaseException: - if self._connect_callback is not None: - self._connect_callback( - "after connect failure", - thread_id=threading.get_ident(), - target_supports_http2=target_supports_http2, - ) - - if target_supports_http2 is None: - http2_probe.set_and_release( - host=probe_http2_host, port=probe_http2_port, supports_http2=None - ) - raise - - # If this connection doesn't know if the origin supports HTTP/2 - # we report back to the HTTP/2 probe our result. - if target_supports_http2 is None: - supports_http2 = sock_and_verified.socket.selected_alpn_protocol() == "h2" - http2_probe.set_and_release( - host=probe_http2_host, - port=probe_http2_port, - supports_http2=supports_http2, - ) - - # Forwarding proxies can never have a verified target since - # the proxy is the one doing the verification. Should instead - # use a CONNECT tunnel in order to verify the target. - # See: https://github.com/urllib3/urllib3/issues/3267. - if self.proxy_is_forwarding: - self.is_verified = False - else: - self.is_verified = sock_and_verified.is_verified - - # If there's a proxy to be connected to we are fully connected. - # This is set twice (once above and here) due to forwarding proxies - # not using tunnelling. - self._has_connected_to_proxy = bool(self.proxy) - - # Set `self.proxy_is_verified` unless it's already set while - # establishing a tunnel. - if self._has_connected_to_proxy and self.proxy_is_verified is None: - self.proxy_is_verified = sock_and_verified.is_verified - - def _connect_tls_proxy(self, hostname: str, sock: socket.socket) -> ssl.SSLSocket: - """ - Establish a TLS connection to the proxy using the provided SSL context. - """ - # `_connect_tls_proxy` is called when self._tunnel_host is truthy. - proxy_config = typing.cast(ProxyConfig, self.proxy_config) - ssl_context = proxy_config.ssl_context - sock_and_verified = _ssl_wrap_socket_and_match_hostname( - sock, - cert_reqs=self.cert_reqs, - ssl_version=self.ssl_version, - ssl_minimum_version=self.ssl_minimum_version, - ssl_maximum_version=self.ssl_maximum_version, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - server_hostname=hostname, - ssl_context=ssl_context, - assert_hostname=proxy_config.assert_hostname, - assert_fingerprint=proxy_config.assert_fingerprint, - # Features that aren't implemented for proxies yet: - cert_file=None, - key_file=None, - key_password=None, - tls_in_tls=False, - ) - self.proxy_is_verified = sock_and_verified.is_verified - return sock_and_verified.socket # type: ignore[return-value] - - -class _WrappedAndVerifiedSocket(typing.NamedTuple): - """ - Wrapped socket and whether the connection is - verified after the TLS handshake - """ - - socket: ssl.SSLSocket | SSLTransport - is_verified: bool - - -def _ssl_wrap_socket_and_match_hostname( - sock: socket.socket, - *, - cert_reqs: None | str | int, - ssl_version: None | str | int, - ssl_minimum_version: int | None, - ssl_maximum_version: int | None, - cert_file: str | None, - key_file: str | None, - key_password: str | None, - ca_certs: str | None, - ca_cert_dir: str | None, - ca_cert_data: None | str | bytes, - assert_hostname: None | str | typing.Literal[False], - assert_fingerprint: str | None, - server_hostname: str | None, - ssl_context: ssl.SSLContext | None, - tls_in_tls: bool = False, -) -> _WrappedAndVerifiedSocket: - """Logic for constructing an SSLContext from all TLS parameters, passing - that down into ssl_wrap_socket, and then doing certificate verification - either via hostname or fingerprint. This function exists to guarantee - that both proxies and targets have the same behavior when connecting via TLS. - """ - default_ssl_context = False - if ssl_context is None: - default_ssl_context = True - context = create_urllib3_context( - ssl_version=resolve_ssl_version(ssl_version), - ssl_minimum_version=ssl_minimum_version, - ssl_maximum_version=ssl_maximum_version, - cert_reqs=resolve_cert_reqs(cert_reqs), - ) - else: - context = ssl_context - - context.verify_mode = resolve_cert_reqs(cert_reqs) - - # In some cases, we want to verify hostnames ourselves - if ( - # `ssl` can't verify fingerprints or alternate hostnames - assert_fingerprint - or assert_hostname - # assert_hostname can be set to False to disable hostname checking - or assert_hostname is False - # We still support OpenSSL 1.0.2, which prevents us from verifying - # hostnames easily: https://github.com/pyca/pyopenssl/pull/933 - or ssl_.IS_PYOPENSSL - or not ssl_.HAS_NEVER_CHECK_COMMON_NAME - ): - context.check_hostname = False - - # Try to load OS default certs if none are given. We need to do the hasattr() check - # for custom pyOpenSSL SSLContext objects because they don't support - # load_default_certs(). - if ( - not ca_certs - and not ca_cert_dir - and not ca_cert_data - and default_ssl_context - and hasattr(context, "load_default_certs") - ): - context.load_default_certs() - - # Ensure that IPv6 addresses are in the proper format and don't have a - # scope ID. Python's SSL module fails to recognize scoped IPv6 addresses - # and interprets them as DNS hostnames. - if server_hostname is not None: - normalized = server_hostname.strip("[]") - if "%" in normalized: - normalized = normalized[: normalized.rfind("%")] - if is_ipaddress(normalized): - server_hostname = normalized - - ssl_sock = ssl_wrap_socket( - sock=sock, - keyfile=key_file, - certfile=cert_file, - key_password=key_password, - ca_certs=ca_certs, - ca_cert_dir=ca_cert_dir, - ca_cert_data=ca_cert_data, - server_hostname=server_hostname, - ssl_context=context, - tls_in_tls=tls_in_tls, - ) - - try: - if assert_fingerprint: - _assert_fingerprint( - ssl_sock.getpeercert(binary_form=True), assert_fingerprint - ) - elif ( - context.verify_mode != ssl.CERT_NONE - and not context.check_hostname - and assert_hostname is not False - ): - cert: _TYPE_PEER_CERT_RET_DICT = ssl_sock.getpeercert() # type: ignore[assignment] - - # Need to signal to our match_hostname whether to use 'commonName' or not. - # If we're using our own constructed SSLContext we explicitly set 'False' - # because PyPy hard-codes 'True' from SSLContext.hostname_checks_common_name. - if default_ssl_context: - hostname_checks_common_name = False - else: - hostname_checks_common_name = ( - getattr(context, "hostname_checks_common_name", False) or False - ) - - _match_hostname( - cert, - assert_hostname or server_hostname, # type: ignore[arg-type] - hostname_checks_common_name, - ) - - return _WrappedAndVerifiedSocket( - socket=ssl_sock, - is_verified=context.verify_mode == ssl.CERT_REQUIRED - or bool(assert_fingerprint), - ) - except BaseException: - ssl_sock.close() - raise - - -def _match_hostname( - cert: _TYPE_PEER_CERT_RET_DICT | None, - asserted_hostname: str, - hostname_checks_common_name: bool = False, -) -> None: - # Our upstream implementation of ssl.match_hostname() - # only applies this normalization to IP addresses so it doesn't - # match DNS SANs so we do the same thing! - stripped_hostname = asserted_hostname.strip("[]") - if is_ipaddress(stripped_hostname): - asserted_hostname = stripped_hostname - - try: - match_hostname(cert, asserted_hostname, hostname_checks_common_name) - except CertificateError as e: - log.warning( - "Certificate did not match expected hostname: %s. Certificate: %s", - asserted_hostname, - cert, - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert # type: ignore[attr-defined] - raise - - -def _wrap_proxy_error(err: Exception, proxy_scheme: str | None) -> ProxyError: - # Look for the phrase 'wrong version number', if found - # then we should warn the user that we're very sure that - # this proxy is HTTP-only and they have a configuration issue. - error_normalized = " ".join(re.split("[^a-z]", str(err).lower())) - is_likely_http_proxy = ( - "wrong version number" in error_normalized - or "unknown protocol" in error_normalized - or "record layer failure" in error_normalized - ) - http_proxy_warning = ( - ". Your proxy appears to only use HTTP and not HTTPS, " - "try changing your proxy URL to be HTTP. See: " - "https://urllib3.readthedocs.io/en/latest/advanced-usage.html" - "#https-proxy-error-http-proxy" - ) - new_err = ProxyError( - f"Unable to connect to proxy" - f"{http_proxy_warning if is_likely_http_proxy and proxy_scheme == 'https' else ''}", - err, - ) - new_err.__cause__ = err - return new_err - - -def _get_default_user_agent() -> str: - return f"python-urllib3/{__version__}" - - -class DummyConnection: - """Used to detect a failed ConnectionCls import.""" - - -if not ssl: - HTTPSConnection = DummyConnection # type: ignore[misc, assignment] # noqa: F811 - - -VerifiedHTTPSConnection = HTTPSConnection - - -def _url_from_connection( - conn: HTTPConnection | HTTPSConnection, path: str | None = None -) -> str: - """Returns the URL from a given connection. This is mainly used for testing and logging.""" - - scheme = "https" if isinstance(conn, HTTPSConnection) else "http" - - return Url(scheme=scheme, host=conn.host, port=conn.port, path=path).url diff --git a/myenv/lib/python3.12/site-packages/urllib3/connectionpool.py b/myenv/lib/python3.12/site-packages/urllib3/connectionpool.py deleted file mode 100644 index 3a0685b..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/connectionpool.py +++ /dev/null @@ -1,1178 +0,0 @@ -from __future__ import annotations - -import errno -import logging -import queue -import sys -import typing -import warnings -import weakref -from socket import timeout as SocketTimeout -from types import TracebackType - -from ._base_connection import _TYPE_BODY -from ._collections import HTTPHeaderDict -from ._request_methods import RequestMethods -from .connection import ( - BaseSSLError, - BrokenPipeError, - DummyConnection, - HTTPConnection, - HTTPException, - HTTPSConnection, - ProxyConfig, - _wrap_proxy_error, -) -from .connection import port_by_scheme as port_by_scheme -from .exceptions import ( - ClosedPoolError, - EmptyPoolError, - FullPoolError, - HostChangedError, - InsecureRequestWarning, - LocationValueError, - MaxRetryError, - NewConnectionError, - ProtocolError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, -) -from .response import BaseHTTPResponse -from .util.connection import is_connection_dropped -from .util.proxy import connection_requires_http_tunnel -from .util.request import _TYPE_BODY_POSITION, set_file_position -from .util.retry import Retry -from .util.ssl_match_hostname import CertificateError -from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_DEFAULT, Timeout -from .util.url import Url, _encode_target -from .util.url import _normalize_host as normalize_host -from .util.url import parse_url -from .util.util import to_str - -if typing.TYPE_CHECKING: - import ssl - - from typing_extensions import Self - - from ._base_connection import BaseHTTPConnection, BaseHTTPSConnection - -log = logging.getLogger(__name__) - -_TYPE_TIMEOUT = typing.Union[Timeout, float, _TYPE_DEFAULT, None] - - -# Pool objects -class ConnectionPool: - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - - .. note:: - ConnectionPool.urlopen() does not normalize or percent-encode target URIs - which is useful if your target server doesn't support percent-encoded - target URIs. - """ - - scheme: str | None = None - QueueCls = queue.LifoQueue - - def __init__(self, host: str, port: int | None = None) -> None: - if not host: - raise LocationValueError("No host specified.") - - self.host = _normalize_host(host, scheme=self.scheme) - self.port = port - - # This property uses 'normalize_host()' (not '_normalize_host()') - # to avoid removing square braces around IPv6 addresses. - # This value is sent to `HTTPConnection.set_tunnel()` if called - # because square braces are required for HTTP CONNECT tunneling. - self._tunnel_host = normalize_host(host, scheme=self.scheme).lower() - - def __str__(self) -> str: - return f"{type(self).__name__}(host={self.host!r}, port={self.port!r})" - - def __enter__(self) -> Self: - return self - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> typing.Literal[False]: - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self) -> None: - """ - Close all pooled connections and disable the pool. - """ - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`http.client.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`http.client.HTTPConnection`. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.ProxyManager` - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.ProxyManager` - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = "http" - ConnectionCls: type[BaseHTTPConnection] | type[BaseHTTPSConnection] = HTTPConnection - - def __init__( - self, - host: str, - port: int | None = None, - timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT, - maxsize: int = 1, - block: bool = False, - headers: typing.Mapping[str, str] | None = None, - retries: Retry | bool | int | None = None, - _proxy: Url | None = None, - _proxy_headers: typing.Mapping[str, str] | None = None, - _proxy_config: ProxyConfig | None = None, - **conn_kw: typing.Any, - ): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool: queue.LifoQueue[typing.Any] | None = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - self.proxy_config = _proxy_config - - # Fill the queue up so that doing get() on it will block properly - for _ in range(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault("socket_options", []) - - self.conn_kw["proxy"] = self.proxy - self.conn_kw["proxy_config"] = self.proxy_config - - # Do not pass 'self' as callback to 'finalize'. - # Then the 'finalize' would keep an endless living (leak) to self. - # By just passing a reference to the pool allows the garbage collector - # to free self if nobody else has a reference to it. - pool = self.pool - - # Close all the HTTPConnections in the pool before the - # HTTPConnectionPool object is garbage collected. - weakref.finalize(self, _close_pool_connections, pool) - - def _new_conn(self) -> BaseHTTPConnection: - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTP connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "80", - ) - - conn = self.ConnectionCls( - host=self.host, - port=self.port, - timeout=self.timeout.connect_timeout, - **self.conn_kw, - ) - return conn - - def _get_conn(self, timeout: float | None = None) -> BaseHTTPConnection: - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - - if self.pool is None: - raise ClosedPoolError(self, "Pool is closed.") - - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") from None # Defensive: - - except queue.Empty: - if self.block: - raise EmptyPoolError( - self, - "Pool is empty and a new connection can't be opened due to blocking mode.", - ) from None - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - - return conn or self._new_conn() - - def _put_conn(self, conn: BaseHTTPConnection | None) -> None: - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - if self.pool is not None: - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - if self.block: - # This should never happen if you got the conn from self._get_conn - raise FullPoolError( - self, - "Pool reached maximum size and no more connections are allowed.", - ) from None - - log.warning( - "Connection pool is full, discarding connection: %s. Connection pool size: %s", - self.host, - self.pool.qsize(), - ) - - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn: BaseHTTPConnection) -> None: - """ - Called right before a request is made, after the socket is created. - """ - - def _prepare_proxy(self, conn: BaseHTTPConnection) -> None: - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout: _TYPE_TIMEOUT) -> Timeout: - """Helper that always returns a :class:`urllib3.util.Timeout`""" - if timeout is _DEFAULT_TIMEOUT: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout( - self, - err: BaseSSLError | OSError | SocketTimeout, - url: str, - timeout_value: _TYPE_TIMEOUT | None, - ) -> None: - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError( - self, url, f"Read timed out. (read timeout={timeout_value})" - ) from err - - # See the above comment about EAGAIN in Python 3. - if hasattr(err, "errno") and err.errno in _blocking_errnos: - raise ReadTimeoutError( - self, url, f"Read timed out. (read timeout={timeout_value})" - ) from err - - def _make_request( - self, - conn: BaseHTTPConnection, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - retries: Retry | None = None, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - chunked: bool = False, - response_conn: BaseHTTPConnection | None = None, - preload_content: bool = True, - decode_content: bool = True, - enforce_content_length: bool = True, - ) -> BaseHTTPResponse: - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param response_conn: - Set this to ``None`` if you will handle releasing the connection or - set the connection to have the response release it. - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) - - try: - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # _validate_conn() starts the connection to an HTTPS proxy - # so we need to wrap errors with 'ProxyError' here too. - except ( - OSError, - NewConnectionError, - TimeoutError, - BaseSSLError, - CertificateError, - SSLError, - ) as e: - new_e: Exception = e - if isinstance(e, (BaseSSLError, CertificateError)): - new_e = SSLError(e) - # If the connection didn't successfully connect to it's proxy - # then there - if isinstance( - new_e, (OSError, NewConnectionError, TimeoutError, SSLError) - ) and (conn and conn.proxy and not conn.has_connected_to_proxy): - new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) - raise new_e - - # conn.request() calls http.client.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - try: - conn.request( - method, - url, - body=body, - headers=headers, - chunked=chunked, - preload_content=preload_content, - decode_content=decode_content, - enforce_content_length=enforce_content_length, - ) - - # We are swallowing BrokenPipeError (errno.EPIPE) since the server is - # legitimately able to close the connection after sending a valid response. - # With this behaviour, the received response is still readable. - except BrokenPipeError: - pass - except OSError as e: - # MacOS/Linux - # EPROTOTYPE and ECONNRESET are needed on macOS - # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ - # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. - if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: - raise - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - if not conn.is_closed: - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, f"Read timed out. (read timeout={read_timeout})" - ) - conn.timeout = read_timeout - - # Receive the response from the server - try: - response = conn.getresponse() - except (BaseSSLError, OSError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # Set properties that are used by the pooling layer. - response.retries = retries - response._connection = response_conn # type: ignore[attr-defined] - response._pool = self # type: ignore[attr-defined] - - log.debug( - '%s://%s:%s "%s %s %s" %s %s', - self.scheme, - self.host, - self.port, - method, - url, - response.version_string, - response.status, - response.length_remaining, - ) - - return response - - def close(self) -> None: - """ - Close all pooled connections and disable the pool. - """ - if self.pool is None: - return - # Disable access to the pool - old_pool, self.pool = self.pool, None - - # Close all the HTTPConnections in the pool. - _close_pool_connections(old_pool) - - def is_same_host(self, url: str) -> bool: - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith("/"): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, _, host, port, *_ = parse_url(url) - scheme = scheme or "http" - if host is not None: - host = _normalize_host(host, scheme=scheme) - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen( # type: ignore[override] - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - retries: Retry | bool | int | None = None, - redirect: bool = True, - assert_same_host: bool = True, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - pool_timeout: int | None = None, - release_conn: bool | None = None, - chunked: bool = False, - body_pos: _TYPE_BODY_POSITION | None = None, - preload_content: bool = True, - decode_content: bool = True, - **response_kw: typing.Any, - ) -> BaseHTTPResponse: - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method - such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When ``False``, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param bool preload_content: - If True, the response's body will be preloaded into memory. - - :param bool decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of ``preload_content`` - which defaults to ``True``. - - :param bool chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - """ - parsed_url = parse_url(url) - destination_scheme = parsed_url.scheme - - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = preload_content - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - # Ensure that the URL we're connecting to is properly encoded - if url.startswith("/"): - url = to_str(_encode_target(url)) - else: - url = to_str(parsed_url.url) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] - release_this_conn = release_conn - - http_tunnel_required = connection_requires_http_tunnel( - self.proxy, self.proxy_config, destination_scheme - ) - - # Merge the proxy headers. Only done when not using HTTP CONNECT. We - # have to copy the headers dict so we can safely change it without those - # changes being reflected in anyone else's copy. - if not http_tunnel_required: - headers = headers.copy() # type: ignore[attr-defined] - headers.update(self.proxy_headers) # type: ignore[union-attr] - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] - - # Is this a closed/new connection that requires CONNECT tunnelling? - if self.proxy is not None and http_tunnel_required and conn.is_closed: - try: - self._prepare_proxy(conn) - except (BaseSSLError, OSError, SocketTimeout) as e: - self._raise_timeout( - err=e, url=self.proxy.url, timeout_value=conn.timeout - ) - raise - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Make the request on the HTTPConnection object - response = self._make_request( - conn, - method, - url, - timeout=timeout_obj, - body=body, - headers=headers, - chunked=chunked, - retries=retries, - response_conn=response_conn, - preload_content=preload_content, - decode_content=decode_content, - **response_kw, - ) - - # Everything went great! - clean_exit = True - - except EmptyPoolError: - # Didn't get a connection from the pool, no need to clean up - clean_exit = True - release_this_conn = False - raise - - except ( - TimeoutError, - HTTPException, - OSError, - ProtocolError, - BaseSSLError, - SSLError, - CertificateError, - ProxyError, - ) as e: - # Discard the connection for these exceptions. It will be - # replaced during the next _get_conn() call. - clean_exit = False - new_e: Exception = e - if isinstance(e, (BaseSSLError, CertificateError)): - new_e = SSLError(e) - if isinstance( - new_e, - ( - OSError, - NewConnectionError, - TimeoutError, - SSLError, - HTTPException, - ), - ) and (conn and conn.proxy and not conn.has_connected_to_proxy): - new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) - elif isinstance(new_e, (OSError, HTTPException)): - new_e = ProtocolError("Connection aborted.", new_e) - - retries = retries.increment( - method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2] - ) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - if conn: - conn.close() - conn = None - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning( - "Retrying (%r) after connection broken by '%r': %s", retries, err, url - ) - return self.urlopen( - method, - url, - body, - headers, - retries, - redirect, - assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - preload_content=preload_content, - decode_content=decode_content, - **response_kw, - ) - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - body = None - headers = HTTPHeaderDict(headers)._prepare_for_method_change() - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, - redirect_location, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - preload_content=preload_content, - decode_content=decode_content, - **response_kw, - ) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.headers.get("Retry-After")) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, - url, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - preload_content=preload_content, - decode_content=decode_content, - **response_kw, - ) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - :class:`.HTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl` - is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = "https" - ConnectionCls: type[BaseHTTPSConnection] = HTTPSConnection - - def __init__( - self, - host: str, - port: int | None = None, - timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT, - maxsize: int = 1, - block: bool = False, - headers: typing.Mapping[str, str] | None = None, - retries: Retry | bool | int | None = None, - _proxy: Url | None = None, - _proxy_headers: typing.Mapping[str, str] | None = None, - key_file: str | None = None, - cert_file: str | None = None, - cert_reqs: int | str | None = None, - key_password: str | None = None, - ca_certs: str | None = None, - ssl_version: int | str | None = None, - ssl_minimum_version: ssl.TLSVersion | None = None, - ssl_maximum_version: ssl.TLSVersion | None = None, - assert_hostname: str | typing.Literal[False] | None = None, - assert_fingerprint: str | None = None, - ca_cert_dir: str | None = None, - **conn_kw: typing.Any, - ) -> None: - super().__init__( - host, - port, - timeout, - maxsize, - block, - headers, - retries, - _proxy, - _proxy_headers, - **conn_kw, - ) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.ssl_minimum_version = ssl_minimum_version - self.ssl_maximum_version = ssl_maximum_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_proxy(self, conn: HTTPSConnection) -> None: # type: ignore[override] - """Establishes a tunnel connection through HTTP CONNECT.""" - if self.proxy and self.proxy.scheme == "https": - tunnel_scheme = "https" - else: - tunnel_scheme = "http" - - conn.set_tunnel( - scheme=tunnel_scheme, - host=self._tunnel_host, - port=self.port, - headers=self.proxy_headers, - ) - conn.connect() - - def _new_conn(self) -> BaseHTTPSConnection: - """ - Return a fresh :class:`urllib3.connection.HTTPConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTPS connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "443", - ) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: # type: ignore[comparison-overlap] - raise ImportError( - "Can't connect to HTTPS URL because the SSL module is not available." - ) - - actual_host: str = self.host - actual_port = self.port - if self.proxy is not None and self.proxy.host is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - return self.ConnectionCls( - host=actual_host, - port=actual_port, - timeout=self.timeout.connect_timeout, - cert_file=self.cert_file, - key_file=self.key_file, - key_password=self.key_password, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint, - ssl_version=self.ssl_version, - ssl_minimum_version=self.ssl_minimum_version, - ssl_maximum_version=self.ssl_maximum_version, - **self.conn_kw, - ) - - def _validate_conn(self, conn: BaseHTTPConnection) -> None: - """ - Called right before a request is made, after the socket is created. - """ - super()._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if conn.is_closed: - conn.connect() - - # TODO revise this, see https://github.com/urllib3/urllib3/issues/2791 - if not conn.is_verified and not conn.proxy_is_verified: - warnings.warn( - ( - f"Unverified HTTPS request is being made to host '{conn.host}'. " - "Adding certificate verification is strongly advised. See: " - "https://urllib3.readthedocs.io/en/latest/advanced-usage.html" - "#tls-warnings" - ), - InsecureRequestWarning, - ) - - -def connection_from_url(url: str, **kw: typing.Any) -> HTTPConnectionPool: - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, _, host, port, *_ = parse_url(url) - scheme = scheme or "http" - port = port or port_by_scheme.get(scheme, 80) - if scheme == "https": - return HTTPSConnectionPool(host, port=port, **kw) # type: ignore[arg-type] - else: - return HTTPConnectionPool(host, port=port, **kw) # type: ignore[arg-type] - - -@typing.overload -def _normalize_host(host: None, scheme: str | None) -> None: ... - - -@typing.overload -def _normalize_host(host: str, scheme: str | None) -> str: ... - - -def _normalize_host(host: str | None, scheme: str | None) -> str | None: - """ - Normalize hosts for comparisons and use with sockets. - """ - - host = normalize_host(host, scheme) - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - if host and host.startswith("[") and host.endswith("]"): - host = host[1:-1] - return host - - -def _url_from_pool( - pool: HTTPConnectionPool | HTTPSConnectionPool, path: str | None = None -) -> str: - """Returns the URL from a given connection pool. This is mainly used for testing and logging.""" - return Url(scheme=pool.scheme, host=pool.host, port=pool.port, path=path).url - - -def _close_pool_connections(pool: queue.LifoQueue[typing.Any]) -> None: - """Drains a queue of connections and closes each one.""" - try: - while True: - conn = pool.get(block=False) - if conn: - conn.close() - except queue.Empty: - pass # Done. diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/__init__.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 94b8582..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc deleted file mode 100644 index 30fa92f..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/socks.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/socks.cpython-312.pyc deleted file mode 100644 index bf4eca5..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/socks.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py deleted file mode 100644 index e5b62b2..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from __future__ import annotations - -import urllib3.connection - -from ...connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from .connection import EmscriptenHTTPConnection, EmscriptenHTTPSConnection - - -def inject_into_urllib3() -> None: - # override connection classes to use emscripten specific classes - # n.b. mypy complains about the overriding of classes below - # if it isn't ignored - HTTPConnectionPool.ConnectionCls = EmscriptenHTTPConnection - HTTPSConnectionPool.ConnectionCls = EmscriptenHTTPSConnection - urllib3.connection.HTTPConnection = EmscriptenHTTPConnection # type: ignore[misc,assignment] - urllib3.connection.HTTPSConnection = EmscriptenHTTPSConnection # type: ignore[misc,assignment] - urllib3.connection.VerifiedHTTPSConnection = EmscriptenHTTPSConnection # type: ignore[assignment] diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index fc0ed4a..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index e50d4bc..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc deleted file mode 100644 index c64287a..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc deleted file mode 100644 index 8158e88..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc deleted file mode 100644 index be609c1..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py deleted file mode 100644 index 63f79dd..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py +++ /dev/null @@ -1,260 +0,0 @@ -from __future__ import annotations - -import os -import typing - -# use http.client.HTTPException for consistency with non-emscripten -from http.client import HTTPException as HTTPException # noqa: F401 -from http.client import ResponseNotReady - -from ..._base_connection import _TYPE_BODY -from ...connection import HTTPConnection, ProxyConfig, port_by_scheme -from ...exceptions import TimeoutError -from ...response import BaseHTTPResponse -from ...util.connection import _TYPE_SOCKET_OPTIONS -from ...util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT -from ...util.url import Url -from .fetch import _RequestError, _TimeoutError, send_request, send_streaming_request -from .request import EmscriptenRequest -from .response import EmscriptenHttpResponseWrapper, EmscriptenResponse - -if typing.TYPE_CHECKING: - from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection - - -class EmscriptenHTTPConnection: - default_port: typing.ClassVar[int] = port_by_scheme["http"] - default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] - - timeout: None | (float) - - host: str - port: int - blocksize: int - source_address: tuple[str, int] | None - socket_options: _TYPE_SOCKET_OPTIONS | None - - proxy: Url | None - proxy_config: ProxyConfig | None - - is_verified: bool = False - proxy_is_verified: bool | None = None - - response_class: type[BaseHTTPResponse] = EmscriptenHttpResponseWrapper - _response: EmscriptenResponse | None - - def __init__( - self, - host: str, - port: int = 0, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 8192, - socket_options: _TYPE_SOCKET_OPTIONS | None = None, - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - ) -> None: - self.host = host - self.port = port - self.timeout = timeout if isinstance(timeout, float) else 0.0 - self.scheme = "http" - self._closed = True - self._response = None - # ignore these things because we don't - # have control over that stuff - self.proxy = None - self.proxy_config = None - self.blocksize = blocksize - self.source_address = None - self.socket_options = None - self.is_verified = False - - def set_tunnel( - self, - host: str, - port: int | None = 0, - headers: typing.Mapping[str, str] | None = None, - scheme: str = "http", - ) -> None: - pass - - def connect(self) -> None: - pass - - def request( - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - # We know *at least* botocore is depending on the order of the - # first 3 parameters so to be safe we only mark the later ones - # as keyword-only to ensure we have space to extend. - *, - chunked: bool = False, - preload_content: bool = True, - decode_content: bool = True, - enforce_content_length: bool = True, - ) -> None: - self._closed = False - if url.startswith("/"): - if self.port is not None: - port = f":{self.port}" - else: - port = "" - # no scheme / host / port included, make a full url - url = f"{self.scheme}://{self.host}{port}{url}" - request = EmscriptenRequest( - url=url, - method=method, - timeout=self.timeout if self.timeout else 0, - decode_content=decode_content, - ) - request.set_body(body) - if headers: - for k, v in headers.items(): - request.set_header(k, v) - self._response = None - try: - if not preload_content: - self._response = send_streaming_request(request) - if self._response is None: - self._response = send_request(request) - except _TimeoutError as e: - raise TimeoutError(e.message) from e - except _RequestError as e: - raise HTTPException(e.message) from e - - def getresponse(self) -> BaseHTTPResponse: - if self._response is not None: - return EmscriptenHttpResponseWrapper( - internal_response=self._response, - url=self._response.request.url, - connection=self, - ) - else: - raise ResponseNotReady() - - def close(self) -> None: - self._closed = True - self._response = None - - @property - def is_closed(self) -> bool: - """Whether the connection either is brand new or has been previously closed. - If this property is True then both ``is_connected`` and ``has_connected_to_proxy`` - properties must be False. - """ - return self._closed - - @property - def is_connected(self) -> bool: - """Whether the connection is actively connected to any origin (proxy or target)""" - return True - - @property - def has_connected_to_proxy(self) -> bool: - """Whether the connection has successfully connected to its proxy. - This returns False if no proxy is in use. Used to determine whether - errors are coming from the proxy layer or from tunnelling to the target origin. - """ - return False - - -class EmscriptenHTTPSConnection(EmscriptenHTTPConnection): - default_port = port_by_scheme["https"] - # all this is basically ignored, as browser handles https - cert_reqs: int | str | None = None - ca_certs: str | None = None - ca_cert_dir: str | None = None - ca_cert_data: None | str | bytes = None - cert_file: str | None - key_file: str | None - key_password: str | None - ssl_context: typing.Any | None - ssl_version: int | str | None = None - ssl_minimum_version: int | None = None - ssl_maximum_version: int | None = None - assert_hostname: None | str | typing.Literal[False] - assert_fingerprint: str | None = None - - def __init__( - self, - host: str, - port: int = 0, - *, - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - blocksize: int = 16384, - socket_options: ( - None | _TYPE_SOCKET_OPTIONS - ) = HTTPConnection.default_socket_options, - proxy: Url | None = None, - proxy_config: ProxyConfig | None = None, - cert_reqs: int | str | None = None, - assert_hostname: None | str | typing.Literal[False] = None, - assert_fingerprint: str | None = None, - server_hostname: str | None = None, - ssl_context: typing.Any | None = None, - ca_certs: str | None = None, - ca_cert_dir: str | None = None, - ca_cert_data: None | str | bytes = None, - ssl_minimum_version: int | None = None, - ssl_maximum_version: int | None = None, - ssl_version: int | str | None = None, # Deprecated - cert_file: str | None = None, - key_file: str | None = None, - key_password: str | None = None, - ) -> None: - super().__init__( - host, - port=port, - timeout=timeout, - source_address=source_address, - blocksize=blocksize, - socket_options=socket_options, - proxy=proxy, - proxy_config=proxy_config, - ) - self.scheme = "https" - - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - self.ssl_context = ssl_context - self.server_hostname = server_hostname - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ssl_version = ssl_version - self.ssl_minimum_version = ssl_minimum_version - self.ssl_maximum_version = ssl_maximum_version - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - self.ca_cert_data = ca_cert_data - - self.cert_reqs = None - - # The browser will automatically verify all requests. - # We have no control over that setting. - self.is_verified = True - - def set_cert( - self, - key_file: str | None = None, - cert_file: str | None = None, - cert_reqs: int | str | None = None, - key_password: str | None = None, - ca_certs: str | None = None, - assert_hostname: None | str | typing.Literal[False] = None, - assert_fingerprint: str | None = None, - ca_cert_dir: str | None = None, - ca_cert_data: None | str | bytes = None, - ) -> None: - pass - - -# verify that this class implements BaseHTTP(s) connection correctly -if typing.TYPE_CHECKING: - _supports_http_protocol: BaseHTTPConnection = EmscriptenHTTPConnection("", 0) - _supports_https_protocol: BaseHTTPSConnection = EmscriptenHTTPSConnection("", 0) diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js deleted file mode 100644 index faf141e..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js +++ /dev/null @@ -1,110 +0,0 @@ -let Status = { - SUCCESS_HEADER: -1, - SUCCESS_EOF: -2, - ERROR_TIMEOUT: -3, - ERROR_EXCEPTION: -4, -}; - -let connections = new Map(); -let nextConnectionID = 1; -const encoder = new TextEncoder(); - -self.addEventListener("message", async function (event) { - if (event.data.close) { - let connectionID = event.data.close; - connections.delete(connectionID); - return; - } else if (event.data.getMore) { - let connectionID = event.data.getMore; - let { curOffset, value, reader, intBuffer, byteBuffer } = - connections.get(connectionID); - // if we still have some in buffer, then just send it back straight away - if (!value || curOffset >= value.length) { - // read another buffer if required - try { - let readResponse = await reader.read(); - - if (readResponse.done) { - // read everything - clear connection and return - connections.delete(connectionID); - Atomics.store(intBuffer, 0, Status.SUCCESS_EOF); - Atomics.notify(intBuffer, 0); - // finished reading successfully - // return from event handler - return; - } - curOffset = 0; - connections.get(connectionID).value = readResponse.value; - value = readResponse.value; - } catch (error) { - console.log("Request exception:", error); - let errorBytes = encoder.encode(error.message); - let written = errorBytes.length; - byteBuffer.set(errorBytes); - intBuffer[1] = written; - Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION); - Atomics.notify(intBuffer, 0); - } - } - - // send as much buffer as we can - let curLen = value.length - curOffset; - if (curLen > byteBuffer.length) { - curLen = byteBuffer.length; - } - byteBuffer.set(value.subarray(curOffset, curOffset + curLen), 0); - - Atomics.store(intBuffer, 0, curLen); // store current length in bytes - Atomics.notify(intBuffer, 0); - curOffset += curLen; - connections.get(connectionID).curOffset = curOffset; - - return; - } else { - // start fetch - let connectionID = nextConnectionID; - nextConnectionID += 1; - const intBuffer = new Int32Array(event.data.buffer); - const byteBuffer = new Uint8Array(event.data.buffer, 8); - try { - const response = await fetch(event.data.url, event.data.fetchParams); - // return the headers first via textencoder - var headers = []; - for (const pair of response.headers.entries()) { - headers.push([pair[0], pair[1]]); - } - let headerObj = { - headers: headers, - status: response.status, - connectionID, - }; - const headerText = JSON.stringify(headerObj); - let headerBytes = encoder.encode(headerText); - let written = headerBytes.length; - byteBuffer.set(headerBytes); - intBuffer[1] = written; - // make a connection - connections.set(connectionID, { - reader: response.body.getReader(), - intBuffer: intBuffer, - byteBuffer: byteBuffer, - value: undefined, - curOffset: 0, - }); - // set header ready - Atomics.store(intBuffer, 0, Status.SUCCESS_HEADER); - Atomics.notify(intBuffer, 0); - // all fetching after this goes through a new postmessage call with getMore - // this allows for parallel requests - } catch (error) { - console.log("Request exception:", error); - let errorBytes = encoder.encode(error.message); - let written = errorBytes.length; - byteBuffer.set(errorBytes); - intBuffer[1] = written; - Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION); - Atomics.notify(intBuffer, 0); - } - } -}); -self.postMessage({ inited: true }); diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py deleted file mode 100644 index 612cfdd..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py +++ /dev/null @@ -1,726 +0,0 @@ -""" -Support for streaming http requests in emscripten. - -A few caveats - - -If your browser (or Node.js) has WebAssembly JavaScript Promise Integration enabled -https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration/Overview.md -*and* you launch pyodide using `pyodide.runPythonAsync`, this will fetch data using the -JavaScript asynchronous fetch api (wrapped via `pyodide.ffi.call_sync`). In this case -timeouts and streaming should just work. - -Otherwise, it uses a combination of XMLHttpRequest and a web-worker for streaming. - -This approach has several caveats: - -Firstly, you can't do streaming http in the main UI thread, because atomics.wait isn't allowed. -Streaming only works if you're running pyodide in a web worker. - -Secondly, this uses an extra web worker and SharedArrayBuffer to do the asynchronous fetch -operation, so it requires that you have crossOriginIsolation enabled, by serving over https -(or from localhost) with the two headers below set: - - Cross-Origin-Opener-Policy: same-origin - Cross-Origin-Embedder-Policy: require-corp - -You can tell if cross origin isolation is successfully enabled by looking at the global crossOriginIsolated variable in -JavaScript console. If it isn't, streaming requests will fallback to XMLHttpRequest, i.e. getting the whole -request into a buffer and then returning it. it shows a warning in the JavaScript console in this case. - -Finally, the webworker which does the streaming fetch is created on initial import, but will only be started once -control is returned to javascript. Call `await wait_for_streaming_ready()` to wait for streaming fetch. - -NB: in this code, there are a lot of JavaScript objects. They are named js_* -to make it clear what type of object they are. -""" - -from __future__ import annotations - -import io -import json -from email.parser import Parser -from importlib.resources import files -from typing import TYPE_CHECKING, Any - -import js # type: ignore[import-not-found] -from pyodide.ffi import ( # type: ignore[import-not-found] - JsArray, - JsException, - JsProxy, - to_js, -) - -if TYPE_CHECKING: - from typing_extensions import Buffer - -from .request import EmscriptenRequest -from .response import EmscriptenResponse - -""" -There are some headers that trigger unintended CORS preflight requests. -See also https://github.com/koenvo/pyodide-http/issues/22 -""" -HEADERS_TO_IGNORE = ("user-agent",) - -SUCCESS_HEADER = -1 -SUCCESS_EOF = -2 -ERROR_TIMEOUT = -3 -ERROR_EXCEPTION = -4 - - -class _RequestError(Exception): - def __init__( - self, - message: str | None = None, - *, - request: EmscriptenRequest | None = None, - response: EmscriptenResponse | None = None, - ): - self.request = request - self.response = response - self.message = message - super().__init__(self.message) - - -class _StreamingError(_RequestError): - pass - - -class _TimeoutError(_RequestError): - pass - - -def _obj_from_dict(dict_val: dict[str, Any]) -> JsProxy: - return to_js(dict_val, dict_converter=js.Object.fromEntries) - - -class _ReadStream(io.RawIOBase): - def __init__( - self, - int_buffer: JsArray, - byte_buffer: JsArray, - timeout: float, - worker: JsProxy, - connection_id: int, - request: EmscriptenRequest, - ): - self.int_buffer = int_buffer - self.byte_buffer = byte_buffer - self.read_pos = 0 - self.read_len = 0 - self.connection_id = connection_id - self.worker = worker - self.timeout = int(1000 * timeout) if timeout > 0 else None - self.is_live = True - self._is_closed = False - self.request: EmscriptenRequest | None = request - - def __del__(self) -> None: - self.close() - - # this is compatible with _base_connection - def is_closed(self) -> bool: - return self._is_closed - - # for compatibility with RawIOBase - @property - def closed(self) -> bool: - return self.is_closed() - - def close(self) -> None: - if self.is_closed(): - return - self.read_len = 0 - self.read_pos = 0 - self.int_buffer = None - self.byte_buffer = None - self._is_closed = True - self.request = None - if self.is_live: - self.worker.postMessage(_obj_from_dict({"close": self.connection_id})) - self.is_live = False - super().close() - - def readable(self) -> bool: - return True - - def writable(self) -> bool: - return False - - def seekable(self) -> bool: - return False - - def readinto(self, byte_obj: Buffer) -> int: - if not self.int_buffer: - raise _StreamingError( - "No buffer for stream in _ReadStream.readinto", - request=self.request, - response=None, - ) - if self.read_len == 0: - # wait for the worker to send something - js.Atomics.store(self.int_buffer, 0, ERROR_TIMEOUT) - self.worker.postMessage(_obj_from_dict({"getMore": self.connection_id})) - if ( - js.Atomics.wait(self.int_buffer, 0, ERROR_TIMEOUT, self.timeout) - == "timed-out" - ): - raise _TimeoutError - data_len = self.int_buffer[0] - if data_len > 0: - self.read_len = data_len - self.read_pos = 0 - elif data_len == ERROR_EXCEPTION: - string_len = self.int_buffer[1] - # decode the error string - js_decoder = js.TextDecoder.new() - json_str = js_decoder.decode(self.byte_buffer.slice(0, string_len)) - raise _StreamingError( - f"Exception thrown in fetch: {json_str}", - request=self.request, - response=None, - ) - else: - # EOF, free the buffers and return zero - # and free the request - self.is_live = False - self.close() - return 0 - # copy from int32array to python bytes - ret_length = min(self.read_len, len(memoryview(byte_obj))) - subarray = self.byte_buffer.subarray( - self.read_pos, self.read_pos + ret_length - ).to_py() - memoryview(byte_obj)[0:ret_length] = subarray - self.read_len -= ret_length - self.read_pos += ret_length - return ret_length - - -class _StreamingFetcher: - def __init__(self) -> None: - # make web-worker and data buffer on startup - self.streaming_ready = False - streaming_worker_code = ( - files(__package__) - .joinpath("emscripten_fetch_worker.js") - .read_text(encoding="utf-8") - ) - js_data_blob = js.Blob.new( - to_js([streaming_worker_code], create_pyproxies=False), - _obj_from_dict({"type": "application/javascript"}), - ) - - def promise_resolver(js_resolve_fn: JsProxy, js_reject_fn: JsProxy) -> None: - def onMsg(e: JsProxy) -> None: - self.streaming_ready = True - js_resolve_fn(e) - - def onErr(e: JsProxy) -> None: - js_reject_fn(e) # Defensive: never happens in ci - - self.js_worker.onmessage = onMsg - self.js_worker.onerror = onErr - - js_data_url = js.URL.createObjectURL(js_data_blob) - self.js_worker = js.globalThis.Worker.new(js_data_url) - self.js_worker_ready_promise = js.globalThis.Promise.new(promise_resolver) - - def send(self, request: EmscriptenRequest) -> EmscriptenResponse: - headers = { - k: v for k, v in request.headers.items() if k not in HEADERS_TO_IGNORE - } - - body = request.body - fetch_data = {"headers": headers, "body": to_js(body), "method": request.method} - # start the request off in the worker - timeout = int(1000 * request.timeout) if request.timeout > 0 else None - js_shared_buffer = js.SharedArrayBuffer.new(1048576) - js_int_buffer = js.Int32Array.new(js_shared_buffer) - js_byte_buffer = js.Uint8Array.new(js_shared_buffer, 8) - - js.Atomics.store(js_int_buffer, 0, ERROR_TIMEOUT) - js.Atomics.notify(js_int_buffer, 0) - js_absolute_url = js.URL.new(request.url, js.location).href - self.js_worker.postMessage( - _obj_from_dict( - { - "buffer": js_shared_buffer, - "url": js_absolute_url, - "fetchParams": fetch_data, - } - ) - ) - # wait for the worker to send something - js.Atomics.wait(js_int_buffer, 0, ERROR_TIMEOUT, timeout) - if js_int_buffer[0] == ERROR_TIMEOUT: - raise _TimeoutError( - "Timeout connecting to streaming request", - request=request, - response=None, - ) - elif js_int_buffer[0] == SUCCESS_HEADER: - # got response - # header length is in second int of intBuffer - string_len = js_int_buffer[1] - # decode the rest to a JSON string - js_decoder = js.TextDecoder.new() - # this does a copy (the slice) because decode can't work on shared array - # for some silly reason - json_str = js_decoder.decode(js_byte_buffer.slice(0, string_len)) - # get it as an object - response_obj = json.loads(json_str) - return EmscriptenResponse( - request=request, - status_code=response_obj["status"], - headers=response_obj["headers"], - body=_ReadStream( - js_int_buffer, - js_byte_buffer, - request.timeout, - self.js_worker, - response_obj["connectionID"], - request, - ), - ) - elif js_int_buffer[0] == ERROR_EXCEPTION: - string_len = js_int_buffer[1] - # decode the error string - js_decoder = js.TextDecoder.new() - json_str = js_decoder.decode(js_byte_buffer.slice(0, string_len)) - raise _StreamingError( - f"Exception thrown in fetch: {json_str}", request=request, response=None - ) - else: - raise _StreamingError( - f"Unknown status from worker in fetch: {js_int_buffer[0]}", - request=request, - response=None, - ) - - -class _JSPIReadStream(io.RawIOBase): - """ - A read stream that uses pyodide.ffi.run_sync to read from a JavaScript fetch - response. This requires support for WebAssembly JavaScript Promise Integration - in the containing browser, and for pyodide to be launched via runPythonAsync. - - :param js_read_stream: - The JavaScript stream reader - - :param timeout: - Timeout in seconds - - :param request: - The request we're handling - - :param response: - The response this stream relates to - - :param js_abort_controller: - A JavaScript AbortController object, used for timeouts - """ - - def __init__( - self, - js_read_stream: Any, - timeout: float, - request: EmscriptenRequest, - response: EmscriptenResponse, - js_abort_controller: Any, # JavaScript AbortController for timeouts - ): - self.js_read_stream = js_read_stream - self.timeout = timeout - self._is_closed = False - self._is_done = False - self.request: EmscriptenRequest | None = request - self.response: EmscriptenResponse | None = response - self.current_buffer = None - self.current_buffer_pos = 0 - self.js_abort_controller = js_abort_controller - - def __del__(self) -> None: - self.close() - - # this is compatible with _base_connection - def is_closed(self) -> bool: - return self._is_closed - - # for compatibility with RawIOBase - @property - def closed(self) -> bool: - return self.is_closed() - - def close(self) -> None: - if self.is_closed(): - return - self.read_len = 0 - self.read_pos = 0 - self.js_read_stream.cancel() - self.js_read_stream = None - self._is_closed = True - self._is_done = True - self.request = None - self.response = None - super().close() - - def readable(self) -> bool: - return True - - def writable(self) -> bool: - return False - - def seekable(self) -> bool: - return False - - def _get_next_buffer(self) -> bool: - result_js = _run_sync_with_timeout( - self.js_read_stream.read(), - self.timeout, - self.js_abort_controller, - request=self.request, - response=self.response, - ) - if result_js.done: - self._is_done = True - return False - else: - self.current_buffer = result_js.value.to_py() - self.current_buffer_pos = 0 - return True - - def readinto(self, byte_obj: Buffer) -> int: - if self.current_buffer is None: - if not self._get_next_buffer() or self.current_buffer is None: - self.close() - return 0 - ret_length = min( - len(byte_obj), len(self.current_buffer) - self.current_buffer_pos - ) - byte_obj[0:ret_length] = self.current_buffer[ - self.current_buffer_pos : self.current_buffer_pos + ret_length - ] - self.current_buffer_pos += ret_length - if self.current_buffer_pos == len(self.current_buffer): - self.current_buffer = None - return ret_length - - -# check if we are in a worker or not -def is_in_browser_main_thread() -> bool: - return hasattr(js, "window") and hasattr(js, "self") and js.self == js.window - - -def is_cross_origin_isolated() -> bool: - return hasattr(js, "crossOriginIsolated") and js.crossOriginIsolated - - -def is_in_node() -> bool: - return ( - hasattr(js, "process") - and hasattr(js.process, "release") - and hasattr(js.process.release, "name") - and js.process.release.name == "node" - ) - - -def is_worker_available() -> bool: - return hasattr(js, "Worker") and hasattr(js, "Blob") - - -_fetcher: _StreamingFetcher | None = None - -if is_worker_available() and ( - (is_cross_origin_isolated() and not is_in_browser_main_thread()) - and (not is_in_node()) -): - _fetcher = _StreamingFetcher() -else: - _fetcher = None - - -NODE_JSPI_ERROR = ( - "urllib3 only works in Node.js with pyodide.runPythonAsync" - " and requires the flag --experimental-wasm-stack-switching in " - " versions of node <24." -) - - -def send_streaming_request(request: EmscriptenRequest) -> EmscriptenResponse | None: - if has_jspi(): - return send_jspi_request(request, True) - elif is_in_node(): - raise _RequestError( - message=NODE_JSPI_ERROR, - request=request, - response=None, - ) - - if _fetcher and streaming_ready(): - return _fetcher.send(request) - else: - _show_streaming_warning() - return None - - -_SHOWN_TIMEOUT_WARNING = False - - -def _show_timeout_warning() -> None: - global _SHOWN_TIMEOUT_WARNING - if not _SHOWN_TIMEOUT_WARNING: - _SHOWN_TIMEOUT_WARNING = True - message = "Warning: Timeout is not available on main browser thread" - js.console.warn(message) - - -_SHOWN_STREAMING_WARNING = False - - -def _show_streaming_warning() -> None: - global _SHOWN_STREAMING_WARNING - if not _SHOWN_STREAMING_WARNING: - _SHOWN_STREAMING_WARNING = True - message = "Can't stream HTTP requests because: \n" - if not is_cross_origin_isolated(): - message += " Page is not cross-origin isolated\n" - if is_in_browser_main_thread(): - message += " Python is running in main browser thread\n" - if not is_worker_available(): - message += " Worker or Blob classes are not available in this environment." # Defensive: this is always False in browsers that we test in - if streaming_ready() is False: - message += """ Streaming fetch worker isn't ready. If you want to be sure that streaming fetch -is working, you need to call: 'await urllib3.contrib.emscripten.fetch.wait_for_streaming_ready()`""" - from js import console - - console.warn(message) - - -def send_request(request: EmscriptenRequest) -> EmscriptenResponse: - if has_jspi(): - return send_jspi_request(request, False) - elif is_in_node(): - raise _RequestError( - message=NODE_JSPI_ERROR, - request=request, - response=None, - ) - try: - js_xhr = js.XMLHttpRequest.new() - - if not is_in_browser_main_thread(): - js_xhr.responseType = "arraybuffer" - if request.timeout: - js_xhr.timeout = int(request.timeout * 1000) - else: - js_xhr.overrideMimeType("text/plain; charset=ISO-8859-15") - if request.timeout: - # timeout isn't available on the main thread - show a warning in console - # if it is set - _show_timeout_warning() - - js_xhr.open(request.method, request.url, False) - for name, value in request.headers.items(): - if name.lower() not in HEADERS_TO_IGNORE: - js_xhr.setRequestHeader(name, value) - - js_xhr.send(to_js(request.body)) - - headers = dict(Parser().parsestr(js_xhr.getAllResponseHeaders())) - - if not is_in_browser_main_thread(): - body = js_xhr.response.to_py().tobytes() - else: - body = js_xhr.response.encode("ISO-8859-15") - return EmscriptenResponse( - status_code=js_xhr.status, headers=headers, body=body, request=request - ) - except JsException as err: - if err.name == "TimeoutError": - raise _TimeoutError(err.message, request=request) - elif err.name == "NetworkError": - raise _RequestError(err.message, request=request) - else: - # general http error - raise _RequestError(err.message, request=request) - - -def send_jspi_request( - request: EmscriptenRequest, streaming: bool -) -> EmscriptenResponse: - """ - Send a request using WebAssembly JavaScript Promise Integration - to wrap the asynchronous JavaScript fetch api (experimental). - - :param request: - Request to send - - :param streaming: - Whether to stream the response - - :return: The response object - :rtype: EmscriptenResponse - """ - timeout = request.timeout - js_abort_controller = js.AbortController.new() - headers = {k: v for k, v in request.headers.items() if k not in HEADERS_TO_IGNORE} - req_body = request.body - fetch_data = { - "headers": headers, - "body": to_js(req_body), - "method": request.method, - "signal": js_abort_controller.signal, - } - # Node.js returns the whole response (unlike opaqueredirect in browsers), - # so urllib3 can set `redirect: manual` to control redirects itself. - # https://stackoverflow.com/a/78524615 - if _is_node_js(): - fetch_data["redirect"] = "manual" - # Call JavaScript fetch (async api, returns a promise) - fetcher_promise_js = js.fetch(request.url, _obj_from_dict(fetch_data)) - # Now suspend WebAssembly until we resolve that promise - # or time out. - response_js = _run_sync_with_timeout( - fetcher_promise_js, - timeout, - js_abort_controller, - request=request, - response=None, - ) - headers = {} - header_iter = response_js.headers.entries() - while True: - iter_value_js = header_iter.next() - if getattr(iter_value_js, "done", False): - break - else: - headers[str(iter_value_js.value[0])] = str(iter_value_js.value[1]) - status_code = response_js.status - body: bytes | io.RawIOBase = b"" - - response = EmscriptenResponse( - status_code=status_code, headers=headers, body=b"", request=request - ) - if streaming: - # get via inputstream - if response_js.body is not None: - # get a reader from the fetch response - body_stream_js = response_js.body.getReader() - body = _JSPIReadStream( - body_stream_js, timeout, request, response, js_abort_controller - ) - else: - # get directly via arraybuffer - # n.b. this is another async JavaScript call. - body = _run_sync_with_timeout( - response_js.arrayBuffer(), - timeout, - js_abort_controller, - request=request, - response=response, - ).to_py() - response.body = body - return response - - -def _run_sync_with_timeout( - promise: Any, - timeout: float, - js_abort_controller: Any, - request: EmscriptenRequest | None, - response: EmscriptenResponse | None, -) -> Any: - """ - Await a JavaScript promise synchronously with a timeout which is implemented - via the AbortController - - :param promise: - Javascript promise to await - - :param timeout: - Timeout in seconds - - :param js_abort_controller: - A JavaScript AbortController object, used on timeout - - :param request: - The request being handled - - :param response: - The response being handled (if it exists yet) - - :raises _TimeoutError: If the request times out - :raises _RequestError: If the request raises a JavaScript exception - - :return: The result of awaiting the promise. - """ - timer_id = None - if timeout > 0: - timer_id = js.setTimeout( - js_abort_controller.abort.bind(js_abort_controller), int(timeout * 1000) - ) - try: - from pyodide.ffi import run_sync - - # run_sync here uses WebAssembly JavaScript Promise Integration to - # suspend python until the JavaScript promise resolves. - return run_sync(promise) - except JsException as err: - if err.name == "AbortError": - raise _TimeoutError( - message="Request timed out", request=request, response=response - ) - else: - raise _RequestError(message=err.message, request=request, response=response) - finally: - if timer_id is not None: - js.clearTimeout(timer_id) - - -def has_jspi() -> bool: - """ - Return true if jspi can be used. - - This requires both browser support and also WebAssembly - to be in the correct state - i.e. that the javascript - call into python was async not sync. - - :return: True if jspi can be used. - :rtype: bool - """ - try: - from pyodide.ffi import can_run_sync, run_sync # noqa: F401 - - return bool(can_run_sync()) - except ImportError: - return False - - -def _is_node_js() -> bool: - """ - Check if we are in Node.js. - - :return: True if we are in Node.js. - :rtype: bool - """ - return ( - hasattr(js, "process") - and hasattr(js.process, "release") - # According to the Node.js documentation, the release name is always "node". - and js.process.release.name == "node" - ) - - -def streaming_ready() -> bool | None: - if _fetcher: - return _fetcher.streaming_ready - else: - return None # no fetcher, return None to signify that - - -async def wait_for_streaming_ready() -> bool: - if _fetcher: - await _fetcher.js_worker_ready_promise - return True - else: - return False diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py deleted file mode 100644 index e692e69..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass, field - -from ..._base_connection import _TYPE_BODY - - -@dataclass -class EmscriptenRequest: - method: str - url: str - params: dict[str, str] | None = None - body: _TYPE_BODY | None = None - headers: dict[str, str] = field(default_factory=dict) - timeout: float = 0 - decode_content: bool = True - - def set_header(self, name: str, value: str) -> None: - self.headers[name.capitalize()] = value - - def set_body(self, body: _TYPE_BODY | None) -> None: - self.body = body diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py deleted file mode 100644 index cb1088a..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py +++ /dev/null @@ -1,277 +0,0 @@ -from __future__ import annotations - -import json as _json -import logging -import typing -from contextlib import contextmanager -from dataclasses import dataclass -from http.client import HTTPException as HTTPException -from io import BytesIO, IOBase - -from ...exceptions import InvalidHeader, TimeoutError -from ...response import BaseHTTPResponse -from ...util.retry import Retry -from .request import EmscriptenRequest - -if typing.TYPE_CHECKING: - from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection - -log = logging.getLogger(__name__) - - -@dataclass -class EmscriptenResponse: - status_code: int - headers: dict[str, str] - body: IOBase | bytes - request: EmscriptenRequest - - -class EmscriptenHttpResponseWrapper(BaseHTTPResponse): - def __init__( - self, - internal_response: EmscriptenResponse, - url: str | None = None, - connection: BaseHTTPConnection | BaseHTTPSConnection | None = None, - ): - self._pool = None # set by pool class - self._body = None - self._response = internal_response - self._url = url - self._connection = connection - self._closed = False - super().__init__( - headers=internal_response.headers, - status=internal_response.status_code, - request_url=url, - version=0, - version_string="HTTP/?", - reason="", - decode_content=True, - ) - self.length_remaining = self._init_length(self._response.request.method) - self.length_is_certain = False - - @property - def url(self) -> str | None: - return self._url - - @url.setter - def url(self, url: str | None) -> None: - self._url = url - - @property - def connection(self) -> BaseHTTPConnection | BaseHTTPSConnection | None: - return self._connection - - @property - def retries(self) -> Retry | None: - return self._retries - - @retries.setter - def retries(self, retries: Retry | None) -> None: - # Override the request_url if retries has a redirect location. - self._retries = retries - - def stream( - self, amt: int | None = 2**16, decode_content: bool | None = None - ) -> typing.Generator[bytes]: - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - while True: - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - else: - break - - def _init_length(self, request_method: str | None) -> int | None: - length: int | None - content_length: str | None = self.headers.get("content-length") - - if content_length is not None: - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = {int(val) for val in content_length.split(",")} - if len(lengths) > 1: - raise InvalidHeader( - "Content-Length contained multiple " - "unmatching values (%s)" % content_length - ) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - else: # if content_length is None - length = None - - # Check for responses that shouldn't include a body - if ( - self.status in (204, 304) - or 100 <= self.status < 200 - or request_method == "HEAD" - ): - length = 0 - - return length - - def read( - self, - amt: int | None = None, - decode_content: bool | None = None, # ignored because browser decodes always - cache_content: bool = False, - ) -> bytes: - if ( - self._closed - or self._response is None - or (isinstance(self._response.body, IOBase) and self._response.body.closed) - ): - return b"" - - with self._error_catcher(): - # body has been preloaded as a string by XmlHttpRequest - if not isinstance(self._response.body, IOBase): - self.length_remaining = len(self._response.body) - self.length_is_certain = True - # wrap body in IOStream - self._response.body = BytesIO(self._response.body) - if amt is not None and amt >= 0: - # don't cache partial content - cache_content = False - data = self._response.body.read(amt) - else: # read all we can (and cache it) - data = self._response.body.read() - if cache_content: - self._body = data - if self.length_remaining is not None: - self.length_remaining = max(self.length_remaining - len(data), 0) - if len(data) == 0 or ( - self.length_is_certain and self.length_remaining == 0 - ): - # definitely finished reading, close response stream - self._response.body.close() - return typing.cast(bytes, data) - - def read_chunked( - self, - amt: int | None = None, - decode_content: bool | None = None, - ) -> typing.Generator[bytes]: - # chunked is handled by browser - while True: - bytes = self.read(amt, decode_content) - if not bytes: - break - yield bytes - - def release_conn(self) -> None: - if not self._pool or not self._connection: - return None - - self._pool._put_conn(self._connection) - self._connection = None - - def drain_conn(self) -> None: - self.close() - - @property - def data(self) -> bytes: - if self._body: - return self._body - else: - return self.read(cache_content=True) - - def json(self) -> typing.Any: - """ - Deserializes the body of the HTTP response as a Python object. - - The body of the HTTP response must be encoded using UTF-8, as per - `RFC 8529 Section 8.1 `_. - - To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to - your custom decoder instead. - - If the body of the HTTP response is not decodable to UTF-8, a - `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a - valid JSON document, a `json.JSONDecodeError` will be raised. - - Read more :ref:`here `. - - :returns: The body of the HTTP response as a Python object. - """ - data = self.data.decode("utf-8") - return _json.loads(data) - - def close(self) -> None: - if not self._closed: - if isinstance(self._response.body, IOBase): - self._response.body.close() - if self._connection: - self._connection.close() - self._connection = None - self._closed = True - - @contextmanager - def _error_catcher(self) -> typing.Generator[None]: - """ - Catch Emscripten specific exceptions thrown by fetch.py, - instead re-raising urllib3 variants, so that low-level exceptions - are not leaked in the high-level api. - - On exit, release the connection back to the pool. - """ - from .fetch import _RequestError, _TimeoutError # avoid circular import - - clean_exit = False - - try: - yield - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - except _TimeoutError as e: - raise TimeoutError(str(e)) - except _RequestError as e: - raise HTTPException(str(e)) - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now - if ( - isinstance(self._response.body, IOBase) - and not self._response.body.closed - ): - self._response.body.close() - # release the connection back to the pool - self.release_conn() - else: - # If we have read everything from the response stream, - # return the connection back to the pool. - if ( - isinstance(self._response.body, IOBase) - and self._response.body.closed - ): - self.release_conn() diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py deleted file mode 100644 index 8e05d3d..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,564 +0,0 @@ -""" -Module for using pyOpenSSL as a TLS backend. This module was relevant before -the standard library ``ssl`` module supported SNI, but now that we've dropped -support for Python 2.7 all relevant Python versions support SNI so -**this module is no longer recommended**. - -This needs the following packages installed: - -* `pyOpenSSL`_ (tested with 16.0.0) -* `cryptography`_ (minimum 1.3.4, from pyopenssl) -* `idna`_ (minimum 2.0) - -However, pyOpenSSL depends on cryptography, so while we use all three directly here we -end up having relatively few packages required. - -You can install them with the following command: - -.. code-block:: bash - - $ python -m pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this: - -.. code-block:: python - - try: - import urllib3.contrib.pyopenssl - urllib3.contrib.pyopenssl.inject_into_urllib3() - except ImportError: - pass - -.. _pyopenssl: https://www.pyopenssl.org -.. _cryptography: https://cryptography.io -.. _idna: https://github.com/kjd/idna -""" - -from __future__ import annotations - -import OpenSSL.SSL # type: ignore[import-not-found] -from cryptography import x509 - -try: - from cryptography.x509 import UnsupportedExtension # type: ignore[attr-defined] -except ImportError: - # UnsupportedExtension is gone in cryptography >= 2.1.0 - class UnsupportedExtension(Exception): # type: ignore[no-redef] - pass - - -import logging -import ssl -import typing -from io import BytesIO -from socket import socket as socket_cls -from socket import timeout - -from .. import util - -if typing.TYPE_CHECKING: - from OpenSSL.crypto import X509 # type: ignore[import-not-found] - - -__all__ = ["inject_into_urllib3", "extract_from_urllib3"] - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions: dict[int, int] = { - util.ssl_.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD, # type: ignore[attr-defined] - util.ssl_.PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD, # type: ignore[attr-defined] - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER - + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = {v: k for k, v in _stdlib_to_openssl_verify.items()} - -# The SSLvX values are the most likely to be missing in the future -# but we check them all just to be sure. -_OP_NO_SSLv2_OR_SSLv3: int = getattr(OpenSSL.SSL, "OP_NO_SSLv2", 0) | getattr( - OpenSSL.SSL, "OP_NO_SSLv3", 0 -) -_OP_NO_TLSv1: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1", 0) -_OP_NO_TLSv1_1: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_1", 0) -_OP_NO_TLSv1_2: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_2", 0) -_OP_NO_TLSv1_3: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_3", 0) - -_openssl_to_ssl_minimum_version: dict[int, int] = { - ssl.TLSVersion.MINIMUM_SUPPORTED: _OP_NO_SSLv2_OR_SSLv3, - ssl.TLSVersion.TLSv1: _OP_NO_SSLv2_OR_SSLv3, - ssl.TLSVersion.TLSv1_1: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1, - ssl.TLSVersion.TLSv1_2: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1, - ssl.TLSVersion.TLSv1_3: ( - _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 - ), - ssl.TLSVersion.MAXIMUM_SUPPORTED: ( - _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 - ), -} -_openssl_to_ssl_maximum_version: dict[int, int] = { - ssl.TLSVersion.MINIMUM_SUPPORTED: ( - _OP_NO_SSLv2_OR_SSLv3 - | _OP_NO_TLSv1 - | _OP_NO_TLSv1_1 - | _OP_NO_TLSv1_2 - | _OP_NO_TLSv1_3 - ), - ssl.TLSVersion.TLSv1: ( - _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 | _OP_NO_TLSv1_3 - ), - ssl.TLSVersion.TLSv1_1: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_2 | _OP_NO_TLSv1_3, - ssl.TLSVersion.TLSv1_2: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_3, - ssl.TLSVersion.TLSv1_3: _OP_NO_SSLv2_OR_SSLv3, - ssl.TLSVersion.MAXIMUM_SUPPORTED: _OP_NO_SSLv2_OR_SSLv3, -} - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3() -> None: - "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support." - - _validate_dependencies_met() - - util.SSLContext = PyOpenSSLContext # type: ignore[assignment] - util.ssl_.SSLContext = PyOpenSSLContext # type: ignore[assignment] - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3() -> None: - "Undo monkey-patching by :func:`inject_into_urllib3`." - - util.SSLContext = orig_util_SSLContext - util.ssl_.SSLContext = orig_util_SSLContext - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met() -> None: - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError( - "'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer." - ) - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError( - "'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer." - ) - - -def _dnsname_to_stdlib(name: str) -> str | None: - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - - If the name cannot be idna-encoded then we return None signalling that - the name given should be skipped. - """ - - def idna_encode(name: str) -> bytes | None: - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - import idna - - try: - for prefix in ["*.", "."]: - if name.startswith(prefix): - name = name[len(prefix) :] - return prefix.encode("ascii") + idna.encode(name) - return idna.encode(name) - except idna.core.IDNAError: - return None - - # Don't send IPv6 addresses through the IDNA encoder. - if ":" in name: - return name - - encoded_name = idna_encode(name) - if encoded_name is None: - return None - return encoded_name.decode("utf-8") - - -def get_subj_alt_name(peer_cert: X509) -> list[tuple[str, str]]: - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - cert = peer_cert.to_cryptography() - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except ( - x509.DuplicateExtension, - UnsupportedExtension, - x509.UnsupportedGeneralNameType, - UnicodeError, - ) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - # We also want to skip over names which cannot be idna encoded. - names = [ - ("DNS", name) - for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName)) - if name is not None - ] - names.extend( - ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket: - """API-compatibility wrapper for Python OpenSSL's Connection-class.""" - - def __init__( - self, - connection: OpenSSL.SSL.Connection, - socket: socket_cls, - suppress_ragged_eofs: bool = True, - ) -> None: - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._io_refs = 0 - self._closed = False - - def fileno(self) -> int: - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self) -> None: - if self._io_refs > 0: - self._io_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args: typing.Any, **kwargs: typing.Any) -> bytes: - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return b"" - else: - raise OSError(e.args[0], str(e)) from e - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b"" - else: - raise - except OpenSSL.SSL.WantReadError as e: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") from e - else: - return self.recv(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"read error: {e!r}") from e - else: - return data # type: ignore[no-any-return] - - def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: - try: - return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return 0 - else: - raise OSError(e.args[0], str(e)) from e - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError as e: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") from e - else: - return self.recv_into(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"read error: {e!r}") from e - - def settimeout(self, timeout: float) -> None: - return self.socket.settimeout(timeout) - - def _send_until_done(self, data: bytes) -> int: - while True: - try: - return self.connection.send(data) # type: ignore[no-any-return] - except OpenSSL.SSL.WantWriteError as e: - if not util.wait_for_write(self.socket, self.socket.gettimeout()): - raise timeout() from e - continue - except OpenSSL.SSL.SysCallError as e: - raise OSError(e.args[0], str(e)) from e - - def sendall(self, data: bytes) -> None: - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done( - data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE] - ) - total_sent += sent - - def shutdown(self, how: int) -> None: - try: - self.connection.shutdown() - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"shutdown error: {e!r}") from e - - def close(self) -> None: - self._closed = True - if self._io_refs <= 0: - self._real_close() - - def _real_close(self) -> None: - try: - return self.connection.close() # type: ignore[no-any-return] - except OpenSSL.SSL.Error: - return - - def getpeercert( - self, binary_form: bool = False - ) -> dict[str, list[typing.Any]] | None: - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 # type: ignore[no-any-return] - - if binary_form: - return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509) # type: ignore[no-any-return] - - return { - "subject": ((("commonName", x509.get_subject().CN),),), # type: ignore[dict-item] - "subjectAltName": get_subj_alt_name(x509), - } - - def version(self) -> str: - return self.connection.get_protocol_version_name() # type: ignore[no-any-return] - - def selected_alpn_protocol(self) -> str | None: - alpn_proto = self.connection.get_alpn_proto_negotiated() - return alpn_proto.decode() if alpn_proto else None - - -WrappedSocket.makefile = socket_cls.makefile # type: ignore[attr-defined] - - -class PyOpenSSLContext: - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - - def __init__(self, protocol: int) -> None: - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - self._minimum_version: int = ssl.TLSVersion.MINIMUM_SUPPORTED - self._maximum_version: int = ssl.TLSVersion.MAXIMUM_SUPPORTED - self._verify_flags: int = ssl.VERIFY_X509_TRUSTED_FIRST - - @property - def options(self) -> int: - return self._options - - @options.setter - def options(self, value: int) -> None: - self._options = value - self._set_ctx_options() - - @property - def verify_flags(self) -> int: - return self._verify_flags - - @verify_flags.setter - def verify_flags(self, value: int) -> None: - self._verify_flags = value - self._ctx.get_cert_store().set_flags(self._verify_flags) - - @property - def verify_mode(self) -> int: - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value: ssl.VerifyMode) -> None: - self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback) - - def set_default_verify_paths(self) -> None: - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers: bytes | str) -> None: - if isinstance(ciphers, str): - ciphers = ciphers.encode("utf-8") - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations( - self, - cafile: str | None = None, - capath: str | None = None, - cadata: bytes | None = None, - ) -> None: - if cafile is not None: - cafile = cafile.encode("utf-8") # type: ignore[assignment] - if capath is not None: - capath = capath.encode("utf-8") # type: ignore[assignment] - try: - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"unable to load trusted certificates: {e!r}") from e - - def load_cert_chain( - self, - certfile: str, - keyfile: str | None = None, - password: str | None = None, - ) -> None: - try: - self._ctx.use_certificate_chain_file(certfile) - if password is not None: - if not isinstance(password, bytes): - password = password.encode("utf-8") # type: ignore[assignment] - self._ctx.set_passwd_cb(lambda *_: password) - self._ctx.use_privatekey_file(keyfile or certfile) - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"Unable to load certificate chain: {e!r}") from e - - def set_alpn_protocols(self, protocols: list[bytes | str]) -> None: - protocols = [util.util.to_bytes(p, "ascii") for p in protocols] - return self._ctx.set_alpn_protos(protocols) # type: ignore[no-any-return] - - def wrap_socket( - self, - sock: socket_cls, - server_side: bool = False, - do_handshake_on_connect: bool = True, - suppress_ragged_eofs: bool = True, - server_hostname: bytes | str | None = None, - ) -> WrappedSocket: - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - # If server_hostname is an IP, don't use it for SNI, per RFC6066 Section 3 - if server_hostname and not util.ssl_.is_ipaddress(server_hostname): - if isinstance(server_hostname, str): - server_hostname = server_hostname.encode("utf-8") - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError as e: - if not util.wait_for_read(sock, sock.gettimeout()): - raise timeout("select timed out") from e - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError(f"bad handshake: {e!r}") from e - break - - return WrappedSocket(cnx, sock) - - def _set_ctx_options(self) -> None: - self._ctx.set_options( - self._options - | _openssl_to_ssl_minimum_version[self._minimum_version] - | _openssl_to_ssl_maximum_version[self._maximum_version] - ) - - @property - def minimum_version(self) -> int: - return self._minimum_version - - @minimum_version.setter - def minimum_version(self, minimum_version: int) -> None: - self._minimum_version = minimum_version - self._set_ctx_options() - - @property - def maximum_version(self) -> int: - return self._maximum_version - - @maximum_version.setter - def maximum_version(self, maximum_version: int) -> None: - self._maximum_version = maximum_version - self._set_ctx_options() - - -def _verify_callback( - cnx: OpenSSL.SSL.Connection, - x509: X509, - err_no: int, - err_depth: int, - return_code: int, -) -> bool: - return err_no == 0 diff --git a/myenv/lib/python3.12/site-packages/urllib3/contrib/socks.py b/myenv/lib/python3.12/site-packages/urllib3/contrib/socks.py deleted file mode 100644 index e3239b5..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/contrib/socks.py +++ /dev/null @@ -1,228 +0,0 @@ -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4, SOCKS4A (an extension of SOCKS4), and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4A (``proxy_url='socks4a://...``) -- SOCKS4 (``proxy_url='socks4://...``) -- SOCKS5 with remote DNS (``proxy_url='socks5h://...``) -- SOCKS5 with local DNS (``proxy_url='socks5://...``) -- Usernames and passwords for the SOCKS proxy - -.. note:: - It is recommended to use ``socks5h://`` or ``socks4a://`` schemes in - your ``proxy_url`` to ensure that DNS resolution is done from the remote - server instead of client-side when connecting to a domain name. - -SOCKS4 supports IPv4 and domain names with the SOCKS4A extension. SOCKS5 -supports IPv4, IPv6, and domain names. - -When connecting to a SOCKS4 proxy the ``username`` portion of the ``proxy_url`` -will be sent as the ``userid`` section of the SOCKS request: - -.. code-block:: python - - proxy_url="socks4a://@proxy-host" - -When connecting to a SOCKS5 proxy the ``username`` and ``password`` portion -of the ``proxy_url`` will be sent as the username/password to authenticate -with the proxy: - -.. code-block:: python - - proxy_url="socks5h://:@proxy-host" - -""" - -from __future__ import annotations - -try: - import socks # type: ignore[import-untyped] -except ImportError: - import warnings - - from ..exceptions import DependencyWarning - - warnings.warn( - ( - "SOCKS support in urllib3 requires the installation of optional " - "dependencies: specifically, PySocks. For more information, see " - "https://urllib3.readthedocs.io/en/latest/advanced-usage.html#socks-proxies" - ), - DependencyWarning, - ) - raise - -import typing -from socket import timeout as SocketTimeout - -from ..connection import HTTPConnection, HTTPSConnection -from ..connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None # type: ignore[assignment] - - -class _TYPE_SOCKS_OPTIONS(typing.TypedDict): - socks_version: int - proxy_host: str | None - proxy_port: str | None - username: str | None - password: str | None - rdns: bool - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - - def __init__( - self, - _socks_options: _TYPE_SOCKS_OPTIONS, - *args: typing.Any, - **kwargs: typing.Any, - ) -> None: - self._socks_options = _socks_options - super().__init__(*args, **kwargs) - - def _new_conn(self) -> socks.socksocket: - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw: dict[str, typing.Any] = {} - if self.source_address: - extra_kw["source_address"] = self.source_address - - if self.socket_options: - extra_kw["socket_options"] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options["socks_version"], - proxy_addr=self._socks_options["proxy_host"], - proxy_port=self._socks_options["proxy_port"], - proxy_username=self._socks_options["username"], - proxy_password=self._socks_options["password"], - proxy_rdns=self._socks_options["rdns"], - timeout=self.timeout, - **extra_kw, - ) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, - f"Connection to {self.host} timed out. (connect timeout={self.timeout})", - ) from e - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - f"Connection to {self.host} timed out. (connect timeout={self.timeout})", - ) from e - else: - # Adding `from e` messes with coverage somehow, so it's omitted. - # See #2386. - raise NewConnectionError( - self, f"Failed to establish a new connection: {error}" - ) - else: - raise NewConnectionError( - self, f"Failed to establish a new connection: {e}" - ) from e - - except OSError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, f"Failed to establish a new connection: {e}" - ) from e - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - - pool_classes_by_scheme = { - "http": SOCKSHTTPConnectionPool, - "https": SOCKSHTTPSConnectionPool, - } - - def __init__( - self, - proxy_url: str, - username: str | None = None, - password: str | None = None, - num_pools: int = 10, - headers: typing.Mapping[str, str] | None = None, - **connection_pool_kw: typing.Any, - ): - parsed = parse_url(proxy_url) - - if username is None and password is None and parsed.auth is not None: - split = parsed.auth.split(":") - if len(split) == 2: - username, password = split - if parsed.scheme == "socks5": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == "socks5h": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == "socks4": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == "socks4a": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError(f"Unable to determine SOCKS version from {proxy_url}") - - self.proxy_url = proxy_url - - socks_options = { - "socks_version": socks_version, - "proxy_host": parsed.host, - "proxy_port": parsed.port, - "username": username, - "password": password, - "rdns": rdns, - } - connection_pool_kw["_socks_options"] = socks_options - - super().__init__(num_pools, headers, **connection_pool_kw) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/myenv/lib/python3.12/site-packages/urllib3/exceptions.py b/myenv/lib/python3.12/site-packages/urllib3/exceptions.py deleted file mode 100644 index 58723fa..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/exceptions.py +++ /dev/null @@ -1,335 +0,0 @@ -from __future__ import annotations - -import socket -import typing -import warnings -from email.errors import MessageDefect -from http.client import IncompleteRead as httplib_IncompleteRead - -if typing.TYPE_CHECKING: - from .connection import HTTPConnection - from .connectionpool import ConnectionPool - from .response import HTTPResponse - from .util.retry import Retry - -# Base Exceptions - - -class HTTPError(Exception): - """Base exception used by this module.""" - - -class HTTPWarning(Warning): - """Base warning used by this module.""" - - -_TYPE_REDUCE_RESULT = tuple[typing.Callable[..., object], tuple[object, ...]] - - -class PoolError(HTTPError): - """Base exception for errors caused within a pool.""" - - def __init__(self, pool: ConnectionPool, message: str) -> None: - self.pool = pool - self._message = message - super().__init__(f"{pool}: {message}") - - def __reduce__(self) -> _TYPE_REDUCE_RESULT: - # For pickling purposes. - return self.__class__, (None, self._message) - - -class RequestError(PoolError): - """Base exception for PoolErrors that have associated URLs.""" - - def __init__(self, pool: ConnectionPool, url: str | None, message: str) -> None: - self.url = url - super().__init__(pool, message) - - def __reduce__(self) -> _TYPE_REDUCE_RESULT: - # For pickling purposes. - return self.__class__, (None, self.url, self._message) - - -class SSLError(HTTPError): - """Raised when SSL certificate fails in an HTTPS connection.""" - - -class ProxyError(HTTPError): - """Raised when the connection to a proxy fails.""" - - # The original error is also available as __cause__. - original_error: Exception - - def __init__(self, message: str, error: Exception) -> None: - super().__init__(message, error) - self.original_error = error - - -class DecodeError(HTTPError): - """Raised when automatic decoding based on Content-Type fails.""" - - -class ProtocolError(HTTPError): - """Raised when something unexpected happens mid-request/response.""" - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param str url: The requested Url - :param reason: The underlying error - :type reason: :class:`Exception` - - """ - - def __init__( - self, pool: ConnectionPool, url: str | None, reason: Exception | None = None - ) -> None: - self.reason = reason - - message = f"Max retries exceeded with url: {url} (Caused by {reason!r})" - - super().__init__(pool, url, message) - - def __reduce__(self) -> _TYPE_REDUCE_RESULT: - # For pickling purposes. - return self.__class__, (None, self.url, self.reason) - - -class HostChangedError(RequestError): - """Raised when an existing pool gets a request for a foreign host.""" - - def __init__( - self, pool: ConnectionPool, url: str, retries: Retry | int = 3 - ) -> None: - message = f"Tried to open a foreign host with url: {url}" - super().__init__(pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """Raised when passing an invalid state to a timeout""" - - -class TimeoutError(HTTPError): - """Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - ` and :exc:`ConnectTimeoutErrors `. - """ - - -class ReadTimeoutError(TimeoutError, RequestError): - """Raised when a socket timeout occurs while receiving data from a server""" - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - """Raised when a socket timeout occurs while connecting to a server""" - - -class NewConnectionError(ConnectTimeoutError, HTTPError): - """Raised when we fail to establish a new connection. Usually ECONNREFUSED.""" - - def __init__(self, conn: HTTPConnection, message: str) -> None: - self.conn = conn - self._message = message - super().__init__(f"{conn}: {message}") - - def __reduce__(self) -> _TYPE_REDUCE_RESULT: - # For pickling purposes. - return self.__class__, (None, self._message) - - @property - def pool(self) -> HTTPConnection: - warnings.warn( - "The 'pool' property is deprecated and will be removed " - "in urllib3 v2.1.0. Use 'conn' instead.", - DeprecationWarning, - stacklevel=2, - ) - - return self.conn - - -class NameResolutionError(NewConnectionError): - """Raised when host name resolution fails.""" - - def __init__(self, host: str, conn: HTTPConnection, reason: socket.gaierror): - message = f"Failed to resolve '{host}' ({reason})" - self._host = host - self._reason = reason - super().__init__(conn, message) - - def __reduce__(self) -> _TYPE_REDUCE_RESULT: - # For pickling purposes. - return self.__class__, (self._host, None, self._reason) - - -class EmptyPoolError(PoolError): - """Raised when a pool runs out of connections and no more are allowed.""" - - -class FullPoolError(PoolError): - """Raised when we try to add a connection to a full pool in blocking mode.""" - - -class ClosedPoolError(PoolError): - """Raised when a request enters a pool after the pool has been closed.""" - - -class LocationValueError(ValueError, HTTPError): - """Raised when there is something wrong with a given URL input.""" - - -class LocationParseError(LocationValueError): - """Raised when get_host or similar fails to parse the URL input.""" - - def __init__(self, location: str) -> None: - message = f"Failed to parse: {location}" - super().__init__(message) - - self.location = location - - -class URLSchemeUnknown(LocationValueError): - """Raised when a URL input has an unsupported scheme.""" - - def __init__(self, scheme: str): - message = f"Not supported URL scheme {scheme}" - super().__init__(message) - - self.scheme = scheme - - -class ResponseError(HTTPError): - """Used as a container for an error reason supplied in a MaxRetryError.""" - - GENERIC_ERROR = "too many error responses" - SPECIFIC_ERROR = "too many {status_code} error responses" - - -class SecurityWarning(HTTPWarning): - """Warned when performing security reducing actions""" - - -class InsecureRequestWarning(SecurityWarning): - """Warned when making an unverified HTTPS request.""" - - -class NotOpenSSLWarning(SecurityWarning): - """Warned when using unsupported SSL library""" - - -class SystemTimeWarning(SecurityWarning): - """Warned when system time is suspected to be wrong""" - - -class InsecurePlatformWarning(SecurityWarning): - """Warned when certain TLS/SSL configuration is not available on a platform.""" - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - - -class ResponseNotChunked(ProtocolError, ValueError): - """Response needs to be chunked in order to read it as chunks.""" - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be :class:`http.client.HTTPResponse` like - (have an fp attribute which returns raw chunks) for read_chunked(). - """ - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of :class:`http.client.IncompleteRead` to allow int value - for ``partial`` to avoid creating large objects on streamed reads. - """ - - partial: int # type: ignore[assignment] - expected: int - - def __init__(self, partial: int, expected: int) -> None: - self.partial = partial - self.expected = expected - - def __repr__(self) -> str: - return "IncompleteRead(%i bytes read, %i more expected)" % ( - self.partial, - self.expected, - ) - - -class InvalidChunkLength(HTTPError, httplib_IncompleteRead): - """Invalid chunk length in a chunked response.""" - - def __init__(self, response: HTTPResponse, length: bytes) -> None: - self.partial: int = response.tell() # type: ignore[assignment] - self.expected: int | None = response.length_remaining - self.response = response - self.length = length - - def __repr__(self) -> str: - return "InvalidChunkLength(got length %r, %i bytes read)" % ( - self.length, - self.partial, - ) - - -class InvalidHeader(HTTPError): - """The header provided was somehow invalid.""" - - -class ProxySchemeUnknown(AssertionError, URLSchemeUnknown): - """ProxyManager does not support the supplied scheme""" - - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme: str | None) -> None: - # 'localhost' is here because our URL parser parses - # localhost:8080 -> scheme=localhost, remove if we fix this. - if scheme == "localhost": - scheme = None - if scheme is None: - message = "Proxy URL had no scheme, should start with http:// or https://" - else: - message = f"Proxy URL had unsupported scheme {scheme}, should use http:// or https://" - super().__init__(message) - - -class ProxySchemeUnsupported(ValueError): - """Fetching HTTPS resources through HTTPS proxies is unsupported""" - - -class HeaderParsingError(HTTPError): - """Raised by assert_header_parsing, but we convert it to a log.warning statement.""" - - def __init__( - self, defects: list[MessageDefect], unparsed_data: bytes | str | None - ) -> None: - message = f"{defects or 'Unknown'}, unparsed data: {unparsed_data!r}" - super().__init__(message) - - -class UnrewindableBodyError(HTTPError): - """urllib3 encountered an error when trying to rewind a body""" diff --git a/myenv/lib/python3.12/site-packages/urllib3/fields.py b/myenv/lib/python3.12/site-packages/urllib3/fields.py deleted file mode 100644 index 97c4730..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/fields.py +++ /dev/null @@ -1,341 +0,0 @@ -from __future__ import annotations - -import email.utils -import mimetypes -import typing - -_TYPE_FIELD_VALUE = typing.Union[str, bytes] -_TYPE_FIELD_VALUE_TUPLE = typing.Union[ - _TYPE_FIELD_VALUE, - tuple[str, _TYPE_FIELD_VALUE], - tuple[str, _TYPE_FIELD_VALUE, str], -] - - -def guess_content_type( - filename: str | None, default: str = "application/octet-stream" -) -> str: - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param_rfc2231(name: str, value: _TYPE_FIELD_VALUE) -> str: - """ - Helper function to format and quote a single header parameter using the - strategy defined in RFC 2231. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows - `RFC 2388 Section 4.4 `_. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as ``bytes`` or `str``. - :returns: - An RFC-2231-formatted unicode string. - - .. deprecated:: 2.0.0 - Will be removed in urllib3 v2.1.0. This is not valid for - ``multipart/form-data`` header parameters. - """ - import warnings - - warnings.warn( - "'format_header_param_rfc2231' is deprecated and will be " - "removed in urllib3 v2.1.0. This is not valid for " - "multipart/form-data header parameters.", - DeprecationWarning, - stacklevel=2, - ) - - if isinstance(value, bytes): - value = value.decode("utf-8") - - if not any(ch in value for ch in '"\\\r\n'): - result = f'{name}="{value}"' - try: - result.encode("ascii") - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - - value = email.utils.encode_rfc2231(value, "utf-8") - value = f"{name}*={value}" - - return value - - -def format_multipart_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str: - """ - Format and quote a single multipart header parameter. - - This follows the `WHATWG HTML Standard`_ as of 2021/06/10, matching - the behavior of current browser and curl versions. Values are - assumed to be UTF-8. The ``\\n``, ``\\r``, and ``"`` characters are - percent encoded. - - .. _WHATWG HTML Standard: - https://html.spec.whatwg.org/multipage/ - form-control-infrastructure.html#multipart-form-data - - :param name: - The name of the parameter, an ASCII-only ``str``. - :param value: - The value of the parameter, a ``str`` or UTF-8 encoded - ``bytes``. - :returns: - A string ``name="value"`` with the escaped value. - - .. versionchanged:: 2.0.0 - Matches the WHATWG HTML Standard as of 2021/06/10. Control - characters are no longer percent encoded. - - .. versionchanged:: 2.0.0 - Renamed from ``format_header_param_html5`` and - ``format_header_param``. The old names will be removed in - urllib3 v2.1.0. - """ - if isinstance(value, bytes): - value = value.decode("utf-8") - - # percent encode \n \r " - value = value.translate({10: "%0A", 13: "%0D", 34: "%22"}) - return f'{name}="{value}"' - - -def format_header_param_html5(name: str, value: _TYPE_FIELD_VALUE) -> str: - """ - .. deprecated:: 2.0.0 - Renamed to :func:`format_multipart_header_param`. Will be - removed in urllib3 v2.1.0. - """ - import warnings - - warnings.warn( - "'format_header_param_html5' has been renamed to " - "'format_multipart_header_param'. The old name will be " - "removed in urllib3 v2.1.0.", - DeprecationWarning, - stacklevel=2, - ) - return format_multipart_header_param(name, value) - - -def format_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str: - """ - .. deprecated:: 2.0.0 - Renamed to :func:`format_multipart_header_param`. Will be - removed in urllib3 v2.1.0. - """ - import warnings - - warnings.warn( - "'format_header_param' has been renamed to " - "'format_multipart_header_param'. The old name will be " - "removed in urllib3 v2.1.0.", - DeprecationWarning, - stacklevel=2, - ) - return format_multipart_header_param(name, value) - - -class RequestField: - """ - A data container for request body parameters. - - :param name: - The name of this request field. Must be unicode. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. Must be unicode. - :param headers: - An optional dict-like object of headers to initially use for the field. - - .. versionchanged:: 2.0.0 - The ``header_formatter`` parameter is deprecated and will - be removed in urllib3 v2.1.0. - """ - - def __init__( - self, - name: str, - data: _TYPE_FIELD_VALUE, - filename: str | None = None, - headers: typing.Mapping[str, str] | None = None, - header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None, - ): - self._name = name - self._filename = filename - self.data = data - self.headers: dict[str, str | None] = {} - if headers: - self.headers = dict(headers) - - if header_formatter is not None: - import warnings - - warnings.warn( - "The 'header_formatter' parameter is deprecated and " - "will be removed in urllib3 v2.1.0.", - DeprecationWarning, - stacklevel=2, - ) - self.header_formatter = header_formatter - else: - self.header_formatter = format_multipart_header_param - - @classmethod - def from_tuples( - cls, - fieldname: str, - value: _TYPE_FIELD_VALUE_TUPLE, - header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None, - ) -> RequestField: - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - filename: str | None - content_type: str | None - data: _TYPE_FIELD_VALUE - - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls( - fieldname, data, filename=filename, header_formatter=header_formatter - ) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name: str, value: _TYPE_FIELD_VALUE) -> str: - """ - Override this method to change how each multipart header - parameter is formatted. By default, this calls - :func:`format_multipart_header_param`. - - :param name: - The name of the parameter, an ASCII-only ``str``. - :param value: - The value of the parameter, a ``str`` or UTF-8 encoded - ``bytes``. - - :meta public: - """ - return self.header_formatter(name, value) - - def _render_parts( - self, - header_parts: ( - dict[str, _TYPE_FIELD_VALUE | None] - | typing.Sequence[tuple[str, _TYPE_FIELD_VALUE | None]] - ), - ) -> str: - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - iterable: typing.Iterable[tuple[str, _TYPE_FIELD_VALUE | None]] - - parts = [] - if isinstance(header_parts, dict): - iterable = header_parts.items() - else: - iterable = header_parts - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return "; ".join(parts) - - def render_headers(self) -> str: - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ["Content-Disposition", "Content-Type", "Content-Location"] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append(f"{sort_key}: {self.headers[sort_key]}") - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append(f"{header_name}: {header_value}") - - lines.append("\r\n") - return "\r\n".join(lines) - - def make_multipart( - self, - content_disposition: str | None = None, - content_type: str | None = None, - content_location: str | None = None, - ) -> None: - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_disposition: - The 'Content-Disposition' of the request body. Defaults to 'form-data' - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - content_disposition = (content_disposition or "form-data") + "; ".join( - [ - "", - self._render_parts( - (("name", self._name), ("filename", self._filename)) - ), - ] - ) - - self.headers["Content-Disposition"] = content_disposition - self.headers["Content-Type"] = content_type - self.headers["Content-Location"] = content_location diff --git a/myenv/lib/python3.12/site-packages/urllib3/filepost.py b/myenv/lib/python3.12/site-packages/urllib3/filepost.py deleted file mode 100644 index 14f70b0..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/filepost.py +++ /dev/null @@ -1,89 +0,0 @@ -from __future__ import annotations - -import binascii -import codecs -import os -import typing -from io import BytesIO - -from .fields import _TYPE_FIELD_VALUE_TUPLE, RequestField - -writer = codecs.lookup("utf-8")[3] - -_TYPE_FIELDS_SEQUENCE = typing.Sequence[ - typing.Union[tuple[str, _TYPE_FIELD_VALUE_TUPLE], RequestField] -] -_TYPE_FIELDS = typing.Union[ - _TYPE_FIELDS_SEQUENCE, - typing.Mapping[str, _TYPE_FIELD_VALUE_TUPLE], -] - - -def choose_boundary() -> str: - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - return binascii.hexlify(os.urandom(16)).decode() - - -def iter_field_objects(fields: _TYPE_FIELDS) -> typing.Iterable[RequestField]: - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - iterable: typing.Iterable[RequestField | tuple[str, _TYPE_FIELD_VALUE_TUPLE]] - - if isinstance(fields, typing.Mapping): - iterable = fields.items() - else: - iterable = fields - - for field in iterable: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def encode_multipart_formdata( - fields: _TYPE_FIELDS, boundary: str | None = None -) -> tuple[bytes, str]: - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - Values are processed by :func:`urllib3.fields.RequestField.from_tuples`. - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`urllib3.filepost.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(f"--{boundary}\r\n".encode("latin-1")) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, str): - writer(body).write(data) - else: - body.write(data) - - body.write(b"\r\n") - - body.write(f"--{boundary}--\r\n".encode("latin-1")) - - content_type = f"multipart/form-data; boundary={boundary}" - - return body.getvalue(), content_type diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/__init__.py b/myenv/lib/python3.12/site-packages/urllib3/http2/__init__.py deleted file mode 100644 index 133e1d8..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/http2/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -from __future__ import annotations - -from importlib.metadata import version - -__all__ = [ - "inject_into_urllib3", - "extract_from_urllib3", -] - -import typing - -orig_HTTPSConnection: typing.Any = None - - -def inject_into_urllib3() -> None: - # First check if h2 version is valid - h2_version = version("h2") - if not h2_version.startswith("4."): - raise ImportError( - "urllib3 v2 supports h2 version 4.x.x, currently " - f"the 'h2' module is compiled with {h2_version!r}. " - "See: https://github.com/urllib3/urllib3/issues/3290" - ) - - # Import here to avoid circular dependencies. - from .. import connection as urllib3_connection - from .. import util as urllib3_util - from ..connectionpool import HTTPSConnectionPool - from ..util import ssl_ as urllib3_util_ssl - from .connection import HTTP2Connection - - global orig_HTTPSConnection - orig_HTTPSConnection = urllib3_connection.HTTPSConnection - - HTTPSConnectionPool.ConnectionCls = HTTP2Connection - urllib3_connection.HTTPSConnection = HTTP2Connection # type: ignore[misc] - - # TODO: Offer 'http/1.1' as well, but for testing purposes this is handy. - urllib3_util.ALPN_PROTOCOLS = ["h2"] - urllib3_util_ssl.ALPN_PROTOCOLS = ["h2"] - - -def extract_from_urllib3() -> None: - from .. import connection as urllib3_connection - from .. import util as urllib3_util - from ..connectionpool import HTTPSConnectionPool - from ..util import ssl_ as urllib3_util_ssl - - HTTPSConnectionPool.ConnectionCls = orig_HTTPSConnection - urllib3_connection.HTTPSConnection = orig_HTTPSConnection # type: ignore[misc] - - urllib3_util.ALPN_PROTOCOLS = ["http/1.1"] - urllib3_util_ssl.ALPN_PROTOCOLS = ["http/1.1"] diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 3aa67f9..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index 920f28e..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc deleted file mode 100644 index a3323ca..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/connection.py b/myenv/lib/python3.12/site-packages/urllib3/http2/connection.py deleted file mode 100644 index 0a026da..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/http2/connection.py +++ /dev/null @@ -1,356 +0,0 @@ -from __future__ import annotations - -import logging -import re -import threading -import types -import typing - -import h2.config -import h2.connection -import h2.events - -from .._base_connection import _TYPE_BODY -from .._collections import HTTPHeaderDict -from ..connection import HTTPSConnection, _get_default_user_agent -from ..exceptions import ConnectionError -from ..response import BaseHTTPResponse - -orig_HTTPSConnection = HTTPSConnection - -T = typing.TypeVar("T") - -log = logging.getLogger(__name__) - -RE_IS_LEGAL_HEADER_NAME = re.compile(rb"^[!#$%&'*+\-.^_`|~0-9a-z]+$") -RE_IS_ILLEGAL_HEADER_VALUE = re.compile(rb"[\0\x00\x0a\x0d\r\n]|^[ \r\n\t]|[ \r\n\t]$") - - -def _is_legal_header_name(name: bytes) -> bool: - """ - "An implementation that validates fields according to the definitions in Sections - 5.1 and 5.5 of [HTTP] only needs an additional check that field names do not - include uppercase characters." (https://httpwg.org/specs/rfc9113.html#n-field-validity) - - `http.client._is_legal_header_name` does not validate the field name according to the - HTTP 1.1 spec, so we do that here, in addition to checking for uppercase characters. - - This does not allow for the `:` character in the header name, so should not - be used to validate pseudo-headers. - """ - return bool(RE_IS_LEGAL_HEADER_NAME.match(name)) - - -def _is_illegal_header_value(value: bytes) -> bool: - """ - "A field value MUST NOT contain the zero value (ASCII NUL, 0x00), line feed - (ASCII LF, 0x0a), or carriage return (ASCII CR, 0x0d) at any position. A field - value MUST NOT start or end with an ASCII whitespace character (ASCII SP or HTAB, - 0x20 or 0x09)." (https://httpwg.org/specs/rfc9113.html#n-field-validity) - """ - return bool(RE_IS_ILLEGAL_HEADER_VALUE.search(value)) - - -class _LockedObject(typing.Generic[T]): - """ - A wrapper class that hides a specific object behind a lock. - The goal here is to provide a simple way to protect access to an object - that cannot safely be simultaneously accessed from multiple threads. The - intended use of this class is simple: take hold of it with a context - manager, which returns the protected object. - """ - - __slots__ = ( - "lock", - "_obj", - ) - - def __init__(self, obj: T): - self.lock = threading.RLock() - self._obj = obj - - def __enter__(self) -> T: - self.lock.acquire() - return self._obj - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: types.TracebackType | None, - ) -> None: - self.lock.release() - - -class HTTP2Connection(HTTPSConnection): - def __init__( - self, host: str, port: int | None = None, **kwargs: typing.Any - ) -> None: - self._h2_conn = self._new_h2_conn() - self._h2_stream: int | None = None - self._headers: list[tuple[bytes, bytes]] = [] - - if "proxy" in kwargs or "proxy_config" in kwargs: # Defensive: - raise NotImplementedError("Proxies aren't supported with HTTP/2") - - super().__init__(host, port, **kwargs) - - if self._tunnel_host is not None: - raise NotImplementedError("Tunneling isn't supported with HTTP/2") - - def _new_h2_conn(self) -> _LockedObject[h2.connection.H2Connection]: - config = h2.config.H2Configuration(client_side=True) - return _LockedObject(h2.connection.H2Connection(config=config)) - - def connect(self) -> None: - super().connect() - with self._h2_conn as conn: - conn.initiate_connection() - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - - def putrequest( # type: ignore[override] - self, - method: str, - url: str, - **kwargs: typing.Any, - ) -> None: - """putrequest - This deviates from the HTTPConnection method signature since we never need to override - sending accept-encoding headers or the host header. - """ - if "skip_host" in kwargs: - raise NotImplementedError("`skip_host` isn't supported") - if "skip_accept_encoding" in kwargs: - raise NotImplementedError("`skip_accept_encoding` isn't supported") - - self._request_url = url or "/" - self._validate_path(url) # type: ignore[attr-defined] - - if ":" in self.host: - authority = f"[{self.host}]:{self.port or 443}" - else: - authority = f"{self.host}:{self.port or 443}" - - self._headers.append((b":scheme", b"https")) - self._headers.append((b":method", method.encode())) - self._headers.append((b":authority", authority.encode())) - self._headers.append((b":path", url.encode())) - - with self._h2_conn as conn: - self._h2_stream = conn.get_next_available_stream_id() - - def putheader(self, header: str | bytes, *values: str | bytes) -> None: # type: ignore[override] - # TODO SKIPPABLE_HEADERS from urllib3 are ignored. - header = header.encode() if isinstance(header, str) else header - header = header.lower() # A lot of upstream code uses capitalized headers. - if not _is_legal_header_name(header): - raise ValueError(f"Illegal header name {str(header)}") - - for value in values: - value = value.encode() if isinstance(value, str) else value - if _is_illegal_header_value(value): - raise ValueError(f"Illegal header value {str(value)}") - self._headers.append((header, value)) - - def endheaders(self, message_body: typing.Any = None) -> None: # type: ignore[override] - if self._h2_stream is None: - raise ConnectionError("Must call `putrequest` first.") - - with self._h2_conn as conn: - conn.send_headers( - stream_id=self._h2_stream, - headers=self._headers, - end_stream=(message_body is None), - ) - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - self._headers = [] # Reset headers for the next request. - - def send(self, data: typing.Any) -> None: - """Send data to the server. - `data` can be: `str`, `bytes`, an iterable, or file-like objects - that support a .read() method. - """ - if self._h2_stream is None: - raise ConnectionError("Must call `putrequest` first.") - - with self._h2_conn as conn: - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - - if hasattr(data, "read"): # file-like objects - while True: - chunk = data.read(self.blocksize) - if not chunk: - break - if isinstance(chunk, str): - chunk = chunk.encode() - conn.send_data(self._h2_stream, chunk, end_stream=False) - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - conn.end_stream(self._h2_stream) - return - - if isinstance(data, str): # str -> bytes - data = data.encode() - - try: - if isinstance(data, bytes): - conn.send_data(self._h2_stream, data, end_stream=True) - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - else: - for chunk in data: - conn.send_data(self._h2_stream, chunk, end_stream=False) - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - conn.end_stream(self._h2_stream) - except TypeError: - raise TypeError( - "`data` should be str, bytes, iterable, or file. got %r" - % type(data) - ) - - def set_tunnel( - self, - host: str, - port: int | None = None, - headers: typing.Mapping[str, str] | None = None, - scheme: str = "http", - ) -> None: - raise NotImplementedError( - "HTTP/2 does not support setting up a tunnel through a proxy" - ) - - def getresponse( # type: ignore[override] - self, - ) -> HTTP2Response: - status = None - data = bytearray() - with self._h2_conn as conn: - end_stream = False - while not end_stream: - # TODO: Arbitrary read value. - if received_data := self.sock.recv(65535): - events = conn.receive_data(received_data) - for event in events: - if isinstance(event, h2.events.ResponseReceived): - headers = HTTPHeaderDict() - for header, value in event.headers: - if header == b":status": - status = int(value.decode()) - else: - headers.add( - header.decode("ascii"), value.decode("ascii") - ) - - elif isinstance(event, h2.events.DataReceived): - data += event.data - conn.acknowledge_received_data( - event.flow_controlled_length, event.stream_id - ) - - elif isinstance(event, h2.events.StreamEnded): - end_stream = True - - if data_to_send := conn.data_to_send(): - self.sock.sendall(data_to_send) - - assert status is not None - return HTTP2Response( - status=status, - headers=headers, - request_url=self._request_url, - data=bytes(data), - ) - - def request( # type: ignore[override] - self, - method: str, - url: str, - body: _TYPE_BODY | None = None, - headers: typing.Mapping[str, str] | None = None, - *, - preload_content: bool = True, - decode_content: bool = True, - enforce_content_length: bool = True, - **kwargs: typing.Any, - ) -> None: - """Send an HTTP/2 request""" - if "chunked" in kwargs: - # TODO this is often present from upstream. - # raise NotImplementedError("`chunked` isn't supported with HTTP/2") - pass - - if self.sock is not None: - self.sock.settimeout(self.timeout) - - self.putrequest(method, url) - - headers = headers or {} - for k, v in headers.items(): - if k.lower() == "transfer-encoding" and v == "chunked": - continue - else: - self.putheader(k, v) - - if b"user-agent" not in dict(self._headers): - self.putheader(b"user-agent", _get_default_user_agent()) - - if body: - self.endheaders(message_body=body) - self.send(body) - else: - self.endheaders() - - def close(self) -> None: - with self._h2_conn as conn: - try: - conn.close_connection() - if data := conn.data_to_send(): - self.sock.sendall(data) - except Exception: - pass - - # Reset all our HTTP/2 connection state. - self._h2_conn = self._new_h2_conn() - self._h2_stream = None - self._headers = [] - - super().close() - - -class HTTP2Response(BaseHTTPResponse): - # TODO: This is a woefully incomplete response object, but works for non-streaming. - def __init__( - self, - status: int, - headers: HTTPHeaderDict, - request_url: str, - data: bytes, - decode_content: bool = False, # TODO: support decoding - ) -> None: - super().__init__( - status=status, - headers=headers, - # Following CPython, we map HTTP versions to major * 10 + minor integers - version=20, - version_string="HTTP/2", - # No reason phrase in HTTP/2 - reason=None, - decode_content=decode_content, - request_url=request_url, - ) - self._data = data - self.length_remaining = 0 - - @property - def data(self) -> bytes: - return self._data - - def get_redirect_location(self) -> None: - return None - - def close(self) -> None: - pass diff --git a/myenv/lib/python3.12/site-packages/urllib3/http2/probe.py b/myenv/lib/python3.12/site-packages/urllib3/http2/probe.py deleted file mode 100644 index 9ea9007..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/http2/probe.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - -import threading - - -class _HTTP2ProbeCache: - __slots__ = ( - "_lock", - "_cache_locks", - "_cache_values", - ) - - def __init__(self) -> None: - self._lock = threading.Lock() - self._cache_locks: dict[tuple[str, int], threading.RLock] = {} - self._cache_values: dict[tuple[str, int], bool | None] = {} - - def acquire_and_get(self, host: str, port: int) -> bool | None: - # By the end of this block we know that - # _cache_[values,locks] is available. - value = None - with self._lock: - key = (host, port) - try: - value = self._cache_values[key] - # If it's a known value we return right away. - if value is not None: - return value - except KeyError: - self._cache_locks[key] = threading.RLock() - self._cache_values[key] = None - - # If the value is unknown, we acquire the lock to signal - # to the requesting thread that the probe is in progress - # or that the current thread needs to return their findings. - key_lock = self._cache_locks[key] - key_lock.acquire() - try: - # If the by the time we get the lock the value has been - # updated we want to return the updated value. - value = self._cache_values[key] - - # In case an exception like KeyboardInterrupt is raised here. - except BaseException as e: # Defensive: - assert not isinstance(e, KeyError) # KeyError shouldn't be possible. - key_lock.release() - raise - - return value - - def set_and_release( - self, host: str, port: int, supports_http2: bool | None - ) -> None: - key = (host, port) - key_lock = self._cache_locks[key] - with key_lock: # Uses an RLock, so can be locked again from same thread. - if supports_http2 is None and self._cache_values[key] is not None: - raise ValueError( - "Cannot reset HTTP/2 support for origin after value has been set." - ) # Defensive: not expected in normal usage - - self._cache_values[key] = supports_http2 - key_lock.release() - - def _values(self) -> dict[tuple[str, int], bool | None]: - """This function is for testing purposes only. Gets the current state of the probe cache""" - with self._lock: - return {k: v for k, v in self._cache_values.items()} - - def _reset(self) -> None: - """This function is for testing purposes only. Reset the cache values""" - with self._lock: - self._cache_locks = {} - self._cache_values = {} - - -_HTTP2_PROBE_CACHE = _HTTP2ProbeCache() - -set_and_release = _HTTP2_PROBE_CACHE.set_and_release -acquire_and_get = _HTTP2_PROBE_CACHE.acquire_and_get -_values = _HTTP2_PROBE_CACHE._values -_reset = _HTTP2_PROBE_CACHE._reset - -__all__ = [ - "set_and_release", - "acquire_and_get", -] diff --git a/myenv/lib/python3.12/site-packages/urllib3/poolmanager.py b/myenv/lib/python3.12/site-packages/urllib3/poolmanager.py deleted file mode 100644 index 28ec82f..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/poolmanager.py +++ /dev/null @@ -1,651 +0,0 @@ -from __future__ import annotations - -import functools -import logging -import typing -import warnings -from types import TracebackType -from urllib.parse import urljoin - -from ._collections import HTTPHeaderDict, RecentlyUsedContainer -from ._request_methods import RequestMethods -from .connection import ProxyConfig -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, port_by_scheme -from .exceptions import ( - LocationValueError, - MaxRetryError, - ProxySchemeUnknown, - URLSchemeUnknown, -) -from .response import BaseHTTPResponse -from .util.connection import _TYPE_SOCKET_OPTIONS -from .util.proxy import connection_requires_http_tunnel -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import Url, parse_url - -if typing.TYPE_CHECKING: - import ssl - - from typing_extensions import Self - -__all__ = ["PoolManager", "ProxyManager", "proxy_from_url"] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ( - "key_file", - "cert_file", - "cert_reqs", - "ca_certs", - "ca_cert_data", - "ssl_version", - "ssl_minimum_version", - "ssl_maximum_version", - "ca_cert_dir", - "ssl_context", - "key_password", - "server_hostname", -) -# Default value for `blocksize` - a new parameter introduced to -# http.client.HTTPConnection & http.client.HTTPSConnection in Python 3.7 -_DEFAULT_BLOCKSIZE = 16384 - - -class PoolKey(typing.NamedTuple): - """ - All known keyword arguments that could be provided to the pool manager, its - pools, or the underlying connections. - - All custom key schemes should include the fields in this key at a minimum. - """ - - key_scheme: str - key_host: str - key_port: int | None - key_timeout: Timeout | float | int | None - key_retries: Retry | bool | int | None - key_block: bool | None - key_source_address: tuple[str, int] | None - key_key_file: str | None - key_key_password: str | None - key_cert_file: str | None - key_cert_reqs: str | None - key_ca_certs: str | None - key_ca_cert_data: str | bytes | None - key_ssl_version: int | str | None - key_ssl_minimum_version: ssl.TLSVersion | None - key_ssl_maximum_version: ssl.TLSVersion | None - key_ca_cert_dir: str | None - key_ssl_context: ssl.SSLContext | None - key_maxsize: int | None - key_headers: frozenset[tuple[str, str]] | None - key__proxy: Url | None - key__proxy_headers: frozenset[tuple[str, str]] | None - key__proxy_config: ProxyConfig | None - key_socket_options: _TYPE_SOCKET_OPTIONS | None - key__socks_options: frozenset[tuple[str, str]] | None - key_assert_hostname: bool | str | None - key_assert_fingerprint: str | None - key_server_hostname: str | None - key_blocksize: int | None - - -def _default_key_normalizer( - key_class: type[PoolKey], request_context: dict[str, typing.Any] -) -> PoolKey: - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context["scheme"] = context["scheme"].lower() - context["host"] = context["host"].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ("headers", "_proxy_headers", "_socks_options"): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get("socket_options") - if socket_opts is not None: - context["socket_options"] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context["key_" + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - # Default key_blocksize to _DEFAULT_BLOCKSIZE if missing from the context - if context.get("key_blocksize") is None: - context["key_blocksize"] = _DEFAULT_BLOCKSIZE - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - "http": functools.partial(_default_key_normalizer, PoolKey), - "https": functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = {"http": HTTPConnectionPool, "https": HTTPSConnectionPool} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example: - - .. code-block:: python - - import urllib3 - - http = urllib3.PoolManager(num_pools=2) - - resp1 = http.request("GET", "https://google.com/") - resp2 = http.request("GET", "https://google.com/mail") - resp3 = http.request("GET", "https://yahoo.com/") - - print(len(http.pools)) - # 2 - - """ - - proxy: Url | None = None - proxy_config: ProxyConfig | None = None - - def __init__( - self, - num_pools: int = 10, - headers: typing.Mapping[str, str] | None = None, - **connection_pool_kw: typing.Any, - ) -> None: - super().__init__(headers) - # PoolManager handles redirects itself in PoolManager.urlopen(). - # It always passes redirect=False to the underlying connection pool to - # suppress per-pool redirect handling. If the user supplied a non-Retry - # value (int/bool/etc) for retries and we let the pool normalize it - # while redirect=False, the resulting Retry object would have redirect - # handling disabled, which can interfere with PoolManager's own - # redirect logic. Normalize here so redirects remain governed solely by - # PoolManager logic. - if "retries" in connection_pool_kw: - retries = connection_pool_kw["retries"] - if not isinstance(retries, Retry): - retries = Retry.from_int(retries) - connection_pool_kw = connection_pool_kw.copy() - connection_pool_kw["retries"] = retries - self.connection_pool_kw = connection_pool_kw - - self.pools: RecentlyUsedContainer[PoolKey, HTTPConnectionPool] - self.pools = RecentlyUsedContainer(num_pools) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self) -> Self: - return self - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> typing.Literal[False]: - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool( - self, - scheme: str, - host: str, - port: int, - request_context: dict[str, typing.Any] | None = None, - ) -> HTTPConnectionPool: - """ - Create a new :class:`urllib3.connectionpool.ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls: type[HTTPConnectionPool] = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Default blocksize to _DEFAULT_BLOCKSIZE if missing or explicitly - # set to 'None' in the request_context. - if request_context.get("blocksize") is None: - request_context["blocksize"] = _DEFAULT_BLOCKSIZE - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ("scheme", "host", "port"): - request_context.pop(key, None) - - if scheme == "http": - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self) -> None: - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host( - self, - host: str | None, - port: int | None = None, - scheme: str | None = "http", - pool_kwargs: dict[str, typing.Any] | None = None, - ) -> HTTPConnectionPool: - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context["scheme"] = scheme or "http" - if not port: - port = port_by_scheme.get(request_context["scheme"].lower(), 80) - request_context["port"] = port - request_context["host"] = host - - return self.connection_from_context(request_context) - - def connection_from_context( - self, request_context: dict[str, typing.Any] - ) -> HTTPConnectionPool: - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - if "strict" in request_context: - warnings.warn( - "The 'strict' parameter is no longer needed on Python 3+. " - "This will raise an error in urllib3 v2.1.0.", - DeprecationWarning, - ) - request_context.pop("strict") - - scheme = request_context["scheme"].lower() - pool_key_constructor = self.key_fn_by_scheme.get(scheme) - if not pool_key_constructor: - raise URLSchemeUnknown(scheme) - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key( - self, pool_key: PoolKey, request_context: dict[str, typing.Any] - ) -> HTTPConnectionPool: - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context["scheme"] - host = request_context["host"] - port = request_context["port"] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url( - self, url: str, pool_kwargs: dict[str, typing.Any] | None = None - ) -> HTTPConnectionPool: - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host( - u.host, port=u.port, scheme=u.scheme, pool_kwargs=pool_kwargs - ) - - def _merge_pool_kwargs( - self, override: dict[str, typing.Any] | None - ) -> dict[str, typing.Any]: - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def _proxy_requires_url_absolute_form(self, parsed_url: Url) -> bool: - """ - Indicates if the proxy requires the complete destination URL in the - request. Normally this is only needed when not using an HTTP CONNECT - tunnel. - """ - if self.proxy is None: - return False - - return not connection_requires_http_tunnel( - self.proxy, self.proxy_config, parsed_url.scheme - ) - - def urlopen( # type: ignore[override] - self, method: str, url: str, redirect: bool = True, **kw: typing.Any - ) -> BaseHTTPResponse: - """ - Same as :meth:`urllib3.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - - if u.scheme is None: - warnings.warn( - "URLs without a scheme (ie 'https://') are deprecated and will raise an error " - "in a future version of urllib3. To avoid this DeprecationWarning ensure all URLs " - "start with 'https://' or 'http://'. Read more in this issue: " - "https://github.com/urllib3/urllib3/issues/2920", - category=DeprecationWarning, - stacklevel=2, - ) - - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw["assert_same_host"] = False - kw["redirect"] = False - - if "headers" not in kw: - kw["headers"] = self.headers - - if self._proxy_requires_url_absolute_form(u): - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - kw["body"] = None - kw["headers"] = HTTPHeaderDict(kw["headers"])._prepare_for_method_change() - - retries = kw.get("retries", response.retries) - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - # Strip headers marked as unsafe to forward to the redirected location. - # Check remove_headers_on_redirect to avoid a potential network call within - # conn.is_same_host() which may use socket.gethostbyname() in the future. - if retries.remove_headers_on_redirect and not conn.is_same_host( - redirect_location - ): - new_headers = kw["headers"].copy() - for header in kw["headers"]: - if header.lower() in retries.remove_headers_on_redirect: - new_headers.pop(header, None) - kw["headers"] = new_headers - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - kw["retries"] = retries - kw["redirect"] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - - response.drain_conn() - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary containing headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - :param proxy_ssl_context: - The proxy SSL context is used to establish the TLS connection to the - proxy when using HTTPS proxies. - - :param use_forwarding_for_https: - (Defaults to False) If set to True will forward requests to the HTTPS - proxy to be made on behalf of the client instead of creating a TLS - tunnel via the CONNECT method. **Enabling this flag means that request - and response headers and content will be visible from the HTTPS proxy** - whereas tunneling keeps request and response headers and content - private. IP address, target hostname, SNI, and port are always visible - to an HTTPS proxy even when this flag is disabled. - - :param proxy_assert_hostname: - The hostname of the certificate to verify against. - - :param proxy_assert_fingerprint: - The fingerprint of the certificate to verify against. - - Example: - - .. code-block:: python - - import urllib3 - - proxy = urllib3.ProxyManager("https://localhost:3128/") - - resp1 = proxy.request("GET", "https://google.com/") - resp2 = proxy.request("GET", "https://httpbin.org/") - - print(len(proxy.pools)) - # 1 - - resp3 = proxy.request("GET", "https://httpbin.org/") - resp4 = proxy.request("GET", "https://twitter.com/") - - print(len(proxy.pools)) - # 3 - - """ - - def __init__( - self, - proxy_url: str, - num_pools: int = 10, - headers: typing.Mapping[str, str] | None = None, - proxy_headers: typing.Mapping[str, str] | None = None, - proxy_ssl_context: ssl.SSLContext | None = None, - use_forwarding_for_https: bool = False, - proxy_assert_hostname: None | str | typing.Literal[False] = None, - proxy_assert_fingerprint: str | None = None, - **connection_pool_kw: typing.Any, - ) -> None: - if isinstance(proxy_url, HTTPConnectionPool): - str_proxy_url = f"{proxy_url.scheme}://{proxy_url.host}:{proxy_url.port}" - else: - str_proxy_url = proxy_url - proxy = parse_url(str_proxy_url) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - self.proxy_ssl_context = proxy_ssl_context - self.proxy_config = ProxyConfig( - proxy_ssl_context, - use_forwarding_for_https, - proxy_assert_hostname, - proxy_assert_fingerprint, - ) - - connection_pool_kw["_proxy"] = self.proxy - connection_pool_kw["_proxy_headers"] = self.proxy_headers - connection_pool_kw["_proxy_config"] = self.proxy_config - - super().__init__(num_pools, headers, **connection_pool_kw) - - def connection_from_host( - self, - host: str | None, - port: int | None = None, - scheme: str | None = "http", - pool_kwargs: dict[str, typing.Any] | None = None, - ) -> HTTPConnectionPool: - if scheme == "https": - return super().connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs - ) - - return super().connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs # type: ignore[union-attr] - ) - - def _set_proxy_headers( - self, url: str, headers: typing.Mapping[str, str] | None = None - ) -> typing.Mapping[str, str]: - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {"Accept": "*/*"} - - netloc = parse_url(url).netloc - if netloc: - headers_["Host"] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen( # type: ignore[override] - self, method: str, url: str, redirect: bool = True, **kw: typing.Any - ) -> BaseHTTPResponse: - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - if not connection_requires_http_tunnel(self.proxy, self.proxy_config, u.scheme): - # For connections using HTTP CONNECT, httplib sets the necessary - # headers on the CONNECT to the proxy. If we're not using CONNECT, - # we'll definitely need to set 'Host' at the very least. - headers = kw.get("headers", self.headers) - kw["headers"] = self._set_proxy_headers(url, headers) - - return super().urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url: str, **kw: typing.Any) -> ProxyManager: - return ProxyManager(proxy_url=url, **kw) diff --git a/myenv/lib/python3.12/site-packages/urllib3/py.typed b/myenv/lib/python3.12/site-packages/urllib3/py.typed deleted file mode 100644 index 5f3ea3d..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Instruct type checkers to look for inline type annotations in this package. -# See PEP 561. diff --git a/myenv/lib/python3.12/site-packages/urllib3/response.py b/myenv/lib/python3.12/site-packages/urllib3/response.py deleted file mode 100644 index ff6d1f4..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/response.py +++ /dev/null @@ -1,1480 +0,0 @@ -from __future__ import annotations - -import collections -import io -import json as _json -import logging -import socket -import sys -import typing -import warnings -import zlib -from contextlib import contextmanager -from http.client import HTTPMessage as _HttplibHTTPMessage -from http.client import HTTPResponse as _HttplibHTTPResponse -from socket import timeout as SocketTimeout - -if typing.TYPE_CHECKING: - from ._base_connection import BaseHTTPConnection - -try: - try: - import brotlicffi as brotli # type: ignore[import-not-found] - except ImportError: - import brotli # type: ignore[import-not-found] -except ImportError: - brotli = None - -from . import util -from ._base_connection import _TYPE_BODY -from ._collections import HTTPHeaderDict -from .connection import BaseSSLError, HTTPConnection, HTTPException -from .exceptions import ( - BodyNotHttplibCompatible, - DecodeError, - DependencyWarning, - HTTPError, - IncompleteRead, - InvalidChunkLength, - InvalidHeader, - ProtocolError, - ReadTimeoutError, - ResponseNotChunked, - SSLError, -) -from .util.response import is_fp_closed, is_response_to_head -from .util.retry import Retry - -if typing.TYPE_CHECKING: - from .connectionpool import HTTPConnectionPool - -log = logging.getLogger(__name__) - - -class ContentDecoder: - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - raise NotImplementedError() - - @property - def has_unconsumed_tail(self) -> bool: - raise NotImplementedError() - - def flush(self) -> bytes: - raise NotImplementedError() - - -class DeflateDecoder(ContentDecoder): - def __init__(self) -> None: - self._first_try = True - self._first_try_data = b"" - self._unfed_data = b"" - self._obj = zlib.decompressobj() - - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - data = self._unfed_data + data - self._unfed_data = b"" - if not data and not self._obj.unconsumed_tail: - return data - original_max_length = max_length - if original_max_length < 0: - max_length = 0 - elif original_max_length == 0: - # We should not pass 0 to the zlib decompressor because 0 is - # the default value that will make zlib decompress without a - # length limit. - # Data should be stored for subsequent calls. - self._unfed_data = data - return b"" - - # Subsequent calls always reuse `self._obj`. zlib requires - # passing the unconsumed tail if decompression is to continue. - if not self._first_try: - return self._obj.decompress( - self._obj.unconsumed_tail + data, max_length=max_length - ) - - # First call tries with RFC 1950 ZLIB format. - self._first_try_data += data - try: - decompressed = self._obj.decompress(data, max_length=max_length) - if decompressed: - self._first_try = False - self._first_try_data = b"" - return decompressed - # On failure, it falls back to RFC 1951 DEFLATE format. - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress( - self._first_try_data, max_length=original_max_length - ) - finally: - self._first_try_data = b"" - - @property - def has_unconsumed_tail(self) -> bool: - return bool(self._unfed_data) or ( - bool(self._obj.unconsumed_tail) and not self._first_try - ) - - def flush(self) -> bytes: - return self._obj.flush() - - -class GzipDecoderState: - FIRST_MEMBER = 0 - OTHER_MEMBERS = 1 - SWALLOW_DATA = 2 - - -class GzipDecoder(ContentDecoder): - def __init__(self) -> None: - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - self._state = GzipDecoderState.FIRST_MEMBER - self._unconsumed_tail = b"" - - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - ret = bytearray() - if self._state == GzipDecoderState.SWALLOW_DATA: - return bytes(ret) - - if max_length == 0: - # We should not pass 0 to the zlib decompressor because 0 is - # the default value that will make zlib decompress without a - # length limit. - # Data should be stored for subsequent calls. - self._unconsumed_tail += data - return b"" - - # zlib requires passing the unconsumed tail to the subsequent - # call if decompression is to continue. - data = self._unconsumed_tail + data - if not data and self._obj.eof: - return bytes(ret) - - while True: - try: - ret += self._obj.decompress( - data, max_length=max(max_length - len(ret), 0) - ) - except zlib.error: - previous_state = self._state - # Ignore data after the first error - self._state = GzipDecoderState.SWALLOW_DATA - self._unconsumed_tail = b"" - if previous_state == GzipDecoderState.OTHER_MEMBERS: - # Allow trailing garbage acceptable in other gzip clients - return bytes(ret) - raise - - self._unconsumed_tail = data = ( - self._obj.unconsumed_tail or self._obj.unused_data - ) - if max_length > 0 and len(ret) >= max_length: - break - - if not data: - return bytes(ret) - # When the end of a gzip member is reached, a new decompressor - # must be created for unused (possibly future) data. - if self._obj.eof: - self._state = GzipDecoderState.OTHER_MEMBERS - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - return bytes(ret) - - @property - def has_unconsumed_tail(self) -> bool: - return bool(self._unconsumed_tail) - - def flush(self) -> bytes: - return self._obj.flush() - - -if brotli is not None: - - class BrotliDecoder(ContentDecoder): - # Supports both 'brotlipy' and 'Brotli' packages - # since they share an import name. The top branches - # are for 'brotlipy' and bottom branches for 'Brotli' - def __init__(self) -> None: - self._obj = brotli.Decompressor() - if hasattr(self._obj, "decompress"): - setattr(self, "_decompress", self._obj.decompress) - else: - setattr(self, "_decompress", self._obj.process) - - # Requires Brotli >= 1.2.0 for `output_buffer_limit`. - def _decompress(self, data: bytes, output_buffer_limit: int = -1) -> bytes: - raise NotImplementedError() - - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - try: - if max_length > 0: - return self._decompress(data, output_buffer_limit=max_length) - else: - return self._decompress(data) - except TypeError: - # Fallback for Brotli/brotlicffi/brotlipy versions without - # the `output_buffer_limit` parameter. - warnings.warn( - "Brotli >= 1.2.0 is required to prevent decompression bombs.", - DependencyWarning, - ) - return self._decompress(data) - - @property - def has_unconsumed_tail(self) -> bool: - try: - return not self._obj.can_accept_more_data() - except AttributeError: - return False - - def flush(self) -> bytes: - if hasattr(self._obj, "flush"): - return self._obj.flush() # type: ignore[no-any-return] - return b"" - - -try: - if sys.version_info >= (3, 14): - from compression import zstd - else: - from backports import zstd -except ImportError: - HAS_ZSTD = False -else: - HAS_ZSTD = True - - class ZstdDecoder(ContentDecoder): - def __init__(self) -> None: - self._obj = zstd.ZstdDecompressor() - - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - if not data and not self.has_unconsumed_tail: - return b"" - if self._obj.eof: - data = self._obj.unused_data + data - self._obj = zstd.ZstdDecompressor() - part = self._obj.decompress(data, max_length=max_length) - length = len(part) - data_parts = [part] - # Every loop iteration is supposed to read data from a separate frame. - # The loop breaks when: - # - enough data is read; - # - no more unused data is available; - # - end of the last read frame has not been reached (i.e., - # more data has to be fed). - while ( - self._obj.eof - and self._obj.unused_data - and (max_length < 0 or length < max_length) - ): - unused_data = self._obj.unused_data - if not self._obj.needs_input: - self._obj = zstd.ZstdDecompressor() - part = self._obj.decompress( - unused_data, - max_length=(max_length - length) if max_length > 0 else -1, - ) - if part_length := len(part): - data_parts.append(part) - length += part_length - elif self._obj.needs_input: - break - return b"".join(data_parts) - - @property - def has_unconsumed_tail(self) -> bool: - return not (self._obj.needs_input or self._obj.eof) or bool( - self._obj.unused_data - ) - - def flush(self) -> bytes: - if not self._obj.eof: - raise DecodeError("Zstandard data is incomplete") - return b"" - - -class MultiDecoder(ContentDecoder): - """ - From RFC7231: - If one or more encodings have been applied to a representation, the - sender that applied the encodings MUST generate a Content-Encoding - header field that lists the content codings in the order in which - they were applied. - """ - - # Maximum allowed number of chained HTTP encodings in the - # Content-Encoding header. - max_decode_links = 5 - - def __init__(self, modes: str) -> None: - encodings = [m.strip() for m in modes.split(",")] - if len(encodings) > self.max_decode_links: - raise DecodeError( - "Too many content encodings in the chain: " - f"{len(encodings)} > {self.max_decode_links}" - ) - self._decoders = [_get_decoder(e) for e in encodings] - - def flush(self) -> bytes: - return self._decoders[0].flush() - - def decompress(self, data: bytes, max_length: int = -1) -> bytes: - if max_length <= 0: - for d in reversed(self._decoders): - data = d.decompress(data) - return data - - ret = bytearray() - # Every while loop iteration goes through all decoders once. - # It exits when enough data is read or no more data can be read. - # It is possible that the while loop iteration does not produce - # any data because we retrieve up to `max_length` from every - # decoder, and the amount of bytes may be insufficient for the - # next decoder to produce enough/any output. - while True: - any_data = False - for d in reversed(self._decoders): - data = d.decompress(data, max_length=max_length - len(ret)) - if data: - any_data = True - # We should not break when no data is returned because - # next decoders may produce data even with empty input. - ret += data - if not any_data or len(ret) >= max_length: - return bytes(ret) - data = b"" - - @property - def has_unconsumed_tail(self) -> bool: - return any(d.has_unconsumed_tail for d in self._decoders) - - -def _get_decoder(mode: str) -> ContentDecoder: - if "," in mode: - return MultiDecoder(mode) - - # According to RFC 9110 section 8.4.1.3, recipients should - # consider x-gzip equivalent to gzip - if mode in ("gzip", "x-gzip"): - return GzipDecoder() - - if brotli is not None and mode == "br": - return BrotliDecoder() - - if HAS_ZSTD and mode == "zstd": - return ZstdDecoder() - - return DeflateDecoder() - - -class BytesQueueBuffer: - """Memory-efficient bytes buffer - - To return decoded data in read() and still follow the BufferedIOBase API, we need a - buffer to always return the correct amount of bytes. - - This buffer should be filled using calls to put() - - Our maximum memory usage is determined by the sum of the size of: - - * self.buffer, which contains the full data - * the largest chunk that we will copy in get() - """ - - def __init__(self) -> None: - self.buffer: typing.Deque[bytes | memoryview[bytes]] = collections.deque() - self._size: int = 0 - - def __len__(self) -> int: - return self._size - - def put(self, data: bytes) -> None: - self.buffer.append(data) - self._size += len(data) - - def get(self, n: int) -> bytes: - if n == 0: - return b"" - elif not self.buffer: - raise RuntimeError("buffer is empty") - elif n < 0: - raise ValueError("n should be > 0") - - if len(self.buffer[0]) == n and isinstance(self.buffer[0], bytes): - self._size -= n - return self.buffer.popleft() - - fetched = 0 - ret = io.BytesIO() - while fetched < n: - remaining = n - fetched - chunk = self.buffer.popleft() - chunk_length = len(chunk) - if remaining < chunk_length: - chunk = memoryview(chunk) - left_chunk, right_chunk = chunk[:remaining], chunk[remaining:] - ret.write(left_chunk) - self.buffer.appendleft(right_chunk) - self._size -= remaining - break - else: - ret.write(chunk) - self._size -= chunk_length - fetched += chunk_length - - if not self.buffer: - break - - return ret.getvalue() - - def get_all(self) -> bytes: - buffer = self.buffer - if not buffer: - assert self._size == 0 - return b"" - if len(buffer) == 1: - result = buffer.pop() - if isinstance(result, memoryview): - result = result.tobytes() - else: - ret = io.BytesIO() - ret.writelines(buffer.popleft() for _ in range(len(buffer))) - result = ret.getvalue() - self._size = 0 - return result - - -class BaseHTTPResponse(io.IOBase): - CONTENT_DECODERS = ["gzip", "x-gzip", "deflate"] - if brotli is not None: - CONTENT_DECODERS += ["br"] - if HAS_ZSTD: - CONTENT_DECODERS += ["zstd"] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - DECODER_ERROR_CLASSES: tuple[type[Exception], ...] = (IOError, zlib.error) - if brotli is not None: - DECODER_ERROR_CLASSES += (brotli.error,) - - if HAS_ZSTD: - DECODER_ERROR_CLASSES += (zstd.ZstdError,) - - def __init__( - self, - *, - headers: typing.Mapping[str, str] | typing.Mapping[bytes, bytes] | None = None, - status: int, - version: int, - version_string: str, - reason: str | None, - decode_content: bool, - request_url: str | None, - retries: Retry | None = None, - ) -> None: - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) # type: ignore[arg-type] - self.status = status - self.version = version - self.version_string = version_string - self.reason = reason - self.decode_content = decode_content - self._has_decoded_content = False - self._request_url: str | None = request_url - self.retries = retries - - self.chunked = False - tr_enc = self.headers.get("transfer-encoding", "").lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - self._decoder: ContentDecoder | None = None - self.length_remaining: int | None - - def get_redirect_location(self) -> str | None | typing.Literal[False]: - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get("location") - return False - - @property - def data(self) -> bytes: - raise NotImplementedError() - - def json(self) -> typing.Any: - """ - Deserializes the body of the HTTP response as a Python object. - - The body of the HTTP response must be encoded using UTF-8, as per - `RFC 8529 Section 8.1 `_. - - To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to - your custom decoder instead. - - If the body of the HTTP response is not decodable to UTF-8, a - `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a - valid JSON document, a `json.JSONDecodeError` will be raised. - - Read more :ref:`here `. - - :returns: The body of the HTTP response as a Python object. - """ - data = self.data.decode("utf-8") - return _json.loads(data) - - @property - def url(self) -> str | None: - raise NotImplementedError() - - @url.setter - def url(self, url: str | None) -> None: - raise NotImplementedError() - - @property - def connection(self) -> BaseHTTPConnection | None: - raise NotImplementedError() - - @property - def retries(self) -> Retry | None: - return self._retries - - @retries.setter - def retries(self, retries: Retry | None) -> None: - # Override the request_url if retries has a redirect location. - if retries is not None and retries.history: - self.url = retries.history[-1].redirect_location - self._retries = retries - - def stream( - self, amt: int | None = 2**16, decode_content: bool | None = None - ) -> typing.Iterator[bytes]: - raise NotImplementedError() - - def read( - self, - amt: int | None = None, - decode_content: bool | None = None, - cache_content: bool = False, - ) -> bytes: - raise NotImplementedError() - - def read1( - self, - amt: int | None = None, - decode_content: bool | None = None, - ) -> bytes: - raise NotImplementedError() - - def read_chunked( - self, - amt: int | None = None, - decode_content: bool | None = None, - ) -> typing.Iterator[bytes]: - raise NotImplementedError() - - def release_conn(self) -> None: - raise NotImplementedError() - - def drain_conn(self) -> None: - raise NotImplementedError() - - def shutdown(self) -> None: - raise NotImplementedError() - - def close(self) -> None: - raise NotImplementedError() - - def _init_decoder(self) -> None: - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get("content-encoding", "").lower() - if self._decoder is None: - if content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - elif "," in content_encoding: - encodings = [ - e.strip() - for e in content_encoding.split(",") - if e.strip() in self.CONTENT_DECODERS - ] - if encodings: - self._decoder = _get_decoder(content_encoding) - - def _decode( - self, - data: bytes, - decode_content: bool | None, - flush_decoder: bool, - max_length: int | None = None, - ) -> bytes: - """ - Decode the data passed in and potentially flush the decoder. - """ - if not decode_content: - if self._has_decoded_content: - raise RuntimeError( - "Calling read(decode_content=False) is not supported after " - "read(decode_content=True) was called." - ) - return data - - if max_length is None or flush_decoder: - max_length = -1 - - try: - if self._decoder: - data = self._decoder.decompress(data, max_length=max_length) - self._has_decoded_content = True - except self.DECODER_ERROR_CLASSES as e: - content_encoding = self.headers.get("content-encoding", "").lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, - e, - ) from e - if flush_decoder: - data += self._flush_decoder() - - return data - - def _flush_decoder(self) -> bytes: - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - return self._decoder.decompress(b"") + self._decoder.flush() - return b"" - - # Compatibility methods for `io` module - def readinto(self, b: bytearray) -> int: - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[: len(temp)] = temp - return len(temp) - - # Methods used by dependent libraries - def getheaders(self) -> HTTPHeaderDict: - return self.headers - - def getheader(self, name: str, default: str | None = None) -> str | None: - return self.headers.get(name, default) - - # Compatibility method for http.cookiejar - def info(self) -> HTTPHeaderDict: - return self.headers - - def geturl(self) -> str | None: - return self.url - - -class HTTPResponse(BaseHTTPResponse): - """ - HTTP Response container. - - Backwards-compatible with :class:`http.client.HTTPResponse` but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in :class:`http.client.HTTPResponse`: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param original_response: - When this HTTPResponse wrapper is generated from an :class:`http.client.HTTPResponse` - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - def __init__( - self, - body: _TYPE_BODY = "", - headers: typing.Mapping[str, str] | typing.Mapping[bytes, bytes] | None = None, - status: int = 0, - version: int = 0, - version_string: str = "HTTP/?", - reason: str | None = None, - preload_content: bool = True, - decode_content: bool = True, - original_response: _HttplibHTTPResponse | None = None, - pool: HTTPConnectionPool | None = None, - connection: HTTPConnection | None = None, - msg: _HttplibHTTPMessage | None = None, - retries: Retry | None = None, - enforce_content_length: bool = True, - request_method: str | None = None, - request_url: str | None = None, - auto_close: bool = True, - sock_shutdown: typing.Callable[[int], None] | None = None, - ) -> None: - super().__init__( - headers=headers, - status=status, - version=version, - version_string=version_string, - reason=reason, - decode_content=decode_content, - request_url=request_url, - retries=retries, - ) - - self.enforce_content_length = enforce_content_length - self.auto_close = auto_close - - self._body = None - self._fp: _HttplibHTTPResponse | None = None - self._original_response = original_response - self._fp_bytes_read = 0 - self.msg = msg - - if body and isinstance(body, (str, bytes)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, "read"): - self._fp = body # type: ignore[assignment] - self._sock_shutdown = sock_shutdown - - # Are we using the chunked-style of transfer encoding? - self.chunk_left: int | None = None - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # Used to return the correct amount of bytes for partial read()s - self._decoded_buffer = BytesQueueBuffer() - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def release_conn(self) -> None: - if not self._pool or not self._connection: - return None - - self._pool._put_conn(self._connection) - self._connection = None - - def drain_conn(self) -> None: - """ - Read and discard any remaining HTTP response data in the response connection. - - Unread data in the HTTPResponse connection blocks the connection from being released back to the pool. - """ - try: - self.read( - # Do not spend resources decoding the content unless - # decoding has already been initiated. - decode_content=self._has_decoded_content, - ) - except (HTTPError, OSError, BaseSSLError, HTTPException): - pass - - @property - def data(self) -> bytes: - # For backwards-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body # type: ignore[return-value] - - if self._fp: - return self.read(cache_content=True) - - return None # type: ignore[return-value] - - @property - def connection(self) -> HTTPConnection | None: - return self._connection - - def isclosed(self) -> bool: - return is_fp_closed(self._fp) - - def tell(self) -> int: - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``urllib3.response.HTTPResponse.read`` - if bytes are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method: str | None) -> int | None: - """ - Set initial length value for Response content if available. - """ - length: int | None - content_length: str | None = self.headers.get("content-length") - - if content_length is not None: - if self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning( - "Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked." - ) - return None - - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = {int(val) for val in content_length.split(",")} - if len(lengths) > 1: - raise InvalidHeader( - "Content-Length contained multiple " - "unmatching values (%s)" % content_length - ) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - else: # if content_length is None - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == "HEAD": - length = 0 - - return length - - @contextmanager - def _error_catcher(self) -> typing.Generator[None]: - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout as e: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, "Read timed out.") from e # type: ignore[arg-type] - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if "read operation timed out" not in str(e): - # SSL errors related to framing/MAC get wrapped and reraised here - raise SSLError(e) from e - - raise ReadTimeoutError(self._pool, None, "Read timed out.") from e # type: ignore[arg-type] - - except IncompleteRead as e: - if ( - e.expected is not None - and e.partial is not None - and e.expected == -e.partial - ): - arg = "Response may not contain content." - else: - arg = f"Connection broken: {e!r}" - raise ProtocolError(arg, e) from e - - except (HTTPException, OSError) as e: - raise ProtocolError(f"Connection broken: {e!r}", e) from e - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def _fp_read( - self, - amt: int | None = None, - *, - read1: bool = False, - ) -> bytes: - """ - Read a response with the thought that reading the number of bytes - larger than can fit in a 32-bit int at a time via SSL in some - known cases leads to an overflow error that has to be prevented - if `amt` or `self.length_remaining` indicate that a problem may - happen. - - The known cases: - * CPython < 3.9.7 because of a bug - https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900. - * urllib3 injected with pyOpenSSL-backed SSL-support. - * CPython < 3.10 only when `amt` does not fit 32-bit int. - """ - assert self._fp - c_int_max = 2**31 - 1 - if ( - (amt and amt > c_int_max) - or ( - amt is None - and self.length_remaining - and self.length_remaining > c_int_max - ) - ) and (util.IS_PYOPENSSL or sys.version_info < (3, 10)): - if read1: - return self._fp.read1(c_int_max) - buffer = io.BytesIO() - # Besides `max_chunk_amt` being a maximum chunk size, it - # affects memory overhead of reading a response by this - # method in CPython. - # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum - # chunk size that does not lead to an overflow error, but - # 256 MiB is a compromise. - max_chunk_amt = 2**28 - while amt is None or amt != 0: - if amt is not None: - chunk_amt = min(amt, max_chunk_amt) - amt -= chunk_amt - else: - chunk_amt = max_chunk_amt - data = self._fp.read(chunk_amt) - if not data: - break - buffer.write(data) - del data # to reduce peak memory usage by `max_chunk_amt`. - return buffer.getvalue() - elif read1: - return self._fp.read1(amt) if amt is not None else self._fp.read1() - else: - # StringIO doesn't like amt=None - return self._fp.read(amt) if amt is not None else self._fp.read() - - def _raw_read( - self, - amt: int | None = None, - *, - read1: bool = False, - ) -> bytes: - """ - Reads `amt` of bytes from the socket. - """ - if self._fp is None: - return None # type: ignore[return-value] - - fp_closed = getattr(self._fp, "closed", False) - - with self._error_catcher(): - data = self._fp_read(amt, read1=read1) if not fp_closed else b"" - if amt is not None and amt != 0 and not data: - # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - if ( - self.enforce_content_length - and self.length_remaining is not None - and self.length_remaining != 0 - ): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - elif read1 and ( - (amt != 0 and not data) or self.length_remaining == len(data) - ): - # All data has been read, but `self._fp.read1` in - # CPython 3.12 and older doesn't always close - # `http.client.HTTPResponse`, so we close it here. - # See https://github.com/python/cpython/issues/113199 - self._fp.close() - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - return data - - def read( - self, - amt: int | None = None, - decode_content: bool | None = None, - cache_content: bool = False, - ) -> bytes: - """ - Similar to :meth:`http.client.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if amt and amt < 0: - # Negative numbers and `None` should be treated the same. - amt = None - elif amt is not None: - cache_content = False - - if self._decoder and self._decoder.has_unconsumed_tail: - decoded_data = self._decode( - b"", - decode_content, - flush_decoder=False, - max_length=amt - len(self._decoded_buffer), - ) - self._decoded_buffer.put(decoded_data) - if len(self._decoded_buffer) >= amt: - return self._decoded_buffer.get(amt) - - data = self._raw_read(amt) - - flush_decoder = amt is None or (amt != 0 and not data) - - if ( - not data - and len(self._decoded_buffer) == 0 - and not (self._decoder and self._decoder.has_unconsumed_tail) - ): - return data - - if amt is None: - data = self._decode(data, decode_content, flush_decoder) - if cache_content: - self._body = data - else: - # do not waste memory on buffer when not decoding - if not decode_content: - if self._has_decoded_content: - raise RuntimeError( - "Calling read(decode_content=False) is not supported after " - "read(decode_content=True) was called." - ) - return data - - decoded_data = self._decode( - data, - decode_content, - flush_decoder, - max_length=amt - len(self._decoded_buffer), - ) - self._decoded_buffer.put(decoded_data) - - while len(self._decoded_buffer) < amt and data: - # TODO make sure to initially read enough data to get past the headers - # For example, the GZ file header takes 10 bytes, we don't want to read - # it one byte at a time - data = self._raw_read(amt) - decoded_data = self._decode( - data, - decode_content, - flush_decoder, - max_length=amt - len(self._decoded_buffer), - ) - self._decoded_buffer.put(decoded_data) - data = self._decoded_buffer.get(amt) - - return data - - def read1( - self, - amt: int | None = None, - decode_content: bool | None = None, - ) -> bytes: - """ - Similar to ``http.client.HTTPResponse.read1`` and documented - in :meth:`io.BufferedReader.read1`, but with an additional parameter: - ``decode_content``. - - :param amt: - How much of the content to read. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if decode_content is None: - decode_content = self.decode_content - if amt and amt < 0: - # Negative numbers and `None` should be treated the same. - amt = None - # try and respond without going to the network - if self._has_decoded_content: - if not decode_content: - raise RuntimeError( - "Calling read1(decode_content=False) is not supported after " - "read1(decode_content=True) was called." - ) - if ( - self._decoder - and self._decoder.has_unconsumed_tail - and (amt is None or len(self._decoded_buffer) < amt) - ): - decoded_data = self._decode( - b"", - decode_content, - flush_decoder=False, - max_length=( - amt - len(self._decoded_buffer) if amt is not None else None - ), - ) - self._decoded_buffer.put(decoded_data) - if len(self._decoded_buffer) > 0: - if amt is None: - return self._decoded_buffer.get_all() - return self._decoded_buffer.get(amt) - if amt == 0: - return b"" - - # FIXME, this method's type doesn't say returning None is possible - data = self._raw_read(amt, read1=True) - if not decode_content or data is None: - return data - - self._init_decoder() - while True: - flush_decoder = not data - decoded_data = self._decode( - data, decode_content, flush_decoder, max_length=amt - ) - self._decoded_buffer.put(decoded_data) - if decoded_data or flush_decoder: - break - data = self._raw_read(8192, read1=True) - - if amt is None: - return self._decoded_buffer.get_all() - return self._decoded_buffer.get(amt) - - def stream( - self, amt: int | None = 2**16, decode_content: bool | None = None - ) -> typing.Generator[bytes]: - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - yield from self.read_chunked(amt, decode_content=decode_content) - else: - while ( - not is_fp_closed(self._fp) - or len(self._decoded_buffer) > 0 - or (self._decoder and self._decoder.has_unconsumed_tail) - ): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - # Overrides from io.IOBase - def readable(self) -> bool: - return True - - def shutdown(self) -> None: - if not self._sock_shutdown: - raise ValueError("Cannot shutdown socket as self._sock_shutdown is not set") - if self._connection is None: - raise RuntimeError( - "Cannot shutdown as connection has already been released to the pool" - ) - self._sock_shutdown(socket.SHUT_RD) - - def close(self) -> None: - self._sock_shutdown = None - - if not self.closed and self._fp: - self._fp.close() - - if self._connection: - self._connection.close() - - if not self.auto_close: - io.IOBase.close(self) - - @property - def closed(self) -> bool: - if not self.auto_close: - return io.IOBase.closed.__get__(self) # type: ignore[no-any-return] - elif self._fp is None: - return True - elif hasattr(self._fp, "isclosed"): - return self._fp.isclosed() - elif hasattr(self._fp, "closed"): - return self._fp.closed - else: - return True - - def fileno(self) -> int: - if self._fp is None: - raise OSError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise OSError( - "The file-like object this HTTPResponse is wrapped " - "around has no file descriptor" - ) - - def flush(self) -> None: - if ( - self._fp is not None - and hasattr(self._fp, "flush") - and not getattr(self._fp, "closed", False) - ): - return self._fp.flush() - - def supports_chunked_reads(self) -> bool: - """ - Checks if the underlying file-like object looks like a - :class:`http.client.HTTPResponse` object. We do this by testing for - the fp attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, "fp") - - def _update_chunk_length(self) -> None: - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return None - line = self._fp.fp.readline() # type: ignore[union-attr] - line = line.split(b";", 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - self.close() - if line: - # Invalid chunked protocol response, abort. - raise InvalidChunkLength(self, line) from None - else: - # Truncated at start of next chunk - raise ProtocolError("Response ended prematurely") from None - - def _handle_chunk(self, amt: int | None) -> bytes: - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) # type: ignore[union-attr] - returned_chunk = chunk - self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif self.chunk_left is not None and amt < self.chunk_left: - value = self._fp._safe_read(amt) # type: ignore[union-attr] - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) # type: ignore[union-attr] - self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) # type: ignore[union-attr] - self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk # type: ignore[no-any-return] - - def read_chunked( - self, amt: int | None = None, decode_content: bool | None = None - ) -> typing.Generator[bytes]: - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing." - ) - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be http.client.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks." - ) - - with self._error_catcher(): - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return None - - # If a response is already read and closed - # then return immediately. - if self._fp.fp is None: # type: ignore[union-attr] - return None - - if amt and amt < 0: - # Negative numbers and `None` should be treated the same, - # but httplib handles only `None` correctly. - amt = None - - while True: - # First, check if any data is left in the decoder's buffer. - if self._decoder and self._decoder.has_unconsumed_tail: - chunk = b"" - else: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode( - chunk, - decode_content=decode_content, - flush_decoder=False, - max_length=amt, - ) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while self._fp is not None: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b"\r\n": - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() - - @property - def url(self) -> str | None: - """ - Returns the URL that was the source of this response. - If the request that generated this response redirected, this method - will return the final redirect location. - """ - return self._request_url - - @url.setter - def url(self, url: str | None) -> None: - self._request_url = url - - def __iter__(self) -> typing.Iterator[bytes]: - buffer: list[bytes] = [] - for chunk in self.stream(decode_content=True): - if b"\n" in chunk: - chunks = chunk.split(b"\n") - yield b"".join(buffer) + chunks[0] + b"\n" - for x in chunks[1:-1]: - yield x + b"\n" - if chunks[-1]: - buffer = [chunks[-1]] - else: - buffer = [] - else: - buffer.append(chunk) - if buffer: - yield b"".join(buffer) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__init__.py b/myenv/lib/python3.12/site-packages/urllib3/util/__init__.py deleted file mode 100644 index 5341260..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -# For backwards compatibility, provide imports that used to be here. -from __future__ import annotations - -from .connection import is_connection_dropped -from .request import SKIP_HEADER, SKIPPABLE_HEADERS, make_headers -from .response import is_fp_closed -from .retry import Retry -from .ssl_ import ( - ALPN_PROTOCOLS, - IS_PYOPENSSL, - SSLContext, - assert_fingerprint, - create_urllib3_context, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import Timeout -from .url import Url, parse_url -from .wait import wait_for_read, wait_for_write - -__all__ = ( - "IS_PYOPENSSL", - "SSLContext", - "ALPN_PROTOCOLS", - "Retry", - "Timeout", - "Url", - "assert_fingerprint", - "create_urllib3_context", - "is_connection_dropped", - "is_fp_closed", - "parse_url", - "make_headers", - "resolve_cert_reqs", - "resolve_ssl_version", - "ssl_wrap_socket", - "wait_for_read", - "wait_for_write", - "SKIP_HEADER", - "SKIPPABLE_HEADERS", -) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 64ae9e7..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/connection.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/connection.cpython-312.pyc deleted file mode 100644 index 593c5e9..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/connection.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc deleted file mode 100644 index 62d7e2b..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc deleted file mode 100644 index 1b005a4..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc deleted file mode 100644 index be7a027..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc deleted file mode 100644 index 37ecb81..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_.cpython-312.pyc deleted file mode 100644 index 227bb38..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc deleted file mode 100644 index ef4786e..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc deleted file mode 100644 index 86989d1..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc deleted file mode 100644 index 79aa02e..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc deleted file mode 100644 index bf93ac6..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/util.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/util.cpython-312.pyc deleted file mode 100644 index 77b7f85..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/util.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc b/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc deleted file mode 100644 index 949336c..0000000 Binary files a/myenv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc and /dev/null differ diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/connection.py b/myenv/lib/python3.12/site-packages/urllib3/util/connection.py deleted file mode 100644 index f92519e..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/connection.py +++ /dev/null @@ -1,137 +0,0 @@ -from __future__ import annotations - -import socket -import typing - -from ..exceptions import LocationParseError -from .timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT - -_TYPE_SOCKET_OPTIONS = list[tuple[int, int, typing.Union[int, bytes]]] - -if typing.TYPE_CHECKING: - from .._base_connection import BaseHTTPConnection - - -def is_connection_dropped(conn: BaseHTTPConnection) -> bool: # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - :param conn: :class:`urllib3.connection.HTTPConnection` object. - """ - return not conn.is_connected - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection( - address: tuple[str, int], - timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - source_address: tuple[str, int] | None = None, - socket_options: _TYPE_SOCKET_OPTIONS | None = None, -) -> socket.socket: - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`socket.getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith("["): - host = host.strip("[]") - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - try: - host.encode("idna") - except UnicodeError: - raise LocationParseError(f"'{host}', label empty or too long") from None - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not _DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - # Break explicitly a reference cycle - err = None - return sock - - except OSError as _: - err = _ - if sock is not None: - sock.close() - - if err is not None: - try: - raise err - finally: - # Break explicitly a reference cycle - err = None - else: - raise OSError("getaddrinfo returns an empty list") - - -def _set_socket_options( - sock: socket.socket, options: _TYPE_SOCKET_OPTIONS | None -) -> None: - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family() -> socket.AddressFamily: - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host: str) -> bool: - """Returns True if the system can bind an IPv6 address.""" - sock = None - has_ipv6 = False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/urllib3/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6("::1") diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/proxy.py b/myenv/lib/python3.12/site-packages/urllib3/util/proxy.py deleted file mode 100644 index 908fc66..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/proxy.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import annotations - -import typing - -from .url import Url - -if typing.TYPE_CHECKING: - from ..connection import ProxyConfig - - -def connection_requires_http_tunnel( - proxy_url: Url | None = None, - proxy_config: ProxyConfig | None = None, - destination_scheme: str | None = None, -) -> bool: - """ - Returns True if the connection requires an HTTP CONNECT through the proxy. - - :param URL proxy_url: - URL of the proxy. - :param ProxyConfig proxy_config: - Proxy configuration from poolmanager.py - :param str destination_scheme: - The scheme of the destination. (i.e https, http, etc) - """ - # If we're not using a proxy, no way to use a tunnel. - if proxy_url is None: - return False - - # HTTP destinations never require tunneling, we always forward. - if destination_scheme == "http": - return False - - # Support for forwarding with HTTPS proxies and HTTPS destinations. - if ( - proxy_url.scheme == "https" - and proxy_config - and proxy_config.use_forwarding_for_https - ): - return False - - # Otherwise always use a tunnel. - return True diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/request.py b/myenv/lib/python3.12/site-packages/urllib3/util/request.py deleted file mode 100644 index 6c2372b..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/request.py +++ /dev/null @@ -1,263 +0,0 @@ -from __future__ import annotations - -import io -import sys -import typing -from base64 import b64encode -from enum import Enum - -from ..exceptions import UnrewindableBodyError -from .util import to_bytes - -if typing.TYPE_CHECKING: - from typing import Final - -# Pass as a value within ``headers`` to skip -# emitting some HTTP headers that are added automatically. -# The only headers that are supported are ``Accept-Encoding``, -# ``Host``, and ``User-Agent``. -SKIP_HEADER = "@@@SKIP_HEADER@@@" -SKIPPABLE_HEADERS = frozenset(["accept-encoding", "host", "user-agent"]) - -ACCEPT_ENCODING = "gzip,deflate" -try: - try: - import brotlicffi as _unused_module_brotli # type: ignore[import-not-found] # noqa: F401 - except ImportError: - import brotli as _unused_module_brotli # type: ignore[import-not-found] # noqa: F401 -except ImportError: - pass -else: - ACCEPT_ENCODING += ",br" - -try: - if sys.version_info >= (3, 14): - from compression import zstd as _unused_module_zstd # noqa: F401 - else: - from backports import zstd as _unused_module_zstd # noqa: F401 -except ImportError: - pass -else: - ACCEPT_ENCODING += ",zstd" - - -class _TYPE_FAILEDTELL(Enum): - token = 0 - - -_FAILEDTELL: Final[_TYPE_FAILEDTELL] = _TYPE_FAILEDTELL.token - -_TYPE_BODY_POSITION = typing.Union[int, _TYPE_FAILEDTELL] - -# When sending a request with these methods we aren't expecting -# a body so don't need to set an explicit 'Content-Length: 0' -# The reason we do this in the negative instead of tracking methods -# which 'should' have a body is because unknown methods should be -# treated as if they were 'POST' which *does* expect a body. -_METHODS_NOT_EXPECTING_BODY = {"GET", "HEAD", "DELETE", "TRACE", "OPTIONS", "CONNECT"} - - -def make_headers( - keep_alive: bool | None = None, - accept_encoding: bool | list[str] | str | None = None, - user_agent: str | None = None, - basic_auth: str | None = None, - proxy_basic_auth: str | None = None, - disable_cache: bool | None = None, -) -> dict[str, str]: - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. If the dependencies for - Brotli (either the ``brotli`` or ``brotlicffi`` package) and/or - Zstandard (the ``backports.zstd`` package for Python before 3.14) - algorithms are installed, then their encodings are - included in the string ('br' and 'zstd', respectively). - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example: - - .. code-block:: python - - import urllib3 - - print(urllib3.util.make_headers(keep_alive=True, user_agent="Batman/1.0")) - # {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - print(urllib3.util.make_headers(accept_encoding=True)) - # {'accept-encoding': 'gzip,deflate'} - """ - headers: dict[str, str] = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ",".join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers["accept-encoding"] = accept_encoding - - if user_agent: - headers["user-agent"] = user_agent - - if keep_alive: - headers["connection"] = "keep-alive" - - if basic_auth: - headers["authorization"] = ( - f"Basic {b64encode(basic_auth.encode('latin-1')).decode()}" - ) - - if proxy_basic_auth: - headers["proxy-authorization"] = ( - f"Basic {b64encode(proxy_basic_auth.encode('latin-1')).decode()}" - ) - - if disable_cache: - headers["cache-control"] = "no-cache" - - return headers - - -def set_file_position( - body: typing.Any, pos: _TYPE_BODY_POSITION | None -) -> _TYPE_BODY_POSITION | None: - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, "tell", None) is not None: - try: - pos = body.tell() - except OSError: - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body: typing.IO[typing.AnyStr], body_pos: _TYPE_BODY_POSITION) -> None: - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, "seek", None) - if body_seek is not None and isinstance(body_pos, int): - try: - body_seek(body_pos) - except OSError as e: - raise UnrewindableBodyError( - "An error occurred when rewinding request body for redirect/retry." - ) from e - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError( - "Unable to record file position for rewinding " - "request body during a redirect/retry." - ) - else: - raise ValueError( - f"body_pos must be of type integer, instead it was {type(body_pos)}." - ) - - -class ChunksAndContentLength(typing.NamedTuple): - chunks: typing.Iterable[bytes] | None - content_length: int | None - - -def body_to_chunks( - body: typing.Any | None, method: str, blocksize: int -) -> ChunksAndContentLength: - """Takes the HTTP request method, body, and blocksize and - transforms them into an iterable of chunks to pass to - socket.sendall() and an optional 'Content-Length' header. - - A 'Content-Length' of 'None' indicates the length of the body - can't be determined so should use 'Transfer-Encoding: chunked' - for framing instead. - """ - - chunks: typing.Iterable[bytes] | None - content_length: int | None - - # No body, we need to make a recommendation on 'Content-Length' - # based on whether that request method is expected to have - # a body or not. - if body is None: - chunks = None - if method.upper() not in _METHODS_NOT_EXPECTING_BODY: - content_length = 0 - else: - content_length = None - - # Bytes or strings become bytes - elif isinstance(body, (str, bytes)): - chunks = (to_bytes(body),) - content_length = len(chunks[0]) - - # File-like object, TODO: use seek() and tell() for length? - elif hasattr(body, "read"): - - def chunk_readable() -> typing.Iterable[bytes]: - encode = isinstance(body, io.TextIOBase) - while True: - datablock = body.read(blocksize) - if not datablock: - break - if encode: - datablock = datablock.encode("utf-8") - yield datablock - - chunks = chunk_readable() - content_length = None - - # Otherwise we need to start checking via duck-typing. - else: - try: - # Check if the body implements the buffer API. - mv = memoryview(body) - except TypeError: - try: - # Check if the body is an iterable - chunks = iter(body) - content_length = None - except TypeError: - raise TypeError( - f"'body' must be a bytes-like object, file-like " - f"object, or iterable. Instead was {body!r}" - ) from None - else: - # Since it implements the buffer API can be passed directly to socket.sendall() - chunks = (body,) - content_length = mv.nbytes - - return ChunksAndContentLength(chunks=chunks, content_length=content_length) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/response.py b/myenv/lib/python3.12/site-packages/urllib3/util/response.py deleted file mode 100644 index 0f45786..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/response.py +++ /dev/null @@ -1,101 +0,0 @@ -from __future__ import annotations - -import http.client as httplib -from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect - -from ..exceptions import HeaderParsingError - - -def is_fp_closed(obj: object) -> bool: - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() # type: ignore[no-any-return, attr-defined] - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed # type: ignore[no-any-return, attr-defined] - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None # type: ignore[attr-defined] - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers: httplib.HTTPMessage) -> None: - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param http.client.HTTPMessage headers: Headers to verify. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError(f"expected httplib.Message, got {type(headers)}.") - - unparsed_data = None - - # get_payload is actually email.message.Message.get_payload; - # we're only interested in the result if it's not a multipart message - if not headers.is_multipart(): - payload = headers.get_payload() - - if isinstance(payload, (bytes, str)): - unparsed_data = payload - - # httplib is assuming a response body is available - # when parsing headers even when httplib only sends - # header data to parse_headers() This results in - # defects on multipart responses in particular. - # See: https://github.com/urllib3/urllib3/issues/800 - - # So we ignore the following defects: - # - StartBoundaryNotFoundDefect: - # The claimed start boundary was never found. - # - MultipartInvariantViolationDefect: - # A message claimed to be a multipart but no subparts were found. - defects = [ - defect - for defect in headers.defects - if not isinstance( - defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect) - ) - ] - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response: httplib.HTTPResponse) -> bool: - """ - Checks whether the request of a response has been a HEAD-request. - - :param http.client.HTTPResponse response: - Response to check if the originating request - used 'HEAD' as a method. - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method_str = response._method # type: str # type: ignore[attr-defined] - return method_str.upper() == "HEAD" diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/retry.py b/myenv/lib/python3.12/site-packages/urllib3/util/retry.py deleted file mode 100644 index b21b4b6..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/retry.py +++ /dev/null @@ -1,549 +0,0 @@ -from __future__ import annotations - -import email -import logging -import random -import re -import time -import typing -from itertools import takewhile -from types import TracebackType - -from ..exceptions import ( - ConnectTimeoutError, - InvalidHeader, - MaxRetryError, - ProtocolError, - ProxyError, - ReadTimeoutError, - ResponseError, -) -from .util import reraise - -if typing.TYPE_CHECKING: - from typing_extensions import Self - - from ..connectionpool import ConnectionPool - from ..response import BaseHTTPResponse - -log = logging.getLogger(__name__) - - -# Data structure for representing the metadata of requests that result in a retry. -class RequestHistory(typing.NamedTuple): - method: str | None - url: str | None - error: Exception | None - status: int | None - redirect_location: str | None - - -class Retry: - """Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool: - - .. code-block:: python - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request("GET", "https://example.com/") - - Or per-request (which overrides the default for the pool): - - .. code-block:: python - - response = http.request("GET", "https://example.com/", retries=Retry(10)) - - Retries can be disabled by passing ``False``: - - .. code-block:: python - - response = http.request("GET", "https://example.com/", retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param int other: - How many times to retry on other errors. - - Other errors are errors that are not connect, read, redirect or status errors. - These errors might be raised after the request was sent to the server, so the - request might have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - If ``total`` is not set, it's a good idea to set this to 0 to account - for unexpected edge cases and avoid infinite retry loops. - - :param Collection allowed_methods: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_ALLOWED_METHODS`. - - Set to a ``None`` value to retry on any verb. - - :param Collection status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``allowed_methods`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ** ({number of previous retries})) - - seconds. If `backoff_jitter` is non-zero, this sleep is extended by:: - - random.uniform(0, {backoff jitter}) - - seconds. For example, if the backoff_factor is 0.1, then :func:`Retry.sleep` will - sleep for [0.0s, 0.2s, 0.4s, 0.8s, ...] between retries. No backoff will ever - be longer than `backoff_max`. - - By default, backoff is disabled (factor set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - :param Collection remove_headers_on_redirect: - Sequence of headers to remove from the request when a response - indicating a redirect is returned before firing off the redirected - request. - - :param int retry_after_max: Number of seconds to allow as the maximum for - Retry-After headers. Defaults to :attr:`Retry.DEFAULT_RETRY_AFTER_MAX`. - Any Retry-After headers larger than this value will be limited to this - value. - """ - - #: Default methods to be used for ``allowed_methods`` - DEFAULT_ALLOWED_METHODS = frozenset( - ["HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"] - ) - - #: Default status codes to be used for ``status_forcelist`` - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - #: Default headers to be used for ``remove_headers_on_redirect`` - DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset( - ["Cookie", "Authorization", "Proxy-Authorization"] - ) - - #: Default maximum backoff time. - DEFAULT_BACKOFF_MAX = 120 - - # This is undocumented in the RFC. Setting to 6 hours matches other popular libraries. - #: Default maximum allowed value for Retry-After headers in seconds - DEFAULT_RETRY_AFTER_MAX: typing.Final[int] = 21600 - - # Backward compatibility; assigned outside of the class. - DEFAULT: typing.ClassVar[Retry] - - def __init__( - self, - total: bool | int | None = 10, - connect: int | None = None, - read: int | None = None, - redirect: bool | int | None = None, - status: int | None = None, - other: int | None = None, - allowed_methods: typing.Collection[str] | None = DEFAULT_ALLOWED_METHODS, - status_forcelist: typing.Collection[int] | None = None, - backoff_factor: float = 0, - backoff_max: float = DEFAULT_BACKOFF_MAX, - raise_on_redirect: bool = True, - raise_on_status: bool = True, - history: tuple[RequestHistory, ...] | None = None, - respect_retry_after_header: bool = True, - remove_headers_on_redirect: typing.Collection[ - str - ] = DEFAULT_REMOVE_HEADERS_ON_REDIRECT, - backoff_jitter: float = 0.0, - retry_after_max: int = DEFAULT_RETRY_AFTER_MAX, - ) -> None: - self.total = total - self.connect = connect - self.read = read - self.status = status - self.other = other - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.allowed_methods = allowed_methods - self.backoff_factor = backoff_factor - self.backoff_max = backoff_max - self.retry_after_max = retry_after_max - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or () - self.respect_retry_after_header = respect_retry_after_header - self.remove_headers_on_redirect = frozenset( - h.lower() for h in remove_headers_on_redirect - ) - self.backoff_jitter = backoff_jitter - - def new(self, **kw: typing.Any) -> Self: - params = dict( - total=self.total, - connect=self.connect, - read=self.read, - redirect=self.redirect, - status=self.status, - other=self.other, - allowed_methods=self.allowed_methods, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - backoff_max=self.backoff_max, - retry_after_max=self.retry_after_max, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - remove_headers_on_redirect=self.remove_headers_on_redirect, - respect_retry_after_header=self.respect_retry_after_header, - backoff_jitter=self.backoff_jitter, - ) - - params.update(kw) - return type(self)(**params) # type: ignore[arg-type] - - @classmethod - def from_int( - cls, - retries: Retry | bool | int | None, - redirect: bool | int | None = True, - default: Retry | bool | int | None = None, - ) -> Retry: - """Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self) -> float: - """Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len( - list( - takewhile(lambda x: x.redirect_location is None, reversed(self.history)) - ) - ) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - if self.backoff_jitter != 0.0: - backoff_value += random.random() * self.backoff_jitter - return float(max(0, min(self.backoff_max, backoff_value))) - - def parse_retry_after(self, retry_after: str) -> float: - seconds: float - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate_tz(retry_after) - if retry_date_tuple is None: - raise InvalidHeader(f"Invalid Retry-After header: {retry_after}") - - retry_date = email.utils.mktime_tz(retry_date_tuple) - seconds = retry_date - time.time() - - seconds = max(seconds, 0) - - # Check the seconds do not exceed the specified maximum - if seconds > self.retry_after_max: - seconds = self.retry_after_max - - return seconds - - def get_retry_after(self, response: BaseHTTPResponse) -> float | None: - """Get the value of Retry-After in seconds.""" - - retry_after = response.headers.get("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response: BaseHTTPResponse) -> bool: - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self) -> None: - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response: BaseHTTPResponse | None = None) -> None: - """Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if self.respect_retry_after_header and response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err: Exception) -> bool: - """Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - if isinstance(err, ProxyError): - err = err.original_error - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err: Exception) -> bool: - """Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method: str) -> bool: - """Checks if a given HTTP method should be retried upon, depending if - it is included in the allowed_methods - """ - if self.allowed_methods and method.upper() not in self.allowed_methods: - return False - return True - - def is_retry( - self, method: str, status_code: int, has_retry_after: bool = False - ) -> bool: - """Is this method/status code retryable? (Based on allowlists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return bool( - self.total - and self.respect_retry_after_header - and has_retry_after - and (status_code in self.RETRY_AFTER_STATUS_CODES) - ) - - def is_exhausted(self) -> bool: - """Are we out of retries?""" - retry_counts = [ - x - for x in ( - self.total, - self.connect, - self.read, - self.redirect, - self.status, - self.other, - ) - if x - ] - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment( - self, - method: str | None = None, - url: str | None = None, - response: BaseHTTPResponse | None = None, - error: Exception | None = None, - _pool: ConnectionPool | None = None, - _stacktrace: TracebackType | None = None, - ) -> Self: - """Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.BaseHTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - other = self.other - cause = "unknown" - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or method is None or not self._is_method_retryable(method): - raise reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif error: - # Other retry? - if other is not None: - other -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = "too many redirects" - response_redirect_location = response.get_redirect_location() - if response_redirect_location: - redirect_location = response_redirect_location - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and the given method is in the allowed_methods - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) - status = response.status - - history = self.history + ( - RequestHistory(method, url, error, status, redirect_location), - ) - - new_retry = self.new( - total=total, - connect=connect, - read=read, - redirect=redirect, - status=status_count, - other=other, - history=history, - ) - - if new_retry.is_exhausted(): - reason = error or ResponseError(cause) - raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self) -> str: - return ( - f"{type(self).__name__}(total={self.total}, connect={self.connect}, " - f"read={self.read}, redirect={self.redirect}, status={self.status})" - ) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/ssl_.py b/myenv/lib/python3.12/site-packages/urllib3/util/ssl_.py deleted file mode 100644 index 56fe909..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/ssl_.py +++ /dev/null @@ -1,527 +0,0 @@ -from __future__ import annotations - -import hashlib -import hmac -import os -import socket -import sys -import typing -import warnings -from binascii import unhexlify - -from ..exceptions import ProxySchemeUnsupported, SSLError -from .url import _BRACELESS_IPV6_ADDRZ_RE, _IPV4_RE - -SSLContext = None -SSLTransport = None -HAS_NEVER_CHECK_COMMON_NAME = False -IS_PYOPENSSL = False -ALPN_PROTOCOLS = ["http/1.1"] - -_TYPE_VERSION_INFO = tuple[int, int, int, str, int] - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - length: getattr(hashlib, algorithm, None) - for length, algorithm in ((32, "md5"), (40, "sha1"), (64, "sha256")) -} - - -def _is_bpo_43522_fixed( - implementation_name: str, - version_info: _TYPE_VERSION_INFO, - pypy_version_info: _TYPE_VERSION_INFO | None, -) -> bool: - """Return True for CPython 3.9.3+ or 3.10+ and PyPy 7.3.8+ where - setting SSLContext.hostname_checks_common_name to False works. - - Outside of CPython and PyPy we don't know which implementations work - or not so we conservatively use our hostname matching as we know that works - on all implementations. - - https://github.com/urllib3/urllib3/issues/2192#issuecomment-821832963 - https://foss.heptapod.net/pypy/pypy/-/issues/3539 - """ - if implementation_name == "pypy": - # https://foss.heptapod.net/pypy/pypy/-/issues/3129 - return pypy_version_info >= (7, 3, 8) # type: ignore[operator] - elif implementation_name == "cpython": - major_minor = version_info[:2] - micro = version_info[2] - return (major_minor == (3, 9) and micro >= 3) or major_minor >= (3, 10) - else: # Defensive: - return False - - -def _is_has_never_check_common_name_reliable( - openssl_version: str, - openssl_version_number: int, - implementation_name: str, - version_info: _TYPE_VERSION_INFO, - pypy_version_info: _TYPE_VERSION_INFO | None, -) -> bool: - # As of May 2023, all released versions of LibreSSL fail to reject certificates with - # only common names, see https://github.com/urllib3/urllib3/pull/3024 - is_openssl = openssl_version.startswith("OpenSSL ") - # Before fixing OpenSSL issue #14579, the SSL_new() API was not copying hostflags - # like X509_CHECK_FLAG_NEVER_CHECK_SUBJECT, which tripped up CPython. - # https://github.com/openssl/openssl/issues/14579 - # This was released in OpenSSL 1.1.1l+ (>=0x101010cf) - is_openssl_issue_14579_fixed = openssl_version_number >= 0x101010CF - - return is_openssl and ( - is_openssl_issue_14579_fixed - or _is_bpo_43522_fixed(implementation_name, version_info, pypy_version_info) - ) - - -if typing.TYPE_CHECKING: - from ssl import VerifyMode - from typing import TypedDict - - from .ssltransport import SSLTransport as SSLTransportType - - class _TYPE_PEER_CERT_RET_DICT(TypedDict, total=False): - subjectAltName: tuple[tuple[str, str], ...] - subject: tuple[tuple[tuple[str, str], ...], ...] - serialNumber: str - - -# Mapping from 'ssl.PROTOCOL_TLSX' to 'TLSVersion.X' -_SSL_VERSION_TO_TLS_VERSION: dict[int, int] = {} - -try: # Do we have ssl at all? - import ssl - from ssl import ( # type: ignore[assignment] - CERT_REQUIRED, - HAS_NEVER_CHECK_COMMON_NAME, - OP_NO_COMPRESSION, - OP_NO_TICKET, - OPENSSL_VERSION, - OPENSSL_VERSION_NUMBER, - PROTOCOL_TLS, - PROTOCOL_TLS_CLIENT, - VERIFY_X509_STRICT, - OP_NO_SSLv2, - OP_NO_SSLv3, - SSLContext, - TLSVersion, - ) - - PROTOCOL_SSLv23 = PROTOCOL_TLS - - # Needed for Python 3.9 which does not define this - VERIFY_X509_PARTIAL_CHAIN = getattr(ssl, "VERIFY_X509_PARTIAL_CHAIN", 0x80000) - - # Setting SSLContext.hostname_checks_common_name = False didn't work before CPython - # 3.9.3, and 3.10 (but OK on PyPy) or OpenSSL 1.1.1l+ - if HAS_NEVER_CHECK_COMMON_NAME and not _is_has_never_check_common_name_reliable( - OPENSSL_VERSION, - OPENSSL_VERSION_NUMBER, - sys.implementation.name, - sys.version_info, - sys.pypy_version_info if sys.implementation.name == "pypy" else None, # type: ignore[attr-defined] - ): # Defensive: for Python < 3.9.3 - HAS_NEVER_CHECK_COMMON_NAME = False - - # Need to be careful here in case old TLS versions get - # removed in future 'ssl' module implementations. - for attr in ("TLSv1", "TLSv1_1", "TLSv1_2"): - try: - _SSL_VERSION_TO_TLS_VERSION[getattr(ssl, f"PROTOCOL_{attr}")] = getattr( - TLSVersion, attr - ) - except AttributeError: # Defensive: - continue - - from .ssltransport import SSLTransport # type: ignore[assignment] -except ImportError: - OP_NO_COMPRESSION = 0x20000 # type: ignore[assignment, misc] - OP_NO_TICKET = 0x4000 # type: ignore[assignment, misc] - OP_NO_SSLv2 = 0x1000000 # type: ignore[assignment, misc] - OP_NO_SSLv3 = 0x2000000 # type: ignore[assignment, misc] - PROTOCOL_SSLv23 = PROTOCOL_TLS = 2 # type: ignore[assignment, misc] - PROTOCOL_TLS_CLIENT = 16 # type: ignore[assignment, misc] - VERIFY_X509_PARTIAL_CHAIN = 0x80000 - VERIFY_X509_STRICT = 0x20 # type: ignore[assignment, misc] - - -_TYPE_PEER_CERT_RET = typing.Union["_TYPE_PEER_CERT_RET_DICT", bytes, None] - - -def assert_fingerprint(cert: bytes | None, fingerprint: str) -> None: - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - if cert is None: - raise SSLError("No certificate for the peer.") - - fingerprint = fingerprint.replace(":", "").lower() - digest_length = len(fingerprint) - if digest_length not in HASHFUNC_MAP: - raise SSLError(f"Fingerprint of invalid length: {fingerprint}") - hashfunc = HASHFUNC_MAP.get(digest_length) - if hashfunc is None: - raise SSLError( - f"Hash function implementation unavailable for fingerprint length: {digest_length}" - ) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not hmac.compare_digest(cert_digest, fingerprint_bytes): - raise SSLError( - f'Fingerprints did not match. Expected "{fingerprint}", got "{cert_digest.hex()}"' - ) - - -def resolve_cert_reqs(candidate: None | int | str) -> VerifyMode: - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_REQUIRED`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbreviation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_REQUIRED - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "CERT_" + candidate) - return res # type: ignore[no-any-return] - - return candidate # type: ignore[return-value] - - -def resolve_ssl_version(candidate: None | int | str) -> int: - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_TLS - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "PROTOCOL_" + candidate) - return typing.cast(int, res) - - return candidate - - -def create_urllib3_context( - ssl_version: int | None = None, - cert_reqs: int | None = None, - options: int | None = None, - ciphers: str | None = None, - ssl_minimum_version: int | None = None, - ssl_maximum_version: int | None = None, - verify_flags: int | None = None, -) -> ssl.SSLContext: - """Creates and configures an :class:`ssl.SSLContext` instance for use with urllib3. - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - - This parameter is deprecated instead use 'ssl_minimum_version'. - :param ssl_minimum_version: - The minimum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value. - :param ssl_maximum_version: - The maximum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value. - Not recommended to set to anything other than 'ssl.TLSVersion.MAXIMUM_SUPPORTED' which is the - default value. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``. - :param ciphers: - Which cipher suites to allow the server to select. Defaults to either system configured - ciphers if OpenSSL 1.1.1+, otherwise uses a secure default set of ciphers. - :param verify_flags: - The flags for certificate verification operations. These default to - ``ssl.VERIFY_X509_PARTIAL_CHAIN`` and ``ssl.VERIFY_X509_STRICT`` for Python 3.13+. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - if SSLContext is None: - raise TypeError("Can't create an SSLContext object without an ssl module") - - # This means 'ssl_version' was specified as an exact value. - if ssl_version not in (None, PROTOCOL_TLS, PROTOCOL_TLS_CLIENT): - # Disallow setting 'ssl_version' and 'ssl_minimum|maximum_version' - # to avoid conflicts. - if ssl_minimum_version is not None or ssl_maximum_version is not None: - raise ValueError( - "Can't specify both 'ssl_version' and either " - "'ssl_minimum_version' or 'ssl_maximum_version'" - ) - - # 'ssl_version' is deprecated and will be removed in the future. - else: - # Use 'ssl_minimum_version' and 'ssl_maximum_version' instead. - ssl_minimum_version = _SSL_VERSION_TO_TLS_VERSION.get( - ssl_version, TLSVersion.MINIMUM_SUPPORTED - ) - ssl_maximum_version = _SSL_VERSION_TO_TLS_VERSION.get( - ssl_version, TLSVersion.MAXIMUM_SUPPORTED - ) - - # This warning message is pushing users to use 'ssl_minimum_version' - # instead of both min/max. Best practice is to only set the minimum version and - # keep the maximum version to be it's default value: 'TLSVersion.MAXIMUM_SUPPORTED' - warnings.warn( - "'ssl_version' option is deprecated and will be " - "removed in urllib3 v2.6.0. Instead use 'ssl_minimum_version'", - category=DeprecationWarning, - stacklevel=2, - ) - - # PROTOCOL_TLS is deprecated in Python 3.10 so we always use PROTOCOL_TLS_CLIENT - context = SSLContext(PROTOCOL_TLS_CLIENT) - - if ssl_minimum_version is not None: - context.minimum_version = ssl_minimum_version - else: # Python <3.10 defaults to 'MINIMUM_SUPPORTED' so explicitly set TLSv1.2 here - context.minimum_version = TLSVersion.TLSv1_2 - - if ssl_maximum_version is not None: - context.maximum_version = ssl_maximum_version - - # Unless we're given ciphers defer to either system ciphers in - # the case of OpenSSL 1.1.1+ or use our own secure default ciphers. - if ciphers: - context.set_ciphers(ciphers) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - # TLSv1.2 only. Unless set explicitly, do not request tickets. - # This may save some bandwidth on wire, and although the ticket is encrypted, - # there is a risk associated with it being on wire, - # if the server is not rotating its ticketing keys properly. - options |= OP_NO_TICKET - - context.options |= options - - if verify_flags is None: - verify_flags = 0 - # In Python 3.13+ ssl.create_default_context() sets VERIFY_X509_PARTIAL_CHAIN - # and VERIFY_X509_STRICT so we do the same - if sys.version_info >= (3, 13): - verify_flags |= VERIFY_X509_PARTIAL_CHAIN - verify_flags |= VERIFY_X509_STRICT - - context.verify_flags |= verify_flags - - # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is - # necessary for conditional client cert authentication with TLS 1.3. - # The attribute is None for OpenSSL <= 1.1.0 or does not exist when using - # an SSLContext created by pyOpenSSL. - if getattr(context, "post_handshake_auth", None) is not None: - context.post_handshake_auth = True - - # The order of the below lines setting verify_mode and check_hostname - # matter due to safe-guards SSLContext has to prevent an SSLContext with - # check_hostname=True, verify_mode=NONE/OPTIONAL. - # We always set 'check_hostname=False' for pyOpenSSL so we rely on our own - # 'ssl.match_hostname()' implementation. - if cert_reqs == ssl.CERT_REQUIRED and not IS_PYOPENSSL: - context.verify_mode = cert_reqs - context.check_hostname = True - else: - context.check_hostname = False - context.verify_mode = cert_reqs - - try: - context.hostname_checks_common_name = False - except AttributeError: # Defensive: for CPython < 3.9.3; for PyPy < 7.3.8 - pass - - if "SSLKEYLOGFILE" in os.environ: - sslkeylogfile = os.path.expandvars(os.environ.get("SSLKEYLOGFILE")) - else: - sslkeylogfile = None - if sslkeylogfile: - context.keylog_filename = sslkeylogfile - - return context - - -@typing.overload -def ssl_wrap_socket( - sock: socket.socket, - keyfile: str | None = ..., - certfile: str | None = ..., - cert_reqs: int | None = ..., - ca_certs: str | None = ..., - server_hostname: str | None = ..., - ssl_version: int | None = ..., - ciphers: str | None = ..., - ssl_context: ssl.SSLContext | None = ..., - ca_cert_dir: str | None = ..., - key_password: str | None = ..., - ca_cert_data: None | str | bytes = ..., - tls_in_tls: typing.Literal[False] = ..., -) -> ssl.SSLSocket: ... - - -@typing.overload -def ssl_wrap_socket( - sock: socket.socket, - keyfile: str | None = ..., - certfile: str | None = ..., - cert_reqs: int | None = ..., - ca_certs: str | None = ..., - server_hostname: str | None = ..., - ssl_version: int | None = ..., - ciphers: str | None = ..., - ssl_context: ssl.SSLContext | None = ..., - ca_cert_dir: str | None = ..., - key_password: str | None = ..., - ca_cert_data: None | str | bytes = ..., - tls_in_tls: bool = ..., -) -> ssl.SSLSocket | SSLTransportType: ... - - -def ssl_wrap_socket( - sock: socket.socket, - keyfile: str | None = None, - certfile: str | None = None, - cert_reqs: int | None = None, - ca_certs: str | None = None, - server_hostname: str | None = None, - ssl_version: int | None = None, - ciphers: str | None = None, - ssl_context: ssl.SSLContext | None = None, - ca_cert_dir: str | None = None, - key_password: str | None = None, - ca_cert_data: None | str | bytes = None, - tls_in_tls: bool = False, -) -> ssl.SSLSocket | SSLTransportType: - """ - All arguments except for server_hostname, ssl_context, tls_in_tls, ca_cert_data and - ca_cert_dir have the same meaning as they do when using - :func:`ssl.create_default_context`, :meth:`ssl.SSLContext.load_cert_chain`, - :meth:`ssl.SSLContext.set_ciphers` and :meth:`ssl.SSLContext.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - :param key_password: - Optional password if the keyfile is encrypted. - :param ca_cert_data: - Optional string containing CA certificates in PEM format suitable for - passing as the cadata parameter to SSLContext.load_verify_locations() - :param tls_in_tls: - Use SSLTransport to wrap the existing socket. - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are only used in tests. - # We should consider deprecating and removing this code. - context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers) - - if ca_certs or ca_cert_dir or ca_cert_data: - try: - context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data) - except OSError as e: - raise SSLError(e) from e - - elif ssl_context is None and hasattr(context, "load_default_certs"): - # try to load OS default certs; works well on Windows. - context.load_default_certs() - - # Attempt to detect if we get the goofy behavior of the - # keyfile being encrypted and OpenSSL asking for the - # passphrase via the terminal and instead error out. - if keyfile and key_password is None and _is_key_file_encrypted(keyfile): - raise SSLError("Client private key is encrypted, password is required") - - if certfile: - if key_password is None: - context.load_cert_chain(certfile, keyfile) - else: - context.load_cert_chain(certfile, keyfile, key_password) - - context.set_alpn_protocols(ALPN_PROTOCOLS) - - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) - return ssl_sock - - -def is_ipaddress(hostname: str | bytes) -> bool: - """Detects whether the hostname given is an IPv4 or IPv6 address. - Also detects IPv6 addresses with Zone IDs. - - :param str hostname: Hostname to examine. - :return: True if the hostname is an IP address, False otherwise. - """ - if isinstance(hostname, bytes): - # IDN A-label bytes are ASCII compatible. - hostname = hostname.decode("ascii") - return bool(_IPV4_RE.match(hostname) or _BRACELESS_IPV6_ADDRZ_RE.match(hostname)) - - -def _is_key_file_encrypted(key_file: str) -> bool: - """Detects if a key file is encrypted or not.""" - with open(key_file) as f: - for line in f: - # Look for Proc-Type: 4,ENCRYPTED - if "ENCRYPTED" in line: - return True - - return False - - -def _ssl_wrap_socket_impl( - sock: socket.socket, - ssl_context: ssl.SSLContext, - tls_in_tls: bool, - server_hostname: str | None = None, -) -> ssl.SSLSocket | SSLTransportType: - if tls_in_tls: - if not SSLTransport: - # Import error, ssl is not available. - raise ProxySchemeUnsupported( - "TLS in TLS requires support for the 'ssl' module" - ) - - SSLTransport._validate_ssl_context_for_tls_in_tls(ssl_context) - return SSLTransport(sock, ssl_context, server_hostname) - - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py b/myenv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py deleted file mode 100644 index 25d9100..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py +++ /dev/null @@ -1,159 +0,0 @@ -"""The match_hostname() function from Python 3.5, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html -# It is modified to remove commonName support. - -from __future__ import annotations - -import ipaddress -import re -import typing -from ipaddress import IPv4Address, IPv6Address - -if typing.TYPE_CHECKING: - from .ssl_ import _TYPE_PEER_CERT_RET_DICT - -__version__ = "3.5.0.1" - - -class CertificateError(ValueError): - pass - - -def _dnsname_match( - dn: typing.Any, hostname: str, max_wildcards: int = 1 -) -> typing.Match[str] | None | bool: - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r".") - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count("*") - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn) - ) - - # speed up common case w/o wildcards - if not wildcards: - return bool(dn.lower() == hostname.lower()) - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == "*": - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append("[^.]+") - elif leftmost.startswith("xn--") or hostname.startswith("xn--"): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r"\*", "[^.]*")) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r"\A" + r"\.".join(pats) + r"\Z", re.IGNORECASE) - return pat.match(hostname) - - -def _ipaddress_match(ipname: str, host_ip: IPv4Address | IPv6Address) -> bool: - """Exact matching of IP addresses. - - RFC 9110 section 4.3.5: "A reference identity of IP-ID contains the decoded - bytes of the IP address. An IP version 4 address is 4 octets, and an IP - version 6 address is 16 octets. [...] A reference identity of type IP-ID - matches if the address is identical to an iPAddress value of the - subjectAltName extension of the certificate." - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(ipname.rstrip()) - return bool(ip.packed == host_ip.packed) - - -def match_hostname( - cert: _TYPE_PEER_CERT_RET_DICT | None, - hostname: str, - hostname_checks_common_name: bool = False, -) -> None: - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError( - "empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED" - ) - try: - # Divergence from upstream: ipaddress can't handle byte str - # - # The ipaddress module shipped with Python < 3.9 does not support - # scoped IPv6 addresses so we unconditionally strip the Zone IDs for - # now. Once we drop support for Python 3.9 we can remove this branch. - if "%" in hostname: - host_ip = ipaddress.ip_address(hostname[: hostname.rfind("%")]) - else: - host_ip = ipaddress.ip_address(hostname) - - except ValueError: - # Not an IP address (common case) - host_ip = None - dnsnames = [] - san: tuple[tuple[str, str], ...] = cert.get("subjectAltName", ()) - key: str - value: str - for key, value in san: - if key == "DNS": - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == "IP Address": - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - - # We only check 'commonName' if it's enabled and we're not verifying - # an IP address. IP addresses aren't valid within 'commonName'. - if hostname_checks_common_name and host_ip is None and not dnsnames: - for sub in cert.get("subject", ()): - for key, value in sub: - if key == "commonName": - if _dnsname_match(value, hostname): - return - dnsnames.append(value) # Defensive: for Python < 3.9.3 - - if len(dnsnames) > 1: - raise CertificateError( - "hostname %r " - "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames))) - ) - elif len(dnsnames) == 1: - raise CertificateError(f"hostname {hostname!r} doesn't match {dnsnames[0]!r}") - else: - raise CertificateError("no appropriate subjectAltName fields were found") diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/ssltransport.py b/myenv/lib/python3.12/site-packages/urllib3/util/ssltransport.py deleted file mode 100644 index 6d59bc3..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/ssltransport.py +++ /dev/null @@ -1,271 +0,0 @@ -from __future__ import annotations - -import io -import socket -import ssl -import typing - -from ..exceptions import ProxySchemeUnsupported - -if typing.TYPE_CHECKING: - from typing_extensions import Self - - from .ssl_ import _TYPE_PEER_CERT_RET, _TYPE_PEER_CERT_RET_DICT - - -_WriteBuffer = typing.Union[bytearray, memoryview] -_ReturnValue = typing.TypeVar("_ReturnValue") - -SSL_BLOCKSIZE = 16384 - - -class SSLTransport: - """ - The SSLTransport wraps an existing socket and establishes an SSL connection. - - Contrary to Python's implementation of SSLSocket, it allows you to chain - multiple TLS connections together. It's particularly useful if you need to - implement TLS within TLS. - - The class supports most of the socket API operations. - """ - - @staticmethod - def _validate_ssl_context_for_tls_in_tls(ssl_context: ssl.SSLContext) -> None: - """ - Raises a ProxySchemeUnsupported if the provided ssl_context can't be used - for TLS in TLS. - - The only requirement is that the ssl_context provides the 'wrap_bio' - methods. - """ - - if not hasattr(ssl_context, "wrap_bio"): - raise ProxySchemeUnsupported( - "TLS in TLS requires SSLContext.wrap_bio() which isn't " - "available on non-native SSLContext" - ) - - def __init__( - self, - socket: socket.socket, - ssl_context: ssl.SSLContext, - server_hostname: str | None = None, - suppress_ragged_eofs: bool = True, - ) -> None: - """ - Create an SSLTransport around socket using the provided ssl_context. - """ - self.incoming = ssl.MemoryBIO() - self.outgoing = ssl.MemoryBIO() - - self.suppress_ragged_eofs = suppress_ragged_eofs - self.socket = socket - - self.sslobj = ssl_context.wrap_bio( - self.incoming, self.outgoing, server_hostname=server_hostname - ) - - # Perform initial handshake. - self._ssl_io_loop(self.sslobj.do_handshake) - - def __enter__(self) -> Self: - return self - - def __exit__(self, *_: typing.Any) -> None: - self.close() - - def fileno(self) -> int: - return self.socket.fileno() - - def read(self, len: int = 1024, buffer: typing.Any | None = None) -> int | bytes: - return self._wrap_ssl_read(len, buffer) - - def recv(self, buflen: int = 1024, flags: int = 0) -> int | bytes: - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv") - return self._wrap_ssl_read(buflen) - - def recv_into( - self, - buffer: _WriteBuffer, - nbytes: int | None = None, - flags: int = 0, - ) -> None | int | bytes: - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv_into") - if nbytes is None: - nbytes = len(buffer) - return self.read(nbytes, buffer) - - def sendall(self, data: bytes, flags: int = 0) -> None: - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to sendall") - count = 0 - with memoryview(data) as view, view.cast("B") as byte_view: - amount = len(byte_view) - while count < amount: - v = self.send(byte_view[count:]) - count += v - - def send(self, data: bytes, flags: int = 0) -> int: - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to send") - return self._ssl_io_loop(self.sslobj.write, data) - - def makefile( - self, - mode: str, - buffering: int | None = None, - *, - encoding: str | None = None, - errors: str | None = None, - newline: str | None = None, - ) -> typing.BinaryIO | typing.TextIO | socket.SocketIO: - """ - Python's httpclient uses makefile and buffered io when reading HTTP - messages and we need to support it. - - This is unfortunately a copy and paste of socket.py makefile with small - changes to point to the socket directly. - """ - if not set(mode) <= {"r", "w", "b"}: - raise ValueError(f"invalid mode {mode!r} (only r, w, b allowed)") - - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = socket.SocketIO(self, rawmode) # type: ignore[arg-type] - self.socket._io_refs += 1 # type: ignore[attr-defined] - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - buffer: typing.BinaryIO - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) # type: ignore[assignment] - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode # type: ignore[misc] - return text - - def unwrap(self) -> None: - self._ssl_io_loop(self.sslobj.unwrap) - - def close(self) -> None: - self.socket.close() - - @typing.overload - def getpeercert( - self, binary_form: typing.Literal[False] = ... - ) -> _TYPE_PEER_CERT_RET_DICT | None: ... - - @typing.overload - def getpeercert(self, binary_form: typing.Literal[True]) -> bytes | None: ... - - def getpeercert(self, binary_form: bool = False) -> _TYPE_PEER_CERT_RET: - return self.sslobj.getpeercert(binary_form) # type: ignore[return-value] - - def version(self) -> str | None: - return self.sslobj.version() - - def cipher(self) -> tuple[str, str, int] | None: - return self.sslobj.cipher() - - def selected_alpn_protocol(self) -> str | None: - return self.sslobj.selected_alpn_protocol() - - def shared_ciphers(self) -> list[tuple[str, str, int]] | None: - return self.sslobj.shared_ciphers() - - def compression(self) -> str | None: - return self.sslobj.compression() - - def settimeout(self, value: float | None) -> None: - self.socket.settimeout(value) - - def gettimeout(self) -> float | None: - return self.socket.gettimeout() - - def _decref_socketios(self) -> None: - self.socket._decref_socketios() # type: ignore[attr-defined] - - def _wrap_ssl_read(self, len: int, buffer: bytearray | None = None) -> int | bytes: - try: - return self._ssl_io_loop(self.sslobj.read, len, buffer) - except ssl.SSLError as e: - if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs: - return 0 # eof, return 0. - else: - raise - - # func is sslobj.do_handshake or sslobj.unwrap - @typing.overload - def _ssl_io_loop(self, func: typing.Callable[[], None]) -> None: ... - - # func is sslobj.write, arg1 is data - @typing.overload - def _ssl_io_loop(self, func: typing.Callable[[bytes], int], arg1: bytes) -> int: ... - - # func is sslobj.read, arg1 is len, arg2 is buffer - @typing.overload - def _ssl_io_loop( - self, - func: typing.Callable[[int, bytearray | None], bytes], - arg1: int, - arg2: bytearray | None, - ) -> bytes: ... - - def _ssl_io_loop( - self, - func: typing.Callable[..., _ReturnValue], - arg1: None | bytes | int = None, - arg2: bytearray | None = None, - ) -> _ReturnValue: - """Performs an I/O loop between incoming/outgoing and the socket.""" - should_loop = True - ret = None - - while should_loop: - errno = None - try: - if arg1 is None and arg2 is None: - ret = func() - elif arg2 is None: - ret = func(arg1) - else: - ret = func(arg1, arg2) - except ssl.SSLError as e: - if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE): - # WANT_READ, and WANT_WRITE are expected, others are not. - raise e - errno = e.errno - - buf = self.outgoing.read() - self.socket.sendall(buf) - - if errno is None: - should_loop = False - elif errno == ssl.SSL_ERROR_WANT_READ: - buf = self.socket.recv(SSL_BLOCKSIZE) - if buf: - self.incoming.write(buf) - else: - self.incoming.write_eof() - return typing.cast(_ReturnValue, ret) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/timeout.py b/myenv/lib/python3.12/site-packages/urllib3/util/timeout.py deleted file mode 100644 index 4bb1be1..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/timeout.py +++ /dev/null @@ -1,275 +0,0 @@ -from __future__ import annotations - -import time -import typing -from enum import Enum -from socket import getdefaulttimeout - -from ..exceptions import TimeoutStateError - -if typing.TYPE_CHECKING: - from typing import Final - - -class _TYPE_DEFAULT(Enum): - # This value should never be passed to socket.settimeout() so for safety we use a -1. - # socket.settimout() raises a ValueError for negative values. - token = -1 - - -_DEFAULT_TIMEOUT: Final[_TYPE_DEFAULT] = _TYPE_DEFAULT.token - -_TYPE_TIMEOUT = typing.Optional[typing.Union[float, _TYPE_DEFAULT]] - - -class Timeout: - """Timeout configuration. - - Timeouts can be defined as a default for a pool: - - .. code-block:: python - - import urllib3 - - timeout = urllib3.util.Timeout(connect=2.0, read=7.0) - - http = urllib3.PoolManager(timeout=timeout) - - resp = http.request("GET", "https://example.com/") - - print(resp.status) - - Or per-request (which overrides the default for the pool): - - .. code-block:: python - - response = http.request("GET", "https://example.com/", timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``: - - .. code-block:: python - - no_timeout = Timeout(connect=None, read=None) - response = http.request("GET", "https://example.com/", timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: int, float, or None - - :param connect: - The maximum amount of time (in seconds) to wait for a connection - attempt to a server to succeed. Omitting the parameter will default the - connect timeout to the system default, probably `the global default - timeout in socket.py - `_. - None will set an infinite timeout for connection attempts. - - :type connect: int, float, or None - - :param read: - The maximum amount of time (in seconds) to wait between consecutive - read operations for a response from the server. Omitting the parameter - will default the read timeout to the system default, probably `the - global default timeout in socket.py - `_. - None will set an infinite timeout. - - :type read: int, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT - - def __init__( - self, - total: _TYPE_TIMEOUT = None, - connect: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - read: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, - ) -> None: - self._connect = self._validate_timeout(connect, "connect") - self._read = self._validate_timeout(read, "read") - self.total = self._validate_timeout(total, "total") - self._start_connect: float | None = None - - def __repr__(self) -> str: - return f"{type(self).__name__}(connect={self._connect!r}, read={self._read!r}, total={self.total!r})" - - # __str__ provided for backwards compatibility - __str__ = __repr__ - - @staticmethod - def resolve_default_timeout(timeout: _TYPE_TIMEOUT) -> float | None: - return getdefaulttimeout() if timeout is _DEFAULT_TIMEOUT else timeout - - @classmethod - def _validate_timeout(cls, value: _TYPE_TIMEOUT, name: str) -> _TYPE_TIMEOUT: - """Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is None or value is _DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError( - "Timeout cannot be a boolean value. It must " - "be an int, float or None." - ) - try: - float(value) - except (TypeError, ValueError): - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) from None - - try: - if value <= 0: - raise ValueError( - "Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value) - ) - except TypeError: - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) from None - - return value - - @classmethod - def from_float(cls, timeout: _TYPE_TIMEOUT) -> Timeout: - """Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, :attr:`urllib3.util.Timeout.DEFAULT_TIMEOUT`, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self) -> Timeout: - """Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, total=self.total) - - def start_connect(self) -> float: - """Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = time.monotonic() - return self._start_connect - - def get_connect_duration(self) -> float: - """Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time in seconds. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError( - "Can't get connect duration for timer that has not started." - ) - return time.monotonic() - self._start_connect - - @property - def connect_timeout(self) -> _TYPE_TIMEOUT: - """Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is _DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) # type: ignore[type-var] - - @property - def read_timeout(self) -> float | None: - """Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if ( - self.total is not None - and self.total is not _DEFAULT_TIMEOUT - and self._read is not None - and self._read is not _DEFAULT_TIMEOUT - ): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), self._read)) - elif self.total is not None and self.total is not _DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self.resolve_default_timeout(self._read) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/url.py b/myenv/lib/python3.12/site-packages/urllib3/util/url.py deleted file mode 100644 index db057f1..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/url.py +++ /dev/null @@ -1,469 +0,0 @@ -from __future__ import annotations - -import re -import typing - -from ..exceptions import LocationParseError -from .util import to_str - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -_NORMALIZABLE_SCHEMES = ("http", "https", None) - -# Almost all of these patterns were derived from the -# 'rfc3986' module: https://github.com/python-hyper/rfc3986 -_PERCENT_RE = re.compile(r"%[a-fA-F0-9]{2}") -_SCHEME_RE = re.compile(r"^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)") -_URI_RE = re.compile( - r"^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?" - r"(?://([^\\/?#]*))?" - r"([^?#]*)" - r"(?:\?([^#]*))?" - r"(?:#(.*))?$", - re.UNICODE | re.DOTALL, -) - -_IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}" -_HEX_PAT = "[0-9A-Fa-f]{1,4}" -_LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=_HEX_PAT, ipv4=_IPV4_PAT) -_subs = {"hex": _HEX_PAT, "ls32": _LS32_PAT} -_variations = [ - # 6( h16 ":" ) ls32 - "(?:%(hex)s:){6}%(ls32)s", - # "::" 5( h16 ":" ) ls32 - "::(?:%(hex)s:){5}%(ls32)s", - # [ h16 ] "::" 4( h16 ":" ) ls32 - "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s", - # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s", - # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s", - # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s", - # [ *4( h16 ":" ) h16 ] "::" ls32 - "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s", - # [ *5( h16 ":" ) h16 ] "::" h16 - "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s", - # [ *6( h16 ":" ) h16 ] "::" - "(?:(?:%(hex)s:){0,6}%(hex)s)?::", -] - -_UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~" -_IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" -_ZONE_ID_PAT = "(?:%25|%)(?:[" + _UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" -_IPV6_ADDRZ_PAT = r"\[" + _IPV6_PAT + r"(?:" + _ZONE_ID_PAT + r")?\]" -_REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*" -_TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$") - -_IPV4_RE = re.compile("^" + _IPV4_PAT + "$") -_IPV6_RE = re.compile("^" + _IPV6_PAT + "$") -_IPV6_ADDRZ_RE = re.compile("^" + _IPV6_ADDRZ_PAT + "$") -_BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + _IPV6_ADDRZ_PAT[2:-2] + "$") -_ZONE_ID_RE = re.compile("(" + _ZONE_ID_PAT + r")\]$") - -_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % ( - _REG_NAME_PAT, - _IPV4_PAT, - _IPV6_ADDRZ_PAT, -) -_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL) - -_UNRESERVED_CHARS = set( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~" -) -_SUB_DELIM_CHARS = set("!$&'()*+,;=") -_USERINFO_CHARS = _UNRESERVED_CHARS | _SUB_DELIM_CHARS | {":"} -_PATH_CHARS = _USERINFO_CHARS | {"@", "/"} -_QUERY_CHARS = _FRAGMENT_CHARS = _PATH_CHARS | {"?"} - - -class Url( - typing.NamedTuple( - "Url", - [ - ("scheme", typing.Optional[str]), - ("auth", typing.Optional[str]), - ("host", typing.Optional[str]), - ("port", typing.Optional[int]), - ("path", typing.Optional[str]), - ("query", typing.Optional[str]), - ("fragment", typing.Optional[str]), - ], - ) -): - """ - Data structure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - - def __new__( # type: ignore[no-untyped-def] - cls, - scheme: str | None = None, - auth: str | None = None, - host: str | None = None, - port: int | None = None, - path: str | None = None, - query: str | None = None, - fragment: str | None = None, - ): - if path and not path.startswith("/"): - path = "/" + path - if scheme is not None: - scheme = scheme.lower() - return super().__new__(cls, scheme, auth, host, port, path, query, fragment) - - @property - def hostname(self) -> str | None: - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self) -> str: - """Absolute path including the query string.""" - uri = self.path or "/" - - if self.query is not None: - uri += "?" + self.query - - return uri - - @property - def authority(self) -> str | None: - """ - Authority component as defined in RFC 3986 3.2. - This includes userinfo (auth), host and port. - - i.e. - userinfo@host:port - """ - userinfo = self.auth - netloc = self.netloc - if netloc is None or userinfo is None: - return netloc - else: - return f"{userinfo}@{netloc}" - - @property - def netloc(self) -> str | None: - """ - Network location including host and port. - - If you need the equivalent of urllib.parse's ``netloc``, - use the ``authority`` property instead. - """ - if self.host is None: - return None - if self.port: - return f"{self.host}:{self.port}" - return self.host - - @property - def url(self) -> str: - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: - - .. code-block:: python - - import urllib3 - - U = urllib3.util.parse_url("https://google.com/mail/") - - print(U.url) - # "https://google.com/mail/" - - print( urllib3.util.Url("https", "username:password", - "host.com", 80, "/path", "query", "fragment" - ).url - ) - # "https://username:password@host.com:80/path?query#fragment" - """ - scheme, auth, host, port, path, query, fragment = self - url = "" - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + "://" - if auth is not None: - url += auth + "@" - if host is not None: - url += host - if port is not None: - url += ":" + str(port) - if path is not None: - url += path - if query is not None: - url += "?" + query - if fragment is not None: - url += "#" + fragment - - return url - - def __str__(self) -> str: - return self.url - - -@typing.overload -def _encode_invalid_chars( - component: str, allowed_chars: typing.Container[str] -) -> str: # Abstract - ... - - -@typing.overload -def _encode_invalid_chars( - component: None, allowed_chars: typing.Container[str] -) -> None: # Abstract - ... - - -def _encode_invalid_chars( - component: str | None, allowed_chars: typing.Container[str] -) -> str | None: - """Percent-encodes a URI component without reapplying - onto an already percent-encoded component. - """ - if component is None: - return component - - component = to_str(component) - - # Normalize existing percent-encoded bytes. - # Try to see if the component we're encoding is already percent-encoded - # so we can skip all '%' characters but still encode all others. - component, percent_encodings = _PERCENT_RE.subn( - lambda match: match.group(0).upper(), component - ) - - uri_bytes = component.encode("utf-8", "surrogatepass") - is_percent_encoded = percent_encodings == uri_bytes.count(b"%") - encoded_component = bytearray() - - for i in range(0, len(uri_bytes)): - # Will return a single character bytestring - byte = uri_bytes[i : i + 1] - byte_ord = ord(byte) - if (is_percent_encoded and byte == b"%") or ( - byte_ord < 128 and byte.decode() in allowed_chars - ): - encoded_component += byte - continue - encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper())) - - return encoded_component.decode() - - -def _remove_path_dot_segments(path: str) -> str: - # See http://tools.ietf.org/html/rfc3986#section-5.2.4 for pseudo-code - segments = path.split("/") # Turn the path into a list of segments - output = [] # Initialize the variable to use to store output - - for segment in segments: - # '.' is the current directory, so ignore it, it is superfluous - if segment == ".": - continue - # Anything other than '..', should be appended to the output - if segment != "..": - output.append(segment) - # In this case segment == '..', if we can, we should pop the last - # element - elif output: - output.pop() - - # If the path starts with '/' and the output is empty or the first string - # is non-empty - if path.startswith("/") and (not output or output[0]): - output.insert(0, "") - - # If the path starts with '/.' or '/..' ensure we add one more empty - # string to add a trailing '/' - if path.endswith(("/.", "/..")): - output.append("") - - return "/".join(output) - - -@typing.overload -def _normalize_host(host: None, scheme: str | None) -> None: ... - - -@typing.overload -def _normalize_host(host: str, scheme: str | None) -> str: ... - - -def _normalize_host(host: str | None, scheme: str | None) -> str | None: - if host: - if scheme in _NORMALIZABLE_SCHEMES: - is_ipv6 = _IPV6_ADDRZ_RE.match(host) - if is_ipv6: - # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as - # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID - # separator as necessary to return a valid RFC 4007 scoped IP. - match = _ZONE_ID_RE.search(host) - if match: - start, end = match.span(1) - zone_id = host[start:end] - - if zone_id.startswith("%25") and zone_id != "%25": - zone_id = zone_id[3:] - else: - zone_id = zone_id[1:] - zone_id = _encode_invalid_chars(zone_id, _UNRESERVED_CHARS) - return f"{host[:start].lower()}%{zone_id}{host[end:]}" - else: - return host.lower() - elif not _IPV4_RE.match(host): - return to_str( - b".".join([_idna_encode(label) for label in host.split(".")]), - "ascii", - ) - return host - - -def _idna_encode(name: str) -> bytes: - if not name.isascii(): - try: - import idna - except ImportError: - raise LocationParseError( - "Unable to parse URL without the 'idna' module" - ) from None - - try: - return idna.encode(name.lower(), strict=True, std3_rules=True) - except idna.IDNAError: - raise LocationParseError( - f"Name '{name}' is not a valid IDNA label" - ) from None - - return name.lower().encode("ascii") - - -def _encode_target(target: str) -> str: - """Percent-encodes a request target so that there are no invalid characters - - Pre-condition for this function is that 'target' must start with '/'. - If that is the case then _TARGET_RE will always produce a match. - """ - match = _TARGET_RE.match(target) - if not match: # Defensive: - raise LocationParseError(f"{target!r} is not a valid request URI") - - path, query = match.groups() - encoded_target = _encode_invalid_chars(path, _PATH_CHARS) - if query is not None: - query = _encode_invalid_chars(query, _QUERY_CHARS) - encoded_target += "?" + query - return encoded_target - - -def parse_url(url: str) -> Url: - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - This parser is RFC 3986 and RFC 6874 compliant. - - The parser logic and helper functions are based heavily on - work done in the ``rfc3986`` module. - - :param str url: URL to parse into a :class:`.Url` namedtuple. - - Partly backwards-compatible with :mod:`urllib.parse`. - - Example: - - .. code-block:: python - - import urllib3 - - print( urllib3.util.parse_url('http://google.com/mail/')) - # Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - - print( urllib3.util.parse_url('google.com:80')) - # Url(scheme=None, host='google.com', port=80, path=None, ...) - - print( urllib3.util.parse_url('/foo?bar')) - # Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - if not url: - # Empty - return Url() - - source_url = url - if not _SCHEME_RE.search(url): - url = "//" + url - - scheme: str | None - authority: str | None - auth: str | None - host: str | None - port: str | None - port_int: int | None - path: str | None - query: str | None - fragment: str | None - - try: - scheme, authority, path, query, fragment = _URI_RE.match(url).groups() # type: ignore[union-attr] - normalize_uri = scheme is None or scheme.lower() in _NORMALIZABLE_SCHEMES - - if scheme: - scheme = scheme.lower() - - if authority: - auth, _, host_port = authority.rpartition("@") - auth = auth or None - host, port = _HOST_PORT_RE.match(host_port).groups() # type: ignore[union-attr] - if auth and normalize_uri: - auth = _encode_invalid_chars(auth, _USERINFO_CHARS) - if port == "": - port = None - else: - auth, host, port = None, None, None - - if port is not None: - port_int = int(port) - if not (0 <= port_int <= 65535): - raise LocationParseError(url) - else: - port_int = None - - host = _normalize_host(host, scheme) - - if normalize_uri and path: - path = _remove_path_dot_segments(path) - path = _encode_invalid_chars(path, _PATH_CHARS) - if normalize_uri and query: - query = _encode_invalid_chars(query, _QUERY_CHARS) - if normalize_uri and fragment: - fragment = _encode_invalid_chars(fragment, _FRAGMENT_CHARS) - - except (ValueError, AttributeError) as e: - raise LocationParseError(source_url) from e - - # For the sake of backwards compatibility we put empty - # string values for path if there are any defined values - # beyond the path in the URL. - # TODO: Remove this when we break backwards compatibility. - if not path: - if query is not None or fragment is not None: - path = "" - else: - path = None - - return Url( - scheme=scheme, - auth=auth, - host=host, - port=port_int, - path=path, - query=query, - fragment=fragment, - ) diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/util.py b/myenv/lib/python3.12/site-packages/urllib3/util/util.py deleted file mode 100644 index 35c77e4..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/util.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import annotations - -import typing -from types import TracebackType - - -def to_bytes( - x: str | bytes, encoding: str | None = None, errors: str | None = None -) -> bytes: - if isinstance(x, bytes): - return x - elif not isinstance(x, str): - raise TypeError(f"not expecting type {type(x).__name__}") - if encoding or errors: - return x.encode(encoding or "utf-8", errors=errors or "strict") - return x.encode() - - -def to_str( - x: str | bytes, encoding: str | None = None, errors: str | None = None -) -> str: - if isinstance(x, str): - return x - elif not isinstance(x, bytes): - raise TypeError(f"not expecting type {type(x).__name__}") - if encoding or errors: - return x.decode(encoding or "utf-8", errors=errors or "strict") - return x.decode() - - -def reraise( - tp: type[BaseException] | None, - value: BaseException, - tb: TracebackType | None = None, -) -> typing.NoReturn: - try: - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None # type: ignore[assignment] - tb = None diff --git a/myenv/lib/python3.12/site-packages/urllib3/util/wait.py b/myenv/lib/python3.12/site-packages/urllib3/util/wait.py deleted file mode 100644 index aeca0c7..0000000 --- a/myenv/lib/python3.12/site-packages/urllib3/util/wait.py +++ /dev/null @@ -1,124 +0,0 @@ -from __future__ import annotations - -import select -import socket -from functools import partial - -__all__ = ["wait_for_read", "wait_for_write"] - - -# How should we wait on sockets? -# -# There are two types of APIs you can use for waiting on sockets: the fancy -# modern stateful APIs like epoll/kqueue, and the older stateless APIs like -# select/poll. The stateful APIs are more efficient when you have a lots of -# sockets to keep track of, because you can set them up once and then use them -# lots of times. But we only ever want to wait on a single socket at a time -# and don't want to keep track of state, so the stateless APIs are actually -# more efficient. So we want to use select() or poll(). -# -# Now, how do we choose between select() and poll()? On traditional Unixes, -# select() has a strange calling convention that makes it slow, or fail -# altogether, for high-numbered file descriptors. The point of poll() is to fix -# that, so on Unixes, we prefer poll(). -# -# On Windows, there is no poll() (or at least Python doesn't provide a wrapper -# for it), but that's OK, because on Windows, select() doesn't have this -# strange calling convention; plain select() works fine. -# -# So: on Windows we use select(), and everywhere else we use poll(). We also -# fall back to select() in case poll() is somehow broken or missing. - - -def select_wait_for_socket( - sock: socket.socket, - read: bool = False, - write: bool = False, - timeout: float | None = None, -) -> bool: - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - rcheck = [] - wcheck = [] - if read: - rcheck.append(sock) - if write: - wcheck.append(sock) - # When doing a non-blocking connect, most systems signal success by - # marking the socket writable. Windows, though, signals success by marked - # it as "exceptional". We paper over the difference by checking the write - # sockets for both conditions. (The stdlib selectors module does the same - # thing.) - fn = partial(select.select, rcheck, wcheck, wcheck) - rready, wready, xready = fn(timeout) - return bool(rready or wready or xready) - - -def poll_wait_for_socket( - sock: socket.socket, - read: bool = False, - write: bool = False, - timeout: float | None = None, -) -> bool: - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - mask = 0 - if read: - mask |= select.POLLIN - if write: - mask |= select.POLLOUT - poll_obj = select.poll() - poll_obj.register(sock, mask) - - # For some reason, poll() takes timeout in milliseconds - def do_poll(t: float | None) -> list[tuple[int, int]]: - if t is not None: - t *= 1000 - return poll_obj.poll(t) - - return bool(do_poll(timeout)) - - -def _have_working_poll() -> bool: - # Apparently some systems have a select.poll that fails as soon as you try - # to use it, either due to strange configuration or broken monkeypatching - # from libraries like eventlet/greenlet. - try: - poll_obj = select.poll() - poll_obj.poll(0) - except (AttributeError, OSError): - return False - else: - return True - - -def wait_for_socket( - sock: socket.socket, - read: bool = False, - write: bool = False, - timeout: float | None = None, -) -> bool: - # We delay choosing which implementation to use until the first time we're - # called. We could do it at import time, but then we might make the wrong - # decision if someone goes wild with monkeypatching select.poll after - # we're imported. - global wait_for_socket - if _have_working_poll(): - wait_for_socket = poll_wait_for_socket - elif hasattr(select, "select"): - wait_for_socket = select_wait_for_socket - return wait_for_socket(sock, read, write, timeout) - - -def wait_for_read(sock: socket.socket, timeout: float | None = None) -> bool: - """Waits for reading to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, read=True, timeout=timeout) - - -def wait_for_write(sock: socket.socket, timeout: float | None = None) -> bool: - """Waits for writing to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, write=True, timeout=timeout) diff --git a/myenv/lib64 b/myenv/lib64 deleted file mode 120000 index 7951405..0000000 --- a/myenv/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/myenv/pyvenv.cfg b/myenv/pyvenv.cfg deleted file mode 100644 index 6ee1e4e..0000000 --- a/myenv/pyvenv.cfg +++ /dev/null @@ -1,5 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.12.13 -executable = /usr/bin/python3.12 -command = /usr/bin/python3.12 -m venv /home/teg/Documents/sp-hydra-veil-gui/myenv